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


von Marius (Gast)


Lesenswert?

1
 .include "m8def.inc"
2
 
3
ldi r17, 0
4
         ldi r16, 0xFF
5
         out DDRD, r16       ; Port B ist Ausgang
6
                             
7
         ldi r16, 0x00
8
         out DDRB, r16       ; Port D ist Eingang
9
                             
10
 
11
         ldi r16, 0xFF
12
         out PORTD, r16      ; PORTB auf 0xFF setzen -> alle LEDs aus
13
 
14
loop:    sbic PINB, 0        ; "skip if bit cleared", nächsten Befehl überspringen,
15
                             ; wenn Bit 0 im IO-Register PIND =0 (Taste 0 gedrückt)
16
         rjmp loop           ; Sprung zu "loop:" -> Endlosschleife
17
 
18
         rjmp weiter
19
weiter:      inc     r17            ; erhöhe das Zaehlregister
20
21
cpi     r17, 1        ; mit dem Endwert vergleichen 
22
brne weiter2
23
cbi PORTD,0
24
weiter2: cpi r17, 2
25
brne weiter3
26
cbi PORTD,1
27
weiter3: cpi r17, 3
28
brne weiter4
29
cbi PORTD,2
30
weiter4: cpi r17, 4
31
brne weiter5
32
cbi PORTD,3
33
weiter5: cpi r17, 5
34
brne weiter6
35
cbi PORTD,4
36
weiter6: cpi r17, 6
37
brne weiter7
38
cbi PORTD,5
39
weiter7: cpi r17, 7
40
brne weiter8
41
cbi PORTD,6
42
weiter8: cpi r17, 8
43
brne loop
44
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

von Karl H. (kbuchegg)


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

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
Noch kein Account? Hier anmelden.