"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 се използва за рестартиране на играта. Софтуерна реализация:Едно от най-интересните неща в проекта е, че и трите микроконтролера работят с абсолютно еднакъв код, но изпълняват различни функции. Това е възможно благодарение на динамичните идентификатори (адреси), които се получават при включването на микроконтролерите. Номерът, който всеки микроконтролер получава, зависи от реда на пускане. Ето го и самият алгоритъм:
Основен проблем при реализацията на играта е, че са ни необходими три състояния на диодите – две за двата цвята фигурки и едно за празните квадратчета. Решението на тази проблемна ситуация е познато от проекта „SwapStones“ по Микропроцесорна техника. Използваме два регистъра, в които зареждаме следните примерни маски:
Когато на даден светодиод се подаде 0 той светва. Организираме цикъл, в който към светодиодите една след друга се подават тези две маски. В резултат на това светодиоди 7, 6, 4 и 2 няма да светят (последните три служат за разделители и винаги са угасени), 5, 1 и 0 ще светят, а 3 ще премигва с много висока честота. Човешкото око не е способно да възприеме това премигване и за него светодиод 3 просто ще свети по-слабо. - регистър, съдържащ идентификатора на микроконтролера - регистър, съдържащ брояч на направените ходове - регистри с временна информация Броячът на ходовете служи да се определи, кога играта е завършила без резултат. Links:http://www.avr-asm-tutorial.net/avr_en/index.html – сайт с много други проекти и допълнителна информация (на английски) |