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

ATtiny2313 - Jak napisać kod w Assemblerze do generowania impulsu 18ms?

111lisu 22 Lip 2013 06:46 1725 3
  • #1 12547561
    111lisu
    Poziom 16  
    Witam
    Mam mały problem potrzebuje generować pojedyncze impulsy 18ms
    I szukam czegoś w Assembelrze niestety nie pisałem niczego w innym języku.
    Mam pytanie jak odmierzyć taki czas.
    Przepraszam za lamerskie pytanie, ale nie mam za dużej wprawy w pisaniu.
  • #2 12547574
    Steryd3
    Poziom 33  
    Najprostszym sposobem jest skorzystanie z języka wyższego poziomu np.C. Wtedy sytuacja się znacznie upraszcza. Nie mniej jednak tak w asemblerze jak i w C całość należy zrealizować dość podobnie. Pierwszą metodą która sprawdza się gdy nie mamy nic więcej do zrobienia a tylko odmierzenie czasu i nie używamy przerwań albo gdy ich używamy ale na dokładności odmierzania czasu nam nie zależy to generowanie opóźnień programowo. Polega to na tworzeniu pętli która wykona się określoną ilość razy i zawiera w sobie instrukcje nop absorbującą jeden cykl pracy mikrokontrolera. W języku C całość zostaje zrealizowana automatycznie gdy użyje się biblioteki delay. Kolejnym sposobem generacji opóźnień jest skorzystanie z obecnych w AVRach liczników. Należy odpowiednio licznik skonfigurować i uaktywnić odpowiednie przerwanie pisząc program jego obsługi.
    Jeżeli chodzi o asembler to polecam książkę Baranowskiego o AVRach- on tam z opóźnieniami dobrze się rozprawił.
  • #3 12547644
    BlueDraco
    Specjalista - Mikrokontrolery
    Czas odmierza się oczywiście timerem. Możesz nastawić timer na 18 ms, dobierając odpowiednio do częstotliwości procesora preskaler i wartość rejestru porównania.
    Możesz też zaprogramować timer na zgłaszania przerwać np. co 1 ms i odliczyć do 18 w procedurze obsługi przerwania, po czym programowo zmienić stan wyjścia.

    Zacznij od poczytania w dokumentacji mikrokontrolera o trybach pracy timera i możliwościach sprzętowego generowania impulsów przez timer.
  • #4 12547863
    excray
    Poziom 41  
    Więcej szczegółów. Potrzebujesz cyklicznie generować te impulsy? Czy po jakimś zdarzeniu np wciśnięty przycisk? A jeśli po zdarzeniu to po jakim i czy ma to być pojedynczy impuls? Seria impulsów o określonym czasie bądź ilości? Seria impulsów trwająca tak długo jak trwa zdarzenie? Czy stała generacja impulsów od momentu zdarzenia do nieskończoności? Czy jeszcze inna wersja? Opisz co, jak i po co.
REKLAMA