Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATMega328P - Kilka przerwań i liczniki

DuMaM 03 Maj 2014 19:37 720 2
  • #1 03 Maj 2014 19:37
    DuMaM
    Poziom 10  

    Witam

    Jestem początkujący jeśli chodzi o mikrokontrolery. Jakiś czas temu zaczął mnie nurtować jeden problem. Robię projekt, który robi za termometr i zegarek oraz ma klawiaturkę 4 przyciskową do obsługi interfejsu. Później ma być jeszcze dodany czytnik kart microSD.

    Czujnik temperatury/wilgoci ma obsługę w postaci 1wire i wykonuje pomiar co 10sek jak licznik0 zgłosi przerwanie. Licznik1 zegarka odmierza co sekundę. Oba liczniki pracują w trybie CTC. Wszystko pięknie działa i teraz myślę jak podpiąć klawiaturę.

    W trakcie tych rozmyślań pojawiło się takie pytanie:
    "Co jeśli na raz zostanie zgłoszone kilka przerwań?"
    Mam tu na myśli coś takiego, że sobie licznik zegarka pracuje zgłosi przerwanie, ale w tym czasie będzie zgłoszone przerwanie od czujnika i do tego przyjdzie jeszcze od klawiatury (np z ADC).

    Czy wtedy licznik zegarka liczy sobie dalej, ładując nową wartość i czekając na swoją kolej, czy może jednak się zatrzymuje i czeka na obsługę? Jeśli zlicza sobie w tyle i czeka na przerwanie to co jeśli znów odliczy wymaganą wartość, a stare przerwanie jeszcze nie było obsłużone a już przyszło kolejne od tego samego modułu?

    Potrzebne to mi jest, bo jeśli klawiaturę zrobię w przerwaniach to będzie długo obsługiwana i powyższa sytuacja może zaistnieć, a nie chce rozregulować zegarka. Jeśli jakakolwiek z moich obaw zostanie potwierdzona to zrobię to w pętli głównej, ale mimo wszystko proszę o wyjaśnienie tematu tak bym wiedział na przyszłość.

    Proszę nie odsyłajcie mnie do wujka google bądź noty katalogowej, bo już szukałem, ale jak widać bez efektów :(

    Z góry dzięki.

    0 2
  • Pomocny post
    #2 03 Maj 2014 21:11
    mickpr
    Poziom 39  

    DuMaM napisał:
    Proszę nie odsyłajcie mnie do wujka google bądź noty katalogowej
    A jednak odeślę cię:
    http://www.atmel.com/Images/doc8161.pdf
    Strona 9, oraz strona 57 (tablica).
    Cytat:
    The interrupts have priority in accordance with their Interrupt Vector position.
    The lower the Interrupt Vector address, the higher the priority.

    Myślę, że to rozwieje twoje pytania :)
    A Wujek Google, też o tym mówi, np.
    http://www.robotyka.net.pl/mikrokontrolery-avr-czesc-5-przerwania/
    Cytat:
    Jeszcze trzeba wspomnieć o sytuacji, kiedy to wystąpią dwa przerwania w jednej chwili. Jest to rozwiązane w prosty sposób, każde przerwanie ma swój priorytet. Ten priorytet jest zależny od adresu wektora przerwania, im niższy adres tym wyższy priorytet. Na samym dole tej układanki jest reset, który musi działać zawsze.

    Polecam też : http://mikrokontrolery.blogspot.com/2011/04/problemy-c-przerwania.html

    0
  • #3 03 Maj 2014 22:39
    DuMaM
    Poziom 10  

    Dzięki widocznie coś źle wklepałem.

    To co podrzuciłeś dało mi jednoznaczną odpowiedz :P obsługa klawiszy w pętli głównej :]
    Szkoda, że nie ma tak jak na normalnym procesorze x86 bądź x64 gdzie przerwania wrzucane są do kolejki.

    Temat zamknięty.

    0
  Szukaj w 5mln produktów