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

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

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

بازدیدها: 338

با سلام خدمت همه دوستان و همراهان

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

در حالت مقایسه رجیستر TCNT0 به طور دائم با رجیستر OCR0 مقایسه، و در صورت تطابق (مساوی شدن) رجیستر TCNT0 برابر صفر می شود. از این نتیجه مقایسه می توان برای تولید شکل موج روی پایه خروجی OC0 استفاده نمود که خود چهار حالت دارد:

  1. در صورت تطابق هیچ عملی روی OC0 صورت نگیرد. Disconnected
  2. در صورت تطابق وضعیت پین OC0 معکوس شود. Toggle
  3. در صورت تطابق پین OC0 فقط صفر شود. Clear
  4. در صورت تطابق پین OC0 فقط یک شود. Set

در هنگام تطبیق مقایسه در صورت فعال بودن وقفه و تولید پرچم OCF0 می توان یک وقفه مقایسه را ایجاد نمود و از روال وقفه برای بروزرسانی مقدار رجیستر OCR0 استفاده نمود. به هر حال تغییر رجیسیتر OCR0 به یک مقدار جدید در زمانی که تایمر در حال شمارش است باید با احتیاط انجام شود، زیرا که حالت CTC دارای بافر مضاعف نمی باشد.

 مثال: برنامه ای بنویسید که هر 30 میلی ثانیه پایه OCR0 را مکمل (معکوس سازی) کند؟

هدف ما ساختن یک شکل موج می باشد که طول هر نیم سیکل آن 30ms است. یعنی 30ms پین در وضعیت یک و 30ms دیگر در وضعیت صفر. البته چون 30ms عدد نسبتا بالایی است و با توجه به اینکه فرکانس نوسان ساز ما 8MHz می باشد پس ما N=1024 قرار می دهیم تا فرکانس کاری تایمر برابر 7.813KHz شود تا بتوانیم این تاخیر بالا را ایجاد کنم. همانطور که می دانید با انتخاب N بالا فرکانس کاری تایمر پایین خواهد آمد و درنتیجه زمان پر شدن رجیستر ها بالا می رود.

#include <mega16.h> 
#define xtal 8000000 

void main(void){ 
PORTB=0x00; 
DDRB=0x08; //H1
TCNT0=0x00; //H2
OCR0=0xEA; //H3
TCCR0=0x1D;//H4
while (1); //H5
} 

توضیحات برنامه:

  1.  H1: پین OC0 که روی پورت B می باشد به عنوان خروجی تعریف شده.
  2. H2: مقدار اولیه این رجیستر را برابر صفر قرار می دهیم.
  3. H3: عددی که باید محتوای TCNT0 با آن مقایسه شود تا در صورت تساوی تطابق صورت گیرد.
  4. H4: کلاک تایمر با تقسیم بر 1024 برابر با 7.813KHz خواهد شد. و همچنین مد CTC با عملکرد مکمل سازی OC0 انتخاب می شود.
  5. H5: یک حلقه بی نهایت 

نحوی محاسبه زمان 30 میلی ثانیه ای:

Time= (1024*(1+234))/8000000


234 برابر با EA هگز می باشد که باید در رجیستر ORC0 قرار بگیرد.

نحوی محاسبه با Codewizard :

Clock Source: System Clock
Clock Salue: 7.813kHZ
Mode: CTC top=OCR0
Output: Toggle on compare match 
0 Overflow Intrrupt
0 Compare Match Interrupt
Timer Value: 0h
Compare: EAh

 نکته: شما می توانید که مقدار رجیستر TCNT0 را نیز با عدد دلخواه حساب شده پر کنید مثلا اگر عدد 8 را وارد کردید در هنگام شروع کار، تایمر دیگر از صفر شروع به بالا رفتن نمی کند بلکه از 8 شروع می کند بنابراین با تغییر این عدد می توانید زمان های دقیق را داشته باشید.

سوالات و پیشنهادات خودتان را در نظرات همین صفحه اعلام کنید.

 این مقاله به صورت کاملا اختصاصی و به صورت متن باز تنها در وب سایت www.picpars.com منتشر می شود. کپی برداری از آن تنها با ذکر منبع به صورت کامل امکان پذیر می باشد.

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

Icon

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

1 file(s) 42.19 KB
Download
Share
55
مدیر
مدیر

مطالب مرتبط

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 جهت ارتباط با خرید پروژها در تلگرام و واتساپ