School of Mathematics and Systems Engineering. Kamerasensor. Sensor för att identifiera objekt på bilden från en videokamera.
|
|
- Viktor Stefan Fredriksson
- för 8 år sedan
- Visningar:
Transkript
1 School of Mathematics and Systems Engineering Reports from MSI - Rapporter från MSI Kamerasensor Sensor för att identifiera objekt på bilden från en videokamera Mikael Söderlund Sep 2006 MSI Report Växjö University ISSN SE VÄXJÖ ISRN VXU/MSI/EL/E/ /--SE
2 Inledning...3 Bakgrund...3 Uppgiften...3 Principlösning...4 Mikroprocessorn Oscillatorkonfiguration Minneshantering FLASH RAM EEPROM Avbrottshantering Komparatorn USART...7 Videoupptagning PAL Kompositvideo Videosynkseparatorn Konvertering till svart/vitt Sampling...10 Bildanalys...12 Kommunikation med PC Överföring med RS Sändaren PIC-processorn Mottagaren PC:n...15 Kretskortet Kretsschema Mönsterkortstillverkning Färdigt kretskort...18 Diskussion...19 Sammanfattning...20 Referenser...21 Assemblerkod...Bilaga A 2
3 Inledning Bakgrund Jag gjorde mitt examensarbete åt ett företag här i Växjö som heter Adductor. De ägnar sig bland annat åt att tillverka övervakningsutrustning till industrin för att kunna effektivisera produktionen och optimera användandet av maskiner. Uppgiften Uppgiften var att konstruera ett program för igenkänning av objekt på bilden från en videokamera. Bildanalysen ska göras med hjälp av en PIC-processor och en enkel färgvideokamera. Sensorn ska kunna ge information om: Antal objekt på bilden Koordinater och storlek för varje enskilt objekt Hastighet och riktning för ett valt objekt Resultatet ska skickas till en PC där det presenteras grafiskt. Härifrån ska det även gå att konfigurera sensorns inställningar (tex tröskelvärde, kontrast och upplösning). Det tänkta användningsområdet är för bevakning av tillverkningsprocesser inom industrin, men den kan även användas till exempelvis: Räkna antalet personer som passerar en entré. Beräkning av trafikflöden. Uppgiften kan delas upp i tre delar: Konstruktion av kretskort Programmering av PIC-processorn Programmering av ett grafiskt gränssnitt på PC För att optimera användandet av PIC-processorns begränsade resurser, ska programmeringen ske i Assembler. PC-programmet görs förslagsvis med Visual Basic eller liknande. 3
4 Principlösning Då är frågan hur vi ska kunna urskilja objekten som vi vill identifiera? En färgbild innehåller alldeles för mycket information (luminans, färgton och färgmättnad) så vi måste avgränsa oss på något sätt. Vi väljer att göra om bilden till svart/vit, vilket gör att färgton och färgmättnad försvinner. Det som återstår är luminansen (ljusstyrka). På en svart/vit bild representerar luminansen gråskalan, vilket gör att vi enkelt kan urskilja objekt från bakgrunden genom att kontrollera om luminansen överstiget ett visst tröskelvärde. Detta görs med hjälp av mikroprocessorns inbyggda komparator. På bild 1.1 nedan ser vi ett blockschema över uppkopplingen. Bild 1.1. Blockschema över uppkopplingen. Som vi ser är kretsen är uppdelad i tre delar: Videoupptagning Bildanalys Kommunikation med PC De olika delarna beskrivs i kapitel 3, 4 och 5. Kapitel 2 är en översikt över mikroprocessorn. 4
5 Mikroprocessorn Mikroprocessorn jag använde var en PIC16F877A från Microchip. Här är en sammanfattning av de viktigaste funktionerna. 20 MHz klockingång 5 MIPS 200 ns cykel 8kB FLASH programminne 368 byte RAM 256 byte EEPROM dataminne 35 kommandon 33 in- och utgångar 3 timers 2 analoga komparatorer USART (Universal Synchronous Asynchronous Receiver Transmitter) 2.1. Oscillatorkonfiguration För att processorn ska fungera krävs någon slags extern oscillator. Processorn jag valde kan köras i 4 olika oscillatorlägen: LP XT HS RC Lågenergikristall Kristall/resonator Kristall/resonator (hög hastighet) RC-nät Förutom kristall/resonator går det i LP, XT och HS-läge även att använda en klockpuls från ett extern system. För att utnyttja processorn fulla kapacitet väljer vi HS-läge och en kristall på 20MHz. På bilden nedan ser vi hur uppkoppling ser ut. Bild 2.1. Uppkoppling av kristall/resonator i HS-läge. Lämpliga värden på kapacitanserna C1 och C2 hämtas ur en tabell i manualen. För 20MHz ska de väljas till 15-33pF. Om kristallen är BT-slipad som i detta fallet, behövs normalt sett inte seriemotståndet (R S ) Minneshantering Processorn har 3 olika minnen. FLASH, RAM och EEPROM FLASH 5
6 Flash-minnet är på totalt 8KB (14-bitars ord) och används i huvudsak för lagring av programkod. Skrivningsprocessen tar relativt lång tid och man måste skriva 4 byte i taget. FLASH-minnet har dessutom bara en livstid på ca skrivningar/raderingar RAM RAM-minnet är på 512 byte och är uppdelat i 4 olika banker. De första 32 byten på bank 0 och 1 samt de 16 första på bank 2 och 3 är reserverade för specialfunktionsregisterna. De sista 16 byten på bank 0 är speglade på alla bankerna och används med fördel till de viktigaste variablerna, eftersom de hela tiden är åtkomliga utan att behöva byta bank. Totalt finns det alltså 368 byte ledigt att använda efter eget tycke EEPROM EEPROM-minnet är endast på 256 byte, tar lång tid att skriva till och har en livstid på ca skrivningar/raderingar Avbrottshantering Processorn har 15 olika källor som kan orsaka avbrott: EEPROM Parallel Slave Port Read/Write A/D Converter USART Receive USART Transmit Synchronous Serial Port Capture/Compare 1 Timer 2 Timer 1 Capture/Compare 2 Bus Collision Comparator Timer 0 External Port B Change De två vi är intresserade av i detta fallet är External och Port B Change. Port B Change ger ett avbrott varje gång värdet ändras på någon av portarna B4-B7. External är kopplad till port B0 och man väljer själv om avbrottet ska ges på positiv eller negativ flank. External kopplar vi till videosynkseparatorns kompositsynkutgång och Port B Change till dess vertikalsynkutgång Komparatorn Komparatormodulen består av 2 analoga komparatorer. De går att använda separat, med gemensam referensspänning, med multiplexerade ingångar samt med eller utan utgångspinnar. Sammanlagt finns det 8 olika lägen. I detta fall använder vi bara en komparator, med utgångspinnen aktiverad. Se bild
7 Bild 2.2. Komparator 1 med utgångspinne. Komparator 2 avstängd. För att kunna använda utgångspinnen på komparator 1 måste man använda ett pull-up motstånd, dvs ett 10kΩ motstånd mellan utgången och +5V. I detta fall används bara utgångspinnen för att få ut signalen på oscilloskopet. Hur komparatorn fungerar ser vi på bild 2.2 nedan. Inspänningen (V IN+ ) jämförs med en referensspänning (V IN- ). Den digitala utgången blir 1 om inspänningen är större än referensspänningen och 0 om den är mindre. I detta fall har vi använt en extern referensspänning, men det går även att använda en intern referensspänning med hjälp av processorns Voltage Reference Module. Bild 2.3. Visar hur utgången beror av inspänningen (V IN+ ) relativt referensnivån (V IN- ) USART USART är den ena av processorns två seriekommunikationsmoduler och står för Universal Synchronous Asynchronous Receiver Transmitter. Den kan arbeta i tre olika lägen: Asynkront (full duplex) Synkront - Master (halv duplex) Synkront - Slave (halv duplex) Synkron överföring används mest vid kommunikation med enklare kretsar, såsom A/Domvandlare, EEPROM-minnen m.m. För kommunikation med en PC som i detta fallet används med fördel asynkron överföring eftersom det möjliggör full duplex, dvs samtidig kommunikation åt båda hållen. Bithastigheten kan ställas in mellan 1.2 och 57.6 KBaud. Man bör dock tänka på att precisionen minskar med ökad bithastighet. Vid 38.4 KBaud som jag valde blir felet mellan önskad och verklig bithastighet 1.36 %, jämfört med 3.34 % för 57.6 KBaud. För att kunna kommunicera med datorn via RS232 krävs förutom USART:en en RS232 drivkrets för att göra om TTL/CMOS-nivåerna till RS232-nivåer. 7
8 Videoupptagning Videokameran som användes är en enkel CMOS färgkamera med en upplösning på 628x576 bildpunkter och PAL-standard. Utsignalen är en kompositvideosignal. För att mikroprocessorn ska kunna tolka signalen måste man ha en videosynkseparator som behandlas närmare i avsnitt PAL PAL står för Phase Alternating Lines och den vanligast förekommande standarden för analoga tv-apparater i världen. Bilden i ett PAL-system är uppbyggd av 625 horisontella linjer (varav 576 synliga) som är uppdelade i 2 fält, ett med udda linjer (fält 1) och ett med jämna (fält 2). Max upplösning i vertikalled är alltså 576 bildpunkter. I horisontalled bestäms upplösningen av hur ofta signalen samplas i mottagaren. För att få en högupplöst bild behövs alltså en snabb mottagare, vilket tyvärr inte är fallet med mikroprocessorn som användes i detta fallet. Mer om detta i avsnitt Kompositvideo Kompositvideo är en komplex analog videosignal som är sammansatt av 3 grundsignaler: Y, U och V. Y innehåller synkpulser och luminans (ljusstyrka), U och V innehåller krominans (färgton + färgmättnad). Kompositvideosignalen bildas genom att först kvadraturmodulera U och V och sedan addera resultatet till Y. Y ensam innehåller tillräckligt med information för att kunna visa en svart/vit bild med bibehållen detaljrikedom. Bild 3.1. En linje i en kompositvideosignal. Innehåller synkpulser, luminans (ljusstyrka), färgton och färgmättnad. 8
9 Hur gråskalorna representeras ser vi på bild 3.2 nedan. Av bilden framgår hur amplituden representerar luminansen (ljusstyrka). På en svart/vit bild är luminansen direkt proportionell mot gråskalan. Där ser vi även att färgton och färgmättnad är överlagrade på luminansen. Bild 3.2. En linje i en kompositvideosignal med luminans, färgton, färgmättnad, färgreferens samt kompositsynk. Amplituden representerar luminansen (ljusstyrka), där 0,339 V är 0% och V är 100%. Som vi ser finns det förutom en svart och en vit referensnivå även en blank referensnivå, som skiljer bildinformationen från synksignalerna. Som vi tidigare nämnt är det bara 576 av de 625 linjerna som är synliga. På bild 3.3 nedan ser vi att varje fält inleds med 21 linjer som inte innehåller någon bildinformation. Här hittar vi istället vertikalsynk- och korrigeringsinformation samt ett antal tomma linjer som går att använda till exempelvis text-tv. Bild 3.3. Här ser vi de 21 första linjerna i fält 1 som inte innehåller någon bildinformation Videosynkseparatorn För att mikroprocessorn ska kunna ta emot bilden korrekt krävs någon slags synkronisering. I vårt fall innehåller videosignalen 4 synkningar: Vertical sync. Talar om när det kommer ett nytt fält (en bild består av 2 fält). Horizontal/Composite sync. Talar om när det kommer en ny linje. Odd/Even. Talar om huruvida fältet är udda eller jämnt. Burst/Back porsch. Innehåller färgreferenser. Eftersom mikroprocessorn i huvudsak är gjord för digitala signaler och synkningarna ligger inbakade i en komplex analog signal, så krävs en videosynkseparator. Den har till uppgift att separera synkningarna från videosignalen och göra om dem till digitala signaler så att dem enkelt kan tolkas av mikroprocessorn. 9
10 Videosynkseparatorn som användes är kompatibel med ett flertal olika videostandarder (PAL, NTCS, SECAM, VGA m.m.) med olika linjetider. Tidsinställningarna görs med hjälp av ett motstånd. För att passa PAL används ett 680kΩ motstånd Konvertering till svart/vitt Som vi tidigare nämnt ska bilden göras om till svart/vit innan videosignalen samplas. Detta görs i två steg. Först filtreras den överlagrade färginformationen (se bild 3.2) bort med hjälp av ett lågpassfilter, vilket ger en gråskalebild. Gråskalebilden görs sedan om till svart/vit genom att man låter en komparator jämföra videosignalen med en referensspänning. Komparatorn ger en etta ut om videosignalens amplitud ligger under referensspänningen och en nolla om den ligger över. Eftersom amplituden representerar ljusstyrkan (gråskala), så kommer utsignalen från komparatorn att ge en svart/vit bild, där referensspänningen fungerar som ett tröskelvärde som bestämmer vilka gråskalor som blir vita respektive svarta. Referensspänningen ställs in mellan V (svart) och V (vitt). Se bild 3.4 nedan. Referensspänningen var från början tänkt att väljas med hjälp av en D/A-omvandlare, men pga. tidsbrist fick vi istället nöja oss med en potentiometer. Bild Komparatorns utsignal relativt videosignalen och referensspänningen Sampling Att sampla en videosignal med en PIC-processor visade sig vara en väldigt svår uppgift. Som tidigare nämnts bestäms upplösningen i horisontalled av hur ofta signalen samplas i mottagaren. Hög upplösning kräver en hög samplingshastighet. Linjetiden i det här fallet är 63,56 us (15,734 khz), varav 4,7 us är horisontal synk och 4 us är färgreferensbursten, så för att hinna sampla 628 bildpunkter per linje (kamerans upplösning) krävs att man tar ett sampel var 87 ns ((63,56-4,7 4)/628 us), dvs en samplingshastighet på 11,45 MHz (1 / ). Mikroprocessorn som används i detta fallet klarar dock inte mer än 2,5 MHz, vilket medför en maximal upplösning på 137 bildpunkter per linje (628 x 2,5/11,45). 10
11 Förutom en hög samplingshastighet kräver hög upplösning även mycket lagringsutrymme och en snabb skrivningsprocess till minnet. Då är frågan var man ska lagra samplena? Ser man till lagringsutrymmet, så verkar FLASH-minnet vara det enda alternativet. Ser man däremot till tidsaspekten, konstateras enkelt att skrivningsprocessen tar alldeles för lång tid för att det ska gå att använda till lagring av sampel. Som tidigare nämnts har dessutom FLASH-minnet bara en livslängd på skrivningar/raderingar. Här används därför RAM-minnet. Det har lång livslängd och är snabbt och enkelt att skriva till. Skrivningsprocessen tar bara en instruktionscykel. Här begränsas man av lagringsutrymmet som bara är 368 byte, vilket även ska räcka till programvariabler och bildanalysresultat. Vi väljer en upplösning på 40x40 pixlar (200 byte). En fördel med den låga upplösningen är att vi bara behöver använda ett av fälten (se avsnitt 3.1) när vi samplar signalen, vilket gör att vi får mer tid för bildanalysen mellan varje bild. Bild 3.5. Visar hur bilden lagras i RAM-minnet, uppdelad på bank 2-3. På bilden här ovanför ser vi hur bilden lagras i RAM-minnet. För att få plats måste bilden delas upp på 3 banker (se avsnitt ). Det gör att vi hela tiden måste hålla reda på vilken bank vi befinner oss på när vi samplar signalen. Innan samplingen påbörjas måste vi dels initiera adresspekaren till en startadress (0xE6) och dels initiera två räknare, en som räknar ner antalet kompositsynkpulser som ska hoppas över innan första samplingen och en som håller koll på vilken linje vi är på. När vi får ett vertikalsynkavbrott kollar vi vilket fält vi är på genom att läsa av odd/even-signalen. Är det fält 1, så gör vi ovan nämnda initiering och inväntar kompositsynkavbrottet för den första synliga linjen. Komparatorutgången läses av och om resultatet är 1 sätts en bit i första byten. Adresspekaren flyttas fram var 8:e pixel och när hela linjen har lästs in avvaktar vi tills nästa kompositsynkavbrott. Hela proceduren upprepas tills vi har läst in hela bilden, men eftersom vi bara vill ha 40 linjer per bild så samplar vi bara var sjunde linje (576/2/40) När vi har läst in hela bilden avaktiverar vi kompositsynkavbrotten och börjar med analysen. 11
12 Bildanalys Bildanalysen görs helt och hållet i mikroprocessorn. Den var från början tänkt att förutom identifiering av objektens koordinater även beräkna riktning och hastighet för ett valt objekt, men eftersom vi bara har plats att lagra en bild i taget i minnet så får vi nöja oss med objektidentifieringen. Analysen har i huvudsak 3 uppgifter: Leta upp objekten. Avgränsa objekten genom att följa konturerna. Spara koordinaterna för objekten. Bild 4.1. Blockschema över hur analysen går till. På bild 4.1. ovanför ser vi hur analysen går till. 1. Vi börjar med att skapa en markör så att vi enkelt kan hoppa runt bland pixlarna på bilden. Markören använder sig av en adresspekare som pekar på en adress i minnet där den del av bilden som vi ska analysera är lagrad (se bild 3.5). När markören och adresspekaren är initierade befinner sig markören i bildens övre vänstra hörn. 2. Första uppgiften är att hitta ett objekt så vi kontrollerar att pixeln som markören står på är svart, samt att den inte har någon angränsande svart pixel uppåt eller till vänster. Annars hoppar vi till punkt Nu vet vi att pixeln är startpunkt för ett nytt objekt. För att undvika skräp på bilden tar vi bara med objekt som är större än en pixel, så vi kontrollerar att det finns någon angränsande svart pixel åt höger eller nedåt (eftersom det är tomt uppåt och till vänster). Annars hoppar vi till punkt 5. 12
13 4. Nu har vi hittat ett objekt som är större än en pixel. För att försäkra oss om att vi inte redan har analyserat objektet, kontrollerar vi att koordinaterna för pixeln inte redan finns i en lista där tidigare hittade objekts startpunkter är sparade. Är objektet redan analyserat så hoppar vi till punkt 5, annars lägger vi till startpunkten i listan. 5. Om något av kraven i punkt 2-4 inte uppfylls flyttar vi markören åt höger tills vi stöter på en ny startpunkt. När vi når slutet på linjen hoppar vi ner till första pixeln på raden nedanför. Proceduren upprepar sig tills vi nått slutet på bilden eller tills minnet där vi lagrar koordinaterna för startpunkter och objekt är fyllt. Listan med startpunkter innehåller förutom riktiga startpunkter även pixlar som ser ut som en startpunkt (svart pixel samt tomt uppåt och till vänster). 6. Vi uppdaterar objektets två ytterkoordinater. Första gången finns det bara en pixel så då är objektets koordinater samma som för startpunkten. 7. Nu kontrollerar vi om pixeln som markören står på ser ut som en startpunkt. Gör den inte det så hoppar vi till punkt Spara koordinater för pixeln i listan med hittade startpunkter. 9. Vi kontrollerar om startpunktens koordinater är samma som för objektets riktiga startpunkt, i så fall har vi hittat hela konturen på objektet och kan hoppa vidare till punkt Om det inte är en startpunkt så riktar vi markören uppåt. 11. Finns det en angränsande svart pixel i markörens riktning? Hoppa i så fall till punkt Fanns det ingen angränsande svart pixel i markörens riktning så vrider vi markören 90 medurs. 13. Flytta markören ett steg i dess riktning. 14. Vrid tillbaka markören 90 moturs. Börja om på punkt När vi har hittat hela konturen för objektet, sparar vi undan koordinaterna och hoppar till punkt 5 för att fortsätta leta efter nästa objekt. Bild nedan visar ett exempel på hur markören följer konturerna på ett objekt. Bild 4.2. Här ser vi hur markören följer konturerna. De inringade rutorna representerar ett objekt (svarta pixlar). De grå pilarna visar i vilken riktning markören letar efter angränsande svarta pixlar, och de svarta hur markören flyttar sig mellan pixlarna. 13
14 Kommunikation med PC 5.1. Överföring med RS232 Överföringen av data mellan PIC-processorn och PC:n sker med RS232. För att överföringen ska fungera krävs ett par saker: Interface för seriekommunikation i PIC-processorn. Drivkrets för RS232 samt yttre komponenter. Kontaktdon av typ D-sub. En rak serieportskabel med D-sub kontaktdon. En PC med serieport. RS232 arbetar med nivåer på -15V till +15V, så för att vanliga TTL- och CMOS-kretsar ska kunna kommunicera via RS232 krävs en drivkrets som konverterar TTL/CMOS-nivåerna till RS232-nivåer. På bild 5.1 nedan ser vi hur uppkopplingen av drivkretsen går till. Bild 5.1. Kretsschema över RS232-interfacet på kretskortet. Transmit-utgången på mikroprocessorn kopplas till transmit-ingången på drivkretsen. Signalen görs om till RS232-nivåer och skickas ut på transmit-utgången som kopplas till pinne 2 på D-Sub-kontakten. Receive-ingången kopplas på samma sätt fast till pinne 3 på D- Sub-kontakten. Vad de olika pinnarna används till ser vi på bild 5.2 nedan. Bild 5.2. D-sub 9-poligt hylsdon. DTE Ready, DCE Ready, Clear to Send och Request to Send används för handskakning. För enheter som inte stödjer handskakning brukar man koppla ihop DTE Ready och DCE Ready med Receive Line Signal Detect, samt Clear to Send och Request to Send. Detta gör att sändare med handskakning aktiverad hela tiden tror att enheten är redo för mottagning. 14
15 5.2. Sändaren PIC-processorn PIC-processorn har två seriekommunikationsmoduler. USART är den som lämpar sig bäst för kommunikation med PC, så det är den vi kommer att använda oss av (se avsnitt 3.5). Som tidigare nämnts stödjer inte PIC-processorn handskakning, så för att vi ska kunna synkronisera överföringen måste vi förutom bild och analysresultat även skicka med någon slags synkroniseringsinformation. Vi behöver också en kontrollsumma för att verifiera att ingen information gått förlorad under överföringen. Synkroniseringen löser vi genom att skicka med en unik textsträng i början på bilden. Kontrollsumman skapar vi på enklast möjliga sätt genom att bara summera ihop alla byten Mottagaren PC:n PC-programmets uppgift är att ta emot bilden samt resultatet från bildanalysen och presentera det grafiskt. Från början var det även tänkt att man skulle kunna ställa in komparatorns referensnivå via PC:n, men detta hanns inte med så inställningen görs istället med en potentiometer på kretskortet. Bild 5.3 nedan visar en skärmdump från programmet. Bild 5.3. Skärmdump från PC-programmet. Till vänster ser vi själva bilden. Bilden är i detta exempel är tagen på ett vitt papper med två vertikala svarta remsor. Att de smalnar av upptill beror på att den övre delen av pappret är längre från kameran. De svarta pixlarna längs ut i hörnen beror på att vi ser en del av det som är utanför pappret. Till höger i programmet ser vi koordinaterna för objekten. 15
16 Kretskortet 6.1. Kretsschema Kretsschemat gjordes med hjälp av EDWin Xp, som även användes till mönsterkortslayouten. Bild 6.1. Kretsschema 6.2. Mönsterkortstillverkning Den vanligaste metoden för att tillverka mönsterkort är att använda ett laminat med ett tunt kopparskikt som är belagt med en positiv fotoresist, som är känsligt för ultraviolett strålning (UV-ljus). Tillverkningsprocessen sker i 4 steg: 1. Layout. Layouten görs på vanligt papper, antingen på frihand eller med hjälp av ett CADprogram. 2. Exponering. Layouten fästes på skiktsidan av det fotoresistiva laminatet, varpå laminatet belyses i en UV-ljuslåda. 3. Framkallning. Laminatet framkallas genom att lägga det i ett bad av natriumhydroxid och vatten. När framkallningen är klar sköljs laminatet noggrant i vatten och mönstret framträder tydligt. 4. Etsning. För att bli av med den belysta delen av kopparskiktet sänks laminatet ner i en etstank med natriumperoxidsulfat löst i vatten, som är uppvärmt till ca 50. Slutligen återstår bara att borra alla hålen innan komponenterna lödes fast. Layouten gjordes med hjälp av EDWin XP, som är ett kraftfullt CAD-program för elektronikkonstruktioner. På bild 6.2 på nästa sida ser vi hur resultatet blev. 16
17 Bild Mönsterkortslayouten. Till vänster har vi komponentlagret och till höger komponenttrycket. I tabell 6.1 nedan ser vi vilka komponenter som användes samt en summering av priset. Beteckning Komponent Pris C1, C2, C3, C4, C5 Radiell elektrolytkondensator 1uF 5.95 kr C6, C7, C14 Radiell elektrolytkondensator 10uF 4.47 kr C8, C9 Kondensator 0,1uF 3.06 kr C10 Keramiskt kondensator 22nF 3.85 kr C11, C12 Keramisk kondensator 22pF 8.48 kr C13 Radiell elektrolytkondensator 0,1uF 0.53 kr D1 Zenerdiod BZX55C4V kr J1 D-sub hylsa 9p 30.5 kr J2 DC-jack 2,1 mm kr J3 Phonokontakt kr POT1 Vridpotentiometer 10k 20varv kr R1 Motstånd 680kΩ 2.53 kr R2 Motstånd 75Ω 2.53 kr R3, R4 Motstånd 10kΩ 2.53 kr R5 Motstånd 100Ω 2.53 kr T1 Kristall 20MHz kr U1 Videosynkseparator LM kr U2 RS232 styrkrets MAX232CPE kr U3 Mikroprocessor PIC16F877A kr U5 5V regulator LD kr 8-pinnars IC-sockel 4.28 kr 16-pinnars IC-sockel 7.71 kr 40-pinnars IC-sockel kr Summa: Tabell 6.1. Komponentlista. 443 kr 17
18 6.3. Färdigt kretskort På bild 6.3 nedan ser vi hur det färdiga resultatet blev. Bild 6.3. Här ser vi kretskortet och videokameran. 18
19 Diskussion Metoden att urskilja objekt fungerade bra. Mikroprocessorn som jag fick till uppgift att använda visade sig dock inte alls vara lämplig för videoapplikationer på grund av dess mycket begränsade prestanda. Dels begränsas man av den låga samplingshastigheten, dels av dess låga lagringskapacitet och den långsamma skrivningsprocessen till FLASH- och EEPROM-minnena. Dessa minnen har dessutom en relativt kort livslängd. Detta resulterar i att man måste använda RAM-minnet, vilket begränsar upplösningen till ca 40x40 pixlar. Den dåliga prestandan gjorde det också omöjligt att använda en timer för att räkna tiden mellan samplingarna. Detta fick istället lösas genom att räkna antalet instruktionscykler. Ett annat problem var att mikroprocessorn var instabil. Felet trodde jag berodde på att den gick i standbyläge, att den stängdes av pga. för låg ström eller att det var fel i konfigurationsinställningarna. Så var inte alls fallet, utan det berodde på att oscillatorn var placerad för långt från mikroprocessorn. Detta framgår inte av manualen. Här är några förslag på förbättringar: Externt minne möjliggör högre upplösning och bättre bildanalys Externt 8-bitars shiftregister 8 gånger snabbare sampling D/A-omvandlare istället för potentiometer för inställning av tröskelvärde. Värdet kan tex väljas m.h.a. en färgkarta. Två tröskelvärden, ett undre och ett övre gör det lättare att avgränsa vilka objekt man vill analysera. Tre ihopkopplade mikroprocessorer, en för luminans, en för färgton och en för färgmättnad möjliggör urskiljning av färger. Kompensering av bildförvrängning p.g.a. vidvinkel hos kamerans objektiv. 19
20 Sammanfattning Uppgiften att konstruera en sensor för igenkänning av objekt på bilden från en videokamera löstes. Sensorn kan identifiera och beräkna koordinater för upp till 16 olika objekt. Två av önskemålen var jag dock tvungen att prioritera bort eftersom tiden inte räckte till. Det första var att beräkna riktning och hastighet för ett objekt. Detta kräver nämligen att man kan lagra koordinater för mer än en bild i taget, vilket var en omöjlighet på grund av mikroprocessorns mycket begränsade lagringsutrymme. Lösningen på detta problem är att använda sig av ett externt minne. Det andra var att sensorns tröskelvärde för luminans skulle kunna ställas in via PCprogrammet med hjälp av en D/A-omvandlare på kretskortet. Kretskortet blev bra. Det enda som möjligtvis saknas är en lysdiod så att man ser om strömmen är på. De tänkta inställningsmöjligheterna i PC-programmet saknas, men i övrigt fungerar programmet bra. 20
21 Referenser Mikroprocessorn PIC16F87XA Datablad PICmicro Mid-Range MCU Family Reference Manual Videosynkseparator LM1881N Datablad RS232 Styrkrets Maxim Max232 Datablad Visual Basic Visual Basic Reference Bild 2.1. PIC16F87XA Datablad sidan Bild 2.2. PIC16F87XA Datablad sidan Bild 2.3. PIC16F87XA Datablad sidan Bild 3.2. Modifikation av originalbilden från Wikipedia Wikipedia Bild 3.3. Modifikation av originalbilden i databladet LM1881N Datablad sidan 6 Bild 3.4. Modifikation av originalbilden från Wikipedia Wikipedia 21
22 Bilaga A - Assemblerkod #include <p16f877a.inc> ;Processor specific variable definitions. ;<--VARIABLE DEFINITIONS > ;Pixel Status = VFxxLBRA ; V=Value ; F=Found ; L=Black pixel to the Left ; B=Black pixel Below ; R=Black pixel to the Right ; A=Black pixel Above PixStatus EQU 0x20 ;Contains status of current pixel. ;Cursor Status = xxxx LBRU ; L = Left edge ; B = Bottom edge ; R = Right edge ; U = Upper edge CursStatus EQU 0x21 ;Contains status of current location of the cursor. CursorAddr EQU 0x22 ;Address to current location of cursor. CursorDir EQU 0x23 ;Cursor direction. PixMask EQU 0x24 ;Mask used to find current pixel. CountPixels EQU 0x25 ;Number of pixels in current object. PixNum EQU 0x26 ;Current pixelnumber. LineNum EQU 0x27 ;Current linenumber. ObjectCoordAddr EQU 0x28 ;Address to object coordinates. StartPointAddr EQU 0x29 ;Address to start point coordinates. ObjectStartX EQU 0x2A ;X-coordinate of current object's startpoint. ObjectStartY EQU 0x2B ;Y-coordinate of current object's startpoint. ObjectCoordX1 EQU 0x2C ;X1-coordinate of current object. ObjectCoordY1 EQU 0x2D ;Y1-coordinate of current object. ObjectCoordX2 EQU 0x2E ;X2-coordinate of current object. ObjectCoordY2 EQU 0x2F ;Y2-coordinate of current object. ; EQU 0x30 ;X1-coordinate of object 1. ; EQU 0x31 ;Y1-coordinate of object 1. ; EQU 0x32 ;X2-coordinate of object 1. ; EQU 0x33 ;Y2-coordinate of object 1. ; EQU 0x34-6F ;Coordinates of object w_temp EQU 0x71 ;Variable used for context saving. status_temp EQU 0x72 ;Variable used for context saving. pclath_temp EQU 0x73 ;Variable used for context saving. AnalyzeTimeoutCntr1 EQU 0x74 ;Analyze Timeout Counter 1. AnalyzeTimeoutCntr2 EQU 0x75 ;Analyze Timeout Counter 2. CountCPulse EQU 0x76 ;Counts Comp.Sync pulses when loading frame. Count_lines EQU 0x77 ;Counts Lines when loading frame. Count_bytes EQU 0x78 ;Counts Bytes when transmiting to PC. Flags EQU 0x79 ;x:x:x:busy:wait:irp:load:send. LineAddr EQU 0x7A ;Address to current line. TXTimeoutCounter EQU 0x7B ;Transmit Timeout Counter. TXByte EQU 0x7C ;Databyte to transmit. TXRetryCounter EQU 0x7D ;Transmit Retry Counter. TXDelayCounter EQU 0x7E ;Transmit Delay Counter. ; EQU 0xA0 ;Start point 1 (x-coordinate). ; EQU 0xA1 ;Start point 1 (y-coordinate). ; EQU 0xA2-E5 ;Start points ; EQU 0xE6-EF ;Reservated for Line 1-2. ; EQU 1x10-6E ;Reservated for Line ; EQU 1x90-EE ;Reservated for Line ;<--PROGRAM > ORG 0x000 ;Processor reset vector. goto init ;Nop required for icd. ;Go to init. ;<--INTERRUPT SERVICE ROUTINE > ORG 0x004 ;Interrupt vector location. ;Backup STATUS and PCLATH register> movwf w_temp ;Save backup of W register. movf STATUS,w ;Move STATUS register into W register. movwf status_temp ;Save backup of STATUS register. movf PCLATH,w ;Move PCLATH reg. into W register. movwf pclath_temp ;Save backup of PCLATH register. ;Check intertupt flags btfsc INTCON, RBIF A-1
23 Bilaga A - Assemblerkod goto VSync_Int ;Goto VSync_Int if V.Sync interrupt flag = 1. btfsc INTCON, INTF goto CompSync_Int ;Goto CompSync_Int if Comp.Sync interrupt flag = 1. End_ISR ;Retrieve backup of W, STATUS and PCLATH register. movf pclath_temp,w movwf PCLATH movf status_temp,w movwf STATUS swapf w_temp,f swapf w_temp,w retfie ;Return from interrupt. ;<-----Vertical sync interrupt (New frame) > VSync_Int bcf STATUS, RP0 ;Bank = 0 (Direct addressing). movfw PORTB ;Read PORTB to avoid RBIF mismatch condition. bcf INTCON, RBIF ;Clear the V.Sync Interrupt Flag. btfsc PORTB, 4 goto End_ISR ;Exit interrupt if VSync = 1. btfss Flags, 3 goto End_ISR ;Exit interrupt if WaitFlag = 0. btfsc Flags, 4 goto End_ISR ;Exit interrupt if BusyFlag = 1. btfsc Flags, 0 goto ChkOddEvenFlag ;Goto ChkOddEvenFlag if SendFlag = 1. btfss Flags, 1 goto SetLoadFlag ;Goto SetLoadFlag if both SendFlag = 0 and LoadFlag = 0. ChkOddEvenFlag btfsc PORTB, 1 goto ChkLoadFlag ;Goto ChkLoadFlag if Odd/Even = 1. ChkSendFlag btfss Flags, 0 goto ChkLoadFlag ;Goto ChkLoadFlag if SendFlag = 0. bcf Flags, 0 ;Clear SendFlag. bsf Flags, 1 ;Set LoadFlag. bcf Flags, 3 ;Clear WaitFlag. goto End_ISR ;Exit interrupt. ChkLoadFlag btfss Flags, 1 goto End_ISR ;Exit interrupt if LoadFlag = 0. btfss PORTB, 1 goto End_ISR ;Exit interrupt if Odd/Even = 0. bcf Flags, 1 ;Clear LoadFlag. bsf Flags, 0 ;Set SendFlag. bcf Flags, 3 ;Clear WaitFlag. goto End_ISR ;Exit interrupt. SetSendFlag bsf Flags, 0 ;Set SendFlag. bcf Flags, 3 ;Clear WaitFlag. goto End_ISR ;Goto End_ISR. SetLoadFlag bsf Flags, 1 ;Set LoadFlag. bcf Flags, 3 ;Clear WaitFlag. goto End_ISR ;Goto End_ISR. ;<-----Composite sync interrupt (New line) > CompSync_Int ;Time from Comp.Sync Interrupt: 2,6 us bcf INTCON, INTF ;Clear the Comp.Sync Interrupt Flag. btfsc Flags, 3 goto End_ISR ;Exit interrupt if WaitFlag = 1. ;Time from Comp.Sync Interrupt: 2,8 us decf CountCPulse, f goto End_ISR ;Goto End_ISR if CountCPulse > 0. movlw 0x06 movwf CountCPulse ;CountCPulse = 7 (Read every 7th line). bcf STATUS, IRP movfw Count_lines sublw 0x02 btfss STATUS, C ;Bank = 0/1 (Indirect addressing). ;W = Count_lines. ;0x02 - LineNum. A-2
24 Bilaga A - Assemblerkod bsf STATUS, IRP ;Change to bank 2/3 if LineNum > 2. Line_01 ;Time from Comp.Sync Interrupt Start: 4,8 us incf Count_lines, f ;Increase Count_lines by one. movfw Count_lines xorlw 0x01 goto Line_01 ;Goto Line_01 if Line = 1. ;Time from Comp.Sync Interrupt Start: 5,8 us movfw Count_lines xorlw 0x03 goto Line_3 ;Goto Line_3 if Line = 3. ;Time from Comp.Sync Interrupt Start: 6,6 us movfw Count_lines xorlw 0x16 goto Line_22 ;Goto Line_22 if Line = 22. ;Time from Comp.Sync Interrupt Start: 7,4 us movfw Count_lines xorlw 0x29 goto Line_41 ;Goto Line_41 if Line = ;Time from Comp.Sync Interrupt Start: 8,2 us movfw LineAddr movwf FSR ;FSR = LineAddr. goto Jumpover ;Time from Comp.Sync Interrupt Start: 6,0 us bcf STATUS, IRP ;Bank = 0, 1 (Indirect addressing). bcf Flags, 2 ;Clear IRP Flag. movlw 0xE6 movwf FSR ;INDF points to the address in IRP:FSR = 0xE6. Line_3 goto Jumpover ;Time from Comp.Sync Interrupt Start: 6,8 us bsf STATUS, IRP ;Bank = 0, 1 (Indirect addressing). bsf Flags, 2 ;Set IRP Flag. movlw 0x10 movwf FSR ;INDF points to the address in IRP:FSR = 1x10. Line_41 VSync Int). Line_22 goto Jumpover ;Time from Comp.Sync Interrupt Start: 8,4 us bcf INTCON, INTE ;Comp.Sync Interrupt Disable (Skip all lines until next bcf INTCON, INTF bsf Flags, 3 bcf Flags, 4 movlw 0xFF movwf CountCPulse goto End_ISR ;Clear Comp.Sync Interrupt Flag. ;Set the WaitFlag. ;Clear the BusyFlag. ;Time from Comp.Sync Interrupt Start: 7,6 us bsf STATUS, IRP ;Bank = 2, 3 (Indirect addressing). bsf Flags, 2 ;Set IRP Flag. movlw 0x90 movwf FSR ;INDF points to the address in IRP:FSR = 1x90. A-3
25 Bilaga A - Assemblerkod Jumpover ;Time from Comp.Sync Interrupt Start: 9 us ;40pixel/line -> 1,0 us/pixel -> Tot. Time = 40 us ;C0 = Comparator 1 Output bsf STATUS, RP0 ;Bank = 1 (Direct addressing). ;Save pixel 1 bsf INDF, 7 ;Save pixel 2 bsf INDF, 6 ;Save pixel 3 bsf INDF, 5 ;Save pixel 4 bsf INDF, 4 ;Save pixel 5 bsf INDF, 3 ;Save pixel 6 bsf INDF, 2 ;Save pixel 7 bsf INDF, 1 ;Save pixel 8 bsf INDF, 0 incf FSR, f ;First Byte of Line Ready ;Save pixel 9 bsf INDF, 7 ;Set bit 7 in first byte of line if comparator output is ;Set bit 6 in first byte of line if comparator output is ;Set bit 5 in first byte of line if comparator output is ;Set bit 4 in first byte of line if comparator output is ;Set bit 3 in first byte of line if comparator output is ;Set bit 2 in first byte of line if comparator output is ;Set bit 1 in first byte of line if comparator output is ;Set bit 0 in first byte of line if comparator output is ;Increase the address by one. ;Set bit 7 in second byte of line if comparator output is A-4
26 Bilaga A - Assemblerkod ;Save pixel 10 bsf INDF, 6 ;Save pixel 11 bsf INDF, 5 ;Save pixel 12 bsf INDF, 4 ;Save pixel 13 bsf INDF, 3 ;Save pixel 14 bsf INDF, 2 ;Save pixel 15 bsf INDF, 1 ;Save pixel 16 bsf INDF, 0 incf FSR, f ;Second Byte of Line Ready ;Save pixel 17 bsf INDF, 7 ;Save pixel 18 bsf INDF, 6 ;Save pixel 19 bsf INDF, 5 ;Save pixel 20 bsf INDF, 4 ;Set bit 6 in second byte of line if comparator output is ;Set bit 5 in second byte of line if comparator output is ;Set bit 4 in second byte of line if comparator output is ;Set bit 3 in second byte of line if comparator output is ;Set bit 2 in second byte of line if comparator output is ;Set bit 1 in second byte of line if comparator output is ;Set bit 0 in second byte of line if comparator output is ;Increase the address by one. ;Set bit 7 in third byte of line if comparator output is ;Set bit 6 in third byte of line if comparator output is ;Set bit 5 in third byte of line if comparator output is ;Set bit 4 in third byte of line if comparator output is A-5
27 Bilaga A - Assemblerkod ;Save pixel 21 bsf INDF, 3 ;Save pixel 22 bsf INDF, 2 ;Save pixel 23 bsf INDF, 1 ;Save pixel 24 bsf INDF, 0 incf FSR, f ;Third Byte of Line Ready ;Save pixel 25 bsf INDF, 7 ;Save pixel 26 bsf INDF, 6 ;Save pixel 27 bsf INDF, 5 ;Save pixel 28 bsf INDF, 4 ;Save pixel 29 bsf INDF, 3 ;Save pixel 30 bsf INDF, 2 ;Save pixel 31 ;Set bit 3 in third byte of line if comparator output is ;Set bit 2 in third byte of line if comparator output is ;Set bit 1 in third byte of line if comparator output is ;Set bit 0 in third byte of line if comparator output is ;Increase the address by one. ;Set bit 7 in fourth byte of line if comparator output is ;Set bit 6 in fourth byte of line if comparator output is ;Set bit 5 in fourth byte of line if comparator output is ;Set bit 4 in fourth byte of line if comparator output is ;Set bit 3 in fourth byte of line if comparator output is ;Set bit 2 in fourth byte of line if comparator output is A-6
28 Bilaga A - Assemblerkod bsf INDF, 1 ;Save pixel 32 bsf INDF, 0 incf FSR, f ;Increase the address by 1 ;Fourth Byte of Line Ready ;Set bit 1 in fourth byte of line if comparator output is ;Set bit 0 in fourth byte of line if comparator output is Testar ;Save pixel 33 bsf INDF, 7 ;Save pixel 34 bsf INDF, 6 ;Save pixel 35 bsf INDF, 5 ;Save pixel 36 bsf INDF, 4 ;Save pixel 37 bsf INDF, 3 ;Save pixel 38 bsf INDF, 2 ;Save pixel 39 bsf INDF, 1 ;Save pixel 40 bsf INDF, 0 incf FSR, w ;Line Ready ;TESTAR bcf STATUS, RP0 movwf LineAddr btfsc STATUS, IRP bsf Flags, 2 ;Set bit 7 in fifth byte of line if comparator output is ;Set bit 6 in fifth byte of line if comparator output is ;Set bit 5 in fifth byte of line if comparator output is ;Set bit 4 in fifth byte of line if comparator output is ;Set bit 3 in fifth byte of line if comparator output is ;Set bit 2 in fifth byte of line if comparator output is ;Set bit 1 in fifth byte of line if comparator output is ;Set bit 0 in fifth byte of line if comparator output is ;Increase the address by one. ;Bank = 0 (indirect addressing). ;Save address to next line. ;Set IRP flag if IRP=1. A-7
29 Bilaga A - Assemblerkod goto End_ISR ;Goto End_ISR. ;<--SUBROUTINES > RS232_Transmit bsf STATUS, RP0 ;Bank = 1 (Direct addressing). bsf TXSTA, TXEN ;Transmit Enabled. bcf STATUS, RP0 ;Bank = 0 (Direct addressing). movlw 0xFA movwf TXTimeoutCounter movlw 0x05 movwf TXRetryCounter movfw TXByte movwf TXREG ;Timeout = 250 x 20 cycles = 5000 cycles = 1ms. ;Retry to send 5 times if timeout occurs. ;Load Transmit Reg. (Send Data in TXByte). TXRegEmpty bsf STATUS, RP0 ;Bank = 1 (Direct addressing). decf TXTimeoutCounter, f ;Decrease TXTimeoutCounter by one. goto TXTimeOut ;Goto TXTimeOut if TXTimeoutCounter = 0. btfss TXSTA, TRMT goto TXRegEmpty ;Loop until TRMT=1 (TSR Empty). bcf TXSTA, TXEN ;Transmit Disabled. bcf STATUS, RP0 ;Bank = 0 (Direct addressing). TXTimeOut clrf TXByte return bsf STATUS, RP0 bcf TXSTA, TXEN ;Clear TXByte. ;Bank = 1 (Direct addressing). ;Abort transmission. bcf STATUS, RP0 ;Bank = 0 (Direct addressing). decf TXRetryCounter, f goto RS232_Transmit ;Goto RS232_Transmit if not TXRetryCounter = 0. return ;< > MoveCursorRight bcf STATUS, RP0 ;Bank = 0 (Direct addressing). ; bcf STATUS, IRP ;Bank = 0/1 (indirect addressing). ; movfw Count_lines ;W = Count_lines. ; sublw 0x02 ;0x02 - LineNum. ; btfss STATUS, C ; bsf STATUS, IRP ;Change to bank 2/3 if LineNum > 2. btfsc CursStatus, 1 goto EndOfLineRight ;Goto EndOfLineRight if Right edge flag = 1. incf PixNum, f bcf CursStatus, 3 bcf CursStatus, 1 ;Increase PixNum by one. ;Clear Left edge flag. ;Clear Right edge flag. movlw 0x28 xorwf PixNum, w bsf CursStatus, 1 ;Set Right edge flag if PixNum = 40. bcf STATUS, C ;Clear the Carry bit. movlw 0x01 xorwf PixMask, w A-8
30 Bilaga A - Assemblerkod goto RotMaskRight ;Goto RotMaskRight if not PixMask = incf CursorAddr, f ;Increase CursorAddr by one. clrf PixMask ;PixMask = bsf STATUS, C ;Set the Carry bit. RotMaskRight rrf PixMask, f ;C= > C= , C= > C= return EndOfLineRight ;Goto beginning of next line. movlw 0x01 movwf PixNum ;PixNum = 1. movlw 0x04 subwf CursorAddr, f ;Decrease CursorAddr by 4. movlw 0x80 movwf PixMask ;PixMask = bcf CursStatus, 1 ;Clear Right edge flag. bsf CursStatus, 3 ;Set Left edge flag. goto MoveCursorDown ;Goto MoveCursorDown. ;< > MoveCursorLeft bcf STATUS, RP0 ;Bank = 0 (Direct addressing). ; bcf STATUS, IRP ;Bank = 0/1 (indirect addressing). ; movfw Count_lines ;W = Count_lines. ; sublw 0x02 ;0x02 - LineNum. ; btfss STATUS, C ; bsf STATUS, IRP ;Change to bank 2/3 if LineNum > 2. btfsc CursStatus, 3 return ;Exit if Left edge flag = 1. decf PixNum, f bcf CursStatus, 3 bcf CursStatus, 1 ;Decrease PixNum by one. ;Clear Left edge flag. ;Clear Right edge flag. movlw 0x01 xorwf PixNum, w bsf CursStatus, 3 ;Set Left edge flag if PixNum = 1. bcf STATUS, C ;Clear the Carry bit. movlw 0x80 xorwf PixMask, w goto RotMaskLeft ;Goto RotMaskLeft if not PixMask = decf CursorAddr, f ;Decrease ByteAddr by one. clrf PixMask ;PixMask = bsf STATUS, C ;Set the Carry bit. RotMaskLeft rlf PixMask, f ;C= > C= , C= > C= return ;< > MoveCursorUp bcf STATUS, RP0 ;Bank = 0 (Direct addressing). btfsc CursStatus, 0 return ;Exit if Upper edge flag = 1. decf LineNum, f ;Decrease LineNum by one. bcf CursStatus, 0 ;Clear Upper edge flag. bcf CursStatus, 2 ;Clear Bottom edge flag. movlw 0x01 xorwf LineNum, w bsf CursStatus, 0 ;Set Upper edge flag if LineNum = 1. movlw 0x02 xorwf LineNum, w goto CursorLine2 ;Goto CursorLine2 if LineNum = 2. movlw 0x15 A-9
31 Bilaga A - Assemblerkod CursorLine2 xorwf LineNum, w goto CursorLine21 ;Goto CursorLine21 if LineNum = 21. ;If not line = 2 or 21 movlw 0x05 subwf CursorAddr, f ;Decrease CursorAddr by 5. return ;Change to memorybank 1 bcf STATUS, IRP movlw 0xDB addwf CursorAddr, f return CursorLine21 ;Change to memorybank 2 bsf STATUS, IRP movlw 0x26 subwf CursorAddr, f return ;< > MoveCursorDown bcf STATUS, RP0 ;Bank = 0 (Direct addressing). btfsc CursStatus, 2 goto TransmitData ;Exit analyze and goto TransmitData if bottom edge flag = 1. incf LineNum, f ;Increase LineNum by one. bcf CursStatus, 0 ;Clear Upper edge flag. bcf CursStatus, 2 ;Clear Bottom edge flag. CursorLine3 movlw 0x28 xorwf LineNum, w bsf CursStatus, 2 ;Set Bottom edge flag if LineNum = 40. movlw 0x03 xorwf LineNum, w goto CursorLine3 ;Goto CursorLine3 if LineNum = 3. movlw 0x16 xorwf LineNum, w goto CursorLine22 ;Goto CursorLine22 if LineNum = 22. ;If not line = 3 or 22 movlw 0x05 addwf CursorAddr, f ;Increase CursorAddr by 5 return ;Change to memorybank 2 bsf STATUS, IRP movlw 0xDB subwf CursorAddr, f return CursorLine22 ;Change to memorybank 3 bsf STATUS, IRP movlw 0x26 addwf CursorAddr, f return ;< > UpdatePixStatus bcf STATUS, RP0 ;Bank=0 (direct addressing). bcf STATUS, IRP ;Bank = 0, 1 (indirect addressing). movfw LineNum ;W = LineNum. sublw 0x02 ;0x02 - LineNum. btfss STATUS, C bsf STATUS, IRP ;Change to bank 0,1 if LineNum > 2. clrf PixStatus movfw CursorAddr movwf FSR movfw INDF andwf PixMask, w xorwf PixMask, w ;FSR = CurrentCursorAddr. ;Mask content of INDF with PixMask. A-10
32 Bilaga A - Assemblerkod return interrupt if pixel is white. bsf PixStatus, 7 ;Set Value flag if pixel is black. ChkPixAbove btfsc CursStatus, 0 goto ChkPixLeft ;Goto ChkPixLeft if Upper edge flag is set. call MoveCursorUp bcf STATUS, IRP ;Bank = 0, 1 (Indirect addressing). movfw LineNum ;W = LineNum. sublw 0x02 ;0x02 - LineNum. btfss STATUS, C bsf STATUS, IRP ;Change to bank 0,1 if LineNum > 2. movfw CursorAddr movwf FSR ;FSR = CurrentCursorAddr. movfw INDF andwf PixMask, w ;Mask content of INDF with PixMask. xorwf PixMask, w bsf PixStatus, 0 ;Set Above flag if pixel is black. call MoveCursorDown ChkPixLeft btfsc CursStatus, 3 goto ChkPixRight ;Goto ChkPixRight if Left edge flag is set. call MoveCursorLeft bcf STATUS, IRP ;Bank = 0, 1 (Indirect addressing). movfw LineNum ;W = LineNum. sublw 0x02 ;0x02 - LineNum. btfss STATUS, C bsf STATUS, IRP ;Change to bank 0,1 if LineNum > 2. movfw CursorAddr movwf FSR ;FSR = CurrentCursorAddr. movfw INDF andwf PixMask, w ;Mask content of INDF with PixMask. xorwf PixMask, w bsf PixStatus, 3 ;Set Left flag if pixel is black. call MoveCursorRight ChkPixRight btfsc CursStatus, 1 goto ChkPixBelow ;Goto ChkPixBelow if Right edge flag is set. call MoveCursorRight bcf STATUS, IRP ;Bank = 0, 1 (Indirect addressing). movfw LineNum ;W = LineNum. sublw 0x02 ;0x02 - LineNum. btfss STATUS, C bsf STATUS, IRP ;Change to bank 0,1 if LineNum > 2. movfw CursorAddr movwf FSR ;FSR = CurrentCursorAddr. movfw INDF andwf PixMask, w ;Mask content of INDF with PixMask. xorwf PixMask, w bsf PixStatus, 1 ;Set Right flag if pixel is black. call MoveCursorLeft ChkPixBelow btfsc CursStatus, 2 return ;Return from subroutine if Bottom edge flag is set. call MoveCursorDown bcf STATUS, IRP ;Bank = 0, 1 (Indirect addressing). movfw LineNum ;W = LineNum. sublw 0x02 ;0x02 - LineNum. btfss STATUS, C bsf STATUS, IRP ;Change to bank 0,1 if LineNum > 2. movfw CursorAddr movwf FSR ;FSR = CurrentCursorAddr. movfw INDF andwf PixMask, w ;Mask content of INDF with PixMask. xorwf PixMask, w bsf PixStatus, 2 ;Set Below flag if pixel is black. call MoveCursorUp ;Exit return ;< > SetCoordX1 movfw PixNum A-11
33 Bilaga A - Assemblerkod movwf ObjectCoordX1 ;ObjectCoordX1 = PixNum. return ;< > SetCoordY1 movfw LineNum movwf ObjectCoordY1 ;ObjectCoordY1 = LineNum. return ;< > SetCoordX2 movfw PixNum movwf ObjectCoordX2 ;ObjectCoordX2 = PixNum. return ;< > SetCoordY2 movfw LineNum movwf ObjectCoordY2 ;ObjectCoordY2 = LineNum. return ;< > SaveObject bcf STATUS, RP0 ;Memory bank 0 (direct addressing). bcf STATUS, IRP ;Memory bank 0, 1 (ind. addressing). movfw ObjectCoordAddr ;Get address to object coordinates. movwf FSR ;INDF points to X1-coordinate. movfw ObjectCoordX1 movwf INDF incf FSR, f ;INDF points to Y1-coordinate. movfw ObjectCoordY1 movwf INDF incf FSR, f ;INDF points to X2-coordinate. movfw ObjectCoordX2 movwf INDF incf FSR, f ;INDF points to Y2-coordinate. movfw ObjectCoordY2 movwf INDF incf FSR, w ;Increase address by 1 and put in W. movwf ObjectCoordAddr ;ObjectCoordAddr contains address to next objects coordinates. ;sublw 0x6F ;TESTAR ;btfss STATUS, C ;TESTAR xorlw 0x70 goto TransmitData ;Exit analyze and goto TransmitData if object list is full. return ;<--INITIATION > init bcf STATUS, RP1 bcf STATUS, RP0 clrf INTCON clrf Flags bsf Flags, 3 clrf TXByte bsf STATUS, RP0 clrf PIE1 clrf PIE2 ;Bank = 0 (Direct addressing). ;Disable all interrupts. ;Clear all flags. ;Set WaitFlag. ;Clear TXByte. ;Bank = 1 (Direct addressing). ;Disable all peripheral interrupts movlw 0x1A movwf CountCPulse ;CountCPulse = 16. ;<Initiate RS232 ( N-1)> bsf STATUS, RP0 ;Bank = 1 (Direct addressing) bcf TRISC, 6 bsf TRISC, 7 movlw 0x20 movwf SPBRG ;Config. Port C6 as output. ;Config. Port C7 as input. ;SPBRG=32 -> Baud Rate = B/s. Selected. bcf TXSTA, TX9 bcf TXSTA, TXEN bcf TXSTA, SYNC bsf TXSTA, BRGH bcf STATUS, RP0 ;9-bit Transmit Disable. ;Transmit Disable. ;High Speed Baud Rate Selected. ;Bank = 0 (Direct addressing). ;Asynchronous Mode A-12
34 Bilaga A - Assemblerkod bsf RCSTA, SPEN bcf RCSTA, RX9 bsf RCSTA, CREN ;Serial Port Enable. ;9-bit Receive Disable. ;Continuous Receive Enable. 4=CompSync. ;Initiate Vertical & Composite Sync interrupts and PORTB: 0=VSync, 1=Odd/Even, bsf STATUS, RP0 ;Bank = 1 (Direct addressing). movlw 0x13 movwf TRISB ;RB0, RB1, RB4 -> Input. bsf INTCON, RBIE ;V.Sync Interrupt Enable. bcf INTCON, INTE ;C.Sync Interrupt Disable. bsf OPTION_REG, INTEDG ;C.Sync Interrupt Trigged on Rising Edge. clrf TRISD ;TESTAR ;Intiate Comparator bsf STATUS, RP0 ;Bank = 1 (Direct addressing). movlw 0x00 movwf ADCON1 ;PORTA = AxAAAA, PORTE = AAA. bcf CMCON, C1INV ;Comparator 1 not inverted. bcf CMCON, CM2 bcf CMCON, CM1 bsf CMCON, CM0 ;Comparator Mode = 001. bcf OPTION_REG, T0SE movlw 0x09 movwf TRISA ;TRISA= > RA0 and RA3 = Input. bsf INTCON, GIE ;Global Interrupt Enable. ;<--MAIN PROGRAM > main btfsc Flags, 3 goto main ;Goto main if WaitFlag = 1. btfsc Flags, 4 goto main ;Goto main if BusyFlag = 1. btfsc Flags, 0 goto Send ;Goto Send if SendFlag = 1. btfsc Flags, 1 goto Load ;Goto Load if LoadFlag = 1. Send goto main ;Goto main. ;<--Send frame to PC > btfsc Flags, 3 goto main ;Goto main if WaitFlag = 1. btfsc Flags, 4 goto main ;Goto main if BusyFlag = 1. bcf INTCON, GIE bcf INTCON, INTE bsf Flags, 4 ;Disable all masked interrupts. ;Disable Comp.Sync Interrupts. ;Set the BusyFlag. ;<-----Analyze > Analyze bcf STATUS, RP0 ;Bank = 0 (Direct addressing). bcf STATUS, RP1 bcf STATUS, IRP ;Bank = 0, 1 (Indirect addressing). movlw 0x09 movwf CursStatus ;Cursor Status = (Upper left corner). clrf CursorDir ;Cursor Direction = 0 (up). movlw 0x01 movwf LineNum ;LineNum = 1. movwf PixNum ;PixNum = 1. clrf PixStatus ;PixStatus = movlw 0x80 movwf PixMask ;PixMask = movlw 0xE6 movwf CursorAddr ;CursorAddr = 0xE6. movlw 0xA0 movwf StartPointAddr ;StartPointAddr = 0xA0. movlw 0x30 movwf ObjectCoordAddr ;ObjectCoordAddr = 0x30. ;Clear all coordinates movlw 0x2A movwf FSR ;INDF points to the address in IRP:FSR = 0x2A. A-13
Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010
STYRNING - i Mikrodatorteknik för U2 2010 1. Uppgift M10 (5p) aug-09 Skriv ett program i PIC-assembler som - gör PortB till utport - ettställer bit 0, 3 och 4 i PortB - nollställer bit 5 och 6 i PortB
Realtidsprogrammering. En introduktion Implementering (med exempel från PIC)
Realtidsprogrammering En introduktion Implementering (med exempel från PIC) Utan timing Periodtid varierar beroende på funktionernas exekveringstid. Specificera endast maxtid ( Worst case) och eventuellt
Övningsuppgifter i Mikrodatorteknik för U2
i Mikrodatorteknik för U2 Skriv instruktioner som utför följande operationer (angivna tal antas givna i hexadecimal form om inget annat anges): 1. (0x20) + 25 (0x30) 2. (0x22) - (0x31) (0x25) 3. (w) +
Föreläsningsanteckningar till Konstruktionsmetoder 981027
Föreläsningsanteckningar till Konstruktionsmetoder 981027 Jämförelse mellan 68705P3 och 16F84 externt MC68705P3 PIC16F84 I/O 20 13 Kapsling 28-pin DIL 18-pin DIL Drivförmåga på pinnar PortB 10mA Sink,
Microprocessor / Microcontroller. Industrial Electrical Engineering and Automation
Microprocessor / Microcontroller Varför? Billiga Innehåller bara det nödvändigaste Kräver få kringkomponenter Enkla att programmera PIC16F887 PIC16F887 In- och utgångar Pinnar på PIC16F887 Exempel: pinne
Tentamen Enchipsdatorer med tillämpningar. Lösningar och kommentarer
Tentamen Enchipsdatorer med tillämpningar Lösningar och kommentarer Program: Elektroteknik Datum: 04-01-09 Tid: 08:00-13:00 Lokal: E103 Hjälpmedel: Linjal, miniräknare, Datablad: MC60705 och PIC16F84 (Utdelas
'HOWHQWDPHQ 6\VWHPNRQVWUXNWLRQ
'HOWHQWDPHQ 6\VWHPNRQVWUXNWLRQ / VQLQJDURFKNRPPHQWDUHU Program: Elektroteknik, mikrodatorsystem Datum: 99-11-02 Tid: 8:00-9:30 Lokal E448 Hjälpmedel: Bilagor: Examinator: Miniräknare, linjal Datablad för
Högskolan i Halmstad Digital- och Mikrodatorteknik 7.5p. Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien
DIGITAL- OCH MIKRODATORTEKNIK, U2 09.00 13.00 Tillåtna hjälpmedel: Instruktionslista PIC16F877A Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien Fullständiga lösningar skall inlämnas.
INGENJÖRSHÖGSKOLAN INGENJÖRSHÖGSKOLAN
Dagens föreläsning Inbyggnadsprocessorer - och programmering ❾ Översikt PIC-processorn ❿ Familj ❿ Flash / EPROM ❿ Introduktion: 16F84 ❾ ❿ Harvard / von Neumann ❿ CISC / RISC ❿ Pipelining ❾ Programmering
Microprocessor / Microcontroller
Microprocessor / Microcontroller Varför? Industrial Electrical Engineering and Automation Billiga Innehåller bara det nödvändigaste Kräver få kringkomponenter Enkla att programmera PIC16F887 PIC16F887
Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien
DIGITAL- OCH MIKRODATORTEKNIK, U2 11-01-12 09.00 13.00 Tillåtna hjälpmedel: Instruktionslista PIC16F877A Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien Fullständiga lösningar
Tentamen Enchipsdatorer med tillämpningar Lösningar och kommentarer
Tentamen Enchipsdatorer med tillämpningar Lösningar och kommentarer Program: Elektroteknik Datum: 03-05-19 Tid: 13:30-18:30 Lokal: He303 Hjälpmedel: Linjal, miniräknare, Datablad: MC60705 och PIC16F84
Tentamen Enchipsdatorer med tillämpningar. Lösningar och kommentarer
Tentamen Enchipsdatorer med tillämpningar Lösningar och kommentarer Program: Elektroteknik Datum: 03-08-17 Tid: 10:00-15:00 Lokal: E171 Hjälpmedel: Linjal, miniräknare, Datablad: MC60705 och PIC16F84 (Utdelas
Effektpedal för elgitarr
EITF11 - Digitala Projekt Effektpedal för elgitarr Handledare: Bertil Lindvall Ivan Rimac (I05) Jimmy Lundberg (I08) 2011-05-10 Contents Bakgrund... 3 Kravspecifikation... 3 Kravspecifikation Effektpedal...
Beskrivning av porthantering i mikroprocessorn SAM3U som används på vårt labkort SAM3U- EK.
Tomas Nordström Högskolan i Halmstad Dokumentversion 0.1, 2012-04- 01 Beskrivning av porthantering i mikroprocessorn SAM3U som används på vårt labkort SAM3U- EK. Informationen till detta kompendium är
PROTOTYPUTVECKLING AV DIGITALT
PROTOTYPUTVECKLING AV DIGITALT STYRSYSTEM FÖR TORKSKÅP Examensarbete utfört i Elektroniksystem av Lena Hermansson Christian Pettersson LiTH-ISY-EX-ET-05/0256-SE Linköping 2005 PROTOTYPUTVECKLING AV DIGITALT
Enchipsdatorer med tillämpningar LABORATION 7, ROBOT
Enchipsdatorer med tillämpningar LABORATION 7, ROBOT Laborationsansvariga: Anders Arvidsson Utskriftsdatum: 2005-05-14 Laboranter: 1 Syfte Denna laboration syftar till att introducera interrupt och watchdog
Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.
Datorteknik Tomas Nordström Föreläsning 6 För utveckling av verksamhet, produkter och livskvalitet. Föreläsning 6 Vad händer vid uppstart SoC och Kringkretsar, PIO Programmering i Assembler Lab2 genomgång
Laboration 3 i Digital- och Mikrodatorteknik. Utvecklingssystemet MPLAB IDE Grundläggande assemblerprogrammering för PIC
Laboration 3 i Utvecklingssystemet MPLAB Grundläggande assemblerprogrammering för PIC Målet med laborationen är att få begrepp om Assemblerprogrammering med MPLAB Grundläggande assembler Enkel inmatning
Digitala Projekt(EITF40) - Larm
Digitala Projekt(EITF40) - Larm Handledare: Bertil Lindvall Kristoffer Sätermark, dt08ks6 Magnus Johansson, dt08mj9 Innehåll 1 Introduktion 1 2 Kravspec 1 3 Hårdvara 2 3.1 knappsats och decoder........................
Systemkonstruktion SERIEKOMMUNIKATION
Systemkonstruktion SERIEKOMMUNIKATION Laborationsansvariga: Anders Arvidsson Utskriftsdatum: 2005-04-26 Syfte Laborationen syftar till att ge studenten tillfälle att närmare bekanta sig med RS-232-protokollet,
Ett program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå.
CT3760 Mikrodatorteknik Föreläsning 12 Torsdag 2006-10-05 Naxos Pollning Ett program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå. En
Digitala Projekt(EITF40) - Larm
Digitala Projekt(EITF40) - Larm Handledare: Bertil Lindvall Erik Oredsson, I-09 Sara Sellin, I-09 2012-05-08 1. SAMMANFATTNING I denna rapport presenteras vårt projekt att bygga ett huslarm från grunden
Datormodell. Datorns uppgifter -Utföra program (instruktioner) Göra beräkningar på data Flytta data Interagera med omvärlden
Datormodell Datorns uppgifter -Utföra program (instruktioner) Göra beräkningar på data Flytta data Interagera med omvärlden Intel 4004 från 1971 Maximum clock speed is 740 khz Separate program and data
Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...
Abstract Syftet var att konstruera en väder station som håller koll på temperaturen. Huvudfunktionen var att få en grafisk visning av temperaturen över ett visst tidsintervall eftersom vi valde den grafiska
Digital Projekt EDI 021 Konstruktion av talande nummerpresentatör VT1 2004
Digital Projekt EDI 021 Konstruktion av talande nummerpresentatör VT1 2004 Erik Brattkull E99 Björn Hilliges E02 INLEDNING 3 Bakgrund 3 Kravspecifikation 3 GENOMFÖRANDE 4 Teoretisk modell 4 Praktisk modell
Tentamen Enchipsdatorer med tillämpningar Lösningar och kommentarer
Tentamen Enchipsdatorer med tillämpningar Lösningar och kommentarer Program: Elektroteknik Datum: 04-05-19 Tid: 13:30-18:30 Lokal: E104 Hjälpmedel: Linjal, miniräknare, Datablad: MC60705 och PIC16F84 (Utdelas
Konstruktion av en radiostyrd legobil. Digitala projekt av Arbon Vata Leonardo Vukmanovic Amid Bhatia
Konstruktion av en radiostyrd legobil Digitala projekt av Arbon Vata Leonardo Vukmanovic Amid Bhatia 1 1.Innehållsförtäckning Rapport Radiostyrd LEGO bil...1 1. Innehållsförtäckning...2 2.0 Inledning...3
Construction of a laboration card with the PIC-processor
Examensarbete LITH-ITN-EX--02/248--SE Construction of a laboration card with the PIC-processor Department of Science and Technology Linköpings Universitet SE-601 74 Norrköping, Sweden Institutionen för
Ett urval D/A- och A/D-omvandlare
Ett urval D/A- och A/D-omvandlare Om man vill ansluta en mikrodator (eller annan digital krets) till sensorer och givare så är det inga problem så länge givarna själva är digitala. Strömbrytare, reläer
Formula Blue. Digitala Projekt 8p. Jesper Ferm E02 Carl Hakenäs E04
Formula Blue Digitala Projekt 8p Jesper Ferm E02 Carl Hakenäs E04 Abstract The purpose with this project was to get some understanding how Bluetooth works and how to use it in practical applications. A
Digitalt eller Analogt
Digitalt eller Analogt digitalt: q 0 255 q 7 q 6 q 5 q 4 q 3 q 2 q 1 q 0 1 ½ ¼ 1/8 1/16 1/32 1/64 1/128 eller analogt? q Digital style Old school Digital Analogomvandlare? b 7 b 6 b 5 b 4 b 3 b 2 b 1 b
Realtidsprogrammering
Realtidsprogrammering En introduktion - Principer och begrepp Realtidsprog. - Anders Arvidsson 1 Vad är ett realtidssystem? Ett system som reagerar på yttre händelser och ger svar inom en bestämd tid.
Lödinstruktion, JoyFi(tm) v1.0
Om detta dokument Detta är lödinstruktion för JoyFi v.0, en adapter som gör att du kan använda joysticks trådlöst till C64/Amiga Produkten levereras i två delar: en sändare (MASTER) samt en mottagare (SLAVE).
EDI022. Digitala Projekt. Rapport. Björn Åkesson 5/20/2011
EDI022 Digitala Projekt Rapport Björn Åkesson 5/20/2011 A synthesizer is built consisting of a bit-counter and phased-locked-loop to create various tones. The construction can be controlled via an external
#include <pic.h> #include <sys.h> char LEFT,RIGHT,MOTORHASTIGHET;
Att avlusa en rad Assembler tar lika lång tid som att avlusa en rad C. Att skriva i C gör att man är utlämnad till kompilatorns sätt att göra assembler koden. Assembler ger fullständig kontroll över tider.
TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1
Halmstad University School of Information Science, Computer and Electrical Engineering Tomas Nordström, CC-lab TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1 Datum: 2012-05- 23 Tid och plats: 9:00 13:00 i
Laborera med SmartCard
Laborera med SmartCard GoldCard = PIC16F84 GoldCard är ett blankt SmartCard som är bestyckat med en picprocessor 16F84 ( och ett extra flash-minne ). En typisk tillämpning för ett sådant SmartCard kan
Mekanisk solros, Digitala projekt(edi021) Kristoer Nordvall, Stefan Windfeldt, Inlämmnad: 4 december 2006
Mekanisk solros, Digitala projekt(edi021) Kristoer Nordvall, d03kn@student.lth.se Stefan Windfeldt, d03sw@student.lth.se Inlämmnad: 4 december 2006 Innehåll 1 Problembeskrivning 3 2 Teknisk beskrivning
Projektlaboration 4, synkronisering av klockan
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
AD-DA-omvandlare. Mätteknik. Ville Jalkanen. ville.jalkanen@tfe.umu.se 1
AD-DA-omvandlare Mätteknik Ville Jalkanen ville.jalkanen@tfe.umu.se Inledning Analog-digital (AD)-omvandling Digital-analog (DA)-omvandling Varför AD-omvandling? analog, tidskontinuerlig signal Givare/
Varför använda en liten 8-bitars processor när det finns billiga kraftfulla 32-bitars? William Sandqvist william@kth.se
Varför använda en liten 8-bitars processor när det finns billiga kraftfulla 32-bitars? 8-bits-processor nära givaren? En enkel givare har ofta en svag utsignal. Den kan behöva anslutas med en dyr kabel.
- Digitala ingångar och framförallt utgångar o elektrisk modell
Elektroteknik för MF1016. Föreläsning 8 Mikrokontrollern ansluts till omvärden. - Analoga ingångar, A/D-omvandlare o upplösningen och dess betydelse. o Potentiometer som gasreglage eller volymratt. o Förstärkning
LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall
LARMANLÄGGNING Digitala Projekt, EITF11 Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall 1. Sammanfattning Vi har byggt ett larm vars syfte är att användas i hemmet. Larmet använder
c a OP b Digitalteknik och Datorarkitektur 5hp ALU Design Principle 1 - Simplicity favors regularity add $15, $8, $11
A basic -bit Select between various operations: OR, AND, XOR, and addition Full Adder Multiplexer Digitalteknik och Datorarkitektur hp Föreläsning : introduktion till MIPS-assembler - april 8 karlmarklund@ituuse
Analoga och Digitala Signaler. Analogt och Digitalt. Analogt. Digitalt. Analogt få komponenter låg effektförbrukning
Analoga och Digitala Signaler Analogt och Digitalt Analogt 00000000000000000000000000000000000 t Digitalt Analogt kontra Digitalt Analogt å komponenter låg eektörbrukning verkliga signaler Digitalt Hög
Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3. Namn: Personnummer: Tentamensdatum: 20120410 Tid: 14:00-18:00.
Mikrodatorteknik Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3 7,5 högskolepoäng Namn: Personnummer: Tentamensdatum: 20120410 Tid: 14:00-18:00 Hjälpmedel: Totalt antal poäng på tentamen:
Läsminne Read Only Memory ROM
Läsminne Read Only Memory ROM Ett läsminne har addressingångar och datautgångar Med m addresslinjer kan man accessa 2 m olika minnesadresser På varje address finns det ett dataord på n bitar Oftast har
TEMPERATUR OCH VINDMÄTARE MED HÖGTALARFUNKTION
TEMPERATUR OCH VINDMÄTARE MED HÖGTALARFUNKTION Digitala Projekt EITF 11, 18 maj 2015 Grupp 13; Morten Rosén, Henrik Boris-Möller, Christoffer Nordberg Projekthandledare: Bertil Lindvall Innehållsförteckning
Vad är en UART? Universal Asynchronous Receiver Transmitter parallella seriella parallell åttabitars signal mest signifikant bit
Vad är en UART? Beteckningen UART är en förkortning för det engelska uttrycket Universal Asynchronous Receiver Transmitter, vilket översatt till svenska blir ungefär Universell Asynkron Mottagare/Sändare.
Programexempel 1 AND-funktionen
Utdrag ur "Logiska funktioner med mikroprocessor" s.10 ff. Reviderat 121105 Håkan Joëlson... Programexempel 1 AND-funktionen Uppgift: Realisera en 2-ingångars AND-grind med PIC16F84A. I detta exempel ska
GPIO - General Purpose Input Output
GPIO - General Purpose Input Output Ur innehållet: Ideala och verkliga signaler Bitvis in- och utmatning Anslutning - fysiskt gränssnitt F407 - GPIO-modul tillämpningar Läsanvisningar: Arbetsbok avsnitt
William Sandqvist william@kth.se
Komparatorn en 1 bits AD-omvandlare En komparator är en känslig förstärkare för skillnaden mellan spänningarna på ingångarna. Minsta lilla positiv skillnad gör att utgången hamnar på (1) eller vid negativ
EXAMENSARBETE. Insamling av och trådlös överföring av patientdata
EXAMENSARBETE 2008:129 CIV Insamling av och trådlös överföring av patientdata Johan Nordin Luleå tekniska universitet Civilingenjörsprogrammet Elektroteknik Institutionen för Systemteknik Avdelningen för
Enchipsdatorer med tillämpningar LABORATION 6, ROBOT
Enchipsdatorer med tillämpningar LABORATION 6, ROBOT Laborationsansvariga: Tomas Bengtsson, Rickard Holsmark Utskriftsdatum: 2006-05-02 Laboranter: 1 Syfte Syftet med laborationen är att studenterna på
Lösningsföslag till Exempel på tentamensuppgifter i Digitalteknik I
Lösningsföslag till Exempel på tentamensuppgifter i Digitalteknik I Flervalsfrågor. A 2. C 3. B 4. D 5. A 6. B 7. C 8. D 9. C 0. B. B 2. C 3. A 4. C 5. A Problemuppgifter. Uttryckt i decimal form: A=28+32+8
Manual för EQE PLC enhet
Manual för EQE PLC enhet EQE PLC enheten är enkelt programmerbar via byglingar. Detta gör att inga förkunskaper inom programmering behövs. De olika funktionerna realiseras helt enkelt genom att flytta
Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte
CT3760 Mikrodatorteknik Föreläsning 4 Tisdag 2005-09-06 Stacken I datasammmanhang är en stack ett minnesområde. Det är processorn som använder stacken. För att skapa en stack anger man en adress i stackpekarregistret.
Lösningar till tentamen i EIT070 Datorteknik
Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Onsdagen den 13 mars 2013, klockan 14:00 19:00 i Vic 2 A-D, 3 A-C. Tillåtna hjälpmedel: på tentan utdelad
Grundläggande A/D- och D/A-omvandling. 1 Inledning. 2 Digital/analog(D/A)-omvandling
Grundläggande A/D- och D/A-omvandling. 1 Inledning Datorer nns nu i varje sammanhang. Men eftersom vår värld är analog, behöver vi något sätt att omvandla t.ex. mätvärden till digital form, för att datorn
Övning 6. Parallellport, timer
Övning 6 Parallellport, timer 6.1 de2_pio_toggles18 Memory-Mapped addresses LEDG8 LEDR17 LEDR16 LEDR15 LEDR14 LEDR13 LEDR12 LEDR11 LEDR10 LEDR9 LEDR8 LEDR7 LEDR6 LEDR5 LEDR4 LEDR3 LEDR2 LEDR1 LEDR0 LEDG7
Du har följande material: 1 Kopplingsdäck 2 LM339 4 komparatorer i vardera kapsel. ( ELFA art.nr datablad finns )
Projektuppgift Digital elektronik CEL08 Syfte: Det här lilla projektet har som syfte att visa hur man kan konverterar en analog signal till en digital. Här visas endast en metod, flash-omvandlare. Uppgift:
Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C
Namn: Laborationen godkänd: Tekniska gränssnitt 7,5 p Vt 2014 Laboration 5 LTH Ingenjörshögskolan vid Campus Helsingborg Temperaturmätning med analog givare. Syftet med laborationen är att studera analog
Sekvensnät vippor, register och bussar
ekvensnät vippor, register och bussar agens föreläsning: Lärobok kap.5 Arbetsbok kap 8,9,10 Ur innehållet: Hur fungerar en -latch? Hur konstrueras JK-, - och T-vippor? er och excitationstabeller egister
Digitala projekt rapport
Digitala projekt rapport Alexander Westrup, d04aw@student.lth.se Martin Sandgren, d04ms@student.lth.se 4 december 2007 Innehåll 1 Abstract 1 2 Inledning 1 3 Arbetsgång 1 4 Hårdvara 1 4.1 Processor...............................
Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler
Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler Talsystem Talsystem - binära tal F1.1) 2 n stycken tal från 0 till 2 n 1 F1.2) 9 bitar (512 kombinationer) Talsystem - 2-
AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser
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
RemoteBud. Inlämnas: Patrik Johnsson, e01pjo Viktor Karlsson, e01vk
RemoteBud Inlämnas: 2005-02-01 Patrik Johnsson, e01pjo Viktor Karlsson, e01vk Abstract Skulle du också vilja styra dina lampor och rulla ner dina persienner med hjälp av din TV-fjärrkontroll? Remotebud
7HQWDPHQLNRQVWUXNWLRQVPHWRGHU 'HOWHQWDPHQ / VQLQJDURFKNRPPHQWDUHU
Datum: 98 11 18 Tid: 13:00-14:00 Lokal: E348 Hjälpmedel: Miniräknare, linjal Bilagor: Datablad över PIC Timer 0 7HQWDPHQLNRQVWUXNWLRQVPHWRGHU 'HOWHQWDPHQ / VQLQJDURFKNRPPHQWDUHU Examinator: Bengt Magnhagen
Montering av Wisp628.
Montering av Wisp628. Monteringen bör inte medföra några problem för den som har monterat ett par kretskort förut. Som vanligt gäller noggrannhet och lite tålamod. Komponentnumren ( D2, R1 o.s.v.) i texten
Blue Key Digitala projekt VT
Blue Key Digitala projekt VT 2 2004 Maj 2004 Martin Erikson, E00 Mikael Andersson, E00 Department of Information Technology 0 Lund Institute of Technology Sammanfattning Denna rapport behandlar vårt projekt
Ansvarig lärare: Olof Andersson, Telefon 021-101314 (besöker skrivsalen)
MÄLRLENS HÖGSKOL Institutionen för elektroteknik Tentamen Mikrodatorteknik T3760 atum 2005-10-28 Tid 08.30 12.30 nsvarig lärare: Olof ndersson, Telefon 021-101314 (besöker skrivsalen) Om du klarat samtliga
A-del motsvarande KS1
MÄLARDALENS HÖGSKOLA Institutionen för elektroteknik Tentamen Mikrodatorteknik CT3760 Datum 2005-10-28 Tid 08.30 12.30 Svar till A- och B-del A-del motsvarande KS1 Uppgift A1. Vad blir resultatet då instruktionen
Övning 7. Timer, serieport
Övning 7 Timer, serieport 7.6 timer_1 Memory-Mapped addresses 0x920 status 0x924 control 0x928 periodl 0x92C periodh 0x930 snapl 0x934 snaph 15 0 Run TO (Time-Out) ITO cont start stop timer_1 start D Q
Växtviskaren EITF11 Digitala projekt VT15, I12
Växtviskaren EITF11DigitalaprojektVT15,I12 NathalieLiljebrunn,EbbaRiismark,AnnaNorelius LundsTekniskaHögskola Institutionenförelektro ochinformationsteknik Handledare:BertilLindvall,AndreasJohansson 2015
Elektro och Informationsteknik LTH. Laboration 6 A/D- och D/A-omvandling. Elektronik för D ETIA01
Elektro och Informationsteknik LTH Laboration 6 A/D- och D/A-omvandling Elektronik för D ETIA01 Peter Hammarberg Anders J Johansson Lund April 2008 Mål Efter laborationen skall du ha studerat följande:
Vad är kommunikation? Vad är datorkommunikation? Dataöverföring; Inledning
Vad är kommunikation? Kommunikation är ett vitt begrepp. Vi använder det för att benämna till exempel ett samtal eller att vi själv förflyttar oss med till exempel tåg eller buss. Kommunikation kommer
Innehåll. 1 Inledning 3
Digitala projekt Tomas Bjerre D04 d04tb@student.lth.se Gustav Reiz D04 d04gr@student.lth.se Roger Schildmeijer D04 d04rp@student.lth.se 26 februari 2008 1 Innehåll 1 Inledning 3 2 Utrustning 3 2.1 ATMega16...............................
Digitalteknik: CoolRunner-II CPLD Starter Kit
CR:1 CoolRunner-II CPLD Starter Kit är ett litet utvecklingssystem för Xilinx-kretsen XC2C256. Utvecklingskortet kommer från företaget Digilent. Vid laborationerna i digitalteknik kommer kortet att användas
LABORATION DATORKONSTRUKTION TSEA83 UART. Namn och personnummer. Version: 1.0 2013 (OS)
LABORATION DATORKONSTRUKTION TSEA83 UART Version: 1.0 2013 (OS) Namn och personnummer Godkänd 1 blank sida 2 Innehåll 1 Inledning 5 1.1 Syfte................................. 5 1.2 Förberedelser............................
GPIO - General Purpose Input Output
GPIO - General Purpose Input Output Ur innehållet: Digital IO Ideala och verkliga signaler Bitvis in- och utmatning Anslutning - fysiskt gränssnitt F407 - GPIO-modul tillämpningar Programmering av enkelt
F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen
68000 Arkitektur F2: Motorola 68000 I/O signaler Processor arkitektur Programmeringsmodell Assembler vs. Maskinkod Exekvering av instruktioner i 68000 Instruktionsformat MOVE instruktionen Adresseringsmoder
Tentamen PC-teknik 5 p
Tentamen PC-teknik 5 p Namn:. Klass:... Program: Di2, Em3, Et3 Datum: 03-08-15 Tid: 13:30-18:30 Lokal: E171 Hjälpmedel: Linjal, miniräknare, Instruktionsrepertoar för 8086 (utdelas), Lathund, Pacific C
Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN
2016 Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN Innehållsförteckning INLEDNING... 3 KRAVSPECIFIKATION AV PROTOTYP... 3 FUNKTIONELLA
TSEA22 Digitalteknik 2019!
1(43) 2019 Mattias Krysander Ingemar Ragnemalm 1(43) Föreläsning 7. Sekv3. enna föreläsning: Lösningar närmare verkligheten Synkronisering Enpulsare Problem till design 2(43)2(43) Förra föreläsningen:
F6: I/O hantering. Typer av I/O i ett datorsystem. Protokoll för synkronisering. Drivrutiner. Memory mapped Port mapped. Polling Timed Interrupt DMA
F6: I/O hantering Typer av I/O i ett datorsystem Memory mapped Port mapped Protokoll för synkronisering Polling Timed Interrupt DMA Drivrutiner 1 Memory mapped I/O enheter avkodas precis som ett minne
Sekvensnät. William Sandqvist
Sekvensnät Om en och samma insignal kan ge upphov till olika utsignal, är logiknätet ett sekvensnät. Det måste då ha ett inre minne som gör att utsignalen påverkas av både nuvarande och föregående insignaler!
Tenta i Digitalteknik
Tenta i Digitalteknik Kurskod D0011E Tentamensdatum 2010-06-01 Skrivtid 9.00-14.00 (5 timmar) Maximalt resultat 50 poäng Godkänt resultat 25 poäng inkl bonus Jourhavande lärare Per Lindgren Tel 070 376
LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall
LARMANLÄGGNING Digitala Projekt, EITF11 Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall 1. Sammanfattning Vi har byggt ett larm vars syfte är att användas i hemmet. Larmet använder
Thunder s Truck projektrapport
LTH Thunder s Truck projektrapport EITF11 Digitala projekt 2012-05-10 Abstract The goal of this project was to build a truck operated by an IP-remote. The robot is built using standard parts such as two
A/D- och D/A- omvandlare
A/D- och D/A- omvandlare Jan Carlsson 1 Inledning Om vi tänker oss att vi skall reglera en process så ställer vi in ett börvärde, det är det värde som man vill processen skall åstadkomma. Sedan har vi
Laborationskort - ML4
microlf ML Laborationskort - ML ML är ett enkelt laborationskort avsett för inledande laborationsövningar i Datorteknik. Kortet innehåller 0 olika sektioner som enkelt kopplas samman via 0-polig flatkabel.
Elektro och Informationsteknik LTH. Laboration 5 Operationsförstärkaren. Elektronik för D ETIA01
Elektro och Informationsteknik LTH Laboration 5 Operationsförstärkaren Elektronik för D ETIA01 Johan Kåredal Anders J Johansson Lund April 2008 Laboration 5 Mål Efter laborationen vill vi att du ska: fått
Lösningar till tentamen i EIT070 Datorteknik
Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Onsdagen den 7 mars 2012, klockan 14:00 19:00 i Vic 2, 3. Tillåtna hjälpmedel: på tentan utdelad formelsamling,
Digital- och datorteknik
Digital- och datorteknik Föreläsning #17 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola Tallriksmodellen Stackoperationer Element kan endast
Systemkonstruktion LABORATION REALTIDSPROGRAMMERING
Systemkonstruktion LABORATION REALTIDSPROGRAMMERING Laborationsansvariga: Anders Arvidsson, Björn Lundblad Utskriftsdatum: 2002-10-31 Laboranter: 1 Syfte Denna laboration syftar till att öva användningen
Digitalteknik: CoolRunner-II CPLD Starter Kit Med kommentarer för kursen ht 2012
Med kommentarer för kursen ht 2012 2012 CR:1 CoolRunner-II CPLD Starter Kit är ett litet utvecklingssystem för Xilinx-kretsen XC2C256. Utvecklingskortet kommer från företaget Digilent. Vid laborationerna
Maskinorienterad programmering
Externa avbrott Anslutning av extern avbrottsvippa, programmering med konfigurering och hantering av externa avbrott. Introduktion till time-sharing, enkel task-switch. Ur innehållet: NVIC och EXTI (SYSCFG)
Styrteknik distans: Minneselement, register, räknare, AD-omv D4:1
Styrteknik distans: Minneselement, register, räknare, AD-omv D4:1 Digitala kursmoment D1 Binära tal, talsystem och koder D2 Boolesk Algebra D3 Grundläggande logiska grindar D4 Minneselement, register,
Pulsmätare med varningsindikatorer
Pulsmätare med varningsindikatorer Elektro- och informationsteknik Projektrapport, EITF11 Digitala Projekt Charlie Hedhav Sofia Johansson Louise Olsson 2016-05-17 Abstract During the course Digitala Projekt