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.
Fork of ADXL362 by
ADXL362.cpp
00001 #include "mbed.h" 00002 #include "ADXL362.h" 00003 #include "main.h" 00004 00005 // Class 00006 00007 ADXL362::ADXL362(PinName mosi, PinName miso, PinName sclk, PinName cbs) 00008 : SPI_m(mosi, miso, sclk) 00009 , CBS_m(cbs) { 00010 CBS_m=1; 00011 } 00012 00013 // SPI 00014 00015 void ADXL362::init_spi(){ 00016 // spi 8 bits, mode 0, 1 MHz for adxl362 00017 SPI_m.format(8,0); 00018 // 5 MHz, max for acc - works fine 00019 SPI_m.frequency(5000000); 00020 } 00021 00022 00023 00024 void ADXL362::init_adxl362() 00025 { 00026 uint8_t reg; 00027 // reset the adxl362 00028 wait_ms(200); 00029 ACC_WriteReg(RESET, 0x52); 00030 wait_ms(200); 00031 00032 // set FIFO 00033 ACC_WriteReg(FIFO_CTL,0x0A); // stream mode, AH bit 00034 00035 /////////////////////////////////////////////////////////////////////////////////////// 00036 reg = ACC_ReadReg(FILTER_CTL); 00037 printf("1 ------------------Start : FILTER_CTL = 0x%X\r\n\n", reg); 00038 00039 00040 // printf("2 ------------------Input : FILTER_CTL = 0x17\r\n"); 00041 wait_ms(25); 00042 00043 /////////////////////////////////////////////////////////////////////////////////////// 00044 00045 //ACC_WriteReg(FIFO_CTL,0x02); // stream mode, no AH bit 00046 //reg = ACC_ReadReg(FIFO_CTL); 00047 //printf("FIFO_CTL = 0x%X\r\n", reg); 00048 00049 // Not used but keep in case it is important to set FIFO parameters. 00050 //ACC_WriteReg(FIFO_SAM,SAMPLE_SET * 3); // fifo depth 00051 //reg = ACC_ReadReg(FIFO_SAM); 00052 //pc.printf("FIFO_SAM = 0x%X\r\n", reg); 00053 00054 00055 printf("2 ------------------Connect accelerometer"); 00056 00057 while(reg != 0x17) 00058 { 00059 printf(" vib while...\n"); 00060 00061 // set adxl362 to 4g range, 25Hz 00062 //ACC_WriteReg(FILTER_CTL,0x51); 00063 // 2g, 25Hz 00064 ACC_WriteReg(FILTER_CTL,0x17); 00065 //reg = ACC_ReadReg(FILTER_CTL); 00066 //printf("FILTER_CTL = 0x%X\r\n", reg); 00067 00068 reg = ACC_ReadReg(FILTER_CTL); 00069 00070 if(reg == 0x17) 00071 { 00072 printf(" Success!!\n\n"); 00073 // printf("2 ------------------Output : FILTER_CTL = 0x%X\r\n\n\n", reg); 00074 } 00075 else 00076 { 00077 printf("."); 00078 } 00079 wait_ms(500); 00080 } 00081 00082 // map adxl362 interrupts 00083 //ACC_WriteReg(INTMAP1,0x01); //data ready 00084 ACC_WriteReg(INTMAP1,0x04); //watermark 00085 //reg = ACC_ReadReg(INTMAP1); 00086 //pc.printf("INTMAP1 = 0x%X\r\n", reg); 00087 00088 // set adxl362 to measurement mode, ultralow noise 00089 ACC_WriteReg(POWER_CTL,0x22); 00090 //reg = ACC_ReadReg(POWER_CTL); 00091 //pc.printf("POWER_CTL = 0x%X\r\n", reg); 00092 } 00093 00094 void ADXL362::ACC_GetXYZ16(int16_t* x16, int16_t* y16, int16_t* z16) 00095 { 00096 int8_t x8=0; 00097 int8_t y8=0; 00098 int8_t z8=0; 00099 00100 CBS_m = DOWN; 00101 SPI_m.write(RD_SPI); 00102 00103 SPI_m.write(0x0E); 00104 x8 = SPI_m.write(0x00); 00105 *x16 = x8 << 0; 00106 x8 = SPI_m.write(0x00); 00107 // *x16 |= x8 << 8; 00108 *x16 = x8 << 8; 00109 printf("[X Hex value]\n"); 00110 printf("1. x8 : [%02X]\n", x8); 00111 printf("2. *x16 : [%04X]\n", *x16); 00112 00113 printf("[X Decimal value]\n"); 00114 printf("1. x8 : [%d]\n", x8); 00115 printf("2. *x16 : [%d]\n", *x16); 00116 00117 y8 = SPI_m.write(0x00); 00118 *y16 = y8 << 0; 00119 y8 = SPI_m.write(0x00); 00120 // *y16 |= y8 << 8; 00121 *y16 = y8 << 8; 00122 printf("\n[Y Hex value]\n"); 00123 printf("1. y8 : [%02X]\n", y8); 00124 printf("2. *y16 : [%04X]\n", *y16); 00125 00126 z8 = SPI_m.write(0x00); 00127 *z16 = z8 << 0; 00128 z8 = SPI_m.write(0x00); 00129 // *z16 |= z8 << 8; 00130 *z16 = z8 << 8; 00131 printf("\n[Z Hex value]\n"); 00132 printf("1. z8 : [%02X]\n", z8); 00133 printf("2. *z16 : [%04X]\n", *z16); 00134 00135 CBS_m = UP; 00136 } 00137 00138 void ADXL362::ACC_GetXYZ8(int8_t* x8, int8_t* y8, int8_t* z8) 00139 { 00140 00141 CBS_m = DOWN; 00142 SPI_m.write(RD_SPI); 00143 //-> 레지스터 주소바꿈 00144 SPI_m.write(0x08); 00145 00146 //-> 인자에 가속도 값 바로저장 00147 *x8 = SPI_m.write(0x00); 00148 *y8 = SPI_m.write(0x00); 00149 *z8 = SPI_m.write(0x00); 00150 00151 CBS_m = UP; 00152 } 00153 00154 uint8_t ADXL362::ACC_ReadReg( uint8_t reg ) 00155 { 00156 CBS_m = DOWN; 00157 SPI_m.write(RD_SPI); 00158 SPI_m.write(reg); 00159 uint8_t val = SPI_m.write(0x00); 00160 CBS_m = UP; 00161 return (val); 00162 } 00163 00164 void ADXL362::ACC_WriteReg( uint8_t reg, uint8_t cmd ) 00165 { 00166 CBS_m = DOWN; 00167 SPI_m.write(WR_SPI); 00168 SPI_m.write(reg); 00169 SPI_m.write(cmd); 00170 CBS_m = UP; 00171 }
Generated on Thu Aug 18 2022 22:18:55 by
1.7.2
