Hallo, erst mal ich bin ein Anfänger in C. Ich soll in ein fertig funktinierendes Programm ein Unterprogramm einbauen. Dieses soll den Analogwert vom AE5 einlesen und in eine Speicherzelle schreiben. Hier mein code: ////////////////////////////////////////////////////////////////// //Init ADC//////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// void Init_ADC (void) { ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE + /*ENC +*/ ADC10SC; ADC10CTL1 = INCH_5 + SHS_0 + CONSEQ_0; ADC10AE |= ADC10AE5; //+ ADC10AE4 + ADC10AE3; ADC10CTL0 = ENC; } Wo ist denn da der Fehler. eigentlich müsste doch so der Analogwert eingelesen werden und in die Speicherstelle ADC10MEM geschrieben werden. Grüße Marc
1 | ADC10IE
|
Wo ist die zugehörige Interrupt Routine? Welcher MSP genau? Der Einfgang soll wirklich im Bezug zu AVcc gemessen werden?
Wie so oft gilt: Initialisieren und dann erst messen! (IRQ-Problem wurde ja schon angesprochen) ADC10CTL0 = ADC10SHT_2 + ADC10ON; ... ADC10CTL0 |= ENC + ADC10SC;
Ich hab noch keine Interruptroutine geschrieben. Brauch ich die? Und wenn wie sieht die dann aus?
Nein der Eingang soll als Absolutwert gemessen werden. 0V entspicht 00h 3.3V enspricht ..h
>Ich hab noch keine Interruptroutine geschrieben. Brauch ich die? Als Anfänger würde ich ohne Interupts empfehlen. Also ADC10IE entfernen. >0V entspicht 00h >3.3V enstricht ..h Das ist klar, die Frage ist nur wie hoch wird die Spannung die du messen willst und wie genau soll es sein. Aktuell versorgst du den ADC mit deiner Versorgungsspannung als Referenz. Wenn deine Versorgungsspannung schwankt, schwankt auch der Messwert falls er nicht auch abhängig von der Versorgungsspannung ist. Der MSP hat intern aber auch 2 Referenzspannungen (1,5V/2,5V) die du nutzen könntest. Die Beispiele von TI kennst du? http://www.ti.com/lit/zip/slac013
Die Eingangsspannung wird maximal so hoch wie die Versorgungsspannung. Die Beispiele kenn ich. Aber da ich es in ein bestehendes Programm einbinden muss, kann ich es nicht verwenden.
> Die Eingangsspannung wird maximal so hoch wie die Versorgungsspannung. Nimm einen Spannungsteiler und verwende die eingebaute Referenz. > Aber da ich es in ein bestehendes Programm einbinden muss, kann ich es > nicht verwenden. Nun, Du kannst Dir das Beispiel aber trotzdem ansehen, und im User's Guide nachsehen, was die einzelnen im Beispiel getriebenen Dinge so machen. Wenn Du das verstanden hast, ist es ein leichtes, die Erkenntnisse in das bestehende Programm einzubinden. Die TI-Dokumentation ist zwar recht knapp, aber vollständig. Den ADC anzusteuern ist keine Geheimwissenschaft. Einen Interrupthandler muss man nicht unbedingt verwenden, man kann den ADC auch pollen. Dazu musst Du nach ausgelöster Wandlung das Flag ADC10IFG abfragen. Das setzt natürlich voraus, daß in der Initialisierung das Interrupt-Enable-Flag nicht gesetzt wird. Sieh Dir einfach mal das Zustandsdiagramm im User's Guide für ADC10 Single-Channel Single-Conversion Mode an.
> Die Eingangsspannung wird maximal so hoch wie die Versorgungsspannung. > Nimm einen Spannungsteiler und verwende die eingebaute Referenz. Warum soll ich einen Spannungsteiler nehmen??
Wenn Du die eingebaute Referenz verwendest, darf die maximale gemessen Spannung nur 2.5V oder sogar nur 1.5V betragen. Da Dein Signal aber "maximal so hoch wie die Versorgungsspannung" wird, also etwa 3V, musst Du einen Spannungsteiler verwenden, um die Spannung in eine geeignete messbare umzuwandeln. Die Verwendung der internen Referenzspannungsquelle sorgt dafür, daß Schwankungen der Versorgungsspannung nicht das Messergebnis verfälschen.
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.