Étape 5: Exemple 3: DAC
J’ai branché la sortie de la DAC à un oscilloscope. Si vous avez besoin d’aide comprendre comment utiliser/lire l’oscilloscope, consultez ce tutoriel. J’ai chargé le code suivant sur l’Arduino :
J’ai créé un interrupt timer qui incrémente la variable t à une fréquence de 40kHz. Une fois que t atteint 627 il réinitialise à 0 (cela arrive avec une fréquence de 40 000/628 = 63 Hz). Pendant ce temps, dans la boucle principale l’Arduino envoie une valeur comprise entre 0 (00000000 en binaire) et 255 (11111111 en binaire) à broches numériques entre 0 et 7 (PORTD). Il calcule cette valeur avec l’équation suivante :
PORTD=Byte(127+127*Sin(t/100)) ;
Alors que t par incréments de 0 à 627 la fonction sinus se déplace à travers un cycle complet. La valeur envoyée à PORTD est un signal sinusoïdal à fréquence 63Hz et amplitude 127, oscillant autour de 127. Quand c’est envoyé par l’intermédiaire de l’échelle de résistance 8 bit DAC, il produit une oscillation de signaux environ 2,5 v avec une amplitude de 2,5 v et une fréquence de 63 Hz.
La fréquence de l’onde sinusoïdale peut être doublée en multipliant le terme (t/100) par 2, quadruplé en multipliant par 4 et ainsi de suite...
Notez également que si vous augmentez la fréquence de l’interruption timer trop en diminuant le Prédiviseur ou OCR2A l’onde sinusoïdale ne va pas afficher correctement. C’est parce que la fonction sin() est coûteuse, et à des fréquences d’interruption élevé, il n’a pas assez de temps pour exécuter. Si vous utilisez interruptions de haute fréquence, plutôt que d’effectuer un calcul au cours de la routine d’interruption, compte tenu de stocker des valeurs dans un tableau et d’appeler simplement ces valeurs à l’aide d’une sorte d’index. Vous pouvez trouver un exemple de que dans mon arduino waveform generator-de stocker 20 000 valeurs de péché dans un tableau, j’ai pu d’ondes sinusoïdales de sortie avec une fréquence de 100kHz.