#define DAC2 26;
#define DAC1 25;
#define ADC1 34;
hw_timer_t * timer0 = NULL; // estructura de datos del timer
hw_timer_t * timer1 = NULL; // estructura de datos del timer
#define tiempo_tiemer0 80;
#define unsigned long frecuencia_timer0 5000;
#define tiempo_tiemer1 80;
#define unsigned long frecuencia_timer1 5000;
#define tiempo_timer2 80;
#define unsigned long frecuencia_timer2 5000;
int sen1 = 0;
int sen2 = 0;
int i1 = 0, i2 = 0, i3 = 0;
void IRAM_ATTR IRS_DAC1()
{
i1++;
sen1=1;
if(i1==ndatos)
{
i1 = 0;
}
}
void IRAM_ATTR IRS_ADC1()
{
i2=1;
}
void IRAM_ATTR IRS_DAC2()
{
i3++;
sen2=1;
if(i3==ndatos)
{
i3 = 0;
}
}
void setup()
{
// en el setup solo estan las configuracion de pines y timers
Serial.begin(115200);
pinMode(DAC2 OUTPUT);
pinMode(DAC1 OUTPUT);
pinMode(ADC1 INPUT);
analogReadResolution(12);
analogSetAttenuation(ADC_11db);
/*
Todos los timers tinenen la misma estructura ya que todos los elementos tienen la misma frecuencias
(200 Hz) por lo tanto, como la frecuencia de reloj es 80MHz, pongo en el prescaler 80 para bajar la
frecuencia a 1 MHz. Una vez hecho esto, hacemos que el timer cuente hasta 5000 por lo tanto, para bajar
la frecuencia a 200Hz
*/
//configuracion del timer 0
timer0 = timerBegin (0, tiempo_timer0, true);
timerAttachInterrupt(timer0, ISR_DAC1, true);
timerAlarmWrite(timer0, frecuencia_timer0, true);
timerAlarmEnable(timer0); // habilitamos el timer0
//configuracion del timer 1
timer1 = timerBegin(1, tiempo_timer1, true);
timerAttachInterrupt(timer1, ISR_ADC1, true);
timerAlarmWrite(timer1, frecuencia_timer1, true);
timerAlarmEnable(timer1); // habilitamos el timer1
//configuracion del timer 2
timer2 = timerBegin(2, tiempo_timer2, true);
timerAttachInterrupt(timer2, ISR_ADC1, true);
timerAlarmWrite(timer2, frecuencia_timer2, true);
timerAlarmEnable(timer2); // habilitamos el timer2
Serial.println("setup completado");
}
void loop()
{
/*
Se ha usado el sistema token-flag para las interrupciones de los timers,
esto quiere decir que cuando salta el timer una variable pasa de 0 a 1.
El programa combrueba constantemente si esa variable ha pasado de 0 a 1 en el loop
y actua consecuentemente cuando eso pasa.
En el timer uno el DAC1 escribe el dato que le toque y resetea la variable a 0
En el timer dos el ADC lee el valor generado en el DAC1 y resetea la variable a 0
En el timer tres el DAC2 escribe el dato que le toque y resetea la variable a 0
*/
if(sen1 == 1)
{
//no se si aqui habria que hacer toda la movida de corregir el valor a escribir
//DAC1 es una variable con el valor 25, pin del DAC1
dacWrite(DAC1, DACgen[i1]);
sen = 0;
}
if(i2 == 1)
{
//no se si aqui habria que hacer toda la movida de corregir la lectura.
//ADC1 es una variable con el valor 34, pin del ADC1
valorADC=analogRead(ADC1);
i2=0;
}
if(sen2==1)
{
//aquí hay que pasar el valorDAC ya pasado por la funcion de filtrado
//DAC2 es una variable con el valor 26, pin del DAC2
dacWrite(DAC2, valorDAC);
sen2 = 0;
}
delay(10); // this speeds up the simulation
}
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4