راه اندازی ساعت با 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 را بررسی کردیم. در پایان نیز به راهکاری برای ذخیره سازی اطلاعات در رم موجود در ماژول اشاره شد.
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
عالی بود و توضیحات روان
همینو برید جلو😂
خوشحالیم براتون مفید بوده مرتضی عزیز 🙂
سلام ممنون از سایت خوبتون …سوال ؟ چطور اطلاعات باید ذخیره بشه بر روی حافظه1307 ؟؟؟ میشه نمونه ای قرار بدید ؟؟؟چون در نوشتن و باز خوانی مشکل دارم
سلام
متأسفانه مدت زیادی هست بخش الکترونیک مجموعه فعالیتی نداره و در تیم هم فرد مسلطی به این موضوع نداریم.
اما در حد توانمون جستجو کردیم. ظاهراً شما میتونید یک بار ساعت فعلی رو روی DS1307 بریزید و بعدش بخونید. کار نوشتن با تابع
RTC_setTime()
انجام میشه.موفق باشی
من این ساعت رو دارمش،ولی همه ش جلو میوفته، کریستالش عوض کردم بازم نشد.
از ماژول آماده استفاده میکنید یا خودتون مدار رو بستید؟ اگر خودتون مدار رو بستید، از محکم بودن ارتباط پایهها مطمئن باشید.
نه آماده بوده، تست کردم دیدم وقتی با باتری سکه ایی خودش کار میکنه دقیق هست ولی وقتی منبع تغذیه بهش وصل میشه جلو میوفته، یکی بهم گفت مشکل از ای سی ds1307 هست رفتم بازار خریدم عوضش کردم دیگه اصلا کلا کار نمیکنه همینجور led مربوط به آی سی ثابت 1 میمونه
این مسئله دلایل مختلفی میتونه داشته باشه! چند مورد که به ذهنم میرسه رو میتونید بررسی کنید:
از کیفیت و سالم بودن کریستال مطمئن بشید. حتی موقع لحیم کردن نباید حرارت زیادی بهش برسه! برخی منابع نوشته بودند که مشکل در موقع اتصال به منبع تغذیه میتونه به خاطر نوسان یا قطعی و وصلی باشه! میشه از خازن در مسیر ارتباطی یا یک دیود و باتری به طوری که منبع بکاپ باشه برای آی سی ds1307 استفاده کنید.
سلام
من تو محیط پروتئوس با ال سی دی کد را اجرا کردم اما وقتی که داره ساعت و تاریخ را مینویسه یه دفعه اعداد اشتباه نمایش میده مثلا برای ساعت مینویسه85:85
یا برای تاریخ165/165/165
و دوباره مقادیر درست را مینویسه و هر چند کلاکی یک بار این ارور را میده
لطفا راهنماییم کنین
سلام
یکبار ساعت رو تنظیم کنید، احتمالاً مشکلتون حل میشه.
البته از صحیح بودن کتابخانههای پروتئوس و عملکرد صحیح اونها هم مطمئن بشید.
سلام
وصل میکنم مینویسد 165:165:165
دیگه تغیر نمیکند
سلام
یک بار ساعت را تنظیم کنید درست خواهد شد و دقت داشته باشید که حتما باید باتری سکه مربوط به آی سی ساعت را وصل کرده باشید.
ممنون از راهنماییتون
خوشحالیم که مورد استفادتون قرار گرفته
موفق باشید