Hi, ich stehe vor einem kleinen Problem. Und zwar habe ich mir ein Programm geschrieben, welches jede Sekunde einemal eine Wert des ADC12 digitalisiren soll. Der Timer funktioniert auch und der Interrupt wird auch aufgerufen. Jedoch scheint sich der MSP sich bei der digitalisierung festzufahren oder der ADC12 ist defekt. Code: void init_adc(void) //initialisiert den ADC12 auf Kanal 10 Tempdiode { P6SEL=0x1; // port 6 = input ADC12CTL0 = ADC12ON+SHT0_0+REFON+REF2_5V; // ADC12 anschalten, n=1, referenz auf 2,5V setzen ADC12CTL1 = SHP; // SHP benutzen ADC12MCTL0 = SREF_1+INCH_0; // Vr+=Vref+ ADC12CTL0 |= ENC; // jetzt anfangen ... } void init_timer(void) { CCTL0 = CCIE; // CCR0 interrupt enabled CCR0 = 32768-1; // Counter so gewählt, daß 1 Hz Taktinterrupt ausgelöst wird TACTL = TASSEL_1 + MC_1; // ACLK, upmode } // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { ADC12CTL0 |= ADC12SC; // Start conversion while ((ADC12IFG & BIT0)==0); TXBUF0 = 't'; temps[count] = ADC12MEM0; count++; //Zähler hochsetzen if(count == 10) TACTL = MC_0; //Timer stoppen } UART ist richtig konfiguriert, weil ich den Timer erst durch tastendruck starte und mir das Zeichen ausgeben lasse. Nur das t erscheint nicht und wenn ich die while schleife umbaue, sodass er solange er BUSY ist mir ein Zeichen über den UART sendet, spammt er mich voll. Also kommt er aus dem BUSY nicht mehr raus. Nun die Frage ist der ADC12 kaputt oder liegt ein konfigurationfehler vor. vielen dank
Also ich kann hier keinen Fehler sehen. Sicher, dass du die Initialisierung durchführst?
@Peter Ist das A/D-Modul des MSP430 von Texas Instruments @Michael Ja ich rufe die init_adc() in der main-routine auf genauso wie die des UART. Der Timer wird ja erst durch tastendruck aktiviert. void main(void) { WDTCTL = WDTPW + WDTHOLD; // watchdog aus FCTL2 = FWKEY + FSSEL0 + FN1; // MCLK/3 for Flash Timing Generator flash_ptr = (char *) startaddr; //startwert für den Flash festlegen count = 0; init_adc(); init_uart(); _BIS_SR(LPM0 + GIE); // ab in den LPM0 mit interrupts ... } also ka warum sich das Ding so festfährt :( Kann man den Thread auch in die Sektion des MSP430 verschieben? Habe den Eindruck er wird sonst überlesen ...
Funktioniert denn eine der anderen Varianten? - ADC12BUSY in ADC12CTL1 = 1 während der Wandlung - ADC12SC in ADC12CTL0 sollte auch automatisch auf 0 gehen, wenn die Wandlung fertig ist - eigene ISR für den AD-Wandler
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.