// function to write a register value to the adc // argumen: adress for the register to write into, value to write void ads12xx::SetRegisterValue(uint8_t regAdress, uint8_t regValue) { #ifdef ADS1248 if (regAdress == IDAC0) { regValue = regValue | IDAC0_ID; // add non 0 non-write register value IDAC0_ID } #endif uint8_t regValuePre = ads12xx::GetRegisterValue(regAdress); if (regValue != regValuePre) { delayMicroseconds(10); waitforDRDY(); SPI.beginTransaction(SPISettings(SPI_SPEED, MSBFIRST, SPI_MODE1)); // initialize SPI with SPI_SPEED, MSB first, SPI Mode1 digitalWrite(_CS, LOW); delayMicroseconds(10); SPI.transfer(WREG | regAdress); // send 1st command byte, address of the register SPI.transfer(0x00); // send 2nd command byte, write only one register SPI.transfer(regValue); // write data (1 Byte) for the register delayMicroseconds(10); digitalWrite(_CS, HIGH); if (regValue != ads12xx::GetRegisterValue(regAdress)) { //Check if write was succesfull Serial.print("Write to Register 0x"); Serial.print(regAdress, HEX); Serial.println(" failed!"); } else SPI.endTransaction(); } }
/* Sends a Command to the ADC Like SELFCAL, GAIN, SYNC, WAKEUP */ void ads12xx::SendCMD(uint8_t cmd) { waitforDRDY(); SPI.beginTransaction(SPISettings(SPI_SPEED, MSBFIRST, SPI_MODE1)); // initialize SPI with 4Mhz clock, MSB first, SPI Mode0 digitalWrite(_CS, LOW); delayMicroseconds(10); SPI.transfer(cmd); delayMicroseconds(10); digitalWrite(_CS, HIGH); SPI.endTransaction(); }
//function to read a register value from the adc //argument: adress for the register to read unsigned long ads12xx::GetRegisterValue(uint8_t regAdress) { waitforDRDY(); SPI.beginTransaction(SPISettings(SPI_SPEED, MSBFIRST, SPI_MODE1)); // initialize SPI with 4Mhz clock, MSB first, SPI Mode0 uint8_t bufr; digitalWrite(_CS, LOW); delayMicroseconds(10); SPI.transfer(RREG | regAdress); // send 1st command byte, address of the register SPI.transfer(0x00); // send 2nd command byte, read only one register delayMicroseconds(10); bufr = SPI.transfer(NOP); // read data of the register delayMicroseconds(10); digitalWrite(_CS, HIGH); return bufr; SPI.endTransaction(); }
// function to get a 3byte conversion result from the adc long ads12xx::GetConversion() { int32_t regData; waitforDRDY(); // Wait until DRDY is LOW SPI.beginTransaction(SPISettings(SPI_SPEED, MSBFIRST, SPI_MODE1)); digitalWrite(_CS, LOW); //Pull SS Low to Enable Communications with ADS1247 delayMicroseconds(10); // RD: Wait 25ns for ADC12xx to get ready SPI.transfer(RDATA); //Issue RDATA delayMicroseconds(10); regData |= SPI.transfer(NOP); //delayMicroseconds(10); regData <<= 8; regData |= SPI.transfer(NOP); //delayMicroseconds(10); regData <<= 8; regData |= SPI.transfer(NOP); delayMicroseconds(10); digitalWrite(_CS, HIGH); SPI.endTransaction(); return regData; }