AnalogOut Test

Dependencies:   mbed

Committer:
ryood
Date:
Tue Nov 21 14:52:57 2017 +0000
Revision:
2:bc6bbf995c46
Parent:
1:28154deb13f1
Impl. F767

Who changed what in which revision?

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