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.