Generate a sine wave on the Analog Output using DMA alone.

Dependencies:   DMAFuncGen MODDMA mbed

Committer:
Mischa
Date:
Sun Dec 29 01:13:41 2013 +0000
Revision:
0:697cc11ace92
Demonstration program for the DMAFuncGen library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mischa 0:697cc11ace92 1 /*
Mischa 0:697cc11ace92 2 * Demonstrates sending a buffer repeatedly to the DAC using DMA.
Mischa 0:697cc11ace92 3 * Connect an oscilloscope to Mbed pin 18.
Mischa 0:697cc11ace92 4 */
Mischa 0:697cc11ace92 5
Mischa 0:697cc11ace92 6 #include "mbed.h"
Mischa 0:697cc11ace92 7 #include "DMAFuncGen.h"
Mischa 0:697cc11ace92 8
Mischa 0:697cc11ace92 9 AnalogIn ain(p17);
Mischa 0:697cc11ace92 10 DigitalOut led1(LED1);
Mischa 0:697cc11ace92 11 DigitalOut led2(LED2);
Mischa 0:697cc11ace92 12 DigitalOut led3(LED3);
Mischa 0:697cc11ace92 13 DigitalOut led4(LED4);
Mischa 0:697cc11ace92 14
Mischa 0:697cc11ace92 15 MODDMA dma;
Mischa 0:697cc11ace92 16 DMAFuncGen fg(dma, MODDMA::Channel_0);
Mischa 0:697cc11ace92 17
Mischa 0:697cc11ace92 18 int main() {
Mischa 0:697cc11ace92 19 wait(0.5);
Mischa 0:697cc11ace92 20
Mischa 0:697cc11ace92 21 // Create waveform.
Mischa 0:697cc11ace92 22 fg.buffer_size=400;
Mischa 0:697cc11ace92 23 fg.buffer = new uint32_t[fg.buffer_size];
Mischa 0:697cc11ace92 24 const float PI = 3.1415927;
Mischa 0:697cc11ace92 25 for (int i=0; i<fg.buffer_size; i++) {
Mischa 0:697cc11ace92 26 int x = (511*sin(2*PI*i/fg.buffer_size)) +512;
Mischa 0:697cc11ace92 27 fg.set(i,x << 6);
Mischa 0:697cc11ace92 28 }
Mischa 0:697cc11ace92 29
Mischa 0:697cc11ace92 30 fg.Connect();
Mischa 0:697cc11ace92 31 fg.Setup();
Mischa 0:697cc11ace92 32 fg.SetFrequency(0.5);
Mischa 0:697cc11ace92 33 printf("Frequency: %f\r\n",fg.Frequency());
Mischa 0:697cc11ace92 34 fg.Start();
Mischa 0:697cc11ace92 35
Mischa 0:697cc11ace92 36 // Simple oscilloscope, using the LEDs -
Mischa 0:697cc11ace92 37 // Connect pin 18 (DAC) to p17 (ADC) for it to work.
Mischa 0:697cc11ace92 38 float z;
Mischa 0:697cc11ace92 39 while (1){
Mischa 0:697cc11ace92 40 z=ain.read();
Mischa 0:697cc11ace92 41 led1 = (z > 0.2) ? 1 : 0;
Mischa 0:697cc11ace92 42 led2 = (z > 0.4) ? 1 : 0;
Mischa 0:697cc11ace92 43 led3 = (z > 0.6) ? 1 : 0;
Mischa 0:697cc11ace92 44 led4 = (z > 0.8) ? 1 : 0;
Mischa 0:697cc11ace92 45 }
Mischa 0:697cc11ace92 46 }