Подключение USB мыши к DE2-115: делаем счётчик кликов
Реализация счётчика нажатий левой и правой кнопок мыши на плате DE2-115 - классическая лабораторная задача, которая помогает разобраться с работой USB HID-устройств и взаимодействием с ПЛИС. В этой статье мы разберём, как подключить USB мышь к отладочной плате Altera DE2-115 и написать модуль на Verilog или VHDL, который будет увеличивать или уменьшать значение счётчика при каждом клике.
Подготовка оборудования и инструментов
Для работы потребуется:
- Плата DE2-115 с разъёмом USB Host (обычно используется чип ISP1362).
- Стандартная USB мышь (поддерживающая HID Boot Protocol).
- Среда Quartus II (или Quartus Prime) для синтеза проекта.
- Готовый IP-ядро или RTL-модуль для работы с USB Host (например, от Terasic или написанный самостоятельно).
Принцип работы USB HID мыши
Мышь в режиме Boot Protocol отправляет четырёхбайтовый пакет: байт состояния кнопок (бит 0 - ЛКМ, бит 1 - ПКМ, бит 2 - СКМ), затем относительные перемещения по X, Y и колёсико. Нам достаточно анализировать только первый байт. При нажатии ЛКМ (0x01) увеличиваем счётчик, при нажатии ПКМ (0x02) - уменьшаем. Важно обрабатывать только фронт нажатия, чтобы одно нажатие не вызывало множественных изменений.
Структура проекта на ПЛИС
Основные блоки:
- USB Host Controller - инициализация шины, обнаружение устройства, получение дескрипторов и запуск передачи данных.
- Декодер HID-пакета - выделение байта состояния кнопок из входящего потока.
- Детектор фронта - определяет момент нажатия (переход из 0 в 1 для каждого бита).
- Счётчик - 8- или 16-битный реверсивный счётчик, значение которого выводится на семисегментные индикаторы или светодиоды.
Реализация счётчика на VHDL
Пример фрагмента кода для обработки кнопок:
process(clk, reset)
begin
if reset = '1' then
counter <= (others => '0');
prev_buttons <= (others => '0');
elsif rising_edge(clk) then
prev_buttons <= buttons;
-- ЛКМ: фронт 0->1 по биту 0
if buttons(0) = '1' and prev_buttons(0) = '0' then
counter <= counter + 1;
end if;
-- ПКМ: фронт 0->1 по биту 1
if buttons(1) = '1' and prev_buttons(1) = '0' then
counter <= counter - 1;
end if;
end if;
end process;Сигнал buttons получается из декодированного HID-пакета. Значение счётчика можно вывести на семисегментные индикаторы через мультиплексор и BCD-преобразователь.
Отладка и возможные проблемы
Наиболее частые трудности:
- Мышь не определяется - проверьте, поддерживает ли она Boot Protocol (большинство современных мышей работают в режиме Report, а не Boot). В этом случае потребуется более сложный парсер.
- Дребезг контактов - хотя USB-пакеты приходят уже стабильными, иногда могут дублироваться; используйте детектор фронта с гистерезисом или временной фильтр.
- Сброс счётчика - добавьте кнопку сброса на плате для обнуления значения.
Заключение
Подключение USB мыши к DE2-115 - вполне решаемая задача, если разбить её на этапы: инициализация USB Host, приём HID-пакетов, декодирование кнопок и управление счётчиком. Предложенный подход позволяет реализовать счётчик с приращением и уменьшением по кликам ЛКМ и ПКМ, а также выводить результат на индикаторы платы.