اطلاعیه

Collapse
No announcement yet.

یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

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

    #31
    پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)


    نوشته اصلی توسط chia
    سلام

    اینم برنامه خدمت شما :smile:

    زیر برنامه ی GETDATETIME برای خوندن چیپ و زیر برنامه ی SETTIME و SETDATE برای نوشتن در اون

    Const Ds1307w = &HD0
    Const Ds1307r = &HD1

    Do
    Home
    Lcd "T:" : Lcd Bcd(_hour) : Lcd ":" : Lcd Bcd(_min) : Lcd ":" : Lcd Bcd(_sec)
    Lowerline
    Lcd "D:" : Lcd Bcd(_day) : Lcd "/" : Lcd Bcd(_month) : Lcd "/" : Lcd Bcd(_year)
    Lcd " " ; Weekday
    Loop



    Getdatetime:
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0

    I2cstart
    I2cwbyte Ds1307r
    I2crbyte _sec , Ack
    I2crbyte _min , Ack
    I2crbyte _hour , Ack
    I2crbyte Weekday , Ack
    I2crbyte _day , Ack
    I2crbyte _month , Ack
    I2crbyte _year , Nack
    I2cstop
    Return


    Setdate:

    _day = Makebcd(_day)
    _month = Makebcd(_month)
    _year = Makebcd(_year)
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 3
    I2cwbyte _weekday
    I2cwbyte _day
    I2cwbyte _month
    I2cwbyte _year
    I2cstop
    Return

    Settime:

    _sec = Makebcd(_sec)
    _min = Makebcd(_min)
    _hour = Makebcd(_hour)
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0
    I2cwbyte _sec
    I2cwbyte _min
    I2cwbyte _hour
    I2cstop
    Return

    chia جان این برنامه ای که گذاشتی کامله؟
    من کپی کردم و ریختم تو بیسکام و اولش کریستال و چیپ رو مشخص کدم و خواستم که هگز رو بسازم ارور داد. فقط از همون خطی که داری بر روی lcd نشون میدی ایراد میگیره.
    www.icesi.ir

    دیدگاه


      #32
      پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

      متغیرها رو تعریف کن
      ِِDie for Life, Not Live to Die
      Freedom Fighter
      " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

      دیدگاه


        #33
        پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)


        Dim Ds1307r As Integer
        Dim _sec As Byte
        Dim _min As Byte
        Dim _hour As Byte
        Dim Weekday As Byte
        Dim _day As Byte
        Dim _month As Byte
        Dim _year As Byte
        Dim 3 As Byte
        Dim Ds1307w As Byte
        Dim 0 As Byte

        از دو متغییر ds1307w , ds1307r ایراد میگیره
        www.icesi.ir

        دیدگاه


          #34
          پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

          پسر خوب اون دو تا متغیر نیستن ، ثابت هستن :smile:

          به جای تعریف اونا به عنوان متغیر همین رو بنویس کافیه

          Const Ds1307w = &HD0
          Const Ds1307r = &HD1
          ِِDie for Life, Not Live to Die
          Freedom Fighter
          " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

          دیدگاه


            #35
            پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

            آقا دستت درد نکنه هگز رو ساخت.

            :wow:
            www.icesi.ir

            دیدگاه


              #36
              پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

              سلامی دوباره.

              chia جان برای کریستال ds1307 چه مقداری رو بذارم.

              بعد دو تا پایه برای کرستال و دو تا پایه هم برای sda. scl
              پایه 7 رو چی کار کنم به کجا اتصال کنم.

              میشه سخت افزار اون برنامه رو برام بذاری؟

              www.icesi.ir

              دیدگاه


                #37
                پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                پایه ی 7 رو آزاد بذار

                کریستال 32.768 کیلوهرتز

                کافیه یه نگاه به دیتاشیتش بندازی

                حتما این کارو بکن چون طراحی pcb هم برای اتصال کریستال و نویزگیری اون خیلی اهمیت داره (تو دیتاشیت هست)

                در ضمن سعی کن از نوع smd استفاده کنی چون نویز کمتری میگیره
                ِِDie for Life, Not Live to Die
                Freedom Fighter
                " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

                دیدگاه


                  #38
                  پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                  chia جان این کارو کردم و جواب داد ولی یه مشکلی هست که روی lcd هم برای ساعت و هم برای تاریخ مقدار 0 رو نشون میده.

                  بازم شرمنده که من اینقدر سوال میکنم. بالاخره شما اساتید هزاران پیرهن بیشتر از ما پاره کردید.

                  www.icesi.ir

                  دیدگاه


                    #39
                    پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                    خواهش میکنم دوست عزیز وظیفه ست

                    شما بهش مقدار ندید و فقط روتین خوندن رو آزمایش کنید

                    تو پروتئوس دی اس با ساعت سیستم ست میشه

                    اگرم میخوای تنظیم کنی این یه برنامه ی تست هستش

                    $regfile = "m8def.dat"
                    $crystal = 1000000

                    Config Lcdpin = Pin , Db4 = Pind.1 , Db5 = Pind.2 , Db6 = Pind.3 , Db7 = Pind.4 , E = Pind.0 , Rs = Pind.6
                    Config Lcd = 16 * 2
                    Config Debounce = 200
                    Cursor Off


                    Dim Sel As Byte
                    Dim Seting As Bit


                    Config Pinc.2 = Input
                    Config Pinc.1 = Input
                    Config Pinc.5 = Input
                    Config Pinc.4 = Input
                    Config Pinc.3 = Input
                    Config Sda = Portc.2
                    Config Scl = Portc.1


                    Cls

                    Const Ds1307w = &HD0
                    Const Ds1307r = &HD1

                    Dim _sec As Byte , _min As Byte , _hour As Byte
                    Dim _day As Byte , _month As Byte , _year As Byte
                    Dim Weekday As Byte , _min1 As Byte , _hour1 As Byte , _sec1 As Byte , _day1 As Byte , _month1 As Byte , _year1 As Byte
                    Dim _weekday As Byte


                    Cls


                    Do

                    If Pinc.5 = 1 Then
                    Seting = 1
                    Incr Sel
                    If Sel > 6 Then
                    Sel = 0
                    End If
                    Waitms 250
                    Bitwait Pinc.5 , Reset
                    Waitms 250
                    End If

                    Locate 1 , 12
                    Select Case Sel

                    Case 1 : Lcd "Hour "
                    Case 2 : Lcd "Min "
                    Case 3 : Lcd "Sec "
                    Case 4 : Lcd "Year "
                    Case 5 : Lcd "Month"
                    Case 6 : Lcd "Day "
                    Case 0 : Lcd " "

                    End Select

                    If Sel = 0 Then
                    Goto P
                    End If

                    Debounce Pinc.4 , 1 , Up
                    Debounce Pinc.3 , 1 , Down
                    Goto P

                    Up:
                    Select Case Sel

                    Case 1 : Incr _hour1
                    Case 2 : Incr _min1
                    Case 3 : Incr _sec1
                    Case 4 : Incr _year1
                    Case 5 : Incr _month1
                    Case 6 : Incr _day1

                    End Select

                    Goto M

                    Down:
                    Select Case Sel

                    Case 1 : Decr _hour1
                    Case 2 : Decr _min1
                    Case 3 : Decr _sec1
                    Case 4 : Decr _year1
                    Case 5 : Decr _month1
                    Case 6 : Decr _day1

                    End Select


                    M:
                    If _sec1 > 59 Then
                    _sec1 = 0
                    End If
                    If _min1 > 59 Then
                    _min1 = 0
                    End If
                    If _hour1 > 23 Then
                    _hour1 = 0
                    End If
                    If _month1 > 12 Then
                    _month1 = 1
                    End If
                    If _day1 > 31 Then
                    _day1 = 1
                    End If
                    If _year1 > 99 Then
                    _year1 = 1
                    End If

                    Gosub Setdate

                    P:

                    Gosub Getdatetime


                    Home
                    Lcd "T:" : Lcd Bcd(_hour) : Lcd ":" : Lcd Bcd(_min) : Lcd ":" : Lcd Bcd(_sec)
                    Lowerline
                    Lcd "D:" : Lcd Bcd(_day) : Lcd "/" : Lcd Bcd(_month) : Lcd "/" : Lcd Bcd(_year)
                    Lcd " " ; Weekday


                    Loop

                    Getdatetime:
                    I2cstart
                    I2cwbyte Ds1307w
                    I2cwbyte 0

                    I2cstart
                    I2cwbyte Ds1307r
                    I2crbyte _sec , Ack
                    I2crbyte _min , Ack
                    I2crbyte _hour , Ack
                    I2crbyte Weekday , Ack
                    I2crbyte _day , Ack
                    I2crbyte _month , Ack
                    I2crbyte _year , Nack
                    I2cstop


                    Return






                    Setdate:
                    _weekday = 7
                    _day = _day1
                    _month = _month1
                    _year = _year1
                    _day = Makebcd(_day)
                    _month = Makebcd(_month)
                    _year = Makebcd(_year)
                    I2cstart
                    I2cwbyte Ds1307w
                    I2cwbyte 3
                    I2cwbyte _weekday
                    I2cwbyte _day
                    I2cwbyte _month
                    I2cwbyte _year
                    I2cstop

                    Settime:
                    _sec = _sec1
                    _min = _min1
                    _hour = _hour1
                    _sec = Makebcd(_sec)
                    _min = Makebcd(_min)
                    _hour = Makebcd(_hour)
                    I2cstart
                    I2cwbyte Ds1307w
                    I2cwbyte 0
                    I2cwbyte _sec
                    I2cwbyte _min
                    I2cwbyte _hour
                    I2cstop
                    Return
                    ِِDie for Life, Not Live to Die
                    Freedom Fighter
                    " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

                    دیدگاه


                      #40
                      پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                      نه آقا جون شما وظیفه ای برای کمک به من ندارید شما لطف دارید.

                      ای کاش سخت افزارشم میذاشتی ؟

                      نمیدونم الان دو دلت چند تا فهش داری به من میدی :cry: دیگه به بزرگواری خودت ببخش :agree:
                      پس منتظر سخت افزارش هستم
                      www.icesi.ir

                      دیدگاه


                        #41
                        پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                        نه من ناراحت نمیشم

                        من خیلی خوشحال میشم که به شما کمک کنم

                        خدمت شما

                        http://rapidshare.com/files/97746303/ds1307.zip.html
                        ِِDie for Life, Not Live to Die
                        Freedom Fighter
                        " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

                        دیدگاه


                          #42
                          پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                          راستی کلید sel رو اول بزنید
                          ِِDie for Life, Not Live to Die
                          Freedom Fighter
                          " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

                          دیدگاه


                            #43
                            پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                            chia جان من برنامه رو خوندم ولی بعضی جاهاش برام گنگه ممکنه یه توضیحه مختصری از برنامه بدی.

                            قبل DO رو نمیخواد بگی. :agree:
                            www.icesi.ir

                            دیدگاه


                              #44
                              پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                              سلام.

                              chia جان چند تا سوال داشتم.(چی کار کنم دیگه خنگم دیگه)

                              1- دلیلت از دو خط زیر در برنامت چیه؟ چرا این مقدارارو ریختی؟

                              Const Ds1307w = &HD0
                              Const Ds1307r = &HD1

                              2- شما تو این برنامه با چه تاخیری دیتا رو از ds1307 میخونید و مینویسید.

                              من میخوام هر 1 ثانیه یه بار دیتا رو از داخلش بخونم آیا این شدنیه؟ یه کمی در این مورد منو راهنمایی کن.

                              3- چرای این کارو کردی؟

                              _hour = Makebcd(_hour)
                              دلیل خاصی داره؟
                              www.icesi.ir

                              دیدگاه


                                #45
                                پاسخ : یه RTC و یا یه راه حل خوب به من بگید.(پروژه ساعت)

                                من برنامه رو نگاه نکردم. ولی اون دوتا عددی که به صورت ثابت تعریف شدن آدرس Device مورد استفاده در I2C و وضعیت عملیات( خواندن یا نوشتن) رو تعیین می کنن.
                                Hex0 = Bin:11010000
                                Hex1 = Bin:11010001

                                دیدگاه

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