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:)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.