اطلاعیه

Collapse
No announcement yet.

کمک در مورد ای سی ساعت ds1307

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

    کمک در مورد ای سی ساعت ds1307

    سلام چند روز پیش یه پروژه داشتم که با adcمیکرو بود که تو همین فروم پرسیدم وبه کمک دوستان و استادان عزیز مشکلم 98درصد حل شد...
    اما الان یه پروژه دیگه دارم که ساعت رو توسط ds1307 بخونم و روی ال سی دی کاراکتری نمایش بدم....

    راستش تو اینترنت خیلی گشتم اما مشکلی مثل مشکل خودم نیافتم ...مشکل از این قراره که وقتی مدار را وصل میکنم این عدد رو نشون میده 1:1:0 یعنی بجای دقیقه و ساعت 1 نشون میده {حرکت هم نداره} و اگر یک ثانیه بعد مدار رو قطع و وصل کنم مقدار دقیقه و ساعت 1 عدد افزایش پیدا میکنه...!!!

    راستی scl..sdaرو با مقاومت یک کیلو پول اپ کردم که به این هم شک دارم
    ایا مشکل از میکرو هست؟؟تغذیه هست؟؟؟ای سی هست؟؟؟

    {من تازه کار هستم و برای یاد گیری هست این پروژه ها بخاطر همین هر مشکلی حتی اگر پیشپا افتاده به نظرتون رسید بگید که بررسی کنم}
    پیشاپیش ممنون ار جوابتون

    #2
    پاسخ : کمک در مورد ای سی ساعت ds1307

    نوشته اصلی توسط morteza borji
    سلام چند روز پیش یه پروژه داشتم که با adcمیکرو بود که تو همین فروم پرسیدم وبه کمک دوستان و استادان عزیز مشکلم 98درصد حل شد...
    اما الان یه پروژه دیگه دارم که ساعت رو توسط ds1307 بخونم و روی ال سی دی کاراکتری نمایش بدم....

    راستش تو اینترنت خیلی گشتم اما مشکلی مثل مشکل خودم نیافتم ...مشکل از این قراره که وقتی مدار را وصل میکنم این عدد رو نشون میده 1:1:0 یعنی بجای دقیقه و ساعت 1 نشون میده {حرکت هم نداره} و اگر یک ثانیه بعد مدار رو قطع و وصل کنم مقدار دقیقه و ساعت 1 عدد افزایش پیدا میکنه...!!!

    راستی scl..sdaرو با مقاومت یک کیلو پول اپ کردم که به این هم شک دارم
    ایا مشکل از میکرو هست؟؟تغذیه هست؟؟؟ای سی هست؟؟؟

    {من تازه کار هستم و برای یاد گیری هست این پروژه ها بخاطر همین هر مشکلی حتی اگر پیشپا افتاده به نظرتون رسید بگید که بررسی کنم}
    پیشاپیش ممنون ار جوابتون
    سلام
    من خودم سر ds1307 خیلی بدبختی کشیدم، واسه همین دلم نمیخواد دیگران اذیت شن. هر سوالی داری راجبش چه خصوصی و چه عمومی تعارف نکن، من در خدمتم.
    علت ثابت موندن ساعتت هم اینه که تو ds1307 برای راه اندازی اولیه (فقط برای یکبار) نیازه که یه بیت ثانیش رو صفر کنی یا ثانیش رو ریست کنی. برای دریافت خروجی چشمک زن (ثانیه شمار) هم باید مثل همین کارو انجام بدی اما برای بیت sqwش (واسه اینکار کد زیر رو اضافه کن)
    'Enable SQW/OUT
    I2cstart
    I2cwbyte &HD0
    I2cwbyte 7
    I2cwbyte &B00010000
    I2csto
    واسه صفر کردن ثانیه هم اگه اشتباه نکنم کدش اینه:
    _sec = 0
    _sec = Makebcd(_sec)
    I2cstart
    I2cwbyte &HD0
    I2cwbyte 0
    I2cwbyte _sec
    I2cstop
    البته این کدها رو تو حلقه نذاری ها، فقط یکبار کافیه نوشته بشن.
    بازم سوالی داشتی در خدمتم
    تشکر نکن، صلوات بفرست:

    [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

    دیدگاه


      #3
      پاسخ : کمک در مورد ای سی ساعت ds1307

      داداش دمت گرم اون برنامه ای که قبلا ریخته بودم تو میکرو بیشترش کپی از کتابی که داشتم بود الان با اطلاعاتی که به دست اوردم یه برنامه جدید نوشتم که الان رو ی ال سی دی فقط عدد صفر به سرعت نمایش داده میشه .حالا اگر میشه ایرادات این برنامه رو به من بگید{چون این پروژه هارو برای یاد گیری انجام میدم مخوام ایراداتم رو بفهمم و پیشرفت کنم}

      راستی من از کریستال خارجی استفاده نکردم در میکرو .ممکنه این اشکال از نویز میرو باشه؟؟؟!!
      پایه 7 ای سی ازاده و چون از باتری استفاده نمیکنم vbatرو بهgndوصل کردم و کریستال هم به همون مقداری که نیاز داره براش کذاشتم... و مقاومت پول اپ هم 1 کیلو اهم هست

      $regfile = "m32def.dat"
      $crystal = 10000000
      Config Lcd = 16 * 2
      Config Lcdpin = Pin , Db4 = Pind.4 , Db5 = Pind.3 , Db6 = Pind.1 , Db7 = Pind.2 , Rs = Pind.6 , E = Pind.5
      Cursor Off
      $lib "ds1307clock.lib"
      Config Sda = Portc.1
      Config Scl = Portc.0
      Const Ds1307w = &H0
      Const Ds1307r = &H1
      Dim S As Byte
      Dim M As Byte
      Dim H As Byte
      S = 1
      M = 1
      H = 1
      Do
      S = Makebcd(s)
      M = Makebcd(m)
      H = Makedec(h)
      I2cstart
      I2cwbyte Ds1307w
      I2cwbyte 0
      I2cstart
      I2cwbyte Ds1307r
      I2crbyte S , Ack
      I2crbyte M , Ack
      I2crbyte H , Nack
      I2cstop
      S = Makedec(s) : M = Makedec(m) : H = Makedec(h)
      If S > 59 Then S = 0
      If M > 59 Then M = 0
      If H > 23 Then H = 0
      Cls
      Lcd H ; ":" ; M ; ":" ; S
      Loop

      دیدگاه


        #4
        پاسخ : کمک در مورد ای سی ساعت ds1307

        علاوه بر چیزایی که دوستمون گفتن در مورد مقاومت پول پ من خودم 4.7 کیلو گذاشتم خوب جواب داد فرکانس i2c هم پیش فرض در بسکام بود
        من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
        آلبرت اینشتین
        منبع: http://fa.wikiquote.org

        دیدگاه


          #5
          پاسخ : کمک در مورد ای سی ساعت ds1307

          "m32def.dat"
          $crystal = 10000000
          Config Lcd = 16 * 2
          Config Lcdpin = Pin , Db4 = Pind.4 , Db5 = Pind.3 , Db6 = Pind.1 , Db7 = Pind.2 , Rs = Pind.6 , E = Pind.5
          Cursor Off
          $lib "ds1307clock.lib"
          Config Sda = Portc.1
          Config Scl = Portc.0
          Const Ds1307w = &H0
          Const Ds1307r = &H1
          Dim S As Byte
          Dim M As Byte
          Dim H As Byte
          S = 1
          M = 1
          H = 1
          Do
          S = Makebcd(s)
          M = Makebcd(m)
          H = Makedec(h)
          I2cstart
          I2cwbyte Ds1307w
          I2cwbyte 0
          I2cstart
          I2cwbyte Ds1307r
          I2crbyte S , Ack
          I2crbyte M , Ack
          I2crbyte H , Nack
          I2cstop
          S = Makedec(s) : M = Makedec(m) : H = Makedec(h)
          If S > 59 Then S = 0
          If M > 59 Then M = 0
          If H > 23 Then H = 0

          Loop
          شما توی برنامه اصلا از دستور lcd استفاده نکردید که چیزی نشون بده :smile:
          اون قسمتی هم که قرمز کردم اصلا لازم نیست بنویسید
          من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
          آلبرت اینشتین
          منبع: http://fa.wikiquote.org

          دیدگاه


            #6
            پاسخ : کمک در مورد ای سی ساعت ds1307

            بله من خودم هم به مقاومت شک دارم ولی اصلا انگار هیچ ارتباطی بین ای سی و میکرو بر قرار نیست{بیشتر ممکنه نرم افزاری باشه}

            چون با تغییر برنامه ها واکنش های مدار هم عوض میشه بعضی از موقع ها...

            نه اصلاح شده وعدد صفر ارسال میشه الان {پست رو ویرایش کردم همون موقع!!!}

            دیدگاه


              #7
              پاسخ : کمک در مورد ای سی ساعت ds1307

              الانم اون قسمت که شما گفتی اضافی هستو حذف کردم و نتیجه عدد 165 رو بجای ساعت .ثاینه و دقیقه نشون میده ... و هی از بالا به سمت پایین پیکسل های ال سی دی حرکت میکنند :rolleyes:
              {این مشکل رو یجا دیگه هم دیدم{این چند روز تمام تاپیک های سایت هارو گشتم تا بالاخره خودم تاپیک زدم}}

              الا ن ای سی ساعت رو که از جای خودش خارج میکنم بازم عدد 165 همون جور روی ال سی دی هست...

              دیدگاه


                #8
                پاسخ : کمک در مورد ای سی ساعت ds1307

                نوشته اصلی توسط morteza borji
                الانم اون قسمت که شما گفتی اضافی هستو حذف کردم و نتیجه عدد 165 رو بجای ساعت .ثاینه و دقیقه نشون میده ... و هی از بالا به سمت پایین پیکسل های ال سی دی حرکت میکنند :rolleyes:
                {این مشکل رو یجا دیگه هم دیدم{این چند روز تمام تاپیک های سایت هارو گشتم تا بالاخره خودم تاپیک زدم}}

                الا ن ای سی ساعت رو که از جای خودش خارج میکنم بازم عدد 165 همون جور روی ال سی دی هست...
                تا جایی که من میدونم این 165:165:165 مثل 0:0:80 هست و بدلیل فعال نبودن اسیلاتور ساعته، اگه ثانیه رو صفر کنی شروع به کار میکنه و درست میشه (البته بذاریش قبل از do). مقاومت رو با دوستمون موافقم، منم 4.7 کیلو گذاشتم و مشکلی باهاش ندارم. واسه میکرو کریستال خارجی نیاز نیست، اما برای ساعتت باید کریستال ساعت بذاری (همون 32...). پایه 7 خروجی led ثانیه شماره، اختیاریه، میتونی ازش استفاده بکنی یا نکنی، با خودته، اما اگه بخوای استفادش کنی باید اون دستوری که بهت دادمش برای sqw رو یه بار از میکرو به ds1307 بدی.
                تشکر نکن، صلوات بفرست:

                [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

                دیدگاه


                  #9
                  پاسخ : کمک در مورد ای سی ساعت ds1307

                  نه فیلا فقط میخوام بشمره که بفهمم کار میکنه بعدا توسعه میدم کم کم ... {کریستال هم همون 32....هست برای ای سی}
                  الان با تو جه به گفته های شما این برنامه رو نوشتم اما همونجوریه مشکلم... :sad:
                  $regfile = "m32def.dat"
                  $crystal = 10000000
                  Config Lcd = 16 * 2
                  Config Lcdpin = Pin , Db4 = Pind.4 , Db5 = Pind.3 , Db6 = Pind.1 , Db7 = Pind.2 , Rs = Pind.6 , E = Pind.5
                  Cursor Off
                  $lib "ds1307clock.lib"
                  Config Sda = Portc.1
                  Config Scl = Portc.0
                  Const Ds1307w = &H0
                  Const Ds1307r = &H1
                  Dim S As Byte
                  Dim M As Byte
                  Dim H As Byte
                  S = 0
                  M = 0
                  H = 0
                  S = Makebcd(s)
                  M = Makebcd(m)
                  H = Makebcd(h)
                  Do
                  I2cstart
                  I2cwbyte Ds1307w
                  I2cwbyte 0
                  I2cstart
                  I2cwbyte Ds1307r
                  I2crbyte S , Ack
                  I2crbyte M , Ack
                  I2crbyte H , Nack
                  I2cstop
                  S = Makedec(s) : M = Makedec(m) : H = Makedec(h)
                  Cls
                  Lcd H ; ":" ; M ; ":" ; S
                  Loop
                  اینم یه تاپیک دیگه که همین مشکلو داشته و با مقاومت 10 کیلو حل شده به نظر شما مقاومت مشکل منه؟؟
                  http://www.eca.ir/forum2/index.php?topic=56866.15

                  {جالب اینه که تو پرتیوس هم که الان با این برنامه تست کردم دقیقا همین مشکلو داشت و عدد 165 رو سریع نشون میداد پشت سر هم}

                  مقاومت رو توی پرتیوس تغییر دادم اما بازم با این برنامه مشکل بالارو داشت{فکر کنم یه جای برنامه مشکل داشته باشه}

                  برنامه یه جاش که نه چند جاش مشکل داره هنوز فکر کنم ... :cry: فکر کنم اخرم نتونم

                  دیدگاه


                    #10
                    پاسخ : کمک در مورد ای سی ساعت ds1307

                    مثل اینکه شما اصلا به حرفهای دوستمون گوش نمیدین! :biggrin:

                    ببینید شما باید اول برنامه ds1307 رو مقدار دهی کنید تا آیسی راه اندازی بشه مثلا با صفر اینطوری :

                    I2cstart
                    I2cwbyte Ds1307w
                    I2cwbyte 0
                    I2cwbyte 0
                    I2cwbyte 0
                    I2cwbyte 0
                    I2cwbyte 0
                    I2cwbyte 0
                    I2cwbyte 0
                    I2cwbyte 0
                    I2cwbyte 16
                    I2cstop
                    (البته اگه از sqw استفاده میکنید اون 16 رو بزنید)
                    من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                    آلبرت اینشتین
                    منبع: http://fa.wikiquote.org

                    دیدگاه


                      #11
                      پاسخ : کمک در مورد ای سی ساعت ds1307

                      ببخشید دیگه تازه کارم خوب من فقط ساعت و دقیقه و ثانیه رو میخوام پس فقط 3بار باید مقدار صفر رو بفرستم دیگه؟؟درسته؟؟

                      دیدگاه


                        #12
                        پاسخ : کمک در مورد ای سی ساعت ds1307

                        سلام دوست عزیز
                        اینم یه برنامه کامل، با پروتئوس، عملی و به همراه توضیحات خط به خط از ds1307 :wow: که نتیجه سه چهار ماه تلاش شبانه روزی و خون دل خوردن خودمه :agree:
                        http://up-is.ir/do.php?filename=141568285278351.rar
                        دیگه چی میخوای؟ :nice:
                        بزن تشکرو :biggrin:
                        شوخی کردم، بازم سوالی داشتی بپرس
                        تشکر نکن، صلوات بفرست:

                        [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

                        دیدگاه


                          #13
                          پاسخ : کمک در مورد ای سی ساعت ds1307

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

                          شما اصلا با تشکر زحمت هات جبران نمیشه و واقعا ازتون ممنون


                          واقعا واقعا واقعا ممنونم نمیدونم با چه زبانی تشکر کنم الان که برنامه شما رو با یخورده تغییر مثل پورت های lcdو...دیدم کار میکنه و داره ثانیه رو میشماره :wow: حالا باید کم کم توسعه بدمن و ایرادات دیگشو ببینم{البته اگر داشته باشه}

                          {خستگی یه روز سختی مثل امروز از بدنم کامل در رفته با این موفقیت و چند نمره خوب که تو درسام کسب کردم :nice:}
                          از شما و ecaممنونم

                          دیدگاه


                            #14
                            پاسخ : کمک در مورد ای سی ساعت ds1307

                            راستی یه سوال در مورد اینا چون قراره این ساعت با سنسور دما و ...با هم کار کنند نمیشه برای هیچ کدوم دستورwaitقرار داد

                            مثلا من چون سنسور lm35مشکل داشت و مقدارش تغییر میکرد با دستورwait هر500 میلی ثانیه یک نمونه میگرفتم اما چون حالا نمیشه دیگه waitنوشت مدام دما تغییر میکنه...

                            من تنها راه حل که به ذهنم میرسه اینه که از یک چند تا میکرو برای این کار باید استفاده کرد... ایا راه بهتر و منطقی تری هست؟؟

                            الان توی یه لینکی دیدم اینو درسته این؟؟؟از وقفه ها میشه استفاده کرد برای این کار؟؟
                            اینم لینک:
                            http://electrobot.org/post-396.html

                            دیدگاه


                              #15
                              پاسخ : کمک در مورد ای سی ساعت ds1307

                              نوشته اصلی توسط morteza borji
                              راستی یه سوال در مورد اینا چون قراره این ساعت با سنسور دما و ...با هم کار کنند نمیشه برای هیچ کدوم دستورwaitقرار داد

                              مثلا من چون سنسور lm35مشکل داشت و مقدارش تغییر میکرد با دستورwait هر500 میلی ثانیه یک نمونه میگرفتم اما چون حالا نمیشه دیگه waitنوشت مدام دما تغییر میکنه...

                              من تنها راه حل که به ذهنم میرسه اینه که از یک چند تا میکرو برای این کار باید استفاده کرد... ایا راه بهتر و منطقی تری هست؟؟

                              الان توی یه لینکی دیدم اینو درسته این؟؟؟از وقفه ها میشه استفاده کرد برای این کار؟؟
                              اینم لینک:
                              http://electrobot.org/post-396.html
                              بجای wait از وقفه تایمر استفاده کنید ضمنا برای تنظیم زمان خوندن از ds1307 میتونید از پایه sqw/out در حالت 1 هرتز استفاده کنید .
                              توضیحاتش در دیتاشیت ds1307 هست
                              من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                              آلبرت اینشتین
                              منبع: http://fa.wikiquote.org

                              دیدگاه

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