Witam.
Napisałem sobie prosty kod:
Zegar jest ustawiony na 8MHz, preskaler również na 8. Z tego co wyliczyłem (a także inne programy które znalazłem do liczenia wartości dla timer'a) przerwanie powinno być wywoływane co 1µs, i między zapaleniem a zgaszeniem diody powinna być przerwa ok 100ms. Tymczasem wygląda jakby timer wogóle nie pracował, dioda się świeci przez cały czas. Gdzie robię błąd, i czy w ogóle na wewnętrznym generatorze można uzyskać taki czas ?
---
Pozdrawiam, Michał
Napisałem sobie prosty kod:
/**
* Timer - test
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#define T0_INIT 0xFF //Wartość początkowa timera
volatile uint32_t timer; //Odliczanie czasu przez timer
/**
* Przerwanie przepełnienia timera
*/
SIGNAL ( SIG_OVERFLOW0 )
{
TCNT0 = T0_INIT;
if ( timer > 0 ) timer--;
}
/**
* Inicjacja timera
*/
void init_timer( void )
{
TIMSK = _BV( TOIE0 );
TCNT0 = T0_INIT;
TCCR0 = _BV( CS01 );
}
/**
* Głowny program
*/
int main( void )
{
DDRD = 0xFF;
PORTD = 0xFF;
init_timer();
while ( 1 )
{
cbi( PORTD, PD4 );
timer = 100000;
while ( timer ) {}
sbi( PORTD, PD4 );
timer = 100000;
while ( timer ) {}
}
}Zegar jest ustawiony na 8MHz, preskaler również na 8. Z tego co wyliczyłem (a także inne programy które znalazłem do liczenia wartości dla timer'a) przerwanie powinno być wywoływane co 1µs, i między zapaleniem a zgaszeniem diody powinna być przerwa ok 100ms. Tymczasem wygląda jakby timer wogóle nie pracował, dioda się świeci przez cały czas. Gdzie robię błąd, i czy w ogóle na wewnętrznym generatorze można uzyskać taki czas ?
---
Pozdrawiam, Michał