ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 3 از 3
  1. #1
    2010/06/13
    192
    3

    مشکل استفاده از watchdog میکرو در یک loop جداگانه

    با سلام خدمت مهندسین
    من یک پروژه دارم که با ال سی دی گرافیکی دما و رطوبت را نشان می دهد طرز کار مدار بنده به گونه ای است در یک loop جداگانه ای دما و در یک loop دیگر رطوبت که با تایمر فعال شده را نشان می دهد. زمانی که برنامه وارد بخش رطوبت می شود در چند لحظه اول ال سی دی به درستی کار می کند ولی بعد از مدتی صفحه نمایشگر به هم ریخته و قاطی می کند که مجبور به قطع برق دستگاه می شوم.
    خواستم از watchdog استفاده کنم ولی بعد از ریست شدن میکرو برنامه به حالت اول خود باز می گردد که در آن دما نشان و دیگر مقدار رطوبت در آن وجود ندارد در حالی که با فشردن یک کلید برنامه وارد loop مخصوص رطوبت می شود.
    خواستم بدونم که آیا راهی است در یک loop جداگانه بدون آنکه میکرو به طور کلی ریست شود در همان loop بماند یا اینکه یک شرطی قرار دهیم که اگر میکرو ریست شد مستقیماً وارد همان loop شود و به اول برنامه باز نگردد؟
    با تشکر
  2. #2
    2013/07/08
    اصفهان
    696
    545

    پاسخ : مشکل استفاده از watchdog میکرو در یک loop جداگانه

    نقل قول نوشته اصلی توسط javad jtag
    با سلام خدمت مهندسین
    من یک پروژه دارم که با ال سی دی گرافیکی دما و رطوبت را نشان می دهد طرز کار مدار بنده به گونه ای است در یک loop جداگانه ای دما و در یک loop دیگر رطوبت که با تایمر فعال شده را نشان می دهد. زمانی که برنامه وارد بخش رطوبت می شود در چند لحظه اول ال سی دی به درستی کار می کند ولی بعد از مدتی صفحه نمایشگر به هم ریخته و قاطی می کند که مجبور به قطع برق دستگاه می شوم.
    خواستم از watchdog استفاده کنم ولی بعد از ریست شدن میکرو برنامه به حالت اول خود باز می گردد که در آن دما نشان و دیگر مقدار رطوبت در آن وجود ندارد در حالی که با فشردن یک کلید برنامه وارد loop مخصوص رطوبت می شود.
    خواستم بدونم که آیا راهی است در یک loop جداگانه بدون آنکه میکرو به طور کلی ریست شود در همان loop بماند یا اینکه یک شرطی قرار دهیم که اگر میکرو ریست شد مستقیماً وارد همان loop شود و به اول برنامه باز نگردد؟
    با تشکر
    خوب کد برنامه را قرار نداده اید و نیز ذکر نکرده اید که برای ارتباط با سنسور رطوبت از چه پروتکلی استفاده می کنید.
    اما در هر صورت به عنوان یک تشخیص افتراقی فکر می کنم که مشکل از منطق برنامه است، لذا می توانید مثلا از این راه حل ابتدائی استفاده کنید:

    با ورود به حلقه دوم جهت خواندن مقدار رطوبت، یک تایمر دیگر فعال شود و اگر بعد از گذشت زمان مشخصی، قرائت پارامتر مربوطه از سنسور به درستی انجام نشد، ضمن Reset کردن Watchdog، برنامه بتواند بدون هنگ کردن، با موفقیت از Loop خارج شده، صفحه را پاک کند و عبارت RH Sensor Failed را نمایش دهد.
  3. #3
    2010/06/13
    192
    3

    پاسخ : مشکل استفاده از watchdog میکرو در یک loop جداگانه

    نقل قول نوشته اصلی توسط مهندس نوآور
    خوب کد برنامه را قرار نداده اید و نیز ذکر نکرده اید که برای ارتباط با سنسور رطوبت از چه پروتکلی استفاده می کنید.
    اما در هر صورت به عنوان یک تشخیص افتراقی فکر می کنم که مشکل از منطق برنامه است، لذا می توانید مثلا از این راه حل ابتدائی استفاده کنید:

    با ورود به حلقه دوم جهت خواندن مقدار رطوبت، یک تایمر دیگر فعال شود و اگر بعد از گذشت زمان مشخصی، قرائت پارامتر مربوطه از سنسور به درستی انجام نشد، ضمن Reset کردن Watchdog، برنامه بتواند بدون هنگ کردن، با موفقیت از Loop خارج شده، صفحه را پاک کند و عبارت RH Sensor Failed را نمایش دهد.
    خیلی ممنون
    نمی تونم از تایمر دیگری استفاده کنم برنامه من بیش از 2 تا loop است . از رطوبت سنج hs1101 استفاده می کنم همچنین نمی خوام از loop خارج بشم و زمان ماندن در loop بیش از 10 روز باید باشد
    اینم برنامه
    کد:
    Submain:
    Do
    Lcdat 1 , 4 , "welcome"
    Waitms 500
    If Pinc.0 = 1 Then Goto F1
    Loop
    End
    
    Omid:
    Config Timer1 = Counter , Edge = Rising
    Config Timer0 = Timer , Prescale = 1024
    Enable Interrupts
    Enable Timer0
    Enable Timer1
    On Ovf1 Pulsecount
    On Ovf0 Lable
    Start Timer0
    Return
    Lable:
    Incr C
    If C > 30 Then
    Stop Timer0
    M = -7587.2
    A = B * 65536
    A = A + Counter1
    A = A - 110
    U = A - 7351
    U = U * M
    U = U / 100000
    S11 = ":" + Te_bozorg + Be_koochak + Vav + Taa + Re
    Lcdat 1 , 79 , S11
    Lcdat 1 , 1 , "  %" ; U
    Lcdat 1 , 57 , "  "
    B = 0
    C = 0
    Counter1 = 0
    Start Timer0
    End If
    Return
    Pulsecount:
    Incr B : Counter1 = 0
    Return
    
    F1:
    Cls Graph
    Waitms 100
    S11 = ":" + He_koochak + Daal + Noon_koochak + Alef_chasbaan + Mim_koochak + Ye_bozorg + Alef_chasbaan + He_chasbaan_avval + Ze + Vav + Re
    Lcdat 4 , 32 , S11
    Lcdat 4 , 2 , "21"
    Set Portb.7
    Waitms 700
    Reset Portb.7
    Goto F11
    
    F11:
    Gosub Omid
    1wreset
     If Err = 1 Then
     Lcdat 1 , 1 , ""                     '
     Else
    1wwrite &HCC
    1wwrite &H44
    Waitms 100
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    
    I1 = 1wread()
    I2 = 1wread()
    I = Makeint(i1 , I2)
    Temp = I / 16
    S11 = ":" + Alef_chasbaan + Mim_koochak + Daal
    Lcdat 2 , 95 , S11
    Lcdat 2 , 35 , Temp
    Lcdat 2 , 65 , "  "
    S11 = He_koochak + Jim_koochak + Re + Daal
    Lcdat 2 , 1 , S11
    If Temp < 30.5 Then
    Set Portb.3
    End If
    If Temp > 32 Then
    Reset Portb.3
    End If
    If Temp >= 32.5 Then
    Set Portb.4
    Else
    Reset Portb.4
    End If
    If Temp <= 30 Then
    Set Portd.5
    Else
    Reset Portd.5
    End If
    End If
    '***********************************
    If U < 50 Then
    Set Portb.2
    End If
    If U > 70 Then
    Reset Portb.2
    End If
    '***********************************
    Goto F11
    
    F2:
    Cls Graph
    Reset Portb.7
    Goto F22
    F22:
    Gosub Omid
    1wreset
     If Err = 1 Then
     Lcdat 1 , 1 , ""                     '
     Else
    1wwrite &HCC
    1wwrite &H44
    Waitms 100
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    
    I1 = 1wread()
    I2 = 1wread()
    I = Makeint(i1 , I2)
    Temp = I / 16
    S11 = ":" + Alef_chasbaan + Mim_koochak + Daal
    Lcdat 2 , 95 , S11
    Lcdat 2 , 35 , Temp
    Lcdat 2 , 65 , "  "
    S11 = He_koochak + Jim_koochak + Re + Daal
    Lcdat 2 , 1 , S11
    If Temp < 30.5 Then
    Set Portb.3
    End If
    If Temp > 32 Then
    Reset Portb.3
    End If
    If Temp >= 32.5 Then
    Set Portb.4
    Else
    Reset Portb.4
    End If
    If Temp <= 30 Then
    Set Portd.5
    Else
    Reset Portd.5
    End If
    '***********************************
    If U < 50 Then
    Set Portb.2
    End If
    If U > 70 Then
    Reset Portb.2
    End If
    '***********************************
    End If
    Goto F22
    به فرض در loop مثلا F11 قرار می گیرد بعد مدت 2 تا 3 دقیقه ال سی دی قاطی می کند ولی زمانی که دستور GOSUB OMID را بر می دارم مشکلی ندارم
    فقط خواستم Watchdog در loop مربوط به فرضا F11 میکرو هر چند ثانیه یک بار ریست نرم افزاری شود تا اینکه ال سی دی هنگ نکند. و بعد ریست با Watchdog به اول برنامه که نمایش ابتدایی پروژه است بر نگردد.
نمایش نتایج: از 1 به 3 از 3

موضوعات مشابه

  1. جلوگیری از هنگ کردن میکرو و نحوه استفاده از Watchdog Timer
    توسط student-p در انجمن میکروکنترلرهای AVR
    پاسخ: 44
    آخرين نوشته: 2020/04/26, 21:59
  2. تفاوت سنسورهای جریان OPEN LOOP و CLOSE LOOP
    توسط John Lock در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 5
    آخرين نوشته: 2014/10/30, 13:04
  3. پاسخ: 1
    آخرين نوشته: 2013/11/25, 21:13
  4. مشکل جدی با watchdog میکرو atmega8 و فیوز بیت WTDON
    توسط ramin20007 در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2012/09/26, 22:51
  5. انجام دو عمل جداگانه توسط میکرو
    توسط starsoheil در انجمن میکروکنترلرهای AVR
    پاسخ: 7
    آخرين نوشته: 2012/02/09, 07:12

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •