EXP13

Dependencies:   mbed

Committer:
rx5
Date:
Thu Apr 21 04:34:02 2016 +0000
Revision:
0:d81660bd4a9b
EXP13

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rx5 0:d81660bd4a9b 1 #include "mbed.h"
rx5 0:d81660bd4a9b 2 Serial pc(USBTX, USBRX); // Initlize UART on USB port of KL25Z with default Baud 9600
rx5 0:d81660bd4a9b 3 AnalogOut aout(PTE30); // The waveform is created on this pin
rx5 0:d81660bd4a9b 4 void showhelp()
rx5 0:d81660bd4a9b 5 {
rx5 0:d81660bd4a9b 6 pc.printf("\r\n"); // print Command list from new line on UART Terminal
rx5 0:d81660bd4a9b 7 pc.printf("**** Command List ****\r\n"); // print Command list on UART Terminal
rx5 0:d81660bd4a9b 8 pc.printf("h -> Help\r\n");
rx5 0:d81660bd4a9b 9 pc.printf("s -> Generate Sine wave\r\n");
rx5 0:d81660bd4a9b 10 pc.printf("t -> Generate Triangular Wave\r\n");
rx5 0:d81660bd4a9b 11 pc.printf("i -> Increase Amplitude\r\n");
rx5 0:d81660bd4a9b 12 pc.printf("d -> Decrease Amplitude\r\n");
rx5 0:d81660bd4a9b 13
rx5 0:d81660bd4a9b 14 }
rx5 0:d81660bd4a9b 15 int main()
rx5 0:d81660bd4a9b 16 {
rx5 0:d81660bd4a9b 17 const double pi = 3.14;
rx5 0:d81660bd4a9b 18 const double offset = 65535/2;
rx5 0:d81660bd4a9b 19 double rads = 0.0;
rx5 0:d81660bd4a9b 20 uint16_t sample = 0;
rx5 0:d81660bd4a9b 21 float amplitude = 0.0f;
rx5 0:d81660bd4a9b 22 char rxbyte;
rx5 0:d81660bd4a9b 23 int wavetype = 0;
rx5 0:d81660bd4a9b 24 // pc.baud(115200); // uncomment this line and update baudrate to cahnge baud rate from 9600 default
rx5 0:d81660bd4a9b 25 pc.printf("\r\n"); // print startup message from new line on UART Terminal
rx5 0:d81660bd4a9b 26 pc.printf("Experiment - 13\r\n"); // print startup message on UART Terminal
rx5 0:d81660bd4a9b 27 pc.printf("DAC Waveform Generator\r\n"); // print startup message on UART Terminal
rx5 0:d81660bd4a9b 28 showhelp();
rx5 0:d81660bd4a9b 29 wait(3.0); // wait 3 second to show startup message
rx5 0:d81660bd4a9b 30 while(1) {
rx5 0:d81660bd4a9b 31 if (pc.readable()) { // If pc is readable
rx5 0:d81660bd4a9b 32 rxbyte = pc.getc();
rx5 0:d81660bd4a9b 33 if(rxbyte == 's') {
rx5 0:d81660bd4a9b 34 pc.printf("SINE WAVE\r\n");
rx5 0:d81660bd4a9b 35 wavetype = 0;
rx5 0:d81660bd4a9b 36 } else if(rxbyte == 't') {
rx5 0:d81660bd4a9b 37 pc.printf("TRIANGULAR WAVE\r\n");
rx5 0:d81660bd4a9b 38 wavetype = 1;
rx5 0:d81660bd4a9b 39 } else if(rxbyte == 'i') {
rx5 0:d81660bd4a9b 40 pc.printf("AMPLITUDE INCREASED\r\n");
rx5 0:d81660bd4a9b 41 amplitude+=0.1f;
rx5 0:d81660bd4a9b 42 } else if(rxbyte == 'd') {
rx5 0:d81660bd4a9b 43 pc.printf("AMPLITUDE INCREASED\r\n");
rx5 0:d81660bd4a9b 44 amplitude-=0.1f;
rx5 0:d81660bd4a9b 45 } else if(rxbyte == 'h') {
rx5 0:d81660bd4a9b 46 showhelp();
rx5 0:d81660bd4a9b 47 } else {
rx5 0:d81660bd4a9b 48 pc.printf("Error: Invalid command type 'h' for help...\r\n");
rx5 0:d81660bd4a9b 49 }
rx5 0:d81660bd4a9b 50 rxbyte = 0x00;
rx5 0:d81660bd4a9b 51 if(amplitude>1.0f) {
rx5 0:d81660bd4a9b 52 amplitude = 1.0f;
rx5 0:d81660bd4a9b 53 pc.printf("Amplitude Max limit reached...\r\n");
rx5 0:d81660bd4a9b 54 } else if(amplitude<0.0f) {
rx5 0:d81660bd4a9b 55 amplitude = 0.0f;
rx5 0:d81660bd4a9b 56 pc.printf("Amplitude Min limit reached...\r\n");
rx5 0:d81660bd4a9b 57 }
rx5 0:d81660bd4a9b 58 }
rx5 0:d81660bd4a9b 59
rx5 0:d81660bd4a9b 60 if(wavetype == 0) {
rx5 0:d81660bd4a9b 61 // sinewave output
rx5 0:d81660bd4a9b 62 for (int i = 0; i < 360; i++) {
rx5 0:d81660bd4a9b 63 rads = (pi * i) / 180.0f;
rx5 0:d81660bd4a9b 64 sample = (uint16_t)(amplitude * (offset * (cos(rads + pi))) + offset);
rx5 0:d81660bd4a9b 65 aout.write_u16(sample);
rx5 0:d81660bd4a9b 66 }
rx5 0:d81660bd4a9b 67 }
rx5 0:d81660bd4a9b 68
rx5 0:d81660bd4a9b 69 if(wavetype == 1) {
rx5 0:d81660bd4a9b 70 // triwave output
rx5 0:d81660bd4a9b 71 for (float i = 0.5f - (amplitude/2); i < 0.5f + (amplitude/2); i += 0.01f) {
rx5 0:d81660bd4a9b 72 aout = i;
rx5 0:d81660bd4a9b 73 wait(0.0003f);
rx5 0:d81660bd4a9b 74 }
rx5 0:d81660bd4a9b 75 for (float i = 0.5f + (amplitude/2); i > 0.5f - (amplitude/2); i -= 0.01f) {
rx5 0:d81660bd4a9b 76 aout = i;
rx5 0:d81660bd4a9b 77 wait(0.0003f);
rx5 0:d81660bd4a9b 78 }
rx5 0:d81660bd4a9b 79 }
rx5 0:d81660bd4a9b 80 }
rx5 0:d81660bd4a9b 81 }