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.