AnalogOut Test

Dependencies:   mbed

Committer:
ryood
Date:
Mon Jul 10 03:07:22 2017 +0000
Revision:
1:28154deb13f1
Parent:
0:08b1f4a462c7
Child:
2:bc6bbf995c46
output 3ch

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:08b1f4a462c7 1 #include "mbed.h"
ryood 0:08b1f4a462c7 2
ryood 1:28154deb13f1 3 AnalogOut my_output1(A5);
ryood 1:28154deb13f1 4 AnalogOut my_output2(A4);
ryood 1:28154deb13f1 5 AnalogOut my_output3(A3);
ryood 0:08b1f4a462c7 6
ryood 0:08b1f4a462c7 7 #define PI (3.141592653589793238462)
ryood 0:08b1f4a462c7 8 #define AMPLITUDE (1.0) // x * 3.3V
ryood 0:08b1f4a462c7 9 #define PHASE (PI * 1) // 2*pi is one period
ryood 0:08b1f4a462c7 10 #define RANGE (0x7FFF)
ryood 0:08b1f4a462c7 11 #define OFFSET (0x7FFF)
ryood 0:08b1f4a462c7 12
ryood 1:28154deb13f1 13 // Configuration for wave output
ryood 0:08b1f4a462c7 14 #define BUFFER_SIZE (360)
ryood 1:28154deb13f1 15 uint16_t buffer_sine[BUFFER_SIZE];
ryood 1:28154deb13f1 16 uint16_t buffer_cosine[BUFFER_SIZE];
ryood 1:28154deb13f1 17 uint16_t buffer_saw[BUFFER_SIZE];
ryood 0:08b1f4a462c7 18
ryood 0:08b1f4a462c7 19 void calculate_sinewave(void);
ryood 1:28154deb13f1 20 void calculate_cosinewave(void);
ryood 1:28154deb13f1 21 void calculate_sawwave(void);
ryood 0:08b1f4a462c7 22
ryood 0:08b1f4a462c7 23 int main() {
ryood 1:28154deb13f1 24 printf("Multi-channel DAC example\n");
ryood 0:08b1f4a462c7 25 calculate_sinewave();
ryood 1:28154deb13f1 26 calculate_cosinewave();
ryood 1:28154deb13f1 27 calculate_sawwave();
ryood 0:08b1f4a462c7 28 while(1) {
ryood 1:28154deb13f1 29 // wave output
ryood 0:08b1f4a462c7 30 for (int i = 0; i < BUFFER_SIZE; i++) {
ryood 1:28154deb13f1 31 my_output1.write_u16(buffer_sine[i]);
ryood 1:28154deb13f1 32 my_output2.write_u16(buffer_cosine[i]);
ryood 1:28154deb13f1 33 my_output3.write_u16(buffer_saw[i]);
ryood 0:08b1f4a462c7 34 }
ryood 0:08b1f4a462c7 35 }
ryood 0:08b1f4a462c7 36 }
ryood 0:08b1f4a462c7 37
ryood 1:28154deb13f1 38 // Create the wave buffer
ryood 0:08b1f4a462c7 39 void calculate_sinewave(void){
ryood 0:08b1f4a462c7 40 for (int i = 0; i < BUFFER_SIZE; i++) {
ryood 0:08b1f4a462c7 41 double rads = (PI * i)/180.0; // Convert degree in radian
ryood 1:28154deb13f1 42 buffer_sine[i] = (uint16_t)(AMPLITUDE * (RANGE * (sin(rads + PHASE))) + OFFSET);
ryood 0:08b1f4a462c7 43 }
ryood 0:08b1f4a462c7 44 }
ryood 1:28154deb13f1 45
ryood 1:28154deb13f1 46 void calculate_cosinewave(void) {
ryood 1:28154deb13f1 47 for (int i = 0; i < BUFFER_SIZE; i++) {
ryood 1:28154deb13f1 48 double rads = (PI * i)/180.0; // Convert degree in radian
ryood 1:28154deb13f1 49 buffer_cosine[i] = (uint16_t)(AMPLITUDE * (RANGE * (cos(rads + PHASE))) + OFFSET);
ryood 1:28154deb13f1 50 }
ryood 1:28154deb13f1 51 }
ryood 1:28154deb13f1 52
ryood 1:28154deb13f1 53 void calculate_sawwave(void) {
ryood 1:28154deb13f1 54 for (int i = 0; i < BUFFER_SIZE; i++) {
ryood 1:28154deb13f1 55 buffer_saw[i] = i * 0xFFFF / BUFFER_SIZE;
ryood 1:28154deb13f1 56 }
ryood 1:28154deb13f1 57 }