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

Xmega - Resetowanie przy dotknięciu złącza goldpin, watchdog nie działa

Obywatel LutZek 19 Sie 2016 02:19 1809 22
  • #1 15877261
    Obywatel LutZek
    Poziom 13  
    Witam

    Mam problem z Xmegą. Otóż - na płytce z mam złącze goldpin, na którym jest wyprowadzenie do dwóch portów + masa i zasilanie 3V3. Obok znajduje się wejście programatora. Problem jest taki, że gdy zbliżę palec do tego złącza / przypadkowo dotknę mikrokontroler milknie / wyskakuje z programu i nie resetuje się mimo ustawionego watchdoga. Co ciekawe po resecie Xmegi wszystko działa mimo tego, że trzymam palec w tym samym miejscu. Jeśli go ruszę - znów to samo. Dodam tylko, że układ jest taktowany z wewnętrznego generatora RC o częstotliwości 2 MHz i tymczasowo zasilany jest z programatora. Dodatkowo jest to płytka PCB dwuwarstwowa o dość złożonej plątaninie ścieżek, natomiast na ten moment na płytce znajduje się tylko mikrokontroler i transoptor służący do separacji złącza MIDI.

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


    Cóż tam się może dziać?

    Pozdrawiam
    L.
  • #2 15877400
    pawlik118
    Poziom 32  
    Dodaj schemat i widok PCB. Prawdopodobnie nie masz podciągniętego przez rezystor pinu resetu.
  • #3 15877540
    tmf
    VIP Zasłużony dla elektroda
    reset nie musi być podciągnięty do Vcc, a nawet lepiej, gdyby nie był. Tylko w środowiskach o jakiś mega zakłóceniach się go podciąga. Ja obstawiam jakiś zimny lut, złe filtrowanie zasilania/niepodłączenie wszystkich pinów zasilających i problem ze zbieraniem śmieci przez porty ustawione jako wejścia.
  • #4 15877940
    Obywatel LutZek
    Poziom 13  
    Też podejrzewam takie przyczyny. Pytanie tylko - dlaczego watchdog nie działa?
  • #5 15879036
    pawlik118
    Poziom 32  
    dlaczego lepiej go nie podciągać do +? Z tego co pamiętam dokumentacja nakazuje jego podciąganie
  • #6 15879080
    kamyczek
    Poziom 38  
    W zasadzie każdy avr ma wewnętrzny rezystor podciągający ,który wystarcza do prawidłowej pracy , poza tym często podpinanie do wyprowadzenia reset rezystora i kondensatora skutkuje jedynie problemem z wejściem w tryb programowania . Z pewnością podłączenie bezpośrednio do + też odpada . Do prawidłowej pracy masz możliwość skonfigurowania układu zerującego w zależności od układu zegarowego jakiego używasz i warunków pracy . Mikrokontroler zeruje się przypadkowo zazwyczaj z dwóch powodów źle rozwiązane zasilanie brak kondensatorów filtrujących . Sterowanie układami generującymi szpilkowe zakłócenia np. przekaźniki .
  • #7 15879310
    Fredy
    Poziom 27  
    A w ogóle uruchamiasz ta funckję WatchdogSet ?
    Nie widać jej w Mainie.
  • #8 15879505
    tmf
    VIP Zasłużony dla elektroda
    pawlik118 napisał:
    dlaczego lepiej go nie podciągać do +? Z tego co pamiętam dokumentacja nakazuje jego podciąganie


    Do tego co napisał kol. Kamyczek, dodam, że RESET to także sygnał CLK dla interfejsu PDI. Dodatnie rezystora, dodatkowo obciąża tą linię, a PDI jest wrażliwe na brak symetrii na CLK i DATA. No i ten rezystor jest niepotrzebny, bo XMEGA ma własne, sensowne układy kontroli resetu.
  • #9 15880448
    pawlik118
    Poziom 32  
    Tymczasem strona 6 dokumentacji zaleca, a wręcz nakazuje podłączenie rezystora 10k z Resetu do +
    zarówno jeśli używamy go jako Reset jak i do zegara w PDI.

    http://www.atmel.com/Images/doc8278.pdf
  • #10 15880637
    kamyczek
    Poziom 38  
    Zdecydowanie musisz zmienić tłumacza ;) . Źle i nie dokładnie przetłumaczyłeś tekst , twoja interpretacja jest niewłaściwa i bezsensowna ...
  • #11 15883790
    pawlik118
    Poziom 32  
    a możesz mnie wyprowadzić z błędu i wyjaśnić mi (nam) jak według Twojego tłumacza jest dobrze? To będzie lepsza odpowiedź niż wypowiedź negująca poprzednika bez podania argumentów. Wszak priorytetem jest jak najlepsze poznanie prawdy
  • #12 15884085
    kamyczek
    Poziom 38  
    Jeśli nie używasz zewnętrznego układu zerowania np. przycisku nie musisz podłączać w zasadzie nic układ rc jest wymagany w przypadku zewnętrznego zerowania ,bo załatwia on problem np drgania styków , W przypadku kiedy używasz do programowania PDI nie może być tam podłączonego kondensatora , rezystor w zasadzie też nic nie daje bo układ jest wewnętrznie podciągnięty do vcc . Kolego to nie jest stare c51 które bez dobrania układu rc potrafiło się nie podnieść i trzeba było wstawiać jakieś zewnętrzne układy typu ds1813 itp. Zauważ że już w mikrokontrolerach AVR można było to wyprowadzenie wyłączyć i użyć funkcjonalnie jako pin portu I/O . Gdyby więc taj jak piszesz były potrzebne jakiekolwiek elementy zewnętrzne to czy można było by wyłączyć reset i użyć jako port I/O . Ja nie podłączam do resetu nic o ile nie muszę wprowadzić opóźnienia w starcie mikrokontrolera innego niż na to pozwala sam układ w przeciwnym razie nie podłączam do resetu nic poza wyprowadzeniami do programowania , Nigdy nie miałem z tego powodu sytuacji w której mikrokontroler się samoczynnie resetował . Autor ma więc albo problem z niestabilnym źródłem zasilania lub błędem w programie który kolokwialnie idzie w krzaki ...
  • #13 15884991
    pawlik118
    Poziom 32  
    1) Pytający nie sprecyzował, że nie używa wejścia /Reset, więc jest bardzo prawdopodobne że go używa, i przez brak podciągania i plątaninę kabli występował objaw jw. Przynajmniej było to prawdopodobne przy pierwszym poście, ale ok nie wnikajmy w to.

    2) No to robisz niezgodnie z zaleceniami Atmela - jeśli wejście /Reset jest używane jako reset to zalecane jest zewnętrzne podciąganie rezystorem w celu odporności na zakłócenia (EMC). Tak mówi przywołana przeze mnie oficjalna publikacja Atmela. To, że robisz inaczej i Ci działa to ok.
    Na tej samej zasadzie można powiedzieć że PCB projektujesz z pętlami masy w obwodzie masy od kondensatorów kwarcu, i że tak jest dobrze bo zawsze Ci działa, choć też jest to niezgodne z zaleceniami producenta uP.

    3) Nigdzie nie napisałem, że poza podciąganiem do +, trzeba dodać też kondensator do masy - to już są domysły

    4) Oczywiście wiadomo, że Xmegi mają wewnętrzny układ reset

    5) Dodatkowy rezystor oczywiście zmniejsza rezystancję wejściową obwodu reset, co się z tym wiąże potrzeba większego prądu aby wymusić napięcie które spowoduje reset. Zatem dodatkowy rezystor zmniejsza podatność na zakłócenia o czym wprost mówi dokumentacja.

    6) Nie odpowiedziałeś co źle przetłumaczyłem.
  • #14 15885043
    Konto nie istnieje
    Konto nie istnieje  
  • #15 15885061
    tronics
    Poziom 38  
    @pawlik - tak - i w Xmega@PDI jak i przy korzystaniu z np. debugwire w nowszych małych atmegach Atmel dał też ostrzeżenie odnośnie stosowania filtru RC na resecie ;) Co do stosowania kondensatora do masy to dokładnie te same notki atmela zalecają ten kondensator przy stosowaniu zewnętrznego resetu (czy to przycisk, czy przez jakiś układ) jak również dokładnie te same notki informują o zupełnym braku konieczności dodawania CZEGOKOLWIEK jeśli wykorzystywany jest tylko reset wewnętrzny (np. BOD czy watchdog). Żeby poprzeć kamyczka
    Cytat:
    When the PDI programming and
    debugging is used, the reset line is used as clock. The reset pull-up should be 10k or weaker, or be
    removed altogether.

    To zdanie oznacza "jeśli używamy PDI do programowania i debugowania linia reset jest używana jako zegar. Rezystor podciągający reset powinien być 10k lub słabszy (większa wartość), albo usunięty całkowicie".
  • #16 15885164
    tmf
    VIP Zasłużony dla elektroda
    Dodam jeszcze jedno zdanie z cytowanej noty - str. 9 - "If internal reset is used, the circuit is not necessary." - jeśli używamy wewnętrznego układu resetu, to (pokazane elementy na rys. 3-1) są niepotrzebne. Także kol. @pawlik118 - proszę czytać noty uważnie.
  • #17 15885188
    pawlik118
    Poziom 32  
    czytam czytam - ale chodziło mi o external reset :)
  • #19 15885287
    Konto nie istnieje
    Konto nie istnieje  
  • #20 15892147
    Obywatel LutZek
    Poziom 13  
    Wybaczcie panowie, że parę dni mnie nie było, spieszę z odpowiedziami.

    Więc – do programowania używam PDI. Na płytce mam wlutowany rezystor 10k podciągający PDI_CLK do zasilania i nie mam kondensatora między PDI_CLK, a masą. Płytka ma 15x15 cm (dwuwarstwowa). Problem zaczyna się gdy zbliżę rękę do któregokolwiek pinu zasilania. Co do zegara – korzystam z wewnętrznego generatora RC 2 MHz. Na płytce znajduje się kilkanaście kondensatorów SMD w obudowach 0805, o pojemności 100n, 10u i 47u.

    Układ zasilany jest z zasilacza własnej roboty (przetwornica DC/DC z 9V na 3.3V). Na wyjściu zasilacza jest kondensator elektrolityczny, o pojemności 2200u. Zasilacz i płytkę łączą przewody bez oplotu o długości około 12 cm. Na wejściu płytki jest kondensator 47uF i 100n. Przy mikrokontrolerze jest 8 kondensatorów 100n.

    Piny zasilania, do których przykładam rękę pochodzą z gniazd do podłączenia paneli czołowych z potencjometrami i przyciskami. Panele te nie są jeszcze podłączone.

    Odpowiadając na podane wcześniej pytanie - tak, watchdog jest uruchamiany w funkcji main (upraszczając zapomniałem dopisać).

    Watchdog w pewnym sensie działa. Dołączyłem do mikrokontrolera płytkę stykową z ośmioma diodami. Przy starcie mikrokontrolera program ustawia na nich wartość 0xaa. W moim wypadku po interwencji ze strony watchdoga diody świecą w takiej konfiguracji, ale np. UART już nie działa. Po zewnętrznym resecie mikrokontrolera znów wszystko jest ok. Innymi słowy. Urządzenie działa tak długo, jak długo nie zbliżę ręki do pinu masy.
  • #21 15892239
    kamyczek
    Poziom 38  
    Z ciekawości możesz ustawić wszystkie nieużywane porty i te do których nie masz nic aktualnie podłączone jako wyjścia . To co opisujesz wygląda tak jak by "wiszący pin" będący wejściem generował przerwanie .
  • #22 15892264
    Obywatel LutZek
    Poziom 13  
    Cóż... ustawiłem wszystko co się da jako wyjście. Jest lepiej. Dalej da się go zawiesić, ale trzeba się trochę więcej "namacać", żeby Tego dokonać. Jutro popracuję z tym mikrokontrolerem, zobaczę jak w normalnym użytkowaniu przez kilka godzin będzie się spisywał. Póki co wrzucam to, co na razie napisałem. Dodam tylko, że jedyną funkcją tego mikrokontrolera na ten moment jest odbieranie danych przez UART (izolacja galwaniczna przez transoptor) i przesyłanie na port A.

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


    Nic wielkiego :) Wybaczcie, jeśli popełniam gdzieś błąd w sztuce programistycznej. Na co dzień siedzę w układach FPGA, na mikrokontrolerach pracuję prywatnie i to od święta.
  • #23 15892462
    tmf
    VIP Zasłużony dla elektroda
    Myślę, że błąd nie leży w programie tylko w schemacie elektrycznym i jego implementacji. Pokaż schemat otoczenia MCU i rysunek płytki. Myślę, że coś jest poważnie nie tak z zasilaniem.
REKLAMA