Hallo, seit ein paar Tagen versuche ich ein 4*20 Zeichen LCD (Controller IC KS0066U) zum laufen zu bekommen, aber es funktioniert nicht. Als uC verwende ich einen ATMega8, den ich per STK500 programmiere. Das LCD habe ich per Adapterkabel direkt über einen Erweiterungsstecker des STK500 mit dem Mikrocontroller verbunden und möchte es im 4-Bit-Modus betreiben. Verbunden habe ich: DB4 mit PB0 DB5 mit PB1 DB6 mit PB2 DB7 mit PB3 RS mit PB4 R/W mit PB5 E mit PB6 Zum Ansteuern des Displays habe ich ein C Programm geschrieben, das ich hier mit angefügt habe. Irgendwo muss sich aber ein Fehler eingeschlichen haben, da nach dem Flashen des ATMega8 keine Reaktionen auf dem Display zu sehen sind. Bin für jede Hilfe dankbar! Thomas
Hallo Thomas Erhöhe mal den Kontrast auf maximium. 2 Balken init -> ok Wo ist die Übertrage() ??
Hallo, erstmal danke für deine Antwort :). Das mit den Kontrast habe ich auch schon ausprobiert, aber das ändert gar nix. Die 2 Balken bleiben dann einfach da :). Die Daten/Befehle werden mit der Funktion lcd_write ans Display übertragen, oder was meinst du mit übertrage()? Grüße Tom
Hallo, also wenn dein display HD44780 kompatibel ist fehlt auf jeden fall noch ne Funktion die den Cursor positioniert. mfg Stefan
Hallo nochmal, außerdem musst du das Display beim initialisieren zuerst so behandeln als wäre es am 8 bit bus. Also nur ein nibble übertragen. Hier mal mein Code zum init, der funktioniert einwandfrei. //******************************************************************** //---------------------------------------------------------------------- ------ void LCD_instr(unsigned char daten) { unsigned char daten2; daten2 = daten / 16; LCD_RS_0; //Register Select = Instrunction Register Warte(lcdzeit); PORTD = PORTD & 0xF0; PORTD = PORTD | daten2; Warte(lcdzeit); LCD_E_1; //Enable auf high Warte(lcdzeit); LCD_E_0; //Enable=low -> Daten übernehmen PORTD = PORTD & 0xF0; PORTD = PORTD | daten; Warte(lcdzeit); LCD_E_1; //Enable auf high Warte(lcdzeit); LCD_E_0; //Enable=low -> Daten übernehmen Warte(lcdzeit); } //---------------------------------------------------------------------- ------ void init_LCD(void) { unsigned char daten; LCD_E_0; //Enable auf low LCD_RS_0; Warte(60000); daten = 0x03; PORTD = PORTD & 0xF0; PORTD = PORTD | daten; Warte(60000); LCD_E_1; Warte(60000); LCD_E_0; Warte(60000); daten = 0x03; PORTD = PORTD & 0xF0; PORTD = PORTD | daten; Warte(60000); LCD_E_1; Warte(60000); LCD_E_0; Warte(60000); daten = 0x03; PORTD = PORTD & 0xF0; PORTD = PORTD | daten; Warte(60000); LCD_E_1; Warte(60000); LCD_E_0; Warte(60000); daten = 0x02; PORTD = PORTD & 0xF0; PORTD = PORTD | daten; Warte(60000); LCD_E_1; Warte(60000); LCD_E_0; Warte(60000); LCD_instr(0x28); //LCD Function Set Warte(60000); LCD_instr(0x0C); //LCD initialisieren Warte(60000); LCD_instr(0x01); //LCD löschen Warte(60000); mfg Stefan
Hallo Stefan, meinst du nach der Initialisierung? Hab ich gerade versucht, hat aber auch nix gebracht. Ich kann mir eigentlich nur vorstellen, dass irgendwas an der Initialisierungsroutine falsch ist. Wie teile ich dem display eigentlich mit dass ich im 4-bit modus übertrage? Ich kann ja per befehl einstellen, ob ich ein 8bit oder ein 4 bit interface verwende (siehe datenblatt "set function"). Bei der Initialisierung muss man laut vorgegebener Routine aber angeben dass man ein 8 bit interface verwendet. Kann das der Fehler sein? Grüße
Hallo Stefan, hab deinen Code gerade erst gesehen, werde ihn gleich mal ausprobieren. Grüße
tag hier mal mein code. funktioniert bei >10 displays die ich schon verbaut hab. portpins kannst du in der header-datei einstellen. die datenpins sollten allerdings immer die unteren 4 portpins sein, sonst klappt das ganze so wie es jetzt geschrieben ist nicht. steuerleitungen können auf dem gleichen port sonst frei gewählt werden.
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.