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
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
6,162
Mesajlar
105,209
Üyeler
2,561
Son üye
burakkaleli

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top