آیا میدانید بچه دلفین از مدتی که به دنیا میاید به مدت 1 ماه اصلا نمیخوابد
جايي هست که جز تو هيچ کس آن را پر کند و کاري
هست که جـز تو هـيچ کس قادر به انجامش نيست. از اسکاول شين |
![]() |
کامپایلر قدرتمند Atmel AVR Studio 6 نسخه 6
دانلود شبیه ساز قدرتمند proteus 7.10 SP0 همراه با کرک و لایسنس و کتابخانه
آموزش گام به گام برنامه نویسی AVR به زبان C
کتابخانه شبیه ساز LCD های نوکیا برای پروتیوس
پروژه تولید سیگنال های ویدیوئی PAL با AVR به زبان اسمبلی
پروژه ارتباط AVR با RS232 و برنامه کنترلی با ویژوال بیسیک
اتصال کیبورد 4*4 به میکروکنترلر AVR و نمایش روی سون سگمنت|
کار با تایمر کانتر صفر AVR در حالت ساده به زبان سی کدویژن CodeVision
مقدمه تایمر کانتر یکی از بخش های مهم میکروکنترلرها می باشد. در بیشتر مواقع لازم که تعدادی وقایع خارجی (با سرعت بالا) شمارش شود و یا گاهی لازم است که در یک زمان خاص و دقیق، کاری صورت گیرد. تنها توسط تایمر کانتر ها می توان این کارهای دقیق و با سرعت بالا را انجاد داد. میکروکنترلرهای AVR حداکثر دارای شش عدد تایمر کانتر هشت بیتی و شانزده بیتی هستند. برخی از آنها دارای عملکرد ساده و برخی دیگر دارای امکانات بیشتر نظیر تولید موج PWM ، حالت مقایسه CTC ، حالت تسخیر، عملکرد غیر همزمان و ... می باشند. در ادامه ما به نحوی برنامه نویسی و پیکره بندی تایمر صفر در حالت عادی همراه با مثال در محیط برنامه نویسی CodeVision می پردازیم تایمر کانتر صفر در AVR ها را می توان به سه مدل زیر دسته بندی کرد:
ساده هشت بیتی فقط در سری At90S , ATTiny به کار رفته. در اینجا ما از مد پیشرفته هشت بیتی استفاده می کنیم و بیشتر روی codewizard برنامه CodeVision تاکید می کنم و وارد بحث رجیستر های تایمر کانتر نمی شویم چون پیچیده می شود و همه دوستان از این مسائل رجیستر ها زیاد وارد نیستند. codewizard با تنطیم کردن وضعیت تایمر کانتر ها کد های مربوط رجیستر ها را برای ما بدست می آورد و ما ادامه برنامه را به زبان C می نویسیم. تایمر کانتر صفر در حالت هشت بیتی پیشرفته:
رجیستر های تایمر کانتر صفر: رجیستر مقایسه خروجی OCR0 این رجیستر هشت بیتی خواندنی و نوشتنی بوده و به طور مستقیم با مقدار شمارنده TNNT0 مقایسه می شود. از تطابق این دو برای تولید وقفه خروجی یا تولید یک شکل موج روی پایه OC0 می توان استفاده نمود. رجیستر تایمر کانتر صفر TCNT0 این رجیستر هشت بیتی امکان دسترسی مستقیم برای خواندن و نوشتن در شمارنده را فراهم می کند. رجیستر کنترلی تایمر کانتر صفر TCCR0 که دارای هشت بیت کنترلی است که برای انتخاب پالس ساعت، حالت خروجی هنگام تطابق مقایسه، عملکرد های PWM، و بیت مقایسه خروجی. که در کل با این 8 بیت حالت های مختلفی وجود دارد که با استفاده از codewizard این رجیستر ها تنظیم می شود. رجیستر پرچم وقفه تایمر کانتر صفر TIFR که در این رجیستر بیت TOV0 زمانی یک می شود که یک سر ریز در تایمر یا کانتر صفر رخ داده باشد و بیت های دیگر ... که همه توسط codewizard تنظیم می شوند. با استفاده از رجیستر TCCR0 می توان فرکانس کاری تایمر را انتخاب کرد که حالت های زیر را دارد: بدون تقسیم- تقسیم بر 8- تقسیم بر 32- تقسیم بر 64- تقسیم بر 128- تقسیم بر 256- تقسیم بر 1024 یعنی اگر ما فرکانس کلاک کاری میکرو را مثلا 12MHZ انتخاب کنیم و N=32 در نتیجه 12MHZ بر عدد 32 تقسیم می شود و حاصل آن می شود فرکانس کاری تایمر. مثال ها با CodeVisionAVR V2.04.4a و پروتیوس V7.7 SP4 شبیه سازی شده اند. 1) با استفاده از تایمر صفر در مد ساده تاخیر 2.04 میلی ثانیه ایجاد نماید؟
#include <mega16.h>
#define xtal 8000000
void timer0_delay(){
TCCR0=0x03; // Clock value: 125.000 kHz
while(!(TIFR & 0x02)); //H1
TIFR |= 0x02; //H2
}
void main(void){
DDRA=0xff;
PORTA=0;
TCNT0=0x00;
OCR0=0x00;
while (1){
timer0_delay();
PORTA.0=~PORTA.0;
};
}
ابتدا ما تابعی به نام timer0_delay ایجاد کردم و با استفاده از برنامه codewizard در قسمت Timer0 مقادیر زیر را تنظیم کنید:
Clock Source: System Clock
Clock Salue: 125.000kHZ Mode: Normal top=FFh Output: Disconnected 0 Overflow Intrrupt 0 Compare Match Interrupt Timer Value: 0h Compare: 0h و بعد از منوی File -> program perivew را بزنید بر طبق تنظیماتی که شما انجام داده اید رجیستر ها با مقادیری پر می شوند. که در این مثال TCCR0=0x03 شده که اگر به جدول رجیستر ها نگاه کنید حالت مد ساده و با N=64 انتخاب شده که نحوی محاسبه زمان تایمر به صورت زیر است:
TCCR0=0x03 ==> prescaler=64 ==> F/8 ==> 8MHZ/64=125kHZ ==> tc=1/125kHZ=8uS
TCNT0=0 ==> zaman sar riz 255*8uS=2.04ms ==> delay=2.04ms H1: میکرو وارد این حلقه شرطی می شود و تا زمانی که پرچم TIFR یک نشده در این حلقه می ماند. (0x02 بیت دوم از رجیستر TIFR هست که اگر یک شود حاصل and بیتی 1and1 برابر 1 می شود و معکوس 1 هم صفر می شود بنابراین حلقه (0) یعنی شکستن حلقه و خارج شدن از آن) H2: بعد از سریز بیت دوم از رجیستر TIFR یعنی TOVO یک می شود بنابراین برای استفاده مجدد از تایمر باید این بیت را به وضعیت قبلی خود یعنی صفر برگردانیم که با OR کردن اینکار را انجام می دهیم. در برنامه main هم که پورت A خروجی تعریف شده و مقادیر اولیه شمارنده تایمر و مقایسه را برابر صفر قرار دادیم و وارد یک حلقه بی نهایت شدیم که در آن مدام تابع تاخیر اجرا میشود و پین A.0 مکمل می شود. نکته برای اینکه codewizard اطلاعات صحیح به شما بدهد حتما به یاد داشته باشید که در قسمت Chip مدل میکرو و فرکانس میکرو دقیق تنظیم شود. سوالات و پیشنهادات خودتان را در نظرات همین صفحه اعلام کنید.
این مقاله به صورت کاملا اختصاصی و به صورت متن باز تنها در وب سایت www.picpars.com منتشر می شود. کپی برداری از آن تنها با ذکر منبع به صورت کامل امکان پذیر می باشد.
لینک ثابت این صفحه: © کپی برداری از مطالب این سایت تنها با ذکر منبع مجاز می باشد
در صورت داشتن هر گونه سوال، نظر و پیشنهاد راجب این مطلب میتوانید در قسمت نظرات همین صفحه مطرح نمائید. همچنین با شرکت در نظر سنجی های سایت، ما را در بهبود بخشیدن به مطالب یاری کنید. تایمر کانتر تاخیر دقیق رجیستر سریع تک دو شیب هشت بیتی پی-آیسی-پارس برنامه-نویسی-میکروکنترلرها میکرو میکروکنترلر میکروکنترولربرنامه زبان سی رایگان micro microcontroler avr C Proteus source free picpars picpars.com timer CodeVision v2.04.04a PWM fast codewizard attiny at90s attiny2313 attiny13 atmega8 atmega163 TCCR0 OCR0 TCNT0 TIFR TOVO مرتبط باموضوع : ایجاد تاخیرهای دقیق با تایمرهای صفر و یک AVR به زبان سی [ جمعه، 15 ارديبهشت ماه، 1391 ] 458 مشاهده
آموزش نحوه کار با Timer میکرو تحت برنامه نویسی Codevision [ يكشنبه، 14 شهريور ماه، 1389 ] 5597 مشاهده
اسکن کیبورد 3×4 به زبان سی AVR و به صورت فایل کتابخانهای برای کدویژن [ سه شنبه، 15 آذر ماه، 1390 ] 4178 مشاهده
اتصال کیبورد 4*4 به میکروکنترلر AVR و نمایش روی سون سگمنت [ سه شنبه، 19 ارديبهشت ماه، 1391 ] 941 مشاهده
اتصال کیبورد 4*4 به میکروکنترلر AVR [ پنجشنبه، 16 ارديبهشت ماه، 1389 ] 15832 مشاهده
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
آیا این مطالب مورد رضایت شما واقع گردید؟ لطفا با رای دادن به این مطلب ما را در بهبود بخشیدن به مطالب کمک کنید. با اینکار به سایر دوستانتان نیز کمک خواهید کرد.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||
رویداد ها: روز بزرگداشت ملاصدرا - روز بهره وری و بهینه سازی مصرف |