ai: вариант 6 генератора (PIO, неиспользуемые биты = 0), синхронизация с РПД

- stub/06-dds-pio-zero-rp2040.py: новый вариант; PIO всегда выводит 8 бит
  (out pins, 8), младшие неиспользуемые линии GP8..GP(15-BITS) — выходы в 0
- stub/04-dds-pio-rp2040.py: подтянута шапка с отметкой о проверке на стенде
- task.md, print/: пересобраны из РПД (таблица вариантов + брошюра студента)
- README.md: список вариантов приведён в соответствие
This commit is contained in:
mss
2026-11-02 13:46:40 +04:00
parent 5c9ec93760
commit ebd2ac546a
5 changed files with 1313 additions and 3 deletions
+6
View File
@@ -45,6 +45,9 @@ eumirts5-dds/
│ ├── 01-dds-generator-rp2040.ino ← вариант 1: Arduino C++
│ ├── 01-dds-generator-rp2040-circuitpython.py ← вариант 2: CircuitPython
│ ├── 04-dds-pio-rp2040.py ← вариант 3: PIO + DMA
│ ├── 04-dds-pio-rp2040.ino ← вариант 4: PIO + DMA (Arduino)
│ ├── 05-dds-audiopwm-rp2040.py ← вариант 5: аудио-ШИМ
│ ├── 06-dds-pio-zero-rp2040.py ← вариант 6: PIO, лишние биты = 0
│ ├── 02-izmerenie-achh.py ← автоснятие АЧХ (на ПК)
│ └── 03-blank-otchyota.md ← бланк отчёта
└── print/ ← брошюра задания (DOCX)
@@ -57,6 +60,9 @@ eumirts5-dds/
| `01-...ip2040.ino` | есть Arduino IDE | программный DDS, работает на обоих ядрах |
| `01-...-circuitpython.py` | есть CircuitPython | то же, но медленнее (интерпретатор) |
| `04-dds-pio-rp2040.py` | **рекомендуется** | аппаратный PIO + DMA, точная частота, CPU свободен |
| `04-dds-pio-rp2040.ino` | Arduino, earlephilhower | PIO + DMA; форма сигнала задаётся в коде |
| `05-dds-audiopwm-rp2040.py` | CircuitPython | `audiopwmio`: DMA играет буфер; только до ~3 кГц |
| `06-dds-pio-zero-rp2040.py` | CircuitPython | то же, что `04-...py`, но неиспользуемые младшие биты порта выведены в 0 |
Для варианта на PIO нужна библиотека `adafruit_pioasm` в папке `/lib`
на плате.
+7 -2
View File
@@ -5,8 +5,13 @@
# для режима «синус» формирует аппаратная PIO-машина RP2040, данные в неё
# подаются через DMA, а АЦП читается библиотекой analogbufio.
#
# ЧЕРНОВИК (AI-сгенерировано, 2026-10-27). Требует проверки преподавателем
# на реальном стенде.
# ПРОВЕРЕНО НА СТЕНДЕ 2026-10-28 (преподаватель): цифровой выход PIO
# снят логическим анализатором — форма синуса верная. Лестница R-2R при
# этой проверке НЕ запаивалась, поэтому аналоговая часть (размах после
# внешнего ФНЧ, реальная разрядность по постоянному уровню) ещё не
# измерялась.
#
# AI-сгенерировано, 2026-10-27; проверка цифровой части — 2026-10-28.
#
# Требует библиотеку: adafruit_pioasm -> скопировать в /lib на плате.
# https://github.com/adafruit/Adafruit_CircuitPython_PIOASM
File diff suppressed because it is too large Load Diff
+8 -1
View File
@@ -189,7 +189,7 @@ K(f) = 1 / √(1 + (f/f_c)²), f_c = 1/(2π·R·C)
### Задание A1 (0,5 ч). Прошивка генератора и первый запуск
В папке `stub/` три варианта генератора — **выберите один**:
В папке `stub/` несколько вариантов генератора — **выберите один**:
| Файл | Платформа | Как формируется синус |
|---|---|---|
@@ -198,6 +198,7 @@ K(f) = 1 / √(1 + (f/f_c)²), f_c = 1/(2π·R·C)
| `04-dds-pio-rp2040.py` | CircuitPython | аппаратный PIO + DMA |
| `04-dds-pio-rp2040.ino` | Arduino, **только earlephilhower** | аппаратный PIO + DMA |
| `05-dds-audiopwm-rp2040.py` | CircuitPython | аудио-ШИМ (`audiopwmio`) + DMA; только до ~3 кГц |
| `06-dds-pio-zero-rp2040.py` | CircuitPython | **PIO + DMA**, все 8 линий GP8..GP15 — выходы, неиспользуемые биты = 0 |
**Рекомендуется вариант на PIO** — точная частота, CPU свободен.
Вариант 3 (`04-dds-pio-rp2040.py`) проверен на стенде: логическим
@@ -209,6 +210,12 @@ K(f) = 1 / √(1 + (f/f_c)²), f_c = 1/(2π·R·C)
**в коде** (перекомпилировать после правки) — в C++ нет разбора формул
на лету, как в CircuitPython-версии.
`06-dds-pio-zero-rp2040.py` — тот же вариант 3, но PIO всегда управляет
всеми восемью линиями GP8..GP15: при `BITS < 8` неиспользуемые младшие
биты **выведены в 0** (низкий уровень), а не остаются свободными входами.
Берите его, если на макете видны наводки/«плавающие» уровни на младших
пинах гребёнки R-2R.
1. Залейте файл на Pico (CircuitPython: переименовать в `code.py`).
2. Откройте консоль, введите `HELP` — увидите список команд.
3. Введите `I` — генератор покажет текущие настройки, включая