180622 HJM : 10 Count sensing data RF send and bug fix
Fork of ADXL362 by
Diff: ADXL362.cpp
- Revision:
- 1:bf56b783747e
- Parent:
- 0:d9853774f233
- Child:
- 2:e484040b8f84
--- a/ADXL362.cpp Thu Mar 03 13:49:03 2016 +0000 +++ b/ADXL362.cpp Fri Jun 22 03:41:47 2018 +0000 @@ -1,18 +1,19 @@ #include "mbed.h" #include "ADXL362.h" +#include "main.h" // Class ADXL362::ADXL362(PinName mosi, PinName miso, PinName sclk, PinName cbs) - : SPI_m(mosi, miso, sclk) - , CBS_m(cbs) { - CBS_m=1; - } - + : SPI_m(mosi, miso, sclk) + , CBS_m(cbs) { + CBS_m=1; + } + // SPI void ADXL362::init_spi(){ - // spi 8 bits, mode 0, 1 MHz for adxl362 + // spi 8 bits, mode 0, 1 MHz for adxl362 SPI_m.format(8,0); // 5 MHz, max for acc - works fine SPI_m.frequency(5000000); @@ -20,31 +21,64 @@ -void ADXL362::init_adxl362(){ - //uint8_t reg; - // reset the adxl362 +void ADXL362::init_adxl362() +{ + uint8_t reg; + // reset the adxl362 wait_ms(200); ACC_WriteReg(RESET, 0x52); wait_ms(200); // set FIFO ACC_WriteReg(FIFO_CTL,0x0A); // stream mode, AH bit + +/////////////////////////////////////////////////////////////////////////////////////// + reg = ACC_ReadReg(FILTER_CTL); + printf("1 ------------------Start : FILTER_CTL = 0x%X\r\n\n", reg); + + +// printf("2 ------------------Input : FILTER_CTL = 0x17\r\n"); + wait_ms(25); + +/////////////////////////////////////////////////////////////////////////////////////// + //ACC_WriteReg(FIFO_CTL,0x02); // stream mode, no AH bit //reg = ACC_ReadReg(FIFO_CTL); - //pc.printf("FIFO_CTL = 0x%X\r\n", reg); + //printf("FIFO_CTL = 0x%X\r\n", reg); - // Not used but keep in case it is important to set FIFO parameters. + // Not used but keep in case it is important to set FIFO parameters. //ACC_WriteReg(FIFO_SAM,SAMPLE_SET * 3); // fifo depth //reg = ACC_ReadReg(FIFO_SAM); //pc.printf("FIFO_SAM = 0x%X\r\n", reg); - // set adxl362 to 4g range, 25Hz - //ACC_WriteReg(FILTER_CTL,0x51); - // 2g, 25Hz - ACC_WriteReg(FILTER_CTL,0x11); - //reg = ACC_ReadReg(FILTER_CTL); - //printf("FILTER_CTL = 0x%X\r\n", reg); + + printf("2 ------------------Connect accelerometer"); + while(reg != 0x17) + { + printf(" vib while...\n"); + + // set adxl362 to 4g range, 25Hz + //ACC_WriteReg(FILTER_CTL,0x51); + // 2g, 25Hz + ACC_WriteReg(FILTER_CTL,0x17); + //reg = ACC_ReadReg(FILTER_CTL); + //printf("FILTER_CTL = 0x%X\r\n", reg); + + reg = ACC_ReadReg(FILTER_CTL); + + if(reg == 0x17) + { + printf(" Success!!\n\n"); +// printf("2 ------------------Output : FILTER_CTL = 0x%X\r\n\n\n", reg); + } + else + { + printf("."); + } + wait_ms(500); + } + // map adxl362 interrupts //ACC_WriteReg(INTMAP1,0x01); //data ready ACC_WriteReg(INTMAP1,0x04); //watermark @@ -57,19 +91,65 @@ //pc.printf("POWER_CTL = 0x%X\r\n", reg); } -void ADXL362::ACC_GetXYZ8(int8_t* x, int8_t* y, int8_t* z) +void ADXL362::ACC_GetXYZ16(int16_t* x16, int16_t* y16, int16_t* z16) { + int8_t x8=0; + int8_t y8=0; + int8_t z8=0; + CBS_m = DOWN; SPI_m.write(RD_SPI); - SPI_m.write(0x08); + + SPI_m.write(0x0E); + x8 = SPI_m.write(0x00); + *x16 = x8 << 0; + x8 = SPI_m.write(0x00); +// *x16 |= x8 << 8; + *x16 = x8 << 8; + printf("[X Hex value]\n"); + printf("1. x8 : [%02X]\n", x8); + printf("2. *x16 : [%04X]\n", *x16); + + printf("[X Decimal value]\n"); + printf("1. x8 : [%d]\n", x8); + printf("2. *x16 : [%d]\n", *x16); - *x = SPI_m.write(0x00); - *y = SPI_m.write(0x00); - *z = SPI_m.write(0x00); + y8 = SPI_m.write(0x00); + *y16 = y8 << 0; + y8 = SPI_m.write(0x00); +// *y16 |= y8 << 8; + *y16 = y8 << 8; + printf("\n[Y Hex value]\n"); + printf("1. y8 : [%02X]\n", y8); + printf("2. *y16 : [%04X]\n", *y16); - CBS_m = UP; + z8 = SPI_m.write(0x00); + *z16 = z8 << 0; + z8 = SPI_m.write(0x00); +// *z16 |= z8 << 8; + *z16 = z8 << 8; + printf("\n[Z Hex value]\n"); + printf("1. z8 : [%02X]\n", z8); + printf("2. *z16 : [%04X]\n", *z16); + + CBS_m = UP; } +void ADXL362::ACC_GetXYZ8(int8_t* x8, int8_t* y8, int8_t* z8) +{ + + CBS_m = DOWN; + SPI_m.write(RD_SPI); + //-> 레지스터 주소바꿈 + SPI_m.write(0x08); + + //-> 인자에 가속도 값 바로저장 + *x8 = SPI_m.write(0x00); + *y8 = SPI_m.write(0x00); + *z8 = SPI_m.write(0x00); + + CBS_m = UP; +} uint8_t ADXL362::ACC_ReadReg( uint8_t reg ) {