Forum: Analoge Elektronik und Schaltungstechnik Messen der uC_eigenen Ub mit Arduino Nano


von Toxic (Gast)


Angehängte Dateien:

Lesenswert?

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

von Oliver S. (oliverso)


Lesenswert?

Ich hol schon mal Bier und Popkorn ;)

Oliver

von Alfred T. (Gast)


Lesenswert?

Toxic schrieb:
> ohne die Verwendung eines Analogpins

Sieht aber nicht so aus :-)

...
> result = ADCL;
> result |= ADCH<<8;
...

von M. K. (sylaina)


Lesenswert?

Alfred T. schrieb:
> Toxic schrieb:
>> ohne die Verwendung eines Analogpins
>
> Sieht aber nicht so aus :-)
>
> ...
>> result = ADCL;
>> result |= ADCH<<8;
> ...

Manual lesen und den Code genau studieren: Mit dem Setzen von MUX 1 bis 
3 wird die interne Referenz auf den ADC-Eingang geschaltet: da ist kein 
Analogpin des Atmegas involviert ;)

von Toxic (Gast)


Angehängte Dateien:

Lesenswert?

M. K. schrieb:
> Manual lesen und den Code genau studieren

Man sieht es auf einen Blick im Bockdiagramm,dass neben ADC0-ADC7 auch 
die Bandgapreferenz als zusaetzliche Analogquelle abgefragt werden kann 
- sofern die Register richtig gesetzt sind - und keinen der 
Standard-Analogpins in Anspruch nimmt.Waere ja auch ein Jammer wenn es 
so waere.....
ADCL und ADCH sind ja "nur" die Ergebnisregister nach der 
A/D-Konvertierung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.