PCF8575 als Input expander

Hallo zusammen,

ich sitze den ganzen Tag schon vor meinem Aufbau und bekomm es einfach nicht hin - ich werd wahnsinnig!

Ich habe einen ESP32, verbunden über Pin 21 (SDA) und Pin 22(SCL) mit einem PCF8575. Beide dieser Leitungen sind über je einen 10kOhm Widerstand an 5V gelegt.
An dem PCF8575 befinden sich 3 Taster, ebenfalls über 10kOhm an 5V. Die Taster schalten GND. Also sollte im unbetätigten Zustand jeder Taster HIGH sein, sobald ich sie drücke, LOW.

Stattdessen sind sie einfach immer LOW, egal ob gedrückt oder nicht. Ich hab jetzt einige Stunden recherchiert und komme einfach nicht auf die Lösung. Manche schreiben, dass man eine 1 auf die Pins schreiben muss, bevor man sie als Input nutzt - hilft auch nichts.

Edit: Bibliothek wird verwendet von mischianti.org

#include "Arduino.h"
#include "PCF8575.h"  // SDA 21, SCL 22

//PCF1 (XX/16)
PCF8575 PCF1(0x20);
const int buttonBlue = 8;  // gn
const int buttonRed = 9;   // gr
const int KEY_PIN = 10;    // bl


void setup() {
//PinModes PCF1

  PCF1.digitalWrite(KEY_PIN, HIGH);
  PCF1.digitalWrite(buttonBlue, HIGH);
  PCF1.digitalWrite(buttonRed, HIGH);

  PCF1.pinMode(KEY_PIN, INPUT);
  PCF1.pinMode(buttonBlue, INPUT);
  PCF1.pinMode(buttonRed, INPUT);

  Serial.begin(115200);
  PCF1.begin();

}

void loop() {
  if (PCF1.digitalRead(buttonBlue) == LOW) {
    Serial.println("blue");
  }
  if (PCF1.digitalRead(buttonRed) == LOW) {
    Serial.println("red");
  }
  if (PCF1.digitalRead(KEY_PIN) == LOW) {
    Serial.println("key");
  }

}

Der ESP ist ein 3,3V Dingen.
5V kann ihn wohl töten.

Der ESP32 wird über USB versorgt und hat einen 5V Ausgang, über den ich den PCF8575 versorge.

Und welchen Pegel haben die gemeinsamen Daten- und Taktleitungen?

Von GND auf Pin 21 bzw 22 messe ich aktuell 4,7V

Das das wohl schief gehen kann, bzw. wird, wurde dir schon geschrieben.
Du musst den PCF8575 auch mit 3,3V betreiben, dann passen die Pegel auf den Datenleitungen.
Oder du baust einen Levelshifter dazwischen.

Und das ist für den ESP zu viel.
Man sollte doch Datenblätter lesen....

1 Like

Okay, habe das jetzt entsprechend umgebaut. Jetzt messe ich von GND auf die Datenleitungen 3,2V. Problem bleibt allerdings das gleiche.

Kannst du den Baustein denn per I2C ansprechen ?
Hast du es schon mit dem I2C-Scanner getestet ?
Den Scanner findest du in der IDE.

Und die Beispiele in der Library werden sicher funktionieren. Hast du die schon getestet ?

Edit:
Oder es liegt an deinem Aufbau, den wir nicht kennen.

Wenn ich den ledWemos teste, dass quasi alle Ausgänge nacheinander blinken - das klappt einwandfrei. Wenn ich den KeyPressed teste, dann klappt das auch. Allerdings muss ich da HIGH auf den Input anlegen - ich dachte, dass es beim PCF8575 schlauer wäre, LOW zu schalten?

Das kommt doch ganz drauf an, was du tatsächlich brauchst und wie deine Taster beschaltet sind.
Letztendlich geht beides, wenn es richtig gemacht wird.

Tausche doch die beiden Blöcke mal untereinander aus.

Ich hab jetzt einfach nur die PullUps rausgelötet, schalte mit meinen Tastern jetzt einfach direkt 3,3V durch auf den Input und es läuft einwandfrei ...

Naja....dann kann es nicht richtig funktionieren.
Davon hast du nix geschrieben.

Hatte ich hier erwähnt, vielleicht war es aber auch einfach etwas blöde formuliert von mir.

Auf jeden Fall vielen Dank für die Hilfe und Ideen!

Ah...ok.
Sorry hatte ich übersehen.
Das war dann doppelt.
Einmal HIGH per Widerstand und einmal HIGH im Sketch.

Ah, verstehe. Aber auch mit LOW im Sketch oder ohne diese Zeilen hat es nicht geklappt - naja, ist ja auch egal! Ich schalte mit den Tastern HIGH und alles ist gut - wieder was gelernt!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.