Forum: Mikrocontroller und Digitale Elektronik OLED und 8051


von Franjo Rupcic (Gast)


Lesenswert?

Hallo,

ich bin heute zum ersten mal hier in diesem Forum und noch nicht lange
dabei in der Hardware nahen Welt aber dafür Lernfähig.

Zur zeit versuche ich das OLED Display der Firma RITdisplay
(Produktname: RGS10096064, 65k Farben und 128x64 Pixel) mit dem IC der
Firm Solomon Systech SSD 1332 über ein DK der Firma SiLaby(früher
Cygnal) DK8051F005, anzusprechen.

Das versuche ich über die SPI schnittstelle mit SCLK von 1MHz (display
max rating liegt bei 4 MHz)

Also die kommunikation und beschaltung scheint zu stimmen, den das
Display geht an und nimmt auch meine Befehle entgegen.

Das Problem ist nur das diese nicht 100% richtig dargestellt werden.

Beispiel:

Mein testprogramm ist so geschrieben das zuerst RGB hoizontal in der
Reihenfolge R-G-B als balken dargestellt werden(als test ob ich das
kann). Nach 3s (Timer3) soll das Bild gelöscht werden und RGB diesmal
vertikal dargestellt werden.

Hier kommt es nun zu den fehlern.

1.
Der Befehl clear display löscht mir nicht alle Pixel sondern 3-5 zeilen
bleiben erhalten

2.
Wenn ich mit dem Befehlen arbeite passiert es das er mit beim zeichnen
Zeilen überspringt

3.
was ebenfalls seltsam ist, wenn ich auf den Display RAM (96x64x16)
zugreife (also nicht ins Befehlsregister) kann ich zwar zeichnen aber
wenn ich dann an einer anderen stelle was neues zeichnen möchte
verschwindet die zeichnung zuvor

Ich weiß das Thema OLED ist noch relativ neu und es gibt auch meines
wissens nach für programmierer nicht viele informationsquellen,
aber ein paar tipps würden mich schon weiter bringen hoffe ich


Danke

von Niels H. (monarch)


Lesenswert?

Hört sich nach Timingproblemen an.
Vieleicht solltest du dem Display nach absenden des Clearbefehls etwas
Zeit lassen....

von Franjo Rupcic (Gast)


Lesenswert?

Hallo Niels,

zuersteinmal danke an deinem Posting.

Ich glaube net das es ein timing Problem ist. Zu einem halte ich alle
angaben der SPI Einstellungen (max. Frquent 4 MHZ etc.) für das Display
ein, zum anderen auch wenn ich nach dem verschicken von 1Byte ein
wait(1ms) oder ähnlich dahinter hänge, ist der effekt der selbe. Beim
Clear Screen befehl

CODE:   (Display 96d x 64d  --> 60h x 40h)

  SPI0DAT = 0x25;  while(TXBSY){}     //25h ist Clear Window
  SPI0DAT = 0x00;  while(TXBSY){}     //Spalten Start Adr
  SPI0DAT = 0x00;  while(TXBSY){}     //Zeilen Start Adr
  SPI0DAT = 0x5F;  while(TXBSY){}     //Spalten End Adr
  SPI0DAT = 0x39;  while(TXBSY){}     //rate mal :-)

Bleiben weiterhin informationen vom alten Bild das im DDRAM des
Displays sind Informationen erhalten.

Bitte um weitere Tipps

von Niels H. (monarch)


Lesenswert?

Also meiner Meinung hälst du zwar die Timings für die Kommunikation
zwischen Controler und Display ein, aber berücksichtigst du auch, das
das Display eine Gewisse bearbeitungszeit für die übermittelten Befehle
braucht?

In dieser Zeit, in der das Display arbeitet, ist es vieleicht einfach
nicht bereit, neue Kommandos entgegenzunehmen. Und sei es
Spasseshalber: bau einfach mal ein paar Pausenschleifen an den
entsprechenden Stellen ein....

von tsetse (Gast)


Lesenswert?

39 auf 3f ändern

von Franjo Rupcic (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

okay das mit dem Timing scheint doch richtig zu sein. hab nun zum test
nach jedem schicken eines befehls 1ms Pause drinen.

Also jetzt empfängt der IC des Displays wenigstens immer etwas.
Komischer jedeoch ist was er darauf macht.

Wie gesagt, eigentlich sollte beim horizontalen inkrementieren die
nächste zeile geschrieben werden allerdings passiert vollgendes:

Eigentlich Zeilen bsp 0x02 --> 0x03 doch er tut 0x02 -->0x04
doch falls ich ihn weiter inkrementieren lasse und er über den rand
kommt fängt der bei den Zeilen an die er weg gelassen hat

Bsp. 3F-->0x01 -->0x03 ....etc

anderes problem ist das er ab und zu einfach das was ich ihm sende
irgendwo hinzeichnet wo es nicht hingehört. Beispiel eine linie
von(0/0) bis(20/20) landet irgendwo anders im Display

Ich lass mal das DS im anhang vielleicht hat ja jemand zeit und nen
guten vorschlag.

Danke

von Franjo Rupcic (Gast)


Lesenswert?

Komm zeit kommt rat manchmal auch ohne hilfe

Ein Eintrag wie der Zeilenzähler Inkrementieren soll ist im Datasheet
falsch eingetragen. Jedenfalls klappts bei mir wenn ich den wert
vertausche

von Niels H. (monarch)


Lesenswert?

Sorry, bei Fehlern in der Doku ist man auf sich allein gestellt. Da
macht man aus der Ferne nix.

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.