mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik encoder problem


Autor: tobias hofer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: edi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi Tobias,

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

Edgar

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Axel Barkow (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In den Codebeispielen findet man auch was:

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



Peter

Autor: tobias hofer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tobias hofer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der encoder heisst ecw1j.
wobei in eingerasteter position die schalter immer offen sind.

tobias

Autor: tobias hofer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.