Haklısınız RB6 pininde 32.768kHz kristal var. Sayacağım sinyali RB0/INT pininden(6 nolu bacak) giriyorum. Yanlış yazmışım. Yalnız benim comparator kapalı. RB0 da yüksek kenar interruptlarını sayıyorum. 1 saniyede oluşan interrupt sayısının frekansa eşit olması gerektiği mantığıyla. ulan bir susar mısın?

Hocam merhabalar, Koda çok ayrıntılı bakamadım ancak dikkatimi çeken bir nokta var. Puls değerini arttıran fonksiyonu tanımlamışsınız. Ancak kesme vektrü şeklinde değilde interrupt şeklinde isim vermişsiniz. PIC mimarisine hakim değilim ancak interrupt fonksiyon_adı şeklinde yada ISR şeklinde ilgili vektr tanımlaması yapmanız gerekmiyor mu? Edit: Şimdi inceledim sizin yazdığınız gibiymiş. Ek olarak iki adet intteruptınız var. Timer ve external interrupt. Global interrupt fonksiyonunuz içerisinde sadece RB6 dan gelen interrupt'ı denetleyip frekans değerini arttırmayı deneyebilirsiniz aercys tarafından 14/Kas/16 01:23 tarihinde düzenlenmiştir 0x62 0x75 0x6e 0x75 0x20 0x79 0x61 0x7a 0x61 0x6e 0x20 0x74 0x6f 0x73 0x75 0x6e 0x2c 0x20 0x6f 0x6b 0x75 0x79 0x61 0x6e 0x61 0x20 0x6b 0x6f 0x73 0x75 0x6e

İyi geceler, PIC 16f628a ile bir frekans sayiciyapmaya çalışıyorum. 1 saniye içerisinde RB6/INT pinine gelen pulsları sayacağım. 1 saniye tutmak için TMR1 timer'ını 32.768kHZ harici osilatr ile kullanıyorum. Proteus 8.5 ile devreyi kurdum. RB6'ya 10000Hz'lik sinyale kadar doğru gsteriyor fakat daha yüksek frekanslarda eksik sayıyor. Forumlarda RB6 pininin üst limitinin 50MHz civarında olduğunu yazmışlar. benim sayaç daha 20kHz'te doğru okuyamıyor. Acaba bu simülasyon olduğu için mi byle? Kodları mikroC for PIC 6.6.2'de yazıp derliyorum. Bir ekran grüntüsü ve kodlar aşağıdaki gibidir; // Lcd pinout settings sbit LCD_RS at RA1_bit; sbit LCD_EN at RA0_bit; sbit LCD_D4 at RB5_bit; sbit LCD_D5 at RB4_bit; sbit LCD_D6 at RB3_bit; sbit LCD_D7 at RB2_bit; // Pin direction sbit LCD_RS_Direction at TRISA1_bit; sbit LCD_EN_Direction at TRISA0_bit; sbit LCD_D4_Direction at TRISB5_bit; sbit LCD_D5_Direction at TRISB4_bit; sbit LCD_D6_Direction at TRISB3_bit; sbit LCD_D7_Direction at TRISB2_bit; unsigned long frekans = 0; void interrupt void ayarlar void frekans_goster { char i, n, k, dijit ; n = 0; // dijitleri ayirarak diziye yaz do while (f > 0 && n < 10); k = 13; // gosterilecek sembol sayisi: 10 basamaklı sayı + 3 virgul for(i = 0; i < 11; i++) { if (k 2 || k 6 || k 10) if (i < n || i 0) else k--; } } void Lcd_baslat void main { ayarlar ; Lcd_baslat ; while(1) { GIE_bit = 0; //Genel kesmeler pasif TMR1ON_bit = 0; //TMR1 kapali frekans = 0; //frekans sayaci sifirlandi TMR1L = 0b00000000; //TMR1 degerleri yuklendi TMR1H = 0b10000000; TMR1IF_bit = 0; //TMR1 kesme bayragi indirildi INTF_bit = 0; //RB0/INT kesme bayragi indirildi TMR1ON_bit = 1; //TMR1 basladi GIE_bit = 1; //Genel kesmeler aktif while (! TMR1IF_bit) //1 sn tutuluyor GIE_bit = 0; TMR1ON_bit = 0; frekans_goster ; } } ulan bir susar mısın?

pic ile haşır neşirim ama hiç frekans sayıcı yapmadım. ncelikle TMR1 timer'ını 32.768kHZ harici osilatr ile kullanıyorum demişsin ve RB6'ya 10000Hz'lik sinyale kadar doğru gsteriyor demişsin. TMR1 harici osc kullanıyorsan RB6 ve RB7 pinlerine 32.768 kristal bağlamış olman gerekiyor, peki buradan nasıl frekans lçtün, ben mi yanlış anladım? Yanılmıyorsam en yüksek frekans lçümü için sanırım işlemci en son saat hızında(harici XT ile 20MHz), en yüksek sayan timer, en yüksek blme oranında capture-compare şeklinde çalıştırılması gerekiyor. Yanılıyor da olabilirim fakat nette picli çok frekansmetre rneği var. Camınızı kırar, duvarınıza işer, bisikletinize biner, tekerini keser, arabanızı çizer, zilinize basar kaçarım. Kısacası ben annenizin sokağa çıkarken uzak dur dediği çocuklardan biriyim.