add 60Hz/50Hz notch filter

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers sub.hpp Source File

sub.hpp

00001 unsigned char rxFIFO[256], txFIFO[256], raw_data[6];
00002 unsigned char rx_top, rx_end, tx_top, tx_end, phase;
00003 float mean_sum1, mean_sum2, ad_data1[101], ad_data2[101];
00004 int timer_value[6], max_count, fir_lpf, gain, ad_pointer1, ad_pointer2;
00005 const int order = 200;
00006 float xn1[order+1], xn2[order+1];
00007 
00008 RawSerial xbee(PA_2, PA_3);
00009 Ticker timer_setup;
00010 AnalogIn analog_value0(A0);
00011 AnalogIn analog_value1(A1);
00012 AnalogIn analog_value2(A2);
00013 AnalogIn analog_value3(A3);
00014 DigitalOut myled(LED1);
00015 
00016 void sum_clear(){
00017     int i;
00018     for (i=0; i<101; i++) ad_data1[i] = ad_data2[i] = 0;
00019     ad_pointer1 = ad_pointer2 = mean_sum1 = mean_sum2 = 0;
00020 }
00021 
00022 void common_setup(){
00023     int i;
00024     rx_top = rx_end = tx_top = tx_end = phase = 0; 
00025     max_count = 100;
00026     fir_lpf = 0;
00027     gain = 5;
00028     for (i=0; i<3; i++) timer_value[i] = 0;
00029     timer_value[3] = 10;
00030     timer_value[4] = 1500;
00031     for (i=0; i<=order; i++) xn1[i] = xn2[i] = 0.0;
00032     sum_clear();
00033 }
00034 
00035 void timer_interrupt(){
00036     int i;
00037     for (i=0; i<6; i++) timer_value[i]++;
00038 }
00039 
00040 void tx_fifo_check(){
00041     if(xbee.writeable() == 1){
00042         if(tx_top != tx_end){
00043             xbee.putc(txFIFO[tx_end]);
00044             ++tx_end &= 255;
00045         }
00046     }
00047 }
00048 
00049 int rx_fifo_check(){
00050     unsigned char data;
00051     if(rx_top != rx_end){
00052         data = rxFIFO[rx_end];
00053         ++rx_end &= 255;
00054         if (data < 33){
00055             phase = 0;
00056             return(1);
00057         }
00058         raw_data[phase] = data;
00059         if(++phase > 5) phase = 0;
00060         return(0);
00061     }
00062     return(0);
00063 }
00064 
00065 void rx_fifoset(void){
00066     rxFIFO[rx_top] = xbee.getc();
00067     ++rx_top &= 255;
00068 }
00069 
00070 void tx_fifoset(unsigned char data){
00071     txFIFO[tx_top] = data;
00072     ++tx_top &= 255;
00073 }
00074 
00075 unsigned char hex_conv(unsigned char data){
00076     data &= 15;
00077     if(data < 10) return(data+48);
00078     else return(data+55);
00079 }
00080 
00081 unsigned char conv_hex(unsigned char data){
00082     if((data > 47) && (data < 58)) return(data-48);
00083     else if((data > 64) && (data < 71)) return(data-55);
00084     return(0);
00085 }
00086 
00087 void tx_message(int data){
00088     int i;
00089     for (i=0; i<6; i++) tx_fifoset(hex_conv((data>>(4*(5-i))) & 15));
00090     tx_fifoset(13);
00091 }
00092 
00093 float move_mean_calc1(float data){
00094     mean_sum1 = mean_sum1 - ad_data1[ad_pointer1] + data;
00095     ad_data1[ad_pointer1] = data;
00096     ad_pointer1++;
00097     if(ad_pointer1 == max_count) ad_pointer1 = 0;
00098     return(mean_sum1 / (float)max_count);
00099 }
00100 
00101 float move_mean_calc2(float data){
00102     mean_sum2 = mean_sum2 - ad_data2[ad_pointer2] + data;
00103     ad_data2[ad_pointer2] = data;
00104     ad_pointer2++;
00105     if(ad_pointer2 == max_count) ad_pointer2 = 0;
00106     return(mean_sum2 / (float)max_count);
00107 }