بسمه الله الرحمن الرحیم
تایمر یکی از واحد های مهم در میکرو کنترلرها ومیکروپروسورهاست. تایمر میکرو را انعطاف پذیر می کند .
وظیفه تایمر :
سنجش زمان
شمارش
در کل میکروکنترلر پیک دارای تایمرهای زیر است :
تایمر 0
تایمر 1
تایمر 2
تایمر WDT
تایمر ریست BOR
TIMER 0
خصوصیات تایمر 0:
8 بیت تایمر یا شمارنده آزاد
قابل خواندن ونوشتن
8 بیت نرم افزاری قابل برنامه ریزی پیش مقیاس کننده
انتخاب کلاک خارجی یا داخلی
وقفه هنگام سرریز $FF به $00
انتخاب لبه برای کلاک خارجی
بلوک دیاگرام تایمر 0 :
:OPTION_REG ثبات
بیت انتخاب منبع کلاک :
1: کلاک خارجی
0 : کلاک داخلی
بیت انتخاب اولیه :
1 : پایین رونده
0 : بالا رونده
بیت واگذاری پیش
مقیاس کننده به
WDT :1
0 : تایمر 0
بیت های کنترلی تایمر0:
بیت T0CS : این بیت مد تایمر را تعیین می کند .
0: تایمر در مد تایمر انتخاب می شود و با هر سیکل کلاک خارجی مقدارTMR0 یکی افزایش می یابد.
1: تایمر در مد شمارنده( کانتر)انتخاب می شود وبا هر لبه بالارونده یا پایین رونده کلاک خارجی روی پایه RA4/T0CK یک واحد افزایش می یابد .
بیت T0SE : این بیت لبه منبع تایمر را تعیین می کند. 0: تایمر0 با لبه بالا رونده سیگنال پایه ورودی افزایش می یابد . 1 : تایمر0 با لبه پایین رونده سیگنال پایه ورودی افزایش می یابد .
:PSA بیت
این بیت تعیین می کند پیش مقیاس کننده به تایمر0 اعمال شود یا
.WDT
0: پیش مقیاس کننده به تایمر0 داده شده است.
1: پیش مقیاس کننده به WDT داده شده است.
بیت های PS0 – PS2 : این بیت ها برای تعیین پیش مقیاس کننده بکار می روند.
نکاتی در مورد کنترل تایمر0 : 1) تایمر0 همیشه در حال کار کردن است و نمی توان آنرا خاموش و روشن کرد بنابراین بیت کنترلی بدین منظور وجود ندارد. 2) برای آنکه تایمر0 درمد تایمرعمل کند بایستی بیت PSA را یک کرد تا پیش مقیاس کننده بهWDT واگذار گردد.
وقفه تایمر0 : تایمر0 یک تایمر 8 بیتی است پس از0 تا 255 می شمارد.در طی انتقال از 255 به 0 تایمر ریست می شود و سرریز اتفاق می افتد و بیت T0IF ( INT CON.2 ) را تحت تاثیر قرار می دهد. اگر وقفه تایمر0 (T0IE یا INT CON.5) فعال باشد از وقفه تایمر می توان استفاده کرد علاوه بر آن بیت GIE (INT CIN.7) که بیت وقفه سرا سریست نیز باید فعال شود.
پیش مقیاس کننده : اگر پیش مقیاس کننده را مقدار دهی کرده باشید متناسب با پیش مقیاس کننده تعیین شده چند پالس کلاک باید سپری شود تا مقدار TMR0 یکی افزایش یابد. رابطه بین پیش مقیاس کننده و تایمر بصورت ساده در شکل زیر آمده است:
اگر پیش مقیاس کننده به تایمر0 واگذار گردد نوشتن در TMR0 تنها موجب پاک کردن شمارنده پیش مقیاس کننده می گردد. شمارنده پیش مقیاس کننده قابل خواندن نیست و تنها ازطریق بیت های PS0_PS0 قابل مقدار دهی مجدد می باشد.
TIMER 1
تایمر1 : تایمر 1 ، 16 بیتی و شامل دو ثبات 8 بیتی (TWR1L,TMR1H ) است که قابل خواندن و نوشتن در حال اجرا می باشد. بلوک دیاگرام تایمر 1 در زیر آمده است :
ثبات کنترلی تایمر1(T1 CON ) : تایمر 1 توسط ثبات T1CON قابل کنترل است.
بیت فعال سازی اسیلاتور
تایمر1
1: اسیلاتور فعال است
0 : غیر فعال است
بیت روشن کننده تایمر1:
1: تایمر1 فعال
0 : تایمر1 غیرفعال
بیت انتخاب کلاک:
1: کلاک خارجی
0: کلاک داخلی
بیت کنترل سنکروناسیون
ورودی کلاک خارجی
1=TMR1CS
1: ورودی کلاک خارجی
را سنکرون کن.
0: ورودی کلاک خارجی
را سنکرون نکن.
TMR1CS=0
مقدار این بیت درنظر گرفته
نمی شود.
TMR1-ON: تایمر1 برخلاف تایمر0 قابل روشن وخاموش کردن توسط بیت 0 ثبات T1CON می باشد. TMR1CS: بیت1 این ثبات مد تایمر را مشخص می کند. 0: تایمر در مد شمارنده انتخاب می شود و با لبه بالارونده یا پایین رونده کلاک خارجی افزایش می یابد. 1: تایمر در مد تایمر انتخاب می شود وبا کلاک داخلی افزایش می یابد.
T1SYNC,T1OSCEN: قابلیت دیگر تایمر1 استفاده از اسیلاتور خارجی است که با بیت های دوم و سوم این ثبات صورت می گیرد.
پیش مقیاس کننده(T1CKPSO,T1CKPS1 ) :
از بیت های فوق که بیت های چهارم و پنجم ثبات کنترلی هستند برای تعیین پیش مقیاس کننده استفاده می شود.
که طبق جدول زیر می باشد:
وقفه تایمر 1 : دو ثبات تایمر1 از 0000$ تا $FFFF می شمارند. هنگام افزایش از $FFFF به$0000 سرریز اتفاق می افتد و بیت پرچم آن واقع در ثبات PIR1 یک می شود.اگر وقفه تایمر1 فعال باشد می توان از سرریز تایمر، وقفه ایجاد کرد. این وقفه با صفر و یک کردن TMR1IF(PIE1.0) فعال یا غیرفعال می شود.
چند نکته در مورد تایمر1:
اگر اسیلاتور تایمر1 فعال باشد پایه های RC1/T1OSI/CCP2 T1CKI/T1OSO/RC0, به حالت ورودی در می آیند و مقدار TRIC1:0 نادیده گرفته می شود.
پیش مقیاس کننده تایمر1 هنگام نوشتن در ثبات های TMR1L TMR1H , پاک می شود و بایستی دوباره مقدار دهی شود.
خواندن و نوشتن ثبات های TMR1L , TMR1H در حال شمردن امکان پذیر است ولی ممکن است مشکلی پیش بیاید چون خواندن ونوشتن این دو ثبات همزمان صورت نمی گیرد.
تایمر1 دارای یک ورودی ریست داخلی است. تایمر1 از طریق هر دو واحد CCP می تواند ریست شود.
عملکرد تایمر 1 در مد تایمر: مد تایمر توسط پاک کردن بیت TMR1CS (TICON.1 ) انتخاب می شود.فرکانس کلاک ورودی به تایمر 1 (FOSC/4 ) است. بیت کنترل همزمانی T1SYNC (TCON.2 ) در مورد تایمراثری ندارد چون تایمر همیشه در حالت همزمان است.
عملکرد تایمر1 در مد شمارنده همزمان : مد شمارنده بوسیله یک کردن بیت TMR1CS انتخاب می شود. اگر تایمر درمد شمارنده قرار گیرد قبل از اینکه شروع به شمارش کند منتظر یک لبه پایین رونده می شود تا همزمانی صورت بگیرد. زمانی که تایمر از منبع خارجی برای افزایش استفاده می کند این افزایش روی لبه بالارونده اتفاق می افتد. اگر بیت T1OSCEN یک شود تایمر روی لبه بالارونده از ورودی کلاک در پایه CCP2/T1OSI/RC1 در پایه افزایش می یابد.واگرT1OSCEN صفرگردد تایمر با لبه بالارونده ازورودی کلاک در پایه T1CK1/T1OS0/RC0 افزایش می یابد. اگر بیت T1SYNC صفر گردد ورودی کلاک خارجی با کلاک های فاز داخلی همزمان می شود. در این حالت بایستی دقت کرد که اگر میکرو در مد SLEEP قرار گیرد تایمر1 نمی تواند کار کند چون کلاک داخلی وجود ندارد تا کلاک خارجی با آن همزمان گردد.
عملکرد تایمر در مد شمارنده غیر همزمان: اگربیت T1SYNC (T1CON.2 ) یک شود دیگر کلاک خارجی با کلاک داخلی همزمان نمی شود. در این حالت تایمر بطور غیرهمزمان با کلاک های داخلی افزایش می یابد. تایمر1 می تواند در این مد در مدتی که میکرو در مد SLEEP قرار دارد نیز کار کند وبا ایجاد وقفه سرریز تایمر1 ، میکرو را از حالت SLEEP خارج کند.
TIMER 2
تایمر2 :
این تایمر8 بیتی است ودارای پیش مقیاس کننده وپس مقیاس کننده می باشد.
این تایمر بعنوان PWM برای واحد CCP نیز بکار می رود.
ثبات کنترلی T2CON برای کنترل این تایمر استفاده می شود.
بیت های T2CKPS0,T2CKPS1 جهت تعیین پیش مقیاس کننده برای تایمر2 بکار می روند.
تایمر2 یک ثبات دوره ای 8 بیتی به نام PR2 دارد اگراین ثبات مقداردهی گردد تایمر از 00$ شروع به شمردن می کند تا به مقدار PR2 برسد و در اینجا دوباره مقدارتایمر2، 00$ می شود.
PR2 یک ثبات قابل خواندن ونوشتن است که به محض ریست میکرو با $FF مقداردهی می شود.
خروجی می تواند با استفاده از بیت های TOUTPS0:3 برای تولید وقفه تحت پس مقیاس کننده 4 بیتی قرار گیرد (1:1 تا 1:16 ) برای اینکه بیت TMR2IF یک شود بایستی ثبات TMR2 با اندازه پس مقیاس کننده مشخص شده در ثبات PR2 یکی شود.
بلوک دیاگرام تایمر 2 :
ثبات کنترلی T2CON :
بیت روشن کردن تایمر2
1: روشن کردن
0: خاموش کردن
انتخاب POSTSCALE
انتخاب پیش مقیاس کننده
تایمر با بیت کنترلی TMR2 ON روشن می شود زمانی که از تایمر استفاده نمی شود بهتر است این بیت 0 گردد تا توان مصرفی ناشی از تایمر کاهش یابد.
شمارنده پیش مقیاس کننده و پس مقیاس کننده زمانی پاک می شود:
1) نوشتن ثبات TMR2
2) نوشتن ثبات T2CON
3)ریست میکرو (ریست MCLR-ریستBORیاWDT –POR)
نکته :TMR2 وقتی که T2CON نوشته می شود پاک نمی شود.
WATCH DOG TIMER
تایمر WDT: ممکن است برنامه ایی که نوشته اید بعد از یک مدت طولانی در یکی از مراحل اجرا د چار مشکل شده و میکرو در یک حلقه بی نهایت گرفتار شود. تنها راه حل در اینجا ریست کردن برنامه است . رفع خودکار این مشکل توسط تایمر WDT انجام می گیرد و به عبارت دیگر WDT میکرو را از حلقه بی نهایت که خارج از مسیر برنامه اصلی اتفاق افتاده خارج می کند.
بلوک دیاگرام تایمر WDT:
عملکرد WDT:
واحد WDT در بسیاری از میکرو ها با کارکردی مشابه وجود دارد. در PIC یک شبکه خازنی و مقاومتی وجود دارد که مولد یک کلاک مستقل از کلاک خارجی می باشد.
وقتی WDT فعال می شود شمارش از $00 تا$FF ادامه می یابد، وقتی شمارنده از $FF به $00 می رود WDT میکرو را ریست می کند.
تنها راهی که می توان مانع از ریست WDT شد این است که در فواصل زمانی مشخص زمانی WDT را غیر فعال کرد . حال اگر برنامه طبق پیش بینی پیش نرفت و در مرحله ایی ازاجرا دچارمشکل شد تایمرسرریزشده ومیکرو را ریست می کند.
زمان بندی WDT: برگه اطلاعات میکرو کنترلر پیک مشخص می کند که مدت زمان عملکرد WDT حدود 18 میلی ثانیه است.البته این زمان تقریبی است و علت تقریبی بودن آن مولد کلاک است که یک شبکه RC می باشد. WDT با دستورات CLRWDT (در اسمبلی) وCLEAR WDT (در بیسیک) قبل از ریست کردن میکرو پاک می شود. پیش مقیاس کننده برای WDT نیز بکار می رود با تقسیم فرکانس کلاک WDT زمان ریست شدن میکرو طولانی تر می شود.
زمان بندی دستورات: زمان اجرای هر دستور در میکرو کنترلر پیک یک سیکل داخلی (FOSC/4) و یا دو سیکل می باشد. در بیسیک به علت اینکه برنامه سطح بالا است و هر دستور هنگام تبدیل به چندین کد اسمبلی تبدیل می شود نمی توان تعیین کرد که هر دستور در چه مدتی اجرا می شود. یک روش برای بدست آوردن زمان اجرای دستور قرار دادن علامت در نقاط مختلف برنامه می باشد. مثلا در جایی که می خواهید WDT را قرار دهید یکی از پایه ها را یک و بلا فاصله صفر کنید. بعد توسط اسیلوسکوب سیگنال دیده شده را ازاین پایه را نگاه کنید و زمان بین هر بار تغییر روی پایه را بدست آورید این همان زمانی است که برای حدس زدن زمان WDT نیاز دارید.
برنامه نویسی تایمر WDT: برای استفاده از تایمر WDT بایستی بیت دوم کلمه پیکره بندی نشانده شود برای این کار بایستی از طریق نرم افزاری که برای برنامه ریزی استفاده می کنید تایمر WDT را فعال کنید. راه دیگربرای فعال کردن تایمر WDT استفاده ازعبارت زیر می باشد : @ DEVICE WDT_ON که در حقیقت بیت دوم کلمه پیکره بندی را در هنگام برنامه ریزی مقدار دهی می کند.
END