ADC-Kanäle an Atmega168 auswerten

Gast #1391648
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
#1391673
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)?
Gast #1391825
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren