Schritt 5: Beispiel 3: DAC
Ich habe die Ausgabe aus der DAC bis zu einem Oszilloskop. Benötigen Sie Hilfe zu verstehen, wie Nutzung/das Oszilloskop Auschecken dieses Tutorial lesen. Ich lud den folgenden Code auf dem Arduino:
//63Hz sine wave //by Amanda Ghassaei 2012
Richte ich einen Timer-Interrupt, Schritten die Variable t bei einer Frequenz von 40kHz. Sobald t 627 erreicht es wieder auf Null zurückgesetzt (Dies geschieht mit einer Frequenz von 40.000/628 = 63 Hz). Unterdessen in der Hauptschleife sendet der Arduino einen Wert zwischen 0 (Binär 00000000) und 255 (11111111 binär) digitale Pins 0 bis 7 (PORTD). Es wird dieser Wert mit folgender Gleichung berechnet:
PORTD=Byte(127+127*sin(t/100));
So wie t-Schritten von 0 bis 627 bewegt sich die Sinusfunktion durch einen vollständigen Zyklus. Der Wert an PORTD geschickt ist eine Sinuskurve mit 63Hz Frequenz und Amplitude 127, oszillierende rund 127. Wann wird dies durch die 8-Bit-Widerstand-Leiter gesendet, DAC es eine schwingende Ausgänge signal rund 2,5 v mit einer Amplitude von 2,5 v und Frequenz von 63 Hz.
Die Frequenz des Sinus kann verdoppelt werden, durch Multiplikation des Begriffs (T/100) mit 2, vervierfachte sich durch Multiplikation mit 4 und So weiter...
Beachten Sie auch, dass wenn Sie die Häufigkeit der Timer-Interrupt erhöhen zu viel durch eine Verringerung der Vorteiler oder OCR2A Sinus nicht korrekt ausgegeben werden. Und zwar deshalb, weil die Funktion des sin() rechnerisch teuer ist, und bei hohen Interrupt Frequenzen es nicht genügend Zeit für die Ausführung muss. Verwendest du Hochfrequenz-Interrupts, anstatt eine Berechnung während die Interrupt-Routine in Anbetracht Speichern von Werten in einem Array und rufen einfach diese Anwendung irgendeiner Art von Index Werte. Ein Beispiel finden Sie in meinem Arduino Waveform Generator von 20.000 Werte der Sünde in einem Array speichern, ich Ausgang Sinuswellen mit einer Sampling-Frequenz von 100 kHz konnte.