اطلاعیه

Collapse
No announcement yet.

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

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

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

    نوشته اصلی توسط hamedhamidi
    IC های رم سریال که مشابه سری AT24c.. باشن نداریم که بشه با سرعت بالا تمام متغیر هامو توش مرحله به مرحله ذخیره کنم؟
    چند بایت باید ذخیره کنی؟
    این سری تنوع زیادی داره و همچنین تعدادی پایه آدرس خارجی هم داره که میشه چند آی سی بطور متوالی بهم متصل کرد و از ظرفیت بیشتری استفاده کرد
    [glow=red,2,300]تاپیک های ایجاد شده[/glow]

    دیدگاه


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

      نوشته اصلی توسط ADMlN
      چند بایت باید ذخیره کنی؟
      این سری تنوع زیادی داره و همچنین تعدادی پایه آدرس خارجی هم داره که میشه چند آی سی بطور متوالی بهم متصل کرد و از ظرفیت بیشتری استفاده کرد
      تقریبا 10 بایت.
      ممنون از همکاری همه دوستان.واقعا ممنونم

      دیدگاه


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

        سلام

        با توجه به اینکه نمیخواین سخت افزارتون رو عوض کنین بهترین کاری که میشه انجام داد اطمینان حاصل کردن از تغذیه و استفاده از میکروی با برند مطمئن تره
        دوست عزیز به نظر من نیاز به eprom یا هیچ سخت افزار خارجی نیست اطلاعات شما تو ram باقی میمونه
        تقریبا تنها چیزی که باعث از بین رفتن داده در حافظه ram میشه افت شدید یا قطع تغذیه میکرو هستش!
        وقتی میکرو ریست میشه (با صفر کردن پایه ریست یا wdog ) این عمل به خودیه خود رم رو پاک نمیکنه.
        چیزی که رم رو موقع ریست پاک میکنه نرم افزاره یعنی تک تک متغیرهایی که شما تو برنامه تعریف کردین به صورت خودکار (توسط کامپایلر) با صفر مقدار دهی میشن.
        تا جایی که من اطلاع دارم تو همه کامپایلر ها گزینه ای برای غیر فعال کردن مقدار دهی اولیه وجود داره

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

        دیدگاه


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

          در ضمن اینم باید اضافه کرد که متغییر شما حتما باید از نوع سراسری باشه
          [glow=red,2,300]تاپیک های ایجاد شده[/glow]

          دیدگاه


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

            نوشته اصلی توسط majid sh
            دوست عزیز به نظر من نیاز به eprom یا هیچ سخت افزار خارجی نیست اطلاعات شما تو ram باقی میمونه
            تقریبا تنها چیزی که باعث از بین رفتن داده در حافظه ram میشه افت شدید یا قطع تغذیه میکرو هستش!
            وقتی میکرو ریست میشه (با صفر کردن پایه ریست یا wdog ) این عمل به خودیه خود رم رو پاک نمیکنه.
            چیزی که رم رو موقع ریست پاک میکنه نرم افزاره یعنی تک تک متغیرهایی که شما تو برنامه تعریف کردین به صورت خودکار (توسط کامپایلر) با صفر مقدار دهی میشن.
            تا جایی که من اطلاع دارم تو همه کامپایلر ها گزینه ای برای غیر فعال کردن مقدار دهی اولیه وجود داره
            منم انتظار چنین حالتی رو دارم ولی تست های من اینو نشون نمیده توی هلپ بسکام هم چنین چیزی رو ندیدم برای همین احتمال میدم توی بسکام چنین کاری امکان پذیر نیست!

            من توی بسکام تست کردم مثلا توی آدرس 100 حافظه SRAM مقدار 5 نوشته میشود
            پس از نوشتن ، مقدار آن آدرس خوانده میشود و از درستی عدد نوشته شده مطمئن میشیم
            سپس Watchdog رو فعال میکنیم پس از رست شدن میکرو بدون تعریف هیچ نوع متغیری مقدار حافظه در آدرس 100 خوانده میشه که اینبار صفر رو برمیگردونه یعنی حافظه رست شده در شبیه ساز خود بسکام :
            همونطور که میبینید عدد 5 رو در آدرس 100 نوشته ایم پس از رست شدن کل حافظه FF میگیره و سپس کل حافظه 00 میشه
            نمونه کدی که براش نوشتم که در تست شبیه ساز خود بسکام و پروتیوس همین نتیجه رو داد: oo:
            کد:
            Cls : Lcd "Add(100)=" ; Inp(100)
              Wait 1
            
             Out 100 , 5
             Wait 1
            
            Cls : Lcd "Add(100)=" ; Inp(100)
            
             Start Watchdog
              Wait 10
            [br /][hr]http://pcenter.ir[hr][br /]

            دیدگاه


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

              منم دقیقا همین کاری رو که adelavr110 جان انجام داده رو انجام دادم تو بسکام و نتیجه همین بود که اطلاعات رم باقی نمیمونه.ولی توی همون pdf ای که گذاشتم همین طور که دوستان هم اشاره کردن باید اطلاعات بعد ریست حفظ بشه.
              حتی توی همون pdf در مورد اینکه چطور مطمئن بشید که داده هاتون بعد ریست حفظ شده یا نه هم توضیحات داده و گفته که چکار کنید که بفهمید داده های نوع long که چهار بایت هستند امکان اینکه وسط نوشتن یکی از این 4 بایت میکرو ریست شده باشه و داده خراب شده باشه زیاده و چکار کنید که بفهمید داده سالم مونده.
              منم گزینه ای تو بسکام ندیدم واسه این مورد که اطلاعات رو بشه بعد از ریست حفظ کرد و over write نشن!

              دیدگاه


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


                در مورد بسکام احتمالا حق با شماست. :redface:

                در کدویژن در قسمت پیکربندی پروژه میشه اینکار رو انجام داد:


                دیدگاه


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

                  بالاخره پیداش کردم !
                  توسط دستور زیر در بسکام پاک شدن حافظه رم در زمان استارت پ انجام نمیشه:
                  کد:
                  $noramclear
                  [br /][hr]http://pcenter.ir[hr][br /]

                  دیدگاه


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

                    :applause: :applause: :applause:

                    دیدگاه


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

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

                      دیدگاه


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

                        رجیستر GIFR مربوط به پرچم وقفه های خارجی هست که بیت ششم اون مال INT2 و هفتم مال INT0 و هشتم مال INT1 هستش این بیتها به صورت RW هستش و میتونی پاکشون کنی
                        [br /][hr]http://pcenter.ir[hr][br /]

                        دیدگاه

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