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

Elektroniczna kostka do gry na PIC12F683

tsmki 29 Wrz 2017 12:28 6054 17
  • Elektroniczna kostka do gry na PIC12F683
    Opisana poniżej kostka do gry została wykonana na potrzeby gry w chińczyka z dziećmi. Zwykła kostka nie była wygodna, wywoływała dyskusje, czy dostatecznie dobrze się potoczyła, potrzebne było miejsce na rzuty.Kostka elektroniczna pozwala na szybką, dynamiczną grę.
    Kostka została umieszczona w obudowie typu Z-47 o wymiarach 20x40x50 mm z półprzezroczystego czerwonego tworzywa. Wyświetlające wynik rzutu kostką czerwone diody LED zostały umieszczone pod wierzchnią obudową, dzięki czemu nie było potrzeby wiercić w obudowie otworów.
    Elektroniczna kostka do gry na PIC12F683
    Na wierzchu obudowy został umieszczony sensor dotykowy, znacznie wygodniejszy niż przycisk.
    Zastosowanie takiego rozwiązania wynikło z doświadczenia - w poprzednim egzemplarzu kostki musiałem kilkukrotnie wymieniać przycisk, który nie wytrzymywał tak intensywnej eksploatacji.
    Kostkę zasila łatwo dostępne, tanie ogniwo CR2032, przede wszystkim małe, dzięki czemu kostka mieści się w małej, zgrabnej obudowie. Rozważałem pominięcie wyłącznika zasilania i wprowadzenie procesora w stan uśpienia, ale ostatecznie z tego zrezygnowałem. Układ został zmontowany na kawałku płytki uniwersalnej z użyciem kynara i kilku elementów SMD. Diody wyświetlające są skonfigurowane w 4 sekcje, umożliwiające wyświetlenie potrzebnych wyników rzutu kostką. Sercem urządzenia jest procesor PIC12F683, energooszczędny, tani, mały ale o dużych możliwościach.
    Elektroniczna kostka do gry na PIC12F683
    Program został napisany w języku GCBasic.
    Działanie kostki pokazałem na zamieszczonym filmie.





    Podczas dotykania sensora kostka "toczy się", a po puszczeniu zatrzymuje się wyświetlając wynik rzutu.
    LEDy po kilku sekundach zaczynają stopniowo przygasać, aż w końcu pozostają w stanie ledwo świecącym, ale pozwalającym na odczyt stanu kostki.
    Przygasanie zrealizowałem z wykorzystaniem techniki PWM, czyli regulacji szerokości impulsu. Takie rozwiązanie pozwoliło na znaczną redukcję prądu pobieranego z niezbyt pojemnego ogniwa.
    Aby wynik był możliwie losowy, uzyskiwany jest w dość rozbudowany sposób. Po puszczeniu sensora dokonywane jest 8 pomiarów napięcia na pinie 6 ustawionym w stan wysokiej impedancji. W tych warunkach na tym pinie występuje głównie szum, a najbardziej przypadkowy jest stan najmłodszego bitu w wyniku. Z 8 takich bitów tworzę słowo o losowej wartości. By wprowadzić jeszcze większą przypadkowość, słowo to XORuję z losowym słowem z poprzedniego rzutu. Następnie obliczam MODULO 6, które jest wynikiem rzutu.
    Wsad do procesora zamieściłem w pliku kostka.txt.
    Elektroniczna kostka do gry na PIC12F683Elektroniczna kostka do gry na PIC12F683Elektroniczna kostka do gry na PIC12F683


    Fajne!
  • #2 29 Wrz 2017 14:02
    vayo
    Poziom 14  

    Parę lat temu zrobiłem córce a'la kostkę (bo wyświetla cyfry, a nie oczka) i też kombinowałem z losowością wyniku. Generowałem kilkukrotnie liczbę losową i sumę tych liczb dzieliłem przez liczbę losowań. Po pewnym czasie okazało się to jednak niezbyt losowym wynikiem. Planowałem to zmienić na odczyt z ADC, ale na planach się skończyło. To co Ty zastosowałeś to mistrzostwo świata. Jak to Twój pomysł, to gratuluję wyobraźni :-)

  • #4 29 Wrz 2017 15:05
    gulson
    Administrator Systemowy

    tsmki napisał:
    Niestety, nie będę się przyznawał do nie swoich pomysłów.
    Zainspirował mnie:
    http://mikrokontrolery.blogspot.com/2011/04/generator-liczb-losowych.html
    Polecam, bardzo interesujące.


    Przy okazji warto wspomnieć, że @dondu to nasz moderator forum :)

  • #5 29 Wrz 2017 15:14
    IS
    Poziom 16  

    Wykorzystanie szumu do generowania liczb losowych to standard. Najczęściej wzmacnia się szumy z półprzewodników. Próbek musi być znacznie więcej aby wynik był losowy. Jednak do takiego zabawowego zastosowania w zupełności wystarcza koncepcja autora. Przy okazji ciekawe zastosowanie uC PIC.

  • #6 29 Wrz 2017 16:12
    vayo
    Poziom 14  

    IS napisał:
    Wykorzystanie szumu do generowania liczb losowych to standard.

    Zdaje sobie z tego sprawę, bo sam chciałem to zastosować, ale nie spotkałem się jeszcze z braniem z pomiarów tylko najmłodszych bitów i sklejania z nich bajtu -to mnie w tym projekcie urzekło :-)

  • #7 29 Wrz 2017 16:37
    22053
    Użytkownik usunął konto  
  • #8 29 Wrz 2017 23:08
    dp-mion7
    Poziom 12  

    R-MIK napisał:
    Co do losowości, to w przypadku takiej prostej kostki, to po naciśnięciu przycisku uruchamiałbym timer liczący z podzielnikiem 1. Po puszczeniu przycisku, mamy wartość w praktyce losową, bo nie da sie przytrzymać przycisku z dokładnie zadanym czasem, z dokładnością rzędu us.
    - dokładnie tak. To najlepiej odzwierciedla rzut prawdziwą kostką bo wynik ma zależeć od ruchu ręką gracza (a nie że ktoś lub coś losuje za niego). Poza tym to można zrobić dosć prosto bez uC.
    Przy okazji przypomniała mi się kostka DICE+. To był fajny pomysł.

  • #9 30 Wrz 2017 00:32
    22053
    Użytkownik usunął konto  
  • #10 30 Wrz 2017 19:58
    Tadekszw
    Poziom 9  

    brakuje mi kropek na shemacie i niewiem jak to polaczyc

  • #11 01 Paź 2017 19:46
    vidmo91
    Poziom 9  

    Cześć,
    też kiedyś robiłem kostkę na malutkim uC, ale na ATtiny13. Kostka była bez bajerów typu wizualizacja itp. Żeby zminimalizować zużycie energii wprowadzałem procesor w uśpienie zaraz po wyświetleniu wyniku, a wybudzał go tylko zewnętrzny reset. Program tylko wyświetlał wylosowaną liczbę i szedł spać. Losowanie było najprostsze: wynik z pływającego ADC modulo 6. Dodatkowo żeby się pobawić zastosowałem charlieplexing, co pozwoliło wykorzystać 3 wyjścia do sterowania kostką. Projekt opisałem (po angielsku) o tutaj. Są tam zdjęcia, schemat i kod.

  • #12 04 Paź 2017 14:18
    Tadekszw
    Poziom 9  

    zmontowalem kostke wszystko ok tylko nie umiem zamienic pliku txt na plik hex. czy mozna prosic o ten plik hex bardzo prosze

  • #13 04 Paź 2017 14:33
    22053
    Użytkownik usunął konto  
  • #15 04 Paź 2017 15:58
    22053
    Użytkownik usunął konto  
  • #16 04 Paź 2017 22:21
    vidmo91
    Poziom 9  

    R-MIK napisał:
    Tadekszw napisał:
    zmontowalem kostke wszystko ok tylko nie umiem zamienic pliku txt na plik hex. czy mozna prosic o ten plik hex bardzo prosze

    Zmień rozszerzenie :-)

    Pokaż ten plik txt, bo nie wiem czy trzeba go kompilować.


    Plik jest w pierwszym poście. Jest to wsad, jak pisze kolega R-MIK trzeba zmienić rozszerzenie..

    PS. zawartość następująca:
    Code:
    :020000040000FA
    
    :020000002828AE
    :10000800FE00030EFF0083120A08A5008A018B1E5A
    :1000180012280B1D122832210B111B2883168C1C49
    :100028001B2883128C1C1B2844218C101B2883122C
    :0E00380025088A007F0E8300FE0E7E0E090052
    :10005000F7208B170B178B160130AB000730AA0067
    :10006000052183168C1402308312AA000830A900DF
    :100070001B218030831692008312A4018316811302
    :100080008F300F058312A70070302704A800831655
    :100090008F0005128512051185108515051415149C
    :1000A00036308312AC008500FF30A0001215051811
    :1000B000572805185F280A30F200F301E9200518D7
    :1000C00057281211AC012C08850005166430F20087
    :1000D000F301E92005120A30F200F301E9200518C6
    :1000E0008A2885166430F200F301E92085120A306F
    :1000F000F200F301E92005188A2805156430F200A2
    :10010000F301E92005110A30F200F301E920051896
    :100110008A286528AC012C08850083168514723066
    :100120009F00853083129F00A101A10A9F140F3008
    :10013000F200F301E920A20D221083161E1CA22852
    :1001400083122214083083122102031C9528843064
    :100150009F00703083169F00851003308312A20722
    :10016000220DA20D22082306A200A3002208F500FA
    :100170000630F90055217008AD00AD08031DC328F5
    :100180000230AC00E4282D03031DC9280430AC0064
    :10019000E42802302D02031DD0280630AC00E428EC
    :1001A00003302D02031DD7281430AC00E42804309E
    :1001B0002D02031DDE281630AC00E42805302D0288
    :1001C000031DE4283430AC002C088500542863005B
    :1001D000E728F30A0430F100A530F000F00BEE2818
    :1001E000F10BEC28F20BEA28F30BEA2808000000D8
    :1001F000703083168F0483129F131F1083169F0184
    :10020000073083129900850108002A08073C031C67
    :10021000AA01C030831601058312A600AA04023089
    :100220002B02031D1529AA161629AA122A088316BD
    :100230008100831208002A08033C031CAA01290834
    :100240000F3C031CA9012908F5000830F9006921B9
    :100250007008A6002A082604AA0012192A152A08DE
    :10026000920008000B112008B43C031839290A3009
    :10027000A0022008643C03183F290530A002200892
    :10028000003C031CA003080085012009831692008E
    :100290008312A408031D51292C0885002008831609
    :1002A000920083129101A4090800F90803190800BB
    :1002B000F0010830F4000310F50DF00D7908F0029C
    :1002C00075140318662975107908F007F40B5B297B
    :1002D0000800F00175087918F0070310F90C0310F5
    :0A02E000F50DF908031D6A29080056
    :02400E00C43FAD
    :00000001FF

  • #17 05 Paź 2017 10:38
    tsmki
    Poziom 10  

    Niestety Elektroda nie dopuszcza do załączania plików z rozszerzeniem .hex, dlatego musiałem zrobić takie obejście z rozszerzeniem .txt. Tak jak Koledzy wcześniej opisali, wystarczy ściągnąć plik kostka.txt, zmienić nazwę na kostka.hex i to załadować do programatora.
    Wydawało mi się, że będzie to oczywiste, dlatego tego nie opisywałem.

  • #18 05 Paź 2017 11:05
    22053
    Użytkownik usunął konto