Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Bascom Atmega - Program z wykorzystaniem timera do odmierzenia czasu. Pytanie.

TDA2593 03 Maj 2014 10:31 975 4
  • #1 03 Maj 2014 10:31
    TDA2593
    Poziom 9  

    Chcę napisac własny program z wykorzystaniem Timerów. Na początek proszę o wytłumaczenie dlaczego w poniższym programie:

    1. wykorzystano podzial częstotliwości zegara (po preskalerze 256) 250/125 zamiast wykonac jedno dzialanie?
    2. uzyto wartość początkową Timera0 = 250 przed Petlą do Loop End.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod



    Proszę o pomoc.
    Pozdrawiam.

    0 4
  • Pomocny post
    #3 03 Maj 2014 13:11
    Mateusz@
    Poziom 17  

    W tym kodzie jest błąd:
    Load Timer0 = 250 jest niepoprawnie zapisane bascom nie krzyczy błędem ale ta składnia nie działa.
    Powinno być
    Load Timer0, 250
    Ta funkcja ładuje do timera wartość 256-wartość, czyli w twoim wypadku 6.

    0
  • Pomocny post
    #4 03 Maj 2014 15:29
    emarcus
    Poziom 35  

    TDA2593 napisał:
    Chcę napisac własny program z wykorzystaniem Timerów. Na początek proszę o wytłumaczenie dlaczego w poniższym programie:

    1. wykorzystano podzial częstotliwości zegara (po preskalerze 256) 250/125 zamiast wykonac jedno dzialanie?
    2. uzyto wartość początkową Timera0 = 250 przed Petlą do Loop End.



    O ile wyjaśnienie podane przez Tomq jest błędne(!) [- obsługa programu (1 sec) wymaga naliczenia 125 przerwań od przepełnienia Timera0 a nie 8(!)], to drugie wyjaśnienie, choć poprawne w zakresie syntaxu jest w zasadzie dość mgliste.

    Zauważ więc że Timer0 w Atmega8 jest najgorszy timer jaki może być (!?). Możesz go użyć tylko w trybie 'Normal'; -znaczy to że za każdym razem wymaga pomocy processora aby mu wpisać do rejestru początkową wartość od której zacznie naliczać impulsy aż do jego przepełnienia, inaczej będzie liczył od zera do pełnego zakresu (256 impulsów), co na ogól jest bezuzyteczne.

    Teraz przeliczmy ile tych impulsów potrzeba dla odmierzenia 1 sec.
    Taktujesz processor 8 000 000 cykli/s; - tak samo jest taktowany prescaler, który dzieli tą częstotliwość przez wybrane wartości.
    Bezpośedni pomiar 1 sec nie jest możliwy niezależnie który prescaler wybierzesz
    Jednak, wybierając dzielnik 256 otrzymasz impuls na wejściu Timera0 co 0.032 ms, co z kolei daje możliwość odmierzenia 8 ms wykorzystująć 250 tyknięć.
    125 takich cykli da ci 1 sec.
    Abyś mógł zachować ciągłość tego procesu to musisz za każdym razem (także i pierwszym) ten timer obsłużyć (z tąd ten wpis przed pętlą Do...Loop).
    Oczywiście Bascom akceptuje pewną dowolność wyboru formy tego początkowego wpisu:

    Load timer0, 250 ' (tu Bascom dokonuje rachunku: 256-250 = 6 ; wpisujc do rejestru timera wartość 6).

    albo równoznaczną formę

    Timer0 = 6


    Nie możesz jednak mieszać tych reguł.

    e marcus

    0
  • #5 03 Maj 2014 21:09
    TDA2593
    Poziom 9  

    Bardzo Dziękuje za dokładną odpowiedż.

    Pozdrawiam.

    0