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

آموزش کار با تایمر / کانتر صفر در پروژه ها با میکروکنترلر AVR (آموزش AVR #13)

سلام. آموزش کار با تایمر / کانتر صفر در پروژه ها با میکروکنترلر AVR (آموزش AVR #13) را آماده کردیم.

نحوه استفاده از Timer / Counter 0 در میکروکنترلر های AVR

در قسمت قبلی آموزش AVR ما با استفاده از میکروکنترلر AVR ، آنالوگ به دیجیتال ، سون سگمنت و سنسور LM35 یک دماسنج را ساختیم.

قسمت قبل : آموزش کامل پروژه دماسنج AVR با سنسور LM35 و سون سگمنت (آموزش AVR #12)

در قسمت های قبلی سری آموزش های AVR ما با تایمر کانتر ها به خصوص تایمر کانتر صفر آشنا شدیم. قبل از خواندن این مطلب لطفا قسمت های مربوط به آشنایی با تایمر / کانتر ها و آشنایی با تایمر / کانتر 0 را بخوانید.

در این قسمت از دوره آموزش AVR ما به طور کامل نحوه کار با timer counter صفر را یاد میگریم. توجه داشته باشید ما در قسمت های قبل به طور کامل با بخش تئوریه تایمر کانتر ها آشنا شده ایم و در این قسمت میخواهیم از Timer/Counter صفر در یک پروژه استفاده کنیم.

پروژه AVR برای کار با تایمر / کانتر صفر

در این آموزش هم مانند خیلی از آموزش های قبلی ، با ایجاد یک پروژه مطلب را آموزش میدهیم. ما در این پروژه میخواهیم نحوه ساخت یک ال ای دی چشمک زن که هر 8 میلی ثانیه یک بار روشن و خاموش شود را آموزش دهیم.

در این پروژه از کریستال خارجی 16 مگاهرتز و نرم افزار کدویژن استفاده میکنیم. همانطور که قبلا گفتیم با فرکانس کاری 16 مگاهرتز میتوانیم نهایتا 16 میکروثانیه زمان بسازیم.

حتما ببینید :  نحوه کار با تایمر / کانتر 1 در میکروکنترلر AVR (آموزش AVR #15)

با توجه به اینکه تایمر / کانتر شماره 0 ، یک تایمر کانتر با دقت 8 بیتی است، حداکثر میتواند تا 255 را بشمارد پس باید حاصل Timer Count ما در محدوده 0 تا 255 قرار بگیرد.

فرمول ها را که یادتان هست ؟

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

به جدول زیر دقت کنید.

کار با تایمر کانتر 0 در AVR

مشاهده میکنید که رنج مورد نظر ما، تنها در ضریب تقسیم 1024 قابل دسترسی است. در ضریب تقسیم های دیگر مقدار شمارش بیشتر از 255 است و از محدوده شمارش تایمر/کانتر صفر خارج است.

توضیحات کد پروژه

در ابتدا کتابخانه میکروکنترلر Atmega32 را فراخوانی میکنیم.

#include <mega32.h>
void timer0_configuration(){}
void main(){}

تابعی تعریف شده با نام timer0_configuration که پیکربندی تایمر/کانتر صفر در آن انجام میشود.

همانطور که در قسمت های قبل گفته شد، رجیستری داریم با نام TCCR0 که با سه بیت اول آن ضریب تقسیم را مشخص میکنیم. (اگر نمیدانید رجیستر TCCR0 چیست حتما قسمت 9 آموزش های AVR را بخوانید!)

void timer0_configuration(){
TCCR0 |=(1<<CS00)|(1<<CS02);
}

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

void timer0_configuration(){
TCCR0 |=(1<<CS00)|(1<<CS02);
TCNT0 |=;
}

میخواهیم ال ای دی را به پایه B0 میکروکنترلر Atmega 32 متصل کنیم. پس باید این پایه را به عنوان Output یا همان خروجی تعریف کنیم.

void main(){
DDRB = 0x01;
}

یه دونه حلقه بینهایت تعریف کردیم و داخلش یه شرط گذاشتیم که اگه مقدار شمارش شده به 124 یا احیانا بیشتر از اون رسید پین B0 رو Toggle (خاموش/روشن) کنه !

حتما ببینید :  برنامه نویسی ماژول وایفای ESP8266 با نرم افزار آردوینو + آموزش جامع

در پایان هم مقدار تایمر/کانتر صفر رو صفر کردیم تا شمارش مجددا از صفر شروع بشه و به 124 برسه !

یک حلقه بی نهایت void main تعریف میکنیم و در داخل آن یک شرط میگذاریم. که اگر مقدار شمارش به 124 یا بیشتر رسید پین B0 را روشن / خاموش کند. در پایان هم مقدار تایمر کانتر را صفر میکنیم تا شمارش از نو آغاز شود.

void main(){
DDRB = 0x01;
timer0_configuration();
while(1){
if(TCNT0>=124){
PORTB ^= (1<<PORTB0);
TCNT0 = ;  } } }

کد کامل :

#include <mega32.h>
void timer0_configuration(){
TCCR0 |=(1<<CS00)|(1<<CS02);
TCNT0 |=;
}
void main(){
DDRB = 0x01;
timer0_configuration();
while(1){
if(TCNT0>=124){
PORTB ^= (1<<PORTB0);
TCNT0 = ; 
 } } }

این آموزش نسبت به آموزش های دیگر کوتاه بود اما لازم بود این مطالب گفته شود. انشالله در قسمت بعدی آموزش در مورد تایمر / کانتر 1 صحبت میکنیم.

قسمت بعد : تایمر / کانتر یک در میکروکنترلر های AVR (آموزش کامل Timer / Counter 1)

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

محمد رحیمی

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

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

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

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