Skip to content
Snippets Groups Projects
Commit 7cd008d2 authored by Gijs Schoonderbeek's avatar Gijs Schoonderbeek
Browse files

Working version for checking L2TS boards

parent 7ca7abef
No related branches found
No related tags found
1 merge request!6Apsct ad9511
......@@ -19,6 +19,7 @@ import APSCT_I2C
import time
import RPi.GPIO as gpio
import random
import numpy as np
sys.path.insert(0, '.')
import os
if os.name == "posix":
......@@ -246,6 +247,7 @@ class PllClass:
divider_a = 1
divider_p = 1
divider_b = int((int(self.frequency[:-3]) * divider_r) / (10 * divider_p))
if DEBUG:
print(f"Divider P : {divider_p}, Divider A : {divider_a}, Divider B : {divider_b}")
charge_pump_current = 3 # 0 is low (0.6 mA), 7 is high (4.8 mA)
if self.frequency == '160MHz':
......@@ -424,6 +426,33 @@ class ApsctSensors:
self.read_temp()
return True
def read_all_avg_voltages(self, avg_nr = 6):
#
# Function to read and process one sensline
#
# Return True when done
#
# To remove errors, repeat measurement when returned voltage is < 3 V
#
self.read_all_voltages()
sum_values= {"INPUT": [],
"PLL_160M": [],
"PLL_200M": [],
"DIST_A": [],
"DIST_B": [],
"DIST_C": [],
"DIST_D": [],
"CTRL": []}
for cnt in range(avg_nr):
self.read_all_voltages()
for pwr in self.power_supplies:
sum_values[pwr].append( self.voltages[pwr])
for pwr in self.power_supplies:
median_value = np.median(sum_values[pwr])
if DEBUG:
print(f"Power {pwr} last value {self.voltages[pwr]:.2f} V median {median_value:.2f} V" )
self.voltages[pwr] = median_value
def read_all_voltages(self):
#
# Function to read and process one sensline
......@@ -446,11 +475,11 @@ class ApsctSensors:
#
print("Check power sensor values")
result = True
self.read_all_voltages()
self.read_all_avg_voltages()
self.read_temp()
for pwr in self.power_supplies:
expected = APSCT_I2C.PWR_VOUT[pwr]
if not (0.9*expected < self.voltages[pwr] < 1.1*expected):
if not (0.8*expected < self.voltages[pwr] < 1.2*expected):
result = False
print(f"Error: {pwr: <9} expected: {expected} V read: {self.voltages[pwr]:4.2f} V")
else:
......@@ -476,8 +505,9 @@ class ApsctSensors:
if DEBUG:
stri = "Word to select sens input is 0x{0:x}".format(channel_select_word)
print(stri)
self.dev_i2c_sensor.write_bytes(channel_select_word, 0xB8)
sleep(0.3) # Wait for device to take snapshot
# self.dev_i2c_sensor.write_bytes(channel_select_word, 0xB8)
self.dev_i2c_sensor.write_bytes(channel_select_word, 0x80)
sleep(0.2) # Wait for device to take snapshot
ret_ack, ret_value = self.dev_i2c_sensor.read_last_reg(3)
if DEBUG:
stri = "Return value input 0 : 0x{0} ".format(ret_value)
......@@ -485,7 +515,7 @@ class ApsctSensors:
if int(ret_value, 16) >= 0xC00000:
print("over range")
else:
steps = (int(ret_value, 16) & 0x1FFFFF) >> 6
steps = (int(ret_value, 16) & 0x1FFFFF) / 2**6
voltage = one_step * steps
voltage = ((4.7+2.2)/2.2)*2*voltage # Resistor network + half swing
if DEBUG:
......@@ -652,8 +682,8 @@ def main():
if False:
apsct.power(False)
sleep(1)
# apsct.power(True)
# sleep(1)
apsct.power(True)
sleep(1)
if False:
apsct.pll_200.write_byte_pll(0x06, 0xA5)
apsct.pll_200.write_byte_pll(0x5A, 0x01)
......@@ -661,7 +691,7 @@ def main():
apsct.pll_200.read_lol()
apsct.pll_200.read_lock()
# apsct.pll_200.read_all_regs_pll()
# apsct.sensors.read_all_voltages()
apsct.sensors.check_values()
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