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
Was für ein LCD? Stimmt das Displaytiming wirklich? (Evtl. werden Bits gewürfelt) Sourcecode? etc. pp.
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
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
Danke für die schnelle Antworten. Die Daten werden von SPI in ein Schieberegister (aus 74HCT273, der als Portexponder dient) reingeschoben.
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?
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.
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.
>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?
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.
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.
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€.
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?
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.