Forum: Mikrocontroller und Digitale Elektronik "Debouncen" von Fadern


von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Hi,

ich stehe gerade vor einer etwas kniffligen Aufgabe, zumindest für mich.

Ich habe 8 Motorfader (5k) an einen max127 ADC (12Bit, I²C) 
angeschlossen. Nun wackeln die Werte um etwa +-5 Werte hin und her.
Die letztendlich benötigten Werte müssen nur 8Bit gross sein.

Bisher hab ich einfach die überschüssigen Bits durch Division 
weggeworfen. Jetzt will ich aber die Fader natürlich auch per Software 
stellen. Nur da wirds ein wenig ungenau.

Die Werte, die ich setze entsprechen dann also nicht 100%ig der Position 
in Millimetern von 0 aus gesehen. Sprich, wenn ich alle 8 Fader auf 50% 
setzen will, dann stehen sie etwa 1-2mm versetzt zueinander, das immer 
unterschiedlich.

Das Bilden von Mittelwerten ist schon drin im Programm, momentan bilde 
ich den Mittelwert aus 8 einzelnen. Das dauert allerdings etwa 1,2mS pro 
Messung. Letztendlich werden da 24 Fader dran hängen.
8*24*1,2 = 230,4mS => VIEL zu lange, sollte bei etwa 100-130mS liegen. 
Daher will ich die Mittelwertbildung auf 2-3 Werte runterschrauben.

Hab schon 100nF und 1µ Kondensatoren von ADC_inX nach GND und nach VCC 
versucht, brachte nichts ausser verzögertem flattern.

An der Referenz liegts nicht, Spannungen z.B. von Batterien oder die 
Spannung, die mein Multimeter für Diodentest ausgibt bleiben ruhig. Ich 
habe auch eine REF02 Spannungsreferenz dazugebaut, also Referenz ist 
ausgeschlossen.

Wie löst man sowas am geschicktesten?

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


Lesenswert?

Nils S. schrieb:
> > an einen max127 ADC (12Bit, I²C)
> Die letztendlich benötigten Werte müssen nur 8Bit gross sein.
Dann scheide einfach die unteren 4 Bit weg. Damit ist dann auch das 
Zappeln verschwunden. Denn +-5 sind genau diese 4 unnötigen Bits.

von Christian B. (casandro)


Lesenswert?

Für so einen Fader sollte eine Bandbreite von grob 10-100 Hz locker 
reichen.
macht also ein paar µF parallel zum Ausgang. 1µF ist vielleicht etwas 
klein.

Schau auch mal, ob denn nicht die Spannungen auf der Bahn schon 
irgendwie schwanken.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Hüpft noch in selbem Masse,
Hier der Codeauschnitt:
1
int runs = 8;
2
for(i = 0; i < runs; i++) {
3
  buffer[0] = config_byte;        // write the config byte to max127
4
  write(i2c_bus, buffer, 1);
5
  read(i2c_bus, buffer, 2);       // read 2 bytes (ad conv. result) from max127
6
  value = ((buffer[0]<<8)|buffer[1]);
7
  value >>= 4;            
8
  addval += value;
9
}
10
addval /= runs;
Das Format ist vom ADC ist so:
buffer[2]: buffer[0] = High Byte, buffer[1] = Low Byte, die oberen 4 
Bits sind belegt, die unteren leer.

Also: 11.10.9.8.7.6.5.4 | 3.2.1.0.x.x.x.x

Und um die unteren abzuschneiden, mach ich einfach value >>= 8 statt >>= 
4...

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.