Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

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
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB