Tengo AVR MCU.
Estoy jugando con el temporizador ahora.
Lo que necesito ? Tengo temporizador contando con cierta frecuencia. En cada interrupción, estoy incrementando la variable, y en algún lugar necesito verificar el valor de esta variable y si es igual a 100, necesito detener el conteo del temporizador, establecer un nuevo valor para la frecuencia y continuar la cuenta regresiva.
No puedo ver cómo detener el temporizador y establecer un nuevo valor para comparar.
He intentado no seleccionar ninguna fuente de reloj usando el registro de selector de mux, pero continúa contando.
¿Cuál es la forma correcta de hacer esto.
Aquí está mi código
// Arduino timer CTC interrupt example
// www.engblaze.com
// avr-libc library includes
#include <avr/io.h>
#include <avr/interrupt.h>
#define LEDPIN_UP 9
#define LEDPIN_DOWN 8
int current_value = 0;
void setup()
{
Serial.begin(9600);
// pinMode(LEDPIN_UP, OUTPUT);
// initialize Timer1
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 = 3123;
OCR1A = 1562;
// 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();
}
void loop()
{
//digitalWrite(LEDPIN_UP, current_value);
Serial.println(current_value);
if(current_value==255) {
TCCR1B |= (0 << CS10);
TCCR1B |= (0 << CS12);
Serial.println("Reseting timer");
}
}
ISR(TIMER1_COMPA_vect)
{
current_value++;
}