Forum: Mikrocontroller und Digitale Elektronik PCF8575 Inputs


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Wolfram F. (mega-hz)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von Wolfram F. (mega-hz)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von Cyblord -. (cyblord)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Dann liest deine Lib aus dem falschen Register.

von Peter D. (peda)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.