Ein Posting fuer Newbies.
Eventuell wurde das Thema hier auch schon behandelt.
Der Code gilt fuer den Atmega 128/328
Wer einen Arduino mit Batterien betreibt,moechte sicherlich auch wissen
in welchem Zustand sich dieselbigen befinden.
Man koennte also einen Analogeingang nehmen und per Spannungsteiler die
Batteriespannung messen.
Das ist allerdings nicht noetig.Man kann ohne externe Bauteile und ohne
die Verwendung eines Analogpins einfach per simpler Software Messungen
durchfuehren.
Ein fertiger Code zum Testen siehe Anhang.Einfach uploaden Serialmonitor
oeffnen und sich ansehen was angezeigt wird.Eigentlich etwa
5V(USBspannung) - duerfte aber wegen der Schutzdiode auf dem Nanoboard
etwas geringer sein.
Der Code ist wie gesagt simpel und NICHT von mir.Ich bin mit Pics
vertraut und kenne mich mit den Atmega-Instruktionen nur wage aus und
hatte keine Lust mich eine Stunde lang wegen ein paar Registerbefehlen
mit dem Datenblatt zu beschaeftigen.Genauso wenig wie 99% der
Atmega-Freaks auf dem Forum sich den Pic nicht antun wollen.Beim Googeln
bin ich auf eine Webseite gestossen,die mir genau das lieferte was ich
wollte - siehe Anhang
Wie funktionierts:
Die "schwabbelnde"(!) Ub des Arduinos wird als Referenz genommen und
wird gegen die interne stabile Referenz von 1.1V (+/-9%)gemessen.
Die 1.1V werden per Registerzuweisung dem internen A/D-Wandler
zugefuehrt.
Normalerweise ist dies ja umgekehrt....
Die Gleichung lautet wie folgt:
Ub/1024 = 1.1V/Wert im Analogregister =>
Ub = (1.1V/Wert im Analogregister) * 1024
Die FVR(1.1V) kann von Nano zu Nano verschieden sein.Am besten die echte
Betriebsspannung messen und den FVR-Wert anpassen - in der Regel duerfte
aber die Toleranz ok sein - es geht ja "nur" um die
Batterieueberwachung...
Das ist auch meine Vorgehensweise in Pics - mir war erst nach einem
kurzen Blick in's Datenblatt bewusst,dass auch die Atmegas die interne
FVR messen koennen.Es bedarf aber halt Hardwarekenntnisse mit denen sich
Arduino-Newbies sicherlich etwas schwer tun wuerden.
Hinweis:
Der auskommentierte Code ist das Original - den ausgefuehrten Code habe
ich fuer meine Beduerfnisse und dem besseren Verstaendnis wegen leicht
geaendert...
Eine ausfuehrlichere Beschreibung(auf englisch) gibt es auch im Anhang