cyberdar napisał: Jeśli potrzebujesz krótkich czasów to wystarczy timer 8-mio bitowy do dłuższych czasów 16-to bitowy.
No zgadza się - małe wartości można przechowywać na 8-bitach.
cyberdar napisał: Taktowanie masz z tego co sobie ustawisz jako źródło zegara w fusebitach. Może to być kwarc podpięty pod uC, zewnętrzny generator podpięty pod uC, wbudowany generator RC. Im mniejsze czasy tym lepiej używać wiekszych częstotliwości kwarcu i ewentualnie przerzucić się na timer 16-to bitowy.
OK, fakt odliczenie ilości cykli (przy danym kwarcu) wypadających na 1µs nie jest problemem, ale przecież funkcja overflow'a - SIGNAL bedzie coś miała swoje ciało np.
#include<avr/io.h>
#include<avr/interrupt.h>
// F_CPU = 8MHz
unsigned char cykl=0;
SIGNAL (SIG_OVERFLOW0) // 8-bitowy timer 0
{
if(cykl++==7){PORTC=~PORTC;}; // po przepełnieniu do 7 zmienia stan portu C
cykl=0; // zeruje wartość zmiennej cykl i od nowa nalicza od 0 do 7
}
int main ()
{
DDRC=0xFF; // port C jako wyjście + zewnętrzny pull-up
PORTC=0x00; // początkowy stan niski
for (;;){}
return(0);
}
to przecież wystąpią dodatkowe opóźnienia z racji wykonania ciała funkcji czyli nasza 1µs nieco się rozrośnie a tego nie chcemy - można tego jakoś uniknąć ??
Hmm... w sumie wpadłem na coś takiego, że jeśli wiadomo byłoby ile cykli zegarowych zajmuje uC-wi wykonanie if'a późniejsza zmiana stanu portu itd. to można by ustawić odpowiednio mniejszą wartość zmiennej cykl...?