I2C IO Expander mit lib

Hallo,
kennt jemand einen 8-16 Port I2C IO Expander mit einer verständlichen Lib und evl einer deutschen beschreibung?
Super wäre es auch, wenn die Busadresse frei wählbar wäre und es mindestens 4 verschiedene gibt.

Viele Grüße

MCP23017

Grüße Uwe

PCF8574

ich hab zwar keine fertige Lib dafür, allerdings gibt es sicher irgendwo welche :wink:

Ich nutze dafür zum Beispiel folgende kleine Funktionen:

byte readPort(int address) {
  byte data=0xff;
  TinyWireM.requestFrom(address,1);
  if(TinyWireM.available()){
    data=TinyWireM.receive();
    data_received=true;
    }
  else {
    data_received=false;
  }
  
  return data;
}

void writePort(int address, byte data) {
  TinyWireM.beginTransmission(address);
  TinyWireM.send(data);
  TinyWireM.endTransmission();
  delay(5);
}

damit kann man gleich immer 8 Bits auf einmal lesen / schreiben. Die kann man aber auch problemlos erweitern um einzelne Bits zu lesen / zu schreiben.

durch die 3 Adress-Pins des Bausteins können bis zu 8 PCF8574 gleichzeitig betrieben werden. Da es noch eine zweite Variante PCF8574A mit anderer Basis-Adresse gibt, können dann nochmal 8 hiervon verwendet werden. Die meisten I2C-LCD-Displays nutzen zum Beispiel diese Portexpander für die Umsetzung von I2C hin zum HD44780 Standard.

@mgcss: Ich finde den Vorschlag von Uwe besser. Erstens gibt es da eine Lib, zweitens hat der doppelt soviele E/A-Pins.

Gruß,
Ralf

na dann werde ich wohl mal ne Lib schreiben müssen :wink:

das mit den doppelt so vielen Pins pro Baustein stimmt zwar, allerdings lassen sich dafür halt doppelt so viele Bausteine betreiben ... also alles nur eine Frage der Sichtweise :wink:

mgcss:
das mit den doppelt so vielen Pins pro Baustein stimmt zwar, allerdings lassen sich dafür halt doppelt so viele Bausteine betreiben ... also alles nur eine Frage der Sichtweise :wink:

Zum doppelten Preis ]:slight_smile:

Gruß,
Ralf

Hallo Leute,
Vielen Dank!
Genau sowas wollte ich! Gibt es da schon fertige Shields? Habe bei Adafruit nur das IC gefunden.
Ist später eh sinnvoll aber zum üben ist ein Shield immer was nettes :smiley:

Viele Grüße

Zum doppelten Preis ]:slight_smile:

nörgel nörgel nörgel :stuck_out_tongue_closed_eyes:

aber Spaß beiseite ... ich denke schon, dass beide Varianten ihre Daseinsberechtigung haben. Um nochmal auf die Frage der Libs zurück zu kommen: kennt zufällig jemand eine fertige Lib für die PCF8574? Sonst mach ich mich wirklich mal dran eine zu schreiben.

@Masterboy: ich beschäftige mich meist nur mit den Digisparks ... da würde es ein fertiges PCF8574 Shield geben. Ich kann mir aber nicht vorstellen, dass es für einen "richtigen" Arduino keine fertigen Shields geben sollte. Die Portexpander (egal nun welcher Chip) gehören eigentlich zum kleinen 1x1. Da müßte sich schon was finden lassen.

Kämpf Dich doch mal durch diesen Thread, vielleicht ist das was für Dich: Sammelbestellung: 64 Port I2C-Expander als Arduino-Shield - Deutsch - Arduino Forum

@mgcss: Wenn Du da wirklich was schreibst, lass mich davon hören, würde mich auch interessieren.

Gruß,
Ralf

Der PCF8574 ist so einfach, dass eine extra Lib Overkill wäre :slight_smile:

Einfach zwei Methoden für Schreiben und Lesen

naja ... ne Lib hätte halt den Vorteil, dass man den Code etwas standardkonformer gestallten könnte ... also ein DigitalWrite, DigitalRead, PinMode usw.

Serenifly:
Der PCF8574 ist so einfach, dass eine extra Lib Overkill wäre :slight_smile:
Einfach zwei Methoden für Schreiben und Lesen

Und etwas, womit man sich einfach in den Reset-Mechanismus des Chips einklinken kann.

Gruß,
Ralf

Außer dem PCF8574 ( und PCF8574A mit anderer Adresse) und dem MCP23017 gibt es noch andere:
PCF8575
MCP23016 mit anderen Ausgangskonfiguration
MCP23008 bzw MCP23009 die 8 Bit Variante
den PCA9555 als 16 Bit http://wiki.gnublin.org/index.php/Port_Expander_PCA9555 und Arduino Playground - I2CPortExpander8574
TCA9555
Von den MCP gibt es auch die SPI Bus Variante MCP23Sxx
Grüße Uwe

mgcss:
naja ... ne Lib hätte halt den Vorteil, dass man den Code etwas standardkonformer gestallten könnte ... also ein DigitalWrite, DigitalRead, PinMode usw.

Du kannst Dir ja 2 Funktionen schreiben und diese dann verwenden. Diese kannst Du ja im Sketch irgendwo ablegen.
Grüße Uwe