Forum: Mikrocontroller und Digitale Elektronik PCF8575 Inputs


von Wolfram F. (mega-hz)


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.

von Karl M. (Gast)


Lesenswert?

Hallo,

Hast Du das Datenblatt des pcf8575 gelesen?

http://www.ti.com/lit/ds/symlink/pcf8575.pdf

Meine Frage bezieht sich auf diese Bedingung:
Seite 12 8  Detailed Description
"The I/Os should be high before being used as inputs"

Programmiere diese Funktion entsprechend den angegebenen Bedingungen.

"SDA/SCL haben je 10K Pullups" ist etwas zu groß - siehe Datenblatt.

von Karl M. (Gast)


Lesenswert?

Hallo,

noch eine Frage, ist diese Funktionsklasse PCF8575 für den gemeint?
https://github.com/WereCatf/PCF8574_ESP

und das alles unter einer Arduino Schale?

von Peter D. (peda)


Lesenswert?

Lies dochmal die Ausgänge zurück, das muß auch funktionieren.

von Wolfram F. (mega-hz)


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.

von Wolfram F. (mega-hz)


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 :-(

von Cyblord -. (cyblord)


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.

von Peter D. (peda)


Lesenswert?

Wolfram F. schrieb:
> Lege ich an diese jedoch LO an (GND), ändert sich ebenfalls nix!

Wenn Ausgänge lesen klappt, aber Eingänge lesen nicht, dann liegt 
einfach  kein Low an den Pins an.
Nimm ein Multimeter und miß direkt an den Pins.

von Wolfram F. (mega-hz)


Lesenswert?

es liegt definitiv ein LO an, wenn ich mit einem Kabel von GND auf den 
Eingang gehe!

von Cyblord -. (cyblord)


Lesenswert?

Wolfram F. schrieb:
> es liegt definitiv ein LO an, wenn ich mit einem Kabel von GND auf den
> Eingang gehe!

Dann muss es bei dir DEFINITIV auch funktionieren. Du bildest dir den 
Fehler also nur ein -> Klapsmühle.

von ÄXl (Gast)


Lesenswert?

Dann liest deine Lib aus dem falschen Register.

von Peter D. (peda)


Lesenswert?

Wolfram F. schrieb:
> es liegt definitiv ein LO an, wenn ich mit einem Kabel von GND auf den
> Eingang gehe!

D.h. direkt von Pin 12 nach Pin 13?

von Wolfram F. (mega-hz)


Lesenswert?

ÄXl schrieb:
> Dann liest deine Lib aus dem falschen Register.

daran hab ich auch schon gedacht, aber die ausgelesenen Register sind ja 
richtig,

vielleicht geht das setzen die IO's auf Eingang daneben...

Ich werde es mal ohne die Lib auf herkömmliche Weise probieren...

von Wolfram F. (mega-hz)


Lesenswert?

Cyblord -. schrieb:
> Wolfram F. schrieb:
>> es liegt definitiv ein LO an, wenn ich mit einem Kabel von GND auf den
>> Eingang gehe!
>
> Dann muss es bei dir DEFINITIV auch funktionieren. Du bildest dir den
> Fehler also nur ein -> Klapsmühle.

Wahrscheinlich...

Und, wie geht es Dir so?

von Wolfram F. (mega-hz)


Lesenswert?

Von "Hand" den I2C Bus programmiert...
Geht ebenfalls nicht.

Fehler gefunden!:

Der PCF8575 ist einfach kaputt, warum auch immer!
Ein neuer funktioniert auf Anhieb!

Auch die Library funktioniert.

Alles erledigt.

Danke Euch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.