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
du musst aref mit ner anderen stabilisierten 5V spannung betreiben, sonst ist klar, dass das schwankt
Die intene Referenz ist ein Schätzeisen. Nimm eine externe an einer stabilen Spannung.
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.
>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?
Also mittes Präzisions-Referenzdiode (LMxxx - hab die Type vergessen) und einem Filter (L-C) habe ich bisher immer sehr gute Ergebnisse erzielt.
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?
Für die 2,56V Referenz muss die min. Betriebsspannung 3V betragen. Liegt deine 3-V Messung eventuell im Grenzbereich?
Jürgen Liegner schrieb: > Für die 2,56V Referenz muss die min. Betriebsspannung 3V betragen. Liegt > deine 3-V Messung eventuell im Grenzbereich? 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.
@ 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
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
Hallo Dietrich, 60K und 10K Spannungsteiler. Abgriff zw. 60k und 10k, Messspannung an 60k, 10k an GND. VG Michael
Michael H. schrieb: > 60K und 10K Spannungsteiler. Das sollte niederohmig genug sein, aber Test mit Kondensator solltest Du mal machen. Gruß Dietrich
>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.
P.s.: Wenn du den Programmausschnitt mit der Initialisierung des Adc zeigst könnt man ihn auf Fehler überprüfen.
error schrieb: > "The ADC is optimized for analog signals with an output impedance of > approximately 10 kΩ or less." Genau das steht auch beim Tiny25/45/85 Datenblatt 12/06 auf Seite 133.
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
>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.
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
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.
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?
>Was meinst Du mit "brownout versuchen"? Die Brownout Fuse, dass ein Reset erfolgt falls die Versorgungsspannung in einen Bereich kommt in dem er nicht mehr richtig arbeitet. >hat jemand eine simple und stabile Beschaltung (z.B. für VRef) http://www.mikrocontroller.net/articles/Standardbauelemente#Shuntregler.2FSpannungsreferenz
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
>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.
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.