111

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

Fork of 4180_proj by ECE4180proj

Committer:
taoqiuyang
Date:
Fri Nov 27 02:25:53 2015 +0000
Revision:
4:1b82016459ff
Parent:
3:bb920a8eb590
Child:
5:38c6ba85a6ec
Corrected scaling and offset

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 4:1b82016459ff 29 int waveform_type; //0 for sine,
taoqiuyang 4:1b82016459ff 30 float freq,amp,offset,duty_cycle;
taoqiuyang 4:1b82016459ff 31
taoqiuyang 4:1b82016459ff 32 /*
taoqiuyang 4:1b82016459ff 33 sine wave use: freq,amp,offset
taoqiuyang 4:1b82016459ff 34 square wave use: freq,amp,offse and duty_cycle
taoqiuyang 4:1b82016459ff 35 */
taoqiuyang 3:bb920a8eb590 36
taoqiuyang 0:52af3c50f548 37
taoqiuyang 1:fb8f053747d6 38 void initialize_LCD(){
taoqiuyang 1:fb8f053747d6 39 lcd.baudrate(3000000);
taoqiuyang 1:fb8f053747d6 40 lcd.background_color(0);
taoqiuyang 1:fb8f053747d6 41 lcd.cls();
taoqiuyang 1:fb8f053747d6 42
taoqiuyang 1:fb8f053747d6 43 lcd.printf("Initializing...\n");
taoqiuyang 1:fb8f053747d6 44 lcd.printf("Fun Generator Demo");
taoqiuyang 1:fb8f053747d6 45 }
taoqiuyang 1:fb8f053747d6 46
taoqiuyang 3:bb920a8eb590 47 void generate_waveform_datapoints(){ //Generate data points for the waveform
taoqiuyang 2:cc462c2a54f6 48 float t=0;
taoqiuyang 1:fb8f053747d6 49 time_interv=1.0/freq/length_waveform;
taoqiuyang 2:cc462c2a54f6 50
taoqiuyang 3:bb920a8eb590 51 //------if sine wave--------
taoqiuyang 3:bb920a8eb590 52 if (waveform_type==0){
taoqiuyang 3:bb920a8eb590 53 for (int datapoint_counter=0; datapoint_counter<length_waveform; datapoint_counter++){
taoqiuyang 4:1b82016459ff 54 x=amp/3.3*cos(2*pi*freq*t)+offset/3.3;
taoqiuyang 4:1b82016459ff 55 waveform[datapoint_counter]=(uint16_t) (x*65535);
taoqiuyang 3:bb920a8eb590 56 t += time_interv;
taoqiuyang 3:bb920a8eb590 57 }
taoqiuyang 3:bb920a8eb590 58 }
taoqiuyang 3:bb920a8eb590 59
taoqiuyang 4:1b82016459ff 60 //------if square wave--------
taoqiuyang 4:1b82016459ff 61 /*if (waveform_type==1){
taoqiuyang 4:1b82016459ff 62 for (int datapoint_counter=0; datapoint_counter<length_waveform; datapoint_counter++){
taoqiuyang 4:1b82016459ff 63 if (datapoint_counter>=length_waveform){
taoqiuyang 4:1b82016459ff 64
taoqiuyang 4:1b82016459ff 65
taoqiuyang 4:1b82016459ff 66
taoqiuyang 4:1b82016459ff 67 }
taoqiuyang 4:1b82016459ff 68
taoqiuyang 4:1b82016459ff 69
taoqiuyang 4:1b82016459ff 70 waveform[datapoint_counter]=(uint16_t) (x*32767);
taoqiuyang 4:1b82016459ff 71
taoqiuyang 4:1b82016459ff 72 }*/
taoqiuyang 4:1b82016459ff 73
taoqiuyang 4:1b82016459ff 74
taoqiuyang 4:1b82016459ff 75
taoqiuyang 4:1b82016459ff 76
taoqiuyang 3:bb920a8eb590 77 }
taoqiuyang 3:bb920a8eb590 78
taoqiuyang 3:bb920a8eb590 79 void output_waveform_datapoints(){ //Output the data points using DAC (pin18)
taoqiuyang 3:bb920a8eb590 80 time_interv=1.0/freq/length_waveform;
taoqiuyang 2:cc462c2a54f6 81 for (int datapoint_counter=0; datapoint_counter<length_waveform; datapoint_counter++){
taoqiuyang 2:cc462c2a54f6 82 aout.write_u16(waveform[datapoint_counter]);
taoqiuyang 2:cc462c2a54f6 83 wait(time_interv);
taoqiuyang 2:cc462c2a54f6 84 }
taoqiuyang 2:cc462c2a54f6 85 }
taoqiuyang 2:cc462c2a54f6 86
taoqiuyang 1:fb8f053747d6 87
taoqiuyang 1:fb8f053747d6 88
taoqiuyang 0:52af3c50f548 89
taoqiuyang 0:52af3c50f548 90 int main(void){
taoqiuyang 3:bb920a8eb590 91 waveform_type=0; //0 for sine,
taoqiuyang 4:1b82016459ff 92 freq=10; //Hz
taoqiuyang 4:1b82016459ff 93 amp=0.5; //Sacle factor, 1=full range
taoqiuyang 3:bb920a8eb590 94 offset=0.5;
taoqiuyang 1:fb8f053747d6 95 initialize_LCD();
taoqiuyang 1:fb8f053747d6 96 generate_waveform_datapoints();
taoqiuyang 1:fb8f053747d6 97
taoqiuyang 0:52af3c50f548 98 while (1){
taoqiuyang 2:cc462c2a54f6 99 output_waveform_datapoints();
taoqiuyang 3:bb920a8eb590 100
taoqiuyang 0:52af3c50f548 101 }
taoqiuyang 0:52af3c50f548 102 }