temporizador de 16 bits de ATMega: ¿Cómo calcular el conteo del temporizador?

2

Intento usar el temporizador de 16 bits de ATMega en cada tic del reloj midi. Un ritmo tiene 24 tics de reloj midi. Así por ejemplo 60 latidos por minuto = 1 latido por segundo = 24 tics por segundo.

¿Cómo puedo configurar el temporizador para x veces por segundo (dependiendo del valor de bpm)?

Estoy inicializando el temporizador en mi arduino con:

void setup()
{
cli();          // disable global interrupts
TCCR1A = 0;     // set entire TCCR1A register to 0
TCCR1B = 0;     // same for TCCR1B

// set compare match register to desired timer count:
OCR1A = 6510;

// turn on CTC mode:
TCCR1B |= (1 << WGM12);

// Set CS10 and CS12 bits for 1024 prescaler:
TCCR1B |= (1 << CS10);
TCCR1B |= (1 << CS12);

// enable timer compare interrupt:
TIMSK1 |= (1 << OCIE1A);

// enable global interrupts:
sei();
}

No obtengo el cálculo de OCR1A. Debería depender de un valor de bpm.

    
pregunta Flocked

2 respuestas

4

La frecuencia de la interrupción del temporizador será igual a la siguiente:

$$ \ frac {\ mbox {frecuencia del reloj del microcontrolador}} {(\ mbox {prescaler}) \ times (\ mbox {comparar valor de registro de coincidencia} + 1)} $$

Entonces, como mencionó que está usando un Arduino que viene con un cristal de 16 MHz, para lograr una frecuencia de interrupción de 24 Hz, el valor del registro de comparación de coincidencias (OCR1A) debe ser 650, dado un valor previo de 1024 .

Si desea cambiar el BPM, deberá configurar OCR1A sobre la marcha.

    
respondido por el Jason Wright
-1

enlace compruebe este sitio donde se activa la función de interrupción del temporizador cada 0,5 segundos el período es igual a 1/62500 (16 mhz con 256 preescala) tomaría un período para ir de 0000 0000 a 0000 0001 para determinar el valor de ocr1a (occr1a-0 + 1) * período = 0.5 (el temporizador cuenta desde 0 hasta occr1a) occr1a = (0.5 / periodo) +1

    
respondido por el Hilal

Lea otras preguntas en las etiquetas