Son 3 günde uyuduğum zamanlar hariç tamamen elektrik-elektronik-programlama ile uğraştım.1 s palsi üretmek için diğer timer'ları bir şekilde kullanmamız lazım. Baktığımız zaman Timer2 ile 1024 lük prescale elde edebiliyoruz. Timer 8 bit olduğu için 256 da oradan bölebiliriz. Bir de sadece pozitif palsi kullandığımız için oradan da bir 2 ye bölme geliyor. Ana clock sinyali 16 MHz.
[math]\frac{16 \times 10^6}{1024 \times 256 \times 2} = 30.51\ Hz[/math]
Yani tek bir 8 bitlik timer bizi 1 Hz e indirmiyor. O yüzden iki tane 8 bitlik timer kullanmamız lazım. ikincisi, birincisinin çıkışından beslenecek. Bu doğrultuda düşünüp timer'ları yapılandırmaya çalış bakalım.
Sırf bu hevese kendi kendime proje yapmaya başladım.Evet Atmega328p timer'ları biraz limitli. Mesela 0.5 Hz sinyali çıkarmak mümkün olur gibi duruyor ama timer'i senkron çalıştırmak, yani 1 s lik pals üretip durdurmak sonra tekrar çalıştırma mümkün olur mu bilemiyorum. Neyse önce sen 0.5 Hz gate sinyali ile çalış, 1 s boşa gitsin. Sonra o 1 s boşluk olmaması için çalışılabilir.
Bu işlerde genelde ilerleme ani oluyor, düzenli bir ilerleme oluyor. Ben bazan bir hafta sürünüyorum bir projede, zerre ilerleme yok. Sonra birden bir lamba yanıyor ve o gün büyük bir ilerleme katediyorum. O yüzden düzenli ilerlemiyorum diye moralini bozma. Bu projeleri bitirince duyacağın keyfi düşün ve uğraşmaya devam et.
Aynen! Arduino timer0'ı kendisi kullanıyor. Bir çok farklı kütüphanede her fonksiyon için olmasa da bazı fonksiyonlar bu timer0'ı yeniden yapılandırdığında çalışmıyor. "Bana millis() lazım değil" deyip birkaç gün çalıştığım projede kan ve göz yaşı dökerek çalışmayan kodlarımın timer0'ı kullanan kütüphanelerden kaynaklandığını farketim. Sonra timer0'ı kuzu kuzu arduinoya bırakıp devre kartı dahil her şeyi baştan planlamam gerekti. Saçımda daha yok ama galiba sakalımdaki bir kaç beyazın sebebi bu olmuştur.Mesela D5 ve D6ya bağlı timeri yapılandırınca hiçbir delay, delayMicroseconds, pulseIn gibi komutlar çalışmıyor.
Arduino alt yapısı bu komutlar için oraya bağlı timerX'i kullanmışlar biz kendimiz yapılandırınca bozuluyor herhalde.
Ben paranoyağım. Kullandığım kartın şeması olmazssa onu kullanmam,kullandığım kütüphane dosyalarına göz atmadan kullanmam. Böyle akışkanlar mı paranoyaklık mı desem arasında bir huyum var.Aynen! Arduino timer0'ı kendisi kullanıyor. Bir çok farklı kütüphanede her fonksiyon için olmasa da bazı fonksiyonlar bu timer0'ı yeniden yapılandırdığında çalışmıyor. "Bana millis() lazım değil" deyip birkaç gün çalıştığım projede kan ve göz yaşı dökerek çalışmayan kodlarımın timer0'ı kullanan kütüphanelerden kaynaklandığını farketim. Sonra timer0'ı kuzu kuzu arduinoya bırakıp devre kartı dahil her şeyi baştan planlamam gerekti. Saçımda daha yok ama galiba sakalımdaki bir kaç beyazın sebebi bu olmuştur.