Forum: Mikrocontroller und Digitale Elektronik SPI (DOGL-Display)


von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Hallo Leute!

Ich programmiere gerade ein EA DOGL-128.
Ich möchte es über SPI ansprechen, da jedes Display der EA DOG-Reihe 
über SPI angesprochen werden kann.
(Gut, das DOGL kann nur über SPI angesprochen werden, da habe ich jetzt 
nicht so wirklich die Wahl. Aber ich bekomme auch bald das DOGXL.)

Ich finde das sehr gut, da ich bisher nicht gezwungen war, mich mit SPI 
auseinander zu setzen. Somit aber schon.

Ich habe kein Problem damit, etwas zu versuchen und damit zu scheitern.
So habe ich mir einfach das Datenblatt angesehen und über Pinwackeln 
versucht das notwendige Verhalten zu erzeugen, wie es im Datenblatt Auf 
der Seite 5 beschrieben.

Funktioniert aber noch nicht. Ursachen, kann es aber viele haben.
So wollte ich erstmal das Hardware-SPI meines ATmega32 nutzen, um 
fehlerhafte Programmierung meinerseits zu vermeiden.

Dazu habe ich mich jetzt über SPI belesen. Leider ist der 
SPI-Artikel nicht wirklich gut.
1
<aufdiekackehau>
2
Kann es ja mal bei Zeiten verbessern!
3
</aufdiekackehau>

Mir ist nun aufgefallen, dass die Standard-Bezeichnungen für die Pins 
nicht übereinstimmen.
Wie also ist die richtige Zuordnung?

Kann das stimmen:
1
MIS0          --  // Wird nicht gebraucht, da nicht gelesen werden kann.
2
MOSI          --  SI
3
/SS(Freigabe) --  /CS1
4
SCK           --  SCL

Wäre nahe liegend oder?
/RST geht dauerhaft auf 1.
Aus dem A0-Pin werde ich noch nicht so schlau.
Wie weiß der Display-Controller, von welchen Bit gerade gesprochen wird?
Kann /CS1 auch dauerhaft auf GND gesetzt werden? Oder ist dessen 
fallende Flanke der Start für den Zähler?

Bei den anderen Modellen, zum Beispiel dem DOGXL sind die Bezeichnungen 
wieder anders. Kann das am Kontext liegen? Oder weshalb ist das so?
Ich meine SI für Slave In kann ich mir ja noch erklären, aber SDA 
wie beim DOGXL?

Danke für hilfreiche Tipps
Fabian

______________________________________________
P.S. Seit wann kann man eigentlich keine PDFs mehr anhängen, dass ging 
doch mal!?
http://www.lcd-module.de/pdf/grafik/dogl128-6.pdf
http://www.lcd-module.de/deu/pdf/grafik/dogxl160-7.pdf

von J. W. (jw-lighting)


Lesenswert?

Fabian Hoemcke schrieb:
> Ich meine SI für Slave In kann ich mir ja noch erklären, aber SDA
> wie beim DOGXL?

Die Bezeichnungen rühren vom ebenfalls unterstützen I2C-Protokoll her, 
und sind dort Standart. Siehe auch das von dir verlinkte Datenblatt.

LG :)

von thomas (Gast)


Lesenswert?

An dem Zustand von A0 unterscheidet der Display-Controller zwischen 
Befehlen und Daten.
Achte auch auf die richtige Konfiguration des SPI - im Register SPCR 
müssen Phase und Polarität des Taktes eingestellt werden. Ich hatte das 
Display laufen mit CPOL=0 und CPHA=0.

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

thomas schrieb:
> im Register SPCR
> müssen Phase und Polarität des Taktes eingestellt werden.

Danke für den Tipp!
Das hatte ich zwar schon auf dem Schirm, aber das heißt ja nicht, dass 
ich es richtig gemacht hätte! ;)

von spess53 (Gast)


Lesenswert?

Hi

Und A0 erst umschalten wenn die Übertragung wirklich beendet ist.

MfG Spess

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Angehängte Dateien:

Lesenswert?

spess53 schrieb:
> Hi
>
> Und A0 erst umschalten wenn die Übertragung wirklich beendet ist.
>
> MfG Spess

Das verstehe ich nicht.
Laut dem Timing Diagram im Datenblatt muss A0, wenn überhaupt parallel 
zum Wechsel der Bytes kommen. Also während D0 und dann D7 übertragen 
werden.

von Der Tukan (Gast)


Lesenswert?

An D0...7 und A0 darfst du solange rumfummeln wie du willst. Sobald SCL 
kommt, muss aber alles korrekt stehen.

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Der Tukan schrieb:
> An D0...7 und A0 darfst du solange rumfummeln wie du willst. Sobald SCL
> kommt, muss aber alles korrekt stehen.

Alles klar!

von spess53 (Gast)


Lesenswert?

Hi

>Laut dem Timing Diagram im Datenblatt muss A0, wenn überhaupt parallel
>zum Wechsel der Bytes kommen. Also während D0 und dann D7 übertragen
>werden.

Nein. Da darf es frühestens kommen. Das Timing wie auf dem Bild bekommst 
du so nur schwer oder gar nicht mit dem Hardware-SPI hin. Daher ist es 
besser und einfacher vor dem Umschalten von A0 das Ende der Übertragung 
(SPIF in SPSR abfragen) abzuwarten.

MfG Spess

von R. W. (quakeman)


Lesenswert?

Ich habe letztes Jahr selber mit dem DogL herumgespielt und eine Library 
dafür geschrieben gehabt. Diese ist zwar für einen LPC900, aber in C 
geschrieben und es gibt nur eine einzige Methode, die Controller 
spezifisch ist (SPI Ausgabe). Die für dich vermutlich interessanten 
Routinen dadrin sind v_Init_DogL128() und v_Write_DogL128(). Es sind 
auch einfache Methoden zum Zeichnen und eine 8x5 Pixel Schriftart 
enthalten.

Beim Init ist mir damals aufgefallen, dass das LCD nach dem Einschalten 
häufig nur funktionierte, wenn ich die Reset Leitung für kurze Zeit auf 
0 legte. Scheinbar führt das LCD keinen zuverlässigen Einschaltreset 
durch.

Die Lib findest du unter [1] und die dazugehörige Header Datei unter 
[2].

Ciao,
     Rainer

[1] 
https://quakeman.homelinux.net/viewvc/uVision/trunk/Library/LCD_DogL128_Funktionen.c?view=markup
[2] 
https://quakeman.homelinux.net/viewvc/uVision/trunk/Library/LCD_DogL128_Funktionen.h?view=markup

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Laut dem Timing Diagram im Datenblatt muss A0, wenn überhaupt parallel
>>zum Wechsel der Bytes kommen. Also während D0 und dann D7 übertragen
>>werden.
>
> Nein. Da darf es frühestens kommen. Das Timing wie auf dem Bild bekommst
> du so nur schwer oder gar nicht mit dem Hardware-SPI hin. Daher ist es
> besser und einfacher vor dem Umschalten von A0 das Ende der Übertragung
> (SPIF in SPSR abfragen) abzuwarten.
>
> MfG Spess

Das heißt, wenn A0 gesetzt sein soll für eine Übertragung, dann frage 
ich das SPIF ab, setze dann A0 und starte dann die Übertragung indem ich 
das eigentliche Byte (D7-D0) in das SPDR schreibe?

Gruß
Fabian

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

Fox Mulder schrieb:
> Ich habe letztes Jahr selber mit dem DogL herumgespielt und eine Library
> dafür geschrieben gehabt. Diese ist zwar für einen LPC900, aber in C
> geschrieben und es gibt nur eine einzige Methode, die Controller
> spezifisch ist (SPI Ausgabe). Die für dich vermutlich interessanten
> Routinen dadrin sind v_Init_DogL128() und v_Write_DogL128(). Es sind
> auch einfache Methoden zum Zeichnen und eine 8x5 Pixel Schriftart
> enthalten.
>
> Beim Init ist mir damals aufgefallen, dass das LCD nach dem Einschalten
> häufig nur funktionierte, wenn ich die Reset Leitung für kurze Zeit auf
> 0 legte. Scheinbar führt das LCD keinen zuverlässigen Einschaltreset
> durch.
>
> Die Lib findest du unter [1] und die dazugehörige Header Datei unter
> [2].
>
> Ciao,
>      Rainer
>
> [1]
> https://quakeman.homelinux.net/viewvc/uVision/trun...
> [2]
> https://quakeman.homelinux.net/viewvc/uVision/trun...

Ey! Super! Eine laufende Library!
Werde es mir bald anschauen!
Heute komme ich nur nicht mehr dazu!

Aber Danke!
Fabian

von holger (Gast)


Lesenswert?

>Ey! Super! Eine laufende Library!

Wenn du nach DOGM-128 suchst dann findest du noch mehr.
Scheint wohl das gleiche zu sein.

von Fabian H. (Firma: Technische Universität Berlin) (brein)


Lesenswert?

holger schrieb:
>>Ey! Super! Eine laufende Library!
>
> Wenn du nach DOGM-128 suchst dann findest du noch mehr.
> Scheint wohl das gleiche zu sein.

Stimmt, sogar der Controller ist der gleiche!
Auch die Auflösung stimmt.

Du meinst also, es gibt da noch mehr Libraries?

von holger (Gast)


Lesenswert?

>Du meinst also, es gibt da noch mehr Libraries?

Eine liegt auf meinem PC und ein paar tausend im Internet.
Wenn man nicht sucht dann findet man natürlich auch nicht.

von spess53 (Gast)


Lesenswert?

Hi

>Du meinst also, es gibt da noch mehr Libraries?

>Eine liegt auf meinem PC...

Auf meinem auch. Sogar EA hat etwas.

MfG Spess

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Ich hab auch eine eigene Lib für das DOGL geschrieben.
Es ist wichtig, Reset nach dem Start gezielt anzusteuern, einfach 
festhängen reicht nicht aus.

Grüße,

Peter

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Ach ja: CS ist auch der Sync für die Bytegrenzen, muss also auch bei 
einem einzelnen Slave angesteuert werden. Ich glaube, mich zu erinnern, 
dass das Display auch funktioniert, wenn man das nur gelegentlich macht, 
aber irgendwann muss man einen Sync machen. So gibts aber mehr EMV 
Probleme, deswegen steuer ich das bei jedem Byte.

Also: Festhängen geht auch da nicht.

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.