AVR 5. Styrning av trafikljus. Digitala system 15 p

Relevanta dokument
Datorteknik 2 (AVR 2)

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

Datorprojekt, del 1. Digitala system 15 p

Laborationens mål är att få displayen att visa timmar, minuter och sekunder samt att kunna ställa klockan.

PROGRAMMERING AV MCU LABORATION6. Laborationens syfte

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

LEJON LABORATION3. Laborationens syfte

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

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

Studera databladen för LCD på sid 4, 5, 7, 8, 14, 18, 19, 20 och 23. Datablad finns på kurshemsidan.

Att använda pekare i. C-kod

Micro:bit. Börja skapa egna program

Digitala Projekt(EITF40) - Larm

LABORATIONER I DIGITALTEKNIK. Laboration 3 Speciella sekvenskretsar

Att programmera arduinon

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

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

Datorteknik 1 (AVR 1)

Projektlaboration 4, synkronisering av klockan

#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned char num;

Programmera i teknik - kreativa projekt med Arduino

Tentamen i. Programmering i språket C

Upphandling färjetrafik Svinö-Degerby Bilaga 13b A.1 KÖRNING MED FJÄRRKONTROLLEN VID ANGÖRING, FLYTLÄGE

Laboration i digitalteknik

Digitalt lärande och programmering i klassrummet

Laboration i digitalteknik Introduktion till digitalteknik

CE_O6. Parallell in/utmatning (I/O). Förberedelser till laboration nios2io.

Lösningar till tentamen i EIT070 Datorteknik

Ipad i teknikundervisningen

CPU. Carry/Borrow IX. Programräknare

+5V. start. Styrsystem. stopp. Tillståndsmaskiner

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

The Phenomenal Doorbell Bilaga 2. Källkod

Laboration 2 i Styrteknik

SOC7-128 SOC7-M2 SOC7-R1

Vilken skillnad gör det var du placerar det? Prova båda.

Lunds Universitet LTH Ingenjörshögskolan IDa1, IEa1 Helsingborg. Laboration nr 4 i digitala system ht-15. Ett sekvensnät. grupp. namn.

LABORATION. Datorteknik Y

LABORATIONSINSTRUKTION

Drivrutiner för att hantera teckenfönster.

I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal.

Kortfattad instruktion för installation och användning av streckodsapplikationer

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

SKAPA DET FÖRSTA PROJEKTET I mikrobasic PRO for AVR

Batteri. Lampa. Strömbrytare. Tungelement. Motstånd. Potentiometer. Fotomotstånd. Kondensator. Lysdiod. Transistor. Motor. Mikrofon.

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

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

12 VDC LED (RGB) Färgpalett (FP) 8 färger. Färgsekvensmotor (FSM) 11 färgscheman 2 justerbara tider

LABORATIONSINSTRUKTION

Lego Robot [ ] [ ] [ ]

2D1339 Programkonstruktion för F1, ht 2004

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

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

Legorobot. Lär dig programmera en legorobot. Teknikåttan Ola Ringdahl Lena Kallin Westin

Installation av ICS.2 System

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

Programmering. Scratch - grundövningar

+5V. start. Styrsystem. stopp. Tillståndsmaskiner

Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok.

Trafiksignal MPB Handhavande. For the love of lives

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Obligatorisk uppgift: Simulering av köer i ett trafiksystem

Växtviskaren EITF11 Digitala projekt VT15, I12

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

Sphero SPRK+ Appen som används är Sphero Edu. När appen öppnas kommer man till denna bild.

LABORATION. Datorteknik Y

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Robotfotboll med Arduino

TSIU05 Digitalteknik. LAB1 Kombinatorik LAB2 Sekvensnät LAB3 System

Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Arduinokurs. Kurstillfälle 4

Installation av fjärrströmbrytare HE842, HE843 och HE862(2).

Övervakningssystem FICO-128 Användarinstruktion

Kör framåt i <TID> sekunder. Kör bakåt i <TID> sekunder. Sväng vänster i <TID> sekunder. Sväng höger i <TID> sekunder

PROJEKT STAFFAN STALLEDRÄNG

Tentamen i Programmering grundkurs och Programmering C

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

Tentamen Grundläggande programmering

trafiksimulering Intro OU5 trafiksimulering

Cecilia Ingard. Boksidan

Digitala Projekt (EITF11)

Dokumentet är ett tillägg och bifogas tillsammans med databladen för Sweeper och Tuner. Beskrivning - Sweeper Se databladet för Sweeper

Inteno FG500 installation

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

Bruksanvisning för Nordic lackboxar GL1000, GL3000 och GL4000

Programmeringsteknik med C och Matlab

Laboration i digitalteknik Speciella sekvenskretsar

KALKYLATOR LABORATION4. Laborationens syfte

RADIOMOTTAGARE FÖR STYRNING AV RGB-LYSDIODLIST GEMENSAM ANOD

TETRIS. LTH, Campus Helsingborg EITA15 Digitala System

EV3 Roboten. Sida 1 av 13

Kom igång. Readyonet Lathund för enkelt admin. Logga in Skriv in adressen till din webbsida följt av /login. Exempel:

Klassdeklaration. Metoddeklaration. Parameteröverföring

LED lampa med rörelsesensor

Laboration 2 i Datorteknik- Assemblerprogrammering II

/* * dancing3.c * * Created: :53:20 * Author: digpi10 */ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Transkript:

Namn: Laborationen godkänd: Digitala system 15 p AVR 5 LTH Ingenjörshögskolan vid Campus Helsingborg Styrning av trafikljus. Syftet med laborationen är att styra en trafikkorsning med hjälp av en mikroprocessor. Trafikkorsningen består av en huvudgata (H) och en enkelriktad tvärgata (T). Huvudgatan har ett ljus för skyddad vänstersväng, och tvärgatans trafik kan regleras med så kallad nattkoppling, som ger grönt bara när trafik kommer (simuleras av knappen CAR). Övergångsstället kan styras med en knapp för gående eller helt autonomt i takt med ljussekvensen för trafiken. H T WAIT BLINK NIGHT CAR 0 1 0 1 0 1 0 1 Erik Larsson

Förberedelser. Läs igenom laborationen och gör ett lösningförslag till hemuppgiften. Studera koden som ska användas som bas till ditt program. Koden finns på kurshemsidan. Hemuppgift, funktionen countdown: äggklocka. I programmeringssammanhang används ofta så kallade time out. Vi vill ha en funktion som fungerar precis som en äggklocka (när man kokar ägg). Klockan ställs på ett visst värde, den räknar ner och när tiden gått till noll så stannar den och något händer. Vi ska skriva en funktion som fungerar så här: Räkna ner en 8-bitarsvariabel med ett om värdet inte är noll. Adressen till variabeln är inparameter till funktionen. Tips och hjälp: Om vi låter funktionen heta countdown, så kan den se ut så här: void countdown(char *address){???????????????; } char *address innebär att parametern som tas emot ska vara en "pekare" till en character; alltså en adress till ett 8-bitarstal. I vår processor kommer denna adress att vara ett 16-bitarstal, men det är inget som vi behöver bry oss om. Funktionen ska alltså kunna användas på vilken 8-bitarsvariabel som helst. Finessen med pekare är att man inte behöver hålla reda på vad adressen är för sorts tal; använder man en dator med 32-bitarsadresser så håller kompilatorn reda på det. Inne i funktionen ska det värde som address pekar på minskas med ett tills det blir noll. Och det värde som address pekar på skrivs i C: *address, alltså en stjärna framför variabelnamnet. När man använder funktionen måste man ha tag i adressen till en variabel (den ska ju vara parameter). adressen till variabeln Value skrivs i C: &Value Skriv färdigt funktionen! 2

Laborationsuppgifter: Uppgift 1. Kontroll av den elektriska inkopplingen. Skapa ett nytt projekt för laborationen. På kurshemsidan finns ett skal till laborationen. Använd skalet som källkodsfil i uppgiften. Skalet kommer senare kompletteras. Det första att göra är att undersöka vilka bitar i portarna som är kopplade till de olika lamporna. Använd I/O View fönstret för att se hur lamporna styrs. Kryssa i tabellen. Jämför med tidigare laborationer där 7-segment displayen undersöktes. Lampor PORTA PORTB PORTC PORTD H - rött H - gult H - grönt H - vänstersväng T - rött T - gult T - grönt ÖG - rött ÖG - grönt Lampa WAIT Knapp WAIT x Knapp BLINK x Knapp NIGHT x Knapp CAR x När du fyllt i tabellen ovan, ser du att lamporna är utspridda på flera portar. Det hade varit enklare om, t.ex., alla stora lysdioder varit anslutna till samma port. Då hade vi kunnat uppdatera dem med en och samma utmatning. Att det blir så här är något som man ofta inträffar i konstruktioner. Det är ledningsdragningsproblem som gjort att lamporna blivit inkopplade på detta sätt. När vi styr trafikljusen ska vi ändå lägga ljuskoderna i en tabell av 8-bitarsvärden. Så här organiserar vi bitarna: T rött T gult T grönt H vä-sväng H rött H gult H grönt Att sedan skicka ut bitarna till rätt plats i rätt port kommer vi hantera i uppgift 4. Resultatet av denna uppgift är att du nu kan komplettera funktionen initio där portarnas riktningar ställs in. 3

Avbrott Minska counter Har en sekund gått? Ja counter = 100 minska traffic_timer Ja traffic_timer = 0? Tabellen Ja index = 0 slut? Nej Nej Nej Skicka ut ljuskod Vrid upp äggklockan Öka index Avbrottsfunktionen SIG_OUTPUT_COMPARE1A Ovan finns en flödesplan för vad som ska hända i avbrottsfunktionen. Det som återfinns till vänster om det röda strecket finns i skalet som du kan ladda ner från hemsidan. Uppgifterna som följer, går ut på att bygga till de delar som saknas. Uppgift 2. Funktionen countdown. För att hantera tidhållningen i trafikkorsningen måste funktionen countdown skrivas. Skriv funktionen enligt hemuppgiften. Anropa den i avbrottsfunktionen med adressen till traffic_timer som parameter. Avbrottsrutinens nyttiga arbete utgörs nu bara av två funktionsanrop till countdown. Testa programmet! 4

Uppgift 3. En läslig tabell för ljuskoder. Trafikkorsningen ska under laborationen styras så att följande värden matas ut till ljusen i de olika portarna. Vi lägger ljuskoderna i en tabell enligt följande format: T rött T gult T grönt H vä-sväng H rött H gult H grönt Fyll i tabellen! Tvärgata Huvudgata Tid Utmatat värde i binär form bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Rött Gult 1s Rött Rött 1s Rött,gult Rött 1s Grönt Rött 5s Gult Rött 1s Rött Rött 1s Rött Rött, gult 1s Rött Grönt 10s Skapa en tabell som innehåller dessa värden. Den kan se ut så här: const char light_table[][2] = { { 1, main_yellow }, { 1, red_red }, { 1, cross_redyellow }, { 5, cross_green }, { 1, cross_yellow }, { 1, red_red }, { 1, main_redyellow }, { 10, main_green }, { 0, 0 } }; Tabellen består av en kolumn med tider och en kolumn med ljuskoder. Dessa koder är angivna med förkortningar för att det ska vara lättare att förstå. #define main_yellow 0b01000010 #define red_red // Komplettera! #define cross_redyellow // Komplettera! #define cross_green // Komplettera! #define cross_yellow // Komplettera! #define main_redyellow // Komplettera! #define main_green // Komplettera! Komplettera definitionerna och skriv in dem före tabellen. 5

Uppgift 4. Skicka ut koden till rätt bitar i rätt portar. De tio stora lysdioderna som ska föreställa biltrafikens ljus är inkopplade till sju bitar i olika portar. Här behövs alltså en funktion som ordnar upp så att rätt bit kommer till rätt port T.ex. ska biten H grönt som i tabellen är placerad i den allra lägsta positionen, bit 0, skickas till bit 2 i PORTD. Skriv funktionen skicka_ut som gör detta. Funktionen ska ta emot ett argument som innehåller koden från tabellen och skicka ut den till rätt ställen. void skicka_ut(char ut){ PORTA = ; PORTC = ; PORTD = ; } Uppgift 5. Trafikstyrningen Trafikstyrningen ska ligga i avbrottsfunktionen enligt flödesplanen på sid. 4. Vi behöver använda oss av: 1. Funktionen countdown. 2. Värdet i traffic_timer (variabel som är global eller static) 3. Tabellen light_table 4. Index för aktuell rad i tabellen (variabel som är global eller static) 5. Funktionen skicka_ut Skriv klart avbrottsfunktionen. Testkör! Använd gärna ensekundsintervall för alla koder till att börja med. 6

Uppgift 6. Övergångsstället. På laborationskortet finns en knapp och en lysdiod under texten WAIT. Det är tänkt att de ska fungera så här: 1. Om (någon trycker på knappen WAIT) så ska lampan WAIT tändas. 2. Om (trafikljuset inte är grönt på tvärgatan) så ska övergångsställets röda lampor tändas och de gröna släckas. 3. Om ((trafikljusen precis har växlat till grönt på tvärgatan) och (lysdioden WAIT lyser)) så ska övergångsstället visa grönt och WAIT släckas. Formulera de tre punkterna som if-satser. Översätta från svenska till C utan att krångla till det. Tänk ut hur t.ex. sanningshalten av (någon trycker på knappen WAIT) ska avgöras. Hur formuleras ett villkor som är sant om någon trycker på knappen WAIT? Hur formuleras ett villkor som är sant om den gröna lampan på tvärgatan är släckt? (Punkt 2) Punkt 1och 2 placeras lämpligen i avbrottsfunktionen på ett ställe dit man kommer ofta och som inte begränsas av några andra villkor. Punkt 3 placeras där ljuskoden precis har växlats. Rita in dessa tre villkorsfigurer i flödesplanen på sidan 4. Markera tydligt var de ska komma in. Testa! 7

Uppgift 7. Nattkoppling. På nätterna är det inte mycket trafik på tvärgatan. Därför vill man att huvudgatans trafik bara skall kunna avbrytas av fotgängare eller om en bil kommer på tvärgatan. Nattkoppling ställs in med knappen NIGHT (etta neråt). En bil simuleras med knappen CAR. Komplettera programmet så att det testar knapparna NIGHT och CAR samt lampan WAIT på följande sätt: Om (( NIGHT = 1) och (CAR=0) och (ljusen visar grönt för huvudgatan) och (lysdioden WAIT är släckt )) så ska sekvensen stoppas. Vid alla andra kombinationer ska den normala sekvensen (i uppgift 6) genomlöpas normalt. Lägg märke till att formuleringen ovan kan göras om med de Morgans lag: Om (( NIGHT = 0) eller (CAR=1) eller (huvudgatans gröna ljus är släckt) eller (lysdioden WAIT är tänd )) så ska sekvensen köras. Det är ungefär lika lätt att förstå båda formuleringarna. Fundera igenom båda så du är med på att det är riktiga sätt att bestämma när trafikkorsningssekvensen ska köras och stoppas. Testa! 8