Drehimpulsgeber sind eine hervorragende Möglichkeit, eine einfache aber auch multifunktionelle Benutzereingabe zu realisieren. Sie bestehen aus zwei Schaltern, die bei Rotation in unterschiedlicher Reihenfolge öffnen und schließen. Zusätzlich besitzen die meisten auch noch einen zentralen Schalter, der durch Druck auf die Achse betätigt werden kann. Bild 2.8 zeigt einen solchen Drehimpulsgeber der Firma Hopt und Schuler [Hop03].
Wie zu sehen, müssen die Logikleitungen über einen Pull-Up-Widerstand an die Betriebsspannung angeschlossen werden. Bevor wir nun an die Programmierung gehen, zuerst einige Vorüberlegungen. Betrachten wir die Schaltfolge der Ausgänge in Bild 2.9 und fassen wir A und B zu einer Binärzahl zusammen, wobei B das höherwertige Bit ist, so ergibt sich für links herum drehen die Schaltfolge 00-10-11-01 und für rechts herum drehen 00-01-11-10.
Die Kodierung entspricht hier einem Gray-Code, bei dem zwischen jeder Schaltstellung jeweils nur ein Bit verändert wird. Da arithmetische Operationen im Gray-Code im MSP nicht direkt gerechnet werden können, sollte vor einer weiteren Verarbeitung zuerst eine Transformation in eine binäre Darstellung erfolgen. Danach kann durch Differenzenbildung zum einen die Drehrichtung und zum anderen die Schrittweite ermittelt werden, wobei wir nur Schritte um jeweils 1 zulassen wollen. Das folgende Programmierbeispiel 2.9 zeigt nun, wie dies in konkreter Programmierung umgesetzt werden kann. Für das Verständnis der Realisierung der Umkodierung legen wir eine Wertetabelle an (Tabelle 2.4):
| BA | 00 | 01 | 11 | 10 |
| A> 0 : wert = 1 | 00 | 01 | 01 | 00 |
| B> 0 : wert = wert XOR 0b11 | 00 | 01 | 10 | 11 |
| Tabelle 2.4.: | Wertetabelle der Umkodierung Gray-Code → Binärcode |
| Listing 2.9: | Ansteuerung eines Drehimpulsgebers |