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

auto reset, jak zrobić np. na 555? Projekt na Atmelu.

arturromarr 14 Mar 2008 08:50 1780 13
REKLAMA
  • #1 4907175
    arturromarr
    Poziom 17  
    Posty: 417
    Pomógł: 1
    Ocena: 25
    Witam i proszę o poradę.
    Robię odpowiedzialny projekt ma Atmelu i nie mogę pozwolić, żeby program się zawiesił.
    Jak zrobić prosto np. na 555 automatyczny reset?
    Procesor mógłby mieć tzw. life bit na którym byłby przebieg kilka herców.
    W przypadku zaniku tego sygnału musi nastąpić impuls resetu.
  • REKLAMA
  • #2 4907185
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2810
    Użyj Watchdog
  • #3 4907193
    arturromarr
    Poziom 17  
    Posty: 417
    Pomógł: 1
    Ocena: 25
    Nie mogę
    Musi być sprzętowo bo układ jest zbudowany z kilku procków które w czasie startu przekazują sobie dane i z tego powodu trzeba restartować wszystko jednocześnie.
  • #4 4907216
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    arturromarr napisał:
    Nie mogę
    Musi być sprzętowo bo układ jest zbudowany z kilku procków które w czasie startu przekazują sobie dane i z tego powodu trzeba restartować wszystko jednocześnie.

    To czego szukasz to Zewnętrzny Watchdog. Pewno uda się go zrobić na 555, ale można też kupic gotową kostkę do tego przeznaczoną.
    Możesz użyć wewnętrznego WatchDoga, a na początku programu każdego procesora resetować pozostałe procesory. Wtedy gdy jeden dostanie resetu to zresetuje resztę.
  • REKLAMA
  • #5 4907247
    arturromarr
    Poziom 17  
    Posty: 417
    Pomógł: 1
    Ocena: 25
    Może faktycznie zorbie na wewnętrznym i będę wyzwalał resztę resetów.
    Tylko jest jeszcze jeden problem jak wykryć w takim przypadku czy urządzenie jest normalnie włączone czy zresetowane awaryjnie.
    Chodzi o to, że na początku jest ekran powitalny, który nie powinien się pojawiać, przy zadziałaniu watchdogu. Cy on zostawia po swoim zadziałaniu jakieś ślady?
  • #6 4907264
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    W MSP430 jest ślad w postaci ustawionej flagi WatchDoga. I właśnie po niej można rozróżnić czy to był reset spowodowany watchdogiem czy zwykły start.
    Byćmoże u Ciebie jest podobnie z tą falagą.
  • REKLAMA
  • #7 4907497
    KowalD
    Poziom 17  
    Posty: 290
    Pomógł: 13
    Ocena: 3
    Dr_DEAD napisał:
    Możesz użyć wewnętrznego WatchDoga, a na początku programu każdego procesora resetować pozostałe procesory. Wtedy gdy jeden dostanie resetu to zresetuje resztę.

    ale to jak tak zaczna sie resetowac caly czas nawzajem, to w koncu nigdy nie rusza ;)...
  • #8 4907605
    arturromarr
    Poziom 17  
    Posty: 417
    Pomógł: 1
    Ocena: 25
    jest jeden centralny który zczytuje dane z pozostalych wiec wykryje ich zawieszenie i bedzie mół je zrestartować sam.
    watchdog jest wiec potrzebny tylko w tym jednym układzie.
    Przydałą by sie tylko informacja o zadziałąniu tego restartu dla Mega 32
  • REKLAMA
  • #9 4907811
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    KowalD napisał:
    Dr_DEAD napisał:
    Możesz użyć wewnętrznego WatchDoga, a na początku programu każdego procesora resetować pozostałe procesory. Wtedy gdy jeden dostanie resetu to zresetuje resztę.

    ale to jak tak zaczna sie resetowac caly czas nawzajem, to w koncu nigdy nie rusza ;)...

    Hehehehe, celna uwaga :-). Trochę sie zapentlą.
  • #10 4908250
    arturromarr
    Poziom 17  
    Posty: 417
    Pomógł: 1
    Ocena: 25
    nie zapętlą się już podłączyłem resety.
    Układ centralny resetuje pozostałe układy.
    Jednak nie mogę ustawić watchdoga.
    Piszę:
    ...
    #include <avr/wdt.h>
    ....

    wdt_enable(WDTO_500MS);
    ....


    (w pętli głównej)
    wdt_reset()

    i nie może skompilować bo nie zna funkcji: WDTO_500MS

    jak to ustawić dla Mega16?
    Kompiluję na win AVR
    Wpisywanie cyfry jako parametru restauruje okład na okrągło.
    Co jest nie tak?
  • #11 4908447
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2810
    WDTO_500 to raczej zmienna niż funkcja
  • #12 4910524
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    arturromarr napisał:
    ...Przydałą by sie tylko informacja o zadziałąniu tego restartu dla Mega 32

    Ależ jest rejestr , z taka informacją :D

    Piotrek
  • #13 4918496
    arturromarr
    Poziom 17  
    Posty: 417
    Pomógł: 1
    Ocena: 25
    "WDTO_500 to raczej zmienna niż funkcja"
    wiem, ale tak mi pisze kompilator, więc pytam co jest nie tak?

    Jaki rejestr przechowuje informacje o restarcie przez watchdoga?
  • #14 4918609
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    MCUCSR ......

Podsumowanie tematu

✨ Dyskusja dotyczy implementacji automatycznego resetu procesora Atmel w projekcie wieloprocesorowym, gdzie konieczne jest sprzętowe rozwiązanie zapobiegające zawieszaniu się programu. Proponowane jest użycie zewnętrznego watchdog’a, który można zrealizować na układzie 555 lub gotowej kostce. Wewnętrzny watchdog procesora Atmel może być wykorzystany do resetowania pozostałych procesorów przez centralny układ nadzorczy. Poruszono problem rozróżnienia normalnego startu od resetu wywołanego watchdogiem, co w niektórych mikrokontrolerach (np. MSP430) jest możliwe dzięki specjalnej fladze w rejestrze statusu. W przypadku Atmela, rejestr MCUCSR zawiera informacje o przyczynie resetu, w tym o restarcie przez watchdog. Autor miał problem z kompilacją funkcji wdt_enable z parametrem WDTO_500MS dla Mega16, co wynikało z nieprawidłowego użycia stałej. Podsumowując, rozwiązaniem jest sprzętowy watchdog lub wewnętrzny watchdog Atmela z centralnym resetowaniem pozostałych układów oraz wykorzystanie rejestru MCUCSR do detekcji resetu watchdogiem.
Wygenerowane przez model językowy.
REKLAMA