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

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

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

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

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

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

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

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

۰

 

پنجمین قسمت کارگاه عملی با تشریح "برنامه نویسی تایمر/کانتر دو" آماده شده است.

 

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

به نام خدا

 

بی مقدمه میریم سراغ کدنویسی !

 

 

کد نویسی به زبان سی در محیط کامپایلر کدویژن :

 

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

 

 #include <mega32.h>

در ابتدای کار،طبق معمول فایل سرآیند مربوط به میکروکنترلر مورد نظرمون که اینجا ATmega32 هست رو اضافه میکنیم.

 

#include <mega32.h>

void timer2_configuration (){}

تابعی تعریف کردیم با نام : timer2_configuration ، که تنظیمات اولیه و پیکربندی تایمر/کانتر دو رو در اون انجام میدیم.

 

#include <mega32.h>

unsigned int overflow;

void timer1_configuration (){

TCCR2 |=(1<<CS21)|(1<<CS22); // Prescaler=256
TIMSK |=(1<<TOIE2); // Enable Timer2 Overflow

TCNT2=0; // Initialize Timer/Counter2

#asm ("sei"); // Enable Global Interrupts

overflow = 0; // Initialize variable

}

حرف جدیدی نزدم !

کامنت های روبروی هر کد رو که بخونید متوجه میشید.

 

 

بریم سراغ تابع main :

void main(){

DDRB.0 = 1; // Config B.0 As Output Pin
timer2_configuration (); // Load Timer2 Configuration

}

پین B.0 همون پایه ای هست که میخوایم بهش LED رو وصل کنیم.پس خروجی تعریف میشه !

در خط بعدی،تابع timer2_configuration رو فراخوانی میکنیم،تا تایمر/کانتر شماره دو پیکربندی بشه.

 

در قسمت بعد داریم :

while(1){

if(overflow>=12){  
if(TCNT2>=53){ 

PORTB.0 ^=(1<<0); // Toggle LED
TCNT2=0; // Reset Timer/Counter2 Variable
overflow=0; // Reset Overflow Counter

}
}
}

این قسمت هم که مانند قبل بوود !

توضیحاتشو قبلا دادم (اینکه باید 12 بار تایمر/کانتر2 سرریز بشه و در دور 13 ام تا 53 بشماره !)

 

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

اگه گفتید چی ؟؟؟ ....

.

.

.

.

.

.

.

.

تنبل نباش برو یه نگاه کن ببین کجا رو ننوشتیم هنوز ؟! laugh

.

.

.

.

.

.

.

.

.

.

امان از درد تنبلی !!!!!! cheeky

خودم میگم اصن.

شما نمیرید ببینیدکه چکار باید بکنیم !

 

اینجا ما از وقفه استنفاده کردیم.

پس زیر روالش کو ؟؟؟؟؟؟؟؟؟؟؟

 

بفرمایید :

interrupt [TIMER2 OVF] void timer2_isr (void) {

overflow++; // Add A Unit To overflow Variable

}

 

 

این هم از کل کدها،بصورت یکجا :

#include <mega32.h>

void timer2_configuration (){}

TCCR2 |=(1<<CS21)|(1<<CS22); // Prescaler=256
TIMSK |=(1<<TOIE2); // Enable Timer2 Overflow
TCNT2=0; // Initialize Timer/Counter2

#asm ("sei"); // Enable Global Interrupts

overflow = 0; // Initialize variable

}

interrupt [TIMER2 OVF] void timer2_isr (void) {

overflow++; // Add A Unit To overflow Variable

}

while(1){

if(overflow>=12){  
if(TCNT2>=53){ 

PORTB.0 ^=(1<<0); // Toggle LED
TCNT2=0; // Reset Timer/Counter2 Variable
overflow=0; // Reset Overflow Counter

}
}
}

 

این هم از این یکی پست ...

توضیح کم دادم،چون قبلا اینها رو توضیح دادم.

خواهشا اگه خودتون پیگیر ماجرا نیستید،منو متهم نکنید.(متهم به ... (سه نقطه) !!! cool)

 

منتظر بخش های بعدی آموزش باشید که خیلی خیلی جالب و مفید خواهد بود.

در بخش های بعدی میخوام مُدهای مختلف تایمر/کانتر ها (CTC,PWM) رو توضیح بدم که مطمئنم خیلی با یادگرفتنشون حال میکنید.

 

فعلا ...

منبع : 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="">
تجدید کد امنیتی