Basic_sine_wave_generator
Dependencies: 4DGL-uLCD-SE mbed-rtos mbed
Fork of 4180_proj by
main.cpp
- Committer:
- taoqiuyang
- Date:
- 2015-11-27
- Revision:
- 7:ed28d978f18d
- Parent:
- 6:7985a531acb9
- Child:
- 8:3d3652b8109f
File content as of revision 7:ed28d978f18d:
/* ECE4180 Final Project -- mbed Function Generator Platform: mbed LPC-1768 Team member: Hanjie Xie Qiuyang Tao Xuefeng Jin Yuqing Peng */ #include "mbed.h" #include "uLCD_4DGL.h" //----- Objects for devices---------------------- Serial pc(USBTX, USBRX); uLCD_4DGL lcd(p13, p14, p15); AnalogOut aout(p18); // //Ticker output_trigger; //-----Global variable used for Func_Gen--------- const double pi = 3.14; float time_interv; int datapoint_counter=0; int length_waveform=100; uint16_t waveform[10]; float x; //-----User Specified, change it if needed------- int waveform_type; //0 for sine, float freq,amp,offset,duty_cycle; /* sine wave use: freq,amp,offset square wave use: freq,amp,offse and duty_cycle */ void initialize_LCD(){ lcd.baudrate(3000000); lcd.background_color(0); lcd.cls(); lcd.printf("Initializing...\n"); lcd.printf("Fun Generator Demo"); } void generate_waveform_datapoints(){ //Generate data points for the waveform float t=0; //------if sine wave-------- if (waveform_type==0){ for (int counter=0; counter<length_waveform; counter++){ x=amp/3.3*cos(2*pi*freq*t)+offset/3.3; waveform[counter]=(uint16_t) (x*65535); t += time_interv; } } //------if square wave-------- if (waveform_type==1){ for (int counter=0; counter<length_waveform; counter++){ if (counter<=length_waveform*duty_cycle){ x=amp/3.3+offset/3.3; }else{ x=-1.0*amp/3.3+offset/3.3; } waveform[counter]=(uint16_t) (x*65535); } } //------if triangle wave--------- if (waveform_type==2){ for (int counter=0; counter<length_waveform; counter++){ if (counter<=length_waveform*duty_cycle){ x=amp/3.3+offset/3.3; }else{ x=-1.0*amp/3.3+offset/3.3; } waveform[counter]=(uint16_t) (x*65535); } } } void output_waveform_datapoints(){ //Output the data points using DAC (pin18) for (int counter=0; counter<length_waveform; counter++){ aout.write_u16(waveform[counter]); wait(time_interv); } } void output_waveform_datapoints_timer_ISR(){ //Output the data points using DAC (pin18) aout.write_u16(waveform[datapoint_counter]); datapoint_counter++; if (datapoint_counter==length_waveform-1){datapoint_counter=0;} } int main(void){ waveform_type=1; //0 for sine, freq=100; //Hz amp=0.5; //Sacle factor, 1=full range offset=0.5; duty_cycle=0.4; time_interv=1.0/freq/length_waveform; initialize_LCD(); generate_waveform_datapoints(); //-----output waveform-------- //output_trigger.attach(&output_waveform_datapoints_timer_ISR, time_interv); while (1){ output_waveform_datapoints(); } }