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

[Atmega16 BascomAVR] - Instrukcje BascomAVR a wykorzystywanie timerów

MES Mariusz 27 Sie 2012 09:14 1512 1
REKLAMA
  • #1 11250248
    MES Mariusz
    Poziom 36  
    Witam.

    W pewnym sofcie dla Atmega16 wykorzystałem już:

    - Timer1 (16 bit) do odliczania 0,0001s odcinków czasu
    - Timer2 (8 bit) jest wykorzystywany przez odbiornik podczerwieni (instrukcja getrc5)

    Timer 0 niby jest wolny, ale nie wiem / nie jestem pewien czy nie jest on wykorzystywany przez jakieś używane przeze mnie instrukcje (np. print dla sprzętowego UART-a). Jest jakaś ściąga / wykaz co do instrukcji języka Bascom AVR w kontekście wykorzystywanych przez nie timerów i / lub przerwań ?

    Timer1 wykorzystuję do odliczania 0,0001s do sterowania fazowego triaków (każdy triak włączany po odliczeniu ustawionego opóźnienia, możliwość regulacji wielu triaków przy wykorzystaniu jednego przerwania timer1

    Timer2 do prawidłowego działania getrc5

    Timer0 chciałbym wykorzystać do cyklicznego odczytywania klawiatury (niezależnie od tego, czym jest zajęty program główny, tak aby zmiana nastaw dla jednego triaka nie blokowała możliwości równoczesnej zmiany nastaw dla innych triaków).

    Nie jestem tylko pewien, czy

    - timer0 nie jest już przez coś wykorzystywany
    - czy praca równoległych timerów nie będzie jakoś na siebie wpływać (program przerywa pracę na skutek działania timera1 by precyzyjnie wyznaczyć czas, a tu w tym samym momencie dochodzi kolejne przerwanie od innego timera, i co wtedy)

    Nie wspominając już np. o chęci obsłużenia transmisji po UART również za pomocą przerwań (póki co wystarcza mi obsługa UART w programie głównym bez wykorzystywania przerwań do tego).
  • REKLAMA
  • Pomocny post
    #2 11250280
    mickpr
    Poziom 39  
    MES Mariusz napisał:
    - czy praca równoległych timerów nie będzie jakoś na siebie wpływać (program przerywa pracę na skutek działania timera1 by precyzyjnie wyznaczyć czas, a tu w tym samym momencie dochodzi kolejne przerwanie od innego timera, i co wtedy)

    Timery działają niezależnie, ponieważ realizowane są sprzętowo. Nie będą na siebie wpływać. Program niestety (w tym program realizowany przez timery) nie działa "wielowątkowo", a wykonuje się sekwencyjnie. Dlatego możesz być pewny czasu zgłoszenia przerwania, ale nie możesz być pewny (już tak do końca) co do czasu jego obsłużenia.
    Aby przerwanie zostało obsłużone AVR musi wykonać (poza innymi operacjami o stałym czasie trwania) obecnie wykonywaną instrukcję do końca (mówię o instrukcji kodu maszynowego/assemblera).
    W twoim przypadku nie ma to znaczenia, ale np. przy generowaniu sygnałów (dla VGA) synchronizacji za pomocą timerów ma znaczenie, czy dany wykonywany podczas zgłoszenia przerwania rozkaz trwa 1, 2 czy 3 cykle.
    Dobrą zasadą jest ograniczenie czasu który AVR "spędza" w przerwaniu do minimum.

    MES Mariusz napisał:
    Nie wspominając już np. o chęci obsłużenia transmisji po UART również za pomocą przerwań (póki co wystarcza mi obsługa UART w programie głównym bez wykorzystywania przerwań do tego).

    Przerwanie od UART jest niezależne od innych przerwań (w tym od przerwania Timera), więc "go ahead".
REKLAMA