Go Down

Topic: ePaper-Display für Arduino Mega (Read 1 time) previous topic - next topic

postmaster-ino

#45
Jun 12, 2020, 07:33 pm Last Edit: Jun 12, 2020, 08:55 pm by postmaster-ino
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 ...
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

gregorss

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
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

Apollo_M

Also irgendwie will da grad gar nichts klappen.

Hier ist der Beispielcode von dem Shield:
Code: [Select]
#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:
Code: [Select]
/**
 *  @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

wno158

#48
Jun 14, 2020, 02:31 pm Last Edit: Jun 14, 2020, 02:32 pm by wno158
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
Gruß Walter

Apollo_M

#49
Jun 14, 2020, 02:40 pm Last Edit: Jun 14, 2020, 02:53 pm by Apollo_M
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.

Apollo_M

#50
Jun 14, 2020, 02:51 pm Last Edit: Jun 25, 2020, 08:09 pm by Apollo_M
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.

wno158

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:
Code: [Select]
   DelayMs(100);
    WaitUntilIdle();

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

wno158

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.
Gruß Walter

Apollo_M

Ja, die Baudraten stimmen überein :)

wno158

#54
Jun 14, 2020, 03:19 pm Last Edit: Jun 14, 2020, 03:22 pm by wno158
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:
Code: [Select]
UBYTE DEV_Module_Init(void)
{
...    
    //set Serial
    Serial.begin(115200);
...
}


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

Apollo_M

#55
Jun 14, 2020, 03:29 pm Last Edit: Jun 14, 2020, 03:32 pm by Apollo_M
Okay, also das ist jetzt im Moment der Code, den ich versuche, zum Laufen zu bringen:
Code: [Select]
#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.

Apollo_M

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

wno158

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.


Code: [Select]

  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 :)
Gruß Walter

Apollo_M

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?

Apollo_M

#59
Jun 14, 2020, 04:42 pm Last Edit: Jun 14, 2020, 06:21 pm by Apollo_M
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.

Go Up