Projekt
Projekt
Projekt
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Aalborg Universitet<br />
Institut for Elektroniske Systemer <br />
Fredrik Bajers Vej 7 DK-9220 Aalborg Øst Telefon +45 96 35 87 00<br />
Titel: Digital diktafon<br />
Tema: Mikrodatamatsystemer<br />
<strong>Projekt</strong>periode: 3. februar 2003 - 28. maj 2003<br />
<strong>Projekt</strong>gruppe:<br />
421<br />
Gruppemedlemmer:<br />
Andreas Popp<br />
Esben Theill Christiansen<br />
Michael Smed Kristensen<br />
Michael P. Nielsen<br />
Steffen Holst<br />
Svend Aage Vedstesen<br />
Vejleder:<br />
Morten V. Fjordback<br />
Publikationer: 9<br />
Sider i<br />
Hovedrapport: 128<br />
Appendiks: 86<br />
Afsluttet: 28. maj 2003<br />
Synopsis<br />
Denne rapport indeholder dokumentation for udvikling<br />
og design af en digital diktafon baseret på en<br />
Motorola 68000 processor. Udviklingen af diktafonen<br />
er foregået efter Strukturet Program Udviklingmetoden.<br />
Diktafonen er en prototype og det er muligt at optage<br />
talebeskeder i 3 forskellige kvaliteter med øvre<br />
knækfrekvenser på henholdsvis 1,7 kHz, 3,4 kHz og<br />
6,8 kHz. Beskederne gemmes i diktafonens interne<br />
hukommelse. Beskederne kan efterfølgende afspilles<br />
på diktafonen. Diktafonen giver bl.a. mulighed for<br />
at slette og spole i beskederne samt at pause under<br />
optagelse og afspilning. På diktafonens display findes<br />
der information om tid i besked, beskednr., resttid<br />
i hukommelse mm. Systemet giver mulighed for,<br />
at overføre indtalte beskeder til en pc vha. kommunikation<br />
baseret på RS232C-standarden. Beskederne<br />
hentes og konverteres til filformatet "wave". Efter<br />
overførslen af beskederne slettes disse på diktafonen,<br />
hvorefter der er mulighed for at indstille diktafonens<br />
optagekvalitet til senere brug.<br />
Det kan konkluderes, at diktafonen virker i den laveste<br />
kvalitet og ikke som ønsket, også i de højere kvaliteter.<br />
Dette kan bl.a. skyldes, at interruptrutinen er for<br />
længe om at udføre de ønskede funktioner.
Aalborg University<br />
Institute of Electronic Systems <br />
Fredrik Bajers Vej 7 DK-9220 Aalborg East Telephone +45 96 35 87 00<br />
Title: Digital dictating machine<br />
Theme: Microcomputersystems<br />
Project period: Febuary 3rd 2003 - May 28th 2003<br />
Project group:<br />
421<br />
Group members:<br />
Andreas Popp<br />
Esben Theill Christiansen<br />
Michael Smed Kristensen<br />
Michael P. Nielsen<br />
Steffen Holst<br />
Svend Aage Vedstesen<br />
Supervisor:<br />
Morten V. Fjordback<br />
Publications: 9<br />
Pages in<br />
Main report: 128<br />
Appendix: 86<br />
Finished: May 28th 2003<br />
Abstract<br />
This report contains documentation for development and<br />
design of a digital dictating machine (DM) based on a<br />
Motorola 68000 processor. The development of the DM<br />
is based on the "Struktureret Program Udvikling" method.<br />
The DM is a prototype and it is possible to record messages<br />
in three different qualities, with upper cut-off frequencies<br />
at either 1.7 kHz, 3.4 kHz or 6.8 kHz. The messages<br />
are saved on the DM’s internal memory. It is then possible<br />
to play the messages on the device. The DM also<br />
provides opportunities such as deleting, fast forwarding<br />
and rewinding. It is also possible to pause the recording<br />
or playing of a message. On the display it is possible to<br />
get information about actual time in message, message<br />
number, remaining time in memory etc. The system makes<br />
it possible to transfer recorded messages to a PC via a<br />
communication protocol based on the RS232C standard.<br />
The messages are then converted to the "wave" file format.<br />
After a successful transfer of the messages they are<br />
deleted from the DM and it is then possible to change the<br />
sound quality in which the messages are recorded on the<br />
DM.<br />
The DM only works in the lowest quality and not as intended<br />
in the higher sound qualities. The reason why the<br />
dictating machine does not work as intended could be that<br />
the interrupt routine takes too long to execute the code.
Forord<br />
Denne projektrapport er udarbejdet af gruppe 421 på Institut for Elektroniske Systemer ved<br />
Aalborg Universitet. Den er skrevet som dokumentation for det udførte arbejde på 4. semester.<br />
Rapporten omhandler analyse, design, konstruktion og test af en digital diktafon opbygget<br />
omkring et mikrodatamatsystem. Rapporten er bygget op omkring Struktureret Program Udvikling,<br />
og der er forsøgt at bevare denne struktur gennem hele rapporten. Rapporten henvender sig<br />
primært til vejleder samt medstuderende og andre med interesse for mikrodatamatsystemer.<br />
Rapporten starter med en problemanalyse, som munder ud i en kravspecifikation og en accepttest.<br />
Denne anvendes til at designe både hardware og software til den digitale diktafon. Efter<br />
hovedrapporten følger appendiks, testrapporter og til sidst komponentliste, placeringstegning<br />
og diagrammer.<br />
Aalborg d. 28. maj 2003<br />
———————————— ————————————<br />
Andreas Popp Esben Theill Christiansen<br />
———————————— ————————————<br />
Michael Smed Kristensen Michael P. Nielsen<br />
———————————— ————————————<br />
Steffen Holst Svend Aage Vedstesen<br />
i
Forord<br />
Læsevejledning<br />
Det er tilstræbt at overholde ISO1000-standarden med hensyn til angivelse af elektriske symboler,<br />
enheder mm. Desuden gælder følgende:<br />
Tabel-, figur- og formelhenvisninger er skrevet som kapitel.nummer, hvornummer er et fortløbende<br />
nummer, for henholdsvis tabeller, figurer og ligninger i det pågældende kapitel.<br />
Kildehenvisninger er skrevet i firkantede parenteser med et indeks og årstal, samt eventuelt en<br />
sidehenvisning. Yderligere oplysninger om en kilde kan findes i litteraturlisten på side123, hvor<br />
kilderne er listet i alfabetisk rækkefølge efter forfatterens efternavn.<br />
Ordforklaringer ses i ordlisten på side 201. Første gang et ord fra listen nævnes, er dette indikeret<br />
ved at ordet er understreget, f.eks. ABEL.<br />
Benyttede datablade er findes som pdf-filer på den vedlagte cd-rom.<br />
Program Kode er, hvad enten det er C-, Assembler- eller ABEL-kode, vedlagt på cd-rom.<br />
Tilstandsmaskiner: "*"anvendes til at angive den næste tilstand i en tilstandsmaskine.<br />
Diagrammer ses bagerst i rapporten under Komponentliste og diagrammer. Hvis der henvises<br />
til diagram A, B eller C, menes der disse diagrammer.<br />
Software-moduler angives med modulnavn. Derved er det let at se, at der er tale om navnet på<br />
et modul.<br />
Elektriske symboler såsom modstande, transistorer osv. er indekseret som<br />
modulforkortelse.komponentnummer/symbol, hvorkomponentnummer/symbol er unikt for den<br />
ene komponent i modulet. Modulforkortelserne ses i ordlisten på side201. Hvis komponenter er<br />
angivet uden modulforkortelse, er der tale om generelle formler eller komponenter, som er ens<br />
gennem hele rapporten.<br />
Digital- og analog stel/forsyning angives med symboler på figuren herunder.<br />
Digital stel Analog stel<br />
Digital<br />
forsyning<br />
Analog<br />
forsyning<br />
Målinger med prober: Med mindre andet er angivet er referencen stel. I det tilfælde andet ikke<br />
er angivet optræder proben som belastingen.<br />
ii
Indholdsfortegnelse<br />
1 Indledning 1<br />
I Problemanalyse 3<br />
2 Foranalyse 5<br />
2.1 Formål . ...................................... 5<br />
2.2 Analyse ...................................... 5<br />
2.3 Nye ideer ..................................... 7<br />
2.4 Systemdefinitioner ................................ 9<br />
3 Kravspecifikation 11<br />
3.1 Indledning ..................................... 11<br />
3.2 Generel beskrivelse ................................ 11<br />
3.3 Specifikke krav . . ................................ 14<br />
3.4 Krav til eksterne grænseflader .......................... 24<br />
3.5 Krav til systemets ydelse . . ........................... 25<br />
3.6 Kvalitetsfaktorer . ................................ 25<br />
4 Accepttest-specifikation 26<br />
4.1 Indledning ..................................... 26<br />
4.2 Testemner ..................................... 26<br />
4.3 Testdesign ..................................... 28<br />
II Design af diktafon 31<br />
5 Systemdesign 33<br />
5.1 Systemoversigt . . ................................ 33<br />
5.2 Funktionsoversigt . ................................ 33<br />
iii
Indholdsfortegnelse<br />
5.3 HW/SW opdeling . . ............................... 37<br />
5.4 HW/SW grænseflader ............................... 38<br />
6 Hardwaredesign 40<br />
6.1 Strukturdesign ................................... 40<br />
6.2 Modulgrænseflader . ............................... 41<br />
6.3 Modulernes interface ............................... 46<br />
7 Softwaredesign 48<br />
7.1 Programdesign . . . ............................... 48<br />
7.2 Procesdesign/modulopdeling . .......................... 52<br />
7.3 Afspil_styring ................................... 52<br />
7.4 Optag_styring ................................... 54<br />
7.5 System_kontrol . . . ............................... 54<br />
7.6 Display_status ................................. 59<br />
7.7 Display_styring . . . ............................... 59<br />
7.8 Kval_data_overfør . ............................... 60<br />
7.9 Pc-software .................................... 60<br />
III Hardware-design 63<br />
8 CPU-modul 65<br />
8.1 Funktionsoversigt . . ............................... 65<br />
8.2 Løsningsmuligheder ............................... 66<br />
8.3 Design af CPU-modul ............................... 68<br />
8.4Test ........................................ 75<br />
8.5 Delkonklusion ................................... 77<br />
9 Hukommelsesmodul 78<br />
9.1 Funktionoversigt . . ............................... 78<br />
9.2 Løsningsmuligheder ............................... 78<br />
9.3 Design af hukommelsesmodul .......................... 78<br />
10 RS232-modul 80<br />
10.1 Funktionoversigt . . ............................... 80<br />
10.2 Design af RS232-modul . . . .......................... 81<br />
iv
Indholdsfortegnelse<br />
10.3 Delkonklusion . . . ................................ 82<br />
11 Mikrofonmodul 83<br />
11.1 Funktionsoversigt . ................................ 83<br />
11.2 Design af mikrofonmodul . . ........................... 84<br />
11.3 Test . . ...................................... 91<br />
11.4 Delkonklusion . . . ................................ 91<br />
12 Kvalitetsmodul 92<br />
12.1 Funktionoversigt . ................................ 92<br />
12.2 Løsningsmuligheder ............................... 93<br />
12.3 Design af kvalitetsmodul . . ........................... 94<br />
12.4 Simulering ..................................... 96<br />
12.5 Test . . ...................................... 97<br />
12.6 Delkonklusion . . . ................................ 97<br />
13 Højttalermodul 98<br />
13.1 Funktionsoversigt . ................................ 98<br />
13.2 Design af Højttalermodul . . ........................... 99<br />
13.3 Test . . ...................................... 101<br />
13.4 Delkonklusion . . . ................................ 101<br />
14 Knapmodul 102<br />
14.1 Funktionsoversigt . ................................ 102<br />
14.2 Design af knapmodul ............................... 103<br />
14.3 Test . . ...................................... 106<br />
14.4 Delkonklusion . . . ................................ 106<br />
15 Displaymodul 107<br />
15.1 Funktionsoversigt . ................................ 107<br />
15.2 Design af displaymodul . . . ........................... 107<br />
15.3 Delkonklusion . . . ................................ 109<br />
IV Software-design 111<br />
16 Softwareimplementation 113<br />
v
Indholdsfortegnelse<br />
16.1 Struktur af programmeringsfiler ......................... 113<br />
16.2 Struktur af headerfil . ............................... 113<br />
16.3 Implementering af tilstandsdiagram og flowdiagrammer ............. 114<br />
16.4 Diktafon . ..................................... 114<br />
16.5 Pc-sofware .................................... 117<br />
16.6 Delkonklusion ................................... 118<br />
17 Acceptest 119<br />
18 Konklusion 121<br />
Litteraturliste 123<br />
V Appendiks 129<br />
A Sampling- og rekonstruktionsteori 131<br />
B Timing af CPU 135<br />
C Interrupt 140<br />
D Filterberegning til højpasfilter 142<br />
E Wave-filformat 145<br />
F Seriel kommunikation 149<br />
G Protokol 153<br />
VI Testrapporter 157<br />
I CPU-modul 159<br />
II Mikrofonmodul 166<br />
III Kvalitetsmodulet 179<br />
IV Højttalermodul 185<br />
V Knapmodul 189<br />
vi
Indholdsfortegnelse<br />
VI Integration af hardware 195<br />
VII Pc-software 198<br />
Ordliste 201<br />
VII Komponentliste og diagrammer 205<br />
vii
Kapitel<br />
1<br />
Indledning<br />
En diktafon anvendes i mange professionelle henseender. Den anvendes blandt andet af læger,<br />
der i stedet for at skrive direkte i patienters journaler dikterer tilføjelser. Disse tilføjelser bliver<br />
da senere indskrevet af en sekretær.<br />
Optagelserne som sekretæren skal indskrive, er ofte gemt på analoge kassettebånd. Disse bånd<br />
bliver med tiden slidte, hvilket medfører en forringet lydkvalitet.<br />
Disse problemer ønskes forbedret, og lyden kunne med fordel gøres digital, og gemmes på<br />
diktafonen uden brug af bånd. Det indtalte vil da kunne overføres til en pc via en dockingstation.<br />
Dermed undgår man at skulle lagre det indtalte på kassettebånd. Dette fører til følgende<br />
initierende problem for projektet:<br />
Hvordan konstrueres en digital diktafon med pc-dockingstation?<br />
1
Del<br />
Problemanalyse I<br />
3
Kapitel<br />
2.1 Formål<br />
2<br />
Foranalyse<br />
Formålet med foranalysen er at analysere problemstillingen, for at skabe overblik og derefter<br />
opstille en kravspecifikation og en acceptestspecifikation.<br />
Disse anvendes derefter til struktureret at udvikle en diktafon, der skal overholde kravspecifikationen.<br />
Dette påvises, ved at diktafonen opfylder acceptestspecifikationen.<br />
2.2 Analyse<br />
2.2.1 Situationsbeskrivelse<br />
Situationsbeskrivelsen tager udgangspunkt i en tænkt situation på et hospital. En diktafon anvendes<br />
blandt andet på et hospital, hvor lægen dikterer, hvad der skal skrives ind i patientens<br />
journal. En sekretær skriver senere det dikterede ind i journalen. Disse oplysninger kan en sygeplejerske<br />
eller en anden læge anvende i behandlingen af patienten. Dette rigt billede af dette<br />
er vist på figur 2.1.<br />
Behandling<br />
Læge<br />
Patient<br />
Instruktioner Instruktioner<br />
Tale<br />
Undersøgelse<br />
Behandling<br />
Diktafon Afspiller<br />
Bånd Tale Indtastning<br />
Tilhørsforhold<br />
Sygeplejerske<br />
Sekretær<br />
PC<br />
Journal<br />
Figur 2.1: Rigt billede af diktafonen i anvendelse på et hospital. De ikke-brudte streger angiver<br />
informationsveje. De stiplede linier angiver f.eks. en behandling af patienten.<br />
5
Kapitel 2. Foranalyse<br />
Arbejdsgangen hvori selve diktafonen indgår er vist på figur2.2. Denne er vist generelt således,<br />
at det ikke nødvendigvis kun benyttes på et hospital, men også kunne være hos f.eks. en advokat.<br />
Brugeren giver instruktioner til diktafonen ved f.eks. at aktivere optagefunktionen, så der kan<br />
indtales beskeder på diktafonen. Dernæst sker der en overførsel af beskeder til afspilleren via et<br />
bånd. Sekretærens opgave er nu at omsætte beskeden, som evt. kun består af stikord, til tekst.<br />
Dette foregår ved at sekretæren giver instruktioner til afspilleren, hvorved beskeden afspilles.<br />
Sekretæren kan samtidig indtaste beskeden på en pc.<br />
Der kan opstå problemer eller tab af dyrebar tid, hvis der er flere beskeder på det samme bånd.<br />
Skal sekretæren finde én bestemt besked, skal han/hun spole frem eller tilbage for at finde det<br />
rigtige sted på båndet. Dette skyldes, at informationen på det analoge bånd kun er indtalt lyd og<br />
dermed en uopdelt informationsstrøm, hvor det ikke er muligt at adskille to beskeder.<br />
Bruger<br />
Instruktioner<br />
Tale<br />
Diktafon Afspiller<br />
Bånd<br />
Instruktioner<br />
Sekretær<br />
Tale Indtastning<br />
Figur 2.2: Arbejdsgangen hvori diktafonen indgår.<br />
For at skabe overblik listes processer, strukturer og problemer fra figur2.2:<br />
Processer<br />
¯ instruktioner til diktafon (optag, stop m.m.)<br />
¯ tale til og fra diktafon<br />
¯ instruktioner til afspiller (afspil, spol og stop)<br />
¯ tale fra afspiller til sekretær<br />
¯ indtastning på pc<br />
Strukturer<br />
¯ brugeren dikterer til eller aflytter diktafonen (anvendelse)<br />
¯ sekretæren lytter til båndet fra diktafonen (anvendelse)<br />
¯ sekretæren tilføjer data til journalen via indtastning på pc’en (produktion)<br />
Problemer<br />
6<br />
¯ det tager lang tid at springe mellem beskederne på diktafonen<br />
¯ det er svært at finde én bestemt besked<br />
¯ der kan opstå "båndsalat"<br />
¯ slidte bånd giver dårlig lydkvalitet<br />
PC
2.3 Nye ideer<br />
2.3. Nye ideer<br />
For at kunne komme med nye ideer til produktet kan man betragte forbilleder som f.eks. tilsvarende<br />
produkter. Desuden kan der kigges på såkaldte metaforer, som er produkter, der har<br />
funktioner, som kan tænkes benyttet i forbindelse med en digital diktafon.<br />
2.3.1 Forbilleder<br />
Et forbillede kan være en analog diktafon. Denne har knapper, som brugeren kan anvende til at<br />
styre diktafonen med. Disse knapper er:<br />
¯ Optag<br />
¯ Afspil<br />
¯ Stop<br />
¯ Pause<br />
¯ Spol frem/tilbage<br />
¯ Volumenkontrol<br />
Det optagede gemmes på analoge bånd.<br />
Et minimumsystem til en diktafon ville være, at brugeren har mulighed for at optage og stoppe<br />
en optagelse, og senere ville kunne afspille det på diktafonen eller et andet apparat, dette kræver<br />
en form for hukommelse. De andre knapper (funktioner) er ikke strengt nødvendige, men kan<br />
gøre diktafonen mere brugervenlig.<br />
Andre forbilleder er digitale diktafoner fra f.eks. producenten Olympus. Der ses på modellen<br />
VN-3600, som er en lille digital diktafon 96 ¢ 31 ¢ 215 mm [VN-3600, 2003]. Diktafonen<br />
har 3 optagekvaliteter, som giver mulighed for opbevaring af 91-364 minutters diktat. Kvaliteten<br />
afhænger af båndbredden og denne har betydning for samplingsfrekvensen. Det er muligt at<br />
tænde og slukke for diktafonen, for at spare på strømmen, når den ikke anvendes. På diktafonen<br />
er et lille display, som bl.a. giver mulighed for at se nummeret på den besked, som indtales eller<br />
afspilles. Det er muligt at springe mellem de forskellige beskeder, ligesom indtalte beskeder let<br />
kan slettes fra hukommelsen.<br />
Denne diktafon har den fordel, at den er mindre end de fleste analoge diktafoner, da den ikke<br />
er begrænset af de analoge bånds fysiske størrelse. Desuden kan den også indholde mere taletid<br />
end almindelige diktafonbånd, hvor de største kan indholde 180 minutter. Den helt store fordel<br />
frem for analoge diktafoner er, at der let kan skiftes mellem forskellige beskeder.<br />
2.3.2 Metaforer<br />
En MP3-afspiller/optager har mange af de samme funktioner som en digital diktafon. Dens<br />
formål er også at gemme lyddata, så de senere kan afspilles. MP3-afspilleren adskiller sig dog<br />
fra diktafonen ved, at den er lavet til gengivelse af musik. En MP3-afspiller kan endvidere spole<br />
7
Kapitel 2. Foranalyse<br />
i sangene og kan tilsluttes en pc, så MP3-filer kan overføres fra pc’en til MP3-afspilleren. MP3afspilleren<br />
har desuden mulighed for at slette samtlige sange.<br />
Telefonen er også en god metafor, da denne kan gengive lyd i en forståelig kvalitet. Det er normalt<br />
muligt at forstå, hvad personen i den anden ende siger. Telefoner anvender frekvensbåndet<br />
300-3400 Hz [Langford-Smith, 1997, side 630].<br />
Da kvaliteten i en telefon er forståelig, tages der udgangspunkt i denne. Der benyttes desuden<br />
to andre frekvensbånd, et med den dobbelte og et med den halve øvre frekvens. Se næste afsnit<br />
for begrundelse.<br />
Talegenerering<br />
Det følgende er baseret på [Strong/Plitnik, 1992, side 201-214]. Tale genereres ved lungerne,<br />
stemmebåndene og luftrøret, disse kaldes tilsammen for kilden. Det er stemmebåndenes vibrationer,<br />
når det kommer luft gennem dem, der giver lydens grundfrekvens. Lydens grundfrekvens<br />
varieres ved forskellige muskelspændinger i stemmebåndene. Når lyden kommer ud gennem<br />
svælget, munden og næsehulrummet, der tilsammen kaldes vokaltragten, skabes harmoniske<br />
overtoner1 , der sammen med grundfrekvensen giver lyd.<br />
For at øret skal opfatte lyden korrekt, er det vigtigt, at frekvensindholdet i talesignalet bibeholdes,<br />
hvorimod det ikke er vigtigt med fasebevarelse. Det har altså ingen betydning for en korrekt<br />
tolkning, at talesignalet inverteres [Crocker, 1998, side 1223-1224].<br />
Tale ligger i frekvensområdet 62-8000 Hz[Langford-Smith, 1997, side 630]. I tabel 2.1 ses sammenhængen<br />
mellem de valgte frekvensområder og beregnet tab i artikulation. Artikulation af<br />
tale er defineret som den procentdel af stavelser som bliver fortolket korrekt [Langford-Smith, 1997,<br />
side 628]. Det ses, at den højeste kvalitet bevarer en stor del af talen, hvorimod der går meget<br />
tabt i den dårligste kvalitet.<br />
Nedre frekvens Øvre frekvens Tab i artikulation<br />
300 Hz 1,700 kHz 41%<br />
300 Hz 3,400 kHz 12%<br />
300 Hz 6,800 kHz 4%<br />
Tabel 2.1: Sammenhængen mellem båndbredde og beregnet tab i artikulation ved tale<br />
[Langford-Smith, 1997, side 628].<br />
Samplingsfrekvenser<br />
Ud fra de tre øvre frekvenser fra tabel 2.1 og teorien fra appendiks A, kan tre samplingsfrekvenser<br />
fastlægges. Samplingssætningen siger, at samplingsfrekvensen skal være mindst dobbelt så<br />
høj som den øvre frekvens i det samplede; derfor fastlægges de tre samplingsfrekvenser for<br />
8<br />
1 Harmoniske overtoner er givet ved fharm N ¡ fgrund, hvor N er de naturlige tal.
2.4. Systemdefinitioner<br />
1,700 kHz, 3,400 kHz og 6,800 kHz til henholdsvis 4,000 kHz, 8,000 kHz og 16,000 kHz, da<br />
disse overholder samplingssætningen.<br />
Bitopløsning<br />
Med hensyn til bitopløsning, ved A/D-konvertering, skal signal/støjforholdet være minimum 27<br />
dB, for at der er forståelig tale uden tab i udtale [Witten, 1982, side 46]. Dette ønskes overholdt<br />
i diktafonen. Signal/støjforholdet for tale udregnes ved ligning2.1 , hvor σx Xm<br />
4 , B er bitopløsningen,<br />
Xm er det spændingsområde, hvori man arbejder og SNR er signal/støjforholdet i dB<br />
[Oppenheim/Schafer, 1999, ligning 4.124, side 196-197]<br />
SNR 10 ¡ log<br />
12 ¡ 2 2B σ 2 x<br />
X 2 m<br />
<br />
12 ¡ 22B X<br />
¡<br />
10 ¡ log<br />
2 m<br />
42 X 2 <br />
3<br />
10 ¡ log ¡ 22B<br />
m<br />
4<br />
Derved kan den mindst tilladelige bit-opløsning i diktafonen udregnes til 5 ved ligning2.2.<br />
2.3.3 Opsummering<br />
27 10 ¡ log 075 ¡ 2 2B¡<br />
1027 22B<br />
075<br />
B <br />
ln 1027<br />
075<br />
2 ¡ ln 2<br />
(2.1)<br />
469 5 (2.2)<br />
Udfra forbillederne og metaforerne kan der uddrages egenskaber, som ville kunne overføres<br />
til den konstruerede diktafon; enten direkte eller med modifikationer. En analog diktafon har<br />
mulighed for at optage, afspille, stoppe, spole frem/tilbage og justere volumen under afspilning.<br />
Det vil være praktisk hvis brugeren kunne spole i beskederne for at kontrollere korrektheden af<br />
det tidligere indtalte.<br />
Den digitale diktafon har mulighed for at optage med forskellige lydkvaliteter. Dette giver brugeren<br />
god mulighed for selv at vælge mellem kvalitet/kvantitet. Desuden kan VN-3600 skifte<br />
mellem de indtalte beskeder, hvilket kan spare meget tid. Der kan desuden også tændes og<br />
slukkes for diktafonen. MP3-afspilleren har udover den digitale diktafon mulighed for at slette i<br />
beskederne. Implementerer man denne funktion i en diktafon, har man mulighed for at overspille<br />
en forkert indtalt besked. Det kunne være hensigtsmæssigt, hvis beskeder på diktafonen kunne<br />
overføres til en pc via en dockingstation, således at det ikke er nødvendigt at have diktafonen,<br />
for at aflytte beskeder.<br />
2.4 Systemdefinitioner<br />
Set fra indtalerens side: En digital diktafon skal bruges til indtaling af mine beskeder. Diktafonen<br />
skal kunne gemme op til 60 minutters tale i dens hukommelse, og jeg skal kunne aflytte<br />
beskederne for at høre, om de er rigtige. Det skal være muligt at sætte diktafonen i en lader og<br />
samtidigt forbinde den til en pc, således at den bliver opladt og beskederne bliver overført til en<br />
pc.<br />
9
Kapitel 2. Foranalyse<br />
Set fra sekretærens side: En digital diktafon skal tilsluttes en pc, så jeg kan hente beskederne<br />
ind på min pc. Beskederne skal have et kendetegn, så jeg ved, hvilken journal jeg skal skrive, og<br />
være i en sådan kvalitet, at jeg kan forstå, hvad der bliver sagt.<br />
Set fra udviklerens side: Hukommelsen skal bestå af RAM til de indtalte beskeder og ROM til<br />
styreprogrammet. Det skal være muligt at ændre antallet af minutters tale i hukommelsen ved at<br />
ændre på optagekvaliteten. Den skal som standard arbejde i frekvensområdet op til 3,400 kHz.<br />
Beskederne skal nummereres fortløbende. Diktafonen skal via en RS232C-forbindelse tilsluttes<br />
en computer.<br />
10
3<br />
Kravspecifikation<br />
Kapitel<br />
3.1 Indledning<br />
3.1.1 Formål<br />
Formålet er at udvikle et prototypesystem bestående af en digital diktafon med dockingstation<br />
til en pc. Der skal kunne optages beskeder fra brugeren og disse skal kunne overføres til en pc.<br />
Der vil senere kunne blive korrigeret i kravspecifikationen, hvis det i design eller testfasen viser<br />
sig, at krav ikke er dækkende eller ikke er realiserbare.<br />
3.1.2 Referencer<br />
Kravspecikationen er udarbejdet på grundlag af foranalysen i kapitel2.<br />
3.1.3 Læsevejledning<br />
Der startes med en generel beskrivelse af systemet. Dernæst vil de mere specifikke krav blive<br />
præsenteret. Krav til systemets grænseflader, ydelse og til sidst kvalitetsfaktorer vil blive præsenteret.<br />
3.2 Generel beskrivelse<br />
3.2.1 Systembeskrivelse<br />
En overordnet skitse af systemet ses på figur 3.1. Den digitale diktafon skal kunne optage beskeder<br />
indtalt af brugeren. Beskederne skal kunne overføres til en pc. Ydermere skal det være<br />
muligt for brugeren at høre en allerede indtalt besked. Det skal være muligt at skifte mellem<br />
de indtalte beskeder, slette den sidst indtalte besked og spole i en besked. Instruktionerne til<br />
diktafonen skal foregå ved hjælp af trykknapper. Funktionerne og knapperne er beskrevet i det<br />
følgende afsnit.<br />
11
Kapitel 3. Kravspecifikation<br />
3.2.2 Systemets funktion<br />
PC<br />
Diktafon-<br />
System<br />
Figur 3.1: Skitse af diktafonsystemet koblet op til pc.<br />
Den digitale diktafon skal kunne optage og afspille beskeder. Derudover skal beskederne kunne<br />
overføres til en pc og aflyttes derpå. Der skal kunne gemmes 60 minutters tale på diktafonen.<br />
Dette kan gøres i én eller flere beskeder, dog maksimalt 20. Diktafonen skal som standard benytte<br />
frekvensområdet 300 Hz til 3,4 kHz.<br />
De funktioner brugeren skal have mulighed for at udføre ved hjælp af knapper, placeret på<br />
diktafonen, ses i tabel 3.1. Tabellen definerer navnet på en bestemt knap, dens symbol og giver<br />
en beskrivelse af funktionen for denne knap. Ideerne til disse funktioner stammer fra afsnit2.3.3.<br />
Der indføres desuden to virtuelle knapper, som kan påvirkes på pc’en. Disse er vist i tabel3.2.<br />
Knap Symbol Beskrivelse<br />
Optag 01 Start optagelse af ny besked<br />
Stop Stop optagelse eller afspilning<br />
Afspil Afspil valgt besked<br />
Pause Stopper afspilning/optagelse midlertidigt<br />
Næste besked Skifter til næste besked<br />
Foregående besked Skifter til foregående besked<br />
Spol frem Spoler frem i beskeden<br />
Spol tilbage Spoler tilbage i beskeden<br />
Slet Sletter sidst indtalte besked<br />
Reset R Sletter alle beskeder<br />
Tænd Slutter/afbryder strømmen<br />
Tabel 3.1: Knapper, deres symbol og beskrivelse af deres funktion på diktafon.<br />
Der skal overholdes krav om, at diktafonens lydkvalitet er tilstrækkelig til talegengivelse. Dette<br />
12
Knap Symbol Beskrivelse<br />
Skab forbindelse pc Opretter forbindelse til diktafonen<br />
Afbryd forbindelse pc Afbryder forbindelsen til diktafonen<br />
3.2. Generel beskrivelse<br />
Tabel 3.2: Virtuelle knapper, deres symbol og beskrivelse af deres funktion på pc’en.<br />
opnås ved benyttelse af de frekvensområder, som er angivet i tabel 2.1. Derfor skal det være<br />
muligt at skifte mellem disse frekvensområder.<br />
Brugeren skal have mulighed for at justere volumen af det, der afspilles på diktafonen.<br />
3.2.3 Systemets begrænsninger<br />
Systemet skal ikke kunne konvertere lyd til skrevet tekst. Dette kan overlades til andet software<br />
på pc’en, hvis det ønskes.<br />
Knapperne til fremspoling og tilbagespoling skal kun være anvendelige ved aflytning af beskederne,<br />
der skal altså ikke være mulighed for at spole i en besked og optage fra et sted, hvor man<br />
f.eks. har indtalt noget forkert eller lignende. Tænd-knappen implementeres ikke i praksis, da<br />
der benyttes en laboratoriestrømforsyning.<br />
Taletiden begrænses af den mængde hukommelse, som udleveres i komponentudleveringen.<br />
Opsætningen af talekvaliteten kan kun styres fra pc, når diktafonen er i dockingstationen. Talekvaliteten<br />
kan ikke ændres mellem forskellige beskeder på diktafonen.<br />
3.2.4 Systemets fremtid<br />
Systemet vil i fremtiden kunne blive forbedret med indførsel af talegenkendelse, der derved<br />
kunne oversætte de indtalte beskeder til tekst. Det skal gøres muligt at spole frem og tilbage i<br />
beskederne og fortsætte indtalelse fra et bestemt sted i en allerede indtalt besked.<br />
Diktafonen kan indeholde en større mængde hukommelse.<br />
Opsætningen af talekvalitet skal kunne ændres til hver besked, og det skal være muligt at gøre<br />
det direkte på diktafonen.<br />
3.2.5 Brugerprofil<br />
Brugerne forventes at være mennesker, der i forbindelse med deres arbejde har brug for at kunne<br />
diktere beskeder til senere indskrivning i journaler/dokumentation. Det er ikke nødvendigvis den<br />
samme person, som indtaler beskeden, der også renskriver journalen/dokumentationen.<br />
Det forventes ikke, at brugeren har forudgående kendskab til diktafonen, dvs. produktets betjening<br />
bør være enkel efter læsning af manual.<br />
13
Kapitel 3. Kravspecifikation<br />
3.2.6 Krav til udviklingsforløbet<br />
Overordnet skal SPU-modellen anvendes<br />
[Biering-Sørensen m. fl., 1996].<br />
Der skal med den færdige prototype udarbejdes en rapport, som minimum indeholder:<br />
¯ Design Denne dokumentation skal benyttes som dokumentation for designprocessen, så<br />
det bliver lettere at videreudvikle produktet.<br />
¯ Accepttest Denne specifikation benyttes til en senere test af systemet, for at afgøre om<br />
kravspecifikationen er opfyldt.<br />
3.2.7 Omfang af kundeleverance<br />
Da dette produkt er en prototype, skal produktet ikke direkte leveres til en kunde. Der skal ved<br />
projektaflevering afleveres en rapport indeholdende dokumentationen beskrevet i afsnit3.2.6.<br />
Hvis produktet blev udviklet til et færdigt slutbrugerprodukt, skulle hardwaredelen samt pcsoftware<br />
udleveres til kunden. Desuden skulle kunden have udleveret brugerdokumentation,<br />
dvs. brugervejledning og installationsvejledning.<br />
3.2.8 Forudsætninger<br />
Det forudsættes, at diktafonens hardwaredel baseres på en Motorola 68000 mikroprocessor. Pcsoftwaren<br />
udvikles, så den kan benyttes på en pc med operativsystemet Linux.<br />
Kommunikation mellem diktafon og pc forudsættes at foregå gennem en RS232C-forbindelse<br />
med en baud-rate på 115,2 kbps.<br />
Pc-softwaren skal skrive en wave-fil til hver af de indtalte beskeder på diktafonen.<br />
Pc-softwaren skal skrives i programmeringssproget C. Software på diktafonen skal skrives i<br />
Assembler og C.<br />
3.3 Specifikke krav<br />
3.3.1 Definitioner<br />
Enheder<br />
¯ Diktafon<br />
¯ Pc<br />
Variable<br />
For at opnå brugervenlighed kan der opstilles variable, som dækker over enten oplysninger eller<br />
fejlmeddelelser til brugeren. De variable, som indgår i visningen på displayet er vist i tabel3.3.<br />
14
Variabel Beskrivelse<br />
3.3. Specifikke krav<br />
Fejl/status Her vises, hvilken tilstand diktafonen er i. Tilstandene er<br />
vist i tabel 3.5. Er der sket en fejl, vises der en fejlmeddelse<br />
i stedet. Fejlene er vist i tabel 3.4.<br />
Besked nummer Det aktuelle besked nummer.<br />
Antal beskeder Det totale antal beskeder, som er gemt i diktafonens<br />
hukommelse.<br />
Tid i besked Det antal sekunder, som optageren/afspilleren er inde i den<br />
aktuelle besked.<br />
Længde af besked Den totale længde af den aktuelle besked.<br />
Resterende tid i hukommelsen Det antal minutter og sekunder, der er tilbage i hukommelsen.<br />
Tabel 3.3: De variable beskeder, som kan vises i display på diktafonen.<br />
Desuden er der også 5 forskellige fejlkoder og 2 oplysninger, som kan gives til brugeren. Fejl 1-<br />
3 fremkommer på diktafonens display under statusinformation, mens fejl 4 og 5 samt oplysning<br />
1 og 2 fremkommer på pc’en. Disse er vist i tabel 3.4. Fejlene og oplysningerne er fremkommet<br />
naturligt under udviklingen af de flowdiagrammer, som systemet skal følge. Flowdiagrammerne<br />
findes i afsnit 3.3.2.<br />
Tilstande<br />
Hermed menes, hvilke tilstande diktafonen kan være i, dvs. hvilken funktion diktafonen udfører.<br />
Tilstandene er beskrevet i tabel 3.5. Tilstandsdiagrammet for diktafonen findes på figur 3.2.<br />
Lovlige spring mellem tilstandene er fundet ved at sætte sig i brugerens sted, og derudfra bedømme<br />
den mest logiske sammenhæng mellem tilstandene samt ved udgangspunkt i afsnit2.3.<br />
Det er derfor kun de lovlige spring mellem tilstande, der er vist på figur3.2.<br />
3.3.2 Funktionelle krav<br />
De funktionelle krav vises ud fra brugerens synsvinkel, således at det er brugerens input, der får<br />
diktafonen til at ændre tilstand, og ændre beskeden på displayet. De funktionelle krav beskrives<br />
ud fra flowdiagrammer, og der tages udgangspunkt i tilstandsdiagrammet på figur3.2. Flowdiagrammerne<br />
vil fungere som specifikationer for systemet. I tabel 3.6 er der en forklaring af de<br />
symboler, der er anvendt i diagrammerne.<br />
For overskuelighedens skyld bliver nogle af tilstande forklaret på separate figurer.<br />
15
Kapitel 3. Kravspecifikation<br />
Fejlkode/oplysning Beskrivelse<br />
Fejl 1 Ugyldigt knaptryk i aktuel tilstand.<br />
Fejl 2 Hukommelsen er fuld.<br />
Fejl 3 Ingen besked indtalt i hukommelsen.<br />
Fejl 4 Der kunne ikke oprettes forbindelse til diktafonen.<br />
Fejl 5 Beskederne kunne ikke hentes.<br />
Fejl 6 Kommunikationsfejl!<br />
Fejl 7 Beskederne kunne ikke slettet.<br />
Oplysning 0 Der er oprettet forbindelse til diktafonen.<br />
Oplysning 1 Ingen beskeder på diktafonen.<br />
Oplysning 2 Beskederne er hentet på diktafonen. Beskederne på diktafonen<br />
slettes.<br />
Oplysning 3 Beskederne er slettet på diktafonen.<br />
Tabel 3.4: Fejlkoder og oplysninger til brugeren. Fejl 1-3 kan vises på diktafonen. De resterende<br />
vises på pc’en.<br />
01<br />
01<br />
01<br />
01<br />
00 11<br />
00 11<br />
R<br />
Figur 3.2: Tilstandsdiagram for diktafonen. Der ses de hændelser, forårsaget af knaptryk, som<br />
kan få diktafonen til at skifte tilstand.<br />
16<br />
R<br />
pc<br />
pc<br />
pc
Tilstand Symbol Beskrivelse<br />
3.3. Specifikke krav<br />
Stop Anvendes når diktafonen ikke er i gang med nogen funktioner,<br />
det kan f.eks. være efter reset eller afspilning.<br />
Afspil Anvendes når diktafonen har fået besked om, at den skal<br />
starte afspilning.<br />
Optag<br />
0 0 1 1<br />
Anvendes når diktafonen har fået besked om at starte en<br />
optagelse.<br />
Næste besked Anvendes når diktafonen skal skifte til næste besked.<br />
Foregående besked Anvendes når diktafonen skal skifte til foregående besked.<br />
Slet besked Anvendes når diktafonen skal slette den sidste besked.<br />
Reset R Anvendes når diktafonen skal resettes, så alle beskeder<br />
slettes.<br />
Pause-optag 00 11 Diktafonenen kan gå i denne tilstand, når den er i optagtilstanden.<br />
Pause-afspil Diktafonenen kan gå i denne tilstand, når den er i afspiltilstanden.<br />
Spol frem Når diktafonen skal spole frem, går den i denne tilstand.<br />
Tilstanden kan kun forekomme, hvis diktafonen allerede<br />
er i afspil-tilstanden.<br />
Spol tilbage Når diktafonen skal spole tilbage, går den i denne tilstand.<br />
Tilstanden kan kun forekomme, hvis diktafonen allerede er<br />
i afspil-tilstanden.<br />
Pc pc Når diktafonen har forbindelse til pc via RS232 forbindelse.<br />
Tabel 3.5: Diktafonens tilstande, deres symboler samt en forklaring af disse tilstande.<br />
17
Kapitel 3. Kravspecifikation<br />
Symbol Navn Betydning<br />
Tænd/reset<br />
cirkel Efter dette symbol er systemet i den tilstand, som er angivet i<br />
cirklen (i dette eksempel "afspil"). Tilstanden ophører, når der<br />
bliver peget over i en ny cirkel.<br />
Knap Angiver at der er sket et knaptryk. Med et knaptryk menes der<br />
enten et knaptryk på diktafonen eller et opkaldsforsøg fra pc’en,<br />
når den er i dockingstation.<br />
rektangel Angiver en handling, som skal udføres af systemet.<br />
rektangel<br />
med bløde<br />
hjørner<br />
Et program på pc’en startes eller afsluttes.<br />
rhombe Der foretages et boolsk valg. Er svaret "ja" fortsæt nedad, er svaret<br />
"nej" gå til højre eller venstre. Er der en eller flere knapper i<br />
rhomben, vil svaret være "ja", hvis det er en af de knapper, der<br />
blevet påvirket og "nej" hvis det ikke er nogen af dem.<br />
Tabel 3.6: Forklaring af de anvendte symboler i diagrammerne.<br />
Påvirkes knappen tænd, , startes systemet og displayet tændes. Herefter går systemet i resettilstanden,<br />
R , hvor alle beskeder slettes. Herefter føres systemet over i stoptilstanden. Dette er<br />
vist på figur 3.3.<br />
Stop<br />
Tilstanden stop, , er den tilstand, som diktafonen altid vil vende tilbage til - en form for ventetilstand.<br />
Den bliver i denne tilstand, indtil brugeren trykker på en knap. Se figur3.4.<br />
18
Opstart<br />
Tænd<br />
display<br />
R<br />
Slet alle<br />
beskeder<br />
Figur 3.3: Power-on/reset for diktafonen.<br />
Afspil<br />
R<br />
00 11<br />
Nej<br />
Knaptryk?<br />
R<br />
pc<br />
pc<br />
pc<br />
pc<br />
Ja<br />
R<br />
Ja<br />
Ja<br />
Ja<br />
Nej<br />
Nej<br />
Nej<br />
Fejl 1<br />
00 11<br />
00 11<br />
Ja<br />
Ja<br />
Nej<br />
Nej<br />
00 11<br />
00 11<br />
3.3. Specifikke krav<br />
Figur 3.4: Stoptilstand for diktafonen.<br />
Tilstanden afspil, , starter med at afspille den valgte besked, indtil denne er færdig. Imens<br />
venter diktafonen på knaptryk fra brugeren, som kan få den til at gå ud af denne tilstand. De<br />
mulige knaptryk, og dermed tilstande, er pause, stop og spol frem/tilbage. Funktionen af disse<br />
og andre knapper er vist på figur 3.5. Ved spol frem/tilbage er det valgt, at beskeden afspilles<br />
fire gange så hurtigt.<br />
Optag<br />
For at starte en ny optagelse, skal der være ledig hukommelse. Hvis hukommelsen ikke bliver<br />
fuld, har brugeren mulighed for at pause eller stoppe optagelsen vha. knapperne , 00 11 Funktionerne er vist på figur 3.6.<br />
og .<br />
Ja<br />
Nej<br />
19
Kapitel 3. Kravspecifikation<br />
20<br />
Nej<br />
Findes besked?<br />
Ja<br />
Start<br />
Afspilning<br />
Knaptryk?<br />
Ja<br />
Ja<br />
Ja<br />
Ja<br />
Fremspoling<br />
Besked ikke<br />
Slut?<br />
Ja<br />
Knaptryk?<br />
Ja<br />
Ja<br />
Forsæt<br />
Afspilning<br />
Nej<br />
Forsæt<br />
Afspilning<br />
Nej<br />
Nej<br />
Nej<br />
Nej<br />
Nej<br />
Fejl 3<br />
Fejl 1<br />
Stop<br />
spoling<br />
Ikke<br />
begyndelse<br />
af besked?<br />
Nej<br />
Nej<br />
Fejl 1 Fejl 1<br />
Nej<br />
Tilbagespoling<br />
Ja<br />
Knaptryk?<br />
Ja<br />
Ja<br />
Nej<br />
Figur 3.5: Afspiltilstand for diktafonen.<br />
Ja<br />
Pause i<br />
Afspilning<br />
Ja<br />
Knaptryk?<br />
Ja<br />
Ja<br />
Ja<br />
Nej<br />
Nej<br />
Nej<br />
Nej<br />
Fejl 1<br />
Stop<br />
Afspilning
Fortsæt<br />
Optagelse<br />
Fejl 1<br />
Nej<br />
Nej<br />
00 11<br />
Hukommelse<br />
fri?<br />
Ja<br />
Ny besked<br />
Start<br />
Optagelse<br />
Hukommelse<br />
fri?<br />
Ja<br />
Knaptryk?<br />
Ja<br />
Pause i<br />
Optagelse<br />
Knaptryk?<br />
Ja<br />
Ja<br />
01<br />
01<br />
Ja<br />
Ja<br />
00 11<br />
Ja<br />
Fortsæt<br />
Optagelse<br />
Nej<br />
Nej<br />
Nej<br />
Nej<br />
Nej<br />
Nej<br />
Fejl 2<br />
Fejl 1<br />
Stop<br />
Optagelse<br />
Figur 3.6: Optagtilstand for diktafonen.<br />
3.3. Specifikke krav<br />
21
Kapitel 3. Kravspecifikation<br />
Slet<br />
Hvis der findes beskeder i hukommelsen, slettes den sidst indtalte besked. Dette er vist på figur<br />
3.7.<br />
Skift til næste/foregående nummer<br />
Findes der beskeder i hukommelsen, skiftes til henholdsvis den næste eller den foregående besked<br />
jf. figur 3.8. Dette kan være den samme besked, hvis der kun er én besked i hukommelsen.<br />
Hvis den aktuelle er den sidste kan der springes frem til den første besked og omvendt.<br />
Beskeder i<br />
hukommelse?<br />
Ja<br />
Slet sidst indtalte<br />
besked<br />
Nej<br />
Fejl 3<br />
Figur 3.7: Sletning af beskeder for diktafonen.<br />
Pc<br />
Nej<br />
Beskeder i<br />
hukommelse?<br />
Ja<br />
Ja<br />
Gå til næste<br />
besked<br />
Nej<br />
Fejl 3<br />
Gå til forrige<br />
besked<br />
Figur 3.8: Skift til næste/foregående nummer<br />
for diktafonen.<br />
Den digitale diktafon skal kunne komme i kontakt med en pc. Denne kontakt kan ses fra henholdsvis<br />
diktafonens og pc’ens side. Forbindelsen skal kunne etableres fra pc’en, hvorefter pc’en<br />
overtager styringen af diktafonen og deaktiverer knapperne på diktafonen. Figur3.9 viser denne<br />
situation set fra diktafonen, når forbindelsen er etableret.<br />
Forbindelsen mellem diktafonen og pc’en via RS232C-forbindelsen skabes fra pc’en ved at<br />
eksekvere et program på pc’en. På figur 3.10 ses flowet i dette program. Det bemærkes, at det er<br />
brugeren, som skal angive, om kvaliteten skal indstilles, samt hvad den evt. skal indstilles til vha.<br />
tastaturet. Data gemmes inde i en undermappe under brugerens eget hjemmebibliotek. Denne<br />
mappe, "diktafon", forudsættes at være på pc’en. Modulet skal oprette et underbibliotek med<br />
aktuel dato og klokkeslæt, som navn, og alle beskeder vil blive placeret i denne. Beskederne skal<br />
gemmes i denne mappe med navnet "besked1.wav"for første besked "besked2.wav"for anden<br />
besked osv.<br />
22
pc<br />
Knapperne<br />
deaktiveres<br />
Styringen<br />
overgår til pc<br />
pc<br />
Ja<br />
Styringen<br />
gives tilbage<br />
Knapperne<br />
aktiveres<br />
Nej<br />
Figur 3.9: Kontakten mellem diktafon<br />
og pc set fra diktafonens<br />
side.<br />
Fejl 5<br />
Start program<br />
Opret forbindelse<br />
Forbindelse?<br />
Ja<br />
Er der data?<br />
Ja<br />
Hent indstilling<br />
og data<br />
Data konverteres<br />
og gemmes<br />
Nej<br />
Er data hentet?<br />
Ja<br />
Slet data på<br />
diktafon<br />
Oplysning 2<br />
Nej<br />
Nej<br />
3.3. Specifikke krav<br />
Fejl 4<br />
Oplysning 1<br />
Indstil<br />
kvalitet?<br />
Ja<br />
Indstilling foretages<br />
Afslut program<br />
Figur 3.10: Kontakten mellem diktafon og pc set fra<br />
pc’ens side.<br />
Nej<br />
23
Kapitel 3. Kravspecifikation<br />
3.4 Krav til eksterne grænseflader<br />
3.4.1 Brugergrænseflade<br />
Brugergrænsefladen på diktafonsiden ses på figur 3.11. Brugeren skal betjene diktafonen via<br />
trykknapper. Den enkelte trykknap skal kun have én funktion. Der skal ikke anvendes menuer<br />
til at betjene diktafonen.<br />
Diktafonen skal kunne sluttes til dockingstationen ved at tilslutte et kabel til et stik på diktafonen.<br />
Via dockingstationen skal det være muligt for brugeren at downloade de indtalte beskeder<br />
til en pc. Dette skal gøres ved et interaktivt software-program på dansk. Programmet skal være<br />
tekstbaseret. Installation af hardware og software skal være veldokumenteret, så brugeren ikke<br />
kan misforstå fremgangsmåden. Dette vil dog ikke blive realiseret i dette projekt.<br />
00 11<br />
00 11<br />
00 11<br />
Mikrofon<br />
01<br />
3.4.2 Hardwaregrænseflade<br />
Statusinformation<br />
Resterende tid i hukommelsen<br />
Antal beskeder<br />
Besked nr. Længde af besked<br />
Tid i besked<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
000000<br />
111111<br />
R<br />
Højttaler<br />
Vol<br />
Figur 3.11: Brugergrænsefladen<br />
Input til diktafonen er menneskelig tale og knaptryk. Diktafonen har også et input fra en strømforsyning.<br />
Desuden er der et kombineret input og output til/fra en pc via en RS232C-forbindelse.<br />
Output fra diktafonen er lyd via en højttaler.<br />
3.4.3 Kommunikationsgrænseflade<br />
Kommunikationen mellem diktafon og pc skal overholde RS232C-standarden.<br />
3.4.4 Software-grænseflade<br />
Pc-softwaren skal specificeres til at kunne fungere på en pc med styresystemet Linux.<br />
Softwaren på diktafonen skal fungere på en processor af typen MC68000.<br />
24
3.5 Krav til systemets ydelse<br />
3.5. Krav til systemets ydelse<br />
Diktafonen skal kunne reagere på knaptryk indenfor 0,5 s, da det forventes, at dette er hurtigt<br />
nok til ikke at genere brugeren. Dvs. at optagelse skal starte indenfor 0,5 s efter tryk på optageknappen.<br />
Diktafonen skal mindst kunne lagre 2 minutters tale i den dårligste kvalitet, da der<br />
er tale om en prototype, hvor der kun skal demonstreres, at det er muligt at gemme tale.<br />
3.6 Kvalitetsfaktorer<br />
Kvalitetsfaktorerne vægtes efter en 5 trins skala, hvor 1 er ukritisk og 5 er særdeles vigtigt.<br />
Pålidelighed tildeles værdien 3. De lagrede beskeder må ikke forsvinde ved brug af diktafonen<br />
i minimum 8 timers drift (svarende til ca. en arbejdsdag). Det forudsættes, at strømudfald<br />
ikke finder sted.<br />
Vedligeholdelsesvenlighed tildeles værdien 4, hvilket betyder at:<br />
¯ placering af komponenter på boardet skal være overskuelig og let tilgængelig.<br />
¯ der skal være dokumentation af komponentplacering og forbindelser.<br />
¯ softwaren skal være overskueligt opbygget, dvs. ved brug af moduler, kommentarer<br />
til kode samt logisk navngivning af moduler, funktioner og variable.<br />
Udvidelsesvenlighed tildeles værdien 2, da der ikke ønskes en udvidelse af produktet efter<br />
semesteret er afsluttet.<br />
Brugervenlighed tildeles værdien 3, hvilket indebærer at:<br />
¯ det skal fremgå tydeligt af knapperne, hvilken funktion de har.<br />
¯ det skal fremgå af displayet, når der er fejlbetjening af diktafonen.<br />
¯ det skal fremgå af displayet, hvilken tilstand diktafonen befinder sig i.<br />
Genbrugbarhed tildeles værdien 2. Den anvendte hardware skal kunne skilles ad og genbruges.<br />
Softwaremoduler m.m. skal kunne kopieres og genbruges i andre applikationer.<br />
Integritet tildeles værdien 2. Da prototypen har en stationær spændingsforsyning, er det acceptabelt,<br />
at lagrede beskeder samt indstilling af kvaliteten slettes ved strømsvigt eller udslag<br />
i forsyningen. Styreprogrammet må dog ikke kunne slettes.<br />
Sikkerhed tildeles værdien 1, da det kun er en prototype og der ikke er andre end projektgruppen,<br />
der anvender den. Laboratoriereglerne skal dog overholdes. Hvilket vil sige:<br />
¯ Ingen DC spændinger over 60 V<br />
¯ Ingen AC spændinger over 25 V<br />
Funktion tildeles værdien 4, da det er vigtigt, at diktafonen gør det, man ønsker. Det vil sige,<br />
at systemet skal følge flowdiagrammerne i afsnit 3.3.2.<br />
25
Kapitel<br />
4.1 Indledning<br />
4.1.1 Formål<br />
4<br />
Accepttestspecifikation<br />
Formålet med en accepttest er at have dokumentation for, at kravspecifikationen er opfyldt.<br />
4.1.2 Omfang og begrænsning<br />
Accepttesten er udfærdiget på baggrund af kravspecifikationen i kapitel3. De enkelte testemner<br />
begrundes med referencer til kravspecifikationen.<br />
Accepttesten skal omfatte hele produktet, men der udfærdiges ikke testdesign for samtlige<br />
testemner, da dette er trivielt. Der udarbejdes i stedet en skabelon samt en uddybning af et<br />
enkelt testemne. Test af de andre testemner foregår analogt hermed.<br />
4.1.3 Godkendelse<br />
Det er projektgruppen, som skal godkende produktet og vurdere, om det lever op til de opstillede<br />
krav.<br />
For at produktet kan blive godkendt, skal acceptesten være udført, hvor alle punkter i denne er<br />
godkendt.<br />
4.2 Testemner<br />
Testemnerne deles op i fire grupper, da dette vil gøre det lettere at overskue.<br />
Efter hver test er der i parentes angivet hvor kravet findes til den pågældende test.<br />
4.2.1 Funktionsmæssige emner<br />
26<br />
1. Dækker diktafonen det krævede frekvensen område? (afsnit2.3)
2. Samples der med de korrekte frekvenser? (afsnit 2.3)<br />
3. Kan man afspille en besked på diktafonen? (Figur3.5)<br />
4. Kan man indtale en besked på diktafonen? (Figur3.6 og afsnit 3.3.2)<br />
5. Melder diktafonen fejl, hvis hukommelsen er fuld? (Afsnit3.3.1)<br />
6. Kan der afspilles forståelig tale fra diktafonen? (Afsnit3.2.2 og tabel 2.1)<br />
4.2. Testemner<br />
7. Kan der minimum opbevares 2 minutters tale i diktafonens hukommelse? (Afsnit3.5)<br />
8. Kan der spoles frem og tilbage i beskeder? (Figur3.5)<br />
9. Kan der skiftes til foregående og næste besked? (Figur3.8)<br />
10. Kan den sidst indtalte besked slettes fra diktafonen? (Figur3.7)<br />
11. Er det muligt at slette alt gemt lyddata ved tryk på reset-knappen? (Figur3.3)<br />
4.2.2 Kommunikation med pc<br />
12. Kan softwaren benyttes på en pc med styresystemet Linux? (Afsnit3.4.4)<br />
13. Kan der kommunikeres med en pc med en RS232C-forbindelse? (Afsnit3.4.3)<br />
14. Kan talekvaliteten ændres fra pc’en? (Afsnit 3.2.3)<br />
15. Kan de indtalte beskeder overføres til en pc og konverteres til en wave-fil? (Figur3.9 og<br />
3.10)<br />
16. Slettes diktafonens hukommelse ved succesfuld dataoverførsel til pc’en? (Figur3.9 og<br />
3.10)<br />
4.2.3 Brugerinterface<br />
17. Reagerer diktafonen på knaptryk indenfor 0,5 s? (Afsnit3.5)<br />
18. Viser diktafonens display hvilken funktion, der er aktiveret? (Afsnit3.3)<br />
19. Giver diktafonen de korrekte fejlmeddelser ved fejlbetjening? (Afsnit3.3.1)<br />
20. Aktiveres den ønskede funktion ved tryk på tilhørende knap? (Afsnit3.2.2 og tabel 3.1)<br />
21. Viser displayet alle de krævede informationer? (Tabel3.3 og 3.4)<br />
4.2.4 Kvalitetskrav<br />
Integritet<br />
22. Slettes lagrede beskeder på diktafonen ved strømsvigt på denne? (Afsnit3.6)<br />
27
Kapitel 4. Accepttest-specifikation<br />
Pålidelighed<br />
23. Kan diktafonen opbevare indtalte beskeder i minimum 8 timer uden strømsvigt? (Afsnit<br />
3.6)<br />
Vedligeholdelsesvenlighed<br />
24. Er der kommentarer til funktioner i software? (Afsnit3.6)<br />
25. Er komponentplacering og ledningsforbindelser dokumenteret? (Afsnit3.2.6 og 3.6)<br />
Brugervenlighed<br />
26. Fremgår det af knapperne, hvilken funktion de har? (Afsnit3.6)<br />
Genbrugbarhed<br />
27. Kan hardwaren skilles ad og genanvendes? (Afsnit3.6)<br />
28. Er softwaren opbygget i moduler? (Afsnit 3.6)<br />
Sikkerhed<br />
29. Anvendes der kun DC spændinger under 60 V? ( Afsnit 3.6)<br />
30. Anvendes der kun AC spændinger under 25 V? (Afsnit 3.6)<br />
Funktion<br />
31. Følger systemet flowdiagrammerne? (Afsnit 3.3.2 og 3.6)<br />
4.3 Testdesign<br />
For at udføre test 1 til 23 skal diktafonen være tændt. De nødvendige forudsætninger skal være<br />
opfyldt, før testen startes. Et eksempel kunne være, at der skal være lagret beskeder på diktafonen,<br />
før en af disse skal afspilles (test 3).<br />
For at udføre test 24 til 30 skal der generelt kigges i den medfølgende dokumentation til diktafonen<br />
for at afgøre, om testen bliver udført korrekt. Eksempelvis test28, hvor der skal undersøges<br />
i programkoden, om denne er opbygget i moduler.<br />
Test 31 udføres ved at teste diktafonens funktion vha. flowdiagrammerne.<br />
Herefter følger et eksempel på, hvordan en test kunne se ud. Det valgte testemne er nr.4. Denne<br />
test finder sted ud fra flowdiagrammet på figur 3.6.<br />
4.3.1 Testspecifikation for test 4 - Kan man indtale en besked på diktafonen?<br />
Udgangspositionen for denne test er stoptilstanden. Der er desuden tre mulige startscenarier; der<br />
er fri plads i hukommelsen, hukommelsen er fuld eller der er lagret 20 beskeder i hukommelsen.<br />
28
Scenarie Forventet resultat<br />
Fri plads i hukommelsen Ny besked oprettes og optagelse starter<br />
4.3. Testdesign<br />
Hukommelse fuld Fejl 2 skrives ud i displayet og diktafonen går i stoptilstand<br />
20 beskeder i hukommelsen Fejl 2 skrives ud i displayet og diktafonen går i stoptilstand<br />
Efter påbegyndt optagelse skal diktafonen kontrollere, om der foretages et knaptryk eller hukommelsen<br />
bliver fyldt op.<br />
Scenarie Forventet resultat<br />
Fri plads i hukommelsen Optagelse fortsætter<br />
Hukommelse fuld Fejl 2 skrives ud i displayet og diktafonen går i stoptilstand<br />
Ved knaptryk kontrolleres om det enten er pause- eller stopknappen, der er blevet påvirket.<br />
Scenarie Forventet resultat<br />
Pauseknappen påvirkes Optagelsen pauses<br />
Stopknappen påvirkes Optagelsen stoppes og diktafonen går i stoptilstand<br />
Andet knaptryk Fejl 1 skrives ud i displayet og optagelsen fortsættes<br />
I pausetilstanden afventer diktafonen et knaptryk. Ved knaptryk kontrolleres om det enten er<br />
optag, pause- eller stopknappen, der er blevet påvirket.<br />
Scenarie Forventet resultat<br />
Optageknappen påvirkes Optagelsen fortsættes<br />
Pauseknappen påvirkes Optagelsen fortsættes<br />
Stopknappen påvirkes Optagelsen stoppes og diktafonen går i stoptilstand<br />
Andet knaptryk Fejl 1 skrives ud i displayet og optagelsen forbliver pauset<br />
Opnås de forventede resultate,r kan der indtales en besked på diktafonen og testen anses som<br />
værende opfyldt.<br />
De resterende testcases udføres på ligende vis.<br />
29
Del<br />
Design II af<br />
diktafon<br />
31
Kapitel<br />
5<br />
Systemdesign<br />
På baggrund af foranalysen og kravspecifikationen opstilles et overordnet systemdesign, som<br />
siden opdeles i HW- ogSW-design. I dette systemdesign gives en systemoversigt, der indeholder<br />
de interagerende dele i det samlede system samt kommunikationen mellem disse, altså en<br />
oversigt over interne og eksterne grænseflader.<br />
Herefter opstilles der, udfra systemoversigten, en funktionsoversigt baseret på kravspecifikationen.<br />
Denne funktionsoversigt beskriver systemets hovedfunktion og tilhørende underfunktioner<br />
og deres indbyrdes kommunikation. Udfra funktionsoversigten opdeles systemet i en HW- og<br />
SW-del, og disses grænseflader defineres.<br />
5.1 Systemoversigt<br />
På figur 5.1 ses diktafonsystemets I/O-relationer med bruger og pc. Figuren er opstillet i forhold<br />
til kravspecifikationens afsnit 3.2.1.<br />
Pc<br />
5.2 Funktionsoversigt<br />
slette beskeder<br />
kvalitetsindstilling<br />
tale<br />
Diktafon<br />
tale<br />
Bruger<br />
trykknapper<br />
display Bruger<br />
Input<br />
Output<br />
beskeder<br />
Figur 5.1: I/O-relationer for diktafonsystemet<br />
Funktionsoversigten skal udfærdiges udfra tilstandsdiagrammet for diktafonen på figur 3.2.<br />
Funktionsoversigten ses på figur 5.2, og beskriver systemets funktioner og kommunikationen<br />
Pc<br />
33
Kapitel 5. Systemdesign<br />
mellem dem. Funktionerne fremkommer fra kravspecifikationen og systemoversigten. F.eks.<br />
fremkommer RS232-interfacet ud fra forudsætningerne i kravspecifikationens afsnit3.2.8. Display_styring<br />
kommer fra tabel 3.3. Fra systembeskrivelsen, afsnit 3.2.1, kommer Knapper, som<br />
er et sted, hvor data opstår. De øvrige funktioner tager analogt hermed udgangspunkt i kravspecifikationen.<br />
Implementeringen af flowkontrol vha. interrupt er gjort med System_kontrol.<br />
Denne funktion bestemmer udfra funktionernes interrupt-niveau, hvilke funktionskald, der er<br />
gyldige i de forskellige tilstande.<br />
Som understøttelse til funktionsoversigten er der tabellerne 5.1 og 5.2, som beskriver hhv. systemets<br />
funktioner og systemets registre.<br />
Pc-SW<br />
Data<br />
Diktafon-<br />
program<br />
Knap_<br />
styring<br />
Knapsignal<br />
Knapper<br />
Knaptryk<br />
Bruger<br />
Visuel infomation<br />
Operativsystem<br />
Instr.<br />
Instr.<br />
Display_status<br />
Display<br />
Data<br />
Display_status<br />
Display_<br />
styring<br />
Bruger<br />
Instr. Infomation<br />
Data<br />
pc<br />
Instr.<br />
Lyddata Instr. Kval<br />
RS232-interface<br />
Kval<br />
System_<br />
kontrol<br />
Instr.<br />
Diktafon-SW<br />
HW<br />
Optag_<br />
styring<br />
Lyddata<br />
Lyddata<br />
Lyddata Instr. Kval Lyddata<br />
Data<br />
Kval_data_<br />
overfør<br />
Info<br />
Lyddata<br />
Knap_status<br />
Instr.<br />
Instr.<br />
Data<br />
Data<br />
Instr.<br />
Afspil_<br />
styring<br />
Kval.<br />
Kvalitet_status<br />
Instr.<br />
Kval.<br />
Højttaler_<br />
styring<br />
CLK<br />
Højttalerspænding<br />
Instr.<br />
Kvalitet_<br />
styring<br />
Instr.<br />
Højttaler<br />
Lyd<br />
Mikrofon<br />
Lyddata Mikrofonspænding<br />
Instr. Mikrofon_<br />
styring<br />
Lyddata<br />
Bruger<br />
Figur 5.2: Funktionsoversigt for diktafonsystemet. Der er også angivet en opdeling mellem HW<br />
og SW. Firkantede kasser angiver, hvor data opstår eller ender. Ellipser angiver, hvor<br />
input transformeres til outputdata. De ikke-lukkede kasser angiver et register eller<br />
lager.<br />
Instruktionerne (Instr.), som er vist på figur5.2, mellem f.eks. System_kontrol og Optag_styring<br />
kan findes i tilstandsdiagrammet på figur 3.2. Hvis diktafonen er ved at optage, kan man trykke<br />
på for at pause og eller 00 11 for at optage igen. Ellers kan man trykke på for at stoppe<br />
optagelsen. Der henvises til sidstnævnte figur for instruktioner mellem de øvrige funktioner.<br />
Med hensyn til tryk på og , så er det System_kontrol, der opdaterer Lyddata-registeret, så<br />
det er det rette nummer, der bliver afspillet.<br />
34<br />
Lyd
Funktion Forklaring<br />
System_kontrol<br />
5.2. Funktionsoversigt<br />
¯ Aflæser information i Knap_status-registeret ved modtagelse<br />
af instruktion fra Knap_styring. Herudfra skal Afspil_styring<br />
og Optag_styring påvirkes.<br />
¯ Giver de datainformationer til Display_status-registeret, som<br />
ønskes vist i displayet (se tabel 3.3).<br />
¯ Hente information om antal beskeder fra Lyddata-registeret.<br />
Knap_styring Skal overvåge om der er foretaget knaptryk, og er dette tilfældet,<br />
skal den gemme den sidst trykkede knap i registeret Knap_status, og<br />
sende instruktion herom til System_kontrol.<br />
Display_styring Skal skrive indholdet af registeret Display_status ud på displayet.<br />
Kval_data_overfør Skal styre overførslen af indholdet af Lyddata-registeret til<br />
pc’en og overførslen af Kvalitet_status-registeret til diktafonen.<br />
Ændres kvaliteten fra pc’en, skal denne skrive til Kvalitet i<br />
Kvalitet_status-registeret.<br />
Afspil_styring Skal styre afspilningen af lyddata når funktionen påvirkes af System_kontrol.<br />
Dette skal foregå ved, at når Afspil_styring modtager<br />
instruktion om at sende lyddata, skal Afspil_styring sende instruktion<br />
til Højttaler_styring og derefter lyddata dertil.<br />
Højttaler_styring Skal konvertere lyddata fra Afspil_styring til en analog højttalerspænding,<br />
når der modtages instruks herom fra Afspil_styring. Hastigheden<br />
af denne konvertering styres af Kvalitet_styring.<br />
Optag_styring Skal styre optagelsen af lyddata, når funktionen påvirkes af System_kontrol.<br />
Optag_styring modtager instruktion om, at lyddata fra<br />
Mikrofon_styring er klar. Herefter afsender Optag_styring instruktion<br />
til Mikrofon_styring og modtager lyddata derefter.<br />
Mikrofon_styring Skal konvertere en analog spænding fra mikrofonen til en digital<br />
værdi, som skal sendes til Optag_styring, når instruktion herom modtages.<br />
Når data er klar sendes der besked herom til System_kontrol.<br />
Frekvensen af denne konvertering styres af Kvalitet_styring.<br />
Kvalitet_styring Skal ud fra Kvalitet_status styre hvilken hastighed Mikrofon_styring<br />
og Højttaler_styring skal konvertere med. Kvalitet_styring<br />
benytter en clock, CLK, til at styre samplingshastigheden<br />
med.<br />
RS232-Interface Skal varetage kommunikation mellem pc og Kval_data_overfør.<br />
Operativsystem Er den softwaremæssige grænseflade til pc.<br />
Diktafonprogram Softwareapplikation, som skal varetage funktionerne fra kravspecifikationens<br />
afsnit 3.3.2: slet lyddata, overførsel af lyddata og kvalitetsindstilling.<br />
Tabel 5.1: Forklaring af funktionerne på figur 5.2.<br />
35
Kapitel 5. Systemdesign<br />
Register Forklaring<br />
Knap_status Indeholder hvilken knap, der sidst er blevet påvirket.<br />
Display_status Indeholder de fejl, som skal skrives ud på displayet.<br />
Lyddata Indeholder lyddata, som kommer fra mikrofonen. Indholder også information<br />
om antal beskeder i registeret og længden af dem samt<br />
information og kvaliteten.<br />
Kvalitet_status Indeholder den valgte kvalitetsindstilling, der er blevet indstillet fra<br />
pc’en.<br />
Tabel 5.2: Forklaring af registre på figur 5.2.<br />
I forbindelse med kald af funktioner, spring mellem funktioner og tilgåelse af registre, findes<br />
der to mulige løsninger for flowkontrol: polling og interrupt.<br />
5.2.1 Flowkontrol<br />
Ved polling afventer man hele tiden, om en eller flere funktioner bliver aktiveret. Hvis en funktion<br />
bliver aktiveret, så afvikler man funktionen. Dette betyder, at den funktion, som først aktiveres,<br />
afvikles først. Denne flowkontrol tager ikke hensyn til funktionernes prioritet, men anvender<br />
"først til mølle-princippet. Ved et kig på funktionsoversigten på figur 5.2, kan denne<br />
situation i forbindelse med System_kontrol overvejes. Hvis man f.eks. trykker på 00 11 , så aktiveres<br />
funktionen Optag_styring og en sample gemmes i lyddata-registret. Denne procedure<br />
vil fortsætte indtil, Optag_styring finder ud af, at der er trykket på eller . Dette vil betyde,<br />
at Optag_styring er nødt til at kunne læse i Knap_status-registret. Derudover skal Optag_styring<br />
opdatere Display_status-registret, hvilket betyder, at Optag_styring bliver en<br />
slags System_kontrol, når denne er aktiveret. Altsammen betyder, at koblingen bliver meget stor<br />
og tætheden lille, som er uønsket i forbindelse med et systemdesign [Biering-Sørensen m. fl., 1996,<br />
s. 143].<br />
Figur 3.2 er karakteriseret ved, at bestemte knaptryk får diktafonen til at gå i bestemte tilstande.<br />
F.eks. betyder et tryk på , at diktafonen går i afspil-tilstanden, . I denne tilstand kan man<br />
f.eks. ikke trykke på 00 11 , da dette ikke kan lade sig gøre, når man afspiller. Derimod kan man<br />
trykke på f.eks. for at komme til pause-tilstanden, osv. Denne måde at kontrollere flowet<br />
på, altså ved at bestemte hændelser, f.eks. knaptryk, kun kan lade sig gøre i bestemte tilstande,<br />
er princippet i interrupt.<br />
Ved interrupt prioriteres hver funktion vha. af deres interruptniveau. Dvs. at det funktionskald,<br />
som har det højeste interruptniveau afvikles med det samme, når det bliver kaldt, og andre<br />
funktioner med lavere interruptniveau sættes i bero til deres interruptniveau er det højeste. Denne<br />
måde at kontrollere flowet på er egentlig det, som figur 5.2 lægger op til, da der er en lav<br />
kobling og stor tæthed. F.eks. har Optag_styring ikke kobling til Knap_status-registeret m.m.<br />
Her kommer System_kontrol til sin ret, da det er denne funktion, der styrer flowet.<br />
36
5.3. HW/SW opdeling<br />
Derfor vælges flowkontrollen styret vha. interrupt. Dog anvendes polling ved Display_styring<br />
og Kval_data_overfør. Polling anvendes ved Display_styring, da denne er diktafonens mindst<br />
kritiske funktion. Denne er derfor diktafonens vente-tilstand, og er kun aktiv, når alle andre funktioner<br />
ikke er aktive. Dette er illustreret i et tidsdiagram på figur5.3. Display_styring kontrollere<br />
desuden om pc’en ønsker at oprette forbindelse. Hvis dette er tilfældet kaldes Kval_data_overfør.<br />
Kval_data_overfør kaldes altså ved "inddirekte polling".<br />
Display_styring<br />
IRQ<br />
IRQ<br />
Knap_styring<br />
Afspil_styring<br />
Figur 5.3: Princippet i brug af interrupts. Funktioner med højeste interruptniveau afvikles først.<br />
Er der ingen interrupts, skrives der til displayet. Den zigzaggede linje er ensbetydende<br />
med programafvikling.<br />
5.3 HW/SW opdeling<br />
Dette afsnit indeholder begrundelse for den HW/SW opdelingen som ses på figur5.2. Diktafon-<br />
SW bygger på et mikrodatamatsystem med bl.a. CPU og hukommelse, som skal findes på diktafonen.<br />
Det vælges derfor at funktionen, System_kontrol, og håndteringen af lyddata skal foregår<br />
iSW.<br />
For at funktionerne Kval_data_Overfør, Afspil_styring og Optag_styring kan kommunikere<br />
med SW-funktionen, System_kontrol, registeret Lyddata, må funktionerne nødvendigvis være<br />
software.<br />
Displayet styres vha. SW, derfor skal funktionen, Display_styring, ligge i software. Det samme<br />
gælder for registeret,Display_status.<br />
Pc-SW består af det software, som skal styre kommunikation mellem pc og bruger, og mellem<br />
pc og diktafon samt at gemme og konvertere lyddata.<br />
De steder, hvor data opstår eller ender, dvs. Knapper, Display, Mikrofon, Højttaler, CLK og pc,<br />
er hardware, og kan ikke implementeres som software.<br />
Funktionen, Knap_styring, implementeres som hardware, da der skal være en styring, som sender<br />
det sidste knaptryk til Knap_status. Knapper indeholder ikke den fornødne HW til at kunne<br />
identificere sig selv. Registeret, Knap_status, implementeres ligeledes som hardware.<br />
Højttaler_styring og Mikrofon_styring skal være HW, da der kræves hhv. en D/A-konverter og<br />
en A/D-konverter for at konvertere digital data til og fra en analog spænding.<br />
37
Kapitel 5. Systemdesign<br />
RS232-interface implementeres som HW, da Diktafon-SW kræver HW for at kunne kommunikere<br />
med en pc.<br />
Funktionen, Kvalitet_styring, kan implementeres både som SW eller HW. I tilfælde af SW gøres<br />
dette ved polling dvs. der skal softwaremæssigt sendes instruktion til Højttaler_styring og<br />
Mikrofon_styring om, hvornår der skal samples. Det kræver processorkraft at få processoren<br />
til at holde øje med, hvornår der skal polles, og i tilfælde af bl.a. interrupt kan der ikke regnes<br />
med, at processoren poller til den rigtige tid. En kombineret HW/SW-løsning består i, at der er<br />
en ekstern clock, som sampler med den højeste frekvens. Det er så op til en SW-implementeret<br />
Kvalitet_styring at fortælle Afspil_styring og Optag_styring hvilke af disse samples, som skal<br />
benyttes. En HW-løsning er en styring, som ved hjælp af et lager, Kvalitet_status, modtager<br />
information om en ønsket clockneddeling af en ekstern clock. Derved angives, hvornår der skal<br />
samples. Dette vil betyde, at ingen samples kasseres. Den rene SW-løsning fravælges, fordi der<br />
spildes processorkraft ved polling. For at undgå at sample for ofte, hvis der optages i den dårligste<br />
eller mellemste kvalitet, fravælges den kombinerede HW/SW-løsning. Hermed falder valget<br />
på en ren HW-løsning. Registeret, Kvalitet_status, implementeres ligeledes som HW.<br />
5.4 HW/SW grænseflader<br />
Udfra SW/HW-opdelingen på figur 5.2 kan det ses, at funktionerne Afspil_styring, Optag_styring,<br />
Display_styring, Kval_data_overfør og System_kontrol er overgangsfunktioner mellem SW og<br />
HW. For hver funktion defineres input, funktion og output. Input, funktion og output er kun<br />
beskrevet i forhold til grænsefladen mellem HW og SW.<br />
Afspil_styring<br />
¯ Input: funktionskald fra System_kontrol.<br />
¯ Funktion: sørger for at lyddata bliver afspillet på det rigtige tidspunkt og med den rigtige<br />
kvalitet.<br />
¯ Output: lyddata og funktionskald til Højttaler_styring.<br />
Optag_styring<br />
¯ Input: funtionskald fra System_kontol, lyddata.<br />
¯ Funktion: sørger for at lyddata bliver optaget på det rigtige tidspunkt og med den rigtige<br />
kvalitet.<br />
¯ Output: funktionskald til Mikrofon_styring.<br />
Display_styring<br />
38<br />
¯ Input: funktionskald fra System_kontrol.<br />
¯ Funktion: sørger for at den rigtige information bliver skrevet ud på displayet.
5.4. HW/SW grænseflader<br />
¯ Output: Skriv_status(stop, afspil, optag, pause, spol frem, spol tilbage) se tabel3.5,<br />
Skriv_fejl(fejl1, fejl2, fejl3) se tabel3.4 og , Skriv_beskednr(0-?), Skriv_antalbeskeder(0-<br />
?), Skriv_tid(0-?), Skriv_længde(0-?), Skriv_friplads(0-?).<br />
Outputs er taget fra tabel 3.5, hvor næste besked, foregående besked og reset er udeladt, da disse<br />
instruktioner sker så hurtigt, at det ikke kan vises i displayet. Desuden er pc også udeladt, fordi<br />
brugeren kan se på pc’en, at der er kontakt. "?" i outputs betyder simpelthen, at beskederne kan<br />
antage variende værdier.<br />
Kval_data_overfør<br />
¯ Input: funktionskald fra System_kontrol. Instruktioner og kvalitet(0-3, 0=inaktiv, 1=dårligste<br />
kvalitet, 2=middel kvalitet, 3=bedste kvalitet) fra RS232-interface.<br />
¯ Funktion: sørger for overførsel af lyddata og kvalitetsindstillingen mellem pc og diktafon.<br />
¯ Output: kvalitet(0-3, 0=inaktiv, 3=bedste kvalitet), lyddata.<br />
Kvalitet er et output, der fortæller pc’en, hvilken kvalitet lyddata på diktafonen er optaget i,<br />
således at pc’en kan afspille den korrekt.<br />
System_kontrol<br />
¯ Input: Knaptryk, (0-10, 0=ingen knap, 1=optag, 2=stop, 3=afspil, 4=pause, 5=næste besked,<br />
6= foregående besked, 7=spol frem, 8=spol tilbage, 9=slet besked, 10=reset) se tabel<br />
3.1. Kvalitet(0-3, 0=inaktiv, 1=dårligste kvalitet, 2=middel kvalitet, 3=bedste kvalitet)<br />
¯ Funktion: sørger for at den korrekte funktion bliver aktiveret ved knaptryk og sætter og<br />
henter desuden også diktafonens kvalitet.<br />
¯ Output: funtionskald til Afspil_styring, Optag_styring, Display_styring og<br />
Kval_data_overfør.<br />
Operativsystem<br />
Grænsefladen, operativsystem, ligger på pc’en, og kommunikationsprotokollerne mellem Pc-<br />
SW og pc fastlægges af denne samt af en selvvalgt protokol.<br />
39
Kapitel<br />
6<br />
Hardwaredesign<br />
Dette kapitel skal skabe et overblik over HW-delens funktioner og deres input og output ud<br />
fra funktionsoversigten på figur5.2. Herefter opdeles funktionerne i passende moduler, og deres<br />
grænseflader defineres. Dette vil lede frem til figur6.2, hvorefter det enkelte modul kan designes.<br />
6.1 Strukturdesign<br />
For at kunne realisere funktionerne på figur 5.2, kræves der noget basalt hardware, som f.eks.<br />
CPU og hukommelse. Hardwaren består, ud over et mikrocomputersystem, af de hardwaremoduler,<br />
der er nødvendige for, at diktafonen opfylder kravspecifikationen. På figur6.1 ses hvilke HWfunktioner,<br />
der er nødvendige for at få diktafonen til at fungere.<br />
Knapper<br />
Mikrofon<br />
Knapmodul<br />
Mikrofonmodul<br />
Knap_styring<br />
Knap_status<br />
CPU &<br />
Mikrofon_ Højttaler_<br />
hjælpestyring<br />
styring<br />
kredsløb<br />
Kvalitet_<br />
styring<br />
Kvalitetsmodul<br />
Hukommelsesmodul<br />
Hukommelse<br />
(Lyddata)<br />
Kvalitet_<br />
status<br />
RS232-modul<br />
RS232 DB9<br />
interface stik<br />
CPU-modul<br />
Højttalermodul<br />
Displaymodul<br />
Display<br />
Højttaler<br />
Figur 6.1: Funktioner der er nødvendige for at få diktafonen til at opfylde kravspecifikationen.<br />
Disse funktioner indgår i forskellige moduler.<br />
40
6.1.1 Modulopdeling<br />
6.2. Modulgrænseflader<br />
For at kunne realisere diktafonen, deles dennes HW op i passende HW-moduler. Dette er gjort<br />
på figur 6.1. Dette gør det muligt at realisere modulerne hver for sig, når bare grænsefladerne<br />
imellem disse overholdes.<br />
6.2 Modulgrænseflader<br />
Grænsefladerne mellem de forskellige moduler på figur6.1 er beskrevet som signalerne mellem<br />
modulerne. Signalernes værdi dvs. om et signal f.eks. er aktivt højt eller lavt, bestemmes i<br />
meget høj grad af de komponenter, som bliver stillet til rådighed i dette projekt. Derfor tages der<br />
allerede i opdelingen højde for dette, for at undgå at skulle tilpasse signalerne senere.<br />
Det er blevet undersøgt hvilke komponenter, som er nødvendige i de forskellige moduler, for<br />
at det enkelte modul kan leve op til grænsefladen. Ud fra disse komponenter er de forskellige<br />
modulers grænseflader defineret.<br />
6.2.1 Interrupt-niveauer<br />
Før modulgrænsefladerne fastlægges, vil interrupt-niveauerne blive defineret, da disse skal anvendes<br />
ved definitionen af modulgrænsefladerne. Der komme interrupts fra knapmodulet og<br />
mikrofonmodulet. Det skal sikres, at mikrofonmodulet ikke bliver standset under optagelse,<br />
og derfor skal den have det højste interrupt-niveau. Den vælges til interrupt 4. Knapmodulets<br />
interrupt-niveau vælges til interrupt 3. Begge moduler får ligeledes et interrupt-acknowledgesignal<br />
(IACK), som modsvarer deres interrupt-niveau dvs. IACK3 til knapmodulet og IACK4<br />
til mikrofonmodulet.<br />
6.2.2 CPU-modul<br />
Dette modul er det centrale i diktafonen, og består udover processor og hjælpekredsløb af en<br />
ACIA, kaldet ACIA1. Denne gør det muligt at kommunikere med pc og derved køre debugger<br />
og monitor på diktafonsystemet. Næsten alle signaler skal ind og ud af CPU-modulet. Det styrer<br />
derfor overordnet alle andre moduler. Dog kan andre moduler påvirke CPU-modulet ved at<br />
sende interrupts. CPU-modulets ind- og udgange er i den følgende tabel defineret. Signalerne,<br />
der kommer ind og ud, skal netop passe med signalerne, som andre moduler skal sende eller<br />
modtage. Når CPU-modulet modtager et interrupt, sendes der et IACK-signal, som bekræfter,<br />
at interruptet bliver behandlet.<br />
R/W signalet anvendes, når der enten skal læses fra eller skrives til moduler. CPU-modulet<br />
bestemmer, om der skal læses eller skrives i et modul.<br />
41
Kapitel 6. Hardwaredesign<br />
Input<br />
Output<br />
6.2.3 Hukommelsesmodul<br />
Navn Type<br />
D00-D15<br />
Bus (16 bit)<br />
IRQ3 Aktiv lav<br />
IRQ4 Aktiv lav<br />
ROM1 (CS) Aktiv lav<br />
ROM2 (CS) Aktiv lav<br />
RAM1 (CS) Aktiv lav<br />
RAM2 (CS) Aktiv lav<br />
RAM3 (CS) Aktiv lav<br />
RAM4 (CS) Aktiv lav<br />
ACIA2 (CS) Aktiv lav<br />
KS (CS) Aktiv lav<br />
Display (CS) Aktiv høj<br />
FS (CS) Aktiv lav<br />
ADC (CS) Aktiv lav<br />
DAC (CS) Aktiv lav<br />
R/W Aktiv høj og lav<br />
D00-D15<br />
A01-A19<br />
E Clock<br />
Bus (16 bit)<br />
Bus (20 bit)<br />
Clock Clock<br />
IACK3 Aktiv lav<br />
IACK4 Aktiv lav<br />
Hukommelsesmodulet skal både indeholde ROM og RAM, for at softwaren kan fungere, og for<br />
at det er muligt at gemme data. Der er stillet 2 ROM-kredse og 4 RAM-kredse til rådighed i<br />
dette projekt, og der skal være et CS til hver kreds. Databussen er 16 bit bred, dette gør det muligt<br />
at tilgå hukommelsen på byte- og på wordniveau. Bredden af adressebussen bestemmes af<br />
størrelsen af RAM-kredsene, som har størrelsen 512k ¡ 8bit 2 19 bit dvs. 19 bit bred adressebus.<br />
42
6.2.4 RS232-modul<br />
Input<br />
Navn Type<br />
ROM1 (CS) Aktiv Lav<br />
ROM2 (CS) Aktiv Lav<br />
RAM1 (CS) Aktiv Lav<br />
RAM2 (CS) Aktiv Lav<br />
RAM3 (CS) Aktiv Lav<br />
RAM4 (CS) Aktiv Lav<br />
R/W Aktiv høj og lav<br />
D00-D15<br />
A01-A19<br />
Bus (16 bit)<br />
Bus (20 bit)<br />
Output D00-D15 Bus (16 bit)<br />
6.2. Modulgrænseflader<br />
Dette modul gør det muligt at kommunikere med en pc via dens COM-port. For at CPU-modulet<br />
kan kommunikere med RS232-modulet, skal der ligeledes være en ACIA,ACIA2. Der anvendes<br />
en 8 bit bred databus, da det derved er muligt at sende en byte ad gangen. Modulet skal have<br />
et adresseben, for at det er muligt at vælge at læse enten status eller data fra modulet. Modulet<br />
skal have et clocksignal kaldet E. Dette signal kommer fra CPU-modulet og har frekvensen 800<br />
kHz, svarende til en tiendedel af clocken på processoren.<br />
Input<br />
Navn Type<br />
ACIA2 (CS) Aktiv Lav<br />
R/W Aktiv høj og lav<br />
D00-D07<br />
A01<br />
Bus (8 bit)<br />
Bus<br />
E Clock<br />
Rx data RS232C<br />
Output D00-D07 Bus (8 bit)<br />
Tx RS232C<br />
43
Kapitel 6. Hardwaredesign<br />
6.2.5 Mikrofonmodul<br />
Modulet opsamler lyddata via en mikrofon, konverterer dataene ved hjælp af en A/D-konverter<br />
og sender derefter disse data ud på 8 bit af databussen. Tidspunktet, hvor dette sker, er styret af<br />
signalerne fra kvalitetsmodulet. Modulet skal sende et interrupt, når dataene er konverteret og<br />
klar til læsning. Dataene sendes derefter ud på databussen, når CPU-modulet vælger at læse fra<br />
mikrofonmodulet.<br />
6.2.6 Kvalitetsmodul<br />
Input<br />
Navn Type<br />
ADC (CS) Aktiv lav<br />
R/W Aktiv lav<br />
CLK_F Clock<br />
CLK_S Clock<br />
IACK4 Aktiv lav<br />
Lyd Lyd<br />
Output D00-D07 Bus (8 bit)<br />
IRQ4 Aktiv lav<br />
Outputtet skal være 2 signaler med variabel frekvens, som anvendes i højttaler- og mikronfonmodulet<br />
til at styre samplingsfrekvensen på A/D-konverteren. Ligeledes anvendes den variable<br />
frekvens til at styre filtrenes knækfrekvens. Frekvensen af signalerne er bestemt af signalerne,<br />
som højttaler- og mikronfonmodulet skal anvende til deres funktioner. CPU-modulet skal vha.<br />
CS, R/W og 2 bit af databussen kunne ændre frekvensen af signalerne.<br />
6.2.7 Højttalermodul<br />
Input<br />
Output<br />
Navn Type<br />
FS (CS) Aktiv Lav<br />
R/W Aktiv Lav<br />
D00-D01<br />
Bus(2 bit)<br />
CLK_F Clock<br />
CLK_S Clock<br />
Modulet skal kunne modtage 8 bit data fra databussen og konvertere dette til lyd vha. en D/Akonverter.<br />
Tidspunktet hvornår konverteringen sker, styres af interruptet fra mikrofonmodulet.<br />
CPU-modulet sender data til højttalermodulet vha. CS og R/W.<br />
44
6.2.8 Knapmodul<br />
Input<br />
Navn Type<br />
DAC (CS) Aktiv lav<br />
R/W Aktiv lav<br />
D00-D07<br />
Bus (8 bit)<br />
CLK_F Clock<br />
Output Lyd Lyd<br />
6.2. Modulgrænseflader<br />
Ved et knaptryk på en af de 10 knapper skal der sendes et interrupt. Det får CPU-modulet til at<br />
læse hvilken knap, der er påvirket vha. et CS og databussen. Da der altid skal læses fra enheden,<br />
tilføres R/W ikke. Knapmodulets interrupt-niveau er bestemt til at være 3 jf. afsnit6.2.1.<br />
6.2.9 Displaymodul<br />
Input<br />
Navn Type<br />
KS (CS) Aktiv lav<br />
Knaptryk Knaptryk (10<br />
stk.)<br />
IACK3 Aktiv lav<br />
Clock Clock<br />
Output D00-D03 Bus (4 bit)<br />
IRQ3 Aktiv lav<br />
Modulet anvender en 8 bit bred databus til at skrive til displayet, da det er et 8 bit display. Ligeledes<br />
modtager modulet et CS og et adresseben, der gør det muligt at vælge mellem instruktionseller<br />
dataregistret. Instruktionsregistret anvendes til at styre, hvor der skrives i displayet og der<br />
læses fra displayet for at undersøge om det er klar til at modtage data. De forskellige tegn hentes<br />
i dataregistret.<br />
45
Kapitel 6. Hardwaredesign<br />
Input<br />
Output<br />
6.3 Modulernes interface<br />
Navn Type<br />
Display (CS) Aktiv høj<br />
R/W Aktiv Lav<br />
A01<br />
D00-D07<br />
D00-D07<br />
Bus<br />
På figur 6.2 ses modulernes indbyrdes kommunikation.<br />
46<br />
Bus (8 bit)<br />
Visuel information<br />
Bus (8 bit)
R/W<br />
6.3. Modulernes interface<br />
Hukommelses-<br />
modul<br />
RS232-<br />
modul<br />
Display-<br />
modul<br />
IRQ3<br />
IACK3<br />
CPU-<br />
Databus<br />
Knap-<br />
IRQ3<br />
modul Adressebus<br />
modul<br />
IACK3<br />
IRQ4<br />
IACK4<br />
RAM1<br />
RAM2<br />
RAM3<br />
RAM4<br />
ROM1<br />
ROM2<br />
DAC<br />
ACIA2<br />
ADC<br />
R/W<br />
FS<br />
Display<br />
KS<br />
Mikrofon-<br />
modul<br />
Kvalitets-<br />
modul<br />
Højttaler-<br />
modul<br />
Figur 6.2: Hardwaremodulernes indbyrdes kommunikation.<br />
CLK_S<br />
CLK_F<br />
PC<br />
47
Kapitel<br />
7<br />
Softwaredesign<br />
I dette kapitel designes diktafonsystemets softwaredel ud fra funktionsoversigten på figur5.2<br />
og kravspecifikationen. Softwaredelen består af to dele: software til diktafonen og software<br />
til pc’en. Først vil der blive lavet et programdesign, som indeholder opdeling af software til<br />
processer, som er de overordnede byggesten i softwaren. Grænsefladerne mellem processerne<br />
defineres, og herefter opdeles processerne i mindre moduler.<br />
7.1 Programdesign<br />
Programdesignet opdeles i første omgang i diktafon-software og pc-software. Denne opdeling<br />
tager udgangspunkt i funktionsoversigten på figur5.2. Begge programdele har de eksterne grænseflader<br />
til hardware, der er defineret i afsnit 5.4.<br />
7.1.1 Procesopdeling<br />
Da systemet må anses for at være begrænset, vil en inddeling af systemet i processer tage udgangspunkt<br />
i den opdeling, der allerede er foretaget i funktionsoversigten på figur5.2. Procesinddelingen<br />
vil derfor ende med at blive følgende processer for diktafon-software:<br />
Optag_styring, Afspil_styring, Display_styring og Kval_data_overfør. Dette ses i på figur7.1.<br />
Der er ikke foretaget en inddeling af pc-softwaren, da den kun består af én proces, som det ses<br />
på figur 7.2.<br />
7.1.2 Procesgrænseflader<br />
De enkelte processers grænseflader vil her blive specificeret med hensyn til input og output.<br />
Dette bliver gjort ved at tage udgangspunkt i figur7.1 og 7.2 samt grænsefladerne i afsnit 5.4.<br />
Lyddata-register<br />
Lyddata-registeret indeholder foruden lyddata også information om, hvor i registeret lyddata er<br />
placeret. Informationen om placering er gemt som et array af datastrukturer, kaldet beskeder jf.<br />
figur 7.3. Desuden er der lydstatus, som indeholder information om lydkvalitet, antal beskeder,<br />
aktuelt beskednummer, aktuel tid i den aktuelle besked, resterende tid tilbage i hukommelsen,<br />
adresse på den sample, som skal afspilles/optages næste gang samt en slutpointer, der peger på<br />
den sidste brugte adresse i Lyddata-registeret. Opbygningen ses i figur7.3.<br />
48
RS-232interface<br />
Knap_<br />
styring<br />
Kvalitet_<br />
styring<br />
Display<br />
Kval_Data_<br />
overfør<br />
Kvalitet_status<br />
Display_status<br />
Display_<br />
styring<br />
System_<br />
kontrol<br />
Afspil_<br />
styring<br />
Optag_<br />
styring<br />
Lyddata<br />
Højttaler_<br />
styring<br />
Mikrofon_<br />
styring<br />
7.1. Programdesign<br />
Figur 7.1: Procesopdeling af diktafon-software. Ellipser angiver processer, ikke-lukkede kasser<br />
angiver et register og en firkantet kasse angiver hardware.<br />
Diktafon_<br />
program<br />
Operativ<br />
system<br />
Figur 7.2: Procesopdeling for pc-software.<br />
Lydstatus Beskeder<br />
Lyddata<br />
Kvalitet<br />
Antal beskeder<br />
Aktuel besked<br />
Aktuel adr.<br />
Aktuel tid<br />
Resterende tid<br />
Slut ptr.<br />
0<br />
1<br />
2<br />
19<br />
Start ptr.<br />
Minutter<br />
Sekunder<br />
Start ptr.<br />
Minutter<br />
Sekunder<br />
Start ptr.<br />
Minutter<br />
Sekunder<br />
Start ptr.<br />
Minutter<br />
Sekunder<br />
Figur 7.3: Organisering af Lyddata-register.<br />
49
Kapitel 7. Softwaredesign<br />
System_kontrol<br />
System_kontrol er den proces, som sørger for at organisere kommunikationen mellem de andre<br />
processer.<br />
Input<br />
Output<br />
Afspil_styring<br />
Kilde/destination Beskrivelse<br />
Knap_styring Besked om der er trykket på en knap, og hvilken<br />
knap det i så fald er.<br />
Mikrofon_styring Besked om at der skal modtages eller sendes en<br />
sample.<br />
Lyddata Information om lyddata jf. figur 7.3.<br />
Kval_data_overfør Besked om at forbindelse ønskes oprettet eller afbrudt<br />
fra pc.<br />
Afspil_styring Besked om at der skal afspilles en lydsample.<br />
Optag_styring Besked om at der skal optages en lydsample.<br />
Lyddata Retter i lydstatus i registeret, jf. figur 7.3, så der<br />
derved afspilles, optages, spoles, springes til andre<br />
numre eller slettes.<br />
Kval_data_overfør Information om at forbindelse til pc kan oprettes.<br />
Display_styring Besked om hvornår og hvad der skal skrives i displayet.<br />
Denne proces sørger for at sende lyddata fra Lyddata-registeret til Højttaler_styring.<br />
50<br />
Input<br />
Kilde/destination Beskrivelse<br />
System_kontrol Besked om at der skal afspilles en sample.<br />
Lyddata Lyddata<br />
Output Højttaler_styring Lyddata
Optag_styring<br />
7.1. Programdesign<br />
Denne proces modtager lyddata fra Mikrofon_styring og sender dette til Lyddata-registeret.<br />
Input<br />
Kilde/destination Beskrivelse<br />
System_kontrol Besked om at der skal optages en sample.<br />
Mikrofon_styring Lyddata<br />
Output Lyddata Lyddata<br />
Display_styring<br />
Denne proces skal modtage instruktion fra System_kontrol om, hvad der skal skrives og skrive<br />
dette ud på displayet.<br />
Input<br />
Output<br />
Kval_Data_overfør<br />
Kilde/destination Beskrivelse<br />
System_kontrol Information om nuværende tilstand.<br />
Dislay_status Fejl fra System_kontrol.<br />
Lyddata Informationer om antal beskeder, aktuel besked, aktuel<br />
tid og resterende tid jf. figur 3.11.<br />
Display Data der indeholder position og symbol, der skal<br />
skrives ud på displayet.<br />
Denne proces skal varetage kommunikationen til RS232-interface.<br />
Input<br />
Output<br />
Kilde/destination Beskrivelse<br />
System_kontrol Besked om at forbindelse til pc kan oprettes.<br />
RS232-interface Instruktioner fra pc.<br />
Lyddata Lyddata og information, kvalitet, lyddatas rækkefølge<br />
og nummer fra lydstatus jf. figur 7.3.<br />
RS232-interface Lyddata, information om kvalitet, lyddatas rækkefølge<br />
og nummer.<br />
System_kontrol Besked om at pc vil oprette forbindelse.<br />
Lyddata Tømning af Lyddata-register og opsætning af lydkvalitet.<br />
Kvalitet_status Sætter den ønskede kvalitet.<br />
51
Kapitel 7. Softwaredesign<br />
Pc-software<br />
Denne proces har til formål at styre pc’ens operativsystem, så der via RS232-interface kan<br />
kommunikeres med diktafonens software. Data, der kommer fra diktafonen, skal konverteres<br />
til wave-filer og gemmes. Processens grænseflader vil i dette tilfælde være operativsystemet.<br />
7.2 Procesdesign/modulopdeling<br />
Efter procesopdeling og fastlæggelse af processernes grænseflader skal de enkelte processer<br />
opdeles i moduler. Dette gøres, som det ses på figur 7.4. De på figuren viste moduler kommer<br />
dels af, at flowkontrollen styres vha. interrupts, og dels fra kravspecifikationens figur3.2.<br />
Interruptmodulet er en vektortabel, som CPU-en slår op i, hver gang den får et interrupt. Den<br />
kalder herefter de enkelte subrutiner svarende det modtagede interrupt. Interrupts kan komme<br />
fra Knap_styring eller Mikrofon_styring, og derfor er der et modul til at håndtere hver af disse<br />
interrupts, nemlig henholdsvis Behandl_knap og Lydkontrol. Tilstand-registret skal være<br />
der, så de førnævnte moduler kan finde ud af om de må udføre en handling. F.eks. må Slet ikke<br />
aktiveres, hvis diktafonen er i optagetilstand. SR-registret er CPU’ens statusregister, og dette<br />
skal kunne skrives til i det tilfælde, hvor den går i pc-tilstand, så interruptniveauet kan sættes til<br />
det højeste, således denne proces ikke kan afbrydes at et evt. knaptryk.<br />
Modulerne Reset, Slet, Spring, Pause kommer som følge af de, i kravspecikationen, opstillede<br />
krav til funktioner.<br />
Modulerne i processerne beskrives hver for sig, og deres grænseflader defineres.<br />
7.3 Afspil_styring<br />
7.3.1 Afspil<br />
Dette modul har til formål at hente data i Lyddata-registeret på den aktuelle adr. Derefter kalder<br />
den DAC_driver, som sørger for den videre lyddatabehandling.<br />
Input<br />
Kilde/destination Beskrivelse<br />
Lyd_kontrol Kald af afspil<br />
Lyddata Lyddata fra aktuel adr.<br />
Output DAC_driver Lyddata<br />
7.3.2 DAC_driver<br />
Dette modul modtager lyddata fra Afspil, og sender det videre til Højttaler_styring. DAC_driver<br />
skal interface med Højttaler_styrings D/A-konverter.<br />
52
Knap_styring<br />
RS-232-interface<br />
Mikrofon_styring<br />
Knap_status<br />
SR<br />
Interrupt<br />
Display_status<br />
Skriv_disp<br />
Display_<br />
driver<br />
Display<br />
Kval_Data_overfør<br />
Kval_data_<br />
overfør<br />
Behandl_<br />
knap<br />
Tilstand<br />
Display_styring<br />
Reset<br />
System_kontrol<br />
Kvalitet_status<br />
Slet<br />
Spring<br />
Lyd_kontrol<br />
Tidstæl<br />
Figur 7.4: Moduloversigt for diktafon-software.<br />
Optag<br />
7.3. Afspil_styring<br />
Afspil_styring<br />
Afspil<br />
Lyddata<br />
Optag_styring<br />
DAC_driver<br />
ADC_driver<br />
Højttaler_styting<br />
Data<br />
53
Kapitel 7. Softwaredesign<br />
Kilde/destination Beskrivelse<br />
Input Afspil Lyddata til DAC<br />
Output Højttaler_styring Lyddata<br />
7.4 Optag_styring<br />
7.4.1 Optag<br />
Dette modul har til formål at kalde ADC_driver og modtage lyddata fra denne og gemme det i<br />
Lyddata-registret på slut ptr. adresse.<br />
Input<br />
Output<br />
7.4.2 ADC_driver<br />
Kilde/destination Beskrivelse<br />
Lyd_kontrol Kald af optag<br />
A/D-konverter Lyddata fra A/D-konverter<br />
Lyddata Lyddata<br />
A/D-konverter Kald<br />
Dette modul bliver kaldt af Optag som derefter kalder mikrofon_styring. Herefter henter den<br />
lyddata fra mikrofon_styring og returner det til Optag.<br />
Input<br />
Output<br />
7.5 System_kontrol<br />
7.5.1 Interrupt<br />
Kilde/destination Beskrivelse<br />
Optag Kald<br />
Mikrofon_styring Lyddata<br />
Mikrofon_styring Kald<br />
Optag Lyddata<br />
Dette modul er nødvendigt for at kunne håndtere interrupts fra HW.<br />
Ved interrupt fra HW vil den afhængigt af interruptet kalde Behandl_knap (ved interrupt fra<br />
Knap_styring) eller Lyd_kontrol (ved interrupt fra mikrofon_styring). Hvis den er i pc-tilstand<br />
vil den ignorere interrupts, da interrupt-niveauet i dette tilfælde er det højeste.<br />
54
Input<br />
Output<br />
7.5.2 Behandl_knap<br />
Kilde/destination Beskrivelse<br />
SR Aktuel interruptniveau<br />
Knap_styring Interrupt<br />
Kvalitet_styring Interrupt<br />
Behandl_knap Kald<br />
Lyd_kontrol Kald<br />
7.5. System_kontrol<br />
Ved kald fra Interrupt-modulet skal modulet hente indholdet af Knap_status-registret og<br />
Tilstand-registret og sammenligne disse for at undersøge om knaptrykket er gyldigt jf. figur<br />
3.2. Ved gyldig knaptryk vil modulet ændre status i Tilstand-registeret. Hvis det er reset , slet<br />
eller forrige/næste-besked vil den kalde modulerne Reset, Slet eller Spring. Ved pause vil<br />
den blive i dette modul indtil næste knaptryk.<br />
7.5.3 SR<br />
Input<br />
Output<br />
Kilde/destination Beskrivelse<br />
Interrupt Kald<br />
Knap_status Aktuel knap<br />
Tilstand Aktuel tilstand<br />
Tilstand Ændring af tilstand<br />
Reset Kald (ved tryk på R )<br />
Slet Kald (ved tryk på )<br />
Spring Kald (ved tryk på knapperne / )<br />
Display_status Skriv fejl ved ugyldigt knaptryk<br />
Indeholder information om det aktuelle interruptniveau og hvilke mode CPU’en befinder sig<br />
i(Supervisor/usermode).<br />
7.5.4 Reset<br />
Ved kald fra Behandl_knap vil modulet undersøge, om der er indtalte beskeder, og hvis der<br />
er dette, slettes de. Herefter sætter modulet resterende tid til det maksimale for den aktuelle<br />
kvalitetsindstilling.<br />
55
Kapitel 7. Softwaredesign<br />
7.5.5 Slet<br />
Input<br />
Output<br />
Kilde/destination Beskrivelse<br />
Behandl_knap Kald<br />
Lyddata Information jf. figur 7.3<br />
Lyddata Slet alle beskeder og indstil resterende<br />
tid<br />
Ved kald fra Behandl_knap vil modulet undersøge, om der er indtalte beskeder. Er dette tilfældet,<br />
vil den slette sidste indtalte besked. Er der ingen beskeder, vil den sende fejl 3 (jf.afsnit5.4,<br />
til Display_status .<br />
Input<br />
Output<br />
7.5.6 Spring<br />
Kilde/destination Beskrivelse<br />
Behandl_knap Kald<br />
Lyddata Antal beskeder<br />
Lyddata Slet sidste besked<br />
Display_status Evt. fejl 3<br />
Ved kald fra Behandl_knap vil modulet undersøge, om der er indtalte beskeder, og er dette<br />
tilfældet, vil den tælle aktuel besked op eller ned. Hvis Spring kaldes med 1 skal den tælle<br />
aktuel besked en op, og hvis den kaldes med -1 skal den tælle aktuel besked en ned. Er der ingen<br />
beskeder, vil den skrive en fejl 3 jf. afsnit 5.4 i Display_status.<br />
Input<br />
Output<br />
7.5.7 Lyd_kontrol<br />
Kilde/destination Beskrivelse<br />
Behandl_knap Kald. 1 for næste besked og -1 for forrige<br />
besked<br />
Lyddata Antal beskeder<br />
Lyddata Aktuel besked op eller ned<br />
Display_status Evt. fejl 3<br />
Modulet kaldes af Interrupt og undersøger derefter Tilstand-registeret. Er tilstanden afspil,<br />
Spol, eller Optag, vil den udføre den tilhørende funktion. Ved tilstand stop, pause-afspil og<br />
56
7.5. System_kontrol<br />
pause-optag sker der ikke noget. Herunder forklares hvad der sker ud fra flowdiagrammerne i<br />
kravspecifikationen, afhængigt af tilstanden.<br />
Afspil<br />
Er tilstanden afspil, vil den undersøge om, der er beskeder. Er der ingen beskeder, vil den ændre<br />
tilstand til Stop, og sende fejl3 til Display_status. Er der beskeder, vil den ændre aktuel adr.<br />
til Start Ptr. på aktuel besked. Herefter kalder den Afspil i processen Afspil_styring. Så kaldes<br />
Tidstæl og herefter vil den ændre status i Tilstand-registeret til afspil_igang. Tilstanden<br />
afspil_igang defineres, fordi dette fortæller Lyd_kontrol og Tidstæl, at afspilningen nu er i<br />
gang og modulet derfor skal tage højde for dette. Næste gang Lyd_kontrol kaldes i tilstand<br />
afspil_igang, så tælles aktuel adr. én op, derefter kontrollerer den om den afspiller den sidste<br />
besked. Hvis dette er tilfældet skal den kontrollere om aktuel adr. er lig slut ptr. ellers skal den<br />
kontrollere om aktuel adr. er lig (aktuel besked + 1)’s start ptr.. Hvis et af de to ovenstående<br />
udtryk er sande, er beskeden slut og Tilstand-registrets status ændres til stop. Hvis den ikke er<br />
det, så kalder den Afspil. Herefter kaldes Tidstæl.<br />
Spol frem<br />
Ved spol frem skal den kontrollere, om aktuel adr. + 4 er større end eller lig med (aktuel besked<br />
+ 1)’s start ptr.. Ligeledes skal den kontrollere om aktuel adr. + 4 er større end slut ptr.. Hvis<br />
dette er tilfældet er beskeden slut og Tilstand-registerets status ændres til stop. Hvis dette ikke<br />
er tilfældet tælles aktuel adr. op med 4 dvs. hver 4. sample afspilles. Herefter kaldes Afspil.<br />
Til slut kaldes Tidstæl.<br />
Spol tilbage<br />
Ved spol tilbage skal den kontrollere, om aktuel adr. - 4 er mindre end aktuel besked’s start<br />
ptr.. Hvis dette er tilfældet, er beskeden ved start og Tilstand-registerets status ændres til stop.<br />
Hvis dette ikke er tilfældet tælles aktuel adr. ned med 4. Herefter kaldes Afspil. Til slut kaldes<br />
Tidstæl.<br />
Optag<br />
Er tilstanden optag, vil den undersøge, om der er plads i Lyddata-registret. Dette gøres ved at<br />
undersøge, om Antal beskeder er 20 eller slut ptr. større end sidste RAM-adresse. Er der ingen<br />
plads vil den ændre status i Tilstand-registret til stop, og sende fejl2 til Display_status. Er<br />
der plads, vil der blive oprettet en ny besked. Dette gøres ved at tælle slut ptr. op med én og sætte<br />
den nye beskeds start ptr. lig slut ptr.. Herefter tælles antal beskeder op med én og aktuel besked<br />
sættes til at pege på den nye besked. Optag i Optag_styring kaldes. Data vil nu blive gemt på<br />
slut ptr.’s adresse. Når den terminerer kaldes Tidstæl. Nu ændres status i Tilstand-register til<br />
Optag_igang. Dette gøres af samme grund, som afspil_igang. Næste gang Lyd_kontrol kaldes<br />
i tilstand optag_igang, vil den undersøge om der er plads i Lyddata-registret. Dette gøres ved at<br />
57
Kapitel 7. Softwaredesign<br />
undersøge, om slut ptr. +1 er større end sidste RAM-adresse. Er der ingen plads, vil den ændre<br />
status i Tilstand-registret til Stop og sende fejl2 til Skriv_disp. Er der plads, vil den tælle<br />
slut ptr. op med én og kalde Optag i Optag_styring og data vil blive gemt på den nye slut ptr.’s<br />
plads. Når der termineres fra Optag i Optag_styring, kaldes Tidstæl.<br />
Input<br />
Output<br />
7.5.8 Tidstæl<br />
Kilde/destination Beskrivelse<br />
Interrupt Kald<br />
Lyddata Adgang til alle informationer i Lyddata<br />
Tilstand Aktuel tilstand<br />
Lyddata Kan ændre alle informationer i Lyddata<br />
Display_status Fejlmeddelser<br />
Afspil Kald<br />
Optag Kald<br />
Tidstæl Kald<br />
Tilstand Ny tilstand<br />
Bliver kaldt af Lyd_kontrol. Ved kald henter den information om lydkvalitet fra Lyddata og<br />
tæller samples. Den undersøger desuden, hvilken tilstand diktafonen er i. Hvis tilstanden er<br />
afspil, og den har talt til 1 sekund, skal den tælle aktuel tid op med ét sekund eller evt. ét minut,<br />
hvis den er nået til 60 sekunder . Hvis tilstanden er optag, og den har talt til ét sekund skal den<br />
lægge ét sekund eller evt. ét minut til aktuel besked’s sekunder eller minutter. Desuden trækkes<br />
ét sekund eller evt. ét minut fra resterende tid i hukommelse. Hvis tilstanden er spolfrem, skal<br />
den det samme som i afspil-tilstand. Hvis tilstanden er spoltilbage, skal den gøre ligesom i<br />
afspil-tilstand bortset fra, at den skal trække tiden fra.<br />
Input<br />
7.5.9 Tilstand<br />
Kilde/destination Beskrivelse<br />
Lyd_kontrol Kald<br />
Lyddata Kvalitet<br />
Tilstand Aktuel tilstand<br />
Output Lyddata Opdatering af sekunder og minutter<br />
Indeholder infomation om hvilken tilstand diktafonen er i.<br />
58
7.6 Display_status<br />
Indeholder information om hvilken fejlkode, der evt. er aktiveret.<br />
7.7 Display_styring<br />
7.7.1 Skriv_disp<br />
7.6. Display_status<br />
Skriv_disp sørger for at formidle al information, der skal skrives i displayet videre. Den<br />
henter informationen fra henholdsvis Display_status, Tilstand og Lyddata-registret. Fra<br />
Display_status-registret får den information om en evt. fejlkode, fra Tilstand-registret får<br />
den information om den aktuelle tilstand og fra Lyddata-registret får den information om antal<br />
beskeder, aktuel besked, aktuel tid, længde af aktuel besked samt resterende tid i hukommelse.<br />
Hver gang den har skrevet ud i displayet, skal den kontrollere, om pc’en ønsker forbindelse.<br />
Hvis dette er tilfældet, skal den kalde Kval_data_overfør.<br />
Skriv_disp bliver eksekveret når CPU’en er i sin ventetilstand.<br />
Input<br />
Output<br />
7.7.2 Display_driver<br />
Kilde/destination Beskrivelse<br />
Tilstand Information i forbindelse med tilstand.<br />
Display_status Information i forbindelse med fejl.<br />
Lyddata Har adgang til information om lyddata.<br />
RS232C-interface Infomation om at pc’en ønsker forbindelse.<br />
Display_driver Information om hvad der skal skrives i displayet<br />
og hvor det skal skrives.<br />
Kval_data_overfør Kald (når pc’en ønsker forbindelse).<br />
Dette modul modtager information om, hvad der ønskes skrevet i displayet, og hvor det ønskes<br />
skrevet. Modulet sørger for at sende information, tegn for tegn, til displayet, om det som skal<br />
skrives.<br />
Input<br />
Output<br />
Kilde/destination Beskrivelse<br />
Skriv_disp Tegn som skal skrives og placeringen<br />
af dette.<br />
Display Værdi og plads for det tegn som skal<br />
skrives.<br />
59
Kapitel 7. Softwaredesign<br />
7.8 Kval_data_overfør<br />
7.8.1 Kval_data_overfør<br />
Dette modul har til formål at oprette forbindelse mellem pc, repræsenteret ved RS232C-interface,<br />
og diktafonen samt at indstille kvaliteten i Kvalitet_status og overføre lyddata til pc’en fra<br />
Lyddata.<br />
Modulet modtager et kald fra Skriv_disp. Kval_data_overfør undersøger om diktafonen<br />
er i stop-tilstand. Hvis dette er tilfældet sætter Kval_data_overfør interruptniveau til 5 og<br />
kommunikationen med pc’en gennem RS232C-interfacet begynder. Overførslen af kvalitet og<br />
lyddata foregår efter kommunikatinsprotokollen i appendiksG. Når overførslen er færdig, sættes<br />
interruptniveauet ned igen og funktionen terminerer.<br />
Hvis tilstanden ikke er stop, sendes et bytemønster, som angivet i protokollen.<br />
Input<br />
Output<br />
7.9 Pc-software<br />
Kilde/destination Beskrivelse<br />
Skriv_disp Kald (når pc’en ønsker forbindelse).<br />
RS232C-interface Data og instruktioner jf. protokol i appendiks<br />
G.<br />
Lyddata Lyddata.<br />
Skriv_disp Besked om at Kval_data_overfør<br />
slipper kontrollen over diktafonen.<br />
RS232C-interface Data jf. protokol i appendiks G<br />
Lyddata Sletning af lyddata, som er overført.<br />
Indstilling af ønskede kvalitet<br />
Kvalitet_status Indstilling af den ønskede kvalitet<br />
SR Sætter interruptniveau statusregisteret.<br />
Efter modulopdelingen af diktafon-softwaren vil der her blive foretaget samme opdeling af pcsoftwaren.<br />
Da der ønskes at pc-softwaren skal skrives til Linux, skal der først og fremmest<br />
sikres, at de rigtige kommunikationsprotokoller anvendes. Modulopdelingen foretages, som det<br />
ses på figur 7.5. Modulerne i processerne beskrives hver for sig, og deres grænseflader defineres.<br />
Ved hjælp af transaktionflowdiagrammet på figur 3.10, appendiks E og appendiks G, er det<br />
muligt at skrive de enkelte moduler, når grænsefladerne i det følgende overholdes.<br />
60
7.9.1 Main<br />
Opsæt_<br />
forbindelse<br />
Opret_<br />
forbindelse<br />
Slet_<br />
lyddata<br />
Check_<br />
diktafon Hent_<br />
data<br />
Main<br />
Kvalitet_<br />
indstilling<br />
Fejl_info<br />
Figur 7.5: Moduloversigt for pc-software.<br />
7.9. Pc-software<br />
Dette modul skal styre de andre moduler, og afhængigt af deres output skal det foretage nogle<br />
valg. Modulet skal foretage disse valg, således at figur3.10 overholdes.<br />
7.9.2 Opsæt_forbindelse<br />
Dette modul skal sørge for, at det, ved hjælp af en COM-port, er muligt at kommunikere med<br />
diktafonen. Derfor skal modulet kunne gøre følgende:<br />
¯ Gemme tidligere opsætning af COM-porten, og sætte COM-porten op som det kræves<br />
ved kommunikation.<br />
¯ Hente en byte fra COM-porten og levere den til et andet modul.<br />
¯ Sende en byte via COM-porten for et andet modul.<br />
¯ Lukke COM-porten og sætte COM-porten op til den tidligere opsætning.<br />
7.9.3 Opret_forbindelse<br />
Modulet skal sende en efterspørgsel til diktafonen, om at pc’en ønsker forbindelse. Derefter skal<br />
det vente på et svar om diktafonen enten er klar eller ikke klar. Modulet skal da returnere, om<br />
diktafonen er klar ellet ej.<br />
61
Kapitel 7. Softwaredesign<br />
7.9.4 Check_data<br />
Dette modul har til formål at hente antallet af beskeder på diktafonen samt kvaliteten disse er<br />
indtalt i. Antallet af beskeder og kvaliteten gemmes som globale variable på pc’en.<br />
7.9.5 Hent_data<br />
Modulet skal hente evt. lydbeskeder på diktafonen og gemme dem som wave-filer. Dette gøres i<br />
henhold til kravspecifikationen. Modulet skal oprette en undermappe til diktafon-mappen. Navnet<br />
på mappen skal angives således: "ddmmyy-hhmm". Hvor "dd" er datoen, "mm" måneden,<br />
"yy" året, "hh" timen og "mm" minutter. Wave-filerne skal da gemmes med fortløbende numre,<br />
således at den første besked hedder "besked1.wav" osv.<br />
Wave-filformatet er beskrevet i appendiks E. Der skal tages højde for de forskellige indstillinger<br />
af kvaliteten, samt varierende beskedlængder. Kvaliteten og antallet af beskeder findes i globale<br />
variable, længden af hver besked sendes som en header til den pågældende fil, dette gøres efter<br />
protokollen i appendiks G.<br />
7.9.6 Kvalitet_indstilling<br />
Dette modul skal ved et menu-system oplyse brugeren om den aktuelle kvalitetindstilling, og<br />
derefter give brugeren mulighed for at vælge den ønskede kvalitetsindstilling til diktafonen.<br />
Hvis brugeren ikke ønsker at indstille diktafonens optagekvalitet, skal pc-software-programmet<br />
afsluttes. Hvis brugeren derimod ønsker at indstille optagekvaliteten, skal funktionen sende en<br />
værdi svarende til den valgte kvalitet til diktafonen.<br />
7.9.7 Fejl_info<br />
Dette modul skal håndtere fejlbeskeder og brugerinformation. Modulet kan kaldes med forskellige<br />
oplysninger/fejl og skal afhængigt af værdien af disse skrive en besked ud på skærmen.<br />
7.9.8 Slet_lyddata_diktafon<br />
Modulet skal sende besked til diktafonen om at slette lagrede beskeder. Dette gøres for, at diktafonen<br />
sletter alle lagrede beskeder, når alt data er blevet overført til pc’en.<br />
62
Del<br />
Hardware- III design<br />
63
Kapitel<br />
8<br />
CPU-modul<br />
CPU-modulet er diktafonens centrale del, og skal styre diktafonens andre moduler.<br />
8.1 Funktionsoversigt<br />
CPU-modulet består af de blokke, som ses på figur 8.1. Mikroprocessoren er den enhed, som<br />
hele CPU-modulet er bygget op omkring. Denne kræver en 8 MHz clock og et reset/haltkredsløb,<br />
der sørger for at mikroprocessoren resettes ved opstart af systemet.<br />
IACK<br />
IRQ<br />
Reset/haltkredsløb<br />
IRQ-controller<br />
8 MHz clock<br />
DTACK-generator<br />
Mikroprocessor Adressedekoder<br />
VPA-generator ACIA1<br />
D00-D15<br />
Clock<br />
A01-A19<br />
Figur 8.1: Blokdiagram over CPU-modulet<br />
For at kunne adressere hukommelsesenheder eller perifere enheder, skal der være en adressedekoder,<br />
der ud fra adressen på adressebussen kan sende chipselect til den enhed, mikroprocessoren<br />
adresserer.<br />
Da perifere enheder kan sende et interrupt til CPU-modulet, skal der være en blok, der varetager<br />
denne funktion. Denne blok kaldes en IRQ-controller.<br />
Systemet kræver desuden en DTACK-generator, der kan sende et DTACK-signal til mikropro-<br />
CS<br />
R/W<br />
E<br />
65
Kapitel 8. CPU-modul<br />
cessoren, som er bestemmende for, hvornår der læses fra eller skrives til hukommelses- eller<br />
perifere enheder ved asynkron kommunikation.<br />
Ved brug af autovetoriserede interrupts skal der være en VPA-generator, der genererer et VPAsignal<br />
til CPU’en, når der sendes et interrupt fra en perifer enhed. Der er i appendiksC argumenteret<br />
for, at der benyttes autovektoriseret interrupt.<br />
Endelig skal der også være en ACIA1, der gør det muligt via en pc at køre en debugger og monitor<br />
på diktafonsystemet. ACIA1 i CPU-modulet og ACIA2 i RS232-modulet kræver desuden<br />
også, at der sendes et VPA-signal til processoren, da dette også angiver, at den kommende writeeller<br />
read-cycle foregår synkront.<br />
8.1.1 Funktionskrav<br />
CPU-modulet designes med en MC68000 mikroprocessor. Modulet skal kunne kommunikere<br />
med hukommelsesmodulerne og de perifere enheder.<br />
Mikroprocessoren kræver, at den, efter der er tændt for strømmen, modtager et reset. Desuden<br />
skal der implementeres en reset-knap, så mikroprocessoren kan resettes under udviklingen af<br />
softwaren. Resetpulsen skal have en længde på mindst 100 ms på RESET- og HALT-benet ved<br />
power up, og en længde på 10 clockcyles ved påvirkning af reset-knap [MC68000, side 10-12].<br />
Det skal være muligt at køre med en debugger, så der kan debugges på software. Dette kræver<br />
også, at der i forbindelse med IRQ-controlleren skal være mulighed for at sende et interrupt med<br />
den højst mulige prioritet, et NMI som får mikroprocessoren til at stoppe al programafvikling.<br />
8.2 Løsningsmuligheder<br />
8 MHz clock<br />
En 8 MHz clock kan realiseres ved en krystaloscillator eller et krystal, hvortil der skal designes<br />
en oscillator. Der vælges at realisere clocken som en krystaloscillator, da dette er det simpleste.<br />
Krystaloscillatoren behandles ikke nærmere. Selve opkoblingen af oscillatoren kan findes i<br />
diagram A. Opkoblingen er foretaget ud fra databladet [Krystal].<br />
Reset/halt-kredsløb<br />
Kredsløbet kan realiseres med en monostabil multivibrator og en knap med prelfjerner, hvor de<br />
to reset-signaler OR’es sammen til RESET- og HALT-benet. En anden mulighed er at benytte<br />
en spændingskomparator, der er beregnet til reset-kredsløb.<br />
Der vælges at benytte en spændingskomparator, da dette tilbyder den mest simple løsning, og<br />
derved spares en prelfjerner til reset-knappen. Der vælges at benytte kredsen TL7705A fra Texas<br />
Instruments, da denne findes i komponentudleveringen. Desuden vælges, at reset-pulsen har<br />
samme længde, ligegyldig om det er ved power-up eller påvirkning af resetknap.<br />
66
Adressedekoder<br />
8.2. Løsningsmuligheder<br />
En adressedekoder skal ud fra værdierne på adressebussen sende chipselect til den enhed, der<br />
adresseres. Dette kan realiseres ved hjælp af kombinatoriske logiske kredse eller en PEEL. Der<br />
vælges at realisere adressedekodningen ved PEEL’s, da dette giver det mindste antal kredse, og<br />
samtidig giver mulighed for let at ændre i adresser under udvikling.<br />
Interrupt-controller<br />
I appendiks C beskrives interrupts. Der er valgt at benytte autovektoriseret interrupt, da de perifere<br />
enheder dermed ikke behøver at sætte vektornummeret på databussen. Autovektoriseret<br />
interrupt kræver, at der sendes et signal til VPA-generatoren om, at VPA skal sættes i forbindelse<br />
med interrupt. Interrupt-controlleren skal være prioriteret, så der er mulighed for at sende<br />
et NMI med IRQ7. NMI skal kunne påvirkes med knaptryk, og da der ikke skal sendes flere<br />
NMI efter hinanden, skal der benyttes en prelfjerner på NMI-knappen. Denne prelfjerner kan<br />
implementeres med en S-R-latch eller et RC-led. Der vælges at benytte RC-leddet, da dette er<br />
simplest. Derudover skal NMI-knappen være aktiv lav, da interruptet er aktivt lavt.<br />
DTACK-generator<br />
Alle enheder, som er forbundet til processorens asynkrone del, der kan skrives til eller læses<br />
fra, skal sende et DTACK-signal til mikroprocessoren for at angive, at nu kan write- eller readcyclen<br />
afsluttes dvs. at enheden kan læse eller sende data indenfor den resterende del af writeeller<br />
read-cyclen. Da hukommelsesenhederne og de perifere enheder ikke kan sende et sådan<br />
signal, konstrueres en DTACK-generator, der ud fra hvilken enhed, der adresseres kan sende<br />
DTACK-signalet til mikroprocessoren på det rigtige tidspunkt. Se evt. appendiksB om timing<br />
af CPU. DTACK-generatoren realiseres ved en tilstandsmaskine i en PEEL.<br />
VPA-generator<br />
VPA-generatoren skal sende et VPA-signal til processoren, når der sendes et IACK. Dette signal<br />
skal holdes, indtil der ikke længere sendes IRQ eller IACK. Der skal også sendes et VPAsignal,<br />
hvis der chipselectes en af ACIA-kredsene, da VPA også benyttes til at angive, at der<br />
er tale om synkron dataoverførsel. VPA-generatoren skal bestå af kombinatorisk logik samt en<br />
tilstandsmaskine, der kan holde VPA indtil IACK går lav. Der vælges at benytte en PEEL, da<br />
dette giver den simpleste implementation og nem at ændre.<br />
ACIA1<br />
ACIA1 er en perifer enhed, der kommunikerer synkront med mikroprocessoren. ACIA1 er identisk<br />
med enheden, der beskrives i kapitel 10, og vil derfor ikke blive beskrevet her.<br />
ACIA1 har til formål at sørge for kommunikation med en pc ved hjælp af TS2MON.<br />
67
Kapitel 8. CPU-modul<br />
8.3 Design af CPU-modul<br />
Reset/halt-kredsløb<br />
Længden af den reset-puls, som skal sendes, vælges ved en ekstern kondensator, CRHT, sefigur<br />
8.5. Sammenhængen mellem kondensatorens størrelse og pulslængden ses i ligning 8.1<br />
[TL7705A, Fig. 7].<br />
4 V<br />
t 13 ¡ 10<br />
A ¡ CRHT CRHT <br />
t<br />
13 ¡ 10 4 V<br />
A<br />
0100s<br />
13 ¡ 10 4 V<br />
A<br />
Der vælges en kondensator på 10 µF, og derved bliver tiden, t, 130ms.<br />
Adressedekoder<br />
8µF 10µF (8.1)<br />
For at MC68000 kan fungere, skal de forskellige enheder adresseres. Derfor skal der vælges<br />
hvilken adresse, de forskellige enheder skal ligge på. I forbindelse med minimumssystemet<br />
anvendes følgende enheder.<br />
¯ ROM, der benyttes 2 stk 128 kB moduler.<br />
¯ RAM, der benyttes 4 stk 512 kB moduler.<br />
¯ UART, der benyttes en ACIA 6850 fra Motorola til kommunikation mellem pc og diktafon,<br />
så debugging/monitor kan foretages.<br />
Desuden anvendes der i diktafonsystemet andre perifere enheder, som også skal kunne adresseres<br />
af mikroprocessoren. Disse er:<br />
¯ Analog-Digital-konverter (ADC).<br />
¯ Digital-Analog-konverter (DAC).<br />
¯ Display (DISP), skal have 2 adresser, en til instruktionsregisteret og en til dataregisteret.<br />
¯ Kvalitetsmodul (FS), som skal kunne tilgås fra mikroprocessoren, således at det bliver<br />
muligt at vælge hvilken frekvens, der benyttes til samplings- og knækfrekvens for henholdsvis<br />
A/D-konverter og rekonstruktions- og antialiasingfiltret.<br />
¯ Knapmodul (KS), som skal kunne tilgås fra mikroprocessoren, for at denne kan finde ud<br />
af hvilken knap, der er blevet trykket på.<br />
¯ UART, der benyttes en ACIA 6850 fra Motorola til kommunikation mellem pc og diktafon.<br />
MC68000 har 16 databen, D00-D15, som kan benyttes enten som words dvs. D00-D15 eller som<br />
bytes dvs. D08-D15 eller D00-D07. Adresseringen foregår ved, at den byte, som er tilsluttet databussen<br />
på D08-D15, har en lige adresse, og den byte, som er tilsluttet D00-D07, har en ulige<br />
adresse.<br />
68
8.3. Design af CPU-modul<br />
Processoren har desuden 23 adresseben, A01-A23, som benyttes til at afgøre, hvilke enheder der<br />
tilgås. Internt i processoren findes også et adresseben, A00, men for at der kan tilgås enheder på<br />
enten word eller byte niveau, er A00 repræsenteret ved benene UDS og LDS. Disse ben angiver,<br />
ved at være aktive, om der er tale om benyttelse af hhv. en lige byte på de øvre databen, D08-<br />
D15, eller en ulige byte på de nedre databen, D00-D07. Hvis både UDS og LDS er aktive, tilgås<br />
et word på databussens D00-D15.<br />
Hvilke adresser de forskellige enheder ligger på, bestemmes til dels af monitoren, TS2MON Ver.<br />
1.2, da denne forudsætter, at der er placeret ROM i adresseområdet 1200h og RAM i adresseområdet<br />
04 0000h - 04 0CFFh [TS2MON, 2002]. ACIA1 skal tilsluttes D07-D00 og have adresserne<br />
80 0001h og 80 0003h. Desuden stiller IRQ-rutinen det krav, at når adressebenene, A04-A23 går<br />
høje, må der ikke chipselectes nogle enheder, da adressebenene, A01-A03, benyttes til at sende<br />
IACK til den eksterne enhed, der har sendt et interrupt.<br />
De øvrige enheder: 2 RAM-enheder, ADC, DAC, ACIA2, Display, Knapmodul og Kvalitetsmodul<br />
kan placeres på valgfrie adresser.<br />
D15-D08 D07-D00<br />
00 0000h<br />
00000000000000<br />
11111111111111<br />
00 1200h<br />
00000000000000<br />
11111111111111<br />
ROM 2 ROM 1<br />
00000000000000<br />
11111111111111<br />
04 0000h00000000000000<br />
11111111111111<br />
04 0CFFh00000000000000<br />
11111111111111<br />
00000000000000<br />
11111111111111<br />
RAM 2 RAM 1<br />
14 0000h<br />
00000000000000<br />
11111111111111<br />
00000000000000<br />
11111111111111<br />
20 0000h00000000000000<br />
11111111111111<br />
00000000000000<br />
11111111111111<br />
00000000000000<br />
11111111111111<br />
RAM 4 RAM 3<br />
30 0000h<br />
00000000000000<br />
11111111111111<br />
00000000000000<br />
11111111111111<br />
80 0001h00000000000000 11111111111111ACIA1<br />
kontrol-/statusregister<br />
80 0003h00000000000000 11111111111111ACIA1<br />
modtage-/senderegister<br />
00000000000000<br />
11111111111111<br />
80 0011h ACIA2 kontrol-/statusregister<br />
00000000000000<br />
11111111111111<br />
80 0013h00000000000000 11111111111111ACIA2<br />
modtage-/senderegister<br />
00000000000000<br />
11111111111111<br />
81 0001h00000000000000 11111111111111ADC<br />
00000000000000<br />
11111111111111<br />
00000000000000<br />
11111111111111<br />
82 0001h00000000000000 11111111111111DAC<br />
00000000000000<br />
11111111111111<br />
84 0001h00000000000000 11111111111111Display<br />
instruktionsregister<br />
00000000000000<br />
11111111111111<br />
84 0003h Display dataregister<br />
00000000000000<br />
11111111111111<br />
00000000000000<br />
11111111111111<br />
88 0001h00000000000000 11111111111111Kvalitet_status<br />
90 0001h00000000000000 11111111111111Knap_status<br />
00000000000000<br />
11111111111111<br />
00000000000000<br />
11111111111111<br />
Figur 8.2: Memorymap for systemet. De skraverede områder angiver adresseområder, som ikke<br />
benytttes. De tykke streger angiver, at der kun er tale om én adresse.<br />
Ud fra memorymappet på figur 8.2 kan man se, hvilke adresser, der benyttes til de forskellige<br />
enheder. Da mikroprocessorens adresseområde går langt ud over det antal adresser, som de<br />
nævnte enheder kræver, benyttes partiel adressedekodning, da dette giver mulighed for en relativ<br />
simpel adressedekodning. Dette gør, at der er adresseområder, som ikke kan benyttes, da de er<br />
reserveret af en enhed.<br />
69
70<br />
Tabel 8.1: Adressedekodningstabel for systemet. U angiver, at enheder udfylder adressen, men<br />
at bitten både kan have værdien 0 eller 1, mens enheder stadig aktiveres. X angiver<br />
don’t-cares.<br />
Adresseben<br />
Enhed<br />
A23 A22 A21 A20 A19 A18 A17 A16 A15 × A05 A04 A03 A02 A01 (A00) Adresse<br />
ROM1 0 0 0 0 0 0 U U U × U U U U U 1 00 0000h -<br />
ROM2 0 0 0 0 0 0 U U U × U U U U U 0 03 FFFFh<br />
RAM1 0 0 0 X U U U U U × U U U U U 1 04 0000h -<br />
RAM2 0 0 0 X U U U U U × U U U U U 0 13 FFFFh<br />
RAM3 0 0 1 0 U U U U U × U U U U U 1 20 0000h -<br />
RAM4 0 0 1 0 U U U U U × U U U U U 0 2F FFFFh<br />
ACIA1 1 0 0 0 0 0 0 0 0 × 0 0 0 0 0 1 80 0001h<br />
1 0 0 0 0 0 0 0 0 × 0 0 0 0 1 1 80 0003h<br />
ACIA2 1 0 0 0 0 0 0 0 0 × 0 1 0 0 0 1 80 0011h<br />
1 0 0 0 0 0 0 0 0 × 0 1 0 0 1 1 80 0013h<br />
ADC 1 0 0 0 0 0 0 1 0 × 0 0 0 0 0 1 81 0001h<br />
DAC 1 0 0 0 0 0 1 0 0 × 0 0 0 0 0 1 82 0001h<br />
Display 1 0 0 0 0 1 0 0 0 × 0 0 0 0 0 1 84 0001h<br />
instruktion<br />
Display data 1 0 0 0 0 1 0 0 0 × 0 0 0 0 1 1 84 0003h<br />
Kvalitet_status 1 0 0 0 1 0 0 0 0 × 0 0 0 0 0 1 88 0001h<br />
Knap_status 1 0 0 1 0 0 0 0 0 × 0 0 0 0 0 1 90 0001h<br />
IACK 1 1 1 1 1 1 1 1 1 × 1 1 U U U X<br />
Kapitel 8. CPU-modul
8.3. Design af CPU-modul<br />
Tabel 8.1 kan sammen med figur 8.2 benyttes til at opskrive logiske udtryk for chipselect til de<br />
enkelte enheder.<br />
For hukommelsesenheder gælder, at deres chipselect er aktivt lave, og at disse implementeres i<br />
én PEEL. Hukommelsesenhederne chipselectes ved UDS eller LDS, der angiver, om der adresseres<br />
en enhed på de øverste eller nederste databen.<br />
ROM1=A23 +A22 +A21 +A20 +A19 +A18 + LDS<br />
ROM2=A23 +A22 +A21 +A20 +A19 +A18 + UDS<br />
RAM1 = A23 +A22 +A21 + ROM1 + LDS<br />
RAM2 = A23 +A22 +A21 + ROM2 + UDS<br />
RAM3 = A23 +A22 + A21 + LDS<br />
RAM4 = A23 +A22 + A21 + UDS<br />
De perifere enheder aktiveres, når adressebenet, A23, går højt, og AS er aktiv. De perifere enheder<br />
må gerne chipselectes ved AS, da de kun har ulige adresser, og der derved ikke opstår<br />
konflikter. For ACIA’erne og Display’et gælder, at A01 har indflydelse på, hvordan enhederne<br />
skal aktiveres. Dette adresseben kan dog føres videre til et register-select, RS, på enhederne.<br />
Derfor betragtes A01 som et don’t-care. Dette fører til følgende perifere enheder med aktivt lave<br />
chipselect:<br />
ACIA1 = A23 ¡ A22 ¡ A20 ¡ A19 ¡ A18 ¡ A17 ¡ A16 ¡ A04 ¡ AS<br />
ACIA2 = A23 ¡ A22 ¡ A20 ¡ A19 ¡ A18 ¡ A17 ¡ A16 ¡ A04 ¡ AS<br />
ADC = A23 ¡ A22 ¡ A16 ¡ AS<br />
DAC = A23 ¡ A22 ¡ A17 ¡ AS<br />
FS = A23 ¡ A22 ¡ A19 ¡ AS<br />
KS = A23 ¡ A22 ¡ A20 ¡ AS<br />
Og displayet med aktivt højt chipselect:<br />
DISP = A23 ¡ A22 ¡ A18 ¡ AS<br />
Da alle adresseringer afhænger af at A22 er lav, er der sikkerhed for, at der ikke chipselectes<br />
enheder, når adressebenene A23-A04 er høje i forbindelse med interrupt.<br />
71
Kapitel 8. CPU-modul<br />
IRQ-controller<br />
I forbindelse med autovektoriseret interrupt, sender en enhed et IRQ-signal til en IRQ-encoder,<br />
der skal kode dette til mikroprocessorens IPL0 - IPL2 ben. Processoren afbrydes af interruptet,<br />
og placerer en funktionskode på FC0-FC2, hvor koden 7 angiver, at der sendes et IACK på<br />
adressebenene A01-A03.A04-A23 er logisk høje. Dette betyder, at interruptniveauet skal dekodes<br />
på A01-A03 ved en IACK-decoder. IACK-signalet sendes til den enhed, der har sendt interrupt,<br />
samtidig med at VPA skal aktiveres, da dette angiver, at der er tale om et autovektoriseret interrupt.<br />
Når enheder modtager IACK-signalet, skal disse fjerne IRQ, hvorefter VPA også skal<br />
fjernes.<br />
Der skal også være mulighed for, at man kan sende et IRQ7 ved en knap til processoren. Dette<br />
giver mulighed for at stoppe programafvikling, og finde ud af hvor i programmet processoren<br />
befinder sig. Der må ikke sendes et IRQ7 flere gange, så derfor skal denne forsynes med en<br />
prelfjerner. Derudover skal der ikke ventes på et IACK, før dette interrupt fjernes.<br />
IRQ-controlleren skal således bestå af 4 enheder:<br />
¯ IRQ-encoder<br />
¯ Funktionskode-decoder<br />
¯ IACK-decoder<br />
¯ NMI-knap<br />
IRQ-encoderen realiseres ved en 8-3 prioritetsencoder, 74LS148, da der skal være mulighed for<br />
at lave prioritering af de enkelte interrupts, så der altid sendes det højest prioriterede interrupt før<br />
de andre interrupts. Funktionskode-decoderen og IACK-dekoderen realiseres ved 3-8 decodere,<br />
74LS138.<br />
Funktionskode-decoderen skal sende et generelt IACK-signal til IACK-decoderen i forbindelse<br />
med en IACK-sekvens, når funktionskoden på FC0-FC2 er (1,1,1). Ved modtagelse af IACK<br />
sender IACK-decoderen signalerne IACK3 og IACK4 til de enheder, der har sendt interruptet.<br />
NMI-knappen realiseres som på figur 8.7. Ved tryk på knappen går IRQ7 lav og et inter-<br />
rupt sendes. RC-leddet fungerer som et lavpas filter med en knækfrekvens på fNMI knk 1<br />
1<br />
2π¡RNMI¡CNMI 1<br />
2π¡100 kΩ¡100 nF 16 Hz.<br />
DTACK-generator<br />
DTACK-generatoren skal, som beskrevet i appendiksB, sende et DTACK-signal, der skal komme<br />
før et bestemt tidspunkt under en read- og writecycle afhængigt af den adresserede enhed. Det<br />
ses i designafsnit for de enkelte moduler, at hukommelsesmodulet, A/D-konverteren, knapmodulet,<br />
kvalitetsmodulet og D/A-konverteren ikke kræver waitstates, hvorimod displayet kræver<br />
én waitcycle. Denne waitcycle realiseres ved en tilstandsmaskine, hvis tilstandsdiagram ses på<br />
figur 8.3. INIT er den tilstand, hvor der ikke sendes DTACK, men ventes på adressering af en<br />
enhed. Hvis hukommelsesmodulet, A/D-konverteren, knapmodulet, kvalitetmodulet eller D/Akonverteren<br />
adresseres, går maskinen i S0, hvor DTACK sættes og holdes, indtil der ikke adres-<br />
72<br />
τ
8.3. Design af CPU-modul<br />
seres en enhed længere, og der returneres til INIT igen. Hvis displayet adresseres, går maskinen<br />
til tilstand S1, og går ved næste clockcycle til S0, hvor DTACK sættes.<br />
En enhed<br />
er adresseret<br />
Ingen enheder adresseres<br />
S0<br />
DTACK=0<br />
Ingen enheder adresseres<br />
INIT<br />
DTACK=1<br />
ROM1-2, ’RAM1-4,<br />
ADC, DAC,<br />
KS, FS<br />
Display<br />
S1<br />
DTACK=1<br />
Figur 8.3: Tilstandsdiagram for DTACK-generatoren.<br />
DTACK-generatoren realiseres i en PEEL, hvor der benyttes D-flip-flops. Generatoren skal have<br />
et input, der angiver om hukommelsesmoduler adresseres, og et chipselect-input for hver af de<br />
perifere enheder. Derved kan der findes ud af, om der er nogle enheder, der adresseres. Selve<br />
tilstandsdiagrammet kodes i ABEL. ABEL-koden er vedlagt på cd-rom som "dtack.abl".<br />
VPA-generator<br />
VPA-generatoren realiseres ved en PEEL. Der skal sendes VPA, når der chipselectes en af<br />
ACIA-enhederne. Derfor gælder ligning 8.2 for VPA til ACIA1 og ACIA2.<br />
VPA ACIA1 ¡ ACIA2 (8.2)<br />
Desuden skal der laves en tilstandsmaskine, som sender VPA, når det sker, at IRQ og IACK er<br />
aktive. Dette VPA-signal skal holdes, indtil der ikke længere sendes IACK. Som IACK benyttes<br />
det generelle IACK, der sendes fra funktionskode-decoderen.<br />
Tilstandsmaskinen konstrueres efter tilstandsdiagrammet på figur 8.4 i PEEL’en, og dette kan<br />
kodes ind i ABEL. ABEL-koden er vedlagt på cd-rom som "vpagen.abl", og opkoblingen af<br />
VPA-generatoren udføres som i diagram A.<br />
8.3.1 Opkobling<br />
Reset/halt-kredsløb<br />
Kredsløbet kobles op, som det ses på figur 8.5. TL7705A har en indgang, SENSE, som skal<br />
kobles til forsyningen. Denne anvendes til at finde ud af, hvornår forsyningsspændingen overstiger<br />
3,6 V, og reset-sekvensen skal begynde. Der er en anden indgang, RESIN, som kobles til<br />
73
Kapitel 8. CPU-modul<br />
IACK=1<br />
INIT<br />
VPA =<br />
ACIA1 ¡ ACIA2<br />
S1<br />
VPA=0<br />
IACK=0<br />
((IACK ¡ IRQ3) + (IACK ¡ IRQ4) + IRQ7) = 0<br />
((IACK ¡ IRQ3) + (IACK ¡ IRQ4) + IRQ7) = 1<br />
Figur 8.4: Tilstandsdiagram for VPA-generatoren.<br />
forsyningen gennem en pull-up modstand, RRH2, således at RESIN er høj, når der ikke resettes.<br />
Desuden benyttes en kontakt, SWRH, som kan anvendes til at trække RESIN lav. Derved påbegyndes<br />
en reset-sekvens. For at TL7705A kan fungere, skal der benyttes en kondensator, CRH1,<br />
på 10 µF mellem stel og REF-indgangen, dette sikrer, at rippler i forsyningen ikke genererer et<br />
reset. Desuden forbindes en anden kondensator, CRHT, mellem CT-indgangen og stel. Denne<br />
kondensator er bestemmende for den tid, som reset-sekvensen varer.<br />
RRH2<br />
10k<br />
SWRH<br />
CRHT<br />
10µ<br />
7<br />
3<br />
1<br />
2<br />
TL7705A<br />
SENSE<br />
CT RESET<br />
REF<br />
RESET<br />
RESIN<br />
6<br />
5<br />
CRH1<br />
100n<br />
5V<br />
RRH1<br />
10k<br />
DRH1<br />
DRH2<br />
RRH3<br />
10k<br />
Figur 8.5: Opkobling af reset/halt-kredsløbet.<br />
RRH4<br />
10k<br />
19<br />
20<br />
MC68000<br />
HALT<br />
RESET<br />
TL7705A’s udgang, RESET, forbindes gennem en modstand, RRH1 på 10 kΩ, til stel. Den anden<br />
udgang, RESET, benyttes til reset af processoren. Udgangen forbindes gennem to dioder,<br />
DRH1 og DRH2, til RESET- og HALT-indgangene på processoren. Dioderne vender således,<br />
at TL7705A’s udgang går til diodernes katoder. Derved kan der udføres et software-reset fra<br />
processoren, uden det influerer på TL7705A’s operation. Indgangene på processoren er forsynet<br />
med pull-up modstande, RRH3 og RRH4.<br />
For RRH2 gælder, at den strøm som RESIN trækker, ikke må fremkalde et spændingsfald over<br />
RRH2, som er så stort, at RESIN går lav.<br />
74
RRH2maks VCC VIH<br />
IIN<br />
<br />
5V 2V<br />
20µA<br />
8.4. Test<br />
150kΩ (8.3)<br />
Minimumsværdi for RRH2 er bestemt af, at der ikke må løbe en større strøm gennem den end<br />
spændingsfaldet er mindre 3 V, når SWRH sluttes. Den vælges til 10 kΩ.<br />
Processoren giver mulighed for, at RESET og HALT kan aktiveres ved et såkaldt software-reset.<br />
I et sådan tilfælde skal det ikke være muligt, at RESET og HALT trækkes høje, når al den strøm<br />
som RESET og HALT trækker, går gennem pull-up modstanden. Der skal være et spændingsfald,<br />
som er stort nok til, at RESET og HALT går lave. Derfor eksisterer der minimumsværdier<br />
for pull-up modstandene, RRH3 og RRH4. Disse udregnes i ligning 8.4 og 8.5.<br />
RRH3min VCC V OL HALT<br />
I OL HALT<br />
RRH4min VCC V OL RESET<br />
I OL RESET<br />
<br />
<br />
5V 05V<br />
5mA<br />
5V 05V<br />
16mA<br />
900Ω (8.4)<br />
28kΩ (8.5)<br />
For pull-up modstandene gælder, at den strøm som RESET og HALT trækker, når de er høje,<br />
ikke må fremkalde et spændingsfald over pull-up modstandene, RRH3 og RRH4, såRESET og<br />
HALT går lave igen. Maksimumsværdier udregnes i ligning 8.6.<br />
RRH3maks RRH4maks VCC VIH 5V 2V<br />
150kΩ (8.6)<br />
IIN 20µA<br />
For RRH3 og RRH4 vælges en modstandsværdi på 10 kΩ, da dette overholder værdierne, som<br />
blev fundet i ligningerne 8.4-8.6.<br />
IRQ-controller<br />
Interruptkredsløbet kobles op, som det ses på figur8.6. Der monteres pull-up-modstande på 10<br />
kΩ på interrupt-encoderens indgange, så der ikke sendes utilsigtede interrupts til mikroprocessoren.<br />
8.4 Test<br />
I testrapport I foretages der målinger på reset/halt-kredsløbet. Det ses heraf, at de ønskede logiske<br />
niveauer overholdes, samt at RESET og HALT holdes lave i minimum 100 ns, når systemets<br />
strømforsyning tændes, eller når reset-knappen aktiveres.<br />
I førnævnte testrapport er det, vha. en PEEL-tester og herefter CPU’ens free-running-mode,<br />
blevet konstateret, at adressedekoderne virker.<br />
IRQ-controlleren sender interrupts 3, 4 og 7 til CPU’en, når disse interrupts kommer fra enhederne.<br />
NMI-knappen forårsager et IRQ, som får TS2MON til at skrive "TRAP" på terminalen,<br />
og indholdet af CPU’ens registre samt PC vises ligeledes.<br />
DTACK- og VPA-generatoren er testet på PEEL-tester, og fungerer ligeledes efter hensigten.<br />
75
Kapitel 8. CPU-modul<br />
76<br />
IACK3<br />
IACK4<br />
ACIA1<br />
ACIA2<br />
IRQ3<br />
IRQ4<br />
IRQ7<br />
VPAgenerator<br />
IACK0<br />
IACK1<br />
IACK2<br />
IACK3<br />
IACK4<br />
IACK5<br />
IACK6<br />
IACK7<br />
IACK<br />
GND<br />
IRQ1<br />
IRQ2<br />
IRQ3<br />
IRQ4<br />
IRQ5<br />
IRQ6<br />
IRQ7<br />
3-8<br />
liniers<br />
decoder<br />
IACK<br />
niveau<br />
decoder<br />
ENA<br />
ENB<br />
3-8<br />
liniers<br />
decoder<br />
Function<br />
code<br />
decoder<br />
8-3<br />
liniers<br />
priority<br />
encoder<br />
Interupt<br />
encoder<br />
IACK<br />
A01<br />
A02<br />
A03<br />
AS<br />
FC0<br />
FC1<br />
FC2<br />
VPA<br />
IPL0<br />
IPL1<br />
IPL2<br />
CPU<br />
Figur 8.6: Opkobling af interruptkredsløb og VPA-generator.<br />
RNMI<br />
NMI-knap<br />
5V<br />
100k<br />
CNMI<br />
100nF<br />
IRQ7<br />
Figur 8.7: NMI-knap med prelfjerner
8.5 Delkonklusion<br />
8.5. Delkonklusion<br />
CPU’en kan resettes vha. en ekstern kontakt, og ved opstart af systemet holdes RESET- og<br />
HALT-benet lavt i min. de krævede 100 ms. De eksterne enheder kan adresseres, som er en<br />
forudsætning for, at den udfærdigede SW kan fungere. De eksterne enheder har også mulighed<br />
for at sende interrupts til CPU’en, så de får rådighed over CPU’ens ressourcer, og CPU’en<br />
modtager de nødvendige kontrol-signaler, DTACK og VPA.<br />
77
Kapitel<br />
9<br />
Hukommelsesmodul<br />
Formålet med hukommelsesmodulet er at give mulighed for, at CPU-modulet kan benytte dette<br />
til at gemme lyddata. Desuden skal software og andre variable også gemmes i hukommelsen.<br />
9.1 Funktionoversigt<br />
Hukommelsesmodulet består af 2 ROM-kredse og 4 RAM-kredse. Modulet anvender adressebussen,<br />
A01-A19, databussen, D00-D15, R/W og chipselect til hver kreds som input. Som output<br />
benyttes databussen, D00-D15.<br />
9.1.1 Funktionskrav<br />
Det kræves af modulet, at dette kan kommunikere med CPU-modulet dvs. timingdiagrammerne<br />
i appendiks B skal overholdes. Desuden skal TTL-niveauerne overholdes.<br />
TS2MON stiller krav til modulet om, at der skal være ROM og RAM, der kan tilgås på både<br />
byte- og wordniveau, derfor skal hukommelsen fordeles således, at hele databussen, D00-D15,<br />
kan benyttes.<br />
9.2 Løsningsmuligheder<br />
Der kan benyttes flere forskellige løsningsmuligheder for organisering af ROM og RAM. Der<br />
er krav om, at hele databussen benyttes, så derfor vælges det at organisere hukommelsen, så<br />
ROM- og RAM-kredse optræder på samme adressekombinationer af A01-A19, men på upper<br />
eller lower data strobe. Hvilken kreds der addreseres, bestemmes ud fra chipselect.<br />
9.3 Design af hukommelsesmodul<br />
En stor del af designet er givet ved TS2MON og CPU-modulet. Der vælges at benytte 2 ROMkredse<br />
af typen Am29F010B-90, der indeholder 128 k ¡ 8 bit. Det er kredse, der overholder TTLniveauer,<br />
og derved er spændingsniveauet overholdt [AM29F010B, side 20]. Desuden overholdes<br />
timingdiagrammet for en readcycle, da navnet ’-90’ angiver, at det maksimalt tager 90 ns<br />
fra kredsen modtager et chipselect, til der sendes data ud på databussen. De 2 ROM-kredse organiseres<br />
i samme adresseområde på D00-D15. Den ene kreds tilgås på de ulige adresser, mens<br />
78
9.3. Design af hukommelsesmodul<br />
den anden tilgås på de lige. Med hensyn til adresseringen af enheder henvises til afsnittet om<br />
adressedekodning ved CPU-modulet i kapitel 8.<br />
Som RAM-kredse vælges 4 kredse af typen KM684000BLP-7L. Dette er RAM-moduler på<br />
512k ¡ 8 bit. Disse er TTL-kompatible, og derved overholdes spændingsniveauerne [KM684000B,<br />
side 92]. Kredsene overholder også timingdiagrammerne i appendiksB, da navnet ’-7L’ angiver,<br />
at der kan skrives eller læses fra enheden 70 ns efter enheden har modtaget chipselect. RAMmodulerne<br />
organiseres i 2 blokke ligesom ROM-modulerne, da der derved dækkes både lige og<br />
ulige adresser. Den øvrige adressering behandles af CPU-modulet, kapitel8.<br />
79
Kapitel<br />
10<br />
RS232-modul<br />
Formålet med dette modul er at kunne skabe forbindelse til en pc, således det vil være muligt at<br />
indstille lydkvaliteten på diktafonen og overføre tidligere indtalte beskeder til pc’en.<br />
10.1 Funktionoversigt<br />
Da der i projektforslaget blev lagt op til at benytte RS232C-standarden til kommunikation mellem<br />
diktafonsystemet og en pc, er dette modul baseret på denne. RS232-modulet skal sende<br />
data fra diktafonsystemet til en pc og modtage data fra en pc til diktafonen. Princippet er vist på<br />
figur 10.1. Her ses det, at data til og fra diktafonen kommer til modulet på databen D00-D07 og<br />
fra en pc på benene RxD og TxD. Desuden er der en række kontrolsignaler, som modulet skal<br />
anvende: Til at læse fra og skrive til modulet, skal modulet anvende et chipselect, ACIA2, fra<br />
den perifere adressedekoder, et R/W, A01 samt E-clock’en fra CPU’en. Selve modulet består af<br />
tre dele: et modul til at styre kommunikationen til og fra diktafonen, et modul til at tilpasse signalerne<br />
mellem TTL-niveauerne og RS232C-standardens niveauer, altså en driver, og et modul<br />
til at styre kommunikationshastigheden.<br />
80<br />
D00<br />
D01<br />
D02<br />
D03<br />
D04<br />
D05<br />
D06<br />
D07<br />
A01<br />
Databus buffer<br />
ACIA2<br />
Registerkontrol<br />
RW<br />
E<br />
Sende<br />
register<br />
Modtage<br />
register<br />
Status<br />
register<br />
Kontrol<br />
register<br />
ACIA<br />
Sende<br />
skifte-register<br />
Modtage<br />
skifte-register<br />
Interrupt<br />
logik<br />
RS232-Driver<br />
Baudrate<br />
Generator<br />
Figur 10.1: Funktionsdiagram for RS232-modul.<br />
RxD<br />
TxD
10.1.1 Funktionskrav<br />
10.2. Design af RS232-modul<br />
Da der fra starten er blevet valgt, at kommunikationen mellem diktafonen og pc’en skal overholde<br />
RS232-standarden bliver kommunikationen parallel til seriel set fra diktafonens side.<br />
Dette ses også ud fra funktionsdiagrammet. Baudraten skal være 115,2 kbps i henhold til forudsætningerne<br />
i kravspecifikationen.<br />
10.1.2 Valg af løsning<br />
Kommunikationsmodul: Opbygning af dette modul med logiske kredse vil blive alt for kompliceret<br />
og derfor realiseres dette modul ved at benytte en færdig kreds. Til dette formål<br />
benyttes der en 6850 ACIA. Dette er en kreds, der er specielt fremstillet til at varetage<br />
seriel kommunikation til en MC68000 processor. Den er ligeledes til rådighed i komponentudleveringen.<br />
Driver: Dette modul realiseres ligeledes med en færdig kreds, da dette er den simpleste løsning.<br />
Til formålet anvendes en RS232 fra Maxim kaldet MAX232A. Denne er i stand til<br />
henholdsvis at tilpasse TTL-niveau til RS232C-niveau og RS232C-niveau til TTL-niveau.<br />
Hastighed: Dette modul opbygges som clocken til CPU’en dvs. med en krystaloscillator.<br />
10.2 Design af RS232-modul<br />
Det grundlæggende i RS232-modulet er læse at fra eller skrive til databussen, og sende og<br />
modtage data et bit af gangen. Dette styres ved hjælp af skifteregistre, der netop kan sende og<br />
modtage et bit af gangen. For at kunne kontrollere og ændre på opsætningen af kommunikationen<br />
findes der registre, som det også er muligt henholdsvis at skrive til eller læse fra. Styringen<br />
af hvilke registre, der skal anvendes, sker ved hjælp af "Register-kontrol", som udover et CS,<br />
R/W ogA01, også får clocksignalet, E, fra CPU-modulet. Data sendes asynkront og derfor er<br />
modulet ikke afhængig af en clock.<br />
10.2.1 Opkobling af ACIA<br />
ACIA’en kan opsættes på flere måder. Det vælges her, at opsætning skal være en minimumsopsætning,<br />
da dette vil simplificere både opkoblingen og programmeringen senere. For at lave<br />
en minimumsopkobling skal ACIA’en opkobles som på figur 10.2. ACIA’en har 3 chipselect,<br />
CS0, CS1 og CS2, men til minimumsopsætningen skal der kun anvendes èt chipselect og derfor<br />
sættes CS0 og CS1 til forsyning. Da det ligeledes ikke er nødvendigt at tage hensyn til Data Carrier<br />
Detect (DCD), som anvendes til at validere data, som sendes til ACIA’en fra pc’en, sættes<br />
denne til stel. Til sidst kobles Request-to-Send (RTS) og Clear-to-Send (CTS) sammen. Dette<br />
resulterer i, at når pc’en sender en forespørgsel om at sende data til diktafonen, får den signalet<br />
tilbage som et klarsignal. Denne form for kommunikation kaldes "loopback handshaking".<br />
Receiver clock, RxCLK og Transmitter clock, TxCLK, kobles sammen og herefter til clocken.<br />
Det, at de to clocks forbindes, gør at data sendes og modtages med samme hastighed.<br />
81
Kapitel 10. RS232-modul<br />
Der er to ACIA’er i diktafonsystemet og begge opkobles på samme måde.<br />
10.2.2 Opkobling af RS232-driver<br />
RS232-driveren opkobles som foreskrevet i databladet [MAX232]. Dette ses på figur 10.2.<br />
D00<br />
D01<br />
D02<br />
D03<br />
D04<br />
D05<br />
D06<br />
D07<br />
A01<br />
RW<br />
E<br />
MC6850<br />
6<br />
2<br />
TXDATA RXDATA<br />
22<br />
D0<br />
21<br />
D1<br />
20<br />
D2<br />
19<br />
D3<br />
18<br />
D4<br />
17<br />
D5<br />
16<br />
D6<br />
15<br />
D7<br />
7<br />
IRQ<br />
5<br />
RTS<br />
3<br />
RXCLK<br />
4<br />
TXCLK<br />
24<br />
CTS<br />
23<br />
DCD<br />
14<br />
E<br />
11<br />
RS<br />
13<br />
R/W<br />
8<br />
CS0<br />
10<br />
CS1<br />
9<br />
CS2<br />
10.2.3 Opkobling af clock<br />
5V<br />
1,8423 MHz<br />
Krystal-oscilator<br />
CAC3<br />
5V<br />
CAC2<br />
CAC5<br />
CAC1<br />
8<br />
R2IN<br />
10<br />
T2IN<br />
MAX232<br />
1<br />
C1+<br />
3<br />
9<br />
C1- R2OUT<br />
4<br />
C2+<br />
5<br />
C2-<br />
2<br />
7<br />
V+ T2OUT<br />
6<br />
V-<br />
CAC4<br />
Figur 10.2: Opkobling af RS232-modul.<br />
Clock’en bliver designet som clock’en til CPU’en. ACIA’en har indbygget en deling af clock’en<br />
på 1, 16 eller 64. Der benyttes en clock på 1,8432 MHz og en deling på 16, hvilket giver en<br />
hastighed, baudrate, på 115,2 kbps.<br />
10.3 Delkonklusion<br />
Det er ikke muligt at teste på RS232-modulet alene, da dette kræver at den omkringliggende<br />
hardware dvs. CPU-modulet og hukommelsesmodulet. Desuden skal der skrives software, der<br />
muliggør kommunikation mellem pc og diktafon.<br />
82<br />
5<br />
4<br />
3<br />
9<br />
8<br />
7<br />
2<br />
1<br />
6
Kapitel<br />
11<br />
Mikrofonmodul<br />
Modulet har til formål at opsamle lyddata via en mikrofon, og konvertere det sample for sample<br />
til 8 bit digital data. Dataene sendes ud på databussen, så CPU-modulet kan læse disse, og<br />
gemme dem i hukommelsesmodulet.<br />
11.1 Funktionsoversigt<br />
Modulet består af blokkene, som er vist på figur 11.1. Der ses, at modulet er styret af to andre<br />
moduler, kvalitetsmodulet og CPU-modulet.<br />
Kvalitetsmodulet sender to clocksignaler, CLK_S og CLK_F, der henholdsvis angiver, hvornår<br />
der skal tages en sample, og den tilhørende knækfrekvens til antialiasingfiltret.<br />
CPU-modulet skal modtage et interrupt, IRQ4, når det analoge signal er klar. CPU-modulet<br />
svarer med et IACK4, der skal medføre, at interruptet fjernes igen, se endvidere appendiksC<br />
om interrupts. Derefter skal CPU-modulet ved hjælp af et R/W og et CS kunne læse værdien af<br />
den enkelte sample.<br />
I modulet findes også et højpasfilter, der skal fjerne lavfrekvent støj. For at A/D-konverteren skal<br />
kunne modtage signalerne fra antialiasingfilteret, skal disse tilpasses således, at signalet svinger<br />
omkring de rigtige niveauer for A/D-konverteren.<br />
CLK_F<br />
CLK_S<br />
Forstærker<br />
11.1.1 Funktionskrav<br />
Højpasfilter<br />
Antialiasingfilter<br />
Spændingstilpasning<br />
Figur 11.1: Blokdiagram for mikrofonmodulet.<br />
ADC<br />
R/W ADC(CS)<br />
D00-D07<br />
IACK4<br />
Der stilles yderlige krav til modulet om, at A/D-konverteren skal kunne nå at konvertere analog<br />
data til digital data hurtigt nok. Dette vil sige, at denne skal kunne konvertere data, og derefter<br />
aflevere dem til CPU-modulet, inden for én clockcycle af CLK_S.<br />
For at A/D-konverteren kan sende sine data korrekt til CPU-modulet, skal A/D-konverteren<br />
IRQ4<br />
83
Kapitel 11. Mikrofonmodul<br />
kunne overholde en readcycle, som er beskrevet i appendiksB.1.<br />
Antialiasing opstår, når der samples med en frekvens, der er under det dobbelte af den øvre grænsefrekvens<br />
på det, som der samples, ifølge Nyquists samplingssætning [Oppenheim/Schafer, 1999,<br />
side 146], se desuden appendiks A. Derfor er de valgte clocksignaler i kvalitetsmodulet tilpasset<br />
således, at kravspecifikationen og Nyquists samplingssætning er overholdt. Derfor skal antialiasingfiltret<br />
sørge for, at indgangssignalets effektivværdi er dæmpet ned til eller under kvantiseringsstøjen<br />
ved den halve samplingsfrekvens [Harmark, 2003].<br />
Der skal desuden indføres et højpasfilter, der har en knækfrekvens ved 300 Hz, som ligeledes<br />
er valgt i kravspecifikationen. Der ønskes en dæmpning på minimum 60 dB ved 50 Hz, da evt.<br />
støj fra forsyningen med en amplitude på maksimalt 15 V da bliver dæmpet til 15 mV, der ligger<br />
under det mindst betydende bit. Støjen vil altså ikke få nogen indvirkning på konverteringen af<br />
talesignalet.<br />
11.2 Design af mikrofonmodul<br />
11.2.1 Mikrofon<br />
Den anvendte mikrofon er en WM-034B fra Panasonic [WM-034B]. Dette er en elektreret kondensatormikrofon,<br />
som er opbygget med en tynd metalmembran, der er placeret med en afstand<br />
på 5-20 µm foran en fast metalelektrode. Metalelektroden forspændes og herefter kan membranen<br />
sendes i svingninger med lydbølger. Når membranen svinger, ændres kapaciteten og talesignalet<br />
vil derved fremkomme [Ståbi, 1995]. Pga. høj impedans kræves der en forforstærker<br />
eller en impedansomsætter til mikrofonen. I den valgte mikrofon er der indbygget en impedansomsætter.<br />
Mikrofonen skal ifølge databladet kobles op med en modstand, RMF1, på22 kΩ og kondensator,<br />
CMF1, på 33 pF. Det er dog ved forsøg, se testrapport II, blevet bestemt at anvende en<br />
kondensator på 470 nF i stedet, da dette gav et bedre resultat. Grunden til, at der opnås et bedre<br />
reultat med en større kondensator er, at kondensatoren sammen med indgangsimpedansen, Zi,<br />
i det efterfølgende trin danner et 1. ordens højpasfilter, dette ses på figur 11.2. Ved målinger<br />
anvendes et oscilloskop med en indgangsimpedans på 1 MΩ.<br />
84<br />
Mikrofon<br />
RMF1<br />
5V<br />
CMF1<br />
Figur 11.2: Opkobling af elektreret kondensatormikrofon.<br />
Zi
Ved en kondensator på 33 pF får dette filter en knækfrekvens på:<br />
f0 <br />
1<br />
2π ¡ Zi ¡ CMF1<br />
<br />
1<br />
48 kHz<br />
2π ¡ 1MΩ ¡ 33 pF<br />
11.2. Design af mikrofonmodul<br />
Herved dæmpes størstedelen af talesignalets frekvenskomposnater, hvilket jo er uønsket. Ved en<br />
kondensator på 470 nF får filteret derimod denne knækfrekvens:<br />
f0 <br />
1<br />
2π ¡ Zi ¡ CMF1<br />
<br />
1<br />
034 Hz<br />
2π ¡ 1MΩ ¡ 470 nF<br />
Herved bibeholdes talesignalets frekvenskomposanter. I praksis ser kondensatoren, CMF1, ind<br />
i en operationsforstærker med en indgangsimpedans på Zif =Zi 1 Aβ 1MΩ, hvorZi er<br />
operationsforstærkerens indgangsimpedans på 1 TΩ [TLE2072], A er 100000 og β er tilbagekoblingsfaktoren.<br />
Da denne indgangsimpedans er mange gange større end 1 MΩ vil dette<br />
betyde, at der ikke bortfiltreres noget af signalet. Det har altså ingen praktisk betydning, om der<br />
anvendes en kondensator på 33 pF eller 470 nF. Kondensatorværdien på 470 nF har dog gjort<br />
det muligt at måle den signalamplitude, som mikrofonforstærkeren ser.<br />
11.2.2 Mikrofonforstærker<br />
Ud fra forsøg, se testrapport II, er det blevet bestemt, at der skal ske en forstærkning af udgangssignalet<br />
fra mikrofonen på 20 gange. Forstærkeren realiseres ved hjælp af en inverterende<br />
kobling på en operationsforstærker. Som operationsforstærker er valgt TLE2072, hvilket er to<br />
operationsforstærkere sat sammen i én kreds. Den anden del anvendes i additionskoblingen i<br />
spændingstilpasningen, afsnit 11.2.5. Opkoblingen af mikronforstærkeren er vist på figur11.3.<br />
Vo<br />
RMF2<br />
Figur 11.3: Mikrofonforstærkeren opkoblet som inverterende forstærker på en operationsforstærker.<br />
Forstærkingen bestemmes som forholdet mellem RMF3 og RMF2, hvor der skal gælde:<br />
RMF3<br />
RMF2<br />
−<br />
+<br />
RMF3<br />
RMF3 vælges til 476 kΩ. RMF2 bestemmes udfra ligning 11.1.<br />
RMF2 RMF3<br />
20<br />
Vo<br />
20 (11.1)<br />
476kΩ<br />
20<br />
23 8kΩ (11.2)<br />
85
Kapitel 11. Mikrofonmodul<br />
Den endelige opkobling er vist på diagram B, hvor RMF2 er realiseret ved hjælp af en fast<br />
modstand, RMF2, på 23,2 kΩ, og et potentiometer, RMF2A, på 4,7 kΩ. Da udgangen ser ind i en<br />
kondensator på det efterfølgende trin, behøves der ikke at tages højde for offset.<br />
11.2.3 Højpasfilter<br />
Som tidligere nævnt, ønskes det at begrænse frekvensbåndet. Den nedre grænsefrekvens er valgt<br />
til 300 Hz. Til at sørge for, at der sker en dæmpning af de frekvenser, som ligger under de 300<br />
Hz, indføres der et højpasfilter. Der vælges at konstruere et 4. ordens filter med en Butterworth<br />
filterkarakteristik, da dette ikke har rippler i hverken stop eller pasbåndet [Sedra/Smith, 1998,<br />
side 893]. Dette realiseres ved koble to ens 2. ordens "Sallen & Key" filtre i serie.<br />
I Appendiks D vil overføringsfunktionen for et af disse filtre blive udledt og komponent størrelser<br />
vil blive beregnet ved sammenligning med standardligningen (i frekvensdomænet) for et 2.<br />
ordens højpas filter. Filteret skal da kobles op som vist på figur11.4. Filteret giver en dæmpning<br />
på ca. 62,5 dB ved 50 Hz, og opfylder dermed funktionskravet. Dæmpningen er bestemt ved:<br />
Vi<br />
CHP1<br />
47n<br />
CHP2<br />
47n<br />
RHP1<br />
18,7k<br />
11.2.4 Antialiasingfilter<br />
RHP2<br />
6,65k<br />
AdB 20log H s sj¡2π¡50<br />
+<br />
−<br />
CHP3<br />
47n<br />
CHP4<br />
47n<br />
RHP3<br />
18,7k<br />
Figur 11.4: Opkobling for højpasfiltret.<br />
Følgende afsnit er baseret på [Harmark, 2003]. Antialiasingfiltret skal, som nævnt i afsnit11.1.1,<br />
sørge for, at aliasing undgås. Dette gøres ved at dæmpe indgangssignalets effektivværdi ned til<br />
eller under kvantiseringsstøjen ved den halve samplingsfrekvens.<br />
Et talesignal har sin største effektivværdi ved 400 Hz. I det aktuelle tilfælde er den 2 Vp <br />
05Vef f,daVef f Vp<br />
4<br />
RHP4<br />
6,65k<br />
for talesignaler [Oppenheim/Schafer, 1999, side 197]. Desuden falder<br />
talesignalets amplitude med stigende frekvenser, og dets effektivværdi er ved 4 kHz faldet 20<br />
dB.<br />
Kvantiseringsstøjens effektivværdi, Nef f, er bestemt ved følgende, hvor VADC betegner A/Dkonverterens<br />
arbejdsområde, 0-5 V, og n er bitopløsningen af denne:<br />
86<br />
Nef f Npp<br />
2 Ô VLSB<br />
<br />
3 2 Ô 3<br />
VADC<br />
2 n 1<br />
2 Ô 3<br />
VADC<br />
2 8 1<br />
2 Ô 3<br />
5V<br />
255<br />
Ô 12 566 mVeff<br />
+<br />
−<br />
Vo
11.2. Design af mikrofonmodul<br />
Talesignalets effektivværdi ved 4 kHz er 50 mVeff, da der er sket en dæmpning på 20 dB af<br />
signalet ved 400 Hz. Forholdet mellem effektivværdien af talesignalet og kvantiseringsstøjen,<br />
SNR, ved 4 kHz bliver altså:<br />
SNR Vtalesignal<br />
Nef f<br />
<br />
50 mV<br />
883 19 dB<br />
566 mV<br />
Der skal altså være en yderligere dæmpning af talesignalet på 19 dB for at få det ned under<br />
kvantiseringsstøjen.<br />
Det er vha. matlab-filen, "filterberegning.m", som er vedlagt på cd-rom, vist, at hvis denne<br />
dæmpning skal overholdes, skal der enten benyttes et 14. ordens Butterworth filter, et 5. ordens<br />
Chebyshev filter eller et 3. ordens Elliptisk filter.<br />
Der vælges at anvende et MAX297 swithed capacitor filter, da dette giver mulighed for regulering<br />
af knækfrekvenser ved hjælp af en ekstern clock, CLK_F. Det valgte filter opfylder<br />
ovennævnte krav, da dette er et 8. ordens elliptisk filter. Selvom der vælges at benytte et elliptisk<br />
filter, der har en "dårlig" fasekarakteristik, har dette ingen indvirkning på talesignalet, da det<br />
som tidligere nævnt er frekvensindholdet, der er vigtigt for forståelse af tale. Opkoblingen af<br />
dette filter er vist på diagram B, hvor det ses, at der er indsat clampdioder (Schottkydioder med<br />
spændingsfald på 0,3 V) i indgangen. Dette er gjort, da filtret ifølge databladet ikke kan tåle<br />
spændinger, der er større end 0,3 V ud over forsyningsspændingen [MAX297, side 2].<br />
11.2.5 Spændingstilpasning<br />
A/D-konverterens maksimale arbejdsområde er 0V-5V,ogdasignalet svinger omkring 0 V<br />
med en ampitude på ¦ 2,5 V, skal signalet løftes med 2,5 V. Dette realiseres med en inverterende<br />
additionskobling på en operationsforstærker. Signalet adderes med -2,5 V, da koblingen<br />
inverterer signalet. Den inverterende additionskobling er vist på figur11.5.<br />
RAD4<br />
RAD5<br />
-5V<br />
−<br />
+<br />
Vref<br />
Vi<br />
RAD1<br />
RAD2<br />
Figur 11.5: Spændingstilpasning ved hjælp af en inverterende additionskobling på en operatonsforstærker.<br />
Modstandenes størrelse bestemmes ud fra, at der ønskes en forstærkning på 1. Derfor skal forholdet<br />
mellem RAD1 og RAD3 være 1. Det bestemmes, at Vref vælges til at være - 2,5 V, dette<br />
bevirker, at forholdet mellem RAD2 og RAD3 skal være 1. Modstandene RAD1, RAD2 og RAD3<br />
sættes til 10 kΩ.<br />
−<br />
+<br />
RAD3<br />
Vo<br />
87
Kapitel 11. Mikrofonmodul<br />
Vref kan bestemmes af en spændingsdeling af 2 lige store modstande, disse modstande kan vælges<br />
til at være 100 gange mindre end RAD2, så der kan ses bort fra disse modstande i beregningen<br />
af forstærkningen. Denne løsning med modstandværdier på 100 Ω forbruger en konstant strøm<br />
på 25 mA, dette strømforbrug formindskes ved at sætte RAD4 og RAD5 til 10 kΩ og indføre en<br />
spændingsfølger til at holde Vref på -2,5 V.<br />
11.2.6 A/D-konverter<br />
A/D-konverteren skal sættes op, så denne kan sende et interrupt, når den er færdig med konverteringen<br />
af data. Ifølge databladet [ADC0820] skal den sættes op i WR-RD-mode. Efter<br />
afsendelse af interrupt, venter den på signal om at sende dataene ud på databussen. På figur11.6<br />
ses, hvordan timingen for A/D-konverteren skal se ud.<br />
CS<br />
WR<br />
RD<br />
INT<br />
D00-D07<br />
tWR<br />
tINTL<br />
tRD<br />
tacc2<br />
tINTH<br />
t1H t0H<br />
Figur 11.6: Readcycle for A/D-konverter i WR-RD mode. [ADC0820]<br />
Som det ses af figur 11.6, skal CS-indgangen være lav, når der skal startes en konvertering, og<br />
der læses data. Det influerer ikke på konverterens funktion, hvis CS er lav hele tiden. Selve<br />
konverteringen starter på WR’s nedadgående flanke, og konverteringens output sendes til A/Dkonverterens<br />
interne latch på WR’s opadgående flanke. Herefter går INT lav, dette kan benyttes<br />
som interrupt til CPU-modulet. Efter INT er gået lav, afventes at RD går lav. Når RD går lav, latches<br />
konverterens output ud på databussen. Når RD eller CS går høj fjernes data fra databussen.<br />
INT går høj tidligst tINTH efter RD’s opadgående flanke, eller når CS går høj.<br />
Det ses af timingdiagrammet på figur 11.6 og tabel 11.1, hvilke tider, som skal overholdes i forbindelse<br />
med A/D-konvertering og læsning af data. Hvis tiderne skal overholdes, skal konverteren<br />
opkobles som på figur 11.7, hvor WR angiver, hvornår der skal påbegyndes en konvertering,<br />
og RD forbindes til ADC (CS). Da RD eller CS’s opadgående flanker resulterer i nulstilling af<br />
INT, vælges at CS forbindes til CLK_S, da konverteren så er aktiv, hver gang CLK_S er lav.<br />
Da CLK_S er lav imellem 62,5 µs og250µs, er der tid nok til, at hele A/D-konverteringen og<br />
læsningen fra konverteren kan foregå indenfor denne tid.<br />
For at A/D-konverteren skal kunne interface med kvalitetsmodulet, som giver en clock med en<br />
dutycycle på 50%, skal der laves tilpasning af signalet, i en MMV, som giver en puls ud, hvor<br />
88
Tekst Symbol Tid<br />
Skrivetid tWR 600 ns - 50 µs<br />
Læsetid tRD min. 600 ns<br />
WR høj til INT lav tINTL maks. 1300 ns<br />
RD lav til gyldig data tacc2 maks. 150 ns<br />
RD høj til INT høj tINTH maks. 225 ns<br />
RD høj til data ugyldig t1H t0H maks. 200 ns<br />
Tabel 11.1: Tider ved A/D-konvertering<br />
11.2. Design af mikrofonmodul<br />
længden ikke er afhængig af inputtet. A/D-konverteren fjerner ikke interruptet, når der modtages<br />
et IACK, derfor skal der indsættes noget kontrol logik, der kan tage sig af dette. A/D-konverteren<br />
kobles op som vist på 11.7.<br />
I tabel 11.1 ses, at der maksimalt går 150 ns fra konverterens RD går lav, til der kommer data<br />
på databussen. Det er hurtigt nok i forhold til ligningB.1 i afsnit B.1. Derfor kræver læsning fra<br />
A/D-konverteren ikke indsættelse af waitcycles.<br />
Fra AA-filter<br />
CLK_S<br />
ADC(CS)<br />
11.2.7 MMV<br />
MMV<br />
5V<br />
5V<br />
ADC0820<br />
13<br />
1<br />
7<br />
6<br />
8<br />
12<br />
11<br />
CS<br />
VIN<br />
MODE<br />
WR<br />
RD<br />
VREF(+)<br />
VREF(-)<br />
INT<br />
OFL<br />
DB0<br />
DB1<br />
DB2<br />
DB3<br />
DB4<br />
DB5<br />
DB6<br />
DB7<br />
9<br />
18<br />
2<br />
3<br />
4<br />
5<br />
14<br />
15<br />
16<br />
17<br />
D00<br />
D01<br />
D02<br />
D03<br />
D04<br />
D05<br />
D06<br />
D07<br />
Interuptlogik<br />
Figur 11.7: Opkobling af ADC med MMV og kontrol logic.<br />
Af tabel 11.1 ses også, at den tid, som WR skal være lav, tWR, for at konverteringen bliver<br />
nøjagtig, skal være mellem 600 ns og 50 µs. Da WR er et signal, som styres af CLK_S, der<br />
er lav imellem 62,5 µs og 250 µs, kan CLK_S ikke sættes direkte til WR. Derfor designes en<br />
MMV.<br />
Som MMV benyttes en tilstandsmaskine designet i en PEEL. Tilstandsdiagrammet for denne<br />
er vist på figur 11.8. Den får clocksignalet fra krystallet, som processoren også anvender. Dette<br />
giver tiden, i ligning (11.3), da WR er lav i 6 tilstande.<br />
IACK4<br />
IRQ4<br />
89
Kapitel 11. Mikrofonmodul<br />
CLK_S = 0<br />
S6<br />
WR=0<br />
11.2.8 Interrupt logik<br />
tRW 6 ¡<br />
S7<br />
WR=1<br />
S5<br />
WR=0<br />
1<br />
6 ¡ 125ns 750ns (11.3)<br />
8MHz<br />
CLK_S = 1<br />
CLK_S = 1<br />
INIT<br />
WR=1<br />
S4<br />
WR=0<br />
CLK_S = 0<br />
S1<br />
WR=0<br />
S3<br />
WR=0<br />
Figur 11.8: Tilstandsdiagram for MMV.<br />
Når CPU-modulet modtager IRQ4, svarer denne ved at sende et IACK4-signal, som skal få<br />
IRQ4 til at gå høj. Dette klares ved en tilstandsmaskine, som skal have tilstandsdiagrammet, der<br />
ses på figur 11.9. Dette konstrueres i en PEEL, da dette er den simpleste løsning på problemet.<br />
INT=0<br />
INT = 1<br />
S2<br />
IRQ4 = 1<br />
INT=1<br />
INIT<br />
IRQ4 = 1 INT=0<br />
IACK = 0<br />
S1<br />
IRQ4 = 0<br />
S2<br />
WR=0<br />
IACK = 1<br />
Figur 11.9: Tilstandsmaskine, der skal håndtere IRQ4 og IACK4 i forhold til CPU’en.<br />
Principppet er, at når tilstandsmaskinen modtager et INT fra A/D-konverteren, skal maskinens<br />
IRQ4-udgang gå lav. Når IACK4-indgangen går lav, fordi CPU’en sender signalet, skal maskinen<br />
sørge for, at IRQ4 går høj, og ikke bliver lav før INT har været høj og går lav igen.<br />
11.2.9 Opkobling<br />
Opkoblingen af A/D-konverteren og dens hjælpekredsløb er vist på diagram B, hvor der inden<br />
A/D-konverteren er indsat en rail-rail operationsforstærker opkoblet som en spændingsfølger.<br />
90
11.3. Test<br />
Dens indgange er beskyttet af 2 clampdioder, så spændingen ikke kan overstige dennes forsyning.<br />
Forstærkeren er forsynet med 5 V. Dette kredsløb fungerer som beskyttelse af A/Dkonverteren,<br />
da den ifølge databladet, [ADC0820], maksimalt kan tåle spændinger 0,1 V ud<br />
over forsyningen.<br />
11.3 Test<br />
Af testrapport II for mikrofonmodulet ses, at mikrofonforstærkeren skal forstærke mikrofonsignalet<br />
ca. 20 gange, for at det kan svinge mellem -2,5 og 2,5 V.<br />
Desuden ses, at de enkelte delelementer fungerer efter hensigten. Det ses, at højpasfilteret dæmper<br />
i stopbåndet med ca. 61 dB. Antialiasingfilteret dæmper med 22 dB ved den tilhørende halve<br />
samplingsfrekvens.<br />
Spændingstilpasningskredsløbet fungerede efter hensigten, udgangen svingede omkring 2,5 V,<br />
mellem 0 og 5 V. Derudover beskyttes A/D-konverteren som forventet mod over- og underspændinger.<br />
Det ses, at A/D-konverteren konverterer med en nøjagtighed, der afviger fra det forventede<br />
med LSB. Dette accepteres, da det er i overensstemmelse med A/D-konverterens specifikationer<br />
[ADC0820, side 3]. Testen viste desuden, at det var muligt at kommunikere med A/Dkonverteren<br />
fra CPU-modulet. Dette betyder, at IRQ4 sendes korrekt og modtagelse af IACK4<br />
resulterer i negering af IRQ4.<br />
Integrationstesten viste, at det var muligt at sende et sinussignal ind på antialiasingfilterets indgang,<br />
og sample dette. Da det samme signal herefter blev sendt ud på rekonstruktionsfilterets<br />
udgang, vurderes det, at readcyclen for læsning fra A/D-konverteren overholdes.<br />
11.4 Delkonklusion<br />
Mikrofonmodulet opfylder kravene i kravspecifikationen med hensyn til frekvensområderne ved<br />
de forskellige lydkvaliteter og bitopløsning. Højpasfilteret dæmper 50 Hz støj fra forsyningen<br />
med 61 dB, og antialiasingfilteret dæmper 22 dB ved den tilhørende halve samplingsfrekvens.<br />
Dette overholder funktionskravet.<br />
Ud fra integrations- og A/D-konvertertesten kan det konkluderes, at modulet har det rette interface<br />
til kommunikation med CPU-modulet.<br />
Det kan derfor konkluderes, at mikrofonmodulet fungerer efter hensigten; de opstillede krav<br />
overholdes.<br />
91
Kapitel<br />
12<br />
Kvalitetsmodul<br />
Formålet med dette modul er at styre frekvensen, hvormed A/D-konverteren skal sample, samt<br />
at angive knækfrekvensen for antialiasing- og rekonstruktionsfilterne.<br />
Kapitlet er baseret på anvendelsen af et MAX294-filter som antialiasing- og rekonstruktionsfilter.<br />
Det viste sig under forløbet, at disse var meget følsomme for over- og underspændinger, og<br />
der blev derfor senere valgt at benytte et MAX297-filter, da dette var mindre følsomt.<br />
12.1 Funktionoversigt<br />
Fra afsnit 6.2.6 fås input og output til kvalitetstyringsmodulet. FS er CS fra CPU-modulet og<br />
R/W er write-signalet fra CPU-modulet. Data-signalerne, D00 og D01, angiver hvad kvaliteten<br />
skal være. CLK_F og CLK_S er clocksignalerne til henholdsvis antialiasing-/rekonstruktionsfilter<br />
og A/D-konverteren.<br />
Kvalitetstyringsmodulet realiseres i princippet vha. to clocksignaler, en clockneddeler og en<br />
styret switch, som styres af et register. Dette er illustreret på figur 12.1. De to clocksignaler<br />
gives som input til en clockneddeler, der neddeler hver clock til tre forskellige clocksignaler. De<br />
i alt seks clocksignaler er input til en styret switch, som skifter mellem dem alt efter den valgte<br />
kvalitet.<br />
92<br />
D00<br />
D01<br />
FS<br />
R/W<br />
Kvalitet_status<br />
Register<br />
Kvalitet_styring<br />
Clock-neddeler<br />
Filter<br />
clock<br />
Styret switch<br />
Sampling<br />
clock<br />
CLK_F<br />
CLK_S<br />
Figur 12.1: Blokdiagram for kvalitetstyringsmodulet.
12.1.1 Funktionskrav<br />
12.2. Løsningsmuligheder<br />
De valgte filtre i mikrofon- og højttalermodulet kræver et clocksignal, der har en 100 gange så<br />
høj frekvens som den ønskede knækfrekvens [MAX297, side 6], denne faktor var kun 50 for<br />
MAX297. Frekvenserne for clocksignalerne, CLK_F og CLK_S, ved de forskellige kvalitetsindstillinger<br />
er vist i tabel 12.1.<br />
Filtrene krævede, at clockindgangens logisk "0" havde en spænding på (-Vcc-0,3) til 1 V og<br />
logisk "1" en spænding på 4 V til (Vcc+0,3).<br />
Kvalitet D01 D00 CLK_F CLK_S<br />
Ingen 0 0 0Hz 0Hz<br />
Dårligst 0 1 170 kHz 4 kHz<br />
Middel 1 0 340 kHz 8 kHz<br />
Bedst 1 1 680 kHz 16 kHz<br />
Tabel 12.1: Clocksignalerne ud af kvalitetsmodulet ved forskellige opsætninger af<br />
Kvalitet_status-registret.<br />
12.2 Løsningsmuligheder<br />
De forskellige måder at realisere den ønskede funktion af modulet på, er opstillet her:<br />
Clock’s: Clocksignalerne kan overordnet laves på to måder:<br />
1 clock: Signalerne laves ud fra ét clocksignal.<br />
2 clock’s: Signalerne laves ud fra to clocksignaler.<br />
Oscillatorerne kan da realiseres på flere måder:<br />
¯ AMV - Astabil Multi Vibrator<br />
¯ Krystaloscillator<br />
Kvalitet_styring: Clockneddelingen kan foretages i kredse designet til dette - dvs. tællere, eller<br />
de kan designes i en PEEL.<br />
Switchen kan realiseres som digital switch dvs. logisk. Evt. kan switchen realiseres som<br />
en analog switch.<br />
Kvalitet_status: Kvalitet_status kan laves som en latch eller med flip-flop.<br />
93
Kapitel 12. Kvalitetsmodul<br />
12.2.1 Valg af løsning<br />
Det er valgt at realisere kvalitetsmodulet på følgende måde:<br />
Clock’s realiseres ved brug af én krystaloscillator, da komponentudleveringen ikke har en oscillator,<br />
der kan neddeles præcist til de ønskede frekvenser til antialiasing- og rekonstruktionsfiltret<br />
fra tabel 12.1. Denne oscillators frekvens skal kunne neddeles præcist til de<br />
ønskede frekvenser til A/D-konverteren.<br />
Kvalitets_styring Der vælges at anvende binære tællere til neddelingen, da det ellers ville<br />
kræve en PEEL til hver clocksignal, for at lave neddelingen i en PEEL. Det vælges at<br />
lave switchen i en PEEL, da det samtidig vil være muligt at realisere registeret, Kvalitets_status,<br />
i samme PEEL.<br />
Kvalitets_status laves i en PEEL, som en latch, der således får det samme interface til CPUmodulet,<br />
som RAM har det i hukommelsesmodulet.<br />
12.3 Design af kvalitetsmodul<br />
For at gemme oplysningen om kvaliteten, 0-3, skal der kunne gemmes to bit. Disse to bit skal<br />
kun kunne ændres, når der er CS til kredsen og W er asserteret. Et forbillede på dette er en<br />
writecycle til en af RAM-kredsene. Det er altså nødvendigt med W, FS (CS), D00 og D01 som<br />
input til kredsen. D00 og D01 angiver kvaliteten. Da kommunikationen foregår asynkron, skal<br />
lagringen af D00 og D01 ikke være kanttrigget. Dette opnås ved at implementere to D-latches<br />
i PEEL’en; den ene til D00 og den anden til D01. Nye værdier for D00 og D01 kan latches, når<br />
de to D-lathes får C=1, som er kontrolsignalet. Ved at lade C være afhængig af FS, som er CS<br />
til frekvensstyringskredsen, og W kan den ønskede virkning fås. Udfra at WogFS begge er<br />
aktivt lave og excitationsligningen for en D-latch, [Wakerly, 2001, side 674], fås udtrykket for<br />
kvaliteten, K = [Q1*,Q0*]:<br />
C W FS (12.1)<br />
Q0£ C ¡ D00 C ¡ Q0 D00 ¡ Q0 (12.2)<br />
Q1£ C ¡ D01 C ¡ Q1 D01 ¡ Q1 (12.3)<br />
Notationen "*" betyder, at det er den fremtidige værdi. Denne notation er dog ikke gyldig i<br />
ABEL, og i det skrevne program står der f.eks. kun Q0.<br />
12.3.1 Oscillator<br />
Som clock til kvalitetsmodulet er valgt en oscillator på 4,096 MHz, da denne kan neddeles<br />
til de ønskede frekvenser til A/D-konverteren og tilnærmelsesvis til de ønskede frekvenser for<br />
94
12.3. Design af kvalitetsmodul<br />
antialiasing- og rekonstruktionsfiltret. Således skal neddelingsfaktoren for frekvenserne til A/Dkonverteren,<br />
antialiasing- og rekonstruktionsfiltret være henholdvis 256/512/1024 og 6/12/24,<br />
hvilket giver frekvenser udregnet i ligningerne herunder:<br />
CLK_F1 <br />
CLK_F2 <br />
CLK_F3 <br />
CLK_S1 <br />
CLK_S2 <br />
CLK_S3 <br />
4096 MHz<br />
170667 kHz (12.4)<br />
24<br />
4096 MHz<br />
341333 kHz (12.5)<br />
12<br />
4096 MHz<br />
682667 kHz (12.6)<br />
6<br />
4096 MHz<br />
4000 kHz (12.7)<br />
1024<br />
4096 MHz<br />
8000 kHz (12.8)<br />
512<br />
4096 MHz<br />
16000 kHz (12.9)<br />
256<br />
Oscillatoren opkobles ligesom oscillatoren for CPU-modulet, dette ses i diagram B.<br />
12.3.2 Clockneddeler<br />
Samplingsfrekvenser<br />
Som clockneddeler til A/D-konverteren anvendes kredsen 74hc4040, som er en binær tæller med<br />
12 udgange, da denne kan dele med høje faktorer i forhold til en PEEL (kræver 10 udgangsben<br />
for at dele med en faktor 1024, da 2 10 1024). Udgangen fra oscillatoren tilsluttes på CP, som<br />
er en inverteret clockindgang på tælleren [Philips Semiconductors, 1990]. Udgangene, Q0-Q11,<br />
på clockneddeleren repræsenterer hver en neddeling af CP med en faktor to, således at Qn <br />
CP<br />
2 n 1 fQn f CP<br />
2 n 1 . Udgangene, Q7-Q9, anvendes derfor. Masterreset, MR, for clockneddeleren<br />
er aktiv høj og sættes derfor til stel, da denne ellers vil tvinge udgangene lave.<br />
Filterfrekvenser<br />
Som clockneddeler til antialiasing- og rekonstruktionsfiltret anvendes en PEEL, da denne kan<br />
klare de små faktorer, og tilmed kan dele med en faktor, som ikke er en potens af 2.<br />
Neddelingen af clock’en på 4,096 MHz med en faktor 6, 12 og 24 er realiseret vha. en tilstandsmaskine<br />
i ABEL. Dette er gjort med i alt 24 tilstande, som gennemløbes afhængigt af<br />
indgangsclock’en, således at der skiftes tilstand hver gang indgangsclocken går høj. I hver tilstand<br />
sættes de tre udgangsclock’s, CLK_F1, CLK_F2 og CLK_F3, til værdier så den ønskede<br />
neddeling af indgangsclock’en opnås. F.eks. sættes CLK_F1 til 1 de første 12 tilstande og til 0<br />
de sidste 12; derved opnås en neddeling på 24. ABEL-koden kan findes på den vedlagte cd-rom<br />
som "clkdeler.abl".<br />
95
Kapitel 12. Kvalitetsmodul<br />
12.3.3 Programmering af PEEL<br />
Registret Kvalitet_status realiseres i PEEL’en blot ved at opskrive excitationsligningerne for de<br />
to D-latches fra afsnit 12.3 i ABEL.<br />
Den styrede switch har som input de gemte værdier for Q0 og Q1 og de seks clocksignaler fra<br />
clockneddeleren. Ved brug af WHEN...THEN...-konstruktioner og kvaliteten, K, som er udtrykt<br />
ved Q0 og Q1, kan clock’en, som skal sendes igennem PEEL’en, vælges.<br />
I den følgende ABEL-kode er CLK_F udgangsclocken til filtrene og CLK_F1 er indgangsclocken<br />
for filtrene ved den dårligste kvalitetsindstilling, altså 170 kHz og CLK_S er udgangsclocken<br />
til samplingsmodulet, A/D-konverteren, og CLK_S1 er indgangsclocken for samplingsmodulerne<br />
ved den dårligste kvalitetsindstilling, altså 4 kHz.<br />
WHEN (K == 1) THEN CLK_F = CLK_F1;<br />
WHEN (K == 1) THEN CLK_S = CLK_S1;<br />
Dette betyder, at når kvaliteten er sat til 1, så skal udgangen, CLK_F, have samme værdi som<br />
indgangen, CLK_F1, og udgangen ,CLK_S, skal have samme værdi som indgangen, CLK_S1.<br />
Hele ABEL-koden til frekvensstyringen kan findes på den vedlagte cd-rom som "clkdfil.abl".<br />
12.3.4 Timing<br />
Frekvensstyringsmodulet indgår i en writecycle, og i det tilfælde, hvor en ny kvalitet skal indlæses,<br />
kan dette sammenlignes med en writecycle til RAM og ROM, som er behandlet i afsnit<br />
B.2. Tiden, tWriteReady, på figur B.4 skal være mindre end 165 ns jf. ligning B.3. For frekvensstyringsmodulet<br />
går der tPD = 10 ns fra input til output for ikke clockafhængigt output<br />
[PEEL18CV8]. Det er denne tid, som skal være mindre end 165 ns jf. afsnit B.2, og der skal<br />
derfor ikke indsættes waitcycles, når der skal skrives til frekvensstyringsmodulet.<br />
12.3.5 Opkobling<br />
Kredsløbsdiagrammet for kvalitetsmodulet kan ses på diagram B. Dog kan PEEL’en der neddeler<br />
frekvenserne til antialiasing- og rekonstruktionsfiltret ikke findes, da denne ikke opfyldte<br />
krav til spændingsniveauer på filtrenes indgangsben. I stedet anvendes en neddeler bestående af<br />
en 74HC4017 efterfulgt af en 74HC4040, se afsnit 12.5 for begrundelse.<br />
12.4 Simulering<br />
PEEL’ens funktion er simuleret i ABEL. Alle testvektorer passede. Latchen kunne ikke simuleres,<br />
men er testet i en PEEL-tester, men er testet i en PEEL-tester, som beskrevet i næste afsnit.<br />
96
12.5 Test<br />
12.5.1 Clocksignal<br />
12.5. Test<br />
Clocksignalet er målt på et oscilloskop. Testresultatet for 4,096 MHz oscillatoren kan findes<br />
under testrapport III.<br />
12.5.2 Clockneddeler<br />
Udgangssignalerne fra clockneddelerne, 74hc4040 og PEEL, kan findes under testrapportIII.<br />
Det blev dog konkluderet, at PEEL’en ikke havde tilfredsstillende spændingsniveauer på udgangene<br />
(disse svingede mellem -2 V og 6,1 V), hvilket ødelagde MAX294-filtrene. Derfor<br />
revurderes det valgte design og en 74HC4017 i serie med en 74HC4040 vælges som neddeler<br />
i stedet for PEEL’en. Clocken på 4,096 Mhz skal neddeles til henholdsvis 85 kHz, 170 kHz og<br />
340 kHz, for at antialiasing- og rekonstruktionsfiltret har de rigtige knækfrekvenser på henholdsvis<br />
1,7 kHz, 3,4 kHz og 6,8 kHz. Dette giver neddelingsfaktorer på 12, 24 og 48, hvilket ikke<br />
kan neddeles binært med 74HC4040; derfor anvendes 74HC4017 til at neddele med en faktor 3,<br />
og denne neddelede clock sættes på 74HC4040’s clockindgang, CP. På 74HC4040’eren anvendes<br />
udgangene Q1-Q3 for at opnå de ønskede neddelingsfaktorer. Opkoblingen af denne "nye"<br />
neddeler kan findes på diagram B. Måleresultater fra denne neddeler er tilføjet i testrapporten<br />
for kvalitetsmodulet, og disse resultater blev vurderet bedre i forhold til PEEL’en resultater, så<br />
derfor er denne løsning fastholdt.<br />
12.5.3 Styret switch<br />
Alle testvektorer er testet på PEEL-testeren. Resultatet af denne test, dog kun for de testvektorer<br />
som ikke kunne simuleres vha. ABEL’s testvektorer, kan findes i førnævnte testrapport.<br />
12.5.4 Integrationstest<br />
Kvalitetsmodulet kan kommunikere med CPU’en, og kvaliteten kan derved ændres. Denne test<br />
er beskrevet i førnævnte testrapport.<br />
12.6 Delkonklusion<br />
Clocksignalerne fra krystaloscillatoren og clockneddelerne har de korrekte frekvenser, men<br />
spændingsniveauerne er generelt ikke tilfredsstillende. Dog fungerer kvalitetsmodulet som helhed<br />
tilfredsstillende, da A/D-konverteren har de ønskede samplingsfrekvenser, antialiasing- og<br />
rekonstruktionsfiltret har de rigtige knækfrekvenser og modulet kan tilgås, således at kvaliteten<br />
kan ændres fra SW.<br />
97
Kapitel<br />
13<br />
Højttalermodul<br />
Formålet med modulet er at konvertere gemt data til lyd.<br />
13.1 Funktionsoversigt<br />
Højttalermodulet består af en D/A-konverter, som konverterer digital data til en analog spænding.<br />
Spændingen sendes gennem et rekonstruktionsfilter og derefter en udgangsforstærker, som<br />
giver den effekt, som højttaleren kræver. Dette forløb er vist på figur13.1.<br />
D00-D07<br />
DAC(CS)<br />
R/W<br />
CLK_F<br />
DAC<br />
Rekonstruktionsfilter<br />
Udgangsforstærker<br />
Figur 13.1: Blokdiagram for højttalermodulet.<br />
Modulet får følgende input fra CPU-modulet: DAC(CS), R/W og 8 bit databus. Fra Kvalitetsmodulet<br />
kommer et CLK_F-signal, som angiver rekonstruktionsfilterets knækfrekvens. Modulets<br />
output er lyd fra højttaleren.<br />
13.1.1 Funktionskrav<br />
Modulet skal kunne konvertere 8-bit lyddata til lyd på højttaleren. Selve konverteringen foretages<br />
af en 8-bit D/A-konverter. Denne skal overholde den writecycle, som er beskrevet i<br />
appendiks B.2.<br />
Rekonstruktionsfilteret har til formål at rekonstruere det analoge signal, uden de frekvenskomposanter,<br />
der opstår under sample-processen og D/A-konverteringen, se appendiks A. Derfor<br />
kræves det, at det skal have en knækfrekvens på under den halve samplingsfrekvens.<br />
Udgangsforstærkeren skal kunne drive højttaleren, så det er muligt at høre, hvad der bliver<br />
afspillet.<br />
98
13.2 Design af Højttalermodul<br />
13.2.1 D/A-konverter<br />
Som D/A-konverter vælges AD7524, denne har en opløsning på 8 bit.<br />
13.2. Design af Højttalermodul<br />
Konverteren kræver, at writecyclen foregår som vist på figur 13.2. Cyclen foregår ved at CS<br />
og R/W går lav hhv. tCS og tWR før R/W går høj igen. Når enten CS eller R/W er høje, holder<br />
D/A-konverterens udgang den værdi, der svarer til den værdi, som var på databenene, da CS<br />
eller R/W gik høje. Data skal komme tDS før R/W går høj, og holdes tDH efter R/W går høj.<br />
CS<br />
R/W<br />
D00-D07<br />
tCS<br />
tWR<br />
tDS<br />
tCH<br />
tDH<br />
Figur 13.2: writecycle til D/A-konverter.<br />
I tabel 13.1 ses de tider, som skal overholdes ved skrivning til D/A-konverteren. I appendiksB.2<br />
ses, at R/W går høj efter AS, og derved også CS. Dette overholder ikke figur13.2, men det klares<br />
ved at forbinde DAC(CS) fra CPU’en til CS og R/W, da disse 2 signaler gerne må komme på<br />
samme tid ifølge tabel 13.1. Ifølge appendiks B.2 bliver DAC lav i 25¡tcycle tCHSL tAdrDec<br />
tCLSH tAdrDec 25 ¡ 125 60 10 62 10 3145ns , hvilket opfylder kravene i tabellen.<br />
Desuden kommer data på databussen 4¡tcycle tCLDO tCLSH tAdrDec 2¡125 62 62 10 <br />
260 ns før DAC går høj. Data holdes i 05 ¡ tcycle tCLSH tAdrDec tCHDOI 05 ¡ 125 62<br />
10 40 305 ns, hvilket ligger over de 10 ns, som kræves af D/A-konverteren.<br />
Tekst Symbol Tid<br />
CS til skrivning setup tid tCS min. 170 ns<br />
CS holdetid efter skrivning tCH 0<br />
Skrivelængde tWR min. 170 ns<br />
Data setup tid tDS min. 135 ns<br />
Data holdetid tDH min. 10 ns<br />
Tabel 13.1: Tider ved D/A-konvertering [AD7524].<br />
D/A-konverteren kobles op som det ses på figur 13.3. Konverteren kræver, at der er en operationsforstærker<br />
i udgangen af den [AD7524]. Dertil vælges en TLE2072. Udgangen af opera-<br />
99
Kapitel 13. Højttalermodul<br />
tionsforstærkeren kobles tilbage til RFB, som er et feedback-ben, der sørger for regulering af<br />
forstærkningen i D/A-konverteren. Outputtet er inverteret, men dette har som nævnt ingen betydning<br />
i forbindelse med audio. Desuden svinger signalet mellem -5 V og 0 V, men da signalet<br />
sendes ind i en kondensator, har dette DC-offset ingen betydning.<br />
5V<br />
DAC<br />
D00<br />
D01<br />
D02<br />
D03<br />
D04<br />
D05<br />
D06<br />
D07<br />
11<br />
10<br />
9<br />
8<br />
7<br />
6<br />
5<br />
4<br />
13.2.2 Rekonstruktionsfilter<br />
AD7524A<br />
D0<br />
D1<br />
D2<br />
D3<br />
D4<br />
D5<br />
D6<br />
D7<br />
15<br />
VREF<br />
13<br />
WRITE<br />
12<br />
CS<br />
OUT1<br />
OUT2<br />
RFB<br />
1<br />
2<br />
16<br />
2<br />
-<br />
15V<br />
8<br />
TLE2072<br />
+<br />
3<br />
4<br />
-15V<br />
Figur 13.3: Opkobling af D/A-konverter<br />
1<br />
Til rekonstruktionsfilter<br />
Rekonstruktionsfilteret vælges til at være samme type som antialiasingfilteret, dvs. MAX297.<br />
Opkoblingen foretages på samme måde som i mikrofonmodulet, og der benyttes de samme<br />
knækfrekvenser ved de forskellige lydkvaliteter, se afsnit11.2.4 om antialisingfilteret.<br />
13.2.3 Udgangsforstærker<br />
For at drive højttaleren i udgangen er det nødvendigt med en effektforstærker. Inputsignalet til<br />
forstærkeren kommer fra rekonstruktionsfilteret og svinger mellem -5 V og 0 V. For at minimere<br />
pladsforbruget vælges en integreret kreds til at styre forstærkningen. Den valgte kreds<br />
er LM380 [LM380, 2000]. Kredsen har brug for en positiv forsyning i området fra 10-22 V.<br />
Forsyningen vælges til 15 V. Forstærkeren centrerer automatisk outputtet omkring halvdelen af<br />
forsyningsspændingen. LM380 skal kobles op med ydre komponenter. Det er vist på figur13.4.<br />
Kondensatoren i udgangen, CHF1, er sat for at undgå DC over højttaleren. Modstanden, RHF1,<br />
og kondensatoren, CHF3, dæmper støj på 5-10 MHz [LM380-A, 1995, s. 3]. CHF2 er en brumundertrykkelseskondensator<br />
og CHF4 sikrer mod selvsving [Soelberg, 1977, s. 316]. Indgangskondensatoren,<br />
CHF5, fjerner DC på indgangen. LM380 giver en spændingsforstærkning på 50<br />
gange. Dette betyder, at indgangssignalet skal dæmpes for at udgangen ikke peaker ud. Udgangssignalet<br />
må maksimalt være 15 Vp. Dvs. indgangsignalet skal dæmpes til:<br />
vIN 15V<br />
50<br />
300mV<br />
For at kunne styre forstærkningen og dermed volumen indføres et potentiometer, RHF3, på10<br />
kΩ. vIN skal dæmpes til 300 mV med en spændingsdeling mellem RHF2 og RHF3.RHF3 vælges<br />
100
RHF2<br />
158k<br />
RHF3<br />
10k<br />
vIN<br />
CHF5<br />
100n<br />
ud fra at potentiometeret er 0 Ω.<br />
300mV<br />
5V <br />
13.3 Test<br />
CHF4<br />
27p<br />
6<br />
-<br />
14<br />
LM380<br />
+ 7<br />
2<br />
1<br />
+<br />
CHF2<br />
6,8u<br />
VCC =15V<br />
8<br />
CHF1<br />
470u<br />
+<br />
RHF1<br />
2,7R<br />
CHF3<br />
100n<br />
Figur 13.4: Diagram over højttalerforstærker.<br />
10kΩ<br />
RHF2 10kΩ<br />
RHF2 10kΩ 1 300mV<br />
5V<br />
300mV<br />
5V<br />
1567kΩ 158 kΩ<br />
13.3. Test<br />
I testrapport IV ses det, at højttalermodulet fungerer som forventet. D/A-konverteren er i stand<br />
til at konvertere lineært, og kan kommunikere med CPU-modulet. At signalet kan gå ud over -5<br />
V og 0 V tilskrives støj på forsyningen, og ignoreres derfor.<br />
Det konkluderes ud fra testrapporten II for mikrofonmodulet, at rekonstruktionsfilteret fungerer,<br />
da dette er koblet på nøjagtig samme måde som antialiasingfilteret.<br />
Udgangsforstærkeren virker efter hensigten, da denne er i stand til at drive højttaleren uden<br />
forvrængning af signalet.<br />
Integrationstesten viste, at det var muligt at sende et sinussignal til mikrofonmodulet og rekonstruere<br />
signalet på rekonstruktionsfilterets udgang. Signalet havde samme frekvens som det<br />
indsendte signal.<br />
13.4 Delkonklusion<br />
På baggrund af testrapporten konkluderes det, at højttalermodulet fungerer efter hensigten. De<br />
opstillede krav overholdes, idet det er muligt at sende data til D/A-konverteren, som herefter<br />
konverteres. Udgangsforstærkeren forstærker signalet uden synlig forvrængning og rekonstruktionsfilteret<br />
dæmper de frekvenskomposanter, der fremkommer ved D/A-konvertering.<br />
Ud fra integrations- og D/A-konvertertesten kan det konkluderes, at modulet har det rette interface<br />
til kommunikation med CPU-modulet. Det kan desuden konkluderes, at højttalermodulet<br />
er i stand til at gendanne et samplet signal.<br />
101
Kapitel<br />
14<br />
Knapmodul<br />
Formålet med modulet er at registrere og håndtere knaptryk fra brugeren og formidle dem videre<br />
til CPU-modulet.<br />
Kapitlet er baseret på en PEEL anvendt som knapencoder. Denne viste dog sig ikke at være egnet<br />
til dette, da der var støj på både aktive og inaktive udgange ved knaptryk. Efter det egentlige<br />
design er der derfor valgt at anvende en 16 til 4 encoder MM74C922 [MM74C922].<br />
14.1 Funktionsoversigt<br />
Modulet består af knapperne, Knap_styring, og registret, Knap_status. Modulet har to forskellige<br />
grænseflader: en til omverdenen (brugeren) via knapperne og en til processoren. Disse<br />
grænseflader er angivet i afsnit 6.2.8. Desuden grænser modulet op til softwaren. Denne grænseflade<br />
er beskrevet i afsnit 5.4. Et blokdiagram over knapmodulet kan ses på figur14.1.<br />
00 11<br />
IRQ3<br />
14.1.1 Funktionskrav<br />
IACK3<br />
Prelfjerner<br />
Encoder<br />
Interruptstyring<br />
CLK<br />
Register<br />
KS<br />
R<br />
D00-D03<br />
Knap_styring<br />
Knap_status<br />
Figur 14.1: Blokdiagram for knapmodulet.<br />
Det er nødvendigt med en prelfjerner, for at undgå at Knap_styringen opfatter prel som flere<br />
knaptryk. Der er tale om ti knapper dvs. ti signaler. Grænsefladen er en 4 bit bred databus, derfor<br />
er det nødvendigt at encode knapsignalerne. Det vælges, at det er det første knaptryk, som skal<br />
gemmes i Knap_status, og først skal kunne ændres, når CPU’en har aflæst denne værdi. Et<br />
knaptryk defineres til at være en påvirkning af en knap og deaktivering af den (ligesom på en<br />
almindelig telefon). Dette gøres for at undgå, at brugeren trykker på knappen én gang, men<br />
102
14.2. Design af knapmodul<br />
modulet opfatter det som mere end ét knaptryk, fordi brugeren holder knappen nede i lang tid i<br />
forhold til CPU’ens hastighed.<br />
Efter et knaptryk skal der sendes et interrupt til CPU’en. Interruptet skal holdes, indtil der modtages<br />
et IACK3-signal, dette skyldes, at interruptet ikke med sikkerhed bliver behandlet af CPU’en<br />
med det samme.<br />
Modulet må ikke påvirke databussen, hvis den ikke er chipselected. Udgangene skal altså være<br />
højimpedante, hvis KS er negeret.<br />
14.1.2 Løsningforslag<br />
En prelfjerner kan konstrueres ved at anvende latches eller et RC-kredsløb.<br />
Signalerne encodes som angivet i afsnit 5.4. Det kan vælges at encode signalerne prioriteret eller<br />
ikke-prioriteret. At signalerne er prioriterede, betyder at det indgangssignal med den højeste<br />
prioritet vil slippe igennem, hvis to eller flere knapper påvirkes. For at encode de ti knapsignaler,<br />
kræves der minimum en 10-4 encoder. Knap_styring og registeret, Knap_status, kan<br />
implementeres i en PEEL. Dette kan gøres enten asynkront eller synkront.<br />
14.1.3 Valg af løsning<br />
Det vælges at konstruere prelfjerneren med et RC-led.<br />
Det vælges at encode signaler prioriteret, så der ikke opstår problemer, hvis to eller flere knapper<br />
bliver påvirket på samme tid. Signalerne prioriteres i samme rækkefølge, som de encodes i dvs.<br />
optag har den højeste prioritet og reset den laveste prioritet.<br />
Den største encoder, der stilles til rådighed i komponentudleveringen er en 8-3 encoder. Det<br />
vælges derfor at programmere en 10-4 prioritetsencoder i en PEEL.<br />
Den synkrone løsning til knap-styring, og registeret, Knap_status, vælges, fordi det anbefales<br />
at lave synkrone kredsløb [Wakerly, 2001, s. 2]. Desuden vil det blive nemmere at styre afsendelsen<br />
af IRQ3. Det vælges at implementere disse funktioner i en PEEL.<br />
14.2 Design af knapmodul<br />
14.2.1 Prelfjerner<br />
Knapperne vælges til at være aktiv lave. Prelfjerneren bestående af et RC-led kobles op på<br />
samme måde som ved NMI-knappen i CPU-modulet, hvilket er vist på figur8.7.<br />
14.2.2 Encoder<br />
Signalerne encodes i den mindste PEEL, der er til rådighed i komponentudleveringen, fordi<br />
denne er i stand til at encode de ti signaler. Denne PEEL er en 18CV8 [PEEL18CV8]. Signalerne<br />
encodes ved brug af en sandhedstabel i ABEL. Udgangene fra encoderen betegnes K0-K3. I<br />
103
Kapitel 14. Knapmodul<br />
encoderen gøres disse aktiv høje. Sandhedstabellen for encoderen ses i tabel14.1. Hele ABELkoden<br />
til encoderen kan findes på den vedlagte cd-rom som “encoder.abl”.<br />
00 11 R K3 K2 K1 K0<br />
1 1 1 1 1 1 1 1 1 1 0 0 0 0<br />
0 X X X X X X X X X 0 0 0 1<br />
1 0 X X X X X X X X 0 0 1 0<br />
1 1 0 X X X X X X X 0 0 1 1<br />
1 1 1 0 X X X X X X 0 1 0 0<br />
1 1 1 1 0 X X X X X 0 1 0 1<br />
1 1 1 1 1 0 X X X X 0 1 1 0<br />
1 1 1 1 1 1 0 X X X 0 1 1 1<br />
1 1 1 1 1 1 1 0 X X 1 0 0 0<br />
1 1 1 1 1 1 1 1 0 X 1 0 0 1<br />
1 1 1 1 1 1 1 1 1 0 1 0 1 0<br />
Tabel 14.1: Sandhedstabel for encoderen. X’erne angiver don’t cares. Bemærk at knapperne er<br />
aktiv lave, men at udgangene er aktiv høje.<br />
14.2.3 Interruptstyring og Knap_status<br />
Det blev valgt at lave en synkron løsning, derfor tilføres 8 MHz clock’en fra CPU-modulet. Der<br />
kan med fordel konstrueres en tilstandsmaskine. Der kræves 5 tilstande (0-4). For at gemme<br />
værdien af et knaptryk anvendes fire D-flip-flops med enable (EN). Enable medtages for at<br />
knapperne kan ignoreres, når der allerede er kommet et knaptryk. Enable sættes til en af udgangene<br />
på PEEL’en, men den anvendes kun internt. Indgangene til disse flip-flops er K0-K3<br />
fra encoderen. Disse bit betegnes i ABEL under “KNAP” dvs. KNAP = [K3,K2,K1,K0]. Det<br />
betyder, at hvis K1 og K2 er aktive (høje), så er KNAP lig med 6.<br />
Tilstandsmaskinen Q laves med følgende værdier:<br />
104<br />
¯ S0: standbytilstand, hvor der afventes knaptryk.<br />
¯ S1: ventetilstand, hvor der afventes at knappen slippes. Knapperne slås fra ved at fjerne<br />
enable (EN).<br />
¯ S2: IRQ3 asserteres, og der afventes IACK3.<br />
¯ S3: IRQ3 negeres, og KS afventes.<br />
¯ S4: Der sendes data på databussen, der ventes på at KS negeres.
14.2. Design af knapmodul<br />
Der er desuden tre tilstande mere, S5-S7. Dette er fejltilstande. Kommer PEEL’en i disse tilstande<br />
vil den hoppe til S0. Et tilstandsdiagram for knapstyringen er vist på figur14.2.<br />
S5<br />
KS=0<br />
S6<br />
S4<br />
KS = 1<br />
KS = 0<br />
S3<br />
KNAP = 0<br />
S0<br />
EN = 1<br />
S2<br />
IRQ3 = 0<br />
IRQ3 =1 IACK3 = 0 IACK3 =1<br />
KS=1<br />
S7<br />
KNAP = 1-10<br />
S1<br />
EN = 0<br />
KNAP = 0<br />
Figur 14.2: Tilstandsdiagram for knapstyringen.<br />
KNAP = 1-10<br />
De nederste databen, D00-D03, bestemmes af de implementerede flip-flops output. Disse ben<br />
betegnes "D" dvs. D = [D3,D2,D1,D0]. D-flip-flop med enable laves med følgende excitationsligning<br />
[Wakerly, 2001, Table 7-1]:<br />
Indsættes de ønskede udtryk, fås i ABEL:<br />
Q£ EN ¡ D EN¡ Q<br />
D EN&KNAP # !EN&!D<br />
Der ses, at tilbagekoblingen, D, inverteres. Dette er nødvendigt, fordi signalet ikke tages på udgangsbenet,<br />
men derimod i PEEL’ens indbyggede "MACRO-CELL" og dette signal er inverteret<br />
i forhold til indgangssignalet.<br />
For at undgå buskonflikter gøres udgangene højimpedante, når modulet ikke er chipselected.<br />
Dette gøres ved ABEL-funktionen OE (Output Enable). I dette tilfælde, hvor det er afhængigt<br />
af KS, vil koden se således ud:<br />
DOE !KS;<br />
Det er nødvendigt at anvende den største PEEL, der forefindes i komponentudleveringen, fordi<br />
der anvendes 9 udgange. PEEL’en er en 22CV10 [PEEL22CV10].<br />
14.2.4 Opkobling<br />
Opkobling af knapmodulet kan findes på diagram C. Dog kan PEEL-encoderen ikke findes her.<br />
Benforbindelse for denne kan findes på den vedlagte cd-rom under "ENCODER2.DOC".<br />
105
Kapitel 14. Knapmodul<br />
14.2.5 Timing<br />
Output enable bliver forsinket i PEEL’en. I følge databladet er denne tid, tOE, 10 ns [PEEL22CV10,<br />
s. 8]. Ifølge afsnit B.1 skal den eksterne enhed sende gyldige data på bussen minimum 217,5 ns<br />
efter den har modtaget chipselect. Dette overholder PEEL’en, og der skal derfor ikke indsættes<br />
waitcycles i DTACK-generatoren i CPU-modulet.<br />
Hele ABEL-koden kan findes på den vedlagte cd-rom som "kstyr.abl". Opkoblingen af knapmodulet<br />
kan ses på diagram C.<br />
14.2.6 Simulering<br />
Begge PEEL’s er blevet simuleret vha. testvektorer. Disse testvektorer findes sammen med koden<br />
og alle blev simuleret uden fejl.<br />
14.3 Test<br />
Testen af modulet er dokumenteret i testrapportV. Det blev konkluderet, at modulet ikke virkede<br />
efter hensigten, eftersom Interruptstyring ikke var i stand til at opfatte den encodede værdi,<br />
KNAP=1. Derfor blev der lavet om i ABEL-koden, således at et tryk på 01 medfører en værdi<br />
på 11 i stedet for 1. Dette var dog ikke det eneste problem. Det viste sig også, at der var støj<br />
på både encoderens aktive og inaktive udgange. Dette resulterede i at Interruptstyring kunne nå<br />
at opfatte flere knaptryk ved blot ét knaptryk, fordi der nåede at komme IACK og KS inden<br />
knappen var sluppet. Dette resulterede i, at et tryk på f.eks. kunne betyde et spring på flere<br />
beskeder. Se testrapport V.<br />
Derfor blev det valgt at anvende en anden decoder, MM74C922, som er en 16 til 4 encoder.<br />
Opkoblingen af denne findes på diagram C. Trykknapperne kobles op i et array [MM74C922,<br />
side 8]. Encoderen indeholder pull-up-modstande, knapperne tilsluttes blot. Kondensatoren CK1<br />
er bestemmende for, hvor mange gange knapperne aflæses i sekundet. Denne er valgt til 1 µF<br />
[MM74C922, side 7]. CK2 er prelfjerner sammen med en intern modstand på 10 kΩ. Denne er<br />
valgt til 1 µF [MM74C922, side 7]. Inverteringen af Data Available-signalet ind på OE (Output<br />
Enable) betyder, at data kun kan aflæses fra knappen påvirkes til den slippes [MM74C922, side<br />
6].<br />
Med den nye encoder virkede alle knaptryk. Integrationstesten viste også, at modulet kan kommunikere<br />
med CPU-modulet. De nye ABEL-koder er vedlagt på cd-rom, som "encoder2.abl"<br />
og "kstyr3.abl".<br />
14.4 Delkonklusion<br />
Det kan konkluderes, at knapmodulet lever op til funktionskravene. Det er i stand til at registrere<br />
og håndtere knaptryk fra brugeren og formidle dem videre til CPU-modulet. Dog er der en lille<br />
undtagelse i forbindelse med grænsefladen til softwaren, da 01 har værdien 11 i stedet for 1.<br />
106
Kapitel<br />
15<br />
Displaymodul<br />
Modulet har til formål at modtage output fra display_styring, der så kan skrives på displayet,<br />
der leverer visuel information til brugeren.<br />
15.1 Funktionsoversigt<br />
Modulet består af et alfanummerisk liquid crystal display (LCD).<br />
15.1.1 Funktionskrav<br />
Displaymodulet skal overholde timingdiagrammet for en writecycle angivet i appendiksB.2.<br />
15.2 Design af displaymodul<br />
15.2.1 Display<br />
I komponentudleveringen udleveres et display af typen PC1604-A [L1604], og derfor vælges<br />
dette. Det er et LCD-modul med 4 linier, 16 tegn på hver linie og den har indbygget karaktergenerator.<br />
15.2.2 Timing<br />
Der skrives til displayet, som vist på figur15.1 [Seiko, 1998]. Det ses, at RS og R/W skal sættes<br />
op tsu1 før displayet får et chipselect. Derefter skal chipselect være aktivt i mindst tw, og inden<br />
CS bliver inaktiv, skal data være sat op i tsu2. Efter CS er gået lav, skal RS og R/W holdes i<br />
minimum th1 og data i minimum th2. RS-signalet afgør, om der skal skrives et tegn i displayet,<br />
eller der skal skrives en instruktion. Det er, som nævnt i afsnit 6.2.9, blevet valgt at anvende<br />
adresse A01 til at styre dette signal.<br />
Tider for displayets writecycle ses i tabel15.1. Heraf ses, at RS og W skal være aktive i 40 ns, inden<br />
der skal sendes et chipselect til displayet. Det ses i mikroprocessorens datablad [MC68000,<br />
side 10-10 - 10-14], at der går min. 30 ns fra adresseregisteret er klart, til AS bliver aktiv.<br />
Da der er en forsinkelse i adressedekoderen på 10 ns, bliver dette til mindst 40 ns, derfor er<br />
tsu1 overholdt, da der ifølge databladet går maksimalt 10 ns, fra AS sættes til R/W går lav. Da<br />
107
Kapitel 15. Displaymodul<br />
RS<br />
R/W<br />
CS<br />
D00-D07<br />
tsu1<br />
tw<br />
tsu2<br />
th1<br />
Figur 15.1: Writecycle til display.<br />
CPU’en holder AS lav i minimum 270 ns, er tw også overholdt. Gyldig data kommer fra CPU’en<br />
2 ¡ tcycle tCLDO tCLSH 250 62 62 250 ns før AS går høj, derfor er tsu2 overholdt. th1<br />
bliver sandsynligvis ikke overholdt. I værste fald bliver adressebussen ugyldig, og derved også<br />
RS på den opadgående flanke på S0. AS går høj 62 ns efter den nedadgående flanke på S6, og<br />
da CS først bliver lav 10 ns derefter, kan det risikeres, at CS først bliver lav ca. 10 ns efter RS er<br />
blevet ugyldigt.<br />
Displayet kræver, at RS og R/W bliver holdt i 10 ns efter chipselect er gået lav. Dette kan<br />
CPU’ens writecycle ikke overholde, derfor skal der sikres, at CS går lav 10 ns inden RS og<br />
R/W. Dette sikres ved at indbygge en tilstandsmaskine i den perifere adressedekoder. Denne<br />
tilstandsmaskine skal sørge for, at CS til displayet går højt, og forbliver højt i minimum 220 ns,<br />
hvorefter det går lavt, uafhængigt at AS. Dette klares ved at CS, vha. tilstandsmaskinen, holdes<br />
høj i 2 clockcycles. Dette betyder samtidig, at for at RS og R/W holdes længe nok, skal der<br />
indsættes en waitcycle fra DTACK-generatoren, når displayet adresseres.<br />
Tekst Symbol Tid<br />
R/W og RS setup tid tsu1 min. 40 ns<br />
Data setup tid tsu2 min. 60 ns<br />
Chipselect pulslængde tw min. 220 ns<br />
R/W og RS holde tid th1 min. 10 ns<br />
Data holde tid th2 min. 10 ns<br />
Tabel 15.1: Tider for writecycle til display [Seiko, 1998].<br />
Tilstandsmaskinen, som skal sørge for at kontrollere CS til displayet, konstrueres efter tilstandsdiagrammet<br />
på figur 15.2. Denne tilstandsmaskine laves i samme PEEL som adressedekoderen<br />
til de perifere enheder. th2 er overholdt, da der går 40 ns fra AS går høj til data bliver ugyldig.<br />
108<br />
th2
Adressebetingelser for display<br />
15.2.3 Kontrast<br />
Ikke adressebetingelser for display<br />
S3<br />
DISP=0<br />
Ikke adressebetingelser for display<br />
INIT<br />
DISP = 0<br />
S2<br />
DISP = 1<br />
Figur 15.2: Tilstandsdiagram for CS til display.<br />
S1<br />
DISP = 1<br />
15.3. Delkonklusion<br />
Adressebetingelser for display<br />
For at kunne indstille kontrasten på displayet, sættes der et potentiometer på 10 kΩ på displayets<br />
VO-ben.<br />
Opkoblingen af modulet ses på Diagram C.<br />
15.3 Delkonklusion<br />
Integrationstesten viste, at der kunne skrives ud på displayet. Det konkluderes derfor, at modulet<br />
fungerer korrekt.<br />
109
Del<br />
Software-design IV<br />
111
Kapitel<br />
16 Softwareimplementation<br />
Både diktafon- og pc-softwaren er programmeret med udgangspunkt i flowdiagrammerne og<br />
tilstandsdiagrammet fra kravspecifikationen og modulopdelingen i softwaredesignafsnittet. Det<br />
har vist sig under programmeringen, at visse sammenhængende moduler har været så små, at<br />
det har været fordelagtigt at lægge dem sammen. Dette er gældende for DAC_driver og Optag,<br />
ADC_driver og Afspil og Skriv_disp og Display_driver.<br />
16.1 Struktur af programmeringsfiler<br />
For overskuelighedens skyld i programmeringsfilerne, er følgende opbygning blevet benyttet.<br />
Header: Indeholder information om den fil der arbejdes i.<br />
Include: Her inkluderes andre filer. I praksis vil det sige headerfilen, se afsnit16.2 for beskrivelse<br />
af denne. Desuden skal andre pakker tilføjes for at kunne køre test på host; dette<br />
drejer sig bl.a om "stdio.h".<br />
Definition: Her kan definitioner indsættes. Dette er primært udnyttet i headerfilen.<br />
Forward deklarering af hjælpefunktioner: Forward-deklarering anvendes for at sikre, at hjælpefunktionerne<br />
er kendte for hovedfunktionen, da disse først bliver deklareret efter denne.<br />
Deklarering af hovedfunktion: Her skrives hovedfunktionen, som er deklareret i headerfilen.<br />
Deklarering af hjælpefunktioner: Her skrives hjælpefunktionerne.<br />
Testcases: Her skrives testcases på host for hovedfunktionen.<br />
16.2 Struktur af headerfil<br />
Ud over en header indeholder headerfilen alle de variable, konstanter og funktioner, som flere<br />
funktioner skal have adgang til. Headerfilen er nødvendig for at kunne anvende funktioner deklareret<br />
i andre filer. Den gør det desuden nemt at overskue og ændre konstanter, da disse kun<br />
står et sted. Dette gør grænsefladerne klart definerede mellem de enkelte funktioner.<br />
113
Kapitel 16. Softwareimplementation<br />
16.3 Implementering af tilstandsdiagram og flowdiagrammer<br />
Tilstandsdiagrammet på figur 3.2 er implementeret i modulet Behandl_knap. Tilstandsdiagrammet<br />
består af tilstande og betingede spring mellem disse. Springene er betinget af den nuværende<br />
tilstand og indkommende hændelser i form af knaptryk. Dette tilstandsdiagram er implementeret<br />
iCvha. en switch-konstruktion, hvor de enkelte cases er knaptryk. Handlingen, der skal udføres<br />
i hver enkelt case, er betinget af den nuværende tilstand. Selve betingelsen består typisk af en<br />
if-else-konstruktion.<br />
Rhomberne i flowdiagrammerne er implementeret vha. switch- og if-else-konstruktioner. På<br />
f.eks. figur 3.5 kan disse konstruktioner findes. Selve behandlingen af knaptryk findes i<br />
Behandl_knap’s switch-konstruktion og rhomber med spørgsmål som "Besked ikke slut?" ligger<br />
i en if-else-konstruktion i Lyd_kontrol.<br />
Firkanter i flowdiagrammerne illustrerer handlinger. I flowdiagrammet for optag på figur 3.6<br />
er der en handling med navnet "Ny besked". Denne er implementeret i Lyd_kontrol ved at<br />
tælle nogle globale variable op og flytte nogle pointere, så der skabes det rigtige miljø for en ny<br />
besked.<br />
Derudover findes der i flowdiagrammerne "fiktive" while-løkker. På figur3.6 er der et eksempel<br />
på dette. Hvis diktafonen går i pause-tilstand spørger den hele tiden efter knaptryk. Diktafonen<br />
vil hele tiden få interrupt fra kvalitetsmodulet, når A/D-konverteren er klar med næste sample,<br />
men da diktafonen ikke er i en gyldig tilstand, ignoreres dette interrupt. Ændring til en gyldig<br />
tilstand sker i praksis vha. et gyldigt knaptryk - et interrupt - som i dette tilfælde er optag og<br />
pause.<br />
16.4 Diktafon<br />
Diktafonsoftwaren er blevet programmeret i C, og der er enkelte steder blevet benyttet Inline<br />
Assembler til bl.a. at sætte statusregisteret, da der derved kan skiftes mellem user- og supervisormode<br />
og interruptniveauet. Desuden er interrupt-handleren skrevet i assembler.<br />
Til kompilering af softwaren anvendes programmet "make", hvor opsætninger som f.eks. compiler<br />
er defineret i en "Makefil". Opsætningen i denne gør, at en char er én byte, en short int<br />
er et word og en int er et longword. Her er de enkelte C-filer samt interrupt-handleren er inkluderet.<br />
Ved hjælp af filen "MAP.ld", bestemmes hvor henholdsvis program og data findes, se<br />
nedenstående kode:<br />
1<br />
2<br />
OUTPUT_ARCH(m68k:68000)<br />
3<br />
4<br />
__DYNAMIC = 0;<br />
5 MEMORY<br />
6 {<br />
7 VECBASE : ORIGIN = 0x40000, LENGTH = 0x800 /*Vektortabellen*/<br />
8 SUPERSTACK : ORIGIN = 0x40800, LENGTH = 0xF0<br />
114
9 TS2MONDATA : ORIGIN = 0x40900, LENGTH = 0x400<br />
10 ROM : ORIGIN = 0x00000, LENGTH = 0x40000<br />
11 USERRAM : ORIGIN = 0x40D00, LENGTH = 0xFF300<br />
12 USERRAM1 : ORIGIN = 0x200000, LENGTH = 0x100000<br />
13 INTERRUPT3 : ORIGIN = 0x400D8, LENGTH = 0x8<br />
14 INTERRUPT4 : ORIGIN = 0x400E0, LENGTH = 0x8<br />
15 TRAP11 : ORIGIN = 0x40158, LENGTH = 0x8<br />
16 }<br />
17<br />
18 SECTIONS<br />
19 {<br />
20 .text : { * (.text) } > USERRAM<br />
21 .data : { * (.data) } > USERRAM1<br />
22 .bss : { * (.bss) } > USERRAM<br />
23 .irq3 : { * (.irq3) } > INTERRUPT3<br />
24 .irq4 : { * (.irq4) } > INTERRUPT4<br />
25 .trap11 : { * (.trap11) } > TRAP11<br />
26 }<br />
16.4. Diktafon<br />
Det ses f.eks, at USERRAM1, hvor lyddata gemmes, starter på addresse 200000h og er 100000h<br />
lang, hvilket svarer til RAM3 og RAM4 i memorymappet, se figur 8.2. Desuden er den del af<br />
vektortabellen der udnyttes, altså interrupt 3, 4 samt trap 11 defineret. Trap 11 gør det muligt<br />
at ændre interruptniveauet til 5 uden at gå i supervisormode. Dette er nødvendigt for at kunne<br />
udføre privigerede instruktioner, såsom at skrive til statusregisteret. Trap 11 benyttes kun i forbindelse<br />
med kommunikation mellem diktafon og pc.<br />
Ved kompilering laves en S-record, der kan lægges ned på diktafonen. Ved hjælp af et linkermap<br />
ses hvilke adresser de forskellige programdele og globale variable ligger på. Linker-mappet<br />
vil blive vedlagt på cd-rom som "LN.map".<br />
I det følgende vil nogle funktioner, der ikke tidligere er blevet beskrevet, blive gennemgået.<br />
16.4.1 Initialisering<br />
For at diktafonen kan starte rigtigt op, skal diktafonen initialiseres korrekt. Initialiseringen indeholder:<br />
ACIA2: Skal først resettes, hvorefter den skal sætttes op, således at kommunikationen kan<br />
foregå. Denne sættes op til at køre med 115,2 kbps, ingen paritetsbit, og et stopbit.<br />
Display: For at displayet kan opstartes rigtigt, skal det startes som beskrevet i databladet<br />
[Seiko, 1998].<br />
Kvalitet: Sættes til mellemste kvalitet, som angivet i afsnit 3.2.2.<br />
Sætte diktafonen i usermode: Dette gøres for at sikre at programmet ikke har rettigheder til<br />
at ændre statusregistret.<br />
115
Kapitel 16. Softwareimplementation<br />
16.4.2 Interrupthandler<br />
Interrupthandleren er som tidligere nævnt skrevet i assembler. Denne laver forbindelsen mellem<br />
vektortabellen og den funktion, som ønskes kaldt ved et interrupt. Samtidig sørger den for, at de<br />
nødvendige registre bliver lagt på stakken, og fjernet igen når der returneres fra en exception.<br />
Retuneringen fra en exception foretages med kommandoen "rte" (Return from exception).<br />
16.4.3 Display<br />
Displayet består af 4 linier med 16 tegn på hver linie. Det er valgt, at displayets linier deles op,<br />
som det ses på figur:<br />
- - F e j l / S t a t u s - - -<br />
B e s k e d n r : 0 1 / 0 2<br />
T i d : 0 0 : 0 0 / 0 0 : 0 0<br />
R e s t t i d : 0 0 : 0 0<br />
Når diktafonen ikke er i gang med interrupt-rutiner, skrives der til displayet. Der undersøges<br />
hver gang, om Display_status er nul. Hvis den har andre værdier, skal der skrives en fejl ud<br />
på displayet. Der laves i så fald et delay, og der skrives derefter den aktuelle tilstand. Derudover<br />
skrives aktuelt beskednr, antal beskeder, aktuel tid i min, aktuel tid i sek, beskedens længde i<br />
min. og sek., og den resterende tid i hukommelsen i min. og sek. Mens der skrives på displayet<br />
polles der løbende på ACIA2 for at undersøge, om pc’en ønsker forbindelse.<br />
16.4.4 Test af diktafonsoftware<br />
Diktafonsoftwaren er først testet på host. Dette er gjort ved indføre testcases, hvor den enkelte<br />
funktion kommer ud i alle dele af programmet, for på den måde at fjerne de fleste fejl, før<br />
programmet køres på diktafonen. Derefter er de enkelte softwaremoduler testet hver for sig på<br />
diktafonen. Dette er gjort ved at opsætte diktafonen, således at programmets dele bliver testet<br />
efter de i C-filerne opstillede testcases.<br />
Testen viste, at det kun var muligt at optage og afspille beskeder i den laveste kvalitetsindstilling.<br />
Testen viste også, at der ved de to højere kvalitetsindstillinger ikke blev opdateret i displayet, og<br />
lyden var overlejret med støj. Da afspilning og optagelse er interruptstyret, og der kun skrives i<br />
displayet mellem interrupts, vurderes det, at der på grund af interruptrutinen ikke er tid nok til<br />
at færdiggøre denne, inden det næste interrupt modtages. Det konkluderes derfor, at det er fordi<br />
Lyd_kontrol og de tilhørende moduler ved afspilning eller optagelse skal udføre sammenligninger<br />
med antallet af beskeder, aktuel adresse samt tælle tid op og resttid ned ved hver sample.<br />
Problemet vil kunne afhjælpes med kodeoptimering, hvor der vælges at udføre færre funktioner<br />
mellem hvert interrupt, eller mere tid til eksekvering af kode.<br />
116
16.5 Pc-sofware<br />
16.5. Pc-sofware<br />
Pc-softwaren er skrevet i programmeringssproget C. Der er også her benyttet programmet "make"<br />
til kombilering. Da programmet er skrevet til en pc med styresystemet Linux, er det muligt at<br />
anvende standardbiliotekerne i C til f.eks. udskrivning på skærmen. Dette giver mulighed for at<br />
anvende standard device-driver til f.eks. COM-porten.<br />
Opsætningen af COM-porten er specifik for hver enkelt styresystem. Opsætningen af COMporten<br />
foretages ikke på samme måde som på diktafonen, da der bla. anvendes standardbiblioteker.<br />
Den måde kommunikation foregår på vil forklaret nærmere i det følgende afsnit.<br />
16.5.1 Forbindelse gennem COM-port<br />
For at kunne anvende COM-porten er det nødvendigt, at denne er sat rigtigt op. Funktionen,<br />
Opsaet_forbindelse, til opsætningen af COM-porten er lavet med udgangspunkt i et eksempel<br />
fra en forelæsning [Madsen, 2003]. Parameterne skal sættes op som ACIA2, fordi disse skal<br />
kommunikere sammen.<br />
Ud over opsætningen specificeres skrive og læse rutinerne til kommunikationsporten, så de kan<br />
kaldes over alt i programmet. Dette giver de andre funktioner i programmet et "easy to use"<br />
-interface til anvendelsen af COM-porten, når denne er sat op. Skrivefunktionen, put_char,<br />
sender det byte, som den bliver kaldt med. Læsefunktionen, get_char, venter på, at der kommer<br />
en byte fra diktafonen. Hvis diktafonen ikke svarer inden den specificerede timeout-tid,<br />
returneres en fejl.<br />
Når kommunikationen er fuldført, giver modulet mulighed for at lukke COM-porten igen og<br />
genetablere de tidligere opsætninger af COM-porten. Dette sker, når den har sent signalet til<br />
diktafonen, om at kommunikation afbrydes, se appendiksG.<br />
16.5.2 Test af pc-software<br />
Pc-softwaren er testet ved at lave et testprogram, der kører på en anden pc end den pc-programmet<br />
kører på, som simulerer diktafonen i kommunikationsprotokolen. Denne test er beskrevet i<br />
testrapport VII, hvor det ses, at pc-softwaren overholder kommunikationsprotokollen og kan<br />
gemme wave-filer det specificerede sted. Da pc-softwaren blev testet sammen med diktafonen<br />
måtte det konkluderes, at der ikke kunne opnåes en tilfredstillende kommunikation imellem<br />
disse. For at overførslen kunne finde sted skulle interruptniveau sættes op vha. TS2MON. Der<br />
blev indtalt en besked, som fyldte hele den tilgængelige RAM på diktafonen, altså 100000h byte<br />
= 1048576 byte. Ved overførsel fra diktafon til pc viste pc-programmet en længde på 1048575<br />
byte, og denne besked blev overført. Efterfølgende kunne beskeden aflyttes på pc’en. Lyden<br />
var forståelig, men ikke nær så god, som den der kunne afspilles på selv diktafonen. Filen er<br />
vedlagt på cd-rom med navnet "besked1.wav". Egenskaberne for filen viser desuden, at der var<br />
overensstemmelse med det indstillede fra diktafonen, f.eks. var samplingsfrekvensen 4 kHz.<br />
117
Kapitel 16. Softwareimplementation<br />
16.6 Delkonklusion<br />
Diktafonsoftwaren konkluderes at fungere, da der kan optages og afspilles i den laveste kvalitet.<br />
At det ikke fungerer i de højere kvaliteter konkluderes, at skyldes for mange funktioner<br />
i Lyd_kontrol og de moduler som den kalder. Det vil derfor være nødvendigt at begrænse<br />
diktafonens funktionalitet eller skaffe mere tid til eksekvering af kode, ved anskaffelse af en<br />
hurtigere processor. Pc-softwaren konkluderes at virke som modul. Testen har vist at softwaren<br />
kan overholde prokollen og flowdiagrammer i kravspecifikationen. Samspillet med diktafonen<br />
og pc’en konkluderes ikke at virke fuldstændigt, fordi den ikke foregår automatisk.<br />
118
Kapitel<br />
17<br />
Acceptest<br />
I dette kapitel bliver der konstateret, hvilke af accepttestspecifikationens testemner, der opfyldt<br />
i projektet, se afsnit 4. I den følgende tabel referes der til nummeret på det enkelte testemne,<br />
om testemnet er opfyldt og en eventuel henvisning til hvor dette aktuelle testemne er opfyldt.<br />
Størstedelen af testemnerne er opfyldt gennem observationer ved test på den færdige diktafon.<br />
Disse observationer er ikke dokumenteret her, da dette er trivielt.<br />
Nummer Opfyldt Bemærkninger<br />
1<br />
Ô<br />
Testrapport III<br />
2<br />
Ô<br />
Testrapport II<br />
3<br />
Ô<br />
4<br />
Ô<br />
5<br />
Ô<br />
6<br />
Ô<br />
7<br />
Ô<br />
8<br />
Ô<br />
9<br />
Ô<br />
10<br />
Ô<br />
11<br />
Ô<br />
12<br />
Ô<br />
13<br />
Ô<br />
14<br />
Ô<br />
Kan ikke indstilles hver gang<br />
15<br />
Ô<br />
Dog ikke automatisk<br />
16 ¤ Programmet melder fejl ved sletning<br />
17<br />
Ô<br />
Dog kun ved kvalitet 1<br />
18<br />
Ô<br />
Dog kun ved kvalitet 1<br />
119
Kapitel 17. Acceptest<br />
Nummer Opfyldt Bemærkninger<br />
19<br />
Ô<br />
Dog kun ved kvalitet 1<br />
20<br />
Ô<br />
Nogle gange reagerer knapperne ikke<br />
21<br />
Ô<br />
Dog kun ved kvalitet 1<br />
22<br />
Ô<br />
23<br />
Ô<br />
24<br />
Ô<br />
cd-rom<br />
25<br />
Ô<br />
Diagram A, B og C samt kapitel VII<br />
26<br />
Ô<br />
27<br />
Ô<br />
28<br />
Ô<br />
29<br />
Ô<br />
30<br />
Ô<br />
31<br />
Ô<br />
cd-rom<br />
Accepttesten opfyldes på nær et punkt. Det vil være nødvendigt at foretage forbedringer, såfremt<br />
accepttesten skal opfyldes i forhold til accepttestspecifikationen. Kommunikationen mellem diktafonen<br />
og pc’en skal forbedres og diktafon-softwaren skal kunne fungere ved alle kvaliteter.<br />
120
Kapitel<br />
18<br />
Konklusion<br />
Der konkluderes i det følgende på: Anvendelsen af SPU og opfyldelse af kravspecifikationen.<br />
Konkludering på anvendelse af SPU baseres på gruppens vurdering af i hvor stor grad denne<br />
metode har hjulpet arbejdsgangen og den udfærdigede dokumentation. Opfyldelse af kravsspecifikationen<br />
baseres på accepttesten. Om de enkelte punkter i accepttesten er opfyldt kommer af<br />
delkonklusionerne i de foregående kapitler. Derudover konkluderes der i den forbindelse også<br />
på de enkelte moduler.<br />
Anvendelsen af Struktureret Program Udvikling i forbindelse med systemudviklingen har gjort<br />
det let at dele systemet op i mindre moduler. For disse moduler har der været en klar defineret<br />
funktionalitet og grænseflade til de andre moduler. Desuden er der opnået klar oversigt over de<br />
enkelte funktioners virkemåde, og dette har muliggjort parallelle udviklingsforløb både indenfor<br />
software og hardware. Strukturet Program Udvikling har været meget ressourcekrævende<br />
i projektperiodens begyndelse, men har resulteret i mere effektiv ressourcefordeling senere i<br />
selve designforløbet. Som eksempel kan nævnes, at det tog væsentlig kortere tid end forventet<br />
at programmere softwaren. En af bagsiderne ved SPU-metoden modulopdeling har været et øget<br />
komponent forbrug netop den klare opdeling mellem modulerne.<br />
Opfyldelsen af accepttesten er afhængig af fungerende hardware og software. CPU-, hukommelses-<br />
og RS232-modulet danner kernen i diktafonsystemet. CPU-modulet stiller krav til den<br />
øvrige hardware mht. kommunikation, timing og signalniveau. Kommunikation er sikret gennem<br />
generering af de krævede DTACK-signaler ved asynkron kommunikation og VPA-signaler<br />
ved synkron kommunikation og autovektoriseret interrupt. Flowkontrol til de perifere enheder<br />
sker gennem interruptrutiner. Den indbyrdes kommunikation mellem enhederne kan konstateres<br />
at fungere jvf. integrationstesten.<br />
CPU-modulets primære opgave er at hente lyddata fra en A/D-konverter, og gemme dette i<br />
hukommelsen. Frekvensområdet for lyddata er valgt til 300 - 1700/3400/6800 Hz. Den nedre<br />
grænsefrekvens er realiseret vha. et 4. ordens Butterworth højpasfilter. Filtret blev designet på<br />
baggrund at der ønskedes en dæmpning ved 50 Hz ned til under LSB dvs. 60 dB. Filtret giver<br />
en dæmpning på 61 dB ved 50 Hz, og opfylder dermed kravet. Derudover er der indsat et filter<br />
for at undgå aliasing, og dette dæmper 22 dB ved den halve samplingsfrekvens og opfylder<br />
dermed kravet på 19 dB. Ved optagelse konverteres det filtrerede signal til en digital værdi og<br />
lagres i RAM med en samplingsfrekvens på hhv. 4, 8 eller 16 kHz alt efter den valgte kvalitetsindstilling.<br />
Det lagrede lyddata kan enten afspilles på diktafonen eller overføres til en pc<br />
via RS232-modulet. Afspilning sker ved en D/A-konvertering og efterfølgende rekonstruktion<br />
af signalet. A/D- og D/A-konverteringen blev testes ved at sende et sinus-signal ind på A/Dkonverteren<br />
og vha. et program blev de 8 bit sendt direkte over på D/A-konverteren. Støjen på<br />
121
Kapitel 18. Konklusion<br />
udgangen viste sig dæmpet i forhold til indgangen. Afspilning og optagelse kan foretages ved<br />
alle kvaliteter, men lydkvaliteten falder i takt med at samplingsfrekvensen øges.<br />
Kvalitetsindstillingen styres af et kvalitetsmodul, og kvaliteten kan indstilles af brugeren fra en<br />
pc. Dette gøres vha. en styret switch, som har 3 forskellige samplings- og filterfrekvenser på<br />
indgangen. Udgangsclocken kan ændres ved, at CPU’en adresserer kvalitetsmodulet, og vha.<br />
databussens D00-D01, R/Wog chipselect latcher en værdi ind i switchen, som derved skifter<br />
udgangsclock til det ønskede.<br />
Interface til brugeren foregår vha. trykknapper og et display. Information i displayet består af:<br />
tilstand, fejl, aktuel besked, beskeder ialt, aktuel tid i beskeden, længden af aktuel besked samt<br />
resterende tid i hukommelsen; de sidste tre angives i minutter og sekunder. Man kan f.eks.<br />
under optagelse konstatere, at den aktuelle tid bliver talt op hvert sekund samtidigt med, at den<br />
resterende tid bliver talt ned. Dette fungerer dog kun i laveste kvalitet.<br />
Softwarens enkelte moduler tager udgangspunkt i kravspecifikationens flowdiagrammer. Softwaren<br />
er modulvis testet på både host og diktafon. Udfra disse test er det rimeligt at konkludere,<br />
at softwaren fungerer efter hensigten. Det er dog alligevel heri, at problemet højst sandsynligt<br />
består. Problemet formodes at ligge i modulet, Lyd_kontrol, der antages at optage for meget af<br />
CPU’ens tid i forbindelse med optagelse og afspilning af en sample. Denne formodning bygger<br />
på, at displayet ikke opdateres, samt at der ikke reageres på knaptryk, ved mellemste og højeste<br />
lydkvalitet.<br />
Pc-softwaren blev testet sammen med en anden pc, og dette viste, at pc-programmet overholdte<br />
de opstillede krav. Det var dog nødvendigt manuelt at opsætte interruptniveauet. Dette accepteres<br />
ikke, da brugeren forventes ikke at være teknisk kyndig. Lydkvaliteten af det overførte<br />
gjorde det muligt at forstå, hvad der blev sagt, men kvaliteten var ikke på samme niveau som<br />
ved afspilning på diktafonen.<br />
Såfremt det accepteres, at diktafonen kun fungerer optimimalt ved den laveste kvalitet må acceptesten<br />
siges at være opfyldt. Hvis diktafonen skal leve helt op til de, i kravspecifikationen,<br />
opstillede krav vil være nødvendigt at optimere diktafon-softwaren. Eventuelt kunne en løsning<br />
være at anvende en hurtigere CPU.<br />
122
Litteraturliste<br />
[74HC138] Texas Instruments.<br />
SN54HC138, SN74HC138 3-line to 8-line decoders/demultiplexers.<br />
URL: http://lorca.umh.es/isa/es/temas/micros/doc/datasheets/74hc138.pdf<br />
Downloadet d. 27/5-2003, vedlagt på cd-rom.<br />
[74HC148] Texas Instruments. SN54HC148, SN74HC148 8-line to 3-line priority encoders.<br />
URL: http://www.it.lth.se/datablad/Logik/74HC/74HC148.pdf<br />
Downloadet d. 27/5-2003, vedlagt på cd-rom.<br />
[AD7524] Analog Devices. 8-bit Buffered Multiplying DAC.<br />
URL: http://www.analog.com/UploadedFiles/Datasheets/888358036ad7524.pdf<br />
Downloadet d. 28/4-2003, vedlagt på cd-rom.<br />
[ADC0820] National Semiconductor. ADC0820 8-Bit High-Speed µP Compatible A/D Converter<br />
with Track/Hold Function, 1999.<br />
URL: http://www.national.com/ds/AD/ADC0820.pdf<br />
Downloadet d. 18/2-2003, vedlagt på cd-rom.<br />
[AM29F010B] AMD. Am29F010B, CMOS 5.0 Volt-only, Uniform Sector Flash Memory,<br />
2002.<br />
URL: http://www.amd.com/us-en/assets/content_type/<br />
white_papers_and_tech_docs/22336c1.pdf<br />
Downloadet d. 10/3-2003, vedlagt på cd-rom.<br />
[Biering-Sørensen m. fl., 1996] Stephen Biering-Sørensen, Finn Overgaard Hansen, Susanne<br />
Klim og Preben Thalund Madsen. Håndbog i Struktureret Programudvikling. Teknisk<br />
Forlag A/S, 1996, 1. udgave, 7. oplag.<br />
ISBN: 87-571-1046-8.<br />
[Born, 1995] Günter Born. The file formats handbook. International Thomson Computer Press,<br />
London, 1995.<br />
[Clements, 1997] Alan Clements. Microprocessor Systems Design. PWS Publishing Company,<br />
1997, 3. udgave.<br />
ISBN: 0-534-94822-7.<br />
123
Litteraturliste<br />
[COMP630] COMP630 WAV File Format Description, 2000.<br />
URL: http://www.technology.niagarac.on.ca/courses/<br />
comp630/WavFileFormat.html<br />
Downloadet d. 7/5-2003, vedlagt på cd-rom.<br />
[Crocker, 1998] Malcolm Crocker. Handbook of acoustics. John Wiley and Sons, Inc., 1998,<br />
1. udgave.<br />
ISBN: 0-471-25293-X.<br />
[Harmark, 2003] Kristian Harmark. System arkitektur og integration (hw), mm 2. Forelæsning,<br />
Januar 2003.<br />
[Hüche, 1998] Erik Hüche. Digital signalbehandling. Teknisk forlag, 1998, 1. udgave, 6.<br />
oplag.<br />
ISBN: 87-571-0874-9.<br />
[KM684000B] Samsung Electronics. KM684000B Family, 512Kx8 bit Low Power CMOS<br />
Static RAM, 1997.<br />
URL: http://srv.icom4u.co.kr/datasheet/memory/sram/samsung/KM684000B.pdf<br />
Downloadet d. 10/3-2003, vedlagt på cd-rom.<br />
[Krystal] TQ ELEKTRONIK KOMPONENTEN GMBH. Quartz crystals, oscillators and filters,<br />
1993.<br />
[L1604] Powertip. PC 1604-A.<br />
URL: http://www.actron.de/PTC/pc1604a.pdf.<br />
Downloadet d. 15/4-2003, vedlagt på cd-rom.<br />
[Langford-Smith, 1997] F. Langford-Smith. Radio Designer’s Handbook. Reed Educational<br />
and Professional Publishing Ltd., 1997, 4. udgave.<br />
ISBN: 0-7506-3635-1.<br />
[LM380, 2000] National Semiconductor. LM380 2.5W Audio Power Amplifier, 2000.<br />
URL: http://cache.national.com/ds/LM/LM380.pdf.<br />
Downloadet d. 18/2-2003, vedlagt på cd-rom.<br />
[LM380-A, 1995] National Semiconductor. LM380 2.5W Audio Power Amplifier, 1995.<br />
URL: http://www.national.com/an/AN/AN-69.pdf.<br />
Downloadet d. 10/3-2003, vedlagt på cd-rom.<br />
[LM7805] Fairchild Semiconductor. MC78XX/LM78XX/MC78XXA 3-Terminal 1A Positive<br />
Voltage Regulator.<br />
URL: http://www.fairchildsemi.com/ds/LM/LM7805.pdf.<br />
Downloadet d. 27/5-2003, vedlagt på cd-rom.<br />
[LM7905] National Semiconductor. LM79XX Series 3-Terminal Negative Regulators.<br />
URL: http://cache.national.com/ds/LM/LM7905.pdf.<br />
Downloadet d. 27/5-2003, vedlagt på cd-rom.<br />
124
Litteraturliste<br />
[Madsen, 2003] Per Printz Madsen. System arkitektur og integration (hw), mm 19. Forelæsning,<br />
April 2003.<br />
[MAX232] Maxim Integrated Products. Multichannel RS-232 Drivers/Receivers, 2003.<br />
URL: http://pdfserv.maxim-ic.com/arpdf/MAX220-MAX249.pdf.<br />
Downloadet d. 22/5-2003, vedlagt på cd-rom.<br />
[MAX297] Maxim Integrated Products. 8th-Order, Lowpass, Epilliptic, Switched-Capacitor<br />
Filters, 1992.<br />
URL: http://pdfserv.maxim-ic.com/arpdf/MAX293-MAX297.pdf.<br />
Downloadet d. 18/2-2003, vedlagt på cd-rom.<br />
[MC68000] Motorola Inc. M68000 8-/16-/32-Bits Microprocessors User’s Manual, 1993.<br />
URL: http://e-www.motorola.com/brdata/PDFDB/docs/MC68000UM.pdf.<br />
Downloadet d. 7/3-2003, vedlagt på cd-rom.<br />
[MM74C922] Fairchild. MM74C922, MM74C923, 16-Key Encoder, 20-Key Encoder.<br />
URL: http://www.fairchildsemi.com/ds/MM/MM74C922.pdf.<br />
Downloadet d. 27/5-2003, vedlagt på cd-rom.<br />
[Oppenheim/Schafer, 1999] Alan V. Oppenheim og Ronald W. Schafer. Discrete-Time Signal<br />
Processing. Prentice Hall, 1999, 2. udgave.<br />
ISBN: 0-13-754920-2.<br />
[PEEL18CV8] ICT. PEEL TM 18CV8 -5/7/-10/-15/-25 CMOS Programmable Electrically Erasable<br />
Logic Device.<br />
URL: http://www.ictpld.com/ftp/18cv8.pdf.<br />
Downloadet d. 23/5-2003, vedlagt på cd-rom.<br />
[PEEL22CV10] ICT. PEEL TM 22CV10A-7/-10/-15/-25 CMOS Programmable Electrically<br />
Erasable Logic Device.<br />
URL: http://www.ictpld.com/ftp/22cv10a.pdf.<br />
Downloadet d. 17/3-2003, vedlagt på cd-rom.<br />
[Philips Semiconductors, 1990] Philips Semiconductors. 74hc/hct4040, 12-stage binary ripple<br />
counter.<br />
URL: http://www.philipslogic.com/products/hc/pdf/74hc4040.pdf.<br />
Downloadet d. 24/4-2003, vedlagt på cd-rom.<br />
[Sedra/Smith, 1998] Adel S. Sedra og Kenneth C. Smith. Microelectronics Circuits. Oxford<br />
University Press, 1998, 4. udgave.<br />
ISBN: 0-19-511690-9.<br />
[Seiko, 1998] Seiko Instruments GmBH. Liquid Crystal Displays, 1998.<br />
URL: http://www.glyn.de/New_home/Produkte/Opto/Alphanum/<br />
Datasheets/Seiko_Instruments/SI_Manual%20Italien.PDF.<br />
Downloadet d. 15/4-2003, vedlagt på cd-rom.<br />
125
Litteraturliste<br />
[Soelberg, 1977] Jan Soelberg. Anvendt elektronik. Josty Kit, 1977, 8. udgave.<br />
ISBN: 87-980079-0-4.<br />
[Ståbi, 1995] Hans Ebert m.fl. Elektronik Ståbi. Teknisk forlag A/S, 1995.<br />
[Strong/Plitnik, 1992] William J. Strong og George R. Plitnik. Music Speech Audio. Soundprint,<br />
1992, 1. udgave.<br />
ISBN: 0-9611938-2-4.<br />
[Sweet, 2003] Michael R. Sweet. Serial Programming Guide for POSIX Operating Systems.<br />
URL: http://www.easysw.com/~mike/serial/serial.pdf.<br />
Downloadet d. 26/5-2003, vedlagt på cd-rom.<br />
[Texas Instruments, 2002] Texas Instruments. Analysis of the Sallen-Key Architecture.<br />
URL: http://www-s.ti.com/sc/psheets/sloa024b/sloa024b.pdf.<br />
Downloadet d. 21/4-2003, vedlagt på cd-rom.<br />
[TL7705A] Texas Instruments. TL7702A, TL7705A, TL7709A, TL7712A, TL7715A Supply<br />
Voltage Supervisors, 2001.<br />
URL: http://www-s.ti.com/sc/ds/tl7705a.pdf.<br />
Downloadet d. 7/3-2003, vedlagt på cd-rom.<br />
[TLC2201] Texas Instruments. TLC220x, TLC220xA, TLC220xB, TLC220xY Advanced LinC-<br />
MOS Low-noise Precision Operational Amplifiers, 1997.<br />
URL: http://focus.ti.com/lit/ds/symlink/tlc2201.pdf.<br />
Downloadet d. 5/5-2003, vedlagt på cd-rom.<br />
[TLE2072] Texas Instruments. TLE207x, TLE207xA, TLE207xY EXCALIBUR LOW-NOISE<br />
HIGH-SPEED JFET-INPUT OPERATIONAL AMPLIFIERS, 2000.<br />
URL: http://focus.ti.com/docs/prod/productfolder.jhtml?<br />
genericPartNumber=TLE%2072<br />
Downloadet d. 28/3-2003, vedlagt på cd-rom.<br />
[TS2MON, 2002] Sofus Birkedal Nielsen. M68000 Debugger/Monitor: TS2MON USER GU-<br />
IDE. March 2002. Version 1.2.<br />
[VN-3600, 2003] Olympus Danmark A/S. Tekniske specifikationer Olympus Digital Voice<br />
Recorder VN-3600.<br />
URL: http://www.olympus.dk/voice/vn3600_teknik.htm.<br />
Downloadet d. 18/2-2003.<br />
[Wakerly, 2001] John F. Wakerly. Digital Design. Prentice Hall, 2001, 3. udgave.<br />
ISBN: 0-13-089896-1.<br />
[Witten, 1982] Ian H. Witten. Principles of computer speech. Academic Press, Inc., 1982.<br />
ISBN: 0-12-760760-9.<br />
126
[WM-034B] Panasonic. Omnidirectional Electret Condenser Microphone Cartridge.<br />
URL: www.cse.psu.edu/~cg473/92A011.pdf.<br />
Downloadet d. 28/3-2003, vedlagt på cd-rom.<br />
Litteraturliste<br />
127
Del<br />
Appendiks V<br />
129
A<br />
Sampling- og rekonstruktionsteori<br />
Appendiks<br />
A.1 Sampling<br />
I det følgende vil grundlaget for samplingssætningen blive gennemgået. Kilden til det efterfølgende<br />
er [Oppenheim/Schafer, 1999, side 140-144].<br />
Samplingssætningen siger, at man skal sample med en frekvens, der er mindst dobbelt så høj<br />
som den højeste frekvens i det der samples. Hvis ωs er samplingsfrekvensen og ωN er den<br />
højeste frekvens i det samplede, så kan samplingssætningen udtrykkes ved ligningA.1.<br />
ωs 2ωN<br />
Denne sætning vil i det følgende blive begrundet.<br />
A.2 Sampling i frekvensdomænet<br />
I denne gennemgang betragtes et system som på figurA.1.<br />
s(t)<br />
xc(t) xs(t)<br />
Konversion fra impulstog<br />
til diskret tidssekvens.<br />
x[n]=xc(nT)<br />
(A.1)<br />
Figur A.1: Sampling af et kontinuert tidssignal til et diskret tidssignal dvs. en analog til digital<br />
konvertering.<br />
xc(t) er det kontinuerte analoge tidssignal, som ønskes konverteret til et diskret digitalt tidssignal,<br />
x[n]. Vha. modulation med et samplingssignal, s(t), der typisk er fra en A/D-konverteren,<br />
som er givet ved det periodiske impulstog i ligningA.2, hvor n 0123, kan det samplede<br />
signal ,xs(t), fås.<br />
s t ∞<br />
∑ δ t nT (A.2)<br />
n ∞<br />
131
Appendiks A. Sampling- og rekonstruktionsteori<br />
xs(t) fås ved multiplikation af det analoge signal med samplingssignalet. Resultatet er vist i<br />
er samplingsfrekvensen.<br />
ligning A.3. T er her samplingsperioden og fs 1<br />
T<br />
xs t xc t ¡ s t<br />
xc t<br />
∞<br />
∑ δ t nT<br />
n ∞<br />
Dette kan vha. af δ-funktionens "sigte-egenskab" skrives som i ligningA.3.<br />
xs t ∞<br />
∑ xc nT δ t nT (A.3)<br />
n ∞<br />
Ved Fourier-transformation af xs(t) fås et resultat, hvorud fra samplingssætningen ses. En multiplikation<br />
i tidsdomænet svarer til en foldning i frekvensdomænet. Xs(jω) er givet ved ligning<br />
A.4.<br />
Xs jω 1<br />
T Xc jω £ S jω (A.4)<br />
Vinkelfrekvensen ω er givet ved ω 2π<br />
T og Fourier-transformationen, S(jω), af samplingssignalet<br />
er givet ved ligning A.5, hvor k 0123.<br />
S jω 2π<br />
T<br />
∞<br />
∑<br />
δ ω kω (A.5)<br />
n ∞<br />
Foldningen af de to signaler kan herved udtrykkes ved summationen i ligningA.6.<br />
Xc j ω kωs<br />
(A.6)<br />
T k ∞<br />
Ud fra ligning A.6 ses det, at det samplede signal, Xs(jω), er det oprindelige analoge signal<br />
Xs jω 1<br />
∞<br />
∑<br />
med amplituden 1<br />
T og med frekvensspring på ωs mellem hver gentagelse. Hvis det oprindelige<br />
analoge signal har en øvre frekvens på ωN, kan dette illustreres som på figur A.2(a). Samplingssignalet,<br />
S(jω), illustreres som på figurA.2(b). På figur A.2(c) og A.2(d) ses det samplede<br />
signal, Xs(jω). Her er det tydeligt, at samplingsfrekvensen skal være mindst dobbelt så høj som<br />
den højeste frekvens i det samplede signal, ligesom ligningA.1 siger det. Opfyldes samplingssætningen<br />
ikke, opstår der antialiasing som på figurA.2(d).<br />
132
-ωN<br />
Xc(jω)<br />
0 ωN ω<br />
(a) Det kontinuerte tidssignal,<br />
xc(t), repræsenteret i jω-domænet<br />
som Xc(jω).<br />
S(jω)<br />
0<br />
-2ωs -ωs ωs 2ωs<br />
A.2. Sampling i frekvensdomænet<br />
(b) Impulstogsignal fra f.eks. A/D-konverteren, s(t), repræsenteret i jω-domænet som<br />
S(jω).<br />
-2ωs -ωs -ωN<br />
1<br />
T<br />
0<br />
Xs(jω)<br />
ωN<br />
ωs-ωN<br />
(c) Sampling af Xc(jω) med S(jω) for ωs 2ωN.<br />
1<br />
T<br />
Xs(jω)<br />
ωs 2ωs ω<br />
0 ωs<br />
ω<br />
ωs-ωN<br />
(d) Sampling af Xc(jω) med S(jω) for ωs 2ωN.<br />
Figur A.2: Sampling af et kontinuert tidssignal, Xc(jω), til et tidsdiskret signal, Xs(jω).<br />
ω<br />
133
Appendiks A. Sampling- og rekonstruktionsteori<br />
A.3 Rekonstruktion<br />
Følgende er baseret på [Hüche, 1998, side 216-218]. En D/A-konverter består af et nul’te ordens<br />
holdekredsløb, der holder værdien af sidste sample indtil det modtages en ny sample. Dette<br />
resulterer i, at D/A-konverterens udgangssignal bliver trappeformet. Dette trappeformede signal<br />
ønskes udglattet, og dette gøres med et rekonstruktionsfilter.<br />
Et nul’te ordens holdekredsløb har en amplitudekarakteristik, der er udtrykt ved ligningA.7,<br />
hvor fs er samlingsfrekvensen. På figur A.3 ses amplitudekarateristikken for holdekredsløbet<br />
ved positive frekvenser. Det ses af karakteristikken, at der er frekvenskomposanter af signalet,<br />
der er optræder ved højere frekvenser end samlingsfrekvensen. De frekvenskomposanter der<br />
ligger over samplingsfrekvensen, findes ikke i det samplede signal, og ønskes derfor dæmpet.<br />
Desuden indeholder signalet ikke komposanter over den halve samplingsfrekvens, f0, fordi der<br />
samplet, så antialiasing undgås. Derfor bør disse bortfiltreres, da de ellers vil optræde som støj.<br />
134<br />
|X( π f/f s )|<br />
1<br />
0.9<br />
0.8<br />
0.7<br />
0.6<br />
0.5<br />
0.4<br />
0.3<br />
0.2<br />
0.1<br />
¬ sin<br />
X f ¬<br />
<br />
π f<br />
fs<br />
π f<br />
fs<br />
¬ ∞<br />
¬ ∑<br />
¬ m ∞<br />
X f m ¡ fs<br />
0<br />
0 f<br />
0<br />
f<br />
s 3f<br />
0 2f<br />
s<br />
5f<br />
0<br />
3f<br />
s<br />
Figur A.3: Amplitudekarakteristik for nul’te ordens holdekredsløb ved positive frekvenser.<br />
(A.7)
Appendiks<br />
B<br />
Timing af CPU<br />
En stor del af mikroprocessorens operation består af læsning fra og skrivning til perifere enheder<br />
eller hukommelse. Disse operationer skal foregå som read- eller writecycles, og kører efter en<br />
bestemt protokol. Da denne timing af CPU’ens read- og writecycles er vigtig for interface mellem<br />
CPU’en og de perifere enheder, gennemgås processorens read- og writecycles [MC68000,<br />
side 10-10 - 10-14].<br />
Fælles for read- og writecycles er, at de normalt tager 4 clockcycles at udføre. Read- og writecycles<br />
længde bestemmes af, om CPU’en modtager et DTACK-signal tiden, tASI, før S4’s<br />
opadgående flanke, se figur B.1. Hvis ikke der modtages et DTACK inden denne tid, indsættes<br />
der waitcycles, indtil CPU’en modtager et DTACK tASI før den opadgående flanke på systemclock’en.<br />
Under disse waitstates har alle CPU’ens udgangsben de samme værdier som ved slutningen<br />
af S4, og CPU’en foretager sig ikke andet end at afvente DTACK.<br />
B.1 Readcycle<br />
I forbindelse med MC68000’s readcycle fra eksterne enheder, skal denne readcycle overholde<br />
timingdiagrammet i figur B.1.<br />
En readcycle foregår som angivet i timingdiagrammet på figurB.1 og i flowdiagrammet på figur<br />
B.2: Hvis ikke R/W er høj, sættes den høj tCHRH efter S0’s opadgående flanke. Derefter sendes<br />
en adresse ud på adressebussen. Denne adresse angives at være gyldig ved, at AS, UDS og<br />
LDS sættes tCHSL efter den nedgående flanke af S1. Databussen skal have et gyldigt input til<br />
tiden, tDICL, før den nedadgående flanke af S6. Hvis den enhed der læses fra, ikke kan levere<br />
data hurtigt nok til databussen, må der indsættes waitcycles. Der læses fra databussen på den<br />
nedadgående flanke af S6, hvorefter AS, UDS og LDS sættes høje tCLSH efter den nedafgående<br />
flanke af S6.<br />
På figur B.1 er også indtegnet CS, som er det chipselect, som adressedekoderen genererer.<br />
Adressedekoderen reagerer kun, når AS sættes lav, og dette betyder en forsinkelse, tAdrDec, som<br />
er den maksimale tid, adressedekoderen er om at reagere på input.<br />
Den tid, som den eksterne enhed har til at sende gyldig data på databussen, tReadReady, gælder fra,<br />
når den eksterne enhed modtager et chipselect, til data skal være gyldig. Denne tid kan udregnes<br />
ved ligning B.1 til 217,5 ns.<br />
tReadReady 25 ¡tcycle tCHSL tAdrDec tDICL 25 ¡ 125 60 25 10 2175ns (B.1)<br />
135
Appendiks B. Timing af CPU<br />
136<br />
CLK<br />
A01-A23<br />
AS/UDS/LDS<br />
R/W<br />
CS<br />
DTACK<br />
D00-D15<br />
tcycle<br />
S0 S1 S2 S3 S4 S5 S6 S7<br />
tCHRH<br />
Adressering af ekstern enhed<br />
1.R/W sættes til read<br />
2. Adresse sættes på<br />
adressebussen<br />
3. AS, UDS og<br />
LDS sættes<br />
Modtager data<br />
1. Latcher data<br />
2. Fjerner UDS og LDS<br />
3. Fjerner AS<br />
tCHSL<br />
tAdrDec<br />
tDTACKgen<br />
tReadReady<br />
tASI<br />
Figur B.1: Readcycle for CPU<br />
Data<br />
valid<br />
tDICL<br />
CPU Ekstern enhed<br />
Begyndelse på ny cycle<br />
Output af data<br />
1. Modtager chip-select<br />
2. Placerer data på<br />
databussen<br />
3. Sætter DTACK<br />
Afslutter cycle<br />
1. Fjerner data fra databus<br />
2. Fjerner DTACK<br />
Figur B.2: Flowdiagram for readcycle<br />
tCLSH
B.2. Writecycle<br />
Hvis den eksterne enhed kan levere data på databussen indenfor denne tid, skal der ikke indsættes<br />
waitcycles. Hvis enheden derimod er langsommere end 217,5 ns, skal der indsættes et<br />
antal waitcycles afhængig af enhedens hastighed. Hvis der ikke skal indsættes waitcycles, skal<br />
der sørges for, at DTACK modtages tASI før S4’s nedadgående flanke. Dette udregnes i ligning<br />
B.2 til 92,5 ns. I tilfælde, hvor der skal indsættes waitcycles, skal DTACK forsinkes 1 tcycle pr.<br />
ønsket waitcycle.<br />
tDTACKgen 15 ¡tcycle tCHSL tAdrDec tASI 15 ¡ 125 60 25 10 925ns (B.2)<br />
B.2 Writecycle<br />
En writecycle ses på flowdiagrammet på figur B.3 og timingdiagrammet på figur B.4. Den foregår<br />
på følgende måde: Hvis ikke R/W var høj i forvejen, bliver den sat høj tCHRH efter S0’s<br />
opadgående flanke. Derefter sættes en adresse på adressebussen, og AS sættes lav tCHSL efter<br />
S2’s opadgående flanke. tCHRL efter S2’s opadgående flanke sættes R/W lav, hvorefter der sendes<br />
data ud på databussen, og data er gyldig tCLDO efter den nedadgående flanke på S3. Derefter<br />
sættes UDS og LDS tCHSL efter S4’s opadgående flanke. AS, UDS og LDS går høje tCLSH efter<br />
den nedadgående flanke på S7, og data holdes på databussen indtil tCHDOI efter den nedadgående<br />
flanke på S7. Hvis den enhed der skrives til, ikke kan nå at modtage data, inden dette bliver<br />
ugyldigt, må der indsættes waitcycles.<br />
CPU Ekstern enhed<br />
Adressering af ekstern enhed<br />
1. Adresse sættes på<br />
adressebussen<br />
2. AS sættes<br />
3. R/W sættes til write<br />
4. Data placeres på databus<br />
5. Sætter UDS og LDS Input af data<br />
1. Modtager chip-select<br />
2. Gemmer data fra databus<br />
Afslutter cycle<br />
3. Sætter DTACK<br />
1. Fjerner UDS og LDS<br />
2. Fjerner AS<br />
3. Fjerner data fra databus<br />
4. Sætter R/W til read<br />
Afslutter cycle<br />
1. Fjerner DTACK<br />
Begyndelse på ny cycle<br />
Figur B.3: Flowdiagram for writecycle<br />
Den tid, tW riteReady, som den eksterne enhed har til at latche data fra databussen, kan udregnes<br />
ved ligning B.3 til 165 ns.<br />
tWriteReady 2 ¡tcycle tCHSL tAdrDec tCHDOI 250 60 25 0 165ns (B.3)<br />
137
Appendiks B. Timing af CPU<br />
138<br />
CLK<br />
A01-A23<br />
AS<br />
UDS/LDS<br />
CS<br />
R/W<br />
tCHRH<br />
DTACK<br />
D00-D15<br />
tcycle<br />
S0 S1 S2 S3 S4 S5 S6 S7<br />
tCHSL<br />
tDTACKgen<br />
tCHRL<br />
tCLDO<br />
tCHSL<br />
Data valid<br />
tCLSH<br />
tAdrDec<br />
tASI<br />
tWriteReady<br />
Figur B.4: Writecycle for CPU<br />
tCHDOI
B.2. Writecycle<br />
Hvis den eksterne enhed kan latche data fra databussen indenfor 165 ns, skal der ikke indsættes<br />
waitcycles. Hvis enheden derimod er langsommere end dette, skal der indsættes et antal waitcycles<br />
afhængig af enhedens hastighed. Hvis der ikke skal indsættes waitcycles, skal der sørges<br />
for, at DTACK modtages tASI før S4’s nedadgående flanke. Dette udregnes i ligning (B.4) til<br />
117,5 ns. I tilfælde hvor der skal indsættes waitcycles, skal DTACK forsinkes 1 tcycle pr. ønsket<br />
waitcycle.<br />
tDTACKgen 15 ¡tcycle tCHSL tASI 15 ¡ 125 60 10 1175ns (B.4)<br />
139
Appendiks<br />
C Interrupt<br />
Følgende er skrevet ud fra [Clements, 1997, side 443-446].<br />
Interrupt er de perifere enheders mulighed for at bede mikroprocessoren om at blive betjent.<br />
Der findes 2 forskellige måder, hvorpå der kan sendes interrupt til MC68000 processoren.<br />
¯ Vektoriseret interrupt<br />
¯ Autovektoriseret interrupt<br />
Vektoriseret interrupt kræver, at de perifere enheder placerer et vektornummer på databussen,<br />
der fortæller processoren, hvilken interruptrutine der skal udføres. Ved autovektoriseret interrupt<br />
ligger det i CPU’ens exception vektortabel, hvilken Interrupt Service Rutine (ISR), der<br />
skal udføres. Fordelen ved vektoriseret interrupt er, at der er mulighed for flere forskellige interruptrutiner,<br />
mens der ved autovektoriseret interrupt kun er en rutine pr. interruptniveau. Da<br />
der, ifølge afsnit 6.2.1, kun anvendes 2 interrupt-niveauer ud over NMI i dette projekt, vælges<br />
autovektoriseret interrupt, da dette ikke kræver, at de perifere enheder er i stand til at sende<br />
interruptvektoren ud på databussen.<br />
C.1 Autovektoriseret interrupt<br />
C.1.1 Interrupt rutine<br />
Ved autovektoriseret interrupt foregår dataflowet, som det ses på figurC.1.<br />
Når processoren modtager et interrupt, svarer den ved at sende interruptniveauet ud på adressebenene<br />
A01 -A03, ogA04-A23 sættes høje. Derefter sættes R/W til 1, og FC0-FC2 sættes til<br />
(1,1,1), da dette angiver IACK. Herefter sættes AS, LDS og UDS.<br />
Når den enhed, der har sendt interrupt, modtager IACK, skal denne sætte VPA, da dette angiver,<br />
at der er tale om et autovektoriseret interrupt. Da VPA gøres aktiv, ignoreres databussen af<br />
CPU’en og denne slår op i sin vektortabel for at finde ud af, hvilken kode der skal udføres,<br />
når IACK-sekvensen er afsluttet. LDS, UDS og AS fjernes, enheden fjerner VPA og IRQ, og<br />
IACK-sekvensen afsluttes [Clements, 1997, side 444 - 446]. I praksis er det dog ikke enheden,<br />
men CPU-modulet, der sætter og fjerner VPA.<br />
140
Processor<br />
1. Sætter interruptniveau #<br />
på A01-A03<br />
2. Sætter R/W til Read<br />
3. Sætter FC til IACK<br />
4. Sætter AS<br />
5. Sætter LDS og UDS<br />
1. Ignorerer databus<br />
2. Fjerner LDS og UDS<br />
3. Fjerner AS<br />
4. Fjerner IACK fra FC<br />
5. Fjerner IRQ-niveau fra<br />
A01-A03<br />
Starter Interrupt Service<br />
Rutine<br />
C.1. Autovektoriseret interrupt<br />
Perifær enhed<br />
Sætter IRQ#<br />
Sætter VPA efter<br />
modtagelse af IACK#<br />
Fjerner VPA<br />
Fjerner IRQ#<br />
Figur C.1: Flowdiagram for interrupt-sekvensen ved autovektoriseret interrupt<br />
[Clements, 1997, side 441-446]. # angiver nummeret på interruptet, der bliver<br />
sendt.<br />
141
Appendiks<br />
D<br />
Filterberegning<br />
til højpasfilter<br />
I det følgende vil overføringsfunktionen for et 2. ordens Butterworth filter blive udledt og komponentstørrelser<br />
vil blive beregnet ved sammenligning med standardligningen, i frekvensdomænet,<br />
for et 2. ordens højpasfilter. To af disse filtre vil da blive samlet til et 4. ordens filter.<br />
Standardligningen for et 2. ordens højpasfilter ser ud på følgende måde [Texas Instruments, 2002,<br />
s. 9]:<br />
HHP <br />
<br />
f<br />
K<br />
<br />
f 2<br />
fo<br />
fo<br />
2<br />
j¡ f<br />
Q¡ fo 1<br />
(D.1)<br />
Hvor f o angiver filtrets knækfrekvens, K angiver forstærkningen i pasbåndet og Q angiver filterets<br />
godhed. Forstærkningen sættes til 1.<br />
Kredsløbsdiagrammet for et 2. ordens Sallen-Key højpasfilter fremgår af figurD.1<br />
[Texas Instruments, 2002].<br />
Vi<br />
CHP1<br />
CHP2<br />
RHP1<br />
RHP2<br />
Figur D.1: 2. ordens Sallen-Key højpasfilter.<br />
Overføringsfunktionen for højpasfiltret kan nu udledes, hvis dette kredsløb Laplace-transformeres.<br />
Det Laplace-transformerede kredsløb ses på figurD.2.<br />
Der kan nu opstilles ligninger for I1 s , I2 s og V1 s .<br />
142<br />
+<br />
−<br />
I s I1 s I2 s (D.2)<br />
Vo
Vi s<br />
1<br />
s¡CHP1<br />
I s<br />
I2 s<br />
I1 s<br />
V1 s<br />
1<br />
s¡CHP2<br />
RHP1<br />
RHP2<br />
Vo s<br />
+<br />
−<br />
Vo s<br />
Figur D.2: Laplace-transformeret 2. ordens Sallen-Key højpasfilter<br />
Der anvendes virtual shortcircuit-princippet:<br />
Strømmen gennem RHP1 kan findes som:<br />
I1 s Vo s<br />
RHP1<br />
(D.3)<br />
Spændingen, V1(s) findes ved ligning D.4, da der tilnærmelsesvis ikke løber strøm ind i operationsforstærkeren.<br />
I1(s) indsættes:<br />
<br />
1<br />
V1 s I1 s<br />
Vo s<br />
RHP1<br />
s ¡ CHP2<br />
1<br />
s ¡ CHP2<br />
RHP1<br />
RHP1<br />
<br />
Vo s<br />
Strømmen gennem RHP2 findes, og ligning D.4 indsættes:<br />
<br />
<br />
1<br />
I2 s V1 s Vo s<br />
RHP2<br />
Vo s<br />
1<br />
s¡CHP2¡RHP1<br />
RHP2<br />
<br />
1<br />
s ¡ CHP2 ¡ RHP1<br />
Vo s<br />
I(s) fra ligning D.2 bestemmes, og der indsættes D.4:<br />
<br />
<br />
1<br />
I s Vi s V1 s s ¡ CHP1 Vi s Vo s<br />
s ¡ CHP2 ¡ RHP1<br />
<br />
Vo s<br />
<br />
1<br />
s¡CHP2¡HHP1<br />
RHP2<br />
<br />
1 s ¡ CHP1<br />
Overføringsfunktionen kan nu bestemmes ved at sætte ligningD.2 og D.6 lig hinanden.<br />
<br />
<br />
Vi s Vo s<br />
1<br />
s ¡CHP2 ¡ RHP1<br />
<br />
1 s ¡ CHP1 Vo s<br />
RHP1<br />
Overføringsfunktionen findes nu som H s Vo s<br />
Vi s .<br />
H s Vo s<br />
Vi s <br />
<br />
CHP1<br />
CHP2¡RHP1<br />
s ¡ CHP1<br />
1<br />
s ¡ CHP1 RHP1<br />
Vo s<br />
<br />
1<br />
s¡CHP2¡RHP1¡RHP2<br />
1<br />
s ¡CHP2 ¡ RHP1 ¡ RHP2<br />
s 2 ¡ CHP1 ¡CHP2 ¡ RHP1 ¡ RHP2<br />
s 2 ¡ CHP1 ¡CHP2 ¡ RHP1 ¡ RHP2 s CHP1 ¡ RHP2 CHP2 ¡ RHP2 1<br />
(D.4)<br />
(D.5)<br />
(D.6)<br />
<br />
(D.7)<br />
143
Appendiks D. Filterberegning til højpasfilter<br />
Ved at lade s j ¡ 2π¡ f , fo <br />
1<br />
2π Ô CHP1¡CHP2¡RHP1¡RHP2<br />
og Q <br />
Ô CHP1¡CHP2¡RHP1¡RHP2<br />
CHP1¡RHP2 CHP2¡RHP2 CHP:2¡RHP1 1 K<br />
følger ligning D.7 samme form som ligning D.1. Komponentværdierne kan nu bestemmes, idet<br />
fo 300 Hz og Q Ô 0707. Q vælges til Ô 0707, da der ønskes en Butterworth filterkarakteristik.<br />
Butterworth filterkarakteristikken vælges, da der ikke ønskes rippler i hverken stop- eller<br />
pasbåndet. Grunden til, at Q vælges til Ô 0707 og ikke 0,707 som er den korrekte værdi for<br />
en Butterworthkarakteristik er, at det er produktet af de to filtres Q-værdier, der giver det samlede<br />
filters Q-værdi. Ô 0707 ¡ Ô 0707 0707, og det samlede filter får altså en Butterworth<br />
filterkarakteristik.<br />
For at simplificere udregningen sættes CHP1 CHP2. Vi har da:<br />
Ô<br />
C2 ¡ RHP1 ¡ RHP22<br />
Q <br />
2 ¡ C ¡ RHP2<br />
fo <br />
Ñ<br />
RHP2 <br />
Ô 0707 RHP1 4 ¡ 0707 ¡ RHP2<br />
1<br />
2π Ô C2 300 Hz<br />
¡ RHP1 ¡ RHP2<br />
1<br />
600π ¡ C 2 ¡ RHP1 Hz <br />
1<br />
Ô 0707 ¡ 1200π ¡ CHz<br />
C CHP1 CHP2 vælges til 47 nF. Modstandsværdierne bliver da:<br />
RHP2 <br />
1<br />
Ô 0707 ¡ 1200π ¡ 47 nF Hz 671 kΩ 665 kΩ<br />
RHP1 4 ¡ 0707 ¡ 671 kΩ 1898 kΩ 187 kΩ<br />
Ved disse komponentværdier bliver fo 3037 HzogQ Ô 0703. Det samlede 4. ordens filter<br />
kan ses på figur D.3. Q-værdien for det samlede filter er produktet af Q-værdierne for det enkelte<br />
filter. I dette tilfælde bliver den samlede Q-værdi altså 0,703, hvilket tilnærmelsesvis svarer til<br />
en Butterworth filterkarakteristik.<br />
144<br />
Vi<br />
CHP1<br />
47n<br />
CHP2<br />
47n<br />
RHP1<br />
18,7k<br />
RHP2<br />
6,65k<br />
+<br />
−<br />
CHP3<br />
47n<br />
CHP4<br />
Figur D.3: 4. ordens højpasfilter<br />
47n<br />
RHP3<br />
18,7k<br />
RHP4<br />
6,65k<br />
+<br />
−<br />
Vo
Appendiks<br />
E<br />
Wave-filformat<br />
Følgende appendiks vil beskrive opbygningen af filformatet wave. Kilden til det efterfølgende<br />
er [Born, 1995, s. 1147-1149] og [COMP630]. Til sidst i appendikset vil det blive gennemgået,<br />
hvorledes wave-filerne ser ud i dette projekt.<br />
E.1 Generel opbygning af wave-filer<br />
Waveformatet er et underformat af RIFF (Resource Interchange Format), som er foreslået af<br />
Microsoft. RIFF formatet kan indeholde forskellige data, såsom grafik, lyd m.m. Waveformatet<br />
indeholder lyddata. RIFF format er en såkaldt pakke, som består af flere store dele; de såkaldt<br />
chunks. Hver chunk bestemmer indholdet af data. En wavefil består af 3 chunks. Wavefilens<br />
struktur er vist i tabel E.1.<br />
RIFF Header<br />
Format chunk<br />
Data chunk<br />
Tabel E.1: Wavefilens struktur.<br />
Hver chunk begynder med en identifikation af indholdet af den pågældende chunk. Derefter<br />
følger længden af chunk’en. Til sidst følger et vilkårligt antal af parametre.<br />
RIFF filer skal gemmes i "little-endian". Dvs. at bytes i et word gemmes fra højre til venstre,<br />
den mindst betydende byte til højre, modsat "big-endian", som gemmes fra venstre til højre,<br />
den mindst betydende byte til venstre. Little endian kan illustreres ved et eksempel. I tabellen<br />
herunder er der eksempler på at gemme et word (2 byte) eller et longword (4 byte).<br />
Værdi Big endian Little endian Bemærkning<br />
1h 00 01 01 00 word<br />
10h 00 10 10 00 word<br />
2D46h 00 00 2D 46 46 2D 00 00 longword<br />
01020304h 01 02 03 04 04 03 02 01 longword<br />
Herefter følger en beskrivelse af de enkelte chunks.<br />
145
Appendiks E. Wave-filformat<br />
E.1.1 RIFF header<br />
RIFF headerens struktur ses i tabel E.2. De første fire bytes indeholder RIFF signaturen, de<br />
næste fire længden (i bytes) af resten af filen. Header chunk’en afsluttes med “WAVE”, hvilket<br />
antyder at filen er en wavefil.<br />
E.1.2 Format chunk<br />
Byte nummer Indhold<br />
0-3 “RIFF” (ASCII)<br />
4-7 Længden (i bytes) af pakken der følger.<br />
8-11 “WAVE” (ASCII)<br />
Tabel E.2: RIFF headerens struktur.<br />
Denne chunk indeholder information om hvilket format dataene er i f.eks. om lyden er i mono<br />
eller stereo. Strukturen ses i tabel E.3.<br />
Byte nummer Indhold<br />
12-15 “fmt ” (ASCII)<br />
16-19 Længden af resten af denne chunk. Længde er altid 10h.<br />
20-21 Format type: 0 = Mono, 1 = Stereo (Altid stereo [COMP630])<br />
22-23 Kanaler: 1 = Mono, 2 = Stereo<br />
24-29 Samplingsfrekvens [Hz]<br />
30-33 Byte pr. sekund<br />
34-35 Byte pr. sample: 1 = 8 bit mono,2=8bitstereo eller 16 bit mono,<br />
4 = 16 bit stereo<br />
36-37 Bit pr. sample<br />
E.1.3 Data chunk<br />
Tabel E.3: Format chunk’ens struktur.<br />
Denne chunk indeholder data. Strukturen kan ses i tabelE.4.<br />
146
Byte nummer Indhold<br />
38-41 “data” (ASCII)<br />
42-45 Længden af pakken der følger.<br />
E.2. Wave-filens opbygning i dette projekt<br />
46- data (samples med det beskrevne format i format chuck’en)<br />
Tabel E.4: Data chunk’ens struktur.<br />
E.2 Wave-filens opbygning i dette projekt<br />
Tabel E.5 viser, hvordan wave-filerne skal gemmes med de parametre, som er valgt i dette projekt.<br />
Byte 4-7 skal indeholde længden af pakken der følger. Dvs. at det er antallet af samples<br />
+ 36. Offsettet på 36 svarer til antallet af bytes efter byte 7 til data begynder. I dette projekt<br />
anvendes der en bitopløsning på 8 bit (1 byte) pr. sample på 1 kanal. Antallet af kanaler og byte<br />
pr. sample angives derfor altid som 1. Samplingsfrekvensen er variabel. Da bitopløsningen er 8<br />
bit, er byte pr. sekund det samme som samplingsfrekvensen.<br />
Byte nummer Indhold<br />
0-3 “RIFF” (ASCII)<br />
4-7 Antal samples + 36 (bytes).<br />
8-11 “WAVE” (ASCII)<br />
12-15 “fmt ” (ASCII)<br />
16-19 10h.<br />
20-21 Format type: 1 = Stereo<br />
22-23 Kanaler: 1= Mono<br />
24-29 Samplingsfrekvens: 4 kHz (FA0h), 8 kHz (1F40h) eller 16 kHz<br />
(3E80h)<br />
30-33 Byte pr. sekund = samplingsfrekvensen<br />
34-35 Byte pr. sample: 1 = 8 bit mono<br />
36-37 Bit pr. sample: 8<br />
38-41 “data” (ASCII)<br />
42-45 Længden af pakken der følger: Antal samples.<br />
46-slut data (samples med det beskrevne format i format chuck’en)<br />
Tabel E.5: Opbygningen af wave-filen i dette projekt.<br />
147
Appendiks E. Wave-filformat<br />
E.2.1 Eksempel<br />
For at gøre wave-filerne lidt mere håndgribelige, vises her et eksempel. Det antages, at der er<br />
blevet optaget en besked med en samplingsfrekvens på 16 kHz, og at længden af beskeden er<br />
to sekunder, altså det der svarer til 32000 samples. Koden er vist herunder. "R" betyder at det<br />
er ASCII-værdien af R (82), som egentligt står der. Koden er angivet med mellemrum mellem<br />
hver byte. I linie 1 og 5 ses det tydeligt at words og longwords gemmes som “little endian”.<br />
0 "R" "I" "F" "F" RIFF fil<br />
1 24 7D 00 00 00007D24h er 32000+36 (Antallet af samples + 36)<br />
2 "W" "A" "V" "E" WAV format<br />
3 "f" "m" "t" " " Format chunk begynder<br />
4 10 00 00 00 10h er længden af chunk’en.<br />
5 01 00 01 00 0001h er stereo og 0001h er antal kanaler<br />
6 80 3E 00 00 3E80h er 16000 (samplingsfrekvensen)<br />
7 80 3E 00 00 3E80h er 16000 (byte pr. sekund)<br />
8 01 00 08 00 1h er byte pr. sample (mono). 8h er bit pr. sample<br />
9 "d" "a" "t" "a" Data chuck begynder<br />
10 00 7D 00 00 7D00h 32000 (Antalet af samples)<br />
11 . . . . Data, hver prik angiver en byte<br />
12 . . . .<br />
148
Appendiks<br />
F<br />
Seriel kommunikation<br />
Formålet med dette appendiks er at skabe overblik over opsætningen af den serielle kommunikation<br />
i pc-softwaren. Her skal der tages hensyn til, at der er ønsket, at pc-softwaren skal<br />
skrives i Linux. Dette appendiks er baseret på Linux manpages, kilde om seriel kommunikation<br />
[Sweet, 2003] og [Madsen, 2003].<br />
Det er vigtigt at definere, hvordan kommunikation mellem pc og diktafon skal foregå, da der fra<br />
diktafonen er fastsat kriterier, som skal overholdes, for at kommunikationen skal kunne fungere.<br />
Der er valgt at benytte en ACIA som kommunikationsadapter og derfor skal kommunikationen<br />
med diktafonen foregå asynkront. Ligeledes er der fastsat en hastighed, hvormed data kan sendes<br />
til og fra diktafonen, en såkaldt baudrate. I dette tilfælde er baudraten fastsat til 115,2 kbps. Hvis<br />
denne hastighed ikke overholdes, kan man risikere, at der opstår fejl i kommunikationen.<br />
F.1 Standardbiblioteker<br />
I C-programmering findes der foruddefinerede filer, som skal inkluderes i programmet for at<br />
kunne benytte de funktioner, som C tilbyder. Det er derfor vigtigt at finde ud af hvilke INCLUDEfiler,<br />
som skal benyttes til opsætningen af den serielle kommunikation. Det vil her være nødvendigt<br />
at inkludere følgende filer:<br />
stdio.h Standard input/output. Dette giver f.eks. mulighed for udskrift til skærmen og input fra<br />
tastatur.<br />
fcntl.h File control. Giver bl.a. kontrol over "open files".<br />
termios.h Generel terminal interface. Giver kontrol over "tty"porte(TeleType-port); i dette tilfælde<br />
kommunikationsportene.<br />
unistd.h UNIX standard function definition. Definerer symbolske konstanter og strukturer, som<br />
ikke er definerede eller deklarerede.<br />
sys/signal.h Specificerer hvordan programmet skal behandle signaler under eksekvring.<br />
I Linux skal man ind og definere hvilken port man skal skrive til. For at skrive til porten skal<br />
man ind og skrive til en enhedsfil (driver), som svarer til den port, man ønsker at skrive til. I dette<br />
149
Appendiks F. Seriel kommunikation<br />
projekt er det valgt, at den serielle COM1-port skal anvendes og derfor skal stien /dev/ttyS0<br />
anvendes, når der skrives til porten. I Linux er der device-drivere til alt hardware i computeren<br />
og de har til formål at gøre det muligt at kalde de enkelte stykker hardware med software.<br />
F.2 Definitioner af variable<br />
Først defineres der følgende variable, som anvendes gennem opsætningen.<br />
#define BAUDRATE B115200 Et alias for den valgte baudrate.<br />
#define MODEMDEVICE "/dev/ttyS0" Et alias for stien til enheds-driveren for COM1-port.<br />
int fd; Definering af variabel, som i C normalt anvendes til fil-håndtering og kaldes "file descriptor".<br />
Termios er en tty-controller, som anvendes til opsætning af tty-enheder og den er opbygget som<br />
en struct. I denne struct er der, som standard, defineret options, som anvendes i opsætningen af<br />
det enkelte device. De forskellige options er som følger:<br />
c_cflag En kontrol option, som bl.a. anvendes til at opsætte baudrate, antallet af databit, paritetsbit<br />
og stopbit.<br />
c_lflag En lokal option, som bl.a. anvendes til at administrere, hvordan data skal behandles af<br />
den serielle driver.<br />
c_iflag En input option, som bl.a. anvendes til at lave kontrol af paritetsbit på data sendt til<br />
porten.<br />
c_oflag En output option, som bl.a. anvendes til at lave behandling af output-data. Styrer bl.a.<br />
om data skal være lower- eller uppercase.<br />
c_cc En option til karakterkontrol. Anvendes bl.a. til at styre timeouts ved manglende data på<br />
porten.<br />
Der vil i denne struct blive defineret to variable, som skal anvendes til at gemme den gamle og<br />
den nye opsætning af porten. Den gamle opsætning gemmes således, at det er muligt genetablere<br />
den gamle opsætning, efter programmet er afsluttet. De to variable er: newtio og oldtio.<br />
Efter de forskellige hjælpevariable er defineret, kan opsætningen af kommunikationsporten begynde.<br />
F.3 Opsætning af porten<br />
Det er muligt at åbne den poet, man ønsker at skrive til ved at anvende kommandoen:<br />
150
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);<br />
F.3. Opsætning af porten<br />
Hvor det ses at efter defineringen af porten (MODENDEVICE), er der sat nogle flags, som<br />
har betydning for kommunikationen. Det første flag, O_RDWR, sætter porten i R/W-mode. Næste<br />
flag, O_NOCTTY, får programmet til at slippe kontrollen over terminalen således, at input, f.eks.<br />
tastetryk, ikke får indflydelse på terminalen. Det kan f.eks. være at lukke terminalen utidigt. Det<br />
sidste flag, O_NONBLOCK, sørger for at porten ikke blokeres.<br />
Når forbindelsen er åbnet, vil det være en fordel at undersøge, hvilken værdi fd returnerer med,<br />
da " 1" betyder, at der opstod en fejl i forsøget på at åbne forbindelsen. Dette kan f.eks. betyde,<br />
at diktafonen ikke er tilsluttet og der skal derfor komme en fejlmeddelse til brugeren.<br />
Efter returværdien er undersøgt anvendes funktionen tcgetattr, som er en funktion, der anvendes<br />
til at hente den gamle portopsætning og gemme den i variablen oldtio. Det ser ud som<br />
følger:<br />
tcgetattr(fd, &oldtio);<br />
Efter den gamle opsætning er gemt, opsættes de ønskede kontrol options. Det ser ud som følger:<br />
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;<br />
Hvor BAUDRATE angiver den ønskede kommunikationshastighed. Det næste flag, CRTSCTS, angiver<br />
at der ønskes hardwareflowkontrol til datakommunikation. Herefter sættes kommunikationen<br />
til at være 8 bit med flaget CS8, CLOCAL angiver, at der ikke ønskes at ændre "ejer" af porten.<br />
Det sidste flag, CREAD, åbner muligheden for at modtage.<br />
Herefter opsættes porten til at ignorere partitetsfejl ved at opsætte input options således:<br />
newtio.c_iflag = IGNPAR;<br />
Porten sættes herefter op til at sende raw (ubehandlet) data ud. Dvs. dataene sendes ud af porten<br />
som de kommer til den. Dette gøres ved følgende kommando;<br />
newtio.c_oflag = 0;<br />
Da der vælges, at kommunikationen skal foregå med ubehandlet data, skal local options sættes<br />
til nul, da der ellers kan forekomme fejl i kommunikationen. Dette gøres som følgende:<br />
newtio.c_lflag = 0;<br />
Der ønskes, at der skal læses data på porten ved hver karaterer som sendes til den, og for at<br />
sikre, at computeren ikke låser, hvis der ikke modtages data, sættes der en timeout. Dette gøres<br />
som følger:<br />
151
Appendiks F. Seriel kommunikation<br />
newtio.c_cc[VMIN] = 1; /* Antal karakterer før læsning *<br />
newtio.c_cc[VTIME] = 0; /* Ti sekunder wait*/<br />
Efter den ønskede opsætning er specificeret, fjernes den gamle med funktionen tcflush, som<br />
fjerner alt på portens buffer. Efter den gamle opsætning er fjernet, sendes den nye opsætning til<br />
porten med fuktionen tcsetattr, som sætter den nye opsætning. Dette ser ud som følger:<br />
tcflush(fd, TCIFLUSH);<br />
tcsetattr(fd, TCSANOW, &newtio);<br />
Hvor TCIFLUSH fjerner alt opsætning for input. I opsætningen af porten anvendes TCSANOW til<br />
at sætte den nye opsætning uden at vente. Herefter er opsætningen fuldført.<br />
For at lukke for kommunikationen med den serielle port, anvendes kommadoen close(fd);<br />
og dette vil slippe alt data tilknyttet til fd. Dvs. i dette tilfælde den serielle port. Inden porten<br />
lukkes, sættes den gamle opsætning op igen, ved at anvende funktionen tcsetattr. Der sendes<br />
ligeledes et afslutsignal til diktafonen.<br />
Funktionen, som skal anvendes til at skrive fra pc’en til diktafonen, ser ud som følger;<br />
write(fd, &tegn, 1);<br />
Hvor funktionen write anvendes til at skrive til diktafonen. Flaget, &tegn, er en variabel for det<br />
tegn, som skal sendes og 1 angiver mængden af bytes, der skal sendes.<br />
Til sidst ses der på måden, hvorpå der hentes data fra diktafonen. Det gøres på følgende måde:<br />
unsigned char ch = 1;<br />
int timeout;<br />
for( timeout =0; timeout < 2000000;timeout++){<br />
if (read(fd, &ch, 1) ==-1){}<br />
else{return ch;}}<br />
Hvor ch er en variabel for den byte, som hentes fra diktafonen. Der defineres ligeledes en variabel,<br />
timeout som anvendes til tællevariabel for en timeout tælleløkke. Funtionen, read, anvendes<br />
til at læse fra diktafonen. Denne funtion har samme flags som write-funktionen.<br />
152
Appendiks<br />
G Protokol<br />
I dette afsnit vil der blive beskrevet en protokol, som skal ligge til grund for kommunikationen<br />
mellem pc og diktafonen. Ifølge kravspecifikationen skal pc’en styre kommunikationen, når<br />
forbindelsen først er oprettet.<br />
G.1 Løsningsforslag<br />
Der er mange måder at udforme denne protokol på. I en protokol kan der enten lægges vægt<br />
på sikkerhed eller hastighed/simplicitet. For at lave en sikker protokol, kan der laves mange<br />
kontrolkoder, som sendes sammen med hvert stykke data. Hvis modtager finder disse koder<br />
forkerte, kan den bede om at modtage dataene igen. Derved kan der korrigeres for tab af data.<br />
Vælges det i stedet at lave en hurtig protokol, vil overførelsen gå stærkere. For at lave en hurtig<br />
protokol skal man primært sende data og et minimum af kontrolsignaler.<br />
G.1.1 Valg af løsning<br />
Den grundige protokol fravælges, fordi systemet er begrænset. Hermed falder valget på at lave<br />
en hurtig protokol.<br />
G.2 Design af protokol<br />
For at gøre protokollen så hurtig som muligt, er det vigtigt at gøre sig klart, hvad der er den<br />
primære transport af data.<br />
Ud fra figur 3.10 i kravspecifikationen kan det vurderes, hvilke data der skal gå mellem pc’en<br />
og diktafonen.<br />
Fra pc’en til diktafonen skal der kunne sendes følgende:<br />
¯ Efterspørgsel om der er forbindelse<br />
¯ Efterspørgsel om hvor mange beskeder der er<br />
¯ Efterspørgsel om at hente kvalitet i Lyddata<br />
¯ Efterspørgsel om at hente lyddata<br />
¯ Efterspørgsel om at slette lyddata<br />
153
Appendiks G. Protokol<br />
¯ Sætte kvalitet i Kvalitet_status og Lyddata<br />
¯ Afslutte forbindelsen<br />
Fra diktafonen til pc’en skal der kunne sendes følgende:<br />
¯ Svare på at diktafonen er klar<br />
¯ Sende antal af beskeder<br />
¯ Sende kvalitet fra Lyddata<br />
¯ Sende lyddata<br />
¯ Svare på at data er slettet<br />
¯ Svare på at den har modtaget kvaliteten og gemt denne i Kvalitet_status<br />
Det der kræver mest, er at sende lyddata, fordi lyddata i de fleste tilfælde er den største mængde<br />
data. Derfor skal protokollen optimeres til at sende lyddata fra diktafonen til pc’en.<br />
Da det er valgt, at pc’en skal styre kommunikationen, vil det også kun være pc’en, som sender<br />
instruktioner. Diktafonen skal kun svare på de instruktioner, der kommer. Der er et "masterslave"<br />
forhold mellem pc’en og diktafonen.<br />
Først fastlægges instruktionerne og dataene fra pc’en. Der er syv instruktioner fra pc’en. Disse<br />
kan beskrives vha. af tre bit. Pc’en skal ligeledes kunne sende kvalitet til Kvalitet_status<br />
og Lyddata. Dette kræver to bit. For at kunne adskille de enkelte besker, vælges det, at pc’en<br />
skal hente én besked ad gangen. Dette gøres ved at sende en efterspørgsel om at hente lyddata,<br />
samt hvilket beskednummer der ønskes. Der er maksimalt 20 beskeder, det vil kræve 5 bit for at<br />
angive dette.<br />
Da der skal anvendes tre bit til instruktioner og fem bit til data, kan kommunikationen foregå på<br />
byteniveau. Strukturen af en byte, sendt fra pc’en til diktafonen, ses nedenfor.<br />
I2 I1 I0 D4 D3 D2 D1 D0<br />
Hvor "I"angiver instruktioner og "D"angiver data. I det følgende angiver X’erne "don’t cares". I<br />
praksis anvendes der dog 0’er.<br />
Herefter vil det blive beskrevet, hvorledes pc’en sender en instruktion og hvordan diktafonen<br />
skal reagere på denne instruktion.<br />
Efterspørgsel om der er forbindelse<br />
Pc’en sender følgende byte:<br />
1 1 1 X X X X X<br />
Diktafon skal svare med følgende, hvis den er klar:<br />
0 0 0 0 0 0 0 1<br />
Hvis den ikke er klar, skal den sende en kode forskellig fra det ovenstående.<br />
154
Efterspørgsel om hvor mange beskeder der er<br />
Pc’en sender følgende byte:<br />
G.2. Design af protokol<br />
0 0 1 X X X X X<br />
Diktafon skal hente antal beskeder og sende værdien af dette i en byte. Hvis der f.eks. er 11<br />
beskeder, er svaret:<br />
0 0 0 0 1 0 1 1<br />
Efterspørgsel om at hente kvalitet i Lyddata<br />
Pc’en sender følgende byte:<br />
0 1 0 X X X X X<br />
Diktafon skal hente kvalitet og sende værdien af dette i en byte. Hvis det f.eks. er bedste kvalitet,<br />
er svaret:<br />
0 0 0 0 0 0 1 1<br />
Efterspørgsel om at hente lyddata i Lyddata<br />
Pc’en sender følgende byte:<br />
0 1 1 D4 D3 D2 D1 D0<br />
D0-D4 angiver beskednummeret.<br />
Diktafonen skal svare med længden (i bytes) af beskeden og derefter begynde at sende lyddata.<br />
Grunden til at længden sendes er, at pc’en kan afgøre, hvornår beskeden er slut. Længden af<br />
en besked kan maksimalt være hele RAM’en. RAM’en er 20 0000h byte lang. Derfor angives<br />
længden i longword. Grafisk vil svaret se således ud:<br />
0 0 0 0 0 0 0 0<br />
D23 D22 D21 D20 D19 D18 D17 D16<br />
D15 D14 D13 D12 D11 D10 D09 D08<br />
D07 D06 D05 D04 D03 D02 D01 D00<br />
Lyddata - byte pr. byte til beskeden er slut<br />
Efterspørgsel om at slette lyddata i Lyddata<br />
Pc’en sender følgende byte:<br />
1 0 0 X X X X X<br />
Diktafonen skal svare med en byte. Har byten værdien 0, har den slettet data, og alle andre<br />
værdier betyder, at den ikke har slettet data.<br />
155
Appendiks G. Protokol<br />
Sætte kvalitet i Kvalitet_status og Lyddata<br />
Pc’en sender følgende byte:<br />
1 0 1 0 0 0 D1 D0<br />
D0-D1 angiver kvaliteten.<br />
Diktafonen svarer med en byte. Har byten værdien 0, har den sat kvaliteten, og alle andre værdier<br />
betyder, at den ikke har sat kvaliteten.<br />
Afslutte forbindelsen<br />
Pc’en sender følgende byte:<br />
1 1 0 X X X X X<br />
Diktafonen svarer ikke med noget og overtager selv styringen igen.<br />
156
Del<br />
Testrapporter VI<br />
157
Testrapport<br />
I.1 Formål<br />
Formålet med disse målinger er at dokumentere, at:<br />
¯ Reset/halt-kredsløbet fungerer.<br />
¯ Adressedekoderne fungerer.<br />
¯ IRQ-controlleren fungerer.<br />
¯ DTACK-generatoren fungerer.<br />
¯ VPA-generatoren fungerer.<br />
I<br />
CPU-modul<br />
¯ Der kan kommunikeres med CPU-modulet ved hjælp af TS2MON.<br />
For reset/halt-kredsløbet skal undersøges, at RESET og HALT indgangene på mikroprocessoren<br />
holdes lave i minimum 100 ms ved reset. Dette skal finde sted, når strømforsyningen til systemet<br />
tændes, og når en ekstern reset-kontakt aktiveres.<br />
Desuden skal der undersøges, om reset/halt kredsløbet overholder de niveauer, som mikroprocessoren<br />
kræver på RESET og HALT indgangene. Disse niveauer er [MC68000, side 10-7]:<br />
¯ VILmaks: 0,8 V<br />
¯ VIHmin: 2,0 V<br />
For IRQ-controlleren skal undersøges, at der kan sendes interrupts til CPU’en. Herunder at det<br />
er muligt at sende et NMI ved et tryk på NMI-knappen.<br />
For adressedekoderen, VPA-generatoren og DTACK-generatoren skal undersøges, om disse<br />
PEEL’S overholder testvektorerne i ABEL-filen.<br />
159
Testrapport I. CPU-modul<br />
I.2 Reset/halt-kredsløb<br />
I.2.1 Apparatur<br />
Apparat Mærke AAU-nummer<br />
4-kanals oscilloskop Agilent 54625A 33844<br />
Multimeter Fluke 37 08180<br />
Strømforsyning Delta Elektronika E030-3 33133<br />
I.2.2 Fremgangsmåde/opstilling<br />
Ved opstart af system<br />
Der måles med probe 1 på RESET, probe 2 på HALT og probe 3a på strømforsyningen. Dette<br />
ses på figur I.1. Oscilloskopet trigger på strømforsyningen, og derved kan tidsforsinkelsen, fra<br />
strømforsyningen tændes til RESET og HALT går høj, måles. Der måles også på spændingsniveauer<br />
for logisk lav og høj på RESET og HALT vha. oscilloskopets cursor.<br />
3a<br />
RRH2<br />
3b<br />
10k<br />
SWRH<br />
CRHT<br />
10µ<br />
TL7705A<br />
7<br />
SENSE<br />
3<br />
6<br />
CT RESET<br />
1<br />
REF<br />
5<br />
RESET<br />
2<br />
RESIN<br />
CRH1<br />
100n<br />
5V<br />
RRH1<br />
10k<br />
2<br />
DRH1<br />
DRH2<br />
RRH3<br />
10k<br />
1<br />
RRH4<br />
10k<br />
HALT<br />
RESET<br />
Figur I.1: Opstilling ved målinger. Probe 3a benyttes ved målingen ved opstarten af systemet.<br />
Probe 3b benyttes ved målingerne ved reset af systemet, foretaget ved knaptryk på<br />
SWRH. Pilene angiver probernes placering.<br />
Ved aktivering af trykknap<br />
Der måles med probe 1 på RESET, probe 2 på HALT og probe 3b på den eksterne kontakt.<br />
Dette ses på figur I.1. Oscilloskopet trigger på kontakten, og derved måles tidsforsinkelsen, fra<br />
kontakten slippes, til RESET og HALT går høj. Der måles også på spændingsniveauer for logisk<br />
lav og høj på RESET og HALT med oscilloskopets cursor.<br />
160
I.2.3 Måleresultater<br />
Ved opstart af system<br />
I.2. Reset/halt-kredsløb<br />
Målingerne ved opstarten af systemet kan ses på oscilloskopbilledet på figurI.2. I tabel I.1 ses<br />
de på oscilloskopbilledet aflæste tider fra systemet er startet op, og til signalerne bliver høje.<br />
I tabel I.2 ses spændingsniveauerne for resethalt-kredsløbet under opstart.<br />
Probe 1, [V]<br />
Probe 2, [V]<br />
Probe 3, [V]<br />
4<br />
2<br />
0<br />
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45<br />
4<br />
2<br />
0<br />
4<br />
2<br />
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45<br />
0<br />
0 0.05 0.1 0.15 0.2 0.25<br />
tid, [s]<br />
0.3 0.35 0.4 0.45<br />
Figur I.2: Billede af oscilloskopets visning ved opstart. Probe 1 er RESET, probe 2 HALT og<br />
probe 3 viser strømforsyningen.<br />
161
Testrapport I. CPU-modul<br />
Probe 1, [V]<br />
Probe 2, [V]<br />
Probe 3, [V]<br />
5<br />
4<br />
3<br />
2<br />
1<br />
5<br />
4<br />
3<br />
2<br />
1<br />
4<br />
2<br />
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45<br />
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45<br />
0<br />
0 0.05 0.1 0.15 0.2 0.25<br />
tid, [s]<br />
0.3 0.35 0.4 0.45<br />
Figur I.3: Billede af oscilloskopets visning ved aktivering af trykknap. Probe 1 er RESET,<br />
probe 2 HALT og probe 3 viser reset-knappen.<br />
Signal Tider<br />
RESET 250 ms<br />
HALT 250 ms<br />
Tabel I.1: Tid fra opstart af systemet til signalerne<br />
går høje.<br />
Ved aktivering af trykknap<br />
Signal Logisk lav Logisk høj<br />
RESET 0,563 V 5,0 V<br />
HALT 0,500 V 5,0 V<br />
Tabel I.2: Spændingsniveauer ved opstart.<br />
Ved aktiveringen af trykknappen fremkom det oscilloskopbillede, som er vist på figurI.3. På<br />
oscilloskopbilledet blev aflæst tider fra trykknappen blev aktiveret, og til signalet igen gik højt.<br />
Disse tider ses i tabel I.3. I tabel I.4 ses signalernes spændingsniveauer når resetknappen aktiveres.<br />
I.2.4 Vurdering<br />
Det ses af resultaterne i tabel I.1, at den tid som går fra systemet startes, og til RESET og HALT<br />
indgangene sættes høje, er over de 100 ms, som systemet kræver som minimum. Det ses af tabel<br />
I.2 og I.4 at de nødvendige spændingsniveauer for logisk lav og logisk høj er overholdt.<br />
Af tabel I.3 ses, at der går minimum 100 ms fra reset-knappen er sluppet, og til RESET og HALT<br />
indgangene sættes høje af resethalt-kredsløbet. Dette accepteres som bevis for, at reset/haltkredsløbet<br />
fungerer efter hensigten.<br />
162
Signal Tid<br />
RESET 170 ms<br />
HALT 170 ms<br />
Tabel I.3: Tid fra deaktivering af resetknap til<br />
RESET og HALT igen er deaktiverede.<br />
I.3 Adressedekoder<br />
I.3.1 Apparatur<br />
I.3. Adressedekoder<br />
Signal Logisk lav Logisk høj<br />
RESET 0,563 V 4,94 V<br />
HALT 0,625 V 5,06 V<br />
Tabel I.4: Spændingsniveauer ved aktivering<br />
af resetknap.<br />
Apparat Mærke AAU-nummer<br />
PEEL-tester Ukendt intet<br />
Logikanalysator Agilent 54621D 33842<br />
Fungerende minimumssystem<br />
I.3.2 Fremgangsmåde/opstilling<br />
Adressedekoderne placeres i PEEL-testeren, og der undersøges om kredsene overholder testvektorerne<br />
i ABEL-filerne "addp1.abl" og "addp2.abl", disse er vedlagt på cd-rom.<br />
For at teste en PEEL’s virkemåde indsættes denne i en PEEL-tester. På en PEEL-tester kan<br />
indgangene styres vha. kontakter og udgangenes værdier kan aflæses på lysdioder. Fremgangsmåden<br />
er som følger: Indsæt PEEL’en i testeren. Indstil indgangene, som den første testvektor<br />
fra simuleringen. Slut strømmen og kontrollér, at der er de rigtige signaler på udgangen. Indgangene<br />
skiftes herefter, så de passer med den næste testvektor osv.<br />
Derefter sættes adressedekoderne i CPU-modulet, og databenene, D00-D15, samt DTACK tvinges<br />
til stel. Dette bringer systemet i såkaldt free-running-mode, hvor der på adressebussen køres<br />
alle adresser igennem, startende ved 00 0000h. Ved hjælp af logikanalysatoren undersøges, om<br />
de enkelte enheder chipselectes.<br />
I.3.3 Måleresultater<br />
Testvektorerne blev enkeltvist gået igennem ved PEEL-testeren, og det blev set, at testvektorerne<br />
var overholdt. Der blev set, at der i free-running-mode blev chipselected enheder i den<br />
rækkefølge, der er angivet i memory-mappet på figur8.2 i afsnit 8.<br />
163
Testrapport I. CPU-modul<br />
I.4 IRQ-controller<br />
I.4.1 Apparatur<br />
Apparat Mærke AAU-nummer<br />
PEEL-tester Ukendt intet<br />
Fungerende minimumssystem<br />
I.4.2 Fremgangsmåde/opstilling<br />
IRQ-controlleren testes ved et fungerende minimumssystem. Det undersøges ved et program,<br />
om der reageres på de interrupt, der modtages. Når TS2MON kører på systemet, undersøges om<br />
der reageres på et tryk på NMI-knappen.<br />
I.4.3 Måleresultater<br />
Der kan kommunikeres med CPU-modulet vha. en terminal på en pc. Når der kører et program<br />
på systemet, kan systemet afbrydes med NMI-knappen. Når der trykkes på NMI-knappen udskrives<br />
CPU’ens register på computerskærmen. Desuden ses, ved ændring af statusregisteret, at<br />
der kan modtages interrupt 3 og 4.<br />
I.4.4 Vurdering<br />
IRQ-controlleren antages af fungere, da denne reagerer korrekt ved NMI-tryk samt interrupts<br />
fra andre enheder.<br />
I.5 DTACK og VPA generator<br />
I.5.1 Apparatur<br />
I.5.2 Fremgangsmåde/opstilling<br />
Apparat Mærke AAU-nummer<br />
PEEL-tester Ukendt intet<br />
Generatoren testes i en PEEL-tester for at påvise, at testvektorerne overholdes. Testvektorerne<br />
ses i ABEL-filerne, "dtack.gen" og "vpagen.abl" som er vedlagt på cd-rommen.<br />
164
I.5.3 Måleresultater<br />
Testvektorerne var overholdt.<br />
I.6 Konklusion<br />
I.6. Konklusion<br />
Det kan konkluderes, at reset/halt-kredsløbet virker efter hensigten. De nødvendige niveauer er<br />
overholdt, og RESET og HALT holdes lave i tilstrækkelig lang tid til, at mikroprocessoren kan<br />
resettes.<br />
Det kan desuden konkluderes, at adressedekoderen fungerer korrekt, de rigtige enheder modtager<br />
chipselect, når de modtager de adresser, der passer dertil. Den efterfølgende free-runningmode-test<br />
af CPU-modulet underbyggede beviset for at adressedekoderne fungerede.<br />
Da adressedekoderne, VPA- og DTACK-generatoren overholder testvektorerne i de respektive<br />
ABEL-filer, kan det ses, at disse blokke fungerer. Det blev vist under IRQ-controlleren, at der<br />
kan kommunikeres med en pc vha. TS2MON og at modulet kan modtage interrupt, herunder<br />
NMI, ved et tryk på NMI-knappen.<br />
Derfor kan det konkluderes, at CPU-modulekt fungerer korrekt.<br />
165
Testrapport<br />
II.1 Formål<br />
II<br />
Mikrofonmodul<br />
Formålet med denne testrapport er at bestemme:<br />
¯ Talesignalets styrke med henblik på forstærkning for at udnytte hele A/D-konverterens<br />
arbejdsområde<br />
¯ Forstærkningen af signalet fra mikrofonen<br />
¯ Filtrets dæmpning og samplingsfrekvens ved de 3 kvaliteter<br />
¯ Spændingstilpasning til A/D-konverterens indgang<br />
¯ Nøjagtighed og funktion af A/D-konverteringen<br />
II.2 Talesignalets styrke<br />
II.2.1 Apparatur<br />
Apparat Mærke AAU-nummer<br />
Strømforsyning Delta Elektronika E030-3 33132<br />
33137<br />
Oscilloskop Agilent 54621A 33847<br />
Multimeter Fluke 37 06184<br />
II.2.2 Fremgangsmåde/opstilling<br />
Til måling af talesignalets styrke blev brugt opstillingen på figurII.1.<br />
Ved normal brug af en diktafon vil man, som bruger, have en afstand mellem mund og mikrofon<br />
på 10 - 15 cm og det er derfor nødvendigt at kunne registrere talesignalet med denne afstand.<br />
Det vil ligeledes være nødvendig at tale i et normalt toneleje, men da det er diffust, vil en af<br />
gruppens medlemmer blive sat til at tale i et hævet toneleje for at sikre, at der repræsenteres en<br />
maksimal værdi, som vil være realistisk set i forhold til almindelig tale.<br />
Til opstillingen blev brugt de anbefalede komponentværdier fra databladet, dvs. en modstand på<br />
2,2 kΩ og en kondensator på 33 pF, se [WM-034B]. Det viste sig ved brug af den anbefalede<br />
166
1 RMF1<br />
CMF1<br />
470 nF<br />
5V<br />
2,2 kΩ<br />
Figur II.1: Opstilling ved måling på mikrofon.<br />
II.2. Talesignalets styrke<br />
kondensator, at det ikke var muligt at registrere talesignalet i forhold til støjen og derfor ændredes<br />
størrelsen af kondensatoren til 470 nF. Ved brug af denne kondensator var det muligt at<br />
registrere et talesignal med en afstand til mikrofonen på 15 cm.<br />
Der blev sat en forsyning på 5 V på mikrofonen og målt med oscilloskopet over kondensatoren.<br />
Multimetret blev brugt til at sikre, at der var en 5 V forsyning.<br />
Der blev først foretaget en gennemgang af hele alfabetet for at se, hvor det største udsving skete;<br />
det var ved bogstaverne "A"og "S". Herefter blev målingerne udført.<br />
II.2.3 Måleresultater<br />
Først blev der målt på opstillingen, hvor der blev benyttet en kondensator på 33 pF. Oscilloskopbilleder<br />
af de målte signalniveauer kan ses på figurII.2.<br />
Probe 1, [V]<br />
6<br />
4<br />
2<br />
0<br />
−2<br />
−4<br />
−6<br />
x 10 −3<br />
−8<br />
0 0.1 0.2 0.3 0.4 0.5<br />
tid, [s]<br />
0.6 0.7 0.8 0.9<br />
(a) Støjmåling. Med Quick Measure funktionen er<br />
målt 23,2 mVpp<br />
Probe 1, [V]<br />
0.01<br />
0.005<br />
0<br />
−0.005<br />
−0.01<br />
0 0.1 0.2 0.3 0.4 0.5<br />
tid, [s]<br />
0.6 0.7 0.8 0.9<br />
(b) Talesignal (Bogstavet "A"). Med Quick Measure<br />
funktionen er målt 37,5 mVpp.<br />
Figur II.2: Målinger ved benyttelse af en kondensator på 33 pF.<br />
Det ses af figur II.2(a), at baggrundsstøjen ligger på 23,2 mVpp. Med oscilloskopets cursorfunktion<br />
måles støjen til at have en frekvens på 50 Hz. På figur II.2(b) ses, at talesignalet har en<br />
peak-peak-spænding på 37,5 mVpp.<br />
167
Testrapport II. Mikrofonmodul<br />
Herefter blev der målt på den nye opstilling, hvor kondensatoren på 33 pF blev erstattet med en<br />
470 nF kondensator. Oscilloskopbilleder af de målte signalniveauer kan ses på figurII.3.<br />
Probe 1, [V]<br />
10<br />
8<br />
6<br />
4<br />
2<br />
0<br />
−2<br />
−4<br />
x 10 −3<br />
0 0.02 0.04 0.06 0.08 0.1<br />
tid, [s]<br />
0.12 0.14 0.16 0.18<br />
(a) Støjmåling. Der er målt 31,3 mVpp.<br />
Probe 1, [V]<br />
0.04<br />
0.02<br />
0<br />
−0.02<br />
−0.04<br />
−0.06<br />
Probe 1, [V]<br />
0.06<br />
0.04<br />
0.02<br />
0<br />
−0.02<br />
−0.04<br />
−0.06<br />
−0.08<br />
0 0.02 0.04 0.06 0.08 0.1<br />
tid, [s]<br />
0.12 0.14 0.16 0.18<br />
(c) Talesignal (Bogstavet "S"). Der blev målt 152<br />
mVpp.<br />
−0.1<br />
0 0.02 0.04 0.06 0.08 0.1<br />
tid, [s]<br />
0.12 0.14 0.16 0.18<br />
(b) Talesignal (Bogstavet "A"). Quick Measure<br />
funktionen målte 197 mVpp.<br />
Figur II.3: Målinger ved benyttelse af en kondensator på 470 pF.<br />
Det ses på figur II.3(a), at baggrundsstøjen er på 31,6 mVpp. Der blev desuden målt på et talesignal,<br />
hvor der blev foretaget to målinger på henholdsvis bogstavet "A"og bogstavet "S". Som<br />
det ses af figur II.3(b) og II.3(c) var spændingsniveauerne henholdsvis 197 og 152 mVpp.<br />
II.2.4 Vurdering<br />
Målingerne med en 33 pF kondensator viste, at der var et meget lavt SNR. Dette gør det svært at<br />
skelne mellem talesignalet og støj. For at afhjælpe problemet blev indsat en større kondensator<br />
på 470 nF, og derved opnås en større SNR. Det ses af figurerne II.3(b) og II.3(c), at talesignalet<br />
168
II.3. Mikrofonforstærker<br />
har en maksimal peak-to-peak-spænding på 197 mV, når der tales ca. 15 cm fra mikrofonen.<br />
Dette kan anvendes til at bedømme, hvor meget mikrofonforstærkeren skal forstærke signalet.<br />
II.3 Mikrofonforstærker<br />
II.3.1 Apparatur<br />
Apparat Mærke AAU-nummer<br />
Strømforsyning Delta Elektronika E030-3 33132<br />
33137<br />
Oscilloskop Agilent 54624A 33843<br />
RC-Oscillator B&OTG7 07997<br />
II.3.2 Fremgangsmåde/opstilling<br />
Der blev med et oscilloskop målt på forstærkerens ind- og udgang. Opstillingen kan ses på figur<br />
II.4.<br />
1<br />
Vin<br />
RMF2<br />
23,2k<br />
RMF2A<br />
4,7k<br />
−<br />
+<br />
RMF4<br />
476k<br />
Vout<br />
Figur II.4: Opstilling ved måling på mikrofonforstærker.<br />
Der blev sendt et sinussignal med en frekvens på 1 kHz og en spænding på over 250 mVpp for at<br />
kunne justere forstærkningen til 20 gange. Der blev efterfølgende lavet et oscilloskopbillede for<br />
at vise, at forstærkeren kan forstærke signaler, hvor dens udgang ikke forvrænger i nærheden af<br />
yderpunkter dvs. -2,5 V og 2,5V.<br />
II.3.3 Måleresultater<br />
Der ses på figur II.5 oscilloskopbilledet for målingen. Med oscilloskopets Quick Measure funktion<br />
blev målt vpp 1 = 391 mVpp og vpp 2 = 7,38 Vpp.<br />
2<br />
169
Testrapport II. Mikrofonmodul<br />
Probe 1, [V]<br />
0.15<br />
0.1<br />
0.05<br />
0<br />
−0.05<br />
−0.1<br />
−0.15<br />
Probe 2, [V]<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
x 10 −3<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
x 10 −3<br />
3<br />
2<br />
1<br />
0<br />
−1<br />
−2<br />
−3<br />
tid, [s]<br />
Figur II.5: Måling på ind- og udgang af mikrofonforstærker. Probe 1 er indgangen og Probe 2<br />
er udgangen.<br />
II.3.4 Vurdering<br />
Af figur II.5 ses, at signalet kun forstærkes 18,9 gange. Potentiometeret er derfor ikke justeret<br />
helt korrekt. Det ses desuden, at signalet som forventet inverteres. Selv ved indgangsspændinger,<br />
der er for store i forhold til det forventede fra mikrofonen ses, at mikrofonforstærkeren er i stand<br />
til at forstærke signalet 18,9 gange uden forvrængning. Forstærkningen justeres efterfølgende<br />
til 20 gange ved potentiometeret.<br />
170
II.3.5 Højpasfilter og antialiasing-filter<br />
II.3.6 Apparatur<br />
Apparat Mærke AAU-nummer<br />
II.3. Mikrofonforstærker<br />
33132<br />
Strømforsyning Delta Elektronika E030-3 33136<br />
33137<br />
X-Y Recorder Brüel & Kjær Type 2308 08450<br />
Measuring Amplifier Brüel & Kjær Type 2636 08451<br />
Sine Generator Brüel & Kjær Type 1051 08449<br />
Fungerende CPU- og<br />
hukommelsesmodul<br />
II.3.7 Fremgangsmåde/opstilling<br />
For at undersøge højpas- og antialiasingfilterets knækfrekvenser og dæmpninger ved de tre forskellige<br />
kvaliteter, blev der benyttet et fungerende CPU- og hukommelsesmodul, sammen med<br />
kvalitetsmodulet. De 2 filtre blev koblet i serie, og kvalitetsmodulet blev ved afsendelse af 0001<br />
til adressen 88 0000h sat til den laveste kvalitet, dvs. en knækfrekvens på 1,7 kHz.<br />
X-Y-recorderen, sinusgeneratoren og måleforstærkeren blev benyttet til at tegne filtrenes frekvensrespons.<br />
Disse 3 blev kalibreret ifølge manualen i laboratoriet. Derefter blev målt frekvensrespons<br />
for frekvenssweep fra 20 Hz til 20 kHz. Signalamplituden var 1 Vp. Der blev målt<br />
frekvensrespons for de to øvrige knækfrekvenser for antialiasingfilteret ved afsendelse af hhv.<br />
0002 til 88 0000h for 3,4 kHz og 0003 til 88 0000 for 6,8 kHz.<br />
Derefter blev der foretaget en måling kun på højpasfilteret, for at vise hvor stor højpasfilterets<br />
dæmpning er ved de lave frekvenser. Dette blev gjort ved at justere måleforstærkeren, således at<br />
nulpunktet lå ved -30 dB.<br />
II.3.8 Måleresultater<br />
På figur II.6 ses frekvensresponset for højpas og antialiasingfilteret. Det ses, at der er en dæmpning<br />
på 47 dB mellem 20 og 50 Hz, der er rippler på mellem 1 og 2 dB. Ved 300 Hz er signalet<br />
dæmpet 3 dB.<br />
At kurverne for 1,7 kHz, 3,4 kHz og 6,8 kHz er sammenfaldende indtil 1,7 kHz betyder, at der<br />
er fuld signalgennemgang i højpasfilteret indtil afskæringsfrekvenserne. Det ses af figuren, at<br />
filteret knækker ved præcis 1,7 kHz, 3,4 kHz og 6,8 kHz. Signalet er ved 2 kHz, 4 kHz og 8 kHz<br />
dæmpet med 22 dB.<br />
På figur II.7 ses målingen på højpasfilteret alene.<br />
171
Testrapport II. Mikrofonmodul<br />
Figur II.6: Frekvensrespons for højpas- og antialiasingfilter ved 1,7 KHz, 3,4 kHz og 6,8 kHz.<br />
172
II.3.9 Vurdering<br />
Figur II.7: Frekvensrespons for højpasfilteret.<br />
II.3. Mikrofonforstærker<br />
Det ses af frekvensresponset for filtrene på figurII.6, at højpasfilteret har den korrekte knækfrekvens.<br />
Signalet er dæmpet 3 dB ved 300 Hz. Det ses desuden, at signalet er dæmpet minimum<br />
43 dB ved 50 Hz. Signalet burde ifølge afsnit 11.2.3 være dæmpet 62,5 dB, men grunden til at<br />
dette ikke kan aflæses på grafen er, at apparatet ikke var indstillet til at vise dæmpninger under<br />
47 dB. Den efterfølgende måling kun på højpasfilteret viste, at højpasfilteret dæmpede signalet<br />
61 dB ved 50 Hz. Af figur II.6 ses at der er overshoot, hvilket betyder, at højpasfilteret ikke har<br />
en perfekt Butterworth filterkarakteristik.<br />
På frekvensresponset ses, at signalet på udgangen af højpasfilteret ved 50 Hz er dæmpet 43<br />
dB, 46 dB og 47 dB ved knækfrekvens på hhv. 1700 Hz, 3400 Hz og 6800 Hz. Denne forskel<br />
begrundes med unøjagtig kalibrering mellem målinger. Apparatet var indstillet til ikke at kunne<br />
vise dæmpninger under 47 dB, og der henvises ved de lave frekvenser til figurII.7.<br />
Ved de tre kvalitetsindstillinger var signalet dæmpet 22 dB ved halvdelen af den tilhørende<br />
samplingsfrekvens. Dette er tilstrækkeligt, da der ifølge afsnit11.2.4 ses, at signalet skulle være<br />
dæmpet 19 dB ved den halve samplingsfrekvens.<br />
173
Testrapport II. Mikrofonmodul<br />
II.4 Spændingstilpasning<br />
II.4.1 Apparatur<br />
Apparat Mærke AAU-nummer<br />
Strømforsyning Delta Elektronika E030-3 33132<br />
33137<br />
Oscilloskop Agilent 54624A 33843<br />
RC-Oscillator B&OTG7 07997<br />
II.4.2 Fremgangsmåde/opstilling<br />
Spændingstilpasningen blev undersøgt sammen med spændingsbeskyttelsen for A/D-konverteren.<br />
Der blev sendt en sinusspænding ind på indgangen til additionskoblingen af operationsforstærkeren,<br />
og målt på udgangen af denne samt udgangen af beskyttelsesoperationsforstærkeren. Opstillingen<br />
ses på figur II.8.<br />
RADC4<br />
10k<br />
10k<br />
RADC5<br />
-5 V<br />
−<br />
+<br />
ADC_B<br />
TLE2072<br />
1<br />
Vin<br />
10k<br />
RADC1<br />
RADC3<br />
10k<br />
10k<br />
RADC2<br />
−<br />
+<br />
ADB_A<br />
TLE2072<br />
2<br />
DADC1<br />
DADC2<br />
Figur II.8: Opstilling ved måling på spændingstilpasning.<br />
5V<br />
−<br />
+<br />
ADC_2<br />
TLC2201<br />
Der blev først sendt en sinusspænding med en frekvens på ca. 1 kHz og en peak-peak-spænding<br />
på 3,38 V ind på forstærkeren. Derefter blev der undersøgt om overspændingsbeskyttelsen fungerede,<br />
og der blev sendt en sinusspænding med en amplitude på ca. 4 V ind på Vin på operationsforstærkeren.<br />
II.4.3 Måleresultater<br />
På figur II.9 ses målinger på additionskoblingen og spændingsbeskytteren. Der blev målt en<br />
frekvens på 1,338 kHz, vpp 1 = 3,38 V, vpp 2 = 3,44 V, vpp 3 = 3,38 V med oscilloskopet<br />
Quick Measure funktion.<br />
174<br />
3
Probe 1, [V]<br />
Probe 2, [V]<br />
Probe 3, [V]<br />
1<br />
0<br />
−1<br />
4<br />
3<br />
2<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
1<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
4<br />
3<br />
2<br />
0 0.5 1 1.5 2 2.5<br />
tid, [s]<br />
3 3.5 4 4.5<br />
II.4. Spændingstilpasning<br />
Figur II.9: Måling på additionskobling. Probe 1 viser indgangen på additionskoblingen, probe<br />
2 udgangen og probe 3 udgangen af spændingsbeskytteren.<br />
På figur II.10 ses målingen på spændingstilpasningen, hvor indgangssignalet har en amplitude<br />
på lidt over 4 V. Frekvensen er 1,338 kHz.<br />
II.4.4 Vurdering<br />
Det ses af figurerne II.9 og II.10, at signalet ikke forstærkes, men centreres omkring 2,5 V.<br />
Derved kan det konkluderes, at additionskoblingen fungerer. Det ses desuden, at beskyttelseskredsløbet<br />
for A/D-konverteren fungerer, da der på trods af en meget stor indgangsspænding<br />
til additionskoblingen ikke kommer spændinger ud af beskyttelseskredsløbet, der er under 0 V<br />
eller over 5 V. Af figur II.10 ses på probe 3, at signalet der kommer ud af beskyttelseskredsløbet<br />
ikke går helt ned til 0 V og op til 5 V. Dette skyldes, at rail-to-rail operationsforstærkeren ikke<br />
er helt perfekt. Denne kan ikke levere spændinger, der går helt ud til forsyningerne [TLC2201,<br />
side 11].<br />
x 10 −3<br />
x 10 −3<br />
x 10 −3<br />
175
Testrapport II. Mikrofonmodul<br />
Probe 1, [V]<br />
Probe 2, [V]<br />
Probe 3, [V]<br />
4<br />
2<br />
0<br />
−2<br />
−4<br />
4<br />
2<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
0<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0 0.5 1 1.5 2 2.5<br />
tid, [s]<br />
3 3.5 4 4.5<br />
Figur II.10: Måling på additionskobling med indikation af overspænding. Probe 1 viser indgangen<br />
på additionskoblingen, probe 2 udgangen og probe 3 udgangen af spændingsbeskytteren.<br />
II.5 A/D-konvertering<br />
II.5.1 Apparatur<br />
x 10 −3<br />
x 10 −3<br />
x 10 −3<br />
Apparat Mærke AAU-nummer<br />
33132<br />
Strømforsyning Delta Elektronika E030-3 33133<br />
33136<br />
33137<br />
Logikanalysator Agilent 54621D 33842<br />
Multimeter Fluke 37 08517<br />
Fungerende CPU-<br />
og hukommelsesmodul<br />
II.5.2 Fremgangsmåde/opstilling<br />
Ved hjælp af programmerne "adctest.c", der er vedlagt på cd-rom, sættes CPU-modulet til at<br />
hente data fra A/D-konverteren.<br />
176
1 void adctest(void){<br />
2 char lyddata = adc;<br />
3 dac = lyddata;}<br />
4<br />
II.6. Konklusion<br />
adc og dac angiver indholdet af hhv. A/D-konverteren og D/A-konverteren.<br />
Logikanalysatoren benyttes til at måle på databenene fra A/D-konverteren samt dennes chipselect.<br />
Der sendes en spænding ind på A/D-konverterens indgangsben, og denne spænding måles<br />
med multimeteret. Når logikanalysatoren viser, at chipselect er lav, ses den digitale værdi, som<br />
repræsenterer spændingen på A/D-konverterens indgang. Spændingen indstilles på forskellige<br />
værdier mellem 0 V og 5 V, og der ses, hvilken digital værdi, der svarer dertil. Der startes ved 0<br />
V, og der undersøges, hvor meget spændingen skal øges for at skifte til den næste digitale værdi.<br />
Desuden måles, hvilken spænding der skal til, før der skiftes til den højeste digitale værdi, 255.<br />
II.5.3 Måleresultater<br />
II.5.4 Vurdering<br />
Indgangsspænding Digital værdi<br />
0,000 V 0<br />
0,014 V 1<br />
0,992 V 51<br />
2,495 V 127<br />
4,02 V 207<br />
4,96 V 255<br />
Det ses af resultaterne i afsnit II.5.3, at den mindst betydende bit er repræsenteret ved en spændingsforskel<br />
på 0,014 V. Dette burde være 5V<br />
255 20mV. For spændingen på 0,992 V, 2,495 V og<br />
4,02 V skal de digitale værdier være henholdsvis 51, 127 og 205. Den højeste digitale værdi ligger<br />
ved 4,96 V. De nævnte fejl accepteres, da disse ligger inden for A/D-konverteren fejlområde<br />
på ¦1 LSB [ADC0820, side 3].<br />
II.6 Konklusion<br />
Det kan ud fra målingerne konkluderes, at mikrofonen fungerer, mikrofonforstærkeren forstærker<br />
signalerne 20 gange og højpasfilteret frafiltrerer 50 Hz lavfrekvent støj. Dæmpningen bestemmes<br />
til 61 dB, og dette opfylder kravet.<br />
Det ses også, at antialiasingfilteret fungerer efter hensigten, og kan bortfiltrere signaler med<br />
frekvenser over 1,7 kHz, 3,4 kHz eller 6,8 kHz alt efter kvalitetsindstilling, da signalerne er<br />
177
Testrapport II. Mikrofonmodul<br />
dæmpet 22 dB i forhold til halvdelen af de tilhørende samplingsfrekvenser.<br />
Spændingen tilpasses således, at den svinger omkring 2,5 V, og svinger mellem 0 og 5 V.<br />
Spændingen kan ikke komme hhv. under eller over disse værdier, og derved beskyttes A/Dkonverteren<br />
mod over- og underspændinger.<br />
A/D-konverteren konluderes at fungere korrekt, da denne er meget præcis i konverteringen. At<br />
der er små afvigelser fra det forventede accepteres, da dette skyldes A/D-konverterens begrænsninger.<br />
178
III<br />
Kvalitetsmodulet<br />
Testrapport<br />
III.1 Formål<br />
Formålet med denne testrapport er at teste om udgangssignalerne fra krystalopkoblingen og clockneddelerne<br />
har de korrekte frekvenser, hvilket også indebærer at clocksignalerne skal have de<br />
rigtige spændingsniveauer. Clockinputs til antialiasing- og rekonstruktionsfiltret er høj i niveauet<br />
4 til (Vcc+0,3) V og lav i niveauet (-Vcc-0,3) til1V[MAX297]. Clockinputs til A/D-konverteren<br />
er høj i niveauet 2 V til (Vcc+0,2) V og lav i niveauet -0,2 V til 0,8 V[ADC0820].<br />
Derudover skal det testes om den styrede switch gemmer kvaliteten og vælger de korrekte udgangsfrekvenser.<br />
III.2 Clocksignaler<br />
III.2.1 Apparatur<br />
Apparat Mærke AAU-nummer<br />
Strømforsyning Delta Elektronika E 030-3 33136<br />
Oscilloskop Agilent 54624A 100MHz, 4-kanals 33843<br />
Multimeter Electronics 1502 08116<br />
PEEL-tester Ukendt Intet<br />
III.2.2 Fremgangsmåde/opstilling<br />
Måleopstillingen ses på figur III.1. Først måles udgangsclocken fra krystaloscillatoren med<br />
probe 1. Dernæst måles de tre udgangsclock’s, CLK_F1, CLK_F2 og CLK_F3, fra neddeleren<br />
lavet i en PEEL med henholdsvis probe 1, 2 og 3. Til sidst måles de tre udgangsclock’s,<br />
CLK_S1, CLK_S2, CLK_S3, fra neddeleren, bestående af en 12 bit tæller, med henholdsvis<br />
probe 1, 2 og 3.<br />
PEEL’ens tilstande er testet på en PEEL-tester.<br />
179
Testrapport III. Kvalitetsmodulet<br />
DX34<br />
DX33<br />
1N4148 1N4148 1N4148<br />
VCC<br />
DX32<br />
CX31<br />
15p<br />
RX31<br />
VCC<br />
4,096MHz X-tal3<br />
14 8 CLK<br />
GND 7 1<br />
EQUO-350C<br />
390R<br />
DX31<br />
1N4148<br />
1<br />
CLK<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
11<br />
12<br />
22CV10AP<br />
74HC/HCT4040<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
VCC<br />
24<br />
23<br />
22<br />
21<br />
20<br />
19<br />
18<br />
17<br />
16<br />
15 CLK_F1<br />
14 CLK_F2<br />
13 CLK_F3<br />
VCC<br />
16<br />
15 CLK_S1<br />
14 CLK_S3<br />
13<br />
12 CLK_S2<br />
11 MR<br />
10 CP<br />
9<br />
3a 2a 1a<br />
1b<br />
3b 2b<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
18CV8AP<br />
17<br />
16<br />
15<br />
14<br />
13<br />
12<br />
11<br />
VCC<br />
20<br />
19 CLK_S<br />
18 CLK_F<br />
Figur III.1: Kredsløbsdiagram for kvalitetsmodulet med målepunkter angivet. 1, 2 og 3 angiver<br />
nummeret på proben. a angiver, at der måles på clocken til antialiasing- og<br />
rekonstruktionsfilteret. b angiver, at der måles på clocken til A/D-konverteren.<br />
III.2.3 Måleresultater<br />
Resultaterne af målingerne for clocksignalet og clockneddelerne ses på figurIII.2, III.3 og III.4.<br />
PEEL’en følger testvektorerne og den virker derfor som forventet.<br />
III.2.4 Vurdering<br />
Selve clocksignalet fra oscillatoren måles til 4,1 MHz. Dette adskiller sig fra den forventede<br />
frekvens på 4,096 MHz med 0,1 %, og skyldes antallet af betydende cifre på måleudstyret.<br />
Frekvenserne fra 74HC4040 til A/D-konverteren havde de forventede værdier og deres spændingsniveauer<br />
ligger indenfor A/D-konverterens krav.<br />
Frekvenser fra PEEL’en til antialiasing- og rekonstruktionsfiltret afviger fra de forventede værdier<br />
med maksimalt 0,5 %, og spændingsniveauerne ligger ikke indenfor disses krav. Derfor<br />
indføres en 74HC4040 i serie med en 74HC4017 til at lave den ønskede clockneddeling.<br />
På figur III.5 ses målingen på udgangen på 74HC4040. Dette er de frekvenser, som angiver<br />
antialiasing- og rekonstruktionsfilterets knækfrekvenser.<br />
Frekvenserne fra 74HC4040 i serie med 74HC4017 afviger fra de forventede værdier med maksimalt<br />
0,1 %, og dette vurderes som acceptabelt. Spændingsniveauerne ligger ikke indenfor<br />
filternes krav. Dette resultat vurderes dog bedre end resultatet med PEEL’en, og denne løsning<br />
fastholdes eftersom løsningen ikke brænder filtrene af, som PEEL’en gør det.<br />
180
Probe 1, [V]<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
0 1 2 3 4 5<br />
tid, [s]<br />
6 7 8 9<br />
III.2. Clocksignaler<br />
Figur III.2: Udgangssignalet fra krystaloscillatoren. Frekvensen er målt til 4,10 MHz.<br />
Probe 1, [V]<br />
Probe 2, [V]<br />
Probe 3, [V]<br />
4<br />
2<br />
0<br />
6<br />
4<br />
2<br />
0<br />
0 1 2 3 4 5 6 7 8 9<br />
−2<br />
0 1 2 3 4 5 6 7 8 9<br />
6<br />
4<br />
2<br />
0<br />
0 1 2 3 4 5<br />
tid, [s]<br />
6 7 8 9<br />
Figur III.3: Udgangssignalerne fra PEEL’en, der neddeler frekvenserne til antialiasing- og rekonstruktionsfiltret.<br />
CLK_F1 (probe 1) er målt til 170,80 kHz, CLK_F2 (probe 2)<br />
til 342,00 kHz og CLK_F3 (probe 3) til 683,00 kHz. Spændingsniveauet varierer<br />
fra -2 V til 6,1 V.<br />
x 10 −7<br />
x 10 −6<br />
x 10 −6<br />
x 10 −6<br />
181
Testrapport III. Kvalitetsmodulet<br />
Probe 1, [V]<br />
Probe 2, [V]<br />
Probe 3, [V]<br />
4<br />
2<br />
0<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
4<br />
2<br />
0<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
4<br />
2<br />
0<br />
0 0.5 1 1.5 2 2.5<br />
tid, [s]<br />
3 3.5 4 4.5<br />
Figur III.4: Udgangssignalerne fra 12-bit tælleren, der neddeler frekvenserne til A/Dkonverteren.<br />
CLK_S1 er målt til 4,00 kHz, CLK_S2 til 8,00 kHz og CLK_S3 til<br />
16,00 kHz. Spændingsniveauet varierer fra -0,1 V til 5 V.<br />
Probe 1, [V]<br />
Probe 2, [V]<br />
Probe 3, [V]<br />
4<br />
2<br />
0<br />
4<br />
2<br />
0<br />
6<br />
4<br />
2<br />
0<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
0 0.5 1 1.5 2 2.5<br />
tid, [s]<br />
3 3.5 4 4.5<br />
Figur III.5: Udgangssignalerne fra 74HC4040, som sidder i serie med 74HC4017, der neddeler<br />
frekvenserne til antialiasing og rekonstruktionsfiltret. CLK_F1 (probe 1) er målt<br />
til 85,1 kHz, CLK_F2 (probe 2) til 171 kHz og CLK_F3 (probe 3) til 342 kHz.<br />
Spændingsniveauet varierer fra -1 V til 6 V.<br />
182<br />
x 10 −4<br />
x 10 −4<br />
x 10 −4<br />
x 10 −5<br />
x 10 −5<br />
x 10 −5
III.3 Styret switch<br />
III.3. Styret switch<br />
Test af den styrede switch foregår ved at teste PEEL’en i en PEEL-tester. Der testes om testvektorerne<br />
overholdes.<br />
III.3.1 Måleresultater<br />
Resultaterne for den styrede switch ses i tabellerne III.1,III.2 og III.3.<br />
FS W C<br />
1 X 0<br />
X 1 0<br />
0 0 1<br />
Tabel III.1: Testresultater for kontrolsignalet.<br />
C D1/D0 Q1/Q0 Q1*/Q0*<br />
0 0 0 0<br />
0 1 0 0<br />
1 1 X 1<br />
1 0 X 0<br />
Tabel III.2: Testresultater for D-latchene.<br />
Q1 Q0 CLK CLK CLK CLK CLK CLK CLK_F CLK_S<br />
_F1 _F2 _F3 _S1 _S2 _S3<br />
0 0 1 1 1 1 1 1 0 0<br />
0 0 0 1 1 0 1 1 0 0<br />
0 1 1 1 1 1 1 1 1 1<br />
0 1 0 1 1 0 1 1 0 0<br />
1 0 1 1 1 1 1 1 1 1<br />
1 0 1 0 1 1 0 1 0 0<br />
1 1 1 1 1 1 1 1 1 1<br />
1 1 1 1 0 1 1 0 0 0<br />
III.4 Integrationstest<br />
Tabel III.3: Testresultater for den styrede switch.<br />
Vha. TS2MON er det blevet testet om det kan lade sig gøre at ændre kvaliteten og dermed<br />
samplings- og filterfrekvenserne ved at skrive til FS-styring’s PEEL’en. Dette er gjort ved et<br />
chipselect, FS, af kvalitetsmodulet, et tilhørende write-signal og den ønskede kvalitet udtrykt<br />
183
Testrapport III. Kvalitetsmodulet<br />
ved D00 og D01. Ved denne test har det vist sig, at det kan lade sig gøre at ændre kvaliteten fra<br />
SW.<br />
III.5 Konklusion<br />
Det konkluderes, at kvalitetsmodulet virker efter hensigten. A/D-konverteren får de rigtige samplingsfrekvenser,<br />
og spændingsniveauerne overholdes. Filtrene modtager også de rigtige samplingsfrekvenser,<br />
og selvom spændingsniveauerne ligger lidt over de anbefalede, fungerer filtrene<br />
efter hensigten.<br />
Den styrede switch overholder testvektorerne, og integrationstesten viste, at det ved hjælp af<br />
CPU-modulet var muligt at ændre kvaliteten.<br />
184
Testrapport<br />
IV.1 Formål<br />
IV<br />
Højttalermodul<br />
Denne testrapport skal dokumentere, at højttalermodulet virker efter hensigten. Der måles på:<br />
¯ D/A-konverteren<br />
¯ Udgangsforstærkeren<br />
Der måles ikke på rekonstruktionsfilteret, da dette kobles på nøjagtig samme måde som antialiasingfilteret.<br />
Det konkluderes i testrapport II for mikrofonmodulet, at antialiasingfilteret virker,<br />
og dette antages at være bevis nok for, at rekonstruktionsfilteret også virker, da dette er identisk<br />
hermed.<br />
IV.2 D/A-konverter<br />
IV.2.1 Apparatur<br />
Apparat Mærke AAU-nummer<br />
33132<br />
Strømforsyning Delta Elektronika E030-3 33136<br />
33137<br />
Oscilloskop Agilent 54624A 33843<br />
Fungerende CPU- og kvalitetsmodul<br />
IV.2.2 Fremgangsmåde/opstilling<br />
Ved hjælp af minimumssystemet indstilles kvalitetsmodulet til den laveste kvalitet, 4 kHz samplingsfrekvens,<br />
ved at skrive 0001 til adressen 88 0000h i TS2MON. Derefter sendes følgende<br />
programkode til minimumssystemet, og denne programkode eksekveres.<br />
185
Testrapport IV. Højttalermodul<br />
1 void dactest(void){<br />
2 int i = 0;<br />
3 while(1){<br />
4 for(i = 0; i=0;i--){<br />
8 dac = i;<br />
9 }<br />
10 }<br />
11 }<br />
Programkoden har til formål at sende en kode til D/A-konverteren, der så sender et trekantsignal<br />
ud på dens udgang. "dac"er indholdet af D/A-konverterens adresse (se evt. "headerfil.h"på<br />
vedlagte cd-rom).<br />
Der måles både på udgangen af D/A-konverteren og udgangen af rekonstruktionsfilteret.<br />
IV.2.3 Måleresultater<br />
På figur IV.1 ses D/A-konverterens og rekonstruktionsfilterets udgange. Udgangen af D/Akonverteren<br />
svinger mellem 250 mV og -5,315 V, aflæst med cursor. Udgangen af rekonstruktionsfilteret<br />
svinger mellem 123 mV og -4,815 V, aflæst med cursor. Frekvensen af trekantsignalet<br />
måles til 207 Hz med cursor. Det ses, at der er mere støj på D/A-konverterens udgang end<br />
rekonstruktionsfilterets udgang. Det ses ligeledes at der er en lille faseforskydning.<br />
IV.3 Udgangsforstærker<br />
IV.3.1 Apparatur<br />
Apparat Mærke AAU-nummer<br />
33132<br />
Strømforsyning Delta Elektronika E030-3 33136<br />
33137<br />
Oscilloskop Agilent 54624A 33843<br />
Effektmodstand 4 Ω 40 W Intet<br />
IV.3.2 Fremgangsmåde/opstilling<br />
På udgangsforstærkeren måles kvaliteten af signalet. Der sendes, med en sinusgenerator, en<br />
sinusspænding ind på forstærkerens indgang. Der sættes en 4 Ω effektmodstand på forstærkerens<br />
186
Probe 1, [V]<br />
Probe 2, [V]<br />
0<br />
−1<br />
−2<br />
−3<br />
−4<br />
−5<br />
0<br />
−1<br />
−2<br />
−3<br />
−4<br />
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018<br />
0 0.002 0.004 0.006 0.008 0.01<br />
tid, [s]<br />
0.012 0.014 0.016 0.018<br />
IV.3. Udgangsforstærker<br />
Figur IV.1: Måling på D/A-konverter og rekonstruktionsfilter, f = 207 Hz. Probe 1 er på D/Akonverterens<br />
udgang og probe 2 på rekonstruktionsfilterets udgang.<br />
udgang. Med et oscilloskop måles på ind- og udgang, når der sendes en sinusspænding med<br />
frekvens på ca. 1 kHz, et DC-offset på -2,5 V og en amplitude på ca. 2,5 V ind på indgangen.<br />
Volumen skrues helt op.<br />
1<br />
Vin<br />
Udgangsforstærker<br />
Figur IV.2: Opkobling og placering af oscilloskop-prober ved måling på udgangsforstærkeren.<br />
IV.3.3 Måleresultater<br />
På figur IV.3 ses input og output af udgangsforstærkeren. Det ses, at signalet ikke forvrænger<br />
på udgangen i forhold til indgangen. Frekvensen måles til 1,127 kHz med Quick Measure på<br />
oscilloskopet.<br />
Der måles en peak-peak-spænding på indgangen på 4,88 V og 6,00 V på udgangen ligeledes<br />
med Quick Measure.<br />
2<br />
4 Ω<br />
187
Testrapport IV. Højttalermodul<br />
Probe 1, [V]<br />
Probe 2, [V]<br />
−1<br />
−2<br />
−3<br />
−4<br />
3<br />
2<br />
1<br />
0<br />
−1<br />
−2<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
0 0.5 1 1.5 2 2.5<br />
tid, [s]<br />
3 3.5 4 4.5<br />
Figur IV.3: Måling på ind- og udgang på udgangsforstærker, probe 1 er indgangen, og probe 2<br />
er udgange.<br />
IV.4 Vurdering<br />
Det ses på udgangen af D/A-konverteren, at den konverterer lineært og at den fordeler udgangsspændingen<br />
mellem 250 mV og -5,135 V. Dette er et større område end 0 V til -5 V, men fænomenet<br />
ignoreres, da dette antages at være frekvenskomposanter, der opstår ved D/A-konvertering.<br />
Det ses, at rekonstruktionsfilteret, som forventet, dæmper en del af disse komposanter. At frekvenskomposanterne<br />
ikke forsvinder helt, kan skyldes, at programmet sender samples til D/Akonverteren<br />
med en højere frekvens, end det er tilpasset til rekonstruktionsfilteret.<br />
Ved måling på udgangsforstærkeren ses, at udgangsforstærkeren ikke forvrænger signalet. Signalets<br />
forstærkning afhænger af potentiometeret på forstærkeren. Det ses, at signalet ikke blev<br />
forvrænget ved et indgangssignal med en frekvens på 1,127 kHz og en peak-peak-spænding på<br />
4,88 V.<br />
IV.5 Konklusion<br />
Ud fra test på D/A-konverteren kan det konkluderes, at denne fungerer efter hensigten. Det<br />
accepteres, at konverteren i yderområderne har en udgangsspænding, der går ud over 0 V til -5<br />
V, da det antages, at der kommer støj fra konverteren. Det kan ligeledes konkluderes at filtret<br />
virker efter hensigten.<br />
Testen viser også, at udgangsforstærkeren fungerer efter hensigten, da signalet ikke forvrænges.<br />
188<br />
x 10 −3<br />
x 10 −3
Testrapport<br />
V.1 Formål<br />
V<br />
Knapmodul<br />
Formålet med denne testrapport er at vise, at knapmodulet virker efter hensigten. Dvs. at hvis<br />
der trykkes på en knap, sender modulet et interrupt til CPU-modulet og gemmer værdien af<br />
knaptrykket i overensstemmelse med den valgte grænseflade til softwaren (omtalt i afsnit5.4).<br />
Desuden skal det eftervises, at modulets udgange til databussen er højimpedante, når modulet<br />
ikke er chipselected.<br />
V.2 Test af PEEL’s<br />
V.2.1 Apparatur<br />
V.2.2 Fremgangsmåde/opstilling<br />
Testvektorerne testes i en PEEL-tester.<br />
V.2.3 Måleresultater<br />
Apparat Mærke AAU-nummer<br />
PEEL-tester Ukendt Intet<br />
PEEL med encoder blev testet uden fejl, og alle testvektorer blev opfyldt. Testen af PEEL’en<br />
med interruptstyring og Knap_status viste fejl. Testvektorerne fra 2-10 gav ikke det ønskede<br />
resultat. PEEL’en vil ikke skifte til tilstand S1, når KNAP var lig 1.<br />
For at rette denne fejl blev der lavet en ny ABEL-kode. Med den éne ændring, at KNAP skulle<br />
være lig 11, i stedet for 1, for at skifte til S1. Denne ABEL-kode findes på den vedlagte cd-rom<br />
som "kstyr2.abl". Koden er simuleret med testvektor og disse gik igennem. Den er ligeledes<br />
testet med succes i en PEEL-tester.<br />
189
Testrapport V. Knapmodul<br />
V.2.4 Vurdering<br />
Denne ændring betyder dog at en af knapperne skal have værdien 11. Dette er lavet om i encoderen,<br />
så OPTAG-knappen har værdien 11 i stedet for 1. Den nye ABEL-kode ses på den vedlagte<br />
cd-rom, som “encoder2.abl”. I de følgende tests blev de nye ABEL-koder anvendt.<br />
V.3 Højimpedante udgange<br />
V.3.1 Apparatur<br />
V.3.2 Fremgangsmåde/opstilling<br />
Apparat Mærke AAU-nummer<br />
Oscilloskop Agilent 54621A 33860<br />
PEEL-tester Ukendt Intet<br />
For at undersøge om udgangene er højimpedante, når der ikke er chipselect, udføres følgende<br />
test: Når der ikke er chipselect, skal udgangene "svæve". Det kan undersøges, om en udgang<br />
svæver vha. en simpel opstilling, som er vist på figurV.1. En person berører oscilloskopets probe<br />
gennem en modstand, og tilfører derved proben støj. Med proben berøres udgangen, og svæver<br />
denne, kan man se dette støj på oscilloskopet. Hvis udgangen derimod ikke er højimpedant, ses<br />
værdien af udgangssignalet på oscilloskopet, altså 0 V eller 5 V. Alle databen testes på denne<br />
måde. Indgangssignalet KS skiftes med kontakten. Dette vil resultere i en ændring på udgangen.<br />
Der tages et oscilloskopbillede for at dokumentere rigtigheden.<br />
5V<br />
DUT<br />
Støj fra person<br />
D0-D3<br />
Figur V.1: Testopstilling til måling af svævende udgange. Støj fra person tilføres ved at holde<br />
en finger på modstanden.<br />
V.3.3 Måleresultater<br />
Resultatet af højimpedanstesten se på figur V.2. Det ses tydeligt, at udgangen svæver, når KS er<br />
negeret, derfor er udgangene højimpedante.<br />
190<br />
10k<br />
1
Probe 1, [V]<br />
Probe 2, [V]<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
−1<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
−1<br />
0 0.5 1 1.5 2 2.5<br />
tid, [s]<br />
3 3.5 4 4.5 5<br />
V.4. Integrationstest<br />
Figur V.2: Resultat af højimpedanstesten. Probe 1 er udgangen D0 og probe 2 er indgangen KS.<br />
V.4 Integrationstest<br />
V.4.1 Apparatur<br />
Apparat Mærke AAU-nummer<br />
Logikanalysator Agilent 54621D 33842<br />
Forsyning Hameg 33884<br />
Fungerende minimumsystem<br />
V.4.2 Fremgangsmåde/opstilling<br />
Denne test udføres for at teste om CPU-modulet kan modtage værdierne af et knaptryk. CPUmodulet<br />
forbindes via RS232C-forbindelsen. På pc’en startes en terminal. Der kan nu kommunikeres<br />
med TS2MON. CPU’en er nu i supervisormode og interruptniveauet i statusregisteret er<br />
sat til 7. For at den skal kunne modtage interrupt 3, skal niveauet sættes ned. Dette gøres med<br />
kommandoen:<br />
#REG SR 2200 (Sætter interrupt level til 2)<br />
For at teste om der bliver udført en interruptrutine, loades der to programmer ned i hukommelsen.<br />
Det ene program, "hello.X68" loades ned på adresse 4 1000h og kører i en uendelig løkke,<br />
hvor den skriver "hello world!!" ud på skærmen. Det andet program, "knap.X68" loades ned på<br />
adresse 4 5000h og skal eksekveres, når der kommer et niveau 3 interrupt. Programmet afsluttes<br />
med kommandoen "RTE" (Return from exception). Programmet skriver én noget længere<br />
sætning ud på skærmen. Derved kan det ses, om der sker en ændring efter et knaptryk. For at<br />
programmet skal blive kaldt, skal der være en "JUMP" kommando fra niveau 3 interrupt autovektoren.<br />
Niveau 3 interrupt autovektoren har vektor nummer 27 [KM684000B, Table B-1].<br />
191
Testrapport V. Knapmodul<br />
Ifølge TS2MON ligger en vektor på følgende adresse: vektor = vektornummer ¡ 8 bytes + 4<br />
0000h [TS2MON, 2002, s. 24]. Dermed er adressen på niveau 3 interrupt autovektoren lig med<br />
4 00D8h. På denne adresse skal der ligge en instruktion om at hoppe til adresse 4 5000h, som er<br />
startadressen på interruptrutinen. Dette skrives på følgende måde i terminalvinduet:<br />
#MEM 400D8 [SPACE] 4EF9 (JUMP instruktion)<br />
#MEM 400DA [SPACE] 0004 (Den øvre del af adresse til interrupt routinen)<br />
#MEM 400DC [SPACE] 5000 (Det nedre del af adresse til interrupt routinen)<br />
Ved at trykke på en bestemt knap skal der være en bestemt værdi på den adresse i adressedekodningstabellen,<br />
som knapmodulet ligger på. Adressen på knapmodulet er 90 0001h. Med<br />
TS2MON kan der kun aflæses lige adresser (word-niveau). Derfor skal 90 0000h aflæses.<br />
Testen fortsættes herefter ved at udføre følgende algoritme:<br />
1. Skriv GO 41000 i terminal (starter programmet hello)<br />
2. Tryk på en knap<br />
3. Kontroller at rutine eksekveres<br />
4. Tryk på NMI-knappen<br />
5. Skriv MEM 90 0000 i terminalen (adressen på knapmodulet)<br />
6. Aflæs værdien af adressen<br />
7. Gå til punkt 1, indtil alle knapper er blevet påvirket.<br />
Ud over ovennævnte procedure måles der også på encoderens udgange, K0-K3, IRQ3, både på<br />
udgangen af Interruptstyring og indgangen af IRQ-encoderen, IACK3, både på indgangen af<br />
Interruptstyring og udgangen af IACK-decoderen, KS og interruptniveau-benene på CPU’en.<br />
På den måde kan det kontrolleres, om der kun sendes ét interrupt pr. knaptryk.<br />
V.4.3 Måleresultater<br />
Ved alle knaptryk blev interruptrutinen udført. De forventede værdier og de aflæste værdier af<br />
knaptrykkene kan ses i tabel V.1. X’erne i tabellen angiver "don’t cares". Disse har ingen specielle<br />
værdier, fordi databussens ben ,D04-D15, svæver. Tabellen viser, at der er overensstemmelse<br />
mellem de målte resultater og de forventede.<br />
Målingerne på K0-K3, IRQ3, IACK3, KS og IPL0-IPL2 er vist på figur V.3. Det ses tydeligt, at<br />
der ved tryk på en knap, i det her tilfælde afspil, som har værdien 3, kommer en del støj på både<br />
de aktive og de inaktive udgange på encoderen. Efter modtagelse af et IACK3 og KS negeres<br />
IRQ3, men støjen gør IRQ3 aktiv igen, og et nyt knaptryk behandles. Dette resultat er derfor<br />
ikke tilfredsstillende, og en anden encoder må findes.<br />
Den nye encoder blev beskrevet i kapitel 14. Denne nye encoder er blevet testet på tilsvarende<br />
vis, og denne opfylder det stillede krav; ingen støj på udgangene, dvs. et knaptryk opfattes som<br />
ét knaptryk.<br />
192
Knap Forventet Modtaget<br />
Optag XXXBh XXXBh<br />
Stop XXX2h XXX2h<br />
Afspil XXX3h XXX3h<br />
Pause XXX4h XXX4h<br />
Næste XXX5h XXX5h<br />
Forrige XXX6h XXX6h<br />
Spol frem XXX7h XXX7h<br />
Spol tilbage XXX8h XXX8h<br />
Slet XXX9h XXX9h<br />
Reset XXXAh XXXAh<br />
V.4. Integrationstest<br />
Tabel V.1: Knaptryk, forventet aflæst værdi og modtaget værdi. X’erne angiver "don’t cares".<br />
Figur V.3: Måling på antal interrupts pr. knaptryk. Der er trykket på afspil. D0-D3 er K0-K3,<br />
D4 er IRQ3 på Interruptstyring, D5 er IACK3 på Interruptstyring, D6 er IRQ3 på<br />
IRQ-encoderen, D7 er KS, D8 er IACK3 på IACK-decoderen og D9-D11 er IPL0-<br />
IPL2.<br />
193
Testrapport V. Knapmodul<br />
V.5 Konklusion<br />
Det må konkluderes, at knapmodulet ikke lever op til funktionskravene. Grunden til dette er at et<br />
tryk på 01 resulterer i værdien 11 i stedet for 1. Dette kan skyldes at ABEL-koden reduceres inden<br />
den brændes ned i PEEL’en. Denne ændring må der tages højde for i software. Ud over dette<br />
virker modulet, efter indsættelse af en anden encoder, efter hensigten. Det er vist, at udgangene<br />
er højimpedante, når modulet ikke er chipselected. Integrationstesten viser, at kommunikationen<br />
med CPU-modulet virker.<br />
194
Testrapport<br />
VI.1 Formål<br />
VI<br />
Integration<br />
af hardware<br />
Formålet med denne testrapport er at eftervise, at de enkelte moduler, der fungerer hver for sig,<br />
også kan interagere korrekt med hinanden. Ved denne test bliver følgende testet:<br />
CPU-modul: Styrer kommunikation mellem de perifere enheder.<br />
Hukommelsesmodul: Ved at sende data til hukommelse og derefter eksekveres.<br />
Kvalitetsmodul: Dette modul sender signal om, hvornår konverteringen skal forgå. Frekvensen<br />
af dette signal sættes op før programmet startes.<br />
Mikrofonmodul: Modtager signalet og sender det via D/A-konverteren til CPU-modulet.<br />
Høttalermodulet: Modtager signalet fra CPU-modulet, og konverterer dette og, derefter, vil<br />
signalet blive rekonstrueret i rekonstruktionsfilteret og sendt ud gennem højttaleren<br />
VI.2 Apparatur<br />
Apparat Mærke AAU-nummer<br />
Oscillator RC-oscillator TG7 08494<br />
Oscilloskop Agilliant 4CH 33843<br />
Forsyning Hameg 33884<br />
VI.3 Fremgangsmåde/opstilling<br />
For at kunne kontrollere om hardwaren virker, testes modulerne, når disse samles, ved hjælp af<br />
et lille C-program. Dette program hedder "adctest.c"og findes på cd-rom.<br />
195
Testrapport VI. Integration af hardware<br />
Når der modtages et interrupt fra A/D-konverteren, læses disse lyddata, og de sendes direkte ud<br />
på D/A-konverteren og bliver til lyd i højttaleren. Når interruptrutinen er færdig, laver processoren<br />
ingenting dvs. den står i en while-løkke, der ikke laver noget.<br />
Programmet loades ned i RAM i hukommelsesmodulet ved hjælp af TS2MON. Før programmet<br />
startes, sættes den ønskede kvalitet, og statusregisteret ændres, således at IRQ4 kan modtages.<br />
Derefter startes programmet.<br />
Hardwaremæssigt er proberne forbundet som vist på figur VI.1. Der måles på inputsignalet,<br />
og signalet før og efter rekonstruktionsfilteret. Der sendes et sinussignal på 220 mVpp med en<br />
frekvens på 1 kHz, ind på mikrofonforstærkeren ved hjælp af oscillatoren.<br />
1<br />
MF<br />
Mikronfonmodul<br />
HP-filter AA-filter ADC<br />
DAC<br />
R-filter<br />
2<br />
Højttalermodul<br />
Figur VI.1: Hardwarens opkobling i integrationstesten. Adskillelsen mellem de to moduler<br />
symboliserer, at der ikke er direkte forbindelse, men at det er CPU-modulet, der<br />
sørger for læsningen på A/D-konverteren og skrivningen til D/A-konverteren.<br />
VI.4 Måleresultater<br />
Målingen for integrationstesten er vist på figurVI.2. Ved målingen blev oscilloskobets averagefunktion<br />
anvendt.<br />
Probe 1, [V]<br />
0.05<br />
0<br />
−0.05<br />
Probe 2, [V]<br />
Probe 3, [V]<br />
1<br />
0<br />
−1<br />
1<br />
0<br />
−1<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
x 10 −3<br />
x 10 −3<br />
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5<br />
x 10 −3<br />
tid, [s]<br />
Figur VI.2: Måling i integrationstest. Probe 1 er indgangssignalet før mikronfonforstærkeren,<br />
probe 2 er indgangssignalet til rekonstruktionsfiltetret og probe 3 er udgangssignalet<br />
fra rekonstruktionsfilteret.<br />
196<br />
3
VI.5 Vurdering<br />
VI.5. Vurdering<br />
På figur VI.2 ses, hvordan inputsignalet kommer ind i mikrofonforstærkeren. Det ses, at signalet<br />
fra D/A-konverteren følger indgangsignalet, det er dog trappeformet, da der er et begrænset antal<br />
værdier (256). Det ses at signalet efter rekonstruktionsfilteret er blevet udglattet og signalet er<br />
dermed genskabt, uden synlig forvrængning.<br />
Det ses også på figur VI.2, at udgangssignalet er forsinket i forhold til indgangssignalet. Dette<br />
skyldes, at signalet skal læses og skrives samtidig med en fasedrejning i forstærkeren, og dette<br />
tager tid.<br />
VI.6 Konklusion<br />
Ud fra integrationstesten kan det konkluderes at CPU-, hukommelses-, kvalitets-, mikrofon- og<br />
højttalermodulerne fungerer tilfredstillende. Indgangsignalet bliver ligeledes konveretet til et<br />
digitalt signal, og derefter konvertet tilbage igen til analogt signal og rekonstrueret.<br />
197
Testrapport<br />
VII.1 Formål<br />
VII<br />
Pc-software<br />
Formålet med denne test er at eftervise, at pc-softwaren fungerer efter kommunikationsprotokollen<br />
i appendiks G. Det skal også vises, at der kan gemmes en wave-fil til hver af de indtalte<br />
beskeder, på det specificerede sted.<br />
VII.2 Apparatur<br />
¯ Pc med Linux, hvor pcprogrammet kan køres på.<br />
¯ Pc med Linux, hvor programmet "testpcsw" kører på.<br />
¯ 0-modem kabel.<br />
VII.3 Fremgangsmåde/opstilling<br />
Hardwaremæssigt er de 2 pc’ers COM1-porte forbundet med 0-modem kablet. Testen udføres<br />
grundlæggende ved at følge transaktionflowdiagrammet for kommunikationen mellem pc og<br />
diktafon på figur 3.10. Dette gøres ved hjælp af testprogrammet, hvor det er muligt at ændre<br />
på de svar, som diktafonen skal komme med, for derved at teste om pc-sofwaren kan overholde<br />
protokollen og dermed også kravspecikationen.<br />
Det er i testen muligt at specificere følgende på den simulerede "diktafon":<br />
198<br />
¯ Tilstand<br />
¯ Antal lagerede beskeder.<br />
¯ Kvaliteten (af de indtalte beskeder)<br />
¯ Længden af en besked<br />
¯ Beskederne er slettet.<br />
¯ Kvaliteteten er indstillet
VII.4 Resultater<br />
VII.4. Resultater<br />
Resultaterne af de forskellige tests er at pc-softwaren fungerer på den ønskede måde dvs. at<br />
transaktionflowdiagrammet op kommunikationsprotokollen er overholdt. Der bliver desuden<br />
gemt læsbare wave-filer de ønskede steder.<br />
VII.5 Konklusion<br />
Det kan konkluderes, at pc-sofwaren fungerer efter kravspecifikation, og protokollen.<br />
199
AA Antialiasing-filter (index på komponenter)<br />
Ordliste<br />
ABEL Advanced Boolean Equation Language, program til programmering af<br />
programmerbare logiske enheder.<br />
AC Komponenter på ACIA-kredsløbet (index på komponenter)<br />
ACIA Asynchronous Communication Interface Adapter<br />
A/D-konverter Analog til Digital konverter<br />
Assembler Lavniveau Programmeringssprog<br />
Baudrate Hastighed hvormed data sendes gennem den serielle port. Opgives i bits<br />
per second (bps)<br />
C Programmeringsproget C<br />
CLK Clock eller clocksignal<br />
COM-port Dette er computerens serielle kommunikationsport<br />
CS Chip Select<br />
D/A-konverter Digital til Analog konverter<br />
Forbillede Et apparat som med fordel kan efterlignes<br />
FS Frekvens styring (index på komponenter)<br />
Hardwaremodul Et antal komponenter, som udgør en funktionel enhed<br />
HF Højttalerforstærker (index på komponenter)<br />
Host Den maskine hvorpå softwaren er skrevet, men ikke der hvor det skal<br />
køre<br />
HP Højpas filter (index på komponenter)<br />
201
Ordliste<br />
HW Hardware<br />
IACK Interrupt Acknowledge<br />
Integritet Produktets evne til at beskytte sine data [Biering-Sørensen m. fl., 1996,<br />
side 93]<br />
IRQ Interrupt Request<br />
Kobling Graden af krydsrefencer. Dette kan betyde, at overførsel af data mellem<br />
forskellige moduler er stor. [Biering-Sørensen m. fl., 1996, side 143-<br />
144]<br />
Metafor Et udtryk som beskriver noget med ord, der ellers anvendes om noget<br />
andet.<br />
Mikrocomputersystem<br />
Et computersystem der specielt tilpasset til et specifikt formål<br />
MF Mikronfonforstærker (index på komponenter)<br />
Minimumssystem Er et system bestående af et absolut minimum antal af komponenter til<br />
kommunikation mellem pc og diktafon. Systemet består af: mikroprocessor,<br />
RAM, ROM, ACIA, RS-232-driver, adressedekoder, reset/halt<br />
og tilhørende opsætningskomponenter<br />
MMV Monostabil multivibrator<br />
NMI Non Maskable Interrupt<br />
Pc Personlig Computer<br />
PEEL Programmable Electrically Erasable Logic<br />
Proces En proces beskriver forhold ved en situation, som er dynamiske<br />
RAM Random Access Memmory<br />
RH Reset/Halt (index på komponenter)<br />
ROM Read Only Memmory<br />
RS232C Seriel kommunikationsstandard udviklet af EIA (Electronics Industries<br />
Association)<br />
202
RS232C-niveau Input: -3 V til -25 V for logisk 1 og 3 V til 25 V for logisk 0<br />
R/ W Read / Write<br />
Ordliste<br />
Output: -5 V til -15 V for logisk "1"og 5 V til 15 V for logisk<br />
"0"[Ståbi, 1995, side 487]<br />
SPU Struktureret Program Udvikling<br />
Struktur En struktur beskriver forhold ved en situation, som er statiske<br />
System Diktafonen med udviklet hardware og software<br />
SW Software<br />
TTL Transistor-Transistor Logik.<br />
TTL-niveau 2-5 V for logisk "1"og 0-0,8 V for logisk "0".<br />
TS2MON MC68000 debugger/monitor - modificeret af Sofus Birkedal Nielsen<br />
Tæthed Hvor tæt funktioner i et modul er relaterede<br />
[Biering-Sørensen m. fl., 1996, side 143-144].<br />
Virtuel knap En knap, som kun eksisterer rent virtuelt på pc’en. For at påvirke knappen<br />
skal man f.eks. trykke på et tal eller et bogstav på tastaturet<br />
X1 Masterclock: 8 MHz krystaloscillator (index på komponenter)<br />
X2 Baudrate-generator: 1,8423 MHz krystaloscillator (index på komponenter)<br />
X3 Kvalitetsmodul:4,096 MHz krystaloscillator (index på komponenter)<br />
203
Del<br />
Komponentliste VII og diagrammer<br />
205
Komponent<br />
placering<br />
Placeringstegning for CPU-, hukommelses-, og RS232-modul.<br />
ROM2 ROM1<br />
RAM3<br />
RAM4<br />
Stik fra display og knapper<br />
RAM1<br />
RAM2<br />
GND<br />
X-tal1<br />
+5V<br />
IRQ-encoder<br />
FC-decoder<br />
X-tal2<br />
Processor<br />
ADR-DEC-MEM IACK-decoder<br />
ACIA2<br />
ADR-DEC-PERIF<br />
ACIA1<br />
VPA-gen<br />
DTACK-gen<br />
SW_NMI<br />
P1 og P2 SW_RH<br />
RS232DRIVER<br />
Stik til analog<br />
RH<br />
207
Komponent placering<br />
Placeringstegning for kvalites-, mikrofon- og højttalermodul.<br />
X-tal3<br />
FS-filter<br />
FS-sample<br />
FS-stryring<br />
ADC-IRQ<br />
+5V<br />
GND<br />
DAC<br />
DAC_B<br />
ADC<br />
AA-filter<br />
Stik fra<br />
analog<br />
ADC_2<br />
R-filter<br />
Digital<br />
Forsyning<br />
Placeringstegning for display- og knapmodul.<br />
208<br />
01<br />
01<br />
DISPLAY<br />
Stik fra display og knapper<br />
Knap-styring<br />
+5V regulator<br />
-5V regulator<br />
HF<br />
R<br />
HP_A<br />
HP_B<br />
MF_B<br />
Knap-encoder<br />
ADC_A<br />
+15V<br />
GND<br />
-15V
Komponentliste<br />
Komponentlisten er delt op i moduler, således at komponenter er skrevet i de tilhørende moduler.<br />
CPU-modul<br />
CPU-modulet består primært af integrede kredse, disse er her oplistet, det følgende er andre<br />
hjælpekredsløb, der er nødvendige.<br />
Komponentnavn Værdi Kommentar<br />
Processor MC68HC000 Mikroprocessor<br />
ADR-DEC-MEM 18CV8-10 PEEL: Adressedekoder til ROM/RAM<br />
ADR-DEC-PERIF 22CV10A PEEL: Adressedekoder til perifere enheder<br />
FC-decoder 74LS138 Funktion decoder<br />
IACK-decoder 74LS138<br />
IRQ-Encoder 74LS148<br />
RIRQ 10 kΩ modstandsrække<br />
ACIA1 1 M68850<br />
Pull-up modstande<br />
P1 DB9-connector Stik til TS2MON via RS232-forbindelse<br />
DTACK-gen 22CV10A PEEL: DTACK-generator og NMI-styring<br />
RNMI 100 kΩ Pull-up modstand<br />
CNMI 100 nF For prel<br />
SWNMI<br />
NMI-knap<br />
VPA-gen 18CV8-10 PEEL: VPA-generator<br />
RRW 10k Ω Pull-up modstand<br />
1De resterende komponenter til seriel kommuniktaion er beskrevet i RS232-modulet da det er den samme RS232driver<br />
der anvendes<br />
209
Komponent placering<br />
Clock<br />
Komponentnavn Værdi Kommentar<br />
Xtal1 8,000 MHz Krystaloscilator<br />
RX11<br />
DX11-DX14<br />
CX11<br />
Reset/halt kredsløb<br />
390 Ω<br />
1n4148<br />
15 pF<br />
Komponentnavn Værdi Kommentar<br />
TL7705A TL7705A Spændingskontrollator<br />
RRH1 10 kΩ Pull-down modstand<br />
RRH2-RRH5 10 kΩ Pull-up modstande<br />
RRH6 300 Ω Formodstand til DRH3<br />
CRH1 100 nF Afkoblingskondensator<br />
CRHT 100 µF Bestemmer reset-sekvensens længde<br />
DRH1-DRH2 BAT 85 Schottky-diode<br />
DRH3<br />
3mmLED<br />
QRH BC 547B LED-driver<br />
SWRH<br />
Hukommelsesmodul<br />
RESET-knap<br />
Komponentnavn Værdi Kommentar<br />
ROM1-ROM2 AM29101F EPROM<br />
RAM1-RAM4 KM684000 Statisk RAM<br />
210
RS232-modul<br />
Clock<br />
Komponentnavn Værdi Kommentar<br />
Xtal2 COC/T-50 1,8423 MHz krystal<br />
RX21<br />
DX21-DX24<br />
CX21<br />
ACIA og RS232-driver<br />
390 Ω<br />
1n4148<br />
15 pF<br />
Komponentnavn Værdi Kommentar<br />
ACIA2 M6850<br />
RS232DRIVER MAX232 Driver til RS232 niveau<br />
CAC1-CAC5 100 nF Kondensatorer til RS232-driver<br />
P2 DB9-connector Stik til COM-forbindelse<br />
Knapmodul<br />
Komponentnavn Værdi Kommentar<br />
10 Knapper<br />
Knap-Encoder MM74C922N Encoder og prelfjerner<br />
CK1<br />
CK2<br />
1 µF<br />
1 µF<br />
Kstyr 22CV10-10 Styring til knapper<br />
Displaymodul<br />
Komponentnavn Værdi Kommentar<br />
DISPLAY Pc1604-A 4 linier gange 16 karakters display<br />
RDISP 10 kΩ Potentiometer<br />
Komponent placering<br />
211
Komponent placering<br />
Kvalitetsmodul<br />
Clock<br />
Komponentnavn Værdi Kommentar<br />
X-TAL3 4,096 MHz Krystaloscilator<br />
RX31<br />
DX31-DX34<br />
CX31<br />
Frekvensstyring<br />
390 Ω<br />
1n4148<br />
15 pF<br />
Komponentnavn Værdi Kommentar<br />
FS-sample 74HC4040 12 bit binær tæller<br />
FS-filter1 74HC4017 3 deler<br />
FS-filter2 74HC4040 12 bit binær tæller<br />
FS-styring 18CV8-10 PEEL: Latch og styret switch<br />
Mikrofonmodul<br />
Mikrofonforstærker<br />
Komponentnavn Værdi Kommentar<br />
Mikrofon WM-034B<br />
CMF1<br />
470nF<br />
MFB TLE2072 Operationsforstærker<br />
RMF1<br />
RMF2<br />
RMF2A<br />
RMF3<br />
212<br />
2,2 kΩ<br />
23,2 kΩ<br />
4,7 kΩ potmeter<br />
476 kΩ
Højpas filter<br />
Komponentnavn Værdi Kommentar<br />
HPA TLE2072 Operationsforstærker<br />
CHP1<br />
CHP2<br />
RHP1<br />
RHP2<br />
47 nF<br />
47 nF<br />
18,7 kΩ<br />
6,65 kΩ<br />
HPB TLE2072 Operationsforstærker<br />
CHP3<br />
CHP4<br />
RHP3<br />
RHP4<br />
Anti-aliasing filter<br />
47 nF<br />
47 nF<br />
18,7 kΩ<br />
6,65 kΩ<br />
Komponentnavn Værdi Kommentar<br />
AA-filter MAX297 Antialiasing filter<br />
RAA 499 kΩ Pull-down modstand<br />
DAA1-DAA2 BAT85 Beskyttelsesdioder<br />
Komponent placering<br />
213
Komponent placering<br />
A/D-konverter kredsløb<br />
Komponentnavn Værdi Kommentar<br />
ADC1A TLE2072 Operationsforstærker<br />
RADC1 -RADC5<br />
10k Ω<br />
DADC1-DADC1 BAT85 Beskyttelsesdioder<br />
ADC2 TLC2201 Rail to rail operationsforstærker<br />
ADC-IRQ 18CV8-10 PEEL: Til styring af interrupt, og MMV<br />
ADC ADC0820 Analog til digital konverter<br />
Højttalermodul<br />
D/A-konverter kredsløb<br />
Komponentnavn Værdi Kommentar<br />
DAC AD7524 Digital til analog konverter<br />
DACB TLE2072 Operationsforstærker<br />
Rekonstruktionsfilter<br />
Komponentnavn Værdi Kommentar<br />
R-filter MAX297 Rekonstruktions filter<br />
DRF1-DRF2 BAT85 Beskyttelsesdioder<br />
RRF 499 kΩ Pull-down modstand<br />
CRF<br />
214<br />
100 nF
Højttalerforstærker<br />
Komponentnavn Værdi Kommentar<br />
LM380 LM380 Effektforstærker<br />
RHF1<br />
CHF3<br />
RHF2<br />
2,7 Ω<br />
100 nF<br />
158 kΩ<br />
RHF3 0-10 kΩ Potentiometer<br />
CHF1<br />
CHF2<br />
CHF4<br />
CHF5<br />
470 µF<br />
6,8 µF<br />
33 pF<br />
100 nF<br />
Højttaler Ingen data på denne<br />
Spændings regulatorer<br />
Komponentnavn Værdi Kommentar<br />
5 V regulator LM7805<br />
D 5V<br />
R 5V<br />
3 mm LED<br />
390 Ω<br />
-5 V regulator LM7905<br />
D 5V<br />
R 5V<br />
3 mm LED<br />
390 Ω<br />
Komponent placering<br />
215