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

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

Datorteknik 2 (AVR 2)

AVR 5. Styrning av trafikljus. Digitala system 15 p

Projektlaboration 4, synkronisering av klockan

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.

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

Laboration 5 C-programmering på AVR TSEA57 Datorteknik I

Effektpedal för elgitarr

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Minnets komponenter. Digitala System: Datorteknik. Programexekvering. Programexekvering. Enhet för utdata. Enhet för indata CPU.

Digital- och datorteknik

Exempel 4. Användning av en timer

Växtviskaren EITF11 Digitala projekt VT15, I12

Datorteknik 1 (AVR 1)

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

CPU. Carry/Borrow IX. Programräknare

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

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

The Phenomenal Doorbell Bilaga 2. Källkod

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

LABORATION. Datorteknik Y

(Lösningsförslag finns sist i denna fil.)

CE_O3. Nios II. Inför lab nios2time

Avbrottshantering. Övningsuppgifter

Att använda pekare i. C-kod

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

TETRIS. LTH, Campus Helsingborg EITA15 Digitala System

Realtidsprogrammering. En introduktion Implementering (med exempel från PIC)

Datorsystemteknik Föreläsning 7DAVA14

Polling (cyklisk avfrågning) Avbrott

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

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

Bilen som inte kan krocka

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

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

Övning2 Datorteknik, HH vt12 - Programmering

LABORATION. Datorteknik Y

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

Innehåll. 1 Inledning 3

LABORATIONSINSTRUKTION

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

A-del motsvarande KS1

AVR Studio 4 Och AVRFLASH

Lösningar till tentamen i EIT070 Datorteknik

Avbrottshantering. Övningsuppgifter Lösningsförslag Uppgift (Reservation för diverse fel!)

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

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

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.

Arduinokurs. Kurstillfälle 4

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

Övning 6. Parallellport, timer

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Lösningar till tentamen i EIT070 Datorteknik

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

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Pulsmätare Digitala Projekt EITF11

Pulsmätare med varningsindikatorer

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

Digitala projekt rapport

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

Applikationsexempel Timer med tryckknapp

Laboration 2 i Datorteknik- Assemblerprogrammering II

Digitala Projekt(EITF40) - Larm

DIGITALA PROJEKT Väderstation

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

FRAMTAGNING AV DEMONSTRATORER

Digitala Projekt (EITF11)

Drivrutiner för att hantera teckenfönster.

Föreläsningsanteckningar till Konstruktionsmetoder

Beskrivning av porthantering i mikroprocessorn SAM3U som används på vårt labkort SAM3U- EK.

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Beskrivning av sorteringsverket. Automationsteknik Sortering av cylindrar 1(5)

Random Access Memory. Amare Reda Jenny Holmberg Henrik Kreipke Gaylord Kaya

Microprocessor / Microcontroller

Digital- och datorteknik

Digital- och datorteknik

Enchipsdatorns gränssnitt mot den analoga omvärlden

Projektrapport - Roterande digital LED-klocka

JOFEN-Prototypes. Målsökande pansarvagn. Projektarbete i Kursen EITA15. Jonatan Claesson, Olle Jonasson, Felix Rödén, Edvin Rossi & Nils Olén

Paneler - VCPXX.2. Programmeringsmanual för VCP-paneler. Revision 2

PROJEKT STAFFAN STALLEDRÄNG

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

DIGITALA PROJEKT (EITF40) Fartmätare

Robotfotboll med Arduino

Granska befintlig kod och kommentarer Testa loopbackfunktionen

Planering Programmering grundkurs HI1024 HT 2014

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

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

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

Föreläsningsanteckningar 3. Mikroprogrammering II

Digitala projekt, EDI021 Rapport Handledare: Bertil Lindvall

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

Självgående fordon Rapport i kursen digitala projekt, EDI021

Innehåll i detta dokument

Tentamen i Digitalteknik, EIT020

Rapport i Digitala Projekt (EDI021)

Laboration i digitalteknik

Transkript:

Namn: Laborationen godkänd: Digitala system 15 hp AVR 3 - datorteknik LTH Ingenjörshögskolan vid Campus Helsingborg Avbrott. Syften med den här laborationen är att introducera avbrott. Avbrott som uppkommer periodiskt kallas periodiska avbrott. Med ett periodiskt avbrott kan vissa uppgifter utföras med jämna mellanrum. Periodiskt avbrott används i alla sorters datorsammanhang. Ibland kallas avbrott för undantag eller exception. I denna laboration ska vi se hur avbrott används för att få kontroll över programmet och dess kommunikation med omvärlden. Förberedelser Lösningen i förra laborationen har nackdelar. Datorn kommer att ödsla tid till att göra ingenting på grund av looparna för fördröjning. Ett bättre alternativ är att låta programmet läsa av tryckknappen med jämna mellanrum. Så här kan programmet från förra laborationen beskrivas: 1. Vänta tills knappen är nedtryckt. 2. Vänta med hjälp av vänteloop en viss tid så studsarna slutat. 3. Utför uppgiften (öka n med ett; om n blir 10 sätt n till noll; anropa utskriftsfunktionen med n som inparameter.) 4. Vänta tills knappen är släppt. 5. Vänta med hjälp av vänteloop en viss tid så studsarna slutat. 6. Gå till punkt 1. Med hjälp av periodiskt avbrott ska vi skapa en lösning som med jämna intervall gör följande: 1. Läs av knappen. 2. Om den är nere nu, men var uppe förra gången: Utför uppgiften (som är: öka n med ett; om n blir 10 sätt n till noll; anropa utskriftsfunktionen med n som inparameter. ) Vi ska lösa detta med en periodisk avbrottsfunktion. Det är en klocka som kommer generera ett avbrott med jämna perioder, exempelvis 10 ms intervall. Avsikten är att få saker gjorda regelbundet; inte för ofta och inte för sällan. Erik Larsson

Vi ska använda en av Atmega32:s inbyggda enheter som kallas Output Compare Unit. Den består i princip av en 16-bitarsräknare som man kan få att räkna i några olika farter och ett 16-bitars jämförelseregister vars värde hela tiden jämförs med räknaren. När de överensstämmer kan man få olika saker att hända, bl. a. att en utgång påverkas (därav namnet Output Compare ) eller att dess avbrottsfunktion anropas. Vi ska använda Timer/Counter1, se översikten här nedanför. Här i bilden får du tips med hur ett periodiskt avbrott med ett intervall på 10 ms skapas: Digitala system, Avbrott 2

I korthet fungerar det så här: 1. Vi ställer in så att 16-bitarsräknaren TCNT1 räknar i en lämplig fart. 2. När den nått sitt ett maxvärde ser vi till att den nollställs. 3. Vi ställer in maxvärdet OCR1A så det passar oss. 4. Vi bestämmer att avbrottsfunktionen ska köras varje gång maxvärdet nås. Ett antal register ska ställas in: TIMSK, Timer Interrupt Mask: Biten OCIE1A (Output Compare A Match Interrupt Enable) är ettställd (s 112 i databoken). När denna bit är ettställd, kommer en speciell funktion (avbrottsfunktionen) automatiskt att köras varje gång 16-bitarsräknaren har uppnått ett förinställt värde, maxvärdet. TCCR1A, Timer/Counter Control Register 1A: Här bestäms om och hur denna enhet direkt ska kunna påverka utgångar. (s 107-109 i databoken). Lägg märke till hur bitarna är inställda från början. TCCR1B, Timer/Counter Control Register 1B: Detta register innehåller bl.a. biten WGM12 (bit 3) som styr om räknaren ska nollställas automatiskt när den nått maxvärdet. Med de tre lägsta bitarna [CS12, CS11, CS10] kan processorns klockfrekvens delas så att den här timern inte går så fort. Titta i databoken sidan 110! Om vi t.ex. ställer in de tre bitarna på [0, 1, 1], så kommer en klockfrekvens på 1 MHz att delas med 64 så att vi får en frekvens på 15625 Hz. OCR1A, Output Compare Register 1A: Räknarens maxvärde (s 111 i databoken). För att ställa in en speciell avbrottsfrekvens (hur många avbrott som ska komma i sekunden), ska alltså klockfrekvensen, 1 MHz, delas ner med hjälp av de tre delningsbitarna i TCCR1B och värdet i OCR1A. Alltså: Om vi mot förmodan skulle vilja ha avbrott en gång per sekund, så kan vi exempelvis ställa in de tre delningsbitarna på [0, 1, 1] och sätta värdet i OCR1A till 15625. Fundera på följande: Om vi har en klockfrekvens på 1 MHz, vad blir då den lägsta avbrottsfrekvens som man kan använda? Hur ställer man in för att få den? Och vad blir den högsta frekvensen? Digitala system, Avbrott 3

Laborationsuppgifter Uppgift 1. Inställningar för avbrottet. Komplettera funktionen initoc1 så att den initierar avbrott så de kommer var 10:e ms. 1 MHz ska alltså delas ner så vi får 100 Hz. Se tipsen på sidan 3! void initoc1(){ // Output Compare 1 (s 94-113) TIMSK = ; // Aktivera avbrottet TCCR1A = 0; // Normal användning TCCR1B = ; // Nollställ vid OC, systemklocka/? OCR1A = ; // 1250x8=10000 (10 ms vid 1 MHz) } Uppgift 2. Avbrottsfunktionen. Avbrottsfunktionen som utförs automatiskt med jämna mellanrum skrivs så här: ISR (SIG_OUTPUT_COMPARE1A){ if((knappen nere nu)&&(knappen uppe förra gången)){ Utför uppgiften (öka n med ett; om n blir 10 sätt n till noll; anropa utskriftsfunktionen med n som inparameter.) } ISR betyder Interrupt Service Routine. SIG_OUTPUT_COMPARE1A är namnet på avbrottsfunktionen, och den måste heta så!. Det gäller nu att skriva if-satsen i avbrottsfunktionen. ((knappen nere nu)&&(knappen uppe förra gången)) Sanningshalten i (knappen nere nu) kan avgöras genom att direkt läsa av knappen. Hur skriver du detta?. Sanningshalten i (knappen uppe förra gången) kan du bara avgöra om du spar hur det såg ut förra gången dvs. för 10 ms sedan. Du behöver en variabel för att komma ihåg detta. Digitala system, Avbrott 4

Regler för variabler i avbrottsfunktioner: 1. Använd alltid typen volatile 2. Använd globala variabler eller static Ditt förslag hur detta ska lösas:... Uppgift 3. Testa programmet Innan du kan kompilera programmet, måste ett par tillägg göras i koden. 1. För att kompilatorn ska kunna översätta avbrottsrutinen rätt, måste man lägga till #include <avr/interrupt.h>. Titta gärna i den filen, men den är lite svår att förstå sig på. Men en sak man bör veta är att den ser till att ett hopp till en funktion med namnet SIG_OUTPUT_COMPARE1A läggs in i programminnet på adress 0x000E. Dit tvingas nämligen programmet var 10:e ms. Och det är därför vår avbrottsfunktion måste ha detta namn. 2. Hela avbrottssystemet måste sättas igång genom att ettställa bit 7 i registret SREG. Gör dessa kompletteringar! Kompilera programmet och testa! Det ska nu gå att räkna upp displayen genom att trycka på knappen. Uppgift 4. Testa gränserna! Ändra nu inställningarna i initoc1 så du får längsta tänkbara intervall mellan avbrotten. Hur ofta läses knappen av nu?... Ändra nu så att du får kortast tänkbara intervall mellan avbrotten. Hur ofta läses knappen av nu?... Uppgift 5. Experiment. Ändra tillbaka ditt program så att du återigen har 10 ms mellan avbrotten. Digitala system, Avbrott 5

Förändra det så att uppräkningar istället sker varje gång man släpper upp knappen. Förslag:. Försök få programmet att räkna upp både vid nedtryckning och vid uppsläpp. Förslag:. Digitala system, Avbrott 6