Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro Batteriestands Anzeige?
Hi an Alle
ich habe mich gefragt ob man nicht den Asuro dazu bringen könnte anzuzeigen wie voll seine Batterien sind und das alles dan über IR wider an den Computer zurück schicken kann.
geht das?
hat das schon mal jemand versucht? und wenn ja hat er es geschafft?
danke schonmal im Vorraus
___________________________
MFG A.T.I.R
linux_80
23.06.2005, 19:22
Hallo,
Du könntest versuchen den ADC5 anzuzapfen(softwaremässig), denn der ist laut Schaltplan über Widerstände mit V+ und weiter mit Vcc verbunden.
Mit der 8-Bit-Auflösung sollte man noch genug erkennen können.
Hallo A.T.I.R
Schau Dir die erweiterte Asuro Bibliothek an (suche in den Foren).
Weja hat sich die Mühe gemacht und darin ein Unterprogramm"Batterie" geschrieben,
Es liefert Dir dan direkt den integer Wert.
Gruß Sebastian
Hallo linux_80,
bei
chris.lugr.de
findest Du eine Routine zur Merssung von V+ inclusive des Berechnungsbeispiels im Header. V+ entspricht fast genau der Batteriespannung. Das Unterprogramm von Weja hat meiner Meinung nach einen Fehler, weil es die Bandgap als Referenz nicht richtig einstellt.
Gruß,
stochri
Hallo stochri,
Das stimmt, Weja hat als Refspannung AVCC eingestellt, womit man immer ziemlich gleichen Wert bekommen müßte...
ein | (1<<REFS1) in der Zeile mit ADMUX dazugeschrieben müßte das Problem lösen(Refspannung auf 2,56V) :-b
Gruß Sebastian
Hallo Izaseba,
für die Programmroutine sollte man allerdings die Referenzspannung mal mit einem Multimeter nachmessen. Zumindes bei meinem Asuro stimmt die nämlich nicht unbedingt mit dem Datenblatt überein.
Gruss,
stochri
OK Danke
für die vielen Antworten ich werde mich gleich mal an die Arbeit machen ;)
Hallo Izaseba,
für die Programmroutine sollte man allerdings die Referenzspannung mal mit einem Multimeter nachmessen. Zumindes bei meinem Asuro stimmt die nämlich nicht unbedingt mit dem Datenblatt überein.
Ja genau, das stimmt, ich wollte nur schreiben, was an dem Programm geändert werden muß
Gruß Sebastian
Joa, mit der erweiterten ASURO Bibliothek geht das so:
//gibt den Batteriestand in Prozent aus
#include "asuro.h"
int main(void)
{
float volt;
int proz;
Init();
while(1){
volt=2.56/1024*Batterie()*22/10;
proz=(int)(((volt)/5)*100); //so ungefähr
SerWrite("Batteriestand: ",16);
PrintInt(proz);
SerWrite("% \r\n",4);
Msleep(1000);
}
return 0;
}
Aber wie schon mal weiter oben erwähnt, die 2.56V würde ich vorsichtshalber am Vref-Pin mal nachmessen. Würde mich mal interessieren ob die nur bei meinem ASURO abweicht oder auch bei anderen.
Die Einbindung der Fließkommabibliothek kostet ziemlich Resourcen.
Gruss,
stochri
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?
FrankyD80
21.04.2006, 22:06
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?
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.
Schau bei chris.lugr.de, dort steht die korrekte Meßfunktion.
Gruss,
stochri
FrankyD80
21.04.2006, 22:45
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?
Die 22/10 kommt von 12kOhm+10kOhm/10kOhm, was die Widerstandskombination darstellt.
Upps, da habe ich mich wohl vertan. Ist auch schon etwas länger her ...
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
FrankyD80
22.04.2006, 11:58
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.
Arexx-Henk
22.04.2006, 12:11
Nur so meine gedanken dazu....
Der AD-Wandler kann seine Rerferenzspannung aus 3 Quellen beziehen ( Datenblatt 2486M-AVR-12/03 für ATmega8 S.203)
AVCC
VBandgap
Aref
Da gibts noch ein gedanken fehler glaub ich.
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
Arexx-Henk
22.04.2006, 12:22
Aber wie stelle ich wo was ein?
//ADEN: ad-wandler einschalten
//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
Arexx-Henk
22.04.2006, 12:52
Die hex datei zum auslesen steht hier:
http://home.planet.nl/~winko001/Asuro/Software/AsuSfwPagFrm.htm
gruss
Henk
FrankyD80
22.04.2006, 15:30
Danke für die schnelle Hilfe.
Also, habe bei 4,96V Akkuspannung den Wert 855 raus. Habe dann noch ein wenig gerechnet und kam auf die Formel
5,76*Batterie()
um die mV der Akkuspannung herauszubekommen.
Es scheint so einigermassne hinzuhauen.
Ich werde noch mal einen Test mit nahezu leeren Akkus machen und dann mit vollen, um zu vergleichen.
Danke nochmal.
planschkuh
25.04.2006, 18:23
hi
find das alles total toll aber der meckert bei mir über Batterie()
hab das jetzt so eingebaut:
battTest(void) {
float volt;
int proz;
volt = 2.56/1024 * Batterie() * 22/10;
proz = (int) (((volt)/5)*100); //so ungefähr
if (proz > 60) {
StatusLED(GREEN);
}
if (proz > 30 && proz <= 60) {
StatusLED(YELLOW);
}
if (proz <= 30) {
StatusLED(RED);
}
return 0;
}
und dann sagt der mir:
C:\Programme\WinAVR\examples\asuro/main.c:198: undefined reference to `Batterie'
linux_80
25.04.2006, 19:22
Hallo,
die funktion Batterie() gibts nur in der neuen Asuro-Lib:
http://sourceforge.net/projects/asuro
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.