ATmega1281 & ADC

OP #1228921
Lesenswert?

Hallo.

Ich nutze einen ATmega1281 und möchte mit dem Analog-Digital Converter 
meine  Batteriespannung überwachen.Aus anderen Beiträgen hab ich schon 
erfahren,dass ich dazu AVCC als interne Referenz nehmen muss und V(BG) 
als Input Channel.
Mir stellt nun nur die Frage ob dies bei meinem Controller überhaupt 
geht,da im Datenblatt des ATmega1281 S.291 zum ADCSRB-Register und 
dessen Bit MUX5 steht:

"This bit is not valid for ATmega1281/2561." ???

Ich habe mal das Programmierbeispiel aus dem Tutorial zum ADC genommen 
und mit meinen benötigten Einstellungen umgeändert.
An Vcc des Controllers habe ich Spannungen von 2V, 2,5V und 3V 
angelegt.Dabei waren die erhaltenen Werte im ADCH-Register bei 2,5V Vcc 
größer als bei 2V und auch 3V.
Das verwirrt mich ein wenig.

Gruß,Tommy
Angehängte Dateien:
#1228929
Lesenswert?

ich finde im Datenblatt nichts über ein "VBG"...was soll das sein?

> Mir stellt nun nur die Frage ob dies bei meinem Controller überhaupt
> geht,da im Datenblatt des ATmega1281 S.291 zum ADCSRB-Register und
> dessen Bit MUX5 steht:

der 1281 hat nur 8 Input Pins, darum braucht du MUX5 doch gar nicht...
#1228935
Lesenswert?

grmpf..sorry, war ein Zuordnungsfehler meinerseits...irgendwie kam das 
bei mir so an, dass er die Bandgap sowohl als Referenz als auch als 
Messeingang benutzen will...

wobei immer noch die Frage offen bleibt, was er mit MUX5 will, das 
braucht man ja nur zur Auswahl von Kanälen > 7...

aber nochmal in Datenblatt geschaut:

> An Vcc des Controllers habe ich Spannungen von 2V, 2,5V und 3V

der braucht doch mindestens 2,7V ?
#1228941
Lesenswert?

Tommy Tacker wrote:

> VBG steht z.B. auf Seite 283 "ADC Voltage Reference", oder im
> Blockdiagramm Figure 26-1 links unten.

habs inzwischen auch gefunden...nur als ich VBG beim ersten Mal vom 
Reader im Datenblatt hab suchen lassen, hat er es nicht gefunden, erst 
BG hat was geliefert...
OP #1228949
Lesenswert?

Ja ich weiss das ich das MUX5 nicht brauch,aber meine Frage ist vor 
allem auch, warum mir mir das ADCH nach meinem Programmcode so komische 
Werte ausgibt?

Dezimal ausgegeben liegen die Werte für 2,5V Vcc höher (zwischen 103 und 
112) als bei 2,0V (94 bis 97) und 3,0V (70 bis 71)???Die Wertespanne ist 
zu klein in Relation zu den unterschiedlichen Spannungswerten an Vcc?!

Oder habe ich irgendwelche Einstellungen vergessen?
#1228977
Lesenswert?

Justus Skorps wrote:
> wobei mir jetzt noch was auffällt: in deinem Code machst du den Dummy
> Readout mit
>
>> result = ADC;
>
> statt
>
>> result = ADCW;
Das ist auch völlig wurscht. ADC und ADCW sind identisch. ADCW gibt es 
nur deshalb, weil die Header auch für Assembler geeignet sein sollen und 
es in Assembler den Befehl adc gibt, der hier kollidieren würde.

Eigentlich ist es in C-Programmen sinnvoll, immer ADC zu verwenden, da 
das dem üblichen Schema für 16-Bit-Register entspricht. Es heißt ja 
schließlich auch nicht TCNT1W, oder?

Allerdings hast Du in einer Hinsicht völlig Recht: Man sollte sich 
zumindest innerhalb eines Projektes für eine der beiden 
Möglichkeiten entscheiden...

Siehe übrigens auch AVR 16-Bit-Register. Da habe ich unlängst mal 
den ganzen Kram zusammengefasst.
#1228989
Lesenswert?

Tommy Tacker wrote:
> soweit ich das im Tutorial gelesen habe ist es controllerabhängig ob man
> ADC oder ADCW schreibt und bei mir trifft ersteres zu.

nein, wie johnny-m schon geschrieben hat ist das wurscht. Schau mal in 
deine contoller Datei von deinem GCC oder was du sonst benutzt..

und vor allem benutzt du beim Abfragen der nicht-dummy Werte dann eh 
ADCW..
OP #1229073
Lesenswert?

Justus Skorps wrote:

>mit Vcc < 2,7V bist du außerhalb der Sperifikation für den ATmega1281,
>da wundert es mich nicht, wenn da Quark rauskommt.

Ja das hast du recht.Ich merke das bei meinen Messungen. Da ich mit 
ADC´s bisher noch nicht viel gemacht habe,kannst du mir das erklären,was 
da im Manual des ATmega1281 mit "0 - Vcc ADC Differential ADC Voltage 
Range" gemeint ist?

Mein Vorhaben ist es halt,dass bei einem bestimmten ADC-Wert etwas 
ausgelöst wird.Um das für mich zu testen leuchtet dann halt z.B. eine 
LED.

Kann ich das realisieren,dass die LED erst ab einem Wert unter 2,7V 
leuchtet?
z.B. 2,1V??

Danke für eure bisherigen Antworten.
#1229081
Lesenswert?

Ich glaube, du hast da ein anderes Problem: Deine Grenze für die 
Batteriespannung darf nicht kleiner als 2,7V sein, da dort dein µC nicht 
mehr richtig funktionieren wird. Spannungen kleiner als 2,7V lassen sich 
natürlich trotzdem messen, solange es sich dabei nicht um die 
Versorgungsspannung handelt. Solange Vcc > 2,7V ist, sollte auch ein 
ursprüngliches Konzept funktionieren, also V_BG gegen Vcc messen, um so 
einen Absolutwert zu erhalten.
OP #1229106
Lesenswert?

>Deine Grenze für die Batteriespannung darf nicht kleiner als 2,7V sein, da >dort 
dein µC nicht mehr richtig funktionieren wird.

mit Grenze meinst duch sicherlich den Spannungsabfall der Batterie,oder?

Naja,ich teste das gerade mit einem Spannungsversorgungsgerät.Ich gehe 
mit der Spannungs in 0,01V-Schritten von 3V abwärts und schaue mir die 
entsprechenden Werte in ADC-Register an. Bereits bei ca. 2,80V stehen im 
ADC auch Werte,die ich manchmal bei 2,72V erhalte.
Allerdings soll die LED erst leuchten,wenn die minimale Grenze (also 
nahe 2,7V) erreicht ist. Durch die schwankenden Werte im ADC ist das 
nicht gerade verlässlich das dies funktioniert. :(

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren