diff --git a/i2c/I2C.py.old b/i2c/I2C.py.old new file mode 100644 index 0000000000000000000000000000000000000000..1982b43c9c0e13bf33d61d4bf48e8c2b940b5d06 --- /dev/null +++ b/i2c/I2C.py.old @@ -0,0 +1,70 @@ +import pylibi2c; +import time +import logging +#bus = pylibi2c.I2CDevice('/dev/i2c-1' +#read=0: write to register +#read=1: read from register +#read=2: write to register (common in group) +#read=3: wait ms second +I2Ccounter=0; + +def I2C1server(addr,data,reg=None,read=0): +# print("I2C",addr,reg,data,read) + try: + if read==3: + time.sleep(data[0]/1000.) + return True + logging.debug(str(("I2C",addr,reg,data,read))) + +# return True; + bus=pylibi2c.I2CDevice('/dev/i2c-1',addr) + if read==1: + length=len(data) + bus.iaddr_bytes=0 + if not(reg is None): + bus.ioctl_write(0,str(bytearray([reg]))) + data[:]=[int(x) for x in bus.ioctl_read(0,length)] +# print("I2C read",addr,reg,data,read) + else: + if reg is None: + bus.iaddr_bytes=0 + reg=0; + bus.ioctl_write(reg,str(bytearray(data))) + bus.close() + return True; + except: + if bus: bus.close() +# data[0]=0xff + return False; + +def I2C4server(addr,data,reg=None,read=0): +# print("I2C4",addr,reg,data,read) + try: + if read==3: + time.sleep(data[0]/1000.) + return True + logging.debug(str(("I2C",addr,reg,data,read))) + +# print("I2C",addr,reg,data,read) +# return True; + bus=pylibi2c.I2CDevice('/dev/i2c-4',addr) + if read==1: + length=len(data) + bus.iaddr_bytes=0 + if not(reg is None): + bus.ioctl_write(0,str(bytearray([reg]))) + data[:]=[int(x) for x in bus.ioctl_read(0,length)] +# print(data) + else: + if reg is None: + bus.iaddr_bytes=0 + reg=0; + bus.ioctl_write(reg,str(bytearray(data))) + bus.close() + return True; + except: + if bus: bus.close() + print("I2C4 error") +# data[0]=0xff + return False; + diff --git a/i2c/I2Cv2.py b/i2c/I2Cv2.py index 81cbb131c73ba619ce00bb5802339feecf27160f..1627b362488d3a250654c41856f4ecfe1baa41ad 100644 --- a/i2c/I2Cv2.py +++ b/i2c/I2Cv2.py @@ -21,9 +21,8 @@ def I2C1server(addr,data,reg=None,read=0): time.sleep(data[0]/1000.) return True logging.debug(str(("I2C",addr,reg,data,read))) - if read==1: - if not(reg is None): i2c1.transfer(addr,[I2C.Message(reg)]) + if not(reg is None): i2c1.transfer(addr,[I2C.Message([reg])]) msgs=[I2C.Message(data,read=True)] i2c1.transfer(addr,msgs) data[:]=msgs[0].data @@ -31,15 +30,15 @@ def I2C1server(addr,data,reg=None,read=0): if reg is None: msgs=[I2C.Message(data)] else: - msgs=[I2C.Message(reg),I2C.Message(data)] + msgs=[I2C.Message([reg]+data)] i2c1.transfer(addr,msgs) return True; except: return False; -i2c4=I2C("/dev/i2c-1") +i2c4=I2C("/dev/i2c-4") -def I2C1server(addr,data,reg=None,read=0): +def I2C4server(addr,data,reg=None,read=0): # print("I2C",addr,reg,data,read) try: if read==3: @@ -48,7 +47,7 @@ def I2C1server(addr,data,reg=None,read=0): logging.debug(str(("I2C",addr,reg,data,read))) if read==1: - if not(reg is None): i2c4.transfer(addr,[I2C.Message(reg)]) + if not(reg is None): i2c4.transfer(addr,[I2C.Message([reg])]) msgs=[I2C.Message(data,read=True)] i2c4.transfer(addr,msgs) data[:]=msgs[0].data @@ -56,7 +55,7 @@ def I2C1server(addr,data,reg=None,read=0): if reg is None: msgs=[I2C.Message(data)] else: - msgs=[I2C.Message(reg),I2C.Message(data)] + msgs=[I2C.Message([reg]+data)] i2c4.transfer(addr,msgs) return True; except: diff --git a/i2c/setswitch.py b/i2c/setswitch.py index 8871663c5df1f560207b16a3f8c5451e8ffb5c06..45f43942a9b3dc1fc7cde1b4efa5a06b674bde92 100644 --- a/i2c/setswitch.py +++ b/i2c/setswitch.py @@ -1,13 +1,15 @@ from I2C import * import time -RCU=2 +RCU=3 Ver="RCU2H v0.2" R1=0 ROM=0x50 #Set switch print("Set switch") -if not(I2C1server(0x70,[1<<RCU],reg=None,read=0)): exit() #select RCU +if not(I2C1server(0x70,[1<<RCU],reg=None,read=0)): + print("Error setting switch!") + exit() #select RCU exit() #Get ID print("Get ID") diff --git a/pypcc2.py b/pypcc2.py index 13ddf412889d0084a022019093a358d5c738ed68..4c873a2909dcd12b887880178b0738adfef8aec3 100644 --- a/pypcc2.py +++ b/pypcc2.py @@ -33,6 +33,7 @@ if args.simulator: from i2c import I2C_dummy as I2C else: from i2c import I2C +# from i2c import I2Cv2 as I2C #Queue used to pass instructions from opc-ua server to RCU Q1=queue.Queue() #RCUs diff --git a/rcu/RCU.py b/rcu/RCU.py index 901a1581f24b2dd9c192f6eb5a9c6971328a894e..98978660f16f68fa5f3d0a07de694fb1305b2e2d 100644 --- a/rcu/RCU.py +++ b/rcu/RCU.py @@ -198,6 +198,9 @@ class RCU1(): for RCUi in range(self.N): self.SWcallback(1<<Vars.RCU_MPaddr.Switch[RCUi]) # print(Step,Step2,len(value1),V1.size) + WX=[0] + self.I2Ccallback(0x40,WX,reg=0,read=1)#wakeup, do nothing + self.I2Ccallback(0x40,[10],read=3) i0=(RCUi*Step+ Vari)*Step2 i1=(RCUi*Step+(Vari+1))*Step2 value2=value1[i0:i1] @@ -271,6 +274,7 @@ class RCU1(): value[i]=ApplyMask(value[i],width,bitoffset,previous[i]); self.previousHBA[RCUi,dev.store-1]=value # if buffer: return True; + print("HBA set:",value); XX=[0] self.I2Ccallback(0x40,XX,reg=0,read=1)#wakeup, do nothing self.I2Ccallback(dev.Addr,[10],read=3) @@ -278,7 +282,7 @@ class RCU1(): if L>16: self.I2Ccallback(dev.Addr,[10],read=3) self.I2Ccallback(dev.Addr,value[16:],reg=dev.Register_W+16) - self.I2Ccallback(dev.Addr,[600],reg=dev.Register_W,read=3) #Wait 500ms + self.I2Ccallback(dev.Addr,[600],read=3) #Wait 500ms return True # return self.I2Ccallback(dev.Addr,value,reg=dev.Register_W) @@ -357,11 +361,13 @@ class RCU1(): #print(width,len(value)) value2=value reg=dev.Register_R +# if not(self.I2Ccallback(dev.Addr,[],reg=0x0)): return False; if not(self.I2Ccallback(dev.Addr,value2,read=1)): return False; if value2[0] is None: return False value[:]=value2[:]; - if dev.store>0: - self.previousHBA[RCUi,dev.store-1]=value + print("HBA ",RCUi,dev.Addr," received:",value); +# if dev.store>0: #This is disabled due to noise on readback +# self.previousHBA[RCUi,dev.store-1]=value[:] for i in range(len(value)): value[i]=UnMask(value[i],width,bitoffset) return True; @@ -383,11 +389,11 @@ class RCU1(): return RCUthread1 def Queue_Monitor(self,Q1,NRCU): - Inst1=Vars.Instr(Vars.DevType.VarUpdate,Vars.RCU_temp,NRCU,[0]*NRCU) - Q1.put(Inst1) - Inst1=Vars.Instr(Vars.DevType.VarUpdate,Vars.RCU_ADC_lock,96,[0]*96) - Q1.put(Inst1) - return + Inst1=Vars.Instr(Vars.DevType.VarUpdate,Vars.RCU_temp,NRCU,[0]*NRCU) + Q1.put(Inst1) + Inst1=Vars.Instr(Vars.DevType.VarUpdate,Vars.RCU_ADC_lock,96,[0]*96) + Q1.put(Inst1) + return def AddVars(self,Q1,AddVarR,AddVarW,AddVar): self.statevar=AddVar("RCU_state_R","busy") for v in Vars.OPC_devvars: diff --git a/rcu/Vars.py b/rcu/Vars.py index b16db9e85c324f56cca37b79efaaab888f4b84da..7a14380585d0fab79f5dbe035b7eb8bd5d88e29d 100644 --- a/rcu/Vars.py +++ b/rcu/Vars.py @@ -44,9 +44,13 @@ HBA3_led =Var2dev("",RCUmod,DevType.HBA1,RCU_HBA3,1,0,1) HBA1_pwr =Var2dev("",RCUmod,DevType.HBA1,RCU_HBA1,1,7,1) HBA2_pwr =Var2dev("",RCUmod,DevType.HBA1,RCU_HBA2,1,7,1) HBA3_pwr =Var2dev("",RCUmod,DevType.HBA1,RCU_HBA3,1,7,1) +HBA1_pwr2 =Var2dev("",RCUmod,DevType.HBA1,RCU_HBA1,1,1,1) +HBA2_pwr2 =Var2dev("",RCUmod,DevType.HBA1,RCU_HBA2,1,1,1) +HBA3_pwr2 =Var2dev("",RCUmod,DevType.HBA1,RCU_HBA3,1,1,1) HBA_Delay=VarArray("HBA_element_beamformer_delays",3,[HBA1_Delay,HBA2_Delay,HBA3_Delay],RW.ReadWrite,datatype.dInt,96,None,None) HBA_led =VarArray("HBA_element_led" ,3,[HBA1_led ,HBA2_led ,HBA3_led ],RW.ReadWrite,datatype.dInt,96,None,None) HBA_pwr =VarArray("HBA_element_pwr" ,3,[HBA1_pwr ,HBA2_pwr ,HBA3_pwr ],RW.ReadWrite,datatype.dInt,96,None,None) +HBA_pwr2 =VarArray("HBA_element_pwr2" ,3,[HBA1_pwr2 ,HBA2_pwr2 ,HBA3_pwr2 ],RW.ReadWrite,datatype.dInt,96,None,None) #RCU_ID0=Var2dev("",RCUmod,DevType.I2C,RCU_ROM,8,0,1) #RCU_ID=VarArray("RCU_ID",1,[RCU_ID0],RW.ReadOnly,datatype.dInt,4,None,None) @@ -109,7 +113,7 @@ RCU_OUT2=VarArray("RCU_OUT2",3,[RCU_IO1_2,RCU_IO2_2,RCU_IO3_2],RW.ReadOnly,datat #OPC_devvars=[RCU_mask,Ant_mask,RCU_att,RCU_band,RCU_temp,RCU_pwrd,RCU_LED,RCU_ID,RCU_VER,HBA_Delay,HBA_led] #OPC_devvars=[RCU_mask,Ant_mask,RCU_att,RCU_band,RCU_temp,RCU_pwrd,RCU_LED,RCU_ID,RCU_VER,HBA_Delay,HBA_led,RCU_uCV_ID] -OPC_devvars=[RCU_mask,Ant_mask,RCU_att,RCU_band,RCU_temp,RCU_pwrd,RCU_LED,RCU_ADC_lock,RCU_ADC_SYNC,RCU_ADC_JESD,RCU_ADC_CML,RCU_OUT1,RCU_OUT2,RCU_ID,RCU_VER,HBA_Delay,HBA_led,HBA_pwr,RCU_uCV_ID] +OPC_devvars=[RCU_mask,Ant_mask,RCU_att,RCU_band,RCU_temp,RCU_pwrd,RCU_LED,RCU_ADC_lock,RCU_ADC_SYNC,RCU_ADC_JESD,RCU_ADC_CML,RCU_OUT1,RCU_OUT2,RCU_ID,RCU_VER,HBA_Delay,HBA_led,HBA_pwr,HBA_pwr2,RCU_uCV_ID] #OPC_devvars=[RCU_mask,Ant_mask,RCU_att,RCU_band,RCU_temp,RCU_pwrd,RCU_LED,RCU_uCV_ID,RCU_uCV_spd0,RCU_uCV_RXspd1,RCU_uCV_RXspd2,RCU_uCV_TXspd1,RCU_uCV_debug ]#,HBA1_Pwr]#,RCU_CNF1,RCU_CNF2] #Instr=namedtuple("DevInstr","type dev nvalue value") #Instrs=namedtuple("Instr","name ninstr instr") diff --git a/scripts/ADCreset.py b/scripts/ADCreset.py index 1fe427c61fdbae25fe8bddd15fcb3a93d97cc717..e42c94acc4acadf705c19747f1f63955e81d6814 100644 --- a/scripts/ADCreset.py +++ b/scripts/ADCreset.py @@ -1,11 +1,11 @@ from test_common import * -RCUs=[2,3]; +RCUs=[0,1,2,3]; setRCUmask(RCUs) -callmethod("RCU_off") +#callmethod("RCU_off") #exit() -time.sleep(1) +#time.sleep(2) callmethod("RCU_on") #callmethod("RCU_on") #time.sleep(1) diff --git a/scripts/Att.py b/scripts/Att.py index 91fcf28ab3a8269a88ac5a6f0b60de8f3a0282f5..65ca66bb1801a2ea14de4937014a258053f663e4 100644 --- a/scripts/Att.py +++ b/scripts/Att.py @@ -1,20 +1,20 @@ from test_common import * name="RCU_attenuator" -RCU=0; -Att=[5,5,5] +RCU=[0]; +Att=[1,1,1] -setAntmask([RCU]) +setAntmask(RCU) att=get_value(name+"_R") -print("Att old:",att[3*RCU:3*RCU+3]) - -att[3*RCU:3*RCU+3]=Att +print("Att old:",att[:12]) +for r in RCU: + att[3*r:3*r+3]=Att set_value(name+"_RW",att) time.sleep(0.5) att=get_value(name+"_R") -print("Att new:",att[3*RCU:3*RCU+3]) +print("Att new:",att[:12]) disconnect() \ No newline at end of file diff --git a/scripts/Band.py b/scripts/Band.py new file mode 100644 index 0000000000000000000000000000000000000000..c4502783269cb5937749a4016a63878b301e6216 --- /dev/null +++ b/scripts/Band.py @@ -0,0 +1,20 @@ +from test_common import * + +name="RCU_band" +RCU=3; +Att=[3,3,3] + + +setAntmask([RCU]) + +att=get_value(name+"_R") +print("Att old:",att[3*RCU:3*RCU+3]) + +att[3*RCU:3*RCU+3]=Att +set_value(name+"_RW",att) + +time.sleep(0.5) +att=get_value(name+"_R") +print("Att new:",att[3*RCU:3*RCU+3]) + +disconnect() \ No newline at end of file diff --git a/scripts/LED.py b/scripts/LED.py index acb861c3261c8feb0defd1dfbc1d3c399fc589b0..c4d882325cf9d3d547e1962b9701541a162cc143 100644 --- a/scripts/LED.py +++ b/scripts/LED.py @@ -2,7 +2,7 @@ from test_common import * name="RCU_LED0" RCU=0; -LEDvalue=0; +LEDvalue=2; setRCUmask([RCU]) diff --git a/scripts/RCUupdate.py b/scripts/RCUupdate.py index bf9b5efa40220b1c820b93754aef7d18e5367c2c..3d9d5857a37a76a1f32c3853d5732dcc1456518a 100644 --- a/scripts/RCUupdate.py +++ b/scripts/RCUupdate.py @@ -1,6 +1,6 @@ from test_common import * -RCUs=[0,1,2,3]; +RCUs=[3]; setRCUmask(RCUs) #for RCU in RCUs: setAntmask(RCUs,[True,True,True]) diff --git a/scripts/SetHBAT_BF.py b/scripts/SetHBAT_BF.py index 8c934f5c29931894c9de78a6c5a1c94ee3d8627b..9147882137cc238a7db4626624d62b243f1d10ff 100644 --- a/scripts/SetHBAT_BF.py +++ b/scripts/SetHBAT_BF.py @@ -16,7 +16,7 @@ i=(RCU*3+HBAT)*32 val=get_value(name+"_R") print("old:",val[i:i+32]) -val[i:i+32]=np.array(range(32))[::]*0 +val[i:i+32]=np.array(range(32))[::]*0+1 set_value(name+"_RW",val) time.sleep(1) diff --git a/scripts/SetHBAT_pwr.py b/scripts/SetHBAT_pwr.py index 3b5a105ccfdd86c8468b6cf37f8bc0f53207022e..f20d4cee1d054b52e32f39f34c4ac177fe227a65 100644 --- a/scripts/SetHBAT_pwr.py +++ b/scripts/SetHBAT_pwr.py @@ -26,15 +26,16 @@ set_value(name+"_RW",val) #print(busy) for x in range(10): busy=get_value("RCU_state_R") - print(busy) +# print(busy) if (busy=='busy'): break; time.sleep(0.05) while not(busy=='ready'): busy=get_value("RCU_state_R") - print(busy) +# print(busy) time.sleep(0.05) val=get_value(name+"_R") print("new:",val[i:i+32]) + disconnect() diff --git a/scripts/SetHBAT_pwr_loop.py b/scripts/SetHBAT_pwr_loop.py new file mode 100644 index 0000000000000000000000000000000000000000..6bae64c4a9fe3d204cf4dabdc87d87f1a0640c1b --- /dev/null +++ b/scripts/SetHBAT_pwr_loop.py @@ -0,0 +1,62 @@ +RCU=3 +HBAT=1 #HBAT on RCU 0..2 +#HBA=5; #HBA Element in HBAT +#BFX=11 #delay in 0.5ns +#BFY=BFX+1 +name="HBA_element_pwr" + +from test_common import * +import numpy as np + +AntMask=[(x==HBAT) for x in range(3)] +setAntmask([RCU],AntMask) + +i=(RCU*3+HBAT)*32 + +val=get_value(name+"_R") +print("old:",val[i:i+32]) + +for ii in range(10): + val[i:i+32]=np.ones([32]) +#val[i:i+32]=np.zeros([32]) + + set_value(name+"_RW",val) + +#time.sleep(0.5) +#busy=get_value("RCU_state_R") +#print(busy) + for x in range(10): + busy=get_value("RCU_state_R") +# print(busy) + if (busy=='busy'): break; + time.sleep(0.05) + while not(busy=='ready'): + busy=get_value("RCU_state_R") +# print(busy) + time.sleep(0.05) + + val=get_value(name+"_R") + print("new:",val[i:i+32]) + +#val[i:i+32]=np.ones([32]) + val[i:i+32]=np.zeros([32]) + + set_value(name+"_RW",val) + +#time.sleep(0.5) +#busy=get_value("RCU_state_R") +#print(busy) + for x in range(10): + busy=get_value("RCU_state_R") +# print(busy) + if (busy=='busy'): break; + time.sleep(0.05) + while not(busy=='ready'): + busy=get_value("RCU_state_R") +# print(busy) + time.sleep(0.05) + + val=get_value(name+"_R") + print("new:",val[i:i+32]) + +disconnect() diff --git a/scripts/SetMonitor.py b/scripts/SetMonitor.py index fa97710d7db14ece16520288bb451e8a60d83b89..b303a5a94743d6c6e1a22c443214b6323133c37a 100644 --- a/scripts/SetMonitor.py +++ b/scripts/SetMonitor.py @@ -1,6 +1,6 @@ from test_common import * -rate= 60 #seconds +rate= 10 #seconds name="RCU_monitor_rate_RW" print("old:",get_value(name)) diff --git a/scripts/i2clinetest.py b/scripts/i2clinetest.py new file mode 100644 index 0000000000000000000000000000000000000000..eebbb0324564c823e275e0be738c45fc07fa6448 --- /dev/null +++ b/scripts/i2clinetest.py @@ -0,0 +1,17 @@ +#from gpiozero import LED,Button +import RPi.GPIO as GPIO +#SCL=3 +#SDA=2 + +SCL=24 +SDA=23 + +GPIO.setmode(GPIO.BCM) + +GPIO.setup(SDA,GPIO.IN) +GPIO.setup(SCL,GPIO.IN) +print("SDA ",GPIO.input(SDA)) +print("SCL ",GPIO.input(SCL)) + +GPIO.cleanup() + diff --git a/scripts/i2creset.py b/scripts/i2creset.py new file mode 100644 index 0000000000000000000000000000000000000000..2e992b0ff5d25b3c3538f4048f6b097689a95a9f --- /dev/null +++ b/scripts/i2creset.py @@ -0,0 +1,43 @@ +#from gpiozero import LED,Button +import RPi.GPIO as GPIO +SCL=3 +SDA=2 + +GPIO.setmode(GPIO.BCM) +GPIO.setup(SDA,GPIO.IN) +GPIO.setup(SCL,GPIO.IN) +print("SDA=",GPIO.input(SDA)) +print("SCL=",GPIO.input(SCL)) +GPIO.cleanup() + +exit() +GPIO.setmode(GPIO.BCM) +print("Clock") +GPIO.setup(SDA,GPIO.IN) +GPIO.setup(SCL,GPIO.OUT) +for x in range(10): + GPIO.output(SCL,0) + print("SDA=",GPIO.input(SDA)) + GPIO.output(SCL,1) + print("SDA=",GPIO.input(SDA)) + +print("STOP") +#GPIO.setup(SCL,GPIO.OUT) +GPIO.output(SCL,0) +GPIO.setup(SDA,GPIO.OUT) +GPIO.output(SDA,0) +GPIO.output(SCL,1) +GPIO.output(SDA,1) +GPIO.setup(SDA,GPIO.IN) +print("SDA=",GPIO.input(SDA)) + +GPIO.cleanup() + +#SCL=LED(9) +#SDA=Button(8) + +#if Button.is_pressed: print("High") +#SCL.on() +#SCL.off() + + diff --git a/scripts/i2creset2.py b/scripts/i2creset2.py new file mode 100644 index 0000000000000000000000000000000000000000..2ff714e32cb493d6beb6099a615cd86d9b8303e7 --- /dev/null +++ b/scripts/i2creset2.py @@ -0,0 +1,71 @@ +#from gpiozero import LED,Button +import RPi.GPIO as GPIO +SCL=3 +SDA=2 +Addr=0x70 #SWITCH +#Addr=0x20 #io expander +Value=0 +data=[(Addr<<1)+0,Value] #Write +#data=[Addr<<1+1] #Read + +GPIO.setmode(GPIO.BCM) + +GPIO.setup(SDA,GPIO.IN) +GPIO.setup(SCL,GPIO.IN) +print("SDA high",GPIO.input(SDA)==1) +print("SCL high",GPIO.input(SCL)==1) + +#GPIO.setup(SDA,GPIO.OUT) +GPIO.setup(SCL,GPIO.OUT) + +#GPIO.output(SDA,1) +GPIO.output(SCL,1) + +#Start +#GPIO.output(SDA,0) +GPIO.setup(SDA,GPIO.OUT) +GPIO.output(SDA,0) +GPIO.output(SCL,0) + +for b in data: + ba="{0:{fill}8b}".format(b,fill='0') + print("Sending",ba) + for bit in ba: + if int(bit)==0: + GPIO.setup(SDA,GPIO.OUT) + GPIO.output(SDA,0) + else: + GPIO.setup(SDA,GPIO.IN) +# GPIO.output(SDA,int(bit)) + GPIO.output(SCL,1) + GPIO.output(SCL,0) + + + GPIO.setup(SDA,GPIO.IN) +# GPIO.output(SDA,0) +# print("Ack",GPIO.input(SDA)==0) +# GPIO.setup(SDA,GPIO.OUT) + + #ack clock + GPIO.output(SCL,1) +# GPIO.setup(SDA,GPIO.IN) + print("Ack",GPIO.input(SDA)==0) +# GPIO.setup(SDA,GPIO.OUT) + GPIO.output(SCL,0) + print("Ack released",GPIO.input(SDA)==1) + + +#Stop +#GPIO.output(SDA,0) +GPIO.setup(SDA,GPIO.OUT) +GPIO.output(SDA,0) +GPIO.output(SCL,1) +GPIO.output(SDA,1) +#GPIO.setup(SDA,GPIO.IN) + +GPIO.setup(SDA,GPIO.IN) +GPIO.setup(SCL,GPIO.IN) +print("SDA high",GPIO.input(SDA)==1) +print("SCL high",GPIO.input(SCL)==1) +GPIO.cleanup() + diff --git a/scripts/i2creset2b.py b/scripts/i2creset2b.py new file mode 100644 index 0000000000000000000000000000000000000000..a41c4c209f05533f9af90e080a65e96befd94d70 --- /dev/null +++ b/scripts/i2creset2b.py @@ -0,0 +1,70 @@ +#from gpiozero import LED,Button +import RPi.GPIO as GPIO +SCL=3 +SDA=2 +Addr=0x70 #SWITCH +#Addr=0x20 #io expander +Value=0 +data=[(Addr<<1)+0,Value] #Write +#data=[Addr<<1+1] #Read + +GPIO.setmode(GPIO.BCM) + +GPIO.setup(SDA,GPIO.IN) +GPIO.setup(SCL,GPIO.IN) +print("SDA high",GPIO.input(SDA)==1) +print("SCL high",GPIO.input(SCL)==1) + +GPIO.setup(SDA,GPIO.OUT) +GPIO.setup(SCL,GPIO.OUT) + +GPIO.output(SDA,1) +GPIO.output(SCL,1) + +#Start +#GPIO.output(SDA,0) +#GPIO.setup(SDA,GPIO.OUT) +GPIO.output(SDA,0) +GPIO.output(SCL,0) + +for b in data: + ba="{0:{fill}8b}".format(b,fill='0') + print("Sending",ba) + for bit in ba: +# if int(bit)==0: +# GPIO.setup(SDA,GPIO.OUT) +# GPIO.output(SDA,0) +# else: +# GPIO.setup(SDA,GPIO.IN) + GPIO.output(SDA,int(bit)) + GPIO.output(SCL,1) + GPIO.output(SCL,0) + + + GPIO.setup(SDA,GPIO.IN) +# GPIO.output(SDA,0) +# print("Ack",GPIO.input(SDA)==0) +# GPIO.setup(SDA,GPIO.OUT) + + #ack clock + GPIO.output(SCL,1) +# GPIO.setup(SDA,GPIO.IN) + print("Ack",GPIO.input(SDA)==0) + GPIO.output(SCL,0) + print("Ack released",GPIO.input(SDA)==1) + GPIO.setup(SDA,GPIO.OUT) + +#Stop +#GPIO.output(SDA,0) +#GPIO.setup(SDA,GPIO.OUT) +GPIO.output(SDA,0) +GPIO.output(SCL,1) +GPIO.output(SDA,1) +#GPIO.setup(SDA,GPIO.IN) + +GPIO.setup(SDA,GPIO.IN) +GPIO.setup(SCL,GPIO.IN) +print("SDA high",GPIO.input(SDA)==1) +print("SCL high",GPIO.input(SCL)==1) +GPIO.cleanup() + diff --git a/scripts/i2cresetCLK.py b/scripts/i2cresetCLK.py new file mode 100644 index 0000000000000000000000000000000000000000..aa09dbbf67dbb500cc983044b0d7d5ff05721f5c --- /dev/null +++ b/scripts/i2cresetCLK.py @@ -0,0 +1,70 @@ +#from gpiozero import LED,Button +import RPi.GPIO as GPIO +SCL=24 +SDA=23 +Addr=0x20 #SWITCH +#Addr=0x20 #io expander +Value=0 +data=[(Addr<<1)+0,Value] #Write +#data=[Addr<<1+1] #Read + +GPIO.setmode(GPIO.BCM) + +GPIO.setup(SDA,GPIO.IN) +GPIO.setup(SCL,GPIO.IN) +print("SDA high",GPIO.input(SDA)==1) +print("SCL high",GPIO.input(SCL)==1) + +GPIO.setup(SDA,GPIO.OUT) +GPIO.setup(SCL,GPIO.OUT) + +GPIO.output(SDA,1) +GPIO.output(SCL,1) + +#Start +#GPIO.output(SDA,0) +#GPIO.setup(SDA,GPIO.OUT) +GPIO.output(SDA,0) +GPIO.output(SCL,0) + +for b in data: + ba="{0:{fill}8b}".format(b,fill='0') + print("Sending",ba) + for bit in ba: +# if int(bit)==0: +# GPIO.setup(SDA,GPIO.OUT) +# GPIO.output(SDA,0) +# else: +# GPIO.setup(SDA,GPIO.IN) + GPIO.output(SDA,int(bit)) + GPIO.output(SCL,1) + GPIO.output(SCL,0) + + + GPIO.setup(SDA,GPIO.IN) +# GPIO.output(SDA,0) +# print("Ack",GPIO.input(SDA)==0) +# GPIO.setup(SDA,GPIO.OUT) + + #ack clock + GPIO.output(SCL,1) +# GPIO.setup(SDA,GPIO.IN) + print("Ack",GPIO.input(SDA)==0) + GPIO.output(SCL,0) + print("Ack released",GPIO.input(SDA)==1) + GPIO.setup(SDA,GPIO.OUT) + +#Stop +#GPIO.output(SDA,0) +#GPIO.setup(SDA,GPIO.OUT) +GPIO.output(SDA,0) +GPIO.output(SCL,1) +GPIO.output(SDA,1) +#GPIO.setup(SDA,GPIO.IN) + +GPIO.setup(SDA,GPIO.IN) +GPIO.setup(SCL,GPIO.IN) +print("SDA high",GPIO.input(SDA)==1) +print("SCL high",GPIO.input(SCL)==1) +GPIO.cleanup() +