PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : چگونه با تایمر ها فرکانس متر بسازیم ؟



mortezamoj
07-02-2013, 18:32
سلام بچه ها چجوری با تایمر های میکروکنترلر و کانترهاش فرکانس متر بسازیم ؟یه مداری که فرکانس ورودیو اندازه بگیره ؟

roohlla
07-02-2013, 19:15
برای این کار دو راه وجود داره ، استفاده از تایمر توی مد کپچر و استفاده از تایمر توی مد کانتر . توی مد کانتر ما میایم تایمر رو روی مد کانتر فعال کرده و فرکانسمون رو به پایه ی tX خارجی اون کانتر اعمال میکنیم . بعدش بسته به فرکانس میایم یه تاخیر ایجاد میکنیم . مثلا 100 میلی ثانیه . در ضمن وقفه ی سر ریز تایمر رو هم فعال میکنیم و توی روتین اون تعداد سر ریزها رو توی یه متغیر n ذخیره میکنیم . خوب بعد از 100 میلی ثانیه اگه قبل از شروع اندازه گیری مقدار tcnt رو برابر 0 قرار داده باشیم فرکانسمون خواهد بود :
tcnt+n*256)*10)
البته این 256 برای حالتی هست که ما از تایمر 8 بیتی استفاده میکنیم . در غیر این صورت این مقدار برابر حد اکثر مقدار کانتر به علاوه ی 1 خواهد بود .
روش دوم استفاده از تایمر کانتری هست که قابلیت کپچر داشته باشه . توی این حالت بعد از قرار دادن تایمر توی حالت کپچر اون رو تنظیم میکنیم تا در هر لبه ی بالا رونده کپچر انجام بشه . بعد تفاوت این دو مقدار ضرب در دوره ی کلاک تایمر میشه دوره ی موج مورد اندازه گیری .
برای این مورد من یه پروژه ی سنسور رنگ ضمیمه میکنم که برای تعیین فرکانس خروجی سنسور اومدم از این مد استفاده کردم .

mortezamoj
07-02-2013, 22:55
اینو هم دو قسمتی که پایین لیبل هست و بعد از سرریزی میفته روشو توضیح بده
$regfile = "m32def.dat"
$crystal = 8000000
'----------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Portc.7 , E = Portc.6 , Db4 = Porta.2 , Db5 = _
Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
Cursor Off
'-----------
Config Timer1 = Counter , Edge = Rising
Ddrb.1 = 0
Portb.1 = 1
'-------
Config Timer0 = Timer , Prescale = 1024
'---------------
Enable Timer1
Enable Timer0
Enable Interrupts
'---------------------
On Ovf1 Pulse_counter
On Ovf0 Yazdkit
'-------------------
Dim A As Long , B As Byte , I As Long
B = 0
'----------------------------
Cls
Locate 1 , 1
Lcd "Frequency meter"
Locate 2 , 1
Lcd "mortezamoj"
Wait 5
Cls
'-----------------------
Start Timer0
'------------
Do
Loop
End 'end program

Yazdkit:
Incr I
If I > 30 Then
Stop Timer0
Cls
Home
A = B * 65536
A = A + Counter1
Lcd "frequency:"
Locate 2 , 1
Lcd A ; " HZ"
B = 0
I = 0
Counter1 = 0
Start Timer0
End If
Return
'Pulse_counter:
Incr B
Counter1 = 0
Return