Driver for the HSCDTD008A Geomagnetic Sensor.

Dependents:   HSCDTD008A_Hello

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?

UserRevisionLine numberNew 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