Go Down

Topic: Eingangsfrequenz (Read 3997 times) previous topic - next topic

FTE11

Hey Uwe,

Der Drehgeber:
http://www.ifm.com/ifmde/web/dsfs!RB6015.html

H Brücke und Elektrische Übersicht, siehe Anhang.

Grüße

uwefed

Was mir einfällt ist:
Quote
void decoder()
{
  counter --;
  counter += 2*digitalRead(pin2);
}

Das ist die Interruptroutine durch eine Flanke an Phase 1 des Drehgebers aufgerufen wird. Es könnte sein daß die Anweisung "counter --;" zuviel Zeit in Anspruch nimmt und die 2. Phase bereits wieder Status geändert hat bevor Du deren Zusatand in "counter += 2*digitalRead(pin2);" ausliest.
Bei 20V läuft der Motor dann langsam genug, daß es nicht passiert.

Versuch mal die Sache umzukehren:
Quote
void decoder()
{
    counter += 2*digitalRead(pin2);
    counter --;
}


Grüß Uwe

udoklein

Einen Integer runterzuzählen kostet maximal 2-3 Takte. Bei 16 Mhz sollte man davon so gut wie nichts merken. digitalRead hingegen ist laaaaannnnngggsssaaaaaammmm. Wenn das wirklich unter Verdacht steht würde ich vorschlagen die Ports direkt auszulesen. Im Playground steht wie: http://www.arduino.cc/en/Reference/PortManipulation.

Und nur zur Sicherheit: ist der counter jetzt "VOLATILE" deklariert oder fehlt das noch? Zeig uns doch bitte mal das komplette Programm.
Check out my experiments http://blog.blinkenlight.net

volvodani

Ich denke wenn man auszüge aus dem Sketch hier verwendet:
Und die Funktion read_encoder anpasst an die Pins die man verwendet und die Funktion über einen Interrupt ausführt könnte das alles um einiges schneller werden
http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino
"Komm wir essen Opa!" - Satzzeichen retten Leben!

Go Up