Ich habe mich etwas mit der o.g. Thematik beschäftigt und die Sache
funktioniert auch, allerdings die Umrechnung der Werte in die
tatsächliche Spannung verwirrt mich etwas.
Zitat aus dem AVR-GCC-Tutorial:
>Die interne Referenzspannung wird auf Vcc bezogen, eine externe
>Referenzspannung auf GND (Masse). Davon unabhängig werden digitalisierte
>Spannungen immer auf GND bezogen. Beim ATMEGA8 z.B. ist der Pin AREF über
>32kOhm mit GND verbunden, d.h. man muss diese doch extrem niedrige
>Eingangsimpedanz mit in die Berechnung für einen Spannungsteiler
>einbeziehen, bzw. kann diesen Widerstand als R2 gleich mit benutzen. Formel
>für Spannungsteiler: Udiv = U / ((R1 + R2) / R2)
Ähm..ja wie was denn jetzt bezogen auf VCC oder Masse? Die 32kOhm kann
ich im Datenblatt des ATMega8 auch nicht finden...
Im Datenblatt findet man folgende Formel:
Ich habe einen Spannungsteiler aufgebaut, vom ADC-Pin gehen 18kOhm zu
meinem zu messenden
Potential U und 12kOhm nach GND, also ist die gemessene Spannung:
Damit kann ich mir folgendes zusammenbauen:
Umgeformt:
Um an meine Spannung zu kommen, müsste ich also den Wert in ADC einfach
durch 266 1/3 teilen. Wenn ich aber mit dem Multimeter nachmesse, sind
es 5,41V bei einem Wert von 845, also müsste ich ihn ungefähr durch
156,1 teilen und nicht durch 266 1/3. Wo liegt mein Fehler?
Ach ja den ADC starte ich folgendermaßen:
1 | //Kanal wählen, Batteriespannung: PC0
|
2 | ADMUX = PC0;
|
3 | // interne Referenzspannung nutzen
|
4 | ADMUX |= (1<<REFS1) | (1<<REFS0);
|
5 | //Free Running Modus, ADC Enable, ADC-Prescaler 128
|
6 | ADCSRA |= (1<<ADFR)|(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
|
7 | //ADC starten
|
8 | ADCSRA |= (1<<ADSC);
|
Danke im Voraus!