Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > 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