Skip to main content

Счётчики

Счётчик — последовательная схема, которая считает тактовые импульсы и хранит текущее значение.

🎓 В курсе nand2cpu
Практика: Урок 24: Счётчик — строим счётчик из D-триггеров

Зачем нужны счётчики

ЗадачаПример
Деление частоты16 МГц → 1 Гц для часов
Подсчёт событийИмпульсы энкодера, обороты
Адресация памятиProgram Counter в CPU
Временные интервалыТаймеры, PWM
ПоследовательностиМашина состояний

Принцип работы

        ┌─────────────────────────────────┐
CLK ────┤                                 │
        │    n-битный счётчик             ├──► Q[n-1:0]
RST ────┤                                 │
        └─────────────────────────────────┘

Каждый фронт CLK: значение += 1
При RST=1: значение = 0

Двоичный счётчик

n-битный счётчик проходит значения от 0 до $2^n - 1$, затем «переполняется» в 0:

3-битный счётчик:

CLK  _│‾│_│‾│_│‾│_│‾│_│‾│_│‾│_│‾│_│‾│_│‾│_
         0   1   2   3   4   5   6   7   0   ← переполнение

Q2   ___________│‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾│___________
Q1   _____│‾‾‾‾‾│_____│‾‾‾‾‾│_____│‾‾‾‾‾│___
Q0   __│‾‾│__│‾‾│__│‾‾│__│‾‾│__│‾‾│__│‾‾│__│
ТактQ2Q1Q0Десятич.
00000
10011
20102
30113
41004
51015
61106
71117
80000 ← overflow

Деление частоты

Каждый бит счётчика делит частоту на 2:

CLK (16 МГц) ─┬─► Q0 (8 МГц)   = CLK/2
              ├─► Q1 (4 МГц)   = CLK/4
              ├─► Q2 (2 МГц)   = CLK/8
              └─► Q3 (1 МГц)   = CLK/16

Формула: частота на бите N = $\frac{f_{CLK}}{2^{N+1}}$

Пример: из 32768 Гц (часовой кварц) получить 1 Гц:

  • Нужно делить на 32768 = $2^{15}$
  • Требуется 15-битный счётчик
  • 1 Гц берём с выхода Q14

Типы счётчиков

Асинхронный (ripple counter)

         ┌───┐    ┌───┐    ┌───┐
CLK ────►│T-FF├─Q─►│T-FF├─Q─►│T-FF├─► Q2
         │   │    │   │    │   │
         └───┘    └───┘    └───┘
          Q0       Q1       Q2
  • Плюс: простая схема
  • Минус: задержки накапливаются (ripple = «рябь»)

Синхронный счётчик

         ┌───┐    ┌───┐    ┌───┐
CLK ─┬──►│D-FF│   │D-FF│   │D-FF│
     │   └───┘   └───┘   └───┘
     │     ↑       ↑       ↑
     └─────┴───────┴───────┘
     
Все триггеры по одному CLK!
  • Плюс: все выходы переключаются одновременно
  • Минус: сложнее логика управления

74HC393 — двойной 4-битный ripple
74HC163 — 4-битный синхронный с параллельной загрузкой

Счётчик с модулем (mod-N)

Не всегда нужен полный диапазон $2^n$. Примеры:

МодульПрименение
mod-10BCD-счётчик (0–9)
mod-12Часы (1–12)
mod-60Секунды/минуты
mod-2568-битный полный

Схема mod-N (сброс по достижении)

         ┌─────────┐
CLK ────►│ счётчик ├──► Q[3:0]
         │         │      │
RST ◄────┤         │      │
   ↑     └─────────┘      │
   │                      ▼
   └────[AND]◄── детектор N

Пример mod-10: сброс когда Q = 1010 (десять)

RST = Q3 AND Q1   (1010: Q3=1, Q2=0, Q1=1, Q0=0)

74HC390 — двойной десятичный счётчик (mod-10)

Счётчик вверх/вниз

         ┌─────────────┐
CLK ────►│             ├──► Q[n-1:0]
         │  Up/Down    │
UP/DN ──►│  Counter    ├──► CARRY
         │             ├──► BORROW
         └─────────────┘

UP/DN = 1: счёт вверх (0,1,2,3...)
UP/DN = 0: счёт вниз  (3,2,1,0...)

74HC193 — 4-битный up/down с раздельными входами

Применение в робототехнике

Энкодер колеса

Импульсы ─────► Счётчик ────► Пройденное расстояние
энкодера       (up/down)      в "тиках"

Направление ──►

Таймер (delay)

1 МГц ────► Счётчик ────► Компаратор ────► Выход
            (16 бит)        = 1000?
                         1 мс интервал

Program Counter (PC)

В CPU счётчик команд — это счётчик с возможностью загрузки:

  • Обычно: PC += 1
  • При JMP: PC = адрес

Подробнее: Урок 28: Program Counter

Микросхемы серии 74xx

МикросхемаТипБитыОсобенности
74HC93Ripple4Делитель ÷2 и ÷8
74HC393Ripple2×4Двойной, независимые
74HC163Синхр.4Загрузка, enable
74HC193Up/Down4Раздельные CLK↑/↓
74HC390Десятич.2×4Mod-10, для дисплея
74HC4040Ripple12Большой делитель

Сигналы управления

СигналНазначение
CLKТактовый вход (по фронту)
RST/CLRСброс в 0
LOADЗагрузка начального значения
ENРазрешение счёта
UP/DNНаправление счёта
TC/COTerminal Count — достигнут максимум

Каскадирование

Для большей разрядности соединяем счётчики:

         ┌────────┐          ┌────────┐
CLK ────►│ 4-bit  ├── TC ───►│ 4-bit  ├──► 8-битный
         │counter │          │counter │    результат
         └────────┘          └────────┘
          Q[3:0]              Q[7:4]

TC (Terminal Count) первого запускает второй при переполнении.

Связь с другими темами

Мини‑задания

  1. Сколько состояний у 4-битного счётчика?

  2. Какая частота на выходе Q3 если CLK = 1 МГц?

  3. Как сделать mod-6 счётчик из 3-битного?

  4. Зачем нужен сигнал TC (Terminal Count)?

  5. В чём недостаток ripple-счётчика?

Details
  1. $2^4 = 16$ состояний (0–15)

  2. $f_{Q3} = \frac{1\text{ МГц}}{2^4} = 62.5\text{ кГц}$

  3. Сброс при Q = 110 (шесть): RST = Q2 AND Q1

  4. TC сигнализирует о переполнении — используется для каскадирования или прерываний

  5. Задержки накапливаются: Q0 переключится раньше Q3, что может вызвать глитчи при чтении