Schemat ideowy urządzenia pokazano na rysunku 1. Sercem gry jest 32-bitowy mikrokontroler STM32F030C8T6 z rdzeniem Cortex-M0, który jest taktowany przebiegiem o częstotliwości 48 MHz. Do osiągnięcia tej częstotliwości z kwarcu 8 MHz użyto generatora PLL (Phase Locked Loop).
Jako wyświetlacz zastosowano 2,2-calowy wyświetlacz graficzny TFT o rozdzielczości 240×320 pikseli ze sterownikiem ILI9341, komunikujący się za pomocą magistrali SPI. Umożliwia on wyświetlenie do 65 tys. kolorów. Rolę manipulatora pełni 5 przycisków ułożonych w „krzyżak”. Dodatkowo, wyprowadzony został sygnał zerowania (reset) mikrokontrolera.
Zasada działania
Po uruchomieniu układu (dołączeniu zasilania przez przewód USB lub dostępne goldpiny) na ekranie ujrzymy prostą animację powitalną – kilka komunikatów „SUDOKU STM” w różnych kolorach. Układ poprosi nas o wybranie numeru planszy (widzimy napis „Wybierz nr planszy!”). W pamięci znajduje się 10 zaprogramowanych wcześniej zestawów. Od strony kodu wygląda to tak, że w pamięci mamy 2 tablice dla każdej planszy – pierwsza z wartościami wyświetlanymi przy uruchomieniu, natomiast druga zawiera pełne rozwiązanie (listing 1). Obie mają po 81 elementów – kolejne wartości odpowiadają kolejnym polom.
Wyboru planszy dokonujemy przyciskami „w lewo”/„w prawo” i zatwierdzamy przyciskiem środkowym. Po rozpoczęciu zabawy możemy przemieszczać się „kursorem” (podświetlonym na żółto polem) strzałkami góra/dół/lewo/prawo, za pomocą „OK” przechodzimy do trybu edycji pola. Możemy wtedy wybrać liczbę do wpisania lub skorzystać z alternatywnej funkcji strzałki „dół”. Gdy ją wciśniemy dwa razy wykasujemy zawartość wybranej kratki. Również przycisk „góra” ma alternatywne funkcje- podwójny klik sprawdzi poprawność planszy – poprawnie wpisane liczby podświetlą się na zielono, natomiast błędne na czerwono, natomiast poczwórne wciśnięcie przerwie aktywną grę oraz uruchomi wybór nowej planszy (można wybrać tą samą i uzyskać wtedy restart).
Dzięki wykorzystaniu metody callbacków w kodzie do obsługi przycisków odseparowano logikę gry od reszty i została wklejona do osobnych plików. Umożliwia to w łatwy sposób zmianę sterowania np. na pilota IR (diodę IR można podpiąć do wyprowadzeń i z poziomu jej obsługi wywołać odpowiednią funkcję) i zwiększa czytelność kodu.
Dodatkowe możliwości układu
Układ może służyć w funkcji nieskomplikowanej platformy testowej dla różnych projektów na STM32F030C8T6. Większość nieużywanych pinów wyprowadzono na złącze kątowe JP3, a ich nazwy opisano na płytce drukowanej. Można dzięki temu bez problemu dołączyć od lewej strony inną płytkę z potrzebnymi układami lub przyłączyć je przewodami. Dodatkowo, do mikrokontrolera są doprowadzone także wyprowadzenia gniazda na kartę SD znajdujące się na module z wyświetlaczem. Przyda się to przy zapisywaniu bitmap do wyświetlenia na LCD, które z pewnością nie zmieszczą się na LCD (pomimo pamięci aż 64 kB).
Schemat montażowy gry Sudoku pokazano na rysunku 2. Największą trudność może sprawić zamontowanie mikrokontrolera w obudowie LQFP48. Do tej czynności polecam użyć grotu typu mini-fala. Reszta elementów jest co prawda w obudowach SMD, ale jest to rozmiar 0805 lub SMC „A” dla kondensatorów, więc dość spory jak na dzisiejsze standardy.
Wyświetlacz jest montowany na dwóch listwach goldpin (9-pinowej i 4-pinowej). Umożliwia to jego stabilne ułożenie, więc nie potrzeba dodatkowych przykręcanych dystansów, jak ma to miejsce w wyświetlaczu LCD ze złączami po jednej stronie. Przy ich lutowaniu dobrze mieć je nałożone na wyświetlacz, aby mieć całkowitą pewność, ze będą prosto. Piny programujące zostały wyprowadzone na złącze JP4 i odpowiednio opisane na płytce drukowanej. Jako programator można wykorzystać ST-Link wbudowany we wszystkie płytki developerskie typu Discovery lub Nucleo.
Przemek Michalak
thedambo1@gmail.com