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.

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

Bascomowiec 12 Lut 2017 23:59 729 8
  • #1 12 Lut 2017 23:59
    Bascomowiec
    Poziom 3  

    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?

    0 8
  • #2 13 Lut 2017 00:29
    373522
    Użytkownik usunął konto  
  • #3 13 Lut 2017 09:21
    Bascomowiec
    Poziom 3  

    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ę

    0
  • #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.

    0
  • Pomocny post
    #5 13 Lut 2017 11:01
    373522
    Użytkownik usunął konto  
  • #6 13 Lut 2017 15:42
    Bascomowiec
    Poziom 3  

    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ł?

    0
  • Pomocny post
    #7 13 Lut 2017 15:52
    373522
    Użytkownik usunął konto  
  • #8 13 Lut 2017 17:36
    Bascomowiec
    Poziom 3  

    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.

    0