سلام.

ارتباط این ای سی با میکرو کنترلر توسط پروتکل I2C انجام میشه

زیاد کار با این ای سی سخت نیست و میشه در همی پروژه ها ازش استفاده کرد 

این رو هم بگم که این ای سی میتونه به عنوان EEPROM هم کار کنه ومیشه اطلاعاتی رو در اون نوشت و ازش خوند

 

91/8/23..به روز شد 

مطلب کامل شد.. در ص.رتی که هر جایی از برنامه رو متوجه نمیشدین بپرسین

 


خوب در بسکام برای ارتباط یا این ای سی ما بدین صورت عمل میکنیم که

ابتدا پایه های SCLوSDA رو مشخص میکنیم

CONFIG SCL=PORTY.X

CONFIG SDA=PORTY.X

شما بجای Y و X شماره پایه و پورت مورد نظر رو میزارین به طور مثال

config sda=portb.0

config scl=portb.1

خوب این برای ارتباط i2c و مشخص کردن پایه هایی که برای اینکار میخواهیم مورد استفاده قرار بدیم. و این رو فراموش نکنید که هر دو پایه رو با مقاومت 4.7 کیلو  به vcc متصل کنید . راحن نر بگم یعنی پایه    SCL که به میکرو متصل میشه رو هم با یک مقاومت 4.7کیلو بدین به +5 ولت و برای پایه SDA هم به همینو صورت عمل کنین.

در داخل دیتا شیت این ای سی یه جدول هست که بهمون میگه اگر بخواهیم از روی این ای سی ساعت یا تاریخ رو بخونیم باید چه کدی رو ارسال کنیم

به جدول زیر نگاه کنید :

 

میبینید که برای خواندن و نوشتن روی این ای سی چه کد هایی رو باید ارسال کنیم

خوب برای اینکه به ای سی بگیم ما الام میخواهیم ازت بخونیم یا بنویسیم باید دو تا کد ارسال کنیم که برای خواندن از ای سی کد   HD1   و برای نوشتن روی این ای سی کد HD0  را ارسال میکنیم 

در جدول در مورد مقدار حافظه هم گفته و ادرس اون رو داده..و در جدول خانه اخرش در مورد رنج تغییر هم هست که برای ثانیه از 00 تا 59 و روز از 1تا 7 و همین طور الی اخر..

خوب با گفتن این موارد  کمی با این ای سی اشنا شدیم

برای اینکه در هر جا از برنامه کد hd1  و hd0 رو اشتباه  وارد نکنیم میام و داخل یه متغییر ثابت ذخیره میکنیم(یعنی یه متغییر که مقدارش HD1 هست و تغییر نمیکنه)

خوب بدین صورت عمل میکنیم

 CONST DS1307W=HD0

CONST DS1307R=HD1

خوب ین دو تا مقداررو داخل متغییر های ثابتی ریختیم

یک نکته رو بگم که شما اگر بخوایین روی این ای سی عددی رو بنویسین باید به فرمت BCD  تبدیلش کنین و اگرم بخواین ازش بخونین باید به DEC(دسیمال) تبدیلش کنین.

برای تبدیل  به BCD  باید

 (VAR=MAKEBCD(VAR

رو استفاده کنین و برای نمایش مقداری که ازش خوندین باید به دسیمال تبدیلش کنین

VAR=MAKEDEC(VAR   

 زیاد سخت نیست فقط اینو یادتون باشه که اعدادی رو که میخواهیم روی این ای سی قرار بدهیم که حالا دقیقه است یا ساعت یا تاریخ باید به BCD تبدیل کنیم عددمون رو. و سپس با دستوراتی که بعدان خدممتون میگم روی این ای سی بنویسیم و اگرم بخواهیم ازش بخونیم که باید BCD  رو به دسیمال تبدیل کنیم..

 

خوب شروع کنیم به برنامه نویسی.. خوب در ابتدای برنامه مقادیر ذخیره شده در ای سی رو میخونیم که به فرض اگه برق رفته باشه . بعد از 4 ساعت اومده باشه ساعت دستگاه ما کار کنه و 4 ساعت تغییر رو لحاظ کنه .

خوب این طوری مینویسیم که: 

--------------------------------------------- 

 I2cwbyte ds1307w

I2cwbyte 0

I2cstart

I2cwbyte ds1307r

I2crbyte s,ack

I2crbyte m,ack

I2crbyte h,Nack

I2cstop

--------------------------------------------

خیلی سادست توی برنامه من نوشتم که میخوام روی ای سی بنویسیمو بعد عدد 0 رو نوشتم رو ای سی یعنی بیا بیت صفرمی و بعد به تر تیب شروع کردم به خوندن از ای سی ...ack و nack یعنی من هنوز میخوام ازت بخونم یا اینکه این اخریش بود..

بیشتر وقت ها یادتون باشه که شاید ای سی هنگ کرده باشه یا هر چیزه دیگه به همین خاطر ما ثانیه شمارش رو راه میندازیم تو اول برنامه  یعنی یه پرش به یه قسمت برنامه میکنیم که توی این قسمت مقداری به ثانیه شمار میده و بعد  یکی بهش اضافه میکنه..

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

 

دوستان من برنامه ای نوشتم با استفاده از سگمنت و ای سی ds1307 که میتونین در وبلاگ جستجو کنین و دانلود کنین این مدار  رو..

این هم لینک مطلب 

موفق باشین..