پاسخ : rtc ds1307 ساعت ارزان ولی بدون مشتری
[code=vb]$regfile = "m8def.dat"
$crystal = 1000000
'------------------------ lcd -----------------------------------------------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Pinb.0 , E = Pind.7 , Db4 = Pind.3 , Db5 = Pind.2 , Db6 = Pind.1 , Db7 = Pind.0
Cls
'--------------------------- ds 1307 -----------------------------------------
$lib "ds1307clock.lib"
'configure the scl and sda pins
Config Sda = Portc.5
Config Scl = Portc.4
'address of ds1307
Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
Const Ds1307r = &HD1
'------------------------------ key --------------------------------------------
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
'------------------------------------------------------------------------------
Config Debounce = 30
Dim A As Byte , B As Byte , Data1 As Byte , C As Byte
Dim Seco As Byte , Mine As Byte , Hour As Byte
'----------------------------------------------------------------------------
Cursor Off
'-----------------------------
Cls
Locate 1 , 6
Lcd "Hello"
Locate 2 , 1
Lcd "WWW.Yazdkit.com"
Wait 2
For A = 1 To 15
Shiftlcd Left
Waitms 300
Next
Cls
'-------------------------------------------------------------------------------
Main:
Do
Gosub Ds1307
Gosub 24_12
Gosub Chekkey
Loop
'-------------------------------------------------------------------------------
Ds1307:
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' start address in 1307
I2cstart ' Generate start code
I2cwbyte Ds1307r ' send address
I2crbyte Seco , Ack 'sec
I2crbyte Mine , Ack ' MINUTES
I2crbyte Hour , Nack ' Hours
I2cstop
Seco = Makedec(seco) : Mine = Makedec(mine) : Hour = Makedec(hour)
If Seco > 59 Then Seco = 0
If Mine > 59 Then Mine = 0
If Hour > 23 Then
Hour = 0
Gosub Seco
End If
Return
'-------------------------------------------------------------------------------
24_12:
If Pinc.4 = 1 Then Gosub Disply_24
If Pinc.4 = 0 Then Gosub Disply_12
Return
'-------------------------------------------------------------------------------
Disply_24:
Locate 1 , 1
Lcd "Time = " ; Hour ; ":" ; Mine ; ":" ; Seco ; " "
Locate 2 , 6
Lcd "(24)"
Return
'-------------------------------------------------------------------------------
Disply_12:
If Hour = 0 Then Hour = 12
If Hour > 12 Then Hour = Hour - 12
Locate 1 , 1
Lcd "Time = " ; Hour ; ":" ; Mine ; ":" ; Seco ; " "
Locate 2 , 6
Lcd "(12)"
Return
'-------------------------------------------------------------------------------
Chekkey:
Debounce Pinc.1 , 0 , Seco , Sub
Debounce Pinc.2 , 0 , Mine , Sub
Debounce Pinc.3 , 0 , Hour , Sub
Return
'---------------------------------------------
Seco:
Incr Seco
If Seco > 59 Then Seco = 0
Seco = Makebcd(seco)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' starting address in 1307
I2cwbyte Seco
I2cstop
Return
'-------------------------------------
Mine:
Incr Mine
If Mine > 59 Then Mine = 0
Mine = Makebcd(mine)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 1 ' starting address in 1307
I2cwbyte Mine
I2cstop
Return
'-------------------------------------
Hour:
Incr Hour
If Hour > 23 Then Hour = 0
Hour = Makebcd(hour)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 2 ' starting address in 1307
I2cwbyte Hour
I2cstop
Return
'-------------------------------------
End[/code]
اضافه شده در تاریخ :
ببینید داداشان من تو این تایپک دو نفر گفتن مدار کار نمیکنه اشتباه
:angry: چرا وقتی مطما نیستین میگین
پر سیدمم که کجای مدار اشتباه همه گفتن ساعت دقیقی نیست چرا الان دقیقه حتی یه ثانیه هم دیر و زود نداره فقط یه مشکل تو دیتا شیت نوشته ولتاژ باید 3 ولت باشه البته ولتاژ باطری خوب من به ناچار 3.7 گرفتم چون جریان مصرفی 500 na هست حتی دیود هم بایاس کامل نمیشه بین راهش 3 تا دیود سری گذاشتم تا ولتاز به از 3.7 کم تره بشه اما رو سه تا دیود 7 به زور افت میکنه :eek: حالا به فکرم رسیده که یه بلوک باطری رو بردارم چون با این حالت در مواقعی که می خواد ee prom دقیقه و ساعتو رایت کنه تو حالت بک اپ جریان که زیاد میشه از 3.7 باطری 2.1 رو دیودا افت میکنه بعدش ایسی هنگ میکنه و عدد 01/00/00 روش ثابت میمونه
oo: :angry:
ویرایش: جواب این هم بدم که خود کار خونه سازنده گفته با باطری 3 ولت پولی یا دگمه ای
تا 10 سال کار میکنه باید حتما از اونا استفاده کنین 3.4 ولت بیشتر هنگ میکنه باطری ها مخصوص در ضمن جریان مصرفیش 500 نانو امپره درست 10 سال کار میکنه
[code=vb]$regfile = "m8def.dat"
$crystal = 1000000
'------------------------ lcd -----------------------------------------------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Pinb.0 , E = Pind.7 , Db4 = Pind.3 , Db5 = Pind.2 , Db6 = Pind.1 , Db7 = Pind.0
Cls
'--------------------------- ds 1307 -----------------------------------------
$lib "ds1307clock.lib"
'configure the scl and sda pins
Config Sda = Portc.5
Config Scl = Portc.4
'address of ds1307
Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
Const Ds1307r = &HD1
'------------------------------ key --------------------------------------------
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
'------------------------------------------------------------------------------
Config Debounce = 30
Dim A As Byte , B As Byte , Data1 As Byte , C As Byte
Dim Seco As Byte , Mine As Byte , Hour As Byte
'----------------------------------------------------------------------------
Cursor Off
'-----------------------------
Cls
Locate 1 , 6
Lcd "Hello"
Locate 2 , 1
Lcd "WWW.Yazdkit.com"
Wait 2
For A = 1 To 15
Shiftlcd Left
Waitms 300
Next
Cls
'-------------------------------------------------------------------------------
Main:
Do
Gosub Ds1307
Gosub 24_12
Gosub Chekkey
Loop
'-------------------------------------------------------------------------------
Ds1307:
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' start address in 1307
I2cstart ' Generate start code
I2cwbyte Ds1307r ' send address
I2crbyte Seco , Ack 'sec
I2crbyte Mine , Ack ' MINUTES
I2crbyte Hour , Nack ' Hours
I2cstop
Seco = Makedec(seco) : Mine = Makedec(mine) : Hour = Makedec(hour)
If Seco > 59 Then Seco = 0
If Mine > 59 Then Mine = 0
If Hour > 23 Then
Hour = 0
Gosub Seco
End If
Return
'-------------------------------------------------------------------------------
24_12:
If Pinc.4 = 1 Then Gosub Disply_24
If Pinc.4 = 0 Then Gosub Disply_12
Return
'-------------------------------------------------------------------------------
Disply_24:
Locate 1 , 1
Lcd "Time = " ; Hour ; ":" ; Mine ; ":" ; Seco ; " "
Locate 2 , 6
Lcd "(24)"
Return
'-------------------------------------------------------------------------------
Disply_12:
If Hour = 0 Then Hour = 12
If Hour > 12 Then Hour = Hour - 12
Locate 1 , 1
Lcd "Time = " ; Hour ; ":" ; Mine ; ":" ; Seco ; " "
Locate 2 , 6
Lcd "(12)"
Return
'-------------------------------------------------------------------------------
Chekkey:
Debounce Pinc.1 , 0 , Seco , Sub
Debounce Pinc.2 , 0 , Mine , Sub
Debounce Pinc.3 , 0 , Hour , Sub
Return
'---------------------------------------------
Seco:
Incr Seco
If Seco > 59 Then Seco = 0
Seco = Makebcd(seco)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' starting address in 1307
I2cwbyte Seco
I2cstop
Return
'-------------------------------------
Mine:
Incr Mine
If Mine > 59 Then Mine = 0
Mine = Makebcd(mine)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 1 ' starting address in 1307
I2cwbyte Mine
I2cstop
Return
'-------------------------------------
Hour:
Incr Hour
If Hour > 23 Then Hour = 0
Hour = Makebcd(hour)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 2 ' starting address in 1307
I2cwbyte Hour
I2cstop
Return
'-------------------------------------
End[/code]
اضافه شده در تاریخ :
ببینید داداشان من تو این تایپک دو نفر گفتن مدار کار نمیکنه اشتباه
:angry: چرا وقتی مطما نیستین میگین پر سیدمم که کجای مدار اشتباه همه گفتن ساعت دقیقی نیست چرا الان دقیقه حتی یه ثانیه هم دیر و زود نداره فقط یه مشکل تو دیتا شیت نوشته ولتاژ باید 3 ولت باشه البته ولتاژ باطری خوب من به ناچار 3.7 گرفتم چون جریان مصرفی 500 na هست حتی دیود هم بایاس کامل نمیشه بین راهش 3 تا دیود سری گذاشتم تا ولتاز به از 3.7 کم تره بشه اما رو سه تا دیود 7 به زور افت میکنه :eek: حالا به فکرم رسیده که یه بلوک باطری رو بردارم چون با این حالت در مواقعی که می خواد ee prom دقیقه و ساعتو رایت کنه تو حالت بک اپ جریان که زیاد میشه از 3.7 باطری 2.1 رو دیودا افت میکنه بعدش ایسی هنگ میکنه و عدد 01/00/00 روش ثابت میمونه
oo: :angry: ویرایش: جواب این هم بدم که خود کار خونه سازنده گفته با باطری 3 ولت پولی یا دگمه ای
تا 10 سال کار میکنه باید حتما از اونا استفاده کنین 3.4 ولت بیشتر هنگ میکنه باطری ها مخصوص در ضمن جریان مصرفیش 500 نانو امپره درست 10 سال کار میکنه









دیدگاه