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 ;)
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 ;)
No to oglądamy z zaciekawieniem :)
OdpowiedzUsuńTeż bym sobie obejrzał, ale mi się dziecko obudziło i posiedzę z nim chyba do 1:00... jak pech to pech ;p
OdpowiedzUsuń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ń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.
OdpowiedzUsuń//KoWaL //
Witam
OdpowiedzUsuńto jest 3 odcinek gdzie jest 2 ?
No nie mów, że na blogu nie widzisz drugiego odcinka ;)
UsuńA czy można poprosić o kod gry?
OdpowiedzUsuńTak, sorki będzie ale dopiero w poniedziałek, bo zapomniałem go zabrać do domciu :(
Usuńo to samo chciałem zapytać :)
UsuńCzemu Mirku nie zdejmujesz zabezpieczenia z buzzera ? :D
UsuńBo za głośno brzęczy? ;)
Usuń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ć:
OdpowiedzUsuń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.
Mirku, czy zrobisz kiedyś jeszcze poradnik o trybach CTC i Normal?
OdpowiedzUsuńA czy w książce:
Usuń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ć ?
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ńMirku możesz popatrzeć na ten kod? http://wklej.org/id/1233068/
Usuń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?
Mirku, czy to jest koniec poradników o przerwaniach?
OdpowiedzUsuńA czego jeszcze brakuje ?
UsuńA bo myślałem że jeszcze jakąś gre zrobisz :D
UsuńNa tą chwilę myślę, że niebieska książka:
Usuń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 ;)
Mirku poradnik jak zwykle świetny.
OdpowiedzUsuń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.
Posłuchaj, nazwy wektorów przerwań w nocie PDF nie mają za wiele wspólnego z nazwami wektorów ( i teraz uważaj) w:
Usuń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 ;)
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ńNo wszystko się da ;) czemu nie ? .... zapraszam do własnych prób i zabawy - po to jest ten kod i poradnik
UsuńCzy przerwanie PCINT może być ustawione na detekcję zbocza opadającego i narastającego czy tylko reaguję na zmianę stanu?
OdpowiedzUsuńA co mówi dokumentacja PDF? toż tam jest jasno zapisane że tylko zmiana stanu
Usuń