This commit is contained in:
dboyarov
2026-09-24 18:31:50 +03:00
parent 787d33d7ea
commit 6d53a2451e
24 changed files with 8106 additions and 25 deletions

View 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