Guten Morgen, auch auf die Gefahr hin, dass das Thema bereits irgendwo abgehandelt ist, ich habe neben der Forensuche auch Google bemueht, leider erfolglos, erlaube ich mir hier, ein paar Details zur Initialisierung o.g. Displays zu erfragen (bevor ich noch durchdrehe) Mir geht es darum, ein Display mit KS0073 so zu initialisieren, dass es mit 4 Bit angesteuert wird und 4 Zeilen darstellt (muss aber zwischendrin auch mal auf 2 Zeilen und zurueck eingestellt werden) Ich habe mehrere Routinen im Netz gefunden und keine keine davon funktioniert bei mir, deshalb ein paar detailierte Fragen: 1. Wenn ich auf 4Bit-Uebertragung umschalte, dann lege ich ja das Bitmuster 0010 xxxx an D7-D0 an (die unteren 4 Bit sind ja nicht aufgelegt also ist deren Zustand erstmal egal... oder nicht). Wenn ich nun den Pin E kurz auf 1 lege, erwartet da der Controller danach das untere Nibble an D7-D4 (xxxx) oder den naechsten Befehl, welcher ja dann 4Bit-maessig abgearbeitet wird? 2. In vielen Beispielen ist die Rede davon, dass man vor dem Initialisieren das Display loeschen soll. "Clear Display" ist folgendes Bitmuster: 0000 0001. Wie soll ich das an den Controller bringen, wenn D3-D0 nicht aufgelegt sind und sich der Controller im 8-Bit-Modus befindet? 3. Was hat es mit dem RE-Bit auf sich? In der Befehlstabelle ist es wie ein Pin aufgefuehrt, allerdings kommt es auch im "Function Set" vor. Wie ist mit diesem Bit zu verfahren? Nach laengerem Ueberlegen verstehe ich das so, dass es mit dem "Function Set" gesetzt werden muss, um dann anderswo zur Verfuegung zu stehen. Ganz dahinter gestiegen bin ich jedoch nicht. Ueber sachdienliche Hinweise freue ich mich sehr, vielen Dank schonmal im Voraus, Thomas
überlege mal wie man 8 bit daten über 4bit interface senden kann ......ich geb dir nen tip ... nacheinander !! die steuerleitungen bestimmen ob gerade ein befhel oder ob Daten gesendet werden ... woher soll der LCD controller das auch wissen wenn man es ihm nicht sagt Enable sagt den LCD ebenso das jetz die daten übernommen werden können ... aber da sieht man mal das programmieren doch was anderes ist als sich quelltexte zu suchen und den mist per copy und paste zusammenzuklatschen
>überlege mal wie man 8 bit daten über 4bit interface senden kann ......ich geb dir nen tip ... nacheinander !! Das ist mir schon klar. Allerdings befindet sich der Controller nach meinem Verstaendnis zunaechst im 8 Bit-Modus. Meine erste Frage war, was er nach dem ersten E erwartet. Das untere Nibble oder wird dieses Kommando noch im 8 Bit-Modus abgearbeitet, also das untere Nibble verworfen? >die steuerleitungen bestimmen ob gerade ein befhel oder ob Daten gesendet werden .. Ist mir auch klar. Als Steuerleitungen sind mir RS und R/W bekannt und auch verdrahtet. Das RE-Bit kenne ich dagegen nicht. >Enable sagt den LCD ebenso das jetz die daten übernommen werden können Ja >aber da sieht man mal das programmieren doch was anderes ist als sich quelltexte zu suchen und den mist per copy und paste zusammenzuklatschen Deshalb habe ich auch detailierte Fragen gestellt und nicht nach einem Quellcode gefragt... Trotzdem Danke
Und auch bei LCDs hilft http://sprut.de/electronic/lcd/index.htm. Für die Umschaltung auf den 4-bit Modus werden nur die oberen 4 Bit benötigt (0010 ----). Die unteren 4 Bit liest das LCD zwar ein, solange es noch im 8 bit Modus ist. Die haben aber dann keine Bedeutung. Bei manchen LCD must du die unteren 4 Bit auch mit GND verbinden. Das RE-Bit ist ein Sofwarebit. Es muss erst mit einem Befehl gesetzt werden. Danach gelten dann die Befehle mit gesetztem RE-Bit. Solange bis du es wieder zurücksetzt. Zuhause habe ich auch eine Init für dieses LCD. Allerdings in PIC-Assembler.
Hi, der Link ist sehr interessant, danke dafuer :) Allerdings fehlt mir darin vermutlich das wichtigste: >Der Controllerchip KS0073 >... >4-Bit-Initialisierung >Die Initialisierung des 4-Bit-Datenbus-Modes weicht etwas vom >HD44780-Standard ab. Mist, vielleicht ist genau das mein Problem? Genau hier stelle ich naemlich bei den Befehlstabellen keinen Unterschied fest... Zum Rest Deiner Antwort tausend Dank, das bringt mich weiter und das mit dem RE-Bit ist nun auch verstaendlicher ;-) Wenn jetzt noch jemand mehr zu den zitierten Abweichungen haette... super
Ich such heute abend mal meine Init raus. Ich glaube mich zu erinnern, dass man das RE-Bit einschalten musste um in den 4-Zeilen Mode zu kommen. Auch wenn es PIC-Assembler ist, kannst du den Initroutinen entnemen, wann welches Byte zum LCD geschickt wird und welche Pausen dazwischen sind. Damit solltest du eigentlich weiter kommen.
..aus meinen Versuchen mit dem Init von Displays kann ich sagen dass es meistens ein Timing-Problem ist wenns nicht klappt. Mach einfach paar längere Pausen zwischen den einzelnen Befehlen (zwischen den 2 Nibbles natürlich nicht nötig) - die kannst du wenns läuft ja schrittweise wieder verringern. Die Abfrage des BusyFlags, wann das Display fertig fürs nächste Kommando ist, funktioniert bei manchen Displays auch nicht richtig -> das Flag wird einige ms zu früh gesetzt... da gabs auch schon mal einen Thread dazu. => Also während des Inits FESTE Timings verwenden...
Hi, nochmals vielen Dank, vielleicht bekomme ich ja heute noch das erste Zeichen auf mein verd.... Display ;-) Ich fasse mal kurz zusammen: Das erste Kommando wird auf jeden Fall wie 8 Bit abgearbeitet. Will ich also das RE-Bit einschalten muss ich folgendes senden: Kommando 1: 0010 0000 E (Wird auf 4 Bit umgeschalten) Kommando 2: 0010 E (oberes Nibble des zweiten Kommandos, nochmal 4 Bit Modus) Kommando 2: 0100 E (unteres Nibble, RE-Bit gesetzt) Das mit dem RE-Bit ist auch klar, ich muss es, sofern benoetigt mit einem extra Kommando setzen oder loeschen. Die Timing-Geschichte ist auch ein guter Hinweis, da werde ich auch mal handeln. Na, dann schau ma mal... dann seh ma scho... nochmals vielen Dank
;LCD_Port DATA P2 ;LCD_EN BIT LCD_Port.4 ;LCD_RW BIT LCD_Port.5 ;LCD_RS BIT LCD_Port.6 ;LCD_Backlight BIT LCD_Port.7 ;LCD_D4 BIT LCD_Port.0 ;LCD_D5 BIT LCD_Port.1 ;LCD_D6 BIT LCD_Port.2 ;LCD_D7 BIT LCD_Port.3 LCD_INIT: CALL LCD_Pause_15ms MOV A,#30h CALL LCD_Intialisieren CALL LCD_Pause_4ms MOV A,#30h CALL LCD_Intialisieren CALL LCD_Pause_4ms MOV A,#30h CALL LCD_Intialisieren CALL LCD_Pause_4ms MOV A,#20h ; Ab hier 4-Bit Modus eingestellt CALL LCD_Intialisieren CALL LCD_Pause_4ms MOV A,#_LCD_Schnitstellenbreite CALL LCD_Komando MOV A,#_LCD_AUS CALL LCD_Komando MOV A,#_LCD_Loeschen CALL LCD_Komando CALL LCD_Pause_15ms MOV A,#_LCD_ReturnHome CALL LCD_Komando MOV A,#_LCD_Betriebsart CALL LCD_Komando MOV A,#_LCD_EIN CALL LCD_Komando RET Hier mal ein kleiner Auszug wie mans machen könnte! LCD_Intialisieren sendet nur das Highbyte von 30h. LCD_Komando gibt das im Akku stehende Zeichen im 4-Bit-Modus aus. Also Highbyte wird zu erst gesendet dann das Lowbyte.
Hallo, ich versuche seit einiger Zeit auch ein 4 Zeilen Display zur Anzeige zu bringen. Die Initialisierung funktioniert soweit auch, aber ich scheitere immer wieder an dem Erweiterungsbit um in den 4 Zeilen Modus zu schalten. Ich habe bisher noch nichts gefunden (Datenblatt des LCD's / Foren etc.) wo das Ein und Ausschalten des RE Bits im Beispiel dargestellt wird. Zeichen und Strings kann ich zwar anzeigen, aber nur, wenn ich für die Zeilenanfangspositionen $06/$C0/$94/$D4 (je für Zeile 1-4) als Zeilen code sende. Mit $0/$20/$40/$60 springt der Cursor an undefinierte Stellen bzw. es werden wirre Zeichen angezeigt oder die Zeichenhintergründe werden hell. Bin sicher noch nicht im 4 Zeilen-Modus Ich wollte erst mal anfragen, kann aber auch die betreffenden Code-Zeilen hochladen. Bin neu im Forum, weiß noch nicht, wie das funktioniert. Vielen Dank im Voraus PS. Ich programmiere in Assembler mit Studio-4
Gerd Wolf schrieb: > Hallo, > > ich versuche seit einiger Zeit auch ein 4 Zeilen Display zur Anzeige zu > bringen. Hallo, vorab: Du hast einen alten Thread von Dez. 2009 ausgegraben. Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen. Welches Display und welchen Mikrocontroller verwendest Du? Für AVRs und HD44780 Controller wird die Ansteuerung im AVR-Tutorial https://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD beschrieben.
Steuer das Display via SPI an, denn es hat, im Gegensatz zu seinem Vorgänger -3, Probleme mit der parallelen Ansteuerung.
Danke für die schnelle Antwort, Habe noch ein paar Infos vergessen. Ich verwende das o.g. Display über einen TWI-Portexpander PCF 8574. Die Initialisierung funktioniert m.E. nach, denn ich kann wie geschrieben Zeichen und Strings am LCD-Display ausgeben. Nur die Einstellung des 4-Zeilen Modus gelingt mir nicht ?????. Das Tutorial und die Foren Beiträge habe ich auch schon gefunden und studiert, nur bisher nicht den entscheidenden Hinweis auf dieses ominöse RE-Bit. Finde ich irgendwo ein Codebeispiel in ASS. Die TWI-Ansteuerung ist nicht das Problem Ich habe auch gelesen, das der Thread älter als 6 Monate ist. (ich bin über 60 ;-)), aber ich wollte auf das Thema antworten. Bitte vergebt mir. Wie auch gesagt, ich bin neu in diesem Forum. Vielleicht kann mir trotzdem jemand weiterhelfen
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.