Hallo, versuche grade bei dem oben genannten uC den ADC zum laufen zu bringen leider funktioniert er nicht so wie ich will, er schreibt einfach keinen Wert in den ADC10MEM0 speicher und setzt den ADC10SC nicht automatisch zurück. Ich hoffe Ihr könnt meinen Denkfehler finden bzw. mir noch ein paar Ratschläge geben. Angelegt ist VCC an P1.2. // Includes #include "msp430fr5739.h" // Definitions #define dv 0.0034765625 // Global Variables unsigned int delay=0, status=0, i=0, cache=0, cache1=360; double volt=0; // Function Definitions# void ADC_init(); void Clock_init(); // main int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; Clock_init(); ADC_init(); // BEAK_TRIG @ P3.0 P3DIR |= BIT0 ; P3OUT |= BIT0 ; // Beak low // Lamp Charge Time TA0CCTL0 = CCIE ; // Enable Interrupt CCR0 TA0CCR0 = 65536-1 ; // 1/24MHz*65536= 0.00273066666 TA0CTL |= TASSEL_1 + MC_1 + TACLR ; // ACLK, up to CCR0, clear TA0R // Delay TA1CCTL0 = CCIE; // Enable Interrupt CCR0 TA1CCR0 = cache1-1; // delay start with 360 = 15us TA1CTL |= TASSEL_1 + MC_1 + TACLR; // ACLK, up to CCR0, clear TA1R __enable_interrupt(); P3OUT &=~ BIT0 ; // Beak high for(;;) { }// wait for interrupt } // Function // Clock initalisieren void Clock_init() { PJSEL1 &= ~BIT4 ; PJSEL0 |= BIT4 ; CSCTL0_H = 0xA5 ; // Unlock register CSCTL2 = SELM__XT1CLK + SELS__XT1CLK ; // XT1=SMCLK=MCLK CSCTL4 = XTS + XT1DRIVE_3 ; // High Frequency CSCTL3 = 0; // No Division CSCTL5 &=~ XT1OFFG; CSCTL0_H = 0x01; // Lock register for(unsigned int i=0 ;i==60000; i++) { } } //ADC initialisieren void ADC_init() { P1SEL1 |= BIT2 ; P1SEL0 |= BIT2 ; ADC10CTL0 = ADC10SHT_2 + ADC10ON ; // Sample and Hold cycles 16, enable ADC ADC10CTL1 = ADC10SSEL_3 ; // SMCLK ADC10MCTL0 = ADC10INCH_2 ; // P1.2 } // Interrupt Service Routine // Lamp Charge Time #pragma vector = TIMER0_A0_VECTOR __interrupt void T0_CCR0_ISR() { if(++i==17); { i=0; TA1CCTL0 |= CCIE; // start Delay Interrupt P3OUT &=~ BIT0; // Beak high } } // Delay #pragma vector = TIMER1_A0_VECTOR __interrupt void T1_CCR0_ISR() { while (ADC10CTL1 & ADC10BUSY); // coversion ? ADC10CTL0 |= ADC10ENC + ADC10SC ;// start conversion TA1CCTL0 &=~ CCIE; //Disable Delay Interrupt P3OUT |= BIT0; // Beak low if(ADC10MEM0>cache) { cache=ADC10MEM0; switch(status) { case 0: delay = cache1; cache1 += 2; // raise delay TA1CCR0 = cache1-1; break; case 1: volt = cache*dv; // convert memory in volt break; } } if(cache1==482)//20us { TA1CCR0 = delay-1 ; cache=0; cache1=216; status=1; } }
Jetzt kommt die bei Problemen mit MSP430-Peripherie übliche Standardfrage, ob Du Dir die zu der von Dir verwendeten Familie passenden Codebeispiele von TI angesehen hast ... Und diese Zeile solltest Du Dir auch noch mal ganz genau ansehen: > for(unsigned int i=0 ;i==60000; i++)
Habe mir schon Beispiele angesehen, finde aber, das es zu dieser Familie nicht viele gibt. (z.B bei noccy.com) Allerdings werde ich da nicht schlau draus die meisten Arbeiten mit dem ADC interrupt, den ich bei mir nicht verwende müsste ja auch ohne gehen.
Durch änderung der Zeile
> ADC10CTL1 = ADC10SSEL_3 + ADC10SHP ;
funktioniert es soweit.
Dragofolio schrieb: > Habe mir schon Beispiele angesehen, finde aber, das es zu dieser Familie > nicht viele gibt. (z.B bei noccy.com) Es geht nicht um irgendwelche Beispiele von irgendwo, sondern um die von TI höchstselbst.
Habe nochmal genau nach den TI-Beispielen geschaut. Wie der Zufall es so will waren es genau die gleichen Beispiele (der Autor hatte Sie bestimmt von TI hochgeladen). Vll stell ich mich auch nur blöd an bei der Programmierung, finde es aber mit dem G2231 irgendwie einfacher da hat es wenigstens funktioniert. Habe nähmlich schon das nächste Problem aber erstmal recherchieren. Ich bedanke mich schonmal für die Antworten, dass sich zumindestens jemand meinen Probleme annimmt.
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.