Witam,
Napisałem program, gdzie po przepełnieniu generowane jest przerwanie. Poniżej kod:
fclk=1MHz
licznik 8bitowy
Wykonałem obliczenia:
256/1000000=0.256ms (co taki czas generowane jest przerwanie)
Żeby sprawdzić, czy rzeczywiście tak jest, co 30000 wywołania zapalam diody, po kolejnych 30000 gaszę je. Wg obliczeń dioda powinna być włączona przez 7.68s i przy powyższym kodzie tak to mniej więcej wygląda, gdy mierzę stoperem. Problem pojawia się, gdy odkomentuję wpis do rejestru TCNT0. Wtedy czas wydłuża się do ok 9.2s.
Byłbym wdzięczny za wskazówki, co robię nie tak, dlaczego tak się dzieje. Dodam, że od bardzo niedawna mam styczność z uC, więc nie wszystkie rzeczy są dla mnie oczywiste.
Napisałem program, gdzie po przepełnieniu generowane jest przerwanie. Poniżej kod:
#include <avr\io.h>
#include <avr\delay.h>
#include <avr\signal.h>
#include <avr\interrupt.h>
#define D1 0
#define D2 1
#define D3 1
#define BUZZ 0
#define TSOP1 5
#define SW1 3
#define SW2 2
uint16_t k=0;
int main(void)
{
DDRA=1<<D1 | 1<<D2;
DDRD=1<<D3 | 1<<BUZZ;
TCCR0B |= 1 << CS00;
TIMSK |= 1 << TOIE0;
//TCNT0 = 0x0;
sei();
while(1);
return 0;
}
/////////////////////////////////////////////////
SIGNAL (SIG_TIMER0_OVF)
{
//TCNT0 = 0x0;
k++;
if(k==30000)
{
PORTA = 1 << D1 | 1 << D2;
}
if(k==60000)
{
PORTA = 0x0;
k=0;
}
}
fclk=1MHz
licznik 8bitowy
Wykonałem obliczenia:
256/1000000=0.256ms (co taki czas generowane jest przerwanie)
Żeby sprawdzić, czy rzeczywiście tak jest, co 30000 wywołania zapalam diody, po kolejnych 30000 gaszę je. Wg obliczeń dioda powinna być włączona przez 7.68s i przy powyższym kodzie tak to mniej więcej wygląda, gdy mierzę stoperem. Problem pojawia się, gdy odkomentuję wpis do rejestru TCNT0. Wtedy czas wydłuża się do ok 9.2s.
Byłbym wdzięczny za wskazówki, co robię nie tak, dlaczego tak się dzieje. Dodam, że od bardzo niedawna mam styczność z uC, więc nie wszystkie rzeczy są dla mnie oczywiste.