SSD1803 mit 16x2 und zusätzlichen darstellbaren elementen

Hallo Leute.
Die Tage flog mir ein I2C Display zu.
Platine sauber beschriftet daher war das verbinden mit dem esp8266 schnell erledigt.

Dümmste Idee zuerst, also alle libs die ich zum Thema I2C und display finden konnte heruntergeladen und getestet.

Bei einer hatte ich zumindest einen Teilerfolg: GitHub - sstaub/SSD1803A_I2C: Arduino LCD library for EA DOGM204, DOGS164 and DOGS104 with SSD1803A controller over I2C

Allerdings mit der adresse 0x3E. (i2c scanner)

Die Initialisierung funktioniert, schreiben in den unteren beiden Zeilen auch. Wenn auch nicht fehlerfrei.
Aber wie ich die oberen Elemente erreichen kann, keine Ahnung.

Vielleicht Kennt jemand ähnliche displays oder kann mir auf die Sprünge helfen wie ich das herausfinden kann.

Vielen Dank schon mal für alle tipps.

Hallo,
hat das Teil keine Bezeichnung auf der Rückseite ?
Mach doch mal davon ein Foto.

Nichts wirklich verwertbares.

Und auch darunter usw..

ohne Datenblatt wird das wohl eher aussichtslos, da du nicht weisst, was du an das Display für Kommandos senden musst um den oberen Teil zu steuern. Gibt aber doch ganz günstige Displays in allen verschiedenen Grössen, von 0.96" Oled bis 7" TFT mit Touch (letzteres kostet in den USA bestellt um die 45$. ersteres ein paar Taler -> 5stk auf amazon 21€)

Ok, in der Tat kann man mit den Bezeichnungen nicht viel anfangen.

ich würde einfach mal anfangen in zwei For schleifen jede Zeile, jedes Zeichen zu schicken.

void locate(uint8_t row, uint8_t column);

auf der Seriellen mitschreiben wo du bist ...
zuächst mal nur 0 und 255,
wenns nicht reicht, jedes zeichen von 0 - 255
dann wird sich schon irgendwann mal was tun...

So weit so gut, wenn ich das richtig verstehe meins du so etwas wie ich bereits probiert habe.

Nur ohne schleife.

Ich kann 15 von 16 mögliche Zeichen schreiben, in den beiden Textzeilen 0 und 2.

Ich versuche jetzt mal die Umsetzung mit der schleife.

Tja, ich weiß nicht mehr wirklich weiter.

Ich hab jetzt so viel durchprobiert das es mich mehr verwirrt als mir nutzt.

Die obere Reihe Zeichen ist für mich nicht erreichbar.

a) Zeig mal den Sketch mit der Testausgabe auf 0 und 2 UND ein Bild was diese Testausgabe zeigt.
b) Woher ist das Display? Produktlink, Datenblatt...
c) mit welchen Display IDs (DOGM204, DOGS164, DOGS104) hast du probiert, welche funktionieren, welche nicht?

Da das weder ein DOHM204, DOGS164 noch DOGS104 Display ist, sondern irgend etwas anderes, wird es sehr wahrscheinlich keine Methoden in der Software geben, die es erlaubt, die oberen Elemente zu steuern....

Darum denke ich, dass @skippolino recht mit seiner Aussage hat.

Das Display hab ich entsorgt, bringt mir nicht viel es weiter rum liegen zu haben.

Es ist die SSD1803A_I2C library. Initialisierung für DOGM204, Adresse 0x3E.
Alles andere als DOGM204 endet mit blankem Display.

Immerhin, ich hab mehr eigenständig geschafft, als Anfänger als ich erwartet hatte. Ein unbekanntes Display, wenn auch nur halb anzusteuern.

Alternativ hab ich jetzt ein 2,4 Zoll Farbdisplay mit parallelschnitstelle und Touch (das komische Ding das sich die Pins mit dem Display teilt und dem SD slot über SPI) nach einigem gefummel zum laufen bekommen.

Wenn ich das jetzt mit dem 3,5 rpi Display schaffen würde wäre noch besser, ich glaube ja ich hab dauernd das falsche pinout.

:slight_smile:

Danke für eure Hilfe so weit. Aber 14 tage+ sind lang genug zum testen.

Wenns ein SSD1803A ist, würde ich mal das probieren:

uint8_t buf[16];

for(int x = 0; x<sizeof(buf); x++){
	buf[x] = 0xff;
}

lcd.sendCommand(COMMAND_8BIT_4LINES_RE0_IS1);
lcd.sendCommand(0x40);
lcd.sendData(buf, sizeof(buf));
lcd.finishCommand();

Musst dazu ein wenig die Library patchen, damit sendCommand() und co nicht mehr private sondern public sind.

Ich schau später mal ob ich es in der kleinen Schrottkiste wieder finde. Ansonsten war es in der großen Kiste, die ist gestern beim Schrott gelandet.

Reicht es in der .h in Zeile 210 das private: zu entfernen?

Wie gesagt, Anfänger.

Glück gehabt, display ist auch noch da.

Der Block davor ist public. Also reicht das entfernen.

1 Like

Danke. :slight_smile:

Der nimmt das siezof(buf) nicht an.

No Matching function, sendData darf nur eine übergebenen variable haben...

ich hab das ganze nun so umgebaut:

#include <Arduino.h>
#include <SSD1803A_I2C.h>

const uint8_t i2caddr = 0x3E;
const uint8_t resetPin = 3;

SSD1803A_I2C lcd(i2caddr, resetPin);

void setup() {
   lcd.begin(DOGM204);
   lcd.display(DISPLAY_OFF);
   delay(10);
   lcd.display(DISPLAY_ON);
   uint8_t buf[16];
lcd.sendCommand(COMMAND_8BIT_4LINES_RE0_IS1);
lcd.sendCommand(0x40);
for(int x = 0; x<sizeof(buf); x++){
 buf[x] = 0xff;
 lcd.sendData(buf[x]);
}

lcd.finishCommand();
}
loop(){}

leider zeigt das display so überhautp nichts an.

Fehler gefunden.

der obrige code erzgeut diese bild:

Aber, das bekomme ich auch wenn ich nur die initialisierung drin lasse. und nichts weiter mache.

zum vergleich:

// example for DOGM204
#include <Arduino.h>
#include <SSD1803A_I2C.h>

const uint8_t i2caddr = 0x3E;
const uint8_t resetPin = 3;

SSD1803A_I2C lcd(i2caddr, resetPin);

void setup() {
   lcd.begin(DOGM204);
   lcd.display(DISPLAY_OFF);
   delay(10);
   lcd.display(DISPLAY_ON);
   /*uint8_t buf[16];
lcd.sendCommand(COMMAND_8BIT_4LINES_RE0_IS1);
lcd.sendCommand(0x40);
for(int x = 0; x<sizeof(buf); x++){
 buf[x] = 0xff;
 lcd.sendData(buf[x]);
}

lcd.finishCommand();
*/
}

void loop() {
    lcd.display(CONTRAST,12);
    lcd.home();
    lcd.locate(0,0); 
    lcd.print("0123456789012345");
    lcd.locate(2,0);
    lcd.print("abcdefghijklmnop");
    
}

Ups... sendBuffer...

Hmm... vielleicht ist es an der Stelle doch nicht kompatibel zum SSD1803A.

Vielleicht mal anstatt COMMAND_8BIT_4LINES_RE0_IS1 mal COMMAND_8BIT_4LINES_RE1_IS0 testen.