added AD9833 and DS1809 support
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -107,6 +107,10 @@ def set_initial_params():
|
||||
params['RampTriangle'] = True
|
||||
params['RampSramMode'] = False
|
||||
params['RampSramSamples'] = ''
|
||||
params['RampSramAmp'] = ''
|
||||
params['Ad9833Freq'] = ''
|
||||
params['Ad9833Mclk'] = '25'
|
||||
params['Ad9833Triangle'] = True
|
||||
return params
|
||||
|
||||
def update_data_lists():
|
||||
@ -473,10 +477,30 @@ if __name__ == "__main__":
|
||||
triangle = values.get('-RampTriangle-', True)
|
||||
sram_mode = values.get('-RampSramMode-', False)
|
||||
sram_samples = parse_optional_int(values.get('-RampSramSamples-'))
|
||||
sram_amp_val = parse_optional_float(values.get('-RampSramAmp-'))
|
||||
sram_amplitude = None
|
||||
if sram_amp_val is not None:
|
||||
if sram_amp_val <= 1.0:
|
||||
sram_amplitude = int(round(sram_amp_val * 8191.0))
|
||||
elif sram_amp_val <= 100.0:
|
||||
sram_amplitude = int(round((sram_amp_val / 100.0) * 8191.0))
|
||||
else:
|
||||
sram_amplitude = int(round(sram_amp_val))
|
||||
dev.start_ramp_max(prt, freq_hz=freq_hz, duty=duty, saw_step=saw_step,
|
||||
pat_period=pat_period, pat_period_base=pat_period_base,
|
||||
dac_clk_hz=dac_clk_hz, triangle=triangle,
|
||||
sram_mode=sram_mode, sram_samples=sram_samples)
|
||||
sram_mode=sram_mode, sram_samples=sram_samples,
|
||||
sram_amplitude=sram_amplitude)
|
||||
elif event == '-StartRamp9833-':
|
||||
freq_hz = parse_optional_float(values.get('-AD9833Freq-'))
|
||||
mclk_mhz = parse_optional_float(values.get('-AD9833Mclk-'))
|
||||
mclk_hz = mclk_mhz * 1e6 if mclk_mhz is not None else None
|
||||
triangle = values.get('-AD9833Triangle-', True)
|
||||
dev.start_ad9833_ramp(prt, freq_hz=freq_hz, mclk_hz=mclk_hz, triangle=triangle, enable=True)
|
||||
elif event == '-DS1809UC-':
|
||||
dev.send_ds1809_pulse(prt, uc=True, dc=False)
|
||||
elif event == '-DS1809DC-':
|
||||
dev.send_ds1809_pulse(prt, uc=False, dc=True)
|
||||
elif event == '-StopCycle-':
|
||||
window['-StopCycle-'].update(disabled = True)
|
||||
current_and_temperature_settings_available = True
|
||||
@ -488,8 +512,8 @@ if __name__ == "__main__":
|
||||
|
||||
window['-TOUT_1-'].update(gui.READ_TEMPERATURE_TEXT+' 1: '+shorten(data['Temp_1'])+' C')
|
||||
window['-TOUT_2-'].update(gui.READ_TEMPERATURE_TEXT+' 2: '+shorten(data['Temp_2'])+' C')
|
||||
window['-IOUT_1-'].update(gui.READ_CURRENT_TEXT+' 1: '+shorten(data['I1'])+' мА')
|
||||
window['-IOUT_2-'].update(gui.READ_CURRENT_TEXT+' 2: '+shorten(data['I2'])+' мА')
|
||||
window['-IOUT_1-'].update(gui.READ_CURRENT_TEXT+' 1: '+shorten(data['I1'])+' мА (raw '+str(data.get('I1_raw', ''))+')')
|
||||
window['-IOUT_2-'].update(gui.READ_CURRENT_TEXT+' 2: '+shorten(data['I2'])+' мА (raw '+str(data.get('I2_raw', ''))+')')
|
||||
window['-DateTime-'].update(data['datetime'].strftime('%d-%m-%Y %H:%M:%S:%f')[:-3])
|
||||
window['-TTerm1-'].update('T терм 1: '+shorten(data['Temp_Ext_1'])+' C')
|
||||
window['-TTerm2-'].update('T терм 2: '+shorten(data['Temp_Ext_2'])+' C')
|
||||
@ -519,4 +543,3 @@ if __name__ == "__main__":
|
||||
window.close()
|
||||
|
||||
dev.close_connection(prt)
|
||||
|
||||
|
||||
@ -10,15 +10,27 @@ GET_DATA_TOTAL_LENGTH = 30 # Total number of bytes when getting DATA
|
||||
SEND_PARAMS_TOTAL_LENGTH = 30 # Total number of bytes when sending parameters
|
||||
TASK_ENABLE_COMMAND_LENGTH = 32 # Total number of bytes when sending TASK_ENABLE command
|
||||
|
||||
AD9833_CMD_TOTAL_LENGTH = 10 # Total bytes when sending AD9102 saw command
|
||||
AD9833_CMD_HEADER = "8888"
|
||||
AD9102_CMD_TOTAL_LENGTH = 10 # Total bytes when sending AD9102 saw command
|
||||
AD9102_CMD_HEADER = "8888"
|
||||
AD9833_CMD_TOTAL_LENGTH = 10 # Total bytes when sending AD9833 command
|
||||
AD9833_CMD_HEADER = "9999"
|
||||
DS1809_CMD_TOTAL_LENGTH = 10 # Total bytes when sending DS1809 UC/DC pulse command
|
||||
DS1809_CMD_HEADER = "AAAA"
|
||||
AD9102_SAW_STEP_DEFAULT = 1
|
||||
AD9102_PAT_PERIOD_DEFAULT = 0xFFFF
|
||||
AD9102_PAT_PERIOD_BASE_DEFAULT = 0x02
|
||||
AD9102_DAC_CLK_HZ = None # set to actual DAC clock if you want freq->SAW_STEP conversion
|
||||
AD9102_FLAG_SRAM = 0x0004
|
||||
AD9102_FLAG_SRAM_FMT = 0x0008
|
||||
AD9102_SRAM_SAMPLES_DEFAULT = 16
|
||||
AD9102_SRAM_HOLD_DEFAULT = 1
|
||||
AD9102_SRAM_AMP_DEFAULT = 8191
|
||||
AD9833_FLAG_ENABLE = 0x0001
|
||||
AD9833_FLAG_TRIANGLE = 0x0002
|
||||
AD9833_MCLK_HZ_DEFAULT = 25_000_000
|
||||
DS1809_FLAG_UC = 0x0001
|
||||
DS1809_FLAG_DC = 0x0002
|
||||
DS1809_PULSE_MS_DEFAULT = 2
|
||||
|
||||
class TaskType(IntEnum):
|
||||
Manual = 0x00
|
||||
@ -158,8 +170,19 @@ def send_STATE(prt):
|
||||
pass
|
||||
|
||||
|
||||
def send_AD9102(prt, bytestring):
|
||||
''' Start/stop AD9102 output with saw/triangle (0x8888 + ...).
|
||||
Expected device answer: STATE.
|
||||
'''
|
||||
if len(bytestring) != AD9102_CMD_TOTAL_LENGTH:
|
||||
print("Error. Wrong parameter string for AD9102 command.")
|
||||
return None
|
||||
prt.write(bytestring)
|
||||
print("Sent: AD9102 ramp command.")
|
||||
|
||||
|
||||
def send_AD9833(prt, bytestring):
|
||||
''' Start/stop AD9833 output with triangle (ramp) mode (0x8888 + ...).
|
||||
''' Start/stop AD9833 output with triangle (0x9999 + ...).
|
||||
Expected device answer: STATE.
|
||||
'''
|
||||
if len(bytestring) != AD9833_CMD_TOTAL_LENGTH:
|
||||
@ -169,6 +192,17 @@ def send_AD9833(prt, bytestring):
|
||||
print("Sent: AD9833 ramp command.")
|
||||
|
||||
|
||||
def send_DS1809(prt, bytestring):
|
||||
''' Pulse DS1809 UC/DC control lines (0xAAAA + ...).
|
||||
Expected device answer: STATE.
|
||||
'''
|
||||
if len(bytestring) != DS1809_CMD_TOTAL_LENGTH:
|
||||
print("Error. Wrong parameter string for DS1809 command.")
|
||||
return None
|
||||
prt.write(bytestring)
|
||||
print("Sent: DS1809 pulse command.")
|
||||
|
||||
|
||||
# ---- Getting data
|
||||
|
||||
|
||||
@ -324,14 +358,15 @@ def calc_sram_samples_for_freq(freq_hz: float, dac_clk_hz: float, hold: int = No
|
||||
|
||||
|
||||
|
||||
def create_AD9833_ramp_command(saw_step: int = None,
|
||||
def create_AD9102_ramp_command(saw_step: int = None,
|
||||
pat_period: int = None,
|
||||
pat_period_base: int = None,
|
||||
enable: bool = True,
|
||||
triangle: bool = True,
|
||||
sram_mode: bool = False,
|
||||
sram_samples: int = None,
|
||||
sram_hold: int = None):
|
||||
sram_hold: int = None,
|
||||
sram_amplitude: int = None):
|
||||
flags = 0
|
||||
if enable:
|
||||
flags |= 0x0001
|
||||
@ -341,18 +376,21 @@ def create_AD9833_ramp_command(saw_step: int = None,
|
||||
flags |= AD9102_FLAG_SRAM
|
||||
|
||||
if sram_mode:
|
||||
flags |= AD9102_FLAG_SRAM_FMT
|
||||
if sram_samples is None:
|
||||
sram_samples = AD9102_SRAM_SAMPLES_DEFAULT
|
||||
if sram_samples < 2:
|
||||
sram_samples = 2
|
||||
if sram_samples > 4096:
|
||||
sram_samples = 4096
|
||||
if sram_hold is None or sram_hold <= 0:
|
||||
sram_hold = AD9102_SRAM_HOLD_DEFAULT
|
||||
if sram_hold > 0x0F:
|
||||
sram_hold = 0x0F
|
||||
param0 = sram_samples & 0xFFFF
|
||||
param1 = sram_hold & 0x000F
|
||||
if sram_amplitude is None:
|
||||
sram_amplitude = AD9102_SRAM_AMP_DEFAULT
|
||||
if sram_amplitude < 0:
|
||||
sram_amplitude = 0
|
||||
if sram_amplitude > AD9102_SRAM_AMP_DEFAULT:
|
||||
sram_amplitude = AD9102_SRAM_AMP_DEFAULT
|
||||
param0 = int(sram_amplitude) & 0xFFFF
|
||||
param1 = int(sram_samples) & 0xFFFF
|
||||
else:
|
||||
if saw_step is None:
|
||||
saw_step = AD9102_SAW_STEP_DEFAULT
|
||||
@ -377,8 +415,78 @@ def create_AD9833_ramp_command(saw_step: int = None,
|
||||
|
||||
crc_word = flags ^ param0 ^ param1
|
||||
|
||||
data = flipfour(AD9102_CMD_HEADER) # Word 0 (header)
|
||||
data += flipfour(int_to_hex(flags))
|
||||
data += flipfour(int_to_hex(param0))
|
||||
data += flipfour(int_to_hex(param1))
|
||||
data += flipfour(int_to_hex(crc_word))
|
||||
|
||||
return bytearray.fromhex(data)
|
||||
|
||||
|
||||
def create_AD9833_ramp_command(freq_hz: float,
|
||||
mclk_hz: float = None,
|
||||
enable: bool = True,
|
||||
triangle: bool = True):
|
||||
if mclk_hz is None or mclk_hz <= 0:
|
||||
mclk_hz = AD9833_MCLK_HZ_DEFAULT
|
||||
if mclk_hz is None or mclk_hz <= 0 or freq_hz is None or freq_hz < 0:
|
||||
freq_word = 0
|
||||
else:
|
||||
freq_word = int(round((freq_hz * (1 << 28)) / float(mclk_hz)))
|
||||
if freq_word < 0:
|
||||
freq_word = 0
|
||||
if freq_word > 0x0FFFFFFF:
|
||||
freq_word = 0x0FFFFFFF
|
||||
|
||||
lsw = freq_word & 0x3FFF
|
||||
msw = (freq_word >> 14) & 0x3FFF
|
||||
|
||||
flags = 0
|
||||
if enable:
|
||||
flags |= AD9833_FLAG_ENABLE
|
||||
if triangle:
|
||||
flags |= AD9833_FLAG_TRIANGLE
|
||||
|
||||
crc_word = flags ^ lsw ^ msw
|
||||
|
||||
data = flipfour(AD9833_CMD_HEADER) # Word 0 (header)
|
||||
data += flipfour(int_to_hex(flags))
|
||||
data += flipfour(int_to_hex(lsw))
|
||||
data += flipfour(int_to_hex(msw))
|
||||
data += flipfour(int_to_hex(crc_word))
|
||||
|
||||
return bytearray.fromhex(data)
|
||||
|
||||
|
||||
def create_DS1809_pulse_command(uc: bool = False,
|
||||
dc: bool = False,
|
||||
count: int = 1,
|
||||
pulse_ms: int = None):
|
||||
flags = 0
|
||||
if uc:
|
||||
flags |= DS1809_FLAG_UC
|
||||
if dc:
|
||||
flags |= DS1809_FLAG_DC
|
||||
|
||||
if count is None or count <= 0:
|
||||
count = 1
|
||||
if count > 64:
|
||||
count = 64
|
||||
|
||||
if pulse_ms is None:
|
||||
pulse_ms = DS1809_PULSE_MS_DEFAULT
|
||||
if pulse_ms < 1:
|
||||
pulse_ms = 1
|
||||
if pulse_ms > 500:
|
||||
pulse_ms = 500
|
||||
|
||||
param0 = int(count) & 0xFFFF
|
||||
param1 = int(pulse_ms) & 0xFFFF
|
||||
crc_word = flags ^ param0 ^ param1
|
||||
|
||||
data = flipfour(DS1809_CMD_HEADER) # Word 0 (header)
|
||||
data += flipfour(int_to_hex(flags))
|
||||
data += flipfour(int_to_hex(param0))
|
||||
data += flipfour(int_to_hex(param1))
|
||||
data += flipfour(int_to_hex(crc_word))
|
||||
@ -463,8 +571,12 @@ def decode_DATA(dh):
|
||||
data = {}
|
||||
data['datetime'] = datetime.now()
|
||||
data['Header'] = get_word(dh, 0)
|
||||
data['I1'] = cnv.conv_I_N_to_mA(get_int_word(dh, 1)) #LD1_param.POWER
|
||||
data['I2'] = cnv.conv_I_N_to_mA(get_int_word(dh, 2)) #LD2_param.POWER
|
||||
i1_raw = get_int_word(dh, 1)
|
||||
i2_raw = get_int_word(dh, 2)
|
||||
data['I1_raw'] = i1_raw
|
||||
data['I2_raw'] = i2_raw
|
||||
data['I1'] = cnv.conv_I_N_to_mA(i1_raw) #LD1_param.POWER
|
||||
data['I2'] = cnv.conv_I_N_to_mA(i2_raw) #LD2_param.POWER
|
||||
data['TO_LSB'] = get_int_word(dh, 3) #TO6_counter_LSB
|
||||
data['TO_MSB'] = get_int_word(dh, 4) #TO6_counter_MSB
|
||||
data['Temp_1'] = cnv.conv_T_N_to_C(get_int_word(dh, 5)) #LD1_param.LD_CURR_TEMP
|
||||
@ -479,4 +591,3 @@ def decode_DATA(dh):
|
||||
data['CRC'] = get_word(dh, 14)
|
||||
|
||||
return data
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ R4 = 30000 # Ohm
|
||||
R5 = 27000 # Ohm
|
||||
R6 = 56000 # Ohm
|
||||
|
||||
RREF = 10 # Ohm (current-setting resistor) @1550 nm - 28.7 Ohm; @840 nm - 10 Ohm
|
||||
RREF = 30 # Ohm (current-setting resistor) @1550 nm - 28.7 Ohm; @840 nm - 10 Ohm
|
||||
|
||||
R7 = 22000 # Ohm
|
||||
R8 = 22000 # Ohm
|
||||
|
||||
@ -112,7 +112,7 @@ def send_task_command(prt, sending_param):
|
||||
|
||||
|
||||
|
||||
def start_ramp_max(prt, freq_hz=None, duty=None, saw_step=None, pat_period=None, pat_period_base=None, dac_clk_hz=None, triangle=True, sram_mode=False, sram_samples=None, sram_hold=None):
|
||||
def start_ramp_max(prt, freq_hz=None, duty=None, saw_step=None, pat_period=None, pat_period_base=None, dac_clk_hz=None, triangle=True, sram_mode=False, sram_samples=None, sram_hold=None, sram_amplitude=None):
|
||||
# Start AD9102 sawtooth with configurable frequency/duty or SRAM ramp mode
|
||||
if sram_mode:
|
||||
if sram_hold is None:
|
||||
@ -121,8 +121,9 @@ def start_ramp_max(prt, freq_hz=None, duty=None, saw_step=None, pat_period=None,
|
||||
if dac_clk_hz is None:
|
||||
dac_clk_hz = cmd.AD9102_DAC_CLK_HZ
|
||||
sram_samples = cmd.calc_sram_samples_for_freq(freq_hz, dac_clk_hz, sram_hold)
|
||||
hexstring = cmd.create_AD9833_ramp_command(enable=True, triangle=triangle, sram_mode=True,
|
||||
sram_samples=sram_samples, sram_hold=sram_hold)
|
||||
hexstring = cmd.create_AD9102_ramp_command(enable=True, triangle=triangle, sram_mode=True,
|
||||
sram_samples=sram_samples, sram_hold=sram_hold,
|
||||
sram_amplitude=sram_amplitude)
|
||||
else:
|
||||
if pat_period_base is None:
|
||||
pat_period_base = cmd.AD9102_PAT_PERIOD_BASE_DEFAULT
|
||||
@ -136,8 +137,23 @@ def start_ramp_max(prt, freq_hz=None, duty=None, saw_step=None, pat_period=None,
|
||||
pat_period = cmd.calc_pat_period_for_duty(saw_step, duty, pat_period_base, triangle)
|
||||
if pat_period is None:
|
||||
pat_period = cmd.AD9102_PAT_PERIOD_DEFAULT
|
||||
hexstring = cmd.create_AD9833_ramp_command(saw_step, pat_period, pat_period_base,
|
||||
hexstring = cmd.create_AD9102_ramp_command(saw_step, pat_period, pat_period_base,
|
||||
enable=True, triangle=triangle)
|
||||
cmd.send_AD9102(prt, hexstring)
|
||||
time.sleep(WAIT_AFTER_SEND)
|
||||
status = cmd.get_STATE(prt).hex()
|
||||
if status is not None:
|
||||
print("Received: STATE. State status:", cmd.decode_STATE(status), "("+cmd.flipfour(status)+")")
|
||||
print("")
|
||||
else:
|
||||
print("")
|
||||
|
||||
|
||||
def start_ad9833_ramp(prt, freq_hz=None, mclk_hz=None, triangle=True, enable=True):
|
||||
if freq_hz is None:
|
||||
freq_hz = 0.0
|
||||
hexstring = cmd.create_AD9833_ramp_command(freq_hz=freq_hz, mclk_hz=mclk_hz,
|
||||
enable=enable, triangle=triangle)
|
||||
cmd.send_AD9833(prt, hexstring)
|
||||
time.sleep(WAIT_AFTER_SEND)
|
||||
status = cmd.get_STATE(prt).hex()
|
||||
@ -148,6 +164,18 @@ def start_ramp_max(prt, freq_hz=None, duty=None, saw_step=None, pat_period=None,
|
||||
print("")
|
||||
|
||||
|
||||
def send_ds1809_pulse(prt, uc=False, dc=False, count=1, pulse_ms=None):
|
||||
hexstring = cmd.create_DS1809_pulse_command(uc=uc, dc=dc, count=count, pulse_ms=pulse_ms)
|
||||
cmd.send_DS1809(prt, hexstring)
|
||||
time.sleep(WAIT_AFTER_SEND)
|
||||
status = cmd.get_STATE(prt).hex()
|
||||
if status is not None:
|
||||
print("Received: STATE. State status:", cmd.decode_STATE(status), "("+cmd.flipfour(status)+")")
|
||||
print("")
|
||||
else:
|
||||
print("")
|
||||
|
||||
|
||||
def request_data(prt):
|
||||
# Request data
|
||||
cmd.send_TRANS_ENABLE(prt)
|
||||
|
||||
34
gui.py
34
gui.py
@ -49,6 +49,15 @@ SET_RAMP_DACCLK_TEXT = 'DAC clk (МГц):'
|
||||
SET_RAMP_TRI_TEXT = 'Треугольник'
|
||||
SET_RAMP_SRAM_MODE_TEXT = 'SRAM режим'
|
||||
SET_RAMP_SRAM_SAMPLES_TEXT = 'SRAM точки (samples):'
|
||||
SET_RAMP_SRAM_AMP_TEXT = 'SRAM амплитуда (%):'
|
||||
SET_AD9833_SECTION_TEXT = 'Настройка пилы (AD9833)'
|
||||
SET_AD9833_FREQ_TEXT = 'Частота AD9833 (Гц):'
|
||||
SET_AD9833_MCLK_TEXT = 'MCLK AD9833 (МГц):'
|
||||
SET_AD9833_TRI_TEXT = 'Треугольник AD9833'
|
||||
SET_AD9833_BUTTON_TEXT = 'Пила AD9833'
|
||||
SET_DS1809_SECTION_TEXT = 'DS1809 (UC/DC)'
|
||||
SET_DS1809_UC_BUTTON_TEXT = 'UC импульс'
|
||||
SET_DS1809_DC_BUTTON_TEXT = 'DC импульс'
|
||||
|
||||
|
||||
GRAPH_POINTS_NUMBER = 100 # Number of most recent data points shown on charts
|
||||
@ -236,9 +245,32 @@ def setup_gui(params):
|
||||
[sg.Text(SET_RAMP_SRAM_SAMPLES_TEXT, size=(SET_TEXT_WIDTH_NEW,1)),
|
||||
sg.Input(params.get('RampSramSamples', ''), size=(SET_INPUT_WIDTH,1), key='-RampSramSamples-')],
|
||||
|
||||
[sg.Text(SET_RAMP_SRAM_AMP_TEXT, size=(SET_TEXT_WIDTH_NEW,1)),
|
||||
sg.Input(params.get('RampSramAmp', ''), size=(SET_INPUT_WIDTH,1), key='-RampSramAmp-')],
|
||||
|
||||
[sg.HSeparator(pad=H_SEPARATOR_PAD)],
|
||||
|
||||
[sg.Button(SET_START_BUTTON_TEXT, key='-StartCycle-', disabled_button_color=("Gray22", "Blue"), disabled=True), sg.Button(SET_STOP_BUTTON_TEXT, disabled_button_color=("Gray22", "Blue"), key='-StopCycle-', disabled=True), sg.Button(SET_RAMP_BUTTON_TEXT, key='-StartRamp-', disabled_button_color=("Gray22", "Blue"))]]
|
||||
[sg.Text(SET_AD9833_SECTION_TEXT, size=(SET_TEXT_WIDTH_NEW,1))],
|
||||
|
||||
[sg.Text(SET_AD9833_FREQ_TEXT, size=(SET_TEXT_WIDTH_NEW,1)),
|
||||
sg.Input(params.get('Ad9833Freq', ''), size=(SET_INPUT_WIDTH,1), key='-AD9833Freq-')],
|
||||
|
||||
[sg.Text(SET_AD9833_MCLK_TEXT, size=(SET_TEXT_WIDTH_NEW,1)),
|
||||
sg.Input(params.get('Ad9833Mclk', ''), size=(SET_INPUT_WIDTH,1), key='-AD9833Mclk-')],
|
||||
|
||||
[sg.Text(SET_AD9833_TRI_TEXT, size=(SET_TEXT_WIDTH_NEW,1)),
|
||||
sg.Checkbox('', default=bool(params.get('Ad9833Triangle', True)), key='-AD9833Triangle-')],
|
||||
|
||||
[sg.HSeparator(pad=H_SEPARATOR_PAD)],
|
||||
|
||||
[sg.Text(SET_DS1809_SECTION_TEXT, size=(SET_TEXT_WIDTH_NEW,1))],
|
||||
|
||||
[sg.Button(SET_DS1809_UC_BUTTON_TEXT, key='-DS1809UC-', disabled_button_color=("Gray22", "Blue")),
|
||||
sg.Button(SET_DS1809_DC_BUTTON_TEXT, key='-DS1809DC-', disabled_button_color=("Gray22", "Blue"))],
|
||||
|
||||
[sg.HSeparator(pad=H_SEPARATOR_PAD)],
|
||||
|
||||
[sg.Button(SET_START_BUTTON_TEXT, key='-StartCycle-', disabled_button_color=("Gray22", "Blue"), disabled=True), sg.Button(SET_STOP_BUTTON_TEXT, disabled_button_color=("Gray22", "Blue"), key='-StopCycle-', disabled=True), sg.Button(SET_RAMP_BUTTON_TEXT, key='-StartRamp-', disabled_button_color=("Gray22", "Blue")), sg.Button(SET_AD9833_BUTTON_TEXT, key='-StartRamp9833-', disabled_button_color=("Gray22", "Blue"))]]
|
||||
|
||||
|
||||
layout = [[sg.Column(layout_input_col1, pad=(0,0)), sg.VSeparator(pad=(4,0)), sg.Column(layout_input_col2, pad=(0,0)), sg.VSeparator(pad=(4,0)), sg.Column(layout_input_col3, pad=(0,0))],
|
||||
|
||||
Reference in New Issue
Block a user