Skip to content
Snippets Groups Projects
Commit 0ca02e5d authored by Patrick Robbe's avatar Patrick Robbe
Browse files

Add script to monitor temperature of the PCIe40 board

parent c6bd8ba5
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
# ################ltc2990_comp.py#############################################
# 08/11/2017:LTC 2990
# This code is running on board V2/FC0
# ###############################################################################
"""
Management of LTC2990 sensors
"""
import sys
from lli import ltc2990
from time import sleep
# bus is number of i2c bus, add is the adress of i2c device on the current bus
# all along this file, bus and add are identical
# we assume that bus is 1 and add is 0x4E
# @LTC2990n°1=0x4E=U13 : Config TR1-TR2 2 Temperatures + local temperature
# @LTC2990n°2=0x4D=U49 : Config Differential et Single Ended voltage mesures IPEX
# @LTC2990n°3=0x4F=U14 : Config TR1-TR2 2 Temperatures + local temperature
# @LTC2990n°4=0x4C=U192 : Config TR1-TR2 Temperatures remote/Heater + local temperature
class Ltc2990(object):
""" Class to manage LTC2990 type of temperature/tension/current sensors
"""
def __init__(self, dev, bus, add):
self.dev = dev
self.bus = bus
self.add = add
# def Config2TR():
# 1) Configuration du circuit pour 2 sondes de températures differentielles,
# mode repeat, temperature en Celsius
# CONTROL_REGISTER= 0x1D = 0001 1101, c'est à dire:
# Mode[2:0] = 101 = TR1,TR2
# Mode[4:3] = 11 = All Measurements per Mode[2:0], lectures de registres
# fixees sur TR1,TR2
# Temperature Format = 0 = Temperature reported in Celsius
# Repeat/Single = 0 = Repeat Acquisition
# 2) Déclenchement du trigger : on met nimporte quelle valeur dans TRIGGER_REGISTER,
# par exemple 0x7F, je dis 0x7F car
# apparement le bit 7 du TRIGGER_REGISTER reste toujours à 0,
# donc la relecture est erronee...
# 3) 13/01/2015 : on met une tempo car lorsque l'on change de mode,
# car on a observé que l'on doit attendre
# un certain temps (au sens etymologique de fernand raynaud...) pour basculer
# def config2_differential_temperatures(self):
def config2_differential_temps(self):
"""Configure the chip with 2 temperature sensors in modes:
differencial, repeat and celsius degrees
"""
return ltc2990.config2_differential_temps(self.dev, self.bus, self.add)
# def Config2VoltDif():
# 1) Configuration du circuit pour lire 2 tensions différentielles,
# mode repeat, temperature en Celsius
# CONTROL_REGISTER= 0x1E = 0001 1110, c'est à dire:
# Mode[2:0] = 101 = lecture de V1-V2, V3-V4
# Mode[4:3] = 11 = All Measurements per Mode[2:0],
# lectures de registres fixees sur V1-V2, V3-V4
# Temperature Format = 0 = Temperature reported in Celsius
# Repeat/Single = 0 = Repeat Acquisition
# 2) Déclenchement du trigger : on met nimporte quelle valeur dans TRIGGER_REGISTER,
# par exemple 0x7F, je dis 0x7F car
# apparement le bit 7 du TRIGGER_REGISTER reste toujours à 0, donc la relecture est erronee...
# 3) 13/01/2015 : on met une tempo car lorsque l'on change de mode,
# car on a observé que l'on doit attendre
# un certain temps (au sens etymologique de fernand raynaud...) pour basculer
def config2_differential_tensions(self):
"""Configure the chip with 2 tensions sensors in modes: differencial,
repeat and celsius degrees
"""
return ltc2990.config2_differential_tensions(self.dev, self.bus, self.add)
# def Config4VoltSingleEnded():
# 1) Configuration du circuit pour lire 4 tensions :
# single ended, mode repeat, température en Celsius
# CONTROL_REGISTER= 0x1F = 0001 1111, c'est à dire:
# Mode[2:0] = 111 = lecture de V1,V2,V3,V4
# Mode[4:3] = 11 = All Measurements per Mode[2:0],
# lectures de registres fixées sur V1,V2, V3,V4
# Temperature Format = 0 = Temperature reported in Celsius
# Repeat/Single = 0 = Repeat Acquisition
# Rq: il est important de sélectionner également l'unité du Celsius pour la température
# car même dans cette configuration, on lit la temperature interne du circuit.
# 2) Déclenchement du trigger : on met nimporte quelle valeur dans TRIGGER_REGISTER,
# par exemple 0x7F
# (je dis 0x7F car apparement le bit 7 du TRIGGER_REGISTER reste toujours à 0, donc
# la relecture est erronée...)
# 3) 13/01/2015 : on met une tempo car lorsque l'on change de mode,
# car on a observé que l'on doit attendre
# un certain temps (au sens etymologique de fernand raynaud...) pour basculer
def config4_tensions_single_ended(self):
"""Configure the chip with 4 tension sensors in modes:
single ended, repeat and celsius degrees
"""
return ltc2990.config4_tensions_single_ended(self.dev, self.bus, self.add)
# def ReadLocalTemperature():
# on commence par lire le TINTMSB_REGISTER et on regarde si le bit 7 (data valid DV) est a 1
# sinon on recommence la lecture.
# On pratique un masque sread_local_tempeur TINTMSB_REGISTER pour n'extraire que les bits D8-D12
# On lit TINTLSB_REGISTER puis on reconstitue le mot de 16 bits en concatenant les 2 registres
# Puis on applique le complement a 2 et le facteur multiplicatif pour les temperatures
def read_local_temperature(self):
"""Read the local temperature
"""
return ltc2990.read_local_temperature(self.dev, self.bus, self.add)
# def ReadTR1():
# on commence par lire le V1MSB_REGISTER et on regarde si le bit 7 (data valid DV) est a 1
# sinon on recommence la lecture.
# On pratique un masque sur V1MSB_REGISTER pour n'extraire que les bits D8-D12
# On lit V1LSB_REGISTER puis on reconstitue le mot de 16 bits en concatenant les 2 registres
# Puis on applique le complement a 2 et le facteur multiplicatif pour les temperatures
def read_v1_temperature(self):
"""Read v1 temperature
"""
return ltc2990.read_v1_temperature(self.dev, self.bus, self.add)
# def ReadTR2():
# on commence par lire le V3MSB_REGISTER et on regarde si le bit 7 (data valid DV) est a 1
# sinon on recommence la lecture.
# On pratique un masque sur V3MSB_REGISTER pour n'extraire que les bits D8-D12
# On lit V3LSB_REGISTER puis on reconstitue le mot de 16 bits en concatenant les 2 registres
# Puis on applique le complement a 2 et le facteur multiplicatif pour les temperatures
def read_v3_temperature(self):
"""Read v3 temperature
"""
return ltc2990.read_v3_temperature(self.dev, self.bus, self.add)
# def ReadV1():
# On commence par lire le V1MSB_REGISTER et on regarde si le bit 7 (data valid DV) est a 1
# sinon on recommence la lecture (on limite par un timeout...).
# On pratique un masque sur V1MSB_REGISTER pour n'extraire que les bits D8-D13 et D14 (signe)
# On lit V1LSB_REGISTER puis on reconstitue le mot de 16 bits en concatenant les 2 registres
# Puis on applique le complement a 2 (sur 15 bit) et le facteur multiplicatif pour les
# tensions en single ended
def read_v1_tension(self):
"""Read v1 tension single ended
"""
return ltc2990.read_v1_tension(self.dev, self.bus, self.add)
# def ReadV2():
# On commence par lire le V2MSB_REGISTER et on regarde si le bit 7 (data valid DV) est a 1
# sinon on recommence la lecture (on limite par un timeout...).
# On pratique un masque sur V2MSB_REGISTER pour n'extraire que les bits D8-D13 et D14 (signe)
# On lit V2LSB_REGISTER puis on reconstitue le mot de 16 bits en concatenant les 2 registres
# Puis on applique le complement a 2 (sur 15 bit) et le facteur multiplicatif pour les
# tensions en single ended
def read_v2_tension(self):
"""Read v2 tension single ended
"""
return ltc2990.read_v2_tension(self.dev, self.bus, self.add)
# def ReadV3():
# On commence par lire le V3MSB_REGISTER et on regarde si le bit 7 (data valid DV) est a 1
# sinon on recommence la lecture (on limite par un timeout...).
# On pratique un masque sur V3MSB_REGISTER pour n'extraire que les bits D8-D13 et D14 (signe)
# On lit V3LSB_REGISTER puis on reconstitue le mot de 16 bits en concatenant les 2 registres
# Puis on applique le complement a 2 (sur 15 bit) et le facteur multiplicatif pour les
# tensions en single ended
def read_v3_tension(self):
"""Read v3 tension single ended
"""
return ltc2990.read_v3_tension(self.dev, self.bus, self.add)
# def ReadV4():
# On commence par lire le V4MSB_REGISTER et on regarde si le bit 7 (data valid DV) est a 1
# sinon on recommence la lecture (on limite par un timeout...).
# On pratique un masque sur V4MSB_REGISTER pour n'extraire que les bits D8-D13 et D14 (signe)
# On lit V4LSB_REGISTER puis on reconstitue le mot de 16 bits en concatenant les 2 registres
# Puis on applique le complement a 2 (sur 15 bit) et le facteur multiplicatif pour les
# tensions en single ended
def read_v4_tension(self):
"""Read v4 tension single ended
"""
return ltc2990.read_v4_tension(self.dev, self.bus, self.add)
# def ReadIPEX09V():
# on assume ici le fait qu'a l'entree de cette fonction, on est en mode lecture de tension
# en differentiel
# Il faut dabord lire en differentiel V1-V2
# On commence par lire le V1minV2MSB_REGISTER et on regarde si le bit 7 (data valid DV) est a 1
# sinon on recommence la lecture (on limite par un timeout...).
# On pratique un masque sur V1minV2MSB_REGISTER pour n'extraire que les bits D8-D13 et D14 (signe)
# On lit V1minV2LSB_REGISTER puis on reconstitue le mot de 16 bits en concatenant les 2 registres
# Puis on applique le complement a 2 (sur 15 bit) et le facteur multiplicatif pour les
# tensions en differentiel
# On divise ensuite par la valeur de la resistance de shunt (supposee egale a 0.003 ohm) pour avoir
# la valeur du courant IPEX09V
# def ReadIPEX09V(self):
#return ltc2990.ReadIPEX09V(self.dev, self.bus, self.add)
# def ReadIPEX09VDDA():
# on assume ici le fait qu'a l'entree de cette fonction, on est en mode lecture de tension
# en differentiel
# Il faut dabord lire en differentiel V3-V4
# On commence par lire le V3minV4MSB_REGISTER et on regarde si le bit 7 (data valid DV) est a 1
# sinon on recommence la lecture (on limite par un timeout...).
# On pratique un masque sur V3minV4MSB_REGISTER pour n'extraire que les bits D8-D13 et D14 (signe)
# On lit V3minV4LSB_REGISTER puis on reconstitue le mot de 16 bits en concatenant les 2 registres
# Puis on applique le complement a 2 (sur 15 bit) et le facteur multiplicatif pour les
# tensions en differentiel
# On divise ensuite par la valeur de la resistance de shunt (supposee egale a 0.003 ohm) pour avoir
# la valeur du courant IPEX09VDDA
# def ReadIPEX09VDDA(self):
#return ltc2990.ReadIPEX09VDDA(self.dev, self.bus, self.add)
def do_test_ES3():
print "@LTC2990n°1=0x4E=U13"
myltc1 = Ltc2990(0, 1, 0x4E)
print myltc1.read_local_temperature()
print myltc1.config2_differential_temps()
print myltc1.read_v1_temperature()
print myltc1.read_v3_temperature()
print "@LTC2990n°3=0x4F=U14"
myltc3 = Ltc2990(0, 1, 0x4F)
print myltc3.read_local_temperature()
print myltc3.config2_differential_temps()
print myltc3.read_v1_temperature()
print myltc3.read_v3_temperature()
print "@LTC2990n°4=0x4C=U192"
myltc4 = Ltc2990(0, 1, 0x4C)
print myltc4.read_local_temperature()
print myltc4.config2_differential_temps()
print myltc4.read_v1_temperature()
print myltc4.read_v3_temperature()
print "@LTC2990n°2=0x4D=U49"
myltc2 = Ltc2990(0, 1, 0x4D)
print myltc2.config4_tensions_single_ended()
print myltc2.read_local_temperature()
print myltc2.read_v1_tension()
print myltc2.read_v2_tension()
print myltc2.read_v3_tension()
print myltc2.read_v4_tension()
def do_test_V2():
"""
ATTENTION: config should be the first call for the measures to work
"""
import addresses_comp as add
"""
print "@LTC2990n°1=0x4E=U13"
myltc1 = Ltc2990(0, add.LTC2990_BUS, add.LTC2990_U13_ADD)
print myltc1.config2_differential_temps()
print myltc1.read_local_temperature()
print myltc1.read_v1_temperature()
print myltc1.read_v3_temperature()
print "@LTC2990n°3=0x4F=U14"
myltc3 = Ltc2990(0, add.LTC2990_BUS, add.LTC2990_U14_ADD)
print myltc3.config2_differential_temps()
print myltc3.read_local_temperature()
print myltc3.read_v1_temperature()
print myltc3.read_v3_temperature()
print "@LTC2990n°4=0x4C=U192"
myltc4 = Ltc2990(0, add.LTC2990_BUS, add.LTC2990_U192_ADD)
print myltc4.config2_differential_temps()
print myltc4.read_local_temperature()
print myltc4.read_v1_temperature()
print myltc4.read_v3_temperature() """
myltcmez1 = Ltc2990(0, add.LTC2990_PWR_BUS, add.LTC2990_U22_ADD)
myltcmez2 = Ltc2990(0, add.LTC2990_PWR_BUS, add.LTC2990_U37_ADD)
print "{0} | {1:4.1f} | {2:4.1f} | {3:4.1f} | {4} | {5:4.1f} | {6:4.1f} | {7:4.1f}".format( myltcmez1.config2_differential_temps(),
myltcmez1.read_local_temperature(),
myltcmez1.read_v1_temperature(),
myltcmez1.read_v3_temperature(),
myltcmez2.config2_differential_temps(),
myltcmez2.read_local_temperature(),
myltcmez2.read_v1_temperature(),
myltcmez2.read_v3_temperature() )
def main():
if (len(sys.argv) > 1):
if (sys.argv[1] == "dev"):
# do_test_ES3()
while( True ):
do_test_V2()
sleep( 1 )
else:
print "for pytest"
if __name__ == "__main__":
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment