OLED 1306 128x64 Display an ESP32-WROOM board

OP #7607036
Lesenswert?

Habe hier mit der Darstellung auf einem OLED Display Probleme, wenn ich es mit einer Demo-App ssd13ß6_128x64_i2c (Beispielprogramm aus der AdaFruit SSD1306 Library) auf einem ESP32-WROOM Board laufen lasse.

Mit einem STM32F103 (Blue Pill) habe ich die Funktion parallel dazu heute noch mal verifiziert. Das allerdings mit einem anderen Treiber.

Auch schon 2k2 Pullup Widerstände an SCLK und SDA probiert. 3,3V liegen an Vcc des Displays an.

Sind aus Versehen zwei gleiche Anhänge hochgeladen worden. Weiß nicht, wie und ob man die doppelten löschen kann.

Angehängte Dateien:
OP #7607196
Lesenswert?

Steve van de Grens schrieb:

Mache mal einen Gegentest mit http://stefanfrings.de/arduino_oled/index.html

Wenn es damit geht, ist die Hardware wohl in Ordnung. Ich denke, diese Erkenntnis wäre hilfreich, auch wenn du weiterhin die Adafruit Bibliothek nutzen willst.

Abgesehen davon, daß es bei der jüngsten Version zeilenweise einen Versatz gibt, so daß es kein bündiges Bild ergibt, konnte ich eine ältere Version von OLED.zip finden, die ich früher mal gespeichert hatte. Da mußte ich noch in der ::display() Methode die 0x00 in 0x02 ändern und dann ergab sich ein vernünftiges Bild. In der Demo wird allerdings bei der Demonstration des horizontalen Scrollings der unterstrichene "Hello" Text ein paar Pixel zu hoch abgeschnitten und es scrollt dann noch ein bißchen "Müll" mit, aber im Prinzip kann ich das evtl. sogar nutzen oder ich muß den Code in C überführen.

Die nachfolgende Version von ::display benutze ich jetzt:

1
void OLED::display()
2
{
3
    size_t index = 0;
4
    for (uint_fast8_t page = 0; page < pages; page++)
5
    {
6
        // Set memory address to fill
7
        i2c.beginTransmission(i2c_address);
8
        i2c.write(0x00); // command
9
        if (isSH1106)
10
        {
11
            i2c.write(0xB0 + page); // set page
12
            i2c.write(0x02); // lower columns address =0 << hier 02 statt 00
13
            i2c.write(0x10); // upper columns address =0
14
        }
15
        else
16
        {
17
            i2c.write(0xB0 + page); // set page
18
            i2c.write(0x21); // column address
19
            i2c.write(0x00); // first column =0
20
            i2c.write(width - 1); // last column
21
        }
22
        i2c.endTransmission();
23

24
        // send one page of buffer to the display
25
        i2c.beginTransmission(i2c_address);
26
        i2c.write(0x40); // data
27
        for (uint_fast8_t column = 0; column < width; column++)
28
        {
29
            // Split the transaction into chunks of 32 bytes because that is a limitation of Arduino
30
            if (column>0 && (column % 31 == 0) )
31
            {
32
                i2c.endTransmission();
33
                i2c.beginTransmission(i2c_address);
34
                i2c.write(0x40); // data              
35
            }
36
            
37
            i2c.write(buffer[index++]);
38
        }
39
        i2c.endTransmission();
40
        yield(); // to avoid that the watchdog triggers
41
    }
42
}
Angehängte Dateien:
Gast #7607292
Lesenswert?

Das Problem ist, dass es die Displays nicht nur mit unterschiedlicher Anzahl von Zeilen und Spalten gibt, sondern dass deren Zuordnung zum steuernden Chip (befindet sich auf dem Flachkabel) manchmal vom Standard abweicht. Wenn man das dann auch noch ohne passendes Datenblatt gekauft hat, ist die "trial-and-error" Methode angesagt.

Der Test hat dennoch gebracht, was ich beabsichtigt hatte. Du weißt nun, dass die Hardware funktionsfähig ist. Die Fehlersuche beschränkt sich damit auf die Software.

OP #7607305
Lesenswert?

J. S. schrieb:

Na vielleicht funktionierte es nicht weil es ein SH1106 ist statt SD1306.

Das war's vermutlich. Hatte mich nur irritieren lassen, da ich in einem früheren Projekt (STM32) ein Paket benutzt hatte, das ssd1306.c hieß (* original author: Tilen Majerletilen@xxxxx.eu

  • modification for STM32f10x: Alexander Lutsaixxlyra@xxxxx) Allerdings scrollt da immer noch ein Streifen im oberen Bereich während die Adafruit Demo läuft. Der stammt von der zuvor geflashten OLED app (stefanfrings.de), weil der flash gerade in dem Moment passierte, als die App den Scrollmode gesetzt hatte. Die Adafruit Demo setzt den Modus offenbar nicht zurück.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren