خانه / آموزش میکروکنترلرهای AVR / آموزش برنامه نویسی پیشرفته BASIC-تایمر کانتر 2

آموزش برنامه نویسی پیشرفته BASIC-تایمر کانتر 2

آموزش برنامه نویسی پیشرفته BASIC-تایمر کانتر 2

آموزش برنامه نویسی پیشرفته BASIC-تایمر کانتر 2

این تایمر – کانتر دارای امکاناتی مانند مد compare و خروجی pwm می باشد.

:: پیکر بندی تایمر – کانتر 2 به عنوان تایمر

Config timer2 = timer , async = on / off , _

Prescale = 1/8/32/64/128/256/1024

این تایمر 8 بیتی بوده پس حداکثر مقدار شمارش آن تا 255 خواهد بود با این دستور تایمر – کانتر 2 به عنوان یک تایمر به میکرو معرفی می شود.

 1/8/32/64/128/256/1024 : مقادیری که می توان برای تقسیم فرکانس میکرو استفاده کرد.

async : زمانی که  off باشد به صورت یک تایمر معمولی عمل می کند. اما زمانی که on باشد, تایمر به صورت آسنکرون از دو پایه tosc1 و tosc2 که کریستال 32768hz به آنها متصل است کلاک دریافت می کند که در بخش rtc در مورد آن بحت خواهد شد.

میزان فرکانس کار این تایمر از رابطه زیر بدست می آید:

فرکانس تایمر= فرکانس کار میکرو / prescale

:: فعال و روشن کردن تایمر 2

Enable timer2

Start timer2

این دو دستور را حتما با هم به کار برید تا میکرو تایمر را روشن کند.

:: غیر فعال کردن تایمر 2

Stop timer2

از این دستور می توان در جاهای مختلف برنامه برای خاموش کردن تایمر استفاده نمود.

نکته : با خاموش کردن timer2 مقدار شمارش شده صفر نخواهد شد و با روشن کردن دوباره آن ادامه شمارش انجام خواهد شد.

:: نوشتن و خواندن تایمر

Timer2 = var

Var = timer2

نکته : مقدار تایمر در رجیستری به نام  timer2 قرار گرفته است که می توان به این رجیستر مقدار داد تا تایمر از آن مقدار شروع به شمارش کند و یا مقدار آن را در متغیری که برای انجام عملیاتی لازم دارید بریزید.

:: وقفه تایمر 2

Enable ovf2

On ovf2 lable

پرچم سریزی تایمر 2 به نام ovf2 بوده و همانطور که گفته شد با رسیدن مقدار تایمر به عدد 255 ( مقدار timer2 برابر صفر می شود ) این پرچم 1 شده و می توان از آن به عنوان پرش به یک زیر برنامه استفاده کرد و در زیر برنامه با return بازگشت. در این دستور باید اول پرچم را فعالسازی و بعد با دستور ovf2 on در صورت یک شدن ovf2 به برچسب زیر برنامه پرش کرد.

نکته : فراموش نشود برای کار با هر وقفه ای اول باید و قفه کلی enable interrupts را فعال کرد.

مثال اول :

Sregfaile= “m32def.dat”

$crystal = 16000000

Config timer2 = timer , async = off , prescale = 64

Enable timer2

Start timer2

Dim a as byte

Timer2 = 0

Do

A= timer2     , ever 4 us —-A incr timer2

Loop

End

مثال دوم :

$regfile = “m32def.dat”

$crystal = 16000000

Config timer2 = timer, async = off , prescale=64

Enable interrupts

On ovf2ali

Enable timer2

Enable ovf2

Dim a as byte

Timer2 =55

Do

A=timer2   , ever 4us ——-A incr timer2

Loop

End

Ali:

Timer2=55

Return

:: پیکر بندی تایمر – کانتر 2 به عنوان کانتر

Config timer2 = counter , edge = rising / falling

با این دستور کانتر 2 پیکر بندی شده و با اعمال  پالس به پایه t2 میکرو یک واحد به رجیستر counter2 اضافه می شود. این کانتر 8 بیتی بوده پس حداکثر مقدار شمارش آن تا 255 خواهد بود ( پالس ورودی بعدی کانتر را صفر می کند )

Edge : گزینه rising برای حساس بودن پایه به لبه بالا رونده و گزینه falling برای حساس بودن پایه به لبه پایین رونده

:: فعال و روشن کردن کانتر 2

Start counter2

این دستور را حتما به کار برید تا میکرو کانتر را روشن کند

:: غیر فعال کردن کانتر 2

Stop counter2

از این دستور می توان در جاهای مختلف برنامه برای خاموش کردن کانتر استفاده نمود.

با خاموش کردن counter2 مقدار شمارش شده صفر نخواهد شد و با روشن کردن دوباره آن ادامه شمارش انجام خواهد شد.

:: نوشتن و خواندن کانتر 2

COUNTER 2 = VAR

Var = counter2

نکته : مقدار کانتر در رجیستری به نام counter2 قرار گرفته است که می توان به این رجیستر مقدار داد تا کانتر از آن مقدار شروع به شمارش کند و یا مقدار آن را در متغیری که برای انجام عملیاتی لازم دارید بریزید.

:: وقفه کانتر 2

Enable ovf2

On ovf2 lable

پرچم سریزی کانتر 2 به نام ovf2 بوده و همانطور که گفته شد با رسیدن مقدار کانتر به عدد 255 و با ورود یک پالس دیگر (مقدار counter2 برابر صفر می شود) این پرچم 1 شده و می توان از آن به عنوان پرش به یک زیر برنامه استفاده کرد و در زیر برنامه با return بازگشت. در این دستور باید اول پرچم را فعال سازی و بعد با دستور on ovf2 به برچسب زیر برنامه پرش کرد.

نکته : فراموش نشود برای هر کار با وقفه ای اول باید وقفه کلی enable interrupts رافعال کرد.

مثال اول :

$regfaile = “m8def.dat”

$crystal = 8000000

Config timer2 = counter , edge = rising

Start counter2

Dim a as byte

Counter2=0

Do

A= counter2

Loop

End

مثال دوم :

$regfile = “m8def.dat”

$crystal = 8000000

Config timer2 = counter , edge = rising

Enable interrupts

On ovf2 ali3

Enable ovf2

Start counter2

Dim a as byte

Do

Loop

End

Ali3:

Incr a

Return

:: پیکر بندی کانتر 2 به همراه مد مقایسه ای

Config timer2 = counter , edge = rising /falling , _

Prescale = 1/81/64/256/1024 ,compare= clear /set/toggle/disconnect

با کانتر 2 که آشنا شده اید با ورودی پالس به پایه T2 کانتر شروع به شمارش می کند. این تایمر قابلیتی دارد که با رسیدن مقدار کانتر به عددی دلخواه که در درون رجیستر دو بایتی compare می توان قرار داد خروجی پایه oc2 را به دلخواه تغییر وضعیت داد.

Compare : در این قسمت گزینه هایی را در اختیار دارید که می توان عکس العمل خروجی oc2 در زمان تطابق را تغییر داد و clear برای صفر شدن در زمان تطابق و گزینه set برای یک شدن و toggle برای معکوس شدن و disconnect برای قطع شدن این پایه در زمان تطابق می تواند باشند.

:: فعال و غیر فعال کردن کانتر 2 در مد مقایسه ای

Start counter2

Stop counter2

نکته: به یاد داشته باشید که برای این مد هم باید از این دستورات استفاده کنید.

:: پیکر بندی تایمر 2 به همراه مد مقایسه ای

Config timer2 = timer , prescale = 1/8/64/256/1024 , _

Compare = clear / set / toggle / disconnect

تایمر 2 را هم می توان در این مد استفاده کرد و کاملا شبیه به حالت استفاده از کانتر می باشد و تنها در این حالت مقدار درون timer2 با رجیستر compare مقایسه می شود. و در صورت تطابق خروجی oc2 تغییر می کند.

:: فعال و روشن کردن و غیر فعال کردن تایمر 2 در مد مقایسه ای

Start timer2

Stop timer2

نکته : به یاد داشته باشید که برای این مد هم باید از این دستورات استفاده کنید.

:: نوشتن و خواندن رجیسترهای مد مقایسه ای

Compare = var

Var = compare

:: وقفه کانتر و تایمر در مد مقایسه ای

Enable oc2

On oc2 lable1

شما می توانید زمانی که مقدار counter2 یا timer2 با مقدار رجیستر مد مقایسه ای (compare) تطابق پیدا کردند به صورت وقفه به یک زیر برنامه بروید و عملی را انجام دهید.

$regfile = “m16def.dat”

$crystal = 12000000

Config timer2 = counter , edge = rising , prescale = 1,compare= set

Enable interrupts

On oc2 ali3

Enable oc2

Start counter2

Dim a as byte

Compare = 200

Do

Loop

End

Ali3:

Incr a

Return

:: پیکر بندی تایمر – کانتر 2 در مد pwm

Config timer2 = pwm , prescale = 1/8/64/256/1024 , _

Pwm = on / off , compare pwm = clear up / clear down / disconnect

تایمر – کانتر 2 دارای یک خروجی pwm است که پایه oc2 می باشد. رجیستری برای قرار گیری مقدار pwm خروجی وجود دارد که به نام pwm است. که می توان از این رجیستر خواند و یا در آنها نوشت.

Pwm = on /off : این قابلیت را در زمان on بودن به ما می دهد که از تایمر در این مد استفاده کنیم که کمتر استفاده می شود. فرکانس کار pwm به صورت زیر است.

f.pwm = f.osc / ( 510 * prescale )

نکته : f.osc فرکانس کار میکرو کنترلر می باشد.

Compare pwm = این گزینه نوع تغییرات سیگنال pwm را مشخص می کند که در حالت clear up در حالتی که رجیستر pwm بیشترین مقدار خود را دارد به همان نسبت خروجی بیشترین پهنای خود ( موج dc ) را خواهد داشت و بلعکس

حالت clear down در حالتی که رجیستر pwm بیشترین مقدار خود را دارد به همان نسبت خروجی کمترین پهنای خود ( صفر ولت ) را خواهد داشت و بلعکس.

حالت disconnect خروجی آن مد قطع می شود.

:: نوشتن و خواندن رجیسترهای مد pwm

Pwm = var

Var = pwm

نکته : برای فعال کردن pwm باید دستور start timer2 را حتما استفاده کنید.

$regfile= “m16def.dat”

$crystal=8000000

Config timer2 = pwm , pwm = off , prescale=1

Start timer2

Dim a as byte

A=255

Pwm=0

Do

Incr pwm

Loop

End

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

 دسته اصلی : زبان برنامه نویسی BASIC

 نویسنده : electronics98

 تاریخ انتشار :

پاسخ دهید

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

مطلب پیشنهادی

I2C-AVR

آموزش برنامه نویسی پیشرفته BASIC – ارتباط سریال I2C

آموزش برنامه نویسی پیشرفته BASIC – ارتباط سریال I2C پایه های مورد استفاده پروتکل I2C …