Hi Leute. Das Problem sieht so aus. Wenn ich mit WinAVR und PN einen String im eeprom ablege, kann ich den sauber auslesen und auf LCD darstellen. Aber wehe dem, es ist ein Umlaut... Das LCD kann die Umlaute darstellen, wenn ich sie direkt mit meiner Routine als hexwert an das LCD übergebe. Aber aus dem eeprom kommt in diesem Fall nur Unfug. Kann das sein, dass PN die Umlaute nicht korrekt übergibt oder was kann das sein ?? Ach ja , noch was ganz allgemeines: Kann man eigentlich mit VC++ o.ä. auch solche Programme schreiben und kompilieren oder geht das grundsätzlich nicht. Wäre mal interessant wenn beim tippen dann die property-list aufgeht. Ich dächte, ich hab da mal was gelesen, weiß aber nicht mehr wo. ´Habt ihr davon mal was gehört? Ciao Uwe
Hi die Kodierung der Umlaute im ASCII-Code ist anders als die im LCD. Du mußt das also entweder zur Laufzeit oder im Quelltext anpassen. Matthias
Hi Matthias das ist schon klar, die Reihefolge stimmt in meinem Fall mal schon. Allerdings muss halt für das LCD 0x20 abgezogen werden...wegen der nicht vorhandenen Fernschreib-Steuerzeichen im Zeichensatz des LCD´s. Ansonsten wie gesagt stimmt alles.. ich kann es ja ausgeben. Es geht nur darum, WIE ich dem PN beibringe, das richtige Zeichen zu speichern. Bsp.: static char p3z3[2][27] eeprom_segment = {"Temperatur des Kühlkörpers:".....} wie muss ich da denn "ü" und "ö" anpassen Oder versteh ich dich da falsch ?!?! Danke Uwe
Hi so: ...emperatur des K\252hlk\246rpe... Also \ und anschließend den Code des Buchstabens. Matthias
Nachdem ich jetzt mal die ASCII-Tabellen durchforstet hab, kommen mir die Zahlen bekannt vor. ;-) des K\252hlk\246rpe... funktioniert übrigens nicht. Allerdings hat sich heraus gestellt, dass dieses Problem nur bei dem Programmers Notepad auftaucht, UltraEdit schreibt das file richtig. Grübel. Hatte mich schon mit dem Gedanken: if(data==0xFC)data=0x81; abgefunden. Aber du hast mir auf jeden Fall schon mal weitergeholfen. DANKE.
Die korrekte Syntax zum Schreiben von Konstanten in C ist '\ooo' (ooo = Oktalcode des ASCII-Zeichens) oder '\xhh' (hh) = HexCode des ASCII-Zeichens)
Tjaaaa, '\ooo' funktioniert mal einwandfrei. '\hxx' funktioniert NUR wenn nachfolgend ein Leerzeichen steht. aber das ist dann ja auch im Text An solchen Kleinigkeiten kann man Zeit verschwenden....mann mann mann. BTW ich bekommen bei UltraEdit beim ausführen der make-anweisen den Fehler: Fehler beim Erzeugen des Prozesses297 bla bla bla.... schon mal jemand gehört ? Liegt das vielleicht an XP ?!?! Ansonsten schon mal HERZLICHEN DANK an alle
>'\hxx' funktioniert NUR wenn nachfolgend ein Leerzeichen steht. >aber das ist dann ja auch im Text Ich habe doch geschrieben '\xhh', als z.B. \x0D für ASCII-Code <OD>=CR Zu UltraEdit: Ich habe unter ToolConfiguration folgendes Eingetragen: Command Line: C:\winavr\utils\bin\make Working Directory: %p Output to List Box (*) Capture Output (*) Dann funktioniert Make Aufruf via UltraEdit einwandfrei auch unter XP.
> Ich habe doch geschrieben '\xhh'
Hilft übrigens auch nicht, Peter. Entgegen landläufiger Meinung enden
Escape-Folgen nicht nach zwei oder drei Ziffern automatisch, sondern
am ersten Zeichen, das nicht mehr eine gültige Ziffer zur Zahlenbasis
ist. Bei Oktalzahlen ist das natürlich einfacher als bei
hexadezimalen.
Aber:
"\xd\n" ist identich zu "\x0d\n" (oder "\r\n" oder
"\x0d\x0a")
"\7" ist identisch zu "\007" oder "\0000007" (oder \a)
"\xd00f" ergibt nicht etwas das Zeichen 0xd0 gefolgt von '0' und
'f',
sondern es wäre ein String, der aus einem einzelnen Zeichen (wide
char!) besteht. "\xd0" "0f" wäre dagegen der String, der aus dem
Zeichen 0xd0 plus '0' plus 'f' besteht. Eigens für diesen Zweck
mußte
ANSI C die string concatenation einführen, d. h. zwei
aufeinanderfolgende string literals werden (ohne ein \0 Zeichen
dazwischen) miteinander verkettet:
"f" "o" "o" ist identisch zu "foo".
Btw., ASCII bezeichnet nur die Zeichen 0 bis 127, alles andere ist
jenseits von ASCII (IBM Codepage 437, oder IBM Codepage 850 oder ISO
8859-1 oder all dies).
@Peter >Ich habe doch geschrieben '\xhh', als z.B. \x0D für ASCII-Code Wechstaben verbuchselt.... tztztztz zum Thema UltraEdit: nahe dran... das Arbeitsverzeichnis '%p' funzt nur , wenn man dort %p hinschreibt und nicht %d ;-)) @Joerg >Hilft übrigens auch nicht, Peter. Gott sei Dank... ich bin nicht zu blöd @euch beide Danke , wieder was dazu gelernt. Ich bin ja schon froh , das wenigstens einer von euch beiden auch nicht ALLES gewusst hat, da kommt man sich nicht ganz so jämmerlich vor..... ;-) Danke Uwe
Hallo, hab noch einen kleinen Denkanstoss: geht es, wenn ich schreibe #define ü /x87 #define ä /x88 (die Zahlen stimmen nicht) also das der Precompiler die Umlaute gleich von selbst ersetzt??? Währe für einen LIB interresant, man müsste sich dann nicht mehr darum kümmern. Gruß, Florian
Wie soll das funktionieren? Du kannst ja keine Definitionen in Anführungszeichen setzen. Wenn Du einen richtigen Namen wählst sollte das aber so gehen. x87 und x88 sind dabei einfach mal Dummywerte. 1. Möglichkeit: #define UMLAUT_OE_KLEIN "/x87" #define UMLAUT_OE_GROSS "/x88" String: "Umlaute sind m" UMLAUT_OE_KLEIN "glich!" 2. Möglichkeit: Was zu bevorzugen ist, wenn man auch Texte von außen reinbekommen will ist natürlich eine Tabelle anzulegen, wo alle Zeichen die reinkommen können per Index nummeriert sind und dann dort einfach der Codes des Zeichens vom LCD steht. (verständlich ausgedrückt?) char win2lcd_table[] = { .., "A", "B", "C", .., 0x87, .., 0x88, .. }; out_c = win2lcd_table[in_c]; oder out_c = win2lcd_table + in_c So sollte das eigentlich funktionieren, wenn ich den Pointer richtig angegeben habe. :) 3. Möglichkeit Alles was größer als 127 ist, ist auf alle Fälle nicht ASCII und wird damit nicht funktionieren. Daher reicht es nur diese zu filtern und damit die Tabelle klein zu halten. Siehe Möglichkeit 2.
@Ronny hatte schon für meine beiden nötigen Buchstaben die einfache Variante if(data==0xFC)data=0x81; geschrieben. Die Varianten 2 und 3 taugen aber dann schon zur "Internationalisierung" falls das Gerät öfters mit PC´s kommuniziert die vielleicht verschiedene Codepages benutzen. z.B y <> z bei amerikanischer Tastatur Bleibt auf jeden Fall mal in meinem Hinterkopf. Ciao , Uwe
Freut mich, dass Du eine Lösung hast. Im übrigen hat sich bei mir oben der Fehlerteufel eingeschlichen. Die Buchstaben sollten natürlich nicht in Anführungszeichen stehen, sondern so: char win2lcd_table[] = { .., 'A', 'B', 'C', .., 0x87, .., 0x88, .. }; Schliesslich sind das ja keine Strings, sondern nur Zeichen.
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.