Logo 150Logo 150Logo 150Logo 150
  • صفحه اصلی
  • میکروکنترلرها
    • میکروکنترلرهای AVR
      • آموزش AVR در CodeVision
      • آموزش Atmel Studio
      • AVR بیسیک
    • میکروکنترلرهای PIC
    • میکروکنترلرهای ARM
      • خانواده STM32
    • میکروکنترلر 8051
    • برنامه نویسی گرافیکی
      • LabView
  • مقالات
    • قطعات و نکات فنی
    • خواندنی ها
    • کتاب-جزوه-مجله
  • نرم افزار
    • کتابخانه آلتیوم
      • Microchip
  • پروژه های آماده
  • خرید پروژه
  • حل تمرینات
  • تماس با ما
  • کانال ها
    • کانال تلگرام
    • اینستاگرام
    • آپارات
    • یوتیوب

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

  • صفحه نخست
  • مطالب سایت میکروکنترلرها میکروکنترلرهای AVR آموزش AVR در CodeVision
  • کار با تایمر کانتر صفر AVR در حالت ساده به زبان سی کدویژن CodeVision
پروژه دستگاه تایمر و تنظیم دما برای کولر با LM35 و زبان بیسیک
پروژه دستگاه تایمر و تنظیم دما برای کولر با LM35 و زبان بیسیک
29 مهر, 1389
کار با تایمر کانتر صفر AVR در حالت CTC به زبان سی کدویژن CodeVision
29 مهر, 1389
منتشر شده توسط مدیر در 29 مهر, 1389
موضوعات
  • آموزش AVR در CodeVision
برچسب ها
  • at90s
  • atmega163
  • ATMEGA8
  • attiny
  • attiny13
  • attiny2313
  • avr
  • C
  • CodeVision
  • codewizard
  • Fast
  • free
  • micro
  • microcontroler
  • OCR0
  • picpars
  • picpars.com
  • Proteus
  • pwm
  • source
  • TCCR0
  • TCNT0
  • TIFR
  • TIMER
  • TOVO
  • v2.04.04a
  • برنامه-نویسی-میکروکنترلرها
  • بیتی
  • پی-آیسی-پارس
  • تاخیر
  • تایمر
  • تک
  • دقیق
  • دو
  • رایگان
  • رجیستر
  • زبان
  • سریع
  • سی
  • شیب
  • کانتر
  • میکرو
  • میکروکنترلر
  • میکروکنترولربرنامه
  • هشت

بازدیدها: 1956

مقدمه

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

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

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

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

  نویسنده: سید محسن قاسمیان

Icon

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

1 file(s) 43.18 KB
Download
Share
82
مدیر
مدیر

مطالب مرتبط

22 مرداد, 1395

آموزش گام به گام برنامه نویسی AVR به زبان C


اطلاعات بیشتر
پروژه آموزشی تابلون روان 8.8 به زبان سی همراه با سورس C
29 تیر, 1391

پروژه آموزشی تابلون روان 8.8 به زبان سی همراه با سورس C


اطلاعات بیشتر
کار با LED ماتریسی 8.8 (LED Displays 8.8 LED Matrix)
14 تیر, 1391

کار با LED ماتریسی 8.8 (LED Displays 8.8 LED Matrix)


اطلاعات بیشتر

دیدگاهتان را بنویسید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

تمامی حقوق مادی و معنوی برای PicPars.com محفوظ است. شماره همراه 09335751032 جهت ارتباط با خرید پروژها در تلگرام و واتساپ