Forum: Mikrocontroller und Digitale Elektronik FT813 / BRT815 Display-Controller Sonderzeichen


von Nik L. (firefly0815)


Lesenswert?

Hallo zusammen,

ich versuche mich gerade mit dem FT813/BRT815 Development-Kit und habe 
mir eine kleine GUI gebaut.

Als (C-)Library nutze ich die 
https://github.com/RudolphRiedel/FT800-FT813

Wie kann ich Umlaute, Sonderzeichen, etc. darstellen?
Beispielsweise Ää Öö Üü und das Zeichen für Grad-Celsius ° ?

Da meine Suche bisher erfolglos war... kennt ihr die nötigen 
Suchbegriffe/Links/Infos?

Danke im Voraus
Nick

von c-hater (Gast)


Lesenswert?

Nik L. schrieb:

> Wie kann ich Umlaute, Sonderzeichen, etc. darstellen?
> Beispielsweise Ää Öö Üü und das Zeichen für Grad-Celsius ° ?

Indem du einen Zeichensatz wählst, der diese Zeichen enthält.

> Da meine Suche bisher erfolglos war... kennt ihr die nötigen
> Suchbegriffe/Links/Infos?

Einfach das Datenblatt des BT81x lesen.

von Rudolph R. (rudolph)


Lesenswert?

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.

Einiges an Hinweisen ist auch hier:
https://www.lcdforums.com/forums/viewtopic.php?f=45&t=6894

Nur sind wir inzwischen bei EVE Asset Builder 2.7.1 und der Workflow ist 
doch etwas entspannter im Vergleich zu EAB 1.6.

von c-hater (Gast)


Lesenswert?

Rudolph R. schrieb:

> 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.

von Rudolph R. (rudolph)


Lesenswert?

c-hater schrieb:
> 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.

: Bearbeitet durch User
von Nik L. (firefly0815)


Lesenswert?

Vielen Dank für eure Antworten und Hinweise.

Ich bin etwas überrascht, dass der FT813 keine Implementierung von Haus 
aus bietet, aber ok.

Rudolph R. schrieb:
> 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?

Vielen Dank für eure bisherigen Hilfestellungen.

von Rudolph R. (rudolph)


Angehängte Dateien:

Lesenswert?

Nik L. schrieb:
> 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?

: Bearbeitet durch User
von Nik L. (firefly0815)


Lesenswert?

Rudolph R. schrieb:
> 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.


Rudolph R. schrieb:
> 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.


Rudolph R. schrieb:
>> 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.

: Bearbeitet durch User
von Rudolph R. (rudolph)


Lesenswert?

Nik L. schrieb:
> 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.

Welchen MikroController verwendest Du?

von Nik L. (firefly0815)


Lesenswert?

Nik L. schrieb:
> 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.

---

Rudolph R. schrieb:
> Was in dem Block "#if (TEST_UTF8 != 0..." drin ist kann man durch das
> hier ersetzen:

Habe ich umgesetzt und es wird UTF8 verwendet (Schrift ist jetzt 
"spielerischer")

In der tft.c --> initStaticBackground() habe ich den Demo-Text wie folgt 
geändert:

#if (TEST_UTF8 != 0) && (EVE_GEN > 2)
    EVE_cmd_setfont2(12,MEM_FONT,32);
    EVE_cmd_text(EVE_HSIZE/2, 15, 12, EVE_OPT_CENTERX,
    "EVE Demo von Äpfeln bei 0°C");
#else

#define MEM_FONT 61376UL ist in der tft.c gesetzt

Die Darstellung des °C-Symbol funktioniert nun, jedoch kommt anstelle 
eines Ä ein schwarzer Balken, einige Leerstellen und dann der Rest des 
Textes.

---

Rudolph R. schrieb:
> Welchen MikroController verwendest Du?

Atmel/Microchip ATSAMD51J18A (musste ich in zwei oder drei ifdef 
hinzufügen)


Vielen Dank Rudolph für deine Erklärungen/Ausführungen:)

: Bearbeitet durch User
von Rudolph R. (rudolph)


Lesenswert?

Nik L. schrieb:
> 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.

Nik L. schrieb:
> Atmel/Microchip ATSAMD51J18A (musste ich in zwei oder drei ifdef
> hinzufügen)

Ah, alle Varianten bekomme ich da vermutlich nicht rein. :-)

von Nik L. (firefly0815)


Angehängte Dateien:

Lesenswert?

Rudolph R. schrieb:
> 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.

---

Rudolph R. schrieb:
> 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.

Stimmt, der Kern sollte da wirklich keinen Unterschied ausmachen.

FYI / Feedback:

Deine Library wurde im Laufe dieses Projektes auf folgenden MCU 
getestet...
- ATSAM**C**21J18A, zusammen mit MA813A-WH50C
- ATSAM**D**21J18A, zusammen mit MA813A-WH50C (SAMD21 Xplained 
Pro-Board)
- ATSAMD51J18A mit BT815, Evervision VGG804838 mit cap.-touch (EVE3_50G)
(Wenn ich mich recht erinnere, musste ich in allen Fällen die ifdef 
erweitern.)

: Bearbeitet durch User
von Rudolph R. (rudolph)


Lesenswert?

Nik L. schrieb:
> Rudolph R. schrieb:
>> 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.
>
> Stimmt, der Kern sollte da wirklich keinen Unterschied ausmachen.

Es gibt einige Unterschiede zum Beispiel im DMA und NVIC, darum sind das 
auch zwei Targets, obwohl die SERCOM soweit an sich gleich ist.

Nik L. schrieb:
> Deine Library wurde im Laufe dieses Projektes auf folgenden MCU
> getestet...
> - ATSAM**C**21J18A, zusammen mit MA813A-WH50C
> - ATSAM**D**21J18A, 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?

von Nik L. (firefly0815)


Lesenswert?

Rudolph R. schrieb:
> Es gibt einige Unterschiede zum Beispiel im DMA und NVIC, darum sind das
> auch zwei Targets, obwohl die SERCOM soweit an sich gleich ist.

Rudolph R. schrieb:
> 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:

void spi_transmit(uint8_t data);
uint8_t spi_receive(uint8_t data);

static inline void EVE_pdn_set(void)
static inline void EVE_pdn_clear(void)

static inline void EVE_cs_set(void)
static inline void EVE_cs_clear(void)

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.

---

Rudolph R. schrieb:
> 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 :)

---

Rudolph R. schrieb:
> 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.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.