void ADXL362::setupDCInactivityInterrupt(int threshold, uint8_t time){ // Setup motion and time thresholds SPIwriteTwoRegisters(XL362_THRESH_ACT_L, threshold); SPIwriteOneRegister(XL362_TIME_ACT, time); // turn on inactivity interrupt uint8_t ACT_INACT_CTL_Reg = SPIreadOneRegister(XL362_ACT_INACT_CTL); // Read current reg value ACT_INACT_CTL_Reg = ACT_INACT_CTL_Reg | (0x04); // turn on bit 3, INACT_EN SPIwriteOneRegister(XL362_ACT_INACT_CTL, ACT_INACT_CTL_Reg); // Write new reg value #ifdef ADXL362_DEBUG Serial.print("DC Activity Threshold set to "); Serial.print(SPIreadTwoRegisters(XL362_THRESH_ACT_L)); Serial.print(", Time threshold set to "); Serial.print(SPIreadOneRegister(XL362_TIME_ACT)); Serial.print(", ACT_INACT_CTL Register is "); Serial.println(SPIreadOneRegister(XL362_ACT_INACT_CTL), HEX); #endif }
void ADXL362::setRange(uint8_t Range){ // Modify range (+-2g +-4g +-8g - ADXL362 Datasheep Page 33 // Choose RangeFlag between XL362_FILTER_FLAG_2G (default), XL362_FILTER_FLAG_4G, XL362_FILTER_FLAG_8G uint8_t temp = SPIreadOneRegister(XL362_FILTER_CTL); // read Reg XL362_FILTER_CTL before modifying #ifdef ADXL362_DEBUG Serial.print( "Setting Measurement Range - Reg XL362_FILTER_CTL before = "); Serial.print(temp); #endif switch ( Range ) { // Range affects converting LSB to mg case XL362_FILTER_FLAG_2G: mgperLSB = 1; break; case XL362_FILTER_FLAG_4G: mgperLSB = 2; break; case XL362_FILTER_FLAG_8G: mgperLSB = 4; break; default: // YOU SHOULDN'T BE HERE ! mgperLSB = 1; break; } temp = temp & 0b00111111 | Range; SPIwriteOneRegister(XL362_FILTER_CTL, temp); // Write to XL362_FILTER_CTL delay(10); #ifdef ADXL362_DEBUG temp = SPIreadOneRegister(XL362_FILTER_CTL); Serial.print( ", Reg after = "); Serial.println(temp); #endif }
void ADXL362::setupACActivityInterrupt(int threshold, byte time){ // Setup motion and time thresholds SPIwriteTwoRegisters(0x20, threshold); SPIwriteOneRegister(0x22, time); // turn on activity interrupt byte ACT_INACT_CTL_Reg = SPIreadOneRegister(0x27); // Read current reg value ACT_INACT_CTL_Reg = ACT_INACT_CTL_Reg | (0x03); // turn on bit 2 and 1, ACT_AC_DCB, ACT_EN SPIwriteOneRegister(0x27, ACT_INACT_CTL_Reg); // Write new reg value ACT_INACT_CTL_Reg = SPIreadOneRegister(0x27); // Verify properly written #ifdef ADXL362_DEBUG Serial.print("AC Activity Threshold set to "); Serial.print(SPIreadTwoRegisters(0x20)); Serial.print(", Time Activity set to "); Serial.print(SPIreadOneRegister(0x22)); Serial.print(", ACT_INACT_CTL Register is "); Serial.println(ACT_INACT_CTL_Reg, HEX); #endif }
// // begin() // Initial SPI setup, soft reset of device // void ADXL362::begin() { pinMode(slaveSelectPin, OUTPUT); SPI.begin(); SPI.setDataMode(SPI_MODE0); //CPHA = CPOL = 0 MODE = 0 delay(1000); // soft reset SPIwriteOneRegister(0x1F, 0x52); // Write to SOFT RESET, "R" delay(10); #ifdef ADXL362_DEBUG Serial.println("Soft Reset\n"); #endif }
void ADXL362::setupDCInactivityInterrupt(int threshold, int time){ // Setup motion and time thresholds SPIwriteTwoRegisters(0x23, threshold); SPIwriteTwoRegisters(0x25, time); // turn on inactivity interrupt byte ACT_INACT_CTL_Reg = SPIreadOneRegister(0x27); // Read current reg value ACT_INACT_CTL_Reg = ACT_INACT_CTL_Reg | (0x04); // turn on bit 3, INACT_EN SPIwriteOneRegister(0x27, ACT_INACT_CTL_Reg); // Write new reg value ACT_INACT_CTL_Reg = SPIreadOneRegister(0x27); // Verify properly written #ifdef ADXL362_DEBUG Serial.print("DC Inactivity Threshold set to "); Serial.print(SPIreadTwoRegisters(0x23)); Serial.print(", Time Inactivity set to "); Serial.print(SPIreadTwoRegisters(0x25)); Serial.print(", ACT_INACT_CTL Register is "); Serial.println(ACT_INACT_CTL_Reg, HEX); #endif }
// // beginMeasure() // turn on Measurement mode - required after reset // void ADXL362::beginMeasure() { uint8_t temp = SPIreadOneRegister(XL362_POWER_CTL); // read Reg 2D before modifying for measure mode #ifdef ADXL362_DEBUG Serial.print( "Setting Measeurement Mode - Reg XL362_POWER_CTL before = "); Serial.print(temp); #endif // turn on measurement mode temp = (temp & 0b11111100) | XL362_POWER_FLAG_MEASURE_RUNING; // turn on measurement bit in Reg XL362_POWER_CTL SPIwriteOneRegister(XL362_POWER_CTL, temp); // Write to XL362_POWER_CTL, Measurement Mode delay(10); #ifdef ADXL362_DEBUG temp = SPIreadOneRegister(XL362_POWER_CTL); Serial.print( ", Reg XL362_POWER_CTL after = "); Serial.println(temp); #endif }
void ADXL362::setNoiseLevel(uint8_t NoiseLevel){ // modify Noise Level - ADXL362 Datasheep Page 34 // Choose NoiseLevel between XL362_POWER_FLAG_NOISE_NORMAL (default), XL362_POWER_FLAG_NOISE_LOW, XL362_POWER_FLAG_NOISE_ULTRALOW uint8_t temp = SPIreadOneRegister(XL362_POWER_CTL); // read Reg XL362_FILTER_CTL before modifying #ifdef ADXL362_DEBUG Serial.print( "Setting Output Data Rate - Reg XL362_POWER_CTL before = "); Serial.print(temp); #endif temp = temp & 0b11001111 | NoiseLevel; SPIwriteOneRegister(XL362_POWER_CTL, temp); // Write to XL362_FILTER_CTL delay(10); #ifdef ADXL362_DEBUG temp = SPIreadOneRegister(XL362_POWER_CTL); Serial.print( ", Reg after = "); Serial.println(temp); #endif }
void ADXL362::setOutputDatarate(uint8_t ODR){ // modify Output Data Rate - ADXL362 Datasheep Page 33 // Choose ODR between XL362_FILTER_FLAG_ODR12, XL362_FILTER_FLAG_ODR25, XL362_FILTER_FLAG_ODR50, XL362_FILTER_FLAG_ODR100 (default), XL362_FILTER_FLAG_ODR200 , XL362_FILTER_FLAG_ODR400 uint8_t temp = SPIreadOneRegister(XL362_FILTER_CTL); // read Reg XL362_FILTER_CTL before modifying #ifdef ADXL362_DEBUG Serial.print( "Setting Output Data Rate - Reg XL362_FILTER_CTL before = "); Serial.print(temp); #endif temp = temp & 0b11111000 | ODR; SPIwriteOneRegister(XL362_FILTER_CTL, temp); // Write to XL362_FILTER_CTL delay(10); #ifdef ADXL362_DEBUG temp = SPIreadOneRegister(XL362_FILTER_CTL); Serial.print( ", Reg after = "); Serial.println(temp); #endif }
void ADXL362::setBandwidth(uint8_t BandWidth){ // modify Bandwidth - ADXL362 Datasheep Page 33 // Choose Bandwidth between XL362_FILTER_FLAG_HBW (default), XL362_FILTER_FLAG_FBW uint8_t temp = SPIreadOneRegister(XL362_FILTER_CTL); // read Reg XL362_FILTER_CTL before modifying #ifdef ADXL362_DEBUG Serial.print( "Setting BandWidth - Reg XL362_FILTER_CTL before = "); Serial.print(temp); #endif temp = temp & 0b11101111 | BandWidth; SPIwriteOneRegister(XL362_FILTER_CTL, temp); // Write to XL362_FILTER_CTL delay(10); #ifdef ADXL362_DEBUG temp = SPIreadOneRegister(XL362_FILTER_CTL); Serial.print( ", Reg after = "); Serial.println(temp); #endif }
// // beginMeasure() // turn on Measurement mode - required after reset // void ADXL362::beginMeasure() { byte temp = SPIreadOneRegister(0x2D); // read Reg 2D before modifying for measure mode #ifdef ADXL362_DEBUG Serial.print( "Setting Measeurement Mode - Reg 2D before = "); Serial.print(temp); #endif // turn on measurement mode byte tempwrite = temp | 0x02; // turn on measurement bit in Reg 2D SPIwriteOneRegister(0x2D, tempwrite); // Write to POWER_CTL_REG, Measurement Mode delay(10); #ifdef ADXL362_DEBUG temp = SPIreadOneRegister(0x2D); Serial.print( ", Reg 2D after = "); Serial.println(temp); Serial.println(); #endif }