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

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

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

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

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

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

CONFIG TIMER3 = timer , prescale = 1/8/64/256/1024

این تایمر 16 بیتی بوده پس حداکثر مقدار شمارش آن تا 65535 خواهد بود.

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

با دستور بالا تایمر – کانتر 3 به عنوان یک تایمر به میکرو معرفی می شود. میزان فرکانس کار این تایمر از رابطه زیر بدست می آید:

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

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

Enable timer3

Start timer3

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

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

Stop timer3

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

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

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

Timer3 = var

Var = timer3

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

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

Enable ovf3

On ovf3 lable

پرچم سریزی تایمر 3 به نام ovf3 بوده و همانطور که گفته شد با رسیدن مقدار تایمر به عدد 65535 (مقدار timer3 برابر صفر می شود) این پرچم 1 شده و می توان از آن به عنوان پرش به یک زیر برنامه استفاده کرد و در زیر برنامه استفاده کرد و در زیر برنامه با return  بازگشت. در این دستور باید اول پرچم را فعال سازی و بعد با دستور ovf3 on در صورت یک شدن ovf3 به برچسب زیر برنامه پرش کرد.

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

مثال اول :

$regfile = “m32def.dat”

$crystal = 16000000

Config timer3= timer, prescale=64 , f.timer=64 / 16000000 s

Enable timer3

Start timer3

Dim a as word

Timer3=0

Do

A= timer3    , ever 4us —–A incr timer3

Loop

End

مثال دوم :

$regfile= “m32def.dat”

$crystal = 16000000

Config timer , prescale = 64 , ftimer=64 / 16000000 s

Enable interrupts

On ovf3 ali

Enable timer3

Enable ovf3

Start timer3

Dim a as word

Timer3 = 535

Do

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

Loop

End

Ali:

Timer3 = 535

Return

نکته : در مثال بالا تایمر هر بار تا مقدار 65000 شمرده و با هر بار سریز شدن به زیر برنامه رفته و مقدار اولیه 535 را می گیرد تا دوباره 65000 بشمارد. چون فرکانس کار تایمر در هر 4us یک واحد اضافه می شود پس تایمر در هر 65000 * 4us یعنی هر 260 ms  سرریز می شود.

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

Config timer3 = counter , edge = rising / falling

با این دستور کانتر 3 پیکر بندی شده و با اعمال پالس به پایه t3 مکرو یک واحد به رجیستر counter3 اضافه می شود. این کانتر 16 بیتی بوده پس حداکثر مقدار شمارش آن تا 65535 خواهد بود ( پالس ورودی بعدی کانتر را صفر می کند ).

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

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

Start counter3

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

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

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

Stop counter3

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

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

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

Counter3 = var

Var = counter3

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

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

ENABLE OVF3

VAR = COUNTER3

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

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

Enable ovf3

On ovf3 lable

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

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

مثال اول :

$regfile = “m8def.dat”

$crystal= 8000000

Config timer3 = counter , edge = rising

Start counter3

Dim a as byte

Counter3 = 0

Do

A= counter3

Loop

End

مثال دوم :

$regfile = “m8def.dat”

$crystal=8000000

Config timer3 = counter , edge = rising

Enable intertupts

On ovf3 ali3

Enable ovf3

Start counter3

Dim a as byte

Do

Loop

End

Ali3:

Incr a

Return

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

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

Clear timer = 1/0 , prescale = 1/8/64/256/1024 , _

Compare a = clear / set / toggle / disconnect , _

Compare b = clear / set / toggle / disconnect

نکته : اگر نوشتن دستور در یک خط مقدور نبود با علامت _ به خط بعد بروید.

با کانتر 3 که آشنا شدهاید با ورودی پالس به پایه t3 و نوع اعمالی که با edge قابل تنظیم است کانتر شورع به شمارش می کند. این تایمر قابلیتی دارد که با رسیدن مقدار کانتر به عددی دلخواه که در درون رجیستر های دو بایتی compare 3 a و compare3 b می توان قرار داد خروجی دو پایه oc3a و oc3b را به دلخواه تغییر وضعیت داد.

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

Calear timer : مقدار 1 برای زمانی که بخواهید محتوای کانتر 3 در زمان تطابق و برابری با رجیستر ها پاک شود.

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

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

Start counter 3

Stop counter3

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

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

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

Compare a = clear / set / toggle / disconnect , _

Compare b = clear / set / toggle / disconnect

تایمر 3 را هم می توان در این مد استفاده کرد و کاملا شبیه به حالت استفاده از کانتر می باشد و تنها در این حالت مقدار درون timer3 با رجیستر compare3 a , b مقایسه می شود.

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

Enable timer3

Start timer3

Stop timer3

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

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

Compare 3 a / compare 3 b = var

Var = compare 3 a / compare 3 b

نکته: متغیر var از نوع word است.

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

Enable oc3a

On oc3a lable1

Enable oc3b

On oc3b lable2

شما می توانید زمانی که مقدار counter3 یا timer3 با مقدار رجیسترهای مد مقایسه ای (compare3 a,b) تطابق پیدا کردند ه صورت وقفه به یک زیر برنامه بروید و عملی را انجام دهید.

$regfile = “m16def.dat”

$crystal = 8000000

Config timer3 = timer , prescale = 1,capture edge = falling enable interrupts

On icp3 ali3

Enable timer3

Enable icp3

Start timer3

Dim a as byte

Do

Loop

End

Ali3:

Incr a

Return

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

Config timer3 = pwm , pwm = 8 / 9 10 , prescale = 1 / 8 /64 / 256 /1024 ,_

Compare a pwm = clear up / clear down / disconnect , _

Compare b pwm = clear up / clear down / disconnect , _

تایمر – کانتر 3 دارای دو خروجی pwm است , که پایه های oc3a و oc3b هستند. دو رجیستر برای قرار گیری مقدار pwm خروجی وجود دارد که به نام های pwm3a و pwm3b هستند. که می توان از این دو رجیستر خواند و یا در آنها نوشت.

Pwm = 8 / 9 10 : این مد می تواند به صورت 8 یا 9 یا 10 بیتی پیکر بندی شود. فرکانس کار pwm در بیت های مختلف به صورت زیر است:

F,pwm = f.osc / ( 510 * prescale ) —à pwm = 8bit

f.pwm = f.osc / ( 1022 * prescale ) –à pwm = 9 bit

f.pwm = f.osc / ( 2046 * prescale ) –à pwm = 10 bit

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

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

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

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

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

Pwm3a = var

Var = pwm3a

Pwm3b = var

Var = pwm3b

نکته : متغیر var از نوع byte در حالت 8 بیتی است و از نوع word در حالت 9 بیتی و 10 بیتی است.

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

$regfile = “m16def.dat”

$crystal= 8000000

Config timer3 = pwm , pwm = 8, prescale = 1

Enable timer3

Start timer3

Dim a as byte

A = 255

Pwm3a = 0

Pwm3b = 0

Do

Incr pwm3a

Decr a

Pwm3b = a

Loop

End

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

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

 نویسنده : electronics98

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

پاسخ دهید

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

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

I2C-AVR

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

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