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

ATmega328 - Jak użyć timera bez przerwań do odmierzania czasu?

strikexp 05 Gru 2015 21:59 969 8
REKLAMA
  • #1 15214153
    strikexp
    Poziom 27  
    Mam następujący problem, mikrokontroler ATmega328 wykonuje program w którym nie może być przerwań. Jednak co pewien czas musi wykonać inne zadania, więc potrzebuje jakiegoś odmierzania czasu.

    Zastanawiam się czy dałoby się tak zrobić aby timer działał ale nie robił przerwań. Dopiero program w odpowiednim momencie sprawdzałby jakąś flagę/rejestr, i wykrywając zmianę jej przez timer wychodził z głóœnego programu i robiłby konieczną przerwę na inne czynności.
    Czy dałoby sie tak zrobić? Jeśli tak to jak nazywa się owy rejestr?
  • REKLAMA
  • Pomocny post
    #3 15214189
    dondu
    Moderator na urlopie...
    ... ale wtedy musisz mieć pewność, że obsłużysz to przed pojawieniem się kolejnej sytuacji ustawienia flagi przerwania.
    Oczywiście TIFR to tylko przykład, bo flagi są także w innych rejestrach, np. TXC w UCSRA.
  • REKLAMA
  • #4 15214280
    strikexp
    Poziom 27  
    Spoko dondu, mi jedynie chodzi o nieprzerywanie programu głównego w czasie wykonywania pewnych zadań. A obsłużyć przerwanie zdążę spokojnie gdy głóœny program zostanie wstrzymany w kontrolowany sposób.

    Rozumiem że flagi które podaliście trzeba samemu zerować po wykryciu wartości true? Czy może timer to robi i to go trzeba uruchomić ponownie po wykryciu true na fladze?
  • REKLAMA
  • #5 15214285
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #6 15214295
    strikexp
    Poziom 27  
    Właśnie tak robię jak piszesz, tyle że nie mogę ciągle przerywać głównego zadania. Dlatego wolę wykorzystać timer i raz na kilka sekund/minut aby obsłużyć zadanie poboczne.
  • #7 15214320
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #8 15214330
    dondu
    Moderator na urlopie...
    strikexp napisał:
    Rozumiem że flagi które podaliście trzeba samemu zerować po wykryciu wartości true?

    Tak - musisz o to zadbać, choć są wyjątki np. odczyt danej z UDR zgasi samoczynnie flagę RXC, bo:

    Cytat:
    When interrupt-driven data reception is used, the receive complete routine
    must read the received data from UDR in order to clear the RXC Flag, ...


    Pamiętaj, że flagi te czasami trzeba gasić wpisaniem jedynki - patrz pułapka nr 1: http://mikrokontrolery.blogspot.com/2011/04/avr-czyhajace-pulapki.html
  • #9 15214591
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA