Konstruktionsbeskrivning samt programmeringsförslag för en digital enhet till en talmaskin. KTH Syd 2001 Grupp 10

Relevanta dokument
Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

KTH Syd CAMPUS HANINGE. Studentmanualen. för projekt. DiTaMa 2

'HOWHQWDPHQ 6\VWHPNRQVWUXNWLRQ

Föreläsningsanteckningar till Konstruktionsmetoder

Övningsuppgifter i Mikrodatorteknik för U2

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

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

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

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

Effektpedal för elgitarr

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

INGENJÖRSHÖGSKOLAN INGENJÖRSHÖGSKOLAN

Laboration i digitalteknik Introduktion till digitalteknik

Umeå universitet Tillämpad fysik och elektronik Ville Jalkanen mfl Laboration Tema OP. Analog elektronik för Elkraft 7.

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

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

Tentamen Enchipsdatorer med tillämpningar. Lösningar och kommentarer

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

Digitala projekt rapport

Tentamen Enchipsdatorer med tillämpningar. Lösningar och kommentarer

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

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

Montering av Wisp628.

Digital Projekt EDI 021 Konstruktion av talande nummerpresentatör VT1 2004

Lösningsföslag till Exempel på tentamensuppgifter i Digitalteknik I

Laborationshandledning

AD-DA-omvandlare. Mätteknik. Ville Jalkanen. 1

DIGITALTEKNIK I. Laboration DE1. Kombinatoriska nät och kretsar

Datakommunikation med IR-ljus.

Minneselement,. Styrteknik grundkurs. Digitala kursmoment. SR-latch med logiska grindar. Funktionstabell för SR-latchen R S Q Q ?

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

Tentamen i Elektronik, ESS010, del 2 den 17 dec 2007 klockan 8:00 13:00 för inskrivna på elektroteknik Ht 2007.

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

PROGRAMMERING AV MCU LABORATION6. Laborationens syfte

Digital- och datorteknik

Laborationshandledning

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

Experiment med schmittrigger

Pulsmätare med varningsindikatorer

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

Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN

Programexempel 1 AND-funktionen

Elektro och Informationsteknik LTH. Laboration 6 A/D- och D/A-omvandling. Elektronik för D ETIA01

Temperaturregleringssystem

Avbrottshantering. Övningsuppgifter

A/D- och D/A- omvandlare

TETRIS. LTH, Campus Helsingborg EITA15 Digitala System

Digitalteknik F9. Automater Minneselement. Digitalteknik F9 bild 1

CE_O3. Nios II. Inför lab nios2time

Minnet. Minne. Minns Man Minnet? Aktivera Kursens mål: LV3 Fo7. RAM-minnen: ROM PROM FLASH RWM. Primärminnen Sekundärminne Blockminne. Ext 15.

Blinkande LED med 555:an, två typkopplingar.

Digitala projekt, EDI021 Rapport Handledare: Bertil Lindvall

Digital- och datorteknik

Digitala Projekt(EITF40) - Larm

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

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

Laborationsrapport Elektroteknik grundkurs ET1002 Mätteknik

Projekt på Elektro i Haninge

Tentamen Enchipsdatorer med tillämpningar Lösningar och kommentarer

Spänningsstyrd Oscillator

TEMPERATUR OCH VINDMÄTARE MED HÖGTALARFUNKTION

Digitala kretsars dynamiska egenskaper

Laboration 3 i Digital- och Mikrodatorteknik. Utvecklingssystemet MPLAB IDE Grundläggande assemblerprogrammering för PIC

Digitala Projekt (EITF11)

Tentamen i Grundläggande ellära och digitalteknik ETA 013 för D

Tentamen i Grundläggande ellära och digitalteknik ETA 013 för D

Elektronik grundkurs Laboration 1 Mätteknik

DEL-LINJÄRA DIAGRAM I

Tentamen i Grundläggande ellära och digitalteknik ETA 013 för D

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

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

HOWTO: HDD Clock. 1 Översikt. Eller: hur man gör en HDD klocka. Peter Faltpihl & Gustav Andersson. Linköpings Universitet, Norrköping

Blue Key Digitala projekt VT

Ett urval D/A- och A/D-omvandlare

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

Installationsanvisning:

Elektronik grundkurs Laboration 6: Logikkretsar

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

Projektrapport i Digitala System

Elektro och Informationsteknik LTH. Laboration 3 RC- och RL-nät i tidsplanet. Elektronik för D ETIA01

D/A- och A/D-omvandlarmodul MOD687-31

Laboration nr2 med enchipsdatorn PIC-16F877

OLOP II Obligatorisk LAB operationsförstärkare Analog elektronik 2

Lödinstruktion, JoyFi(tm) v1.0

Systemkonstruktion SERIEKOMMUNIKATION

Tentamen. TSEA22 Digitalteknik 5 juni, 2015, kl

Tentamen i Grundläggande ellära och digitalteknik ETA 013 för D

(2B1560, 6B2911) HT08

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Växtviskaren EITF11 Digitala projekt VT15, I12

Monteringsanvisning till ESR_CAP Mätare v1.0

DIGITALTEKNIK. Laboration D161. Kombinatoriska kretsar och nät

Bruksanvisning Varmkanalstyrning KT300S

Tentamen i Elektronik - ETIA01

Laborationskort - ML4

1. PRESENTATION SÄKERHETSFÖRESKRIFTER Säkerhetsföreskrifter Användningsvillkor BESKRIVNING AV INSTRUMENTET...

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

Styrning från telefon. Styrning mellan två Robofonsändare. Styrning via SMS. Styrning via dator

Datorprojekt, del 1. Digitala system 15 p

Transkript:

Konstruktionsbeskrivning samt programmeringsförslag för en digital enhet till en talmaskin KTH Syd 2001 Grupp 10

KTH Syd Haninge Sid 2 av 42 KTH Kampus Haninge Våren 2001 Tema: Titel: Digitala system 4p Konstruktionsbeskrivning samt programmeringsförslag för en digitalt enhet till en talmaskin Deltagare: Grupp 10 Thomas Kihlberg (projektledare) Thomas Carlsson Göran Lindgren Mohammad Manouchehr Sandra Öberg Datum: 2001-05-28 Handledare: Examinator: Jean-Pierre Leibig Jean-Pierre Leibig

Abstrakt Grupp 10 Ditama 2 2001-05-29 KTH Syd Haninge Sid 3 av 42 Rapporten är riktad till ingenjörer med elektrotekniskt kunnande och innehåller en beskrivning av hur den digitala enheten, samt en fjärrstyrning till en digital talmaskin kan konstrueras. Rapporten innehåller beskrivningar av varje enskild del. samt även hela konstruktionen. För att enkelt kunna förstå programmeringen bifogas programtexten som styr fjärrkontrollen och huvudenheten. Läsaren finner även utprovningsresultat, kostnadskalkyl samt för att få bästa möjliga konstruktion av maskinen ges också ett antal konstruktionsråd i slutet av rapporten. Ett kapitel behandlar miljöaspekten i konstruktionsarbetet. Rapporten innehåller även en lista över olika ändringar som kan göras i konstruktionen för att ge användaren möjlighet till egna modifikationer.

KTH Syd Haninge Sid 4 av 42 Innehållsförteckning ABSTRAKT...3 INNEHÅLLSFÖRTECKNING...4 INLEDNING...5 BAKRUND... 5 UPPGIFT... 5 MÅL... 5 MÖJLIGA LÖSNINGSMETODER... 5 GRUPPENS LÖSNINGSMETOD... 5 KONSTRUKTIONEN OCH B ESKRIVNING AV DESS B ESTÅNDSDELAR...6 HUVUDENHETEN... 6 Allmänt... 6 Samspelet med analogdelen... 7 Analog till digital omvandling... 8 Digital till analog omvandling... 9 Minne... 10 PIC för styrning av huvudenheten... 11 Räknare... 11 Display... 11 IR-ENHETEN... 12 PIC för styrning av IR (sändare)... 12 Mottagare... 12 PROGRAMMERING... 13 Huvudenhetens program - allmänt... 13 Beskrivning av huvudenhetens program... 13 Initiering och skrivning till LCD... 13 Beräknandet av timerinställningen i inspelningen och uppspelningen och dess funktion... 13 Inspelnings och uppspelningsfunktionen... 14 Delayfunktionen och dess beräknande... 14 Fjärrkontrollens program... 14 KRETSKORTLAYOUT, ETS NING OCH MONTERING...15 MÖJLIGHET TILL MODIFIKATIONER...16 Jumper... 16 Två minnesareor... 16 Klockhastighet... 16 Reglage... 16 Framdragning till PIC:en... 16 MILJÖ OCH ÅTERVINNING...16 SLUTSATS...17 INDEX...18 REFERENSER...19 APPENDIX...20

KTH Syd Haninge Sid 5 av 42 Inledning Bakrund Det projekt som denna rapport baseras på är det sista av två som ingår i konstruktionen av en digital inspelningsmaskin (nedan kallat DITAMA ). Detta konstruerande har gått som en röd tråd igenom KTH Syds elektroingenjörers utbildning. Första årets DITAMA - projekt grundade sig på den analoga delen av den digitala talmaskin medan årets projekt är inriktat på digitaldelen i nämnda maskin. Vi har under andra studieåret därför fördjupat oss i digitalteknik som komplement till första årets kurser i programmering, ellära, mät- och simuleringsteknik samt analog elektronik. Dessa kurser har förberett oss för att kunna genomföra projektet. Arbetet med konstruerandet har löpt över fyra veckor effektiv tid, vilket motsvarar en högskolekurs på fyra poäng. Rapporten är skriven så att en tekniker ska kunna reproducera produkten. Digitaldelen och tillhörande dokumentation lämnades in till beställaren den 28 maj 2001. För att konstruktionen ska godkännas så krävs att den uppfyller en av beställaren godkänd kravspecifikation (se appendix). Uppgift Gruppens uppgift har varit att genomföra planering, montering av den digitala delen i den digitala talmaskinen samt att programmera mikrokontrollern. Denna konstruktion ska uppfylla vissa krav som definieras i ovan nämnd kravspecifikationen. Mål För att uppnå det betyg som vi önskar ska kravspecifikationen vara uppfylld och dokumentationen av framställandet vara av hög klass, vad gäller tydlighet och god beskrivning. Möjliga lösningsmetoder För att uppnå målet har vi haft möjlighet att använda den utrustning som finns i KTH Syds lokaler i Haninge. Detta innefattar allt från datorprogram som Pspice, PCBoards, MPLabs och MS Office till mätutrustning och etsningsmaterial. Vi har även haft tillgång till handledare och konsulter för teknisk rådgivning. Gruppens lösningsmetod Projektgruppen valde att använda KTH:s mätutrustning och MPLabs för konstruktion och programmering. PSpice och MS Office användes för framställan av en rapport som skulle ge den tillverkande ingenjören minsta möjliga arbetsinsats för att producera produkten. Gruppen valde att etsa kretskortet för att skapa en enkel miljö att löda i och få en lättöverskådlig layout. Vi delade upp uppgifter som konstruktion, layout och ekonomi mellan gruppmedlemmarna.

KTH Syd Haninge Sid 6 av 42 Konstruktionen och beskrivning av dess beståndsdelar Huvudenheten Allmänt Under arbetet har ett antal olika parametrar styrt konstruktionsvalet. Dessa parametrar har i första hand varit: Priset: Att använda billiga kretsar och tillämpningar som kräver få speciallösningar. Funktionellitet: Att bygga en maskin som är lätt att förstå, serva och skriva program till. Storlek: Använda så få kretsar som möjligt för att kunna minimera kretskort och kabeldragning samt förenkla felsökningen. För att göra detta har flera olika lösningar utvärderats. Bland de mer raffinerande lösningarna kan adresserade vippor, dubbla mikrokontrollers (nedan benämnd PIC) och PAL- kretsar nämnas. Adresserade vippor ansågs dock för krångligt och skapade ett långsamt program och dubbla PIC:ar blev för dyrt och dessutom för krångligt vid programmeringen. PAL- kretsar blev onödigt dyrt tillsammans med PIC:en och för omständigt att använda utan PIC. Att vi valt att göra en lösning med IR- styrning beror till stor del på att vi på detta sätt ville skilja oss lite från andra grupper och att det var en spännande teknik att sätta sig in i. För den hårdvarulösning vi valt ligger följande grundtanke bakom: att via den ena porten (port A på PIC:en) adressera de olika kretsarna. att via den andra porten (port B på PIC:en) skicka instruktioner och information. att inte bygga konstruktionen så att den blir svår att modifiera. Detta är speciellt viktigt om konstruktören vill vidareutveckla den med t.ex. möjlighet att spela in fler meddelanden. att alltid låta minnet vara aktivt så fort analog- digital konverteraren (A/D) eller digitalanalog konverteraren (D/A) är aktiv. Detta underlättar dessutom när minne, D/A och A/D önskas vara passiva. att låta aktivering av A/D- alt. D/A- konverteraren automatiskt aktivera de relevanta kretsarna.

KTH Syd Haninge Sid 7 av 42 Samspelet med analogdelen Vi bestämde oss tidigt för att ändra så lite som möjligt i den befintliga analogdelen. En ändring har dock blivit nödvändig: att se till att digitaldelen alltid har spänning. Detta åtgärdades enkelt med att ersätta ett motstånd med en bygling. För att aktivera in- och uppspelningsstegen på analogdelen krävs dels en spänning på 5V så länge matningen ska fortgå, men också en annan signal ger en kortvarig triggpuls mot jord och startar upp den del som skall användas. För att åstadkomma den kortvariga pulsen som aktiverar valt steg används de aktivt låga signaler som också aktiverar A/D resp. D/A omvandlarna. Själva omslaget tas till vara via en kondensator som får ladda ur en annan kondensator som, via ett motstånd, laddas upp (bild 1). Storleken på detta motstånd och kondensatorerna bestämmer pulsens längd. Resultatet har nått med empiriska försök. Den signal som behövs för att hålla analogdelen igång tas från ChipSelect 2 (CS2) på minneskretsen. Bild 1 Uppladdningsförlopp och krets

KTH Syd Haninge Sid 8 av 42 Analog till digital omvandling En AD- omvandlare används för att konvertera en analog signal till digital form. I vårat fall är det signalen från mikrofonen som skall konverteras för att möjliggöra lagring i det digitala minnet. En analog signal har oändlig upplösning, men vid konvertering måste en begränsning ske. Detta beskrivs närmare i vår rapport från kursen Infomet 1999. Vi har valt att använda en 8- bitars omvandlare, ADC0804, tillverkad av Harris Semiconductor. Den använder sig av en extern klocka och ursprungligen har vi försökt komma fram till rätt frekvens med en RC- länk. Enligt databladet tar en fullständig sampling 65-69 klockcykler. Det ger att externa klockans frekvens måste vara minst 69 gånger högre än vad önskad samplingsfrekvens är för vår produkt. Vi använde oss av en samplingsfrekvens på 8 khz vilket betyder att RC- länkens frekvens måste vara minst 552 khz (se appendix A1). Det är inte alltid att det beräknade värdet stämmer överens med den verkliga frekvensen i den färdiga länken. Med våra valda komponenter blev det beräknade värdet blev ca 606 khz, alltså över den minsta tillåtna frekvensen. Efter kontrollmätning i den färdiga kopplingen visade det sig att verkliga värdet hamnade på 462 [khz], alltså under gränsvärdet. Eftersom frekvensen var oregelbunden och inte gav den prestanda som vi behövde valde vi istället att använda oss av en frekvens på 1MHz direkt från kristallen. För att AD- omvandlaren skall vara beredd att börja arbeta måste den först bli aktiverad. Det blir den genom att den får en signal till /CS från PIC:en. För att utgångarna skall bli aktiva krävs också att Read (/RD) aktiveras. Vi har löst det genom att koppla ihop /CS och /RD. Det finns olika sätt att styra AD- omvandlaren på. Ett sätt är att låta PIC:en tala om när den skall konvertera den inkommande signalen genom att skicka en signal till Write (/WR). Vi har valt ett annat sätt som kallas freerun eller stand alone mode. I freerun kopplar man ihop /WR och Interupt (/INTR). Då ligger AD:n ständigt och läser av samt konverterar. Konverteringen startas av en puls till /WR som kommer från PIC:en och när omvandlingen är klar skickar /INTR en signal som aktiverar /WR igen. När PIC:en har startat freerunnen gör vi om RB6 till en ingång för att PIC:en inte ska störa AD:ns arbete (bild 2). Bild 2 A/D:ns koppling till PIC

KTH Syd Haninge Sid 9 av 42 Digital till analog omvandling Den D/A omvandlare som vi har valt att använda är av typen TLC7524 som är en åtta bitars omvandlare med CMOS- teknologi. På liknande sätt som en A/D- omvandlare konverterar en analog signal till digitalt format, gör en D/A- omvandlare om en digital signal analog form. Processerna skiljer sig dock en aning från varandra. D/A:n konverterar kontinuerligt det som finns på dess ingångar. Eftersom vi i A/D- och D/A- omvandlingen har vissa begränsningar så kan inte den återskapade signalen bli exakt vad den var innan. Om den D/A omvandlade signalen visas på ett oscilloskop kan man uppfatta den som en aning kantig. I vår analoga del ligger dock ett lågpassfilter som rundar av signalen (bild 3) Bild 3 Signalens avrundning genom lågpassfilter Genom att koppla D/A- omvandlare på olika sett kan man välja hur du vill ha ut den analoga signalen. TLC7524 är anpassad för att leverera ut den konverterade signalen som en ström, men vi vill ha ut en spänning som motsvarar den spänning vi skickade in i A/D- omvandlaren. För att få detta kopplar man TLC7524 inverterat: dvs. där man i normala fall skulle få ut sin ström kopplar vi in vår referens spänning och vår konverterade spänning tar vi ut där referens spänningen skulle ha varit. Vår utsignal kopplade vi till en spänningsföljare för att ge den konverterade utsignalen en större effekt. Fördelen med detta är att inte D/A omvandlaren blir överbelastad. Mätningar visade dock att utsignalen var aningen låg så vi kopplade om spänningsföljaren till en förstärkare med två gånger förstärkning. Kretsen aktiveras genom att PIC:en skickar en aktiv signal till /CS. För att starta konverteringen skickas ytterligare en signal från PIC:en fast denna gång till /WR.

KTH Syd Haninge Sid 10 av 42 Minne Som minneskrets har vi valt K6T1008C2E som är ett CMOS SRAM på 1Mb RAM. Detta innebär bland annat att minneskretsen är strömsnål. Kretsen tillhandahölls av beställaren och vi förutsatte att beställaren ville att konstruktionen skulle innehålla detta minne. Adressingångarna kan delas upp i två minnesbanker vilket, genom några programändringar, skulle kunna ge möjlighet att spela in två meddelanden á åtta sekunder var. Detta sker genom att på adresserarna A0- A15 bestämmer minnesplatser för det första meddelandet och sedan ändras port A16 från nolla till etta och därefter skrivs återigen samma adresser A0- A15. I denna konstruktion har vi dock valt att utnyttja hela minnet för ett meddelande på c:a sexton sekunder. Bild 4 Port A16 betydelse för bestämning av minnesplats

KTH Syd Haninge Sid 11 av 42 PIC för styrning av huvudenheten PIC16F84 är den mikrokontroller som vi valt för styrning av huvudkretsen. Den har en stack med åtta nivåer, vilket programmeraren av PIC:en måste tänka på, eftersom endast åtta funktioner i rad kan anropas. Den är av RISC- typ (Reduced Instruction Set Computer) och kan endast hantera 35 olika kommandon. Dessa kommandon beskrivs i kretsens datablad. Den har bland annat 64 bytes EEPROM, 13 I/O pinnar samt en inbyggd timerkrets. Den inbyggda timern och EEPROM skapar en bättre konstruktionsmiljö, eftersom man behöver färre externa komponenter. Eftersom vi valt mikrokontrollers från Microchip har vi använt deras program, MP Labs, att skriva programmet och simulera i. Denna specifika PIC har valts för att den har rekommenderats oss och att tidigare laborationer med den har gett goda erfarenheter. Räknare I konstruktionen använder vi tre räknare av två olika sorter: en fyrabitars- (4029) och en tolvbitars binärräknare (4040). Den ena fyrabitars räknaren används vid neddelning av kristallens frekvens och den andra samt tolvbitars räknaren till att räkna fram minnesadresser. Fyrabitars räknarna saknar nollställningsingång, men har istället en förinställningsfunktion som används vid nollställning av räknaren. Tolvbitarsräknaren har en nollställningsfunktion. Vid användning mot minnet är räknarna kaskadkopplade, det vill säga att CarryOut på fyrabitarsräknaren är kopplad till klockpulsingången på tolvbitarsräknaren. Bild 5 Räknarnas kaskadkoppling Display Displayen som används tilldelades oss av beställaren och vid samma tillfälle erhölls ett datablad varifrån informationen om displayen erhållits. Den har två rader om vardera sexton tecken och det finns kontrastinställning vilken matas mellan 0-5V. Informationen i form av bokstäver och kommandon skickas via de fyra övre databitarna, trots att det egentligen finns åtta bitar att använda. Detta görs för att det inte finns tillräckligt med pinnar mot PIC:en.

KTH Syd Haninge Sid 12 av 42 IR-enheten PIC för styrning av IR (sändare) Även till fjärrkontrollen har vi använt en PIC. Det är också en microkontroller från MicroChip, men en mindre än till huvudenheten. Fördelen med att gå ner i storlek är framförallt priset. 12C508 kostar ungefär hälften av vad 16F84 kostar. En annan viktig fördel är att den drar extremt lite ström i viloläge, vilket är intressant i sammanhang där man driver den med batterier och då den till största delen av tiden ligger i standby. Den har inte riktigt samma kommandon som 16F84, men är fortfarande av RISC typ. Stacken är har endast två nivåer och vid uppvaknande från viloläge nollställs kretsen. I nuvarande konfiguration är det den interna 4MHz klockan som används. Det finns möjlighet att använda extern klocka, men då försvinner en av bitarna på I/O- porten. Även MasterClear (/MCLR) tar en portbit, men här har ändå valts att dra ut den. Mottagare Mottagarkretsen är uppbyggd runt en avstämd IR- sensor som har inbyggd komparator och förstärkare som släpper igenom ljus på en moduleringsfrekvens av omkring 38 khz. Själva kretsen är kopplad enligt den rekommenderade kopplingen i kretsens datablad. Utsignalen är på 5V, men sjunker ner till 0V under en kort tid när signalen tas emot. Oberoende hur lång signalen är, så är den endast 0V en kort specifik stund. Signalen skickas sedan vidare till en OCH- grind där utsignalen slutligen hamnar på PIC:ens RB0/INTR. Signalen skickas även till RA4 på PIC:en, till vilken PIC:ens interna timer är kopplad. Andra IR- sensorer utvärderades, men mottagningsegenskaperna hos dessa var ej tillfredställande.

KTH Syd Haninge Sid 13 av 42 Programmering Huvudenhetens program - allmänt Konstruktionen innehåller flera digitala kretsar med behov av styrning av funktioner och aktivering vid skilda tillfällen. För att lösa detta komplexa problem med många olika uppgifter har vi använt mikrokontroller vilket inneburit en hel del programmering. Vi har valt att skriva programmen direkt i Assembler för att få en effektiv och slimmad kod. Ett alternativ till detta var att skriva i till exempel C, som visserligen ger en enklare programmeringsmiljö, men där instruktionerna samtidigt tar mycket av PIC:ens minne. I nedanstående beskrivning avser vi att förklara våra tankar bakom programkonstruktionen och särskilt genomtänkta lösningar som läsaren bör lägga extra uppmärksamhet på. Hela programmet finns i appendix till rapporten om läsaren vill fördjupa sig i detaljer. I appendix finns även ett kopplingsschema som rekommenderas för att på ett tillfredställande sätt kunna följa beskrivningen. Beskrivning av huvudenhetens program Huvudtanken är att aktivera kretsarna som ska styras med hjälp av bitarna på port A och skicka informationen/instruktionerna med hjälp av port B. Därför ligger aktivering av LCD, inspelningskrets samt uppspelningskrets på port A. Minnet aktiveras via in- och uppspelningskretsarna vilket görs för att kunna inaktivera alla kretsar samtidigt och förenkla programmeringen. Programmet är skrivet för en klockfrekvens på 1MHz och ska denna ändras ska fördröjningen justeras så att de fortfarande har samma faktiska längd i tid. Detta för att säkra samplingshastigheten och kommunikationen med de kretsar PIC:en styr. I huvudfunktionen utförs initiering av PIC:en och LCD:n samt en utskrift av ett hälsningsmeddelande. Programmet försätter därefter PIC:en i vänteläge genom via funktionsanropet CALLSLEEP. Vid avbrott, dvs. ett tryck på REC eller PLAY knappen, vaknar kretsen och anropar avbrottsrutin. Därefter anropas olika funktioner beroende på vad som skall göras. På så sätt ges instruktioner för både in- och uppspelning. Initiering och skrivning till LCD V id initieringen av LCD displayen har vi följt displayens datablad där fullständigt instruktioner erhållits. Vi har, som tidigare nämnts, valt fyra bitars kommunikation samt att skriva på två rader och att inte ha någon synlig markör. Instruktioner och text som ska skickas finns lagrad som åtta bitars information i funktionen MTEXT. En annan funktion, SEND8, hämtar informationen i MTEXT och gör om det till fyra bitars information och skickar den vidare till displayen via funktionen SEND4. Beräknandet av timerinställningen i inspelningen och uppspelningen och dess funktion. Kretsen jobbar med ett samplingsintervall på 8kHz av inspelat ljud. För att hålla detta måste programmet ha en funktion som håller reda på när nästa sampel skall tas. Det finns en timer i PIC:en som kan kopplas till de interna klockcyklerna. Timern ger ett avbrott när den slår om från 255 till 0 och detta används av kretsen för att klocka samplingen. Det tar dock för lång tid att vänta ett helt varv på timern och därför prepareras den med ett startvärde och förkortar på så vis den tid det tar för timern att nå avbrott. Beräkningar för hur startvärdet räknas fram finns i appendix.

KTH Syd Haninge Sid 14 av 42 Inspelnings och uppspelningsfunktionen Vid inspelning och uppspelning sätts ett utgångsvärde på port B som gör det möjligt att skriva i/läsa från den första av minnets två minnesbanker. Dessutom förbereds adressräknaren för att nollställas genom att sättas aktiv. OutputEnable(/OE), WriteEnable (/WE) på minnet samt Write(/WR) på D/A och A/D blir inaktiva. Vid inspelning sätts ett utgångsvärde på port A vilket gör att minnet och A/D aktiveras. Vid uppspelning sätts ett utgångsvärde på port A, vilket i sin tur gör att D/A och därmed minnet aktiveras. Vid denna tidpunkt är de andra kretsarna inaktiva. Efter att kretsarna har initierats skickas en signal till räknaren som då blir nollställd. /WR på A/D :n resp. D/A :n aktiveras beroende på om det gäller in- eller uppspelning. Därefter går programmet in i en funktion, SAMPLA, som skriver till/läser av minnet då det har blivit timeravbrott och går sedan ett steg framåt med adressräknaren. Detta görs 256 gånger och därefter skiftas till den andra minnesbanken och samma loop görs 256 gånger till. Sedan avaktiveras de kretsar som använts och meddelandet Du har ett meddelande skrivs ut på displayen. Då inspelning eller uppspelning pågår tillåts inte avbrott från RB0/INTR, däremot ett timeravbrott som anger när vi ska skriva till/läsa från minnet. Delayfunktionen och dess beräknande Vid mottagningen av IR- signaler använder vi timern till att beräkna inkommande pulser och kan därför inte använda den på det smidiga sätt som i fallet med samplingen. Vi behöver dock ett tidsbestämt uppehåll i programmet för att kunna samla in signaler och använder till detta en nedräkningsloop, IRDELAY, med variabel. För att se hur beräkningarna utförts hänvisas till appendix. Fjärrkontrollens program Även i IR- sändaren finns ett program, även om detta är betydligt mindre och enklare till sin utformning. Programmet innehåller en huvudfunktion som avgör om en PLAY - eller RECsignal ska skickas och efter utfört kommando sätts kretsen i viloläge. Vid knapptryckning återställs kretsen varvid programmet börjar från början.

KTH Syd Haninge Sid 15 av 42 Kretskortlayout, etsning och montering Kretskortlayouten till digitala enheten gjorde vi med hjälp av programpaketet Design Lab. För att kunna rita vårt signalschema använde vi oss av Schematics som ingår i nämnda programpaket. Det färdiga schemat används sedan för CAD underlaget. Eftersom vi använde många olika komponenter fick vi lägga in bibliotek med just de komponenter som kretsen behövde. I de fall där komponenten inte existerade, skapades ett eget bibliotek där vi ritade och gav komponenterna specifika egenskaper som pinnamn, komponentnamn och kapselegenskaper. Med ett färdigställt signalschema gick vi över till PCBoard (Printed Circuit Board) och påbörjade arbetet med att komponentplaceringen. I programmet finns bland annat en funktion som omdirigerar banor och skapar genomgångshål mellan de olika lagren på kretskortet. Autoroute, som funktionen kallas, måste föregås av inställningar för kortets kopparbanor. Med den färdiga komponentplaceringen började vi skapa ett enkelsidig kretskort, men efter upprepade tester och konsultationer ledde utvecklingsarbetet till ett dubbelsidigt kort, producerat genom etsning. För etsningen använde vi en kemisk metod med som går till på följande sätt: Etskortet belyses genom en OH- film som är utskriven med hjälp av PCBoards. Efter belysning med UV - ljus i ca 20 min på var sida (dubbelsidigt) läggs kortet i framkallare, som tar fram strukturen som fanns på OH- filmen. Därefter läggs kortet i etsbad som löser upp kopparytan på de ställen där det inte finns struktur, det vill säga de områden som är belysta. När kortet sedan är klart så återstår borrning av övergångarna mellan över- och undersidan. För att sedan få god kontakt mellan över och undersida krävs att lodet fäster på kopparytan på var sida samt vid den förbindelselänk som är satt i hålet. Vi etsning märkte vi att vissa kopparledningar inte blev så bra som vi hoppats. Dessa ersatte vi enkelt med vanliga kablar. Trots stora ansträngningar visade det etsade kortet ha vissa brister som gjorde att det inte var användbart. Vid mätningar på olika mätpunkter erhölls ständigt olika värden vilket förmodas bero på felaktigt ritad kortplanering alternativt dålig förbindelse via kopparbanorna. Detta tvingade oss att arbeta med ett experimentkort och dessutom göra om komponentplaceringsschemat manuellt.

KTH Syd Haninge Sid 16 av 42 Möjlighet till modifikationer För att ge framtida konstruktörer möjlighet att göra en personlig konfiguration på digitaldelen är konstruktionen förberedd för olika modifikationer. Det ger också möjlighet att sälja fler modeller med samma hårdvara och produkten blir lätt att uppgradera. Detta är ett utfall av miljötänkande eftersom produkten inte behöver kasseras vid uppgradering. För att följa beskrivningen hänvisas till konstruktionsritningen i appendix. Jumper Jumpern J20 skapar möjlighet att programmera på olika sätt t.ex. att ha A/D i freerun eller att genom mjukvaran ta hand om avbrottssignaler. Två minnesareor Eftersom port A16 på minnesenheten ger valmöjlighet av minnesarea (det finns två minnesareor att välja på) så skapas möjlighet att ha två meddelanden. Denna möjlighet erhålls genom omprogrammering av PIC:en. Detta beskrivs närmare i kapitlet Minne. Klockhastighet Det finns också möjlighet att, genom överbygling, variera klockhastigheten. De klockhastigheter som erbjuds är 4MHZ, 2MHz, 1MHz, 500KHz alternativt 250kHz. Detta ger konstruktören möjlighet att erhålla en snabb, alternativt strömsnål, produkt. Reglage Valet att använda infraröd styrning, samt att inte ha styrknappar på digitaldelen syftar till att inte binda upp sig på ett visst antal knappar eller funktioner. Detta då det oftast behövs en knapp per funktion. Framdragning till PIC:en Strävan har varit att dra fram så många som möjligt av övriga IC- kretsars styrsignaler till PIC:en för att underlätta olika programmerings- och styralternativ av maskinen. Miljö och återvinning Eftersom vår filosofi redan vid produktionen av den analoga enheten var att ha en miljövänlig produkt, avser vi vid produktionen av digitala enheten att ha samma grundinställning. I miljöhänseende har vi på flera punkter lagt ner energi på att skapa en produkt som sparar på resurser. Detta anser vi extra viktigt i en tid där förbrukningen av jordens resurser är alltför hög. Denna grundinställning ger även beställaren av produkten en mycket god marknadsföringsfördel då många kunder idag är miljömedvetna. Vi har tänkt på miljön på följande punkter: Programmering av PIC:arna ger möjlighet för köparen att själv modifiera funktionerna och därmed behöver inte produkten kasseras när användarens behov förändras. Chassit är gjort i trä vilket visserligen kräver en avverkning, men vid återvinning finns möjlighet att återföra en del av produkten i det naturliga kretsloppet. Batteribesparingsfunktion finns genom att digitaldelen arbetar med låg klockfrekvens. Digitaldelen har en väl genomtänkt selektering av kretsar, dvs. endast de kretsar som behövs för tillfället är aktiva. Detta gäller både digital och analogdelen och är också en batteribesparingsfunktion.

KTH Syd Haninge Sid 17 av 42 Slutsats Som avslutning på rapporten vill vi ge andra konstruktörer av vår talmaskin några korta rekommendationer: Om konstruktören tänker använda etsningsteknik så rekommenderar vi att breda banor och stora lödöar används. Det är bättre att, om möjligt, ge dessa parametrar ett högt värde eftersom det underlättar borrning och lödning på kortet. Om möjligt bör ett enkelsidigt kort användas och går inte det så rekommenderas hellre ett experimentkort. Vid etsning bör glasfiberlaminatkortet belysas i cirka 20 minuter och kortet bör ligga i etsbadet i 20 minuter. Vi har i denna rapport beskrivit hur den digitala enheten samt en fjärrstyrning till en digital talmaskin kan konstrueras. Läsaren har i rapporten funnit utprovningsresultat, kostnadskalkyl, rekommendationer samt konstruktionsråd. Ett kapitel behandlade miljöaspekten. Arbetet utfördes på utsatt tid och den kravspecifikation som sattes upp i början av projektet uppfylldes.

KTH Syd Haninge Sid 18 av 42 Index A A/D...6, 7, 8, 9, 14, 16, 23, 29 analogdel...7 Assembler...13 avbrottssignal...16 B Batteribesparingsfunktion...16 bitar...11 C CMOS...9, 10 D D/A...6, 7, 9, 14, 23, 29 Design Lab...15, 19 digital...1, 3, 4, 5, 6, 8, 9, 16, 19, 23 digitaldel...7 DITAMA...5 E EEPROM...11 etsning...4, 15 experimentkort...15, 23 F freerun...8, 16 frekvens...8, 11, 24, 31 funktionen...13, 15 H huvudfunktion...14 I IR-styrning...6 J Jumper...4, 16, 29 K kravspecifikation...5, 23 L LCD...4, 13, 24, 25, 26, 27 loop...14 lågpassfilter...9 lösningsmetod...4, 5 M mikrokontroller...11, 13 minne...6, 10, 13, 23, 24 modifikationer...3, 4, 16 P PAL-kretsar...6 PCBoards...5, 15 PIC...4, 6, 8, 9, 11, 12, 13, 16, 25 port A...6, 13, 14 port B...6, 13, 14 R RAM...10 RISC...11, 12 räknare...11, 24 S signalschema...15 SRAM...10 stack...11 T timer...12, 13, 24 Ö överbygling...16

KTH Syd Haninge Sid 19 av 42 Referenser Böcker Hemert, Lars- Hugo; Digitala kretsar; Studentlitteratur 1996; ISBN: 91-44- 00099-5 Leibig, Jean- Pierre, Digital och datorteknik (kompendium) KTH Syd 2001 Leibig, Jean- Pierre, Projekthandbok för högskoleingenjörsutbildning (kompendium); KTH- IS 1999 Walla, Erik; Så här skriver du bättre tekniska rapporter; Studentlitteratur 1990; ISBN:91-44- 29271-6 Kolodziejski, Piotr; Mönsterkort Lathund, För användning med MicroSim s Design Lab, version 8.(kompendium) Carlsson, Lindgren, mfl.; Analys av digital talmaskin (projektrapport) KTH- IS 1999 Internet (samtliga adresser aktuella 2001-05-28) http://www.elfa.se (datablad och komponentsökning) http://home1.swipnet.se/~w- 87141/Moensterkorttips.html (Mönsterkort) http://www.samsung.com/ (datablad på minneskrets) http://www.microsim.com/ Personliga kontakter Jean- Pierre Leibig, KTH Syd Martin Lindström, KTH Syd Piotr Kolodziejski, KTH Syd Lars Ödling KTH Syd

KTH Syd Haninge Sid 20 av 42 Appendix A1 Beräkningar A2 Kravspecifikation till projektet DITAMA II A3 Programmeringskod huvudenheten A4 Programmeringskod IR- enheten A5 Ekonomisk sammanställning A6 Flödesschema huvudprogram A7 Flödesschema SAMPLA A8 Komponentplaceringsschema A9 Signalschema över hela konstruktionen A10 Signalschema över fjärrstyrningsenheten

KTH Syd Haninge Sid 21 av 42 A1 - Beräkningar Sida 7 552 [khz] = 69 * 8 [khz] För att räkna ut dimensionerna på resistorn och kondensatorn i RC- länken används formeln: f =1/(1,1*R*C). Sida 13 Vi jobbar med en frekvens på 1 Mhz och detta ger en tidsperiod på 1 us vilket ger fyra pulser per instruktionscykel som då inehåller 4us. Med en skaländring på uppräkningen av timern på 1:2 och ett timervarv på 256 cykler så kommer ett varv i timern att ta 256*4us*2 instruktioner/puls = 2,048ms. Vi använder 8kHz sampling, vilket ger en tidsbas på 125us. Delen av ett varv vi vill använda är 125us/2,048ms=0,06 varv Det startvärde vi skall förinställa timern med blir då: 256*(1-0,06)=240 Till detta värde adderas 4, vilket ger 244, för att kompensera för fördröjning i interuptrutinen. Sida 14 Ett genomsnittligt varv i den inre loopen tar tre instruktionscykler. Varje cykel tar 4us => 3*4us=12us. 256 varv ger en fördröjning på 12*256=3,072ms. Vi behöver en fördröjning på 250ms=> 250ms/3,072ms=81,4 varv. Det går dock en viss tid till instruktioner runt själva anropet så fördröjningen sätts till 80 varv. Ett genomsnittligt varv i den yttre loopen tar fem instruktionscykler. Varje cykel tar 4us och 5*4us=20us. Kontrollräkning: 255*12us*80+80*20us=246,4ms=>Godtagbart!

KTH Syd Haninge Sid 22 av 42 A2 - Kravspecifikation till Projekt Ditama 2 Uppgjord mellan Grupp 10 och Jean- Pierre Leibig Deadline Deadline är satt till den 28 Maj 2001 kl. 0800,då skall den färdiga apparaten och dokumentationen kring projektet lämnas till examinator. Den 30 Maj 2001 vid en tid som bestäms senare skall en muntlig presentation av rapporten och maskinen framföras. Formalia Det är obligatorisk närvaro vid gruppmötena. Om du på grund av sjukdom eller annan giltig orsak inte kan närvara skall du snarast ta kontakt med din handledare som beslutar hur du skall hämta in vad som avhandlats på gruppmötet. Projektet skall drivas enligt projekthandboken. (Projekthandbok för högskoleingen 1999) Med följande undantag/förtydliganden/tillägg: Varje gruppmedlem ska föra en individuell tidsrapport från allt arbete som han har gjort under projektets gång. Någon debitering för de timmar gruppens medlemmar använder sker dock inte. Alla färdiga dokument inklusive kallelser, protokoll, tidsplan och tidsrapporter gruppen producerat ska finnas under gruppens projektkonto på Lektor/Nyckeln Tidsplan och tidsrapport ska kontinuerligt uppdateras. Kallelse till uppföljningsmöte: Minst 3 arbetsdagar i förväg. Protokoll från uppföljningsmöte: Högst 5 dagar efter möte. Uppföljningsmöten: Tre stycken, ska inträffa vid slutet av varje fas, fjärde uppföljningsmötet är examination. Redovisning av den gångna perioden ska stå som ständig punkt på varje möte. Varje gruppmedlem rapporterar, gruppen godkänner tidrapporterna. Vid 1:a uppföljningsmötet skall gruppens problemdefinition och mål lämnas till handledaren. Vid uppföljningsmöte 1 bestäms betygsnivå för projektet. Betygsnivån: Det slutliga betyget för projektet kan skilja sig från den betygsnivå som gruppen har kommit överens om med handledaren. Handledare/ examinator gör en totalbedömning varvid hänsyn givetvis tas till: funktionsnivå på talmaskinen kvalitet på arbetet graden av självständighet vid utförandet av projektet. Dokumentationen skall beskriva konstruktionen och den skall kunna användas för att en utomstående ska kunna vidareutveckla ert konstruktionsarbete. Den skall också kunna användas av en tekniker för att förstå er konstruktion. Följande bilagor till rapporten är obligatoriska: Konstruktionsspecifikation inkluderande scheman och textbeskrivningar. Layout, inklusive komponentplacering. Fullständiga komponentlistor. Välkommenterade programlistningar för de ingående programmen.

KTH Syd Haninge Sid 23 av 42 Konstruktion Uppgiften är att slutföra konstruktion och tillverkning av den digitala talmaskin vilken påbörjades förra året. Och innehåller mikrofon, mikrofonförstärkare, högtalarförstärkare med tillhörande högtalare, matningsspänningsaggregat, A/D-, D/A- omvandlare, digitalminne och styrsystem. Den analoga delen från Ditama1 får användas. De ljudlagringskretsar som finns på marknaden får inte användas. Diskreta kretsar för A/D- D/A- omvandlare skall använda. Gruppen skall bygga en fungerande prototyp av en talmaskin som skall klara att: Spela in ett meddelande på ca 16 sekunder, lagra det digitalt, återspela det. När ett meddelande har blivit inspelat ska en display i visa Du har ett meddelande. Till maskinen skall finnas en infraröd styrning. För att konstruera detta erhåller gruppens medlemmar betyget 5 på konstruktionsdelen av projektet. Digitaldelen skall klara att hantera frekvenser på inspelat ljud från 300 till 3000Hz. Inspelningskänsligheten skall räcka till att spela in normalt tal då apparaten ligger på bordet och människan som talar in sitter vid bordet utan att böja sig mot mikrofonen. Avspelningssignalstyrkan skall räcka till så att man tydligt hör vad som spelas upp utan att behöva böja sig mot högtalaren som är placerad på samma sätt som mikrofonen ovan och utan att det måste vara ovanligt tyst i rummet där provet äger rum. DITAMA skall ha batteridrift. Ditaman skall vara så liten som möjligt fast miljö-, test- och reparationskrav skall ha företräde. Kortet skall vara konstruerat så att det skall vara möjligt att felsöka kortet och reparera det. Max komponentkostnad, 1200 kronor inkl. moms, betalas av studenterna.( Analogdel inkluderad) Högre kostnad kan förekomma om speciella lösningar används, dispens från handledare krävs senast vid andra uppföljningsmötet. Konstruktionen skall innehålla en batteribesparingsfunktion. Ett kapitel i rapporten skall behandla hur vi tänkt på miljön vid konstruktionen. Prototypen skall tillverkas/monteras i KTH - Haninges lokaler. Komponenterna skall monteras på ett så kallat experimentkort alternativt ett eget etsat med hjälp av i första hand lödning och annan teknik där lödning är omöjligt. Montering av komponenter och lödning av kortet sker manuellt Ovanstående dokument har upprättats i två exemplar av vilka parterna tagit varsitt. Haninge den 25 April 2001. Ovanstående kravspecifikation godkännes och får icke brytas utan föregående omförhandling. Jean-Pierre Leibig Thomas Kihlberg Examinator Projektledare Grupp 10

KTH Syd Haninge Sid 24 av 42 A3 - Programmeringskod huvudenheten ;Programmet skrivet av E99Grupp10 Maj 2001 ;Är anpassat för en frekvens på 1MHz list p=16f84 ;Adresser till picens register ;indr equ 0 ;indirekt adr tmr equ 1 ;timer pcl equ 2 ;PC lo status equ 3 ;status, flaggor mm ;fsr equ 4 ;F-pekare(index reg) porta equ 5 portb equ 6 ;eedata equ 8 ;data till eeprommet ;eeadr equ 9 ;adressreg eeprommet ;pclatch equ 0A ;PC hi intcon equ 0B ;kontroll trisa equ 85 ;datariktn porta trisb equ 86 ; -"- portb optionr equ 81 ;option register ; Egna konstanter rp0 equ 5 ;bit 5 i status-reg, väljer bank ;används till porta E_LCD equ 0 ;Enable LCD E_AD equ 1 ;Enable AD+minne E_DA equ 2 ;Enable DA+minne ;används till portb Srkn equ 1 ;Stega räknare Rrkn equ 3 ;Reset räknare OE_M equ 4 ;Output Enable Minnet WE_M equ 5 ;Writet Enable Minnet WR_AD equ 6 ;Write AD WR_DA equ 7 ;Write DA ; Variabler i equ D'12' ;indexvariabel tmp equ D'13' ;Sparar w-registret oftast N equ D'14' ;indexvariabel RPFLAGG equ D'15' ;Flaggvariabel för play och rec ;b7=sampltimer,b2=uppsp,b1=insp,b0=run IR dtmp equ D'16' ;Sparar w-registret vid delay inttmp equ D'17' ;sparar intcon-reg start equ D'18' ;kollar om det finns nåt meddelande i2 equ D'19' ;indexvariabel j equ D'20' ;indexvariabel LCD_M equ D'21' ;talar om hur RS och R/W ställs på LCD org 0 ;kommer hit vid reset RESET goto MAIN ; Avbrottsrutin org 4 ;Interruptvektor

KTH Syd Haninge Sid 25 av 42 btfss intcon,2 ;kollar om det är timeravbrott goto IrAvb tmravb bcf intcon,2 ;nollställer interuptflaggan bsf RPFLAGG,7 movlw D'244' movwf tmr RETFIE IrAvb bcf intcon,1 ;nollställer interuptflaggan bsf RPFLAGG,0 RETFIE ;återvänder från avbrottet ;Huvudprogram MAIN call PICINIT ;initsierar PIC:en call LCDINIT ;initsierar LCD:n bsf RPFLAGG,3 ;anger vilket meddelande som ska skrivas ut call LCDMED1 ;skriv VÄLKOMSTMED ut på LCD bcf RPFLAGG,3 clrf start HIT btfsc RPFLAGG,0 ;testar om det är IR-avbrott call IR call PICINIT sleep goto HIT ;Gör ingenting här ; Text som ska visas på displayen. ; Den läses med en CALL där tecknets offset från MTEXT-start ; skall ligga i w-reg vid anropet. MTEXT addwf pcl,f ;hoppa till tecknet som w pekar på Kolla f? SAT1 retlw 'D' retlw 'u' retlw ' ' retlw 'h' retlw 'a' retlw 'r' retlw ' ' retlw 'e' retlw 't' retlw 't' retlw 0 ;markerar slut på sträng SAT2 retlw 'm' retlw 'e' retlw 'd' retlw 'd' retlw 'e' retlw 'l' retlw 'a' retlw 'n' retlw 'd' retlw 'e' retlw 0 ;markerar slut på sträng INIT retlw H'33' retlw H'32' retlw H'28' retlw H'0C' retlw H'01' retlw H'06' retlw 0 ;markerar slut på sträng INSP retlw 'S'

KTH Syd Haninge Sid 26 av 42 retlw 'p' retlw 'e' retlw 'l' retlw 'a' retlw 'r' retlw ' ' retlw 'i' retlw 'n' retlw 0 UPPSP retlw 'S' retlw 'p' retlw 'e' retlw 'l' retlw 'a' retlw 'r' retlw ' ' retlw 'u' retlw 'p' retlw 'p' retlw 0 CREDIT retlw '*' retlw 'A' retlw 'v' retlw ' ' retlw 'G' retlw '1' retlw '0' retlw ' ' retlw 'V' retlw 'T' retlw ' ' retlw '2' retlw '0' retlw '0' retlw '1' retlw '*' retlw 0 ; initiering av portar ; Tillåter avbrott på RB0 PICINIT movlw H'16' ;00010110 movwf porta ;för att undvika ofrivillig drivning av kretsen då trisa sätts clrw ;rensar w-registret bsf status,rp0 ;väljer bank 1 movwf trisa ;porta alla utgångar movwf trisb ;portb alla utgångar bsf trisb,0 ;Gör b0 till ingång clrf optionr ;Avbrott på negativ flank bcf status,rp0 ;återgår till bank 0 bsf portb,wr_ad ;1 på AD movlw H'90' ;Tillåter avbrott på RB0 movwf intcon clrf RPFLAGG RETURN ; Initsierar Displayen LCDINIT movfw intcon ;Sparar det som finns i intcon movwf inttmp clrf intcon ;tillåter inga avbrott

KTH Syd Haninge Sid 27 av 42 clrf LCD_M ;Ställer för instruktion till LCD movlw INIT-MTEXT ;Talar om var initsieringskoden finns call SkrivUt ;Skickar till LCD movfw inttmp ;Återställer intcon (avbrott tillåts) movwf intcon RETURN ; Talar om vart meddelandet finns och anropar SkrivUt Vid INSPELNING & UPPSPELNING LCDMED1 movfw intcon ;Sparar det som finns i intcon movwf inttmp clrf intcon ;tillåter inga avbrott clrf LCD_M ;Ställer för instruktion till LCD movlw H'01' ;Clr Disp call SEND8 movlw H'08' ;Ställer för skrivning till LCD movwf LCD_M btfsc movlw btfsc movlw btfsc movlw RPFLAGG,3 ;Testar för CREDIT-meddelande CREDIT-MTEXT ;Talar om vart meddelandet finns RPFLAGG,E_DA ;Testar för uppspelning UPPSP-MTEXT ;Talar om vart meddelandet finns RPFLAGG,E_AD ;Testar för inspelning INSP-MTEXT ;Talar om vart meddelandet finns call SkrivUt ;Skickar meddelandet till LCD:n movfw inttmp ;Återställer intcon (avbrott tillåts) movwf intcon RETURN ; Talar om vart meddelandet finns och anropar SkrivUt LCDMED movfw intcon ;Sparar det som finns i intcon movwf inttmp clrf intcon ;tillåter inga avbrott clrf LCD_M ;Ställer för instruktion till LCD movlw H'01' ;Clr Disp call SEND8 movlw H'08' ;Ställer för skrivning till LCD movwf LCD_M movlw SAT1-MTEXT ;Talar om vart meddelandet finns call SkrivUt ;Skickar meddelandet till LCD:n clrf LCD_M ;Ställer för instruktion till LCD movlw H'C0' ;byter rad call SEND8 movlw H'08' ;Ställer för skrivning till LCD movwf LCD_M movlw SAT2-MTEXT ;Talar om vart meddelandet finns call SkrivUt ;Skickar meddelandet till LCD:n movfw inttmp ;Återställer intcon (avbrott tillåts) movwf intcon RETURN ; Skriver ut på LCD-display SkrivUt movwf i ;Adressen till meddelandet som ska skrivas ut

KTH Syd Haninge Sid 28 av 42 movlw 2 subwf i ;minskar i med 2 så att vi pekar på första tecknet UtLoop incf i,1 ;ökar i med 1 movfw i call MTEXT ;Hämtar tecknet/instruktionen som ska skickas iorlw H'00' ;Jämför med 0 för att hitta slutet på strängen btfsc status,2 RETURN ;Återgår när man kommit till slutet på strängen call SEND8 GOTO UtLoop ;Hämtar nästa tecken ;Gör om 8-bitars info till 4-bitars info och skickar dessa till SEND4 SEND8 movwf tmp andlw H'F0' ;maskar bort den låga nibblen av bokstaven iorwf LCD_M,0 ;sätter bit 3 så att vi kan skriva till LCD:n call SEND4 swapf tmp,0 ;byter plats på nibblen och lägger resultatet i w andlw H'F0' ;maskar bort den låga nibblen av bokstaven iorwf LCD_M, 0 ;sätter bit 3 så att vi kan skriva till LCD:n call SEND4 RETURN ;skickar 4-bitars info till LCD. Skapar puls på cs på LCD:n SEND4 movwf portb ;Hämtar värde från w-reg och lägger på portb bsf porta,e_lcd ;porta bit 0 sätts till 1 call DELAY bcf porta,e_lcd ;Clear porta bit 0 RETURN ;Väntar ca 2,4 millisekunder DELAY movwf dtmp movlw D'200' movwf N ;N=200 PLOOP decfsz N ;stega ned N, hoppa över om noll goto PLOOP movfw dtmp RETURN ;Dekodning av IR signal ;50-255 pulser => REC ;5-50 pulser => PLAY (om det finns nåt meddelande), IR call INITIR LOOPIR call IrDELAY movfw tmr movwf j sublw D'50' ;50-w btfsc status,0 goto UPPS INS bsf start,0 ;Talar om att det finns ett meddelande call call call REC PICINIT LCDMED RETURN

KTH Syd Haninge Sid 29 av 42 UPPS btfss start,0 ;om 1 så finns det ett medd, RETURN ;ev kan man skriva ett felmeddelande här movfw j sublw D'15' ;15-w om det blir ett negativt tal btfsc status,0 ;skall vi spela upp annars return RETURN call PLAY call IrDELAY call PICINIT call LCDMED RETURN ; Funktion som initierar portar mm i avbrottet tillåter inga nya avbrott INITIR movlw H'00' ;Inga avbrott tillåts movwf intcon ;Interruptinställningar bsf status,rp0 ;väljer bank 1 movlw H'38' ;Räknare till RA4, räknarpå negativ flank movwf optionr bsf trisa,4 ;Gör a4 till ingång bcf status,rp0 ;återgår till bank0 clrf tmr ;nollställer räknaren bcf RPFLAGG,0 ;kvitterar IR-anrop RETURN ;Väntar ca 246 millisekunder. Pulser från Fjärrkontrollen räknas IrDELAY clrf i movwf dtmp movlw D'80' movwf N ;N=80 ILOOP decfsz i goto ILOOP decfsz N ;stega ned N, hoppa över om noll goto ILOOP movfw dtmp RETURN ; Inspelningsfunktion ; Jumper J1 skall vara sluten för att det skall fungera REC bsf RPFLAGG,E_AD call LCDMED1 call INITRP bcf call bcf nop bsf bsf bsf bcf call bsf porta,e_ad ;utgånsvärde på porta. bla chipselect A/D och minnet IrDELAY portb,wr_ad portb,wr_ad ;WR på A/D är aktiv på positiv flank status,rp0 trisb,wr_ad ;Sätter port som ing. för att inte störa 'freerunnen' status,rp0 SAMPLA porta,e_ad ;unenabla A/D

KTH Syd Haninge Sid 30 av 42 bsf bcf bcf status,rp0 trisb,wr_ad ;Sätter porten som utgång status,rp0 RETURN ; Uppspelningsfunktion. PLAY bsf RPFLAGG,E_DA ; Ställer för uppspelning call LCDMED1 call INITRP bcf bcf call bsf porta,e_da ;00010010, utg.v. på porta. bla chipselect D/A,min portb,wr_da ;WR på D/A är aktiv SAMPLA porta,e_da ;unenablar D/A:n RETURN ; Funktion som initierar portar mm i avbrottet tillåter timeravbrott men ej avbrott på RB0 INITRP movlw H'FC' movwf portb ;utgångsvärde på portb bla WR och interrupt i A/D movlw B'10100000' movwf intcon ;Interruptinställningar bsf status,rp0 ;väljer bank 1 movlw B'00000000' ;Timer avbrott, prescaler1:128 movwf optionr bcf status,rp0 ;återgår till bank0 movlw D'240' ;0,06 av 256 movwf tmr bcf portb,rrkn ;Nollställer adressräknaren RETURN ; Sampletugg väntar på nästa sample och stegar upp räknaren SAMPLA clrf j bsf j,1 clrf i clrf i2 LOOPRP btfss RPFLAGG,7 goto LOOPRP bcf RPFLAGG,7 bcf btfsc bcf btfsc bcf btfsc bsf btfsc bsf bsf portb,srkn RPFLAGG,E_DA portb,oe_m ;OE minnet på RPFLAGG,E_AD portb,we_m ;WE på minnet RPFLAGG,E_DA portb,oe_m ;OE på minnet av RPFLAGG,E_AD portb,we_m ;WE minnet av portb,srkn ;stega fram adressen 25-35 nanosek behövs

KTH Syd Haninge Sid 31 av 42 decfsz goto decfsz goto bcf decfsz goto i LOOPRP i2 LOOPRP portb,2 j LOOPRP RETURN END

KTH Syd Haninge Sid 32 av 42 A4 - Programmeringskod IR-enheten ; IR Program till PIC12C508 skrivet av G10 e99i våren 2001 ;två knappar en play en rec ;Inspelningsfunktionen skickar 200 pulser ;Uppspelningfunktionen skickar 80 pulser ;Programmet skrivet för 4MHz klockfreqvens LIST P=12C508 ;Adresser till picens register osscal equ 05 PORTG EQU 06 ;Konstanter PLYGP0 EQU 0 RECGP1 EQU 1 HGHGP2 EQU 2 DIODGP5 EQU 5 ;Variabler nr EQU 07 np EQU 08 X EQU 09 ORG 0 RESET GOTO MAIN MAIN CALL INIT INT BTFSC PORTG,PLYGP0 CALL INTPLAY BTFSC PORTG,RECGP1 CALL INTREC BTFSC PORTG,PLYGP0 CALL INT BTFSC PORTG,RECGP1 CALL INT SLEEP ;Initiering av port INIT movlw b'01000000' option movlw b'01110000' ;Callibrerar inre oscillatorn movwf osscal MOVLW b'00001011' ;Anger utgångar/ingångar TRIS PORTG RETLW 0 ;Funktion som anropas vid tryck på REC-KNAPPEN INTREC movlw D'250' movwf nr ;Varje puls är ½ ms och varje delay oxå, vilket ger en frekvens på 1 khz RLOOP bsf PORTG,DIODGP5 call DELAY ;vänta ½ms bcf PORTG,DIODGP5 call DELAY ;vänta ½ms decfsz nr goto RLOOP ; movlw D'100' ; movwf nr ;IGENR bcf PORTG,DIODGP5

KTH Syd Haninge Sid 33 av 42 ; call DELAY ;vänta ½ms ; decfsz nr ; goto IGENR RETLW 0 ;Funktion som anropas vid tryck PLAY-KNAPPEN INTPLAY movlw D'50' movwf np PLOOP bsf PORTG,DIODGP5 call DELAY ;vänta ½ms bcf PORTG,DIODGP5 call DELAY ;vänta ½ms decfsz np goto PLOOP movlw 2 movwf nr movlw D'200' movwf np IGENP bcf PORTG,DIODGP5 call DELAY ;vänta ½ms decfsz np goto IGENP decfsz nr goto IGENP RETLW 0 ;Fördröjningsrutin. Väntar ½ ms DELAY MOVLW 83 MOVWF X DLOOP DECFSZ X GOTO DLOOP RETLW0 END

KTH Syd Haninge Sid 34 av 42 A5 - PRIS- OCH KOMPONENTLISTA HUVUDENHET Kod Beteckning Artikelnr. Pris/st ******* Monteringskort 48-396-76 41,00 kr C10 Kondensator 10uF 67-117-90 0,30 kr C20 Kondensator 10uF 67-117-90 0,30 kr C30 Kondensator 10uF 67-117-90 0,30 kr C31 Kondensator 4,7uF 67-013-46 0,20 kr C40 Kondensator 2,2uF 67-103-20 0,20 kr C41 Kondensator 68pF 67-158-58 0,80 kr C42 Kondensator 68pF 67-158-58 0,80 kr C50 Kondensator 1uF 65-693-70 0,25 kr C51 Kondensator 1uF 65-693-70 0,25 kr C52 Kondensator 22uF 67-118-16 0,40 kr C53 Kondensator 22uF 67-118-16 0,40 kr C60 Kondensator 47uF 67-013-20 0,20 kr C61 Kondensator 47uF 67-013-20 0,20 kr C80 Kondensator 1uF 67-013-12 0,25 kr C90 Kondensator 10uF 67-117-90 0,30 kr C100 Kondensator 10uF 67-117-90 0,30 kr D60 IR-mottagare ISU 160 75-222-12 37,60 kr D50 Diod D1N4148 Sponsring 0,75 kr D51 Diod D1N4149 Sponsring 0,75 kr IC1 AND-grind 7408 HC08 73-503-17 1,28 kr IC2 INV-grind 7404 HC04 73-502-18 1,28 kr IC3 OP-förstärkare LM324N 73-016-82 1,45 kr IC10 PIC 16F84 **-***-** 40,00 kr IC20 A/D-omvandlare 73-139-68 18,20 kr IC30 D/A omvandlare 73-145-03 16,00 kr IC40 Räknare 4-bitar 73-676-83 7,60 kr IC80 Minne **-***-** 35,00 kr IC90 Räknare 4-bitar 73-676-83 7,60 kr IC100 Räknare 12-bitar 73-549-13 7,60 kr R10 Resistor 10k ohm 60-124-96 0,15 kr R20 Resistor 10k ohm 60-126-11 0,15 kr R21 Resistor 10k ohm 60-126-12 0,15 kr R30 Resistor 2,2k ohm 60-125-39 0,15 kr R31 Resistor 1k ohm 60-124-98 0,15 kr R40 Resistor 10k ohm 60-126-14 0,15 kr R41 Resistor 8,2M ohm 60-129-67 0,15 kr R42 Resistor 2,2k ohm 60-125-40 0,15 kr R50 Resistor 10k ohm 60-124-54 0,15 kr R60 Resistor 47 ohm 60-127-02 0,15 kr R70 Resistor 10k ohm 60-127-03 0,15 kr R71 Resistor 1k ohm 64-361-82 0,15 kr Y1 4,0 MHz kristall 74-515-29 18,70 kr TOTALT HUVUDENHET: 302,58 kr

KTH Syd Haninge Sid 35 av 42 IR-ENHETEN Beteckning Artikelnr. Pris/st S80 Strömst. 1-pol 35-014-59 30,70 kr T80 Transistor BC549C 71-039-71 26,00 kr PIC2 IR PIC 12C508 73-187-02 22,10 kr D80 IR diod IR 204 75-223-60 2,35 kr R80 Restistor 1k 60-054-90 0,15 kr R81 Restistor 1k 60-054-90 0,15 kr R82 Resistor 180 ohm 60-054-09 0,12 kr R83 Resistor 150 ohm 60-053-91 0,12 kr TOTALT IR-ENHETEN 102,11 kr GRÄNSNITT Kod Beteckning Artikelnr. Pris/st ******* Lådor **-***-** 50,00 kr U70 Display **-***-** 80,00 kr P1 HDR20-kontakt 43-667-53 21,30 kr TOTALT GRÄNSSNITT: 189,13 kr TOTALT DITAMA I TOTALT DITAMA II TOTALT PRODUKT 424,00 kr 593,81 kr 1 017,81 kr

KTH Syd Haninge Sid 36 av 42 A6 - Flödesschema Huvudprogram PICINIT LCDINIT LCDMED *AV G10 VT2001* SLEEP AVBROTT IR INITIR IRDELAY Antalet pulser från fjärrkontrollen räknas 51-255 pulser 5-50 pulser Spelar in REC PLAY Spelar upp LCDMED1 LCDMED1 INITRP CS AD CS DA WR AD AKTIV WR DA AKTIV SAMPLA INAKTIVER AD INAKTIVERA DA PICINIT LCDMED Det finns 1 meddelande