اطلاعیه

Collapse
No announcement yet.

لطفا در مورد ds1307 کمک کنید!

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

    #16
    پاسخ : لطفا در مورد ds1307 کمک کنید!

    الان دیتاشیت ds1307 دو دستم نیست ولی انجور که تو خاطرم هست شما موقع نوشتن وخوندن باید weekday رو در ردیف اخر قرار بدین چون تو این ایسی رجیستر مربوط به روز هفته در اخرین ادرس قرار داره :
    Getdatetime:
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0
    I2cstart
    I2cwbyte Ds1307r
    I2crbyte _sec , Ack
    I2crbyte _min , Ack
    I2crbyte _hour , Ack


    I2crbyte _day , Ack
    I2crbyte _month , Ack
    I2crbyte _year , ack
    I2crbyte Weekday, nAck
    I2cstop
    .
    .
    .
    Setdatetime:

    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0
    I2cwbyte _sec
    I2cwbyte _min
    I2cwbyte _hour


    I2cwbyte _day
    I2cwbyte _month
    I2cwbyte _year
    I2cwbyte Weekday
    I2cstop
    چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

    دیدگاه


      #17
      پاسخ : لطفا در مورد ds1307 کمک کنید!

      نوشته اصلی توسط mikla
      الان دیتاشیت ds1307 دو دستم نیست ولی انجور که تو خاطرم هست شما موقع نوشتن وخوندن باید weekday رو در ردیف اخر قرار بدین چون تو این ایسی رجیستر مربوط به روز هفته در اخرین ادرس قرار داره :
      Getdatetime:
      I2cstart
      I2cwbyte Ds1307w
      I2cwbyte 0
      I2cstart
      I2cwbyte Ds1307r
      I2crbyte _sec , Ack
      I2crbyte _min , Ack
      I2crbyte _hour , Ack


      I2crbyte _day , Ack
      I2crbyte _month , Ack
      I2crbyte _year , ack
      I2crbyte Weekday, nAck
      I2cstop



      .
      .
      .
      Setdatetime:

      I2cstart
      I2cwbyte Ds1307w
      I2cwbyte 0
      I2cwbyte _sec
      I2cwbyte _min
      I2cwbyte _hour


      I2cwbyte _day
      I2cwbyte _month
      I2cwbyte _year
      I2cwbyte Weekday
      I2cstop


      خیلی ممنون از جوابتون ولی تا اونجا که من جستجو کردم هیچ جا روال کار به این ترتیبی که اشاره کردین نوشته نشده oo:


      خدا نور است و من اشعه ای از او ...

      دیدگاه


        #18
        پاسخ : لطفا در مورد ds1307 کمک کنید!

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

        ببینم شما خریدی از این آی سی ها؟ اگه خریدی به من بگو من یه مشکلی تو راه اندازیه باطری بکاپ دارم :sad:
        :question:

        دیدگاه


          #19
          پاسخ : لطفا در مورد ds1307 کمک کنید!

          نوشته اصلی توسط arvinfx


          :question:

          ای بابا ! عزیزم سئوالتون رو روشن تر مطرح کنید

          من که چیزی نفهمیدم.
          خدا نور است و من اشعه ای از او ...

          دیدگاه


            #20
            پاسخ : لطفا در مورد ds1307 کمک کنید!

            تو دیتاشیت ایسی یه جدول اورده شده که نحوه ادرس دهی و قرار گیری رجیستر ها رو توضیح داده
            RTC AND RAM ADDRESS MAP
            The address map for the RTC and RAM registers of the DS1307 is shown in Figure 2. The RTC registers
            are located in address locations 00h to 07h. The RAM registers are located in address locations 08h to
            3Fh. During a multi-byte access, when the address pointer reaches 3Fh, the end of RAM space, it wraps
            around to location 00h, the beginning of the clock space
            DS1307 ADDRESS MAP Figure 2

            SECONDS
            MINUTES
            HOURS
            DAY
            DATE
            MONTH
            YEAR
            CONTROL
            RAM
            56 x 8
            00H
            البته تو این جدول حرفی از weakday نزده !! چون خودم به weakday نیاز نداشتم تا الان بهش توجه نکرده بودم من الان فرصتشو ندارم ولی شما اگه وقت دارین یه نگاهی به دیتاشیتش بندازین ببینین جایی راجع به weakday صحبت کرده یا نه
            چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

            دیدگاه


              #21
              پاسخ : لطفا در مورد ds1307 کمک کنید!

              منظور از weekday همون day تو دیتاشیته . یه جا جدولشو گذاشتم ( فکر کنم تو همین تاپیک بود ) . یه عددی بین 1 تا 7 هم می گیره

              دیدگاه


                #22
                پاسخ : لطفا در مورد ds1307 کمک کنید!

                نوشته اصلی توسط mikla
                تو دیتاشیت ایسی یه جدول اورده شده که نحوه ادرس دهی و قرار گیری رجیستر ها رو توضیح داده
                RTC AND RAM ADDRESS MAP
                The address map for the RTC and RAM registers of the DS1307 is shown in Figure 2. The RTC registers
                are located in address locations 00h to 07h. The RAM registers are located in address locations 08h to
                3Fh. During a multi-byte access, when the address pointer reaches 3Fh, the end of RAM space, it wraps
                around to location 00h, the beginning of the clock space
                DS1307 ADDRESS MAP Figure 2

                SECONDS
                MINUTES
                HOURS
                DAY
                DATE
                MONTH
                YEAR
                CONTROL
                RAM
                56 x 8
                00H
                البته تو این جدول حرفی از weakday نزده !! چون خودم به weakday نیاز نداشتم تا الان بهش توجه نکرده بودم من الان فرصتشو ندارم ولی شما اگه وقت دارین یه نگاهی به دیتاشیتش بندازین ببینین جایی راجع به weakday صحبت کرده یا نه
                به طرز عجیب غریبی مشکلم رفع شد. :redface: احساس میکنم مشکل از کامپایلر bascom بوده چون برنامه رو یه بار دیگه بدون تغییر نوشتم و درست شد. آخرشم نفهمیدم کجای برنامم مشکل داشت که کمپایلر error نمی گرفت. .
                به همون روشی که تو یکی از پست های همین تاپیک بهش اشاره کرده بودید، برنامه رو نوشتم:

                هر وقت نوشتیم ds1307w یعنی ادرس هگز d0 این ایسی فعال میشود برای نوشتن و هر وقت نوشتیم ds1307r یعنی ادرس هگز d1 این ایسی فعال میشود برای خواندن از ایسی
                برای دادن زمان و تاریخ به ایسی دستورات زیر تو برنامه هست
                _sec = 56
                _min = 59
                _hour = 23
                _day = 1
                _month = 4
                _year = 08
                اگه این خطوط تو برنامه نباشه ایسی بطور پیشفرض برا ی تمام این مقادیر 0 قرار میده
                برای تبدیل این مقادیر به bcd
                _sec = Makebcd(_sec)
                _min = Makebcd(_min)
                _hour = Makebcd(_hour)
                _day = Makebcd(_day)
                _month = Makebcd(_month)
                _year = Makebcd(_year)

                برای نوشتن این مقادیر در ایسی از دستورات زیر استفاده میشه
                I2cstart
                I2cwbyte Ds1307w
                I2cwbyte 0
                I2cwbyte _sec
                I2cwbyte _min
                I2cwbyte _hour
                I2cwbyte Weekday
                I2cwbyte _day
                I2cwbyte _month
                I2cwbyte _year

                عبارت i2cwbyte برای نوشت روی باس i2c ودستور i2crbyte برای خوندن از باس i2c میباشد
                بنابراین برای خواندن از ایسی باید از دستورات زیر استفاده کنید
                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
                به دیتا شیت هم نگاه کردم. اون بخشی رو که با DAY مشخص کرده همون weekday هست. که از 1-7 به صورت باینری عدد میگیره. و باید بلافاصله بعد از Hour قرار بگیره.
                یعنی با عدد 3 آدرس دهی میشه:

                I2cwbyte 3

                ولی با این حال من هنوز هیچ تاپیکی حداقل به زبان فارسی ندیدم که weekday رو فراخوانی و در نتیجه برنامه بکار برده باشه :icon_razz:

                بهر حال خدا باعث و بانی این تاپیک رو خیر بده که باعث شد ما یه چیزای جدیدی یاد بگیریم. :applause:
                خدا نور است و من اشعه ای از او ...

                دیدگاه


                  #23
                  پاسخ : لطفا در مورد ds1307 کمک کنید!

                  mikla جان واقعا گل کاشتی. کلی استفاده کردیم.
                  ولی باز هم سوالاتی دارم. مثلا فرض کن بین اینها، من ساعت و روز رو لازم دارم. اونوقت چطور می تونم بهش بفهمونم که day یعنی روز ، تا اون مقدار رو برام بفرسته؟ منظورم اینه که شما در برنامتون مثلا گفتید _sec یک متغیر از نوع بایته. ولی نگفتید که هنگام فراخوانی _sec باید ثانیه رو بفرستی. امیدوارم تونسته باشم منظورم رو رسونده باشم. و فرق این نوع متغیر با متغیر های دیگه چیه که از _ استفاده می شه بجای $?
                  در ضمن اگه باطری شارژ شده، منتظر ادامه مطلب هستیم : مثلا : ack و nack
                  و منظور از I2cwbyte 0 چیه؟
                  بهر حال خدا باعث و بانی این تاپیک رو خیر بده که باعث شد ما یه چیزای جدیدی یاد بگیریم. applause
                  خیلی ممنونم. من که کاری نکردم.
                  من دعا می کنم همه دوستان که در واقع اساتید ما هستند، سلامت و تندرست باشند تا با خدمتی که به هموطنان خودشون می کنند، به اهداف هر ایرانی که پیروزی است در تمام زمینه ها مخصوصا علم و فناوری نزدیکتر شویم. همچنین امیدوارم دوستان مثل همیشه ما را از دانسته های خود محروم نکنند.
                  امروز روز عیده و امیدوارم دعا های همه ی دوستان تحقق یابد.
                  کنکوری 90 دیروز،آ‌دانشجو مهندسی نرم افزار پلی تکنیک امروز!

                  دیدگاه


                    #24
                    پاسخ : لطفا در مورد ds1307 کمک کنید!

                    سلام

                    آقا کسی با باطری بک پ این آی سی مشکل نداه؟

                    من وقتی برق رو قطع میکنم دیگه ساعتم جلو نمیره همون ساعتی که قطع شده وایمیسه! :cry:

                    دیدگاه


                      #25
                      پاسخ : لطفا در مورد ds1307 کمک کنید!

                      وقتی می نویسی :

                      I2cstart
                      I2cwbyte Ds1307w
                      I2cwbyte 0

                      یعنی میگی که می خوای از آدرس صفرم بخونی . وقتی در ادامه می نویسی :

                      I2cstart
                      I2cwbyte Ds1307r
                      I2crbyte _sec , Ack

                      آدرس به صورت اتوماتیک یکی بیشتر میشه یعنی اگه دوباره بنویسی :
                      I2crbyte _min , Ack
                      میره از آدرس یم می خونه .

                      حالا اگه می خوای فقط روز رو بخونی کافیه اینجوری عمل کنی :

                      I2cstart
                      I2cwbyte Ds1307w
                      I2cwbyte 4

                      I2cstart
                      I2cwbyte Ds1307r
                      I2crbyte _day , Ack
                      I2cstop

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

                      آقا کسی با باطری بک پ این آی سی مشکل نداه؟

                      من وقتی برق رو قطع میکنم دیگه ساعتم جلو نمیره همون ساعتی که قطع شده وایمیسه! :cry:
                      در مورد کار نکردن باتری بک پ بهتره به Application Note اشاره شده تو دیتاشیت توجه کنی .

                      دیدگاه


                        #26
                        پاسخ : لطفا در مورد ds1307 کمک کنید!

                        I2cstart
                        I2cwbyte Ds1307w
                        I2cwbyte 0
                        ببخشید، این دستور نوشتن نیست؟
                        مثلا یه مثال بزن وقتی می خوام _sec رو بخونم و وقتی می خوام بنویسم چطوریه؟
                        کنکوری 90 دیروز،آ‌دانشجو مهندسی نرم افزار پلی تکنیک امروز!

                        دیدگاه


                          #27
                          پاسخ : لطفا در مورد ds1307 کمک کنید!

                          اول باید بری تو مد نوشتن ، بعد آدرس رو براش مشخص کنی ( همون سه خطی که مورد سوالته )

                          بعد اگه بخوای تو اون آدرس مشخص شده بنویسی بازم باید از I2cwbyte Ds1307w استفاده کنی .
                          ولی اگه بخوای از اون آدرس مشخص شده بخونی باید بری تو مد خوندن : I2cwbyte Ds1307r

                          دیدگاه


                            #28
                            پاسخ : لطفا در مورد ds1307 کمک کنید!

                            با سلام به همه دوستان در مورد s1307 می خواستم بدونم که چطور میشه am یا pm اون رو توی خروجی مشخص کرد البته در بسکام
                            با سپاس

                            دیدگاه


                              #29
                              پاسخ : لطفا در مورد ds1307 کمک کنید!

                              اول باید بری تو مد نوشتن ، بعد آدرس رو براش مشخص کنی ( همون سه خطی که مورد سوالته )

                              بعد اگه بخوای تو اون آدرس مشخص شده بنویسی بازم باید از I2cwbyte Ds1307w استفاده کنی .
                              ولی اگه بخوای از اون آدرس مشخص شده بخونی باید بری تو مد خوندن : I2cwbyte Ds1307r
                              حالا دیگه کاملا یاد گرفتم . :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow: :wow:
                              از همه خیلییییییییییییییییییییییییییییییییییییییییییییییی ییییییییی ممنونم.
                              الانم دارم، یه ساعت خوب با دماسنج خودم می نویسم ، اگه با مشکلی برخورد کردم، اینجا می پرسم.
                              اگر کسی تا حالا با I2C کار نکرده و می خواد از پایه یاد بگیره پیشنهاد می کنم این تاپیک رو از اول بخونه چون دوستان از پایه آموزش دادن.
                              از همشون متشکرم و نمی دونم چطوری ازشون تشکر کنم.
                              :applause: :applause: :applause: :applause: :applause: :applause: :applause:
                              کنکوری 90 دیروز،آ‌دانشجو مهندسی نرم افزار پلی تکنیک امروز!

                              دیدگاه


                                #30
                                پاسخ : لطفا در مورد ds1307 کمک کنید!

                                نوشته اصلی توسط alef_avr
                                با سلام به همه دوستان در مورد s1307 می خواستم بدونم که چطور میشه am یا pm اون رو توی خروجی مشخص کرد البته در بسکام
                                با سپاس
                                صفحه
                                نوشته اصلی توسط alef_avr
                                با سلام به همه دوستان در مورد s1307 می خواستم بدونم که چطور میشه am یا pm اون رو توی خروجی مشخص کرد البته در بسکام
                                با سپاس
                                5 دیتاشیتو نگاه کن . جدول اول ( مربوط به رجیسترها)
                                بیت ششم از آدرس 02H مشخص می کنه 12 ساعته انتخاب شده یا 24 ساعته . پس اول از همه باید اون انتخاب بشه . برای اینکه AM و PM رو هم مشخص کنی باید بیت پنجم همین آدرس رو ببینی

                                دیدگاه

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