Це сучасна версія класичної гри в хрестики-нулики. Хрестики і нулики представлені за допомогою обираних користувачем кольорів. Передбачено кілька кольорів і кожен гравець може вибрати колір для нулика (або хрестика). Після вибору квітів кнопки дозволяють поставити хрестик (або нулик) в будь незайняте місце на полі розміром 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 с .: іл. – (Електроніка)