Урок 3. Развёртка: экран точка за точкой

В картинках

После этого урока схема будет сама рисовать на экране 64 × 64 — точка за точкой, строка за строкой, как луч старого телевизора. Что рисовать, решает маленькая логика от координат: сегодня это полосы и шахматная доска.


3.1. Идея: луч бежит по строкам

Экран 64 × 64 — это 4096 точек. Схема обходит их все по порядку:

  • счётчик столбца X считает 0…63 на каждом такте;
  • дойдя до 63, его перенос CO разрешает один шаг счётчику строки Y;
  • на каждом такте экран получает адрес (x, y) и бит D0 — гореть ли этой точке.
счётчик Xx = 5счётчик Yy = 3CO: шаг строкиэкранна каждом такте — одна точка;4096 тактов — кадр
Развёртка: счётчик X бежит по строке, в конце строки его перенос двигает Y на строку вниз. На каждом такте экран получает адрес (x, y) и решает одну точку — так рисовали автоматы без процессора.

Так рисовали картинку настоящие автоматы 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 и настрой в ⚙:

Настройка экрана (⚙)Значение
LayoutDots
Height, dots64
Width, dots64
Port width1 dot

Шаг 2. Холст: генератор, два счётчика, узор, экран

ДетальНогаМетка
ClockвыходCLK
InputвыходRST
NOTI0
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 displayX0
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. Проверка

№Что сделатьЧто видно
1RST = 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)

Не получается? Что-то не работает →