Forum: Mikrocontroller und Digitale Elektronik Analogwerte einlesen in C MSP430


von Marc (Gast)


Lesenswert?

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

von Jörg S. (joerg-s)


Lesenswert?

1
ADC10IE
Wo ist die zugehörige Interrupt Routine?

Welcher MSP genau?
Der Einfgang soll wirklich im Bezug zu AVcc gemessen werden?

von Stefan (Gast)


Lesenswert?

Wie so oft gilt: Initialisieren und dann erst messen!
(IRQ-Problem wurde ja schon angesprochen)

ADC10CTL0 = ADC10SHT_2 + ADC10ON;
...
ADC10CTL0 |= ENC + ADC10SC;

von Marc (Gast)


Lesenswert?

Ich hab noch keine Interruptroutine geschrieben. Brauch ich die? Und 
wenn wie sieht die dann aus?

von Marc (Gast)


Lesenswert?


von Marc (Gast)


Lesenswert?

Nein der Eingang soll als Absolutwert gemessen werden.

0V entspicht 00h

3.3V enspricht ..h

von Jörg S. (joerg-s)


Lesenswert?

>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

von Marc (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Marc (Gast)


Lesenswert?

> Die Eingangsspannung wird maximal so hoch wie die Versorgungsspannung.

> Nimm einen Spannungsteiler und verwende die eingebaute Referenz.

Warum soll ich einen Spannungsteiler nehmen??

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.