Mikrocontroller LCD - ASCII Codierung falsch

OP #3106970
Lesenswert?
• ▲
▼
Sehr geehrtes Forum,
ich habe folgendes Programm geschrieben, welches einen im FLASH 
gespeicherten String ausliest, und Zeichen für Zeichen auf dem Display 
angibt, dabei achtet es auf die Null Terminierung am Ende des Strings, 
und auf ein Zeilenumbruchszeichen "#".
1
.include "M48PAdef.inc"
2

3
; //////////////////////////////////////////////////////////////
4
;  SPEICHER
5
;  Kevin Riehl - 28.03.2013
6
;  
7
;  Dieses Programm läd Zeichenketten / Texte in den FLASH,
8
;   liest diese dann wieder aus und stellt sie auf dem LCD dar
9
;  
10
; //////////////////////////////////////////////////////////////
11
; /////// Defintionen
12
; //////////////////////////////////////////////////////////////
13

14
.DEF STACK_LOW = R16
15
.DEF STACK_HIG = R17
16

17
; //////////////////////////////////////////////////////////////
18
; Stackpointerinitialisierung
19
  LDI STACK_LOW, LOW(RAMEND)    ;Stackpointer initialisieren
20
  OUT SPL, STACK_LOW
21
  LDI STACK_HIG, HIGH(RAMEND)   ;Stackpointer initialisieren
22
  OUT SPH, STACK_HIG
23
; //////////////////////////////////////////////////////////////
24

25
RCALL Wait1000MS
26
RCALL LCD_INIT
27

28

29
b:
30
RCALL LCD_HOME
31

32
LDI ZL,LOW (text*2)
33
LDI ZH,HIGH(text*2)
34

35
loop:
36
  LPM
37

38
; Testen ob Zeilenumbruch
39
  MOV R28,R0
40
  CPI R28,'#'
41
  BREQ l
42

43
; Testen ob Ende
44
  TST R0
45
  BREQ a
46

47
; Zeichen ausgegeben
48
  MOV INFO,R0
49
  RCALL LCD_DATA
50

51
; Zeiger auf nächstes Byte setzen
52
  ADIW ZL,1
53
  RCALL Wait1000MS
54
  RJMP loop
55

56
a :
57
  RJMP b 
58

59
l :
60
  RCALL LCD_LINE2
61
  ADIW ZL,1
62
  RJMP loop
63
; //////////////////////////////////////////////////////////////
64

65
.include "LCD_Lib.asm"
66

67
text: .DB "Schön jemacht#weiter so DDX!",0

Komisch ist nun, dass auf dem Display nicht "Schön jemacht#weiter so 
DDX!"
angezeigt wird, sondern "SchΣn..." ankommt.

Dasselbe Problem, kann ich mich erinnern, hatte ich auch in meiner Zeit, 
als ich mit C++ gearbeitet habe.

Hat das vielleicht was mit meinem Editor / meiner IDE zu tun, oder was 
ist das falsch?

(Ich habe AVR Studio 4.x)

m.f.G. Developer_X
#3107020
Lesenswert?
• ▲
▼
Ein "Ö" bzw. die Umlaute werden schon drin sein, aber eben an anderer 
Stelle.
Die normalen Buchstaben und Ziffern werden mit ASCII-Code dargestellt, 
aber für alles andere schau mal in die Zeichentabelle deines Display's. 
Da steht dann auch die Codierung der einzelnen Zeichen. Meist kann man 
auch noch ein paar selbst definieren, schau mal in's Datenblatt vom 
Display.
Gast #3107050
Lesenswert?
• ▲
▼
Die Frage ist nicht, ob es drin steht, sondern ob es auch an der 
richtigen Stelle steht.

In Latin-1 Codierung ist ein 'ö' dem Code 0xF6 zugeordnet. In meinem 
HD44780 Datasheet stehen zwei mögliche Tabellen. In der ersten steht an 
der Stell 0xF6 so ein Summenzeichen. In der zweiten Tabelle steht bei 
0xF6 ein 'ö'.

Ergo hast du wohl ein Display mit Asiatischen Encoding.
Gast #3107355
Lesenswert?
• ▲
▼
troll schrieb:
> Aus der Zeichentabelle den passenden Code raussuchen, einsetzen
>>text: .DB "Sch",42,"n jemacht#weiter so DDX!",0
> fertig. Notfalls benutzerdefinierte Zeichen.

....oder während der Ausgabe einfach auf Umlaute prüfen und ggf. 
ASCII-Code automatisch anpassen bevor ausgegeben wird....quasi so wie es 
jeder macht....;-)

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.