ads1115

Форк
0
/
main.py 
136 строк · 5.4 Кб
1
import sys
2
from machine import I2C, Pin
3
from sensor_pack_2.bus_service import I2cAdapter
4
from sensor_pack_2.adcmod import ADC
5
import ads1115mod
6
import time
7

8
'''
9
def decode_comp_props(source: ads1115mod.comparator_props):
10
    """Выводит в stdout свойства компаратора АЦП"""
11
    print(f"mode: {source.mode}")
12
    print(f"polarity: {source.polarity}")
13
    print(f"latch: {source.latch}")
14
    print(f"queue: {source.queue}")
15

16

17
def get_input_leg_names(in_mux_config: int) -> tuple[str, str]:
18
    """возвращает кортеж имен входных выводов микросхемы"""
19
    if 0 == in_mux_config:
20
        return "AIN0", "AIN1"
21
    if 1 == in_mux_config:
22
        return "AIN0", "AIN3"
23
    if 2 == in_mux_config:
24
        return "AIN1", "AIN3"
25
    if 3 == in_mux_config:
26
        return "AIN2", "AIN3"
27
    if 4 == in_mux_config:
28
        return "AIN0", "GND"
29
    if 5 == in_mux_config:
30
        return "AIN1", "GND"
31
    if 6 == in_mux_config:
32
        return "AIN2", "GND"
33
    if 7 == in_mux_config:
34
        return "AIN3", "GND"
35

36

37
def get_full_scale_range(gain_amp: int) -> float:
38
    """возвращает диапазон полной шкалы в Вольтах"""
39
    _fsr = 6.144, 4.096, 2.048, 1.024, 0.512, 0.256
40
    return _fsr[gain_amp]
41

42

43
def decode_common_props(source: ads1115mod.common_props):
44
    """Выводит в stdout основные свойства АЦП"""
45
    if not source.operational_status:
46
        print("operational status: устройство выполняет преобразование")
47
    else:
48
        print("operational status: устройство не выполняет преобразование")
49
    legs = get_input_leg_names(source.in_mux_config)
50
    print(f"in mux config: positive leg: {legs[0]}; negative leg: {legs[1]}")
51
    print(f"gain amplifier +/-: {get_full_scale_range(source.gain_amplifier)} [Вольт]")
52
    if not source.operating_mode:
53
        print("operating mode: режим непрерывного преобразования")
54
    else:
55
        print("operating mode: режим одиночного преобразования или состояние отключения питания")
56
    if source.data_rate < 5:
57
        print(f"data rate: {8 * 2 ** source.data_rate} отсчетов в секунду(!)")
58
    else:
59
        tmp = 250, 475, 860
60
        print(f"data rate: {tmp[source.data_rate - 5]} отсчетов в секунду(!)")
61
'''
62

63

64
def show_info(sen: ADC):
65
    print(16 * "--")
66
    _td = sen.get_conversion_cycle_time()
67
    print(f"Время преобразования [мкс]: {_td}")
68
    print(f"Коэффициент усиления PGA: {sen.gain}")
69
    print(f"LSB: {sen.get_lsb()}")
70
    print(16 * "--")
71

72

73
if __name__ == '__main__':
74
    i2c = I2C(id=1, scl=Pin(7), sda=Pin(6), freq=400_000)  # on Raspberry Pi Pico
75
    adapter = I2cAdapter(i2c)
76

77
    sensor = ads1115mod.Ads1115(adapter)
78
    print("---Основные настройки датчика---")
79
    gp = sensor.get_general_props()
80
    print(gp)
81
    print(16 * "--")
82
    print("---Информация о текущем канале АЦП---")
83
    ch = sensor.channel
84
    print(ch)
85
    print(16 * "--")
86
    print("---Основные 'сырые' настройки датчика---")
87
    gp = sensor.get_general_raw_props()
88
    print(gp)
89
    print(16 * "--")
90
    #
91
    print("---Одиночный режим измерения---")
92
    my_gain = 2
93
    my_data_rate = 0
94
    sensor.start_measurement(single_shot=True, data_rate_raw=my_data_rate, gain_raw=my_gain,
95
                             channel=0, differential_channel=False)
96
    print("---Основные 'сырые' настройки датчика---")
97
    gp = sensor.get_general_raw_props()
98
    print(gp)
99
    print(16 * "--")
100
    td = sensor.get_conversion_cycle_time()
101
    show_info(sensor)
102
    for _ in range(10):
103
        time.sleep_us(td)
104
        # print(f"value: {sensor.value}; raw: {sensor.get_value(raw=True)}")
105
        print(f"value: {sensor.value}")
106
        sensor.start_measurement(single_shot=True, data_rate_raw=my_data_rate, gain_raw=my_gain,
107
                                 channel=0, differential_channel=False)
108

109
    print("Определение 'зашкаливания' за предел измерения АЦП")
110
    print(16 * "--")
111
    sensor.start_measurement(single_shot=True, data_rate_raw=my_data_rate, gain_raw=my_gain,
112
                             channel=0, differential_channel=False)
113
    td = sensor.get_conversion_cycle_time()
114
    show_info(sensor)
115
    for _ in range(33):
116
        time.sleep_us(td)
117
        ex = sensor.get_raw_value_ex()
118
        voltage = sensor.raw_value_to_real(ex.value)
119
        print(f"get_raw_value_ex: {ex}; voltage: {voltage} Вольт")
120
        sensor.start_measurement(single_shot=True, data_rate_raw=my_data_rate, gain_raw=my_gain,
121
                                 channel=0, differential_channel=False)
122

123
    print(16 * "--")
124
    print("Автоматический режим измерений АЦП")
125
    print(16 * "--")
126
    sensor.start_measurement(single_shot=False, data_rate_raw=my_data_rate, gain_raw=my_gain,
127
                             channel=0, differential_channel=False)
128
    td = sensor.get_conversion_cycle_time()
129
    show_info(sensor)
130
    time.sleep_us(td)
131
    _max = 3000
132
    for counter, voltage in enumerate(sensor):
133
        print(f"Напряжение: {voltage} Вольт")
134
        if counter > _max:
135
            sys.exit(0)
136
        time.sleep_us(td)
137

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.