Actualmente estoy tratando de cambiar la frecuencia PWM del estándar de 490 Hz a otra cosa, literalmente a otra cosa.
Anteriormente usé una biblioteca timer1
disponible en Arduino, pero me molestó y comenzó a configurar las cosas manualmente.
#include "test.h"
test::test()
{
pinMode(10,OUTPUT);
//Timer1 setup1 Interrup at 1hz
cli(); // Stop interrupts
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 15624; // Compare register value = cpu_fre/(interrupt_freq*prescaler)-1 (must be <65536)
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS12)| (1 << CS11) | (1 << CS10);
TIMSK1 |= (1 << OCIE1A);
sei(); //allow interrupts
}
ISR(TIMER1_COMPA_vect)
{
digitalWrite(10,!digitalRead(10));
}
aquí está el principal
#include "test.h"
test test1;
void setup()
{
Serial.begin(230400);
// put your setup code here, to run once:
}
void loop()
{
}
Esto debería crear una interrupción cada 1 Hz cambiando el estado del pin. pero en su lugar crea una señal PWM de 490 Hz ...
Cambiar el prescaler u OCR1A solo cambia el ciclo de trabajo de la señal, y no la frecuencia en sí misma.
¿Qué estoy haciendo mal aquí?