111

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

Fork of 4180_proj by ECE4180proj

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();
     }
 }