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.
Nachtrag: Also grundsätzlich laufen habe ich den PCA9555 bereits. Geht jetzt quasi nur drum, wie man das Auslesen am besten timed.
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.
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.
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.
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...
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.
Die Abtastgeschwindigkeit muss halt zu Deiner Anwendung passen. Gerade bei Benutzereingaben ist das ja meist recht gemütlich.
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.
Die Dauer der Entprellung hängt davon ab, welche max. Prelldauer man erwartet. Durch häufigeres Abtasten geht das auch nicht schneller.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.