Compare commits

...

2 commits

Author SHA1 Message Date
Stephan I. Böttcher
a8c60193c6 NMAHEPM: new bitfile 2025-06-02 22:39:48 +02:00
Stephan I. Böttcher
f399dcd2ad nmahemap: hk
HDORN data line parser
option --ahbgo
2025-06-02 22:38:20 +02:00
3 changed files with 68 additions and 55 deletions

114
dorn.py
View file

@ -20,7 +20,7 @@ def HK_fmt(s, i, n, d):
def HK3_fmt(s, i, n, d): def HK3_fmt(s, i, n, d):
return f"""{i}. {n} return f"""{i}. {n}
T = {d[5]:6.2f} °C" Ibias = {d[0]:6.3f} V, T = {d[5]:6.2f} °C" GND = {d[0]:6.3f} V,
Vff = {d[1]:6.3f} V, Vnn = {d[2]:6.3f} V, Vpp = {d[3]:6.3f} V, Vdig = {d[4]:6.3f} V, Vff = {d[1]:6.3f} V, Vnn = {d[2]:6.3f} V, Vpp = {d[3]:6.3f} V, Vdig = {d[4]:6.3f} V,
Vcc = {d[6]:6.3f} V, Vss = {d[7]:6.3f} V. Vcc = {d[6]:6.3f} V, Vss = {d[7]:6.3f} V.
""" """
@ -69,7 +69,7 @@ class DORN_CONFIG:
) )
HK3 = [[ HK3 = [[
("Ibias", 10470/470 * 51/1051 * 100), ("GND",),
("Vff", 2.0), ("Vff", 2.0),
("Vnn", 2.5, ("Vpp", -1.5)), ("Vnn", 2.5, ("Vpp", -1.5)),
("Vpp", 2.0), ("Vpp", 2.0),
@ -79,16 +79,36 @@ class DORN_CONFIG:
("Vss", 2.5, ("Vcc", -1.5)), ("Vss", 2.5, ("Vcc", -1.5)),
]] ]]
HK4_AHBGO = [[ HK = [
("Tbgo₁", (degC, {})), ("INP₀", None, HK_fmt),
("Tbgo₂", (degC, {})), ("INP₁", None, HK_fmt),
("Vbias", -1/0.047), ("INP₂", None, HK_fmt),
("Tbgo₃", (degC, {})), ("HK ADC", HK3, HK3_fmt),
("Ibias₁", 10470/470 * 51/1051 * 100), ("HK PA", None, HK_fmt),
("Ibias₂", 10470/470 * 51/1051 * 100), ("VrefL", None, HK_fmt),
("Vss", 2.5, ("Vcc", -1.5)), ("VrefH", None, HK_fmt),
("Vcc", 2.0), ("HK_PWR", None, HK_fmt),
]] ]
def n_adc(self):
return self.n_channels//3
def Vref(self, slice=None):
try:
return self.VREF[slice]
except:
pass
return 3.3
def n_trigs(self):
if self.n_channels > 16:
return self.n_adc()
return self.n_channels
def m_trigs(self):
return (1 << self.n_trigs()) - 1
NTC = [dict(R1=10e3, R25=10e3, B25=3940, res=0x1000)]
HK4_SETH = [ HK4_SETH = [
[ [
@ -115,20 +135,14 @@ class DORN_CONFIG:
HK7_SETH = [ HK7_SETH = [
[ [
("na₁",), ("na₁",), ("na₂",), ("na₃",), ("na₄",),
("na₂",),
("na₃",),
("na₄",),
("Iprim", 2000.0), ("Iprim", 2000.0),
("Vprim", 16.3), ("Vprim", 16.3),
("Tpwr", (degC, {})), ("Tpwr", (degC, {})),
("Ibias⁺", 100.0), ("Ibias⁺", 100.0),
], ],
[ [
("na₁",), ("na₁",), ("na₂",), ("na₃",), ("na₄",),
("na₂",),
("na₃",),
("na₄",),
("Ibias", 100.0), ("Ibias", 100.0),
("Vbias⁺", 100.0), ("Vbias⁺", 100.0),
("Text", (degC, {})), ("Text", (degC, {})),
@ -136,42 +150,26 @@ class DORN_CONFIG:
], ],
] ]
HK = [
("INP₀", None, HK_fmt),
("INP₁", None, HK_fmt),
("INP₂", None, HK_fmt),
("HK ADC", HK3, HK3_fmt),
("HK PA", HK4_AHBGO, HK4_AHBGO_fmt),
("VrefL", None, HK_fmt),
("VrefH", None, HK_fmt),
("HK_PWR", None, HK_fmt),
]
def n_adc(self):
return self.n_channels//3
def Vref(self, slice=None):
try:
return self.VREF[slice]
except:
pass
return 3.3
def n_trigs(self):
if self.n_channels > 16:
return self.n_adc()
return self.n_channels
def m_trigs(self):
return (1 << self.n_trigs()) - 1
NTC = [dict(R1=10e3, R25=10e3, B25=3940, res=0x1000)]
def seth(self): def seth(self):
# ! change the class attribute # ! change the class attribute .HK
self.HK[4] = ("HK PA", self.HK4_SETH, HK4_SETH_fmt) self.HK[4] = ("HK PA", self.HK4_SETH, HK4_SETH_fmt)
self.HK[7] = ("HK_PWR", self.HK7_SETH, HK7_SETH_fmt) self.HK[7] = ("HK_PWR", self.HK7_SETH, HK7_SETH_fmt)
HK4_AHBGO = [[
("Tbgo₁", (degC, {})),
("Tbgo₂", (degC, {})),
("Vbias", -1/0.047),
("Tbgo₃", (degC, {})),
("Ibias₁", 10470/470 * 51/1051 * 100),
("Ibias₂", 10470/470 * 51/1051 * 100),
("Vss", 2.5, ("Vcc", -1.5)),
("Vcc", 2.0),
]]
def ahbgo(self):
# ! change the class attribute .HK
self.HK[4] = ("HK PA", self.HK4_AHBGO, HK4_AHBGO_fmt)
CONFIG = DORN_CONFIG() CONFIG = DORN_CONFIG()
def hk(sl, what="print", data=None): def hk(sl, what="print", data=None):
@ -186,6 +184,18 @@ def hk(sl, what="print", data=None):
data=_ifc.read_fifo() data=_ifc.read_fifo()
if data[0] != 0x5710 + sl: if data[0] != 0x5710 + sl:
raise ValueError("Read HK packet error", data) raise ValueError("Read HK packet error", data)
if isinstance(data, str):
# HDORN … data line
if "x" in data:
return
data = data.split()
if data[0] != "HDORN":
return
data = list(map(int, data[1:]))
if sl is None:
sl = data[0] & 3;
if data[0] & 3 != sl:
return None
if what=="data": if what=="data":
return data return data
ND = CONFIG.n_adc() ND = CONFIG.n_adc()

Binary file not shown.

View file

@ -49,11 +49,14 @@ def aenable(sl=None, hk=True, ev=True, **aa):
if __name__=="__main__": if __name__=="__main__":
ifc,_oo = armlib.init_irena(scope = globals(), name = "AHEPAM", prod = (0xee0c,), ifc,_oo = armlib.init_irena(scope = globals(), name = "AHEPAM", prod = (0xee0c,),
long_options=["seth"]) long_options=["seth", "ahbgo"])
for o,v in _oo[0]: for o,v in _oo[0]:
if o=="--seth": if o=="--seth":
dorn.CONFIG.seth() dorn.CONFIG.seth()
armlib.set_prompt("SETH") armlib.set_prompt("SETH")
if o=="--ahbgo":
dorn.CONFIG.ahbgo()
armlib.set_prompt("AHBGO")
ifc._stream_fifos = 'hk1/f1/f2/f3' ifc._stream_fifos = 'hk1/f1/f2/f3'
if ifc.is_a("USB"): if ifc.is_a("USB"):
findnmahepam() findnmahepam()