Tuşlu Rotary Encoder Modül Yapımı

Bunu da bir süre çalışmak lazım sanırım...

Redmi Note 8 Pro cihazımdan Tapatalk kullanılarak gönderildi
Çalışan bir kodum var bu şekilde, loop içinde çalıştırdım, yılan hikayesine dönen bir kayar kapı projesi için. Eve dönünce paylaşayım, kodu yazarken bana sol kulağımı sağ elle tutuyormuşum gibi gelmişti, ama iyi çalışıyordu.
 
Ben de osiloskoptan bir şey çıkar mı diye kurcalıyordum.

encoder.png
 
Bu grafik modülden mi yoksa yalın hâldeki bir encoderden mi?

Redmi Note 8 Pro cihazımdan Tapatalk kullanılarak gönderildi
modülden. ama üzerindeki pullup dirençleri söktüm. sadece 100nF kondansatörler var
 
 
gariban picoya bu kadar yüklenme abi kaldırabileceği toptan ağırını veriyorsun sırtına birde sitem ediyorsun encoderi 3.3 ile besle birde öyle dene bozulmadıysa eğer
 
Videonun 15. saniyesine kadarki sürede encoderin ürettiği palslerde 1. ve 2. kanalın arasındaki zaman farkı gayet net. Ancak palsler sıklaştığında sanırım kondansatörlerin de etkisiyle bu fark gittikçe azalıyor. Interrupt'ın kısa sürede yakaladığı bu kadar hareketi diğer kodların serial ekrana yazdırması esnasında da bize pals atlaması gibi görünen hadise meydana geliyor. Yani değişkenlerimiz o kadar hızlı değişiyor ki haliyle bazı sayılar (biz palsler olarak adlandırıyoruz) atlanmış gibi bir illüzyon meydana geliyor.
Bu nedenle encoder ne kadar sık pals üretip Arduino yahut Pico bunu yakalasa da ekranın bunu tam olarak gösterme kabiliyetinden daha hızlı olduğu için istediğimizi elde edemiyoruz. Çözüm olarak yapmamız gereken encoderin pals/zaman oranı üzerinden gecikmeler yoluyla bir çözünürlük üretip değişkenlerimizi doğru zamanda işleyecek bir kod yapısına ihtiyacımız var.
Nitekim en son paylaştığım kodda bunu denedim ve gayet sağlıklı sonuç aldım. Arduino Interrupt'ı içinde delay() gecikmesi çalışmıyor. Ancak delayMicroseconds() kullanarak yazdığım Gecikme() fonksiyonu zamana bağlı bu çözünürlüğü sağladı. Bununla birlikte kesme meydana geldiğinde bütün kesmeleri deaktive edip, bir Gecikme'den sonra kesmeden çıkıp, değişkenleri main loop içinde işledim. Bu işlemlerin ardından elde ettiğim değişkenleri ekrana yazdırdım ve bundan da sonra kesmeleri main loop içinde aktive ederek encoderin yeni button/dönüş hareketlerine imkan verdim.

Eğer o son kodları siz de çalıştırmayı denerseniz, daha önce paylaştığım kodlardaki gibi hayalet bir durum olup-olmadığını test etmiş oluruz. En azından bu kodlarda doğru sonuç almayı sağlayan yapıyı anlayarak ilerlemeye çalışabiliriz.
Sizden ricam önce elinde Arduino UNO olanların bu kodları kendileri aynıyla test ederek sonuçlarını paylaşması.
 
Videonun 15. saniyesine kadarki sürede encoderin ürettiği palslerde 1. ve 2. kanalın arasındaki zaman farkı gayet net. Ancak palsler sıklaştığında sanırım kondansatörlerin de etkisiyle bu fark gittikçe azalıyor. Interrupt'ın kısa sürede yakaladığı bu kadar hareketi diğer kodların serial ekrana yazdırması esnasında da bize pals atlaması gibi görünen hadise meydana geliyor. Yani değişkenlerimiz o kadar hızlı değişiyor ki haliyle bazı sayılar (biz palsler olarak adlandırıyoruz) atlanmış gibi bir illüzyon meydana geliyor.
Bu nedenle encoder ne kadar sık pals üretip Arduino yahut Pico bunu yakalasa da ekranın bunu tam olarak gösterme kabiliyetinden daha hızlı olduğu için istediğimizi elde edemiyoruz. Çözüm olarak yapmamız gereken encoderin pals/zaman oranı üzerinden gecikmeler yoluyla bir çözünürlük üretip değişkenlerimizi doğru zamanda işleyecek bir kod yapısına ihtiyacımız var.
Nitekim en son paylaştığım kodda bunu denedim ve gayet sağlıklı sonuç aldım. Arduino Interrupt'ı içinde delay() gecikmesi çalışmıyor. Ancak delayMicroseconds() kullanarak yazdığım Gecikme() fonksiyonu zamana bağlı bu çözünürlüğü sağladı. Bununla birlikte kesme meydana geldiğinde bütün kesmeleri deaktive edip, bir Gecikme'den sonra kesmeden çıkıp, değişkenleri main loop içinde işledim. Bu işlemlerin ardından elde ettiğim değişkenleri ekrana yazdırdım ve bundan da sonra kesmeleri main loop içinde aktive ederek encoderin yeni button/dönüş hareketlerine imkan verdim.

Eğer o son kodları siz de çalıştırmayı denerseniz, daha önce paylaştığım kodlardaki gibi hayalet bir durum olup-olmadığını test etmiş oluruz. En azından bu kodlarda doğru sonuç almayı sağlayan yapıyı anlayarak ilerlemeye çalışabiliriz.
Sizden ricam önce elinde Arduino UNO olanların bu kodları kendileri aynıyla test ederek sonuçlarını paylaşması.
Deniyorum şimdi.

gariban picoya bu kadar yüklenme abi kaldırabileceği toptan ağırını veriyorsun sırtına birde sitem ediyorsun encoderi 3.3 ile besle birde öyle dene bozulmadıysa eğer
Encoderi çevirince 5v mı gidyor picoya?
 
5 gittiğinde ne kadar zarar görmüştür
zarar görmüş müdür onu bilmiyorum.
ama pull-up yapılmış halde kullandığında girişlere 5 gitti
 

Forum istatistikleri

Konular
7,285
Mesajlar
123,217
Üyeler
2,940
Son üye
kement

Son kaynaklar

Son profil mesajları

Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy semih_s Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal taydin Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
Back
Top