Forum: Mikrocontroller und Digitale Elektronik Falsche Zeichen bei LCD-Ausgabe


von Valentin D. (valentin)


Lesenswert?

Hallo zusammen

Habe hier ein kleines Problem mit einer LCD-Anzeige. Ich habe das 
AVR-Tutorial durchgelesen, und eigentlich läuft alles einwandfrei, außer 
dass statt Zeichen wie "p" ein "<<" angezeigt wird ("g"->"hocheins", 
"j"->"hochzwei",usw).
Das Datenblatt von HD44780S habe ich stundenlang durchgeguckt. Vor allem 
die Zeichencodetabellen, aber bin leider nicht daraus schlau geworden.
Vielleicht kennt einer dieses Problem schon, und kann mir dabei helfen.

Mit freundlichen Grüßen

von Matthias (Gast)


Lesenswert?

Was für ein LCD?

Stimmt das Displaytiming wirklich? (Evtl. werden Bits gewürfelt)

Sourcecode?

etc. pp.

von Valentin D. (valentin)


Angehängte Dateien:

Lesenswert?

Ich benutze ein einzeiliges LCD mit 16 Zeichen.
Eingestellt auf:
4Bit Interface, 1 Line, 5x10 Font

Merkwürdig ist, dass Zeichen, die Unten etwas dran haben (p,g,q,...) 
durch Andere ersetzt werden.


;Programmschleife

.def wait_low    = r24
.def wait_high    = r25

.equ ZPS      = 4

wait:
    sbiw  wait_low, 1
    brne  wait
    ret

von holger (Gast)


Lesenswert?

Ich würde hier mal suchen. Sieht irgendwie merkwürdig aus.

lcd_sende:
        swap  temp
        cbr    temp, 0xE0
        rcall  Portexponder_ausgabe
    rcall   lcd_enable
    cbr    temp2, 0xE0
    mov    temp, temp2
        rcall  Portexponder_ausgabe
        rcall   lcd_enable
        ldi    wait_low, low(50*XTAL/ZPS/1000000)
    ldi    wait_high, high(50*XTAL/ZPS/1000000)
        rcall   wait
        ret


Wie sieht die Funktion aus
        rcall  Portexponder_ausgabe

von Valentin D. (valentin)


Angehängte Dateien:

Lesenswert?

Danke für die schnelle Antworten.
Die Daten werden von SPI in ein Schieberegister (aus 74HCT273, der als
Portexponder dient) reingeschoben.

von holger (Gast)


Lesenswert?

Ich kann ja kein ASM, aber denk mal über folgendes nach:

        cbr    temp, 0xE0

Dein Display benutzt einen 4Bit Datenbus

    cbr    temp2, 0xE0

Wo kommt der Wert in temp2 eigentlich her?

von Valentin D. (valentin)


Angehängte Dateien:

Lesenswert?

Danke dass du versuchst mir zu helfen holger.

Der Wert 0xE0 -> 0b11100000 kommt daher, weil die ersten 4 Bits für 
Daten stehen, und der Bit4 (RS) wird bei lcd_data auf 1  und bei 
lcd_command auf 0 gesetzt. In temp wird der obere Nibble, und in temp2 
wird am Anfang der untere Nibble gesichert. Das Ganze explizit zu 
erklären wäre zu kompliziert, aber das Programm muss doch richtig 
funktionieren, sonst würden die Zeichen von a bis p (außer g,j,p) alle 
falsch angezeigt werden.

Es muss irgentwie an dem CGROM, und den Tabellen liegen.

von Benedikt K. (benedikt)


Lesenswert?

Du verwendest die 10x5 Schriftart. Das Display sieht auch so aus, als 
wenn es 11 Pixel pro Zeile hätte (und nicht nur 8 wie normale Displays.)
Eventuell sind da diese Zeichen anders belegt, da die p,g,j usw. mit 
voller Höhe, speziell für den 11 Zeilen Modus weiter hinten liegen. 
Versuch mal den Wert 230, das sollte ein p sein.

von holger (Gast)


Lesenswert?

>Das Ganze explizit zu erklären wäre zu kompliziert

Mir ist nichts zu kompliziert ;)

>, aber das Programm muss doch richtig
>funktionieren, sonst würden die Zeichen von a bis p (außer g,j,p) alle
>falsch angezeigt werden.

Das ist richtig. Also diese "hocheins" oder "hochzwei"
sind gelegentlich im oberen Zeichensatz eines LCD zu finden.
Dazu müsste aber D7 im Datenbyte gesetzt sein.

Was ist denn das für ein Display?

von Valentin D. (valentin)



Lesenswert?

Also, ich habe jetzt alle möglichen Zeichen durchprobiert, und das 
Programm nochmals kontrolliert.

Die Werte "230, D7" sind leider auch falsch.

Ist es möglich den CGROM Speicher irgendwie umzuschreiben?
Oder, was ich noch garnicht begriffen habe, wie man zwischen den beiden 
Tabellen (A00,A02) umschaltet?
Die Beiden scheinen irgendwie vermischt zu sein! Denn statt das 
"Ohm"-Zeichen aus A00 wird das "drei viertel"-Zeichen aus A02 angezeigt.

Die Displaybezeichnung lautet: GB-1494V-0
Habe es aus einem Laserdrucker ausgebaut.

Hoffe ihr könnt mir helfen, wäre schade das Ding einfach wegzuschmeißen.

von Benedikt K. (benedikt)


Lesenswert?

Valentin R. wrote:
> Ist es möglich den CGROM Speicher irgendwie umzuschreiben?

Nein. Wie der Name schon sagt, ist es ein bei der Herstellung fest 
eingprogrammiertes ROM.

> Oder, was ich noch garnicht begriffen habe, wie man zwischen den beiden
> Tabellen (A00,A02) umschaltet?

Garnicht. Das sind verschiedene Versionen des Chips, die hinten 
aufgedruckt sind (beim orginalen 44780). Das einige was du machen 
kannst: Die 8 CGRAM Stellen beschreiben.

> Die Beiden scheinen irgendwie vermischt zu sein! Denn statt das
> "Ohm"-Zeichen aus A00 wird das "drei viertel"-Zeichen aus A02 angezeigt.
>
> Die Displaybezeichnung lautet: GB-1494V-0
> Habe es aus einem Laserdrucker ausgebaut.

Das ist nicht die Bezeichnung sondern eine Brandschutzklasse für das 
Platinenmaterial. Oft steht da keine Bezeichnung drauf, wenn es 
kundenspezifisch ist. Dann könnte auch das CGROM kundenspezifisch sein 
(spezielle Cursorformen usw.) Ist denn ein orginalen 44780 verbaut 
(falls ja, wie lautet dessen genaue Bezeichnung), oder ist der Chip 
direkt gebondet (nur ein runder Klecks auf der Platine).

Ich würde ein kleines Programm schreiben, das nacheinander alle Zeichen 
aus dem Zeichensatz ausgibt (immer 16 pro Zeile). Irgendwo müssen das 
p,q,j usw. versteckt sein.

von crazy horse (Gast)


Lesenswert?

tja, was heisst zu schade....
Wenn das Ding nicht so richtig macht, was es soll, würde ich da gar 
nicht viel Arbeit investieren, hau weg.
Die Dinger bekommt man für 2-3€, ist es also wirklich nicht wert, da 
viel zu investieren - es sei denn, der EHrgeiz hat dich gepackt.
Pollin 120 545, 1,95€.

von Werner B. (werner-b)


Lesenswert?

Valentin R. wrote:
> Danke dass du versuchst mir zu helfen holger.
>
> Der Wert 0xE0 -> 0b11100000 kommt daher, weil die ersten 4 Bits für
> Daten stehen, und der Bit4 (RS) wird bei lcd_data auf 1  und bei
> lcd_command auf 0 gesetzt. In temp wird der obere Nibble, und in temp2
> wird am Anfang der untere Nibble gesichert. Das Ganze explizit zu
> erklären wäre zu kompliziert, aber das Programm muss doch richtig
> funktionieren, sonst würden die Zeichen von a bis p (außer g,j,p) alle
> falsch angezeigt werden.
>
> Es muss irgentwie an dem CGROM, und den Tabellen liegen.

Mit 0xE0 werden aber die obersten 3 Bit maskiert. Muss es nicht ein 0xF0 
sein?

von Jadeclaw D. (jadeclaw)


Angehängte Dateien:

Lesenswert?

@Valentin: Herzlichen Glückwunsch. Ein Display mit Codetabelle A02 zu 
bekommen, ist ein echter Glücksfall, da dieses Display so einige west- 
und osteuropäische Sonderzeichen sowie einiges an weiteren Zeichen 
mitbringt, die z.B. in Meßgeräten recht nützlich sind.

Ich hänge mal das Datenblatt vom Controller an, auf Seite 18 ist die 
Zeichensatztabelle. Übrigens, bei einen A00-Display würden in deinem 
Bild statt der hochgestellten Ziffern japanische Schriftzeichen stehen. 
Für Umlaute muß grundsätzlich umgemappt werden, der HD44780 entstand zu 
einer Zeit, als es den IBM-PC noch nicht gab. Ergo paßt der Zeichensatz 
vom PC nicht 1:1 aufs Display. Da der A02-Zeichensatz keine 5x10-Zeichen 
hat, kann man das Display gleich als 5x8 initialisieren.

Nochwas, Displays mit dem A02-Zeichensatz sind extrem selten, ich habe 
schon einiges an Displays verbaut/gesehen, ein A02 war nie dabei, A00 
sind dagegen der Normalfall.

Gruß
Jadeclaw.

von Valentin D. (valentin)


Lesenswert?

Guten Abend

Also der Kontroller ist ein IC in SMD-Gehäuse, der auf der Platine drauf 
gelötet ist.

Kontrollerbezeichnung:
9135
HD44780S
B74   JAPAN

Treiberbezeichnung:
OKI   JAPAN
M5259
1707

Weils das nichts wird danke ich euch trotzdem für die viele 
Informationen.

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
Noch kein Account? Hier anmelden.