Projektlaboration 4, synkronisering av klockan

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

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

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

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

Datorprojekt, del 1. Digitala system 15 p

Seriekommunikation. Ur innehållet: Nätverkstopologier Nätverksprotokoll Asynkron/synkron seriell överföring Programmering av USART-krets

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

Dataöverföring på Parallell- och serieform MOP 11/12 1

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

Vad är en UART? Universal Asynchronous Receiver Transmitter parallella seriella parallell åttabitars signal mest signifikant bit

LABORATION DATORKONSTRUKTION TSEA83 UART. Namn och personnummer. Version: (OS)

Projektrapport - RoboWalter

Effektpedal för elgitarr

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

LTH Ingenjörhögskolan vid Campus Helsingborg. Mastermindspel

AVR 5. Styrning av trafikljus. Digitala system 15 p

GSM-alarmmodul. Mats Röösgren

Lunds Tekniska Högskola. I-10 Grupp 11: David Sundström Max Schulz Albert Lundberg Handledare: Bertil Lindvall

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Datorteknik 2 (AVR 2)

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

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

Laboration 5 C-programmering på AVR TSEA57 Datorteknik I

CPU. Carry/Borrow IX. Programräknare

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

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

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

IS1500 Lösningar övning CE_O CE_O7. Programmerad in/utmatning. Serieport. Förberedelser till nios2io.

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

Tentamen med lösningsförslag

Tentamen med lösningsförslag

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

DIGITALA PROJEKT Väderstation

Microprocessor / Microcontroller. Industrial Electrical Engineering and Automation

Datakommunikation med IR-ljus.

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

EITF11 - Digitala Projekt

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

Seriekommunikation. Ur innehållet: Nätverkstopologier Nätverksprotokoll LIN, CAN Asynkron/synkron seriell överföring Programmering av USART-krets

Digitala Projekt (EITF11) Larmanläggning

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

Vad är kommunikation? Vad är datorkommunikation? Dataöverföring; Inledning

BRUKSANVISNING Bruksanvisning för roboten Saphira

Digital- och datorteknik

Digital- och datorteknik

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

Innehåll. 1 Inledning 3

Övningar modul 1 - Dataöverföring & fysisk infrastruktur

Kommunikationssystem grundkurs, 2G1501 Övningar modul 1 Dataöverföring & fysisk infrastruktur 1 Dataöverföring

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

GPIO - General Purpose Input Output

FX2N-232-IF, kommunikationsmodul KI00055F

LABORATION. Datorteknik Y

Högskolan i Halmstad Digital- och Mikrodatorteknik 7.5p. Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

AVR Studio 4 Och AVRFLASH

Design av inbyggda system

Microprocessor / Microcontroller

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Programmering av inbyggda system. Seriekommunikation. Viktor Kämpe

Väderstation. Datum: Projektarbete vid elektro och informationstekniks institution

Projektrapport i Digitala System

Maskinorienterad programmering

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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

Övning 7. Timer, serieport

Föreläsningsanteckningar till Konstruktionsmetoder

CE_O3. Nios II. Inför lab nios2time

Design vid utveckling av inbyggda system

USB till COM-port. Inlämningsuppgift 10b USB till COM-port. Här ska du: Installera en konverterare mellan gränssnitten USB och RS232 (COM-port).

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

Växtviskaren EITF11 Digitala projekt VT15, I12

Datorteknik 1 (AVR 1)

MIKRODATORTEKNIK 2012 INNEHÅLLSFÖRTECKNING

Digitala Projekt(EITF40) - Larm

Arduinokurs. Kurstillfälle 4

Design av inbyggda system

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

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

Seriekomunikation. CAN ett kommunikationsprotokoll för realtidssystem. Seriekomunikation -forts. Seriekomunikation -forts

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

Miniräknare. Laborationsrapport Laborationsrapport i mikrodatorkonstruktion. En rapport skriven av teknologstuderande: Martin Bergström Gert Johnsen

Lösningar till tentamen i EIT070 Datorteknik

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

Programmering av inbyggda system 2014/2015

Instruktion till. PigWin PocketPigs. Del 1 - Installation

Demonstration och konsultation Arbetsbokens avsnitt 7 Händelsestyrt processbyte Förberedande inför laboration 4

Kapitel 2 o 3 Information och bitar Att skicka signaler på en länk. Att sända information mellan datorer. Information och binärdata

Manual Sportident Onlinekontroll via GPRS

LTH Ingenjörshögskolan vid Campus Helsingborg. Philip Damberg. Emil Jönsson. Andreas Nilsson. Måns Prahl. Klockflöjten

Instruktioner för uppdatering av enheter med ISP

Kontrollskrivning Mikrodatorteknik CDT S2-704

LEU240 Mikrodatorsystem

Kapitel 3 o 4. Tillförlitlig dataöverföring. (Maria Kihl)

Digitala projekt - Radiostyrd bil

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

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

Drivrutiner för att hantera teckenfönster.

Digitala Projekt (EITF11)

Kapitel 2 o 3. Att skicka signaler på en länk. (Maria Kihl)

A-del motsvarande KS1

Transkript:

Namn: Laborationen godkänd: Digitala system 15 p L T H I n g e n j ö r s h ö g s k o l a n v i d C a m p u s H e l s i n g b o r g Datorprojekt, del 4 Projektlaboration 4, synkronisering av klockan Asynkron seriekommunikation. Förberedelser. I denna laboration ska vi komplettera vårt digitalur med en synkroniserings mekanism. Med den asynkrona seriekommunikationen ska meddelanden tas emot varje sekund. Hur de ser ut finns beskrivet längre fram i laborationen. Läs de delar av USART register description sid 189 197 i databoken Atmega128 som du behöver för att förstå resten av förberedelserna. Placera de nya funktionerna i en fil AVR-MT-128-USART.c. Erik Larsson 30 mars 2016

USART är den engelska förkortningen för Universal Synchronous and Asynchronous serial Receiver and Transmitter. Den är en kraftfull och användbar periferienhet för seriell kommunikation. Vi ska använda den för att ta emot 8-bitars seriella dataord (kallas tecken i fortsättningen). Vad behöver vi känna till för att kunna använda denna enhet? Atmega 128 innehåller två USARTar. Den som finns tillgänglig på labkortet är USART1, och den går att ansluta på två olika kontakter. Två pinnar i port D används: TxD bit 3 och RxD bit 2. Här är de register som vi ser i AVR Studio: Vi har ett register för inställning av bithastigheten (UBRR1), tre kontroll- och statusregister (UCSR1A, UCSR1B, UCSR1C) och ett register för dataöverföring (UDR1). UDR1 är dataregistret för både sändning och mottagning av tecken. Egentligen är det två olika register men de har samma adress. Vi kommer bara att behöva ta emot tecken och alltså läsa i UDR1. UBRR1H och UBRR1L (höga och låga halvan av UBRR1) är register där man ställer in bithastigheten för den seriella överföringen. Man kan tolka dem som ett 12-bitars register UBRR1 där man lägger ett tal som delar ner mikroprocessorns klockfrekvens så att serieöverföringen går i rätt fart. Den frekvens man får, är mottagarens samplingsfrekvens. Vi använder klockfrekvensen 16 MHz och ska använda överföringshastigheten 2400 baud. Titta i databladen för ATmega128! Överföringshastigheten påverkas också av biten U2X1. Vilket värde ska läggas i UBRR1 och vad ska U2X1 ställas in på? UBRR1 =.. U2X1 =. Vår uppgift är alltså att ta emot tecken med 2400 baud. Nu vet vi hur man ställer in hastigheten och var man läser de mottagna tecknen. 2

Men vi har några inställningar kvar: Vi ska ta emot teckenmeddelanden på 8 bitar (man kan välja 5, 6, 7, 8 eller 9). Vi måste starta igång USARTen. Vi vill också att ett speciellt avbrott ska ske varje gång vi får ett nytt tecken. Bitar vi då behöver känna till: UCSZ1: (3 bitar) Character Size. RXEN1: Receiver Enable. RXCIE1: Receive Complete Interrupt Enable. De röda bitarna ska du känna till funktionen på. Hur ska dessa bitar ställas in? Kan alla ställas in? Kontrollera i databoken. 3

Uppgift 1. initusart1. Initiering av seriekanalen. Skriv funktionen initusart1 som gör följande: 1. Mottagaren ska kopplas på. 2. Den ska vara inställd på 8 bitar och en stoppbit. 3. Hastigheten ska vara 2400 baud (vid 16 MHz klockfrekvens) 4. Avbrott ska ske när ett tecken kommit. void initusart1 (void){ // Uppgift 1 Uppgift 2. Avbrott för mottagning av tecken. Funktion för mottagning av tecken. Tecken som kommer in ska läggas i en global variabel character_in. Avbrottsrutinens namn är förutbestämt. //============================================================ //=========== Seriell mottagning. ============================ //============================================================ unsigned char character_in; ISR (SIG_USART1_RECV){ character_in = UDR1; // Uppgift 3 Du kan testa denna avbrottsfunktion genom att skicka iväg ett tecken och se om du får tillbaka det igen. Hur gör man för att skicka iväg ett tecken?... Du bör få ett avbrott och om du sätter en brytpunkt i den nya avbrottsfunktionen kan du se om det fungerar. 4

Feldetektering. Uppgift 3. Synkroniseringen. Det finns ett AVR-MT-128 kort som är programmerat så att det sänder ut en tidssignal varje sekund. Det sker i en funktion sendclock som du ser här nedanför. Du behöver inte skriva in den; den finns här för att du ska kunna förstå hur mottagningsfunktionen ska se ut. Funktionen borde kanske kommenteras, men personen som skrivit den orkade inte. Tänk själv ut vad den utför och besvara frågorna. ///////////////////////////////////// // Styrklockans sändningsfunktion. // ///////////////////////////////////// void sendclock(void){ unsigned char sum=0; sendcharacter(255); sendcharacter(seconds); sum = sum + seconds; sendcharacter(minutes); sum = sum + minutes; sendcharacter(hours); sum = sum + hours; sendcharacter(~sum); 1. Hur många värden skickar funktionen åt gången?... 2. Varför skickas värdet 255 ut i början?... 3. Vad skickas på slutet?... 4. Vilken typ av feldetektering används alltså?... Gör ett besök i anteckningarna från kursen Datorkommunikation! Det sista värdet som du tar emot ska alltså användas för att kontrollera att hela meddelandet är rätt. För att kunna ta emot tidssignalen behöver du en liten buffert för seriemeddelandet. Istället för att bara ha en plats, character_in, ska du nu komplettera med en buffert med fyra platser där du kan ta emot enkla små meddelanden. Så fort bufferten är full, sätts en variabel, new_message = 1. Här får du koden till detta; den ska in i avbrottsrutinen för USART. Koden är skriven i språket C-venska. :o) 5

// Bufferten: char new_message; // Ettställs om ett nytt meddelande kommit char serial_buffer[4]; // Bufferten med fyra platser char serial_buffer_pointer; // Buffertpekare // Koden som skriver i bufferten: om (inläst värde är 0xFF) Nollställ buffertpekaren; annars om (bufferten ännu inte full) { Lägg character_in i bufferten; Öka buffertpekaren; om (buffertpekaren är 4) new_message=1; Skriv in koden (översätt till C)! Uppgift 4. Uppdatering av klockan. Med hjälp av funktionerna ovan ska du nu kunna skriva en mottagarfunktion, getclock, som plockar in tidssignalen från bufferten varje gång new_message = 1. Använd samma princip som när new_time läses av och kvitteras. Tänk på: Uppdatera inte timmar, minuter och sekunder om meddelandet är felaktigt. Det kommer sådana meddelanden också. När allt fungerar stabilt, är du klar. 6