Elektroda.pl
Elektroda.pl
X
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

picChess - Gra w szachy na dsPIC33F

Kubald 09 Wrz 2012 19:19 3672 0
  • picChess - Gra w szachy na dsPIC33F

    Niniejsze urządzenie jest opartą o mikrokontroler PIC grą w szachy. Celem projektu było stworzenie urządzenia umożliwiającego rozgrywanie partii szachów na monitorze VGA, z inteligentnym komputerem jako przeciwnikiem.

    Autor rozpoczął prace nad urządzeniem jako projektem na studia, lecz w tej chwili wychodzi ono znacznie poza ramy projektu. Obecnie urządzenie jest kompletną grą w szachy z wyjściem wideo, wejściem klawiatury, obsługą dźwięku i dodatkowo – zegarem i termometrem. Wiele czasu zajęło przygotowanie kodu dla procesora i utworzenie procedur obsługi obrazu i dźwięku. Sam kod jest dobrze opisany w komentarzach (głównie po angielsku) i modułowy, więc nie powinno być problemów ze zrozumieniem jego działania.

    Kod źródłowy (do znalezienia na stronie projektu, spakowany w pliku RAR) został podzielony na proste moduły, więc jest prosty do debugowania i wykorzystania. W niektórych podprogramach zostały użyte sprytne sztuczki, warte obejrzenia. Kod źródłowy dzieli się na sekcje obsługujące:
    • Dźwięk
    • Klawiaturę
    • Wyświetlanie
    • Generowanie grafiki
    • Port szeregowy
    • Czujnik temperatury
    • Pamięć nieulotną
    • RTCC (zegar czasu rzeczywistego i kalendarz)
    • Zegar analogowy
    • Silnik szachowy
    • Interfejs użytkownika
    • Grafikę szachów
    • „Grę w życie”


      Każda sekcja została krótko omówiona. Cały kod jest bardzo duży (108 stron) – jednak sekcje pisane są w taki sposób, że możliwe jest bezproblemowe dopisywanie własnego kodu.

      Jeśli chodzi o stronę sprzętową, największym wyzwaniem był dobór procesora, który oprócz obsługi dźwięku i obrazu byłby w stanie pomieścić silnik szachów. Najbardziej wydajnym procesorem dostępnym dla autora „od ręki” był dsPIC33F128MC804 od Microchipa, który to procesor autor kupił, by zacząć tworzyć urządzenia w oparciu o rodzinę dsPIC33F. Procesor ten jest przeznaczony głównie do sterowania silnikami, jakkolwiek posiada przydatny zestaw instrukcji do CPS i wsparcie sprzętowe dla SPI, które może pracować z częstotliwością do 10 MHz, rdzeń o wydajności 40 MIPS, 8 kanałów DMA (umożliwiających wykorzystanie zewnętrznej pamięci przez układy peryferyjne, bez udziału procesora), 4 moduły porównywania wyjść i przetwornik D/A audio.

      picChess - Gra w szachy na dsPIC33F

      picChess - Gra w szachy na dsPIC33F

      Procesor jest taktowany zegarem o częstotliwości 80 MHz, co pozwala w pełni wykorzystać jego moc i pozwolić na pracę SPI z częstotliwością 10 MHz, co jest niezbędne w przypadku obsługi wyświetlania. Zegar jest skalowany dzięki wbudowanej w procesor dsPIC33F pętli PLL.

      Klawiatura PS2 przyłączona jest przy pomocy dwu rezystorów zabezpieczających, port szeregowy obsługiwany jest przez układ ST232, temperaturę mierzy czujnik LM35 (10mV/°C) z filtrem dolnoprzepustowym na wyjściu, zewnętrzna pamięć flash SST25VF016B komunikuje się z procesorem przez SPI, wyjście audio przetwornika D/A daje sygnał o maksymalnej wartości międzyszczytowej 0,7V jest sprzężone kondensatorem ze wzmacniaczem LM380 (w jego podstawowej aplikacji), dając moc wyjściową rzędu 2W przy niskich zniekształceniach. Wyjście VGA jest buforowane poprzez użycie układu 74HCT14.

      Układ zasilany jest trzema napięciami - +5V dla zasilania pozostałych układów scalonych (uzyskiwane ze stabilizatora 7805), +3,3V do zasilania procesora i pamięci flash (uzyskiwane za pomocą układu LM317) oraz niestabilizowane napięcie zasilające wzmacniacz audio.

      Całość urządzenia została wykonana jako małe, samodzielne moduły, które można połączyć używając płytki stykowej.

      Port VGA został wybrany z powodu faktu separacji sygnałów synchronizacji od sygnałów obrazu. Jego obsługa, wraz z bit-bangingiem, byłaby trudna dla procesora o wydajności 40 MISP, ale dzięki użyciu SPI i DMA wykorzystanie procesora ograniczono do 10%. Ponieważ pamięć RAM procesora ma niewielki rozmiar (16k), rozdzielczość obrazu została znacznie ograniczona – wybrano rozdzielczość 800x600 px z odświeżaniem 60 Hz. Aby jeszcze bardziej ograniczyć zużycie pamięci, w wewnętrznym buforze przechowywany jest obraz o rozdzielczości 200x150 px, który jest następnie skalowany – każda linia obrazu powtarzana jest czterokrotnie. Dzięki temu wielkość buforu została ograniczona do 4 kB, dzięki czemu zostało jeszcze miejsce w pamięci do obsługi innych procedur.

      Dodatkowo w kodzie umieszczono obsługę „gry w życie” – możliwej do uruchomienia w każdej chwili i przekształcającej obraz w stan startowy gry, gdzie żywa komórka symbolizowana jest przez biały piksel, a martwa – przez wygaszony. Ponieważ procesor posiada wbudowany zegar RTCC, wystarczyło użyć zewnętrznego kwarcu 32 kHz, aby umożliwić jego pracę i wyświetlanie zegara podczas gry. Dodatkowo w kodzie zaimplementowano obsługę czujnika temperatury, portu szeregowego (głównie używanego do debugowania), klawiatury i pamięci flash.

      Sam silnik gry powstał na podstawie znanych rozwiązań (np. chessprogramming.wikispaces.com) i składa się z następujących części:
    • Generatora poprawnych ruchów figur
    • Modułu oceniania, zwracającego punktową wartość danego układu figur
    • Modułu umożliwiającego wykonanie/cofnięcie ruchu
    • Algorytmu wyszukującego możliwe ruchy w oparciu o algorytm alfa-beta


    O dalszych szczegółach dot. obsługi dźwięku i generowania obrazu można przeczytać na stronie projektu. Dostępne też są tam schematy i kody źródłowe.

    Poniżej film prezentujący pracę całego urządzenia:

    Link


    Źródło

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    Kubald
    Poziom 15  
    Offline 
    Specjalizuje się w: spektroskopia exafs/xanes, uc, it
    Kubald napisał 192 postów o ocenie 65, pomógł 0 razy. Mieszka w mieście Kraków. Jest z nami od 2004 roku.
  • PCBway