Arduino PCF8574 lesen und schreiben

Im nachfolgenden Beispiel werden 8 Bit vom I2C-INPUT-Modul gelesen und 1:1 auf das I2C-OUTPUT-Modul ausgegeben.

Es ist also damit möglich mehrere digitale Signale von einer Karte auf die andere zu übertragen.

 

/*  
 ==============================================
 Test I2C-Input auf I2C-Output 
 ==============================================
 */

#include <Wire.h>
#define I2C_IN_ADDR 112 >> 1 // I2C-INPUT-Addresse als 7 Bit
#define I2C_OUT_ADDR 64 >> 1 // I2C-OUTPUT-Addresse als 7 Bit

byte WERT=0;
byte OUT_INV=0;
byte ALTWERT;

void setup() {
  Serial.begin(9600);       // Serielle Schnittstelle konfigurieren
  Wire.begin();             // I2C-Pins definieren

  // setzten aller Bits der Eingabekarte auf 1
  // -----------------------------------------
  Wire.beginTransmission(I2C_IN_ADDR);   // Start Übertragung zum PCF8574
  Wire.write(0xFF);                      // Alle Bits sind Eingänge
  Wire.endTransmission();                // Ende
}

void loop() { 

  // Einlesen der Bits aus der I2C-INPUT Karte
  // ------------------------------------------
  Wire.requestFrom(I2C_IN_ADDR, 1);    // Ein Byte (= 8 Bits) vom PCF8574 lesen
  while(Wire.available() == 0)         // Warten, bis Daten verfügbar 
    ;
  WERT = 255 - Wire.read();            // in invertierte Eingabe wandlen     
  
  if (WERT != ALTWERT) {               // Wert nur ausgeben wenn er sich ändert
    Serial.print("neuer Wert: ");      
    Serial.println(WERT);              // Wert auf "Seriel Monitor" ausgeben
    Wire.endTransmission(true);
    ALTWERT=WERT;                      // und nachführen
  }
  
  // Ausgeben der gleichen Bits an die I2C-OUTPUT Karte
  // --------------------------------------------------   
  OUT_INV = 255 - WERT;                 // in invertierte Ausgabe wandlen 
  Wire.beginTransmission(I2C_OUT_ADDR); // Start Übertragung zum PCF8574
  Wire.write(OUT_INV);                  // Wert schreiben
  Wire.endTransmission();               // Ende

}

 

5 Kommentare

  1. Thank you so much for your reply, I am using PCF8574 for output module and PCF8574A for input module but i also tried with PCF8574 for both the modules but still it did not work, what could be the problem?

    Thanks and Regards
    Nithin

  2. Hello,

    I tried the code with arduino uno, but the code is not working for me, is it something has to do with input and output addressing pins i am using 8574 and in the input board it shows 64 +1(65), can you please help me.

    Thanks and Regards
    Nithin

    • Hello,
      both modules with PCF8574?
      Then you have to Jumper the Output-Board LOW LOW LOW = slave-address 64
      and the Input-module LOW LOW HIGH = slave-address 66

      #define I2C_IN_ADDR 66 >> 1 // I2C-INPUT-Addresse as 7 Bit
      #define I2C_OUT_ADDR 64 >> 1 // I2C-OUTPUT-Addresse as 7 Bit

      Then it works

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.