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

Zawieszanie ATmega32 bez możliwości zrobienia resetu

al555 07 Lut 2009 11:07 5464 36
  • #1 6114949
    al555
    Poziom 20  
    Witam,

    czy ktoś może spotkał się (i znalazł rozwiązanie) z problemem zawieszania ATmega32 (lub podobnego układu) przy czym ze stanu zawieszenia nie można wyjść nawet poprzez ręczne zwarcie wejścia RESET do masy.

    Oczywiście na wejściu reset jest rezystor 4,7k + kondensator 10n, na zasilaniu procesora i większości układów kondensatory 100n, zasilanie stabilizuje przetwornica 52kHz (LM2574) co powinno eliminować przepięcia.

    "Zwis" następuje w momencie impulsu napięcia wywołanego załączeniem innego urządzenia elektronicznego ( i nie jest to żadne urządzenie dużej mocy silnik, przekaźniki, elektrozaczep itp a zwykła elektronika 12V/0.5A).
    Zawiesza się ok. połowa z urządzeń z próbki 10szt. ( identyczne co do wykonania, montażu, elementów itp). W sumie nie wnikam dlaczego się zawieszają, może źle wykonana elektronika - moja wina.

    Ale dlaczego z tego stanu nie można wyprowadzić ATmegi poprzez zwarcie resetu do masy?. W programie uruchomiony jest watchdog - też nie działa gdy ATmega jest zawieszona. Pomaga tylko wyłączenie zasilania.

    Zmiana procesora na inny z całkiem innej serii (kupionej rok wcześniej) też nie pomaga

    Dodam że kiedy układ działa poprawnie ( tzn nie było żadnego impulsu który by go zawiesił) to zwarcie wejścia RESET powoduje reset a watchdog też powoduje reset gdy program się "zapętli"


    Nie wiem czy problemem jest elektronika czy program bo kiedy zmienię program na najprostszy z możliwych tzn. cykliczna zmiana wyjścia na przeciwny to układu nie można zawiesić ( watchdog też jest wyłączony)


    Po to żeby uniezależnić się od powiązań pomiędzy blokami układu stan pracy układu obserwuje w najprostszy sposób tzn. na oscyloskopie podglądając stan jednego pinu procesora które cyklicznie się zmienia (0V -> 5V ...). W momencie zawieszenia układu stan tego wyjścia ustala się na ok. 4.5V, ale pewnie tak powinno być bo jest to powtarzalny stan w momencie resetu układu kiedy wszystkie piny są skonfigurowane jako wejścia.

    Podsumowując: wygląda na to że układ w momencie zawieszenia pozostaje w stanie resetu, był chyba jakiś problem z watchdogiem który powodował taki stan, pamięta ktoś ?
    A może powód jest inny - proszę o pomoc ....
  • Pomocny post
    #2 6115395
    rafalwan
    Poziom 12  
    A przypadkiem nie jest to zatrzaśnięcie się układu (latchup). Włącz amperomierz między procesor, a zasilanie i zobacz jaki płynie prąd w czasie tego stanu. Może to być wina "krzemu", włączenia jakiś układów IO które powodują przepływ prądu skrośnego, sprawdź poprawność konfiguracji portów analogowych czy przypadkiem przez klucze nie płynie jakiś fałszywy prąd, czy piny ustawione jako wejściowe nie wiszą w powietrzu, czy jest dużo masy pod procesorem, ...

    Tu kilka linków na temat latchup:

    http://www12.fairchildsemi.com/an/AN/AN-600.pdf
    http://www.national.com/an/AN/AN-932.pdf
    http://www.national.com/an/TB/TB-01.pdf
    http://ww1.microchip.com/downloads/en/AppNotes/00763b.pdf
    http://ww1.microchip.com/downloads/en/AppNotes/00595B.pdf

    PS.
    Kiedyś miałem dziwne przypadki samoistnego zatrzaskiwania się małych AVR'ow podczas programowania, po zatrzaśnięciu były nieżywe przez kilka godzin, po tym czasie cudownie ożywały, a niektóre egzemplarze były pozbawione ID.
  • Pomocny post
    #3 6117054
    janbernat
    Poziom 38  
    Paskudztwo.
    Latchup może wystąpić, gdy na wejściu układu CMOS
    pojawia się napięcie wyższe niż zasilanie przez czas dłuższy niż kilkanaście-kilkadziesiąt ns.
    (jeśli to latchup).
    Propozycje śledztwa:
    Oscyloskop z pamięcią.
    Jeśli nie masz-cykliczne załączanie obciążenia 0.5A 12V
    przez jakiś tranzystor z opornikien sterowany generatorem.
    Zmierzyć przebieg napięcia zasilającego.
    Może jest jakaś szpilka w dół przez ileś ns.
    A napięcie na resecie jest utrzymywane przez jakieś ns-
    jest tam przecież kondensator i wtedy napięcie na
    wejściu reset jest wyższe niż na zasilaniu.
    Ale to może być na dowolnym wejściu.
  • Pomocny post
    #4 6119203
    Nawigator
    Poziom 33  
    Latch-up na resecie możesz spróbować wyeliminować diodą równolegle do rezystora resetu. oczywiście katodą do plusa. Podobnie można zabezpieczyć inne wyprowadzenia procesora, może się coś wyjaśni.
    A oscylator/zegar po tym zwisie pracuje?

    N.
  • #5 6119525
    al555
    Poziom 20  
    Dzięki za wszystkie informację, nie brałem latch-up pod uwagę, ale widzę że muszę się przyglądnąć tematowi, dam znać jakie będą efekty

    Nawigator napisał:
    A oscylator/zegar po tym zwisie pracuje?


    Oscylator pracuje cały czas, nawet po zawieszeniu....
  • #6 6119898
    janbernat
    Poziom 38  
    Ale nie mamy pewności czy to jest latchup.
    Nawet na dobrym oscyloskopie na takie pojedyncze szpilki
    można polować parę godzin.
    Proponuję zasilić samego procka oddzielnym zasilaczem
    (LM7805, dwa kondensatory i jakiś zasilacz wtyczkowy).
    Masy obu zasilaczy połączyć grubym przewodem tylko w jednym miejscu.
    Jeśli zjawisko ustąpi(przy pracującym watchdogu i z normalnym programem) to faktycznie coś z zasilaniem.
    Nikt z nas nie widział i nie mierzył tego układu i może się zdarzyć że zbiorowym wysiłkiem, pełni dobrej woli wpuszczamy al555 w maliny.
  • #7 6122629
    al555
    Poziom 20  
    Jedno jest pewne, w momencie załączania tego dodatkowego układu powodującego przepięcie, na zasilaniu układu który się zawiesza występuje spadek napięcia zarejestrowany oscyloskopem.
    Nie pamiętam dokładnie jakie to były czasy (chyba ok. 1ms) ale spadek widoczny na oscyloskopie był ok. 0,5 V tzn. zamiast 5V było 4.5V
    Wydawało mi się nawet że spadek może być większy ale oscyloskop go nie zarejestruje.

    Dziwne to bo układ był zasilany z dużego laboratoryjnego zasilacza.
    Ale sam widziałem.
  • #8 6122796
    janbernat
    Poziom 38  
    Zaraz, ale napisałeś że zasilasz układ z przetwornicy na LM2574.
    A teraz piszesz że z zasilacza laboratoryjnego.
    Który układ?
    Cyfrówkę na 5V czy ten na 12V/0.5A?
    Prawdopodobnie coś z zasilaniem.
    Ale!
    Czy cyfrówka(procek) jest jakoś związany z tym układem na 12V?
    Bo jeśli procek czymś steruje, to może wyjście cyfrówki (procesora?)jest nadmiernie obciążone.(może ładuje jakąś pojemność?)
    Jakiś schemat, chociaż na kartce.
    PS.
    To nie jest przepięcie.
    To jest odpowiedź zasilacza na impulsowy wzrost obciążenia.
  • #9 6123680
    rafalwan
    Poziom 12  
    To chyba nie latchup...
    Czy to procesor załącza ten układ?

    Daj po kilaka kondensatorów 100 nF i 10uF przy każdej parze zasilania procesora, po pierwotnej stronie stabilizatora od procka daj transila jednokierunkowego na 15 V albo diodę 1N5817, po wtórnej transila 6 V albo zenerkę 5V6 kilku watową. zwiększ pojemności elektrolitów po pierwotnej i wtórnej stronie tego stabilizatora.

    Te zasilacze impulsowe wcale takie dobre nie są jak się wydaje, miałem kiedyś dużo usterek w switch'ach Ethernetowych, przetwornica na jakimś LM impulsowym 3v3, w sieci energetycznej było włączane dużo obciążeń indukcyjnych powodujących przepięcia i procesory switch'ów dostawały sklerozy, pomogło danie transili lub diody Schotkiego i zenerki.
  • #10 6123863
    janbernat
    Poziom 38  
    Są też układy nadzoru resetu, MAXIM je robi i inne firmy.
    Wybrać trzeba to dla określonego napięcia zasilania i dopuszczalnego spadku.
    Z tego co wiem wychwytuje szpilki i robi reset(jak zdąży-dane z katalogów).
    Stosuje się je w układach przemysłowych i oddalonych od nadzoru.
    W automatach telefonicznych które kiedyś serwisowałem taki scalak był.
    Schemat daj!
  • #11 6124992
    neo_dc
    Poziom 32  
    Ja zaczynam dopiero przygodę z mikroprocesorami, ale nie napisałeś w sumie czy te układy mają wspólny zasilacz, czy może procki resetuje impuls elektromagnetyczny, czy może procek włącza ten układ, czy jest ekranowanie... ciężko powiedzieć cokolwiek.

    Jak zasilasz układy z baterii to działa ?
  • #12 6128024
    arturt134
    Poziom 27  
    Upewnij się, czy to włączenie obciążenia (żarówki), czy też jego wyłączenie zawiesza procesor. Być może jest to odpowiedź zasilacza na skok obciążenia (np. przepięcie przy skokowym zmniejszeniu obciążenia).
    Spróbuj też zasilania procesora z baterii, to czasami pomaga wyjasnić takie sprawy.
  • #13 6133034
    al555
    Poziom 20  
    Witam,


    na początek może schemat układu połączeń pomiędzy modułami

    Zawieszanie ATmega32 bez możliwości zrobienia resetu



    - układ powodujący zawieszanie to zwykła elektronika pobierająca trochę więcej prądu 12V/0.8A
    - układ połączeń pomiędzy modułami to pająk niezbyt grubych przewodów ( celowo żeby stworzyć możliwie najgorsze warunki połączeń - do testów)
    - efekt zawieszania o wiele skuteczniejszy niż podłączenia dodatkowego modułu to krótkie zwarcie przewodów zasilających (tzw. iskrzenie).


    Moim celem nie jest zapobieganiu powstawania zakłóceń ( usunę zapewne problem gdy przewody będą grubsze, osobne zasilacze lub nawet zasilanie bateryjne itp. ) ale chciałbym spowodować żeby układy były odporniejsze na takie zakłócenie.

    Mogę powiedzieć że dodanie większego kondensatora na wejściu znacząco poprawiło odporność na zawieszanie ( z kondensatora tantalowego SMD 22uF na elektrolit 470uF).
    Mam jeszcze zupełnie inny typ modułów które przetestowałem - jednak są odporne na zawieszanie, a zasilanie/przetwornica różni się tylko tym że są większe kondensatory (wejście 470uF, wyjście 220uF) i transil na wejściu zasilania do modułu.

    Jednak zależy mi na tym aby skupić się dlaczego procesor po zawieszeniu nie może powrócić do normalnego działania wskutek zadziałania watchdoga lub zwarciu wejścia reset do masy.
    Ciekawe spostrzeżenie: jak wgram do układu prosty program zmieniający cyklicznie stan wyjścia na przeciwny to układu nie można zwiesić ( wszystkie piny układu są wtedy jako WEJSCIA, nie załączam nawet watchdoga )

    Czy możliwe że określona kombinacja stanu pinów procesora skonfigurowanych jako wejścia/wyjścia będzie powodowała latch-up a inna kombinacja będzie powodowała że układ jest odporny na zatrzaśnięcie ?

    Będę wdzięczny za uwagi ...
  • #14 6133061
    Dr_DEAD
    Poziom 28  
    Jesteś 100% pewny że to nie błąd w software'owy ???
    Jesteś 100% pewny że procek po resecie nie wykonuje żadnego kodu ??? jak to sprawdzasz???
    Jeżeli w układzie nie masz żadnego supervisora napięcia, to wygląda mi to na błąd w programie.
  • #15 6133075
    arturt134
    Poziom 27  
    A brownout detector? Nie jestem pewny czy twój AVR go ma, nie chce mi się szukać w datasheecie. Ale jeżeli ma, to go włącz. Ewentualnie spróbuj dodać jakiś zewnętrzny supervisor - na początek do jednego modułu, zobaczysz czy jest jakaś różnica.
  • #16 6133088
    al555
    Poziom 20  
    Stan procesora sprawdzam podglądając pin procesora (cyklicznie zmieniany), po zawieszeniu wszystkie piny przechodzą w stan HiZ.

    W procesorze uruchomiony jest BOD (Brown-out Detector) - układ nadzoru zasilanie - gdy zasilanie spadnie poniżej 4,0V to układ jest w stanie resetu.
    Przypominam że ze stanu zawieszenia/zatrzaśnięcia nie da się wyprowadzić procesora za pomocą zewnętrznego resetu ( zwarcie wejścia reset do masy) więc spodziewam się że ani BOD ani watchdog też nie zresetują
  • #17 6133176
    Dr_DEAD
    Poziom 28  
    al555 napisał:
    Stan procesora sprawdzam podglądając pin procesora (cyklicznie zmieniany), po zawieszeniu wszystkie piny przechodzą w stan HiZ.

    Czyli chyba normalny stan pinów po resecie.

    al555 napisał:

    Przypominam że ze stanu zawieszenia/zatrzaśnięcia nie da się wyprowadzić procesora za pomocą zewnętrznego resetu ( zwarcie wejścia reset do masy) ....

    Nie da się wyprowadzić z tego stanu, czy może jednak procek się resetuje tylko że program nie działa zgodnie z założeniami? Sprawdzanie czy procek się zresetował trzeba by było zrobić jako pierwszą instrukcję zaraz po skoku do wektora resetu.
    Jeżeli rzeczywiście procek nie resetuje się to wytłumaczenie jest jedno: Traci zegar, CPU nie ma taktowania. Można by to sprawdzić mierząc prąd pobierany przez procek. Jeżeli byłby nienaturalnie mały lub nienaturalnie duży to może oznaczać rzeczywiście że jest w jakimś zatrzaśniętym stanie.
  • #18 6136780
    janbernat
    Poziom 38  
    al555 napisał:
    "Oscylator pracuje cały czas, nawet po zawieszeniu...."

    A jak to sprawdziłeś?

    al555 napisał:
    "jak wgram do układu prosty program zmieniający cyklicznie stan wyjścia na przeciwny to układu nie można zwiesić ( wszystkie piny układu są wtedy jako wyjścia, nie załączam nawet watchdoga )"

    Jeśli:
    " wszystkie piny układu są wtedy jako wyjścia"
    (chyba za wyjątkiem resetu)
    To układ trudniej doprowadzić do zatrzaśnięcia.
    Spróbuj wszystkie piny ustawić jako wejścia
    a procek (czy działa) sprawdzać przerwaniem.
    W przerwaniu może sobie ustawić jakiś pin jako wyjście
    aby dał znak życia.

    Dr DEAD:
    "prąd...nienaturalnie mały lub nienaturalnie duży..."
    Myślałem, że jak się robi pasożytniczy tyrystor to tylko nienaturalnie duży.

    Dodano po 2 [minuty]:

    Ciekawe śledztwo.
    Ale skąpo materiałów dowodowych.
  • #19 6136845
    al555
    Poziom 20  
    PRZEPRASZAM - CZESKI BŁĄD: wszystkie piny układu są wtedy oczywiście jako WEJSCIA a nie wyjścia -> jak się nie zmieni konfiguracji pinów procesora w najprostszym programie to piny są zdefiniowane jako wejścia

    Działanie oscylatora łatwo sprawdzić oscyloskopem na pinach XTAL2 ew. XTAL1 - tak mi się przynajmniej wydaje
  • #20 6137146
    rafalwan
    Poziom 12  
    Rozumiem że prowokujesz procesor do "zwisu", przez ograniczenie pojemności kondensatorów i usunięcie transila.

    Proponuję przetestować procesor po kolei:
    1) z wyłączonym BOD'em.
    2) z wyłączonym PLL'em.
    3) tylko z generatorem wewnętrznym RC bez BOD'a i PLL'a.

    Może się okazać że PLL, bądź BOD, albo ich kombinacja zawieszają procesor.

    Powodzenia...
  • #21 6137330
    Dr_DEAD
    Poziom 28  
    janbernat napisał:

    Dr DEAD:
    "prąd...nienaturalnie mały lub nienaturalnie duży..."
    Myślałem, że jak się robi pasożytniczy tyrystor to tylko nienaturalnie duży.

    Osobiście miałem przypadek z prądem "nienaturalnie małym", po prostu procek był w takim stanie że rdzeń nie dostawał żadnego zegara i stąd prąd był bardzo mały i tak jak u al555 procek nie dawał się wybudzić z tego stanu za pomocą nóżki resetu, ale to był inny procek i trochę inne warunki "zatrzaśnięcia się".
  • #22 6137657
    kemot55
    Poziom 31  
    Od pewnego czasu (konkretnie od 1.5 roku) również obserwuję podobnie "dziwne" zjawiska związane z AVR'ami. Niby program działa OK a jednak sam procesor pobiera 4x więcej prądu (5mA->20mA) niż inny egzemplarz (zaprogramowany tym samym programem). Statystycznie połowa serii pracuje ze zwiększonym poborem prądu (procesor ATMEGA169).
    A w związku z tematem: czy możesz sprawdzić obrazy pamięci flash i EEPROM bezpośrednio po zaprogramowaniu i (drugi zrzut) po zawieszeniu up? Są identyczne czy pojawiają się "śmieciowe" bajty?
  • #23 6137679
    janbernat
    Poziom 38  
    Jeżeli to da się rozwiązać zdalnie (przy dość skąpych informacjach od al555) to będzie znaczyło że elektroda jest genialna.

    Jeżeli nie-to temat należało by przykleić ku przestrodze.

    Projektanci układów nie są nieomylni(patrz-erraty do danych katalogowych).
    Procesy w układach cyfrowych nawet "bardzo zintegrowanych" są w rzeczywistości analogowe.
    Biorą w nich udział miliardy elektronów, pojemności itp. a nie "bity"
    Więc są niekiedy "nieobliczalne" w zachowaniach.

    Technologowie dają "obietnice" (wymuszone przez dział marketingu) że wszystko jest na "najwyższym poziomie".
    Nie dodają (bo dział marketingu im wyciął)
    że to wszystko jest nieco bardziej skomplikowane.
    I "zwykle" to działa.

    PS.
    Jeśli jest to zbyt "wydumana" wypowiedź- proszę moderatora o jej usunięcie.
  • #24 6137691
    al555
    Poziom 20  
    Na razie zbieram wszystkie uwagi - będę jeszcze przeprowadzał testy. Poinformuję o wynikach ...
  • #25 6151410
    psooya
    Poziom 38  
    Ja się dołączę do problemu. Zawiesza mi sie dokładnie tak samo Tiny 13. Reset nie wyprowadza procesora z tego stanu a software jest tak banalny że niema co w nim zepsuć i w dodatku napisany w ASMie. Generalnie nie zagłębiałem się problem ale wiem że nie zależy to od serii procesorów. Temat będę obserwował a i może sam coś pomyślę.
    Pozdrawiam i życzę sukcesu.

    Dodano po 3 [minuty]:

    Dodam jeszcze że tiny chodzi na wewnętrznym RC 8MHz z dzielnikiem przez 8 ma włączony BOD i uruchomiony WDR.
  • #26 6152021
    kamyczek
    Poziom 38  
    Problem polega na szpilce w układzie zasilania lub impulsie elektromagnetycznym i tu Brown-out Detector nic nie zrobi bo działa na spadek napięcia nie wzrost. Najlepszym rozwiązaniem jest zastosowanie przetwornicy DC-DC do zasilania części cyfrowej. Można zrobić eksperyment i zasilić część cyfrową z innego źródła zasilania izolując jednocześnie optycznie układ mocy transoptorem
  • #27 6152148
    psooya
    Poziom 38  
    Masz racje to wina szpilki bo jak miałem 7805 bez kondka przy pinach procka to włączenie lutownicy na pinie Vcc powodowało zwis. Z kondkiem 1u problem ustąpił ale i tak nie mam zaufania do tego rozwiązania. Ciekawym jest że M8 jest odporna i tiny2313 też :)
  • #28 6153013
    kemot55
    Poziom 31  
    Ja również mam wrażenie, że to problemy z zasilaniem (tak jakby szpilka na zasilaniu powyżej 6V naruszała (w moim przypadku na stałe) mikrostrukturę układu - mało prawdopodobne ale...). Gorszą rzeczą jest to, że moje problemy występują głównie w połączeniu z przetwornicą (zarówno AC/DC jak i DC/DC na zasilaniu). Przy zasilaczu typu trafo-mostek-kondensator-stabilizator problem był niezauważalny. Poza tym to dotyczy tylko procesorów AVR. Przy 8051 i PIC nic takiego nie występowało.
    Ogólnie problem jest bardzo poważny. Klienci zgłaszają, że urządzenie nie działa a jak wraca na warsztat to okazuje się, że wszystko jest OK.
    Robiłem różne próby z filtracją zasilania (RL i RC), blokowaniem szybkimi diodami i zmianą prowadzenia masy, ale w zasadzie to nie działa (trudno jest wygenerować stan awaryjny).
  • #29 6153067
    al555
    Poziom 20  
    W moim (opisywanym na początku) przykładzie raczej chodzi jednak o spadek napięcia o ok. 0.5V na zasilaniu 5V, a zasilanie każdego modułu(płytki) to przetwornica DC/DC z 12V na 5V. Zmieniłem też w jednym układzie zasilanie z przetwornicy LM2574 na LM7805 i też nic nie pomogło.
    Dodam że każda płytka połączona jest tylko czterema przewodami - a czasami nawet tylko dwoma (zasilanie)

    Jedyna zauważalna poprawa to po dodaniu kondensatora na wejściu przetwornicy z 22uF na 470uF, ale zawieszanie i tak następuje tylko dużo, dużo rzadziej i tylko przy bardziej ekstremalnym zakłóceniach (typu zwieranie/iskrzenie zasilania)
  • Pomocny post
    #30 6156035
    janbernat
    Poziom 38  
    Jak wpiszesz w googla na górze tej strony atmel reset
    to na pierwszej stronie(kanda) zobaczysz "atmel's recomended reset circuit"
    Z diodą.
    Sprawdziłeś to?
REKLAMA