PCF8574t und Keypad

#6521039
Lesenswert?

Hallo liebe Community.

Ich habe ein echt komisches Phänomen.
An meiner Raspberry Pi4 ist ein PCF8574t angeschlossen. Auf diesen war 
geplant, ein Keypad 4x3 zu betreiben. Dafür müssen am PCF 4 Pins (High 
Level)als Eingang und 3 Pins als Ausgang (Low Level) konfiguriert 
werden. Das stellt alles kein Problem dar.
Die Programmiersprache ist Java. Verwendet wir die Klasse von PI4J. 
(pcf8574GpioExample)
Wenn eine Taste am Keypad gedrückt wird, werden die 5 Volt vom Eingang 
PIN gegen einen Output PIN auf null gezogen. Bis dahin stimmt alles.

Nun zum eigentlichen Problem.
Wenn die Taste losgelassen wird, sind am Input PIN weiterhin 0 Volt. 
Dieser kehrt nicht mehr auf 5 Volt zurück. Wenn ich den pcf ausstecke 
und erneut einstecke, funktioniert es wieder genau ein Mal.

Nun habe ich festgestellt, dass wenn ich Inputs und Output 
provisioniere, habe ich das oben beschriebene Problem.
Deklariere ich jedoch alle Pins als Eingang, funktioniert es. Der Input 
PIN kehrt erneut auf High zurück, wenn ich diesen mittels Schalter gegen 
GND gezogen habe.
Wird auch nur ein einzelner PIN als Output deklariert (egal ob dieser 
verwendet wird oder nicht) bleibt der Input PIN, nachdem der Taster 
betätigt wurde, und den Input PIN gehen GND zieht auf Low.
Ich komme nicht weiter.

Ich hoffe mich gut ausgedrückt zu haben.

Vielen Dank im Voraus dir eure Hilfe.

Grüße Francesco
#6521056
Lesenswert?

Francesco L. schrieb:
> Ich habe ein echt komisches Phänomen.
> An meiner Raspberry Pi4 ist ein PCF8574t angeschlossen.

Soso, eine Sie? ;-)

> Wenn eine Taste am Keypad gedrückt wird, werden die 5 Volt vom Eingang
> PIN gegen einen Output PIN auf null gezogen. Bis dahin stimmt alles.

OK.

> Nun zum eigentlichen Problem.
> Wenn die Taste losgelassen wird, sind am Input PIN weiterhin 0 Volt.

Sollte nicht sein, es sei denn du hast einen Kurzschluß oder deine 
Software hat das Pin heimlich auf LOW geschaltet.

> Nun habe ich festgestellt, dass wenn ich Inputs und Output
> provisioniere, habe ich das oben beschriebene Problem.
> Deklariere ich jedoch alle Pins als Eingang, funktioniert es. Der Input
> PIN kehrt erneut auf High zurück, wenn ich diesen mittels Schalter gegen
> GND gezogen habe.

Dann hat deine Software ne Macke.

> Wird auch nur ein einzelner PIN als Output deklariert (egal ob dieser
> verwendet wird oder nicht) bleibt der Input PIN, nachdem der Taster
> betätigt wurde, und den Input PIN gehen GND zieht auf Low.
> Ich komme nicht weiter.

Klemm einen 1K Pull-Up Widerstand an deine Eingänge. Wenn der es nicht 
schafft, nach dem Loslassen des Taster das Pin auf HIGH zu ziehen, dann 
MUSS das Pin auf LOW geschaltet worden sein. Vermutlich ein Problem mit 
der Bitmanipulation in der Software.
Gast #6521222
Lesenswert?

> Wenn ich mir die verwendete Klasse anschaue, habe ich keine Möglichkeit

Schau dir keine Klassen anderer Leute an sondern lies das Datenblatt!
So bleibst du fuer den Rest deines Lebens doof. Die 8574 haben noch 
Ausgaenge aus MCS51 Zeiten. Die koennen nicht richtig nach Vcc schalten.
Solange du die Idee dahinter nicht verstehst kannst du dein Vorhaben 
nicht umsetzen.

Olaf
#6521278
Lesenswert?

Francesco L. schrieb:
> Wenn ich mir die verwendete Klasse anschaue, habe ich keine Möglichkeit
> den Eingangspin auf Low zu setzen. Den Ausgangspin kann ich auf Low oder
> High setzen.

Dann müssen die Pins, welche als Eingang genutzt werden, beim 
Schreibzugriff IMMER als HIGH geschrieben werden. Denn das sind Open 
Drain IOs mit internem Pull-Up.

https://www.mikrocontroller.net/articles/Port-Expander_PCF8574

> Meine Erfahrung als Programmierer ist nicht so groß. Könntest du hier
> weiterhelfen?

Ich hab zwar keine Ahnung von JAVA, aber zeig mal deinen Quelltext. 
Bitte als Anhang.

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