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é! > > > > Vielen Dank für Deine Ausführungen. Du hast es genau erfasst. Ich nutze den I²C-Bus um diverse > > Hausautomatisierung zu steuern. Hierbei sind Taster an einem PCF8574 angeschlossen. > > Logischerweise wird ein Taster nur kurz betätigt (ca. 20-100 ms). Um mit dem Programm nicht ständig > > über den I²C-Bus den PCF8574 pollen zu müssen, würde ich gerne Ereignisgesteuert den PFC auslesen, > > wenn dieser seinen Interruptausgang verändert. > > > > Für Ideen, Tips oder Beispiele wäre ich sehr dankbar. > > Würdest Du den Port der C-Control Station ständig abfragen? > > > > Hi, > ich habe mich ein wenig experimentell mit der Sache beschäftigt, da ich diverse > Haussteuerungs Tasks damit erledigen will. > > Der Trick besteht darinn, die INT Leitung des 8574 mit einem PullUp (zb. 10k) auf High zu halten, > und diese an einen der 5 interupttauglichen Ports der Station zu führen. > > Ich habe dann 2 Threads gebaut: > - einer wartet in einer Loop mittels Wait auf ein Lo an diesem Port und tut nichts weiter als > den 2. Thread mit Resume wieder aufzuwecken > - der zweite läuft ebenfalls in einer Loop, an deren Ende ein Halt steht. Wird er resumed, dann > gehts wieder an den Anfang der Loop, und in einer inneren Loop werden alle bekannten 8574 > abgeklappert und ihr Wert mit den gespeicherten letzten verglichen, und gegebenenfalls eben > eine Aktion gesetzt. > > Beispiel Code, auszugsweise: > <code> > thread pcfmain > { > wait (initdone==1); > run pcfmon; > loop > { > wait !ports.get(15); > resume pcfmon; > } > } > > thread pcfmon > { > byte oo, i ; > > loop > { > for i = 0 ... 15 > { > if PCFPresent[i] == 1 > { > oo = pcf.in(i); > if oo != PCFLast[i] > { > // hier kommt die Aktion > // .... > // und am Ende merken wir uns noch den neuen Wert > PCFLast[i] = oo; > } > } > } > halt; > } > } > </code> > > Ich schicke gerne das ganze Test-Prog via PM zu, möchte es hier in seinem Teststatus nicht > so public machen. Wahrscheinlich geht es ein wenig schneller, wenn man die 2 Threads in > einem zusammenfaßt, als "alter Procedurealer " splitte ich aber lieber auf. ;-) > > lg, Franz