Timer Sorusu

Endorfin35+

Kayıtsız Üye
Katılım
1 Mayıs 2020
Mesajlar
4,193
MCU da timer konusunda çok bilgili değilim. Biraz kurcaladım. Timer ı istediğim zamana kurup çalıştırıp durdurabiliyorum. Örneğin timer ı 1 sn ayarlayıp bir ledi yakıp söndürebiliyorum....

Sorunum şöyle;
bir butonum var ve buton ile üç farklı fonksiyon çalıştırıyorum. Butona her basışta bir sonraki fonksiyon devreye giriyor. Bu fonksiyonlarda 1-2-3 olsun. 3 ten sonra tekrar 1. fonksiyona geçiyorum. Hangi fonksiyonun aktif olduğu buton üzerindeki ışık ile sağlıyorum. 1. fonksiyon aktif ise 100ms on 900ms of yaparak ışığım bir kere göz kırpıyor. 2. fonksiyon aktif ise ışık iki defa 100ms göz kırpıyor. ben bunu daha önce arduino nun millis() fonksiyonu ile yazmıştım. Şimdi biraz daha low level bir şeyler yazabilirmiyim diye düşünüyorum. Bunun nasıl yaparım kafam karıştı. ışık he yandığında veya söndüğünde timer ın çalışma aralığını (compare register) değiştirmeliyim galiba... Hımm böyle bir deneyeyim...
 
Buton okumak için timer hardware'i kullanmak işi zorlaştırır gibime geliyor. Eğer butona çift tık veya uzun basma gibi fonksiyonlar ekleyeceksen, bunu bir state machine şeklinde yapmak daha kolay olur.
 
imdi biraz daha low level bir şeyler yazabilirmiyim diye düşünüyorum. Bunun nasıl yaparım kafam karıştı. ışık he yandığında veya söndüğünde timer ın çalışma aralığını (compare register) değiştirmeliyim galiba.
Basit/basic bir timer'ın min 2 registeri olur.
Birincisi sayaç/counter, diğeri kaça kadar sayacağı. Eski model piclerde tek register var.
Atıyorum 20000 de kesme üretsin istiyorsan sayaca 65535-20000 değerini yüklersin sayac 0xFFFF olunca kesme üretir.

Daha yeni mcularda kesmenin hangi değere gelince üretileceğini söylediğin bir register daha var.
Bu registere 20000 değerini yükler, sayacı sıfırlarsın. Sayaç 20000 olunca kesme üretilir gibi.

Buton okumak için timer hardware'i kullanmak işi zorlaştırır gibime geliyor. Eğer butona çift tık veya uzun basma gibi fonksiyonlar ekleyeceksen, bunu bir state machine şeklinde yapmak daha kolay olur.
Buton okumak vs. için bir state machine kullanmak ok. Hatta çoğu işte hayat kurtarır.
Ama hardware kullanmak işi zorlaştırmaz. Yazılımı biraz daha karmaşıklaştırır. Seri yazılmış bir kod yerine paralelmiş gibi çalışan kesmelere dayalı bir kod olur.
Ama pine 1sn basıldı mı diye başında beklemek zorunda kalınmaz.
Misal min 1 sn butona basıldı mı için, gelen ilk high/low kenarlı EXT INT/IC kesmesinde timer kurup ne yapıyorsak, işimize bakarız. Bir sonraki kesme timer kesmesi ise butona 1 sn basılmıştır. Bir sonraki kesme EXTINT/IC kesmesi ise butona 1 sn den kısa süre basılmıştır gibi.
 

Forum istatistikleri

Konular
5,788
Mesajlar
99,011
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top