/****************************************************************
Ejercicio 1.
Señal de onda cuadrada a frecuencia de 10 kHz.
Usar temporizador (no vale PWM)
Un periodo dura 100us
Tengo que cambiar el signo de la salida cada 50us
****************************************************************/
#define pinSalida 25
volatile bool conmutaSalida;
hw_timer_t *timer = NULL;
/*
CuentaFinalizada() activa una variable booleana
que indica que debe conmutarse el valor de la salida
*/
void IRAM_ATTR CuentaFinalizada(void)
{
conmutaSalida = true;
}
void setup() {
pinMode(pinSalida, OUTPUT);
timer = timerBegin(0, 80, true); // Configurado a 1 MHz.
timerAttachInterrupt(timer, &CuentaFinalizada, true); // point to the ISR
timerAlarmWrite(timer, 50, true); // Como va a 1 MHz, si cuenta hasta 50, cuenta 50 us
timerAlarmEnable(timer); // Activa la alarma
digitalWrite(pinSalida, LOW);
}
void loop() {
if (conmutaSalida) {
conmutaSalida = false;
digitalWrite(pinSalida, !digitalRead(pinSalida));
}
}