Od paru godzin męczę sprawę z CTC, czytam na forum i dochodzę do pewnych wniosków, nie wiem czy prawdziwych?:
Timer1 16 bit ATMEGA32, kwarc 8MHz preskaler 8 (1 takt = 1us):
1.jeżeli użyję CTC, rejestr OCR1 (OCR1A oraz OCR1B) załaduję wartością 50000 to uzyskam przerwanie dokładnie co 0,5s. Tylko, że jeżeli dobrze rozumiem, po wygenerowaniu przerwania Output compare(rejestr TIMSK bit OCIE1A ustawiony) i tak będę musiał za każdym razem zerować TCNT1, żeby znów liczył Timer1 od wartości 0 do zapełnienia 50000 (50000 taktów)
2. Jeżeli użyję normalnego przerwania z Timer1 (przepełnienie rejestru TCNT1 wygeneruje przerwanie) to mogę za każdym razem przy wywołanym przerwaniu ładować tą samą wartość czyli 15535 do TCNT1. Czyli będzie liczył od 15535 do 65535.
Moim zdaniem pkt. 1 = pkt 2. Tylko, że ten drugi jest łatwiejszy do implementacji.
Czy mam racje?
Czy jest inny sposób aby uP ładował mi wartość do TCNT1 automatycznie i zawsze liczył od tej wartości do zapełnienia?
Dodano po 3 [minuty]:
Ps. w pkt. 1 pomyliłem zera i powinno być 0,05s.
Dodano po 1 [minuty]:
w pkt.1 jeszcze jeden błąd nie będzie liczył do zapełnienia TCNT1 wasrtością 50000 tylko do porównania z OCR1 z wartością 50000.
Timer1 16 bit ATMEGA32, kwarc 8MHz preskaler 8 (1 takt = 1us):
1.jeżeli użyję CTC, rejestr OCR1 (OCR1A oraz OCR1B) załaduję wartością 50000 to uzyskam przerwanie dokładnie co 0,5s. Tylko, że jeżeli dobrze rozumiem, po wygenerowaniu przerwania Output compare(rejestr TIMSK bit OCIE1A ustawiony) i tak będę musiał za każdym razem zerować TCNT1, żeby znów liczył Timer1 od wartości 0 do zapełnienia 50000 (50000 taktów)
2. Jeżeli użyję normalnego przerwania z Timer1 (przepełnienie rejestru TCNT1 wygeneruje przerwanie) to mogę za każdym razem przy wywołanym przerwaniu ładować tą samą wartość czyli 15535 do TCNT1. Czyli będzie liczył od 15535 do 65535.
Moim zdaniem pkt. 1 = pkt 2. Tylko, że ten drugi jest łatwiejszy do implementacji.
Czy mam racje?
Czy jest inny sposób aby uP ładował mi wartość do TCNT1 automatycznie i zawsze liczył od tej wartości do zapełnienia?
Dodano po 3 [minuty]:
Ps. w pkt. 1 pomyliłem zera i powinno być 0,05s.
Dodano po 1 [minuty]:
w pkt.1 jeszcze jeden błąd nie będzie liczył do zapełnienia TCNT1 wasrtością 50000 tylko do porównania z OCR1 z wartością 50000.
