Проект tinyAVR 13. Игра "крестики-нолики"

December 21, 2014 by admin Комментировать »

Это современная версия классической игры в крестики-нолики. Крестики и нолики представлены с помощью выбираемых пользователем цветов. Предусмотрено несколько цветов и каждый игрок может выбрать цвет для нолика (или крестика). После выбора цветов кнопки позволяют поставить крестик (или нолик) в любое незанятое место на поле размером 3×3. В устройстве девять RGB-светодиодов. В этом проекте светодиоды управляются путем обычного мультиплексирования. На рис. 3.49 изображена блок-схема устройства. Для подачи сигнала, что пользователь выиграл, есть зуммер. Микроконтроллер распознает, когда три светодиода одного цвета окажутся в строке, столбце или по диагонали и останавливает игру. После завершения (выигрыша, проигрыша или ничьей) можно сыграть новую партию.

Рис. 3.49. Блок-схема игры "крестики-нолики"

Спецификация проекта

Цель проекта— создать современную версию классической игры в крестики- нолики. В устройстве применено десять RGB-светодиодов. Один светодиод указывает, чья очередь делать ход. Остальные девять светодиодов организованы в матрицу 3×3. Для управления размещением очередного знака есть несколько кнопок. Предусмотрен также зуммер, сигнализирующий о победе. Устройство работает от внешних батарей, в качестве вторичного источника встроен стабилизатор напряжения.

Описание устройства

До настоящего момента во всех проектах этой главы использовалось мультиплексирование по методу Чарли (чтобы управлять большим числом светодиодов при помощи ограниченного числа выводов). Здесь реализовано обычное мультиплексирование. Принципиальная схема проекта изображена на рис. 3.50. Благодаря стабилизатору напряжения LM2940 входное напряжение может варьироваться от 6 до 20 В. D1 — это диод Шоттки (1Ν5819), который работает как защитный (как уже объяснялось ранее). Конденсатор СЗ фильтрует выбросы и нежелательные помехи источника питания. С2 подключен к выходу LM2940. С1 и С4 распаяны около контактов питания микроконтроллера (для дальнейшего развязывания помех, возникающих в схеме). Микроконтроллер — ATtiny861.

Рис. 3.50. Принципиальная схема игры “крестики-нолики"

Светодиоды объединены в четыре столбца и мультиплексированы. COLO — это первый столбец матрицы размером 3×3, COL1 — второй, COL3 — третий. В каждом столбце по три RGB-светодиода. В столбце COL4 есть только один RGB-светодиод, который во время игры обозначает очередность ходов. ΤΙ, Т2, ТЗ и Т4 — это транзисторы η-канальные MOSFET (NDS355), работающие как источники тока для четырех столбцов. Есть три кнопки, подключенные как в проекте забавных часов. Они мультиплексированы со столбцами. SG1 — это зуммер, подающий сигнал о выигрыше.

Код этого проекта самый сложный из всех описанных до настоящего момента. Он обеспечивает программную широтно-импульсную модуляцию для всех светодиодов. Для каждого цветового компонента есть девять уровней интенсивности, следовательно, можно сгенерировать 9x9x9 цветов. Из этих цветов в программе записаны только 16 самых контрастных. После включения схемы игроки выбирают цвета, которыми они будут играть. После этого они ходят при помощи кнопок. Программа после каждого хода проверяет условия выигрыша. Если игрок выигрывает, то три выигравших символа начинают мигать и в течение полсекунды звучит звуковой сигнал. После нажатия на копку перезапуска игра продолжается теми же цветами, но первый ход предоставляется второму игроку (и т. д.).

Конструкция

Компоновку платы в EAGLE (вместе с принципиальной схемой) можно скачать по ссылке: www.avrgenius.com/tinyavrl.

Плата односторонняя (на Стороне компонентов всего несколько перемычек). Стороны печатной платы показаны на рис. 3.51 и 3.52.

Рис. 3.51. Печатная плата (сторона компонентов)

Рис. 3.52. Печатная плата (сторона печатных проводников)

Программирование

Откомпилированный исходный код (вместе с файлом MAKEFILE) можно скачать по ссылке: www.avrgemus.com/tinyavrl.

Тактовая частота— 8 МГц. Контроллер программируется при помощи STK500 в режиме программирования ISP. Листинг 3.11 содержит самый важный фрагмент кода.

Листинг 3.11

while(1)

{

playerturn(bl,rl,gl,1); checkwin();

player turn (b2, r2 , g2,2) ; checkwin();

}

Это главный бесконечный цикл программы. Первые три аргумента функции playerturn указывают интенсивность синего* красного и зеленого компонентов. Четвертый аргумент обозначает номер игрока. Функция playerturn отвечает за фиксацию выбранного игроком цвета. Функция checkwm проверяет условия выигрыша для обоих игроков (по правилу "магического" квадрата: суммы по всем его строкам, столбцам и диагоналям одинаковы). В нашем коде каждой позиции присваивается определенный номер. Когда игрок выставляет свой цвет на светодиоде, соответствующий номер заносится в буфер игрока. Если игрок занял светодиоды, сумма трех из которых равна магическому квадрату, значит, данный игрок выиграл. Перед этим циклом функция start позволяет игрокам выбрать цвет для игры.

Заключение

В этой главе мы изучили новые конфигурации светодиодов и управление ими способами .мультиплексирования. Мы подробно обсудили также управление интенсивностью свечения светодиодов с помощью аппаратной ШИМ микроконтроллеров tinyAVR. В некоторых устройствах использовались восьмиконтактные микроконтроллеры, которые управляли семисегментными индикаторами в две с половиной цифры при помощи мультиплексирования по методу Чарли. Мы рассмотрели несколько проектов, которые можно модифицировать для других приложений. В следующей главе мы опишем несколько проектов с еще одним популярным устройством — графическим жидкокристаллическим дисплеем.

Источник: Гадре, Д., Занимательные проекты на базе микроконтроллеров tinyAVR / Дхананья Гадре, Нигул Мэлхотра: Пер. с англ. — СПб.: БХВ-Петербург, 2012. — 352 с.: ил. — (Электроника)

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты