Generate a sine wave on the Analog Output using DMA alone.
Dependencies: DMAFuncGen MODDMA mbed
main.cpp
- Committer:
- Mischa
- Date:
- 2013-12-29
- Revision:
- 0:697cc11ace92
File content as of revision 0:697cc11ace92:
/*
* 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;
}
}