Die 7-Segment-Anzeige

Die 7-Segmentanzeige stammt aus den Anfängen der Digitalelektronik. Mit nur 7 Segmenten lassen sich die Zahlen 0 bis 9 darstellen. Waren die ersten Anzeigen noch Gasentladungsröhren (Nixie-Anzeigen) setzen sich schnell die LED-Anzeigen und die LCD-Displays durch. 7-Segmentanzeigen werden auch heute noch vielfältig eingesetzt, z.B. in Uhren, Taschenrechnern, Betriebsanzeigen etc.
Die in dem Projekt verwendete Anzeige ist 4-stellig und über I2C ansprechbar. Bei der Entwicklung stellte es sich heraus, dass es kein aktuelles IC mehr gibt, dass sowohl 4 stellige Anzeigentreiber hat und über I2C ansprechbar ist. Damit war eine Eigenlösung erforderlich. Diese ist mit einem Attiny2313 und 4 Treibertransistoren realisiert worden. Der Attiny ist in diesem Fall als Slave programmiert.

Die Schreibadresse lautet 118 gefolgt von den 4 Digitwerten (zulässig sind nur Werte zwischen 0 und 9 und 10 für das Minuszeichen)

I2cstart
I2cwbyte 118
I2cwbyte 1
I2cwbyte 2
I2cwbyte 3
I2cwbyte 4
I2cstop

Um den Aufwand möglichst gering zu halten, wurde darauf verzichtet, die I2C-Ansteuerung und den 7-Segmenttreiber mit zwei Mikrocontrollern zu realisieren. Der Attiny ist mit beiden Aufgaben an der Grenze seiner Leistungsfähigkeit, was sich bei schnellen Anzeigewechseln schon mal mit einem Flackern bemerkbar macht. Als Digitalvoltmeter oder Uhr ist die Anzeige aber problemlos einsetzbar.

Den Quellcode für den Attiny2313 ist in der Datei 7Segmentanzeige_i2c.bas zu finden. Er kann mit einem externen Programmer problemlos verändert werden. Weitere Sonderzeichen (Grad, C) und die Ansteuerung der Dezimalpunkte ist in Arbeit.

Ein Beispielprogramm befindet sich in der Datei 7Segment.bas


Die 4stellige 7-Segmentanzeige mit dem Attiny2313

Um die 4 einzelnen 7-Segmentanzeigen direkt anzusteuern, wären 28 I/O-Ports erforderlich, zusätzlich noch 2 I/O-Ports für die I2C-Schnittstelle, das wären insgesamt 30 Ports und darüber verfügt der Attiny2313 nicht. Die Anzeige muss also gemultiplext werden. Dazu wird in hoher Taktfrequenz jeweils eine 7-Segmentanzeige nach der anderen angesteuert. Dazu sind nur 7+4 = 11 Ports erforderlich, mit der I2C-Schnittstelle sind es dann 13 Ports. Dies ist mit dem Attiny einfach realisierbar.

Der PortB dient als Datenport, 4 I/O-Ports des PortD sind die Multiplexerports (PortD.3 bis PortD.6). PortD.0 und PortD.1 stellen die I2C-Schnittstelle dar. Da Bascom keinen I2C-Sklaven zur Verfügung stellt, wurde hier auf eine kostenlose Bibliothek MyI2c.LIB aus dem Internet zurückgegriffen. Ein Schönheitsfehler des I2C-Sklaven ist, dass er solange wartet, bis er aufgerufen wird. In dieser Zeit wurde der Attiny2313 nichts tun, die Anzeige bliebe dunkel. Deshalb wird automatisch alle 8ms ein Interrupt ausgeführt. In der Interrupt-Routine wird dann die Anzeige einmal neu aufgebaut, bis der I2C-Sklave wieder wartet. So kommt eine flackerfreie Anzeige mit 125Hz Wiederholfrequenz zu stande.

Insgesamt lassen sich 11 Zeichen, die Zahlen 0 bis 9 und ein Minuszeichen, darstellen:







PortB = 6
PortB = 59
PortB = 47
PortB = 102
PortB = 109
PortB = 125






PortB = 7
PortB = 127
PortB = 111
PortB = 95
PortB = 32




Zeichentabelle:

Zeichen
Wert
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
-
10
°
11
C
12