Witam,
napisałem program na moja atmege8l który ma za zadanie co 5s zapalać i gasić diodę z wykorzystaniem 16bitowego Timera1 w trybie CTC.
Wyliczyłem, że jeśli mam uC taktowany 8MHz to przy zastosowaniu prescalera 256 flaga OCF1A powinna być ustawiana co 1hz, przy ustawieniu rejestru OCR1A na 31250. Jeśli za każdym ustawieniem flagi będę ją kasował i zwiększał zmienną flags o 1 to 5s osiągnę w momencie gdy flags będzie mieć wartość 5. W teorii chyba się nie pomyliłem(chyba, że moje wyliczenia są błędne)? Jednak po napisaniu programu i wgraniu program nie do końca działa tak jak chciałem. Zamiast co 5s zapalać i kolejne 5s gasić to dioda jest zapalana i gaszona co ok.10s.
Atmege taktuję wewnętrznym zegarem ale chyba nie ma on aż takiej nie dokładności.
Mój kod:
napisałem program na moja atmege8l który ma za zadanie co 5s zapalać i gasić diodę z wykorzystaniem 16bitowego Timera1 w trybie CTC.
Wyliczyłem, że jeśli mam uC taktowany 8MHz to przy zastosowaniu prescalera 256 flaga OCF1A powinna być ustawiana co 1hz, przy ustawieniu rejestru OCR1A na 31250. Jeśli za każdym ustawieniem flagi będę ją kasował i zwiększał zmienną flags o 1 to 5s osiągnę w momencie gdy flags będzie mieć wartość 5. W teorii chyba się nie pomyliłem(chyba, że moje wyliczenia są błędne)? Jednak po napisaniu programu i wgraniu program nie do końca działa tak jak chciałem. Zamiast co 5s zapalać i kolejne 5s gasić to dioda jest zapalana i gaszona co ok.10s.
Atmege taktuję wewnętrznym zegarem ale chyba nie ma on aż takiej nie dokładności.
Mój kod:
Kod: C / C++