Helena Harrysson och Linnéa Wickberg

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

TETRIS. LTH, Campus Helsingborg EITA15 Digitala System

The Intelligent Timer

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

Digitala Projekt VT13. PING-Pong

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

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

Digitala Projekt(EITF40) - Larm

Pulsmätare med varningsindikatorer

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

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

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

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

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

Digitala Projekt (EITF11)

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

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

DIGITALA PROJEKT Väderstation

EITF11 Digitala Projekt TIC TAC TOE. Lukas Ljungblom & Johan Lyckenvik I-13 Handledare: Bertil Lindvall

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

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

Digitala projekt - Radiostyrd bil

Digitalt Projekt: Radiostyrd Bil

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

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

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

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

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

Lunds Tekniska Högskola EITF11 Digitala projekt. Bandspelaren

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

TEMPERATURMÄTARE MED GRAFRITARE

TEMPERATUR OCH VINDMÄTARE MED HÖGTALARFUNKTION

Projektrapport i Digitala System

Digitala projekt Linjeföljande bil

Växtviskaren EITF11 Digitala projekt VT15, I12

Bilen som inte kan krocka

Det finns en handledning till kortet på hemsidan. AVR STK500.

EITF11 - Digitala projekt. Hastighetsmätare. Hugo Backmyr Mattias Karlsson

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

DIGITALA PROJEKT (EITF40) Fartmätare

Digitala projekt rapport

Larmcentral. Digitala Projekt. Cecilia Olsson & Erika Björck Handledare: Bertil Lindvall LUNDS TEKNISKA HÖGSKOLA

Pulsmätare Digitala Projekt EITF11

Rapport Digitala Projekt EITF Grupp 12 Elin Blomstergren, Victor Sundgren Handledare: Bertil Lindvall. Fyra i rad

Thunder s Truck projektrapport

Digitala projekt, EDI021 Rapport Handledare: Bertil Lindvall

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

Digitala Projekt (EITF11) Hemlarm

Projektrapport Målgång

Sebastian Nordqvist André Reis Malte Wallander Oliver Hedetoft Handledare: Lars-Göran Larsson & Bertil Lindvall. Projektrapport Digitala System

Programmera i teknik - kreativa projekt med Arduino

Pong Mayhem. Innehållsförteckning Inledning Kravspecifikation Komponenter/Hårdvara Arbetsprocess Reflektion...

Projektrapport - Roterande digital LED-klocka

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

Liftmaestro. Lunds Tekniska Högskola Elektro- och informationsteknik. Olle Gemfors, I13 Dayanand Sagar, I13 Mattias Wendler, I13

Effektpedal för elgitarr

Design vid utveckling av inbyggda system

Design av inbyggda system

Design av inbyggda system

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

Kravspecifikation. Sammanfattning. Fyra i rad Javaprojekt inom TDDC32. Version 2.0. Datum Dokumentnummer

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

PROJEKT LJUD. KOPIERINGSUNDERLAG Martin Blom Skavnes, Staffan Melin och Natur & Kultur Programmera i teknik ISBN

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

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

Feeding Daisy. EITF11 Lunds Tekniska Högskola. Grupp 12: Pontus Akervall Louise Landare Anton Schölin. En automatisk blomvattnare

Innehåll. 1 Inledning 3

Vi har i kursen Digitala Projekt EITF11 byggt en spelkonsol på vilken man kan spela Snake. Mjukvaran programmerades i C på en AVR Mega32 processor.

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

High Core Remote Car X8000 Cool

AVR Studio 4 Och AVRFLASH

Datorteknik 1 (AVR 1)

Formula Blue. Digitala Projekt 8p. Jesper Ferm E02 Carl Hakenäs E04

Digitala projekt Elektro- och informationsteknik

AVR 5. Styrning av trafikljus. Digitala system 15 p

Programmering eller Datalogiskt tänkande

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

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

Felsökande av en Lego Mindstorm robot

SKAPA DET FÖRSTA PROJEKTET I mikrobasic PRO for AVR

Laboration i datateknik

Pulsmätare. EITF11 Digitala Projekt VT15. Grupp 9: Emma Albertz, Mathilde Hagander & Alexandra Mansner Handledare: Andreas Johansson & Bertil Lindvall

Väderstation. Digitala Projekt EITF11 Institutionen för Elektro- och Informationsteknik Lunds Tekniska Högskola

1 Bakgrund 4. 2 Kravspecifikation Definitioner Grundläggande krav Användarfall 5

Digital Projekt EDI 021 Konstruktion av talande nummerpresentatör VT1 2004

Projektrapport i Digitala projekt EITF11. Institutionen för Elektro- och informationsteknik, Lunds tekniska högskola

LTH Ingenjörhögskolan vid Campus Helsingborg. Mastermindspel

ELEKTRO- OCH INFORMATIONSTEKNIK. Radiostyrd bil. EITF11 Digitala Projekt. Thomas Bergsten & Marcus Halbauer

Digitala System Projekt - EITA15 VT *SUPER DUPER KLOCKAN*

Design av inbyggda system

Labyrintspelet EDI021 Grupp 5

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

THE VISUAL EGGTIMER. Skola: Lunds Tekniska Högskola Institution: Elektro- och informationsteknik Kurs: Digitala projekt (EITF11)

WALL E. WALL EVADER EDI021 DIGITALA PROJEKT

Laboration 2 i Datorteknik- Assemblerprogrammering II

Programmering. Scratch - grundövningar

Blue Key Digitala projekt VT

Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3. Namn: Personnummer: Tentamensdatum: Tid: 14:00-18:00.

Jan Babor och Oscar Ågren Handledare: Bertil Lindvall 5/16/2011

LABORATION. Datorteknik Y

Transkript:

Snake Ett klassiskt spel i ny tappning Helena Harrysson och Linnéa Wickberg 2013-05-20 Handledare Bertil Lindvall

Abstract The course Digitala Projekt, EITF11, focuses on the process of constructing a prototype for a chosen product. The first step of this process is to specify the requirements of the end product, so that necessary hardware can be chosen, then to connect the different components to each other, so that finally source code can be written. This specific project deals with developing a platform that supports the classical game of Snake. The platform is composed of a processor, an LCD-display, four buttons and two light-emitting diodes. In this report the components are described, as well as the progress of the platform over time. The result shows that the project was successful in developing the platform, and that it supported the version of the game that was written in code.

Innehållsförteckning Abstract... 1 Inledning... 3 Kravspecifikation... 3 Hårdvara... 3 Processor... 3 LCD-skärm... 4 Knappar... 4 Resistorer... 4 JTAG... 4 Mjukvara... 4 Genomförande... 5 Resultat... 5 Diskussion... 5 Källförteckning... 7 Bilaga 1 Kopplingsschema... 8

Inledning Kursen Digitala Projekt erbjuder studenter på Industriell Ekonomi möjligheten att i par driva ett projekt som är mer tekniskt intensivt än något av de projekt som tidigare genomförts på utbildningen. Uppgiften består av att studenterna ska ta fram en prototyp av en egenvald produkt, och målet är att ge en större inblick inom konstruktionsarbete och programmering på kärnnivå. Just detta projekt beskriver hur framtagningen av en konsol på vilken man kan spela det klassiska spelet Snake har gått till. Kravspecifikation Vårt Snake-spel har följande krav: Hårdvaran ska vara korrekt kopplad så att spelet kan styras Spelet ska presenteras på en LCD-skärm Spelet ska startas genom en startknapp Spelaren ska kunna styra ormen med hjälp av två knappar på konsolen Höger knapp gör att ormen svänger till höger och vänster knapp får den att svänga åt vänster När ormen gått 10 steg får spelaren poäng Den aktuella poängställningen ska alltid vara synlig på skärmen Då ormen åker in i sig själv eller spelplanens väggar ska spelet avbrytas Hårdvara Processor Till prototypen har en ATMega16 processor använts. Som namnet antyder har den ett minne på 16kB. Den består av 40 pinnar, där 32 av dem är programmerbara I/O pinnar utplacerade på fyra portar (PORTA-PORTD). I vår prototyp har portarna använts på följande sätt: PORTA: Används för att skicka data mellan processorn och LCD-skärmen. Data till skärmen består av instruktioner gällande var på skärmen något ska ändras, samt om den aktuella databiten ska ha tända eller släckta pixlar. Från skärmen läses en busy-flag för att kontrollera att skärmen är redo att ta emot data från processorn. PORTB: Används för att skicka instruktioner från processorn till skärmen. Dessa instruktioner påverkar hur skärmen hanterar den data som tas emot från PORTA. Skärmen är till exempel uppdelad i två halvor, och två av pinnarna på denna port avgör vilken av halvorna som ska påverkas av datan. PORTC: Används för debugging med hjälp av JTAG. PORTD: Används för att ta in information från knapparna, samt skicka ut information till den röda lysdioden. Se kopplingsschema i bilaga 1 för att se den kompletta sammankopplingen av delar mellan processorn och övriga komponenter.

LCD-skärm Spelet i prototypen visas på en grafisk LCD-skärm av typen GDM12864HLCM. Skärmen består av 128x64 pixlar, uppdelat på två halvor om 64x64 pixlar vardera. Koordinatsystemet är lite omvänt det man är van vid då x-koordinaterna går lodrätt och y-koordinaterna vågrätt. X-koordinaterna är dessutom uppdelade register för varje y-koordinat. Ett register avser 8 pixlar, vilket innebär att hantering av skärmen alltid sker i bitar om 8. Knappar Spelet manipuleras av spelaren med hjälp av fyra knappar. Två av dem är svarta och används för start av spelet, samt för reset av processorn. De andra två är röda och används för att styra ormen under spelets gång. Knapparna fungerar som så att då de trycks ner skickas spänning vidare till processorn, vilket gör att pinnen går från låg till hög. Då knappen släpps går pinnen tillbaka till låg. Resistorer Knapparna är kopplade från processorn till jord, via en resistor. Denna ser till att spänningen till processorn då knappen inte är intryck är 0V, för att försäkra att pinnen är låg vid dessa tillfällen. JTAG Med hjälp av vår JTAG kopplades processorn ihop med en dator så att vi i programmet AVR Studio kunde skriva programkod direkt till processorn. Mjukvara För att få fram spelet Snake på skärmen har totalt ca 700 rader kod skrivits, men här presenterar vi bara det övergripande tänket och skalet av den. Den kompletta källkoden finns bifogad i bilaga. Starten av spelet börjar med att initiera skärmen genom att ställa in alla pinnar enligt databladet anvisningar. Nästa metod som körs tömmer först skärmen och ritar sedan ut det som är starläget; nämligen att båda skärmhalvor har en ram och att det på höger halva finns en poängtavla. Efter detta kommer vår eviga while-loop som spelet utgörs av. Den börjar med att lyssna på starknappen, och när den trycks ner kommer ormen fram på skärmen. Spelet är uppbyggt av många metoder som kallar på varandra, men de som varit viktigast genomgående är commando(), writedata() och delay(). Den första används för att ställa in respektive skärmhalva på det sätt som databladet anger för att skriva till skärmen, vilket sedan görs med metoden writedata(). I dessa metoder kallas även på isbusy() som är en metod som läser av skärmens busy flag. Denna indikerar om skärmen är redo att ta emot ny information från processorn och var därför essentiell för att programmet skulle fungera eftersom processorn arbetar mycket snabbare än skärmen. Detta är också varför metoden delay() används genomgående i koden. Ormen som ritas ut på skärmen är i koden representerad av en matris, och när ormen går ett steg framåt fylls en plats i matrisen. När tio platser blivit fyllda får spelaren poäng, vilket uppdateras på höger skärmhalva. Själva styrningen är skriven som så att det finns fyra riktningar (1-4) där 1 är rakt uppåt och sen plussas de på motsols. Trycker man på den högra knappen motsvarar det att riktningen ökar med ett, medan vänster innebär att den sjunker med ett. Om spelaren kör in i en av väggarna eller sig själv så avbryts den eviga loopen och spelomgången är avslutad.

Genomförande Processen att ta fram en prototyp har bestått av två faser, där den första hade fokus på att konstruera hårdvaran och den andra bestod av skrivande av källkod. För att kunna koppla ihop hårdvarudelarna krävdes först att en kravspecifikation togs fram, i vilken det var beskrivet vad prototypen skulle kunna klara av vilket avgjorde vilka delar som skulle komma att behövas. Nästa steg var att rita ett kopplingsschema som specificerar precis vilka pinnar på processorn som var kopplade till vilka pinnar på de övriga delarna. Inte förrän detta var gjort kunde själva bygget börja, och då fick vi våra verktyg och delar. Under cirka två veckors tid kopplades sedan alla delar samman dels via lödning, men också genom att bara vira tråd på pinnarna. Då hårdvaran var färdigkopplad inleddes nästa fas. Inledningsvis gjordes enkla tester för att se att hårdvaran var korrekt kopplad, samt för att förstå hur koden manipulerade portarna på processorn. I samband med detta började vi använda programmet AVR Studio. Själva kodskrivandet tog sedan fart, små program skrevs för att än en gång se att vi förstod hur förändringar i inställningar visade sig på hårdvaran. För att kunna identifiera förändringarna användes den röda lysdioden genom att vi valde att tända den på olika ställen i koden. Nästa steg var att börja hantera datan och instruktionerna som skickas mellan skärmen och processorn vilket visade sig vara den svåraste uppgiften hittills. Som inledningen antydde innebar det här projektet en utmaning, och det var när vi skulle försöka förstå hur viktigt det är att alla pinnar är rätt inställda i rätt tid för att kunna läsa och skicka data på rätt sätt som vår tekniska kunskap sattes på prov. Efter ett antal olika tillämpade metoder började vi till slut känna att det verkade finnas en logisk koppling mellan det vi trodde vi påverkade och vad som faktiskt visade sig på skärmen. Statiska inställningar, såsom utskriven text på höger skärmhalva och en ram runt hela skärmen, såg ut som den skulle och då inleddes arbetet med den dynamiska delen av spelet: själva ormen. Här blev det mycket tänkande för att manipulera rätt pixel då ormen rörde sig, och för att hitta en lösning som inte krävde mer än de 16kB minne vi hade att tillgå. Till slut hittades en lösning som lät oss spela en version av Snake som uppfyller de krav som ställts i kravspecifikationen. Spelet är inte precis som den klassiska versionen, men vi är väldigt nöjda med att ha tagit fram vår tolkning. Resultat Efter vad som känts som en lång process har målet med att ta fram en prototyp lyckats. Efter vissa omformuleringar, helt enligt en sann utvecklingsprocess, har en uppfyller den alla krav satta i kravspecifikationen. Diskussion En av anledningarna till att processen känts lång är att den inneburit många motgångar på vägen till följd av okunskap. Inledningsvis fanns förvirring gällande vad en pinne, ett ben, en port och alla möjliga andra bastermer över huvud taget innebar. Allteftersom man förstod det skulle arbetet med att ta fram en kravspecifikation påbörjas och sedan ett kopplingsschema ritas, varpå nya frågor uppstod. Databladen som skulle hjälpa förvirrade nästan ännu mer, mycket eftersom de förutsätter att läsaren har vissa grundkunskaper vilka inte fanns hos oss.

Åtskilliga besök hos vår handledare senare stod kopplingsschemat färdigt och bygget inleddes. I efterhand känns det som att den perioden förflöt smärtfritt, men under tiden kändes det som att man aldrig skulle bli färdig. Då vi upptäckte att något fattades i vårt kopplingsschema, eller att man på annat sätt kunde följa något steg för steg stod vi handfallna och osäkra över vad vi skulle göra. Trots det lyckades vi prestera en hårdvara relativt fort som verkade vara korrekt kopplad. Inför projektet var vi övertygade om att byggandet av den fysiska produkten skulle vara det som var mest komplicerat eftersom vi aldrig tidigare gjort något liknande, medan programmering i C inte borde vara alltför annorlunda mot den JAVA-programmering vi trots allt läst två kurser i. På sätt och vis stämde den tron; C-programmeringen i sig var inte källan till alltför många problem. Däremot visade det sig vara väldigt komplicerat skriva kod där man hela tiden måste ställa in portar och pinnar i rätt ordning för att något ska hända, samt att ständigt se till så att skärmen är redo att ta emot data från processorn. Dessa delar utgjorde nog den största utmaningen genom hela projektet. I och med att det känts som vi konstant jobbat i motvind till följd av vår bristande kunskap är vi väldigt stolta över att kunna presentera en fungerande prototyp.

Källförteckning Datablad för processorn: http://www.eit.lth.se/fileadmin/eit/courses/edi021/datablad/processors/atmega16.pdf Datablad för LCD-skärmen: http://www.eit.lth.se/fileadmin/eit/courses/edi021/datablad/display/gdm12864h.pdf Kursbok i C-programmering: Brian W. Kernigan, Dennis M.Ritchie, The C programming language, second edition, Prentice Hall Software Series.

Bilaga 1 Kopplingsschema