rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
ads1015.cpp
Go to the documentation of this file.
1/**
2 * I2C ADC chip
3 *
4 * never has been used in PROD? kill it?
5 *
6 */
7
8#include "pch.h"
9
10#if 0
11
12#include "ads1015.h"
13
14constexpr uint8_t addr = 0x48;
15
16#define ADS1015_CONV (0)
17#define ADS1015_CONFIG (1)
18#define ADS1015_LO_THRESH (2)
19#define ADS1015_HI_THRESH (3)
20
22 if (!m_i2c.init(scl, sda)) {
23 return false;
24 }
25
26 // ADS1015 has no ID register - so we read the Lo_thresh instead
27 uint16_t loThresh = readReg(ADS1015_LO_THRESH);
28
29 if (loThresh != 0x8000) {
30 return false;
31 }
32
33 m_hasInit = true;
34 return true;
35}
36
37void Ads1015::readChannels(float (&result)[4]) {
38 for (size_t i = 0; i < 4; i++) {
39 result[i] = readChannel(i);
40 }
41}
42
44 // set the channel
45 // set to +-6.144v full scale, fastest sampling, manual conversion start
46 writeReg(ADS1015_CONFIG, 0xC1E0 | channel << 12);
47
48 // Wait for conversion to complete
49 // Bit is cleared while conversion is ongoing, set when done
50 while ((readReg(ADS1015_CONFIG) & 0x8000) == 0) ;
51
52 // Read the result
53 int16_t result = readReg(ADS1015_CONV);
54 // Result is 12 bits left aligned, so right align the result
55 result = result >> 4;
56
57 // 2048 counts = positive 6.144 volts
58 constexpr float ratio = 6.144f / 2048;
59 return result * ratio;
60}
61
62void Ads1015::writeReg(uint8_t reg, uint16_t data) {
63 uint8_t packet[3];
64
65 packet[0] = reg;
66 packet[1] = data >> 8;
67 packet[2] = data & 0xFF;
68
69 m_i2c.write(addr, packet, 3);
70}
71
72uint16_t Ads1015::readReg(uint8_t reg) {
73 uint16_t res;
74 m_i2c.write(addr, &reg, 1);
75 m_i2c.read(addr, reinterpret_cast<uint8_t*>(&res), 2);
76 return SWAP_UINT16(res);
77}
78
79#endif // 0
uint16_t channel
Definition adc_inputs.h:104
constexpr uint8_t addr
Definition ads1015.cpp:14
void readChannels(float(&result)[4])
Definition ads1015.cpp:37
BitbangI2c m_i2c
Definition ads1015.h:17
uint16_t readReg(uint8_t reg)
Definition ads1015.cpp:72
float readChannel(uint8_t ch)
Definition ads1015.cpp:43
void writeReg(uint8_t reg, uint16_t data)
Definition ads1015.cpp:62
bool m_hasInit
Definition ads1015.h:16
bool init(brain_pin_e scl, brain_pin_e sda)
Definition ads1015.cpp:21
void read(uint8_t addr, uint8_t *data, size_t size)
Definition i2c_bb.cpp:210
void write(uint8_t addr, const uint8_t *data, size_t size)
Definition i2c_bb.cpp:190
bool init(brain_pin_e scl, brain_pin_e sda)
Definition i2c_bb.cpp:37
uint16_t SWAP_UINT16(uint16_t x)
Definition efilib.h:22