Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

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

SharkII, czyli prosta konsola oparta o mikrokontroler

Mateusz-me-1990 28 Gru 2011 18:07 17581 35
  • SharkII, czyli prosta konsola oparta o mikrokontroler

    Witam serdecznie :D

    Chciałbym przedstawić wszystkim mój autorski projekt prostej konsoli stworzonej w ramach konkursu obecnie prowadzonego na elektrodzie. Każdy pewnie zapyta dlaczego akurat SharkII? To wskazywałoby jakby istniała pierwsza część, ale w sumie gdzie ona jest? W dawnych czasach tj. 2006 rok ukończyłem wraz z płytką prostą grę elektroniczną. Same prace zaczęły się o wiele wcześniej i dość długo trwały z racji posiadanego czasu oraz chęci. Dziś dokładnie nie pamiętam, ale leżało to od roku do dwóch lat co datowało by pierwsze szkice na 2004 rok. Jak wskazuje mój nick miałem wtedy 14 lat. Układ był wykonany na samych układach CMOS serii 4000, prototyp zajmował całe biurko i często przed dalszym etapem prac trzeba było podłączać kabelki, które odpadły;)(całość wykonana w pająku!). Jako wyświetlacz służyła matryca 16 diod LED ułożonych w postaci kwadratu. Cudowny był to widok:) Właśnie na cześć tego niezwykłego projektu obecna konsola zyskała jego nazwę.

    Sprzęt
    Urządzenie miało być początkowo wykonane na układzie serii MSP430 dokładnie MSP430F149. Niestety wiązało się to z wykonaniem płytki prototypowej co z moim uwielbieniem do wykonywania płytek oznaczało długi czas realizacji ;) . Pech chciał, że akurat gdzieś pod ręką miałem kawałek uniwersalki z podstawką 40 pinową, dlatego też podłączyłem AVRa i tak zostało. Wykorzystałem układ atmega32. Pracuje on z częstotliwością 16MHz, czyli maksymalna jaką gwarantuje producent (nie toleruje kręcenia tym bardziej w takich procesorach). Obraz kompozytowy generowany jest za pomocą prostego przetwornika d/a złożonego z dwóch rezystorów, który działa dzięki impedancji wejścia video. Zastosowałem wartości, które widziałem w innych projektach tego typu. Dodatkowo dla spokojności przeliczyłem, czy poziomy napięć będą się zgadzały z wymaganymi. Dzięki temu prostemu przetwornikowi możemy uzyskać trzy kolory tj. biały, szary oraz czarny plus poziom sygnału synchronizacji. Do generacji dźwięku zostały użyte wewnętrzne generatory PWM. Za pomocą rezystorów odpowiednio dopasowałem poziom sygnału by uzyskać poziom nie większy niż -10dBV, który jest pewnym standardem w sprzętach RTV. Oczywiście wartość sygnału nie jest krytyczna i mogła być mniejsza. Ostatecznie i tak użytkownik dostawi precyzyjnie głośność w telewizorze według własnych preferencji. Dodatkowe kondensatory oddzielają składową stałą. W urządzeniu przewidziano dwa kanały audio, ale obecnie wykorzystuje tylko jeden (tj. wyjście OC1A). Konsola jest kompatybilna pod względem padów z pegazusami, które można było spotkać na naszym rynku. Zachowałem tą samą pinologię oraz mniej więcej czasy tak jak w oryginalnym NESie. Całość zasilana jest poprzez kultowy układ 7805. Wybrałem go głównie dlatego, iż moc wydzielana w stabilizatorze jest większa niż 100mW więc wersja 78L05 odpada. Układ nie wymaga radiatora. Dodatkowo przykręciłem go do płytki celem lepszego jego zamocowania. Kilka kondensatorów ceramicznych zapewnia prawidłowe filtrowanie napięcia zasilającego. Dodałem też diodę zabezpieczającą przed odwrotną polaryzacją napięcia zasilającego. Linia danych z pada została dla bezpieczeństwa podciągnięta rezystorem do plusa. Zapobiega to przed zbieraniem śmieci, gdy pad jest nie podłączony. Zastosowałem same elementy przewlekane głównie dlatego by zachować klimat dawnych lat;). W konsoli znajdują się dwa przyciski ten pod diodą jak można się domyślić załącza cały układ, a ten po prawej stronie służy do resetu urządzenia.





    Program
    Oprogramowanie stworzyłem w pakiecie WinAVR. Program sterujący jest mieszaniną asemblera z C. Był to mój pierwszy program napisany w asemblerze i akurat do tego projektu uczyłem się go od zera. Nie wchodziło w grę skopiowanie tego od kogoś tak Mateusz nie robi:). Cała procedura wyświetlania obrazu bazuje na wielkiej tablicy, której zawartość odzwierciedla ekran telewizora. Początkowo miałem problemy z falującymi bokami co było przyczyną samej nie udolności rdzenia. Dokładniej tym, iż nie można przerwać instrukcji, które potrzebowały kilku cykli na wykonanie. Skutkowało to tym, że nie zawsze linia zaczynała się w tym samym czasie. Problem rozwiązałem w ten sposób, że na czas tworzenia obrazu właściwego procesor po wskoczeniu do przerwania siedzi tam przez cały obraz. Podejście jakże nie zgodne z sztuką programowania, ale za to chyba jedyne sensowne w takim przypadku(z drugiej strony kto normalny używa takich sprzętów do tworzenia sygnału do TV?:D). W międzyczasie obsługi obrazu procesor zajmuję się obsługą pada oraz generowaniem dźwięku. W ciągu sekundy następuje 50 odczytów stanu przycisków i udostępnienie ich dla procedur w grach. Dodatkowo za pomącą dwóch zmiennych 8 bitowych zostały zrealizowane proste wirtualne timery, które odliczają czas. Po prostu podczas synchronizacji pionowej ich zawartości są zawsze zwiększane, a odpowiednio kasując je i sprawdzając ich stan, główne procedury są w stanie wykonywać pewne czynność w mniej więcej równych odstępach czasu. Do prac nad konsolą zostało napisane specjalne oprogramowanie tj. SharkI3mageConverter (pakiet Dev C++), które służyło mi do przerabiana grafiki na postać zrozumiałą dla procedur wyświetlających oraz prostą konwersję na trzy odcienie szarości. Wszelkie wyniki uzyskane w grze są przechowywane w wewnętrznej pamięci EEPROM. Lecz wszelkich hakerów muszę zniechęcić tym, że jakakolwiek próba podrobienia wyników skończy się fiaskiem i blokadą konsoli. Jedynym krokiem możliwym wtedy jest ustawienie wartości fabrycznych;). Wszystko dzięki zabezpieczeniu wyników sumami CRC. Cały kod zajmuje około 29kB z czego najwięcej waży sama grafika.

    Gry
    W swojej konsoli umieściłem cztery tytuły, których wybór możliwy jest poprzez proste menu po uruchomieniu konsoli. Po wybraniu gry zostaje ona uruchomiona dożywotnie, aż to resetu bądź też ponownego włączenia urządzenia.

    Crilux
    W grze wcielamy się w pilota statku kosmicznego. Akcja dzieje się w odległej galaktyce. Naszym zadaniem jest omijanie pojawiających się znienacka asteroid. Lecz sama ucieczka byłaby zbyt prosta dla takiego pilota jak my, dlatego też statek został wyposażony w działo, które pozwala na zestrzeliwanie lecących asteroid. Każdy cenny strzał to +10 punktów. Na starcie dostajemy 3 życia za każde pełne 1000 punktów możemy zyskać następne. Zaczynając grę możemy wybrać sobie jeden statek z dwóch dostępnych. Całej grze towarzyszą proste, ale nadające klimatu efekty dźwiękowe.

    Snake
    Jest to klasyczny wężyk. Gra zapamiętuje trzy najlepsze wyniki. Do wyboru mamy 4 poziomy szybkości. Zasada jest prosta im wyższy stopień tym więcej punktów. Dokładnie przy poziomie 1 mamy jeden punkt za wężykowe jedzenie, przy 2 dwa itd. . Gra kończy się, gdy zrobimy krzywdę dla naszego zwierzaka każąc mu ugryźć samego siebie.

    Memory
    Coś w sam raz dla miłośników treningu pamięci. Gra zaczyna się od wyświetlenia 40 losowo ustawionych kart. Naszym zadaniem jest odnalezienie par. Po wybraniu dwóch kart zostają one odkryte na pewien krótki czas. Jeśli są takie same znikają z planszy, w przeciwnym wypadku zostają zakryte i gra toczy się dalej. Rozgrywka kończy się, gdy zostaną znalezione wszystkie pary. W grze liczona jest liczba kroków w jakiej znaleźliśmy wszystkie pary oraz czas, który był nam na to potrzebny. Najlepsze wyniki sa oczywiście zapamiętywane. Chciałbym tutaj jeszcze wspomnieć i podziękować mojej kobiecie, która wykonała część obrazków:) Dziękuję:)

    Tetris
    Co tutaj dużo mówić jednym słowem-klasyka. Cel gry jeśli ktoś nie wie jest nadzwyczaj prosty. Należy tak układać kolejne części by zapełniać całe linie. Pełne linie zostają usunięte wraz z kultowym dźwiękiem. Możliwe jest także przyspieszenie spadającej części poprzez naciśnięcie strzałki w dół. Wyświetlany jest aktualny wynik, następny klocek oraz ilość zapełnionych linii. Liczba punktów uzyskanych jest kwadratem liczby linii jednocześnie skasowanych, czyli przy 3 liniach mamy 9 punktów, a przy 4 aż 16! Rozgrywka kończy się, gdy następna spadająca część nie ma możliwości poruszenia się. Oczywiście najlepsze wyniki są tak jak w innych grach zapamiętywane.

    Parametry techniczne
    Wyjście video: sygnał kompozytowy, złącze RCA
    Wyjście audio: złącze RCA
    Rozdzielczość: 96x72
    Liczba kolorów: 3 (czarny, szary, biały)
    Napięcie zasilania: 7,5V-25V DC
    Pobór prądu: maks. 40mA
    Kompatybilność sygnałów z oryginalnym padem NESa: tak

    Konfiguracja
    Konsola posiada ukryte menu konfiguracyjne, aby je zaktywować należy po uruchomieniu konsoli podczas wyświetlania loga startowego wcisnąć jednocześnie i trzymać przyciski SELECT oraz START, aż do pojawienia się menu. Możliwe jest włączenie i wyłączenie dźwięków, ustawienie wyników na standardowe. Następuje skasowanie wszystkich wyników we wszystkich grach. Zakończenie operacji sygnalizowane jest dźwiękiem, oczywiście jeśli jest on włączony. Ostatnia opcja to informacje o autorze.

    Montaż i uruchomienie
    Zakładam, że każdy kto będzie chciał wykonać moją konsolą posiada minimalną wiedzę na temat lutowania oraz wgrania programu do procesora. Dlatego też nie będę opisywał takich elementarnych rzeczy. Warto napomnieć, że zastosowanie podstawki pod mikrokontroler jest konieczne. Z racji, że wewnątrz niej umieściłem kilka elementów. Należy sprawdzić też czy wewnątrz podstawki nic nie przeszkadza. W wypadku precyzyjnej podstawki, której użyłem musiałem wyciąć jeden wspornik. Warto zamocować najpierw elementy wewnątrz podstawki oraz pamiętać należy o jednej zworze, która się tam znajduje. Dokumentacja w załączniku wraz z programem oraz ustawieniami fuse bitów (wartości hfuse oraz lfuse). Po zmontowaniu całości i jeszcze przed włożeniem procesora do podstawki warto sprawdzić miernikiem czy na odpowiednich wyprowadzeniach występuje napięcie w okolicach +5V. Po samym uruchomieniu należy jeszcze wgrać wsad do pamięci EEPROM, aby to zrobić wchodzimy do menu konfiguracji oraz wybieramy opcję "Defaults scores". Po chwili mamy już odpowiednio zapisaną pamięć. Zostaje już tylko chwycić pada w dłoń i bić kolejne rekordy :D .

    Załączone zdjęcia przedstawiają skromną sylwetkę mojego urządzenia. Na dołączonym filmiku możecie zobaczyć jakie możliwości oferuje sama konsola. Na jednym z zdjęć możecie zobaczyć pierwszą wersję Sharka (to ta wielka płytka trzymana w mojej dłoni). Życzę miłego oglądania i czekam na ewentualne pytania :D .

    SharkII, czyli prosta konsola oparta o mikrokontroler SharkII, czyli prosta konsola oparta o mikrokontroler SharkII, czyli prosta konsola oparta o mikrokontroler SharkII, czyli prosta konsola oparta o mikrokontroler SharkII, czyli prosta konsola oparta o mikrokontroler SharkII, czyli prosta konsola oparta o mikrokontroler SharkII, czyli prosta konsola oparta o mikrokontroler SharkII, czyli prosta konsola oparta o mikrokontroler


    Fajne!
  • Megger
  • #2 28 Gru 2011 20:31
    HUGO
    Poziom 15  

    Witam

    Projekt fajny i szacunek za to jednak mam pytanie na jaki konkurs zapodałeś ten projekt chyba nie świąteczny bo i co on ze świętami ma wspólnego no chyba to że wrzuciłeś go w okresie świątecznym ?

    Pozdrawiam

    Andrzej

  • Megger
  • #3 28 Gru 2011 20:35
    Mateusz-me-1990
    Poziom 15  

    Ze świętami nie ma nic wspólnego, bo to nie na ten konkurs ;) . Równolegle jest prowadzony jeszcze inny pt. "Gra w stylu retro".

  • #5 28 Gru 2011 20:55
    And!
    Admin grupy Projektowanie

    HUGO to jest zgłoszenie w tym konkursie.

    Mateusz-me-1990 bardzo dobre wykorzystanie możliwości mikrokontrolera,
    do stworzenia grywalnej klimatycznej konsoli w stylu retro.

    Udana prezentacja projektu, obraz video przechwytywałeś kartą TV/AV ?

  • #6 28 Gru 2011 21:18
    Mateusz-me-1990
    Poziom 15  

    piotrva napisał:
    Cóż, projekt bomba, rzeczywiście się mocno napracowałeś i efekt bardzo fajny.
    Brakuje tylko sensownej obudowy na główną elektronikę ;-)


    Fakt pomimo iż PS3 to nie jest to jednak trochę czasu zajęło :D . Chyba najwięcej problemów miałem z obrazem, bo to bardzo czuła sprawa. Przetestowałem układ na kilku telewizorach i co się okazało po pierwszych testach, żę niestety ale na kilku z nich było nie ciekawie. Lecz dwie noce zrobiły swoje i w końcu udało się uzyskać sensowne wyniki. Co do samej obudowy to powiem Ci, że nawet kupiłem takową. Tylko czasu mi nieco zbrakło no i co tutaj ukrywać samo wiercenie, wycinanie itp. to moja słaba strona jakoś wychodzi, ale ile się namęczę to głowa mała :D

    And! napisał:
    ...Udana prezentacja projektu, obraz video przechwytywałeś kartą TV/AV ?


    Dokładnie :D Użyłem zewnętrznej karty pod usb ze stajni Pinnacle. Potem nagranie kilku klipów i Windows Movie Maker. Pomimo, iż Spielbergiem nie jestem to jakoś sensownie wyszło (jak na elektronika :D ).

    SharkII, czyli prosta konsola oparta o mikrokontroler

  • #7 28 Gru 2011 21:48
    drzasiek
    Specjalista - Mikrokontrolery

    Witam.
    Super Sprawa!!!
    Zważywszy na to, że niewiele osób zadeklarowało, że wykonuje jakąś konstrukcję na ten konkurs, myślę, że nagroda murowana dla Ciebie :)
    Sam miałem ochotę i pomysł, ale niestety zabrakło mi czasu..
    Kto miał czas, a mu się nie chciało to niech żałuje, bo nagrody super a konkurencja raczej nie duża.

    Co do tej konsoli to bardzo mi się podobają te klimatyczne dźwięki.
    Czym jest ograniczona taka mała rozdzielczość gry?

  • Megger
  • #8 28 Gru 2011 22:02
    Mateusz-me-1990
    Poziom 15  

    drzasiek napisał:
    Czym jest ograniczona taka mała rozdzielczość gry?


    Głównym problemem jest sama ilość ramu, który posiada procesor. W wypadku tego modelu jak za pewne wiesz jest to 2kB. Każdy piksel zajmuje 2bity. Przy takiej rozdzielczości tablica przechowująca obraz zajmuje dokładnie 1728 bajtów. Jeśli mieć więcej ramu to myślę, że spokojnie można by zwiększyć rozdzielczość nawet i dwukrotnie. Starałem się ją dobrać by zachować w miarę proporcję 4:3. Można by z sumie dołożyć jeszcze jeden odcień szarości wykorzystując pozycję 00. W obecnej implementacji wpisanie wartości piksela równej 00 powoduje utratę synchronizacji i różnie inne cuda.

  • #9 28 Gru 2011 22:31
    leonow32

    Poziom 29  

    Fantastyczne :) sam takie coś zacząłem robić półtora roku temu, ale wziąłem taki rozmach przy tym projekcie, że niestety cały projekt jest jeszcze rozgrzebany, mimo takiego czasu (Link)

    Cytat:
    Początkowo miałem problemy z falującymi bokami co było przyczyną samej nie udolności rdzenia. Dokładniej tym, iż nie można przerwać instrukcji, które potrzebowały kilku cykli na wykonanie. Skutkowało to tym, że nie zawsze linia zaczynała się w tym samym czasie. Problem rozwiązałem w ten sposób, że na czas tworzenia obrazu właściwego procesor po wskoczeniu do przerwania siedzi tam przez cały obraz.

    Innym rozwiązaniem tego problemu jest zastosowanie trybów uśpienia. W necie można znaleźć projekt AVRTV, w którym jest to dokładniej opisane - tam autor wykorzystuje SPI do generowania obrazu :)

    Hmmm... znam ludzi, który twierdzą, że AVRy nadają się tylko do mrugania diodami, a wyświetlacz LCD to szczyt możliwości. Pozdrawiam serdecznie :P jak widać największym ograniczeniem możliwości procesora jest wyobraźnia programisty.

  • #10 28 Gru 2011 23:08
    Mateusz-me-1990
    Poziom 15  

    leonow32 napisał:

    Innym rozwiązaniem tego problemu jest zastosowanie trybów uśpienia. W necie można znaleźć projekt AVRTV, w którym jest to dokładniej opisane - tam autor wykorzystuje SPI do generowania obrazu :)

    Hmmm... znam ludzi, który twierdzą, że AVRy nadają się tylko do mrugania diodami, a wyświetlacz LCD to szczyt możliwości. Pozdrawiam serdecznie :P jak widać możliwości procesora są ograniczone wyobraźnią programisty.


    Projekt ten spotkałem, ale z tego co pamiętam tylko pobieżnie rzuciłem okiem. Głównie z racji, iż analiza obcego kodu w asemblerze to szalone zadanie :D . Tym bardziej jak się nie wie jaką wizję miał podmiot liryczny tworzący program. Sam AVR nie jest zły. Lecz warto pamiętać, że są jeszcze większe cuda i na jeszcze bardziej kolosalne rzeczy pozwalają :D . Może kiedyś znajdziesz czas i chęci by znów wskrzesić AVR Spectrum z chęcią zobacze i pewnie nie tylko ja ukończone dzieło :D .

  • #12 29 Gru 2011 10:00
    Usunięty
  • #13 29 Gru 2011 13:11
    marek1846
    Poziom 14  

    Mateusz-me-1990 napisał:
    drzasiek napisał:
    Czym jest ograniczona taka mała rozdzielczość gry?


    .Można by z sumie dołożyć jeszcze jeden odcień szarości wykorzystując pozycję 00. W obecnej implementacji wpisanie wartości piksela równej 00 powoduje utratę synchronizacji i różnie inne cuda.

    Myślę, że wystarczy dodać układ przesuwający poziomy sygnału synchronizacji i obrazu (pikseli).

  • #15 29 Gru 2011 16:06
    Mateusz-me-1990
    Poziom 15  

    lukkk napisał:
    następnym krokiem byłoby dołożenie karty graficznej (np. na dodatkowy uC) :D
    +klawiatura, może jeszcze dostęp do netu i komputer gotowy :)


    Plany są tylko narazie nie ma jeszcze takich umiejętności :) . Ostatnio Kolega piotr_go przedstawiał taki projekt. Warto zobaczyć :!: :D

    Oximon napisał:
    A możesz nam podać jakiś kosztorys? Ile Cię wyniósł cały projekt?


    Wiesz bardzo dużo korzystałem z szrotu. Musiałem zakupić podstawkę, oba gniazda oraz dwa przełączniki i za to akurat wyszło mi około 10zł. Dokładnie tego nie liczyłem. Nie wiem jak obecnie stoją mikrokontrolery, bo AVRów nie kupowałem od dawien dawna, a zamontowaną sztukę miałem ze starych zapasów.

    msichal napisał:
    Hmm, rozdzielczości już się nie polepszy, to może muzyka?
    Tetris bez muzyki to nie tetris!


    Na początku miałem takie zamiary by dodać jeszcze muzykę. Z tej racji umieściłem w samym sprzęcie dwa kanały :D . Chciałem wykorzystać swoje dawne umiejętności muzyczne. Niestety czas na to nie pozwolił. Wiadomo kobieta, studia, praca, a i posiedzieć bezczynnie przy piwie też czasem trzeba :D . Przyznam ostatnio zastanawiałem się jakby to zrealizować i w sumie jedyne sensowne co mi przyszło do głowy to zrealizowanie jakiejś prostej kolejki dźwięków i odpowiednie ładowanie kolejnych w pętli głównej.

    tmf napisał:
    Projekt fajny. Żeby zobaczyć co da się wycisnąć z 8-bitowego AVR warto zobaczyć projekt UZEBOX:
    http://belogic.com/uzebox/index.asp


    Spotkałem się z tym projektem. Fakt autor trochę się namęczył i uzyskał świetny efekt. W swoich szpargałach znalazłem po jakimś czasie od rozpoczęcia projektu właśnie układ AD725 użyty w tym projekcie, ale za późno już było by zmieniać tak diametralne projekt, a i samo tworzenie kolorowych gier to większa ilość potrzebnego czasu :D . Co mi się w Uzeboxie nie podoba to sam fakt podkręcenia procka. Sam autor przyznał, że w ostatnich wersjach procesora były problemy z pełną funkcjonalnością procesora. Można się było tego spodziewać.

  • #16 30 Gru 2011 15:20
    xamrex
    Poziom 28  

    Naprawdę świetny projekt:)
    Napisałeś

    Mateusz-me-1990 napisał:
    Głównym problemem jest sama ilość ramu, który posiada procesor.

    No to może dodać jakąś zewnętrzną kostkę, która komunikuje się przez SPI, i wtedy mamy więcej pamięci do wkorzystania..
    Tylko nie wiem czy prędkość nie będzie za wolna.

    I moje drugie pytanko,
    Z tego co widzę wykorzystujesz 3 kolory(biały, czarny i szary),
    A jest może możliwość np. zamiast szarego,czarnego i białego wykorzystywać kolor np. czerwony,niebieski i zielony czy to nie jest takie proste?

  • #17 30 Gru 2011 17:38
    leonow32

    Poziom 29  

    Jeśli już zamieszczamy linki do podobnych projektów to warto zobaczyć to
    http://avga.prometheus4.com/
    Bez podkręcania da się uzyskać obraz 16-kolorowy o rozdzielczości 192x144 z ATmegi168. Jest do ściągnięcia kolorowy PacMan i Mario :)

    Był jeszcze w necie projekt Lazarus64 ale obecnie strona niestety zniknęła.

    A co do zewnętrznego RAMu... ATmega128 ma wyprowadzone magistrale do podłączenia takowego w ilości 64kB, który może działać chyba nawet tak szybko jak wewnętrzny RAM. Spokojnie można by tam zmieścić jakiś ładny kolorowy obrazek. Kiedyś jeszcze kombinowałem by stworzyć układ, który by do zewnętrznego RAMu wrzucił obraz w formie np. bitmaty, a jakiś inny układ by z tego RAMu odczytywał obraz i generował sygnał telewizyjny. Ale na koncypowaniu się skończyło :)

    @Mateusz-me-1990
    Jakiś czas temu pojawiła się ATmega1284 która jest pinologicznie zgodna z ATmega32, a RAM-u ma aż 16kB i rozpędza się do 20MHz. Jakbyś chciał rozbudować swój układ bez większych przeróbek sprzętowych to można spróbować na tym :)

  • #18 01 Sty 2012 18:04
    Mateusz-me-1990
    Poziom 15  

    xamrex napisał:
    I moje drugie pytanko,
    Z tego co widzę wykorzystujesz 3 kolory(biały, czarny i szary),
    A jest może możliwość np. zamiast szarego,czarnego i białego wykorzystywać kolor np. czerwony,niebieski i zielony czy to nie jest takie proste?


    W moim sprzęcie jest to akurat nie możliwe, ale ogółem jest to do zrobienia. Można rozwiązać to poprzez generowanie sygnału VGA i prezentować go na monitorze komputerowym z takim wejściem, a jeśli chciałbyś przerobić to na sygnał kompozytowy możesz wykorzystać układ AD725 o, którym wspominałem wcześniej. Uzyskasz wtedy trzy rodzaje sygnałów VGA, kompozytowy oraz S-Video. Wspomniana konsola Uzebox wykorzystuje wspomniany układ.

    leonow32 napisał:
    Jakiś czas temu pojawiła się ATmega1284 która jest pinologicznie zgodna z ATmega32, a RAM-u ma aż 16kB i rozpędza się do 20MHz. Jakbyś chciał rozbudować swój układ bez większych przeróbek sprzętowych to można spróbować na tym :)


    Projekt był przygotowany głównie z myślą o konkursie i edukacyjnie posłużył mi do nauki asemblera. Poza drobnymi modyfikacjami tego co jest nie zamierzam bardziej rozbudowywać ani rozwijać projektu. Głównie z racji, iż ten czas można poświęcić na jakieś poważniejsze i pożyteczniejsze zagadnienia (chociażby Ethernet, USB). Poza tym w sumie staram się już rezygnować z AVRów na rzecz innych lepszych dostępnych układów :D .

    W związku z rozpoczętym głosowaniem zapraszam wszelkich entuzjastów konsoli SharkII do głosowania. Uwolnijmy rekina :!: :D

    Głosowanie

  • #19 15 Sty 2012 12:15
    xanio
    Poziom 27  

    Wydaje mi się czy procedura rysująca sprajty nie obsługuje przezroczystości? Widać to np w grze Crilux gdy statek zasłania gwiazdkę lub asteroidę. Jeżeli sprajty mają 3 kolory to i tak musisz wykorzystać 2bpp więc kolor 'przezroczysty' by też mógł być (ew. druga procedura rysująca sprajty pomijająca czarny kolor).

  • #20 15 Sty 2012 14:49
    Mateusz-me-1990
    Poziom 15  

    xanio napisał:
    Wydaje mi się czy procedura rysująca sprajty nie obsługuje przezroczystości? Widać to np w grze Crilux gdy statek zasłania gwiazdkę lub asteroidę. Jeżeli sprajty mają 3 kolory to i tak musisz wykorzystać 2bpp więc kolor 'przezroczysty' by też mógł być (ew. druga procedura rysująca sprajty pomijająca czarny kolor).


    Masz dobre oko. Rzeczywiście podczas rysowania statku przysłania on wszystko. Wynika to jedynie z uproszczenia całych procedur. Szczerze mówiąc nie ma specjalnych procedur obsługujących sprajty. Głównie z racji, iż w pozostałych grach nie miałem potrzeby używania takich funkcji. Jak już pisałem wcześniej pozostała jedna kombinacja z tych dwóch bitów występując gdzieś podczas obrazu doprowadziła by do rozsynchronizowania obrazu, dlatego iż wystawiła by na wyjście video napięcie 0V. Musiałbym przerobić procedury obsługi obrazu by dodać taką właściwość. Podczas prac zauważyłem jak najbardziej ten problem, ale został on odłożony na listę tzw. mniej ważnych spraw i zająłem się innymi poprawkami oraz następnymi grami. Gdybym od razu wiedział, że termin przeciągnie się do 7 stycznia z pewnością poprawiłbym ten szczegół oraz dołożył kolejną grę (były takie plany by dodać Wilka i zająca czy też Froga). Niestety o przedłużeniu terminu dowiedziałem się dzień przed jego końcem więc odpuściłem już jakiekolwiek zmiany.

  • #21 15 Sty 2012 15:16
    xanio
    Poziom 27  

    Nie chodzi mi o to aby ten czwarty kolor rysować tylko o to aby sprajty go zawierały i wtedy podczas rysowania, nie przesłaniasz tego co tam już wcześniej było (np narysowałeś wcześniej tam gwiazdkę). Bo jeśli dobrze zrozumiałem to masz pamięć obrazu po której malujesz i osobną procedurę, która generuje sygnał na podstawie zawartości tej pamięci.

  • #22 15 Sty 2012 15:27
    Mateusz-me-1990
    Poziom 15  

    Pisząc na temat rysowania miałem na celu ukazanie co się stanie teraz. Żaden obrazek obecnie nie może mieć kombinacji 00 (sygnał synchronizacji). Należałoby przerobić procedurę wyświetlania danych z tablicy by ignorowała kombinację 00. Całość podzielona jest na osobne procedury. Stworzony jest jakby kernel jeśli można to tak nazwać, który zajmuje się obsługą TV, audio oraz odczytywaniem pada. Reszta korzysta z tych procedur.

  • #23 15 Sty 2012 16:19
    xanio
    Poziom 27  

    Mówiąc o tablicy mówisz teraz o tablicy sprajta czy całej pamięci ekranu?

  • #24 15 Sty 2012 16:26
    Mateusz-me-1990
    Poziom 15  

    Pisałem wcześniej, że nie mam czegoś takiego jak sprite. Mowa o tablicy, której zawartość jest obrazowana na ekranie.

  • #25 15 Sty 2012 17:04
    xanio
    Poziom 27  

    No dobrze.. ale skąd bierzesz dane wg których rysowany jest np. statek?

  • #26 15 Sty 2012 17:12
    Mateusz-me-1990
    Poziom 15  

    Są na stałe wpisane w pamięci Flash.

  • #27 15 Sty 2012 17:23
    xanio
    Poziom 27  

    No.. i teraz jak je nanosisz na tablicę z pamięcią obrazu? Czy podczas tego przenoszenia nie możesz pominąć jednego z kolorów?

  • #28 15 Sty 2012 17:36
    Mateusz-me-1990
    Poziom 15  

    Nie pisałem nigdzie, że nie można wykonać takiej przezroczystości.

    Mateusz napisał:
    Gdybym od razu wiedział, że termin przeciągnie się do 7 stycznia z pewnością poprawiłbym ten szczegół...


    Można zrobić wszystko tylko nie starczyło akurat na to czasu. Statek jest po prostu wprost wpisywany na ekran. Ważniejszą sprawą był problemy z wyświetlaniem wszystkiego na TV, bo początkowo miałem nie dopracowaną procedurę generującą obraz. Do tego doszły późniejsze problemy z tetrisem, które zabijały jego funkcjonalność i to były priorytety. Co do samych sprajtów jak się uprzesz możesz to i tak nazwać. Dla mnie wpisywanie statku wprost na ekran to za mało by to tak określić tym bardziej, że samo oprogramowanie nie wspiera tego w żaden sposób tak by można było z tego jakoś korzystać również w innych grach.

  • #29 19 Sty 2012 13:42
    androot
    VIP Zasłużony dla elektroda

    Zapoznaj się z tym:
    Link

    Powinieneś zrobić tak, że impuls synchronizacji to 0V, czarny to 35%U, biały 100%U.
    Najlepiej wykorzystać osobny pin portu do generowania synchronizacji. A przetwornik D/A zrobić tak, żeby przy "00" na wejściu dawał 0,35V a przy "11" 1V. Pamiętaj, że impedancja wejścia CVBS wynosi 75Ω.
    Uzyskasz pełną, 2-bitową głębię koloru :)

  • #30 19 Sty 2012 18:44
    mijadzi
    Poziom 10  

    Naprawdę niezła robota, sam zrobiłem kilka projektów na AVRach w tym na Atmedze 32 i do głowy mi nie przyszło że coś takiego można na niej zrobić. Świetne:)!!!

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