Library for Akizuki MCP3425 ADC module

Fork of MCP3425 by yasuyuki onodera

Library for MCP3425 ADC module from Akizuki-denshi.

Committer:
sakurahilljp
Date:
Fri Apr 15 13:41:32 2016 +0000
Revision:
3:378672292488
Parent:
2:7375e645e806
Added documentation.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yasuyuki 0:b7bc51be525f 1 //**********************
yasuyuki 0:b7bc51be525f 2 // MCP3425.h for mbed
yasuyuki 0:b7bc51be525f 3 //
sakurahilljp 3:378672292488 4 // (C)Copyright 2016 Satoshi Nihonyanagi, All Rights Reserved.
sakurahilljp 3:378672292488 5 //
yasuyuki 0:b7bc51be525f 6 // (C)Copyright 2014 All rights reserved by Y.Onodera
yasuyuki 0:b7bc51be525f 7 // http://einstlab.web.fc2.com
yasuyuki 0:b7bc51be525f 8 //**********************
yasuyuki 0:b7bc51be525f 9
yasuyuki 0:b7bc51be525f 10 #ifndef MCP3425_H_
yasuyuki 0:b7bc51be525f 11 #define MCP3425_H_
yasuyuki 0:b7bc51be525f 12
sakurahilljp 2:7375e645e806 13 #include "mbed.h"
sakurahilljp 3:378672292488 14 /** MCP3425 class.
sakurahilljp 3:378672292488 15 * Used for MCP3425 ADC module from Akizuki-denshi.
sakurahilljp 3:378672292488 16 *
sakurahilljp 3:378672292488 17 * Example:
sakurahilljp 3:378672292488 18 * @code
sakurahilljp 3:378672292488 19 * #include "mbed.h"
sakurahilljp 3:378672292488 20 * #include "MCP3425.h"
sakurahilljp 3:378672292488 21 *
sakurahilljp 3:378672292488 22 * I2C i2c(dp13, dp15);
sakurahilljp 3:378672292488 23 * MCP3425 adc(i2c);
sakurahilljp 3:378672292488 24 *
sakurahilljp 3:378672292488 25 * int main()
sakurahilljp 3:378672292488 26 * {
sakurahilljp 3:378672292488 27 * adc.set(MCP3425::G1);
sakurahilljp 3:378672292488 28 * adc.set(MCP3425::W12);
sakurahilljp 3:378672292488 29 * adc.set(MCP3425::CONTINUOUS);
sakurahilljp 3:378672292488 30 *
sakurahilljp 3:378672292488 31 * short c = adc.code();
sakurahilljp 3:378672292488 32 * float v = adc.read();
sakurahilljp 3:378672292488 33 * }
sakurahilljp 3:378672292488 34 * @endcode
sakurahilljp 3:378672292488 35 */
yasuyuki 0:b7bc51be525f 36
sakurahilljp 2:7375e645e806 37 class MCP3425
yasuyuki 0:b7bc51be525f 38 {
sakurahilljp 3:378672292488 39 public:
sakurahilljp 2:7375e645e806 40 enum Gain { G1 = 0, G2 = 1, G4 = 2, G8 = 3 };
sakurahilljp 2:7375e645e806 41 enum Resolution {W12 = 0, W14 = 1, W16 = 2};
sakurahilljp 2:7375e645e806 42 enum Conversion {ONESHOT = 0, CONTINUOUS = 1};
yasuyuki 0:b7bc51be525f 43
sakurahilljp 3:378672292488 44 /** Construct a new instance.*/
sakurahilljp 2:7375e645e806 45 MCP3425(I2C& i2c);
sakurahilljp 3:378672292488 46
sakurahilljp 3:378672292488 47 /** Construct a new instance with the specified I2C slave address.
sakurahilljp 3:378672292488 48 ( Address of MCP3425 from akizuki-denshi is fixed to 0x0D.)
sakurahilljp 3:378672292488 49 */
sakurahilljp 2:7375e645e806 50 MCP3425(I2C& i2c, int addr);
sakurahilljp 2:7375e645e806 51
sakurahilljp 3:378672292488 52 /** Specify gain. */
sakurahilljp 2:7375e645e806 53 void set(Gain gain);
sakurahilljp 3:378672292488 54
sakurahilljp 3:378672292488 55 /** Specify resolution (sample bits). */
sakurahilljp 2:7375e645e806 56 void set(Resolution resolution);
sakurahilljp 3:378672292488 57
sakurahilljp 3:378672292488 58 /** Specify conversion operation mode. */
sakurahilljp 2:7375e645e806 59 void set(Conversion conversion);
sakurahilljp 2:7375e645e806 60
sakurahilljp 3:378672292488 61 /** Return AD code. */
sakurahilljp 3:378672292488 62 short get();
sakurahilljp 3:378672292488 63
sakurahilljp 3:378672292488 64 /** Return voltage. */
sakurahilljp 3:378672292488 65 float read();
yasuyuki 0:b7bc51be525f 66
sakurahilljp 2:7375e645e806 67 private:
sakurahilljp 3:378672292488 68
sakurahilljp 3:378672292488 69 static const int ADDR;
sakurahilljp 3:378672292488 70 static const float VREF;
sakurahilljp 3:378672292488 71
sakurahilljp 2:7375e645e806 72 typedef union
sakurahilljp 2:7375e645e806 73 {
sakurahilljp 2:7375e645e806 74 unsigned short int Val;
sakurahilljp 2:7375e645e806 75 unsigned char v[2];
sakurahilljp 2:7375e645e806 76 short S;
sakurahilljp 2:7375e645e806 77 struct
sakurahilljp 2:7375e645e806 78 {
sakurahilljp 2:7375e645e806 79 unsigned char LB;
sakurahilljp 2:7375e645e806 80 unsigned char HB;
sakurahilljp 2:7375e645e806 81 } byte;
sakurahilljp 2:7375e645e806 82 } WORD_VAL;
yasuyuki 0:b7bc51be525f 83
sakurahilljp 2:7375e645e806 84 typedef union {
sakurahilljp 2:7375e645e806 85 unsigned char UC;
sakurahilljp 2:7375e645e806 86 struct {
sakurahilljp 2:7375e645e806 87 unsigned char G:2; // 00=1, 01=2, 10=4, 11=8 Gain
sakurahilljp 2:7375e645e806 88 unsigned char S:2; // 00=12bits, 01=14bits, 10=16bits
sakurahilljp 2:7375e645e806 89 unsigned char OC:1; // 0=One-shot, 1=Continuous
sakurahilljp 2:7375e645e806 90 unsigned char C:2; // NA
sakurahilljp 2:7375e645e806 91 unsigned char RDY:1; // wrinting 1=Initiate, reading 0=Ready
sakurahilljp 2:7375e645e806 92 } bit;
sakurahilljp 2:7375e645e806 93 } CONFIG;
yasuyuki 0:b7bc51be525f 94
sakurahilljp 2:7375e645e806 95 I2C _i2c;
sakurahilljp 2:7375e645e806 96 int _addr;
sakurahilljp 2:7375e645e806 97
sakurahilljp 2:7375e645e806 98 CONFIG _cfg;
sakurahilljp 2:7375e645e806 99 WORD_VAL _val;
sakurahilljp 2:7375e645e806 100
sakurahilljp 2:7375e645e806 101 char _buf[3];
sakurahilljp 2:7375e645e806 102
sakurahilljp 2:7375e645e806 103 void _init();
sakurahilljp 2:7375e645e806 104 void _write_cfg();
sakurahilljp 2:7375e645e806 105 short _get_code();
sakurahilljp 3:378672292488 106 float _c2v(short code);
yasuyuki 0:b7bc51be525f 107 };
yasuyuki 0:b7bc51be525f 108
yasuyuki 0:b7bc51be525f 109 #endif /* MCP3425_H_ */
yasuyuki 0:b7bc51be525f 110
yasuyuki 0:b7bc51be525f 111
yasuyuki 0:b7bc51be525f 112