Umwandlung Inkrementalgeber zu Drucktasten
Bisweilen kommt es vor, dass eine Schaltung mit 2 Tasten für „Hoch“ und
„Runter“ bestückt ist.
Man möchte gerne dazu einen Inkrementalgeber (Drehknopf) parallel schalten.
Direkt geht das leider nicht.
Voraussetzung ist, dass die Tastenreaktion flink genug erfolgt,
bspw. Zählerschaltkreise oder flinkes Mikrocontrollerprogramm.
Im vorliegenden Beispiel war es wünschenswert, die beiden Interrupteingänge
eines ATmega16 zu verwenden; den Mikrocontroller ansonsten in den
Tiefschlafmodus zu versetzen (Oszillator aus),
um Funkstörungen gänzlich zu vermeiden.
Der ATmega16 hat leider keinen Pin-Change-Interrupt,
um einen Inkrementalgeber mit der gleichen Funktionalität direkt anzuschließen.
Inkrementalgeber-Typen
Alle bekannten Inkrementalgeber haben zwei (auch Opto-)Kontakte,
genannt A und B.
Aber es gibt Unterschiede im Signalverlauf, die zu beachten sind!
Im folgenden wird unterschieden nach:
Anzahl der Pegelwechsel (beider Kontakte) pro Raststufe
symmetrischer oder unsymmetrischer Signalverlauf
Die folgenden Ausführungen beziehen sich auf den Typ „2s“.
Die Mikrocontroller-Lösung wird gerade für den Typ „4u“ angepasst.
Wie die Bezeichnung „symmetrisch“ schon andeutet darf A und B
vertauscht werden, es ändert sich nur der Richtungssinn.
Bei „unsymmetrisch“ darf A und B nicht vertauscht werden!
Lösung mit Gattern
Diese sieht so aus:
Die Gatter IC1A und IC1C differenzieren die Flanken der
Inkrementalgeber-Kontakte und liefern High-Impulse
Das Gatter IC1B liefert High-Pegel im Übergangsbereich des Gebers
und Low-Pegel in den Raststellungen.
Schließlich verknüpfen die Transistoren diese Signale
und stellen Open-Collector-Ausgänge bereit, die zu den vorhandenen
Tasten parallel geschaltet werden können (Trickschaltung).
Diese Schaltung simuliert Tastendrücke je nach Bauart des Inkrementalgebers
und Beschaltung von Pin 13 von IC1D bei Eintritt oder Verlassen des
(nichtrastenden) Übergangsbereiches.
Inkorrekterweise wird auch dann ein Impuls erzeugt, wenn der Drehknopf
in den Übergangsbereich gedreht und dann zurückgedreht wird.
Auch ist sie nicht prellsicher.
Eine Schaltung, die diese Probleme nicht hat, wäre ungleich aufwändiger.
Lösung mit Mikrocontroller
Alles was der Mikrocontroller braucht sind zwei Eingänge
(am besten mit internen Pull-Ups) und zwei Open-Collector-Ausgänge.
Also reicht jeder moderne 8beinige Chip aus.
Als Mikrocontroller bieten sich an:
- ATtiny12 (ca. 1 €)
- ATtiny11 (ca. 0,50 €), bei Verfügbarkeit eines 12-V-Programmiergerätes,
wie STK500 oder der von ElmChan
- PIC12F508 (ca. 1,20 €), wenn jemand PICs mag
Eigenschaften:
- Keine Außenbeschaltung
(höchstens ein Abblockkondensator bei langen Zuleitungen),
interner RC-Oszillator
- Absolut prellfrei
- Tastendruck-Simulationszeit gleich Rastzeit
(keine Zeitkonstante erforderlich)
- Zusätzlicher Tastenloslass-Zeitgeber für maximale Drückzeit (ca. 200 ms)
- Halbe Vor- und Zurückbewegung ohne Tastensimulation
- Stromverbrauch: statisch max. ca. 200 µA für die (mikrocontroller-internen)
Pullups des Inkrementalgebers, sonst kein Stromverbrauch wegen
Mikrocontroller-Betriebs im Tiefschlaf
mit Aufwecken per Pegelwechsel-Interrupt
- 1 freier Ein-/Ausgang für – beispielsweise Sammelinterrupt, Piepser …
Mit einem ATtiny12 wurde die Schaltung auf einem Steckbrett aufgebaut.
An Stelle der nachfolgenden Schaltung sind einfach zwei Leuchtdioden.
Auf dem Steckbrett ebenfalls zu sehen ist ein denkbar einfaches
und vielfältiges Programmierkabel;
man braucht nur eine ruhige Hand für die Beschriftung der Einzeladern.
Funktionsnachweis auf Steckbrett
Die Firmware
(in AVR-Assembler) ist ziemlich kurz.
Ich habe sie mittels
PonyProg
gebrannt.
Die Fuses bleiben auf Werksvorgabe.
Die Anschlüsse kann man sich (fast) nach Belieben am Mikrocontroller
verteilt werden; dazu sind die #define
s am Programmanfang
anzupassen.
Nicht vergessen, den Reset-Anschluss mit 5 V zu verbinden!
So wie die .HEX-Datei compiliert ist, gilt:
- Pin 2 = Inkrementalgeber Kontakt 1 (nach Masse)
- Pin 3 = Inkrementalgeber Kontakt 2 (nach Masse)
- Pin 5 = frei (interner Pull-Up verhindert exzessive Ströme)
- Pin 6 = Tasten-Stimulusausgang 2 (nach Masse)
- Pin 7 = Tasten-Stimulusausgang 1 (nach Masse)
Resümee
- Welcher der Ausgänge „hoch“ und „runter“ bedeutet muss man probieren.
- Beide Schaltungen haben vernachlässigbaren statischen Stromverbrauch,
außer für die Pull-Ups des Inkrementalgebers
- Die Mikrocontroller-Schaltung ist nicht nur bestechend einfach,
sondern auch absolut prellfrei.
- Die Bauelementekosten sind bei der
Lösung mit Gattern
immer noch etwas niedriger.
- Wer selbst ein Mikrocontrollerprojekt aufgreift,
wird tunlichst darauf achten, den Inkrementalgeber direkt
anschließen zu können. Ohne Vorsatz-Mikrocontroller!
Das erfordert in der Regel zwei flankensensitive Eingänge,
je nach Bedarf auch im Tiefschlaf bei stehendem Oszillator.
Erst die neueren ATmegas haben entsprechend geeignete PCINT-Eingänge.