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 Thomas, > > am einfachsten geht das ganze aus meiner Sicht mit einer I²C Relaiserweiterung... > > In meiner Heizungssteuerung verwende ich ein paar PCF8574, und die Ansteuerung über das > > Modul PCF... > > > > > > schnip... > > > > <code> > > thread iic_relais_in > > {byte i; > > int R_in; // Variable für Relais Eingänge > > int last_min; // Variable für Minuten > > last_min = -1; // Init mit -1 > > run 8; // Priorität ändern (Standart 32) > > loop > > {wait ((ports.get(12) == 0) or (system.minute() != last_min));// Interrupt P12 > > sleep 100; // entprellen der Relais > > last_min = system.minute(); // speichern für n+1 > > cap.Capture(global.I2C_Cap); // I²C Bus sperren > > R_in = (pcf.getn(global.Adr_IN_OUT,0) xor 0b1111); // Nibbel invert. einlesen > > cap.Release(global.I2C_Cap); // I²C Bus freigeben > > i= 0b1 and R_in; // Bit für Gaspumpe maskieren > > global.P_Gas_in = i; // Eingang speicherm > > i= (0b1 shl 1) and R_in; // Bit für Gasmischer maskieren > > if i > 0 i = 1; // wenn Bit gesetzt, mit 1 überschreiben > > global.M_Gas_in = i; // Eingang speichern > > i= (0b1 shl 2) and R_in; // Bit für Bewegungsmelder EG maskieren > > if i > 0 i = 1; // wenn Bit gesetzt, mit 1 überschreiben > > global.BM_EG = i; // Eingang speichern > > i= (0b1 shl 3) and R_in; // Bit für Bewegungsmelder DG maskieren > > if i > 0 i = 1; // wenn Bit gesetzt, mit 1 überschreiben > > global.BM_DG = i; // Eingang speichern > > } > > } > > > > thread iic_relais_out > > {int r_out; // Variable für die Relais Ausgänge > > int last_r_out; // Variable für Zwischenspeicherung > > last_r_out = -1; // Init mit -1 > > run 8; // Priorität ändern (Standart 32) > > loop > > {r_out = 0b1 and global.Fuehler_out; > > r_out = r_out shl 1 or global.P_Zirkulation_out; > > r_out = r_out shl 1 or global.Relais_1_out; > > r_out = r_out shl 1 or global.Relais_0_out; > > if r_out != last_r_out // hat sich was geändert?? > > {last_r_out = r_out; // speichern für n+1 > > cap.Capture(global.I2C_Cap); // I²C Bus sperren > > pcf.putn(global.Adr_IN_OUT,1,last_r_out); // Nibbel ausgeben > > cap.Release(global.I2C_Cap); // I²C Bus freigeben > > } > > } > > } > > > > thread iic_ssr_out > > {byte ssr_out; // Hilfsvariable > > byte last_ssr_out; // Hilfsvariable > > last_ssr_out = -1; // Variable initialisieren > > run 8; // Priorität ändern (Standart 32) > > loop > > {ssr_out = 0b1 and global.M2_auf_out; // Bit 7=> Mischer 2 auf > > ssr_out = ssr_out shl 1 or global.M2_zu_out; // Bit 6=> Mischer 2 zu > > ssr_out = ssr_out shl 1 or global.M1_auf_out; // Bit 5=> Mischer 1 auf > > ssr_out = ssr_out shl 1 or global.M1_zu_out; // Bit 4=> Mischer 1 zu > > ssr_out = ssr_out shl 1 or global.P_Kohle_out; // Bit 3=> Pumpe Kohle > > ssr_out = ssr_out shl 1 or global.P_Gas_out; // Bit 2=> Pumpe Gas > > ssr_out = ssr_out shl 1; // Bit 1=> nicht genutzt > > ssr_out = ssr_out shl 1 or global.P_Solar_out; // Bit 0=> Pumpe Solar > > > > if ssr_out != last_ssr_out // hat sich was geändert?? > > {last_ssr_out = ssr_out; // speichern für n+1 > > cap.Capture(global.I2C_Cap); // I²C Bus sperren > > pcf.out(global.Adr_SSR_OUT,last_ssr_out); // Ausgabe PCF8574 > > cap.Release(global.I2C_Cap); // I²C Bus freigeben > > } > > } > > } > > </code> > > ...schnapp > > > > nitraM > > Hallo nitraM, > > zu Deinem Programm habe ich mal eine Frage zum Capture. Es ist ja schon viel darüber geschrieben > und verstanden bzw. nicht verstanden worden. Grundsätzlich ist mir die Funktion mit dem Capture > schon klar. Wieso setzt Du bei den I2C-Befehlen ein Capture und 2. warum cap.Capture ein? > > In meiner Heizungssteuerung hatte ich mal versucht bei Flankenauswertungen Capture zu verwenden > (nur mal grob skizziert): > > function Flanke_Solar > > capture > > Auswertung Altwertspeicher > > Änderung erkannt > > Flanke Zählen > > release > > return > > Ich kam nur auf die Idee, weil ich am Flankenzähler gesehen habe, dass da etwas nicht stimmt. Einige > Flanken wurden nicht erkannt. Ich wollte mit dem Capture eigentlich nur erreichen, dass die paar Zeilen > ohne Unterbrechung abgearbeitet werden. Mit Capture hat das ganze Programm nicht mehr richtig > gearbeitet, ohne fehlten immer wieder Flanken. Im Forum hatte ich schon manchmal gelesen, das mit > OS V2.x irgendwas nicht stimmt. Nach Update auf OS V3.x hatte es aber immer noch nicht hingehauen. > > Ist denn das normale Capture immer noch fehlerhaft? > > Gruß Jörg
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB