Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

TIMER0 w Atmega32 i Bascom - zależy mi na zrozumieniu zagadnienia

Bascomowiec 12 Lut 2017 23:59 630 8
  • #1 12 Lut 2017 23:59
    Bascomowiec
    Poziom 2  

    Dzień dobry,

    Znalazłem kod źródłowy sterownika pieca C.O. w internecie i chciałbym zrozumieć ideę działania TIMERA0 w Bascomie na podstawie poniższego kodu.

    Czy ktoś z Was może mi wytłumaczyć jak to liczyć? Jak dopasowywać obliczenia do innych rezonatorów kwarcowych.
    Czytam helpa i nadal nie mogę tego pojąć.
    Proszę o wyrozumiałość.

    Na początek zapytam czy dobrze liczę czas trwania taktu procesora dla poszczególnych rezonatorów:
    - 7.3728 MHz takt wynosi 135,633681 ns x 256 = 34,7222223us
    - 8 MHz takt wynosi 125 ns = 32us
    - 16 MHz takt wynosi 62,5 ns = 16us

    Dobrze to liczę? Pytam bo może mi się przydać w późniejszych wyliczeniach.

    A teraz do kodu:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Czy ktoś z Was wytłumaczy mi to prostym językiem?
    Jak to się liczy?
    Jak wyliczyć te flagi 4ms, 500ms i 1S dla innego rezonatora?

  • #2 13 Lut 2017 00:29
    niveasoft
    Poziom 34  

    Tym razem podam wędkę :P
    Łatwo wyliczyć dla jakiego rezonatora są te ustawienia mimo iż go nie zapisałeś.
    Timer0 potrafi liczyć do 255, ale w przerwaniu programista ładuje już timer wartością 5 więc do odliczenia zostaje mu tylko 250...
    Timer ma włączony preskaler 256 czyli taktów musi być 250x256=64000
    Procesory mają podane taktowanie w Hertz`ach czyli "na sekundę"
    Sekunda ma 1000 milisekund 64000x1000 ..a Ty bierzesz z tego tylko 4ms
    64000000/4=16000000 :D

  • #3 13 Lut 2017 09:21
    Bascomowiec
    Poziom 2  

    Dziękuję za odpowiedź, ale racji tego, że nie podałem wartości rezonatora to zrobiłeś to od końca i nadal nie wiem skąd wzięły się poszczególne liczby.

    Muszę to w końcu zrozumieć bo inaczej nic z tego a wszelkie książki wcale mi tego nie ułatwiają.

    Zacznijmy od początku te obliczenia.
    Będę zadawał pytania na poszczególnych etapach - ok?

    1. Timer0 potrafi liczyć do 255 - to akurat rozumiem bo wynika to z noty katalogowej Atmegi32.
    Załóżmy, że preskaler ustawiony jest na 1 czyli wtedy Timer0 odlicza do 255, ale jak wyliczyć ile trwa 1 takt i ile czasu odmierzy timer po osiągnięciu licznika 255 w zależności od wartości rezonator.
    Jest na to jakiś gotowy wzór?

    2. Teraz ustawiam np. preskaler na 256 - rozumiem, że wtedy licznik Timera0 mnożę przez wartość preskalera i wychodzi mi jakaś wartość.
    Zakładam, że nie ładuje to timera żadnej wartości na początku czyli:
    Np. 255 x 256 = 65280 - pytanie co to za liczba? co ona oznacza?

    3. W obliczeniach, które przeprowadził kolega w poprzednim poście wartość 64000 pomnożył przez 1000ms - ale dlaczego? skąd to wynika?

    Na początek takie 3 pytania jak wyżej.
    Może teraz coś więcej załapię i będę mógł sam przeprowadzić obliczenia o których też tutaj napiszę

  • #4 13 Lut 2017 10:57
    BlueDraco
    Specjalista - Mikrokontrolery

    Bascomowiec napisał:
    2. Teraz ustawiam np. preskaler na 256 - rozumiem, że wtedy licznik Timera0 mnożę przez wartość preskalera i wychodzi mi jakaś wartość.
    Zakładam, że nie ładuje to timera żadnej wartości na początku czyli:
    Np. 255 x 256 = 65280 - pytanie co to za liczba? co ona oznacza?


    Nic nie oznacza. Zacznij od przeczytania opisu timera w Datasheet. Preskaler dzieli zegar procesora na wejściu timera. Dzieląc częstotliwość taktowania procesora przez wartość preskalera uzyskujesz częstotliwość zliczania timera.

  • Pomocny post
    #5 13 Lut 2017 11:01
    niveasoft
    Poziom 34  

    Żeby nie zapomnieć na końcu to już tutaj napiszę, że liczy się to w programach bo one się rzadziej mylą, ale zrozumienie tematu jest oczywiście ważne. Jest kilka, a w pełni darmowych, kalkulatorów do tego.

    Timer jest urządzeniem sprzętowym wbudowanym w mikrokontroler. Najczęsciej taktowany jest w taki sposób, że sygnał zegarowy taktujący mikrokontroler przechodzi przez preskaler i taktuje licznik.
    Napisałem najczesciej bo do preskalera, zamiast taktów zegara można podłączyć zewnętrzny pin i będzie on liczył takty na tymi pinie.

    Preskaler to jakby skrzynia biegów a zaraz się okaże po co.

    Timer0 pomieści 256 ticków i kolejny tick ustawi w nim wartość 0 czyli Timer się przekręci i zacznie liczyć od nowa.

    Jeśli przyjmiemy jako bazową prędkość procesora równa się 8MHz to w ciągu sekundy do licznika wpłynęło by 8 000 000 ticków.

    W zależności od tego co chcesz osiągnąć to taka wartość najczęsciej Cię nie urządza bo Timer przekręci się 31250 razy na sekundę.

    Niemniej takie taktowanie występuje kiedy preskaler ma wartość 1 czyli skrzynia połączyła taktowanie 1:1.
    Preskaler może całkowicie odłączyć taktowanie Timera czyli jakby wrzucić na luz.
    Niemniej wybranie preskalera 8 powoduje że do preskalera musi wpłynąć 8 taktów żeby do timera dotarł 1

    To powoduje że na sekundę do timera trafia już tylko 8MHz/8 czyli 1MHz
    Następstwem tego jest to że timer będzie się przekręcał już tylko 3906,25 raza na sekundę.

    Teraz jedna z kluczowych kwestii
    Po co obliczać ile trwa jeden tick dla danej prędkości kiedy po preskalerze sygnał taktujący już nie ma tej prędkości.

    Tak więc dla 8MHz:

    Preskaler 1 - sygnał ma 8MHz
    Preskaler 8 - sygnał ma 1MHz
    Preskaler 64 - sygnał ma 125kHz
    Preskaler 256 - sygnał ma 31250Hz
    Preskaler 1024 - sygnał ma 7812,5Hz


    Oczywistym chyba jest ze sekunda ma 1000ms.

    Przypuśćmy że użyjesz preskalera 256 i pamiętaj że Timer0 potrafi zliczyć do 255 licząc od zera co oznacza ze jego pojemność to też 256.

    Tak wiec najdłuższy odcinek jaki pomieści w tym przypadku Timer wynosi:
    1000ms /Prędkość_procka/Preskaler/Pojemność_timera
    1000ms /8MHz/256/256=8,192ms

    Możesz sprawdzić na obrazku czy się zgadza z pierwszym lepszym kalkulatorem.

    TIMER0 w Atmega32 i Bascom - zależy mi na zrozumieniu zagadnienia

    Kalkulatory obliczą Ci i podpowiedzą czy żądany okres zmieści się w timerze przy wybranym preskalerze. Na dodatek licząc na piechotę można gdzieś zgubić jakąś cyferkę.
    Warto wiedzieć jak to jest obliczane, ale proponuje używać kalkulatora.

    Wygodnie dobiorą obliczenia.

    Na końcu chciałbym zwrócić uwagę na Twój poprzedni kod.
    Jeśli programista wpisuje do timera ze ma on wartość 5 to tak jakby timer odliczył już 6 z tych 256. Dlatego zostaje 250 do odliczenia.
    Pojemność to 256 a liczy do 255 bo wliczamy w to zero
    Kiedyś zrozumiesz :D

  • #6 13 Lut 2017 15:42
    Bascomowiec
    Poziom 2  

    niveasoft napisał:
    1000ms /Prędkość_procka/Preskaler/Pojemność_timera
    1000ms /8MHz/256/256=8,192ms


    Zanim jeszcze przystąpię do obliczeń i pokaże Ci moje wyniki zapytam wprost o wzór powyżej.
    Jeśli dokonam takiego działania jak na powyższym przykładzie to wynik nigdy nie wyjdzie 8.192ms.
    Jak Ty to podzieliłeś, że taki wynik Ci wyszedł?

  • Pomocny post
    #7 13 Lut 2017 15:52
    niveasoft
    Poziom 34  

    Pisząc książkę pewnie jest więcej czasu na przemyślenie czy dany zwrot dotrze do kogoś kto dopiero próbuje zrozumieć temat.
    Pisząc post niektóre rzeczy wydaja mi się oczywiste bo wynikają z poprzedzających je wypowiedzi. Widać nie zawsze.

    1000ms /((8MHz/256)/256)=8,192ms

    Lepiej? Programowanie to nie tylko wiedza nabyta, ale też umiejętność główkowania samemu. Nie zawsze Ci ktoś wszystko wyłoży ;)

  • #8 13 Lut 2017 17:36
    Bascomowiec
    Poziom 2  

    No teraz to się zrobiły jasne dla mnie te obliczenia.
    Bardzo Ci dziękuję za tak szczegółowe wytłumaczenie tematu.
    Żeby nie pisać tutaj zbyt wiele potrenuje obliczenia na różnych wartościach rezonatora, różnych dzielnikach i zobaczymy co mi wyjdzie.

    Jak to zrozumiem, albo będę miał jakiś wątpliwości to napiszę.

    Na obecną chwilę jestem wdzięczny za cierpliwość i naprawdę szczegółowe wyjaśnienie tematu.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME