Forum: PC-Programmierung Wie kyrillische Texte für LCD Modul HD44780 A02 aufbereiten?


von B. J. (bjue)


Lesenswert?

In einem Embedded System soll zusätzlich Russisch angezeigt werden. Es 
wird ein Display nach HD44780 Standard benutzt. Dieses gibt es mit 
Character Pattern ROM A0 (=Lateinisch + Umlaute...) und A2 (u. a. 
kyrillisch). Die russischen Texte sollen, wie auch die anderen Texte 
quasi in ASCII passend zum verwendeten Character Pattern ROM abgelegt 
werden. Zur Zeit werden die Texte als String in C definiert.

Erste Frage: Es gibt für die Software keine Möglichkeit herauszufinden, 
welches Characder Pattern ROM eingebaut ist (A0 oder A2), oder?

Zweite Frage: Gibt es elegante Möglichkeit den Russischen Quelltext, der 
beispielsweise in einer Word Datei vorliegt in eine Textdatei zu 
wandeln, aus der ich dann die Texte in mein C Programm übernehmen kann?
Ich benötige also einen Konverter "russischer Text in Word" --> "HD44780 
A02". Oder gibt es noch andere Verfahrensweisen?

: Verschoben durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Da das vor allem den PC betrifft, schiebe ich das mal nach
PC-Programmierung.

Ich denke, wenn du den Word-Text erstmal irgendwie als UTF-8 oder
UTF-16 exportiert bekommst, kannst du mit Standardwerkzeugen wie
recode in einen 8-bit-Zeichensatz konvertieren (KOI8-R oder
cp1252).  Von da musst du dann wohl einen einfachen Mapper für
das HD44780 machen.  Wenn ich das richtig sehe, sind da nur
kyrillische Großbuchstaben drin, d. h. man muss die Texte aus
lateinischen Klein- und Großbuchstaben sowie den paar kyrillischen
Zeichen zusammenfummeln.

Entweder ein kleines C-Programm mit einer Konvertierungstabelle
schreiben oder die Scriptsprache deines geringsten Misstrauens
damit beauftragen.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Erster Anlaufpunkt ist da das passende PDF.
http://www.adafruit.com/datasheets/HD44780.pdf Seite 18 zeigt die 
Ascii-Codes wie sie im CGROM definiert sind.
Mit der CP855 (http://www.ascii-codes.com/cp855.html) stimmt das nicht 
mal im Ansatz überein.

Bei Unicode-Texten in Word sollte ein kleines VBA-Makro für die 
Umwandlung in die LCD-Codepage reichen.

von Frank K. (fchk)


Lesenswert?

B. Jue schrieb:
> In einem Embedded System soll zusätzlich Russisch angezeigt werden. Es
> wird ein Display nach HD44780 Standard benutzt. Dieses gibt es mit
> Character Pattern ROM A0 (=Lateinisch + Umlaute...) und A2 (u. a.
> kyrillisch). Die russischen Texte sollen, wie auch die anderen Texte
> quasi in ASCII passend zum verwendeten Character Pattern ROM abgelegt
> werden. Zur Zeit werden die Texte als String in C definiert.
>
> Erste Frage: Es gibt für die Software keine Möglichkeit herauszufinden,
> welches Characder Pattern ROM eingebaut ist (A0 oder A2), oder?

nein.

Ich würde auf ein Grafikdisplay umsteigen. Da habt Ihr mehr 
Flexibilität, was den Zeichensatz angeht, und müsst nicht zwei 
verschiedene Geräteversionen ausliefern. Die Sprachumschaltung wäre dann 
einfach nur ein Menüpunkt.

Hardwaremäßig ändert sich da nicht viel, das ist im Wesentlichen 
Softwareaufwand.

fchk

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Frank K. schrieb:
> Da habt Ihr mehr
> Flexibilität, was den Zeichensatz angeht, und müsst nicht zwei
> verschiedene Geräteversionen ausliefern.

Muss man mit dem HD44780 auch nicht, es sei denn, die zweite Variante
wäre Japanisch. ;-)  Dafür ist nämlich die obere Hälfte des A00-ROMs
vorgesehen.  Der A02-ROM enthält sowohl die kompletten ISO8859-1-
Sonderzeichen als auch die kyrillischen Zeichen, die sich nicht durch
ASCII approximieren lassen.

Allerdings könnte man mit der Grafikanzeige wenigstens einigermaßen
Groß- und Kleinbuchstaben darstellen.

von russe (Gast)


Lesenswert?

Hatte mal eine ähnliche Aufgabenstellung, aber auf einer anderen 
Hardware (altes mobiles Gerät).
Lösung damals: Hatte die Texte im Excel, Word ist aber auch ok.
Hab ein VBA Makro programmiert, welches mir die kyrillischen Zeichen auf 
die entsprechende Zeichentabelle deines Zielsystems konvertiert. Sind 
letztlich nur Zuweisungen, bei denen du jedem kyrillischen Buchstaben 
den entsprechenden Wert aus der LCD Zeichentabelle zuweist. Die 
Textpaare Deutsch - Kyrllisch hab ich dann in einer CSV Datei 
abgespeichert.
Dann hab ich mir ein kleines Programm geschrieben, welches im C 
Quelltext die deutschen Texte gegen die kyrillischen ersetzt, 
entsprechend der CSV Datei.
Und fertig war der Quelltext für die kyrillische Version.
Dadurch hat man verschiedene Quelltextversionen, nämlich Deutsch und 
Kyrillisch.

Je nach Hardware (genug Speicher!) wäre es natürlich auch möglich, beide 
Versionen des Textes auf dem Gerät zu speichern und je nach Einstellung 
die eine oder die andere zu laden. Dann nimmt man die CSV Datei und lädt 
sie bei jedem Programmstart am besten in eine Hashtabelle (flotter 
Zugriff mit String Schlüssel). Die ganzen C Strings klammert man mit 
einer Übersetzer Funktion. printf("Hallo") wird zu 
printf(translate("Hallo")), wobei translate() die entsprechende 
Übersetzung aus der Hashtabelle holt.
Diese Version ist für leistungsstarke Systeme, z.B. PCs die übliche 
Variante.

Ich habe bei meiner Arbeit beide Varianten bereits benutzt (jeweils bei 
char=1 byte Programmen, bei Unicode also, wchar, vereinfacht sich 
alles!) und muss sagen, dass sich der Mehraufwand am Anfang voll und 
ganz auszahlt, denn Erweiterungen sind sehr schnell gemacht!

von B. J. (bjue)


Lesenswert?

Erst mal vielen Dank für die Tipps!

Frank K. schrieb:
> Ich würde auf ein Grafikdisplay umsteigen. Da habt Ihr mehr
> Flexibilität, was den Zeichensatz angeht, und müsst nicht zwei
> verschiedene Geräteversionen ausliefern. Die Sprachumschaltung wäre dann
> einfach nur ein Menüpunkt.
> Hardwaremäßig ändert sich da nicht viel, das ist im Wesentlichen
> Softwareaufwand.

Ich würde schon gerne ein Grafik Display benutzen, die Softwareänderung 
wäre nicht das Problem. Aber auf Grund der kleinen Stückzahl ist es 
Ziel, die bestehende Hardware natürlich ohne eine Hardwareänderung der 
Leitplatte und/oder Änderungen der Abmessungen zu benutzen. Daher der 
Ansatz, einfach ein anderes Display mit dem A02 Character ROM 
Zeichensatz zu verwenden. (verwendet wird ein Standard 20x4 Display, 
z.B. Conrad 182667)
Ein baugleiches Grafikdisplay gibt es leider nicht, oder?

von Frank K. (fchk)


Lesenswert?

B. Jue schrieb:

> Ich würde schon gerne ein Grafik Display benutzen, die Softwareänderung
> wäre nicht das Problem. Aber auf Grund der kleinen Stückzahl ist es
> Ziel, die bestehende Hardware natürlich ohne eine Hardwareänderung der
> Leitplatte und/oder Änderungen der Abmessungen zu benutzen. Daher der
> Ansatz, einfach ein anderes Display mit dem A02 Character ROM
> Zeichensatz zu verwenden. (verwendet wird ein Standard 20x4 Display,
> z.B. Conrad 182667)
> Ein baugleiches Grafikdisplay gibt es leider nicht, oder?

Schau Dir Conrad 182669 an. Da brauchst Du nur einen Steckeradapter:

P/S -> fest auf high
C86 -> fest auf high
V0 -> V0 (Kontrast)
V1..V4 -> offen lassen
DB7..DB0 -> an DB7..DB0 auf Eurem Board
RD -> E
RW -> RW
RS -> RS
/RES könnt Ihr wahrscheinlich fest auf high setzen
CS2 -> fest auf high
CS1B -> CS

So, damit ist die Sache erledigt, der Rest ist Software.

Die Abmessungen stimmen bei diesem Beispiel nicht exakt, aber da müsste 
sich auf dem Markt auch was finden lassen. Das Angebot ist riesig.

fchk

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.