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 ?
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
@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?
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?
Maximilian schrieb:> dadurch schaffe ich schwankungen +-1
Darunter wirst Du wohl auch kaum kommen, denn daas ist der sog.
Quatisierungsfehler.
Gruss
Harald
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
@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.
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.
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
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.
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.
c-hater schrieb:> Das einzige, was man machen kann, ist
nach einer Messwertberuhigung (gleitender Mittelwert) eine vernünftige
Hysterese zu programmieren...
...
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 :)
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.
...