www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Taster + Zählwert erhöhen


Autor: Marius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 .include "m8def.inc"
 
ldi r17, 0
         ldi r16, 0xFF
         out DDRD, r16       ; Port B ist Ausgang
                             
         ldi r16, 0x00
         out DDRB, r16       ; Port D ist Eingang
                             
 
         ldi r16, 0xFF
         out PORTD, r16      ; PORTB auf 0xFF setzen -> alle LEDs aus
 
loop:    sbic PINB, 0        ; "skip if bit cleared", nächsten Befehl überspringen,
                             ; wenn Bit 0 im IO-Register PIND =0 (Taste 0 gedrückt)
         rjmp loop           ; Sprung zu "loop:" -> Endlosschleife
 
         rjmp weiter
weiter:      inc     r17            ; erhöhe das Zaehlregister

cpi     r17, 1        ; mit dem Endwert vergleichen 
brne weiter2
cbi PORTD,0
weiter2: cpi r17, 2
brne weiter3
cbi PORTD,1
weiter3: cpi r17, 3
brne weiter4
cbi PORTD,2
weiter4: cpi r17, 4
brne weiter5
cbi PORTD,3
weiter5: cpi r17, 5
brne weiter6
cbi PORTD,4
weiter6: cpi r17, 6
brne weiter7
cbi PORTD,5
weiter7: cpi r17, 7
brne weiter8
cbi PORTD,6
weiter8: cpi r17, 8
brne loop
cbi PORTD,7

Ich beschäftige mich erst seit kurzem mit microcontrollern, und habe 
daher noch so einige probleme.
obenstehender Code: Hier soll ein register bei jedem tastendruck um eins 
erhöht werden und dann je nach höhe des registerwertes eine led 
eingeschaltet werden. Nun habe ich das in den avr geschrieben, aber bei 
einem tastendruck schalten sich immer gleich alle leds ein. an was liegt 
das?

vielen dank für eure hilfe

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das liegt daran, dass du den Taster gar nicht kurz genug drücken
kannst, so dass der Prozessor deine Erhöh-Schleife in der
Zeit des Tastendrucks ein paar Tausend mal abarbeitet.

-> Du musst nach dem Erkennen der gedrückten Taste auch wieder
auf das Loslassen der Taste warten.

-> Da Tasten aber prellen, wirst du beim Drücken einer Taste
auch das vermeintliche Loslassen der Taste registrieren

-> Tutorial lesen, wie man dem begegnen kann
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten

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.