Compare commits
73
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6964e65002 | ||
|
|
8933c6f115 | ||
|
|
ddfd31dddf | ||
|
|
1959c49d9c | ||
|
|
1d5d16f998 | ||
|
|
a4ed0197e7 | ||
|
|
7296a0d2f6 | ||
|
|
c5ea697f24 | ||
|
|
5c64892c01 | ||
|
|
1febc0b092 | ||
|
|
a84f902f75 | ||
|
|
bcbeea2a17 | ||
|
|
1fe96b70aa | ||
|
|
43517a2c48 | ||
|
|
6a867e54fd | ||
|
|
edfa2d4711 | ||
|
|
fc0a756127 | ||
|
|
cc9ae945b1 | ||
|
|
696707a9a4 | ||
|
|
6bf046801c | ||
|
|
cd1617fdce | ||
|
|
5df6c20171 | ||
|
|
7d7893cf08 | ||
|
|
db707ffd8c | ||
|
|
9eb386095d | ||
|
|
7fec5d9fb5 | ||
|
|
32280a7ea3 | ||
|
|
5988668026 | ||
|
|
4f2700d59a | ||
|
|
0ec3d89973 | ||
|
|
06d9710b16 | ||
|
|
b3b96362c3 | ||
|
|
14f1a4789d | ||
|
|
326af4288a | ||
|
|
2e8651bc00 | ||
|
|
b13e5fdaf1 | ||
|
|
671a6696ce | ||
|
|
288f61447d | ||
|
|
a91c792491 | ||
|
|
e32c654b8d | ||
|
|
484812cb4c | ||
|
|
ff23e0e614 | ||
|
|
09b5231357 | ||
|
|
16d8465b0c | ||
|
|
407d938031 | ||
|
|
33ce2b3ab9 | ||
|
|
d4d4f2b9d2 | ||
|
|
9fef4f8a6e | ||
|
|
0f5b681421 | ||
|
|
01d960258a | ||
|
|
3c333f0280 | ||
|
|
b6c6214b41 | ||
|
|
63290afa07 | ||
|
|
cf57e11ccb | ||
|
|
6d345d2145 | ||
|
|
a410da6e72 | ||
|
|
f0a214d712 | ||
|
|
21f273aae4 | ||
|
|
e42d2b3de2 | ||
|
|
785f64331d | ||
|
|
40aabe48bc | ||
|
|
ca3a9c1264 | ||
|
|
bcd9ecf0c8 | ||
|
|
e5c61d42d4 | ||
|
|
d77b0795ea | ||
|
|
7ebffdab8f | ||
|
|
b73fc798c3 | ||
|
|
5defbe362c | ||
|
|
749f50097f | ||
|
|
95373dc619 | ||
|
|
a1c047e1ef | ||
|
|
52391c46c9 | ||
|
|
5d47228eed |
@@ -1,3 +1,453 @@
|
||||
Version 1.11.3:
|
||||
- Der Punkt sitzt wieder genau auf dem letzten Messwert, statt eine halbe Punktbreite davor.
|
||||
Die Linie schaut damit rechts nicht mehr unter ihm hervor. Damit trotzdem nichts
|
||||
abgeschnitten wird, lässt die Kurvenfläche rechts einen schmalen Rand frei: Der Platz
|
||||
gehört noch zum Diagramm, wird aber nicht mehr bezeichnet.
|
||||
|
||||
Version 1.11.2:
|
||||
- Der Punkt am Kurvenende sitzt jetzt vollständig innerhalb der Kurvenfläche, statt mittig
|
||||
auf dem letzten Messwert und damit halb außerhalb. Rechts wird nichts mehr abgeschnitten.
|
||||
Der Schein darf weiterhin darüber hinausreichen.
|
||||
- Der Punkt ist auf etwa zwei Drittel verkleinert.
|
||||
- Neues Pulsieren als Signalpunkt: Der Punkt selbst atmet leicht, und der Schein macht das
|
||||
Gegenteil. Zieht der Punkt sich zusammen, geht der Schein auf; wird der Punkt wieder
|
||||
größer, zieht der Schein sich zurück.
|
||||
|
||||
Version 1.11.1:
|
||||
- Der Punkt am rechten Ende der Verlaufskurven war angeschnitten, und von seinem Schein war
|
||||
nichts zu sehen: Das Diagramm beschnitt beides an seiner eigenen Kante. Punkt und Schein
|
||||
dürfen jetzt darüber hinausreichen, das Pulsieren ist damit sichtbar. Der Schein wurde
|
||||
zusätzlich kräftiger und der Punkt eine Spur größer.
|
||||
- Die Linien verlaufen jetzt weich statt kantig. Gemessen wird weiterhin einmal je Sekunde,
|
||||
gezeichnet wird viermal so fein: Zwischen zwei Messwerten liegen vier Stützpunkte auf
|
||||
einem Kosinusbogen, der an den Messpunkten waagerecht beginnt und endet. Dadurch
|
||||
entstehen dort keine Knicke mehr. Linienenden und -ecken sind zusätzlich abgerundet.
|
||||
|
||||
Version 1.11.0:
|
||||
- Die Verlaufskurven im Dashboard beginnen jetzt immer am selben Punkt: Der älteste Wert
|
||||
liegt links genau auf halber Höhe, die Kurve wächst von dort nach oben oder unten. Der
|
||||
Verlauf sieht dadurch bei jeder Kesseltemperatur gleich aus.
|
||||
- Beide Kurven behalten denselben Maßstab. Die absolute Höhe lässt sich damit nicht mehr
|
||||
zwischen Wasser und Dampf vergleichen - der Ausschlag aber schon: Wer weiter ausschlägt,
|
||||
hat sich auch stärker verändert.
|
||||
- Am jüngsten Messwert sitzt ein kleiner weißer Punkt mit weichem Schein, der langsam
|
||||
pulsiert.
|
||||
- Beide Linien sind jetzt weiß. Die Farbe der Karte steckt ohnehin in der Überschrift.
|
||||
|
||||
Version 1.10.4:
|
||||
- Die Maßnahme aus 1.10.3 machte die Delle nach dem Standby länger statt kleiner. Sie
|
||||
hielt beim Umschalten des Standby-Merkers den zuletzt gemeldeten Wert fest - zu diesem
|
||||
Zeitpunkt lag die gestörte Probe aber bereits an. Festgehalten wurde also ausgerechnet
|
||||
die Delle, und das sekundenlang.
|
||||
- Statt einer Sperrfrist tragen die Verlaufskurven jetzt den mittleren Wert der letzten
|
||||
fünf Proben ein (Median). Eine oder zwei verirrte Proben verschwinden damit vollständig,
|
||||
unabhängig davon, wann sie auftreten - beim Standby-Ende ebenso wie beim Bezugsstart.
|
||||
- Echte Temperaturänderungen kommen unverfälscht durch, nur zwei Sekunden später. Das ist
|
||||
die Verzögerung, um die es hier ging.
|
||||
- Die angezeigten Temperaturzahlen bleiben weiterhin ungefiltert.
|
||||
|
||||
Version 1.10.3:
|
||||
- Direkt nach dem Aufwachen aus dem Standby zog die Wasserkurve eine kurze Delle nach
|
||||
unten. Ursache ist die Messung, nicht der Kessel: In genau diesem Moment schalten die
|
||||
Heizungen, und der Wassersensor hängt als NTC am ADC. Ein Kessel kann binnen einer
|
||||
Sekunde nicht um Grade einbrechen.
|
||||
- Die Verlaufskurven halten deshalb rund um jeden Standby-Wechsel sechs Sekunden lang
|
||||
ihren letzten Wert, statt die gestörte Probe einzutragen. Das gilt für die kleinen
|
||||
Kurven im Dashboard und für die große Verlaufsseite.
|
||||
- Die angezeigten Temperaturzahlen bleiben unverändert: Dort steht weiter, was gemessen
|
||||
wird.
|
||||
- Die Versionsanzeige stand seit dem Zurücknehmen von 1.6.11 auf 1.6.10 fest und wurde bei
|
||||
keinem der folgenden Stände mitgezogen. Sie zeigt jetzt wieder den echten Stand.
|
||||
|
||||
Version 1.10.2:
|
||||
- Die Verlaufskurven im Dashboard wurden überhaupt nicht fortgeschrieben. Der Code dafür
|
||||
stand am Ende der Umschaltung „Heizleistung anzeigen" auf der Verlauf-Seite - also im
|
||||
Callback eines Knopfes. Die Kurven wuchsen nur weiter, wenn jemand genau diesen Knopf
|
||||
drückte. Sonst zeigten sie unverändert den Wert, der beim Aufbau der Darstellung gerade
|
||||
anlag: zwei flache, gleich hohe Linien.
|
||||
- Die Fortschreibung sitzt jetzt im sekündlichen Abtaster, dort, wo auch der große Verlauf
|
||||
seine Messwerte nimmt. Damit bewegen sich die Kurven, und die gemeinsame Skala aus 1.10.1
|
||||
kann ihre Arbeit überhaupt erst tun.
|
||||
|
||||
Version 1.10.1:
|
||||
- Die beiden Verlaufskurven teilen sich jetzt eine gemeinsame Skala. In 1.10.0 zoomte jede
|
||||
Kurve auf ihre eigenen Werte - dadurch saß jede mittig in ihrem eigenen Fenster, und
|
||||
Wasser bei 70 Grad lag genauso hoch wie Dampf bei 0. Die Höhe sagte nichts mehr aus.
|
||||
- Die Skala richtet sich nach den Werten beider Kessel zusammen. Der wärmere Kessel liegt
|
||||
damit sichtbar höher, und die Skala bleibt so eng, wie es die Daten zulassen: Stehen beide
|
||||
dicht beieinander, greift die Mindestspanne von vier Grad und schon Zehntelgrade sind zu
|
||||
erkennen.
|
||||
|
||||
Version 1.10.0:
|
||||
- Die Verlaufskurven im Dashboard zeigen jetzt wirklich einen Verlauf. Ihr Ausschnitt hing
|
||||
bisher am Sollwert - sechs Grad darunter bis drei darüber. Das funktioniert nur, solange
|
||||
der Kessel schon nahe am Ziel ist. Heizte er noch auf oder war er ganz aus, lag jeder
|
||||
Messwert unterhalb des Fensters und wurde auf den unteren Rand geklemmt: Beide Kurven lagen
|
||||
flach auf derselben Höhe und bewegten sich nicht, obwohl der eine Kessel bei 80 Grad stand
|
||||
und der andere bei 0. Der Ausschnitt richtet sich jetzt nach den tatsächlich vorhandenen
|
||||
Werten, mit einer Mindestspanne von vier Grad, damit ein ruhig geregelter Kessel nicht
|
||||
jedes Zehntelgrad zum vollen Ausschlag aufbläht.
|
||||
- Die Kurven nehmen jetzt den Platz unterhalb der Zahlen ein statt als schmaler Streifen in
|
||||
der Mitte zu hängen: Sie beginnen weiter unten auf der Karte und sind deutlich höher.
|
||||
- Der Nachlauf beim Wischen ist zurück. Er war abgeschaltet, weil jedes Einzelbild während
|
||||
des Schwungs den ganzen Bildschirm neu zeichnete; seit die Anzeigewerte feste Maße haben,
|
||||
fällt das weg.
|
||||
- Die Messzeilen der Fehlersuche sind wieder entfernt. Die Messung des Bildaufbaus bleibt
|
||||
erhalten, liegt aber hinter dem Schalter WS7_PERF_MONITOR und ist aus.
|
||||
|
||||
Version 1.9.12:
|
||||
- Die Hintergrundbeleuchtung kommt beim Wechsel in den und aus dem Standby jetzt sofort.
|
||||
Bisher stand das Bild bereits fertig da - im Gegenlicht war es zu sehen -, blieb aber
|
||||
mehrere Sekunden dunkel. Das war die ganze gesuchte Verzögerung.
|
||||
- Ursache: Die Bridge übernimmt eine neue Helligkeit nicht zuverlässig beim ersten Mal. Der
|
||||
Beispielcode von Waveshare setzt sie deshalb zweimal, mit einer Pause dazwischen,
|
||||
ausdrücklich „sicherheitshalber". Genau diese Wiederholung fehlte.
|
||||
- Die Panel-Freigabe wird nur noch beim ersten Mal gesetzt. Sie erneut zu setzen, während die
|
||||
Beleuchtung läuft, stößt die Helligkeitsstufe der Bridge neu an; der Beispielcode setzt sie
|
||||
ebenfalls nur ein einziges Mal.
|
||||
- Jeder Helligkeitswechsel meldet jetzt seine Dauer. Bleibt die Beleuchtung wieder hinterher,
|
||||
lässt sich die Pause zwischen den beiden Übernahmen über WS7_BACKLIGHT_LATCH_MS erhöhen.
|
||||
|
||||
Version 1.9.11:
|
||||
- Endlose Startschleife behoben: Beleuchtung an, nie ein Bild. Der P4 startet sich nach dem
|
||||
Einschalten absichtlich einmal neu, weil das Panel sonst schwarz bleibt. Die Absicherung
|
||||
dagegen verließ sich darauf, dass der zweite Start kein Kaltstart mehr ist - der Chip
|
||||
meldet aber auch nach dem selbst ausgelösten Neustart wieder einen Kaltstart. Damit griff
|
||||
die Bedingung erneut, endlos.
|
||||
- Der Neustart wird jetzt vermerkt und beim zweiten Durchlauf erkannt, unabhängig davon, was
|
||||
der Chip als Startgrund meldet. Beim nächsten echten Einschalten erfolgt wieder genau ein
|
||||
Neustart.
|
||||
- Die Meldung über diesen Neustart lief bisher über die USB-Verbindung und war im seriellen
|
||||
Monitor nicht zu sehen - deshalb war von der Schleife nichts zu erkennen. Sie läuft jetzt
|
||||
denselben Weg wie die übrigen Panel-Meldungen.
|
||||
|
||||
Version 1.9.10:
|
||||
- Alle Messzeilen laufen jetzt auf derselben Uhr. Die des Zeichenablaufs startete später als
|
||||
die des Hauptablaufs; die Zeiten ließen sich nur mit Umrechnung vergleichen.
|
||||
- Der Touch meldet jetzt, wenn er Rohwerte verwirft, weil sie außerhalb des gültigen
|
||||
Bereichs liegen, und nennt bei jeder erkannten Berührung, wie viele vorher verworfen
|
||||
wurden. Eine Berührung, deren Rohwerte lange verworfen werden, sieht von außen genauso aus
|
||||
wie ein Display, das nicht reagiert - das war bisher nicht zu unterscheiden.
|
||||
|
||||
Version 1.9.9:
|
||||
- Die kleinen Kacheln unten im Dashboard behalten beim Bezug ihre Höhe. Bisher bekam die
|
||||
untere Zeile während des Bezugs deutlich mehr Platz - die Kacheln wurden enorm hoch und
|
||||
das Dashboard sprang bei jedem Bezugsbeginn sichtbar um.
|
||||
- Die Messzeilen gingen bisher teils über die USB-Verbindung hinaus und waren im seriellen
|
||||
Monitor gar nicht zu sehen - die Messung der Helligkeit lief damit ins Leere. Alle
|
||||
Messzeilen laufen jetzt über denselben Weg wie die Panel-Meldungen.
|
||||
- Jede Messzeile trägt jetzt eine Zeitmarke. Nur so sind die Lücken zu sehen, in denen die
|
||||
fünf Sekunden vergehen.
|
||||
- Der Wechsel in den und aus dem Standby wird an jeder Station vermessen: Ankunft der
|
||||
Meldung, Warten auf die Anzeigesperre, Dauer der Aktualisierung. Ebenso der Weg vom Tippen
|
||||
auf die Standby-Uhr bis zur fertig aufgebauten Rückfrage.
|
||||
|
||||
Version 1.9.8:
|
||||
- Der Stillstand beim Wechsel in den Standby ist gefunden und behoben. LVGL legt für JEDE
|
||||
Textglyphe einen eigenen Zwischenpuffer an - bei der großen Uhr rund 48 KB pro Ziffer, mit
|
||||
zwei parallel arbeitenden Zeicheneinheiten fast 100 KB gleichzeitig. Der interne
|
||||
LVGL-Speicher hatte nur rund 98 KB am Stück frei; es reichte knapp nicht. Schlägt die
|
||||
Anforderung fehl, hält LVGL per Zusicherung in einer Endlosschleife an - kein Absturz,
|
||||
keine Meldung, das Display steht einfach. Deshalb brach der Mitschnitt ohne Fehler ab.
|
||||
- Große Glyphenpuffer liegen jetzt im externen Speicher (PSRAM, 32 MB frei). Kleine bleiben
|
||||
im internen, der ist schneller - sonst würde jeder Text langsamer.
|
||||
- Hält LVGL künftig wegen einer verletzten Zusicherung an, sagt es das jetzt, statt stumm
|
||||
stehen zu bleiben.
|
||||
|
||||
Version 1.9.7:
|
||||
- Messpunkte für den Stillstand beim Wechsel in den Standby: Beide Abläufe - der Haupt- und
|
||||
der Zeichenablauf - melden jetzt alle zwei Sekunden einen Herzschlag mit Speicherstand.
|
||||
Bleibt nur einer von beiden aus, ist klar, welcher stehen bleibt.
|
||||
- Das Einblenden der Standby-Uhr meldet Anfang und Ende mit Dauer. Bleibt die zweite Meldung
|
||||
aus, hängt es genau dort.
|
||||
- Jeder Helligkeitswechsel, der länger als 50 ms braucht, wird mit seiner Dauer gemeldet. Der
|
||||
Schreibzugriff geht über denselben Bus wie der Touch - ein Verdacht für die bekannte
|
||||
Verzögerung von ein bis zwei Sekunden.
|
||||
- Die Rückmeldung aus 1.9.5, die einen komplett ungültigen Inhaltsbereich melden sollte, ist
|
||||
wieder entfernt. Sie konnte nie auslösen: LVGL schickt diese Meldung an das Display, nicht
|
||||
an einzelne Elemente. Ihr Ausbleiben war also kein Beweis.
|
||||
|
||||
Version 1.9.6:
|
||||
- Die Darstellungseinstellungen haben einen eigenen Menüpunkt „Darstellung" bekommen. Sie
|
||||
standen bisher oben auf der Info-Seite, zwischen Sachen, mit denen sie nichts zu tun
|
||||
haben. Die Info-Seite zeigt jetzt nur noch Firmware-Stände und Verbindungsdaten.
|
||||
- Die Uhr im Standby ist auf dem 7-Zoll-Panel deutlich größer geworden: Die drei Stufen
|
||||
liegen jetzt bei 180, 270 und 360 Pixeln statt bei 120, 180 und 240. Auf dem 4,3-Zoll-
|
||||
Panel bleiben die bisherigen Stufen, dort passen größere schlicht nicht auf den Schirm.
|
||||
|
||||
Version 1.9.5:
|
||||
- Die festen Breiten aus 1.9.4 haben nicht gereicht: Auch die HÖHE muss festliegen. LVGL
|
||||
prüft beim Setzen eines Textes, ob sich die Eigengröße der Beschriftung geändert haben
|
||||
könnte - ist eines der beiden Maße frei, gilt das Layout des Elternteils als neu zu
|
||||
berechnen, und das macht die ganze Seite ungültig. Temperaturwerte, Sollwerte, die Werte
|
||||
der unteren Zeile und die Uhrzeit in der Kopfleiste haben jetzt feste Maße in beide
|
||||
Richtungen.
|
||||
- Die Uhrzeit hatte denselben Effekt in der Kopfleiste: Beim Wechsel der Minute wurde die
|
||||
Leiste samt Menü-Knopf neu berechnet. Das erklärt den Bereich „x 6..57, y 2..41", der in
|
||||
fast jedem Durchgang auftauchte.
|
||||
- Zusätzlich meldet die Firmware jetzt, wenn der Inhaltsbereich oder die Dashboard-Seite als
|
||||
Ganzes ungültig gemacht wird. Damit ist zu unterscheiden, ob eine einzelne Beschriftung
|
||||
den Bildaufbau auslöst oder gleich der komplette Bereich - zwei verschiedene Ursachen mit
|
||||
verschiedenen Gegenmitteln.
|
||||
|
||||
Version 1.9.4:
|
||||
- Die Messung mit Koordinaten hat den Verursacher benannt: Der ungültige Bereich war
|
||||
„x 0..1279, y 44..719" - also der gesamte Inhalt unterhalb der Kopfleiste, bei jeder
|
||||
Zustandsmeldung.
|
||||
- Grund: Die Anzeigewerte hatten keine feste Breite. Wächst oder schrumpft eine Beschriftung
|
||||
mit ihrem Inhalt - etwa von „92,4 °C" auf „100,1 °C" -, rechnet LVGL das Layout der
|
||||
gesamten Seite neu und macht sie dabei komplett ungültig. Es genügt also nicht, den Text
|
||||
nur bei echter Änderung zu setzen; er darf beim Ändern auch die Breite nicht verändern.
|
||||
- Temperaturwerte, Sollwerte und die Werte der unteren Zeile haben jetzt eine feste Breite
|
||||
mit zentriertem Text. Sichtbar ändert sich dadurch nichts - die Werte standen ohnehin
|
||||
mittig.
|
||||
|
||||
Version 1.9.3:
|
||||
- Fehlerbehebung: Bei geöffnetem Menü war der Seiteninhalt dahinter verschwunden. Der
|
||||
Vorhang des Menüs war in 1.8.7 deckend gemacht worden, um Zeichenlast zu sparen - dabei
|
||||
verdeckt er aber genau das, was sichtbar bleiben soll. Er ist wieder durchscheinend.
|
||||
- Weitere Stellen umgestellt, die bei jeder Zustandsmeldung neu zeichnen ließen, obwohl sich
|
||||
nichts geändert hatte: das Zustandsband der Darstellung „Band" (es spannt sich über die
|
||||
volle Breite und machte damit allein schon einen Streifen über den ganzen Bildschirm
|
||||
ungültig), die Heizleistungsbalken und das WLAN-Symbol.
|
||||
- Die Messung nennt jetzt zusätzlich die Lage der neu gezeichneten Bereiche. Die Größe
|
||||
allein sagt nicht, welcher Teil der Oberfläche das Neuzeichnen auslöst - die Koordinaten
|
||||
schon.
|
||||
|
||||
Version 1.9.2:
|
||||
- Ursache der Trägheit endlich gefunden. Die erweiterte Messung zeigte: „1 Bereich, 100 %
|
||||
der Fläche" - LVGL zeichnete bei jeder Zustandsmeldung den kompletten Bildschirm neu, also
|
||||
einmal pro Sekunde 240 bis 300 Millisekunden lang. Es war also kein Tempoproblem beim
|
||||
Zeichnen, sondern es wurde viel zu viel als „muss neu gezeichnet werden" gemeldet.
|
||||
- Grund: LVGL macht den Bereich einer Beschriftung ungültig, sobald ihr Text gesetzt wird -
|
||||
auch dann, wenn er sich gar nicht geändert hat. Dasselbe gilt für Farbwechsel. Auf dem
|
||||
Dashboard wurden im Sekundentakt Werte quer über den ganzen Bildschirm gesetzt: Uhrzeit
|
||||
oben, Temperaturen in der Mitte, Bezugswerte unten. LVGL fasst benachbarte ungültige
|
||||
Bereiche zu einem zusammen - und der umfasste dann die gesamte Fläche.
|
||||
- Alle regelmäßig gesetzten Werte werden jetzt vorher verglichen und nur bei echter Änderung
|
||||
neu geschrieben; für Farben gilt dasselbe. Da sich Temperaturen selten um ein Zehntelgrad
|
||||
ändern und der Sollwert praktisch nie, entfallen die meisten dieser Neuzeichnungen.
|
||||
- Das betrifft alle Bildschirmgrößen; auf den JC-Panels war es nur nie störend, weil dort ein
|
||||
Bildaufbau ein Bruchteil davon kostet.
|
||||
|
||||
Version 1.9.1:
|
||||
- Das direkte Zeichnen in den Bildspeicher aus 1.9.0 ist zurückgenommen: Es hat die
|
||||
Bildaufbauzeit nicht verkürzt (weiterhin 240 bis 300 ms) und stattdessen Bildfehler
|
||||
erzeugt, weil in denselben Speicher gezeichnet wird, aus dem gerade angezeigt wird.
|
||||
Damit ist auch klar, dass der Flaschenhals nicht im Kopieren liegt, sondern im Zeichnen
|
||||
selbst. Der Schalter WS7_DIRECT_FB bleibt samt Begründung erhalten.
|
||||
- Die Messung sagt jetzt zusätzlich, WIE VIEL neu gezeichnet wurde: Anzahl der Bereiche und
|
||||
ihr Anteil an der Gesamtfläche. Erst damit lässt sich unterscheiden, ob LVGL nur kleine
|
||||
Bereiche anfasst - dann ist das Zeichnen an sich zu langsam - oder ob jedes Mal der ganze
|
||||
Bildschirm neu entsteht, weil ihn etwas unnötig ungültig macht. Das sind zwei völlig
|
||||
verschiedene Ursachen mit verschiedenen Gegenmitteln.
|
||||
|
||||
Version 1.9.0:
|
||||
- Die Messung aus 1.8.8 hat die Ursache der Trägheit gefunden: Jeder Bildaufbau kostete
|
||||
240 bis 300 Millisekunden - dauerhaft, auch im Leerlauf. Fünf Sekunden für den
|
||||
Aufweckdialog waren also rund zwanzig solcher Durchgänge.
|
||||
- Grund war, dass zweimal durch den Bildspeicher gearbeitet wurde: LVGL zeichnete in einen
|
||||
eigenen Puffer, und dessen Inhalt wurde anschließend vollständig in den Bildspeicher
|
||||
kopiert. Bei 1280x720 in 24 Bit sind das zwei Durchgänge durch je 2,7 MB.
|
||||
- LVGL zeichnet jetzt direkt in den Bildspeicher. Der Treiber lässt das Kopieren dann weg,
|
||||
und LVGL zeichnet nur noch die geänderten Bereiche statt jedes Mal die ganze Fläche.
|
||||
Schalter WS7_DIRECT_FB in pins_config.h.
|
||||
- Die Anzeigen von Shot-Timer und Waage bleiben während eines Bezugs in der normalen
|
||||
Schrift; der fette Wechsel ist entfernt. Der Bereich bekommt weiterhin mehr Platz.
|
||||
- Neu: Die Größe der Standby-Uhr lässt sich einstellen (Klein, Mittel, Groß - 120, 180 oder
|
||||
240 Pixel), zu finden auf der Info-Seite unter Darstellung. Anders als die allgemeine
|
||||
Schriftgröße wirkt sie sofort, weil sie an einem einzigen Textfeld hängt.
|
||||
- Die Knöpfe des Aufweckdialogs berücksichtigen jetzt ebenfalls die eingestellte
|
||||
Schriftgröße und wachsen mit.
|
||||
|
||||
Version 1.8.8:
|
||||
- Der Aufweckdialog berücksichtigt jetzt die eingestellte Schriftgröße vollständig: Die
|
||||
Knöpfe bekommen dieselbe Schrift wie der Text und wachsen mit (150 / 210 / 280 Pixel).
|
||||
Bisher erbten sie die kleine Grundschrift und behielten eine feste Breite - neben dem
|
||||
größeren Text wirkten sie dadurch verloren.
|
||||
- Die große Standby-Uhr bleibt bewusst bei ihrer festen Größe: Sie ist bereits auf die
|
||||
Bildschirmhöhe abgestimmt, eine Umschaltung würde sie nur schlechter passend machen.
|
||||
- Neu: eine Zeitmessung für langsame Bildaufbauten. Überschreitet ein Zeichenzyklus
|
||||
200 Millisekunden, meldet die serielle Konsole seine Dauer. Damit lässt sich feststellen,
|
||||
welcher Vorgang tatsächlich Zeit kostet - die bisherigen Erklärungen für die Verzögerung
|
||||
beim Aufweckdialog haben sich als falsch erwiesen, und weiteres Raten hilft nicht.
|
||||
Im Normalbetrieb bleibt die Ausgabe still.
|
||||
|
||||
Version 1.8.7:
|
||||
- Vom Fingertipp auf die Standby-Uhr bis zum Aufweckdialog vergingen rund fünf Sekunden mit
|
||||
schwarzem Bildschirm. Ursache war der halbdurchsichtige Vorhang, den der Dialog über den
|
||||
ganzen Bildschirm legt: Dafür muss LVGL einen Vollbild-Zwischenpuffer anlegen und die
|
||||
gesamte Fläche mischen - bei 1280x720 in 24 Bit die teuerste Operation überhaupt.
|
||||
- Der Vorhang ist auf dem Waveshare-Panel jetzt deckend. Verloren geht dabei nichts: Im
|
||||
Standby liegt dahinter ohnehin nur Schwarz.
|
||||
- Aus demselben Grund ist auch der Vorhang des Menüs deckend, in einem dunklen Ton. Auf
|
||||
dunklem Grund sieht das praktisch genauso aus wie halbdurchsichtig, spart aber dieselbe
|
||||
Mischarbeit. Die JC-Panels behalten in beiden Fällen die Transparenz.
|
||||
- Der Aufweckdialog wird mit größerer Schrift auch breiter (420 / 640 / 900 Pixel), damit
|
||||
der Text nicht an unglücklichen Stellen umbricht.
|
||||
|
||||
Version 1.8.6:
|
||||
- Die Uhrzeit verschwindet nicht mehr, wenn die Hauptplatine ihre Zeit gerade neu abgleicht.
|
||||
Der P4 merkt sich die zuletzt empfangene Uhrzeit und zählt zwischen den Meldungen selbst
|
||||
weiter; sobald die Hauptplatine wieder eine Zeit schickt, gilt deren Wert.
|
||||
- Der P4 stellt dabei nichts richtig und ersetzt keine Zeitquelle - er überbrückt nur die
|
||||
Lücke. Hat er noch nie eine Uhrzeit bekommen, bleibt die Anzeige wie bisher leer.
|
||||
- Gilt für die Uhr in der Kopfleiste und für die große Standby-Uhr.
|
||||
|
||||
Version 1.8.5:
|
||||
- Die Verzögerung von rund zwei Sekunden rund um den Standby ist behoben. Sie lag nicht an
|
||||
der Helligkeitsumschaltung, sondern daran, dass die Standby-Uhr bei JEDER Zustandsmeldung
|
||||
der Hauptplatine nach vorn geholt wurde. Das ordnet die Ebenen neu und lässt LVGL den
|
||||
gesamten Bildschirm neu zeichnen - einmal pro Sekunde, jedes Mal 1280x720 in 24 Bit.
|
||||
Dadurch hing die Oberfläche dauerhaft ein bis zwei Sekunden hinterher. Nach vorn geholt
|
||||
wird die Uhr jetzt beim Einblenden, danach bleibt sie dort.
|
||||
- Der Aufweckdialog schließt sich nach 30 Sekunden ohne Auswahl von selbst und wird wie
|
||||
„Abbrechen" gewertet. Vorher blieb das Display hell stehen - der Dialog schaltet auf
|
||||
normale Helligkeit, und ein versehentlicher Tipp auf die Uhr hätte die Maschine die ganze
|
||||
Nacht leuchten lassen.
|
||||
- Die Verlaufskurve hat keinen eigenen Hintergrund mehr; sie liegt jetzt direkt auf der
|
||||
Karte. Die abgesetzte Fläche war nur nötig, solange die Kurve vor dem ersten Messwert
|
||||
leer blieb - seit sie beim aktuellen Wert startet, ist immer eine Linie da.
|
||||
- Auf der Statistikseite erschien ein leeres Rechteck, wenn ohne Waage bezogen wurde. Dort
|
||||
stand ein typografischer Gedankenstrich, den der Zeichensatz der Schrift nicht enthält.
|
||||
Jetzt ein einfacher Bindestrich.
|
||||
|
||||
Version 1.8.4:
|
||||
- Standby-Uhr und Aufweckdialog erscheinen jetzt sofort statt mit spürbarer Verzögerung.
|
||||
Ursache waren die weichen Ein- und Ausblendungen: Eine Deckkraft-Animation ist bei einem
|
||||
Bildspeicher in RGB888 das Teuerste, was die Oberfläche tun kann, weil für jedes Einzelbild
|
||||
die gesamte Fläche unter der Ebene neu gezeichnet und mit ihr gemischt werden muss. Auf
|
||||
1280x720 dauerte eine solche Blende deutlich länger als die 450 ms, die vorgesehen waren.
|
||||
Auf dem Waveshare-Panel laufen die Übergänge deshalb ohne Animation; die JC-Panels
|
||||
behalten sie.
|
||||
- Beim Wechsel der Schriftgröße blitzte kurz ein blaues Bild auf. Das kommt nicht von der
|
||||
Firmware: Das Panel zeigt von sich aus Blau, sobald kein Videosignal anliegt - und beim
|
||||
nötigen Neustart reißt das Signal kurz ab. Die Beleuchtung wird jetzt vorher abgeschaltet;
|
||||
dunkel ist unauffälliger als blau.
|
||||
- Neue Einstellung unter Darstellung: „Temperaturzahl in der Zustandsfarbe". Aus bleibt die
|
||||
Zahl weiß, die Zustandsfarbe steckt dann allein im Balken darunter - ruhiger, und die Zahl
|
||||
bleibt eine Zahl. Ein bedeutet, sie färbt sich mit, wie bisher. Vorgabe ist aus.
|
||||
Warnungen bleiben in jedem Fall rot; das ist keine Gestaltung, sondern eine Meldung.
|
||||
|
||||
Version 1.8.3:
|
||||
- Fehlerbehebung: Bei allen Darstellungen stand hinter der Temperatur ein leeres Rechteck
|
||||
statt des C. Die beiden großen Schriften waren auf Ziffern, Komma, Punkt, Minus und
|
||||
Gradzeichen beschränkt - das C fehlte darin schlicht. Es ist jetzt enthalten, ebenso g
|
||||
und s für die Gewichts- und Zeitanzeige während eines Bezugs.
|
||||
- Fehlerbehebung: Bei der Darstellung „Verlauf" war keine Kurve zu sehen. Ein frisch
|
||||
angelegtes Diagramm enthält lauter „kein Wert"-Punkte und zeichnet deshalb nichts; ohne
|
||||
Hintergrund war der Bereich vollständig unsichtbar, bis nach einer Minute genug Messwerte
|
||||
zusammengekommen wären. Die Kurve startet jetzt beim aktuellen Messwert, und ihre Fläche
|
||||
ist leicht abgesetzt.
|
||||
- Die großen Zahlen des Dashboards stehen jetzt im fetten Schnitt und etwas enger, wie im
|
||||
Entwurf. Erzeugt aus der variablen Maven-Pro-Datei mit Gewicht 700 - dieselbe Schriftart
|
||||
wie bisher, nur kräftiger. Die übrige Oberfläche bleibt unverändert.
|
||||
|
||||
Version 1.8.2:
|
||||
- Die Liste der letzten Bezüge auf der Statistikseite ist jetzt eine Tabelle mit festen
|
||||
Spalten: Zeitpunkt, Dauer, Gewicht und gegebenenfalls die Kennzeichnung „kalt".
|
||||
- Vorher war es ein einziges mehrzeiliges Textfeld, in dem die Werte durch Leerzeichen
|
||||
getrennt aneinandergereiht standen. Weil Zahlen unterschiedlich breit sind, stand nichts
|
||||
untereinander - zwei Bezüge ließen sich nicht vergleichen, ohne jede Zeile einzeln zu
|
||||
lesen. Genau das sah unruhig aus.
|
||||
- Ziffern haben jetzt gleiche Breite, jede zweite Zeile ist leicht abgesetzt, und eine
|
||||
Kopfzeile benennt die Spalten. Wurde ohne Waage bezogen, bleibt die Gewichtsspalte leer,
|
||||
statt eine Null vorzutäuschen.
|
||||
- Die Zeilen werden einmal angelegt und danach nur gefüllt oder ausgeblendet, statt bei
|
||||
jeder Aktualisierung neu zu entstehen.
|
||||
|
||||
Version 1.8.1:
|
||||
- Die Bezugsanzeige ist da, und zwar für alle vier Darstellungen gemeinsam: Sobald ein
|
||||
Bezug oder Dampfbezug läuft, schrumpft der Temperaturbereich und die untere Zeile wächst.
|
||||
Shot-Timer und Gewicht werden dabei auf 96 Pixel vergrößert - während eines Bezugs zählen
|
||||
Zeit und Gewicht, die Kesseltemperaturen sind dann Nebensache.
|
||||
- Es gibt keine zweite Ansicht: Die Seite verschiebt nur das Gewicht zwischen ihren beiden
|
||||
Bereichen. Damit bleibt alles an seinem Platz, und es gibt nichts doppelt zu pflegen.
|
||||
- Der Wechsel hält nach dem Bezug noch vier Sekunden an. Ohne dieses Nachhalten würde die
|
||||
Seite bei jeder kurzen Unterbrechung hin- und herspringen - das wäre unruhiger als gar
|
||||
kein Wechsel.
|
||||
|
||||
Version 1.8.0:
|
||||
- Das Dashboard hat vier neue Darstellungen, die die bisherigen fünf ersetzen. Sie sind
|
||||
keine Varianten desselben Bildes, sondern vier Antworten auf die Frage, was die große
|
||||
Fläche des 7-Zöllers leisten soll:
|
||||
* Gewichtet - Wasser bekommt zwei Drittel der Fläche, Dampf ein Drittel. Beim Espresso
|
||||
zählt die Wassertemperatur; die Asymmetrie ist die Aussage.
|
||||
* Verlauf - unter jeder Temperatur eine flache Kurve der letzten Minute. Die eigentliche
|
||||
Frage an eine PID-Regelung ist nicht „wie warm", sondern „hält sie" - und das kann eine
|
||||
Zahl grundsätzlich nicht zeigen. Der Ausschnitt hängt am Sollwert, damit die Abweichung
|
||||
sichtbar wird statt in der Skala unterzugehen.
|
||||
* Flächen - keine Kartenkanten, zwei Felder mit einem Hauch Helligkeitsunterschied.
|
||||
* Band - ein farbiges Band über die volle Breite sagt den Zustand, bevor eine Zahl
|
||||
gelesen wird: bereit, heizt, Bezug, Cold Extraction oder Standby. Neue Vorgabe.
|
||||
- Dafür gibt es zwei neue Schriftgrade (96 und 140 Pixel). Sie enthalten nur Ziffern,
|
||||
Komma, Punkt, Minus und Gradzeichen - mit vollem Zeichensatz wären sie um ein Vielfaches
|
||||
größer, ohne etwas beizutragen. Die größte Textschrift hatte bisher 48 Pixel, was für die
|
||||
großen Zahlen nicht reichte.
|
||||
- Ältere Stände haben in den Einstellungen noch die Nummer einer der früheren Darstellungen
|
||||
gespeichert; liegt sie außerhalb, fällt sie auf die Vorgabe zurück.
|
||||
- Der Aufbau der Bezugsanzeige - untere Zeile wechselt während eines Bezugs auf große
|
||||
Timer- und Gewichtsanzeige - folgt als nächster Schritt.
|
||||
|
||||
Version 1.7.3:
|
||||
- Die Schriftgröße steht jetzt auf der Info-Seite im Abschnitt „Darstellung", zusammen mit
|
||||
der Wahl der Temperaturanzeige und dem Live-Bezugsschirm. Dort gehört sie hin: Es ist
|
||||
eine Einstellung dieses Displays, keine Wartungsaufgabe.
|
||||
- Die Seite Reinigung & Wartung hat damit wieder vier Karten in zwei Spalten.
|
||||
- Die Auswahl selbst ist unverändert: drei Stufen, Neustart nach der Auswahl.
|
||||
- Sie steht auf allen Panels zur Verfügung, nicht nur auf dem 7-Zöller.
|
||||
|
||||
Version 1.7.2:
|
||||
- Die Schriftgröße lässt sich jetzt einstellen: Klein, Mittel oder Groß, zu finden auf der
|
||||
Seite Reinigung & Wartung in der neuen Karte „Darstellung".
|
||||
- LVGL-Schriften sind fest einkompilierte Bilddaten; es gibt sie nur in den Größen, die im
|
||||
Projekt liegen (14, 18, 28, 40 und 48 Pixel). Stufenlos skalieren lässt sich also nichts.
|
||||
Stattdessen gibt es drei Rollen - klein, normal, hervorgehoben -, die je nach Einstellung
|
||||
eine Stufe höher greifen.
|
||||
- Die großen Anzeigen für Temperatur und Uhrzeit bleiben unverändert: Sie sind bereits auf
|
||||
die Bildschirmgröße abgestimmt und sollen nicht mitwachsen.
|
||||
- Die Einstellung liegt lokal im Display, nicht auf der Hauptplatine - sie betrifft nur
|
||||
dieses Gerät. Nach der Auswahl startet der P4 neu, weil die Schriften in bereits
|
||||
angelegten Bedienelementen stecken und sich nicht nachträglich umhängen lassen.
|
||||
- Zu erwarten: In der Stufe Groß brauchen die Karten mehr Platz. Ob alle Seiten dann noch
|
||||
vollständig auf den Bildschirm passen, zeigt erst das Gerät.
|
||||
|
||||
Version 1.7.1:
|
||||
- Cold Extraction ist auf dem 7-Zoll-Panel dreispaltig: oben die drei Karten mit
|
||||
Erklaerungstext (Modus, Vorbenetzung, Bezugsende), darunter die knappen (Grundeinstellung,
|
||||
Hauptbezug, Pumpenschutz), der Speichern-Knopf frei unter allen sechs. Drei statt zwei
|
||||
Spalten, weil die Erklaerungstexte keine volle Zeilenbreite brauchen und so am Ende keine
|
||||
halbleere Reihe stehen bleibt.
|
||||
- Der Warnhinweis stand bisher als eigene Zeile am Seitenende, weit entfernt von dem
|
||||
Schalter, auf den er sich bezieht. Er sitzt jetzt in der Modus-Karte.
|
||||
- Reinigung & Wartung ist zweispaltig und besteht aus vier Karten: Wartungszaehler,
|
||||
Flush-Zeiten, Display-Helligkeit sowie Reinigung & Entkalkung. Bisher standen dort lose
|
||||
Zeilen unter blossen Zwischenueberschriften, dazwischen freistehende Knoepfe.
|
||||
- Anders als bei Bruehen und Cold Extraction sitzt der Speichern-Knopf hier IN der Karte:
|
||||
Jede Karte speichert etwas anderes, deshalb gehoert der Knopf zur Karte statt unter die
|
||||
Seite.
|
||||
- Alle drei umgestellten Seiten passen jetzt vollstaendig auf den Bildschirm. Die JC-Panels
|
||||
behalten ihr einspaltiges Layout.
|
||||
|
||||
Version 1.7.0:
|
||||
- Brew-Control ist auf dem 7-Zoll-Panel zweispaltig: Pre-Infusion und Brew-by-Weight oben,
|
||||
Brew-by-Time und Dampf-Timer darunter, der Speichern-Knopf frei unter allen Karten.
|
||||
Damit passt die Seite vollstaendig auf den Bildschirm und muss nicht mehr gescrollt
|
||||
werden - der teuerste Vorgang der Oberflaeche entfaellt dort ersatzlos.
|
||||
- Die Anordnung folgt der Bedeutung: links steht, was den Bezug startet, rechts, was ihn
|
||||
beendet.
|
||||
- Der Speichern-Knopf sitzt bewusst nicht in einer der Karten. Er speichert die ganze Seite
|
||||
und wuerde in einer einzelnen Karte so wirken, als gaelte er nur fuer diese.
|
||||
- Die JC-Panels bleiben einspaltig - dort ist der Platz knapp, nicht ueppig.
|
||||
- Cold Extraction und Reinigung/Wartung folgen als naechstes.
|
||||
|
||||
Version 1.6.27:
|
||||
- Beim Waveshare-Panel rollen scrollbare Listen nach dem Loslassen nicht mehr aus, sondern
|
||||
folgen nur dem Finger. Ohne Doppelpufferung entsteht beim Scrollen jedes Bild komplett
|
||||
neu; am staerksten faellt das beim Ausrollen auf, wo sich das Bild ohne fuehrenden Finger
|
||||
weiterbewegt und jedes Stocken unmittelbar sichtbar ist.
|
||||
- Die JC-Panels sind ausgenommen, ihr Bediengefuehl bleibt unveraendert.
|
||||
|
||||
Version 1.6.26:
|
||||
- Fehlerbehebung: Beim Bildlauf blitzten blaue Zwischenbilder auf. Ursache war der zweite
|
||||
Zeichenpuffer aus 1.6.25. Der Panel-Treiber lehnt eine Uebertragung ab, solange die
|
||||
|
||||
@@ -67,7 +67,7 @@ static void onState(const MachineState& st) {
|
||||
}
|
||||
if (bl < 0) bl = 0; if (bl > 100) bl = 100;
|
||||
if (bl != s_lastBacklight) {
|
||||
hal_backlight(bl);
|
||||
hal_backlight(bl); // meldet seine Dauer selbst, siehe jc_backlight_set()
|
||||
s_lastBacklight = bl;
|
||||
}
|
||||
}
|
||||
@@ -307,20 +307,37 @@ void setup() {
|
||||
// nicht (siehe WS7_DSI_RESTART).
|
||||
//
|
||||
// Deshalb startet der P4 sich nach einem Kaltstart genau einmal selbst neu, nachdem
|
||||
// der erste Hochlauf durch ist. Beim zweiten Durchlauf ist der Startgrund kein
|
||||
// Kaltstart mehr, die Bedingung greift also nicht erneut - eine Schleife ist
|
||||
// ausgeschlossen. Kostet rund drei Sekunden, aber nur beim Einschalten.
|
||||
// der erste Hochlauf durch ist. Kostet rund drei Sekunden, aber nur beim Einschalten.
|
||||
//
|
||||
// Frueher stuetzte sich die Absicherung dagegen allein auf den Startgrund: Beim zweiten
|
||||
// Durchlauf sei es kein Kaltstart mehr, eine Schleife also ausgeschlossen. Das stimmt
|
||||
// nicht - der Chip meldet auch nach dem selbst ausgeloesten Neustart wieder einen
|
||||
// Kaltstart, und dann startet er endlos neu. Genau das ist aufgetreten: Beleuchtung an,
|
||||
// nie ein Bild. Deshalb wird jetzt zusaetzlich vermerkt, dass der Neustart schon
|
||||
// stattgefunden hat; darauf ist Verlass, unabhaengig vom gemeldeten Startgrund.
|
||||
#if (JC_PANEL_TYPE == WS_PANEL_7H) && WS7_COLD_BOOT_RESTART
|
||||
if (esp_reset_reason() == ESP_RST_POWERON) {
|
||||
Preferences p;
|
||||
p.begin("bootguard", false);
|
||||
bool schonNeugestartet = p.getUChar("kaltneu", 0) != 0;
|
||||
if (schonNeugestartet) {
|
||||
// Zweiter Durchlauf: Vermerk loeschen, damit beim naechsten echten Einschalten
|
||||
// wieder genau ein Neustart erfolgt.
|
||||
p.putUChar("kaltneu", 0);
|
||||
p.end();
|
||||
esp_rom_printf("[Panel] Neustart bereits erfolgt - Hochlauf wird fortgesetzt\n");
|
||||
} else {
|
||||
p.putUChar("kaltneu", 1);
|
||||
// Der Fruehstart-Zaehler wurde oben bereits erhoeht. Diesen gewollten Neustart
|
||||
// darf er nicht mitzaehlen, sonst laeuft die Absturzsicherung nach ein paar
|
||||
// Einschaltvorgaengen in den Update-Modus.
|
||||
{ Preferences p; p.begin("bootguard", false); p.putUShort("early", 0); p.end(); }
|
||||
DBG_SERIAL.println(F("[Panel] Kaltstart - einmaliger Neustart fuer das Displaypanel"));
|
||||
DBG_SERIAL.flush();
|
||||
p.putUShort("early", 0);
|
||||
p.end();
|
||||
esp_rom_printf("[Panel] Kaltstart - einmaliger Neustart fuer das Displaypanel\n");
|
||||
delay(50);
|
||||
esp_restart();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
g_client.begin(); // UART starten, hello folgt automatisch in loop()
|
||||
|
||||
|
||||
@@ -235,9 +235,34 @@ void jc_backlight_set(int percent)
|
||||
if (percent > 100) percent = 100;
|
||||
if (percent < 0) percent = 0;
|
||||
uint8_t brightness = (uint8_t)((255 * percent) / 100);
|
||||
uint8_t wert = (uint8_t)(255 - brightness);
|
||||
int64_t t0 = esp_timer_get_time();
|
||||
|
||||
// Die Bridge uebernimmt eine neue Helligkeit nicht zuverlaessig beim ersten Mal. Der
|
||||
// Beispielcode von Waveshare setzt sie deshalb zweimal, mit einer Pause dazwischen,
|
||||
// ausdruecklich "sicherheitshalber". Uns fehlte diese Wiederholung: Das Bild stand
|
||||
// dann fertig da, blieb aber dunkel, bis die Uebernahme irgendwann doch griff - beim
|
||||
// Ein- und Ausschalten des Standby waren das mehrere Sekunden.
|
||||
//
|
||||
// Die Freigabe (0xAD) bleibt beim ersten Aufruf, danach nicht mehr: Sie erneut zu
|
||||
// setzen, waehrend die Beleuchtung laeuft, stoesst die Helligkeitsstufe der Bridge neu
|
||||
// an - der Beispielcode setzt sie darum ebenfalls nur ein einziges Mal.
|
||||
static bool freigegeben = false;
|
||||
if (!freigegeben) {
|
||||
ws7_bridge_write(0xAD, 0x01); // Panel-/Backlight-Freigabe
|
||||
ws7_bridge_write(0xAB, (uint8_t)(255 - brightness));
|
||||
vTaskDelay(pdMS_TO_TICKS(20)); // wie im Beispielcode: Bridge setzen lassen
|
||||
freigegeben = true;
|
||||
}
|
||||
|
||||
ws7_bridge_write(0xAB, wert);
|
||||
ws7_bridge_write(0xAA, 0x01); // Helligkeit uebernehmen
|
||||
vTaskDelay(pdMS_TO_TICKS(WS7_BACKLIGHT_LATCH_MS));
|
||||
ws7_bridge_write(0xAB, wert); // Wiederholung, siehe oben
|
||||
ws7_bridge_write(0xAA, 0x01);
|
||||
|
||||
esp_rom_printf("[HAL] %u ms: Helligkeit %d %% gesetzt, brauchte %u ms\n",
|
||||
(unsigned)(esp_timer_get_time() / 1000), percent,
|
||||
(unsigned)((esp_timer_get_time() - t0) / 1000));
|
||||
}
|
||||
|
||||
// =====================================================================================
|
||||
@@ -310,14 +335,26 @@ static bool ws7_touch_get_xy(esp_lcd_touch_handle_t tp, uint16_t *x, uint16_t *y
|
||||
bool got = s_touch_get_xy_orig(tp, x, y, strength, point_num, max_point_num);
|
||||
int64_t now = esp_timer_get_time();
|
||||
|
||||
// Unplausible Rohwerte gelten als Aussetzer, nicht als Beruehrung.
|
||||
// Unplausible Rohwerte gelten als Aussetzer, nicht als Beruehrung. Wie viele davon
|
||||
// anfallen, war bisher nirgends zu sehen - eine Beruehrung, deren Rohwerte lange
|
||||
// verworfen werden, sieht von aussen wie ein Display aus, das nicht reagiert.
|
||||
static uint32_t s_verworfen = 0;
|
||||
if (got && *point_num > 0 &&
|
||||
(x[0] > WS7_TOUCH_RAW_X_MAX || y[0] > WS7_TOUCH_RAW_Y_MAX)) {
|
||||
if (s_verworfen == 0)
|
||||
esp_rom_printf("[Touch] %u ms: Rohwert verworfen (x %u, y %u liegen ausserhalb)\n",
|
||||
(unsigned)(now / 1000), (unsigned)x[0], (unsigned)y[0]);
|
||||
s_verworfen++;
|
||||
got = false;
|
||||
*point_num = 0;
|
||||
}
|
||||
|
||||
if (got && *point_num > 0) {
|
||||
if (!s_touch_down)
|
||||
esp_rom_printf("[Touch] %u ms: Beruehrung erkannt bei x %u, y %u; %u Rohwerte vorher verworfen\n",
|
||||
(unsigned)(now / 1000), (unsigned)x[0], (unsigned)y[0],
|
||||
(unsigned)s_verworfen);
|
||||
s_verworfen = 0;
|
||||
s_touch_last_x = x[0];
|
||||
s_touch_last_y = y[0];
|
||||
s_touch_last_us = now;
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
// -------------------------------------------------------------------------------------
|
||||
// Firmware
|
||||
// -------------------------------------------------------------------------------------
|
||||
#define DISPLAY_FW_VERSION "1.6.10" // Firmware-Stand der P4-Display-Steuerung (Info-Seite)
|
||||
#define DISPLAY_FW_VERSION "1.11.3" // Firmware-Stand der P4-Display-Steuerung (Info-Seite)
|
||||
|
||||
// -------------------------------------------------------------------------------------
|
||||
// Protokoll
|
||||
|
||||
@@ -374,8 +374,10 @@
|
||||
#define LV_USE_ASSERT_OBJ 0 /*Check the object's type and existence (e.g. not deleted). (Slow)*/
|
||||
|
||||
/*Add a custom handler when assert happens e.g. to restart the MCU*/
|
||||
#define LV_ASSERT_HANDLER_INCLUDE <stdint.h>
|
||||
#define LV_ASSERT_HANDLER while(1); /*Halt by default*/
|
||||
#define LV_ASSERT_HANDLER_INCLUDE <esp_rom_sys.h>
|
||||
// Frueher hielt LVGL hier stumm in einer Endlosschleife an - das Display stand, ohne dass
|
||||
// irgendwo etwas davon zu sehen war. Jetzt sagt es wenigstens, dass es angehalten hat.
|
||||
#define LV_ASSERT_HANDLER esp_rom_printf("[LVGL] Zusicherung verletzt - Zeichenablauf haelt an\n"); while(1);
|
||||
|
||||
/*-------------
|
||||
* Debug
|
||||
@@ -567,7 +569,13 @@
|
||||
LV_FONT_DECLARE(lv_font_maven_pro_28) \
|
||||
LV_FONT_DECLARE(lv_font_maven_pro_40) \
|
||||
LV_FONT_DECLARE(lv_font_maven_pro_48) \
|
||||
LV_FONT_DECLARE(lv_font_clock_240)
|
||||
LV_FONT_DECLARE(lv_font_maven_pro_bold_96) \
|
||||
LV_FONT_DECLARE(lv_font_maven_pro_bold_140) \
|
||||
LV_FONT_DECLARE(lv_font_clock_120) \
|
||||
LV_FONT_DECLARE(lv_font_clock_180) \
|
||||
LV_FONT_DECLARE(lv_font_clock_240) \
|
||||
LV_FONT_DECLARE(lv_font_clock_270) \
|
||||
LV_FONT_DECLARE(lv_font_clock_360)
|
||||
|
||||
/*Always set a default font*/
|
||||
#define LV_FONT_DEFAULT &lv_font_maven_pro_14
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -496,6 +496,32 @@ static lv_display_t *display_init(esp_lcd_panel_handle_t panel_handle)
|
||||
// buf1 = heap_caps_malloc(buffer_size * sizeof(lv_color_t), MALLOC_CAP_DMA);
|
||||
assert(buf1);
|
||||
ESP_LOGI(TAG, "LVGL buffer size: %dKB", buffer_size * sizeof(lv_color_t) / 1024);
|
||||
|
||||
#if WS7_DIRECT_FB
|
||||
// PROJEKTAENDERUNG: LVGL zeichnet direkt in den Bildspeicher.
|
||||
//
|
||||
// Der Hersteller-Port legt einen eigenen Zeichenpuffer an; der fertige Inhalt wird
|
||||
// danach in den Bildspeicher kopiert. Bei 1280x720 in 24 Bit sind das zwei Durchgaenge
|
||||
// durch je 2,7 MB PSRAM - gemessen rund 250 bis 300 ms pro Bild, und das dauerhaft.
|
||||
// Genau deshalb hing die Oberflaeche eine gute Viertelsekunde hinterher, und Vorgaenge
|
||||
// mit mehreren Bildern brauchten Sekunden.
|
||||
//
|
||||
// Ist der Zeichenpuffer derselbe Speicher wie der Bildspeicher, laesst der
|
||||
// esp_lcd-Treiber das Kopieren weg und schreibt nur den Prozessor-Cache zurueck. Dazu
|
||||
// kommt LV_DISPLAY_RENDER_MODE_DIRECT: LVGL zeichnet dann nur die geaenderten Bereiche
|
||||
// neu, statt jedes Mal die ganze Flaeche.
|
||||
//
|
||||
// Preis: Gezeichnet wird in den Speicher, der gerade angezeigt wird - bei schnellen
|
||||
// Wechseln kann kurz eine Kante durchs Bild laufen. Mit nur einem Bildspeicher (den das
|
||||
// Panel verlangt, siehe WS7_SINGLE_FB) ist das ohnehin nicht zu vermeiden.
|
||||
void* fb0 = NULL;
|
||||
if (esp_lcd_dpi_panel_get_frame_buffer(panel_handle, 1, &fb0) == ESP_OK && fb0) {
|
||||
buf1 = fb0;
|
||||
buffer_size = LVGL_PORT_H_RES * LVGL_PORT_V_RES;
|
||||
ESP_LOGI(TAG, "LVGL zeichnet direkt in den Bildspeicher (%dKB)",
|
||||
(int)(buffer_size * sizeof(lv_color_t) / 1024));
|
||||
}
|
||||
#endif
|
||||
#endif /* LVGL_PORT_AVOID_TEAR_ENABLE */
|
||||
|
||||
ESP_LOGD(TAG, "Register display driver to LVGL");
|
||||
@@ -511,7 +537,7 @@ static lv_display_t *display_init(esp_lcd_panel_handle_t panel_handle)
|
||||
display, buf1, buf2, buffer_size * sizeof(lv_color_t),
|
||||
#if LVGL_PORT_FULL_REFRESH
|
||||
LV_DISPLAY_RENDER_MODE_FULL
|
||||
#elif LVGL_PORT_DIRECT_MODE
|
||||
#elif LVGL_PORT_DIRECT_MODE || WS7_DIRECT_FB
|
||||
LV_DISPLAY_RENDER_MODE_DIRECT
|
||||
#else
|
||||
LV_DISPLAY_RENDER_MODE_PARTIAL
|
||||
|
||||
@@ -39,6 +39,12 @@
|
||||
// nicht - siehe die ausfuehrliche Begruendung weiter unten beim Avoid-Tear-Schalter.
|
||||
// Auf 0 nur, wenn das Startverhalten erneut untersucht wird.
|
||||
#define WS7_SINGLE_FB 1
|
||||
// LVGL zeichnet direkt in den Bildspeicher statt in einen eigenen Puffer, dessen Inhalt
|
||||
// danach kopiert wird. GEPRUEFT: bringt an diesem Panel nichts (die Bildaufbauzeit blieb bei
|
||||
// 240-300 ms) und erzeugt Bildfehler, weil in denselben Speicher gezeichnet wird, aus dem
|
||||
// gerade angezeigt wird. Der Flaschenhals liegt also nicht im Kopieren, sondern im Zeichnen
|
||||
// selbst. Bleibt als Schalter erhalten, damit der Versuch nicht erneut gemacht wird.
|
||||
#define WS7_DIRECT_FB 0
|
||||
#define WS7_PARALLEL_RENDER 1
|
||||
|
||||
#define EXAMPLE_LVGL_PORT_TASK_MAX_DELAY_MS 500 //range 2 to 2000
|
||||
@@ -176,6 +182,14 @@
|
||||
// auf I2C antwortet. Meldet sich 0x14 beim Start nicht, diesen Wert erhoehen.
|
||||
#define WS7_TOUCH_POWER_MS 120
|
||||
|
||||
// Pause zwischen den beiden Helligkeitsuebernahmen der Bridge. Sie uebernimmt eine neue
|
||||
// Helligkeit nicht zuverlaessig beim ersten Mal; der Beispielcode von Waveshare setzt sie
|
||||
// darum zweimal. Ohne die Wiederholung stand das Bild fertig da, blieb aber dunkel - beim
|
||||
// Wechsel in den und aus dem Standby mehrere Sekunden lang. Der Beispielcode wartet 100 ms;
|
||||
// weniger genuegt hier, weil die Wiederholung ohnehin folgt. Bleibt die Beleuchtung wieder
|
||||
// hinterher, diesen Wert erhoehen.
|
||||
#define WS7_BACKLIGHT_LATCH_MS 20
|
||||
|
||||
// Prueffarbbalken statt Oberflaeche anzeigen. Sie entstehen im DSI-Baustein selbst und
|
||||
// benutzen weder Bildspeicher noch LVGL. Damit laesst sich trennen, ob die Anzeigekette
|
||||
// bis zum Panel arbeitet (Balken sichtbar) oder nicht (schwarz). Nur zur Fehlersuche.
|
||||
|
||||
+1302
-400
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user