Hallo zusammen,
ich brauche eine Info von euch: An einem ATMEGA328P nutze ich den ADC
(AVCC = 5V, AREF über Kondensator mit Masse verbunden). Das Ganze
funktioniert auch wie gewünscht. Jetzt habe ich im Datenblatt die
Möglichkeit gesehen, über den ADC-Kanal 14 auch die interne VBG (1.1V)
zu messen. Den ADC habe ich jetzt auch entsprechend konfiguriert,
bekomme aber für diesen Kanal keinen stabilen Messwert heraus, sondern
ein Rauschen von ca. 0,2-0,5V.
Im Datenblatt habe ich keinen Hinweis darauf gefunden, dass der Kanal im
Betrieb mit externer AVCC nicht verfügbar wäre. Könnt ihr mir sagen, ob
das grundsätzlich möglich ist?
Grüße
Harald
1
ADMUX=(1<<ADLAR);// Left adjust result
2
ADMUX|=0x0E;// Select channel VBG
3
ADMUX|=(1<<REFS0);// AVCC with external capacitor at AREF pin
Du musst nach dem Einschalten des ADC 70µs warten, bis die Bandgap
Referenz stabilisiert ist.
Du hast AREF als externe Referenzquelle gewählt. Da musst du dann auch
eine Spannung >1.1V anlegen, sonst kann das nicht funktionieren.
Harald schrieb:> Den ADC habe ich jetzt auch entsprechend konfiguriert,> bekomme aber für diesen Kanal keinen stabilen Messwert heraus, sondern> ein Rauschen von ca. 0,2-0,5V.
Wenn du über REFS die Spannungsreferenz des ADC änderst dann wird der
Kondensator an AREF auf die neue Spannungsreferenz umgeladen. Das kann
je nach Größe des AREF-Kondensators und Innenwiderstand der
Spannungsreferenz ein wenig dauern.
Stefan ⛄ F. schrieb:> Du hast AREF als externe Referenzquelle gewählt. Da musst du dann auch> eine Spannung >1.1V anlegen, sonst kann das nicht funktionieren.
Stefan, REFS0 wird gesetzt, die gewählte Referenz ist also AVCC, nicht
AREF.
LG, Sebastian
Hi,
der ADC läuft zyklisch über mehreren Kanäle. Die Initialisierung
passiert natürlich im Programm, das hatte ich euch nur im Eingangspost
unterschlagen.
1
ADCSRA=(1<<ADEN)// ADC Enable
2
|(1<<ADSC)// Start Conversion
3
|(0<<ADATE)// Free running mode
4
|(1<<ADIE)// Enable Interrupt
5
|(1<<ADPS2)
6
|(1<<ADPS1)
7
|(0<<ADPS0);// Prescaler 64 (ADC-Freq 125kHz)
Stefan ⛄ F. schrieb:> Du musst nach dem Einschalten des ADC 70µs warten, bis die Bandgap> Referenz stabilisiert ist.
Die 70us muss ich nur nach dem initialen Einschalten abwarten, danach
sollte die VGB doch eingeschwungen sein. Oder?
Peter D. schrieb:> Die internen 1,1V sind sehr hochohmig beim Messen.> Du mußt den MUX setzen und dann erst 16 Dummy-Messungen machen oder die> gleiche Zeit abwarten.>> https://www.avrfreaks.net/forum/avrs-measure-their-own-vcc-do-it-badly
Ah, vielen Dank für den Link. Das was Steve hier beschreibt trifft auch
meine Anwendung: Die grobe Kontrolle der 5V AVCC durch die interne
Referenz. Ich teste morgen mal, ob ich mit den Dummy-Messungen ins Ziel
komme. Ist irgendwie eine Frickelei, aber wenn's am Ende hilft... :)
Grüße
Harald
Ich habe auch gerade mit Vref=Vcc die Bandgab-Messung bei Tiny 85
gemacht, um Vcc zu messen. Ich bekomme sehr stabile Messwerte, aber nur
wenn ich mich an das Datenblatt halte und beim Umschalten der Kanäle ein
paar ms warte. Im Datenblatt steht in der MUX-Tabelle als Fußnote, dass
eine Wartezeit von 1ms erforderlich ist.
also: Mux setzen, warten, dann erst Messung und zurück das gleiche.
Ich habe allerdings im M328-Datenblatt in der MUX-Tabelle diesen Hinweis
nicht gefunden. Vielleicht steht es wo anders. Ich würde zum Test diese
Wartezeit probieren.
Noch ein Hinweis: man darf keine hohe Auflösung für die Vcc-Messung
erwarten. Hier mal die Abschätzung der Auflösung mit Daumenwerten:
Vcc=5V ergibt eine Auflösung von ca. 5mV/Roh. Ein Rohwert der
Vbg-Messung muß man ca. mit 5 multiplizieren, um die Vcc-Auflösung zu
erhalten. Das ergibt eine Vcc-Auflösung von 20mV. Oder genau nach der
Formel Vcc/1024=Vbg/Roh --> Vcc=Vbg*1024/Roh. Und dann kommt hinzu, dass
Vbg von Vcc abhängt. Ich kalibriere immer bei der Vcc, bei der ich genau
sein will. Bei LiIon-Akku-Versorgung mache ich 2 Kalibrierungen: für
4,2V und 3V.
Ich habe jetzt mal die Vbg-Messung auch beim M328 durchgeführt. Die
erforderliche Wartezeit war noch viel höher.
Der Test für stabile Messung:
- von Vref=1,1V auf Vref=Vcc umgeschaltet
- Dummy-Messung mit Mux=8
- Wartezeit 8ms!! (bei <7ms starke Schwankungen)
- richtige Messung mit Mux=8
Beim Rückweg Vref von 1,1V auf Vcc war die Wartezeit nicht notwendig, es
reichte die Dummy-Messung. Das liegt wohl daran, dass Vbg sehr hochohmig
ist und Vcc natürlich nicht.
Seltsamerweise unterscheiden sich die Prozessoren erheblich:
Eine Nachmessung mit gleichem Testverfahren ergab bei T861, T84 und T85,
dass eine Dummy-Messung ohne Wartezeit in beiden Richtungen reicht.
Alles ist nur jeweils mit einem Exemplar gemessen.
Ja, richtig. Da bin ich gar nicht drauf gekommen. Vref=1,1V erfordert an
Aref einen Kondensator (anders als z.B. beim T861). Und der wird
Umschalten erst geladen.
Danke.
Hermann W. schrieb:> Vref=1,1V erfordert an> Aref einen Kondensator
Erforderlich ist er nicht. Er kann was bringen, muß aber nicht.
Ich hatte mal bei einem Atmega8 nachträglich den ADC benötigt, d.h. der
AREF-Pin war unbeschaltet. Die ADC-Messungen waren auch so stabil.
Ich nehm i.a. 10nF an ARef.
Jetzt hatte ich gerade mit dem Tiny841 zu tun und brauchte den Pin
anderweitig. Man kann alle internen Referenzspannungen auf den Pin legen
oden eben auch nicht. Für die 2,2V habe ich es kurz untersucht - mit
externem Kondensator ist es nur minimal besser.