الکترونیک، رباتیک و مکانیک

آموزش به زبان بسیار ساده و روان (از صفر تا بینهایت)

الکترونیک، رباتیک و مکانیک

آموزش به زبان بسیار ساده و روان (از صفر تا بینهایت)

الکترونیک، رباتیک و مکانیک

با سلام و عرض ادب خدمت هموطنان عزیز
در این سایت قصد داریم موضوعاتی که در حیطه الکترونیک ،مکانیک و برنامه نویسی ربات ها دارای جذابیت خاصی می باشد رو آموزش بدیم. امیدواریم که با نظرات شما عزیزان شاهد آموزشهای جامعی در این زمینه باشیم.
با تشکر

نویسندگان
پیوندهای روزانه
طبقه بندی موضوعی
آخرین نظرات

پنجشنبه, ۳ دی ۱۳۹۴، ۰۹:۳۳ ب.ظ

۰

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

پس با ما در ادامه مطلب همراه شوید ...

به نام خدا

سلام دوستان عزیز

 

یادتونه که در قسمت های قبلی عملکرد تایمر/کانتر شماره صفر رو بررسی کردیم،اما در مورد برنامه نویسیش صحبتی نکردیم و الان وقتشه که بریم سراغ برنامه نویسی.

سعی میکنم یه مقدار سطح توضیح دادنم رو حرفه ای تر کنم،اما قول میدم که برای دوستان مبتدی اشکالی پیش نیاد.

بعد از این همه توضیح و برنامه نویسی و آموزش،باید یه مقدار فسفر بیشتر بسوزونید تا ذهنتون بیشتر درگیر بشه.laugh

 

ولی به هیچ وجه از این صحبتهای من نگران نشید ...

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

 

حتما،حتما،حتما  بخش های آموزشی وبلاگ رو به ترتیب شماره بخونید و بیاین جلو.

وگرنه مسئول متوجه نشدن مطالب و یا کج فهمی مطالب،خودتون هستید !!! cool


طبق معمول یه مسئله مطرح میشه و سعی میکنیم حلش کنیم . اوکی ؟!

 

تعریف مسئله :

 

قصد داریم یه چشمک زن تک لامپی بسازیم که هر 8 میلی ثانیه،چشمک بزنه ! (فکر کردین من به این الکیا بیخیال چشمک زن میشم ؟! cheeky)

برای تنوع بیشتر،از کریستال خارجی 16 مگاهرتز استفاده میکنیم.

 

با فرکانس 16 مگاهرتز،حداکثر زمانی که میتونیم بسازیم 16 میکرو ثانیه است. (اینا رو قبلنا گفتما،یادتون هست ؟Innocent)

اما حالا میخوایم یه زمان 8 میلی ثانیه ای بسازیم،پس میریم سراغ انتخاب ضریب تقسیم مناسب !

در مورد انتخاب ضریب تقسیم در بخش 12 آموزشی وبلاگ توضیحاتی داده شده.(برای همینه که میگم به ترتیب مطالبو دنبال کنید.)

 

برای این قسمت،باید یخورده چَپَکی به فرمول و ضریب تقسیم نگاه کنیم ! Laughing

یعنی با توجه به اینکه تایمر/کانتر شماره صفر 8 بیتیه و حداکثر میتونه تا 255 رو بشماره،باید حاصل TimerCount فرمولمون در رنج 0-255 قرار بگیره !

 

فرمولها هم که اینجوری بود :

 


به جدول زیر هم نگاه کنید :

 

 

مشاهده میکنید که رنج مورد نظر ما،تنها در ضریب تقسیم 1024 قابل دستیابیه !

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

 

بریم سراغ برنامه نویسی و مقدار دهی رجیسترها :

#include <mega32.h>

void timer0_configuration(){}
void main(){}

 

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

 

رجیستری داریم تحت عنوان TCCR0 :

 

با سه بیت اولش ضریب تقسیم تعیین میشه،طبق جدول زیر :

 

 

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

 

یه رجیستر دیگه هم داشتیم به نام TCNT0:

 

یه رجیستر دیتاست که حاوی مقدار تایمر/کانتر صفره !

برای اطمینان بیشتر،مقدارش رو در ابتدای کار صفر میکنیم !

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

 

LED مون رو هم به پایه B0 میکروکنترلر وصل میکنیم،پس باید B0 به صورت خروجی تعریف بشه !

void main(){
DDRB = 0x01;
}

خب اینم از این!

من اول کل کدهای تابع main رو مینویسم،بعد دربارش توضیح میدم :

void main(){

DDRB = 0x01;

timer0_configuration();

while(1){

if(TCNT0>=124){

PORTB ^= (1<<PORTB0);
TCNT0 = 0; 
}
}
}

 

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

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

 

پس کل کدها به این صورت میشه :

#include <mega32.h>

void timer0_configuration(){

// Prescale : 1024
TCCR0 |=(1<<CS00)|(1<<CS02);

// Clear Timer/Counter0 Data
TCNT0 |=0;
}

void main(){

// Configure B0 As Output
DDRB = 0x01;

// Load Timer/Counter0 Configuration
timer0_configuration();

// Start Loop
while(1){

// Check Timer/Counter Value
if(TCNT0>=124){

// Toggle PORTB0 
PORTB ^= (1<<PORTB0);

// Reset Timer/Counter0 Value
TCNT0 = 0; 


}
}
} 

این پست کوتاه رو به پایان میرسونم.

باور کنید که اندازه پست باید از این هم کمتر میشد،چون به غیر از کدها بقیه مطالب تکراری بود و قبلا راجع بهشون مفصل بحث شده !

دوستان نظراتتونو بگین راجع به مطالب و اگر مشکلی بود مطرح کنید.

 

موفق باشید.


منبع : www.noise.blog.ir

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی