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.
TLE5012B.cpp@0:4b76b1dc05cd, 2020-09-19 (annotated)
- Committer:
- hudakz
- Date:
- Sat Sep 19 18:01:49 2020 +0000
- Revision:
- 0:4b76b1dc05cd
Library for the TLE5012B Giant Magneto Resistance (GMR) based angle sensor.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hudakz | 0:4b76b1dc05cd | 1 | /*! |
hudakz | 0:4b76b1dc05cd | 2 | * \name TLE5012B.h - Mbed port of Arduino library for the TLE5012B angle sensor. |
hudakz | 0:4b76b1dc05cd | 3 | * \author Infineon Technologies AG (Dr.Olaf Filies) |
hudakz | 0:4b76b1dc05cd | 4 | * \copyright Infineon Technologies AG |
hudakz | 0:4b76b1dc05cd | 5 | * \version 2.0.1 |
hudakz | 0:4b76b1dc05cd | 6 | * \brief GMR-based angle sensor for angular position sensing in automotive applications |
hudakz | 0:4b76b1dc05cd | 7 | * \details Ported to Mbed by Zoltan Hudak 2020-08 |
hudakz | 0:4b76b1dc05cd | 8 | * |
hudakz | 0:4b76b1dc05cd | 9 | * The TLE5012B is a 360° angle sensor that detects the orientation of a magnetic field. |
hudakz | 0:4b76b1dc05cd | 10 | * This is achieved by measuring sine and cosine angle components with monolithic integrated |
hudakz | 0:4b76b1dc05cd | 11 | * Giant Magneto Resistance (iGMR) elements. These raw signals (sine and cosine) are digitally |
hudakz | 0:4b76b1dc05cd | 12 | * processed internally to calculate the angle orientation of the magnetic field (magnet). |
hudakz | 0:4b76b1dc05cd | 13 | * The TLE5012B is a pre-calibrated sensor. The calibration parameters are stored in laser fuses. |
hudakz | 0:4b76b1dc05cd | 14 | * At start-up the values of the fuses are written into flip-flops, where these values can be changed |
hudakz | 0:4b76b1dc05cd | 15 | * by the application-specific parameters. Further precision of the angle measurement over a wide |
hudakz | 0:4b76b1dc05cd | 16 | * temperature range and a long lifetime can be improved by enabling an optional internal autocalibration |
hudakz | 0:4b76b1dc05cd | 17 | * algorithm. Data communications are accomplished with a bi-directional Synchronous Serial Communication (SSC) |
hudakz | 0:4b76b1dc05cd | 18 | * that is SPI-compatible. The sensor configuration is stored in registers, which are accessible by the |
hudakz | 0:4b76b1dc05cd | 19 | * SSC interface. Additionally four other interfaces are available with the TLE5012B: Pulse-Width-Modulation (PWM) |
hudakz | 0:4b76b1dc05cd | 20 | * Protocol, Short-PWM-Code (SPC) Protocol, Hall Switch Mode (HSM) and Incremental Interface (IIF). These interfaces |
hudakz | 0:4b76b1dc05cd | 21 | * can be used in parallel with SSC or alone. Pre-configured sensor derivates with different interface settings are available. |
hudakz | 0:4b76b1dc05cd | 22 | * Online diagnostic functions are provided to ensure reliable operation. |
hudakz | 0:4b76b1dc05cd | 23 | * |
hudakz | 0:4b76b1dc05cd | 24 | * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the |
hudakz | 0:4b76b1dc05cd | 25 | * following conditions are met: |
hudakz | 0:4b76b1dc05cd | 26 | * |
hudakz | 0:4b76b1dc05cd | 27 | * Redistributions of source code must retain the above copyright notice, this list of conditions and the following |
hudakz | 0:4b76b1dc05cd | 28 | * disclaimer. |
hudakz | 0:4b76b1dc05cd | 29 | * |
hudakz | 0:4b76b1dc05cd | 30 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following |
hudakz | 0:4b76b1dc05cd | 31 | * disclaimer in the documentation and/or other materials provided with the distribution. |
hudakz | 0:4b76b1dc05cd | 32 | * |
hudakz | 0:4b76b1dc05cd | 33 | * Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote |
hudakz | 0:4b76b1dc05cd | 34 | * products derived from this software without specific prior written permission. |
hudakz | 0:4b76b1dc05cd | 35 | * |
hudakz | 0:4b76b1dc05cd | 36 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
hudakz | 0:4b76b1dc05cd | 37 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
hudakz | 0:4b76b1dc05cd | 38 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
hudakz | 0:4b76b1dc05cd | 39 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
hudakz | 0:4b76b1dc05cd | 40 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
hudakz | 0:4b76b1dc05cd | 41 | * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
hudakz | 0:4b76b1dc05cd | 42 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
hudakz | 0:4b76b1dc05cd | 43 | * |
hudakz | 0:4b76b1dc05cd | 44 | */ |
hudakz | 0:4b76b1dc05cd | 45 | #include "TLE5012B.h" |
hudakz | 0:4b76b1dc05cd | 46 | |
hudakz | 0:4b76b1dc05cd | 47 | //----------------------------------------------------------------------------- |
hudakz | 0:4b76b1dc05cd | 48 | |
hudakz | 0:4b76b1dc05cd | 49 | using namespace TLE5012; |
hudakz | 0:4b76b1dc05cd | 50 | |
hudakz | 0:4b76b1dc05cd | 51 | // none_class functions |
hudakz | 0:4b76b1dc05cd | 52 | |
hudakz | 0:4b76b1dc05cd | 53 | /*! |
hudakz | 0:4b76b1dc05cd | 54 | * Gets the first byte of a 2 byte word |
hudakz | 0:4b76b1dc05cd | 55 | * @param twoByteWord insert word of two bytes long |
hudakz | 0:4b76b1dc05cd | 56 | * @return returns the first byte |
hudakz | 0:4b76b1dc05cd | 57 | */ |
hudakz | 0:4b76b1dc05cd | 58 | uint8_t getFirstByte(uint16_t twoByteWord) |
hudakz | 0:4b76b1dc05cd | 59 | { |
hudakz | 0:4b76b1dc05cd | 60 | return((uint8_t) (twoByteWord >> 8)); |
hudakz | 0:4b76b1dc05cd | 61 | } |
hudakz | 0:4b76b1dc05cd | 62 | |
hudakz | 0:4b76b1dc05cd | 63 | /*! |
hudakz | 0:4b76b1dc05cd | 64 | * Gets the second byte of the 2 byte word |
hudakz | 0:4b76b1dc05cd | 65 | * @param twoByteWord insert word of two bytes long |
hudakz | 0:4b76b1dc05cd | 66 | * @return returns the second byte |
hudakz | 0:4b76b1dc05cd | 67 | */ |
hudakz | 0:4b76b1dc05cd | 68 | uint8_t getSecondByte(uint16_t twoByteWord) |
hudakz | 0:4b76b1dc05cd | 69 | { |
hudakz | 0:4b76b1dc05cd | 70 | return((uint8_t) twoByteWord); |
hudakz | 0:4b76b1dc05cd | 71 | } |
hudakz | 0:4b76b1dc05cd | 72 | |
hudakz | 0:4b76b1dc05cd | 73 | /*! |
hudakz | 0:4b76b1dc05cd | 74 | * Function for calculation the CRC. |
hudakz | 0:4b76b1dc05cd | 75 | * @param data byte long data for CRC check |
hudakz | 0:4b76b1dc05cd | 76 | * @param length length of data |
hudakz | 0:4b76b1dc05cd | 77 | * @return returns 8bit CRC |
hudakz | 0:4b76b1dc05cd | 78 | */ |
hudakz | 0:4b76b1dc05cd | 79 | uint8_t crc8(uint8_t* data, uint8_t length) |
hudakz | 0:4b76b1dc05cd | 80 | { |
hudakz | 0:4b76b1dc05cd | 81 | uint32_t crc; |
hudakz | 0:4b76b1dc05cd | 82 | int16_t i, bit; |
hudakz | 0:4b76b1dc05cd | 83 | |
hudakz | 0:4b76b1dc05cd | 84 | crc = CRC_SEED; |
hudakz | 0:4b76b1dc05cd | 85 | for (i = 0; i < length; i++) { |
hudakz | 0:4b76b1dc05cd | 86 | crc ^= data[i]; |
hudakz | 0:4b76b1dc05cd | 87 | for (bit = 0; bit < 8; bit++) { |
hudakz | 0:4b76b1dc05cd | 88 | if ((crc & 0x80) != 0) { |
hudakz | 0:4b76b1dc05cd | 89 | crc <<= 1; |
hudakz | 0:4b76b1dc05cd | 90 | crc ^= CRC_POLYNOMIAL; |
hudakz | 0:4b76b1dc05cd | 91 | } |
hudakz | 0:4b76b1dc05cd | 92 | else { |
hudakz | 0:4b76b1dc05cd | 93 | crc <<= 1; |
hudakz | 0:4b76b1dc05cd | 94 | } |
hudakz | 0:4b76b1dc05cd | 95 | } |
hudakz | 0:4b76b1dc05cd | 96 | } |
hudakz | 0:4b76b1dc05cd | 97 | |
hudakz | 0:4b76b1dc05cd | 98 | return((~crc) & CRC_SEED); |
hudakz | 0:4b76b1dc05cd | 99 | } |
hudakz | 0:4b76b1dc05cd | 100 | |
hudakz | 0:4b76b1dc05cd | 101 | /*! |
hudakz | 0:4b76b1dc05cd | 102 | * Function for calculation of the CRC |
hudakz | 0:4b76b1dc05cd | 103 | * @param crcData byte long data for CRC check |
hudakz | 0:4b76b1dc05cd | 104 | * @param length length of data |
hudakz | 0:4b76b1dc05cd | 105 | * @return runs crc8 calculation and returns CRC |
hudakz | 0:4b76b1dc05cd | 106 | */ |
hudakz | 0:4b76b1dc05cd | 107 | uint8_t crcCalc(uint8_t* crcData, uint8_t length) |
hudakz | 0:4b76b1dc05cd | 108 | { |
hudakz | 0:4b76b1dc05cd | 109 | return(crc8(crcData, length)); |
hudakz | 0:4b76b1dc05cd | 110 | } |
hudakz | 0:4b76b1dc05cd | 111 | |
hudakz | 0:4b76b1dc05cd | 112 | /*! |
hudakz | 0:4b76b1dc05cd | 113 | * Calculate the angle speed |
hudakz | 0:4b76b1dc05cd | 114 | * @param angRange set angular range value |
hudakz | 0:4b76b1dc05cd | 115 | * @param rawAngleSpeed raw speed value from read function |
hudakz | 0:4b76b1dc05cd | 116 | * @param firMD |
hudakz | 0:4b76b1dc05cd | 117 | * @param predictionVal |
hudakz | 0:4b76b1dc05cd | 118 | * @return calculated angular speed |
hudakz | 0:4b76b1dc05cd | 119 | */ |
hudakz | 0:4b76b1dc05cd | 120 | double calculateAngleSpeed(double angRange, int16_t rawAngleSpeed, uint16_t firMD, uint16_t predictionVal) |
hudakz | 0:4b76b1dc05cd | 121 | { |
hudakz | 0:4b76b1dc05cd | 122 | double finalAngleSpeed; |
hudakz | 0:4b76b1dc05cd | 123 | double microsecToSec = 0.000001; |
hudakz | 0:4b76b1dc05cd | 124 | double firMDVal; |
hudakz | 0:4b76b1dc05cd | 125 | |
hudakz | 0:4b76b1dc05cd | 126 | |
hudakz | 0:4b76b1dc05cd | 127 | if (firMD == 1) { |
hudakz | 0:4b76b1dc05cd | 128 | firMDVal = 42.7; |
hudakz | 0:4b76b1dc05cd | 129 | } |
hudakz | 0:4b76b1dc05cd | 130 | else |
hudakz | 0:4b76b1dc05cd | 131 | if (firMD == 0) { |
hudakz | 0:4b76b1dc05cd | 132 | firMDVal = 21.3; |
hudakz | 0:4b76b1dc05cd | 133 | } |
hudakz | 0:4b76b1dc05cd | 134 | else |
hudakz | 0:4b76b1dc05cd | 135 | if (firMD == 2) { |
hudakz | 0:4b76b1dc05cd | 136 | firMDVal = 85.3; |
hudakz | 0:4b76b1dc05cd | 137 | } |
hudakz | 0:4b76b1dc05cd | 138 | else |
hudakz | 0:4b76b1dc05cd | 139 | if (firMD == 3) { |
hudakz | 0:4b76b1dc05cd | 140 | firMDVal = 170.6; |
hudakz | 0:4b76b1dc05cd | 141 | } |
hudakz | 0:4b76b1dc05cd | 142 | else { |
hudakz | 0:4b76b1dc05cd | 143 | firMDVal = 0; |
hudakz | 0:4b76b1dc05cd | 144 | } |
hudakz | 0:4b76b1dc05cd | 145 | |
hudakz | 0:4b76b1dc05cd | 146 | finalAngleSpeed = ((angRange / POW_2_15) * ((double)rawAngleSpeed)) / (((double)predictionVal) * firMDVal * microsecToSec); |
hudakz | 0:4b76b1dc05cd | 147 | return(finalAngleSpeed); |
hudakz | 0:4b76b1dc05cd | 148 | } |
hudakz | 0:4b76b1dc05cd | 149 | |
hudakz | 0:4b76b1dc05cd | 150 | // end none class functions |
hudakz | 0:4b76b1dc05cd | 151 | |
hudakz | 0:4b76b1dc05cd | 152 | //----------------------------------------------------------------------------- |
hudakz | 0:4b76b1dc05cd | 153 | errorTypes TLE5012B::begin(slaveNum slave) |
hudakz | 0:4b76b1dc05cd | 154 | { |
hudakz | 0:4b76b1dc05cd | 155 | _spiConnection->begin(&_cs); |
hudakz | 0:4b76b1dc05cd | 156 | _slave = slave; |
hudakz | 0:4b76b1dc05cd | 157 | writeSlaveNumber(_slave); |
hudakz | 0:4b76b1dc05cd | 158 | return(readBlockCRC()); |
hudakz | 0:4b76b1dc05cd | 159 | |
hudakz | 0:4b76b1dc05cd | 160 | } |
hudakz | 0:4b76b1dc05cd | 161 | |
hudakz | 0:4b76b1dc05cd | 162 | /** |
hudakz | 0:4b76b1dc05cd | 163 | * @brief |
hudakz | 0:4b76b1dc05cd | 164 | * @note |
hudakz | 0:4b76b1dc05cd | 165 | * @param |
hudakz | 0:4b76b1dc05cd | 166 | * @retval |
hudakz | 0:4b76b1dc05cd | 167 | */ |
hudakz | 0:4b76b1dc05cd | 168 | void TLE5012B::triggerUpdate() |
hudakz | 0:4b76b1dc05cd | 169 | { |
hudakz | 0:4b76b1dc05cd | 170 | _spiConnection->triggerUpdate(); |
hudakz | 0:4b76b1dc05cd | 171 | _cs = 0; |
hudakz | 0:4b76b1dc05cd | 172 | wait_us(5); //grace period for register snapshot |
hudakz | 0:4b76b1dc05cd | 173 | _cs = 1; |
hudakz | 0:4b76b1dc05cd | 174 | } |
hudakz | 0:4b76b1dc05cd | 175 | |
hudakz | 0:4b76b1dc05cd | 176 | //----------------------------------------------------------------------------- |
hudakz | 0:4b76b1dc05cd | 177 | |
hudakz | 0:4b76b1dc05cd | 178 | // begin generic data transfer functions |
hudakz | 0:4b76b1dc05cd | 179 | errorTypes TLE5012B::readFromSensor(uint16_t command, uint16_t& data, updTypes upd, safetyTypes safe) |
hudakz | 0:4b76b1dc05cd | 180 | { |
hudakz | 0:4b76b1dc05cd | 181 | errorTypes checkError = NO_ERROR; |
hudakz | 0:4b76b1dc05cd | 182 | |
hudakz | 0:4b76b1dc05cd | 183 | _command[0] = READ_SENSOR | command | upd | safe; |
hudakz | 0:4b76b1dc05cd | 184 | |
hudakz | 0:4b76b1dc05cd | 185 | uint16_t _received[MAX_REGISTER_MEM] = { 0 }; |
hudakz | 0:4b76b1dc05cd | 186 | |
hudakz | 0:4b76b1dc05cd | 187 | _spiConnection->sendReceiveSpi(&_cs, _command, 1, _received, 2); |
hudakz | 0:4b76b1dc05cd | 188 | data = _received[0]; |
hudakz | 0:4b76b1dc05cd | 189 | if (safe == SAFE_HIGH) { |
hudakz | 0:4b76b1dc05cd | 190 | checkError = checkSafety(_received[1], _command[0], &_received[0], 1); |
hudakz | 0:4b76b1dc05cd | 191 | if (checkError != NO_ERROR) { |
hudakz | 0:4b76b1dc05cd | 192 | data = 0; |
hudakz | 0:4b76b1dc05cd | 193 | } |
hudakz | 0:4b76b1dc05cd | 194 | } |
hudakz | 0:4b76b1dc05cd | 195 | |
hudakz | 0:4b76b1dc05cd | 196 | return(checkError); |
hudakz | 0:4b76b1dc05cd | 197 | } |
hudakz | 0:4b76b1dc05cd | 198 | |
hudakz | 0:4b76b1dc05cd | 199 | /** |
hudakz | 0:4b76b1dc05cd | 200 | * @brief |
hudakz | 0:4b76b1dc05cd | 201 | * @note |
hudakz | 0:4b76b1dc05cd | 202 | * @param |
hudakz | 0:4b76b1dc05cd | 203 | * @retval |
hudakz | 0:4b76b1dc05cd | 204 | */ |
hudakz | 0:4b76b1dc05cd | 205 | errorTypes TLE5012B::readMoreRegisters(uint16_t command, uint16_t data[], updTypes upd, safetyTypes safe) |
hudakz | 0:4b76b1dc05cd | 206 | { |
hudakz | 0:4b76b1dc05cd | 207 | errorTypes checkError = NO_ERROR; |
hudakz | 0:4b76b1dc05cd | 208 | |
hudakz | 0:4b76b1dc05cd | 209 | _command[0] = READ_SENSOR | command | upd | safe; |
hudakz | 0:4b76b1dc05cd | 210 | |
hudakz | 0:4b76b1dc05cd | 211 | uint16_t _received[MAX_REGISTER_MEM] = { 0 }; |
hudakz | 0:4b76b1dc05cd | 212 | uint16_t _recDataLength = (_command[0] & (0x000F)); // Number of registers to read |
hudakz | 0:4b76b1dc05cd | 213 | |
hudakz | 0:4b76b1dc05cd | 214 | _spiConnection->sendReceiveSpi(&_cs, _command, 1, _received, _recDataLength + safe); |
hudakz | 0:4b76b1dc05cd | 215 | memcpy(data, _received, (_recDataLength) * sizeof(uint16_t)); |
hudakz | 0:4b76b1dc05cd | 216 | if (safe == SAFE_HIGH) { |
hudakz | 0:4b76b1dc05cd | 217 | checkError = checkSafety(_received[_recDataLength], _command[0], _received, _recDataLength); |
hudakz | 0:4b76b1dc05cd | 218 | if (checkError != NO_ERROR) { |
hudakz | 0:4b76b1dc05cd | 219 | data = 0; |
hudakz | 0:4b76b1dc05cd | 220 | } |
hudakz | 0:4b76b1dc05cd | 221 | } |
hudakz | 0:4b76b1dc05cd | 222 | |
hudakz | 0:4b76b1dc05cd | 223 | return(checkError); |
hudakz | 0:4b76b1dc05cd | 224 | } |
hudakz | 0:4b76b1dc05cd | 225 | |
hudakz | 0:4b76b1dc05cd | 226 | /** |
hudakz | 0:4b76b1dc05cd | 227 | * @brief |
hudakz | 0:4b76b1dc05cd | 228 | * @note |
hudakz | 0:4b76b1dc05cd | 229 | * @param |
hudakz | 0:4b76b1dc05cd | 230 | * @retval |
hudakz | 0:4b76b1dc05cd | 231 | */ |
hudakz | 0:4b76b1dc05cd | 232 | errorTypes TLE5012B::writeToSensor(uint16_t command, uint16_t dataToWrite, bool changeCRC) |
hudakz | 0:4b76b1dc05cd | 233 | { |
hudakz | 0:4b76b1dc05cd | 234 | uint16_t safety = 0; |
hudakz | 0:4b76b1dc05cd | 235 | _command[0] = WRITE_SENSOR | command | SAFE_HIGH; |
hudakz | 0:4b76b1dc05cd | 236 | _command[1] = dataToWrite; |
hudakz | 0:4b76b1dc05cd | 237 | _spiConnection->sendReceiveSpi(&_cs, _command, 2, &safety, 1); |
hudakz | 0:4b76b1dc05cd | 238 | |
hudakz | 0:4b76b1dc05cd | 239 | errorTypes checkError = checkSafety(safety, _command[0], &_command[1], 1); |
hudakz | 0:4b76b1dc05cd | 240 | |
hudakz | 0:4b76b1dc05cd | 241 | //if we write to a register, which changes the CRC. |
hudakz | 0:4b76b1dc05cd | 242 | |
hudakz | 0:4b76b1dc05cd | 243 | if (changeCRC) { |
hudakz | 0:4b76b1dc05cd | 244 | |
hudakz | 0:4b76b1dc05cd | 245 | //Serial.println("h45"); |
hudakz | 0:4b76b1dc05cd | 246 | checkError = regularCrcUpdate(); |
hudakz | 0:4b76b1dc05cd | 247 | } |
hudakz | 0:4b76b1dc05cd | 248 | |
hudakz | 0:4b76b1dc05cd | 249 | return(checkError); |
hudakz | 0:4b76b1dc05cd | 250 | } |
hudakz | 0:4b76b1dc05cd | 251 | |
hudakz | 0:4b76b1dc05cd | 252 | /** |
hudakz | 0:4b76b1dc05cd | 253 | * @brief |
hudakz | 0:4b76b1dc05cd | 254 | * @note |
hudakz | 0:4b76b1dc05cd | 255 | * @param |
hudakz | 0:4b76b1dc05cd | 256 | * @retval |
hudakz | 0:4b76b1dc05cd | 257 | */ |
hudakz | 0:4b76b1dc05cd | 258 | errorTypes TLE5012B::writeTempCoeffUpdate(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 259 | { |
hudakz | 0:4b76b1dc05cd | 260 | uint16_t safety = 0; |
hudakz | 0:4b76b1dc05cd | 261 | uint16_t readreg = 0; |
hudakz | 0:4b76b1dc05cd | 262 | |
hudakz | 0:4b76b1dc05cd | 263 | triggerUpdate(); |
hudakz | 0:4b76b1dc05cd | 264 | _command[0] = WRITE_SENSOR | REG_TCO_Y | SAFE_HIGH; |
hudakz | 0:4b76b1dc05cd | 265 | _command[1] = dataToWrite; |
hudakz | 0:4b76b1dc05cd | 266 | _spiConnection->sendReceiveSpi(&_cs, _command, 2, &safety, 1); |
hudakz | 0:4b76b1dc05cd | 267 | |
hudakz | 0:4b76b1dc05cd | 268 | errorTypes checkError = checkSafety(safety, _command[0], &_command[1], 1); |
hudakz | 0:4b76b1dc05cd | 269 | // |
hudakz | 0:4b76b1dc05cd | 270 | |
hudakz | 0:4b76b1dc05cd | 271 | checkError = readStatus(readreg); |
hudakz | 0:4b76b1dc05cd | 272 | if (readreg & 0x0008) { |
hudakz | 0:4b76b1dc05cd | 273 | checkError = regularCrcUpdate(); |
hudakz | 0:4b76b1dc05cd | 274 | } |
hudakz | 0:4b76b1dc05cd | 275 | |
hudakz | 0:4b76b1dc05cd | 276 | return(checkError); |
hudakz | 0:4b76b1dc05cd | 277 | } |
hudakz | 0:4b76b1dc05cd | 278 | |
hudakz | 0:4b76b1dc05cd | 279 | // end generic data transfer functions |
hudakz | 0:4b76b1dc05cd | 280 | //----------------------------------------------------------------------------- |
hudakz | 0:4b76b1dc05cd | 281 | |
hudakz | 0:4b76b1dc05cd | 282 | // begin CRC functions |
hudakz | 0:4b76b1dc05cd | 283 | errorTypes TLE5012B::checkSafety(uint16_t safety, uint16_t command, uint16_t* readreg, uint16_t length) |
hudakz | 0:4b76b1dc05cd | 284 | { |
hudakz | 0:4b76b1dc05cd | 285 | volatile errorTypes errorCheck = NO_ERROR; |
hudakz | 0:4b76b1dc05cd | 286 | _safetyWord = safety; |
hudakz | 0:4b76b1dc05cd | 287 | |
hudakz | 0:4b76b1dc05cd | 288 | if (!(_safetyWord & SYSTEM_ERROR_MASK)) { |
hudakz | 0:4b76b1dc05cd | 289 | errorCheck = SYSTEM_ERROR; |
hudakz | 0:4b76b1dc05cd | 290 | |
hudakz | 0:4b76b1dc05cd | 291 | //resetSafety(); |
hudakz | 0:4b76b1dc05cd | 292 | } |
hudakz | 0:4b76b1dc05cd | 293 | else |
hudakz | 0:4b76b1dc05cd | 294 | if (!(_safetyWord & INTERFACE_ERROR_MASK)) { |
hudakz | 0:4b76b1dc05cd | 295 | errorCheck = INTERFACE_ACCESS_ERROR; |
hudakz | 0:4b76b1dc05cd | 296 | |
hudakz | 0:4b76b1dc05cd | 297 | //resetSafety(); |
hudakz | 0:4b76b1dc05cd | 298 | } |
hudakz | 0:4b76b1dc05cd | 299 | else |
hudakz | 0:4b76b1dc05cd | 300 | if (!(_safetyWord & INV_ANGLE_ERROR_MASK)) { |
hudakz | 0:4b76b1dc05cd | 301 | errorCheck = INVALID_ANGLE_ERROR; |
hudakz | 0:4b76b1dc05cd | 302 | |
hudakz | 0:4b76b1dc05cd | 303 | //resetSafety(); |
hudakz | 0:4b76b1dc05cd | 304 | } |
hudakz | 0:4b76b1dc05cd | 305 | else { |
hudakz | 0:4b76b1dc05cd | 306 | |
hudakz | 0:4b76b1dc05cd | 307 | //resetSafety(); |
hudakz | 0:4b76b1dc05cd | 308 | uint16_t lengthOfTemp = length * 2 + 2; |
hudakz | 0:4b76b1dc05cd | 309 | uint8_t* temp = new uint8_t[lengthOfTemp]; |
hudakz | 0:4b76b1dc05cd | 310 | |
hudakz | 0:4b76b1dc05cd | 311 | temp[0] = getFirstByte(command); |
hudakz | 0:4b76b1dc05cd | 312 | temp[1] = getSecondByte(command); |
hudakz | 0:4b76b1dc05cd | 313 | |
hudakz | 0:4b76b1dc05cd | 314 | for (uint16_t i = 0; i < length; i++) { |
hudakz | 0:4b76b1dc05cd | 315 | temp[2 + 2 * i] = getFirstByte(readreg[i]); |
hudakz | 0:4b76b1dc05cd | 316 | temp[2 + 2 * i + 1] = getSecondByte(readreg[i]); |
hudakz | 0:4b76b1dc05cd | 317 | } |
hudakz | 0:4b76b1dc05cd | 318 | |
hudakz | 0:4b76b1dc05cd | 319 | uint8_t crcReceivedFinal = getSecondByte(safety); |
hudakz | 0:4b76b1dc05cd | 320 | uint8_t crc = crcCalc(temp, lengthOfTemp); |
hudakz | 0:4b76b1dc05cd | 321 | |
hudakz | 0:4b76b1dc05cd | 322 | if (crc == crcReceivedFinal) { |
hudakz | 0:4b76b1dc05cd | 323 | errorCheck = NO_ERROR; |
hudakz | 0:4b76b1dc05cd | 324 | } |
hudakz | 0:4b76b1dc05cd | 325 | else { |
hudakz | 0:4b76b1dc05cd | 326 | errorCheck = CRC_ERROR; |
hudakz | 0:4b76b1dc05cd | 327 | resetSafety(); |
hudakz | 0:4b76b1dc05cd | 328 | } |
hudakz | 0:4b76b1dc05cd | 329 | |
hudakz | 0:4b76b1dc05cd | 330 | delete[] temp; |
hudakz | 0:4b76b1dc05cd | 331 | } |
hudakz | 0:4b76b1dc05cd | 332 | |
hudakz | 0:4b76b1dc05cd | 333 | return(errorCheck); |
hudakz | 0:4b76b1dc05cd | 334 | } |
hudakz | 0:4b76b1dc05cd | 335 | |
hudakz | 0:4b76b1dc05cd | 336 | /** |
hudakz | 0:4b76b1dc05cd | 337 | * @brief |
hudakz | 0:4b76b1dc05cd | 338 | * @note |
hudakz | 0:4b76b1dc05cd | 339 | * @param |
hudakz | 0:4b76b1dc05cd | 340 | * @retval |
hudakz | 0:4b76b1dc05cd | 341 | */ |
hudakz | 0:4b76b1dc05cd | 342 | void TLE5012B::resetSafety() |
hudakz | 0:4b76b1dc05cd | 343 | { |
hudakz | 0:4b76b1dc05cd | 344 | uint16_t command = READ_SENSOR + SAFE_HIGH; |
hudakz | 0:4b76b1dc05cd | 345 | uint16_t receive[4]; |
hudakz | 0:4b76b1dc05cd | 346 | |
hudakz | 0:4b76b1dc05cd | 347 | triggerUpdate(); |
hudakz | 0:4b76b1dc05cd | 348 | _spiConnection->sendReceiveSpi(&_cs, &command, 1, receive, 3); |
hudakz | 0:4b76b1dc05cd | 349 | } |
hudakz | 0:4b76b1dc05cd | 350 | |
hudakz | 0:4b76b1dc05cd | 351 | /** |
hudakz | 0:4b76b1dc05cd | 352 | * @brief |
hudakz | 0:4b76b1dc05cd | 353 | * @note |
hudakz | 0:4b76b1dc05cd | 354 | * @param |
hudakz | 0:4b76b1dc05cd | 355 | * @retval |
hudakz | 0:4b76b1dc05cd | 356 | */ |
hudakz | 0:4b76b1dc05cd | 357 | errorTypes TLE5012B::regularCrcUpdate() |
hudakz | 0:4b76b1dc05cd | 358 | { |
hudakz | 0:4b76b1dc05cd | 359 | readBlockCRC(); |
hudakz | 0:4b76b1dc05cd | 360 | |
hudakz | 0:4b76b1dc05cd | 361 | uint8_t temp[16]; |
hudakz | 0:4b76b1dc05cd | 362 | |
hudakz | 0:4b76b1dc05cd | 363 | for (uint8_t i = 0; i < CRC_NUM_REGISTERS; i++) { |
hudakz | 0:4b76b1dc05cd | 364 | temp[2 * i] = getFirstByte(_registers[i]); |
hudakz | 0:4b76b1dc05cd | 365 | temp[(2 * i) + 1] = getSecondByte(_registers[i]); |
hudakz | 0:4b76b1dc05cd | 366 | } |
hudakz | 0:4b76b1dc05cd | 367 | |
hudakz | 0:4b76b1dc05cd | 368 | uint8_t crc = crcCalc(temp, 15); |
hudakz | 0:4b76b1dc05cd | 369 | uint16_t firstTempByte = (uint16_t) temp[14]; |
hudakz | 0:4b76b1dc05cd | 370 | uint16_t secondTempByte = (uint16_t) crc; |
hudakz | 0:4b76b1dc05cd | 371 | uint16_t valToSend = (firstTempByte << 8) | secondTempByte; |
hudakz | 0:4b76b1dc05cd | 372 | |
hudakz | 0:4b76b1dc05cd | 373 | _registers[7] = valToSend; |
hudakz | 0:4b76b1dc05cd | 374 | |
hudakz | 0:4b76b1dc05cd | 375 | return(writeTempCoeffUpdate(valToSend)); |
hudakz | 0:4b76b1dc05cd | 376 | } |
hudakz | 0:4b76b1dc05cd | 377 | |
hudakz | 0:4b76b1dc05cd | 378 | // end CRC functions |
hudakz | 0:4b76b1dc05cd | 379 | //----------------------------------------------------------------------------- |
hudakz | 0:4b76b1dc05cd | 380 | |
hudakz | 0:4b76b1dc05cd | 381 | // begin read functions |
hudakz | 0:4b76b1dc05cd | 382 | errorTypes TLE5012B::readBlockCRC() |
hudakz | 0:4b76b1dc05cd | 383 | { |
hudakz | 0:4b76b1dc05cd | 384 | _command[0] = READ_BLOCK_CRC; |
hudakz | 0:4b76b1dc05cd | 385 | |
hudakz | 0:4b76b1dc05cd | 386 | uint16_t _registers[CRC_NUM_REGISTERS + 1] = { 0 }; // Number of CRC Registers + 1 Register for Safety word |
hudakz | 0:4b76b1dc05cd | 387 | //memset(_registers, 0, sizeof(_registers)); |
hudakz | 0:4b76b1dc05cd | 388 | |
hudakz | 0:4b76b1dc05cd | 389 | _spiConnection->sendReceiveSpi(&_cs, _command, 1, _registers, CRC_NUM_REGISTERS + 1); |
hudakz | 0:4b76b1dc05cd | 390 | |
hudakz | 0:4b76b1dc05cd | 391 | errorTypes checkError = checkSafety(_registers[8], READ_BLOCK_CRC, _registers, 8); |
hudakz | 0:4b76b1dc05cd | 392 | resetSafety(); |
hudakz | 0:4b76b1dc05cd | 393 | return(checkError); |
hudakz | 0:4b76b1dc05cd | 394 | } |
hudakz | 0:4b76b1dc05cd | 395 | |
hudakz | 0:4b76b1dc05cd | 396 | /** |
hudakz | 0:4b76b1dc05cd | 397 | * @brief |
hudakz | 0:4b76b1dc05cd | 398 | * @note |
hudakz | 0:4b76b1dc05cd | 399 | * @param |
hudakz | 0:4b76b1dc05cd | 400 | * @retval |
hudakz | 0:4b76b1dc05cd | 401 | */ |
hudakz | 0:4b76b1dc05cd | 402 | errorTypes TLE5012B::readStatus(uint16_t& data, updTypes upd, safetyTypes safe) |
hudakz | 0:4b76b1dc05cd | 403 | { |
hudakz | 0:4b76b1dc05cd | 404 | return(readFromSensor(REG_STAT, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 405 | } |
hudakz | 0:4b76b1dc05cd | 406 | |
hudakz | 0:4b76b1dc05cd | 407 | /** |
hudakz | 0:4b76b1dc05cd | 408 | * @brief |
hudakz | 0:4b76b1dc05cd | 409 | * @note |
hudakz | 0:4b76b1dc05cd | 410 | * @param |
hudakz | 0:4b76b1dc05cd | 411 | * @retval |
hudakz | 0:4b76b1dc05cd | 412 | */ |
hudakz | 0:4b76b1dc05cd | 413 | errorTypes TLE5012B::readActivationStatus(uint16_t& data, updTypes upd, safetyTypes safe) |
hudakz | 0:4b76b1dc05cd | 414 | { |
hudakz | 0:4b76b1dc05cd | 415 | return(readFromSensor(REG_ACSTAT, data, upd, safe)); |
hudakz | 0:4b76b1dc05cd | 416 | } |
hudakz | 0:4b76b1dc05cd | 417 | |
hudakz | 0:4b76b1dc05cd | 418 | /** |
hudakz | 0:4b76b1dc05cd | 419 | * @brief |
hudakz | 0:4b76b1dc05cd | 420 | * @note |
hudakz | 0:4b76b1dc05cd | 421 | * @param |
hudakz | 0:4b76b1dc05cd | 422 | * @retval |
hudakz | 0:4b76b1dc05cd | 423 | */ |
hudakz | 0:4b76b1dc05cd | 424 | errorTypes TLE5012B::readSIL(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 425 | { |
hudakz | 0:4b76b1dc05cd | 426 | return(readFromSensor(REG_SIL, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 427 | } |
hudakz | 0:4b76b1dc05cd | 428 | |
hudakz | 0:4b76b1dc05cd | 429 | /** |
hudakz | 0:4b76b1dc05cd | 430 | * @brief |
hudakz | 0:4b76b1dc05cd | 431 | * @note |
hudakz | 0:4b76b1dc05cd | 432 | * @param |
hudakz | 0:4b76b1dc05cd | 433 | * @retval |
hudakz | 0:4b76b1dc05cd | 434 | */ |
hudakz | 0:4b76b1dc05cd | 435 | errorTypes TLE5012B::readIntMode1(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 436 | { |
hudakz | 0:4b76b1dc05cd | 437 | return(readFromSensor(REG_MOD_1, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 438 | } |
hudakz | 0:4b76b1dc05cd | 439 | |
hudakz | 0:4b76b1dc05cd | 440 | /** |
hudakz | 0:4b76b1dc05cd | 441 | * @brief |
hudakz | 0:4b76b1dc05cd | 442 | * @note |
hudakz | 0:4b76b1dc05cd | 443 | * @param |
hudakz | 0:4b76b1dc05cd | 444 | * @retval |
hudakz | 0:4b76b1dc05cd | 445 | */ |
hudakz | 0:4b76b1dc05cd | 446 | errorTypes TLE5012B::readIntMode2(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 447 | { |
hudakz | 0:4b76b1dc05cd | 448 | return(readFromSensor(REG_MOD_2, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 449 | } |
hudakz | 0:4b76b1dc05cd | 450 | |
hudakz | 0:4b76b1dc05cd | 451 | /** |
hudakz | 0:4b76b1dc05cd | 452 | * @brief |
hudakz | 0:4b76b1dc05cd | 453 | * @note |
hudakz | 0:4b76b1dc05cd | 454 | * @param |
hudakz | 0:4b76b1dc05cd | 455 | * @retval |
hudakz | 0:4b76b1dc05cd | 456 | */ |
hudakz | 0:4b76b1dc05cd | 457 | errorTypes TLE5012B::readIntMode3(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 458 | { |
hudakz | 0:4b76b1dc05cd | 459 | return(readFromSensor(REG_MOD_3, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 460 | } |
hudakz | 0:4b76b1dc05cd | 461 | |
hudakz | 0:4b76b1dc05cd | 462 | /** |
hudakz | 0:4b76b1dc05cd | 463 | * @brief |
hudakz | 0:4b76b1dc05cd | 464 | * @note |
hudakz | 0:4b76b1dc05cd | 465 | * @param |
hudakz | 0:4b76b1dc05cd | 466 | * @retval |
hudakz | 0:4b76b1dc05cd | 467 | */ |
hudakz | 0:4b76b1dc05cd | 468 | errorTypes TLE5012B::readIntMode4(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 469 | { |
hudakz | 0:4b76b1dc05cd | 470 | return(readFromSensor(REG_MOD_4, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 471 | } |
hudakz | 0:4b76b1dc05cd | 472 | |
hudakz | 0:4b76b1dc05cd | 473 | /** |
hudakz | 0:4b76b1dc05cd | 474 | * @brief |
hudakz | 0:4b76b1dc05cd | 475 | * @note |
hudakz | 0:4b76b1dc05cd | 476 | * @param |
hudakz | 0:4b76b1dc05cd | 477 | * @retval |
hudakz | 0:4b76b1dc05cd | 478 | */ |
hudakz | 0:4b76b1dc05cd | 479 | errorTypes TLE5012B::readOffsetX(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 480 | { |
hudakz | 0:4b76b1dc05cd | 481 | return(readFromSensor(REG_OFFX, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 482 | } |
hudakz | 0:4b76b1dc05cd | 483 | |
hudakz | 0:4b76b1dc05cd | 484 | /** |
hudakz | 0:4b76b1dc05cd | 485 | * @brief |
hudakz | 0:4b76b1dc05cd | 486 | * @note |
hudakz | 0:4b76b1dc05cd | 487 | * @param |
hudakz | 0:4b76b1dc05cd | 488 | * @retval |
hudakz | 0:4b76b1dc05cd | 489 | */ |
hudakz | 0:4b76b1dc05cd | 490 | errorTypes TLE5012B::readOffsetY(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 491 | { |
hudakz | 0:4b76b1dc05cd | 492 | return(readFromSensor(REG_OFFY, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 493 | } |
hudakz | 0:4b76b1dc05cd | 494 | |
hudakz | 0:4b76b1dc05cd | 495 | /** |
hudakz | 0:4b76b1dc05cd | 496 | * @brief |
hudakz | 0:4b76b1dc05cd | 497 | * @note |
hudakz | 0:4b76b1dc05cd | 498 | * @param |
hudakz | 0:4b76b1dc05cd | 499 | * @retval |
hudakz | 0:4b76b1dc05cd | 500 | */ |
hudakz | 0:4b76b1dc05cd | 501 | errorTypes TLE5012B::readSynch(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 502 | { |
hudakz | 0:4b76b1dc05cd | 503 | return(readFromSensor(REG_SYNCH, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 504 | } |
hudakz | 0:4b76b1dc05cd | 505 | |
hudakz | 0:4b76b1dc05cd | 506 | /** |
hudakz | 0:4b76b1dc05cd | 507 | * @brief |
hudakz | 0:4b76b1dc05cd | 508 | * @note |
hudakz | 0:4b76b1dc05cd | 509 | * @param |
hudakz | 0:4b76b1dc05cd | 510 | * @retval |
hudakz | 0:4b76b1dc05cd | 511 | */ |
hudakz | 0:4b76b1dc05cd | 512 | errorTypes TLE5012B::readIFAB(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 513 | { |
hudakz | 0:4b76b1dc05cd | 514 | return(readFromSensor(REG_IFAB, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 515 | } |
hudakz | 0:4b76b1dc05cd | 516 | |
hudakz | 0:4b76b1dc05cd | 517 | /** |
hudakz | 0:4b76b1dc05cd | 518 | * @brief |
hudakz | 0:4b76b1dc05cd | 519 | * @note |
hudakz | 0:4b76b1dc05cd | 520 | * @param |
hudakz | 0:4b76b1dc05cd | 521 | * @retval |
hudakz | 0:4b76b1dc05cd | 522 | */ |
hudakz | 0:4b76b1dc05cd | 523 | errorTypes TLE5012B::readTempCoeff(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 524 | { |
hudakz | 0:4b76b1dc05cd | 525 | return(readFromSensor(REG_TCO_Y, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 526 | } |
hudakz | 0:4b76b1dc05cd | 527 | |
hudakz | 0:4b76b1dc05cd | 528 | /** |
hudakz | 0:4b76b1dc05cd | 529 | * @brief |
hudakz | 0:4b76b1dc05cd | 530 | * @note |
hudakz | 0:4b76b1dc05cd | 531 | * @param |
hudakz | 0:4b76b1dc05cd | 532 | * @retval |
hudakz | 0:4b76b1dc05cd | 533 | */ |
hudakz | 0:4b76b1dc05cd | 534 | errorTypes TLE5012B::readTempDMag(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 535 | { |
hudakz | 0:4b76b1dc05cd | 536 | return(readFromSensor(REG_D_MAG, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 537 | } |
hudakz | 0:4b76b1dc05cd | 538 | |
hudakz | 0:4b76b1dc05cd | 539 | /** |
hudakz | 0:4b76b1dc05cd | 540 | * @brief |
hudakz | 0:4b76b1dc05cd | 541 | * @note |
hudakz | 0:4b76b1dc05cd | 542 | * @param |
hudakz | 0:4b76b1dc05cd | 543 | * @retval |
hudakz | 0:4b76b1dc05cd | 544 | */ |
hudakz | 0:4b76b1dc05cd | 545 | errorTypes TLE5012B::readTempIIFCnt(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 546 | { |
hudakz | 0:4b76b1dc05cd | 547 | return(readFromSensor(REG_IIF_CNT, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 548 | } |
hudakz | 0:4b76b1dc05cd | 549 | |
hudakz | 0:4b76b1dc05cd | 550 | /** |
hudakz | 0:4b76b1dc05cd | 551 | * @brief |
hudakz | 0:4b76b1dc05cd | 552 | * @note |
hudakz | 0:4b76b1dc05cd | 553 | * @param |
hudakz | 0:4b76b1dc05cd | 554 | * @retval |
hudakz | 0:4b76b1dc05cd | 555 | */ |
hudakz | 0:4b76b1dc05cd | 556 | errorTypes TLE5012B::readTempRaw(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 557 | { |
hudakz | 0:4b76b1dc05cd | 558 | return(readFromSensor(REG_T_RAW, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 559 | } |
hudakz | 0:4b76b1dc05cd | 560 | |
hudakz | 0:4b76b1dc05cd | 561 | /** |
hudakz | 0:4b76b1dc05cd | 562 | * @brief |
hudakz | 0:4b76b1dc05cd | 563 | * @note |
hudakz | 0:4b76b1dc05cd | 564 | * @param |
hudakz | 0:4b76b1dc05cd | 565 | * @retval |
hudakz | 0:4b76b1dc05cd | 566 | */ |
hudakz | 0:4b76b1dc05cd | 567 | errorTypes TLE5012B::readTempT25(uint16_t& data) |
hudakz | 0:4b76b1dc05cd | 568 | { |
hudakz | 0:4b76b1dc05cd | 569 | return(readFromSensor(REG_T25O, data, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 570 | } |
hudakz | 0:4b76b1dc05cd | 571 | |
hudakz | 0:4b76b1dc05cd | 572 | /** |
hudakz | 0:4b76b1dc05cd | 573 | * @brief |
hudakz | 0:4b76b1dc05cd | 574 | * @note |
hudakz | 0:4b76b1dc05cd | 575 | * @param |
hudakz | 0:4b76b1dc05cd | 576 | * @retval |
hudakz | 0:4b76b1dc05cd | 577 | */ |
hudakz | 0:4b76b1dc05cd | 578 | errorTypes TLE5012B::readRawX(int16_t& data) |
hudakz | 0:4b76b1dc05cd | 579 | { |
hudakz | 0:4b76b1dc05cd | 580 | uint16_t rawData = 0; |
hudakz | 0:4b76b1dc05cd | 581 | errorTypes status = readFromSensor(REG_ADC_X, rawData); |
hudakz | 0:4b76b1dc05cd | 582 | |
hudakz | 0:4b76b1dc05cd | 583 | if (status != NO_ERROR) { |
hudakz | 0:4b76b1dc05cd | 584 | return(status); |
hudakz | 0:4b76b1dc05cd | 585 | } |
hudakz | 0:4b76b1dc05cd | 586 | |
hudakz | 0:4b76b1dc05cd | 587 | data = rawData; |
hudakz | 0:4b76b1dc05cd | 588 | return(status); |
hudakz | 0:4b76b1dc05cd | 589 | } |
hudakz | 0:4b76b1dc05cd | 590 | |
hudakz | 0:4b76b1dc05cd | 591 | /** |
hudakz | 0:4b76b1dc05cd | 592 | * @brief |
hudakz | 0:4b76b1dc05cd | 593 | * @note |
hudakz | 0:4b76b1dc05cd | 594 | * @param |
hudakz | 0:4b76b1dc05cd | 595 | * @retval |
hudakz | 0:4b76b1dc05cd | 596 | */ |
hudakz | 0:4b76b1dc05cd | 597 | errorTypes TLE5012B::readRawY(int16_t& data) |
hudakz | 0:4b76b1dc05cd | 598 | { |
hudakz | 0:4b76b1dc05cd | 599 | uint16_t rawData = 0; |
hudakz | 0:4b76b1dc05cd | 600 | errorTypes status = readFromSensor(REG_ADC_Y, rawData); |
hudakz | 0:4b76b1dc05cd | 601 | |
hudakz | 0:4b76b1dc05cd | 602 | if (status != NO_ERROR) { |
hudakz | 0:4b76b1dc05cd | 603 | return(status); |
hudakz | 0:4b76b1dc05cd | 604 | } |
hudakz | 0:4b76b1dc05cd | 605 | |
hudakz | 0:4b76b1dc05cd | 606 | data = rawData; |
hudakz | 0:4b76b1dc05cd | 607 | return(status); |
hudakz | 0:4b76b1dc05cd | 608 | } |
hudakz | 0:4b76b1dc05cd | 609 | |
hudakz | 0:4b76b1dc05cd | 610 | // end read functions |
hudakz | 0:4b76b1dc05cd | 611 | //----------------------------------------------------------------------------- |
hudakz | 0:4b76b1dc05cd | 612 | |
hudakz | 0:4b76b1dc05cd | 613 | // begin get functions |
hudakz | 0:4b76b1dc05cd | 614 | errorTypes TLE5012B::getAngleValue(double& angleValue) |
hudakz | 0:4b76b1dc05cd | 615 | { |
hudakz | 0:4b76b1dc05cd | 616 | int16_t rawAnglevalue = 0; |
hudakz | 0:4b76b1dc05cd | 617 | |
hudakz | 0:4b76b1dc05cd | 618 | return(getAngleValue(angleValue, rawAnglevalue, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 619 | } |
hudakz | 0:4b76b1dc05cd | 620 | |
hudakz | 0:4b76b1dc05cd | 621 | /** |
hudakz | 0:4b76b1dc05cd | 622 | * @brief |
hudakz | 0:4b76b1dc05cd | 623 | * @note |
hudakz | 0:4b76b1dc05cd | 624 | * @param |
hudakz | 0:4b76b1dc05cd | 625 | * @retval |
hudakz | 0:4b76b1dc05cd | 626 | */ |
hudakz | 0:4b76b1dc05cd | 627 | errorTypes TLE5012B::getAngleValue(double& angleValue, int16_t& rawAnglevalue, updTypes upd, safetyTypes safe) |
hudakz | 0:4b76b1dc05cd | 628 | { |
hudakz | 0:4b76b1dc05cd | 629 | uint16_t rawData = 0; |
hudakz | 0:4b76b1dc05cd | 630 | errorTypes status = readFromSensor(REG_AVAL, rawData, upd, safe); |
hudakz | 0:4b76b1dc05cd | 631 | |
hudakz | 0:4b76b1dc05cd | 632 | if (status != NO_ERROR) { |
hudakz | 0:4b76b1dc05cd | 633 | return(status); |
hudakz | 0:4b76b1dc05cd | 634 | } |
hudakz | 0:4b76b1dc05cd | 635 | |
hudakz | 0:4b76b1dc05cd | 636 | rawData = (rawData & (DELETE_BIT_15)); |
hudakz | 0:4b76b1dc05cd | 637 | |
hudakz | 0:4b76b1dc05cd | 638 | //check if the value received is positive or negative |
hudakz | 0:4b76b1dc05cd | 639 | if (rawData & CHECK_BIT_14) { |
hudakz | 0:4b76b1dc05cd | 640 | rawData = rawData - CHANGE_UINT_TO_INT_15; |
hudakz | 0:4b76b1dc05cd | 641 | } |
hudakz | 0:4b76b1dc05cd | 642 | |
hudakz | 0:4b76b1dc05cd | 643 | rawAnglevalue = rawData; |
hudakz | 0:4b76b1dc05cd | 644 | angleValue = (ANGLE_360_VAL / POW_2_15) * ((double)rawAnglevalue); |
hudakz | 0:4b76b1dc05cd | 645 | return(status); |
hudakz | 0:4b76b1dc05cd | 646 | } |
hudakz | 0:4b76b1dc05cd | 647 | |
hudakz | 0:4b76b1dc05cd | 648 | /** |
hudakz | 0:4b76b1dc05cd | 649 | * @brief |
hudakz | 0:4b76b1dc05cd | 650 | * @note |
hudakz | 0:4b76b1dc05cd | 651 | * @param |
hudakz | 0:4b76b1dc05cd | 652 | * @retval |
hudakz | 0:4b76b1dc05cd | 653 | */ |
hudakz | 0:4b76b1dc05cd | 654 | errorTypes TLE5012B::getTemperature(double& temperature) |
hudakz | 0:4b76b1dc05cd | 655 | { |
hudakz | 0:4b76b1dc05cd | 656 | int16_t rawTemp = 0; |
hudakz | 0:4b76b1dc05cd | 657 | |
hudakz | 0:4b76b1dc05cd | 658 | return(getTemperature(temperature, rawTemp, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 659 | } |
hudakz | 0:4b76b1dc05cd | 660 | |
hudakz | 0:4b76b1dc05cd | 661 | /** |
hudakz | 0:4b76b1dc05cd | 662 | * @brief |
hudakz | 0:4b76b1dc05cd | 663 | * @note |
hudakz | 0:4b76b1dc05cd | 664 | * @param |
hudakz | 0:4b76b1dc05cd | 665 | * @retval |
hudakz | 0:4b76b1dc05cd | 666 | */ |
hudakz | 0:4b76b1dc05cd | 667 | errorTypes TLE5012B::getTemperature(double& temperature, int16_t& rawTemp, updTypes upd, safetyTypes safe) |
hudakz | 0:4b76b1dc05cd | 668 | { |
hudakz | 0:4b76b1dc05cd | 669 | uint16_t rawData = 0; |
hudakz | 0:4b76b1dc05cd | 670 | errorTypes status = readFromSensor(REG_FSYNC, rawData, upd, safe); |
hudakz | 0:4b76b1dc05cd | 671 | |
hudakz | 0:4b76b1dc05cd | 672 | if (status != NO_ERROR) { |
hudakz | 0:4b76b1dc05cd | 673 | return(status); |
hudakz | 0:4b76b1dc05cd | 674 | } |
hudakz | 0:4b76b1dc05cd | 675 | |
hudakz | 0:4b76b1dc05cd | 676 | rawData = (rawData & (DELETE_7BITS)); |
hudakz | 0:4b76b1dc05cd | 677 | |
hudakz | 0:4b76b1dc05cd | 678 | //check if the value received is positive or negative |
hudakz | 0:4b76b1dc05cd | 679 | if (rawData & CHECK_BIT_9) { |
hudakz | 0:4b76b1dc05cd | 680 | rawData = rawData - CHANGE_UNIT_TO_INT_9; |
hudakz | 0:4b76b1dc05cd | 681 | } |
hudakz | 0:4b76b1dc05cd | 682 | |
hudakz | 0:4b76b1dc05cd | 683 | rawTemp = rawData; |
hudakz | 0:4b76b1dc05cd | 684 | temperature = (rawTemp + TEMP_OFFSET) / (TEMP_DIV); |
hudakz | 0:4b76b1dc05cd | 685 | return(status); |
hudakz | 0:4b76b1dc05cd | 686 | } |
hudakz | 0:4b76b1dc05cd | 687 | |
hudakz | 0:4b76b1dc05cd | 688 | /** |
hudakz | 0:4b76b1dc05cd | 689 | * @brief |
hudakz | 0:4b76b1dc05cd | 690 | * @note |
hudakz | 0:4b76b1dc05cd | 691 | * @param |
hudakz | 0:4b76b1dc05cd | 692 | * @retval |
hudakz | 0:4b76b1dc05cd | 693 | */ |
hudakz | 0:4b76b1dc05cd | 694 | errorTypes TLE5012B::getNumRevolutions(int16_t& numRev, updTypes upd, safetyTypes safe) |
hudakz | 0:4b76b1dc05cd | 695 | { |
hudakz | 0:4b76b1dc05cd | 696 | uint16_t rawData = 0; |
hudakz | 0:4b76b1dc05cd | 697 | errorTypes status = readFromSensor(REG_AREV, rawData, upd, safe); |
hudakz | 0:4b76b1dc05cd | 698 | |
hudakz | 0:4b76b1dc05cd | 699 | if (status != NO_ERROR) { |
hudakz | 0:4b76b1dc05cd | 700 | return(status); |
hudakz | 0:4b76b1dc05cd | 701 | } |
hudakz | 0:4b76b1dc05cd | 702 | |
hudakz | 0:4b76b1dc05cd | 703 | rawData = (rawData & (DELETE_7BITS)); |
hudakz | 0:4b76b1dc05cd | 704 | |
hudakz | 0:4b76b1dc05cd | 705 | // //check if the value received is positive or negative |
hudakz | 0:4b76b1dc05cd | 706 | if (rawData & CHECK_BIT_9) { |
hudakz | 0:4b76b1dc05cd | 707 | rawData = rawData - CHANGE_UNIT_TO_INT_9; |
hudakz | 0:4b76b1dc05cd | 708 | } |
hudakz | 0:4b76b1dc05cd | 709 | |
hudakz | 0:4b76b1dc05cd | 710 | numRev = rawData; |
hudakz | 0:4b76b1dc05cd | 711 | return(status); |
hudakz | 0:4b76b1dc05cd | 712 | } |
hudakz | 0:4b76b1dc05cd | 713 | |
hudakz | 0:4b76b1dc05cd | 714 | /** |
hudakz | 0:4b76b1dc05cd | 715 | * @brief |
hudakz | 0:4b76b1dc05cd | 716 | * @note |
hudakz | 0:4b76b1dc05cd | 717 | * @param |
hudakz | 0:4b76b1dc05cd | 718 | * @retval |
hudakz | 0:4b76b1dc05cd | 719 | */ |
hudakz | 0:4b76b1dc05cd | 720 | errorTypes TLE5012B::getAngleSpeed(double& finalAngleSpeed) |
hudakz | 0:4b76b1dc05cd | 721 | { |
hudakz | 0:4b76b1dc05cd | 722 | int16_t rawSpeed = 0; |
hudakz | 0:4b76b1dc05cd | 723 | |
hudakz | 0:4b76b1dc05cd | 724 | return(getAngleSpeed(finalAngleSpeed, rawSpeed, UPD_LOW, SAFE_HIGH)); |
hudakz | 0:4b76b1dc05cd | 725 | } |
hudakz | 0:4b76b1dc05cd | 726 | |
hudakz | 0:4b76b1dc05cd | 727 | /** |
hudakz | 0:4b76b1dc05cd | 728 | * @brief |
hudakz | 0:4b76b1dc05cd | 729 | * @note |
hudakz | 0:4b76b1dc05cd | 730 | * @param |
hudakz | 0:4b76b1dc05cd | 731 | * @retval |
hudakz | 0:4b76b1dc05cd | 732 | */ |
hudakz | 0:4b76b1dc05cd | 733 | errorTypes TLE5012B::getAngleSpeed(double& finalAngleSpeed, int16_t& rawSpeed, updTypes upd, safetyTypes safe) |
hudakz | 0:4b76b1dc05cd | 734 | { |
hudakz | 0:4b76b1dc05cd | 735 | int8_t numOfData = 0x5; |
hudakz | 0:4b76b1dc05cd | 736 | uint16_t* rawData = new uint16_t[numOfData]; |
hudakz | 0:4b76b1dc05cd | 737 | errorTypes status = readMoreRegisters(REG_ASPD + numOfData, rawData, upd, safe); |
hudakz | 0:4b76b1dc05cd | 738 | |
hudakz | 0:4b76b1dc05cd | 739 | if (status != NO_ERROR) { |
hudakz | 0:4b76b1dc05cd | 740 | return(status); |
hudakz | 0:4b76b1dc05cd | 741 | } |
hudakz | 0:4b76b1dc05cd | 742 | |
hudakz | 0:4b76b1dc05cd | 743 | // Prepare raw speed |
hudakz | 0:4b76b1dc05cd | 744 | rawSpeed = rawData[0]; |
hudakz | 0:4b76b1dc05cd | 745 | rawSpeed = (rawSpeed & (DELETE_BIT_15)); |
hudakz | 0:4b76b1dc05cd | 746 | |
hudakz | 0:4b76b1dc05cd | 747 | //check if the value received is positive or negative |
hudakz | 0:4b76b1dc05cd | 748 | if (rawSpeed & CHECK_BIT_14) { |
hudakz | 0:4b76b1dc05cd | 749 | rawSpeed = rawSpeed - CHANGE_UINT_TO_INT_15; |
hudakz | 0:4b76b1dc05cd | 750 | } |
hudakz | 0:4b76b1dc05cd | 751 | |
hudakz | 0:4b76b1dc05cd | 752 | // Prepare firMDVal |
hudakz | 0:4b76b1dc05cd | 753 | uint16_t firMDVal = rawData[3]; |
hudakz | 0:4b76b1dc05cd | 754 | |
hudakz | 0:4b76b1dc05cd | 755 | firMDVal >>= 14; |
hudakz | 0:4b76b1dc05cd | 756 | |
hudakz | 0:4b76b1dc05cd | 757 | // Prepare intMode2Prediction |
hudakz | 0:4b76b1dc05cd | 758 | uint16_t intMode2Prediction = rawData[5]; |
hudakz | 0:4b76b1dc05cd | 759 | |
hudakz | 0:4b76b1dc05cd | 760 | if (intMode2Prediction & 0x0004) { |
hudakz | 0:4b76b1dc05cd | 761 | intMode2Prediction = 3; |
hudakz | 0:4b76b1dc05cd | 762 | } |
hudakz | 0:4b76b1dc05cd | 763 | else { |
hudakz | 0:4b76b1dc05cd | 764 | intMode2Prediction = 2; |
hudakz | 0:4b76b1dc05cd | 765 | } |
hudakz | 0:4b76b1dc05cd | 766 | |
hudakz | 0:4b76b1dc05cd | 767 | // Prepare angle range |
hudakz | 0:4b76b1dc05cd | 768 | uint16_t rawAngleRange = rawData[5]; |
hudakz | 0:4b76b1dc05cd | 769 | |
hudakz | 0:4b76b1dc05cd | 770 | rawAngleRange &= GET_BIT_14_4; |
hudakz | 0:4b76b1dc05cd | 771 | rawAngleRange >>= 4; |
hudakz | 0:4b76b1dc05cd | 772 | |
hudakz | 0:4b76b1dc05cd | 773 | double angleRange = ANGLE_360_VAL * (POW_2_7 / (double)(rawAngleRange)); |
hudakz | 0:4b76b1dc05cd | 774 | |
hudakz | 0:4b76b1dc05cd | 775 | //checks the value of fir_MD according to which the value in the calculation of the speed will be determined |
hudakz | 0:4b76b1dc05cd | 776 | |
hudakz | 0:4b76b1dc05cd | 777 | //according to if prediction is enabled then, the formula for speed changes |
hudakz | 0:4b76b1dc05cd | 778 | finalAngleSpeed = calculateAngleSpeed(angleRange, rawSpeed, firMDVal, intMode2Prediction); |
hudakz | 0:4b76b1dc05cd | 779 | delete[] rawData; |
hudakz | 0:4b76b1dc05cd | 780 | return(status); |
hudakz | 0:4b76b1dc05cd | 781 | } |
hudakz | 0:4b76b1dc05cd | 782 | |
hudakz | 0:4b76b1dc05cd | 783 | /** |
hudakz | 0:4b76b1dc05cd | 784 | * @brief |
hudakz | 0:4b76b1dc05cd | 785 | * @note |
hudakz | 0:4b76b1dc05cd | 786 | * @param |
hudakz | 0:4b76b1dc05cd | 787 | * @retval |
hudakz | 0:4b76b1dc05cd | 788 | */ |
hudakz | 0:4b76b1dc05cd | 789 | errorTypes TLE5012B::getAngleRange(double& angleRange) |
hudakz | 0:4b76b1dc05cd | 790 | { |
hudakz | 0:4b76b1dc05cd | 791 | uint16_t rawData = 0; |
hudakz | 0:4b76b1dc05cd | 792 | errorTypes status = readIntMode2(rawData); |
hudakz | 0:4b76b1dc05cd | 793 | |
hudakz | 0:4b76b1dc05cd | 794 | if (status != NO_ERROR) { |
hudakz | 0:4b76b1dc05cd | 795 | return(status); |
hudakz | 0:4b76b1dc05cd | 796 | } |
hudakz | 0:4b76b1dc05cd | 797 | |
hudakz | 0:4b76b1dc05cd | 798 | //Angle Range is stored in bytes 14 - 4, so you have to do this bit shifting to get the right value |
hudakz | 0:4b76b1dc05cd | 799 | rawData &= GET_BIT_14_4; |
hudakz | 0:4b76b1dc05cd | 800 | rawData >>= 4; |
hudakz | 0:4b76b1dc05cd | 801 | angleRange = ANGLE_360_VAL * (POW_2_7 / (double)(rawData)); |
hudakz | 0:4b76b1dc05cd | 802 | return(status); |
hudakz | 0:4b76b1dc05cd | 803 | } |
hudakz | 0:4b76b1dc05cd | 804 | |
hudakz | 0:4b76b1dc05cd | 805 | // end get functions |
hudakz | 0:4b76b1dc05cd | 806 | //----------------------------------------------------------------------------- |
hudakz | 0:4b76b1dc05cd | 807 | |
hudakz | 0:4b76b1dc05cd | 808 | // begin write functions |
hudakz | 0:4b76b1dc05cd | 809 | errorTypes TLE5012B::writeIntMode2(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 810 | { |
hudakz | 0:4b76b1dc05cd | 811 | return(writeToSensor(REG_MOD_2, dataToWrite, true)); |
hudakz | 0:4b76b1dc05cd | 812 | } |
hudakz | 0:4b76b1dc05cd | 813 | |
hudakz | 0:4b76b1dc05cd | 814 | /** |
hudakz | 0:4b76b1dc05cd | 815 | * @brief |
hudakz | 0:4b76b1dc05cd | 816 | * @note |
hudakz | 0:4b76b1dc05cd | 817 | * @param |
hudakz | 0:4b76b1dc05cd | 818 | * @retval |
hudakz | 0:4b76b1dc05cd | 819 | */ |
hudakz | 0:4b76b1dc05cd | 820 | errorTypes TLE5012B::writeIntMode3(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 821 | { |
hudakz | 0:4b76b1dc05cd | 822 | return(writeToSensor(REG_MOD_3, dataToWrite, true)); |
hudakz | 0:4b76b1dc05cd | 823 | } |
hudakz | 0:4b76b1dc05cd | 824 | |
hudakz | 0:4b76b1dc05cd | 825 | /** |
hudakz | 0:4b76b1dc05cd | 826 | * @brief |
hudakz | 0:4b76b1dc05cd | 827 | * @note |
hudakz | 0:4b76b1dc05cd | 828 | * @param |
hudakz | 0:4b76b1dc05cd | 829 | * @retval |
hudakz | 0:4b76b1dc05cd | 830 | */ |
hudakz | 0:4b76b1dc05cd | 831 | errorTypes TLE5012B::writeOffsetX(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 832 | { |
hudakz | 0:4b76b1dc05cd | 833 | return(writeToSensor(REG_OFFX, dataToWrite, true)); |
hudakz | 0:4b76b1dc05cd | 834 | } |
hudakz | 0:4b76b1dc05cd | 835 | |
hudakz | 0:4b76b1dc05cd | 836 | /** |
hudakz | 0:4b76b1dc05cd | 837 | * @brief |
hudakz | 0:4b76b1dc05cd | 838 | * @note |
hudakz | 0:4b76b1dc05cd | 839 | * @param |
hudakz | 0:4b76b1dc05cd | 840 | * @retval |
hudakz | 0:4b76b1dc05cd | 841 | */ |
hudakz | 0:4b76b1dc05cd | 842 | errorTypes TLE5012B::writeOffsetY(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 843 | { |
hudakz | 0:4b76b1dc05cd | 844 | return(writeToSensor(REG_OFFY, dataToWrite, true)); |
hudakz | 0:4b76b1dc05cd | 845 | } |
hudakz | 0:4b76b1dc05cd | 846 | |
hudakz | 0:4b76b1dc05cd | 847 | /** |
hudakz | 0:4b76b1dc05cd | 848 | * @brief |
hudakz | 0:4b76b1dc05cd | 849 | * @note |
hudakz | 0:4b76b1dc05cd | 850 | * @param |
hudakz | 0:4b76b1dc05cd | 851 | * @retval |
hudakz | 0:4b76b1dc05cd | 852 | */ |
hudakz | 0:4b76b1dc05cd | 853 | errorTypes TLE5012B::writeSynch(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 854 | { |
hudakz | 0:4b76b1dc05cd | 855 | return(writeToSensor(REG_SYNCH, dataToWrite, true)); |
hudakz | 0:4b76b1dc05cd | 856 | } |
hudakz | 0:4b76b1dc05cd | 857 | |
hudakz | 0:4b76b1dc05cd | 858 | /** |
hudakz | 0:4b76b1dc05cd | 859 | * @brief |
hudakz | 0:4b76b1dc05cd | 860 | * @note |
hudakz | 0:4b76b1dc05cd | 861 | * @param |
hudakz | 0:4b76b1dc05cd | 862 | * @retval |
hudakz | 0:4b76b1dc05cd | 863 | */ |
hudakz | 0:4b76b1dc05cd | 864 | errorTypes TLE5012B::writeIFAB(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 865 | { |
hudakz | 0:4b76b1dc05cd | 866 | return(writeToSensor(REG_IFAB, dataToWrite, true)); |
hudakz | 0:4b76b1dc05cd | 867 | } |
hudakz | 0:4b76b1dc05cd | 868 | |
hudakz | 0:4b76b1dc05cd | 869 | /** |
hudakz | 0:4b76b1dc05cd | 870 | * @brief |
hudakz | 0:4b76b1dc05cd | 871 | * @note |
hudakz | 0:4b76b1dc05cd | 872 | * @param |
hudakz | 0:4b76b1dc05cd | 873 | * @retval |
hudakz | 0:4b76b1dc05cd | 874 | */ |
hudakz | 0:4b76b1dc05cd | 875 | errorTypes TLE5012B::writeIntMode4(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 876 | { |
hudakz | 0:4b76b1dc05cd | 877 | return(writeToSensor(REG_MOD_4, dataToWrite, true)); |
hudakz | 0:4b76b1dc05cd | 878 | } |
hudakz | 0:4b76b1dc05cd | 879 | |
hudakz | 0:4b76b1dc05cd | 880 | /** |
hudakz | 0:4b76b1dc05cd | 881 | * @brief |
hudakz | 0:4b76b1dc05cd | 882 | * @note |
hudakz | 0:4b76b1dc05cd | 883 | * @param |
hudakz | 0:4b76b1dc05cd | 884 | * @retval |
hudakz | 0:4b76b1dc05cd | 885 | */ |
hudakz | 0:4b76b1dc05cd | 886 | errorTypes TLE5012B::writeTempCoeff(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 887 | { |
hudakz | 0:4b76b1dc05cd | 888 | return(writeToSensor(REG_TCO_Y, dataToWrite, true)); |
hudakz | 0:4b76b1dc05cd | 889 | } |
hudakz | 0:4b76b1dc05cd | 890 | |
hudakz | 0:4b76b1dc05cd | 891 | /** |
hudakz | 0:4b76b1dc05cd | 892 | * @brief |
hudakz | 0:4b76b1dc05cd | 893 | * @note |
hudakz | 0:4b76b1dc05cd | 894 | * @param |
hudakz | 0:4b76b1dc05cd | 895 | * @retval |
hudakz | 0:4b76b1dc05cd | 896 | */ |
hudakz | 0:4b76b1dc05cd | 897 | errorTypes TLE5012B::writeActivationStatus(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 898 | { |
hudakz | 0:4b76b1dc05cd | 899 | return(writeToSensor(REG_ACSTAT, dataToWrite, false)); |
hudakz | 0:4b76b1dc05cd | 900 | } |
hudakz | 0:4b76b1dc05cd | 901 | |
hudakz | 0:4b76b1dc05cd | 902 | /** |
hudakz | 0:4b76b1dc05cd | 903 | * @brief |
hudakz | 0:4b76b1dc05cd | 904 | * @note |
hudakz | 0:4b76b1dc05cd | 905 | * @param |
hudakz | 0:4b76b1dc05cd | 906 | * @retval |
hudakz | 0:4b76b1dc05cd | 907 | */ |
hudakz | 0:4b76b1dc05cd | 908 | errorTypes TLE5012B::writeIntMode1(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 909 | { |
hudakz | 0:4b76b1dc05cd | 910 | return(writeToSensor(REG_MOD_1, dataToWrite, false)); |
hudakz | 0:4b76b1dc05cd | 911 | } |
hudakz | 0:4b76b1dc05cd | 912 | |
hudakz | 0:4b76b1dc05cd | 913 | /** |
hudakz | 0:4b76b1dc05cd | 914 | * @brief |
hudakz | 0:4b76b1dc05cd | 915 | * @note |
hudakz | 0:4b76b1dc05cd | 916 | * @param |
hudakz | 0:4b76b1dc05cd | 917 | * @retval |
hudakz | 0:4b76b1dc05cd | 918 | */ |
hudakz | 0:4b76b1dc05cd | 919 | errorTypes TLE5012B::writeSIL(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 920 | { |
hudakz | 0:4b76b1dc05cd | 921 | return(writeToSensor(REG_SIL, dataToWrite, false)); |
hudakz | 0:4b76b1dc05cd | 922 | } |
hudakz | 0:4b76b1dc05cd | 923 | |
hudakz | 0:4b76b1dc05cd | 924 | /** |
hudakz | 0:4b76b1dc05cd | 925 | * @brief |
hudakz | 0:4b76b1dc05cd | 926 | * @note |
hudakz | 0:4b76b1dc05cd | 927 | * @param |
hudakz | 0:4b76b1dc05cd | 928 | * @retval |
hudakz | 0:4b76b1dc05cd | 929 | */ |
hudakz | 0:4b76b1dc05cd | 930 | errorTypes TLE5012B::writeSlaveNumber(uint16_t dataToWrite) |
hudakz | 0:4b76b1dc05cd | 931 | { |
hudakz | 0:4b76b1dc05cd | 932 | return(writeToSensor(WRITE_SENSOR, dataToWrite, false)); |
hudakz | 0:4b76b1dc05cd | 933 | } |
hudakz | 0:4b76b1dc05cd | 934 | |
hudakz | 0:4b76b1dc05cd | 935 | // end write functions |