Forum: Mikrocontroller und Digitale Elektronik MSP430 Spannung erkennen des AD Wandlers


von Angelo S. (elshaarawy)


Lesenswert?

Hallo Zusammen

Wie kann man die Spannungshöhe erkennen bei dem MSP 430F449.

Meine Aufgabe ist es sobald die Spannung 0.25 von VCC ist, dass es dann 
der Komparator erkennt und einen Interrupt kommt.
Das soll die Freigabe für die Wandlung des AD Wandlers sein.
Anschliessend muss ich die höchste Spannung und die tiefste Spannung 
haben, da ich danach etwas rechnen muss.
Wie kann ich die höchste Spannung und die tiefets Spannung erkennen?

Besten Dank:)

von someone (Gast)


Lesenswert?

Was konkret funktioniert an deinem bisherigen Programm denn nicht? Die 
Vorgehensweise, die du beschreibst, hört sich zumindest schonmal 
einigermaßen richtig an. Es ist daher leider nicht leicht, dir zu 
helfen, wenn du nicht sagst, wobei du jetzt das Problem hast.

von Angelo S. (elshaarawy)


Lesenswert?

Das habe ich bisher gemacht. jetzt bleibe ich stecken bei der If abfrage 
(case6).
Wenn die referenzspannung 0.25 von VCC ist, soll er den interrupt geben.

Anschliessend soll der AD wandler zum zug kommen.
Und dann sollte ich die höchste und die tiefste Spannung haben, damit 
ich weiter machen kann.

void ADwandler(void)
{
 WDTCTL = WDTPW + WDTHOLD;              // Stop WDT

 P2DIR |= 0x02;                         // P2.1 output for 10kHz clock 
(Pin 18)
 TA0CCTL0 = CCIE;                       // CCR0 interrupt enabled
 TA0CCR0 = 51;                          // change that to a bigger 
number
 TA0CTL = TASSEL_2 + MC_1;              // SMCLK, upmode, clear TAR*/

 P1DIR |= 0x02;                         // P1.1 output for ADC
 ADC12CTL0 = SHT02 + ADC12ON;           // Sampling time, ADC12 on
 ADC12CTL1 = SHP;                       // Use sampling timer
 ADC12IE = 0x01;                        // interrupt verfübbar
 ADC12CTL0 |= ENC;                      // Umwanldung verfügbar
 ADC12CTL0 |= CAREF_1;                  // 0.25 von VCC
 P6SEL |= 0x01;                         // P6.0 ADC option select

 while (1)
 {
 ADC12CTL0 |= ADC12SC;                  // Start sampling/conversion
 __bis_SR_register(LPM0_bits + GIE);    // LPM0, ADC12_ISR will force 
exit
 //__no_operation(); // For debugger
 }
}
#pragma vector = ADC12_VECTOR           //
__interrupt void ADC12_ISR(void)        //
{
 int ergebnis;
 switch(__even_in_range(ADC12IV,34))    //
 {
 case 0: break;                         // Vector 0: No interrupt
 case 2: break;                         // Vector 2: ADC overflow
 case 4: break;                         // Vector 4: ADC timing overflow
 case 6:                                // Vector 6: ADC12IFG0

 if(CAREF_1)                            //  0.25 von VCC?
 {

 }
 __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU
 case 8 : break;        // Vector 8: ADC12IFG1
 case 10: break;        // Vector 10: ADC12IFG2
 case 12: break;        // Vector 12: ADC12IFG3
 case 14: break;        // Vector 14: ADC12IFG4
 case 16: break;        // Vector 16: ADC12IFG5
 case 18: break;        // Vector 18: ADC12IFG6
 case 20: break;        // Vector 20: ADC12IFG7
 case 22: break;        // Vector 22: ADC12IFG8
 case 24: break;        // Vector 24: ADC12IFG9
 case 26: break;        // Vector 26: ADC12IFG10
 case 28: break;        // Vector 28: ADC12IFG11
 case 30: break;        // Vector 30: ADC12IFG12
 case 32: break;        // Vector 32: ADC12IFG13
 case 34: break;        // Vector 34: ADC12IFG14
 default: break;
}
}

// Timer0 A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
{
 P2OUT ^= 0x02;         // Toggle P2.1 for 10kHz clock (Pin 18)
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.