Witam, mam następujący problem. Chciałem przetestować timer0 w Atmega8-16PU, aby gasił i zapalał diodkę co jedną sekundę. Obliczyłem, że przy kwarcu 8MHz i ustawieniu preskalera na CK/8 program w C powinien wyglądać następująco:
Wydaje mi się, że czas obliczany jest następująco 1us * (256-6) * 4000 = 1 sekunda. Jak widać próbowałem na dwa sposoby sprawdzać przekręcenie licznika. Dioda nie zapala się jednak co sekundę, ale tak na oko co 7 do 8 sekund...
Nie wiem co jest nie tak.. (?)
Z góry dziękuję za pomoc i pozdrawiam.
Post raportowany
Proszę stosować tagi !
And!
#include <avr/io.h>
#include <avr/sfr_defs.h>
int main(void)
{
DDRB = 255;
PORTB = 0;
TCCR0 = 2;
TCNT0 = 6;
int pt = 4000;
for(;;)
{
TCNT0 = 6;
//while(bit_is_clear(TIFR, TOV0));
while(TCNT0 != 0);
if(--pt == 0){
PORTB ^= 2;
pt = 4000;
}
//TIFR = 1 << TOV0;
}
return(0);
}
Wydaje mi się, że czas obliczany jest następująco 1us * (256-6) * 4000 = 1 sekunda. Jak widać próbowałem na dwa sposoby sprawdzać przekręcenie licznika. Dioda nie zapala się jednak co sekundę, ale tak na oko co 7 do 8 sekund...
Nie wiem co jest nie tak.. (?)
Z góry dziękuję za pomoc i pozdrawiam.
Post raportowany
Proszę stosować tagi !
And!