Czas w AT89C2051
Masz problem? Zapytaj na forum elektroda.pl
From: "Adam Simka" <adamsimka_at_nospam_poczta.onet.pl>
Subject: Czas w AT89C2051
Date: Wed, 7 Nov 2001 13:26:09 +0100
Witam grupowiczów
Zaczynam naukę programowania mikrokontrolerów AT89C2051 i mam pytanie:
jak przeliczać cykle na sekundy? tzn. do ilu timer ma liczyć aby minęła 1s ?
mam taki wzór
10000h-((11059200 Hz / (12 * FREQ))-17)
mam kwarc 6 MHz
o co chodzi w tym wzorze?? czym jest FREQ?? i czemu -17? no i 10000h?
Dziękuje za pomoc
Adamsi
From: <mstanisz_at_nospam_poczta.onet.pl>
Subject: Re: Czas w AT89C2051
Date: 7 Nov 2001 13:57:42 +0100
Witam grupowiczów
Zaczynam naukę programowania mikrokontrolerów AT89C2051 i mam pytanie:
jak przeliczać cykle na sekundy? tzn. do ilu timer ma liczyć aby minęła 1s ?
mam taki wzór
10000h-((11059200 Hz / (12 * FREQ))-17)
mam kwarc 6 MHz
o co chodzi w tym wzorze?? czym jest FREQ?? i czemu -17? no i 10000h?
Cykl trwa 12 okresów zegara. Licznik jest zwiększany w każdym cyklu. W związku
z tym masz cykl
T = 12*1/6000000 s = 2 us = 2*10e-6 s
Stąd liczba cykli do 1 sekundy
N = 1/T = 500000
Pojemność licznika to 16 bitów => maksymalna liczba zliczana = 65536 (liczy od
zera). Musisz więc zliczać dodatkowo przepałnienia licznika. I tak podzielić te
500000, żeby ci wyszła "całkowita liczba przepełnień". Chyba nic nie rypłem...
Pozdrawiam
Marcin
PS. Powyższego wzoru nie chce mi się analizować, ale wygląda, że zegar miał
11,059MHz, a freq to pewnie częstotliwość generowanej fali :-) M.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
From: "Chooch" <lawniczak_at_nospam_idea.net.pl>
Subject: Re: Czas w AT89C2051
Date: Wed, 7 Nov 2001 14:25:38 +0100
Zaczynam naukę programowania mikrokontrolerów AT89C2051 i mam pytanie:
jak przeliczać cykle na sekundy? tzn. do ilu timer ma liczyć aby minęła 1s
?
mam taki wzór
10000h-((11059200 Hz / (12 * FREQ))-17)
mam kwarc 6 MHz
o co chodzi w tym wzorze?? czym jest FREQ?? i czemu -17? no i 10000h?
Zdaje sie, ze to jest wzorek na obliczenie wartosci jaka nalezy wpisac do
odpowiednich SFRow aby otrzymac jakas tam predkosc przsylania danych UARTem.
Co do timerow to sa one inkrementowane co jeden cykl maszynowy czyli
czestotliwosc zegara podzielona przez 12. Tak wiec dla 6MHz zwiekszenie
timera o 1 nastepuje co kazde 2us. A wiec aby policzyc do 1s. tmier musialby
pomiescic 1s/2us=500000 a poniewaz ma dlugosc maksymalnie 16 bitow, wiec
moze liczyc maksymalnie do 65535 (2^16 -1) po czym nastepuje wygenerowanie
przerwania. W obsludze tego przerwania musialbys stwierdzac ile razy
nastapilo przepelnienie licznika i w momencie w ktorym byloby ono rowne 7
(500000/65535 = 7,629) zaladowac do timera wartosc [65535-(500000-7*65535)]
tak, aby przepelnienie nastapilo po czasie brakujacym do 1 sekundy.
chyba wyrazilem sie jasno (chociaz sam w to watpie),
CHOOCH
From: "Latocha Grzegorz" <glatocha_at_nospam_poczta.onet.pl>
Subject: Re: Czas w AT89C2051
Date: Wed, 7 Nov 2001 19:12:41 +0100
Zaczynam naukę programowania mikrokontrolerów AT89C2051 i mam pytanie:
jak przeliczać cykle na sekundy? tzn. do ilu timer ma liczyć aby minęła
1s
?
mam taki wzór
10000h-((11059200 Hz / (12 * FREQ))-17)
mam kwarc 6 MHz
o co chodzi w tym wzorze?? czym jest FREQ?? i czemu -17? no i 10000h?
Zdaje sie, ze to jest wzorek na obliczenie wartosci jaka nalezy wpisac do
odpowiednich SFRow aby otrzymac jakas tam predkosc przsylania danych
UARTem.
Co do timerow to sa one inkrementowane co jeden cykl maszynowy czyli
czestotliwosc zegara podzielona przez 12. Tak wiec dla 6MHz zwiekszenie
timera o 1 nastepuje co kazde 2us. A wiec aby policzyc do 1s. tmier
musialby
pomiescic 1s/2us=500000 a poniewaz ma dlugosc maksymalnie 16 bitow, wiec
moze liczyc maksymalnie do 65535 (2^16 -1) po czym nastepuje wygenerowanie
przerwania. W obsludze tego przerwania musialbys stwierdzac ile razy
nastapilo przepelnienie licznika i w momencie w ktorym byloby ono rowne 7
(500000/65535 = 7,629) zaladowac do timera wartosc
[65535-(500000-7*65535)]
tak, aby przepelnienie nastapilo po czasie brakujacym do 1 sekundy.
chyba wyrazilem sie jasno (chociaz sam w to watpie),
Nie byłoby prościej ustawić timer tak aby liczył zawsze 100ms, i zliczyć 10
przepełnień, wtedy nie ma problemu z końcówką.
Pozdrawiam. Latocha Grzegorz
From: <adamsimka_at_nospam_poczta.onet.pl>
Subject: Re: Czas w AT89C2051
Date: 8 Nov 2001 23:25:46 +0100
Dziekuje za pomoc - to juz jest jasne
Nastepne zagadnienie brzmi:
(Pisze w C51)
Napisalem zegar czasu rzeczywistego.
Zegar 6 MHz, przerwanie co 500us, Timer0 w trybie 2 (TL0 po przepełnieniu
ladowany jest zawartoscia TH0) w przerwaniu jest obsluga zegara. Po 40 cyklach
nastepuje odczyt klawiatury, po 2000 - zmienna secundy++. Pytanie brzmi: czy i
jak mam liczyc ilosc wykonanych cykli na sprawdzenie klawiatury? kilka us nie
robi znaczacej roznicy w czasie... ile cykli zajmuje np. warunek if??
Pozdrowienia
Adamsi
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
From: "Marek Lewandowski" <locust_at_nospam_poczta.onet.pl>
Subject: Re: Czas w AT89C2051
Date: Fri, 9 Nov 2001 00:03:05 +0100
Użytkownik <adamsimka_at_nospam_poczta.onet.pl> napisał w wiadomości
news:5564.0000078e.3beb0669_at_nospam_newsgate.onet.pl...
Dziekuje za pomoc - to juz jest jasne
Nastepne zagadnienie brzmi:
(Pisze w C51)
Napisalem zegar czasu rzeczywistego.
Zegar 6 MHz, przerwanie co 500us, Timer0 w trybie 2 (TL0 po przepełnieniu
ladowany jest zawartoscia TH0) w przerwaniu jest obsluga zegara. Po 40
cyklach
nastepuje odczyt klawiatury, po 2000 - zmienna secundy++. Pytanie brzmi:
czy i
jak mam liczyc ilosc wykonanych cykli na sprawdzenie klawiatury? kilka us
nie
robi znaczacej roznicy w czasie... ile cykli zajmuje np. warunek if??
A po co (i czy w ogóle) zatrzymujesz timer w przerwaniu? Normalnie leci
sobie dalej i nic mu nie przeszkadza, żę przerwanie się wykonuje, chyba, że
przepełni się w tym czasie...
--
Marek Lewandowski
locust_at_nospam_poczta.onet.pl ICQ10139051
http://locust.republika.pl