Witam mam bardzo nietypowy jak dla mnie problem z układem który ostatnio wykonałem.
Mianowicie jest to centralka alarmowa oparta o uC ATmega16. Działa na tej zasadzie że pod wejście PB2(INT2) podpięty jest kontrakton (zwiera do masy) do którego przykładam magnes i albo rozbrajam albo uzbrajam centralkę.
Z grubsza to wygląda tak: PB2(INT2) skonfigurowane jest jako wejście z podciągnięciem do VCC(+) a przerwanie z tego wejścia aktywowane jest zboczem narastającym. Po przyłożeniu i puszczeniu magnesu do kontraktonu odpalane jest przerwanie a w jego procedurze ustawiania jest tylko "flaga_przycisk" która została zadeklarowania jako "volatile", następnie w głównej pętli (jeżeli ustawiona jest flaga "flaga przycisk" to czekam aż drgania styków ustaną i sprawdzam czy przycisk na pewno jest puszczony jeżeli tak to jeżeli alarm jest uzbrojony to go rozbrajam i zeruje flagę a jeżeli nie to go uzbrajam i zeruje flagę.
Wszystko działa ok do momentu kiedy np. nie mrugnę kontaktem w pomieszczeniu albo np. w drugim pokoju ktoś nie załączy czegoś do gniazdka albo nie dotknę czymś metalowym jakiejś nóżki procesora albo jakiejś innej metalowej rzeczy na płytce bo w tym momencie przerwanie samowolnie się odpala i wykonuje się wyżej opisana procedura.
Dodam że napięcie na całym uC jak i na samej nóżce PB2(INT2) w momencie np. mrugnięcia kontaktem jest stałe i nie "skacze".
Układ zasilany jest z zasilacza impulsowego 12V/2A ponieważ takiego potrzebuje do zasilenia syreny etc, napięcie jest dalej stabilizowane za pomocą LM7805 wraz z kondensatorami do filtracji i małymi kondensatorami ceramicznymi przy stabilizatorze jak i przy nóżce zasilania uC.
Ma ktoś jakiś pomysł dlaczego tak się może dziać? Bardzo proszę o pomoc.
Poniżej cały kod zródłowy w C do centralki:
Mianowicie jest to centralka alarmowa oparta o uC ATmega16. Działa na tej zasadzie że pod wejście PB2(INT2) podpięty jest kontrakton (zwiera do masy) do którego przykładam magnes i albo rozbrajam albo uzbrajam centralkę.
Z grubsza to wygląda tak: PB2(INT2) skonfigurowane jest jako wejście z podciągnięciem do VCC(+) a przerwanie z tego wejścia aktywowane jest zboczem narastającym. Po przyłożeniu i puszczeniu magnesu do kontraktonu odpalane jest przerwanie a w jego procedurze ustawiania jest tylko "flaga_przycisk" która została zadeklarowania jako "volatile", następnie w głównej pętli (jeżeli ustawiona jest flaga "flaga przycisk" to czekam aż drgania styków ustaną i sprawdzam czy przycisk na pewno jest puszczony jeżeli tak to jeżeli alarm jest uzbrojony to go rozbrajam i zeruje flagę a jeżeli nie to go uzbrajam i zeruje flagę.
Wszystko działa ok do momentu kiedy np. nie mrugnę kontaktem w pomieszczeniu albo np. w drugim pokoju ktoś nie załączy czegoś do gniazdka albo nie dotknę czymś metalowym jakiejś nóżki procesora albo jakiejś innej metalowej rzeczy na płytce bo w tym momencie przerwanie samowolnie się odpala i wykonuje się wyżej opisana procedura.
Dodam że napięcie na całym uC jak i na samej nóżce PB2(INT2) w momencie np. mrugnięcia kontaktem jest stałe i nie "skacze".
Układ zasilany jest z zasilacza impulsowego 12V/2A ponieważ takiego potrzebuje do zasilenia syreny etc, napięcie jest dalej stabilizowane za pomocą LM7805 wraz z kondensatorami do filtracji i małymi kondensatorami ceramicznymi przy stabilizatorze jak i przy nóżce zasilania uC.
Ma ktoś jakiś pomysł dlaczego tak się może dziać? Bardzo proszę o pomoc.
Poniżej cały kod zródłowy w C do centralki:
Kod: C / C++