Forum: Mikrocontroller und Digitale Elektronik 10 bit adc zu 8 bit glätten?


von Maximilian (Gast)


Lesenswert?

Hey Ich fange gerade mit der Avr bastelei an und habe mal eine Frage. 
Ich lese einen Poti mit mein 10 Bit analog signal ein. dieses wackelt 
einwenig ~+-4
Jetzt würde ich gerne dieses Signal zu 8bit umwandeln aber eben nicht 
einfach nur teilen, weil dann würde das 8 bit signal ja auch wackeln.
es muss doch eine möglichkeit geben dieses auszublenden?

Meine idee
das 8 bit erst +-1 wenn das 10bit +-5 macht? wenn dann aber das 10bit 
mal -+5 schwankt würde er das 8 bit unkontroliert rauf oder 
runterzählen. Fail

Hat jemand mal einen Denkanstoss ?

von Chris (Gast)


Lesenswert?

du könnstest zb den mittelwert von hausnummer 16  messungen nehmen
der sollte dann deutlich weniger schwanken
kostet allerdings zeit

von Spess53 (Gast)


Lesenswert?

Hi

Dein Bitwackeln deutet eher auf Hard- und/oder Softwarewareprobleme hin.

-wie hoch ist dein ADC-Takt?
-welchen Widerstand hat dein Poti?

Ein 10...100nF Keramikkondensator vom ADC-Eingang nach Masse kann wahre 
Wunder bewirken.

8 Bit bekommst du auch, wenn du das ADLAR-Bit setzt und nur ADCH 
ausliest.

MfG Spess

von Falk B. (falk)


Lesenswert?

@Maximilian (Gast)

>Ich lese einen Poti mit mein 10 Bit analog signal ein. dieses wackelt
>einwenig ~+-4

Da ist eine kleine Störung auf deiner Versorgungs- oder Messpannung.

>Jetzt würde ich gerne dieses Signal zu 8bit umwandeln aber eben nicht
>einfach nur teilen, weil dann würde das 8 bit signal ja auch wackeln.
>es muss doch eine möglichkeit geben dieses auszublenden?

Filtern, einfach den Mittelwert mehrerer Messwerte bilden. Aber eine 
solide analoge Schaltung sollte man auch haben. Wie sieht deine aus?

von Maximilian (Gast)


Lesenswert?

Also mittelwert ist schonmal eine gute idee dadurch schaffe ich 
schwankungen +-1
Wenn jetzt der Poti aber blöd steht reicht das noch immer aus um den 8 
bit wert zum wackeln zu bringen. Daher möchte ich irgendwie die normale 
teilung /4 umgehen. Nur 8 bit auslesen hat leider ja den gleichen efekt 
wie /4 teilen.
Mit Keramikkondensatoren habe ich nicht gespart :) der Poti hat 10K 
(übrings aufschrift ist 10 Kilobyte warum auch immer )

Mal Offtipic Warum tickt meine Soundkarte wenn ich ein Byte in meinen 
Rs232 sende?

von Harald W. (wilhelms)


Lesenswert?

Maximilian schrieb:

> dadurch schaffe ich schwankungen +-1

Darunter wirst Du wohl auch kaum kommen, denn daas ist der sog.
Quatisierungsfehler.
Gruss
Harald

von Chris (Gast)


Lesenswert?

das muss nicht mal ein quantisierungsfehler sein, aber harald hat schon 
recht:
das letzte bit wirst du so nicht festnageln können

entweder du lebst damit oder du baust auf basis deines 10-bit 
mittelwertes noch eine hysterese ein
da is dann aber wirklich schon die frage wozu

von ... (Gast)


Lesenswert?

Medianfilter. Der ist wesentlich leistungsfähiger als der schnöde 
Mittelwert.

von Falk B. (falk)


Lesenswert?

@Maximilian (Gast)

>Also mittelwert ist schonmal eine gute idee dadurch schaffe ich
>schwankungen +-1

Praktisch jeder normale ADC wackelt immer ein wenig zwischen zwei 
Stufen. Tut er das nicht, ist er a)defekt oder man hat zufällig eine 
Spannung exakt in der Mitte eines Quantisierungsintervalls mit sehr 
wenig Rauschen erwischt.

Mit Hysterese kann man das Wackeln unterdrücken. Sprich, erst wenn die 
Änderung zwischen altem und neuem ADC-Wert > x ist, wird der neue Wert 
angezeigt.

>Mal Offtipic Warum tickt meine Soundkarte wenn ich ein Byte in meinen
>Rs232 sende?

Weil irgendwo ein Eingang offen ist und die vom RS232 verursachte 
Störuing einfängt.

von Maximilian (Gast)


Lesenswert?

Also das ich "hardwareseitig" nicht darunter komme ist mir klaar. 
irgendwo muss der adc ja umschalten und wenn der Poti blöde steht 
passiert das wohl zwangsleufig. Daher suche ich nach einer Möglichkeit 
das eventuell über die Software zu lösen.

Das ganze soll eine Bedinoberfläche für eine Lichtsoftware werden. Das 
original Stellpult lässt keine Schwankungen zu, egal wie fein ich die 
Fader einstelle es wackelt nix. Also muss da ja die Software das Wackeln 
erkennen und unterbinden.

Wie sage ich aber meinem Avr das er das lassen soll.
Den wert nur weitergeben wenn er <>2 als der alte ist führt ja dazu das 
ich auch nurnoch in 2er schritten stellen kann.
dann eben die noch nicht ganz klaare idee wenn der 10bit sich genug 
verändert hat den 8 bit +- 1.

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


Lesenswert?

Der ADC sollte nicht um +-1 schwanken, sondern nur um +-0,5.
Also wenn z.B. der "richtige" Wert 6 ist, dann sollten bestenfalls 6 und 
7 oder 6 und 5 auftreten. Aber nicht: 5, 6 und 7....

Und ab da kann dann eine Mittelwertbildung und das Einberechnen des 
aktuellen Werts für Stabilität sorgen: wenn der aus 20 ADC Werten 
berechnete Mittelwert z.B. 5,5 ist, dann wird noch der aktuelle 
"Ausgabewert" (das was ausgegeben wird) von 6 dazuaddiert, und das Ganze 
durch 2 geteilt. Heraus kommt 5,75 was mit passender Rundung wieder 6 
gibt.

Erst, wenn der ADC Mittelwert mal auf 4,9 absinkt, ergibt sich nach 5+6 
geteilt durch 2 gleich 5,45 eine gerundete 5 als Ausgabe, die dann aber 
bleibt, biss der ADC Mittelwert auf 6,0 ansteigt.

Noch nicht ganz klar?
Einfach mal nachdenken. Das Stichwort heisst: Hysterese

von Georg G. (df2au)


Lesenswert?

Maximilian schrieb:
> Wenn jetzt der Poti aber blöd steht

Da hat das Poti wohl eine Macke in der Bahn, kratzt.

von c-hater (Gast)


Lesenswert?

Maximilian schrieb:

> Also mittelwert ist schonmal eine gute idee dadurch schaffe ich
> schwankungen +-1

Wackeln im letzten Bit ist bei digitaler Messung wegen der 
unumgägnglichen Diskretisierung einer kontinuierlichen Meßgröße ziemlich 
unvermeidbar.

Das einzige, was man machen kann, ist zu steuern, wie häufig es wackelt, 
indem man einfach die Meß- und/oder Anzeigefrequenz niedrig genug wählt 
bzw. die Zeitkonstante einer wie auch immer gearteten Glättungsfunktion 
hoch genug.

von Pepe (Gast)


Lesenswert?

Maximilian schrieb:
> Also mittelwert ist schonmal eine gute idee dadurch schaffe ich
> schwankungen +-1
> Wenn jetzt der Poti aber blöd steht reicht das noch immer aus um den 8
> bit wert zum wackeln zu bringen.
Du brauchst einen Filter mit Hysterese. Du gibst nur Änderungen weiter, 
die lange genug anstehen. Dazu das Signal mit einem Wert runden, das im 
Rahmen einer längeren Zeitspanne von z.B. 5s zwischen 0 und 0,5 
wechselt. Dann immer nur Werte weitergeben, die sich um wenigstens 2 
digits geändert haben, wobei die Rundung und Glättung so erfolgen muss, 
das tatsächlich immer nur 1 Bit infolge des Rauschens zappelt.

von Hannes L. (hannes)


Lesenswert?

c-hater schrieb:
> Das einzige, was man machen kann, ist

nach einer Messwertberuhigung (gleitender Mittelwert) eine vernünftige 
Hysterese zu programmieren...

...

von Maximilian (Gast)


Lesenswert?

Sooo Hysterese war wohl genau das was ich mir gewünscht hatte.
Jetzt habe ich einen +-2 freiraum zwischen auf und abregeln und es 
wackelt nixmehr. Trozdem Noch einen sauberen regelbereich von 0-255 in 
einser schritten.


Vielen Dank :)

von Markus W. (feuerrot)


Lesenswert?

> [Von 10 bit auf 8 bit]

Wo ist mein Denkfehler, wenn ich jetzt einfach vorschlagen würde, die 2 
LSB wegzuwerfen?

von Hannes L. (hannes)


Lesenswert?

Markus Witt schrieb:
> Wo ist mein Denkfehler, wenn ich jetzt einfach vorschlagen würde, die 2
> LSB wegzuwerfen?

Es klappert weiterhin, wenn es beim Klappern einen Übertrag ins dritte 
Bit gibt. Daher mit Mittelwertbildung (Software-Tiefpass) auf 
10-Bit-Basis Ausreißer ausfiltern und dann (noch auf 10-Bit-Basis) eine 
Hysterese einrichten. Danach können die beiden unteren LSB weggeworfen 
werden, ohne dass da noch etwas klappert. Das geht natürlich nur bei 
relativ langsamen Signalen.

...

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.