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
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.
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. Meine Erfahrung als Programmierer ist nicht so groß. Könntest du hier weiterhelfen?
> 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
Ja, da liegt ein Bug in der Klasse vor. Der PCF8574/A hat keine Richtungsumschaltung. Er ist entweder Ausgang low oder Input mit Pullup.
Olaf schrieb: > Mit einem sehr schwachen Pullup.... Stark genug, ein offenes Pin nach HIGH zu ziehen, auch wenn man mit einem DMM mißt. 100uA (minimal) reichen dazu.
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.
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.