16.07.2013 Views

Projekt

Projekt

Projekt

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Aalborg Universitet<br />

Institut for Elektroniske Systemer <br />

Fredrik Bajers Vej 7 DK-9220 Aalborg Øst Telefon +45 96 35 87 00<br />

Titel: Digital diktafon<br />

Tema: Mikrodatamatsystemer<br />

<strong>Projekt</strong>periode: 3. februar 2003 - 28. maj 2003<br />

<strong>Projekt</strong>gruppe:<br />

421<br />

Gruppemedlemmer:<br />

Andreas Popp<br />

Esben Theill Christiansen<br />

Michael Smed Kristensen<br />

Michael P. Nielsen<br />

Steffen Holst<br />

Svend Aage Vedstesen<br />

Vejleder:<br />

Morten V. Fjordback<br />

Publikationer: 9<br />

Sider i<br />

Hovedrapport: 128<br />

Appendiks: 86<br />

Afsluttet: 28. maj 2003<br />

Synopsis<br />

Denne rapport indeholder dokumentation for udvikling<br />

og design af en digital diktafon baseret på en<br />

Motorola 68000 processor. Udviklingen af diktafonen<br />

er foregået efter Strukturet Program Udviklingmetoden.<br />

Diktafonen er en prototype og det er muligt at optage<br />

talebeskeder i 3 forskellige kvaliteter med øvre<br />

knækfrekvenser på henholdsvis 1,7 kHz, 3,4 kHz og<br />

6,8 kHz. Beskederne gemmes i diktafonens interne<br />

hukommelse. Beskederne kan efterfølgende afspilles<br />

på diktafonen. Diktafonen giver bl.a. mulighed for<br />

at slette og spole i beskederne samt at pause under<br />

optagelse og afspilning. På diktafonens display findes<br />

der information om tid i besked, beskednr., resttid<br />

i hukommelse mm. Systemet giver mulighed for,<br />

at overføre indtalte beskeder til en pc vha. kommunikation<br />

baseret på RS232C-standarden. Beskederne<br />

hentes og konverteres til filformatet "wave". Efter<br />

overførslen af beskederne slettes disse på diktafonen,<br />

hvorefter der er mulighed for at indstille diktafonens<br />

optagekvalitet til senere brug.<br />

Det kan konkluderes, at diktafonen virker i den laveste<br />

kvalitet og ikke som ønsket, også i de højere kvaliteter.<br />

Dette kan bl.a. skyldes, at interruptrutinen er for<br />

længe om at udføre de ønskede funktioner.


Aalborg University<br />

Institute of Electronic Systems <br />

Fredrik Bajers Vej 7 DK-9220 Aalborg East Telephone +45 96 35 87 00<br />

Title: Digital dictating machine<br />

Theme: Microcomputersystems<br />

Project period: Febuary 3rd 2003 - May 28th 2003<br />

Project group:<br />

421<br />

Group members:<br />

Andreas Popp<br />

Esben Theill Christiansen<br />

Michael Smed Kristensen<br />

Michael P. Nielsen<br />

Steffen Holst<br />

Svend Aage Vedstesen<br />

Supervisor:<br />

Morten V. Fjordback<br />

Publications: 9<br />

Pages in<br />

Main report: 128<br />

Appendix: 86<br />

Finished: May 28th 2003<br />

Abstract<br />

This report contains documentation for development and<br />

design of a digital dictating machine (DM) based on a<br />

Motorola 68000 processor. The development of the DM<br />

is based on the "Struktureret Program Udvikling" method.<br />

The DM is a prototype and it is possible to record messages<br />

in three different qualities, with upper cut-off frequencies<br />

at either 1.7 kHz, 3.4 kHz or 6.8 kHz. The messages<br />

are saved on the DM’s internal memory. It is then possible<br />

to play the messages on the device. The DM also<br />

provides opportunities such as deleting, fast forwarding<br />

and rewinding. It is also possible to pause the recording<br />

or playing of a message. On the display it is possible to<br />

get information about actual time in message, message<br />

number, remaining time in memory etc. The system makes<br />

it possible to transfer recorded messages to a PC via a<br />

communication protocol based on the RS232C standard.<br />

The messages are then converted to the "wave" file format.<br />

After a successful transfer of the messages they are<br />

deleted from the DM and it is then possible to change the<br />

sound quality in which the messages are recorded on the<br />

DM.<br />

The DM only works in the lowest quality and not as intended<br />

in the higher sound qualities. The reason why the<br />

dictating machine does not work as intended could be that<br />

the interrupt routine takes too long to execute the code.


Forord<br />

Denne projektrapport er udarbejdet af gruppe 421 på Institut for Elektroniske Systemer ved<br />

Aalborg Universitet. Den er skrevet som dokumentation for det udførte arbejde på 4. semester.<br />

Rapporten omhandler analyse, design, konstruktion og test af en digital diktafon opbygget<br />

omkring et mikrodatamatsystem. Rapporten er bygget op omkring Struktureret Program Udvikling,<br />

og der er forsøgt at bevare denne struktur gennem hele rapporten. Rapporten henvender sig<br />

primært til vejleder samt medstuderende og andre med interesse for mikrodatamatsystemer.<br />

Rapporten starter med en problemanalyse, som munder ud i en kravspecifikation og en accepttest.<br />

Denne anvendes til at designe både hardware og software til den digitale diktafon. Efter<br />

hovedrapporten følger appendiks, testrapporter og til sidst komponentliste, placeringstegning<br />

og diagrammer.<br />

Aalborg d. 28. maj 2003<br />

———————————— ————————————<br />

Andreas Popp Esben Theill Christiansen<br />

———————————— ————————————<br />

Michael Smed Kristensen Michael P. Nielsen<br />

———————————— ————————————<br />

Steffen Holst Svend Aage Vedstesen<br />

i


Forord<br />

Læsevejledning<br />

Det er tilstræbt at overholde ISO1000-standarden med hensyn til angivelse af elektriske symboler,<br />

enheder mm. Desuden gælder følgende:<br />

Tabel-, figur- og formelhenvisninger er skrevet som kapitel.nummer, hvornummer er et fortløbende<br />

nummer, for henholdsvis tabeller, figurer og ligninger i det pågældende kapitel.<br />

Kildehenvisninger er skrevet i firkantede parenteser med et indeks og årstal, samt eventuelt en<br />

sidehenvisning. Yderligere oplysninger om en kilde kan findes i litteraturlisten på side123, hvor<br />

kilderne er listet i alfabetisk rækkefølge efter forfatterens efternavn.<br />

Ordforklaringer ses i ordlisten på side 201. Første gang et ord fra listen nævnes, er dette indikeret<br />

ved at ordet er understreget, f.eks. ABEL.<br />

Benyttede datablade er findes som pdf-filer på den vedlagte cd-rom.<br />

Program Kode er, hvad enten det er C-, Assembler- eller ABEL-kode, vedlagt på cd-rom.<br />

Tilstandsmaskiner: "*"anvendes til at angive den næste tilstand i en tilstandsmaskine.<br />

Diagrammer ses bagerst i rapporten under Komponentliste og diagrammer. Hvis der henvises<br />

til diagram A, B eller C, menes der disse diagrammer.<br />

Software-moduler angives med modulnavn. Derved er det let at se, at der er tale om navnet på<br />

et modul.<br />

Elektriske symboler såsom modstande, transistorer osv. er indekseret som<br />

modulforkortelse.komponentnummer/symbol, hvorkomponentnummer/symbol er unikt for den<br />

ene komponent i modulet. Modulforkortelserne ses i ordlisten på side201. Hvis komponenter er<br />

angivet uden modulforkortelse, er der tale om generelle formler eller komponenter, som er ens<br />

gennem hele rapporten.<br />

Digital- og analog stel/forsyning angives med symboler på figuren herunder.<br />

Digital stel Analog stel<br />

Digital<br />

forsyning<br />

Analog<br />

forsyning<br />

Målinger med prober: Med mindre andet er angivet er referencen stel. I det tilfælde andet ikke<br />

er angivet optræder proben som belastingen.<br />

ii


Indholdsfortegnelse<br />

1 Indledning 1<br />

I Problemanalyse 3<br />

2 Foranalyse 5<br />

2.1 Formål . ...................................... 5<br />

2.2 Analyse ...................................... 5<br />

2.3 Nye ideer ..................................... 7<br />

2.4 Systemdefinitioner ................................ 9<br />

3 Kravspecifikation 11<br />

3.1 Indledning ..................................... 11<br />

3.2 Generel beskrivelse ................................ 11<br />

3.3 Specifikke krav . . ................................ 14<br />

3.4 Krav til eksterne grænseflader .......................... 24<br />

3.5 Krav til systemets ydelse . . ........................... 25<br />

3.6 Kvalitetsfaktorer . ................................ 25<br />

4 Accepttest-specifikation 26<br />

4.1 Indledning ..................................... 26<br />

4.2 Testemner ..................................... 26<br />

4.3 Testdesign ..................................... 28<br />

II Design af diktafon 31<br />

5 Systemdesign 33<br />

5.1 Systemoversigt . . ................................ 33<br />

5.2 Funktionsoversigt . ................................ 33<br />

iii


Indholdsfortegnelse<br />

5.3 HW/SW opdeling . . ............................... 37<br />

5.4 HW/SW grænseflader ............................... 38<br />

6 Hardwaredesign 40<br />

6.1 Strukturdesign ................................... 40<br />

6.2 Modulgrænseflader . ............................... 41<br />

6.3 Modulernes interface ............................... 46<br />

7 Softwaredesign 48<br />

7.1 Programdesign . . . ............................... 48<br />

7.2 Procesdesign/modulopdeling . .......................... 52<br />

7.3 Afspil_styring ................................... 52<br />

7.4 Optag_styring ................................... 54<br />

7.5 System_kontrol . . . ............................... 54<br />

7.6 Display_status ................................. 59<br />

7.7 Display_styring . . . ............................... 59<br />

7.8 Kval_data_overfør . ............................... 60<br />

7.9 Pc-software .................................... 60<br />

III Hardware-design 63<br />

8 CPU-modul 65<br />

8.1 Funktionsoversigt . . ............................... 65<br />

8.2 Løsningsmuligheder ............................... 66<br />

8.3 Design af CPU-modul ............................... 68<br />

8.4Test ........................................ 75<br />

8.5 Delkonklusion ................................... 77<br />

9 Hukommelsesmodul 78<br />

9.1 Funktionoversigt . . ............................... 78<br />

9.2 Løsningsmuligheder ............................... 78<br />

9.3 Design af hukommelsesmodul .......................... 78<br />

10 RS232-modul 80<br />

10.1 Funktionoversigt . . ............................... 80<br />

10.2 Design af RS232-modul . . . .......................... 81<br />

iv


Indholdsfortegnelse<br />

10.3 Delkonklusion . . . ................................ 82<br />

11 Mikrofonmodul 83<br />

11.1 Funktionsoversigt . ................................ 83<br />

11.2 Design af mikrofonmodul . . ........................... 84<br />

11.3 Test . . ...................................... 91<br />

11.4 Delkonklusion . . . ................................ 91<br />

12 Kvalitetsmodul 92<br />

12.1 Funktionoversigt . ................................ 92<br />

12.2 Løsningsmuligheder ............................... 93<br />

12.3 Design af kvalitetsmodul . . ........................... 94<br />

12.4 Simulering ..................................... 96<br />

12.5 Test . . ...................................... 97<br />

12.6 Delkonklusion . . . ................................ 97<br />

13 Højttalermodul 98<br />

13.1 Funktionsoversigt . ................................ 98<br />

13.2 Design af Højttalermodul . . ........................... 99<br />

13.3 Test . . ...................................... 101<br />

13.4 Delkonklusion . . . ................................ 101<br />

14 Knapmodul 102<br />

14.1 Funktionsoversigt . ................................ 102<br />

14.2 Design af knapmodul ............................... 103<br />

14.3 Test . . ...................................... 106<br />

14.4 Delkonklusion . . . ................................ 106<br />

15 Displaymodul 107<br />

15.1 Funktionsoversigt . ................................ 107<br />

15.2 Design af displaymodul . . . ........................... 107<br />

15.3 Delkonklusion . . . ................................ 109<br />

IV Software-design 111<br />

16 Softwareimplementation 113<br />

v


Indholdsfortegnelse<br />

16.1 Struktur af programmeringsfiler ......................... 113<br />

16.2 Struktur af headerfil . ............................... 113<br />

16.3 Implementering af tilstandsdiagram og flowdiagrammer ............. 114<br />

16.4 Diktafon . ..................................... 114<br />

16.5 Pc-sofware .................................... 117<br />

16.6 Delkonklusion ................................... 118<br />

17 Acceptest 119<br />

18 Konklusion 121<br />

Litteraturliste 123<br />

V Appendiks 129<br />

A Sampling- og rekonstruktionsteori 131<br />

B Timing af CPU 135<br />

C Interrupt 140<br />

D Filterberegning til højpasfilter 142<br />

E Wave-filformat 145<br />

F Seriel kommunikation 149<br />

G Protokol 153<br />

VI Testrapporter 157<br />

I CPU-modul 159<br />

II Mikrofonmodul 166<br />

III Kvalitetsmodulet 179<br />

IV Højttalermodul 185<br />

V Knapmodul 189<br />

vi


Indholdsfortegnelse<br />

VI Integration af hardware 195<br />

VII Pc-software 198<br />

Ordliste 201<br />

VII Komponentliste og diagrammer 205<br />

vii


Kapitel<br />

1<br />

Indledning<br />

En diktafon anvendes i mange professionelle henseender. Den anvendes blandt andet af læger,<br />

der i stedet for at skrive direkte i patienters journaler dikterer tilføjelser. Disse tilføjelser bliver<br />

da senere indskrevet af en sekretær.<br />

Optagelserne som sekretæren skal indskrive, er ofte gemt på analoge kassettebånd. Disse bånd<br />

bliver med tiden slidte, hvilket medfører en forringet lydkvalitet.<br />

Disse problemer ønskes forbedret, og lyden kunne med fordel gøres digital, og gemmes på<br />

diktafonen uden brug af bånd. Det indtalte vil da kunne overføres til en pc via en dockingstation.<br />

Dermed undgår man at skulle lagre det indtalte på kassettebånd. Dette fører til følgende<br />

initierende problem for projektet:<br />

Hvordan konstrueres en digital diktafon med pc-dockingstation?<br />

1


Del<br />

Problemanalyse I<br />

3


Kapitel<br />

2.1 Formål<br />

2<br />

Foranalyse<br />

Formålet med foranalysen er at analysere problemstillingen, for at skabe overblik og derefter<br />

opstille en kravspecifikation og en acceptestspecifikation.<br />

Disse anvendes derefter til struktureret at udvikle en diktafon, der skal overholde kravspecifikationen.<br />

Dette påvises, ved at diktafonen opfylder acceptestspecifikationen.<br />

2.2 Analyse<br />

2.2.1 Situationsbeskrivelse<br />

Situationsbeskrivelsen tager udgangspunkt i en tænkt situation på et hospital. En diktafon anvendes<br />

blandt andet på et hospital, hvor lægen dikterer, hvad der skal skrives ind i patientens<br />

journal. En sekretær skriver senere det dikterede ind i journalen. Disse oplysninger kan en sygeplejerske<br />

eller en anden læge anvende i behandlingen af patienten. Dette rigt billede af dette<br />

er vist på figur 2.1.<br />

Behandling<br />

Læge<br />

Patient<br />

Instruktioner Instruktioner<br />

Tale<br />

Undersøgelse<br />

Behandling<br />

Diktafon Afspiller<br />

Bånd Tale Indtastning<br />

Tilhørsforhold<br />

Sygeplejerske<br />

Sekretær<br />

PC<br />

Journal<br />

Figur 2.1: Rigt billede af diktafonen i anvendelse på et hospital. De ikke-brudte streger angiver<br />

informationsveje. De stiplede linier angiver f.eks. en behandling af patienten.<br />

5


Kapitel 2. Foranalyse<br />

Arbejdsgangen hvori selve diktafonen indgår er vist på figur2.2. Denne er vist generelt således,<br />

at det ikke nødvendigvis kun benyttes på et hospital, men også kunne være hos f.eks. en advokat.<br />

Brugeren giver instruktioner til diktafonen ved f.eks. at aktivere optagefunktionen, så der kan<br />

indtales beskeder på diktafonen. Dernæst sker der en overførsel af beskeder til afspilleren via et<br />

bånd. Sekretærens opgave er nu at omsætte beskeden, som evt. kun består af stikord, til tekst.<br />

Dette foregår ved at sekretæren giver instruktioner til afspilleren, hvorved beskeden afspilles.<br />

Sekretæren kan samtidig indtaste beskeden på en pc.<br />

Der kan opstå problemer eller tab af dyrebar tid, hvis der er flere beskeder på det samme bånd.<br />

Skal sekretæren finde én bestemt besked, skal han/hun spole frem eller tilbage for at finde det<br />

rigtige sted på båndet. Dette skyldes, at informationen på det analoge bånd kun er indtalt lyd og<br />

dermed en uopdelt informationsstrøm, hvor det ikke er muligt at adskille to beskeder.<br />

Bruger<br />

Instruktioner<br />

Tale<br />

Diktafon Afspiller<br />

Bånd<br />

Instruktioner<br />

Sekretær<br />

Tale Indtastning<br />

Figur 2.2: Arbejdsgangen hvori diktafonen indgår.<br />

For at skabe overblik listes processer, strukturer og problemer fra figur2.2:<br />

Processer<br />

¯ instruktioner til diktafon (optag, stop m.m.)<br />

¯ tale til og fra diktafon<br />

¯ instruktioner til afspiller (afspil, spol og stop)<br />

¯ tale fra afspiller til sekretær<br />

¯ indtastning på pc<br />

Strukturer<br />

¯ brugeren dikterer til eller aflytter diktafonen (anvendelse)<br />

¯ sekretæren lytter til båndet fra diktafonen (anvendelse)<br />

¯ sekretæren tilføjer data til journalen via indtastning på pc’en (produktion)<br />

Problemer<br />

6<br />

¯ det tager lang tid at springe mellem beskederne på diktafonen<br />

¯ det er svært at finde én bestemt besked<br />

¯ der kan opstå "båndsalat"<br />

¯ slidte bånd giver dårlig lydkvalitet<br />

PC


2.3 Nye ideer<br />

2.3. Nye ideer<br />

For at kunne komme med nye ideer til produktet kan man betragte forbilleder som f.eks. tilsvarende<br />

produkter. Desuden kan der kigges på såkaldte metaforer, som er produkter, der har<br />

funktioner, som kan tænkes benyttet i forbindelse med en digital diktafon.<br />

2.3.1 Forbilleder<br />

Et forbillede kan være en analog diktafon. Denne har knapper, som brugeren kan anvende til at<br />

styre diktafonen med. Disse knapper er:<br />

¯ Optag<br />

¯ Afspil<br />

¯ Stop<br />

¯ Pause<br />

¯ Spol frem/tilbage<br />

¯ Volumenkontrol<br />

Det optagede gemmes på analoge bånd.<br />

Et minimumsystem til en diktafon ville være, at brugeren har mulighed for at optage og stoppe<br />

en optagelse, og senere ville kunne afspille det på diktafonen eller et andet apparat, dette kræver<br />

en form for hukommelse. De andre knapper (funktioner) er ikke strengt nødvendige, men kan<br />

gøre diktafonen mere brugervenlig.<br />

Andre forbilleder er digitale diktafoner fra f.eks. producenten Olympus. Der ses på modellen<br />

VN-3600, som er en lille digital diktafon 96 ¢ 31 ¢ 215 mm [VN-3600, 2003]. Diktafonen<br />

har 3 optagekvaliteter, som giver mulighed for opbevaring af 91-364 minutters diktat. Kvaliteten<br />

afhænger af båndbredden og denne har betydning for samplingsfrekvensen. Det er muligt at<br />

tænde og slukke for diktafonen, for at spare på strømmen, når den ikke anvendes. På diktafonen<br />

er et lille display, som bl.a. giver mulighed for at se nummeret på den besked, som indtales eller<br />

afspilles. Det er muligt at springe mellem de forskellige beskeder, ligesom indtalte beskeder let<br />

kan slettes fra hukommelsen.<br />

Denne diktafon har den fordel, at den er mindre end de fleste analoge diktafoner, da den ikke<br />

er begrænset af de analoge bånds fysiske størrelse. Desuden kan den også indholde mere taletid<br />

end almindelige diktafonbånd, hvor de største kan indholde 180 minutter. Den helt store fordel<br />

frem for analoge diktafoner er, at der let kan skiftes mellem forskellige beskeder.<br />

2.3.2 Metaforer<br />

En MP3-afspiller/optager har mange af de samme funktioner som en digital diktafon. Dens<br />

formål er også at gemme lyddata, så de senere kan afspilles. MP3-afspilleren adskiller sig dog<br />

fra diktafonen ved, at den er lavet til gengivelse af musik. En MP3-afspiller kan endvidere spole<br />

7


Kapitel 2. Foranalyse<br />

i sangene og kan tilsluttes en pc, så MP3-filer kan overføres fra pc’en til MP3-afspilleren. MP3afspilleren<br />

har desuden mulighed for at slette samtlige sange.<br />

Telefonen er også en god metafor, da denne kan gengive lyd i en forståelig kvalitet. Det er normalt<br />

muligt at forstå, hvad personen i den anden ende siger. Telefoner anvender frekvensbåndet<br />

300-3400 Hz [Langford-Smith, 1997, side 630].<br />

Da kvaliteten i en telefon er forståelig, tages der udgangspunkt i denne. Der benyttes desuden<br />

to andre frekvensbånd, et med den dobbelte og et med den halve øvre frekvens. Se næste afsnit<br />

for begrundelse.<br />

Talegenerering<br />

Det følgende er baseret på [Strong/Plitnik, 1992, side 201-214]. Tale genereres ved lungerne,<br />

stemmebåndene og luftrøret, disse kaldes tilsammen for kilden. Det er stemmebåndenes vibrationer,<br />

når det kommer luft gennem dem, der giver lydens grundfrekvens. Lydens grundfrekvens<br />

varieres ved forskellige muskelspændinger i stemmebåndene. Når lyden kommer ud gennem<br />

svælget, munden og næsehulrummet, der tilsammen kaldes vokaltragten, skabes harmoniske<br />

overtoner1 , der sammen med grundfrekvensen giver lyd.<br />

For at øret skal opfatte lyden korrekt, er det vigtigt, at frekvensindholdet i talesignalet bibeholdes,<br />

hvorimod det ikke er vigtigt med fasebevarelse. Det har altså ingen betydning for en korrekt<br />

tolkning, at talesignalet inverteres [Crocker, 1998, side 1223-1224].<br />

Tale ligger i frekvensområdet 62-8000 Hz[Langford-Smith, 1997, side 630]. I tabel 2.1 ses sammenhængen<br />

mellem de valgte frekvensområder og beregnet tab i artikulation. Artikulation af<br />

tale er defineret som den procentdel af stavelser som bliver fortolket korrekt [Langford-Smith, 1997,<br />

side 628]. Det ses, at den højeste kvalitet bevarer en stor del af talen, hvorimod der går meget<br />

tabt i den dårligste kvalitet.<br />

Nedre frekvens Øvre frekvens Tab i artikulation<br />

300 Hz 1,700 kHz 41%<br />

300 Hz 3,400 kHz 12%<br />

300 Hz 6,800 kHz 4%<br />

Tabel 2.1: Sammenhængen mellem båndbredde og beregnet tab i artikulation ved tale<br />

[Langford-Smith, 1997, side 628].<br />

Samplingsfrekvenser<br />

Ud fra de tre øvre frekvenser fra tabel 2.1 og teorien fra appendiks A, kan tre samplingsfrekvenser<br />

fastlægges. Samplingssætningen siger, at samplingsfrekvensen skal være mindst dobbelt så<br />

høj som den øvre frekvens i det samplede; derfor fastlægges de tre samplingsfrekvenser for<br />

8<br />

1 Harmoniske overtoner er givet ved fharm N ¡ fgrund, hvor N er de naturlige tal.


2.4. Systemdefinitioner<br />

1,700 kHz, 3,400 kHz og 6,800 kHz til henholdsvis 4,000 kHz, 8,000 kHz og 16,000 kHz, da<br />

disse overholder samplingssætningen.<br />

Bitopløsning<br />

Med hensyn til bitopløsning, ved A/D-konvertering, skal signal/støjforholdet være minimum 27<br />

dB, for at der er forståelig tale uden tab i udtale [Witten, 1982, side 46]. Dette ønskes overholdt<br />

i diktafonen. Signal/støjforholdet for tale udregnes ved ligning2.1 , hvor σx Xm<br />

4 , B er bitopløsningen,<br />

Xm er det spændingsområde, hvori man arbejder og SNR er signal/støjforholdet i dB<br />

[Oppenheim/Schafer, 1999, ligning 4.124, side 196-197]<br />

SNR 10 ¡ log<br />

12 ¡ 2 2B σ 2 x<br />

X 2 m<br />

<br />

12 ¡ 22B X<br />

¡<br />

10 ¡ log<br />

2 m<br />

42 X 2 <br />

3<br />

10 ¡ log ¡ 22B<br />

m<br />

4<br />

Derved kan den mindst tilladelige bit-opløsning i diktafonen udregnes til 5 ved ligning2.2.<br />

2.3.3 Opsummering<br />

27 10 ¡ log 075 ¡ 2 2B¡<br />

1027 22B<br />

075<br />

B <br />

ln 1027<br />

075<br />

2 ¡ ln 2<br />

(2.1)<br />

469 5 (2.2)<br />

Udfra forbillederne og metaforerne kan der uddrages egenskaber, som ville kunne overføres<br />

til den konstruerede diktafon; enten direkte eller med modifikationer. En analog diktafon har<br />

mulighed for at optage, afspille, stoppe, spole frem/tilbage og justere volumen under afspilning.<br />

Det vil være praktisk hvis brugeren kunne spole i beskederne for at kontrollere korrektheden af<br />

det tidligere indtalte.<br />

Den digitale diktafon har mulighed for at optage med forskellige lydkvaliteter. Dette giver brugeren<br />

god mulighed for selv at vælge mellem kvalitet/kvantitet. Desuden kan VN-3600 skifte<br />

mellem de indtalte beskeder, hvilket kan spare meget tid. Der kan desuden også tændes og<br />

slukkes for diktafonen. MP3-afspilleren har udover den digitale diktafon mulighed for at slette i<br />

beskederne. Implementerer man denne funktion i en diktafon, har man mulighed for at overspille<br />

en forkert indtalt besked. Det kunne være hensigtsmæssigt, hvis beskeder på diktafonen kunne<br />

overføres til en pc via en dockingstation, således at det ikke er nødvendigt at have diktafonen,<br />

for at aflytte beskeder.<br />

2.4 Systemdefinitioner<br />

Set fra indtalerens side: En digital diktafon skal bruges til indtaling af mine beskeder. Diktafonen<br />

skal kunne gemme op til 60 minutters tale i dens hukommelse, og jeg skal kunne aflytte<br />

beskederne for at høre, om de er rigtige. Det skal være muligt at sætte diktafonen i en lader og<br />

samtidigt forbinde den til en pc, således at den bliver opladt og beskederne bliver overført til en<br />

pc.<br />

9


Kapitel 2. Foranalyse<br />

Set fra sekretærens side: En digital diktafon skal tilsluttes en pc, så jeg kan hente beskederne<br />

ind på min pc. Beskederne skal have et kendetegn, så jeg ved, hvilken journal jeg skal skrive, og<br />

være i en sådan kvalitet, at jeg kan forstå, hvad der bliver sagt.<br />

Set fra udviklerens side: Hukommelsen skal bestå af RAM til de indtalte beskeder og ROM til<br />

styreprogrammet. Det skal være muligt at ændre antallet af minutters tale i hukommelsen ved at<br />

ændre på optagekvaliteten. Den skal som standard arbejde i frekvensområdet op til 3,400 kHz.<br />

Beskederne skal nummereres fortløbende. Diktafonen skal via en RS232C-forbindelse tilsluttes<br />

en computer.<br />

10


3<br />

Kravspecifikation<br />

Kapitel<br />

3.1 Indledning<br />

3.1.1 Formål<br />

Formålet er at udvikle et prototypesystem bestående af en digital diktafon med dockingstation<br />

til en pc. Der skal kunne optages beskeder fra brugeren og disse skal kunne overføres til en pc.<br />

Der vil senere kunne blive korrigeret i kravspecifikationen, hvis det i design eller testfasen viser<br />

sig, at krav ikke er dækkende eller ikke er realiserbare.<br />

3.1.2 Referencer<br />

Kravspecikationen er udarbejdet på grundlag af foranalysen i kapitel2.<br />

3.1.3 Læsevejledning<br />

Der startes med en generel beskrivelse af systemet. Dernæst vil de mere specifikke krav blive<br />

præsenteret. Krav til systemets grænseflader, ydelse og til sidst kvalitetsfaktorer vil blive præsenteret.<br />

3.2 Generel beskrivelse<br />

3.2.1 Systembeskrivelse<br />

En overordnet skitse af systemet ses på figur 3.1. Den digitale diktafon skal kunne optage beskeder<br />

indtalt af brugeren. Beskederne skal kunne overføres til en pc. Ydermere skal det være<br />

muligt for brugeren at høre en allerede indtalt besked. Det skal være muligt at skifte mellem<br />

de indtalte beskeder, slette den sidst indtalte besked og spole i en besked. Instruktionerne til<br />

diktafonen skal foregå ved hjælp af trykknapper. Funktionerne og knapperne er beskrevet i det<br />

følgende afsnit.<br />

11


Kapitel 3. Kravspecifikation<br />

3.2.2 Systemets funktion<br />

PC<br />

Diktafon-<br />

System<br />

Figur 3.1: Skitse af diktafonsystemet koblet op til pc.<br />

Den digitale diktafon skal kunne optage og afspille beskeder. Derudover skal beskederne kunne<br />

overføres til en pc og aflyttes derpå. Der skal kunne gemmes 60 minutters tale på diktafonen.<br />

Dette kan gøres i én eller flere beskeder, dog maksimalt 20. Diktafonen skal som standard benytte<br />

frekvensområdet 300 Hz til 3,4 kHz.<br />

De funktioner brugeren skal have mulighed for at udføre ved hjælp af knapper, placeret på<br />

diktafonen, ses i tabel 3.1. Tabellen definerer navnet på en bestemt knap, dens symbol og giver<br />

en beskrivelse af funktionen for denne knap. Ideerne til disse funktioner stammer fra afsnit2.3.3.<br />

Der indføres desuden to virtuelle knapper, som kan påvirkes på pc’en. Disse er vist i tabel3.2.<br />

Knap Symbol Beskrivelse<br />

Optag 01 Start optagelse af ny besked<br />

Stop Stop optagelse eller afspilning<br />

Afspil Afspil valgt besked<br />

Pause Stopper afspilning/optagelse midlertidigt<br />

Næste besked Skifter til næste besked<br />

Foregående besked Skifter til foregående besked<br />

Spol frem Spoler frem i beskeden<br />

Spol tilbage Spoler tilbage i beskeden<br />

Slet Sletter sidst indtalte besked<br />

Reset R Sletter alle beskeder<br />

Tænd Slutter/afbryder strømmen<br />

Tabel 3.1: Knapper, deres symbol og beskrivelse af deres funktion på diktafon.<br />

Der skal overholdes krav om, at diktafonens lydkvalitet er tilstrækkelig til talegengivelse. Dette<br />

12


Knap Symbol Beskrivelse<br />

Skab forbindelse pc Opretter forbindelse til diktafonen<br />

Afbryd forbindelse pc Afbryder forbindelsen til diktafonen<br />

3.2. Generel beskrivelse<br />

Tabel 3.2: Virtuelle knapper, deres symbol og beskrivelse af deres funktion på pc’en.<br />

opnås ved benyttelse af de frekvensområder, som er angivet i tabel 2.1. Derfor skal det være<br />

muligt at skifte mellem disse frekvensområder.<br />

Brugeren skal have mulighed for at justere volumen af det, der afspilles på diktafonen.<br />

3.2.3 Systemets begrænsninger<br />

Systemet skal ikke kunne konvertere lyd til skrevet tekst. Dette kan overlades til andet software<br />

på pc’en, hvis det ønskes.<br />

Knapperne til fremspoling og tilbagespoling skal kun være anvendelige ved aflytning af beskederne,<br />

der skal altså ikke være mulighed for at spole i en besked og optage fra et sted, hvor man<br />

f.eks. har indtalt noget forkert eller lignende. Tænd-knappen implementeres ikke i praksis, da<br />

der benyttes en laboratoriestrømforsyning.<br />

Taletiden begrænses af den mængde hukommelse, som udleveres i komponentudleveringen.<br />

Opsætningen af talekvaliteten kan kun styres fra pc, når diktafonen er i dockingstationen. Talekvaliteten<br />

kan ikke ændres mellem forskellige beskeder på diktafonen.<br />

3.2.4 Systemets fremtid<br />

Systemet vil i fremtiden kunne blive forbedret med indførsel af talegenkendelse, der derved<br />

kunne oversætte de indtalte beskeder til tekst. Det skal gøres muligt at spole frem og tilbage i<br />

beskederne og fortsætte indtalelse fra et bestemt sted i en allerede indtalt besked.<br />

Diktafonen kan indeholde en større mængde hukommelse.<br />

Opsætningen af talekvalitet skal kunne ændres til hver besked, og det skal være muligt at gøre<br />

det direkte på diktafonen.<br />

3.2.5 Brugerprofil<br />

Brugerne forventes at være mennesker, der i forbindelse med deres arbejde har brug for at kunne<br />

diktere beskeder til senere indskrivning i journaler/dokumentation. Det er ikke nødvendigvis den<br />

samme person, som indtaler beskeden, der også renskriver journalen/dokumentationen.<br />

Det forventes ikke, at brugeren har forudgående kendskab til diktafonen, dvs. produktets betjening<br />

bør være enkel efter læsning af manual.<br />

13


Kapitel 3. Kravspecifikation<br />

3.2.6 Krav til udviklingsforløbet<br />

Overordnet skal SPU-modellen anvendes<br />

[Biering-Sørensen m. fl., 1996].<br />

Der skal med den færdige prototype udarbejdes en rapport, som minimum indeholder:<br />

¯ Design Denne dokumentation skal benyttes som dokumentation for designprocessen, så<br />

det bliver lettere at videreudvikle produktet.<br />

¯ Accepttest Denne specifikation benyttes til en senere test af systemet, for at afgøre om<br />

kravspecifikationen er opfyldt.<br />

3.2.7 Omfang af kundeleverance<br />

Da dette produkt er en prototype, skal produktet ikke direkte leveres til en kunde. Der skal ved<br />

projektaflevering afleveres en rapport indeholdende dokumentationen beskrevet i afsnit3.2.6.<br />

Hvis produktet blev udviklet til et færdigt slutbrugerprodukt, skulle hardwaredelen samt pcsoftware<br />

udleveres til kunden. Desuden skulle kunden have udleveret brugerdokumentation,<br />

dvs. brugervejledning og installationsvejledning.<br />

3.2.8 Forudsætninger<br />

Det forudsættes, at diktafonens hardwaredel baseres på en Motorola 68000 mikroprocessor. Pcsoftwaren<br />

udvikles, så den kan benyttes på en pc med operativsystemet Linux.<br />

Kommunikation mellem diktafon og pc forudsættes at foregå gennem en RS232C-forbindelse<br />

med en baud-rate på 115,2 kbps.<br />

Pc-softwaren skal skrive en wave-fil til hver af de indtalte beskeder på diktafonen.<br />

Pc-softwaren skal skrives i programmeringssproget C. Software på diktafonen skal skrives i<br />

Assembler og C.<br />

3.3 Specifikke krav<br />

3.3.1 Definitioner<br />

Enheder<br />

¯ Diktafon<br />

¯ Pc<br />

Variable<br />

For at opnå brugervenlighed kan der opstilles variable, som dækker over enten oplysninger eller<br />

fejlmeddelelser til brugeren. De variable, som indgår i visningen på displayet er vist i tabel3.3.<br />

14


Variabel Beskrivelse<br />

3.3. Specifikke krav<br />

Fejl/status Her vises, hvilken tilstand diktafonen er i. Tilstandene er<br />

vist i tabel 3.5. Er der sket en fejl, vises der en fejlmeddelse<br />

i stedet. Fejlene er vist i tabel 3.4.<br />

Besked nummer Det aktuelle besked nummer.<br />

Antal beskeder Det totale antal beskeder, som er gemt i diktafonens<br />

hukommelse.<br />

Tid i besked Det antal sekunder, som optageren/afspilleren er inde i den<br />

aktuelle besked.<br />

Længde af besked Den totale længde af den aktuelle besked.<br />

Resterende tid i hukommelsen Det antal minutter og sekunder, der er tilbage i hukommelsen.<br />

Tabel 3.3: De variable beskeder, som kan vises i display på diktafonen.<br />

Desuden er der også 5 forskellige fejlkoder og 2 oplysninger, som kan gives til brugeren. Fejl 1-<br />

3 fremkommer på diktafonens display under statusinformation, mens fejl 4 og 5 samt oplysning<br />

1 og 2 fremkommer på pc’en. Disse er vist i tabel 3.4. Fejlene og oplysningerne er fremkommet<br />

naturligt under udviklingen af de flowdiagrammer, som systemet skal følge. Flowdiagrammerne<br />

findes i afsnit 3.3.2.<br />

Tilstande<br />

Hermed menes, hvilke tilstande diktafonen kan være i, dvs. hvilken funktion diktafonen udfører.<br />

Tilstandene er beskrevet i tabel 3.5. Tilstandsdiagrammet for diktafonen findes på figur 3.2.<br />

Lovlige spring mellem tilstandene er fundet ved at sætte sig i brugerens sted, og derudfra bedømme<br />

den mest logiske sammenhæng mellem tilstandene samt ved udgangspunkt i afsnit2.3.<br />

Det er derfor kun de lovlige spring mellem tilstande, der er vist på figur3.2.<br />

3.3.2 Funktionelle krav<br />

De funktionelle krav vises ud fra brugerens synsvinkel, således at det er brugerens input, der får<br />

diktafonen til at ændre tilstand, og ændre beskeden på displayet. De funktionelle krav beskrives<br />

ud fra flowdiagrammer, og der tages udgangspunkt i tilstandsdiagrammet på figur3.2. Flowdiagrammerne<br />

vil fungere som specifikationer for systemet. I tabel 3.6 er der en forklaring af de<br />

symboler, der er anvendt i diagrammerne.<br />

For overskuelighedens skyld bliver nogle af tilstande forklaret på separate figurer.<br />

15


Kapitel 3. Kravspecifikation<br />

Fejlkode/oplysning Beskrivelse<br />

Fejl 1 Ugyldigt knaptryk i aktuel tilstand.<br />

Fejl 2 Hukommelsen er fuld.<br />

Fejl 3 Ingen besked indtalt i hukommelsen.<br />

Fejl 4 Der kunne ikke oprettes forbindelse til diktafonen.<br />

Fejl 5 Beskederne kunne ikke hentes.<br />

Fejl 6 Kommunikationsfejl!<br />

Fejl 7 Beskederne kunne ikke slettet.<br />

Oplysning 0 Der er oprettet forbindelse til diktafonen.<br />

Oplysning 1 Ingen beskeder på diktafonen.<br />

Oplysning 2 Beskederne er hentet på diktafonen. Beskederne på diktafonen<br />

slettes.<br />

Oplysning 3 Beskederne er slettet på diktafonen.<br />

Tabel 3.4: Fejlkoder og oplysninger til brugeren. Fejl 1-3 kan vises på diktafonen. De resterende<br />

vises på pc’en.<br />

01<br />

01<br />

01<br />

01<br />

00 11<br />

00 11<br />

R<br />

Figur 3.2: Tilstandsdiagram for diktafonen. Der ses de hændelser, forårsaget af knaptryk, som<br />

kan få diktafonen til at skifte tilstand.<br />

16<br />

R<br />

pc<br />

pc<br />

pc


Tilstand Symbol Beskrivelse<br />

3.3. Specifikke krav<br />

Stop Anvendes når diktafonen ikke er i gang med nogen funktioner,<br />

det kan f.eks. være efter reset eller afspilning.<br />

Afspil Anvendes når diktafonen har fået besked om, at den skal<br />

starte afspilning.<br />

Optag<br />

0 0 1 1<br />

Anvendes når diktafonen har fået besked om at starte en<br />

optagelse.<br />

Næste besked Anvendes når diktafonen skal skifte til næste besked.<br />

Foregående besked Anvendes når diktafonen skal skifte til foregående besked.<br />

Slet besked Anvendes når diktafonen skal slette den sidste besked.<br />

Reset R Anvendes når diktafonen skal resettes, så alle beskeder<br />

slettes.<br />

Pause-optag 00 11 Diktafonenen kan gå i denne tilstand, når den er i optagtilstanden.<br />

Pause-afspil Diktafonenen kan gå i denne tilstand, når den er i afspiltilstanden.<br />

Spol frem Når diktafonen skal spole frem, går den i denne tilstand.<br />

Tilstanden kan kun forekomme, hvis diktafonen allerede<br />

er i afspil-tilstanden.<br />

Spol tilbage Når diktafonen skal spole tilbage, går den i denne tilstand.<br />

Tilstanden kan kun forekomme, hvis diktafonen allerede er<br />

i afspil-tilstanden.<br />

Pc pc Når diktafonen har forbindelse til pc via RS232 forbindelse.<br />

Tabel 3.5: Diktafonens tilstande, deres symboler samt en forklaring af disse tilstande.<br />

17


Kapitel 3. Kravspecifikation<br />

Symbol Navn Betydning<br />

Tænd/reset<br />

cirkel Efter dette symbol er systemet i den tilstand, som er angivet i<br />

cirklen (i dette eksempel "afspil"). Tilstanden ophører, når der<br />

bliver peget over i en ny cirkel.<br />

Knap Angiver at der er sket et knaptryk. Med et knaptryk menes der<br />

enten et knaptryk på diktafonen eller et opkaldsforsøg fra pc’en,<br />

når den er i dockingstation.<br />

rektangel Angiver en handling, som skal udføres af systemet.<br />

rektangel<br />

med bløde<br />

hjørner<br />

Et program på pc’en startes eller afsluttes.<br />

rhombe Der foretages et boolsk valg. Er svaret "ja" fortsæt nedad, er svaret<br />

"nej" gå til højre eller venstre. Er der en eller flere knapper i<br />

rhomben, vil svaret være "ja", hvis det er en af de knapper, der<br />

blevet påvirket og "nej" hvis det ikke er nogen af dem.<br />

Tabel 3.6: Forklaring af de anvendte symboler i diagrammerne.<br />

Påvirkes knappen tænd, , startes systemet og displayet tændes. Herefter går systemet i resettilstanden,<br />

R , hvor alle beskeder slettes. Herefter føres systemet over i stoptilstanden. Dette er<br />

vist på figur 3.3.<br />

Stop<br />

Tilstanden stop, , er den tilstand, som diktafonen altid vil vende tilbage til - en form for ventetilstand.<br />

Den bliver i denne tilstand, indtil brugeren trykker på en knap. Se figur3.4.<br />

18


Opstart<br />

Tænd<br />

display<br />

R<br />

Slet alle<br />

beskeder<br />

Figur 3.3: Power-on/reset for diktafonen.<br />

Afspil<br />

R<br />

00 11<br />

Nej<br />

Knaptryk?<br />

R<br />

pc<br />

pc<br />

pc<br />

pc<br />

Ja<br />

R<br />

Ja<br />

Ja<br />

Ja<br />

Nej<br />

Nej<br />

Nej<br />

Fejl 1<br />

00 11<br />

00 11<br />

Ja<br />

Ja<br />

Nej<br />

Nej<br />

00 11<br />

00 11<br />

3.3. Specifikke krav<br />

Figur 3.4: Stoptilstand for diktafonen.<br />

Tilstanden afspil, , starter med at afspille den valgte besked, indtil denne er færdig. Imens<br />

venter diktafonen på knaptryk fra brugeren, som kan få den til at gå ud af denne tilstand. De<br />

mulige knaptryk, og dermed tilstande, er pause, stop og spol frem/tilbage. Funktionen af disse<br />

og andre knapper er vist på figur 3.5. Ved spol frem/tilbage er det valgt, at beskeden afspilles<br />

fire gange så hurtigt.<br />

Optag<br />

For at starte en ny optagelse, skal der være ledig hukommelse. Hvis hukommelsen ikke bliver<br />

fuld, har brugeren mulighed for at pause eller stoppe optagelsen vha. knapperne , 00 11 Funktionerne er vist på figur 3.6.<br />

og .<br />

Ja<br />

Nej<br />

19


Kapitel 3. Kravspecifikation<br />

20<br />

Nej<br />

Findes besked?<br />

Ja<br />

Start<br />

Afspilning<br />

Knaptryk?<br />

Ja<br />

Ja<br />

Ja<br />

Ja<br />

Fremspoling<br />

Besked ikke<br />

Slut?<br />

Ja<br />

Knaptryk?<br />

Ja<br />

Ja<br />

Forsæt<br />

Afspilning<br />

Nej<br />

Forsæt<br />

Afspilning<br />

Nej<br />

Nej<br />

Nej<br />

Nej<br />

Nej<br />

Fejl 3<br />

Fejl 1<br />

Stop<br />

spoling<br />

Ikke<br />

begyndelse<br />

af besked?<br />

Nej<br />

Nej<br />

Fejl 1 Fejl 1<br />

Nej<br />

Tilbagespoling<br />

Ja<br />

Knaptryk?<br />

Ja<br />

Ja<br />

Nej<br />

Figur 3.5: Afspiltilstand for diktafonen.<br />

Ja<br />

Pause i<br />

Afspilning<br />

Ja<br />

Knaptryk?<br />

Ja<br />

Ja<br />

Ja<br />

Nej<br />

Nej<br />

Nej<br />

Nej<br />

Fejl 1<br />

Stop<br />

Afspilning


Fortsæt<br />

Optagelse<br />

Fejl 1<br />

Nej<br />

Nej<br />

00 11<br />

Hukommelse<br />

fri?<br />

Ja<br />

Ny besked<br />

Start<br />

Optagelse<br />

Hukommelse<br />

fri?<br />

Ja<br />

Knaptryk?<br />

Ja<br />

Pause i<br />

Optagelse<br />

Knaptryk?<br />

Ja<br />

Ja<br />

01<br />

01<br />

Ja<br />

Ja<br />

00 11<br />

Ja<br />

Fortsæt<br />

Optagelse<br />

Nej<br />

Nej<br />

Nej<br />

Nej<br />

Nej<br />

Nej<br />

Fejl 2<br />

Fejl 1<br />

Stop<br />

Optagelse<br />

Figur 3.6: Optagtilstand for diktafonen.<br />

3.3. Specifikke krav<br />

21


Kapitel 3. Kravspecifikation<br />

Slet<br />

Hvis der findes beskeder i hukommelsen, slettes den sidst indtalte besked. Dette er vist på figur<br />

3.7.<br />

Skift til næste/foregående nummer<br />

Findes der beskeder i hukommelsen, skiftes til henholdsvis den næste eller den foregående besked<br />

jf. figur 3.8. Dette kan være den samme besked, hvis der kun er én besked i hukommelsen.<br />

Hvis den aktuelle er den sidste kan der springes frem til den første besked og omvendt.<br />

Beskeder i<br />

hukommelse?<br />

Ja<br />

Slet sidst indtalte<br />

besked<br />

Nej<br />

Fejl 3<br />

Figur 3.7: Sletning af beskeder for diktafonen.<br />

Pc<br />

Nej<br />

Beskeder i<br />

hukommelse?<br />

Ja<br />

Ja<br />

Gå til næste<br />

besked<br />

Nej<br />

Fejl 3<br />

Gå til forrige<br />

besked<br />

Figur 3.8: Skift til næste/foregående nummer<br />

for diktafonen.<br />

Den digitale diktafon skal kunne komme i kontakt med en pc. Denne kontakt kan ses fra henholdsvis<br />

diktafonens og pc’ens side. Forbindelsen skal kunne etableres fra pc’en, hvorefter pc’en<br />

overtager styringen af diktafonen og deaktiverer knapperne på diktafonen. Figur3.9 viser denne<br />

situation set fra diktafonen, når forbindelsen er etableret.<br />

Forbindelsen mellem diktafonen og pc’en via RS232C-forbindelsen skabes fra pc’en ved at<br />

eksekvere et program på pc’en. På figur 3.10 ses flowet i dette program. Det bemærkes, at det er<br />

brugeren, som skal angive, om kvaliteten skal indstilles, samt hvad den evt. skal indstilles til vha.<br />

tastaturet. Data gemmes inde i en undermappe under brugerens eget hjemmebibliotek. Denne<br />

mappe, "diktafon", forudsættes at være på pc’en. Modulet skal oprette et underbibliotek med<br />

aktuel dato og klokkeslæt, som navn, og alle beskeder vil blive placeret i denne. Beskederne skal<br />

gemmes i denne mappe med navnet "besked1.wav"for første besked "besked2.wav"for anden<br />

besked osv.<br />

22


pc<br />

Knapperne<br />

deaktiveres<br />

Styringen<br />

overgår til pc<br />

pc<br />

Ja<br />

Styringen<br />

gives tilbage<br />

Knapperne<br />

aktiveres<br />

Nej<br />

Figur 3.9: Kontakten mellem diktafon<br />

og pc set fra diktafonens<br />

side.<br />

Fejl 5<br />

Start program<br />

Opret forbindelse<br />

Forbindelse?<br />

Ja<br />

Er der data?<br />

Ja<br />

Hent indstilling<br />

og data<br />

Data konverteres<br />

og gemmes<br />

Nej<br />

Er data hentet?<br />

Ja<br />

Slet data på<br />

diktafon<br />

Oplysning 2<br />

Nej<br />

Nej<br />

3.3. Specifikke krav<br />

Fejl 4<br />

Oplysning 1<br />

Indstil<br />

kvalitet?<br />

Ja<br />

Indstilling foretages<br />

Afslut program<br />

Figur 3.10: Kontakten mellem diktafon og pc set fra<br />

pc’ens side.<br />

Nej<br />

23


Kapitel 3. Kravspecifikation<br />

3.4 Krav til eksterne grænseflader<br />

3.4.1 Brugergrænseflade<br />

Brugergrænsefladen på diktafonsiden ses på figur 3.11. Brugeren skal betjene diktafonen via<br />

trykknapper. Den enkelte trykknap skal kun have én funktion. Der skal ikke anvendes menuer<br />

til at betjene diktafonen.<br />

Diktafonen skal kunne sluttes til dockingstationen ved at tilslutte et kabel til et stik på diktafonen.<br />

Via dockingstationen skal det være muligt for brugeren at downloade de indtalte beskeder<br />

til en pc. Dette skal gøres ved et interaktivt software-program på dansk. Programmet skal være<br />

tekstbaseret. Installation af hardware og software skal være veldokumenteret, så brugeren ikke<br />

kan misforstå fremgangsmåden. Dette vil dog ikke blive realiseret i dette projekt.<br />

00 11<br />

00 11<br />

00 11<br />

Mikrofon<br />

01<br />

3.4.2 Hardwaregrænseflade<br />

Statusinformation<br />

Resterende tid i hukommelsen<br />

Antal beskeder<br />

Besked nr. Længde af besked<br />

Tid i besked<br />

000000<br />

111111<br />

000000<br />

111111<br />

000000<br />

111111<br />

000000<br />

111111<br />

000000<br />

111111<br />

000000<br />

111111<br />

000000<br />

111111<br />

000000<br />

111111<br />

000000<br />

111111<br />

000000<br />

111111<br />

000000<br />

111111<br />

000000<br />

111111<br />

000000<br />

111111<br />

R<br />

Højttaler<br />

Vol<br />

Figur 3.11: Brugergrænsefladen<br />

Input til diktafonen er menneskelig tale og knaptryk. Diktafonen har også et input fra en strømforsyning.<br />

Desuden er der et kombineret input og output til/fra en pc via en RS232C-forbindelse.<br />

Output fra diktafonen er lyd via en højttaler.<br />

3.4.3 Kommunikationsgrænseflade<br />

Kommunikationen mellem diktafon og pc skal overholde RS232C-standarden.<br />

3.4.4 Software-grænseflade<br />

Pc-softwaren skal specificeres til at kunne fungere på en pc med styresystemet Linux.<br />

Softwaren på diktafonen skal fungere på en processor af typen MC68000.<br />

24


3.5 Krav til systemets ydelse<br />

3.5. Krav til systemets ydelse<br />

Diktafonen skal kunne reagere på knaptryk indenfor 0,5 s, da det forventes, at dette er hurtigt<br />

nok til ikke at genere brugeren. Dvs. at optagelse skal starte indenfor 0,5 s efter tryk på optageknappen.<br />

Diktafonen skal mindst kunne lagre 2 minutters tale i den dårligste kvalitet, da der<br />

er tale om en prototype, hvor der kun skal demonstreres, at det er muligt at gemme tale.<br />

3.6 Kvalitetsfaktorer<br />

Kvalitetsfaktorerne vægtes efter en 5 trins skala, hvor 1 er ukritisk og 5 er særdeles vigtigt.<br />

Pålidelighed tildeles værdien 3. De lagrede beskeder må ikke forsvinde ved brug af diktafonen<br />

i minimum 8 timers drift (svarende til ca. en arbejdsdag). Det forudsættes, at strømudfald<br />

ikke finder sted.<br />

Vedligeholdelsesvenlighed tildeles værdien 4, hvilket betyder at:<br />

¯ placering af komponenter på boardet skal være overskuelig og let tilgængelig.<br />

¯ der skal være dokumentation af komponentplacering og forbindelser.<br />

¯ softwaren skal være overskueligt opbygget, dvs. ved brug af moduler, kommentarer<br />

til kode samt logisk navngivning af moduler, funktioner og variable.<br />

Udvidelsesvenlighed tildeles værdien 2, da der ikke ønskes en udvidelse af produktet efter<br />

semesteret er afsluttet.<br />

Brugervenlighed tildeles værdien 3, hvilket indebærer at:<br />

¯ det skal fremgå tydeligt af knapperne, hvilken funktion de har.<br />

¯ det skal fremgå af displayet, når der er fejlbetjening af diktafonen.<br />

¯ det skal fremgå af displayet, hvilken tilstand diktafonen befinder sig i.<br />

Genbrugbarhed tildeles værdien 2. Den anvendte hardware skal kunne skilles ad og genbruges.<br />

Softwaremoduler m.m. skal kunne kopieres og genbruges i andre applikationer.<br />

Integritet tildeles værdien 2. Da prototypen har en stationær spændingsforsyning, er det acceptabelt,<br />

at lagrede beskeder samt indstilling af kvaliteten slettes ved strømsvigt eller udslag<br />

i forsyningen. Styreprogrammet må dog ikke kunne slettes.<br />

Sikkerhed tildeles værdien 1, da det kun er en prototype og der ikke er andre end projektgruppen,<br />

der anvender den. Laboratoriereglerne skal dog overholdes. Hvilket vil sige:<br />

¯ Ingen DC spændinger over 60 V<br />

¯ Ingen AC spændinger over 25 V<br />

Funktion tildeles værdien 4, da det er vigtigt, at diktafonen gør det, man ønsker. Det vil sige,<br />

at systemet skal følge flowdiagrammerne i afsnit 3.3.2.<br />

25


Kapitel<br />

4.1 Indledning<br />

4.1.1 Formål<br />

4<br />

Accepttestspecifikation<br />

Formålet med en accepttest er at have dokumentation for, at kravspecifikationen er opfyldt.<br />

4.1.2 Omfang og begrænsning<br />

Accepttesten er udfærdiget på baggrund af kravspecifikationen i kapitel3. De enkelte testemner<br />

begrundes med referencer til kravspecifikationen.<br />

Accepttesten skal omfatte hele produktet, men der udfærdiges ikke testdesign for samtlige<br />

testemner, da dette er trivielt. Der udarbejdes i stedet en skabelon samt en uddybning af et<br />

enkelt testemne. Test af de andre testemner foregår analogt hermed.<br />

4.1.3 Godkendelse<br />

Det er projektgruppen, som skal godkende produktet og vurdere, om det lever op til de opstillede<br />

krav.<br />

For at produktet kan blive godkendt, skal acceptesten være udført, hvor alle punkter i denne er<br />

godkendt.<br />

4.2 Testemner<br />

Testemnerne deles op i fire grupper, da dette vil gøre det lettere at overskue.<br />

Efter hver test er der i parentes angivet hvor kravet findes til den pågældende test.<br />

4.2.1 Funktionsmæssige emner<br />

26<br />

1. Dækker diktafonen det krævede frekvensen område? (afsnit2.3)


2. Samples der med de korrekte frekvenser? (afsnit 2.3)<br />

3. Kan man afspille en besked på diktafonen? (Figur3.5)<br />

4. Kan man indtale en besked på diktafonen? (Figur3.6 og afsnit 3.3.2)<br />

5. Melder diktafonen fejl, hvis hukommelsen er fuld? (Afsnit3.3.1)<br />

6. Kan der afspilles forståelig tale fra diktafonen? (Afsnit3.2.2 og tabel 2.1)<br />

4.2. Testemner<br />

7. Kan der minimum opbevares 2 minutters tale i diktafonens hukommelse? (Afsnit3.5)<br />

8. Kan der spoles frem og tilbage i beskeder? (Figur3.5)<br />

9. Kan der skiftes til foregående og næste besked? (Figur3.8)<br />

10. Kan den sidst indtalte besked slettes fra diktafonen? (Figur3.7)<br />

11. Er det muligt at slette alt gemt lyddata ved tryk på reset-knappen? (Figur3.3)<br />

4.2.2 Kommunikation med pc<br />

12. Kan softwaren benyttes på en pc med styresystemet Linux? (Afsnit3.4.4)<br />

13. Kan der kommunikeres med en pc med en RS232C-forbindelse? (Afsnit3.4.3)<br />

14. Kan talekvaliteten ændres fra pc’en? (Afsnit 3.2.3)<br />

15. Kan de indtalte beskeder overføres til en pc og konverteres til en wave-fil? (Figur3.9 og<br />

3.10)<br />

16. Slettes diktafonens hukommelse ved succesfuld dataoverførsel til pc’en? (Figur3.9 og<br />

3.10)<br />

4.2.3 Brugerinterface<br />

17. Reagerer diktafonen på knaptryk indenfor 0,5 s? (Afsnit3.5)<br />

18. Viser diktafonens display hvilken funktion, der er aktiveret? (Afsnit3.3)<br />

19. Giver diktafonen de korrekte fejlmeddelser ved fejlbetjening? (Afsnit3.3.1)<br />

20. Aktiveres den ønskede funktion ved tryk på tilhørende knap? (Afsnit3.2.2 og tabel 3.1)<br />

21. Viser displayet alle de krævede informationer? (Tabel3.3 og 3.4)<br />

4.2.4 Kvalitetskrav<br />

Integritet<br />

22. Slettes lagrede beskeder på diktafonen ved strømsvigt på denne? (Afsnit3.6)<br />

27


Kapitel 4. Accepttest-specifikation<br />

Pålidelighed<br />

23. Kan diktafonen opbevare indtalte beskeder i minimum 8 timer uden strømsvigt? (Afsnit<br />

3.6)<br />

Vedligeholdelsesvenlighed<br />

24. Er der kommentarer til funktioner i software? (Afsnit3.6)<br />

25. Er komponentplacering og ledningsforbindelser dokumenteret? (Afsnit3.2.6 og 3.6)<br />

Brugervenlighed<br />

26. Fremgår det af knapperne, hvilken funktion de har? (Afsnit3.6)<br />

Genbrugbarhed<br />

27. Kan hardwaren skilles ad og genanvendes? (Afsnit3.6)<br />

28. Er softwaren opbygget i moduler? (Afsnit 3.6)<br />

Sikkerhed<br />

29. Anvendes der kun DC spændinger under 60 V? ( Afsnit 3.6)<br />

30. Anvendes der kun AC spændinger under 25 V? (Afsnit 3.6)<br />

Funktion<br />

31. Følger systemet flowdiagrammerne? (Afsnit 3.3.2 og 3.6)<br />

4.3 Testdesign<br />

For at udføre test 1 til 23 skal diktafonen være tændt. De nødvendige forudsætninger skal være<br />

opfyldt, før testen startes. Et eksempel kunne være, at der skal være lagret beskeder på diktafonen,<br />

før en af disse skal afspilles (test 3).<br />

For at udføre test 24 til 30 skal der generelt kigges i den medfølgende dokumentation til diktafonen<br />

for at afgøre, om testen bliver udført korrekt. Eksempelvis test28, hvor der skal undersøges<br />

i programkoden, om denne er opbygget i moduler.<br />

Test 31 udføres ved at teste diktafonens funktion vha. flowdiagrammerne.<br />

Herefter følger et eksempel på, hvordan en test kunne se ud. Det valgte testemne er nr.4. Denne<br />

test finder sted ud fra flowdiagrammet på figur 3.6.<br />

4.3.1 Testspecifikation for test 4 - Kan man indtale en besked på diktafonen?<br />

Udgangspositionen for denne test er stoptilstanden. Der er desuden tre mulige startscenarier; der<br />

er fri plads i hukommelsen, hukommelsen er fuld eller der er lagret 20 beskeder i hukommelsen.<br />

28


Scenarie Forventet resultat<br />

Fri plads i hukommelsen Ny besked oprettes og optagelse starter<br />

4.3. Testdesign<br />

Hukommelse fuld Fejl 2 skrives ud i displayet og diktafonen går i stoptilstand<br />

20 beskeder i hukommelsen Fejl 2 skrives ud i displayet og diktafonen går i stoptilstand<br />

Efter påbegyndt optagelse skal diktafonen kontrollere, om der foretages et knaptryk eller hukommelsen<br />

bliver fyldt op.<br />

Scenarie Forventet resultat<br />

Fri plads i hukommelsen Optagelse fortsætter<br />

Hukommelse fuld Fejl 2 skrives ud i displayet og diktafonen går i stoptilstand<br />

Ved knaptryk kontrolleres om det enten er pause- eller stopknappen, der er blevet påvirket.<br />

Scenarie Forventet resultat<br />

Pauseknappen påvirkes Optagelsen pauses<br />

Stopknappen påvirkes Optagelsen stoppes og diktafonen går i stoptilstand<br />

Andet knaptryk Fejl 1 skrives ud i displayet og optagelsen fortsættes<br />

I pausetilstanden afventer diktafonen et knaptryk. Ved knaptryk kontrolleres om det enten er<br />

optag, pause- eller stopknappen, der er blevet påvirket.<br />

Scenarie Forventet resultat<br />

Optageknappen påvirkes Optagelsen fortsættes<br />

Pauseknappen påvirkes Optagelsen fortsættes<br />

Stopknappen påvirkes Optagelsen stoppes og diktafonen går i stoptilstand<br />

Andet knaptryk Fejl 1 skrives ud i displayet og optagelsen forbliver pauset<br />

Opnås de forventede resultate,r kan der indtales en besked på diktafonen og testen anses som<br />

værende opfyldt.<br />

De resterende testcases udføres på ligende vis.<br />

29


Del<br />

Design II af<br />

diktafon<br />

31


Kapitel<br />

5<br />

Systemdesign<br />

På baggrund af foranalysen og kravspecifikationen opstilles et overordnet systemdesign, som<br />

siden opdeles i HW- ogSW-design. I dette systemdesign gives en systemoversigt, der indeholder<br />

de interagerende dele i det samlede system samt kommunikationen mellem disse, altså en<br />

oversigt over interne og eksterne grænseflader.<br />

Herefter opstilles der, udfra systemoversigten, en funktionsoversigt baseret på kravspecifikationen.<br />

Denne funktionsoversigt beskriver systemets hovedfunktion og tilhørende underfunktioner<br />

og deres indbyrdes kommunikation. Udfra funktionsoversigten opdeles systemet i en HW- og<br />

SW-del, og disses grænseflader defineres.<br />

5.1 Systemoversigt<br />

På figur 5.1 ses diktafonsystemets I/O-relationer med bruger og pc. Figuren er opstillet i forhold<br />

til kravspecifikationens afsnit 3.2.1.<br />

Pc<br />

5.2 Funktionsoversigt<br />

slette beskeder<br />

kvalitetsindstilling<br />

tale<br />

Diktafon<br />

tale<br />

Bruger<br />

trykknapper<br />

display Bruger<br />

Input<br />

Output<br />

beskeder<br />

Figur 5.1: I/O-relationer for diktafonsystemet<br />

Funktionsoversigten skal udfærdiges udfra tilstandsdiagrammet for diktafonen på figur 3.2.<br />

Funktionsoversigten ses på figur 5.2, og beskriver systemets funktioner og kommunikationen<br />

Pc<br />

33


Kapitel 5. Systemdesign<br />

mellem dem. Funktionerne fremkommer fra kravspecifikationen og systemoversigten. F.eks.<br />

fremkommer RS232-interfacet ud fra forudsætningerne i kravspecifikationens afsnit3.2.8. Display_styring<br />

kommer fra tabel 3.3. Fra systembeskrivelsen, afsnit 3.2.1, kommer Knapper, som<br />

er et sted, hvor data opstår. De øvrige funktioner tager analogt hermed udgangspunkt i kravspecifikationen.<br />

Implementeringen af flowkontrol vha. interrupt er gjort med System_kontrol.<br />

Denne funktion bestemmer udfra funktionernes interrupt-niveau, hvilke funktionskald, der er<br />

gyldige i de forskellige tilstande.<br />

Som understøttelse til funktionsoversigten er der tabellerne 5.1 og 5.2, som beskriver hhv. systemets<br />

funktioner og systemets registre.<br />

Pc-SW<br />

Data<br />

Diktafon-<br />

program<br />

Knap_<br />

styring<br />

Knapsignal<br />

Knapper<br />

Knaptryk<br />

Bruger<br />

Visuel infomation<br />

Operativsystem<br />

Instr.<br />

Instr.<br />

Display_status<br />

Display<br />

Data<br />

Display_status<br />

Display_<br />

styring<br />

Bruger<br />

Instr. Infomation<br />

Data<br />

pc<br />

Instr.<br />

Lyddata Instr. Kval<br />

RS232-interface<br />

Kval<br />

System_<br />

kontrol<br />

Instr.<br />

Diktafon-SW<br />

HW<br />

Optag_<br />

styring<br />

Lyddata<br />

Lyddata<br />

Lyddata Instr. Kval Lyddata<br />

Data<br />

Kval_data_<br />

overfør<br />

Info<br />

Lyddata<br />

Knap_status<br />

Instr.<br />

Instr.<br />

Data<br />

Data<br />

Instr.<br />

Afspil_<br />

styring<br />

Kval.<br />

Kvalitet_status<br />

Instr.<br />

Kval.<br />

Højttaler_<br />

styring<br />

CLK<br />

Højttalerspænding<br />

Instr.<br />

Kvalitet_<br />

styring<br />

Instr.<br />

Højttaler<br />

Lyd<br />

Mikrofon<br />

Lyddata Mikrofonspænding<br />

Instr. Mikrofon_<br />

styring<br />

Lyddata<br />

Bruger<br />

Figur 5.2: Funktionsoversigt for diktafonsystemet. Der er også angivet en opdeling mellem HW<br />

og SW. Firkantede kasser angiver, hvor data opstår eller ender. Ellipser angiver, hvor<br />

input transformeres til outputdata. De ikke-lukkede kasser angiver et register eller<br />

lager.<br />

Instruktionerne (Instr.), som er vist på figur5.2, mellem f.eks. System_kontrol og Optag_styring<br />

kan findes i tilstandsdiagrammet på figur 3.2. Hvis diktafonen er ved at optage, kan man trykke<br />

på for at pause og eller 00 11 for at optage igen. Ellers kan man trykke på for at stoppe<br />

optagelsen. Der henvises til sidstnævnte figur for instruktioner mellem de øvrige funktioner.<br />

Med hensyn til tryk på og , så er det System_kontrol, der opdaterer Lyddata-registeret, så<br />

det er det rette nummer, der bliver afspillet.<br />

34<br />

Lyd


Funktion Forklaring<br />

System_kontrol<br />

5.2. Funktionsoversigt<br />

¯ Aflæser information i Knap_status-registeret ved modtagelse<br />

af instruktion fra Knap_styring. Herudfra skal Afspil_styring<br />

og Optag_styring påvirkes.<br />

¯ Giver de datainformationer til Display_status-registeret, som<br />

ønskes vist i displayet (se tabel 3.3).<br />

¯ Hente information om antal beskeder fra Lyddata-registeret.<br />

Knap_styring Skal overvåge om der er foretaget knaptryk, og er dette tilfældet,<br />

skal den gemme den sidst trykkede knap i registeret Knap_status, og<br />

sende instruktion herom til System_kontrol.<br />

Display_styring Skal skrive indholdet af registeret Display_status ud på displayet.<br />

Kval_data_overfør Skal styre overførslen af indholdet af Lyddata-registeret til<br />

pc’en og overførslen af Kvalitet_status-registeret til diktafonen.<br />

Ændres kvaliteten fra pc’en, skal denne skrive til Kvalitet i<br />

Kvalitet_status-registeret.<br />

Afspil_styring Skal styre afspilningen af lyddata når funktionen påvirkes af System_kontrol.<br />

Dette skal foregå ved, at når Afspil_styring modtager<br />

instruktion om at sende lyddata, skal Afspil_styring sende instruktion<br />

til Højttaler_styring og derefter lyddata dertil.<br />

Højttaler_styring Skal konvertere lyddata fra Afspil_styring til en analog højttalerspænding,<br />

når der modtages instruks herom fra Afspil_styring. Hastigheden<br />

af denne konvertering styres af Kvalitet_styring.<br />

Optag_styring Skal styre optagelsen af lyddata, når funktionen påvirkes af System_kontrol.<br />

Optag_styring modtager instruktion om, at lyddata fra<br />

Mikrofon_styring er klar. Herefter afsender Optag_styring instruktion<br />

til Mikrofon_styring og modtager lyddata derefter.<br />

Mikrofon_styring Skal konvertere en analog spænding fra mikrofonen til en digital<br />

værdi, som skal sendes til Optag_styring, når instruktion herom modtages.<br />

Når data er klar sendes der besked herom til System_kontrol.<br />

Frekvensen af denne konvertering styres af Kvalitet_styring.<br />

Kvalitet_styring Skal ud fra Kvalitet_status styre hvilken hastighed Mikrofon_styring<br />

og Højttaler_styring skal konvertere med. Kvalitet_styring<br />

benytter en clock, CLK, til at styre samplingshastigheden<br />

med.<br />

RS232-Interface Skal varetage kommunikation mellem pc og Kval_data_overfør.<br />

Operativsystem Er den softwaremæssige grænseflade til pc.<br />

Diktafonprogram Softwareapplikation, som skal varetage funktionerne fra kravspecifikationens<br />

afsnit 3.3.2: slet lyddata, overførsel af lyddata og kvalitetsindstilling.<br />

Tabel 5.1: Forklaring af funktionerne på figur 5.2.<br />

35


Kapitel 5. Systemdesign<br />

Register Forklaring<br />

Knap_status Indeholder hvilken knap, der sidst er blevet påvirket.<br />

Display_status Indeholder de fejl, som skal skrives ud på displayet.<br />

Lyddata Indeholder lyddata, som kommer fra mikrofonen. Indholder også information<br />

om antal beskeder i registeret og længden af dem samt<br />

information og kvaliteten.<br />

Kvalitet_status Indeholder den valgte kvalitetsindstilling, der er blevet indstillet fra<br />

pc’en.<br />

Tabel 5.2: Forklaring af registre på figur 5.2.<br />

I forbindelse med kald af funktioner, spring mellem funktioner og tilgåelse af registre, findes<br />

der to mulige løsninger for flowkontrol: polling og interrupt.<br />

5.2.1 Flowkontrol<br />

Ved polling afventer man hele tiden, om en eller flere funktioner bliver aktiveret. Hvis en funktion<br />

bliver aktiveret, så afvikler man funktionen. Dette betyder, at den funktion, som først aktiveres,<br />

afvikles først. Denne flowkontrol tager ikke hensyn til funktionernes prioritet, men anvender<br />

"først til mølle-princippet. Ved et kig på funktionsoversigten på figur 5.2, kan denne<br />

situation i forbindelse med System_kontrol overvejes. Hvis man f.eks. trykker på 00 11 , så aktiveres<br />

funktionen Optag_styring og en sample gemmes i lyddata-registret. Denne procedure<br />

vil fortsætte indtil, Optag_styring finder ud af, at der er trykket på eller . Dette vil betyde,<br />

at Optag_styring er nødt til at kunne læse i Knap_status-registret. Derudover skal Optag_styring<br />

opdatere Display_status-registret, hvilket betyder, at Optag_styring bliver en<br />

slags System_kontrol, når denne er aktiveret. Altsammen betyder, at koblingen bliver meget stor<br />

og tætheden lille, som er uønsket i forbindelse med et systemdesign [Biering-Sørensen m. fl., 1996,<br />

s. 143].<br />

Figur 3.2 er karakteriseret ved, at bestemte knaptryk får diktafonen til at gå i bestemte tilstande.<br />

F.eks. betyder et tryk på , at diktafonen går i afspil-tilstanden, . I denne tilstand kan man<br />

f.eks. ikke trykke på 00 11 , da dette ikke kan lade sig gøre, når man afspiller. Derimod kan man<br />

trykke på f.eks. for at komme til pause-tilstanden, osv. Denne måde at kontrollere flowet<br />

på, altså ved at bestemte hændelser, f.eks. knaptryk, kun kan lade sig gøre i bestemte tilstande,<br />

er princippet i interrupt.<br />

Ved interrupt prioriteres hver funktion vha. af deres interruptniveau. Dvs. at det funktionskald,<br />

som har det højeste interruptniveau afvikles med det samme, når det bliver kaldt, og andre<br />

funktioner med lavere interruptniveau sættes i bero til deres interruptniveau er det højeste. Denne<br />

måde at kontrollere flowet på er egentlig det, som figur 5.2 lægger op til, da der er en lav<br />

kobling og stor tæthed. F.eks. har Optag_styring ikke kobling til Knap_status-registeret m.m.<br />

Her kommer System_kontrol til sin ret, da det er denne funktion, der styrer flowet.<br />

36


5.3. HW/SW opdeling<br />

Derfor vælges flowkontrollen styret vha. interrupt. Dog anvendes polling ved Display_styring<br />

og Kval_data_overfør. Polling anvendes ved Display_styring, da denne er diktafonens mindst<br />

kritiske funktion. Denne er derfor diktafonens vente-tilstand, og er kun aktiv, når alle andre funktioner<br />

ikke er aktive. Dette er illustreret i et tidsdiagram på figur5.3. Display_styring kontrollere<br />

desuden om pc’en ønsker at oprette forbindelse. Hvis dette er tilfældet kaldes Kval_data_overfør.<br />

Kval_data_overfør kaldes altså ved "inddirekte polling".<br />

Display_styring<br />

IRQ<br />

IRQ<br />

Knap_styring<br />

Afspil_styring<br />

Figur 5.3: Princippet i brug af interrupts. Funktioner med højeste interruptniveau afvikles først.<br />

Er der ingen interrupts, skrives der til displayet. Den zigzaggede linje er ensbetydende<br />

med programafvikling.<br />

5.3 HW/SW opdeling<br />

Dette afsnit indeholder begrundelse for den HW/SW opdelingen som ses på figur5.2. Diktafon-<br />

SW bygger på et mikrodatamatsystem med bl.a. CPU og hukommelse, som skal findes på diktafonen.<br />

Det vælges derfor at funktionen, System_kontrol, og håndteringen af lyddata skal foregår<br />

iSW.<br />

For at funktionerne Kval_data_Overfør, Afspil_styring og Optag_styring kan kommunikere<br />

med SW-funktionen, System_kontrol, registeret Lyddata, må funktionerne nødvendigvis være<br />

software.<br />

Displayet styres vha. SW, derfor skal funktionen, Display_styring, ligge i software. Det samme<br />

gælder for registeret,Display_status.<br />

Pc-SW består af det software, som skal styre kommunikation mellem pc og bruger, og mellem<br />

pc og diktafon samt at gemme og konvertere lyddata.<br />

De steder, hvor data opstår eller ender, dvs. Knapper, Display, Mikrofon, Højttaler, CLK og pc,<br />

er hardware, og kan ikke implementeres som software.<br />

Funktionen, Knap_styring, implementeres som hardware, da der skal være en styring, som sender<br />

det sidste knaptryk til Knap_status. Knapper indeholder ikke den fornødne HW til at kunne<br />

identificere sig selv. Registeret, Knap_status, implementeres ligeledes som hardware.<br />

Højttaler_styring og Mikrofon_styring skal være HW, da der kræves hhv. en D/A-konverter og<br />

en A/D-konverter for at konvertere digital data til og fra en analog spænding.<br />

37


Kapitel 5. Systemdesign<br />

RS232-interface implementeres som HW, da Diktafon-SW kræver HW for at kunne kommunikere<br />

med en pc.<br />

Funktionen, Kvalitet_styring, kan implementeres både som SW eller HW. I tilfælde af SW gøres<br />

dette ved polling dvs. der skal softwaremæssigt sendes instruktion til Højttaler_styring og<br />

Mikrofon_styring om, hvornår der skal samples. Det kræver processorkraft at få processoren<br />

til at holde øje med, hvornår der skal polles, og i tilfælde af bl.a. interrupt kan der ikke regnes<br />

med, at processoren poller til den rigtige tid. En kombineret HW/SW-løsning består i, at der er<br />

en ekstern clock, som sampler med den højeste frekvens. Det er så op til en SW-implementeret<br />

Kvalitet_styring at fortælle Afspil_styring og Optag_styring hvilke af disse samples, som skal<br />

benyttes. En HW-løsning er en styring, som ved hjælp af et lager, Kvalitet_status, modtager<br />

information om en ønsket clockneddeling af en ekstern clock. Derved angives, hvornår der skal<br />

samples. Dette vil betyde, at ingen samples kasseres. Den rene SW-løsning fravælges, fordi der<br />

spildes processorkraft ved polling. For at undgå at sample for ofte, hvis der optages i den dårligste<br />

eller mellemste kvalitet, fravælges den kombinerede HW/SW-løsning. Hermed falder valget<br />

på en ren HW-løsning. Registeret, Kvalitet_status, implementeres ligeledes som HW.<br />

5.4 HW/SW grænseflader<br />

Udfra SW/HW-opdelingen på figur 5.2 kan det ses, at funktionerne Afspil_styring, Optag_styring,<br />

Display_styring, Kval_data_overfør og System_kontrol er overgangsfunktioner mellem SW og<br />

HW. For hver funktion defineres input, funktion og output. Input, funktion og output er kun<br />

beskrevet i forhold til grænsefladen mellem HW og SW.<br />

Afspil_styring<br />

¯ Input: funktionskald fra System_kontrol.<br />

¯ Funktion: sørger for at lyddata bliver afspillet på det rigtige tidspunkt og med den rigtige<br />

kvalitet.<br />

¯ Output: lyddata og funktionskald til Højttaler_styring.<br />

Optag_styring<br />

¯ Input: funtionskald fra System_kontol, lyddata.<br />

¯ Funktion: sørger for at lyddata bliver optaget på det rigtige tidspunkt og med den rigtige<br />

kvalitet.<br />

¯ Output: funktionskald til Mikrofon_styring.<br />

Display_styring<br />

38<br />

¯ Input: funktionskald fra System_kontrol.<br />

¯ Funktion: sørger for at den rigtige information bliver skrevet ud på displayet.


5.4. HW/SW grænseflader<br />

¯ Output: Skriv_status(stop, afspil, optag, pause, spol frem, spol tilbage) se tabel3.5,<br />

Skriv_fejl(fejl1, fejl2, fejl3) se tabel3.4 og , Skriv_beskednr(0-?), Skriv_antalbeskeder(0-<br />

?), Skriv_tid(0-?), Skriv_længde(0-?), Skriv_friplads(0-?).<br />

Outputs er taget fra tabel 3.5, hvor næste besked, foregående besked og reset er udeladt, da disse<br />

instruktioner sker så hurtigt, at det ikke kan vises i displayet. Desuden er pc også udeladt, fordi<br />

brugeren kan se på pc’en, at der er kontakt. "?" i outputs betyder simpelthen, at beskederne kan<br />

antage variende værdier.<br />

Kval_data_overfør<br />

¯ Input: funktionskald fra System_kontrol. Instruktioner og kvalitet(0-3, 0=inaktiv, 1=dårligste<br />

kvalitet, 2=middel kvalitet, 3=bedste kvalitet) fra RS232-interface.<br />

¯ Funktion: sørger for overførsel af lyddata og kvalitetsindstillingen mellem pc og diktafon.<br />

¯ Output: kvalitet(0-3, 0=inaktiv, 3=bedste kvalitet), lyddata.<br />

Kvalitet er et output, der fortæller pc’en, hvilken kvalitet lyddata på diktafonen er optaget i,<br />

således at pc’en kan afspille den korrekt.<br />

System_kontrol<br />

¯ Input: Knaptryk, (0-10, 0=ingen knap, 1=optag, 2=stop, 3=afspil, 4=pause, 5=næste besked,<br />

6= foregående besked, 7=spol frem, 8=spol tilbage, 9=slet besked, 10=reset) se tabel<br />

3.1. Kvalitet(0-3, 0=inaktiv, 1=dårligste kvalitet, 2=middel kvalitet, 3=bedste kvalitet)<br />

¯ Funktion: sørger for at den korrekte funktion bliver aktiveret ved knaptryk og sætter og<br />

henter desuden også diktafonens kvalitet.<br />

¯ Output: funtionskald til Afspil_styring, Optag_styring, Display_styring og<br />

Kval_data_overfør.<br />

Operativsystem<br />

Grænsefladen, operativsystem, ligger på pc’en, og kommunikationsprotokollerne mellem Pc-<br />

SW og pc fastlægges af denne samt af en selvvalgt protokol.<br />

39


Kapitel<br />

6<br />

Hardwaredesign<br />

Dette kapitel skal skabe et overblik over HW-delens funktioner og deres input og output ud<br />

fra funktionsoversigten på figur5.2. Herefter opdeles funktionerne i passende moduler, og deres<br />

grænseflader defineres. Dette vil lede frem til figur6.2, hvorefter det enkelte modul kan designes.<br />

6.1 Strukturdesign<br />

For at kunne realisere funktionerne på figur 5.2, kræves der noget basalt hardware, som f.eks.<br />

CPU og hukommelse. Hardwaren består, ud over et mikrocomputersystem, af de hardwaremoduler,<br />

der er nødvendige for, at diktafonen opfylder kravspecifikationen. På figur6.1 ses hvilke HWfunktioner,<br />

der er nødvendige for at få diktafonen til at fungere.<br />

Knapper<br />

Mikrofon<br />

Knapmodul<br />

Mikrofonmodul<br />

Knap_styring<br />

Knap_status<br />

CPU &<br />

Mikrofon_ Højttaler_<br />

hjælpestyring<br />

styring<br />

kredsløb<br />

Kvalitet_<br />

styring<br />

Kvalitetsmodul<br />

Hukommelsesmodul<br />

Hukommelse<br />

(Lyddata)<br />

Kvalitet_<br />

status<br />

RS232-modul<br />

RS232 DB9<br />

interface stik<br />

CPU-modul<br />

Højttalermodul<br />

Displaymodul<br />

Display<br />

Højttaler<br />

Figur 6.1: Funktioner der er nødvendige for at få diktafonen til at opfylde kravspecifikationen.<br />

Disse funktioner indgår i forskellige moduler.<br />

40


6.1.1 Modulopdeling<br />

6.2. Modulgrænseflader<br />

For at kunne realisere diktafonen, deles dennes HW op i passende HW-moduler. Dette er gjort<br />

på figur 6.1. Dette gør det muligt at realisere modulerne hver for sig, når bare grænsefladerne<br />

imellem disse overholdes.<br />

6.2 Modulgrænseflader<br />

Grænsefladerne mellem de forskellige moduler på figur6.1 er beskrevet som signalerne mellem<br />

modulerne. Signalernes værdi dvs. om et signal f.eks. er aktivt højt eller lavt, bestemmes i<br />

meget høj grad af de komponenter, som bliver stillet til rådighed i dette projekt. Derfor tages der<br />

allerede i opdelingen højde for dette, for at undgå at skulle tilpasse signalerne senere.<br />

Det er blevet undersøgt hvilke komponenter, som er nødvendige i de forskellige moduler, for<br />

at det enkelte modul kan leve op til grænsefladen. Ud fra disse komponenter er de forskellige<br />

modulers grænseflader defineret.<br />

6.2.1 Interrupt-niveauer<br />

Før modulgrænsefladerne fastlægges, vil interrupt-niveauerne blive defineret, da disse skal anvendes<br />

ved definitionen af modulgrænsefladerne. Der komme interrupts fra knapmodulet og<br />

mikrofonmodulet. Det skal sikres, at mikrofonmodulet ikke bliver standset under optagelse,<br />

og derfor skal den have det højste interrupt-niveau. Den vælges til interrupt 4. Knapmodulets<br />

interrupt-niveau vælges til interrupt 3. Begge moduler får ligeledes et interrupt-acknowledgesignal<br />

(IACK), som modsvarer deres interrupt-niveau dvs. IACK3 til knapmodulet og IACK4<br />

til mikrofonmodulet.<br />

6.2.2 CPU-modul<br />

Dette modul er det centrale i diktafonen, og består udover processor og hjælpekredsløb af en<br />

ACIA, kaldet ACIA1. Denne gør det muligt at kommunikere med pc og derved køre debugger<br />

og monitor på diktafonsystemet. Næsten alle signaler skal ind og ud af CPU-modulet. Det styrer<br />

derfor overordnet alle andre moduler. Dog kan andre moduler påvirke CPU-modulet ved at<br />

sende interrupts. CPU-modulets ind- og udgange er i den følgende tabel defineret. Signalerne,<br />

der kommer ind og ud, skal netop passe med signalerne, som andre moduler skal sende eller<br />

modtage. Når CPU-modulet modtager et interrupt, sendes der et IACK-signal, som bekræfter,<br />

at interruptet bliver behandlet.<br />

R/W signalet anvendes, når der enten skal læses fra eller skrives til moduler. CPU-modulet<br />

bestemmer, om der skal læses eller skrives i et modul.<br />

41


Kapitel 6. Hardwaredesign<br />

Input<br />

Output<br />

6.2.3 Hukommelsesmodul<br />

Navn Type<br />

D00-D15<br />

Bus (16 bit)<br />

IRQ3 Aktiv lav<br />

IRQ4 Aktiv lav<br />

ROM1 (CS) Aktiv lav<br />

ROM2 (CS) Aktiv lav<br />

RAM1 (CS) Aktiv lav<br />

RAM2 (CS) Aktiv lav<br />

RAM3 (CS) Aktiv lav<br />

RAM4 (CS) Aktiv lav<br />

ACIA2 (CS) Aktiv lav<br />

KS (CS) Aktiv lav<br />

Display (CS) Aktiv høj<br />

FS (CS) Aktiv lav<br />

ADC (CS) Aktiv lav<br />

DAC (CS) Aktiv lav<br />

R/W Aktiv høj og lav<br />

D00-D15<br />

A01-A19<br />

E Clock<br />

Bus (16 bit)<br />

Bus (20 bit)<br />

Clock Clock<br />

IACK3 Aktiv lav<br />

IACK4 Aktiv lav<br />

Hukommelsesmodulet skal både indeholde ROM og RAM, for at softwaren kan fungere, og for<br />

at det er muligt at gemme data. Der er stillet 2 ROM-kredse og 4 RAM-kredse til rådighed i<br />

dette projekt, og der skal være et CS til hver kreds. Databussen er 16 bit bred, dette gør det muligt<br />

at tilgå hukommelsen på byte- og på wordniveau. Bredden af adressebussen bestemmes af<br />

størrelsen af RAM-kredsene, som har størrelsen 512k ¡ 8bit 2 19 bit dvs. 19 bit bred adressebus.<br />

42


6.2.4 RS232-modul<br />

Input<br />

Navn Type<br />

ROM1 (CS) Aktiv Lav<br />

ROM2 (CS) Aktiv Lav<br />

RAM1 (CS) Aktiv Lav<br />

RAM2 (CS) Aktiv Lav<br />

RAM3 (CS) Aktiv Lav<br />

RAM4 (CS) Aktiv Lav<br />

R/W Aktiv høj og lav<br />

D00-D15<br />

A01-A19<br />

Bus (16 bit)<br />

Bus (20 bit)<br />

Output D00-D15 Bus (16 bit)<br />

6.2. Modulgrænseflader<br />

Dette modul gør det muligt at kommunikere med en pc via dens COM-port. For at CPU-modulet<br />

kan kommunikere med RS232-modulet, skal der ligeledes være en ACIA,ACIA2. Der anvendes<br />

en 8 bit bred databus, da det derved er muligt at sende en byte ad gangen. Modulet skal have<br />

et adresseben, for at det er muligt at vælge at læse enten status eller data fra modulet. Modulet<br />

skal have et clocksignal kaldet E. Dette signal kommer fra CPU-modulet og har frekvensen 800<br />

kHz, svarende til en tiendedel af clocken på processoren.<br />

Input<br />

Navn Type<br />

ACIA2 (CS) Aktiv Lav<br />

R/W Aktiv høj og lav<br />

D00-D07<br />

A01<br />

Bus (8 bit)<br />

Bus<br />

E Clock<br />

Rx data RS232C<br />

Output D00-D07 Bus (8 bit)<br />

Tx RS232C<br />

43


Kapitel 6. Hardwaredesign<br />

6.2.5 Mikrofonmodul<br />

Modulet opsamler lyddata via en mikrofon, konverterer dataene ved hjælp af en A/D-konverter<br />

og sender derefter disse data ud på 8 bit af databussen. Tidspunktet, hvor dette sker, er styret af<br />

signalerne fra kvalitetsmodulet. Modulet skal sende et interrupt, når dataene er konverteret og<br />

klar til læsning. Dataene sendes derefter ud på databussen, når CPU-modulet vælger at læse fra<br />

mikrofonmodulet.<br />

6.2.6 Kvalitetsmodul<br />

Input<br />

Navn Type<br />

ADC (CS) Aktiv lav<br />

R/W Aktiv lav<br />

CLK_F Clock<br />

CLK_S Clock<br />

IACK4 Aktiv lav<br />

Lyd Lyd<br />

Output D00-D07 Bus (8 bit)<br />

IRQ4 Aktiv lav<br />

Outputtet skal være 2 signaler med variabel frekvens, som anvendes i højttaler- og mikronfonmodulet<br />

til at styre samplingsfrekvensen på A/D-konverteren. Ligeledes anvendes den variable<br />

frekvens til at styre filtrenes knækfrekvens. Frekvensen af signalerne er bestemt af signalerne,<br />

som højttaler- og mikronfonmodulet skal anvende til deres funktioner. CPU-modulet skal vha.<br />

CS, R/W og 2 bit af databussen kunne ændre frekvensen af signalerne.<br />

6.2.7 Højttalermodul<br />

Input<br />

Output<br />

Navn Type<br />

FS (CS) Aktiv Lav<br />

R/W Aktiv Lav<br />

D00-D01<br />

Bus(2 bit)<br />

CLK_F Clock<br />

CLK_S Clock<br />

Modulet skal kunne modtage 8 bit data fra databussen og konvertere dette til lyd vha. en D/Akonverter.<br />

Tidspunktet hvornår konverteringen sker, styres af interruptet fra mikrofonmodulet.<br />

CPU-modulet sender data til højttalermodulet vha. CS og R/W.<br />

44


6.2.8 Knapmodul<br />

Input<br />

Navn Type<br />

DAC (CS) Aktiv lav<br />

R/W Aktiv lav<br />

D00-D07<br />

Bus (8 bit)<br />

CLK_F Clock<br />

Output Lyd Lyd<br />

6.2. Modulgrænseflader<br />

Ved et knaptryk på en af de 10 knapper skal der sendes et interrupt. Det får CPU-modulet til at<br />

læse hvilken knap, der er påvirket vha. et CS og databussen. Da der altid skal læses fra enheden,<br />

tilføres R/W ikke. Knapmodulets interrupt-niveau er bestemt til at være 3 jf. afsnit6.2.1.<br />

6.2.9 Displaymodul<br />

Input<br />

Navn Type<br />

KS (CS) Aktiv lav<br />

Knaptryk Knaptryk (10<br />

stk.)<br />

IACK3 Aktiv lav<br />

Clock Clock<br />

Output D00-D03 Bus (4 bit)<br />

IRQ3 Aktiv lav<br />

Modulet anvender en 8 bit bred databus til at skrive til displayet, da det er et 8 bit display. Ligeledes<br />

modtager modulet et CS og et adresseben, der gør det muligt at vælge mellem instruktionseller<br />

dataregistret. Instruktionsregistret anvendes til at styre, hvor der skrives i displayet og der<br />

læses fra displayet for at undersøge om det er klar til at modtage data. De forskellige tegn hentes<br />

i dataregistret.<br />

45


Kapitel 6. Hardwaredesign<br />

Input<br />

Output<br />

6.3 Modulernes interface<br />

Navn Type<br />

Display (CS) Aktiv høj<br />

R/W Aktiv Lav<br />

A01<br />

D00-D07<br />

D00-D07<br />

Bus<br />

På figur 6.2 ses modulernes indbyrdes kommunikation.<br />

46<br />

Bus (8 bit)<br />

Visuel information<br />

Bus (8 bit)


R/W<br />

6.3. Modulernes interface<br />

Hukommelses-<br />

modul<br />

RS232-<br />

modul<br />

Display-<br />

modul<br />

IRQ3<br />

IACK3<br />

CPU-<br />

Databus<br />

Knap-<br />

IRQ3<br />

modul Adressebus<br />

modul<br />

IACK3<br />

IRQ4<br />

IACK4<br />

RAM1<br />

RAM2<br />

RAM3<br />

RAM4<br />

ROM1<br />

ROM2<br />

DAC<br />

ACIA2<br />

ADC<br />

R/W<br />

FS<br />

Display<br />

KS<br />

Mikrofon-<br />

modul<br />

Kvalitets-<br />

modul<br />

Højttaler-<br />

modul<br />

Figur 6.2: Hardwaremodulernes indbyrdes kommunikation.<br />

CLK_S<br />

CLK_F<br />

PC<br />

47


Kapitel<br />

7<br />

Softwaredesign<br />

I dette kapitel designes diktafonsystemets softwaredel ud fra funktionsoversigten på figur5.2<br />

og kravspecifikationen. Softwaredelen består af to dele: software til diktafonen og software<br />

til pc’en. Først vil der blive lavet et programdesign, som indeholder opdeling af software til<br />

processer, som er de overordnede byggesten i softwaren. Grænsefladerne mellem processerne<br />

defineres, og herefter opdeles processerne i mindre moduler.<br />

7.1 Programdesign<br />

Programdesignet opdeles i første omgang i diktafon-software og pc-software. Denne opdeling<br />

tager udgangspunkt i funktionsoversigten på figur5.2. Begge programdele har de eksterne grænseflader<br />

til hardware, der er defineret i afsnit 5.4.<br />

7.1.1 Procesopdeling<br />

Da systemet må anses for at være begrænset, vil en inddeling af systemet i processer tage udgangspunkt<br />

i den opdeling, der allerede er foretaget i funktionsoversigten på figur5.2. Procesinddelingen<br />

vil derfor ende med at blive følgende processer for diktafon-software:<br />

Optag_styring, Afspil_styring, Display_styring og Kval_data_overfør. Dette ses i på figur7.1.<br />

Der er ikke foretaget en inddeling af pc-softwaren, da den kun består af én proces, som det ses<br />

på figur 7.2.<br />

7.1.2 Procesgrænseflader<br />

De enkelte processers grænseflader vil her blive specificeret med hensyn til input og output.<br />

Dette bliver gjort ved at tage udgangspunkt i figur7.1 og 7.2 samt grænsefladerne i afsnit 5.4.<br />

Lyddata-register<br />

Lyddata-registeret indeholder foruden lyddata også information om, hvor i registeret lyddata er<br />

placeret. Informationen om placering er gemt som et array af datastrukturer, kaldet beskeder jf.<br />

figur 7.3. Desuden er der lydstatus, som indeholder information om lydkvalitet, antal beskeder,<br />

aktuelt beskednummer, aktuel tid i den aktuelle besked, resterende tid tilbage i hukommelsen,<br />

adresse på den sample, som skal afspilles/optages næste gang samt en slutpointer, der peger på<br />

den sidste brugte adresse i Lyddata-registeret. Opbygningen ses i figur7.3.<br />

48


RS-232interface<br />

Knap_<br />

styring<br />

Kvalitet_<br />

styring<br />

Display<br />

Kval_Data_<br />

overfør<br />

Kvalitet_status<br />

Display_status<br />

Display_<br />

styring<br />

System_<br />

kontrol<br />

Afspil_<br />

styring<br />

Optag_<br />

styring<br />

Lyddata<br />

Højttaler_<br />

styring<br />

Mikrofon_<br />

styring<br />

7.1. Programdesign<br />

Figur 7.1: Procesopdeling af diktafon-software. Ellipser angiver processer, ikke-lukkede kasser<br />

angiver et register og en firkantet kasse angiver hardware.<br />

Diktafon_<br />

program<br />

Operativ<br />

system<br />

Figur 7.2: Procesopdeling for pc-software.<br />

Lydstatus Beskeder<br />

Lyddata<br />

Kvalitet<br />

Antal beskeder<br />

Aktuel besked<br />

Aktuel adr.<br />

Aktuel tid<br />

Resterende tid<br />

Slut ptr.<br />

0<br />

1<br />

2<br />

19<br />

Start ptr.<br />

Minutter<br />

Sekunder<br />

Start ptr.<br />

Minutter<br />

Sekunder<br />

Start ptr.<br />

Minutter<br />

Sekunder<br />

Start ptr.<br />

Minutter<br />

Sekunder<br />

Figur 7.3: Organisering af Lyddata-register.<br />

49


Kapitel 7. Softwaredesign<br />

System_kontrol<br />

System_kontrol er den proces, som sørger for at organisere kommunikationen mellem de andre<br />

processer.<br />

Input<br />

Output<br />

Afspil_styring<br />

Kilde/destination Beskrivelse<br />

Knap_styring Besked om der er trykket på en knap, og hvilken<br />

knap det i så fald er.<br />

Mikrofon_styring Besked om at der skal modtages eller sendes en<br />

sample.<br />

Lyddata Information om lyddata jf. figur 7.3.<br />

Kval_data_overfør Besked om at forbindelse ønskes oprettet eller afbrudt<br />

fra pc.<br />

Afspil_styring Besked om at der skal afspilles en lydsample.<br />

Optag_styring Besked om at der skal optages en lydsample.<br />

Lyddata Retter i lydstatus i registeret, jf. figur 7.3, så der<br />

derved afspilles, optages, spoles, springes til andre<br />

numre eller slettes.<br />

Kval_data_overfør Information om at forbindelse til pc kan oprettes.<br />

Display_styring Besked om hvornår og hvad der skal skrives i displayet.<br />

Denne proces sørger for at sende lyddata fra Lyddata-registeret til Højttaler_styring.<br />

50<br />

Input<br />

Kilde/destination Beskrivelse<br />

System_kontrol Besked om at der skal afspilles en sample.<br />

Lyddata Lyddata<br />

Output Højttaler_styring Lyddata


Optag_styring<br />

7.1. Programdesign<br />

Denne proces modtager lyddata fra Mikrofon_styring og sender dette til Lyddata-registeret.<br />

Input<br />

Kilde/destination Beskrivelse<br />

System_kontrol Besked om at der skal optages en sample.<br />

Mikrofon_styring Lyddata<br />

Output Lyddata Lyddata<br />

Display_styring<br />

Denne proces skal modtage instruktion fra System_kontrol om, hvad der skal skrives og skrive<br />

dette ud på displayet.<br />

Input<br />

Output<br />

Kval_Data_overfør<br />

Kilde/destination Beskrivelse<br />

System_kontrol Information om nuværende tilstand.<br />

Dislay_status Fejl fra System_kontrol.<br />

Lyddata Informationer om antal beskeder, aktuel besked, aktuel<br />

tid og resterende tid jf. figur 3.11.<br />

Display Data der indeholder position og symbol, der skal<br />

skrives ud på displayet.<br />

Denne proces skal varetage kommunikationen til RS232-interface.<br />

Input<br />

Output<br />

Kilde/destination Beskrivelse<br />

System_kontrol Besked om at forbindelse til pc kan oprettes.<br />

RS232-interface Instruktioner fra pc.<br />

Lyddata Lyddata og information, kvalitet, lyddatas rækkefølge<br />

og nummer fra lydstatus jf. figur 7.3.<br />

RS232-interface Lyddata, information om kvalitet, lyddatas rækkefølge<br />

og nummer.<br />

System_kontrol Besked om at pc vil oprette forbindelse.<br />

Lyddata Tømning af Lyddata-register og opsætning af lydkvalitet.<br />

Kvalitet_status Sætter den ønskede kvalitet.<br />

51


Kapitel 7. Softwaredesign<br />

Pc-software<br />

Denne proces har til formål at styre pc’ens operativsystem, så der via RS232-interface kan<br />

kommunikeres med diktafonens software. Data, der kommer fra diktafonen, skal konverteres<br />

til wave-filer og gemmes. Processens grænseflader vil i dette tilfælde være operativsystemet.<br />

7.2 Procesdesign/modulopdeling<br />

Efter procesopdeling og fastlæggelse af processernes grænseflader skal de enkelte processer<br />

opdeles i moduler. Dette gøres, som det ses på figur 7.4. De på figuren viste moduler kommer<br />

dels af, at flowkontrollen styres vha. interrupts, og dels fra kravspecifikationens figur3.2.<br />

Interruptmodulet er en vektortabel, som CPU-en slår op i, hver gang den får et interrupt. Den<br />

kalder herefter de enkelte subrutiner svarende det modtagede interrupt. Interrupts kan komme<br />

fra Knap_styring eller Mikrofon_styring, og derfor er der et modul til at håndtere hver af disse<br />

interrupts, nemlig henholdsvis Behandl_knap og Lydkontrol. Tilstand-registret skal være<br />

der, så de førnævnte moduler kan finde ud af om de må udføre en handling. F.eks. må Slet ikke<br />

aktiveres, hvis diktafonen er i optagetilstand. SR-registret er CPU’ens statusregister, og dette<br />

skal kunne skrives til i det tilfælde, hvor den går i pc-tilstand, så interruptniveauet kan sættes til<br />

det højeste, således denne proces ikke kan afbrydes at et evt. knaptryk.<br />

Modulerne Reset, Slet, Spring, Pause kommer som følge af de, i kravspecikationen, opstillede<br />

krav til funktioner.<br />

Modulerne i processerne beskrives hver for sig, og deres grænseflader defineres.<br />

7.3 Afspil_styring<br />

7.3.1 Afspil<br />

Dette modul har til formål at hente data i Lyddata-registeret på den aktuelle adr. Derefter kalder<br />

den DAC_driver, som sørger for den videre lyddatabehandling.<br />

Input<br />

Kilde/destination Beskrivelse<br />

Lyd_kontrol Kald af afspil<br />

Lyddata Lyddata fra aktuel adr.<br />

Output DAC_driver Lyddata<br />

7.3.2 DAC_driver<br />

Dette modul modtager lyddata fra Afspil, og sender det videre til Højttaler_styring. DAC_driver<br />

skal interface med Højttaler_styrings D/A-konverter.<br />

52


Knap_styring<br />

RS-232-interface<br />

Mikrofon_styring<br />

Knap_status<br />

SR<br />

Interrupt<br />

Display_status<br />

Skriv_disp<br />

Display_<br />

driver<br />

Display<br />

Kval_Data_overfør<br />

Kval_data_<br />

overfør<br />

Behandl_<br />

knap<br />

Tilstand<br />

Display_styring<br />

Reset<br />

System_kontrol<br />

Kvalitet_status<br />

Slet<br />

Spring<br />

Lyd_kontrol<br />

Tidstæl<br />

Figur 7.4: Moduloversigt for diktafon-software.<br />

Optag<br />

7.3. Afspil_styring<br />

Afspil_styring<br />

Afspil<br />

Lyddata<br />

Optag_styring<br />

DAC_driver<br />

ADC_driver<br />

Højttaler_styting<br />

Data<br />

53


Kapitel 7. Softwaredesign<br />

Kilde/destination Beskrivelse<br />

Input Afspil Lyddata til DAC<br />

Output Højttaler_styring Lyddata<br />

7.4 Optag_styring<br />

7.4.1 Optag<br />

Dette modul har til formål at kalde ADC_driver og modtage lyddata fra denne og gemme det i<br />

Lyddata-registret på slut ptr. adresse.<br />

Input<br />

Output<br />

7.4.2 ADC_driver<br />

Kilde/destination Beskrivelse<br />

Lyd_kontrol Kald af optag<br />

A/D-konverter Lyddata fra A/D-konverter<br />

Lyddata Lyddata<br />

A/D-konverter Kald<br />

Dette modul bliver kaldt af Optag som derefter kalder mikrofon_styring. Herefter henter den<br />

lyddata fra mikrofon_styring og returner det til Optag.<br />

Input<br />

Output<br />

7.5 System_kontrol<br />

7.5.1 Interrupt<br />

Kilde/destination Beskrivelse<br />

Optag Kald<br />

Mikrofon_styring Lyddata<br />

Mikrofon_styring Kald<br />

Optag Lyddata<br />

Dette modul er nødvendigt for at kunne håndtere interrupts fra HW.<br />

Ved interrupt fra HW vil den afhængigt af interruptet kalde Behandl_knap (ved interrupt fra<br />

Knap_styring) eller Lyd_kontrol (ved interrupt fra mikrofon_styring). Hvis den er i pc-tilstand<br />

vil den ignorere interrupts, da interrupt-niveauet i dette tilfælde er det højeste.<br />

54


Input<br />

Output<br />

7.5.2 Behandl_knap<br />

Kilde/destination Beskrivelse<br />

SR Aktuel interruptniveau<br />

Knap_styring Interrupt<br />

Kvalitet_styring Interrupt<br />

Behandl_knap Kald<br />

Lyd_kontrol Kald<br />

7.5. System_kontrol<br />

Ved kald fra Interrupt-modulet skal modulet hente indholdet af Knap_status-registret og<br />

Tilstand-registret og sammenligne disse for at undersøge om knaptrykket er gyldigt jf. figur<br />

3.2. Ved gyldig knaptryk vil modulet ændre status i Tilstand-registeret. Hvis det er reset , slet<br />

eller forrige/næste-besked vil den kalde modulerne Reset, Slet eller Spring. Ved pause vil<br />

den blive i dette modul indtil næste knaptryk.<br />

7.5.3 SR<br />

Input<br />

Output<br />

Kilde/destination Beskrivelse<br />

Interrupt Kald<br />

Knap_status Aktuel knap<br />

Tilstand Aktuel tilstand<br />

Tilstand Ændring af tilstand<br />

Reset Kald (ved tryk på R )<br />

Slet Kald (ved tryk på )<br />

Spring Kald (ved tryk på knapperne / )<br />

Display_status Skriv fejl ved ugyldigt knaptryk<br />

Indeholder information om det aktuelle interruptniveau og hvilke mode CPU’en befinder sig<br />

i(Supervisor/usermode).<br />

7.5.4 Reset<br />

Ved kald fra Behandl_knap vil modulet undersøge, om der er indtalte beskeder, og hvis der<br />

er dette, slettes de. Herefter sætter modulet resterende tid til det maksimale for den aktuelle<br />

kvalitetsindstilling.<br />

55


Kapitel 7. Softwaredesign<br />

7.5.5 Slet<br />

Input<br />

Output<br />

Kilde/destination Beskrivelse<br />

Behandl_knap Kald<br />

Lyddata Information jf. figur 7.3<br />

Lyddata Slet alle beskeder og indstil resterende<br />

tid<br />

Ved kald fra Behandl_knap vil modulet undersøge, om der er indtalte beskeder. Er dette tilfældet,<br />

vil den slette sidste indtalte besked. Er der ingen beskeder, vil den sende fejl 3 (jf.afsnit5.4,<br />

til Display_status .<br />

Input<br />

Output<br />

7.5.6 Spring<br />

Kilde/destination Beskrivelse<br />

Behandl_knap Kald<br />

Lyddata Antal beskeder<br />

Lyddata Slet sidste besked<br />

Display_status Evt. fejl 3<br />

Ved kald fra Behandl_knap vil modulet undersøge, om der er indtalte beskeder, og er dette<br />

tilfældet, vil den tælle aktuel besked op eller ned. Hvis Spring kaldes med 1 skal den tælle<br />

aktuel besked en op, og hvis den kaldes med -1 skal den tælle aktuel besked en ned. Er der ingen<br />

beskeder, vil den skrive en fejl 3 jf. afsnit 5.4 i Display_status.<br />

Input<br />

Output<br />

7.5.7 Lyd_kontrol<br />

Kilde/destination Beskrivelse<br />

Behandl_knap Kald. 1 for næste besked og -1 for forrige<br />

besked<br />

Lyddata Antal beskeder<br />

Lyddata Aktuel besked op eller ned<br />

Display_status Evt. fejl 3<br />

Modulet kaldes af Interrupt og undersøger derefter Tilstand-registeret. Er tilstanden afspil,<br />

Spol, eller Optag, vil den udføre den tilhørende funktion. Ved tilstand stop, pause-afspil og<br />

56


7.5. System_kontrol<br />

pause-optag sker der ikke noget. Herunder forklares hvad der sker ud fra flowdiagrammerne i<br />

kravspecifikationen, afhængigt af tilstanden.<br />

Afspil<br />

Er tilstanden afspil, vil den undersøge om, der er beskeder. Er der ingen beskeder, vil den ændre<br />

tilstand til Stop, og sende fejl3 til Display_status. Er der beskeder, vil den ændre aktuel adr.<br />

til Start Ptr. på aktuel besked. Herefter kalder den Afspil i processen Afspil_styring. Så kaldes<br />

Tidstæl og herefter vil den ændre status i Tilstand-registeret til afspil_igang. Tilstanden<br />

afspil_igang defineres, fordi dette fortæller Lyd_kontrol og Tidstæl, at afspilningen nu er i<br />

gang og modulet derfor skal tage højde for dette. Næste gang Lyd_kontrol kaldes i tilstand<br />

afspil_igang, så tælles aktuel adr. én op, derefter kontrollerer den om den afspiller den sidste<br />

besked. Hvis dette er tilfældet skal den kontrollere om aktuel adr. er lig slut ptr. ellers skal den<br />

kontrollere om aktuel adr. er lig (aktuel besked + 1)’s start ptr.. Hvis et af de to ovenstående<br />

udtryk er sande, er beskeden slut og Tilstand-registrets status ændres til stop. Hvis den ikke er<br />

det, så kalder den Afspil. Herefter kaldes Tidstæl.<br />

Spol frem<br />

Ved spol frem skal den kontrollere, om aktuel adr. + 4 er større end eller lig med (aktuel besked<br />

+ 1)’s start ptr.. Ligeledes skal den kontrollere om aktuel adr. + 4 er større end slut ptr.. Hvis<br />

dette er tilfældet er beskeden slut og Tilstand-registerets status ændres til stop. Hvis dette ikke<br />

er tilfældet tælles aktuel adr. op med 4 dvs. hver 4. sample afspilles. Herefter kaldes Afspil.<br />

Til slut kaldes Tidstæl.<br />

Spol tilbage<br />

Ved spol tilbage skal den kontrollere, om aktuel adr. - 4 er mindre end aktuel besked’s start<br />

ptr.. Hvis dette er tilfældet, er beskeden ved start og Tilstand-registerets status ændres til stop.<br />

Hvis dette ikke er tilfældet tælles aktuel adr. ned med 4. Herefter kaldes Afspil. Til slut kaldes<br />

Tidstæl.<br />

Optag<br />

Er tilstanden optag, vil den undersøge, om der er plads i Lyddata-registret. Dette gøres ved at<br />

undersøge, om Antal beskeder er 20 eller slut ptr. større end sidste RAM-adresse. Er der ingen<br />

plads vil den ændre status i Tilstand-registret til stop, og sende fejl2 til Display_status. Er<br />

der plads, vil der blive oprettet en ny besked. Dette gøres ved at tælle slut ptr. op med én og sætte<br />

den nye beskeds start ptr. lig slut ptr.. Herefter tælles antal beskeder op med én og aktuel besked<br />

sættes til at pege på den nye besked. Optag i Optag_styring kaldes. Data vil nu blive gemt på<br />

slut ptr.’s adresse. Når den terminerer kaldes Tidstæl. Nu ændres status i Tilstand-register til<br />

Optag_igang. Dette gøres af samme grund, som afspil_igang. Næste gang Lyd_kontrol kaldes<br />

i tilstand optag_igang, vil den undersøge om der er plads i Lyddata-registret. Dette gøres ved at<br />

57


Kapitel 7. Softwaredesign<br />

undersøge, om slut ptr. +1 er større end sidste RAM-adresse. Er der ingen plads, vil den ændre<br />

status i Tilstand-registret til Stop og sende fejl2 til Skriv_disp. Er der plads, vil den tælle<br />

slut ptr. op med én og kalde Optag i Optag_styring og data vil blive gemt på den nye slut ptr.’s<br />

plads. Når der termineres fra Optag i Optag_styring, kaldes Tidstæl.<br />

Input<br />

Output<br />

7.5.8 Tidstæl<br />

Kilde/destination Beskrivelse<br />

Interrupt Kald<br />

Lyddata Adgang til alle informationer i Lyddata<br />

Tilstand Aktuel tilstand<br />

Lyddata Kan ændre alle informationer i Lyddata<br />

Display_status Fejlmeddelser<br />

Afspil Kald<br />

Optag Kald<br />

Tidstæl Kald<br />

Tilstand Ny tilstand<br />

Bliver kaldt af Lyd_kontrol. Ved kald henter den information om lydkvalitet fra Lyddata og<br />

tæller samples. Den undersøger desuden, hvilken tilstand diktafonen er i. Hvis tilstanden er<br />

afspil, og den har talt til 1 sekund, skal den tælle aktuel tid op med ét sekund eller evt. ét minut,<br />

hvis den er nået til 60 sekunder . Hvis tilstanden er optag, og den har talt til ét sekund skal den<br />

lægge ét sekund eller evt. ét minut til aktuel besked’s sekunder eller minutter. Desuden trækkes<br />

ét sekund eller evt. ét minut fra resterende tid i hukommelse. Hvis tilstanden er spolfrem, skal<br />

den det samme som i afspil-tilstand. Hvis tilstanden er spoltilbage, skal den gøre ligesom i<br />

afspil-tilstand bortset fra, at den skal trække tiden fra.<br />

Input<br />

7.5.9 Tilstand<br />

Kilde/destination Beskrivelse<br />

Lyd_kontrol Kald<br />

Lyddata Kvalitet<br />

Tilstand Aktuel tilstand<br />

Output Lyddata Opdatering af sekunder og minutter<br />

Indeholder infomation om hvilken tilstand diktafonen er i.<br />

58


7.6 Display_status<br />

Indeholder information om hvilken fejlkode, der evt. er aktiveret.<br />

7.7 Display_styring<br />

7.7.1 Skriv_disp<br />

7.6. Display_status<br />

Skriv_disp sørger for at formidle al information, der skal skrives i displayet videre. Den<br />

henter informationen fra henholdsvis Display_status, Tilstand og Lyddata-registret. Fra<br />

Display_status-registret får den information om en evt. fejlkode, fra Tilstand-registret får<br />

den information om den aktuelle tilstand og fra Lyddata-registret får den information om antal<br />

beskeder, aktuel besked, aktuel tid, længde af aktuel besked samt resterende tid i hukommelse.<br />

Hver gang den har skrevet ud i displayet, skal den kontrollere, om pc’en ønsker forbindelse.<br />

Hvis dette er tilfældet, skal den kalde Kval_data_overfør.<br />

Skriv_disp bliver eksekveret når CPU’en er i sin ventetilstand.<br />

Input<br />

Output<br />

7.7.2 Display_driver<br />

Kilde/destination Beskrivelse<br />

Tilstand Information i forbindelse med tilstand.<br />

Display_status Information i forbindelse med fejl.<br />

Lyddata Har adgang til information om lyddata.<br />

RS232C-interface Infomation om at pc’en ønsker forbindelse.<br />

Display_driver Information om hvad der skal skrives i displayet<br />

og hvor det skal skrives.<br />

Kval_data_overfør Kald (når pc’en ønsker forbindelse).<br />

Dette modul modtager information om, hvad der ønskes skrevet i displayet, og hvor det ønskes<br />

skrevet. Modulet sørger for at sende information, tegn for tegn, til displayet, om det som skal<br />

skrives.<br />

Input<br />

Output<br />

Kilde/destination Beskrivelse<br />

Skriv_disp Tegn som skal skrives og placeringen<br />

af dette.<br />

Display Værdi og plads for det tegn som skal<br />

skrives.<br />

59


Kapitel 7. Softwaredesign<br />

7.8 Kval_data_overfør<br />

7.8.1 Kval_data_overfør<br />

Dette modul har til formål at oprette forbindelse mellem pc, repræsenteret ved RS232C-interface,<br />

og diktafonen samt at indstille kvaliteten i Kvalitet_status og overføre lyddata til pc’en fra<br />

Lyddata.<br />

Modulet modtager et kald fra Skriv_disp. Kval_data_overfør undersøger om diktafonen<br />

er i stop-tilstand. Hvis dette er tilfældet sætter Kval_data_overfør interruptniveau til 5 og<br />

kommunikationen med pc’en gennem RS232C-interfacet begynder. Overførslen af kvalitet og<br />

lyddata foregår efter kommunikatinsprotokollen i appendiksG. Når overførslen er færdig, sættes<br />

interruptniveauet ned igen og funktionen terminerer.<br />

Hvis tilstanden ikke er stop, sendes et bytemønster, som angivet i protokollen.<br />

Input<br />

Output<br />

7.9 Pc-software<br />

Kilde/destination Beskrivelse<br />

Skriv_disp Kald (når pc’en ønsker forbindelse).<br />

RS232C-interface Data og instruktioner jf. protokol i appendiks<br />

G.<br />

Lyddata Lyddata.<br />

Skriv_disp Besked om at Kval_data_overfør<br />

slipper kontrollen over diktafonen.<br />

RS232C-interface Data jf. protokol i appendiks G<br />

Lyddata Sletning af lyddata, som er overført.<br />

Indstilling af ønskede kvalitet<br />

Kvalitet_status Indstilling af den ønskede kvalitet<br />

SR Sætter interruptniveau statusregisteret.<br />

Efter modulopdelingen af diktafon-softwaren vil der her blive foretaget samme opdeling af pcsoftwaren.<br />

Da der ønskes at pc-softwaren skal skrives til Linux, skal der først og fremmest<br />

sikres, at de rigtige kommunikationsprotokoller anvendes. Modulopdelingen foretages, som det<br />

ses på figur 7.5. Modulerne i processerne beskrives hver for sig, og deres grænseflader defineres.<br />

Ved hjælp af transaktionflowdiagrammet på figur 3.10, appendiks E og appendiks G, er det<br />

muligt at skrive de enkelte moduler, når grænsefladerne i det følgende overholdes.<br />

60


7.9.1 Main<br />

Opsæt_<br />

forbindelse<br />

Opret_<br />

forbindelse<br />

Slet_<br />

lyddata<br />

Check_<br />

diktafon Hent_<br />

data<br />

Main<br />

Kvalitet_<br />

indstilling<br />

Fejl_info<br />

Figur 7.5: Moduloversigt for pc-software.<br />

7.9. Pc-software<br />

Dette modul skal styre de andre moduler, og afhængigt af deres output skal det foretage nogle<br />

valg. Modulet skal foretage disse valg, således at figur3.10 overholdes.<br />

7.9.2 Opsæt_forbindelse<br />

Dette modul skal sørge for, at det, ved hjælp af en COM-port, er muligt at kommunikere med<br />

diktafonen. Derfor skal modulet kunne gøre følgende:<br />

¯ Gemme tidligere opsætning af COM-porten, og sætte COM-porten op som det kræves<br />

ved kommunikation.<br />

¯ Hente en byte fra COM-porten og levere den til et andet modul.<br />

¯ Sende en byte via COM-porten for et andet modul.<br />

¯ Lukke COM-porten og sætte COM-porten op til den tidligere opsætning.<br />

7.9.3 Opret_forbindelse<br />

Modulet skal sende en efterspørgsel til diktafonen, om at pc’en ønsker forbindelse. Derefter skal<br />

det vente på et svar om diktafonen enten er klar eller ikke klar. Modulet skal da returnere, om<br />

diktafonen er klar ellet ej.<br />

61


Kapitel 7. Softwaredesign<br />

7.9.4 Check_data<br />

Dette modul har til formål at hente antallet af beskeder på diktafonen samt kvaliteten disse er<br />

indtalt i. Antallet af beskeder og kvaliteten gemmes som globale variable på pc’en.<br />

7.9.5 Hent_data<br />

Modulet skal hente evt. lydbeskeder på diktafonen og gemme dem som wave-filer. Dette gøres i<br />

henhold til kravspecifikationen. Modulet skal oprette en undermappe til diktafon-mappen. Navnet<br />

på mappen skal angives således: "ddmmyy-hhmm". Hvor "dd" er datoen, "mm" måneden,<br />

"yy" året, "hh" timen og "mm" minutter. Wave-filerne skal da gemmes med fortløbende numre,<br />

således at den første besked hedder "besked1.wav" osv.<br />

Wave-filformatet er beskrevet i appendiks E. Der skal tages højde for de forskellige indstillinger<br />

af kvaliteten, samt varierende beskedlængder. Kvaliteten og antallet af beskeder findes i globale<br />

variable, længden af hver besked sendes som en header til den pågældende fil, dette gøres efter<br />

protokollen i appendiks G.<br />

7.9.6 Kvalitet_indstilling<br />

Dette modul skal ved et menu-system oplyse brugeren om den aktuelle kvalitetindstilling, og<br />

derefter give brugeren mulighed for at vælge den ønskede kvalitetsindstilling til diktafonen.<br />

Hvis brugeren ikke ønsker at indstille diktafonens optagekvalitet, skal pc-software-programmet<br />

afsluttes. Hvis brugeren derimod ønsker at indstille optagekvaliteten, skal funktionen sende en<br />

værdi svarende til den valgte kvalitet til diktafonen.<br />

7.9.7 Fejl_info<br />

Dette modul skal håndtere fejlbeskeder og brugerinformation. Modulet kan kaldes med forskellige<br />

oplysninger/fejl og skal afhængigt af værdien af disse skrive en besked ud på skærmen.<br />

7.9.8 Slet_lyddata_diktafon<br />

Modulet skal sende besked til diktafonen om at slette lagrede beskeder. Dette gøres for, at diktafonen<br />

sletter alle lagrede beskeder, når alt data er blevet overført til pc’en.<br />

62


Del<br />

Hardware- III design<br />

63


Kapitel<br />

8<br />

CPU-modul<br />

CPU-modulet er diktafonens centrale del, og skal styre diktafonens andre moduler.<br />

8.1 Funktionsoversigt<br />

CPU-modulet består af de blokke, som ses på figur 8.1. Mikroprocessoren er den enhed, som<br />

hele CPU-modulet er bygget op omkring. Denne kræver en 8 MHz clock og et reset/haltkredsløb,<br />

der sørger for at mikroprocessoren resettes ved opstart af systemet.<br />

IACK<br />

IRQ<br />

Reset/haltkredsløb<br />

IRQ-controller<br />

8 MHz clock<br />

DTACK-generator<br />

Mikroprocessor Adressedekoder<br />

VPA-generator ACIA1<br />

D00-D15<br />

Clock<br />

A01-A19<br />

Figur 8.1: Blokdiagram over CPU-modulet<br />

For at kunne adressere hukommelsesenheder eller perifere enheder, skal der være en adressedekoder,<br />

der ud fra adressen på adressebussen kan sende chipselect til den enhed, mikroprocessoren<br />

adresserer.<br />

Da perifere enheder kan sende et interrupt til CPU-modulet, skal der være en blok, der varetager<br />

denne funktion. Denne blok kaldes en IRQ-controller.<br />

Systemet kræver desuden en DTACK-generator, der kan sende et DTACK-signal til mikropro-<br />

CS<br />

R/W<br />

E<br />

65


Kapitel 8. CPU-modul<br />

cessoren, som er bestemmende for, hvornår der læses fra eller skrives til hukommelses- eller<br />

perifere enheder ved asynkron kommunikation.<br />

Ved brug af autovetoriserede interrupts skal der være en VPA-generator, der genererer et VPAsignal<br />

til CPU’en, når der sendes et interrupt fra en perifer enhed. Der er i appendiksC argumenteret<br />

for, at der benyttes autovektoriseret interrupt.<br />

Endelig skal der også være en ACIA1, der gør det muligt via en pc at køre en debugger og monitor<br />

på diktafonsystemet. ACIA1 i CPU-modulet og ACIA2 i RS232-modulet kræver desuden<br />

også, at der sendes et VPA-signal til processoren, da dette også angiver, at den kommende writeeller<br />

read-cycle foregår synkront.<br />

8.1.1 Funktionskrav<br />

CPU-modulet designes med en MC68000 mikroprocessor. Modulet skal kunne kommunikere<br />

med hukommelsesmodulerne og de perifere enheder.<br />

Mikroprocessoren kræver, at den, efter der er tændt for strømmen, modtager et reset. Desuden<br />

skal der implementeres en reset-knap, så mikroprocessoren kan resettes under udviklingen af<br />

softwaren. Resetpulsen skal have en længde på mindst 100 ms på RESET- og HALT-benet ved<br />

power up, og en længde på 10 clockcyles ved påvirkning af reset-knap [MC68000, side 10-12].<br />

Det skal være muligt at køre med en debugger, så der kan debugges på software. Dette kræver<br />

også, at der i forbindelse med IRQ-controlleren skal være mulighed for at sende et interrupt med<br />

den højst mulige prioritet, et NMI som får mikroprocessoren til at stoppe al programafvikling.<br />

8.2 Løsningsmuligheder<br />

8 MHz clock<br />

En 8 MHz clock kan realiseres ved en krystaloscillator eller et krystal, hvortil der skal designes<br />

en oscillator. Der vælges at realisere clocken som en krystaloscillator, da dette er det simpleste.<br />

Krystaloscillatoren behandles ikke nærmere. Selve opkoblingen af oscillatoren kan findes i<br />

diagram A. Opkoblingen er foretaget ud fra databladet [Krystal].<br />

Reset/halt-kredsløb<br />

Kredsløbet kan realiseres med en monostabil multivibrator og en knap med prelfjerner, hvor de<br />

to reset-signaler OR’es sammen til RESET- og HALT-benet. En anden mulighed er at benytte<br />

en spændingskomparator, der er beregnet til reset-kredsløb.<br />

Der vælges at benytte en spændingskomparator, da dette tilbyder den mest simple løsning, og<br />

derved spares en prelfjerner til reset-knappen. Der vælges at benytte kredsen TL7705A fra Texas<br />

Instruments, da denne findes i komponentudleveringen. Desuden vælges, at reset-pulsen har<br />

samme længde, ligegyldig om det er ved power-up eller påvirkning af resetknap.<br />

66


Adressedekoder<br />

8.2. Løsningsmuligheder<br />

En adressedekoder skal ud fra værdierne på adressebussen sende chipselect til den enhed, der<br />

adresseres. Dette kan realiseres ved hjælp af kombinatoriske logiske kredse eller en PEEL. Der<br />

vælges at realisere adressedekodningen ved PEEL’s, da dette giver det mindste antal kredse, og<br />

samtidig giver mulighed for let at ændre i adresser under udvikling.<br />

Interrupt-controller<br />

I appendiks C beskrives interrupts. Der er valgt at benytte autovektoriseret interrupt, da de perifere<br />

enheder dermed ikke behøver at sætte vektornummeret på databussen. Autovektoriseret<br />

interrupt kræver, at der sendes et signal til VPA-generatoren om, at VPA skal sættes i forbindelse<br />

med interrupt. Interrupt-controlleren skal være prioriteret, så der er mulighed for at sende<br />

et NMI med IRQ7. NMI skal kunne påvirkes med knaptryk, og da der ikke skal sendes flere<br />

NMI efter hinanden, skal der benyttes en prelfjerner på NMI-knappen. Denne prelfjerner kan<br />

implementeres med en S-R-latch eller et RC-led. Der vælges at benytte RC-leddet, da dette er<br />

simplest. Derudover skal NMI-knappen være aktiv lav, da interruptet er aktivt lavt.<br />

DTACK-generator<br />

Alle enheder, som er forbundet til processorens asynkrone del, der kan skrives til eller læses<br />

fra, skal sende et DTACK-signal til mikroprocessoren for at angive, at nu kan write- eller readcyclen<br />

afsluttes dvs. at enheden kan læse eller sende data indenfor den resterende del af writeeller<br />

read-cyclen. Da hukommelsesenhederne og de perifere enheder ikke kan sende et sådan<br />

signal, konstrueres en DTACK-generator, der ud fra hvilken enhed, der adresseres kan sende<br />

DTACK-signalet til mikroprocessoren på det rigtige tidspunkt. Se evt. appendiksB om timing<br />

af CPU. DTACK-generatoren realiseres ved en tilstandsmaskine i en PEEL.<br />

VPA-generator<br />

VPA-generatoren skal sende et VPA-signal til processoren, når der sendes et IACK. Dette signal<br />

skal holdes, indtil der ikke længere sendes IRQ eller IACK. Der skal også sendes et VPAsignal,<br />

hvis der chipselectes en af ACIA-kredsene, da VPA også benyttes til at angive, at der<br />

er tale om synkron dataoverførsel. VPA-generatoren skal bestå af kombinatorisk logik samt en<br />

tilstandsmaskine, der kan holde VPA indtil IACK går lav. Der vælges at benytte en PEEL, da<br />

dette giver den simpleste implementation og nem at ændre.<br />

ACIA1<br />

ACIA1 er en perifer enhed, der kommunikerer synkront med mikroprocessoren. ACIA1 er identisk<br />

med enheden, der beskrives i kapitel 10, og vil derfor ikke blive beskrevet her.<br />

ACIA1 har til formål at sørge for kommunikation med en pc ved hjælp af TS2MON.<br />

67


Kapitel 8. CPU-modul<br />

8.3 Design af CPU-modul<br />

Reset/halt-kredsløb<br />

Længden af den reset-puls, som skal sendes, vælges ved en ekstern kondensator, CRHT, sefigur<br />

8.5. Sammenhængen mellem kondensatorens størrelse og pulslængden ses i ligning 8.1<br />

[TL7705A, Fig. 7].<br />

4 V<br />

t 13 ¡ 10<br />

A ¡ CRHT CRHT <br />

t<br />

13 ¡ 10 4 V<br />

A<br />

0100s<br />

13 ¡ 10 4 V<br />

A<br />

Der vælges en kondensator på 10 µF, og derved bliver tiden, t, 130ms.<br />

Adressedekoder<br />

8µF 10µF (8.1)<br />

For at MC68000 kan fungere, skal de forskellige enheder adresseres. Derfor skal der vælges<br />

hvilken adresse, de forskellige enheder skal ligge på. I forbindelse med minimumssystemet<br />

anvendes følgende enheder.<br />

¯ ROM, der benyttes 2 stk 128 kB moduler.<br />

¯ RAM, der benyttes 4 stk 512 kB moduler.<br />

¯ UART, der benyttes en ACIA 6850 fra Motorola til kommunikation mellem pc og diktafon,<br />

så debugging/monitor kan foretages.<br />

Desuden anvendes der i diktafonsystemet andre perifere enheder, som også skal kunne adresseres<br />

af mikroprocessoren. Disse er:<br />

¯ Analog-Digital-konverter (ADC).<br />

¯ Digital-Analog-konverter (DAC).<br />

¯ Display (DISP), skal have 2 adresser, en til instruktionsregisteret og en til dataregisteret.<br />

¯ Kvalitetsmodul (FS), som skal kunne tilgås fra mikroprocessoren, således at det bliver<br />

muligt at vælge hvilken frekvens, der benyttes til samplings- og knækfrekvens for henholdsvis<br />

A/D-konverter og rekonstruktions- og antialiasingfiltret.<br />

¯ Knapmodul (KS), som skal kunne tilgås fra mikroprocessoren, for at denne kan finde ud<br />

af hvilken knap, der er blevet trykket på.<br />

¯ UART, der benyttes en ACIA 6850 fra Motorola til kommunikation mellem pc og diktafon.<br />

MC68000 har 16 databen, D00-D15, som kan benyttes enten som words dvs. D00-D15 eller som<br />

bytes dvs. D08-D15 eller D00-D07. Adresseringen foregår ved, at den byte, som er tilsluttet databussen<br />

på D08-D15, har en lige adresse, og den byte, som er tilsluttet D00-D07, har en ulige<br />

adresse.<br />

68


8.3. Design af CPU-modul<br />

Processoren har desuden 23 adresseben, A01-A23, som benyttes til at afgøre, hvilke enheder der<br />

tilgås. Internt i processoren findes også et adresseben, A00, men for at der kan tilgås enheder på<br />

enten word eller byte niveau, er A00 repræsenteret ved benene UDS og LDS. Disse ben angiver,<br />

ved at være aktive, om der er tale om benyttelse af hhv. en lige byte på de øvre databen, D08-<br />

D15, eller en ulige byte på de nedre databen, D00-D07. Hvis både UDS og LDS er aktive, tilgås<br />

et word på databussens D00-D15.<br />

Hvilke adresser de forskellige enheder ligger på, bestemmes til dels af monitoren, TS2MON Ver.<br />

1.2, da denne forudsætter, at der er placeret ROM i adresseområdet 1200h og RAM i adresseområdet<br />

04 0000h - 04 0CFFh [TS2MON, 2002]. ACIA1 skal tilsluttes D07-D00 og have adresserne<br />

80 0001h og 80 0003h. Desuden stiller IRQ-rutinen det krav, at når adressebenene, A04-A23 går<br />

høje, må der ikke chipselectes nogle enheder, da adressebenene, A01-A03, benyttes til at sende<br />

IACK til den eksterne enhed, der har sendt et interrupt.<br />

De øvrige enheder: 2 RAM-enheder, ADC, DAC, ACIA2, Display, Knapmodul og Kvalitetsmodul<br />

kan placeres på valgfrie adresser.<br />

D15-D08 D07-D00<br />

00 0000h<br />

00000000000000<br />

11111111111111<br />

00 1200h<br />

00000000000000<br />

11111111111111<br />

ROM 2 ROM 1<br />

00000000000000<br />

11111111111111<br />

04 0000h00000000000000<br />

11111111111111<br />

04 0CFFh00000000000000<br />

11111111111111<br />

00000000000000<br />

11111111111111<br />

RAM 2 RAM 1<br />

14 0000h<br />

00000000000000<br />

11111111111111<br />

00000000000000<br />

11111111111111<br />

20 0000h00000000000000<br />

11111111111111<br />

00000000000000<br />

11111111111111<br />

00000000000000<br />

11111111111111<br />

RAM 4 RAM 3<br />

30 0000h<br />

00000000000000<br />

11111111111111<br />

00000000000000<br />

11111111111111<br />

80 0001h00000000000000 11111111111111ACIA1<br />

kontrol-/statusregister<br />

80 0003h00000000000000 11111111111111ACIA1<br />

modtage-/senderegister<br />

00000000000000<br />

11111111111111<br />

80 0011h ACIA2 kontrol-/statusregister<br />

00000000000000<br />

11111111111111<br />

80 0013h00000000000000 11111111111111ACIA2<br />

modtage-/senderegister<br />

00000000000000<br />

11111111111111<br />

81 0001h00000000000000 11111111111111ADC<br />

00000000000000<br />

11111111111111<br />

00000000000000<br />

11111111111111<br />

82 0001h00000000000000 11111111111111DAC<br />

00000000000000<br />

11111111111111<br />

84 0001h00000000000000 11111111111111Display<br />

instruktionsregister<br />

00000000000000<br />

11111111111111<br />

84 0003h Display dataregister<br />

00000000000000<br />

11111111111111<br />

00000000000000<br />

11111111111111<br />

88 0001h00000000000000 11111111111111Kvalitet_status<br />

90 0001h00000000000000 11111111111111Knap_status<br />

00000000000000<br />

11111111111111<br />

00000000000000<br />

11111111111111<br />

Figur 8.2: Memorymap for systemet. De skraverede områder angiver adresseområder, som ikke<br />

benytttes. De tykke streger angiver, at der kun er tale om én adresse.<br />

Ud fra memorymappet på figur 8.2 kan man se, hvilke adresser, der benyttes til de forskellige<br />

enheder. Da mikroprocessorens adresseområde går langt ud over det antal adresser, som de<br />

nævnte enheder kræver, benyttes partiel adressedekodning, da dette giver mulighed for en relativ<br />

simpel adressedekodning. Dette gør, at der er adresseområder, som ikke kan benyttes, da de er<br />

reserveret af en enhed.<br />

69


70<br />

Tabel 8.1: Adressedekodningstabel for systemet. U angiver, at enheder udfylder adressen, men<br />

at bitten både kan have værdien 0 eller 1, mens enheder stadig aktiveres. X angiver<br />

don’t-cares.<br />

Adresseben<br />

Enhed<br />

A23 A22 A21 A20 A19 A18 A17 A16 A15 × A05 A04 A03 A02 A01 (A00) Adresse<br />

ROM1 0 0 0 0 0 0 U U U × U U U U U 1 00 0000h -<br />

ROM2 0 0 0 0 0 0 U U U × U U U U U 0 03 FFFFh<br />

RAM1 0 0 0 X U U U U U × U U U U U 1 04 0000h -<br />

RAM2 0 0 0 X U U U U U × U U U U U 0 13 FFFFh<br />

RAM3 0 0 1 0 U U U U U × U U U U U 1 20 0000h -<br />

RAM4 0 0 1 0 U U U U U × U U U U U 0 2F FFFFh<br />

ACIA1 1 0 0 0 0 0 0 0 0 × 0 0 0 0 0 1 80 0001h<br />

1 0 0 0 0 0 0 0 0 × 0 0 0 0 1 1 80 0003h<br />

ACIA2 1 0 0 0 0 0 0 0 0 × 0 1 0 0 0 1 80 0011h<br />

1 0 0 0 0 0 0 0 0 × 0 1 0 0 1 1 80 0013h<br />

ADC 1 0 0 0 0 0 0 1 0 × 0 0 0 0 0 1 81 0001h<br />

DAC 1 0 0 0 0 0 1 0 0 × 0 0 0 0 0 1 82 0001h<br />

Display 1 0 0 0 0 1 0 0 0 × 0 0 0 0 0 1 84 0001h<br />

instruktion<br />

Display data 1 0 0 0 0 1 0 0 0 × 0 0 0 0 1 1 84 0003h<br />

Kvalitet_status 1 0 0 0 1 0 0 0 0 × 0 0 0 0 0 1 88 0001h<br />

Knap_status 1 0 0 1 0 0 0 0 0 × 0 0 0 0 0 1 90 0001h<br />

IACK 1 1 1 1 1 1 1 1 1 × 1 1 U U U X<br />

Kapitel 8. CPU-modul


8.3. Design af CPU-modul<br />

Tabel 8.1 kan sammen med figur 8.2 benyttes til at opskrive logiske udtryk for chipselect til de<br />

enkelte enheder.<br />

For hukommelsesenheder gælder, at deres chipselect er aktivt lave, og at disse implementeres i<br />

én PEEL. Hukommelsesenhederne chipselectes ved UDS eller LDS, der angiver, om der adresseres<br />

en enhed på de øverste eller nederste databen.<br />

ROM1=A23 +A22 +A21 +A20 +A19 +A18 + LDS<br />

ROM2=A23 +A22 +A21 +A20 +A19 +A18 + UDS<br />

RAM1 = A23 +A22 +A21 + ROM1 + LDS<br />

RAM2 = A23 +A22 +A21 + ROM2 + UDS<br />

RAM3 = A23 +A22 + A21 + LDS<br />

RAM4 = A23 +A22 + A21 + UDS<br />

De perifere enheder aktiveres, når adressebenet, A23, går højt, og AS er aktiv. De perifere enheder<br />

må gerne chipselectes ved AS, da de kun har ulige adresser, og der derved ikke opstår<br />

konflikter. For ACIA’erne og Display’et gælder, at A01 har indflydelse på, hvordan enhederne<br />

skal aktiveres. Dette adresseben kan dog føres videre til et register-select, RS, på enhederne.<br />

Derfor betragtes A01 som et don’t-care. Dette fører til følgende perifere enheder med aktivt lave<br />

chipselect:<br />

ACIA1 = A23 ¡ A22 ¡ A20 ¡ A19 ¡ A18 ¡ A17 ¡ A16 ¡ A04 ¡ AS<br />

ACIA2 = A23 ¡ A22 ¡ A20 ¡ A19 ¡ A18 ¡ A17 ¡ A16 ¡ A04 ¡ AS<br />

ADC = A23 ¡ A22 ¡ A16 ¡ AS<br />

DAC = A23 ¡ A22 ¡ A17 ¡ AS<br />

FS = A23 ¡ A22 ¡ A19 ¡ AS<br />

KS = A23 ¡ A22 ¡ A20 ¡ AS<br />

Og displayet med aktivt højt chipselect:<br />

DISP = A23 ¡ A22 ¡ A18 ¡ AS<br />

Da alle adresseringer afhænger af at A22 er lav, er der sikkerhed for, at der ikke chipselectes<br />

enheder, når adressebenene A23-A04 er høje i forbindelse med interrupt.<br />

71


Kapitel 8. CPU-modul<br />

IRQ-controller<br />

I forbindelse med autovektoriseret interrupt, sender en enhed et IRQ-signal til en IRQ-encoder,<br />

der skal kode dette til mikroprocessorens IPL0 - IPL2 ben. Processoren afbrydes af interruptet,<br />

og placerer en funktionskode på FC0-FC2, hvor koden 7 angiver, at der sendes et IACK på<br />

adressebenene A01-A03.A04-A23 er logisk høje. Dette betyder, at interruptniveauet skal dekodes<br />

på A01-A03 ved en IACK-decoder. IACK-signalet sendes til den enhed, der har sendt interrupt,<br />

samtidig med at VPA skal aktiveres, da dette angiver, at der er tale om et autovektoriseret interrupt.<br />

Når enheder modtager IACK-signalet, skal disse fjerne IRQ, hvorefter VPA også skal<br />

fjernes.<br />

Der skal også være mulighed for, at man kan sende et IRQ7 ved en knap til processoren. Dette<br />

giver mulighed for at stoppe programafvikling, og finde ud af hvor i programmet processoren<br />

befinder sig. Der må ikke sendes et IRQ7 flere gange, så derfor skal denne forsynes med en<br />

prelfjerner. Derudover skal der ikke ventes på et IACK, før dette interrupt fjernes.<br />

IRQ-controlleren skal således bestå af 4 enheder:<br />

¯ IRQ-encoder<br />

¯ Funktionskode-decoder<br />

¯ IACK-decoder<br />

¯ NMI-knap<br />

IRQ-encoderen realiseres ved en 8-3 prioritetsencoder, 74LS148, da der skal være mulighed for<br />

at lave prioritering af de enkelte interrupts, så der altid sendes det højest prioriterede interrupt før<br />

de andre interrupts. Funktionskode-decoderen og IACK-dekoderen realiseres ved 3-8 decodere,<br />

74LS138.<br />

Funktionskode-decoderen skal sende et generelt IACK-signal til IACK-decoderen i forbindelse<br />

med en IACK-sekvens, når funktionskoden på FC0-FC2 er (1,1,1). Ved modtagelse af IACK<br />

sender IACK-decoderen signalerne IACK3 og IACK4 til de enheder, der har sendt interruptet.<br />

NMI-knappen realiseres som på figur 8.7. Ved tryk på knappen går IRQ7 lav og et inter-<br />

rupt sendes. RC-leddet fungerer som et lavpas filter med en knækfrekvens på fNMI knk 1<br />

1<br />

2π¡RNMI¡CNMI 1<br />

2π¡100 kΩ¡100 nF 16 Hz.<br />

DTACK-generator<br />

DTACK-generatoren skal, som beskrevet i appendiksB, sende et DTACK-signal, der skal komme<br />

før et bestemt tidspunkt under en read- og writecycle afhængigt af den adresserede enhed. Det<br />

ses i designafsnit for de enkelte moduler, at hukommelsesmodulet, A/D-konverteren, knapmodulet,<br />

kvalitetsmodulet og D/A-konverteren ikke kræver waitstates, hvorimod displayet kræver<br />

én waitcycle. Denne waitcycle realiseres ved en tilstandsmaskine, hvis tilstandsdiagram ses på<br />

figur 8.3. INIT er den tilstand, hvor der ikke sendes DTACK, men ventes på adressering af en<br />

enhed. Hvis hukommelsesmodulet, A/D-konverteren, knapmodulet, kvalitetmodulet eller D/Akonverteren<br />

adresseres, går maskinen i S0, hvor DTACK sættes og holdes, indtil der ikke adres-<br />

72<br />

τ


8.3. Design af CPU-modul<br />

seres en enhed længere, og der returneres til INIT igen. Hvis displayet adresseres, går maskinen<br />

til tilstand S1, og går ved næste clockcycle til S0, hvor DTACK sættes.<br />

En enhed<br />

er adresseret<br />

Ingen enheder adresseres<br />

S0<br />

DTACK=0<br />

Ingen enheder adresseres<br />

INIT<br />

DTACK=1<br />

ROM1-2, ’RAM1-4,<br />

ADC, DAC,<br />

KS, FS<br />

Display<br />

S1<br />

DTACK=1<br />

Figur 8.3: Tilstandsdiagram for DTACK-generatoren.<br />

DTACK-generatoren realiseres i en PEEL, hvor der benyttes D-flip-flops. Generatoren skal have<br />

et input, der angiver om hukommelsesmoduler adresseres, og et chipselect-input for hver af de<br />

perifere enheder. Derved kan der findes ud af, om der er nogle enheder, der adresseres. Selve<br />

tilstandsdiagrammet kodes i ABEL. ABEL-koden er vedlagt på cd-rom som "dtack.abl".<br />

VPA-generator<br />

VPA-generatoren realiseres ved en PEEL. Der skal sendes VPA, når der chipselectes en af<br />

ACIA-enhederne. Derfor gælder ligning 8.2 for VPA til ACIA1 og ACIA2.<br />

VPA ACIA1 ¡ ACIA2 (8.2)<br />

Desuden skal der laves en tilstandsmaskine, som sender VPA, når det sker, at IRQ og IACK er<br />

aktive. Dette VPA-signal skal holdes, indtil der ikke længere sendes IACK. Som IACK benyttes<br />

det generelle IACK, der sendes fra funktionskode-decoderen.<br />

Tilstandsmaskinen konstrueres efter tilstandsdiagrammet på figur 8.4 i PEEL’en, og dette kan<br />

kodes ind i ABEL. ABEL-koden er vedlagt på cd-rom som "vpagen.abl", og opkoblingen af<br />

VPA-generatoren udføres som i diagram A.<br />

8.3.1 Opkobling<br />

Reset/halt-kredsløb<br />

Kredsløbet kobles op, som det ses på figur 8.5. TL7705A har en indgang, SENSE, som skal<br />

kobles til forsyningen. Denne anvendes til at finde ud af, hvornår forsyningsspændingen overstiger<br />

3,6 V, og reset-sekvensen skal begynde. Der er en anden indgang, RESIN, som kobles til<br />

73


Kapitel 8. CPU-modul<br />

IACK=1<br />

INIT<br />

VPA =<br />

ACIA1 ¡ ACIA2<br />

S1<br />

VPA=0<br />

IACK=0<br />

((IACK ¡ IRQ3) + (IACK ¡ IRQ4) + IRQ7) = 0<br />

((IACK ¡ IRQ3) + (IACK ¡ IRQ4) + IRQ7) = 1<br />

Figur 8.4: Tilstandsdiagram for VPA-generatoren.<br />

forsyningen gennem en pull-up modstand, RRH2, således at RESIN er høj, når der ikke resettes.<br />

Desuden benyttes en kontakt, SWRH, som kan anvendes til at trække RESIN lav. Derved påbegyndes<br />

en reset-sekvens. For at TL7705A kan fungere, skal der benyttes en kondensator, CRH1,<br />

på 10 µF mellem stel og REF-indgangen, dette sikrer, at rippler i forsyningen ikke genererer et<br />

reset. Desuden forbindes en anden kondensator, CRHT, mellem CT-indgangen og stel. Denne<br />

kondensator er bestemmende for den tid, som reset-sekvensen varer.<br />

RRH2<br />

10k<br />

SWRH<br />

CRHT<br />

10µ<br />

7<br />

3<br />

1<br />

2<br />

TL7705A<br />

SENSE<br />

CT RESET<br />

REF<br />

RESET<br />

RESIN<br />

6<br />

5<br />

CRH1<br />

100n<br />

5V<br />

RRH1<br />

10k<br />

DRH1<br />

DRH2<br />

RRH3<br />

10k<br />

Figur 8.5: Opkobling af reset/halt-kredsløbet.<br />

RRH4<br />

10k<br />

19<br />

20<br />

MC68000<br />

HALT<br />

RESET<br />

TL7705A’s udgang, RESET, forbindes gennem en modstand, RRH1 på 10 kΩ, til stel. Den anden<br />

udgang, RESET, benyttes til reset af processoren. Udgangen forbindes gennem to dioder,<br />

DRH1 og DRH2, til RESET- og HALT-indgangene på processoren. Dioderne vender således,<br />

at TL7705A’s udgang går til diodernes katoder. Derved kan der udføres et software-reset fra<br />

processoren, uden det influerer på TL7705A’s operation. Indgangene på processoren er forsynet<br />

med pull-up modstande, RRH3 og RRH4.<br />

For RRH2 gælder, at den strøm som RESIN trækker, ikke må fremkalde et spændingsfald over<br />

RRH2, som er så stort, at RESIN går lav.<br />

74


RRH2maks VCC VIH<br />

IIN<br />

<br />

5V 2V<br />

20µA<br />

8.4. Test<br />

150kΩ (8.3)<br />

Minimumsværdi for RRH2 er bestemt af, at der ikke må løbe en større strøm gennem den end<br />

spændingsfaldet er mindre 3 V, når SWRH sluttes. Den vælges til 10 kΩ.<br />

Processoren giver mulighed for, at RESET og HALT kan aktiveres ved et såkaldt software-reset.<br />

I et sådan tilfælde skal det ikke være muligt, at RESET og HALT trækkes høje, når al den strøm<br />

som RESET og HALT trækker, går gennem pull-up modstanden. Der skal være et spændingsfald,<br />

som er stort nok til, at RESET og HALT går lave. Derfor eksisterer der minimumsværdier<br />

for pull-up modstandene, RRH3 og RRH4. Disse udregnes i ligning 8.4 og 8.5.<br />

RRH3min VCC V OL HALT<br />

I OL HALT<br />

RRH4min VCC V OL RESET<br />

I OL RESET<br />

<br />

<br />

5V 05V<br />

5mA<br />

5V 05V<br />

16mA<br />

900Ω (8.4)<br />

28kΩ (8.5)<br />

For pull-up modstandene gælder, at den strøm som RESET og HALT trækker, når de er høje,<br />

ikke må fremkalde et spændingsfald over pull-up modstandene, RRH3 og RRH4, såRESET og<br />

HALT går lave igen. Maksimumsværdier udregnes i ligning 8.6.<br />

RRH3maks RRH4maks VCC VIH 5V 2V<br />

150kΩ (8.6)<br />

IIN 20µA<br />

For RRH3 og RRH4 vælges en modstandsværdi på 10 kΩ, da dette overholder værdierne, som<br />

blev fundet i ligningerne 8.4-8.6.<br />

IRQ-controller<br />

Interruptkredsløbet kobles op, som det ses på figur8.6. Der monteres pull-up-modstande på 10<br />

kΩ på interrupt-encoderens indgange, så der ikke sendes utilsigtede interrupts til mikroprocessoren.<br />

8.4 Test<br />

I testrapport I foretages der målinger på reset/halt-kredsløbet. Det ses heraf, at de ønskede logiske<br />

niveauer overholdes, samt at RESET og HALT holdes lave i minimum 100 ns, når systemets<br />

strømforsyning tændes, eller når reset-knappen aktiveres.<br />

I førnævnte testrapport er det, vha. en PEEL-tester og herefter CPU’ens free-running-mode,<br />

blevet konstateret, at adressedekoderne virker.<br />

IRQ-controlleren sender interrupts 3, 4 og 7 til CPU’en, når disse interrupts kommer fra enhederne.<br />

NMI-knappen forårsager et IRQ, som får TS2MON til at skrive "TRAP" på terminalen,<br />

og indholdet af CPU’ens registre samt PC vises ligeledes.<br />

DTACK- og VPA-generatoren er testet på PEEL-tester, og fungerer ligeledes efter hensigten.<br />

75


Kapitel 8. CPU-modul<br />

76<br />

IACK3<br />

IACK4<br />

ACIA1<br />

ACIA2<br />

IRQ3<br />

IRQ4<br />

IRQ7<br />

VPAgenerator<br />

IACK0<br />

IACK1<br />

IACK2<br />

IACK3<br />

IACK4<br />

IACK5<br />

IACK6<br />

IACK7<br />

IACK<br />

GND<br />

IRQ1<br />

IRQ2<br />

IRQ3<br />

IRQ4<br />

IRQ5<br />

IRQ6<br />

IRQ7<br />

3-8<br />

liniers<br />

decoder<br />

IACK<br />

niveau<br />

decoder<br />

ENA<br />

ENB<br />

3-8<br />

liniers<br />

decoder<br />

Function<br />

code<br />

decoder<br />

8-3<br />

liniers<br />

priority<br />

encoder<br />

Interupt<br />

encoder<br />

IACK<br />

A01<br />

A02<br />

A03<br />

AS<br />

FC0<br />

FC1<br />

FC2<br />

VPA<br />

IPL0<br />

IPL1<br />

IPL2<br />

CPU<br />

Figur 8.6: Opkobling af interruptkredsløb og VPA-generator.<br />

RNMI<br />

NMI-knap<br />

5V<br />

100k<br />

CNMI<br />

100nF<br />

IRQ7<br />

Figur 8.7: NMI-knap med prelfjerner


8.5 Delkonklusion<br />

8.5. Delkonklusion<br />

CPU’en kan resettes vha. en ekstern kontakt, og ved opstart af systemet holdes RESET- og<br />

HALT-benet lavt i min. de krævede 100 ms. De eksterne enheder kan adresseres, som er en<br />

forudsætning for, at den udfærdigede SW kan fungere. De eksterne enheder har også mulighed<br />

for at sende interrupts til CPU’en, så de får rådighed over CPU’ens ressourcer, og CPU’en<br />

modtager de nødvendige kontrol-signaler, DTACK og VPA.<br />

77


Kapitel<br />

9<br />

Hukommelsesmodul<br />

Formålet med hukommelsesmodulet er at give mulighed for, at CPU-modulet kan benytte dette<br />

til at gemme lyddata. Desuden skal software og andre variable også gemmes i hukommelsen.<br />

9.1 Funktionoversigt<br />

Hukommelsesmodulet består af 2 ROM-kredse og 4 RAM-kredse. Modulet anvender adressebussen,<br />

A01-A19, databussen, D00-D15, R/W og chipselect til hver kreds som input. Som output<br />

benyttes databussen, D00-D15.<br />

9.1.1 Funktionskrav<br />

Det kræves af modulet, at dette kan kommunikere med CPU-modulet dvs. timingdiagrammerne<br />

i appendiks B skal overholdes. Desuden skal TTL-niveauerne overholdes.<br />

TS2MON stiller krav til modulet om, at der skal være ROM og RAM, der kan tilgås på både<br />

byte- og wordniveau, derfor skal hukommelsen fordeles således, at hele databussen, D00-D15,<br />

kan benyttes.<br />

9.2 Løsningsmuligheder<br />

Der kan benyttes flere forskellige løsningsmuligheder for organisering af ROM og RAM. Der<br />

er krav om, at hele databussen benyttes, så derfor vælges det at organisere hukommelsen, så<br />

ROM- og RAM-kredse optræder på samme adressekombinationer af A01-A19, men på upper<br />

eller lower data strobe. Hvilken kreds der addreseres, bestemmes ud fra chipselect.<br />

9.3 Design af hukommelsesmodul<br />

En stor del af designet er givet ved TS2MON og CPU-modulet. Der vælges at benytte 2 ROMkredse<br />

af typen Am29F010B-90, der indeholder 128 k ¡ 8 bit. Det er kredse, der overholder TTLniveauer,<br />

og derved er spændingsniveauet overholdt [AM29F010B, side 20]. Desuden overholdes<br />

timingdiagrammet for en readcycle, da navnet ’-90’ angiver, at det maksimalt tager 90 ns<br />

fra kredsen modtager et chipselect, til der sendes data ud på databussen. De 2 ROM-kredse organiseres<br />

i samme adresseområde på D00-D15. Den ene kreds tilgås på de ulige adresser, mens<br />

78


9.3. Design af hukommelsesmodul<br />

den anden tilgås på de lige. Med hensyn til adresseringen af enheder henvises til afsnittet om<br />

adressedekodning ved CPU-modulet i kapitel 8.<br />

Som RAM-kredse vælges 4 kredse af typen KM684000BLP-7L. Dette er RAM-moduler på<br />

512k ¡ 8 bit. Disse er TTL-kompatible, og derved overholdes spændingsniveauerne [KM684000B,<br />

side 92]. Kredsene overholder også timingdiagrammerne i appendiksB, da navnet ’-7L’ angiver,<br />

at der kan skrives eller læses fra enheden 70 ns efter enheden har modtaget chipselect. RAMmodulerne<br />

organiseres i 2 blokke ligesom ROM-modulerne, da der derved dækkes både lige og<br />

ulige adresser. Den øvrige adressering behandles af CPU-modulet, kapitel8.<br />

79


Kapitel<br />

10<br />

RS232-modul<br />

Formålet med dette modul er at kunne skabe forbindelse til en pc, således det vil være muligt at<br />

indstille lydkvaliteten på diktafonen og overføre tidligere indtalte beskeder til pc’en.<br />

10.1 Funktionoversigt<br />

Da der i projektforslaget blev lagt op til at benytte RS232C-standarden til kommunikation mellem<br />

diktafonsystemet og en pc, er dette modul baseret på denne. RS232-modulet skal sende<br />

data fra diktafonsystemet til en pc og modtage data fra en pc til diktafonen. Princippet er vist på<br />

figur 10.1. Her ses det, at data til og fra diktafonen kommer til modulet på databen D00-D07 og<br />

fra en pc på benene RxD og TxD. Desuden er der en række kontrolsignaler, som modulet skal<br />

anvende: Til at læse fra og skrive til modulet, skal modulet anvende et chipselect, ACIA2, fra<br />

den perifere adressedekoder, et R/W, A01 samt E-clock’en fra CPU’en. Selve modulet består af<br />

tre dele: et modul til at styre kommunikationen til og fra diktafonen, et modul til at tilpasse signalerne<br />

mellem TTL-niveauerne og RS232C-standardens niveauer, altså en driver, og et modul<br />

til at styre kommunikationshastigheden.<br />

80<br />

D00<br />

D01<br />

D02<br />

D03<br />

D04<br />

D05<br />

D06<br />

D07<br />

A01<br />

Databus buffer<br />

ACIA2<br />

Registerkontrol<br />

RW<br />

E<br />

Sende<br />

register<br />

Modtage<br />

register<br />

Status<br />

register<br />

Kontrol<br />

register<br />

ACIA<br />

Sende<br />

skifte-register<br />

Modtage<br />

skifte-register<br />

Interrupt<br />

logik<br />

RS232-Driver<br />

Baudrate<br />

Generator<br />

Figur 10.1: Funktionsdiagram for RS232-modul.<br />

RxD<br />

TxD


10.1.1 Funktionskrav<br />

10.2. Design af RS232-modul<br />

Da der fra starten er blevet valgt, at kommunikationen mellem diktafonen og pc’en skal overholde<br />

RS232-standarden bliver kommunikationen parallel til seriel set fra diktafonens side.<br />

Dette ses også ud fra funktionsdiagrammet. Baudraten skal være 115,2 kbps i henhold til forudsætningerne<br />

i kravspecifikationen.<br />

10.1.2 Valg af løsning<br />

Kommunikationsmodul: Opbygning af dette modul med logiske kredse vil blive alt for kompliceret<br />

og derfor realiseres dette modul ved at benytte en færdig kreds. Til dette formål<br />

benyttes der en 6850 ACIA. Dette er en kreds, der er specielt fremstillet til at varetage<br />

seriel kommunikation til en MC68000 processor. Den er ligeledes til rådighed i komponentudleveringen.<br />

Driver: Dette modul realiseres ligeledes med en færdig kreds, da dette er den simpleste løsning.<br />

Til formålet anvendes en RS232 fra Maxim kaldet MAX232A. Denne er i stand til<br />

henholdsvis at tilpasse TTL-niveau til RS232C-niveau og RS232C-niveau til TTL-niveau.<br />

Hastighed: Dette modul opbygges som clocken til CPU’en dvs. med en krystaloscillator.<br />

10.2 Design af RS232-modul<br />

Det grundlæggende i RS232-modulet er læse at fra eller skrive til databussen, og sende og<br />

modtage data et bit af gangen. Dette styres ved hjælp af skifteregistre, der netop kan sende og<br />

modtage et bit af gangen. For at kunne kontrollere og ændre på opsætningen af kommunikationen<br />

findes der registre, som det også er muligt henholdsvis at skrive til eller læse fra. Styringen<br />

af hvilke registre, der skal anvendes, sker ved hjælp af "Register-kontrol", som udover et CS,<br />

R/W ogA01, også får clocksignalet, E, fra CPU-modulet. Data sendes asynkront og derfor er<br />

modulet ikke afhængig af en clock.<br />

10.2.1 Opkobling af ACIA<br />

ACIA’en kan opsættes på flere måder. Det vælges her, at opsætning skal være en minimumsopsætning,<br />

da dette vil simplificere både opkoblingen og programmeringen senere. For at lave<br />

en minimumsopkobling skal ACIA’en opkobles som på figur 10.2. ACIA’en har 3 chipselect,<br />

CS0, CS1 og CS2, men til minimumsopsætningen skal der kun anvendes èt chipselect og derfor<br />

sættes CS0 og CS1 til forsyning. Da det ligeledes ikke er nødvendigt at tage hensyn til Data Carrier<br />

Detect (DCD), som anvendes til at validere data, som sendes til ACIA’en fra pc’en, sættes<br />

denne til stel. Til sidst kobles Request-to-Send (RTS) og Clear-to-Send (CTS) sammen. Dette<br />

resulterer i, at når pc’en sender en forespørgsel om at sende data til diktafonen, får den signalet<br />

tilbage som et klarsignal. Denne form for kommunikation kaldes "loopback handshaking".<br />

Receiver clock, RxCLK og Transmitter clock, TxCLK, kobles sammen og herefter til clocken.<br />

Det, at de to clocks forbindes, gør at data sendes og modtages med samme hastighed.<br />

81


Kapitel 10. RS232-modul<br />

Der er to ACIA’er i diktafonsystemet og begge opkobles på samme måde.<br />

10.2.2 Opkobling af RS232-driver<br />

RS232-driveren opkobles som foreskrevet i databladet [MAX232]. Dette ses på figur 10.2.<br />

D00<br />

D01<br />

D02<br />

D03<br />

D04<br />

D05<br />

D06<br />

D07<br />

A01<br />

RW<br />

E<br />

MC6850<br />

6<br />

2<br />

TXDATA RXDATA<br />

22<br />

D0<br />

21<br />

D1<br />

20<br />

D2<br />

19<br />

D3<br />

18<br />

D4<br />

17<br />

D5<br />

16<br />

D6<br />

15<br />

D7<br />

7<br />

IRQ<br />

5<br />

RTS<br />

3<br />

RXCLK<br />

4<br />

TXCLK<br />

24<br />

CTS<br />

23<br />

DCD<br />

14<br />

E<br />

11<br />

RS<br />

13<br />

R/W<br />

8<br />

CS0<br />

10<br />

CS1<br />

9<br />

CS2<br />

10.2.3 Opkobling af clock<br />

5V<br />

1,8423 MHz<br />

Krystal-oscilator<br />

CAC3<br />

5V<br />

CAC2<br />

CAC5<br />

CAC1<br />

8<br />

R2IN<br />

10<br />

T2IN<br />

MAX232<br />

1<br />

C1+<br />

3<br />

9<br />

C1- R2OUT<br />

4<br />

C2+<br />

5<br />

C2-<br />

2<br />

7<br />

V+ T2OUT<br />

6<br />

V-<br />

CAC4<br />

Figur 10.2: Opkobling af RS232-modul.<br />

Clock’en bliver designet som clock’en til CPU’en. ACIA’en har indbygget en deling af clock’en<br />

på 1, 16 eller 64. Der benyttes en clock på 1,8432 MHz og en deling på 16, hvilket giver en<br />

hastighed, baudrate, på 115,2 kbps.<br />

10.3 Delkonklusion<br />

Det er ikke muligt at teste på RS232-modulet alene, da dette kræver at den omkringliggende<br />

hardware dvs. CPU-modulet og hukommelsesmodulet. Desuden skal der skrives software, der<br />

muliggør kommunikation mellem pc og diktafon.<br />

82<br />

5<br />

4<br />

3<br />

9<br />

8<br />

7<br />

2<br />

1<br />

6


Kapitel<br />

11<br />

Mikrofonmodul<br />

Modulet har til formål at opsamle lyddata via en mikrofon, og konvertere det sample for sample<br />

til 8 bit digital data. Dataene sendes ud på databussen, så CPU-modulet kan læse disse, og<br />

gemme dem i hukommelsesmodulet.<br />

11.1 Funktionsoversigt<br />

Modulet består af blokkene, som er vist på figur 11.1. Der ses, at modulet er styret af to andre<br />

moduler, kvalitetsmodulet og CPU-modulet.<br />

Kvalitetsmodulet sender to clocksignaler, CLK_S og CLK_F, der henholdsvis angiver, hvornår<br />

der skal tages en sample, og den tilhørende knækfrekvens til antialiasingfiltret.<br />

CPU-modulet skal modtage et interrupt, IRQ4, når det analoge signal er klar. CPU-modulet<br />

svarer med et IACK4, der skal medføre, at interruptet fjernes igen, se endvidere appendiksC<br />

om interrupts. Derefter skal CPU-modulet ved hjælp af et R/W og et CS kunne læse værdien af<br />

den enkelte sample.<br />

I modulet findes også et højpasfilter, der skal fjerne lavfrekvent støj. For at A/D-konverteren skal<br />

kunne modtage signalerne fra antialiasingfilteret, skal disse tilpasses således, at signalet svinger<br />

omkring de rigtige niveauer for A/D-konverteren.<br />

CLK_F<br />

CLK_S<br />

Forstærker<br />

11.1.1 Funktionskrav<br />

Højpasfilter<br />

Antialiasingfilter<br />

Spændingstilpasning<br />

Figur 11.1: Blokdiagram for mikrofonmodulet.<br />

ADC<br />

R/W ADC(CS)<br />

D00-D07<br />

IACK4<br />

Der stilles yderlige krav til modulet om, at A/D-konverteren skal kunne nå at konvertere analog<br />

data til digital data hurtigt nok. Dette vil sige, at denne skal kunne konvertere data, og derefter<br />

aflevere dem til CPU-modulet, inden for én clockcycle af CLK_S.<br />

For at A/D-konverteren kan sende sine data korrekt til CPU-modulet, skal A/D-konverteren<br />

IRQ4<br />

83


Kapitel 11. Mikrofonmodul<br />

kunne overholde en readcycle, som er beskrevet i appendiksB.1.<br />

Antialiasing opstår, når der samples med en frekvens, der er under det dobbelte af den øvre grænsefrekvens<br />

på det, som der samples, ifølge Nyquists samplingssætning [Oppenheim/Schafer, 1999,<br />

side 146], se desuden appendiks A. Derfor er de valgte clocksignaler i kvalitetsmodulet tilpasset<br />

således, at kravspecifikationen og Nyquists samplingssætning er overholdt. Derfor skal antialiasingfiltret<br />

sørge for, at indgangssignalets effektivværdi er dæmpet ned til eller under kvantiseringsstøjen<br />

ved den halve samplingsfrekvens [Harmark, 2003].<br />

Der skal desuden indføres et højpasfilter, der har en knækfrekvens ved 300 Hz, som ligeledes<br />

er valgt i kravspecifikationen. Der ønskes en dæmpning på minimum 60 dB ved 50 Hz, da evt.<br />

støj fra forsyningen med en amplitude på maksimalt 15 V da bliver dæmpet til 15 mV, der ligger<br />

under det mindst betydende bit. Støjen vil altså ikke få nogen indvirkning på konverteringen af<br />

talesignalet.<br />

11.2 Design af mikrofonmodul<br />

11.2.1 Mikrofon<br />

Den anvendte mikrofon er en WM-034B fra Panasonic [WM-034B]. Dette er en elektreret kondensatormikrofon,<br />

som er opbygget med en tynd metalmembran, der er placeret med en afstand<br />

på 5-20 µm foran en fast metalelektrode. Metalelektroden forspændes og herefter kan membranen<br />

sendes i svingninger med lydbølger. Når membranen svinger, ændres kapaciteten og talesignalet<br />

vil derved fremkomme [Ståbi, 1995]. Pga. høj impedans kræves der en forforstærker<br />

eller en impedansomsætter til mikrofonen. I den valgte mikrofon er der indbygget en impedansomsætter.<br />

Mikrofonen skal ifølge databladet kobles op med en modstand, RMF1, på22 kΩ og kondensator,<br />

CMF1, på 33 pF. Det er dog ved forsøg, se testrapport II, blevet bestemt at anvende en<br />

kondensator på 470 nF i stedet, da dette gav et bedre resultat. Grunden til, at der opnås et bedre<br />

reultat med en større kondensator er, at kondensatoren sammen med indgangsimpedansen, Zi,<br />

i det efterfølgende trin danner et 1. ordens højpasfilter, dette ses på figur 11.2. Ved målinger<br />

anvendes et oscilloskop med en indgangsimpedans på 1 MΩ.<br />

84<br />

Mikrofon<br />

RMF1<br />

5V<br />

CMF1<br />

Figur 11.2: Opkobling af elektreret kondensatormikrofon.<br />

Zi


Ved en kondensator på 33 pF får dette filter en knækfrekvens på:<br />

f0 <br />

1<br />

2π ¡ Zi ¡ CMF1<br />

<br />

1<br />

48 kHz<br />

2π ¡ 1MΩ ¡ 33 pF<br />

11.2. Design af mikrofonmodul<br />

Herved dæmpes størstedelen af talesignalets frekvenskomposnater, hvilket jo er uønsket. Ved en<br />

kondensator på 470 nF får filteret derimod denne knækfrekvens:<br />

f0 <br />

1<br />

2π ¡ Zi ¡ CMF1<br />

<br />

1<br />

034 Hz<br />

2π ¡ 1MΩ ¡ 470 nF<br />

Herved bibeholdes talesignalets frekvenskomposanter. I praksis ser kondensatoren, CMF1, ind<br />

i en operationsforstærker med en indgangsimpedans på Zif =Zi 1 Aβ 1MΩ, hvorZi er<br />

operationsforstærkerens indgangsimpedans på 1 TΩ [TLE2072], A er 100000 og β er tilbagekoblingsfaktoren.<br />

Da denne indgangsimpedans er mange gange større end 1 MΩ vil dette<br />

betyde, at der ikke bortfiltreres noget af signalet. Det har altså ingen praktisk betydning, om der<br />

anvendes en kondensator på 33 pF eller 470 nF. Kondensatorværdien på 470 nF har dog gjort<br />

det muligt at måle den signalamplitude, som mikrofonforstærkeren ser.<br />

11.2.2 Mikrofonforstærker<br />

Ud fra forsøg, se testrapport II, er det blevet bestemt, at der skal ske en forstærkning af udgangssignalet<br />

fra mikrofonen på 20 gange. Forstærkeren realiseres ved hjælp af en inverterende<br />

kobling på en operationsforstærker. Som operationsforstærker er valgt TLE2072, hvilket er to<br />

operationsforstærkere sat sammen i én kreds. Den anden del anvendes i additionskoblingen i<br />

spændingstilpasningen, afsnit 11.2.5. Opkoblingen af mikronforstærkeren er vist på figur11.3.<br />

Vo<br />

RMF2<br />

Figur 11.3: Mikrofonforstærkeren opkoblet som inverterende forstærker på en operationsforstærker.<br />

Forstærkingen bestemmes som forholdet mellem RMF3 og RMF2, hvor der skal gælde:<br />

RMF3<br />

RMF2<br />

−<br />

+<br />

RMF3<br />

RMF3 vælges til 476 kΩ. RMF2 bestemmes udfra ligning 11.1.<br />

RMF2 RMF3<br />

20<br />

Vo<br />

20 (11.1)<br />

476kΩ<br />

20<br />

23 8kΩ (11.2)<br />

85


Kapitel 11. Mikrofonmodul<br />

Den endelige opkobling er vist på diagram B, hvor RMF2 er realiseret ved hjælp af en fast<br />

modstand, RMF2, på 23,2 kΩ, og et potentiometer, RMF2A, på 4,7 kΩ. Da udgangen ser ind i en<br />

kondensator på det efterfølgende trin, behøves der ikke at tages højde for offset.<br />

11.2.3 Højpasfilter<br />

Som tidligere nævnt, ønskes det at begrænse frekvensbåndet. Den nedre grænsefrekvens er valgt<br />

til 300 Hz. Til at sørge for, at der sker en dæmpning af de frekvenser, som ligger under de 300<br />

Hz, indføres der et højpasfilter. Der vælges at konstruere et 4. ordens filter med en Butterworth<br />

filterkarakteristik, da dette ikke har rippler i hverken stop eller pasbåndet [Sedra/Smith, 1998,<br />

side 893]. Dette realiseres ved koble to ens 2. ordens "Sallen & Key" filtre i serie.<br />

I Appendiks D vil overføringsfunktionen for et af disse filtre blive udledt og komponent størrelser<br />

vil blive beregnet ved sammenligning med standardligningen (i frekvensdomænet) for et 2.<br />

ordens højpas filter. Filteret skal da kobles op som vist på figur11.4. Filteret giver en dæmpning<br />

på ca. 62,5 dB ved 50 Hz, og opfylder dermed funktionskravet. Dæmpningen er bestemt ved:<br />

Vi<br />

CHP1<br />

47n<br />

CHP2<br />

47n<br />

RHP1<br />

18,7k<br />

11.2.4 Antialiasingfilter<br />

RHP2<br />

6,65k<br />

AdB 20log H s sj¡2π¡50<br />

+<br />

−<br />

CHP3<br />

47n<br />

CHP4<br />

47n<br />

RHP3<br />

18,7k<br />

Figur 11.4: Opkobling for højpasfiltret.<br />

Følgende afsnit er baseret på [Harmark, 2003]. Antialiasingfiltret skal, som nævnt i afsnit11.1.1,<br />

sørge for, at aliasing undgås. Dette gøres ved at dæmpe indgangssignalets effektivværdi ned til<br />

eller under kvantiseringsstøjen ved den halve samplingsfrekvens.<br />

Et talesignal har sin største effektivværdi ved 400 Hz. I det aktuelle tilfælde er den 2 Vp <br />

05Vef f,daVef f Vp<br />

4<br />

RHP4<br />

6,65k<br />

for talesignaler [Oppenheim/Schafer, 1999, side 197]. Desuden falder<br />

talesignalets amplitude med stigende frekvenser, og dets effektivværdi er ved 4 kHz faldet 20<br />

dB.<br />

Kvantiseringsstøjens effektivværdi, Nef f, er bestemt ved følgende, hvor VADC betegner A/Dkonverterens<br />

arbejdsområde, 0-5 V, og n er bitopløsningen af denne:<br />

86<br />

Nef f Npp<br />

2 Ô VLSB<br />

<br />

3 2 Ô 3<br />

VADC<br />

2 n 1<br />

2 Ô 3<br />

VADC<br />

2 8 1<br />

2 Ô 3<br />

5V<br />

255<br />

Ô 12 566 mVeff<br />

+<br />

−<br />

Vo


11.2. Design af mikrofonmodul<br />

Talesignalets effektivværdi ved 4 kHz er 50 mVeff, da der er sket en dæmpning på 20 dB af<br />

signalet ved 400 Hz. Forholdet mellem effektivværdien af talesignalet og kvantiseringsstøjen,<br />

SNR, ved 4 kHz bliver altså:<br />

SNR Vtalesignal<br />

Nef f<br />

<br />

50 mV<br />

883 19 dB<br />

566 mV<br />

Der skal altså være en yderligere dæmpning af talesignalet på 19 dB for at få det ned under<br />

kvantiseringsstøjen.<br />

Det er vha. matlab-filen, "filterberegning.m", som er vedlagt på cd-rom, vist, at hvis denne<br />

dæmpning skal overholdes, skal der enten benyttes et 14. ordens Butterworth filter, et 5. ordens<br />

Chebyshev filter eller et 3. ordens Elliptisk filter.<br />

Der vælges at anvende et MAX297 swithed capacitor filter, da dette giver mulighed for regulering<br />

af knækfrekvenser ved hjælp af en ekstern clock, CLK_F. Det valgte filter opfylder<br />

ovennævnte krav, da dette er et 8. ordens elliptisk filter. Selvom der vælges at benytte et elliptisk<br />

filter, der har en "dårlig" fasekarakteristik, har dette ingen indvirkning på talesignalet, da det<br />

som tidligere nævnt er frekvensindholdet, der er vigtigt for forståelse af tale. Opkoblingen af<br />

dette filter er vist på diagram B, hvor det ses, at der er indsat clampdioder (Schottkydioder med<br />

spændingsfald på 0,3 V) i indgangen. Dette er gjort, da filtret ifølge databladet ikke kan tåle<br />

spændinger, der er større end 0,3 V ud over forsyningsspændingen [MAX297, side 2].<br />

11.2.5 Spændingstilpasning<br />

A/D-konverterens maksimale arbejdsområde er 0V-5V,ogdasignalet svinger omkring 0 V<br />

med en ampitude på ¦ 2,5 V, skal signalet løftes med 2,5 V. Dette realiseres med en inverterende<br />

additionskobling på en operationsforstærker. Signalet adderes med -2,5 V, da koblingen<br />

inverterer signalet. Den inverterende additionskobling er vist på figur11.5.<br />

RAD4<br />

RAD5<br />

-5V<br />

−<br />

+<br />

Vref<br />

Vi<br />

RAD1<br />

RAD2<br />

Figur 11.5: Spændingstilpasning ved hjælp af en inverterende additionskobling på en operatonsforstærker.<br />

Modstandenes størrelse bestemmes ud fra, at der ønskes en forstærkning på 1. Derfor skal forholdet<br />

mellem RAD1 og RAD3 være 1. Det bestemmes, at Vref vælges til at være - 2,5 V, dette<br />

bevirker, at forholdet mellem RAD2 og RAD3 skal være 1. Modstandene RAD1, RAD2 og RAD3<br />

sættes til 10 kΩ.<br />

−<br />

+<br />

RAD3<br />

Vo<br />

87


Kapitel 11. Mikrofonmodul<br />

Vref kan bestemmes af en spændingsdeling af 2 lige store modstande, disse modstande kan vælges<br />

til at være 100 gange mindre end RAD2, så der kan ses bort fra disse modstande i beregningen<br />

af forstærkningen. Denne løsning med modstandværdier på 100 Ω forbruger en konstant strøm<br />

på 25 mA, dette strømforbrug formindskes ved at sætte RAD4 og RAD5 til 10 kΩ og indføre en<br />

spændingsfølger til at holde Vref på -2,5 V.<br />

11.2.6 A/D-konverter<br />

A/D-konverteren skal sættes op, så denne kan sende et interrupt, når den er færdig med konverteringen<br />

af data. Ifølge databladet [ADC0820] skal den sættes op i WR-RD-mode. Efter<br />

afsendelse af interrupt, venter den på signal om at sende dataene ud på databussen. På figur11.6<br />

ses, hvordan timingen for A/D-konverteren skal se ud.<br />

CS<br />

WR<br />

RD<br />

INT<br />

D00-D07<br />

tWR<br />

tINTL<br />

tRD<br />

tacc2<br />

tINTH<br />

t1H t0H<br />

Figur 11.6: Readcycle for A/D-konverter i WR-RD mode. [ADC0820]<br />

Som det ses af figur 11.6, skal CS-indgangen være lav, når der skal startes en konvertering, og<br />

der læses data. Det influerer ikke på konverterens funktion, hvis CS er lav hele tiden. Selve<br />

konverteringen starter på WR’s nedadgående flanke, og konverteringens output sendes til A/Dkonverterens<br />

interne latch på WR’s opadgående flanke. Herefter går INT lav, dette kan benyttes<br />

som interrupt til CPU-modulet. Efter INT er gået lav, afventes at RD går lav. Når RD går lav, latches<br />

konverterens output ud på databussen. Når RD eller CS går høj fjernes data fra databussen.<br />

INT går høj tidligst tINTH efter RD’s opadgående flanke, eller når CS går høj.<br />

Det ses af timingdiagrammet på figur 11.6 og tabel 11.1, hvilke tider, som skal overholdes i forbindelse<br />

med A/D-konvertering og læsning af data. Hvis tiderne skal overholdes, skal konverteren<br />

opkobles som på figur 11.7, hvor WR angiver, hvornår der skal påbegyndes en konvertering,<br />

og RD forbindes til ADC (CS). Da RD eller CS’s opadgående flanker resulterer i nulstilling af<br />

INT, vælges at CS forbindes til CLK_S, da konverteren så er aktiv, hver gang CLK_S er lav.<br />

Da CLK_S er lav imellem 62,5 µs og250µs, er der tid nok til, at hele A/D-konverteringen og<br />

læsningen fra konverteren kan foregå indenfor denne tid.<br />

For at A/D-konverteren skal kunne interface med kvalitetsmodulet, som giver en clock med en<br />

dutycycle på 50%, skal der laves tilpasning af signalet, i en MMV, som giver en puls ud, hvor<br />

88


Tekst Symbol Tid<br />

Skrivetid tWR 600 ns - 50 µs<br />

Læsetid tRD min. 600 ns<br />

WR høj til INT lav tINTL maks. 1300 ns<br />

RD lav til gyldig data tacc2 maks. 150 ns<br />

RD høj til INT høj tINTH maks. 225 ns<br />

RD høj til data ugyldig t1H t0H maks. 200 ns<br />

Tabel 11.1: Tider ved A/D-konvertering<br />

11.2. Design af mikrofonmodul<br />

længden ikke er afhængig af inputtet. A/D-konverteren fjerner ikke interruptet, når der modtages<br />

et IACK, derfor skal der indsættes noget kontrol logik, der kan tage sig af dette. A/D-konverteren<br />

kobles op som vist på 11.7.<br />

I tabel 11.1 ses, at der maksimalt går 150 ns fra konverterens RD går lav, til der kommer data<br />

på databussen. Det er hurtigt nok i forhold til ligningB.1 i afsnit B.1. Derfor kræver læsning fra<br />

A/D-konverteren ikke indsættelse af waitcycles.<br />

Fra AA-filter<br />

CLK_S<br />

ADC(CS)<br />

11.2.7 MMV<br />

MMV<br />

5V<br />

5V<br />

ADC0820<br />

13<br />

1<br />

7<br />

6<br />

8<br />

12<br />

11<br />

CS<br />

VIN<br />

MODE<br />

WR<br />

RD<br />

VREF(+)<br />

VREF(-)<br />

INT<br />

OFL<br />

DB0<br />

DB1<br />

DB2<br />

DB3<br />

DB4<br />

DB5<br />

DB6<br />

DB7<br />

9<br />

18<br />

2<br />

3<br />

4<br />

5<br />

14<br />

15<br />

16<br />

17<br />

D00<br />

D01<br />

D02<br />

D03<br />

D04<br />

D05<br />

D06<br />

D07<br />

Interuptlogik<br />

Figur 11.7: Opkobling af ADC med MMV og kontrol logic.<br />

Af tabel 11.1 ses også, at den tid, som WR skal være lav, tWR, for at konverteringen bliver<br />

nøjagtig, skal være mellem 600 ns og 50 µs. Da WR er et signal, som styres af CLK_S, der<br />

er lav imellem 62,5 µs og 250 µs, kan CLK_S ikke sættes direkte til WR. Derfor designes en<br />

MMV.<br />

Som MMV benyttes en tilstandsmaskine designet i en PEEL. Tilstandsdiagrammet for denne<br />

er vist på figur 11.8. Den får clocksignalet fra krystallet, som processoren også anvender. Dette<br />

giver tiden, i ligning (11.3), da WR er lav i 6 tilstande.<br />

IACK4<br />

IRQ4<br />

89


Kapitel 11. Mikrofonmodul<br />

CLK_S = 0<br />

S6<br />

WR=0<br />

11.2.8 Interrupt logik<br />

tRW 6 ¡<br />

S7<br />

WR=1<br />

S5<br />

WR=0<br />

1<br />

6 ¡ 125ns 750ns (11.3)<br />

8MHz<br />

CLK_S = 1<br />

CLK_S = 1<br />

INIT<br />

WR=1<br />

S4<br />

WR=0<br />

CLK_S = 0<br />

S1<br />

WR=0<br />

S3<br />

WR=0<br />

Figur 11.8: Tilstandsdiagram for MMV.<br />

Når CPU-modulet modtager IRQ4, svarer denne ved at sende et IACK4-signal, som skal få<br />

IRQ4 til at gå høj. Dette klares ved en tilstandsmaskine, som skal have tilstandsdiagrammet, der<br />

ses på figur 11.9. Dette konstrueres i en PEEL, da dette er den simpleste løsning på problemet.<br />

INT=0<br />

INT = 1<br />

S2<br />

IRQ4 = 1<br />

INT=1<br />

INIT<br />

IRQ4 = 1 INT=0<br />

IACK = 0<br />

S1<br />

IRQ4 = 0<br />

S2<br />

WR=0<br />

IACK = 1<br />

Figur 11.9: Tilstandsmaskine, der skal håndtere IRQ4 og IACK4 i forhold til CPU’en.<br />

Principppet er, at når tilstandsmaskinen modtager et INT fra A/D-konverteren, skal maskinens<br />

IRQ4-udgang gå lav. Når IACK4-indgangen går lav, fordi CPU’en sender signalet, skal maskinen<br />

sørge for, at IRQ4 går høj, og ikke bliver lav før INT har været høj og går lav igen.<br />

11.2.9 Opkobling<br />

Opkoblingen af A/D-konverteren og dens hjælpekredsløb er vist på diagram B, hvor der inden<br />

A/D-konverteren er indsat en rail-rail operationsforstærker opkoblet som en spændingsfølger.<br />

90


11.3. Test<br />

Dens indgange er beskyttet af 2 clampdioder, så spændingen ikke kan overstige dennes forsyning.<br />

Forstærkeren er forsynet med 5 V. Dette kredsløb fungerer som beskyttelse af A/Dkonverteren,<br />

da den ifølge databladet, [ADC0820], maksimalt kan tåle spændinger 0,1 V ud<br />

over forsyningen.<br />

11.3 Test<br />

Af testrapport II for mikrofonmodulet ses, at mikrofonforstærkeren skal forstærke mikrofonsignalet<br />

ca. 20 gange, for at det kan svinge mellem -2,5 og 2,5 V.<br />

Desuden ses, at de enkelte delelementer fungerer efter hensigten. Det ses, at højpasfilteret dæmper<br />

i stopbåndet med ca. 61 dB. Antialiasingfilteret dæmper med 22 dB ved den tilhørende halve<br />

samplingsfrekvens.<br />

Spændingstilpasningskredsløbet fungerede efter hensigten, udgangen svingede omkring 2,5 V,<br />

mellem 0 og 5 V. Derudover beskyttes A/D-konverteren som forventet mod over- og underspændinger.<br />

Det ses, at A/D-konverteren konverterer med en nøjagtighed, der afviger fra det forventede<br />

med LSB. Dette accepteres, da det er i overensstemmelse med A/D-konverterens specifikationer<br />

[ADC0820, side 3]. Testen viste desuden, at det var muligt at kommunikere med A/Dkonverteren<br />

fra CPU-modulet. Dette betyder, at IRQ4 sendes korrekt og modtagelse af IACK4<br />

resulterer i negering af IRQ4.<br />

Integrationstesten viste, at det var muligt at sende et sinussignal ind på antialiasingfilterets indgang,<br />

og sample dette. Da det samme signal herefter blev sendt ud på rekonstruktionsfilterets<br />

udgang, vurderes det, at readcyclen for læsning fra A/D-konverteren overholdes.<br />

11.4 Delkonklusion<br />

Mikrofonmodulet opfylder kravene i kravspecifikationen med hensyn til frekvensområderne ved<br />

de forskellige lydkvaliteter og bitopløsning. Højpasfilteret dæmper 50 Hz støj fra forsyningen<br />

med 61 dB, og antialiasingfilteret dæmper 22 dB ved den tilhørende halve samplingsfrekvens.<br />

Dette overholder funktionskravet.<br />

Ud fra integrations- og A/D-konvertertesten kan det konkluderes, at modulet har det rette interface<br />

til kommunikation med CPU-modulet.<br />

Det kan derfor konkluderes, at mikrofonmodulet fungerer efter hensigten; de opstillede krav<br />

overholdes.<br />

91


Kapitel<br />

12<br />

Kvalitetsmodul<br />

Formålet med dette modul er at styre frekvensen, hvormed A/D-konverteren skal sample, samt<br />

at angive knækfrekvensen for antialiasing- og rekonstruktionsfilterne.<br />

Kapitlet er baseret på anvendelsen af et MAX294-filter som antialiasing- og rekonstruktionsfilter.<br />

Det viste sig under forløbet, at disse var meget følsomme for over- og underspændinger, og<br />

der blev derfor senere valgt at benytte et MAX297-filter, da dette var mindre følsomt.<br />

12.1 Funktionoversigt<br />

Fra afsnit 6.2.6 fås input og output til kvalitetstyringsmodulet. FS er CS fra CPU-modulet og<br />

R/W er write-signalet fra CPU-modulet. Data-signalerne, D00 og D01, angiver hvad kvaliteten<br />

skal være. CLK_F og CLK_S er clocksignalerne til henholdsvis antialiasing-/rekonstruktionsfilter<br />

og A/D-konverteren.<br />

Kvalitetstyringsmodulet realiseres i princippet vha. to clocksignaler, en clockneddeler og en<br />

styret switch, som styres af et register. Dette er illustreret på figur 12.1. De to clocksignaler<br />

gives som input til en clockneddeler, der neddeler hver clock til tre forskellige clocksignaler. De<br />

i alt seks clocksignaler er input til en styret switch, som skifter mellem dem alt efter den valgte<br />

kvalitet.<br />

92<br />

D00<br />

D01<br />

FS<br />

R/W<br />

Kvalitet_status<br />

Register<br />

Kvalitet_styring<br />

Clock-neddeler<br />

Filter<br />

clock<br />

Styret switch<br />

Sampling<br />

clock<br />

CLK_F<br />

CLK_S<br />

Figur 12.1: Blokdiagram for kvalitetstyringsmodulet.


12.1.1 Funktionskrav<br />

12.2. Løsningsmuligheder<br />

De valgte filtre i mikrofon- og højttalermodulet kræver et clocksignal, der har en 100 gange så<br />

høj frekvens som den ønskede knækfrekvens [MAX297, side 6], denne faktor var kun 50 for<br />

MAX297. Frekvenserne for clocksignalerne, CLK_F og CLK_S, ved de forskellige kvalitetsindstillinger<br />

er vist i tabel 12.1.<br />

Filtrene krævede, at clockindgangens logisk "0" havde en spænding på (-Vcc-0,3) til 1 V og<br />

logisk "1" en spænding på 4 V til (Vcc+0,3).<br />

Kvalitet D01 D00 CLK_F CLK_S<br />

Ingen 0 0 0Hz 0Hz<br />

Dårligst 0 1 170 kHz 4 kHz<br />

Middel 1 0 340 kHz 8 kHz<br />

Bedst 1 1 680 kHz 16 kHz<br />

Tabel 12.1: Clocksignalerne ud af kvalitetsmodulet ved forskellige opsætninger af<br />

Kvalitet_status-registret.<br />

12.2 Løsningsmuligheder<br />

De forskellige måder at realisere den ønskede funktion af modulet på, er opstillet her:<br />

Clock’s: Clocksignalerne kan overordnet laves på to måder:<br />

1 clock: Signalerne laves ud fra ét clocksignal.<br />

2 clock’s: Signalerne laves ud fra to clocksignaler.<br />

Oscillatorerne kan da realiseres på flere måder:<br />

¯ AMV - Astabil Multi Vibrator<br />

¯ Krystaloscillator<br />

Kvalitet_styring: Clockneddelingen kan foretages i kredse designet til dette - dvs. tællere, eller<br />

de kan designes i en PEEL.<br />

Switchen kan realiseres som digital switch dvs. logisk. Evt. kan switchen realiseres som<br />

en analog switch.<br />

Kvalitet_status: Kvalitet_status kan laves som en latch eller med flip-flop.<br />

93


Kapitel 12. Kvalitetsmodul<br />

12.2.1 Valg af løsning<br />

Det er valgt at realisere kvalitetsmodulet på følgende måde:<br />

Clock’s realiseres ved brug af én krystaloscillator, da komponentudleveringen ikke har en oscillator,<br />

der kan neddeles præcist til de ønskede frekvenser til antialiasing- og rekonstruktionsfiltret<br />

fra tabel 12.1. Denne oscillators frekvens skal kunne neddeles præcist til de<br />

ønskede frekvenser til A/D-konverteren.<br />

Kvalitets_styring Der vælges at anvende binære tællere til neddelingen, da det ellers ville<br />

kræve en PEEL til hver clocksignal, for at lave neddelingen i en PEEL. Det vælges at<br />

lave switchen i en PEEL, da det samtidig vil være muligt at realisere registeret, Kvalitets_status,<br />

i samme PEEL.<br />

Kvalitets_status laves i en PEEL, som en latch, der således får det samme interface til CPUmodulet,<br />

som RAM har det i hukommelsesmodulet.<br />

12.3 Design af kvalitetsmodul<br />

For at gemme oplysningen om kvaliteten, 0-3, skal der kunne gemmes to bit. Disse to bit skal<br />

kun kunne ændres, når der er CS til kredsen og W er asserteret. Et forbillede på dette er en<br />

writecycle til en af RAM-kredsene. Det er altså nødvendigt med W, FS (CS), D00 og D01 som<br />

input til kredsen. D00 og D01 angiver kvaliteten. Da kommunikationen foregår asynkron, skal<br />

lagringen af D00 og D01 ikke være kanttrigget. Dette opnås ved at implementere to D-latches<br />

i PEEL’en; den ene til D00 og den anden til D01. Nye værdier for D00 og D01 kan latches, når<br />

de to D-lathes får C=1, som er kontrolsignalet. Ved at lade C være afhængig af FS, som er CS<br />

til frekvensstyringskredsen, og W kan den ønskede virkning fås. Udfra at WogFS begge er<br />

aktivt lave og excitationsligningen for en D-latch, [Wakerly, 2001, side 674], fås udtrykket for<br />

kvaliteten, K = [Q1*,Q0*]:<br />

C W FS (12.1)<br />

Q0£ C ¡ D00 C ¡ Q0 D00 ¡ Q0 (12.2)<br />

Q1£ C ¡ D01 C ¡ Q1 D01 ¡ Q1 (12.3)<br />

Notationen "*" betyder, at det er den fremtidige værdi. Denne notation er dog ikke gyldig i<br />

ABEL, og i det skrevne program står der f.eks. kun Q0.<br />

12.3.1 Oscillator<br />

Som clock til kvalitetsmodulet er valgt en oscillator på 4,096 MHz, da denne kan neddeles<br />

til de ønskede frekvenser til A/D-konverteren og tilnærmelsesvis til de ønskede frekvenser for<br />

94


12.3. Design af kvalitetsmodul<br />

antialiasing- og rekonstruktionsfiltret. Således skal neddelingsfaktoren for frekvenserne til A/Dkonverteren,<br />

antialiasing- og rekonstruktionsfiltret være henholdvis 256/512/1024 og 6/12/24,<br />

hvilket giver frekvenser udregnet i ligningerne herunder:<br />

CLK_F1 <br />

CLK_F2 <br />

CLK_F3 <br />

CLK_S1 <br />

CLK_S2 <br />

CLK_S3 <br />

4096 MHz<br />

170667 kHz (12.4)<br />

24<br />

4096 MHz<br />

341333 kHz (12.5)<br />

12<br />

4096 MHz<br />

682667 kHz (12.6)<br />

6<br />

4096 MHz<br />

4000 kHz (12.7)<br />

1024<br />

4096 MHz<br />

8000 kHz (12.8)<br />

512<br />

4096 MHz<br />

16000 kHz (12.9)<br />

256<br />

Oscillatoren opkobles ligesom oscillatoren for CPU-modulet, dette ses i diagram B.<br />

12.3.2 Clockneddeler<br />

Samplingsfrekvenser<br />

Som clockneddeler til A/D-konverteren anvendes kredsen 74hc4040, som er en binær tæller med<br />

12 udgange, da denne kan dele med høje faktorer i forhold til en PEEL (kræver 10 udgangsben<br />

for at dele med en faktor 1024, da 2 10 1024). Udgangen fra oscillatoren tilsluttes på CP, som<br />

er en inverteret clockindgang på tælleren [Philips Semiconductors, 1990]. Udgangene, Q0-Q11,<br />

på clockneddeleren repræsenterer hver en neddeling af CP med en faktor to, således at Qn <br />

CP<br />

2 n 1 fQn f CP<br />

2 n 1 . Udgangene, Q7-Q9, anvendes derfor. Masterreset, MR, for clockneddeleren<br />

er aktiv høj og sættes derfor til stel, da denne ellers vil tvinge udgangene lave.<br />

Filterfrekvenser<br />

Som clockneddeler til antialiasing- og rekonstruktionsfiltret anvendes en PEEL, da denne kan<br />

klare de små faktorer, og tilmed kan dele med en faktor, som ikke er en potens af 2.<br />

Neddelingen af clock’en på 4,096 MHz med en faktor 6, 12 og 24 er realiseret vha. en tilstandsmaskine<br />

i ABEL. Dette er gjort med i alt 24 tilstande, som gennemløbes afhængigt af<br />

indgangsclock’en, således at der skiftes tilstand hver gang indgangsclocken går høj. I hver tilstand<br />

sættes de tre udgangsclock’s, CLK_F1, CLK_F2 og CLK_F3, til værdier så den ønskede<br />

neddeling af indgangsclock’en opnås. F.eks. sættes CLK_F1 til 1 de første 12 tilstande og til 0<br />

de sidste 12; derved opnås en neddeling på 24. ABEL-koden kan findes på den vedlagte cd-rom<br />

som "clkdeler.abl".<br />

95


Kapitel 12. Kvalitetsmodul<br />

12.3.3 Programmering af PEEL<br />

Registret Kvalitet_status realiseres i PEEL’en blot ved at opskrive excitationsligningerne for de<br />

to D-latches fra afsnit 12.3 i ABEL.<br />

Den styrede switch har som input de gemte værdier for Q0 og Q1 og de seks clocksignaler fra<br />

clockneddeleren. Ved brug af WHEN...THEN...-konstruktioner og kvaliteten, K, som er udtrykt<br />

ved Q0 og Q1, kan clock’en, som skal sendes igennem PEEL’en, vælges.<br />

I den følgende ABEL-kode er CLK_F udgangsclocken til filtrene og CLK_F1 er indgangsclocken<br />

for filtrene ved den dårligste kvalitetsindstilling, altså 170 kHz og CLK_S er udgangsclocken<br />

til samplingsmodulet, A/D-konverteren, og CLK_S1 er indgangsclocken for samplingsmodulerne<br />

ved den dårligste kvalitetsindstilling, altså 4 kHz.<br />

WHEN (K == 1) THEN CLK_F = CLK_F1;<br />

WHEN (K == 1) THEN CLK_S = CLK_S1;<br />

Dette betyder, at når kvaliteten er sat til 1, så skal udgangen, CLK_F, have samme værdi som<br />

indgangen, CLK_F1, og udgangen ,CLK_S, skal have samme værdi som indgangen, CLK_S1.<br />

Hele ABEL-koden til frekvensstyringen kan findes på den vedlagte cd-rom som "clkdfil.abl".<br />

12.3.4 Timing<br />

Frekvensstyringsmodulet indgår i en writecycle, og i det tilfælde, hvor en ny kvalitet skal indlæses,<br />

kan dette sammenlignes med en writecycle til RAM og ROM, som er behandlet i afsnit<br />

B.2. Tiden, tWriteReady, på figur B.4 skal være mindre end 165 ns jf. ligning B.3. For frekvensstyringsmodulet<br />

går der tPD = 10 ns fra input til output for ikke clockafhængigt output<br />

[PEEL18CV8]. Det er denne tid, som skal være mindre end 165 ns jf. afsnit B.2, og der skal<br />

derfor ikke indsættes waitcycles, når der skal skrives til frekvensstyringsmodulet.<br />

12.3.5 Opkobling<br />

Kredsløbsdiagrammet for kvalitetsmodulet kan ses på diagram B. Dog kan PEEL’en der neddeler<br />

frekvenserne til antialiasing- og rekonstruktionsfiltret ikke findes, da denne ikke opfyldte<br />

krav til spændingsniveauer på filtrenes indgangsben. I stedet anvendes en neddeler bestående af<br />

en 74HC4017 efterfulgt af en 74HC4040, se afsnit 12.5 for begrundelse.<br />

12.4 Simulering<br />

PEEL’ens funktion er simuleret i ABEL. Alle testvektorer passede. Latchen kunne ikke simuleres,<br />

men er testet i en PEEL-tester, men er testet i en PEEL-tester, som beskrevet i næste afsnit.<br />

96


12.5 Test<br />

12.5.1 Clocksignal<br />

12.5. Test<br />

Clocksignalet er målt på et oscilloskop. Testresultatet for 4,096 MHz oscillatoren kan findes<br />

under testrapport III.<br />

12.5.2 Clockneddeler<br />

Udgangssignalerne fra clockneddelerne, 74hc4040 og PEEL, kan findes under testrapportIII.<br />

Det blev dog konkluderet, at PEEL’en ikke havde tilfredsstillende spændingsniveauer på udgangene<br />

(disse svingede mellem -2 V og 6,1 V), hvilket ødelagde MAX294-filtrene. Derfor<br />

revurderes det valgte design og en 74HC4017 i serie med en 74HC4040 vælges som neddeler<br />

i stedet for PEEL’en. Clocken på 4,096 Mhz skal neddeles til henholdsvis 85 kHz, 170 kHz og<br />

340 kHz, for at antialiasing- og rekonstruktionsfiltret har de rigtige knækfrekvenser på henholdsvis<br />

1,7 kHz, 3,4 kHz og 6,8 kHz. Dette giver neddelingsfaktorer på 12, 24 og 48, hvilket ikke<br />

kan neddeles binært med 74HC4040; derfor anvendes 74HC4017 til at neddele med en faktor 3,<br />

og denne neddelede clock sættes på 74HC4040’s clockindgang, CP. På 74HC4040’eren anvendes<br />

udgangene Q1-Q3 for at opnå de ønskede neddelingsfaktorer. Opkoblingen af denne "nye"<br />

neddeler kan findes på diagram B. Måleresultater fra denne neddeler er tilføjet i testrapporten<br />

for kvalitetsmodulet, og disse resultater blev vurderet bedre i forhold til PEEL’en resultater, så<br />

derfor er denne løsning fastholdt.<br />

12.5.3 Styret switch<br />

Alle testvektorer er testet på PEEL-testeren. Resultatet af denne test, dog kun for de testvektorer<br />

som ikke kunne simuleres vha. ABEL’s testvektorer, kan findes i førnævnte testrapport.<br />

12.5.4 Integrationstest<br />

Kvalitetsmodulet kan kommunikere med CPU’en, og kvaliteten kan derved ændres. Denne test<br />

er beskrevet i førnævnte testrapport.<br />

12.6 Delkonklusion<br />

Clocksignalerne fra krystaloscillatoren og clockneddelerne har de korrekte frekvenser, men<br />

spændingsniveauerne er generelt ikke tilfredsstillende. Dog fungerer kvalitetsmodulet som helhed<br />

tilfredsstillende, da A/D-konverteren har de ønskede samplingsfrekvenser, antialiasing- og<br />

rekonstruktionsfiltret har de rigtige knækfrekvenser og modulet kan tilgås, således at kvaliteten<br />

kan ændres fra SW.<br />

97


Kapitel<br />

13<br />

Højttalermodul<br />

Formålet med modulet er at konvertere gemt data til lyd.<br />

13.1 Funktionsoversigt<br />

Højttalermodulet består af en D/A-konverter, som konverterer digital data til en analog spænding.<br />

Spændingen sendes gennem et rekonstruktionsfilter og derefter en udgangsforstærker, som<br />

giver den effekt, som højttaleren kræver. Dette forløb er vist på figur13.1.<br />

D00-D07<br />

DAC(CS)<br />

R/W<br />

CLK_F<br />

DAC<br />

Rekonstruktionsfilter<br />

Udgangsforstærker<br />

Figur 13.1: Blokdiagram for højttalermodulet.<br />

Modulet får følgende input fra CPU-modulet: DAC(CS), R/W og 8 bit databus. Fra Kvalitetsmodulet<br />

kommer et CLK_F-signal, som angiver rekonstruktionsfilterets knækfrekvens. Modulets<br />

output er lyd fra højttaleren.<br />

13.1.1 Funktionskrav<br />

Modulet skal kunne konvertere 8-bit lyddata til lyd på højttaleren. Selve konverteringen foretages<br />

af en 8-bit D/A-konverter. Denne skal overholde den writecycle, som er beskrevet i<br />

appendiks B.2.<br />

Rekonstruktionsfilteret har til formål at rekonstruere det analoge signal, uden de frekvenskomposanter,<br />

der opstår under sample-processen og D/A-konverteringen, se appendiks A. Derfor<br />

kræves det, at det skal have en knækfrekvens på under den halve samplingsfrekvens.<br />

Udgangsforstærkeren skal kunne drive højttaleren, så det er muligt at høre, hvad der bliver<br />

afspillet.<br />

98


13.2 Design af Højttalermodul<br />

13.2.1 D/A-konverter<br />

Som D/A-konverter vælges AD7524, denne har en opløsning på 8 bit.<br />

13.2. Design af Højttalermodul<br />

Konverteren kræver, at writecyclen foregår som vist på figur 13.2. Cyclen foregår ved at CS<br />

og R/W går lav hhv. tCS og tWR før R/W går høj igen. Når enten CS eller R/W er høje, holder<br />

D/A-konverterens udgang den værdi, der svarer til den værdi, som var på databenene, da CS<br />

eller R/W gik høje. Data skal komme tDS før R/W går høj, og holdes tDH efter R/W går høj.<br />

CS<br />

R/W<br />

D00-D07<br />

tCS<br />

tWR<br />

tDS<br />

tCH<br />

tDH<br />

Figur 13.2: writecycle til D/A-konverter.<br />

I tabel 13.1 ses de tider, som skal overholdes ved skrivning til D/A-konverteren. I appendiksB.2<br />

ses, at R/W går høj efter AS, og derved også CS. Dette overholder ikke figur13.2, men det klares<br />

ved at forbinde DAC(CS) fra CPU’en til CS og R/W, da disse 2 signaler gerne må komme på<br />

samme tid ifølge tabel 13.1. Ifølge appendiks B.2 bliver DAC lav i 25¡tcycle tCHSL tAdrDec<br />

tCLSH tAdrDec 25 ¡ 125 60 10 62 10 3145ns , hvilket opfylder kravene i tabellen.<br />

Desuden kommer data på databussen 4¡tcycle tCLDO tCLSH tAdrDec 2¡125 62 62 10 <br />

260 ns før DAC går høj. Data holdes i 05 ¡ tcycle tCLSH tAdrDec tCHDOI 05 ¡ 125 62<br />

10 40 305 ns, hvilket ligger over de 10 ns, som kræves af D/A-konverteren.<br />

Tekst Symbol Tid<br />

CS til skrivning setup tid tCS min. 170 ns<br />

CS holdetid efter skrivning tCH 0<br />

Skrivelængde tWR min. 170 ns<br />

Data setup tid tDS min. 135 ns<br />

Data holdetid tDH min. 10 ns<br />

Tabel 13.1: Tider ved D/A-konvertering [AD7524].<br />

D/A-konverteren kobles op som det ses på figur 13.3. Konverteren kræver, at der er en operationsforstærker<br />

i udgangen af den [AD7524]. Dertil vælges en TLE2072. Udgangen af opera-<br />

99


Kapitel 13. Højttalermodul<br />

tionsforstærkeren kobles tilbage til RFB, som er et feedback-ben, der sørger for regulering af<br />

forstærkningen i D/A-konverteren. Outputtet er inverteret, men dette har som nævnt ingen betydning<br />

i forbindelse med audio. Desuden svinger signalet mellem -5 V og 0 V, men da signalet<br />

sendes ind i en kondensator, har dette DC-offset ingen betydning.<br />

5V<br />

DAC<br />

D00<br />

D01<br />

D02<br />

D03<br />

D04<br />

D05<br />

D06<br />

D07<br />

11<br />

10<br />

9<br />

8<br />

7<br />

6<br />

5<br />

4<br />

13.2.2 Rekonstruktionsfilter<br />

AD7524A<br />

D0<br />

D1<br />

D2<br />

D3<br />

D4<br />

D5<br />

D6<br />

D7<br />

15<br />

VREF<br />

13<br />

WRITE<br />

12<br />

CS<br />

OUT1<br />

OUT2<br />

RFB<br />

1<br />

2<br />

16<br />

2<br />

-<br />

15V<br />

8<br />

TLE2072<br />

+<br />

3<br />

4<br />

-15V<br />

Figur 13.3: Opkobling af D/A-konverter<br />

1<br />

Til rekonstruktionsfilter<br />

Rekonstruktionsfilteret vælges til at være samme type som antialiasingfilteret, dvs. MAX297.<br />

Opkoblingen foretages på samme måde som i mikrofonmodulet, og der benyttes de samme<br />

knækfrekvenser ved de forskellige lydkvaliteter, se afsnit11.2.4 om antialisingfilteret.<br />

13.2.3 Udgangsforstærker<br />

For at drive højttaleren i udgangen er det nødvendigt med en effektforstærker. Inputsignalet til<br />

forstærkeren kommer fra rekonstruktionsfilteret og svinger mellem -5 V og 0 V. For at minimere<br />

pladsforbruget vælges en integreret kreds til at styre forstærkningen. Den valgte kreds<br />

er LM380 [LM380, 2000]. Kredsen har brug for en positiv forsyning i området fra 10-22 V.<br />

Forsyningen vælges til 15 V. Forstærkeren centrerer automatisk outputtet omkring halvdelen af<br />

forsyningsspændingen. LM380 skal kobles op med ydre komponenter. Det er vist på figur13.4.<br />

Kondensatoren i udgangen, CHF1, er sat for at undgå DC over højttaleren. Modstanden, RHF1,<br />

og kondensatoren, CHF3, dæmper støj på 5-10 MHz [LM380-A, 1995, s. 3]. CHF2 er en brumundertrykkelseskondensator<br />

og CHF4 sikrer mod selvsving [Soelberg, 1977, s. 316]. Indgangskondensatoren,<br />

CHF5, fjerner DC på indgangen. LM380 giver en spændingsforstærkning på 50<br />

gange. Dette betyder, at indgangssignalet skal dæmpes for at udgangen ikke peaker ud. Udgangssignalet<br />

må maksimalt være 15 Vp. Dvs. indgangsignalet skal dæmpes til:<br />

vIN 15V<br />

50<br />

300mV<br />

For at kunne styre forstærkningen og dermed volumen indføres et potentiometer, RHF3, på10<br />

kΩ. vIN skal dæmpes til 300 mV med en spændingsdeling mellem RHF2 og RHF3.RHF3 vælges<br />

100


RHF2<br />

158k<br />

RHF3<br />

10k<br />

vIN<br />

CHF5<br />

100n<br />

ud fra at potentiometeret er 0 Ω.<br />

300mV<br />

5V <br />

13.3 Test<br />

CHF4<br />

27p<br />

6<br />

-<br />

14<br />

LM380<br />

+ 7<br />

2<br />

1<br />

+<br />

CHF2<br />

6,8u<br />

VCC =15V<br />

8<br />

CHF1<br />

470u<br />

+<br />

RHF1<br />

2,7R<br />

CHF3<br />

100n<br />

Figur 13.4: Diagram over højttalerforstærker.<br />

10kΩ<br />

RHF2 10kΩ<br />

RHF2 10kΩ 1 300mV<br />

5V<br />

300mV<br />

5V<br />

1567kΩ 158 kΩ<br />

13.3. Test<br />

I testrapport IV ses det, at højttalermodulet fungerer som forventet. D/A-konverteren er i stand<br />

til at konvertere lineært, og kan kommunikere med CPU-modulet. At signalet kan gå ud over -5<br />

V og 0 V tilskrives støj på forsyningen, og ignoreres derfor.<br />

Det konkluderes ud fra testrapporten II for mikrofonmodulet, at rekonstruktionsfilteret fungerer,<br />

da dette er koblet på nøjagtig samme måde som antialiasingfilteret.<br />

Udgangsforstærkeren virker efter hensigten, da denne er i stand til at drive højttaleren uden<br />

forvrængning af signalet.<br />

Integrationstesten viste, at det var muligt at sende et sinussignal til mikrofonmodulet og rekonstruere<br />

signalet på rekonstruktionsfilterets udgang. Signalet havde samme frekvens som det<br />

indsendte signal.<br />

13.4 Delkonklusion<br />

På baggrund af testrapporten konkluderes det, at højttalermodulet fungerer efter hensigten. De<br />

opstillede krav overholdes, idet det er muligt at sende data til D/A-konverteren, som herefter<br />

konverteres. Udgangsforstærkeren forstærker signalet uden synlig forvrængning og rekonstruktionsfilteret<br />

dæmper de frekvenskomposanter, der fremkommer ved D/A-konvertering.<br />

Ud fra integrations- og D/A-konvertertesten kan det konkluderes, at modulet har det rette interface<br />

til kommunikation med CPU-modulet. Det kan desuden konkluderes, at højttalermodulet<br />

er i stand til at gendanne et samplet signal.<br />

101


Kapitel<br />

14<br />

Knapmodul<br />

Formålet med modulet er at registrere og håndtere knaptryk fra brugeren og formidle dem videre<br />

til CPU-modulet.<br />

Kapitlet er baseret på en PEEL anvendt som knapencoder. Denne viste dog sig ikke at være egnet<br />

til dette, da der var støj på både aktive og inaktive udgange ved knaptryk. Efter det egentlige<br />

design er der derfor valgt at anvende en 16 til 4 encoder MM74C922 [MM74C922].<br />

14.1 Funktionsoversigt<br />

Modulet består af knapperne, Knap_styring, og registret, Knap_status. Modulet har to forskellige<br />

grænseflader: en til omverdenen (brugeren) via knapperne og en til processoren. Disse<br />

grænseflader er angivet i afsnit 6.2.8. Desuden grænser modulet op til softwaren. Denne grænseflade<br />

er beskrevet i afsnit 5.4. Et blokdiagram over knapmodulet kan ses på figur14.1.<br />

00 11<br />

IRQ3<br />

14.1.1 Funktionskrav<br />

IACK3<br />

Prelfjerner<br />

Encoder<br />

Interruptstyring<br />

CLK<br />

Register<br />

KS<br />

R<br />

D00-D03<br />

Knap_styring<br />

Knap_status<br />

Figur 14.1: Blokdiagram for knapmodulet.<br />

Det er nødvendigt med en prelfjerner, for at undgå at Knap_styringen opfatter prel som flere<br />

knaptryk. Der er tale om ti knapper dvs. ti signaler. Grænsefladen er en 4 bit bred databus, derfor<br />

er det nødvendigt at encode knapsignalerne. Det vælges, at det er det første knaptryk, som skal<br />

gemmes i Knap_status, og først skal kunne ændres, når CPU’en har aflæst denne værdi. Et<br />

knaptryk defineres til at være en påvirkning af en knap og deaktivering af den (ligesom på en<br />

almindelig telefon). Dette gøres for at undgå, at brugeren trykker på knappen én gang, men<br />

102


14.2. Design af knapmodul<br />

modulet opfatter det som mere end ét knaptryk, fordi brugeren holder knappen nede i lang tid i<br />

forhold til CPU’ens hastighed.<br />

Efter et knaptryk skal der sendes et interrupt til CPU’en. Interruptet skal holdes, indtil der modtages<br />

et IACK3-signal, dette skyldes, at interruptet ikke med sikkerhed bliver behandlet af CPU’en<br />

med det samme.<br />

Modulet må ikke påvirke databussen, hvis den ikke er chipselected. Udgangene skal altså være<br />

højimpedante, hvis KS er negeret.<br />

14.1.2 Løsningforslag<br />

En prelfjerner kan konstrueres ved at anvende latches eller et RC-kredsløb.<br />

Signalerne encodes som angivet i afsnit 5.4. Det kan vælges at encode signalerne prioriteret eller<br />

ikke-prioriteret. At signalerne er prioriterede, betyder at det indgangssignal med den højeste<br />

prioritet vil slippe igennem, hvis to eller flere knapper påvirkes. For at encode de ti knapsignaler,<br />

kræves der minimum en 10-4 encoder. Knap_styring og registeret, Knap_status, kan<br />

implementeres i en PEEL. Dette kan gøres enten asynkront eller synkront.<br />

14.1.3 Valg af løsning<br />

Det vælges at konstruere prelfjerneren med et RC-led.<br />

Det vælges at encode signaler prioriteret, så der ikke opstår problemer, hvis to eller flere knapper<br />

bliver påvirket på samme tid. Signalerne prioriteres i samme rækkefølge, som de encodes i dvs.<br />

optag har den højeste prioritet og reset den laveste prioritet.<br />

Den største encoder, der stilles til rådighed i komponentudleveringen er en 8-3 encoder. Det<br />

vælges derfor at programmere en 10-4 prioritetsencoder i en PEEL.<br />

Den synkrone løsning til knap-styring, og registeret, Knap_status, vælges, fordi det anbefales<br />

at lave synkrone kredsløb [Wakerly, 2001, s. 2]. Desuden vil det blive nemmere at styre afsendelsen<br />

af IRQ3. Det vælges at implementere disse funktioner i en PEEL.<br />

14.2 Design af knapmodul<br />

14.2.1 Prelfjerner<br />

Knapperne vælges til at være aktiv lave. Prelfjerneren bestående af et RC-led kobles op på<br />

samme måde som ved NMI-knappen i CPU-modulet, hvilket er vist på figur8.7.<br />

14.2.2 Encoder<br />

Signalerne encodes i den mindste PEEL, der er til rådighed i komponentudleveringen, fordi<br />

denne er i stand til at encode de ti signaler. Denne PEEL er en 18CV8 [PEEL18CV8]. Signalerne<br />

encodes ved brug af en sandhedstabel i ABEL. Udgangene fra encoderen betegnes K0-K3. I<br />

103


Kapitel 14. Knapmodul<br />

encoderen gøres disse aktiv høje. Sandhedstabellen for encoderen ses i tabel14.1. Hele ABELkoden<br />

til encoderen kan findes på den vedlagte cd-rom som “encoder.abl”.<br />

00 11 R K3 K2 K1 K0<br />

1 1 1 1 1 1 1 1 1 1 0 0 0 0<br />

0 X X X X X X X X X 0 0 0 1<br />

1 0 X X X X X X X X 0 0 1 0<br />

1 1 0 X X X X X X X 0 0 1 1<br />

1 1 1 0 X X X X X X 0 1 0 0<br />

1 1 1 1 0 X X X X X 0 1 0 1<br />

1 1 1 1 1 0 X X X X 0 1 1 0<br />

1 1 1 1 1 1 0 X X X 0 1 1 1<br />

1 1 1 1 1 1 1 0 X X 1 0 0 0<br />

1 1 1 1 1 1 1 1 0 X 1 0 0 1<br />

1 1 1 1 1 1 1 1 1 0 1 0 1 0<br />

Tabel 14.1: Sandhedstabel for encoderen. X’erne angiver don’t cares. Bemærk at knapperne er<br />

aktiv lave, men at udgangene er aktiv høje.<br />

14.2.3 Interruptstyring og Knap_status<br />

Det blev valgt at lave en synkron løsning, derfor tilføres 8 MHz clock’en fra CPU-modulet. Der<br />

kan med fordel konstrueres en tilstandsmaskine. Der kræves 5 tilstande (0-4). For at gemme<br />

værdien af et knaptryk anvendes fire D-flip-flops med enable (EN). Enable medtages for at<br />

knapperne kan ignoreres, når der allerede er kommet et knaptryk. Enable sættes til en af udgangene<br />

på PEEL’en, men den anvendes kun internt. Indgangene til disse flip-flops er K0-K3<br />

fra encoderen. Disse bit betegnes i ABEL under “KNAP” dvs. KNAP = [K3,K2,K1,K0]. Det<br />

betyder, at hvis K1 og K2 er aktive (høje), så er KNAP lig med 6.<br />

Tilstandsmaskinen Q laves med følgende værdier:<br />

104<br />

¯ S0: standbytilstand, hvor der afventes knaptryk.<br />

¯ S1: ventetilstand, hvor der afventes at knappen slippes. Knapperne slås fra ved at fjerne<br />

enable (EN).<br />

¯ S2: IRQ3 asserteres, og der afventes IACK3.<br />

¯ S3: IRQ3 negeres, og KS afventes.<br />

¯ S4: Der sendes data på databussen, der ventes på at KS negeres.


14.2. Design af knapmodul<br />

Der er desuden tre tilstande mere, S5-S7. Dette er fejltilstande. Kommer PEEL’en i disse tilstande<br />

vil den hoppe til S0. Et tilstandsdiagram for knapstyringen er vist på figur14.2.<br />

S5<br />

KS=0<br />

S6<br />

S4<br />

KS = 1<br />

KS = 0<br />

S3<br />

KNAP = 0<br />

S0<br />

EN = 1<br />

S2<br />

IRQ3 = 0<br />

IRQ3 =1 IACK3 = 0 IACK3 =1<br />

KS=1<br />

S7<br />

KNAP = 1-10<br />

S1<br />

EN = 0<br />

KNAP = 0<br />

Figur 14.2: Tilstandsdiagram for knapstyringen.<br />

KNAP = 1-10<br />

De nederste databen, D00-D03, bestemmes af de implementerede flip-flops output. Disse ben<br />

betegnes "D" dvs. D = [D3,D2,D1,D0]. D-flip-flop med enable laves med følgende excitationsligning<br />

[Wakerly, 2001, Table 7-1]:<br />

Indsættes de ønskede udtryk, fås i ABEL:<br />

Q£ EN ¡ D EN¡ Q<br />

D EN&KNAP # !EN&!D<br />

Der ses, at tilbagekoblingen, D, inverteres. Dette er nødvendigt, fordi signalet ikke tages på udgangsbenet,<br />

men derimod i PEEL’ens indbyggede "MACRO-CELL" og dette signal er inverteret<br />

i forhold til indgangssignalet.<br />

For at undgå buskonflikter gøres udgangene højimpedante, når modulet ikke er chipselected.<br />

Dette gøres ved ABEL-funktionen OE (Output Enable). I dette tilfælde, hvor det er afhængigt<br />

af KS, vil koden se således ud:<br />

DOE !KS;<br />

Det er nødvendigt at anvende den største PEEL, der forefindes i komponentudleveringen, fordi<br />

der anvendes 9 udgange. PEEL’en er en 22CV10 [PEEL22CV10].<br />

14.2.4 Opkobling<br />

Opkobling af knapmodulet kan findes på diagram C. Dog kan PEEL-encoderen ikke findes her.<br />

Benforbindelse for denne kan findes på den vedlagte cd-rom under "ENCODER2.DOC".<br />

105


Kapitel 14. Knapmodul<br />

14.2.5 Timing<br />

Output enable bliver forsinket i PEEL’en. I følge databladet er denne tid, tOE, 10 ns [PEEL22CV10,<br />

s. 8]. Ifølge afsnit B.1 skal den eksterne enhed sende gyldige data på bussen minimum 217,5 ns<br />

efter den har modtaget chipselect. Dette overholder PEEL’en, og der skal derfor ikke indsættes<br />

waitcycles i DTACK-generatoren i CPU-modulet.<br />

Hele ABEL-koden kan findes på den vedlagte cd-rom som "kstyr.abl". Opkoblingen af knapmodulet<br />

kan ses på diagram C.<br />

14.2.6 Simulering<br />

Begge PEEL’s er blevet simuleret vha. testvektorer. Disse testvektorer findes sammen med koden<br />

og alle blev simuleret uden fejl.<br />

14.3 Test<br />

Testen af modulet er dokumenteret i testrapportV. Det blev konkluderet, at modulet ikke virkede<br />

efter hensigten, eftersom Interruptstyring ikke var i stand til at opfatte den encodede værdi,<br />

KNAP=1. Derfor blev der lavet om i ABEL-koden, således at et tryk på 01 medfører en værdi<br />

på 11 i stedet for 1. Dette var dog ikke det eneste problem. Det viste sig også, at der var støj<br />

på både encoderens aktive og inaktive udgange. Dette resulterede i at Interruptstyring kunne nå<br />

at opfatte flere knaptryk ved blot ét knaptryk, fordi der nåede at komme IACK og KS inden<br />

knappen var sluppet. Dette resulterede i, at et tryk på f.eks. kunne betyde et spring på flere<br />

beskeder. Se testrapport V.<br />

Derfor blev det valgt at anvende en anden decoder, MM74C922, som er en 16 til 4 encoder.<br />

Opkoblingen af denne findes på diagram C. Trykknapperne kobles op i et array [MM74C922,<br />

side 8]. Encoderen indeholder pull-up-modstande, knapperne tilsluttes blot. Kondensatoren CK1<br />

er bestemmende for, hvor mange gange knapperne aflæses i sekundet. Denne er valgt til 1 µF<br />

[MM74C922, side 7]. CK2 er prelfjerner sammen med en intern modstand på 10 kΩ. Denne er<br />

valgt til 1 µF [MM74C922, side 7]. Inverteringen af Data Available-signalet ind på OE (Output<br />

Enable) betyder, at data kun kan aflæses fra knappen påvirkes til den slippes [MM74C922, side<br />

6].<br />

Med den nye encoder virkede alle knaptryk. Integrationstesten viste også, at modulet kan kommunikere<br />

med CPU-modulet. De nye ABEL-koder er vedlagt på cd-rom, som "encoder2.abl"<br />

og "kstyr3.abl".<br />

14.4 Delkonklusion<br />

Det kan konkluderes, at knapmodulet lever op til funktionskravene. Det er i stand til at registrere<br />

og håndtere knaptryk fra brugeren og formidle dem videre til CPU-modulet. Dog er der en lille<br />

undtagelse i forbindelse med grænsefladen til softwaren, da 01 har værdien 11 i stedet for 1.<br />

106


Kapitel<br />

15<br />

Displaymodul<br />

Modulet har til formål at modtage output fra display_styring, der så kan skrives på displayet,<br />

der leverer visuel information til brugeren.<br />

15.1 Funktionsoversigt<br />

Modulet består af et alfanummerisk liquid crystal display (LCD).<br />

15.1.1 Funktionskrav<br />

Displaymodulet skal overholde timingdiagrammet for en writecycle angivet i appendiksB.2.<br />

15.2 Design af displaymodul<br />

15.2.1 Display<br />

I komponentudleveringen udleveres et display af typen PC1604-A [L1604], og derfor vælges<br />

dette. Det er et LCD-modul med 4 linier, 16 tegn på hver linie og den har indbygget karaktergenerator.<br />

15.2.2 Timing<br />

Der skrives til displayet, som vist på figur15.1 [Seiko, 1998]. Det ses, at RS og R/W skal sættes<br />

op tsu1 før displayet får et chipselect. Derefter skal chipselect være aktivt i mindst tw, og inden<br />

CS bliver inaktiv, skal data være sat op i tsu2. Efter CS er gået lav, skal RS og R/W holdes i<br />

minimum th1 og data i minimum th2. RS-signalet afgør, om der skal skrives et tegn i displayet,<br />

eller der skal skrives en instruktion. Det er, som nævnt i afsnit 6.2.9, blevet valgt at anvende<br />

adresse A01 til at styre dette signal.<br />

Tider for displayets writecycle ses i tabel15.1. Heraf ses, at RS og W skal være aktive i 40 ns, inden<br />

der skal sendes et chipselect til displayet. Det ses i mikroprocessorens datablad [MC68000,<br />

side 10-10 - 10-14], at der går min. 30 ns fra adresseregisteret er klart, til AS bliver aktiv.<br />

Da der er en forsinkelse i adressedekoderen på 10 ns, bliver dette til mindst 40 ns, derfor er<br />

tsu1 overholdt, da der ifølge databladet går maksimalt 10 ns, fra AS sættes til R/W går lav. Da<br />

107


Kapitel 15. Displaymodul<br />

RS<br />

R/W<br />

CS<br />

D00-D07<br />

tsu1<br />

tw<br />

tsu2<br />

th1<br />

Figur 15.1: Writecycle til display.<br />

CPU’en holder AS lav i minimum 270 ns, er tw også overholdt. Gyldig data kommer fra CPU’en<br />

2 ¡ tcycle tCLDO tCLSH 250 62 62 250 ns før AS går høj, derfor er tsu2 overholdt. th1<br />

bliver sandsynligvis ikke overholdt. I værste fald bliver adressebussen ugyldig, og derved også<br />

RS på den opadgående flanke på S0. AS går høj 62 ns efter den nedadgående flanke på S6, og<br />

da CS først bliver lav 10 ns derefter, kan det risikeres, at CS først bliver lav ca. 10 ns efter RS er<br />

blevet ugyldigt.<br />

Displayet kræver, at RS og R/W bliver holdt i 10 ns efter chipselect er gået lav. Dette kan<br />

CPU’ens writecycle ikke overholde, derfor skal der sikres, at CS går lav 10 ns inden RS og<br />

R/W. Dette sikres ved at indbygge en tilstandsmaskine i den perifere adressedekoder. Denne<br />

tilstandsmaskine skal sørge for, at CS til displayet går højt, og forbliver højt i minimum 220 ns,<br />

hvorefter det går lavt, uafhængigt at AS. Dette klares ved at CS, vha. tilstandsmaskinen, holdes<br />

høj i 2 clockcycles. Dette betyder samtidig, at for at RS og R/W holdes længe nok, skal der<br />

indsættes en waitcycle fra DTACK-generatoren, når displayet adresseres.<br />

Tekst Symbol Tid<br />

R/W og RS setup tid tsu1 min. 40 ns<br />

Data setup tid tsu2 min. 60 ns<br />

Chipselect pulslængde tw min. 220 ns<br />

R/W og RS holde tid th1 min. 10 ns<br />

Data holde tid th2 min. 10 ns<br />

Tabel 15.1: Tider for writecycle til display [Seiko, 1998].<br />

Tilstandsmaskinen, som skal sørge for at kontrollere CS til displayet, konstrueres efter tilstandsdiagrammet<br />

på figur 15.2. Denne tilstandsmaskine laves i samme PEEL som adressedekoderen<br />

til de perifere enheder. th2 er overholdt, da der går 40 ns fra AS går høj til data bliver ugyldig.<br />

108<br />

th2


Adressebetingelser for display<br />

15.2.3 Kontrast<br />

Ikke adressebetingelser for display<br />

S3<br />

DISP=0<br />

Ikke adressebetingelser for display<br />

INIT<br />

DISP = 0<br />

S2<br />

DISP = 1<br />

Figur 15.2: Tilstandsdiagram for CS til display.<br />

S1<br />

DISP = 1<br />

15.3. Delkonklusion<br />

Adressebetingelser for display<br />

For at kunne indstille kontrasten på displayet, sættes der et potentiometer på 10 kΩ på displayets<br />

VO-ben.<br />

Opkoblingen af modulet ses på Diagram C.<br />

15.3 Delkonklusion<br />

Integrationstesten viste, at der kunne skrives ud på displayet. Det konkluderes derfor, at modulet<br />

fungerer korrekt.<br />

109


Del<br />

Software-design IV<br />

111


Kapitel<br />

16 Softwareimplementation<br />

Både diktafon- og pc-softwaren er programmeret med udgangspunkt i flowdiagrammerne og<br />

tilstandsdiagrammet fra kravspecifikationen og modulopdelingen i softwaredesignafsnittet. Det<br />

har vist sig under programmeringen, at visse sammenhængende moduler har været så små, at<br />

det har været fordelagtigt at lægge dem sammen. Dette er gældende for DAC_driver og Optag,<br />

ADC_driver og Afspil og Skriv_disp og Display_driver.<br />

16.1 Struktur af programmeringsfiler<br />

For overskuelighedens skyld i programmeringsfilerne, er følgende opbygning blevet benyttet.<br />

Header: Indeholder information om den fil der arbejdes i.<br />

Include: Her inkluderes andre filer. I praksis vil det sige headerfilen, se afsnit16.2 for beskrivelse<br />

af denne. Desuden skal andre pakker tilføjes for at kunne køre test på host; dette<br />

drejer sig bl.a om "stdio.h".<br />

Definition: Her kan definitioner indsættes. Dette er primært udnyttet i headerfilen.<br />

Forward deklarering af hjælpefunktioner: Forward-deklarering anvendes for at sikre, at hjælpefunktionerne<br />

er kendte for hovedfunktionen, da disse først bliver deklareret efter denne.<br />

Deklarering af hovedfunktion: Her skrives hovedfunktionen, som er deklareret i headerfilen.<br />

Deklarering af hjælpefunktioner: Her skrives hjælpefunktionerne.<br />

Testcases: Her skrives testcases på host for hovedfunktionen.<br />

16.2 Struktur af headerfil<br />

Ud over en header indeholder headerfilen alle de variable, konstanter og funktioner, som flere<br />

funktioner skal have adgang til. Headerfilen er nødvendig for at kunne anvende funktioner deklareret<br />

i andre filer. Den gør det desuden nemt at overskue og ændre konstanter, da disse kun<br />

står et sted. Dette gør grænsefladerne klart definerede mellem de enkelte funktioner.<br />

113


Kapitel 16. Softwareimplementation<br />

16.3 Implementering af tilstandsdiagram og flowdiagrammer<br />

Tilstandsdiagrammet på figur 3.2 er implementeret i modulet Behandl_knap. Tilstandsdiagrammet<br />

består af tilstande og betingede spring mellem disse. Springene er betinget af den nuværende<br />

tilstand og indkommende hændelser i form af knaptryk. Dette tilstandsdiagram er implementeret<br />

iCvha. en switch-konstruktion, hvor de enkelte cases er knaptryk. Handlingen, der skal udføres<br />

i hver enkelt case, er betinget af den nuværende tilstand. Selve betingelsen består typisk af en<br />

if-else-konstruktion.<br />

Rhomberne i flowdiagrammerne er implementeret vha. switch- og if-else-konstruktioner. På<br />

f.eks. figur 3.5 kan disse konstruktioner findes. Selve behandlingen af knaptryk findes i<br />

Behandl_knap’s switch-konstruktion og rhomber med spørgsmål som "Besked ikke slut?" ligger<br />

i en if-else-konstruktion i Lyd_kontrol.<br />

Firkanter i flowdiagrammerne illustrerer handlinger. I flowdiagrammet for optag på figur 3.6<br />

er der en handling med navnet "Ny besked". Denne er implementeret i Lyd_kontrol ved at<br />

tælle nogle globale variable op og flytte nogle pointere, så der skabes det rigtige miljø for en ny<br />

besked.<br />

Derudover findes der i flowdiagrammerne "fiktive" while-løkker. På figur3.6 er der et eksempel<br />

på dette. Hvis diktafonen går i pause-tilstand spørger den hele tiden efter knaptryk. Diktafonen<br />

vil hele tiden få interrupt fra kvalitetsmodulet, når A/D-konverteren er klar med næste sample,<br />

men da diktafonen ikke er i en gyldig tilstand, ignoreres dette interrupt. Ændring til en gyldig<br />

tilstand sker i praksis vha. et gyldigt knaptryk - et interrupt - som i dette tilfælde er optag og<br />

pause.<br />

16.4 Diktafon<br />

Diktafonsoftwaren er blevet programmeret i C, og der er enkelte steder blevet benyttet Inline<br />

Assembler til bl.a. at sætte statusregisteret, da der derved kan skiftes mellem user- og supervisormode<br />

og interruptniveauet. Desuden er interrupt-handleren skrevet i assembler.<br />

Til kompilering af softwaren anvendes programmet "make", hvor opsætninger som f.eks. compiler<br />

er defineret i en "Makefil". Opsætningen i denne gør, at en char er én byte, en short int<br />

er et word og en int er et longword. Her er de enkelte C-filer samt interrupt-handleren er inkluderet.<br />

Ved hjælp af filen "MAP.ld", bestemmes hvor henholdsvis program og data findes, se<br />

nedenstående kode:<br />

1<br />

2<br />

OUTPUT_ARCH(m68k:68000)<br />

3<br />

4<br />

__DYNAMIC = 0;<br />

5 MEMORY<br />

6 {<br />

7 VECBASE : ORIGIN = 0x40000, LENGTH = 0x800 /*Vektortabellen*/<br />

8 SUPERSTACK : ORIGIN = 0x40800, LENGTH = 0xF0<br />

114


9 TS2MONDATA : ORIGIN = 0x40900, LENGTH = 0x400<br />

10 ROM : ORIGIN = 0x00000, LENGTH = 0x40000<br />

11 USERRAM : ORIGIN = 0x40D00, LENGTH = 0xFF300<br />

12 USERRAM1 : ORIGIN = 0x200000, LENGTH = 0x100000<br />

13 INTERRUPT3 : ORIGIN = 0x400D8, LENGTH = 0x8<br />

14 INTERRUPT4 : ORIGIN = 0x400E0, LENGTH = 0x8<br />

15 TRAP11 : ORIGIN = 0x40158, LENGTH = 0x8<br />

16 }<br />

17<br />

18 SECTIONS<br />

19 {<br />

20 .text : { * (.text) } > USERRAM<br />

21 .data : { * (.data) } > USERRAM1<br />

22 .bss : { * (.bss) } > USERRAM<br />

23 .irq3 : { * (.irq3) } > INTERRUPT3<br />

24 .irq4 : { * (.irq4) } > INTERRUPT4<br />

25 .trap11 : { * (.trap11) } > TRAP11<br />

26 }<br />

16.4. Diktafon<br />

Det ses f.eks, at USERRAM1, hvor lyddata gemmes, starter på addresse 200000h og er 100000h<br />

lang, hvilket svarer til RAM3 og RAM4 i memorymappet, se figur 8.2. Desuden er den del af<br />

vektortabellen der udnyttes, altså interrupt 3, 4 samt trap 11 defineret. Trap 11 gør det muligt<br />

at ændre interruptniveauet til 5 uden at gå i supervisormode. Dette er nødvendigt for at kunne<br />

udføre privigerede instruktioner, såsom at skrive til statusregisteret. Trap 11 benyttes kun i forbindelse<br />

med kommunikation mellem diktafon og pc.<br />

Ved kompilering laves en S-record, der kan lægges ned på diktafonen. Ved hjælp af et linkermap<br />

ses hvilke adresser de forskellige programdele og globale variable ligger på. Linker-mappet<br />

vil blive vedlagt på cd-rom som "LN.map".<br />

I det følgende vil nogle funktioner, der ikke tidligere er blevet beskrevet, blive gennemgået.<br />

16.4.1 Initialisering<br />

For at diktafonen kan starte rigtigt op, skal diktafonen initialiseres korrekt. Initialiseringen indeholder:<br />

ACIA2: Skal først resettes, hvorefter den skal sætttes op, således at kommunikationen kan<br />

foregå. Denne sættes op til at køre med 115,2 kbps, ingen paritetsbit, og et stopbit.<br />

Display: For at displayet kan opstartes rigtigt, skal det startes som beskrevet i databladet<br />

[Seiko, 1998].<br />

Kvalitet: Sættes til mellemste kvalitet, som angivet i afsnit 3.2.2.<br />

Sætte diktafonen i usermode: Dette gøres for at sikre at programmet ikke har rettigheder til<br />

at ændre statusregistret.<br />

115


Kapitel 16. Softwareimplementation<br />

16.4.2 Interrupthandler<br />

Interrupthandleren er som tidligere nævnt skrevet i assembler. Denne laver forbindelsen mellem<br />

vektortabellen og den funktion, som ønskes kaldt ved et interrupt. Samtidig sørger den for, at de<br />

nødvendige registre bliver lagt på stakken, og fjernet igen når der returneres fra en exception.<br />

Retuneringen fra en exception foretages med kommandoen "rte" (Return from exception).<br />

16.4.3 Display<br />

Displayet består af 4 linier med 16 tegn på hver linie. Det er valgt, at displayets linier deles op,<br />

som det ses på figur:<br />

- - F e j l / S t a t u s - - -<br />

B e s k e d n r : 0 1 / 0 2<br />

T i d : 0 0 : 0 0 / 0 0 : 0 0<br />

R e s t t i d : 0 0 : 0 0<br />

Når diktafonen ikke er i gang med interrupt-rutiner, skrives der til displayet. Der undersøges<br />

hver gang, om Display_status er nul. Hvis den har andre værdier, skal der skrives en fejl ud<br />

på displayet. Der laves i så fald et delay, og der skrives derefter den aktuelle tilstand. Derudover<br />

skrives aktuelt beskednr, antal beskeder, aktuel tid i min, aktuel tid i sek, beskedens længde i<br />

min. og sek., og den resterende tid i hukommelsen i min. og sek. Mens der skrives på displayet<br />

polles der løbende på ACIA2 for at undersøge, om pc’en ønsker forbindelse.<br />

16.4.4 Test af diktafonsoftware<br />

Diktafonsoftwaren er først testet på host. Dette er gjort ved indføre testcases, hvor den enkelte<br />

funktion kommer ud i alle dele af programmet, for på den måde at fjerne de fleste fejl, før<br />

programmet køres på diktafonen. Derefter er de enkelte softwaremoduler testet hver for sig på<br />

diktafonen. Dette er gjort ved at opsætte diktafonen, således at programmets dele bliver testet<br />

efter de i C-filerne opstillede testcases.<br />

Testen viste, at det kun var muligt at optage og afspille beskeder i den laveste kvalitetsindstilling.<br />

Testen viste også, at der ved de to højere kvalitetsindstillinger ikke blev opdateret i displayet, og<br />

lyden var overlejret med støj. Da afspilning og optagelse er interruptstyret, og der kun skrives i<br />

displayet mellem interrupts, vurderes det, at der på grund af interruptrutinen ikke er tid nok til<br />

at færdiggøre denne, inden det næste interrupt modtages. Det konkluderes derfor, at det er fordi<br />

Lyd_kontrol og de tilhørende moduler ved afspilning eller optagelse skal udføre sammenligninger<br />

med antallet af beskeder, aktuel adresse samt tælle tid op og resttid ned ved hver sample.<br />

Problemet vil kunne afhjælpes med kodeoptimering, hvor der vælges at udføre færre funktioner<br />

mellem hvert interrupt, eller mere tid til eksekvering af kode.<br />

116


16.5 Pc-sofware<br />

16.5. Pc-sofware<br />

Pc-softwaren er skrevet i programmeringssproget C. Der er også her benyttet programmet "make"<br />

til kombilering. Da programmet er skrevet til en pc med styresystemet Linux, er det muligt at<br />

anvende standardbiliotekerne i C til f.eks. udskrivning på skærmen. Dette giver mulighed for at<br />

anvende standard device-driver til f.eks. COM-porten.<br />

Opsætningen af COM-porten er specifik for hver enkelt styresystem. Opsætningen af COMporten<br />

foretages ikke på samme måde som på diktafonen, da der bla. anvendes standardbiblioteker.<br />

Den måde kommunikation foregår på vil forklaret nærmere i det følgende afsnit.<br />

16.5.1 Forbindelse gennem COM-port<br />

For at kunne anvende COM-porten er det nødvendigt, at denne er sat rigtigt op. Funktionen,<br />

Opsaet_forbindelse, til opsætningen af COM-porten er lavet med udgangspunkt i et eksempel<br />

fra en forelæsning [Madsen, 2003]. Parameterne skal sættes op som ACIA2, fordi disse skal<br />

kommunikere sammen.<br />

Ud over opsætningen specificeres skrive og læse rutinerne til kommunikationsporten, så de kan<br />

kaldes over alt i programmet. Dette giver de andre funktioner i programmet et "easy to use"<br />

-interface til anvendelsen af COM-porten, når denne er sat op. Skrivefunktionen, put_char,<br />

sender det byte, som den bliver kaldt med. Læsefunktionen, get_char, venter på, at der kommer<br />

en byte fra diktafonen. Hvis diktafonen ikke svarer inden den specificerede timeout-tid,<br />

returneres en fejl.<br />

Når kommunikationen er fuldført, giver modulet mulighed for at lukke COM-porten igen og<br />

genetablere de tidligere opsætninger af COM-porten. Dette sker, når den har sent signalet til<br />

diktafonen, om at kommunikation afbrydes, se appendiksG.<br />

16.5.2 Test af pc-software<br />

Pc-softwaren er testet ved at lave et testprogram, der kører på en anden pc end den pc-programmet<br />

kører på, som simulerer diktafonen i kommunikationsprotokolen. Denne test er beskrevet i<br />

testrapport VII, hvor det ses, at pc-softwaren overholder kommunikationsprotokollen og kan<br />

gemme wave-filer det specificerede sted. Da pc-softwaren blev testet sammen med diktafonen<br />

måtte det konkluderes, at der ikke kunne opnåes en tilfredstillende kommunikation imellem<br />

disse. For at overførslen kunne finde sted skulle interruptniveau sættes op vha. TS2MON. Der<br />

blev indtalt en besked, som fyldte hele den tilgængelige RAM på diktafonen, altså 100000h byte<br />

= 1048576 byte. Ved overførsel fra diktafon til pc viste pc-programmet en længde på 1048575<br />

byte, og denne besked blev overført. Efterfølgende kunne beskeden aflyttes på pc’en. Lyden<br />

var forståelig, men ikke nær så god, som den der kunne afspilles på selv diktafonen. Filen er<br />

vedlagt på cd-rom med navnet "besked1.wav". Egenskaberne for filen viser desuden, at der var<br />

overensstemmelse med det indstillede fra diktafonen, f.eks. var samplingsfrekvensen 4 kHz.<br />

117


Kapitel 16. Softwareimplementation<br />

16.6 Delkonklusion<br />

Diktafonsoftwaren konkluderes at fungere, da der kan optages og afspilles i den laveste kvalitet.<br />

At det ikke fungerer i de højere kvaliteter konkluderes, at skyldes for mange funktioner<br />

i Lyd_kontrol og de moduler som den kalder. Det vil derfor være nødvendigt at begrænse<br />

diktafonens funktionalitet eller skaffe mere tid til eksekvering af kode, ved anskaffelse af en<br />

hurtigere processor. Pc-softwaren konkluderes at virke som modul. Testen har vist at softwaren<br />

kan overholde prokollen og flowdiagrammer i kravspecifikationen. Samspillet med diktafonen<br />

og pc’en konkluderes ikke at virke fuldstændigt, fordi den ikke foregår automatisk.<br />

118


Kapitel<br />

17<br />

Acceptest<br />

I dette kapitel bliver der konstateret, hvilke af accepttestspecifikationens testemner, der opfyldt<br />

i projektet, se afsnit 4. I den følgende tabel referes der til nummeret på det enkelte testemne,<br />

om testemnet er opfyldt og en eventuel henvisning til hvor dette aktuelle testemne er opfyldt.<br />

Størstedelen af testemnerne er opfyldt gennem observationer ved test på den færdige diktafon.<br />

Disse observationer er ikke dokumenteret her, da dette er trivielt.<br />

Nummer Opfyldt Bemærkninger<br />

1<br />

Ô<br />

Testrapport III<br />

2<br />

Ô<br />

Testrapport II<br />

3<br />

Ô<br />

4<br />

Ô<br />

5<br />

Ô<br />

6<br />

Ô<br />

7<br />

Ô<br />

8<br />

Ô<br />

9<br />

Ô<br />

10<br />

Ô<br />

11<br />

Ô<br />

12<br />

Ô<br />

13<br />

Ô<br />

14<br />

Ô<br />

Kan ikke indstilles hver gang<br />

15<br />

Ô<br />

Dog ikke automatisk<br />

16 ¤ Programmet melder fejl ved sletning<br />

17<br />

Ô<br />

Dog kun ved kvalitet 1<br />

18<br />

Ô<br />

Dog kun ved kvalitet 1<br />

119


Kapitel 17. Acceptest<br />

Nummer Opfyldt Bemærkninger<br />

19<br />

Ô<br />

Dog kun ved kvalitet 1<br />

20<br />

Ô<br />

Nogle gange reagerer knapperne ikke<br />

21<br />

Ô<br />

Dog kun ved kvalitet 1<br />

22<br />

Ô<br />

23<br />

Ô<br />

24<br />

Ô<br />

cd-rom<br />

25<br />

Ô<br />

Diagram A, B og C samt kapitel VII<br />

26<br />

Ô<br />

27<br />

Ô<br />

28<br />

Ô<br />

29<br />

Ô<br />

30<br />

Ô<br />

31<br />

Ô<br />

cd-rom<br />

Accepttesten opfyldes på nær et punkt. Det vil være nødvendigt at foretage forbedringer, såfremt<br />

accepttesten skal opfyldes i forhold til accepttestspecifikationen. Kommunikationen mellem diktafonen<br />

og pc’en skal forbedres og diktafon-softwaren skal kunne fungere ved alle kvaliteter.<br />

120


Kapitel<br />

18<br />

Konklusion<br />

Der konkluderes i det følgende på: Anvendelsen af SPU og opfyldelse af kravspecifikationen.<br />

Konkludering på anvendelse af SPU baseres på gruppens vurdering af i hvor stor grad denne<br />

metode har hjulpet arbejdsgangen og den udfærdigede dokumentation. Opfyldelse af kravsspecifikationen<br />

baseres på accepttesten. Om de enkelte punkter i accepttesten er opfyldt kommer af<br />

delkonklusionerne i de foregående kapitler. Derudover konkluderes der i den forbindelse også<br />

på de enkelte moduler.<br />

Anvendelsen af Struktureret Program Udvikling i forbindelse med systemudviklingen har gjort<br />

det let at dele systemet op i mindre moduler. For disse moduler har der været en klar defineret<br />

funktionalitet og grænseflade til de andre moduler. Desuden er der opnået klar oversigt over de<br />

enkelte funktioners virkemåde, og dette har muliggjort parallelle udviklingsforløb både indenfor<br />

software og hardware. Strukturet Program Udvikling har været meget ressourcekrævende<br />

i projektperiodens begyndelse, men har resulteret i mere effektiv ressourcefordeling senere i<br />

selve designforløbet. Som eksempel kan nævnes, at det tog væsentlig kortere tid end forventet<br />

at programmere softwaren. En af bagsiderne ved SPU-metoden modulopdeling har været et øget<br />

komponent forbrug netop den klare opdeling mellem modulerne.<br />

Opfyldelsen af accepttesten er afhængig af fungerende hardware og software. CPU-, hukommelses-<br />

og RS232-modulet danner kernen i diktafonsystemet. CPU-modulet stiller krav til den<br />

øvrige hardware mht. kommunikation, timing og signalniveau. Kommunikation er sikret gennem<br />

generering af de krævede DTACK-signaler ved asynkron kommunikation og VPA-signaler<br />

ved synkron kommunikation og autovektoriseret interrupt. Flowkontrol til de perifere enheder<br />

sker gennem interruptrutiner. Den indbyrdes kommunikation mellem enhederne kan konstateres<br />

at fungere jvf. integrationstesten.<br />

CPU-modulets primære opgave er at hente lyddata fra en A/D-konverter, og gemme dette i<br />

hukommelsen. Frekvensområdet for lyddata er valgt til 300 - 1700/3400/6800 Hz. Den nedre<br />

grænsefrekvens er realiseret vha. et 4. ordens Butterworth højpasfilter. Filtret blev designet på<br />

baggrund at der ønskedes en dæmpning ved 50 Hz ned til under LSB dvs. 60 dB. Filtret giver<br />

en dæmpning på 61 dB ved 50 Hz, og opfylder dermed kravet. Derudover er der indsat et filter<br />

for at undgå aliasing, og dette dæmper 22 dB ved den halve samplingsfrekvens og opfylder<br />

dermed kravet på 19 dB. Ved optagelse konverteres det filtrerede signal til en digital værdi og<br />

lagres i RAM med en samplingsfrekvens på hhv. 4, 8 eller 16 kHz alt efter den valgte kvalitetsindstilling.<br />

Det lagrede lyddata kan enten afspilles på diktafonen eller overføres til en pc<br />

via RS232-modulet. Afspilning sker ved en D/A-konvertering og efterfølgende rekonstruktion<br />

af signalet. A/D- og D/A-konverteringen blev testes ved at sende et sinus-signal ind på A/Dkonverteren<br />

og vha. et program blev de 8 bit sendt direkte over på D/A-konverteren. Støjen på<br />

121


Kapitel 18. Konklusion<br />

udgangen viste sig dæmpet i forhold til indgangen. Afspilning og optagelse kan foretages ved<br />

alle kvaliteter, men lydkvaliteten falder i takt med at samplingsfrekvensen øges.<br />

Kvalitetsindstillingen styres af et kvalitetsmodul, og kvaliteten kan indstilles af brugeren fra en<br />

pc. Dette gøres vha. en styret switch, som har 3 forskellige samplings- og filterfrekvenser på<br />

indgangen. Udgangsclocken kan ændres ved, at CPU’en adresserer kvalitetsmodulet, og vha.<br />

databussens D00-D01, R/Wog chipselect latcher en værdi ind i switchen, som derved skifter<br />

udgangsclock til det ønskede.<br />

Interface til brugeren foregår vha. trykknapper og et display. Information i displayet består af:<br />

tilstand, fejl, aktuel besked, beskeder ialt, aktuel tid i beskeden, længden af aktuel besked samt<br />

resterende tid i hukommelsen; de sidste tre angives i minutter og sekunder. Man kan f.eks.<br />

under optagelse konstatere, at den aktuelle tid bliver talt op hvert sekund samtidigt med, at den<br />

resterende tid bliver talt ned. Dette fungerer dog kun i laveste kvalitet.<br />

Softwarens enkelte moduler tager udgangspunkt i kravspecifikationens flowdiagrammer. Softwaren<br />

er modulvis testet på både host og diktafon. Udfra disse test er det rimeligt at konkludere,<br />

at softwaren fungerer efter hensigten. Det er dog alligevel heri, at problemet højst sandsynligt<br />

består. Problemet formodes at ligge i modulet, Lyd_kontrol, der antages at optage for meget af<br />

CPU’ens tid i forbindelse med optagelse og afspilning af en sample. Denne formodning bygger<br />

på, at displayet ikke opdateres, samt at der ikke reageres på knaptryk, ved mellemste og højeste<br />

lydkvalitet.<br />

Pc-softwaren blev testet sammen med en anden pc, og dette viste, at pc-programmet overholdte<br />

de opstillede krav. Det var dog nødvendigt manuelt at opsætte interruptniveauet. Dette accepteres<br />

ikke, da brugeren forventes ikke at være teknisk kyndig. Lydkvaliteten af det overførte<br />

gjorde det muligt at forstå, hvad der blev sagt, men kvaliteten var ikke på samme niveau som<br />

ved afspilning på diktafonen.<br />

Såfremt det accepteres, at diktafonen kun fungerer optimimalt ved den laveste kvalitet må acceptesten<br />

siges at være opfyldt. Hvis diktafonen skal leve helt op til de, i kravspecifikationen,<br />

opstillede krav vil være nødvendigt at optimere diktafon-softwaren. Eventuelt kunne en løsning<br />

være at anvende en hurtigere CPU.<br />

122


Litteraturliste<br />

[74HC138] Texas Instruments.<br />

SN54HC138, SN74HC138 3-line to 8-line decoders/demultiplexers.<br />

URL: http://lorca.umh.es/isa/es/temas/micros/doc/datasheets/74hc138.pdf<br />

Downloadet d. 27/5-2003, vedlagt på cd-rom.<br />

[74HC148] Texas Instruments. SN54HC148, SN74HC148 8-line to 3-line priority encoders.<br />

URL: http://www.it.lth.se/datablad/Logik/74HC/74HC148.pdf<br />

Downloadet d. 27/5-2003, vedlagt på cd-rom.<br />

[AD7524] Analog Devices. 8-bit Buffered Multiplying DAC.<br />

URL: http://www.analog.com/UploadedFiles/Datasheets/888358036ad7524.pdf<br />

Downloadet d. 28/4-2003, vedlagt på cd-rom.<br />

[ADC0820] National Semiconductor. ADC0820 8-Bit High-Speed µP Compatible A/D Converter<br />

with Track/Hold Function, 1999.<br />

URL: http://www.national.com/ds/AD/ADC0820.pdf<br />

Downloadet d. 18/2-2003, vedlagt på cd-rom.<br />

[AM29F010B] AMD. Am29F010B, CMOS 5.0 Volt-only, Uniform Sector Flash Memory,<br />

2002.<br />

URL: http://www.amd.com/us-en/assets/content_type/<br />

white_papers_and_tech_docs/22336c1.pdf<br />

Downloadet d. 10/3-2003, vedlagt på cd-rom.<br />

[Biering-Sørensen m. fl., 1996] Stephen Biering-Sørensen, Finn Overgaard Hansen, Susanne<br />

Klim og Preben Thalund Madsen. Håndbog i Struktureret Programudvikling. Teknisk<br />

Forlag A/S, 1996, 1. udgave, 7. oplag.<br />

ISBN: 87-571-1046-8.<br />

[Born, 1995] Günter Born. The file formats handbook. International Thomson Computer Press,<br />

London, 1995.<br />

[Clements, 1997] Alan Clements. Microprocessor Systems Design. PWS Publishing Company,<br />

1997, 3. udgave.<br />

ISBN: 0-534-94822-7.<br />

123


Litteraturliste<br />

[COMP630] COMP630 WAV File Format Description, 2000.<br />

URL: http://www.technology.niagarac.on.ca/courses/<br />

comp630/WavFileFormat.html<br />

Downloadet d. 7/5-2003, vedlagt på cd-rom.<br />

[Crocker, 1998] Malcolm Crocker. Handbook of acoustics. John Wiley and Sons, Inc., 1998,<br />

1. udgave.<br />

ISBN: 0-471-25293-X.<br />

[Harmark, 2003] Kristian Harmark. System arkitektur og integration (hw), mm 2. Forelæsning,<br />

Januar 2003.<br />

[Hüche, 1998] Erik Hüche. Digital signalbehandling. Teknisk forlag, 1998, 1. udgave, 6.<br />

oplag.<br />

ISBN: 87-571-0874-9.<br />

[KM684000B] Samsung Electronics. KM684000B Family, 512Kx8 bit Low Power CMOS<br />

Static RAM, 1997.<br />

URL: http://srv.icom4u.co.kr/datasheet/memory/sram/samsung/KM684000B.pdf<br />

Downloadet d. 10/3-2003, vedlagt på cd-rom.<br />

[Krystal] TQ ELEKTRONIK KOMPONENTEN GMBH. Quartz crystals, oscillators and filters,<br />

1993.<br />

[L1604] Powertip. PC 1604-A.<br />

URL: http://www.actron.de/PTC/pc1604a.pdf.<br />

Downloadet d. 15/4-2003, vedlagt på cd-rom.<br />

[Langford-Smith, 1997] F. Langford-Smith. Radio Designer’s Handbook. Reed Educational<br />

and Professional Publishing Ltd., 1997, 4. udgave.<br />

ISBN: 0-7506-3635-1.<br />

[LM380, 2000] National Semiconductor. LM380 2.5W Audio Power Amplifier, 2000.<br />

URL: http://cache.national.com/ds/LM/LM380.pdf.<br />

Downloadet d. 18/2-2003, vedlagt på cd-rom.<br />

[LM380-A, 1995] National Semiconductor. LM380 2.5W Audio Power Amplifier, 1995.<br />

URL: http://www.national.com/an/AN/AN-69.pdf.<br />

Downloadet d. 10/3-2003, vedlagt på cd-rom.<br />

[LM7805] Fairchild Semiconductor. MC78XX/LM78XX/MC78XXA 3-Terminal 1A Positive<br />

Voltage Regulator.<br />

URL: http://www.fairchildsemi.com/ds/LM/LM7805.pdf.<br />

Downloadet d. 27/5-2003, vedlagt på cd-rom.<br />

[LM7905] National Semiconductor. LM79XX Series 3-Terminal Negative Regulators.<br />

URL: http://cache.national.com/ds/LM/LM7905.pdf.<br />

Downloadet d. 27/5-2003, vedlagt på cd-rom.<br />

124


Litteraturliste<br />

[Madsen, 2003] Per Printz Madsen. System arkitektur og integration (hw), mm 19. Forelæsning,<br />

April 2003.<br />

[MAX232] Maxim Integrated Products. Multichannel RS-232 Drivers/Receivers, 2003.<br />

URL: http://pdfserv.maxim-ic.com/arpdf/MAX220-MAX249.pdf.<br />

Downloadet d. 22/5-2003, vedlagt på cd-rom.<br />

[MAX297] Maxim Integrated Products. 8th-Order, Lowpass, Epilliptic, Switched-Capacitor<br />

Filters, 1992.<br />

URL: http://pdfserv.maxim-ic.com/arpdf/MAX293-MAX297.pdf.<br />

Downloadet d. 18/2-2003, vedlagt på cd-rom.<br />

[MC68000] Motorola Inc. M68000 8-/16-/32-Bits Microprocessors User’s Manual, 1993.<br />

URL: http://e-www.motorola.com/brdata/PDFDB/docs/MC68000UM.pdf.<br />

Downloadet d. 7/3-2003, vedlagt på cd-rom.<br />

[MM74C922] Fairchild. MM74C922, MM74C923, 16-Key Encoder, 20-Key Encoder.<br />

URL: http://www.fairchildsemi.com/ds/MM/MM74C922.pdf.<br />

Downloadet d. 27/5-2003, vedlagt på cd-rom.<br />

[Oppenheim/Schafer, 1999] Alan V. Oppenheim og Ronald W. Schafer. Discrete-Time Signal<br />

Processing. Prentice Hall, 1999, 2. udgave.<br />

ISBN: 0-13-754920-2.<br />

[PEEL18CV8] ICT. PEEL TM 18CV8 -5/7/-10/-15/-25 CMOS Programmable Electrically Erasable<br />

Logic Device.<br />

URL: http://www.ictpld.com/ftp/18cv8.pdf.<br />

Downloadet d. 23/5-2003, vedlagt på cd-rom.<br />

[PEEL22CV10] ICT. PEEL TM 22CV10A-7/-10/-15/-25 CMOS Programmable Electrically<br />

Erasable Logic Device.<br />

URL: http://www.ictpld.com/ftp/22cv10a.pdf.<br />

Downloadet d. 17/3-2003, vedlagt på cd-rom.<br />

[Philips Semiconductors, 1990] Philips Semiconductors. 74hc/hct4040, 12-stage binary ripple<br />

counter.<br />

URL: http://www.philipslogic.com/products/hc/pdf/74hc4040.pdf.<br />

Downloadet d. 24/4-2003, vedlagt på cd-rom.<br />

[Sedra/Smith, 1998] Adel S. Sedra og Kenneth C. Smith. Microelectronics Circuits. Oxford<br />

University Press, 1998, 4. udgave.<br />

ISBN: 0-19-511690-9.<br />

[Seiko, 1998] Seiko Instruments GmBH. Liquid Crystal Displays, 1998.<br />

URL: http://www.glyn.de/New_home/Produkte/Opto/Alphanum/<br />

Datasheets/Seiko_Instruments/SI_Manual%20Italien.PDF.<br />

Downloadet d. 15/4-2003, vedlagt på cd-rom.<br />

125


Litteraturliste<br />

[Soelberg, 1977] Jan Soelberg. Anvendt elektronik. Josty Kit, 1977, 8. udgave.<br />

ISBN: 87-980079-0-4.<br />

[Ståbi, 1995] Hans Ebert m.fl. Elektronik Ståbi. Teknisk forlag A/S, 1995.<br />

[Strong/Plitnik, 1992] William J. Strong og George R. Plitnik. Music Speech Audio. Soundprint,<br />

1992, 1. udgave.<br />

ISBN: 0-9611938-2-4.<br />

[Sweet, 2003] Michael R. Sweet. Serial Programming Guide for POSIX Operating Systems.<br />

URL: http://www.easysw.com/~mike/serial/serial.pdf.<br />

Downloadet d. 26/5-2003, vedlagt på cd-rom.<br />

[Texas Instruments, 2002] Texas Instruments. Analysis of the Sallen-Key Architecture.<br />

URL: http://www-s.ti.com/sc/psheets/sloa024b/sloa024b.pdf.<br />

Downloadet d. 21/4-2003, vedlagt på cd-rom.<br />

[TL7705A] Texas Instruments. TL7702A, TL7705A, TL7709A, TL7712A, TL7715A Supply<br />

Voltage Supervisors, 2001.<br />

URL: http://www-s.ti.com/sc/ds/tl7705a.pdf.<br />

Downloadet d. 7/3-2003, vedlagt på cd-rom.<br />

[TLC2201] Texas Instruments. TLC220x, TLC220xA, TLC220xB, TLC220xY Advanced LinC-<br />

MOS Low-noise Precision Operational Amplifiers, 1997.<br />

URL: http://focus.ti.com/lit/ds/symlink/tlc2201.pdf.<br />

Downloadet d. 5/5-2003, vedlagt på cd-rom.<br />

[TLE2072] Texas Instruments. TLE207x, TLE207xA, TLE207xY EXCALIBUR LOW-NOISE<br />

HIGH-SPEED JFET-INPUT OPERATIONAL AMPLIFIERS, 2000.<br />

URL: http://focus.ti.com/docs/prod/productfolder.jhtml?<br />

genericPartNumber=TLE%2072<br />

Downloadet d. 28/3-2003, vedlagt på cd-rom.<br />

[TS2MON, 2002] Sofus Birkedal Nielsen. M68000 Debugger/Monitor: TS2MON USER GU-<br />

IDE. March 2002. Version 1.2.<br />

[VN-3600, 2003] Olympus Danmark A/S. Tekniske specifikationer Olympus Digital Voice<br />

Recorder VN-3600.<br />

URL: http://www.olympus.dk/voice/vn3600_teknik.htm.<br />

Downloadet d. 18/2-2003.<br />

[Wakerly, 2001] John F. Wakerly. Digital Design. Prentice Hall, 2001, 3. udgave.<br />

ISBN: 0-13-089896-1.<br />

[Witten, 1982] Ian H. Witten. Principles of computer speech. Academic Press, Inc., 1982.<br />

ISBN: 0-12-760760-9.<br />

126


[WM-034B] Panasonic. Omnidirectional Electret Condenser Microphone Cartridge.<br />

URL: www.cse.psu.edu/~cg473/92A011.pdf.<br />

Downloadet d. 28/3-2003, vedlagt på cd-rom.<br />

Litteraturliste<br />

127


Del<br />

Appendiks V<br />

129


A<br />

Sampling- og rekonstruktionsteori<br />

Appendiks<br />

A.1 Sampling<br />

I det følgende vil grundlaget for samplingssætningen blive gennemgået. Kilden til det efterfølgende<br />

er [Oppenheim/Schafer, 1999, side 140-144].<br />

Samplingssætningen siger, at man skal sample med en frekvens, der er mindst dobbelt så høj<br />

som den højeste frekvens i det der samples. Hvis ωs er samplingsfrekvensen og ωN er den<br />

højeste frekvens i det samplede, så kan samplingssætningen udtrykkes ved ligningA.1.<br />

ωs 2ωN<br />

Denne sætning vil i det følgende blive begrundet.<br />

A.2 Sampling i frekvensdomænet<br />

I denne gennemgang betragtes et system som på figurA.1.<br />

s(t)<br />

xc(t) xs(t)<br />

Konversion fra impulstog<br />

til diskret tidssekvens.<br />

x[n]=xc(nT)<br />

(A.1)<br />

Figur A.1: Sampling af et kontinuert tidssignal til et diskret tidssignal dvs. en analog til digital<br />

konvertering.<br />

xc(t) er det kontinuerte analoge tidssignal, som ønskes konverteret til et diskret digitalt tidssignal,<br />

x[n]. Vha. modulation med et samplingssignal, s(t), der typisk er fra en A/D-konverteren,<br />

som er givet ved det periodiske impulstog i ligningA.2, hvor n 0123, kan det samplede<br />

signal ,xs(t), fås.<br />

s t ∞<br />

∑ δ t nT (A.2)<br />

n ∞<br />

131


Appendiks A. Sampling- og rekonstruktionsteori<br />

xs(t) fås ved multiplikation af det analoge signal med samplingssignalet. Resultatet er vist i<br />

er samplingsfrekvensen.<br />

ligning A.3. T er her samplingsperioden og fs 1<br />

T<br />

xs t xc t ¡ s t<br />

xc t<br />

∞<br />

∑ δ t nT<br />

n ∞<br />

Dette kan vha. af δ-funktionens "sigte-egenskab" skrives som i ligningA.3.<br />

xs t ∞<br />

∑ xc nT δ t nT (A.3)<br />

n ∞<br />

Ved Fourier-transformation af xs(t) fås et resultat, hvorud fra samplingssætningen ses. En multiplikation<br />

i tidsdomænet svarer til en foldning i frekvensdomænet. Xs(jω) er givet ved ligning<br />

A.4.<br />

Xs jω 1<br />

T Xc jω £ S jω (A.4)<br />

Vinkelfrekvensen ω er givet ved ω 2π<br />

T og Fourier-transformationen, S(jω), af samplingssignalet<br />

er givet ved ligning A.5, hvor k 0123.<br />

S jω 2π<br />

T<br />

∞<br />

∑<br />

δ ω kω (A.5)<br />

n ∞<br />

Foldningen af de to signaler kan herved udtrykkes ved summationen i ligningA.6.<br />

Xc j ω kωs<br />

(A.6)<br />

T k ∞<br />

Ud fra ligning A.6 ses det, at det samplede signal, Xs(jω), er det oprindelige analoge signal<br />

Xs jω 1<br />

∞<br />

∑<br />

med amplituden 1<br />

T og med frekvensspring på ωs mellem hver gentagelse. Hvis det oprindelige<br />

analoge signal har en øvre frekvens på ωN, kan dette illustreres som på figur A.2(a). Samplingssignalet,<br />

S(jω), illustreres som på figurA.2(b). På figur A.2(c) og A.2(d) ses det samplede<br />

signal, Xs(jω). Her er det tydeligt, at samplingsfrekvensen skal være mindst dobbelt så høj som<br />

den højeste frekvens i det samplede signal, ligesom ligningA.1 siger det. Opfyldes samplingssætningen<br />

ikke, opstår der antialiasing som på figurA.2(d).<br />

132


-ωN<br />

Xc(jω)<br />

0 ωN ω<br />

(a) Det kontinuerte tidssignal,<br />

xc(t), repræsenteret i jω-domænet<br />

som Xc(jω).<br />

S(jω)<br />

0<br />

-2ωs -ωs ωs 2ωs<br />

A.2. Sampling i frekvensdomænet<br />

(b) Impulstogsignal fra f.eks. A/D-konverteren, s(t), repræsenteret i jω-domænet som<br />

S(jω).<br />

-2ωs -ωs -ωN<br />

1<br />

T<br />

0<br />

Xs(jω)<br />

ωN<br />

ωs-ωN<br />

(c) Sampling af Xc(jω) med S(jω) for ωs 2ωN.<br />

1<br />

T<br />

Xs(jω)<br />

ωs 2ωs ω<br />

0 ωs<br />

ω<br />

ωs-ωN<br />

(d) Sampling af Xc(jω) med S(jω) for ωs 2ωN.<br />

Figur A.2: Sampling af et kontinuert tidssignal, Xc(jω), til et tidsdiskret signal, Xs(jω).<br />

ω<br />

133


Appendiks A. Sampling- og rekonstruktionsteori<br />

A.3 Rekonstruktion<br />

Følgende er baseret på [Hüche, 1998, side 216-218]. En D/A-konverter består af et nul’te ordens<br />

holdekredsløb, der holder værdien af sidste sample indtil det modtages en ny sample. Dette<br />

resulterer i, at D/A-konverterens udgangssignal bliver trappeformet. Dette trappeformede signal<br />

ønskes udglattet, og dette gøres med et rekonstruktionsfilter.<br />

Et nul’te ordens holdekredsløb har en amplitudekarakteristik, der er udtrykt ved ligningA.7,<br />

hvor fs er samlingsfrekvensen. På figur A.3 ses amplitudekarateristikken for holdekredsløbet<br />

ved positive frekvenser. Det ses af karakteristikken, at der er frekvenskomposanter af signalet,<br />

der er optræder ved højere frekvenser end samlingsfrekvensen. De frekvenskomposanter der<br />

ligger over samplingsfrekvensen, findes ikke i det samplede signal, og ønskes derfor dæmpet.<br />

Desuden indeholder signalet ikke komposanter over den halve samplingsfrekvens, f0, fordi der<br />

samplet, så antialiasing undgås. Derfor bør disse bortfiltreres, da de ellers vil optræde som støj.<br />

134<br />

|X( π f/f s )|<br />

1<br />

0.9<br />

0.8<br />

0.7<br />

0.6<br />

0.5<br />

0.4<br />

0.3<br />

0.2<br />

0.1<br />

¬ sin<br />

X f ¬<br />

<br />

π f<br />

fs<br />

π f<br />

fs<br />

¬ ∞<br />

¬ ∑<br />

¬ m ∞<br />

X f m ¡ fs<br />

0<br />

0 f<br />

0<br />

f<br />

s 3f<br />

0 2f<br />

s<br />

5f<br />

0<br />

3f<br />

s<br />

Figur A.3: Amplitudekarakteristik for nul’te ordens holdekredsløb ved positive frekvenser.<br />

(A.7)


Appendiks<br />

B<br />

Timing af CPU<br />

En stor del af mikroprocessorens operation består af læsning fra og skrivning til perifere enheder<br />

eller hukommelse. Disse operationer skal foregå som read- eller writecycles, og kører efter en<br />

bestemt protokol. Da denne timing af CPU’ens read- og writecycles er vigtig for interface mellem<br />

CPU’en og de perifere enheder, gennemgås processorens read- og writecycles [MC68000,<br />

side 10-10 - 10-14].<br />

Fælles for read- og writecycles er, at de normalt tager 4 clockcycles at udføre. Read- og writecycles<br />

længde bestemmes af, om CPU’en modtager et DTACK-signal tiden, tASI, før S4’s<br />

opadgående flanke, se figur B.1. Hvis ikke der modtages et DTACK inden denne tid, indsættes<br />

der waitcycles, indtil CPU’en modtager et DTACK tASI før den opadgående flanke på systemclock’en.<br />

Under disse waitstates har alle CPU’ens udgangsben de samme værdier som ved slutningen<br />

af S4, og CPU’en foretager sig ikke andet end at afvente DTACK.<br />

B.1 Readcycle<br />

I forbindelse med MC68000’s readcycle fra eksterne enheder, skal denne readcycle overholde<br />

timingdiagrammet i figur B.1.<br />

En readcycle foregår som angivet i timingdiagrammet på figurB.1 og i flowdiagrammet på figur<br />

B.2: Hvis ikke R/W er høj, sættes den høj tCHRH efter S0’s opadgående flanke. Derefter sendes<br />

en adresse ud på adressebussen. Denne adresse angives at være gyldig ved, at AS, UDS og<br />

LDS sættes tCHSL efter den nedgående flanke af S1. Databussen skal have et gyldigt input til<br />

tiden, tDICL, før den nedadgående flanke af S6. Hvis den enhed der læses fra, ikke kan levere<br />

data hurtigt nok til databussen, må der indsættes waitcycles. Der læses fra databussen på den<br />

nedadgående flanke af S6, hvorefter AS, UDS og LDS sættes høje tCLSH efter den nedafgående<br />

flanke af S6.<br />

På figur B.1 er også indtegnet CS, som er det chipselect, som adressedekoderen genererer.<br />

Adressedekoderen reagerer kun, når AS sættes lav, og dette betyder en forsinkelse, tAdrDec, som<br />

er den maksimale tid, adressedekoderen er om at reagere på input.<br />

Den tid, som den eksterne enhed har til at sende gyldig data på databussen, tReadReady, gælder fra,<br />

når den eksterne enhed modtager et chipselect, til data skal være gyldig. Denne tid kan udregnes<br />

ved ligning B.1 til 217,5 ns.<br />

tReadReady 25 ¡tcycle tCHSL tAdrDec tDICL 25 ¡ 125 60 25 10 2175ns (B.1)<br />

135


Appendiks B. Timing af CPU<br />

136<br />

CLK<br />

A01-A23<br />

AS/UDS/LDS<br />

R/W<br />

CS<br />

DTACK<br />

D00-D15<br />

tcycle<br />

S0 S1 S2 S3 S4 S5 S6 S7<br />

tCHRH<br />

Adressering af ekstern enhed<br />

1.R/W sættes til read<br />

2. Adresse sættes på<br />

adressebussen<br />

3. AS, UDS og<br />

LDS sættes<br />

Modtager data<br />

1. Latcher data<br />

2. Fjerner UDS og LDS<br />

3. Fjerner AS<br />

tCHSL<br />

tAdrDec<br />

tDTACKgen<br />

tReadReady<br />

tASI<br />

Figur B.1: Readcycle for CPU<br />

Data<br />

valid<br />

tDICL<br />

CPU Ekstern enhed<br />

Begyndelse på ny cycle<br />

Output af data<br />

1. Modtager chip-select<br />

2. Placerer data på<br />

databussen<br />

3. Sætter DTACK<br />

Afslutter cycle<br />

1. Fjerner data fra databus<br />

2. Fjerner DTACK<br />

Figur B.2: Flowdiagram for readcycle<br />

tCLSH


B.2. Writecycle<br />

Hvis den eksterne enhed kan levere data på databussen indenfor denne tid, skal der ikke indsættes<br />

waitcycles. Hvis enheden derimod er langsommere end 217,5 ns, skal der indsættes et<br />

antal waitcycles afhængig af enhedens hastighed. Hvis der ikke skal indsættes waitcycles, skal<br />

der sørges for, at DTACK modtages tASI før S4’s nedadgående flanke. Dette udregnes i ligning<br />

B.2 til 92,5 ns. I tilfælde, hvor der skal indsættes waitcycles, skal DTACK forsinkes 1 tcycle pr.<br />

ønsket waitcycle.<br />

tDTACKgen 15 ¡tcycle tCHSL tAdrDec tASI 15 ¡ 125 60 25 10 925ns (B.2)<br />

B.2 Writecycle<br />

En writecycle ses på flowdiagrammet på figur B.3 og timingdiagrammet på figur B.4. Den foregår<br />

på følgende måde: Hvis ikke R/W var høj i forvejen, bliver den sat høj tCHRH efter S0’s<br />

opadgående flanke. Derefter sættes en adresse på adressebussen, og AS sættes lav tCHSL efter<br />

S2’s opadgående flanke. tCHRL efter S2’s opadgående flanke sættes R/W lav, hvorefter der sendes<br />

data ud på databussen, og data er gyldig tCLDO efter den nedadgående flanke på S3. Derefter<br />

sættes UDS og LDS tCHSL efter S4’s opadgående flanke. AS, UDS og LDS går høje tCLSH efter<br />

den nedadgående flanke på S7, og data holdes på databussen indtil tCHDOI efter den nedadgående<br />

flanke på S7. Hvis den enhed der skrives til, ikke kan nå at modtage data, inden dette bliver<br />

ugyldigt, må der indsættes waitcycles.<br />

CPU Ekstern enhed<br />

Adressering af ekstern enhed<br />

1. Adresse sættes på<br />

adressebussen<br />

2. AS sættes<br />

3. R/W sættes til write<br />

4. Data placeres på databus<br />

5. Sætter UDS og LDS Input af data<br />

1. Modtager chip-select<br />

2. Gemmer data fra databus<br />

Afslutter cycle<br />

3. Sætter DTACK<br />

1. Fjerner UDS og LDS<br />

2. Fjerner AS<br />

3. Fjerner data fra databus<br />

4. Sætter R/W til read<br />

Afslutter cycle<br />

1. Fjerner DTACK<br />

Begyndelse på ny cycle<br />

Figur B.3: Flowdiagram for writecycle<br />

Den tid, tW riteReady, som den eksterne enhed har til at latche data fra databussen, kan udregnes<br />

ved ligning B.3 til 165 ns.<br />

tWriteReady 2 ¡tcycle tCHSL tAdrDec tCHDOI 250 60 25 0 165ns (B.3)<br />

137


Appendiks B. Timing af CPU<br />

138<br />

CLK<br />

A01-A23<br />

AS<br />

UDS/LDS<br />

CS<br />

R/W<br />

tCHRH<br />

DTACK<br />

D00-D15<br />

tcycle<br />

S0 S1 S2 S3 S4 S5 S6 S7<br />

tCHSL<br />

tDTACKgen<br />

tCHRL<br />

tCLDO<br />

tCHSL<br />

Data valid<br />

tCLSH<br />

tAdrDec<br />

tASI<br />

tWriteReady<br />

Figur B.4: Writecycle for CPU<br />

tCHDOI


B.2. Writecycle<br />

Hvis den eksterne enhed kan latche data fra databussen indenfor 165 ns, skal der ikke indsættes<br />

waitcycles. Hvis enheden derimod er langsommere end dette, skal der indsættes et antal waitcycles<br />

afhængig af enhedens hastighed. Hvis der ikke skal indsættes waitcycles, skal der sørges<br />

for, at DTACK modtages tASI før S4’s nedadgående flanke. Dette udregnes i ligning (B.4) til<br />

117,5 ns. I tilfælde hvor der skal indsættes waitcycles, skal DTACK forsinkes 1 tcycle pr. ønsket<br />

waitcycle.<br />

tDTACKgen 15 ¡tcycle tCHSL tASI 15 ¡ 125 60 10 1175ns (B.4)<br />

139


Appendiks<br />

C Interrupt<br />

Følgende er skrevet ud fra [Clements, 1997, side 443-446].<br />

Interrupt er de perifere enheders mulighed for at bede mikroprocessoren om at blive betjent.<br />

Der findes 2 forskellige måder, hvorpå der kan sendes interrupt til MC68000 processoren.<br />

¯ Vektoriseret interrupt<br />

¯ Autovektoriseret interrupt<br />

Vektoriseret interrupt kræver, at de perifere enheder placerer et vektornummer på databussen,<br />

der fortæller processoren, hvilken interruptrutine der skal udføres. Ved autovektoriseret interrupt<br />

ligger det i CPU’ens exception vektortabel, hvilken Interrupt Service Rutine (ISR), der<br />

skal udføres. Fordelen ved vektoriseret interrupt er, at der er mulighed for flere forskellige interruptrutiner,<br />

mens der ved autovektoriseret interrupt kun er en rutine pr. interruptniveau. Da<br />

der, ifølge afsnit 6.2.1, kun anvendes 2 interrupt-niveauer ud over NMI i dette projekt, vælges<br />

autovektoriseret interrupt, da dette ikke kræver, at de perifere enheder er i stand til at sende<br />

interruptvektoren ud på databussen.<br />

C.1 Autovektoriseret interrupt<br />

C.1.1 Interrupt rutine<br />

Ved autovektoriseret interrupt foregår dataflowet, som det ses på figurC.1.<br />

Når processoren modtager et interrupt, svarer den ved at sende interruptniveauet ud på adressebenene<br />

A01 -A03, ogA04-A23 sættes høje. Derefter sættes R/W til 1, og FC0-FC2 sættes til<br />

(1,1,1), da dette angiver IACK. Herefter sættes AS, LDS og UDS.<br />

Når den enhed, der har sendt interrupt, modtager IACK, skal denne sætte VPA, da dette angiver,<br />

at der er tale om et autovektoriseret interrupt. Da VPA gøres aktiv, ignoreres databussen af<br />

CPU’en og denne slår op i sin vektortabel for at finde ud af, hvilken kode der skal udføres,<br />

når IACK-sekvensen er afsluttet. LDS, UDS og AS fjernes, enheden fjerner VPA og IRQ, og<br />

IACK-sekvensen afsluttes [Clements, 1997, side 444 - 446]. I praksis er det dog ikke enheden,<br />

men CPU-modulet, der sætter og fjerner VPA.<br />

140


Processor<br />

1. Sætter interruptniveau #<br />

på A01-A03<br />

2. Sætter R/W til Read<br />

3. Sætter FC til IACK<br />

4. Sætter AS<br />

5. Sætter LDS og UDS<br />

1. Ignorerer databus<br />

2. Fjerner LDS og UDS<br />

3. Fjerner AS<br />

4. Fjerner IACK fra FC<br />

5. Fjerner IRQ-niveau fra<br />

A01-A03<br />

Starter Interrupt Service<br />

Rutine<br />

C.1. Autovektoriseret interrupt<br />

Perifær enhed<br />

Sætter IRQ#<br />

Sætter VPA efter<br />

modtagelse af IACK#<br />

Fjerner VPA<br />

Fjerner IRQ#<br />

Figur C.1: Flowdiagram for interrupt-sekvensen ved autovektoriseret interrupt<br />

[Clements, 1997, side 441-446]. # angiver nummeret på interruptet, der bliver<br />

sendt.<br />

141


Appendiks<br />

D<br />

Filterberegning<br />

til højpasfilter<br />

I det følgende vil overføringsfunktionen for et 2. ordens Butterworth filter blive udledt og komponentstørrelser<br />

vil blive beregnet ved sammenligning med standardligningen, i frekvensdomænet,<br />

for et 2. ordens højpasfilter. To af disse filtre vil da blive samlet til et 4. ordens filter.<br />

Standardligningen for et 2. ordens højpasfilter ser ud på følgende måde [Texas Instruments, 2002,<br />

s. 9]:<br />

HHP <br />

<br />

f<br />

K<br />

<br />

f 2<br />

fo<br />

fo<br />

2<br />

j¡ f<br />

Q¡ fo 1<br />

(D.1)<br />

Hvor f o angiver filtrets knækfrekvens, K angiver forstærkningen i pasbåndet og Q angiver filterets<br />

godhed. Forstærkningen sættes til 1.<br />

Kredsløbsdiagrammet for et 2. ordens Sallen-Key højpasfilter fremgår af figurD.1<br />

[Texas Instruments, 2002].<br />

Vi<br />

CHP1<br />

CHP2<br />

RHP1<br />

RHP2<br />

Figur D.1: 2. ordens Sallen-Key højpasfilter.<br />

Overføringsfunktionen for højpasfiltret kan nu udledes, hvis dette kredsløb Laplace-transformeres.<br />

Det Laplace-transformerede kredsløb ses på figurD.2.<br />

Der kan nu opstilles ligninger for I1 s , I2 s og V1 s .<br />

142<br />

+<br />

−<br />

I s I1 s I2 s (D.2)<br />

Vo


Vi s<br />

1<br />

s¡CHP1<br />

I s<br />

I2 s<br />

I1 s<br />

V1 s<br />

1<br />

s¡CHP2<br />

RHP1<br />

RHP2<br />

Vo s<br />

+<br />

−<br />

Vo s<br />

Figur D.2: Laplace-transformeret 2. ordens Sallen-Key højpasfilter<br />

Der anvendes virtual shortcircuit-princippet:<br />

Strømmen gennem RHP1 kan findes som:<br />

I1 s Vo s<br />

RHP1<br />

(D.3)<br />

Spændingen, V1(s) findes ved ligning D.4, da der tilnærmelsesvis ikke løber strøm ind i operationsforstærkeren.<br />

I1(s) indsættes:<br />

<br />

1<br />

V1 s I1 s<br />

Vo s<br />

RHP1<br />

s ¡ CHP2<br />

1<br />

s ¡ CHP2<br />

RHP1<br />

RHP1<br />

<br />

Vo s<br />

Strømmen gennem RHP2 findes, og ligning D.4 indsættes:<br />

<br />

<br />

1<br />

I2 s V1 s Vo s<br />

RHP2<br />

Vo s<br />

1<br />

s¡CHP2¡RHP1<br />

RHP2<br />

<br />

1<br />

s ¡ CHP2 ¡ RHP1<br />

Vo s<br />

I(s) fra ligning D.2 bestemmes, og der indsættes D.4:<br />

<br />

<br />

1<br />

I s Vi s V1 s s ¡ CHP1 Vi s Vo s<br />

s ¡ CHP2 ¡ RHP1<br />

<br />

Vo s<br />

<br />

1<br />

s¡CHP2¡HHP1<br />

RHP2<br />

<br />

1 s ¡ CHP1<br />

Overføringsfunktionen kan nu bestemmes ved at sætte ligningD.2 og D.6 lig hinanden.<br />

<br />

<br />

Vi s Vo s<br />

1<br />

s ¡CHP2 ¡ RHP1<br />

<br />

1 s ¡ CHP1 Vo s<br />

RHP1<br />

Overføringsfunktionen findes nu som H s Vo s<br />

Vi s .<br />

H s Vo s<br />

Vi s <br />

<br />

CHP1<br />

CHP2¡RHP1<br />

s ¡ CHP1<br />

1<br />

s ¡ CHP1 RHP1<br />

Vo s<br />

<br />

1<br />

s¡CHP2¡RHP1¡RHP2<br />

1<br />

s ¡CHP2 ¡ RHP1 ¡ RHP2<br />

s 2 ¡ CHP1 ¡CHP2 ¡ RHP1 ¡ RHP2<br />

s 2 ¡ CHP1 ¡CHP2 ¡ RHP1 ¡ RHP2 s CHP1 ¡ RHP2 CHP2 ¡ RHP2 1<br />

(D.4)<br />

(D.5)<br />

(D.6)<br />

<br />

(D.7)<br />

143


Appendiks D. Filterberegning til højpasfilter<br />

Ved at lade s j ¡ 2π¡ f , fo <br />

1<br />

2π Ô CHP1¡CHP2¡RHP1¡RHP2<br />

og Q <br />

Ô CHP1¡CHP2¡RHP1¡RHP2<br />

CHP1¡RHP2 CHP2¡RHP2 CHP:2¡RHP1 1 K<br />

følger ligning D.7 samme form som ligning D.1. Komponentværdierne kan nu bestemmes, idet<br />

fo 300 Hz og Q Ô 0707. Q vælges til Ô 0707, da der ønskes en Butterworth filterkarakteristik.<br />

Butterworth filterkarakteristikken vælges, da der ikke ønskes rippler i hverken stop- eller<br />

pasbåndet. Grunden til, at Q vælges til Ô 0707 og ikke 0,707 som er den korrekte værdi for<br />

en Butterworthkarakteristik er, at det er produktet af de to filtres Q-værdier, der giver det samlede<br />

filters Q-værdi. Ô 0707 ¡ Ô 0707 0707, og det samlede filter får altså en Butterworth<br />

filterkarakteristik.<br />

For at simplificere udregningen sættes CHP1 CHP2. Vi har da:<br />

Ô<br />

C2 ¡ RHP1 ¡ RHP22<br />

Q <br />

2 ¡ C ¡ RHP2<br />

fo <br />

Ñ<br />

RHP2 <br />

Ô 0707 RHP1 4 ¡ 0707 ¡ RHP2<br />

1<br />

2π Ô C2 300 Hz<br />

¡ RHP1 ¡ RHP2<br />

1<br />

600π ¡ C 2 ¡ RHP1 Hz <br />

1<br />

Ô 0707 ¡ 1200π ¡ CHz<br />

C CHP1 CHP2 vælges til 47 nF. Modstandsværdierne bliver da:<br />

RHP2 <br />

1<br />

Ô 0707 ¡ 1200π ¡ 47 nF Hz 671 kΩ 665 kΩ<br />

RHP1 4 ¡ 0707 ¡ 671 kΩ 1898 kΩ 187 kΩ<br />

Ved disse komponentværdier bliver fo 3037 HzogQ Ô 0703. Det samlede 4. ordens filter<br />

kan ses på figur D.3. Q-værdien for det samlede filter er produktet af Q-værdierne for det enkelte<br />

filter. I dette tilfælde bliver den samlede Q-værdi altså 0,703, hvilket tilnærmelsesvis svarer til<br />

en Butterworth filterkarakteristik.<br />

144<br />

Vi<br />

CHP1<br />

47n<br />

CHP2<br />

47n<br />

RHP1<br />

18,7k<br />

RHP2<br />

6,65k<br />

+<br />

−<br />

CHP3<br />

47n<br />

CHP4<br />

Figur D.3: 4. ordens højpasfilter<br />

47n<br />

RHP3<br />

18,7k<br />

RHP4<br />

6,65k<br />

+<br />

−<br />

Vo


Appendiks<br />

E<br />

Wave-filformat<br />

Følgende appendiks vil beskrive opbygningen af filformatet wave. Kilden til det efterfølgende<br />

er [Born, 1995, s. 1147-1149] og [COMP630]. Til sidst i appendikset vil det blive gennemgået,<br />

hvorledes wave-filerne ser ud i dette projekt.<br />

E.1 Generel opbygning af wave-filer<br />

Waveformatet er et underformat af RIFF (Resource Interchange Format), som er foreslået af<br />

Microsoft. RIFF formatet kan indeholde forskellige data, såsom grafik, lyd m.m. Waveformatet<br />

indeholder lyddata. RIFF format er en såkaldt pakke, som består af flere store dele; de såkaldt<br />

chunks. Hver chunk bestemmer indholdet af data. En wavefil består af 3 chunks. Wavefilens<br />

struktur er vist i tabel E.1.<br />

RIFF Header<br />

Format chunk<br />

Data chunk<br />

Tabel E.1: Wavefilens struktur.<br />

Hver chunk begynder med en identifikation af indholdet af den pågældende chunk. Derefter<br />

følger længden af chunk’en. Til sidst følger et vilkårligt antal af parametre.<br />

RIFF filer skal gemmes i "little-endian". Dvs. at bytes i et word gemmes fra højre til venstre,<br />

den mindst betydende byte til højre, modsat "big-endian", som gemmes fra venstre til højre,<br />

den mindst betydende byte til venstre. Little endian kan illustreres ved et eksempel. I tabellen<br />

herunder er der eksempler på at gemme et word (2 byte) eller et longword (4 byte).<br />

Værdi Big endian Little endian Bemærkning<br />

1h 00 01 01 00 word<br />

10h 00 10 10 00 word<br />

2D46h 00 00 2D 46 46 2D 00 00 longword<br />

01020304h 01 02 03 04 04 03 02 01 longword<br />

Herefter følger en beskrivelse af de enkelte chunks.<br />

145


Appendiks E. Wave-filformat<br />

E.1.1 RIFF header<br />

RIFF headerens struktur ses i tabel E.2. De første fire bytes indeholder RIFF signaturen, de<br />

næste fire længden (i bytes) af resten af filen. Header chunk’en afsluttes med “WAVE”, hvilket<br />

antyder at filen er en wavefil.<br />

E.1.2 Format chunk<br />

Byte nummer Indhold<br />

0-3 “RIFF” (ASCII)<br />

4-7 Længden (i bytes) af pakken der følger.<br />

8-11 “WAVE” (ASCII)<br />

Tabel E.2: RIFF headerens struktur.<br />

Denne chunk indeholder information om hvilket format dataene er i f.eks. om lyden er i mono<br />

eller stereo. Strukturen ses i tabel E.3.<br />

Byte nummer Indhold<br />

12-15 “fmt ” (ASCII)<br />

16-19 Længden af resten af denne chunk. Længde er altid 10h.<br />

20-21 Format type: 0 = Mono, 1 = Stereo (Altid stereo [COMP630])<br />

22-23 Kanaler: 1 = Mono, 2 = Stereo<br />

24-29 Samplingsfrekvens [Hz]<br />

30-33 Byte pr. sekund<br />

34-35 Byte pr. sample: 1 = 8 bit mono,2=8bitstereo eller 16 bit mono,<br />

4 = 16 bit stereo<br />

36-37 Bit pr. sample<br />

E.1.3 Data chunk<br />

Tabel E.3: Format chunk’ens struktur.<br />

Denne chunk indeholder data. Strukturen kan ses i tabelE.4.<br />

146


Byte nummer Indhold<br />

38-41 “data” (ASCII)<br />

42-45 Længden af pakken der følger.<br />

E.2. Wave-filens opbygning i dette projekt<br />

46- data (samples med det beskrevne format i format chuck’en)<br />

Tabel E.4: Data chunk’ens struktur.<br />

E.2 Wave-filens opbygning i dette projekt<br />

Tabel E.5 viser, hvordan wave-filerne skal gemmes med de parametre, som er valgt i dette projekt.<br />

Byte 4-7 skal indeholde længden af pakken der følger. Dvs. at det er antallet af samples<br />

+ 36. Offsettet på 36 svarer til antallet af bytes efter byte 7 til data begynder. I dette projekt<br />

anvendes der en bitopløsning på 8 bit (1 byte) pr. sample på 1 kanal. Antallet af kanaler og byte<br />

pr. sample angives derfor altid som 1. Samplingsfrekvensen er variabel. Da bitopløsningen er 8<br />

bit, er byte pr. sekund det samme som samplingsfrekvensen.<br />

Byte nummer Indhold<br />

0-3 “RIFF” (ASCII)<br />

4-7 Antal samples + 36 (bytes).<br />

8-11 “WAVE” (ASCII)<br />

12-15 “fmt ” (ASCII)<br />

16-19 10h.<br />

20-21 Format type: 1 = Stereo<br />

22-23 Kanaler: 1= Mono<br />

24-29 Samplingsfrekvens: 4 kHz (FA0h), 8 kHz (1F40h) eller 16 kHz<br />

(3E80h)<br />

30-33 Byte pr. sekund = samplingsfrekvensen<br />

34-35 Byte pr. sample: 1 = 8 bit mono<br />

36-37 Bit pr. sample: 8<br />

38-41 “data” (ASCII)<br />

42-45 Længden af pakken der følger: Antal samples.<br />

46-slut data (samples med det beskrevne format i format chuck’en)<br />

Tabel E.5: Opbygningen af wave-filen i dette projekt.<br />

147


Appendiks E. Wave-filformat<br />

E.2.1 Eksempel<br />

For at gøre wave-filerne lidt mere håndgribelige, vises her et eksempel. Det antages, at der er<br />

blevet optaget en besked med en samplingsfrekvens på 16 kHz, og at længden af beskeden er<br />

to sekunder, altså det der svarer til 32000 samples. Koden er vist herunder. "R" betyder at det<br />

er ASCII-værdien af R (82), som egentligt står der. Koden er angivet med mellemrum mellem<br />

hver byte. I linie 1 og 5 ses det tydeligt at words og longwords gemmes som “little endian”.<br />

0 "R" "I" "F" "F" RIFF fil<br />

1 24 7D 00 00 00007D24h er 32000+36 (Antallet af samples + 36)<br />

2 "W" "A" "V" "E" WAV format<br />

3 "f" "m" "t" " " Format chunk begynder<br />

4 10 00 00 00 10h er længden af chunk’en.<br />

5 01 00 01 00 0001h er stereo og 0001h er antal kanaler<br />

6 80 3E 00 00 3E80h er 16000 (samplingsfrekvensen)<br />

7 80 3E 00 00 3E80h er 16000 (byte pr. sekund)<br />

8 01 00 08 00 1h er byte pr. sample (mono). 8h er bit pr. sample<br />

9 "d" "a" "t" "a" Data chuck begynder<br />

10 00 7D 00 00 7D00h 32000 (Antalet af samples)<br />

11 . . . . Data, hver prik angiver en byte<br />

12 . . . .<br />

148


Appendiks<br />

F<br />

Seriel kommunikation<br />

Formålet med dette appendiks er at skabe overblik over opsætningen af den serielle kommunikation<br />

i pc-softwaren. Her skal der tages hensyn til, at der er ønsket, at pc-softwaren skal<br />

skrives i Linux. Dette appendiks er baseret på Linux manpages, kilde om seriel kommunikation<br />

[Sweet, 2003] og [Madsen, 2003].<br />

Det er vigtigt at definere, hvordan kommunikation mellem pc og diktafon skal foregå, da der fra<br />

diktafonen er fastsat kriterier, som skal overholdes, for at kommunikationen skal kunne fungere.<br />

Der er valgt at benytte en ACIA som kommunikationsadapter og derfor skal kommunikationen<br />

med diktafonen foregå asynkront. Ligeledes er der fastsat en hastighed, hvormed data kan sendes<br />

til og fra diktafonen, en såkaldt baudrate. I dette tilfælde er baudraten fastsat til 115,2 kbps. Hvis<br />

denne hastighed ikke overholdes, kan man risikere, at der opstår fejl i kommunikationen.<br />

F.1 Standardbiblioteker<br />

I C-programmering findes der foruddefinerede filer, som skal inkluderes i programmet for at<br />

kunne benytte de funktioner, som C tilbyder. Det er derfor vigtigt at finde ud af hvilke INCLUDEfiler,<br />

som skal benyttes til opsætningen af den serielle kommunikation. Det vil her være nødvendigt<br />

at inkludere følgende filer:<br />

stdio.h Standard input/output. Dette giver f.eks. mulighed for udskrift til skærmen og input fra<br />

tastatur.<br />

fcntl.h File control. Giver bl.a. kontrol over "open files".<br />

termios.h Generel terminal interface. Giver kontrol over "tty"porte(TeleType-port); i dette tilfælde<br />

kommunikationsportene.<br />

unistd.h UNIX standard function definition. Definerer symbolske konstanter og strukturer, som<br />

ikke er definerede eller deklarerede.<br />

sys/signal.h Specificerer hvordan programmet skal behandle signaler under eksekvring.<br />

I Linux skal man ind og definere hvilken port man skal skrive til. For at skrive til porten skal<br />

man ind og skrive til en enhedsfil (driver), som svarer til den port, man ønsker at skrive til. I dette<br />

149


Appendiks F. Seriel kommunikation<br />

projekt er det valgt, at den serielle COM1-port skal anvendes og derfor skal stien /dev/ttyS0<br />

anvendes, når der skrives til porten. I Linux er der device-drivere til alt hardware i computeren<br />

og de har til formål at gøre det muligt at kalde de enkelte stykker hardware med software.<br />

F.2 Definitioner af variable<br />

Først defineres der følgende variable, som anvendes gennem opsætningen.<br />

#define BAUDRATE B115200 Et alias for den valgte baudrate.<br />

#define MODEMDEVICE "/dev/ttyS0" Et alias for stien til enheds-driveren for COM1-port.<br />

int fd; Definering af variabel, som i C normalt anvendes til fil-håndtering og kaldes "file descriptor".<br />

Termios er en tty-controller, som anvendes til opsætning af tty-enheder og den er opbygget som<br />

en struct. I denne struct er der, som standard, defineret options, som anvendes i opsætningen af<br />

det enkelte device. De forskellige options er som følger:<br />

c_cflag En kontrol option, som bl.a. anvendes til at opsætte baudrate, antallet af databit, paritetsbit<br />

og stopbit.<br />

c_lflag En lokal option, som bl.a. anvendes til at administrere, hvordan data skal behandles af<br />

den serielle driver.<br />

c_iflag En input option, som bl.a. anvendes til at lave kontrol af paritetsbit på data sendt til<br />

porten.<br />

c_oflag En output option, som bl.a. anvendes til at lave behandling af output-data. Styrer bl.a.<br />

om data skal være lower- eller uppercase.<br />

c_cc En option til karakterkontrol. Anvendes bl.a. til at styre timeouts ved manglende data på<br />

porten.<br />

Der vil i denne struct blive defineret to variable, som skal anvendes til at gemme den gamle og<br />

den nye opsætning af porten. Den gamle opsætning gemmes således, at det er muligt genetablere<br />

den gamle opsætning, efter programmet er afsluttet. De to variable er: newtio og oldtio.<br />

Efter de forskellige hjælpevariable er defineret, kan opsætningen af kommunikationsporten begynde.<br />

F.3 Opsætning af porten<br />

Det er muligt at åbne den poet, man ønsker at skrive til ved at anvende kommandoen:<br />

150


fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);<br />

F.3. Opsætning af porten<br />

Hvor det ses at efter defineringen af porten (MODENDEVICE), er der sat nogle flags, som<br />

har betydning for kommunikationen. Det første flag, O_RDWR, sætter porten i R/W-mode. Næste<br />

flag, O_NOCTTY, får programmet til at slippe kontrollen over terminalen således, at input, f.eks.<br />

tastetryk, ikke får indflydelse på terminalen. Det kan f.eks. være at lukke terminalen utidigt. Det<br />

sidste flag, O_NONBLOCK, sørger for at porten ikke blokeres.<br />

Når forbindelsen er åbnet, vil det være en fordel at undersøge, hvilken værdi fd returnerer med,<br />

da " 1" betyder, at der opstod en fejl i forsøget på at åbne forbindelsen. Dette kan f.eks. betyde,<br />

at diktafonen ikke er tilsluttet og der skal derfor komme en fejlmeddelse til brugeren.<br />

Efter returværdien er undersøgt anvendes funktionen tcgetattr, som er en funktion, der anvendes<br />

til at hente den gamle portopsætning og gemme den i variablen oldtio. Det ser ud som<br />

følger:<br />

tcgetattr(fd, &oldtio);<br />

Efter den gamle opsætning er gemt, opsættes de ønskede kontrol options. Det ser ud som følger:<br />

newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;<br />

Hvor BAUDRATE angiver den ønskede kommunikationshastighed. Det næste flag, CRTSCTS, angiver<br />

at der ønskes hardwareflowkontrol til datakommunikation. Herefter sættes kommunikationen<br />

til at være 8 bit med flaget CS8, CLOCAL angiver, at der ikke ønskes at ændre "ejer" af porten.<br />

Det sidste flag, CREAD, åbner muligheden for at modtage.<br />

Herefter opsættes porten til at ignorere partitetsfejl ved at opsætte input options således:<br />

newtio.c_iflag = IGNPAR;<br />

Porten sættes herefter op til at sende raw (ubehandlet) data ud. Dvs. dataene sendes ud af porten<br />

som de kommer til den. Dette gøres ved følgende kommando;<br />

newtio.c_oflag = 0;<br />

Da der vælges, at kommunikationen skal foregå med ubehandlet data, skal local options sættes<br />

til nul, da der ellers kan forekomme fejl i kommunikationen. Dette gøres som følgende:<br />

newtio.c_lflag = 0;<br />

Der ønskes, at der skal læses data på porten ved hver karaterer som sendes til den, og for at<br />

sikre, at computeren ikke låser, hvis der ikke modtages data, sættes der en timeout. Dette gøres<br />

som følger:<br />

151


Appendiks F. Seriel kommunikation<br />

newtio.c_cc[VMIN] = 1; /* Antal karakterer før læsning *<br />

newtio.c_cc[VTIME] = 0; /* Ti sekunder wait*/<br />

Efter den ønskede opsætning er specificeret, fjernes den gamle med funktionen tcflush, som<br />

fjerner alt på portens buffer. Efter den gamle opsætning er fjernet, sendes den nye opsætning til<br />

porten med fuktionen tcsetattr, som sætter den nye opsætning. Dette ser ud som følger:<br />

tcflush(fd, TCIFLUSH);<br />

tcsetattr(fd, TCSANOW, &newtio);<br />

Hvor TCIFLUSH fjerner alt opsætning for input. I opsætningen af porten anvendes TCSANOW til<br />

at sætte den nye opsætning uden at vente. Herefter er opsætningen fuldført.<br />

For at lukke for kommunikationen med den serielle port, anvendes kommadoen close(fd);<br />

og dette vil slippe alt data tilknyttet til fd. Dvs. i dette tilfælde den serielle port. Inden porten<br />

lukkes, sættes den gamle opsætning op igen, ved at anvende funktionen tcsetattr. Der sendes<br />

ligeledes et afslutsignal til diktafonen.<br />

Funktionen, som skal anvendes til at skrive fra pc’en til diktafonen, ser ud som følger;<br />

write(fd, &tegn, 1);<br />

Hvor funktionen write anvendes til at skrive til diktafonen. Flaget, &tegn, er en variabel for det<br />

tegn, som skal sendes og 1 angiver mængden af bytes, der skal sendes.<br />

Til sidst ses der på måden, hvorpå der hentes data fra diktafonen. Det gøres på følgende måde:<br />

unsigned char ch = 1;<br />

int timeout;<br />

for( timeout =0; timeout < 2000000;timeout++){<br />

if (read(fd, &ch, 1) ==-1){}<br />

else{return ch;}}<br />

Hvor ch er en variabel for den byte, som hentes fra diktafonen. Der defineres ligeledes en variabel,<br />

timeout som anvendes til tællevariabel for en timeout tælleløkke. Funtionen, read, anvendes<br />

til at læse fra diktafonen. Denne funtion har samme flags som write-funktionen.<br />

152


Appendiks<br />

G Protokol<br />

I dette afsnit vil der blive beskrevet en protokol, som skal ligge til grund for kommunikationen<br />

mellem pc og diktafonen. Ifølge kravspecifikationen skal pc’en styre kommunikationen, når<br />

forbindelsen først er oprettet.<br />

G.1 Løsningsforslag<br />

Der er mange måder at udforme denne protokol på. I en protokol kan der enten lægges vægt<br />

på sikkerhed eller hastighed/simplicitet. For at lave en sikker protokol, kan der laves mange<br />

kontrolkoder, som sendes sammen med hvert stykke data. Hvis modtager finder disse koder<br />

forkerte, kan den bede om at modtage dataene igen. Derved kan der korrigeres for tab af data.<br />

Vælges det i stedet at lave en hurtig protokol, vil overførelsen gå stærkere. For at lave en hurtig<br />

protokol skal man primært sende data og et minimum af kontrolsignaler.<br />

G.1.1 Valg af løsning<br />

Den grundige protokol fravælges, fordi systemet er begrænset. Hermed falder valget på at lave<br />

en hurtig protokol.<br />

G.2 Design af protokol<br />

For at gøre protokollen så hurtig som muligt, er det vigtigt at gøre sig klart, hvad der er den<br />

primære transport af data.<br />

Ud fra figur 3.10 i kravspecifikationen kan det vurderes, hvilke data der skal gå mellem pc’en<br />

og diktafonen.<br />

Fra pc’en til diktafonen skal der kunne sendes følgende:<br />

¯ Efterspørgsel om der er forbindelse<br />

¯ Efterspørgsel om hvor mange beskeder der er<br />

¯ Efterspørgsel om at hente kvalitet i Lyddata<br />

¯ Efterspørgsel om at hente lyddata<br />

¯ Efterspørgsel om at slette lyddata<br />

153


Appendiks G. Protokol<br />

¯ Sætte kvalitet i Kvalitet_status og Lyddata<br />

¯ Afslutte forbindelsen<br />

Fra diktafonen til pc’en skal der kunne sendes følgende:<br />

¯ Svare på at diktafonen er klar<br />

¯ Sende antal af beskeder<br />

¯ Sende kvalitet fra Lyddata<br />

¯ Sende lyddata<br />

¯ Svare på at data er slettet<br />

¯ Svare på at den har modtaget kvaliteten og gemt denne i Kvalitet_status<br />

Det der kræver mest, er at sende lyddata, fordi lyddata i de fleste tilfælde er den største mængde<br />

data. Derfor skal protokollen optimeres til at sende lyddata fra diktafonen til pc’en.<br />

Da det er valgt, at pc’en skal styre kommunikationen, vil det også kun være pc’en, som sender<br />

instruktioner. Diktafonen skal kun svare på de instruktioner, der kommer. Der er et "masterslave"<br />

forhold mellem pc’en og diktafonen.<br />

Først fastlægges instruktionerne og dataene fra pc’en. Der er syv instruktioner fra pc’en. Disse<br />

kan beskrives vha. af tre bit. Pc’en skal ligeledes kunne sende kvalitet til Kvalitet_status<br />

og Lyddata. Dette kræver to bit. For at kunne adskille de enkelte besker, vælges det, at pc’en<br />

skal hente én besked ad gangen. Dette gøres ved at sende en efterspørgsel om at hente lyddata,<br />

samt hvilket beskednummer der ønskes. Der er maksimalt 20 beskeder, det vil kræve 5 bit for at<br />

angive dette.<br />

Da der skal anvendes tre bit til instruktioner og fem bit til data, kan kommunikationen foregå på<br />

byteniveau. Strukturen af en byte, sendt fra pc’en til diktafonen, ses nedenfor.<br />

I2 I1 I0 D4 D3 D2 D1 D0<br />

Hvor "I"angiver instruktioner og "D"angiver data. I det følgende angiver X’erne "don’t cares". I<br />

praksis anvendes der dog 0’er.<br />

Herefter vil det blive beskrevet, hvorledes pc’en sender en instruktion og hvordan diktafonen<br />

skal reagere på denne instruktion.<br />

Efterspørgsel om der er forbindelse<br />

Pc’en sender følgende byte:<br />

1 1 1 X X X X X<br />

Diktafon skal svare med følgende, hvis den er klar:<br />

0 0 0 0 0 0 0 1<br />

Hvis den ikke er klar, skal den sende en kode forskellig fra det ovenstående.<br />

154


Efterspørgsel om hvor mange beskeder der er<br />

Pc’en sender følgende byte:<br />

G.2. Design af protokol<br />

0 0 1 X X X X X<br />

Diktafon skal hente antal beskeder og sende værdien af dette i en byte. Hvis der f.eks. er 11<br />

beskeder, er svaret:<br />

0 0 0 0 1 0 1 1<br />

Efterspørgsel om at hente kvalitet i Lyddata<br />

Pc’en sender følgende byte:<br />

0 1 0 X X X X X<br />

Diktafon skal hente kvalitet og sende værdien af dette i en byte. Hvis det f.eks. er bedste kvalitet,<br />

er svaret:<br />

0 0 0 0 0 0 1 1<br />

Efterspørgsel om at hente lyddata i Lyddata<br />

Pc’en sender følgende byte:<br />

0 1 1 D4 D3 D2 D1 D0<br />

D0-D4 angiver beskednummeret.<br />

Diktafonen skal svare med længden (i bytes) af beskeden og derefter begynde at sende lyddata.<br />

Grunden til at længden sendes er, at pc’en kan afgøre, hvornår beskeden er slut. Længden af<br />

en besked kan maksimalt være hele RAM’en. RAM’en er 20 0000h byte lang. Derfor angives<br />

længden i longword. Grafisk vil svaret se således ud:<br />

0 0 0 0 0 0 0 0<br />

D23 D22 D21 D20 D19 D18 D17 D16<br />

D15 D14 D13 D12 D11 D10 D09 D08<br />

D07 D06 D05 D04 D03 D02 D01 D00<br />

Lyddata - byte pr. byte til beskeden er slut<br />

Efterspørgsel om at slette lyddata i Lyddata<br />

Pc’en sender følgende byte:<br />

1 0 0 X X X X X<br />

Diktafonen skal svare med en byte. Har byten værdien 0, har den slettet data, og alle andre<br />

værdier betyder, at den ikke har slettet data.<br />

155


Appendiks G. Protokol<br />

Sætte kvalitet i Kvalitet_status og Lyddata<br />

Pc’en sender følgende byte:<br />

1 0 1 0 0 0 D1 D0<br />

D0-D1 angiver kvaliteten.<br />

Diktafonen svarer med en byte. Har byten værdien 0, har den sat kvaliteten, og alle andre værdier<br />

betyder, at den ikke har sat kvaliteten.<br />

Afslutte forbindelsen<br />

Pc’en sender følgende byte:<br />

1 1 0 X X X X X<br />

Diktafonen svarer ikke med noget og overtager selv styringen igen.<br />

156


Del<br />

Testrapporter VI<br />

157


Testrapport<br />

I.1 Formål<br />

Formålet med disse målinger er at dokumentere, at:<br />

¯ Reset/halt-kredsløbet fungerer.<br />

¯ Adressedekoderne fungerer.<br />

¯ IRQ-controlleren fungerer.<br />

¯ DTACK-generatoren fungerer.<br />

¯ VPA-generatoren fungerer.<br />

I<br />

CPU-modul<br />

¯ Der kan kommunikeres med CPU-modulet ved hjælp af TS2MON.<br />

For reset/halt-kredsløbet skal undersøges, at RESET og HALT indgangene på mikroprocessoren<br />

holdes lave i minimum 100 ms ved reset. Dette skal finde sted, når strømforsyningen til systemet<br />

tændes, og når en ekstern reset-kontakt aktiveres.<br />

Desuden skal der undersøges, om reset/halt kredsløbet overholder de niveauer, som mikroprocessoren<br />

kræver på RESET og HALT indgangene. Disse niveauer er [MC68000, side 10-7]:<br />

¯ VILmaks: 0,8 V<br />

¯ VIHmin: 2,0 V<br />

For IRQ-controlleren skal undersøges, at der kan sendes interrupts til CPU’en. Herunder at det<br />

er muligt at sende et NMI ved et tryk på NMI-knappen.<br />

For adressedekoderen, VPA-generatoren og DTACK-generatoren skal undersøges, om disse<br />

PEEL’S overholder testvektorerne i ABEL-filen.<br />

159


Testrapport I. CPU-modul<br />

I.2 Reset/halt-kredsløb<br />

I.2.1 Apparatur<br />

Apparat Mærke AAU-nummer<br />

4-kanals oscilloskop Agilent 54625A 33844<br />

Multimeter Fluke 37 08180<br />

Strømforsyning Delta Elektronika E030-3 33133<br />

I.2.2 Fremgangsmåde/opstilling<br />

Ved opstart af system<br />

Der måles med probe 1 på RESET, probe 2 på HALT og probe 3a på strømforsyningen. Dette<br />

ses på figur I.1. Oscilloskopet trigger på strømforsyningen, og derved kan tidsforsinkelsen, fra<br />

strømforsyningen tændes til RESET og HALT går høj, måles. Der måles også på spændingsniveauer<br />

for logisk lav og høj på RESET og HALT vha. oscilloskopets cursor.<br />

3a<br />

RRH2<br />

3b<br />

10k<br />

SWRH<br />

CRHT<br />

10µ<br />

TL7705A<br />

7<br />

SENSE<br />

3<br />

6<br />

CT RESET<br />

1<br />

REF<br />

5<br />

RESET<br />

2<br />

RESIN<br />

CRH1<br />

100n<br />

5V<br />

RRH1<br />

10k<br />

2<br />

DRH1<br />

DRH2<br />

RRH3<br />

10k<br />

1<br />

RRH4<br />

10k<br />

HALT<br />

RESET<br />

Figur I.1: Opstilling ved målinger. Probe 3a benyttes ved målingen ved opstarten af systemet.<br />

Probe 3b benyttes ved målingerne ved reset af systemet, foretaget ved knaptryk på<br />

SWRH. Pilene angiver probernes placering.<br />

Ved aktivering af trykknap<br />

Der måles med probe 1 på RESET, probe 2 på HALT og probe 3b på den eksterne kontakt.<br />

Dette ses på figur I.1. Oscilloskopet trigger på kontakten, og derved måles tidsforsinkelsen, fra<br />

kontakten slippes, til RESET og HALT går høj. Der måles også på spændingsniveauer for logisk<br />

lav og høj på RESET og HALT med oscilloskopets cursor.<br />

160


I.2.3 Måleresultater<br />

Ved opstart af system<br />

I.2. Reset/halt-kredsløb<br />

Målingerne ved opstarten af systemet kan ses på oscilloskopbilledet på figurI.2. I tabel I.1 ses<br />

de på oscilloskopbilledet aflæste tider fra systemet er startet op, og til signalerne bliver høje.<br />

I tabel I.2 ses spændingsniveauerne for resethalt-kredsløbet under opstart.<br />

Probe 1, [V]<br />

Probe 2, [V]<br />

Probe 3, [V]<br />

4<br />

2<br />

0<br />

0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45<br />

4<br />

2<br />

0<br />

4<br />

2<br />

0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45<br />

0<br />

0 0.05 0.1 0.15 0.2 0.25<br />

tid, [s]<br />

0.3 0.35 0.4 0.45<br />

Figur I.2: Billede af oscilloskopets visning ved opstart. Probe 1 er RESET, probe 2 HALT og<br />

probe 3 viser strømforsyningen.<br />

161


Testrapport I. CPU-modul<br />

Probe 1, [V]<br />

Probe 2, [V]<br />

Probe 3, [V]<br />

5<br />

4<br />

3<br />

2<br />

1<br />

5<br />

4<br />

3<br />

2<br />

1<br />

4<br />

2<br />

0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45<br />

0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45<br />

0<br />

0 0.05 0.1 0.15 0.2 0.25<br />

tid, [s]<br />

0.3 0.35 0.4 0.45<br />

Figur I.3: Billede af oscilloskopets visning ved aktivering af trykknap. Probe 1 er RESET,<br />

probe 2 HALT og probe 3 viser reset-knappen.<br />

Signal Tider<br />

RESET 250 ms<br />

HALT 250 ms<br />

Tabel I.1: Tid fra opstart af systemet til signalerne<br />

går høje.<br />

Ved aktivering af trykknap<br />

Signal Logisk lav Logisk høj<br />

RESET 0,563 V 5,0 V<br />

HALT 0,500 V 5,0 V<br />

Tabel I.2: Spændingsniveauer ved opstart.<br />

Ved aktiveringen af trykknappen fremkom det oscilloskopbillede, som er vist på figurI.3. På<br />

oscilloskopbilledet blev aflæst tider fra trykknappen blev aktiveret, og til signalet igen gik højt.<br />

Disse tider ses i tabel I.3. I tabel I.4 ses signalernes spændingsniveauer når resetknappen aktiveres.<br />

I.2.4 Vurdering<br />

Det ses af resultaterne i tabel I.1, at den tid som går fra systemet startes, og til RESET og HALT<br />

indgangene sættes høje, er over de 100 ms, som systemet kræver som minimum. Det ses af tabel<br />

I.2 og I.4 at de nødvendige spændingsniveauer for logisk lav og logisk høj er overholdt.<br />

Af tabel I.3 ses, at der går minimum 100 ms fra reset-knappen er sluppet, og til RESET og HALT<br />

indgangene sættes høje af resethalt-kredsløbet. Dette accepteres som bevis for, at reset/haltkredsløbet<br />

fungerer efter hensigten.<br />

162


Signal Tid<br />

RESET 170 ms<br />

HALT 170 ms<br />

Tabel I.3: Tid fra deaktivering af resetknap til<br />

RESET og HALT igen er deaktiverede.<br />

I.3 Adressedekoder<br />

I.3.1 Apparatur<br />

I.3. Adressedekoder<br />

Signal Logisk lav Logisk høj<br />

RESET 0,563 V 4,94 V<br />

HALT 0,625 V 5,06 V<br />

Tabel I.4: Spændingsniveauer ved aktivering<br />

af resetknap.<br />

Apparat Mærke AAU-nummer<br />

PEEL-tester Ukendt intet<br />

Logikanalysator Agilent 54621D 33842<br />

Fungerende minimumssystem<br />

I.3.2 Fremgangsmåde/opstilling<br />

Adressedekoderne placeres i PEEL-testeren, og der undersøges om kredsene overholder testvektorerne<br />

i ABEL-filerne "addp1.abl" og "addp2.abl", disse er vedlagt på cd-rom.<br />

For at teste en PEEL’s virkemåde indsættes denne i en PEEL-tester. På en PEEL-tester kan<br />

indgangene styres vha. kontakter og udgangenes værdier kan aflæses på lysdioder. Fremgangsmåden<br />

er som følger: Indsæt PEEL’en i testeren. Indstil indgangene, som den første testvektor<br />

fra simuleringen. Slut strømmen og kontrollér, at der er de rigtige signaler på udgangen. Indgangene<br />

skiftes herefter, så de passer med den næste testvektor osv.<br />

Derefter sættes adressedekoderne i CPU-modulet, og databenene, D00-D15, samt DTACK tvinges<br />

til stel. Dette bringer systemet i såkaldt free-running-mode, hvor der på adressebussen køres<br />

alle adresser igennem, startende ved 00 0000h. Ved hjælp af logikanalysatoren undersøges, om<br />

de enkelte enheder chipselectes.<br />

I.3.3 Måleresultater<br />

Testvektorerne blev enkeltvist gået igennem ved PEEL-testeren, og det blev set, at testvektorerne<br />

var overholdt. Der blev set, at der i free-running-mode blev chipselected enheder i den<br />

rækkefølge, der er angivet i memory-mappet på figur8.2 i afsnit 8.<br />

163


Testrapport I. CPU-modul<br />

I.4 IRQ-controller<br />

I.4.1 Apparatur<br />

Apparat Mærke AAU-nummer<br />

PEEL-tester Ukendt intet<br />

Fungerende minimumssystem<br />

I.4.2 Fremgangsmåde/opstilling<br />

IRQ-controlleren testes ved et fungerende minimumssystem. Det undersøges ved et program,<br />

om der reageres på de interrupt, der modtages. Når TS2MON kører på systemet, undersøges om<br />

der reageres på et tryk på NMI-knappen.<br />

I.4.3 Måleresultater<br />

Der kan kommunikeres med CPU-modulet vha. en terminal på en pc. Når der kører et program<br />

på systemet, kan systemet afbrydes med NMI-knappen. Når der trykkes på NMI-knappen udskrives<br />

CPU’ens register på computerskærmen. Desuden ses, ved ændring af statusregisteret, at<br />

der kan modtages interrupt 3 og 4.<br />

I.4.4 Vurdering<br />

IRQ-controlleren antages af fungere, da denne reagerer korrekt ved NMI-tryk samt interrupts<br />

fra andre enheder.<br />

I.5 DTACK og VPA generator<br />

I.5.1 Apparatur<br />

I.5.2 Fremgangsmåde/opstilling<br />

Apparat Mærke AAU-nummer<br />

PEEL-tester Ukendt intet<br />

Generatoren testes i en PEEL-tester for at påvise, at testvektorerne overholdes. Testvektorerne<br />

ses i ABEL-filerne, "dtack.gen" og "vpagen.abl" som er vedlagt på cd-rommen.<br />

164


I.5.3 Måleresultater<br />

Testvektorerne var overholdt.<br />

I.6 Konklusion<br />

I.6. Konklusion<br />

Det kan konkluderes, at reset/halt-kredsløbet virker efter hensigten. De nødvendige niveauer er<br />

overholdt, og RESET og HALT holdes lave i tilstrækkelig lang tid til, at mikroprocessoren kan<br />

resettes.<br />

Det kan desuden konkluderes, at adressedekoderen fungerer korrekt, de rigtige enheder modtager<br />

chipselect, når de modtager de adresser, der passer dertil. Den efterfølgende free-runningmode-test<br />

af CPU-modulet underbyggede beviset for at adressedekoderne fungerede.<br />

Da adressedekoderne, VPA- og DTACK-generatoren overholder testvektorerne i de respektive<br />

ABEL-filer, kan det ses, at disse blokke fungerer. Det blev vist under IRQ-controlleren, at der<br />

kan kommunikeres med en pc vha. TS2MON og at modulet kan modtage interrupt, herunder<br />

NMI, ved et tryk på NMI-knappen.<br />

Derfor kan det konkluderes, at CPU-modulekt fungerer korrekt.<br />

165


Testrapport<br />

II.1 Formål<br />

II<br />

Mikrofonmodul<br />

Formålet med denne testrapport er at bestemme:<br />

¯ Talesignalets styrke med henblik på forstærkning for at udnytte hele A/D-konverterens<br />

arbejdsområde<br />

¯ Forstærkningen af signalet fra mikrofonen<br />

¯ Filtrets dæmpning og samplingsfrekvens ved de 3 kvaliteter<br />

¯ Spændingstilpasning til A/D-konverterens indgang<br />

¯ Nøjagtighed og funktion af A/D-konverteringen<br />

II.2 Talesignalets styrke<br />

II.2.1 Apparatur<br />

Apparat Mærke AAU-nummer<br />

Strømforsyning Delta Elektronika E030-3 33132<br />

33137<br />

Oscilloskop Agilent 54621A 33847<br />

Multimeter Fluke 37 06184<br />

II.2.2 Fremgangsmåde/opstilling<br />

Til måling af talesignalets styrke blev brugt opstillingen på figurII.1.<br />

Ved normal brug af en diktafon vil man, som bruger, have en afstand mellem mund og mikrofon<br />

på 10 - 15 cm og det er derfor nødvendigt at kunne registrere talesignalet med denne afstand.<br />

Det vil ligeledes være nødvendig at tale i et normalt toneleje, men da det er diffust, vil en af<br />

gruppens medlemmer blive sat til at tale i et hævet toneleje for at sikre, at der repræsenteres en<br />

maksimal værdi, som vil være realistisk set i forhold til almindelig tale.<br />

Til opstillingen blev brugt de anbefalede komponentværdier fra databladet, dvs. en modstand på<br />

2,2 kΩ og en kondensator på 33 pF, se [WM-034B]. Det viste sig ved brug af den anbefalede<br />

166


1 RMF1<br />

CMF1<br />

470 nF<br />

5V<br />

2,2 kΩ<br />

Figur II.1: Opstilling ved måling på mikrofon.<br />

II.2. Talesignalets styrke<br />

kondensator, at det ikke var muligt at registrere talesignalet i forhold til støjen og derfor ændredes<br />

størrelsen af kondensatoren til 470 nF. Ved brug af denne kondensator var det muligt at<br />

registrere et talesignal med en afstand til mikrofonen på 15 cm.<br />

Der blev sat en forsyning på 5 V på mikrofonen og målt med oscilloskopet over kondensatoren.<br />

Multimetret blev brugt til at sikre, at der var en 5 V forsyning.<br />

Der blev først foretaget en gennemgang af hele alfabetet for at se, hvor det største udsving skete;<br />

det var ved bogstaverne "A"og "S". Herefter blev målingerne udført.<br />

II.2.3 Måleresultater<br />

Først blev der målt på opstillingen, hvor der blev benyttet en kondensator på 33 pF. Oscilloskopbilleder<br />

af de målte signalniveauer kan ses på figurII.2.<br />

Probe 1, [V]<br />

6<br />

4<br />

2<br />

0<br />

−2<br />

−4<br />

−6<br />

x 10 −3<br />

−8<br />

0 0.1 0.2 0.3 0.4 0.5<br />

tid, [s]<br />

0.6 0.7 0.8 0.9<br />

(a) Støjmåling. Med Quick Measure funktionen er<br />

målt 23,2 mVpp<br />

Probe 1, [V]<br />

0.01<br />

0.005<br />

0<br />

−0.005<br />

−0.01<br />

0 0.1 0.2 0.3 0.4 0.5<br />

tid, [s]<br />

0.6 0.7 0.8 0.9<br />

(b) Talesignal (Bogstavet "A"). Med Quick Measure<br />

funktionen er målt 37,5 mVpp.<br />

Figur II.2: Målinger ved benyttelse af en kondensator på 33 pF.<br />

Det ses af figur II.2(a), at baggrundsstøjen ligger på 23,2 mVpp. Med oscilloskopets cursorfunktion<br />

måles støjen til at have en frekvens på 50 Hz. På figur II.2(b) ses, at talesignalet har en<br />

peak-peak-spænding på 37,5 mVpp.<br />

167


Testrapport II. Mikrofonmodul<br />

Herefter blev der målt på den nye opstilling, hvor kondensatoren på 33 pF blev erstattet med en<br />

470 nF kondensator. Oscilloskopbilleder af de målte signalniveauer kan ses på figurII.3.<br />

Probe 1, [V]<br />

10<br />

8<br />

6<br />

4<br />

2<br />

0<br />

−2<br />

−4<br />

x 10 −3<br />

0 0.02 0.04 0.06 0.08 0.1<br />

tid, [s]<br />

0.12 0.14 0.16 0.18<br />

(a) Støjmåling. Der er målt 31,3 mVpp.<br />

Probe 1, [V]<br />

0.04<br />

0.02<br />

0<br />

−0.02<br />

−0.04<br />

−0.06<br />

Probe 1, [V]<br />

0.06<br />

0.04<br />

0.02<br />

0<br />

−0.02<br />

−0.04<br />

−0.06<br />

−0.08<br />

0 0.02 0.04 0.06 0.08 0.1<br />

tid, [s]<br />

0.12 0.14 0.16 0.18<br />

(c) Talesignal (Bogstavet "S"). Der blev målt 152<br />

mVpp.<br />

−0.1<br />

0 0.02 0.04 0.06 0.08 0.1<br />

tid, [s]<br />

0.12 0.14 0.16 0.18<br />

(b) Talesignal (Bogstavet "A"). Quick Measure<br />

funktionen målte 197 mVpp.<br />

Figur II.3: Målinger ved benyttelse af en kondensator på 470 pF.<br />

Det ses på figur II.3(a), at baggrundsstøjen er på 31,6 mVpp. Der blev desuden målt på et talesignal,<br />

hvor der blev foretaget to målinger på henholdsvis bogstavet "A"og bogstavet "S". Som<br />

det ses af figur II.3(b) og II.3(c) var spændingsniveauerne henholdsvis 197 og 152 mVpp.<br />

II.2.4 Vurdering<br />

Målingerne med en 33 pF kondensator viste, at der var et meget lavt SNR. Dette gør det svært at<br />

skelne mellem talesignalet og støj. For at afhjælpe problemet blev indsat en større kondensator<br />

på 470 nF, og derved opnås en større SNR. Det ses af figurerne II.3(b) og II.3(c), at talesignalet<br />

168


II.3. Mikrofonforstærker<br />

har en maksimal peak-to-peak-spænding på 197 mV, når der tales ca. 15 cm fra mikrofonen.<br />

Dette kan anvendes til at bedømme, hvor meget mikrofonforstærkeren skal forstærke signalet.<br />

II.3 Mikrofonforstærker<br />

II.3.1 Apparatur<br />

Apparat Mærke AAU-nummer<br />

Strømforsyning Delta Elektronika E030-3 33132<br />

33137<br />

Oscilloskop Agilent 54624A 33843<br />

RC-Oscillator B&OTG7 07997<br />

II.3.2 Fremgangsmåde/opstilling<br />

Der blev med et oscilloskop målt på forstærkerens ind- og udgang. Opstillingen kan ses på figur<br />

II.4.<br />

1<br />

Vin<br />

RMF2<br />

23,2k<br />

RMF2A<br />

4,7k<br />

−<br />

+<br />

RMF4<br />

476k<br />

Vout<br />

Figur II.4: Opstilling ved måling på mikrofonforstærker.<br />

Der blev sendt et sinussignal med en frekvens på 1 kHz og en spænding på over 250 mVpp for at<br />

kunne justere forstærkningen til 20 gange. Der blev efterfølgende lavet et oscilloskopbillede for<br />

at vise, at forstærkeren kan forstærke signaler, hvor dens udgang ikke forvrænger i nærheden af<br />

yderpunkter dvs. -2,5 V og 2,5V.<br />

II.3.3 Måleresultater<br />

Der ses på figur II.5 oscilloskopbilledet for målingen. Med oscilloskopets Quick Measure funktion<br />

blev målt vpp 1 = 391 mVpp og vpp 2 = 7,38 Vpp.<br />

2<br />

169


Testrapport II. Mikrofonmodul<br />

Probe 1, [V]<br />

0.15<br />

0.1<br />

0.05<br />

0<br />

−0.05<br />

−0.1<br />

−0.15<br />

Probe 2, [V]<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

x 10 −3<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

x 10 −3<br />

3<br />

2<br />

1<br />

0<br />

−1<br />

−2<br />

−3<br />

tid, [s]<br />

Figur II.5: Måling på ind- og udgang af mikrofonforstærker. Probe 1 er indgangen og Probe 2<br />

er udgangen.<br />

II.3.4 Vurdering<br />

Af figur II.5 ses, at signalet kun forstærkes 18,9 gange. Potentiometeret er derfor ikke justeret<br />

helt korrekt. Det ses desuden, at signalet som forventet inverteres. Selv ved indgangsspændinger,<br />

der er for store i forhold til det forventede fra mikrofonen ses, at mikrofonforstærkeren er i stand<br />

til at forstærke signalet 18,9 gange uden forvrængning. Forstærkningen justeres efterfølgende<br />

til 20 gange ved potentiometeret.<br />

170


II.3.5 Højpasfilter og antialiasing-filter<br />

II.3.6 Apparatur<br />

Apparat Mærke AAU-nummer<br />

II.3. Mikrofonforstærker<br />

33132<br />

Strømforsyning Delta Elektronika E030-3 33136<br />

33137<br />

X-Y Recorder Brüel & Kjær Type 2308 08450<br />

Measuring Amplifier Brüel & Kjær Type 2636 08451<br />

Sine Generator Brüel & Kjær Type 1051 08449<br />

Fungerende CPU- og<br />

hukommelsesmodul<br />

II.3.7 Fremgangsmåde/opstilling<br />

For at undersøge højpas- og antialiasingfilterets knækfrekvenser og dæmpninger ved de tre forskellige<br />

kvaliteter, blev der benyttet et fungerende CPU- og hukommelsesmodul, sammen med<br />

kvalitetsmodulet. De 2 filtre blev koblet i serie, og kvalitetsmodulet blev ved afsendelse af 0001<br />

til adressen 88 0000h sat til den laveste kvalitet, dvs. en knækfrekvens på 1,7 kHz.<br />

X-Y-recorderen, sinusgeneratoren og måleforstærkeren blev benyttet til at tegne filtrenes frekvensrespons.<br />

Disse 3 blev kalibreret ifølge manualen i laboratoriet. Derefter blev målt frekvensrespons<br />

for frekvenssweep fra 20 Hz til 20 kHz. Signalamplituden var 1 Vp. Der blev målt<br />

frekvensrespons for de to øvrige knækfrekvenser for antialiasingfilteret ved afsendelse af hhv.<br />

0002 til 88 0000h for 3,4 kHz og 0003 til 88 0000 for 6,8 kHz.<br />

Derefter blev der foretaget en måling kun på højpasfilteret, for at vise hvor stor højpasfilterets<br />

dæmpning er ved de lave frekvenser. Dette blev gjort ved at justere måleforstærkeren, således at<br />

nulpunktet lå ved -30 dB.<br />

II.3.8 Måleresultater<br />

På figur II.6 ses frekvensresponset for højpas og antialiasingfilteret. Det ses, at der er en dæmpning<br />

på 47 dB mellem 20 og 50 Hz, der er rippler på mellem 1 og 2 dB. Ved 300 Hz er signalet<br />

dæmpet 3 dB.<br />

At kurverne for 1,7 kHz, 3,4 kHz og 6,8 kHz er sammenfaldende indtil 1,7 kHz betyder, at der<br />

er fuld signalgennemgang i højpasfilteret indtil afskæringsfrekvenserne. Det ses af figuren, at<br />

filteret knækker ved præcis 1,7 kHz, 3,4 kHz og 6,8 kHz. Signalet er ved 2 kHz, 4 kHz og 8 kHz<br />

dæmpet med 22 dB.<br />

På figur II.7 ses målingen på højpasfilteret alene.<br />

171


Testrapport II. Mikrofonmodul<br />

Figur II.6: Frekvensrespons for højpas- og antialiasingfilter ved 1,7 KHz, 3,4 kHz og 6,8 kHz.<br />

172


II.3.9 Vurdering<br />

Figur II.7: Frekvensrespons for højpasfilteret.<br />

II.3. Mikrofonforstærker<br />

Det ses af frekvensresponset for filtrene på figurII.6, at højpasfilteret har den korrekte knækfrekvens.<br />

Signalet er dæmpet 3 dB ved 300 Hz. Det ses desuden, at signalet er dæmpet minimum<br />

43 dB ved 50 Hz. Signalet burde ifølge afsnit 11.2.3 være dæmpet 62,5 dB, men grunden til at<br />

dette ikke kan aflæses på grafen er, at apparatet ikke var indstillet til at vise dæmpninger under<br />

47 dB. Den efterfølgende måling kun på højpasfilteret viste, at højpasfilteret dæmpede signalet<br />

61 dB ved 50 Hz. Af figur II.6 ses at der er overshoot, hvilket betyder, at højpasfilteret ikke har<br />

en perfekt Butterworth filterkarakteristik.<br />

På frekvensresponset ses, at signalet på udgangen af højpasfilteret ved 50 Hz er dæmpet 43<br />

dB, 46 dB og 47 dB ved knækfrekvens på hhv. 1700 Hz, 3400 Hz og 6800 Hz. Denne forskel<br />

begrundes med unøjagtig kalibrering mellem målinger. Apparatet var indstillet til ikke at kunne<br />

vise dæmpninger under 47 dB, og der henvises ved de lave frekvenser til figurII.7.<br />

Ved de tre kvalitetsindstillinger var signalet dæmpet 22 dB ved halvdelen af den tilhørende<br />

samplingsfrekvens. Dette er tilstrækkeligt, da der ifølge afsnit11.2.4 ses, at signalet skulle være<br />

dæmpet 19 dB ved den halve samplingsfrekvens.<br />

173


Testrapport II. Mikrofonmodul<br />

II.4 Spændingstilpasning<br />

II.4.1 Apparatur<br />

Apparat Mærke AAU-nummer<br />

Strømforsyning Delta Elektronika E030-3 33132<br />

33137<br />

Oscilloskop Agilent 54624A 33843<br />

RC-Oscillator B&OTG7 07997<br />

II.4.2 Fremgangsmåde/opstilling<br />

Spændingstilpasningen blev undersøgt sammen med spændingsbeskyttelsen for A/D-konverteren.<br />

Der blev sendt en sinusspænding ind på indgangen til additionskoblingen af operationsforstærkeren,<br />

og målt på udgangen af denne samt udgangen af beskyttelsesoperationsforstærkeren. Opstillingen<br />

ses på figur II.8.<br />

RADC4<br />

10k<br />

10k<br />

RADC5<br />

-5 V<br />

−<br />

+<br />

ADC_B<br />

TLE2072<br />

1<br />

Vin<br />

10k<br />

RADC1<br />

RADC3<br />

10k<br />

10k<br />

RADC2<br />

−<br />

+<br />

ADB_A<br />

TLE2072<br />

2<br />

DADC1<br />

DADC2<br />

Figur II.8: Opstilling ved måling på spændingstilpasning.<br />

5V<br />

−<br />

+<br />

ADC_2<br />

TLC2201<br />

Der blev først sendt en sinusspænding med en frekvens på ca. 1 kHz og en peak-peak-spænding<br />

på 3,38 V ind på forstærkeren. Derefter blev der undersøgt om overspændingsbeskyttelsen fungerede,<br />

og der blev sendt en sinusspænding med en amplitude på ca. 4 V ind på Vin på operationsforstærkeren.<br />

II.4.3 Måleresultater<br />

På figur II.9 ses målinger på additionskoblingen og spændingsbeskytteren. Der blev målt en<br />

frekvens på 1,338 kHz, vpp 1 = 3,38 V, vpp 2 = 3,44 V, vpp 3 = 3,38 V med oscilloskopet<br />

Quick Measure funktion.<br />

174<br />

3


Probe 1, [V]<br />

Probe 2, [V]<br />

Probe 3, [V]<br />

1<br />

0<br />

−1<br />

4<br />

3<br />

2<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

1<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

4<br />

3<br />

2<br />

0 0.5 1 1.5 2 2.5<br />

tid, [s]<br />

3 3.5 4 4.5<br />

II.4. Spændingstilpasning<br />

Figur II.9: Måling på additionskobling. Probe 1 viser indgangen på additionskoblingen, probe<br />

2 udgangen og probe 3 udgangen af spændingsbeskytteren.<br />

På figur II.10 ses målingen på spændingstilpasningen, hvor indgangssignalet har en amplitude<br />

på lidt over 4 V. Frekvensen er 1,338 kHz.<br />

II.4.4 Vurdering<br />

Det ses af figurerne II.9 og II.10, at signalet ikke forstærkes, men centreres omkring 2,5 V.<br />

Derved kan det konkluderes, at additionskoblingen fungerer. Det ses desuden, at beskyttelseskredsløbet<br />

for A/D-konverteren fungerer, da der på trods af en meget stor indgangsspænding<br />

til additionskoblingen ikke kommer spændinger ud af beskyttelseskredsløbet, der er under 0 V<br />

eller over 5 V. Af figur II.10 ses på probe 3, at signalet der kommer ud af beskyttelseskredsløbet<br />

ikke går helt ned til 0 V og op til 5 V. Dette skyldes, at rail-to-rail operationsforstærkeren ikke<br />

er helt perfekt. Denne kan ikke levere spændinger, der går helt ud til forsyningerne [TLC2201,<br />

side 11].<br />

x 10 −3<br />

x 10 −3<br />

x 10 −3<br />

175


Testrapport II. Mikrofonmodul<br />

Probe 1, [V]<br />

Probe 2, [V]<br />

Probe 3, [V]<br />

4<br />

2<br />

0<br />

−2<br />

−4<br />

4<br />

2<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

0<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0 0.5 1 1.5 2 2.5<br />

tid, [s]<br />

3 3.5 4 4.5<br />

Figur II.10: Måling på additionskobling med indikation af overspænding. Probe 1 viser indgangen<br />

på additionskoblingen, probe 2 udgangen og probe 3 udgangen af spændingsbeskytteren.<br />

II.5 A/D-konvertering<br />

II.5.1 Apparatur<br />

x 10 −3<br />

x 10 −3<br />

x 10 −3<br />

Apparat Mærke AAU-nummer<br />

33132<br />

Strømforsyning Delta Elektronika E030-3 33133<br />

33136<br />

33137<br />

Logikanalysator Agilent 54621D 33842<br />

Multimeter Fluke 37 08517<br />

Fungerende CPU-<br />

og hukommelsesmodul<br />

II.5.2 Fremgangsmåde/opstilling<br />

Ved hjælp af programmerne "adctest.c", der er vedlagt på cd-rom, sættes CPU-modulet til at<br />

hente data fra A/D-konverteren.<br />

176


1 void adctest(void){<br />

2 char lyddata = adc;<br />

3 dac = lyddata;}<br />

4<br />

II.6. Konklusion<br />

adc og dac angiver indholdet af hhv. A/D-konverteren og D/A-konverteren.<br />

Logikanalysatoren benyttes til at måle på databenene fra A/D-konverteren samt dennes chipselect.<br />

Der sendes en spænding ind på A/D-konverterens indgangsben, og denne spænding måles<br />

med multimeteret. Når logikanalysatoren viser, at chipselect er lav, ses den digitale værdi, som<br />

repræsenterer spændingen på A/D-konverterens indgang. Spændingen indstilles på forskellige<br />

værdier mellem 0 V og 5 V, og der ses, hvilken digital værdi, der svarer dertil. Der startes ved 0<br />

V, og der undersøges, hvor meget spændingen skal øges for at skifte til den næste digitale værdi.<br />

Desuden måles, hvilken spænding der skal til, før der skiftes til den højeste digitale værdi, 255.<br />

II.5.3 Måleresultater<br />

II.5.4 Vurdering<br />

Indgangsspænding Digital værdi<br />

0,000 V 0<br />

0,014 V 1<br />

0,992 V 51<br />

2,495 V 127<br />

4,02 V 207<br />

4,96 V 255<br />

Det ses af resultaterne i afsnit II.5.3, at den mindst betydende bit er repræsenteret ved en spændingsforskel<br />

på 0,014 V. Dette burde være 5V<br />

255 20mV. For spændingen på 0,992 V, 2,495 V og<br />

4,02 V skal de digitale værdier være henholdsvis 51, 127 og 205. Den højeste digitale værdi ligger<br />

ved 4,96 V. De nævnte fejl accepteres, da disse ligger inden for A/D-konverteren fejlområde<br />

på ¦1 LSB [ADC0820, side 3].<br />

II.6 Konklusion<br />

Det kan ud fra målingerne konkluderes, at mikrofonen fungerer, mikrofonforstærkeren forstærker<br />

signalerne 20 gange og højpasfilteret frafiltrerer 50 Hz lavfrekvent støj. Dæmpningen bestemmes<br />

til 61 dB, og dette opfylder kravet.<br />

Det ses også, at antialiasingfilteret fungerer efter hensigten, og kan bortfiltrere signaler med<br />

frekvenser over 1,7 kHz, 3,4 kHz eller 6,8 kHz alt efter kvalitetsindstilling, da signalerne er<br />

177


Testrapport II. Mikrofonmodul<br />

dæmpet 22 dB i forhold til halvdelen af de tilhørende samplingsfrekvenser.<br />

Spændingen tilpasses således, at den svinger omkring 2,5 V, og svinger mellem 0 og 5 V.<br />

Spændingen kan ikke komme hhv. under eller over disse værdier, og derved beskyttes A/Dkonverteren<br />

mod over- og underspændinger.<br />

A/D-konverteren konluderes at fungere korrekt, da denne er meget præcis i konverteringen. At<br />

der er små afvigelser fra det forventede accepteres, da dette skyldes A/D-konverterens begrænsninger.<br />

178


III<br />

Kvalitetsmodulet<br />

Testrapport<br />

III.1 Formål<br />

Formålet med denne testrapport er at teste om udgangssignalerne fra krystalopkoblingen og clockneddelerne<br />

har de korrekte frekvenser, hvilket også indebærer at clocksignalerne skal have de<br />

rigtige spændingsniveauer. Clockinputs til antialiasing- og rekonstruktionsfiltret er høj i niveauet<br />

4 til (Vcc+0,3) V og lav i niveauet (-Vcc-0,3) til1V[MAX297]. Clockinputs til A/D-konverteren<br />

er høj i niveauet 2 V til (Vcc+0,2) V og lav i niveauet -0,2 V til 0,8 V[ADC0820].<br />

Derudover skal det testes om den styrede switch gemmer kvaliteten og vælger de korrekte udgangsfrekvenser.<br />

III.2 Clocksignaler<br />

III.2.1 Apparatur<br />

Apparat Mærke AAU-nummer<br />

Strømforsyning Delta Elektronika E 030-3 33136<br />

Oscilloskop Agilent 54624A 100MHz, 4-kanals 33843<br />

Multimeter Electronics 1502 08116<br />

PEEL-tester Ukendt Intet<br />

III.2.2 Fremgangsmåde/opstilling<br />

Måleopstillingen ses på figur III.1. Først måles udgangsclocken fra krystaloscillatoren med<br />

probe 1. Dernæst måles de tre udgangsclock’s, CLK_F1, CLK_F2 og CLK_F3, fra neddeleren<br />

lavet i en PEEL med henholdsvis probe 1, 2 og 3. Til sidst måles de tre udgangsclock’s,<br />

CLK_S1, CLK_S2, CLK_S3, fra neddeleren, bestående af en 12 bit tæller, med henholdsvis<br />

probe 1, 2 og 3.<br />

PEEL’ens tilstande er testet på en PEEL-tester.<br />

179


Testrapport III. Kvalitetsmodulet<br />

DX34<br />

DX33<br />

1N4148 1N4148 1N4148<br />

VCC<br />

DX32<br />

CX31<br />

15p<br />

RX31<br />

VCC<br />

4,096MHz X-tal3<br />

14 8 CLK<br />

GND 7 1<br />

EQUO-350C<br />

390R<br />

DX31<br />

1N4148<br />

1<br />

CLK<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

22CV10AP<br />

74HC/HCT4040<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

VCC<br />

24<br />

23<br />

22<br />

21<br />

20<br />

19<br />

18<br />

17<br />

16<br />

15 CLK_F1<br />

14 CLK_F2<br />

13 CLK_F3<br />

VCC<br />

16<br />

15 CLK_S1<br />

14 CLK_S3<br />

13<br />

12 CLK_S2<br />

11 MR<br />

10 CP<br />

9<br />

3a 2a 1a<br />

1b<br />

3b 2b<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

18CV8AP<br />

17<br />

16<br />

15<br />

14<br />

13<br />

12<br />

11<br />

VCC<br />

20<br />

19 CLK_S<br />

18 CLK_F<br />

Figur III.1: Kredsløbsdiagram for kvalitetsmodulet med målepunkter angivet. 1, 2 og 3 angiver<br />

nummeret på proben. a angiver, at der måles på clocken til antialiasing- og<br />

rekonstruktionsfilteret. b angiver, at der måles på clocken til A/D-konverteren.<br />

III.2.3 Måleresultater<br />

Resultaterne af målingerne for clocksignalet og clockneddelerne ses på figurIII.2, III.3 og III.4.<br />

PEEL’en følger testvektorerne og den virker derfor som forventet.<br />

III.2.4 Vurdering<br />

Selve clocksignalet fra oscillatoren måles til 4,1 MHz. Dette adskiller sig fra den forventede<br />

frekvens på 4,096 MHz med 0,1 %, og skyldes antallet af betydende cifre på måleudstyret.<br />

Frekvenserne fra 74HC4040 til A/D-konverteren havde de forventede værdier og deres spændingsniveauer<br />

ligger indenfor A/D-konverterens krav.<br />

Frekvenser fra PEEL’en til antialiasing- og rekonstruktionsfiltret afviger fra de forventede værdier<br />

med maksimalt 0,5 %, og spændingsniveauerne ligger ikke indenfor disses krav. Derfor<br />

indføres en 74HC4040 i serie med en 74HC4017 til at lave den ønskede clockneddeling.<br />

På figur III.5 ses målingen på udgangen på 74HC4040. Dette er de frekvenser, som angiver<br />

antialiasing- og rekonstruktionsfilterets knækfrekvenser.<br />

Frekvenserne fra 74HC4040 i serie med 74HC4017 afviger fra de forventede værdier med maksimalt<br />

0,1 %, og dette vurderes som acceptabelt. Spændingsniveauerne ligger ikke indenfor<br />

filternes krav. Dette resultat vurderes dog bedre end resultatet med PEEL’en, og denne løsning<br />

fastholdes eftersom løsningen ikke brænder filtrene af, som PEEL’en gør det.<br />

180


Probe 1, [V]<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

0 1 2 3 4 5<br />

tid, [s]<br />

6 7 8 9<br />

III.2. Clocksignaler<br />

Figur III.2: Udgangssignalet fra krystaloscillatoren. Frekvensen er målt til 4,10 MHz.<br />

Probe 1, [V]<br />

Probe 2, [V]<br />

Probe 3, [V]<br />

4<br />

2<br />

0<br />

6<br />

4<br />

2<br />

0<br />

0 1 2 3 4 5 6 7 8 9<br />

−2<br />

0 1 2 3 4 5 6 7 8 9<br />

6<br />

4<br />

2<br />

0<br />

0 1 2 3 4 5<br />

tid, [s]<br />

6 7 8 9<br />

Figur III.3: Udgangssignalerne fra PEEL’en, der neddeler frekvenserne til antialiasing- og rekonstruktionsfiltret.<br />

CLK_F1 (probe 1) er målt til 170,80 kHz, CLK_F2 (probe 2)<br />

til 342,00 kHz og CLK_F3 (probe 3) til 683,00 kHz. Spændingsniveauet varierer<br />

fra -2 V til 6,1 V.<br />

x 10 −7<br />

x 10 −6<br />

x 10 −6<br />

x 10 −6<br />

181


Testrapport III. Kvalitetsmodulet<br />

Probe 1, [V]<br />

Probe 2, [V]<br />

Probe 3, [V]<br />

4<br />

2<br />

0<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

4<br />

2<br />

0<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

4<br />

2<br />

0<br />

0 0.5 1 1.5 2 2.5<br />

tid, [s]<br />

3 3.5 4 4.5<br />

Figur III.4: Udgangssignalerne fra 12-bit tælleren, der neddeler frekvenserne til A/Dkonverteren.<br />

CLK_S1 er målt til 4,00 kHz, CLK_S2 til 8,00 kHz og CLK_S3 til<br />

16,00 kHz. Spændingsniveauet varierer fra -0,1 V til 5 V.<br />

Probe 1, [V]<br />

Probe 2, [V]<br />

Probe 3, [V]<br />

4<br />

2<br />

0<br />

4<br />

2<br />

0<br />

6<br />

4<br />

2<br />

0<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

0 0.5 1 1.5 2 2.5<br />

tid, [s]<br />

3 3.5 4 4.5<br />

Figur III.5: Udgangssignalerne fra 74HC4040, som sidder i serie med 74HC4017, der neddeler<br />

frekvenserne til antialiasing og rekonstruktionsfiltret. CLK_F1 (probe 1) er målt<br />

til 85,1 kHz, CLK_F2 (probe 2) til 171 kHz og CLK_F3 (probe 3) til 342 kHz.<br />

Spændingsniveauet varierer fra -1 V til 6 V.<br />

182<br />

x 10 −4<br />

x 10 −4<br />

x 10 −4<br />

x 10 −5<br />

x 10 −5<br />

x 10 −5


III.3 Styret switch<br />

III.3. Styret switch<br />

Test af den styrede switch foregår ved at teste PEEL’en i en PEEL-tester. Der testes om testvektorerne<br />

overholdes.<br />

III.3.1 Måleresultater<br />

Resultaterne for den styrede switch ses i tabellerne III.1,III.2 og III.3.<br />

FS W C<br />

1 X 0<br />

X 1 0<br />

0 0 1<br />

Tabel III.1: Testresultater for kontrolsignalet.<br />

C D1/D0 Q1/Q0 Q1*/Q0*<br />

0 0 0 0<br />

0 1 0 0<br />

1 1 X 1<br />

1 0 X 0<br />

Tabel III.2: Testresultater for D-latchene.<br />

Q1 Q0 CLK CLK CLK CLK CLK CLK CLK_F CLK_S<br />

_F1 _F2 _F3 _S1 _S2 _S3<br />

0 0 1 1 1 1 1 1 0 0<br />

0 0 0 1 1 0 1 1 0 0<br />

0 1 1 1 1 1 1 1 1 1<br />

0 1 0 1 1 0 1 1 0 0<br />

1 0 1 1 1 1 1 1 1 1<br />

1 0 1 0 1 1 0 1 0 0<br />

1 1 1 1 1 1 1 1 1 1<br />

1 1 1 1 0 1 1 0 0 0<br />

III.4 Integrationstest<br />

Tabel III.3: Testresultater for den styrede switch.<br />

Vha. TS2MON er det blevet testet om det kan lade sig gøre at ændre kvaliteten og dermed<br />

samplings- og filterfrekvenserne ved at skrive til FS-styring’s PEEL’en. Dette er gjort ved et<br />

chipselect, FS, af kvalitetsmodulet, et tilhørende write-signal og den ønskede kvalitet udtrykt<br />

183


Testrapport III. Kvalitetsmodulet<br />

ved D00 og D01. Ved denne test har det vist sig, at det kan lade sig gøre at ændre kvaliteten fra<br />

SW.<br />

III.5 Konklusion<br />

Det konkluderes, at kvalitetsmodulet virker efter hensigten. A/D-konverteren får de rigtige samplingsfrekvenser,<br />

og spændingsniveauerne overholdes. Filtrene modtager også de rigtige samplingsfrekvenser,<br />

og selvom spændingsniveauerne ligger lidt over de anbefalede, fungerer filtrene<br />

efter hensigten.<br />

Den styrede switch overholder testvektorerne, og integrationstesten viste, at det ved hjælp af<br />

CPU-modulet var muligt at ændre kvaliteten.<br />

184


Testrapport<br />

IV.1 Formål<br />

IV<br />

Højttalermodul<br />

Denne testrapport skal dokumentere, at højttalermodulet virker efter hensigten. Der måles på:<br />

¯ D/A-konverteren<br />

¯ Udgangsforstærkeren<br />

Der måles ikke på rekonstruktionsfilteret, da dette kobles på nøjagtig samme måde som antialiasingfilteret.<br />

Det konkluderes i testrapport II for mikrofonmodulet, at antialiasingfilteret virker,<br />

og dette antages at være bevis nok for, at rekonstruktionsfilteret også virker, da dette er identisk<br />

hermed.<br />

IV.2 D/A-konverter<br />

IV.2.1 Apparatur<br />

Apparat Mærke AAU-nummer<br />

33132<br />

Strømforsyning Delta Elektronika E030-3 33136<br />

33137<br />

Oscilloskop Agilent 54624A 33843<br />

Fungerende CPU- og kvalitetsmodul<br />

IV.2.2 Fremgangsmåde/opstilling<br />

Ved hjælp af minimumssystemet indstilles kvalitetsmodulet til den laveste kvalitet, 4 kHz samplingsfrekvens,<br />

ved at skrive 0001 til adressen 88 0000h i TS2MON. Derefter sendes følgende<br />

programkode til minimumssystemet, og denne programkode eksekveres.<br />

185


Testrapport IV. Højttalermodul<br />

1 void dactest(void){<br />

2 int i = 0;<br />

3 while(1){<br />

4 for(i = 0; i=0;i--){<br />

8 dac = i;<br />

9 }<br />

10 }<br />

11 }<br />

Programkoden har til formål at sende en kode til D/A-konverteren, der så sender et trekantsignal<br />

ud på dens udgang. "dac"er indholdet af D/A-konverterens adresse (se evt. "headerfil.h"på<br />

vedlagte cd-rom).<br />

Der måles både på udgangen af D/A-konverteren og udgangen af rekonstruktionsfilteret.<br />

IV.2.3 Måleresultater<br />

På figur IV.1 ses D/A-konverterens og rekonstruktionsfilterets udgange. Udgangen af D/Akonverteren<br />

svinger mellem 250 mV og -5,315 V, aflæst med cursor. Udgangen af rekonstruktionsfilteret<br />

svinger mellem 123 mV og -4,815 V, aflæst med cursor. Frekvensen af trekantsignalet<br />

måles til 207 Hz med cursor. Det ses, at der er mere støj på D/A-konverterens udgang end<br />

rekonstruktionsfilterets udgang. Det ses ligeledes at der er en lille faseforskydning.<br />

IV.3 Udgangsforstærker<br />

IV.3.1 Apparatur<br />

Apparat Mærke AAU-nummer<br />

33132<br />

Strømforsyning Delta Elektronika E030-3 33136<br />

33137<br />

Oscilloskop Agilent 54624A 33843<br />

Effektmodstand 4 Ω 40 W Intet<br />

IV.3.2 Fremgangsmåde/opstilling<br />

På udgangsforstærkeren måles kvaliteten af signalet. Der sendes, med en sinusgenerator, en<br />

sinusspænding ind på forstærkerens indgang. Der sættes en 4 Ω effektmodstand på forstærkerens<br />

186


Probe 1, [V]<br />

Probe 2, [V]<br />

0<br />

−1<br />

−2<br />

−3<br />

−4<br />

−5<br />

0<br />

−1<br />

−2<br />

−3<br />

−4<br />

0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018<br />

0 0.002 0.004 0.006 0.008 0.01<br />

tid, [s]<br />

0.012 0.014 0.016 0.018<br />

IV.3. Udgangsforstærker<br />

Figur IV.1: Måling på D/A-konverter og rekonstruktionsfilter, f = 207 Hz. Probe 1 er på D/Akonverterens<br />

udgang og probe 2 på rekonstruktionsfilterets udgang.<br />

udgang. Med et oscilloskop måles på ind- og udgang, når der sendes en sinusspænding med<br />

frekvens på ca. 1 kHz, et DC-offset på -2,5 V og en amplitude på ca. 2,5 V ind på indgangen.<br />

Volumen skrues helt op.<br />

1<br />

Vin<br />

Udgangsforstærker<br />

Figur IV.2: Opkobling og placering af oscilloskop-prober ved måling på udgangsforstærkeren.<br />

IV.3.3 Måleresultater<br />

På figur IV.3 ses input og output af udgangsforstærkeren. Det ses, at signalet ikke forvrænger<br />

på udgangen i forhold til indgangen. Frekvensen måles til 1,127 kHz med Quick Measure på<br />

oscilloskopet.<br />

Der måles en peak-peak-spænding på indgangen på 4,88 V og 6,00 V på udgangen ligeledes<br />

med Quick Measure.<br />

2<br />

4 Ω<br />

187


Testrapport IV. Højttalermodul<br />

Probe 1, [V]<br />

Probe 2, [V]<br />

−1<br />

−2<br />

−3<br />

−4<br />

3<br />

2<br />

1<br />

0<br />

−1<br />

−2<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

0 0.5 1 1.5 2 2.5<br />

tid, [s]<br />

3 3.5 4 4.5<br />

Figur IV.3: Måling på ind- og udgang på udgangsforstærker, probe 1 er indgangen, og probe 2<br />

er udgange.<br />

IV.4 Vurdering<br />

Det ses på udgangen af D/A-konverteren, at den konverterer lineært og at den fordeler udgangsspændingen<br />

mellem 250 mV og -5,135 V. Dette er et større område end 0 V til -5 V, men fænomenet<br />

ignoreres, da dette antages at være frekvenskomposanter, der opstår ved D/A-konvertering.<br />

Det ses, at rekonstruktionsfilteret, som forventet, dæmper en del af disse komposanter. At frekvenskomposanterne<br />

ikke forsvinder helt, kan skyldes, at programmet sender samples til D/Akonverteren<br />

med en højere frekvens, end det er tilpasset til rekonstruktionsfilteret.<br />

Ved måling på udgangsforstærkeren ses, at udgangsforstærkeren ikke forvrænger signalet. Signalets<br />

forstærkning afhænger af potentiometeret på forstærkeren. Det ses, at signalet ikke blev<br />

forvrænget ved et indgangssignal med en frekvens på 1,127 kHz og en peak-peak-spænding på<br />

4,88 V.<br />

IV.5 Konklusion<br />

Ud fra test på D/A-konverteren kan det konkluderes, at denne fungerer efter hensigten. Det<br />

accepteres, at konverteren i yderområderne har en udgangsspænding, der går ud over 0 V til -5<br />

V, da det antages, at der kommer støj fra konverteren. Det kan ligeledes konkluderes at filtret<br />

virker efter hensigten.<br />

Testen viser også, at udgangsforstærkeren fungerer efter hensigten, da signalet ikke forvrænges.<br />

188<br />

x 10 −3<br />

x 10 −3


Testrapport<br />

V.1 Formål<br />

V<br />

Knapmodul<br />

Formålet med denne testrapport er at vise, at knapmodulet virker efter hensigten. Dvs. at hvis<br />

der trykkes på en knap, sender modulet et interrupt til CPU-modulet og gemmer værdien af<br />

knaptrykket i overensstemmelse med den valgte grænseflade til softwaren (omtalt i afsnit5.4).<br />

Desuden skal det eftervises, at modulets udgange til databussen er højimpedante, når modulet<br />

ikke er chipselected.<br />

V.2 Test af PEEL’s<br />

V.2.1 Apparatur<br />

V.2.2 Fremgangsmåde/opstilling<br />

Testvektorerne testes i en PEEL-tester.<br />

V.2.3 Måleresultater<br />

Apparat Mærke AAU-nummer<br />

PEEL-tester Ukendt Intet<br />

PEEL med encoder blev testet uden fejl, og alle testvektorer blev opfyldt. Testen af PEEL’en<br />

med interruptstyring og Knap_status viste fejl. Testvektorerne fra 2-10 gav ikke det ønskede<br />

resultat. PEEL’en vil ikke skifte til tilstand S1, når KNAP var lig 1.<br />

For at rette denne fejl blev der lavet en ny ABEL-kode. Med den éne ændring, at KNAP skulle<br />

være lig 11, i stedet for 1, for at skifte til S1. Denne ABEL-kode findes på den vedlagte cd-rom<br />

som "kstyr2.abl". Koden er simuleret med testvektor og disse gik igennem. Den er ligeledes<br />

testet med succes i en PEEL-tester.<br />

189


Testrapport V. Knapmodul<br />

V.2.4 Vurdering<br />

Denne ændring betyder dog at en af knapperne skal have værdien 11. Dette er lavet om i encoderen,<br />

så OPTAG-knappen har værdien 11 i stedet for 1. Den nye ABEL-kode ses på den vedlagte<br />

cd-rom, som “encoder2.abl”. I de følgende tests blev de nye ABEL-koder anvendt.<br />

V.3 Højimpedante udgange<br />

V.3.1 Apparatur<br />

V.3.2 Fremgangsmåde/opstilling<br />

Apparat Mærke AAU-nummer<br />

Oscilloskop Agilent 54621A 33860<br />

PEEL-tester Ukendt Intet<br />

For at undersøge om udgangene er højimpedante, når der ikke er chipselect, udføres følgende<br />

test: Når der ikke er chipselect, skal udgangene "svæve". Det kan undersøges, om en udgang<br />

svæver vha. en simpel opstilling, som er vist på figurV.1. En person berører oscilloskopets probe<br />

gennem en modstand, og tilfører derved proben støj. Med proben berøres udgangen, og svæver<br />

denne, kan man se dette støj på oscilloskopet. Hvis udgangen derimod ikke er højimpedant, ses<br />

værdien af udgangssignalet på oscilloskopet, altså 0 V eller 5 V. Alle databen testes på denne<br />

måde. Indgangssignalet KS skiftes med kontakten. Dette vil resultere i en ændring på udgangen.<br />

Der tages et oscilloskopbillede for at dokumentere rigtigheden.<br />

5V<br />

DUT<br />

Støj fra person<br />

D0-D3<br />

Figur V.1: Testopstilling til måling af svævende udgange. Støj fra person tilføres ved at holde<br />

en finger på modstanden.<br />

V.3.3 Måleresultater<br />

Resultatet af højimpedanstesten se på figur V.2. Det ses tydeligt, at udgangen svæver, når KS er<br />

negeret, derfor er udgangene højimpedante.<br />

190<br />

10k<br />

1


Probe 1, [V]<br />

Probe 2, [V]<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

−1<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5<br />

6<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

−1<br />

0 0.5 1 1.5 2 2.5<br />

tid, [s]<br />

3 3.5 4 4.5 5<br />

V.4. Integrationstest<br />

Figur V.2: Resultat af højimpedanstesten. Probe 1 er udgangen D0 og probe 2 er indgangen KS.<br />

V.4 Integrationstest<br />

V.4.1 Apparatur<br />

Apparat Mærke AAU-nummer<br />

Logikanalysator Agilent 54621D 33842<br />

Forsyning Hameg 33884<br />

Fungerende minimumsystem<br />

V.4.2 Fremgangsmåde/opstilling<br />

Denne test udføres for at teste om CPU-modulet kan modtage værdierne af et knaptryk. CPUmodulet<br />

forbindes via RS232C-forbindelsen. På pc’en startes en terminal. Der kan nu kommunikeres<br />

med TS2MON. CPU’en er nu i supervisormode og interruptniveauet i statusregisteret er<br />

sat til 7. For at den skal kunne modtage interrupt 3, skal niveauet sættes ned. Dette gøres med<br />

kommandoen:<br />

#REG SR 2200 (Sætter interrupt level til 2)<br />

For at teste om der bliver udført en interruptrutine, loades der to programmer ned i hukommelsen.<br />

Det ene program, "hello.X68" loades ned på adresse 4 1000h og kører i en uendelig løkke,<br />

hvor den skriver "hello world!!" ud på skærmen. Det andet program, "knap.X68" loades ned på<br />

adresse 4 5000h og skal eksekveres, når der kommer et niveau 3 interrupt. Programmet afsluttes<br />

med kommandoen "RTE" (Return from exception). Programmet skriver én noget længere<br />

sætning ud på skærmen. Derved kan det ses, om der sker en ændring efter et knaptryk. For at<br />

programmet skal blive kaldt, skal der være en "JUMP" kommando fra niveau 3 interrupt autovektoren.<br />

Niveau 3 interrupt autovektoren har vektor nummer 27 [KM684000B, Table B-1].<br />

191


Testrapport V. Knapmodul<br />

Ifølge TS2MON ligger en vektor på følgende adresse: vektor = vektornummer ¡ 8 bytes + 4<br />

0000h [TS2MON, 2002, s. 24]. Dermed er adressen på niveau 3 interrupt autovektoren lig med<br />

4 00D8h. På denne adresse skal der ligge en instruktion om at hoppe til adresse 4 5000h, som er<br />

startadressen på interruptrutinen. Dette skrives på følgende måde i terminalvinduet:<br />

#MEM 400D8 [SPACE] 4EF9 (JUMP instruktion)<br />

#MEM 400DA [SPACE] 0004 (Den øvre del af adresse til interrupt routinen)<br />

#MEM 400DC [SPACE] 5000 (Det nedre del af adresse til interrupt routinen)<br />

Ved at trykke på en bestemt knap skal der være en bestemt værdi på den adresse i adressedekodningstabellen,<br />

som knapmodulet ligger på. Adressen på knapmodulet er 90 0001h. Med<br />

TS2MON kan der kun aflæses lige adresser (word-niveau). Derfor skal 90 0000h aflæses.<br />

Testen fortsættes herefter ved at udføre følgende algoritme:<br />

1. Skriv GO 41000 i terminal (starter programmet hello)<br />

2. Tryk på en knap<br />

3. Kontroller at rutine eksekveres<br />

4. Tryk på NMI-knappen<br />

5. Skriv MEM 90 0000 i terminalen (adressen på knapmodulet)<br />

6. Aflæs værdien af adressen<br />

7. Gå til punkt 1, indtil alle knapper er blevet påvirket.<br />

Ud over ovennævnte procedure måles der også på encoderens udgange, K0-K3, IRQ3, både på<br />

udgangen af Interruptstyring og indgangen af IRQ-encoderen, IACK3, både på indgangen af<br />

Interruptstyring og udgangen af IACK-decoderen, KS og interruptniveau-benene på CPU’en.<br />

På den måde kan det kontrolleres, om der kun sendes ét interrupt pr. knaptryk.<br />

V.4.3 Måleresultater<br />

Ved alle knaptryk blev interruptrutinen udført. De forventede værdier og de aflæste værdier af<br />

knaptrykkene kan ses i tabel V.1. X’erne i tabellen angiver "don’t cares". Disse har ingen specielle<br />

værdier, fordi databussens ben ,D04-D15, svæver. Tabellen viser, at der er overensstemmelse<br />

mellem de målte resultater og de forventede.<br />

Målingerne på K0-K3, IRQ3, IACK3, KS og IPL0-IPL2 er vist på figur V.3. Det ses tydeligt, at<br />

der ved tryk på en knap, i det her tilfælde afspil, som har værdien 3, kommer en del støj på både<br />

de aktive og de inaktive udgange på encoderen. Efter modtagelse af et IACK3 og KS negeres<br />

IRQ3, men støjen gør IRQ3 aktiv igen, og et nyt knaptryk behandles. Dette resultat er derfor<br />

ikke tilfredsstillende, og en anden encoder må findes.<br />

Den nye encoder blev beskrevet i kapitel 14. Denne nye encoder er blevet testet på tilsvarende<br />

vis, og denne opfylder det stillede krav; ingen støj på udgangene, dvs. et knaptryk opfattes som<br />

ét knaptryk.<br />

192


Knap Forventet Modtaget<br />

Optag XXXBh XXXBh<br />

Stop XXX2h XXX2h<br />

Afspil XXX3h XXX3h<br />

Pause XXX4h XXX4h<br />

Næste XXX5h XXX5h<br />

Forrige XXX6h XXX6h<br />

Spol frem XXX7h XXX7h<br />

Spol tilbage XXX8h XXX8h<br />

Slet XXX9h XXX9h<br />

Reset XXXAh XXXAh<br />

V.4. Integrationstest<br />

Tabel V.1: Knaptryk, forventet aflæst værdi og modtaget værdi. X’erne angiver "don’t cares".<br />

Figur V.3: Måling på antal interrupts pr. knaptryk. Der er trykket på afspil. D0-D3 er K0-K3,<br />

D4 er IRQ3 på Interruptstyring, D5 er IACK3 på Interruptstyring, D6 er IRQ3 på<br />

IRQ-encoderen, D7 er KS, D8 er IACK3 på IACK-decoderen og D9-D11 er IPL0-<br />

IPL2.<br />

193


Testrapport V. Knapmodul<br />

V.5 Konklusion<br />

Det må konkluderes, at knapmodulet ikke lever op til funktionskravene. Grunden til dette er at et<br />

tryk på 01 resulterer i værdien 11 i stedet for 1. Dette kan skyldes at ABEL-koden reduceres inden<br />

den brændes ned i PEEL’en. Denne ændring må der tages højde for i software. Ud over dette<br />

virker modulet, efter indsættelse af en anden encoder, efter hensigten. Det er vist, at udgangene<br />

er højimpedante, når modulet ikke er chipselected. Integrationstesten viser, at kommunikationen<br />

med CPU-modulet virker.<br />

194


Testrapport<br />

VI.1 Formål<br />

VI<br />

Integration<br />

af hardware<br />

Formålet med denne testrapport er at eftervise, at de enkelte moduler, der fungerer hver for sig,<br />

også kan interagere korrekt med hinanden. Ved denne test bliver følgende testet:<br />

CPU-modul: Styrer kommunikation mellem de perifere enheder.<br />

Hukommelsesmodul: Ved at sende data til hukommelse og derefter eksekveres.<br />

Kvalitetsmodul: Dette modul sender signal om, hvornår konverteringen skal forgå. Frekvensen<br />

af dette signal sættes op før programmet startes.<br />

Mikrofonmodul: Modtager signalet og sender det via D/A-konverteren til CPU-modulet.<br />

Høttalermodulet: Modtager signalet fra CPU-modulet, og konverterer dette og, derefter, vil<br />

signalet blive rekonstrueret i rekonstruktionsfilteret og sendt ud gennem højttaleren<br />

VI.2 Apparatur<br />

Apparat Mærke AAU-nummer<br />

Oscillator RC-oscillator TG7 08494<br />

Oscilloskop Agilliant 4CH 33843<br />

Forsyning Hameg 33884<br />

VI.3 Fremgangsmåde/opstilling<br />

For at kunne kontrollere om hardwaren virker, testes modulerne, når disse samles, ved hjælp af<br />

et lille C-program. Dette program hedder "adctest.c"og findes på cd-rom.<br />

195


Testrapport VI. Integration af hardware<br />

Når der modtages et interrupt fra A/D-konverteren, læses disse lyddata, og de sendes direkte ud<br />

på D/A-konverteren og bliver til lyd i højttaleren. Når interruptrutinen er færdig, laver processoren<br />

ingenting dvs. den står i en while-løkke, der ikke laver noget.<br />

Programmet loades ned i RAM i hukommelsesmodulet ved hjælp af TS2MON. Før programmet<br />

startes, sættes den ønskede kvalitet, og statusregisteret ændres, således at IRQ4 kan modtages.<br />

Derefter startes programmet.<br />

Hardwaremæssigt er proberne forbundet som vist på figur VI.1. Der måles på inputsignalet,<br />

og signalet før og efter rekonstruktionsfilteret. Der sendes et sinussignal på 220 mVpp med en<br />

frekvens på 1 kHz, ind på mikrofonforstærkeren ved hjælp af oscillatoren.<br />

1<br />

MF<br />

Mikronfonmodul<br />

HP-filter AA-filter ADC<br />

DAC<br />

R-filter<br />

2<br />

Højttalermodul<br />

Figur VI.1: Hardwarens opkobling i integrationstesten. Adskillelsen mellem de to moduler<br />

symboliserer, at der ikke er direkte forbindelse, men at det er CPU-modulet, der<br />

sørger for læsningen på A/D-konverteren og skrivningen til D/A-konverteren.<br />

VI.4 Måleresultater<br />

Målingen for integrationstesten er vist på figurVI.2. Ved målingen blev oscilloskobets averagefunktion<br />

anvendt.<br />

Probe 1, [V]<br />

0.05<br />

0<br />

−0.05<br />

Probe 2, [V]<br />

Probe 3, [V]<br />

1<br />

0<br />

−1<br />

1<br />

0<br />

−1<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

x 10 −3<br />

x 10 −3<br />

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />

x 10 −3<br />

tid, [s]<br />

Figur VI.2: Måling i integrationstest. Probe 1 er indgangssignalet før mikronfonforstærkeren,<br />

probe 2 er indgangssignalet til rekonstruktionsfiltetret og probe 3 er udgangssignalet<br />

fra rekonstruktionsfilteret.<br />

196<br />

3


VI.5 Vurdering<br />

VI.5. Vurdering<br />

På figur VI.2 ses, hvordan inputsignalet kommer ind i mikrofonforstærkeren. Det ses, at signalet<br />

fra D/A-konverteren følger indgangsignalet, det er dog trappeformet, da der er et begrænset antal<br />

værdier (256). Det ses at signalet efter rekonstruktionsfilteret er blevet udglattet og signalet er<br />

dermed genskabt, uden synlig forvrængning.<br />

Det ses også på figur VI.2, at udgangssignalet er forsinket i forhold til indgangssignalet. Dette<br />

skyldes, at signalet skal læses og skrives samtidig med en fasedrejning i forstærkeren, og dette<br />

tager tid.<br />

VI.6 Konklusion<br />

Ud fra integrationstesten kan det konkluderes at CPU-, hukommelses-, kvalitets-, mikrofon- og<br />

højttalermodulerne fungerer tilfredstillende. Indgangsignalet bliver ligeledes konveretet til et<br />

digitalt signal, og derefter konvertet tilbage igen til analogt signal og rekonstrueret.<br />

197


Testrapport<br />

VII.1 Formål<br />

VII<br />

Pc-software<br />

Formålet med denne test er at eftervise, at pc-softwaren fungerer efter kommunikationsprotokollen<br />

i appendiks G. Det skal også vises, at der kan gemmes en wave-fil til hver af de indtalte<br />

beskeder, på det specificerede sted.<br />

VII.2 Apparatur<br />

¯ Pc med Linux, hvor pcprogrammet kan køres på.<br />

¯ Pc med Linux, hvor programmet "testpcsw" kører på.<br />

¯ 0-modem kabel.<br />

VII.3 Fremgangsmåde/opstilling<br />

Hardwaremæssigt er de 2 pc’ers COM1-porte forbundet med 0-modem kablet. Testen udføres<br />

grundlæggende ved at følge transaktionflowdiagrammet for kommunikationen mellem pc og<br />

diktafon på figur 3.10. Dette gøres ved hjælp af testprogrammet, hvor det er muligt at ændre<br />

på de svar, som diktafonen skal komme med, for derved at teste om pc-sofwaren kan overholde<br />

protokollen og dermed også kravspecikationen.<br />

Det er i testen muligt at specificere følgende på den simulerede "diktafon":<br />

198<br />

¯ Tilstand<br />

¯ Antal lagerede beskeder.<br />

¯ Kvaliteten (af de indtalte beskeder)<br />

¯ Længden af en besked<br />

¯ Beskederne er slettet.<br />

¯ Kvaliteteten er indstillet


VII.4 Resultater<br />

VII.4. Resultater<br />

Resultaterne af de forskellige tests er at pc-softwaren fungerer på den ønskede måde dvs. at<br />

transaktionflowdiagrammet op kommunikationsprotokollen er overholdt. Der bliver desuden<br />

gemt læsbare wave-filer de ønskede steder.<br />

VII.5 Konklusion<br />

Det kan konkluderes, at pc-sofwaren fungerer efter kravspecifikation, og protokollen.<br />

199


AA Antialiasing-filter (index på komponenter)<br />

Ordliste<br />

ABEL Advanced Boolean Equation Language, program til programmering af<br />

programmerbare logiske enheder.<br />

AC Komponenter på ACIA-kredsløbet (index på komponenter)<br />

ACIA Asynchronous Communication Interface Adapter<br />

A/D-konverter Analog til Digital konverter<br />

Assembler Lavniveau Programmeringssprog<br />

Baudrate Hastighed hvormed data sendes gennem den serielle port. Opgives i bits<br />

per second (bps)<br />

C Programmeringsproget C<br />

CLK Clock eller clocksignal<br />

COM-port Dette er computerens serielle kommunikationsport<br />

CS Chip Select<br />

D/A-konverter Digital til Analog konverter<br />

Forbillede Et apparat som med fordel kan efterlignes<br />

FS Frekvens styring (index på komponenter)<br />

Hardwaremodul Et antal komponenter, som udgør en funktionel enhed<br />

HF Højttalerforstærker (index på komponenter)<br />

Host Den maskine hvorpå softwaren er skrevet, men ikke der hvor det skal<br />

køre<br />

HP Højpas filter (index på komponenter)<br />

201


Ordliste<br />

HW Hardware<br />

IACK Interrupt Acknowledge<br />

Integritet Produktets evne til at beskytte sine data [Biering-Sørensen m. fl., 1996,<br />

side 93]<br />

IRQ Interrupt Request<br />

Kobling Graden af krydsrefencer. Dette kan betyde, at overførsel af data mellem<br />

forskellige moduler er stor. [Biering-Sørensen m. fl., 1996, side 143-<br />

144]<br />

Metafor Et udtryk som beskriver noget med ord, der ellers anvendes om noget<br />

andet.<br />

Mikrocomputersystem<br />

Et computersystem der specielt tilpasset til et specifikt formål<br />

MF Mikronfonforstærker (index på komponenter)<br />

Minimumssystem Er et system bestående af et absolut minimum antal af komponenter til<br />

kommunikation mellem pc og diktafon. Systemet består af: mikroprocessor,<br />

RAM, ROM, ACIA, RS-232-driver, adressedekoder, reset/halt<br />

og tilhørende opsætningskomponenter<br />

MMV Monostabil multivibrator<br />

NMI Non Maskable Interrupt<br />

Pc Personlig Computer<br />

PEEL Programmable Electrically Erasable Logic<br />

Proces En proces beskriver forhold ved en situation, som er dynamiske<br />

RAM Random Access Memmory<br />

RH Reset/Halt (index på komponenter)<br />

ROM Read Only Memmory<br />

RS232C Seriel kommunikationsstandard udviklet af EIA (Electronics Industries<br />

Association)<br />

202


RS232C-niveau Input: -3 V til -25 V for logisk 1 og 3 V til 25 V for logisk 0<br />

R/ W Read / Write<br />

Ordliste<br />

Output: -5 V til -15 V for logisk "1"og 5 V til 15 V for logisk<br />

"0"[Ståbi, 1995, side 487]<br />

SPU Struktureret Program Udvikling<br />

Struktur En struktur beskriver forhold ved en situation, som er statiske<br />

System Diktafonen med udviklet hardware og software<br />

SW Software<br />

TTL Transistor-Transistor Logik.<br />

TTL-niveau 2-5 V for logisk "1"og 0-0,8 V for logisk "0".<br />

TS2MON MC68000 debugger/monitor - modificeret af Sofus Birkedal Nielsen<br />

Tæthed Hvor tæt funktioner i et modul er relaterede<br />

[Biering-Sørensen m. fl., 1996, side 143-144].<br />

Virtuel knap En knap, som kun eksisterer rent virtuelt på pc’en. For at påvirke knappen<br />

skal man f.eks. trykke på et tal eller et bogstav på tastaturet<br />

X1 Masterclock: 8 MHz krystaloscillator (index på komponenter)<br />

X2 Baudrate-generator: 1,8423 MHz krystaloscillator (index på komponenter)<br />

X3 Kvalitetsmodul:4,096 MHz krystaloscillator (index på komponenter)<br />

203


Del<br />

Komponentliste VII og diagrammer<br />

205


Komponent<br />

placering<br />

Placeringstegning for CPU-, hukommelses-, og RS232-modul.<br />

ROM2 ROM1<br />

RAM3<br />

RAM4<br />

Stik fra display og knapper<br />

RAM1<br />

RAM2<br />

GND<br />

X-tal1<br />

+5V<br />

IRQ-encoder<br />

FC-decoder<br />

X-tal2<br />

Processor<br />

ADR-DEC-MEM IACK-decoder<br />

ACIA2<br />

ADR-DEC-PERIF<br />

ACIA1<br />

VPA-gen<br />

DTACK-gen<br />

SW_NMI<br />

P1 og P2 SW_RH<br />

RS232DRIVER<br />

Stik til analog<br />

RH<br />

207


Komponent placering<br />

Placeringstegning for kvalites-, mikrofon- og højttalermodul.<br />

X-tal3<br />

FS-filter<br />

FS-sample<br />

FS-stryring<br />

ADC-IRQ<br />

+5V<br />

GND<br />

DAC<br />

DAC_B<br />

ADC<br />

AA-filter<br />

Stik fra<br />

analog<br />

ADC_2<br />

R-filter<br />

Digital<br />

Forsyning<br />

Placeringstegning for display- og knapmodul.<br />

208<br />

01<br />

01<br />

DISPLAY<br />

Stik fra display og knapper<br />

Knap-styring<br />

+5V regulator<br />

-5V regulator<br />

HF<br />

R<br />

HP_A<br />

HP_B<br />

MF_B<br />

Knap-encoder<br />

ADC_A<br />

+15V<br />

GND<br />

-15V


Komponentliste<br />

Komponentlisten er delt op i moduler, således at komponenter er skrevet i de tilhørende moduler.<br />

CPU-modul<br />

CPU-modulet består primært af integrede kredse, disse er her oplistet, det følgende er andre<br />

hjælpekredsløb, der er nødvendige.<br />

Komponentnavn Værdi Kommentar<br />

Processor MC68HC000 Mikroprocessor<br />

ADR-DEC-MEM 18CV8-10 PEEL: Adressedekoder til ROM/RAM<br />

ADR-DEC-PERIF 22CV10A PEEL: Adressedekoder til perifere enheder<br />

FC-decoder 74LS138 Funktion decoder<br />

IACK-decoder 74LS138<br />

IRQ-Encoder 74LS148<br />

RIRQ 10 kΩ modstandsrække<br />

ACIA1 1 M68850<br />

Pull-up modstande<br />

P1 DB9-connector Stik til TS2MON via RS232-forbindelse<br />

DTACK-gen 22CV10A PEEL: DTACK-generator og NMI-styring<br />

RNMI 100 kΩ Pull-up modstand<br />

CNMI 100 nF For prel<br />

SWNMI<br />

NMI-knap<br />

VPA-gen 18CV8-10 PEEL: VPA-generator<br />

RRW 10k Ω Pull-up modstand<br />

1De resterende komponenter til seriel kommuniktaion er beskrevet i RS232-modulet da det er den samme RS232driver<br />

der anvendes<br />

209


Komponent placering<br />

Clock<br />

Komponentnavn Værdi Kommentar<br />

Xtal1 8,000 MHz Krystaloscilator<br />

RX11<br />

DX11-DX14<br />

CX11<br />

Reset/halt kredsløb<br />

390 Ω<br />

1n4148<br />

15 pF<br />

Komponentnavn Værdi Kommentar<br />

TL7705A TL7705A Spændingskontrollator<br />

RRH1 10 kΩ Pull-down modstand<br />

RRH2-RRH5 10 kΩ Pull-up modstande<br />

RRH6 300 Ω Formodstand til DRH3<br />

CRH1 100 nF Afkoblingskondensator<br />

CRHT 100 µF Bestemmer reset-sekvensens længde<br />

DRH1-DRH2 BAT 85 Schottky-diode<br />

DRH3<br />

3mmLED<br />

QRH BC 547B LED-driver<br />

SWRH<br />

Hukommelsesmodul<br />

RESET-knap<br />

Komponentnavn Værdi Kommentar<br />

ROM1-ROM2 AM29101F EPROM<br />

RAM1-RAM4 KM684000 Statisk RAM<br />

210


RS232-modul<br />

Clock<br />

Komponentnavn Værdi Kommentar<br />

Xtal2 COC/T-50 1,8423 MHz krystal<br />

RX21<br />

DX21-DX24<br />

CX21<br />

ACIA og RS232-driver<br />

390 Ω<br />

1n4148<br />

15 pF<br />

Komponentnavn Værdi Kommentar<br />

ACIA2 M6850<br />

RS232DRIVER MAX232 Driver til RS232 niveau<br />

CAC1-CAC5 100 nF Kondensatorer til RS232-driver<br />

P2 DB9-connector Stik til COM-forbindelse<br />

Knapmodul<br />

Komponentnavn Værdi Kommentar<br />

10 Knapper<br />

Knap-Encoder MM74C922N Encoder og prelfjerner<br />

CK1<br />

CK2<br />

1 µF<br />

1 µF<br />

Kstyr 22CV10-10 Styring til knapper<br />

Displaymodul<br />

Komponentnavn Værdi Kommentar<br />

DISPLAY Pc1604-A 4 linier gange 16 karakters display<br />

RDISP 10 kΩ Potentiometer<br />

Komponent placering<br />

211


Komponent placering<br />

Kvalitetsmodul<br />

Clock<br />

Komponentnavn Værdi Kommentar<br />

X-TAL3 4,096 MHz Krystaloscilator<br />

RX31<br />

DX31-DX34<br />

CX31<br />

Frekvensstyring<br />

390 Ω<br />

1n4148<br />

15 pF<br />

Komponentnavn Værdi Kommentar<br />

FS-sample 74HC4040 12 bit binær tæller<br />

FS-filter1 74HC4017 3 deler<br />

FS-filter2 74HC4040 12 bit binær tæller<br />

FS-styring 18CV8-10 PEEL: Latch og styret switch<br />

Mikrofonmodul<br />

Mikrofonforstærker<br />

Komponentnavn Værdi Kommentar<br />

Mikrofon WM-034B<br />

CMF1<br />

470nF<br />

MFB TLE2072 Operationsforstærker<br />

RMF1<br />

RMF2<br />

RMF2A<br />

RMF3<br />

212<br />

2,2 kΩ<br />

23,2 kΩ<br />

4,7 kΩ potmeter<br />

476 kΩ


Højpas filter<br />

Komponentnavn Værdi Kommentar<br />

HPA TLE2072 Operationsforstærker<br />

CHP1<br />

CHP2<br />

RHP1<br />

RHP2<br />

47 nF<br />

47 nF<br />

18,7 kΩ<br />

6,65 kΩ<br />

HPB TLE2072 Operationsforstærker<br />

CHP3<br />

CHP4<br />

RHP3<br />

RHP4<br />

Anti-aliasing filter<br />

47 nF<br />

47 nF<br />

18,7 kΩ<br />

6,65 kΩ<br />

Komponentnavn Værdi Kommentar<br />

AA-filter MAX297 Antialiasing filter<br />

RAA 499 kΩ Pull-down modstand<br />

DAA1-DAA2 BAT85 Beskyttelsesdioder<br />

Komponent placering<br />

213


Komponent placering<br />

A/D-konverter kredsløb<br />

Komponentnavn Værdi Kommentar<br />

ADC1A TLE2072 Operationsforstærker<br />

RADC1 -RADC5<br />

10k Ω<br />

DADC1-DADC1 BAT85 Beskyttelsesdioder<br />

ADC2 TLC2201 Rail to rail operationsforstærker<br />

ADC-IRQ 18CV8-10 PEEL: Til styring af interrupt, og MMV<br />

ADC ADC0820 Analog til digital konverter<br />

Højttalermodul<br />

D/A-konverter kredsløb<br />

Komponentnavn Værdi Kommentar<br />

DAC AD7524 Digital til analog konverter<br />

DACB TLE2072 Operationsforstærker<br />

Rekonstruktionsfilter<br />

Komponentnavn Værdi Kommentar<br />

R-filter MAX297 Rekonstruktions filter<br />

DRF1-DRF2 BAT85 Beskyttelsesdioder<br />

RRF 499 kΩ Pull-down modstand<br />

CRF<br />

214<br />

100 nF


Højttalerforstærker<br />

Komponentnavn Værdi Kommentar<br />

LM380 LM380 Effektforstærker<br />

RHF1<br />

CHF3<br />

RHF2<br />

2,7 Ω<br />

100 nF<br />

158 kΩ<br />

RHF3 0-10 kΩ Potentiometer<br />

CHF1<br />

CHF2<br />

CHF4<br />

CHF5<br />

470 µF<br />

6,8 µF<br />

33 pF<br />

100 nF<br />

Højttaler Ingen data på denne<br />

Spændings regulatorer<br />

Komponentnavn Værdi Kommentar<br />

5 V regulator LM7805<br />

D 5V<br />

R 5V<br />

3 mm LED<br />

390 Ω<br />

-5 V regulator LM7905<br />

D 5V<br />

R 5V<br />

3 mm LED<br />

390 Ω<br />

Komponent placering<br />

215

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!