اطلاعیه

Collapse
No announcement yet.

استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

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

    #16
    پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

    نوشته اصلی توسط Mahan.Rafiee
    اینم یه لینک که راهنمای استفاده از واچداگ رو گفته:http://www.engineersgarage.com/embed...timers-circuit
    ممنون از لینک، متاسفانه چیزی از لینک متوجه نشدم، هرچی گشتم کدی ندیدم. اگه ممکنه در مورد راه اندازی و استارت و استاپ کردنش یه مثال کوچولو بزنین یا یه سایت فارسی معرفی کنین، والا منکه هرچی میگردم چیزی پیدا نمیشه، همه سایتها فقط یه توضیح سطحی دادن
    انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

    دیدگاه


      #17
      پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

      نوشته اصلی توسط hamedtaran
      ممنون از لینک، متاسفانه چیزی از لینک متوجه نشدم، هرچی گشتم کدی ندیدم. اگه ممکنه در مورد راه اندازی و استارت و استاپ کردنش یه مثال کوچولو بزنین یا یه سایت فارسی معرفی کنین، والا منکه هرچی میگردم چیزی پیدا نمیشه، همه سایتها فقط یه توضیح سطحی دادن
      [color=blue][b]ای بابا یه ریجیستر میخوای تنظیم کنی دیگه!!!مثال برای چی! :-))
      اینم کد AVR-GCC!:
      [LTR][b][color=blue]// Program to configure watchdog timer in ATmega16 Microcontroller
      #include<avr/io.h>
      #include<util/delay.h>

      int main()
      {
      DDRB=0x03;

      if(bit_is_set(MCUCSR,WDRF))
      {
      PORTB|=(1<<PB1);
      _delay_ms(1000);
      }

      PORTB&=~(1<<PB1);
      WDTCR=0x0F;
      while(1)
      {
      PORTB|=(1<<PB0);
      _delay_ms(400);
      PORTB&=~(1<<PB0);
      _delay_ms(400);
      }
      }
      1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
      من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
      !Electronic On! Programming On
      هوشمندانه سوال بپرسیم!
      http://ir02x6.persiangig.com/logo/eca/tanks_01.png

      دیدگاه


        #18
        پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

        نوشته اصلی توسط Mahan.Rafiee
        [color=blue][b]ای بابا یه ریجیستر میخوای تنظیم کنی دیگه!!!مثال برای چی! :-))
        اینم کد AVR-GCC!:
        [LTR][b][color=blue]// Program to configure watchdog timer in ATmega16 Microcontroller
        #include<avr/io.h>
        #include<util/delay.h>

        int main()
        {
        DDRB=0x03;

        if(bit_is_set(MCUCSR,WDRF))
        {
        PORTB|=(1<<PB1);
        _delay_ms(1000);
        }

        PORTB&=~(1<<PB1);
        WDTCR=0x0F;
        while(1)
        {
        PORTB|=(1<<PB0);
        _delay_ms(400);
        PORTB&=~(1<<PB0);
        _delay_ms(400);
        }
        }
        میخند؟ :mrgreen:
        خدایی هیچی نفهمیدم
        عزیزم میدونم باید ریجستر تنظیم کنم، اینو که خود کدویزارد بدبخت تولید میکنه
        قبول کن کدی که گذاشتی خیلی گنگه، از کجا آوردی؟ توی سمپل ها هست؟
        من فقط میخوام بدونم 1. چه مقداری به ریجستر WDTCR بدم تا استارت بشه 2. چه مقداری به ریجستر WDTCR بدم تا تایمر ریست بشه. همین oo:
        در ضمن اون کد اسمبلی که تایمرو ریست میکنه چرا ننوشتین؟
        انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

        دیدگاه


          #19
          پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

          دوتا سوال دیگه:
          همونطور که میدونید، کامپایلر کدویژن حین اجرای دستورات delay خودش تایمر واچداگو ریست میکنه تا سرریز نشه، حالا اومدیمو میکرو توی همون خطی که توش دستور delay نوشته شده هنگ کرد، اونوقت تایمر واچداگ هیچوقت سرریز نمیشه و همه چی خراب میشه، اینطور نیست؟
          این حرف شمابرای دستورdelay_msدرسته، اما اگر ازdelay_usاستفاده کنید دیگه تایمر ریست نمی کنه
          اینم یه نمونه برنامه
          کد:
          #pragma optsize-
          WDTCR=0x1F;
          WDTCR=0x0F;
          #ifdef _OPTIMIZE_SIZE_
          #pragma optsize+
          
          #endif
          
          while (1)
           {  
           #asm("WDR")//reset watchdog 
           }

          دیدگاه


            #20
            پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

            نوشته اصلی توسط hamedtaran
            چه مقداری به ریجستر WDTCR بدم تا استارت بشه 2. چه مقداری به ریجستر WDTCR بدم تا تایمر ریست بشه.
            دستور اسمبلی wdr برای ریست کردن واچداگ هستش. توکدویژن این کد را قرار می دی

            کد:
            #asm("wdr");

            دیدگاه


              #21
              پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

              نوشته اصلی توسط 1morteza
              این حرف شمابرای دستورdelay_msدرسته، اما اگر ازdelay_usاستفاده کنید دیگه تایمر ریست نمی کنه
              اینم یه نمونه برنامه
              کد:
              #pragma optsize-
              WDTCR=0x1F;
              WDTCR=0x0F;
              #ifdef _OPTIMIZE_SIZE_
              #pragma optsize+
              
              #endif
              
              while (1)
               {  
               #asm("WDR")//reset watchdog 
               }
              ممنون متوجه شدم.
              یه سوال دیگه، قضیه دوبار مقدار دهی کردن ریجستر چیه؟ آخه من وقتی توی کدویزارد میزنم فقط یک مقدار
              کد:
              WDTCR=0x0F;
              تولید میکنه! oo:
              آیا مقدار دهی اول به دلیل initializ کردن هست؟
              فک کنم کدویژنی که نصب کردم مقادیر initializ رو به کاربر نشون نمیده :-?
              انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

              دیدگاه


                #22
                پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog بر&#15

                نوشته اصلی توسط hamedtaran
                میخند؟ :mrgreen:
                خدایی هیچی نفهمیدم
                عزیزم میدونم باید ریجستر تنظیم کنم، اینو که خود کدویزارد بدبخت تولید میکنه
                قبول کن کدی که گذاشتی خیلی گنگه، از کجا آوردی؟ توی سمپل ها هست؟
                من فقط میخوام بدونم 1. چه مقداری به ریجستر WDTCR بدم تا استارت بشه 2. چه مقداری به ریجستر WDTCR بدم تا تایمر ریست بشه. همین oo:
                [b][color=blue]نکنه نرفتی تو اون لینک!(کد رو هم از اونجا در آوردم!)
                ==============
                تنظیمات واچ داگ(سگ نگهبان! :icon_razz: :mrgreen: ) توسط بیت های ریجیستر WDTCRانجام میشه.

                بیتWDE واچداگ رو فعال سازی میکنه که اگه آنرا یک کنیم ، در زمان سرریز تایمر،میکرو ریست خواهد شد. زمان سرریز واچداگ بوسیله بیت های WDP1,WDP0 و WDP2 تنظیم میشود و تنظیمات آن مطابق باجدول زیر هستش

                گاهی اوقات ممکن است واچ داگ بصورت ناخواسته خاموش شود! ولی اتمل ماژول واچداگ را طوری ساخه که با استفاده از بیت WDTOE ،احتمال خاموش شدن ناخواسته آن بسیار کم شود! عمل کرد این بیت بدین ترتیب است که برای خاموش کردن واچداگ،مراحل زیر باید طی شود:

                1- در یک سیکل ماشین،بیت های WDE وWDTOE یک شوند حتی اگر پیش از این،بیتWDEیک شده است باید در این مرحله مجددا 1 شود!
                2- تا 4 سیکل کلاک بعدی ،سطح صفر برروی WDE نوشته شود،این عمل واچداگ تایمر را غیرفعال خواهد کرد.
                به عنوان مثال،یک نمونه تابع خاموش کردن واچداگ تایمر به صورت زیر میباشد:
                void watchdog off ()
                {


                #asm ("cli"


                WDTCR = (1<<WDTOE) | (1<<WDE);

                WDTCR &= ~(1<<WDE);

                #asm ("sei&quot
                }


                علت غیرفعال کردن وقفه ها ، پیش از اجرای مراحل بالا این است که ممکنه پس از یک نمودن بیت های WDTOE و WDE ، وقفه ای درخواست شود در این شرایط پس از بازگشت از ISR آن وقفه،فرصت 4 سیکلی از دست رفته است.

                همه ی این مراحل برای این است که ماژول واچداگ بفهمد که صفر شدن WDE ناخواسته نیست و خود کاربر این را در برنامه نوشته است!]

                اینم مثالی که میخواستی:
                کد:
                #include <mega32.h>
                
                #include <delay.h>
                
                #define LED_PORT PORTC
                #define LED_DDR DDRC
                
                void init_io();
                
                void led_rotate();
                
                void watchdog_on();
                
                void wathdog_reset();
                
                
                
                void main (void)
                {
                init_io();
                
                watchdog_on ();
                
                while (1)
                 {
                  wathdog_reset();
                  
                  led_rotate();
                 };
                
                }
                
                
                //************funections************
                
                
                void init_io()
                
                {
                  LED_DDR=0xFF;
                }
                //====
                void led_rotate()
                {
                 int i,j;
                 for (i=1;i<=128;i=i*2)
                  {
                   LED_PORT=i;
                   for(j=0;j<100;j++) delay_us (1000); delay_us(1000); //100 ms Delay
                  }
                
                }
                //====
                void watchdog_on()
                {
                 WDTCR=0x0F; // Watchdog Timer Prescaler: OSC/2048K (2.2s)
                }
                
                //====
                void wathdog_reset()
                {
                 #asm("WDR");
                }
                اگه تو پروتوس شبیه سازی کنید پروتوس همش وارنینگ میده که میکرو بدلیل واچداگ داره ریست میشه.
                تحلیل کد هم با خودتون !
                بعدش ببینید کد رو درست نوشتم؟؟! تو notepad ویندوز نوشتمش چون فعلا دسترسی به کامپایلر ندارم!
                1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                !Electronic On! Programming On
                هوشمندانه سوال بپرسیم!
                http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                دیدگاه


                  #23
                  پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

                  نوشته اصلی توسط Mahan.Rafiee
                  [b][color=blue]نکنه نرفتی تو اون لینک!(کد رو هم از اونجا در آوردم!)
                  ==============
                  تنظیمات واچ داگ(سگ نگهبان! :icon_razz: :mrgreen: ) توسط بیت های ریجیستر WDTCRانجام میشه.

                  بیتWDE واچداگ رو فعال سازی میکنه که اگه آنرا یک کنیم ، در زمان سرریز تایمر،میکرو ریست خواهد شد. زمان سرریز واچداگ بوسیله بیت های WDP1,WDP0 و WDP2 تنظیم میشود و تنظیمات آن مطابق باجدول زیر هستش

                  گاهی اوقات ممکن است واچ داگ بصورت ناخواسته خاموش شود! ولی اتمل ماژول واچداگ را طوری ساخه که با استفاده از بیت WDTOE ،احتمال خاموش شدن ناخواسته آن بسیار کم شود! عمل کرد این بیت بدین ترتیب است که برای خاموش کردن واچداگ،مراحل زیر باید طی شود:

                  1- در یک سیکل ماشین،بیت های WDE وWDTOE یک شوند حتی اگر پیش از این،بیتWDEیک شده است باید در این مرحله مجددا 1 شود!
                  2- تا 4 سیکل کلاک بعدی ،سطح صفر برروی WDE نوشته شود،این عمل واچداگ تایمر را غیرفعال خواهد کرد.
                  به عنوان مثال،یک نمونه تابع خاموش کردن واچداگ تایمر به صورت زیر میباشد:
                  void watchdog off ()
                  {


                  #asm ("cli"


                  WDTCR = (1<<WDTOE) | (1<<WDE);

                  WDTCR &= ~(1<<WDE);

                  #asm ("sei&quot
                  }


                  علت غیرفعال کردن وقفه ها ، پیش از اجرای مراحل بالا این است که ممکنه پس از یک نمودن بیت های WDTOE و WDE ، وقفه ای درخواست شود در این شرایط پس از بازگشت از ISR آن وقفه،فرصت 4 سیکلی از دست رفته است.

                  همه ی این مراحل برای این است که ماژول واچداگ بفهمد که صفر شدن WDE ناخواسته نیست و خود کاربر این را در برنامه نوشته است!]

                  اینم مثالی که میخواستی:
                  کد:
                  #include <mega32.h>
                  
                  #include <delay.h>
                  
                  #define LED_PORT PORTC
                  #define LED_DDR DDRC
                  
                  void init_io();
                  
                  void led_rotate();
                  
                  void watchdog_on();
                  
                  void wathdog_reset();
                  
                  
                  
                  void main (void)
                  {
                  init_io();
                  
                  watchdog_on ();
                  
                  while (1)
                   {
                    wathdog_reset();
                    
                    led_rotate();
                   };
                  
                  }
                  
                  
                  //************funections************
                  
                  
                  void init_io()
                  
                  {
                    LED_DDR=0xFF;
                  }
                  //====
                  void led_rotate()
                  {
                   int i,j;
                   for (i=1;i<=128;i=i*2)
                    {
                     LED_PORT=i;
                     for(j=0;j<100;j++) delay_us (1000); delay_us(1000); //100 ms Delay
                    }
                  
                  }
                  //====
                  void watchdog_on()
                  {
                   WDTCR=0x0F; // Watchdog Timer Prescaler: OSC/2048K (2.2s)
                  }
                  
                  //====
                  void wathdog_reset()
                  {
                   #asm("WDR");
                  }
                  اگه تو پروتوس شبیه سازی کنید پروتوس همش وارنینگ میده که میکرو بدلیل واچداگ و ریست میشه.
                  تحلیل کد هم با خودتون !
                  بعدش ببینید کد رو درست نوشتم؟؟! تو notepad ویندوز نوشتمش چون فعلا دسترسی به کامپایلر ندارم!
                  آقای رفیعی واقعا از وقتی که گذاشتید کمال تشکر رو دارم
                  بنده امروز صب واچداگ رو توی پروتئوس تست کرده بودم و به راحتی جواب گرفته بودم. البته نه با این همه کد. فقط ریجسترو مقدار دادم و بعد در جایی از برنامه تایمر رو ریست کردم و کار کرد، ولی وقتی تایمرو ریست نمیکردم میکرو براحتی ریست میشد (بدون هیچ خطایی در پروتئوس). به نظر شما همین دوخط کد کافی نیست و باید بیشتر دستکاری بشه؟ :sad: ولی سوال من چیز دیگه یی بود. من میگم چرا ریجستر WDTCR توی برنامه ای که گذاشتین توی دو خط مقدار دهی شده، ولی وقتی من با کدویزارد کدش رو تولید کردم و از همون کد هم در پروتئوس جواب گرفتم، فقط یکبار مقدار 0F رو مقداردهی کرده!؟!؟!
                  و یک سوال هم همین الآن پیش اومد! :mrgreen:
                  گاهی اوقات ممکن است واچ داگ بصورت ناخواسته خاموش شود! ولی اتمل ماژول واچداگ را طوری ساخه که با استفاده از بیت WDTOE ،احتمال خاموش شدن ناخواسته آن بسیار کم شود! عمل کرد این بیت بدین ترتیب است که برای خاموش کردن واچداگ،مراحل زیر باید طی شود:
                  خوب شما توی توضیح بالا گفتین که میتونیم با استفاده از بیت WDTOE از خاموش شدن خودبه خودی واچداگ جلوگیری کنیم، بعدش در ادامه مراحل خاموش کردن واچداگو گفتین oo: (میشه مراحل جلوگیری از خاموش شدنو بگین؟)
                  یعنی اگه بخوایم احتمال خاموش شدن اونو کم کنیم باید هر از چندگاهی بیت WDTOE رو دوباره یک کنیم؟ حتی اگه قبلا یک باشه؟ درست گفتم؟
                  احتمال خاموش شدنش چقدره؟ والا اگه اینجوری باشه باید یه سگ دیگه ببندیم مواظب خود واچداگ باشه تا خاموش نشه! :eek: :biggrin:
                  به نظر شما باید چیکار کرد؟؟
                  اوووووووووو چقده سوااااااااااال!! :biggrin:
                  قبلا از همکاری شما کمال تشکرو دارم. موفق باشید
                  انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

                  دیدگاه


                    #24
                    پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

                    نوشته اصلی توسط hamedtaran
                    آقای رفیعی واقعا از وقتی که گذاشتید کمال تشکر رو دارم
                    بنده امروز صب واچداگ رو توی پروتئوس تست کرده بودم و به راحتی جواب گرفته بودم. البته نه با این همه کد. فقط ریجسترو مقدار دادم و بعد در جایی از برنامه تایمر رو ریست کردم و کار کرد، ولی وقتی تایمرو ریست نمیکردم میکرو براحتی ریست میشد (بدون هیچ خطایی در پروتئوس). به نظر شما همین دوخط کد کافی نیست و باید بیشتر دستکاری بشه؟ :sad: ولی سوال من چیز دیگه یی بود. من میگم چرا ریجستر WDTCR توی برنامه ای که گذاشتین توی دو خط مقدار دهی شده، ولی وقتی من با کدویزارد کدش رو تولید کردم و از همون کد هم در پروتئوس جواب گرفتم، فقط یکبار مقدار 0F رو مقداردهی کرده!؟!؟!

                    و یک سوال هم همین الآن پیش اومد! :mrgreen:خوب شما توی توضیح بالا گفتین که میتونیم با استفاده از بیت WDTOE از خاموش شدن خودبه خودی واچداگ جلوگیری کنیم، بعدش در ادامه مراحل خاموش کردن واچداگو گفتین oo: (میشه مراحل جلوگیری از خاموش شدنو بگین؟)
                    یعنی اگه بخوایم احتمال خاموش شدن اونو کم کنیم باید هر از چندگاهی بیت WDTOE رو دوباره یک کنیم؟ حتی اگه قبلا یک باشه؟ درست گفتم؟
                    احتمال خاموش شدنش چقدره؟ والا اگه اینجوری باشه باید یه سگ دیگه ببندیم مواظب خود واچداگ باشه تا خاموش نشه! :eek: :biggrin:
                    به نظر شما باید چیکار کرد؟؟
                    اوووووووووو چقده سوااااااااااال!! :biggrin:
                    قبلا از همکاری شما کمال تشکرو دارم. موفق باشید
                    ممنون قابلی نداشت. :redface:
                    سوال اول متوجه نشدم
                    سوال دوم : oo: من کجای برنامه دو دفه مقدار دهی کردم؟

                    سوال 3 : منظورم اینه که اگه WDEیوقت 0 شه واچ داگ میاد که بررسی کنه که در کنار 0 شدن این بیت،آیا WDTOE هم 1 شده است؟اگر خاموش شدن بیت WDE ناخواسته نباشد،بعد از 0 شدن WDE، بیت WDTOE (طبق برنامه) 1 میشود در نتیجه واچ داگ تشخیص میده که این خاموش شدن ناخواسته نبوده پس واچداگ خاموش میشود.ولی در صورتی که خاموش شدن بیت WDE ناخواسته باشد ، بیت WDTOE یک نمیشود پس واچداگ تشخیص میده که این 0 شدن ناخواسه است در نتیجه واچداگ این صفر شدن را جدی نمیگیرد ودوباره آن بیت 1 میشود!

                    سوالات بعدیت رو متوجه نمیشم! دوباره پستم رو بخون!
                    احتمالش50درصده! ولی با این بیت میشه 25درصد! :nerd
                    :
                    1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                    من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                    !Electronic On! Programming On
                    هوشمندانه سوال بپرسیم!
                    http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                    دیدگاه


                      #25
                      پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

                      نوشته اصلی توسط Mahan.Rafiee
                      ممنون قابلی نداشت. :redface:
                      سوال اول متوجه نشدم
                      سوال دوم : oo: من کجای برنامه دو دفه مقدار دهی کردم؟

                      سوال 3 : منظورم اینه که اگه WDEیوقت 0 شه واچ داگ میاد که بررسی کنه که در کنار 0 شدن این بیت،آیا WDTOE هم 1 شده است؟اگر خاموش شدن بیت WDE ناخواسته نباشد،بعد از 0 شدن WDE، بیت WDTOE (طبق برنامه) 1 میشود در نتیجه واچ داگ تشخیص میده که این خاموش شدن ناخواسته نبوده پس واچداگ خاموش میشود.ولی در صورتی که خاموش شدن بیت WDE ناخواسته باشد ، بیت WDTOE یک نمیشود پس واچداگ تشخیص میده که این 0 شدن ناخواسه است در نتیجه واچداگ این صفر شدن را جدی نمیگیرد ودوباره آن بیت 1 میشود!

                      سوالات بعدیت رو متوجه نمیشم! دوباره پستم رو بخون!
                      احتمالش50درصده! ولی با این بیت میشه 25درصد! :nerd
                      :
                      دوستمون آقای 1Morteza اینجوری نوشتن و دوبار فراخوانی کردن:
                      کد:
                      #pragma optsize-
                      WDTCR=0x1F;
                      WDTCR=0x0F;
                      #ifdef _OPTIMIZE_SIZE_
                      #pragma optsize+
                      
                      #endif
                      
                      while (1)
                       {  
                       #asm("WDR")//reset watchdog 
                       }
                      لطفا اگه ممکنه در برنامه ای که قرار دادید (همون برنامه که توی نوت پد نوشتین) قسمت "جلوگیری از خاموش شدن احتمالی" رو هم قرار بدین تا دقیقا متوجه بشم.
                      بازم ازتون متشکرم که اینقدر با حوصله هستین
                      انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

                      دیدگاه


                        #26
                        پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

                        نوشته اصلی توسط hamedtaran
                        دوستمون آقای 1Morteza اینجوری نوشتن و دوبار فراخوانی کردن:
                        کد:
                        #pragma optsize-
                        WDTCR=0x1F;
                        WDTCR=0x0F;
                        #ifdef _OPTIMIZE_SIZE_
                        #pragma optsize+
                        
                        #endif
                        
                        while (1)
                         {  
                         #asm("WDR")//reset watchdog 
                         }
                        لطفا اگه ممکنه در برنامه ای که قرار دادید (همون برنامه که توی نوت پد نوشتین) قسمت "جلوگیری از خاموش شدن احتمالی" رو هم قرار بدین تا دقیقا متوجه بشم.
                        بازم ازتون متشکرم که اینقدر با حوصله هستین
                        نمیدونم چرا دوبار تعریف شده! :eek: (عجیبه!نباید دوبار تعریف بشه! دوبار تعریف کردن مثل این میمونه که کد اضافه بنویسی!)
                        ===
                        این قسمت "خاموش شدن احتمالی" فهموندنش به دیگران خیلی سخته!(خودمم به زور فهمیدم!)
                        راستش شما نباید کاری تو برنامه کنید !
                        شما دوباره (وبا دقت) پست هامو بخونید و روشون فک کنید (مخصوصا رو پست21)
                        امیدوارم قسمت خاموش شدن احتمالی و جلوگیری از آن را متوجه بشید :bye
                        1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                        من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                        !Electronic On! Programming On
                        هوشمندانه سوال بپرسیم!
                        http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                        دیدگاه


                          #27
                          پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

                          نوشته اصلی توسط Mahan.Rafiee
                          نمیدونم چرا دوبار تعریف شده! :eek: (عجیبه!نباید دوبار تعریف بشه! دوبار تعریف کردن مثل این میمونه که کد اضافه بنویسی!)
                          ===
                          این قسمت "خاموش شدن احتمالی" فهموندنش به دیگران خیلی سخته!(خودمم به زور فهمیدم!)
                          راستش شما نباید کاری تو برنامه کنید !
                          شما دوباره (وبا دقت) پست هامو بخونید و روشون فک کنید (مخصوصا رو پست21)
                          امیدوارم قسمت خاموش شدن احتمالی و جلوگیری از آن را متوجه بشید :bye
                          جالبه! من همه اینترنتو زیرورو کردم فقط چنتا کد تونستم پیدا کنم که توی همشون ریجستر دوبار مقدار دهی شده :eek:
                          نکته جالبش اینه که با یک بار مقدار دادن مثل تراکتور جواب میده!!!
                          چیزی که من فهمیدم اینه که در حالت کلی اگه بیت WDE یک باشد و بیت WDTOE صفر باشد، واچداگ فعال میشه و اگه WDE صفر بشه و WDTOE یک بشه واچداگ خاموش میشه. درسته؟
                          حالا برنامه رو چجوری تغییر بدم که از خاموش شدن خودبه خودی جلوگیری بشه؟ هر از چندگاهی این دو بیتو مقدار بدم؟ خوب اگه این کارو بکنم مقدار قبلی شمارنده تایمر به هم نمیریزه؟ مثلا اگه حین برنامه دوباره به ریجستر WDTCR مقدار بدم (درحالی که واچداگ از قبل فعاله)، مقدار قبلی داخل تایمر حفظ میشه؟ و یا دوباره از صفر شروع میکنه به شمردن؟
                          انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

                          دیدگاه


                            #28
                            پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

                            نوشته اصلی توسط hamedtaran
                            جالبه! من همه اینترنتو زیرورو کردم فقط چنتا کد تونستم پیدا کنم که توی همشون ریجستر دوبار مقدار دهی شده :eek:
                            نکته جالبش اینه که با یک بار مقدار دادن مثل تراکتور جواب میده!!!
                            چیزی که من فهمیدم اینه که در حالت کلی اگه بیت WDE یک باشد و بیت WDTOE صفر باشد، واچداگ فعال میشه و اگه WDE صفر بشه و WDTOE یک بشه واچداگ خاموش میشه. درسته؟
                            حالا برنامه رو چجوری تغییر بدم که از خاموش شدن خودبه خودی جلوگیری بشه؟ هر از چندگاهی این دو بیتو مقدار بدم؟ خوب اگه این کارو بکنم مقدار قبلی شمارنده تایمر به هم نمیریزه؟ مثلا اگه حین برنامه دوباره به ریجستر WDTCR مقدار بدم (درحالی که واچداگ از قبل فعاله)، مقدار قبلی داخل تایمر حفظ میشه؟ و یا دوباره از صفر شروع میکنه به شمردن؟
                            :-?? ...
                            ===
                            یه جورایی همینطوره(برای خاموش کردن واچداگ بیت WDE رو خاموش میکنیم بعد ماژول واچداگ 4 سیکل بهمون فرصت میده که ما بیت WDTOE هم 1 کنیم اگه زمان 4 سیکلی از بین بره و ما WDTOE رو 1 نکنیم ماژول واچداگ میاد دوباره بیت WDE رو 1 میکنه!و به کارش ادامه میده! ولی در صورتی که WDTOE رو به موقع یک کنیم ماژول واچداگ خاموش میشه! اینو بدون وقتی که تغییر بیت WDE ناخواسته باشه دیگه نمیشه که WDTOE یک بشه پس ماژول واچداگ تغییر رو ناخواست تشخیص میده!)
                            برای دومین بار میگم در برنامه شما هیچ تغییری نمیدی! خود ماژول واچداگ همه کارارو میکنه!(شما فقط رجیستر مقدار دهی کن ، همین!)
                            1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                            من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                            !Electronic On! Programming On
                            هوشمندانه سوال بپرسیم!
                            http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                            دیدگاه


                              #29
                              پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

                              نوشته اصلی توسط Mahan.Rafiee
                              :-?? ...
                              ===
                              یه جورایی همینطوره(برای خاموش کردن واچداگ بیت WDE رو خاموش میکنیم بعد ماژول واچداگ 4 سیکل بهمون فرصت میده که ما بیت WDTOE هم 1 کنیم اگه زمان 4 سیکلی از بین بره و ما WDTOE رو 1 نکنیم ماژول واچداگ میاد دوباره بیت WDE رو 1 میکنه!و به کارش ادامه میده! ولی در صورتی که WDTOE رو به موقع یک کنیم ماژول واچداگ خاموش میشه! اینو بدون وقتی که تغییر بیت WDE ناخواسته باشه دیگه نمیشه که WDTOE یک بشه پس ماژول واچداگ تغییر رو ناخواست تشخیص میده!)
                              برای دومین بار میگم در برنامه شما هیچ تغییری نمیدی! خود ماژول واچداگ همه کارارو میکنه!(شما فقط رجیستر مقدار دهی کن ، همین!)
                              ممنون آقای رفیعی
                              ببینید آقای رفیعی شما روش خاموش کردن واچداگو کلا فراموش کنید. مشکل من سر روشن نگه داشتن اونه.
                              یعنی من فقط یه مقدار توی ریجستر بریزم و بعد بیام تایمرو ریست کنم وتمام؟ اینو که قبلا هم انجام داده بودم!
                              مگه نمیگفتین که 50% احتمال داره واچداگ خاموش بشه؟ بعد گفتین که میتونیم یه کاری انجام بدیم این احتمال به 25% برسه؟
                              من همون کارو میخوام بکنم ولی نمیدونم چجوری. مثلا توی برنامه ای که شما گذاشتین هیچ کار اضافه ای صورت نگرفته، فقط کد فعالسازی واچداگ و ریست کردن اونو گذاشتین. خواهشا یکم بیشتر راهنمایی کن برادر گیج شدم :sad:
                              انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

                              دیدگاه


                                #30
                                پاسخ : استفاده از آی سی کانتر خارجی بجای watch dog برای جلوگیری از هنگ کردن میکرو AVR

                                نوشته اصلی توسط hamedtaran
                                ممنون آقای رفیعی
                                ببینید آقای رفیعی شما روش خاموش کردن واچداگو کلا فراموش کنید. مشکل من سر روشن نگه داشتن اونه.
                                یعنی من فقط یه مقدار توی ریجستر بریزم و بعد بیام تایمرو ریست کنم وتمام؟ اینو که قبلا هم انجام داده بودم!
                                مگه نمیگفتین که 50% احتمال داره واچداگ خاموش بشه؟ بعد گفتین که میتونیم یه کاری انجام بدیم این احتمال به 25% برسه؟
                                من همون کارو میخوام بکنم ولی نمیدونم چجوری. مثلا توی برنامه ای که شما گذاشتین هیچ کار اضافه ای صورت نگرفته، فقط کد فعالسازی واچداگ و ریست کردن اونو گذاشتین. خواهشا یکم بیشتر راهنمایی کن برادر گیج شدم :sad:
                                ببینید من منظورم اینه که اتمل ماژول واچداگو طوری ساخته که احتمال خاموش شدنش به 25 درصد برسه! و این 25 درصد بخاطر وجود بیت WDTOE یه!
                                1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                                من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                                !Electronic On! Programming On
                                هوشمندانه سوال بپرسیم!
                                http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                                دیدگاه

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