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 i domierzanie czasu na Timer T0

ST-44 17 Cze 2010 01:06 1152 3
REKLAMA
  • #1 8198696
    ST-44
    Poziom 14  
    Witam serdecznie
    potrzebuję zrobić odmierzanie czasu 1250us i drugie zależne od zmiennej. Chodzi mi o to, że w moim programie odwoływał bym się do przerwania które odmierzało by 1250us i po tym czasie nastąpił by powrót i wykonanie dalszych instrukcji, w drugim odwoływał bym się z parametrem ile ms ma zostać zliczone i też nastąpił by powrót po tym czasie, w tych przerwaniach nic by nie było wykonywane tylko odmierzanie czasu, miało by to działać tak jak _delay_ms(). Czy da się takie coś zrobić?

    Za odpowiedź z góry dziękuję.
  • REKLAMA
  • #2 8198703
    august_
    Poziom 27  
    Nie do końca zrozumiale napisałeś.
    Odmierzanie czasu oczywiście da się zrobić w przerwaniach i jest to najczęściej stosowany sposób.
    Dobrze jest wywoływać przerwanie co stały okres, który będzie wspólnym dzielnikiem obydwu czasów, które chcesz odmierzać.
    Np. 250us. Wtedy w przerwaniu inkrementujesz jakiś rejestr i sprawdzasz czy osiągnął wartość 5. Jeśli tak, to znaczy że minął czas 1250us. W tym samym przerwaniu możesz inkrementować inny rejestr i odmierzać czas 10000us.
  • REKLAMA
  • #3 8201977
    ST-44
    Poziom 14  
    Dzięki za zainteresowanie
    chodzi mi o to że mam program w którym po odebraniu informacji z PD3 na PD5 generuję przebieg prostokątny 400Hz (czyli potrzebuje odmierzać czas co 1250us). Po kolejnej informacji z PD3 zaczynam zliczać impulsy z PD3 i potrzebuje odmierzać czas 80ms. Po zliczeniu impulsów przechodzę do podprogramu w którym co jakiś czas będę potrzebował odmierzyć czas znowu 1250us oraz 100ms oraz 250ms.
    Chciałbym się dowiedzieć czy można zrobić przerwanie do którego odwoływało by sie tak jak do _delay_ms() z parametrem np. tak jak mówił august ile razy ma być inkrementowany jakiś rejestr?
    Czy mogli byście mi pokazać jak zrobić takie cóś:)

    Za odpowiedzi z góry dziękuję.
  • #4 8202004
    gaskoin
    Poziom 38  
    chyba nie zrozumiałeś o co chodzi z tym rejestrem.

    po prostu chodzi o to, że wywołujesz przerwanie(no może nie do końca Ty) co np 125µs

    i inkrementujesz w tym przerwaniu zmienną (to ten tajemniczy REJESTR - pośrednio).

    Jeżeli ta zmienna = 3, to znaczy, że minęło 375µs (3*125) no i tak to się w zasadzie przelicza. W Atmedze16 są chyba dwa rejestry OCR1A i OCR1B, więc możesz na jednym liczniku niezależnie odliczać dwa przedziały czasowe (przyda się).

    Polecam lekturę DS, na początku wiem, że trudno się wgryźć, ale w pewnym momencie zaczną się rzeczy, przez które za rękę przeprowadzić się nie da :)

    pozdrawiam, aaa no i oczywiście bardzo polecam http://74.125.39.106/ jest miliard stron o timerach i bilion tutoriali
REKLAMA