logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Instrukcje Watchdog, reset proca po zwisie od przepięcia.

xdave 01 Gru 2010 13:55 1936 15
  • #1 8812527
    xdave
    Poziom 13  
    Witam serdecznie.

    Mam taki problem w sumie udało mi się go rozwiązać elektronicznie ale... chodzi o zwis procesora (atmega8) np gdy ten wyłącza jakiś przekaźnik, dałem parę kondensatorów tu i ówdzie i problem już nie występuje, ale pomyślałem aby dać jeszcze "łaczdoga" w programie. Jako że nigdy tego nie robiłem to poproszę o małą pomoc.

    Jest tak:

    -----------------------
    jakies tam deklaracje itp
    
    Config Watchdog = 1024
    Start Watchdog
    
    Do
    jakies instrukcje itp programu
    Waitms 500
    Loop
    -----------------------
    

    Sam "łaczdog" może być skonfigurowany dla od 16 do 2048 ms (skokowo x2, czyli 16, 32, 64...) i tak mi się wydaje, że powinien mieć zawsze więcej sekund niż ma pętla programu bo ją po prostu zatrzyma w czasie wykonywania. I tak jak widać wyżej jest np 500ms w pętli to "łaczdog" powinien mieć minimum 512 a najlepiej 1024 co najmniej.

    I mam teraz takie pytanie, co z rozkazem Reset Watchdog ? wiem ze powinien być gdzieś tu;
    
    ------------------------
    jakies tam deklaracje itp
    
    Config Watchdog = 1024
    Start Watchdog
    
    Do
    jakies instrukcje itp programu
    Waitms 500
    [b]Reset Watchdog[/b]
    Loop
    ------------------------


    Spotkałem się też z programami gdzie nie ma instrukcji reset watchdog tylko sama Config i start przed pętlą Do.

    Bardzo proszę o jakąś pomoc w temacie co by to działało normalnie czyli reanimowało pętle główną po zwisie jak by taki nastąpił i ewentualnie poprawki jeżeli wyżej napisałem bzdury.

    Kod czy też pseudokod, umieszczamy w znacznikach [code].
    Proszę z nich korzystać w przyszłości.
    [zumek]
  • #2 8812778
    Jaca
    Poziom 31  
    Dodaj diodę równolegle do cewki przekaźnika...
  • Pomocny post
    #3 8813787
    dondu
    Moderator na urlopie...
    Jak to mówią "Strzeżonego .... strzeże", ale zaufaj sprzętowemu On-chip Brown-out Detection i nie powielaj zabezpieczenia, które może Ci przeszkodzić jeżeli źle policzysz czasy realizacji jakichś funkcji w przerwaniach itp.

    Watchdog w przypadku Atmega8 stosuj raczej gdy program może wchodzić w jakieś dziwne stany np. zatrzymania w pętli z powodu niedotarcia sygnału który powinien nadejść, itp. ale nie w przypadku problemów z zasilaniem. Choć oczywiście powielanie zabezpieczeń ma swoje plusy.
  • #4 8824927
    xdave
    Poziom 13  
    w sumie nikt nic istotnego nie odpowiedzial :(
    watchdog w formie jak wyzej nie dziala niestety, urzadzenie nadal sie wiesza przy odlaczaniu pompy CO i samo sie nie restetuje
  • Pomocny post
    #5 8825092
    tmf
    VIP Zasłużony dla elektroda
    dondu - totalnie mylisz pojęcia. BOD i WD to dwa zupełnie różne układy, wyzwalane zupełnie różnymi bodźcami. WD powinien być stosowany w każdej aplikacji, jako dodatkowe zabezpieczenie. I bynajmniej nie z powodów o których piszesz. Jeśli program może wchodzić w dziwne stany to jest po prostu źle napisany - rozwiązaniem jest napisanie go poprawnie. A jeśli programista nie jest w stanie tego poprawnie zrobić to należy programistę wymienić. To co opisałeś to typowy przykład kiedy nie należy stosować WD.
    xdave - jeśli pompa ci resetuje układ to popraw go - na bank masz źle zrealizowane zasilanie, filtrowanie, projekt płytki, lub wszystkie te rzeczy na raz. Nie wiem jak WD jest obsługiwany w Bascomie, natomiast ogólna zasada jest prosta. Instrukcje WD mogą być gdziekolwiek (z wyjątkiem procedur obsługi przerwań, gdzie zazwyczaj ich umieszczenie czyni bezsensownym stosowanie WD). Ważne, żeby były wykonywane w odstępach mniejszych niż czasy wyzerowania WD. Oczywiście WD nie rozwiąże ci problemu resetowania się układu - wręcz ci go nasili, jeśli twoja aplikacja idzie czasami w maliny. Także popraw najpierw układ pod względem elektrycznym. Potem dodatkowo pomyśl o WD.
  • Pomocny post
    #6 8825120
    M. S.
    Poziom 34  
    Wstaw Reset Watchdog w pętlę główną i w podprogramy, funkcje itp., tam gdzie program może się zatrzymać na dłuższy czas. Jeśli masz instrukcję np. Wait 3 to zmień ją na
    Reset Watchdog: Waitms 1500: Reset Watchdog: Waitms 1500: Reset Watchdog


    Reset Watchdog powoduje, że czas do resetu jest odliczany od zera.
  • #7 8825268
    xdave
    Poziom 13  
    dziekuje za pomoc, tak uklad istotnie nie jest dobrze zrobiony, tak raczej na fizola polutowane byle jak, linie 230V krzyzuja i równoległują sie z liniami samego proca, jak pompa staje to moze byc wzbudzenie, trzeba bedzie zrobic uklad od nowa i oddalic sekcje 230V od cyfrowej, ewentualnie zamiast przekaznika dac jakis triak jeszcze,

    sprawdze jeszcze wd wg M. S.a
  • Pomocny post
    #8 8825322
    dondu
    Moderator na urlopie...
    tmf napisał:
    dondu - totalnie mylisz pojęcia. BOD i WD to dwa zupełnie różne układy, wyzwalane zupełnie różnymi bodźcami. WD powinien być stosowany w każdej aplikacji, jako dodatkowe zabezpieczenie. I bynajmniej nie z powodów o których piszesz. Jeśli program może wchodzić w dziwne stany to jest po prostu źle napisany - rozwiązaniem jest napisanie go poprawnie.

    Czy ja napisałem że WD i BOD to to samo? Zgadzam się z tym co piszesz i dlatego napisałem:

    dondu napisał:
    ... Choć oczywiście powielanie zabezpieczeń ma swoje plusy.


    A propos jakości pisania programu vs stosowanie Watchdoga, to nawet na poziomie NASA wymieniano kilkakrotnie oprogramowanie łazika Sojourner (co po Marsie śmigał) dlatego, że były błędy powodujące reset sondy. Swoją drogą transmisja oprogramowania trwała dość długo z powodu odległości i niskiej prędkości transmisji.
  • #9 8825541
    xdave
    Poziom 13  
    Cytat:
    A propos jakości pisania programu vs stosowanie Watchdoga, to nawet na poziomie NASA wymieniano kilkakrotnie oprogramowanie łazika Sojourner (co po Marsie śmigał) dlatego, że były błędy powodujące reset sondy. Swoją drogą transmisja oprogramowania trwała dość długo z powodu odległości i niskiej prędkości transmisji.


    dzieki za slowa otuchy :)

    napisze jak tam kolejne próby i dam znac[/quote]
  • #10 8825554
    dondu
    Moderator na urlopie...
    xdave napisał:
    dzieki za slowa otuchy :)

    Nie przejmuj się, to normalne, że są błędy oprogramowania oraz sytuacje nieprzewidziane przez programistę. Od tego między innymi jest Watchdog, aby nad tym móc zapanować. Gdyby było tak idealnie jak pisze nasz kolega TMF, to Windowsy byłyby idealne - a jednak nie są :D

    Watchdog to narzędzie, które jak każde inne można wykorzystać na wiele sposobów. To programista decyduje co z nim zrobi. Jeden używa do kontroli programu a inny np. do dodatkowego przerwania z wykorzystaniem flagi WDRF. Można? Oczywiście, że można (ale są tego konsekwencje - zerowanie rejestrów, portów itp.), choć nie do przerwań Watchdog został stworzony.

    Powodzenia w realizacji projektów.

    P.S.
    Jednakże biorąc pod uwagę wiedzę i doświadczenie TMF-a ufaj jemu bo warto.

    Dodano po 32 [minuty]:

    Dłuższe dyskusje na temat WD znajdziesz tutaj:
    https://www.elektroda.pl/rtvforum/topic330340.html
    https://www.elektroda.pl/rtvforum/topic1610031.html
  • #11 8826819
    tmf
    VIP Zasłużony dla elektroda
    Jasne, nic nie jest idealne, i owszem lepiej wykorzystać źle WD niż nie wykorzystać go wcale. Wiadomo, że programy czasami idą w maliny i WD pomaga, bo przynajmniej można zacząć od nowa. Niemniej najpierw trzeba starać się poprawić program i hardware. A tu jak autor pisze są duże pola do popisu. Krzyżowanie linii 230V z liniami sygnałowymi procesora nie powinno mieć miejsca chociażby ze względów bezpieczeństwa. Generalnie dobrą praktyką jest oba obwody odseparować na płytce. Poza bezpieczeństwem, zwiększa to także odporność na zakłócenia. Także najlepiej pokaż nam swój schemat i PCB to coś doradzimy. Z swojej strony dodam, że robiłem na triakach układy przełączające 3-4kW i działały bez problemów. Nie piszę tego, żeby się pochwalić, bo w sumie nie ma czym, tylko, żeby cię przekonać, że właściwy projekt jest kluczem do sukcesu. IMHO, WD ma służyć tylko do przywrócenia stanu procesora z sytuacji nieprzewidywalnych/losowych. Każde inne jego zastosowanie jest nadużyciem, co oczywiście nie znaczy, że w rękach świadomego programisty nie ma innych zastosowań. Wręcz przeciwnie.
  • #12 8826988
    dondu
    Moderator na urlopie...
    A swoją drogą, ciekawe co zrobiłaby NASA gdyby nie było Watchdogów sprzętowych czy programowych :D:D:D
    Watchdog w ich przypadku strasznie obniża koszty projektu - zawsze można drogą radiową wgrać nowy program.
  • Pomocny post
    #13 8832039
    kots
    Poziom 12  
    Z wyjątkiem prostych i krótkich programów stosuj WD. Jako przykład podam, mam nowy kocioł CO i sterownik co kilka tygodni zawieszał się, aż kiedyś zagotował wodę i musiałem zgłosić do naprawy. Jakby był aktywny WD, to nawet nie zauważyłbym że procek zawiesił się.

    W moich sterownikach stosuję WD, program nie ma prawa przebywać w żadnej procedurze dłużej niż np 300 ms, bo to jest rozsądny czas by zareagować na działania użytkownika, co sprowadza się do tego że reset watchdog jest tylko w pętli głownej.

    Kotsss
  • #14 8863538
    xdave
    Poziom 13  
    Dziękuje wszystkim za pomoc, już kliknełem odpowiednie klawisze pod waszymi postami.

    U mnie jest reset w pętli głównej, to bardzo prosty program do regulacji pompki CO, zrobiłem to na szybko gdyż było potrzebne już, dla tego się nie przykładałem, nic tam nie ma w schemacie, atmel, przekaźnik włączany tranzystorkiem, lcd i tyle poniżej podaje kod, niestety się wiesza nadal przy wyłączaniu pompy rano jak piec wygasa . Zrobię od nowa połączenia i na triaku albo optotriaku chyba lepiej i zapewne to mocno pomoże.

    TMF, myślę ze jesteś przesadnie skromny :D

    Kod:
    
    $regfile "m8def.dat"
    $crystal = 1000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    
    
    Deflcdchar 0 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32        'stopien
    Deflcdchar 1 , 32 , 27 , 27 , 27 , 27 , 27 , 27 , 32        'halt
    Deflcdchar 2 , 32 , 8 , 12 , 14 , 14 , 12 , 8 , 32          'play
    
    
    Config 1wire = Portb.0
    
    Config Pinb.1 = Output
    
    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    
    Dim I1 As Integer , Ss As String * 6
    Dim I2 As Integer
    
    Cls
    Cursor Off
    
     Dsid1(1) = 1wsearchfirst()
     Dsid2(1) = 1wsearchnext()
    
    Config Watchdog = 1024
    Start Watchdog
    
    Do
    
       1wreset
       1wwrite &H55
       1wverify Dsid1(1)
       1wwrite &HBE
       I1 = 1wread(2)
       '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsid2(1)
       1wwrite &HBE
       I2 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &HCC
       1wwrite &H44
    
     Waitms 500
    
     I1 = I1 * 10
       I1 = I1 / 16
    
       Ss = Str(i1)
       Ss = Format(ss , "#.&")
       Locate 1 , 1
       Lcd "W domu: " ; Ss ; Chr(0) ; "C "
    
       I2 = I2 * 10
       I2 = I2 / 16
    
       Ss = Str(i2)
       Ss = Format(ss , "#.&")
       Locate 2 , 1
       Lcd "Piec: " ; Ss ; Chr(0) ; "C "
    
    
      If I2 > 300 Then
    Portb.1 = 1
    Locate 2 , 16
    Lcd Chr(2)
    
    Elseif I2 < 300 Then
    Portb.1 = 0
    Locate 2 , 16
    Lcd Chr(1)
    
    End If
    Home
    Reset Watchdog
    Loop
    End
    
    

    Chce ktoś coś doradzić do WD ? albo może jakaś inna funkcje resetująca ?
  • #15 8863819
    rpal
    Poziom 27  
    jesli zrobisz poprawnie pcb i odfiltrujesz zasilanie jakk pisze tmf to zadnych zwisów i innych takich .... miec nie bedziesz, poza tym sa przekazniki i zpolaryzowanych koncowkach ktore juz maja zabudowane diody zabezpieczajace,wiecej nie trzeba kombinowac.
  • #16 8864325
    xdave
    Poziom 13  
    No ja wiem tylko, mi chodzi o WD, czy dobrze to wsadzone do programu ?
REKLAMA