mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Analogwerte einlesen in C MSP430


Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ADC10IE
Wo ist die zugehörige Interrupt Routine?

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

Autor: Stefan (Gast)
Datum:

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

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

Autor: Marc (Gast)
Datum:

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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein der Eingang soll als Absolutwert gemessen werden.

0V entspicht 00h

3.3V enspricht ..h

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Eingangsspannung wird maximal so hoch wie die Versorgungsspannung.

> Nimm einen Spannungsteiler und verwende die eingebaute Referenz.

Warum soll ich einen Spannungsteiler nehmen??

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.