با سلام
بچه ها خواهش می کنم کمکم کنید دارم دیونه میشم :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]
دیدگاه