ravi butani
/
EXP13_DAC_TRI_SIN_SELECT_UART
EXP13
main.cpp@0:d81660bd4a9b, 2016-04-21 (annotated)
- Committer:
- rx5
- Date:
- Thu Apr 21 04:34:02 2016 +0000
- Revision:
- 0:d81660bd4a9b
EXP13
Who changed what in which revision?
User | Revision | Line number | New 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 | } |