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

Jak zrealizować sygnalizację naciśnięcia przycisku za pomocą przerwania .

Jakub17 19 Gru 2016 17:46 735 7
REKLAMA
  • #1 16137503
    Jakub17
    Poziom 6  
    Witam.

    Procesor ATmega32

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


    Założenia programu: Dioda ma się palić przez czas trzymania przycisku (zwarcie do masy). W momencie puszczenia przycisku, dioda ma zgasnąć (potencjał VCC na pinie IMIT0 dzięki wewnętrznemu rezystorowi podciągającemu)

    Rzeczywistość: Po naciśnięciu i trzymaniu przycisku dioda zapala się i pali ale gdy puszczę przycisk, dioda nadal się pali mimo że przerwania nie występują już a dioda w pętli głównej main jest wygaszona.

    Pytanie:
    Dlaczego założenia programu nie są spełnione?
  • REKLAMA
  • Pomocny post
    #2 16137525
    grko
    Poziom 33  
    Niestety takie coś nie zadziała ponieważ jest toś takiego jak drgania styków. Podczas wciskania/puszczania przycisku wygeneruje się wiele przerwań. Temat tego typu pojawia się raz w tygodniu więc rozwiązania szukaj tam.

    Już pomijam to, że nigdzie w pętli główenej/przerwaniu nie masz wyłączania diody;)
  • REKLAMA
  • Pomocny post
    #3 16137582
    michalko12
    Specjalista - Mikrokontrolery
    Jakub17 napisał:

    Rzeczywistość: Po naciśnięciu i trzymaniu przycisku dioda zapala się i pali ale gdy puszczę przycisk, dioda nadal się pali mimo że przerwania nie występują już a dioda w pętli głównej main jest wygaszona.

    Wyobraź sobie, że PRZERWANIE to jest "impuls" lub "seria impulsów" w toku programu. W twoim przypadku jest to seria impulsów, które tylko zapalają diodę, nie ma momentu kiedy ta dioda mogłaby być gaszona.
  • #4 16137584
    Jakub17
    Poziom 6  
    grko napisał:
    Niestety takie coś nie zadziała ponieważ jest toś takiego jak drgania styków. Podczas wciskania/puszczania przycisku wygeneruje się wiele przerwań. Temat tego typu pojawia się raz w tygodniu więc rozwiązania szukaj tam.


    Nawet jeśli jest tak jak mówisz to wygeneruje się pewna skończona liczba przerwań a nie ich nieskończoność.

    grko napisał:

    Już pomijam to, że nigdzie nie masz wyłączania diody;)


    Jak to a to nie jest wyłączenie diody?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #5 16137589
    grko
    Poziom 33  
    @Jakub17 No dobrze. A jaka jest szansa na wykonanie kodu wyłączającego diodę po puszczeniu przycisku? :)
  • REKLAMA
  • #6 16137594
    Jakub17
    Poziom 6  
    michalko12 napisał:
    Jakub17 napisał:

    Rzeczywistość: Po naciśnięciu i trzymaniu przycisku dioda zapala się i pali ale gdy puszczę przycisk, dioda nadal się pali mimo że przerwania nie występują już a dioda w pętli głównej main jest wygaszona.

    Wyobraź sobie, że PRZERWANIE to jest "impuls" lub "seria impulsów" w toku programu. W twoim przypadku jest to seria impulsów, które tylko zapalają diodę, nie ma momentu kiedy ta dioda mogłaby być gaszona.


    No dokładnie, seria impulsów dzięki której wykorzystując bezwładność oka, widać ciągle zapaloną diodę (bo dioda w rzeczywistości zapala się i gaśnie z dużą częstotliwością) Po ustaniu impulsowania dla diody zostaje już tylko permanentny stan niski w głównej pętli programu PORTA &= ~(1<<PA6)

    Dodano po 55 [sekundy]:

    grko napisał:
    @Jakub17 No dobrze. A jaka jest szansa na wykonanie kodu wyłączającego diodę po puszczeniu przycisku? :)


    Wygasznie powinno być w pętli while?
  • #7 16137603
    grko
    Poziom 33  
    @Jakub17 To dlaczego wkleiłeś kod z pustą pętlą while? Może po to abyśmy po 10 postach doczekali się właściwego kodu?

    Temat zamknąłeś. Chciałbym jeszcze dodać, że nawet jeżeli przeniesiesz to wyłączane diody do pętli głównej to nie będzie to dobrze działało bo nie tak się obsługuje przyciski.
  • #8 16137607
    Jakub17
    Poziom 6  
    grko napisał:
    @Jakub17 To dlaczego wkleiłeś kod z pustą pętlą while? Może po to abyśmy po 10 postach doczekali się właściwego kodu?


    Czasami mam jakieś zaćmienie umysłu.
    Bo w sumie pracuje nad czymś innym i robiłem test na pojedynczej diodzie. Nie chciałem wrzucać zbędnego kodu który nie dotyczy tej kwestii.

    Dzięki za pomoc:)
REKLAMA