Урок 3. Развёртка: экран точка за точкой
В картинкахПосле этого урока схема будет сама рисовать на экране 64 × 64 — точка за точкой, строка за строкой, как луч старого телевизора. Что рисовать, решает маленькая логика от координат: сегодня это полосы и шахматная доска.
3.1. Идея: луч бежит по строкам
Экран 64 × 64 — это 4096 точек. Схема обходит их все по порядку:
- счётчик столбца
Xсчитает 0…63 на каждом такте; - дойдя до 63, его перенос
COразрешает один шаг счётчику строкиY; - на каждом такте экран получает адрес
(x, y)и битD0— гореть ли этой точке.
Так рисовали картинку настоящие автоматы 1970-х — Pong, Breakout, Space Race: процессора в них не было, были счётчики развёртки и логика «что сейчас под лучом».
Когда писать. Счётчики переключаются на фронте такта, экран пишет на спаде (CLK через NOT) — к этому моменту адрес уже устоялся.
3.2. Сборка
Тот же проект. Стенд урока 2 (генератор, тумблеры, CNT6 на холсте, лампы, табло) удали; Power/Ground оставь. Чип CNT6 остаётся в библиотеке.
Идея. Экран 64 × 64 — это 4096 точек. Чтобы нарисовать картинку, схема обходит их все по порядку, как луч телевизора: счётчик столбца X считает 0…63 на каждом такте, а когда доходит до 63 — его перенос CO разрешает один шаг счётчику строки Y. На каждом такте экран получает адрес (x, y) и бит D0 — гореть этой точке или нет.
Бит точки — любая логика от x и y. В этом уроке это простые узоры, в следующем — фрактал.
Когда писать. Счётчики переключаются на фронте такта. Экран пишет на спаде (CLK через NOT) — к этому моменту адрес уже устоялся.
Шаг 1. Экран
Поставь Dot display и настрой в ⚙:
| Настройка экрана (⚙) | Значение |
|---|---|
| Layout | Dots |
| Height, dots | 64 |
| Width, dots | 64 |
| Port width | 1 dot |
Шаг 2. Холст: генератор, два счётчика, узор, экран
| Деталь | Нога | Метка |
|---|---|---|
| Clock | выход | CLK |
| Input | выход | RST |
| NOT | I0 O0 | CLK nCLK |
| CNT6 (столбец X) | CLK EN RST Q0 Q1 Q2 Q3 Q4 Q5 CO | CLK VCC RST x0 x1 x2 x3 x4 x5 cx |
| CNT6 (строка Y) | CLK EN RST Q0 Q1 Q2 Q3 Q4 Q5 CO | CLK cx RST y0 y1 y2 y3 y4 y5 cy |
| XOR (узор) | I0 I1 O0 | x3 y3 pix |
| Dot display | X0 X1 X2 X3 X4 X5 Y0 Y1 Y2 Y3 Y4 Y5 D0 WE CLK CLR | x0 x1 x2 x3 x4 x5 y0 y1 y2 y3 y4 y5 pix VCC nCLK GND |
Генератор Clock — 60Hz: кадр рисуется больше минуты, зато видно, как бежит развёртка. Потом переключи на быстрый.
Попробуй узоры
Подавай на D0 экрана разные метки — двойной клик по метке у ноги D0, новое имя:
| На D0 экрана | Что на экране |
|---|---|
| VCC | весь экран горит — заливка точка за точкой |
| x0 | вертикальные полосы через точку |
| x3 | вертикальные полосы шириной 8 |
| y3 | горизонтальные полосы шириной 8 |
| pix = XOR(x3, y3) | шахматная доска клетками 8 × 8 |
Бит 3 координаты меняется каждые 8 точек — отсюда полосы шириной 8. XOR двух таких полос и даёт шахматную доску.
3.3. Проверка
| № | Что сделать | Что видно |
|---|---|---|
| 1 | RST = 1, дождаться одного такта, RST = 0 | развёртка начинается с точки (0, 0) — левый верх |
| 2 | генератор на 60Hz | экран заполняется построчно, кадр ≈ 70 секунд |
| 3 | щелчком по корпусу генератора — 4kHz или быстрее | кадр рисуется за секунду-две |
| 4 | перецепи D0 экрана на VCC, x0, x3, y3 по очереди | узоры из таблицы выше |
| 5 | верни D0 на pix | шахматная доска |
Если узор сдвинут или «ползёт» — проверь, что CLK экрана на nCLK, а не на CLK. Если рисуется только одна строка — проверь EN счётчика строки: он должен быть на cx.
Вставка урока 3 (Cmd+I)
Нужны CNT6, NOT, XOR. Стенд урока 2 удали, кроме питания. Экран Dot display вставка ставит сразу настроенным.
# Урок 3 — развёртка: счётчики X и Y пробегают все 64 × 64 точки экрана; узор — из координат.# Вставка: Cmd+I поверх урока 2 (нужны CNT6, NOT, XOR). Стенд урока 2 удалить, кроме питания. # --- на холст: генератор, сброс, счётчик столбца X и счётчик строки Y ---clock{rt=60}(CLK)input(RST)NOT(CLK, nCLK)CNT6(CLK=CLK, EN=VCC, RST=RST, Q0=x0, Q1=x1, Q2=x2, Q3=x3, Q4=x4, Q5=x5, CO=cx)CNT6(CLK=CLK, EN=cx, RST=RST, Q0=y0, Q1=y1, Q2=y2, Q3=y3, Q4=y4, Q5=y5, CO=cy)# узор: шахматная доска клетками 8 × 8 — бит 3 столбца XOR бит 3 строкиXOR(x3, y3, pix)# экран: точка (x, y) получает pix; запись по спаду такта — когда счётчики уже переключилисьdotdisplay SCR{layout=dots, w=64, h=64}(X0=x0, X1=x1, X2=x2, X3=x3, X4=x4, X5=x5, Y0=y0, Y1=y1, Y2=y2, Y3=y3, Y4=y4, Y5=y5, D0=pix, WE=VCC, CLK=nCLK, CLR=GND)Не получается? Что-то не работает →