attiny85 - ADC Wert hängt stark von VCC ab

OP #2632081
Lesenswert?

Liebe Profis,

ich experimentiere gerade mit ADC Messungen an einem attiny85. Beispiel: 
single ended Messung einer über einen Spannungsteiler angelegten 
Spannung. Interne Referenz 2,56V, Prescaler so, dass der ADC mit 125kHz 
getaktet wird.

Wenn ich nun bei konstanter Messspannung die Versorgungsspannung 
variere, z.B. zwischen 3V und 5V, bekomme ich ziemlich unterschiedliche 
Messwerte. Sieht so aus als ob die interne Referenz nicht stabil ist. 
Mache ich etwas falsch? Ich dachte die interne Referenz soll genau das 
sein: eine stabile Spannungsreferenz.

Um Fehler in meiner Minimalaußenbeschaltung auszuschließen, habe ich 
versucht die interne Temperatur zu messen (MUX = 1111). Genau das 
gleiche. Der AD Wert ist bei VCC 3V 290, bei VVV 5V 240. Verstehe ich 
nicht.

Wäre dankbar für jede Erklärung und Hilfe.

Danke

Michael
OP #2632167
Lesenswert?

Danke Euch. Das VCC/VRef Diagramm hatte ich schon gesehen. Mich wundert 
nur die riesige Abweichung, z.B. bei der Messung der internen 
Temperatur.
Bei Zimmertemperatur: 290-230 bei 3V-5V Eingansspannung.

Wenn ich die Kennlinie für 25 Grad nehme, hätte ich von 3V bis 5V -> 
1,15V bis 1,09V VREF. Das wären, wenn ich richtig rechne so ummara 5%. 
Nehme ich den AD Wert bei 3V 290 und ziehe 5% ab, käme ich auf 275. 
Irgendetwas stimmt da nicht.
Gast #2632487
Lesenswert?

>Wenn ich die Kennlinie für 25 Grad nehme, hätte ich von 3V bis 5V ->
>1,15V bis 1,09V VREF.
Da warst du zu großzügig, bei 3 Volt ist die Linie bei 1,11 Volt.
Also sollte die Abweichung nur ca. 1,9 % groß sein.

Da du von Single Mode sprichst:
Laut Datenblatt ist die erste Messung wenn man Vref wechseln vom Adc 
ungenau und sollte verworfen werden.

Ist Vref eingestellt mit oder ohne Kondensator?

Ist der Abblockkondensator nahe des Tiny vorhanden?
OP #2632585
Lesenswert?

error schrieb:
>>Wenn ich die Kennlinie für 25 Grad nehme, hätte ich von 3V bis 5V ->
>>1,15V bis 1,09V VREF.
> Da warst du zu großzügig, bei 3 Volt ist die Linie bei 1,11 Volt.
> Also sollte die Abweichung nur ca. 1,9 % groß sein.
>
> Da du von Single Mode sprichst:
> Laut Datenblatt ist die erste Messung wenn man Vref wechseln vom Adc
> ungenau und sollte verworfen werden.
>
> Ist Vref eingestellt mit oder ohne Kondensator?
>
> Ist der Abblockkondensator nahe des Tiny vorhanden?

Danke Euch vielmals für Eure Antworten.

@error
Ich meinte single ended Messung (vs differentiell), d.h. PB2 gegen GND 
in meinem Fall. Gemessen wird jede Millisekunde mit einem 20 Werte 
gleitenden Mittelwert.

VRef ist 2,56V ohne Kondensator (REF 110), kein Kondensator zw. VCC und 
GND. Wollte eine minimalst Außenbeschaltung. Versorgt wird aus einer 
Batterie, gemessen wird ebenfalls eine Batterie mit höherer Spannung als 
VCC. Beide auf gemeinsamer Masse.

Werde das aber mal mit Kondensatoren probieren.

@TomTom
Könntest Du dazu eine kleine Skizze anhängen?
#2632676
Lesenswert?

@  Michael H. (blubbla)

>Bin nicht ganz auf 3V runter gegangen. Auch zwischen 3,5 und 5V ist die
>Veränderung sehr stark und sieht fast proportional zur Änderung VCC aus.

Dann ist was faul. Die Referenz ist schon sehr konstant, wenn gleich sie 
eine hohe, jedoch KONSTANTE Toleranz nach der Produktion hat. Kann man 
leicht rauskalibrieren.

MFG
Falk
#2632707
Lesenswert?

Michael H. schrieb:
> Werde das aber mal mit Kondensatoren probieren.

Ohne Kondensatoren sollte man nie arbeiten - der Spareffekt steht in 
keinem Verhältnis zu der Möglichkeit von Fehlverhalten.

Andere Frage: Wie hochohmig ist der Spannungsteiler der zu messenden 
Spannung? Hier kannst Du testweise auch mal einen 100nF zwischen 
A/D-Eingang und GND schalten.

Gruß Dietrich
Gast #2633232
Lesenswert?

>Versorgt wird aus einer Batterie, gemessen wird ebenfalls eine Batterie mit 
>höherer Spannung als VCC. Beide auf gemeinsamer Masse.
Sorry aber das Verstehe ich nicht ganz, mach mal ein Beispiel.
Der Adc kann doch nicht eine höhere Spannung messen wie Vcc ist...

>60K und 10K Spannungsteiler
Ich weiss jetzt nicht wie das beim Tiny ist aber beim Atmega8 steht 
folgendes im Datenblatt:
"The ADC is optimized for analog signals with an output impedance of 
approximately 10 kΩ or less."
Eventuell hilft hier den S&H Kondensator länger aufladen zu lassen in 
dem man mit der Adc Frequenz ein wenig zurückgeht.

Die Versorgungsspannung des Spannungsteilers bleibt schon gleich wenn du 
die Versorgungsspannung von dem Tiny änderst?
Sprich sie sind unabhängig von einander.
OP #2633370
Lesenswert?

Danke für Eure Mühe. Anbei eine Skizze meiner externen Beschaltung nach 
Versuch mit Kondensator. Vin und Vcc sind unabhängig, aber auf der 
gleichen Masse.

Um das einzukreisen, habe ich aber auf den internen Temperatursensor 
geschalten. (MUX 1111). Damit entfällt zunächst die Frage nach Impedanz 
des Spannungsteilers und ob VRef mit (REFS 111) oder ohne externem 
Entkoppelkondensator (REFS 110) gewählt ist.

Mit Kondensator zwischen VCC und GND sind die Fehler in der 
Temperaturmessung bei Zimmertemperatur und Variation von VCC zwischen 4V 
und 5.5V schon mal deutlich besser, sind aber immer noch 7,5%.

Bei 4V lese ich einen ADC Wert von 283 (ohne Kondensator 270)
Bei 5.5V lese ich einen ADC Wert von 262 (ohne Kondensator 228)

Zur Software. Ich initialisiere den ADC und anschließend eine 2ms Timer 
Interruptroutine. In der Interruptroutine laufen verschiedene Tasks. 
Alle 50 Interrupts (also 100ms, nicht wie ich oben geschrieben habe 1ms) 
wird Vin dann gemessen und in einen 20 Werte gleitenden Mittelwert 
verrechnet. Da der ADC in der Interruptroutine gestartet und gelesen 
wird, gibt es von außen keine Störungen.

Initialisierung nach power up:

ADCSRA = 0b10000110;                // set ADEN and 1/64 prescaler
ADCSRB = 0b00000000;                // clear ADCSRB
ADMUX  = 0b10010001;                 // set 2.56V reference and singled 
ended input on ADC1 (PB2)

Zyklisch alle 100ms:

ADCSRA = ADCSRA | 0b01000000;    // start conversion
while (bit_is_set(ADCSRA, ADSC));     // wait for conversion finished
low  = ADCL;                                     // get results
high = ADCH;                                    // get results

für die Testmessung der interne Temperatur wird so initialisiert:

ADCSRA = 0b10000110;                // set ADEN and 1/64 prescaler
ADCSRB = 0b00000000;                // clear ADCSRB
ADMUX  = 0b10001111;                 // set 1.1V reference and int temp 
sensor
Angehängte Dateien:
Gast #2633413
Lesenswert?

>Kondensator zwischen VCC und GND
Der Kondensator ist ein 100 nF Kerko?

Die Init und das auslesen sieht Ok aus, daran sollte es nicht liegen.

Sind die Lötstellen Ok?

>In der Interruptroutine laufen verschiedene Tasks.
Teste den Adc mal ohne restliches Programm, nicht das es an einem 
Überlauf oder verschluckten Interrupt liegt.
OP #2633465
Lesenswert?

error schrieb:
>>Kondensator zwischen VCC und GND
> Der Kondensator ist ein 100 nF Kerko?
>
> Die Init und das auslesen sieht Ok aus, daran sollte es nicht liegen.
>
> Sind die Lötstellen Ok?
>
>>In der Interruptroutine laufen verschiedene Tasks.
> Teste den Adc mal ohne restliches Programm, nicht das es an einem
> Überlauf oder verschluckten Interrupt liegt.

Hallo error,

ja, 100nF Keramik. Ich habe das auf dem Steckbrett und auf einer kleinen 
Lochrasterplatine (mit Fassung) aufgebaut.Verhalten sich beide 
identisch.

Habe um die Interruptroutine zu testen mit einem toggle an einem Output 
Pin versehen. Logicanalyzer sagt alles i.O. Keine Überläufe (Testoutput 
auch in der Endlosschleife Main. Ca. 65% Prozessorlast, d.h. der 
Prozessor verbringt ca. 35% seiner Zeit in der Endlossschleife Main Die 
Messungen an sich sind ja in Ordnung. Stabile Werte ohne große 
Schwankungen bei konstanter Vcc.

Und falls ein Interrupt verloren gehen würde, sollte auch nichts 
passieren. Dann wird halt in diesem Zyklus überhaupt keine Messung 
gestartet.

VG Michael
Gast #2633545
Lesenswert?

Sorry, einen Versuch noch ins Blaue aber dann bin ich mit meinem Latein 
am ende.

>Mit Kondensator zwischen VCC und GND sind die Fehler in der
>Temperaturmessung bei Zimmertemperatur und Variation von VCC zwischen 4V
>und 5.5V schon mal deutlich besser, sind aber immer noch 7,5%.
Du sagst der Tiny wird mit einer Batterie versorgt, vielleicht schafft 
diese zu wenig Impulsstorm und der 100 nF ist auch gleich leer...
Eventuell hilft ein Elko mit ein paar µF parallel zu dem Kerko oder mal 
Brownout versuchen.
OP #2633554
Lesenswert?

error schrieb:
> Sorry, einen Versuch noch ins Blaue aber dann bin ich mit meinem Latein
> am ende.
>
>>Mit Kondensator zwischen VCC und GND sind die Fehler in der
>>Temperaturmessung bei Zimmertemperatur und Variation von VCC zwischen 4V
>>und 5.5V schon mal deutlich besser, sind aber immer noch 7,5%.
> Du sagst der Tiny wird mit einer Batterie versorgt, vielleicht schafft
> diese zu wenig Impulsstorm und der 100 nF ist auch gleich leer...
> Eventuell hilft ein Elko mit ein paar µF parallel zu dem Kerko oder mal
> Brownout versuchen.

Denke nicht, dass die Batterie ein Problem hat. Wie gesagt, die 
Messungen sind absolut ok und stabil, solange sich die Eingangsspannung 
nicht ändert.

Das mit dem Elko werde ich aber trotzdem probieren.

Was meinst Du mit "brownout versuchen"?

@all: hat jemand eine simple und stabile Beschaltung (z.B. für VRef) des 
attiny zur halbwegs sauberen und temperaturunabhängigen AD Messung?
OP #2640796
Lesenswert?

Hallo,

habe jetzt einen Versuch mit einem LM336-2.5 an einem 2,5K Widerstand 
als externe Referenz (REFS: 001) gemacht. Und siehe da, alles stabil. 
Kein Einfluss der Versorgungsspannung mehr. Etwa 40 Grad 
Temperaturunterschied machen etwa 2 Digits aus. Damit kann ich gut 
leben.

Ist also scheinbar wirklich so, dass die interne Referenzspannung meiner 
Attiny85 (habe zwei probiert) für die Tonne ist. Könnt ihr das 
bestätigen?

Zum LM336-2.5 hätte ich noch eine Frage: kann man den ADJ Eingang offen 
lassen. Lt. Datenblatt geht das scheinbar. Den Abgleich der 
Referenzspannung bräuchte ich nicht, da ich ohnehin in Software 
kalibriere.

Danke nochmal an alle, die mitgeholfen haben.

VG Michael
Gast #2641505
Lesenswert?

>Ist also scheinbar wirklich so, dass die interne Referenzspannung meiner
>Attiny85 (habe zwei probiert) für die Tonne ist. Könnt ihr das
>bestätigen?

Komische Sache, woran das nur liegen mag, mangels Tiny85 kann ich den 
leider nicht testen...

Normalerweise ist es aber schon so wie Falk Brunner treffend sagte:
"Die Referenz ist schon sehr konstant, wenn gleich sie
eine hohe, jedoch KONSTANTE Toleranz nach der Produktion hat."

>kann man den ADJ Eingang offen lassen. Lt. Datenblatt geht das scheinbar.
Ja, der soll offen bleiben wenn kein Abgleich nötig ist.

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