Frage zum PCF8574

Hallo,
ich möchte Positionsschalter min alle 20ms abfragen.
Welche der zwei Möglichkeiten ist besser wenns schnell gehen soll?
Und kann es ein Problem werden, wenn ich im unteren Beispiel den PCF 8574 nie resete.

void loop(){
Wire.beginTransmission(PCF8574_ADDR);                   
Wire.requestFrom(PCF8574_ADDR, 1);                      
while(Wire.available() == 0);                            
PCF8574_Data = Wire.read();                               
Wire.endTransmission();
}
void setup(){
wire.begin();
Wire.beginTransmission(PCF8574_ADDR); 
}

void loop(){
Wire.requestFrom(PCF8574_ADDR_Pos, 1);                      
while(Wire.available() == 0);                               
PCF8574_Data = Wire.read();
Wire.endTransmission(true);
}

Gruß Aron

Das ist beides falsch. beginTransmission() started einen Sende-Vorgang. endTransmission() sendet die Daten die man per write() in den Sende-Puffer geschrieben hat. Bei Empfangen hat das nichts zu suchen.

Doku ansehen:

Hi

Wollte gerade in ähnliche Richtung gehen - bin selber dabei, vier FRam (FM24C04) auszulesen.
Dort wird dem FRam beim

  • wire.beginTransmission(I2C-Nummer);
  • wire.write(Adresse);
  • wire.endTransmission (mit Rückgabe des Fehlerwert, 0=ok)
    Die Wunsch-Adresse eingestellt und anschließend per
  • wire.requestFrom(I2C-Nummer, 1);
  • byte var=wire.read();
    das gewünschte Byte ausgelesen (statt der 1 kann man auch mehrere Bytes am Stück lesen/schreiben).

Beim Beschreiben wird nach der Adresse einfach lustig weiter drauf los geschrieben, also wire.write(Bytewert); und das Schreiben mit wire.endTransmission() abgeschlossen, wieder mit Rückgabe des Fehler-Wert, ok Alles geklappt hat (0=ok).

MfG

Zum FRAM gab es hier einen Thread. Der Code in #22 ist die letzte Fassung.

Gruß Tommy

Für den Baustein gibt es soweit ich weiß eine Lib, die ihn direkt als Portexpander anspricht, ähnlich dem mcp23017

Tommy56:
Zum FRAM gab es hier einen Thread. Der Code in #22 ist die letzte Fassung.

Gruß Tommy

Was hat jetzt das FRAM mit einem Portexpander zu tun?

Das war für postmaster-ino.

Gruß Tommy

ElEspanol:
Für den Baustein gibt es soweit ich weiß eine Lib, die ihn direkt als Portexpander anspricht, ähnlich dem mcp23017

Wozu braucht man da eine Bibliothek? Der MCP23017 ist intern relativ kompliziert, aber der PCF8574 hat keinerlei Konfigurations- oder Statusregister. Man muss nur ein Byte Senden oder Empfangen

Hi

Oha - Das wäre aber nicht nötig gewesen :slight_smile:
Mir ging es bei meiner Ausführung darum, daß das endTransmission() das Ende der Adress-Einstellung darstellt und anschließend per request die auszulesenden Daten im 2.ten Schritt angefordert werden.
Unabhängig, ob am anderen Ende ein FRam oder ein Port-Expander lauscht.

Da ich aber auf unerwartete Probleme stieß, kommt mir Dein Link ganz recht.

Danke dafür!

MfG

Bei dem PCF8574 muss man nicht mal eine Adresse auf die Art setzen. Da ja nur das eine Byte gibt.

Aber man sollte halt verstehen dass beginTransmission()/endTransmissioN() nur etwas Senden.