mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik OLED und 8051


Autor: Franjo Rupcic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niels Huesken (monarch)
Datum:

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

Autor: Franjo Rupcic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niels Huesken (monarch)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: tsetse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
39 auf 3f ändern

Autor: Franjo Rupcic (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Franjo Rupcic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niels Huesken (monarch)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.