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:03] Martin Prochnowelectronics:zss600-001-100b-5l [2019-03-31 20:20] (aktuell) – [Code] Martin Prochnow
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.
  
-Wenn ein anderer Arduino-Typ verwendet werden sollmuss der Teil mit dem Einlesen der Input-Register angepasst werden. Und wahrscheinlich ist der verwendete Interrupt auch ein anderer.+Der Encoder prelltdaher ist ein Debouncing notwendig. ~700µSec hat sich in meinen Tests als guter Wert herausgestellt.
  
 <sxh cpp> <sxh cpp>
Zeile 41: Zeile 47:
   pinMode(pinB, INPUT);   pinMode(pinB, INPUT);
  
-  attachInterrupt(1, doEncoderA, CHANGE);+  attachInterrupt(1, doEncoder, CHANGE);
  
   Serial.begin (9600);   Serial.begin (9600);
Zeile 54: Zeile 60:
 } }
  
-void doEncoderA() {+void doEncoder() {
   if (micros() - debounceLast > debounceThreshold) {   if (micros() - debounceLast > debounceThreshold) {
     debounceLast = micros();     debounceLast = micros();
Zeile 69: 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