Forum: Mikrocontroller und Digitale Elektronik Mal wieder Encoder


von Ronny K. (controller-ronny)


Angehängte Dateien:

Lesenswert?

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

von Erik D. (dareal)


Lesenswert?

Frage ist: Wie hast du das Ganze aufgebaut?

ch habe bei mir einen Encoder am STK500 und dieser Encoder zieht die 
Pins jeweils auf GND. Von daher solltest du erstmal schauen ob du 
"richtig rum denkst" ... ich habe mich auch einige Zeit mit 
rumgeschlagen, bis ich gemerkt habe, dass ich genau falsch rum denke ... 
meine UND/ODER haben nämlich auch nie das geliefert was ich wollte.

von Ralf (Gast)


Lesenswert?

Was passiert wenn der Encoder auf 0x01 oder 0x02 steht?

von Ronny K. (controller-ronny)


Lesenswert?

Hallo,
das ging ja flott. Aufgebaut hab ich das als ob der Encoder ein Taster 
wäre, der die entsprechenden Eingänge auf low zieht. Elektronisch 
scheint es ja zu funktionieren, da sich bei jeder Raste der Zustand 
ändert. Nur nicht so wie er soll. Ich habe die Schaltung auch am Oszi 
gehabt und da stimmt alles. Der Gray-Code sieht aus wie im Datenblatt. 
Oder denke ich jetzt noch verkehrter?

von Ronny K. (controller-ronny)


Lesenswert?

Nach meinem Verständnis sollte er bei 0x01 und 0x02 bei Punkt rechts: 
landen?!
Rechts und links ist in diesem Fall noch nicht die Drehrichtung sondern 
die Seite im Bild, nachdem ich auf 0x00 oder 0x11 getestet habe.

von Ronny K. (controller-ronny)


Lesenswert?

So, nur noch schnell des Rätsels Lösung! (Der Vollständigkeit halber ;))
Wenn man die Einleseregister (r24, r25) maskiert, so das wirklich nur 
Bit 0 und 1 geändert werden, funktionierts prächtig.Trotzdem Dank!
Schönen Abend noch an alle Fleißigen!
Ronny

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.