Re: CC2 I/O Erweiterungen, generelle Fragen Kategorie: I²C-Bus (von nitraM - 5.01.2008 11:22) | ||
Als Antwort auf CC2 I/O Erweiterungen, generelle Fragen von threiter - 4.01.2008 23:50 | ||
| ||
> Hallo zusammen, > > ich betreibe momentan eine CC2 Station mit 5 Relais (1xUm). > > Für den Endausbau meiner derzeitigen Anwendung brauche ich > mindestens 20 Relais-Umschaltfunktionen, also einiges mehr, > als was die CC2 an Ausgängen (5+8=13) besitzt. > > Ich sollte vielleicht erwähnen, dass ich weder von Hardware noch von Software > besonders viel Ahnung habe und die jetzige Anwendung nur mit sehr viel "try and error" > hinbekommen habe. > > Beim Stöbern auf cctools.hs-control.de bin ich auf einige Komponenten gestossen, die > dem ersten Anschein nach mein Problem glaub ich erschlagen würden. > Doch leider scheint es da mehrere Möglichkeiten zu geben. > > Fragen: > 1. Kann mir jemand sagen, wie ich am einfachsten zu zusätzlichen 8 Schaltfunktionen komme? > 2. Das alles scheint irgendwie IIC (?) zu benötigen. > Hat jemand ein Beispielprogramm, aus dem ich ersehen kann, wie so eine IIC Relaisansteuerung > grundsätzlich funktioniert? > > Herzlichen Dank im Voraus und Gruss, > Thomas Reiter > 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... 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 } } } ...schnapp nitraM | ||
Antwort schreiben Antworten: Re: CC2 I/O Erweiterungen, generelle Fragen (von Jörg - 5.01.2008 21:45) Re: CC2 I/O Erweiterungen, generelle Fragen (von nitraM - 6.01.2008 14:28) Re: CC2 I/O Erweiterungen, generelle Fragen (von Jörg - 7.01.2008 21:03) Re: CC2 I/O Erweiterungen, generelle Fragen (von JoergC. - 5.01.2008 23:07) |