Mam problem z którym próbuje uporać się już od dłuższego czasu. Nie wiem jaką wartość powinienem wpisać do timera dwu bajtowego aby uzyskać przerwanie co sekundę. Nie pytałbym się tu o takie rzeczy ale nawet w książce "Mikrokontrolery dla początkujących" autor oblicza wartość timera pisząc sprzeczne równanie!
Od razu mówię że programuje w BASCOMIE jeśli to ma jakieś znaczenie.
Dane:
Preskaler = 1024
Częstotliwość taktowania = 16 000 000 Hz
A więc jeśli mam częstotliwość taktowania 16Mhz, Preskaler równy 1024 i używam timera 2-bajtowego do odmierzania sekundy to muszę wpisywać do niego wartość równą 49910 czy 49911?
Policzyłem obie jak duże znaczenie ma ta różnica wartości. Wynosi : 1s / ( 16 000 000 hz/ 1024) = ok. 0,000064 s <-- na każdą sekundę czyli po 4 h nagromadzi się różnica równa 0,000064 s * 3600 * 4 = 0,9216.
I rzeczywiście zegar śpieszy się po 4h o ok. 1 s względem zegara online ! Czy to wynik blednie wpisanej wartości (ja wpisałem 49 911) czy może zwykła niedokładność kwarcu?
Maksymalna wartość tego timera równa się 65535 ale przejście do podprogramu przerwania następuje dopiero gdy timer się "przekręci" (? <- tego nie jestem pewny proszę o potwierdzenie) czyli jakby cykl później
więc 65535 + 1 = 65536 <-- i właśnie tu nie jestem pewny czy powinno być 65535 czy 65536 ?
Sekunda zajmuje 1 000 000 uS czyli 16 000 000 cyki zegara. Preskaler jest ustawiony na 1024 czyli 16 000 000 / 1024 = 15 625
65536 - 15625 = 49911
Dobrze? Czy powinno być 49910?
Od razu mówię że programuje w BASCOMIE jeśli to ma jakieś znaczenie.
Dane:
Preskaler = 1024
Częstotliwość taktowania = 16 000 000 Hz
A więc jeśli mam częstotliwość taktowania 16Mhz, Preskaler równy 1024 i używam timera 2-bajtowego do odmierzania sekundy to muszę wpisywać do niego wartość równą 49910 czy 49911?
Policzyłem obie jak duże znaczenie ma ta różnica wartości. Wynosi : 1s / ( 16 000 000 hz/ 1024) = ok. 0,000064 s <-- na każdą sekundę czyli po 4 h nagromadzi się różnica równa 0,000064 s * 3600 * 4 = 0,9216.
I rzeczywiście zegar śpieszy się po 4h o ok. 1 s względem zegara online ! Czy to wynik blednie wpisanej wartości (ja wpisałem 49 911) czy może zwykła niedokładność kwarcu?
Maksymalna wartość tego timera równa się 65535 ale przejście do podprogramu przerwania następuje dopiero gdy timer się "przekręci" (? <- tego nie jestem pewny proszę o potwierdzenie) czyli jakby cykl później
więc 65535 + 1 = 65536 <-- i właśnie tu nie jestem pewny czy powinno być 65535 czy 65536 ?
Sekunda zajmuje 1 000 000 uS czyli 16 000 000 cyki zegara. Preskaler jest ustawiony na 1024 czyli 16 000 000 / 1024 = 15 625
65536 - 15625 = 49911
Dobrze? Czy powinno być 49910?