Re: Init LCD in lcdext vs. pcflcd Kategorie: Sonstige Hardware (von Rolf - 17.08.2003 1:19) | |
Als Antwort auf Re: Init LCD in lcdext vs. pcflcd von Rolf - 16.08.2003 21:57
| |
Hallo André ich fürchte, da ist in pcflcd.c2 doch was nicht ganz ok. Und zwar in der Initialisierung für das Display fast am Ende der Funktion. Wenn Du die Website http://www.sprut.de/electronic/lcd/ (hatte Link gepostet) anschaust, gibt es dort unten die Tabelle zum initialisieren eines 4-Bit-Displays. Schon dort in dieser Tabelle hat sich ein Fehler eingeschlichen, der anscheinend nie gefixt und von vielen Leuten ohne Prüfung einfach kopiert wurde. Ich hab erst geglaubt, ich könne selbst nicht mehr zählen aber ich komme immer auf den Fehler.... Vergleichst Du Deine Befehlssequenz nicht mit der fehlerhaften Tabelle sondern mit den richtigen Befehlen aus der Tabelle weiter oben oder den Datenblättern, merkst Du, das sich da jemand beim Zählen von Bits bei der Nibleaufteilung für den Entry-Mode verzählt hat. Einfach und nachvollziehbar, weiter oben gehst Du das Register zum Einschalten vom Display und Cursor mit: 00 C0 an. i2c.write(0x04 or light); // Display Control i2c.write(0x00 or light); // Set highnibble i2c.write(0xC4 or light); // Cursor Off, display On i2c.write(0xC0 or light); // Set lownibble an, dann kann aber folgendes nicht stimmen. 00 60 i2c.write(0x04 or light); // Entry-Mode i2c.write(0x00 or light); i2c.write(0x64 or light); // inkrement, Cursor-shift i2c.write(0x60 or light); So ist's richtig: 10 C0 i2c.write(0x14 or light); // Entry-Mode i2c.write(0x10 or light); i2c.write(0xC4 or light); // inkrement, Cursor-shift i2c.write(0xC0 or light); Ein wirklich interssanter Fehler da er nicht nur bei Dir auftaucht.... :-) :-) :-) Dann wollte ich noch wissen, warum Du am Anfang mehrmals die gleichen Bytefolgen in das PCF schreibst... das mit dem Low-Nibble 4 hab ich verstanden, Datenübergabe bei fallendem E... i2c.write(0x30 or light); //??? i2c.write(0x30 or light); //??? i2c.write(0x34 or light); // Function Set 8 Bit i2c.write(0x30 or light); sleep 2; i2c.write(0x30 or light); //??? i2c.write(0x34 or light); // Function Set 8 Bit i2c.write(0x30 or light); //??? i2c.write(0x30 or light); Mein Display macht immer noch nicht was es soll, ich bin mir aber jetzt sicher, das ich es nicht falsch rum (also SEIKO-Zählweise) angeschlossen hab.... wenn dem so wäre, lägen auf D6 und D7 Masse und + 5V an... ich glaube nicht, das sich das Display dann ausser mit einer Qualmwolke gemeldet hätte ;-) Anscheinend ist der Controller aber doch etwas anders / empfindlicher als der übliche 44780 Dann möchte ich noch eine �nderung des Funktionskopes von init anregen. Man mu� vor jedem init ein setpcf machen da byte PCF; nicht initialisiert ist. Bei mehreren Displays entsprechend jedesmal vor dem init und dann pro LCD ein init... mit: function init (byte pcfnr) //!!! { if pcfnr > 7 PCF=((pcfnr+16) shl 1)or 64; else PCF=(pcfnr shl 1) or 64; //!!! light=light and 8; i2c.start(PCF); könnte man sich das sparen und es kommt keiner auf die Idee, das setpcf vor dem init zu vergessen... denn dann mu� ja pcflcd.init(displaynr); aufgerufen werden und byte PCF; bekommt damit zwangsweise ein Wert. Die Funktion setpcf mu� aber bleiben damit im Betrieb die Displays umgeschaltet werden können. Das sehe ich nicht als Fehler sondern eher als "Verbesserungsvorschlag". Gru� Rolf | |
Antwort schreiben Antworten: Re: Init LCD in lcdext vs. pcflcd (von André H. - 17.08.2003 9:31) Re: Init LCD in lcdext vs. pcflcd (von Rolf - 19.08.2003 16:21) Re: Init LCD in lcdext vs. pcflcd (von Rolf - 19.08.2003 16:59) Re: Init LCD in lcdext vs. pcflcd (von André H. - 19.08.2003 17:04) Re: Init LCD in lcdext vs. pcflcd (von Rolf - 22.08.2003 14:50) Re: Init LCD in lcdext vs. pcflcd (von André H. - 22.08.2003 16:54) Re: Init LCD in lcdext vs. pcflcd (von Rolf - 23.08.2003 17:16) Re: Init LCD in lcdext vs. pcflcd (von Rolf - 22.08.2003 23:02) Re: Init LCD in lcdext vs. pcflcd (von André H. - 23.08.2003 0:50) Re: Init LCD in lcdext vs. pcflcd (von Rolf - 23.08.2003 2:14) Re: Init LCD in lcdext vs. pcflcd (von Rolf - 23.08.2003 13:27) Re: Init LCD in lcdext vs. pcflcd (von Rolf - 23.08.2003 0:43) |