start penna zip

This commit is contained in:
PanSi21 2025-11-18 16:01:22 +01:00
parent e60146cdfe
commit 88b607c42f
Signed by untrusted user who does not match committer: PanSi21
GPG key ID: 198E46F625BADD13
188 changed files with 236868 additions and 0 deletions

68
serial_helpers.py Normal file
View file

@ -0,0 +1,68 @@
from matplotlib import pyplot as plt
import numpy as np
VREFINT_CAL = 24175 # internal calibration value (Vref measured with precise 3.3v reference voltage)
VREF_CAL = 3.306 # [Volts] rough estimate from the internal calibration data from factory
TEMP_30_CAL = 12406
TEMP_110_CAL = 16472
def vrefint_conv_plot(numbers):
'''
convert ADC 16bit numbers to tension and evaluate internal reference voltage correction
then plot the data
'''
N_MEAS = len(numbers)
Vref_cal = (3.3*VREFINT_CAL)/np.mean(numbers)
print(f'Calibrated reference voltage: {Vref_cal:.5f} V')
print(f'Vref interno (calibrato): {(VREFINT_CAL*3.3)/2**16:.3f} V')
# convert ADC read to voltage
volts = [i*(Vref_cal/(2**16-1)) for i in numbers]
mean = np.mean(volts)
# plot the result (both the single points and the curve connecting them)
x_coords = range(0,N_MEAS)
plt.plot(x_coords, volts, linewidth='0.8', color='orange', label='result')
plt.scatter(x_coords, volts, marker='+', color='orange')
plt.hlines(mean, 0, N_MEAS, label=f'mean - {mean:.3f}V')
plt.legend()
plt.grid(True)
plt.show()
def temp_conv_plot(numbers):
'''
convert ADC 16bit numbers to temperature and plot the data
'''
slope = ((110-30)/(TEMP_110_CAL-TEMP_30_CAL))*1000
N_MEAS = len(numbers)
temps = [i*(VREF_CAL/2**16)*slope for i in numbers]
mean = np.mean(temps)
# plot the result (both the single points and the curve connecting them)
x_coords = range(0,N_MEAS)
plt.plot(x_coords, temps, linewidth='0.8', color='orange', label='result')
plt.scatter(x_coords, temps, marker='+', color='orange')
plt.hlines(mean, 0, N_MEAS, label=f'mean - {mean:.3f}')
plt.legend()
plt.grid(True)
plt.show()
def generic_plot(numbers, begin, SAMPLE_TIME):
N_MEAS = len(numbers)
# convert ADC read to voltage
volts = [i*(VREF_CAL/(2**16-1)) for i in numbers]
mean = np.mean(volts)
# plot the result (both the single points and the curve connecting them)
x_coords = np.linspace(0, (N_MEAS+1)*SAMPLE_TIME, N_MEAS)
plt.plot(x_coords, volts, linewidth='0.8', color='orange', label='result')
plt.scatter(x_coords, volts, marker='+', color='orange')
#plt.hlines(mean, 0, N_MEAS*SAMPLE_TIME, label=f'mean - {mean:.3f}V')
plt.vlines(30*SAMPLE_TIME, min(volts), max(volts)) # trigger point
plt.legend()
plt.grid(True)
plt.show()