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

[ATtiny13][Bascom]Błędne działanie przerwania zewnętrznego

wilkolaski 01 Wrz 2012 08:41 1743 7
REKLAMA
  • #1 11267096
    wilkolaski
    Poziom 18  
    Poprawiłem tytuł na bardziej oddający problem i zgodny z regulaminem p. 3.1.15.
    Ponadto proszę się zapoznać z zasadami korzystania z działu:
    https://www.elektroda.pl/rtvforum/topic349089.html
    LordBlick

    Witajcie.
    Oświećcie mnie dlaczego ten program nie działa tak jak powinien.
    Przełączam przełącznik który pin PB1 zwiera do masy (pojawia się zbocze opadające na INT0) program przechodzi do obsługi przerwania gdzie zatrzymuje silnik. Przełączam stan pinu PB4 na przeciwny, silnik rusza.
    Teraz działanie poprawne powinno być takie że przerwanie powinno być wyzwolone dopiero po kolejnej zmianie na pinie PB1 z stanu wysokiego na niski (wygenerowanie opadającego zbocza).
    Natomiast nie wiem dlaczego przerwanie generowane jest również przy zmianie stanu pinu PB1 z niskiego na wysoki czyli wygenerowaniu zbocza narastającego.
    Dodam że pin PB1 jest wewnętrznie podciągnięty do plusa zasilania ale podciągnięcie zewnętrznym rezystorem nic nie zmienia.

    Poniżej program.
    Kod: text
    Zaloguj się, aby zobaczyć kod
    [/code]
  • REKLAMA
  • #2 11267417
    piotrva
    VIP Zasłużony dla elektroda
    Niech Kolega poczyta co to są drgania styków - to one powodują generowanie przerwania w nieodpowiednich momentach.
  • REKLAMA
  • #3 11267446
    Mol
    Poziom 30  
    Przy If Przycisk nie masz end if.
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 11267703
    wilkolaski
    Poziom 18  
    piotrva wiem o drganiu styków przełącznika ale to nie one są problemem.
    Odlutowałem przełącznik i stykałem samymi kablami i efekt jest ten sam.

    Ogólnie problem polega na tym że przerwanie zachowuje się tak jakby reagowało albo na zmianę stanu logicznego na przeciwny albo na każde zbocze sygnału.

    Mol ten "end if" nie jest potrzebny jeżeli "if" zajmuje jedną linię
    Twoja zmiana programu troszkę nie pasuje do mojego zastosowania ponieważ "if" w głównej pętli ma wykrywać zmianę stanu logicznego na wejściu PB4. Natomiast zmienna "Stan" służy tylko do zapamiętania stanu logicznego PB4 podczas wywołania przerwania żeby po obsłudze przerwania rozpoznać zmianę stanu na PB4 i tylko wtedy włączyć silnik.

    Dodano po 2 [godziny] 40 [minuty]:

    Daję sobie spokój z tymi przerwaniami.
    Nie wiem dlaczego tak się dzieje.
    Poniżej podaję program w wersji bez przerwań, który działa tak jak powinien.
    Pozdrawiam i dziękuje za zainteresowanie tematem.
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #5 11269906
    piotrva
    VIP Zasłużony dla elektroda
    A myślisz że przy operacji kablami nie powodujesz drgań styków i setek zbocz wyzwalających int? Chyba o tym nie czytałeś zbyt dokładnie...
  • #6 11270131
    Mol
    Poziom 30  
    Wilkolaski z tą zmienną chodziło mi o to żeby wyłączyć przerwanie od razu jak się zgłosi.
  • #7 11271371
    wilkolaski
    Poziom 18  
    Piotrva masz rację nie doczytałem na temat drgań styków.
    Podaję link do strony gdzie jest to dobrze wytłumaczone.
    Drgania styków i ich zapobieganie
    Oprócz rozwiązania podanego w materiale z linku czy zastosowanie jakiegoś transoptora czy coś w tym stylu na wejściu int nie wyeliminuje problemu z drganiami ?

    Mol teraz rozumiem o co chodziło w twoim kodzie.
  • #8 11271572
    Mol
    Poziom 30  
    Jak wyłączysz od razu przerwanie to przeważnie drganie styku nie ma już na to wpływu. Ostatnio walczyłem z enkoderem mechanicznym 24 imp. na obrót i działa bez problemu.
REKLAMA