
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo Willi! Ich komme aus Clarholz. Meine Email rückwärts geschrieben wegen der Spams ed.xmg@reneidrevrewhcs ;-) Habe schon seit Tagen Probleme mit der PCF8574A Die Pcf8574 habe ich mit diesem einfachen Programm am laufen. define SDA port[9] define SCL port[10] define a port[17] 'adr 0 (64) define b port[75] 'adr 7 (78) SDA=on:SCL=on #z IF a=0 Then b=0 Else b=1 goto z Wenn a an Gnd angelegt wird, schaltet b Das gleiche habe ich mit dem PCF8574AP getestet mit den port[81] und port[144] nur leider klappt das nicht. Was mache ich falsch? Das sind die Adresse die aus dem Beispielprogramm der DemoCD die ich nutze ' PCF 8574 ADR 0 Ports 17 - 24 BYTEPORT 3 ' PCF 8574 ADR 1 Ports 25 - 32 BYTEPORT 4 ' PCF 8574 ADR 2 Ports 33 - 40 BYTEPORT 5 ' PCF 8574 ADR 3 Ports 41 - 48 BYTEPORT 6 ' PCF 8574 ADR 4 Ports 49 - 56 BYTEPORT 7 ' PCF 8574 ADR 5 Ports 57 - 64 BYTEPORT 8 ' PCF 8574 ADR 6 Ports 65 - 72 BYTEPORT 9 ' PCF 8574 ADR 7 Ports 73 - 80 BYTEPORT 10 ' PCF 8574A ADR 0 Ports 81 - 88 BYTEPORT 11 ' PCF 8574A ADR 1 Ports 89 - 96 BYTEPORT 12 ' PCF 8574A ADR 2 Ports 97 - 104 BYTEPORT 13 ' PCF 8574A ADR 3 Ports 105 - 112 BYTEPORT 14 ' PCF 8574A ADR 4 Ports 113 - 120 BYTEPORT 15 ' PCF 8574A ADR 5 Ports 121 - 128 BYTEPORT 16 ' PCF 8574A ADR 6 Ports 129 - 136 BYTEPORT 17 ' PCF 8574A ADR 7 Ports 137 - 144 BYTEPORT 18 '------------------------------------------------------------------- ' Der IIC-Bus liegt an PORT 9 (SDA) und PORT 10 (SCL) ' > Hallo Gerd, > > 1) Ich bin aus 59302 Oelde! Wo wohnst Du denn? > (evtl. deine Mailadresse als Grafik! (wegen Spam) einfügen) > > 2) Anbei mal ein Programm bei dem ich in Basic die PCF Bausteine anspreche. > (Ganz schrecklich programmiert, geht aber seit 7 Jahren!) Ich mache Software > aber nur noch for die C2 :-) > > 3) Ich kenne Dein Programm nicht, aber wieso sollte ein PCF xxxxAP Byteport 11-18 sein? > Du liest oder sendest doch auch Adresse (des PCF/ 64 bis 79 ), Daten an/vom PCF. > Kann natürlich ein besseres Betriebssystem / Basic hergeben, daß Du direkt einen > PCF ansprechen kannst .... > > Beim AP ist nur die Adresslage anders (112 bis 127). Also wenn Du 8 Bausteine > 8574 am laufen hast, sollten die AP Typen "Peanuts" sein. > > Schöne Grüße, > Willi aus Oelde > > > > 'Programm : Markiesen_Steuerung_Plus_Texte > > ' Programm zur Ausgabe von Text auf F&P Display > ' (c) 17.7.2000 Willi aus Oelde > ' Steuerung von Markiesen und Rolladen > > Define Adresse Byte [1] ' für PCF Maschinenprogramm > Define Daten Byte [2] ' für PCF " > > Define Relais1 Byte [3] ' Als Speicher benötigt für die Ausgänge Board 1 > ' 1. Klemme ist Phase Lage: PCF oben/Klemmen unten > Define KitchZu Bit [17] ' 4.Relais 5.Klemme von links > Define KitchAuf Bit [18] ' 3.Relais 4.Klemme von links > Define Wohn1Auf Bit [19] ' 1.Relais 2.Klemme von links > Define Wohn1Zu Bit [20] ' 2.Relais 3.Klemme von links > Define WohnFZu Bit [21] ' 5.Relais 6.Klemme von links > Define WohnFAuf Bit [22] ' 6.Relais 7.Klemme von links > Define WTuerAuf Bit [23] ' 8.Relais 9.Klemme von links > Define WTuer1Zu Bit [24] ' 7.Relais 8.Klemme von links > > Define Relais2 Byte [4] ' Als Speicher benötigt für die Ausgänge Board 2 > Define MarkAuf Bit [25] ' auf Richtigkeit geprüft ! > Define MarkZu Bit [26] > Define Kind1Auf Bit [28] > Define Kind1Zu Bit [27] > Define ElternAuf Bit [29] > Define ElternZu Bit [30] > Define Kind2Auf Bit [31] > Define Kind2Zu Bit [32] > > Define Relais1S Byte [5] ' Als Speicher zum zählen benötigt 0 bis 4 ! > Define Relais2S Byte [6] ' Als Speicher zum zählen benötigt 0 bis 4 ! > Define HMerker Byte [7] > Define Merkerim Byte [8] > > Define TasterKüche BIT [57] ' Bits des Bytes 8 / Merkerim! > Define TasterWohn1 BIT [58] > Define TasterWohn3 BIT [59] > Define TasterWohn2 BIT [60] > Define TasterMark BIT [61] > Define TasterKind1 BIT [62] > Define TasterKind2 BIT [63] > Define TasterEltern BIT [64] > > Define Wert Byte [9] ' für Zeichenausgabe > Define Zahl Byte [10] ' für Zeichenausgabe > Define Modus Byte [11] ' für Auswahl Display > Define Auswahl Byte [12] ' für Auswahl Display > Define Auscount Byte [13] ' für Ausschaltzähler > > Define Schmier Byte [14] ' für Bits > Define AutoZu BIT [105] ' Bits vom Schmiermerker > Define AutoAuf BIT [106] > > Define I Byte [15] ' für Laufvariable ( zB. Unterprog. Warten ) > > Define Eingang Byteport[1] > > Define TKüche Port [1] ' Hier die Einzelbits > Define TWohn1 Port [2] > Define TWohn3 Port [3] > Define TWohn2 Port [4] > Define TMark Port [5] > Define TKind1 Port [6] > Define TKind2 Port [7] > Define TEltern Port [8] > Define SDA Port [9] > Define SCL Port [10] > Define Frei Port [11] ' Freier Port ###### > Define SerIn Port [12] > Define SerClk Port [13] > Define XPLoad Port [14] > Define SerOut Port [15] > Define Enable Port [16] > > 'Hour = 21 : Minute = 59 : Second = 30 > > SDA = ON : SCL = ON > > > ' Alle Ports bzw. Relais ausschalten, da keine Pullup - Widerstände ! > Relais1=0:Gosub Senden1:Gosub Senden2 > > Hmerker = 255 > > Enable = 0 ' für Fischer und Porter Display ! > XPLoad = 0 > SerClk = 0 > SerIn = 0 > DEACT SerOut > > Wert= &H38 : Gosub KommandoOut ' Initialisierung mit 2 Zeilen > Wert= &H0E : Gosub KommandoOut ' ok Display an > Wert= &H01 : Gosub KommandoOut ' ok Display weiter schieben > Wert= &H02 : Gosub KommandoOut ' Cursor home > > '__________________ HAUPTPROGRAMM _________________________________ > #Schleife > Pause 1 > Goto Jump1 > > Wert = &H02 : Gosub Command ' Internal Cursor Home > Zahl = Day : Gosub Ausg_Zahl2 : Wert=46 : Gosub ZeichenOut ' "." > Zahl = Month : Gosub Ausg_Zahl2 : Wert=32 : Gosub ZeichenOut ' Space > ' Zahl = Year : Gosub Ausg_Zahl2 > '--- Uhrzeit schreiben > Zahl = Hour : Gosub Ausg_Zahl2 : Wert=58 : Gosub ZeichenOut ' ":" > Zahl = Minute : Gosub Ausg_Zahl2 : Wert=58 : Gosub ZeichenOut ' ":" > > Wert = 142 : Gosub Command ' ab xx. Stelle 1. Zeile schreiben 128+18 ! > Zahl = Second : Gosub Ausg_Zahl2 > > Gosub Test > Wert = 168 : Gosub Command ' ab xx. Stelle 2. Zeile schreiben 128+40 ! > Zahl = Auswahl : Gosub Ausg_Zahl2 : Wert=58 : Gosub ZeichenOut ' ":" > > #Jump1 > > '----- Auto "zu" setzen > If ((Hour=20)and(Minute=55)and(Second<3)) then AutoZu=1 Else Goto EndeZu ' _____ Ausschaltzeit > > If TKüche then goto Zu1 'Küchentaster 0 = Automatik > Relais1S = (Relais1S and 252)or 2 ' Beim nächsten Schalten hoch > KitchAuf=0:KitchZu=1:Gosub Senden1:Wert=18:Gosub Warten:KitchZu=0:Gosub Senden1 > > #Zu1 > If TWohn1 then goto Zu2 'Wohnzimmertaster1 0 = Automatik > Relais1S = (Relais1S and 247) or 8 > Wohn1Auf=0:Wohn1Zu=1:Gosub Senden1:Wert=18:Gosub Warten:Wohn1Zu=0:Gosub Senden1 > > #Zu2 > If TWohn2 then goto Zu3 'Wohnzimmertaster2 0 = Automatik > Relais1S=(Relais1 and 207) or 32 > WTuerAuf=0:WTuer1Zu=1:Gosub Senden1:Wert=18:Gosub Warten:WTuer1Zu=0:Gosub Senden1 > > #Zu3 > If TWohn3 then goto Zu4 'Wohnzimmertaster3 0 = Automatik > Relais1S=(Relais1S and 63) or 128 > WohnFAuf=0:WohnFZu=1:Gosub Senden1:Wert=28:Gosub Warten:WohnFZu=0:Gosub Senden1 > > #Zu4 > If TKind1 then goto Zu5 > Relais2S=Relais2S and 252 ' ?? > Kind1Zu=1:Kind1Auf=0:Gosub Senden2:Wert=25:Gosub Warten:Kind1Zu=0:Gosub Senden2 > > #Zu5 > If TKind2 then goto Zu6 > Relais2S=Relais2S and 243 ' nicht getestet > Kind2Zu=1:Kind2Auf=0:Gosub Senden2:Wert=20:Gosub Warten:Kind2Zu=0:Gosub Senden2 > > #Zu6 > If TEltern then goto EndeZu > Relais2S=Relais2S and 207 ' nicht getestet > ElternZu=1:ElternAuf=0:Gosub Senden2:Wert=20:Gosub Warten:ElternZu=0:Gosub Senden2 > > #EndeZu > AutoZu = 0 > > If ((Hour=10) and (Minute=30)and (Second<3)) then AutoAuf=1 else Goto xx ' _____ Einschaltzeit ___ > > 'Küchentaster abfragen auf geschlossen = Automatik > If TKüche then goto zz > Relais1S = Relais1S and 252 > KitchZu=0:KitchAuf=1:Gosub Senden1:Wert=5:Gosub Warten ' Fahrzeit Auf > KitchAuf=0:Gosub Senden1 > > #zz > If TWohn1 then goto xx > Relais1S = Relais1S and 243 ' Beim nächsten Schalten runter ! > Wohn1Zu=0:Wohn1Auf=1:Gosub Senden1:Wert =5:Gosub Warten:Wohn1Auf=0:Gosub Senden1 > > #xx > '----- Automatik "auf" setzen > If ((Hour=8) and (Minute=30)and (Second<3)) then AutoAuf=1 else Goto EndeAuf ' _____ Einschaltzeit ___ > > 'Küchentaster abfragen auf geschlossen = Automatik > If TKüche then goto Auf > Relais1S = Relais1S and 252 > KitchZu=0:KitchAuf=1:Gosub Senden1:Wert=5:Gosub Warten:KitchAuf=0:Gosub Senden1 > > #Auf > 'Wohnzimmertaster abfragen auf geschlossen = Automatik > If TWohn1 then goto Auf1 > Relais1S = Relais1S and 243 ' Beim nächsten Schalten runter ! > Wohn1Zu=0:Wohn1Auf=1:Gosub Senden1:Wert =5:Gosub Warten:Wohn1Auf=0:Gosub Senden1 > #Auf1 > If TWohn2 then goto Auf2 > Relais1S = Relais1S and 207 ' Beim nächsten Schalten runter ! > WTuer1Zu=0:WTuerAuf=1:Gosub Senden1:Wert=10:Gosub Warten:WTuerAuf=0:Gosub Senden1 > #Auf2 > If TWohn3 then goto Auf3 > Relais1S = Relais1S and 63 ' Beim nächsten Schalten runter ! > WohnFZu=0:WohnFAuf=1:Gosub Senden1:Wert=30:Gosub Warten:WohnFAuf=0:Gosub Senden1 > #Auf3 > If TKind1 then goto Auf4 > Relais2S= (254 and Relais2S) or 2 ' Nur Bit 2 setzen Bit1 ausmaskieren > Kind1Zu=0:Kind1Auf=1:Gosub Senden2:Wert=15:Gosub Warten:Kind1Auf=0:Gosub Senden2 > #Auf4 > If TKind2 then goto Auf5 > Relais2S=(251 and Relais2S) or 8 > Kind2Zu=0:Kind2Auf=1:Gosub Senden2:Wert=10:Gosub Warten:Kind2Auf=0:Gosub Senden2 > #Auf5 > If TEltern then goto EndeAuf > Relais2S=(239 and Relais2S) or 32 > ElternAuf=1:Gosub Senden2:Wert=10:Gosub Warten:ElternAuf=0:Gosub Senden2 > #EndeAuf > AutoAuf = 0 ' Nur aus Spass > > ' ---------- Erste Platine ---------- > Merkerim = NOT Eingang AND NOT HMerker ' Impuls bilden > HMerker = NOT Eingang > Merkerim = NOT Merkerim > > '--- Relais nach Zeit spannungslos schalten > If ((Relais1>0) or (Relais2>0)) then Auscount=Auscount+1 Else Auscount=0 > If Auscount < 255 then goto Weit > > If Relais1 and 48 then TasterWohn3 = 0 > If Relais1 and 192 then TasterWohn2 = 0 > If Relais1 and 12 then TasterWohn1 = 0 > If Relais1 and 3 then TasterKüche = 0 > > If Relais2 and 48 then TasterEltern= 0 > If Relais2 and 192 then TasterKind2 = 0 > If Relais2 and 12 then TasterKind1 = 0 > If Relais2 and 3 then TasterMark = 0 > > #Weit > > If TasterKüche then goto Weiter > If (Relais1S and 3) = 3 then Relais1S = Relais1S and 252 else Relais1S = Relais1S+1 > If (Relais1S and 3) = 0 then KitchAuf =0 > If (Relais1S and 3) = 1 then KitchZu=1 > If (Relais1S and 3) = 2 then KitchZu=0 > If (Relais1S and 3) = 3 then KitchAuf =1 > #Weiter > > If TasterWohn1 then goto Weiter1 > If (Relais1S and 12) = 12 then Relais1S = Relais1S and 243 else Relais1S = Relais1S+4 > If (Relais1S and 12) = 0 then Wohn1Auf =0 > If (Relais1S and 12) = 4 then Wohn1Zu=1 > If (Relais1S and 12) = 8 then Wohn1Zu=0 > If (Relais1S and 12) = 12 then Wohn1Auf =1 > #Weiter1 > > If TasterWohn2 then goto Weiter2 > If (Relais1S and 48) = 48 then Relais1S = Relais1S and 207 else Relais1S = Relais1S+16 > If (Relais1S and 48) = 0 then WTuerAuf =0 > If (Relais1S and 48) = 16 then WTuer1Zu=1 > If (Relais1S and 48) = 32 then WTuer1Zu=0 > If (Relais1S and 48) = 48 then WTuerAuf =1 > #Weiter2 > > If TasterWohn3 then goto Weiter3 > If (Relais1S and 192) = 192 then Relais1S = Relais1S and 63 else Relais1S = Relais1S+64 > If (Relais1S and 192) = 0 then WohnFAuf =0 > If (Relais1S and 192) = 64 then WohnFZu=1 > If (Relais1S and 192) = 128 then WohnFZu=0 > If (Relais1S and 192) = 192 then WohnFAuf =1 > #Weiter3 > Gosub Senden1 > ' -------- 2. Platine ----------------- > If TasterKind1 then goto Weiter4 > If (Relais2S and 3) = 3 then Relais2S = Relais2S and 252 else Relais2S = Relais2S+1 > If (Relais2S and 3) = 0 then Kind1Zu =0 > If (Relais2S and 3) = 1 then Kind1Auf=1 > If (Relais2S and 3) = 2 then Kind1Auf=0 > If (Relais2S and 3) = 3 then Kind1Zu =1 > #Weiter4 > > If TasterKind2 then goto Weiter5 > If (Relais2S and 12) = 12 then Relais2S = Relais2S and 243 else Relais2S = Relais2S+4 > If (Relais2S and 12) = 0 then Kind2Zu =0 > If (Relais2S and 12) = 4 then Kind2Auf=1 > If (Relais2S and 12) = 8 then Kind2Auf=0 > If (Relais2S and 12) = 12 then Kind2Zu =1 > #Weiter5 > > If TasterEltern then goto Weiter6 > If (Relais2S and 48) = 48 then Relais2S = Relais2S and 207 else Relais2S = Relais2S+16 > If (Relais2S and 48) = 0 then ElternZu =0 > If (Relais2S and 48) = 16 then ElternAuf=1 > If (Relais2S and 48) = 32 then ElternAuf=0 > If (Relais2S and 48) = 48 then ElternZu =1 > #Weiter6 > > If TasterMark then goto Weiter7 > If (Relais2S and 192) = 192 then Relais2S = Relais2S and 63 else Relais2S = Relais2S+64 > If (Relais2S and 192) = 0 then MarkZu =0 > If (Relais2S and 192) = 64 then MarkAuf=1 > If (Relais2S and 192) = 128 then MarkAuf=0 > If (Relais2S and 192) = 192 then MarkZu =1 > #Weiter7 > Gosub Senden2 > > Goto Schleife > > ' -------- Kommando out ----------- > #KommandoOut > #Command > XPLoad = 1 ' XPLoad High = Instruction / Nur bei F&P ! > Gosub ZeichenOut > XPLoad = 0 ' XPLoad Low = Daten > Pulse SerClk ' > Return > > #Ausg_Zahl2 > Wert=Zahl/10+48 : Gosub Zeichenout > Wert=Zahl Mod 10+48 ' geht von allein ins return ! > > ' --- Zeichen ins Schieberegister -- > #ZeichenOut > Serin = Wert and 128: Pulse SerClk > Serin = Wert and 64 : Pulse SerClk > Serin = Wert and 32 : Pulse SerClk > Serin = Wert and 16 : Pulse SerClk > Serin = Wert and 8 : Pulse SerClk > Serin = Wert and 4 : Pulse SerClk > Serin = Wert and 2 : Pulse SerClk > Serin = Wert and 1 : Pulse SerClk > Pulse Enable ' Muss zum Übernehmen > SerIn = 0 ' SerIn Low Muss !!!! > Pulse Serclk ' Muss aus irgend welchen Gründen unbedingt sein ! > Return > > #Test > If SerOut = 0 then Auswahl = Auswahl+1' Mittlerer Taster > XPLoad = 1 > Pulse SerClk > If SerOut = 0 then Modus = Modus+1 ' Rechter Taster > Pulse SerClk > If SerOut = 0 then Auswahl = Auswahl-1' Linker Taster > XPLoad = 0 > Return > > #Warten > For I=1 to Wert > Pause 50 > Next I > Return > > '#Senden > ' Adresse=64:Daten=Relais1:sys &H0101 ' Für I²C-Bus > 'Return > > #Senden1 > Daten = Relais1 > SDA=OFF :SCL=OFF > Wert=64 :gosub IC_Write 'Adresse PCF > Wert=Daten:gosub IC_Write > SDA=OFF :SCL=ON:SDA=ON > return > > #Senden2 > Daten = Relais2 > SDA=OFF :SCL=OFF > Wert=66 :gosub IC_Write 'Adresse PCF > Wert=Daten:gosub IC_Write > SDA=OFF :SCL=ON:SDA=ON > return > > #IC_WRITE > for I = 1 to 8 > SDA= OFF > if (Wert AND 128) = 128 then SDA = ON > pulse SCL > Wert = Wert shl 1 '1 Bit nach links > next > pulse SCL ' 9. Impuls > return |
| Antwort schreiben |