Yoichi Nagashima
/
CQ_nagasm_08_notch_test
add 60Hz/50Hz notch filter
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Wed Jul 13 2022 21:57:35 by 1.7.2