7-Segment-Anzeigen - Eine Ziffer bitte

 

Materialbedarf

 

Anz. Bezeichnung Datenblatt
1 Batterie/Spannungsquelle 9V  
1 Spannungsregler 7805
1 ATMega8 AVR-Prozessor
7 Widerstand 470 Ohm  
1 Widerstand 10 kOhm  
1 Elektrolytkondensator 100 µF/16V  
1 Kondensator 100nF  
1 Mikrotaster
1 7-Segment-Anzeige 13mm mit gem. Kathode

 

 

Wie der AVR 7-Segment-Anzeigen steuert

 

Will man 7-Segment-Anzeigen mit dem AVR ansteuern, muss man natürlich erst einmal wissen, wie so eine LED-Anzeige belegt ist. Das Anschlussschema kann man in der nebenstehenden Grafik erkennen.

Wer über 7-Segment-Anzeigen noch etwas mehr wissen möchte, der liest sich erst einmal den Lehrgang 7-Segment-Anzeigen - Sichtbare Binärzahlen durch.

 

 

Soll nun die 7-Segment-Anzeige mit Hilfe des AVRs angesteuert werden, muss ein Port 'geopfert' werden. Hier wird der Port D für die 7-Segment-Anzeige verwendet. Im Aufbau kann man es gut erkennen. Die Vorwiderstände für die einzelnen Segmente dürfen dabei natürlich auch nicht vergessen werden.

Jetzt leuchtet das entsprechende Segment auf wenn das entsprechende Bit des Ports auf 1 gesetzt wird. Segment a ist mit Bit 0 des Ports D verbunden, Segment b mit Bit 1 usw. Normalerweise wird der Dezimalpunkt mit dem letzten Bit des Ports verbunden. Da wir diesen aber hier nicht benötigen lassen wir die Verbindung weg.

Hat man eine LED-Anzeige mit gem. Anode, ist der Anschluss ähnlich. Die Anode wird hier natürlich dann mit dem Pluspol der Spannungsversorgung verbunden. Hier würde nun das entsprechende Segment aufleuchten, wenn der entsprechende Portpin auf 0 gesetzt wird. Man müsste also vor der Ausgabe das Bitbild invertieren.

Um nun die Anzeige zum Arbeiten zu bewegen benötigen wir ein kleines Programm:

 

$regfile "m8def.dat"
$crystal = 1000000

Config Portd = Output

Portd = &B00111111

Stop

 

Wenn das Programm übersetzt und zum AVR geschickt wurde, zeigt das Display eine '0' an. Will man eine andere Anzeige haben, muss man nur die Zuweisung des Bitbildes zum Port ändern in der Anweisung

 

Portd = &B00111111

 

Hier fällt sofort auf, dass wir hier den Wert nicht Dezimal sondern als Binärwert zuweisen. Bascom macht daraus wieder den richtigen Dezimalwert. Durch die Verwendung eines Binärwertes ist der Entwurf einzelner Ziffern relativ leicht möglich. Man muss nur an den Bits eine 1 setzen, an dem die entsprechende Segmente angeschlossen sind. Als kleine Hilfe hier noch mal die Bitaufteilung: 

 

Bit: 7 6 5 4 3 2 1 0
Segment: - g f e d c b a

 

Wer möchte, kann nun einmal versuchen die diversen Ziffern zu entwerfen.

 

Diese Methode der Zuweisung des Ports ist aber ziemlich unflexibel. Man müsste jedes mal im Programm, wenn eine bestimmte Ziffer auf der Anzeige dargestellt werden soll, das entsprechende Bitmuster zum Port schicken. Dies ist recht unbequem. Einfacher wäre es doch, wenn man eine Anweisung in der Form: 'Zeige Bitbild für Ziffer 3' geben könnte.

 

Das nächste Programm zeigt, dass man es kann:

 

$regfile "m8def.dat"
$crystal = 1000000

Config Portd = Output

Dim Dis(10) As Byte
Dim Cnt As Byte

Dis(1) = &B00111111
Dis(2) = &B00000110
Dis(3) = &B01011011
Dis(4) = &B01001111
Dis(5) = &B01100110
Dis(6) = &B01101101
Dis(7) = &B01111101
Dis(8) = &B00000111
Dis(9) = &B01111111
Dis(10) = &B01101111

Cnt = 1

Do
  Portd = Dis(cnt) : Waitms 500
  Cnt = Cnt + 1
  If Cnt = 11 Then Cnt = 1
Loop

 

Hier wird nun ein so genanntes Variablenfeld für die Bitmuster verwendet. Wir legen mit der Anweisung

 

Dim Dis(10) As Byte

 

ein Variablenfeld mit 10 Elementen fest. Für jede mögliche Ziffer ein Element. Nun müssen wir noch die Elemente mit den Bitmustern der einzelnen Ziffern füllen. Dies geschieht hier:

 

Dis(1) = &B00111111
Dis(2) = &B00000110
Dis(3) = &B01011011
Dis(4) = &B01001111
Dis(5) = &B01100110
Dis(6) = &B01101101
Dis(7) = &B01111101
Dis(8) = &B00000111
Dis(9) = &B01111111
Dis(10) = &B01101111

 

Jetzt braucht man nur noch das entsprechende Variablenelement auslesen, wenn wir das Bitmuster einer bestimmten Ziffer haben wollen. Eine Besonderheit Bascom ist jedoch, dass es ein Feldelement mit der Nummer 0 nicht gibt. Wir müssen also zu unserer gewünschten Ziffer immer 1 hinzu addieren um das entsprechende Bitbild zu bekommen. Dis(1) enthält nun das Bitbild für die Ziffer 0, Dis(2) für die Ziffer 1 usw.

 

In der DO-LOOP-Schleife steht nun eine kleine Routine, die die einzelnen Ziffern auf dem Display darstellen. Hier kann man gut sehen wie die Zuweisung funktioniert:

 

Portd = Dis(cnt)

 

Bisher wurde von unserem Display nur Ziffern dargestellt. Es ist aber auch möglich einige Buchstaben und Zeichen darzustellen.

In der Abbildung sieht man hierzu einige Beispiele. Einiges kennt man evtl. schon von einigen Geräten. Taschenrechner z.B. zeigen gerne mal 'Error' an, wenn eine bestimmte Berechnung nicht möglich ist.

Das nachfolgende kleine Programm zeigt, anstatt den Ziffern 0 bis 9, das Wort 'HALLO' auf dem Display an:

 

$regfile "m8def.dat"
$crystal = 1000000

Config Portd = Output

Dim Dis(6) As Byte
Dim Cnt As Byte

Dis(1) = &B01110110
Dis(2) = &B01110111
Dis(3) = &B00111000
Dis(4) = &B00111000
Dis(5) = &B00111111
Dis(6) = &B00000000

Cnt = 1

Do
  Portd = Dis(cnt) : Waitms 500

  Cnt = Cnt + 1
  If Cnt = 7 Then Cnt = 1
Loop

 

 

Eine kleine Anwendung entsteht

 

 

Zum Abschluss des Kapitels wollen wir die Anzeige noch mal 'sinnvoll' einsetzen. Hierzu wurde der Aufbau durch ein Taster ergänzt.

Wird das Programm übertragen muss man nun den Taster betätigen. Wird dieser wieder los gelassen, zeigt das Display eine Ziffer zwischen 1 und 6 an. Hier wurde also ein einfacher elektronischer Würfel programmiert.

 

$regfile "m8def.dat"
$crystal = 1000000

Config Portb.0 = Input
Config Portd = Output

Portb.0 = 1

Dim Dis(10) As Byte
Dim Cnt As Byte

Dis(1) = &B00111111
Dis(2) = &B00000110
Dis(3) = &B01011011
Dis(4) = &B01001111
Dis(5) = &B01100110
Dis(6) = &B01101101
Dis(7) = &B01111101
Dis(8) = &B00000111
Dis(9) = &B01111111
Dis(10) = &B01101111

Cnt = 2 : Portd = Dis(cnt)

Do
  If Pinb.0 = 0 Then
    Portd = Dis(cnt) : Cnt = Cnt + 1
    If Cnt = 8 Then Cnt = 2
  End If
Loop

 

 

Zurück zur Auswahlseite             Zur Hauptseite