بازدیدها: 1484
تایمر کانتر صفر یا دو در برخی از میکرو کنترولرها این قابلیت را دارند که به صورت غیر همزمان کار کنند یعنی پالس مورد نیاز خودشان را نه از نوسان ساز دریافت کنند بلکه از یک کریستال 32.768KHz که به پایه های TOSC1 , TOSC2 متصل شده دریافت می کنند. حال فلسفه این عدد 32.768 چی؟ با استفاده از این نوسان ساز و انتخاب N=128 می توان دقیقا هر یک ثانیه یک سریز در تایمر داشته باشم یعنی اگر تایمر با این فرکانس کار بکند از 00H شروع و به FFH برسید 1 ثانیه طول میکشد که با استفاده از این قضیه می توان یه RTC ساعت واقعی طراحی کرد.
در این پروژه ما با استفاده از تایمر 2 میکرو ATMEGA16 یک ساعت دقیق طراحی کردیم. با استفاده از Code Wizard تایمر 2 را به صورت زیر تنظیم می کنیم:
Clock Source: TOSC1 pin
Clock Value: PCK2/128
Mode: Normal to FFH
Output: Disconnect
1 Overflow Intrrupt
0 Compare Match Interrupt
Timer Value: 0h
Compare: 0h
منبع کلاک تایمر 2 را پین TOSC1 انتخاب می کنیم و به این پین کریستال کوارتز 32.768 کیلوهرتز وصل کردن و در قسمت مقدار کلاک گزینه PCK2/128 را انتخاب کرده تا فرکانس بر 128 تقسیم شود 256=128/32768 که این عدد روند معادل همان FFH می باشد که تایمر قابلیت شمارش آن را دارد. همچین باید وقفه تایمر را نیز تیک بزنید تا زیرروال آن ایجاد گردد. بعد از اجرای کدویزارد کد وقفه تایمر TIMSK=0x40; ایجاد می شود که باید آن را در تابع main قرار دهید.
توضیح برنامه:
زیرروال date_calc وظیفه آن این است که محاسبات مربوط به تاریخ که به صورت شمسی می باشد را انجام داده و درون متغییر های مربوطه قرار دهد.
زیرروال timer2_ovf_isr هم هنگامی که تایمر سرریز کند اجرا می شود و یک واحد به ثانیه شمار اضافه می شود و یک سری دستورات شرطی در آن نوشته شده تا دقیقه و ساعت و تاریخ ایجاد گردد.
در تابع main هم تنظیمات و پیکره بندی مروبط به LCD و تایمر و همچنین فعال کردن وقفه سراسری می باشد. و در حلقه بی نهایت هم هر 300 میلی ثانیه LCD رفرش می شود.
نکته کریستال 32.768 بعلاوه یکی از نوسان ساز های داخلی یا خارجی خود میکرو می باشد.
با تشکر فراوان سید محسن قاسمیان
ورژن نرم افزار ها: CodeVisionAVR V2.04.4a و Proteus 7.7 sp2 Professional