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

[Atmega8][c] - zawieszanie procesora

stasiu2323 04 Maj 2011 01:31 3093 10
  • #1 9467742
    stasiu2323
    Poziom 13  
    Witam.

    Buduje sterownik do bramy wjazdowej. Co kilka godzin "wariuje" atmega8. Przestaje działać przerwanie INT1, a PWM (OC2) ma jakąś dziwną wartość. Główna pętla programu działa. Wymieniałem atmege na inną sztuką, używałem wewnętrznego oscylatora, włączyłem BOD i watchdog. Nic nie pomogło. W załączniku schemat i pcb bez wartości elementów postaram się je dodać jutro. Co może być przyczyną?

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam
  • #2 9467755
    dondu
    Moderator na urlopie...
    Pierwsze drobne uwagi i pytania:

    1. kondensator filtrujący zakłócenia na zasilaniu Procesora - nie widzę go przy pinie Vcc.

    2. co to znaczy że INT1 przestaje działać? Konkretnie - procesor się resetuje, czy inny powód - to możesz sprawdzić tylko Ty. Ustaw jakąś diodę sygnalizacyjną która po resecie będzie informować o jego przyczynie.

    3. Co znaczy, że Watchdog czy BOD nie pomagają? One wyeliminują przyczyny tylko pozwalają zresetować procesor mając nad tym kontrolę i świadomość faktu ich zadziałania.

    4. Jak wygląda układ podający sygnał na INT1 (nie widzę na schemacie).


    Dla programu o tak małym stopniu skomplikowania watchdoga, bym wyłączył, przynajmniej na etapie szukania przyczyny.

    Generalnie o zakłóceniach (czasami można zapomnieć o jakiejś pierdółce):
    Zakłócenia w pracy mikrokontrolerów

    Kiedyś miałem przypadek, że system alarmowy w sklepie wzbudzał się w losowych momentach. Wiele godzin spędzonych na szukaniu przyczyny. Wymiana centralki na ten sam typ nic nie dawała.

    Okazało się, że jedna z lodówek (sklep AGD) generowała zakłócenia w czasie włączania i wyłączania, co przenosiło się po sieci na centralkę. Ten typ centralki nie potrafił sobie z tym poradzić. Skończyło się na zmianie typu i problem został rozwiązany :)
  • #3 9467761
    stasiu2323
    Poziom 13  
    1. Kondensatory są przed i za stabilizatorem 7805. Mogę dołożyć dodatkowy tylko gdzie i jakie?

    2. Funkcja hamuj() powinna: ustawić wypełnienie PWM na zero, wyłączyć przekaźniki i wyłączyć lampę sygnalizacyjną. Czasami wypełnienie PWM nie jest ustawiane na zero, przekaźniki i lampa są wyłączane, sterownik przestaje reagować na pilota, dlatego wydaje mi się że coś dzieje z INT1 albo TIMER0 ale tego nie jestem pewien. Główna pętla programu działa ponieważ po przerwaniu bariery zapala się LED1.

    3. Procesor sie nie resetuje, bo główna pętla cały czas działa.

    4. Sygnał na INT1 pochodzi z odbiornika radiowego 433MHz z modulacją ASK.

    Po wyłączeniu zasilania wszystko wraca do normy. Wydaje mi się że problem najczęściej występuje w momencie wyłączenia silnika napędu albo przekaźnika. Trudno dokładnie zaobserwować bo dzieje się tak co kilka godzin.
  • #4 9467762
    dondu
    Moderator na urlopie...
    stasiu2323 napisał:
    Kondensatory są przed i za stabilizatorem 7805. Mogę dołożyć dodatkowy tylko gdzie i jakie?

    1. Jak najbliżej nóżek procka: http://mikrokontrolery.blogspot.com/2011/04/zasilanie-mikrokontrolera.html

    2. OK

    3. OK ale:
    średniki w IF-ach masz pełno takich:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    4. Czyli sygnał jest poprawny elektrycznie?
  • #5 9467770
    stasiu2323
    Poziom 13  
    1. Zasilanie poprawie jutro. Ustawię też nieużywane porty jako wyjścia.

    3. IF'y są ok. Bez średnika gcc wywala błąd. Mogę co najwyżej zrobić tak
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    ale to niczego nie zmienia

    4. Bez oscyloskopu trudno powiedzieć na 100%, odbiornik jest podłączony według schematu dostarczonego przez sprzedawcę. Jutro sprawdzę czy reset samego procka pomaga.
  • #7 9467775
    stasiu2323
    Poziom 13  
    3. Poprawie ale to nic nie zmienia.
    4. Sprawdzę ale wydaje mi się że problemem jest atmega bo oprócz tego że sterownik przestaje reagować na pilota, wypełnienie PWM nie jest ustawiane na zero. A odbiornik radiowy nie ma nic wspólnego z PWM.
  • #8 9467776
    dondu
    Moderator na urlopie...
    4. Generalnie szukanie problemu w samym procesorze zostaw na moment w którym będziesz pewien , że wszystko inne już jest OK. Ale to jeszcze nie ten moment.

    Powodzenia, jutro zaglądnę w Twój temat.
    Teraz idę lu lu.
  • #9 9467924
    Konto nie istnieje
    Konto nie istnieje  
  • #11 9472410
    stasiu2323
    Poziom 13  
    Procesor przestał się zawieszać. Dołożyłem kondensator 100nF w pobliżu pinu VCC procesora. Problemy powodował zasilacz który miał zbyt małą wydajność, podczas przełączania przekaźników i krańcówek napięcie skakało o kilka wolt co czasami powodowało dziwne zachowanie atmegi. Po wymianie zasilacza wszystko jest ok. Dzięki za pomoc.
    Pozdrawiam
REKLAMA