تبلیغات
مهندسی برق، قدرت، کنترل، الکترونیک، مخابرات، کامپیوتر، رباتیک - کار با تایمر (timer) و شمارنده (counter) میکروکنترلر avr :
مهندسی برق، قدرت، کنترل، الکترونیک، مخابرات، کامپیوتر، رباتیک
مهندس در همه زمینه ها باید بداند
گروه طراحی قالب من گروه طراحی قالب من گروه طراحی قالب من گروه طراحی قالب من گروه طراحی قالب من
درباره وبلاگ


سلام دوستان عزیز من این وبلاگ رو برای دوست داران برق ساختم امیدوارم لذت ببرید انواع پروژه های برنامه نویسی میکرو و C و ویژال بیسیک و... را انجام میدهم

omidrouka@gmail.com

مدیر وبلاگ : امید روکا
نظرسنجی
کیفییت وبلاگ






گاهی اوقات نیاز داریم تا یک زمان بندی دقیق برای وظایف میکروکنترلر مشخص کنیم مانند وقتی که می خواهیم یک LED را هر یک ثانیه یک بار خاموش و روشن کنیم یا زمانی که می خواهیم یک ساعت بسازیم و ... ، در این موارد از تایمر میکروکنترلر استفاده می کنیم. اما گاهی اوقات نیز نیاز است تا تعداد رویدادهایی که خارج از میکروکنترلر اتفاق میافتد را بشماریم مثلاً قصد داریم تا تعداد بطری نوشابه هایی که بر روی نقاله در حال عبور است را بدانیم از امکان شمارنده یا کانتر (counter) میکروکنترلر استفاده می کنیم. در واقع بخش تایمر/کانتر چیزی نیست جز یک شمارنده که در داخل میکروکنترلر تعبیه شده است ،همان طور که میدانیم شمارنده ها برای شمارش نیاز به کلاک پالس دارند حالا اگر این کلاک پالس از کلاک داخلی خود میکرو تامین شده باشد ما تایمر خواهیم داشت اما اگر این کلاک پالس از خارج از میکروکنترلر تامین شود ما یک کانتر خواهیم داشت.


یکی از ویژگی های تایمر/کانتر در میکروکنترلر این است که کارکرد آن مستقل از CPU میکروکنترلر است. یعنی تایمر/کانتر قادر است فعالیتش را موازی با CPU انجام دهد.

همان طور که در بالا نیز به آن اشاره شد برای اینکه تایمر/کانتر بتواند کار کند نیاز به کلاک پالس دارد. تایمر/کانتر می تواند این کلاک پالس را از کلاک سیستم یا تقسیمی از کلاک سیستم یا از یک منبع کلاک خارجی تامین کند. زمانی که تایمر/کانتر از پایه خروجی کلاک دریافت می کند، سیگنال خروجی با فرکانس اسیلاتور CPU سنکرون می شود. بنابر این برای اطمینان از نمونه برداری مناسب بایستی زمان بین دو کلاک خروجی حداقل برابر یک دوره تناوب کلاک CPU داخلی باشد. کلاک خروجی در لبه بالا رونده کلاک داخلی CPU نمونه برداری می شود.

میکروکنترلرهای AVR (بجز MEGA64,MEGA128,MEGA256 و MEGA162 که 4 تایمر دارند) نهایتاً دارای 3 تایمر/کانتر هستند. برخی از آنها دارای عملکرد ساده و برخی دیگر دارای امکانات بیشتر نظیر تولید موج PWM ، حالت مقایسه CTC ، حالت تسخیر، عملکرد غیر همزمان و ... می باشند.

به عنوان مثال میکروکنترلر Atmega16 داری تایمر/کانتر به شرح زیر است:

1-  تایمر/کانتر صفر (Timer/Counter0) که یک تایمر کانتر 8 بیتی است یعنی نهایتاً تا عدد 255 می تواند باشد و پس از آن سرریز (Over Flow) می شود. این تایمر/کانتر در دو مد تایمر و کانتر کار می کند.

2-  تایمر/کانتر یک (Timer/Counter1) که یک تایمر کانتر 16 بیتی است یعنی نهایتاً تا عدد 65535 می تواند باشد و پس از آن سرریز می شود. از این تایمر/کانتر می توان در مدهای تایمر ، کانتر ، مقایسه ای (Compare) ، تطابق مقایسه (Compare Match) ، تسخیر (Capture) ، مدولاسیون عرض پالس (PWM) به صورت 8 ، 9 و 10 بیتی استفاده کرد.

3-  تایمر/کانتر دو (Timer/counter2) که یک تایمر کانتر 8 بیتی است یعنی نهایتاً تا عدد 255 می تواند باشد و پس از آن سرریز (Over Flow) می شود. از این تایمر/کانتر می توان در مدهای تایمر ، کانتر ، مقایسه ای (Compare) ، تطابق مقایسه ای (Compare Match) و مدولاسیون عرض پالس (PWM) به صورت 8 بیتی استفاده کرد.

پیکربندی تایمر و کانترهای میکروکنترلرهای AVR در نرم افزار بسکام:

دستور CONFIG TIMERX :

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

CONFIG TIMERX = TIMER/COUNTER

X : شماره تایمری که می خواهیم استفاده کنیم و می تواند 0 , 1 , 2 , 3 باشد.

TIMER/COUNTER : مشخص می کنیم از تایمر شماره X در مد تایمر استفاده می کنیم یا در مد کانتر.

دستور PRESCAL :

توسط این دستور می توانیم مقدار فرکانس کاری تایمر را مشخص کنیم. به این صورت که ما می توانیم فرکانس سیستم را بر اعداد 1 , 8 , 64 , 256 , 1024 تقسیم کنیم و به عنوان فرکانس کاری تایمر در نظر بگیریم. و به شکل زیر نوشته می شود.

CONFIG TIMERX = TIMER/COUNTER , PRESCALE = 1 | 8 | 64 | 256 | 1024

مثال :

$regfile = "m32def.dat"

$crystal = 8000000

Config Timer0 = Timer , Prescale = 256

در مثال بالا از تایمر صفر به عنوان تایمر استفاده شده و کلاک تایمر براربر است با:

CLK TIMER = 8000000/256 = 31250 HZ

دستور START TIMER و STOP TIMER :

از این دستورات برای شروع و پایان عملیات تایمر استفاده می کنیم.

دستور TIMERX = INITIAL VALUE :

ما می توانیم به تایمر شماره X یک مقدار اولیه بدهیم تا تایمر از آن عدد شروع به شمارش کند. این مقدار اولیه در تایمرهای صفر و 2 می تواند بین 0 – 255و در تایمر یک بین 0 - 65535 باشد.

دستور VAR = TIMERX :

توسط این دستور می توانیم مقدار تایمر X را بخوانیم.

دستور ENABLE TIMERX :

برای فعال کردن وقفه تایمر شماره X از این دستور استفاده می شود.

نکته: همانطور که در قسمت کار با وقفه در نرم افزار bascom avr گفته شد برای فعال کردن هر یک از وقفه ها باید ابتدا وقفه سراسری با دستور ENABLE INTERRUPTS فعال شود.

دستور ON TIMERX label :

با این دستور برنامه هنگام رخ دادن وقفه تایمر شماره X به زیر برنامه وقفه با برچسب label پرش خواهد کرد.

مثال :

$regfile = "m32def.dat"

$crystal = 8000000

Portd.0 = Outpot

Config Timer0 = Timer , Prescale = 256

Enable Interrupts

Enable Timer0

On Timer0 show

Dim A is Byte

Do

Loop

End

Show :

Timer0 = 6

Incr A

If A =125 Then

Toggle Portd.0

A = 0

End If

Return

در مثال بالا برنامه ای نوشته ایم که هر یک led که به portd.0 وصل است چشمک بزند.





نوع مطلب : رباتیک، مطلب، PLC، مدار منطقی، AVR، برق، الکترونیک، مخابرات، برنامه نویسی C++ & C، برنامه نویسی VB، کنترل، 
برچسب ها : کار با تایمر (timer) و شمارنده (counter) میکروکنترلر avr :، timer، counter، micro، میکروکنترلر،
لینک های مرتبط :
امید روکا
سه شنبه 1392/12/20
سه شنبه 1396/05/17 01:35
This blog was... how do you say it? Relevant!! Finally I have found something which helped me.
Thanks!
دوشنبه 1396/05/16 22:55
Good web site you have got here.. It's hard to find high-quality writing like yours these
days. I seriously appreciate people like you! Take care!!
یکشنبه 1396/05/15 20:10
It's fantastic that you are getting ideas from this paragraph as well as from our argument made at this
place.
شنبه 1396/05/14 05:08
Hi friends, pleasant piece of writing and good urging
commented here, I am truly enjoying by these.
جمعه 1396/05/13 13:43
It's going to be ending of mine day, but before finish I am reading this impressive paragraph to improve my know-how.
جمعه 1396/05/6 19:56
Hello, i think that i noticed you visited my weblog thus i got here to go back the favor?.I am trying to in finding issues to improve my website!I guess its ok to make
use of a few of your concepts!!
سه شنبه 1396/01/1 19:53
tnx
جمعه 1395/12/27 12:21
مرسی، کارم رو راه انداختی
امید روکاممنون
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر