Forum: Mikrocontroller und Digitale Elektronik encoder problem


von tobias hofer (Gast)


Angehängte Dateien:

Lesenswert?

hallo

ich habe einen encoder der firma elma typ e27. sieht so aus:
--__--__--__ spur a
 --__--__--__spur b
 1 2 3 4 5 6 7 ...

nun mein problem mit der fallenden flanke der spur a löse ich einen
interrupt aus. und möchte dann einen counter inkrementieren. aber der
intterurpt löst bei jeder drehung aus (pos1 nach pos2) das darf nun
wirklich nicht sein.
kann das sein weil dieser encoder dermassen prellt?

ich habe meinen source mal angehängt. bin um jeden tip dankbar.

gruss tobias

von edi (Gast)


Lesenswert?

hi Tobias,

schau dir mal die dokumentation bezueglich TCON an...
...speziell die bits IT0 und IT1.
viel erfolg

Edgar

von tobias hofer (Gast)


Lesenswert?

hallo edgar

ich bin mir noch nicht so im klaren was TCON, IT0, IT1 mit
dem problem zu tun haben soll.
das IT0 u. IT1 flanken od. zustandgesteuert ist, ist mir schon klar.

deshalb brauche ich ja EX5 (und nicht IT0 od. IT1) und der löst nur bei
einer 1-0 flake einen interrupt aus.

ohne rotary encoder funktioniert meine schaltung auch. aber sobald der
encoder angeschlossen ist habe ich im moment für mich noch ein
unerklärliches verhalten.

gruss tobias

von tobias hofer (Gast)


Lesenswert?

ich habe nun einfach mal einen schalter an EX5 angeschlossen und das
problem habe ich immer noch. das heisst wenn ich den schalter einmal
drücke wir bei einer 1-0 flanke ein interrupt ausgelöst.aber nicht nur
einmal sondern zweimal.

könnte es nun sein das ich in meiner interrupt routine das interrupt
flag des EX5 nicht richtig lösche?

ich habe EXIF in meiner reg51.def die adresse ox91 zugeordnet.

mache ich da etwas falsch?

gruss tobias

von Axel Barkow (Gast)


Lesenswert?

Hallo,

Informatives zum Thema Encoder findest du auch in der dse-faq:

http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

Gruß,

Axel

von Peter D. (peda)


Lesenswert?

In den Codebeispielen findet man auch was:

http://www.mikrocontroller.net/forum/read-4-37992.html#37992



Peter

von tobias hofer (Gast)


Angehängte Dateien:

Lesenswert?

hallo peter

genau das beispiel von dir habe ich genommen und versucht zu
implementieren.
aber irgendwas scheint noch nicht zu stimmen. da ich jedesmal einen
anderen wert lese,obwohl ich den encoder gar nicht drehe.

den source habe ich mal angehängt, vieleicht sieht ja jemand
das problem.ich weiss im moment nicht weiter.

besten dank tobias

von Peter D. (peda)


Lesenswert?

@Tobias,

sieht eigentlich genau so aus wie meins. Vielleicht kannst Du mal näher
beschreiben, was Du fehlerhaftes beobachtest.
Reagierts denn überhaupt auf das Drehen ?


Peter

von tobias hofer (Gast)


Angehängte Dateien:

Lesenswert?

hallo peter

nun habe ich das programm stark vereinfacht. in einer endlosschleife
lese ich den zählerstand den encoder und gebe ihn auf einem lcd aus.
(siehe anhang). als encoder habe ich nun einen bourns cjw1
angeschlossen.
aber es funktioniert immer noch nicht richtig.

fehlverhalten:

-der zähler reagiert auf das drehen des encoder. es wird aber nur
immer in die gleiche richtung gezählt.
-der zähler wird nicht um 1 inkrementiert wenn ich eine position weiter
drehe (rechts drehung) . manchmal sind es zwei inkrements manchmal ein
inkrement.
-wenn ich links drehe wird der zähler immer um etwa 10-14
inkrementiert.
-wenn ich das delay vergrössere kann ich keine änderung mehr
feststellen. (was auch logisch zu sein scheint)

vieleicht hat jemand eine idee wo der fehler liegen könnte.

besten dank tobias

von tobias hofer (Gast)


Lesenswert?

der encoder heisst ecw1j.
wobei in eingerasteter position die schalter immer offen sind.

tobias

von tobias hofer (Gast)


Angehängte Dateien:

Lesenswert?

ich habe ein bisschen weiterprobiert. mit diesem encoder der
in der rast stellung immer 0 sind kann der code mit der tabelle ja
nicht funktionieren.

der encoder schaltet folgendermassen:

_--__--__--__--__-- A
__--__--__--__--__--B
1   2   3   4   5

nun habe ich mein programm geändert. auf eine steigende flanke von A
löse ich einen inetrrupt aus (versuche dann zu entprellen) und schaue
ob B 1 oder 0 ist und bestimme dann die richtung.
es funktioniert meistens. aber manchmal wird zweimal inkrementiert oder
dekrementiert.
kann das nun wegen dem prellen des schalters sein?
kennt jemand eine bessere lösung zum entprellen als ich gemacht habe?
ich habe mir auch schon überlegt einen MC14490 einzusetzen und das
ganze hardware mässig zu lösen.

tobias

von tobias hofer (Gast)


Lesenswert?

nun habe ich es sauber hingekriegt. ich musst nur noch
mein delay ein bisschen anpassen. das falsche inkrementieren war ein
problem wegen dem prellen.

tobias

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.