SSD1306 OLED 128x32 Bit Anzeigefehler

In dieses Forum gehören all deine Fragen rund um die Elektrotechnik und im Speziellen zum Bereich der Mikrocontrollertechnik.

SSD1306 OLED 128x32 Bit Anzeigefehler

#1

Ungelesener Beitrag Thomas81 » 18. Dez 2019, 08:55

Hallo zusammen,

Ich habe mir das Beispiel für den Displaytreiber SSD1306 angeschaut, welches auf einem 128x64 Bit OLED einwandfrei funktioniert.
Nun habe ich als zweites Display ein OLED mit 128x32 Bit verwendet, welches sich nicht wie erwartet verhält. Ich bin davon ausgegangen, dass lediglich die "untere Hälfte" des Displays fehlt, im Bezug auf das 128x64 OLED. Nur leider werden mir mit den Libs aus dem Beispiel nur die ungeraden Columns angezeigt.

Ich habe mit dem Befehl fb_drawPixel() experimentiert:

Code: Alles auswählen

fb_drawPixel(1, 1, 1);
fb_drawPixel(2, 2, 1);
fb_drawPixel(3, 3, 1);
Das erste und dritte Pixel wird dargestellt, das zweite Pixel nicht.
Ich habe versucht, in jeder zweiten Zeile Dummy Bytes zu senden, um den Page Address Pointer nur zwischen den ungeraden Zeilen springen zulassen, dass hat aber auch nicht wirklich zum Erfolg geführt.

Das Ändern der Buffer Size von 1024 auf 512 (in der lcd.h und lcd.c), mit entsprechender Änderung der Höhe von 64 auf 32 Bit in der lcd.h bringt nur den Unterschied, dass jetzt die obere Hälfte beschrieben wird. Die unter Hälfte zeigt den letzten bekannten Zustand unter 64 Bit an. Das kann ich soweit nachvollziehen.

Ich frage mich, wie muss die Funktion lcd_sendFramebuffer() verändert werden, damit auch die geraden Columns mit angezeigt werden?
Ich verwende für dieses Thema den PIC18F26K22, Compiler: XC8 v1.35, das Projekt befindet sich im Anhang.

Schon einmal vielen Dank.

Viele Grüße,
Thomas
Dateianhänge
2019_016.X.zip
(449.36 KiB) 57-mal heruntergeladen

Re: SSD1306 OLED 128x32 Bit Anzeigefehler

#2

Ungelesener Beitrag Nico » 18. Dez 2019, 19:24

Hallo Thomas,

ich habe i.M. viel um die Ohren, würde aber die Tage mal versuchen drüber zu schauen.

Bis dahin viele Grüße
Nico

Re: SSD1306 OLED 128x32 Bit Anzeigefehler

#3

Ungelesener Beitrag Nico » 20. Dez 2019, 13:41

Hi Thomas,

die Library ist in ihrer aktuellen Version noch nicht wirklich dynamisch, sprich lediglich durch eine Anpassung (z.B. Anzahl an Zeilen) weiterhin nutzbar. Hier könnte man definitiv nachbessern. Wie dem auch sei..

Bitte probier mal folgendes (muss definitiv geändert werden) - finde folgende Zeile(n) in lcd.c:

Code: Alles auswählen

lcd_sendCommand(SSD1306_SETMULTIPLEX);
lcd_sendCommand(0x3F);
Und ersetze die zweite durch:

Code: Alles auswählen

lcd_sendCommand(SSD1306_SETMULTIPLEX);
lcd_sendCommand(0x1F);
Dort erwartet der Controller die Anzahl an Zeilen - 1.
Gegebenenfalls müssen wir danach noch weiter suchen. Meld dich mal, wie sich das Display mit dieser Änderung verhält.

Viele Grüße
Nico

Re: SSD1306 OLED 128x32 Bit Anzeigefehler

#4

Ungelesener Beitrag Thomas81 » 20. Dez 2019, 14:47

Hallo Nico,

Ich habe die Zeile geändert, die Anzeige bleibt aber unverändert. Ich habe jetzt den Text „http://pic-projekte.de/“ auf dem Display, allerdings fehlt die Hälfte des Textes in der Höhe.

Gruß,
Thomas

Re: SSD1306 OLED 128x32 Bit Anzeigefehler

#5

Ungelesener Beitrag Thomas81 » 20. Dez 2019, 15:59

Hallo Nico,

Jetzt läuft es. Ich habe den Wert für SSD1306_SETCOMPINS von 0x12 auf 0x02 geändert.

Jetzt ist alles schick.

Vielen Dank für deine Unterstützung.

Viele Grüße,
Thomas

Re: SSD1306 OLED 128x32 Bit Anzeigefehler

#6

Ungelesener Beitrag Nico » 20. Dez 2019, 19:23

Super, freut mich! Aber die Änderung (SSD1306_SETMULTIPLEX) ist auch drin?

Gruß Nico

Re: SSD1306 OLED 128x32 Bit Anzeigefehler

#7

Ungelesener Beitrag Thomas81 » 20. Dez 2019, 22:57

Hallo Nico,

Ja, die Änderung ist auch drinne.

Gruß,
Thomas

Re: SSD1306 OLED 128x32 Bit Anzeigefehler

#8

Ungelesener Beitrag Thomas81 » 21. Dez 2019, 13:37

Hallo Nico,

Ich habe noch eine Frage:

Wie kann ich denn in der Funktion fb_draw_string() den Wert einer Variablen anzeigen lassen? Ich kenne das mit %d in der printf Funktion bei Dot Matrix Displays. Ich frage mich gerade, wie das hier funktioniert..

Danke.

Gruß,
Thomas

Re: SSD1306 OLED 128x32 Bit Anzeigefehler

#9

Ungelesener Beitrag Nico » 22. Dez 2019, 10:59

Hi Thomas,

das Nutzen von Dingen wie %d (und ähnliche) ist speziell für z.B. printf() implementiert (und frisst somit natürlich auch entsprechend Speicher).
Die fb_draw_string() hat für diese Anwendungsfälle keine Logik implementiert, sprich, das Nutzen dieser Sequenzen (%d, %f ..) wird nicht unterstützt.

Einfache Möglichkeit wäre, dass du dir eine zusätzliche Hilfsfunktion schreibst (gibt es auch schon zu Hauf fertig im Netz - Suchbegriff z.B. itoa() für Integer to ASCII), die dir eine Zahl mit definiertem Typ (z.B. unt16_6) in einen String umsetzen kann. Diesen kannst du dann wiederum mit fb_draw_string() darstellen.

Gruß Nico

Re: SSD1306 OLED 128x32 Bit Anzeigefehler

#10

Ungelesener Beitrag Thomas81 » 22. Dez 2019, 13:05

Hallo Nico,

Ich habe das Thema gestern Abend geklärt, jetzt läuft es, mit printf in einen Text Buffer, dann, wie von dir beschrieben, ausgeben. Läuft soweit gut.

Das hier ist mein erstes Projekt mit dem XC8, irgendwie war das Leben mit dem C18 Compiler einfacher... Naja, irgendwann muss man ja umsteigen.

Danke für deine Hilfe.

Gruß,
Thomas

Re: SSD1306 OLED 128x32 Bit Anzeigefehler

#11

Ungelesener Beitrag Nico » 22. Dez 2019, 14:14

[*]Der Mensch ist ein Gewohnheitstier. Du wirst dich auch irgendwann an den XC8 gewöhnt haben ;-)

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag
  • Neuer Beitrag Vorstellung 8-Bit Pic treiber für SK6812RBGW
    von ÜberDaniel » 5. Dez 2019, 21:00 » in Projekte und Code
    8 Antworten
    1798 Zugriffe
    Letzter Beitrag von ÜberDaniel
    13. Dez 2019, 13:35

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast