سلام و خسته نباشید خدمت همه
من خواستم فرکانس متر با ATMEGA32 و کریستال خارجی 8مگاهرتز بسازم خب نوشتن کد کار ساده ایه
با تایمر کانتر 0 زمان 1ثانیه را حدودا ساختم
ورودی تایمرکانتر 1 رو به فرکانس مربعی دادم و یک متغیر به Overfllow دادم
هر یک ثاینه تعداد سر ریز ها رو دی 65536 ضرب کردم و با مقدار TCNT1 جمع کردم و در ال سی دی نشون دادم
سپس همه مقادیر صفر میشه تا یک ثاینه بعدی
حالا چند مشکل دارم که هر چی سرچ کردن حل نشد:
1- در شبیه سازی تا فرکانس 100k درست کار میکنه از 100k تا 500k بسیار کند میشه و از 500k به بالا تر کلا بهم میریزه و انگار اور فلو میشه و اعداد عجیب قریب
2- باز در شبیه سازی تا 100k درست کار میکنه ، در عمل کلا عددی که نشون میده پرت و پلاست و کاملا متفاوت با فرکانس ورودیه
من می خوان تا فرکانس 4مگا هرتز رو ببینم که نمیشه هر کار کردم.
ممنون می شم کمک کنید. من کد ها رو اینجا میذام
#include <mega32.h>
#include <stdio.h>
#include <alcd.h>
unsigned char d[20] , e[20] , i , t , j ;
unsigned long int f ;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
t++ ;
}
// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
i++ ;
}
while (1)
{
if(t>29){
lcd_clear() ;
t=0 ;
f=0 ;
f=i*65536 ;
f=f+TCNT1 ;
i=0 ;
TCNT1=0 ;
j++ ;
}
lcd_gotoxy(0,0) ;
sprintf(d,"Time=%d",j) ;
lcd_puts(d) ;
lcd_gotoxy(0,1) ;
sprintf(e,"Freq=%ld",f) ;
lcd_puts(e) ;
}
}