PCF8575 Inputs

#5607143
Lesenswert?

Hallo,



ich habe grade Probleme mit einem PCF8575 am ESP8266...

Ich habe P00-P07 als Ausgänge und P10-P17 als Eingänge geplant.

Alle 16 IOs haben 5K6 Pullups. Der IRQ und SDA/SCL haben je 10K Pullups.



Das Ansteuern der Ausgänge funktioniert, auch P10-P17 funtionieren als 
Ausgänge (nur zum testen), aber wenn ich diese als Eingänge verwenden 
will

(auf LO ziehen) lese ich trotzdem immer nur HIGH !



Der Befehl der pcf8575_esp Lib lautet dazu pcf8575.read(8) z.B.



Nun (m)eine Idee, kann es sein, daß man den IRQ zum lesen benutzen MUSS?

Oder sollte es auch ohne funktionieren?



Gruß,

Wolfram.
#5607231
Lesenswert?

Ja, ich initialisiere die mit HIGH am Anfang!
1
  pcf8575.begin();
2
  pcf8575.resetInterruptPin();
3

4
  pcf8575.write(MOTOR, LOW);
5
  pcf8575.write(MOTOR_DIR, LOW);
6
  pcf8575.write(FAN, LOW);
7
  pcf8575.write(INNEN_LICHT, LOW);
8
  pcf8575.write(AUSSEN_LICHT, LOW);
9
  pcf8575.write(5, LOW);
10
  pcf8575.write(6, LOW);
11
  pcf8575.write(7, LOW);
12

13
  pcf8575.write(8, HIGH);
14
  pcf8575.write(9, HIGH);
15
  pcf8575.write(10, HIGH);
16
  pcf8575.write(11, HIGH);
17
  pcf8575.write(12, HIGH);
18
  pcf8575.write(13, HIGH);
19
  pcf8575.write(14, HIGH);
20
  pcf8575.write(15, HIGH);


und lese die Ports hiermit aus:
1
void test_ios()
2
{
3
  int pos = 300;
4

5
  for (i = 0; i < 16; i++)
6
  {
7
    pos = pos - 15;
8

9
    if (i == 8)
10
    {
11
      pos = pos - 15;
12
    }
13

14
    if (pcf8575.read(i) == HIGH)
15
    {
16
      tft.fillCircle(pos, 192, 3, ILI9341_RED);
17
    }
18
    else
19
    {
20
      tft.fillCircle(pos, 192, 3, ILI9341_BLUE);
21
    }
22
  }
23
}

Ja, es ist diese Library, aber kein Arduino sondern ein ESP8266.
#5607319
Lesenswert?

habe eben mal was anderes probiert:

P00-P07 sind ja Ausgänge die vom Programm gestzt werden.
Wenn ich diese auslese, bekomme ich auch den Status so wie sie gesetzt 
sind,
da P0.5-7 noch frei sind, habe ich diese im setup per 
pcf8575.write(5,HIGH)
als Eingänge deklariert.
Nun werden beim auslesen diese auch als HIGH (da Pullups) angezeigt.
Lege ich an diese jedoch LO an (GND), ändert sich ebenfalls nix!

Irgendwie sind die Inputs nicht lieb zu mir :-(
#5607324
Lesenswert?

Das Problem ist hier halt auch mal wieder dass für einen pupsigen 
Baustein unbedingt eine eigene lib verwendet werden muss, von der man 
halt nicht so genau weiß was sie tut. Warum reicht es hier nicht, eine 
I2C lib zu nehmen und die paar bytes höchstselbst zu lesen und zu 
schreiben?

Abstraktion bis zur Schmerzgrenze und darüber hinaus.

Eine Möglichkeit wäre auch noch die I2C Kommunikation mal per LA 
anzuschauen und zu schauen was da wirklich über den Draht geht. Und das 
mit dem DB vergleichen bzw. mit dem erwartetenden Verhalten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren