AVR, czestotliwosc wywolywania funkcji

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); }

Reply to
Trix
Loading thread data ...

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

Reply to
Milosz Skowyra

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.