В статье представлена игра "Тетрис" на микроконтроллере ATtiny45 с использованием OLED-экрана 128x32 пикселей на основе SSD1306.

В качестве источника тактового сигнала используется внутренний PLL генератор на 16MHz. Матрица 2*3 из кнопок используется для ввода данных пользователем. Портретная ориентация экрана используется для эффективного использования области экрана.

Контроллер SSD1306, способный управлять экраном OLED 128x64, имеет 1K SRAM. При управлении OLED 128x32 используются только 512 байт. ATtiny45 имеет всего 256 байтов SRAM, что недостаточно для хранения кадрового буфера. Экран отображается в строки по 32 бита, и каждая строка отправляется на четырех страницах одного байта в контроллер дисплея с использованием шины I2C со скоростью до 47 кадров в секунду. Нажатие кнопки вверх и вниз одновременно отображает скорость FPS, если она скомпилирована с флагом DEBUG_FPS. Оставшиеся 512 байт контроллера SSD1306 используются для двойной буферизации, если они скомпилированы с флагом DOUBLE_BUFFER.

В игре используется игровое поле 10х30, реализовано жесткое и мягкое сбрасывание фигур, а также автоматическое смещение с задержкой (DAS), задержка на вход (ARE), предварительный просмотр фрагментов, удержание фигур и система Super Rotation System.

Рекорд и имя игрока сохраняются в EEPROM. Система автоматически перейдет в спящий режим, и игра снова проснется нажатием кнопки.

В игре потребление энергии составляет <20 мА, а энергопотребление в режиме ожидания составляет <1 мА.

Схема устройства

Прошивка

Микропрограмма была разработана в Atmel Studio 7 с использованием GCC C и может быть загружена в ATtiny45 с помощью разъема ISP и программатора ISP, такого как USBasp tool, с помощью avrdude:

avrdude -p t45 -c usbasp -U flash:w:Tetris.hex:i -U eeprom:w:Tetris.eep:i -U hfuse:w:0xDD:m -U lfuse:w:0xE1:m

Автор: Tim Dorssers


Файлы к статье " Тетрис на ATtiny45"
Описание:

Файл прошивки микроконтроллера

Размер файла: 4.98 KB Количество загрузок: 247 Скачать