forked from M-Labs/artiq
force hold on bypass and use names in set_servo() in init
This commit is contained in:
parent
b67a70392d
commit
ce4055db3b
|
@ -138,7 +138,7 @@ class Phaser:
|
||||||
update the y0, y1 output registers. The servo can also be bypassed.
|
update the y0, y1 output registers. The servo can also be bypassed.
|
||||||
|
|
||||||
After power-up the servo is bypassed, in profile 0, with coefficients [0, 0, 0]
|
After power-up the servo is bypassed, in profile 0, with coefficients [0, 0, 0]
|
||||||
and hold is disabled. If older gateware without ther servo is loaded onto the
|
and hold is enabled. If older gateware without ther servo is loaded onto the
|
||||||
Phaser FPGA, the device simply behaves as if the servo is bypassed and none of
|
Phaser FPGA, the device simply behaves as if the servo is bypassed and none of
|
||||||
the servo functions have any effect.
|
the servo functions have any effect.
|
||||||
|
|
||||||
|
@ -340,8 +340,7 @@ class Phaser:
|
||||||
delay(.1*ms)
|
delay(.1*ms)
|
||||||
channel.set_att_mu(0x00) # minimum attenuation
|
channel.set_att_mu(0x00) # minimum attenuation
|
||||||
|
|
||||||
# disable servo, set iir profile to 0 and disable iir hold
|
channel.set_servo(profile=0, bypass=1, hold=1)
|
||||||
channel.set_servo(0, 1, 0)
|
|
||||||
|
|
||||||
# test oscillators and DUC
|
# test oscillators and DUC
|
||||||
for i in range(len(channel.oscillator)):
|
for i in range(len(channel.oscillator)):
|
||||||
|
@ -1082,14 +1081,16 @@ class PhaserChannel:
|
||||||
def set_servo(self, profile=0, bypass=1, hold=0):
|
def set_servo(self, profile=0, bypass=1, hold=0):
|
||||||
"""Set the servo configuration.
|
"""Set the servo configuration.
|
||||||
|
|
||||||
:param bypass: 1 to enable bypass (default), 0 to engage servo
|
:param bypass: 1 to enable bypass (default), 0 to engage servo. If bypassed, hold
|
||||||
|
is forced since the control loop is broken.
|
||||||
:param hold: 1 to hold the servo IIR filter output constant, 0 for normal operation
|
:param hold: 1 to hold the servo IIR filter output constant, 0 for normal operation
|
||||||
:param profile: profile index to select for channel (0 to 3)
|
:param profile: profile index to select for channel (0 to 3)
|
||||||
"""
|
"""
|
||||||
if (profile < 0) or (profile > 3):
|
if (profile < 0) or (profile > 3):
|
||||||
raise ValueError("invalid profile index")
|
raise ValueError("invalid profile index")
|
||||||
addr = PHASER_ADDR_SERVO_CFG0 + self.index
|
addr = PHASER_ADDR_SERVO_CFG0 + self.index
|
||||||
data = (profile << 2) | ((hold & 1) << 1) | (~bypass & 1)
|
# enforce hold if the servo is bypassed
|
||||||
|
data = (profile << 2) | (((hold | bypass) & 1) << 1) | (~bypass & 1)
|
||||||
self.phaser.write8(addr, data)
|
self.phaser.write8(addr, data)
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
|
|
Loading…
Reference in New Issue