Часть 2 Всем привет. Продолжаем разработку и изготовление "портативной игровой консоли" электронной игрушки своими руками. В предыдущей части мы изготовили модуль, который вы можете видеть на фото. Состоит он из самодельного дисплея, кнопок, различных пластиковых плёнок и нескольких других материалов. Следующая задача заключается в том, чтобы разработать интерфейс подключения. Так как нет оборудования для травления плат, придётся прототип выполнить на макетной плате при помощи проводников. Конструктивно схема состоит из: - Микроконтроллера. Я взял Attiny2313, так как оставался от предыдущих проектов. Конечно, это перебор - ведь в приборе не нужны ни таймеры, ни АЦП, ни аппаратные шины. Можно взять любой другой контроллер, более того, я уверен что игра запустится даже на Attiny13 (который я ставил в утюг из предыдущих постов), просто ему понадобятся сдвиговые регистры HC164 для развёртки дисплея. Мы имеем 9 выводов дисплея (4x5) и 4 кнопки, соответственно, потребуется задействовать 13 I/O портов. - Элемент кнопки. Конструктивно очень прост - состоит из кнопки и двух резисторов. Позволяет устанавливать логические уровни при нажатии на кнопку. Так как игра работает по принципу flip-flap, событие происходит при изменении уровня, то гашение помех не требутся, RC цепочка не нужна. Нам нужно 4 таких элемента:
- LED Матрица. Ничем не отличается от обычного семисегментного индикатора, но имеет организацию 5x4. 5 анодов, 4 катода. Будет организована динамическая LED-индикация по такому принципу:
То есть, поочередно будут сканироваться аноды и катоды, подобно тому, как это было на кинескопном (ЭЛТ) мониторе. Кстати говоря, при использовании такой матрицы в данной игре, есть особенность, что резистор R3 можно установить на аноды (либо катоды), так как одновременно больше одного катода за одну строчку у нас задействовано не будет. В результате этого не будет просадки яркости. Говоря по-простому, я имею ввиду, что два яйца (равно как и две корзины) на одной линии не зажигаются, что соответствует правилам игры. Поэтому при построчном сканировании нет необходимости в дополнительном выравнивании токов светодиодов. Данную конструкцию мы повторяем 5 раз. Для удобства отладки выводим всё на DuPont пины. Один пин (белый) зарезервируем для звука. Разводим все линии и раздаём питание элементам:
Готовая макетная плата:
Далее подключим всё штырьками к MCU (есть самодельная ардуина отладочная плата под 2313):
И создадим проект, подобно тому, как я это делал в самом первом посте с посудомойкой. Велико было искушение написать игру на ассемблере (к тому же, она задействует лишь 25 бит динамической памяти), но чтобы не слишком сильно затягивать отладку, напишем код всё-таки на обычном си. Напишем тестовые паттерны для проверки подключения:
Зажигаем все аноды и по одному катоду. Видно, что все светодиоды линии работают (только на белом надо будет чуть ток ограничить):
Далее, дело остаётся за малым: написать основную программу игры. Программировать её будем в следующем посте. Игра включает: - Рендерер (развёртка матрицы) - подпрограмма для демонстрации содержимого регистров на LED-дисплее. Зарезервируем 5 байт, цикл for разворачивает картинку в 2D плоскость. Игровая часть: - Считывание содержимого кнопок (keyListener)
- Сдвиг переменных, логическое сравнение - Подпрограммы "начало игры, конец игры, потеря жизни у волка" - Звуковая подпрограмма на таймере (будет реализована в отдельном посте) А на сегодня всё, с вами был Kekovsky, писал не знаю зачем для pikabu.ru.