Analogwerte einlesen in C MSP430

Gast #1181686
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
#1182023
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
Persönliche Seite #1183091
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.
Persönliche Seite #1183247
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.