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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren