Урок 7. Электронный кубик

В картинках

Новых микросхем в этом уроке нет: всё, что нужно, уже лежит в библиотеке. На холсте — кубик из семи ламп. Держишь «Бросить» — грани мелькают, отпускаешь — выпадает случайная.


7.1. Идея: счётчик на шесть

У кубика шесть граней, значит, нужен счётчик, который считает 1, 2, 3, 4, 5, 6 и снова 1. Делитель из урока 2 считает до 8 или 16 — лишние состояния пришлось бы обрывать сбросом. Есть способ проще: счётчик Джонсона. Три триггера стоят по кругу, каждый на фронте берёт значение соседа, а первый — перевёрнутое значение последнего. Единицы заполняют ряд слева, потом нули вытесняют их — шесть состояний, и по кругу:

  • грань 1: 000, грань 2: 100, грань 3: 110;
  • грань 4: 111, грань 5: 011, грань 6: 001.

Соседние состояния отличаются одним битом, поэтому лампы не мигают при переходе.

D Q074HC74D Q174HC74D Q274HC74Q2N — перевёрнутый Q2000100110111011001
Счётчик Джонсона: три триггера по кругу, в первый идёт перевёрнутый последний. Единицы заполняют ряд, потом нули их вытесняют — шесть состояний (подписаны Q0 Q1 Q2), шесть граней, и снова 1.

7.2. Идея: номер грани → точки

На кубике всего четыре группы точек: центр и три пары. Каждая группа — один провод:

  • центр горит на 1, 3 и 5 — там в номере чётное число единиц: два XOR из 74HC86 и НЕ;
  • пара A (по диагонали) горит на всех гранях, кроме 1: Q0 ИЛИ Q2;
  • пара B (другая диагональ) — на 4, 5 и 6, а там Q2 = 1: лампы прямо на Q2, без вентиля;
  • пара C (посередине) — только на 6: Q2 И НЕ Q1.
DC · центрНЕ (Q0 XOR Q1 XOR Q2)грани 1, 3, 5DA · пара ↖↘Q0 OR Q2грани 2, 3, 4, 5, 6Q2 · пара ↗↙прямо Q2грани 4, 5, 6DD · пара ← →Q2 AND Q1Nграни 6
Семь точек кубика — всего четыре провода: центр и три пары. Каждый провод — один-два вентиля от Q0 Q1 Q2.

7.3. Идея: честный бросок

Пока держишь «Бросить», 74HC08 пропускает такт на счётчик. Такт идёт быстро — грань меняется сотни раз за секунду, и где счётчик остановится, решает только момент, когда ты отпустишь кнопку. Так устроены электронные кубики и рулетки в настоящих игрушках.

7.4. Сборка

Тот же проект, что в уроке 6: в библиотеке все микросхемы набора. Новых микросхем нет — кубик собран из того, что уже есть.

Шаг 1. Генератор и кнопки

Clock — частоту поставь побыстрее: пока держишь «Бросить», грани мелькают так быстро, что угадать нельзя. Кнопка «Бросить» — ROLL, «Сброс» — RST.

ДетальНогаМетка
ClockвыходCLK
Button «Бросить»выходROLL
Button «Сброс»выходRST

Шаг 2. Сброс и центр — 74HC04

nRST = НЕ RST: у 74HC74 сброс — активный 0. Второй НЕ даёт центральную точку DC (ниже — откуда PAR). Остальные входы — на GND.

ДетальНогаМетка
74HC041A
1Y
2A
2Y
3A
4A
5A
6A
RST
nRST
PAR
DC
GND
GND
GND
GND

Шаг 3. Такт по кнопке — 74HC08

SPIN = CLK И ROLL: такт доходит до счётчика, только пока держишь «Бросить». Второй И — пара точек DD, она горит только на шестёрке.

ДетальНогаМетка
74HC081A
1B
1Y
2A
2B
2Y
3A
3B
4A
4B
CLK
ROLL
SPIN
Q2
Q1N
DD
GND
GND
GND
GND

Шаг 4. Счётчик на шесть — две 74HC74

Три триггера по кругу: Q0 берёт перевёрнутый Q2 (Q2N), Q1 — Q0, Q2 — Q1. Четвёртый триггер второй 74HC74 не нужен: его CP и D — на GND, RD и SD — на VCC.

ДетальНогаМетка
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
nRST
Q2N
SPIN
VCC
Q0
Q0N
Q1N
Q1
VCC
SPIN
Q0
nRST
74HC741RD
1D
1CP
1SD
1Q
1QN
2SD
2CP
2D
2RD
nRST
Q1
SPIN
VCC
Q2
Q2N
VCC
GND
GND
VCC

Шаг 5. Центр — 74HC86

PAR = Q0 XOR Q1 XOR Q2 — 1, когда единиц нечётное число. Центр горит на гранях 1, 3, 5, а там единиц чётное число, поэтому DC = НЕ PAR (тот второй НЕ в 74HC04).

ДетальНогаМетка
74HC861A
1B
1Y
2A
2B
2Y
3A
3B
4A
4B
Q0
Q1
X01
X01
Q2
PAR
GND
GND
GND
GND

Шаг 6. Пара A — 74HC32

DA = Q0 ИЛИ Q2 — горит на всех гранях, кроме единицы.

ДетальНогаМетка
74HC321A
1B
1Y
2A
2B
3A
3B
4A
4B
Q0
Q2
DA
GND
GND
GND
GND
GND
GND

Шаг 7. Семь точек

Две лампы DA, две Q2, две DD — это пары точек, у пары один провод. Расставь лампы квадратом 3 × 3, как точки на кубике (следующий шаг).

ДетальНогаМетка
LEDвходDC
LEDвходDA
LEDвходDA
LEDвходQ2
LEDвходQ2
LEDвходDD
LEDвходDD

Шаг 8. Где какая точка

Если смотреть на кубик сверху:

МестоЛампа
↖ слева сверхуDA
↗ справа сверхуQ2
← слева посерединеDD
• центрDC
→ справа посерединеDD
↙ слева снизуQ2
↘ справа снизуDA

Вставка ставит лампы столбиком — перетащи их квадратом, как на рисунке:

DAQ2DDDDQ2DADC
Так лампы стоят на холсте: квадрат 3 × 3, метки левого столбика — слева, правого — справа, у центральной метку DC можно увести вниз. Горит грань 5: DA, Q2 и центр DC.

7.5. Проверка

  1. Нажми Сброс — горит одна точка в центре: «1».
  2. Подержи Бросить и отпусти — кубик останавливается на случайной грани. Бросай ещё: выпадают все грани от 1 до 6.
  3. Чтобы увидеть грани по порядку, поставь Clock на самую медленную частоту и держи «Бросить»: 1, 2, 3, 4, 5, 6, снова 1.
ГраньQ0 Q1 Q2Горят
10 0 0DC
21 0 0DA DA
31 1 0DA DA DC
41 1 1DA DA Q2 Q2
50 1 1DA DA Q2 Q2 DC
60 0 1DA DA Q2 Q2 DD DD

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


Вставка урока 7 (Cmd+I)

Поверх урока 6.

# Урок 7 — электронный кубик на микросхемах набора: счётчик Джонсона на 74HC74 (6 состояний), точки — вентили в корпусах.# Вставка: Cmd+I поверх урока 6 (все микросхемы — в библиотеке). # ---------- кубик ----------clock(CLK)button{label="Бросить"}(ROLL)button{label="Сброс"}(RST)# переворот сброса (у 74HC74 — активный 0) и центр кубика74HC04(1A=RST, 1Y=nRST, 2A=PAR, 2Y=DC, 3A=GND, 4A=GND, 5A=GND, 6A=GND)# пока держишь «Бросить», такт идёт на счётчик; и пара C — грань 6 (Q2 = 1, Q1 = 0)74HC08(1A=CLK, 1B=ROLL, 1Y=SPIN, 2A=Q2, 2B=Q1N, 2Y=DD, 3A=GND, 3B=GND, 4A=GND, 4B=GND)# счётчик Джонсона: три триггера по кругу, в первый — перевёрнутый последний (Q2N)74HC74(1RD=nRST, 1D=Q2N, 1CP=SPIN, 1SD=VCC, 1Q=Q0, 1QN=Q0N, 2QN=Q1N, 2Q=Q1, 2SD=VCC, 2CP=SPIN, 2D=Q0, 2RD=nRST)74HC74(1RD=nRST, 1D=Q1, 1CP=SPIN, 1SD=VCC, 1Q=Q2, 1QN=Q2N, 2SD=VCC, 2CP=GND, 2D=GND, 2RD=VCC)# центр — на гранях 1, 3, 5: там чётное число единиц; чётность — два XOR, переворот — в 74HC04 выше74HC86(1A=Q0, 1B=Q1, 1Y=X01, 2A=X01, 2B=Q2, 2Y=PAR, 3A=GND, 3B=GND, 4A=GND, 4B=GND)# пара A — все грани, кроме 1 (000): Q0 ИЛИ Q274HC32(1A=Q0, 1B=Q2, 1Y=DA, 2A=GND, 2B=GND, 3A=GND, 3B=GND, 4A=GND, 4B=GND)# 7 точек кубика: центр DC, пары DA (↖ ↘), Q2 (↗ ↙ — грани 4, 5, 6), DD (← → — грань 6)led(DC)led(DA)led(DA)led(Q2)led(Q2)led(DD)led(DD)

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