Si, buscando encontré la librería duetimer para trabajar con los timer del due y tienes razón la señal mejora bastante en la precisión por periodo de cada rampa en comparación del uso de millis() o micros(). Y el tema de los conflictos, pueden darse pero usando otras librerías que usen los mismos registros, pero no siendo el caso no habría problema.
Una última cosa, me puedes orientar en el código para retornar los valores de la diente de sierra generados dentro de la función de la interrupción hacia el loop principal, para poder seguir trabajando con ellos que es la duda que me esta quedando.
(Cambie la forma de generar la diente de sierra usando ahora un vector de valores definidos)
#include <DueTimer.h>
int i=0;
float d=0;
float muestras[120]={0x22 , 0x44 , 0x66 , 0x88 , 0xaa , 0xcc , 0xee , 0x110 , 0x132 , 0x154 ,
0x176 , 0x198 , 0x1ba , 0x1dc , 0x1fe , 0x220 , 0x242 , 0x264 , 0x286 , 0x2a8 ,
0x2ca , 0x2ec , 0x30e , 0x330 , 0x352 , 0x374 , 0x396 , 0x3b8 , 0x3da , 0x3fc ,
0x41e , 0x440 , 0x462 , 0x484 , 0x4a6 , 0x4c8 , 0x4ea , 0x50c , 0x52e , 0x550 ,
0x572 , 0x594 , 0x5b6 , 0x5d8 , 0x5fa , 0x61c , 0x63e , 0x660 , 0x682 , 0x6a4 ,
0x6c6 , 0x6e8 , 0x70a , 0x72c , 0x74e , 0x770 , 0x792 , 0x7b4 , 0x7d6 , 0x7f8 ,
0x81a , 0x83c , 0x85e , 0x880 , 0x8a2 , 0x8c4 , 0x8e6 , 0x908 , 0x92a , 0x94c ,
0x96e , 0x990 , 0x9b2 , 0x9d4 , 0x9f6 , 0xa18 , 0xa3a , 0xa5c , 0xa7e , 0xaa0 ,
0xac2 , 0xae4 , 0xb06 , 0xb28 , 0xb4a , 0xb6c , 0xb8e , 0xbb0 , 0xbd2 , 0xbf4 ,
0xc16 , 0xc38 , 0xc5a , 0xc7c , 0xc9e , 0xcc0 , 0xce2 , 0xd04 , 0xd26 , 0xd48 ,
0xd6a , 0xd8c , 0xdae , 0xdd0 , 0xdf2 , 0xe14 , 0xe36 , 0xe58 , 0xe7a , 0xe9c ,
0xebe , 0xee0 , 0xf02 , 0xf24 , 0xf46 , 0xf68 , 0xf8a , 0xfac , 0xfce , 0xff0
};
void setup() {
//Serial.begin(9600);
analogWriteResolution(12);
analogReadResolution(12);
Timer1.attachInterrupt(sawtooth);
//Timer1.setFrequency(1);
Timer1.start(166.7); //llama la interrupcion en microseg
}
void loop() {
}
void sawtooth() {
i++;
d=muestras[i]; //se guarda el valor de cada elemento del vector
analogWrite(DAC0,d);
if (i>=120)
{i=1;
}
}