Forum: Mikrocontroller und Digitale Elektronik Auslesen eines Port-Expanders


von Torsten (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein größeres Arduino-Projekt, bei dem die GPIOs des ESP32 etwas 
knapp werden. Daher habe ich mir mal den Port-Expander PCA9555 bestellt, 
um verschiedene Buttons auszulesen.

Bisher habe ich das so gemacht, dass ich einen 1000Hz Hardware-Timer 
verwendet habe, um die Buttons auszulesen. Noch bissl per Software 
entprellt - hat wunderbar funktioniert. Gibt ja unterschiedliche Wege, 
das Auslesen zu bewerkstelligen, aber ich hatte mehrfach gelesen, dass 
es Sinn macht, dies über einen Timer zu tun, damit man immer 
gleichbleibende Bedinungen hat.

Jetzt meine Frage: Wie macht man das denn am besten mit einem 
Port-Expander? Auch über einen Timer oder sollte man hier eher den 
Interrupt-Pin auswerten, den der PCA ja auch besitzt?

Danke im voraus.

von Torsten (Gast)


Lesenswert?

Nachtrag: Also grundsätzlich laufen habe ich den PCA9555 bereits. Geht 
jetzt quasi nur drum, wie man das Auslesen am besten timed.

von Wolfgang (Gast)


Lesenswert?

Torsten schrieb:
> Auch über einen Timer oder sollte man hier eher den
> Interrupt-Pin auswerten, den der PCA ja auch besitzt?

Das kommt drauf an, was du in deinem "größeres Arduino-Projekt" mit dem 
Port-Expander vor hast. Der Interrupt ist sinnvoll, wenn du den Port 
nicht regelmäßig lesen willst, sondern nur auf Interrupt auslösende 
Ereignisse reagieren möchtest.

von Torsten (Gast)


Lesenswert?

Also es handelt sich um einen mp3-Player, den man mit Tasten bedienen 
kann. Der besitzt auch einen Kopfhörerausgang, der beim Einstecken des 
Steckers in die Buchse dafür sorgt, dass der Lautsprecher auf Mute 
geschaltet wird. Das Erkennen, ab das der Fall ist, wäre ein 
Anwendungsfall für den Port-Expander. Also kurzum: Da kommen immer mal 
wieder "Eingaben", aber auch nicht dauernd.

Ich habe jetzt ehrlich gesagt noch kein Gefühl dafür, wie langsam oder 
schnell sowas via Port-Expander geht. Anschließen würde ich den 
Interrupt-Pin allerdings eh, da ich ihn zum Aufwachen des ESP32 brauche. 
Also der geht zum Stromsparen nach einer Weile in den Deepsleep und mit 
einer Taste weckt man den wieder auf.

von Wolfgang (Gast)


Lesenswert?

Torsten schrieb:
> Ich habe jetzt ehrlich gesagt noch kein Gefühl dafür, wie langsam oder
> schnell sowas via Port-Expander geht.

Das siehst du im Datenblatt. Dort ist dargestellt, wie der Zugriff über 
den Bus erfolgt und dann hängt es von der Taktfrequenz auf dem Bus ab, 
wie lange es dauert. Ganz einfach ist die Frage zu beantworten, indem du 
mit einem LA auf den Bus guckst.

von uwe (Gast)


Lesenswert?

Interrupt zum Aufwachen und dann in dem bestehenden timer Handler den 
Expander auslesen. Kenne den ESP32 jetzt nicht so gut aber eventuell 
könnte der ja per DMA den Expander in regelmäßigen abständen auslesen. 
Und aufwachen halt per IRQ...

von Bad U. (bad_urban)


Lesenswert?

uwe schrieb:
> Interrupt zum Aufwachen und dann in dem bestehenden timer Handler den
> Expander auslesen.

So hab ich es auch umgesetzt. Ein 10ms-Timer, der den uC weckt, 
uC-Eingänge einliest, den Portexpander ausliest und dann alles der 
Entprell-Routine übergibt.
Grund war IMHO auch, dass nicht alle Eingänge am uC interrptfähig waren. 
Und wenn ein Taster wirklich prellt, bekommt man evtl. auch Probleme, je 
nach weiterer Auswertung.

von Torsten (Gast)


Lesenswert?

Ok, also werde ich mal 100 Hz testen.
Danke.

von Bad U. (bad_urban)


Lesenswert?

Die Abtastgeschwindigkeit muss halt zu Deiner Anwendung passen. Gerade 
bei Benutzereingaben ist das ja meist recht gemütlich.

von my2ct (Gast)


Lesenswert?

Bad U. schrieb:
> Gerade bei Benutzereingaben ist das ja meist recht gemütlich.

Ich hasse Fahrstuhlsteuerungen, bei denen man gefühlt "mehrere Sekunden" 
auf die Taste tappen muss, damit die Pad-Eingabe heil durch die 
Entprellung kommt.

von Bad U. (bad_urban)


Lesenswert?

Die Dauer der Entprellung hängt davon ab, welche max. Prelldauer man 
erwartet. Durch häufigeres Abtasten geht das auch nicht schneller.

von hans (Gast)


Lesenswert?

Bad U. schrieb:
> Die Abtastgeschwindigkeit muss halt zu Deiner Anwendung passen. Gerade
> bei Benutzereingaben ist das ja meist recht gemütlich.

Aus diesem Grund bin ich ein Fan von HW-Entprellung :-)
Ein Standard C und ein R kosten nicht die Welt.

von Wolfgang (Gast)


Lesenswert?

hans schrieb:
> Ein Standard C und ein R kosten nicht die Welt.

Aber mehr als ein paar Zeilen Software, die hinterher ohne zusätzliche 
Stückzahlkosten millionenfach kopiert werden kann.

von Bad U. (bad_urban)


Lesenswert?

hans schrieb:
> Ein Standard C und ein R kosten nicht die Welt.

Ist aber recht unflexibel, wenn man sich an die passende Dauer rantasten 
will. Je nach Schaltung brauchts auch noch nen Entladewiderstand. Sonst 
bekommt man evtl. folgende Flanken nicht mit.

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
Noch kein Account? Hier anmelden.