Döner enkoder
Sınırsız dönebilen, adım ve yönü iki sinyalle (CLK ve DT) veren döner düğme. Basılabilen düğmesi de vardır.
Nasıl çalışır?
Döner enkoder, içinde iki kontak taşıyan sınırsız dönen bir düğmedir. Kontaklar aynı anda değil, biri ötekinden biraz önce değişir. Bu yüzden CLK ve DT arasında 90 derece fark vardır (quadrature). Saat yönünde (CLK, DT) durumları 11, 01, 00, 10, 11 sırasıyla değişir; ters yönde 11, 10, 00, 01, 11.
Yön kuralı: CLK 1'den 0'a düşerken DT'ye bak. DT 1 ise bir yöne, 0 ise öbür yöne dönülüyordur. Bu yüzden CLK bir kesme pinine bağlanır ve ISR içinde DT okunur.
İleri düzey: Gerçek kontaklar sıçrar; bir tık 2-3 kenar üretebilir. Çözüm, iki kenar arasında en az belli bir süre (örneğin 2000 µs) geçmediyse kenarı yok saymaktır. Laboratuvar modeli sıçramaz ve her benzetim milisaniyesinde bir durum geçişi uygular; bir tık 4 geçiştir, bu yüzden en çok 250 tık/sn döner.
Laboratuvarda nasıl bağlanır?
| Nereden | Nereye |
|---|---|
| Enkoder CLK | Uno D2 (INPUT_PULLUP, kesme pini) |
| Enkoder DT | Uno D3 (INPUT_PULLUP) |
| Enkoder SW | Uno D4 (INPUT_PULLUP) |
| Enkoder VCC | Uno 5V (isteğe bağlı) |
| Enkoder GND | Uno GND |
Özellik panelindeki Konum (tık) değeri değişince enkoder o kadar tık çevrilir (saat yönü artı). Düğme basılı düğmeyi basar.
Sık yapılan hatalar
- CLK'yı kesme pini olmayan bir pine bağlamak. Uno'da yalnız D2 ve D3 kesme yapar.
- sayac değişkenini volatile yapmamak. loop() değişimi görmeyebilir.
- ISR içinde Serial.print ya da delay kullanmak. ISR kısa olmalıdır.
- Bounce filtresi koymamak ya da eşiği fazla büyütmek. Birincisinde sayaç fazla atlar, ikincisinde hızlı çevirirken tıklar kaybolur.
- CLK ile DT'yi karıştırmak. Yön ters çıkar.