Metainformationen zur Seite
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
plugins:multi_io:gpio_module:pcf8575_expansion_module [2023/06/23 15:41] – Michael Schlenstedt | plugins:multi_io:gpio_module:pcf8575_expansion_module [2023/07/29 12:00] (aktuell) – Michael Schlenstedt | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== PCF8575 | + | ====== PCF8575 |
- | + | ||
===== Beschreibung ===== | ===== Beschreibung ===== | ||
Zeile 8: | Zeile 6: | ||
{{plugins: | {{plugins: | ||
+ | |||
Abbildung: (c) FXCO | Abbildung: (c) FXCO | ||
Zeile 14: | Zeile 13: | ||
===== Datenblatt ===== | ===== Datenblatt ===== | ||
- | PCF8575: https:// | + | PCF8575: |
===== Hardware-Konfiguration ===== | ===== Hardware-Konfiguration ===== | ||
Zeile 26: | Zeile 25: | ||
Die Jumper werden wie folgt für die einzelnen Bus-Adressen gesetzt: | Die Jumper werden wie folgt für die einzelnen Bus-Adressen gesetzt: | ||
- | |**Address (Hex) PCF8575**|**A2**|**A1**|**A0**| | + | | **Address (Hex) PCF8575** | **A2** | **A1** | **A0** | |
- | |0x40 | + | | 0x40 | LOW | LOW | LOW | |
- | |0x42 | + | | 0x42 | LOW | LOW | HIGH | |
- | |0x44 | + | | 0x44 | LOW | HIGH | LOW | |
- | |0x46 | + | | 0x46 | LOW | HIGH | HIGH | |
- | |0x48 | + | | 0x48 | HIGH | LOW | LOW | |
- | |0x4A | + | | 0x4A | HIGH | LOW | HIGH | |
- | |0x4C | + | | 0x4C | HIGH | HIGH | LOW | |
- | |0x4E | + | | 0x4E | HIGH | HIGH | HIGH | |
===== Software-Konfiguration ===== | ===== Software-Konfiguration ===== | ||
Zeile 41: | Zeile 39: | ||
==== Modul ==== | ==== Modul ==== | ||
- | {{plugins: | + | {{plugins: |
==== Eingänge ==== | ==== 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. | + | 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. |
{{plugins: | {{plugins: | ||
// | // | ||
+ | |||
+ | == Konfiguration mit Nutzung von Interrupts (empfohlen) == | ||
+ | |||
+ | Standardmäßig werden die Zustände der Eingänge " | ||
+ | |||
+ | Die Lösung ist die Verwendung von sogenannten 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 (im Gegensatz zum permanenten, | ||
+ | |||
+ | Die Module haben zu diesem Zweck einen INT-Pin, der auf LOW gesetzt wird, sobald sich der Zustand eines der PINs am Modul ändert. Der INT-Pin wird wieder auf HIGH gesetzt, sobald der Zustand aller Pins einmal 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 " | ||
+ | |||
+ | {{https:// | ||
+ | |||
+ | // | ||
+ | |||
+ | Zunächst konfiguriert man alle Eingänge am Modul: | ||
* Inverted: true | * Inverted: true | ||
- | * Resistor: | + | * Resistor: |
* Interrupt: Both | * Interrupt: Both | ||
- | * Polling Interval: 1 (wenn in Kombination mit INT-Pin) | ||
- | * Polling Interval: 0.1 (ohne INT-Pin) | ||
{{plugins: | {{plugins: | ||
- | == Nutzung von Interrupts == | + | Und dann den GPIO des Raspberry, der mit dem INT-Pin des Moduls verbunden ist wie folgt: |
- | Standardmäßig werden die Zustände der Eingänge " | + | * Resistor: Pull-Up |
+ | * Interrupt: Falling | ||
+ | * Input is Interrupt for: <PCF Modulname> | ||
- | 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. | + | {{plugins: |
- | 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 " | + | == Konfiguration ohne Nutzung von Interrupts |
- | Sobald sich nun ein Pin P0-7 des Moduls im Status ändert, wird der GPIO des Raspberry | + | Bei dieser Konfiguration benötigt man keinen zusätzlichen GPIO-Pin des Raspberry. Die Stati der einzelnen Pins auf dem Modul werden zyklisch abgerufen. Es muss sichergestellt sein, dass Eingangsimpulse nicht zu kurz sind, damit kein Impuls verpasst wird. |
- | {{https://mqtt-io.app/ | + | * Inverted: true |
+ | * Resistor: Pull-Up | ||
+ | * Interrupt: None | ||
+ | * Polling Interval: 0.1 | ||
- | // | + | {{plugins: |
==== Ausgänge ==== | ==== Ausgänge ==== | ||
Zeile 78: | Zeile 93: | ||
* inverted: true | * inverted: true | ||
- | {{plugins: | + | {{plugins: |