E-Paper Waveshare 4.2" / Arduino Micro

Hallo zusammen,

ich experimentiere zur Zeit mit einem E-Paper Display. Ich benutze folgende Komponenten und Bibliotheken:

Display: Waveshare 4.2inch e-Paper Module 400x300
µC: Arduino Micro
Bibliothek: Beispielbibliothek von Waveshare

Mein Problem besteht nun darin, dass Symbole, die eine Position x >256 haben nicht mehr dargestellt werden.

// Symbol wird korrekt dargestellt
epd.SetPartialWindow(IMG_WIFI_ON, 200, 50, 24, 24);

// Symbol wird nicht korrekt dargestellt. PartialWindow ist nur 8 Pixel breit.
epd.SetPartialWindow(IMG_WIFI_ON, 264, 100, 24, 24);

Ich stehe auf dem Schlauch und weiß nicht was ich falsch mache.

Hallo,

Eulenspiegel:
Ich stehe auf dem Schlauch und weiß nicht was ich falsch mache.

wirklich helfen kann ich Dir nicht,
void Epd::SetPartialWindow(const unsigned char* buffer_black, int x, int y, int w, int l) {

sieht für mich ok aus.
Das Datenblatt des Displays durchzukramen, ob bei der Datenübergabe für
SendCommand(PARTIAL_WINDOW);
was falsch läuft habe ich im Moment nicht die Zeit und auch kein derartiges Display zur Hand.

Was passiert denn? Einfach keine Anzeige? Dein Zeiger IMG_WIFI_ON auf das Image ist aber ok?

Gruß aus Berlin
Michael

Die Breite des Fensters (PartialWindow) beträgt dann nur noch 8 Pixel. Es ist egal welche Breite ich angebe.

Habe mal ein Bild vom Display gemacht

Hallo,

Eulenspiegel:
Die Breite des Fensters (PartialWindow) beträgt dann nur noch 8 Pixel. Es ist egal welche Breite ich angebe.

hmmm, sieht mir nach einem Fehler in der epd4in2.cpp aus:

void Epd::SetPartialWindow(const unsigned char* buffer_black, int x, int y, int w, int l) {
    SendCommand(PARTIAL_IN);
    SendCommand(PARTIAL_WINDOW);
    SendData(x >> 8);
    SendData(x & 0xf8);     // x should be the multiple of 8, the last 3 bit will always be ignored
    SendData(((x & 0xf8) + w  - 1) >> 8);
    SendData(((x & 0xf8) + w  - 1) | 0x07);
    SendData(y >> 8);        
    SendData(y & 0xff);
    SendData((y + l - 1) >> 8);        
    SendData((y + l - 1) & 0xff);
    SendData(0x01);         // Gates scan both inside and outside of the partial window. (default)

änder mal die Zeilen nach

    SendData(x & 0xf8);     // x should be the multiple of 8, the last 3 bit will always be ignored

so:

    SendData((x + w  - 1) >> 8);
    SendData((x + w  - 1) | 0x07);

Wenn ich das Datenblatt richtig gelesen habe, müssen bei x-Start die unteren 3 Bit 000 werden und bei x-Ende 111. Dann wäre das mit dem &F8 bei der x-Ende falsch.

IDE mal beenden und neu starten und erst dann compilieren, zur Laufzeit sonst bekommt sie die Änderung sonst evtl. nicht mit.

Bin mal gespannt ob ich richtig liege.

Gruß aus Berlin
Michael

Hallo,

erstmal vielen Dank. Ich habe die Änderungen gemacht und es funktioniert :slight_smile: .

Kannst du mir vielleicht noch kurz einen Hinweis geben, wo ich im Datenblatt die Beschreibung finden kann. Würde gerne nachvollziehen, wo der Fehler lag.

Eulenspiegel:
Kannst du mir vielleicht noch kurz einen Hinweis geben, wo ich im Datenblatt die Beschreibung finden kann. Würde gerne nachvollziehen, wo der Fehler lag.

schön, klappt also auf meine alten Tage doch noch mit dem Datenblatt lesen. :wink:

Mein Weg: in epd4in2.h das Display-Kommando für PARTIAL_WINDOW suchen, ist 0x90.
Im Datenblatt nach partial gesucht in der Hoffnung, es heißt dort nicht ganz anders...
Glück gehabt (Zeit gespart): auf Seite 10 unten ist es: Partial Window (PTL) 0x90.
Spaltenüberschriften gesucht und noch kurz über die Bedeutung von - und # in der Tabelle und etwas länger über die beiden Programmzeilen nachgedacht...

Gruß aus Berlin
Michael