Hallo MSP430 Kenner ich versuche den A/D Wandeler (SD16) in einem 430f427 zu benutzen. Leider bekomme ich nur Werte die keinen Bezug zu dem erwarteten Meßwert haben. Die Werte liegen immer oberhalb 60000 egal was ich zu Messen versuche. Wenn ich zB den interne gebrückten Kanal Messe bekomme ich auch keine 0 Werte sonder 60112 und der wert ist nicht stabil. Ich habe mal mein Testprogamm angefügt vielleicht hat jemand ja eine Idee was ich verkehrt mache augenblicklich bin ich zimlich ratlos. ************************************************************************ ** #include <stdio.h> #include <intrinsics.h> #include "paul.h" #include <io430x42x.h> static unsigned int ADCresult; static BOOL fADEnde = FALSE; // int SD16 Wandeler void InitSD16(void) { volatile unsigned int i; // Use volatile to prevent removal // by compiler optimization __disable_interrupt(); SD16CTL = SD16REFON + SD16SSEL1 + SD16DIV0 + SD16DIV1; // 1.2V ref, SMCLK SD16CCTL2 |= SD16SNGL+SD16IE+SD16DF ; // Single conv, enable interrupt SD16INCTL2 |= SD16INCH0 +SD16INCH1+ SD16INCH2 + SD16INTDLY1; // Select Channel A7 for (i = 0; i < 0x3600; i++); // Delay for 1.2V ref startup __enable_interrupt(); } // InitSD16 int main( void ) { // extern 32khz FLL_CTL0_bit.XTS_FLL = 0; WDTCTL = WDTPW + WDTHOLD; // WD aus InitSD16(); for (;;) { volatile unsigned int i; // volatile verhindert das wegoptimiert wird fADEnde = FALSE; SD16CCTL2 |= SD16SC; // Set bit to start conversion // __low_power_mode_1(); // Enter LPM0 while (!fADEnde){} __no_operation(); //SET BREAKPOINT HERE //******** } } #pragma vector=SD16_VECTOR __interrupt void SD16ISR(void) { switch (SD16IV) { case 2: // SD16MEM Overflow break; case 4: // SD16MEM0 IFG break; case 6: // SD16MEM1 IFG break; case 8: // SD16MEM2 IFG ADCresult = SD16MEM2; // Save CH2 results (clears IFG) fADEnde = TRUE; break; } // __low_power_mode_0(); // Exit LPM0 } ************************************************************************ ** Paul
Hat sich erledigt. Ist eigentlich alles ok. Ich habe nur einen relativ großen Null offset (ca 100mV) und nicht bedacht das bei einem 2er Komplemet 60000 ja nah 0 ist. Paul
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.