ايران ويج

نسخه‌ی کامل: سوالاتی راجع به کار تایمر و اندازه گیری فرکانس
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
اگه میشه لطف کنید و کمکم کنید تا این مطلب توی ذهنم درست حک بشه توی فهمش یکم مشکل دارم!
این مداری که میگم رو فرض کنید البته شکلش(شکل شماره1) روهم براتون میزارم:
یک میکروکنترلر ATMEGA8 را در نظر بگیرید که یک lcd ویک کمپراتور با فرکانس بالا به پایه تایمر1 که در این مدار نقش کانتر را دارد به آن وصل شده است. همچنین از یک کریستال خارجی 8MHz استفاده می کنیم.
می خواهیم فرکانس پالس های تولید شده توسط این کمپراتور با میکرو اندازه بگیریم و روی lcd نمایش دهیم حال میکرو چگونه اینکار را انجام می دهد؟
تایمر1 با فرکانس 8MHz یعنی دوره تناوب 125ns کار می کند یعنی پالس هایی که دریافت میکند با این دوره تناوب هماهنگ می کند؟
باتوجه به شرایط کمپراتور و میکرو اگه ما بخواهیم با تایمر2 مدت زمانی را برای کانتر1 تعیین کنیم که تعداد پالس ها را در این مدت زمان بشمارد و فرکانس را اندازه گیری کند چه مدت زمانی خوب است که بگزاریم؟
اگه مابخواهیم برای تایمر1 که پالس ها را دریافت می کند و این که چگونه باتوجه به تعداد پالس ها فرکانس را به دست می دهد برنامه ای بنویسیم روابط ریاضی آن چگونه میشود؟
اگر A فرکانس اندازه گیری شده توسط میکرو و B تعداد پالس ها باشد آیا روابط به صورت زیر می شوند؟
A = B * 65536
A = A + Counter1
A = A * 4
اگر درست است چرا باید اینگونه بنویسیم میشود به صورت دقیق و کامل بگویید!؟(مخصوصا *4 آخر)
آیا فرکانسی را که خودمان از روی پالس تولید شده کمپراتور اندازه میگیریم با فرکانسی که میکرو اندازه می گیرد باید برابر باشد؟
اصلا فرکانس کمپراتور را می توانیم بدون دیدن پالس آن اندازه بگیریم؟ چگونه؟
حال اگر شکل را تغییر دهیم(شکل شماره2) و قبل از کمپراتور خازن و سلف بگزاریم چه تغییری در فرکانس ایجاد می شود؟ و عملکرد مدار چگونه می شود؟ لطفا اگه میشه توضیحات رو به صورت جزیی بدید چون من یکم در فهمش مشکل دارم خواهش میکنم.
با توجه به تغییر شکل با همان شرایط قبل می توانیم فرکانس را اندازه بگیریم؟
خواهشم میکنیم تغییرات و تفاوت هایی که مدار جدید ایجاد می کند رو کامل برایم توضیح دهید خیلی خیلی ممنون میشم.

[attachment=8097]این هم شکل مدارها.
تو رو خدا اگه اطلاعاتی دارید که میتونه کمکم کنه در اختیارم بذارید خواهش میکنم به کمکتون احتیاج دارم.
والا خیلی بد انشا می نویسی
ولی خلاصه اگه بخوام بگم شما یه کانتر درست کن که پالسها رو بشمره و بعد یه تا یمر درست کن هر یک دهم ثانیه عدد کانتر رو بخونه و صفر کنه همین
عددی که خونده شده رو در ۱۰ ضرب کن نشون بده
نقل قول: ولی خلاصه اگه بخوام بگم شما یه کانتر درست کن که پالسها رو بشمره و بعد یه تا یمر درست کن هر یک دهم ثانیه عدد کانتر رو بخونه و صفر کنه همین
عددی که خونده شده رو در ۱۰ ضرب کن نشون بده
آقا هادی این روش خیلی خیلی خطاش زیاد نیس؟
دوست عزیزم اگه فرکانس متر میخوای من یه پروژه دارم که فرکانس رو تا چند مگا هرتز رو هم اندازه میگیره با دقت 1هرتز و مقدارش رو هم رو سون سگمنت نمایش میده.
میخوای تا واست تو سایت قرارش بدم؟
ممنون از جوابتون
اگه بزارید خیلی خوبه.
با تشکر
سلام.
اینم سورس + شبیه ساز فرکانس متر تا اندازه گیری چند مگا هرتز و نمایش مقدار آن با سون سگمنت.

مشخصات پروژه:
میکرو:Atmega32
کریستال:8000000
زبان:بیسیک

سورس:
کد:
$regfile = "m32def.dat" : $crystal = 8000000

Config Timer1 = Counter , Edge = Rising : Config Timer2 = Timer , Async = On , Prescale = 128
Config Porta = Output : Config Portd = Output

Segment Alias Porta

Defbyte S2 , S3 , S4 , S5 , S6 , S7 , S8
Dim Pa As Byte
Dim Hz As Long
Dim Hzz As String * 10
Dim Z As String * 10

Enable Interrupts : Enable Timer0 : Enable Timer2

On Timer2 Tim : On Counter1 Pal

Start Timer2

Main:
Do

Portd = Lookup(7 , Segment)
Segment = Lookup(s1 , Segmentdata)
Waitus 25
Portd = Lookup(6 , Segment)
Segment = Lookup(s2 , Segmentdata)
Waitus 25
Portd = Lookup(5 , Segment)
Segment = Lookup(s3 , Segmentdata)
Waitus 25
Portd = Lookup(4 , Segment)
Segment = Lookup(s4 , Segmentdata)
Waitus 25
Portd = Lookup(3 , Segment)
Segment = Lookup(s5 , Segmentdata)
Waitus 25
Portd = Lookup(2 , Segment)
Segment = Lookup(s6 , Segmentdata)
Waitus 25
Portd = Lookup(1 , Segment)
Segment = Lookup(s7 , Segmentdata)
Waitus 25
Portd = Lookup(0 , Segment)
Segment = Lookup(s8 , Segmentdata)
Waitus 25

Loop

End

Segmentdata:
Data &H3F , &H06 , &H5B , &H4F , &H66 , &H6D , &H7D , &H07 , &H7F , &H6F

Segment:
Data &H01 , &H02 , &H04 , &H08 , &H10 , &H20 , &H40 , &H80

Tim:
Stop Timer2
Hz = Pa * 65536
Hz = Hz + Counter1
Hzz = Str(hz)
Hzz = Format(hzz , "00000000")
Z = Mid(hzz , 8 , 1)
S1 = Val(z)
Z = Mid(hzz , 7 , 1)
S2 = Val(z)
Z = Mid(hzz , 6 , 1)
S3 = Val(z)
Z = Mid(hzz , 5 , 1)
S4 = Val(z)
Z = Mid(hzz , 4 , 1)
S5 = Val(z)
Z = Mid(hzz , 3 , 1)
S6 = Val(z)
Z = Mid(hzz , 2 , 1)
S7 = Val(z)
Z = Mid(hzz , 1 , 1)
S8 = Val(z)
Z = Mid(hzz , 0 , 1)
Pa = 0
Counter1 = 0
Timer2 = 0
Start Timer2
Return

Pal:
Incr Pa
Return

شبیه ساز:
[تصویر:  2012_11_18_200823.jpg]

موفق باشی....HeartHeart
خیلی ممنون از لطفتون
میشه به جای 7segment از lcd استفاده کنیم ؟
با تشکر
آره میشه.
خیلی آسونه که.
دیگه بجای این همه تابع فقط یدونه دستور مینویسیم برنامه هم خیلی خلوت میشه.
ببخشید آیا دلیل خاصی داره که از ATMEGA32 برای فرکانس متر استفاده کردید چون من یک فرکانس متر دیگه هم دیدم از ATMEGA32 استفاده کرذده بود !
مثلا اگه از ATMEGA8 استفاده کنیم چه مشکلی پیش می آید ؟
فرقی که نداره با هر دوش میشه انجام داد