Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
Software
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Dmytro Levit
Software
Commits
0ca02e5d
Commit
0ca02e5d
authored
4 years ago
by
Patrick Robbe
Browse files
Options
Downloads
Patches
Plain Diff
Add script to monitor temperature of the PCIe40 board
parent
c6bd8ba5
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
Python/components/ltc2990_comp.py
+294
-0
294 additions, 0 deletions
Python/components/ltc2990_comp.py
with
294 additions
and
0 deletions
Python/components/ltc2990_comp.py
0 → 100644
+
294
−
0
View file @
0ca02e5d
#!/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
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment