Guten Abend! Ich habe mir mal die Mühe gemacht, die Oktalcodes für die Darstellung von einigen Sonderzeichen auf HD44780-kompatiblen-LCD-Displays zusammenzustellen. Umlaute kann man damit bei der Verwendung eines Arduinos z.B. wie folgt darstellen: lcd.print("R\365cklauf"); //wird dargestellt als" Rücklauf" \40 ! \41 " \42 # \43 $ \44 % \45 & \50 ( \51 ) \52 * \53 Plus-Zeichen \54 Komma \55 Minus-Zeichen \56 Punkt \57 Schrägstrich \72 Doppelpunkt \73 Semikolon \74 < \75 Gleichheitszeichen \76 > \77 ? \100 @ \134 eckige Klammer links \136 eckige Klammer rechts \137 accent circonflexe \138 Unterstrich \140 accent grave \173 geschweifte Klammer links \174 senkrechter Strich \175 geschweifte Klammer rechts \176 Pfeil nach rechts \177 Pfeil nach links \260 Minuszeichen \333 Kastenrahmen \337 hochgestellter Kastenrahmen(wie Potenz) \340 gr. alpha \341 ä \342 ß \343 klein epsilon \344 µ \350 Wurzelzeichen \351 hoch minus 1 \353 hoch x \356 n mit Oberstrich ( spanisch ) \357 ö \363 Zeichen unendlich \364 Ohm \365 ü \366 gr.Summe \367 pi ( klein ) \371 u mit strich rechts unten \375 geteilt durch \377 alle Leuchtpunkte eingeschaltet
safran schrieb: > Guten Abend! > Ich habe mir mal die Mühe gemacht, die Oktalcodes für die Darstellung > von einigen Sonderzeichen auf HD44780-kompatiblen-LCD-Displays > zusammenzustellen. Die Mühe hättest du dir sparen können. Entsprechende ASCII-Tabellen sind in jedem LCD-Datenblatt enthalten bzw. werden mit Google und dem Stichwort "hd44780 zeichensatz" in 2 Sekunden gefunden http://de.wikipedia.org/wiki/HD44780#Schrift_und_Zeichensatz
Karl Heinz Buchegger schrieb: > safran schrieb: >> Guten Abend! >> Ich habe mir mal die Mühe gemacht, die Oktalcodes für die Darstellung >> von einigen Sonderzeichen auf HD44780-kompatiblen-LCD-Displays >> zusammenzustellen. > > Die Mühe hättest du dir sparen können. > Entsprechende ASCII-Tabellen sind in jedem LCD-Datenblatt enthalten > bzw. werden mit Google und dem Stichwort "hd44780 zeichensatz" in 2 > Sekunden gefunden > > http://de.wikipedia.org/wiki/HD44780#Schrift_und_Zeichensatz Entschuldige. Ich hab ganz übersehen, dass du ja Oktalcodes angegeben hast. Benutzt zwar keiner, aber die sind in den Tabellen natürlich nicht enthalten.
....und dieser Code ist so wunderbar einfach in einen Text einzufügen! :-)
halb so wild. da macht man sich einmalig eine Ausgabefunktion, die die wichtigsten Ersetzungen zb für die Umlaute durchführt und für den Rest ein paar #define, die ins Header File für die LCD-Funktionen dazukommen. #define OHM "\xF4" und schreibt dann zb lcd.print( "480" OHM ); dann kann man das Ganze sogar im Code direkt lesen :-)
... und dann ist da noch die Frage, für welchen HD44780 diese Tabelle ist. Die gibt es nämlich mit unterschiedlichen Zeichensätzen ... Gruß Jobst
Jobst M. schrieb: > Die gibt es nämlich mit unterschiedlichen Zeichensätzen ... Allerdings. Ich drücke euch die Daumen, das ihr nie einen mit ROM Kennung B04 bekommt - da hat es einige Zeit gedauert, bis ich die richtige Übersetzungstabelle drin hatte, weil da nicht mal die ASCII an der richtigen Stelle waren... Die gebräuchlichsten Versionen sind A00 (ASCII und japanisch) und A02 (ASCII und europäisch), nachzulesen im Hitachi Datenblatt ab Seite 17.
Sorry für das alte Foren Posting popup... Aus Aktuellem Anlass: also ich fand die Tabelle echt hilfreich, hat auf Anhieb funktioniert!! Mein LCD Display ist von Adafruit, verwendet den I2C Bus und ich steuere das Ding mit dem Arduino Mega an. Vielen Dank für die Mühe!
Auch wenn der Beitrag zunächst vielleicht unnötig erscheint, mir hat er geholfen :D. Da die Ausgabe mit Ascii und UTF-8 vom Arduino nicht richtig funktionierte (gab immer ein japanisches Zeichen davor) war ich kurz vor dem verzweifeln. Dank deinem Beitrag ging es dann ;)
Hi Fast 4 Jahre alt und nur ein halbes Jahr nach dem letzten Post: Wieder Einer, dem Du mit Deiner Liste in kurzer Zeit geholfen hast. Bei mir waren es 'Durchläufe', wo ein japanisches Schriftzeichen den Display-Inhalt auflockerte. MfG
Huhu, und zwei Tage später hat es mir auch geholfen. :) Danke
...und noch einer! Vielen Dank für die Mühe, das war genau was ich gesucht habe!
Sinnvoll wäre eine Möglichkeit, dem Präprozessor/Compiler beizubringen, die Ersetzungen (z.B. ü -> \365) automatisch zur Compilezeit zu machen, sodass man Strings ganz einfach so schreiben kann, wie man sie meint. Und ohne eine ressourcenfressende Funktion zur Laufzeit bemühen zu müssen...
Nop schrieb: > Oktal? Kenne ich eigentlich nur von Sprit. ;-) Wir sind hier in einem Elektronikforum. Da ist dieses Wort für Röhren reservert. :-)
:
Bearbeitet durch User
Harald W. schrieb: > Wir sind hier in einem Elektronikforum. > Da ist dieses Wort für Röhren reservert. Das haut mich vom Sockel.
Light up the magic in every little part schrieb: >> Wir sind hier in einem Elektronikforum. >> Da ist dieses Wort für Röhren reservert. > > Das haut mich vom Sockel. Jetzt isse putt. :-(
Hi ich bin auch darüber gestolpert weil mein Hitachi Display die Sonderzeichen auch nicht kann :-( Aaaaber, bei mir funktioniert die Liste garnicht!! zb sieht das OHM Zeichen wie ein kleines w aus und im Monitorfenster wie ein Viereck und lcd.print("R\365cklauf"); da sieht das ü wie ein "Pfeil nach unten" aus und im Monitorfenster wie ein Viereck Habe Arduino 1.8.5 (die neueste Version)...und alles läuft auf einem alten WinXP-Rechner. Weiß jemand Rat?
Hi Das wird damit zusammen hängen, daß der Zeichensatz in Deinem Display ein Anderer ist - chinesisch wäre Da ganz groß im Kurs. Google wird Dir die Zeichentabellen und Deren Unterschiede zeigen können. Wenn Du eine Bezeichnung für Dein Display hast, um so besser. Sonst musst Du über den verbauten Controller gehen. MfG Hmm, eigentlich hätte Es aber funktionieren sollen :/ Passt der verbaute Controller? Sonst müsste ich Mal nach meinem 'Durchläufe' Beispiel (vor 10 Monaten fand ich diesen Thread auch Mal) heraussuchen.
:
Bearbeitet durch User
Was mich etwas irritiert ist das die Umlaute in dem Monitorfenster auch nicht angezeigt werden... Mein controler ist so eine 2 euro china teil, Nano V3 368 auf dem der auch gleich der COM3 CH340G drauf ist.
Hey keiner Antwortet mehr?! Ok also ich habe festgestellt, das meine Displays nicht die berühmten 1602 sind (sie sehen optisch nur so aus), deshalb wird für wohl ein andere code benötigt werden :-( Ich habe aus einem LC-Meter das Display ausgebaut und damit funktionieren die Umlaute. Fall geklärt -> ich muß mir jetzt paar neue 1602 besorgen.
Hallo, der Beitrag ist sehr hilfreich, trotz des Alters! Gibt es auch Codes für die Umlaute in Großschreibung?
Hi
>Gibt es auch Codes für die Umlaute in Großschreibung?
Für welchen Displaycontroller mit welchem Zeichensatz?
Textdisplays haben die Möglichkeit acht selbst definierte Zeichen
auszugeben. Das langt normalerweise für 'AÖÜ'.
MfG Spess
Busy B schrieb: > Gibt es auch Codes für die Umlaute in Großschreibung? Das kommt auf das Display an. Typischerweise gibt's ein Datenblatt dazu, in dem der oder die Zeichensätze dokumentiert sind. Wenns nur einer ist, kannst du also sofort und direkt sehen, welche Glyphen er anbietet und über welchen Code diese jeweils zu erreichen sind. Gibt es mehrere Zeichensätze und weißt du nicht, welcher dieser Varianten dein Display entspricht, dann ist die Sache auch nicht sehr viel schwieriger: Du suchst dir einen Code aus, dessen Glyph in jedem der möglichen Zeichensätze unterschiedlich aussieht und gibst eben diesen Code aus. Aus dem tatsächlich dargestellten Zeichen kannst du dann direkt den verwendeten Zeichensatz ermitteln. Wenn du den kennst, kannst du wieder die restlichen Codes direkt ablesen. Kurzfassung: Datenblatt lesen hilft.
Einfach im lcd_putchar für die 6 Umlaute und 'ß' ein kleines switch/case einbauen. Aber Achtung Fallgrube, das char Zeichen muß im switch zu uint8_t gecasted werden, sonst schlägt der Vergleich fehl!
spess53 schrieb: > Textdisplays haben die Möglichkeit acht selbst definierte Zeichen > auszugeben. Das langt normalerweise für 'AÖÜ'. Hi @Spess, Den Thread kennen wir ja noch. ;-) Stichwort: "user defined characters hd44780" Es sind - wie bekannt - die unbenutzten Fernschreibcode-Steuerzeichen, deren Platz (Adressen) man eben noch anderweitig verwenden kann. Hat nur den Nachteil, dass nach Abschalten der Versorgungsspannung diese Charakters verschwinden, und beim "Neustart" jedesmal wieder eine Routine durchlaufen werden muss. So seh' ich das jedenfalls. ciao gustav
Karl B. schrieb: > Hat nur den Nachteil, dass nach Abschalten der Versorgungsspannung diese > Charakters verschwinden, und beim "Neustart" jedesmal wieder eine > Routine durchlaufen werden muss. So seh' ich das jedenfalls. Je nachdem wie lange der Strom weg war. Finde ich persönlich übrigens die beste Eigenschaft der User-Defined-Characters, da es sich um Ram handelt schreibt man es nicht kaputt und das ermöglicht einem eine sehr interessante Nutzung, die allerdings fast nirgends erwähnt wird (auch in den Tutorials hier auf der Seite nicht). Normalerweise erzeugt man den Character und gibt diesen im Anschluss auf dem Display aus. Damit kann man schöne Bargraph-Anzeigen und ähnliches erzeugen, allerdings bei miserabler Auflösung und hoher Platzverschwendung. Es geht aber auch umgekehrt: Character initialisieren, auf das Display ausgeben und dann "manipulieren". Sprich den CGRam beschreiben während der Character bereits angezeigt wird. Damit lassen sich dann nette Animationen oder Bargraphs erstellen, die eine wesentlich höhere Auflösung haben. Ein senkrechter Bargraph auf einem Xx4er LCD kann dann bis zu 5 unterschiedliche Werte mit je einer Auflösung von 32 (5x8er Zeichen) Stufen darstellen und kostet nur eine Spalte. Gruß Dominik
Dominik schrieb: > und das ermöglicht einem eine sehr > interessante Nutzung, die allerdings fast nirgends erwähnt wird (auch in > den Tutorials hier auf der Seite nicht). OK, wer suchet, der findet. Ist zwar schon etwa 2 Jahre her. Sicher noch verbesserungsbedürftig. Aber als Quick-and-dirty-Lösung schon einmal nicht ganz verkehrt. Die "Fallstricke" sind eben in den Screenshots noch kurz angerissen. Ein Witz im Programm ist, dass in den Tabellen die Nullterminierung nicht verwendet wird, sonst könnte man die Null nicht als Pixelwert verwenden. Die Tabelle würde da stoppen. cpi temp2, 0x09 ; insgesamt achtmal Pixelwerte holen breq print_end0 ; wenn 9, dann zu print_end0 ciao gustav
:
Bearbeitet durch User
Wie schön dass es doch immer noch so alte Foren gibt in denen man immer wieder hilfreiche Tips findet. Danke für die Tabelle, so schnell und einfach hab ich noch keine Umlaute auf`s Display gebracht....
zwei Jahre später kann man einfach eine entsprechende Library verwenden, die die deutschen Umlaute direkt ausgeben kann: https://werner.rothschopf.net/202003_arduino_liquid_crystal_umlaute.htm klappt für HD44780U/ROM Code A00 und für den ST7070
werner schrieb: > zwei Jahre später kann man einfach eine entsprechende Library verwenden, > die die deutschen Umlaute direkt ausgeben kann: Hi Werner, bin auf deiner Seite unterwegs gewesen ..., viel/gute Arbeit deine Projekt Tutorials! Kleiner Hinweis zu deinen verwendeten "Timeouts" ... http://oneweekwonder.blogspot.com/2017/04/sign-up-to-signed-timeouts.html ich würde mal darüber nachdenken ... :-)!
1 | if (millis() - previousMillis > 3 * 1000UL && digitalRead(outputPin) == HIGH) |
Bernd schrieb: > Sinnvoll wäre eine Möglichkeit, dem Präprozessor/Compiler beizubringen, > die Ersetzungen (z.B. ü -> \365) automatisch zur Compilezeit zu machen, > sodass man Strings ganz einfach so schreiben kann, wie man sie meint. > Und ohne eine ressourcenfressende Funktion zur Laufzeit bemühen zu > müssen... Wer den gcc sowieso aus den Quellen selbst baut, kann das einbauen (glaube ich; ungetestet, sieht aber einfach aus). In src/libiconv-1.xx/HACKING heißt es:
1 | Adding new encodings |
2 | ==================== |
3 | For an indication which files need to be modified when adding |
4 | a new encoding, look for example at the 2007-05-25 ChangeLog |
5 | entry for RK1048. The lib/*.h file for an encoding is usually |
6 | generated by one of the tools in the tools/directory. |
7 | All you need to provide is the conversion table in the format |
8 | of the many *.TXT files. |
Im wesentlichen ist das eine Tabelle <HD44780-encoding> zu <unicode-encoding>. Zum Beispiel ein Ausschnitt aus src/libiconv-1.15/tests/ISO-8859-15.TXT, wo das Euro-Zeichen umkodiert wird:
1 | 0xA2 0x00A2 |
2 | 0xA3 0x00A3 |
3 | 0xA4 0x20AC |
4 | 0xA5 0x00A5 |
Ganz Faule könnten einfach eine vorhandene Tabelle umbauen, die sonst niemand braucht ;) Mit "-fexec-charset=HD44780-A00" würde man dem gcc sagen, dass er die neue Tabelle benutzen soll.
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.