Wire.h und PCF8574AN I2C Bus Strecke läuft nicht

Hallo zusammen,

ich kriege mein pProjekt nicht zum laufen.
Ich habe mehrere PCF8574AN am I2C des Arduino Uno hängen.
Mit einem steuer ich ein LCD Display an, das funktioniert. Nun wollte ich die andern auch noch nutzen, doch leider tun sie einfach nichts.

Ich habe also alles abgestöpselt und nur den Display PCF dran gelassen. Display funktioniert.
Dann habe ich das Display entfernt und einfach LEDs mit Vorwiderständen an die Ausgänge des PCFs gesteckt (Breadboard).
Dann habe ich den (sonst unveränderten) PCF mit einem neuen Programm aber gleicher Adresse angesprochen. Nix!

Ich glaube ich mache etwas grundsätzliches mit den Wire Befehlen oder der init oder wasauchimmer falsch.
Denn das LCD funktioniert mit der Liquidcrystal-iI2C Library ganz wunderbar.

Nur meine selbstgeschriebene Ansprache führt zu nix;-(

Hier der Code:

#include <Wire.h>

void setup() {
Wire.begin();

}

void loop() {
Wire.beginTransmission (0x38); // unter dieser Adresse funktioniert die Sache mit dem LC Display
Wire.write(0xff); // 0x00 klappt auch nicht
Wire.endTransmission();
delay(5);
}

Hilfe!

Du musst dem zweiten pcf8574 und weiteren auch eine andere i2c-Adresse zuweisen und diese auch im Sketch verwenden.

Um die einzelnen i2c-Adressen zu prüfen, kannst du den I2C-Scanner verwenden.

Ich habe extra die gleiche Adresse genommen um Adressierungsfehler auszuschließen. der Bausetin und die Adresse ist nur einmal vorhanden, funktioniert mit dem LCD, wenn ich ihn ohne LCD anspreche-nur mit LEDs und dem Programm dort oben, dann passiert nichts! I2C Scanne..sehr schön..ich installiere.. :slight_smile:

--Adressierung stimmt! Der Sketch ist super! Danke!

Nur das Schreiben mit den Wire Befehl klappt nicht..es passiert nichts;-(

Ok, der obige Code ist ja auch nicht vollständig.

Du hast an keiner Stelle eine LED ein bzw. ausgeschaltet. So kann es nicht funktionieren.

Der folgende Code kann dir helfen, die Leds zu schalten. (Beispiel)
Du musst natürlich deine Adressen eintragen.

  void loop() {
  Serial.println("Pins HIGH schalten");
  Wire.beginTransmission(I2C_ADDR);
  Wire.write(I2C_ADDR & 0xFE);   // Alle Ports als Ausgang
  Wire.write(0xFF);              // Alle Pins HIGH
  Wire.endTransmission(true);
  
  delay(3000);
  
  Serial.println("Pins LOW schalten");
  Wire.beginTransmission(I2C_ADDR);
  Wire.write(I2C_ADDR & 0xFE);   // Alle Ports als Ausgang
  Wire.write(0x00);              // Alle Pins LOW
  Wire.endTransmission(true);
  
  delay(3000);
}

Wichtig: Zum Testen können die delays bleiben, aber im richtigen Code müssen die raus.

Du musst dich mit dem Datenblatt des PCF auseinandersetzen, um die Ports anzusteuern.

Was auch wichtig ist, um Leds mit dem PCF8574 zu schalten muss der Ausgang auf Low gehen,
High liefert zu wenig Strom für Leds.

DAS war der letzte fehlende Baustein! Ich habe die PLUS Seite der LED mit dem PCF verbunden, nun hab ichs gedreht und: es blinkt.. endlich!

Woher weißt Du denn das man Wire.write(Adresse & Portkonfiguration) schickt, bevor man
Wire.write(ausgabebyte) schickt?

Ich habe das in der Wire Reference hier auf der Page nicht gefunden.

Aus dem Datenblatt geht hervor wie ich zu adressieren habe und das ihm sagen muss was er tun soll (Output oder input) aber ich konnte daraus nicht erkennen das ich das so deklarieren muss.
Ich tue mich mit diesen Datenblätter echt schwer.

Und woher weiß ich das FE alle Ports als Ausgang ist? Ich habe mir schon die Adressierungstabelle ausgedruckt und hier aufgehängt, dann müsste es doch so eine Tabelle auch für die Portkonfiguration geben, oder?

Vielen Dank schon mal- das hat mir schon sehr geholfen!

BetaCarotin:
Woher weißt Du denn das man Wire.write(Adresse & Portkonfiguration) schickt, bevor man
Wire.write(ausgabebyte) schickt?

Ich habe das in der Wire Reference hier auf der Page nicht gefunden.

Aus dem Datenblatt geht hervor wie ich zu adressieren habe und das ihm sagen muss was er tun soll (Output oder input) aber ich konnte daraus nicht erkennen das ich das so deklarieren muss.
Ich tue mich mit diesen Datenblätter echt schwer.

Und woher weiß ich das FE alle Ports als Ausgang ist? Ich habe mir schon die Adressierungstabelle ausgedruckt und hier aufgehängt, dann müsste es doch so eine Tabelle auch für die Portkonfiguration geben, oder?

I2C ist für mich ein Thema mit dem ich mich schon länger beschäftige, schon lange bevor es Arduino gibt. Da habe ich auch entsprechende Literatur hier liegen und vieles findet man auch im Web.
Auch setze ich I2C in einigen Arduino-Projekten ein.

Und ich freue mich, dass ich dir helfen konnte.

Hier noch ein paar Infos: