Hi Leuts,
ich habe einen Raspberry Pi B+ und ein vierzeiliges LCD-Modul mit der
Bezeichnung EA DIP203-4.
Hier sind Links zu den Datenblättern des LCD-Moduls
http://www.lcd-module.de/fileadmin/pdf/doma/dip203-4.pdfhttp://www.lcd-module.de/fileadmin/eng/pdf/zubehoer/ssd1803_2_0.pdf
Ich möchte das Modul via SPI mit dem Raspberry PI verbinden. Auf der
Rückseite des LCD-Bausteins ist eine Lötbrücke für SPI, die habe ich
geschlossen.
SPI hat vier Datenleitungen. Auf dem Raspi heissen sie CS, SCL, MISO und
MOSI. Auf dem EA Dip... sind die Bezeichnungen ein bißchen anders -
SCLK, CS, SOD und SID.
Ich habe sie jetzt so verbunden
CS ------> CS
SCL -----> SCLK
MOSI ----> SID
MISO <---- SOD
Dann noch VCC an 3,3V vom Rasp., GND an GND Rasp.
Ich hab jetzt ein kleines Python-Programm geschrieben, um das
anzusteuern, aber es klappte nicht. Das Python-Programm sieht so aus:
<c>
import spidev
spi = spidef.SpiDev()
spi.open(0,0)
spi.xfer2([0x0F])
spi.close()
</C>
Die Sequenz 0x0F steht für: Display ein, Cursor ein, Cursor blinken
Leider funktioniert nichts, was kann ich falsch gemacht haben?
Hi
>Die Sequenz 0x0F steht für: Display ein, Cursor ein, Cursor blinken>Leider funktioniert nichts, was kann ich falsch gemacht haben?
Und was ist mit dem Rest der Initialisierung (Datenblatt S.3)?
MfG Spess
Ja sorry, dass hätte ich auch schreiben müssen - ich hab natürlich auch
an VEE mit Hilfe eines Potis und eines Kondensators verbunden, wie auf
dem Bild zu sehen.
> was kann ich falsch gemacht haben?
Wie spess53 schon schrieb :
Und was ist mit dem Rest der Initialisierung
Ich habe mal vor Urzeiten einen SPI Treiber für Ethernut für dieses
Display gemacht. Ist zwar nicht für den Rasp-Pi, abere die
Initialisierungssequenz solltes du dir da raus klauen können.
http://www.tklinux.de/ks0073.html
Hi
>abere die>Initialisierungssequenz solltes du dir da raus klauen können.>http://www.tklinux.de/ks0073.html
Das Display hat aber einen SSD1803 Controller.
MfG Spess
Ok, danke für die Infos - aber der Rest ist dann schon mal richtig, dass
ich MOSI mit SID verbunden hab und MISO mit SID?
Und die Startsequenz wäre dann das hier alles hintereinander gesendet:
<<c>>
...
spi.xfer2([0x34)]
sleep(0.001)
spi.xfer2([0x09)]
sleep(0.001)
spi.xfer2([0x30)]
sleep(0.001)
spi.xfer2([0x0F)]
sleep(0.001)
spi.xfer2([0x01)]
sleep(0.001)
spi.xfer2([0x06)]
...
<</c>>
Hi
>Und die Startsequenz wäre dann das hier alles hintereinander gesendet:
Dann sieh dir mal das Datenblatt vom SSD1803 an. Das ganze ist etwas
komplizierter als du dir das vorstellst.
MfG Spess
Hi
>Ups - sorry>habe das EA DIP203-4 mit dem EA DIP204-4 verwechselt.
Ich habe mal auf die Schnelle die Datenblätter des KS0073 und des
SSD1803 verglichen. Die scheinen mindestens ähnlich, wenn nicht gar
mehr, gestrickt zu sein.
MfG Spess
spess53 schrieb:> Dann sieh dir mal das Datenblatt vom SSD1803 an. Das ganze ist etwas> komplizierter als du dir das vorstellst.>> MfG Spess
Ich weis einfach nicht, wo ich da schauen soll in dem Datenblatt des
SSD1803.
Die Hauptfrage, die mich grade beschäftigt ist die, ob ich es denn
überhaupt richtig an den Raspberry Pi angeschlossen habe und ob ich so
gleich über SPI anfangen kann, Sequenzen zu verschicken.
Ich hab auch noch nicht mal im Datenblatt gefunden, mit welcher
Übertragungsrate man via SPI Daten senden kann. Es steht dort auch
nichts explizit für SPI, sondern irgendwie immer für 8bit oder
4bit-Modus und ich weis garnicht, wie ich da überhaupt starten soll.
Hallo meine , allgemeine Empfehlung:
Gönne dir mal einen Logic Analyser, etwa ZeroPlus Logicube, o.ä.
Damit kann besser die Grundsätzlichen Dinge klären:
- sende ich auf dem Bus etwas
- was dachte ich gesendet zu haben -> was habe ich gesendet
Gruß
Hi
>Ich weis einfach nicht, wo ich da schauen soll in dem Datenblatt des>SSD1803.
Wie wäre es mit
INTERFACE WITH MPU IN SERIAL MODE
ab S.26?
>Gönne dir mal einen Logic Analyser, etwa ZeroPlus Logicube, o.ä.>Damit kann besser die Grundsätzlichen Dinge klären:
Der erklärt aber niemand das Datenblatt.
MfG Spess
spess53 schrieb:> ab S.26?
Ja, hab mal auf Seite 26 geschaut. Ich hab sogar auch mal eine Seite
weiter geschaut, auf Seite 27. Ich habe es leider noch garnicht
sonderlich gut verstanden. In "Figure 7-11 Timing Diagram of Serial Data
Transfer" auf Seite 27 ist zu sehen, dass eine Kommunikation mit
3*8bit-Dingern stattfinden tut.
Ich will jetzt z.B. den Befehl "Display ON" an mein Display senden. Der
HexCode dafür beträgt 0x0F oder in Bitschreibweise 00001111.
In dem Bild auf Seite 27 ist von drei 8-Bit-Sequenzen die Rede. Das
erste heisst Initbit, dann kommt LowerDataSequenz, dann
UpperDataSequenz. Bei den Upper-Lower-Sequenzen sind die letzten 4bit
immer Null. Nehm ich jetzt als Upper/Lower einfach die vier Bits von
meinem HexCode?
Ich würde es jetzt so hinsenden:
Initsequenz = 1111 1010
LowerDataSequenz = 1111 0000
UpperDataSequenz = 0000 0000
Ist das so richtig vom Aufbau her?
Und als Python-Befehl würde ich dann das hier machen?
Hi
>Ist das so richtig vom Aufbau her?
Nicht ganz. Dein RS-Bit muss für Befehle 0 sein.
>Und als Python-Befehl würde ich dann das hier machen?>spi.xfer2([0b11111010, 0b11110000, 0b00000000])
Wie erfolgt die Steuerung der CS-Leitung?
MfG Spess
Die CS-Leitung wird "automatisch" gesetzt, ich habe zwei CS-Leitungen
auf dem Raspberry PI (CE0, CE1) und beim Öffnen des SPI-Ports gibt es
den Befehl
spi.open (0,0). Dabei steht die erste Ziffer für die SPI-Schnittstelle
und die zweite für den dazugehörigen Chipselect-Port. Wird spi.xfer2
ausgeführt, dann wird CS0 oder CS1 automatisch vorher von HIGH auf LOW
gesetzt.
Ich würde ja mal ganz einfach die Miso und Mosi Leitung tauschen ;)
Also:
MISO <--> SID
MOSI <--> SOD
SPI verhält sich nicht wie UART wo RX<->TX und TX<->RX ist.