diff --git a/config/APSCTTR.yaml b/config/APSCTTR.yaml index 3c0d6cd91581f84968c3c547cab0a629fa883426..13a38f8e7677b87b840b07c78969e75a9a1f07df 100644 --- a/config/APSCTTR.yaml +++ b/config/APSCTTR.yaml @@ -14,6 +14,11 @@ drivers: parent: I2C_CLK devreg: [IO1.GPIO1,IO1.GPIO1,IO1.GPIO1,IO1.GPIO1] parameters: [4,7,5,6] + - name: SPIbb2 + type: spibitbang2 #SPI bitbang via GPIO expander: CLK, SDI,SDO,CS + parent: I2C_CLK + devreg: [IO2.GPIO1,IO2.GPIO1,IO2.GPIO1,IO2.GPIO1] + parameters: [4,7,5,6] #This is the I2C devices in the RCU device_registers: @@ -40,7 +45,7 @@ device_registers: address: [1,3] #Read / Write address different store: True - - name: PLL + - name: PLL2 driver: SPIbb1 registers: - name: PLL_stat @@ -50,6 +55,16 @@ device_registers: - {name: r5, address: 0x05} - {name: r6, address: 0x06} + - name: PLL1 + driver: SPIbb2 + registers: + - name: PLL_stat + description: PLL locked status + address: 0x0 + - {name: r3, address: 0x03} + - {name: r5, address: 0x05} + - {name: r6, address: 0x06} + - name: ROM description: 24AA02UIDT address: 0x50 @@ -183,20 +198,29 @@ variables: - name: APSCT_PLL_200MHz_locked_SPI description: 0x81=locked driver: I2C_CLK - devreg: PLL.PLL_stat + devreg: PLL2.PLL_stat width: 8 rw: ro dtype: uint8 debug: True - - name: [APSCT_PLL_r3,APSCT_PLL_r5,APSCT_PLL_r6] + - name: APSCT_PLL_160MHz_locked_SPI + description: 0x81=locked driver: I2C_CLK - devreg: [PLL.r3,PLL.r5,PLL.r6] + devreg: PLL1.PLL_stat width: 8 rw: ro dtype: uint8 debug: True +# - name: [APSCT_PLL_r3,APSCT_PLL_r5,APSCT_PLL_r6] +# driver: I2C_CLK +# devreg: [PLL.r3,PLL.r5,PLL.r6] +# width: 8 +# rw: ro +# dtype: uint8 +# debug: True + - name: [APSCT_IO1_GPIO1,APSCT_IO1_GPIO2,APSCT_IO2_GPIO1,APSCT_IO2_GPIO2] driver: I2C_CLK devreg: [IO1.GPIO1,IO1.GPIO2,IO2.GPIO1,IO2.GPIO2] @@ -239,8 +263,6 @@ methods: debug: True instructions: - APSCT_I2C_error : 0 - - APSCT_ID : Update - - APSCT_version : Update - APSCT_IO1_GPIO1 : Update - APSCT_IO1_GPIO2 : Update - APSCT_IO2_GPIO1 : Update @@ -249,6 +271,14 @@ methods: - IO1.CONF2: Update - IO2.CONF1: Update - IO2.CONF2: Update + - APSCTTR_Update: 0 + + - name: APSCTTR_Update + driver: I2C_CLK + debug: True + instructions: + - APSCT_ID : Update + - APSCT_version : Update - APSCT_PWR_on: Update - APSCT_PWR_PLL_200MHz_on: Update - APSCT_PLL_200MHz_locked: Update @@ -258,49 +288,98 @@ methods: - APSCT_PLL_160MHz_error: Update - APSCT_PPS_ignore : Update - - - name: APSCT_on + - name: APSCT_200MHz_on driver: I2C_CLK description: Configure clock. Monitored using APSCT_PWR_on, APSCT_PLL_error and APSCT_PLL_locked instructions: - APSCT_I2C_error : 0 -# - IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI -# - IO1.GPIO1: 0x42 #0100 0010 high:PWR enable, CS -# - APSCT_PWR_on: Update -# - WAIT: 200 #ms to wait before checking lock -# - APSCT_PLL_setup: 0 -# - WAIT: 100 #ms to wait before checking lock -# - APSCT_PLL_locked: Update + - IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI + - IO1.CONF2: 0x00 + - IO2.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI + - IO2.CONF2: 0x03 # + - IO1.GPIO1: 0x42 #0100 0010 high:200MHz PLL enable, CS high + - IO1.GPIO2: 0xF8 #PWR enable ##Check if not 4?? + - IO2.GPIO1: 0x00 #All low + - IO2.GPIO2: 0x00 #All low (just inputs) + + - WAIT: 200 + - APSCT_PLL200_setup: 0 + - WAIT: 200 #ms to wait before checking lock + - APSCTTR_Update: 0 #refresh all settings + + - name: APSCT_160MHz_on + driver: I2C_CLK + description: Configure clock. Monitored using APSCT_PWR_on, APSCT_PLL_error and APSCT_PLL_locked + instructions: + - APSCT_I2C_error : 0 + - IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI + - IO1.CONF2: 0x00 + - IO2.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI + - IO2.CONF2: 0x03 # + - IO1.GPIO1: 0x00 + - IO1.GPIO2: 0x08 #PWR enable ##Check if not 4?? + - IO2.GPIO1: 0x42 #0100 0010 high:160MHz PLL enable, CS high + - IO2.GPIO2: 0x00 #All low (just inputs) + + - WAIT: 200 + - APSCT_PLL160_setup: 0 + - WAIT: 200 #ms to wait before checking lock + - APSCTTR_Update: 0 #refresh all settings - name: APSCT_off driver: I2C_CLK description: Switch clock off. Monitored using APSCT_PWR_on instructions: - APSCT_I2C_error : 0 -# - IO1.CONF1: 0x2C #0010 1100 PPS/PWR output, SCLK,CS,SDI -# - IO1.GPIO1: 0x00 #all low -# - APSCT_PWR_on: Update -# - APSCT_PLL_locked: Update + - IO1.GPIO1: 0x00 + - IO1.GPIO2: 0x00 + - IO2.GPIO1: 0x00 + - IO2.GPIO2: 0x00 + - APSCTTR_Update: 0 #refresh all settings - - name: APSCT_PLL_setup + - name: APSCT_PLL200_setup driver: I2C_CLK debug: true instructions: -# - PLL.0x03: 0x08 #Set power, this is default - - PLL.0x05: 0x17 #was 97, set lock time - - PLL.0x06: 0x10 +# - PLL2.0x03: 0x08 #Set power, this is default + - PLL2.0x04: 0xCF # + - PLL2.0x05: 0x97 #was 97, set lock time = =x17? + - PLL2.0x06: 0x10 + + - PLL2.0x07: 0x04 #Stop R divider + - PLL2.0x08: 0x01 #Set R divider + - PLL2.0x07: 0x00 #Start R divider + + - PLL2.0x09: 0x10 #Stop N divider + - PLL2.0x0A: 0x14 #Set N divider=20, 200MHz/20=10MHz = input clock + - PLL2.0x09: 0x00 #Start N divider + + - PLL2.0x0D: 0x01 #Divider output 1=1 + - PLL2.0x0F: 0x01 #Divider output 2=1 + - PLL2.0x11: 0x01 #Divider output 3=1 + - PLL2.0x13: 0x01 #Divider output 4=1 + + - name: APSCT_PLL160_setup + driver: I2C_CLK + debug: true + instructions: +# - PLL1.0x03: 0x08 #Set power, this is default + - PLL1.0x04: 0xCF # + - PLL1.0x05: 0x97 #was 97, set lock time = =x17? + - PLL1.0x06: 0x10 + + - PLL1.0x07: 0x04 #Stop R divider + - PLL1.0x08: 0x01 #Set R divider + - PLL1.0x07: 0x00 #Start R divider + + - PLL1.0x09: 0x10 #Stop N divider + - PLL1.0x0A: 0x10 #Set N divider=16, 160MHz/16=10MHz = input clock + - PLL1.0x09: 0x00 #Start N divider - - PLL.0x07: 0x04 #Stop R divider - - PLL.0x08: 0x01 #Set R divider - - PLL.0x07: 0x00 #Start R divider + - PLL1.0x0D: 0x01 #Divider output 1=1 + - PLL1.0x0F: 0x01 #Divider output 2=1 + - PLL1.0x11: 0x01 #Divider output 3=1 + - PLL1.0x13: 0x01 #Divider output 4=1 - - PLL.0x09: 0x10 #Stop N divider - - PLL.0x0A: 0x14 #Set N divider=20, 200MHz/20=10MHz = input clock - - PLL.0x09: 0x00 #Start N divider - - PLL.0x0D: 0x01 #Divider output 1=1 - - PLL.0x0F: 0x01 #Divider output 2=1 - - PLL.0x11: 0x01 #Divider output 3=1 - - PLL.0x13: 0x01 #Divider output 4=1 - diff --git a/config/UNB2TR.yaml b/config/UNB2TR.yaml index 200f49c7b02282798edf0e6d309b7507a4131109..84d2d6af76f0378e71e4f1a6f555f813454003a5 100644 --- a/config/UNB2TR.yaml +++ b/config/UNB2TR.yaml @@ -45,6 +45,7 @@ drivers: - name: GPIO type: gpio + parameters: [19,26] #This is the I2C devices in the RCU @@ -132,11 +133,11 @@ variables: dtype: boolean dim: 2 - - name: UNB2_Power_ON_OFF + - name: UNB2_PWR_off driver: GPIO mask: UNB2_mask width: 1 - rw: hidden #ro + rw: rw dtype: boolean dim: 2 diff --git a/i2cserv/gpio.py b/i2cserv/gpio.py index 20e38ab4a1161a435ee7c202bf5786a10510660a..122c09ac456ea297366b13459fec1d0774cd9ba2 100644 --- a/i2cserv/gpio.py +++ b/i2cserv/gpio.py @@ -1,7 +1,45 @@ #import numpy as np from .hwdev import hwdev; import logging +import RPi.GPIO as GPIO +from queuetypes import * + + class gpio(hwdev): def __init__(self,config): hwdev.__init__(self,config); - logging.info("gpio todo") + self.pins=config['parameters'] + self.Npins=len(self.pins); + GPIO.setmode(GPIO.BCM) + self.state=[0 for pin in self.pins] + logging.info(str(("gpio, Pins=",self.state))); + for i,pin in enumerate(self.pins): + GPIO.setup(pin,GPIO.OUT) +# for i,pin in enumerate(self.pins): +# GPIO.setup(pin,GPIO.IN) +# self.state=[GPIO.input(pin) for pin in self.pins] +# logging.info(str(("gpio, Pins=",self.state))); + + def OPCUASetVariable(self,varid,var1,data,mask): + logging.info("Set gpio"); + if len(mask)!=self.Npins: + logging.warning("Wrong mask length"); + mask=[True]*self.Npins; + if len(data)!=self.Npins: + logging.warning("Wrong data length"); + return [] + for i,pin in enumerate(self.pins): + if mask[i]: + GPIO.output(pin,data[i]%2); + self.state[i]=data[i]%2 + Data=OPCUAset(varid,InstType.varSet,self.state.copy(),mask.copy()) + return [Data] + + + def OPCUAReadVariable(self,varid,var1,mask): + logging.info("Read gpio"); + Data=OPCUAset(varid,InstType.varSet,self.state.copy(),mask.copy()) + return [Data] + + + diff --git a/scripts/ADCreset.py b/scripts/ADCreset.py index 81d4d2fd4b347d36efe64f6f5db8bab8199ece45..97c449147a1587690a38829292dfc457eca2bcd8 100644 --- a/scripts/ADCreset.py +++ b/scripts/ADCreset.py @@ -1,6 +1,7 @@ from test_common import * +RCUs=[0,1,2,3]; -RCUs=[1,3]; +connect() setRCUmask(RCUs) def wait(var1="RECVTR_translator_busy_R"): @@ -11,11 +12,11 @@ def wait(var1="RECVTR_translator_busy_R"): time.sleep(0.1) print("Time=",x*0.1,"s") -callmethod("RCU_off") -wait() +#callmethod("RCU_off") +#wait() #exit() -time.sleep(2) -#callmethod("RCU_on") +#time.sleep(2) +callmethod("RCU_on") wait() #callmethod("RCU_on") #time.sleep(1) diff --git a/scripts/Ant_Pwr.py b/scripts/Ant_Pwr.py index 16b71c9c6d1e00e635620ff9ea5376caddb0230d..fc382be7b910dc6adf0b27bc17dde1f18ba17e50 100644 --- a/scripts/Ant_Pwr.py +++ b/scripts/Ant_Pwr.py @@ -1,14 +1,14 @@ from test_common import * -name="ANT_PWR_ON" -RCU=[4]; +name="RCU_PWR_ANT_on" +RCU=[0,1,2,3]; On=[True,True,True] #On=[False,False,False] #Att=[10,10,10] #RCU=[1,2,3]; #Att=[0,0,0] - +connect() setAntmask(RCU) att=get_value(name+"_R") diff --git a/scripts/CLK.py b/scripts/CLK.py index 19c524bed4db0b8a5765a96752682c058c9fbe5c..b0ff702772de24ea817243e62642f7bf5507d891 100644 --- a/scripts/CLK.py +++ b/scripts/CLK.py @@ -1,11 +1,12 @@ from test_common import * +connect("opc.tcp://localhost:4843/") -#callmethod("CLK_off") +#callmethod("APSCT_off") #time.sleep(1) - -callmethod("CLK_on") +#callmethod("APSCT_200MHz_on") +callmethod("APSCT_160MHz_on") for x in range(10): - busy=get_value("CLK_translator_busy_R") + busy=get_value("APSCTTR_translator_busy_R") print(busy) if not(busy): break time.sleep(0.1) diff --git a/scripts/DTH_test.py b/scripts/DTH_test.py index 0b6283a353dc9fe205c0adf0108a212ba043b00a..0af0b3c4243763b21933983f9028267c6bc714f0 100644 --- a/scripts/DTH_test.py +++ b/scripts/DTH_test.py @@ -1,12 +1,13 @@ from test_common import * -RCU=1; +RCU=3; +connect() setAntmask([RCU]) setRCUmask([RCU]) #call_debug_method("DTH_off") -if False: +if True: name="RCU_DTH_freq" Freq=[102e6,102.101e6,102.2e6] # Freq=[102.2e6,102.1e6,102.0e6] diff --git a/scripts/test_common.py b/scripts/test_common.py index 9ac6379de5aac43c4b9d79ccc91e67735bd59660..5828380ae9ec8169611a31cadbd035bfc80fc95c 100644 --- a/scripts/test_common.py +++ b/scripts/test_common.py @@ -9,7 +9,7 @@ from opcua import Client from opcua import ua #import numpy as np -def connect(): +def connect(Address=Address): global client,root # logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.WARN) @@ -20,7 +20,7 @@ def connect(): root = client.get_root_node() return root -root=connect() +#root=connect() def disconnect(): client.disconnect() @@ -52,7 +52,7 @@ def setRCUmask(rcu=[]): # print(name," new:",get_value(name)) def setAntmask(rcu=[],ant=[True,True,True]): - name="RCU_ANT_mask_RW" + name="ANT_mask_RW" M=get_value(name) # print(name," old:",M) for i,j in enumerate(M):