اطلاعیه

Collapse
No announcement yet.

برنامه ساعت خیلی دقیق

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

    برنامه ساعت خیلی دقیق

    این برنامه هر 60 روز 0.25 ثانیه Delay داره!

    میشه در مورد این برنامه یه توضیح خط به خط بدین

    البته خط 4 و 5
    از همه مهمتره

    "ضمناً من کاربر صفر کیلومترم به بزرگی خودتون ببخشید"

    $crystal = 4000000
    $regfile = "m16def.dat"
    Dim S As Byte , M As Byte
    Config Timer1 = Timer , Prescale = 64 , Clear Timer = 1 , Compare A = Disconnect
    Compare1a = &HF424
    Stop Timer1

    Enable Interrupts
    Enable Oc1a
    On Oc1a 1_sec
    Start Timer1


    Do
    Loop

    End 'end program

    1_sec:
    'program will go to this routine every one sec.
    'you can write/insert your own code here to obtain a real Time Clock or other purpose.

    Incr S
    If S = 60 Then
    S = 0
    Incr M
    End If
    Cls
    Lcd M ; ":" ; S

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

    #2
    پاسخ : برنامه ساعت خیلی دقیق

    .... برای ساعت دقیق باید از آی سی های RTC استفاده کنی. از RTC داخلی خود AVR هم می تونی استفاده کنی ولی باید برای مدارت باطری بک پ بذاری

    **ویرایش توسط تیم نظارت
    از چارلی چاپلین پرسیدند خوشبخنی چیست ؟
    گفت : فاصله این بد بختی تا بد بختی دیگر !

    دیدگاه


      #3
      پاسخ : برنامه ساعت خیلی دقیق

      قبل از هرچیز بگم که من خودم از همه تازه کار ها تازه کارترم اصلا مگه تو الکترونیک کسی می تونه ادعا کنه که آخر الکترونیکه . شب می خوابی صبح که پا میشی می بینی مطالب در زینه الکترونیک 2-3 برابر شده :eek: پس همه تازه کاریم خودمون را هم گول نزنیم :cry2:
      به نظر من برای ساعت دقیق اگر بخواهیم نرم افزاری کار کنید تنها راه آن استفاده از خاصیت capture است که در 8051 این کار را با تایمر 2 می توانید انجام دهید و در pic با ماژول ccp آن(با avr کار نکردم) با این کار اگر کمی در برنامه نویسی دقت کنید می توانید که خطا را به خطای کریستال محدود کنید.چون عملیات بار گذاری مجدد تایمر به صورت سخت افزاری صورت می گیرد.
      موفق باشید
      ر کسي را بهر کاري در جهان آورده اند
      کار ما عشق است و ما را بهر آن آورده اند

      دیدگاه


        #4
        پاسخ : برنامه ساعت خیلی دقیق

        سلام
        به نظر من استفاده از میکرو به بای ساعت همین مسائلی که گفته شد به نبال داره اتفاقا من خودم چند وقت سرکار این قضیه بودم وفکر کنم علت اصلی برمیگرده به همون زمانهای بار گزاری مجدد و تا خیرهایی که ممکنه به علت بروز وقفه های دیگری در برنامه پیش بیاد .



        $crystal = 4000000
        $regfile = "m16def.dat"
        Dim S As Byte , m As Byte
        Config Timer1 = Timer , Prescale = 64 , Clear Timer = 1 , Compare A = Disconnect
        Compare1a = &HF424
        Stop Timer1

        Enable Interrupts
        Enable Oc1a
        On Oc1a 1_sec
        Start Timer1


        Do
        Loop

        End 'end program

        1_sec:
        'program will go to this routine every one sec.
        'you can write/insert your own code here to obtain a real Time Clock or other purpose.
        Incr S
        If S = 60 Then
        S = 0
        Incr M
        End If
        Cls
        Lcd M ; ":" ; S

        Return





        خوب در مورد برنامه
        اولا فکرکنم خط اول و دوم رو عوض کن
        خوب اگه اینکارو بکنی در اولین خط میکروتو معرفی کردیکه AT16
        در سطر دوم اعلام کردی که با کریستال بیرونی عمل کنه ( این کارو باید با فیوز بیت هم اعلام کنی)
        در خط سوم متغیرهای S و M رو به برنامه معرفی کردی و گفتی از نوع بایت هستند ( حداکثر تا 255 )
        در خط چهارم شما تایمر یک رو در حالت Compare قرار داده اید ( مد مقایسه ای ) و فرکانس کاری اونو 4000000 تقسیم بر 64 قرار داده اید ( فرکانس کریستال تقسیم بر مقدار Prescale میشه مقدار فرکانس کاری تایمر :angry:نه برنامه)
        Clear Timer با انخاب این گزینه شما به میکرو اعلام کردید محتوای تایمر در زمان تطابق برابر صفر بشه.

        Compare A = Disconnect با این دستور شما در زمان تطبیق ارتباط پایه OC1 با تایمر قطع شود
        و شما مقدار پیش فرض .Compare1a = &HF424 رو برای شروع کار تایمر در نظر گرفتی
        وتایمر رو متوقف کردی
        و بعد وقفه ها رو فعال کردی وگفتی که وقفه Oc1a تایمر یک رو فعال کن وبعد
        هرگاه این وقفه اتفاق افتاد برو به زیر برنامه 1_sec
        وبعد تایمرو روشن کردی
        وبرنامه رو در یک حلقه گرفتار کردی
        ودر اون زیر برنامه هم با شمارش سانیه ها و دقیقه ها و بعد مقایسه اونا با عدد 60

        حساب من اینجوری بوده فرکانس کاری تایمر برابر با 4000000 تقسیم بر 64 که میشه 62500 هرتز پس زمان هر شمارش برای رجیستر تایمر میشه 1 تقسیم بر 62500 که میشه 16 میکرو ثانیه
        حالا اگه تایمر شما تا مقدار F424 h بشماره درسته زمان میشه 62500 ضربدر 16 میکروثانیه که میشه 1 ثانیه که البته تقریبا نزدیکه
        اما در عمل زمانهای عملیات کاری رو هم در نظر بگیر فکر کنم برای اجرای هر دستور یک میکرو پانیه اگه مقدار این زمانو از دیتا شیت پیدا کنی و اونو در تعداد تکرار حلقه حات محاسبه کنی یقینا مشگلت تا حد زیادی حل میشه اگه شد به منم اطلاع بده ممنون. :bye
        بعدا یه جمله قشنگ مینویسم

        دیدگاه


          #5
          پاسخ : برنامه ساعت خیلی دقیق

          توضیحات کامله،اما چند چیزی که من حدس می زنمآ‌:
          نوشته اصلی توسط پروفسور
          اولا فکرکنم خط اول و دوم رو عوض کن
          برای بیسکام فرقی نداره کجا تعریف کنین با چی کار می کنین ... اول اینها رو پیدا میکنه،ست میکنه بعد .... می تونی به جای این چند خط از منوی option->compiler اینکارو انجام بدی،اما باید حواست باشه هر بار که دوباره برنامه رو باز میکنی باید دوباره این منو رو چک کنی تا ببینی با چیز دیگه عوض نشده باشه !!آ‌ پس نوشتن همین 2 خط به صرفه تره !
          نوشته اصلی توسط پروفسور
          در سطر دوم اعلام کردی که با کریستال بیرونی عمل کنه ( این کارو باید با فیوز بیت هم اعلام کنی)
          این دستور فقط فرکانس کریستال رو برای برنامه به صورت پیشفرض اعلام میکنه و برای اینکه به میکرو بگیم با کریستال بیرونی کار کنه فقط باید فیوز بیتها رو عوض کنین،این تعین فرکانس برای اینه که بعضی کارها نیاز به زمان بندی دقیق دارن،مثلا wait 1 باید برای محاسباتش بدونه با چه فرکانسی کار میکنه و دستوراتی دیگه که ... (اینجا احتمال داره از پورت سریال استفاده کنی یا ... )

          نوشته اصلی توسط پروفسور
          اما در عمل زمانهای عملیات کاری رو هم در نظر بگیر فکر کنم برای اجرای هر دستور یک میکرو پانیه اگه مقدار این زمانو از دیتا شیت پیدا کنی و اونو در تعداد تکرار حلقه حات محاسبه کنی یقینا مشگلت تا حد زیادی حل میشه
          توو Avr به ازای هر پالس یک ذستور اجرا می شه به جز دستوراتی که نیاز به تغییر ادرس نشانگر اصلی برنامه دارن،مثل دستورات پرش و ... که توو 2 پالس اجرا میشن ... پس دستورات اینجا هر 1/4000000 ثانیه اجرا میشن. اما چون واحد شمارنده تایمر ها به عنوان یک سخت افزار جنبی هستن،و خودشون مستقل در کنار عملکرد اصلی پردازنده،عمل شمارش رو انجام می دن و چون تمام این کارهای شمردن فرکانس و مقایسه و تقسیم بر 64 و ... برای تایمر،به صورت سخت افزاری انجام میشه،اصولا دقت این تایمر فقط به دقت کریستالی که به کار می بری بستگی داره و خود دستورات برنامه روی کار اصلی اثر نمی زارن،با توجه به اینکه روتین تایمر هم هر 1 ثانیه یک بار صدا زده می شه و کل دستوراتش خیلی خیلی قبل از اتمام این یک ثانیه تموم شدن،پس جای هیچ نگرانی برای بقیه موارد نیست ...

          دیدگاه


            #6
            پاسخ : برنامه ساعت خیلی دقیق

            سلام دوست عزیز همیشه حق با شماست
            اما من از برنامه دوستمون غلط گیری نکردم فقط گفتم روال کار اینه ( مثل اینکه از در که وارد شدی اول دوسه ساعت حرف بزنی بعد بگی سلام علیکم :mrgreen: بعد بگی هر کله پوکی میتونه بفهمه که من سلام کردم و فقط باید اونو چند سطر بالاببره :eek
            پس شما عقیده داری که اجرای فرامین فوق هیچگونه زمانی نیاز نداره و همگی از قبل پیشبینی شده وآمادست اینم خیلی خوبه
            در مورد برنامه ریزی فیوز بیت CKopt فقط راهنمائی برای دوستمون که گفته بود اطلاعاتم کمه کردم نه برای دانشمندی چون شما و از این بابت عذر خواهی میکنم :cry2:
            اما شما با این اطلاعات بالا چرا به دوستمن کمک نمیکنی و دنبال یکی میگردی که کچشو بگیری بابا من سی ساله که دیپلم گرفتم واون موقه اثری از میکرو نبوده و مایه چیزای دست پا شکسته از اساتید یاد گرفتیم .
            بعدا یه جمله قشنگ مینویسم

            دیدگاه


              #7
              پاسخ : برنامه ساعت خیلی دقیق

              سلام پروفسور جان
              حال شما خوبه ؟
              من که بعید می دونم!!!!

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

              بعدم اینکه منم یه مدتی که راه می رفتم،اگه توو خونه ای دعوا میشد،میگفتم اینا الکی با هم دعوا می کنن تا به من فحش بدن،بگزریم...
              خدا یه پولی به من بده،یه عقلی به من بده، گو ... ...بای مردم! (چرا دعای خودمو برای دگیران حروم کنم ؟ اگه قراره مستجاب شه براز خودم ...)

              دیدگاه


                #8
                پاسخ : برنامه ساعت خیلی دقیق

                دوستان خواهش میکنم که به هم دیگه تیکه نندازین و احترام تمام اعضا رو حفظ کنید.
                پست های بیمورد قبلی پاک شدند .

                دیدگاه


                  #9
                  پاسخ : برنامه ساعت خیلی دقیق

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


                  مدتها بود که دنبال دوستانی مثل شما میگشتم تا با اونا اطلاعاتم رو کامل کنم
                  دوست دارم برای هر مشگلی حتی اگر زایده خیال باشه راهی پیدا کنیم

                  ما عاشق رند وعالم سوزیم با ما منشین وگرنه بدنام شوی
                  بعدا یه جمله قشنگ مینویسم

                  دیدگاه


                    #10
                    پاسخ : برنامه ساعت خیلی دقیق

                    سلام
                    منم از نوشته شما ایراد نگرفتم! نوشتم که توضیحات تکمیله،فقط 2-3 نکته تکمیلی تر که به نظرم میومد رو گفتم. معمولا اسم مردم کم یادم میمونه!آ‌اینه که وقتی نوشتین : شما همیشه درست میگی!آ‌ تازه یادم افتاد توو یکی دیگه از تاپیک ها هم جوابم طوری شده بود که بازم فکر کرده بودین اونجا هم می خوام با شما کل کل کنم!!!!

                    یه مدته سرم شلوغه،کمتر جواب می دم،اما سعی میکنم جایی که حس کنم نیازه، یه توضیحاتی بزارم،مثلا مدتهاست که دیدم اکثرا به دقت ساعت با میکرو شک دارن،در حالی که دقت این ساعتها خیلی خیلی زیاده!آ‌ نمی گم ساعت اتمی هستن!آ‌اما خوب من یکیش رو ساخته بودم،6ماهه کامل روشن بود،روزه اول با اخبار ساعت 2 رادیو تنظیم کرده بودم،آخر 6 ماه هم خطا در حده زیره 1 ثانیه داشت!!!!

                    یه مدت هم هست یه ذره عصبی شدم! دیگه راحت هر چی میاد دهنم میگم!آ‌ من معذرت می خوام

                    من هر جا ببینم جوابی بلدم می گم،اما اولا چیزه زیادی بلد نیستم،ثانیا امیدوارم مردم جواب هامو به خودشون نگیرن :cry:

                    دیدگاه


                      #11
                      پاسخ : برنامه ساعت خیلی دقیق

                      مرسی که جواب میدی بله منم قبول دارم سرعت میکرو های ATmega خیلی بالاست وبنابراین دقت اونا در زمان گیری خیلی زیاده اما من تا حالا روی ساعت اینقدر دقیق نشده بودم و ایناروفقط حساب کردم به نظر شما ایراد کار دوستمون کجاست :bye
                      بعدا یه جمله قشنگ مینویسم

                      دیدگاه


                        #12
                        پاسخ : برنامه ساعت خیلی دقیق

                        هر 8 ماه یک ثانیه خطا!آ‌ زیاده :cry: ؟

                        من توو 6 ماه 1 ثانیه خطا داشتم!آ‌!آ‌ من که حدس می زنم اینها دیگه عدم دقت کریستال و وابستگیه اون به دمای محیط و خیلی پارامتر های دیگه هستش !آ‌ ولی قبول کنین خود همین دقت هم خیلی زیاده!آ‌

                        دیدگاه


                          #13
                          پاسخ : برنامه ساعت خیلی دقیق

                          سلام نه دقت خیلی زیادیه البته برای امروز
                          اما به نظر شما 4000000 تقسیم بر 64 میشه فرکانس کاری میکرو وقتی فرکانس بالا میره بعد اونقدر تقسیم میشه تا به مرز ثانیه برسه در حقیقت خطای اون خیلی کوچیک میشه 1 تقسیم بر چهار میلیون یعنی اگه کریستال یک هرتز خطا داشته باشه این خطا میشه 1 تقسیم بر چهار میلیون.
                          اما درمورد زمان عملیات شما حتما میدونی حتی تغییر وضعیت یک پایه ( موس فت یا سریعترین قطعه ها نیز زمان لازم داره چطور ممکنه از زمان یک عملیات چشم پوشی کرد. :bye اونم با چندین تکرار در ثانیه.
                          موفق باشی اگه ایده ای داری مارو بی نسیب نکن. :bye
                          بعدا یه جمله قشنگ مینویسم

                          دیدگاه


                            #14
                            پاسخ : برنامه ساعت خیلی دقیق

                            هر 60 روز 0.25 ثانیه خطا یعنی هر 240 روز 1 ثاینه

                            240 روز =( 60 ثانیه در دقیقه *60دقیقه در ساعت *24ساعت روز *240 )=20736000 ثانیه فکر کنم(اگه حواس پرتیم بزاره جمع و تفرق ها رو درست انجام بدم!

                            کریستال 4 مگ یعنی 4000000 پالس در ثانیه
                            یعنی تعداد پالس در 240 روز :
                            20736000*4000000=82944000000000 پالس !
                            1ثانیه خطا یعنی 4000000 پالس خطا!
                            پس خطای ما اینجا :
                            4000000/82944000000000 =4.8225308641975308641975308641975e-8

                            کدوم کریستال ایده الی رو میشناسی که معادل فرکانس رووش کار کنه ؟ کدوم سیستمی رو میشناسی که توو تغییراته محیطی و دما و ... ثابت بمونه ؟ کدوم ...

                            ساعت من که 1ثانیه توو 6 ماه خطا داشت با 89c2051 و کریستال 11.0592مگ بود!آ‌ اینجام 4000000 پالس فقط وقتی به شمارنده داده میشه تقسیم بر 64 میشه نه وقتی سیستم داره پردازش انجام می ده !آ‌ اگه توو گیتها تاخیر هست،این تاخیر عمومیه،یعنی به ازای تمام پالسها یک شیفته کلی داریم و فقط مبدا زمان یک ذره جابجا میشه
                            ساعت اتمی که توو ماهواره های GPS هست برای اینکه اونم دقیق نیست و به محیط وابستست برای هر ماهواره 3 عدد در نظر گرفته شده!!آ‌ که خطای هم رو بپوشونن


                            این ساعت داره عین توپ کار می کنه و فقط خطاهای ساخت ساده ای که یک سیستم ساده 3-4 هزار تومنی داره رو داره.
                            من هنوزم از اصرار شما تعجب می کنم!!!!

                            من سعی می کنم ایده نداشته باشم!آ‌فقط فکر کنم ....

                            دیدگاه


                              #15
                              پاسخ : برنامه ساعت خیلی دقیق

                              سلام اشتباه نکن من نگفتم کریستال بیگناه اگه اونجوری حساب کنیم به قول خودتون حتی دمای محیط و ولتاز تغذیه و حتی نوع به نوع میکرو هم مقصره اما دوست ما مساله نرم افزار رو اعلام کرده بود و به نظر من راحترین کار همینه که زمانهای اجرای عملیات رو در نظر بگیریم وخوب مسلما اگه اونو در دمای ثابت با ولتاز خیلی رگوله و بدون نویز و یک کریستال نظامی و یک میکروی نظامی روی برد مدار چاپی متالیزه به کار ببریم یقینا مساله راحتر میشه.
                              شما اگر نیم نگاهی به دیتا شیت ای سی مورد نظر بکنید در صفحه 292 چیزای جالبی در این خصوص هست و زمانها نوشته شده مضاف براینکه در حالت ایده ال که همه شرایط بالا رو محیا کرده باشیم برای اجرای هر دستور در برنامه فوق نیاز به .25/0 میکرو پانیه زمان هست . الته دستورهائی که عملیات انجام میدهند بیشتر از دستورات معمولی.
                              شما برای نوشتن یک متغیر در حافظه غیر فرار نیاز به 10 میلی ثانیه زمان داری اگه صفحات 294 به بعد دیتا شیت رو ببینی متوجه میشی که مقداری از این زمان صرف اجرای عملیات ارتباطی میشه.
                              خوب حالا بریم سر محاسبه زمانها شما برای هرپرش از تایمر( شماردن تایمر مقایسه مقدار تایمر با رجیستر مورد نظر در تایمر و نهایتا وقفه ) کلا یک پالس کاری در نظر بگیری میشه 25/0 میکرو ثانیه در هر ثانیه .
                              برای دستور مقایسه کمیت ثانیه و عملیات صفر کردن تایمر و شروع مجدد هم یک پالس میشه 25/0 میکرو ثانیه
                              جمعا ( البته تقریبی برای محاسبه دقیق وقت میخاد که من ندارم )
                              اما ما فقط میگیم برای همه اینا یک پالس کاری 25/0 میکرو ثانیه
                              در هر ثانیه ما 25/0 میکرو ثانیه بنا بر ادعای کمپانی سازنده خطا خواهیم داشت پس در دقیقه میشه 60 * 25/0 که میشه 15 میکرو ثانیه ودر ساعت میشه 30 * 60 که میشه 900 میکرو ثانیه و در روز میشه 24 * 900 که میشه 21600 میکرو ثانیه ودر ماه میشه 30 * 21600 که میشه
                              68/0 ثانیه که مقدار چشم گیری میشه
                              پس دوستمون احتمالا توی زمان گیری کمی اشتباه کرده. ومن بعید میدونم خطا اینقدر کم بوده باشه. :bye

                              [hr]


                              بعدا یه جمله قشنگ مینویسم

                              دیدگاه

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