Информационный портал MSEVM






Главная > Лаборатория > Скопетрис. Играем тетрис на осциллографе.

Lars Pontoppidan

Эта статья посвящена игре <Тетрис>, которую я создал с помощью AtMega32, управляя лучом осциллографа. Эту игру я весьма творчески назвал "Скопетрис".


Осциллограф Telequipment
D61 с запущенным Скопетрисом
Осциллограф Telequipment D61 с запущенным "Скопетрисом".

Проект начался с нескольких резисторных сборок типа R-2R ("цепочки лестницы"), которые я собрал, играя с цепями с действующими резисторами. Благодаря R-2R величина, выраженная в цифровых битах, может быть преобразована в соответствующие значения аналогового напряжения. В цепи наиболее существенному биту соответствует напряжение с Vcc/2, следующему биту - Vcc/4, а следующему за ним - Vcc/8 и т. д. Например, конфигурация цепочки лестницы R-2R для 4-битового преобразователя будет следующей:

конфигурация цепочки лестницы R-2R для 4-битового преобразователя

Используя действующие цепи резисторов и резисторы SMD на платах, я создал две "цепочки лестниц" R-2R для 8-битового аналогово-цифрового преобразователя, который мог напрямую встраиваться в макет и подсоединяться к микроконтроллеру.

R-2R resistor ladder on stripboard

resistor ladder on breadboard

Цепи из действующих резисторов образуют резисторные лестницы по 5.6 К. Это означает, что резисторы 2R должны быть по 11.2 К. Первая попытка состояла в том, чтобы использовать SMD резисторы по 12 К, предполагая, что относительная погрешность в 7% не столь значительна. Но я ошибался: такая точность была более чем неудовлетворительной, а сгенерированный циклический сигнал с диапазоном значений от 0 до 255 имел очень нестабильный период и даже периодически затухал.

Решением стало спаять SMD резисторы по 150 К параллельно с резисторами по 12 К, чтобы в итоге получить 11.11 К. Такой подход устранил проблему с точностью и результирующий сигнал получился превосходным.

Забавы с векторами

Две резисторные лестницы, соединяющие порты AtMega32, были подсоединены к осциллографу в режиме Х/У. Таким образом можно было управлять положением луча, просто приписывая значения регистрам микроконтроллера. Теперь вставал вопрос: что же делать с установкой?.. Конечно же, рисовать на экране!

К сожалению, интенсивностью луча нельзя было управлять, поскольку мы имели дело с настоящим векторным экраном. Но благодаря хорошему старому зеленому фосфору, толщину линии можно было корректировать в зависимости от скорости движения луча.

Как бы то ни было, перемещение луча не было безупречным. Когда его требовалось перемещать на большие расстояния, появлялись проблемы проскакивания, а также периодически на экране появлялись дефекты, связанные с подтормаживанием фильтров. Пытаясь улучшить ситуацию, я поместил несколько буферов на выход цепи R-2R. Это устранило проблему некоторых тормозящих дефектов, но луч все так же продолжал иногда проскакивать. Я подозреваю, что причиной этого могли быть некоторые конденсаторы в R-2R.

тетрис on breadboard
"Скопетрис" на макетной плате.

Тетрис - с цепными реакицями

Теперь, когда у меня была система, способная рисовать на экране осциллографа, я решил создать игру <Тетрис>, чтобы подняться немного выше обычных забав с осциллографами. Я долго и упорно обдумывал то, как лучше всего обрисовать игровое поле. Действительно ли стоит рисовать квадрат или другой символ для каждого занятого куба? Я пришел к выводу, что единственный действительно хороший способ сделать это - нарисовать отдельные кирпичики на игровом поле, отслеживая их контуры.

Это требование ведет к необходимости управления каждым активным кирпичиком, его перемещением и раздроблением. С одной стороны, это увеличило сложность выполнения задачи, но с другой - это стоило того, потому что позволило имитировать истинные тяжесть и цепную реакцию весьма естественно.

Правило цепной реакции - это интуитивное дополнение к стандартным правилам игры "Тетрис". Всякий раз, когда кирпич может упасть, это ведет к возможности удаления дальнейших законченных линий. В этом состоит отличие от традиционного "Тетриса", где кирпичики могут повиснуть в воздухе. Я узнал о правилах цепной реакции, играя в превосходную игру Quadra некоторое время назад.

Графика требует обрисовки всех объектов игры на 100 Гц для гарантии гладкости и отсутствия вспышек. Обрисовав объекты, луч остается в верхнем левом углу игрового поля. Когда количество кирпичиков на площадке растет, обрисовка занимает больше времени, а также может случиться, что частота становится намного меньше 100 Гц, если площадка заполнена.

Управление

Чтобы управлять игрой, я подсоединил 9-выводной коннектор D-Sub к микроконтроллеру,  чтобы можно было использовать стандартный джойстик Atari/C64/Amiga.

Подсчет очков

Эта игра - всего лишь марафон "Тетрис" с увеличивающийся скоростью, а очки - просто число удаленных линий. Скорость, однако, зависит не от числа удаленных линий, а от количества раундов - каждый раз, когда кирпич падает, контуры разрушаются. Таким образом, чтобы набрать большое количество очков, необходимо каждый раз убивать большое количество контуров и, конечно же, быть в состоянии справляться с высокими скоростями.

На английском языке: Scopetris. Play Tetris on Oscilloscope in X/Y Mode







e-mail рассылки
Радиолюбитель
Подписаться письмом

















Яндекс цитирования Rambler's Top100