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

[Atmega32]Jak skonfigurować zegarki wewnetrzne (Timer1 i Timer0)?

pioke 25 Cze 2011 11:36 1812 13
REKLAMA
  • #1 9648067
    pioke
    Poziom 10  
    Witam,

    Chciałbym dowiedzieć się jak mogę łatwo przeliczyć preskaler i czas przerwać, tak abym mógł odmierzać czas na ATMEGA_32 16Mh Timerem1 oraz Timerem0.

    Z góry dzięki za pomoc.

    -------------------------------------------------------------------------------
    (PS. Jestem początkującym użytkownikiem tego forum mimo, że od roku czasu jestem na nim zarejestrowany. Mam nadzieję, zę ktoś mi pomoże.)
  • REKLAMA
  • #2 9648097
    tadzik85
    Poziom 38  
    Ściągnij sobie AVRcalc.
  • #3 9648124
    pioke
    Poziom 10  
    ok. Pobrałem i co teraz?

    JAK obliczyć czas przepełnień i liczbę potrzebnych cykli...
  • Pomocny post
    #4 9648226
    tadzik85
    Poziom 38  
    Przecież ten programik jest banalny:. Ustawiasz preskaler kwarc. i program sam podaje ci jakimi wartościami uzupełnić odpowiednie rejestry. Jak nie wiesz do czego służy dany rejestr odsyłam do dokumentacji.
  • REKLAMA
  • #5 9649124
    pioke
    Poziom 10  
    Program programem, ale lepiej to zrozumieć...
  • REKLAMA
  • #6 9649160
    tadzik85
    Poziom 38  
    Od tego jest datasheet książki i kursy. Ewentualnie odpowiem na konkretne pytanie konkretny problem. Ogólna dywagacja w tym miejscu nie ma sensu.
  • #7 9649191
    pioke
    Poziom 10  
    ok, więc może być na konkretnym przykładzie:

    Mam płytkę AND-TECH.PL
    EvB 4.3

    (mikroprocesor to: ATMEGA 32, 16 PU).


    Więc jak mogę sobie skonfigurować Timer1 i Timer0 na tym mikroprocesorze przy rezonatorze 16Mh by odmierzał mi czas (zegarek godziny:minuty:sekundy). Jak mogę dobrać preskaler i jak wygląda tok obliczeń. Informacje te są mi potrzebne na egzamin a niestety nie mogę tego zaczaić...
  • REKLAMA
  • #8 9649316
    tadzik85
    Poziom 38  
    A do noty zaglądałeś? Tak jak wól pewnie napisane. Z resztą jest odpowiednia aplication note od zegarków.
  • #9 9649340
    gaskoin
    Poziom 38  
    Poza tym wystarczy trochę pomyśleć. Skoro masz np zegar 1 Mhz, tzn że bez preskalera (preskaler = 1) dostajesz sygnał co µs. Mając preskaler np 100 dostaniesz sygnał co 100µs. Preskaler to nic innego jak dzielnik częstotliwości a obliczyć okres znając częstotliwość chyba potrafisz ?
  • Pomocny post
    #10 9649447
    piotrva
    VIP Zasłużony dla elektroda
    1. W jakim języku piszesz?
    2. Kalkuluje się to tak:
    Masz kwarc 16 000 000 Hz (16 MHz)
    i dajesz sobie jeden z dopuszczonych prescalerów, np. 64 i wtedy timer zlicza Ci impulsy z częstotliwością 16 000 000 / 64 = 250 000 Hz, czyli jeden impuls timera to 4*10^-6 s lub inaczej aby odmierzyć 1s musisz zliczyć 250 000 impulsów,
    Jako, że Timer0 jest 8 bitowy (czyli liczy maksymalnie do 255) to najlogiczniejszą wartością jaką możesz wybrać jest wartość 250, czyli trzeba doprowadzić do sytuacji w której timer 1000 razy zliczy do 250 i wtedy minie sekunda.
    Można to zrobić na 2 sposoby (albo stosując tryb CTC, albo ładując przy przepełnieniu do timera wartość 255-250, czyli 5) i wtedy przerwanie (CTC lub od przepełnienia) występuje dokładnie co 1ms. I wystarczy w przerwaniu dodać dodatkowy licznik do zliczania sekund (gdy licznik ms dojdzie do 1000 to zerujesz go i dodajesz jeden do sekund). I potem reszta to banał - odpowiednie zliczanie minut, godzin, dni, lat,... ;-)
  • #11 9649832
    pioke
    Poziom 10  
    w języku BasCOM piszę
  • #13 9649950
    pioke
    Poziom 10  
    tak, pomógł mi ten punkt 2, :). Właśnie na tym mi zależało najbardziej. Do tej pory nie bawiłem się w takie rzeczy. Dopiero egzamin z programowania mikrokontrolerów zmusił mnie do tego. Dziękuję za pomoc :D

    Dodano po 8 [minutach]:

    Mam jeszcze taki problem:

    O co chodzi z Przerwaniami Timer0, Timer1, INT0?
    Proszę o pomoc ;)
  • Pomocny post
    #14 9653294
    skrut355
    Poziom 13  
    drogi starosto int0 jako przerwanie zewnętrznę może posłużyć np tak jak na laborkach do obsługi odbioru rc5 gdy podczas wystąpienia tego przerwania odbierany jest kod rc5 z odbiornika podczerwieni . pml11
REKLAMA