[ATmega8] Sekunda



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: Piotr <ppiwko_at_nospam_diablo.ict.pwr.wroc.pl>
Subject: [ATmega8] Sekunda
Date: Sat, 27 Aug 2005 16:00:37 +0200


Witam serdecznie.

Właśnie pisze oprogramowanie do zegarka elektronicznego na procesorze
ATmega8. Mam problem z idealnym odmierzeniem jednej sekundy.
Jaką powinienem zastosować częstotliwość pracy CPU, rozdzielczość timera
oraz wartość preskalera, aby dokładnie móc mierzyć sekunde. Dotychczas
najlepszą wartość jaką udało mi się osiągnąć jest:
1MHz/(256*256) = 15,258 Hz

Z góry dziękuję za rady.
--
Piotr

Poprzedni Następny
Wiadomość
Spis treści
From: Tomasz Piasecki <mtbrider_at_nospam__-nospam-_.poczta.onet.pl>
Subject: Re: [ATmega8] Sekunda
Date: Sat, 27 Aug 2005 16:28:27 +0200


Piotr wrote:

Z góry dziękuję za rady.
Jeśli rezonator 32768Hz wystarczy (chodzi o wydajność procka) to
właśnie taki się daje do zegarka.

TP.

--
| _ _ _ |
| _____ _| |_| | __ (o) | | __ __ _at_nospam_poczta.onet.pl |
| | \ | | |o \| \| |/o |/ _\| \ |
| |_|_|_| \_| |__/|_| |_|\__|\__||_| Tomasz Piasecki |

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: [ATmega8] Sekunda
Date: Sat, 27 Aug 2005 16:34:27 +0200


On Sat, 27 Aug 2005 16:00:37 +0200, Piotr wrote:
Właśnie pisze oprogramowanie do zegarka elektronicznego na procesorze
ATmega8. Mam problem z idealnym odmierzeniem jednej sekundy.
Jaką powinienem zastosować częstotliwość pracy CPU, rozdzielczość timera
oraz wartość preskalera, aby dokładnie móc mierzyć sekunde. Dotychczas
najlepszą wartość jaką udało mi się osiągnąć jest:
1MHz/(256*256) = 15,258 Hz

Skoro chcesz podzielic 1MHz przez milion, to liczymy:
1000000 = 10^6 = 2^6 * 5^6.

Z czego wniosek ze najwiekszym preskalerem binarnym moze byc 64.
Mozesz tez sprobowac innego kwarca, np 1.024 MHz.

Albo jeszcze inaczej - zostawiasz te 15.258 Hz, ale w przerwaniu
dodajesz do zmiennej 65536 [w domysle - mikrosekund].
Jak zmienna osiegnie milion - odejmujesz ten milion od zmiennej
i zmieniasz czas o sekunde. Nie bedzie to odmierzalo za kazdym razem
dokladnie sekundy, ale w dlugim okresie dokladnosc bedzie zachowana.

Biorac pod uwage ze wspolny podzielnik obu tych liczb jest spory -
mozesz obie liczby podzielic proporcjonalnie - np co przerwanie
dodajesz 1024, a po przekroczeniu 15625 wyjdzie sekunda.

A moze warto zostawic longint, a nawet podniesc liczby - moglbys
zastosowac programowa korekcje chodu - tzn zliczac sekunde nie
co milion, ale np 1000001 czy 999998

A w ogole .. bedzie tam jakis akumulatorek ? Moze lepiej RTC,
ustawianie zegarka po wylaczeniu zasilania wk* troche..

J.


Poprzedni Następny
Wiadomość
Spis treści
From: "Piotrek Sz." <zumek_at_nospam_gazeta.SKASUJ-TO.pl>
Subject: Re: [ATmega8] Sekunda
Date: Sat, 27 Aug 2005 17:00:30 +0000 (UTC)


Piotr <ppiwko_at_nospam_diablo.ict.pwr.wroc.pl> napisał(a):

Witam serdecznie.

Właśnie pisze oprogramowanie do zegarka elektronicznego na procesorze
ATmega8. Mam problem z idealnym odmierzeniem jednej sekundy.
Jaką powinienem zastosować częstotliwość pracy CPU, rozdzielczość timera
oraz wartość preskalera, aby dokładnie móc mierzyć sekunde. Dotychczas
najlepszą wartość jaką udało mi się osiągnąć jest:
1MHz/(256*256) = 15,258 Hz

Z góry dziękuję za rady.

Tylko po co kombinować ;-)
ATMegi(ósemka również) mają na pokładzie bardzo fajny sprzęt , który należy
wykorzystać , jeśli zachodzi taka potrzeba.Weźmy na tapetę Timer2 , który ma
"coś" co nazywa się "Clear Timer on Compare Match (Auto Reload)".
1)Do rejestru Ocr2 wpisujemy 125(0x7D).
2)Do zmienej np.Licznik wpisujemy również 125(0x7D).
3)Definiujemy procedurę przerwania od OC2 , a niej np.:
OC2_Intr:
Dec Licznik
Brne koniec
Ldi Licznik,125
Rcall zaktualizuj liczniki zegarka
koniec:
Reti
4)Zezwalamy na przerwanie od OC2
5)Zezwalamy na przerwania globalnie
6)Ustawiamy preskaler dla na 64 , oraz ustawiamy bit nr 3 (WGM21)
i mamy dość dokładny zegarek ;)

Pozdrawiam
Piotr

PS
125*125*64=1000000




--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Poprzedni Następny
Wiadomość
Spis treści
From: zenon <zenon_at_nospam_wp.pl>
Subject: Re: [ATmega8] Sekunda
Date: Sat, 27 Aug 2005 19:35:58 +0200


Użytkownik Piotr napisał:

Witam serdecznie.

Właśnie pisze oprogramowanie do zegarka elektronicznego na procesorze
ATmega8. Mam problem z idealnym odmierzeniem jednej sekundy.
Jaką powinienem zastosować częstotliwość pracy CPU, rozdzielczość timera
oraz wartość preskalera, aby dokładnie móc mierzyć sekunde. Dotychczas
najlepszą wartość jaką udało mi się osiągnąć jest:
1MHz/(256*256) = 15,258 Hz

Na kwarcu 1Mhz nie uzyskasz dobrej dokładności - po pierwsze się nie
dzieli przez potęgę 2, a po drugie same kwarce nie są zbyt dokładne.
Po to ATMega8 ma w sobie RTC - kupujesz kwarc "zegarkowy" 32,768kHz
(tani, a znacznie dokładniejszy), podpinasz pod piny TOSC1/TOSC2 (bez
żadnych kondensatorów), konfigurujest timer2 jako RTC (ustawiasz bit AS2
w rej. ASSR), ustawiasz preskaler timera 2 na ile tam chcesz - i masz
całkiem fajny i dokładny zegarek ;-)

Poprzedni Następny
Wiadomość
Spis treści
From: =?ISO-8859-2?Q?=22Mi=B3osz_K=2E=22?= <news_at_nospam_miklobit.WYTNIJTO.com>
Subject: Re: [ATmega8] Sekunda
Date: Sun, 28 Aug 2005 22:13:54 +0200


zenon napisał(a):


Na kwarcu 1Mhz nie uzyskasz dobrej dokładności - po pierwsze się nie
dzieli przez potęgę 2, a po drugie same kwarce nie są zbyt dokładne.
Po to ATMega8 ma w sobie RTC - kupujesz kwarc "zegarkowy" 32,768kHz
(tani, a znacznie dokładniejszy), podpinasz pod piny TOSC1/TOSC2 (bez
żadnych kondensatorów), konfigurujest timer2 jako RTC (ustawiasz bit AS2
w rej. ASSR), ustawiasz preskaler timera 2 na ile tam chcesz - i masz
całkiem fajny i dokładny zegarek ;-)

Jest również na stronie atmela nota aplikacyjna (AVR134)
n.t. temat z kodem przykładowym i wyliczeniem
ile prądu będzie średnio procek pobierać.

--
Miłosz Kłosowicz

-------------------------------------------
AVR: narzędzia,moduły prototypowe (USB/CAN)
http://www.miklobit.com
-------------------------------------------