Hallo Leute,
ich weiß ihr werdet das blanke kotzen kriegen, weil schon wieder jemand
kommt und nen Problem mit der Ansteuerung eines LCD Display's über den
hd44780 hat. :-) Aber ich finde das Problem einfach nicht. Vielleicht
ist ja jemand unter euch der mal eben meinen Quellcode durchliest und
zack den Fehler findet.
Also ich will den Controller im 4 bit Modus laufen lassen und habe
folgende PIN-Belegung verwendet.
MCU LCD
PD0 DB4
PD1 DB5
PD2 DB6
PD3 DB7
PD4 RS
PD5 E
R/W -> GND
Mein Problem ist, dass ich bei der jetzigen init nichts dargestellt
bekomme auf dem Disp. irgendwie hab ich das Gefühl, dass es am timing
liegt aber ich habe jetzt schon so viel mit _delay rumgedoktert da kommt
nichts bei rum.
Wenn ich die init derart umschreibe, dass die Befehlszeilen aus dem
Datenblatt des hd44780 Seite 213 einzeln auf den PORT gegeben werden
dann sehe ich zwar nen blinkenden curser der mit auch irgendwelche
Zeichen darstellt aber niiie das was ich sehen will.
1 | static void lcd_out( uint8_t data ) |
2 | {
|
3 | data &= 0x0F; |
4 | |
5 | LCD_PORT &= 0xF0; |
6 | LCD_PORT |= data; |
7 | |
8 | LCD_PORT |= (1<<LCD_EN); |
9 | _delay_us(1); |
10 | LCD_PORT &= ~(1<<LCD_EN); |
11 | }
|
Irgendwie vermisse ich die INIT Routine die das LCD Initialisiert. Ohne Initialisierung kommt da nur mist raus. Bei der Initalisierung must ja dafür sorgen das LCD-controller in den 4-Bit-Modus geht. Hier mal ein Codeschnipsel meiner INIT-routine in Assembler. LCD_INIT: CALL LCD_Pause_15ms ; Warte LDI temp,0x30 ; 8 Bit - Mode muss 3 mal gesendet werden CALL LCD_Intialisieren ; Busy-Flag Abfragen ist hier noch nicht möglich CALL LCD_Pause_4ms LDI temp,0x30 CALL LCD_Intialisieren CALL LCD_Pause_4ms LDI temp,0x30 CALL LCD_Intialisieren CALL LCD_Pause_4ms LDI temp,0x20 ; jetzt umschalten auf den 4 bit mode CALL LCD_Intialisieren CALL LCD_Pause_4ms LDI temp,_LCD_SetRE ;nur bei EADIP204-4 verwenden CALL LCD_Komando LDI temp,_LCD_ExtfuncSet ;nur bei EADIP204-4 verwenden CALL LCD_Komando LDI temp,_LCD_Schnitstellenbreite ; Funktion Set CALL LCD_Komando LDI temp,_LCD_AUS ; LCD-Display ausschalten CALL LCD_Komando LDI temp,_LCD_Loeschen ; LCD Löschen CALL LCD_Komando LDI temp,_LCD_Betriebsart CALL LCD_Komando LDI temp,_LCD_EIN CALL LCD_Komando RET Soll nur als Anregung dienen. Schau mal in dein Datenblatt rein ob es Beipiele zur Initialisierung gibt 8 und 4 Bit Modus.
Wenn dein µC genug Beinchen frei hat, dann würde ich es erst mal im 8-Bit-Modus versuchen. Der ist weniger fehleranfällig als der 4-Bit-Modus und somit das erste Erfolgserlebnis fast vorgrogrammiert. Wenn das gelungen ist kann man immer noch auf den 4-Bit umsteigen. Gruß Skriptkiddy
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.