Department of Information Technology Digitala projekt. SuperKull. Daniel Öhman Alexander Persson

Relevanta dokument
TETRIS. LTH, Campus Helsingborg EITA15 Digitala System

Digitala projekt rapport

DEPARTMENT OF INFORMATION TECHNOLOGY. Digitala Projekt. Redovisning av Projekt - Grupp 14

Pulsmätare med varningsindikatorer

Snake. Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola,

DIGITALA PROJEKT Väderstation

The Intelligent Timer

Projekt EITA15. Väckarklocka. LTH Ingenjörshögskolan vid Campus Helsingborg Datateknik

Digitala Projekt VT13. PING-Pong

Digitalt Projekt: Radiostyrd Bil

Konstruktion av en radiostyrd legobil. Digitala projekt av Arbon Vata Leonardo Vukmanovic Amid Bhatia

Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...

PlantPuppy Räddaren för den som inte kan hålla växterna vid liv

Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN

Digitala Projekt Konstruktion av Tamagocchi. Av: Oskar Andersson D05 & Danial Rehman D05

EDI021 Digitala projekt. Rapport LARMSYSTEM. Utförd av: Niklas Eklund E03 David Olsson E04. Inlämnad:

Whac A mole. Ett rektionstest i kursen Digitala Projekt EITF11 utfört av: Axel Spångberg I10 Marcus Witting I10. Handlett av: Bertil Lindvall

Rapport Digitala Projekt EITF11 Grupp 4 Axel Sundberg, Jakob Wennerström Gille Handledare: Bertil Lindvall

TEMPERATUR OCH VINDMÄTARE MED HÖGTALARFUNKTION

Digitala projekt - Radiostyrd bil

Digitala Projekt (EITF11)

Helena Harrysson och Linnéa Wickberg

Bilen som inte kan krocka

Gustaf Backman, Anton Nystedt, Nicholas Peebo Battleships. Lunds tekniska högskola. EITF11 Digitala projekt

RemoteBud. Inlämnas: Patrik Johnsson, e01pjo Viktor Karlsson, e01vk

Lunds Tekniska Högskola EITF11 Digitala projekt. Bandspelaren

Digitala Projekt(EITF40) - Larm

PROJEKTTYP: Rapportsammanfattning STUDENTER: Larsson, J. ( ) och Oredsson, J. ( ) DATUM: 26 april, 2015

Labyrintspelet EDI021 Grupp 5

LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall

LUNDS TEKNISKA HÖGSKOLA. Väderstation. Digitala Projekt, EITF11. Martin Olofsson, I08 & Fredrik Oher, I08 Vt 2012

Rapport. Fyra i rad-spel. Rapport Digitala Projekt EITF11 Grupp 9 Emma Rasmusson & Louise Ragnarsson Handledare: Bertil Lindvall

Effektpedal för elgitarr

Blue Key Digitala projekt VT

Projektrapport i Digitala System

Räta linjens ekvation.

Innehåll. 1 Inledning 3

Lunds Tekniska Högskola Elektro- och informationsteknik Digitala projekt (EITF11)

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

TILLÄMPNINGAR INOM DATORTEKNIK

DANCING ROBOT. EITF11, Grupp 10. Kajsa Salomonsson, Hugo Hedin och Petter Mårtensson

Space Shooter. Projektrapport i kursen Avancerad C/C++ (DVA303) vid Mälardalens Högskola av Lars Lindqvist och Niklas Nolte

Digitala Projekt - Snake Grupp - 7. Erik Ljung, d01elj Erik Simmons, d01es 25 maj 2005

Avståndsmätare. Digitala System EITA Grupp 7. Abdelsalem Yabrag, Abdulhadi kikar, Fredrik Peterson, Jesper Annefors

Digitala Projekt (EITF11) Hemlarm

Tentamen: Programutveckling ht 2015

Växtviskaren EITF11 Digitala projekt VT15, I12

UDPong - Pong over UDP

Pulsmätare Digitala Projekt EITF11

Kravspecifikation TDP005 Projekt: Objektorienterat system

The Secure Light. Digitala Projekt EITF11. Hanna Tinglöf, I-12 Anna Horvath, I-12 Filippa Österlin, I-12. Handledare: Bertil Lindvall

Sätt att skriva ut binärträd

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS

Digitala projekt, EDI021 Rapport Handledare: Bertil Lindvall

Digitala projekt. Henrik Lundstedt Gustav Darpö

Programmering av stegmotorer ett miniprojekt i samarbete med Svensk Maskinprovning

Laboration i datateknik

Mekanisk solros, Digitala projekt(edi021) Kristoer Nordvall, Stefan Windfeldt, Inlämmnad: 4 december 2006

Digitala projekt Linjeföljande bil

EITF11. WormFight. Axel Eriksson, Felix Geuken Handledare: Bertil Lindvall EITF11

tentamensdags och lab 3

Uppgift 1 ( Betyg 3 uppgift )

Föreläsning 1: Intro till kursen och programmering

Tetris By Tobbe. EDI021 Digitala Projekt. Tobbe Lundberg Handledare: Bertil Lindvall. Lund, Mars 2009

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Introduktion till E-block och Flowcode

Digitala Projekt: Digitala Projekt, EITF11 - VT17 Oscar Ahlgren, Patrik Lorentsson och Sten Hellberg Handledare: Bertil Lindvall

Design vid utveckling av inbyggda system

Föreläsning 11 Datastrukturer (DAT037)

Uppgifter till praktiska tentan, del A. (7 / 27)

Genetisk programmering i Othello

Objektorientering i liten skala

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

LabVIEW uppgift 4. Erik Andersson och Johan Schött. 22 februari 2010

Datorsystem Laboration 2: Minnesmappade bussar

TDP005 Projekt: Objektorienterat system

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C

LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall

Digitala Projekt EITF11 Grupp 9 Projektarbete Hanna Bondesson Marcus Skog. Reaktionsspel EITF11

Föreläsning 1: Intro till kursen och programmering

Sökning och sortering. Linda Mannila

Accelerometer. Rikard Ekström Mattias Kindborg. Informationsteknologi Lunds Universitet

Programmering. Scratch - grundövningar

LEKTION PÅ GRÖNA LUND, GRUPP 1

Cacheprobe: programbibliotek för extrahering av cacheminnesparametrar

D/A- och A/D-omvandlarmodul MOD687-31

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:

TEMPERATURMÄTARE MED GRAFRITARE

TUTORIAL: SAMLING & KONSOLL

Introduktionsmöte Innehåll

GRUPP 1 JETLINE. Åk, känn efter och undersök: a) Hur låter det när tåget dras uppför första backen? Vad beror det på? (Tips finns vid teknikbordet)

Projektrapport. Till Projektet Bluetoothstyrd bil

Lektion på Gröna Lund, Grupp 1

A-del motsvarande KS1

Att göra spel med Game Maker. Rum. Grundläggande delar. Gamemaker, dagens föreläsning. Programmeringsmodell

Uppdrag för LEGO projektet Hitta en vattensamling på Mars

Linjeföljare Digitala projekt Johan Engström e02je Henrik Persson e02hp

Transkript:

Department of Information Technology Digitala projekt SuperKull Daniel Öhman <d03do@efd.lth.se> Alexander Persson <d03ap@efd.lth.se>

Abstract The purpose of this course was to design and construct an electronic circuit with a micro processor. We decided to construct a four player game, controlled by joysticks and displayed on a LCD screen. The work method used during the project was the waterfall model. The four phases of development were; Requirements Specification, Design, Construction and Implementation. We succeded in building a working prototype for our game. 2

Innehållsförteckning Abstract sida 2 1. Inledning sida 4 2. Metod och resultat sida 4 2.1 Spelet sida 4 2.2 Hårdvaran sida 4 2.3 Mjukvaran sida 4 3. Diskussion och slutsatser sida 6 Referenser sida 6 Bilagor Bilaga A Kopplingsschema sida 7 Bilaga B Flödesschema sida 8 3

1. Inledning I moderna företag har projektarbeten fått en allt större betydelse, något som denna kurs försökt förbereda oss för. För att nå dit har vi självständigt, under viss handledning, fått välja och realisera en valfri konstruktion. Vi hadevid projektets början stora kunskaper inom programmering men bristfälliga inom elektronik. Därför valde vi en enklare processor för vår prototyp, ATmega16, men ganska höga krav på programmeringen. Programmet som körs på kontruktionen är ett spel för fyra spelare. 2. Metod och resultat 2.1 Spelet Spelet heter SuperKull och bygger på en variant av känd lek, nämligen kull [6]. De fyra spelpjäserna börjar i varsitt hörn på spelplanen och kontrolleras av spelarna via joysticks. En av spelarna börjar att vara han, när denne spelare sedan kolliderar med en annan spelare blir den spelaren han. Den som är han efter en viss speltid har förlorat och får bestraffas av dem andra spelarna. 2.2 Hårdvaran Först bestämde vi oss för att använda en enchipsdator, ATmega16 [1]. Denna fick vi färdigmonterad med ett JTAG-interface. För styrning valde vi fyra stycken joysticks [2], dessa uppfyllde våra krav och var de billigaste som fanns att tillgå. För att visa spelet användes en Batron 128x64 LCD-skärm [3]. Övrig hårdvara var en kondensator för att minska ingångsbrus samt virtråd. I bilaga A finns ett kopplingsschema för konstruktionen. Vi kom fram till den designen genom att läsa de olika komponenternas datablad [1] [2] [3]. Ledare från spänningskällan är fastlödda men de andra ledarna är virade. Under byggandet och testningen av konstruktionen råkade vi bränna en processor, detta p.g.a. ett icke jordat ben på processorn. 2.3 Mjukvaran Utvecklingsmiljön vi använde var AVR Studio 4, detta program möjliggjorde kontakt med hårdvaran via JTAG. Programmet skrevs i språket C. Genom AVR Studio fick vi även tillgång till headerfiler tillhörande AVR ATMega16, dessa underlättade vårt arbete avsevärt. Filen io.h innehåller definitioner för alla register på processorn och pgmspace.h innehåller definitioner och funktioner för att spara och läsa från programminnet. I bilaga B beskrivs programmets flödesschema. 4

Programmet består av fyra delar: SuperKull.c Denna fil innehåller main-funktionen, här startas skärmen samt spel-loopen. Batron.c Här hanteras allt som har med skärmen att göra, starta, rensa och rita. Först skickas en instruktion som väljer var man vill rita, sen skickas det som ska visas. Två specialiserade funktioner visar splashscreens, dels vid start av spelet under speletes gång, i form av en klocka och när spelet är slut en Game Over skärm. Control.c Startar och läser av D/A-omvandlaren samt byter kanal. En funktion som heter readresult() returnerar resultatet från senaste omvandlingen och startar nästa omvandling. Vi valde att jobba med 4 bitars upplösning per axel för våra kontroller. Resultatet vi får används sedan för att beräkna den nya farten för den axeln enligt följande formel: ny hastighet = gammal hastighet + ( avläst resultat 128 ) / 20 konstant friktion Friktionen används mest för att spelare inte ska studsa omkring i all oändlighet samt för att motverka bruspåverkan på D/A-omvandlaren. För att få en mer jämn friktion skulle en korrekt fysikalisk modell behöva användas istälelt för en konstant friktion. Game.c Här är huvudloopen i programmet. Spelarnas positioner och hastigheter uppdateras och kollisioner detekteras. Spelarnas avstånd beräknas med hjälp av Pythagoras sats och jämförs med spelarnas radie. När två spelare kolliderar så måste nya hastigheter beräknas, detta valde vi att hantera som två huvudfall, då spelarna åker i motsatt riktning och då de åker i samma riktning. När spelarna åker i motsatt riktning blir den nya hastigheten efter kollision: ny egen hastighet = egen hastighet * -1 + motståndarens hastighet motståndarens nya hastighet = motståndarens hastighet * -1 + egen gammal hastighet När spelarna färdas i samma riktning blir nya hastigheten: om spelare 1:s hastighet > spelare 2:s hastighet spelare 1.s nya hastighet = spelare 1:s hastighet * -1 + spelare 2:s hastighet spelare 2:s nya hastighet = spelare 1:s hastighet Vi testade först att använda en mer fysikaliskt korrekt modell för kollisioner men då är man tvungen att ta hänsyn till elasticitet, eftersom de ofta har samma fart, vilket leder till att de skulle stanna vid kollisioner. Denna enklare modell ger ändå en bra spelkänsla. Istället för att spara unden hela bildminnet inför varje skärmuppdatering sparade vi endast de byte på skärmen som faktiskt användes. När fler än en spelarsprite delar på samma bytes i skärmens minne, måste man se till att den som ritas ut först inte skrivs över av den som ritas ut sist. Detta löste vi genom att lägga in de använda byten i en 5

lista som sedan sorterades med hjälp av quicksort [4]. De byte som hade samma minnesadress använde vi logiskt OR [5] på, när de skickades till skärmen. I denna fil finns även alla de sprites som används i spelet deklarerade. De sparas i programminnet då processorn har begränsat med RAM. För att sedan läsa från programminnet användes funktionen pgm_read_byte_near( ). Under vår testperiod upptäckte vi att programmet hängde sig eller startade om, tillsynes slumpmässigt. Ibland direkt, ibland efter flera minuters speltid. Problemet visade sig vara vår sorteringsalgoritm, quicksort[4]. Vi tror att de många kontextbyten som den rekursiva algoritmen medförde gjorde att stacken inte räckte till. Vi löste detta genom att byta till en mindre effektiv linjär sortering och programmet uppvisade efter det inga problem alls. 3. Diskussion och slutsatser Under kursens gång har vi lärt oss att datablad är en viktig, om än svåråtkomlig, informationskälla vid både konstruktion och implementation. Som de D-teknologer vi är var våra tidigare erfarenheter av lödning begränsade, något som vi nu fått lära oss. Det största problemet under utveckligen av mjukvaran var det begränsade minnesutrymmet på processorn. Detta gjorde att vi fick optimera programmet ganska hårt med hänsyn till minnesanvändning. Vi är nöjda med prototypen men vissa förbättringar skulle kunna göras, t.ex. ljudeffekter samt menysystem. Om vi skulle vetat vad vi vet idag, skulle vi nog ha valt en processor med mer minne. På det hela taget är vi nöjda med kursen och kan rekommendera den till alla med ett intresse för inbyggda system. 6

Referenser [1] AVR ATmega16 - http://www.it.lth.se/datablad/processors/atmega16_sum.pdf [2] Joystick - http://www.elfa.se/pdf/64/06413538.pdf [3] Batron LCD-skärm - http://www.it.lth.se/datablad/display/batron128x64.pdf [4] Quicksort - http://en.wikipedia.org/wiki/quicksort [5] Logiskt OR - http://en.wikipedia.org/wiki/logical_or [6] Kull - http://susning.nu/kull 7

Bilaga A Kopplingsschema 8

Bilaga B Flödesschema START Starta skärmen Läs av D/Aomvandlare Visa Game Over skärm Rensa skärmen Sätt D/Aomvandlare till nästa kanal 4x Visa splash Beräkna spelarens nya position och hastighet Visa hjälpskärm NEJ Någon kollision? JA Beräkna ny hastighet efter kollision Rensa skärmen NEJ Spara minnespositioner för spelarnas sprites NEJ En av de kolliderande han? JA JA Byt han Starta D/Aomvandlaren Sortera minnespositioner Speltid sätts Flera med samma minnesposition? JA Utför logiskt OR på bytes NEJ Spelet slut? Rita byte på skärmen 9