Umwidmung elektr. Preisschild zum E-Paper-Display mit 2,9" 128x296

Begonnen von juergs, 17 März 2023, 09:33:54

Vorheriges Thema - Nächstes Thema

juergs

Hallo Zusammen,
ich fand das ePaper-Price-Tag-Thema interessant. 
Allerdings scheute ich den Aufwand, das Ganze über eine ZigBee-/Server-Infrastruktur zu implementieren und wollte
zuerst den "einfachen" Weg mit einem DIY-Interface wählen.

Infos dazu:
https://www.youtube.com/watch?v=RUoMztFxUpE
https://forum.arduino.cc/t/waveshare-e-paper-displays-with-spi/467865/13?page=8
http://atcnetz.blogspot.com/2019/02/ausgemusterete-elektronische-e-ink.html
https://www.jsykora.info/2014/06/epd-display-working/
https://github.com/CursedHardware/epd-datasheet
https://cdn.hackaday.io/files/1647727049605248/E-Paper-Rev1%20-%20Schematic.pdf
https://www.zephray.me/post/stm32_epd_calendar/

Interfacing-Schaltplan zum Display:
https://www.wemos.cc/en/latest/_static/files/sch_epd_2.13_v1.0.0.pdf

Bestellung der Platine:
1. Interface-Platine beschaffen. Hier https://jlcpcb.com (Gerber-Dateien im Anhang)
2. EP-Didplay ist mit doppelseitigem Klebeband an der Platine fixiert. Durch sanfte Erwärmung lösen.
3. Die Bauteile zum Display-Displayinterface befinden sich alle auf der Pricetag-Platine
  => Bauteile auslöten und auf der Interface-Platine bestücken.  (Nur für Geübte zu empfehlen, da 0603-SMD)

Inbetriebnahme:
Da ich vorher noch nicht viel mit den ePaper-Displays beschäftigt hatte,
waren natürlich einige Neuland-Hürden zu überwinden und Erfahrungen zu sammeln:
0. Funktioniert die Interface-Platine im Zusammenspiel mit der passenden Firmware?
1. Welcher Controller-Typ hat das Display verbaut?
2. Welche Pin-Konfiguration mit einem Wemos D1 Mini passt?
3. Welche Firmware passt genau für diesen Display-Typ?
4. Bekannte Daten: 2.9'' mit einer Auflösung von 128x296 Pixeln
5. Es gibt tonnenweise ePaper-Firmware, nur welche passt auf meinen speziellen Typ?
       
Info-Quellen:
http://atcnetz.de/downloads/ArduinoPriceTagDemo.rar
https://www.waveshare.com/wiki/2.9inch_e-Paper_Module_(B)
https://cursedhardware.github.io/epd-driver-ic/SSD1680.pdf
https://www.good-display.com/blank15.html
://community.platformio.org/t/epaper-shows-wrong-with-platformio-correct-with-arduino-ide/32462/7

Ausblicke:
https://github.com/atc1441/GxEPD/blob/master/examples/GxEPD_WiFi_Example/GxEPD_WiFi_Example.ino
3D-Druck-Gehäuse: https://hackaday.io/project/189695-triink-low-power-ble-e-paper-clock

Erkenntnisse:
Aaron hat leider keinen Schaltplan zur Interface-Platine veröffentlicht. (Siehe Prinzip-Schaltung. C-Nummerierung nicht identisch zur Platine)
Leider erst nach meinem Zusammenbau bin ich auf passende Einzelheiten zur Interfaceanbindung gestoßen.
Möglicherweise ist bei meinen ePaper-Tags der SSD1608-Controller verbaut.
Die verfügbaren Libs sind wegen der Vielfalt an ePaper-Displaytypen zu sehr aufgeblasen, teilweise mit widersprüchlichen Parameter-Konfigurationen + fest codierten IO-Pins etc.
Die Library GxEPD mit  GxGDEW029Z10-Patch zeigt bei meinem Display keine Wirkung.
Epaper-Displays haben begrenzte Schreib-Zugriffs-Zyklen-Anzahl!
Waveform Look Up Table(LUT)


Firmware:
Die Firmware "GDEY029T94_Arduino" war die erste, die ansatzweise Ergebnisse erzielte, allerdings nicht 100%ig.
Adafruit_BusIO + Adafruit_EPD erzielten bessere Ergebnisse, allerdings ist das Rot-Ergebnis noch nicht 100% aber ok.
Diese Libs gehen von zusätzlichem verbauten SRAM aus. In diesem Interface nicht, deshalb SRAM_CS auf -1 setzen.
Da ist noch etwas F&E mit Parameter-Tuning erforderlich.  :D

Aufbau-Details:
R1 - 10K
R2 - 3 Ohm
si1304bd_N-channel_30V_Mosfet
MBR0530T1-D_Schottky Power Rectifier_Diode
24 Pin 0.5mm Pitch Top Contact ZIF Connector,FPC Connector

Implementierung mit Wemos D1 Mini:
1. Verdrahtung:
Zitat3V3 
GND
DC - D2 = GPIO4 = 4  (Alternativ, abweichend vom default )
BUSY - D1 = GPIO5 = 5
MOSI - D7 =GPIO13 = 13
CLK - D5 = GPIO14 = 14
CS - D8 = GPIO15 = 15
RST - D4 = GPIO2 = 2

Im Moment so verdrahtet, muss noch klären, ob notwendig. War empfolen worden, wegen Reset-Problemen :
 4K7 PullUp auf RST
 4K7 PullDown auf D8

//---IO settings
int BUSY_Pin  = D1;
int RES_Pin   = D4;
int DC_Pin    = D2;
int CS_Pin    = D8;

//--- using Wemos D1 mini, with alternative PIN-settings !!! Having Boot-Problems with default settings
//--- using pullup on RESET
//--- using pulldown on D8 ( = GPIO15 = CS ! )
#define EPD_DC      4   // D2 can be any pin, but required! default is GPIUO0 = D3
#define EPD_CS      15  // D8 can be any pin, but required!
#define EPD_BUSY    5   // D1 can set to -1 to not use a pin (will wait a fixed delay) default is GPIO4 = D2
#define EPD_RESET   2   // D4 can set to -1 and share with chip Reset (can't deep sleep)
#define SRAM_CS     -1  // NC can set to -1 to not use a pin (uses a lot of RAM!)   see comment above, having no external SRAM

; PlatformIO Project Configuration File
; https://docs.platformio.org/page/projectconf.html

[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino

upload_speed              = 921600
upload_port               = COM8
monitor_speed             = 115200
monitor_port              = COM8 

lib_deps =
  # RECOMMENDED
  # Accept new functionality in a backwards compatible manner and patches
  adafruit/Adafruit BusIO @ ^1.14.1
  # RECOMMENDED
  # Accept new functionality in a backwards compatible manner and patches
  adafruit/Adafruit EPD @ ^4.5.1
  # RECOMMENDED
  # Accept new functionality in a backwards compatible manner and patches
  adafruit/Adafruit GFX Library @ ^1.11.5

juergs

Bei dem Display handelt es sich um ein GDEH029Z92, welches sich mit den Parametern der angehängten Datei betreiben lässt.
:)
Doku + Libs

Die Demo lädt aber nur 2 Bilder ins EPD-Ram. Keine besonders weiterführenden Infos  zu erweiterten Funktionen ... ;-(

/**
  *  there are 2 memory areas embedded in the e-paper display
  *  and once the display is refreshed, the memory area will be auto-toggled,
  *  i.e. the next action of SetFrameMemory will set the other memory area
  *  therefore you have to set the frame memory and refresh the display twice.
  * When the electronic paper is refreshed in full screen, the picture flicker is a normal phenomenon,
  * and the main function is to clear the display afterimage in the previous picture.
  * When the local refresh is performed, the screen does not flash.*/
*/

juergs

Mein bescheidener Versuch, etwas mehr Funktionalität in eine eigene Library zu verfrachten.
Sie ist erst mal als Basis für eigene Experimente gedacht. Sicherlich nicht vollständig und bietet Verbesserungspotenzial.

Der Code ist aus verschiedensten Demos zusammengetragen und noch rel. unaufgeräumt. Sorry dafür.
Allerdings bietet sie für das von mir verwendete Display mehr Funktionen als andere Libs  ;)

Es ist ein nicht unbeträchliches Unterfagen aus den verfügbaren Informationsfetzen ein funktionsfähiges Code-Gerüst zusammenzustellen.

Das ESP8266-PlatformIo-Projekt, als Basis für eigene Experimente, liegt in meinem github-repository

Noch offene Fragen + Todos:

/edit - ChatGPT weiß es :
LUT stands for "Look-Up Table". It is a load waveform file that defines the voltage waveform at the electrodes (the so-called waveform) of an e-paper display. The LUTs are structured similarly, but LUT_FOR_VCOM takes a special position and is 44 bytes long. The other (source) LUTs are each 42 bytes long and are encoded as follows
https://www.mikrocontroller.net/topic/455157

E-paper hacking: fastest possible refresh rate


Meß-Clips