URL: https://www.overclockers.at/coding-stuff/optischer-rotary-encoder-an-arduino-zaehlt-nicht-richtig_256916/page_1 - zur Vollversion wechseln!
Hello,
hat einer der Coding-Profis hier jemals mit einem Rotary-Encoder (Drehinkrementalgeber) gearbeitet? Ich habe mit meinem Arduino das Problem, dass er mir aus bisher unerklärlichen Gründen ab und an Werte liefert, die völlig daneben sind. Das passiert fast nur, wenn ich in void loop() neben dem Drehencoder noch andere Funktionen packe bzw. diese von dort aus aufrufe...
Als code verwende ich die 0815 Encoder Bibliothek. Ich hab es mit oder ohne Interrupts probiert, machte keinen Unterschied.
Die zweite Funktion dient zum bespielen eines OLED, eventuell fordert das zu viel Leistung vom Arduino?
Vielen Dank für eure Hilfe!
Zitat aus einem Post von LTDDas passiert fast nur, wenn ich in void loop() neben dem Drehencoder noch andere Funktionen packe bzw. diese von dort aus aufrufe...
Danke, versuche ich gleich mal rauszufinden. Laut den Foren sollte der Arduino bis zu 60000 pro Sekunde schaffen ...
Was mich irritiert ist, dass die werte so "springen". Also von 32 auf 212, dann wieder auf 60, dann springt er auf einer Zahl +-2 herum. Und das passiert fast ausschließlich gegen den Uhrzeigersinn. Zuerst dachte ich, dass eventuell einer der Signalwege defekt ist, aber er zählt tadellos die 4 Schritte.
Ein paar Schritte auf und ab kann bei billigen Drehgebern die stark prellen (und schlechtem Arduino-Code) schon mal vorkommen. Es gibt auch so tolle Dinger wo Pegelwechsel an den Ausgängen direkt an den Rastpunkten erfolgen...
Wenn aber 200 Werte übersprungen werden is irgendwas grob falsch.
debounce solltest bei einem optischen eigentlich eh nicht brauchen.
Zitat aus einem Post von InfiXdebounce solltest bei einem optischen eigentlich eh nicht brauchen.
Das gibts ja nicht, ich hab das Problem gefunden: wenn ich statt Pin 6/7 und 7/8 einfach 6/8 nehm (also einen frei lasse), geht es perfekt. Haben die Pins Crosstalk oder wie erklärt man das?
schon möglich
könnte am Arduinopin liegen - es gibt verschiedene PINs die sich nicht immer gleich verhalten, je nach funktionen der µC die drauf sind können die Pins interne Pull Up/Downs haben oder nicht, können CMOS, Schmitttrigger oder TTL kompatibel sein...
dazu müsste man sich die "alternativfunktionen" der PINS bzw. das genaue Datenblatt vom verwendeten Arduino/dessen µC ansehen und die Ausgänge des Encoders - hat der zB open Collector/Drain Ausgänge wird nur einer der logischen Zustände angelegt, der zweite Zustand ist dann bei fehlendem Pull-Up/Down eventuell undefiniert, bzw. fängt man z.B. 50Hz Brumm vom Lichtnetz ein oder andere Störungen ...
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025