Generate a sine wave on the Analog Output using DMA alone.
Dependencies: DMAFuncGen MODDMA mbed
Diff: main.cpp
- Revision:
- 0:697cc11ace92
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Dec 29 01:13:41 2013 +0000 @@ -0,0 +1,46 @@ +/* + * Demonstrates sending a buffer repeatedly to the DAC using DMA. + * Connect an oscilloscope to Mbed pin 18. + */ + +#include "mbed.h" +#include "DMAFuncGen.h" + +AnalogIn ain(p17); +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); + +MODDMA dma; +DMAFuncGen fg(dma, MODDMA::Channel_0); + +int main() { + wait(0.5); + + // Create waveform. + fg.buffer_size=400; + fg.buffer = new uint32_t[fg.buffer_size]; + const float PI = 3.1415927; + for (int i=0; i<fg.buffer_size; i++) { + int x = (511*sin(2*PI*i/fg.buffer_size)) +512; + fg.set(i,x << 6); + } + + fg.Connect(); + fg.Setup(); + fg.SetFrequency(0.5); + printf("Frequency: %f\r\n",fg.Frequency()); + fg.Start(); + + // Simple oscilloscope, using the LEDs - + // Connect pin 18 (DAC) to p17 (ADC) for it to work. + float z; + while (1){ + z=ain.read(); + led1 = (z > 0.2) ? 1 : 0; + led2 = (z > 0.4) ? 1 : 0; + led3 = (z > 0.6) ? 1 : 0; + led4 = (z > 0.8) ? 1 : 0; + } +}