"3ple Connect" - Проект по Компютърни Архитектури за ATmega8515 и STK500


Задача:

Да се реализира мрежово приложение за STK500 китове и микроконтролери ATmega8515.


Реализираното приложение е играта „Tic-Tac-Toe“ 3x3, позната в България под наименованието „Морски шах“.



Същност на играта:

Играта „Tic-Tac-Toe“ 3х3 е предназначена за двама играчи (не непременно хора:)), всеки от които има различим от на другия играч маркер (знак, пул, пионка...). Игралното поле представлява матрица с размери 3х3. Играчите се редуват, като поставят на всеки ход своя маркер в едно от квадратчетата. Печели играчът, който постави своя маркер в три последователни квадратчета т.е. запълни вертикал, хоризонтал или диагонал само със своя знак. Ако никой не успее да победи, играта завършва наравно.




Хардуерно изпълнение:

За реализацията на този проект са необходими три кита STK500 с микроконтролери ATmega8515. За осъществяване на комуникацията между микроконтролерите се използва интерфейса RS232. Понеже трябва да свържем повече от два кита, е необходим специален кабел, който сами изработваме. Той осъществява кръгова връзка: TXD1->RXD2; TXD2->RXD3; TXD3->RXD1; GROUND1->GROUND2->GROUND3.








Също така свързваме PORTB към LEDS, PORTA към Switches и RS232 Spare: RXD->PD0; TXD->PD1. За образуване на игралното поле 3х3 използваме по три светодиода от всеки кит – LED7, LED5, LED3, както и съответните им бутони за извършване на ходовете от играчите. Button0 се използва за рестартиране на играта.
След като програмираме всички микроконтролери и пуснем китовете, динамично се назначава адрес на всеки от тях. Адресът е изписан на LED1 и LED0 и указва даденият кит на кой ред от игралното поле съответства.




Софтуерна реализация:

Едно от най-интересните неща в проекта е, че и трите микроконтролера работят с абсолютно еднакъв код, но изпълняват различни функции. Това е възможно благодарение на динамичните идентификатори (адреси), които се получават при включването на микроконтролерите. Номерът, който всеки микроконтролер получава, зависи от реда на пускане. Ето го и самият алгоритъм:






Основен проблем при реализацията на играта е, че са ни необходими три състояния на диодите – две за двата цвята фигурки и едно за празните квадратчета. Решението на тази проблемна ситуация е познато от проекта „SwapStones“ по Микропроцесорна техника. Използваме два регистъра, в които зареждаме следните примерни маски:



Когато на даден светодиод се подаде 0 той светва. Организираме цикъл, в който към светодиодите една след друга се подават тези две маски. В резултат на това светодиоди 7, 6, 4 и 2 няма да светят (последните три служат за разделители и винаги са угасени), 5, 1 и 0 ще светят, а 3 ще премигва с много висока честота. Човешкото око не е способно да възприеме това премигване и за него светодиод 3 просто ще свети по-слабо.

Основно се използват четири двойки регистри. Трите двойки съдържат текущото състояние на цялата игра, като се поддържа тяхната синхронизация на всичките микроконтролери. Четвъртата двойка „локални“ регистри се използва за извеждане състоянието на „локалния“ микроконтролер върху светодиодите, такова каквото играчите трябва да го видят.

Необходими са още:
- регистър, съдържащ идентификатора на микроконтролера
- регистър, съдържащ брояч на направените ходове
- регистри с временна информация

Броячът на ходовете служи да се определи, кога играта е завършила без резултат.

















Links:

3ple_connect.asm – сорс-кодът на програмата
http://www.avr-asm-tutorial.net/avr_en/index.html – сайт с много други проекти и допълнителна информация (на английски)