راه اندازی ساعت با AVR یکی از مسائلی است که در پروژه های مختلف مورد استفاده قرار میگیرد. این کار با استفاده از آی سی DS1307 بسیار ساده تر و دقیقتر خواهد بود. علاوه بر آن بر دقت دستگاه ما تاثیر زیادی خواهد گذاشت. در این مطلب قصد داریم تا نحوه ارتباط بین آی سی DS1307 و میکرو AVR را با کمک برنامه Bascom آموزش دهیم.
در برخی پروژه ها لازم است که دستگاه بر اساس زمان بندی کار کند. و یا هر دستوری را در زمان و یا تاریخ مشخص ارسال کند. بنابراین در اینگونه پروژه ها بهتر است از ابزاری که زمان و تاریخ را برای ما محاسبه میکند، استفاده کنیم.
قبلاً در مورد پروژه ساعت آنالوگ با LCD گرافیکی در AVR صحبت کرده ایم. حال چگونگی راه اندازی ساعت دیجیتال را بررسی میکنیم.
یکی از روشهایی که در پروژه های معمولی استفاده میشود، بکارگیری قابلیت هایی است که خود میکروها برای این کار انجام در نظر گرفته اند. یعنی برنامه ساعت در خود میکرو طراحی شده و اساس کار آن یک کلاک خارجی خواهد بود. برنامه اصلی نیز از این بخش ساعت را دریافت میکند.
این روش بسیار ساده ای است و نیاز به هیچ ابزار اضافه ای ندارد. صرفاً چند خط به برنامه اصلی اضافه خواهد شد. البته مشکلاتی را نیز به دنبال دارد که برخی از آنها عبارت اند از:
از عوامل فوق، مهم ترین آن دقیق نبودن ساعت میکرو است. زیرا دقت ساعت وابسته به دقیق بودن سرعت عملکرد میکرو میباشد. هرچه حجم برنامه میکرو بیشتر باشد، محاسبه زمان دقت کمتری خواهد داشت. زیرا میکرو باید تمام برنامه را اجرا کند. به عبارت ساده تر، میکرو سنگین کار میکند و همین امر باعث میشود محاسباتی که در برنامه برای فاصله زمانی یک ثانیه وارد کرده ایم دقیق کار نکند.
بهترین روش برای داشتن زمان در پروژه استفاده از آی سی هایی هست که به همین منظور طراحی شده اند و خودشان زمان را محاسبه میکنند. هنگامی که ما به زمان نیاز داریم، زمان را از آی سی خارجی فراخوانی میکنیم.
مزیت استفاده از این آی سی ها این است که بسیار دقیق هستند. حتی با قطع ولتاژ نیز میتوانند به کمک باتری متصل به خودشان، مدت ها کار کنند.
البته این آی سی ها نیاز به قطعه دیگری به نام کریستال دارند که وظیفه آن محاسبه ثانیه برای جلو رفتن زمان است.
معمولا این سری آز آی سی ها دارای 8 پایه میباشند و از لحاظ جاگیری در برد، فضای بسیار کمی را اشغال خواهند کرد.
در ادامه مقاله به بررسی آی سی DS1307 و راه اندازی ساعت با AVR خواهیم پرداخت.
آی سی DS1307 یک آی سی 8 پایه است که برای راه اندازی آن نیاز به یک باتری سکه ای 3 ولتی با یکی از مقادیر فرکانس زیر داریم.
به صورت پیشفرض بهتر است کریستال 32.768KHz
را استفاده کنیم. ولی اگر میخواهید از دیگر انواع کریستال ها استفاده کنید، باید فیوزبیت های مربوط به شماره کریستال را از داخل آی سی تغییر دهید. البته انجام این کار را توصیه نمی کنیم.
باتری سکه ای برای این است که زمان قطع برق آی سی، زمان از کار نیوفتد و به کار خود ادامه دهد. طبق کاتالوک آی سی، این باتری می تواند به مدت 10 سال کار کند. بنابراین مصرف آی سی به شدت پایین است.
پروتکل ارتباطی این آی سی I2C است و نیاز به 2 سیم برای اتصال به میکرو AVR دارد.
طبق استاندارد پروتکل I2C باید سیم های این پروتکل پول آپ (اتصال یک مقاومت بین هر سیم به مثبت مدار) شوند. پس نیاز به 2 مقاومت به مقادیر 10 کیلو اهم داریم.
در اینجا تمام دستوراتی که برای راها ندازی این ماژول مورد نیاز است را به صورت جداگانه توضیح خواهیم داد.
در ابتدا باید 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 |
مجموعه کدهای زیر را باید در یک زیر برنامه قرار داد. و آن را برای دریافت زمان از آی سی فراخوانی کرد.
همانطور که متوجه شدید، اطلاعات دریافت شده داخل متغیری به نام Clock ریخته میشود. متغیر Clock یک متغیر معمولی نیست! بلکه از تعدادی زیرمتغیر به نام های Clock(1)
تا Clock(7)
تشکیل شده است. در هر کدام یکی از پارامترهای زمانی (ثانیه، دقیقه، ساعت، هفته، روز، ماه، سال) قرار میگیرد.
و در حلقه آخر مقادیر دریافتی از حالت BCD خارج خواهد شد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 |
مجموعه کدهای زیر را در یک زیر برنامه قرار میدهیم. و برای تنظیم زمان آی سی آن را فراخوانی میکنیم.
همانطور که میدانید میبایست قبل از ارسال زمان به آی سی، آنرا تبدیل به BCD کرد.
بنابراین ابتدا تمام متغیرهای Clock را به BCD تبدیل کرده و سپس به صورت تک تک به آی سی ارسال میکنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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)
: ثانیهیک موضوع مهم دیگر این است که این آی سی دارای 56 حافظه 8 بیتی رم میباشد. که میتوان از آن به عنوان حافظه جانبی نیز استفاده کرد.
یک حافظه این چنینی زمانی کاربرد دارد که میخواهیم یک ساعت زنگدار بسازیم. درا ینصورت نیاز به ذخیره سازی زمان آلارم خواهیم داشت. این زمان بهتر است با قطع برق میکرو از بین نرود. بنابراین حافظه رم آی سی DS1307 یکی از بهترین گزینه های پیش رو خواهد بود. زیرا این حافظه، با قطع برق از بین نرفته و از باتری برای نگهداری اطلاعات استفاده میکند.
اگر در استفاده از حافظه رم آی سی با سوالی مواجه شدید، آنرا از بخش نظرات با ما مطرح کنید.
در این مقاله با استفاده از ماژول DS1307 به عنوان ساعت جانبی، یک ساعت دیجیتال با میکرو AVR راه اندازی کردیم. به دلیل سربار کمتر اجرایی روی یک آی سی خارجی، دقت ساعت بالاتر خواهد رفت. همچنین به دلیل وجود باتری، با قطع برق، محاسبه زمان به کار خود ادامه میدهد. کدهای مرتبط با تنظیم ساعت و تاریخ و دریافت آنها از IC را بررسی کردیم. در پایان نیز به راهکاری برای ذخیره سازی اطلاعات در رم موجود در ماژول اشاره شد.
سون لرن • آموزش...برچسب : نویسنده : استخدام کار 7learn بازدید : 327