HB-Dis-EP-42BW - 4.2" ePaper Display

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Benutzeravatar
AndreO
Beiträge: 200
Registriert: 24.09.2013, 22:11
Wohnort: Die Rhön is schön :-)

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von AndreO » 30.03.2021, 21:12

Hallo!

danke für Eure Hinweise!!!

Naja, für das 7,5 Zoll Display gibts noch kein passendes Script für 3-Farbig. Ich ging davon aus, dass wenn ich das Skript für zweifarbig nehme, dass es dann halt "nur" schwarz/weiß ist aber dennoch was anzeigt? Wenn das 3-farbige Display anders anzusprechen ist, ist vermutlich das das Problem. Dann muss ich mich in die für mich noch fremde Sprache eindenken und schauen, ob ich das auf 3.farbig angepasst bekomme :-)

Ich habe heute mal ein 4,2Zoll-3-farbiges Display bestellt (wollte ich sowieso auch haben). Dann kann ich damit mal testen, ob meine Platine damit funktioniert. Super zu wissen, dass die Blinkreihenfolge schonmal passt.

Im Skript habe ich nur eie Zeile "einkommentiert", wie ich es hier gelb markiert habe. Sonst habe ich nichts verändert und dachte, dass das dann funktionieren sollte.....aber dem ist wohl nicht so......

Code.JPG
Viele Grüße,

André
piVCCU auf RaspberryPi3 (mit Funkmodul), CUL-Stick, 95 wireless Sensoren + Aktoren, 2 FS20-Sensoren + Aktoren

t0mk
Beiträge: 154
Registriert: 08.08.2018, 20:13
Hat sich bedankt: 5 Mal
Danksagung erhalten: 16 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von t0mk » 30.03.2021, 22:26

AndreO hat geschrieben:
30.03.2021, 21:12
Naja, für das 7,5 Zoll Display gibts noch kein passendes Script für 3-Farbig. Ich ging davon aus, dass wenn ich das Skript für zweifarbig nehme, dass es dann halt "nur" schwarz/weiß ist aber dennoch was anzeigt? Wenn das 3-farbige Display anders anzusprechen ist, ist vermutlich das das Problem. Dann muss ich mich in die für mich noch fremde Sprache eindenken und schauen, ob ich das auf 3.farbig angepasst bekomme :-)
Ich musste damals den Sketch an eine andere Auflösung anpassen (800x480 statt 640x384, aber schwarz-weiß). Dachte auch erst naiv, naja, dann nimmt das Bild halt nicht die ganze Fläche ein. Der Versuch scheiterte aber, die Lösung war:
Asselhead hat geschrieben:
07.09.2020, 20:57
In diesem musst Du für das 800x480 Pixel Display noch folgendes ändern:

Überall da, wo GDEW075T8 auftaucht, muss du dieses mit GDEW075T7 ersetzen, damit die Library weiß, dass Du nicht das 640x384, sondern das 800x480 Display verwendest.
Ich musste zwar anschließend noch ein paar mehr Sachen ändern, aber das war dann schon Kosmetik.

In Deinem Fall müsstest Du wohl mindestens alle Vorkommen von "GDEW075T8" durch "GDEW075Z09" (*) ersetzen. Ob das schon reicht, kann ich Dir nicht sagen, dafür sind meine Kenntnisse zu gering, aber einen Versuch wäre es wert.

(*) Ohne Gewähr, bin mir nicht ganz sicher, ob "GDEW075Z09" die richtige Kennung für Dein Modell ist, bin durch diese Liste darauf gekommen:
https://github.com/ZinggJM/GxEPD

Nachtrag:
Im 4.2er Sketch gibt es ja Unterstützung für die 3-Farb-Version, schau mal, wie viel sich davon übertragen lässt

chka
Beiträge: 2163
Registriert: 13.02.2012, 20:23
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 98 Mal
Danksagung erhalten: 58 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von chka » 31.03.2021, 15:21

mein problem mit den Batterien wird immer krasser, die ersten Batterien liefen 3 bis 4 Monate die letzten habe ich nach 7 Tagen wieder wechseln müssen. wie kann das sein das ohne jegliche örtliche Änderung und Sendeintervall hier so eine großer unterschied ist. klar die Batterien haben eine Lagerzeit gehabt aber so krass?

3,2 V an den Strompfs finde ich eigentlich ok
Debmatic - CuL V2 868mHz- CuxDemon - PioTek Tracker - Velux und Somfy Anbindung- io.Broker aufm ESX 6.7
Keine Support PNs Danke!

Benutzeravatar
AndreO
Beiträge: 200
Registriert: 24.09.2013, 22:11
Wohnort: Die Rhön is schön :-)

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von AndreO » 31.03.2021, 15:51

Hallo!

das Austauschen von GDEW075T8 gegen GDEW075T7 hab ich gemacht. Leider ohne Erfolg. Das Display macht einfach gar nix :-(
Ich habe heute nochmal von vorn gestartet. Mit 4,2'' b/w/r-display und hab auch die Arduino IDE nochmal neu installiert und eingerichtet.

Gleich vorab......erfolglos. Wieder blinkt die LED wie schonmal beschrieben, aber das Display bleibt aus. Ein Knopfdruck auf den Config-Knopf bringt die LED nicht zu weiteren Aktionen :-(
IMG_0239.jpg
Mir sind da ein paar DInge aufgefallen. Bei den Bibliotheken muss einerseits die Adafruid_BusIO eingelesen werden und auch die Projektdatei HB-Dis-EP-42BW-master.zip

https://github.com/adafruit/Adafruit_BusIO

Nur dann klappts überhaupt mit dem Kompilieren, steht aber irgendwie so nicht in der Anleitung.....hab ich da was übersehen oder falsch interpretiert? Und nach wie vor verweigert die Arduino EDI das Hochladen der hex.Datei. Das ist mir auch echt schleierhaft. Nun hab ich auch einen FTDI-Adapter. Beim Hochladen mit diesem hat er eine ganze Weile hochgeladen und dann abgebrochen. Auch nachdem ich den Flash erst komplett gelöscht und ann nur den Bootloader draufgelden hab. Fehlermeldung nach einigen Minuten "hochladen....": Fehler beim Hochladen :-(

Wenn ich Bootloader und 4,2''-farb-Sketch per Microchip Studio hoclade, bekomme ich folgende Ausgabe per "seriellem Monitor" der Arduino EDI:

Code: Alles auswählen

AskSin++ v5.0.0 (Mar 31 2021 15:06:58)
Address Space: 32 - 852
CC init1
Error at 00 expected: 2E read: 00
Error at 02 expected: 06 read: 00
Error at 03 expected: 0D read: 00
Error at 04 expected: E9 read: 00
Error at 05 expected: CA read: 00
Error at 07 expected: 0C read: 00
Error at 0B expected: 06 read: 00
Error at 0D expected: 21 read: 00
Error at 0E expected: 65 read: 00
Error at 0F expected: 6A read: 00
Error at 10 expected: C8 read: 00
Error at 11 expected: 93 read: 00
Error at 12 expected: 03 read: 00
Error at 15 expected: 34 read: 00
Error at 17 expected: 03 read: 00
Error at 18 expected: 18 read: 00
Error at 19 expected: 16 read: 00
Error at 1B expected: 43 read: 00
Error at 1E expected: 2F read: 00
Error at 1F expected: 65 read: 00
Error at 20 expected: 78 read: 00
Error at 23 expected: E9 read: 00
Error at 24 expected: 2A read: 00
Error at 25 expected: 1F read: 00
Error at 26 expected: 11 read: 00
Error at 3E expected: 03 read: 00
CC Version: 00
Error at 3E expected: C0 read: 00
 - ready
iVcc: 3264
CONFIG LIST0 CHANGED
lowBat          : 24
critBat         : 22
ledMode         : 1
displayInverting: 0
RefreshWaitTime : 50
PowerUpMode     : 0
PowerUpKey      : 0
wait:1
01 - TEXT1 =                  - TEXT2 =                  - Line  = 0 - Align = 0
02 - TEXT1 =                  - TEXT2 =                  - Line  = 0 - Align = 0
03 - TEXT1 =                  - TEXT2 =                  - Line  = 0 - Align = 0
04 - TEXT1 =                  - TEXT2 =                  - Line  = 0 - Align = 0
05 - TEXT1 =                  - TEXT2 =                  - Line  = 0 - Align = 0
06 - TEXT1 =                  - TEXT2 =                  - Line  = 0 - Align = 0
07 - TEXT1 =                  - TEXT2 =                  - Line  = 0 - Align = 0
08 - TEXT1 =                  - TEXT2 =                  - Line  = 0 - Align = 0
09 - TEXT1 =                  - TEXT2 =                  - Line  = 0 - Align = 0
10 - TEXT1 =                  - TEXT2 =                  - Line  = 0 - Align = 0
ID: F34300  Serial: JPDISEP000
wait:0
Busy Timeout!
Power On : 20001152
Busy Timeout!
drawPaged : 20000632
Busy Timeout!
Power Off : 20000536

Die .ino-Datei sieht so aus:

Code: Alles auswählen

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
// 2018-12-01 jp112sdl Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//- -----------------------------------------------------------------------------------------------------------------------
// ci-test=yes board=1284pSTD aes=no

// use Arduino IDE Board Setting: STANDARD Layout

// define this to read the device id, serial and device type from bootloader section
// #define USE_OTA_BOOTLOADER
// #define USE_HW_SERIAL
// #define NDEBUG
// #define NDISPLAY
#define USE_COLOR

#define BATTERY_MODE

#ifdef BATTERY_MODE
#define USE_WOR
#endif

//////////////////// DISPLAY DEFINITIONS /////////////////////////////////////
#include <GxEPD.h>
#ifdef USE_COLOR
#include <GxGDEW042Z15/GxGDEW042Z15.h>      // 4.2" color
#else
#include <GxGDEW042T2/GxGDEW042T2.h>        // 4.2" b/w
#endif

#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>
#include "U8G2_FONTS_GFX.h"

#define GxRST_PIN  14   // PD6
#define GxBUSY_PIN 11   // PD3
#define GxDC_PIN   12   // PD4
#define GxCS_PIN   18   // PC2

GxIO_Class io(SPI, GxCS_PIN, GxDC_PIN, GxRST_PIN);
GxEPD_Class display(io, GxRST_PIN, GxBUSY_PIN);

U8G2_FONTS_GFX u8g2Fonts(display);
//////////////////////////////////////////////////////////////////////////////

#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>

#include <AskSinPP.h>
#include <LowPower.h>

#include <Register.h>
#include <Remote.h>
#include <MultiChannelDevice.h>

// make compatible with v5.0.0
#ifndef ASKSIN_PLUS_PLUS_VERSION_STR
  #define ASKSIN_PLUS_PLUS_VERSION_STR ASKSIN_PLUS_PLUS_VERSION
#endif

#define CC1101_CS_PIN       4   // PB4
#define CC1101_GDO0_PIN     2   // PB2
#define CC1101_SCK_PIN      7   // PB7
#define CC1101_MOSI_PIN     5   // PB5
#define CC1101_MISO_PIN     6   // PB6
#define CONFIG_BUTTON_PIN  15   // PD7
#define LED_PIN_1           0   // PB0
#define LED_PIN_2           1   // PB1
#define BTN1_PIN            3   // PB3
#define BTN2_PIN           A1   // PA1
#define BTN3_PIN           A2   // PA2
#define BTN4_PIN           A3   // PA3
#define BTN5_PIN           A4   // PA4
#define BTN6_PIN           A5   // PA5
#define BTN7_PIN           A6   // PA6
#define BTN8_PIN           A7   // PA7
#define BTN9_PIN           23   // PC7
#define BTN10_PIN          22   // PC6

#define TEXT_LENGTH        16
#define DISPLAY_LINES      10

#define DISPLAY_ROTATE     3 // 0 = 0° , 1 = 90°, 2 = 180°, 3 = 270°

#define PEERS_PER_CHANNEL   8
#define NUM_CHANNELS        11
#define DEF_LOWBAT_VOLTAGE  24
#define DEF_CRITBAT_VOLTAGE 22

#define MSG_START_KEY     0x02
#define MSG_TEXT_KEY      0x12
#define MSG_ICON_KEY      0x13
#define MSG_COLOR_OFFSET  0x04
#define MSG_CLR_LINE_KEY  0xFE
#define MSG_MIN_LENGTH    13
#define MSG_BUFFER_LENGTH 224
#define MSG_OUTOFHOUSE    0xFD

#include "Icons.h"

// all library classes are placed in the namespace 'as'
using namespace as;

const struct DeviceInfo PROGMEM devinfo = {
  {0xf3, 0x43, 0x00},          // Device ID
  "JPDISEP000",                // Device Serial
#ifdef BATTERY_MODE
  {0xf3, 0x43},                // Device Model
#else
  {0xf3, 0x53},                // Device Model
#endif
  0x11,                        // Firmware Version
  as::DeviceType::Remote,      // Device Type
  {0x01, 0x01}                 // Info Bytes
};

enum Alignments {AlignRight = 0, AlignCenterIconRight = 1, AlignCenterIconLeft = 3, AlignLeft = 2};

typedef struct {
  uint8_t Alignment = AlignRight;
  uint8_t Icon      = 0xff;
  bool IconColored  = false;
  String Text       = "";
  bool TextColored  = false;
  bool showLine     = false;
} DisplayLine;
DisplayLine DisplayLines[DISPLAY_LINES];

String List1Texts[DISPLAY_LINES * 2];

bool runSetup          = true;

/**
   Configure the used hardware
*/
typedef AvrSPI<CC1101_CS_PIN, CC1101_MOSI_PIN, CC1101_MISO_PIN, CC1101_SCK_PIN> SPIType;
typedef Radio<SPIType, CC1101_GDO0_PIN> RadioType;
typedef StatusLed<LED_PIN_1> LedType;

#ifdef BATTERY_MODE
typedef AskSin<LedType, BatterySensor, RadioType> BaseHal;
#else
typedef AskSin<LedType, NoBattery, RadioType> BaseHal;
#endif

class Hal: public BaseHal {
  public:
    void init(const HMID& id) {
      BaseHal::init(id);
#ifdef BATTERY_MODE
      battery.init(seconds2ticks(60UL * 60 * 21), sysclock); //battery measure once an day
      battery.low(DEF_LOWBAT_VOLTAGE);
      battery.critical(DEF_CRITBAT_VOLTAGE);
      activity.stayAwake(seconds2ticks(15));
#endif
    }

    bool runready () {
      return sysclock.runready() || BaseHal::runready();
    }
} hal;


void initDisplay();
void updateDisplay();
void emptyBatteryDisplay();
void outOfHouseDisplay();
class ePaperType : public Alarm {
  class ePaperWorkingLedType : public StatusLed<LED_PIN_2>  {
  private:
    bool enabled;
  public:
    ePaperWorkingLedType () : enabled(true) {}
    virtual ~ePaperWorkingLedType () {}
    void Enabled(bool e) {
      enabled = e;
    }
    bool Enabled() {
      return enabled;
    }
  } workingLed;
private:
  bool                 mUpdateDisplay;
  bool                 shInitDisplay;
  bool                 shOutOfHouseDisplay;
  bool                 inverted;
  bool                 waiting;
  uint16_t             clFG;
  uint16_t             clBG;
public:
  ePaperType () :  Alarm(0), mUpdateDisplay(false), shInitDisplay(false), shOutOfHouseDisplay(false), inverted(false), waiting(false), clFG(GxEPD_BLACK), clBG(GxEPD_WHITE)  {}
  virtual ~ePaperType () {}

  uint16_t ForegroundColor() {
    return clFG;
  }

  void ForegroundColor(uint16_t c) {
    clFG = c;
  }

  uint16_t BackgroundColor() {
    return clBG;
  }

  void BackgroundColor(uint16_t c) {
    clBG = c;
  }

  bool Inverted() {
    return inverted;
  }

  void Inverted(bool i) {
    inverted = i;
  }

  bool showInitDisplay() {
    return shInitDisplay;
  }

  void showInitDisplay(bool s) {
    shInitDisplay = s;
  }

  bool showOutOfHouseDisplay() {
    return shOutOfHouseDisplay;
  }

  void showOutOfHouseDisplay(bool s) {
    shOutOfHouseDisplay = s;
  }

  bool mustUpdateDisplay() {
    return mUpdateDisplay;
  }

  void mustUpdateDisplay(bool m) {
    if (m == true && workingLed.Enabled() == true) workingLed.set(LedStates::pairing);
    mUpdateDisplay = m;
  }

  void init() {
    u8g2Fonts.begin(display);
    display.setRotation(DISPLAY_ROTATE);
    u8g2Fonts.setFontMode(1);
    u8g2Fonts.setFontDirection(0);
    workingLed.init();
  }

  void setWorkingLedEnabled(bool en) {
    workingLed.Enabled(en);
  }

  void setDisplayColors() {
    u8g2Fonts.setForegroundColor(ForegroundColor());
    u8g2Fonts.setBackgroundColor(BackgroundColor());
  }

  void isWaiting(bool w) {
    waiting = w;
    DPRINT("wait:"); DDECLN(waiting);
  }

  bool isWaiting() {
    return waiting;
  }

  void setRefreshAlarm (uint32_t t) {
    isWaiting(true);
    sysclock.cancel(*this);
    Alarm::set(millis2ticks(t));
    sysclock.add(*this);
  }
  virtual void trigger (__attribute__((unused)) AlarmClock& clock) {
    isWaiting(false);
    if (this->mustUpdateDisplay()) {
      this->mustUpdateDisplay(false);
  #ifndef NDISPLAY
      if (workingLed.Enabled() == true) {
        workingLed.set(LedStates::nothing);
        workingLed.ledOn();
      }
      setDisplayColors();
      if (this->showInitDisplay() == true) {
        this->showInitDisplay(false);
        display.drawPaged(initDisplay);
      } else if (this->showOutOfHouseDisplay() == true ) {
          display.drawPaged(outOfHouseDisplay);
          this->showOutOfHouseDisplay(false);
        } else {
          display.drawPaged(updateDisplay);
        }

      workingLed.ledOff();
  #else
      DPRINTLN("UPDATEDISPLAY!");
  #endif
    }
  }
} ePaper;

DEFREGISTER(Reg0, MASTERID_REGS, DREG_TRANSMITTRYMAX, DREG_LEDMODE, DREG_LOWBATLIMIT, 0x06, 0x07, 0x34, 0x35)
class DispList0 : public RegList0<Reg0> {
  public:
    DispList0(uint16_t addr) : RegList0<Reg0>(addr) {}

    bool displayInvertingHb(bool v) const { return this->writeRegister(0x06, 0x01,0,v); }
    bool displayInvertingHb() const { return this->readRegister(0x06, 0x01,0,false); }

    uint8_t displayRefreshWaitTime () const { return this->readRegister(0x07,0); }
    bool displayRefreshWaitTime (uint8_t value) const { return this->writeRegister(0x07,value); }

    uint8_t powerUpMode () const { return this->readRegister(0x34,0x03,0); }
    bool powerUpMode (uint8_t value) const { return this->writeRegister(0x34,0x03,0,value); }

    uint8_t powerUpKey () const { return this->readRegister(0x34,0x0f,2); }
    bool powerUpKey (uint8_t value) const { return this->writeRegister(0x34,0x0f,2,value); }

    uint8_t critBatLimit () const { return this->readRegister(0x35,0); }
    bool critBatLimit (uint8_t value) const { return this->writeRegister(0x35,value); }

    void defaults () {
      clear();
      displayInvertingHb(false);
      ledMode(1);
      transmitDevTryMax(2);
      displayRefreshWaitTime(50);
      powerUpMode(0);
      powerUpKey(0);
#ifdef BATTERY_MODE
      lowBatLimit(DEF_LOWBAT_VOLTAGE);
      critBatLimit(DEF_CRITBAT_VOLTAGE);
#endif
    }
};

DEFREGISTER(DispReg1)
class DispList1 : public RegList1<DispReg1> {
public:
  DispList1 (uint16_t addr) : RegList1<DispReg1>(addr) {}
  void defaults () {
    clear();
  }
};

DEFREGISTER(RemReg1, CREG_AES_ACTIVE, CREG_LONGPRESSTIME ,CREG_DOUBLEPRESSTIME, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x90, 0x91)
class RemList1 : public RegList1<RemReg1> {
  public:
    RemList1 (uint16_t addr) : RegList1<RemReg1>(addr) {}

    bool showLine (uint8_t value) const {
      return this->writeRegister(0x90, 0x01, 0, value & 0xff);
    }
    bool showLine () const {
      return this->readRegister(0x90, 0x01, 0, false);
    }

    bool Alignment (uint8_t value) const {
      return this->writeRegister(0x91, value & 0xff);
    }
    uint8_t Alignment () const {
      return this->readRegister(0x91, 0);
    }

    bool TEXT1 (uint8_t value[TEXT_LENGTH]) const {
      for (int i = 0; i < TEXT_LENGTH; i++) {
        this->writeRegister(0x36 + i, value[i] & 0xff);
      }
      return true;
    }
    String TEXT1 () const {
      String a = "";
      for (int i = 0; i < TEXT_LENGTH; i++) {
        byte b = this->readRegister(0x36 + i, 0x20);
        if (b == 0x00) b = 0x20;
        a += char(b);
      }
      return a;
    }

    bool TEXT2 (uint8_t value[TEXT_LENGTH]) const {
      for (int i = 0; i < TEXT_LENGTH; i++) {
        this->writeRegister(0x46 + i, value[i] & 0xff);
      }
      return true;
    }
    String TEXT2 () const {
      String a = "";
      for (int i = 0; i < TEXT_LENGTH; i++) {
        byte b = this->readRegister(0x46 + i, 0x20);
        if (b == 0x00) b = 0x20;
        a += char(b);
      }
      return a;
    }

    void defaults () {
      clear();
      //aesActive(false);
      longPressTime(1);
      doublePressTime(0);
      uint8_t initValues[TEXT_LENGTH];
      memset(initValues, 0x00, TEXT_LENGTH);
      TEXT1(initValues);
      TEXT2(initValues);
      showLine(false);
      Alignment(AlignRight);
    }
};

class RemChannel : public RemoteChannel<Hal,PEERS_PER_CHANNEL,DispList0, RemList1>  {
public:
  RemChannel () : RemoteChannel() {}
    virtual ~RemChannel () {}
    void configChanged() {
      uint16_t _longpressTime = 300 + (this->getList1().longPressTime() * 100);
      setLongPressTime(millis2ticks(_longpressTime));

      List1Texts[(number() - 1)  * 2] = this->getList1().TEXT1();
      List1Texts[((number() - 1) * 2) + 1] = this->getList1().TEXT2();

      bool somethingChanged = (
                                DisplayLines[(number() - 1)].showLine != this->getList1().showLine() ||
                                DisplayLines[(number() - 1)].Alignment != this->getList1().Alignment()
                              );

      DisplayLines[(number() - 1)].showLine = this->getList1().showLine();
      DisplayLines[(number() - 1)].Alignment = this->getList1().Alignment();
      DPRINT(number() < 10 ? "0":"");DDEC(number()); DPRINT(F(" - TEXT1 = ")); DPRINT(this->getList1().TEXT1());DPRINT(F(" - TEXT2 = ")); DPRINT(this->getList1().TEXT2());DPRINT(F(" - Line  = ")); DDEC(this->getList1().showLine());DPRINT(F(" - Align = ")); DDECLN(this->getList1().Alignment());

      if (!runSetup && somethingChanged) ePaper.mustUpdateDisplay(true);
    }

    uint8_t flags () const {
      return hal.battery.low() ? 0x80 : 0x00;
    }
};

class DispChannel : public RemoteChannel<Hal,PEERS_PER_CHANNEL,DispList0, DispList1>  {
private:
  uint8_t       msgBufferIdx;
  uint8_t       msgBuffer[MSG_BUFFER_LENGTH];
public:
  DispChannel () : RemoteChannel(), msgBufferIdx(0) {}
    virtual ~DispChannel () {}

    void configChanged() { }

    bool validLineCount(){
      uint8_t cnt = 0;
      for (int i = 0; i < msgBufferIdx; i++) {
        if (msgBuffer[i] == AS_ACTION_COMMAND_EOL) cnt++;
      }
      if (cnt != 10) {DPRINT("ERROR: EOL Count = ");DDECLN(cnt);}
      return cnt == DISPLAY_LINES;
    }

    uint8_t resetMessageBuffer() {
      //DPRINTLN("reset msgBuffer");
      msgBufferIdx = 0;
      memset(msgBuffer, 0, sizeof(msgBuffer));
      return msgBufferIdx;
    }

    bool process (const ActionCommandMsg& msg) {
      static bool getText = false;
      static uint8_t currentLine = 0;

      String Text = "";
      for (int i = 0; i < msg.len(); i++) {
        if (msg.value(i) == MSG_START_KEY) {
          currentLine = resetMessageBuffer();
        }

        if (msgBufferIdx < MSG_BUFFER_LENGTH) {
          msgBuffer[msgBufferIdx] = msg.value(i);
          msgBufferIdx++;
        } else {
          currentLine = resetMessageBuffer();
        }
      }

      if (
          msg.eot(AS_ACTION_COMMAND_EOT) &&
          msgBufferIdx >= MSG_MIN_LENGTH &&
          validLineCount() == true &&
          msgBuffer[0] == MSG_START_KEY
          ) {
        DPRINT("RECV: ");
        for (int i = 0; i < msgBufferIdx; i++) {
          DHEX(msgBuffer[i]); DPRINT(" ");

          if (msgBuffer[i] == AS_ACTION_COMMAND_EOL) {
            if (Text != "") DisplayLines[currentLine].Text = Text;
            //DPRINT("EOL DETECTED. currentLine = ");DDECLN(currentLine);
            currentLine++;
            Text = "";
            getText = false;
          }

          if (getText == true) {
            if ((msgBuffer[i] >= 0x20 && msgBuffer[i] < 0x80) || msgBuffer[i] == 0xb0 ) {
              char c = msgBuffer[i];
              Text += c;
            } else if (msgBuffer[i] >= 0x80 && msgBuffer[i] < 0x80 + (DISPLAY_LINES * 2)) {
              uint8_t textNum = msgBuffer[i] - 0x80;
              String fixText = List1Texts[textNum];
              fixText.trim();
              Text += fixText;
              //DPRINTLN(""); DPRINT("USE PRECONF TEXT NUMBER "); DDEC(textNum); DPRINT(" = "); DPRINTLN(List1Texts[textNum]);
            }
          }

          if (msgBuffer[i] == MSG_TEXT_KEY || msgBuffer[i] == (MSG_TEXT_KEY + MSG_COLOR_OFFSET) ) {
            getText = true;
            DisplayLines[currentLine].Icon = 0xff;  //clear icon
#ifdef USE_COLOR
            DisplayLines[currentLine].TextColored = (msgBuffer[i] == (MSG_TEXT_KEY + MSG_COLOR_OFFSET));
#endif
          }

          if (msgBuffer[i] ==  MSG_ICON_KEY || msgBuffer[i] == (MSG_ICON_KEY + MSG_COLOR_OFFSET) ) {
            getText = false;
            uint8_t iconPos = i + 1;
            if (iconPos < MSG_BUFFER_LENGTH) {
              if (msgBuffer[iconPos] >= 0x80) {
                uint8_t iconNumber = msgBuffer[iconPos] - 0x80;
                if (iconNumber < ICON_COUNT) {
                  DisplayLines[currentLine].Icon = iconNumber;
#ifdef USE_COLOR
                  DisplayLines[currentLine].IconColored = msgBuffer[i] == (MSG_ICON_KEY + MSG_COLOR_OFFSET);
#endif
                } else {
                  DPRINT(F("ICON Number out of range. ")); DDECLN(iconNumber);
                }
              }
            }
          }

          if (msgBuffer[i] == MSG_CLR_LINE_KEY) {
            getText = false;
            for (uint8_t i = 0; i < TEXT_LENGTH; i++)
              Text += F(" ");
            DisplayLines[currentLine].Icon = 0xff;
          }
          if (msgBuffer[i] == MSG_OUTOFHOUSE) {
            ePaper.showOutOfHouseDisplay(true);
          }
        }

        DPRINTLN("");

        for (int i = 0; i < DISPLAY_LINES; i++) {
         DPRINT("LINE "); DDEC(i + 1); DPRINT(" ICON_COLOR = "); DDEC(DisplayLines[i].IconColored); DPRINT(" ICON = "); DDEC(DisplayLines[i].Icon); DPRINT(" TEXT_COLOR = "); DPRINT(DisplayLines[i].TextColored); DPRINT(" TEXT = "); DPRINT(DisplayLines[i].Text); DPRINTLN("");
        }
        ePaper.mustUpdateDisplay(true);
      }
      return true;
    }

    bool process (const Message& msg) {
      return process(msg);
    }

    bool process (const RemoteEventMsg& msg) {
      return process(msg);
    }

    uint8_t flags () const {
      return hal.battery.low() ? 0x80 : 0x00;
    }
};

class DisplayDevice : public ChannelDevice<Hal, VirtBaseChannel<Hal, DispList0>, NUM_CHANNELS, DispList0> {
  public:
  VirtChannel<Hal, RemChannel,  DispList0> c[NUM_CHANNELS - 1];
  VirtChannel<Hal, DispChannel, DispList0> d;
  public:
    typedef ChannelDevice<Hal, VirtBaseChannel<Hal, DispList0>, NUM_CHANNELS, DispList0> DeviceType;
    DisplayDevice (const DeviceInfo& info, uint16_t addr) : DeviceType(info, addr) {
      for (uint8_t i = 0; i < NUM_CHANNELS - 1; i++) {
        DeviceType::registerChannel(c[i], i+1);
      }
      DeviceType::registerChannel(d, NUM_CHANNELS);
    }
    virtual ~DisplayDevice () {}

    RemChannel& remChannel (uint8_t num)  {
      return c[num - 1];
    }

    DispChannel& dispChannel ()  {
      return d;
    }

    bool process(Message& msg) {
      HMID devid;
      this->getDeviceID(devid);
      if (msg.to() == devid) {
        uint16_t rtime = this->getList0().displayRefreshWaitTime() * 100;
        ePaper.setRefreshAlarm(rtime);
      }
      return ChannelDevice::process(msg);
    }

    virtual void configChanged () {
      DPRINTLN(F("CONFIG LIST0 CHANGED"));

#ifdef BATTERY_MODE
      uint8_t lowbat = getList0().lowBatLimit();
      uint8_t critbat = getList0().critBatLimit();
      if( lowbat > 0 ) battery().low(lowbat);
      if( critbat > 0 ) battery().critical(critbat);
      DPRINT(F("lowBat          : ")); DDECLN(lowbat);
      DPRINT(F("critBat         : ")); DDECLN(critbat);
#endif

      uint8_t ledmode = this->getList0().ledMode();
      DPRINT(F("ledMode         : ")); DDECLN(ledmode);
      ePaper.setWorkingLedEnabled(ledmode);

      if (this->getList0().displayInvertingHb()) {
        ePaper.ForegroundColor(GxEPD_WHITE);
        ePaper.BackgroundColor(GxEPD_BLACK);
      } else {
        ePaper.ForegroundColor(GxEPD_BLACK);
        ePaper.BackgroundColor(GxEPD_WHITE);
      }
      bool invertChanged = (ePaper.Inverted() != this->getList0().displayInvertingHb());
      ePaper.Inverted(this->getList0().displayInvertingHb());
      DPRINT(F("displayInverting: ")); DDECLN(this->getList0().displayInvertingHb());

      DPRINT(F("RefreshWaitTime : ")); DDECLN(this->getList0().displayRefreshWaitTime());
      DPRINT(F("PowerUpMode     : ")); DDECLN(this->getList0().powerUpMode());
      DPRINT(F("PowerUpKey      : ")); DDECLN(this->getList0().powerUpKey());

      if (this->getList0().masterid().valid() == false || runSetup == true) {
        if (this->getList0().powerUpMode() == 0) {
          ePaper.showInitDisplay(true);
          ePaper.mustUpdateDisplay(true);
          ePaper.setRefreshAlarm(20);
        }
      }

      if (!runSetup && invertChanged) ePaper.mustUpdateDisplay(true);
    }
};
DisplayDevice sdev(devinfo, 0x20);
class ConfBtn : public ConfigButton<DisplayDevice>  {
public:
  ConfBtn (DisplayDevice& i) : ConfigButton(i)  {}
  virtual ~ConfBtn () {}

  virtual void state (uint8_t s) {
    if( s == ButtonType::longreleased ) {
      ePaper.mustUpdateDisplay(true);
      ePaper.setRefreshAlarm(20);
    }
    ConfigButton::state(s);
  }
};
ConfBtn cfgBtn(sdev);

void setup () {
  runSetup = true;
  for (int i = 0; i < DISPLAY_LINES; i++) {
    DisplayLines[i].Icon = 0xff;
    DisplayLines[i].Text = "";
  }

  initIcons();
#ifndef NDISPLAY
  display.init(57600);
#endif

  DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
  sdev.init(hal);
  remoteChannelISR(sdev.remChannel(1),BTN1_PIN);
  remoteChannelISR(sdev.remChannel(2),BTN2_PIN);
  remoteChannelISR(sdev.remChannel(3),BTN3_PIN);
  remoteChannelISR(sdev.remChannel(4),BTN4_PIN);
  remoteChannelISR(sdev.remChannel(5),BTN5_PIN);
  remoteChannelISR(sdev.remChannel(6),BTN6_PIN);
  remoteChannelISR(sdev.remChannel(7),BTN7_PIN);
  remoteChannelISR(sdev.remChannel(8),BTN8_PIN);
  remoteChannelISR(sdev.remChannel(9),BTN9_PIN);
  remoteChannelISR(sdev.remChannel(10),BTN10_PIN);

  buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
  sdev.initDone();
  DDEVINFO(sdev);

#ifndef NDISPLAY
  ePaper.init();
#endif

  uint8_t powerupmode = sdev.getList0().powerUpMode();
  uint8_t powerupkey  = sdev.getList0().powerUpKey();
  if (powerupmode > 0) {
    sdev.remChannel(powerupkey + 1).state(powerupmode == 1 ? Button::released: Button::longreleased);
    sdev.remChannel(powerupkey + 1).state(Button::none);
  } else {
    sdev.dispChannel().changed(true);
  }

  runSetup = false;
}

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if ( worked == false && poll == false ) {
#ifdef BATTERY_MODE
    if (hal.battery.critical()) {
      display.drawPaged(emptyBatteryDisplay);
      hal.activity.sleepForever(hal);
    }
    if (ePaper.isWaiting()) {
      hal.activity.savePower<Idle<>>(hal);
    } else {
      hal.activity.savePower<Sleep<>>(hal);
    }
#else
    hal.activity.savePower<Idle<>>(hal);
#endif
  }
}

uint16_t centerPosition(const char * text) {
  return (display.width() / 2) - (u8g2Fonts.getUTF8Width(text) / 2);
}

void PrintTextWithPosition(String text, int y)
{
  while (text.length()) {
    int pos1 = text.lastIndexOf("@p");
    int pos2 = text.lastIndexOf("@f");
    int pos = max(pos1, pos2);
    if (pos >= 0) {
      String tPos = text.substring(pos+2, pos+4); // Position als String
      String tText = text.substring(pos+4);  // Ausgabetext
      text.remove(pos);
      if (tText.length()) {
        uint16_t iPos = tPos.toInt();  // Position als int
        //Serial.print(iPos); Serial.print(" ");
        //Serial.print(tText); Serial.println(" ");
        uint16_t left = iPos * display.width() / 100u;
        u8g2Fonts.setCursor(left, y);
#ifdef USE_COLOR
        if (pos2 > pos1) {
          u8g2Fonts.setForegroundColor(GxEPD_RED);
        } else {
          u8g2Fonts.setForegroundColor(ePaper.ForegroundColor());
        }
#endif
        u8g2Fonts.print(tText);
      }
    } else {
      break;
    }
  }
#ifdef USE_COLOR
  ePaper.setDisplayColors();    // restore default colors for possible next line in loop updateDisplay()
#endif
}

void updateDisplay() {
  display.fillScreen(ePaper.BackgroundColor());
  u8g2Fonts.setFont(u8g2_font_helvB18_tf);

  for (uint16_t i = 0; i < 10; i++) {
    if (DisplayLines[i].showLine && i < 10) display.drawLine(0, ((i + 1) * 40), display.width(), ((i + 1) * 40), ePaper.ForegroundColor());
    //DisplayLines[i].Text.trim();
    String viewText = DisplayLines[i].Text;
    viewText.replace("{", "ä");
    viewText.replace("|", "ö");
    viewText.replace("}", "ü");
    viewText.replace("[", "Ä");
    viewText.replace("#", "Ö");
    viewText.replace("$", "Ü");
    viewText.replace("~", "ß");
    viewText.replace("'", "=");

    uint8_t icon_number = DisplayLines[i].Icon;
    uint16_t icon_top = (24 - ( Icons[icon_number].height / 2)) + (i * 40) - 4;

    uint16_t leftTextPos = 0xffff;
    uint16_t fontWidth = u8g2Fonts.getUTF8Width(viewText.c_str());

    bool icon_colored = DisplayLines[i].IconColored;

    uint16_t y = i * 40 + 30;

    switch (DisplayLines[i].Alignment) {
      case AlignLeft:
        // TomMajor Erweiterung x-Textposition
        if (viewText.startsWith("@p") || viewText.startsWith("@f")) {
            PrintTextWithPosition(viewText, y);
            continue;
        }
        leftTextPos = 40;
        if (icon_number != 255) display.drawBitmap(Icons[icon_number].Icon, (( 24 - Icons[icon_number].width ) / 2) + 8, icon_top, Icons[icon_number].width, Icons[icon_number].height, icon_colored ? GxEPD_RED : ePaper.ForegroundColor(), icon_colored ? GxEPD::bm_normal | GxEPD::bm_transparent | GxEPD::bm_invert : GxEPD::bm_default);
        break;
      case AlignCenterIconRight:
        leftTextPos = (display.width() / 2) - (fontWidth / 2);
        if (icon_number != 255) {
          leftTextPos -= ((Icons[icon_number].width  / 2) + 4);
          display.drawBitmap(Icons[icon_number].Icon, leftTextPos + u8g2Fonts.getUTF8Width(viewText.c_str()) + 8 + (( 24 - Icons[icon_number].width ) / 2) , icon_top, Icons[icon_number].width, Icons[icon_number].height, icon_colored ? GxEPD_RED : ePaper.ForegroundColor(), icon_colored ? GxEPD::bm_normal | GxEPD::bm_transparent | GxEPD::bm_invert : GxEPD::bm_default);
        }
        break;
      case AlignCenterIconLeft:
        leftTextPos = (display.width() / 2) - (fontWidth / 2);
        if (icon_number != 255) {
          leftTextPos += ((Icons[icon_number].width  / 2) + 4);
          display.drawBitmap(Icons[icon_number].Icon, leftTextPos - Icons[icon_number].width - 8 , icon_top, Icons[icon_number].width, Icons[icon_number].height, icon_colored ? GxEPD_RED : ePaper.ForegroundColor(), icon_colored ? GxEPD::bm_normal | GxEPD::bm_transparent | GxEPD::bm_invert : GxEPD::bm_default);
        }
        break;
      case AlignRight:
      default:
        leftTextPos = display.width() - 40 - fontWidth;
        if (icon_number != 255) display.drawBitmap(Icons[icon_number].Icon, display.width() - 32 + (( 24 - Icons[icon_number].width ) / 2) , icon_top, Icons[icon_number].width, Icons[icon_number].height, icon_colored ? GxEPD_RED : ePaper.ForegroundColor(), icon_colored ? GxEPD::bm_normal | GxEPD::bm_transparent | GxEPD::bm_invert : GxEPD::bm_default);
        break;
    }

    u8g2Fonts.setCursor(leftTextPos, y);


#ifdef USE_COLOR
    if (DisplayLines[i].TextColored == true) u8g2Fonts.setForegroundColor(GxEPD_RED);
#endif

    u8g2Fonts.print(viewText);

#ifdef USE_COLOR
    ePaper.setDisplayColors();
#endif
  }
}

void initDisplay() {
  display.fillScreen(ePaper.BackgroundColor());

  uint8_t serial[11];
  sdev.getDeviceSerial(serial);
  serial[10] = 0;

  #define TOSTRING(x) #x
  #define TOSTR(x) TOSTRING(x)

  const char * title        PROGMEM = "HB-Dis-EP-42BW";
  const char * asksinpp     PROGMEM = "AskSin++";
  const char * version      PROGMEM = "V " ASKSIN_PLUS_PLUS_VERSION_STR;
  const char * compiledMsg  PROGMEM = "compiled on";
  const char * compiledDate PROGMEM = __DATE__ " " __TIME__;
#ifdef USE_COLOR
  const char * pages        PROGMEM = "GxGDEW042Z15_PAGES: " TOSTR(GxGDEW042Z15_PAGES);
#else
  const char * pages        PROGMEM = "GxGDEW042T2_PAGES: " TOSTR(GxGDEW042T2_PAGES);
#endif
  const char * ser                  = (char*)serial;
  const char * nomaster1    PROGMEM = "- keine Zentrale -";
  const char * nomaster2    PROGMEM = "- angelernt -";

  u8g2Fonts.setFont(u8g2_font_helvB24_tf);
  u8g2Fonts.setCursor(centerPosition(title), 95);
#ifdef USE_COLOR
  u8g2Fonts.setForegroundColor(GxEPD_RED);
#endif
  u8g2Fonts.print(title);

  u8g2Fonts.setCursor(centerPosition(asksinpp), 170);
#ifdef USE_COLOR
    u8g2Fonts.setForegroundColor(ePaper.ForegroundColor());
#endif
  u8g2Fonts.print(asksinpp);

  u8g2Fonts.setCursor(centerPosition(version), 210);
  u8g2Fonts.print(version);

  u8g2Fonts.setFont(u8g2_font_helvB12_tf);
  u8g2Fonts.setCursor(centerPosition(compiledMsg), 235);
  u8g2Fonts.print(compiledMsg);
  u8g2Fonts.setCursor(centerPosition(compiledDate), 255);
  u8g2Fonts.print(compiledDate);
#ifdef USE_COLOR
    ePaper.setDisplayColors();
#endif

  u8g2Fonts.setFont(u8g2_font_helvR10_tf);
  u8g2Fonts.setCursor(centerPosition(pages), 275);
  u8g2Fonts.print(pages);

  u8g2Fonts.setFont(u8g2_font_helvB18_tf);
  u8g2Fonts.setCursor(centerPosition(ser), 320);
  u8g2Fonts.print(ser);

  if (sdev.getList0().masterid().valid() == false) {
    u8g2Fonts.setFont(u8g2_font_helvB18_tf);
    u8g2Fonts.setCursor(centerPosition(nomaster1), 360);u8g2Fonts.print(nomaster1);
    u8g2Fonts.setCursor(centerPosition(nomaster2), 386);u8g2Fonts.print(nomaster2);
  }

#ifdef USE_COLOR
  display.drawRect(50, 138, 200, 145, GxEPD_RED);
#else
  display.drawRect(50, 138, 200, 145, ePaper.ForegroundColor());
#endif
}

void emptyBatteryDisplay() {
  display.fillScreen(ePaper.BackgroundColor());
#ifdef USE_COLOR
  uint16_t fg = GxEPD_RED;
#else
  uint16_t fg = ePaper.ForegroundColor();
#endif
  display.fillRect(120, 80, 60, 40, fg);

  uint8_t batt_x = 80;
  uint8_t batt_y = 120;
  uint8_t batt_w = 140;
  uint8_t batt_h = 230;
  uint8_t line_w = 4;

  for (uint8_t i = 0 ; i < line_w; i++) {
    display.drawRect(batt_x + i, batt_y + i, batt_w - i*2, batt_h - i*2, fg);
    display.drawLine(batt_x + i, batt_y + batt_h - 1, batt_x + batt_w - line_w + i, batt_y + 1,fg);
  }
}

void outOfHouseDisplay() {
  display.fillScreen(ePaper.BackgroundColor());
#ifdef USE_COLOR
 uint16_t fg = GxEPD_RED;
#else
 uint16_t fg = ePaper.ForegroundColor();
#endif


 uint8_t home_x = 50;
 uint8_t home_y = 150;
 uint8_t home_w = 200;
 uint8_t home_h = 230;
 uint8_t line_w = 4;

 for (uint8_t i = 0 ; i < line_w; i++) {
   display.drawRect(home_x + i, home_y + i, home_w - i*2, home_h - i*2, fg);
   display.drawLine(home_x + i, home_y + i, home_y + i , home_x + i, fg);
   display.drawLine(home_y +i , home_x + i , home_x + home_w - i, home_y - i,  fg);
 }
}
Irgendwo muss ich doch vermutlich einen recht banalen Fehler machen??

Ich hoffe, Ihr habt eine Idee, die mich weiterbringt.....
piVCCU auf RaspberryPi3 (mit Funkmodul), CUL-Stick, 95 wireless Sensoren + Aktoren, 2 FS20-Sensoren + Aktoren

t0mk
Beiträge: 154
Registriert: 08.08.2018, 20:13
Hat sich bedankt: 5 Mal
Danksagung erhalten: 16 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von t0mk » 31.03.2021, 21:09

AndreO hat geschrieben:
31.03.2021, 15:51
das Austauschen von GDEW075T8 gegen GDEW075T7 hab ich gemacht. Leider ohne Erfolg. Das Display macht einfach gar nix :-(
Ich habe heute nochmal von vorn gestartet. Mit 4,2'' b/w/r-display und hab auch die Arduino IDE nochmal neu installiert und eingerichtet.
Du solltest schon etwas genauer lesen :) Das Austauschen von GDEW075T8 gegen GDEW075T7 bezog sich auf meinen Fall, in Deinem Fall (7.5", 640x384, b/w/r) sollten, wie ich geschrieben habe, alle Vorkommen von "GDEW075T8" durch "GDEW075Z09" ersetzt werden.

Außerdem stimmt der seriellen Ausgabe zufolge irgendwas mit dem CC1101 nicht: entweder nicht/falsch verbunden oder defekt. Keine Ahnung, ob das Display in diesem Fall trotzdem irgendwas anzeigen wird.

jp112sdl
Beiträge: 8470
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 474 Mal
Danksagung erhalten: 1116 Mal
Kontaktdaten:

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von jp112sdl » 31.03.2021, 21:22

Ist auch STANDARD Layout eingestellt (und nicht versehentlich BOBUINO) ?

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

PN sind deaktiviert!

stan23
Beiträge: 1473
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 338 Mal
Danksagung erhalten: 181 Mal
Kontaktdaten:

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von stan23 » 31.03.2021, 21:39

AndreO hat geschrieben:
30.03.2021, 13:10
Ich denke an der Verkabelung sollte es nicht liegen? Ich hab auch extra nochmal alles nachgelötet......Keine Veränderung

IMG_0229.jpg
Wenn ich mir das Fotos in Erinnerung rufe, wüsste ich schon warum das CC1101 nicht antwortet.
Es ist zwar ein FUNKmodul, aber anlöten ist besser als daneben legen ;-)
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

t0mk
Beiträge: 154
Registriert: 08.08.2018, 20:13
Hat sich bedankt: 5 Mal
Danksagung erhalten: 16 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von t0mk » 31.03.2021, 22:10

stan23 hat geschrieben:
31.03.2021, 21:39
Wenn ich mir das Fotos in Erinnerung rufe, wüsste ich schon warum das CC1101 nicht antwortet.
Es ist zwar ein FUNKmodul, aber anlöten ist besser als daneben legen ;-)
Jetzt wo Du das sagst :mrgreen:

jp112sdl
Beiträge: 8470
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 474 Mal
Danksagung erhalten: 1116 Mal
Kontaktdaten:

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von jp112sdl » 31.03.2021, 22:12

Das Display müsste trotzdem was anzeigen.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

PN sind deaktiviert!

Benutzeravatar
Hoppla
Beiträge: 272
Registriert: 29.12.2018, 19:39
System: Alternative CCU (auf Basis OCCU)
Wohnort: Leipzsch
Hat sich bedankt: 22 Mal
Danksagung erhalten: 8 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von Hoppla » 01.04.2021, 09:52

Hallo
In letzter Zeit ist es mehrfach passiert, daß das Display nichts mehr anzeigt.
Die LED zeigt, das der Atmega lebt, Kommandos über die Tasten werden ausgeführt, Daten sollen zum Display geschickt werden, aber es folgt kein refresh.
Loggen schwierig, das passiert 1-2 x die Woche oder alle 2 Wochen.
Batterie raus, Batterie rein: Startbildschirm kommt ... geht.
Spannung kann es nicht sein, das hab ich in Verdacht gehabt und ausgeschlossen, in dem ich es inzwischen über einen Spannungsregler versorge.
Kennt jemand das Problem oder gibt es eine Möglichkeit, das Display ohne Batterie raus/rein zu resetten oder das E-paper selber zu initialisieren?
Danke

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“