اطلاعیه

Collapse
No announcement yet.

ساعت با pcf8563

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

    ساعت با pcf8563

    کسی از دوستان ار این ای سی ساعت استفاده کرده؟ سخت افزار و نرم افزار . ممنون میشم راهنماییم کنید
    چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

    #2
    پاسخ : pcf8563

    سلام،

    CodeWizardAVR توابعی برای راه اندازی PCF8583 در اختیارتون می گزارد.
    There is nothing so practical as a good theory. — Kurt Lewin, 1951

    دیدگاه


      #3
      پاسخ : pcf8563

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

      دیدگاه


        #4
        پاسخ : pcf8563

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

        دیدگاه


          #5
          پاسخ : pcf8563

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

          دیدگاه


            #6
            پاسخ : pcf8563

            سلام
            من با PCF8593 کار کردم. PCF8563 رو دیدم. تفاوتهاش تو مکان رجیسترهاش به لحاظ آدرسی. خاطرتون باشه که اول بهتره IC رو Initialize بکنین بعد ازش استفاده کنید. Initialize این IC به این معنی که امکانات اونو براش مشخص کنید. کد زیر برای PCF8593 آورده شده که برای استفاده تو 8563 باید محل آدرس رجیسترهاشو عوض بکنید.
            کد:
            Sub Init_clkic
              Address = 0
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Address
              Data_i2c = &B11001100                  'stop count/hold in latch//mode 32768/mask weekday and year/enable alarm register/reset flags
              I2cwbyte Data_i2c                    'filling control/status register
              I2cstop
            
              Address = 8
              Data_i2c = 0                       'no alarm int/notimer int/no clk alarm/no timer flag int/no timer
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Address
              I2cwbyte Data_i2c                    'filling alarm control register
              I2cstop
            End Sub
            یک نکته اینکه چون پروتکل ارتباطی این IC بر اساس بایت، بهتره از دستور دریافت و ارسال بایت در قالب I2C استفاده کنید. خب نکته های کد.
            Clkic_w یک ثابت از نوع بایت که آدرس نوشتن در PCF8593 رو در خودش داره. آدرس خوندن Clkic_rهست. اینارو باید از تو Datasheet مقدار بدین. Data_i2c یک متغیر از نوع بایت که داده هایی رو که می خوایم بفرستیم رو IC رو اول به اون می دیم بعد برای IC ارسال می کنیم. Address یک متغیر یک بایتی که محل رجیستری رو که می خوایم درش بنویسیم مشخص می کنه. در ابتدا تو آدرس 0 که رجیستر کنترلی اصلی IC هستش مینویسیم. توی کامنت گفته شده که چه جوری می خوایم IC رو پیکره بندی کنیم (به ترتیب نوشته شده در ضمن int به معنی اینتراپت). شما هم باید بگردین تو Datasheet که محل و نحوه بیتهای کنترلیش چه جوریه. زیاد سخت نیست. نکته جالب برای این IC اینکه بعد از هر بار نوشتن، رجیستر اشاره گر آدرس به طور اتوماتیک یک دونه اضافه شده و به محل بعدی که رجیستر بعدی تو حافظه باشه اشاره می کنه. بنابراین لازم نیست بعد از هر بار نوشتن آدرس حافظه رو بهش بدین و همون دفعه اول کافیه. بعد که رجیستر کنترلیش مقدار گرفت I2cStop رو براش می فرستیم تا بتونیم یک پرش تو حافظه برای دسترسی به آدرس 8 که رجیستر کنترلی دومش هست، بکنیم. در غیر اینصورت باید هشت دفعه Write داشته باشیم تا به طور خودکار به این آدرس برسه.
            حالا مثل دفعه قبل رجیستر کنترلی دومش رو هم پر میکنیم. تا اینجا تموم.
            یک نکته اینکه قالب داده های فوق باید رعایت بشه چون تو پروتکل نوشته شده. یعنی:
            اول I2C باید شروع بشه.
            دوم آدرس قطعه باید مشخص بشه.
            سوم باید آدرسی از حافظه رجیسترهای کاربردیشو بهش بدیم که می خوایم با اون کار کنیم.
            چهارم باید به ترتیب بایتها رو بهش بدیم.
            در انتها خاتمه I2C.
            کد Start IC رو هم براتون می ذارم. ببینید تا اینجا چی کار میتونید بکنید.
            کد:
            Sub Start_clkic
              Address = 0
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Address
              I2cstart
              I2cwbyte Clkic_r
              I2crbyte Data_i2c , Nack
              I2cstop
              Data_i2c = Data_i2c And &B00111111
              Address = 0
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Address
              I2cwbyte Data_i2c
              I2cstop
            End Sub
            چندتا نکته کوچیک
            1- وقتی از IC می خونید باید بهش Acknowledge بدین. در این صورت آدرس رجیستر اشاره گرش یک واحد زیاد خواهد شد تا به مکان بعدی اشاره کنه تا شما از اونجا بخونید. اگر Not Acknowledge یا همون Nack بدین این اتفاق نمی افته.
            2- توی کد Start Ic برای اینکه به تنظیمات بیتهای دیگر رجیستر کنترلی دست نخوره از یک عمل بیتی استفاده شده.
            3- پروتکل خوندن از IC اینجوریه:
            اول باید I2C رو شروع کنیم.
            دوم آدرس نوشتن به IC رو بدیم.
            سوم آدرس محلی از حافظه رجیسترهای کاربردی رو که می خوایم از اونجا بخونیم بهش بدیم.
            چهارم بدون بستن ارتباط I2C مجدد اونو شروع کنیم.
            پنجم ایندفعه آدرس خوندن از IC رو بهش بدیم.
            ششم شروع کنیم به خوندن و بهش Acknowledge یا Not Acknowledge بدیم.
            هفتم ارتباط I2C رو خاتمه بدیم.

            مشکلی بود بگو. موفق باشی.

            دیدگاه


              #7
              پاسخ : pcf8563

              :cry:
              _e_ عزیز از توضیحاتتون واقعا ممنونم ولی متاسفانه من همچنان تو گل گیر کردم فکر میکنم مشکلم یا تو ادرس دهی کنترل استاتیز یا تو بستن سخت افرارم oo:
              در مورد سخت افرار خازن 15 پیکو به جای خازن تریمر قرار دادم و بقیه مدار مثل دیتا شیت
              و تو ادرس دهی control status 1 و control statuse 2 هم تقریبا همه حالت های ممکن رو تست کردم که رو lcd فقط علامت سوال نشون میده :angry:
              اینم برنامم اگه راهنماییم کنید واقعا ممنون میشم


              $regfile = "m32def.dat"

              $crystal = 8000000
              Config Lcd = 16 * 2
              Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
              Cls

              Declare Sub Init_clkic

              Declare Sub Start_clkic

              Declare Sub Read_clkic


              Const Clkic_w = &HA0

              Const Clkic_r = &HA1

              Config Sda = Porta.0

              Config Scl = Porta.1
              Dim Address As Byte
              Dim Data_i2c As Byte
              Dim S As Byte
              Dim M As Byte
              Dim H As Byte
              Dim D As Byte
              Dim Month As Byte
              Dim Year As Byte


              I2cinit

              Call Init_clkic

              Call Start_clkic

              Do

              Call Read_clkic

              Home
              Lcd Bcd(h) : Lcd ":" : Lcd Bcd(m) : Lcd ":" : Lcd Bcd(s)
              Locate 2 , 1
              Lcd Bcd(d) : Lcd ":" : Lcd Bcd(month) : Lcd ":" : Lcd Bcd(year)
              Waitms 100
              Loop
              End
              '**********************
              Sub Init_clkic
              '>>>CONTROL/STATUSE1
              Address = 0
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Address
              Data_i2c = 128 '??????????????????
              I2cwbyte Data_i2c
              I2cstop

              Address = 01
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Address
              '>>>CONTROL/STATUSE2
              Data_i2c = 0 '??????????????????????????????
              I2cwbyte Data_i2c
              I2cstop
              '>>>CLKOUT FREQUENCY
              Address = &H0D
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Address
              Data_i2c = 128
              I2cwbyte Data_i2c
              I2cstop
              '>>>TIMER CONTROL
              Address = &H0E
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Address
              Data_i2c = 130
              I2cwbyte Data_i2c
              I2cstop

              End Sub


              '*************************
              Sub Start_clkic


              S = 21
              M = 59
              H = 23
              D = 29
              Month = 12
              Year = 08
              S = Makebcd(s)
              M = Makebcd(m)
              H = Makebcd(h)
              D = Makebcd(d)
              Month = Makebcd(month)
              Year = Makebcd(year)



              Address = 2
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Address
              I2cwbyte S
              I2cwbyte M
              I2cwbyte H
              I2cwbyte D
              I2cstop
              Address = 7
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Month
              I2cwbyte Year
              I2cstop


              End Sub
              '****************************
              Sub Read_clkic
              Address = 2
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Address
              I2cstart
              I2cwbyte Clkic_r

              I2crbyte S , Ack

              I2crbyte M , Ack

              I2crbyte H , Ack

              I2crbyte D , Nack
              I2cstop
              Address = 7
              I2cstart
              I2cwbyte Clkic_w
              I2cwbyte Address

              I2cstart
              I2cwbyte Clkic_r
              I2cwbyte Month
              I2cwbyte Year
              I2crbyte Month , Ack

              I2crbyte Year , Nack
              I2cstop
              End Sub
              چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

              دیدگاه


                #8
                پاسخ : pcf8563

                سلام
                برای اینکه طولانی نشه چند تا موضوع به نظرم می رسه اونا رو می گم. روش کار بکنید نتیجش رو بگین:
                1- نشانی IC رو تو Datasheet برای خوندن A3 و برای نوشتن A2 زده. اینارو اصلاح کنید.
                2- حتما برای ارتباط I2C یک فرکانس مشخص کنید. مثل کد زیر:
                کد:
                Config I2cdelay = 5
                3- اگه امکان داره و راحته، LCD رو ببرین رو پورت A و از پایه های استاندارد I2C برای ارتباط استفاده کنید مثل کد زیر:
                کد:
                Config Sda = Portc.1
                Config Scl = Portc.0
                4- فایل مدار 8593 رو می ذارم. مقاومتهای سری 180 اهمی و Pull-Up ها 10 کیلو اهمی رو حتما دقت داشته باشین.
                http://rapidshare.com/files/126420283/8593.jpg.html
                امیدوارم درست بشه. اگر نشد خبر بدین.
                موفق باشین.

                دیدگاه


                  #9
                  پاسخ : pcf8563

                  راحتترین آی سی ساعت ds1307 است می توانید آنرا هم امتحان کنید

                  دیدگاه


                    #10
                    پاسخ : pcf8563

                    ممنون از راهنماییهاتون من از ds1307 و pcf8583 جواب گرفتم منتها تو مدارم نیاز به این دارم که ای سی ساعت بتونه تو ولتاژ های پایین هم کار کنه که pcf8563 تو حدود 1.8 ولت کار میکنه و برای مدار من مناسب ترین ای سی هست و با کمک های جناب _e_ بالاخره خروجی رو lcd اومد ولی همچنان دو تا مشکل برقرار : یکی اینکه به جای عدد مربوط به month یه عدد بی معنی نشون میده و دوم اینکه دیتا رفرش نمیشه oo: یعنی روی lcd فقط همون مقدار اولیه که خودمون دادیم نشون داده میشه البته غیر از month

                    :sad:

                    اینم برنامه با اخرین تغییرات نیازمند مدد شماست

                    :NO:

                    I2cinit

                    Call Init_clkic

                    Call Start_clkic

                    Do

                    Call Read_clkic

                    Home
                    Lcd Bcd(h) : Lcd ":" : Lcd Bcd(m) : Lcd ":" : Lcd Bcd(s)
                    Locate 2 , 5
                    Lcd Bcd(year) : Lcd ":" : Lcd Bcd(month) : Lcd ":" : Lcd Bcd(day)
                    Waitms 100
                    Loop
                    End
                    '**********************
                    Sub Init_clkic
                    '>>>CONTROL/STATUSE1
                    Address = 0
                    I2cstart
                    I2cwbyte Clkic_w
                    I2cwbyte Address
                    Data_i2c = 160 '??????????????????
                    I2cwbyte Data_i2c
                    I2cstop

                    Address = 01
                    I2cstart
                    I2cwbyte Clkic_w
                    I2cwbyte Address
                    '>>>CONTROL/STATUSE2
                    Data_i2c = 16 '??????????????????????????????
                    I2cwbyte Data_i2c
                    I2cstop
                    '>>>CLKOUT FREQUENCY
                    Address = &H0D
                    I2cstart
                    I2cwbyte Clkic_w
                    I2cwbyte Address
                    Data_i2c = 128
                    I2cwbyte Data_i2c
                    I2cstop
                    '>>>TIMER CONTROL
                    Address = &H0E
                    I2cstart
                    I2cwbyte Clkic_w
                    I2cwbyte Address
                    Data_i2c = 130
                    I2cwbyte Data_i2c
                    I2cstop

                    End Sub


                    '*************************
                    Sub Start_clkic


                    S = 21
                    M = 59
                    H = 23
                    Day = 29
                    Month = 10
                    Year = 08
                    Weekdays = 6
                    S = Makebcd(s)
                    M = Makebcd(m)
                    H = Makebcd(h)
                    Day = Makebcd(day)
                    Month = Makebcd(month)
                    Year = Makebcd(year)



                    Address = 2
                    I2cstart
                    I2cwbyte Clkic_w
                    I2cwbyte Address
                    I2cwbyte S
                    I2cwbyte M
                    I2cwbyte H
                    I2cwbyte Day
                    I2cwbyte Weekdays
                    I2cwbyte Month
                    I2cwbyte Year
                    I2cstop


                    End Sub
                    '****************************
                    Sub Read_clkic
                    Address = 2
                    I2cstart
                    I2cwbyte Clkic_w
                    I2cwbyte Address
                    I2cstart
                    I2cwbyte Clkic_r

                    I2crbyte S , Ack

                    I2crbyte M , Ack

                    I2crbyte H , Ack

                    I2crbyte Day , Ack

                    I2crbyte Weekdays , Ack

                    I2crbyte Month , Ack

                    I2crbyte Year , Nack
                    I2cstop
                    End Sub
                    چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

                    دیدگاه


                      #11
                      پاسخ : pcf8563

                      سلام
                      ببینید علت اینکه عدد مربوط به ماه رو قاراشمیش نشون می ده اینکه رجیستر نگهدارنده عدد ماه یک چیز دیگرو هم تو خودش نگه می داره و اون عدد مربوط به قرنه. 5 تا بیت پایین یا همون کم ارزش مربوط به ماه و دو بیت بعدی استفاده نمی شه و بیت آخر مربوط به عدد قرن. بعد از اینکه ماه رو از IC خوندید کد زیر رو هم بهش اضافه کنید تا اثر سه بیت بالا رو از بین ببرین:
                      کد:
                      M = M and &b00011111
                      حالا نمایشش بدین.
                      یک نکته اینکه من PCF8593 رو با باتری CR2032 که باتری ساعت باشه راه اندازیش کردم بدون مشکل هم کار کرد. این باتری ها 3v.
                      علت اینکه داده ها به روز نمی شه بنظرم اینکه شما موقع Initialize قطعه 8563 با ریختن مقدار 160 در رجیستر شماره 0، باعث شدین که IC با یک شدن بیت پنجمشتوی این رجیستر، متوقف بشه. این خوبه برای اینکه وقتی می خواین در رجیسترهای دیگش که مربوط به نگهدارنده اعداد ثانیه و دقیقه و روز و امثالهم میشه، مقداردهی کنین، از تغییرات ناخواسته جلوگیری بکنین. ولی باید یک جای دیگه بهش بگین که شروع به کار کنه. بهتره به نظر من توی روتین Start_clkic این کار رو انجام بدین به شرط اینکه به آدرس دهی های دیگتون آسیب نرسه. مثلا به جای 160 عدد 128 رو تو رجیستر شماره 0 بریزید. مثل کد زیر:
                      کد:
                      Address = 0
                      I2cstart
                      I2cwbyte Clkic_w
                      I2cwbyte Address
                      Data_i2c = 128
                      I2cwbyte Data_i2c
                      I2cstop
                      امیدوارم که درست بشه. موفق باشین.

                      دیدگاه


                        #12
                        پاسخ : pcf8563

                        :applause: :applause: :applause: :applause:
                        بالاخره ساعتم با کمک _e_ عزیز جواب داد اینم برنامه جواب گرفته شده :

                        $regfile = "m32def.dat"

                        Config Lcd = 16 * 2
                        $crystal = 8000000
                        Config Portc.1 = Output
                        Portc.1 = 0
                        Config Lcd = 16 * 2
                        Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0
                        Cls

                        Declare Sub Init_clkic

                        Declare Sub Start_clkic

                        Declare Sub Read_clkic


                        Const Clkic_w = &HA2

                        Const Clkic_r = &HA3

                        Config Sda = Porta.0

                        Config Scl = Porta.1

                        Config I2cdelay = 5

                        Dim Address As Byte
                        Dim Data_i2c As Byte
                        Dim S As Byte
                        Dim M As Byte
                        Dim H As Byte
                        Dim Day As Byte
                        Dim Month As Byte
                        Dim Year As Byte
                        Dim Weekdays As Byte


                        I2cinit
                        Config I2cdelay = 5
                        Call Init_clkic

                        Call Start_clkic

                        Do

                        Call Read_clkic

                        Home
                        Lcd Bcd(h) : Lcd ":" : Lcd Bcd(m) : Lcd ":" : Lcd Bcd(s)
                        Locate 2 , 5
                        Lcd Bcd(year) : Lcd ":" : Lcd Bcd(month) : Lcd ":" : Lcd Bcd(day)
                        Waitms 100
                        Loop
                        End
                        '**********************
                        Sub Init_clkic
                        '>>>CONTROL/STATUSE1
                        Address = 0
                        I2cstart
                        I2cwbyte Clkic_w
                        I2cwbyte Address
                        Data_i2c = 0
                        I2cwbyte Data_i2c
                        I2cstop

                        Address = 01
                        I2cstart
                        I2cwbyte Clkic_w
                        I2cwbyte Address
                        '>>>CONTROL/STATUSE2
                        Data_i2c = 0
                        I2cwbyte Data_i2c
                        I2cstop
                        '>>>CLKOUT FREQUENCY
                        Address = &H0D
                        I2cstart
                        I2cwbyte Clkic_w
                        I2cwbyte Address
                        Data_i2c = 128
                        I2cwbyte Data_i2c
                        I2cstop
                        '>>>TIMER CONTROL
                        Address = &H0E
                        I2cstart
                        I2cwbyte Clkic_w
                        I2cwbyte Address
                        Data_i2c = 130
                        I2cwbyte Data_i2c
                        I2cstop

                        End Sub


                        '*************************
                        Sub Start_clkic


                        S = 21
                        M = 59
                        H = 23
                        Day = 29
                        Month = 10
                        Year = 08
                        Weekdays = 6
                        S = Makebcd(s)
                        M = Makebcd(m)
                        H = Makebcd(h)
                        Day = Makebcd(day)
                        Month = Makebcd(month)
                        Year = Makebcd(year)



                        Address = 2
                        I2cstart
                        I2cwbyte Clkic_w
                        I2cwbyte Address
                        I2cwbyte S
                        I2cwbyte M
                        I2cwbyte H
                        I2cwbyte Day
                        I2cwbyte Weekdays
                        I2cwbyte Month
                        I2cwbyte Year
                        I2cstop


                        End Sub
                        '****************************
                        Sub Read_clkic
                        Address = 2
                        I2cstart
                        I2cwbyte Clkic_w
                        I2cwbyte Address
                        I2cstart
                        I2cwbyte Clkic_r

                        I2crbyte S , Ack

                        I2crbyte M , Ack

                        I2crbyte H , Ack

                        I2crbyte Day , Ack


                        I2crbyte Weekdays , Ack

                        I2crbyte Month , Ack

                        I2crbyte Year , Nack
                        I2cstop
                        S = S And &B01111111
                        M = M And &B01111111
                        H = H And &B00111111
                        Day = Day And &B00111111
                        Month = Month And &B00011111
                        End Sub
                        چه دعایی کنمت بهترازاین ،که کنار پسر فاطمه هنگام اذان ، سحر جمعه ای پشت دیوار بقیع قامتت قد بکشد در دو رکعت به نمازی که نثار حرم و گنبد برپا شده ی حضرت زهرا بکنی ... انشاالله

                        دیدگاه

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