Forum: Mikrocontroller und Digitale Elektronik AD-Wert springt


von Marcel (Gast)


Lesenswert?

Hallo.

Ich würde gerne eine Frequenz über einen Poti steuern. Dafür benutze ich 
den 10 Bit AD-Wandler des Controller.
Meine Referenzspannung ist Avcc [ADMUX |= (1<<REFS0);]. Diesen Wert 
würde ich dann gerne benutzen um meine
Frequenz zu verändern. Das heißt ich lade diesen Wert nach OCR1A. Der 
Timer 1 läuft in Mode 15 (Fast PWM).
Es funktioniert soweit ganz gut, nur habe ich das Problem das der 
gewandelte Wert immer um 1 bis 2 Bit springt.
Kann es sein das die Avcc um 5V/1023 schwankt? Kann ich das mit einem 
Trick Programmtechnisch lösen?

Achso, mein Prozessor ist ein ATmega328P.

Grüße

von Pandur S. (jetztnicht)


Lesenswert?

Ja, der Wert kann springen. Falls das nicht gut ist, filtern. zB mit 
einem Tiefpass
Out = Speicher = In/64+Speicher(1-1/64) oder aehnlich.

von Erich (Gast)


Lesenswert?

Marcel schrieb:
> der
> gewandelte Wert immer um 1 bis 2 Bit springt

+/- 1 Bit ist normal, denke ich.
Zeig' mal dein Schaltbild incl. aller (Abblock-) Kondensatoren.
Und auch den Aufbau (Foto oder Layout).

Gruss

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Marcel schrieb:
> Kann es sein das die Avcc um 5V/1023 schwankt?
Wenn, dann würde sie um 5V/1024 schwanken, aber das Problem ist 
vermutlich eher, dass die zu messende Spannung in Bezug zu AGND 
zappelt/schwankt/rauscht...

Sabberalot W. schrieb:
> Falls das nicht gut ist, filtern. zB mit einem Tiefpass
> Out = Speicher = In/64+Speicher(1-1/64) oder aehnlich.
Das hilft nichts gegen das "Schwanken" um 1 LSB. Denn wenn hier der 
Eingangswert dauernd z.B. zwischen 57 und 58 hin- und herzappelt, dann 
tut das auch der Ausgang des Filters.

Der Trick hier ist, das Ergebnis der Filterberechnung nur dann zu 
ändern, wenn das Poti bewegt wird. Das Stichwort dazu heißt "Hysterese". 
such mal im Forum hier nach "poti hysterese" 
https://www.mikrocontroller.net/search?query=poti+hysterese&forums[]=1 
und du findest sowas wie den 
Beitrag "Re: Dezimalwert aus A/D-Wert ableiten"

: Bearbeitet durch Moderator
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Das beobachtete Verhalten ist ein ganz wesentlicher Grund dafür, dass 
man üblicherweise für solche Anwendungen kein Potentiometer einsetzt, 
sondern einen Inkrementalgeber mit phasenversetzten Ausgängen. Solch ein 
Inkrementalgeber hat entweder eine mechanische Rastung, die dafür sorgt, 
dass die Ausgangswerte stabil bleiben, oder man löst das Problem in 
Software, d.h. indem man zwar alle Impulse mitzählt, aber nur Bewegungen 
um mindestens zwei Inkremente zur Aktualisierung des Sollwertes führen.

von batman (Gast)


Lesenswert?

Marcel schrieb:
> Kann es sein das die Avcc um 5V/1023 schwankt?

Um ein knappes Promille? Ja. Da geht sogar locker das Zehnfache, wenn 
die MPU gerade zu rechnen anfängt oder Ströme über die Ports ausgibt. 
Was hast du da angeschlossen?

von HildeK (Gast)


Lesenswert?

Lothar M. schrieb:
> Der Trick hier ist, das Ergebnis der Filterberechnung nur dann zu
> ändern, wenn das Poti bewegt wird. Das Stichwort dazu heißt "Hysterese".
> such mal im Forum hier nach "poti hysterese"

Unter der Annahme, dass die Schwelle dann minimal 2 sein müsste, eher 
noch größer, dann "springt" der Wert auch bei geringer gewollter 
Veränderung um mindestens um diesen Schwellwert. Auch nicht sehr schön.

von Der Andere (Gast)


Lesenswert?

HildeK schrieb:
> Unter der Annahme, dass die Schwelle dann minimal 2 sein müsste, eher
> noch größer, dann "springt" der Wert auch bei geringer gewollter
> Veränderung um mindestens um diesen Schwellwert. Auch nicht sehr schön.

Du kannst bei einem normalen Poti mehr als 500 Zwischenstellungen 
einstellen?

von Carsten R. (kaffeetante)


Lesenswert?

Marcel schrieb:
> Es funktioniert soweit ganz gut, nur habe ich das Problem das der
> gewandelte Wert immer um 1 bis 2 Bit springt.

Um weniger als 1 Bit kann es wohl kaum "springen". Liegt der reale Wert 
zwischen zwei Bits, zappelt es (Quantisierungsfehler).

Bei der Diskussion um mehr als einem Bit geht es zwar um Stabilisierung, 
Filterung, Rauschen etc, aber dann müßte man wissen wie die 
Rahmenbedingungen ausehen und was da eigentlich genau gemacht wird. So 
ist z.B. völlig unklar was die "Frequenz" mit dem Ganzen zu tun hat.

Soll es eine Art Signalgenerator/Sinusgenerator werden?

von HildeK (Gast)


Lesenswert?

Der Andere schrieb:
> Du kannst bei einem normalen Poti mehr als 500 Zwischenstellungen
> einstellen?

Guter Einwand. Aber wenn ich es irgendwo hin drehe, dann habe ich 
theoretisch einen von 1024 Werte.
In der Praxis würde ich ein Poti eh nur mit dem Highbyte auswerten und 
dann noch den Mittelwert von 2 oder 4 Messungen nehmen.

von m.n. (Gast)


Lesenswert?

Lothar M. schrieb:
> Der Trick hier ist, das Ergebnis der Filterberechnung nur dann zu
> ändern, wenn das Poti bewegt wird. Das Stichwort dazu heißt "Hysterese".

Was soll das denn? Das läßt vielleicht Bastlersherz höher schlagen, ist 
aber  nur ein Kaschieren eines schlechten Layouts oder auch zu hoher 
Abtastrate.
Bei einem AVR ist es eigentlich nicht schwierig, dem ADC einen stabilen 
Wert zu entlocken.

von Der Andere (Gast)


Lesenswert?

HildeK schrieb:
> In der Praxis würde ich ein Poti eh nur mit dem Highbyte auswerten und
> dann noch den Mittelwert von 2 oder 4 Messungen nehmen.

Ja eben.
Wobei ich aber Lothars Vermutung beipflichten würde:

Lothar M. schrieb:
> dass die zu messende Spannung in Bezug zu AGND
> zappelt/schwankt/rauscht...

Je nachdem wo der Poti an Gnd hängt und wie der µC an Gnd angebunden ist 
können da schnell mal ein paar mV Differenz zusammenkommen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

m.n. schrieb:
> Bei einem AVR ist es eigentlich nicht schwierig, dem ADC einen stabilen
> Wert zu entlocken.
Ich halte dagegen: schon prinzipiell ist das nicht möglich.
Denn selbstverständlich kann das Poti immer an einem Übergang stehen, 
an dem das LSB schon bei einer Spannungsschwankung von 10µV hin- und her 
kippt.

Und es hilft auch nicht, das niedrigste Bit zu "ignorieren", denn das 
kann sich genauso prinzipiell durch alle 10 Bits hindurchziehen, wenn 
der ADC gerade so "an der Kippe" steht:
0111111111 <- 10µV hin+her -> 1000000000

: Bearbeitet durch Moderator
von batman (Gast)


Lesenswert?

Bei einem Bit ist das noch so aber ab 2 Bit (=4 Quanten) 
Schwankungsbreite greifen Gegenmaßnahmen.

von c-hater (Gast)


Lesenswert?

HildeK schrieb:

> Unter der Annahme, dass die Schwelle dann minimal 2 sein müsste, eher
> noch größer, dann "springt" der Wert auch bei geringer gewollter
> Veränderung um mindestens um diesen Schwellwert. Auch nicht sehr schön.

Also erstens implementiert man das sinnvollerweise als Umkehrhysterese, 
dann gibt es diesen Spring nur an den Umkehrpunkten, nicht aber bei 
monoton wachsenden oder fallenden Werten. Auch (und gerade dann) nicht, 
wenn sie mit Rauschen unterhalb der Hystereseschwelle behaftet sind.

Und zweitens kann man natürlich, wenn die Konstruktion vor allem 
besonders ästhetische Kurvenverläufe erzeugen soll, die Umkehrhysterese 
auch noch mit einem nachfolgenden Tiefpass mit passend gewählter 
Zeitkonstante ergänzen. Praktisch besonders sinnvoll oder gar unbedingt 
nötig ist das aber so gut wie nie.
Der Versuch dazu ist praktisch immer ein Offenbarungseid für: "ich 
versuche jetzt mit Rumbasteln an der Software den bereits im 
Konzept/Hardwaredesign angerichteten Schaden zu verstecken".

Fakt ist jedenfalls: um das unvermeidliche Wackeln bei einer AD-Wandlung 
(unvermeidlich mindestens im letzten Bit bei bestimmten Wertebereichen 
der analogen Eingangsgröße) zu unterdrücken, gibt es nur eine einzige 
zuverlässige Lösung: die Hysterese. Ende der Ansage.

von c-hater (Gast)


Lesenswert?

Lothar M. schrieb:

> Und es hilft auch nicht, das niedrigste Bit zu "ignorieren", denn das
> kann sich genauso prinzipiell durch alle 10 Bits hindurchziehen, wenn
> der ADC gerade so "an der Kippe" steht:
> 0111111111 <- 10µV hin+her -> 1000000000

Genauso ist das. Ich kann nicht verstehen, dass es immer wieder Leute 
gibt, die die Unvermeidlichkeit des Wackelns im letzten Bit nicht 
begreifen können.

von Simpel (Gast)


Lesenswert?

Kosmetischer Overkill:

Per Pwm und Spannungsteiler empirisch eine minimale Offsetspannung auf 
den Eingang mischen, bis man mittig zwischen 2 Schwellen liegt und das 
Wackeln minimiert ist. :-)

von HildeK (Gast)


Lesenswert?

c-hater schrieb:
> HildeK schrieb:
>
>> Unter der Annahme, dass die Schwelle dann minimal 2 sein müsste, eher
>> noch größer, dann "springt" der Wert auch bei geringer gewollter
>> Veränderung um mindestens um diesen Schwellwert. Auch nicht sehr schön.
>
> Also erstens implementiert man das sinnvollerweise als Umkehrhysterese,
> dann gibt es diesen Spring nur an den Umkehrpunkten, nicht aber bei
> monoton wachsenden oder fallenden Werten. Auch (und gerade dann) nicht,
> wenn sie mit Rauschen unterhalb der Hystereseschwelle behaftet sind.

Du hast mich nicht richtig verstanden.
Beispiel mit Umkehrhysterese, mit z.B. Hysterese=10:
- ich drehe das Poti hoch von z.B. 15 nach 30. Gut, die Werte folgen 
brav.
- ich drehe das Poti wieder runter. Erst wenn ich bei 20 bin, wird dann 
der Wert wieder verändert, er springt also von 30 auf 20.
Wie bei einer Mechanik mit lästigem Spiel.
Das meinte ich mit 'Auch nicht sehr schön'.

von Horst S. (Gast)


Lesenswert?

Kann man nicht per Oversampling die Auflösung vergrößern und dann die 
Hysterese drauf legen?
Wenn man 16 mal misst, sollte sich nach 
http://www.atmel.com/images/doc8003.pdf
der Wert um 2 Bit erweitern lassen. Diese beiden Bits könnte man dann 
doch als Hysterese verwenden, oder nicht?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Horst S. schrieb:
> Wenn man 16 mal misst, sollte sich nach
> http://www.atmel.com/images/doc8003.pdf
> der Wert um 2 Bit erweitern lassen. Diese beiden Bits könnte man dann
> doch als Hysterese verwenden, oder nicht?
Ja, aber mit einem Poti kann man sowieso nicht mehr als 8 Bit 
reproduzierbar einstellen. Von daher kann man die Hysterese auch auf den 
letzten 2 Bits des 10 Bit Wertes laufen lassen...

Wenn ich feiner auflösen will, dann nehme ich einen Drehgeber mit 
Beschleunigung.

von Wolfgang (Gast)


Lesenswert?

Horst S. schrieb:
> Kann man nicht per Oversampling die Auflösung vergrößern und dann die
> Hysterese drauf legen?

Das funktioniert nur, wenn du genügend Rauschen auf dem Signal hast.

Erstmal sollte man trotzdem gucken, dass der Digitalteil nicht in AVCC 
und die Potiverdrahtung rein spuckt (Filter VCC->AVCC, Massekonzept) und 
außerdem gucken, ob die Signale stabil und niederohmig genug sind 
(Kondensator für Referenzspannung VRef und Signal). Falls der 
Kanalmultiplexer für den ADC umgeschaltet wird, hilft ein bisschen Zeit 
gegen Übersprechen.

von c-hater (Gast)


Lesenswert?

HildeK schrieb:

> Du hast mich nicht richtig verstanden.

Doch, das habe ich sehr wohl.

> Beispiel mit Umkehrhysterese, mit z.B. Hysterese=10:
> - ich drehe das Poti hoch von z.B. 15 nach 30. Gut, die Werte folgen
> brav.
> - ich drehe das Poti wieder runter. Erst wenn ich bei 20 bin, wird dann
> der Wert wieder verändert, er springt also von 30 auf 20.
> Wie bei einer Mechanik mit lästigem Spiel.

Genau. Und woher das kommt, beschreibt der Rest meines Artikels. 
Kurzfassung: wenn es nötig erscheint, eine Hysterese zu wählen, die 
wirklich "störende" Sprünge bewirkt, stimmt etwas am Konzept der Sache 
grundsätzlich nicht. Capisce?

von Horst S. (Gast)


Lesenswert?

Lothar M. schrieb:
> Wenn ich feiner auflösen will, dann nehme ich einen Drehgeber mit
> Beschleunigung.
Naja, Mehrgangpotis gibt's ja auch noch. Und z.B. ne Fernsteuerungsachse 
(Poti mit Hebel) hat üblicherweise auch 10Bit.

Leider hat der TE nicht geschrieben, wie fein seine PWM auflösen soll. 
Wenn er nen 8-Bit-Timer verwenden würde, hättest Du sicher recht. Er 
nimmt aber wohl den 16-Bit Timer1.

Wolfgang schrieb:
> Das funktioniert nur, wenn du genügend Rauschen auf dem Signal hast.

Ich hab ne ganze Weile nachgedacht, warum das funktioniert. Ich bin zu 
dem Schluss gekommen: Ob Du nun gleichverteiltes Rauschen auf den 
Eingang legst oder einfach nur +/-1Bit Sägezahn, sollte eigentlich egal 
sein.
1
57----------------+--
2
                 +
3
                +
4
               +
5
              +
6
             +
7
            +
8
           +
9
56--------+----------
10
         +
11
        +
12
       +
13
      +
14
     +
15
    +
16
   +
17
55--------------------
Warum die AN von "just a few LSB" spricht, erschließt sich mir 
allerdings auch nach heftigsten geistigen Anstrengungen immer noch 
nicht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Horst S. schrieb:
> Ob Du nun gleichverteiltes Rauschen auf den Eingang legst oder einfach
> nur +/-1Bit Sägezahn, sollte eigentlich egal sein.
Es reicht ein Sägezahn von +-1/2 LSB...

Und du bekommst dann "Subbits", die zwischen den nichtlienaren Bits der 
ADC sitzen. Diese Bits entsprechen dann nicht unbedingt dem, was du 
erwartest. Denn der ADC z.B. der ATtiny85 ist ja von sich aus schon 
+-1 LSB nichtlinear!
Es grenzt also eigentlich an "schönsaufen", wenn z.B. in eine solche 
Übertragungsfunktion noch Zwischenschritte eingefügt werden:
1
 59------------------------------------+
2
                                      +
3
                                     +
4
                                    +
5
                                   +
6
                                  +
7
                                 +
8
                                +
9
 58----------------------------+
10
                           ++++
11
                       ++++
12
 57------------------+
13
                   ++
14
                 ++
15
               ++
16
             ++
17
 56--------+
18
          +
19
         +
20
        +
21
       +
22
      +
23
     +
24
    +
25
 55+
Denn die Software nimmt ja jeden der '+' Zwischenschritte als 
äquidistant an. Und geht daher von falschen Voraussetzungen aus...

von Horst S. (Gast)


Lesenswert?

Ich hab's jetzt mal ausprobiert, einfach einen Trimmer an einen AD-Port 
gesteckt, den ATMega168 programmiert und über BT mitgelesen:
1
Max Min Ov   OvH  Out
2
61, 60, 243, 244, 61
3
61, 60, 243, 244, 61
4
61, 60, 243, 244, 61
5
61, 60, 243, 244, 61
6
61, 60, 242, 244, 61
7
61, 61, 244, 244, 61
8
9
...Poti runter gedreht
10
61, 60, 240, 240, 60
11
60, 60, 240, 240, 60
12
61, 60, 240, 240, 60
13
60, 60, 240, 240, 60
14
60, 59, 237, 240, 60
15
60, 59, 236, 236, 59
16
59, 58, 235, 236, 59
17
58, 57, 231, 231, 57
18
58, 57, 228, 231, 57
19
57, 56, 227, 227, 56
20
57, 56, 225, 227, 56
21
57, 56, 224, 227, 56

Max und Min sind jeweils die Maxima/Minima einer 16er Messreihe.
Ov ist der 12 Bit Oversampling-Wert (Summe der 16 Messwerte um 2 Bits 
nach rechts geschoben)
OvH(old) ist der Merker für die Hysterese (if (abs(Ov - OvH) > 4) OvH = 
Ov;)
Out ist der jitterfreie Wert mit den ursprünglichen 10 Bit Auflösung(OvH 
>> 2).

Prost!

von batman (Gast)


Lesenswert?

Hmm interessant und was bewirkt das jetzt? Daß der Wert sich immer um 
ein volles LSB (Zielauflösung) ändern muß, bevor er übernommen wird?
Also alles unter 1/1024 Änderung wird ignoriert?

von Michael S. (mikel_x)


Lesenswert?

Man kann auch (ähnlich wie bei der Entprellung) eine Serie von Werten in 
einem definierten Zeitfenster einlesen und mit dem alten Wert 
vergleichen. Nur wenn die ganze Serie sich ausnahmslos vom alten Wert 
unterscheidet, wird sie als neuer Wert übernommen.

: Bearbeitet durch User
von Horst S. (Gast)


Lesenswert?

batman schrieb:
> Hmm interessant und was bewirkt das jetzt? Daß der Wert sich immer um
> ein volles LSB (Zielauflösung) ändern muß, bevor er übernommen wird?
> Also alles unter 1/1024 Änderung wird ignoriert?

Im Grunde werden Schwellen durch das Oversampling hinzugefügt. Die 
Hysterese nimmt sie wieder bis zur ursprünglichen Auflösung zurück, 
setzt sie aber flexibler.
Wenn ich mich nicht irre, wirkt das Oversampling auch als Tiefpass, 
(Summenbildung, Teilung). Zumindest sehen die Ov-Werte ziemlich danach 
aus.

von Manfred (Gast)


Lesenswert?

Horst S. schrieb:
> Wenn ich mich nicht irre, wirkt das Oversampling auch als Tiefpass,
> (Summenbildung, Teilung). Zumindest sehen die Ov-Werte ziemlich danach
> aus.

Sehe ich ebenso.

Wenn ich Zeit habe, hole ich mehrere Werte, mache zwischen den Messungen 
jeweils eine Pause und werfe Minimum und Maximum weg.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Manfred schrieb:
> Wenn ich Zeit habe, hole ich mehrere Werte, mache zwischen den Messungen
> jeweils eine Pause und werfe Minimum und Maximum weg.
Nochmal grundlegend: auch ein Medianfilter hilft prinzipiell nicht 
gegen den Effekt, den ich dort im 
Beitrag "Re: AD-Wert springt" beschrieben habe...

: Bearbeitet durch Moderator
von Horst S. (Gast)


Lesenswert?

Um das aber noch klarzustellen. Auf Entstörung verzichten sollte man 
trotzdem nicht.
Schalte ich die Nachbarn des AD-Pins asynchron zur Messroutine als 
Ausgänge hin und her, ist die Jitterfreiheit Vergangenheit.
1
Max  Min  Ov   OvH  Out
2
143, 125, 520, 520, 130
3
143, 125, 511, 511, 127
4
143, 125, 511, 511, 127
5
143, 125, 511, 511, 127
6
143, 122, 510, 511, 127
7
143, 125, 511, 511, 127
8
143, 125, 511, 511, 127
9
143, 125, 514, 511, 127
10
143, 125, 520, 520, 130
11
143, 125, 511, 511, 127
12
144, 125, 512, 511, 127
13
143, 125, 515, 515, 128
14
143, 125, 515, 515, 128
Ich habe jetzt keinen Kondensator am Messpin und auch keinen als 
Abblockung am Controller (ARef = Ub).

von m.n. (Gast)


Lesenswert?

Horst S. schrieb:
> Schalte ich die Nachbarn des AD-Pins asynchron zur Messroutine als
> Ausgänge hin und her, ist die Jitterfreiheit Vergangenheit.

So, wie Deine Meßwerte aussehen, wird Dein Schaltungsaufbau vermutlich 
'unterirdisch' sein. Mit ordentlicher Versorgungsspannung und halbwegs 
solider Masse- und Signalführung dürften keine nennenwerten Störungen 
auftreten. Dein Poti hat hoffentlich keine 1 MOhm, sondern eher <= 10 
kOhm?

Horst S. schrieb:
> Ich habe jetzt keinen Kondensator am Messpin

Nimm besser einen großen mit mehr Picofarad ;-)

von Einer K. (Gast)


Lesenswert?

Wo ist denn unser "Autor: Marcel (Gast)" abgeblieben?
Warte noch auf das Schaltbild ....


m.n. schrieb:
> Horst S. schrieb:
>> Ich habe jetzt keinen Kondensator am Messpin
>
> Nimm besser einen großen mit mehr Picofarad ;-)

Ein Kondensator, zwischen AnalogInput und GND, ist bei einer 
ratiometrischen Messung nicht unbedingt hilfreich.
Denn wenn die Versorgungsspannung schwankt, ergibt sich eine Schwankung 
im gewandelten Wert.
Gerade das, sollte doch die ratiometrische Messung verhindern.
Und damit ist der größte(?) Vorteil der ratiometrischen Messung dahin.

Horst S. schrieb:
> Schalte ich die Nachbarn des AD-Pins asynchron zur Messroutine als
> Ausgänge hin und her, ist die Jitterfreiheit Vergangenheit.

Hmm..
Versetze den Prozessor, während des Messzyklus, in den "noise reduction" 
Schlaf.

von m.n. (Gast)


Lesenswert?

Arduino F. schrieb:
> Ein Kondensator, zwischen AnalogInput und GND, ist bei einer
> ratiometrischen Messung nicht unbedingt hilfreich.
> Denn wenn die Versorgungsspannung schwankt, ergibt sich eine Schwankung
> im gewandelten Wert.
> Gerade das, sollte doch die ratiometrische Messung verhindern.
> Und damit ist der größte(?) Vorteil der ratiometrischen Messung dahin.

Du gehst von einem idealen ADC aus: extrem hoher Rin und Leckströme im 
fA-Bereich? Ein ATmega328 ist davon weit entfernt.

Wir kennen weder die Schaltung noch die Abtastrate. Daher ist ein 
ADC-Eingang zunächst möglichst niederohmig anzusteuern.

von Der Andere (Gast)


Lesenswert?

Der TO: Marcel hat sich seit dem Eröffnungspost nicht mehr gemeldet.

von Horst S. (Gast)


Lesenswert?

Wenn ich die Abblockung 100nF direkt am Controller nachhole, sehe ich, 
...
1
143, 125, 510, 511, 127
2
143, 125, 511, 511, 127
3
143, 125, 511, 511, 127
4
143, 125, 514, 511, 127
5
143, 123, 510, 511, 127
6
143, 125, 511, 511, 127
7
143, 125, 511, 511, 127
8
143, 125, 515, 515, 128
9
143, 125, 520, 520, 130
10
143, 125, 511, 511, 127
11
143, 125, 510, 511, 127
...das war's nicht (kein Wunder, die Kapazitäten vom Regler sitzen hier 
auf der Schaltung nur 'nen guten Zentimeter vom Controller weg).

Schalte ich noch 1nF am Messeingang dazu (das Poti hat 50k*), sieht die 
Sache wieder wesentlich freundlicher aus.
1
128, 126, 505, 504, 126
2
127, 126, 504, 504, 126
3
128, 126, 505, 504, 126
4
128, 126, 505, 504, 126
5
127, 126, 504, 504, 126
6
127, 126, 504, 504, 126
7
128, 126, 504, 504, 126
8
127, 125, 504, 504, 126
9
128, 126, 504, 504, 126
10
128, 126, 504, 504, 126
11
127, 125, 503, 504, 126
12
127, 126, 504, 504, 126
13
128, 126, 504, 504, 126
14
127, 126, 504, 504, 126
(nicht wundern, die absoluten Werte sind anders, weil ich 
zwischenzeitlich am Poti geschraubt habe).

von Einer K. (Gast)


Lesenswert?

m.n. schrieb:
> Du gehst von einem idealen ADC aus:
Nein!

m.n. schrieb:
> Daher ist ein
> ADC-Eingang zunächst möglichst niederohmig anzusteuern.
Das sagtest du vor her schon!
Habe ich das kritisiert?
Nein!

Ich glaube, dass du mich nicht verstanden hast.
Ich sprach nur davon dass dort ein Kondensator evtl kontraindiziert sein 
könnte, sein wird. Da kannst du mit den Füßen auf der Erde rum stampfen, 
solange du möchtest. Ein Kondensator kann an der Stelle mehr Schaden 
anrichten, als Nutzen bringen.

von Einer K. (Gast)


Lesenswert?

Horst S. schrieb:
> (das Poti hat 50k*)

Das Datenblatt des 168 sagt kleiner als 10kOhm.
(laut meiner Erinnerung)
Bei 50k ist der Kondensator wohl unabdingbar.
Die Vorteile wirken sich dann stärker aus, als die Nachteile.

von m.n. (Gast)


Lesenswert?

Arduino F. schrieb:
> Da kannst du mit den Füßen auf der Erde rum stampfen,
> solange du möchtest.

Macht man das so? Zum Verdichten nehme ich einen Rüttler.

> Ein Kondensator kann an der Stelle mehr Schaden
> anrichten, als Nutzen bringen.

Man sieht ja, welcher (Frost-)Schaden durch 1 nF entstanden ist. Die 
Mittelwerte sind eingefroren ;-)

von Wolfgang (Gast)


Lesenswert?

Horst S. schrieb:
> Ich habe jetzt keinen Kondensator am Messpin und auch keinen als
> Abblockung am Controller (ARef = Ub).

Bevor du das nicht gemacht hast und AVcc nicht vernünftig abgeblockt 
ist, misst du in den unteren Bits Hausnummern.

Horst S. schrieb:
> Schalte ich die Nachbarn des AD-Pins asynchron zur Messroutine als
> Ausgänge hin und her, ist die Jitterfreiheit Vergangenheit.

Gut, dass du nach zweieinhalb Tagen selber drauf gekommen bist ...

Wolfgang schrieb:
> Erstmal ...

von Horst S. (Gast)


Lesenswert?

Arduino F. schrieb:
> Das Datenblatt des 168 sagt kleiner als 10kOhm.
> (laut meiner Erinnerung)
> Bei 50k ist der Kondensator wohl unabdingbar.
> Die Vorteile wirken sich dann stärker aus, als die Nachteile.

Aus Ermangelung eines 10k Potis habe ich hier 2* 4k7-R's als Ersatz für 
ein 10k-Poti in Mittelstellung eingesetzt. Den 1nF habe ich entfernt:
1
520, 508, 2045, 2046, 511
2
520, 510, 2048, 2046, 511
3
520, 510, 2046, 2046, 511
4
520, 510, 2045, 2046, 511
5
520, 508, 2045, 2046, 511
6
520, 510, 2048, 2046, 511
7
520, 510, 2050, 2050, 512
8
520, 510, 2045, 2045, 511
9
520, 510, 2050, 2050, 512
10
520, 510, 2046, 2046, 511
11
520, 510, 2046, 2046, 511
12
520, 510, 2046, 2046, 511
13
520, 510, 2045, 2046, 511
14
520, 510, 2050, 2050, 512

Die 10k-Angabe bezieht sich auf die Impedanz der Quelle, Die S/H-Stufe 
(geschaltete Kapazität) saugt eine höhere Impedanz quasi leer. Die 10k 
musst Du also einhalten, wenn Du sich schnell ändernde Werte misst oder 
wenn Du den ADMUX bemühst.
Ich tue hier beides nicht, aber Du siehst anhand der oben gezeigten 
Werte: Durch die niedrigere Impedanz der Quelle bekomme ich die Störung 
vom Nachbarpin nicht weg.

von Einer K. (Gast)


Lesenswert?

Horst S. schrieb:
> Durch die niedrigere Impedanz der Quelle bekomme ich die Störung
> vom Nachbarpin nicht weg.
Nunja, das Datenblatt empfiehlt ja auch den Schlaf, um solche Störungen 
fern zu halten.

Aber das willst du ja nicht.
Also nimm den Kondensator.

von batman (Gast)


Lesenswert?

Wird das Poti direkt vom AVcc gespiesen?

von HildeK (Gast)


Lesenswert?

Horst S. schrieb:
> Aus Ermangelung eines 10k Potis habe ich hier 2* 4k7-R's als Ersatz für
> ein 10k-Poti in Mittelstellung eingesetzt.

Gut, dann hast du die maximal 10k Quellimpedanz auch deutlich 
unterschritten: es sind jetzt 4k7/2 = 2k35. Ein 50k Poti erfüllt das ja 
fast auch noch: Mittelstellung, zwei mal 25k macht 12k5 Quellimpedanz - 
als Maximum. Jede andere Stellung des Potis liefert kleinere Werte für 
die Quellimpedanz.

m.n. schrieb:
>> Ein Kondensator kann an der Stelle mehr Schaden
>> anrichten, als Nutzen bringen.
>
> Man sieht ja, welcher (Frost-)Schaden durch 1 nF entstanden ist. Die
> Mittelwerte sind eingefroren ;-)

Der Kondensator kann unter bestimmten Bedingungen falsche Werte liefern, 
was nicht heißt, dass sie deshalb nicht weitgehend konstant sind.
Das passiert dann, wenn die Abtastfrequenz hoch ist und die durch den 
Samplekondensator entnommene Ladungsmenge auf Grund einer hohen 
RC-Zeitkonstante am Eingang innerhalb der Zeit 1/fa den C nicht wieder 
ausreichend aufgeladen werden kann.
Ob das merklich ist, hängt natürlich auch noch vom inneren Aufbau und 
Ablauf des Abtastvorgangs ab (Mulitplexbetrieb, Leeren des 
Samplekondensators bei jedem Vorgang etc.)

von Wolfgang (Gast)


Lesenswert?

HildeK schrieb:
> Das passiert dann, wenn die Abtastfrequenz hoch ist und die durch den
> Samplekondensator entnommene Ladungsmenge auf Grund einer hohen
> RC-Zeitkonstante am Eingang innerhalb der Zeit 1/fa den C nicht wieder
> ausreichend aufgeladen werden kann.

Die Ladung für den Samplekondensator muss so oder so irgendwo her 
kommen. Falls kein zusätzlicher Kondensator am Eingang vorhanden ist, 
hat man beim Umladen des Samplekondensators eine Spannungsabfall am 
Poti, der impedanz-/einstellungsabhängig zu einem Messfehler führt. Mit 
Kondensator wird der Spannungssprung um das Verhältnis C zu Sample-C 
kleiner, auch wenn man die RC-Zeitkonstante zum Nachladen hat.

von m.n. (Gast)


Lesenswert?

Wolfgang schrieb:
> Mit
> Kondensator wird der Spannungssprung um das Verhältnis C zu Sample-C
> kleiner, auch wenn man die RC-Zeitkonstante zum Nachladen hat.

So ist es. Und wenn die RC-Zeitkonstante wegen hoher Abtastrate zu hoch 
wird, muß man ggf. noch einen zusätzlichen OPV verwenden - ohne auf den 
Kondensator verzichten zu können.

von batman (Gast)


Lesenswert?

Hier wird aber gar nix geladen, das Poti steht still. :)

von Erich (Gast)


Lesenswert?

Der Andere schrieb:
> Der TO: Marcel hat sich seit dem Eröffnungspost nicht mehr gemeldet.

Marcel hat eine Umschulung begonnen, er studiert jetzt Philosophie.

von HildeK (Gast)


Lesenswert?

Wolfgang schrieb:
> Mit
> Kondensator wird der Spannungssprung um das Verhältnis C zu Sample-C
> kleiner, auch wenn man die RC-Zeitkonstante zum Nachladen hat.

Ja, aber dieses Verhältnis kann man so wählen, dass es < 1/2 LSB bleibt.
Wenn aber dieser Betrag z.B. nur zur Hälfte wieder durch das Nachladen 
des externen C ausgeglichen werden kann, dann summiert sich das ev. auf 
einige LSBs auf, bis sich ein Gleichgewicht einstellt. Dies kommt dann 
daher, dass bei einer größer werdenden Differenz zwischen der Spannung 
am externen C und der EMK der Quelle sich auch der Ladestrom in den 
externen Cs erhöht, so dass sich irgendwann Ladung und Entladung 
ausgleichen. Die fester Ablage bleibt aber.
Damit gibt es einen optimalen Wert für die externe RC-Kombination. Zu 
kleine Zeitkonstanten filtern ungenügend und liefern ein schlechtes 
Verhältnis beider Cs, zu hohe Werte bringen Ablagen.
Das Ganze bleibt auch abhängig, wie das Abtastsystem arbeitet: Wird der 
Sample-C nach dem Vorgang entladen, werden im Mulitplexbetrieb mit dem 
selben C noch andere Signale zwischendurch gemessen und welche Werte 
hatten diese. Oder, ist im AD-Wandlereingang vielleicht sogar noch ein 
Buffer.

Ich weiß, das ist etwas akademisch, ist aber als Fehlerquelle in der 
Literatur bzw. in App-Notes von Herstellern (selten mal) vermerkt und 
sollte bei hohen Genauigkeitsanforderungen mit hoher Auflösung und 
schneller Abtastung zumindest betrachtet werden.
Mich hatte vor einigen Jahren ein Xilinx-FAE darauf hingewiesen und auch 
Gleichungen geliefert. Leider habe ich darauf keinen Zugriff mehr.

von m.n. (Gast)


Lesenswert?

HildeK schrieb:
> sollte bei hohen Genauigkeitsanforderungen mit hoher Auflösung und
> schneller Abtastung zumindest betrachtet werden.

Da auf jeden Fall. Schaltungsbeispiele für die Signalaufbereitung 
schneller ADCs findet man vielfach in den Datenblättern schneller OPVs.
Fehler bei zu hoher Ausgangsimpedanz am ADC-Eingang merkt man auch 
daran, daß die Linearität 'flöten geht'. Bei den 10 Bit eines AVR ADCs 
ist das alles weniger problematisch.

von Wolfgang (Gast)


Lesenswert?

HildeK schrieb:
> Ich weiß, das ist etwas akademisch, ...

Für sooh akademisch halte ich das gar nicht. Jedem, der über den 10-Bit 
Tellerrand hinaus guckt und mal genauer drauf achtet, was sein 
Messsystem eigentlich so treibt, sollten derartige Problemstellen schon 
aufgefallen sein. Nimm z.B. PC-Messkarten von NI. Der unvoreingenommene 
Nutzer glaubt ein Plug&Play 16-Bit Messsystem einzusetzen. Diese heile 
Welt bricht schnell zusammen, wenn man hinguckt. Da ist 
Kanalübersprechen über den Multiplexer ein ernstes Thema.

von Horst S. (Gast)


Lesenswert?

Arduino F. schrieb:
> Nunja, das Datenblatt empfiehlt ja auch den Schlaf, um solche Störungen
> fern zu halten.

Einschränkung dazu: Der Schlaf reduziert den Radau, den der Controller 
selbst produziert. Führe ich die Störung von Extern in den Nachbarpin 
(zweiter AD-Messkanal), hilft das nicht.

batman schrieb:
> Wird das Poti direkt vom AVcc gespiesen?
Ub = AVCC = ARef
Ich missbrauche hier für die Tests eine uralte Platine, mit der mein 
Sohn früher mal Servos und Motoren gesteuert hat. Vier der Pins an PORTC 
laufen auf Servostecker, an einen davon patche ich hier das Poti. Als 
wir (er) das Teil gebaut haben, war er noch in der Grundschule, da 
wollte ich ihm neben den ganzen Größenwahndiskussionen ("ich brauche 
mindestens 30 Servos" - "Du brauchst vier Servos, LEDs und 'nen 
TWI-Erweiterungsport") nicht auch noch den ADC unter die Nase reiben.

Ich hab noch was ausprobiert, den 1nF am Poti wieder angelötet, ein 
kleines Fernsteuerungsservo angeschlossen und mit einem Jittersignal am 
PWM-Eingang versehen, um mal Spikes auf der Versorgung des Controllers 
zu erzeugen. Das zuckt jetzt also munter vor sich hin.
1
Max  Min  Ov    OvH   Out
2
318, 318, 1272, 1272, 318
3
318, 318, 1272, 1272, 318
4
327, 318, 1274, 1272, 318 !!!
5
318, 318, 1272, 1272, 318
6
318, 318, 1272, 1272, 318
7
318, 318, 1272, 1272, 318
8
328, 317, 1274, 1272, 318 !!!
9
318, 318, 1272, 1272, 318
10
318, 318, 1272, 1272, 318

Trotzdem die Versorgung jetzt >200mV-Spikes (Hameg bemüht) aufweist, ist 
das Ergebnis immer noch gut.

Drehe ich das Poti gegen Ub, wirkt die Gleichtaktunterdrückung auf die 
Spikes am besten (Ub, ADC-Eingang, AVCC und ARef haben alle die gleiche 
Quelle).
1
Max   Min   Ov    OvH   Out
2
1005, 1004, 4018, 4020, 1005
3
1005, 1004, 4019, 4020, 1005
4
1005, 1005, 4020, 4020, 1005
5
1005, 1005, 4020, 4020, 1005
6
1010, 1005, 4017, 4020, 1005  !!!
7
1005, 1005, 4020, 4020, 1005
8
1005, 1005, 4020, 4020, 1005

Drehe ich das Poti gegen Masse, sind die Spikes erwartungsgemäß am 
besten in den Messwerten zu sehen:
1
Max  Min Ov  OvH Out
2
6,   6,  24, 24, 6
3
6,   6,  24, 24, 6
4
27,  2,  27, 24, 6 !!!
5
6,   5,  23, 24, 6
6
6,   6,  24, 24, 6
7
6,   6,  24, 24, 6
8
26,  2,  27, 24, 6 !!!
9
6,   6,  24, 24, 6

Wenn ich jetzt anfange, an AVCC zu filtern, müsste ich das Poti 
idealerweise mit hinter die Filterschaltung von AVCC/ AREF nehmen, damit 
ich mit Filter kein schlechteres Ergebnis bekomme als ohne.
Sehe ich das richtig so?

von Joachim B. (jar)


Lesenswert?

Horst S. schrieb:
> Wenn ich jetzt anfange, an AVCC zu filtern, müsste ich das Poti
> idealerweise mit hinter die Filterschaltung von AVCC/ AREF nehmen, damit
> ich mit Filter kein schlechteres Ergebnis bekomme als ohne.
> Sehe ich das richtig so?

das ist natürlich logisch da die AVCC/AREF die Ref ist, wieso fragst du?

und ohne Spannungsumweg als radiometrische Messung ist ADC das 
Teilerverhältnis

von Einer K. (Gast)


Lesenswert?

Eigentlich dachte ich bisher, du hättest dir schon Mühe gegeben einen 
sauberen Aufbau hin zu stellen..........

Tipp:
Wer Schrauben in eine Waschmaschine wirft, darf sich über wackelnde ADC 
Werte nicht beschweren.


Ja, das Poti ruhig hinter den Filter.

Du solltest Aref nicht belasten.
Also, wenn, dann an Avcc.

Horst S. schrieb:
> Führe ich die Störung von Extern in den Nachbarpin
> (zweiter AD-Messkanal), hilft das nicht.
Nicht ohne Grund, kann man den Digitalteil der Analog Pins deaktivieren.
Das spart etwas Strom, und verringert das Gezappel.

von Horst S. (Gast)


Lesenswert?

Joachim B. schrieb:
> das ist natürlich logisch da die AVCC/AREF die Ref ist, wieso fragst du?
War ne Fangfrage, sorry.
Beim Poti kann ich das machen, bei 'nem einfachen Temperatursensor 
KTY... auch.
Wenn ich 'nen Sensor nehme, der analog ausgibt, aber die Versorgung 
pulst (z.B. Sharp IR Abstandssensoren, 1A), werde ich wohl nicht 
umhinkommen, das Teil einzeln zu entstören.
Ehrlich gesagt wäre ich allerdings bis dato auch nicht auf die Idee 
gekommen, nen Eingabepoti einfach mit an AVCC zu hängen.

Arduino F. schrieb:
> Nicht ohne Grund, kann man den Digitalteil der Analog Pins deaktivieren.
> Das spart etwas Strom, und verringert das Gezappel.
Der wichtigste Hinweis aus der AN fehlt noch: Vermeide steilflankige 
Signale an den Nachbarpins.
Hätte ich auch nicht getan, wenn es nicht so schön in der Praxis 
Störungen (Übersprechen) auf der Zuleitung des AD-Pins simulieren würde.

Arduino F. schrieb:
> Eigentlich dachte ich bisher, du hättest dir schon Mühe gegeben einen
> sauberen Aufbau hin zu stellen..........
Ich habe hier letztens im Forum die Idee gelesen: "Löte alle Filter erst 
zum Schluss ein. Teste dabei für jeden einzelnen Filter die Wirkung".
Ich wollte das mal ausprobieren und das bot sich hier mit dem 
Oversampling regelrecht an.

von Joachim B. (jar)


Lesenswert?

Horst S. schrieb:
> Ehrlich gesagt wäre ich allerdings bis dato auch nicht auf die Idee
> gekommen, nen Eingabepoti einfach mit an AVCC zu hängen.

ist aber Standard, z.B. so

https://forelectronics.files.wordpress.com/2014/05/tsop-ckt1.jpg

von Einer K. (Gast)


Lesenswert?

Achso....
Da wird mir ja einiges klarer...

Du willst Störungen provozieren, anstatt diese vermeiden zu wollen, wie 
die meisten anderen.

Dann wünsche ich dir noch viel Erfolg, auf allen deinen Wegen!

von Horst S. (Gast)


Lesenswert?

Joachim B. schrieb:
> Horst S. schrieb:
>> Ehrlich gesagt wäre ich allerdings bis dato auch nicht auf die Idee
>> gekommen, nen Eingabepoti einfach mit an AVCC zu hängen.
>
> ist aber Standard, z.B. so
>
> https://forelectronics.files.wordpress.com/2014/05/tsop-ckt1.jpg

Verklickt?
(Verstehe den Kontext zum Verlinkten gerade nicht)

von Joachim B. (jar)


Lesenswert?

Horst S. schrieb:
> Verklickt?
> (Verstehe den Kontext zum Verlinkten gerade nicht)

nö,

es ging um Filterung der Versorgung um Störungen von Analogwerten 
fernzuhalten, im TSOP sind Analogschaltungen.

Will man also radiometrische Messungen oder Spannungsmessungen zu einem 
ADC leiten scheint es mir logisch die Versorgung der Quelle besser zu 
filtern.

von Horst S. (Gast)


Lesenswert?

Ach, ich hatte Dich so verstanden, dass es Standard ist, hinter den 
AVCC-Filter des Controllers zusätzliche Peripherie zu hängen (und der 
Link sei ein konkretes Beispiel dafür). Sorry, mein Fehler.

von Joachim B. (jar)


Lesenswert?

Horst S. schrieb:
> Sorry, mein Fehler.

kein Problem, aber ein geeignetes Poti am gefilterten AVCC aich nicht ;)

: Bearbeitet durch User
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.