mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC + Tastermatrix


Autor: Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Ale (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Currywurst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Erhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.