Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

"fantomowe" sygnały wyzwalające przerwanie.

pawel912 01 Nov 2004 14:32 1275 10
  • #1
    pawel912
    Level 11  
    Witam

    Jak w temacie mam problem z fałszywym sygnałem wyzwalającym przerwanie.
    Moje urządzonko przedstawia się następująco:
    Sercem jest AT89CX051, do którego podłączone dwa przekaźniki oraz 3 pcf'y 8574 - jeden odbiera sygnały z klawiatury(6 przycisków), pozostałe dwa sterują dynamicznie cyfrowym wyświetlaczem LED.
    Do tego na krańcówkę wyprowadzone jest INT0 (sygnał startowy), a jako siódmy przycisk służy INT1(zatrzymanie awaryjne).
    No i jest też LCD.

    Działanie:
    Ustawiamy trzy zestawy po dwa czasy w każdym (dlatego tak ponieważ mamy trzy ramiona i dla każdego z tych ramion musimy ustawić czas grzania i chłodzenia).
    Od tego momentu urządzenie czeka na impuls startowy (zwarcie INT0 do masy), co staje się gdy drzwi od komór grzania i chłodzenia się zamkną. Gdy to się stanie włączają się oba przekaźniki i następuje zliczanie czasu. Oba czasy są prezentowanie na wyświetlaczu LED. Następnie po upływie jednego czasu wyłączany jest jeden przekaźnik a po upływie drugiego drugi przekaźnik.
    Cała operacja powtarza się od początku (poza programowaniem czasów) po otwarciu drzwi i obrocie ramion.

    Tak wygląda działanie w moich warunkach testowych (dom :) ), natomiast po podłączeniu tego wszystkiego do urządzeń w hali produkcyjnej zaczynają się dziać cuda...
    Po zaprogramowaniu czasów następuje obrót ramion tak aby ramię "A" znalazło się w piecu (a ramię "C" w chłodzeniu), czasami podczas tego właśnie obrotu procesor dostaje sygnał startowy i zaczyna zliczanie czasów (jak pisałem wcześniej powinien go dostać dopiero w momencie zamknięcia drzwi do obu komór) po czym od razu się zatrzymuje i startuje znowu i dalej już pracuje prawidłowo.
    Należy nadmienić, że impuls zatrzymywania jest tylko na przycisku (INT1) i nie jest w żaden sposób wyprowadzony na zewnątrz więc sam już nie wiem co jest grane.
    Od razu mówie że wszystko zostało poprawnie podłączone. :)

    Zrobiłem też mały eksperyment i odłączyłem od urządzenia przewód podłączony do INT0, a mimo to urządzenie dalej startowało podczas obrotu ramion. W tym momencie stawiałbym na zakłócenia elektromagnetyczne lub coś takiego bo ramiona są obracane przez spory silnik elektryczny.
    Udało mi się co prawda programowo zniwelować samoczynny strat i stop w złym momencie ale sądzę, że to chyba rozwiązanie na krótką metę.

    Mam więc pytanie czy ktoś się z czymś takim kiedyś spotkał?

    Z góry dziękuje za każdą odpowiedź!
    Paweł
  • #2
    LordBlick
    VIP Meritorious for electroda.pl
    A może jednak jakiś schemat, chociaż blokowy ? Wejścia przerwań dobrze jest podciągnąć przez rezystorek np. 10k do jakiegoś stanu ustalonego np. do Vcc albo GND. Ja spotkałem się z takim przypadkiem, ze w modyfikowanej maszynie przewód był pociągnięty od czujnika do szafy przekaźników i gdzieś tam zaplątany powracał jakimś innym dziwnym kabelkiem do sterownika. Sterownik z enkoderem w domu u mnie działał, a w maszynie losowo się resetował stan liczników enkodera. Podpiąłem to bezpośrednio i zaczęło biegać, pomimo że moja konstrukcja ma obudowę z PCV, a ekranowany jest tylko kwarc podpięty do GND (przylutowana obudowa)...
  • #3
    McRancor
    VIP Meritorious for electroda.pl
    Faktycznie wygląda to na silne zakłócenia!
    moja rada - podciągnij linię int1 do stanu przeciwnego do tego, którym jest wyzwalane, wtedy drobne prądy które mogą występować od silnego pola EM będą przez niego ściągane, a po naciśnięciu przycisku napięcie bez trudu zniweluje podciąganie i INT1 zadziała.

    Poza tym przyjżyj się okolicom kwarcu, tam mogą pojawiać się zakłucenia i prockowi czasy szwankują.
    Najlepiej porządnie zekranuj okolicę i sprawdź czy kondensatory są odpowiednio dobrane (najlepiej podaj częstotliwość kwarcu, sprawdzę w tabeli)

    Dorzuć jeszcze kondensator odsprzęgający tuż przy procesorze (100nF)

    Możesz jeszcze podciągnąć do jakiegoś stanu INT0, po co ma wisieć pływające - może to przez to coś się prockowi chrzani!

    Sam kiedyś miałem podobny problem - układ w domu chulał, a na dworze nie. Okazało się że układ nie był odpowiednio ekranowany, wystarczyło wsadzić kwarc z kondziorami w metalowy domek :)
  • #4
    MMarek17
    Level 19  
    Warunki przemysłowe stanowią nie lada wyzwanie dla projektantów.
    Wszelkiego rodzaju zakłócenia przenoszone po zasilaniu, pojemnościami, indykcyjnościami itd.
    Rada. Ekranowanie, odsprzęganie.
    Zamiast linii sygnałowych o dużych długościach należy zastosować np. transoptory.
    Wskazane ekranowanie kwarcu (ostrożne i szybkie przylutowanie jego obudowy do masy) oraz pozostałych elementów oscylatora (pętle masy) a także RESETu. Należy również zająć się wolnymi (wiszącymi) pinami mikrokontrolera - jeśli to konieczne i możliwe należy podciągnąć je do jakiegoś stanu.
  • #5
    lechoo
    Level 39  
    Zastosuj jakieś mocne podciąganie na INT1, 10k jak proponował ktoś powyżej to stanowczo za dużo. Kiedyś miałem podobny problem i dałem 220ohm - jak ręką odjął. Równolegle do przycisku nie zaszkodzi też dać jakiś kondensatorek, np. 100n.
  • #6
    MMarek17
    Level 19  
    Mocne podciąganie i kondensatorek może pomóc, ale i tak taki kabelek pociągnięty gdzieś w szafie robi za antenę, więc może się zdarzyć to co zdarzyć się nie powinno. Proponuję jednak zasterowanie transoptorem.
  • #7
    pawel912
    Level 11  
    Co do podciągania INT0 do jedynki (bo przerwanie wyzwalane jest przez zero) to juz takie cos probowalem z tymże podłączalem go bezpośrednio bez rezystora, nie wiem czy to robi jakąś różnicę. Z tymże jak pisałem nawet po odłączeniu przewodu przerwanie było wyzwalane więc wykluczam działanie tegoż przewodu w charakterze anteny :) Co do ekranowania to myślalem nad tym i chyba będe musial tego spróbować.

    Częstotliwość kwarcu to 11,05920.
  • #8
    MMarek17
    Level 19  
    Skoro bez przewodu na INT0 też szaleje to poszukaj od strony innych pinów, oscylatora oraz zasilania.
  • #9
    LordBlick
    VIP Meritorious for electroda.pl
    Albo po prostu bug w programie, np. coś wskakuje w procedurę obsługującą przerwanie, przejrzyj kod tuż przed tą procedurą, może brakuje tam zakończenia innej procedury...
  • #10
    McRancor
    VIP Meritorious for electroda.pl
    dla tego kwarcu zalecana pojemność kondziorków to 30/33 pF
  • #11
    pawel912
    Level 11  
    Nie pamiętam jakie dawałem ale dobierałem według dokumentacji '51 czyli 30pF +/- 10pF więc pod tym względem powinno być ok.

    Znalazłem metalowy "domek" który chronił kiedyś głowice jakiegoś radia :). Spróbuje nią zekranować scalaka i kwarc.