Steryd3 napisał: mala.nm napisał: 31249 jest dla preskalera 256 i 1 s i dla częstotliwości wyjściowej 1Hz , natomiast 15624 jest też dla praskalera 256 i 1s ale dla częstotliwości 2Hz
To dopiero miszmasz...
Trzeba uporządkować...moja wersja to przerwanie od timera (gdy wartość rejestru OCR1A zrówna się z stanem licznika) co 1s (1Hz).
Przy generacji przebiegu(a więc zmieniając stan pinu przy każdym porównani na przeciwny) z wykorzystaniem tych "nastaw" otrzyma się przebieg o okresie 2s a tym samym 0,5Hz.
Nie bardzo wiem co znaczy "miszmasz... " ale zgadzam się że pewne pojęcia wymagają uporządkowania.
Z tego zbyt okrojonego fragmentu kodu przedstawionego przez "mala.nm" nie wynika że Timer1 ma generowac falę o określolnej częstotliwości i wysłac ją na pin wyjściowym (toggle pin OC1A).
Musiałoby to byc ustawione w TCCR1A, oraz ten pin (PB.5) musiałby byc wyjściem. DDRB | = ????
Skoro tych elementów konfiguracyjnych brakuje należy przyjąc ze odpowiedni port spełnia funkcję zwykłego portu I/O.
Ponadto nie widac nigdzie załączenia globalnego interruptu;
spodziewana edycja rejestru SREG (bit 7) albo 'sei'.
Wobec powyższego nalezy przypuszczac ze autorka potrzebuje wygenerowac jednorazowe interwały czasu o długości 1 sek. zakończone interruptem, byc może na potrzeby wewnętrznych processów lub innych funkcj a nie jako wygenerowana fala. Patrz Rejestr TCCR1A oraz tabela 58.
Istotne jest to że inaczej określana jest wartośc OCR1A przy generowaniu fali ciągłej, a inaczej dla odmierzenia pojedynczych intrwałów czasu.
Zatem do odmierzenia 1 sec przy 8MHz i prescaler=256; należałoby przyjąc OCR1A = 31250.
Dlaczego nie 31249 ??
- Bo tyle tyknięc potrzeba na 1 sec. przy tych ustawieniach.
Jeden tyk jest odejmowany przy automatycznym generowaniu fali, gdzie następuje pewnego rodzaju 'zakładka' (overlap) - w miejscu ostatniego impulsu, jest 1 kolejnego interwału z jednoczesnym toggle pinu w tymsamym momencie.
e marcus