Hallo,
Ich habe ein Problem damit, meinen STEC12E08 Drehencoder auszuwerten.
Ich habe ein ESP32 Board und Programmiere mit der Arduino IDE.
Ich habe schon einige Libraries ausprobiert, jedoch scheint keine
richtig zu funktionieren. Die bisher am Vielversprechenste ist diese
hier: https://github.com/igorantolic/ai-esp32-rotary-encoder
Jedoch wird bei mir immer nur zwischen zwei Werten gependelt, wenn ich
das Beispielprogramm der Library auf das ESP32 lade.
Ich habe auch einen Blick in diesen Artikel zu Drehencodern geworfen:
https://www.mikrocontroller.net/articles/Drehgeber
Hierbei ist mir nicht ganz klar wie beim letzten C-Code Beispiel die
Tabelle zustande kommt.
Mit einem Blick in den Code der oben angegebenen Library habe ich
festgestellt, dass auch diese mit einer Tabelle arbeitet. Der Versuch,
die Tabelle nach dem Artikel umzuändern schlug jedoch fehl, auch nachdem
ich alle 1 und -1 vertauschte.
Außerdem habe ich auch bereits (erfolglos) versucht, die Pins A und B
beim initialisieren des Encoders zu vertauschen.
Wie könnte ich mein Problem lösen?
Mfg
Julian L. schrieb:> Ich habe ein Problem damit, meinen STEC12E08 Drehencoder auszuwerten.> Ich habe ein ESP32 Board und Programmiere mit der Arduino IDE.
Alles klar. Hauptsache nicht selber denken müssen. Der Arduino-Schrott
verspricht dir das, kann dieses Versprechen aber nicht wirklich halten.
Ist im Prinzip genau so, wie den Senioren versprochen wird, dass sie auf
Kaffee-Fahrten nur gewinnen können...
> Wie könnte ich mein Problem lösen?
Lerne DENKEN, ersetze den Encoder. Oder passe zumindest die
Konfiguration der Lib an die tatsächlichen Fähigkeiten des Encoders an.
Beides führt letztlich zum Ziel.
Der Kernpunkt ist: SELBER DENKEN rules. Auch wenn immer wieder mal wer
verspricht, dass es auch ohne dies geht. Immer genau dann sollte man
sogar besonders vorsichtig werden... Erwachsenen, die noch nicht an
Demenz leiden, sollte man sowas eigentlich auch nicht extra erklären
müssen...
Julian L. schrieb:> Ich habe ein Problem damit, meinen STEC12E08 Drehencoder auszuwerten.> Ich habe ein ESP32 Board und Programmiere mit der Arduino IDE.
Wie hast du ihn GENAU angeschlossen? Hast du externe oder interne
Puul-Up widerstände drin?
> Jedoch wird bei mir immer nur zwischen zwei Werten gependelt, wenn ich> das Beispielprogramm der Library auf das ESP32 lade.
Das könnte ein Fehler beim Anschluß sein. Entweder fehlende Pull-Up
Widerstände oder du hast Masse (COM) mit einem der Kanäle A oder B
vertauscht, dann gibt es so einen Effekt.
> Hierbei ist mir nicht ganz klar wie beim letzten C-Code Beispiel die> Tabelle zustande kommt.
Durch die Auswertung der Codefolge beim Gray-Code.
> festgestellt, dass auch diese mit einer Tabelle arbeitet. Der Versuch,> die Tabelle nach dem Artikel umzuändern schlug jedoch fehl, auch nachdem> ich alle 1 und -1 vertauschte.
Ist Unsinn. Der Code funktioniert, der Fehler liegt in deinem Aufbau.
> Außerdem habe ich auch bereits (erfolglos) versucht, die Pins A und B> beim initialisieren des Encoders zu vertauschen.>> Wie könnte ich mein Problem lösen?
Mit einer systematischen Fehlersuche. Gib mal den Zustand deiner
beiden Eingänge auf zwei andere Ausgänge mit LEDs aus. Halte den Encoder
mit den Fingern sehr fest und drehe langsam. Dann musst du das bekannte
Muster auf den LEDs sehen, das jeder Cray-Code macht.
https://www.mikrocontroller.net/articles/Drehgeber#Funktion
Sprich
A geht auf HIGH
B geht auf HIGH
A geht auf LOW
B geht auf LOW
Und wieder von vorn. Oder das Ganze rückwärts. Wenn das nicht so ist,
stimmt was mit der Verdrahtung nicht.
Julian L. schrieb:> Ich habe schon einige Libraries ausprobiert, jedoch scheint keine> richtig zu funktionieren.
Trial & Error
Dir ist schon klar, dass die Rastung von dem Teil unspezifisch nahe bei
den Flanken des B-Kanals liegt? Der Algorithmus muss dazu passen.
Falk B. schrieb:> Wie hast du ihn GENAU angeschlossen? Hast du externe oder interne> Pull-Up widerstände drin?
Ich habe externe Pull-Up Widerstände verwendet. Außerdem habe ich wie
empfohlen noch einen Kondensator eingebaut um beim Entprellen zu helfen.
Falk B. schrieb:> Das könnte ein Fehler beim Anschluß sein. Entweder fehlende Pull-Up> Widerstände oder du hast Masse (COM) mit einem der Kanäle A oder B> vertauscht, dann gibt es so einen Effekt.
Die Verdrahtung habe ich schon überprüft, daran scheint es nicht zu
liegen.
Falk B. schrieb:> Durch die Auswertung der Codefolge beim Gray-Code.
Ah, okay. Danke.
Falk B. schrieb:> Ist Unsinn. Der Code funktioniert, der Fehler liegt in deinem Aufbau.
Hatte ich mir gedacht, wollte es dennoch nicht unprobiert lassen.
Falk B. schrieb:> Gib mal den Zustand deiner> beiden Eingänge auf zwei andere Ausgänge mit LEDs aus. Halte den Encoder> mit den Fingern sehr fest und drehe langsam.
Ich schaue mal, ob ich kurz zwei LEDs auftreiben kann.
Danke für die Hilfe!
Falk B. schrieb:> Gib mal den Zustand deiner> beiden Eingänge auf zwei andere Ausgänge mit LEDs aus. Halte den Encoder> mit den Fingern sehr fest und drehe langsam. Dann musst du das bekannte> Muster auf den LEDs sehen, das jeder Cray-Code macht.
Ich habe mal zwei LEDs direkt angeschlossen und ein sehr unerwartetes
Muster bekommen:
A HIGH; B LOW
Halfstep
A LOW; B LOW
Halfstep
A HIGH; B LOW
Halfstep
A LOW; B LOW
Muss wohl doch die Verdrahtung nochmal SEHR GENAU unter die Lupe nehmen.
Julian L. schrieb:> Falk B. schrieb:>> Wie hast du ihn GENAU angeschlossen? Hast du externe oder interne>> Pull-Up widerstände drin?>> Ich habe externe Pull-Up Widerstände verwendet. Außerdem habe ich wie> empfohlen noch einen Kondensator eingebaut um beim Entprellen zu helfen.
Wenn Du die Signale A und B regelmässig pollst so im Bereich 1...2ms und
in einer kleinen State-Maschine die Signale auswertest, dann braucht es
keine Entprellung in Hardware und funktioniert einwandfrei.
Eine Library kannst Du Dir sparen, da wir hier von einem Code in der
Grössenordnung von ca. 5...10 Zeilen reden.
Julian L. schrieb:> Falk B. schrieb:>> Wie hast du ihn GENAU angeschlossen? Hast du externe oder interne>> Pull-Up widerstände drin?>> Ich habe externe Pull-Up Widerstände verwendet. Außerdem habe ich wie> empfohlen noch einen Kondensator eingebaut um beim Entprellen zu helfen.
FALSCH! Denn damit schließen deine Kontakte im Drehgeber immer die voll
geladenen Kondensatoren kurz, das erzeugt sinnlosen Verschleiß. Wenn
schon Entprellen, dann richtig! Da muß ein Längswiderstand rein, so wie
hier.
https://www.mikrocontroller.net/articles/Entprellung#Einfacher_Taster
Das ist aber bei einem Drehgeber meistens nicht nötig, der Gray-Dekoder
macht das automatisch. Nur in ganz schweren Fällen ist das nötig, dann
ist aber meist der Drehgeber Schrott.
Falk B. schrieb:> Da muß ein Längswiderstand rein, so wie> hier.
Genau so habe ich das auch angeschlossen, tut mir Leid wenn ich mich
ungenau ausgedrückt habe.
Ich habe auch nochmal die Verdrahtung unter die Lupe genommen, und es
scheint hier keine Probleme zu geben.
Falk B. schrieb:> Das ist aber bei einem Drehgeber meistens nicht nötig, der Gray-Dekoder> macht das automatisch. Nur in ganz schweren Fällen ist das nötig, dann> ist aber meist der Drehgeber Schrott.
Also sollte ich es mal ohne Kondensator probieren? Im Datenblatt des
Drehgebers sind Kondensatoren empfohlen, daher hatte ich sie mit dran
gemacht.
Julian L. schrieb:> Ich habe auch nochmal die Verdrahtung unter die Lupe genommen, und es> scheint hier keine Probleme zu geben.
Aber deine Codefolge stimmt nicht.
> Also sollte ich es mal ohne Kondensator probieren?
Nein, das ist schon OK. Wie groß sind denn deine Kondensatoren?
Möglicherweise ist dein Drehgeber kaputt.
Falk B. schrieb:> Wie groß sind denn deine Kondensatoren?
0.01µF
Falk B. schrieb:> Möglicherweise ist dein Drehgeber kaputt.
Wäre nicht das erste Mal, dass ich kaputte Bauteile bekommen habe
Falk B. schrieb:> Aber deine Codefolge stimmt nicht.
Du meinst die Beobachtete oder die ich im tatsächlichen Code stehen
habe?
So oder so muss ich dir zustimmen. Die im Code werde ich aber noch
beheben bevor ich den wieder nutze.
Julian L. schrieb:> Falk B. schrieb:>> Wie groß sind denn deine Kondensatoren?>> 0.01µF
Aka 10nF, ist OK, wenn gleich sehr klein.
>> Möglicherweise ist dein Drehgeber kaputt.>> Wäre nicht das erste Mal, dass ich kaputte Bauteile bekommen habe
In welchem Ramschladen kaufst du denn?
> Du meinst die Beobachtete
Diese.
>oder die ich im tatsächlichen Code stehen> habe?
Woher soll ich das wissen, ich kenne die ja nicht.