www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC-Kanäle an Atmega168 auswerten


Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Programm, in dem ich eine Spannung am AD-Wandeler des 
Atmega168 messen möchte. Bis jetzt funktioniert das Programm auch sehr 
gut. Ich möchte aber einen anderen Pin nutzen, um die Messung 
durchzuführen, dabei gibs aber Probleme. Momentan nutze ich ADC0 (PC0), 
würde aber gerne an ADC6 oder 7 messen. Das Programm funktioniert nur an 
ADC0, an keinem anderen ADC-Pin.
Initialisierung:

//externe Vref nutzen
  ADMUX  =  0;  //kann eigentlich entfallen, da Initial 0x00
                            //externe Vref -> REFS1=0, REFS0=0

//A/D-Wandler: Enable,  Vorteiler auf 128
  ADCSRA  |=  ( (1<<ADEN)  |  (1<<ADPS2)  |
                          (1<<ADPS1)  |  (1<<ADPS0) );

//Dummy-Wandlung
  ADCSRA    |=  (1<<ADSC);
  while (ADCSRA & (1<<ADSC) );
  adc_val_1  =  ADC;

Unterprogramm aus Tutorial:

//Wert von A/D-Wandler lesen
//AD-Pin wird übergeben, AD-Wert zurück
uint16_t ReadADCChannel(uint8_t channel){
  uint16_t result;

//Kanal wählen
  ADMUX  =  channel;

//Messung
  ADCSRA  |=  (1<<ADSC);
  while (ADCSRA & (1<<ADSC) );

  result  =  ADC;

  return result;
}

Aufruf im Hauptprogramm:

adc_val_1  =  ReadADCChannel(0);

Der Aufruf mit 0 funktioniert, schließe ich meine Messleitung an einen 
anderen Pin an und lasse an diesem messen, funktioniert mein Programm 
nicht. Kann mir jemand helfen?
Gruß Paul

Autor: Richard U. (ronw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was funktioniert denn an dem Programm nicht, wenn es mit einem anderen 
Kanal als 0 aufgerufen wird?

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DAS MUSS VOR DER DUMMY WANDLUNG STEHEN.

//Kanal wählen
  ADMUX  =  channel;

Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will halt auf einen bestimmte Spannungsschwelle reagieren. Ich messe 
an einen bestimmten Zeitpunkt die Spannung und wenn sie unter einem 
bestimmten Wert liegt, reagiere ich darauf.

Autor: Richard U. (ronw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gast schrieb:
> DAS MUSS VOR DER DUMMY WANDLUNG STEHEN.
>
> //Kanal wählen
>   ADMUX  =  channel;

Das stimmt nicht. Die Dummy-Wandlung taucht im Datenblatt lediglich in 
Zusammenhang mit der Referenzquelle auf. Den Kanal kann man eigentlich 
problemlos ändern, ohne eine Dummy-Wandlung vorzunehmen.

@paul
Ist der entsprechende Port denn richtig konfiguriert (also als Eingang 
ohne Pull-up)?

Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja PortC ist als Eingang konfiguriert. Mit der Messung an PC0/ADC0 
funktionierts auch, aber an allen anderen Pins nicht (ADC6 und 7 sind 
nicht am PortC).
@ Richard W: Mir ist grade aufgefallen, dass ich den Dummy-Read-Out 
immer nur für ADC0 mache. Bist du sicher, dass es egal ist an welchem 
Pin der Dummy-Read-Out gemacht wird?

Autor: Richard U. (ronw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal ins Datenblatt. Der Dummy-Readout ist nur dafür da, 
fehlerhafte Messungen zu verhindern, wenn die Referenzquelle geändert 
wurde und die Spannung sich noch nicht stabilisiert hat. Ansonsten fällt 
mir so nichts weiteres ein...

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.