Auslesen eines Port-Expanders

Gast #6617721
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.
Gast #6617729
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.
Gast #6617756
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.
Gast #6617760
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.
Gast #6617761
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...
#6617842
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.

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