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

Dziwne zachowanie ATmegi 128

biedron2006 21 Maj 2011 11:54 4089 26
  • #1 9529210
    biedron2006
    Poziom 10  
    Witam wszystkich!
    Nurtuje mnie pewien problem z moją ATmegą. Mianowicie, wykonuje projekcik z ATmegą128 w roli głównej na płytce stykowej. Ze względu na dużą ilość Pinów, ATmega jest wlutowana w przejściówkę i poprzez goldpiny a następnie skrętkę podpięta do płytki stykowej, na której składam elektronikę. W związku z tym przewody od mikrokontrolera do płytki stykowej mają długość niecałe 40cm. Na płytce stykowej na której są wetknięte kable od pinów, znajdują się m.in. kondensatory 100nF (zasilanie AVR), szyna zasilająca przez stabilizator 5V.
    Całość działa na 8MHz, bo taki jest praktyczny maks dla płytek stykowych i o dziwo (takiego pająka jakiego stworzyłem) cały układ i program testowany jak dotąd działa, z tym, że są pewne niepokojące mnie objawy takie jak:
    1) wyobraźmy sobie tradycyjne przerwanie od INT2 (wyzwalane poziomem niskim) - jak na płytce wykonam zwarcie pinu z masą, aby wzbudzić przerwanie wówczas (średnio raz na 10 wykonanych takich powtórzeń) procesor się zawiesza, resetuje, albo wyrzuca krzaki na wyświetlacz LCD,
    2) inną ciekawą dolegliwością jest to, że jak wcisnę dowolny przycisk na klawiaturze 4x4 który wykonuje jakąś pętlę (czyli np. po przytrzymaniu klawisza "1" ma mi wracać w to samo miejsce, czyli na wyświetlaczu tylko widzimy migotanie, przez odświeżanie wyświetlacza) to po stałej czasowej zawsze się resetuje (zawsze po ok 5s) - zaznaczam, że mam wyłączonego watchdoga i JTAGA.
    3) ostatnią dziwną rzeczą jest to, że jak na klawiaturze 4x4 ( z czytywana przez skanowanie w pętli while() ) kilka razy wcisnę przycisk w dowolnej kolumnie inny niż bym chciał to mi wejdzie do podprogramu zdefiniowanego dla zupełnie innego przycisku ( zaznaczam, że tylko w obrębie tej samej kolumny, czyli np. w menu1 mam podprogramy dla przycisku 1 i 4 a będę wciskać wielokrotnie 7, to mi w końcu wskoczy w podprogram dla klawisza 1). Tu też nie wiem co jest powodem. Klawiaturę połączyłem tradycyjnie poprzez microswitche i jest podpięta do portu C.

    Projektuje właśnie PCB i z wiedzy teoretycznej wnioskuje, że przy równo rozłożonej masie ( a nie jak na płytce stykowej, gdzie jest kilka szyn GND połączone drucikiem) oraz bliskości AVR z innymi elementami elektronicznymi (chodzi mi głównie o kondensatory, które powinny być bardzo blisko pinów zasilających) powinny moje dolegliwości zniknąć (głównie z myślą o problemie 1). Tylko czy oby na pewno??
  • #2 9529230
    Fredy
    Poziom 27  
    Jeśli kwarc masz też na kablach długości 40cm to się wogóle dziwię że to działa. Zwróć uwagę, że pojemności koło kwarca to około 22pF, a pojemność twoich kabli jest dużo większa i co gorsza zmienna. Także i tak dziwnę że to jakość działa.
    Spróbuj dać kwarc z kondenstaorami wprost przy procku, dodać kondensator na zasilanie i reset wprost na nogi i powinno się poprawić znacznie.
    Przerwanie lepiej przerób jako reagujące na zbocze.
  • #3 9529231
    lukasz_elektronika
    Poziom 13  
    kondensatory powinny byc jak najbliżej pinów zasilających procesor. temat nieraz był wałkowany na elektrodzie. Dodatkowo reset podpięty przez rezystor do plusa zasilania i kondensator. Ja w swoim projekcie mam krańcówki podpięte na 2m przewodach i zawsze reaguje normalnie
  • #4 9529243
    biedron2006
    Poziom 10  
    Korzystam z wewnętrznego zegara 8MHz, resety i wszystkie nóżki są podpięte standardowo czyli przez kondensatory i reset też oczywiście przez rezystor do zasilania. Kwestia tej odległości. Pewnie to jest problem z tym, że się krzaczy tak przy przerwaniach. Jak myślicie? Tak czysto teoretycznie?
  • #5 9529259
    lukasz_elektronika
    Poziom 13  
    daj to wszystko najpierw jak najbliżej ATMEGI a potem projektuj płytkę a jesli nie możesz to kup moduł propoxu z ATMEGĄ128 na pokładzie tam wszystko jest możliwie najbliżej. Zaoszczędzi Ci to sporo zachodu i późniejszych problemów
  • #6 9529280
    biedron2006
    Poziom 10  
    Dobra, to przetestuje jak się uda z kondensatorami przy ATmedze i zobaczę jakie dało to efekty. A co może być przyczyną tego, że się resetuje przy zwarciu przycisku??
  • #7 9529302
    lukasz_elektronika
    Poziom 13  
    cięzko powiedzieć nie widząc jak to masz wszystko podłączone. Byc moze ze względu na impulsowy pobór prądu przez mikroprocesor i brak odsprzęgania uruchamia sie zabezpieczenie układu. A napięcie na zasilaniu po wciśnieciu przycisku nie spada Ci poniżej wartości ustawionej w fusach w sekcji BOD?
  • #8 9529304
    biedron2006
    Poziom 10  
    A na zbocze to nie bardzo mogę, bo mi układ nie działa tak jak bym chciał, ze względu na to, że mam kontaktrony podłączone do przerwań INT1-INT3 jako sygnalizatory i jak wzbudzi mi przerwanie wówczas musi być zmiana stanu, żeby znowu działały tak jak powinne. Więc jak kontaktrony się rozewrzą i wzbudzą przerwanie to kolejne uruchomienie przerwania, gdy kontaktrony dalej będą rozwarte już mi nie wzbudzą ponownego przerwania, co jest błędem w moim programie.

    Dodano po 2 [minuty]:

    BOD jest wyłączony
  • #9 9529322
    lukasz_elektronika
    Poziom 13  
    przerób zgodnie z podpowiedziami i daj znać czy pomogło
  • #10 9529327
    biedron2006
    Poziom 10  
    Dobra to też sprawdzę przy poprawieniu parametrów elektrycznych ATmegi.
    A ten ostatni problem, że jak wcisnę w kolumnie inny przycisk to wchodzi mi do podprogramu zdefiniowanego dla zupełnie innego przycisku. Może to też wina pojemności na stykach i jak zestawie to ładnie na płytce PCB to będzie już dobrze?

    Dodano po 40 [sekundy]:

    Dobra to przerabiam teraz i dam znać później.
  • #11 9529542
    dondu
    Moderator na urlopie...
    biedron2006 napisał:
    Całość działa na 8MHz, bo taki jest praktyczny maks dla płytek stykowych ...

    A skąd taki wniosek?
    Nie ma przeszkód z działaniem na wyższych zegarach, jeżeli zachowujesz podstawowe zasady tworzenia projektów.

    biedron2006 napisał:
    W związku z tym przewody od mikrokontrolera do płytki stykowej mają długość niecałe 40cm.

    Faktycznie trochę długie, ale żeby zaraz robić PCB? Skróć je.

    Dziwne zachowanie ATmegi 128

    biedron2006 napisał:
    ... jak na płytce wykonam zwarcie pinu z masą, aby wzbudzić przerwanie wówczas (średnio raz na 10 wykonanych takich powtórzeń) procesor się zawiesza, resetuje, albo wyrzuca krzaki na wyświetlacz LCD,...

    A czym to zwarcie rozbisz?


    biedron2006 napisał:
    ... inną ciekawą dolegliwością jest to, że jak wcisnę dowolny przycisk na klawiaturze 4x4 który wykonuje jakąś pętlę (czyli np. po przytrzymaniu klawisza "1" ma mi wracać w to samo miejsce, czyli na wyświetlaczu tylko widzimy migotanie, przez odświeżanie wyświetlacza) to po stałej czasowej zawsze się resetuje (zawsze po ok 5s)

    Obstawiam, że przyczyną jest program, którego nie załączasz więc nie mamy możliwości Ci pomóc.


    biedron2006 napisał:
    ... 3) ostatnią dziwną rzeczą jest to, że jak na klawiaturze 4x4 ( z czytywana przez skanowanie w pętli while() ) kilka razy wcisnę przycisk w dowolnej kolumnie inny niż bym chciał to mi wejdzie do podprogramu zdefiniowanego dla zupełnie innego przycisku ( zaznaczam, że tylko w obrębie tej samej kolumny, czyli np. w menu1 mam podprogramy dla przycisku 1 i 4 a będę wciskać wielokrotnie 7, to mi w końcu wskoczy w podprogram dla klawisza 1). Tu też nie wiem co jest powodem. Klawiaturę połączyłem tradycyjnie poprzez microswitche i jest podpięta do portu C.

    Tak jak poprzednio program, lub sposób podłączenia klawiatury, ale nie raczyłeś podać schematu, więc ... wróżkami nie jesteśmy.


    biedron2006 napisał:
    Projektuje właśnie PCB ...

    Należysz do grona osób, które pracę zaczynają od końca, a potem się drapią po głowie, bo PCB nadaje się do wyrzucenia lub do przeróbek typu, tnij ścieżki i lutuj druciki. Najpierw uruchom swój projekt na tej stykówce którą masz, ale jeżeli lubisz tracić czas .... choć z drugiej strony doświadczenie w wyrzucaniu płytek do kosza jest także potrzebne.


    biedron2006 napisał:
    .... z wiedzy teoretycznej wnioskuje, że przy równo rozłożonej masie .... Tylko czy oby na pewno??

    Oczywiście w pewnym zakresie tak. Ale ten projekt na stykówce musi działać. Więc zastanów się jeszcze raz nad tym co robisz i przeczytaj:

    http://mikrokontrolery.blogspot.com/2011/04/fora-dyskusyjne-sa-bardzo-pomocne.html
    http://mikrokontrolery.blogspot.com/2011/04/zasilanie-mikrokontrolera.html
    http://mikrokontrolery.blogspot.com/2011/04/zakocenia-w-pracy-mikrokontrolerow.html
    http://mikrokontrolery.blogspot.com/2011/04/przycisk-drgania-stykow-debouncing.html
  • #12 9530333
    biedron2006
    Poziom 10  
    Efekty mojej dzisiejszej przeróbki są takie, że skróciłem przewody do ok 15 cm i dałem kondensatory większej pojemności, dla testów. Odpowiadając na pytania "dondu" - zwarcie wykonuje zwierając VCC z GND ( stykając ze sobą 2 przewody - nie dotykając ich przy tym ;] ); Nie zaczynam projektu od końca bo teraz jestem już w fazie testów, kiedy odkryłem te dolegliwości i stwierdziłem, że normalna płytka PCB wszystko załatwi, gdyż ogólnie program działa tak jak sobie założyłem. Sprawą klawiatury narazie się nie będę przejmować, bo przetestuje to jeszcze jak przyjdzie gotowa, nowa klawiaturka wykonana przez producenta (może moja płytka klawiatury lub te tanie microswitche powodują takie dolegliwości-drgania, pojemności itp., że jak naciskam inny przycisk kilkukrotnie to włącza się podprogram z pod innego przycisku-tylko dla kolumny jak opisywałem wyżej).
    I teraz tak... Już prawie uwierzyłem w sukces przeróbek, po tym jak przez 2 minuty bez przerwy zwierałem VCC z GND wywołując przerwanie. Było całkiem ok ( lepiej niż poprzednio), ale w końcu jednak się znowu wysypał.
    Na wyświetlaczu pojawiły się krzaki a po chwili się zresetował i program uruchomił się na nowo. Jak wcześniej podłączyłem kondki zaraz przy pinach VCC uP to było to samo...Wydaje mi się dalej, że to płytka stykowa, problemy z GND i zasilaniem. Układ mojego zasilania wygląda jak na obrazku.

    Dodano po 1 [minuty]:

    Dziwne zachowanie ATmegi 128
  • #13 9530887
    dondu
    Moderator na urlopie...
    biedron2006 napisał:
    ... zwarcie wykonuje zwierając VCC z GND ( stykając ze sobą 2 przewody - nie dotykając ich przy tym ;] );
    ....
    I teraz tak... Już prawie uwierzyłem w sukces przeróbek, po tym jak przez 2 minuty bez przerwy zwierałem VCC z GND wywołując przerwanie.


    Odnoszę wrażenie, że :
    - albo niewłaściwie opisujesz, to co robisz,
    - albo z elektroniką nie masz nic wspólnego.

    biedron2006 napisał:
    ...Wydaje mi się dalej, że to płytka stykowa, problemy z GND i zasilaniem.

    Tutaj masz rację. Wydaje Ci się.

    Rób jak uważasz, ale też nie oczekuj, że że efekty pojawią się prędko i bezboleśnie.
    Na siłę, za uszy ciągnąć Ciebie nie będę :)
    Powodzenia (będzie Ci potrzebne)!

    PS. W nagrodę nominacja do Złotych Myśli
  • #14 9532001
    biedron2006
    Poziom 10  
    Nie masz mnie za uszy ciągnąć, tylko podpowiedzieć co robię źle albo co zrobić, żeby było dobrze. Tobie na płytce stykowej wszystko dobrze działa.
    Mi nie chce, bo się czasem krzaczy, dlaczego?
    Do przerwania mam podłączoną m.in. zwykłą czujkę zalania zbudowaną na tranzystorkach taka jak tutaj :
    https://www.elektroda.pl/rtvforum/topic203646.html (ten na BC548)
    wywołuje przerwanie przez zwieranie w wodzie.
    Dlaczego raz na jakiś czas się krzaczy AVR przez wyrzucanie błędów na LCD, resetowanie czy zawieszenie??
  • #16 9532013
    biedron2006
    Poziom 10  
    Jeszcze jedno pytanie na przyszłość...czy jak używam AVR do sterowania przekaźnikami poprzez tranzystory sterujące, to oprócz diody podłączonej równolegle, niezbędne jest zastosowanie do zasilania cewki osobnego stabilizatora??

    Dodano po 1 [minuty]:

    Racze, racze - czytałem co mi podesłałeś i jestem za to wdzięczny, tylko pytanie, czy jak wykonam płytkę PCB zgodnie z zaleceniami to problem zginie?? Czy też Ci się wydaje, że to może być problem płytki stykowej?

    Dodano po 14 [minuty]:

    a to zwieranie odbywało się okresowo - raz po razie w fazie testów więc, nie rób ze mnie... i miło mi, że mogę być w tych twoich złotych myślach, bo widzę, że sprawiłem Ci tym frajdę... Doszukujesz się tylko atrakcji w przekręconych sformułowaniach zamiast pomóc i starać się zrozumieć co się do Ciebie pisze... dzięki za porady...
  • #17 9532057
    dondu
    Moderator na urlopie...
    Gdybyś czytał, to już dawno zrobiłbyś to, co jest napisane czerwonym tekstem na początku strony z pierwszego linku.
    Odnoszę także wrażenie, ze nie rozumiesz tekstu pisanego przeze mnie, w szczególności dot. ostatnich Twoich pytań. Ale to chyba moja wina, widocznie piszę zbyt skomplikowanie.

    Na tym koniec z mojej strony. Może ktoś inny będzie miał więcej cierpliwości.
    Powodzenia.
  • #18 9532119
    zumek
    Poziom 39  
    biedron2006 napisał:
    ... zaznaczam, że mam wyłączonego watchdoga i JTAGA.
    A co z M103C :?:
  • #19 9532154
    biedron2006
    Poziom 10  
    zgodność z M103C jest również wyłączona

    Dodano po 4 [minuty]:

    Dziwne zachowanie ATmegi 128
    ustawienie fusów

    Dodano po 30 [minuty]:

    Podstawa programowa do obsługi tego przerwania wygląda wydaje mi się standardowo.

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

    Dodano po 2 [minuty]:

    Schemat czujki podałem wyżej.
    https://www.elektroda.pl/rtvforum/topic203646.html
  • #20 9532543
    percol
    Poziom 12  
    1. Zamiast kombinowania z zewnętrznymi rezystorami wykorzystaj pull-upy (od tego są!) + możesz dodać niewielki C do resetu (np. 100..1000 pF)

    2. Obecnie nie używa się SIGNAL() do obsługi przerwania! Poczytaj dokumentację Atmela, od tego jest ISR().

    3. Nieużywane piny daj jako wejście i ustal ich stan na H pull-upami

    4. Jeśli masz wątpliwości co do klawiaturki, użyj innego sterowania (np. stanami pinów, najwyżej z części funkcji trzeba będzie chwilowo zrezygnować - przetestuj w ten sposób ich wszystkie kombinacje).

    Powodzenia!
  • #21 9532800
    janbernat
    Poziom 38  
    Czyli tak- wchodzimy w przerwanie, wewnątrz przerwania zezwalamy na globalną obsługę przerwań po czym wywołujemy alarm() w której jest _delay_ms(1000).
    Wewnątrz wywołujemy (menu) w której nie wiadomo czy nie ma opóźnienia.
    Gdzie ponownie ustawiamy zezwolenie na obsługę przerwania INT3- nie wiadomo.
    Po co kasujemy wewnątrz przerwania flagę przerwania- nie wiadomo.
    To musi pójść w maliny.
  • #22 9532928
    biedron2006
    Poziom 10  
    Przerwanie napisałem w taki sposób, bo zawsze w głowie mi siedziało, że musi ono być jak najkrótsze, a że potrzebuje sygnalizacji o wykryciu przerwania to mi czas w wektorze przerwań się znacznie wydłuża do ponad 1s. Dlatego też skacze sobie z przerwania do funkcji alarmującej a stamtąd do menu() w którym jest wyświetlana godzina. Po drodze dlatego kasuje za sobą flagi.

    Dodano po 2 [minuty]:

    ustawianie ponowne przerwania jest w wyborze w menu programu - jak podprogram uruchamiający czujkę i jest pod wartością "1" - tak jak zaczyna się powyższy fragment kodu

    Dodano po 11 [minuty]:

    Ponadto, wcześniej jak miałem bardziej rozbudowanego pająka (opisywanego w pierwszy poście tematu) to jak w pozycji neutralnej programu, w której była wyświetlana godzina, wykonałem przerwanie bez skakania do innych funkcji (czyli normalne przerwanie pod czas którego po zakończeniu obsługi przerwania powinien wychodzi z wektora i dalej robić swoje), to się od razu zawieszał.
    Teraz faktycznie tego nie ma, więc optymalizacja pająka się opłaciła...i widzę, że program bez skakania z przerwania do innych funkcji działa dobrze i się nie krzaczy. Więc skakanie z przerwania do podfunkcji jest dość istotnym błędem. Tylko czy można wykonywać dłuższe instrukcje w wektorze obsługi przerwań? zależy mi na sygnalizacji ponad 1s.
  • #23 9532993
    janbernat
    Poziom 38  
    No ale jak najkrótsze skoro wywołujesz w nim funkcję wykonującą się 1s?
    W przerwaniu ustaw tylko flagę a w głównej pętli ją sprawdzaj.

    Można w przerwaniu robić długą obsługę jeśli masz pewność że zakończy się ona przed następnym przerwaniem- jakimkolwiek przerwaniem.
    Wadą tego jest to że jak Ci przyjdzie do głowy rozbudować program i dodać jakiegoś RS czy timer- to wszystko musisz robić od nowa.
  • #24 9533045
    biedron2006
    Poziom 10  
    Dobra już chyba wiem w czym tkwi problem... Jak będę miał wątpliwości to napisze... Pozdrawiam i dziękuję, bo trochę mi się to poukładało.

    Dodano po 2 [godziny] 33 [minuty]:

    Z krzakami i zawieszaniem już sobie poradziłem, tylko męczy mnie ta ostatni rzecz, mianowicie jak wg załączonego fragmentu kodu:

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


    Dziwne zachowanie ATmegi 128

    błędy są takie, że jak kilkukrotnie wcisnę "0" (w ogóle nie biorące udział w odczycie w menu()) na klawiaturze które na schemacie jest jako przycisk S30 to w końcu mi wejdzie do opcji1() pod "1",

    Chciałem się jeszcze zapytać tak czysto teoretycznie dlaczego jak przytrzymam przycisk 5 zapętlający się w menu() to po stałej czasowej resetuje mi się AVR. Zawsze po ok 5s, gdzie rozkład fusów wygląda jak pokazałem w jednym z poprzednich postów?
  • #25 9533769
    lukasz_elektronika
    Poziom 13  
    Nie wiem czy dobrze myślę, ale wciskając cały czas przycisk 5 wchodzisz do funkcji menu ale nigdy z niej nie wychodzisz. Dane z miejsca w którym aktualnie jestes przed wejściem do funkcji menu zapisane są na stos. W pewnym momencie może go poprostu zabraknąc.
  • #26 9534155
    janbernat
    Poziom 38  
    Sensowne menu to zrobił tadzik85.
    Jest tu:
    25 Paź 2010 09:48pomocny post - solucja
    Re: [ATMEGA32][C]Jak zrobić proste menu na LCD ? koncepcja
    Odpowiedz z cytatem
    Przepraszam że tak- nie potrafię wkleić linka do konkretnej odpowiedzi.
    biedron2006- kup sobie książkę- będziesz robił tylko błedy- a tak to się szarpiesz z podstawowymi koncepcjami.
    Raz to stos jak napisał lukasz_elektronika.
    Dwa to wszelkie delay() wpuszczają w maliny.
    No i while() w funkcji- to trzeba naprawdę ostrożnie.
  • #27 9534217
    biedron2006
    Poziom 10  
    Dobra zamykam temat i dzięki za wszelkie wskazówki.
    Pozdrawiam!
REKLAMA