به نام خدا : تو این مطلب از آموزش avr، میخوام یه ۳ تا پروژه avr با تایمر با مد ctc بزارم براتون که تو این پروژه ها ما میخوایم به کمک مد ctc فرکانس تولید کنیم، و یه نرم افزار محاسبه فرکانس هم براتون ته مطلب گزاشتم؛ یه مطب دیگه درباره مد ctc من گزاشتم که در زیر میبینید : آموزش جامع AVR جلسه ۱۸ Timer Counter CTC Mode
آموزش جامع AVR جلسه ۱۹ Timer Counter CTC Mode2
توجه : تو هر ۳ پروژه زیر شماتیک یکسان و به صورت زیر هستش، فقط باتوجه به تایمری که استفاده میکنید، اون کلید ۳ حالته(که در شکل زیر میبینید) رو روی پایه مقایسه ای مربوطه قرار بدید(برای تایمر۰ روی OC0 و برا تایمر۱ روی OCR1A و برا تایمر۲ روی OC2)
تولید فرکانس با تایمر ۰
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <mega16.h> #include <delay.h> void main(void) { int i; DDRB = (0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (1<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); PORTB = (0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // TIMER0 // Clock Timer0 = CLK/8 >>>>> CS00 = 0, CS01 = 1, CS02 = 0 // Mode = CTC >>>>> WGM00 = 0, WGM01 = 1 // Toggle OC0 on compare match >>>>> COM00 = 1, COM01 = 0 TCCR0 = (0<<FOC0) | (0<<WGM00) | (0<<COM01) | (1<<COM00) | (1<<WGM01) | (0<<CS02) | (1<<CS01) | (0<<CS00); //TIMSK = (0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0); //TIFR = (0<<OCF2) | (0<<TOV2) | (0<<ICF1) | (0<<OCF1A) | (0<<OCF1B) | (0<<TOV1) | (0<<OCF0) | (0<<TOV0); TCNT0 = 0; OCR0 = 50; while(1) { for(i=50; i<=250; i=i+50) { OCR0 = i; delay_ms(2000); } for(i=250; i>=50; i=i-50) { OCR0 = i; delay_ms(2000); } }; } |
تولید فرکانس با تایمر ۱
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include <mega16.h> #include <delay.h> void main(void) { int i; DDRD = (0<<DDD7) | (0<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); PORTD = (0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // TIMER1 // Clock Timer1 = CLK/8 >>>>> CS10 = 0, CS11 = 1, CS12 = 0 // Mode = CTC >>>>> WGM10 = 1, WGM11 = 0, WGM12 = 1, WGM13 = 0 // Toggle OC1A on compare match >>>>> COM1A0 = 1, COM1A1 = 0 >>>> B = disconnect. TCCR1A = (0<<COM1A1) | (1<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<FOC1A) | (0<<FOC1B) | (0<<WGM11) | (0<<WGM10); TCCR1B = (0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10); //TIMSK = (0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0); //TIFR = (0<<OCF2) | (0<<TOV2) | (0<<ICF1) | (0<<OCF1A) | (0<<OCF1B) | (0<<TOV1) | (0<<OCF0) | (0<<TOV0 ); //TCNT1L = 0X00; TCNT1H = 0X00; //OCR1AL = 0XF0; OCR1AH = 0X00; //OCR1BL = 0XFF; OCR1BH = 0X03; TCNT1 = 0; OCR1A = 100; //OCR1B = 0; while(1) { for(i=100; i<=1000; i=i+100) { OCR1A = i; delay_ms(2000); } for(i=1000; i>=100; i=i-100) { OCR1A = i; delay_ms(2000); } }; } |
تولید فرکانس با تایمر ۲
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <mega16.h> #include <delay.h> void main(void) { int i; DDRD = (1<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDB2) | (0<<DDD1) | (0<<DDD0); PORTD = (0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // TIMER2 // Clock Timer2 = CLK/8 >>>>> CS20 = 0, CS21 = 1, CS22 = 0 // Mode = CTC >>>>> WGM20 = 0, WGM21 = 1 // Toggle OC2 on compare match >>>>> COM20 = 1, COM21 = 0 TCCR2 = (0<<FOC2) | (0<<WGM20) | (0<<COM21) | (1<<COM20) | (1<<WGM21) | (0<<CS22) | (1<<CS21) | (0<<CS20); //TIMSK = (0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0); //TIFR = (0<<OCF2) | (0<<TOV2) | (0<<ICF1) | (0<<OCF1A) | (0<<OCF1B) | (0<<TOV1) | (0<<OCF0) | (0<<TOV0); //ASSR = (0<<AS2) | (0<<TCN2UB) | (0<<OCR2UB) | (0<<TCR2UB); TCNT2 = 0; OCR2 = 50; while(1) { for(i=50; i<=250; i=i+50) { OCR2 = i; delay_ms(2000); } for(i=250; i>=50; i=i-50) { OCR2 = i; delay_ms(2000); } }; } |
نرم افزار کمکی تولید فرکانس AVR
یه نرم افزارکی نوشتم که به کمکش میتونید فرکانس مورد نظرتون رو تولید کنید و ببینید برا تولیدش بهترین مقادیر برا تولیدش چیه؛ برا توضیحات بیشتر و دانلود میتونید مطلب زیر رو بخونید : نرم افزار کمکی تولید فرکانس AVR
مهمان
با سلام . ایا با ctc میشه درایور استپ موتور را کنترل کرد . مثلا تعداد ۱۰۰ پله حرکت کنه و استپ کنه . ممنونم از راهنماییتون
مهمان
سلام مهدی جان
من منطق اون حلقه while رو اصلا متوجه نمیشم. میشه یه خورده توضیح بدید. اون زمان 2000 میلی ثانیه برای چیه؟ و میشه بگی توسط این دستورات چه فرکانسی تولید میشه و نحوه محاسبشو؟
خیلی ممنون
مهمان
سلام دوست دارم سخت افزارم قوی بشه میتونید کمکم کنید اقا مهدی یا بچه های دیگر سایت (برنامه نویسی نیمه پیچیده ام بد نیست سخت افزار کم میارم)
نویسنده این مطلب
سلام
والا برنامه نویسی که چیز خاصی نداره و کتاب مطاب براش زیاده و اگه بتونی کتابخونه قطعه ای رو بنویسی یعنی در سطح خوبی هستش
برا سخت افزار هم چون ما با میکرو کار میکنیم یه طراحی pcb باید بلد باشی که خیلی خیلی مهمه…
و برا کار با یه سری قطعات که چیز خاصی ندارن مطلب تو نت زیاده اما بعضی قطعات هستن که باس کتاب هایی دربارشون بخونی….مثلا bjt
ولی باز اینا هم میره تو بحث آنالوگ و کار ما دیجیتاله و به ما(به نظر من) مربوط نیست.
در کل مثلا کار با اپ امپ رو بلد باشی(مثلا یه کتاب چند تا پروژه عملی و… انجام داده باشی و خونده باشی) میای خروجی سنسور رو بهش میدی و تقویت میکنی و مثلا میدی به میکرو، فعلا میتونی راه اندازه سخت افزار ربات مسیر یاب رو کار کنی که هم توش اپ امپ داره و هم مدارش سادس
فک کنم منظورت از سخت افزار همینا بوده باشه….اگه اشتباه فهمیدم منظورت رو دقیقا بگو.
مهمان
سلام من تازه الکترونیک قبول شدم و به این مباحث هم علاقه مند ام فقط من زبان C رو نمی دونم و با بیسیک و بسکام کار کردم ولی اصلا زبان سی رو نمی دونم اگع بخوام زبان سی رو شروع کنم از کجا باید شروع کنم ؟؟؟ اصلا با کد ویژن یا برنامه های مرتبط با این زبان کار نکردم
یه راهنمایی میکنین ممنون 
سایت شما خیلی جالب و کامله واقعا دستتون هم درد نکنه
نویسنده این مطلب
سلام
والا مطالب سایت رو همش رو یه بار ببینی دست میاد که کدوم مطالب رو باس اول باید بخونی
ولی باید بگم به شما که باید برا زبان سی(که اگه یاد بگیریش شرط میبندم که پشیمون نمیشه) میتونید کتاب آموزش زبان c که برا دانشگاه پیام نور هستش رو بخونید….یه سرچی کنید کتابش رو پیدا میکنید….برا پیام نور هستش….خیلی کامله….من همش رو خوندم.
پروژه هایی که قبلا گزاشتم ساده هستن….مطالب اخر سایت(قدیمی تر) ساده تر هستش تا مطالب جدید تر
کاری که گفتم انجام بده و خبرم کن….
مهمان
سلام بعد از سه روز به سایت سر زدم هم قالب نظرات جالب شده هم این مطلب و مطلب قبلی خوب بود استفاده کردم .. ممنون خیلی
نویسنده این مطلب
سلام
لطف دارید شما
نویسنده این مطلب
راستی اگه چیزی به فکرتون میرسه بگید تا در صورت نیاز به سایت اضافه کنم
من زیاد اهل رسیدگی به زیبایی سایت نیستم….
مهمان
سلام آقا مهدى مشتاقانه منتظر مطالب spi و eeprom آردوینو هستیم
نویسنده این مطلب
سلام
والا تو فکرش هستم
فعلا میخوام یه چند تا مطلب Avr رو کامل کنم بعد بیام سراغ….
مهمان
آقا یه سوال دیگه. ATMEGA32 با ATMEGA32A چه فرقی داره؟ یه برنامه رو با هر دو تست میکنم با ۳۲ جواب میده با ۳۲A جواب نمیده! راه حل چیه؟
نویسنده این مطلب
نمیدونم
چرا دورغ بگم
دیتاشیتون رو ببین
===========
مهمان
آقا دمت گرم صد در دنیا هزار در آخرت نصیبت بشه به حق پنج تن. خیلی حالا دادی.
مهمان
قربون دستت. جبران کنم
نویسنده این مطلب
دانلود درایور پروگرامر DAP300
مهمان
این رو دیده بودم لینک اون پایین کار نمی کنه اگر منظورت اونه.
الان تو دیوایس منجر ویندوز اینطوریه: USB Serial که درایورش رو نشناخته.
نویسنده این مطلب
وایسا تاپلود بشه و لینکش رو بزارم اینجا
مهمان
سلام آقا دمت گرم خیلی کارت درسته.
ببخشید سوال بی ربط میکنم. من یه مشکلی تو پروگرمر AVR خوردم. یه پروگرمر DAP 300 شرکت دلتا تراشه دارم درایورش رو گم کردم. احتمالا شما یا دوستان کسی درایورش رو داره؟ برای ویندوز ۷ ۳۲ یا ۶۴ بیتی.
اینم عکس پروگرمر
***
نویسنده این مطلب
سلام
اینو ببین
***
اگه کارت راه افتاد بگو و نیوفتاد باز هم بگو…