Back to DTI-LAB homepage back to project start pageEnglish Version

Codewandlung

Graycode / Binärcode

Die Entwicklung eines Codelineals für Binärcode (Dualcode) und Graycode kann man beginnen indem man das Lineal zunächst durch das höchstwertige Codebit  (MSB) in zwei Bereiche aufteilt. Ein weiteres Bit erlaubt es, diese beiden Bereiche jeweils wiederum in zwei Bereiche aufzuteilen. Mit jedem zusätzlichen Bit erhöht sich so die Auflösung um den Faktor zwei. Während die MSBs für Binärcode und Graycode identisch sind, gilt dies nicht für die weiteren Bits. Beim Binärcode werden neue Bits stets in der Reihenfolge null, eins hinzugefügt. So entstehen Übergänge zwischen zwei Positionen, bei denen sich mehrere Bits ändern können. Beim Graycode werden  neue Bits so hinzugefügt, dass diese bei Postionsübergängen ihren Wert dann nicht ändern, wenn die bereits vorhandenen höherwertigen Bits eine Änderung zeigen.
Da beide Codes ausgehend vom höchstwertigen Bit entwickelt werden können, macht es Sinn, auch bei der Codewandlung mit dem höchstwertigen Bit zu beginnen. Offensichtlich, benötigen wir bei der Wandlung eines gegebenen Bits nur Informationen über die höherwertigen Bits während die niederwertigeren Bits zunächst noch nicht benötigt werden.


Abb. 1: 4-Bit Gray-Code und binärer Code

Schauen wir uns zwei aufeinanderfolgende Binärcodebits genauer an. Z.B. die Bits d2 und d1. Wir erkennen:

Wenn          d2 =  0      dann gilt:     d1 = g1
Und wenn   d2  = 1      dann gilt      d1 = ! g1.

Dies bedeutet, dass wir d1 durch Exklusiv-Oder Verknüpfung von d2 mit g1 bekommen. Verallgemeinert man dieses Prinzip, kommt man zur unten gezeigten Architektur eines Codewandlers mit kaskadierten XOR Gattern.


Abb. 2: Graycode Binärcode Wandler

Ein großer Vorteil des oben genannten Algorithmus ist, dass die Codeumwandlung auch, wie unten gezeigt, sequentiell durchgeführt werden kann, wobei mit dem höchstwertigen Bit begonnen wird.

Da beim auslesen des Graycode Lineals die Graycodebits ohnehin in sequentieller Form angeliefert werden, können diese so "wie sie ankommen" gewandelt werden. (Die unten gezeigte Architektur erfordert, dass das D Flipflop vor dem Starten der Umwandlung gelöscht wird. Dies kann auch durch ein zusätzliches "Startbit" erreicht werden, das immer den Wert null hat.)


Abb. 3: Sequentieller Graycode zu Binärecodewandler
 
 

Binärcode BCD-Code

Um den Code auf einer 3 stelligen 7 Segmet LED Anzeige darzustellen, müssen wir eine weitere Wandlung durchführen. Diese Umwandlung kann in zwei Stufen erfolgen. Zuerst konvertieren wir von Binärcode in Dezimalcode oder genauer zu binär codierten Dezimalzahlen (BCD-Code  = binary coded decimals), was bedeutet, dass jede Dezimalziffer als 4 Bit Binärzahl dargestellt wird, die Werte von 0 bis 9 annehmen kann, (0000 B. ,1001 B.) Der binäre Dezimalcode wird dann in den Siebensegment-Code umgewandelt, um die 7 LED-Segmente (e - g) passend für jede gegebene BCD-Zahl anzusteuern.

Oben fanden wir, dass die Graycode/Binärcode Wandlung sequentiell durchgeführt werden kann. Es wäre vorteilhaft, wenn wir nun auch einen sequentiellen Algorithmus für die Umwandlung von Binärcode in BCD-Code finden könnten. Um diese Möglichkeit zu erkunden, werfen wir zuerst einen Blick auf den entgegengesetzten Prozess, die Umwandlung einer Dezimalzahl in eine binäre Darstellung. Wir können dieses durch wiederholtes Teilen der Dezimalzahl durch zwei tun, wobei wir jeweils den Rest des Divisionsvorgangs niederschreiben. Wir wiederholen den Vorgang so lange, bis das Divisionsergebnis null wird. Der Rest der ersten Division ist dann unser niederwertigstes Bit (LSB), und der Rest der letzten Division ist das höchstwertige Bit (MSB)   (Sie erinnern sich vielleicht an diesen Prozess aus der Schulmathematik.)
Als  Beispiel nehmen wir die (Dezimal-) Zahl 225.

    225 / 2 =  112       Rest:   1     LSB
  112 / 2 =   56               0
   56 / 2 =   28               0
   28 / 2 =   14               0
   14 / 2 =    7               0
    7 / 2 =    3               1
    3 / 2 =    1               1
    1 / 2 =    0               1      MSB

das binäre Äquivalent zu 225 ist also  11100001

natürlich können wir das ganze auch in umgekehrter Richtung tun um  eine Binärzahl in eine Dezimalzahl umzuwandeln.
     0  *  2  +    1(MSB) =       1
     1  *  2  +    1      =       3
     3  *  2  +    1      =       7
     7  *  2  +    0      =      14
    14  *  2  +    0      =      28
    28  *  2  +    0      =      56
    56  *  2  +    0      =     112
   112  *  2  +    1(LSB) =     225

Um letzteren Algorithmus zur Binär / BCD Umwandlung zu verwenden müssen wir bei der Multiplikation "BCD Arithmetik" einsetzen. Multiplikation einer BCD Ziffer mit zwei bedeutet, die BCD Bits um eine Position  nach links zu verschieben. Dies gilt allerdings nur, solange das Ergebnis den Wert von 9 nicht übersteigt. Wenn das Ergebnis größer ist, müssen wir zur nächst höheren BCD Ziffer einen Wert von eins hinzuaddieren. Zusätzlich müssen wir das Ergebnis der Verschiebeaktion korrigieren indem wir vom Ergebnis 10 abziehen. (Das ist gerade der Übertrag, den wir der höheren Ziffer hinzugefügt haben.)

( Alternativ könnte man vor der Multiplikation mit 2 auch zuerst nachsehen ob der Wert der Ziffer größer als 5 ist. Ist das der Fall subtrahieren wir vor dem Schieben einen Wert von 5 und addieren 1 zur nächsthöheren Ziffer.)

Der oben beschriebene Algorithmus kann auch sequentiell durchgeführt werden und passt dann sehr gut zu unserem Graycode/Binärecode Wandlungsalgorithmus, da auch hier mit dem MSB begonnen wird.
Unten ist eine Skizze der prinzipiellen Architektur gezeigt. In diesem Beispiel befindet sich der Binärcode in einem Schieberegister. In unserer Anwendung liefert der Graycode zu Binärcode Wandler die Bits direkt seriell an. Die Module mit dem Namen "digit 0" und "digit 1" sind keine einfachen Scheiberegister sondern enthalten die "Dezimalkorrektur" und die Übertragslogik.  Für "digit 2"  wird kein Wert größer 5 erwartet. Daher kann "digit 2" als gewöhnliches Schieberegister mit seriellem Eingang und parallelem Ausgang realisiert werden.

(Bild 4 ist so gezeichnet, dass die höchstwertigen Bits (wie üblich) links stehen. Dadurch geht der Signalfluss von links nach rechts (unüblich).),


Abb.. 4: Prinzip der sequentiellen Binär zu BCD Wandlung

zur Projekt Startseite