Gast
#2733486
Hallo Leute.
Ich möchte gern mit einem ATMega64A (Versorgung 3,3V DC) diverse
Gleichspannugen mit dem internen AD Wandler messen. Unter anderem auch
die externe Referenzspannung von 3V (angeschlossen an AREF). Diese habe
ich direkt an Kanal 4 (PF04) des AD Wandlers angeschlossen.
Im Programmablauf wird der ADC immer nur aktiviert, wenn dieser benötigt
wird. Danach wird er wieder abgeschaltet.
Mein Code:
unsigned int read_adc(unsigned char adc_input)
{
unsigned char i;
unsigned int result;
// Frequenzvorteiler auf 32 setzen und ADC aktivieren
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
// externe Referenz 3V, AD- Kanal wählen
ADMUX |= adc_input;
ADCSRA |= (1<<ADSC); // Dummy auslesen
while ( ADCSRA & (1<<ADSC) ); // und warten
// Messung --> Mittelwert aus 60 aufeinanderfolgenden Messungen
for(i=0;i<60;i++) {
ADCSRA |= (1<<ADSC); // Wandlung starten
while ( ADCSRA & (1<<ADSC) ); // warten
result += ADCW; // Wandlungsergebnisse aufaddieren
}
ADCSRA &= ~(1<<ADEN); // Messung beendet --> AD-Wandler deaktivieren
ADMUX = 0x00;
return result/60;
}
Jetzt habe ich fesgestellt, läuft der µC mit dem internen Oszillator bei
einer Frequenz von 1MHz und wird die Wandlung in einer While (1)
Schleife ständig wiederholt, kann ich am Referenzpin einen
Spannungeinbruch von 3V (externe Referenz) auf 2,87V messen.
Wie kann das sein? Wieso bricht meine externe Referenzspannung zusammen?
Habe ich falsch initialisiert?
Wie müssen die PORT PINS initialisiert werden für die Nutzung des AD
Wandlers?
Danke für jede Hilfe
PS: als Referenz verwende ich einen LM4040A30 mit einem Vorwiderstand
von 3k.