اطلاعیه

Collapse
No announcement yet.

ساعت ds1307

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

    ساعت ds1307

    خسته نباشید :
    من یک ساعت با mega8 & ds1307 ساخته ام بد کار نمیکند ولی یک اشکال عمده دارد و آن اینه که حتی با بودن باتری بک پ وقتیکه برق میکرو نه باتری بک پ قطع میکنم و دوباره وصل میکنم ساعت متوقف شده ، ثانیه شماره روی صفر میماند و وقتیکه دکمه مربوط به تنظیم ثانیه شمار را میزنم دوباره شمارش ثانیه شروع میشود و اگر این دکمه را نزنم ثانیه شمار روی عدد صفر میماند .. البته بعضی مواقع هم اینطور نمیشود .
    اصلا فلسفه وجود باتری بک برای این است که شمارش متوقف نشود .
    لطفا راهنمایی فرمایید .

    برنامه ساعت :


    $regfile = "m8def.dat"
    $crystal = 8000000
    $lib "ds1307clock.lib"
    Config Debounce = 50

    Config Sda = Portb.1
    Config Scl = Portb.2

    Const Ds1307w = &HD0
    Const Ds1307r = &HD1

    $lib "glcdKS108.lib"
    Config Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portc , Ce = 3 , Ce2 = 4 , Cd = 0 , Rd = 1 , Enable = 2 , Reset = 6

    Setfont Font8x8
    Cls

    Config Pinb.3 = Input
    Config Pinb.4 = Input
    Config Pinb.5 = Input

    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Start Adc
    '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\
    Dim I As Byte , Dama As Byte , A As Byte , Address As Byte
    Dim Seco As Byte
    Dim Mine As Byte
    Dim Hour As Byte
    '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\
    Declare Sub Gas
    'Declare Sub Ds1307
    Declare Sub Nemaeysh
    'Declare Sub Daghigheh
    'Declare Sub Saat
    'Declare Sub Sanieh

    Main:
    Do
    Gosub Ds1307
    Call Nemaeysh
    Call Gas
    Debounce Pinb.3 , 1 , Sanieh , Sub
    Debounce Pinb.4 , 1 , Daghigheh , Sub
    Debounce Pinb.5 , 1 , Saat , Sub
    Loop
    '**********************************

    Sub Nemaeysh:

    Showpic 1 , 19 , Saat0

    Lcdat 3 , 41 , Hour ; ":"
    Lcdat 3 , 63 , Mine ; ":"
    Lcdat 3 , 88 , Seco

    If Hour >= 0 And Hour < 12 Then
    Lcdat 3 , 110 , "am"
    End If

    If Hour >= 12 And Hour < 24 Then
    Lcdat 3 , 110 , "pm"
    End If

    Showpic 1 , 1 , Bmp_img
    Lcdat 1 , 25 , Dama
    Showpic 43 , 1 , Degree_bmp
    Showpic 53 , 0 , Bmp_img0
    Waitms 100
    Cls
    End Sub
    Return

    '============================================ =====

    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 , Nack ' Hours
    I2cstop

    Seco = Makedec(seco) : Mine = Makedec(mine) : Hour = Makedec(hour)

    If Seco > 59 Then Seco = 0
    If Mine > 59 Then Mine = 0
    If Hour > 23 Then
    Hour = 0
    Gosub Sanieh
    End If
    Return

    '---------------------------------------------

    Sanieh:


    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

    '-------------------------------------
    Daghigheh:

    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
    '------------------------------------------
    Saat:
    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

    #2
    پاسخ : ساعت ds1307

    داداش
    ببین هر روز یکی از این تاپیک ها در باره 1307 ایجاد میشه
    یکمی سرچ کنید
    خیلی تاپیک های جامع تری هست
    http://www.eca.ir/forum2/index.php?topic=38492.0
    http://www.eca.ir/forum2/index.php?topic=44026.0

    در مورد این چیپ باید بگم :
    ایسی هست که با جریان کاری 500 نانو امپر میتونه زمان دقیقی رو به صورت یک ساعت دقیق بشماره
    علاوه بر یک ساعت دقیق با ثانیه دقیقه و ساعت
    روز ها ماه سال و روز های هفته رو هم میشماره
    گفتنی هستم که نوع فورمت شمارش روز های سال بر حسب فورمت تاریخ میلادی هستش
    بله باید با ئجود باطری هیچ وقت و هیج وقت ساعت متوقف نشود حتی باید تغیری هم نکند
    وقتی شما برق اصلی رو وصل کردید ماژول در حالت عادی کار میکنه
    وقتی به هر دلیل اگر برق اصلی رو قطع کنید ای سی خود کار به حالت کم مصرف سویج کرده
    و از باطری برای جلو گیری از توقف استفاده خواهد کرد
    همین :mrgreen:
    [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

    دیدگاه


      #3
      پاسخ : ساعت ds1307

      لطفا در مورد برنامه بفرمایید که آیا مشکل دارد یا از آی سی میتواند باشد ؟

      دیدگاه


        #4
        پاسخ : ساعت ds1307

        ظاهرا برنامه مشکل نداره !!
        [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

        دیدگاه


          #5
          پاسخ : ساعت ds1307

          ولتاژ باطری بک پ رو چک کن ببین تو رنج درست هست یا نه؟ اگر کم باشه نباید کار کنه

          دیدگاه


            #6
            پاسخ : ساعت ds1307

            باتری مشکل نداره چک کردم کاملا از نظر ولتاژ و جریان خوب است . در واقع باتری نو است .
            کریستال ساعت را تعویض کردم شمارش دقیقتر شد ولی مشکل ریست شدن ثانیه بعد از قطع برق و وصل آن دوباره وجود دارد .
            من فکر میکنم از آی سی ساعت باشد چون بدون قطع برق 5 ولتی میکرو را برمیدارم و پروگرام میکنم و بدون جدا کردن اتصال برق دوباره آن را در مدار قرار میدهم ثانیه شمار درست کار میکند .
            فقط با قطع برق 5 ولتی (منظورم ولتاژ میرو و آی سی ساعت است ) که ثانیه شمار ریست میشود و به حالت صفر رفته و حتما باید دوباره دکمه ثانیه شمار را بزنم تا شروع به شمارش کند
            :rolleyes:

            دیدگاه


              #7
              پاسخ : ساعت ds1307

              نوشته اصلی توسط mehran_1360
              باتری مشکل نداره چک کردم کاملا از نظر ولتاژ و جریان خوب است . در واقع باتری نو است .
              کریستال ساعت را تعویض کردم شمارش دقیقتر شد ولی مشکل ریست شدن ثانیه بعد از قطع برق و وصل آن دوباره وجود دارد .
              من فکر میکنم از آی سی ساعت باشد چون بدون قطع برق 5 ولتی میکرو را برمیدارم و پروگرام میکنم و بدون جدا کردن اتصال برق دوباره آن را در مدار قرار میدهم ثانیه شمار درست کار میکند .
              فقط با قطع برق 5 ولتی (منظورم ولتاژ میرو و آی سی ساعت است ) که ثانیه شمار ریست میشود و به حالت صفر رفته و حتما باید دوباره دکمه ثانیه شمار را بزنم تا شروع به شمارش کند
              :rolleyes:
              بیت 7 از آدرس 00 ای سی رو پاک ( صفر) میکنی ؟

              دیدگاه


                #8
                پاسخ : ساعت ds1307

                میشه بیشتر توضیح بدید؟

                دیدگاه


                  #9
                  پاسخ : ساعت ds1307

                  منظورم اینه اگر ای سی روشن بشه مقدار اولیش 1 هستش اگر 0رش کنی کلاک شروع میکنه به تایم انداخت اگر نه ساعتت هنگه.


                  دیدگاه


                    #10
                    پاسخ : ساعت ds1307

                    میشه آدرس دهی را برای صفر کردن این بیت بگویید؟

                    دیدگاه


                      #11
                      پاسخ : ساعت ds1307

                      :eek:
                      ببخشبد این بیت اگر 1 باشه ساعت کار میکنه ؟
                      یا اگر 0 باشه ؟؟؟
                      [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                      دیدگاه


                        #12
                        پاسخ : ساعت ds1307

                        من فکر کنم با شرط زیر توی روتین ثانیه مشکل حل بشه !!

                        کد:
                        if _seco>59 then 
                        _seco=0
                        [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                        دیدگاه


                          #13
                          پاسخ : ساعت ds1307

                          من توی دیتا شیت را که میبینم باید بیت 7 از رجیستر 0 ، صفر شود تا اوسیلاتور فعال باشه . چه طوری به این بیت باید دسترسی پیدا کنم ؟
                          برای دسترسی به رجیستر صفر از دستور زیر استفاده کردم :
                          i2cwbyte&hd0
                          بیت 7 را چه طوری باید صفر کرد

                          دیدگاه


                            #14
                            پاسخ : ساعت ds1307


                            متعصفانه من AVR بلد نیستم ولی با همون دستوراتی که برای دقیقه مینویسی باید اینکارو بکنی فقط آدرسش بجای 01H میشه 00H اصلا ثانیه رو 0 کن. اون بیتم خودش 0 میشه.

                            دیدگاه

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