Umlaute am LCD

hab diese Information nirgends gefunden und war selber sehr frustriert:

lcd.printByte(225) = ä
lcd.printByte(239) = ö
lcd.printByte(245) = ü

oder
lcd.print(" #ALT160# ") =ä
lcd.print(" #ALT139# ") =ö
lcd.print(" #ALT228# ") =ü

Das wird aus dem Datenblatt des Display Controllers klar. Seite 17:

Kann man auch in Hex angeben. z.B.:

lcd.print("Ger\xE1t");

Wenn das Zeichen nach dem Hex-Code aber als Hex-Ziffer interpretiert werden kann muss man den String stückeln (z.B. "Ger\xE1""t")

Das Grad-Zeichen findest man so auch in der Tabelle (0xDF)

Hi

Da hab' ich auch noch einen Link für:
Umlaute/Sonderzeichen HD44780, microkontroller.net

MfG

Die Auflistung in dem Post #1 ist aber nicht für jedes LCD richtig, da sollte man schon ins Datenblatt schauen.
Aber so auf die schnelle für den Anfänger kann man die Auflistung wohl zeigen, wenns nicht richtig darstellt, wird der sich noch melden.
Ich hatte nämlich schon das vergnügen damit, bis ich auf die Idee kam die Auflistung ist nicht für mein LCD.

hab gerade selber gemerkt das meine version nicht wirklich zuverlässig funktioniert.
Und das mit dem \ im string hab ich nicht gekannt. funktioniert aber zuverlässig.
Also danke für den Hinweis.

BTW: gibt es eine Möglichkeit den ASCII Tabel zu ändern (temporär im projekt) damit die umlaute gleich richtig interpretiert werden?

Der Zeichensatz steht fest im ROM des Displays.

Und die Umlaute sind auch nicht Teil des Standard ASCII Satzes. Der geht nur bis 127. Darüber gibt es Erweiterungen, aber in mehreren Versionen

Du könntest die Umlaute aber selber zeichnen.
Ein Zeichen wird in einer 8x5 Matrix erstellt:

byte customChar[8] = { // So hast Du die Matrix vor Dir (so halbwegs), 0=bleibt dunkel, 1=leuchtet
  B01010 ,
  B00000 ,
  B01110 ,
  B10001 ,
  B10001 ,
  B10001 ,
  B10001 ,
  B01110
}; // soll ein ö sein, ungetestet

Das ist zwar Spielerei aber es gibt Programme, da kannst Du ne Schriftart laden und verändern und da kann man jedes Pixel bearbeiten. Mit so einem Programm würde ich das Vorzeichnen. Vielleicht gibt es was, das auch gleich anzeigt wie es wirklich am Display ausschaut.

lg dony

Damit muss man die Umlaute aber immer noch per Hand in den Text einfügen. Lediglich die Zahl dafür ist einfacher zu merken

Android Appstore:
LCD for Arduino
LCDsketcher 4 Arduino
Arduino Character Creator
usw...

Ja, stimmt natürlich. Da sich die ASCII Tabelle aber nicht ändern läßt, zumindest nicht so einfach, ist es besser als nichts. IMHO
Das sind dann max. 6 Buchstaben, die selten vorkommen. Wenn es um Schönheit geht ist es mir die Mühe wert aber das muss jeder für sich entscheiden.

lg dony

Wie es mir immer in den Fingern juckt, wenn ich seh zB "zumindest nicht so einfach" :smiley:

Wär doch mal ein Projekt für combie, ROMs auslesen und beschreiben.

skorpi080:
Wie es mir immer in den Fingern juckt, wenn ich seh zB "zumindest nicht so einfach" :smiley:

Wär doch mal ein Projekt für combie, ROMs auslesen und beschreiben.

Das kenne ich, hab auch an sowas gedacht. Aber wie Du sagst, das wäre (vielleicht) was für combie. Oder auch für jemanden anders. Bin noch nicht soo lange im Forum.

lg dony

Hallo,
meines wissen wird der 44780 nicht mehr hergestellt, wenn er also echt
ist, dann sollte das:

/*
  LiquidCrystal Library - Special Chars
 */

#include <LiquidCrystal.h>

//set constants for number of rows and columns to match your LCD
const int numRows = 2;
const int numCols = 16;

// defines for some useful symbols
const byte degreeSymbol = B11011111;
const byte piSymbol     = B11110111;
const byte centsSymbol  = B11101100;
const byte sqrtSymbol   = B11101000;
const byte omegaSymbol  = B11110100;  // the symbol used for ohms

byte charCode = 32; // the first printable ascii character
int col;
int row;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()
{
  lcd.begin(numRows, numCols);

  showSymbol(degreeSymbol, "degrees");
  showSymbol  (piSymbol, "pi");
  showSymbol(centsSymbol, "cents");
  showSymbol(sqrtSymbol, "sqrt");
  showSymbol(omegaSymbol, "ohms");
  lcd.clear();

}

void loop()
{
   lcd.print(charCode);
   calculatePosition();
    if(charCode == 255)
    {
        // finished all characters so wait another few seconds and start over
        delay(2000);
        lcd.clear();
        row = col = 0;
        charCode = 32;
    }
    charCode = charCode + 1;
}

void calculatePosition()
{
   col = col + 1;
   if( col == numCols)
   {
      col = 0;
      row = row + 1;
      if( row == numRows)
      {
         row = 0;
         delay(2000); // pause
         lcd.clear();
      }
      lcd.setCursor(col, row);
    }
}

// function to display a symbol and its description
void showSymbol( byte symbol, char * description)
{
  lcd.clear();
  lcd.write(symbol);
  lcd.print(' '); // add a space before the description
  lcd.print(description);
  delay(3000);
}

einfach so durchlaufen.
Und wenn mich nicht alles täuscht, dann ist es die Arduino IDE- die die
Sonderzeichen nicht richtig verarbeitet, oder die Lib.
Im ROM des 44780 sind 2 Zeichensätze hinterlegt, vielleicht kann man auch
die zweite Seite im ROM aufrufen.
Gruß und Spaß
Andreas

SketchQuelle: Arduino Kochbuch

  1. ein ROM kann man nicht ändern,
  2. das ROM kann man beim hd44780 und Kompatiblen nicht auslesen
  3. den HD44780 gibt es in verschiedenen Versionen und die unterscheiden sich im Zeichensatz. Es gibt also keine 2 Zeichensätze im HD44780 sondern 2 Standart-Versionen mit verschiedenen Zeichensätzen.

Grüße Uwe

Den ROM kann man nicht ändern, ist klar. Aber tauschen und davor einmal beschreiben. Aber das ist sicher nicht leicht und ich wüsste gar nicht wo ich beginnen sollte.
edit: Alles nur theoretisch/hypotetisch!

lg dony

Ich wüsste schon wo ich anfangen würde.... gogel :smiley:

dony:
Den ROM kann man nicht ändern, ist klar. Aber tauschen und davor einmal beschreiben.

Das ROM ist im HD44780; :o :o :o :o :o :o wie willst Du das tauschen?

Na irgendwie haben die es doch beschrieben, dann könnte man es auch wieder beschreiben!

Echt jetzt? Ein Read Only Memory nochmal beschreiben?
Geht maximal einmal, und Du brauchst einen guten Medizienmann, der die Rauchzeichen deutet :wink:

Gruß André

Na klar echt jetzt!
Woher soll man was lesen können wenn man es nicht einmal beschreiben kann?
Ist jetzt alles halbwissen, aber logisches denken :wink: