Witam wszystkich w swoim pierwszym poście
Wydawało mi się, ze moge znaleźć na kazde pytanie odpowiedź, ale jednak zmuszony jestem do napisania nowego tematu.
Otóż walczę z problemem dokładności chyba z miesiąc. Układ co 1min ma załączać na okreslone czasy przekaźniki.
Używam kwarcu 14,7456Mhz a układ notorycznie SPIESZY się o ok 0,5s na godzinę. Bawiłem się z recznym dopasowaniem, ale wymagało to zmian TAU o wartości 7-10 a dokladnosci pełnej brak.No i chyba nie o to chodzi zeby regulowac to przez tydzien, skoro jest to czysta matematyka a kwarce są w miare dokładne!
Rozumiem ze zrobiłbym coś "na około" i późniłby, ale on spieszy.
Wiem ze jest DS1307 , ale mój układ jest takim układem od którego zacząłem "zabawe" i sądziłem jednak ze uda mi się uzyskać dokładność do +/- kilku(nastu) sekund na miesiąc, korzystając z podstawowych elementów.
Najpierw program pracował na timerze 16bit w trybie przepełnienia, ale kilka dni temu doczytałem ze lepiej gdy chodzi w CTC wiec nieco przerobiłem kod.
W zasadzie nie zauważyłem różnicy w pracy miedzy trybami. Jak spieszył, tak spieszy i chyba dokładnie tyle samo.
Czy rzuca się Wam coś w oczy co powoduje to spieszenie się timera?
Bardzo proszę o sugestie, kod jest prosty jak budowa cepa i mam nadzieje ze to nie przez to spieszy
Pozdrawiam
Piotr

Wydawało mi się, ze moge znaleźć na kazde pytanie odpowiedź, ale jednak zmuszony jestem do napisania nowego tematu.
Otóż walczę z problemem dokładności chyba z miesiąc. Układ co 1min ma załączać na okreslone czasy przekaźniki.
Używam kwarcu 14,7456Mhz a układ notorycznie SPIESZY się o ok 0,5s na godzinę. Bawiłem się z recznym dopasowaniem, ale wymagało to zmian TAU o wartości 7-10 a dokladnosci pełnej brak.No i chyba nie o to chodzi zeby regulowac to przez tydzien, skoro jest to czysta matematyka a kwarce są w miare dokładne!

Rozumiem ze zrobiłbym coś "na około" i późniłby, ale on spieszy.
Wiem ze jest DS1307 , ale mój układ jest takim układem od którego zacząłem "zabawe" i sądziłem jednak ze uda mi się uzyskać dokładność do +/- kilku(nastu) sekund na miesiąc, korzystając z podstawowych elementów.
Najpierw program pracował na timerze 16bit w trybie przepełnienia, ale kilka dni temu doczytałem ze lepiej gdy chodzi w CTC wiec nieco przerobiłem kod.
W zasadzie nie zauważyłem różnicy w pracy miedzy trybami. Jak spieszył, tak spieszy i chyba dokładnie tyle samo.
Czy rzuca się Wam coś w oczy co powoduje to spieszenie się timera?
unsigned char sek=1;
ISR (TIMER1_COMPA_vect) {
if(--sek==0) { //jesli minela minuta, to
sek=60; //ustaw kolejna minute
(zrób....)
}
int main(void) {
DDRB=0x07;
TCCR1B |= (1 << WGM12); // Ustawia timer w tryb CTC - mode 4
TCCR1B |= (1 << CS12); // preskaler=256
OCR1A = 57600;
TIMSK |= (1<<OCIE1A); // wlaczenie przerwan CompareMatch
sei();
while(1) {
}
}
Bardzo proszę o sugestie, kod jest prosty jak budowa cepa i mam nadzieje ze to nie przez to spieszy

Pozdrawiam
Piotr