SPI 接続の温度センサ ADT7310 用のライブラリ. Library for temperature sensor ADT7310 connected using SPI interface.
ADT7310.cpp@0:6890e1214ea6, 2015-06-27 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sat Jun 27 08:09:59 2015 +0000
- Revision:
- 0:6890e1214ea6
- Child:
- 1:38a276440674
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:6890e1214ea6 | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:6890e1214ea6 | 2 | // Class for using ADT7310 on one-shot mode |
MikamiUitOpen | 0:6890e1214ea6 | 3 | // Default: 13-bit resolution |
MikamiUitOpen | 0:6890e1214ea6 | 4 | // 2015/06/27, Copyright (c) 2015 MIKAMI, Naoki |
MikamiUitOpen | 0:6890e1214ea6 | 5 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:6890e1214ea6 | 6 | |
MikamiUitOpen | 0:6890e1214ea6 | 7 | #include "ADT7310.hpp" |
MikamiUitOpen | 0:6890e1214ea6 | 8 | |
MikamiUitOpen | 0:6890e1214ea6 | 9 | namespace Mikami |
MikamiUitOpen | 0:6890e1214ea6 | 10 | { |
MikamiUitOpen | 0:6890e1214ea6 | 11 | // Constructor |
MikamiUitOpen | 0:6890e1214ea6 | 12 | ADT7310::ADT7310(PinName ss, |
MikamiUitOpen | 0:6890e1214ea6 | 13 | PinName mosi, PinName miso, PinName sck) |
MikamiUitOpen | 0:6890e1214ea6 | 14 | : ss_(ss, 1), spi_(mosi, miso, sck) |
MikamiUitOpen | 0:6890e1214ea6 | 15 | { |
MikamiUitOpen | 0:6890e1214ea6 | 16 | Reset(); |
MikamiUitOpen | 0:6890e1214ea6 | 17 | spi_.format(8, 3); // mode: 8 bits, POL = 1, PHA = 1 |
MikamiUitOpen | 0:6890e1214ea6 | 18 | SetConfigReg(0x00); // Set 13-bit resolution |
MikamiUitOpen | 0:6890e1214ea6 | 19 | } |
MikamiUitOpen | 0:6890e1214ea6 | 20 | |
MikamiUitOpen | 0:6890e1214ea6 | 21 | // Software reset |
MikamiUitOpen | 0:6890e1214ea6 | 22 | void ADT7310::Reset() |
MikamiUitOpen | 0:6890e1214ea6 | 23 | { |
MikamiUitOpen | 0:6890e1214ea6 | 24 | Select(); |
MikamiUitOpen | 0:6890e1214ea6 | 25 | for (int n=0; n<4; n++) SendData(0xFF); |
MikamiUitOpen | 0:6890e1214ea6 | 26 | Deselect(); |
MikamiUitOpen | 0:6890e1214ea6 | 27 | wait_us(500); |
MikamiUitOpen | 0:6890e1214ea6 | 28 | } |
MikamiUitOpen | 0:6890e1214ea6 | 29 | |
MikamiUitOpen | 0:6890e1214ea6 | 30 | // Set configuration register |
MikamiUitOpen | 0:6890e1214ea6 | 31 | void ADT7310::SetConfigReg(uint8_t value) |
MikamiUitOpen | 0:6890e1214ea6 | 32 | { |
MikamiUitOpen | 0:6890e1214ea6 | 33 | Select(); |
MikamiUitOpen | 0:6890e1214ea6 | 34 | SendWrite(CONFIG); // for write to config. reg. |
MikamiUitOpen | 0:6890e1214ea6 | 35 | SendData(value); |
MikamiUitOpen | 0:6890e1214ea6 | 36 | Deselect(); |
MikamiUitOpen | 0:6890e1214ea6 | 37 | } |
MikamiUitOpen | 0:6890e1214ea6 | 38 | |
MikamiUitOpen | 0:6890e1214ea6 | 39 | // Set resolution |
MikamiUitOpen | 0:6890e1214ea6 | 40 | void ADT7310::SetResolution16(bool res) |
MikamiUitOpen | 0:6890e1214ea6 | 41 | { |
MikamiUitOpen | 0:6890e1214ea6 | 42 | uint8_t config = GetConfigReg() & 0x7f; |
MikamiUitOpen | 0:6890e1214ea6 | 43 | if (res) SetConfigReg(config | 0x80); |
MikamiUitOpen | 0:6890e1214ea6 | 44 | else SetConfigReg(config); |
MikamiUitOpen | 0:6890e1214ea6 | 45 | } |
MikamiUitOpen | 0:6890e1214ea6 | 46 | |
MikamiUitOpen | 0:6890e1214ea6 | 47 | // Get specified register |
MikamiUitOpen | 0:6890e1214ea6 | 48 | uint8_t ADT7310::GetReg(Reg myReg) |
MikamiUitOpen | 0:6890e1214ea6 | 49 | { |
MikamiUitOpen | 0:6890e1214ea6 | 50 | Select(); |
MikamiUitOpen | 0:6890e1214ea6 | 51 | SendRead(myReg); |
MikamiUitOpen | 0:6890e1214ea6 | 52 | uint8_t value = SendData(0x00); |
MikamiUitOpen | 0:6890e1214ea6 | 53 | Deselect(); |
MikamiUitOpen | 0:6890e1214ea6 | 54 | return value; |
MikamiUitOpen | 0:6890e1214ea6 | 55 | } |
MikamiUitOpen | 0:6890e1214ea6 | 56 | |
MikamiUitOpen | 0:6890e1214ea6 | 57 | // Read data and translate to temperature |
MikamiUitOpen | 0:6890e1214ea6 | 58 | float ADT7310::Read() |
MikamiUitOpen | 0:6890e1214ea6 | 59 | { |
MikamiUitOpen | 0:6890e1214ea6 | 60 | while ((GetStatusReg() & 0x80) != 0x00) {} |
MikamiUitOpen | 0:6890e1214ea6 | 61 | |
MikamiUitOpen | 0:6890e1214ea6 | 62 | Select(); |
MikamiUitOpen | 0:6890e1214ea6 | 63 | SendRead(DATA); |
MikamiUitOpen | 0:6890e1214ea6 | 64 | int16_t data = SendData() << 8; |
MikamiUitOpen | 0:6890e1214ea6 | 65 | data |= SendData(); |
MikamiUitOpen | 0:6890e1214ea6 | 66 | Deselect(); |
MikamiUitOpen | 0:6890e1214ea6 | 67 | |
MikamiUitOpen | 0:6890e1214ea6 | 68 | uint8_t config = GetConfigReg() & 0x80; |
MikamiUitOpen | 0:6890e1214ea6 | 69 | SetConfigReg(0x20 | config); // Start conversion |
MikamiUitOpen | 0:6890e1214ea6 | 70 | |
MikamiUitOpen | 0:6890e1214ea6 | 71 | return data/128.0f; |
MikamiUitOpen | 0:6890e1214ea6 | 72 | } |
MikamiUitOpen | 0:6890e1214ea6 | 73 | } |