Forum: Mikrocontroller und Digitale Elektronik Auswertung Drehencoder?


von Thomas (kosmos)


Angehängte Dateien:

Lesenswert?

habe nun das erste mal mit Drehencodern zu tun, da ich eine eine 
Menüsteuerung machen möchte.

So wie ich das sehe muss ich nur feststellen auf welchem Kanal die erste 
Flanke auftritt und schon habe ich Richtung ich führe dann einen Schritt 
in diese Richtung aus. Um dann ein evtl. Prellen aus dem Weg zu gehen 
würde ich einfach die Interrupts für eine gewisse Entprellzeit (bis zur 
2ten roten Linie) sperren. So sollte ich ein sehr schnelles reagieren 
erreichen ohne zusätzlichen Abtastvorgänge.

Die Entprellzeit könnte man auch noch nach der Zeitdifferenz der beiden 
Flanken nachjustieren.

Was haltet ihr von dieser Lösung?

:
von Michael B. (laberkopp)


Lesenswert?

Thomas O. schrieb:
> Was haltet ihr von dieser Lösung?

Typisch der erste Versuch der dann ewig Probleme nach sich zieht.

Mach's gleich richtig:

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

von H.Joachim S. (crazyhorse)


Lesenswert?

1000mal hier besprochen - keine Flankentriggerung bei mech. Encodern, 
sondern Abtastung in festen Intervallen.
Immer wieder kommen Neuerfinder, die das so oder ähnlich versuchen 
wollen. Funktioniert sogar meist anfangs, wird aber im Lauf der Zeit 
immer schlechter bis absolut unbrauchbar.

von Andreas B. (bitverdreher)


Lesenswert?

Dieser Standardfrage ist hier sogar ein Artikel gewidmet:
https://www.mikrocontroller.net/articles/Drehgeber

von Holger D. (hodoe)


Lesenswert?

Moin, naja selber machen hat ja noch niemanden geschadet. Wenn man 
optische oder magnetische Geber hat, dann hat man wenigstens nicht die 
mechanischen Probleme. Bei den rein mechanischen Billiggebern merkt man 
am Rastpunkt ob die Auswertung etwas taugt. Verschleiß und eventuell 
zunehmendes Prellen kann eine jetzt funktionierende Routine später nicht 
mehr richtig funktionieren lassen.

Ich habe eine AVR-ASM-Routine, die für 2,3,4 Impulse pro Rastschritt 
funktioniert. Da kann ich so schnell mit der Hand nicht drehen. Selbst 
ein Akkuschrauber bringt die Routine nicht aus der Fassung. Ich frage 
zwei Drehgeber inklusive Taster 1000x pro Sekunde ab.

Man findet natürlich genügend Bullet-Proof-Beispiele hier. Peter 
Dannegger hat ja einiges veröffentlicht.


Holger

von Andreas B. (bitverdreher)


Lesenswert?

Holger D. schrieb:
> Moin, naja selber machen hat ja noch niemanden geschadet. Wenn man
> optische oder magnetische Geber hat, dann hat man wenigstens nicht die
> mechanischen Probleme.

Aber die gleichen mit anderer Ursache. Du hast den Artikel nicht 
gelesen.

von Olaf (Gast)


Lesenswert?

> Aber die gleichen mit anderer Ursache. Du hast den Artikel nicht
> gelesen.

Ich denke ja manchmal das Problem ist fuer viele Menschen schon zu 
Abstract oder da schimmert deutlich durch das denen die Grundladen der 
Etechnik fehlen. :)

Olaf

von Wolfgang (Gast)


Lesenswert?

Holger D. schrieb:
> Ich habe eine AVR-ASM-Routine, die für 2,3,4 Impulse pro Rastschritt
> funktioniert.

3 Impulse pro Rastschritt hört sich - vorsichtig formuliert - 
"kunstvoll" an. Das geht IMHO nur mit einer 4-Impulsauswertung, die bei 
der Ausgabe eine Zustand unterschlägt. Sonst funktioniert 2-Bit 
Gray-Code nicht.

von Andreas B. (bitverdreher)


Lesenswert?

Olaf schrieb:
> Ich denke ja manchmal das Problem ist fuer viele Menschen schon zu
> Abstract oder da schimmert deutlich durch das denen die Grundladen der
> Etechnik fehlen. :)

Das ist ja nicht verwerflich. Aber warum nehmen die dann nicht erprobte 
SW von Leuten, die das Problem verstanden haben?

von batman (Gast)


Lesenswert?

Weil etwas, das man nicht verstehen kann, grundfalsch sein muß.

von my2ct (Gast)


Lesenswert?

Olaf schrieb:
> Ich denke ja manchmal das Problem ist fuer viele Menschen schon zu
> Abstract oder da schimmert deutlich durch das denen die Grundladen der
> Etechnik fehlen. :)

Anderen fehlen dafür die Grundlagen der Rechtschreibung und trotzdem 
kommen alle irgendwie durchs Leben ;-)

von Simpel (Gast)


Lesenswert?

Lasst doch die Leute mal in Ruhe knobeln und tüfteln, statt immer gleich 
von oben herab auf die vorgekauten "Bullet-Proofs" zu verweisen, die 
nicht selten auch softwaremässiger Overkill sind... Durch try and error 
lernt man mehr als durch copy and paste... Nicht zuletzt geht es beim 
µC-Hobby auch um Knobelei und Rätsel-Lösen mit Nutzen dahinter...

Würdet ihr ihnen sachliche Gründe liefern, warum ihr Lösungsansatz 
suboptimal ist, könnte das dieses Lernerlebnis deutlich verstärken...es 
wäre kollegialer und deutlich empathischer, als stets sofort inhaltlos 
die persönlich abwertende Arroganzkeule des Überfliegers zu schwingen 
und sich an jedem fragenden Neuling-Opfer abzureagieren...

von Michael B. (laberkopp)


Lesenswert?

Simpel schrieb:
> Durch try and error lernt man

Nein, wie man an hunderten kommerzieller Geräte sieht, deren Drehencoder 
hakelt.

Simpel schrieb:
> Würdet ihr ihnen sachliche Gründe liefern, warum ihr Lösungsansatz
> suboptimal ist

Wird in den verlinkten Artikeln für die du zu faul warst ihnen zu folgen 
getan.

von EncoderDreher (Gast)


Lesenswert?

Man muss selbst experimentieren und man muss sich das Gemessene auf 
Millimeterpapier vergegnwärtigen. Dann kommt man darauf, wie es "in 
Natura"
funktioniert und wie man das auswerten kann.

Eventuell kommt man dabei zu einer Routine, die von den gezeigten 
abweicht und trotzdem funktioniert.

Der größte Fehler wäre dann, sie heir zu veröffentlichen und sich 
dadurch in endlose, völlig fruchtlose Streitereien zu verwickeln.

von batman (Gast)


Lesenswert?

Schöne Geschichte, war hier allerdings nicht gefragt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

EncoderDreher schrieb:
> Man muss selbst experimentieren und man muss sich das Gemessene auf
> Millimeterpapier vergegnwärtigen.

Ist fraglich, wie man Dinge wie Kontaktprellen auf Millimeterpapier 
simuliert, ohne dass man sie vorher bspw. am Oszi oder LA gemessen hat. 
Wenn man sie aber dort gemessen hat, braucht man auch das 
Millimeterpapier nicht mehr.

Denn darum geht es in all diesen Routinen vorrangig: einen schönen 
sauberen Gray-Code kann man einfach und auf verschiedene Weise 
decodieren. Sowas geben aber bestenfalls die teuren optischen Geber von 
sich. Einen "real verwackelten" dagegen zu decodieren, ist die 
eigentliche Kunst und der Punkt, wo die schönen einfachen Lösungen 
schnell an ihre Grenzen kommen. Da stellt das Heizungsventil dann beim 
Rechtsdrehen des Stellrads nur noch mit Glück die Temperatur nach oben …

von Holger D. (hodoe)


Lesenswert?

Andreas B. schrieb:
> Aber die gleichen mit anderer Ursache. Du hast den Artikel nicht
> gelesen.

Muss ich auch nicht, da meine Routine perfekt ist! Es mag andere 
Lösungen geben.


Holger

: Bearbeitet durch User
von Andreas B. (bitverdreher)


Lesenswert?

Holger D. schrieb:
> Muss ich auch nicht, da meine Routine perfekt ist!

Es geht doch nichts über ein gesundes Selbstbewußtsein. ;-)
Das würde ich Dir glauben, wenn Du den Artikel komplett gelesen, 
verstanden und dann immer noch zu diesem Schluss kommen würdest.

Und das hier:

Holger D. schrieb:
> Ich habe eine AVR-ASM-Routine, die für 2,3,4 Impulse pro Rastschritt
> funktioniert.

läßt mich doch sehr daran zweifeln.

: Bearbeitet durch User
von EncoderDreher (Gast)


Lesenswert?

Jörg W. schrieb:
> EncoderDreher schrieb:
>> Man muss selbst experimentieren und man muss sich das Gemessene auf
>> Millimeterpapier vergegnwärtigen.
>
> Ist fraglich, wie man Dinge wie Kontaktprellen auf Millimeterpapier
> simuliert, ohne dass man sie vorher bspw. am Oszi oder LA gemessen hat.

Was soll das? Es steht doch da: Das Gemessene
Nicht jeder besitzt einen Speicheroszi oder auch einen Mehrkanaler, um 
sich beide "Spuren" simultan anzusehen.

> Wenn man sie aber dort gemessen hat, braucht man auch das
> Millimeterpapier nicht mehr.

Jeder hat eine andere Herangehensweise, um Vorgänge in ihre zeitlichen 
Abläufe zu zerlegen.

von Andreas B. (bitverdreher)


Lesenswert?

EncoderDreher schrieb:
> Jeder hat eine andere Herangehensweise, um Vorgänge in ihre zeitlichen
> Abläufe zu zerlegen.

Und wie machst Du das mit den Kontaktprellen auf Millimeterpapier? Oder 
das Schwingen einer Welle und das dadurch resultierende Signal? Das 
denkst Du Dir dann aus und malst dann schöne Kurven oder wie darf man 
sich das dann vorstellen?

von EncoderDreher (Gast)


Lesenswert?

Andreas B. schrieb:
> EncoderDreher schrieb:
>> Jeder hat eine andere Herangehensweise, um Vorgänge in ihre zeitlichen
>> Abläufe zu zerlegen.
>
> Und wie machst Du das mit den Kontaktprellen auf Millimeterpapier? Oder
> das Schwingen einer Welle und das dadurch resultierende Signal? Das
> denkst Du Dir dann aus und malst dann schöne Kurven oder wie darf man
> sich das dann vorstellen?

Richtig, genau so mache ich das...

Ich denke nicht, daß es Sinn hat, das hier weiter zu erörtern, wenn es 
an Vorstellungsvermögen so sehr mangelt.

von Axel S. (a-za-z0-9)


Lesenswert?

EncoderDreher schrieb:
> Man muss selbst experimentieren und man muss sich das Gemessene auf
> Millimeterpapier vergegnwärtigen. Dann kommt man darauf, wie es "in
> Natura" funktioniert und wie man das auswerten kann.

Es ist weit bekannt und dokumentiert, wie ein Drehgeber funktioniert. 
Dazu braucht man nicht zu experimentieren, sondern muß nur die 
vorhandene Dokumentation mal lesen.

> Eventuell kommt man dabei zu einer Routine, die von den gezeigten
> abweicht und trotzdem funktioniert.

Das ist unwahrscheinlich. Alle "Abkürzungen", die ich bisher gesehen 
habe, hatten das Problem, daß sie nur unter Randbedingungen 
funktionieren, die in der Praxis dann aber nicht gegeben sind.

Die kanonische Implementierung als endlicher Automat, bei dem nur die 
zyklischen Zustandsübergänge erlaubt sind, ist im Gegenteil beweisbar 
robust gegen jede Art von Prellen, Flattern, Jitter usw. Außerdem ist 
sie auch noch unkomplizierter und resourcenschonender als die meisten 
Alternativen. Die Hürde, etwas besseres zu entwickeln, liegt 
ausgesprochen hoch.

Die Wahrscheinlichkeit, daß das jemand schafft, der noch nicht mal die 
genannte kanonische Auswertung kennt ist praktisch gleich Null.

von Holger D. (hodoe)


Lesenswert?

Andreas B. schrieb:
> läßt mich doch sehr daran zweifeln.

Dann tue es. Die Realität sieht anders aus. Aber wahrscheinlich kannst 
Du nur Cut & Paste und nachplämpern.

von Andreas B. (bitverdreher)


Lesenswert?

Axel S. schrieb:
> Die Wahrscheinlichkeit, daß das jemand schafft, der noch nicht mal die
> genannte kanonische Auswertung kennt ist praktisch gleich Null.

Volle Zustimmung.

Holger D. schrieb:
> Aber wahrscheinlich kannst
> Du nur Cut & Paste und nachplämpern.

Ich habe den Artikel gelesen und, im Gegensatz zu Dir, das Problem auch 
verstanden.
Und ja, wenn ich das brauche, kopiere ich das mit nur leichten 
Änderungen, die aber den Kern der Funktion nicht ändern.
Wenn das bei Dir aktuell funktioniert: Schön für Dich. Ich gehe auch oft 
bei rot über die Ampel. Nie was passiert.

von Holger D. (hodoe)


Lesenswert?

Andreas B. schrieb:
> Ich habe den Artikel gelesen und, im Gegensatz zu Dir, das Problem auch
> verstanden.

Schön, dass Du Probleme verstehst. Ich habe kein Problem, sondern für 
mich eine Aufgabenstellung zufriedenstellend gelöst.

Du kannst das gerne bezweifeln. Es ist mir vollkommen egal!

von Thomas (kosmos)


Angehängte Dateien:

Lesenswert?

eure Meinung scheint ja gefestigt zu sein, schade das es kein richtiges 
Argument gibt wieso es nicht gehen sollte, wenn man seine Software im 
Griff hat.

So stelle ich mir den Ablauf vor
1. der µC erkennt einen Flankenwechsel am Kanal A (Rechtsdreh) springt
2. in die IR-Routine
3. sperrt weitere IRs und ändert z.B. ein Byte von 127 auf 255 (für eine 
Rechtsbewegung)
4. springt wieder raus
5. weiter im Programmablauf mit Abfrage ob ein Rechtsdreh (255) oder 
eine Linksdreh (0) gespeichert ist
6. Ausführung der Links/Rechts Aktion
7. Zurückstezten des Bytes auf 127
8. IR Aufruf nach Sperrzeitablauf
9. Prüft ob beide Kanäle den gleichen Pegel (Ruhezustand haben, sonst 
könnte es noch prellen falls man die Sperrzeit sehr kurz wählt) und gibt 
dann die Flankentriggerung wieder frei, springt raus
10. weiter im Programm

Prellen kommt bei der Low High Flanke bei sehr schnellem Drehen vor, 
allerdings ist dies nach 200µSek abgeklungen. Wobei mein Messaufbau den 
Worstcase darstellt erst vom Dekoder 20 cm zu einem Steckboard, eine 1 
Meter Zuleitung einer Wandwarze und dann noch die Tastköpfe ohne 
Federklammer gemeinsam über einen weiteren Draht auf die Masse.

Ich hänge mal alle 3 Dateien an, die letzte mit der High Low Flanke hat 
es anscheinend zerschossen. (Oder kennt jemand einen WEG den USB-Stick 
am Rigol DS1054Z sauber abzumelden?)

von H.Joachim S. (crazyhorse)


Lesenswert?

Mach es doch einfach wie du willst.
Und irgendwann später machst du es dann auch richtig, nennt sich Lernen.

von Holger D. (hodoe)


Lesenswert?

Moin Thomas,

probiere es aus. Du wirst hier keine Antworten bis auf die beiden links 
bekommen. Schau Dir die Artikel an. Du bekommst Lösungen serviert.

Ich persönlich würde die Problemlösung selber entwickeln.


Holger

von MaWin (Gast)


Lesenswert?

Thomas O. schrieb:
> eure Meinung scheint ja gefestigt zu sein,

Das nennt man Erfahrung.

> schade das es kein richtiges Argument gibt wieso es nicht gehen sollte,
> wenn man seine Software im Griff hat.

Merkwürdig, welche Selbstüberheblichkeit die Lernresistenten so an den 
Tag legen.
Du kannst prinzipielle Probleme nicht mit Programmiererhanselkram in den 
Griff bekommen.

Ich dachte mir schon, daß du schon so viele Jahre hier im Forum bist, 
daß du schon gehört haben müsstest, wie man Drehgeber korrekt auswertet. 
Insofern konnte dein Thread nur ein Trollposting sein. Deine 
Lernresistenz zeigt den Troll deutlich.

Die Auswertung mit dem genannten Verfahren ist
- einfach (d.h. wesentlich kürzer in Befehlsanzahl und Laufzeit 
programmierbar als deine Flankenauswertung)
- zuverlässig (sie basiert nicht auf der Hoffnung, daß der uC, wenn man 
dreht, noch genug Rechenleitung übrig hat um die Flankenwechsel zu 
verarbeiten)
- robust (gegen Prellen und ähnliche Effekte)
- erkennt wenn sie überfahren wird, also nicht mehr korrekt arbeitet
- schnell (mit der Methode kann man deutlich schnelleren 
Drehgeberbewegungen folgen als mit der unsäglichen 
Flankenwechselinterruptmethode)

Es gibt NULL Grund, es anders zu machen, ausser Borniertheit.

"der uC hat nichts zu tun wenn der Drehgeber nicht bewegt wird" ist kein 
Grund, denn es gibt kein Geld zurück für nicht genutzte Befehle.

Aber manche Leute erfinden auch Sortieralgorithmen schlechter neu.

von Axel S. (a-za-z0-9)


Lesenswert?

Thomas O. schrieb:
> Prellen kommt bei der Low High Flanke bei sehr schnellem Drehen vor,
> allerdings ist dies nach 200µSek abgeklungen

Na bitte, da haben wir den Fe ler ja schon. Es mag gut sein, daß dieses 
Exemplar deines Drehgebers im jetzigen Zustand und so wie du dran 
drehst, höchstens 200µs lang prellt.

Aber Drehgeber altern. Keine zwei Exemplare sind gleich. Und es macht 
einen riesigen Unterschied, wie man dran dreht. Eine Festlegung auf eine 
bestimmte Prellzeit wird früher oder später zu einer stotternden 
Auswertung führen.

Die Auswertung per Zustandsautomat hingegen braucht gar keine Annahme 
über die Prellzeit zu machen. Prellen führt dazu, daß sich der Wert um 
±1 ändert. Aber Fehler summieren sich nicht auf. Und wenn man die 
untersten 1-2 Bits sowieso nicht braucht, weil man Halbschritt- oder gar 
Vollschrittbetrieb fährt (Drehgeber mit Rastung) dann merkt davon gleich 
gar nichts.

von Carl D. (jcw2)


Lesenswert?

MaWin schrieb:
>....
> "der uC hat nichts zu tun wenn der Drehgeber nicht bewegt wird" ist kein
> Grund, denn es gibt kein Geld zurück für nicht genutzte Befehle.

Zudem läuft praktisch immer ein 1..10ms Timer, um die zeitlichen Abläufe 
der Anwendung zu steuern.

Falls jetzt jemand mit "deep sleep" kommt, ja dabei darf(/meist muß) man 
den Timer abschalten und das ist dann der Fall, wo der Drehgeber per 
PinChange-Int überwacht wird. Aber nur bis der erste Dreh die µC 
aufweckt. Dann schaltet man PinChange wieder ab und sampled wieder via 
Timer.

Zumindest maschen das die bekannten ATmega169 Heizungsthermostaten, die 
so Monate mit einem Batteriesatz laufen.

von Thomas (kosmos)


Lesenswert?

ja ich bin schon etwas länger im Forum unterwegs und kenne noch die 
Zeiten, wo einem Nein eine Begründung folgte. Nur weil es alle so 
machen, ist für mich kein Grund.

Ich werde mich mal die nächsten Tage an den Code machen und berichten ob 
und wie es läuft, aber aufgrund der Messergebnisse sehe ich hier keine 
großen Probleme da das Prellen absolut reproduzierbar ist und nicht aus 
dem nichts auftaucht, sondern direkt nach dem Flankenwechsel und dann 
auch sehr schnell wieder weg ist.

Mein aktuelles Projekt hat nicht so die Anforderung an den µC da dreht 
dieser eh meist Däumchen und wartet auf den ADC und so ne IR-Routine in 
.asm ist in 10-15 Takte wieder erledigt, braucht also weder viel Code 
noch viel Zeit. Da kann ich also etwas Zeit investieren.

von c-hater (Gast)


Lesenswert?

Axel S. schrieb:

> Die kanonische Implementierung als endlicher Automat, bei dem nur die
> zyklischen Zustandsübergänge erlaubt sind, ist im Gegenteil *beweisbar*
> robust gegen jede Art von Prellen, Flattern, Jitter usw.

Ganz genau.

Allerdings kann man genau diesen Automaten auch bauen, wenn man nur 
Flanken auswertet. Einzige Voraussetzung: man hat die Möglichkeit, 
"unerwünschte" Flanken zu unterdrücken. Natürlich nicht durch 
irgendwelches Timing-Entprell-Gelalle, sondern durch simple Stillegung 
des entsprechenden Flankensensors, nachdem der eine Flanke gesehen hat.

Was mich am meisten bei dieser immer wiederkehrenden Diskussion 
verwundert: auch die Leute, die nach meiner Einschätzung durchaus 
verstanden haben, dass das (unter den gegebenen Einschränkungen) auch 
flankenbasiert funktioniert, scheinen immer wieder bei Neuaufflammen der 
Diskussion ihre früheren Erkenntnisse immer wieder vollkommen vergessen 
zu haben scheinen...

Was soll das? Ich verstehe den Sinn dahinter einfach nicht. Reines 
Trollgehabe kann man wohl ausschließen. Aber was sonst steckt dahinter?

von MaWin (Gast)


Lesenswert?

c-hater schrieb:
> auch flankenbasiert funktioniert, scheinen immer wieder bei
> Neuaufflammen der Diskussion ihre früheren Erkenntnisse immer wieder
> vollkommen vergessen zu haben scheinen...

Wahrscheinlich, weil sie mit so einem angeblich doch irgendwie 
vielleicht im Labor mal funktionierenden Drehgeber dann doch im echten 
Leben in Berührung kamen. Ob bei Vissmann  Heizungen, im Range Rover 
Radio , im dBx driverack, it sucks.

There aint no reason for such a bullshit.

von H.Joachim S. (crazyhorse)


Lesenswert?

Es gibt meist mehrere Wege die zum Ziel führen.
Wenn es aber einen erprobten Weg ohne erkennbare und 
verbesserungswürdige Nachteile bei gleichzeitig 100%iger Funktionalität 
gibt würde ich sagen: Optimum/Maximum erreicht, da gibts eben links und 
rechts nichts mehr, gar nichts.

von Rainer V. (a_zip)


Lesenswert?

Thomas O. schrieb:
> Prellen kommt bei der Low High Flanke bei sehr schnellem Drehen vor,
> allerdings ist dies nach 200µSek abgeklungen.

Ich erlaube mir hier jetzt mal die Unterstellung, dass du gar nicht 
weißt, was Prellen ist oder zumindest eine irrige Vorstellung mit dir 
herumträgst! Jeder (mechanische) Schalter prellt bei Betätigung. Und ja, 
es gibt (am Anfang vielleicht) Schalter mit moderatem Prellen, andere 
prellen sofort wie der Teufel :-) Das hat wenig bis gar nichts damit zu 
tun, wie schnell du jetzt drückst oder drehst!!! Es wird sogar so sein, 
dass du bei 100 Betätigungen inerhalb von 200µs gar kein Prellen mehr 
hast...so kanns gehen...
Gruß Rainer

von Jan B. (jan)


Lesenswert?

Wie funktioniert diese mehrfach zitierte "kanonische Auswertung" ?
Bitte um eine kurze Beschreibung des Prinzips ?
Polling, nehme ich an, und dann ?

Gruß Jan

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jan B. schrieb:
> Bitte um eine kurze Beschreibung des Prinzips ?

Drehgeber

von Axel S. (a-za-z0-9)


Lesenswert?

Jan B. schrieb:
> Wie funktioniert diese mehrfach zitierte "kanonische Auswertung" ?
> Bitte um eine kurze Beschreibung des Prinzips ?

Das steht im Artikel Drehgeber

Einen extra Artikel gibt es genau deswegen, weil das eine FAQ ist.
Nur lesen mußt du ihn dann doch noch selber.


Thomas O. schrieb:
> ja ich bin schon etwas länger im Forum unterwegs und kenne noch die
> Zeiten, wo einem Nein eine Begründung folgte. Nur weil es alle so
> machen, ist für mich kein Grund.

Das ist auch nicht der Grund. Es haben sich eine Menge Leute Gedanken 
über das Thema gemacht. Und das Ergebnis dieser Gedanken ist die 
Auswertemethode mit einem Automaten. Beschrieben im Artikel 
Drehgeber

R! T! F! M!

> Ich werde mich mal die nächsten Tage an den Code machen und berichten ob
> und wie es läuft, aber aufgrund der Messergebnisse sehe ich hier keine
> großen Probleme da das Prellen absolut reproduzierbar ist

Das ist Bullshit. Prellen ist niemals reproduzierbar. Deswegen nennt man 
es ja Prellen.

> nicht aus dem nichts auftaucht, sondern direkt nach dem Flankenwechsel
> und dann auch sehr schnell wieder weg ist.

Ja selbstverständlich prellt ein Kontakt unmittelbar nach der 
Betätigung.  Und nur für eine endliche Zeit. Der Mechanismus ist 
durchaus verstanden (elastischer Stoß, Physik Oberstufe). Nur sind die 
Randbedingungen halt nicht gut genug bekannt, um eine sinnvolle 
Prellzeit vorzugeben. Und es gibt auch einen Zielkonflikt. Machst du die 
Totzeit zu kurz, springt der Wert. Machst du sie zu lang, reagiert der 
Geber zu träge und kommt beim schnellen Drehen nicht mehr mit.

Und nun stell dir vor, es gibt eine Auswertemethode, die diesen 
Zielkonflikt komplett vermeidet. Die nur eine einzige Grenzbedingung 
hat: daß das Abfrageintervall kurz genug sein muß, um jeden Zustand aus 
dem 4er Zyklus wenigstens einmal zu sehen.

Das soll dich keineswegs davon abhalten, deinen eigenen Code zu 
schreiben. Aber wenn du ihn zeigst und argumentieren willst, warum er 
besser ist, dann brauchst du ein paar verdammt gute Argumente. Wir 
warten gern. Aber bitte nimm es uns nicht übel, wenn wir die Luft beim 
Warten nicht anhalten ...

von batman (Gast)


Lesenswert?

Wenn man nicht mittlerweile genau wüßte, dass diese immer 
wiederkehrenden Anwandlungen, jetzt unbedingt eine ganz neue Lösung für 
so eine uralte triviale Routinegeschichte zusammenschustern zu müssen, 
nicht etwa durch besondere Kreativität sondern fehlendes Verständnis der 
optimalen Standardlösung motiviert sind.

von H.Joachim S. (crazyhorse)


Lesenswert?

Mein Prof. sagte in solchen Fällen immer: wer das nicht glauben will 
(ok, ging nicht um Drehgeber) solle Bombenentschärfer werden, da ist 
Raum für eigene Experimente statt auf Erfahrung und Wissen zu setzen....
Und auch der unvergleichliche Holger D. labert nur statt was zu 
funktionierendes zu zeigen.

von Holger D. (hodoe)


Lesenswert?

H.Joachim S. schrieb:
> Und auch der unvergleichliche Holger D. labert nur statt was zu
> funktionierendes zu zeigen.

Und der unvergleichliche H.Joachim S. reiht sich in die Riege der 
Laberheinis ein. Man man man.

Warum lasst Ihr nicht den Thomas O. machen.

von Andreas B. (bitverdreher)


Lesenswert?

Holger D. schrieb:
> Warum lasst Ihr nicht den Thomas O. machen.

Kann er ja tun. Er lernt dabei hoffentlich mehr als Du. Und wenn er 
dabei auch noch den mehrmals zitierten Artikel liest und ihn auch 
versteht, ist die Wahrscheinlichkeit dazu gar nicht mal so gering.

von Holger D. (hodoe)


Lesenswert?

Andreas B. schrieb:
>>Er lernt dabei hoffentlich mehr als Du.

Sage mir bitte nur eines: Warum unterstellst Du mir nichts gelernt zu 
haben? Du kennst mich nicht, ich kenne Dich nicht und trotzdem bildest 
Du Dir so eine unerhörte Meinung.

von Andreas B. (bitverdreher)


Lesenswert?

Holger D. schrieb:
> Du kennst mich nicht, ich kenne Dich nicht und trotzdem bildest
> Du Dir so eine unerhörte Meinung.

Ich habe Deine Beiträge hier gelesen. Wenn Du auch nur im geringsten auf 
den Artikel eingegangen wärst und begründet hättest warum Du einen 
besseren Code gefunden hättest, wäre das anders.
Du kannst ja mal Deinen genialen Code mal hier rein stellen. Dann ändere 
ich vielleicht meine Meinung.

von Holger D. (hodoe)


Lesenswert?

Andreas B. schrieb:
 begründet hättest warum Du einen
> besseren Code gefunden hättest, wäre das anders.

Sage mir bitte, wo ich geschrieben habe, dass ich einen besseren Code 
gefunden habe? Gefunden habe ich sowieso nichts, sondern selber 
geschrieben.

Der Code mag für andere programmiertechnisch nicht perfekt sein, 
funktioniert aber für mich perfekt und zwar mit allen bisher von mir 
eingestezten Drehgebern. Und den Artikel habe ich halt vorher nicht 
gelesen.

> Du kannst ja mal Deinen genialen Code mal hier rein stellen.

Bin arbeiten. Vielleicht heute Abend. Und warum behauptest Du, dass der 
Code genial wäre. Das habe ich niemals gesagt. Siehe oben.

Was ist mir Dir los?

von Andreas B. (bitverdreher)


Lesenswert?

Holger D. schrieb:
> Muss ich auch nicht, da meine Routine perfekt ist! Es mag andere
> Lösungen geben.

Du hörst Dich heute schon wesentlich anderes an als gestern.

: Bearbeitet durch User
von Holger D. (hodoe)


Lesenswert?

jaja

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Es ist doch jedesmal das gleiche, wenn es um Drehgeber geht. Eine 
endlose Diskussion und zum Schluss macht der TE dann doch, was er will. 
Ein einziger Hinweis auf den o.a. Artikel sollte reichen und die, die 
nicht lesen wollen oder können, sollen doch so programmieren, wie sie 
möchten.
Ich habe früher auch mal flankengesteuert ausgewertet, extra Routine 
fürs Entprellen des Drückerchens am Drehgeber geschrieben usw. aber so 
richtig war das nur für einen einziges Modell von Encoder und wenn er 
neu war.

Heute benutze ich die Timermethode gleichzeitig für Encoder und Buttons 
in einem Schwups und benutze das als Library in jedem Encoder Projekt. 
Das einzige, was dann noch wichtig ist, ist die Auswahl von 1, 2 oder 4 
Step Abfrage.
Einer der Vorteile ist m.E. die konstante Laufzeit der Routinen bei der 
Timermethode, egal ob gedreht oder gedrückt wird. Und man hat einen 
Ticker, den man meist sowieso braucht.

von Timermethode (Gast)


Lesenswert?

Vielen Dank an Matthias S.

Seine Aussagen treffen 100% ins Schwarze.

Unbelehrbare sind unbelehrbar.

Ein Timer ist bei fast allen Anwendungen unverzichtbar, also kann man 
ihn sehr gut verwenden zur Abfrage von Tastaturen, Encodern und 
natürlich auch zu Ausgaben auf Displays oder LEDs.

Wer anders programmieren will, der kann es gerne tun.

Nehmt die Ideologie aus der und aus anderen Diskussionen.

Beitrag #6211612 wurde von einem Moderator gelöscht.
von Andreas B. (bitverdreher)


Lesenswert?

Matthias S. schrieb:
> Ich habe früher auch mal flankengesteuert ausgewertet, extra Routine
> fürs Entprellen des Drückerchens am Drehgeber geschrieben usw.

Ich gebe zu, ich auch. Nachdem das zwar anfangs mal funktionierte, ich 
dann einige Problem damit hatte, habe ich mich halt mal in das Thema 
reingelesen.
Dann halt auf o.g. Routine gestoßen, benutzt und zukünftig vergessen. Es 
gibt viele andere Dinge zu erforschen, da braucht es nicht das Rad zu 
sein.
Nur bin ich damals halt nicht auf die Idee gekommen, daß ich alles 
besser könnte als der Rest der Welt.

von H.Joachim S. (crazyhorse)


Lesenswert?

Andreas B. schrieb:
> Ich gebe zu, ich auch.

Hat wohl fast jeder so versucht. Sieht ja auch so verlockend aus auf den 
schematisierten Zeichnungen.

Beitrag #6211678 wurde von einem Moderator gelöscht.
Beitrag #6211689 wurde von einem Moderator gelöscht.
Beitrag #6211756 wurde von einem Moderator gelöscht.
von W.S. (Gast)


Lesenswert?

Thomas O. schrieb:
> So wie ich das sehe muss ich nur feststellen auf welchem Kanal die erste
> Flanke auftritt und schon habe ich Richtung ich führe dann einen Schritt
> in diese Richtung aus.

Das siehst du aber ein bissel blauäugig.

Also: Der Knackpunkt des "allgemeinen Drehgebers" ist, daß es 2 Signale 
gibt, die phasenversetzt sind. Deshalb kann man aus deren Änderungen 
nicht nur die Tatsache des Drehens, sondern auch der Richtung erkennen.

Schön, toll. Und nun?

In der Praxis geht es zumeist um handbetätgte Dinger, die einen 
Rastpunkt haben. Der kann mit dem Umschalten eines der 2 Kontakte 
zusammenfallen oder auch nicht. Hab beides schon gehabt, aber die 
Variante, wo Rastpunkt und Umschaltpunkt zusammenfallen, ist viel 
häufiger. Ist wahrscheinlich auch ne Frage des billigstmöglichen 
Fertigens.

Da man bei solchen Drehgebern ohnehin nur von Rastpunkt zu Rastpunkt 
drehen kann (und nicht zu Zwischenständen), ist es sinnlos, irgendwelche 
Zwischenstände überhaupt ermitteln zu wollen.

Also steht die Aufgabe, eines der beiden Signale als Quasi-Takt und das 
andere als Quasi-Richtung auszuwählen und zumindest den "Takt" sauber zu 
entprellen. Natürlich nimmt man als Takt dasjenige Signal, was am 
weitesten vom Rastpunkt aus gesehen umschaltet - eben um das Entprellen 
möglichst gut zu erleichtern.

Und hier setzen die fanatischen Streitereien ein: Es gibt ne Fraktion, 
die lauthals "POLLING" schreit und jeden Andersdenkenden verteufelt - 
und es gibt deren exaktes Gegenteil in der Interupt-Fraktion.

Fakt ist: zum exakten Funktionieren gehört ein ebenso exaktes Entprellen 
- egal wie man das anstellt. Die Polling-Fraktion setzt auf digitales 
Entprellen durch Überabtastung usw. - und die Interrupt-Fraktion setzt 
auf analoges Entprellen per RC-Schaltung. Das eine erfordert Rechenzeit 
und das andere ein paar passive BE.

Nun kannst du dir selber aussuchen, zu welcher Frakton du dich gesellen 
willst. Ich gehöre zur Interrupt-Fraktion und z.B. MaWin zu den Pollern.

Ach ja: sobald man die zuverlässig entprellten Zustände vorliegen hat, 
ergibt sich die Richtung aus dem Zustand des Signals, was im Rastpunkt 
sich ändert - und zwar zu dem Zeitpunkt, wo das andere Signal (der 
"Takt") sich gerade geändert hat. Ein XOR beider Signale direkt nach 
dem Umschalten des "Taktes" liefert die Richtungsangabe.

So, der Rest des Threads gehört den Streitsüchtigen

W.S.

von Andreas B. (bitverdreher)


Lesenswert?

W.S. schrieb:
> Das eine erfordert Rechenzeit
> und das andere ein paar passive BE.

Das war die Steilvorlage:
Erstens verbraucht die Polling Methode nicht mehr Rechenzeit. Nicht 
zuletzt, weil man i.A. sowieso irgendeinen Timer laufen läßt. Jedenfalls 
dann, wenn man Statemaschinen laufen läßt. Über die Programmierung mit 
den unsäglichen Waits der Arduinofraktion lasse ich mich jetzt mal nicht 
aus.
Selbst wenn man im Durchschnitt mehr Rechenzeit bräuchte, spielt das 
keine Rolle, weil nicht die Durchschnittsrechenzeit entscheidend ist, 
sondern der worst case.

Und nun: Feuer frei. ;-)

Beitrag #6212103 wurde von einem Moderator gelöscht.
von Michael B. (laberkopp)


Lesenswert?

W.S. schrieb:
> Also steht die Aufgabe, eines der beiden Signale als Quasi-Takt und das
> andere als Quasi-Richtung auszuwählen und zumindest den "Takt" sauber zu
> entprellen.

Nein.

Man muss gar nicht entprellen.
Du hast also was Grundsätzliches grundsätzlich nicht verstanden.

Wer nicht entprellen muss, muss sich auch keine Gedanken über die 
mögliche Prellzeit machen, in der seine Routine 'blind' für weitere 
Impulse wäre, was die maximal erfassbare Geschwindigkeit unnötig 
begrenzt.

Beitrag #6212122 wurde von einem Moderator gelöscht.
von Teo D. (teoderix)


Lesenswert?

Michael B. schrieb:
> Man muss gar nicht entprellen.
> Du hast also was Grundsätzliches grundsätzlich nicht verstanden.

Und wenn ein Kontakt, nicht nur beim Umschalten prellt, sondern beim 
Schleifen kratzt... Während der Andere Prellt?

von Klaus (Gast)


Lesenswert?

W.S. schrieb:
> analoges Entprellen per RC-Schaltung

Wer als Entwickler in einer digitalen Schaltung RC-Glieder zum Timing 
einsetzt, bittet darum, in die Konzern-Logistik versetzt zu werden. Er 
hat damit gezeigt, daß er für moderne Lösungen wie FPGAs nicht 
qualifiziert ist.

MfG Klaus

Beitrag #6212205 wurde von einem Moderator gelöscht.
von Günter Lenz (Gast)


Lesenswert?

W.S. schrieb:
>Ich gehöre zur Interrupt-Fraktion

Es gibt ja mehrere Interrupt-Varianten.

 Low-Pegel am INT-Pin löst Interrupt aus
 Jeder logische Wechsel am INT1-Pin löst Interrupt aus
 Eine fallende Flanke am INT-Pin löst Interrupt aus
 Eine steigende Flanke am INT-Pin löst Interrupt aus

Welche Variante benutzt du dafür?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Jaja, da kommt W.S. und schüttet wieder Benzin ins Feuer und prompt geht 
es weiter...
Hier wird keiner den anderen bekehren können - jeder 
Missionierungsversuch ist vergeblich. Also lasst doch jedem die Facon, 
nach der er seelig wird.

von Rainer V. (a_zip)


Lesenswert?

Matthias S. schrieb:
> Also lasst doch jedem die Facon,
> nach der er seelig wird.

Aber der TO soll doch glücklich werden! Das ist mehr als "lasst doch 
jedem" :-)
Gruß Rainer

von Simpel (Gast)


Lesenswert?

Ein aufschluss- und lehrreicher Auswuchs zum Thema Decoder-Algo, war 
damals dieser zum "Wer hat den schnellsten..?" mutierte 
Assembler-Thread...

Beitrag "Re: Versetzte Rechtecksignale auswerten, kein drehgeber"

von batman (Gast)


Lesenswert?

W.S. schrieb:
> Die Polling-Fraktion setzt auf digitales
> Entprellen durch Überabtastung usw.

Tatsächlich gehörst du zu der "ich habs nicht verstanden"-Fraktion, 
welche typischerweise auf diesem Irrweg landet.

W.S. schrieb:
> Ich gehöre zur Interrupt-Fraktion

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Wenn man meint der größte Stuss wurde schon geschrieben und dann kommt 
W.S.!

Interruptgedöhns und HW enprellung funktioniert spätestens dann nicht 
wenn man eine Matrix aus Drehgebern braucht.
Denn dann brauchts eh polling und durchschalten der Spalten.
Eine Tastenmatrix lässt sich dann auch gleich im selben Abwasch 
abhandeln.
So geschenen bei einem RGB Mischpult Projekt mit 8 Drehgebern.


Da es noch nicht genannt wurde:
Diverse µCs (wie zB viele STM32) haben direkt Hardware eingebaut um 
Drehencoder einzulesen ohne großes hickhack.
Bei den STM32 haben das einige der Timer mit 2+ Capture Eingängen.

von Uwe G. (scd)


Lesenswert?

Mw E. schrieb:
> Diverse µCs (wie zB viele STM32) haben direkt Hardware eingebaut um
> Drehencoder einzulesen ohne großes hickhack.

Ergänzend: der STM8S003 kann das auch. ( ein Timer mit entsprechenden 
Eingängen). Klappt wunderbar ohne jede CPU-Last, mal abgesehen vom 
Auslesen des Timerregisters.

Beitrag #6212394 wurde von einem Moderator gelöscht.
Beitrag #6212740 wurde von einem Moderator gelöscht.
von Andreas B. (bitverdreher)


Lesenswert?

VorzeichenLoser schrieb im Beitrag #6212740:
> Bitte: Wer o.g. Text verstanden hat, der möge ihn mit seinen Worten
> erneut hier posten.

Du stehst auf der Leitung: Das (nicht ausreichend) und vieles mehr steht 
im mehrfach o.a. Artikel.
Aber hier scheinen ja 50% zu faul zum lesen zu sein....
Niemand hat Lust das hier zu wiederholen.

von MaWin (Gast)


Lesenswert?

Günter Lenz schrieb:
> Welche Variante benutzt du dafür?

Hoffentlich die des Timer-Interrupts.

VorzeichenLoser schrieb im Beitrag #6212740:
> Telegrammstil wegen Zensur

Ich habe den Eindruck, daß hier nicht wegen off-topic und Beleidigung, 
sondern weil ein- und Derselbe unter mehreren Namen sich und seine Idee 
hochjubeln will, gelöscht wird. Denn so viele Doofe wie hier auf ein Mal 
auftraten kann es gar nicht geben.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

MaWin schrieb:
> sondern weil ein- und Derselbe unter mehreren Namen sich und seine Idee
> hochjubeln will

Insbesondere hat er Hausverbot.

Beitrag #6212941 wurde von einem Moderator gelöscht.
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.