ePaper-Display für Arduino Mega

Apollo_M:
Alles klar, ich probier dann mal rum wenn alles geliefert wurde.

Und genau, das mit den 3.3V war mal ein Thema, da ich mir jetzt aber doch noch einen UNO angeschafft habe, sollte das schon mal kein Problem sein :slight_smile:

Wenn ich irgendwo hänge, melde ich mich nochmal :slight_smile:

Tu das. Eigne Dir vor allem ein paar Grundlagen an. Darum kommst Du eh nicht herum - und sooo viel ist es zunächst auch nicht. Immerhin ist Software-Engineering die einzige Ingenieurs-Disziplin, die sich nicht mit physikalischen Gesetzen herumschlagen muss :slight_smile:
Und wenn Du erst mal das Ohmsche Gesetz und den Einsatz eines Transistors als Schalter verinnerlicht hast, bis Du aus dem Gröbsten raus.

Hartnäckigkeit rulez, gell.

Gruß

Gregor

Erstes kleines Problem: Display und Shield wurde geliefert aber das Shield deckt ja alle Pins ab, die ich aber noch brauche. Was kann ich jetzt machen? Ich schätze, ich kann das Shield auf eine Lochrasterplatine packen und dann die Anschlüsse, die hier auf den Seiten 2 und 3 gelistet sind, entsprechend verbinden oder?

Apollo_M:
Erstes kleines Problem: Display und Shield wurde geliefert aber das Shield deckt ja alle Pins ab, die ich aber noch brauche. Was kann ich jetzt machen? Ich schätze, ich kann das Shield auf eine Lochrasterplatine packen und dann die Anschlüsse, die hier auf den Seiten 2 und 3 gelistet sind, entsprechend verbinden oder?

Die Shields, die ich kenne, sind stapelbar. Die haben spezielle Buchsenleisten:

Welche Pins benötigst Du denn und wofür? Ich würde die Anschlussdrähte von [wasauchimmer] einfach auf das aufgesteckte Shield löten.

Gruß

Gregor

Hier sieht man die Ober- und Unterseite von dem Shield. Mein Plan wäre jetzt gewesen, das Shield auf eine Lochrasterplatine zu packen und dann von den Anschlüssen, die man auf dem 2. Bild oben sieht, eine Verbindung zu den entsprechenden Arduino-Anschlüssen herzustellen (entsprechend dieser Anleitung). Hier das Bild aus der Anleitung:

Das müsste klappen oder?

Lochrasterplatine funktioniert meist nicht gut, weil D8 - D13 (und folgende) nicht im Raster sind.

Hi

Ich verwende 'baugleiche' zu Diesen:
Uno Proto-Shield
Von diesem Verkäufer habe ich auch schon gekauft (unter Anderem den Typ Shield 'blau' - wenn auch in einer anderen Auktion, wo's die Nummer '2' war ... nachgeschaut) und kann mich bis jetzt zumindest nicht beklagen.

MfG

Edit
... URL-Tags kann halt nicht Jeder ...

Apollo_M:
Das müsste klappen oder?

Nein. Wie uxomm schreibt, liegt ein Teil der Pins nicht im Raster.

Du könntest ein Proto-Shield verwenden, dann hast Du eine „Zwischendecke“.

Gruß

Gregor

Also irgendwie will da grad gar nichts klappen.

Hier ist der Beispielcode von dem Shield:

#include "EPD.h"
#include "GUI_Paint.h"
#include "EPD_SDCard.h"

void setup() {
 DEBUG("7.5inch e-Paper B and C demo\r\n");
 DEV_Module_Init();
  
  EPD_7IN5BC_Init();
  EPD_7IN5BC_Clear();
  DEV_Delay_ms(300);

#if 0
      /*show sd card pic*/
    //1.Initialize the SD card
    SDCard_Init();

    //2.Create a new image cache named IMAGE_BW and fill it with white
    //Draw black picture
    DEBUG("IMAGE_BW\n");
    Paint_NewImage(IMAGE_BW, EPD_7IN5BC_WIDTH, EPD_7IN5BC_HEIGHT, IMAGE_ROTATE_0, IMAGE_COLOR_INVERTED);
    Paint_Clear(WHITE);
    //3.Read BMP pictures into RAM
    SDCard_ReadBMP("7in5b-b.bmp", 0, 0);

    //Draw red picture
    DEBUG("IMAGE_BWR\n");
    Paint_NewImage(IMAGE_BWR, EPD_7IN5BC_WIDTH, EPD_7IN5BC_HEIGHT, IMAGE_ROTATE_0, IMAGE_COLOR_INVERTED);
    Paint_Clear(WHITE);
    SDCard_ReadBMP("7in5b-r.bmp", 0, 0);

    //4.Refresh the picture in RAM to e-Paper
    EPD_7IN5BC_Display();
    DEV_Delay_ms(2000);
#endif

#if 1
    //1.Create a new image cache named IMAGE_BW and fill it with white
    //Draw black picture
    Paint_NewImage(IMAGE_BW, EPD_7IN5BC_WIDTH, EPD_7IN5BC_HEIGHT, IMAGE_ROTATE_0, IMAGE_COLOR_POSITIVE);
    Paint_Clear(WHITE);

    //2.Drawing on the image
    Paint_DrawPoint(25, 50, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
    Paint_DrawPoint(25, 70, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
    Paint_DrawPoint(25, 90, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
    Paint_DrawPoint(25, 110, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT);

    Paint_DrawLine(50, 50, 150, 150, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1);
    Paint_DrawLine(150, 50, 50, 150, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1);
    Paint_DrawLine(100, 200, 100, 300, BLACK, LINE_STYLE_DOTTED, DOT_PIXEL_1X1);
    Paint_DrawLine(50, 250, 150, 250, BLACK, LINE_STYLE_DOTTED, DOT_PIXEL_1X1);

    //Draw red picture
    Paint_NewImage(IMAGE_BWR, EPD_7IN5BC_WIDTH, EPD_7IN5BC_HEIGHT, IMAGE_ROTATE_0, IMAGE_COLOR_POSITIVE);
    Paint_Clear(WHITE);

    Paint_DrawRectangle(50, 50, 150, 150, RED, DRAW_FILL_EMPTY, DOT_PIXEL_1X1);
    Paint_DrawRectangle(200, 50, 300, 150, RED, DRAW_FILL_FULL, DOT_PIXEL_1X1);

    Paint_DrawCircle(100, 250, 50, RED, DRAW_FILL_EMPTY, DOT_PIXEL_1X1);
    Paint_DrawCircle(250, 250, 50, RED, DRAW_FILL_FULL, DOT_PIXEL_1X1);

    Paint_DrawString_EN(10, 310, "hello world", &Font24, WHITE, RED);
    Paint_DrawString_EN(10, 335, "Waveshare Electronics", &Font24, RED, WHITE);

    Paint_DrawNum(10, 360, 123456789, &Font24, RED, WHITE);

    //3.Refresh the picture in RAM to e-Paper
    EPD_7IN5BC_Display();
#endif



  DEV_Delay_ms(4000);
  EPD_7IN5BC_Clear();
  
  EPD_7IN5BC_Sleep();
  DEV_Module_Exit();
}

void loop() {

}

Wenn ich den ausführe, bekomme ich im seriellen Monitor nur umgedrehte Fragezeichen und manchmal auch andere Zeichen angezeigt.

Hier ist der Demo-Code vom Display:

/**
 *  @filename   :   epd7in5-demo.ino
 *  @brief      :   7.5inch e-paper display demo
 *  @author     :   Yehui from Waveshare
 *
 *  Copyright (C) Waveshare     August 25 2017
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documnetation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to  whom the Software is
 * furished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

#include <SPI.h>
#include "epd7in5b.h"
#include "imagedata.h"

void setup() {
  // put your setup code here, to run once:
    Serial.begin(9600);
    Epd epd;
    if (epd.Init() != 0) {
        Serial.print("e-Paper init failed");
        return;
    }
    epd.DisplayFrame(IMAGE_DATA);
}

void loop() {
  // put your main code here, to run repeatedly:

}

Wenn ich den versuche, auszuführen, bekomme ich die Meldung, dass der Sketch zu groß ist und 199% des Programmspeicherplatzes belegt.

Bin grad echt am Verzweifeln und weiß nicht, warum keiner der 2 Demo-Codes klappt.

Könnte mir u. U. jemand weiterhelfen?

Danke schon mal und liebe Grüße

Was den Demo-Code vom Display angeht: Vielleicht.

Ich habe hier ein 4.2" Waveshare e-paper liegen. Da ist vermutlich dieselbe SW dabei wie Du sie hast (etwas älter). Im Pfad für das 7.5" (Waveshare_e-Paper\Waveshare_ePaper_7_5) findet sich:
imagedata.h includiert imagedata.cpp.
Da drin befindet sich ein Array von 30704 Byte Größe (1919 Zeilen mit je 16 Byte). Da ist es kein Wunder, dass Dir das Flash platzt - das Bild ist zu groß.

Gruß Walter

Okay, danke dir. Hast du auch das Shield? Was den Code beim Shield angeht (soweit ich das sehe, kann man ja entweder den oder den Code vom Display nehmen) ist noch eine Sache anzumerken: Ich hab von Waveshare die Info bekommen, dass der UNO (im Gegensatz zum Mega) nur statische Bilder anzeigen kann (also die Zeichenfunktionen gehen wahrscheinlich nicht). Ich habe deshalb testweise aus dem Demo-Code das ganze Drawing-Gedöns rausgenommen aber es klappt trotzdem gar nichts. Ich habe nach "EPD_7IN5BC_Init(); EPD_7IN5BC_Clear();" mal testweise eine Serial.println("Test");-Ausgabe probiert und nicht mal die klappt. Es scheint also so, als würde da beim Initialisieren was nicht funktionieren.

In der Readme bei den Display-Demo-Codes findet sich auch das hier:

Laut der Liste könnte es also Probleme mit der Kombination 7.5 inch-Display + UNO geben. Aber laut Waveshare ist der UNO was statische Bilder angeht kompatibel.

Nein, das Shield habe ich leider nicht.

In epd7in5.cpp (meine Version vom 10.8.2017) finde ich aber am Ende von DisplayFrame bedenklichen Code, der Deine serielle Kommunikation durchaus durcheinanderbringen kann:

   DelayMs(100);
    WaitUntilIdle();

Habe hier nur den EPD-Code für das 4.2"; da ist die Init-Funktion abgesehen von WaitUntilIdle() unaufällig.

Apollo_M:
Wenn ich den ausführe, bekomme ich im seriellen Monitor nur umgedrehte Fragezeichen und manchmal auch andere Zeichen angezeigt.

Der einfachste Fehler in diesem Zusammenhang wäre eine unterschiedlich Baudrate im Serial.begin(BAUD) und in der Einstellung Deines seriellen Monitors.

Das hast Du aber bestimmt schon geprüft, deshalb erwähnte ich es nicht.

Ja, die Baudraten stimmen überein :slight_smile:

Habe mir doch mal den Shield-Code gezogen (es regnet ja).
Deine Baudrate ist 115200 und Du brauchst die serielle Schnittstelle nicht selbst zu initialisieren:

UBYTE DEV_Module_Init(void)
{
...    
    //set Serial
    Serial.begin(115200);
...
}

Nun gut, vielleicht sollte ich noch ergänzen:
Nimm mal den ganzen DEV_ Kram raus; ich glaube nicht, dass Du den für den produktiven Einsatz des Displays brauchst. Dann könnte es besser werden.

Okay, also das ist jetzt im Moment der Code, den ich versuche, zum Laufen zu bringen:

#include "EPD.h"
#include "GUI_Paint.h"
#include "EPD_SDCard.h"

void setup() {

  DEV_Module_Init();
  EPD_7IN5BC_Init();
  EPD_7IN5BC_Clear();
  Serial.println("Test");

  SDCard_Init();

  Paint_NewImage(IMAGE_BW, EPD_7IN5BC_WIDTH, EPD_7IN5BC_HEIGHT, IMAGE_ROTATE_0, IMAGE_COLOR_INVERTED);
  Paint_Clear(WHITE);
  SDCard_ReadBMP("TestImage01.bmp", 0, 0);
  EPD_7IN5BC_Display();
  DEV_Delay_ms(2000);
}

void loop() {
  
}

Aber klappt leider nicht. Das "Test" wird auch nicht ausgegeben. Danke dir übrigens für deine Mühe.

EDIT: Auch ohne das Dev-Zeugs funktioniert es leider nicht.

Kurzes Update: Wenn ich das Dev-Zeugs drinlasse und dann den seriellen Monitor auf 115200 stelle, kommt die Ausgabe: "e-Paper busy".

Ahh - gut. Das ist doch mal ein Anfang.
Wo genau diese Ausgabe herkommt, kannst Du evtl. mit Durchsuchen des ganzen Waveshare-Code rausfinden.

Oder Du gehst schrittweise vor:

  • Nochmal alle HW-Anschlüsse prüfen. Da sind ja lt. Interface-Beschreibung auf der Produktseite etliche Pins vorausgesetzt, incl. CS für SDCard und SPI-RAM.
  • Alle Funktionen auskommentieren, jeweils dahinter eine Testausgabe setzen und dann Stück für Stück vorantasten.
  DEV_Module_Init();
  Serial.println(F("DEV_Module_Init()"));

  // EPD_7IN5BC_Init();
  // Serial.println(F("EPD_7IN5BC_Init()"));
  
  // EPD_7IN5BC_Clear();
  // Serial.println(F("EPD_7IN5BC_Clear()"));
...

Ich gehe jetzt erstmal Kaffee trinken :slight_smile:

Alles klar, ich schau mal, ob sich da was finden lässt. Verbindungen hab ich gecheckt, da müsste alles passen. Was die Pins angeht: Ich hab einfach das Shield huckepack auf den UNO gepackt, da müsste denke ich mal alles passen. Oder muss ich da manuell noch irgendwas ändern?

Update: Sobald ich den Clear-Befehl ausführe, kommt diese busy-Meldung.

Edit: Jetzt war's auch so, dass der Init-Befehl die busy-Meldung gebracht hat. Edit 2: Doch nicht, das war nur, weil ich testweise statt "EPD_7IN5BC_Init();" "EPD_7IN5_Init();" probiert habe.