ads1115
/
main.py
136 строк · 5.4 Кб
1import sys2from machine import I2C, Pin3from sensor_pack_2.bus_service import I2cAdapter4from sensor_pack_2.adcmod import ADC5import ads1115mod6import time7
8'''
9def decode_comp_props(source: ads1115mod.comparator_props):
10"""Выводит в stdout свойства компаратора АЦП"""
11print(f"mode: {source.mode}")
12print(f"polarity: {source.polarity}")
13print(f"latch: {source.latch}")
14print(f"queue: {source.queue}")
15
16
17def get_input_leg_names(in_mux_config: int) -> tuple[str, str]:
18"""возвращает кортеж имен входных выводов микросхемы"""
19if 0 == in_mux_config:
20return "AIN0", "AIN1"
21if 1 == in_mux_config:
22return "AIN0", "AIN3"
23if 2 == in_mux_config:
24return "AIN1", "AIN3"
25if 3 == in_mux_config:
26return "AIN2", "AIN3"
27if 4 == in_mux_config:
28return "AIN0", "GND"
29if 5 == in_mux_config:
30return "AIN1", "GND"
31if 6 == in_mux_config:
32return "AIN2", "GND"
33if 7 == in_mux_config:
34return "AIN3", "GND"
35
36
37def get_full_scale_range(gain_amp: int) -> float:
38"""возвращает диапазон полной шкалы в Вольтах"""
39_fsr = 6.144, 4.096, 2.048, 1.024, 0.512, 0.256
40return _fsr[gain_amp]
41
42
43def decode_common_props(source: ads1115mod.common_props):
44"""Выводит в stdout основные свойства АЦП"""
45if not source.operational_status:
46print("operational status: устройство выполняет преобразование")
47else:
48print("operational status: устройство не выполняет преобразование")
49legs = get_input_leg_names(source.in_mux_config)
50print(f"in mux config: positive leg: {legs[0]}; negative leg: {legs[1]}")
51print(f"gain amplifier +/-: {get_full_scale_range(source.gain_amplifier)} [Вольт]")
52if not source.operating_mode:
53print("operating mode: режим непрерывного преобразования")
54else:
55print("operating mode: режим одиночного преобразования или состояние отключения питания")
56if source.data_rate < 5:
57print(f"data rate: {8 * 2 ** source.data_rate} отсчетов в секунду(!)")
58else:
59tmp = 250, 475, 860
60print(f"data rate: {tmp[source.data_rate - 5]} отсчетов в секунду(!)")
61'''
62
63
64def show_info(sen: ADC):65print(16 * "--")66_td = sen.get_conversion_cycle_time()67print(f"Время преобразования [мкс]: {_td}")68print(f"Коэффициент усиления PGA: {sen.gain}")69print(f"LSB: {sen.get_lsb()}")70print(16 * "--")71
72
73if __name__ == '__main__':74i2c = I2C(id=1, scl=Pin(7), sda=Pin(6), freq=400_000) # on Raspberry Pi Pico75adapter = I2cAdapter(i2c)76
77sensor = ads1115mod.Ads1115(adapter)78print("---Основные настройки датчика---")79gp = sensor.get_general_props()80print(gp)81print(16 * "--")82print("---Информация о текущем канале АЦП---")83ch = sensor.channel84print(ch)85print(16 * "--")86print("---Основные 'сырые' настройки датчика---")87gp = sensor.get_general_raw_props()88print(gp)89print(16 * "--")90#91print("---Одиночный режим измерения---")92my_gain = 293my_data_rate = 094sensor.start_measurement(single_shot=True, data_rate_raw=my_data_rate, gain_raw=my_gain,95channel=0, differential_channel=False)96print("---Основные 'сырые' настройки датчика---")97gp = sensor.get_general_raw_props()98print(gp)99print(16 * "--")100td = sensor.get_conversion_cycle_time()101show_info(sensor)102for _ in range(10):103time.sleep_us(td)104# print(f"value: {sensor.value}; raw: {sensor.get_value(raw=True)}")105print(f"value: {sensor.value}")106sensor.start_measurement(single_shot=True, data_rate_raw=my_data_rate, gain_raw=my_gain,107channel=0, differential_channel=False)108
109print("Определение 'зашкаливания' за предел измерения АЦП")110print(16 * "--")111sensor.start_measurement(single_shot=True, data_rate_raw=my_data_rate, gain_raw=my_gain,112channel=0, differential_channel=False)113td = sensor.get_conversion_cycle_time()114show_info(sensor)115for _ in range(33):116time.sleep_us(td)117ex = sensor.get_raw_value_ex()118voltage = sensor.raw_value_to_real(ex.value)119print(f"get_raw_value_ex: {ex}; voltage: {voltage} Вольт")120sensor.start_measurement(single_shot=True, data_rate_raw=my_data_rate, gain_raw=my_gain,121channel=0, differential_channel=False)122
123print(16 * "--")124print("Автоматический режим измерений АЦП")125print(16 * "--")126sensor.start_measurement(single_shot=False, data_rate_raw=my_data_rate, gain_raw=my_gain,127channel=0, differential_channel=False)128td = sensor.get_conversion_cycle_time()129show_info(sensor)130time.sleep_us(td)131_max = 3000132for counter, voltage in enumerate(sensor):133print(f"Напряжение: {voltage} Вольт")134if counter > _max:135sys.exit(0)136time.sleep_us(td)137