www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit ASCII Code


Autor: norad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

ASCII-Code nach ISO-Norm 8859-1 haben die "ÄÖÜäöü"
hexwert "C4h,D6h,DCh,E4h,F6h"

d.h. wenn man nun im Texteditor die Umlaute eingibt haben sie auch den
entsprechenden o.g.  Hexwert

Wenn ich die ASCII-Code Tabelle mit dieser Routine Ausgebe

#include <stdio.h>


void main(void)
{
  int i;

  for(i=0; i<256; i++)
  {
    printf("%d, %x,  %c\n",i,i,i);
  }



}

Haben die Umlaute ganz andere Hexwerte für Ü = 9Ah, Ö = 99h, Ä = 8Eh.


So jetzt die frage woher kommt der Unterschied?

Hab nämlich das Problem diese Abweichung in meiner ASCII-CODE Tabelle
zuberechnen.

Weiss da jemand einen Rat bzw. hat ne Lösung?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du beschreibst nicht, wo Du das "Programm" laufen lässt. Angenommen,
es sei ein Konsolenfenster auf einem PC, dann gilt, daß dieses eine
andere Zeichencodierung verwendet, nämlich die sogenannte Codepage 850
oder 437. Diese stammen noch aus der Ursteinzeit des PC und geben die
von IBM eingeführte 8-Bit-Zeichencodierung wieder.

Mach mal folgendes:

Stelle im Konsolenfenster die Schriftart "Lucida Konsole" anstelle
der Rasterschriftart ein.

Gebe folgendes in der Eingabeaufforderung im selben Konsolenfenster
ein:

   mode con cp select=1252

und rufe dann im selben Konsolenfenster Dein Programm auf.

Na, was passiert?

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du bist drauf reingefallen, dass unter Windows der _ANSI_-Zeichensatz
gilt.
Der ASCII- ist mit dem ANSI-Zeichensatz nur bis 0x7F bzw. 127 (= die
ersten 128 Zeichen) identisch.
Da in beiden die Umlaute einen größeren Wert als 127 haben, hast du
somit auch den Unterschied erklärt.

HTH

Ralf

Autor: Besserwisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha!

Das würde bedeuten, dass ich im Editor oder wo auch immer den ANSI
Zeichensatz rausschmeissen muss sonnst compiliert der mir ja falsch.

Es geht darum auf einem Grafik Display Umlaute auszugeben und ich
dachte das man mit dem ASCII-Code.

Der µC den ich einsetzte ist ein Atmel AT89C51ED2


Trotzdem Danke!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du ein LC-Display verwendest, dann musst Du schon ins Datenblatt
des LC-Displays sehen, was das für einen Zeichensatz verwendet. Die
beliebten HD44780-Controller haben oberhalb 0x7f eine völlig eigene
Sichtweise und halten sich an keinerlei Norm.

Der Anmerkung von Ralf sei noch hinzugefügt, daß ASCII nur einen
7-Bit-Zeichensatz beschreibt.
8-Bit-Zeichensätze vor ANSI (auch CP1252, Latin-1 oder ISO 8859-1)
waren teilweise sehr kreativ "anders", wie der berühmte
IBM-Zeichensatz, der des Atari ST oder die auf Macs verwendete
Variante.

Autor: Norad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rufus!

Das Display hat keinen Zeichensatz den muss ich ja selber bereitstellen
und die Zeichen senden.

Display ist von Electronik Assembly  EA DIP122-5NLED

Autor: Kai Riek (kairiek)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Norad,

dann programmiere deinen Zeichensatz fürs Display so, dass er zu deinen
ASCII Zeichen passt. Ich habe das gleiche Display und stand ebenfalls
vor diesem Problem. Ich habe dann einfach den HC44780 Zeichensatz
kopiert. Anbei eine ZIPped BMP Datei mit meinem Zeichengenerator. Liest
sich von Links nach Rechts und alle Zeichen haben das Format 5x7 Pixel.
Die grauen Linien dienen nur als Orientierung.

MFG

Kai

Autor: Kai Riek (kairiek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: Ich hab mir ein Spezieltool programmiert, das mir dieses BMP in HEX
Code umwandelt. So muss ich die ganzen Daten nicht von Hand eingeben,
ist bei 256 Zeichen ganz schön viel (~1,5kB mit einem Byte Abstand).

Autor: Norad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab meine Tabelle mal grob angepasst.

Also wenn ich das richtig interpretiere muss ich den Ansicode von den
Adressen her gleich abbilden d.h. die 256 Zeichen.



Danke Kai.

Autor: rkhb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>muss ich den Ansicode von den
>Adressen her gleich abbilden d.h. die 256 Zeichen.

Nach Deinem Beispiel: ja. Solltest Du Tastatureingaben auswerten, musst
Du in der Dokumentation Deines Compilers nachschlagen, ob und wann zwei
Bytes zurückgegeben werden (Unicode). Meist ist das aber nicht der
Fall.

Ich fasse mal kurz zusammen:

Ein Windows-Programm (GUI) arbeitet normalerweise mit dem, was
Microsoft ANSI-Format nennt. Das ist identisch mit der IANA-Bezeichnung
"Windows-1252". Eine Gegenüberstellung der Zeichensätze gibt es hier:

http://de.selfhtml.org/inter/sprache.htm

ISO-8859-1 und Windows-1252 sind nicht identisch, was Du immer wieder
erfährst, wenn Du mit Firefox auf Homepages gehst, die
fahrlässigerweise in Windows erstellt und lediglich mit dem Internet
Explorer getestet wurden oder umgekehrt mit dem Internet Explorer einen
Linuxianer besuchst.

HTH
viele grüße
ralph

Autor: rkhb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch was vergessen:

Ein Programm in der Windows-Konsole ("Eingabeaufforderung") arbeitet
normalerweise mit einem Zeichensatz, den Microsoft ASCII nennt:

http://msdn2.microsoft.com/de-de/library/9hxt0028(...

Manchmal wird er auch Codepage 850 genannt und wenn ein uraltes
DOS-Programm keine richtigen Linien zeichnen kann, stellt man
zweckmäßigerweise die Codepage auf 437 um. Rufus T. Butterfly hat
gezeigt, wie man die Codepage in der Konsole auf Windows-1252 umstellen
kann.

viele grüße
ralph

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.