7-Segment-Anzeigen am Raspberry Pi ansteuern

Wenn man nur ein paar einfache Zahlwerte wie Entfernungen und Temperaturen anzeigen möchte, sind klassische 7-Segmentanzeigen die erste Wahl. Ich habe aber noch nie eine angesteuert und wollte lernen, wie das geht. Wie sich herausstellt, ist es viel einfacher als gedacht.

ultraschall

Ich benutze ein 4×7-Segmentdisplay von Adafruit. Es ist mit einem HT16K33-Chip ausgestattet. Das erlaubt es, das Display über den I2C-Bus anzusteuern. Dafür brauche ich auf dem Breadboard nur vier Drahtverbindungen zum Raspberry – bei „nackten“ 7-Segmentanzeigen ohne Treiberchip muss ich jedes Segment einzeln ansteuern, was zwar im Prinzip auch geht, aber einen riesigen Drahtverhau zur Folge hat.

Mit dem folgenden Kommando installiere ich die notwendigen Pakete:

sudo apt-get install python-smbus i2c-tools git

In der /etc/modules müssen zwei Zeilen hinzugefügt werden, damit die nötigen Module geladen werden:

i2c-bcm2708
i2c-dev

Falls die Datei /etc/modprobe.d/raspi-blacklist.conf existiert, müssen dort zwei Einträge wie folgt auskommentiert werden:

#blacklist spi-bcm2708
#blacklist i2c-bcm2708</blockquote>

Das Kommando i2cdetect -y 1 verrät, welche i2c-Bus-Adresse(n) belegt ist/sind. Hier ist es nur eine, die 0x70:

    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --

Jetzt besorge ich mir noch die nötigen Softwarebibliotheken aus dem Githib-Repository von Adafruit:

cd /usr/local
git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

Damit sind die Vorbereitungen abgeschlossen. Das folgende kleine Beispielprogramm schreibt die Zahl „0815“ auf die Anzeige.

#!/usr/bin/python

from Adafruit_7Segment import SevenSegment

segment = SevenSegment(address=0x70)

segment.writeDigit(0, 0)
segment.writeDigit(1, 8 )
segment.setColon(0) #Doppelpunkt
segment.writeDigit(3, 1)
segment.writeDigit(4, 5)

Einzige Stolperfalle: jedes Segment hat eine feste Adresse, beginnend bei Null. Aber es sind nicht vier, sondern fünf Adressen – hinter Nr. 2 verbirgt sich der Doppelpunkt in der Mitte des Display, das dritte Zahlsegment hat deshalb die Adresse 3.