Arduino ile frekans sayıcı?
  • Merhaba,
    Merak ettim, arduino sitelerinde ve Google üzerinde arattım, arduino ile yapılan ve -en azından 10 MHz'e kadar çalışabilen- hiç bir frekans sayıcı projesi göremedim. Genellikle kHz veye Hz seviyesinde birkaç uygulama örneği var. Oysa, PIC ile yapılmış yüzlerce örnek var. (Amacım, PIC ATMEL işlemci karşılaştırması değil; gerçi ATMEL'i de Microchip aldı ya) Acaba ben mi bulamamışımdır yoksa Arduino bu işlem için uygun mu değildir merak ettim.
  • Üzerinde atmega bulunduran arduinolar 16 mhz'e kadar sayabilir. Bunu kısıtlayan şey arduinoların 16mhz osilator ile gelmesi. Aslında en az 20 mhz ile çalışabilirler.

    Arm ile çalışan versiyonlar muhtemelen daha yüksek frekanslarda çalışır.
  • @amenofis,
    Bildiğiniz herhangi bir uygulama örneği var mı?
  • <code> volatile uint16_t sayac_ust; ISR(TIMER1_OVF_VECT) { ++sayac_ust; } void setup() { TCCR1B = 0; TCNT1 = 0; TIMSK1 = 0x1; TCCR1A = 0; TCCR1B = 0x7; //... } void loop() { //... } </code> Kod şablonu bu. Ayrıntıları ihtiyacına göre düzenlersin. 5 nolu pine (T1) bağlayacağın sinyalin her yükselen kenarında Timer 1 sayacı 1 artar. 65536 olunca sıfırlanır ve yukarıda ISR... ile başlayan kesmeye gider. Kesme içinde 2 byte'lık değişkenimizi güncelliyoruz. Bu değişken timer 1 sayacı ile kombine edilince 4 byte'lık sayac olur. Bu sayaç ta 10 mhz lik bir frekansla 7 dakika sonra sıfırlanır. loop() içinde sayacı okuyup çeşitli işlemler yapabilirsin.
  • Kod şablonu için sağol.
    Aslında sorum daha ziyade denenmiş, doğruluk ve hassasiyet bakımından PIC'li benzerleri ile yarışabilecek bir örnek olup olmadığı noktasında idi.
    Diğer taraftan, ATMEL işlemci mimarisi hakkında pek bir bilgim olmamakla birlikte, mikro işlemcinin saat frekansı ile maksimum ölçebileceği frekans arasında birebir bağıntı olmasa gerek. Zira, -bunu söylemekten hoşlanmıyorum ama- pek çok PIC'li devrede 4 ve 10 MHz'lik saat frekansları ile çalışılarak 50 MHz'e kadar frekans ölçümü yapmak mümkün.
  • Datasheet' te detaylar yazıyor bakabilirsin. Tekrar baktım da Atmel bu konuda pek iyi değil. İşlemci saat frekansı ile ölçebileceği frekans arasında bağlantı var çünkü Atmelde timer direkt harici sinyal ile yürümüyor. Sinyal, işlemci saatinin her yükselen kenarında "sampled" ediliyor. Bu yüzden Atmel diyor ki teoride maksimum harici timer frekansı işlemci saatinin yarısı olabilir ama osilatördeki dalgalanmalar yüzünden siz en fazla clk/2,5 kadar yapın diyor. Yani sonuç olarak arduino ile 6,4 mhz'den fazla ölçemezsin.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.