Ads_700x200

tme

sobota, 28 grudnia 2013

Przerwania dla początkujących - część 03 + GRA

Witam,

Tym razem zapraszam was nie tylko do pisania kodu ale również do świata mojej wybujałej fantazji ;) dzięki czemu zobaczycie jak można zrobić przy pomocy pięciu diod LED, pięciu klawiszy, jednego buzzera, procka AVR i stykówki - fascynującą grę, która będzie mogła konkurować na najlepszymi produkcjami na Xboxa ;) Będzie to prawie gra FPS (Fisrt Person Shotter) ... ale ok nie ujawniam dalej informacji, zobaczycie sami o co tu chodzi. Na poważnie jednak, początek poradnika, myślę że będzie ważnym krokiem potrzebnym do całkowitego obeznania się (że tak powiem) z przerwaniami zewnętrznymi a szczególnie z tymi oznaczonymi jako PCINTx. Przy okazji zobaczycie, znowu jak piszę po kolei program, jak go testuję (każdy fragment) ... jak wyszukuję błędy ;) .... ciekawe czy ktoś z was wypatrzy błąd którego szukam w pewnym miejscu zanim ja wpadnę co źle zrobiłem ?


Zapraszam więc na filmik


UPDATE: 2013-12-29:

Poniżej spakowane do pliku ZIP, dwa projekty z poradnika, wprost pod Eclipsika ;) zapraszam do pobierania:



UPDATE! ....

Dzięki uprzejmości kolegi jacek232 z naszego forum (www.forum.atnel.pl) , który zainspirowany pomysłem z tego poradnika - najszybciej dokonał modyfikacji aby przerobić grę na staruszkę babunię ATmega8, a do tego sprytnie wykorzystał przerwanie INT0 .... mogę wam w tym miejscu zaprezentować jego pomysł, zapraszam do kliknięcia w poniższy link:


zobaczycie sami, że warto być z nami na naszym przyjaznym forum ;)

24 komentarze:

  1. No to oglądamy z zaciekawieniem :)

    OdpowiedzUsuń
  2. Też bym sobie obejrzał, ale mi się dziecko obudziło i posiedzę z nim chyba do 1:00... jak pech to pech ;p

    OdpowiedzUsuń
  3. Aż mnie kusi aby tą grę udoskonalić :D Trzeba sobie jakąś lepszą Atmegę załatwić i możemy się bawić ;). A film króciutki i humorystyczny :D Nawet się nie zorientowałem że to już 1:00 w nocy :)

    OdpowiedzUsuń
  4. Poradnik super :) Grę zrobiłem bez przerwań (brak PCINT w atmedze8) ale działa + dołączyłem wyświetlacz liczbę możliwych błędów i timeout'ów. Ale ważne że działa.

    //KoWaL //

    OdpowiedzUsuń
  5. Witam
    to jest 3 odcinek gdzie jest 2 ?

    OdpowiedzUsuń
    Odpowiedzi
    1. No nie mów, że na blogu nie widzisz drugiego odcinka ;)

      Usuń
  6. A czy można poprosić o kod gry?

    OdpowiedzUsuń
    Odpowiedzi
    1. Tak, sorki będzie ale dopiero w poniedziałek, bo zapomniałem go zabrać do domciu :(

      Usuń
    2. o to samo chciałem zapytać :)

      Usuń
    3. Czemu Mirku nie zdejmujesz zabezpieczenia z buzzera ? :D

      Usuń
    4. Bo za głośno brzęczy? ;)

      Usuń
  7. A mi się wydaje że można użyć modulo, jak Ci to przez chwile zaświtało. Nie mam pod ręką zestawu żeby to sprawdzić, ale wydaje mi się że takie coś powinno śmigać:

    int losuj(int n1, int n2)
    {
    if (n1>n2) return 0;
    if (n1==n2) return n1;
    return rand()%(n2-n1)+n1;
    }
    n1 - dolna granica losowania
    n2 - górna granica losowania
    Jeśli ktoś ma pod ręką zestaw to proszę o sprawdzenie i ew. korektę jeśli się gdzieś pomyliłem.

    OdpowiedzUsuń
  8. Mirku, czy zrobisz kiedyś jeszcze poradnik o trybach CTC i Normal?

    OdpowiedzUsuń
    Odpowiedzi
    1. A czy w książce:

      http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

      jest o tym niewystarczająco ? tak z ciekawości podpytam ? czy chodzi o coś szczególnego żeby wyjaśnić ?

      Usuń
    2. Wczoraj miałem małe zamieszanie z tymi timerami, ale teraz wczytałem się w książkę, napisałem mały program i już ogarnąłem :)

      Usuń
    3. Mirku możesz popatrzeć na ten kod? http://wklej.org/id/1233068/
      Czy takie użycie przerwań jest hmmm... poprawne?
      Czy jest jakaś możliwość na zliczanie przerwań bez używania zmiennej?

      W sumie mam mały problem z Timerem0. Nie mryga co 1s, a za każdym wejściem do przerwania czas ten się przedłuża. Mógłbyś mi troszkę wytłumaczyć czemu tak się dzieje?

      Usuń
  9. Mirku, czy to jest koniec poradników o przerwaniach?

    OdpowiedzUsuń
    Odpowiedzi
    1. A czego jeszcze brakuje ?

      Usuń
    2. A bo myślałem że jeszcze jakąś gre zrobisz :D

      Usuń
    3. Na tą chwilę myślę, że niebieska książka:

      http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

      plus ten poradnik (i inne z tego bloga) - to na prawdę wystarczy - spójrz wyżej co napisał kolega ;)

      Usuń
  10. Mirku poradnik jak zwykle świetny.
    Ja mam jedno małe pytanie odnośnie samej nazwy wektora przerwań PCINT0,1,2.
    W nocie są napisane jakie są wektory przerwań:
    11.2 Interrupt Vectors in ATmega88P

    Ponizej zapis:
    12.2.4 PCICR – Pin Change Interrupt Control Register

    The corresponding interrupt of Pin Change Interrupt Request is executed from the PCI2
    Interrupt Vector.

    i tu mnie zastanawia czemu w nocie w tym miejscu nie jest napisana dokładna nazwa tego wektora?

    Pozdrawiam.
    Mam nadzieje że rozumiesz moje pytanie.


    OdpowiedzUsuń
    Odpowiedzi
    1. Posłuchaj, nazwy wektorów przerwań w nocie PDF nie mają za wiele wspólnego z nazwami wektorów ( i teraz uważaj) w:

      1. avr gcc
      2. iar
      3. code vision

      itp .... czyli prościej mówiąc każdy kompilator może mieć własne nazwy wektorów i trzeba sobie po prostu to sprawdzać w nocie kompilatora ;)

      pomocne jest tu nawet samo Eclipse - tylko czytaj mój blog, masz np ten poradnik:

      http://mirekk36.blogspot.com/2012/03/eclipse-jak-szybko-sprawdzic-np-nazwy.html

      zajrzyj ;)

      Usuń
  11. A czy da się udoskonalić grę w ten sposób, by po wejściu do jakiejkolwiek funkcji z buzerkiem przerwania nie działały? Chodzi o to, że jeśli na przykład wcisnę nie ten klawisz to na zmianę będzie mrygał poprawny i wciśnięty. Jeśli w tym samym czasie wcisnę jeszcze jakiś kolejny klawisz to dzieją się cyrki.

    OdpowiedzUsuń
    Odpowiedzi
    1. No wszystko się da ;) czemu nie ? .... zapraszam do własnych prób i zabawy - po to jest ten kod i poradnik

      Usuń