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
Hört sich nach Timingproblemen an. Vieleicht solltest du dem Display nach absenden des Clearbefehls etwas Zeit lassen....
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
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....
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.