Basic_sine_wave_generator

Dependencies:   mbed 4DGL-uLCD-SE mbed-rtos AD5206

Committer:
taoqiuyang
Date:
Fri Nov 27 02:03:52 2015 +0000
Revision:
3:bb920a8eb590
Parent:
2:cc462c2a54f6
Child:
4:1b82016459ff
Restructured

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taoqiuyang 3:bb920a8eb590 1 /* ECE4180 Final Project -- mbed Function Generator
taoqiuyang 3:bb920a8eb590 2
taoqiuyang 3:bb920a8eb590 3 Platform: mbed LPC-1768
taoqiuyang 3:bb920a8eb590 4
taoqiuyang 3:bb920a8eb590 5 Team member: Hanjie Xie
taoqiuyang 3:bb920a8eb590 6 Qiuyang Tao
taoqiuyang 3:bb920a8eb590 7 Xuefeng Jin
taoqiuyang 3:bb920a8eb590 8 Yuqing Peng
taoqiuyang 3:bb920a8eb590 9 */
taoqiuyang 3:bb920a8eb590 10
taoqiuyang 3:bb920a8eb590 11
taoqiuyang 0:52af3c50f548 12 #include "mbed.h"
taoqiuyang 1:fb8f053747d6 13 #include "uLCD_4DGL.h"
taoqiuyang 1:fb8f053747d6 14
taoqiuyang 3:bb920a8eb590 15 //----- Objects for devices----------------------
taoqiuyang 1:fb8f053747d6 16 Serial pc(USBTX, USBRX);
taoqiuyang 1:fb8f053747d6 17 uLCD_4DGL lcd(p13, p14, p15);
taoqiuyang 0:52af3c50f548 18 AnalogOut aout(p18);
taoqiuyang 0:52af3c50f548 19 DigitalOut dout(LED1);
taoqiuyang 0:52af3c50f548 20
taoqiuyang 3:bb920a8eb590 21 //-----Global variable used for Func_Gen---------
taoqiuyang 1:fb8f053747d6 22 const double pi = 3.14;
taoqiuyang 1:fb8f053747d6 23 float time_interv;
taoqiuyang 1:fb8f053747d6 24 int length_waveform=1000;
taoqiuyang 2:cc462c2a54f6 25 uint16_t waveform[1000];
taoqiuyang 3:bb920a8eb590 26 float x;
taoqiuyang 0:52af3c50f548 27
taoqiuyang 3:bb920a8eb590 28 //-----User Specified, change it if needed-------
taoqiuyang 3:bb920a8eb590 29 int waveform_type=0; //0 for sine,
taoqiuyang 3:bb920a8eb590 30 float freq,amp=1,offset=0.5;
taoqiuyang 3:bb920a8eb590 31
taoqiuyang 0:52af3c50f548 32
taoqiuyang 1:fb8f053747d6 33 void initialize_LCD(){
taoqiuyang 1:fb8f053747d6 34 lcd.baudrate(3000000);
taoqiuyang 1:fb8f053747d6 35 lcd.background_color(0);
taoqiuyang 1:fb8f053747d6 36 lcd.cls();
taoqiuyang 1:fb8f053747d6 37
taoqiuyang 1:fb8f053747d6 38 lcd.printf("Initializing...\n");
taoqiuyang 1:fb8f053747d6 39 lcd.printf("Fun Generator Demo");
taoqiuyang 1:fb8f053747d6 40 }
taoqiuyang 1:fb8f053747d6 41
taoqiuyang 3:bb920a8eb590 42 void generate_waveform_datapoints(){ //Generate data points for the waveform
taoqiuyang 2:cc462c2a54f6 43 float t=0;
taoqiuyang 1:fb8f053747d6 44 time_interv=1.0/freq/length_waveform;
taoqiuyang 2:cc462c2a54f6 45
taoqiuyang 3:bb920a8eb590 46 //------if sine wave--------
taoqiuyang 3:bb920a8eb590 47 if (waveform_type==0){
taoqiuyang 3:bb920a8eb590 48 for (int datapoint_counter=0; datapoint_counter<length_waveform; datapoint_counter++){
taoqiuyang 3:bb920a8eb590 49 x=amp*(cos(2*pi*freq*t)+1);
taoqiuyang 3:bb920a8eb590 50 waveform[datapoint_counter]=(uint16_t) (x*32767);
taoqiuyang 3:bb920a8eb590 51 t += time_interv;
taoqiuyang 3:bb920a8eb590 52 }
taoqiuyang 3:bb920a8eb590 53 }
taoqiuyang 3:bb920a8eb590 54
taoqiuyang 3:bb920a8eb590 55 //------if other wave--------
taoqiuyang 3:bb920a8eb590 56 }
taoqiuyang 3:bb920a8eb590 57
taoqiuyang 3:bb920a8eb590 58 void output_waveform_datapoints(){ //Output the data points using DAC (pin18)
taoqiuyang 3:bb920a8eb590 59 time_interv=1.0/freq/length_waveform;
taoqiuyang 2:cc462c2a54f6 60 for (int datapoint_counter=0; datapoint_counter<length_waveform; datapoint_counter++){
taoqiuyang 2:cc462c2a54f6 61 aout.write_u16(waveform[datapoint_counter]);
taoqiuyang 2:cc462c2a54f6 62 wait(time_interv);
taoqiuyang 2:cc462c2a54f6 63 }
taoqiuyang 2:cc462c2a54f6 64 }
taoqiuyang 2:cc462c2a54f6 65
taoqiuyang 1:fb8f053747d6 66
taoqiuyang 1:fb8f053747d6 67
taoqiuyang 0:52af3c50f548 68
taoqiuyang 0:52af3c50f548 69 int main(void){
taoqiuyang 3:bb920a8eb590 70 waveform_type=0; //0 for sine,
taoqiuyang 3:bb920a8eb590 71 freq=2; //Hz
taoqiuyang 3:bb920a8eb590 72 amp=1; //Sacle factor, 1=full range
taoqiuyang 3:bb920a8eb590 73 offset=0.5;
taoqiuyang 1:fb8f053747d6 74 initialize_LCD();
taoqiuyang 1:fb8f053747d6 75 generate_waveform_datapoints();
taoqiuyang 1:fb8f053747d6 76
taoqiuyang 0:52af3c50f548 77 while (1){
taoqiuyang 2:cc462c2a54f6 78 output_waveform_datapoints();
taoqiuyang 3:bb920a8eb590 79
taoqiuyang 0:52af3c50f548 80 }
taoqiuyang 0:52af3c50f548 81 }