Go Down

Topic: PCF8574, INPUT mit Taster, ~20mA Strom(?!) (Read 526 times) previous topic - next topic

Tschugg

Hallo Forum!

Folendes: Ich möchte mit Hilfe eines PCF8574-Boards (dieses) einen Taster abfragen. Hierzu habe ich die Bibliothek 'PCF8574.h' heruntergeladen (diese).

Verkabelt habe ich es wie im Beispiel der Bibliothek angegeben:


Soweit funktioniert es auch, wenn ich die Taste drücke, dann Leuchtet die LED.

Nun habe ich den Strom gemessen, der 'durch den Taster' fließt, wenn die Taste gedrückt wird: Es sind sage und schreibe 20mA! Das finde ich relativ viel dafür, dass 'nur' eine Taste gedrückt wird. Wohlbemerkt, in der 'INPUT-Leitung' gemessen (wenn ich die LED entferne bleibt der Wert gleich, an der liegt es nicht).

Nun stelle ich mir (und hiermit auch euch) folgende Fragen:
  • gibt es eine Alternative zu dem verwendeten Code/der Bibliothek (die jedoch genauso "simpel" einzubinden und zu bedienen ist), wo der Taster gegen GND angeschlossen werden kann? (Anmerkung: ich habe keine gefunden, die genauso 'easy' ist.)
  • 20mA ist doch recht viel, nur um ein "Schalter ist gedrückt" zu erkennen. Irre ich mich da oder ist das normal? Wenn ich bspw. 8 Schalter anschließe komme ich auf 200mA, das ist dann doch eine Hausnummer!
  • Hat den PCF8574 hier jemand im Einsatz mit Taster/Schalter, und wenn ja: Wie wurde das 'Problem' gelöst bzw. umgesetzt?
  • Alternativ habe ich noch ein PCA9685, aber noch nichts damit gemacht: Was ich gelesen habe, kann man den nur für (PWM-)OUTPUT verwenden, und nicht für INPUT?



Code: [Select]

#include "Arduino.h"
#include "PCF8574.h"

// Set i2c address
PCF8574 pcf8574(0x20);
unsigned long timeElapsed;
int i = 0;
void setup()
{
Serial.begin(115200);

pcf8574.pinMode(P7, OUTPUT);
pcf8574.pinMode(P1, INPUT);

pcf8574.begin();
}

void loop()
{
  i++;
uint8_t val = pcf8574.digitalRead(P1);
  Serial.print(i);
  Serial.print("\t");
if (val==HIGH)
{
  Serial.println("KEY PRESSED");
    pcf8574.digitalWrite(P7, LOW);
   
}
 
  if (val==LOW)
  {
    pcf8574.digitalWrite(P7, HIGH);
    Serial.println("KEY NOT PRESSED");
  }
 

  delay(50);
}


Vielen Dank! :-)

postmaster-ino

Hi

Bei BN-SW-OR komme ich auf 10kΩ, Das macht 5V:10000Ω=0,5mA (sofern die Frtitzing-Widerstände Deinen entsprechen)
Weit entfernt von Den von Dir genannten 20mA.
Jetzt werde ich mir aber das DaBla nicht mehr zu Gemüte führen, dafür ist Morgen auch noch Zeit.
Denke: Du machst irgend etwas falsch.

MfG

DrDiettrich

Für 20mA kann ich mir (u.a.) folgende Ursachen vorstellen:
- Pin ist Ausgang
- Spannung höher als Versorgungsspannung
- Chip defekt
Das könnte liegen an
- Aufbau fehlerhaft
- Wackelkontakt
- Bibliothek fehlerhaft
- Board fehlerhaft
- Chip defekt

agmue

Meine Vermutung: Anstelle des 10 kOhm PullDown-Widerstandes hast Du versehendlich einen 220 Ohm erwischt.

uwefed


HotSystems

Ein weiteres Problem bekommst du mit deiner Schaltung und der Led.

Sieh dir dazu das Datenblatt des PCF8574 an.
Der Ausgang liefert gegen GND (wie deine Schaltung) nur max. 1 mA.
In deiner Schaltung hast du nicht lange Freude dran.

Du musst die Led an +5Volt legen und mit dem PCF gegen GND schalten, dann liefert der Ausgang max. 25 mA.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

beeblebrox

Nach meiner Erinnerung an den PCF macht die LED da aber nix kaputt.
Die leuchtet so halt nur "sehr schlapp" wenn überhaupt.
Diese Pinne liefern max 1mA und auch nicht mehr wenn man sie auf Masse zieht.
Der PCF ist ja "pseudo-Birektional". D.h. Pin auf Masse ziehen dann habe ich in Leserichtung eine 0.

Ulli

HotSystems

Nach meiner Erinnerung an den PCF macht die LED da aber nix kaputt.
.....
Hatte ich auch nicht geschrieben. Aber die Freude bleibt aus, da wenig hell.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Tschugg

Vielen dank schon Mal für eure Beiträge.
Ich versuche, einige aufgekommene Fragen zu beantworten:

Bei BN-SW-OR komme ich auf 10kΩ, Das macht 5V:10000Ω=0,5mA (sofern die Frtitzing-Widerstände Deinen entsprechen)
Weit entfernt von Den von Dir genannten 20mA.
→ Als Widerstand habe ich 1kΩ sowie 10kΩ probiert. Beides Mal fließen 20mA von V+ zum Pin bei Betätigung des Tasters.
→ Aber als Pull-Down-Widerstand soll er ja eh nur verhindern, dass es zu einem "undefinierten Zustand" kommt, wenn der Taster nicht gedrückt ist, oder sehe ich das falsch? Wie viel durch den Widerstand fließt, beim Drücken des Tasters: 325µA (gemessen). Aber das ist ja sowieso nur "Abfall".

Für 20mA kann ich mir (u.a.) folgende Ursachen vorstellen:
1) Pin ist Ausgang
2) Spannung höher als Versorgungsspannung
3) Chip defekt
Das könnte liegen an
4) Aufbau fehlerhaft
5) Wackelkontakt
6) Bibliothek fehlerhaft
7) Board fehlerhaft
8) Chip defekt
→ 1: Pin ist gemäß Code als INPUT deklariert [pcf8574.pinMode(P1, INPUT);]. Wenn ich den Pin zu GND messe, dann fließen da 0,24mA.
→ 2: Ne, alles läuft mit der gleichen Spannung; im Aufbau sind keine anderen Spannungen vorhanden.
→ 3: Kann ich ausschließen, da ich mit 3 identischen Chips versucht habe
→ 4: Hmmm... ja, also... NE... ich habe es mehrfach komplett abgebaut und neu aufgebaut, um eben dies auszuschließen. Der µC erkennt ja gem. des Beispielcodes (mit der Grundstruktur aus der Bibliothek, leicht modifiziert für Debug), wenn ich die Taste drücke (und gibt auf Seriell entsprechenden Text aus/lässt dich LED leuchten).
→ 5: Ja, am Breadboard gibt es gelegentlich Wackler, prinzipbedingt durch die 'lose Verkabelung'. Aber ich habe es mehrfach durchgemessen (bestimmt >50 Mal) und auch verschiedene Kabel/Breadboards bzw. Buchsen am Breadboard probiert.
→ 6: Ja, das wäre aber fatal. Die wird bestimmt nicht nur von mir benutzt, sondern doch auch von einigen anderen. War aber vielleicht nur niemand so blöd bisher, und hat spaßeshalber den Strom gemessen?!
→ 7: Das Board läuft sonst einwandfrei (wobei die nichtexistenz eines Fehlers nur schwer in Gänze nachweisbar ist).
→ s. 3+7.

Meine Vermutung: Anstelle des 10 kOhm PullDown-Widerstandes hast Du versehendlich einen 220 Ohm erwischt.
→ Gute Idee, die Schaltung zu überprüfen. Gerade nochmal den Widerstand mit dem Multimeter gecheckt: 10kOhm.

Ein weiteres Problem bekommst du mit deiner Schaltung und der Led.

Sieh dir dazu das Datenblatt des PCF8574 an.
Der Ausgang liefert gegen GND (wie deine Schaltung) nur max. 1 mA.
In deiner Schaltung hast du nicht lange Freude dran.

Du musst die Led an +5Volt legen und mit dem PCF gegen GND schalten, dann liefert der Ausgang max. 25 mA.
→ Jup, das ist in dem verlinkten Fritzing-Breadboard-Bild definitiv falsch, und hab ich im Datenblatt auch so gelesen und entsprechend umgesetzt: die LED nicht gegen GND sondern an V+.

Nach meiner Erinnerung an den PCF macht die LED da aber nix kaputt.
Die leuchtet so halt nur "sehr schlapp" wenn überhaupt.
Diese Pinne liefern max 1mA und auch nicht mehr wenn man sie auf Masse zieht.
Der PCF ist ja "pseudo-Birektional". D.h. Pin auf Masse ziehen dann habe ich in Leserichtung eine 0.

Ulli
→ Genau, leuchtet dann halt - wirklich sehr - schlapp. Wie der Bibliotheks-Entwickler darauf kommt, dies so zu verdrahten - geschenkt. Das hab ich mittlerweile ja auch rausbekommen (deshalb, siehe Code: pcf8574.digitalWrite(P7, LOW); = LED leuchtet = Taster gedrückt).
→ Du scheinst dich mit dem PCF etwas auszukennen! ;-) Wie hast du einst die Pins ausgelesen? Hast du auch Taster dran gehabt?


---
→ Die Frage ist, was macht der PCF mit den 20mA? Auch nur 'verbrennen'? Das wäre ja schade um den schönen Strom, und macht ja wohl auch nur wenig Sinn, nur um eine logische "1" zu erhalten.
→ Und die zweite Frage: Was läuft hier krumm, oder ist es eher ein Feature als ein Bug? Andererseits, für einen Taster, der Mal kurz 20mA zieht, ok, das geht ja noch. Aber einen richtigen Schalter, der dann längere Zeit AN ist, da sind die 20mA dann doch ganz schön viel Strom, der verbraten wird.
---
Ich danke euch allen für eure Beiträge und Hilfe!

HotSystems

#9
Sep 18, 2018, 08:30 am Last Edit: Sep 18, 2018, 10:07 am by HotSystems
Wenn du schon die Schaltung geändert hast, warum postest du dann nicht deine Schaltung, die du auch verwendest.
Das mit den 20mA ist nach wie vor sehr suspekt
Mit dem richtigen Schaltbild können wir evtl. auch deinen Fehler erkennen und wir raten dann nicht an der falschen Stelle rum.

Hast du mal einen anderen Pin des PCF getestet.
Ich könnte mir vorstellen, das der Pin schon defekt ist und der Strom in den PCF fließt, oder der ist im Sketch falsch definiert.

Aber ein richtiges Schaltbild wird da weiter helfen.

Du kannst die Pins verwenden, um Taster/Schalter, oder auch rein digitale Signale anderer ICs auszulesen.
Das funktioniert bei mir beides.

Edit:
Grad nochmal das Fritzing-Bild angesehen.
Der Taster macht den Verbrauch der 20mA selbst, wenn du ihn verdreht angeschlossen hast.
Der Strom fließt über den Widerstand und die Anschlüsse. Diese haben im Taster eine direkte Verbindung. Du musst den Widerstand auf die Seite des PCF-Pins legen oder eben den Taster um 90Grad drehen.
Am besten den Taster mal durchmessen.

Und der PCA9685 ist ein reiner PWM-Treiber. Also nur für PWM-Ausgang zu verwenden.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up