Raspberry Pi: 32 Zeichen Hitachi HD44780 Display
erschienen in der Kategorie Technik, am 10.10.2012

Wie in meinem ersten Blogeintrag zum Thema Raspberry Pi schon angesprochen, ist es mein Ziel, dem kleinen Rechner ein Display zu verpassen, auf dem RSS Feeds und Termine als Laufschrift angezeigt werden.
Heute habe ich mich an den hardwareseitigen Teil dieses kleinen Projekts gesetzt, und das Ergebnis sieht so aus:
Sieht fast aus, als würde es funktionieren, nicht wahr? Tut's auch. Für alle, die sich das auch basteln wollen, werde ich nun ein paar Worte zum Aufbau verlieren.
Verwendet habe ich ein Display, das im Aufbau Hitachis LCD Controller HD44780 entspricht. Es hat zwei Zeilen mit je 16 Zeichen. Die Dinger gibt es zuhauf bei Amazon und eBay. Die Materialkosten belaufen sich in meinem Fall auf 1,79 Euro. Es gibt das Display auch in einer Ausführung mit 4 Zeilen à 20 Zeichen. Dieses kostet aber so um die 9 Euro.
(Wer sich selbst ein Display zulegen will, kann sich hier mal umsehen.)
Ansonsten braucht man noch ein Breadboard, einige Kabel und einen Lötkolben mit dem nötigen Zubehör. Es kann auch nicht schaden, wenn man ein paar wenige E-Technik Grundlagen mitbringt und sich vorher noch mal ins Gedächtnis ruft, dass die GPIO-Pins des Raspberry Pi direkt an dessen Bus angeschlossen sind. Anders formuliert: Wenn man einen Kurzschluss fabriziert oder eine Überspannung auf die Pins loslässt, ist es wahrscheinlich recht schnell vorbei, mit dem Pi (nicht alles, was sich reimt ist gut).
Unterschiede treten nur in der zweiten Zeile der Übersicht auf, also der inneren Reihe von Pins auf dem Board. Die erste Zeile ist bei beiden Revisionen gleich belegt. Um Verwechslungen gänzlich zu vermeiden, habe ich daher auch nur mit dieser (also der äußeren Reihe von GPIO-Pins) gearbeitet.
Insgesamt brauchen wir acht Leitungen: zwei für die Stromversorgung und sechs GPIO-Leitungen für den Datenaustausch (vier Datenleitungen sowie Takt (E) und Registerauswahl (RS)).
Das sollte eigentlich an Informationen ausreichen, um es nachzubauen. Die Drähte am Display habe ich festgelötet, alles andere ist nur gesteckt. Damit das gut geht, habe ich die Kabelenden verzinnt. Für die GPIO-Pins hatte ich leider kein Flachbandkabel zur Hand. Daher habe ich herkömmliche Jumperkabel (an beiden Enden weiblich) verwendet und von diesen jeweils ein Ende abgeschnitten. Leider musste ich dabei feststellen, dass die Jumper zur hoch waren, sodass ich mein Gehäuse nicht mehr verschließen konnte. Ich habe die Plastikummantelung der Stecker daher um 1 bis 2 Millimeter gekürzt, jetzt passt es. Dennoch bietet sich hier der Hinweis an: Wer vor hat sich ein Gehäuse für seinen Raspberry Pi zu kaufen, sollte darauf achten, dass dieses genügend Raum bietet, um an die GPIO-Pins zu kommen.
Noch ein wichtiges Thema ist die LED-Hintergrundbeleuchtung des Displays. Aus meinem Datenblatt des HD44780 LCD Moduls geht hervor, dass diese mit 5 Volt betrieben werden kann. Für einige, auch oft in Displays verbaute, LEDs wäre dies jedoch zu viel des Guten! Ich weiß nicht, ob es bei der HD44780 Reihe generell so ist, das man 5 Volt anschließen kann oder ob dies je nach Hersteller variiert. Wer sich unsicher ist, sollte (bei einer blauen Hintergrundbeleuchtung) noch einen 430 (oder 560) Ohm Widerstand zwischen die Anode der LED-Beleuchtung (Kontakt 15) und die +5V Leitung stecken.
Wenn alles aufgebaut ist, spricht nichts dagegen den Pi anzuschließen. Das Display sollte sofort aufleuchten. In der ersten Zeile des Displays sind alle Pixel angeschaltet, in der zweiten Zeile bleiben alle dunkel. Ausgegeben wird natürlich noch nichts, dazu komme ich gleich noch.
Bei mir trat am Anfang ein seltsamer Fehler auf. Das Display ging an, aber es färbten sich alle Pixel weiß. Wenn ich einen Text auf dem Display ausgeben wollte, wurden die zum Text gehörenden Pixel einen Hauch heller, aber es blieben auch die anderen aktiv, sodass man kaum etwas lesen konnte, bzw. nur dann, wenn man schräg auf das Display schaute. Nach längerer Suche fand ich die Ursache beim Messen der Spannung. Mein Netzteil (ein Handyladegerät von Nokia, das ich extra für den Pi gekauft habe) sorgt dafür, dass ich eine (Über-)Spannung von ca. 5,5 Volt anliegen habe. Schließe ich den Pi hingegen an den USB-Port meines Rechners an, funktioniert alles einwandfrei. Die Überspannung des scheinbar doch zu billigen Netzteils sorgt also für eine Fehlfunktion des Displays. Falls also mal jemand mit einem ähnlichen Problem kämpfen sollte: Netzteil checken und gegebenenfalls. einen Widerstand einbauen.
Soweit zur Hardware. Als nächstes werde ich mich mit dem Code beschäftigen, der nötig ist, um RSS-Feeds und Kalendertermine anzeigen zu lassen. Sobald die Sache läuft erfahrt ihr es hier.
Update 12.10.2012: Der RSS Reader läuft. :)
Weitere Artikel in Sachen Raspberry Pi und HD44780-Display:
Heute habe ich mich an den hardwareseitigen Teil dieses kleinen Projekts gesetzt, und das Ergebnis sieht so aus:

Sieht fast aus, als würde es funktionieren, nicht wahr? Tut's auch. Für alle, die sich das auch basteln wollen, werde ich nun ein paar Worte zum Aufbau verlieren.
Verwendet habe ich ein Display, das im Aufbau Hitachis LCD Controller HD44780 entspricht. Es hat zwei Zeilen mit je 16 Zeichen. Die Dinger gibt es zuhauf bei Amazon und eBay. Die Materialkosten belaufen sich in meinem Fall auf 1,79 Euro. Es gibt das Display auch in einer Ausführung mit 4 Zeilen à 20 Zeichen. Dieses kostet aber so um die 9 Euro.
(Wer sich selbst ein Display zulegen will, kann sich hier mal umsehen.)
Ansonsten braucht man noch ein Breadboard, einige Kabel und einen Lötkolben mit dem nötigen Zubehör. Es kann auch nicht schaden, wenn man ein paar wenige E-Technik Grundlagen mitbringt und sich vorher noch mal ins Gedächtnis ruft, dass die GPIO-Pins des Raspberry Pi direkt an dessen Bus angeschlossen sind. Anders formuliert: Wenn man einen Kurzschluss fabriziert oder eine Überspannung auf die Pins loslässt, ist es wahrscheinlich recht schnell vorbei, mit dem Pi (nicht alles, was sich reimt ist gut).
Das HD44780 Display
Das Display verfügt über 16 Kontakte. Es kann sowohl über 4 Bit als auch über 8 Bit gesteuert werden. Um GPIO-Pins zu sparen, habe ich mich für die 4-Bit-Variante entschieden. Somit müssen auch 4 Kabel weniger angelötet werden. Die Belegung der 16 Kontakte lautet wie folgt:- 1. Vss: Versorgungsspannung GND (Masse).
- 2. Vcc: Versorgungsspannung +5V.
- 3. V0: Kontrastspannung. Hier kann eine Spannung zwischen 0 und 5 Volt angelegt werden, um den Kontrast festzulegen.
- 4. RS: Register. Hierüber erfolgt die Wahl des Registers. 0: Befehlsregister, 1: Datenregister.
- 5. R/W: Read/Write. Das Display kann auch Daten ausgeben. Dies ist für unsere Zwecke nicht nötig und sogar gefährlich. Die GPIO-Pins des Pis vertragen nur 3,3 Volt, der Output des LCD-Moduls liegt aber bei 5 Volt, also eine gute Quelle für einen Überspannungsschaden.
- 6. E: Enable (Takt).
- 7. Datenleitung 0. Brauchen wir nicht, weil wir im 4-Bit-Modus arbeiten.
- 8. Datenleitung 1. Brauchen wir nicht, weil wir im 4-Bit-Modus arbeiten.
- 9. Datenleitung 2. Brauchen wir nicht, weil wir im 4-Bit-Modus arbeiten.
- 10. Datenleitung 3. Brauchen wir nicht, weil wir im 4-Bit-Modus arbeiten.
- 11. Datenleitung 4.
- 12. Datenleitung 5.
- 13. Datenleitung 6.
- 14. Datenleitung 7.
- 15. A: Anode der LED-Hintergrundbeleuchtung.
- 16. K: Kathode der LED-Hintergrundbeleuchtung.
Die Belegung der GPIO-Pins am Raspberry Pi
Die 26 GPIO-Pins sind am rechten Ende jener Seite des Raspberry Pi zu finden, an der auch die Status-LEDs, der Audio-Ausgang und der Composite Video-Ausgang zu finden sind. Ihre genaue Belegung ist von der Revision des Gerätes abhängig. Diese kann man mithilfe des Befehls - cat /proc/cpuinfo - ermitteln. Die Grafiken zeigen die Pin-Belegungen für die beiden derzeit verfügbaren Versionen des Raspberry Pi. Es gilt die Blickrichtung zu beachten! Damit die Darstellung mit der Realität übereinstimmt, muss man den Pi so vor sich halten, dass die Ecke mit den GPIO-Pins links oben ist. Hält man sie verkehrt herum, kann das fatale Folgen haben.

Unterschiede treten nur in der zweiten Zeile der Übersicht auf, also der inneren Reihe von Pins auf dem Board. Die erste Zeile ist bei beiden Revisionen gleich belegt. Um Verwechslungen gänzlich zu vermeiden, habe ich daher auch nur mit dieser (also der äußeren Reihe von GPIO-Pins) gearbeitet.
Insgesamt brauchen wir acht Leitungen: zwei für die Stromversorgung und sechs GPIO-Leitungen für den Datenaustausch (vier Datenleitungen sowie Takt (E) und Registerauswahl (RS)).
Raspberry Pi trifft HD44780 Display
Hier eine Übersicht der Verdrahtung als Tabelle und Bild.LCD Kontakt | an GPIO-Pin |
---|---|
1 (GND) | 6 (GND) |
2 (+5V) | 2 (+5V) |
3 (Kontrast) | 6 (GND) |
4 (RS) | 26 (GPIO7) |
5 (R/W) | 6 (GND) |
6 (E) | 24 (GPIO8) |
11 (Daten 4) | 22 (GPIO25) |
12 (Daten 5) | 18 (GPIO24) |
13 (Daten 6) | 16 (GPIO23) |
14 (Daten 7) | 12 (GPIO18) |
15 (LED +5V) | 2 (+5V) |
16 (LED GND) | 6 (GND) |

Das sollte eigentlich an Informationen ausreichen, um es nachzubauen. Die Drähte am Display habe ich festgelötet, alles andere ist nur gesteckt. Damit das gut geht, habe ich die Kabelenden verzinnt. Für die GPIO-Pins hatte ich leider kein Flachbandkabel zur Hand. Daher habe ich herkömmliche Jumperkabel (an beiden Enden weiblich) verwendet und von diesen jeweils ein Ende abgeschnitten. Leider musste ich dabei feststellen, dass die Jumper zur hoch waren, sodass ich mein Gehäuse nicht mehr verschließen konnte. Ich habe die Plastikummantelung der Stecker daher um 1 bis 2 Millimeter gekürzt, jetzt passt es. Dennoch bietet sich hier der Hinweis an: Wer vor hat sich ein Gehäuse für seinen Raspberry Pi zu kaufen, sollte darauf achten, dass dieses genügend Raum bietet, um an die GPIO-Pins zu kommen.
Hinweise und Problembehandlung
Um Kurzschlüsse zu vermeiden, sollte man, bevor man den Aufbau das erste Mal unter Strom setzt, noch mal prüfen, ob alles richtig verkabelt ist und ob kein Draht aus dem Breadboard gerutscht ist. Am Display dürfen sich keine Lötstellen oder Drähte berühren!Noch ein wichtiges Thema ist die LED-Hintergrundbeleuchtung des Displays. Aus meinem Datenblatt des HD44780 LCD Moduls geht hervor, dass diese mit 5 Volt betrieben werden kann. Für einige, auch oft in Displays verbaute, LEDs wäre dies jedoch zu viel des Guten! Ich weiß nicht, ob es bei der HD44780 Reihe generell so ist, das man 5 Volt anschließen kann oder ob dies je nach Hersteller variiert. Wer sich unsicher ist, sollte (bei einer blauen Hintergrundbeleuchtung) noch einen 430 (oder 560) Ohm Widerstand zwischen die Anode der LED-Beleuchtung (Kontakt 15) und die +5V Leitung stecken.
Wenn alles aufgebaut ist, spricht nichts dagegen den Pi anzuschließen. Das Display sollte sofort aufleuchten. In der ersten Zeile des Displays sind alle Pixel angeschaltet, in der zweiten Zeile bleiben alle dunkel. Ausgegeben wird natürlich noch nichts, dazu komme ich gleich noch.
Bei mir trat am Anfang ein seltsamer Fehler auf. Das Display ging an, aber es färbten sich alle Pixel weiß. Wenn ich einen Text auf dem Display ausgeben wollte, wurden die zum Text gehörenden Pixel einen Hauch heller, aber es blieben auch die anderen aktiv, sodass man kaum etwas lesen konnte, bzw. nur dann, wenn man schräg auf das Display schaute. Nach längerer Suche fand ich die Ursache beim Messen der Spannung. Mein Netzteil (ein Handyladegerät von Nokia, das ich extra für den Pi gekauft habe) sorgt dafür, dass ich eine (Über-)Spannung von ca. 5,5 Volt anliegen habe. Schließe ich den Pi hingegen an den USB-Port meines Rechners an, funktioniert alles einwandfrei. Die Überspannung des scheinbar doch zu billigen Netzteils sorgt also für eine Fehlfunktion des Displays. Falls also mal jemand mit einem ähnlichen Problem kämpfen sollte: Netzteil checken und gegebenenfalls. einen Widerstand einbauen.
Das Display testen
Schön, wenn man ein Display hat das leuchtet. Noch schöner, wenn es auch etwas anzeigen kann. Hierfür ist nur ein kleines Python Skript von Nöten, dass ihr hier herunterladen und direkt auf dem Raspberry Pi ausführen könnt. Das Downloaden und Starten des Skriptes kann der Einfachheit halber auch gleich über SSH oder eine Kommandozeile auf dem Gerät erfolgen:
# wget http://raspberry-gpio-python.googlecode.com/files/python-rpi.gpio_0.3.1a-1_armhf.deb
# dpkg -i python-rpi.gpio_0.3.1a-1_armhf.deb
# wget http://www.schnatterente.net/code/raspberrypi/displaytest.py
# chmod +x displaytest.py
# python displaytest.py
# dpkg -i python-rpi.gpio_0.3.1a-1_armhf.deb
# wget http://www.schnatterente.net/code/raspberrypi/displaytest.py
# chmod +x displaytest.py
# python displaytest.py
Soweit zur Hardware. Als nächstes werde ich mich mit dem Code beschäftigen, der nötig ist, um RSS-Feeds und Kalendertermine anzeigen zu lassen. Sobald die Sache läuft erfahrt ihr es hier.
Update 12.10.2012: Der RSS Reader läuft. :)
Weitere Artikel in Sachen Raspberry Pi und HD44780-Display:
Geschnatter
110 Kommentare, selbst mitschnattern
MoJo, am 04.05.2013 um 12:01 Uhr
Vielen Dank für den Post! Habe gerade mein Display, genau nach Anleitung, zum Schnattern bekommen!
Well done!
Well done!
Sven, am 11.05.2013 um 20:31 Uhr
Hallo und Danke für die gute Beschreibung.
habe hier jetzt ein 4x20 angeschlossen und das skript entsprechend angepasst.
hatte gerade allerdings das prob mit den Umlauten und musste erst eimal googeln.
für alle die Umlaute auf dem Display ausgeben wollen:
(ä = \xe1)-(ü = \xf5)
(ö = \xef)-(ß = \xe2)
einfach in den text einfügen...
vielleicht kennt ja jemand weitere möglichkeiten. !?
gruß
Sven
habe hier jetzt ein 4x20 angeschlossen und das skript entsprechend angepasst.
hatte gerade allerdings das prob mit den Umlauten und musste erst eimal googeln.
für alle die Umlaute auf dem Display ausgeben wollen:
(ä = \xe1)-(ü = \xf5)
(ö = \xef)-(ß = \xe2)
einfach in den text einfügen...
vielleicht kennt ja jemand weitere möglichkeiten. !?
gruß
Sven
Sven, am 11.05.2013 um 20:59 Uhr
Ich nochmal...
habe übrigens in der Kopfzeile:
# -*- coding: utf-8 -*-
eingetragen.
Gruß
Sven
habe übrigens in der Kopfzeile:
# -*- coding: utf-8 -*-
eingetragen.
Gruß
Sven
Narchen, am 07.07.2013 um 21:33 Uhr
Hallo,
erstmal ein Riesen Lob für dieses tolle TUT.
Ich habe Trotzdem eine Frage, Wenn ich den Pi per Shutdown runterfahre und die Stromzufuhr am Gerät angeschlossen lasse, dann zeigt das display Trotzdem noch was an. Ist es möglich das man das Abändern kann, das das Display beim runterfahren mit Ausgeht?
Lg narchen
erstmal ein Riesen Lob für dieses tolle TUT.
Ich habe Trotzdem eine Frage, Wenn ich den Pi per Shutdown runterfahre und die Stromzufuhr am Gerät angeschlossen lasse, dann zeigt das display Trotzdem noch was an. Ist es möglich das man das Abändern kann, das das Display beim runterfahren mit Ausgeht?
Lg narchen
Antwort: Die Display-Beleuchtung wird vermutlich immer an bleiben, da Strom auf den GPIO Pins anliegt. Den Text auf dem Display könntest du natürlich noch löschen (z.B. indem du ihn mit Leerzeichen überschreibst).
Tobias, am 17.07.2013 um 20:49 Uhr
Vielen Dank für die tolle Anleitung!
Wer mit der Schaltung und der C-Bibliothek "WiringPi" weiter machen möchte, braucht die Pin-Belegung, wie sie dort verwendet wird (eigenes PIN-Mapping). Da ich gut und gerne 2 Stunden gebraucht habe, diese herauszufinden, hier der fertige Code für lcdInit:
lcdHandle = lcdInit (rows
, cols
, 4 // bits
, 11 // rs
, 10 // strb / e
, 6 // d0
, 5 // d1
, 4 // d2
, 1 // d3
, 0 // d4
, 0 // d5
, 0 // d6
, 0 // d7
) ;
Wer mit der Schaltung und der C-Bibliothek "WiringPi" weiter machen möchte, braucht die Pin-Belegung, wie sie dort verwendet wird (eigenes PIN-Mapping). Da ich gut und gerne 2 Stunden gebraucht habe, diese herauszufinden, hier der fertige Code für lcdInit:
lcdHandle = lcdInit (rows
, cols
, 4 // bits
, 11 // rs
, 10 // strb / e
, 6 // d0
, 5 // d1
, 4 // d2
, 1 // d3
, 0 // d4
, 0 // d5
, 0 // d6
, 0 // d7
) ;
Tobbes, am 22.07.2013 um 12:24 Uhr
Hallo,
danke für die Anleitung.
Kann ich die Verdrahtung auch für einen LCD am Raspbmc verwenden?
Muß ich noch weitere Schritte berücksichtigen oder reicht es im XBMC die Verwendung von LCD Anzuschalten?
Gruß Tobbes
danke für die Anleitung.
Kann ich die Verdrahtung auch für einen LCD am Raspbmc verwenden?
Muß ich noch weitere Schritte berücksichtigen oder reicht es im XBMC die Verwendung von LCD Anzuschalten?
Gruß Tobbes
Antwort: Kenn mich mit Raspbmc/XMBC nicht aus, aber ich vermute, dass es da keine Unterschiede gibt, da glaube alles auf Debian basiert?
Was meinst du mit "Verwendung von LCD anschalten"?
Was meinst du mit "Verwendung von LCD anschalten"?
Daniel, am 24.07.2013 um 08:18 Uhr
Hi Schnatterente,
sehr schöner Artikel. Ich hab es (fast) sofort zum laufen bekommen.
Ich würde jetzt ganz gern noch die Displaybeleuchtung mit dem RasPi ein und ausschalten.Die GPIOs liefern doch 3.3V. Kann man die Anode nicht mit einem freien Port verbinden (GPIO 11)?
Grüße Daniel
sehr schöner Artikel. Ich hab es (fast) sofort zum laufen bekommen.
Ich würde jetzt ganz gern noch die Displaybeleuchtung mit dem RasPi ein und ausschalten.Die GPIOs liefern doch 3.3V. Kann man die Anode nicht mit einem freien Port verbinden (GPIO 11)?
Grüße Daniel
Antwort: Ja, denke das geht.
Es gelten die Regelungen der Datenschutzerklärung.