Paso 13: Firmware
Triángulo y Sierra he creado las variables sawByte, triByte, sawInc y triInc. Cada vez que cambia la frecuencia calcula la cantidad que tendría la función de triángulo y Sierra al incremento a una tasa de muestreo de 100kHz:
triInc = 511 o periodo;
Si (triInc == 0) {}
triInc = 1;
}
sawInc = 255/periodo;
Si (sawInc == 0) {}
sawInc = 1;
}
entonces todo era necesario hacer en la rutina de interrupción algunas matemáticas simples:
caso 1: / / triángulo
if((period-t) > t);
Si (t == 0) {}
triByte = 0;
}
Else {}
triByte += triInc;
}
}
Else {}
triByte = triInc;
}
Si (triByte > 255) {}
triByte = 255;
}
else if (triByte < 0) {}
triByte = 0;
}
onda = triByte;
rotura;
caso 2: / / de la Sierra
Si (t = 0) {}
sawByte = 0;
}
Else {}
sawByte += sawInc;
}
onda = sawByte;
rotura;
Para la función del seno, escribió un simple python script que 20000 valores de 127+127sin(x) para un ciclo completo:
importación matemáticas
para x en el rango (0, 20000):
imprimir str(int(127+127*math.sin(2*math.pi*x*0.00005)),)+str(","),
I almacenar esta matriz en memoria de Arduino llamada [sine20000] y recuerda los valores que debían enviar a la DAC. Esto es mucho más rápido que calcular los valores individualmente.