اطلاعیه

Collapse
No announcement yet.

ذخیره متغیرها قبل از ریست توسط watchdog

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

    ذخیره متغیرها قبل از ریست توسط watchdog

    سلام.من تو یه مدار که توی یه محیط فوقالعاده نویزی کار میکنه از واچ داگ استفاده کردم.تنها کاری که با میکرو انجام میدم اینه که یه پالس رو خروجی میدم.واسه اینکه میکرو هنگ میکرد از واچ داگ استفاده کردم.وضعیت بهتره اما اشکال کار اینه که هر 20 الی 30 باری که دستگاه خروجی میده یک بار نویز میگیره و وقتی خروجیم فعاله یهو ریست میشه و هنوز زمان غیر فعال شدن نرسیده میکرو ریست میشه.حالا میخوام یه جوری متغیر زمانمو که زمان سپری شده از فعال بودن خروجیه رو اندازه بگیرم و سیو کنم تا بعد از ریست بلافاصله بقیه زمان رو ادامه بدم و خروجیمو فعال نگه دارم .
    حالا سئوال اینه که چجوری بعد از ریست میکرو متغیر زمان رو بازیابی کنم؟
    با بسکام کار میکنم.
    پیشاپیش ممنون

    #2
    پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

    اگه منظورتو درست متوجه شده باشم شما سه تا راه دارید:
    -استفاده از ایپرام میکرو
    -آی سی ایپرام مثل AT24Cxx
    -استفاده از یه آیسی لچ ساده مثل 74573
    [br /][hr]http://pcenter.ir[hr][br /]

    دیدگاه


      #3
      پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

      ببین میخوام با خود میکرو این کار رو انجام بدم.
      تو بعضی منابع گفته شده که بعد از ریست میکرو توسط واچ داگ مقدار متغیرها که توی sram سیو میشن باقی میمونن و شما قبل از مقدار دهی مجدد به مقادیر میتونی اونا رو بازیابی کنی ولی وقتی بهد از ریست میکرو میام مقادیرو میخونم میبینم که صفرن یعنی sram کاملا پاک شده!
      چیکار میشه کرد؟
      از طرفی من نمیدونم میکرو کی میخواد ریست بشه که بخوام مقدار لحظه ای متغیری رو که شما میگید توی eeprom ذخیره کنم رو سیو کنم. و تعتدد دفعات استفاده از حافظه eeprom هم محدوده و نمیشه تو یک حلقه بندازی مدام مقدارشو سیو کنی.100000 بار که بنویسی تو یک خونش دیگه غیر قابل استفاده میشه.

      دیدگاه


        #4
        پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

        دوست عزیز از چه نوعی از میکرو ها استفاده می کنید ؟ معمولاً برای کارهای صنعتی و پرنویز از pic استفاده میشه . البته حتماً کریستال خارجی استفاده بشه .
        خــــداونـدا :
        دســــتانم خــــــالي اند و دلــــــم غـــرق در آرزوها
        يا به قدرت بي کرانت دستانم را توانا گردان يا دلم را
        از آرزوهاي دســـــت نيافتــــني خالي کن . . . آمين

        دیدگاه


          #5
          پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

          avr mega16 استفاده میکنم.قبول دارم که pic خیلی بهتره اما چون منابعش محدوده و از طرفی پروگرامرشم فعلا تو مشهد موجود نیست کار با pic رو نتونستم شروع کنم.
          حالا با سیستم فعلی میخوام هر جورررررررری که هست درستش کنم!
          کریستال خارجی هم گذاشتم.

          دیدگاه


            #6
            پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

            این چیزی که میگمو خود اتمال هم گفته که میشه ولی پیاده سازیشو تو بسکام نمیدونم
            اینم لینک pdf اش!
            www.atmel.com/Images/doc2551.pdf

            دیدگاه


              #7
              پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

              نوشته اصلی توسط hamedhamidi
              ببین میخوام با خود میکرو این کار رو انجام بدم.
              تو بعضی منابع گفته شده که بعد از ریست میکرو توسط واچ داگ مقدار متغیرها که توی sram سیو میشن باقی میمونن و شما قبل از مقدار دهی مجدد به مقادیر میتونی اونا رو بازیابی کنی ولی وقتی بهد از ریست میکرو میام مقادیرو میخونم میبینم که صفرن یعنی sram کاملا پاک شده!
              چیکار میشه کرد؟
              منبعی که این حرف رو زده بذار اینجا
              توی هلپ بسکام توضیح کاملی داده:



              After the CONFIG WATCHDOG statement, the watchdog timer is disabled. You can also use CONFIG WATCHDOG to change the time out value. This will stop the watchdog timer and load the new value.

              After a CONFIG WATCHDOG, you always need to start the Watchdog with the START WATCHDOG statement.



              Most new AVR chips have an MCUSR register that contains some flags. One of the flags is the WDRF bit. This bit is set when the chip was reset by a Watchdog overflow. The CONFIG WATCHDOG will clear this bit, providing that the register and bit is available in the micro.

              When it is important to examine at startup if the micro was reset by a Watchdog overflow, you need to examine this MCUSR.WDRF flag before you use CONFIG WATCHDOG, since that will clear the flag.



              For chips that have an enhanced WD timer, the WD timer is cleared as part of the chip initialize procedure. This because otherwise the WD timer will only work once. If it is important that you know the cause of the reset, you can read the register R0 before you run other code.



              The sample below demonstrates how to store the WDRF bit if you need it, and print it later.


              بعد از اینکه میکرو رو تایمر نگهبان رست کرد میتونی بیت چهارم(WDRF) از رجیستر R0 رو بخونی (با دستور (Peek(0 ) که اگه یک باشه میفهمی که میکرو رو تایمر نگهبان رست کرده یعنی میکرو هنگ کرده بودش به غیر از این ننوشته که متغییر ها ذخیره میشن!
              پس شما باید هر وقت که لازم هست مقداری رو در یکی از سه حافظه ای که گفتم بریزید و در موقع بازنشانی توسط روشی که گفتم WDRF رو بررسی کنید در صورت یک بودن یعنی رست شده پس باید آخرین عددی که قبل از رست شدن ذخیره شده رو بردارید و نسبت به آن دستورات لازم رو انجام بدید

              نوشته اصلی توسط hamedhamidi
              از طرفی من نمیدونم میکرو کی میخواد ریست بشه که بخوام مقدار لحظه ای متغیری رو که شما میگید توی eeprom ذخیره کنم رو سیو کنم. و تعتدد دفعات استفاده از حافظه eeprom هم محدوده و نمیشه تو یک حلقه بندازی مدام مقدارشو سیو کنی.100000 بار که بنویسی تو یک خونش دیگه غیر قابل استفاده میشه.
              حافظه لچ رو برای همین مشکلی که پیش می اومد معرفی کردم هم ارزونتره هم کار باهاش راحته و هم میتونی همیشه ازش استفاده کنی جای زیادی هم تو مدار نمیگیره
              [br /][hr]http://pcenter.ir[hr][br /]

              دیدگاه


                #8
                پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

                بهتره به لحاظ سخت افزاری مشکل حل کنین
                سعی کنین برد مناسبی برای محیط نویز پذیر طراحی کنین
                از مجله نویز هم میتونین کمک بگیرین. تو یکی از شماره ها روش های مختلف جلوگیری از نویز توضیح داده
                [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

                دیدگاه


                  #9
                  پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

                  اگر از GCC استفاده کنی راه حلش تعریف متغیرت به صورت زیر هست
                  کد:
                  volatile int bug __attribute__ ((section(".noinit")));
                  دیگه به طور اتوماتیک بعد از ریست متغیرت صفر نمیشه

                  دیدگاه


                    #10
                    پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

                    منبعش همون application note شرکت انمل که گذاشتمه.
                    تمام کارای سخت افزاری ممکن رو انجام دادم.
                    بدون تعارف هم بگم تا حالا مدارات زیادی ساختم.این اولین باریه که به همچین مشکلی با avr بر خوردم.
                    البته از حق نباید گذشت میکرو زحمت خودشو داره میکشه محیط فوق الهاهده افتضاحه طوری که مدارای کامپکت و plc هاشونم اونجا یکسره دچار مشکل میشه ولی من اصرار دارم با همین avr و همین شرایط جواب بگیرم.
                    از بحث اصلی منحرف نشیم بچه ها.سوای این مشکل فعلی با توجه به این pdf ای که گذاشتم این کار شدنیه و من این قضیه رو فقط برای این مدار خاص نمیخوام .مطمئنم که بدرد همه ما هایی که با میکرو واقعا داریم کار میکنیم میخوره.

                    دیدگاه


                      #11
                      پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

                      تو بسکام یا کد ویژن چی؟
                      ممنون از پاسخت

                      دیدگاه


                        #12
                        پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

                        IC های رم سریال که مشابه سری AT24c.. باشن نداریم که بشه با سرعت بالا تمام متغیر هامو توش مرحله به مرحله ذخیره کنم؟

                        دیدگاه


                          #13
                          پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

                          یک کم روی خودتون کارکنید، بسکام ، کدویژن و ... باهاشون کار حرفه ای نمیشه کرد، همیشه وابسته به اونا هستی، راستی خود Atmel studio هم هستش GCC هست و میتونی توی اون استفاده کنی.

                          دیدگاه


                            #14
                            پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

                            هدف اینه که تو کمترین زمان یه پروژه رو انجام بدیم.
                            اگه قرار باشه یه زبان دیگه رو یاد بگیرم اصلا و ابدا سراغ میکروکنترلر های 8 بیتی و اونم avr به هیچ وجه نمیرم.حداقل حداقلش اینه که میرم سراغ pic. اگرم سئوالی پرسیده میشه واسه اینه که زودتر با مشورت به جواب برسیم.
                            به نظر من هم این بحث ها که c بهتره basic یا ... واقعا بدون تعارف بگم بحث های مسخره ای یه .هیچ کس به کامپایلر شما نیگا نمیکنه.همه به این توجه دارن که تو کمترین زمان بهترین نتیجه رو بگیرن.

                            دیدگاه


                              #15
                              پاسخ : ذخیره متغیرها قبل از ریست توسط watchdog

                              نوشته اصلی توسط hamedhamidi
                              IC های رم سریال که مشابه سری AT24c.. باشن نداریم که بشه با سرعت بالا تمام متغیر هامو توش مرحله به مرحله ذخیره کنم؟
                              مگه چند بایت رو لازم به ذخیره کردن داری؟
                              توی هر لچ میتونی 8 بیت یا همون یه بایت رو ذخیره کنی و با توجه با تفاصیر شما باید کافی باشه کافی نیود میتونی دوتا بذاری و یا از شیفت رجیستر لچ دار مانند 74595 هرچندتا که لازم داشتی استفاده کنی از حافظه ها برای ذخیره داده های یزرگتر استفاده میکنن که تو مورد شما ظاهرا نیازی بهشون نیست و درضمن با توجه به نویز بالای محیط که اظهار کردید به نظر نمی آد بشه ازشون بهره برد!
                              [br /][hr]http://pcenter.ir[hr][br /]

                              دیدگاه

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