Hallo, Ich habe ein kleines Problem, da bei Pollin LCD-Displays im Angebot gewesen sind, welche mit dem HD44780 kompatibel sein sollen. Darum habe ich, davon welche gekauft und wollte es heute mal ausprobieren, aber keine Chance die Initialisierung geht nicht, da in der oberen Zeile noch die Schwarze Klötzchen bleiben. Das Programm ist für einen 16F716 geschrieben und der RW Pin vom Display ist auf Masse geschaltet. Vielleicht hat jemand eine Idee woran es liegen könnte, weil das Programm läuft mit einem HD44780 Display ohne Probleme. VG-Luca
Luca L. schrieb: > da bei Pollin LCD-Displays im Angebot gewesen sind, welche mit dem > HD44780 kompatibel sein sollen Gibts dafür auch eine Artikelbezeichnung oder gar einen Link? > Vielleicht hat jemand eine Idee woran es liegen könnte Miss mal mit einem Oszi, ob an jedem Pin das ihm zugehörige Signal ankommt. Bei verdrillten lackisoliertem und gleichfarbigen Drähten kann man da schon mal durcheinanderkommen...
Zeig mal die Platine des MC von unten. Als erstes fällt mir nämlich auf, das kein Abblockkondensator zu sehen ist und auch keine Last-C am Quarz. Da stellt sich die Frage, ab der MC überhaupt losrennt. Lothar M. schrieb: > Bei verdrillten lackisoliertem und gleichfarbigen Drähten > kann man da schon mal durcheinanderkommen Halte ich auch für maximal fehlerträchtig. Ausserdem haben wir da auch noch Übersprechen, ist allerdings bei der Länge vermutlich nicht so wichtig.
:
Bearbeitet durch User
Lothar M. schrieb: > Luca L. schrieb: >> da bei Pollin LCD-Displays im Angebot gewesen sind, welche mit dem >> HD44780 kompatibel sein sollen > Gibts dafür auch eine Artikelbezeichnung oder gar einen Link? > https://www.pollin.de/p/anag-vision-lcd-modul-av1623yfty-sjw-16x2-121714?utm_source=google&utm_medium=fshopping&gclid=EAIaIQobChMI0pf8qsL0_QIVAszVCh1L_w_-EAQYASABEgKg8PD_BwE > Miss mal mit einem Oszi, ob an jedem Pin das ihm zugehörige Signal > ankommt. Bei verdrillten lackisoliertem und gleichfarbigen Drähten > kann man da schon mal durcheinanderkommen... Ich habe die Drähte nacheinander angelötet und jetzt schon zum dritten mal mit Multimeter in durchgangsprüfunge gemessen da sollte es zu keinem fehler gekommen sein wenn ich mit dem Oszi messe habe ich die passenden Signale an den Display pins anliegen. VG-Luca
Luca L. schrieb: > der RW Pin vom Display > ist auf Masse geschaltet heisst READ - wieso willst Du lesen?
Hast du auch einen Schaltplan deines Aufbaus? Vielleicht ist dort ein Fehler versteckt. Anselm
Matthias S. schrieb: > Zeig mal die Platine des MC von unten. Als erstes fällt mir nämlich auf, > das kein Abblockkondensator zu sehen ist und auch keine Last-C am Quarz. > Da stellt sich die Frage, ab der MC überhaupt losrennt. > Hi, Ist auf dem Foto vielleicht etwas schlecht zu erkenn aber die Gelben Punkte neben dem Quarz sind jeweils 22pF Kermaik´kondensatoren welche aus last laut Datenblatt geeignet sind und ich Kann mit dem Oszi ja die Passenden Signale am Display messen aus diesem grund vermute ich mal stark das der MC losrennt und auch am laufen bleibt. VG-Luca
Wendels B. schrieb: > Luca L. schrieb: >> der RW Pin vom Display >> ist auf Masse geschaltet > > heisst READ - wieso willst Du lesen? Hi, der RW Pin ist wenn auf Masse gelegt auf 0 und es wird geschrieben wenn man den auf 1 also 5V legt wird gelesen. VG-Luca
Anselm 6. schrieb: > Hast du auch einen Schaltplan deines Aufbaus? > Vielleicht ist dort ein Fehler versteckt. > > Anselm Hi, Zu beginn der ASM Datei ist eine beschreibung der Pinbelegung das sind die Pins welche am MC angeschlossen sind der RA4 ist noch nicht belegt das ist noch von einem Alten Projekt. VG-Luca
Luca L. schrieb: > jetzt schon zum dritten mal mit Multimeter in durchgangsprüfunge gemessen Du hast kontrolliert, ob eine Verbindung ist, wo eine sein soll. Hast du aber auch mal kontrolliert, ob da keine Verbindung ist, wo keine sein darf, nämlich zwischen den Leitungen. > mit dem Oszi messe habe ich die passenden Signale an den Display pins > anliegen. Auch keine "Zwischenpegel"? Wie "knapp" ist das Timing? Wendels B. schrieb: > Luca L. schrieb: >> der RW Pin vom Display ist auf Masse geschaltet > heisst READ - wieso willst Du lesen? Der Pin heißt R/W also "Read, Not Write". Bei Low-Pegel wird also nur geschrieben.
:
Bearbeitet durch Moderator
Er hat wohl dieses: https://www.pollin.de/p/anag-vision-lcd-modul-av1623yfty-sjw-16x2-121714 Und gerade bei der Initialisierung gibts es kleine Unterschiede zwischen den sonst kompatiblen Controllern.
Lothar M. schrieb: > Der Pin heißt R/W also "Read, Not Write". Wobei über dem "W" noch ein Querstrich steht: R/W̅ Der Querstrich signalisiert die Negierung. (Als Eingabehilfe kann man diese Webseite hier verwenden: https://instafonts.io/font/overline-)
:
Bearbeitet durch User
H. H. schrieb: > Er hat wohl dieses: > > https://www.pollin.de/p/anag-vision-lcd-modul-av1623yfty-sjw-16x2-121714 > > Und gerade bei der Initialisierung gibts es kleine Unterschiede zwischen > den sonst kompatiblen Controllern. Davon habe ich auch einige, bei mir keinerlei Probleme mit Initialisierung etc. Ich benutze die Standard-Routinen aus dem AVR-Tutorial: LCD. Daher wird es wohl wahrscheinlich an dem „Versuchsaufbau“ des TO liegen.
Lothar M. schrieb: > Luca L. schrieb: >> jetzt schon zum dritten mal mit Multimeter in durchgangsprüfunge gemessen > Du hast kontrolliert, ob eine Verbindung ist, wo eine sein soll. > > Hast du aber auch mal kontrolliert, ob da keine Verbindung ist, wo > keine sein darf, nämlich zwischen den Leitungen. > >> mit dem Oszi messe habe ich die passenden Signale an den Display pins >> anliegen. > Auch keine "Zwischenpegel"? Wie "knapp" ist das Timing? Ja nur die Sachen welche verbunden sein sollen sind verbunden ich habe auch mal ausprobiert was ist wenn man das Timing etwas lockerer macht das ich dem ganzen viel mehr zeit gebe aber auch das hat nichts gebracht :(
Hatten wir schonmal: Beitrag "LCD (Ks0066) initialisieren" Zitat: 1. Poti an Pin3 hängen um Kontrast einstellen zu können. Die Displays sind nur in einem sehr schmalen Band "sehbar" justierbar. Wenn der Pin gegen GND oder 5V geschalten wird, sieht man in beiden Fällen gar nichts. 2. Mein Datenblatt war in Punkto Initialisierung falsch. Ich habe dann nach KS0066U gegoogelt und mir das Samsung Datenblatt heruntergeladen. Siehe da, ein komplett anderer Initialisierungsablauf mit dem es dann funktionierte. 2.1. Power ON 2.2. Wait > 30ms 2.3. Function Set & wait > 39us (nicht 3x wie so oft angegeben) 2.4. Display on/off control & wait > 39us 2.5. Display clear & wait > 1.53ms 2.6. Entry Mode Set 3. Das blaue Display (RS Part Numer 532-6593). Hat einen Fehler im Function Set Register. Das Bit DB3 (Line Mode) ist hier entgegen allen Datenblättern invertiert. Schreibt man eine 1, so erhält man nicht zwei sondern nur eine Zeile initialisiert!!! Das grüne/gelbe Display zeigt diesen Fehler nicht. Nach Behebung dieser Fehler laufen beide Displays einwandfrei.
🕵︎ Joachim L. schrieb: > 2. Mein Datenblatt war in Punkto Initialisierung falsch. Ich habe dann > nach KS0066U gegoogelt und mir das Samsung Datenblatt heruntergeladen. > Siehe da, ein komplett anderer Initialisierungsablauf mit dem es dann > funktionierte. > 2.1. Power ON > 2.2. Wait > 30ms > 2.3. Function Set & wait > 39us (nicht 3x wie so oft angegeben) > 2.4. Display on/off control & wait > 39us > 2.5. Display clear & wait > 1.53ms > 2.6. Entry Mode Set Anbei das Datenblatt des Schwestermodells AV1624 von Anag Vision, mit Initialisierung.
Ggf. hast Du ja auch diesen "Fehler": https://forum.arduino.cc/t/pinout-of-lcd-display-anag-vision-av1623/673169
Harald K. schrieb: > Wobei über dem "W" noch ein Querstrich steht: > R/W̅ > Der Querstrich signalisiert die Negierung. Diesen Querstrich konnte man früher(tm) im ASCII-Zeichensatz nicht darstellen. Sie wurde deshalb durch den vorangestellten Schrägsstrich dargestellt. Das R/W Signal hat also 2 Funktionen: - R --> high aktives Read - /W --> low aktives Write Und ich spreche diese "Schrägstrich-Negierung" dann auch explizit aus: das Signal heißt bei mir immer "ernotwe" und eben nicht nur "erwe" oder "readwrite".
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Sie wurde deshalb durch den vorangestellten Schrägsstrich > dargestellt. Das ist so aber nur ein Notbehelf gewesen. Betrachtet man alte Datenblätter*, dann sah das wie im Anhang aus, der das Pinout eines MC6809 zeigt. Deutlich zu sehen sind diverse mit Überstrich versehene Signale, R/W̅ und auch ein Signal, bei dem sowohl der Text vor, als auch nach dem Schrägstrich einen Überstrich erhält: D̅M̅A̅/̅B̅R̅E̅Q̅ Und diese Schreibweise zieht sich konsequent durch das ganze Datenblatt. *) Beispiel aus https://colorcomputerarchive.com/repo/Documents/Datasheets/MC6809%20HMOS%208%20Bit%20Microprocessor%20(Motorola).pdf
Lothar M. schrieb: > Das R/W Signal hat also 2 Funktionen: > - R --> high aktives Read > - /W --> low aktives Write Genau :-( Und R/W̅ steht für was? Ist da die Negierung wieder aufgehoben? Der "/" dient zur Trennung der Bezeichnung der beiden Zustände und hat mit Negation überhaupt nichts zu tun.
Ich hatte vor Äonen mal ein ähnliches Problem. Es stellte sich am Ende heraus, dass die Kontasteinstellung falsch war, so dass die eigentich völlig korrekt funktionierende Anzeige nur nicht zu sehen war. Hast du das mal geprüft?
Frank E. schrieb: > Hast du das mal geprüft? Wenn schwarze Klötzchen zu sehen sind, müßten auch Zeichen erscheinen. Rainer W. schrieb: > Genau :-( Wenn jemand die Grafik "genau" beachtet, sieht er/sie/es, daß die Datenleitungen invers zur normalen Pinbelegung sind. Da würde ich ansetzen.
Frank E. schrieb: > völlig korrekt funktionierende Anzeige nur nicht > zu sehen war. > > Hast du das mal geprüft? So wie es am Bild aussieht (nur eine Zeile), ist typisch für nicht initialisiertes Display, hat mit Kontrast nichts zu tun. Wenn die Verdrahtung in Ordnung, dann H. H. schrieb: > Und gerade bei der Initialisierung gibts es kleine Unterschiede zwischen > den sonst kompatiblen Controllern. würde ich auch auf Timing tippen. Hatte ich auch schon, dass ein Display langsamer war. Nachdem die Zeiten ein wenig "gestreckt" habe, war plötzlich in Ordnung.
Luca L. schrieb: > Wendels B. schrieb: >> Luca L. schrieb: >>> der RW Pin vom Display >>> ist auf Masse geschaltet >> >> heisst READ - wieso willst Du lesen? > > Hi, > der RW Pin ist wenn auf Masse gelegt auf 0 und es wird geschrieben wenn > man den auf 1 also 5V legt wird gelesen. > VG-Luca @Luca L.: Hast du nun den R/W-Eingang des Displays auf GND=0 gelegt? Das ist wichtig, sonst treibt das LCD den Datenbus, statt zu lesen. Das Read/Write bezieht sich auf die MCU, nicht auf das Display. Der einzige mögliche Fallstrick bei diesem Display ist eigentlich, dass die Nummerierung der Pins für einen von oben eingesetzten Wannenstecker gilt, und man bei nach unten montiertem Stecker (wie man es ja bei LCDs normalerweise haben will) die aufeinanderfolgenden geraden und ungeraden Pins paarweise vertauschen muss. Aber da der TO keinen Wannenstecker + Flachbandkabel verwendet, ist das ja irrelevant. Die Pinangabe im Datenblatt stimmt jedenfalls.
:
Bearbeitet durch User
Mi N. schrieb: > Frank E. schrieb: >> Hast du das mal geprüft? > > Wenn schwarze Klötzchen zu sehen sind, müßten auch Zeichen erscheinen. > Nein, müsste genau nicht. Bei mir war es damals so, dass die falsche Kontrasteinstellung zu ebendiesen vollkommen schwarzen Kästchen führte. Nach Reduzierung des Kontrasts waren die jeweils nicht genutzen Pixel eben nicht mehr genau so schwarz wie die ungenutzten und die gesetzten Zeichen wurden darurch sichtbar ...
:
Bearbeitet durch User
Johannes F. schrieb: > Aber da der TO keinen Wannenstecker + Flachbandkabel verwendet, ist das > ja irrelevant. Die Pinangabe im Datenblatt stimmt jedenfalls. Hi, meins geht. Aber die Routinen für Init sind identisch wie bei den anderen. Das ist nicht das Killerkriterium. Bei den Zeitschleifen sollte man nicht geizen. Und nicht temp Register nehmen, die nicht vorher gepopt /gepushed wurden. Das war nämlich mal mein Fehler. Zeig doch mal die Routine als Programm. Als Code hochladen. Dann sehen wir weiter. ciao gustav
Karl B. schrieb: > Zeig doch mal die Routine als Programm. Als Code hochladen. Hat er doch. Du kannst Assembler für die kleinen PICs?
Genau das Display habe ich schon mehrfach verbaut. Läuft ohne Probleme. Schließe doch mal an einen PIN eine LED an und lass diese lgleichzeitig im Sekundentakt blinken, nur um zu sehen, ob der Controller überhaupt läuft.
Ich hab mir den Code mal angesehen, und der kann ja so gar nicht funktionieren. Du hast wohl E und RS vertauscht.
H. H. schrieb: > Du hast wohl E und RS vertauscht. Wenn nur ein LCD am "Bus" hängt, kann man dann Enable nicht auch fest auf gnd legen?
Peter N. schrieb: > H. H. schrieb: >> Du hast wohl E und RS vertauscht. > > Wenn nur ein LCD am "Bus" hängt, kann man dann Enable nicht auch fest > auf gnd legen? Nein.
Peter N. schrieb: > Wenn nur ein LCD am "Bus" hängt, kann man dann Enable nicht auch fest > auf gnd legen? Nein. Der LCD-Controller braucht die Enable-Flanken als Bus-Takt, um die anliegenden Werte in die internen Register zu übernehmen.
Auf der Pollin Webseite bei den Bewertungen steht, dass der Pinout bei diesem Display falsch ausgeführt ist. @TO: "blöde Frage": wurde das bei der Verdrahtung berücksichtigt?
Ozvald K. schrieb: > Auf der Pollin Webseite bei den Bewertungen steht, dass der Pinout bei > diesem Display falsch ausgeführt ist. > @TO: "blöde Frage": wurde das bei der Verdrahtung berücksichtigt? Hat er wohl beachtet, sonst wäre das Display wohl schon kaputt, wegen verpolter Versorgungsspannung.
Ich habe den Fehler gefunden es sind 4 von 10 Displays defekt :( Was kann bei so einem Display kaputt gehen ? die sind eigentlich neu oder ich denke Mal dass die neu sind bei Pollini werden die als neu verkauft. Jemand eine Idee ob man die Displays noch reparieren kann ?
🕵︎ Joachim L. schrieb: > 2.3. Function Set & wait > 39us (nicht 3x wie so oft angegeben) Das wird üblicherweise 3x gesendet, damit es auch dann funktioniert, wenn das LCD nicht (wie beim Power-on-Reset üblich) im 8-Bit-Modus, sondern bereits im 4-Bit-Modus ist. Kann z.B. dann passieren, wenn Dein Controller einen Brownout-Reset macht, aber das LCD unbeeindruckt weiterläuft.
Luca L. schrieb: > Ich habe den Fehler gefunden es sind 4 von 10 Displays defekt :( > Jemand eine Idee ob man die Displays noch reparieren kann ? Was willst Du bei 2,- Euro/Stück reparieren? Wenn Du keine Fehler gemacht hast, wie Verpolung, zu hohe Versorgungsspannung usw., dann reklamiere die Displays bei Pollin.
Luca L. schrieb: > Ich habe den Fehler gefunden es sind 4 von 10 Displays defekt :( Unwahrscheinlich. Ich habe auch mehrere davon und die funktionieren alle, ohne Ausnahme. Luca L. schrieb: > Was kann bei so einem Display kaputt gehen ? Viel, wenn du sie falsch behandelst oder verdrahtest ... Luca L. schrieb: > die sind eigentlich neu Ja, die sind neu. Restposten halt. Schutzfolie ist noch drauf gewesen bei mir. Luca L. schrieb: > Jemand eine Idee ob man die Displays noch reparieren kann ? Eher nicht.
Luca L. schrieb: > Ich habe den Fehler gefunden es sind 4 von 10 Displays defekt :( Ungewöhnlich. Meine waren bislang zu 100% ok. Luca L. schrieb: > die sind eigentlich neu > oder ich denke Mal dass die neu sind bei Pollini werden die als neu > verkauft. Wahrscheinlich, wie bei Pollin üblich, unbenutzte Restposten. Können schon einige Jahre alt sein... Luca L. schrieb: > Jemand eine Idee ob man die Displays noch reparieren kann ? Du hast ja scheinbar die Stiftleisten entfernt. Da mal genau nachsehen, ob da nicht Leiterbahnen mitkamen. Ansonsten kann man solche LCDs mit direktgebondeten Kontroller-ICs nur reparieren, indem man defektes LCD-Glas mit defekter Platine tauscht.
Luca L. schrieb: > Ich habe den Fehler gefunden es sind 4 von 10 Displays defekt :( Verlängere die Warteschleifen bei der Initialsierung deutlich und teste noch einmal. Die LCD-Kontroller laufen mit unterschiedlicher Taktfrequenz (RC-Timing), was zu Problemen führen kann, wenn das Timing zu knapp bemessen ist.
Frank E. schrieb: >> Wenn schwarze Klötzchen zu sehen sind, müßten auch Zeichen erscheinen. >> > Nein, müsste genau nicht. Bei mir war es damals so, dass die falsche > Kontrasteinstellung zu ebendiesen vollkommen schwarzen Kästchen führte. Wenn die Initialisierung klappt, müßten beiden Zeilen gleich aussehen. Es reicht aus, Kontrast auf GND zu legen. Das ist zwar nicht optimal aber für einen groben Test ausreichend.
Ich hatte bisher nur Probleme mit LCD-Modulen, wenn ich sie falsch angeschlossen habe. Egal ob von Pollin, Reichelt, oder Conrad. Allerdings sollte man das Timing nicht "auf Kante nähen". Probiere 100 µs, statt 50, oder 15 ms, statt 10 in den Initialisierungs- routinen. Wenn es damit klappt, tut es das nächstes Jahr auch noch. Viel nerviger finde ich, dass bei diversen Modulen von Pollin, Reichelt, oder Conrad die Hintergrundbeleuchtung nach 0,5 ... 2 Jahren stark abnimmt. Man kann den Vorwiderstand verkleinern, aber nach wenigen Monaten ist das Problem wieder da...
Ralf K. schrieb: > Viel nerviger finde ich, dass bei diversen Modulen von Pollin, Reichelt, > oder Conrad die Hintergrundbeleuchtung nach 0,5 ... 2 Jahren stark > abnimmt. Ich kenne es bislang nur von blauen reversen LCDs (also helle Zeichen auf dunklem Grund), daß sie nach einiger Zeit kaum noch lesbar sind. Ich habe bislang noch nicht untersucht, ob es an der Hintergrundbeleuchtung oder am Kontrast liegt, aber ich kann mir nicht so recht vorstellen, daß die Leds gleichmäßig dunkler werden...
Ralf K. schrieb: > Viel nerviger finde ich, dass bei diversen Modulen von Pollin, Reichelt, > oder Conrad die Hintergrundbeleuchtung nach 0,5 ... 2 Jahren stark > abnimmt. > Man kann den Vorwiderstand verkleinern, aber nach wenigen Monaten ist > das Problem wieder da... Dann musst du gleich zu Beginn dagegen wirken und den Strom durch die LED's Verringern so bald du das Display das erste mal verwendest. So weit reduzieren bis noch genug aber nicht zu viel Helligkeit übrig ist. Kostet doch nur einen Widerstand. Luca L. schrieb: > Jemand eine Idee ob man die Displays noch reparieren kann ? Wenn's am Controller darauf liegt, leider nicht. Verrutschte leitgummis geht, ist aber erbärmliche fummelei. Vor allem per Hand den richtigen und über das gesamte Display gleichmäßigen Anpressdruck zu bekommen... 🤮 Beim letzten Display anderthalb stunden gebraucht um das zuverlässig hinzubekommen. (Nach einem Sturz ging leider nix mehr) Abgerissene (beim Löten) Leiterbahnen geht noch, so lange genug Rest zum flicken über ist.
Luca L. schrieb: > Ich habe den Fehler gefunden es sind 4 von 10 Displays defekt :( Bei solchen Vorkommnissen ist die wahre Fehlerursache nicht selten die Stromversorgung oder das Timing. Es würde mich kein bisschen überraschen, wenn die 4 Displays bei anderen Leuten tadellos funktionieren. Luca L. schrieb: > Was kann bei so einem Display kaputt gehen ? Dessen Bauteile > ich denke Mal dass die neu sind bei Pollin werden die als neu verkauft. "Neuware" bei Pollin kann durchaus 40 Jahre alt und schlecht gelagert sein. Elektronik ist nicht ewig haltbar. Pollin verkauft Sachen, die sonst teuer als Sondermüll entsorgt werden müssten. Du kannst ja mal meinen angehängten Code versuchen. Damit laufen meine Displays alle (sorry für die hässlichen Makros, heute programmiere ich nicht mehr in diesem Stil).
Stefan F. schrieb: > Du kannst ja mal meinen angehängten Code versuchen. Damit laufen meine > Displays alle Wurde in jenem C-Programm schon auf das aktuell verwendete Target PIC optimiert? #include <P16F716.inc> ciao gustav
Karl B. schrieb: > Wurde in jenem C-Programm schon auf das aktuell verwendete Target PIC > optimiert? Ich habe das für einen AVR geschrieben. Kannst du ja an deine Hardware anpassen.
Hi, Ich habe da leider keine Ahnung von C Programmierung das einzige was ich programmieren kann ist Assembler für die PICs. Da ich die kaputten Display auch an so einem Arduino Dings ausprobiert habe wo man den Code nur zusammenklicken braucht da ist es der gleiche Fehler die 4 Stück gehen auch da nicht diese 4 Display sind ohne Schutzfolie die 6 Stück die gehen habe eine Folie drauf gehabt.
Luca L. schrieb: > die 4 Stück gehen auch da nicht diese 4 Display sind ohne > Schutzfolie die 6 Stück die gehen habe eine Folie drauf gehabt. Hmm, wenn du die Wannenstecker nicht rausgelötet hättest, dann hättest du die vier bei Pollin reklamieren und neue bekommen können. Ob sie die so noch zurücknehmen, weiß ich nicht …
:
Bearbeitet durch User
Deine Sequenz vor dem Absetzen des ersten Befehls weicht erheblich von meiner ab. So funktioniert es zuverlässig: E=LOW 50ms Pause RS=LOW 40ns Pause E=HIGH und 4 Bits 0011 ausgeben 250ns Pause E=LOW 5ms Pause <--- Ja, das ist lang, aber Absicht. E=HIGH 250ns Pause E=LOW 150µs Pause E=HIGH 250ns Pause E=LOW 250ns Pause E=HIGH und 4 Bits 0010 ausgeben 250ns Pause E=LOW 50µs Pause Auch die Ausgabe der Bytes in OutLcdControl hat bei mir ein anderes Timing. So funktioniert es zuverlässig: RS=LOW 40ns Pause E=HIGH + 4 Bits ausgeben 250ns Pause E=LOW 250ns Pause E=HIGH + 4 Bits ausgeben 250ns Pause E=LOW 60µs Pause Ausnahmen: "return home" und "clear display" (löschen und cusor home) brauchen 1600µs! Du wartest immer nur 50µs und auch die kurzen Delays darüber sind bei dir offenbar kürzer. Wobei ich kein Experte in Assembler bin. Du kannst die Zeiten sicher besser selbst mit deinem Code vergleichen. Ein Oszillogramm von der Enable Leitung würde schon viel zeigen.
Stefan F. schrieb: > 250ns Pause > E=LOW > 250ns Pause Bei mir auf der Arbeit haben wir immer 1000 ns genommen. Vielleicht steht soetwas auch noch im Datenblatt. Im Kopf finde ich es sofort.
Mi N. schrieb: > Bei mir auf der Arbeit haben wir immer 1000 ns genommen. Hier sind die Angaben von Hitachi für 3,3V und 5V. Ich habe meinen (schnelleren) Code allerdings auch schon erfolgreich mit 3,3V ohne Anpassung der Zeiten verwendet. Da hatte ich wohl Glück.
Stefan F. schrieb: > E=HIGH und 4 Bits 0011 ausgeben Auf welchen Datenleitungen werden diese Bits ausgegeben? D0-D3 oder D4-D7?
Peter N. schrieb: > Auf welchen Datenleitungen werden diese Bits ausgegeben? > D0-D3 oder D4-D7? Auf den 4 Leitungen, die mit D4-7 vom Display verbunden sind.
Ich kann auch noch eine LCD-Routine beisteuern, die ich schon vor zig Jahren für den PIC16F88 geschrieben habe und danach unverändert für alle mögliche LCD-Displays verwendete.
1 | ;*********************************************************************** |
2 | ; Initialisierung des LCD-Displays |
3 | |
4 | init_lcd |
5 | |
6 | movlw b'00110000' ; 0x30 - 8-bit-interface |
7 | call out8_control |
8 | |
9 | call wait5000 ; 5 ms warten |
10 | |
11 | movlw b'00110000' ; 0x30 - 8-bit-interface |
12 | call out8_control |
13 | |
14 | call wait5000 ; 5 ms warten |
15 | |
16 | movlw b'00110000' ; 0x30 - 8-bit-interface |
17 | call out8_control |
18 | |
19 | call wait5000 ; 5 ms warten |
20 | |
21 | movlw b'00100000' ; 0x20 - 4-bit-interface |
22 | call out8_control |
23 | |
24 | movlw b'00101000' ; 0x28 - 4-bit / 2-zeilig / 5x8 |
25 | call out4_control |
26 | |
27 | movlw b'00000110' ; 0x06 - cursor increase, display shifted |
28 | call out4_control |
29 | |
30 | movlw b'00001100' ; 0x0c - display on |
31 | call out4_control |
32 | |
33 | ; movlw b'00001000' ; 0x80 - ggf display off |
34 | ; call out4_control |
35 | |
36 | movlw b'00000001' ; 0x01 - löschen, cursor home |
37 | call out4_control |
38 | |
39 | return |
40 | |
41 | |
42 | |
43 | ;*********************************************************************** |
44 | ; ein Steuer-Byte als 2x4 Bit aus W zum Display übertragen |
45 | |
46 | ; C_Port = Control-Port sind die Bits RS, E und RW, D_Port = Daten-Port sind die Daten-Bits 4-7 |
47 | |
48 | out4_control |
49 | |
50 | movwf l_temp ; W zwischenspeichern |
51 | |
52 | call lcd_busy ; warten auf Display |
53 | |
54 | movfw l_temp ; Steuerbyte nach W |
55 | andlw 0xF0 ; untere 4 Bits ausblenden |
56 | movwf D_PORT ; obere 4 Bit schreiben |
57 | |
58 | bcf C_PORT, lcd_rs ; Steuerbyte: RS = 0 |
59 | bcf C_PORT, lcd_rw ; schreiben: RW = 0 |
60 | |
61 | bsf C_PORT, lcd_e ; E 0-1-0 |
62 | bcf C_PORT, lcd_e |
63 | |
64 | call wait20 ; 20 µs warten |
65 | |
66 | swapf l_temp, W ; untere 4 Bit nach oben in W |
67 | andlw 0xF0 ; untere 4 Bits ausblenden |
68 | movwf D_PORT ; untere 4 Bit oben schreiben |
69 | |
70 | bcf C_PORT, lcd_rs ; Steuerbyte: RS = 0 |
71 | bcf C_PORT, lcd_rw ; schreiben: RW = 0 |
72 | |
73 | bsf D_PORT, lcd_e ; E 0-1-0 |
74 | bcf D_PORT, lcd_e |
75 | |
76 | call wait50 ; 50 µs warten |
77 | |
78 | movfw l_temp ; W wiederherstellen |
79 | |
80 | return |
81 | |
82 | |
83 | |
84 | ;*********************************************************************** |
85 | ; ein Daten-Byte als 2x4 Bit aus W zum Display übertragen |
86 | |
87 | out4_daten |
88 | |
89 | movwf l_temp ; W zwischenspeichern |
90 | |
91 | call lcd_busy ; warten auf Display |
92 | |
93 | movfw l_temp ; Datenbyte nach W |
94 | andlw 0xF0 ; untere 4 Bits ausblenden |
95 | movwf D_PORT ; obere 4 Bit schreiben |
96 | |
97 | bsf C_PORT, lcd_rs ; Datenbyte: RS = 1 |
98 | bcf C_PORT, lcd_rw ; schreiben: RW = 0 |
99 | |
100 | bsf C_PORT, lcd_e ; E 0-1-0 |
101 | bcf C_PORT, lcd_e |
102 | |
103 | call wait20 ; 20 µs warten |
104 | |
105 | swapf l_temp, W ; untere 4 Bit nach oben in W |
106 | andlw 0xF0 ; untere 4 Bits ausblenden |
107 | movwf D_PORT ; untere 4 Bit oben schreiben |
108 | |
109 | bsf C_PORT, lcd_rs ; Datenbyte: RS = 1 |
110 | bcf C_PORT, lcd_rw ; schreiben: RW = 0 |
111 | |
112 | bsf C_PORT, lcd_e ; E 0-1-0 |
113 | bcf C_PORT, lcd_e |
114 | |
115 | call wait50 ; 50 µs warten |
116 | |
117 | movfw l_temp ; W wiederherstellen |
118 | |
119 | return |
:
Bearbeitet durch User
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.