اطلاعیه

Collapse
No announcement yet.

ریست نمودن میکرو توسط کد در هنگام نیاز

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

    ریست نمودن میکرو توسط کد در هنگام نیاز

    سلام خدمت اساتید و دوستان گرامی
    در جایی از برنامه بعد از اینکه تنظیمات رو در eeprom ذخیره می کنم نیاز دارم که میکروکنترلر ریست شود .
    آیا دستوری در c هست که بتونم با اجرای اون میکرو رو ریست کنم ؟
    خواستم با راه اندازی WDT در همون لحظه مورد نیاز این کار رو انجام بدم ولی نشد .

    اینم کد :
    کد:
    		LCD.LCDclr();
    		LCD.LCDGotoXY(0,0);
    		LCD.LCDstring("Save Complete");
    		LCD.LCDGotoXY(0,1);
    		LCD.LCDstring("Auto Restart");
    	  fcpu_delay_ms(1400);
    		
    		WDT.CTRL = 0x03;
    		WDT.WINCTRL = 0x00;
    		
    		fcpu_delay_ms(1400);
    - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

    #2
    پاسخ : ریست نمودن میکرو توسط کد در هنگام نیاز

    نوشته اصلی توسط مرد نامرئی
    سلام خدمت اساتید و دوستان گرامی
    در جایی از برنامه بعد از اینکه تنظیمات رو در eeprom ذخیره می کنم نیاز دارم که میکروکنترلر ریست شود .
    آیا دستوری در c هست که بتونم با اجرای اون میکرو رو ریست کنم ؟
    خواستم با راه اندازی WDT در همون لحظه مورد نیاز این کار رو انجام بدم ولی نشد .

    اینم کد :
    کد:
    		LCD.LCDclr();
    		LCD.LCDGotoXY(0,0);
    		LCD.LCDstring("Save Complete");
    		LCD.LCDGotoXY(0,1);
    		LCD.LCDstring("Auto Restart");
    	  fcpu_delay_ms(1400);
    		
    		WDT.CTRL = 0x03;
    		WDT.WINCTRL = 0x00;
    		
    		fcpu_delay_ms(1400);
    با سلا م دوست عزیز
    من تست نکردم ولی میتونی یه پایه میکرو را بدی به ریست و در موقع دلخواه اونا ریست کنی
    دوربين مدار بسته و دزد گير و رفع مشكلات
    بانك اطلاعاتي سنسورها
    ساخت رقص نور براي شيشه سكوريت مغازه ها
    تعمير لوازم خانگي را اينجا مطرح كنيد
    [move][b] موفقيت بر روي ستون هاي شکست شکل مي گيرد.

    دیدگاه


      #3
      پاسخ : ریست نمودن میکرو توسط کد در هنگام نیاز

      در منوال میکرو به قسمت reset system مراجعه کنید. یکی از منابع ریست، ریست نرم افزاری هست که با یک کردن بیت swrst در رجیستر ctrl آن ریست نرم افزاری اتفاق می افتد. البته باید توجه داشته باشید که این بیت محافظت شده هست و باید ابتدا به CCP مقدار دهی انجام شود.
      گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

      دیدگاه


        #4
        پاسخ : ریست نمودن میکرو توسط کد در هنگام نیاز

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

        نوشته اصلی توسط Hamed Gh
        در منوال میکرو به قسمت reset system مراجعه کنید. یکی از منابع ریست، ریست نرم افزاری هست که با یک کردن بیت swrst در رجیستر ctrl آن ریست نرم افزاری اتفاق می افتد. البته باید توجه داشته باشید که این بیت محافظت شده هست و باید ابتدا به CCP مقدار دهی انجام شود.
        با سپاس دوست من
        راه حلی که دادید بسیار کارآمد بود و با استفاده از کد های زیر در هر زمان که نیاز داشته باشم می تونم میکرو رو ریست کنم .

        کد:
        		CCP = 0xD8;
            RST.CTRL = 0x01;

        - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

        دیدگاه


          #5
          پاسخ : ریست نمودن میکرو توسط کد در هنگام نیاز

          اگر به آدرس شروع برنامه هم پرش کنی . یه جورائی مثل ریست هست
          هميشه به ياد خدا باش !

          دیدگاه


            #6
            پاسخ : ریست نمودن میکرو توسط کد در هنگام نیاز

            نوشته اصلی توسط DDR3
            اگر به آدرس شروع برنامه هم پرش کنی . یه جورائی مثل ریست هست
            در این شرایط رجیسترها به وضعیت اولیه باز نمی گردند (مگر آنکه در ابتدای برنامه مقداردهی شوند) .
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه


              #7
              پاسخ : ریست نمودن میکرو توسط کد در هنگام نیاز

              3 راه دارد:
              1- با یک میکروی جانبی.

              یک پایه آزاد از میکرو اصلی را با یک مقامت 10 کیلو (برای محدود کردن جریان) به یک میکرو جانبی مانند ATtiny13 (که هزینه چندانی نیز ندارد) بدهید.
              پایه RESET میکرو اصلی را 1- بدون مقاومت به یکی از پین های آزاد میکرو جانبی و 2- با یک مقاومت 10 کیلو به VCC یا +5 ولت بدهید.

              شماتیک:


              حالا هر وقت که میکرو اصلی به reset نیاز داشت:

              1. آن پین آزاد که به ATTINY13 داده شده 1 منطقی می شود .
              2. ATTINY13 متوجه شده و پایه متصل به پین reset میکرو اصلی را ، 0 منطقی می کند.
              3. ATTINY13 بعد از 100 میکرو ثانیه آن پایه ای که به پین reset میکرو اصلی متصل است را 1 منطقی میکند.
              4. میکروی اصلی با موفقیت ریست می شود.

              (نکته : پین ریست ، که به میکرو جانبی وصل شده در حالت عادی باید 1 منطقی باشد.)


              2- با استفاده از watchdog.

              بدیهی است که اگر watchdog روی مقدار پایینی تنظیم شود ، به سادگی با انداختن میکرو در یک حلقه بی نهایت میکرو ریست می شود.

              3- با استفاده از کد زیر:

              کد:
              void SlapTheWatchdog(void) 
              { 
                WDTCR=0x18; 
                WDTCR=0x08; 
                #asm("wdr") 
                while(1); 
              }
              البته من از درستی این کد اطمینان ندارم . اساتید بزرگوار ، بی زحمت لطف کنید اگه ایرادی داشت ،بگین.
              [glow=green,2,300][b]بشر ممکن الخطاست
              درخت هرچه پربار تر سر به زیر تر[/glow]

              دیدگاه


                #8
                پاسخ : ریست نمودن میکرو توسط کد در هنگام نیاز

                از همگی دوستان متشکرم . بهترین کار در این حالت استفاده از همون ریست نرم افزاری بود که دوستمون Hamed Gh فرمودند که کد هاش رو هم اضافه نمودم


                کد:
                		CCP = 0xD8;
                    RST.CTRL = 0x01;
                استفاده از این دو کد دقیقا میکرو رو ریست سخت افزاری می کنه و نیازی به استفاده از روش های پیچیده تری نیست . بازم ممنون
                - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

                دیدگاه


                  #9
                  پاسخ : پاسخ : ریست نمودن میکرو توسط کد در هنگام نیاز

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

                  دیدگاه

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