Praktikum Rechnerperipherie

Prof. Jürgen Plate
Mike Niedermayr

Praktikum Rechnerperipherie

Kurzdokumentation Siebensegmentanzeige-Platine

Die Anzeige kann sowohl an der PC-Druckerschnittstelle als auch am Arduino betrieben werden. An der Parallelschnittstelle ist eine achtstellige Siebensegmentanzeige, bestehend aus zwei vierstelligen Modulen, angeschossen, die folgendermaßen bezeichnet ist:

Die Bezeichnung der Segmente folgt den üblichen Konventionen: Segment a ist der obere Querstrich, danach wird im Uhrzeigersinn vorgegangen:

Die Segmente inklusive Dezimalpunkt werden über eine 25-polige SUB-D-Buchse angesteuert. Die Ansteuerung der Segmente erfolgt

Die Auswahl der einzelnen Anzeigen D1 bis D8 erfolgt Da der Steuerport der PC-Schnittstelle und auch der Arduino-Port B weniger als acht Leitungen besitzen, erfolgt die Adressierung der Anzeigen binär und die Auswahl der entsprechende Anzeige über einen Decoder.

Die parallele Schnittstelle an der SUB-D-Buchse ist folgendermaßen belegt:

                      dp    g    f    e    d    c    b    a   A2 
                       |    |    |    |    |    |    |    |    |
 (13) (12) (11) (10) (09) (08) (07) (06) (05) (04) (03) (02) (01) 

   (25) (24) (23) (22) (21) (20) (19) (18) (17) (16) (15) (14)
     |                                       |    |         |
   GND                                      A0   EN        A1

Die Segmente aller Anzeigen werden über einen Treiberbaustein angesteuert. Es sind jeweils alle Segmente einer Position miteinander parallel geschaltet (alle Segmente a an Bit 0 des Datenports, alle Segmente b an Bit 1 usw. Dem Schaltplan des Boards zeigt die folgende Abbildung:

Die Adressierung erfolgt über die oben angegebenen Bits des Steuerports bzw. Port B, wobei die Adressierung selbst über A0, A1 und A2 erfolgt und das Signal EN das Display komplett ein- oder ausschaltet. Es gilt also:

A0 A1 A2 DigitENDisplay
000D1 1ON
100D2 0OFF
010D3 
110D4 
001D5 
101D6 
011D7 
111D8 

Ansteuerung über die PC-Schnittstelle

Zum Anschluss wird einfach der Stecker des PC-Druckerkabels in die 25-polige SUB-D-Buchse gesteckt. Es ist keine spezielle Verkabelung nötig.

Beachten Sie beim Ansprechen des Steuerports die Reihenfolge der Steuerleitungen beim PC-Steuerport: A0, EN, A1, A2 ist (EN klemmt sich also dazwischen). Für erste Tests am PC steht das Programm setportbin zur Verfügung, dass die Angabe von Daten und Steuerport als Binärwert erlaubt.

Beispiel:

                 .gfedcba 0E12
    ./setportbin 01101101 1110  → "5"   auf D4
    ./setportbin 10000111 1111  → "7."  auf D8
    ./setportbin 00111001 0100  → "C"   auf D1

Damit ergibt sich für die Auswahl der einzelnen Digits folgende Tabelle:

A0ENA1A2dez.Digit
0100  2D1
1100  3D2
0110  6D3
1110  7D4
010110D5
110111D6
011114D7
111115D8

Zur Auswahl der Anzeigen empfiehlt sich im Programm eine Zuordnungstabelle, so dass man die Anzeigen fortlaufend adressieren kann (schematisch: Anzeigei = ATab[i] für i = 0 .. 7). In Ihren Programmen müssen Sie zudem beachten, dass beim Steuerport ein Bit von der Hardware invertiert wird. Die Ausgabebefehle lauten somit:

    outb(DigitWert, LPT); 
    outb(DigitNum ^ 0x0B, LPT+2);
wobei LPT die Basis-Adresse der Druckerschnittstelle ist.

Um das Display beim Programmende dunkel zu schalten, können Sie folgende Kommandos verwenden:

    outb(0, LPT); 
    outb(4 ^ 0x0B, LPT + 2);  

Ansteuerung über den Arduino

Zum Anschluss müssen die Ports D und B des Arduino mit der 25-poligen SUB-D-Buchse verbunden werden. Dazu verwenden Sie Steckboard-Patchkabel. Das Anschluss-Schema zeigt die folgende Abbildung, wobei die Arduino-Portnummer fett gedruckt sind (GND-Verbindung nicht vergessen! Siehe auch Pin-Layout des Arduino):

                      PD7  PD6  PD5  PD4  PD3  PD2  PD1  PD0  PB2
                      dp    g    f    e    d    c    b    a   A2 
                       |    |    |    |    |    |    |    |    |
 (13) (12) (11) (10) (09) (08) (07) (06) (05) (04) (03) (02) (01) 

   (25) (24) (23) (22) (21) (20) (19) (18) (17) (16) (15) (14)
     |                                       |    |         |
   GND                                      A0   EN        A1
   GND                                      PB0  PB3       PB1

Die einzelnen Anzeigen werden somit über die Ports B0 bis B2 ausgewählt. Port B3 steuert die Enable-Leitung an. Die Anzeige ist komplett abgeschaltet, wenn Port B3 gleich "0" ist; in der Regel muss der Port also auf "1" gesetzt werden. Damit ergibt sich folgende Belegung:

B0B1B2B3dez.Digit
0001  8D1
1001  9D2
010110D3
110111D4
001112D5
101113D6
011114D7
111115D8

Um die Segmente nacheinander zu adressieren, kann das Schema Anzeigei = (i % 8) + 8 verwendet werden.

Siebensegment-Decoder-Tabelle

Bei der Ausgabe ist Segment a das niederwerige Bit (LSB) und Segment g das höchstwertige Bit (MSB). Die Der Dezimalpunkt wird von Bit 8 gesteuert. Die Codierung für den Punkt ist demnach 128dez und für den Bindestrich (Segment g) 64dez.

Eingabe Ausgabe
hex dez 23222120 a b c d e f g dez
0 0 0 0 0 0 1 1 1 1 1 1 0 63
1 1 0 0 0 1 0 1 1 0 0 0 0 6
2 2 0 0 1 0 1 1 0 1 1 0 1 91
3 3 0 0 1 1 1 1 1 1 0 0 1 79
4 4 0 1 0 0 0 1 1 0 0 1 1 102
5 5 0 1 0 1 1 0 1 1 0 1 1 109
6 6 0 1 1 0 1 0 1 1 1 1 1 125
7 7 0 1 1 1 1 1 1 0 0 0 0 7
8 8 1 0 0 0 1 1 1 1 1 1 1 127
9 9 1 0 0 1 1 1 1 1 0 1 1 111
A 10 1 0 1 0 1 1 1 0 1 1 1 119
B 11 1 0 1 1 0 0 1 1 1 1 1 124
C 12 1 1 0 0 1 0 0 1 1 1 0 57
D 13 1 1 0 1 0 1 1 1 1 0 1 94
E 14 1 1 1 0 1 0 0 1 1 1 1 121
F 15 1 1 1 1 1 0 0 0 1 1 1 113

Links

Interessierte können sich hier die Eagle-Dateien und das Datenblatt der Anzeige herunterladen:
Schaltplan
Platinenlayout
7-Segmentanzeige Kingbright CC56-12PBWA