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 COG4050_adxl355_adxl357-ver2 by
ADXRS290.cpp
00001 #include <stdint.h> 00002 #include "mbed.h" 00003 #include "ADXRS290.h" 00004 00005 /** ----------------------------------- */ 00006 /** SPI - MAX 5MHZ */ 00007 /** ----------------------------------- */ 00008 ADXRS290::ADXRS290(PinName cs_pin, PinName MOSI, PinName MISO, PinName SCK): adxrs290(MOSI, MISO, SCK), cs(cs_pin) 00009 { 00010 cs = 1; 00011 adxrs290.format(8,_SPI_MODE); 00012 adxrs290.lock(); 00013 } 00014 void ADXRS290::frequency(int hz) 00015 { 00016 adxrs290.frequency(hz); 00017 } 00018 00019 /** ----------------------------------- */ 00020 /** Writes the reg register with data */ 00021 /** ----------------------------------- */ 00022 void ADXRS290::write_reg(ADXRS290_register_t reg, uint8_t data){ 00023 adxrs290.format(8, _SPI_MODE); 00024 cs = false; 00025 adxrs290.write(static_cast<uint8_t>(reg) | _WRITE_REG_CMD); 00026 adxrs290.write(data); 00027 cs = true; 00028 } 00029 /** ----------------------------------- */ 00030 /** Reads the reg register */ 00031 /** ----------------------------------- */ 00032 uint8_t ADXRS290::read_reg(ADXRS290_register_t reg){ 00033 uint8_t ret_val; 00034 adxrs290.format(8, _SPI_MODE); 00035 cs = false; 00036 adxrs290.write(static_cast<uint8_t>(reg) | _READ_REG_CMD); 00037 ret_val = adxrs290.write(_DUMMY_BYTE); 00038 cs = true; 00039 return ret_val; 00040 } 00041 uint16_t ADXRS290::read_reg_u16(ADXRS290_register_t reg){ 00042 uint16_t ret_val = 0; 00043 adxrs290.format(8, _SPI_MODE); 00044 cs = false; 00045 adxrs290.write(static_cast<uint8_t>(reg) | _READ_REG_CMD); 00046 ret_val = adxrs290.write(_DUMMY_BYTE); 00047 ret_val = (ret_val) | (adxrs290.write(_DUMMY_BYTE)<<8); 00048 cs = true; 00049 return ret_val; 00050 } 00051 /** ----------------------------------- */ 00052 /** Sets the CTL registers */ 00053 /** ----------------------------------- */ 00054 void ADXRS290::set_power_ctl_reg(uint8_t data){ 00055 write_reg(POWER_CTL, data); 00056 wait(0.1); 00057 } 00058 void ADXRS290::set_filter_ctl_reg(ADXRS290_filter_ctl_t hpf, ADXRS290_filter_ctl_t lpf){ 00059 write_reg(FILTER, hpf|lpf); 00060 } 00061 void ADXRS290::set_sync(ADXRS290_dataready_ctl_t data){ 00062 } 00063 /** ----------------------------------- */ 00064 /** READ data registers */ 00065 /** ----------------------------------- */ 00066 uint16_t ADXRS290::scanx(){ 00067 return read_reg_u16(DATAX0); 00068 } 00069 uint16_t ADXRS290::scany(){ 00070 return read_reg_u16(DATAY0); 00071 } 00072 uint16_t ADXRS290::scant(){ 00073 return read_reg_u16(TEMP0); 00074 } 00075 ADXRS290::ADXRS290_rate_t ADXRS290::scan(){ 00076 uint16_t datax, datay, dataz; 00077 ADXRS290_rate_t res; 00078 // multiple byte read procedure 00079 adxrs290.format(8, _SPI_MODE); 00080 cs = false; 00081 adxrs290.write(static_cast<uint8_t>(DATAX0) | _READ_REG_CMD); 00082 datax = adxrs290.write(_DUMMY_BYTE); 00083 datax = (datax) | (adxrs290.write(_DUMMY_BYTE)<<8); 00084 datay = adxrs290.write(_DUMMY_BYTE); 00085 datay = (datay) | (adxrs290.write(_DUMMY_BYTE)<<8); 00086 dataz = adxrs290.write(_DUMMY_BYTE); 00087 dataz = (dataz) | (adxrs290.write(_DUMMY_BYTE)<<8); 00088 cs = true; 00089 // 2s compl conversion 00090 if ((datax & 0x8000) == 0) {res.rt_x=float(datax);} 00091 else{res.rt_x=float((~(datax - 0x01)) & 0xffff) * -1;} 00092 if ((datay & 0x8000) == 0) {res.rt_y=float(datay);} 00093 else{res.rt_y=float((~(datay - 0x01)) & 0xffff) * -1;} 00094 if ((dataz & 0x8000) == 0) {res.rt_z=float(dataz);} 00095 else{res.rt_z=float((~(dataz - 0x01)) & 0xffff) * -1;} 00096 return res; 00097 }
Generated on Wed Jul 13 2022 09:03:43 by
