Verwendung der bitweisen Operator-Logik

Nutzung der Leistungsfähigkeit digitaler Signale und digitaler Hardware

Die folgenden Informationen dienen der Einführung in die bitweise UND-Logik (&) und der Erläuterung von Konzepten, die im Blog „Argumente für die direkte Port-Manipulation“ vorgestellt wurden. In diesem Beispiel wird ein schrittmotorgetriebener Kameraschlitten mit mehreren Tasten und Potentiometer gesteuert. Der gewählte Mikrocontroller verfügt über eine begrenzte Anzahl von I/Os, die sich auf viele Ports verteilen, was durch die Zusammenfassung der I/Os in einzelne digitale Werte erreicht wird.

Übersicht

Die Auswertung von Schaltereingaben in Software beginnt oft mit nützlichen IF/THEN-Anweisungen. Das mag für einen einzelnen Eingang in Ordnung sein, aber nicht so sehr für mehrere interaktive Eingänge. Die Abdeckung aller Kombinationen von Tastendrücken mit IF/THEN-Anweisungen könnte Hunderte von Codezeilen und eine Vielzahl von Ausführungen pro Zyklus erzeugen. Die Implementierung der bitweisen Logik minimiert den Code und erhöht die Zyklusgeschwindigkeit.

Projekt-Parameter

Das Kameraschlitten-Projekt umfasst fünf SPST-Tastschalter zur Auswahl von Richtung und Geschwindigkeit des Schlittenantriebsmotors. Der Eingang wird in den Ausgang SPEED/ENABLE/DIRECTION umgewandelt. Schalterbetätigungen werden in der Software zusammen mit der Unterscheidung mehrerer Schalterbetätigungen festgehalten.

Bitweiser AND-Operator

Der wichtigste bitweise Operator, der für den Kameraschlitten verwendet wird, ist AND, der das kaufmännische Und-Symbol (&) in der Programmiersprache C verwendet und die Wahrheitstabelle in Abbildung 1 benutzt.

Abbildung 1: Wahrheitstabelle des bitweisen Operators AND und Beispiele. (Bildquelle: Don Johanneck)

I/O-Kombination

Um einen einzigen Wert zu bilden, der alle Schalter repräsentiert, werden die Bits an die gewünschte Stelle verschoben, addiert und mit dem Operator AND verglichen (siehe Abbildung 2). Ein weiterer Wert, der den aktuellen Zustand der Grenzwertgeber darstellt, wird mit dem Wert der Schalterbetätigung verglichen, um die Ausgabe zu negieren, wenn ein Grenzwert erreicht wird.

Abbildung 2: Konfiguration der Schalter des Kameraschlittens, Bit-Zusammenstellung und Verwendung des AND-Operators. (Bildquelle: Don Johanneck)

Wenn in diesem Szenario eine Taste oder eine Tastenkombination gedrückt wird, ist „buttonValues“ ungleich Null, und in der Software werden Maßnahmen ergriffen, indem „limitValue“ und Tabellen verwendet werden, um die Ausgabe auf genau dieselbe Weise zu bestimmen, wie sie in dem oben erwähnten Blog zur direkten Portmanipulation beschrieben werden.

Programmierung

Das Programm verwendet eine Tabelle mit Ausgabewerten, die durch den verarbeiteten Eingabewert indiziert werden. Der Programmierer kann die Aktion, die sich aus einer beliebigen Kombination von Tastendrücken ergibt, durch Ändern von Tabellenwerten bestimmen, wodurch die Notwendigkeit entfällt, die Struktur des Programms zu ändern, was entmutigend sein kann. Die Tabellenwerte in Abbildung 3 für dieses Beispiel stellen einfache, mehrfache und entgegengesetzte Schaltflächenaktionen ohne eine einzige IF-Anweisung dar (Abbildung 4).

Abbildung 3: Tabelle der eindeutigen Ausgabewerte, indiziert durch den Eingabewert.

Abbildung 4: Hauptcode; Lesen von Werten und Bestimmung der Ausgabe.

Die Motorsteuerung erfolgt über eine Timer-Interrupt-Service-Routine, die die Schrittfrequenz bestimmt, sowie über eine „Skiping“-Methode, die die Geschwindigkeitssteuerung erleichtert, indem der STEP-Pin auf der Motorsteuerungsplatine nur dann gesetzt wird, wenn die Variable „stepGo“ gleich oder größer als die Variable „stepFreq“ ist (Abbildung 5). Bei niedrigeren Potentiometerwerten überspringt die Routine mehr STEPs.

Abbildung 5: Interrupt-Service-Routine zur Motorsteuerung.

Fazit:

Die Verwendung von bitweisen Operatoren wie AND (&) vereinfacht den Code und reduziert die Anzahl der IF-Anweisungen, die zur Analyse der digitalen Eingänge erforderlich sind, drastisch. Die Erstellung der Ausgabetabelle ist einfach und flexibel. Die Verwendung von mehr Ausgabebits erweitert die Tabelle schnell und bietet eine größere Anzahl von Ausgabeoptionen. Jedes zusätzliche Ausgangsbit erfordert einen oder mehrere zusätzliche Handler im Hauptcode. Einmal eingerichtet, wird die Tabelle nur einmal pro Zyklus verwendet, wobei der Hauptcode die Hauptarbeit leistet. Die Interrupt-Service-Routine arbeitet ständig im Hintergrund und aktualisiert den STEP-Pin des Motorcontrollers, aber die Bewegung erfolgt erst, wenn der Hauptcode den Enable-Pin (ENN) des Motorcontrollers umschaltet.

Über den Autor

Image of Don Johanneck

Don Johanneck, Technical Content Developer bei DigiKey, arbeitet seit 2014 für das Unternehmen. Seit dem Wechsel in seine aktuelle Position ist er für das Verfassen von Beschreibungen zu Videos und Produkten verantwortlich. Er hat seinen Abschluss als Associate of Applied Science im Bereich Elektronik und automatisierte Systeme vom Northland Community & Technical College im Rahmen des DigiKey-Stipendienprogramms erworben. Er genießt die Modellierung von Funksteuerungen, die Restaurierung von alten Maschinen und das Basteln.

More posts by Don Johanneck
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum