Etape 25 : Firmware
Pour le triangle et j’ai vu, j’ai créé les variables sawByte, triByte, sawInc et triInc. Chaque fois que la fréquence a changé j’ai calculé le montant qu’aurait la fonction triangle et j’ai vu sur incrément à un taux d’échantillonnage de 100kHz :
triInc = 511/période ;
Si (triInc == 0) {}
triInc = 1 ;
}
sawInc = 255/période ;
Si (sawInc == 0) {}
sawInc = 1 ;
}
puis tout le nécessaire à faire dans la routine d’interruption a été quelques calculs simples :
cas 1: / / triangle case 2: / / scie
if((period-t) > t) ;
Si (t == 0) {}
triByte = 0 ;
}
else {}
triByte += triInc ;
}
}
else {}
triByte = triInc ;
}
Si (triByte > 255) {}
triByte = 255 ;
}
ElseIf (triByte < 0) {}
triByte = 0 ;
}
onde = triByte ;
rupture ;
Si (t = 0) {}
sawByte = 0 ;
}
else {}
sawByte += sawInc ;
}
onde = sawByte ;
rupture ;
Pour la fonction sinus, j’ai écrit un simple python script qui génère les 20000 valeurs de 127+127sin(x) pour un cycle complet :
importer des mathématiques pour x dans l’intervalle (0, 20000) :
impression str(int(127+127*math.sin(2*math.pi*x*0.00005)),)+str(","),
J’ai stocké ce tableau dans la mémoire de l’Arduino appelé [sine20000] et a rappelé les valeurs que je devais envoyer à la DAC. C’est beaucoup plus rapide que le calcul des valeurs individuellement.