راه اندازی ساعت با AVR

راه اندازی ساعت با AVR یکی از مسائلی است که در پروژه های مختلف مورد استفاده قرار می‌گیرد. این کار با استفاده از آی سی DS1307 بسیار ساده تر و دقیق‌تر خواهد بود. علاوه بر آن بر دقت دستگاه ما تاثیر زیادی خواهد گذاشت. در این مطلب قصد داریم تا نحوه ارتباط بین آی سی DS1307 و میکرو AVR را با کمک برنامه Bascom آموزش دهیم.

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

قبلاً در مورد پروژه ساعت آنالوگ با LCD گرافیکی در AVR صحبت کرده ایم. حال چگونگی راه اندازی ساعت دیجیتال را بررسی می‌کنیم.

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

این روش بسیار ساده ای است و نیاز به هیچ ابزار اضافه ای ندارد. صرفاً چند خط به برنامه اصلی اضافه خواهد شد. البته مشکلاتی را نیز به دنبال دارد که برخی از آن‌ها عبارت اند از:

  • درگیر شدن بخشی از پردازنده میکرو
  • دقیق نبودن ساعت
  • وابستگی محاسبه ساعت به برق

 

افزایش دقت ساعت میکرو

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

 

بهترین روش برای داشتن زمان در پروژه استفاده از آی سی هایی هست که به همین منظور طراحی شده اند و خودشان زمان را محاسبه می‌کنند. هنگامی که ما به زمان نیاز داریم، زمان را از آی سی خارجی فراخوانی می‌کنیم.

مزیت استفاده از این آی سی ها این است که بسیار دقیق هستند. حتی با قطع ولتاژ نیز می‌توانند به کمک باتری متصل به خودشان، مدت ها کار کنند.

البته این آی سی ها نیاز به قطعه دیگری به نام کریستال دارند که وظیفه آن محاسبه ثانیه برای جلو رفتن زمان است.

معمولا این سری آز آی سی ها دارای 8 پایه می‌باشند و از لحاظ جاگیری در برد، فضای بسیار کمی را اشغال خواهند کرد.

در ادامه مقاله به بررسی آی سی DS1307 و راه اندازی ساعت با AVR خواهیم پرداخت.

 

ساختار آی سی DS1307

آی سی DS1307 یک آی سی 8 پایه است که برای راه اندازی آن نیاز به یک باتری سکه ای 3 ولتی با یکی از مقادیر فرکانس زیر داریم.

  • 1Hz
  • 4.096KHz
  • 8.192KHz
  • 32.768KHz

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

باتری سکه ای برای این است که زمان قطع برق آی سی، زمان از کار نیوفتد و به کار خود ادامه دهد. طبق کاتالوک آی سی، این باتری می تواند به مدت 10 سال کار کند. بنابراین مصرف آی سی به شدت پایین است.

 

پروتکل ارتباطی آی سی ساعت

پروتکل ارتباطی این آی سی I2C است و نیاز به 2 سیم برای اتصال به میکرو AVR دارد.

طبق استاندارد پروتکل I2C باید سیم های این پروتکل پول آپ (اتصال یک مقاومت بین هر سیم به مثبت مدار) شوند. پس نیاز به 2 مقاومت به مقادیر 10 کیلو اهم داریم.

 

برنامه ساعت دیجیتال در میکرو AVR

در اینجا تمام دستوراتی که برای راها ندازی این ماژول مورد نیاز است را به صورت جداگانه توضیح خواهیم داد.

تعریف پایه های ارتباطی

در ابتدا باید 2 پایه ای که می‌خواهیم به عنوان پروتکل I2C استفاده کنیم را تعریف کنیم. این کار با اجرای کدهای زیر انجام می‌شود.

Config Sda = PortA.0

Config Scl = PortA.1

 

سپس مدت تأخیر در پروتکل I2C را مشخص می‌کنیم.

بهترین مقدار تاخیر 10 است. که تقریبا اکثر آی سی هایی که از پروتکل I2C پشتیبانی می کنند با این تاخیر کار خواهند کرد.

Config I2cdelay = 10

 

متغیرهای زمانی

در اینجا دو متغییر تعریف می‌کنیم.

  • Ds1307w : برای زمانی که می‌خواهیم زمان را به IC بدهیم.
  • Ds1307r : برای زمانی که می‌خواهیم زمان را از IC بخوانیم.

 

این دو متغییر همان آدرس های برقراری ارتباط با آی سی از طریق پروتکل I2C می باشد که در کاتالوگ DS1307 ذکر شده است.

اگر اطلاعات دقیق‌تری در این باره می‌خواهید سوالات خود را در بخش نظرات مطرح کرده یا به کاتالوگ مراجعه نمایید.

Const Ds1307w = &HD0

Const Ds1307r = &HD1

 

گرفتن زمان از آی سی DS1307

مجموعه کدهای زیر را باید در یک زیر برنامه قرار داد. و آن را برای دریافت زمان از آی سی فراخوانی کرد.

همانطور که متوجه شدید، اطلاعات دریافت شده داخل متغیری به نام Clock ریخته می‌شود. متغیر Clock یک متغیر معمولی نیست! بلکه از تعدادی زیرمتغیر به نام های Clock(1) تا Clock(7) تشکیل شده است. در هر کدام یکی از پارامترهای زمانی (ثانیه، دقیقه، ساعت، هفته، روز، ماه، سال) قرار می‌گیرد.

و در حلقه آخر مقادیر دریافتی از حالت BCD خارج خواهد شد.

I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte Clock(7) , Ack
I2crbyte Clock(6) , Ack
I2crbyte Clock(5) , Ack
I2crbyte Clock(4) , Ack
I2crbyte Clock(3) , Ack
I2crbyte Clock(2) , Ack
I2crbyte Clock(1) , Nack
I2cstop
For X = 1 To 7
  Clock(x) = Makedec(clock(x))
Next

 

تنظیم ساعت با AVR

مجموعه کدهای زیر را در یک زیر برنامه قرار می‌دهیم. و برای تنظیم زمان آی سی آن را فراخوانی می‌کنیم.

همانطور که می‌دانید می‌بایست قبل از ارسال زمان به آی سی، آن‌را تبدیل به BCD کرد.

بنابراین ابتدا تمام متغیرهای Clock را به BCD تبدیل کرده و سپس به صورت تک تک به آی سی ارسال می‌کنیم.

For X = 1 To 7
   Clock(x) = Makebcd(clock(x))
Next
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte Clock(7)
I2cwbyte Clock(6)
I2cwbyte Clock(5)
I2cwbyte Clock(4)
I2cwbyte Clock(3)
I2cwbyte Clock(2)
I2cwbyte Clock(1)
I2cstop

 

متغیرهای استفاده شده به صورت زیر تعریف می‌شوند:

  • Clock(1) : سال
  • Clock(2) : ماه
  • Clock(3) : روز
  • Clock(4) : هفته
  • Clock(5) : ساعت
  • Clock(6) : دقیقه
  • Clock(7) : ثانیه

 

استفاده از آی سی DS1307 به عنوان حافظه

یک موضوع مهم دیگر این است که این آی سی دارای 56 حافظه 8 بیتی رم می‌باشد. که می‌توان از آن به عنوان حافظه جانبی نیز استفاده کرد.

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

اگر در استفاده از حافظه رم آی سی با سوالی مواجه شدید، آن‌را از بخش نظرات با ما مطرح کنید.

 

جمع بندی: راه اندازی ساعت با AVR

در این مقاله با استفاده از ماژول DS1307 به عنوان ساعت جانبی، یک ساعت دیجیتال با میکرو AVR راه اندازی کردیم. به دلیل سربار کمتر اجرایی روی یک آی سی خارجی، دقت ساعت بالاتر خواهد رفت. همچنین به دلیل وجود باتری، با قطع برق، محاسبه زمان به کار خود ادامه می‌دهد. کدهای مرتبط با تنظیم ساعت و تاریخ و دریافت آن‌ها از IC را بررسی کردیم. در پایان نیز به راهکاری برای ذخیره سازی اطلاعات در رم موجود در ماژول اشاره شد.