Hallo an alle,
und vorerst ein Lob an dieses Forum. Hat mir schon viel geholfen. Nun
wirds aber mal spezieller. (Newbie-spezieller). Ich möchte mit einem
Decoder einen Schrittmotor ansteuern. Also Encoder-rechts = Motor
rechts. Um überhaupt erstmal mit dem Encoder klarzukommen folgende
einfache Schaltung.
Eine LED an PortB, eine LED an PortD, Encoder an C 0 und 1. Wenn ich
meinen Code von Hand durchgehe, sollte beim rechts drehen die eine LED
an und ausgehen und beim links drehen halt die andere. Tun sie aber
nicht. Meine Ausgaberegister werden immer abwechselnd angesprochen auch
wenn ich nur in eine Richtung drehe. Mein seltsamer Programmaufbau ist
an die Schaltung im Bild angelehnt.Meine Vermutung ist, das beim
exkl.Oder schon etwas schief läuft. Aber ich weiß es halt nicht.
Schonmal ein Danke und Gruß
Ronny
1 | in r25, PinC ;Encoder an PortC 0 und 1 einlesen
|
2 | ;---------------------------------------------------------------------------
|
3 | mainloop: in r24, PinC ;Änderung?
|
4 | cp r24, r25 ;wenn nicht weiter abfragen
|
5 | breq mainloop ;wenn ja...
|
6 | eor r25, r24 ;exkl. oder
|
7 | cpi r24, 0x00 ;auf 00 Position testen
|
8 | breq links ;wenn ja nach links
|
9 | zwei: cpi r24, 0x03 ;wenn nein auf 11 Position testen
|
10 | breq links ;wenn nein weiter zu rechts
|
11 | rechts: sbrs r25, 0 ;Auswertung...
|
12 | rjmp vorwarts ;...in welche
|
13 | rjmp ruckwarts ;...Richtung...
|
14 | links: sbrs r25, 1 ;...gedreht...
|
15 | rjmp vorwarts ;...wurde.
|
16 | rjmp ruckwarts
|
17 | vorwarts: com r16 ;entweder wird r16 "gedreht" oder r17
|
18 | out PortB, r16
|
19 | rjmp schluss
|
20 | ruckwarts: com r17
|
21 | out PortD, r17
|
22 | Schluss: mov r25, r24 ;r25 auf aktuellen Stand bringen
|
23 | rjmp mainloop
|