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
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...
komisch, ploetzlich findet der Reader doch was wegen VBG... aber warum willst du die bandgap voltage den messen? du willst sie doch nur als Referenz nehmen...
jussa wrote: > aber warum willst du die bandgap voltage den messen? du willst sie doch > nur als Referenz nehmen... AVCC als Referenz + V(BG) messen = Versorgungsspannung des µC messen ohne zusätzliche externe Beschaltung.
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 ?
@ Justus Skorps: VBG steht z.B. auf Seite 283 "ADC Voltage Reference", oder im Blockdiagramm Figure 26-1 links unten. Falls das wirklich nicht geht mit VBG, welche Möglichkeit habe ich da noch mit Hilfe des ADC die Batteriespannung zu überwachen?
Tommy Tacker wrote:
> Falls das wirklich nicht geht mit VBG
Warum sollte es nicht gehen? Du brauchst doch MUX5 für V(BG) als
Messquelle gar nicht.
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...
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?
da das wohl untergangen ist: mit Vcc < 2,7V bist du außerhalb der Sperifikation für den ATmega1281, da wundert es mich nicht, wenn da Quark rauskommt
wobei mir jetzt noch was auffällt: in deinem Code machst du den Dummy Readout mit > result = ADC; statt > result = ADCW;
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.
Johannes M. wrote:
> Das ist auch völlig wurscht. ADC und ADCW sind identisch.
ah ok, ich benutze halt nur immer ADCW bzw ADCWH/L und habs bis jetzt
auch nur immer so gesehen.
soweit ich das im Tutorial gelesen habe ist es controllerabhängig ob man ADC oder ADCW schreibt und bei mir trifft ersteres zu.
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..
Justus Skorps wrote: > ah ok, ich benutze halt nur immer ADCW bzw ADCWH/L und habs bis jetzt > auch nur immer so gesehen. Und bei ADCWH/L meckert der Compiler nicht? Oder vertippt? ;-)
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.
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.
>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. :(
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.