Ich habe einen Drehgeber mit Rasterung (wie diese hier
https://www.amazon.de/dp/B07CMSHWV6)
Bei Rasterung sind beide Ausgänge logisch '1'.
Jetzt habe ich einmal selber einen Algorithmus geschrieben der perfekt
funktioniert (Code siehe unten) und nur einen Zählerimpuls liefert wenn
ich auf eine Rasterposition gehe, was alle vier Schritte ist. Dies habe
ich aber etwas umständlich über einen Switch mit 4 Cases und weiteren
if-Abfragen gelöst.
Hier ist ein etwas elegantere Code:
https://www.mikrocontroller.net/articles/Drehgeber
Der zwar beim Hochzählen gut funktioniert, nur beim runterzählen zählt
er sofort wenn ich die Rasterung verlasse und nicht erst wenn ich die
nächste Rasterung erreiche, so das er zwischen zwei Rasterstufen
wackelt.
Ich hoffe das kann man im angehängten Video gut nachvollziehen.
Oben die beiden Inputsignale
Mitte mein Code
Unten der von dieser Seite
Bekommt man dieses Ergebnis vielleicht auch mit einfachen arithmetischen
Operationen hin, ohne dies Klotz aus if-eleses?
dingens einlesen; // ABER bitte nur EINMAL den Port auslesen!
PS: if(last == current) { return;}
if (current == 3) {counterDelta += 1 - last}
last = current;
Christian K. schrieb:> Bekommt man dieses Ergebnis vielleicht auch mit einfachen arithmetischen> Operationen hin, ohne dies Klotz aus if-eleses?
Ich habe mit ca. sowas gute Erfahrung gemacht, ist auf jeden Fall klarer
was passiert:
https://github.com/mathertel/RotaryEncoder
(Arduino, aber einfach zu uebersetze)
leo
Christian K. schrieb:> Jetzt habe ich einmal selber einen Algorithmus geschrieben der perfekt> funktioniert
Na dann ist ja gut, aber warum das Rad neu erfinden, es gibt schon
besseren code:
Am einfachsten realisiert man das mit einer state machine als Tabelle.
In C sieht das so aus.
int table[4][4]={{0,1,0,0},{-0,0,0,0},{0,0,0,-1},{0,0,0,0}};
int position=0; // zaehlen wir mal die absolute Position
volatile int quadrature_input; // bit 0 und bit 1 sind
Quadratureingaenge
int new_quadrature_value, last_quadrature_value=quadrature_input;
Folgenden Code ausreichend oft wiederholen (in der Programm Hauptscheife
oder einer Zeitgeber gesteuerten Interrupt Routine):
new_quadrature_value=quadrature_input;
position+=table[last_quadrature_value][new_quadrature_value];
last_quadrature_value=new_quadrature_value;
angepasst an deine Encoder aus:
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29
Christian K. schrieb:> Ich habe einen Drehgeber mit Rasterung (wie diese hier> https://www.amazon.de/dp/B07CMSHWV6)> Jetzt habe ich einmal selber einen Algorithmus geschrieben der perfekt> funktioniert
Wie hast du diese "Perfektion" nachgewiesen?
(Code siehe unten) und nur einen Zählerimpuls liefert wenn
> ich auf eine Rasterposition gehe, was alle vier Schritte ist. Dies habe> ich aber etwas umständlich über einen Switch mit 4 Cases und weiteren> if-Abfragen gelöst.>> Hier ist ein etwas elegantere Code:> https://www.mikrocontroller.net/articles/Drehgeber
Der auch sehr gut funktioniert.
> Der zwar beim Hochzählen gut funktioniert, nur beim runterzählen zählt> er sofort wenn ich die Rasterung verlasse und nicht erst wenn ich die> nächste Rasterung erreiche, so das er zwischen zwei Rasterstufen> wackelt.
Den muss man mit einem Trick initialisieren. Nämlich so, daß beim
Einschalten die aktuellen Werte der Kanäle A und B eingelesen werden,
der interne Zähler aber auf 1 oder 2 initialisiert wird.
Sprich, in der Funktion encode_init() muss rein
enc_delta = 2;
> uint8 current = ((a) ? b10 : b00) + ((b) ? b01 : b00);
So einen Käse sollte man lassen, der ? operator ist bestenfalls was für
Macros oder Hackertricks.
Ein normales i() ist übersichtlicher und am Ende ebenso effizienter
Maschinencode.
>> if(last == current) {> return;> }
Wozu? Das Thema wurde ja nun schon seit JAHRZEHNTEN durchgekaut, ich
glaube nicht, daß es da noch einen algorithmischen Durchbruch gibt.
Entweder die kryptische, wenn gleich effiziente Variante von Peter D. im
Artikel oder der Klassiker mit Tabelle.
>> switch (last) {> case b11:> if (current == b10) {> dir = 1;> } else if (current == b01) {> dir = -1;> } else {> dir = 0;> }
Diesen ganzen Käse hat man schon damals als solchen erkannt und in eine
Tabelle gepackt. Diese Variante findet man auch im Artikel
Drehgeber.
Christian K. schrieb:> Bekommt man dieses Ergebnis vielleicht auch mit einfachen arithmetischen> Operationen hin, ohne dies Klotz aus if-eleses?
Ja - indem du die Hardware deines µC benutzt. Konkret: indem du dir den
Kontakt deines DG heraussuchst, der am weitesten entfernt von den
Rastungen seinen Zustand ändert, und den führst du an ein Port-Pin, das
du so programmieren kannst, daß es auf Zustandswechsel (also sowohl
H-->L als auch L-->H) einen Interupt auslöst.
Daß du dieses Signal mit einem Kondensator (üblich etwa 22nF) glättest
und dabei entprellst, sollte klar sein.
Und in der ISR brauchst du dann bloß:
W.S. schrieb:> und den führst du an ein Port-Pin, das du so programmieren kannst,> daß es auf Zustandswechsel (also sowohl H-->L als auch L-->H)> einen Interupt auslöst.
Besser: Du nimmst einen Timer, der alle paar Millisekunden einen
Interrupt auslöst. In dessen ISR liest du dann die Pins ein und wenn
sich deren Zustand ändert, reagierst du darauf.
Noch besser: Du nimmst die Quadraturdecoder-Hardware deines
Mikrocontrollers, sofern vorhanden. Dann bist du sämtliche Probleme los.
Teo D. schrieb:> dingens einlesen; // ABER bitte nur EINMAL den Port auslesen!> PS: if(last == current) { return;}> if (current == 3) {counterDelta += 1 - last}> last = current;
Upps, falschen Code decodiert. :))
dingens einlesen; // ABER bitte nur EINMAL den Port auslesen!
if(last == current) { return;}
if (current == 3) {
// if (last==0) "ERROR ERROR - Please help ME!!!" <-?!
if(last==1) counterDelta++; else counterDelta--;
}
last = current;
W.S. schrieb:> Ja - indem du die Hardware deines µC benutzt. Konkret: indem du dir den> Kontakt deines DG heraussuchst, der am weitesten entfernt von den> Rastungen seinen Zustand ändert, und den führst du an ein Port-Pin, das> du so programmieren kannst, daß es auf Zustandswechsel (also sowohl> H-->L als auch L-->H) einen Interupt auslöst.
NICHT SCHON WIEDER DIE ALTE LEIER! DAS IST UNSINN!
W.S. schrieb:> Und in der ISR brauchst du dann bloß:bool A, B; // die Zustände der> beiden DG-Signale>> A = Zustand Port-Pin von DG-A> B = Zustand Port-Pin von DG-B> if (A ^ B)> AddEvent(idDrehRechts);> else> AddEvent(idDrehLinks);> // das war's.
Das funktioniert nur nicht, da egal in welche Richtung ich drehe immer
auf gleichen Pegel ungleicher Pegel folgt und auf ungleiche Pegel
gleicher Pegel.
W.S. schrieb:> nd den führst du an ein Port-Pin, das du so programmieren kannst, daß es> auf Zustandswechsel (also sowohl H-->L als auch L-->H) einen Interupt> auslöst.
Man kann quasi drauf warten, in jedem Drehgeber thread kommt so ein
grober Unsinnn, zumindest EINER hat in seinem Leben bis heute nicht
begriffen, dass man unentprellte Kontakte niemals auf einen
Interrupt-Pin gebrn darf.
Und an statt dass dieser Unwissende sein Wissen mal durch Lesen von
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29 oder
https://www.mikrocontroller.net/articles/Drehgeber ausgebügelt hätte,
posaunt er es hier in grossen Worten hinaus, damit auch jeder erfährt
welche groben Fehler er macht.
Martin schrieb:> Das funktioniert nur nicht, da egal in welche Richtung ich drehe immer> auf gleichen Pegel ungleicher Pegel folgt und auf ungleiche Pegel> gleicher Pegel.Falk B. schrieb:> W.S. schrieb:>> Ja - indem du die Hardware deines µC benutzt. Konkret: indem du dir den>> Kontakt deines DG heraussuchst, der am weitesten entfernt von den>> Rastungen seinen Zustand ändert, und den führst du an ein Port-Pin, das>> du so programmieren kannst, daß es auf Zustandswechsel (also sowohl>> H-->L als auch L-->H) einen Interupt auslöst.>> NICHT SCHON WIEDER DIE ALTE LEIER! DAS IST UNSINN!
Unnsinn ? Schon mal ausprobiert?
Das geht schon, vorausgesetzt man nimmt den richtigen ENCODER.
Seht euch mal die Datenblätter von ALPS die EC11 Serie an,
mit ein bisschen Guggi Luggi findet man das raus.
Die Ausage von W.S. stimmt und ist kein Unsinn! geht aber nicht mit
jeden ENCODER.
il Conte schrieb:> Die Ausage von W.S. stimmt und ist kein Unsinn! geht aber nicht mit> jeden ENCODER.
Das Problem ist aber, dass W.S. seine Aussage als allgemeingültig
hinstellt. Und das ist falsch. Korrekterweise hätte er den konkreten Typ
des Drehgebers angeben müssen, wo es funktioniert. Aber solche
Spezialfälle helfen im allgemeinen dem TO nicht weiter.
SaschaFries schrieb:> Man braucht ja auch keinen Interrupt und keine Entprellung. Man muss nur> öfters die Zustände abfragen als die maximale Drehgeschwindigkeit.
Aha, haste dein erste Arduino-Programmle ans laufen gebracht?
Genau so kommt das rüber :-(
il Conte schrieb:>> NICHT SCHON WIEDER DIE ALTE LEIER! DAS IST UNSINN!>> Unnsinn ? Schon mal ausprobiert?
Die Frage ist nicht, ob schon ausprobiert, sondern wie ausprobiert.
Es ist nämlich gar nicht so einfach zu prüfen, ob die Encoderauswertung
im Langzeitbetrieb nicht doch hin und wieder ein Inkrement verschluckt
oder zusätzlich generiert. Es ist jedenfalls nicht damit getan, den
Encoder ein paar mal ein paar Rasten erst nach rechts und dann wieder
nach links zu drehen und nachzuschauen, ob der Zähler dann wieder auf 0
steht.
> Das geht schon, vorausgesetzt man nimmt den richtigen ENCODER.> Seht euch mal die Datenblätter von ALPS die EC11 Serie an,> mit ein bisschen Guggi Luggi findet man das raus.
Was genau zeichnet die EC11-Serie diesbezüglich gegenüber anderen
Encodern aus? Er ist mechanisch, damit prellt er. Der Hersteller gibt
die Prellzeit wir folgt an:
1
At R=5kΩ Chattering: 2ms max. Bounce: 2ms max.
W.S. schreibt zwar etwas von einem 22nF-Kondensator zur Entprellung, was
aber je nach Pull-Up-Widerstand und Hysteresespannung der µC-Eingänge um
eine bis zwei Größenordnungen zu wenig ist. Macht man ihn aber deutlich
größer, wird die Auswertung entsprechend langsam, was erneut zum
Verschlucken von Inkrementen führt.
Natürlich kann man auf Hardwareseite mehr Aufwand in die Entprellung
stecken, um das Problem zuverlässig zu lösen, aber wozu? Nur um ein paar
Bytes Programmspeicher und ein paar Promille CPU-Leistung bei inaktivem
Encoder einzusparen?
Rein theoretisch könnte man sich noch eine Kombination von Interrupt und
Polling vorstellen, die einerseits immun gegenüber dem Prellen ist und
andererseits bei inaktivem Encoder keine CPU-Zeit verbraucht. Wer aber
schon Schwierigkeit damit hat, eine klassische Encoderauswertung sauber
zu implementieren, sollte mit so etwas gar nicht erst anfangen.
Yalu X. schrieb:> W.S. schreibt zwar etwas von einem 22nF-Kondensator zur Entprellung, was> aber je nach Pull-Up-Widerstand und Hysteresespannung der µC-Eingänge um> eine bis zwei Größenordnungen zu wenig ist.
Nicht nur das. Auch das DIREKTE anschließen von einem Kondensator, egal
ob 1 oder 22nF an die Encoderausgänge ist ein Fehler! Denn dabei
schließt der Schalter im Encoder periodisch einen geladenen Kondensator
ohne Strombegrenzung kurz! Das erzeugt ordentlich Kontaktverschleiß!
Wenn schon, dann ein gescheiter RC-Tiefpaß mit dem Pull-Up an der
richtigen Stelle.
https://www.mikrocontroller.net/articles/Entprellung#Einfacher_Taster
Aber auch damit ist die Flankenauswertung per Interrupt NICHT solide!
Aber das haben wir schon mehrfach bis zum Erbrechen diskutiert. Klar,
einige WOLLEN es nicht verstehen, das Dogma läßt grüßen!
https://de.wikipedia.org/wiki/Dogma> stecken, um das Problem zuverlässig zu lösen, aber wozu? Nur um ein paar> Bytes Programmspeicher und ein paar Promille CPU-Leistung bei inaktivem> Encoder einzusparen?
Eben!
Es ist ja auch nicht so, das die Timerroutine den Timer vollständig
belegt und er damit für andere Zwecke ausfällt.
Ich kombiniere öfter mal Drehgeber- und Tastenentprellung und nebenbei
ist der gleiche Timer auch noch der Ticker für irgendwelche
Zeitaufgaben.
Koste' fast gar nix.
Falk B. schrieb:> Nicht nur das. Auch das DIREKTE anschließen von einem Kondensator, egal> ob 1 oder 22nF an die Encoderausgänge ist ein Fehler! Denn dabei> schließt der Schalter im Encoder periodisch einen geladenen Kondensator> ohne Strombegrenzung kurz! Das erzeugt ordentlich Kontaktverschleiß!> Wenn schon, dann ein gescheiter RC-Tiefpaß mit dem Pull-Up an der> richtigen Stelle.
Jetzt ziehst du aber die Dinge an den Haaren herbei :-(
Das ist eigentlich selbsredend das man den Eingängen ein 'RC-Tiefpass'
verpasst.
Das traue ich sogar dem W.S. zu (der denkt halt schneller als er
schreibt)
Falk B. schrieb:> Aber auch damit ist die Flankenauswertung per Interrupt NICHT solide!> Aber das haben wir schon mehrfach bis zum Erbrechen diskutiert. Klar,> einige WOLLEN es nicht verstehen, das Dogma läßt grüßen!
Dann erklär mir warum unsere verbauten ENCODER genau mit dieser Methode
bei unseren Kunden problemlos funktionieren?
Ich hab das mal kurz überschlagen: Es kommen da ungefähr 15000000 (15
Millionen) Inkremente pro Jahr zusammen.
Man muss sich das mal vor Augen führen und das mit dieser
unzuverlässigen, unsolieden Flankenauswertung :-)
Ich gebe zu, man muss halt mit Verstand an die Sache rangehen und sich
damit auseinander setzen.
Falk B. schrieb:> Yalu X. schrieb:>>> W.S. schreibt zwar etwas von einem 22nF-Kondensator zur Entprellung, was>> aber je nach Pull-Up-Widerstand und Hysteresespannung der µC-Eingänge um>> eine bis zwei Größenordnungen zu wenig ist.>> Nicht nur das. Auch das DIREKTE anschließen von einem Kondensator, egal> ob 1 oder 22nF an die Encoderausgänge ist ein Fehler! Denn dabei> schließt der Schalter im Encoder periodisch einen geladenen Kondensator> ohne Strombegrenzung kurz! Das erzeugt ordentlich Kontaktverschleiß!> Wenn schon, dann ein gescheiter RC-Tiefpaß mit dem Pull-Up an der> richtigen Stelle.
Oder man macht genau das mit Absicht um die Kontakte vor Oxidation zu
schützen. (Stichwort "Frittspannung" / engl. "wetting current"). Angaben
im Datenblatt des Herstellers sollte man natürlich beachten.
il Conte schrieb:> Dann erklär mir warum unsere verbauten ENCODER genau mit dieser Methode> bei unseren Kunden problemlos funktionieren?
Glauben die Hersteller und die Kunden ärgern sih.
Ich habe auch ein Autoradio das im Inrementalencoder sichtbar falsch
zählt, einen Funktionsgenerator dessen Incremental-Auswertung offenbar
euer Qualitätskriterium erfüllt und zickt, und höre von vielen Leuten
sie sich wundern, warum sie den Knopf schneller drehen können als die
angeblich so schnelle Elektronik ihm folgen kann.
Schrott ab Werk, von Entwicklern wie dir, die nicht mal die Grundlagen
beherrschen.
Yalu X. schrieb:> Es ist jedenfalls nicht damit getan, den> Encoder ein paar mal ein paar Rasten erst nach rechts und dann wieder> nach links zu drehen und nachzuschauen, ob der Zähler dann wieder auf 0> steht.
Wer redet vom Zähler ?
Im übrigen sollte das deine SW wissen wenn der Zähler wieder auf Null
steht.
Durch links und rechts drehen ? Auf so ne Idee muss man erst mal kommen
:-O
>Das ist eigentlich selbsredend das man den Eingängen ein 'RC-Tiefpass'>verpasst.
Wer einen uC für sich arbeiten läßt und die Kontakte versucht mechanisch
zu entprellen, nur weil er der Interrupt-Flanken-Glaubensgemeinschaft
anhängt, der macht doch was grundlegend falsch.
>> Man braucht ja auch keinen Interrupt und keine Entprellung. Man muss nur>> öfters die Zustände abfragen als die maximale Drehgeschwindigkeit.>Aha, haste dein erste Arduino-Programmle ans laufen gebracht?>Genau so kommt das rüber :-(
Wenn man die Auswertung über Zustände macht, so wie es auch im
Mikrocontroller-Artikel beschrieben ist, dann gibt es nur dann
Zählfehler, wenn man zwischen 2 Auswertungen ZWEI Schritte weiterzählt.
Das passiert aber bei Jittern an einer Flanke nicht.
Bei einer Abfrage in einer 1ms Task kannst Du also am Drehgebener mit
1000 Zustandsänderungen pro Sekunde arbeiten, also 250Hz wenn Du nur
einen Kanal A oder B betrachtets.
Ich habe bereits um 2005 ein Messgerät entwickelt, das einen Drehgeber
mit 900/3600 Pulse pro Umdrehung auswertet. Ca 4 Umdrehungen pro
Sekunde. Schneller Richtungswechsel. Es verzählt sich nie. PIC18 mit
5MHz Systemtakt.
il Conte schrieb:> Yalu X. schrieb:>> Es ist jedenfalls nicht damit getan, den>> Encoder ein paar mal ein paar Rasten erst nach rechts und dann wieder>> nach links zu drehen und nachzuschauen, ob der Zähler dann wieder auf 0>> steht.>> Wer redet vom Zähler ?
Werden bei euch die Impulse etwa nicht gezählt? Was macht ihr denn dann
mit den Encodersignalen?
> Im übrigen sollte das deine SW wissen wenn der Zähler wieder auf Null> steht.
Da verstehe ich den Zusammenhang mit dem von mir Geschriebenen nicht.
> Durch links und rechts drehen ? Auf so ne Idee muss man erst mal kommen> :-O
Dann erzähl doch mal, wie ihr die Encoderauswertung auf Zuverlässigkeit
prüft. Deine bisherigen Informationen vermitteln eher den Eindruck, dass
ihr sie ungetestet an den Kunden ausliefert und auf Reklamationen
wartet. Bleiben diese (aus welchen Gründen auch immer) aus, wird die
Auswertung als perfekt angesehen. Ich hoffe natürlich für dich und deine
Kunden, dass dieser Eindruck falsch ist.
Falk B. schrieb:> https://www.mikrocontroller.net/articles/Entprellung#Einfacher_Taster>> Aber auch damit ist die Flankenauswertung per Interrupt NICHT solide!
Man kann das schon solide hinbekommen, wenn man einen Schmitt-Trigger
mit ausreichend großer Hysterese¹ verwendet und die Zeitkonstante des
RC-Glieds passend zu dieser und zur maximalen Prellzeit des Encoders
dimensioniert. Da viele aber der Copy/Paste-Mentalität verfallen sind
und Nachdenken verlernt (oder gar nie gelernt) haben, wird dieser
wichtige Schritt oft unterlassen.
Aber auch richtig durchgeführt ist diese Entprellmethode nicht sehr
sinnvoll, denn
prellen schrieb:> Wer einen uC für sich arbeiten läßt und die Kontakte versucht mechanisch> zu entprellen, nur weil er der Interrupt-Flanken-Glaubensgemeinschaft> anhängt, der macht doch was grundlegend falsch.
(ersetze "mechanisch" durch "mechanisch oder elektrisch")
——————————————
¹) Die typischen µC-Eingänge erfüllen diese Kriterium nicht, weswegen
i.Allg. ein externer Schmitt-Trigger benötigt wird.
Yalu X. schrieb:> Dann erzähl doch mal, wie ihr die Encoderauswertung auf Zuverlässigkeit> prüft.
Was heißt Zuverlässigkeit?
Ich habe kein Problem damit, wenn er alle tausend Mal ein Inkrement
verschlampt.
Allerdings glaube ich nicht, dass da auch nur eines verloren geht.
Hätte das Wahrscheinlich bemerkt.
Für was verwendet ihr diese Encoder denn?
Ich verwende die eigentlich nur für die Bedienung am LCD Display.
Und da merkt man schnell, wenn mal ein Impuls fehlt.
Weil man ja mit der Zeit gar nicht mehr am Display guckt, sondern
gedanklich mit zählt.
> Dann erzähl doch mal, wie ihr die Encoderauswertung auf Zuverlässigkeit> prüft.
Geht ganz einfach: Es gibt 4 Zustände:
- nix
- hoch
- runter
- Fehler.
Fehler darf nie passieren. Den Fehler auszuwerten geht ganz einfach,
indem man in die Tabelle noch nen weiteren Wert einfügt, den man dann
auswerten kann.
Thomas W. schrieb:> Ich habe kein Problem damit, wenn er alle tausend Mal ein Inkrement> verschlampt.
Andere vielleicht schon. Außerdem ist damit zu rechnen, dass die
"tausend" mit der Alterung des Encoders allmählich gegen hundert oder
gar zehn tendieren. Was spricht also dagegen, ohne zusätzlichen Aufwand
dafür zu sorgen, dass auch dieses letzte Promille an verschluckten
Inkrementen der Vergangenheit angehört?
SaschaFries schrieb:>> Dann erzähl doch mal, wie ihr die Encoderauswertung auf Zuverlässigkeit>> prüft.> Geht ganz einfach: Es gibt 4 Zustände:> - nix> - hoch> - runter> - Fehler.
Dieser Fehler stellt einen von mehreren möglichen Fehlern dar. Ursache
dafür ist i.Allg. ein massiver Hardwaredefekt.
Die verschluckten Inkremente auf Grund von Prellen in Verbindung mit
einer ungeeigneten Interruptauswertung fallen jedoch in eine andere
Fehlerkategorie.
Yalu X. schrieb:> Was spricht also dagegen, ohne zusätzlichen Aufwand> dafür zu sorgen, dass auch dieses letzte Promille an verschluckten> Inkrementen der Vergangenheit angehört?
Die natürliche Renitenz der Leute, einzusehen daß die falsch liegen.
Yalu X. schrieb:> Werden bei euch die Impulse etwa nicht gezählt?
Nein - wir tun die nur begutachten:-)
Das zählen der Impulse in der SW ist komplett zweitrangig !
Es geht hier nur darum die Impulse die der Drehgebr liefert in den
allerwertesten uC zu bekommen und um nichts mehr.
Yalu X. schrieb:> Dann erzähl doch mal, wie ihr die Encoderauswertung auf Zuverlässigkeit> prüft. Deine bisherigen Informationen vermitteln eher den Eindruck, dass> ihr sie ungetestet an den Kunden ausliefert und auf Reklamationen> wartet. Bleiben diese (aus welchen Gründen auch immer) aus, wird die> Auswertung als perfekt angesehen. Ich hoffe natürlich für dich und deine> Kunden, dass dieser Eindruck falsch ist.
Es ist eigentlich noch viel schlimmer:
Ich hab mich seiner Zeit vor jeder Auslieferung so richtig in die Hosen
gemacht :-))
Mann o Mann!
il Conte schrieb:>> Wenn schon, dann ein gescheiter RC-Tiefpaß mit dem Pull-Up an der>> richtigen Stelle.>> Jetzt ziehst du aber die Dinge an den Haaren herbei :-(
Nö.
> Das ist eigentlich selbsredend das man den Eingängen ein 'RC-Tiefpass'> verpasst.
Das siehst DU so!
> Das traue ich sogar dem W.S. zu (der denkt halt schneller als er> schreibt)
Das ist gar nicht der Punkt, sondern unerfahrene Mitleser. Die werden
irritiert bzw. falsch informiert.
>> Aber auch damit ist die Flankenauswertung per Interrupt NICHT solide!>> Aber das haben wir schon mehrfach bis zum Erbrechen diskutiert. Klar,>> einige WOLLEN es nicht verstehen, das Dogma läßt grüßen!>> Dann erklär mir warum unsere verbauten ENCODER genau mit dieser Methode> bei unseren Kunden problemlos funktionieren?
Nur weil eine Sache unter bestimmten Bedingungen funktioniert, ist sie
noch lange nicht allgemeingültig und wasserdicht. Ich kann auch ohne
Helm Motorrad fahren und keinerlei Unfall erleiden. Kann sein, muss
nicht.
> Ich hab das mal kurz überschlagen: Es kommen da ungefähr 15000000 (15> Millionen) Inkremente pro Jahr zusammen.> Man muss sich das mal vor Augen führen und das mit dieser> unzuverlässigen, unsolieden Flankenauswertung :-)
Jaja, was wäre die Welt ohne hinkende Vergleiche . . .
> Ich gebe zu, man muss halt mit Verstand an die Sache rangehen und sich> damit auseinander setzen.
In der Tat . . .
Falk B. schrieb:> Ich kann auch ohne> Helm Motorrad fahren und keinerlei Unfall erleiden. Kann sein, muss> nicht.
Oder andersrum:
Ich kann auch mit aufgesetztem Helm zu Fuß durchs Dorf laufen,
Es könnte ja sein dass jemand sich aus dem Fenster lehnt und den
Nachttopf ausleert :-)
spess53 schrieb:> Ist das bei euch noch üblich?
Ja durchaus - z.B. wenn ein Jungmann die für ihn Auserwählte verschmät
hat.
Man muss wissen bei uns hier gibt es noch Hochzeitlader und man wird
verheiratet. Der Hochzeitslader ist so ne Art 'Anbantel Manager', wenn
der nichts taugt dann kann es eben zu solchen Vorfällen kommen ;-)
Übrigens gab es sowas in Schottland wirklich (Die Zeit vor dem
Spülklosett)
Da ging keiner ohne Regenschirm umher, die besseren Leute hatten sogar
einen 'Vorausgeher' der die Entsorger zur Zurückhaltung ermahnt hat.
Kein Scherz - das gab es wirklich!
il Conte schrieb:> Falk B. schrieb:>> Ich kann auch ohne>> Helm Motorrad fahren und keinerlei Unfall erleiden. Kann sein, muss>> nicht.>> Oder andersrum:> Ich kann auch mit aufgesetztem Helm zu Fuß durchs Dorf laufen,> Es könnte ja sein dass jemand sich aus dem Fenster lehnt und den> Nachttopf ausleert :-)
Warum dann also ein Signal glätten, das gar nicht glatt sein muß?
Weil der C-Helm so cool aussieht und
man nie sicher sein kann, das die Software sich nicht verrechnet?
S. R. schrieb:> Besser: Du nimmst einen Timer, der alle paar Millisekunden einen> Interrupt auslöst. In dessen ISR liest du dann die Pins ein und wenn> sich deren Zustand ändert, reagierst du darauf.
Überhaupt nicht besser, sondern schlechter. Man verplempert alle paar
Mikrosekunden Rechenzeit und ignoriert die ohnehin in der Peripherie
vorhandene Funktionalität. Die wird dann per Software ersetzt.
> Noch besser: Du nimmst die Quadraturdecoder-Hardware deines> Mikrocontrollers, sofern vorhanden. Dann bist du sämtliche Probleme los.
Das ist allerdings die beste Lösung - so man sie im Chip vorhanden hat
und sofern man nicht zu arrogant oder dämlich ist, die Drehgebersignale
rein analog zu entprellen.
W.S.
Martin schrieb:> Das funktioniert nur nicht, da egal in welche Richtung ich drehe immer> auf gleichen Pegel ungleicher Pegel folgt und auf ungleiche Pegel> gleicher Pegel.
Da die Signale regelmäßig um etwa 90 Grad versetzt sind, passiert genau
DAS nicht und alles funktioniert wie gewünscht. Kannste glauben, ich
weiß das mit 100% Gewissheit.
Mal dir einfach mal zwei um 90° versetzte Signale auf und mach dir klar,
wie das funktioniert.
W.S.
Schade, dass es soweit kommen mußte.
Hardware und Design von Software werden unerbitterlich im Glaubenskrieg
verteidigt. Agumente kommen zu kurz, oder werden als Blödsinn abgetan,
ohne widerlegt zu werden. Politik, Soziale Medien und nun auch
Elektrotechnik.
Dachte immer, grad hier wäre Physik und Mathematik massgebend. Aber
nein, der Glaube an selbstgeschaffene "Fakten" (die nicht mal belegt
werden) dominiert.
Willkommen alle in der neuen lernresistenten, bornierten Welt, der
lauten Argumente und des fehlenden Sachverstands.
Ich bedaure nur alle, die was lernen wollen und denen es dadurch schwer
gemacht wird. Grad die Unerfahrenen wissen bald nicht mehr wem sie
glauben sollen.
Vielleicht doch den Trumps dieser Welt? Auch wenn sie hier anders
heißen.
Martin schrieb:
> Das funktioniert nur nicht, da egal in welche Richtung ich drehe immer> auf gleichen Pegel ungleicher Pegel folgt und auf ungleiche Pegel> gleicher Pegel.
Klar: Nach Regen folgt Sonnenschein, darauf wieder Regen und dann wieder
Sonnenschein.
Du vergisst halt völlig, dass es zwei Signale sind. Da ist ein Bezug
zwischen den Signalen vorhanden, der dient zum Erkennen der Drehrichtung
und zur Vierfachauswertung.
schade schrieb:> Schade, dass es soweit kommen mußte.
Das kommt doch hier immer so. Deshalb kann man sich nur noch jeden Tag
von Neuem darüber be-ömmeln und seine eigenen Routinen verwenden. Dann
ist man niemandem Dank schuldig und muß sich nicht mit grossfressigen
Rechthabern auseinandersetzen.
Jahrelange Erfahrung mit diesem Forum lehrt das.
Yalu X. schrieb:> Was spricht also dagegen, ohne zusätzlichen Aufwand> dafür zu sorgen, dass auch dieses letzte Promille an> verschluckten Inkrementen der Vergangenheit angehört?
Die geplante Obsoleszenz.
schade schrieb:> Grad die Unerfahrenen wissen bald nicht mehr wem sie> glauben sollen.
Du hast es richtig erfasst: Genau deshalb gibt es diese unerbitterlichen
Glaubneskriege.
Was ich so im Geschichtsunterricht mitbekommen habe, ist das hier nicht
der erste Glaubenskrieg.
Stehst du schon im Arbeitsleben ? Da wird so einer wie du als Mobbing
Opfer auserkohren. Mach die lieber über sowas Gedanken als hier die
Forumswelt zu beglücken :-(
Dummschwätzer reden und labern ohne Hintergrund und si versuchen nur zu
provozieren.
Ich hab 30 Jahre lang Hard- und Software entworfen, Geräte gebaut und
erfolgreich verkauft. Alles im Bereich Fernseh-, Filmstudios und ÜWagen.
Da kamen genug Drehgeber und Tasten vor. Entprellung nur über Software,
alles andere kostet Geld, ist anfällig bei wechselnden Parametern und
somit schlechter.
Du kannst glauben was Du willst. Erfahrung ist unbezahlbar.
schade schrieb:> Ich hab 30 Jahre lang Hard- und Software entworfen, Geräte gebaut und> erfolgreich verkauft.
Junge red doch gleich vernünftig!
Was treibt dich dann dazu solche 'GutMensch-Gedanken' an den Mann zu
bringen :-(
Frank M. schrieb:> Das Problem ist aber, dass W.S. seine Aussage als allgemeingültig> hinstellt. Und das ist falsch. Korrekterweise hätte er den konkreten Typ> des Drehgebers angeben müssen, wo es funktioniert. Aber solche> Spezialfälle helfen im allgemeinen dem TO nicht weiter.
Das ist beileibe kein Problem, da so etwa 99.9% aller Drehgeber mit zwei
um etwa 90° versetzten Signalen arbeiten. Manche verringern den
Winkelabstand etwas, so daß die Rastungen so zwischen den Signalwechseln
liegen, daß beide Kontakte offen sind. Das ist zwecks Stromersparnis,
ändert aber am Schaltverhalten und an der prinzipiellen Auswertung gar
nichts.
Und wer jetzt auf den verbleibenden 0.1% exotischen Drehgebern
herumreitet, der mag dafür meinetwegen nen separaten Thread aufmachen.
Falk B. schrieb:> Nicht nur das. Auch das DIREKTE anschließen von einem Kondensator, egal> ob 1 oder 22nF an die Encoderausgänge ist ein Fehler! Denn dabei> schließt der Schalter im Encoder periodisch einen geladenen Kondensator> ohne Strombegrenzung kurz! Das erzeugt ordentlich Kontaktverschleiß!> Wenn schon, dann ein gescheiter RC-Tiefpaß mit dem Pull-Up an der> richtigen Stelle.
Und das ist tatsächlich der 22 nF Kondensator direkt am DG. Der
Kontaktverschleiß, über den du hier theoretisierst, ist bei dieser
Anwendung praktisch nicht vorhanden, denn er ist deutlich geringer als
das Oxidieren der Kontaktstücke, die in den gewöhnlichen 99% aller
Drehgeber verwendet werden.
Bei fast allen Relais wird ein Mindest-Kontaktstrom vorgeschrieben, um
eine sichere Kontaktgabe zu erreichen - bloß du meinst, all so etwas
nicht zur Kenntnis nehmen zu müssen. Hast du eigentlich JEMALS das
durchgerechnet, was du hier postest? Ich bezweifle das.
il Conte schrieb:> Das ist eigentlich selbsredend das man den Eingängen ein 'RC-Tiefpass'> verpasst.> Das traue ich sogar dem W.S. zu (der denkt halt schneller als er> schreibt)
Nein, in exakt DIESEM Falle nicht.
Um nicht sinnlos Strom zu verbraten, wählt man oftmals den Hochzieher zu
22k bis 47k und der Kontaktstrom, der bei 3.3V damit erzeugt wird, ist
zu klein, um die mit den Jahren gammliger werdenden Kontakte so eines
handbetätigten DG wieder freizubrennen. Genau dafür dient nebenher der
Kondensator direkt am Kontakt.
Und die Entprell-Wirkung ist ebenfalls genau daran gebunden, denn wenn
man ein RC-Glied vom Kontakt zum Portpin einfügt, dann wird der
Spannungsanstieg am C verlangsamt und der mittlere Pegel angehoben. Das
ist schlecht, denn dann ist die Spannung am Pin länger im Bereich des
Umschaltpunktes (wenn der µC keine Hysterese an den Pins hat). Stell dir
mal einen Kontakt vor, der 10 Sekunden lang mit genau 50% Duty prellt.
Dann stellt sich am Pin exakt 1.65V konstant ein. Das ist ne
Übertreibung zwecks Illustration, zeigt aber das Problem: Alles, was zum
Glätten führt, ist schlecht. Gut ist hier etwas, das möglichst einseitig
wirkt: also 100 milliOhm für den Kontakt und 22k für den Hochzieher.
Zur Erklärung:
Bei direktem C am Kontakt ist die Spannung am Pin nach Erstkontakt etwa
null, um dann mit R*C anzusteigen, wenn der Kontakt prellt. Das Prellen
ist aber nicht so, daß der Kontakt erstmal für 2 ms abhebt um danach den
endgültigen Kontakt zu geben - sondern es ist so, daß es innerhalb der
nächsten 2 ms immer mal wieder kurze Unterbrechungen und kurze
Kontaktgaben gibt - und die werden mit einer Kombi aus 22nF*22K
zuverlässig unterdrückt, das heißt, daß der in den Unterbrechungen
ansteigende Pegel nicht einmal ansatzweise in die Nähe des
Pin-Umschaltpunktes kommt.
Kurzum, diese Schaltung ist nicht nur sehr einfach und sehr billig zu
realisieren, sie ist auch in ihren diversen subtilen Nebeneffekten genau
auskalkuliert und tatsächlich das Beste, was man bei mechanischen DG
machen kann.
Aber damit haben die hier laut werdenden Disputenten ganz offensichtlich
noch viel zu wenig zu tun gehabt.
W.S.
schade schrieb:> Du kannst glauben was Du willst. Erfahrung ist unbezahlbar.
Stimmt. Aber in einer aufgeklärten, rationalen Welt zählt das
Sachargument und der reale Beweis. Es gibt genügend Felderfahrtung die
auf wackeligen Füßen steht, manchmal sogar auf einem Irrtum beruht.
Darum geht es hier NICHT um GLAUBEN, sondern Wissen! Wenn ich behaupte,
daß die ein oder andere Art der Signalverarbeitung wackelig ist, muss
ich das beweisen.
Yalu X. schrieb:> Werden bei euch die Impulse etwa nicht gezählt? Was macht ihr denn dann> mit den Encodersignalen?
Wir reden hier nicht von Encodern, wie sie z.B. an der Hauptachse der
Drehbank dran sind, sondern von Drehgebern für einsfuffzig, die am Radio
zum laut oder leise stellen dran sind.
Und bei mir werden deren Signale dazu benutzt, Botschaften ins
Event-system der Firmware zu senden. So zum Beispiel "lauter" oder
"leiser". Und die Auswertung erfolgt dann in einem anderen Teil der
Firmware, die gelegentlich sich sagt 'lauter als jetzt gibts nicht, ich
begrenze den Zähler für die Lautstärke auf 99, basta'.
W.S.
W.S. schrieb:> Bei fast allen Relais wird ein Mindest-Kontaktstrom vorgeschrieben, um> eine sichere Kontaktgabe zu erreichen
Klar, weil ja auch ein Drehgeberkontakt mit seinen spezifizierten
10-50mA Schaltstrom absolut das Gleiche ist wie ein 16 Relais mit fetten
Hochstromkontakten. AUA!
> - bloß du meinst, all so etwas> nicht zur Kenntnis nehmen zu müssen. Hast du eigentlich JEMALS das> durchgerechnet, was du hier postest? Ich bezweifle das.
Rechnen ist, wichtig, aber nicht alles. Was willst du da rechnen? Den
Kurzschlußstrom, wenn der Kontakt schließt? Das kann in die Ampere
gehen. Der ESR des Kondensators liegt deutlich unter 1 Ohm, der
Schalter, naja, keine Ahnung, vermutlich auch.
W.S. schrieb:> Zur Erklärung:> Bei direktem C am Kontakt ist die Spannung am Pin nach Erstkontakt etwa> null, um dann mit R*C anzusteigen, wenn der Kontakt prellt. Das Prellen> ist aber nicht so, daß der Kontakt erstmal für 2 ms abhebt um danach den> endgültigen Kontakt zu geben - sondern es ist so, daß es innerhalb der> nächsten 2 ms immer mal wieder kurze Unterbrechungen und kurze> Kontaktgaben gibt - und die werden mit einer Kombi aus 22nF*22K> zuverlässig unterdrückt, das heißt, daß der in den Unterbrechungen> ansteigende Pegel nicht einmal ansatzweise in die Nähe des> Pin-Umschaltpunktes kommt.
Ich staune immer wieder auf neue, dass du Dinge vortägst die richtig
Hand und Fuss haben. (das würde ich mir auch so bei KiCad wünschen ;-)
Bei uns waren das mal 22nF * 15K.
W.S. schrieb:> Kurzum, diese Schaltung ist nicht nur sehr einfach und sehr billig zu> realisieren, sie ist auch in ihren diversen subtilen Nebeneffekten genau> auskalkuliert und tatsächlich das Beste, was man bei mechanischen DG> machen kann.
Sagte ich doch oben, 15 Millionen Inkremente/Jahr ohne irgend welche
Klagen.
W.S. schrieb:> Wir reden hier nicht von Encodern, wie sie z.B. an der Hauptachse der> Drehbank dran sind, sondern von Drehgebern für einsfuffzig, die am Radio> zum laut oder leise stellen dran sind.
Zur Richtigstellung:
Mit Encoder werden im amerikanischen Sprachgebrauch auch die Drehgeber
(siehe Bild im Eingangsposting) so bezeichnet.
W.S. schrieb:> Überhaupt nicht besser, sondern schlechter.
Das kommt ganz klar auf die Randbedingungen an.
Wenn ich z.B. acht Encoder auslesen möchte, diese "handbetätigt" sind
und mein µC nicht auf Batterie läuft, dann würde ich ganz eindeutig die
Polling-Variante wählen (natürlich in einer Timer-ISR). Also das
Dannegger-Konzept (wenn auch natürlich in meiner eigenen, C-freien
Variante).
Warum? Ganz einfach, weil dieses Konzept in dieser Anwendung vollkommen
zweifelsfrei all seine Vorteile voll ausspielen kann, die Nachteile aber
wenig bis garnicht in's Gewicht fallen.
Will ich hingegen einen einzelnen Encoder auslesen, dieser ggf. sogar
"maschinengetrieben" ist und/oder Batteriebetrieb der MCU nötig ist,
dann würde ich natürlich meine Edge-Interrupt basierte Lösung verwenden.
Warum? Weil die eben hier all ihre Vorteile voll ausspielen kann,
während die Nachteile wenig bis garnicht in's Gewicht fallen.
Für alle Anwendungen, die zwischen diesen beiden grob umrissenen
Extremen liegen, muss man halt abwägen, welches Konzept jeweils besser
geeignet ist.
------------------------------------------------------------------------
Witzig und für dich wahrscheinlich besonders interessant: eine
Hardware-Entprellung benötigt de facto keins der beiden Konzepte, im
besten Fall ist sie vollkommen nutzlos, ggf. (bei falscher
Dimensionierung) stört sie sogar.
Rotary encoder sind eben keine Taster! Selbst dann nicht, wenn die
einfachen Vertreter ihrer Art nur aus zwei mechanischen Kontakten
bestehen. Die Logik ihres Aufbaus erspart eine Entprellung, wie sie bei
einfachen Tastern nötig ist.
Das ist, was du nie wirklich begriffen hast. Deswegen können die
unbelehrbaren Polling-Fetischisten (von denen allerdings viele das
ebenfalls nicht begriffen haben, nämlich insbesondere die lautesten
Schreihälse!) dich auch immer wieder auslachen. Weil deine
Edge-Interruptlösung diese innere Lögik der Encoder eben nicht
berücksichtigt und nutzbar macht.
Ich verrate dir noch den Kern des Tricks: man braucht zwei UNABHÄNGIG
sperrbare Edge-Interrupts pro Encoder. Dann geht das. Zuverlässig und
ohne jede Hardware-Entprellung. Und zwar selbst bei den Scheiß-Encodern,
die in Rastlage noch auf einem Kanal zappeln.
Meine Fresse, jetzt beklatschen sich 2 ewig Lernresistente, il Conte &
W. S. für ihre Lernresistenz.
Was beide offenbar auch nicht wissen: ja, es gibt einen Mindeststrom und
einen Maximalstrom pro Kontakt damit der seine Datenblatt Lebensdauer
auch erreicht, auch bei einem Drehencoder, und ein Kondensator parallel
zum Kontakt als angebliche RC Entprellung die auf die Art natürlich
keine ist reisst natürlich beide Grenzwerte.
Selbst richtig gebaute RC Glieder.
1
+5V
2
|
3
4k7 (bei 1 mA Mindeststrom)
4
|
5
+--47k--+--|Schmitt-Trigger Eingang
6
| |
7
Kontakt 100nF (bei 5ms Prellzeit)
8
| |
9
GND GND
haben Nachteile, sie begrenzen nämlich die maxinale erkennbare
Drehgeschwindigjeit auf Werte weit unter der der richtigen
Softwareauswertung.
MaWin schrieb:> Selbst richtig gebaute RC Glieder. +5V> |> 4k7 (bei 1 mA Mindeststrom)> |> +--47k--+--|Schmitt-Trigger Eingang> | |> Kontakt 100nF (bei 5ms Prellzeit)> | |> GND GND> haben Nachteile, sie begrenzen nämlich die maxinale erkennbare> Drehgeschwindigjeit auf Werte weit unter der der richtigen> Softwareauswertung.
Meine Fresse, soviel Unverstand - hast du das Ganze schon mal
auprobiert ?
Hier grosse Reden schwingen und dazu kleine Notdurft :-( klein scheissen
darf man ja nicht schreiben)
W.S. schrieb:>> Noch besser: Du nimmst die Quadraturdecoder-Hardware deines>> Mikrocontrollers, sofern vorhanden. Dann bist du sämtliche Probleme los.>> Das ist allerdings die beste Lösung - so man sie im Chip vorhanden hat
Und was meinst du, nach welchem Prinzip diese Hardware funktioniert?
1
[ ] mit flankengetriggerten Eingängen (die Schaltung wird nur bei
2
Low-High- und High-Low-Übergängen aktiv)
3
4
[ ] mit periodischem Polling, getriggert durch ein Taktsignal (die
5
Schaltung wird – unabhängig von den Eingangssignalen – bei jeder
6
Taktflanke aktiv)
7
8
[ ] auf ganz andere Weise, nämlich so: ___________
> und sofern man nicht zu arrogant oder dämlich ist, die Drehgebersignale> rein analog zu entprellen.
Genau diese analoge Entprellung ist auch bei den Hardwaredekodern nicht
erforderlich. Warum wohl?
Yalu X. schrieb:> [ ] mit flankengetriggerten Eingängen (die Schaltung wird nur bei> Low-High- und High-Low-Übergängen aktiv)
Gibt's tatsächlich, die (älteren ? nicht alle?) Chips von
https://www.lsicsi.com/ arbeiten so.
Allerdings ist schon deren WebSite so Scheisse, daß ich ausser dem Menü
keine Informationen mehr bekomme und bei SiteMap irgendein XML
Geschraffel.
Yalu X. schrieb:> Genau diese analoge Entprellung ist auch bei den Hardwaredekodern nicht> erforderlich. Warum wohl?Beitrag "Re: Effezenter Drehgeber decoder in c"
Wenn du da den 2. Absatz liest wird der Kondensator AUCH wegen der
Kontakte eingesetzt. Das kann man nicht von der Hand weisen. Wir haben
unsere Encoder genau so beschaltet und es gab absolut keinen Ärger.
Wir haben zwar nie mettalurgische Untersuchungen durchgeführt, aber das
schreibe ich diesen 22nF zu! Der Pullup lag bei 15K.
So gesehen ist eine analoge Endprellung notwendig wird aber
zweckentfremdet.
Michael B. schrieb:> Yalu X. schrieb:>> [ ] mit flankengetriggerten Eingängen (die Schaltung wird nur bei>> Low-High- und High-Low-Übergängen aktiv)>> Gibt's tatsächlich, die (älteren ? nicht alle?) Chips von> https://www.lsicsi.com/ arbeiten so.
Interessant, kannte ich noch nicht. Deswegen habe ich mir mal die
Datenblätter angeschaut.
Bei LSI/CSI gibt es grundsätzlich drei verschiedenen Typen von
Decoderbausteinen:
1. Mit integrierter Filterung für optische und magnetische Encoder: Da
diese Encodertypen – anders als die mechanischen – bauartbedingt
nicht prellen und mit der Rotation einhergehende langsam ansteigende
und abfallende Signalflanken haben, genügt als Filter ein Schmitt-
Trigger mit ausreichend großer Hysterese.
2. Mit getakteten Filtern: Diese entsprechen der Softwareentprellung von
Tastern.
3. Ohne Filter: Der Anwender muss (wie auch immer) dafür sorgen, dass an
den Eingängen saubere Digitalsignale entsprechend den Timingvorgaben
anliegen, d.h. High- und Low-Impulse müssen eine Mindestbreite haben.
Einen Vorschlag für so ein Filter findet man in der zugehörigen AN:
Es ist weder ein einzelner Kondensator noch ein RC-Glied, sondern
eine aufwendige Digitalschaltung mit nicht weniger als 6 D-Flipflops,
2 JK-Flipflops und 4 Gattern mit jeweils 3 Eingängen. Zusätzlich wird
noch eine Taktquelle benötigt. Auch diese Schaltung entspricht im
Wesentlichen der Softwareentprellung von Tastern und hat gegenüber
der Filterung mit RC-Glied und Schmitt-Trigger den Vorteil, dass sie
viel schneller ist.
Fazit: Auch die Ingenieure bei LSI/CSI haben erkannt, dass das Problem
mit dem Prellen ohne periodisches Polling nicht ganz so leicht in den
Griff zu bekommen ist.
il Conte schrieb:> Wenn du da den 2. Absatz liest wird der Kondensator AUCH wegen der> Kontakte eingesetzt.
Normalerweise werden die Kontakte durch das Gegeneinanderreiben der
Kontaktflächen gereinigt (ähnlich wie bei selbstreinigenden Schaltern
und Tastern). Das ist ein wesentlicher Punkt, worin sich Drehgeber- von
Relaiskontakten unterscheiden.
Wenn der Hersteller dennoch einen Mindeststrom angibt, sollte man diesen
natürlich berücksichtigen. Nur sollte man dann konsequenterweise auch
dafür sorgen, dass der angegebene Maximalstrom (bei Alps bspw. 10mA)
nicht überschritten wird, indem man 1kΩ oder 2kΩ zwischen Kontakt und
Kondensator schaltet. Aber dagegen wehrt sich W.S. ja vehement.
il Conte schrieb:> MaWin schrieb:>> Schrott ab Werk, von Entwicklern wie dir, die nicht mal die Grundlagen>> beherrschen.>> Gegenfrage: Was beherschten du ? Bashing ?
Heult der Typ, der paar Beiträge darüber völlig unreflektiert einen
anderen Benutzer als Arduino-User bloßstellen wollte...
LOL
il Conte schrieb:> Meine Fresse, soviel Unverstand - hast du das Ganze schon mal> auprobiert ?> Hier grosse Reden schwingen und dazu kleine Notdurft :-( klein scheissen> darf man ja nicht schreiben
Autsch, nun warst du im Eifer deones Gefechtes zu blöd, jetzt weiss
Jeder, dass du nicht den Hauch einer Ahnung hast sondern hier nur
rumtrollst um des Unfriedens Willen.
Verpiss dich.
Hi
>Heult der Typ, der paar Beiträge darüber völlig unreflektiert einen>anderen Benutzer als Arduino-User bloßstellen wollte...
Zu recht. Weil das Plagiat ein Arschloch mit Null Ahnung ist.
MfG Spess
spess53 schrieb:> Zu recht. Weil das Plagiat ein Arschloch mit Null Ahnung ist.
Ich muss Dich enttäuschen: Sämtliche in diesem Thread von MaWin
geschriebenen Beiträge sind vom Original - kein Plagiat.
Wie schon öfter geschrieben: Wir Moderatoren können das eindeutig
erkennen.
Frank M. schrieb:> Wie schon öfter geschrieben: Wir Moderatoren können das eindeutig> erkennen.
Eindeutig?
Also wenn jemand auf Arbeit (auch an wechselnden Einsatzorten) hier
postet
und dann zu Hause (ein un der gleiche Mann) dann könnt ihr sowas
feststellen?? das muss mir einer erklären.
Mit den Infos die auf euerer Datenschutzerkärung ersichtlich ist , ist
das nicht zu machen zumal ihr anscheinend Google Analitics verwendet.
Softlastige Vereine wie Ihr nemen doch heutzutage Matomo.
il Conte schrieb:> Eindeutig?
In MaWins Fall: Ja. Denn er liefert freiwillig zusätzlich zum Namen
noch eine weitere eindeutige Kennung, die jeder Gast hier im Forum
angeben kann.
Von daher greift Dein Argument bzgl. Datenschutz überhaupt nicht.
Frank M. schrieb:> il Conte schrieb:>> Eindeutig?>> In MaWins Fall: Ja. Denn er liefert freiwillig zusätzlich zum Namen> noch eine weitere eindeutige Kennung, die jeder Gast hier im Forum> angeben kann.
WOW! Aber trotzdem seit Jahren die Paranoia gegenüber einer Anmeldung.
Damit SIE ihn nicht finden können ;-)
Yalu X. schrieb:> Normalerweise werden die Kontakte durch das Gegeneinanderreiben der> Kontaktflächen gereinigt (ähnlich wie bei selbstreinigenden Schaltern> und Tastern).
Nö.
Hast du jemals einen billigen DG von innen gsehen? Wohl nicht. Da ist
ein Plastik-Spritzguß-Zackenrad drin, was auf zwei Blechzungen drückt,
die ihrerseits auf einen darunter liegenden Kontakt drücken - oder eben
nicht.
Da gibt es keinerlei Reibung - außer der zwischen der Blechzunge und dem
Plastikrad.
Du solltest ohne tatsächliche Kenntnisse der Dinge nicht so theoretisch
aus deiner Vorstellung über eine mögliche Realisierungsvariante des
Ganzen heraus argumentieren. Sowas trifft nur manchmal zu und kann in
den übrigen Fällen nur ebenso Unbedarften imponieren.
Und nochwas zum Entprellen: in einigen µC von Kinetis ist in dem
Pin-Anschluß bereits eine programmierbare Hardware-Entprellung
eingebaut. Ja, sowas gibt's - wenn man sich den Chip passend zur Aufgabe
aussucht und nicht immerzu nur auf einer speziellen Marke herumreitet
und die Aufgabe an den Chip anpassen will.
W.S.
W.S. schrieb:> Hast du jemals einen billigen DG von innen gsehen? Wohl nicht. Da ist> ein Plastik-Spritzguß-Zackenrad drin, was auf zwei Blechzungen drückt,> die ihrerseits auf einen darunter liegenden Kontakt drücken - oder eben> nicht.
Als Wissenschaftler wärst du ungeeignet. Nur weil du bis jetzt keine
anderen Bauformen gesehen hast, heißt das nicht, daß es sie nicht gibt.
Ich kenne wenigstens einen anderen Encoder, bei dem eine Kontaktfeder
über Kontakte auf einer Platine schleift. IIRC war das das
Panasonic-Teil, das es so lange bei Pollin gab.
W.S. schrieb:> Hast du jemals einen billigen DG von innen gsehen? Wohl nicht. Da ist> ein Plastik-Spritzguß-Zackenrad drin, was auf zwei Blechzungen drückt,> die ihrerseits auf einen darunter liegenden Kontakt drücken - oder eben> nicht.
Gegenfrage: Hast du schon alle Typen von Drehgebern von innen gesehen,
dass du das so verallgemeinern kannst?
Yalu X. schrieb:> Gegenfrage: Hast du schon alle Typen von Drehgebern von innen gesehen,> dass du das so verallgemeinern kannst?
Zumindest wars sicherlich NICHT der billigste, den er da aufgehebelt
hatte. :)
Meine billigst ALPS (irgend eine Restware) schleifen ihre Kontakte so
schön sauber, das bereits nach ~1000 Touren die ersten Aussetzer
auftreten.... Natürlich hab ich einen zerlegt und nachgesehen....
Axel S. schrieb:> Ich kenne wenigstens einen anderen Encoder, bei dem eine Kontaktfeder> über Kontakte auf einer Platine schleift. IIRC war das das> Panasonic-Teil, das es so lange bei Pollin gab.
Genau so ist es. Für die, die es nicht glauben, habe ich mal ein Foto
gemacht (s. Anhang).
Teo D. schrieb:> Meine billigst ALPS (irgend eine Restware) schleifen ihre Kontakte so> schön sauber,> ...> Natürlich hab ich einen zerlegt und nachgesehen....
Einen Alps habe ich zwar noch nicht von innen gesehen, aber was du
schreibst, ist plausibel:
Einige der Encodertypen von Alps gibt es wahlweise mit und ohne Rastung.
Bei der von W.S. beschriebenen "Zackenradmechanik" würde man auch bei
den nichtrastenden Varianten leichte Ungleichmäßigkeiten beim Drehen
spüren, weswegen hier vermutlich Schleifkontakte zum Einsatz kommen. Da
ihre rastenden Kollegen äußerlich genau gleich aussehen, ist davon
auszugehen, dass auch die interne Mechanik bis auf den Rastmechanismus
der gleiche ist.
> das bereits nach ~1000 Touren die ersten Aussetzer auftreten....
Die Lebensdauer der meisten Alps-Encoder ist mit 15.000 Cycles angegeben
(einige wenige halten 30.000 oder 100.000 Cycles). Wenn mit einem Cycle
ein Schaltzyklus gemeint ist, verwundert es nicht, dass sie schon nach
1000 Umdrehungen am Ende sind.
Und mit der W.S.-schen Kondensatorgeißel sind es wahrscheinlich nur 500
Umdrehungen ;-)
Yalu X. schrieb:> Die Lebensdauer der meisten Alps-Encoder ist mit 15.000 Cycles angegeben> (einige wenige halten 30.000 oder 100.000 Cycles). Wenn mit einem Cycle> ein Schaltzyklus gemeint ist, verwundert es nicht, dass sie schon nach> 1000 Umdrehungen am Ende sind.
Ich kann zwar nicht beurteilen, wie die Verarbeitung von außen bei ALPS
für gewöhnlich aussieht, aber ich glauben nicht, das dieses Säckchen von
Kurbeldingern direkt aus China, auch wirklich von Alps stammt. Da sie
bereits für ein Konsumerprodukt vorbereitet (PCB), von einem
Restehändler für "Zahle einen, nimm 15" stammen und wirklich schlampig
aussehen.
Da hat die Qualitätskontrolle wohl mal nicht versagt.... Kaufe einmal,
löte dreimal. Oder wie war das? ;)