Pulsmätare Digitala Projekt EITF11

Relevanta dokument
Digitala Projekt(EITF40) - Larm

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

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

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

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

Bilen som inte kan krocka

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

Digitala Projekt(EITF40) - Larm

DIGITALA PROJEKT (EITF40) Fartmätare

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

Thunder s Truck projektrapport

Pulsmätare med varningsindikatorer

Växtviskaren EITF11 Digitala projekt VT15, I12

Digitala projekt, EDI021 Rapport Handledare: Bertil Lindvall

TETRIS. LTH, Campus Helsingborg EITA15 Digitala System

Lunds Tekniska Högskola EITF11 Digitala projekt. Bandspelaren

Digitala Projekt (EITF11) Hemlarm

EITF40 - RFID-terminal. Joakim Marculescu (dt08jm6), Eric Johansson (dt08ej6)

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

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

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

Digitala System Projekt - EITA15 VT *SUPER DUPER KLOCKAN*

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

Effektpedal för elgitarr

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

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

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

The Phenomenal Doorbell Bilaga 2. Källkod

TEMPERATURMÄTARE MED GRAFRITARE

Projektrapport - Roterande digital LED-klocka

Digitala Projekt (EITF11)

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

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

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

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

Arduinokurs. Kurstillfälle 4

High Core Remote Car X8000 Cool

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

Projektrapport Målgång

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

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

Rapportsammanfattning. Optima Sous Vide

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

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

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

The Intelligent Timer

Digitala projekt rapport

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

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

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

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

Digitalt Projekt: Radiostyrd Bil

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

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

DIGITALA PROJEKT Väderstation

Datorteknik 2 (AVR 2)

Rafiki Wa Kupanda. EITF11, Digitala projekt VT18. Linnea Håkansson, Anton Gunneberg, Ruben Schultz

EITF11: Bandkanon Grp 05

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

Projektrapport - Feststation

TEMPERATUR OCH VINDMÄTARE MED HÖGTALARFUNKTION

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

Digitala projekt Linjeföljande bil

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

Kla ggvisarskylt. -med en underton av rassel. av Jonathan So nnerup & Gabriel Jo nsson

LTH. EITF11- Digitalaprojekt. Projektrapport WEB

Linjeföljare Digitala projekt Johan Engström e02je Henrik Persson e02hp

Digitala projekt VT Myran

Datorteknik 1 (AVR 1)

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

Digitala Projekt VT13. PING-Pong

Kontrollskrivning Mikrodatorteknik CDT S2-704

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

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

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

RAPPORT: DIGITALA PROJEKT

Innehåll. 1 Inledning 3

Helena Harrysson och Linnéa Wickberg

WALL E. WALL EVADER EDI021 DIGITALA PROJEKT

Datorprojekt, del 1. Digitala system 15 p

LTH Ingenjörhögskolan vid Campus Helsingborg. Mastermindspel

Guitar Tuner EITF11 Digitala Projekt, Projektrapport Elektro- och informationsteknik

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

EIT. Digitala projekt EITF11. Larmanläggning. Handledare Bertil Lindvall Anna Lindberg I-11 Caroline Vitasp I-11 Eric Eliason I-10

Projektrapport i Digitala System

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

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

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

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

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

PROJEKT STAFFAN STALLEDRÄNG

Digitala projekt - Radiostyrd bil

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

Tentamen i Digitalteknik, EIT020

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

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

Programmera i teknik - kreativa projekt med Arduino

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

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

Transkript:

Pulsmätare Digitala Projekt EITF11 Grupp 5 Sebastian Mattsson, 900611 ain09sma@student.lu.se Johannes Persson, 880823 ain09jpe@student.lu.se Handledare: Bertil Lindvall

Innehållsförteckning Inledning...3 Problemformulering...3 Krav...3 Utförande...3 Design och komponenter...3 Konstruktion av hårdvara...4 Konstruktion av programvara...4 Resultat...5 Slutsats...6 Referenslista...7 Appendix...8

Inledning Under detta projekt har en pulsmätare konstruerats. Pulsmätaren skall fungera likt en pulsmätare på sjukhus, med en grafisk representation av pulsen samt en numerisk framställning som visar antalet pulser per minut. Två knappar används i konstruktionen för att växla mellan det grafiska och numeriska läget. Pulsmätaren skall kunna räkna antalet pulser under 10 sekunder för att sedan omvandla resultatet till pulser per minut. Samtidigt skall pulserna kunna visas i realtid på displayen i det grafiska läget. Problemformulering Detta projekt omfattar byggandet av en pulsmätare. Med hjälp av processortyp AT MEGA16, en grafisk display, två knappar och en signalgenerator ska pulsmätaren både kunna visa antalet pulser i minuten samt ge en grafisk representation av pulserna. Detta innebär att det inte får vara för lång fördröjning mellan den verkliga pulsen och pulsen som genereras i den grafiska displayen. Knapparna ska skifta mellan två lägen, grafiskt och numeriskt. Krav Knapp 1 ger grafiskt läge på displayen. Knapp 2 ger numeriskt läge på skärmen. Det numeriska läget uppdateras 1 gång/ 10 sekunder. I det grafiska läget uppdateras grafen i realtid. Utförande Design och komponenter Designen på konstruktionen byggs kring en processor av typ ATMEGA16. Processorn är en 8-bitars AVR Microcontroller med ett programmerbart flashminne på 16 KB och har 32 in- och utpinnar tillgängliga. Till processorn kopplas en grafisk display av typ GDM-12864C, detta för att möjliggöra det grafiska läget. Displayen består av 128 x 64 pixlar och delas upp i två displayhalvor som styrs med hjälp av två controllers av typ S6B0108. Val av vilken sida i displayen som skall skrivas/läsas i avgörs med signalerna Chip Select 1 och Chip Select 2. Pulsgivaren skickar ut pulser i konstant hastighet som registreras av processorn i ett inbyggt timerregister. Pulsernas frekvens kan ändras med hjälp av ett reglage på pulsgivaren. De båda knapparna är av enkel typ och sluter kretsen vid nedtryckning. Figur 1

Konstruktion av hårdvara I figur 2 hittas elschemat för konstruktionen av hårdvaran. Här syns att PORT A används för att koppla ihop processorn med displayen. På denna port skickas kommandon från processorn samtidigt som datan skickas på PORT D. Knapparna och signalen från pulsgeneratorn kopplas till PORT B. Värt att notera är att pulsgeneratorn kopplas till PB0 då denna kan användas som timer men även till ground för att få ett referensvärde på signalen. Knapparna kopplas även de till ground så att signalen för processorn blir låg då knappen är nedtryckt. Sammankopplingen av de olika komponenterna skedde med hjälp av lödning och virning, där de grova kablarna löddes fast. Valet av kablarnas tjocklek grundades på strömstyrkan som passerar i dem. Figur 2 - Elschema Konstruktion av programvara Efter färdigställandet av hårdvaran påbörjades kodningen av programvara. Detta genomfördes i AVR Studio 4 och programspråket som användes var C-kod. Överföring av programkod från dator till processor och testning av befintlig kod genomfördes med en JTAGICE mkii. Programmet börjar med att sätta de olika portarna som ingående respektive utgående. Detta bestämmer om processorn ska lyssna efter signaler eller generera egna. För att styra displayen måste de berörda portarna vara utgående medan porten för knappar och pulsgenerator måste vara ingående. Därefter startas en intern och en extern klocka för att möjliggöra räkning av pulser. Den interna klockan används för att kunna beräkna tidsintervall. Eftersom frekvensen på den interna klockan är känd är det lätt att översätta detta till 10 sekunder. Den externa klockan reagerar på lägesförändringar i den inkommande signalen och fungerar därför som en räknare av pulser. Efter detta startas displayen med kommandot startdisp() som skickar de signaler från processorn till displayen som krävs för uppstart av display. För att rensa displayen på gammal information används cleardisp() som sätter alla pixlar i displayen till värdet 0 (displayen töms). cleardisp() anropar å sin

sida kommandot writedata( ) som används för att skriva i displayen. Därefter väljs position till 1 vilket motsvarar att programmet startar i det numeriska läget. För att processorn ständigt ska uppdateras används sedan en oändlig while-loop. Loopen börjar med att sätta värdena på B-porten för att signalerna från knappar/pulsgivare ska kunna registreras. Därefter anropas kommandot buttonhandler(). Detta kommando kontrollerar om någon knapp är nedtryckt och ändrar position mellan 0 och 1 vilket i sin tur ändrar läget i displayen mellan grafisk och numerisk framställning. I buttonhandler() används bitwise för att sortera ut de pinnar från B-porten som är av intresse. Dessutom används en delay efter varje knapptryckning för att förhindra att knappen studsar mellan lägen. Nästa steg i while-loopen är att kommandot pulsecounter() anropas. pulsecounter() använder sig av den inre och yttre klockan för att beräkna hur många pulser som tas emot under 10 sekunder och därefter omvandla antalet till pulser per minut. Beroende på om position är 1 eller 0 kommer sedan kommandona displaypulse() respektive displaygraph() att anropas. displaypulse() omvandlar ett int-värde för pulsen till siffror på displayen med hjälpkommandot numberhandler( ). numberhandler( ) anropar i sin tur kommandon för grafisk representation av siffrorna på displayen. displaygraph() använder sig istället av två vektorer, en för varje displayhalva. En etta i vektorn representerar en puls i kolumnen medan en nolla representerar en tom kolumn. Vektorerna gås igenom med en omvänd for-sats där varje puls flyttas ett steg åt höger i displayen med hjälp av metoderna writepulse( ) och removepulse( ). Dessa metoder ritar respektive tar bort en puls ur displayen. Resultat Den färdiga prototypen visas i figur 3 samtidigt som det numeriska läget visas i figur 4 och det grafiska läget i figur 5. De olika lägena nås med de två knapparna. Det numeriska läget visar pulsfrekvensen i slag per minut och det grafiska läget visar avståndet mellan pulserna då pulserna vandrar åt höger. Figur 3 - Färdig prototyp

Figur 4 - Numeriskt läge Figur 5 - Grafiskt läge Slutsats Projektet resulterade i en fungerande pulsmätare som uppnådde de förutbestämda kraven. Projektet upplevdes till en början som svårbegripligt men då förståelsen ökade i takt med projektets gång blev det lättare allt eftersom. Problem uppstod tidigt då elschemat var svårläsligt och ledde till att kopplingarna mellan processor och display blev felaktiga. När detta problem var åtgärdat vållade C- kodningen nya svårigheter. Då vi inte skrivit i C-kod samt aldrig läst datablad för hårdvara förut blev kommunikationen mellan processor och display nästa hinder. När detta löstes ökade förståelsen för hur hårdvaruprogrammering genomförs och resten av projektet flöt på utan större problem.

Referenslista AVR Libc 1.6.7 : http://www.eit.lth.se/fileadmin/eit/courses/edi021/avr-libc-user-manual/index.html (120426) Datablad för GDM-12864C Digitala projekt Atmel ATmega16

Appendix #include <avr/io.h> #include <util/delay.h> #include <avr/sfr_defs.h> unsigned short int pulse; // räknar inkommande pulser unsigned short int position; //vilket läge vi befinner oss i unsigned short int checkpulse; //håller koll på om det kommer en puls unsigned short int vector1[64]; //håller koll på pulser i cs1 unsigned short int vector2[64]; //håller koll på pulser i cs2 //hanterar knapparna void buttonhandler(){ unsigned short int buttons; // kontrollerar knapparna buttons = PINB&0x60; switch(buttons){ case 0x40 : cleardisp(); position = 1; _delay_ms (2000); break; case 0x20 : cleardisp(); position = 0; _delay_ms (2000); writeline(); break; void pulsecounter(){ if(tcnt1 >= 9766){ pulse = TCNT0*6; TCNT0 = 0; TCNT1 = 0; checkpulse = 0; if(position == 1){ cleardisp(); void startdisp(){ PORTA = 0x2C; PORTD = 0x3F; PORTA = 0x28; PORTA = 0x34; PORTD = 0x3F; PORTA = 0x30;

void writedata(short int chipselect, short int type, short int x, short int y){ if( chipselect == 1){ PORTA = 0x2C; PORTD = 64+y; //sätter DB7 och DB6 till 0 1 PORTA = 0x28; //skickar y-koordinaten på port D PORTA = 0x2C; PORTD = 184+x; //sätter DB7 till DB3 till 1 0 1 1 1 PORTA = PORTA = 0x2D; PORTD = type; //väljer värdet på datan PORTA = 0x29; //skickar datan på port D if(chipselect == 2){ PORTA = 0x34; 0x28; //skickar x-koordinaten på port D PORTD = 64+y; //sätter DB7 och DB6 till 0 1 PORTA = 0x30; //skickar y-koordinaten på port D PORTA = 0x34; PORTD = 184+x; //sätter DB7 till DB3 till 1 0 1 1 1 PORTA = PORTA = 0x35; PORTD = type; //väljer värdet på datan PORTA = 0x31; //skickar datan på port D 0x30; //skickar x-koordinaten på port D void cleardisp(){ for(int i =0; i<64; i++){ for(int j =0; j<8; j++){ writedata(1,0,j,i); writedata(2,0,j,i); void writeline(){ //ritar linje for(int i =0; i<64; i++){ writedata(1,0x80,3,i); writedata(1,1,4,i); writedata(2,0x80,3,i); writedata(2,1,4,i); void writepulse(short int chipselect, short int y){ for(int j =1; j<7; j++){ writedata(chipselect,255,j,y);

void removepulse(short int chipselect, short int y){ for(int j =1; j<3; j++){ writedata(chipselect,0,j,y); for(int j =5; j<7; j++){ writedata(chipselect,0,j,y); writedata(chipselect,0x80,3,y); writedata(chipselect,0x01,4,y); void one(short int chipselect, short int y){ for(int j =3; j<5; j++){ writedata(chipselect,255,j,y); void two(short int chipselect, short int y){ writedata(chipselect,129,4,y+i); writedata(chipselect,255,4,y); writedata(chipselect,1,3,y); writedata(chipselect,129,4,y+7); void three(short int chipselect, short int y){ writedata(chipselect,129,4,y+i); writedata(chipselect,1,3,y); writedata(chipselect,129,4,y); void four(short int chipselect, short int y){ writedata(chipselect,1,4,y+i); writedata(chipselect,255,3,y); writedata(chipselect,1,4,y); void five(short int chipselect, short int y){ writedata(chipselect,129,4,y+i); writedata(chipselect,255,3,y); writedata(chipselect,1,3,y+7); writedata(chipselect,129,4,y);

void six(short int chipselect, short int y){ writedata(chipselect,129,4,y+i); writedata(chipselect,255,3,y); writedata(chipselect,1,3,y+7); writedata(chipselect,255,4,y); void seven(short int chipselect, short int y){ writedata(chipselect,1,3,y); void eight(short int chipselect, short int y){ writedata(chipselect,129,4,y+i); writedata(chipselect,255,3,y); writedata(chipselect,255,4,y); void nine(short int chipselect, short int y){ writedata(chipselect,1,4,y+i); writedata(chipselect,255,3,y); writedata(chipselect,1,4,y); void zero(short int chipselect, short int y){ writedata(chipselect,128,4,y+i); writedata(chipselect,255,3,y); writedata(chipselect,255,4,y);

void numberhandler(short int number, short int pos){ if(number == 0){ zero(1, pos); if(number == 1){ one(1, pos); if(number == 2){ two(1, pos); if(number == 3){ three(1, pos); if(number == 4){ four(1, pos); if(number == 5){ five(1, pos); if(number == 6){ six(1, pos); if(number == 7){ seven(1, pos); if(number == 8){ eight(1, pos); if(number == 9){ nine(1, pos); void displaypulse(){ unsigned short int temp; temp = pulse; if(temp >= 100){ if(temp/100 ==1){ one(1, 0); if(temp/100 ==2){ two(1,0); temp=temp%100; numberhandler(temp/10, 10); temp=temp%10; numberhandler(temp, 20); else if(temp < 100 && temp >= 10){ numberhandler(temp/10, 10); temp=temp%10; numberhandler(temp, 20); else{ numberhandler(temp, 20); void displaygraph(){

for(int i =63; i>=0 ; i--){ if(tcnt0 > checkpulse){ checkpulse =TCNT0; vector1[0] =1; if(vector1[i] == 1 && i!=63){ removepulse(2,i); writepulse(2, i+1); vector1[i]=0; vector1[i+1]=1; if(vector2[i] == 1 && i!=63){ removepulse(1,i); writepulse(1, i+1); vector2[i]=0; vector2[i+1]=1; if(vector1[i] == 1 && i==63){ removepulse(2,i); writepulse(1, 0); vector1[i]=0; vector2[0]=1; if(vector2[i] == 1 && i==63){ removepulse(1,i); vector2[i]=0; _delay_ms (1); void main(){ DDRB = 0x00; //sätter alla portar som ingående DDRD = 0xFF; //sätter alla portar som utgående DDRA = 0xFF; //sätter alla som utgående TCCR1B = 0x05; //startar intern klocka med frekvens 1mhz/1024 TCCR0 = 0x07; //startar extern klocka startdisp(); cleardisp(); position = 1; while(1){ PINB = 0x60; //aktiverar pull-up/down buttonhandler(); pulsecounter(); if(position == 1){ displaypulse(); if(position == 0){ displaygraph();