Rotary Encoder zählt nur hoch

Ich habe ein Sketch mit einem Encoder, funktioniert nun einwandfrei. Nun habe ich einen anderen Encoder angeschlossen, der verbaut werden soll, und der zählt nur hoch :angry:

Mit dem Beispielsketch der Lib das gleiche. Habs mit verschiedenen der gleichen Sorte ausprobiert

Also an den LA, nachfolgend die Bilder. Gibt es da verschiedene oder sind die Dinger, die ich habe, Mist? Link bin ich noch am suchen.
Das ist der gute fürs Breadboard
screenshot2.png

Das der zum verbauen:
screenshot1.png

Die Signale beim oberen Encoder wechseln alle zu Zeitpunkten, wo der jeweils komplimentäre Ausgang stabil im aktuellen HIGH oder LOW verharrt. Beim "schlechten" Encoder fallen alle ansteigenden Flanken des unteren Ausgangs mit einem Flankenwechsel des oberen Ausgangs zusammen.

Evtl. ist der Auslesesprogrammteil (Interrupts?) hier überfordert bzw. passt nicht. Vielleicht klappt es mit einer anderen library, die damit zurecht kommt?

rpt007: Evtl. ist der Auslesesprogrammteil (Interrupts?) hier überfordert bzw. passt nicht. Vielleicht klappt es mit einer anderen library, die damit zurecht kommt?

Genau das ist meine Hoffnung.

Der Auslesesprogrammteil kann nicht dafür verantwortlich sein, das sind nur 2 Pullups und LA. Kein Arduino dran um die Diagramme zu machen.

Hast Du den unteren überhaupt in beide Richtungen gedreht? Grüße Uwe

Ja, da ist es eben umgekehrt, da liegen die fallenden Flanken aufeinander.
screenshot3.png

Wie wertest du den Encoder aus?
Ich habe mit Billigst-Encodern experimentiert und dabei war die einzige stabile und problemlose Lösung die library von Ben Buxton (hier die überarbeitete Version von Brian Low).

Ich hänge diese mal an, vielleicht löst die auch dein Problem.
Du kannst die Encoder-Abfrage im Full-Step oder Half-Step Modus betreiben.
Erklärung, wo der Unterschied liegt findest du in den Erläuterungen von Ben Buxton:

Rotary-master.zip (5.76 KB)

Hast Du irgendeine Typenbezeichnung oder Verkäuferseite des 2. Encoders? Grüße Uwe

Habe mir mal das Timing des "schlechten" Encoders angesehen. Dabei ist mir aufgefallen, dass von den 4 erwarteten Kombinationen: 00, 01, 10, 11 die "01" niemals stabil auftritt. Die "01" wird immer nur per Flanke auf Flanke für wahrscheinlich einen Bruchteil einer Sekunde erzeugt und kann deshalb nicht stabil ausgelesen werden, da die Auslesecodes normalerweise noch ein debouncing durchführen und dann ist die Signal-Kombination wahrscheinlich wieder verschwunden.

Daher gehe ich davon aus, dass auch die Buxton-library vermutlich nicht oder nur schlecht arbeiten wird. Werde mal meine Billig-Encoder an den Oskar hängen und checken, wie deren Signalverlauf aussieht.

Ich habe folgende Encoder bei mir ohne Probleme im Einsatz: Encoder1 Encoder2 Encoder3

Bezeichnung ist nix drauf, Link hab ich keinen mehr gefunden. ebay, ali oder bg oder so.

Die buxton lib geht nicht.

Bilder:
Foto 18-10-16 23 34 18.jpg
Foto 18-10-16 23 33 48.jpg

Ich hab mit Drehencodern bisher noch nichts gemacht... daher entschuldigt, wenn ichbetwas naiv klinge... aber so wie ch die Diagramme lese nimmst du das Signal vom unteren, wenn das low ist wertestet du das andere Signal aus - positive Flanke ist die eine Richtung, negative die andere... oder?

Drehencoder geben normalerweise 2 Rechtechsignale die um 90 Grad verschoben sind. https://www.mikrocontroller.net/articles/Drehgeber So hat man beim Pegelwechsel auf einem Kanal ein eindeutiges Signal (H oder L) für die Drehrichtung am anderen Kanal. Grüße Uwe

Hallo,

Maha, nicht wenn irgendwas low ist. Man muß immer beide Signal zeitgleich einlesen und den Unterschied zum vorherigen feststellen.

Laut deinem Diagramm, ganz oben das zweite, ist der Encoder eindeutig Schrott. Die Signale müssen immer halb überlappen. Der "gute Encoder" haut zwar auch nicht ganz hin, überlappt jedoch immer noch zuverlässig.

Zum Link von Uwe dann noch der Link zu Peters Code der wirklich funktioniert, falls es Zweifel geben sollte. Ich habe den "zerlegt" zum nachvollziehen und gestestet. Astrein das Teil. Normalerweise ist pollen ausreichend. Einzel Pin Interrupt ist übertrieben und auch eigentlich falsch, weil man wie gesagt zeitgleich einlesen muß. Man kann mittels Timer zyklisch einlesen, falls die loop zu langsam ist. Ist alles beschrieben. http://www.mikrocontroller.net/topic/drehgeber-auslesen

@ElEspanol:
Ich habe deinen Encoder wohl gefunden (zumindest sieht alles bis auf den Bedienungsknopf identisch aus):
http://www.potentiometers.com/SeriesEN16.cfm

Aber: entweder hast du einen schrottigen Einzeltypen erwischt, der nicht sauber zusammengebaut worden ist (etwas verdreht), oder die ganze Serie ist Müll.

Daher wird keine Bibliothek oder Eigenprogrammierung zu Potte kommen.
In Post #7 habe ich einige links zu Bezugsquellen gepostet, die bei mir mit der Buxton-Library arbeiten.
Diese verwendet einen ähnlichen Algorithmus wie die von Peter Dannegger, dessen Bibliothek für Arduino von Watterott in Github zu finden ist:

Würde mich mal interessieren, welche der beiden (PeDa oder Buxton) Bibliotheken besser ist (d.h. sowohl mit langsamem als auch schnellem Drehen des Knopfes zurecht kommt). Habe aktuell etwas wenig Zeit, werde es aber, wenn die Winterzeit längere Zeit für meine Elektronik-Projekte spendiert, mal testen und hier, falls mir nicht jemand zuvorgekommen ist, posten.

Mich interessiert das Thema... hab mir jetzt auch mal welche bestellt- in Asien... wenn die dann irgend wann mal da sind schau ich mir das Thema auch mal an... Hab da auch schon ein Projekt wo die zum Einsatz kommen können... :-)

rpt007: @ElEspanol: Ich habe deinen Encoder wohl gefunden (zumindest sieht alles bis auf den Bedienungsknopf identisch aus): http://www.potentiometers.com/SeriesEN16.cfm

Die müssten es sein. Ich gehe mal von 3.-4- Wahl aus, also entsorgen. Ist bisher nur selten vorgekommen, das die Chinesen so ein Schrott schicken. Ich schraub mal Interessehalber einen auf.

Ist bisher nur selten vorgekommen, das die Chinesen so ein Schrott schicken.

Stimmt, hatte bislang nur einmal Probleme - interessanterweise auch mit Dreh-Encodern, die auf einer Mini-Platine grauenhaft schief verlötet waren und daher auch Kontaktprobleme hatten - wenn auch mit Dremel zu beseitigen und zu richten (von 10 Stck aber nur 2 Stck).

Habe dann ein Foto gemacht und an den Händler gesandt; habe daraufhin 5 neue erhalten :)

rpt007: Daher wird keine ... Eigenprogrammierung zu Potte kommen.

Nunja, zwei positive Signale gleichzeitig eine Richtung, zwei negative Signale gleichzeitig andere Richtung. Das ist, was ich aus den Signalen lese. So könnte man es auswerten.

Ob es sich lohnt, diese kleine sportliche Herausforderung anzunehmen, sei dahingestellt :)

Dann viel Spaß. Gray-Code-Encoder arbeiten aber immer mit stabilen Verhältnissen und von "erlaubten Übergangszuständen". Ich gehe davon aus, dass du eher Zufallsergebnisse erhalten wirst.

Ich kauf neue und fertig. Muss ich halt warten, der Elektronikladen im Nachbarort hat keine da, und Barcelona, wo die auf Lager sind, ist mir zu weit zu fahren.

Barcelona, wo die auf Lager sind, ist mir zu weit zu fahren.

Ist aber immer eine Reise wert; kannst das ja mit Urlaub verbinden :)