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.
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.
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?
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.
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 :-(
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.
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.
es liegt definitiv ein LO an, wenn ich mit einem Kabel von GND auf den Eingang gehe!
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.
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?
Ä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...
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 "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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.