Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Żabber, czyli przenośna gra na AVR (konkurs)

ilikepie 31 Gru 2011 18:46 9505 16
  • Żabber, czyli przenośna gra na AVR

    Żabber, czyli przenośna gra na AVR (konkurs)

    Witam serdecznie!
    Konkurs zmobilizował mnie do spełnienia dziecięcej wizji napisania swojej własnej gry. Jest nią klon "Froggera", stąd właśnie wzięła się nazwa. W założeniach miało być to proste i małe urządzenie, i tak też się stało :). Na początku całość miała mieścić się w starym Game Boy'u, ale przeszkodą były Y-kształtne śrubki. Na szczęście wpadła mi w ręce karta pamięci od Dreamcasta, znacznie mniejsza, ale jak się okazało - wystarczająca. Konsola już dawno wyzionęła ducha, więc karty pamięci nie było żal.

    Sercem urządzenia jest Atmega8A (na podstawce, można więc napisać coś innego i użyc konsolki do innych celów). Zajęte jest dokładnie 99,5% pamięci (8140 bajtów). Wyświetlacz to ekran z Nokii 3310. Mała ilość miejsca w obudowie niestety uniemożliwiła zastosowanie płytki, całość jest więc zmontowana "na pająka". Microswitche zostały umocowane na kawałku plastiku z wywierconymi dziurkami. Zasilanie to bateria CR2032 (3V). Czas życia na baterii jest... długi, przynajmniej 3h.


    Żabber, czyli przenośna gra na AVR (konkurs) Żabber, czyli przenośna gra na AVR (konkurs)


    Myślę, że koszt całości nie przekroczy 30zł, ciężko dokładniej określić, bo wszystko oprócz mikrokontrolera i podstawki jest wzięte "z odzysku".

    Jak już wspomniałam, gra jest inspirowana starym hitem z automatów pt. "Frogger", w całości napisana przeze mnie - zajęło to kilka godzin. Celem gry jest przeprowadzenie żab przez ruchliwą ulicę :D, unikając wyścigówek, spychaczy i zwykłych aut. Gra ma cztery poziomy, z każdym zwiększa się prędkość pojazdów, i na każdym należy przeprowadzić cztery żaby na cztery listki po drugiej stronie jezdni. Gracz ma do dyspozycji trzy życia. Na wygranego czeka nagroda w postaci pięknej grafiki z żabą :D, trzeba jednak przyznać, że przejście gry nie jest wcale łatwe.





    Żabber, czyli przenośna gra na AVR (konkurs) Żabber, czyli przenośna gra na AVR (konkurs) Żabber, czyli przenośna gra na AVR (konkurs) Żabber, czyli przenośna gra na AVR (konkurs) Żabber, czyli przenośna gra na AVR (konkurs) Żabber, czyli przenośna gra na AVR (konkurs)

    Do tworzenia grafiki użyty został program MicroLCD - naprawdę wiele ułatwia.

    Załączam schemat, filmik (nagrany komórką) z kawałkiem gameplay'u, i wsad do mikrokontrolera. Jeżeli ktoś będzie zainteresowany kodem gry, to po "uprzątnięciu" go (gdzieś w przyszłym roku) mogę podesłać.



    Żabber, czyli przenośna gra na AVR (konkurs)

    Dziękuję za uwagę!


    Fajne!
  • #2 31 Gru 2011 21:35
    Bambus97
    Poziom 15  

    Bardzo fajny pajączek :D Chyba mamy zwycięzce :D
    Jedyne co można poprawić to estetykę, przy ATmedze w SMD i dwustronnej płytce można by było zrobić PCB, ale to jedynie dodatkowe koszty do urządzenia stworzonego na potrzeby konkursu...

  • #4 01 Sty 2012 11:31
    Thunderacer
    Poziom 15  

    Całkiem fajny projekt, ale estetyka schematu trochę kuleje. Po wykonaniu płytki projekt będzie bardzo ciekawy.

  • #5 01 Sty 2012 12:36
    ilikepie
    Poziom 8  

    Bambus97 napisał:
    przy ATmedze w SMD i dwustronnej płytce można by było zrobić PCB

    Tak, to by było wyjście idealne, niestety SMD jest dopiero na liście "do nauczenia" :).

    Dorzucę jeszcze że gra napisana jest w C.

  • #6 01 Sty 2012 15:25
    And!
    Admin grupy Projektowanie

    Maksymalny nacisk na oprogramowanie,
    i zminimalizowany hardware do granic możliwości,
    czy dobrze widzę ze zrezygnowałaś nawet z kondensatora odsprzęgającego ?

  • #7 01 Sty 2012 15:32
    misiupan
    Poziom 35  

    Jestem zaskoczony faktem że gra śmiga na jednej pastylce, u mnie sam układ pobiera 20mA, a tu jeszcze dochodzi wyświetlacz. Konstrukcja jest zabójczo prosta do tego stopnia że postanowiłem taką zbudować, mam jeszcze kilka procesorów i wyświetlacz się znajdzie.
    Gdybyś zlikwidował to gniazdo pomiędzy lcd, a cpu i dodał małe gniazdo do programowania to jak dla mnie rewelacja. W większej wersji z mocniejszym zasilaniem można by pokusić się o podświetlenie ekranu by móc się cieszyć graniem w niedoświetlonych miejscach.

  • #8 01 Sty 2012 16:04
    ilikepie
    Poziom 8  

    And! napisał:
    czy dobrze widzę ze zrezygnowałaś nawet z kondensatora odsprzęgającego ?

    Oczywiście powinien się on tam znaleźć... niestety bezproblemowość układu rozleniwia.

    Cytat:
    Jestem zaskoczony faktem że gra śmiga na jednej pastylce

    Też byłam pozytywnie zaskoczona, przetestowałam taką konfigurację, jaką zastałam w obudowie i... zadziałało :D.

    Cytat:
    Gdybyś zlikwidował to gniazdo pomiędzy lcd, a cpu i dodał małe gniazdo do programowania to jak dla mnie rewelacja.

    To poniekąd rozwiązuje podstawka pod atmegę, ale faktycznie gdyby zrezygnować z podstawki, i gniazda do LCD może udałoby się wcisnąć małą płytkę z gniazdem do programowania.

  • #9 01 Sty 2012 19:26
    garlinski
    Poziom 13  

    Bardzo fajna gra, koleżanko - oczywiście mile widziany kod źródłowy. Układ robiony z myślą o konkursie zawsze przygotowywany jest w pośpiechu i niekiedy z czegoś trzeba zrezygnować, dlatego myślę, że można wybaczyć tego pajączka w środku.

  • #10 04 Sty 2012 00:50
    gbd.reg
    Poziom 20  

    Gra świetna, a ta grafika swoją jakością powala :) Jednak czy gra nie jest troszkę za prosta? te auta moim zdaniem jadą zbyt wolno.

  • #11 04 Sty 2012 01:28
    Mirek Z.
    Moderator

    gbd.reg napisał:
    Jednak czy gra nie jest troszkę za prosta? te auta moim zdaniem jadą zbyt wolno.
    ilikepie napisał:
    Gra ma cztery poziomy, z każdym zwiększa się prędkość pojazdów, i na każdym należy przeprowadzić cztery żaby na cztery listki po drugiej stronie jezdni

  • #12 04 Sty 2012 12:33
    nsvinc
    Poziom 34  

    Trochę smutny schemat. Reset wisi w powietrzu, AREF wisi w powietrzu, AVCC i drugi pin GND tak samo wisi w powietrzu. Szczerze mówiąc lekko jestem zdziwiony, że to działa prawidłowo. W dziale mikrokontrolerów od zawsze chyba napomina się, żeby podłączać zawsze wszystkie piny zasilania.
    Nie znam się na AVR, no ale to dotyczy każdego procka...

    Nie chce mi się zagłębiać w kod ani datasheeta do procka, ale na 99% nieuzyte piny portów są ustawione w stan wiszącego wejścia (HiZ), tj. zupełnie zapomniane? To też chyba nie jest zbyt dobre...

    Co robi przełącznik sleep/mode? Czy by to jest po prostu zwykły wyłącznik hebelkowy rozłączający zasilanie układu?...

    Elektronicznie ten sprzęt, mimo że działający, to koszmar konstruktora; a pogratulować można tylko za oprogramowanie.

    A wbrew wcześniejszym wypowiedziom, nie jest niczym zaskakującym, że układ działa z jednej baterii litowej 3V, skoro procesor chodzi od 2.7V, a wyswietlacz nominalnie na 3V (wiec z trochę niższego będzie też działać).
    A całość w trybie aktywnym nie pobiera żadnych 20mA, a około 10mA (jeśli procek chodzi na 8MHz). Popularna bateria litowa CR2032 ma około 200mAh, więc to wszystko powinno pracować z takiej baterii dwadzieścia godzin, a nie 3...

  • #13 04 Sty 2012 13:54
    ilikepie
    Poziom 8  

    garlinski napisał:
    Układ robiony z myślą o konkursie zawsze przygotowywany jest w pośpiechu i niekiedy z czegoś trzeba zrezygnować, dlatego myślę, że można wybaczyć tego pajączka w środku.

    Jak już pisałam pająk jest konsekwencją braku przestrzeni, a nie czasu ;)

    Cytat:
    Jednak czy gra nie jest troszkę za prosta? te auta moim zdaniem jadą zbyt wolno.

    No cóż, jak widać na filmiku mi się udaje wywalać już na pierwszym poziomie... Jak wrzucę kod, to zaznaczę gdzie można dostosować prędkości, ilość i lokalizację autek do swojego refleksu.

    Cytat:
    Trochę smutny schemat. Reset wisi w powietrzu, AREF wisi w powietrzu, AVCC i drugi pin GND tak samo wisi w powietrzu.

    Nie chce mi się zagłębiać w kod ani datasheeta do procka, ale na 99% nieuzyte piny portów są ustawione w stan wiszącego wejścia (HiZ), tj. zupełnie zapomniane? To też chyba nie jest zbyt dobre...

    Czekałam na ten post :). Reset ma włączony pull-up, tak samo jak i nieużyte piny. AVCC faktycznie wg datasheeta powinien być podłączony nawet gdy część analogowa nie jest używana, ale AREF...?
    Tak czy siak korzystając z dodatkowego czasu poprawiony schemat się pojawi.

    Cytat:
    Co robi przełącznik sleep/mode? Czy by to jest po prostu zwykły wyłącznik hebelkowy rozłączający zasilanie układu?...

    Tak, to po prostu włącznik, napisy były fabrycznie na obudowie, i ciężko je jakoś estetycznie usunąć.

  • #14 04 Sty 2012 14:19
    nsvinc
    Poziom 34  

    Pull-up którym dysponują mikrokontrolery, to przeważnie śmiech, nie pull-up ;] A juz w szczególności jeśli to dotyczy resetu. Sprawdź co śmiesznego będzie robił mikrokontroler (i wyświetlacz zresztą też), gdy układ znajdzie się w pobliżu czegos, co mocno sieje, tj. wiekszy silnik, stycznik, przekaźnik z cewką AC...

    Reset powinno się porządnie podciągnąć rezem np. 4.7kR, i do masy kondensatorem np. 100nF. Taki obwód uodporni mikrokontroler na niechciane resety, co jest wręcz wskazane skoro to jest gra, no bo wyobraz sobie sytuacje, wlasnie konczysz przechodzić jakis dalszy level, a tu reset... mnie by coś trafiło i bym "trupnął padem" ;]

    AREF podłączyć kondensatorem 100nF do masy...

    Co do nieużytych pinów - są różne szkoły. Ja wyznaję zasadę, że lepiej ustawiać je na wyjścia i w stan niski. Są tacy, którzy twierdzą, że podciągane wejście jest lepsze.

    Do reseta wyświetlacza też oczywiście się przyczepię. Ja bym rezystorem 1MR ten reset ciągnął do stanu aktywnego (nie wiem czy niski, czy wysoki ;] ), a po prawidłowym wstaniu mikrokontrolera, wymuszał ten pin w stan nieaktywny. Fakt, wtedy marnuje się prąd, ale w tym układzie 3uA nie robi różnicy.
    Powód - wyświetlacz nie dostanie padaczki gdy mikrokontroler jest w resecie lub uszkodzony.

    Brak kondensatorów odsprzęgających zasilanie procka to też według mnie, delikatnie mówiąc, uchybienie. W szczególności, że procesor masz w dipie, więc aż się prosi wlutować kondensatorki w 1206 po prostu między piny...

    Ten włącznik też jakoś tak...średnio. Zastosowany procek ma dosyc dobry tryb uśpienia, może warto to w przyszłości wykorzystać, aby układ budzić i kłaść spać np. długim wciśnieciem jakiegos przycisku, a sam wyłącznik pogonić?

    Dodatkowo, jak w karzdej grze, przydałby się highscore. No i teoretycznie możnaby wykorzystać IAP, o ile AVR go obsługuje. A jeśli nie, to zewnętrzny eepromik...

    Co do miejsca w obudowie - bez wątpienia byłoby go więcej, jeśli połączenia by zrobić kynarem, nie żyłami z taśmy PC do podłączania stacji dyskietek...

  • #15 08 Sty 2012 20:09
    ilikepie
    Poziom 8  

    W związku z PMkami dodaję, że:
    -fusebity są ustawione fabryczne,
    -wartości kondensatorów są już na schemacie.

    Kod będzie po 20stym - komentarze na ten moment są zrozumiałe pewnie tylko dla mnie :).

    Jeżeli komuś się mój projekt spodobał, to kieruję tu -> https://www.elektroda.pl/rtvforum/topic2114699.html

    @up:
    -o kondensatorach była mowa już wyżej,
    -IMO wyłącznik to po prostu lepsze rozwiązanie,
    -highscore - ok, ale za co tu dawać punkty? Za przejście do następnej linii? Lekko naciągane ;),
    -połączenia mogłabym zrobić nawet włosem, nie ma smd lub rezygnacji z jakichś elementów -nie ma płytki w środku.

  • #16 11 Sty 2012 15:01
    And!
    Admin grupy Projektowanie

    Jaki wykorzystałaś kompilator ?

    Co było najtrudniejszym/najbardziej czasochłonnym/problematycznym elementem kodu ?

    Fusebity 0xE1 0xD9 (low high) ?

  • #17 11 Sty 2012 17:40
    ilikepie
    Poziom 8  

    And! napisał:
    Jaki wykorzystałaś kompilator ?

    Avr-gcc, jeśli chodzi o IDE to Eclipse (pod ubuntu).

    And! napisał:
    Co było najtrudniejszym/najbardziej czasochłonnym/problematycznym elementem kodu ?

    Biorąc pod uwagę, że gra jakąś grafikę ma, to największym problemem była dostępna pamięć - cały ekran grafiki to 2,5 kb, czyli ~30% całości. Nie obeszło się więc bez okrajania plansz typu game over, itd.
    Stricte od strony kodu dużo uwagi wymagał system kolizji, i płynne przesuwanie autek "poza ekran", oczywiście tak, aby nie trzeba było osobnych rysunków na obcięte pojazdy. AVRy uczą oszczędności :).

    Fusebity dokładnie takie.

    7.02.2012 - dorzucam wszystkie pliki źródłowe.

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo