Kann mir jmd nen Link geben, oder auch direkt erklären, wie ich soetwas in Assembler code?
Hallo Storchi,
die Bandgap-Referenz stimmt selten. Laut Datenblatt kann sie sogar zwischen 2,3 und 2,7V liegen.
CU, Robin
Kann mir jmd nen Link geben, oder auch direkt erklären, wie ich soetwas in Assembler code?
Hi,
Ich habe den obgien Code probiert und bekomme Spannungen um die 4,2 V heraus, aber es liegen 5,1 V an. Ich habe dann versucht die Referenzspannung zu finden, was laut Datenblatt auf dem PIN 20 oder 21 ist. Ist auch egal, denn an beiden Pins liegen 5,1 Volt. Ich habe die Werte, die Batterie() liefert mal angesehen und bekomme z.B. für 4,96 Volt Batteriespannung den Wert 855 zurück.
Was mache ich falsch?
Ach so, was soll eigentlich das *22/10 hinter der Formel?
Vermutlich braucht man diesen Faktor, wenn die Batterie() Funktion statt der Bandgap von 2.56V die Versorgung VCC (5V) als Referenz verwendet. Dann funktioniert die Spannungsmessung aber ohnehin nicht richtig, wie hier im Thread beschrieben.Ach so, was soll eigentlich das *22/10 hinter der Formel?
Schau bei chris.lugr.de, dort steht die korrekte Meßfunktion.
Gruss,
stochri
Ahh, ich seh schon.
Die 22/10 kommt von 12kOhm+10kOhm/10kOhm, was die Widerstandskombination darstellt.
Ok, aber wo bekomme ich meine Referenzspannung her?
Ich dachte eigentlich, die liegt an AREV oder AVCC, oder an welchem PIN kann ich mich anklemmen?
Upps, da habe ich mich wohl vertan. Ist auch schon etwas länger her ...Die 22/10 kommt von 12kOhm+10kOhm/10kOhm, was die Widerstandskombination darstellt.
Der AD-Wandler kann seine Rerferenzspannung aus 3 Quellen beziehen ( Datenblatt 2486M-AVR-12/03 für ATmega8 S.203)
AVCC
VBandgap
Aref
Wenn man AVCC als Referenz einstellt, sollte an ARef die Spannung AVCC anliegen.
Wenn man VBandgap einstellt, sollt man an Aref die interne Spannung messen können.
Gruss,
stochri
Mhhh, also dochmal für Dummies (wie mich)
Mit welchem Code kann ich einstellen, dass ca. 2.56V Referenzspannung genommen wird?
An welchem Pin kann ich das mal nachmessen?
Also, wie gesagt die Pins 20 und 21 AREF und AVCC haben bei mir die Akkuspannung von um 5 Volt. (Hab ihn jetzt leer gespielt )
Mir leuchtet ein, dass man die Referenzspannung sicherlich irgendwo definieren kann und die als Bezugspunkt zur ADWandlung herhält, was dann auch die Rechnung erklärt.
Aber wie stelle ich wo was ein?
Danke schon mal für all die fleissigen Antworten.
Nur so meine gedanken dazu....
Da gibts noch ein gedanken fehler glaub ich.Der AD-Wandler kann seine Rerferenzspannung aus 3 Quellen beziehen ( Datenblatt 2486M-AVR-12/03 für ATmega8 S.203)
AVCC
VBandgap
Aref
Die Referenz(spannungen) sind:
- AVCC
- Internal 2.56V (nicht VBandgap)
- Aref
Mann kann neben dem 8 ubligen AD-eingangen auch VBandgap als Eingang selectieren. (Fig 90, Pag 197, datenblat)
Damit kan mann die VBandgap Spannung messen.
Die Referenzspannung von 2.56V wird abgeleitet vom VBandgap.
VBandgap sollte 1.23V sein. ( = 256 / 2)
Da VBandgap abweichen kann zwischen 1.15V und 1.40V sollte auch die abgeleitete 2.56V referenzspannung
abweichen konnen vom 2.30V (2*1.15V) bis zum 2.80V (2*1.40V).
Wenn mann die 2.56V als referenzspannung einschaltet dann ist die maximalen Wert die auf Eingang PC5 gemessen werden kann
2.56V. Dass stimmt uberein mit hex Wert 0x3FF oder dezimal 1023. Da representiert jedes bit vom ad-wandlung 2.56V / 1024
ist 2.5mV. Durch die spannungteiler 12K/10K representiert jedes bit einen wert von 2,5mV*2.2=5.5mV.
So eine gemessene ADC Wert von hex 0x391 = Dezimal 913 stimmt uberein mit 913 * 5.5mV = 5.02V Batteriespannung.
Ich hab's bei meinen Asuro nachgemessen (mit ein billiges messgerat...) Ich messe 2.41V auf pin28 (ADC5) und gleichzeitig ein ADC Wert von 0x391 (Dezimal 913)
Dies sind 2.41V / 913 bit = 2.64mV pro bit (sollte 2.50mV pro bit sein)
Ist doch gar nicht schlecht.
Gruss
Henk
//ADEN: ad-wandler einschaltenAber wie stelle ich wo was ein?
//ADPS: ad-wandler prescaler 6
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);
//REFS: internen 2.56V selektieren
//MUX: ad-wandler 5 selektieren
ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<MUX2) | (1<<MUX0);
gruss
Henk
Die hex datei zum auslesen steht hier:
http://home.planet.nl/~winko001/Asur...uSfwPagFrm.htm
gruss
Henk
Lesezeichen