Driver for the HSCDTD008A Geomagnetic Sensor.
HSCDTD008A.h@1:b90695c17177, 2021-06-20 (annotated)
- Committer:
- hudakz
- Date:
- Sun Jun 20 14:18:02 2021 +0000
- Revision:
- 1:b90695c17177
- Parent:
- 0:ccf912737de7
Driver for the HSCDTD008A Geomagnetic Sensor.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hudakz | 0:ccf912737de7 | 1 | #ifndef HSCDTD008A_H |
hudakz | 0:ccf912737de7 | 2 | #define HSCDTD008A_H |
hudakz | 0:ccf912737de7 | 3 | |
hudakz | 0:ccf912737de7 | 4 | #include "mbed.h" |
hudakz | 0:ccf912737de7 | 5 | |
hudakz | 0:ccf912737de7 | 6 | #define RANGE (2.4 + 2.4) // mT (+/- 2.4 mT) |
hudakz | 0:ccf912737de7 | 7 | #define RESOL 1024 // resolution = 1024 bit |
hudakz | 0:ccf912737de7 | 8 | |
hudakz | 0:ccf912737de7 | 9 | /* |
hudakz | 0:ccf912737de7 | 10 | * Status Register (STAT) |
hudakz | 0:ccf912737de7 | 11 | */ |
hudakz | 0:ccf912737de7 | 12 | |
hudakz | 0:ccf912737de7 | 13 | // (Read Only) |
hudakz | 0:ccf912737de7 | 14 | #define DRDY 6 // Data Ready Detection |
hudakz | 0:ccf912737de7 | 15 | #define DOR 5 // Data Overrun Detection |
hudakz | 0:ccf912737de7 | 16 | #define FFU 2 // FIFO full alarm |
hudakz | 0:ccf912737de7 | 17 | #define TRDY 1 // Temperature ready |
hudakz | 0:ccf912737de7 | 18 | #define ORDY 0 // Offset ready |
hudakz | 0:ccf912737de7 | 19 | |
hudakz | 0:ccf912737de7 | 20 | /* |
hudakz | 0:ccf912737de7 | 21 | * FIFO Pointer Status Register (FFPT). |
hudakz | 0:ccf912737de7 | 22 | */ |
hudakz | 0:ccf912737de7 | 23 | |
hudakz | 0:ccf912737de7 | 24 | // (Read Only) |
hudakz | 0:ccf912737de7 | 25 | #define FP (0b00001111) // Number of data in FIFO : 0 - 8 |
hudakz | 0:ccf912737de7 | 26 | |
hudakz | 0:ccf912737de7 | 27 | /* |
hudakz | 0:ccf912737de7 | 28 | * Control 1 Register (CTRL1) |
hudakz | 0:ccf912737de7 | 29 | */ |
hudakz | 0:ccf912737de7 | 30 | |
hudakz | 0:ccf912737de7 | 31 | // (Write/Read) |
hudakz | 0:ccf912737de7 | 32 | #define PC 7 // Power Mode Control 0 = Stand-by Mode (Default), 1 = Active Mode |
hudakz | 0:ccf912737de7 | 33 | #define ODR 3 // Output Data Rate Control in Normal State 00 = 0.5 Hz, 01 = 10Hz (Default), 10 = 20Hz, 11 = 100Hz |
hudakz | 0:ccf912737de7 | 34 | #define FS 1 // State Control in Active Mode 0 = Normal State, 1 = Force State (Default) |
hudakz | 0:ccf912737de7 | 35 | |
hudakz | 0:ccf912737de7 | 36 | /* |
hudakz | 0:ccf912737de7 | 37 | * Control 2 Register (CTRL2) |
hudakz | 0:ccf912737de7 | 38 | */ |
hudakz | 0:ccf912737de7 | 39 | |
hudakz | 0:ccf912737de7 | 40 | // - When a CTRL2 register value was changed during the measurement, |
hudakz | 0:ccf912737de7 | 41 | // The contents of the change are reflected after measurement. |
hudakz | 0:ccf912737de7 | 42 | // (Write/Read) |
hudakz | 0:ccf912737de7 | 43 | #define AVG 7 // Must be used default setting. 0 = (Default) |
hudakz | 0:ccf912737de7 | 44 | #define FCO 6 // Data storage method at FIFO. 0 = Direct (Default) , 1 = Comparison |
hudakz | 0:ccf912737de7 | 45 | #define AOR 5 // Choice of method of data Comparison at FIFO. 0 = OR(Default) , 1 = AND |
hudakz | 0:ccf912737de7 | 46 | #define FF 4 // FIFO Enable. 0 = Disable (Default) , 1 = Enable |
hudakz | 0:ccf912737de7 | 47 | #define DEN 3 // Data Ready Function Control Enable. 0 = Disabled (Default), 1 = Enabled |
hudakz | 0:ccf912737de7 | 48 | #define DRP 2 // DRDY signal active level control. 0 = ACTIVE LOW, 1 = ACTIVE HIGH (Default) |
hudakz | 0:ccf912737de7 | 49 | #define DTS 1 // Must be used default setting. 0 = (Default) |
hudakz | 0:ccf912737de7 | 50 | #define DOS 0 // Must be used default setting. 0 = (Default) |
hudakz | 0:ccf912737de7 | 51 | |
hudakz | 0:ccf912737de7 | 52 | /* |
hudakz | 0:ccf912737de7 | 53 | * Control 3 Register (CTRL3) |
hudakz | 0:ccf912737de7 | 54 | */ |
hudakz | 0:ccf912737de7 | 55 | |
hudakz | 0:ccf912737de7 | 56 | // - Bit control at the same time is prohibited. |
hudakz | 0:ccf912737de7 | 57 | // - Priority of this register is MSB. |
hudakz | 0:ccf912737de7 | 58 | // (Write/Read) |
hudakz | 0:ccf912737de7 | 59 | #define SRST 7 // Soft Reset Control Enable. 0 = No Action (Default), 1 = Soft Reset, Note: return to zero after soft reset. |
hudakz | 0:ccf912737de7 | 60 | #define FRC 6 // Start to Measure in Force State. 0 = No Action (Default), 1 = Measurement Start, Note: return to zero after measurement. |
hudakz | 0:ccf912737de7 | 61 | #define STC 4 // Self Test Control Enable. 0 = No Action (Default), 1 = Set parameters to Self Test Response (STB) register., Note: return to zero immediately. |
hudakz | 0:ccf912737de7 | 62 | #define TCS 1 // Start to Measure Temperature in Active Mode. 0 = No Action (Default), 1 = Measurement Start |
hudakz | 0:ccf912737de7 | 63 | #define OCL 0 // Start to Calibrate Offset in Active Mode. 0 = No Action (Default), 1 = Action |
hudakz | 0:ccf912737de7 | 64 | |
hudakz | 0:ccf912737de7 | 65 | /* |
hudakz | 0:ccf912737de7 | 66 | * Control 4 Register (CTRL4) |
hudakz | 0:ccf912737de7 | 67 | */ |
hudakz | 0:ccf912737de7 | 68 | |
hudakz | 0:ccf912737de7 | 69 | // - When a CTRL4 register value was changed during the measurement, |
hudakz | 0:ccf912737de7 | 70 | // The contents of the change are reflected after measurement. |
hudakz | 0:ccf912737de7 | 71 | #define MMD 6 // Must be used default setting. 10 = (Default) |
hudakz | 0:ccf912737de7 | 72 | #define RS 4 // Set Dynamic range of output data. 0 = 14 bit signed value (-8192 to +8191) (Default), 1 = 15 bit signed value (-16384 to +16383) |
hudakz | 0:ccf912737de7 | 73 | #define AS 3 // Must be used default setting. 0 = (Default) |
hudakz | 0:ccf912737de7 | 74 | // |
hudakz | 0:ccf912737de7 | 75 | // |
hudakz | 0:ccf912737de7 | 76 | #define OK 0 |
hudakz | 0:ccf912737de7 | 77 | #define ERROR -1 |
hudakz | 0:ccf912737de7 | 78 | |
hudakz | 0:ccf912737de7 | 79 | // Function prototypes |
hudakz | 0:ccf912737de7 | 80 | void printBinary(const unsigned char val); |
hudakz | 0:ccf912737de7 | 81 | |
hudakz | 0:ccf912737de7 | 82 | class HSCDTD008A |
hudakz | 0:ccf912737de7 | 83 | { |
hudakz | 0:ccf912737de7 | 84 | public: |
hudakz | 1:b90695c17177 | 85 | HSCDTD008A(PinName sda, PinName scl, uint8_t addr = 0x0C); |
hudakz | 0:ccf912737de7 | 86 | int16_t toInt16(uint16_t word); |
hudakz | 0:ccf912737de7 | 87 | void standbyMode(); |
hudakz | 0:ccf912737de7 | 88 | void normalMode(uint8_t odr = 0b01, bool enableDataReady = false); |
hudakz | 0:ccf912737de7 | 89 | void forcedMode(); |
hudakz | 0:ccf912737de7 | 90 | void softReset(); |
hudakz | 1:b90695c17177 | 91 | uint8_t selfTest(); |
hudakz | 0:ccf912737de7 | 92 | void calibrateOffsets(); |
hudakz | 0:ccf912737de7 | 93 | void setDriftOffsetX(uint16_t val); |
hudakz | 0:ccf912737de7 | 94 | void setDriftOffsetY(uint16_t val); |
hudakz | 0:ccf912737de7 | 95 | void setDriftOffsetZ(uint16_t val); |
hudakz | 0:ccf912737de7 | 96 | void compensateTemp(); |
hudakz | 0:ccf912737de7 | 97 | void enableFifo(); |
hudakz | 0:ccf912737de7 | 98 | void disableFifo(); |
hudakz | 0:ccf912737de7 | 99 | uint8_t getFifoPointer(); |
hudakz | 0:ccf912737de7 | 100 | bool isFifoFull(); |
hudakz | 0:ccf912737de7 | 101 | bool isFifoOverrun(); |
hudakz | 0:ccf912737de7 | 102 | bool isDataReady(); |
hudakz | 0:ccf912737de7 | 103 | bool getResolution(); |
hudakz | 0:ccf912737de7 | 104 | void setResolution(bool fifteen_bits); |
hudakz | 0:ccf912737de7 | 105 | uint8_t measure(); |
hudakz | 0:ccf912737de7 | 106 | void readData(); |
hudakz | 0:ccf912737de7 | 107 | float x(); |
hudakz | 0:ccf912737de7 | 108 | float y(); |
hudakz | 0:ccf912737de7 | 109 | float z(); |
hudakz | 0:ccf912737de7 | 110 | private: |
hudakz | 0:ccf912737de7 | 111 | I2C* _i2c; |
hudakz | 0:ccf912737de7 | 112 | const uint8_t _addr; |
hudakz | 0:ccf912737de7 | 113 | uint16_t _x; |
hudakz | 0:ccf912737de7 | 114 | uint16_t _y; |
hudakz | 0:ccf912737de7 | 115 | uint16_t _z; |
hudakz | 0:ccf912737de7 | 116 | }; |
hudakz | 0:ccf912737de7 | 117 | #endif // HSCDTD008A_H |