16.07.2013 Views

Projekt

Projekt

Projekt

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!