Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
electronics:zss600-001-100b-5l [2019-03-31 14:01] Martin Prochnowelectronics:zss600-001-100b-5l [2019-03-31 20:20] (aktuell) – [Code] Martin Prochnow
Zeile 5: Zeile 5:
 Als Versorgungsspannung werden 5V benötigt. Pro voller Umdrehung sendet er 100 Impulse. Als Versorgungsspannung werden 5V benötigt. Pro voller Umdrehung sendet er 100 Impulse.
  
-Bevor ich mit dem Ding etwas anstellen kann, muss ich erst einmal die Impulse auslesen. Ich nutze dazu einen Arduino-Pro-Micro-Clone.+Zum Auslesen der Impulse nutze ich einen Arduino Pro Micro.
  
 {{:electronics:rotary_encoder_arduino.jpg?direct&600|}} {{:electronics:rotary_encoder_arduino.jpg?direct&600|}}
Zeile 13: Zeile 13:
 ^ Encoder ^ Arduino Pro Micro ^ ^ Encoder ^ Arduino Pro Micro ^
 | 0V      | GNC               | | 0V      | GNC               |
-| Vcc     | RAW (5V)          |+| Vcc     | RAW (5V direkt von USB) |
 | A       | D2                | | A       | D2                |
 | B       | D3                | | B       | D3                |
Zeile 21: Zeile 21:
 ===== Code ===== ===== Code =====
  
-Der Encoder prelltdaher ist ein Debouncing notwendig~700µSec hat sich in meinen Tests als guter Wert herausgestellt.+Die folgenden beiden Bilder zeigen die Impulsfolge beim Drehen des Encoders (Kanal 1 ist Encoder-Ausgang AKanal 2 ist Encoder-Ausgang B). 
 + 
 +{{:electronics:rotary_encoder_cw.png?nolink|Drehen im Uhrzeigersinn}} {{:electronics:rotary_encoder_ccw.png?nolink|Drehen gegen den Uhrzeigersinn}} 
 + 
 +Wenn A auf ''HIGH'' steht, muss geprüft werden, ob B auf ''LOW'' (Drehung im Uhrzeigersinn) oder auch auf ''HIGH'' (Drehung gegen den Uhrzeigersinn) steht. 
 + 
 +Damit das ganze zügig passiert, wird A mittels Interrupt überwacht.
  
 Der Zustand der Pins wird über das entsprechende Input-Register direkt eingelesen, um mit der Abarbeitung des Interrupt-Handlers so schnell wie möglich fertig zu werden. Der Zustand der Pins wird über das entsprechende Input-Register direkt eingelesen, um mit der Abarbeitung des Interrupt-Handlers so schnell wie möglich fertig zu werden.
 +
 +Der Encoder prellt, daher ist ein Debouncing notwendig. ~700µSec hat sich in meinen Tests als guter Wert herausgestellt.
  
 <sxh cpp> <sxh cpp>
Zeile 39: Zeile 47:
   pinMode(pinB, INPUT);   pinMode(pinB, INPUT);
  
-  attachInterrupt(1, doEncoderA, CHANGE);+  attachInterrupt(1, doEncoder, CHANGE);
  
   Serial.begin (9600);   Serial.begin (9600);
Zeile 52: Zeile 60:
 } }
  
-void doEncoderA() {+void doEncoder() {
   if (micros() - debounceLast > debounceThreshold) {   if (micros() - debounceLast > debounceThreshold) {
     debounceLast = micros();     debounceLast = micros();
Zeile 67: Zeile 75:
 } }
 </sxh> </sxh>
 +
 +<note>Wenn ein anderer Arduino-Typ verwendet werden soll, muss der Teil mit dem Einlesen der Input-Register angepasst werden. Und wahrscheinlich ist der verwendete Interrupt auch ein anderer.
 +</note>
  
 {{tag>Arduino}} {{tag>Arduino}}
  • Zuletzt geändert: 2019-03-31 20:20