lab1
This commit is contained in:
Binary file not shown.
Binary file not shown.
38
raw-data/лаба-по-схемачу/micropython/main_20kHz.py
Normal file
38
raw-data/лаба-по-схемачу/micropython/main_20kHz.py
Normal file
@@ -0,0 +1,38 @@
|
||||
# ЛР2601, п. 3 порядка выполнения: меандр 20 кГц на выводе микроконтроллера
|
||||
# Плата: ESP32-C3 Super Mini, MicroPython.
|
||||
# Сигнал снимается с GPIO6 (разъём J1, контакт 8) и подаётся на вход первого инвертора.
|
||||
#
|
||||
# Используется аппаратный ШИМ: частота выдерживается точно
|
||||
# и не зависит от скорости интерпретатора Python.
|
||||
|
||||
from machine import Pin, PWM
|
||||
|
||||
OUT_PIN = 6 # номер GPIO, при необходимости поменять
|
||||
FREQ = 20_000 # 20 кГц -> период 50 мкс
|
||||
|
||||
pwm = PWM(Pin(OUT_PIN, Pin.OUT), freq=FREQ, duty_u16=32768) # скважность 50 %
|
||||
|
||||
# Программа ничего больше не делает: ШИМ работает сам по себе.
|
||||
# Остановить: pwm.deinit()
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Вариант только на классе Pin (как в Приложении 3 методички).
|
||||
# Частота получится НЕ ровно 20 кГц: каждая команда Python на ESP32-C3
|
||||
# выполняется несколько микросекунд. Используйте, если преподаватель
|
||||
# требует решение именно через Pin.on()/Pin.off().
|
||||
#
|
||||
# from machine import Pin
|
||||
# import time
|
||||
# p = Pin(OUT_PIN, Pin.OUT)
|
||||
# half = 25 # полпериода 25 мкс
|
||||
# t = time.ticks_us()
|
||||
# while True:
|
||||
# p.on()
|
||||
# t = time.ticks_add(t, half)
|
||||
# while time.ticks_diff(t, time.ticks_us()) > 0:
|
||||
# pass
|
||||
# p.off()
|
||||
# t = time.ticks_add(t, half)
|
||||
# while time.ticks_diff(t, time.ticks_us()) > 0:
|
||||
# pass
|
||||
49
raw-data/лаба-по-схемачу/micropython/main_truth_table.py
Normal file
49
raw-data/лаба-по-схемачу/micropython/main_truth_table.py
Normal file
@@ -0,0 +1,49 @@
|
||||
# ЛР2601, п. 22 порядка выполнения: перебор таблицы истинности 0000..1111
|
||||
# с частотой 10 кГц (новый входной набор каждые 100 мкс).
|
||||
# Плата: ESP32-C3 Super Mini, MicroPython.
|
||||
#
|
||||
# Подключение (разъём J1):
|
||||
# X1 (младший разряд) -> GPIO6 (J1, конт. 8)
|
||||
# X2 -> GPIO7 (J1, конт. 7)
|
||||
# X3 -> GPIO8 (J1, конт. 6)
|
||||
# X4 (старший разряд) -> GPIO10 (J1, конт. 4)
|
||||
# GPIO20/21 не используем: это UART, через него работает консоль MicroPython.
|
||||
|
||||
from machine import Pin
|
||||
import time
|
||||
|
||||
PINS = [6, 7, 8, 10] # X1, X2, X3, X4
|
||||
STEP_US = 100 # 10 кГц -> 100 мкс на один набор
|
||||
|
||||
x = [Pin(n, Pin.OUT, value=0) for n in PINS]
|
||||
|
||||
SIMULTANEOUS = True # True - все 4 бита меняются одной записью в регистр
|
||||
|
||||
# Регистр выходов GPIO ESP32-C3 (Technical Reference Manual, глава GPIO):
|
||||
GPIO_OUT_REG = 0x60004004
|
||||
MASK = 0
|
||||
for n in PINS:
|
||||
MASK |= 1 << n
|
||||
|
||||
|
||||
def write_code(code):
|
||||
if SIMULTANEOUS:
|
||||
from machine import mem32
|
||||
v = mem32[GPIO_OUT_REG] & ~MASK
|
||||
for i, n in enumerate(PINS):
|
||||
if code >> i & 1:
|
||||
v |= 1 << n
|
||||
mem32[GPIO_OUT_REG] = v # все выводы переключаются одновременно
|
||||
else:
|
||||
for i, p in enumerate(x): # по очереди X1, X2, X3, X4 (как в Приложении 3)
|
||||
p.value(code >> i & 1)
|
||||
|
||||
|
||||
t = time.ticks_us()
|
||||
code = 0
|
||||
while True:
|
||||
write_code(code)
|
||||
code = (code + 1) & 0x0F # 0000 -> 0001 -> ... -> 1111 -> 0000
|
||||
t = time.ticks_add(t, STEP_US)
|
||||
while time.ticks_diff(t, time.ticks_us()) > 0:
|
||||
pass
|
||||
Reference in New Issue
Block a user