ISR(TIMER1_COMPA_vect) { if(playRun==true) rutina100(); } setup() { ............. ............. // Interrupciones cada 0,1 Segundos cli(); TCCR1A=0; TCCR1B=0; #if MODO_SEG == 0 // 0=999.762.128 nS 1=999.762.876 OCR1A=1562; TCCR1B |= (1<<WGM12); // 0 1 0 0 CTC OCR1A Immediate MAX TCCR1B |= (1<<CS10); // clk I/O /1024 (From prescaler) TCCR1B |= (1<<CS12); #endif #if MODO_SEG == 1 // 1=1.000.081.262 nS 0=1.000.0828 OCR1A=6253; //6252 DIV-256 TCCR1B |= (1<<WGM12); // 0 1 0 0 CTC OCR1A Immediate MAX TCCR1B |= (1<<CS12); // clk I/O /256 (From prescaler) #endif #if MODO_SEG == 2 // DIV-64 OCR1A=25031; // 25020 1.000.282.772 nS // 25015 1.000.082.800 nS // 25013 DIV-64 1.000.003.00 nS // 25013 DEDO 1.000.241.871 // DEDO 1.000.121.011 // 25013 otro reloj 999.289.372 nS // 25032 otro reloj 1.000.052.634 nS // 25031 otro reloj 1.000.012.119 nS TCCR1B |= (1<<WGM12); // 0 1 0 0 CTC OCR1A Immediate MAX TCCR1B |= (1<<CS10); // clk I/O /64 (From prescaler) TCCR1B |= (1<<CS11); #endif TIMSK1=(1<<OCIE1A); // Timer/Counter1, Output Compare A Match Interrupt Enable sei(); } |
DIV 1024 | 16000000/1024=15625/10=1562 | 999.762.128 nS |
DIV 256 | 16000000/256=62500/10=6250 | 1.000.081.262 |
DIV 64 | 16000000/64=250000/10=25000 | 25020 1.000.282.772
nS 25015 1.000.082.800 nS 25013 1.000.003.000 nS 25013 1.000.241.871 ns DEDO 25013 1.000.121.011 ns DEDO2 25013 999.289.372 nS otro reloj 25032 1.000.052.634 nS otro reloj 25031 1.000.012.119 nS otro reloj |