//Se pide programar una señal cuadrada de f=10kHz, por lo que T = 1/10E3 = 100us, por lo tanto t0n = 50u y t0ff 50u.
#define pinLED 13
volatile bool conmuta_led = true;
hw_timer_t *timer = NULL;
void IRAM_ATTR timerInterrupcion() {
conmuta_led = true;
}
void setup() {
Serial.begin(115200);
pinMode(pinLED, OUTPUT);
//Configuración del timer:
timer = timerBegin(0, 80, true); // Timer 0, divisor de reloj 80
timerAttachInterrupt(timer, &timerInterrupcion, true); // Adjuntar la función de manejo de interrupción
timerAlarmWrite(timer, 50, true); // Interrupción cada 50us ton/toff
timerAlarmEnable(timer); // Habilitar la alarma
}
void loop() {
if (conmuta_led) {
digitalWrite(pinLED, !digitalRead(pinLED)); // Cambia el estado del LED
conmuta_led = false;
}
//delay(10);
}
/*
#define pinLED 13
volatile bool conmuta_led = false; // Flag para saber cuándo cambiar el LED
hw_timer_t *timer = NULL;
unsigned long lastPrintTime = 0; // Tiempo para imprimir los ciclos
unsigned int cycleCount = 0; // Contador de ciclos
void IRAM_ATTR timerInterrupcion() {
conmuta_led = true; // Marca el flag cuando se activa la interrupción
}
void setup() {
Serial.begin(115200); // Inicia la comunicación serial
pinMode(pinLED, OUTPUT); // Configura el pin del LED como salida
// Configuración del temporizador
timer = timerBegin(0, 80, true); // Timer 0, divisor de reloj 80 (80 MHz)
timerAttachInterrupt(timer, &timerInterrupcion, true); // Adjuntar la interrupción
timerAlarmWrite(timer, 50, true); // Alarma cada 50us (10 kHz)
timerAlarmEnable(timer); // Habilitar la alarma
}
void loop() {
if (conmuta_led) {
digitalWrite(pinLED, !digitalRead(pinLED)); // Cambiar el estado del LED
conmuta_led = false; // Resetear el flag para esperar la próxima interrupción
cycleCount++; // Incrementar el contador de ciclos
}
// Verificar si ha pasado un segundo (1000 ms)
if (millis() - lastPrintTime >= 1000) {
lastPrintTime = millis(); // Actualizar el tiempo
Serial.print("Ciclos en 1 segundo: ");
Serial.println(cycleCount); // Imprimir el número de ciclos
cycleCount = 0; // Reiniciar el contador de ciclos
}
//delay(10);
}
*/