Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi LCD über Shell steuern


von Christian B. (sourcecode)


Lesenswert?

Hallo,

hat jemand schon mal versucht ein an ein Raspberry Pi angeschlossenes
LCD Display (16x2) über die Shell (bash oder wie auch immer) 
anzusteuern?.
Wäre das überhaupt möglich?.
Im Netz finde ich nur irgendwelche Fetzen von Python Skripten.
Irgendwelche Test Skripte funktionieren zwar, aber ich wollte mir selbst 
etwas basteln, kenne mich aber nicht mit Python aus.

Jemand Erfahrung damit oder Ahnung ob sich ein ansteuern über die Shell
realisieren laesst?.

Vielen Dank im voraus.

Gruß
Christian

von Jens (Gast)


Lesenswert?

Christian B. schrieb:
> Wäre das überhaupt möglich?.
Ja. müsste gehen. Grodon@Drogon hat ein Programm namens gpio 
veröffentlicht. Mit diesem lassen sich die Pins per Shell-Skript 
steuern:
http://projects.drogon.net/raspberry-pi/gpio-examples/tux-crossing/2-two-more-leds/

Jetzt mußt Du nur noch das LCD-Protokoll realisieren. Die Lösung ist 
zwar reichlich umständlich (bzw. unelegant), aber als Demonstration bzw. 
Test ganz ok.

Jens

von Rolf (Gast)


Lesenswert?

Ja, das geht problemlos.

Ich habe so ein 16x2 Display per I2C an den GPIO Port angeschlossen, die 
I2C Treiber samt Anleitung stehen im Netz und liessen sich einfachst mit 
Bordmitteln laden und installieren. Anleitungen finden sich im Netz.

Auf besagtem Pi läuft das aktuelle RaspBMC und die Installation wurde 
per SSH-Shell auf der Kommandozeile durchgeführt.

von Reiner W. (reiner_w)


Lesenswert?

Für ein 16*2 HD44780 und I2C Expander  PCF8574 hab ich mal ein 
Shell-Script geschrieben, dass i2cset benutzt. Kommt also ohne Python 
oder Treiber aus. Aber wie gesagt die i2c Variante.

Reiner

von Icke (Gast)


Lesenswert?


von Peter L. (luidoltp)


Lesenswert?

Hi Christian,

Schau dir mal dieses PDF an. Mit der darin erwähnten Library von 
Adafruit sollte das schreiben eines kleines Scripts, das du über die 
Shell aufrufen kannst, nicht allzu schwierig sein.

http://learn.adafruit.com/downloads/pdf/drive-a-16x2-lcd-directly-with-a-raspberry-pi.pdf

Liebe Grüße,
Lui

von Christian B. (sourcecode)


Lesenswert?

Hallo,

vielen Dank für die vielen Antworten und Tipps.
Ich habe mich jetzt mal für die i2c Version entschieden.

Mein Display hat ein I2C Modul von DFRobot. Das Modul ist mit dem
folgendem Chip bestueckt:

http://www.nxp.com/documents/data_sheet/PCA8574_PCA8574A.pdf

Gefolgt bin ich mal dieser Anleitung:

http://kampis-elektroecke.de/?page_id=2035

Das Display wird am i2c Bus erkannt als Device 0x27.

Ich haenge laut der gefolgten Anleitung bei dem Punkt mit
der Kommunikation mit dem EEPROM. Wie kriege ich die Adresse
des EEPROMs heraus?.

Vielen Dank schon mal.

Gruss
Christian

von Reiner W. (reiner_w)


Lesenswert?

i2cdetect -y 0  ##falls du das Rpi Model A hast
i2cdetect -y 1  ##falls du das Model B dein Eigen nennst

Vorausgesetzt, du hast die i2c-Tools installiert
siehe hier: http://www.gsurf.de/vorbereiten-des-raspberry-pi-auf-i2c/

Gruß Reiner

von Christian B. (sourcecode)


Lesenswert?

Hallo Reiner,

danke fuer Deine Antwort.
Soweit war ich bereits. Ein i2cdetect -y 1 gibt mir eine 27 aus.
Ich glaube ich habe da Verstaendnisprobleme wie ich nun Text
auf dem Display anzeigen kann.

Wenn ich i2cget -y 1 0x27 eingebe erhalte ich als Ausgabe 0xf7.
Schreiben Mittels i2cset -y 0x27 0x00 funktioniert wohl auch.
(bei der Eingabe erlischt die Hindergrundbeleuchtung)
Wenn ich erneut i2cget -y 1 0x27 eingebe erhalte ich als Ausgabe 0x00.

Gruss
Christian

von Reiner W. (reiner_w)


Angehängte Dateien:

Lesenswert?

Das ist leider ganz und gar nicht so einfach, wenn du das Display mit 
i2cset steuern willst.
Falls du das vorhast, musst du dich mit den Unterlagen des HD44780 
auseinander setzen.
Falls du es unbedingt mit der Shell und i2cset machen willst kannst 
folgenden Code als Beispiel nehmen.
Der Code setzt allerdings voraus, dass die Datenleitungen P0-3 des 
Extender mit D4-8 des LCD verbunden sind, wie das z.B. das mjkdz-Modul. 
Die weiteren Verbindungen können im Code direkt verdrahtet werden:
1
#defaults parameters
2
a=0x27     # Chip ADR
3
...
4
5
#LCD WIRE
6
LCD_EN=0x10    # bit 4
7
LCD_RS=0x40    # bit 6

Hab zwar auch Code gebastelt, wo die Datenleitungen frei verdrahtet 
werden können, hab aber im Moment keinen Zugriff drauf.

Vlt. hilft es.

Gruß Reiner

von Christian B. (sourcecode)


Lesenswert?

Hallo Reiner,

danke fuer Deine Hilfe.
Ich hatte gedacht bzw. gehofft das es alles etwas einfacher geht.
Kenne mich auch mit der Verkabelung und den ganzen Dingen nicht
wirklich aus. Habe an mein Display ein i2c Modul (Backpack)
angelötet welches ich dann über VCC, GND, SDA und SCL mit dem
Raspberry verbinde.
Bevor ich diesen Thread eröffnet habe hatte ich ein Display ueber
diverse GPIOs verkabelt. So wie hier:

http://learn.adafruit.com/drive-a-16x2-lcd-directly-with-a-raspberry-pi/overview

Da funktionierten zumindest irgendwelche Testscrikpte in Python.
Mit Python kenne ich mich nicht aus und hatte einfach die Hoffnung
man könne das Display ueber die Shell genauso leicht ansprechen.

Vielleicht sollte ich es dann doch lieber irgendwie in Python versuchen.
Erscheint mir zumindest Momentan die einfacherer Lösung zu sein.

Gruss
Christian

von Reiner W. (reiner_w)


Lesenswert?

Ja, du solltest sicher darüber nachdenken, das Ganze mit irgendeinen 
ausgereiften Lösung, die es für den Raspi zahlreich gibt, zu machen.
Perfekt ist der Link von Icke. Für den Einsatz unter RASPMC gibt es auch 
eine perfekte Lösung, die sich leicht anpassen lässt.
Google einfach mal ne Weile.

Wenn du dir die Python-Skripte ansiehst wirst du übrigens feststellen, 
dass die fast genauso aussehen wie mein Shellscript;.-) halt nur in 
Python.

Reiner

von Icke (Gast)


Lesenswert?

Warum nimmst Du nicht einfach ein serielles LCD.
Kostet 5 Euronen mehr als ein normales.
Der Pi hat serielle Schnittstellen.

Die Ansteuerung läuft dann in der Art:

Echo " Hallo Welt" > /dev/ttyx.

Nebst gut dokumentierten Steuerbefehlen.

Fertig ist die Laube.

von Christian B. (sourcecode)


Lesenswert?


von Christian B. (sourcecode)


Lesenswert?

Hallo,

ich habe mir jetzt nun mal ein LCD mit einer seriellen
Anschlussmoeglichkeit organisiert und habe es wie folgt
angeschlossen:

Display:     Raspberry:

VDD          5V+ (Pin2)
GND          GND (Pin6)
RX           TX  (Pin8)

Die folgende Zeile habe ich in /etc/inittab auskommentiert:

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Die Datei /boot/cmdline.txt habe ich wie folgt geaendert von:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 
console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=dealine 
rootwait

nach ...

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4
elevator=deadline rootwait

Das Ganze deaktiviert den moeglichen Login ueber den UART so wie ich
das verstanden habe.

Wenn ich den Raspberry starte, erscheinen auf dem Display waehrend des
Bootvorgangs ein paar wahllose Zeichen. Der Befehl:

echo "Test" >/dev/ttyAMA0

laeuft ins Leere. Ausser der wahllosen Zeichen beim Booten kriege
ich auf dem Display nichts angezeigt.

Jemand eine Idee was falsch laeuft bzw. was ich vergessen haben
koennte oder noch versuchen koennte ?.

Vielen Dank im voraus.

Gruss
Christian

von Christian B. (sourcecode)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe das Ganze jetzt mal mit einem 3,3V Display getestet.
Diesmal mit Erfolg. Mehr oder weniger.
Jetzt habe ich das Problem, wenn ich per echo "test" >/dev/ttyAMA0
etwas an das Display sende, sich nach dem Zeichen/String sich immer
ein kryptisches Zeichen mit anhängt. Ich habe mal ein Foto bereit
gestellt.
Wenn ich das Programm screen nutze (screen /dev/ttyAMA0 9600) wird
alles normal angezeigt und kein Zeichen mehr angehängt.
An der Konfiguration der seriellen Schnittstelle dürfte es dann
ja eigentlich nicht liegen, oder ?.

Hat jemand eine Idee ?.

Vielen Dank im voraus.

Gruß
Christian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.