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
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.
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.
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
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.
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!
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.