به نام خدا : سلام خدمت دوستان ، تو این مطلب از آموزش AVR، میخوام تایمر/کانتر تو AVR رو کارش رو “ی سره”! کنم، تو این مطلب انشاالله میخوام انواع مد تایمر در میکروکنترلر AVR بگم و توضیح هر کدوم و پروژه هایی ازشون برای نمونه ( یا لینک دادن به مطالب مربوطه )، دیگه عرضم به حظورتون میخوام به توضیح ریجستر های تایمر بپردازم، دیگه چیزی نیست، کل مطلب همینه
آموزش جامع AVR جلسه ۲۰ Timer Counter Tutorial
انواع مد تایمر که تو مگا ۱۶ و ۸ و ۳۲ ما داریم.(بقیه میکرو ها رو اطلاع ندارم و باس بری دیتاشیتشون رو ببینید. )
mode/etc | Normal | CTC | Fast PWM | Phase Correct PWM |
---|---|---|---|---|
کاربرد | تولید آسان زمان | تولید آسان فرکانس و زمان مورد نیاز |
تولید پالس با قابلیت تغییر آسان D.C |
مثل Fast PWM هستش فقط متقارن هستش |
نحوه شمارش |
از Bottom شروع میشه (مقدارش رو میشه تعیین کرد) تا MAX (در تایمر ۸ بیتی برابر ۲۵۵ و در تایمر ۱۶ بیتی برابر ۶۵۵۳۵) و بعد دوباره از Bottom شروع میشه تا…. |
مثل مد نرمال هستش تقریبا، از Bottom میشموره تا TOP (که این TOP رو میشه مقدارش رو تعیین کرد، با توجه به کاربرد این مد ما اکثرا Bottom رو صفر میزاریمش) و بعد مقدارش برابر Bottom میشه و دوباره میشموره تا TOP و…. |
از ۰ میشموره تا MAX (تایمر های ۸ بیتی) و تا TOP (برا تایمر ۱۶ بیتی) و بعد ۰ میشه و در این بین هر موقع مقدار ریجستر TCNT0 (که مقدارش این تعداد کلاک شمرده شده درش قرار میگیره-همین ۰ تا MAX رو میگم) با مقدار ریجستر OCRn برابر شد خروجی OCn تغییر میکنه. |
مثل مد Fast PWM هستش فقط وقتی به MAX(هشت بیتی) یا TOP (شونزده بیتی)رسید شروع میکنه به نزولی شمردن تا Bottom و دوباره صعودی میشه و… |
کاربرد در پروژه |
راه اندازی سرو موتور (پروژه ۲) و هر چیزی که نیاز به تغییر ولتاژ دارد |
|||
آموزش های اختصاصی |
آموزش AVR جلسه ۱۶ | آموزش AVR جلسه ۱۸
|
||
نرم افزار های مرتبط |
نرم افزار کمکی تولید فرکانس AVR |
توجه : برا بحث کانتر هم یمتونید مطلب مقابل رو بخمنید : آموزش جامع AVR جلسه ۱۷ آموزش Counter
خوب خوب خوب، اینجا لازمه ریجستر ها رو توضیح بدم، چیزی که تو مطالب قبلی نگفتم و گفتم برید از فلان سایت که خوب توضیح داده بخونید، ولی الان لازمه که خودم توضیح بدم.(مطالبی که در زیر میزارم از دیتاشیت مگا ۱۶ هستش، که برا مگا ۳۲ و ۸ هم تقریبا همینه فک کنم، ولی برا میکرو های دیگه باس برید و دیتاشیتش رو نگاه کنید ببیننید همینه یا نه )
توجه ۰ : تو هر سه تایمر ریجستر های TIMSK و TIFR مشترک هستن.(چند تا بیتش برا تایمر ۰، چندتاش برا ۱ و چند تا از بیت ها هم برا تایمر ۲ هستش، هنگامی که مثلا از تایمر ۲ استفاده میکنیم، بیت های مرتبط با تایمر ۰ و ۲ رو در دو ریجستر فوق ۰ قرار میدیم، بهشون صفر میدیم، صفرشون میکنیم و… )
توجه ۱ : محتوای شمارش تایمر تو ریجستر TCNTn قرار میگیره، که تو تایمر صفر اسمش TCNT0 هسش و تو تایمر ۲ برابر TCNT2 هستش و تو تایمر ۱ هم TCNT1 هستش.(همون طور که میبینید فقط رقم آخرش تغییر کیره به خاطر همین به طورت کلی اگه بخوان از محتوای شمارش تایمر جایی اسم ببرن به صورت کلی میگن TCCRn).
توجه ۲ : ریجستر مقایسه هم مثل بالا هستش، به صورت کلی بهش میگن OCRn که برا تایمر ۰ میشه OCR0 و برا ۲ میشه OCR2 و برا تایمر ۱ چون ۲ تا ریجستر به نام های A و B داره میگن OCR1A و OCR1B ، تایمر های ۰ و ۲ یه ریجستر مقایسه دارن و تایمر ۱ دو تا دونه داره.(ای کوفتش بشه )
توجه ۳ : محتوای ریجستر OCRn همواره با محتوای ریجستر TCNTn مقایسه میشود، و هر موقع که با هم برابر شدن، تو کلاک بعدی وقفه مقایسه رخ میده(البته اگه وقفه مقایسه فعال باشه) و فلگ مربوطه ۱ میشه.
Whenever TCNT0 equals OCR0, the comparator signals a match. A match will set the Output Compare Flag (OCF0) at the next timer clock cycle. If enabled (OCIE0 = 1 and Global Interrupt Flag in SREG is set), the Output Compare Flag generates an output compare interrupt
با توجه به طولانی شدن مطلب، امکان اشتباه تایپی، علمی و… خیلی زیاده، لطفا در صورت مشاهده بهم بگید.(پیشاپیش دمتون گرم )
و چون این مطلب رو در مدت زیادی نوشتم، که به دلایلی هی عقب میوفتاد ممکنه قبلا یه جایی از مطلب چیزی رو نگفتم و یا ناقص گفتم که الان خاطرم نیست، اگه جایی ناقص بود و یا نگفتم و …. لطفا بهم بگید(البته غیر از ۶ موردی که در زیر بهش اشاره کردم و گفتم که اینا رو توی این مطلب نگفتم و توی مطلب بعد میگم.)
خوب این مطلب هم تموم شد، امیدوارم راضی بوده باشین، اگه هم خوب نبود مطلب دیگه به بزرگی خودتون ببخشید، اگه جایین رو بد گفتم یا کم توضیح دادم و شما متوجه نشدید و براتون سوالی پیش اومده و… میتونید تو قسمت نظرات یا انجمن(فرقی نداره کجا مطرح کنید) مطرح کنی تا در حد توانم(دانش من هم در این زمینه محدود هستش و خدای AVR نیستم که….) به سوالاتتون جواب بدم.
تو یه سایتی میخوندم نوشته بود میشه برا دفاع از حرم و محور مقاومت رفت سوریه، حالا بریم تحقیق کنیم ببینیم چطوریاس، راسته دروغه و… چون ما نه گذنامه دارم و نه پول برا گذرنامه گرفتن و نه سربازی رفتیم و نه هیکلی داریم، ببینیم داستانش چطوریاس و بعد شما رو خبر میکنم، حالا شما هم اگه چیزی میدونید به ما هم بگید.
به امید روزی که کنار برادرانمون با دشمنان اسلام بجنگیم، و این طور نباشه که تو خونه، راحت بشینیم (و در حالی که برادرانمون در حال جنگ و شهید شدن و تحت ظلم و ستم هستن) و اسم خودمون رو هم بزاریم مسلمون و به شیعه بودن خودمون افتخار کنیم…. اینجور شیعه بدرد سینه قبرستون میخوره(به نظر من)، به امید روزی که لیاقت پیدا کنیم و در کنار برادرامون در راه خدا جهاد کنیم.
- ریجستر ASSR از تایمر ۲
- ریجستر SFIOR از تایمر ۲
- بیت ۷ام ریجستر های TCCR0, TCCR2
- بیت های ۲ و ۳ ریجستر TCCR1A
- بیت ۶ و ۷ ریجستر TCCR1B
- توضیح مد Phase Correct PWM و این که کجا کاربرد داره و...
چیزایی که نگفتم ایناس، اگه چیز دیگه ای رو هم نگفتم و جا انداختم بگید تا از خاطرم نره.
هزینه استفاده از مطلب : راستی برا کسایی که تازه از دنیا رفتن ۱ فاتحه بخونید و ۵ تا صلوات برا تعجیل در فرج و برا سلامتی رهبر،علمای اسلام و مسولین خدمت گزار به اسلام و ایران بفرستید.(مردی بگو تعداد صلوات ها زیاده تا بیام اون جا و…. )…..فک کنم برا این ۷۵۰۰ واژه ای که توی این مطلب من نوشتم این هزینه کمی باشه.
زیاد مزاحتمون نمیشم، فعلا یا علی.
مهمان
سلام. ببین مهندس مثل قبل توضیح ندادی. یکی مثل من میخوام فقط یاد بگیرم تو کد ویزارد چجوری تنظیم کنم و چجوری کدشو بنویسم شما اصلا تو مبحث تامر کانتر از کد ویزارد هیچی نگفتید
واقعا هیچی نفهمیدم یه برنامه میخوام بنویسم گیر افتادم بدتر با خوندن این مطالب گیج شدم
مهمان
سلام اگه امکانش هست توسط تایمر 1 2 خروجی با فرکانس متفاوت و اختلاف فاز متفاوت رو قرار بدید
مهمان
البته منظورم ورژن جدید کدویژنه که با دادن مقدار پریود خروجی موردنیاز و اعلام D.C به اون و زدن دکمه Apply خودش رجیسترها رو مقداردهی میکنه…..شماکه خودت استادی…من چون تازه AVR رو شروع کردم برام مهمه که راه درست یادگیری رو برم
بازم ممنون داداش
مهمان
سلاااام…من که خیلی از اموزش تایمرها استفاده کردم دمت گرم و سرت خوش باد…فقط یه سوال…دوستی میگفت توی کدویژن میشه از کدویزاردش استفاده کرد برای تنظیمات تایمر ….راستش من تاحالا سمتش نرفتم ولی نظر شما برام مهمه که درین مود چیه؟….شاید این کار باعث تنبلی بشه شایدم نه و کار راحتتر بشه….

اگه نظر تخصصی بدی ممنون میشم
نویسنده این مطلب
سلام – کدویزارد! – من باهاش کار نمیکینم و یکبار دیتاشیت رو میخونم – کتابخونه براش مینویسم و تمام.
مهمان
سلام
اگر بخوایم از طریق arduino uno شمارش رو انجام بدیم باید چیکار کنیم؟
مثلا فرض کنید میخوایم یک encoder که به یه موتور وصل هستش و به ازای چرخش موتور پالس میده رو، تعداد پالس هاش رو بشمریم و به موتور دستور بدیم که هروقت تعداد پالس ها مثلا 100 تا شد موتور بایسته.
مطالب عالی دم شما گرم.
نویسنده این مطلب
سلام
اگه پالسه که از وقفه باید استفاده کنی..
مهمان
سلام خسته نباشید میشه ی خورده تو کد نویسی این سوال کمکم کنید. مربوط یه fastpwm است
یک موتور dc با دور نامی 160 دور بر دقیقه به گونه ای کنترل کند که موتور با دور متغبر کار کند.مثلا در 10 ثانیه ی اول 10 دور بر دقیقه می چرخد پس از 20 ثانیه 50 دور و پس از یک دقیقهبه دور نامی 160 دور می رسد.
مقدار dc و ocr تو این مراحل چه جوریه؟؟
مهمان
سلام
شما به جای پروتئوس چه نرم افزار شبیه سازی رو پیشنهاد میکنید؟
نویسنده این مطلب
سلام
بر میکرو – هیچی.
مهمان
سلام آقا مهدی اول یه تشکر ویژه میکنم بابت تمام زحماتت یه سوالی برام پیش اومده تو تایمر یک در حالت CTC از دو تا OCR میتونیم استفاده کنیم از طرفی قرار شد وقتی TCNT1 برابر OCR شد صفر بشه خب حالا اینجا که هم OCR1A داریم هم OCR1B تکلیف چیه؟کانتر به کدوم یک از اینا رسیید ریست میشه؟اصلا فرض کنیم تو OCR1A مقدار ۲۰۰ رو ریختیم و به اون یکی اصلا دست نزدیم خب تو حالت پیش فرض مگه مقدار OCR1B صفر نیست؟یعنی کانتر همیشه صفر میمونه ؟ بدجوری گیج شدم لطفا راهنمایی کن —
مهمان
سلام آقا مهدی اول یه تشکر ویژه میکنم بابت تمام زحماتت یه سوالی برام پیش اومده تو تایمر یک در حالت CTC از دو تا OCR میتونیم استفاده کنیم از طرفی قرار شد وقتی TCNT1 برابر OCR شد صفر بشه خب حالا اینجا که هم OCR1A داریم هم OCR1B تکلیف چیه؟کانتر به کدوم یک از اینا رسیید ریست میشه؟اصلا فرض کنیم تو OCR1A مقدار ۲۰۰ رو ریختیم و به اون یکی اصلا دست نزدیم خب تو حالت پیش فرض مگه مقدار OCR1B صفر نیست؟یعنی کانتر همیشه صفر میمونه ؟ بدجوری گیج شدم لطفا راهنمایی کن
مهمان
سلام.
چرا برنامه زیر در عمل به راحتی کار میکند اما د شبیه ساز پروتروس کار نمی کند؟
http://paste.debian.net/977176/
نویسنده این مطلب
دفه های قبل هم گفتم – این دفه هم میگم – با پروتئوس کار نکن
مهمان
سلام.
مد Phase Correct PWMرو تو تایمر ۰میگی؟
مهمان
خیلی مفید بود داداش . دستتون درد نکنه
مهمان
باسلام چه جوری میشه از تایمر برای خوندن تعداد پالس استفاده کرد منظورم همون کانتر است ؟
نویسنده این مطلب
سلام
فک کنم مطلب و پروژش تو سایت گزاشته باشم.
مد نرمال و مقایسه گر این دو مورد رو بررسی کن ببین کدومشون به کارت میاد
مهمان
ببخشید من یه برنامه توی کدویزن نوشتم وقتی کامپایل میکنم این ارور رو میده :
اخه همین برنامه رو یبار دیگه نوشتم اصلا ایرادی نداشت ولی اینجا که با کدویزن تنظیمات رو بهش دادم داره ایراد میگیره
: function return type ‘void’ doesn’t match its previous declaration: ‘unsigned char’ from file
و خودش یه صفه باز میکنه راجب ال سی دی توش یچیزایی توضیح داده. نمیدونم مشکل برنامم کجاست
مهمان
سلام داداش شرمنده همش سوال میپرسم
با کد ویژن به مشکل بر خوردم وقتی میخوام کامپایل کنم ارور AVRASM2.exe رو میده میگه باید تو ریشه اصلی فایل bin باشه البته هست و همه چیزشم اوکی هست ولی جواب نمیده و هگز رو تولید نمیکنه کلافم کرده:(((((((((
نویسنده این مطلب
سلام
کدهای پروژه رو بردار و یه پروژه جدید ایجاد کن و کد ها رو توش paste کن، اگه بازم ارور داد یعنی کد های پروژت مشکل دارن و…
مهمان
سلام داداش یه مگا ۱۶ دارم به لوک بیت هاش دست زدم الان قفل کرده و پروگرامر بازش نمیکنه چیکار کنم تا قفلش بشکنه؟؟؟
نویسنده این مطلب
سلام
والا نمیدونم….
مهمان
سلام.

دیگه باید میکرو تو بندازی بره
مشکلات دیگه با پروگرامر هاتل و STK500وSTK300حل میشه
مهمان
مثل همیشه عالی عالی
مهمان
سلام حداکثر جریان مصرفی یک atmega32aچقدر است دوست عزیز
با سپاس
نویسنده این مطلب
سلام
نیمدونم…به دیتاشیت مراجعه کن
مهمان
سلام
دمت گرم مهدی جان آموزشات خیلی عالیه انشاالله موفق باشی داداش
من تو پروژم باید از ماژول sim908استفاده کنم تو اینترنت چیز درستی و حسابی پیدا نکردم اگه میتونی راهنماییم کن
خیلی ممنون
نویسنده این مطلب
سلام

والا با این کار نکردم و میتونی تو سایت های خارجی کلی مطلب دربارش پیدا کنی
فعلا من تو فاز pcb هستم
دارم یاد میگیرم تا انشاالله بیام تو سایت یاد بدم….اوف عجب چیزی بشه
مهمان
راستی برادر در مورد مد اینپوت کپچر هم توضیح بده…برای گرفتن عرض یک پالس چج.ری باید ازش استفققاده کنیمinputcaptur پایهicp میکرو
تشکر
مهمان
سلام دادا دمت گرم واقعا خسته نباشی….لطفا ادامه بده من یکی از طرفدار ها ی پروپا قرص شما و سایتتون هستم انشالا اجر معنوی رو خدا بهتون میده…باز هم تشکر و خسته نباشید
هزینه ها رو هم که گفتید پرداخت میکنم (صلوات ها و فاتحه ها…والبته برای خود شما هم…)