Forum: Mikrocontroller und Digitale Elektronik ADC wird von normalem Programmablauf gestört, ATtiny26


von Paul H. (powl)


Lesenswert?

Hi..

Ich versuche für eine Akkuladeschaltung derzeit ein paar Experimente mit 
dem ADC meines ATtiny26. Der Tiny26 steuert zu dem ADC noch einen 
LED-Farb-Fader mit 3 Software-PWMs an.

ich messe über den ADC Kanal 0 und habe dort einen Poti gegen masse und 
AREF angeschlossen. An AREF befindet sich noch ein 100N keramik 
kondensator gegen masse. Alles so wies sein sollte.

Ausgeben lasse ich mir das ganze über I²C auf meinen LED-Anzeigen.

Der ADC wird mit dem Timer1 ungefär 4 mal in der Sekunde gestartet und 
läuft bei 8mhz systemtakt mit internem oszi und 64 vorteiler auf ca 
125khz wandlungsfrequenz. sobald der ADC fertig ist wird eine ISR 
ausgelöst die das ganze per I²C an meine LED-anzeige schickt.

Aber trotzdem spinnt der ADC n bissel. Während die LEDs faden zeigt der 
ADC ziemlich wirr schwankende werte an, je nach potentiometerstellung. 
halte ich die PWM mit meiner hold-funktion an wird nur noch ständig der 
taster abgefragt und nichts mehr geschaltet also vom µC gibt es schonmal 
eignetlich keine potentiellen rauschquellen.

Das seltsame ist nun dass sich der ADC nicht mehr kontinuierlich 
aktualisiert.?! Je nach potistellung springt der ADC nur zwischen vier 
verschiedenen werten rum. Z.b. 3, 259, 515, 771. Wenn ich ihn hin und 
her drehe krig ich immernur eine dieser 4 zahlen. Irgendwann springt das 
ganze auf eine andere ebene ?! z.b. 0, 256, 512, 768. Scheint immer eine 
2erpotenz und eine additive konstante zu sein, wie kommt denn bitte 
sowas zustande?

ich weiß es gibt noch den adc noise reduction sleep mode aber das ist ja 
kein rauschen. scheint eher sowas wie n bug zu sein. was auch immer. 
jemand ne idee?

ach ja, wenn ich vor mein hauptprogramm mal eine endlosschleife einbau 
die den normalen programmablauf verhindert, funktioniert alles voll 
normal.

mfg PoWl

von Paul H. (powl)


Lesenswert?

omg bitte löschen..

hab die falschen register genommen.. jetzt hab ich nur noch eine 
abweichung von +-2 LSB

von Marco (Gast)


Lesenswert?

Ein ähnliches Problem hatte ich letztens auch.
Geholfen hat eine Verkürzung der Zeit, in der gemessen wird um die 
Hälfte (4 Messungen mit 128er Vorteiler).
Ebenfalls erfolgreich war die Version mit AD Messung während die 
globalen Interrupts abgeschaltet sind - die erste Variante war mir 
lieber.

Wie man das eleganter lösen kann kann ich dir leider nicht sagen, aber 
bis hier niemand antwortet, der den Durchblick hat kannst du das ja mal 
testen :).

von Spess53 (Gast)


Lesenswert?

Hi

Bist du sicher, daß du das Low-Byte vom ADC richtig einliest ( richtige 
Reihenfolge)?
Die Werte sehen aus, als ob nur das Highbyte (2Bit) ausgewertet würde.

MfG Spess

von Paul H. (powl)


Lesenswert?

so, ja wie gesagt tut mir leid, habe die falschen register genommen so 
hatte das low byte seinen wert woanders her und immernur das high byte 
hat gewechselt.. das erklärt auch die seltsamen sprunghaften änderungen 
des ADC.

klappt nun schon ganz gut nur den ADC noise reduction modus möchte ich 
noch ausprobieren weil er durch das fading trotzdem noch ganz gut 
schwankt.. ganz egal wie viele kondensatoren ich da dranbaue?

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
Noch kein Account? Hier anmelden.