Mit den FT81x funktioniert das noch nicht so richtig gut, da diese pro Zeichensatz nur 128 Zeichen unterstützen.
In einem FT813 habe ich mal ° gefaked, indem ich ein 'o' in einer kleineren Version der eingebauten Fonts von Hand an die richtige Stelle geschrieben habe.
Mit den BT81x kann man UTF-8 für die Zeichen-Kodierung verwenden, wenn man einen entsprechenden Font dafür mit dem EVE Asset Builder konvertiert hat.
Mein Beispiel enthält einen UTF-8 font dessen Verwendung per Default allerdings auskommentiert ist.
Der wird vom Controller ins externe Flash vom BT81x geschrieben und dann von dort verwendet.
Such mal nach "TEST_UTF8" in der tft.c.
Mit den BT81x kann man UTF-8 für die Zeichen-Kodierung verwenden, wenn
man einen entsprechenden Font dafür mit dem EVE Asset Builder
konvertiert hat.
Nicht unbedingt nötig.
Zwei der eingebauten ROM-Fonts enthalten von Hause aus "Extended ASCII", also Zeichen von 0..255. U.a. auch alles, was für deutsch nötig ist.
Wie schon gesagt: einfach DB lesen. Da steht sowas drin. Welche Fonts das sind und auch auf welchen Positionen die Glyphs dort genau stehen.
Unschön nur: bei beiden Fonts handelt es sich um monospaced Fonts. Also ein schickes Schriftbild kann man nicht erwarten. Will man das auch noch, kommt man um selbstgebaute Fonts tatsächlich nicht herum.
Zwei der eingebauten ROM-Fonts enthalten von Hause aus "Extended ASCII",
also Zeichen von 0..255. U.a. auch alles, was für deutsch nötig ist.
Fast, aber doch nicht so ganz.
Die Fonts 17 und 19 enthalten 127 Zeichen aus dem Bereich 0x80 bis 0xFF, gemapt auf 0x00 bis 0x7F.
Damit stehen zwar komplementär zu den Fonts 16 und 18 zusätzliche Zeichen zur Verfügung, aber "einfach so" kann man die nicht direkt ausgeben, so als Bestandteil von einem String.
Und man kann zwar eigene Fonts laden, aber eben auch nur mit 128 Zeichen, man muss die Sonderzeichen also irgendwie anders behandeln.
Da funktioniert das mit UTF-8 bei den BT81x erheblich besser, man schreibt einfach in einen String und gibt das mit einem Kommando so aus.
Und das funktioniert dann auch bei CMD_BUTTON, CMD_TOGGLE und CMD_KEYS.
Mit den BT81x kann man UTF-8 für die Zeichen-Kodierung verwenden, wenn
man einen entsprechenden Font dafür mit dem EVE Asset Builder
konvertiert hat.
Mein Beispiel enthält einen UTF-8 font dessen Verwendung per Default
allerdings auskommentiert ist.
Der wird vom Controller ins externe Flash vom BT81x geschrieben und dann
von dort verwendet.
Such mal nach "TEST_UTF8" in der tft.c.
Vielen Dank Rudolph für die Hilfestellung und die Erstellung der library.
Ich werde wohl nur das BT815-Board nutzen um keine zwei Implementierungen umsetzen zu müssen.
(Aktuell habe ich keinen Flash-Speicher auf dem Dev-Board. Dieser kommt im Laufe der folgenden Woche).
Mit den Keywords UTF8 font, Zeichen-Kodierung und dem EVE Asset Buidler werde ich mich nochmal beschäftigen müssen.
Gibt es eine Liste mit Beispiel-Fonts für den BT815?
Mit den Keywords UTF8 font, Zeichen-Kodierung und dem EVE Asset Buidler
werde ich mich nochmal beschäftigen müssen.
Ich habe vorhin mal meinen Beispiel-Code auf den aktuellen Stand gebracht um endlich mal das 5.0.5 Release zu machen.
Und dabei habe ich mal den Funtype 24 Zeichensatz in tft_data.c neu mit EAB 2.7.1 konvertiert und dabei die angehängte Datei verwendet um die Zeichen zu begrenzen.
Gibt es eine Liste mit Beispiel-Fonts für den BT815?
Was meinst Du?
Die integrierten Fonts sind im Programming Guide und EAB konvertiert .ttf oder .otf und damit hat man praktisch unbegrenzt Zeichensätze zur Auswahl.
Ok, etwas weniger wenn man freie Fonts benutzen möchte, aber es gibt zum Beispiel die hier: https://fonts.google.com/
Edit: das ist nett, die Datei in UTF-8 wurde scheinbar automatisch in was anderes konvertiert?
Mein Beispiel enthält einen UTF-8 font dessen Verwendung per Default
allerdings auskommentiert ist.
Der wird vom Controller ins externe Flash vom BT81x geschrieben und dann
von dort verwendet.
Such mal nach "TEST_UTF8" in der tft.c.
Kann ich den Font auch direkt bei(jedem) Start in den RAM_G laden und den zusätzlichen Flash-Chip (am BT815) umgehen?
Aktuell habe ich wie erwähnt keinen Flash auf dem Board.
Ich habe vorhin mal meinen Beispiel-Code auf den aktuellen Stand
gebracht um endlich mal das 5.0.5 Release zu machen.
Ich musste gerade feststellen, dass ich das Projekt bereits Mitte 2021 gestartet habe und deine Library aktualisieren sollte.
Ich werde mir wohl ein frisches Projekt aufsetzen, deine aktuelle Library einbinden und nochmal die Beispiele durcharbeiten.
Vielleicht komme ich so wieder besser in die Thematik rein.
Gibt es eine Liste mit Beispiel-Fonts für den BT815?
Was meinst Du?
Die integrierten Fonts sind im Programming Guide und EAB konvertiert
.ttf oder .otf und damit hat man praktisch unbegrenzt Zeichensätze zur
Auswahl.
Verstehe, ein manueller Task mit viel Flexibilität.
Kann ich den Font auch direkt bei(jedem) Start in den RAM_G laden und
den zusätzlichen Flash-Chip (am BT815) umgehen?
Aktuell habe ich wie erwähnt keinen Flash auf dem Board.
Ja, das geht und ich habe das gerade mal mit meinem Beispiel und einem ATSAMC21 an einem EVE3-50G ausprobiert.
Die Geschichte mit dem FLASH ist da im wesentlichen ja nur drin als Beispiel wie man mit dem FLASH umgehen könnte.
Was in dem Block "#if (TEST_UTF8 != 0..." drin ist kann man durch das hier ersetzen:
1
EVE_cmd_inflate(0, flash, sizeof(flash));
2
EVE_memWrite32(61376UL + 32UL, 4096UL);
Das ist jetzt speziell für das flash-image das ich in tft_data.c habe.
unified.blob : 0 : 4096
Funtype_24_ASTC.glyph : 4096 : 57280
Funtype_24_ASTC.xfont : 61376 : 320
z-lib compressed, unpacked size is 61952
const uint8_t flash[8199] PROGMEM =
{...
Also 61376 ist die Start-Adresse der Funtype_24_ASTC.xfont Datei, einfach weil das CMD_INFLATE() in dem Fall an Adresse 0x00000 vom SRAM des BT81x entpackt.
Und 32 ist der Offset an dem die Start-Adresse der Glyphen für den Font stehen (Seite 100 vom Programming Guide 2.3).
Ach ja, das MEM_FONT habe ich auch geändert, sonst klappt das mit dem Benutzen des Zeichensatzes nicht.
#define MEM_FONT 61376UL
Man kann die Adresse der Glyphen beim Konvertieren im EAB einstellen, oder man konvertiert den Font eben nur einmal und ändert den Offset wenn man den Font woanders liegen haben möchte.
Wenn man im EAB in den "FLASH UTILITIES" unter "Generate Flash Image" erst eine .glyph und dann eine .xfont in das Image zieht, dann wird die Adresse der Glyphen in der .xfont automatisch angepasst.
Das macht es erheblich einfacher wenn man mehrere Fonts verwendet.
Ich werde mir wohl ein frisches Projekt aufsetzen, deine aktuelle
Library einbinden und nochmal die Beispiele durcharbeiten.
Vielleicht komme ich so wieder besser in die Thematik rein.
Soweit geschehen, das/Rudolphs Beispiel läuft im frischen Projekt.
Die Darstellung des °C-Symbol funktioniert nun, jedoch kommt anstelle
eines Ä ein schwarzer Balken, einige Leerstellen und dann der Rest des
Textes.
Hmm, ist die Datei auch wirklich mit UTF-8 Encoding gespeichert?
Im Studio ist das File -> Advanced Save Options -> Encoding: Unicode(UTF-8 without signature)- Codepage 65001.
Ich muss das nachher noch mal mit einem E51 ausprobieren, aber grundsätzlich ist der C21 ja das gleiche Gemüse mit einem anderen Kern.
Hmm, ist die Datei auch wirklich mit UTF-8 Encoding gespeichert?
Im Studio ist das File -> Advanced Save Options -> Encoding:
Unicode(UTF-8 without signature)- Codepage 65001.
Da lag das Problem... war NICHT als UTF8 encodiert-.-
Die "EVE Demo von Äpfeln bei 0°C" läuft nun wie gewünscht.
Ich werde mich die nächsten Tage/Wochen noch intensiver mit EVE beschäftigen.
Deine Library wurde im Laufe dieses Projektes auf folgenden MCU
getestet...
ATSAMC21J18A, zusammen mit MA813A-WH50C
ATSAMD21J18A, zusammen mit MA813A-WH50C (SAMD21 Xplained
Pro-Board)
Oh, hast Du den D21 über das C21 Target benutzt?
Das habe ich noch gar nicht geprüft.
Ein D20 Xplained pro liegt hier und ich erinner mich gerade das ich mal ein D21 Board gekauft hatte, wo auch immer das ist, DollaTek SAMD21 M0-Mini.
Oh, zwei Trinket-M0 fliegen auch noch irgenwo herum.
Zu viele Bastel-Boards und Displays Fehler :-)
Das Bild sagt mir zweierlei.
Zum einen hast Du den DMA nicht aktiviert.
Zum anderen benutzt Du ein eigenes main.c und machst keine Laufzeitmessung.
Die Laufzeitmessung benutze ich zur Kontrolle, ok, aber ohne DMA wenn der Controller schon DMA kann?
Oh, hast Du den D21 über das C21 Target benutzt?
Das habe ich noch gar nicht geprüft.
Mist, meine Aussage bezüglich Tests auf den genannten MCU, ist nicht sehr aussagekräftig-.-
Folgende Funktionen aus dem EVE_target.x, sind durch eigene- oder AtmelStart-Funktionen ersetzt worden:
Zusätzlich wurde jeweils die main.c ersetzt und die Laufzeit-Timer entfernt.
Habe bitte Verständniss, dass ich dieses Projekt nicht mehr ganz so vor Augen habe... lag seit Mitte 2021 in der Schublade und erst jetzt, habe ich wieder etwas Zeit hierfür.
Das Bild sagt mir zweierlei.
Zum einen hast Du den DMA nicht aktiviert.
Zum anderen benutzt Du ein eigenes main.c und machst keine
Laufzeitmessung.
Die Laufzeitmessung benutze ich zur Kontrolle, ok, aber ohne DMA wenn
der Controller schon DMA kann?
Ich habe bisher keine Erfahrung mit DMA auf ARM/ATSAM gemacht und mich noch etwas davor gescheut, wenn ich es nicht "brauche" :)
Aktuell läuft der SAMD51 auch "nur" mit 48MHz.
Gut möglich, dass sich dies bald ändert :)
Ein D20 Xplained pro liegt hier und ich erinner mich gerade das ich mal
ein D21 Board gekauft hatte, wo auch immer das ist, DollaTek SAMD21
M0-Mini.
Oh, zwei Trinket-M0 fliegen auch noch irgenwo herum.
Zu viele Bastel-Boards und Displays Fehler :-)
Ich höre dabei raus, dass dir ein Test vom SAMD20/21 noch fehlt.
Ich habe die SAMD21-Hardware und das MA813A-WH50C noch hier liegen.
Am Wochenende könnte ich zur Unterstützung und Dank für deine Hilfe, einen Test mit deiner test-main und einer modifizierten Version (falls überhaupt nötig) vom EVE_target_ATSAMC21.h machen.