111
Dependencies: 4DGL-uLCD-SE AD5206 mbed-rtos mbed
Fork of 4180_proj by
Diff: main.cpp
- Revision:
- 6:7985a531acb9
- Parent:
- 5:38c6ba85a6ec
- Child:
- 7:ed28d978f18d
--- a/main.cpp Fri Nov 27 02:44:47 2015 +0000 +++ b/main.cpp Fri Nov 27 03:20:17 2015 +0000 @@ -18,11 +18,16 @@ AnalogOut aout(p18); DigitalOut dout(LED1); +// +Ticker output_trigger; +DigitalOut led1(LED1); + //-----Global variable used for Func_Gen--------- const double pi = 3.14; float time_interv; -int length_waveform=1000; -uint16_t waveform[1000]; +int datapoint_counter=0; +int length_waveform=100; +uint16_t waveform[10]; float x; //-----User Specified, change it if needed------- @@ -46,57 +51,77 @@ void generate_waveform_datapoints(){ //Generate data points for the waveform float t=0; - time_interv=1.0/freq/length_waveform; //------if sine wave-------- if (waveform_type==0){ - for (int datapoint_counter=0; datapoint_counter<length_waveform; datapoint_counter++){ + for (int counter=0; counter<length_waveform; counter++){ x=amp/3.3*cos(2*pi*freq*t)+offset/3.3; - waveform[datapoint_counter]=(uint16_t) (x*65535); + waveform[counter]=(uint16_t) (x*65535); t += time_interv; } } //------if square wave-------- if (waveform_type==1){ - for (int datapoint_counter=0; datapoint_counter<length_waveform; datapoint_counter++){ - if (datapoint_counter<=length_waveform*duty_cycle){ + 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[datapoint_counter]=(uint16_t) (x*65535); + waveform[counter]=(uint16_t) (x*65535); } } - //------if ???? wave--------- + //------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) - time_interv=1.0/freq/length_waveform; - for (int datapoint_counter=0; datapoint_counter<length_waveform; datapoint_counter++){ - aout.write_u16(waveform[datapoint_counter]); + 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=10; //Hz + freq=100; //Hz amp=0.5; //Sacle factor, 1=full range offset=0.5; - duty_cycle=0.333; + 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(); - + // output_waveform_datapoints(); } }