خسته نباشید :
من یک ساعت با mega8 & ds1307 ساخته ام بد کار نمیکند ولی یک اشکال عمده دارد و آن اینه که حتی با بودن باتری بک پ وقتیکه برق میکرو نه باتری بک پ قطع میکنم و دوباره وصل میکنم ساعت متوقف شده ، ثانیه شماره روی صفر میماند و وقتیکه دکمه مربوط به تنظیم ثانیه شمار را میزنم دوباره شمارش ثانیه شروع میشود و اگر این دکمه را نزنم ثانیه شمار روی عدد صفر میماند .. البته بعضی مواقع هم اینطور نمیشود .
اصلا فلسفه وجود باتری بک برای این است که شمارش متوقف نشود .
لطفا راهنمایی فرمایید .
برنامه ساعت :
$regfile = "m8def.dat"
$crystal = 8000000
$lib "ds1307clock.lib"
Config Debounce = 50
Config Sda = Portb.1
Config Scl = Portb.2
Const Ds1307w = &HD0
Const Ds1307r = &HD1
$lib "glcdKS108.lib"
Config Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portc , Ce = 3 , Ce2 = 4 , Cd = 0 , Rd = 1 , Enable = 2 , Reset = 6
Setfont Font8x8
Cls
Config Pinb.3 = Input
Config Pinb.4 = Input
Config Pinb.5 = Input
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\
Dim I As Byte , Dama As Byte , A As Byte , Address As Byte
Dim Seco As Byte
Dim Mine As Byte
Dim Hour As Byte
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\
Declare Sub Gas
'Declare Sub Ds1307
Declare Sub Nemaeysh
'Declare Sub Daghigheh
'Declare Sub Saat
'Declare Sub Sanieh
Main:
Do
Gosub Ds1307
Call Nemaeysh
Call Gas
Debounce Pinb.3 , 1 , Sanieh , Sub
Debounce Pinb.4 , 1 , Daghigheh , Sub
Debounce Pinb.5 , 1 , Saat , Sub
Loop
'**********************************
Sub Nemaeysh:
Showpic 1 , 19 , Saat0
Lcdat 3 , 41 , Hour ; ":"
Lcdat 3 , 63 , Mine ; ":"
Lcdat 3 , 88 , Seco
If Hour >= 0 And Hour < 12 Then
Lcdat 3 , 110 , "am"
End If
If Hour >= 12 And Hour < 24 Then
Lcdat 3 , 110 , "pm"
End If
Showpic 1 , 1 , Bmp_img
Lcdat 1 , 25 , Dama
Showpic 43 , 1 , Degree_bmp
Showpic 53 , 0 , Bmp_img0
Waitms 100
Cls
End Sub
Return
'============================================ =====
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 Sanieh
End If
Return
'---------------------------------------------
Sanieh:
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
'-------------------------------------
Daghigheh:
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
'------------------------------------------
Saat:
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
من یک ساعت با mega8 & ds1307 ساخته ام بد کار نمیکند ولی یک اشکال عمده دارد و آن اینه که حتی با بودن باتری بک پ وقتیکه برق میکرو نه باتری بک پ قطع میکنم و دوباره وصل میکنم ساعت متوقف شده ، ثانیه شماره روی صفر میماند و وقتیکه دکمه مربوط به تنظیم ثانیه شمار را میزنم دوباره شمارش ثانیه شروع میشود و اگر این دکمه را نزنم ثانیه شمار روی عدد صفر میماند .. البته بعضی مواقع هم اینطور نمیشود .
اصلا فلسفه وجود باتری بک برای این است که شمارش متوقف نشود .
لطفا راهنمایی فرمایید .
برنامه ساعت :
$regfile = "m8def.dat"
$crystal = 8000000
$lib "ds1307clock.lib"
Config Debounce = 50
Config Sda = Portb.1
Config Scl = Portb.2
Const Ds1307w = &HD0
Const Ds1307r = &HD1
$lib "glcdKS108.lib"
Config Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portc , Ce = 3 , Ce2 = 4 , Cd = 0 , Rd = 1 , Enable = 2 , Reset = 6
Setfont Font8x8
Cls
Config Pinb.3 = Input
Config Pinb.4 = Input
Config Pinb.5 = Input
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\
Dim I As Byte , Dama As Byte , A As Byte , Address As Byte
Dim Seco As Byte
Dim Mine As Byte
Dim Hour As Byte
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\
Declare Sub Gas
'Declare Sub Ds1307
Declare Sub Nemaeysh
'Declare Sub Daghigheh
'Declare Sub Saat
'Declare Sub Sanieh
Main:
Do
Gosub Ds1307
Call Nemaeysh
Call Gas
Debounce Pinb.3 , 1 , Sanieh , Sub
Debounce Pinb.4 , 1 , Daghigheh , Sub
Debounce Pinb.5 , 1 , Saat , Sub
Loop
'**********************************
Sub Nemaeysh:
Showpic 1 , 19 , Saat0
Lcdat 3 , 41 , Hour ; ":"
Lcdat 3 , 63 , Mine ; ":"
Lcdat 3 , 88 , Seco
If Hour >= 0 And Hour < 12 Then
Lcdat 3 , 110 , "am"
End If
If Hour >= 12 And Hour < 24 Then
Lcdat 3 , 110 , "pm"
End If
Showpic 1 , 1 , Bmp_img
Lcdat 1 , 25 , Dama
Showpic 43 , 1 , Degree_bmp
Showpic 53 , 0 , Bmp_img0
Waitms 100
Cls
End Sub
Return
'============================================ =====
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 Sanieh
End If
Return
'---------------------------------------------
Sanieh:
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
'-------------------------------------
Daghigheh:
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
'------------------------------------------
Saat:
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
دیدگاه