Hallo, ich habe an einem PIC16F871 am PORTB eine Tastermatrix angeschlossen, PORTB0-2 sind als Ausgang definiert, der Rest als Eingang mit eingeschaltenen Pull-Up´s. Eins vorweg -> sie frunktioniert. Ab und zu allerdings passiert es, das Tasten "überblenden", soll heißen: Z.B. PORTB0 ist L und die Taste an PORTB7 ist gedrückt -> die Funktion wird gestartet, allerdings auch die Funktion die mit PORTB6 verknüpft ist. Das Einfügen einer kleinen Zeitschleife von 10µs zwischen den Abfragen brachte zwar eine Verbesserung, aber es läuft noch nicht sicher. Hat jemand von Euch auch schon dieses Problem gehabt und wenn ja, was ist dagegen zu tun?
Tasten "springen" so du muss per soft ein "debounce" algorithm benutzen. d.h. du musst sicher sein dass srpungene Taste nicht als ein neue drukene Taste erkennt ist. SO im prinip wenn du eine Probe nimmst und ein bisschen Zeit später eine neue Probe nimmst und beide sind gleich, du kannst sagen daß di Taste ein bestimmte Position hat (gedruckt oder nicht). mehr als 20 uS und bis 25 funktioniert bei mir gut. Gibt viel in andere Threads und auch ein Tutorial. (Wenn ich deine Frage nicht werstanden habe, sag es einfach so).
Zu "debounce" sagt man auch Entprellen. Ab einer bestimmten Zeitspanne bist du auf einer sicheren Seite. Die Zeit zwischen den einzeln Abfragen auf einen Wert zu stellen der sicher länger ist als der Prell-Vorgang, ist eine Entprellung. Setz die Zeit zwischen den Abfragen auf 1ms oder mehr. Kein Mensch kann eine Taste zweimal in 1000us drücken.
Hab den Fehler gefunden nachdem das Zeug mal in der Ecke lag. Die Eingänge waren ja über die internen Pull-Up´s abgeschlossen. Ich habe die Dinger nun abgeschaltet und "richtige" Widerstände mit 10k an die Eingänge gelegt, und siehe da, es funktioniert!
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.