mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Taster


Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte tastendrücke zählen. hierzu habe ich pin T0 mit 14k hoch 
gezogen und per taster auf gnd (wie im tutorial).

timer/counter0 habe ich dann auf extern konfiguriert. doch bei jedem 
tastendruck wird der counter gleich mehrfach inkrementiert. nur wenn ich 
die taste drücke und bis zum auslesen von tcnt0 gedrückt halte, erhalte 
ich die richtige zahl (nämlich 1).

habe daraufhin in assembler eine art counter geschrieben:

count:
  sbic PIND,1
    rjmp count

  pressed:
    inc anzahl
    wait:
      sbis PIND,1  ;wait as long as bit cleared
        rjmp wait
       rjmp count

dieser code sollte eigentlich solange zählen, bis er unterbrochen wird 
(z.B. per timer1). aber auch dieser code inkrementiert <anzahl> mehrfach 
pro tastendruck. auch hier stimmt der wert, wenn ich den taster gedrückt 
halte und bis zum auswerten von anzahl nicht loslasse...

muss ich den taster irgendwie anders anschließen? was ist da falsch. 
mein elektronikhändler hat mir den taster als "entprellt" verkauft...

Autor: András (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

der ist dann halt doch nicht entprellt. Häng deinen Taster an ein 
RS-Flip-Flop dann ist das Problem gelöst. Du kannst ihn natürlich 
sofwaremäßig auch entprellen.

cu András

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich statt mit nem taster den pin mit nem kabel auf gnd ziehe, tritt 
der fehler auch auf. so ein "Kabel-taster" is wohl auch nicht entprellt, 
oder?

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, der erst recht nicht. Du kannst den Taster einfach entprellen, 
wenn du nach jedem Tastendruck z.B. 100ms wartest.

MfG
Andreas

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
yo, hab ich gemacht. ging sogar mit weitaus weniger (ne 1/10 sekunde is 
ja ne halbe ewigkeit! :-) ):

;delays for about 0.3 ms @ 4mhz, wenn ich mich nicht verrechnet habe... 
:-)
delay:
  ldi mpr,0xff
  loop:
    nop
    nop
    nop
    dec mpr
    brne loop
  ret

diese funktion wird nach dem tasten druck und nach dem tasten loslassen 
aufgerufen.

danke für die hilfe.

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.