Gast
#2488552
ich versuche einen Drehencoder STEC12E08 von Reichelt auszulesen nur
leider zählt der encoder vielzu schnell.
Als Mc verwende ich ein ATmega128 mit 16MHz Takt
Pullups für PortA sind auch aktiv
ldi r23,255
out porta,r23 ;PullUp für Drehgeber ein
;Timer eistellung
ldi r23,1<<cs00
out tccr0,r23 ;starten
ldi r231<<toie0 ;Int ein:
out timsk,r23 ;für Timer0 freigeben
Tim0_OVF: ;ISR Timer0-Überlauf
in sregtemp, sreg ;Sreg sichern
;Encoder auslesen, ist verbunden mit PA0 und PA1
in temp,pina
ror temp ;pina0 ins Carry...
rol r24 ;.. und in bit0
ror temp ;pina1 ins Carry
rol r24 ;und nochmal schieben
andi r24,$0f ;das Bitmuster der letzten ISR steht nun in bit2 und 3
cpi r24,0b1011
breq links
cpi r24,0b1101
breq links
cpi r24,0b0100
breq links
cpi r24,0b0010
breq links
cpi r24,0b0001
breq rechts
cpi r24,0b0111
breq rechts
cpi r24,0b1110
breq rechts
cpi r24,0b1000
breq rechts
rjmp ende
.
rechts:
inc drgn1
rjmp ende
links:
dec drgn1
ende:
sts enc1 ,drgn1 ;Encoder-Wert in enc1 speichern
out sreg, sregtemp ;Sreg wiederherstellen
reti ;ISR fertig...
viellecht hat von euch noch einer eine idee
mfg