سلام
رفقا میخوام با ds1307 و با بسکام ساعت و تاریخ رو نشون بدم
کسی تاحالا کار کرده؟
چجوری میتونم به ds1307 زمان بدم که ازون زمان شروع کنه؟
چجوری زمانشو بخونم؟
سلام
رفقا میخوام با ds1307 و با بسکام ساعت و تاریخ رو نشون بدم
کسی تاحالا کار کرده؟
چجوری میتونم به ds1307 زمان بدم که ازون زمان شروع کنه؟
چجوری زمانشو بخونم؟
خود بیسکام مثالش رو داره. تنها نکته مهم که بخاطرش مدتی افراد معطل میشن بیت با ارزش ثانیه هست که خود دیتا شیت هم تاکید کرده :
Please note that the initial power-on state of all registers is not defined. Therefore, it is important to
enable the oscillator (CH bit = 0) during initial configuration.
سلام
کد برنامه برای ساعت و تاریخ و ایام هفته با lcd کاراکتری
البته این فقط یک مدار ساعته ساده است (برای آزمایش)
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Pind.2 , Db5 = Pind.3 , Db6 = Pind.4 , Db7 = Pind.5 , Rs = Pind.0 , E = Pind.1
Config Portb = Input
$lib "mcsbyte.lbx"
$lib "ds1307clock.lib"
Enable Interrupts
Config Sda = Portc.1
Config Scl = Portc.0
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Clock = User
Dim Weekday As Byte
Dim A As Word
Dim B As String * 10
Cursor Off
Do
If Weekday = 1 Then
B = "sunday"
End If
If Weekday = 2 Then
B = "monday"
End If
If Weekday = 3 Then
B = "tuesday"
End If
If Weekday = 4 Then
B = "wednesday"
End If
If Weekday = 5 Then
B = "thursday"
End If
If Weekday = 6 Then
B = "friday"
End If
If Weekday = 7 Then
B = "saturday"
End If
Locate 1 , 1
Gosub Getdatetime
Lcd "" ; _hour ; ":" ; _min ; ":" ; _sec
Locate 2 , 1
Lcd "" ; _year ; "/" ; _month ; "/" ; _day
Locate 2 , 9
Lcd B
If _sec = 59 Then
Cls
End If
Loop
End
'************************************************* ******************************
برای خواندن ساعت از این زیر برنامه استفاده میشه:Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Weekday = Makebcd(weekday)
Return
اگه میخوایی تاریخ رو به اون بدی به این زیر برنامه برو و متغیر های _day_month_year_ رو مقدار دهی کن ( با سریال و کامپیوتر - کیبورد و ...)Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 4
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cwbyte Weekday
I2cstop
Return
گه میخوایی ساعت رو به اون بدی به این زیر برنامه برو و متغیر های _sec_min_hour را مقدار دهی کنSettime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) : Weekday = Makebcd(weekday)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cwbyte Weekday
I2cstop
Return
سلام
اين برنامه رو من براي يه ماشين جوجه كشي نوشته بودم كه توش تاريخ شمسي هم داره بگردي ساب روتينشو (sub shamsi) پيدا ميكني .فايل پروتئوسش هم هست.
اگه مشكل داشتي درخدمتم.
به این تایپیکم یه نگاهی بنداز توش تقویم شمسی اومده.
من که هنوز امتحانش نکردم اگر کار کردی یه آمار بده.
http://www.eca.ir/forum2/index.php?topic=38492.30
درود
دوستان برام سوال شده وقتی یه بار این ای سی رو تنظیم میکنم و مثلا اگه برق دستگاه را قطع کردم ساعت اخرین لحظه قبل از قطع رو نشون میده مگه نباید وقتی باتری بک اپ داره خودش کار بکنه بعد از قطع برق اصلی و بعد از اون بیاد زمان رو بده به میکرو؟؟؟؟؟
و باید چیکار کرد توی برنامه نویسی تغییراتی میخواد یا سخت افزار (به جز باتری بک اپ)
شماتیک دقیقا مانند دیتا شیت بسته شده
یعنی دو مقاومت 4.7 کیلو برای پول اپ خط i2c (پایه های 6و 5)
تغذیه به پایه 8
زمین به پایه 4
کریستال به پایه 1و2
و باتری بک اپ لیتیومی به پایه 3 ( طرف مثبتش و منفی به زمین مدار)
پایه 7 را همین جوری رها کردم !!!
يه چيز جالب !
من براي بار اول ميام تو برنامم زمان رو تنظيم ميكنم و برنامه جديد رو ميريزم تو ميكرو و به خوبي همه چيز كار ميكنه
بار دوم ميام اون خط تنظيم زمان رو از برنامه حذف ميكنم و برنامه رو ميريزم تو ميكرو كه اگه ميكرو ريست شد دوباره زمان تنظيم نشه
تا اينجا قبول ؟!
بعد اينكه برنامه دوم رو ريختم يكم صبر ميكنم تا زمان اضافه شه بعدش تغذيه مدار رو قطع و وصل ميكنم (باطري بكاپ به آي سي 1307 وصله)
كاملا انتظار دارم كه زمان طبق حالت عادي بره جلو ، اما تراشه واس هر 3 مقدار ثانيه ، دقيقه و ساعت عدد 80 رو برميگردونه !!!!!!!!!!
كسي ميدونه ممكنه اشكال از چي باشه ؟!
بعد از چند وقت برگشتم
كامپايلر كدويژن 2.05 هست
قبل از اينكه تغذيه برد رو قطع كنم همه چيز خوب كار ميكنه ، اما بعد اينكه تغذيه قطع و سپس وصل ميشه ديگه كار نميكنه !
بعد از چند وقت برگشتم
فکر کنم قبلا هم گفتم، این آی سی پیش فرض بیت مربوط به شروع به کارش که آخرین بیت ثانیه هست روو وضعیت غیر فعال هست. هر بار باطری این آی سی جدا شد باید مقداری توو ثانیه نوشته بشه تا شروع به کار کنه.