РадиоКот :: Реализация игры Змейка на светодиодной матрице
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Игрушки >

Теги статьи: Добавить тег

Реализация игры Змейка на светодиодной матрице

Автор: Сергей Безруков (aka Ser60) и Matthew Holcomb, sergeilb60@mail.ru
Опубликовано 08.06.2017
Создано при помощи КотоРед.

Хотел я было начать статью словами типа кто в детстве не играл в такую игру на компе. Однако, спохватившись, осознал, что в моём детстве таких игр не было, как и вообще персональных компьютеров, а нынешнее поколение играло или играет в несравненно более продвинутые электронные игры. Тем не менее, сделать самому такую игру для себя или в подарок может быть кому-то интересно. Помимо всего прочего, это неплохой обучающий проект.

Напомню кратко правила игры. На экране периодически появляются объекты в случайных позициях (мы их называем фрукты), которые “съедаются” змеёй, управляемой пользователем. Змея может двигаться только по вертикали или горизонтали и не допускается при движении выходить за пределы поля или пересекать тело змеи - в этих случаях игра будет закончена. При съедении фрукта длина тела змеи увеличивается и прибавляется некоторое количество очков к счёту. Цель игры - набрать как можно больше очков. Скорость движения змеи увеличивается в процессе игры и в начале её имеется возможность выбрать один из трёх уровней сложности.

В Интернете легко ищутся реализации этой игры для компьютеров или смартфонов с красивой графикой. Однако, начинающим сделать что-то подобное не просто. В нашем случае вся графика реализована на 8×8 монохромной светодиодной матрице с CA, где фрукты индицируются одной точкой. Это был первый микроконтроллерный проект моего студента Мэтта, и мы решили поделиться нашей реализацией с сообществом. Сразу отмечу, что алгоритм игры и вообще её прототип были заимствованы из одного проекта на Arduino [1]. Мы переделали его под другую элементную базу и индикаторы, включая их управление.

Плата на снимке выше расположена горизонтально для удобства чтения. В верхней части платы расположен LCD дисплей, на котором отображается текущий счёт игры и её состояние. При окончании игры на светодиодной матрице высвечивается крест, показанный выше. Начало игры производится нажатием на среднюю кнопку, остальные кнопки предназначены для управления движением головы змеи в соответствующих направлениях. Её туловище при этом следует траектории движения головы.

Для получения растра на матрице используется динамическая индикация, при которой в каждый момент времени высвечивается один столбец матрицы. Смена столбцов производится каждую миллисекунду, что соответствует частоте обновления всего дисплея 125гц. Иррегулярная разводка выводов дисплея на схеме сделана с целью упрощения геометрии печатной платы. Драйвер матрицы IC3 задаёт ток каждого светодиода в столбце, определяемым сопротивлением резистора R12. При питании от батарей пришлось пойти на компромисс между яркостью матрицы и потребляемым схемой током. Кстати, матрица содержит пару светодиодов для каждой точки – красный и зелёный. Нами используется только один из них – зелёный, поскольку чувствительность глаза к зелёному цвету выше чем к красному, что позволило несколько уменьшить ток через светодиоды. Загрузка данных в драйвер производится по интерфейсу SPI на частоте 400кгц. После загрузки данных для очередного столбца формируется краткий строб на входе LE (Latch Enable), в результате которого принятые данные передаются в каскад управления светодиодами. Это исключает мерцание светодиодов в процессе загрузки данных в драйвер. Активизация столбца матрицы выполнена на основе ключей Q1 – Q4, управляемых регистром сдвига IC2. При этом в начале каждого растра в регистр записывается идиница с пина 13 МК и нули для каждого из следующих 7 столбцов. Единица сдвигается регистром при переключении столбцов, что обеспечивает работу лишь с одним из них в каждый момент времени. Координатная система точек матрицы показана ниже. Матрица сканируется не в направлении увеличения или уменьшения х-координаты точек, а в некотором смешанном режиме, определяемом геометрией разводки соединений, что учтено в программе МК.

Загрузка данных в ЖК дисплей HG1 производится также по интерфейсу SPI, линии данных и тактирования которого объединены с драйвером матрицы IC3. В обоих случаях используестя только аппаратный SPI передатчик в МК, т.к. чтение данных из ЖК дисплея и драйвера матрицы не предполагается. Транзистор Q1 служит для включения подсветки ЖК дисплея. Однако, впоследствии для экономии энергии батарей было решено не использовать подсветку. Показания дисплея хорошо видны на свету и без неё.

Логика игры, интерактив с пользователем, и управление матрицей контролируется программой на языке С и микроконтроллером IC1 архитектуры ARM Cortex-M0+. Как отмечалось выше, реализация алгоритма игры с небольшой адаптацией была заимствована из проекта [1] для Arduino. Адаптацию можно было-бы реализовать более красиво в смысле кода, если-бы у Мэтта было больше времени. Использование ARM контроллера семейства Kinetis в проекте продиктовано тем, что он был выбран как стандарт в моём курсе в этом году. Микроконтроллер работает в режиме VLPR (Very Low-Power Run) и в активном режиме тактируется на частоте 4 мгц при частоте шины APB 800кгц. Этого вполне достаточно для реализации игры и его собственное потребление в таком режиме ничтожно по сравнению с остальной частью схемы и составляет около 250мкА.

Схема собрана на односторонней печатной плате, несколько неразведённых соединений реализованы проволочными перемычками. Питание схемы производится от четырёх батарей типоразмера АА с понижением напряжения до 3.3В высокоэффективным DC/DC преобразователем IC4 в стандартном включении. Применение четырёх батарей позволяет пользоваться игрой вплоть до их полного разряда. При этом минимальное напряжение на входе преобразователя не опускается ниже 4В, что необходимо для его нормальной работы. Батарейный отсек закреплён на пластине из оргстекла, установленной на стойках с тыльной стороны платы. К этой-же пластине приклеен выключатель питания ползункового типа.

Токопотребление схемы от батарей зависит от количества индицируемых на дисплее точек и в начале игры, когда тело змеи не длинное, варьируется около 40мА. В конце игры оно увеличивается раза в 1.5 - 2. Именно поэтому для уменьшения тока батарей использован понижающий преобразователь, а не повышающий при работе от одной-двух батарей. Исходный код программы и файл платы для Eagle прилагаются.

Литература

1. Snake Game on 8x8 Matrix using Arduino

 

 

 

 


Файлы:
Плата и исходник


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

24 3 4