با سلام
بچه ها خواهش می کنم کمکم کنید دارم دیونه میشم :angry:
من یک ساعت با تقویم ساختم که مقادیر رو از 1307 میگیره و ساعت رو مستقیم نشون میده و تارخ رو به شمسی تبدیل میکنه و نشون میده
من قبلا هم خیلی از این مدارات ساختم ولی این بار یه مشکل پیش اومده !!!!!!! :angry:
آقا تو این مدار ساعت هی گیر میکنه !! یعنی یه چند ساعت دقیقا درست کارمیکنه بعدش گیرمیکنه و دیگه ساعت اصلا به جلو نمیره و بعد از روشن خاموش کردنش دوباره یه چند ساعت درست کار میکنه و بعدش گیرمیکنه و تا وقتی انگولک نشه دیگه کار نمیکنه
البته مدار به درستی کار میکنه ها فقط زمان هست که جلو نمیره و در نتیجه تارخ هم به جلو نمیره !!!
موارد زیر رو انجام دادم :
برنامش رو در بسکام نوشتم و مطمئن هستم که تو یک جای این برنامه یه مشکل خیلی کوچولو هست که میکرو بعد از چند ساعت گیر میکنه !! توروخدا کمک :angry:
بچه ها خواهش می کنم کمکم کنید دارم دیونه میشم :angry:
من یک ساعت با تقویم ساختم که مقادیر رو از 1307 میگیره و ساعت رو مستقیم نشون میده و تارخ رو به شمسی تبدیل میکنه و نشون میده
من قبلا هم خیلی از این مدارات ساختم ولی این بار یه مشکل پیش اومده !!!!!!! :angry:
آقا تو این مدار ساعت هی گیر میکنه !! یعنی یه چند ساعت دقیقا درست کارمیکنه بعدش گیرمیکنه و دیگه ساعت اصلا به جلو نمیره و بعد از روشن خاموش کردنش دوباره یه چند ساعت درست کار میکنه و بعدش گیرمیکنه و تا وقتی انگولک نشه دیگه کار نمیکنه
البته مدار به درستی کار میکنه ها فقط زمان هست که جلو نمیره و در نتیجه تارخ هم به جلو نمیره !!!
موارد زیر رو انجام دادم :
- [li]کریستال رو جندین بار عوض کنم
آیسی 1307 رو هم عوض کردم [/li]
[li][/li]
برنامش رو در بسکام نوشتم و مطمئن هستم که تو یک جای این برنامه یه مشکل خیلی کوچولو هست که میکرو بعد از چند ساعت گیر میکنه !! توروخدا کمک :angry:
کد:
[left]$regfile = "m8def.dat"
$crystal = 8000000
'------------------------ lcd -----------------------------------------------
'--------------------------- ds 1307 ----------------------------------------
$lib "ds1307clock.lib"
'configure the scl and sda pins
Config Sda = Portc.0
Config Scl = Portc.1
'address of ds1307
Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
Const Ds1307r = &HD1
'------------------------------ key ------------------------------------------
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Pinc.5 = Input
Config Portb = Output 'seven segment
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.7 = Output
Config Pind.6 = Input
'-------------------------------------------------------------------------
Dim Weekday As Byte
Dim M_day As Word
Dim Sh_day As Word
Dim M_year As Word
Dim Sh_year As Word
Dim M_month As Word
Dim Sh_month As Word
Dim Kole_roz_m As Word
Dim Kole_roz_sh As Word
Dim _year As Word
Dim Conter1 As Word
Dim Conter2 As Word
Dim Conter3 As Word
Dim Conter4 As Word
Dim Day_of_month(12) As Byte
Day_of_month(1) = 31
Day_of_month(2) = 28
Day_of_month(3) = 31
Day_of_month(4) = 30
Day_of_month(5) = 31
Day_of_month(6) = 30
Day_of_month(7) = 31
Day_of_month(8) = 31
Day_of_month(9) = 30
Day_of_month(10) = 31
Day_of_month(11) = 30
Day_of_month(12) = 31
Dim Temp1 As Integer
Dim Temp2 As Integer
Dim Temp3 As Word
Dim Temp4 As Word
Dim Temp5 As Byte
'-----------------------------------------------------------------------------
Config Debounce = 30
Const Wt = 2
Dim A As Byte , B As Byte , Data1 As Byte , C As Byte
Dim Seco As Byte , Mine As Byte , Hour As Byte
Dim H2 As Byte , H1 As Byte , M1 As Byte , M2 As Byte
'----------------------------------------------------------------------------
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 , Ack
I2crbyte Weekday , Ack ' Day of Week
I2crbyte M_day , Ack ' Day of Month
I2crbyte M_month , Ack ' Month of Year
I2crbyte _year , Nack ' Hours
I2cstop
Gosub Seco
'-----------------------------------------------------------------------------
Main:
Do
Gosub Ds1307
Gosub Chekkey
Gosub M_to_sh
If Hour >= 8 And Hour < 20 Then
Portd.7 = 0
Elseif Hour >= 20 Or Hour < 8 Then
Portd.7 = 1
End If
'-------------------
If Pind.6 = 1 Then
H2 = Hour Mod 10
H1 = Hour - H2
H1 = H1 / 10
M2 = Mine Mod 10
M1 = Mine - M2
M1 = M1 / 10
Else
H2 = Sh_month Mod 10
H1 = Sh_month - H2
H1 = H1 / 10
M2 = Sh_day Mod 10
M1 = Sh_day - M2
M1 = M1 / 10
End If
Portd.0 = 0
Portd.1 = 1
Portd.2 = 1
Portd.3 = 1
Portd.4 = 0
Portb = Lookup(h1 , Sina)
Waitms Wt
Portd.0 = 1
Portd.1 = 0
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portb = Lookup(h2 , Sina)
Waitms Wt
Portd.0 = 1
Portd.1 = 1
Portd.2 = 0
Portd.3 = 1
Portd.4 = 0
Portb = Lookup(m1 , Sina)
Waitms Wt
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
Portd.3 = 0
Portd.4 = 0
Portb = Lookup(m2 , Sina)
Waitms Wt
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 , Ack
I2crbyte Weekday , Ack ' Day of Week
I2crbyte M_day , Ack ' Day of Month
I2crbyte M_month , Ack ' Month of Year
I2crbyte _year , Nack ' Hours
I2cstop
Seco = Makedec(seco) : Mine = Makedec(mine) : Hour = Makedec(hour)
M_day = Makedec(m_day) : M_month = Makedec(m_month) : _year = Makedec(_year)
M_year = 2000 + _year
If Seco > 59 Then Seco = 0
If Mine > 59 Then Mine = 0
If Hour > 23 Then
Hour = 0
'------------------
'------------------
Gosub Seco
End If
If M_month > 12 Then M_month = 1
Return
'-----------------------------------------------------------------------------
'-----------------------------------------------------------------------------
Chekkey:
Debounce Pinc.5 , 0 , Mine , Sub
Debounce Pinc.4 , 0 , Hour , Sub
Debounce Pinc.3 , 0 , M_day , Sub
Debounce Pinc.2 , 0 , M_month , 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
'----------------------
M_day:
Incr M_day
M_day = Makebcd(m_day)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 4 ' starting address in 1307
I2cwbyte M_day ' Send Data to SECONDS
I2cwbyte M_month ' MINUTES
I2cwbyte _year ' Hours
I2cstop
Return
'-----------------------
M_month:
Incr M_month
M_month = Makebcd(m_month)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 4 ' starting address in 1307
I2cwbyte M_day ' Send Data to SECONDS
I2cwbyte M_month ' MINUTES
I2cwbyte _year ' Hours
I2cstop
Return
'----------------------------------------------------------
'########################################################################
M_to_sh:
Conter2 = M_month - 1
Kole_roz_m = 0
For Conter1 = 1 To Conter2
Kole_roz_m = Kole_roz_m + Day_of_month(conter1)
Next
Kole_roz_m = Kole_roz_m + M_day
'**********************************
If Kole_roz_m > 79 Then
Sh_year = M_year - 621
Kole_roz_sh = Kole_roz_m - 79
Else
Sh_year = M_year - 622
Temp4 = M_year - 1
'Temp5 = M_kabise(temp4)
If Temp5 = 0 Then
Kole_roz_sh = Kole_roz_m + 286
Else
Kole_roz_sh = Kole_roz_m + 287
End If
End If
'**********************************
Sh_month = 1
'****************
While Kole_roz_sh > 30
If Sh_month < 7 Then
Kole_roz_sh = Kole_roz_sh - 31
Else
Kole_roz_sh = Kole_roz_sh - 30
End If
Incr Sh_month
Wend
'***************
'---------------
If Kole_roz_sh = 0 Then
Decr Sh_month
If Sh_month < 7 Then
Sh_day = 31
Else
Sh_day = 30
End If
Else
Sh_day = Kole_roz_sh
End If
'---------------
Return
'########################################################################
Sina:
Data 63 , 6 , 91 , 79 , 102 , 109 , 125 , 7 , 127 , 111[/left]







دیدگاه