Sudoku AVR

Sudoku AVR

Dziś opiszę jak zrobić prostą gierkę w sudoku na atmedze 328p i kolorowym wyświetlaczu ze sterownikiem ILI9341. Może się przydać na nudnym wykładzie itp :)

Materiały

Do wykonania tego projektu będą potrzebne:

– atmega 328p

– wyświetlacz 2,2” ILI9341

– 6 switchy

– kawałek laminatu jednostronnego

– garść podstawowych elementów (rezystory, kondensatory itp. wszystko widać na schemacie)

– jako źródło zasilania użyłem baterii ze starego tabletu, daje ona napięcie ok 3,7V

Wykonanie:

Płytkę wytrawiamy według schematu:

schemat

płytka

Na schemacie oraz płytce znajduje się miejsce na kwarc, jednak okazało się, że jest on zbędny i taktowanie 8MHz w zupełności wystarcza.

Osobiście stosuję metodę termotransferu. Poniżej kilka zdjęć z przebiegu:

DSCN0760 DSCN0761

Następnie pocynowałem płytkę stopem Lichtenberga:

DSCN0764

Po polutowaniu i uruchomieniu wygląda to tak:

DSCN0786

Z takiej baterii zasilam swój układ.

Na schemacie trzeba też uwzględnić jedną poprawkę – myślałem, że mogę wykorzystać pin MISO do innych celów, jednak byłem w błędzie i musiałem dorobić zworkę od pinu MOSI do PB0.

Do programowania układu wykorzystane są wyprowadzenia wyświetlacza i dodatkowy pin do resetu ( nad czerwonym przyciskiem resetu).

Działanie:

Muszę przeprosić za jakość zdjęć – kolory są całkiem inne w rzeczywistości, tylko niestety mój aparat tego nie ogarnia.

Po uruchomieniu wita nas krótka animacja i ekran startowy:

20150322_161251

Następnie musimy wybrać nr planszy. W moim kodzie jest ich 5 – kolejne możecie dodać na ich podstawie wytłumaczę co i jak w części opisującej kod:

DSCN0782

Tutaj po wczytaniu planszy:

DSCN0783

Teraz przemieszczamy się “strzałkami” po planszy, środkowy przycisk to “enter”. Po jego wciśnięciu możemy przyciskami lewo/prawo wybrać jaką cyferkę mamy wstawić w polu na którym się znajdujemy. Możemy wtedy wcisnąć też dolny przycisk – spowoduje to wymazanie wartości z komórki, natomiast w przypadku górnego przycisku – jego podwójne wciśnięcie to sprawdzenie planszy – podświetlają się na zielono pola poprawnie wypełnione, potrójne wciśnięcie to zakończenie gry i wybór nowej planszy.

DSCN0784 DSCN0785

Widać to trochę lepiej na poniższym filmiku:

Program

Program napisany został w języku C w środowisku Eclipse LUNA.

Zajmuje on 5592B więc bez problemu wejdzie też na atmegę8, jednak nie miałem pod ręką wersji na niższe napięcie.

Dodawanie własnych plansz:

Tak wyglądają moje wgrane plansze. Tablice tab0-tab4 zawierają elementy, które mają się wyświetlić przy rozpoczęciu nowej gry dla danej planszy. Tablice tab_0-tab_4 zawierają ich pełne rozwiązania zakładając, że prawdziwe sudoku ma tylko jedno rozwiązanie. Tablice wskaźników do nich przekazywane są do odpowiednich funkcji wyświetlających.

Zapisywane są one do pamięci flash mikrokontrolera, stąd te atrybuty “PROGMEM” przy nich.

Wszystkie pliki można pobrać tutaj: pliki.

 

Ocena: 4.66/5 (głosów: 93)

Podobne posty

17 komentarzy do “Sudoku AVR

    • Czemu tak nisko oceniasz kolegę za to, że pominął coś co jest oczywiste – minimalne podłączenie pinów procesora ?

      Odpowiedz
      • Dlatego, że (garść podstawowych elementów) nie jest niczym jasnym dla początkującego który to czyta. Jedni są bardziej w temacie inni mniej. Więc publikując wpis liczyć się też trzeba z innymi użytkownikami. Oczywiście pomijając to że na schemacie można to znaleźć. Myślę, że autor nie ma mi tego za złe.

        Odpowiedz
    • Sposób inicjalizacji pozlepiany ze znalezionych przykładów. Reszta funkcji przerobiona z mojej biblioteki do wyświetlacza z nokii 5110.

      Odpowiedz
  • Skoro korzystasz już z SPI, nie myślałeś o wpakowaniu tam karty SD ? Oczywiście zawierającej dużą liczbę plansz.

    Odpowiedz
  • A jak rozwiązałeś problem migotania ekranu przy odświeżaniu.
    Bo na tym samym wyświetlaczu ma termometr i przy każdym odświeżeniu temp . ekran mi miga.

    Odpowiedz
    • Nie zauważyłem u siebie migania – nawet przy odświeżaniu całego ekranu. Może to kwestia filtracji zasilania ?
      Co innego miganie na filmikach – ono nie jest widoczne gołym okiem.

      Odpowiedz
  • Proponuje pójść dalej – ten ekran jest (chyba) dotykowy, o wiele user-friendly byłoby wprowadzanie rysikiem w miejsce kursorów.

    Odpowiedz
  • Swietny projekt. Atmelowskie AVR-ki maja ogromone mozliwosci, wszystko zalezy od konstruktora, ogranicza go jedynie poziom kreatywnosci. Co do propozycji wykorzystania sudoku przez autora, na nudne wyklady zgodze sie, sam klepalem wielokrotnie (papierowe oloweczkiem :D) ale za te glosne microswitch’e moj wykladowca wywalil by mnie za drzwi od razu :D, jak udawac ze sie slucha to dyskretnie.

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?