اطلاعیه

Collapse
No announcement yet.

مشکل در ساخت ساعت با آیسی DS1307

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در ساخت ساعت با آیسی DS1307

    با سلام

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

    #2
    پاسخ : مشکل در ساخت ساعت با آیسی DS1307

    سلام.
    این مشکل به دلیل به وجود میاد که داری با سرعت خیلی بالایی از IC میخونی.
    شما با یه تایمر 1 دقیقه رو ایجاد کن و هر 1 دقیقه یک بار از IC بخون.
    اگر نیاز به نمایش ثانیه هم دارید اونو با خود میکرو ایجاد کنید.
    خلاصه منظورم اینکه اینقدر زیاد از IC نخون.
    تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

    دیدگاه


      #3
      پاسخ : مشکل در ساخت ساعت با آیسی DS1307

      این برنامه منه.مثل چیز داره کار میکنه.
      کد:
      [left]
      $regfile = "m8def.dat"
      $crystal = 8000000
      
      
      Declare Function M_kabise(byref Sal As Word)as Byte
      Declare Function Sh_kabise(byref Sal As Word)as Byte
      '-----------------------------------------------------
      Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , _
      Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.0 , Rs = Portb.1
      Cursor Off
      '-----------------------------------------------------
      
      Config Sda = Portd.7
      Config Scl = Portd.6
      '****************************
      Const Ds1307w = &HD0
      Const Ds1307r = &HD1
      
      
      Dim _sec As Byte
      Dim _min As Byte
      Dim _hour As Byte
      Dim _year As Word
      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 Kabise As Byte
      Dim Kole_roz_m As Word
      Dim Kole_roz_sh 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
      
      '----------------------- keys
      Key_menu Alias Pind.0
      Config Key_menu = Input
      Portd.0 = 1
      
      Key_incr Alias Pind.1
      Config Key_incr = Input
      Portd.1 = 1
      
      Key_decr Alias Pind.2
      Config Key_decr = Input
      Portd.2 = 1
      '-----------------------------------
      Dim Menu As Byte
      Dim Timer_1 As Word
      Dim S1 As String * 15
      Dim S As String * 10
      S1 = " MajidMalvandi"
      Dim Blink_flag As Bit
      Dim Selection As Byte
      '------------------------------------
      
      
      Cls
      Locate 1 , 1 : Lcd S1
      Wait 1
      Cls
      Do
      Gosub Read_date_time
      Gosub M_to_sh
      
      Locate 1 , 1
      Lcd "TIME: " ; _hour ; ":" ; _min ; ":" ; _sec
      Locate 2 , 1
      Lcd "DATE: " ; Sh_year ; "/" ; Sh_month ; "/" ; Sh_day
      
      
      '---------------------------- WAIT AND READ KEY
      
      For Conter1 = 1 To 40000
      
        If Key_menu = 0 Then
      
         Waitms 100
      
         If Key_menu = 0 Then
           Cls
           Locate 1 , 1
           Lcd "   MENU "
           Wait 1
           Gosub Menu
         End If
      
        Waitus 10
      
      End If
      
      Next
      
      '------------------------------
      Loop
      
      
      Menu:
      
      Selection = 1
      Cls
      Do
      
      Incr Timer_1
      If Timer_1 > 5 Then
       Timer_1 = 0
       Toggle Blink_flag
      End If
      
      S1 = "TIME: "
      '-----------------------------
      If Selection = 1 And Blink_flag = 0 Then
      
       S1 = S1 + " "
      Else
      
       S = Str(_hour)
       S = Format(s , "00")
       S1 = S1 + S
      
      End If
      S1 = S1 + ":"
      '------------------------------
      If Selection = 2 And Blink_flag = 0 Then
      
       S1 = S1 + " "
      Else
      
       S = Str(_min)
       S = Format(s , "00")
       S1 = S1 + S
      
      End If
      S1 = S1 + ":"
      '------------------------------
      If Selection = 3 And Blink_flag = 0 Then
      
       S1 = S1 + " "
      Else
      
       S = Str(_sec)
       S = Format(s , "00")
       S1 = S1 + S
      
      End If
      
      
      Locate 1 , 1
      Lcd S1
      
      
      S1 = "DATE: "
      '--------------------------------
      If Selection = 4 And Blink_flag = 0 Then
      
       S1 = S1 + "  "
      Else
      
       S = Str(sh_year)
       S = Format(s , "0000")
       S1 = S1 + S
      
      End If
      S1 = S1 + "/"
      '---------------------------------
      If Selection = 5 And Blink_flag = 0 Then
      
       S1 = S1 + " "
      Else
      
       S = Str(sh_month)
       S = Format(s , "00")
       S1 = S1 + S
      
      End If
      S1 = S1 + "/"
      '----------------------------------
      If Selection = 6 And Blink_flag = 0 Then
      
       S1 = S1 + " "
      Else
      
       S = Str(sh_day)
       S = Format(s , "00")
       S1 = S1 + S
      
      End If
      
      Locate 2 , 1
      Lcd S1
      
      
      
      
      If Key_menu = 0 Then
        Waitms 100
        If Key_menu = 0 Then Incr Selection
      End If
      
      
      '-----------------------------------
      If Key_incr = 0 Then
        Waitms 100
        If Key_incr = 0 Then
      
         If Selection = 1 Then Incr _hour
         If Selection = 2 Then Incr _min
         If Selection = 3 Then Incr _sec
         If Selection = 4 Then Incr Sh_year
         If Selection = 5 Then Incr Sh_month
         If Selection = 6 Then Incr Sh_day
      
        End If
      
      End If
      '------------------------------------
      If Key_decr = 0 Then
        Waitms 100
        If Key_decr = 0 Then
      
         If Selection = 1 Then Decr _hour
         If Selection = 2 Then Decr _min
         If Selection = 3 Then Decr _sec
         If Selection = 4 Then Decr Sh_year
         If Selection = 5 Then Decr Sh_month
         If Selection = 6 Then Decr Sh_day
      
        End If
      
      End If
      
      '--------------------------------------
      If _hour > 100 Then _hour = 24
      If _min > 100 Then _min = 59
      If _sec > 100 Then _sec = 59
      
      If _hour > 24 Then _hour = 0
      If _min > 59 Then _min = 0
      If _sec > 59 Then _sec = 0
      If Sh_year > 1470 Then Sh_year = 1390
      If Sh_month > 12 Then Sh_month = 1
      If Sh_day > 31 Then Sh_day = 1
      
      
      If Sh_year < 1390 Then Sh_year = 1470
      If Sh_month < 1 Then Sh_month = 12
      If Sh_day < 1 Then Sh_day = 31
      '---------------------------------------
      
      
      Waitms 40
      
      If Selection > 6 Then Exit Do
      
      Loop
      
      Cls
      Locate 1 , 1
      Lcd " SAVEING"
      Wait 1
      Gosub Sh_to_m
      Gosub Setdate
      Gosub Settime
      
      Return
      
      
      Read_date_time:
       I2cstart                         ' Generate start code
       I2cwbyte Ds1307w                     ' send address
       I2cwbyte 0                        ' start address in 1307
       I2cstart                         ' Generate start code
       I2cwbyte Ds1307r                     ' send address
       I2crbyte _sec , Ack
       I2crbyte _min , Ack                    ' MINUTES
       I2crbyte _hour , Ack                   ' Hours
       I2crbyte Weekday , Ack                  ' Day of Week
       I2crbyte M_day , Ack                   ' Day of Month
       I2crbyte M_month , Ack                  ' Month of Year
       I2crbyte _year , Nack                   ' Year
       I2cstop
       _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
       M_day = Makedec(m_day) : M_month = Makedec(m_month) : _year = Makedec(_year)
       M_year = 2000 + _year
      
      Return
      
      
      Setdate:
      
       _year = M_year - 2000
       M_day = Makebcd(m_day) : M_month = Makebcd(m_month) : _year = Makebcd(_year)
       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
      
      
      Settime:
       _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
       I2cstart                         ' Generate start code
       I2cwbyte Ds1307w                     ' send address
       I2cwbyte 0                        ' starting address in 1307
       I2cwbyte _sec                       ' Send Data to SECONDS
       I2cwbyte _min                       ' MINUTES
       I2cwbyte _hour                      ' Hours
       I2cstop
      Return
      
      
      
      M_to_sh:
      
      '----------------
      If M_kabise(m_year) = 0 Then
        Day_of_month(2) = 28
      Else
        Day_of_month(2) = 29
      End If
      '----------------
      
      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
      
      
      Sh_to_m:
      
      '------------------
      Kole_roz_sh = 0
      '------------------
      
      If Sh_month > 6 Then
      
       Kole_roz_sh = 186
       Temp4 = Sh_month - 7
       Temp4 = Temp4 * 30
       Kole_roz_sh = Kole_roz_sh + Temp4
      
      Else
      
       Temp4 = Sh_month - 1
       Temp4 = Temp4 * 31
       Kole_roz_sh = Kole_roz_sh + Temp4
      
      End If
      Kole_roz_sh = Kole_roz_sh + Sh_day
      
      '****************************
      If Kole_roz_sh > 286 Then
      
        M_year = Sh_year + 622
        Kole_roz_m = Kole_roz_sh - 286
      
      Else
      
        M_year = Sh_year + 621
        Kole_roz_m = Kole_roz_sh + 79
      
      End If
      '**************************
      Temp5 = M_kabise(m_year)
      
      If Temp5 = 0 Then
        Day_of_month(2) = 28
      Else
        Day_of_month(2) = 29
      End If
      
      '----------------
      
      For M_month = 1 To 12
      
        If Kole_roz_m < 31 Then Exit For
        Kole_roz_m = Kole_roz_m - Day_of_month(m_month)
      
      Next
      
      
      If Kole_roz_m > Day_of_month(m_month) Then
      
        Kole_roz_m = Kole_roz_m - Day_of_month(conter1)
        Incr M_month
      
      End If
      
      M_day = Kole_roz_m
      
      Return
      
      
      End
      
      
      
      
      Function M_kabise(byref Sal As Word)as Byte
      
        Local T1 As Integer
        Local T2 As Integer
        Local T3 As Integer
        Local B As Byte
        '=========================
        T1 = Sal Mod 4
        T2 = Sal Mod 100
        T3 = Sal Mod 400
        B = 0
        '=========================
        '------
        If T1 = 0 And T2 <> 0 Then
         B = 1
        End If
        '------
        If T2 = 0 And T3 = 0 Then
         B = 1
        End If
        '------
        M_kabise = B
      
      End Function
      
      
      Function Sh_kabise(byref Sal As Word)as Byte
      
        Local T1 As Integer
        Local B As Byte
        '==================
        T1 = Sal Mod 33
        B = 0
        '==================
        '------
        If T1 = 1 Or T1 = 5 Or T1 = 9 Or T1 = 13 Or T1 = 17 Or T1 = 22 Or _
        T1 = 26 Or T1 = 30 Then
      
         B = 1
      
        End If
        '------
        Sh_kabise = B
      
      End Function[/left]
      ابتدا و شروع هرکاری سخت ترین مرحله آن کار است. برای مثال به عقابها نگاه کن ، حتی اونها هم در ابتدای پرواز ، زیاد بال و پر می زنند، اما هنگامی که اوج می گیرند ، دیگر حتی نیازی به پر زدن هم ندارند ...

      کافیست اولین قدمها را بدون ترس و با پشتکارِ بالا برداری مطمئن باش بزودی به اوج خواهی رسید و روزهای سخت همیشه نخواهند ماند ...

      دیدگاه


        #4
        پاسخ : مشکل در ساخت ساعت با آیسی DS1307

        بله این برنامه رو منم دارم ولی با این قسمتش مشکل دارم :

        Key_menu Alias Pind.0
        Config Key_menu = Input
        Portd.0 = 1

        Key_incr Alias Pind.1
        Config Key_incr = Input
        Portd.1 = 1

        Key_decr Alias Pind.2
        Config Key_decr = Input
        Portd.2 = 1
        در واقع من میخوام چهار تا دیکمه مجزا برای تغییر ماه و روز و ساعت و دقیقه داشته باشم
        علتشم این هست که من از سون سگمنت استفاده کردم نه LCD

        دیدگاه


          #5
          پاسخ : مشکل در ساخت ساعت با آیسی DS1307

          سلام.
          این مشکل به دلیل به وجود میاد که داری با سرعت خیلی بالایی از IC میخونی.
          شما با یه تایمر 1 دقیقه رو ایجاد کن و هر 1 دقیقه یک بار از IC بخون.
          اگر نیاز به نمایش ثانیه هم دارید اونو با خود میکرو ایجاد کنید.
          خلاصه منظورم اینکه اینقدر زیاد از IC نخون.

          پس یعنی شما میفرمایید که یک کریستال رو باره به خود مگا8 وصل کنم و از یکی از وقفه ها استفاده کنم (مثلا تایمر2)
          بعد هر 1 دقیقه یک بار تابع Gosub Ds1307 رو فراخوانی کنم ؟؟

          اگر منظورتون همینی هست که من میگم
          اون وقت میتونم به جای استفاده از کریستال دیگه و تایمر2 از کانتر استفاده کنم؟(چون مدارش رو ساختم تموم شده!)
          منظورم از کانتر این هست که مثلا یک متغیر از نوع صحیح تعریف کنم و در هر بار چرخش برنامه (منظور مابین Do و Loop) یک واحد به مقدارش افزایش داده بشه
          و مثلا وقتی مقدار به 5000 رسید اون وقت تابع Gosub Ds1307 فراخوانی بشه ؟؟؟

          اینجوری خوب مدت زمان فراخوانی تابع Gosub Ds1307 دقیق نیست و شاید یکبار 20 ثانیه طول بکشه و بار بعد 22 ثانیه ! اما اون تاخیری که شما میگی بوجود میاد دیگه !!
          در ضمن ثانیه برام مهم نیست

          خوب حالا به نظر شما روش دوم امکان پذیر هست ؟؟
          یا اصلا من منظور شما رو درست متوجه شدم ؟


          خیلی ممنون از پاسختون. :job:

          دیدگاه


            #6
            پاسخ : مشکل در ساخت ساعت با آیسی DS1307

            بله درست متوجه شدید ولی نیازی به کریستال نیست همون داخلی جواب میده.
            در ضمن اون 1 دقیقه رو هم زیادی گفتم شما هر یک ثانیه یک بار بخون. :biggrin:
            برای این کار هم:
            1-باتوجه به فرکانس کاری میکرو توسط تایمر،1 ثانیه را ایجاد کنید.
            2-پایه 7 آی سی DS1307 رو روی 1 هرتز تنظیم کنید و این پایه رو به یکی از پین های میکرو بدهید.و با یک شدن اون پایه از آی سی بخونین.
            3-روش خودتون :biggrin:
            تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

            دیدگاه


              #7
              پاسخ : مشکل در ساخت ساعت با آیسی DS1307

              1- ببخشید این قسمتی که گفتید من بلد نشدم ، فرکانس 1000000 هست
              خوب تایمر یک دستور رو برای یک ثانیه تایپ کنید دیگه ....
              خواهش میکنم

              2-پایه 7 1307 میگه بیکار نمیمونه !!!!!!!!!!!! این قیمت 2 رو یکم توضیح میدی عزیز ؟
              آخه من چطور پایه 7 رو روی 1 هرتز تنظیم کنم !!؟؟

              3- منظورتون این هست که باید یکی از این 3 روش رو انجام بدم ؟؟؟؟؟؟؟

              بازم شما میشه تایمر 1 رو بگید به من :ط :ط

              این :ط یعنی همون قلب هست که بوس میفرسته ها ، قدرش رو بدون ، من به هر کسی :ط نمیفرستم !! :دی

              دیدگاه


                #8
                پاسخ : مشکل در ساخت ساعت با آیسی DS1307

                منظورتون این هست که باید یکی از این 3 روش رو انجام بدم ؟؟
                پـ ن پـ .....
                پایه 7 1307 میگه بیکار نمیمونه !
                خیر با توجه به مقداری که به آدرس 7 آی سی میدید میشه فرکانس اونو تنظیم کرد برای تنظیم روی 1 هرتز باید عدد 10 هگز(16 دسیمال) رو توی خانه 7 آی سی بریزید.

                این هم کد برای 1 ثانیه:
                کد:
                " regfile = "m8def.dat $ 
                crystal = 1000000 $ 
                
                Config Timer1 = Timer , Prescale = 1 
                Enable Interrupts
                Enable Timer1 
                On Timer1 P 
                Timer1=49910
                Start Timer1 
                
                Do 
                
                Loop 
                End 
                 
                P :
                خواندن از آی سی 
                Timer1=49910 
                Return
                در ضمن :ط نشان دهنده لطف شماست.
                تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

                دیدگاه


                  #9
                  پاسخ : مشکل در ساخت ساعت با آیسی DS1307

                  نوشته اصلی توسط mehdi_nxp
                  سلام.
                  این مشکل به دلیل به وجود میاد که داری با سرعت خیلی بالایی از IC میخونی.
                  شما با یه تایمر 1 دقیقه رو ایجاد کن و هر 1 دقیقه یک بار از IC بخون.
                  اگر نیاز به نمایش ثانیه هم دارید اونو با خود میکرو ایجاد کنید.
                  خلاصه منظورم اینکه اینقدر زیاد از IC نخون.
                  اگه بخوایم ثانیه ای که میکرو میسازه رو نشون بدیم مشکل می آد احتمالا مثلا روی 58 یا 59 ثانیه دقیقه آی سی ساعت تغییر کنه و ...
                  من که یادم نمی آد که اگه هر ثانیه بخونی آی سی هنگ کنه ! نه بابا!
                  [br /][hr]http://pcenter.ir[hr][br /]

                  دیدگاه


                    #10
                    پاسخ : مشکل در ساخت ساعت با آیسی DS1307

                    نوشته اصلی توسط adelavr110
                    اگه بخوایم ثانیه ای که میکرو میسازه رو نشون بدیم مشکل می آد احتمالا مثلا روی 58 یا 59 ثانیه دقیقه آی سی ساعت تغییر کنه و ...
                    من که یادم نمی آد که اگه هر ثانیه بخونی آی سی هنگ کنه ! نه بابا!
                    بله با خوندن در هر یک ثانیه مشکلی پیش نمیاد.
                    ولی شما اگه دقت کنی دوستمون تو برنامه اولی که گذاشتند باسرعت خیلی زیادی در حال خوندن بودن.و همین مشکل سازه.
                    در مورد یک ثانیه هم میشه از همون پایه 7 استفاده کرد.هر وقت یک شد یکی به ثانیه اضافه میکنیم.
                    دیگه مشکلی نیست؟
                    تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

                    دیدگاه


                      #11
                      پاسخ : مشکل در ساخت ساعت با آیسی DS1307

                      نه حله

                      رفتم بتستم

                      دیدگاه


                        #12
                        پاسخ : مشکل در ساخت ساعت با آیسی DS1307

                        با عرض سلام

                        دوستان عزیز خواهش می کنم کمک کنید ، مشکل همچنان پا بر جاست

                        از کانتر هم استفاده کردم از تایمر 1 هم استفاده کردم ولی باز هم بعد از چند ساعت دیگه زمان حرکت نمیکنه

                        بابا یکی بگه این برنامه چه مرگشه دیگه :(

                        دیدگاه


                          #13
                          پاسخ : مشکل در ساخت ساعت با آیسی DS1307

                          این سه خطو به اول برنامت اضاف کن باز اگر مشکلت حل نشد فردا باز مسئلرو می بریم جلوتر

                          $swstack=50
                          $hwstack=50
                          framesize=50

                          این مقادیر رو بده علی الحساب بعد باز روش کار می کنیم
                          همانطور كه مايل نيستم بنده كسي باشم، حاضر نيستم آقاي كسي باشم. كساني كه مخالف آزادي ديگرانند، خود لياقت آزادي را ندارند.((آبراهام لينكن))

                          قدرت شگفت انگيز نيروهاي خلاق و استعدادهاي نهفته آدمي هنگامي آشكار مي شود كه نيازي حياتي، تواناييهاي او را به فعاليت وادارد و كشش آرزويي، سراپاي وجودش را به جنب و جوش درآورد.((آبراهام لينكن))

                          [img width=343 height=100]http://www.elecdesigner.com/uploads/PRO-DESIGNER-GROUP.jpg[/img]

                          دیدگاه


                            #14
                            پاسخ : مشکل در ساخت ساعت با آیسی DS1307

                            آقا مهدی من قبلنا هم مزاحمتون شده بودم.
                            یه سوال هم اینجا پیش اومده و مجبور شدم که بپرسم :

                            اگر بخوایم در تابلو روان از این آیسی استفاده کنیم که مثلا هر ثانیه یکبار یه کاراکتر رو شیفت بده یا هر یه دقیقه یکبار یه کاراکتر دیگه رو شیفت بده،اونوقت منطق برنامه نویسی چطوری میشه ؟
                            اگه بخوایم دائم تابع زمان رو بخونیم،تابع شیفت هم فعال میشه و زمان درست نشون داده نمیشه !
                            در واقع من دنبال ایجاد یه روشی مثل وقفه هستم که تا مقدار مثلا دقیقه تغییر پیدا کرد تابع زمان خونده بشه !!!
                            در این مورد چه روشی رو پیشنهاد میکنید ؟

                            بسیار ممنون
                            * هر گاه خدا بخواهد بنده اي را خوار كند، دانش را از او دور سازد.
                            * سخن بگوييد تا شناخته شويد، زيرا كه انسان در زير زبان خود پنهان است.
                            *بدترين دوست،آ‌ کسی است که براي او به رنج و زحمت افتي.
                            حضرت علی(ع)
                            آموزش AVR به ساده ترین زبان ممکن : Noise.Blog.IR

                            دیدگاه


                              #15
                              پاسخ : مشکل در ساخت ساعت با آیسی DS1307

                              سلام دوستان؛مدار rtc ds1307 رو بستم،برنامشو هم نوشتم،توی شبیه ساز درست کار میکنه،ولی توی عمل روشن میکنم زمانو نشون میده،ولی بالا نمیره،خاموش روشن میکنم،زمان نسبت به بار قبل بالا رفته،ولی باز تو حالت روشن حرکت نمیکنه،مشکل از چی میتونه باشه؟مقاومت های پول اپ دو پایه rtc کمه ینی؟(مقاومت پول اپ 4.7k هست)ممنون میشم کمکم کنید

                              دیدگاه

                              لطفا صبر کنید...
                              X