mikrocontroller.net

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


Autor: Valentin Diring (valentin)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für ein LCD?

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

Sourcecode?

etc. pp.

Autor: Valentin Diring (valentin)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Valentin Diring (valentin)
Datum:
Angehängte Dateien:

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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Valentin Diring (valentin)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Valentin Diring (valentin)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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€.

Autor: Werner B. (werner-b)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jadeclaw Dinosaur (jadeclaw)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Valentin Diring (valentin)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.