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

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
Ich nutze:
eigenes Board, OSOPT V3.0, OSOPT V3.1
> 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)