دستورات تایمر کانتر 3
این تایمر – کانتر دارای امکاناتی دیگر مانند مد compare و مد capture و خروجی pwm می باشد.
پیکر بندی تایمر کانتر 3 به عنوان تایمر در زبان بیسیک BASIC
1 |
CONFIG TIMER3 = timer , prescale = 1/8/64/256/1024 |
این تایمر 16 بیتی بوده پس حداکثر مقدار شمارش آن تا 65535 خواهد بود.
1/8/64/256/1024 : مقادیری که می توان برای تقسیم فرکانس میکرو استفاده کرد
با دستور بالا تایمر – کانتر 3 به عنوان یک تایمر به میکرو معرفی می شود. میزان فرکانس کار این تایمر از رابطه زیر بدست می آید:
1 |
prescale/فرکانس تایمر = فرکانس کار میکرو |
فعال و روشن کردن تایمر کانتر 3 در زبان بیسیک BASIC
1 2 3 |
Enable timer3 Start timer3 |
در هنگام برنامه نویسی این دو دستور را حتما با هم به کار برید تا میکرو تایمر را روشن کند.
غیر فعال کردن تایمر کانتر 3 در زبان بیسیک BASIC
1 |
Stop timer3 |
از این دستور می توان در جاهای مختلف برنامه بری خاموش کردن تایمر استفاده نمود.
نکته : با خاموش کردن timer3 مقدار شمارش شده صفر نخواهد شد و با روشن کردن دوباره آن ادامه شمارش انجام خواهد شد.
نوشتن و خواندن تایمر کانتر 3 در زبان بیسیک BASIC
1 2 3 |
Timer3 = var Var = timer3 |
نکته : مقدار تایمر در رجیستری به نام timer3 قرار گرفته است که می توان به این رجیستر مقدار داد تا تایمر از آن مقدار شروع به شمارش کند و یا مقدار آن را در متغیری که برای انجام عملیاتی لازم دارید بریزید. نوع متغیر var باید word باشد.
وقفه تایمر کانتر 3 در زبان بیسیک BASIC
1 2 3 |
Enable ovf3 On ovf3 lable |
پرچم سریزی تایمر 3 به نام ovf3 بوده و همانطور که گفته شد با رسیدن مقدار تایمر به عدد 65535 (مقدار timer3 برابر صفر می شود) این پرچم 1 شده و می توان از آن به عنوان پرش به یک زیر برنامه استفاده کرد و در زیر برنامه استفاده کرد و در زیر برنامه با return بازگشت. در این دستور باید اول پرچم را فعال سازی و بعد با دستور ovf3 on در صورت یک شدن ovf3 به برچسب زیر برنامه پرش کرد.
نکته : فراموش نشود برای کار با هر وقفه ای اول باید وقفه کلی enable interrupts را فعال کرد.
مثال اول :
1 2 3 4 5 6 7 8 9 10 11 12 |
$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 |
مثال دوم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$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 به عنوان کانتر در زبان بیسیک BASIC
1 |
Config timer3 = counter , edge = rising / falling |
با این دستور کانتر 3 پیکر بندی شده و با اعمال پالس به پایه t3 مکرو یک واحد به رجیستر counter3 اضافه می شود. این کانتر 16 بیتی بوده پس حداکثر مقدار شمارش آن تا 65535 خواهد بود ( پالس ورودی بعدی کانتر را صفر می کند ).
Edge : گزینه rising برای حساس بودن پایه به لبه بالارونده و گزینه falling برای حساس بودن پایه به لبه پایین رونده
فعال و روشن کردن تایمر کانتر 3 در زبان بیسیک BASIC
1 |
Start counter3 |
این دو دستور را حتما با هم به کار برید تا میکرو کانتر را روشن کند.
نکته : برای روشن و خاموش کردن کانتر در جاهای مختلف برنامه از start counter3 استفاده نمایید.
غیر فعال کردن کانتر 3 در زبان بیسیک BASIC
1 |
Stop counter3 |
از این دستور می توان در جاهای مختلف برنامه برای خاموش کردن کانتر استفاده نمود.
نکته : با خاموش کردن counter3 مقدار شمارش شده صفر نخواهد شد و با روشن کردن دوباره آن ادامه شمارش انجام خواهد شد.
نوشتن و خواندن کانتر 3 در زبان بیسیک BASIC
1 2 3 |
Counter3 = var Var = counter3 |
نکته : مقدار کانتر در رجیستری به نام counter3 قرار گرفته است که می توان به این رجیستر مقدار داد تا کانتر از آن مقدار شروع به شمارش کند و یا مقدار آن را در متغیری که برای انجام عملیاتی لازم دارید بریزید. متغیر var باید از نوع WORD باشد.
وقفه کانتر 3 در زبان بیسیک BASIC
1 2 3 |
ENABLE OVF3 VAR = COUNTER3 |
نکته : مقدار کانتر در رجیستری به نام COUNTER3 قرار گرفته است که می توان به این رجیستر مقدار داد تا کانتر از آن مقدار شروع به شمارش کند و یا مقدار آن را در متغیری که برای انجام عملیاتی لازم دارید بریزید. متغیر VAR باید از نوع WORD باشد.
وقفه کانتر 3 در زبان بیسیک BASIC
1 2 3 |
Enable ovf3 On ovf3 lable |
پرچم سریزی کانتر به نام ovf3 بوده و همان طور که گفته شد با رسیدن مقدار کانتر به عدد 65535 و با ورود یک پالس دیگر (مقدار counter3 برابر صفر می شود) این پرچم 1 شده و می توان از آن به عنوان پرش به یک زیر برنامه استفاده کرد و در زیر برنامه با return بازگشت. در این دستور باید اول پرچم را فعال سازی و بعد با دستور on ovf3 در صورت یک شدن ovf3 به برچسب زیربرنامه پرش کرد.
نکته : فراموش نشود برای کار با هر وقفه ای اول باید وقفه کلی enable interrupts را فعال کرد.
مثال اول :
1 2 3 4 5 6 7 8 9 10 11 |
$regfile = “m8def.dat” $crystal= 8000000 Config timer3 = counter , edge = rising Start counter3 Dim a as byte Counter3 = 0 Do A= counter3 Loop End |
مثال دوم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$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 به همراه مد مقایسه ای در زبان بیسیک BASIC
1 2 3 4 5 |
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 در مد مقایسه ای
1 2 3 |
Start counter 3 Stop counter3 |
نکته: به یاد داشته باشید که برای این مد هم باید از این دستورات استفاده کنید.
پیکر بندی تایمر 3 به همراه مد مقایسه ای
1 2 3 4 |
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 در مد مقایسه ای
1 2 3 4 |
Enable timer3 Start timer3 Stop timer3 |
نکته : به یاد داشته باشید که برای این مد هم باید از این دستورات استفاده کنید.
نوشتن و خواندن رجیسترهای مد مقایسه ای
1 2 3 |
Compare 3 a / compare 3 b = var Var = compare 3 a / compare 3 b |
نکته: متغیر var از نوع word است.
وقفه کانتر و تایمر در مد مقایسه ای در زبان بیسیک BASIC
1 2 3 4 5 |
Enable oc3a On oc3a lable1 Enable oc3b On oc3b lable2 |
شما می توانید زمانی که مقدار counter3 یا timer3 با مقدار رجیسترهای مد مقایسه ای (compare3 a,b) تطابق پیدا کردند ه صورت وقفه به یک زیر برنامه بروید و عملی را انجام دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$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
1 2 3 4 |
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 در بیت های مختلف به صورت زیر است:
1 2 3 4 |
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
1 2 3 4 5 |
Pwm3a = var Var = pwm3a Pwm3b = var Var = pwm3b |
نکته : متغیر var از نوع byte در حالت 8 بیتی است و از نوع word در حالت 9 بیتی و 10 بیتی است.
نکته : برای فعال کردن pwm باید دستورات enable timer 3 و start timer3 را حتما استفاده کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$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 |