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.
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.
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).
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
Oha - Das wäre aber nicht nötig gewesen
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.