تبلیغات
علمی - فرکانس متر دیجیتال
یکشنبه 8 دی 1387

فرکانس متر دیجیتال

   نوشته شده توسط: امید HERUOSNAM    

فرکانس متر دیجیتال

                     نویسنده: مسعود میراسماعیلی

 
 

در این برنامه به طرح یک فرکانس متر دیجیتال می پردازیم. این برنامه بیشتر برای یادگیری با طرز کار تایمرها، کانترها و نحوه کار با وقفه های موجود نوشته شده است. در این برنامه توسط تایمر صفر، زمانی حدود ۱ ثانیه درست شده و در طی این زمان تایمر یک بصورت کانتر کار کرده و تعداد پالسهای TTL وارد شده به پایه T1 یا همان PORTB.1 میکرو، را می شمارد. پس از سپری شدن یک ثانیه، تعداد پالسهای وارد شده به پایه T0 مشخص کننده فرکانس پالس ورودی است. در این برنامه بالاترین فرکانس اندازه گیری شونده 8MHZ است.

تولید یک ثانیه توسط T/C0 :

 ثانیه 0.983040 = 8000000 / 30* 1024 * 256

 تایمر یک بصورت کانتر عمل می کند و در صورت سر ریز شدن یعنی زمانی که تعداد 65536 پالس را شمرد، به زیر برنامه وقفه خود رفته و محتوای کانتر را با عدد صفر ریست می کند و دوباره شروع به شمردن می کند. پس از سپری شدن زمان یک ثانیه، تعداد پالسهای شمرده شده در زیر برنامه وقفه تایمر صفر مشخص شده و در LCD نمایش داده میشود. ورودی کانتر 1 نیز PULL-UP شده است تا فرکانسمتر کار خود را درست انجام دهد.

برنامه:

$regfile = "M32DEF.dat"                              'internal crystal 8000000
Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.2 , Db6 =Portc.3 ,Db7 = _
Portc.4 , E = Portd.2 , Rs = Portd.3
Config Lcd = 16 * 2
Config Timer1 = Counter , Edge = Rising
Ddrb.1 = 0 : Portb.1 = 1                        'PULL UP RESISTOR ACTIVATED
Config Timer0 = Timer , Prescale = 1024
Enable Counter1
Enable Interrupts
Enable Timer0
Enable Timer1
On Ovf1 Pulsecount
On Ovf0 Ovf0occures
Dim A As Long , I As Long , B As Byte
B = 0
Cls
Start Timer0
Do

Loop
End    'end program

Ovf0occures:
Incr I
If I > 30 Then
Stop Timer0
Cls : Home
A = B * 65536
A = A + Counter1
Lcd "FREQ IS :" ; A ; "HZ    "
B = 0
I = 0 : Counter1 = 0
Start Timer0
End If
Return

Pulsecount:
Incr B
Counter1 = 0
Return

تصویر مدار:

منبع: کتاب میکرو کنترلر های AVR - نوشته مهندس علی کاهه