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):