added initial config

This commit is contained in:
Ayzen
2026-02-17 22:20:47 +03:00
parent 4066899530
commit 8ca2fe39d0
7 changed files with 225 additions and 126 deletions

View File

@ -3,6 +3,7 @@ import json
import math
import socket
import subprocess
import time
import device_interaction as dev
@ -23,6 +24,14 @@ INITIAL_TEMPERATURE_2 = 28.9 # Set initial temperature for Laser 2 in Celsius: f
INITIAL_CURRENT_1 = 33 # 64.0879 max # Set initial current for Laser 1, in mA
INITIAL_CURRENT_2 = 35 # 64.0879 max # Set initial current for Laser 2, in mA
AD9833_FREQ_DEFAULT_KHZ = 125.0
AD9833_MCLK_DEFAULT_MHZ = 20.0
DS1809_MAX_STEP = 63
DS1809_DEFAULT_STEP = 0
DS1809_INIT_HOME_PULSES = 64
DS1809_INIT_PULSE_MS = 2
DS1809_INIT_STARTUP_DELAY_S = 0.35
#### ---- Functions
def start_task(prt):
@ -73,6 +82,38 @@ def shorten(i):
return "{:.2f}".format(round(i, 2))
def clamp_int(value, min_value, max_value):
if value < min_value:
return min_value
if value > max_value:
return max_value
return value
def format_ds1809_status(step):
return f"{step}/{DS1809_MAX_STEP} шагов"
def initialize_ds1809_position(prt, default_step):
default_step = clamp_int(int(default_step), 0, DS1809_MAX_STEP)
# Give the STM32 side a short startup margin before DS1809 pulse traffic.
time.sleep(DS1809_INIT_STARTUP_DELAY_S)
dev.send_ds1809_pulse(prt, uc=False, dc=True,
count=DS1809_INIT_HOME_PULSES,
pulse_ms=DS1809_INIT_PULSE_MS)
current_step = 0
if default_step > 0:
dev.send_ds1809_pulse(prt, uc=True, dc=False,
count=default_step,
pulse_ms=DS1809_INIT_PULSE_MS)
current_step = default_step
return current_step
def set_initial_params():
params = {}
params['Temp_1'] = INITIAL_TEMPERATURE_1 # Initial temperature for Laser 1
@ -108,9 +149,11 @@ def set_initial_params():
params['RampSramMode'] = False
params['RampSramSamples'] = ''
params['RampSramAmp'] = ''
params['Ad9833Freq'] = ''
params['Ad9833Mclk'] = '25'
params['Ad9833Freq'] = str(AD9833_FREQ_DEFAULT_KHZ)
params['Ad9833Mclk'] = str(AD9833_MCLK_DEFAULT_MHZ)
params['Ad9833Triangle'] = True
params['DS1809Step'] = DS1809_DEFAULT_STEP
params['DS1809Status'] = format_ds1809_status(DS1809_DEFAULT_STEP)
return params
def update_data_lists():
@ -139,12 +182,29 @@ if __name__ == "__main__":
# dev.request_state(prt)
dev.send_control_parameters(prt, params)
saved_data.append(dev.request_data(prt))
draw_data.append(saved_data[0])
window = gui.setup_gui(params)
axes_signs = gui.sign_axes(window)
ds1809_step = initialize_ds1809_position(prt, params['DS1809Step'])
params['DS1809Step'] = ds1809_step
params['DS1809Status'] = format_ds1809_status(ds1809_step)
window['-DS1809Status-'].update(params['DS1809Status'])
initial_data = None
for _ in range(20):
initial_data = dev.request_data(prt)
if isinstance(initial_data, dict):
break
time.sleep(0.05)
if not isinstance(initial_data, dict):
print('Error: initial DATA packet not received. Closing program...')
exit(1)
saved_data.append(initial_data)
draw_data.append(initial_data)
current_and_temperature_settings_available = True
disableStartButton = False
@ -492,22 +552,33 @@ if __name__ == "__main__":
sram_mode=sram_mode, sram_samples=sram_samples,
sram_amplitude=sram_amplitude)
elif event == '-StartRamp9833-':
freq_hz = parse_optional_float(values.get('-AD9833Freq-'))
freq_khz = parse_optional_float(values.get('-AD9833Freq-'))
freq_hz = int(round(freq_khz * 1000.0)) if freq_khz is not None else None
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)
dev.send_ds1809_pulse(prt, uc=True, dc=False, count=1, pulse_ms=DS1809_INIT_PULSE_MS)
ds1809_step = clamp_int(ds1809_step + 1, 0, DS1809_MAX_STEP)
params['DS1809Step'] = ds1809_step
params['DS1809Status'] = format_ds1809_status(ds1809_step)
window['-DS1809Status-'].update(params['DS1809Status'])
elif event == '-DS1809DC-':
dev.send_ds1809_pulse(prt, uc=False, dc=True)
dev.send_ds1809_pulse(prt, uc=False, dc=True, count=1, pulse_ms=DS1809_INIT_PULSE_MS)
ds1809_step = clamp_int(ds1809_step - 1, 0, DS1809_MAX_STEP)
params['DS1809Step'] = ds1809_step
params['DS1809Status'] = format_ds1809_status(ds1809_step)
window['-DS1809Status-'].update(params['DS1809Status'])
elif event == '-StopCycle-':
window['-StopCycle-'].update(disabled = True)
current_and_temperature_settings_available = True
stop_task(prt)
elif event == TIMEOUT_KEY:
data = dev.request_data(prt)
if not isinstance(data, dict):
continue
update_data_lists()
window['-TOUT_1-'].update(gui.READ_TEMPERATURE_TEXT+' 1: '+shorten(data['Temp_1'])+' C')