Witam,
Chcę zbudować bardzo prosty zegarek a tak właściwie stoper. Chciałbym żeby mylił się co najwyżej 1min/tydzień. Napisałem program z użyciem timera, ale zegarek po ośmiu godzinach spóźnia 20 sekund.
Czy wewnętrzny oscylator działa stabilnie, to znaczy jeżeli ma częstotliwość odbiegającą od 4Mhz to taka będzie czy będzie się wahała i miała różne wartości?
Czy mogę skalibrować zegarek programowo: tzn. wpisywać przy przerwaniu inną liczbę do timera? jeśli tak to jak to policzyć?
Ja rozumowałem tak:
zamiast 8h jest 7h 59min 40 sekund, z czego wynika, że zamiast 0,25 mikrosekund (czyli okres kwarcu 4 MHz) jest około 0,2498 mikrosekund i na tej podstawie wyliczyłem nową liczbę do wpisania do timera. Czy moje rozumowanie jest dobre?
Chcę zbudować bardzo prosty zegarek a tak właściwie stoper. Chciałbym żeby mylił się co najwyżej 1min/tydzień. Napisałem program z użyciem timera, ale zegarek po ośmiu godzinach spóźnia 20 sekund.
Czy wewnętrzny oscylator działa stabilnie, to znaczy jeżeli ma częstotliwość odbiegającą od 4Mhz to taka będzie czy będzie się wahała i miała różne wartości?
Czy mogę skalibrować zegarek programowo: tzn. wpisywać przy przerwaniu inną liczbę do timera? jeśli tak to jak to policzyć?
Ja rozumowałem tak:
zamiast 8h jest 7h 59min 40 sekund, z czego wynika, że zamiast 0,25 mikrosekund (czyli okres kwarcu 4 MHz) jest około 0,2498 mikrosekund i na tej podstawie wyliczyłem nową liczbę do wpisania do timera. Czy moje rozumowanie jest dobre?
Config Portd.0 = Output
Dim Sekundy As Byte , Minuty As Byte , Godziny As Byte
Config Timer1 = Timer , Prescale = 64 : On Timer1 Co1s
Enable Interrupts
Enable Timer1
Sekundy = 0
Minuty = 0
Godziny = 0
Do
Loop
End
Co1s:
Incr Sekundy
If Sekundy = 60 Then
Sekundy = 0
Incr Minuty
If Minuty = 60 Then
Minuty = 0
Incr Godziny
End If : End If
Timer1 = 3036
Cls
Lcd Godziny ; ":" ; Minuty ; ":" ; Sekundy
Toggle Portd.0
Return