اطلاعیه

Collapse
No announcement yet.

جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer

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

    #16
    پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer

    نوشته اصلی توسط student-p
    .
    .
    ...ولی فکر میکنم مشکل از زمین باشه،آیا امکان داره بخاطر نویز 50 هرتز برق شهر باشه؟
    .
    .
    مگر شما 220 رو مستقیم میدید به میکرو؟! :mrgreen:
    مزاح فرمودیم! اما سوالتون یکم مبهمه
    اگر بتونید شماتیک و کد رو قرار بدید بهتر میشه نظر داد، اینجوری مثل اینه که توی یک اتاق تاریک بخواییم دنبال یک مگس بگردیم(مگس استتعاره از نویزه :mrgreen
    اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !!

    دیدگاه


      #17
      پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer

      بله ی ایرادی از جانب زمین وجود داره چون وقتی ولتاژ دو سر ابتدایی و انتهایی ترین نقطه (زمین)رو میگیرم از 10 میلی ولت تا 420 میلی ولت افت ولتاژ دارم!در صورتی که باید صفر باشه...


      پاین نقشه و کد برنامه رو گذاشتم؛ریفرنس های مختلفی رو برای ADC امتحان کردم (الا داخلی)ولی بخاطر اون افتی که گفتم نتیجه ها هیچ فرقی باهم نداشتند یعنی در نهایت مجبور هستم حاصل رو با یه مقداری (در اینجا1.4) جمع کنم؛ک این خودش در عمل ی خطاهایی بوجود میاره.

      --منبع کلاک خارجی ،هشت مگ(استفاده از کریستال خارجی)
      --استفاده از خارن 100 نانو در نقاط مختلف تغذیه اعم از آی سی ،ال سی دی،سنسور دما(LM35) و خروجی تغذیه های 5 و 12 ولتی.
      --استفاده از ولتاژ 4.8 ولتی تغذیه ب عنوان ریفرنس ADC




      کد:
      $regfile = "m8def.dat"
      $crystal = 8000000
      
      '------------------------ lcd -----------------------------------------------
      Config Lcd = 16 * 2
      Config Lcdpin = Pin , Rs = Pinb.5 , E = Pinb.4 , Db4 = Pinb.3 , Db5 = Pinb.2 , Db6 = Pinb.1 , Db7 = Pinb.0
      Cls
      Cursor Off
      
      Config Timer1 = Timer , Prescale = 1024
      Enable Interrupts
      Enable Ovf1
      On Ovf1 Rot
      Stop Timer1
      
      Config Single = Scientific , Digits = 1
      
      
      Config Adc = Single , Prescaler = 128 , Reference = Off
      '#############################################################################
      
      Config Portd.2 = Output
      Heat Alias Portd.2
      
      Config Portd.1 = Output
      Led Alias Portd.1
      
      Ddrd.0 = 0
      Portd.0 = 1
      Sw Alias Pind.0
      
      
      Dim T_si As Single
      Dim T_wo As Word
      Dim F As Single
      Dim A As Byte
      Dim State As String * 5
      
      Cls : Lcd "  *** *** "
      Lowerline : Lcd "TEMP Controller"
      Wait 3
      Cls
      
      Reset Heat : Reset Led
      
      Do
      Home : Lcd "Please set SW!"
      Loop Until Sw = 0
      
      Cls
      
      
      
      
       Start Adc
       Start Timer1
      
      
      
      
      Do
      T_wo = Getadc(5)
      T_si = T_wo
      
      T_si = T_si * 4.8
      T_si = T_si / 1023
      T_si = T_si * 100
      
      
      Waitms 25
      
      F = F + T_si
      
      Incr A
      If A = 40 Then Gosub Tcal
      
      Loop
      
      
      End
      
      
      
      
      'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
      'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCaculated temp
      'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
      Tcal:
      
      A = 0
      F = F / 40
      F = F + 1.4
      
      
      
      
      If F >= 27 Then
      Reset Heat
      State = "OFF"
      End If
      
      
      If F <= 25 Then
       Set Heat
       State = "ON"
      End If
      
      
      
      Home : Lcd "Temp: " ; F ; " c "
      Lowerline : Lcd "Heater is:  " ; State ; " "
      
      
      Wait 3
      
      
       F = 0
       Return
      
      
      
      
      'RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
      'RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRotate
      'RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
      Rot:
      
       Stop Timer1
       Stop Adc
       Reset Heat
       Set Led : Waitms 200
       Reset Led : Waitms 500
       Set Led : Waitms 200
       Reset Led : Waitms 500
      
      Start Timer1
      Start Adc
      Waitms 100
      Cls
      
      Return

      (چطور میشه فایل ضمیمه کرد؟!)

      دیدگاه


        #18
        پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer

        یه سوال خیلی مسخره!!!
        چرا 2 تا ترانس و پل و .. داری؟
        [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

        دیدگاه


          #19
          پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer

          نوشته اصلی توسط ADMlN
          یه سوال خیلی مسخره!!!
          چرا 2 تا ترانس و پل و .. داری؟
          چون همینا دم دستم بوده! :cry: :cry2:
          در ضمن برای کاهش اثر گذاری ولتاژ 12 ولتی بروی منبع 5 ولتی؛تو ی پروژه دیگه (تقریبا شبیه این) با ی ترانس 4 سر (دو سر 10 ولت و دو سر دیگه 21 ولت) امتحان کردم وقتی که رله ها تو مدار سوئیچ میشد تاثیر منفی ش گاهی اوقات روی تغذیه 5 ولتی دیده میشد.(اونجا میکرو ریست میشد)

          اما اینجا ن؛اگر هم میکرو بخواد هنگ کنه یا ریست ش،برنامه به ی جایی غیر قابل انتظار پرش میکنه!

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

          دیدگاه


            #20
            پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer

            شما یه کاری کن
            اول 7812 و 7805 سری کن و بعدش هم خازن ها کمی بزرگتر بگیر
            برای خازن ورودی بهتره 470 میکرو باشه و خروجی هم 47 میکرو
            یه خازن 47 میکروفاراد هم بزار کنار میکرو
            در ضمن خروجی هم بعد LED نگیر. از قبلش یعنی مستقیم از رگولاتور بگیر
            برای تغذیه رله یه دیود سری بزار و نتایج بگو
            [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

            دیدگاه


              #21
              پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer

              نوشته اصلی توسط ADMlN
              خروجی هم بعد LED نگیر. از قبلش یعنی مستقیم از رگولاتور بگیر
              ببخشید تو شماتیک اشتباه شده ؛بله مستقیم از رگولاتور گرفتم!

              نوشته اصلی توسط ADMlN
              اول 7812 و 7805 سری کن و بعدش هم خازن ها کمی بزرگتر بگیر
              دوست عزیز شما درست فرمایش میدید،اما ترانس های ذکر شده رو نمیتونم تو همچین آرایشی که فرمودین استفاده کنم چون هر کدوم تنها 500 میلی آمپ جریان دهی خروجی داره،واین طوری زیر بار کم میارم(یعنی وقتی فن روشن هست یا رله میخواد سوئیچ ش ولتاژ 5 ولتی هم ب شدت افت میکنه...)و این وضع رو خراب تر میکنه!

              دیدگاه


                #22
                پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفا

                نوشته اصلی توسط ADMlN
                برای تغذیه رله یه دیود سری بزار و نتایج بگو
                سری؟؟؟
                چرا سری؟! oo:


                ی سری تغییرات تو مدار دادم،یعنی تغذیه 5 و 12 رو کلا از هم جدا کردم(بدون هیچگون اتصال زمین)و همه مشکلات حل شد حتی دیگه افت ولتاژی روی خط زمین نیست!

                اما میخوام بدونم چطور میشه مشکل قبل رو بدون اینکه بخوام اینکار رو کنم حل کرد؛حتی فاصله زیادی بین زمین و منابع نیست(کمتر از 50 سانت)؟؟!

                ی سئوال دیگه؛ امروز اومدم ی مدار پلH(چپ گرد راست گرد...) به مدار اضافه کنم ،چون باید در اینجا زمینا رو مجدد به هم وصل میکردم(زمین تغذیه 5 ولتی و تغذیه پل) به همین مشکل برخورد کردم،یعنی اینکه وقتی موتور در حال چرخش یا تغییر جهت بود همون مشکلات قبلی برا میکرو اتفاق می افتاد....(البته باید بگم برای تغذیه پل H م از ی منبع سومی استفاده کردم،سیگنال تحریکم که از میکرو گرفتم)

                دیدگاه


                  #23
                  پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer

                  برای جلوگیری از برگشت جریان گفتم
                  [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

                  دیدگاه


                    #24
                    پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer

                    من به تجربه فهمیدم که 99 درصد هنگ کردن میکرو avr نویز و .... نیست بلکه هنگ کردن میکرو عامل نرم افزاری داره . و اون عبارت است از سرریز پشته .

                    اما مطلب بعدی :
                    واچ داگ البته سر بار داره و کارایی سیستم رو 50 درصد - در بهترین حالت 25 درصد - پایین میاره . عین اینکه میکرو با کلاک 16 مگ رو تبدیل میکنه به میکرو با کلاک 8 مگ .
                    اساس واچ داگ اینطوری که یک تایمریه که اگر بعد از هر دستور العمل اگه مقدار دهی نشه میکرو رو ریست میکنه .

                    برای درک بهتر مثال میزنم . مثلا فرض کنید میخواهید یک سیستمی طراحی کنید که خوابیدن نصف شب نگهبان رو تشخیص بده . خوب در عمل میان یک دستگاه حضور و غایب - ساعت زنی - رو تو کابین نگهبان نصب میکنن . و به نگهبان میگن مثلا سر هر نیم ساعت باید یک بار کارت بزنید . فردا این کارت ها رو برسی میکنن و میفهمن که نگهبان نصف شب خوابیده یا نه .


                    اما راه اندازی واچ داگ


                    کد:
                    
                    
                    ASM example:
                    
                    ldi r16, 0×18
                    out WDTCR, r16 ;set WDTOE and WDE
                    ldi r16, 0×10
                    out WDTCR, r16 ; write a 0 to WD
                    
                    and C example:
                    
                    void WDT_off(void)
                    
                    {
                    
                    /* reset WDT */
                    
                    _WDR();
                    
                    /* Write logical one to WDCE and WDE */
                    
                    WDTCR |= (1<<
                    
                    /* Turn off WDT */
                    
                    WDTCR = 0×00;
                    
                    }
                    تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
                    داشتن عقله زيادتر از دیگر آدم ها است

                    دیدگاه


                      #25
                      پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer

                      نوشته اصلی توسط aliila
                      من به تجربه فهمیدم که 99 درصد هنگ کردن میکرو avr نویز و .... نیست بلکه هنگ کردن میکرو عامل نرم افزاری داره . و اون عبارت است از سرریز پشته .

                      اما مطلب بعدی :
                      واچ داگ البته سر بار داره و کارایی سیستم رو 50 درصد - در بهترین حالت 25 درصد - پایین میاره . عین اینکه میکرو با کلاک 16 مگ رو تبدیل میکنه به میکرو با کلاک 8 مگ .
                      اساس واچ داگ اینطوری که یک تایمریه که اگر بعد از هر دستور العمل اگه مقدار دهی نشه میکرو رو ریست میکنه .

                      برای درک بهتر مثال میزنم . مثلا فرض کنید میخواهید یک سیستمی طراحی کنید که خوابیدن نصف شب نگهبان رو تشخیص بده . خوب در عمل میان یک دستگاه حضور و غایب - ساعت زنی - رو تو کابین نگهبان نصب میکنن . و به نگهبان میگن مثلا سر هر نیم ساعت باید یک بار کارت بزنید . فردا این کارت ها رو برسی میکنن و میفهمن که نگهبان نصف شب خوابیده یا نه .


                      اما راه اندازی واچ داگ


                      کد:
                      
                      
                      ASM example:
                      
                      ldi r16, 0×18
                      out WDTCR, r16 ;set WDTOE and WDE
                      ldi r16, 0×10
                      out WDTCR, r16 ; write a 0 to WD
                      
                      and C example:
                      
                      void WDT_off(void)
                      
                      {
                      
                      /* reset WDT */
                      
                      _WDR();
                      
                      /* Write logical one to WDCE and WDE */
                      
                      WDTCR |= (1<<
                      
                      /* Turn off WDT */
                      
                      WDTCR = 0×00;
                      
                      }
                      50 درصد؟
                      چطوری حساب کردی؟
                      [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

                      دیدگاه


                        #26
                        پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer

                        متشکر از راهنمایی هاتون،نتیجه رو حتما اطلاع میدم!


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

                        دیدگاه


                          #27
                          پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفا

                          نوشته اصلی توسط aliila
                          من به تجربه فهمیدم که 99 درصد هنگ کردن میکرو avr نویز و .... نیست بلکه هنگ کردن میکرو عامل نرم افزاری داره . و اون عبارت است از سرریز پشته .

                          اما مطلب بعدی :
                          واچ داگ البته سر بار داره و کارایی سیستم رو 50 درصد - در بهترین حالت 25 درصد - پایین میاره . عین اینکه میکرو با کلاک 16 مگ رو تبدیل میکنه به میکرو با کلاک 8 مگ
                          اساس واچ داگ اینطوری که یک تایمریه که اگر بعد از هر دستور العمل اگه مقدار دهی نشه میکرو رو ریست میکنه .

                          برای درک بهتر مثال میزنم . مثلا فرض کنید میخواهید یک سیستمی طراحی کنید که خوابیدن نصف شب نگهبان رو تشخیص بده . خوب در عمل میان یک دستگاه حضور و غایب - ساعت زنی - رو تو کابین نگهبان نصب میکنن . و به نگهبان میگن مثلا سر هر نیم ساعت باید یک بار کارت بزنید . فردا این کارت ها رو برسی میکنن و میفهمن که نگهبان نصف شب خوابیده یا نه .
                          با درود . . .
                          جناب aliila لطفا جهت اثبات گفته بالا مدرک مستندی رو ارائه بدید
                          تا اونجایی که بنده خبر دارم و دیتاشیت رو مطالعه کردم و در عمل هم بهش رسیدم، واچداگ دارای اسیلاتور مجزا هست و هیچ نقشی در کاهش سرعت کار کنترلر نخواهد داشت (تنها موردی رو که میشه اشاره کرد سیکل اجرایی جهت انجام دستور reset watchdog هست)




                          با سپاس





                          درد من تنهایی نیست؛ بلكه مرگ ملتی است كه گدایی را قناعت، بی‏عرضگی را صبر، و با تبسمی بر لب این حماقت را حكمت خداوند می‏ نامند! "گاندی"

                          به دلیل وجود برخی مشکلات و بی احترامی ها این اکانت رو غیر فعال کردم. همیشه سر بلند باشید.
                          بدرود . . .

                          دیدگاه


                            #28
                            پاسخ : پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفا

                            نوشته اصلی توسط وحید نصیری
                            [color=navy][b]با درود . . .
                            جناب aliila لطفا جهت اثبات گفته بالا مدرک مستندی رو ارائه بدید
                            با فرکانس 16 مگ هر دستور 62.5 نانوثانیه طول میکشه و برای هر بار اجرای برنامه روتین تایمر واچدگ 10 پالس ساعت نیازمندیم و
                            طول کورس واچداگ 15 میلی ثانیه است.
                            پس ما از هر 15 میلی ثانیه به مقدار 9-^10 *10*62.5 ثانیه تلفات داریم اگه تناسب رو در بیاریم به عدد 4 دهم درصد میرسم
                            در حقیقت کاهش کارایی 50 درصد اشتباه است .و کارایی 0.4 درصد کاهش پیدا میکنه
                            تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
                            داشتن عقله زيادتر از دیگر آدم ها است

                            دیدگاه


                              #29
                              پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفا

                              آقا ببخشید پریدم وسط حرف هاتون. :biggrin:

                              یک سوال:

                              اگر واچ داگ فعال باشه و توی main برنامه
                              داخل while اصلی یک {}(while(1 وجود داشته باشه. واچ داگ فعال و میکرو ریست می شه؟

                              دیدگاه


                                #30
                                پاسخ : پاسخ : جلوگیری از هنگ کردن میکرو و نحوه استفا

                                نوشته اصلی توسط Arjena
                                اگر واچ داگ فعال باشه و توی main برنامه
                                داخل while اصلی یک {}(while(1 وجود داشته باشه. واچ داگ فعال و میکرو ریست می شه؟
                                واچ داگ که جا و مکان نمیشناسه؛در حقیقت با ی دستور استارت شده و اگه قبل از سرریز شدنش ریستش نکنی میکرو رو ریست میکنه!





                                دیدگاه

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