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é > > > > 1.Ist es möglich, das BF-Flag mit dem PCF-Modul auszulesen und wenn ja, wie? > > > > Es ist möglich: > > > > i2c.cstart(addr); > > i2c.write(0xF2); > > i2c.write(0xF6); > > i2c.stop(); > > i2c.cstart(addr or 1); > > BF= (i2c.readlast() and 0x80)!=0; > > i2c.stop(); > > i2c.cstart(addr); > > i2c.write(0xF2); > > i2c.write(0xF0); > > i2c.stop(); > > Ich habe gemäß Deinem Vorschlag und mit Einsicht in die Datenblätter folgende Funktion erstellt: > > <code> > function WriteCmd (byte pcfnr, byte cmd) > {byte PCF; > if pcfnr > 7 PCF=((pcfnr+16) shl 1)or 64; else PCF=(pcfnr shl 1) or 64; > i2c.cstart(PCF); > i2c.write((cmd and 0xF0) or light[pcfnr]); > i2c.write((cmd and 0xF0) or light[pcfnr] or 0x4);// HighNibble > i2c.write((cmd and 0xF0) or light[pcfnr]); > i2c.write((cmd shl 4) or light[pcfnr] or 0x4); // LowNibble > i2c.write((cmd shl 4) or light[pcfnr]); > // i2c.write(light[pcfnr] or 0x1); > // i2c.stop(); > > sleep 20; > > //i2c.cstart(PCF); > i2c.write(0xF2);// D4-7 = 1, RS = 0, RW = 1 > i2c.write(0xF2 or 0x4);// E =1, BF steht erst bei fallender Flanke von E an > i2c.write(0xF2);// Register BF+ADDR Counter high Nibble liegt nun an D4-7 > i2c.stop(); > > i2c.cstart(PCF or 1); //Lesen High Nibble ins PCF > if (i2c.readlast() and 0x80)!=0 //Zu schnell -> sleep oben höher setzen > { > plm.beep (12);// einmal kurz piepen > sleep 100; // Status nun unklar da BF überrannt > plm.beep (-1);// > }; > i2c.stop(); // D7 = Bit 7 = BF-Status, D6-D4 = ADDR Counter > > i2c.cstart(PCF);// D4-7 = 1, RS = 0, RW = 1 > i2c.write(0xF2 or 0x4);// E =1 > i2c.write(0xF2);// Register BF+ADDR Counter low Nibble liegt nun an D4-7 > i2c.stop(); > > i2c.cstart(PCF or 1); //Lesen Low NIbble > i2c.readlast(); //wert wird noch verworfen, 2 x 4 Bit Übertragung abgeschlossen > i2c.stop(); > > i2c.cstart(PCF); //Diese Sequenz setzt das Display in den Schreibmodus > i2c.write(0xF0); //Setzen des PCF, D4-D7=1, RS=0,RW=0,E=0 > i2c.stop(); > } > </code> > > Eigentlich müste ich damit das BF-Flag auslesen könen, wie Du sagst. > > Die Funkktion dürfte nur piepen wenn BF 1 also Bussy hat. > > Ich zitiere aus dem Datenblatt: > > "Interfacing to the MPU > > The HD44780U can send data in either two 4-bit operations or one 8-bit operation, thus allowing > interfacing with 4- or 8-bit MPUs. For 4-bit interface data, only four bus lines (DB4 to DB7) are used for transfer. > Bus lines DB0 to DB3 are disabled. The data transfer between the HD44780U and the MPU is completed after the > 4-bit data has been transferred twice. As for the order of data transfer, the four high order bits (for 8-bit operation, > DB4 to DB7) are transferred before the four low order bits (for 8-bit operation, DB0 to DB3). > The busy flag must be checked (one instruction) after the 4-bit data has been transferred twice. > Two more 4-bit operations then transfer the busy flag and address counter data." > > Das "BF"-Flag ist immer 1, selbst wenn mann 20 ms wartet. > Eigentlich dürfte sie nur bei sehr kleinen sleep-Werten Alarm geben und mit steigenden Sleepwerten > müste es aufhören (weil dann das Timing eingehalten wird). Oder der i2c ist zu langsam, dann dürfte > BF niemals 1 sein. > > Daraus schließe ich, das entweder noch ein Denkfehler in der Funktion ist oder Du unrecht bezüglich > Deiner Angaben zum Lesen des BF hast. Ich würde Dir gerne Recht geben aber dazu muß die Funktion > wie erwartet arbeiten. In Deinem Beispiel liest Du BF vor der fallenden Flanke von E ein. Das Datenblatt > ist dazu wie zitiert eindeutig. > > Und werde bitte nicht wieder ausfallend. > Gruß Rolf