Datorteknik. Exempeluppgifter i Laborativ Examination

Relevanta dokument
Kontrollskrivning Mikrodatorteknik CDT S2-704

Datorteknik Hyfsa kod

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

A-del motsvarande KS1

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

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Ett program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå.

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Hantera remissvar i Public 360

Digitala Projekt(EITF40) - Larm

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

Repetition TSIU05 Digitalteknik Di/EL. Michael Josefsson

Skapa remissvar till regeringen, skicka för godkännande, godkänna, diarieföra och skicka svar

Laboration 5 TSEA57 Datorteknik I

Datorteknik TSIU02 Lab 4 Spel v0.3

Skapa rapport till regeringen, skicka för godkännande, godkänna, diarieföra och skicka rapport

LiTH Lab1: Asynkron seriell dataöverföring via optisk länk Laboration 1. Asynkron seriell dataöverföring via optisk länk

Minnen delas in i två huvudgrupper, permanenta och icke permanenta. Non-volatile and volatile.

Övning 6. Parallellport, timer

Datorteknik Övningsuppgifter

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

TSIU50 Mikrodatorprojekt. LAB1 AVR-introduktion och logikanalysator

GPIO - General Purpose Input Output

"Crash Course in Programming"

The Phenomenal Doorbell Bilaga 2. Källkod

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

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

Stockholm Till de organisationer som undertecknat beslutet om samverkan

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

Datorteknik 1 (AVR 1)

Datorteknik TSIU02 Moduler

Övningsuppgifterna i kapitel F avser FLIS-processorn, vars instruktioner och motsvarande koder definieras i INSTRUKTIONSLISTA FÖR FLISP.

Laboration i digitalteknik Datablad

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

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

Digitala Projekt(EITF40) - Larm

Laborationskort - ML4

Laboration i digitalteknik Datablad

GPIO - General Purpose Input Output

Laboration i digitalteknik Introduktion till digitalteknik

Program kan beskrivas på olika abstrak3onsnivåer. Högnivåprogram: läsbart (för människor), hög abstrak3onsnivå, enkelt a> porta (fly>a 3ll en annan ar

Datorprojekt, del 1. Digitala system 15 p

Laboration 2 i Datorteknik- Assemblerprogrammering II

Styrteknik: Binära tal, talsystem och koder D3:1

AVRStudio på tre minuter. Micke Josefsson, 2005

Växtviskaren EITF11 Digitala projekt VT15, I12

Föreläsningsanteckningar till Konstruktionsmetoder

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Support Manual HoistLocatel Electronic Locks

microlf, , Alla rättigheter förbehålles

KALIBRERINGS MENY. För att komma tillbaka till Mätfunktionerna håll inne M -knappen 3s. eller vänta 1 min. 1 =MOD. 9.6 KBaud

DATORTEKNIK. Laboration D280 - D285. För Basic Stamp II

Laboration Datorteknik D 1. IR-länk

ETE115 Ellära och elektronik, vt 2016 Laboration 1

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

Checklista som kan anva ndas för att komma igång med DigiExam och allma nna rekommendationer fo r att lyckas med provtillfa llet.

Kodlås. Kopplingsschema över kodlåset PAL-18

Digitala Projekt (EITF11) Hemlarm

ALGE S4 Tidtagningsutrustning - Tävling

TSIU05 Digitalteknik. LAB1 Kombinatorik LAB2 Sekvensnät LAB3 System

Lösningar till tentamen i EIT070 Datorteknik

c a OP b Digitalteknik och Datorarkitektur 5hp ALU Design Principle 1 - Simplicity favors regularity add $15, $8, $11

OBS! Detta är ingen komplett bruksanvisning utan endast ett komplement till den tyska/engelska

KALKYLATOR LABORATION4. Laborationens syfte

Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

KARTLÄGGNING. 1.2 Finns det en integrationsstrategi i ert arbete mot denna ma lgrupp?

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

AVR 5. Styrning av trafikljus. Digitala system 15 p

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

Datorteknik 2 (AVR 2)

Kombinationskretsar. Föreläsning 4 Digitalteknik Mattias Krysander Institutionen för systemteknik

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

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

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

LABORATION. Datorteknik Y

Exempelsamling Assemblerprogrammering

2.45GHz CF Card Reader User Manual. Version /09/15

Laboration Datorteknik D 3. Digitalur

Övning 7. Timer, serieport

LATHUND FÖR GENOMFÖRANDE AV. Final i Snabbpistol på papperstavlor

Kompendium Mikrodatorteknik

Föreläsning 3. Programmering, C och programmeringsmiljö

F2 Binära tal EDA070 Datorer och datoranvändning

Exempel 4. Användning av en timer

PARITETSKONTROLL. Om generatorn i vidstående exempel avkänner ett jämt antal ettor ger den en nolla ut. Detta innebär att överföringen

LABORATION. Datorteknik Y

5:2 Digitalteknik Boolesk algebra. Inledning OCH-funktionen

Datorteknik Övningsuppgifter

Arduinokurs. Del 1 - Vett och etikett. Talsystem. Binärt ettor och nollor

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

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


Datorarkitektur I. Tentamen Lördag 10 April Ekonomikum, B:154, klockan 09:00 14:00. Följande gäller: Skrivningstid: Fråga

Digital Personvåg MANUAL H

Källkod. #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define green_diode PD5. #define RS PD4

3. Mikroprogrammering II

INNEHÅLL mywellness key mywellness key mywellness key mywellness key mywellness key


Thunder s Truck projektrapport

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Transkript:

Datorteknik Exempeluppgifter i Laborativ Examination Michael Josefsson Version 0.1

Inledning Nedan följer förslag på några representativa demonstrationslaxar. Uppgifterna är konstruerade så att de ska innehålla sekvens, iteration och selektion enligt JSP. Dessutom bör de komma ihåg någon tidigare händelse. De skarpa LAX-arna är av samma komplexitetsgrad, har samma eller liknande hårdvara men är inte dessa uppgifter. Inlärningen sker i den kreativa processen i hjärnan när du själv konstruerar en lösning. Titta inte på lösningsförslagen om du inte har ett eget förslag att jämföra med! Namn In-enhet Ut-enhet LAX-DEMO 1 Hextangentbord 2 x 7-segmentsdisplay LAX-DEMO 2 2 x Tryckknapp 2 x 7-segmentsdisplay LAX-DEMO 4 Hextangentbord 2 x 7-segmentsdisplay LAX-DEMO 5 Hextangentbord Lysdioddisplay Träna så att du kan ta fram en fungerande lösning på 30 45 minuter.

Datorteknik LAX-DEMO 1 Sjusegmentsdisplayen Matningsspänning är U (5 V) och 0 (0 V). Indata till respektive segment är de fyra bitarna d, c, b, a. Tidsomfattning: 90 minuter inkl redovisning Uppgift I labsatsen finns ett hexadecimalt tangentbord. Det ger ut fyra bitar data (d,c,b,a) vid nedtryckt tangent men även en strobe-signal som är hög så länge någon tangent är nedtryckt. Din uppgift är att läsa av det hexadecimala tangentbordet, en siffra åt gången, och presentera dess decimala motsvarighet på två sjusegmentsdisplayer, tiotalssiffran till vänster och entalssiffran till höger. Displayerna kan visa de hexadecimala siffrorna 0-F, men ska här bara visa 0-9. Senaste decimaltal ska kontinuerligt visas tills en ny siffra trycks ned på tangentbordet. Tangentbordet kan inte ge flera utsignaler även om flera tangenter trycks ned samtidigt, följaktligen behöver inte programmet ta någon hänsyn till detta fall. Obs! Hårdvaruinitieringen måste utföras som en subrutin. Hårdvara labsats sjusegmentsdisplay hexadecimalt tangentbord Tangentbordet med kopplingsplatta Matningsspänning +5 V påförs pinne 1, 0 V pinne 8. Utdata, fyra bitar, återfinns på pinnarna 3, 5, 7 och 9. Strobe-signalen är pinne 2. Stroben är hög så länge någon knapp är nedtryckt. Datat kommer samtidigt och ligger kvar tills nästa knappnedtryckning: Funktionskontroll och examination Funktionen prioriteras! Någon kodgranskning, utöver kontroll av att hårdvaruinitieringen är utförd som subrutin, kommer inte ske. Funktionen kontrolleras genom upprepade tryckningar på det hexadecimala tangentbordet och kontroll på sjusegmentsdisplayen. Nöjaktig funktion resulterar i godkänd LAX. DATA DATA DATA DATA Tryck Tryck Tryck

Datorteknik LAX-DEMO 2 Sjusegmentsdisplayen Matningsspa nning a r U (5 V) och 0 (0 V). Indata till respektive segment a r de fyra bitarna d, c, b, a. Tidsomfattning: 90 minuter inkl redovisning Uppgift I labsatsen finns tva tryckknappar. Dessa ger en positiv och en negativ flank som utsignal fra n var sina stift, fo r respektive tryckknapp. Din uppgift a r att ra kna antalet nedtryckningar av den va nstra tryckknappen. Na r den ho gra tryckknappen trycks ned ska detta antal visas pa en sjusegmentsdisplay, och fortsa tta att visas a ven efter att den ho gra tryckknappen sla ppts upp. Da refter ska man kunna bo rja om med att ra kna nedtryckningar av den va nstra tryckknappen. Displayerna kan visa de hexadecimala siffrorna 0-F. Trycker man mer a n 15 ga nger pa den va nstra tryckknappen sa ska displayen visa F, dvs 1510 hexadecimalt. Tryckknappar Matningsspa nning a r U (5 V) och 0 (0 V). Varje knapp ger en positiv och en Obs! Ha rdvaruinitieringen ma ste utfo ras som negativ flank som utsignal fra n var sina stift da en subrutin. knappen trycks ned. Utsignalen a terga r sedan na r knappen sla pps upp. Ha rdvara sjusegmentsdisplay tryckknappar Funktionskontroll och examination Funktionen prioriteras! Na gon kodgranskning, uto ver kontroll av att ha rdvaruinitieringen a r utfo rd som subrutin, kommer inte ske. Funktionen kontrolleras genom upprepade tryckningar pa tryckknapparna och kontroll pa sjusegmentsdisplayen. No jaktig funktion resulterar i godka nd LAX.

Datorteknik LAX-DEMO 4 Tidsomfattning: 90 minuter inkl redovisning Sjusegmentsdisplay Displayen har två sjusegments indikatorer. Matningsspänning är U (5 V) och 0 (0 V). Indata till respektive segment är de fyra bitarna d, c, b, a. Uppgift: I labsatsen finns ett hexadecimalt tangentbord. Det ger ut fyra bitar data (d,c,b,a) vid nedtryckt tangent men även en strobe-signal som är hög så länge någon tangent är nedtryckt. Din uppgift är att visa nedtryckta decimala tangentvärden från tangentbordet på vänster alternativt höger indikator på sjusegmentsdisplayen. Med tangenten F ska man kunna växla (toggla) indikator så att efterföljande tangentvärden hamnar till vänster ifall höger indikator tidigare användes, och vice versa. Gamla värden ska dock alltid ligga kvar tills dom ersätts av nya från tangentbordet. Tangenterna A, B, C, D och E ska inte ha någon funktion eller påverkan. Obs! Hårdvaruinitieringen måste utföras som en subrutin. Hårdvara labsats sjusegmentsdisplay hexadecimalt tangentbord Tangentbordet med kopplingsplatta Matningsspänning +5 V påförs pinne 1, 0 V pinne 8. Utdata, fyra bitar, återfinns på pinnarna 3, 5, 7 och 9. Strobe-signalen är pinne 2. Stroben är hög så länge någon knapp är nedtryckt. Datat kommer samtidigt och ligger kvar tills nästa knappnedtryckning: Funktionskontroll och examination Funktionen prioriteras! Någon kodgranskning, utöver kontroll av att hårdvaruinitieringen är utförd som subrutin, kommer inte ske. Funktionen kontrolleras genom upprepade tryckningar på det hexadecimala tangentbordet och kontroll på sjusegmentsdisplayen. Nöjaktig funktion resulterar i godkänd LAX. DATA DATA DATA DATA Tryck Tryck Tryck

Datorteknik LAX-DEMO 5 Lysdioddisplay Matningsspa nning a r U (5 V) och 0 (0 V). Lysdioderna styrs individuellt av inga ngarna 7 till 0 nederst pa plattan. Tidsomfattning: 90 minuter inkl redovisning Uppgift: I labsatsen finns ett hexadecimalt tangentbord. Det ger ut fyra bitar data (d,c,b,a) vid nedtryckt tangent men a ven en strobe-signal som a r ho g sa la nge na gon tangent a r nedtryckt. Din uppgift a r att visa ett nedtryckt tangentva rde bina rt pa lysdioddisplayens fyra mest va nstra lysdioder. Samma tangentva rde ska a ven visas pa dom fyra mest ho gra lysdioderna, inverterat (obs ej speglat) eller normalt. Inverterad eller normal visning fo r dom fyra mest ho gra lysdioderna togglas med tangent 0, som ocksa ska visas pa samma sa tt som o vriga tangentva rden. Dvs, om normal visning ra der ska lysdioderna 7 4 och lysdioderna 3 0 visa samma sak, men om inverterad visning ra der ska lysdioderna 3 0 visa det inverterade va rdet av lysdioderna 7 4, vilka alltsa alltid ska visa tangentva rdet. Obs! Ha rdvaruinitieringen ma ste utfo ras som en subrutin. Tangentbordet med kopplingsplatta Matningsspa nning +5 V pa fo rs pinne 1, 0 V pinne 8. Utdata, fyra bitar, a terfinns pa pinnarna 3, 5, 7 och 9. Strobe-signalen a r pinne 2. Stroben a r ho g sa la nge na gon knapp a r nedtryckt. Datat kommer samtidigt och ligger kvar tills na sta knappnedtryckning: Ha rdvara labsats lysdioddisplay hexadecimalt tangentbord Funktionskontroll och examination Funktionen prioriteras! Na gon kodgranskning, uto ver kontroll av att ha rdvaruinitieringen a r utfo rd som subrutin, kommer inte ske. Funktionen kontrolleras genom upprepade tryckningar pa det hexadecimala tangentbordet och kontroll pa lysdioddisplayen. No jaktig funktion resulterar i godka nd LAX. DATA DATA Tryck DATA Tryck DATA Tryck

Lösningsförslag Instruktioner Inlärningen sker i den kreativa processen i hjärnan när du själv konstruerar en lösning. Titta inte på förslagen nedan om du inte har ett eget förslag att jämföra med! Man lär sig koda bättre genom att läsa mycket kod. Jämför förslagen med din egen lösning och förbättra dem båda. Vad kan göras för att få mer lättläst kod? Är strukturen den bästa? Skulle koden tjäna på globala konstanter? Variabelnamn? Finns det alternativa lösningsmetoder? Vid LAX-tillfället sker visserligen ingen kodgranskning men man tjänar ändå på att ha ett strukturerat angreppssätt med subrutiner och bra namngivning av labels. Namn In-enhet Ut-enhet LaxDemo1.asm Hextangentbord 2 x 7-segmentsdisplay LaxDemo2.asm 2 x Tryckknapp 2 x 7-segmentsdisplay LaxDemo2a.asm Dalia Dalia LaxDemo4.asm Hextangentbord 2 x 7-segmentsdisplay LaxDemo5.asm Hextangentbord Lysdioddisplay LaxDemo5mini.asm Hextangentbord Lysdioddisplay LabDemo5mini.asm är ett försök att konstruera en resurssnål lösning. Här har man eliminerat kod genom att bland annat koppla om hårdvaran och ta bort i det här fallet onödiga instruktioner. Lösningen tillhör kategorin ful kod.

/* LaxDemo1. asm * Compiles to 50 bytes (42 if call etc ) */ COLD : MAIN : PRINT : WAIT : ldi r16, HIGH ( RAMEND ) out SPH, r16 ldi r16, LOW ( RAMEND ) out SPL, r16 call HW_INIT sbis PINA,4 ; wait for strobe / key press jmp MAIN in r16, PINA ; read key andi r16, $0F cpi r16,10 brmi PRINT subi r16, $FA out PORTB, r16 sbic PINA,4 ; wait for key release jmp WAIT jmp MAIN ; process next digit ; --- Config I/O HW_INIT : ldi r16,0 out DDRA, r16 ; PORTA <4 > strobe, PORTA <3-0 > data dec r16 out DDRB, r16 ; PORTB <7-0 > display

/* LaxDemo2. asm * Compiles to 70 bytes (62 if call etc ) */ COLD : WARM : ldi r16, HIGH ( RAMEND ) out SPH, r16 ldi r16, LOW ( RAMEND ) out SPL, r16 call HW_INIT call GETKEYS sbrc r16,1 inc r17 ; left pressed sbrc r16,0 call SHOWIT ; right pressed jmp WARM SHOWIT : cpi r17, $0F brmi SHOWIT2 ldi r17, $0F SHOWIT2 : out PORTB, r17 ; clr r17 ; show progress GETKEYS : in r16, PIND andi r16, $03 cpi r16, $00 brne GETKEYS ; wait for release GETKEYS2 : in r16, PIND andi r16, $03 cpi r16, $00 breq GETKEYS2 ; wait for press HW_INIT : ldi r16, $00 out DDRD, r16 ; bit1 - left, bit0 - right ldi r16, $FF out DDRB, r16 clr r17 ; no sum yet

/* LaxDemo2a. asm * Compiles to 72 bytes (64 if call etc ) * Version for Dalia * Input : Buttons INT1 and INT0 * Output : on - board LED */ COLD : WARM : ldi r16, HIGH ( RAMEND ) out SPH, r16 ldi r16, LOW ( RAMEND ) out SPL, r16 call HW_INIT call GETKEYS sbrs r16,3 inc r17 ; left pressed sbrs r16,2 call SHOWIT ; right pressed jmp WARM SHOWIT : cpi r17, $0F brmi SHOWIT2 ldi r17, $0F SHOWIT2 : out PORTB, r17 ; clr r17 ; show progress GETKEYS : in r16, PIND andi r16, $0C cpi r16, $0C brne GETKEYS ; wait for release GETKEYS2 : in r16, PIND andi r16, $0C cpi r16, $0C breq GETKEYS2 ; wait for press HW_INIT : ldi r16, $00 out DDRD, r16 ldi r16, $FF out DDRB, r16 out PORTD, r16 ; pull - up, PD3 left, PD2 right clr r17 ; no sum yet

COLD : WARM : /* LaxDemo4. asm * Compiles to 86 bytes (72 if rcall etc ) */ ldi r16, HIGH ( RAMEND ) out SPH, r16 ldi r16, LOW ( RAMEND ) out SPL, r16 call HW_INIT call GETKEY cpi r16, $0F ; "F"? brne NO_TOGGLE com r18 ; yep! NO_TOGGLE : cpi r16,10 ; 0-9? brpl WARM ; A- F no update in r17, PORTB ; get displayed sbrs r18,0 ; 0 -> right, 1 -> left jmp RIGHT LEFT : andi r17, $0F ; clear left swap r16 ; put digit in place jmp SHOWIT RIGHT : andi r17, $F0 ; clear right SHOWIT : or r17, r16 ; merge out PORTB, r17 ; and display jmp WARM ; --- GETKEY urns key in r16 GETKEY : sbic PINA,4 ; wait for release jmp GETKEY GETKEY2 : sbis PINA,4 jmp GETKEY2 ; wait for press in r16, PINA ; get key andi r16, $0F ; --- I/O ; PA4 STROBE ; PA3-0 Data ; PB7-4 Left digit ; PB3-0 Right digit HW_INIT : ldi r16, $00 out DDRA, r16 ldi r16, $FF out DDRB, r16 ldi r16, $00 out PORTB, r16 ; "00" clr r18 ; toggle byte

/* LaxDemo5. asm * Compiles to 70 bytes (60 if rcall etc ) */ COLD : ldi r16, HIGH ( RAMEND ) out SPH, r16 ldi r16, LOW ( RAMEND ) out SPL, r16 rcall HW_INIT WARM : rcall GETKEY mov r17, r16 ; r16 rightmost brne NO_ZERO com r19 ; was a "0" NO_ZERO : cpi r19,0 breq WARM3 ldi r18, $0F ; invert right eor r16, r18 WARM3 : swap r17 or r16, r17 out PORTB, r16 rjmp WARM ; --- GETKEY Return pressed key in r16 GETKEY : sbic PINA,4 ; wait for release rjmp GETKEY GETKEY2 : sbis PINA,4 ; wait for press rjmp GETKEY2 in r16, PINA andi r16, $0F ; urn key ; --- I/O init, initial state HW_INIT : clr r16 out DDRA, r16 ldi r16, $FF out DDRB, r16 clr r19 ; 0 -> normal, 1 -> inverted

/* * LaxDemo5mini. asm * Attempt at minimal, and hence ugly, code * Compiles to 32 bytes */ COLD : WARM : KEY : CONT : ldi r16, HIGH ( RAMEND ) out SPH, r16 ldi r16, $FF out DDRB, r16 sbic PIND,0 ; wait for release rjmp WARM sbis PIND,0 ; wait for press rjmp KEY in r16, PINA cpi r16,0 brne CONT com r17 ; was a "0" sbrc r17,0 eor r16, r17 out PORTB, r16 rjmp WARM