آموزش AVRآموزش الکترونیک

آموزش کامل تایمر / کانتر 0 در میکروکنترلر AVR (توضیح Timer/Counter صفر) ( آموزش AVR #9)

سلام. آموزش کامل تایمر / کانتر 0 در میکروکنترلر های AVR (توضیح Timer/Counter صفر) ( آموزش AVR #9) را آماده کردیم.

آموزش کامل Timer / Counter در میکروکنترلر AVR

در قسمت قبلی به طور کلی با نحوه کار تایمر کانتر ها در میروکنترلر های AVR آشنا شدیم. یعنی با فرمول ها و نحوه محاسبه زمان و…

قبل از خواندن این مطلب حتما قسمت قبل آموزش AVR را بخوانید :

قسمت قبلی : آموزش جامع تایمر / کانتر در میکروکنترلر های AVR ( آموزش AVR #8)

در پایان قسمت قبلی گفتیم که میکروکنترلر مورد نظر ما Atmega32 است و دارای تایمر/کانتر های زیر است :

  1. تایمر/کانتر 0 (8 بیتی)
  2. تایمر/کانتر 1 (16 بیتی)
  3. تایمر/کانتر 2 (8 بیتی)

در این آموزش تایمر / کانتر 0 که یک timer / counter هشت بیتی است را به طور کامل بررسی میکنیم.

بررسی کامل تایمر کانتر 0 در میکروکنترلر AVR

خب باید بدانید که تایمر کانتر صفر ، خود نیز سه نوع دارد :

  1. ساده (8 بیتی) – Atmega8
  2. پیشرفته (8 بیتی) – Atmega16 , Atmega32
  3. پیشرفته (16 بیتی) – Attiny13

این تقسیم بندی به صورت کلی است و میکروکنترلر های مختلف دارای خصوصیات مختلف هستند. اما برای بررسی همانطور که گفته شد ما مگا 32 را در نظر میگیریم یعنی نوع “پیشرفته 8 بیتی”.

میکروکنترلر Atmega 32

با یک مثال بحث را شروع میکنیم.

مثال برای فهمیدن تایمر کانتر صفر در AVR

ما قصد داریم یک فلاشر بسازیم که هر 6 میلی ثانیه یکبار چشمک بزند. همچنین فرکانس کالری میکروکنترلر را 32 کیلو هرتز در نظر میگیریم (فرضا*).

این فرکانس برای میکروکنترلر بسیار پایین است و همانطور که میدانید Microcontroller با فرکانس هایی در حدود مگاهرتز کار میکند. اما چون صرفا بحث یادگیریست این فرکانس را پایین در نظر گرفتیم تا ساده تر متوحه شوید.

حتما ببینید :  آموزش کامل ایجاد و آپلود کردن یک پروژه در Arduino (آموزش آردوینو #2)

در قسمت قبل ما یک فرمول معرفی کردیم :

محاسبه مدت پالس در AVR

توضیحات این فرمول به صورت کامل در جلسه قبلی داده شد. همانطور که گفتیم تایمر شماره 0 ، 8 بیتی است و میتواند حداکثر تا عدد 255 را بشمارد و تاخیر حداکثری آن نیز 8 میلی ثانیه است. پس طبق فرمول برای ساختن مدت زمان 6 میلی ثانیه ،باید 191 شمارش انجام شود.

بررسی رجیستر های مربوط به Timer / Counter صفر در میکروکنترلر AVR

در این قسمت ما رجیستر های مربوط به تایمر کانتر صفر را به طور کامل مورد بررسی قرار میدهیم.

بررسی رجیستر TCNT0

بررسی رجیستر های تایمر کانتر 0 در AVR

 

همانطور که در تصویر بالا میبینید این رجیستر حاوی مقدار تایمر/کانتر شماره 0 است. مقدار تایمر/کانتر در این رجیستر قرار میگیرد و به صورت اتوماتیک افزایش / کاهش پیدا میکند. این رجیستر به شمارنده 8 بیتی تایمر/کانتر صفر دسترسی مستقیم دارد و هم خواندنی است و هم نوشتنی. هنگام خواندن مقدار شمارش شده را برمیگرداند و به هنگام نوشتن مقدار جدید را به شمارنده انتقال میدهد.

بررسی رجیستر کنترلی TCCR0

بررسی رجیستر کنترلی تایمر / کانتر 0

در این بخش فقط بیتهای شماره 0و1و2 رو بررسی میکنیم.

بیت های 0 و 1 و 2 ؛CS02:00 – Clock Select Bits

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

  1. تایمر / کانتر را 0 یا غیرفعال کرد.
  2. فرکانس پالس تایمر / کانتر را که تقسیم تقسیم فرکانسی از فرکانس اصلی میکروکنترلر است را تعیین کرد.
  3. میتوان حساسیت timer/counter را به لبه بالا رونده یا پایین رونده اعمالی به پایه T0 را کنترل کرد.

اگر هیچ منبع پالس ساعتی انتخاب نشود، تایمر/کانتر غیر فعال خواهد شد.

انتخاب فرکانس ساعت برای تایمر کانتر

چون ما فرکانس کاری میکرو را 32 کیلوهرتز فرض کردیم (در مثال) و این فرکانس، فرکانس مناسبی برای کارکرد تایمر/کانتر هم هست، در نتیجه ما سطر دوم رر انتخاب میکنیم.یعنی نیازی به استفاده از تقسیم فرکانسی نداریم ! (در این مثال***)

حتما ببینید :  آموزش تصویری کتابخانه نویسی AVR در کدویژن (دانلود رایگان)

بررسی رجیستر TIMSK :

بررسی تایمر کانتر رجیستر timsk

این رجیستر یک رجیستر مشترک میان تمامی تایمر/کانترها میباشد. برای تایمر/کانتر صفر فقط از بیتهای 0 و 1 آن استفاده میشود و دیگر بیتها مربوط به تایمر/کانترهای دیگر میباشد !

بیت 0 ؛TOIE0 – Timer/Counter0 Overflow Interrupt Enable

با یک شدن این بیت وقفه سرریز تایمر/کانتر صفر فعال خواهد شد. لازم بذکر است که شرط فعال شدن این وقفه آن است که بیت فعال ساز وقفه (I) در رجیستر SREG نیز فعال باشد.

بررسی رجیستر TIFR :

بررسی رجیستر TIFR تایمر کانتر صفر

این رجیستر هم بین تمامی تایمر/کانترها مشترک میباشد. برای تایمر/کانتر صفر فقط از بیتهای 0 و 1 آن استفاده میشود !

بیت 0 ؛ TOV0 : Timer/Counter0 Overflow Flag

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

در قسمت بعد مبحث وقفه ها را مورد بحث قرار میدهیم.

قسمت بعدی : وقفه چیست ؟ آموزش کامل Interrupt در میکروکنترلر AVR ( آموزش AVR #10)

امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید مشاهده لیست پروژه های آردوینو
برچسب ها

محمد رحیمی

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا
بستن
بستن