PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Drehimpulsentpreller



tholan
30.08.2005, 22:57
Hi,
Ich probiere gerade einen mechanischen Drehimpulsgeber
mit 12 Stufen an einem ATMega8 aus.
Der hängt an PC0 (Rechtsdrehung) und PC1 (Linksdrehung).
PC0 und PC1 sind als Eingänge mit aktivem Pullup konfiguriert.
Der Schalteranschluß C schaltet beim Drehen PC0, bzw. PC1
nach Masse.
Zwei LEDs, die mir die Impulse zeigen, hängen noch an PC2 und PC3.
Der Sourcecode sollte eigentlich stimmen.
Die LEDs zeigen mir schon zuverlässig an,
in welche Richtung ich drehe,
wenn sie denn mal reagieren. Ich nehme an,
der Impulsgeber prellt ganz schön beim Drehen.
Die Pullups haben laut Datenblatt 'nen Wert von 20k - 50K.
Was wäre denn da für ein Kondensator einzusetzen, um
die "Drehimpulspreller" ein bischen zu glätten?
Oder gibt's geschicktere Methoden (in Hardware!),
das Teil zu entprellen? Die "debounce" Funktion
scheint mir ziemlich Resourcenfressend zu sein und
haut ja evtl. bei Drehimpulsgebern nicht hin (Geschwindigkeit).
Danke schonmal,
tholan

PicNick
31.08.2005, 07:58
Wir hatten einem Thread über Impulsgeber, da sind wir statt einen Kondi von digitalen Delay-Strecken (ein paar Gatter hintereinander) ausgegangen.
Also (Signal direkt) XOR (Signal delayed) => Edge

Klaus_0168
31.08.2005, 08:12
Hi tolan,

die Zeitkonstante eines RC-Gliedes berechnet sich

t = R * C

Die berechenete Zeitspanne ist die Zeit, in der sich der Ausgang um 63% zum Wert vom Eingang annähert.

Grüße Klaus

tenner
31.08.2005, 16:31
hallo,

eigentlich brauchst du einen Drehimpulsgeber nicht entprellen, dies wird von der Software nebenbei mit erledigt (stichwort: Graycode).

Stellt sich die Frage wie du den Drehimpulsgeber auswertest?

tholan
01.09.2005, 10:15
Hi,
danke für eure Antworten.
Hab das jetzt so gemacht, wie PicNic angedeutet hat:
Hab 'n EX-OR Gatter mit 'nem 7400 gebastelt und an A und
B des Reglers gehängt. Das Q vom EX-OR geht an Interrupt 0.
Der macht dann 4 Flanken für einen gültigen Durchlauf.
A vom Impulsgeber geht an PC0.
2* 10nF hab ich noch am Drehregler von A bzw. B gegen
C (Masse) gelötet. In meinem Sampler (X7000 von Akai mit
Drehimpulsregler) haben die das auch so gemacht.
Tau kann ich nicht berechnen, da ich den Eingangswiderstand
des 7400 nicht kenne.
Der Rest ist Software:
Die Flanken lösen wie gesagt den Interrupt aus
und werden mitgezählt.Über den Zustand von A (PC0)
wird die Gültigkeit der Drehbewegung überprüft,
Vergleich mit dem Vorhergegangenem Zustand, um
Prellereignisse auszuschließen.
nach der 4. gültigen Flanke wird dann der Hauptzähler
inkrementiert, bzw. dekrementiert.
Am Code bastel ich noch, da ich als C-Anfänger
noch 'n bischen mit den Operatoren kämpfe (shiften, vergleichen usw.),
Is schon fummelig für 'nen Basic- Versauten...
Letztendlich machts' aber schon den Eindruck, daß das wesentlich
besser funktioniert, als mit der ODER- Verknüpfung.
Danke,
tholan

tholan
01.09.2005, 15:02
Ich nochmal,
Weiß nich, ob das 'n Extrathread wert ist, aber bin gerade
buchstäblich über meine Scrollmaus gestolpert.
Die hat bei uns hier in Berlin gerade mal 2,99Eur gekostet
(gibts immer noch bei "Geitz ist geil": "Network M160 Mouse").
Da schlummert ein stehender, mechanischer Subminiatur- Drehimpulsgeber
an einem Ende der Achse vom Scrollwheel (SE1).
Ich habe die Rasterungen gezählt, sind 24 pro Umdrehung.
Der sieht jedenfalls brauchbar aus und nicht viel weniger robust,
als der billigste von Segor (4,50Eur), scheint 'n Fall für Fifi
(mein Lötkolben) zu sein.
So long,
tholan

PicNick
01.09.2005, 15:38
Ja, jetzt ist Hi-Time mit Mäuseverwertung. Da viele auf die optischen umgestiegen sind, liegt so manches Kugel-Tier in Schubladen und wartet auf unsrereiner.