From 5031533e17ad9e3e3c9acd93d2169267225d6e52 Mon Sep 17 00:00:00 2001 From: kruger <kruger@astron.nl> Date: Wed, 5 Jul 2023 08:28:53 +0200 Subject: [PATCH] HBAT wait PPS bug fixed --- pypcc/config/RECVTR_HB.yaml | 8 ++-- pypcc/i2cserv/hba1.py | 2 +- pypcc/i2cserv/i2c_array.py | 2 +- python_scripts/CRC_HBAT1.npy | Bin 0 -> 2128 bytes python_scripts/HBATtest.py | 89 ++++++++++++++++++++++++++--------- 5 files changed, 73 insertions(+), 28 deletions(-) create mode 100644 python_scripts/CRC_HBAT1.npy diff --git a/pypcc/config/RECVTR_HB.yaml b/pypcc/config/RECVTR_HB.yaml index afc65b0..3f676c6 100644 --- a/pypcc/config/RECVTR_HB.yaml +++ b/pypcc/config/RECVTR_HB.yaml @@ -3,14 +3,14 @@ description: "1234" name: "RECVTR" drivers: - - name: I2C_reset_GPIO - type: gpio - parameters: [15] - name: I2C1 #TCA9548 type: i2c_switch devreg: [0x70,0x71,0x72,0x73] parameters: [1] #I2C port number parent: I2C_reset_GPIO + - name: I2C_reset_GPIO + type: gpio + parameters: [15] - name: I2C_RCU type: i2c_array #An array of similar devices connected to an I2C switch parent: I2C1 @@ -660,7 +660,7 @@ variables: dim: 3072 dim2: [32,96] mask: ANT_mask - wait: PPS + wait: -1 #-1 = PPS # wait: 1000 #ms - name: [RCU_IO4_GPIO1,RCU_IO4_GPIO2] diff --git a/pypcc/i2cserv/hba1.py b/pypcc/i2cserv/hba1.py index cf8a353..85ceb95 100644 --- a/pypcc/i2cserv/hba1.py +++ b/pypcc/i2cserv/hba1.py @@ -33,7 +33,7 @@ class hba1(hwdev): # print(RCUmask) #Wait for PPS if required else wait a bit self.conf['parentcls'].SetSwitchMask(RCUmask) - if var1.get('wait')=="PPS": + if var1.get('wait')==-1: #"PPS": logging.info("HBA wait PPS") channel=GPIO.wait_for_edge(self.pin,GPIO.RISING,timeout=1500) self.conf['parentcls'].i2csetget(self.addr,[self.reg]) diff --git a/pypcc/i2cserv/i2c_array.py b/pypcc/i2cserv/i2c_array.py index 92b8019..dd26f65 100644 --- a/pypcc/i2cserv/i2c_array.py +++ b/pypcc/i2cserv/i2c_array.py @@ -115,7 +115,7 @@ class i2c_array(i2c_dev): self.SetSwitch(RCUi); self.RCUi=RCUi; res=self.SetVarValue(devreg,width,bitoffset,data[i0:i1]) - if var1.get('wait',0)>0: sleep(var1['wait']/1000) + if getalso and (var1.get('wait',0)>0): sleep(var1['wait']/1000) if not(res): if self.disableI2ConError: self.I2Cmask[RCUi]+=1; if self.I2Cmask[RCUi]>self.I2Ccut: mask[RCUi*Step+Vari]=False; diff --git a/python_scripts/CRC_HBAT1.npy b/python_scripts/CRC_HBAT1.npy new file mode 100644 index 0000000000000000000000000000000000000000..c737267e6ea48a415beb618f8d8abbf5b3050a98 GIT binary patch literal 2128 zcmbR27wQ`j$;jZwP_3SlTAW;@Zl$1ZlWC!@qoAIaUsO_*m=~X4l#&V(cT3DEPSsIR zFV09TNL9B|&@eJJ)6vvXs8xUiE(Rz#cmTp^V1&?)2O%^AGlV{P7(zENL1@QA5SoDv zLLWQ^p&QsCwBvCI&A<ww4<3ck4J;7a@d$)wJOiN*@IdIsvk=;W7eX_hhtLQ3A#~$8 z2<^ZJp&3s>=mSunG@gd=9k?Mh<4Fj8fD=MDo`BE}91xm80zx0W0ihctA++O72+bf3 zp%31M&<#=$+VK{IW{`u>2k$}X26+hWcppMD$U^9YcOi6x41{*P1ECqOK<EP^5W4Xy zgmw^x(2Un1^Z{`Q-FOW`JBUGO#!C?TfDnXkybPfogdsHJMF@RB5JERzfY1&C5SqaN zLLdA9p&JY#wBttz&0q|n4}ONw4Mq^!@e_n*FoVzszd`5*a|rGD9YQmhLg<5EA#{TY zgm(M_p&9=`=mRzoy74cBcCdxejQ=6@0ecAD_zyxm*g<H<Ul96$6@+g54WS*ZAvEJp z2z|g3LO1?^&<++5nn43XAAA9!8#E!b<4Xw5pbeo9zJ|~ZS`gat6@+HcgU|=xLFfj3 z2<`YDLNn+>=!0(|bb}6rc6<Y&8J|Gt11b=@@hOCMP=(Np&mr^ybqL+~3_?4oL1@ND z5c+@;gl>Ecp&gVVG~+`EeLxXHH$H&S4hj&OApt@kTmYdP5+StXLI}-}451G$hR_X3 z5ZZAOgl0&C&<B@6=!SF%?YJC5Go(W3gG(WFLkfg;TmqpP*Ffk4IS{&WErfQ+h0u)a zA@qTK2;I02LObL^XvS3#`al+hZd?ta9kL-b<4Op9AQM72u7J=E84#MG0zx0$0ihcz zA++O82+dFpp%3nc&<#}(+Hn_zW~hVE2lqkfhI$C?xF13@)I#Wkdm(f~4TN^w1ECqW zK<EP{5V~<Igmx%}(2Uz5^nr2+-M9@xJCs3a#!V3VKoNv)+zg=|iXk-PMhJbN5JER@ zfY1&F5Sk$XLLZy}p&J4rwBtkw%@7Qs4^D>A4M7mvaT0`P2!qfEr$Ok3a0u-<9YQmN zLg<52A#_6sgm#<)p&92u=mRkjx^XUqc8G=0jPoJ%fp`erI1fTQ#6f7rSrGa_6ohV^ z4WS*PAvEJm2z?+DLO0HU&<+t0n!y7?AMAk84W1C%u@gcwcthxe-4MFL3qm_~L1+d) z2z{^*LO1wBXvcmC&EN~65B5Un1|JCR*aM*%TOjlS7YN<h3ZWfbAv9w<gg)R7p&Q#E mw1XRjW^97c2b>^uV>5(yaE8!~jS%{PBZO{jfY1&O5E=kSvh`a4 literal 0 HcmV?d00001 diff --git a/python_scripts/HBATtest.py b/python_scripts/HBATtest.py index c597ed0..2b90171 100644 --- a/python_scripts/HBATtest.py +++ b/python_scripts/HBATtest.py @@ -6,17 +6,17 @@ logFile='SetVersion' import logging import argparse -from opcuaserv import opcuaserv -from opcuaserv import i2client -from opcuaserv import yamlreader +from pypcc.opcuaserv import opcuaserv +from pypcc.opcuaserv import i2client +from pypcc.opcuaserv import yamlreader #from opcuaserv import pypcc2 -from i2cserv import i2cthread +from pypcc.i2cserv import i2cthread import threading import time import sys import signal -from yamlconfig import Find; -import yamlconfig as yc +from pypcc.yamlconfig import Find; +import pypcc.yamlconfig as yc from datetime import datetime import numpy as np @@ -68,34 +68,36 @@ if int(ID,16)==0: uCaddr=0x40 HBAaddr=0x41+SINR -i2c=conf.conf['drivers'][0]['obj'] #assume I2C is first device +i2c=conf.conf['drivers'][1]['obj'] #assume I2C is first device v=[0] if True: # print("Set Vref=0x0c"); - i2c.i2csetget(uCaddr,[0x08],reg=13,read=0) + i2c.i2csetget(uCaddr,[0x0c],reg=13,read=0) # print("Set mode=0"); i2c.i2csetget(uCaddr,[0],reg=2,read=0) # print("Set Auto readback=0"); i2c.i2csetget(uCaddr,[0],reg=5,read=0) # print("TX start high=0"); i2c.i2csetget(uCaddr,[4],reg=14,read=0) +if True: + i2c.i2csetget(uCaddr,v,reg=2,read=1) #get mode + print("Current mode=",v[0]) -i2c.i2csetget(uCaddr,v,reg=2,read=1) #get mode -print("Current mode=",v[0]) + i2c.i2csetget(uCaddr,v,reg=12,read=1) #get mode + print("Wait PPS=",v[0]) -i2c.i2csetget(uCaddr,v,reg=12,read=1) #get mode -print("Wait PPS=",v[0]) + i2c.i2csetget(uCaddr,v,reg=13,read=1) #get mode + print("Vref=",v[0]) -i2c.i2csetget(uCaddr,v,reg=13,read=1) #get mode -print("Vref=",v[0]) + i2c.i2csetget(uCaddr,v,reg=5,read=1) #get mode + print("Auto readback=",v[0]) -i2c.i2csetget(uCaddr,v,reg=5,read=1) #get mode -print("Auto readback=",v[0]) + i2c.i2csetget(uCaddr,v,reg=14,read=1) #get mode + print("TX start high=",v[0]) -i2c.i2csetget(uCaddr,v,reg=14,read=1) #get mode -print("TX start high=",v[0]) + time.sleep(0.3) #exit() CRCtab=np.load("CRC_HBAT1.npy") @@ -130,11 +132,56 @@ def RequestRegisters(HBANR,reg,length): # TX2=hb.ManchesterEncode(TX1)\n", # ser.write(bytearray(TX2))\n", # return GetPackets();" +def setreg(reg,value): + TX1=MakeRequest(HBANR,value,func=len(value)*2,reg=reg) + print(TX1) + i2c.i2csetget(HBAaddr,TX1,read=0) + +def calc_delay(val,term=False): + TTDs=[False]*5; + for x in range(5): + TTDs[x]=val//(2**(x))%2==1 + val2=0; + previous=term; +# for x in range(5,-1,-1): + for x in range(5): + val2=val2*2+1*(not(TTDs[x]==previous)) + previous=TTDs[x] + val2=val2*2+1*previous +# print(val,TTDs,val2,bin(val2)) + return val2 +REG_PWR=0x02 +REG_X=0x00 + +setreg(REG_PWR,[0xff]) +#exit() +time.sleep(0.5) + +dab=False +led=False +term=False +val1=calc_delay(15,term=term) +val2=calc_delay(15,term=term) +print("delay reg=",hex(val2)) +setreg(REG_X,[val1+dab*0x80,val2+led*0xc0]) +time.sleep(0.5) +#exit() +for x in range(100000): + print(x) + time.sleep(0.5) + if True: + i2c.i2csetget(uCaddr,[0x0c],reg=13,read=0) + i2c.i2csetget(uCaddr,[0],reg=2,read=0) + i2c.i2csetget(uCaddr,[0],reg=5,read=0) + i2c.i2csetget(uCaddr,[4],reg=14,read=0) + RequestRegisters(HBANR,0,2) +exit() + HBANRs=range(1,17) if HBANR==0 else [HBANR] for HBANR in HBANRs: RequestRegisters(HBANR,0,1) - time.sleep(0.1) - D=[0]*7 + time.sleep(0.2) + D=[0]*8 i2c.i2csetget(HBAaddr,D,read=1) D=D[2:] CRC=CRCcheck(D[:-2]) @@ -142,8 +189,6 @@ for HBANR in HBANRs: print(HBANR,"RX:",[hex(d) for d in D],',CRC error' if CRCerror else '',',wrong addr' if (HBANR+0x80!=D[0]) else '') # if CRCerror: print(' CRC=',hex(CRC & 0xff),hex(CRC//256)) # if (HBANR+0x80!=D[0]): print(' wrong address',D[0],HBANR+0x80) -# time.sleep(0.1) -#print(MakeRequest(HBANR,data #data,var1=GetVal(varSet); #version=bytearray(data).decode("utf-8",errors='ignore') -- GitLab