Hi, bin mittlerweile schon ziemlich verzweifelt, weil ich den ganzen Tag versuche dieses be... LCD-Display zum Laufen zu bewegen! Also, an sich benutze ich das Ethernutbetriebssystem (www.ethernut.de) und dort ist schon ein LCD-Display integriert, auf dem mein Code aufbaut. Kurz und gut, der Code funktioniert einfach nicht! Naja, genauer gesagt ist es so, wenn ich dass LCD-Display anschieße ist die erste Zeile ein schwarzer Balken normal, sobald ich den Code drauf spiele ist das ganze Display normal und wenn ich lange auf RESET drücke kommt in der ersten Zeile der schwarze Balken wieder (weiß nicht, ob dass weiter hilft). Ich weiß auch nicht auf was ich LCD_DATA_BITS setzen soll (0x0F oder 0xF0) hab alle Infos mal angehängt und wäre sehr, sehr dankbar, wenn sich wer erbarmen würde und mal einen Blick über den Code werfen!! Ach ja, bin noch absoluter Anfänger, kann also auch ein total doofer Fehler sein!) Ich hab auch schon den von Peter Fleury probiert, aber da passiert genau so wenig.
Ich schließe jetzt einfach mal einen Hardware-Fehler aus, ich denke mal, dass die richtigen Pins Deines µC mit den richtigen Pins des Displays verdrahtet sind? Um ein LCD im 4Bit Modus zu betreiben, muss dieses auch so initialisiert werden. Ganz bestimmte Bits werden auf der Datenleitung gesetzt und gewisse Wartezeiten sind einzuhalten. Schau mal bitte in dieses Datenblatt unter "SET FUNCTION" und vergleiche, ob Du Dein Diplay genauso initialisiert hast? Sonst kannst Du lange suchen, wenn Dein Diplay im 8-Bit Modus herumdümpelt ;) Erst dann können anzuzeigende Zeichen an das Display gesendet werden.
@Christian Was soll das den heißen, ich dachte das ist C, oder? @Bernhard In dem Datenblatt von dem Display, dass ich verwende steht doch nicht von Initialisierung für den 4-Bit-Modus (wenn ich nicht übersehen habe). Soll ich versuchen, einfach mal die Daten für dein Display raus zu schicken?? DANKE
Sorry sorry :) Habe dein attachment net angesehen. Habe ne kleine routine für ein 2 * 16 LCD für den 8051 geschrieben!! Wenn du willst schick ich sie dir bzw. stell ich sie hier rein!
Achso,ist jedoch im 8 Bit Mode....kannst mal versuchen ob du es mit 8Bit hinbekommst!!!! Das ummodeln ist dann net so schwer!!!
Kann leider an der Hardware nichts mehr ändern! Hab's ja auch total doof, da die Datenleitungen auf verschiedenen Ports liegen.
Hallo Stefanie, also ich habe bisher noch kein LC-Display gehabt, daß im 4-Bit-Modus nicht funktioniert, und ich habe schon einige verbaut. Mal so ´ne ganz dumme Frage: Hast Du mal am Poti für den Kontrast gedreht? Hast Du ein Oszi oder Datenlogger, um die Pegel und das Timing am LCD-Port mal nachzumessen? Gruß, Markus_8051
@Markus: Ein Oszi hab ich leider nicht. Das mit dem Kontrast glaub ich nicht, da ich doch am Anfang diese schwarzen Balken sehen kann. Kannst du mir nicht mal einen Code von dir schicken, da ich mir nicht sicher bin, ob der Code passt?
@Stefanie >In dem Datenblatt von dem Display, dass ich verwende steht doch nicht >von Initialisierung für den 4-Bit-Modus (wenn ich nicht übersehen >habe) Und genau das wunderte mich auch, denn hardwaremäßig betreibst Du Dein LCD im 4-Bit-Modus. Mein Tipp: Schreibe Dir bitte eine LCD-Initialisierungs-Routine exakt für den 4-Bit Modus. In Assembler könnte es so aussehen: ldi temp, 0b00000011 ;muss 3mal hintereinander gesendet out PORTB, temp ;werden zur Initialisierung rcall lcd_enable ;1 rcall wait5ms rcall lcd_enable ;2 rcall wait5ms rcall lcd_enable ;und 3! rcall wait5ms ldi temp, 0b00000010 ;4bit-Modus einstellen out PORTB, temp rcall lcd_enable rcall wait5ms Bernhard
@Steffi: Ich habe leider nur Code für die Initialisierung in Assembler auf dem 8051, fürchte, damit tust Du nicht viel. Aber ich schau zu Hause nochmal nach! Der Tipp von Bernhard ist auch gut: Das Kommando zum Initialisieren im 4bit-Mode muß dreimal gesendet werden und zwischendurch unbedingt warten!!! Markus_8051
Hier ein 4Bit Routine!!!! Die lcd.h hänge ich im nächsten Beitrag an!!!! In Hauptprogram kannst du es z.B so progn: #include <reg517.h> #include <stdio.h> #include "lcd.h" /* globale Variablen */ unsigned char i; void main(void) { /* Initialisierung */ init_lcd(); blank_lcd(); /* Ausgabe eines Strings auf der LCD*/ print_lcd(1,1,"Hallo Du"); // hier gibst du deinen Text ein print_lcd(1,10,"SoSo"); while(1); }
Ok!!!hier ist die Header Datei!!!! Du kannst sie auch mi #include <lcd.h> einfügen (statt "lcd.h") "lcd.h" nur nehmen wenn die H.Datei im Projekt dabei ist! Viel Erfolg!!! mfg Cri
Hi Cri, hab ganz, ganz herzlichen Dank für dein Programm!! Leider kann ich so wie ich es sehe, nicht sonderlich viel damit anfangen. Ich habe ja einen ATmega128 und kann die Pins nicht so einfach umprogrammieren. Musst du nichts mit DDR, Port und Pin machen? Das sieht alles so einfach bei dir aus? Deswegen hab ich gedacht, dass ich lieber noch bei meinem Programm den Fehler suche. Aber trotzdem danke für deine Mühe!!
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.