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.
ads1299.cpp
00001 #include "mbed.h" 00002 #include "ads1299.h" 00003 00004 SPI spi(SPI_MOSI,SPI_MISO,SPI_SCK); 00005 DigitalOut CS(PA_4); 00006 InterruptIn DRDY(PA_2); 00007 00008 long ADS129X_data[9]; 00009 bool ADS129X_newData; 00010 void ADS129X_dataReadyISR(); 00011 00012 void SPI_INIT(void){ 00013 spi.format(8,1); 00014 spi.frequency(1000000); 00015 } 00016 00017 void WAKEUP() { 00018 CS = 0; 00019 spi.write(ADS129X_CMD_WAKEUP); 00020 wait_us(2); 00021 CS = 1; 00022 wait_us(2); 00023 } 00024 00025 void STANDBY() { 00026 CS = 0; 00027 spi.write(ADS129X_CMD_STANDBY); 00028 wait_us(2); 00029 CS = 1; 00030 } 00031 00032 void RSET() { 00033 CS = 0; 00034 spi.write(ADS129X_CMD_RESET); 00035 wait_us(2); 00036 CS =1; 00037 wait_ms(10); 00038 } 00039 00040 void START() { 00041 // CS = 0; 00042 //spi.write(ADS129X_CMD_START); 00043 // wait_us(2); 00044 // CS = 1; 00045 RDATA(); 00046 DRDY.fall(&ADS129X_dataReadyISR); 00047 } 00048 00049 00050 void RDATAC() { 00051 CS =0;; 00052 spi.write(ADS129X_CMD_RDATAC); 00053 wait_us(2); 00054 CS = 1; 00055 wait_us(2); //must way at least 4 tCLK cycles before sending another command (Datasheet, pg. 39) 00056 } 00057 00058 void SDATAC() { 00059 CS = 0; 00060 spi.write(ADS129X_CMD_SDATAC); //SDATAC 00061 wait_us(2); 00062 CS=1; 00063 } 00064 00065 void RDATA() { 00066 CS =0; 00067 spi.write(ADS129X_CMD_RDATA); 00068 wait_us(2); 00069 CS=1; 00070 } 00071 00072 char RREG(char _address) { 00073 char opcode1 = ADS129X_CMD_RREG | (_address & 0x1F); //001rrrrr; _RREG = 00100000 and _address = rrrrr 00074 CS = 0; //Low to communicate 00075 spi.write(opcode1); //RREG 00076 spi.write(0x00); //opcode2 00077 wait_us(1); 00078 char data = spi.write(0x00); // read (Datasheet, pg.39) 00079 wait_us(2); 00080 CS =1; //High to end communication 00081 return data; 00082 } 00083 00084 void RREG(char _address, char _numRegisters, char *_data) { 00085 char opcode1 = ADS129X_CMD_RREG | (_address & 0x1F); //001rrrrr; _RREG = 00100000 and _address = rrrrr 00086 CS = 0; 00087 spi.write(ADS129X_CMD_SDATAC); //SDATAC 00088 spi.write(opcode1); //RREG 00089 spi.write(_numRegisters-1); //opcode2 00090 for(char i = 0; i < _numRegisters; i++){ 00091 *(_data+i) = spi.write(0x00); 00092 } 00093 wait_us(2); 00094 CS = 1; 00095 } 00096 00097 void WREG(char _address, char _value) { 00098 char opcode1 = ADS129X_CMD_WREG | (_address & 0x1F); //001rrrrr; _RREG = 00100000 and _address = rrrrr ds 00099 CS=0; //Low to communicate 00100 spi.write(opcode1); 00101 spi.write(0x00); // opcode2; only write one register 00102 spi.write(_value); 00103 wait_us(2); 00104 CS = 1; //Low to communicate 00105 } 00106 00107 char getDeviceId() { 00108 CS=0; //Low to communicate 00109 spi.write(ADS129X_CMD_RREG); //RREG 00110 spi.write(0x00); 00111 char data = spi.write(0x00); // byte to read (hopefully 0b???11110) 00112 wait_us(2); 00113 CS=1; //Low to communicate 00114 return data; 00115 } 00116 00117 void Set_IRQ(){ 00118 // DRDY.fall(&ADS129X_dataReadyISR); 00119 } 00120 00121 void ADS129X_dataReadyISR() { 00122 00123 CS = 0; 00124 00125 // status 00126 ((char*) ADS129X_data)[0*4+3] = 0; 00127 ((char*) ADS129X_data)[0*4+2] = spi.write(0x00); 00128 ((char*) ADS129X_data)[0*4+1] = spi.write(0x00); 00129 ((char*) ADS129X_data)[0*4+0] = spi.write(0x00); 00130 // channel 1 00131 ((char*) ADS129X_data)[1*4+3] = 0; 00132 ((char*) ADS129X_data)[1*4+2] = spi.write(0x00); 00133 ((char*) ADS129X_data)[1*4+1] = spi.write(0x00); 00134 ((char*) ADS129X_data)[1*4+0] = spi.write(0x00); 00135 // channel 2 00136 ((char*) ADS129X_data)[2*4+3] = 0; 00137 ((char*) ADS129X_data)[2*4+2] = spi.write(0x00); 00138 ((char*) ADS129X_data)[2*4+1] = spi.write(0x00); 00139 ((char*) ADS129X_data)[2*4+0] = spi.write(0x00); 00140 // channel 3 00141 ((char*) ADS129X_data)[3*4+3] = 0; 00142 ((char*) ADS129X_data)[3*4+2] = spi.write(0x00); 00143 ((char*) ADS129X_data)[3*4+1] = spi.write(0x00); 00144 ((char*) ADS129X_data)[3*4+0] = spi.write(0x00); 00145 // channel 4 00146 ((char*) ADS129X_data)[4*4+3] = 0; 00147 ((char*) ADS129X_data)[4*4+2] = spi.write(0x00); 00148 ((char*) ADS129X_data)[4*4+1] = spi.write(0x00); 00149 ((char*) ADS129X_data)[4*4+0] = spi.write(0x00); 00150 // channel 5 00151 ((char*) ADS129X_data)[5*4+3] = 0; 00152 ((char*) ADS129X_data)[5*4+2] = spi.write(0x00); 00153 ((char*) ADS129X_data)[5*4+1] = spi.write(0x00); 00154 ((char*) ADS129X_data)[5*4+0] = spi.write(0x00); 00155 // channel 6 00156 ((char*) ADS129X_data)[6*4+3] = 0; 00157 ((char*) ADS129X_data)[6*4+2] = spi.write(0x00); 00158 ((char*) ADS129X_data)[6*4+1] = spi.write(0x00); 00159 ((char*) ADS129X_data)[6*4+0] = spi.write(0x00); 00160 // channel 7 00161 ((char*) ADS129X_data)[7*4+3] = 0; 00162 ((char*) ADS129X_data)[7*4+2] = spi.write(0x00); 00163 ((char*) ADS129X_data)[7*4+1] = spi.write(0x00); 00164 ((char*) ADS129X_data)[7*4+0] = spi.write(0x00); 00165 // channel 8 00166 ((char*) ADS129X_data)[8*4+3] = 0; 00167 ((char*) ADS129X_data)[8*4+2] = spi.write(0x00); 00168 ((char*) ADS129X_data)[8*4+1] = spi.write(0x00); 00169 ((char*) ADS129X_data)[8*4+0] = spi.write(0x00); 00170 CS = 1; 00171 ADS129X_newData = true; 00172 } 00173 00174 bool getData(long *buffer) { 00175 if(ADS129X_newData) { 00176 ADS129X_newData = false; 00177 for (int i = 0; i < 9; i++) { 00178 buffer[i] = ADS129X_data[i]; 00179 } 00180 return true; 00181 } 00182 return false; 00183 } 00184 00185 00186 00187 void configChannel(char _channel, bool _powerDown, char _gain, char _mux) { 00188 char value = ((_powerDown & 1)<<7) | ((_gain & 7)<<4) | (_mux & 7); 00189 WREG(ADS129X_REG_CH1SET + (_channel-1), value); 00190 } 00191 00192 00193 00194 00195 00196 00197 00198 00199 00200 00201 00202 00203 00204 00205 00206 00207 00208 00209 00210 00211 00212 00213 00214 00215 00216 00217 00218 00219 00220 00221 00222
Generated on Thu Jul 14 2022 00:20:03 by
1.7.2