PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AtMega16 und Sonderzeichen?



Rabenauge
13.05.2010, 01:31
Hallöle.
Ich möchte gerne mein Display (I2C) am NiboBee etwas besser nutzen.
Dafür brauche ich auch die Sonderzeichen, denn auf einem 16x3 ist es blöd, dauernd OE,AE usw. zu schreiben, und das Display hat es ja auch drauf.
Ausserdem möchte ich mir anschliessend auch einige selbstdefinierte Zeichen machen.
Drittens braucht meine bisherige Vorgehensweise offenbar viel Speicherplatz.

Bisher gebe ich Dinge so aus:

lcd_setCursor(S,Z);
printf("<<<Druecken");

oder
printf("Spannung %2d", volt);

Ersetze ich das ue durch ein ü gibts Zeichensalat.
Ich habe zum Display eine Tabelle (Datenblatt), in der aufgeführt wird, wie man jedes Zeichen aufrufen kann, weiss aber nicht, wie ich das dem Display mitteilen muss...
Genau darum aber gehts mir.
Kurz gesagt: Hilfe [-(

syn_error
13.05.2010, 01:54
Ersetze ich das ue durch ein ü gibts Zeichensalat.
im acsii ist kein platz für sonderzeichen deswegen weicht man auf unicode z.b. utf-8 bei linux und windows ISO 8859-1 aus.
das "ä" ist bei utf-8 z.b.: 0xC3A4 und beim lcd liegt das "ä" auf 0xE1.


wie ich das dem Display mitteilen muss
1. "Dr" ausgeben
2. 0xF5 ausgeben
3. "cken" ausgeben

Rabenauge
13.05.2010, 11:28
Danke, so einfach klappt es leider nicht.
Das Beste, was ich bei dem Versuch herausbekomme, ist, dass das Display ununterbrochen voller kleiner, nach links zeigender Pfeile geschrieben wird.
Offenbar haut also irgendwas nicht hin.
Kannes sein (das Display ist ein EA Dog-M) dass das einen speiziellen Zeichensatz benutzt oder so?
Ich habe im Datenblatt eine Tabelle, die die verfügbaren Zeichen enthält, dort finde ich z.B. das "ü" in der Zeile 0001 und Spalte 1000.
Wie erkläre ich das aber nun dem Compiler?

syn_error
13.05.2010, 12:00
Ich habe im Datenblatt eine Tabelle, die die verfügbaren Zeichen enthält, dort finde ich z.B. das "ü" in der Zeile 0001 und Spalte 1000.
die "üblichen" zeichen a-z, A-Z und 0-9 sind immer auf der ascii position den rest ordnet der hersteller nach belieben.
bei diesem display controller ist das "ü" auf 0b10000001 = 0x81 und beim hd44780 ist das "ü" auf position 0xF5 = 0b11110101.

Jaecko
13.05.2010, 12:05
Was ich hier mache:
Ich lass vor der Ausgabe ne Ersetz-Funktion drüberlaufen.
Also einfach den String abrattern, überall wo ein "echtes" ü steht, den ASCII-Wert des Zeichens gegen den Wert austauschen, den das Display-ü hat. Haut wunderbar hin.

Rabenauge
15.05.2010, 09:36
Deibel noch eins, es klappt nicht. Wenn ich 0x81 ausgebe, erscheint ein ".".

Hab es eben auch mit vertauschten Zeilen/Spalten versucht, nix.
Es kommen Sonderzeichen (offenbar Zufallstreffer), aber nie die, die ich will... #-o

Ausserdem ergibt folgende Zeile:
printf(0x81);

die Compiler-Warnung: ../NiboBee_Intelligence.c:88: warning: passing argument 1 of 'printf' makes pointer from integer without a cast


Irgendwo hab ich noch nen Wurm drin.
Wie gesagt: anstatt des gewünschten "ü" wird hier ein "." ausgegeben.
Wo, zum Kuckuck ist hier noch ein Fehler?

Rabenauge
24.05.2010, 16:28
Hab es herausgefunden, man muss es nur richtig notieren:

printf("Wert: \x7f");

Nächste Übung in der Richtung wird dann irgendwann sein, eigene Zeichen zu definieren, aber für den Moment genügen mit die Erweiterungen völlig.