Driver for the HSCDTD008A Geomagnetic Sensor.
Embed:
(wiki syntax)
Show/hide line numbers
HSCDTD008A.h
00001 #ifndef HSCDTD008A_H 00002 #define HSCDTD008A_H 00003 00004 #include "mbed.h" 00005 00006 #define RANGE (2.4 + 2.4) // mT (+/- 2.4 mT) 00007 #define RESOL 1024 // resolution = 1024 bit 00008 00009 /* 00010 * Status Register (STAT) 00011 */ 00012 00013 // (Read Only) 00014 #define DRDY 6 // Data Ready Detection 00015 #define DOR 5 // Data Overrun Detection 00016 #define FFU 2 // FIFO full alarm 00017 #define TRDY 1 // Temperature ready 00018 #define ORDY 0 // Offset ready 00019 00020 /* 00021 * FIFO Pointer Status Register (FFPT). 00022 */ 00023 00024 // (Read Only) 00025 #define FP (0b00001111) // Number of data in FIFO : 0 - 8 00026 00027 /* 00028 * Control 1 Register (CTRL1) 00029 */ 00030 00031 // (Write/Read) 00032 #define PC 7 // Power Mode Control 0 = Stand-by Mode (Default), 1 = Active Mode 00033 #define ODR 3 // Output Data Rate Control in Normal State 00 = 0.5 Hz, 01 = 10Hz (Default), 10 = 20Hz, 11 = 100Hz 00034 #define FS 1 // State Control in Active Mode 0 = Normal State, 1 = Force State (Default) 00035 00036 /* 00037 * Control 2 Register (CTRL2) 00038 */ 00039 00040 // - When a CTRL2 register value was changed during the measurement, 00041 // The contents of the change are reflected after measurement. 00042 // (Write/Read) 00043 #define AVG 7 // Must be used default setting. 0 = (Default) 00044 #define FCO 6 // Data storage method at FIFO. 0 = Direct (Default) , 1 = Comparison 00045 #define AOR 5 // Choice of method of data Comparison at FIFO. 0 = OR(Default) , 1 = AND 00046 #define FF 4 // FIFO Enable. 0 = Disable (Default) , 1 = Enable 00047 #define DEN 3 // Data Ready Function Control Enable. 0 = Disabled (Default), 1 = Enabled 00048 #define DRP 2 // DRDY signal active level control. 0 = ACTIVE LOW, 1 = ACTIVE HIGH (Default) 00049 #define DTS 1 // Must be used default setting. 0 = (Default) 00050 #define DOS 0 // Must be used default setting. 0 = (Default) 00051 00052 /* 00053 * Control 3 Register (CTRL3) 00054 */ 00055 00056 // - Bit control at the same time is prohibited. 00057 // - Priority of this register is MSB. 00058 // (Write/Read) 00059 #define SRST 7 // Soft Reset Control Enable. 0 = No Action (Default), 1 = Soft Reset, Note: return to zero after soft reset. 00060 #define FRC 6 // Start to Measure in Force State. 0 = No Action (Default), 1 = Measurement Start, Note: return to zero after measurement. 00061 #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. 00062 #define TCS 1 // Start to Measure Temperature in Active Mode. 0 = No Action (Default), 1 = Measurement Start 00063 #define OCL 0 // Start to Calibrate Offset in Active Mode. 0 = No Action (Default), 1 = Action 00064 00065 /* 00066 * Control 4 Register (CTRL4) 00067 */ 00068 00069 // - When a CTRL4 register value was changed during the measurement, 00070 // The contents of the change are reflected after measurement. 00071 #define MMD 6 // Must be used default setting. 10 = (Default) 00072 #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) 00073 #define AS 3 // Must be used default setting. 0 = (Default) 00074 // 00075 // 00076 #define OK 0 00077 #define ERROR -1 00078 00079 // Function prototypes 00080 void printBinary(const unsigned char val); 00081 00082 class HSCDTD008A 00083 { 00084 public: 00085 HSCDTD008A(PinName sda, PinName scl, uint8_t addr = 0x0C); 00086 int16_t toInt16(uint16_t word); 00087 void standbyMode(); 00088 void normalMode(uint8_t odr = 0b01, bool enableDataReady = false); 00089 void forcedMode(); 00090 void softReset(); 00091 uint8_t selfTest(); 00092 void calibrateOffsets(); 00093 void setDriftOffsetX(uint16_t val); 00094 void setDriftOffsetY(uint16_t val); 00095 void setDriftOffsetZ(uint16_t val); 00096 void compensateTemp(); 00097 void enableFifo(); 00098 void disableFifo(); 00099 uint8_t getFifoPointer(); 00100 bool isFifoFull(); 00101 bool isFifoOverrun(); 00102 bool isDataReady(); 00103 bool getResolution(); 00104 void setResolution(bool fifteen_bits); 00105 uint8_t measure(); 00106 void readData(); 00107 float x(); 00108 float y(); 00109 float z(); 00110 private: 00111 I2C* _i2c; 00112 const uint8_t _addr; 00113 uint16_t _x; 00114 uint16_t _y; 00115 uint16_t _z; 00116 }; 00117 #endif // HSCDTD008A_H
Generated on Fri Jul 15 2022 14:06:39 by 1.7.2