Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Zegar szachowy albo planszówkowy.

yugo000 10 Dec 2021 20:14 1608 4
Altium Designer Computer Controls
  • Zegar szachowy albo planszówkowy.

    To pięknie pomalowane cudo, które możemy podziwiać na zdjęciach to zegar szachowy. Służy do odmierzania czasu dla każdego z graczy podczas gry w szachy.
    Dodatkowe opcje zaimplementowane w nim opiszę poniżej.
    Ostatnio na nowo odkryłem ciekawą rozrywkę jaką niewątpliwie są szachy. Niestety pech chciał, że osoby, z którymi grałem śmiało mogły by startować w wyścigach ślimaków. Dlatego moim marzeniem stał się zegar szachowy. Niestety takowy trzeba by kupić... A ja nie lubię zakupów, więc stworzyłem swój. Jako że nie znalazłem na elektrodzie nic podobnego, to postanowiłem opisać ten oto twór.
    Już na wstępie zaznaczę, że ów zegar nie może być używany profesjonalnie, bo odmierzać czas to on za dobrze nie umie : ). Przesadzam. Nie posiada kwarcu i przez to trzeba stosować sztuczki aby zapewnić jako taką dokładność. Ale do rzeczy.

    Sercem układu jest potężny procesor atmega8 w obudowie DIP28. Z uwagi na prostotę postanowiłem polutować wszystko na płytce uniwersalnej. Niestety z wyświetlaczami zrobiłem tak samo... Co zajęło mi strasznie dużo czasu. Na następny raz lepiej wytrawić płytkę. Użyłem tutaj czterech dwusegmentowych wyświetlaczy 0.8 cala ze wspólną anodą. Do sterowanania LEDami użyłem łącznie 16 portów mikrokontrolera co okazało się zbyt dużą ilością bo nie zostało miejsca na kwarc. Mogłem użyć tutaj T74LS42 albo inny wynalazek pozwalający zmniejszyć ilość potrzebnych nóżek do wysterowania 7seg. Kolejne osiem portów poszło na multiplekser. Użyłem tutaj tranzystorów npn ze wspólnym emiterem. Znalazłem w sieci jakieś dziwadła ze wspólnym kolektorem, ale dla mnie to 0.7 wolta naprawdę ma znaczenie.

    Cztery przyciski bezpośrednio podłączone do portów ADC działają jako pojemnościowe. Są kalibrowane podczas włączenia, dlatego lepiej nie trzymać na nich ręki w tym czasie, bo wszystko zwariuje. Mógłbym zrezygnować z autokalibracji, bo właściwie zawsze są te same wartości...


    Zegar szachowy albo planszówkowy.

    Zasilanie pochodzi z trzech baterii AA, lecz może kiedyś to zmienię. Postanowiłem, że będę wysysał baterie do końca, ale nie będę używał żadnych przetwornic więc zrobiłem coś takiego: Od minusa idzie dioda 1N4004, która to ma spadek napięcia ponad 0.7V przy tych kilkunastu (może kilkudziesięciu) mA, które pobiera zegar. Chodziło mi tutaj o jak największy spadek napięcia, kiedy baterie są w pełni naładowane, aby nie świecić za mocno i zużyć trochę mniej prądu. Jeśli baterie są już słabsze (sprawdzane jest to przy każdym uruchomieniu zegara), to następuje włączenie mosfeta IRLML0030, który to zwiera diodę i dzięki temu mamy wyższe napięcie. Tranzystor trzeba dobrać tak aby minimalne Gate Threshold Voltage nie było mniejsze od spadku na diodzie, bo przecież nasz mikrokontroler minimum co może dać na bramkę to właśnie to 0.7V, które ma za diodą. Taki IRLML2502 już by się nie nadał.

    Zegar szachowy albo planszówkowy.

    Jeśli chodzi o zasilanie, to wciśnięte jest tu dwa razy za dużo kondensatorów 100nF z uwagi na łapanie zakłóceń przez przyciski. Ale to chyba za dużo nie dało niestety... Na bateriach wszystko ładnie śmiga ale na zasilaczu gdy mamy połączenie z uziemieniem, albo chociaż z jakąś większą masą, to przyciski pokazują, że są fajnymi antenami i wartości z nich odczytywane nie wahają się już o kilka, lecz o kilkanaście, czy kilkadziesiąt jednostek.



    Co do obudowy, to nawet dobrze udało się wszystko spasować. Wzór wykonałem w eagle jako board : ). Płyta użyta do tego celu to MDF 8mm. Łatwo się tnie i dobrze się klei. Wszystko najpierw pocięte, sklejone wikolem, ściśnięte. Następnie zeszlifowane papierem ściernym. Otwór na spodzie miał być na głośnik, ale okazało się, że w tym miejscu za cicho piszczy. Montaż koszyka na baterie to jeden wielki fail, bo teraz do wymiany baterii trzeba ściągać dół w czym przeszkadzają kable i same baterie, bo jeszcze trochę wystają. Wszystko w środku połapane jest klejem na gorąco albo silikonem. Z nóżek jestem bardzo zadowolony, bo jeszcze nie odpadły : ). Zrobione są z silikonu, mają świetne działanie antypoślizgowe i trzymają dół obudowy. Przed przyklejeniem ich dokładnie odtłuściłem boki, a dolną część posmarowałem smarem, naniosłem grubą warstwę silikonu, wyprofilowałem poślinionym palcem : ) i po kilku minutach odwróciłem aby nadać ostateczny kształt. Aha, przyciski zrobione są ze śrub i nakrętek. Co tu dużo pisać, wszystko widać na zdjęciach. Do malowania użyłem mieszaniny kilku białych farb akrylowych pozostałych z remontów, tzw. kupaż : ). Pierwsze dwie warstwy zrobiłem białe. Później była kolej na artystyczne szlaczki z tej samej farby z dodatkiem pigmentu. Na koniec dwie warstwy bezbarwnego lakieru w sprayu. Mógłbym jeszcze dokleić folie na wyświetlacze - może prezentowały by się lepiej.

    Zegar szachowy albo planszówkowy.

    Jeśli chodzi o program, to skorzystałem z dwóch timerów. Jeden zarządza wyświetlaniem i wywołuje procedurę obsługi przycisków, a drugi zlicza czas. Jeśli się przyjrzeć tabeli z zapisanym wzorem znaków (SEG_TABLE) to można dostrzec, że jest jakoś tak odwrócona. Nie wiem jak to się stało, ale segmenty A,B,C... powinny być raczej uszeregowane od najmniej znaczących bitów, ale jakoś tak dziwnie mi się przylutowało, a nie miałem już siły na poprawki.
    W programie można znaleźć ciekawe sposoby ustalania pozycji kropki:

    Code: c
    Log in, to see the code
    Jestem z nich bardzo dumny : ).
    Obsługa przycisków trwa każdorazowo ok. 0,5ms. Najdłuższy jest odczyt ADC wykonywany tutaj dwa razy. Nie mogłem tego uniknąć i zostawić odczytu na późniejsze wywołanie funkcji, bo muszą one zostać załączone zaraz po sobie. Aha, funkcja może obsłużyć wszystkie porty ADC jeśli będziemy potrzebowali innych przycisków. Dziwnie umieszczone w niej DEFINE'y świadczą o tym, że miałem zamiar zrobić z tego osobną bibliotekę, ale zostało jak jest...

    Zegar szachowy albo planszówkowy.

    Niemałym problemem okazało się odliczanie prawdziwych sekund, spowodowane różnymi wartościami napięcia. Dlatego po włączeniu zegara sprawdzamy je i na tej podstawie dokonujemy korekty wartości, którą porównujemy z TCNT1, do obliczenia jednej sekundy. Jakoś to działa. Choć zapewne było by lepiej cały czas monitorować napięcie... Dodatkowo korekty wymaga też zasilanie buzzera, bo przy 4 woltach piszczy jak szalony, a poniżej 3 ledwo go słychać. Rozwiązane to zostało przez zmianę czasu jego włączenia w zależności do wysokości zasilania.


    Chwilę po załączeniu następuje odczyt parametrów zapisanych w pamięci, takich jak ostatnie czasy dla gry w szachy i czas gry w zegarze planszówkowym. Jakoś nie poczułem potrzeby zapisywania kilku profili do szachów, chociaż o tym myślałem. Ale w praktyce okazało się, że i tak najczęściej gra się z takimi bądź lekko zmienionymi parametrami.
    Przyciski zaimplementowane w zegarze mają takie funkcje (od lewej, patrząc z przodu): 1 - minus, lub przycisk zgłoszenia się gracza po tej stronie, 2 - select, czyli wybór pomiędzy sekundami a minutami, 3 - start: przejście do następnej opcji, działa też jako pauza, 4 - plus i przycisk drugiego gracza.

    Teraz opiszę dostępne tryby:
    1 - Zegar szachowy. Ustawiamy tutaj kolejno: czas dla pierwszego gracza, czas dla drugiego gracza, czas dodawany dla pierwszego gracza po jego ruchu i to samo dla drugiego grającego. Tak jak w zwyczajnym zegarze szachowym czas w jednym momencie płynie tutaj tylko dla jednego gracza. Po przyciśnięciu przycisku włącza się drugi licznik, a ten nieaktywny charakterystycznie mruga. Zrobiłem to tak, że co drugi cykl, nieaktywny wyświetlacz, po prostu nic nie pokazuje.
    2 - Zegar planszówkowy. Stworzony jako taki dodatek do zabawy, bo są wśród nas osoby, na których ruch zbyt często i zbyt długo trzeba czekać. Najpierw wybieramy ilość graczy, a następnie czas na ruch - dla każdego taki sam. Po przyciśnięciu jednego z przycisków plus, bądź minus następuje zmiana aktualnego gracza i odliczanie czasu od początku. Jeśli czas się skończy to usłyszymy dźwięk i odliczanie się zatrzyma, aż go nie wznowimy.
    3 - dwa stopery: lewy i prawy. Najmniejsza jednostka to sekunda. Za start stop odpowiedzialny jest jeden przycisk - plus/minus w zależności od wybranego stopera. Select/start służą do zerowania.
    4 - Test wskazań przycisków. Pokazuje aktualny odczyt z ADC.
    5 - Testy napięcia z zależności co jest wyświetlane i czy włączony jest mosfet.

    Zegar szachowy albo planszówkowy.

    Co bym zmienił gdyby mi się chciało : ) :
    - zmiana zasilania na jakiś akumulatorek i od razu ładowanie przez gniazdo usb, dodatkowo wtedy jakiś komunikat o konieczności naładowania. Chociaż pewnie musiał bym później powalczyć z przyciskami żeby nie nastąpiło ich samoistne włączanie.
    - poprawa dolnej części obudowy. Albo łatwiejsze otwieranie do wymiany baterii, albo wspomniany wcześniej akumulator.
    - wstawienie jakiegoś dekodera, multipleksera, licznika. Czegoś co pozwoli oszczędzić te dwa nieszczęsne port xtal i wstawienie tam rezonatora kwarcowego.

    W załącznikach dostępne są wszystkie pliki: źródłowe, po skompilowaniu, makefile. W fusebitach nie trzeba nic zmieniać.
    Zegar_Sza..wy.zip Download (89.36 kB) obudow..pdf Download (11.33 kB)

    Dołączony schemat powstał dopiero po stworzeniu zegara, aby móc go przedstawić na forum.

    Zegar szachowy albo planszówkowy.

    Na koniec filmik. Niestety w kamerze nie widać za bardzo zmiany w sposobie wyświetlania czasu dla nieaktywnego gracza.

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    yugo000
    Level 11  
    Offline 
    yugo000 wrote 10 posts with rating 18, helped 0 times. Live in city Wola. Been with us since 2006 year.
  • Altium Designer Computer Controls
  • #2
    gulson
    System Administrator
  • Altium Designer Computer Controls
  • #3
    User removed account
    Level 1