Jump to content

E-Paper Update Modus geht nicht? / Nach Reset nur ein Draw möglich - danach dauerhaft Status == Copying


Recommended Posts

using Tinkerforge;

string host = "10.10.88.148";
int port = 4223;
string uidEPaper = "XRM"; // Change XYZ to the UID of your E-Paper 296x128 Bricklet
string uidPctTemp = "V2Z";

IPConnection ipcon = new IPConnection(); // Create IP connection
BrickletEPaper296x128 ep = new BrickletEPaper296x128(uidEPaper, ipcon); // Create device object

ipcon.Connect(host, port); // Connect to brickd
                           // Don't use device before ipcon is connected
ep.Reset();
ep = new(uidEPaper, ipcon);

int i = 0;
while (true)
{
    if (i == 0)
        ep.SetUpdateMode(BrickletEPaper296x128.UPDATE_MODE_DEFAULT);
    else
        ep.SetUpdateMode(BrickletEPaper296x128.UPDATE_MODE_DELTA);

    // Use black background
    ep.FillDisplay(BrickletEPaper296x128.COLOR_BLACK);

    // Write big white "Hello World" in the middle of the screen
    ep.DrawText(5, 15, BrickletEPaper296x128.FONT_24X32,
        BrickletEPaper296x128.COLOR_WHITE,
        BrickletEPaper296x128.ORIENTATION_HORIZONTAL, $"{DateTime.Now:d}");
    ep.DrawText(5, 50, BrickletEPaper296x128.FONT_24X32,
        BrickletEPaper296x128.COLOR_WHITE,
        BrickletEPaper296x128.ORIENTATION_HORIZONTAL, $"{DateTime.Now:T}");

    ep.Draw();

    Thread.Sleep(30000);
    i++;
}

ipcon.Disconnect();

Moin,

Zum Testen eine Dauerschleife, die die Uhr anzeigt. 1. UPDATE_MODE_DEFAULT, ab 2. UPDATE_MODE_DELTA

Das erste Draw klappt  wie erwartet.
Der Update Modus im 2. Durchlauf versetzt das Bricket dauerhaft in

ep.GetDrawStatus() == BrickletEPaper296x128.DRAW_STATUS_COPYING Zustand.

Es ist ein ep.Reset() erfoderlich, sonst geht nichts mehr, auch kein UPDATE_MODE_DEFAULT.

Mache ich etwas falsch?

bearbeitet von PixelHunter
typo
Link zu diesem Kommentar
Share on other sites

Bei weiteren Tests habe ich festgestellt, dass auch im Default Modus nur der erste Draw nach einem Reset funktioniert.

Das 2. Draw nach min. 60 Sekunden Pause wird klaglos aktzeptiert,
das Bricklet bleibt aber danach im dauerhaft Status Copying. Zeigt kein Flackern und auch sonst keine Reaktion.

Die GetSPITFPErrorCount() Werte bleiben aber 0.

Ist das normal bei Euch auch so?
Ist meine Komponente defekt?

bearbeitet von PixelHunter
Link zu diesem Kommentar
Share on other sites

  • PixelHunter changed the title to E-Paper Update Modus geht nicht? / Nach Reset nur ein Draw möglich - danach dauerhaft Status == Copying

Ich habe dein Programm mal getestet, mit dem E-Paper Bricklet hier funktioniert es und der DrawStatus springt auch zurück auf Idle. Trotzdem folgende Fragen:

  • Kannst du mit dem Brick Viewer mehrmals zeichnen?
  • Hast du eventuell mehrere Instanzen von deinem Programm, oder dein Programm und Brick Viewer gleichzeitig laufen und die stören sich gegenseitig?
Link zu diesem Kommentar
Share on other sites

Danke für den Tipp, leider ohne Erfolg.
Das Prg. lief nun sicher alleine ohne BrickV und BrickD.

Ich habe mein Testprg. leicht verändert - um die Stati vor und nach dem Draw besser zu sehen:
 

using Tinkerforge;

string host = "10.10.88.148";
int port = 4223;
string uidEPaper = "XRM"; // Change XYZ to the UID of your E-Paper 296x128 Bricklet
string uidPctTemp = "V2Z";

IPConnection ipcon = new IPConnection(); // Create IP connection
BrickletEPaper296x128 ep = new BrickletEPaper296x128(uidEPaper, ipcon); // Create device object

ipcon.Connect(host, port); // Connect to brickd
                           // Don't use device before ipcon is connected
ep.Reset();
ep = new(uidEPaper, ipcon);

int i = 0;
while (true)
{
    if (i == 0)
    {
        ep.SetUpdateMode(BrickletEPaper296x128.UPDATE_MODE_DEFAULT);
        Console.WriteLine("Mode DEFAULT");
    }
    else
    {
        ep.SetUpdateMode(BrickletEPaper296x128.UPDATE_MODE_DELTA);
        Console.WriteLine("Mode DELTA");

    }

    // Use black background
    ep.FillDisplay(BrickletEPaper296x128.COLOR_BLACK);

    // Date and Time
    ep.DrawText(5, 15, BrickletEPaper296x128.FONT_24X32,
        BrickletEPaper296x128.COLOR_WHITE,
        BrickletEPaper296x128.ORIENTATION_HORIZONTAL, $"{DateTime.Now:d}");
    ep.DrawText(5, 50, BrickletEPaper296x128.FONT_24X32,
        BrickletEPaper296x128.COLOR_WHITE,
        BrickletEPaper296x128.ORIENTATION_HORIZONTAL, $"{DateTime.Now:T}");
    
    Console.WriteLine($"{DateTime.Now:G}");

    System.Console.WriteLine($"Before Draw Status: {ep.GetDrawStatus()}");

    ep.Draw();

    int j = 0;
    while (j < 100 && ep.GetDrawStatus() == BrickletEPaper296x128.DRAW_STATUS_COPYING)
    {
        System.Console.WriteLine($"Wait Idle #{j}, Status: {ep.GetDrawStatus()}");
        ep.GetSPITFPErrorCount(out long errorAckChecksum, out long errorCountMessageChecksum, out long errorCountFrame, out long errorCountOverflow);
        System.Console.WriteLine($"Errors: {errorAckChecksum}, {errorCountMessageChecksum}, {errorCountFrame}, {errorCountOverflow}");
        Thread.Sleep(500);
        j++;
    }

    System.Console.WriteLine($"After Draw Status: {ep.GetDrawStatus()}");

    Thread.Sleep(30000);
    
    i++;
}
ipcon.Disconnect();

Folgende Ausgabe:

Mode DEFAULT
20.12.2021 16:48:41
Before Draw Status: 0
Wait Idle #0, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #1, Status: 1
Errors: 0, 0, 0, 0
After Draw Status: 2
Mode DELTA
20.12.2021 16:49:12

Before Draw Status: 0
Wait Idle #0, Status: 1

Errors: 0, 0, 0, 0
Wait Idle #1, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #2, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #3, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #4, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #5, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #6, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #7, Status: 1
Errors: 0, 0, 0, 0

Da scheint bei mir mit der Hardware des Bricklets etwas nicht zu stimmen, oder?

Link zu diesem Kommentar
Share on other sites

vor 2 Stunden schrieb rtrbt:

Ich habe dein Programm mal getestet, mit dem E-Paper Bricklet hier funktioniert es und der DrawStatus springt auch zurück auf Idle. Trotzdem folgende Fragen:

  • Kannst du mit dem Brick Viewer mehrmals zeichnen?

Der Brick Viewer 2.4.20 kann mehr als einmal zeichnen, wenn ich einmal vorher Resette.

Interesannterweise sehe ich vor dem Reset im Buffer der Komponenten im BrickV das zuletzt gezeichnete erfolglose Bild aus meine Prg...
 

Link zu diesem Kommentar
Share on other sites

Wir haben das Problem gefunden: Der Bug tritt nur bei E-Paper Bricklets auf, die den neueren Treiberchip (den SSD1680) verwenden. Ich hatte hier erst nur mit der alten Version getestet (dem SSD1675A), da klappt auch dein zweites Programm ohne Probleme.

Ich bzw. @borg melden uns nochmal, wenn wir mehr wissen.

Link zu diesem Kommentar
Share on other sites

Der Hersteller des Displays hatte uns gesagt das wir für den neuen Treiberchip nur die Initialisierung ändern müssen und der Rest ist gleich.

Nach genauerem Vergleichen der Datenblätter hat sich jetzt herausgestellt dass die LUT zwischen den beiden Chips eine andere Definition hat.

Ich hab das jetzt so angepasst dass der neue Treiber das Verhalten vom alten 1:1 simuliert und werde das gleich auch erst so veröffentlichen nachdem ich noch ein paar Sachen teste: https://github.com/Tinkerforge/e-paper-296x128-bricklet/commit/2970dc3db212401249e1a460370054082f2f1ad2

Auf Dauer können wir das vielleicht noch verbessern, da der neue Treiber viel mehr Konfigurationsmöglichkeiten hat.

So sieht das jetzt aus bei mir: https://imgur.com/0vFcxVc

 

Link zu diesem Kommentar
Share on other sites

Die Master Bricks habe ich mit der Beta Firmware 2.5.1 geflasht.

Leider kann ich die E-Paper Bricklet Firmware nicht auf 2.0.5 updaten:
Im BrickV kommt ein Fehler: "Could not read *.zbin file: File is not a zip file"

Im GitHub ist der \software\build Ordner leer, sodass ich das auch nicht manuell machen kann ohne mir die gcc Buildumgebung zu installieren, oder?

grafik.png.fe239c74dfa48fb1530a5045d1ebbcf6.png

Link zu diesem Kommentar
Share on other sites

Ich habe jetzt die Master Bricks wieder auf die 2.5.0 geflasht.
Für das E-Paper Bricklet konnte ich jetzt per BrickV die Firmware 2.0.5 updaten.
grafik.png.d3a258330b05d90065ec8e42457c2a10.png

Leider ist das Verhalten noch unverändert bei mir:
Nur ein Draw ist möglich, danach bleibt das E-Paper Bricklet im Status Copying:

Zitat

Mode DEFAULT
25.12.2021 15:46:44
Before Draw Status: 0
Wait Idle #0, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #1, Status: 1
Errors: 0, 0, 0, 0
After Draw Status: 2
Mode DELTA
25.12.2021 15:47:16
Before Draw Status: 0
Wait Idle #0, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #1, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #2, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #3, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #4, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #5, Status: 1
Errors: 0, 0, 0, 0
Wait Idle #6, Status: 1
Errors: 0, 0, 0, 0

 

bearbeitet von PixelHunter
Link zu diesem Kommentar
Share on other sites

Nur um sicher zu gehen das wir jetzt eine komplett funktionierende Konfiguration gefunden haben:

Wenn du auf das Display geschrieben hast und dann den Strom abziehst, bleibt das Bild dann 100% korrekt stehen?

Oder "fadet" es ein bisschen aus und verliert an Kontrast?

Das Bild sollte komplett unverändert bleiben.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...