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

Pytanie początkującego o obliczenia

aqwe 11 Kwi 2010 17:52 1632 1
REKLAMA
  • #1 7948536
    aqwe
    Poziom 11  
    Witam wszystkich znających się w temacie i proszę o drobną pomoc

    Mianowicie, mam obliczyć częstotliwość migania diody na podstawie podanego programu, ogólnie to rozumiem działanie tego programu ale nie wiem jak poradzić sobie z tą częstotliwości. Mógłby mi ktoś to wytłumaczyć???

    Cytat:
    Przerwanie od przepełnienia tim 0

    tim0_ovf: push r16
    in r16,sreg
    push r16

    ldi r16,256-125 ;ustaw wartość pocz. T0
    out tcnt0,r16

    dec r21
    brne wy_t0
    ldi r21,125
    ;mov r21,r20

    sbis portb,3
    rjmp ust_led
    cbi portb,3
    rjmp wy_t0

    ust_led: sbi portb,3

    wy_t0: pop r16
    out sreg,r16
    pop r16
    reti

    Cytat:
    Początek programu

    init_t0:
    ldi r16,5 ;4=ck/256 5=ck/1024
    out TCCR0,r16 ;dla 8Mhz->31250x/s
    ldi r16,1
    out timsk,r16
  • REKLAMA
  • #2 7950195
    OlekM
    Poziom 17  
    Od razu mówię, że nie jestem asemblerowcem :-)

    Oto dane potrzebne do obliczeń:

    Rezonator ma częstotliwość 8MHz
    Prescaler ustawiony na 1024
    Po przepełnieniu, do timera ładowana jest wartość 256-125 (ale za pierwszym razem liczy od 0)
    W rejestrze r21 zrealizowany jest licznik, który liczy od 125 w dół (pierwsze zliczenie jest od 0 w dół - wykonanych będzie 256 kroków)

    Na podstawie powyższych danych:
    - Częstotliwość podawana do timera: 8MHz / 1024

    - Timer liczy w górę od wartości 256-125 do wartości 256 - ma zatem do wykonania 125 kroków. Innymi słowy, jego przerwanie będzie zgłaszane co 125 cykli zegara doprowadzonego do timera.
    Timer przepełnia się więc z częstotliwością 8MHz / 1024 / 125.

    Przy takich wynikach zwykle łatwiej jest mówić o okresie, który wynosi:
    1024 * 125 / 8MHz = 16 ms

    Zatem przerwanie od timera przychodzi co 16 ms.

    - W rejestrze r21 odliczmy 125 przepełnień timera po czym zmieniamy stan diody.
    Zatem stan diody zmienia się co 125 * 16 ms = 2 s.

    Na jeden okres przypada czas gdy dioda się świeci + czas gdy dioda się nie świeci. Zatem mamy dwie zmiany stanu na jeden okres, więc okres wynosi 4 s.

    Ostatecznie, by odpowiedzieć na pytanie o częstotliwość "odwracamy" okres otrzymując 0.25 Hz.



    Osobiście preferuję takie obliczenia robić w środowisku, które pozwala mi później przejrzeć swoje wyniki - lub wykonać szybko kilka podstawień do złożonego wzoru. Warto zaprzyjaźnić się np. z jednym z takich programów jak: Scilab, FreeMat bądź Maxima.
REKLAMA