AVR, czestotliwosc wywolywania funkcji

Apr 14, 2004 4 Replies

Witam,



Mam procesor Atmel ATMEGA16. Napisalem program, w ktorym jest pewna funkcja obslugi przerwania wywolywana z pewna czestotliwoscia -- do procesora podlaczony jest kwarc wyjety z zegarka elektronicznego.



W dokumencie timery-avr.pdf

formatting link
znalazlem wzor na wyznaczenie czestotliwosci wywolywania mojej funkcji: f = Pckx / (PVal * MaxVal) ustawilem MaxVal = 8, PVal = 1024, Pckx = 32768 i w efekcie uzyskalem pozadane 4 Hz.



Niestety, w praktyce zegarek sie rozjezdzal. Eksperymentalnie zmienilem MaxVal z 8 na 7 i zaczelo dzialac.



Potem w dokumentacji Atmela znalazlem wzor: f = fclkI/O / (2 * N * (1 + OCRn)) wstawilem: fclkI/O = 32768, N = 1024, OCRn = 7 uzyskalem f = 2 Hz, a z obserwacji wynika, ze funkcja wywolywana jest z czestotliwoscia 4 Hz.



Juz doszedlem eksperymentalnie, ze wzor w moim przypadku to: f = fclk / (N * (1 + OCRn)) fclk - czestotliwosc kwarcu, N - prescaler, OCRn - wartosc maksymalna.



Niemniej chcialem zapytac, skad te roznice w dostepnych wzorach i ktory jest w koncu prawdziwy?



Trix. PS. Oto jak uruchamiam timer



... ...



ASSR = 1 << AS2; TCCR2 = (1 << WGM21) | (1 << CS22) | (1 << CS21) | (1 << CS20); /* prescaler 1024 */ TIFR = 1 << OCF2; TIMSK = 1 << OCIE2; OCR2 = 7;



while (ASSR & (1 << OCR2UB)) ;



sei();



while (1) ;



... ...



SIGNAL (SIG_OUTPUT_COMPARE2) { licznik++; wypiszLiczbeNaLCD(licznik); }



Gotowa³em wczoraj pomidorow± a tu patrzê rosó³ , z przepisu na pomidorow± wszystko wygl±da okej.

Nagle przypominamm sobie ¿e da³em pomidory a nie przecier , dodaje rzecier i wychodzi zupa pomidorowa. A o to wzór: woda+prezecier+rosó³+mleko. :)

No troche pominales, ale z samych pomidorkow tez zupka pomidorowa wyjdzie ;-) Grunt to czerwone pomidorki w duzej ilosci ;-))) Najlepiej gotowac w przerwaniu Timera 1 ;-)

Witaj

Nie chce mi siê grzebaæ w cytowanej dokumentacji, ale warto¶æ 7 ma sens. Gdy timer pracuje w trybie CTC, to jest zerowany w nastêpnym cyklu po osiagniêciu warto¶ci rejestru porównawczego. Tak wiêc dla o¶miu liczy:

0..1..2..8..0 - czyli 9 stanów. St±d my¶lê, ¿e w twoim przypadku chodzi o wzór: f = Pckx / ((PVal-1) * MaxVal) Ale tak naprawdê lepiej próbowaæ dok³adnie zrozumieæ sens dzia³ania na podstawie dokumentacji ni¿ liczyæ na jakie¶ wzorki.

Sprawd¼ na co jest ten wzór. Wed³ug mnie jest to wzór na czestotliwo¶æ generowania przebiegu na wyj¶ciu OC1, gdy jest ono ustawione w tryb, gdy ka¿de wywo³anie powoduje zmianê satanu wyj¶cia na przeciwny (toggle).

Ale do czego to siê mo¿e przydaæ?

Zwykle prawda jest w pdfie producenta Pozdr EM

Z tego wzoru wychodzi mi z jaka czestotliwoscia jest wywolywana funkcja obslugi przerwania SIG_OUTPUT_COMPARE2. Musze cos robic ze scisle okreslona czestotliwoscia.

Trix.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required