طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
در صورتی که برق شهر از حداقل تعریف شده کمتر، یا از حداکثر بیشتر شود رله خروجی قطع خواهد شد و از طریق بازر بوق هشدار پخش می شود. ولتاژ فعلی، زمان باقیمانده تا اتصال رله و پیغام ها روی نمایشگر نشان داده می شود.یک ماشین حساب لمسی ساده با قابلیت نوشتن تعداد 12 نوع عملیات متفاوت و پشت سر هم با محاسبه فوری جواب، قابلیت پاک کردن کارکتری جمله نوشته شده، نوشتن عدد اعشاری و منفیاین مدار یک کنترلر زمانی و دمایی می باشد، که بر اساس برنامه ریزی دلخواه توسط کاربر یک رله خروجی را کنترل می نمایید. با اتصال لامپ فلورسنت مرغوب به رله دستگاه می توانید لامپ را تحت کنترل داشته باشید.با استفاده از میکروکنترلر Atmega8‌، سنسور دیجیتال دما DS18B20 و LCD‌ متنی شما به راحتی می توانید کولر خانه تان را توسط کنترل تلویزیون و کلید های تعبیه شده، در مد های مختلفی برنامه ریزی کنید، از ویژگی آن می توان به کاهش مصرف انرژی در کولرها آبی اشاره نمود.یک سیستم امنیتی که دارای یک کاربر اصلی می باشد و توسط این کاربر می توان کاربرهای متعددی با پسورد های مجزا تعریف نمود. می توان تا 100 کاربر و 100 پسورد مختلف را تعریف، و در قسمت ورود هر یک از اعضاء که نام کاربری و رمز عبور خود را بدرستی وارد کند یک رله به همراه LED روشن خواهد شد.
پروژه محافظ لوازم برقی با avr و نمایشگر LCD

MCP-23

پروژه محافظ لوازم برقی با avr و نمایشگر LCD
پروژه ماشین حساب لمسی ساده با avr

MCP-15

پروژه ماشین حساب لمسی ساده با avr
پروژه مدار دستگاه فتوتراپی (پایین آورنده زردی خون نوزادان)

MCP-24

پروژه مدار دستگاه فتوتراپی (پایین آورنده زردی خون نوزادان)
پروژه کنترل اتوماتیک کولرهای آبی با ریموت کنترل و avr

MCP-4

پروژه کنترل اتوماتیک کولرهای آبی با ریموت کنترل و avr
پروژه سیستم امنیتی با قابلیت تعریف کاربر و رمز عبور با avr

MCP-12

پروژه سیستم امنیتی با قابلیت تعریف کاربر و رمز عبور با avr

کار با تایمر کانتر صفر AVR در حالت ساده به زبان سی کدویژن CodeVision

مقدمه

 تایمر کانتر یکی از بخش های مهم میکروکنترلرها می باشد. در بیشتر مواقع لازم که تعدادی وقایع خارجی (با سرعت بالا) شمارش شود و یا گاهی لازم است که در یک زمان خاص و دقیق، کاری صورت گیرد. تنها توسط تایمر کانتر ها می توان این کارهای دقیق و با سرعت بالا را انجاد داد.

میکروکنترلرهای AVR حداکثر دارای شش عدد تایمر کانتر هشت بیتی و شانزده بیتی هستند. برخی از آنها دارای عملکرد ساده و برخی دیگر دارای امکانات بیشتر نظیر تولید موج PWM ، حالت مقایسه CTC ، حالت تسخیر، عملکرد غیر همزمان و ... می باشند.

در ادامه ما به نحوی برنامه نویسی و پیکره بندی تایمر صفر در حالت عادی همراه با مثال در محیط برنامه نویسی CodeVision می پردازیم

از بخش سفارش طراحی هم اکنون درخواست خود را ثبت کنید
حل و تشریح کلیه تمرینات درس میکروکنترلر AVR
طراحی و ساخت مدارات دلخواه شما با میکروکنترلر AVR


تایمر کانتر صفر در AVR ها را می توان به سه مدل زیر دسته بندی کرد:

  1.  ساده هشت بیتی
  2. پیشرفته هشت بیتی
  3. پیشرفته شانزده بیتی

ساده هشت بیتی فقط در سری At90S , ATTiny به کار رفته.
پیشرفته هشت بیتی در سری ATmega ها به غیر از ATmega8 و ATmega163 به کار رفته است. (این دو مدل میکرو از مد ساده هشت بیتی استفاده می کنند)
پیشرفته شانزده بیتی این مدل فقط در AVR های سری ATTiny13 , ATTiny2313 به کار گرفته است.

 در اینجا ما از مد پیشرفته هشت بیتی استفاده می کنیم و بیشتر روی codewizard برنامه CodeVision تاکید می کنم و وارد بحث رجیستر های تایمر کانتر نمی شویم چون پیچیده می شود و همه دوستان از این مسائل رجیستر ها زیاد وارد نیستند. codewizard با تنطیم کردن  وضعیت تایمر کانتر ها کد های مربوط رجیستر ها را برای ما بدست می آورد و ما ادامه برنامه را به زبان C می نویسیم.

تایمر کانتر صفر در حالت هشت بیتی پیشرفته:

  1. تایمر کانتر در حالت عادی
  2. تایمر کانتر در حالت مقایسه CTC
  3. تایمر کانتر در حالت PWM سریع (تک شیب)
  4. تایمر کانتر در حالت PWM تصحیح فاز (دو شیب)

رجیستر های تایمر کانتر صفر:

رجیستر مقایسه خروجی 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 منتشر می شود. کپی برداری از آن تنها با ذکر منبع به صورت کامل امکان پذیر می باشد.

منبع www.picpars.com  نویسنده: سید محسن قاسمیان

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل ارتباطی ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.




فایل های ضمیمه ( ورود - عضويت )

فایل شماره 102 | حجم 43 کیلوبایت | دانلود 5371 بار

منبع www.picpars.com  نویسنده: سید محسن قاسمیان

منبع www.picpars.com  دانلود مثال کار با تایمر کانتر صفر AVR در حالت ساده

منبع www.picpars.com  پسورد: www.picpars.com

به این مطلب امتیاز دهید

برچسب ها:
تاریخ ارسال پنجشنبه، 29 مهر ماه، 1389    نویسندهنویسنده: مدیریت    نظرات 20 نظر    بازدید بازدید [ 73416 ]   پرینتنسخه چاپی
فایل پی دی اف فایل پی دی اف   ارسال به دوستان ارسال به دوستان