Metainformationen zur Seite

Dies ist eine alte Version des Dokuments!


PCF8575 Expansion Module

Beschreibung

Der PCF8575 ist eigentlich die Bezeichnung des Chipsatzes, aber es gibt auch fertig konfektionierte Breakout-Boards, wie z. B. dieses hier:

Abbildung: © FXCO

Ein Chip bzw. Modul kann 16 IOs bereitstellen. Je nach Konfiguration können diese als Ein- oder Ausgang dienen. Über einen Interrupt (der an einen GPIO des Raspberry angeschlossen werden muss), werden bei Eingängen Änderungen in Echtzeit eingelesen. Es können bis zu 8 Module parallel betrieben werden (also insgesamt 128 IOs). Dazu werden diese im “Daisy Chain”-Verfahren einfach hintereinander geschaltet. Wenn das nicht ausreicht, können weitere 8 Module des Schwester-Chipsatzes PCF8574(A) verwendet werden und so bis zu bis zu 256 IOs an den Raspberry angeschlossen werden!

Datenblatt

Hardware-Konfiguration

Das Modul wird an den I2C-Bus des Raspberry angeschlossen (PIN SDA, SCL) und benötigt zusätzlich die 3.3V Spannungsversorgung des Raspberrys (Anschluss an VCC und GND). Das Modul darf nicht an die 5V Spannungsversorgung des Raspberrys angeschlossen werden!

Wenn das Modul als Eingangskarte verwendet werden soll, so muss die Interrupt-Leitung (PIN INT) des Moduls noch mit einem GPIO des Raspberrys verbunden werden.

Welche Bus-Adresse das Modul verwendet, muss über 3 Jumper eingestellt werden. Möglich sind Adressen zwischen 0x40 und 0x4E

Die Jumper werden wie folgt für die einzelnen Bus-Adressen gesetzt:

Address (Hex) PCF8575 A2 A1 A0
0x40 LOW LOW LOW
0x42 LOW LOW HIGH
0x44 LOW HIGH LOW
0x46 LOW HIGH HIGH
0x48 HIGH LOW LOW
0x4A HIGH LOW HIGH
0x4C HIGH HIGH LOW
0x4E HIGH HIGH HIGH

Software-Konfiguration

Modul

Eingänge

Das Modul hat eingebaute PullUp-Widerstände (keine Pulldown-Widerstände). Man verschaltet die Eingänge also so, dass sie im geschlossenen Zustand den PIN auf GND ziehen. Ich empfehle dringend zusätzlich zu den internen Widerständen externe PullUp-Widerstände zu verwenden! Ohne externe Widerstände konnte ich keine stabile Erkennung der Eingangszustände realisieren.

Verschaltung mit externem PullUp-Widerstand

Verschaltung mit externem PullUp-Widerstand

  • Inverted: true
  • Resistor: PullUp
  • Interrupt: Both
  • Polling Interval: 1 (wenn in Kombination mit INT-Pin)
  • Polling Interval: 0.1 (ohne INT-Pin)

Nutzung von Interrupts

Standardmäßig werden die Zustände der Eingänge "gepollt", dass heisst in einem gewissen Abstand fragt das Plugin den Zustand der Eingänge ab (ob EIN oder AUS). Das ist nicht nur sehr ineffektiv, es birgt bei sehr kurzen Eingangssignalen (z. B. ein kurzer Impuls) auch die große Gefahr, dass man ein Impuls "verpasst", wenn dieser gerade zwischen dem Poll-Intervall liegt.

Die Lösung sind sogenannte Interrupts. Interrupts signalisieren dem Betriebssystem eine Statusveränderung z. B. eines PINs. So ist es möglich den Status der Eingänge nur abzufragen, wenn sich der Status geändert hat.

Die Module haben zu diesem Zweck einen INT-Pin, der auf EIN gesetzt wird, sobald sich der Zustand eines der PINs P0-7 ändert. Der INT-Pin wird wieder auf AUS gesetzt, sobald der Zustand aller Pins P0-7 abgefragt wurde. Mit Hilfe eines GPIO-Eingangs auf dem Raspberry kann man so eine Interrupt-gesteuerte Abfrage aufbauen. Dazu verbindet man den INT-Pin mit einem freien GPIO des Raspberry und konfiguriert diesen GPIO dann als "Interrupt für das PCF-Modul". Die GPIOs des Raspberry unterstützen echte Interrupts. Siehe unter XXXXXX.

Sobald sich nun ein Pin P0-7 des Moduls im Status ändert, wird der GPIO des Raspberry getriggert und dieser löst die Statusabfrage der einzelnen Pins P0-7 aus.

Raspberry Pi MCP23017 circuit diagram

Verschaltung am Beispiel des MCP23017

Ausgänge

  • initial: high
  • inverted: true