- Wymiary PCB: 127×58 mm,
- zasilanie: 2×1,2 V (akumulatory AA),
- możliwość zasilania zewnętrznego,
- CPU z rdzeniem z rodziny ARM9 (STR911),
- współpracuje z modułem dipARM (ZL21ARM),
- wbudowany wzmacniacz audio,
- kolorowy wyświetlacz LCD z Nokii 6100 (132×132 punkty),
- wbudowana przetwornica podświetlacza,
- wbudowany interfejs komunikacyjny RS232.
Trochę historii
Pierwsze gry z namiastką trójwymiarowości pojawiły się około roku 1973, ale nie zdobyły popularności - w tamtych czasach komputer był rzadkością. W latach 80. powstało kilka nowych tytułów, głównie na automaty i domowe komputery 8-bitowe (ZX Spectrum, Atari, itp.). Ze względu na ich mizerną moc obliczeniową, gry te nie zachwycały jakością grafiki.
Przełom nastąpił na początku lat 90. wraz z upowszechnieniem PC-tów. W 1991 roku nikomu jeszcze wówczas nie znana firma Id Software opublikowała grę Hovertank 3D, w której zadaniem gracza było eksplorowanie podziemnych labiryntów obserwowanych oczami bohatera i likwidowanie napotkanych po drodze przeciwników. Kilka miesięcy później pojawiła się gra Catacomb 3D, bazująca na zmodyfikowanym silniku graficznym Hovertank, umożliwiającym nakładanie tekstur na ściany labiryntów. Wprowadzono też widok dłoni bohatera trzymającej broń, co pogłębiało wrażenie obserwowania świata gry z perspektywy pierwszej osoby.
W roku 1992 ukazał się Wolfenstein 3D. Gra została wydana na zasadach shareware - wersja z mniejszą liczbą poziomów była dostępna za darmo. Dzięki takiemu sposobowi dystrybucji oraz niewielkim wymaganiom sprzętowym Wolf3D odniósł spektakularny sukces i do dziś jest uważany za prekursora gatunku First Person Shooter (FPS).
Po Wolfensteinie firma Id Software tworzyła kolejne, coraz bardziej zaawansowane technologicznie gry, z których większość stała się hitami - chyba każdy słyszał o Doomie, Hereticu czy Quake’u (jeden z pierwszych FPS-ów z prawdziwą grafiką trójwymiarową).
Sprzęt
Przy projektowaniu „konsoli”, na której będzie działał Wolf3D, przyjąłem następujące założenia:
- forma - kieszonkowa konsola do gier sterowana za pomocą kilku przycisków,
- urządzenie ma być w miarę proste i tanie w wykonaniu (najbardziej kosztowne elementy mogłyby być wykorzystane do innych projektów bez niszczenia konsoli),
- mikrokontroler - ARM z jak największą ilością wbudowanej pamięci, zarówno Flash, jak i RAM. Dane gry muszą się gdzieś zmieścić, a stosowanie zewnętrznych pamięci odpada ze względu na wymaganą prostotę sprzętu. Moje wymagania spełnia układ STR911FW44 firmy STMicroelectronics, wyposażony w rdzeń ARM966E-S pracujący z maksymalnym zegarem 96 MHz, wyposażony w 512 kB pamięci Flash oraz 96 kB RAM-u. Ponadto, są produkowane DIP-moduły oparte na tym mikrokontrolerze, dzięki czemu można go wykorzystać w innych projektach, gdy gra nam się znudzi. Jedynym minusem jest dość kiepska dokumentacja mikrokonrolerów STR91x (mam nadzieję, że STM szybko to poprawi),
- wyświetlacz - kolorowy, łatwy do zdobycia, tani - wymagania te wyśmienicie spełniają wyświetlacze od telefonów Nokia 6100, 6610 i kilku innych modeli,
- dźwięk - jak wyżej, czyli bez drogich lub specjalizowanych układów,
- zasilanie - 2 akumulatorki R6, albo zasilacz sieciowy.
Jak już wspominałem „sercem” konsoli jest mikrokontroler STR911FW44 w formie DIP-modułu z dwoma dwurzędowymi złączami typu IDC, oznaczonymi na schemacie jako JP1 i JP2. Pracuje on z zegarem 96 MHz (maksymalna dopuszczalna częstotliwość taktowania), wytwarzanym przez wbudowany w układ powielacz częstotliwości z PLL. Mikrokontroler może być programowany w systemie przez złącze JTAG (CN3) pasujące do programatora ST FlashLink. Rezystory R1…R6 podciągają wszystkie sygnały interfejsu JTAG do napięcia zasilania.
Ekranem konsoli jest wyświetlacz od telefonu Nokia 6100 o rozdzielczości 132×132 z kontrolerem Epson S1D15G10. Ponieważ w sprzedaży są dwa warianty różniące się złączami (dwurzędowe mikrozłącze SMD z rastrem 0,5 mm lub jednorzędowe z rastrem 1,27 mm), urządzenie zostało wyposażone w obydwa typy złącz (CN5, CN6). Wyświetlacz komunikuje się z mikrokontrolerem za pomocą interfejsu szeregowego zgodnego z SPI. Linie DIN i SCLK są obsługiwane przez kontroler SSP (Synchronous Serial Port), zaś linie /CS i /RESET są obsługiwane przez linie I/O.
Zastosowany wyświetlacz ma wbudowane podświetlenie (dwie białe diody LED). Zasila je prosta przetwornica podwyższająca napięcie (elementy L1, T1, D1, C3, C4). Tranzystor T3 jest kluczowany przez kontroler PWM mikrokontrolera. Napięcie na rezystorze R7, proporcjonalne do prądu płynącego przez LED-y, jest doprowadzone do przetwornika A/C w mikrokontrolerze. Takie rozwiązanie umożliwia programową regulację jasności wyświetlacza - dobieramy wypełnienie przebiegu sterującego T3 tak, aby uzyskać żądany prąd podświetlenia.
Urządzenie obsługuje się za pomocą sześciu dużych mikroprzełączników oznaczonych SW1…SW6 (kursory oraz Fire i Action) oraz dwóch mikroprzełączników kątowych (SW7, SW8). Przyciski są podciągnięte do napięcia +3,3 V przez rezystory R11…R18 i podłączone bezpośrednio do pinów GPIO mikrokontrolera.
Jak na porządną konsolę do gier przystało, mamy również dźwięk, wytwarzany przez timer pracujący w trybie PWM. System dźwiękowy nie spełnia co prawda surowych audiofilskich wymagań, ale za to jest prosty i tani. Przebieg z wyjścia PWM trafia do filtru dolnoprzepustowego złożonego z elementów R19, C13, tłumiącego częstotliwości powyżej 5 kHz. Rezystor R20 zmniejsza amplitudę sygnału tak, aby nie przesterować wzmacniacza mocy (IC3) typu LM386, zaś kondensator C10 eliminuje składową stałą. Wyjście wzmacniacza IC3 należy podłączyć do niewielkiego głośniczka przez złącze CN4.
Na uwagę zasługuje zastosowany w konsoli układ zasilania. Dostarcza on napięć +5 V (do zasilania minimodułu z STR911 i wzmacniacza audio) oraz +3,3 V (zasilanie LCD, JTAG, RS232). Napięcie +5 V wytwarza stabilizator MAX710 (IC1) firmy Maxim, będący połączeniem przetwornicy impulsowej step-up ze stabilizatorem LDO. Dzięki takiemu rozwiązaniu układ ma bardzo szeroki zakres napięć wejściowych (od 1,8 V do 11 V) przy prądzie obciążenia 250 mA (przy Uwe > 3 V - 500 mA). Umożliwiło to zasilanie konsoli zarówno z dwóch „paluszków” R6, jak i z zasilacza sieciowego o napięciu do 11 V DC. Uklad MAX710 potrzebuje kilku elementów zewnętrznych, najważniejsze z nich to:
- cewka (L2) o indukcjności z zakresu 18...100 μH,
- dwa kondensatory elektrolityczne (C11, C12) przeznaczone do pracy przy dużych częstotliwościach (np. tantalowe) o niskiej rezystancji szeregowej (low ESR),
- 1-amperowa dioda Schottky'ego (D2).
Diody D3 i D4 zabezpieczają urządzenie przed odwrotnym podłączeniem zasilania. Ponadto D3 odłącza baterie, jeśli korzystamy z zasilacza sieciowego. Napięcie +3,3 V jest wytwarzane z +5 V przez standardowy stabilizator LDO typu 1117 (IC4).
Konsolę wyposażono w interfejs RS232 (IC2, CN7). Był on pomocny przy testowaniu oprogramowania, może także posłużyć do zaprogramowania mikrokontrolera za pomocą bootloadera, jeśli nie mamy odpowiedniego interfejsu JTAG.