Styrecomputer til high end CD-afspiller Kristoffer Jørgensen
|
|
|
- Emil Jessen
- 10 år siden
- Visninger:
Transkript
1 Styrecomputer til high end CD-afspiller Kristoffer Jørgensen Danmarks Tekniske Universitet Februar 2009 IMM-B.Eng
2 INDLEDNING... 3 RAIDHO ACOUSTICS APS... 3 IDÉ OG BAGGRUND... 3 FORMÅL... 3 OVERBLIK... 4 UDVIKLINGSMILJØ... 5 Styrecomputer... 6 CD-drev... 7 Display... 8 EEPROM... 9 INTERFACES... 9 Knapper... 9 CD-drev Display EEPROM KRAVSPECIFIKATION Brugerkrav PLANLÆGNING OG FORLØB ANALYSE OG DESIGN SYSTEMKRAV Betjening Display Setup Standby Sprog SAMMENFATNING AF SYSTEMKRAV PROGRAMSTRUKTUR BRUGERINTERFACE Usecases IMPLEMENTERING OVERBLIK DISPLAY Funktionsoversigt EEPROM Funktionsoversigt KNAPPER Funktionsoversigt CD-DREV Funktionsoversigt FUNKTIONSLAGET Funktionsoversigt KOMMANDOINTERFACE Funktionsoversigt MAIN TEST TESTKONKLUSION PERSPEKTIVERING KONKLUSION LITTERATURLISTE
3 BØGER LINKS TIL INTERNETTET BILAG RUTEDIAGRAMMER Bilag 1 - CDSetup() Bilag 2 - cmdpower() Bilag 3 - cmdplay() Bilag 4 - cmdrepeat() Bilag 5 - cmdstop() Bilag 6 - cmdskipbwd() Bilag 7 - cmdskipfwd() Bilag 8 - cmdeject() Bilag 9 - Update() BILAG 10 - OVERSIGT OVER SIGNALERNES NAVNE I PROGRAMMET OG DERES TILHØRENDE PINS PÅ STYRECOMPUTEREN BILAG 11 - LCD INSTRUKTIONSTABEL BILAG 12 - INSTRUKTIONSTABEL CD-DREV
4 INDLEDNING Raidho Acoustics Aps Raidho Acoustics Aps (herefter Raidho) er en mindre, dansk virksomhed, der laver højtalere til hi-fi entusiaster over hele verden. Raidho laver deres egne højtalerenheder og de har flere patenter på deres produkter. Efter at have høstet stor anerkendelse for deres højtalere, ønsker Raidho at udvide produktionen til også at omfatte forstærkere og CDafspillere. Idé og baggrund Lyd er bestemt ikke kun defineret af hvilke højtalere, der skal gengive den. Lyd er et produkt af samspillet mellem den kæde af led, der bearbejder og transporterer signalet. Denne kæde kan f.eks. bestå af CD, kabler, forstærker, kabler og til slut højtalere. Hver især vil det enkelte led i kæden have sine lydmæssige karakteristika, som bliver føjet til signalet på dets videre vej til lytterens ører. Disse karakteristika kan være så forskellige, at det langt fra altid vil være det dyreste anlæg, der har den bedste lyd. I forbindelse med udviklingen af højtalere, har Raidho stiftet bekendtskab med en større mængde hi-fi udstyr. Deres ambition er at lave apparater, der har de samme lydmæssige egenskaber, som deres højtalere. Formål Formålet med dette projekt er at programmere en styrecomputer, der skal styre de udleverede hardwareenheder, som tilsammen skal udgøre en CD-afspiller. Hardwareenhederne er udvalgt af Raidho ud fra deres lydmæssige egenskaber. Denne opgaves formål er altså ikke at konstruere hardware eller mekanik, men at få de forskellige enheder til at fungere sammen på en overskuelig og hensigtsmæssig måde. 3
5 Overblik Betjeningen af en CD-afspiller foregår ved at brugeren trykker på den knap, der er associeret med den ønskede funktion. Derefter viser displayet på afspilleren information om den nye tilstand og man kan eventuelt høre tilstandsskiftet, f.eks. fra PLAY til STOP. Umiddelbart kunne det se ud som om knapperne er koblet direkte sammen med de funktioner de repræsenterer. Sandheden er selvfølgelig en anden inde i kassen befinder der sig en masse forskellig elektronik; forskellige printplader med kredsløb og knapper, display, CD-drev og strømforsyning, alt sammen forbundet med smalle eller brede kabler. Herunder vises en oversigt over opstillingen af de enheder, der udgør CD-afspilleren til dette projekt og deres indbyrdes kommunikationsveje. På oversigten er strøm- og lydkabler udeladt for overskuelighedens skyld. Display LCD EEPROM CD-drev Styrecomputer Strømforsyning Power Eject Stop << >> Repeat Play/Pause Opstilling af apparatur Printkortet med knapperne er f.eks. en selvstændig enhed, hvis opgave det er at registrere når brugeren trykker en knap ind og videreformidle dette input. Det foregår ved simple elektriske signaler. Signalet fra knapperne skal bruges til at aktivere en funktion i CD-drevet. CD-drevet reagerer kun på kommandoer, der består af to bytes, som skal sendes én bit ad gangen i et bestemt mønster. Altså kan signalet fra knapperne ikke bare sendes direkte til CD-drevet. CD-drevet kan imidlertid ikke kun modtage kommandoer, det kan også selv afsende kommandoer, der indeholder information om tilstand, nummer og tid m.m. Meget af denne information skal vises på displayet, som ikke bare kan modtage og vise beskederne som de er. Derfor er der brug for at få behandlet disse informationer, således at de kan videregives til den rette modtager, i det rette format. Til at varetage denne opgave, skal der bruges en 4
6 styrecomputer, som kan modtage informationer fra de førnævnte enheder, behandle dem og sende kommandoer og data ud til de rette enheder igen. At det hænger sådan sammen, betyder ikke noget for brugeren. For brugeren er det der betyder noget, at den udførte handling og det displayet viser, stemmer overens med det givne input. Hvis brugeren har det indtryk, at knapperne er koblet direkte sammen med CD-drevet og displayet, er det jo bare et tegn på at processeringen foretages på en hensigtsmæssig måde. Udviklingsmiljø CD-afspilleren består af: Printkort med styrecomputer og EEPROM. Styrecomputer og EEPROM er to seperate enheder, men omtales her samlet, fordi de sidder på det samme printkort. DAISy CDPro2LF CD-drev. LCD display med to linjer à 16 tegn. Printkort med 7 trykknapper til betjening af CD. Printkort med strømforsyning til alle hardwareenhederne. Følgende software er benyttet i udviklingen: UltraEdit til programmeringen. C51 (C compiler) fra Keil Software. L51 (Linker) fra Keil Software. Atmel AT89ISP fra Atmel Corporation. Software til overførsel af programmet til styrecomputeren via serielporten. 5
7 Styrecomputer Styrecomputeren som skal afvikle programmet til styringen af CD-afspilleren, bliver lavet af Atmel og hedder AT89S8253. Det er en 8-bit microcontroller med 12 kbytes programhukommelse, 2 kbytes datahukommelse og 256 bytes RAM. AT89S8253 er en af Atmels udgaver af en 8051-microcontroller, som er en meget anvendt type microcontroller til indlejrede systemer. Mange microcontrollere af typen 8051 minder meget om hinanden og det er spørgsmål om detaljer, der kan afgøre om valget falder på den ene eller på den anden. En vigtig grund til at valget er faldet på lige præcis AT89S8253, er at man kan overføre programmet til den via computerens serielport. Mange af disse microcontrollere skal tages ud af systemet og sættes over i et specielt apparat, der kan overføre programmet til den. Sådan et apparat er ikke helt billigt og det er heller ikke nemt at tage microcontrolleren ud af den sokkel, den sidder i. Ved at programmere den via serielporten, kan den blive siddende i det system, hvor den skal fungere. Det sidste giver den store fordel at man bare skal skifte et stik, når programmet skal overføres. En anden god grund til at valget er faldet på netop denne microcontroller er at den kan gå i en form for dvaletilstand, hvor indholdet af RAM bliver gemt og al funktionalitet bliver slukket det eneste, der kan aktivere den igen er et eksternt interrupt, f.eks. et tryk på en knap. Dette er et væsentligt aspekt når man har en CD-afspiller, der ofte er tændt selvom der ikke bliver spillet på den. Her vil styrecomputeren med fordel kunne gå i dvale indtil der igen bliver foretaget brugerinput. I microcontrolleren er der mulighed for at oprette variable som bestemte hukommelsestyper, der ligger i hver deres bestemte del af hukommelsen. Det giver mulighed for at styre hukommelsesforbruget og til en vis grad hastigheden af tilgangen til de variable. De første 128 bytes RAM i microcontrolleren har direkte adressering og der er derfor hurtigere adgang til dem. De efterfølgende 128 bytes er indirekte adresserbare og der er derfor ikke ligeså hurtig tilgang til dem. Hvis man vil styre afviklingshastigheden en smule, kan man derfor erklære meget benyttede eller tidskritiske variable som data. Data variable ligger i den første og hurtigste del af RAM. Den benyttede compiler, erklærer imidlertid også uspecificerede variable som data, så længe der er plads til det. Derfor er det ligeså vigtigt at erklære mindre tidskritiske variable som idata, der så ligger i de sidste 128 bytes af RAM. Der er også mulighed for at gemme data i programhukommelsen, for at spare på pladsen i den mindre datahukommelse. Her kan man kun gemme data, der ikke skal ændres. Nogle compilere gemmer automatisk konstanter (const) i kodehukommelsen. Hvis man vil være sikker på at konstanterne rent faktisk bliver gemt i kodehukommelsen, skal man skrive code først i variabelerklæringen. Variable bør vælges så de fylder mindst muligt i hukommelsen. Til langt de fleste variable er typen unsigned char velegnet, den fylder en byte. Da en char kun kan 6
8 indeholde 256 værdier, skal der til større tal bruges unsigned int som til 8051 består af to bytes og kan indeholde værdier. Der hvor der kun skal bruges en bit, er der i microcontrolleren mulighed for at erklære en datatype, der kun fylder en bit og som hedder bit. For at kunne tilgå en enkelt bit i hukommelsen, skal den være erklæret som en bestemt hukommelsestype: bdata. Bdata har sit eget hukommelsesområde i RAM og størrelsen på det er 16 byte. Der kan oprettes vilkårlige datatyper i bdata, men der er krav om at bdata variable skal være globale. Hvis man vil tilgå f.eks. en bdata char variabels enkelte bit, kan man efter erklæringen af variablen, erklære en eller flere sbits, der kan tilgå en bestemt bit i den erklærede char: bdata unsigned char spi; sbit spi0 = spi ^ 0; sbit spi7 = spi ^ 7; I ovenstående eksempel kan man efterfølgende tilgå både spi og man kan tilgå de enkelte bits (spi0-spi7). Dette udnyttes ved den bitvise kommunikation med EEPROM. CD-drev CD-drevet CDPro2LF, bliver produceret af DAISy (Digital Audio Industrial Supply) som er leverandør til bl.a. Philips high-end produkter. For at kunne læse en CD-skive er der nogle grundlæggende ting et CD-drev skal kunne. Datatætheden på en CD-skive er lige stor, hvad enten man læser yderst eller inderst på skiven, derfor kræves det at CD-skiven kan drejes rundt med variabel hastighed alt efter hvor på skiven der læses. CD-skiver læses indefra og udefter og derfor skal CD-skiven dreje langsommere rundt, jo længere ud på skiven man når. Til at aflæse CD-skiven bruges en laser, som skal styres derhen, hvor man vil læse fra. Det er med andre ord ikke helt så enkelt som med en gammeldags LP og pladespiller, hvor omdrejningshastigheden er konstant og pick-up en bliver styret af den selvsamme rille, som den aflæser. Til at klare ovenstående opgaver, har CD-drevet en indbygget microcontroller, der bl.a. sørger for styring af motoren til CD-skiven og laseren. For ikke at forveksle styrecomputerens microcontroller og CD-drevets microcontroller, kaldes CD-drevets microcontroller herefter for servocontrolleren. CD-drevet har også andre opgaver f.eks. skal den kunne oversætte de digitale signaler til analog lyd. Til dette formål er der indbygget en digital-analog konverter (herefter DAC). Nogen entusiaster vil måske ikke synes at lyden fra denne DAC er god nok og ønsker at sætte en ekstern DAC til. Så skal det digitale signal overføres til den eksterne DAC. 7
9 Det digitale signal bliver overført via en seriel bus kaldet I 2 S (Inter IC Sound), som er specielt designet til overførsel af digital lyd. Noget af det specielle ved I 2 S, er at lyd- og clocksignalet bliver skilt fra hinanden og det skulle give en mere præcis lydgengivelse i sidste ende. Hvordan I 2 S fungerer, går ud over rammerne for denne opgave, men der skal være mulighed for at benytte det. Der findes forskellige indstillinger for overførsel af data via I 2 S og flere af dem understøttes af CD-drevet. Dette giver i første omgang entusiasten mulighed for at forbinde sin egen DAC til CDafspilleren og det giver jo også Raidho muligheden for at lave en sådan model efterfølgende. Ovenstående funktionalitet er som sagt indbygget og vi behøver ikke at spekulere på hvordan det foregår. Vi skal bare kunne betjene det. Til at betjene CD-drevet benytter vi os af at drevets servocontroller er udstyret med et kommunikationsinterface kaldet DSA-interfacet (Data Strobe Acknowledge). Gennem dette interface kan styrecomputeren kontrollere CD-drevet; starte afspilning af CD, indstille hvordan data bliver overført via I 2 S og meget andet. Servocontrolleren skal modtage instruktioner fra styrecomputeren, f.eks. når der trykkes på en knap. Servocontrolleren kan udsende svar, som indeholder information om hvorvidt den ønskede instruktion er blevet udført, eller svaret kan indeholde information om en tilstand i den igangværende funktion er blevet ændret det kan f.eks. være svar med information om aktuelt nummer og tid efterhånden som disse værdier ændres. Servocontrolleren kan altså modtage instruktioner direkte fra brugeren via knaptryk eller instruktioner, som styrecomputeren afsender som en reaktion på information modtaget fra servocontrolleren. Det sidste er f.eks. tilfældet, når det sidste nummer på CD en er færdigspillet og CD-afspilleren er sat til repeat. DSA-interfacet bliver beskrevet indgående i afsnittet interfaces. Display Det valgte display er et standard sort/hvidt lcd-display med to linjer à 16 tegn med hvidt baggrundslys. Displayet er af typen HD44780, som er en de facto standard for hvordan man kommunikerer med displayet. Denne type display er meget brugt i forbindelse med indlejrede systemer. Displayet har to registre: et instruktionsregister og et dataregister. I instruktionsregistret er instruktionerne lagret og i dataregistret er tegnsættet lagret. Der er også mulighed for selv at gemme 8 specialtegn i dataregistret. Det er f.eks. nyttigt, når man gerne vil bruge de danske bogstaver æ, ø og å. Tegnene der vises på displayet ligger i dataregistret som bitmønstre og vises ved hjælp af instruktioner, der peger på tegnenes adresse. 8
10 EEPROM På det samme printkort som styrecomputeren sidder på, er der også en EEPROM. EEPROM er en type hukommelse, der bruges til at gemme data i udstyr som i en periode ikke er tilsluttet strøm. Det er kun de indstillinger man kan ændre, der er behov for gemme i EEPROM, da de faste indstillinger initialiseres ved opstart af CD-afspilleren. Den valgte EEPROM kan gemme op til 512 bytes data. Interfaces For at enhederne kan fungere som et system er det nødvendigt at de kan kommunikere med hinanden. Kommunikationen skal foregå gennem styrecomputeren, der skal dirigere hvad der skal ske. Dette afsnit forklarer, hvad der skal til for at kommunikationen mellem enheder og styrecomputeren kan foregå. Mellem styrecomputeren og de perifere dele er der følgende interfaces: Knapper CD-drev Display EEPROM I dette afsnit gennemgås snitfladerne til de perifere dele. Signallinjerne mellem processor og den perifere enhed beskrives. Til hver enhed hører en specifik protokol, eller opskrift på hvordan kommunikationen mellem den og styrecomputeren skal foregå. Knapper Betjeningsinterfacet til CD-afspilleren består af syv knapper. Ved at trykke på knapperne kan de relevante funktioner på CD-afspilleren betjenes. Input fra de syv knapper bliver overført til styrecomputeren via tre indgangslinjer (But0, But1 og But2), som hver kan være enten 0 eller 1. Der findes også en signallinje Button, der signalerer om en knap er trykket ind. Når der bliver trykket på en knap er Button = 0. Styrecomputerens første opgave er at detektere at der er trykket på en knap. Dernæst skal den afgøre hvilken knap, der blev trykket ind. Dette gøres ved at Button starter en interruptrutine, når den bliver lig 0, som derefter aflæser de tre indgangslinjer og sammenligner signalet med en tabel, hvor én given kombination svarer til én knap. I tabellen på næste side ses bitkombinationerne for de enkelte knapper. 9
11 But0 But1 But2 POWER EJECT STOP FORRIGE NUMMER NÆSTE NUMMER REPEAT PLAY / PAUSE CD-drev Kommunikationen mellem styrecomputeren og CD-drevets servocontroller foregår via et interface, kaldet DSA (Data Strobe Acknowledge). Dette er en asynkron bus, bestående af tre linjer med kommunikation i begge retninger. De data der kan overføres via DSA består af to bytes, hvoraf den første byte er instruktionen og den sidste byte er eventuelle værdier, der hører til den sendte instruktion. Data skal sendes én bit ad gangen. Styrecomputer DSA-interface Servoprocessor DATA: STB: ACK: Bruges til at starte synkronisering og til de data, der skal overføres. Bruges som signal om at DATA er gyldigt. Når STB er lav, så er DATA gyldigt. Bruges til synkronisering og signal om at data eller instruktioner er modtaget. Kommunikationen består af tre faser. 1. Initialisering af kommunikation og synkronisering mellem afsender og modtager. 2. Datatransmission. 3. Godkendelse og afslutning af datatransmission. 10
12 De tre faser foregår som forklaret i det følgende: Initialisering og synkronisering Synkroniseringsfasen består af fire dele og forløber som beskrevet herunder. Til synkroniseringen bruges kun linjerne DATA og ACK. STB holdes konstant = 1. Tallene ud for afsnittene svarer til tallene på figuren under beskrivelsen. 1. Afsenderen giver besked til modtageren om at der er en kommando klar til afsendelse. Dette gøres ved at afsender sætter DATA = Når dette registreres af modtageren, sætter denne ACK = 0, for at give signal om at det er registreret. 3. Når ACK = 0 registreres af afsenderen, sætter denne DATA = Når modtageren registrerer at DATA = 1 sættes ACK = 1. Dette er tegn på at modtageren er klar til at modtage data. Når afsenderen registrerer dette er både afsender og modtager klar til dataoverførslen. Synkronisering mellem afsender og modtager Det kan ske at begge parter forsøger at initiere en dataoverførsel på samme tidspunkt, dvs. at de sætter DATA = 0 og derefter begge venter på ACK = 0. Servoprocessoren har derfor en timerproces, der startes når den sætter DATA = 0 (punkt 1 i figuren) og når tidsgrænsen på 250 ms er overskredet sætter den DATA = 1. Hvis begge parter har forsøgt at starte synkroniseringen samtidig, vil DATA linjen stadig være sat til 0 og servoprocessoren kan fortsætte synkroniseringsprocessen og starte med at være modtager af data. Når datatransmissionen er gennemført, kan den igen forsøge at starte en synkroniseringsproces. Transmission Når synkroniseringen er fuldført, begynder selve transmissionen af data. Her benyttes alle tre linjer. Transmissionen af data kan deles op i fire dele, som hver i det følgende afsnit bliver gennemgået. Figuren under beskrivelsen illustrerer forløbet. Tallene i teksten svarer til tallene i figuren. 11
13 1. Afsender sætter DATA til den bit-værdi, der skal overføres og sætter herefter STB = 0, som et signal til modtageren om at DATA er blevet sat og er klar til aflæsning. 2. Modtageren aflæser DATA og sætter ACK = 0, som et signal til afsender om at DATA er registreret. 3. Når afsenderen registrerer at ACK = 0, sættes STB = Når modtageren registrerer dette, sætter den ACK = 1. Nu er en bit overført og processen gentages på samme måde bit for bit indtil 16 bit er overført. Som afslutning på transmissionen sættes også DATA = 1 af afsenderen. Datatransmission Godkendelse af dataoverførsel Som en enkel kontrol af at DATA er overført korrekt, kontrollerer modtageren om der er blevet modtaget 16 bit. Modtageren giver herefter et signal, der fortæller afsenderen om transmissionen er foregået uden fejl. Hvis der har været fejl i kommunikationen, gensendes kommando og data en gang. Processen kan deles op i fem dele, som i det følgende vil blive beskrevet. 1. Når transmissionen er gennemført, sætter afsenderen ACK = Status for modtagelse sættes: Hvis alle 16 bit er blevet modtaget holdes DATA = 1. Hvis derimod ikke alle 16 bit er blevet modtaget, sættes DATA = Herefter sætter afsender STB = 0, som et signal på at modtagelsesstatus (DATA) er blevet sat. 4. Når afsenderen har aflæst DATA, sætter denne ACK = 1, som tegn på at status (DATA) er blevet registreret. 12
14 5. Til slut sætter modtageren STB = 1 og eventuelt DATA = 1. Godkendelse af datatransmission Nu er kommunikationens tre faser overstået og de to parter kan fortsætte med hver deres opgaver. Hvis der har været fejl i kommunikationen, gensendes kommando og data en gang. Display På figuren herunder kan man se tilslutningerne til displayet. De tre tilslutninger nederst (Vdd, Vo og Vss) er tilslutning til forskellige spændingskilder og vi kan se bort fra dem i den følgende gennemgang af kommunikationen mellem styrecomputeren og displayet. D0-D7, E, RW og RS er 1-bit signallinjer, som styres udefra, dog kan værdierne af D0- D7 aflæses. HD44780 LCD-display I det følgende en gennemgang af de forskellige signallinjer på displayet. D0-D7 er en 8-bit databus, hvor der kan kommunikeres i begge retninger. Her bliver kommandoer og data overført til displayet. 13
15 En smart ting ved displayet er at man også kan nøjes med fire signallinjer til overførsel af data. Det kan være meget praktisk hvis der ikke er nok I/O porte på styrecomputeren. I det tilfælde vil det være D4-D7, der benyttes og kommando og data skal overføres af to omgange. Til dette projekt benyttes alle signallinjerne D0-D7. RW er betydende for om der bliver skrevet til eller læst fra displayet. RW = 0 betyder at der bliver skrevet til displayet. RW = 1 betyder at styrecomputeren aflæser data fra D0-D7. RS står for Register Select. Register Selects værdi er betydende for hvilket register på displayet data bliver skrevet til eller læst fra. RS = 0 betyder at data på signallinjerne skal skrives til eller læses fra instruktionsregistret. RS = 1 betyder at data skal skrives i eller læses fra dataregistret. E står for Enable og den fungerer som et signal, der fortæller displayet hvornår data på signallinjerne er gyldigt. Når man vil skrive til displayet, bliver data indlæst i displayet ved skift fra E = 1 til E = 0. Lidt anderledes er det når man vil læse data fra displayet: her kan data fra signallinjerne aflæses når E = 1 og bliver ugyldigt når E skifter til 0. Her ses et skema, der viser kombinationerne af de forskellige signaler og den betydning de har for hvilken funktion, der udføres. Oversigt over valg af register og læse-/skrivefunktion. RS RW Funktion 0 0 Skrivning til det interne instruktionsregister. Bruges f.eks. til at rydde tegn fra displayet. 0 1 Aflæsning af instruktionsregistret. Bruges til at kontrollere om displayet er klar til at modtage nye data eller instruktioner. 1 0 Skrivning til dataregisteret. Bruges til at skrive tegn til displayet. 1 1 Læsning af dataregisteret. En instruktion til displayet består af den valgte kombination af RS, RW og instruktions- /dataadressen på D0-D7. Hvis det drejer sig om en læsefunktion, kan D0-D7 aflæses nu. Ved skrivefunktioner bliver instruktionen overført til displayet, når E går fra 1 til 0. Før en instruktion overføres til displayet, er det vigtigt at kontrollere at displayet ikke er optaget af at behandle den forrige instruktion. Dette gøres ved at sætte RS = 0 og RW = 1, så man kan aflæse instruktionsregistret. Status aflæses på D7, som er 1 når displayet er optaget og 0 når det er parat til at modtage en ny kommando. Angående det komplette instruktionssæt, se LCD instruktionstabellen i Bilag
16 EEPROM Kommunikationen mellem styrecomputeren og EEPROM foregår via tre signallinjer, der hver kan være enten 0 eller 1 : EENB: Åbner for kommunikation med EEPROM. EENB = 0: Mulighed for kommunikation. EENB = 1: Lukket for kommunikation. SDA: Datalinjen, der overfører selve instruktionen, evt. adresse og evt. data, en bit ad gangen. Sådan som det elektriske kredsløb er sat sammen i dette projekt bliver SDA brugt til både at overføre data til EEPROM og til at læse data fra den. CLK: Dette signal styrer hvornår data-bitten fra SDA bliver overført til EEPROM. Når CLK går fra at være 0 til at være 1, overføres data fra SDA. Selve instruktionen til EEPROM fylder en byte og alt efter typen af instruktion, fylder hele instruktionscyklus en, to eller tre bytes. En WRITE kommando kan dog fylde fra 3 til 18 bytes, hvoraf de 16 udgøres af data. Da der er 512 bytes hukommelse i EEPROM kan man ikke adressere hele adressen med en byte, derfor er der en bit i instruktionsbyten, der kan bruges når man vil adressere den øverste halvdel af adresserne. I dette projekt er der dog kun brug for ganske lidt af hukommelsen og vi benytter derfor kun den egentlige adressebyte. Instruktionsformat EEPROM I skemaet på næste side er der en oversigt over de seks instruktioner til EEPROM. Instruktionerne består af tre bit instruktionskode, som yderst til højre er vist i hexadecimale tal, som skal sendes som det første til EEPROM før resten af instruktionsindholdet. Skrivning og læsning foregår til og fra de af styrecomputeren specificerede adresser. Hvis instruktionen er på mere end en byte, vil byte nummer to altid være adressen. 15
17 Instruktion Handling Bytes Kode WRSR Skriv i statusregistret 2 0x1 WRITE Skriv data til EEPROM x2 READ Læs data fra EEPROM 3 0x3 WRDI Luk for skrivning til EEPROM 1 0x4 RDSR Læs fra statusregistret 2 0x5 WREN Gør EEPROM skriveklar 1 0x6 1. WRSR er den instruktion, der bruges til at beskytte data i specifikke dele af EEPROM mod at blive overskrevet. 2. WRITE er den instruktion, der bruges når man skal skrive data på en bestemt adresse. Først sendes WRITE-instruktionen, derefter sendes den adresse som data skal gemmes på og til sidst sendes data. Der kan afsendes op til 16 bytes data med en WRITE-instruktion. Hvis man sender flere end en byte data sammen med en WRITE-instruktion, skal man kun specificere den adresse hvor den første byte skal gemmes. Adresseregistret tælles automatisk op og de efterfølgende bytes bliver derfor gemt en adresse højere. Når den sidste databyte er sendt afsluttes operationen ved at sætte EENB = 1, herved afsluttes kommunikationen og de overførte data gemmes. 3. READ bruges til at læse data fra hukommelsen. Kommandoen består af instruktionen, adressen og til sidst en databyte, der ved denne instruktion skal læses fra signallinjen SDA. Operationen afsluttes med at sætte EENB = WRDI bruges til at lukke af for skrivning til EEPROM explicit. Bruges ikke så ofte, da der automatisk bliver lukket for skrivningen til EEPROM efter de to skriveoperationer WRSR og WRITE. Blokeringen ophæves med WREN. 5. RDSR læser i status registret om EEPROM er færdig med at behandle den sidste instruktion. Er den det, kan man sende den næste instruktion. 6. WREN gør EEPROM skriveklar. WREN skal sendes før man kan bruge instruktionerne WRSR og WRITE. I det følgende gennemgås en WRITE- instruktionscyklus, som består af instruktion, adresse og data, der hver fylder en byte: EENB = 0 SDA sættes lig den databit, der ønskes overført. CLK går fra 0 til 1 og dermed er værdien fra SDA overført til EEPROM. Overførslen af en byte starter med den mest betydende bit og slutter med den mindst betydende bit. Efter instruktionen er udført sættes EENB = 1. Dette gemmer data og lukker for skrivning til EEPROM. 16
18 EENB CLK SDA EEPROM WRITE- instruktion Kravspecifikation CD-afspillerens primære opgave er at kunne afspille cd ere. For at kunne dette, er der en række krav til apparatet. Denne opgaves formål er at designe og implementere software til styrecomputeren i CD-afspilleren og det er disse krav, der vil blive beskrevet i det følgende. Brugerkrav Brugerkravene til CD-afspilleren er: 1. Betjening. Apparatet skal have følgende funktioner: STANDBY, EJECT, STOP, FORRIGE NUMMER, NÆSTE NUMMER, REPEAT, PLAY og PAUSE. Funktionerne skal kunne betjenes ved tryk på knapperne på fronten. Virkningen af et knaptryk afhænger af CD-afspillerens tilstand. Hvis CD-afspilleren f.eks. er i standby, er det kun tryk på STANDBY, der skal virke. 2. Display. Displayet skal vise relevant information om funktionstilstand og tid. 3. Setup. Apparatet skal have en setup-funktion, hvor man skal kunne vælge sprog, DACindstilling og standby-indstilling. Indstillingerne skal gemmes. 4. Standby. Apparatet skal have en standby-funktion. Apparatet skal have mulighed for at kunne starte op i standby indstilling, når man tænder for strømmen. Alternativt skal apparatet starte helt op og blive funktionsklart, når der tændes for strømmen, hvis standby-indstillingen er sat til det. 17
19 5. Sprog. Som standard skal sproget på displayet være engelsk, men det skal være muligt at tilpasse afspilleren med andre sprog. I dette projekt skal den også kunne vise dansk tekst. Planlægning og forløb I løbet af de 12 uger som projektet varer, er der mange forskellige opgaver, der skal løses. Da projektperioden startede, bestod mit materiale af hardwaredelene til CD-afspilleren samt en oversigt over de pins på processoren, som var koblet til hardwaredelene. Den fysiske opbygning af systemet var således lagt fast. Udviklingen af programmet er foregået på min egen PC og programmet er blevet overført til styrecomputeren via et serielt interface mens den sidder i systemet. At styrecomputeren sidder midt i et system, sammen med hardwareenheder, som den skal kommunikere med, har også haft den konsekvens at debugging og testning er blevet foretaget på hele systemet. En del af de opgaver der skulle løses, var ret stramt defineret, f.eks. af de regler, der gælder for kommunikationen med de perifere hardwareenheder. De kunne jo ikke laves om og kursen for dem var derfor stukket ud. Andre af opgaverne var defineret af brugerkrav, dette gav et friere valg for hvordan de skulle realiseres, blot den ønskede funktionalitet blev opnået. Projektet blev derfor indledt med at jeg skaffede mig al den information om det udleverede hardware som jeg kunne. Materialet var i form af produktspecifikationer, brugermanualer, bøger og websider. Materialet blev sorteret i hvad der var nødvendigt for at få et overblik og hvad der evt. ville være nyttigt senere. Dernæst satte jeg mig ind i reglerne for kommunikationen med de perifere hardwareenheder, så jeg kunne få et overblik over hvilke muligheder og begrænsninger disse medførte. Den valgte microcontroller skulle også granskes, for at finde ud om der var særlige hensyn der skulle tages, eller om der var muligheder, der kunne udnyttes. I næste fase af projektet blev brugerkravene analyseret sammen og holdt op mod de givne vilkår der var for realiseringen af disse. Designet af programmet blev lavet. Testen blev også planlagt her og da den skulle foregå som en samlet systemtest, skulle den tilrettelægges på en sådan måde at alle dele af programmet bliver testet. Implementering og test blev den afsluttende del af projektet. Her skulle det vise sig om det var muligt at få alle ender til at mødes og projektets mål kunne nås. 18
20 Analyse og design Systemkrav Her analyseres de enkelte brugerkrav, for at give et overblik over hvad det er, systemet skal kunne for at opfylde brugerkravene. Brugerkravene analyseres et krav ad gangen og de affødte systemkrav er skrevet op under dem. Der kan være systemkrav, der gælder for flere af brugerkravene. 1. Betjening. Først skal det registreres at der bliver trykket på en knap. Hvilken knap? Evaluering af systemets nuværende tilstand. Må funktionen kaldes fra den nuværende tilstand? Afhængigt af systemets tilstand, skal funktionen udføre forskellige procedurer. Kommunikation med CD-drev, via DSA-interfacet. 2. Display. Der skal kunne skrives til display. Alt efter systemets tilstand, skal forskellig information vises. Der skal kunne vises specialtegn, f.eks. specielle danske bogstaver. 3. Setup. Registrering af knaptryk. Gyldig knap? Reaktion på knaptryk. Læsning fra og skrivning til EEPROM 4. Standby. Læsning fra og skrivning til EEPROM. Indstilling gemmes under punkt 3. Alt efter indstilling, vil der være forskellig reaktion på tilslutning af strømmen. 5. Sprog. Læsning fra og skrivning til EEPROM. Indstilling gemmes under punkt 3. Specialtegn for det valgte sprog, skal kunne vises. 19
21 Udover ovennævnte systemkrav, er der krav om hvordan systemet skal opføre sig, når CD-afspilleren tændes og når den slukkes igen. Her tænkes på i hvilken rækkefølge styrecomputeren tænder for strømmen til forskellige enheder. Derfor skal der være en opstartsprocedure og en nedlukningsprocedure. Sammenfatning af systemkrav Ovenstående systemkrav kan samles i nedenstående punkter, der er klart afgrænsede i forhold til hinanden: 1. Afkodning af tastetryk. 2. Kommunikation med display. 3. Læsning af og skrivning til EEPROM. 4. Kommunikation med CD-drev. 5. Opstart og initialisering af styrecomputer, display og CD-drev samt nedlukningsprocedure. 6. Implementering af den ønskede funktionalitet. Punkt 1-4 drejer sig om kommunikationen med de perifere hardwareenheder. Punkterne er essentielle for at CD-afspilleren kan fungere som ønsket. I punkt 5 og 6 ligger selve funktionaliteten til styrecomputeren. Her træffes funktionsvalg på grundlag af brugerinput, tilstand og information fra CD-drevet. Punkt 5 og 6 benytter de første fire punkter som redskaber til at få den ønskede information og som redskaber til at udføre de funktionsvalg, der er truffet. Programstruktur Programmet tænkes opdelt i forskellige lag, alt efter abstraktionsniveau. I betjeningslaget håndteres interruptfunktionen fra knapperne og brugerinputtet afkodes. I kommando interfacet undersøges kommandoen ud fra den nuværende tilstand. Derefter kaldes de relevante funktioner. I funktionslaget sættes funktionsparametre og systemets tilstand ændres. Herefter kaldes de funktioner, der kommunikerer med hardwaren. 20
22 Ved at dele programmet op i disse lag, får man opdelt programmet i mindre, adskilte programfunktioner. Hver enkelt programfunktion vil have få og specifikke opgaver. Man opnår en højere grad af genbrugelighed af programfunktioner, f.eks. skal Stop() bruges ved betjeningsfunktionerne STOP, EJECT og POWER. Havde Stop() været integreret i STOP-funktionen, skulle koden skrives igen i de andre funktioner. De adskilte programfunktioner giver også et meget bedre overblik over såvel den enkelte funktion, som over hele styreprogrammet. Det letter programmeringen og det er også enklere at teste en mindre og adskilt programenhed. Endelig gør opdelingen det lettere at udskifte dele af program og udstyr, samt at tilføje funktionalitet. Med denne programstruktur er der taget højde for, at der senere kan programmeres moduler til fjernbetjeningsfunktionalitet. Fjernbetjeningsdelen vil skulle bestå af en interruptfunktion til indlæsning og afkodning af signalet fra fjernbetjeningen. Bortset fra indlæsning og afkodning af signalet, tænkes funktionen opbygget på samme måde som interruptfunktionen til afkodning af knaptryk. Brugerinterface Mange CD-afspillere har et utal af knapper og funktioner. Blandt apparaterne i den dyre ende af skalaen går tendensen dog den modsatte vej. Her lader næsten til at gælde en regel, der siger: jo færre, des bedre. Der findes endog CD-afspillere med kun én knap! 21
23 Dette giver dog ikke en mere enkel betjening, men i hvert fald en mere begrænset betjening og man er oftere nødt til at bruge fjernbetjeningen. Raidho har valgt en gylden middelvej og har som udgangspunkt valgt, at der skal være knapper til betjening af de basale funktioner og at eventuel yderligere funktionalitet, skal styres fra en fjernbetjening. I kravspecifikationen er der nævnt otte betjeningsfunktioner og der er syv knapper, altså er der to funktioner, der skal aktiveres ved tryk på samme knap. Her er det naturligt at PLAY og PAUSE sker ved tryk på den samme knap. Det giver jo kun mening at anvende PAUSE, hvis CD en rent faktisk spiller. Ligeledes er det naturligt at man ved tryk på PLAY kan ophæve en pause. Skulle der blive brug for endnu en funktion, kunne man vælge at STOP og EJECT skulle betjenes fra den samme knap. Brugerinterfacet omfatter også setup-funktionen, hvor man kan ændre indstillingerne for sprog, standby og DAC. Disse indstillinger skal der formentlig ikke ændres på særlig ofte og der behøver derfor ikke være direkte tilgang til den i den daglige betjening. Setupfunktionen kan startes ved at holde PLAY trykket ind, når man tænder for strømmen. Usecases Brugerkravene og systemkravene resulterer i nedenstående usecases, som beskriver hvad der skal ske i de enkelte funktioner under brugerkrav, men ikke hvordan det skal ske. Usecase Kommentar Beskrivelse STANDBY Ved tryk på STANDBY skal CD-afspilleren skifte fra standby-tilstand til tændt tilstand eller omvendt. Hvis der skiftes fra tændt til standby, skal det sikres at drevet er lukket og at afspilning af CD er stoppet, inden CD-afspilleren går i standby. Hvis der skiftes fra standby til tændt, skal indholdsfortegnelsen(toc) af CD en indlæses. EJECT STOP Åbne/lukkefunktionen skal implementeres som en statusbit. Skal enten åbne skuffen eller lukke den. Før åbning af skuffen, skal afspilning af CD være stoppet og TOC skal slettes. Når skuffen lukkes skal TOC indlæses. Stopper afspilning af CD. Totalt antal numre og tid skal vises på display. 22
24 Usecase Kommentar Beskrivelse FORRIGE NUMMER Hvis det aktuelle nummer er det første på CD en, startes det forfra. Hvis det ikke er det første, springes et nummer tilbage. Hvis CD-afspilleren afspiller, startes også det nye nummer. Ellers vises nummer og tid for det nye nummer. NÆSTE NUMMER REPEAT PLAY/PAUSE Setup-funktion Standbyfunktion Denne funktion er ikke en del af den daglige betjening og skal derfor ikke være tilgængelig ved almindelig betjeningstilstand. Hvis det aktuelle nummer ikke er det sidste på CD en, springes et nummer frem. Hvis CDafspilleren afspiller, startes også det nye nummer. Ellers vises nummer og tid for det nye nummer. Hvis CD en afspiller, kan man få gentaget hele CD en eller det aktuelle nummer. Ved et tryk gentages hele CD en, et til tryk og det aktuelle nummer gentages. Trykkes der endnu en gang bliver repeat slået fra. Hvis skuffen er åben, skal den lukkes og afspilning af CD startes. Hvis CD en ikke spiller skal den starte afspilning. Hvis den spiller skal den sætte afspilleren i pausetilstand eller ophæve pausetilstanden. Her skal man kunne gemme de indstillinger, man kan ændre på, så de også gælder når CDafspilleren har været slukket. Det er indstillinger for sprog, standby og digitalt output til ekstern DAC. Under hver indstilling kan der skiftes frem og tilbage mellem mulighederne, ved at trykke på to taster og når der trykkes på en tredje vælges den mulighed, der er vist og der springes til næste indstillingspunkt. Til sidst gemmes de valgte indstillinger. Hvis brugeren har slået standby-funktion fra, skal CD-afspilleren starte op i spilleklar tilstand, når der tændes for strømmen. Hvis standby er slået til, skal CD-afspilleren starte op i standby og der skal trykkes på STANDBY for at tænde den. For begge indstillinger gælder det, at man ved tryk på STANDBY kan sætte apparatet i standby og tænde det igen. 23
25 Implementering Overblik I implementeringen af programmet, startede jeg med at programmere kommunikationen med de perifere hardwareenheder. Jeg begyndte med displayet. Grunden til at jeg startede med det, er at når displayet fungerede, så havde jeg en mulighed for se om det jeg efterfølgende programmerede rent faktisk også virkede. Efter displayet fungerede, gik jeg i gang med at programmere EEPROM, som på flere områder minder om displayet. Da jeg nu kunne både skrive til displayet og bruge EEPROM, gik jeg i gang med at få knapperne til at virke. Da disse tre dele virkede, var turen kommet til CD-drevet. Her var det værdifuldt at displayet virkede, så jeg kunne se de beskeder CD-drevet sendte til mig. Efter kommunikationsdelen var programmeret, gik jeg i gang med at lave styreprogramdelen, som binder det hele sammen til en funktionel enhed. Ovenstående er rækkefølgen programmet blev lavet i. Det betyder dog ikke at alle dele var helt færdige, før jeg gik videre til den næste del. Undervejs i projektet er jeg vendt tilbage til noget af det der var programmeret og har ændret i det og tilføjet mere funktionalitet. Det har således været en iterativ proces i det omfang at udviklingen af programmet har afsløret nye krav til programmet eller der har vist sig nye muligheder for at forbedre programmet. Jeg begyndte som nævnt med at lave funktionerne til at kommunikere med hardwareenhederne og dernæst lavede jeg de basale funktioner med hardwarenære ordrer, der benytter sig af denne kommunikation. Disse grundlæggende funktioner skulle fungere som byggesten for resten af programmet. Da rutediagrammerne for programmet blev lavet, opstod der behov for at tilføje funktioner eller ændre i nogle af funktionerne for at designet og strukturen kunne overholdes. Resten af kapitlet beskriver implementeringen mere indgående. Hver enkelt del har sit eget afsnit. Relevante problemstillinger diskuteres og til sidst i hvert afsnit er der en liste over funktionerne med en kort forklaring. Rutediagrammer over mange af funktionerne kan findes i bilagene under deres funktionsnavne og der henvises i øvrigt til dem med bilagsnummer under gennemgangen af funktionen. Funktionsbeskrivelserne er delt op i afsnit, som svarer til den del af programmet de hører til. Beskrivelsen tager udgangspunkt i den rækkefølge som delene blev programmeret i. Mange af funktionerne er bygget op af andre funktioner. Beskrivelsesrækkefølgen gør at næsten alle disse hjælpefunktioner, er blevet beskrevet før de funktioner, der bruger dem. Hvis ikke de er beskrevet, inden man støder på dem som hjælpefunktioner, forklares det kort, hvad deres funktion er. Der er i implementeringen overvejende brugt globale variable af hensyn til afviklingshastigheden. De globale variable er placeret sådan at, der ikke bliver ændret i dem, hvis ikke det ønskede med funktionen opnås. 24
26 Der refereres i beskrivelsen til forskellige globale variable. Disse er forklaret herunder. unsigned char: CMD (command): bruges til at gemme kommandoen fra knaptrykket. SCMD (saved command): bruges til at gemme indholdet af CMD, så CMD kan bruges til at gemme en ny commando. status: bruges til at gemme CD-afspillerens tilstand (0: slukket, 1: tændt, 2: stoppet, 3: afspiller). repeat: bruges til gemme repeatstatus (0: ingen, 1: gentag CD, 2: gentag nummer). bdata bit: NCMD: sættes til 1, når der bliver trykket på en knap. RDS (read stop): sættes til 1, når der trykkes på en knap. Aflæses i funktionen dsard() (DSA read), hvor programmet står og venter på information fra CD-drevet. Hvis RDS = 1, venter programmet ikke på informationen. EJECTF: signalerer om CD-drevet er lukket (0) eller åbent (1). PAUSEF: signalerer om CD-afspilleren er sat på pause (1) eller ikke (0). skipping: sættes til 1, når der springes frem/tilbage mellem numre, når status = 2. Andet: PCON: Power Control Register i styrecomputeren. PD_ (Power Down): dvaleinstruktion, der tilskrives PCON. (PCON = PD_). Display For at tænde og initialisere displayet, er der en særlig rækkefølge tingene skal gøres i. Displayet initialiseres automatisk ved opstart, men hvis man ikke er sikker på at spændingen er oppe på 4,5 volt indenfor 10 ms, skal man selv initialisere displayet for at være sikker på at det er korrekt gjort. CGRAM (Character Generator RAM): Her kan man gemme bogstaverne æ, ø, å og andre specialtegn. Tegnene kan bestå af op til 5 x 8 prikker. Man kan lave dem ved at tegne dem ind i et felt med 5 x 8 pladser. De felter, som stregen går igennem, skal være 1 og de andre skal være 0. De binære tal konverteres til hexadecimale tal og oprettes i et char array, der kan indlæses i CGRAM. På næste side er der vist et lille ø med de tilhørende binære og hexadecimale værdier. 25
27 Bitmønster 5 x 8 prikker Bitværdi HEX værdi F E 0 0 De to øverste linjer er ikke benyttet, men er tiltænkt store bogstaver. Den nederste linje er heller ikke brugt, hvis den benyttes kommer displayets to linjer meget tæt på hinanden og det gør teksten mindre læselig. Der kan gemmes 64 bytes i CGRAM, svarende til 8 specialtegn à 8 bytes. Specialtegnene gemmes fra adresse 0x0 som er den første adresse i CGRAM. Når man skal vise specialtegnene, adresseres de fra adresse 0x0 til adresse 0x7 i dataregistret. Fra adresse 0x20 starter det normale tegnsæt, hvor tegnene ligger på den adresse, der svarer til deres ascii-værdi. Funktionsoversigt Til at styre displayet er der en række instruktioner, som displayet er født med. Instruktionstabellen med disse funktioner findes som Bilag 11. Med dem kan man initialisere displayet og styre hvilke registre man skriver til og læser fra. Instruktionerne styres med de to signallinjer RS og RW og den bitkombination man overfører via databussen. Der er brug for en instruktion, der skal køres en gang som kan initialisere displayet. Til at vise CD-afspillerens tilstand, nummer og tid, skal der bruges funktioner, der kan skrive til displayet, flytte cursoren og slette det der står på skærmen. Først blev de basale funktioner lavet og herefter funktionerne, der brugte disse. Udskrivc( ) bliver f.eks brugt af de funktioner, der udskriver tekststrenge og også af clrlineend( ), der sletter resten af linjen, fra den position cursoren står på. Timedis() formaterer tiden så den vises som timer, minutter og sekunder og kalder derefter udskrivsl( ) for at skrive tidsinformationen ud som en tekststreng på linje 2. Udskrivsl tager sig af at gøre displayet klar til at skrive på linje 2, hvorefter funktionen kalder udskrivc( ) hver gang et af tegnene i strengen skal udskrives, som så tager sig af selve skriveoperationen. 26
28 void lcdpause() Beskrivelse Kort pause. Anvender void clrscr() Beskrivelse Rydder displayet for tegn. Anvender int lcdbusy() Beskrivelse Kontrollerer om displayet er optaget af en tidligere instruktion. Anvender void udskrivc(unsigned char c) Beskrivelse Udskriver et tegn c, hvis der er plads på linjen eller på linjen under hvis der ikke er plads. Hvis det er et af specialtegnene, bliver tegnet erstattet af den adresse det ligger på i dataregistret. Hvis ikke der er plads under gøres ingenting. Anvender lcdbusy() clrscr() void clrlineend() Beskrivelse Rydder resten af linjen fremefter ved at udskrive mellemrum ( ) på resten af linjen. Anvender udskrivc( ). void udskrivs(unsigned char *s) Beskrivelse Udskriver en tekststreng startende fra der hvor adressetælleren er nået til. Anvender udskrivc( ). void udskrivsl(unsigned char *s, unsigned char l) Beskrivelse Udskriver en tekststreng på linjen l, hvis der er l linjer eller flere. Anvender lcdbusy() udskrivc( ) void lcdinit(int length, int lines) Beskrivelse Initialiserer displayet med størrelsen lines x length. Programmet løber igennem instruktioner, hvor displayet indstilles til to linjer, skriftstørrelse 5 x 8 prikker og til at addere adressetælleren med 1, for hver instruktion, der udføres. Herefter indlæses et array af af chars, der indeholder de valgte specialtegn, i CGRAM. Til sidst sættes displayets adressetællere, så det er klart til visning af input. Anvender lcdpause() lcdbusy() void itoa(char *str2, unsigned int i) Beskrivelse Konverterer et heltal til en tekststreng, der viser heltallet. Anvender 27
29 display() Beskrivelse Anvender timedis() Beskrivelse Anvender Viser CD-afspillerens tilstand med tekst på den første linje i displayet. udskrivsl( ) itoa( ) udskrivs( ) clrlineend() Viser timer, minutter og sekunder på displayets anden linje. Hvis der er mindre end 60 minutter, vises bare minutter og sekunder. itoa( ) udskrivsl( ). EEPROM Første gang, CD-afspilleren startes op står der ikke noget i EEPROM. For ikke at komme til at indlæse disse uvisse data ind som indstillinger for sprog, standby og DAC, kontrolleres der for en signatur ( RAIDHO ) på de seks første pladser i EEPROM. Denne signatur gemmes første gang CD-afspilleren tændes. Hvis det er første gang CDafspilleren tændes skal signaturen skrives til EEPROM og standardindstillingerne skal indlæses fra programmet og derefter også gemmes i EEPROM. Funktionsoversigt Til at håndtere styrecomputerens brug af EEPROM, er der brug for en funktion, der kan læse fra og skrive til EEPROM og funktioner, der kan styre håndteringen af de data der skal skrives og læses. Læse- og skrivefunktionen writespi(unsigned char action) benytter sig af muligheden for at kunne tilgå variablen spi som en variabel og som enkelte bits: bdata unsigned char spi; sbit spi0 = spi ^ 0; sbit spi7 = spi ^ 7; Det kan være praktisk at have to niveauer at kunne tilgå variablen på. Bithenvisningen (spi0-spi7) bruges ved den bitvise kommunikation med EEPROM, mens ordrerne fra styreprogrammet overføres til spi som chars. 28
30 void writespi(unsigned char action) Beskrivelse Det er implementeringen af kommunikationsprotokollen til EEPROM. Funktionen læser fra og skriver til EEPROM, afhængigt af argumentet action. Anvender void writesetup() Beskrivelse Gemmer indstillingerne indstillingerne for sprog, standby og DAC på en specifik adresse på EEPROM. Anvender writespi( ) og udskrivsl( ). void readconf() Beskrivelse Indlæser indstillingerne for sprog, standby og DAC fra specifik adresse på EEPROM. Anvender writespi( ), udskrivsl( ) og writesetup(): Knapper I funktionen til afkodning af knaptryk, tildeles CMD (kommandoen) den værdi, der senere aflæses i hovedløkken i main() og NCMD (New Command) sættes til 1. Ligeså snart main() har registreret NCMD = 1 og er gået ind i den gren af løkken, hvor kommandofunktionerne skal kaldes, bliver CMD skrevet til SCMD og NCMD sættes til 0. Så er programmet klar til at registrere endnu et knaptryk, inden det første er færdigbehandlet. På den måde undgås korruption af CMD. For at gøre det lettere, senere at integrere en fjernbetjening, svarer CMD til den værdi den tilsvarende funktionsknap har på en fjernbetjening med RC5-koder. Afkodningen af knaptrykket er lavet som en interruptfunktion, som bliver kaldt når en af knapperne trykkes ind. Funktionen bpause( ) indskydes i starten af funktionen og efter pausen kontrolleres det at knappen stadig er trykket ind. Pausen er nødvendig fordi signalet fra knappen ofte er ustabilt indtil knappen er trykket helt ind. Hermed undgås det at det virker som om knappen bliver trykket ind mange gange, hurtigt efter hinanden. Interruptfunktionen sætter også en variabel, RDS (Read Stop) som lader programmet køre videre fra funktionen dsard() istedet for at vente på ny information fra CD-drevet. Funktionsoversigt void bpause(int n, unsigned char run) Beskrivelse For-løkke, der skaber en kort pause. Anvender void Button(void) interrupt 0 Beskrivelse Interrupt-funktion, der sørger for at registrere knaptryk, afkode det og gemme det i CMD og sætte et NCMD-flag, der signalerer at der er modtaget en ny kommando. Anvender bpause( ) 29
31 CD-drev Når CD-afspilleren afspiller en CD, skal det kontrolleres om der er ny information fra CD-drevet angående afspilningstilstand (nummer og tid). Det er der mindst en gang i sekundet og funktionen bliver hængende i starten af dsard(), indtil CD-drevet begynder sin synkronisering. For at undgå at programmet står stille her og ikke kan modtage brugerinput, skal funktionen kun blive stående her og vente på information fra CD-drevet så længe RDS ikke er sat til 1, som det er tilfældet ved tryk på en af knapperne. Hvis der er trykket på en gyldig knap, vil informationen som drevet skulle sende alligevel være ændret og hvis det er en ugyldig knap, der er trykket på er programmet hurtigt tilbage i dsard() og kan modtage informationen. Funktionsoversigt dsawr() Beskrivelse Anvender dsard() Beskrivelse Anvender Sender instruktioner til CD-drevet via DSA-interfacet. Læser data fra CD-drevet via DSA-interfacet. Funktionslaget Funktionerne i dette lag indeholder de specifikke instruktioner som f.eks. Stop() og Play(unsigned char track), der henholdsvis stopper og starter afspilning. Da brugerinput ofte er sammensat af flere af disse funktioner, er det praktisk at have de specifikke funktioner, som man så kan genbruge, der hvor funktionen er påkrævet. Funktionerne sætter de korrekte instruktioner op og kalder så den relevante funktion i hardwarelaget, der tager sig af kommunikationen med den perifere enhed. Tilstandsvariable ændres til deres nye tilstand. Funktionsoversigt pause(int n, unsigned char run) Beskrivelse kort pause Anvender CDInit() Beskrivelse Initialiserer variable når CD-afspilleren startes. Initialiserer lcddisplay. Anvender lcdinit( ) 30
32 CDSetup() se rutediagram på bilag 1 Beskrivelse Indstillingerne for sprog, standby mode og DAC mode(i 2 S forbindelse) indlæses. Der er mulighed for at ændre på dem. Indstillingerne gemmes. Anvender readconf() writesetup() clrscr() udskrivsl( ) pause( ) udskrivs( ) clrlineend() startup() Beskrivelse Anvender shutdown() Beskrivelse Anvender Tænder først for strømforsyning. Dernæst tændes for 5 volt til CD-drev, hvorefter der holdes en kort pause og 9 volt spænding tændes til CDdrevet. Afspilningsindstilling sendes til CD-drevet. Hvis den ønskede DAC mode (I 2 S forbindelse) er forskellig fra indstilling 1, sendes indstillingen til CD-drevet. clrscr() udskrivsl( ) pause( ) dsawr() dsard() display() Slukker først for 9 volt spænding, kort pause derefter slukkes for 5 volt spænding og til sidst slukkes strømforsyning. clrscr() udskrivsl( ) pause( ) Stop() Beskrivelse Stopper afspilning af CD. Sætter variable til ny tilstand (status = 2, repeat = 0, PAUSEF = 0 og skipping = 0). Viser ny tilstand på display. Anvender ReadTOC() Beskrivelse Anvender dsawr() display() timedis() Læser indholdsfortegnelsen (TOC) på CD en. udskrivsl( ) dsawr() dsard() pause( ) Stop() 31
33 deletetoc() Beskrivelse Anvender Eject() Beskrivelse Anvender PauseT() Beskrivelse Sletter TOC fra CD-drevets hukommelse og nulstiller styrecomputerens egne TOC variable. dsawr() dsard() display() Skifter tilstanden på EJECTF, som indikerer om skuffen er åben eller lukket. Afhængigt af om skuffen åbner eller lukker, slettes eller indlæses TOC. EJECTF =!EJECTF ( skuffefunktion ) deletetoc() ReadTOC() Skifter tilstanden på PAUSEF, som indikerer om CD en er pauset eller ikke. Enten slås pause til eller pausen ophæves. Anvender dsawr() display() Play(unsigned char track) Beskrivelse CD-afspilleren starter afspilning af det nummer som track angiver. Anvender dsawr() clrscr() display() Kommandointerface Kommandointerfacet er formidlingen af brugerinputtet. Kommandointerfacet kalder de funktioner i funktionslaget, som det givne input kræver udfra CD-afspillerens tilstand. Funktionsoversigt cmdpower() se rutediagram på bilag 2 Beskrivelse Hvis CD-afspilleren er tændt: afspilning af CD stoppes hvis den er i gang. Hvis skuffen er åben, lukkes den. Shutdown() kaldes. Hvis CD-afspilleren er slukket: startup() kaldes. Hvis skuffen er åben lukkes den og TOC indlæses. Anvender Stop() EJECTF =!EJECTF ( skuffefunktion ) shutdown() startup() ReadTOC() pause( ) 32
34 cmdeject() se rutediagram på bilag 8 Beskrivelse CD-afspilning stoppes, hvis den er i gang. Eject() kaldes. Anvender Stop() Eject() pause( ) cmdstop() se rutediagram på bilag 5 Beskrivelse CD-afspilning stoppes, hvis den er i gang. Hvis skuffen er åben, gøres ingenting. Anvender Stop() pause( ) cmdskipbwd() se rutediagram på bilag 6 Beskrivelse Hvis det nuværende nummer er det første på CD en, springes tilbage til starten af nummeret. Hvis det ikke er det første nummer, springes et nummer tilbage. Hvis CD-afspilleren er i gang med at afspille, startes nummeret ellers vises nummer og nummerets varighed på displayet. Anvender Play( ) display() timedis() pause( ) cmdskipfwd() se rutediagram på bilag 7 Beskrivelse Hvis det nuværende nummer ikke det sidste på CD en, springes et nummer frem. Hvis CD-afspilleren er i gang med at afspille, startes nummeret ellers vises nummer og nummerets varighed på displayet. Anvender Play( ) display() timedis() pause( ) cmdrepeat() se rutediagram på bilag 4 Beskrivelse Hvis CD-afspilleren er i gang med at afspille (status > 2), sættes repeat til 1 (hele CD en gentages), hvis den var 0 før. Den sættes til 2 (nummeret gentages) hvis den var 1 og til 0 (ingen gentagelse), hvis den var 2. Anvender display() pause( ) cmdplay() se rutediagram på bilag 3 Beskrivelse Hvis skuffen er åben, lukkes den. Hvis CD-afspilleren er i afspilningstilstand, kaldes PauseT(), som enten sætter den på pause eller sætter den i gang igen. Hvis den ikke er i afspilningstilstand, sættes den til at afspille. Anvender Eject() PauseT() Play( ) pause( ) 33
35 Update() se rutediagram på bilag 9 Beskrivelse Opdaterer display med information om afspilningsstatus. Hvis der er information om at der kommer et nyt nummer, skal det vises på displayet. Hvis det næste nummer ugyldigt (0xaa = CD slut) er det sidste på CD en, skal afspilningen stoppes eller nummeret eller hele CD en skal gentages. Anvender dsard() Play( ) Stop() display() timedis() Main Main består af en opstartsdel. Her initialiseres en del af programmets variable. Hvis PLAY er trykket ind, kaldes en setup-funktion hvor man kan ændre på sprog-, standby- og DAC-indstillinger. Herefter indlæses ovennævnte indstillinger og CDafspilleren startes helt op eller slukkes, alt afhængig af standbyindstillingen. Opstartsdelen af main ses i rutediagrammet til højre. Main() CDinit() PLAY? YES CDsetup() NO Readconfig() STANDBY == 0 Or Setup == 1 NO YES Startup() shutdown() readtoc() while(1) Hovedløkke 34
36 Herefter går main ind i programmets hovedløkke, der indeholder tre punkter: while(1) NCMD? NO 1. Brugerinput. Hvis der bliver trykket på en knap, kaldes den korresponderende funktion. 2. Opdatering og behandling af information om afspilningstilstand fra CDdrev. Hvis CD-afspilleren afspiller kontrolleres det for om der er ændringer i afspilningstilstanden. Hvis der er det, skal displayet opdateres med den nye information og evt. skal der sendes en instruktion til CD-drevet. 3. Dvale. Hvis CD-afspilleren ikke afspiller går styrecomputeren i dvale og kan kun vækkes af tryk på en af knapperne. YES SCMD == STBY? NO POWER == 1? YES SCMD == PLAY? NO SCMD == STOP? NO SCMD == REPEAT? NO SCMD == SKIPFWD? NO SCMD == SKIPBWD? NO SCMD == EJECT? NO YES NO YES YES YES YES YES YES cmdpower() cmdplay() cmdrepeat() cmdstop() cmdskipfwd() cmdskipbwd() cmdeject() Hovedløkken i main, kan ses til højre. status > 2? NO YES Update() PCON = PD_ (Power down mode) 35
37 Test Da styrecomputeren er blevet programmeret, siddende i et system med forbindelser til flere perifere enheder, har det ikke været muligt at lave fuldkomment uafhængige test af enkeltdele. Under udviklingsforløbet er de enkelte dele af programmet blevet testet så isoleret som det kunne lade sig gøre. Disse tests har ikke været formaliseret og har ligeså meget karakter af debugging som af direkte testning. Displayet har været helt uundværligt i udviklingen og testningen af programmet. Det er blevet brugt til at udskrive information om tilstande, kommunikationsvariabler og funktioner, som de ændrede sig igennem et funktionskald. Testningen af det færdige projekt er foretaget med accepttests, der er blevet foretaget under de forskellige scenarier, der kan tænkes. Testene er blevet tilrettelagt på grundlag af kravspecifikationen og er dækkende for denne. Det viste sig ved gennemlæsning af testtilfældene at kravspecifikationen ikke har været detaljeret nok. Testtilfældene er meget mere specifikke og tager flere situationer under behandling. Heldigvis er det for en CD-afspillers vedkommende, ret indlysesende hvad der skal ske i de tilfælde, hvor kravspecifikationen ikke har været dækkende. Måske er det også netop derfor, at der ikke blevet gået så meget i detaljer med kravspecifikationen. Det belyser i hvert fald, hvor vigtigt det er at gennemarbejde kravspecifikation. Det er måske en god idé at vende tilbage og kigge på den, når man har lavet testspecifikationerne. Accepttestene er blevet gennemført ved slutningen af projektet. Testene er stillet op i skemaform nedenfor og det er sådan de er blevet gennemført. I tilfælde af at der er fejl eller bemærkninger, er de blevet skrevet til nedenunder skemaet med testens navn påført. Alle tests er kørt igennem af en gang og derefter er testtilfældene blevet gennemgået. De tests hvor der har været bemærkninger eller fejl er blevet analyseret og der er blevet rettet i design og kode. Herefter er alle tests blevet gennemført på ny, for at kontrollere at indgrebene ikke har haft effekt på andre testtilfælde. Dette er jo ikke håndfast dokumentation og for at testen kan siges at være behørigt dokumenteret, skal Raidho eller en af Raidho udpeget person have udført testen. I den første test skal det påvises at styrecomputeren kan læse fra og skrive til EEPROM, da det er her indstillingerne er gemt. Den skal også påvise at sprog-, standby- og DACindstillinger kan ændres. Test Beskrivelse Krav Setup Ændring af indstillinger for: sprog, standby og DAC. Alle tre indstillinger skal ændres. Alle tre indstillinger ændret til det valgte. Bemærkninger: Indstillingen for DAC har ikke været eftervist på anden måde end at det efterfølgende kan ses i indstillingerne at indstillingen er ændret. Jeg har ikke haft udstyr til rådighed, til at undersøge om det rent faktisk resulterede i en ændret overførsel af data via I 2 S-forbindelsen. Resultatet for standbyindstillinger er eftervist i testen: Standby 1. 36
38 I Standby 1 skal det eftervises at indstillingen for standby er blevet ændret og at styrecomputeren reagerer som den skal. Alle testtilfældene skal vise, at styrecomputeren handler i overensstemmelse med kravspecifikationen. Test Beskrivelse Krav Standby 1 Opstart med standby slået fra. Testen starter med at der er slukket for strømmen til CD-afspilleren. Standby 2 Opstart med standby slået til. Testen starter med at der er slukket for strømmen til CD-afspilleren. Standby 3 CD-afspilleren er i standby. Standby 4 CD-afspilleren er tændt. Når der tændes for strømmen skal CDafspilleren starte op i spilleklar tilstand. Når der tændes for strømmen, skal CDafspilleren starte op i standby tilstand Ingen af de andre knapper har nogen effekt. Kun tryk på STANDBY kan tænde CD-afspilleren. Tryk på STANDBY. CD-afspilleren går i standby. Eject testtilfældende skal vise at styrecomputeren handler i overensstemmelse med kravspecifikationen. Test Beskrivelse Krav Eject 1 CD-afspilleren er tændt og der er en CD i drevet, som er lukket. Indholdet af CD en er vist på displayet. Eject 2 Eject 3 Eject 4 Eject 5 CD-afspilleren er tændt og der er en CD i drevet, som er åbent. Displayet viser Skuffe åben. CD-afspilleren er tændt og der er ingen CD i drevet, som er lukket. Displayet viser Ingen CD. CD-afspilleren er tændt og der er ingen CD i drevet, som er åbent. Displayet viser Skuffe åben. CD-afspilleren er tændt. Der er en CD i drevet, som afspilles. Displayet viser x af y og tiden for nummeret. Tryk på EJECT. Indholdsvisning slettes fra displayet, som nu viser Skuffe åben. Tryk på EJECT. Skuffen lukkes og indholdet af CD en indlæses og vises på displayet. Tryk på EJECT. Ingen CD slettes fra displayet, som nu viser Skuffe åben. Tryk på EJECT. Skuffen lukkes og displayet viser Ingen CD. Tryk på EJECT. Skuffen åbnes og displayet viser Skuffe åben. Her er et eksempel på at kravspecifikationen ikke har været detaljeret nok, men at det alligevel er ret klart hvad der skal foregå ved tryk på EJECT. I kravspecifikationen står der bare at CD-afspilleren skal have en ejectfunktion. I usescases og her i testafsnittet, er detaljerne dog klare nok. Testtilfældende er gennemført uden fejl eller mangler. 37
39 Viser at tryk på STOP bliver bliver behandlet korrekt i styrecomputeren. Test Beskrivelse Krav Stop 1 CD en afspiller. x af y og tiden Tryk på STOP. for nummeret vises på displayet. Afspilning stoppes. Antal numre og Stop 2 Stop 3 Stop 4 Stop 5 CD-afspilleren er tændt, men spiller ikke. Der er trykket to gange på SKIPFWRD (>>) og displayet viser: 3 af x og tiden for nummeret. CD-afspilleren er tændt. Den er sat på pause i nummer 3 og er sat til RT (repeat track). Testen starter hvor Stop 3 sluttede. Tester om repeat og pause er blevet deaktiveret ved tryk på STOP. CD-afspilleren er tændt og der er en CD i drevet, som er åbent. Displayet viser Skuffe åben. total tid vises. Tryk på STOP. Antal numre og total tid vises. Tryk på STOP. Afspilning stoppes. Antal numre og total tid vises. Tryk på PLAY. Afspilning skal starte med nummer 1 og hverken repeat eller pause skal være slået til. Tryk på STOP. Ingen ændring. Igen er kravspecifikationen ikke dækkende, men testtilfældene er. Viser at der kan springes tilbage i numrene, både under afspilning og når CD en er stopppet. Test Beskrivelse Krav Skipbwd CD-afspilleren er tændt. Den Tryk på <<. Nu vises: 1 af x og (<<) 1 afspiller ikke. Antal numre og total tiden for nummeret. Skipbwd (<<) 2 Skipbwd (<<) 3 tid vises. CD-afspilleren er tændt. Den afspiller nummer 2. Displayet viser: 2 af x og tiden for nummeret. CD-afspilleren er tændt og der er en CD i drevet, som er åbent. Displayet viser Skuffe åben. Tryk på <<. Nu vises 1 af x og nummeret afspilles. Tiden vises. Tryk på <<. Ingen ændring. Skipbwd CD-afspilleren er tændt. Den Tryk på <<. Nummeret startes forfra. (<<) 4 afspiller første nummer på CD en. Skipbwd (<<) 4 er et testtilfælde, som ikke var i den oprindelige testprotokol, men som burde have været der. Opdagelsen af dette testtilfælde gav anledning til at granske designet og her var der heller ikke taget højde for dette tilfælde. Designet blev ændret til at tage højde for dette og implementeringen ændret. 38
40 Viser at der kan springes frem i numrene, både under afspilning og når CD en er stopppet. Test Beskrivelse Krav Skipfwd CD-afspilleren er tændt. Den Tryk på >>. Nu vises: 2 af x og (>>) 1 afspiller ikke. Antal numre og total tiden for nummeret. Skipfwd (>>) 2 Skipfwd (>>) 3 Skipfwd (>>) 4 tid vises. CD-afspilleren er tændt. Den afspiller nummer 2. Displayet viser: 2 af x og tiden for nummeret. CD-afspilleren er tændt. Den afspiller sidste nummer på CD en. CD-afspilleren er tændt og der er en CD i drevet, som er åbent. Displayet viser Skuffe åben. Tryk på >>. Nu vises 3 af x og nummeret afspilles. Tiden vises. Tryk på >>. Afspilningen af nummeret fortsættes. Tryk på >>. Ingen ændring. Skal eftervise at de to repeatfunktioner virker efter hensigten. Test Beskrivelse Krav Repeat 1 CD-afspilleren er tændt. Den Tryk på REPEAT. Ingen ændring. afspiller ikke. Antal numre og total tid vises. Repeat 2 CD-afspilleren er tændt. Den afspiller sidste nummer på CD en. Displayet viser: y af x og tiden for nummeret. Tryk på REPEAT. Afspilningen fortsætter. Displayet viser: y af x RD og tiden for nummeret. Repeat 3 Repeat 4 Repeat 5 Repeat 6 CD-afspilleren er tændt. Den afspiller sidste nummer på CD en. Displayet viser: y af x RD og tiden for nummeret. CD-afspilleren er tændt. Den afspiller næstsidste nummer på CD en. Displayet viser: y af x RD og tiden for nummeret. CD-afspilleren er tændt. Den afspiller sidste nummer på CD en. Displayet viser: y af x RD og tiden for nummeret. CD-afspilleren er tændt. Den afspiller sidste nummer på CD en. Displayet viser: y af x RT og tiden for nummeret. Nummeret spiller færdigt. CD en starter forfra med at spille nummer 1. Displayet viser: z af x RD og tiden for nummeret. Nummeret spiller færdigt. CD en afspiller sidste nummer. Displayet viser: z af x RD og tiden for nummeret. Tryk på REPEAT. Afspilningen fortsætter. Displayet viser: y af x RT og tiden for nummeret. Nummeret spiller færdigt. CD en starter forfra med at spille samme nummer. Displayet viser: y af x RT og tiden for nummeret. 39
41 Test Beskrivelse Krav Repeat 7 CD-afspilleren er tændt. Den afspiller sidste nummer på CD en. Displayet viser: y af x RT og tiden for nummeret. Tryk på REPEAT. Afspilningen fortsætter. Displayet viser: y af x og tiden for nummeret. Testtilfældene for PLAY-funktioner skal påvise at afspilnings- og pausefunktion virker som planlagt. Test Beskrivelse Krav Play 1 CD-afspilleren er tændt og der er en CD i drevet, som er lukket. Indholdet af CD en er vist på displayet. Play 2 Play 3 Play 4 Play 5 CD-afspilleren er tændt og der er en CD i drevet, som er åbent. Displayet viser Skuffe åben. CD-afspilleren er tændt. Der er en CD i drevet, som afspilles. Displayet viser x af y og tiden for nummeret. CD-afspilleren er tændt. Der er en CD i drevet, som er pauset. Displayet viser: Pause x og tiden for nummeret. CD-afspilleren er tændt, men spiller ikke. Der er trykket to gange på SKIPFWRD (>>) og displayet viser: 3 af x og tiden for nummeret. Tryk på PLAY. Afspilning startes. Displayet viser: 1 af x og tiden for nummeret. Tryk på PLAY. Afspilning startes. Displayet viser: 1 af x og tiden for nummeret. Tryk på PLAY. Afspilning pauses. Displayet viser: Pause x og tiden for nummeret. Tryk på PLAY. Afspilning genoptages. Displayet viser: 1 af x og tiden for nummeret. Tryk på PLAY. Afspilning af nummer 3 startes. Displayet viser: 3 af x og tiden for nummeret. Testkonklusion Testen viser at CD-afspilleren lever op til de stillede testkrav. Læsning af testtilfældene viser også at kravspecifikationen ikke er detaljeret nok. Der er blevet tilføjet en test: Skipbwd (<<) 4, som implicit ligger i forlængelse af brugerkravet til denne funktion. Testtilfældene kan bruges af Raidho ved den videre udvikling af CD-afspilleren og de kan så udvide testtilfældene efterhånden som nye krav og funktioner opstår. 40
42 Perspektivering Da dette projekt har drejet sig om at designe og implementere en prototype på en styrecomputer til en CD-afspiller, er det ikke et salgsklart produkt, der kan afleveres til Raidho, men derimod et godt grundlag for at vurdere om de er på rette vej, med dette produkt. For at gøre CD-afspilleren klar til salg er der et par ting jeg mener, kunne forbedre brugerens oplevelse af produktet. Den vigtigste er at kunne betjene CD-afspilleren med en fjernbetjening. Ganske vist er der tale om et apparat til entusiaster, som ikke alle har den samme holdning til betjening som resten af verden. Men der er tale om et apparat til mange penge og efter min mening bør der høre en fjernbetjening til dette produkt. Det ville give en mere komfortabel betjening af CD-afspilleren og kunne også tilføje ekstra funktionalitet til den. Måske kunne der også laves forbedringer omkring displayet, der kunne få det til at fremstå lidt flottere. Man kunne visualisere CD-afspillerens tilstand med ikoner og animationer. De vil i så fald blive lidt små og det kan derfor være at det ville være smart at skifte displayet ud med et, der er lidt større og måske mere detaljeret. Det er som sagt helt oplagt at udvide CD-afspillerens funktionalitet med en fjernbetjening. For at være sikker på at det vil kunne integreres i det eksisterende program, har jeg undersøgt hvordan man kunne implementere det. De fleste fjernbetjeninger benytter sig af infrarødt lys. Printkortet med knapperne er allerede forberedt til fjernbetjening, idet der sidder en infrarød modtager. De fleste fjernbetjeninger benytter en frekvens omkring 36 khz og alligevel kommer vi ikke til at tænde både TV, video og stereoanlæg, når vi gerne vil lytte til en CD. Det er fordi de forskellige producenter har lavet deres egen kommunikationsprotokol, som også forstår at skelne mellem deres egne forskellige typer af apparater. En af de bedst beskrevne protokoller er RC5, der er blevet udviklet af Philips. De beskeder man skal afkode består alle af 14 bitsignaler, der hver varer 1,728 ms (1 bittid). En bit-tid kan deles op i to halvdele, som skal antage hver deres værdi. Hvis den første halvdel antager værdien 1, skal den anden halvdel antage værdien 0. Første halvdel består i det tilfælde af 32 perioder à 27 µs pulser og anden halvdel består af 32 perioder à 27 µs uden pulser. Pulserne kommer så tæt at de 32 perioder, kan opfattes som et konstant signal med værdien 1. Holder man knappen trykket ned, bliver beskeden sendt hver gang der er gået 130 ms. 41
43 Opbygningen af en RC5-besked er som følger: Det er den første halvdel i hvert signal vi skal aflæse. For nemheds skyld kan vi sige at hvert bitsignal varer en bit-tid (1,728 ms) og at det skifter værdi midt i den periode. Altså er beskeden, der skal samples og afkodes på 14 bits. De to startbits er altid 1. Skiftebitten - bit 3 skifter hver gang der trykkes på en knap; dette er for at man kan skelne mellem et langt tryk og flere tryk på den samme knap. Herefter følger fem systemadressebits, der fortæller hvilken type apparat instruktionen skal bruges af. Til sidst kommer de seks instruktionsbits, der fortæller hvilken instruktion apparatet skal udføre. Samplingen af det enkelte bitsignal ville kunne foregå i midten af den første halvdel af signalet. Med lidt snilde og præcis timing kan det lade sig gøre. Det gælder om at kunne registrere midten af det første bitsignal og derefter vente 1,75 bit-tid (1,75 x 1,728 ms), så er man midt i første halvdel af bitsignal 3. Derefter skal man sample en gang for hvert 1,728 ms, i alt tolv gange, så har man hele beskeden. Startbits Skiftebit Systemadresse Instruktion 1,75 bit tid 1 bit tid Da der kan være lange pauser mellem tryk på en fjernbetjening, vil implementeringen blive baseret på et interrupt ligesom ved knaptryk. Det er svært at være sikker på at man har registreret den første startbit. For at være sikker på at man registrerer den første startbit, kan man lade være med at bruge den første besked, men i stedet vente 60 ms, og derefter lytte efter startbitten. Da en besked varer 25 ms og beskederne bliver afsendt en gang hvert 130 ms, kan man være helt sikker på at man efter 60 ms befinder sig midt mellem to beskeder, ligegyldigt om det var den første eller den sidste bit i beskeden man registrerede. 42
44 Da hvert bitsignal er delt op i to halvdele med hver deres værdi, kunne man også kontrollere om bitsignal nummer 14 skifter værdi som det skal. Det kan man gøre ved at vente en halv bit tid efter den sidste egentlige bitregistrering. Hvis signalet ikke skifter værdi, skal aflæsningen forkastes og man må vente på at beskeden bliver gensendt. At opfange beskeden fra fjernbetjeningen er den sværeste del. Herefter skal beskeden deles op i skiftebit, en systemadressedel og i en instruktionsdel. Hvis systemadressen passer, og for CD-afspillere er det adresse 20, skal NCMD sættes til 1 og CMD tildeles instruktionen fra fjernbetjeningen, så kan løkken i hovedprogrammet se at der er modtaget en ny ordre og behandle den. Kommandoer fra fjernbetjeningsinterruptet indgår altså i programmet på nøjagtigt samme måde som knaptryk på fronten af CD-afspilleren. I første omgang er det kun de otte implementerede funktioner, der ville virke, men ny funktionalitet ville hurtigt kunne bygges på. Konklusion Jeg er blevet bedt om at programmere en styrecomputer til en prototype af en CDafspiller. Der har været opstillet en række krav til hvad styrecomputeren og CDafspilleren skal kunne. Ved projektets start stod jeg med en styrecomputer, et display, EEPROM, knapper og et CD-drev, som ikke kunne kommunikere med hinanden. Nu her, næsten tre måneder senere har vi at gøre med et system; alle enhederne kommunikerer med hinanden gennem styrecomputeren, så det hele virker som et samlet system. Der er blevet programmeret kommunikationsfunktioner udfra de fire perifere enheders specifikationer. Det indledende arbejde med at få lavet disse hjælpefunktioner eller byggesten til programmet, har været en vigtig del for at det samlede projekt kunne blive en succes. Der er blevet programmeret en mere central del af styrecomputeren, som bruger de perifere enheder på en måde så det fremstår som en samlet enhed. CD-afspilleren lever op til de stillede krav og klarer også samtlige accepttests. Betjeningen af CD-afspilleren er intuitiv og virker helt som den skal. Funktionerne bag de forskellige brugerkommandoer er logisk opbygget og det vil være let for Raidho at tilføje yderligere funktionalitet ved at tilføje en fjernbetjening. Min konklusion er at projektet er lykkedes. Der er punkter, der kunne laves bedre. Displayet og dets funktion er ikke oppe i den klasse, som jeg mener at det bør være i. Det fungerer fint og viser den information man forventer at se, men det fortjener at være lidt bedre i et meget dyrt apparat. 43
45 Projektet handler jo også i første omgang om at lave en prototype af en CD-afspiller. Jeg går ud fra at Raidho vil udskifte displayet, hvis de beslutter sig for at udvikle videre på den. Det kræver jo først og fremmest at de er tilfredse med den lydmæssige side af projektet, som jeg jo ikke har noget at gøre med. Det vil ikke kræve omstrukturering af programmet at skifte displayet ud. Det vil blot kræve at de specifikke funktioner til displayet skal krives om og en lille smule tilpasning i de funktioner, der bruger dem. Her kan der måske også opstå nye muligheder for visning af information og animationer, som kræver at der bliver tilføjet mere specialiserede displayfunktioner. 44
46 Litteraturliste Bøger The 8051 Microcontroller and Embedded Systems. Muhammad Ali Mazidi et al. ISBN PIC Microcontroller Project Book. John Iovine. ISBN Designing Embedded Hardware. John Catsoulis. ISBN The C Programming Language. Second Edition. Brian W. Kernighan et al. ISBN Links til internettet
47 Bilag Rutediagrammer Bilag 1 - CDSetup() 46
48 Bilag 2 - cmdpower() cmdpower() POWER? YES NO NO Status == 3? YES EJECTF? Stop() startup() YES EJECTF = EJECTF! NO NO EJECTF? YES shutdown() Eject() pause() 47
49 Bilag 3 - cmdplay() Bilag 4 - cmdrepeat() 48
50 Bilag 5 - cmdstop() Bilag 6 - cmdskipbwd() cmdskipbwd() Curtrk >= TOCf YES Curtrk > TOCf YES curtrk-- status == 3? YES play(track) NO NO status > 1? YES NO NO display() timedis() pause() 49
51 Bilag 7 - cmdskipfwd() Bilag 8 - cmdeject() 50
52 Bilag 9 - Update() 51
53 Bilag 10 - Oversigt over signalernes navne i programmet og deres tilhørende pins på styrecomputeren. Signallinjer fra printkort med knapper IR P3_3 (infrarød sensor - ikke i brug skal bruges til fjernbetjening) BUTTON P3_2 (BUTTON = 0 når en knap er trykket ind bruges til interrupt) BUT0 P3_7 (input fra knapper kodet til tre linjer) BUT1 P2_0 (input fra knapper kodet til tre linjer) BUT2 P2_1 (input fra knapper kodet til tre linjer) EEPROM EENB SDA CLK (tre signallinjer) P0_7 (enable eeprom) P0_1 (data) P0_2 (clock) Strømforsyning POWER P0_0 (strømforsyning) V5DIS P2_3 (5 volt til CD-drev) V9DIS P2_4 (9 volt til CD-drev) CD-drev CDR CDD CDS CDA P0_3 (reset til nulstilling af CD-drev) P0_4 (CD Data - kommunikationslinje) P0_5 (CD Strobe - kommunikationslinje) P0_6 (CD Acknowledge - kommunikationslinje) Display RS P3_4 (RS = 0 - instruktion register/ RS = 1 data register) RW P3_5 (læs = 1 / skriv = 0) E P3_6 (enable) LCD P1 (D0-D7 databus) 52
54 Bilag 11 - LCD instruktionstabel Tabel over instruktionssættet til kommunikation med displayet. 53
55 Bilag 12 - Instruktionstabel CD-drev 54
56 55
I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET
Mandag den 14 januar 2013 I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET OZ1QK Knud Krogsgaard Jensen 1 ARDUINO I 2 C - BUSSEN ELLER?? Plan for I aften: Jeg siger noget i 10 minutter I fortæller lidt om
//--------------------------------- Definition af porte og funktioner -------------------------
Temeraturmåler (C-program).txt // Initialiserings-sekvens #include #pragma model=medium #pragma code=0x0000 #pragma xdata=0x4000 #pragma asm=on #pragma parameters=register //#define display P4
Arduino Programmering
Microcontroller, Arduino I teknologi skal vi lære at lave programmer til uc for at have muligheden til eksamen at kunne lave intelligente el-produkter. I hvert fald skal vi have set mulighederne, og forstået
Der er derfor, for at alle kan sende, kun tilladt, at sende intermitterende. Altså korte pakker. ( Dette skal dog verificeres!!)
MHz KIT Rev: /- Det er ikke tilladt, at man bare udsender radiobølger på den frekvens, man ønsker. Forskellige frekvenser er udlagt til forskellige formål. Nogle til politiet, militæret, FM-radio-transmission,
Dokumentation af programmering i Python 2.75
Dokumentation af programmering i Python 2.75 Af: Alexander Bergendorff Jeg vil i dette dokument, dokumentere det arbejde jeg har lavet i løbet opstarts forløbet i Programmering C. Jeg vil forsøge, så vidt
Microcontroller, Arduino
Microcontroller, Arduino Programmerbar elektronik. uc Vi skal lære at lave programmer til uc for at kunne lave el-produkter. Forstå princippet i programmering af en uc og se mulighederne. Programmeringen
Microcontroller, Arduino
Microcontroller, Arduino Kompendium til Arduino-programmering i Teknologi. Vi skal lære at lave programmer til uc for at kunne lave el-produkter. Vi skal forstå princippet i programmering af en uc og se
Kravspecifikation For. Gruppen
Kravspecifikation For Gruppen Indholdsfortegnelse 1. INDLEDNING...3 1.1 FORMÅL...3 1.2 REFERENCER...3 1.3 LÆSEVEJLEDNING...3 2. GENEREL BESKRIVELSE...4 2.1 SYSTEM BESKRIVELSE...4 2.2 SYSTEMETS FUNKTION...4
Manual til PRO DK180
Manual til PRO DK180 Indhold Forord... 4 Alarmens generelle opbygning... 5 Placering af alarmen... 7 Oversigt over alarmen... 8 Tag alarmen i brug... 10 Programering af alarmen... 11 Indtastning af egen
Beskrivelse af tryghedsalarmen
Denne vejledning fungerer som en hurtig og nem brugervejledning på dansk, oversat af GSM Teknik ApS. Skal man bruge alle detaljer, henvises til den engelske vejledning, der medfølger i kassen. Beskrivelse
DCC digital dekoder til magnetiske produkter
Viessmann 5212 Digital Dekoder Dansk Brugervejledning DCC digital dekoder til magnetiske produkter med fire udgangsgrupper Indhold 1. Vigtige oplysninger... 2 2. Indledning / Egenskaber... 3 3. Montering...
MYLOQ 1101 Kodecylinder
MYLOQ 1101 Kodecylinder Brugsanvisning DK Vigtig information før anvending Kodecylinderen skal aktiveres før brug (se side 3). En administrationskode skal tilføjes. Vær sikker på at få skrevet den nye
LCD Character display Intro
LCD Character display Intro Der findes flere typer af LCD karakter-displays, fra forskellige firmaer. Her er vist en type, der er blå. Pins: Nummer 1 fra venstre Her er vist en nærmere beskrivelse af de
Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0
Program Dokumentation PC Software Skrevet af Gruppen. Version 1.0 Indholds fortegnelse 1. INDLEDNING...3 1.1. FORMÅL...3 1.2. REFERENCER...3 1.3. VERSIONSHISTORIE...3 1.4. DEFINITIONER...3 1.5. DOKUMENTATIONENS
1. Detaljeret beskrivelse
Digital Diktafon Indhold 1. Detaljeret beskrivelse... 3 2. Specifikation... 4 3. Sæt batterier i... 4 4. Anvendelse... 6 4.1. Tænd/Sluk... 6 4.2. Optagelse... 6 4.4.1 Vælg optagelsestilstand... 6 4.4.2
Programmering af trådløse modtagere (RF)
Comfort CSx75 Programmering af trådløse modtagere (RF) Introduktion Centralerne CSx75 kan udvides med trådløse (RF) modtagere på 868 MHz og 433 MHz. Når en RF modtager er installeret på centralen, kan
Betjeningsvejledning. BeoLab 2000 giver Deres centrale Bang & Olufsen system en ekstra dimension.
B E O L A B 2 0 0 0 1 BeoLab 2000 giver Deres centrale Bang & Olufsen system en ekstra dimension. De kan nu spille den musik- eller videokilde De ønsker på Deres centrale system og lytte til det via Deres
Bredbånds-TV. Brugervejledning. ComX brugervejledning version 4.0
Bredbånds-TV Brugervejledning ComX brugervejledning version 4.0 1 INDHOLD PAKKENS INDHOLD Pakkens indhold side 2 Fjernbetjening side 2 Tilslutning af Settop-boksen side 3 Introduktion til Bredbånds-TV
S26 MOTOR Original brugermanual
S26 MOTOR Original brugermanual Indhold 1. Indledning 1 2. Liste over nødvendigt værktøj 1 3. Sikkerhedspåbud 1 4. Motor montering 2 4.1. Instruktion før montering 2 4.2. Samling af skinne 3 4.3. Opsætning
Eksamens spørgsmål i Teknologi (Digital) 3. Semester (i)
Eksamens spørgsmål i Teknologi (Digital) 3. Semester (i) 1. DS1821 1-WIRE KOMMUNIKATION (HERUNDER TIMING KRAV) ------------------------ 2 2. DS1821 SOFTWARE (OPBYGNING AF STYREPROGRAM I SYSTEM51 C) -----------
DAB+ adaptor. Kære kunde,
Kære kunde, Kvalitet har altid været drivkraften for os og grundlæggelsen af Argon Audio er en naturlig forlængelse af denne filosofi. Vi har 20 års erfaring i at lave og specificere høj kvalitetsprodukter
Alt elektronik heri er købt via http://dx.com, og arduino udviklingssoftware er hentet fra http://arduino.cc.
Få-tiden-til-at-gå-[DIGITAL]-ur =============================== Copyright 2013, Richard Jørgensen. Alle ophavsretlige rettigheder frafaldet 2015. (Kopier og brug som du har lyst.) Forord: ===== Denne vejledning
Quick-guide til Konftel 250
Conference phones for every situation Quick-guide til Konftel 250 DANSK BESKRIVELSE Konftel 250 er en konferencetelefon, der kan tilsluttes analogt telefonstik. På www.konftel.com/250 finder du en håndbog
CANSAT & ARDUINO step by step
CANSAT & ARDUINO step by step Jens Dalsgaard Nielsen SATLAB Aalborg Universitet Danmark [email protected] 1/51 Arduino CANSAT - MÅL At måle ved hjælp af sensor temperatur, tryk, acceleration, CO2, lys,...
Vejledning til Tidtagningssystem til ridebanespring. Sønderborg. Knap for addering af 6 sekunder ved total nedrivning af forhindring.
Tidsur til Ridebanespring Model: Sønderborg Med visning af tid for hovedspring / omspring. Visning af fejl Automatisk addering af fejl ved overskridelse af fejlfri tid Visning af starttid for næste klasse.
Installationsvejledning
Installationsvejledning Multiroom Åbn kasserne og kontrollér at alle delene er der. Scart kabel Netgear/Zyxel switch Fjernbetjening Netværkskabel 1m Netværkskabel 1m Infrarød modtager (0 V) HDMI kabel
Windows XP. Tilpasning af computeren
Side 1 af 12 Windows XP Tilpasning af computeren Indhold Indhold...1 Indledning...2 Mus...2 Venstrehåndet...2 Dobbeltklikke...2 Musemarkøren...3 Musens følsomhed...3 Scrollehjul...4 Indstilling af Skærm...4
895 Harmony-fjernbetjening. Brugervejledning, version 1.0
895 Harmony-fjernbetjening Brugervejledning, version 1.0 Indhold INTRODUKTION... 1 BLIV DUS MED DIN HARMONY-FJERNBETJENING... 2 KONFIGURATIONSPROCESSEN... 3 BRUG AF HARMONY-FJERNBETJENINGEN... 4 BRUG AF
Digital Drejeskive Decoder til 7286 / 7686
Digital Drejeskive Decoder til 7286 / 7686 7687 Marklin 7687 Drejeskive Decoderen kan anvendes på følgende måder til etablering af Styring til Drejeskiven fra Centralstation 2. (Dette dokument tager udgangspunkt
DENVER DPF-407. Digital Billedramme Betjeningsvejledning
DENVER DPF-407 Digital Billedramme Betjeningsvejledning 1 INDHOLD : FEATURES:...3 KNAPPER OG KONTROLLER:...4 FJERNBETJENINGEN...5 GRUNDLÆGGENDE BETJENING:...6 1. MENUEN VALG AF FUNKTION...6 2. MENUEN VALG
Drejebog LO - overenskomstmøder
Drejebog LO - overenskomstmøder Denne drejebog handler kun om den del af møderne, der involverer dugene og samarbejdet omkring bordene. Dvs. den tager ikke højde for Lizettes forudgående præsentation eller
Programmering af CS1700-Proxlæser
Comfort CSx75 Programmering af CS1700-Proxlæser Introduktion CS1700 er en proxlæser og der kan tilsluttes op til 15 læser til CSx75-centralen. Du kan programmere CS1700 til passagekontrol i et eller flere
Klasse Situation Observation 3. klasse Før spillet. Der bliver spurgt ind til hvad børnene
Bilag 1 - Feltobservationer I dette bilag findes Feltobservationer, noteret under folkeskoleelevernes spilforløb. Disse feltobservationer er fremstillet i en skematisk opstilling, hvis første kolonne tydeliggør
Programmeringskursus Kursusaften 3. Programmering for begyndere Brug af Arduino. Display. Kursusaften 3 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK
Programmering for begyndere Brug af Arduino Programmeringskursus Display EDR Hillerød Knud Krogsgaard Jensen / OZ1QK Programmering for begyndere Brug af Arduino Programmeringskursus Sidste gang havde vi
Eksempler på elevbesvarelser af gådedelen:
Eksempler på elevbesvarelser af gådedelen: Elevbesvarelser svinger ikke overraskende i kvalitet - fra meget ufuldstændige besvarelser, hvor de fx glemmer at forklare hvad gåden går ud på, eller glemmer
Digital stemmeoptager
Digital stemmeoptager I. Funktionsbeskrivelse 1. REC (optagerknap) 2. STOP (stop/tænd og sluk) 3. UP (spring frem) 4. DOWN (spring tilbage) 5. HOLD (låseknap) 6. VOL+ (lydstyrke op) 7. VOL (lydstyrke ned)
Pebble Eco 5 BRUGSVEJLEDNING LYS OG LUP ERHVERVSVEJ 30 2610 RØDOVRE TLF. 43 451 451
Pebble Eco 5 BRUGSVEJLEDNING LYS OG LUP ERHVERVSVEJ 30 2610 RØDOVRE TLF. 43 451 451 Indhold Salgspakkens indhold...2 Knapper og stik...2 På forsiden...2 På bagsiden...3 Langs overkanten...3 Opladning...3
Vejledning til Tidtagningssystem til ridebanespring. Sønderborg. Manuel Signal ( Radiosignal ) knap på pult ( Stopursfunktion )
Model: Sønderborg Valgfri portrækkefølge. Visning af tid for hovedspring / omspring. Visning af fejl Automatisk addering af fejl ved overskridelse af fejlfri tid Mulighed for visning af starttid for næste
FSFI s guide til DFR s elektronisk bevissystem
FSFI s guide til DFR s elektronisk bevissystem Dette er en kort guide i anvendelsen af Dansk Førstehjælpsråd elektroniske bevissystem. Guiden viser og forklarer, hvordan du som instruktør og medlem af
INFO DIAG DIAGNOSTICERINGS- VÆRKTØJ
CITROËN DTAV INFO DIAG DIAGNOSTICERINGS- VÆRKTØJ CITROËN DANMARK A/S AUT. CITROËN-FORHANDLERE - Nyvognsklargører - Fabriksaktionskoordinator AUT. CITROËN-VÆRKSTEDER - Eftermarkedsansvarlig, servicetekniker
LISA 2 System til faringsovervågning
Indledning Du har netop anskaffet dig et unikt stykke værktøj til brug ved faringsovervågning. LISA 2 systemet er et interaktivt værktøj, som sikrer at medarbejdere i farestalden holder fokus på faringer
UniLock System 10. Manual til T550 Secure Radiomodtager og håndsender. Version 2.0 Revision 140220
UniLock System 10 Manual til T550 Secure Radiomodtager og håndsender Projekt PRJ124 Version 2.0 Revision 140220 T550 Secure er en højsikker trådløs UHF-læser der benyttes, hvor det ønskes at oplåse på
DM-44TE 45 sek. Anti Shock bærbar CD-afspiller
Danish DM-44TE 45 sek. Anti Shock bærbar CD-afspiller Dansk betjeningsvejledning www.denver-electronics.com SIKKERHEDSFORANSTALTNINGER For ikke at beskadige denne enhed bør den ikke opbevares på steder
Betjeningsvejledning. System Alarmpanel xx S2s
Betjeningsvejledning System Alarmpanel xx S2s Indhold 1 Indhold Indholdet af denne vejledning kan ændres uden forudgående varsel. Firmaer, navne og data anvendt i eksempler er fiktive, medmindre andet
Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...
Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering... 3 Kildekoden... 4 Variabler... 4 Setup... 4 Loop... 4 Indledning
STYRING FOR STOKERFYR
STYRING FOR STOKERFYR Måling og regulering af kedeltemperatur Måling og overvågning af røgtemperatur Eltænding og/eller pausefyring Mulighed for iltstyring Til Nordjysk Elektronik Ulvebakkevej 13 9330
Betjeningsvejledning. SMS modul
Betjeningsvejledning SMS modul HW: P052A.0517 / MC35i SW: P052ASMS.070628 LBJ electronic, DK-7100 Vejle Før du tager dit nye SMS modul i brug, er det vigtigt, at du gennemlæser denne vejledning, og udfører
Brug Photo Story 3 en let introduktion
Brug Photo Story 3 en let introduktion Denne vejledning forudsætter at programmet Photo Story 3 er installeret på din computer. Se andetsteds for vejledning i at installere programmet, der kan findes gratis
BOXER SMARTBOX. Brugermanual
1 BOXER SMARTBOX Brugermanual INDHOLD... FJERNBETJENING... 3 PRODUKT... 4 INSTALLATION... 5 ANVENDELSE.... 6 TV-GUIDE... 8 MANUAL TIL DIN BOXER SMARTBOX! I denne manual kan du læse om, hvordan du bruger
TTS er stolte af at være en del af
Garanti & Support Dette produkt leveres med en etårs garanti, der dækker problemer, som findes ved normal anvendelse. Misbrug af Easi-Listener eller at åbne enheden vil ugyldiggøre denne garanti. Alle
Dansk Mink Papir. Teknisk brugermanual
Dansk Mink Papir Teknisk brugermanual Styring til FIX tørrekasse Beskrivelse Enheden styrer en AC blæser-motor via en relæudgang. Betjening foregår via et tastatur og et display, og brugeren kan vælge
AVR MP3 29-05-08 05576 Ingeniørhøjskolen i Århus Michael Kaalund
AVR MP3 29-05-08 Indholdsfortegnelse 1 Introduktion...2 2 Udviklingsmiljø...2 3 Beskrivelse af systemet...3 3.1 VS1001k...3 3.2 MP3 file formatet...6 4 Konklusion...6 5 Litteratur liste...6 6 Illustrations
PR 2000 Proximity-læser Art. Nr.: 460002 Installationsmanual
PR 2000 Proximity-læser Art. Nr.: 460002 Installationsmanual PR2000v.2 Inst.Man. DANjun12 Side 2 CT 2000 Prox Indholdsfortegnelse Side 1. Generelt... 3 2. Programmering... 4 2.1 Programmering med ConLan
COPY RIGHT DENVER ELECTRONICS ALL RIGHTS RESERVED
DANISH DMP370 0/45 sek. Anti Shock bærbar CD-afspiller Dansk betjeningsvejledning www.denver-electronics.com COPY RIGHT DENVER ELECTRONICS ALL RIGHTS RESERVED SIKKERHEDSFORANSTALTNING ER For ikke at beskadige
Faglig læsning i matematik
Faglig læsning i matematik af Heidi Kristiansen 1.1 Faglig læsning en matematisk arbejdsmåde Der har i de senere år været sat megen fokus på, at danske elever skal blive bedre til at læse. Tidligere har
Og vi skal tale om det på en måde, som du måske ikke har tænkt over det før.
Kald 3 - The Power of why. I dag skal vi tale om HVORFOR du ønsker det, du ønsker. Og vi skal tale om det på en måde, som du måske ikke har tænkt over det før. Derfor er det super vigtigt, at du har god
Svendeprøve Projekt Tyveri alarm
Svendeprøve Projekt Tyveri alarm Påbegyndt.: 8/2-1999 Afleveret.: 4/3-1999 Projektet er lavet af.: Kasper Kirkeby Brian Andersen Thomas Bojer Nielsen Søren Vang Jørgensen Indholds fortegnelse 1. INDLEDNING...3
BRUGER VEJLEDNING BOLYGUARD SG 560 K. Model: SG560
BRUGER VEJLEDNING BOLYGUARD SG 560 K Model: SG560 Tak fordi du har købt SG560K, Et digital vildt kamera, for bedst mulige udnyttelse af alle funktionerne i dette vildtkamera, skal du læse alle anvisningerne
Vurdering af digitalt læringsmiddel:
Vurdering af digitalt læringsmiddel: Indholdsfortegnelse: 1) Beskrivelse af Photo Story 3.. 2 a. Trin 1.. 3 b. Trin 2.. 5 c. Trin 3.. 5 d. Trin 4.. 6 e. Trin 5.. 6 2) Konklusion. 7 Claus B. Jensen Side
SmartAir TS1000. Daglig brug
SmartAir TS1000 Daglig brug Indhold Brugere... 4 Opret brugere... 4 Brugerliste vinduet... 5 Knapper... 5 Grupper... 6 Søg bruger... 7 Rapport vinduet (brugere)... 7 Døre... 8 Opret døre... 8 Dørliste
Side 2 CS 9452 Brugervejledning. Afsnit Navn Side. 1 Ordforklaring (terminologi) 3. 3 Betjeningsknapper og -lamper 6
BRUGERVEJLEDNING Side 2 CS 9452 Brugervejledning INDHOLDSFORTEGNELSE: Afsnit Navn Side 1 Ordforklaring (terminologi) 3 2 Introduktion 5 3 Betjeningsknapper og -lamper 6 4 Fuld tilkobling, Deltilkobling,
GSM porttelefon og samtale anlæg. SSI 2600.8002 GSM porttelefon system
SSI 2600.8002 GSM porttelefon system GSM samtale anlæg og 1000 telefon numre med opkald for dør/port åbning Udendørs station med separat indendørs kontrol boks SSIHuset Svane Electronic ApS Arildsvej 27,
Læsehuset hjælp. Læsehuset 1.0. Mikro Værkstedet A/S
Læsehuset hjælp Læsehuset 1.0 Mikro Værkstedet A/S Læsehuset hjælp: Læsehuset 1.0 Mikro Værkstedet A/S Revision 1.46, 24. februar 2009 Indholdsfortegnelse Forord... vii 1. Kom godt i gang... 1 1.1. Læsehusets
CAN BUS alarm, AK4625 Snapguide med oversigt over ledninger fra sirene og modul
CAN BUS alarm, AK4625 Snapguide med oversigt over ledninger fra sirene og modul Denne snapguide er ikke en komplet monterings- eller brugeranvisning, men en oversigt over ledninger og funktioner. AK4625
OPTAC overførselsenhed Brugermanual
OPTAC overførselsenhed Brugermanual Telefonnummer support: +44 870 887 9256 E-Mail: [email protected] Document version 2.0 Document No. 6939-170 1 1 TERMINOLOGI... 4 2 INTRODUKTION... 4 2.1 Hvad
Doro Secure 580IUP. Brugermanual. Dansk
Doro Secure 580IUP Brugermanual Dansk 3 2 1 4 5 6 7 8 9 14 13 12 11 10 15 16 Bemærk! Alle figurer har kun illustrative formål og gengiver ikke nødvendigvis denne enhed helt præcist. Dansk 1. Strøm til/fra
DGMF Kursus i Digitalcentralen. Rev. 19 / 11-2009 Poul Erik Christiansen. DiMAX 1200Z Digitalcentral
DGMF Kursus i Digitalcentralen. Rev. 19 / 11-2009 Poul Erik Christiansen DiMAX 1200Z Digitalcentral Funktioner i DiMAX -valgfri Strømstyrke 4, 7, 12 Amp. -separat programmerings udtag -spændingsbegrænsning
BRUGERVEJLEDNING CP-508LCD ALARMCENTRAL
BRUGERVEJLEDNING CP-508LCD ALARMCENTRAL Ver 3.7 INDHOLDSFORTEGNELSE BETJENING... side 3 TIL- OG FRAKOBLING... side 4 TILKOBLING NIVEAU 1... side 5 TIL- OG FRAKOBLING NIVEAU 2... side 6 TIL- OG FRAKOBLING
Pædagogisk værktøjskasse
Pædagogisk værktøjskasse Vi har lavet denne pædagogiske værktøjskasse for at styrke den alsidige historieundervisning, hvor du kan finde forskellige arbejdsformer og øvelser, som kan gøre historieundervisningen
// Mamut Business Software Installationsguide: Basis
// Mamut Business Software Installationsguide: Basis Introduktion Indhold Denne guide forenkler installationen og førstegangsopstarten af Mamut Business Software. Hovedfokus i denne guide er enkeltbrugerinstallationer.
Arduino Programmering
Microcontroller-programmering med Arduino I teknologi skal vi lære at lave programmer til en microcontroller for at have muligheden til eksamen at kunne lave intelligente el-produkter. I hvert fald skal
Ide med Diff. Mål. Tidsplan. 1.uge: 2.uge:
Side 1 af 5 Ide med Diff. Min ide med differenertierings modulet er at lave et program som kan vise 3d objekter, og få lavede en konverter som kan konventer 3ds filer over til noget som flash kan bruge.
BeoSound 3000. Vejledning
BeoSound 3000 1 Vejledning BeoSound 3000 Guide BeoSound 3000 Reference book Denne vejledning indeholder 3 Der findes to vejledninger, du kan læse for at lære dit Bang & Olufsen produkt at kende. Vejledning
Side 1. Installationsvejledning for. systemet. Version 1 December 2004
Side 1 Installationsvejledning for µ-pc systemet µ-pc Version 1 December 2004 Side 2 µ-pc systemet µ-pc systemet er opbygget af moduler som vist på figur 1. Hvert modul består af en kasse med stikforbindelser,
Indhold. Brug Beo4 fjernbetjeningen, 3. Detaljeret beskrivelse af knapperne på Beo4, 4 Daglig betjening og avancerede funktioner med Beo4 knapper
Beo4 Vejledning Indhold Brug Beo4 fjernbetjeningen, 3 Detaljeret beskrivelse af knapperne på Beo4, 4 Daglig betjening og avancerede funktioner med Beo4 knapper Tilpas Beo4, 5 Tilføj en ekstra 'knap' Flyt
Kan vi fortælle andre om kernen og masken?
Kan vi fortælle andre om kernen og masken? Det kan vi sagtens. Mange mennesker kan umiddelbart bruge den skelnen og den klarhed, der ligger i Specular-metoden og i Speculars begreber, lyder erfaringen
DKK Rally-lydighed, Øvede-klassen. 40. Fristende 8-tal
DKK Rally-lydighed, Øvede-klassen. 40. Fristende 8-tal Øvelsen består af 2 madskåle eller lignende fristelser samt 2 kegler, stolper eller personer og der skal gås et 8-tal rundt om de to yderste kegler.
BRUGERVEJLEDNING DENVER MPG-4054 NR Medie-afspiller
BRUGERVEJLEDNING DENVER MPG-4054 NR Medie-afspiller Denne MP4-afspiller er en fuld multimedie-afspiller. Det betyder, at den kan vise fotos og e-bøger i tekstformat, optage og afspille live audio og afspille
Det er nødvendigt for brugeren at læse, forstå og følge vejledningens instruktioner.
Tams Elektronik LD-G-3 / LD-W-3 (1) Lokomotivdekoder LD-G-3 / LD-W-3 i Märklin-Motorola format Denne oversættelse omfatter monterings- og anvendelsesvejledningerne til LD-G-3 / LD-W-3 dekoderen. Den originale
FSystem beskrivelse PAR 200 CLOCK
FSystem beskrivelse PAR 200 CLOCK Driftvejledningsnr: PAR-200-SYS-DK-041223 Beskrivelse Billede PAR-200-SYS er den overordnede og komplette beskrivelse af Ølands nye tidsstyring inden for analoge regulatorer.
Automatisering Af Hverdagen
Automatisering Af Hverdagen Programmering - Eksamensopgave 10-05-2011 Roskilde Tekniske Gymnasium (Kl. 3,3m) Mads Christiansen & Tobias Hjelholt Svendsen 2 Automatisering Af Hverdagen Indhold Introduktion:...
1-1 Usability evaluering af den simple udgave
BILAG 1 s. 2 af 19 Bilag 1 1-1 Usability evaluering af den simple udgave...5 1-2 Heuristisk inspektion af den simple udgave...6 1-3 Usability evaluering af den avancerede udgave...8 1-4 Heuristisk inspektion
MP3 player med DMX interface.
Jægergårdsgade 152/05A DK-8000 Aarhus C DENMARK WWW.WAHLBERG.DK MP3 player med DMX interface. Funktion: En avanceret Mp3spiller med forskellige styringsmuligheder, velegnet til brug i museer, teatre, udstillinger
Motorline JAG (indbygget limit switch) Dansk brugermanual
Motorline JAG (indbygget limit switch) Dansk brugermanual Til brug for Motorline MC2 kontrolpanel i kombination med Motorline JAG eller Motorline LINCE 230Vac lågeautomatik. Motorline LINCE (kører på tid)
Københavns åbne Gymnasium Elevudsagn fra spørgeskemaundersøgelsen i 2q
Københavns åbne Gymnasium Elevudsagn fra spørgeskemaundersøgelsen i 2q 1.7 Overraskelser ved gymnasiet eller hf! Er der noget ved gymnasiet eller hf som undrer dig eller har undret dig? 20 Det har overrasket
JavaScript. nedarvning.
JavaScript er et sprog, der kan give en hjemmeside mere funktionalitet og gøre den interaktiv, så den reagerer på læsernes handlinger. CGI (Common Gateway Interface) har hidtil været de protokoller, man
Computerens Anatomi. Af Martin Arnetoft
Computerens Anatomi Af Martin Arnetoft Moores lov Moores lov siger, at antallet af transistorer på et stykke hardware over 18 eller 24 måneder fordobles. Denne lov bruges til at beskrive udviklingen indenfor
Internt interrupt - Arduino
Programmering for begyndere Brug af Arduino Internt interrupt - Arduino - Afslutning EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Intern interrupt Jeg vil rydde lidt op. Her er nogle punkter vil har glemt
Indholdsfortegnelse :
Rapporten er udarbejdet af Daniel & Kasper D. 23/1-2001 Indholdsfortegnelse : 1.0 STEPMOTEREN : 4 1.1 Stepmotorens formål : 4 1.2 Stepmotorens opbygning : 4 2.0 PEEL-KREDSEN 4 2.1 PEEL - Kredsen Generelt
Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK
Programmering for begyndere Brug af Arduino Programmeringskursus Interrupt - Arduino EDR Hillerød Knud Krogsgaard Jensen / OZ1QK Interrupts Programmeringskursus Genbrug Interrupts Betyder blot at man afbryder
DMP-368W DANISH side 1 af 16 BETJENINGSVEJLEDNING DMP-368W. www.denver-electronics.com COPYRIGHT DENVER ELECTRONICS ALLE RETTIGHEDER FORBEHOLDES
DMP-368W DANISH side 1 af 16 BETJENINGSVEJLEDNING DMP-368W BÆRBAR CD AFSPILLER www.denver-electronics.com COPYRIGHT DENVER ELECTRONICS ALLE RETTIGHEDER FORBEHOLDES ADVARSEL: UNDGÅ RISIKO FOR BRAND OG ELEKTRISK
