Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SDFileSystem ds3231 eeprom_Nikita mbed testUniGraphic_150217
Fork of SS_SensePOC2P0_11Dec2017_USERPID by
ec_bp.cpp
00001 #include "mbed.h" 00002 #include "ec_bp.h" 00003 //#include "ecg_dec.h" 00004 00005 //PIN DECLARATIONS 00006 //Serial pc(USBTX,USBRX); 00007 SPI mySpi(PIN_MOSI, PIN_MISO, PIN_SCLK) ; 00008 DigitalIn DRDY_BAR(PTC8); 00009 00010 DigitalOut CHIPSEL_BAR(PTD0); 00011 DigitalOut ADS_START(PTC16); 00012 DigitalOut RESET_BAR(PTC17); 00013 DigitalOut myled(LED1); 00014 PwmOut led(PTB18); 00015 float value = 0; 00016 unsigned int value1; 00017 unsigned int value2; 00018 unsigned int value3; 00019 unsigned int value4; 00020 unsigned int value5; 00021 unsigned int value6; 00022 uint8_t data1; 00023 unsigned int count; 00024 00025 //unsigned char chk2= 0; 00026 //float value = 0; 00027 /*unsigned int value1 = 0; 00028 unsigned int value2 = 0; 00029 unsigned int value3 = 0; 00030 unsigned int value4 = 0; 00031 unsigned int value5 = 0; 00032 unsigned int value6 = 0; 00033 unsigned int data1 = 0; 00034 unsigned int count = 0;*/ 00035 00036 //static int32_t ecg_x[500]; 00037 /* SPI is the spi function written in mbed and mySpi is the instance name*/ 00038 00039 typedef void (*func_ptr)(void) ; /*creates typedef to function pointer, does not take any arguement and returns void*/ 00040 00041 00042 void lpf_coef(void); 00043 float lpf( float coeff[5], float); 00044 void drdy_int(void); 00045 /*FILE *sd_openfile(char *buf); 00046 void sd_write (FILE *n,int value); 00047 void sd_close(FILE *n); 00048 time_t rtc_read();*/ 00049 00050 typedef struct _cmd_func { 00051 char *name ; 00052 func_ptr func ; 00053 } cmd_func_type ; 00054 00055 cmd_func_type cmd_list[] = { /*"cmd_func_type cmd_list[]" is same as "struct cmd_list[]"*/ 00056 {"help", doHelp}, 00057 {"status", doStatus}, 00058 {"freq", doFreq}, 00059 {"mode", doMode}, 00060 {"bit", doBit}, 00061 {"write", doWrite}, 00062 {"read", doRead}, 00063 {"loop", doLoop}, 00064 { 0, 0 } 00065 } ; 00066 00067 func_ptr getFunc(char *cmd) /*here "func_ptr is same as void*/ 00068 { 00069 int i = 0 ; 00070 while(cmd_list[i].name != 0) { 00071 if (strcmp(cmd, cmd_list[i].name) == 0) { 00072 return(cmd_list[i].func) ; ; 00073 } 00074 i++ ; 00075 } 00076 return(0) ; 00077 } 00078 00079 void doHello() 00080 { 00081 printf("=== spi test program ===\n\r") ; 00082 printf("please set your terminal program\n\r") ; 00083 printf("local echo on\n\r") ; 00084 printf("\n\r") ; 00085 } 00086 00087 00088 void setup() 00089 { 00090 //initially make all inputs low until power is up and stabilized 00091 CHIPSEL_BAR = 0; 00092 ADS_START = 0; 00093 RESET_BAR = 0; 00094 //wait for oscillator to wake up 00095 wait(1); 00096 00097 CHIPSEL_BAR = 1; 00098 RESET_BAR = 1; //wait for tpor time 00099 //wait for power on reset 00100 wait(1); 00101 RESET_BAR = 0; // send a reset pulse and wait for t_reset amount of time 00102 wait(1); 00103 RESET_BAR = 1;//release the reset 00104 //Wait for 18 tclks = 36 us 00105 wait_us(36); 00106 00107 //Device wakes up in RDATAC mode so send SDATAC command to write to registers 00108 cmdWrite(CMD_SDATAC) ; 00109 // printf("Device is in SDATAC mode\n"); 00110 00111 regRead(REG_ID); 00112 printf("DEVICE ID register read from ADS is= 0x%X\n",data1); 00113 wait(1); 00114 00115 //Since we are using internal 2.42V reference and enable clock on the CLK PIN 00116 //Write 0xA8 to CONFIG2 register 00117 regWrite(REG_CONFIG2,no_mode); 00118 00119 //Set continuous sampling mode, 500 SPS 00120 regWrite(REG_CONFIG1,sps500); 00121 00122 //PGA Gain = 6, inputs shorted for noise measurements 00123 regWrite(REG_CH1SET, offset_meas); 00124 00125 //read data from CONFIG2 register 00126 regRead(REG_CONFIG2); 00127 // printf("REG_CONFIG2 register read from ADS for initial setup is= 0x%X\n",data1); 00128 00129 //read data from CONFIG1 register 00130 regRead(REG_CONFIG1); 00131 // printf("REG_CONFIG1 register read from ADS for initial setup is= 0x%X\n",data1); 00132 00133 //read data from CONFIG1 register 00134 regRead(REG_CH1SET); 00135 // printf("REG_CH1SET register read from ADS for initial setup is= 0x%X\n",data1); 00136 } 00137 00138 void testsetup() 00139 { 00140 //Send SDATAC command to write to registers to set test signals 00141 cmdWrite(CMD_SDATAC) ; 00142 printf("Device is in SDATAC mode\n"); 00143 00144 //Since we are using internal 2.42V reference and enable clock on the CLK PIN 00145 //Write 0xA3 to CONFIG2 register to set test signal and its freq = 1Hz 00146 regWrite(REG_CONFIG2,test_mode); 00147 00148 //PGA Gain = 6, test signal selected 00149 regWrite(REG_CH1SET, test_inp); 00150 00151 //read data from CONFIG2 register 00152 regRead(REG_CONFIG2); 00153 printf("REG_CONFIG2 register read from ADS for test signal setup is= 0x%X\n",data1); 00154 00155 //read data from CONFIG1 register 00156 regRead(REG_CH1SET); 00157 printf("REG_CH1SET register read from ADS for test signal setup is= 0x%X\n",data1); 00158 } 00159 00160 void ecgsetup() 00161 { 00162 cmdWrite(CMD_SDATAC) ; //Set to SDATAC mode to set CH1SET register 00163 00164 regWrite(REG_CONFIG1,sps500); 00165 regWrite(REG_CONFIG2, default_mode);//put INT_TEST and TEST_FREQ bits to default mode(set those bits to '0') 00166 regWrite(REG_LOFF, loff_conf); 00167 regWrite(REG_CH1SET, elec_inp);// Set to read normal electrode input 00168 regWrite(REG_RLD_SENS, rld_sens_sig);//Set RLD_SENS 00169 regWrite(REG_LOFF_SENS, loff_sens_sig);//Set LOFF_SENS 00170 regWrite(REG_MISC1, misc1_inp );//Set RESP1 00171 regWrite(REG_MISC2, misc2_inp );//Set RESP2 00172 //printf("connect ECG leads\n"); 00173 wait(0.5); 00174 regRead(REG_LOFF_STAT);//Read LOFF_STAT register 00175 printf("REG_LOFF_STAT register read from ADS for ecg setup is= 0x%X\n",data1); 00176 00177 } 00178 00179 void doHelp(void) 00180 { 00181 printf("=== spi test ===\n\r") ; 00182 printf("commands available\n\r") ; 00183 printf("help\n\r") ; 00184 printf("status\n\r") ; 00185 printf("freq freq_in_hz\n\r") ; 00186 printf("mode (0 | 1 | 2 | 3)\n\r") ; 00187 printf("bit (4 - 16)\n\r") ; 00188 printf("write value\n\r") ; 00189 printf("read\n\r") ; 00190 printf("loop number (set repeat number for read/write)\n\r") ; 00191 } 00192 00193 void doStatus(void) 00194 { 00195 printf("=== Status Report ===\n\r") ; 00196 printf("bits: %d\n\r", bits) ; 00197 printf("mode: %d\n\r", mode) ; 00198 printf("freq: %d Hz\n\r", freq) ; 00199 printf("loop: %d\n\r", loop) ; 00200 } 00201 00202 void doFreq(void) 00203 { 00204 // int freq = 0 ; 00205 // scanf("%d", &freq) ; 00206 printf("setting frequency to %d\n\r", freq) ; 00207 mySpi.frequency(freq) ; 00208 } 00209 00210 void doMode(void) 00211 { 00212 //scanf("%d", &mode) ; 00213 printf("setting format(%d, %d)\n\r",bits, mode) ; 00214 mySpi.format(bits, mode) ; 00215 } 00216 00217 void doBit(void) 00218 { 00219 // scanf("%d", &bits) ; 00220 printf("setting format(%d, %d)\n\r",bits, mode) ; 00221 mySpi.format(bits, mode) ; 00222 } 00223 00224 void doWrite(void) 00225 { 00226 00227 //DRDY_BAR1.disable_irq(); 00228 00229 CHIPSEL_BAR = 0; 00230 // int freq1 = 50000; 00231 // mySpi.frequency(freq1) ; 00232 value1 = mySpi.write(0x00); 00233 value2 = mySpi.write(0x00); 00234 value3 = mySpi.write(0x00); 00235 value4 = mySpi.write(0x00); 00236 value5 = mySpi.write(0x00); 00237 value6 = mySpi.write(0x00); 00238 00239 CHIPSEL_BAR = 0; 00240 //DRDY_BAR1.enable_irq(); 00241 } 00242 00243 void doRead(void) 00244 { 00245 int dummy = 0 ; 00246 00247 while(!DRDY_BAR) 00248 ADS_START = 0; 00249 00250 value = mySpi.write(dummy) ; 00251 00252 } 00253 00254 void doLoop(void) 00255 { 00256 // scanf("%d", &loop) ; 00257 printf("repeat number has been set to %d\n\r", loop) ; 00258 } 00259 00260 void cmdWrite(int data) 00261 { 00262 CHIPSEL_BAR = 0; 00263 mySpi.write(data) ; 00264 wait_ms(1); 00265 CHIPSEL_BAR = 1; 00266 } 00267 00268 void regWrite(int address, int data) 00269 { 00270 int data_to_send = CMD_WREG << 5; 00271 data_to_send = data_to_send | address; 00272 CHIPSEL_BAR = 0; 00273 mySpi.write(data_to_send); 00274 wait_ms(1); 00275 mySpi.write(0x00) ; 00276 wait_ms(1); 00277 mySpi.write(data) ; 00278 wait_ms(1); 00279 CHIPSEL_BAR = 1; 00280 } 00281 00282 void regRead(int address) 00283 { 00284 int data_to_receive = CMD_RREG << 5; 00285 data_to_receive = data_to_receive | address; 00286 CHIPSEL_BAR = 0; 00287 mySpi.write(data_to_receive); 00288 wait_ms(1); 00289 mySpi.write(0x00) ; 00290 wait_ms(1); 00291 data1 = mySpi.write(0x00) ; 00292 00293 //printf("DEVICE ID register read from ADS is= 0x%X\n",data1); 00294 00295 //wait_ms(1); 00296 CHIPSEL_BAR = 1; 00297 } 00298 00299 00300 00301 void freqset() 00302 { 00303 mySpi.frequency(freq) ; 00304 mySpi.format(bits, mode) ; 00305 } 00306 00307 00308 00309 void setupfunc() 00310 { 00311 setup() ; 00312 cmdWrite(CMD_RDATAC) ; 00313 ADS_START = 1; 00314 } 00315 00316 uint8_t ecgsetupfunc() 00317 { 00318 // uint8_t lead=0; 00319 ecgsetup(); // To set the ADS1291 registers for ECG signal generation 00320 cmdWrite(CMD_RDATAC) ; 00321 ADS_START = 1; 00322 return data1; // returns lead off reg value // 14/06 00323 } 00324 00325 void ecgtestsetupfunc() 00326 { 00327 testsetup(); // To set the ADS1291 registers for ECG signal generation 00328 cmdWrite(CMD_RDATAC) ; 00329 ADS_START = 1; 00330 00331 } 00332 uint32_t readvalue() 00333 { 00334 uint32_t concatenate_value; 00335 while(DRDY_BAR); 00336 doWrite() ; 00337 concatenate_value = ((value4<< 16)|(value5 <<8) |(value6)); 00338 00339 return concatenate_value; 00340 } 00341 00342 00343 00344 00345
Generated on Mon Jul 18 2022 19:19:02 by
1.7.2
