Driver for the HSCDTD008A Geomagnetic Sensor.

Dependents:   HSCDTD008A_Hello

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers HSCDTD008A.h Source File

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