Skip to content

Commit 232b2bb

Browse files
authored
Add files via upload
1 parent 171b215 commit 232b2bb

File tree

3 files changed

+856
-0
lines changed

3 files changed

+856
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
from micropython import const
2+
from machine import I2C
3+
4+
5+
MCP9808_I2C_address = const(0x18)
6+
7+
MCP9808_CONFIG_REG = const(0x01)
8+
MCP9808_UPPER_TEMP_REG = const(0x02)
9+
MCP9808_LOWER_TEMP_REG = const(0x03)
10+
MCP9808_CRITICAL_TEMP_REG = const(0x04)
11+
MCP9808_AMBIENT_TEMP_REG = const(0x05)
12+
MCP9808_MANUFACTURER_ID_REG = const(0x06)
13+
MCP9808_DEVICE_ID_REG = const(0x07)
14+
MCP9808_RESOLUTION_REG = const(0x08)
15+
16+
17+
class MCP9808():
18+
19+
def __init__(self):
20+
self.i2c = I2C(2, freq = 400000)
21+
self.init()
22+
23+
24+
def write_byte(self, reg, value):
25+
if not type(value) is bytearray:
26+
value = bytearray([value])
27+
28+
self.i2c.writeto_mem(MCP9808_I2C_address, reg, value)
29+
30+
31+
def write_word(self, reg, value):
32+
value = value & 0xFFFF
33+
arr = bytearray(0x02)
34+
arr[1] = (value & 0xFF)
35+
arr[0] = ((value >> 8) & 0xFF)
36+
37+
self.i2c.writeto_mem(MCP9808_I2C_address, reg, arr)
38+
39+
40+
def read_byte(self, reg):
41+
retval = self.i2c.readfrom_mem(MCP9808_I2C_address, reg, 0x01)
42+
return retval[0x00]
43+
44+
45+
def read_word(self, reg):
46+
value = self.i2c.readfrom_mem(MCP9808_I2C_address, reg, 0x02)
47+
retval = ((value[0x00] << 0x08) | value[0x01])
48+
return retval
49+
50+
51+
def init(self):
52+
manufacturer_ID = self.read_word(MCP9808_MANUFACTURER_ID_REG)
53+
device_ID = self.read_word(MCP9808_DEVICE_ID_REG)
54+
55+
if(manufacturer_ID == 0x0054):
56+
if(device_ID == 0x400):
57+
print("MCP9808 detected.")
58+
self.write_word(MCP9808_CONFIG_REG, 0x060E)
59+
self.write_word(MCP9808_RESOLUTION_REG, 0x0003)
60+
else:
61+
print("Issue with I2C device/bus!")
62+
else:
63+
print("MCP9808 not present.")
64+
65+
66+
def read_T_and_status(self):
67+
t = self.read_word(MCP9808_AMBIENT_TEMP_REG)
68+
status = ((t & 0xE000) >> 13)
69+
70+
hb = ((t & 0x0F00) >> 8)
71+
lb = (t & 0x00FF)
72+
tmp = ((hb * 16.0) + (lb / 16.0))
73+
74+
if(t & 0x1000):
75+
tmp = (256 - tmp)
76+
77+
return tmp, status
78+
79+
80+
def read_set_point(self, reg):
81+
ts = self.read_word(reg)
82+
83+
if(ts != 0xFFFF):
84+
tmp = (ts & 0x0FFC)
85+
tmp >>= 2
86+
87+
if(ts & 0x1000):
88+
tmp = (tmp - 1024)
89+
90+
tmp *= 0.25
91+
92+
return tmp
93+
94+
95+
def read_T_upper(self):
96+
return self.read_set_point(MCP9808_UPPER_TEMP_REG)
97+
98+
99+
def read_T_lower(self):
100+
return self.read_set_point(MCP9808_LOWER_TEMP_REG)
101+
102+
103+
def read_T_critical(self):
104+
return self.read_set_point(MCP9808_CRITICAL_TEMP_REG)
105+
106+
107+
def write_set_point(self, reg, value):
108+
regval = int(16.0 * value)
109+
110+
if(value < 0):
111+
regval |= 0x1000
112+
113+
self.write_word(reg, regval)
114+
115+
116+
def set_T_upper(self, value):
117+
self.write_set_point(MCP9808_UPPER_TEMP_REG, value)
118+
119+
120+
def set_T_lower(self, value):
121+
self.write_set_point(MCP9808_LOWER_TEMP_REG, value)
122+
123+
124+
def set_T_critical(self, value):
125+
self.write_set_point(MCP9808_CRITICAL_TEMP_REG, value)
126+
127+
128+
129+
130+

0 commit comments

Comments
 (0)