desktop

Onda senoidal

Buenas, alguien sabe de que depende la frecuencia en este codigo y que calculo puedo hacer para tener una frecuencia superior a 3kHz de la señal de salida

int tetha;
float j;
unsigned int res;

void setup() {
DDRD=0XFF;
}

void loop() {
for(tetha=0;tetha<360;tetha++)
{
j=sin (tetha3.1415/180)100;
res=j+100;
PORTD=res;
}
}
 
Depende de la frecuencia del procesador y de la eficiencia del código.

No dices en donde se ejecuta pero puede hacer una o varias de estas cosas:

Cambiar a una CPU mas rápida
Cambiar a coma fija
Hacer una tabla lookup
 
Buenas, alguien sabe de que depende la frecuencia en este codigo y que calculo puedo hacer para tener una frecuencia superior a 3kHz de la señal de salida
Veamos:
Avanzás de a 1°, eso significa que para 3kHz la frecuencia de los pulsos debe ser de 360*3kHz = 1.08 MHz

¿Acaso pensás que estas operaciones j=sin (tetha3.1415/180)100; en punto flotante + la trigonométrica se van a ejecutar en menos de 1us con un Arduino?

Si la respuesta es Sí --> Usted es muy joven.
 
Quizá una matriz con todos los puntos dibujados en const char sería más rápido que calcular flotantes.

Afortunadamente internet ya tiene un programa que calcula todos los valores de un seno para meterlos en una matriz.
 
Hacer operaciones en coma flotante para luego usar medio entero no es nada eficiente.
Hacer la misma operación 30k veces por segundo tampoco, la haces una vez y la guardas.
 
Atrás
Arriba