دستورات تایمر کانتر 1 به زبان بیسیک BASIC

تایمر کانتر 1

دستورات تایمر کانتر 1 به زبان بیسیک BASIC

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

پیکر بندی تایمر کانتر 1 به عنوان تایمر در زبان بیسیک BASIC

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

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

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

فعال و روشن کردن تایمر کانتر 1 در زبان بیسیک BASIC

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

غیر فعال کردن تایمر کانتر 1 در زبان بیسیک BASIC

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

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

نوشتن و خواندن تایمر کانتر 1 در زبان بیسیک BASIC

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

وقفه تایمر کانتر 1 در زبان بیسیک BASIC

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

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

مثال اول :

مثال دوم :

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

پیکر بندی تایمر کانتر 1 به عنوان کانتر در زبان بیسیک BASIC

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

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

فعال و روشن کردن تایمر کانتر 1 در زبان بیسیک BASIC

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

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

غیر فعال کردن تایمر کانتر 1 در زبان بیسیک BASIC

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

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

نوشتن و خواندن تایمر کانتر 1 در زبان بیسیک BASIC

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

وقفه تایمر کانتر 1 در زبان بیسیک BASIC

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

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

مثال اول :

مثال دوم :

پیکر بندی کانتر 1 به همراه مد مقایسه ای در زبان بیسیک BASIC

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

با کانتر 1 که آشنا شده اید. با ورودی پالس به پایه t1 و نوع اعمالی که با edge قابل تنظیم است, کانتر شروع ب شمارش می کند. این تایمر قابلیتی دارد که با رسیدن مقدار کانتر به عددی دلخواه که در درون رجیستر های دو بایتی compare1a و compare1 b می توان قرار داد خروجی دو پایه oc1a و oc 1b را به دلخواه تغییر وضعیت داد.

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

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

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

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

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

پیکر بندی تایمر 1 به همراه مد مقایسه ای در زبان بیسیک BASIC

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

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

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

نوشتن و خواندن رجیسترهای مد مقایسه ای در زبان بیسیک BASIC

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

وقفه کانتر و تایمر در مد مقایسه ای در زبان بیسیک BASIC

شما می توانید زمانی که مقدار counter1 یا timer1 با مقدار رجیسترهای مد مقایسه ای ( compare1a , b ) تطابق پیدا کردند , به صورت وقفه به یک زیر برنامه بروید و عملی را انجام دهید.

پیکر بندی کانتر 1 به همراه مد capture

با کانتر 1 که آشنا شده اید. با ورودی پالس به پایه t1 و نوع اعمالی که با edge قابل تنظیم است , کانتر شروع به شمارش می کند. حال در این مد می توان با دادن پالسی به پایه icp1 ( قابل تنظیم برای لبه بالارونده یا پایین رونده )

مقدار counter1 را درون رجیستر این مد به نام capture قرار داد.

Noise cancel : در حالت 1 عملیات نویز گیری انجام می شود. به این صورت که نسبت به پارازیت هایی که روی پایه icp1 قرار می گیرد میکرو عکس العملی از خود نشان نمی دهد و نیز نادیده گرفته می شود.

فعال و روشن کردن و غیر فعال کردن کانتر 1 در مد capture

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

پیکر بندی تایمر 1 به همراه مد capture

در این مد هم می توان از تایمر استفاده کرد و با این تفاوت که در لحظه اعمال پالس به پایه icp1 مقدار timer1 در درون رجیستر capture ریخته می شود.

فعال و روشن کردن و غیر فعال کردن تایمر 1 در مد capture

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

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

با این دستور می توان مقداری را در کانتر قرار داده یا مقدار آن را در متغیری بریزید.

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

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

شما می توانید زمانی که توسط پالس به پایه ورودی این مد (icp) این پایه را تحریک می کنید. مقدار counter1 در رجیستر مد capture قرار داده به صورت وقفه به یک زیر برنامه بروید و عملی را انجام دهید.

Lable1 : نام برچسب مورد نظر خود

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

در مورد مدولاسیون پهنای پالس یا همان pwm در فصل یک بحث شده است. شما بوسیله یک تایمر کانتر می توانید این سیگنال را در خروجی ایجاد کنید و مقدار ان را در هر لحظه در کنترل خود داشته باشید. از مهم ترین کاربردهای این مد و این سیگنال در کنترل سرعت موتورهای dc می باشد. چون در موتورها نمی توان با کاهش ولتاژ و یا جریان سرعت را کاهش داد و این کاهش باعث افت توان موتور خواهد شد از این رو توسط مدولاسیون پهنای پالس می توان زمان روشن و خاموش بودن یک موتور را تحت کنترل در آورد.البته این روش هم باعث افت توان می شود ولی نسبت به حالت ها دیگر از مزیت های کنترلی بیشتری برخوردار است. در فصل فصل بعد بیشتر با کاربردهای pwm آشنا خواهید شد.

تایمر – کانتر 1 دارای دو خروجی PWM است که پایه های OC1A و OC1B هستند. دو رجیستر برای قرار گیری مقدار PWM خروجی وجود دارد که به نام های PWM1A و PWM1B هستند. که می توان از این دو رجیستر خواند و یا در آنها نوشت.

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

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

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

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

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

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

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

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

 اطلاعات پروژه

 رمز فایل : www.electronics98.com (این مطلب فاقد فایل جهت دانلود است)

 نویسنده : فرهاد اکبری

 تاریخ انتشار : 24 سپتامبر 2014

3 دیدگاه

  1. بسیار عالی و جامع من که واقعا بدردم خورد مرسی

  2. عالی بود واقعا کامل و مفید و کاملا گویامچکرم

  3. خواهش میکنم، نظر لطف شماست دوست عزیز.

 شرایط و قوانین ثبت دیدگاه

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

 لطفاً بیش‌از‌حدِ معمول، شکلک یا ایموجی استفاده نکنید و از کشیدن حروف یا کلمات با صفحه‌کلید بپرهیزید.

 به کاربران و سایر اشخاص احترام بگذارید. پیام‌هایی که شامل محتوای توهین‌آمیز و کلمات نامناسب باشند، حذف می‌شوند.

 از ارسال لینک‌های سایت‌های دیگر و ارایه‌ی اطلاعات شخصی خودتان مثل شماره تماس، ایمیل و آی‌دی شبکه‌های اجتماعی پرهیز کنید.