- make class of it

git-svn-id: http://moon:8086/svn/projects/HendiControl@189 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
2019-03-31 06:20:52 +00:00
parent ab8dbe2701
commit ea562735e2
+37 -25
View File
@@ -1,40 +1,51 @@
#!/usr/bin/python #!/usr/bin/python
import spidev import spidev
import time
import os
class Max31865():
def __init__(self):
# Open SPI bus # Open SPI bus
spi = spidev.SpiDev() self.spi = spidev.SpiDev()
spi.open(0,0) self.spi.open(0, 0)
spi.max_speed_hz=100000 self.spi.max_speed_hz = 100000
spi.mode = 0b01 self.spi.mode = 0b01
self.write_reg(0x00, 0xA3)
def read_reg(addr): def read_reg(self, addr):
reg = spi.xfer([addr, 0xFF]); reg = self.spi.xfer([addr, 0xFF])
return reg[1] return reg[1]
def write_reg(addr, data): def write_reg(self, addr, data):
spi.xfer([addr+0x80, data]); self.spi.xfer([addr+0x80, data])
def read_digits(): def read_digits(self):
msb = read_reg(0x01) msb = self.read_reg(0x01)
lsb = read_reg(0x02) lsb = self.read_reg(0x02)
digits = float(256*msb + lsb)/2 digits = float(256*msb + lsb)/2
return digits return digits
def getTemperature(self):
digits = self.read_digits()
R = max31865.calc_R(430, digits)
T = max31865.vanDusen_temp(R)
print("R={:.3f} Ohm, T={:.2f} degC".format(R, T))
return T
@staticmethod
def calc_R(Rref, digits): def calc_R(Rref, digits):
k = digits / 8192 / 4 k = digits / 8192 / 4
R = k*Rref R = k*Rref
return R return R
@staticmethod
def vanDusenLut (R0, Tmin, Tmax, dT): def vanDusenLut (R0, Tmin, Tmax, dT):
a = +3.90830e-03; a = +3.90830e-03
b = -5.77500e-07; b = -5.77500e-07
c = -4.18301e-12; c = -4.18301e-12
Rv = [] Rv = []
Tv = [] Tv = []
@@ -43,7 +54,7 @@ def vanDusenLut (R0, Tmin, Tmax, dT):
R = R0*(1 + a*T + b*T**2) R = R0*(1 + a*T + b*T**2)
if T < 0.0: if T < 0.0:
R += R0*c*(T - 100)*T**3; R += R0*c*(T - 100)*T**3
Rv.append(R) Rv.append(R)
Tv.append(T) Tv.append(T)
@@ -51,8 +62,9 @@ def vanDusenLut (R0, Tmin, Tmax, dT):
return Rv, Tv return Rv, Tv
@staticmethod
def vanDusen_temp(Rmeas): def vanDusen_temp(Rmeas):
RLut, TLut = vanDusenLut(100, -150, +500, 1.0) RLut, TLut = Max31865.vanDusenLut(100, -150, +500, 1.0)
# Find candidate # Find candidate
i = 0 i = 0
@@ -75,15 +87,15 @@ def vanDusen_temp(Rmeas):
return T return T
# Main
write_reg(0x00, 0xA3)
digits = read_digits()
R = calc_R(430, digits)
T = vanDusen_temp(R)
print("R={:.3f} Ohm, T={:.2f} degC".format(R, T))
# Main
if __name__ == '__main__':
max31865 = Max31865()
for i in range (0, 8): for i in range (0, 8):
print("Reg[0x{}]: 0x{:02X}".format(i, read_reg(i))) print("Reg[0x{}]: 0x{:02X}".format(i, max31865.read_reg(i)))
max31865.getTemperature()
print("End of program") print("End of program")