digitale voice recorder
DESCRIPTION
Digitale Voice Recorder. Digitale Voice Recorder. Team 1: De Hardware. Team 1 Ellen Vandermeeren Gerry Branders Timmy Knevels Xavier Croissiaux. Opdracht :. Analoge Interface Transducers Power Supply. Specifieke opdrachten:. Mikrofoon Mikrofoonversterker ADC Convertor - PowerPoint PPT PresentationTRANSCRIPT
Digitale Voice Recorder
Digitale Voice Recorder
Team 1:
De Hardware
Team 1Ellen Vandermeeren
Gerry Branders
Timmy Knevels
Xavier Croissiaux
Opdracht:
• Analoge Interface• Transducers
• Power Supply
Specifieke opdrachten:
• Mikrofoon• Mikrofoonversterker• ADC Convertor• DAC Convertor• Luidsprekerversterker• Luidspreker• Voeding• Overige Onderdelen• Behuizing• Koppeling Schema’s• Print-layout• …
Mikrofoonversterker
Ontwerp
• Elektuur 1993: Juli/Augustus-nummer
• Geschikt voor verschillende mikrofoon-impedanties
• Keuze tussen spanningsversterking van 10 of 15 keer (20 of 23,5 dB)
• Heel wat tegenkoppel door 2 direkt gekoppelde transistortrapjes
• Zeer weinig ruis
Eigenschappen
Eigenschappen
• Uitgangsimpedantie = 70 Ohm bij versterkingsfactor van 15
• Ingangsimpedantie = 30 kOhm• Laag stroomverbruik: 2,5 mA bij 9V• THD +N (vervorming en ruis): 0,045 %
(Bandbreedte 22 kHz, uitgangssignaal 15 mV)– Ruis: -65 dB– Harmonische vervorming: -92 dB
OverigeComponentenlijst Prijs (Euro)
Weerstanden
R1 56,2 ohm metaalf im 1% 0,38
R2 22,1 k metaalf im 1% 0,38
R3 220 k metaalf im 1% 0,38
R4 562 ohm metaalf im 1% 0,38
R5 866 ohm metaalf im 1% 0,38
R6, R7 280 ohm metaalf im 1% 0,38
R8 2,21 k metaalf im 1% 0,38
Kondensatoren
C1 6,8 n 0,29
C2, C3, C4 47 u 16V 0,38
C5 100 n 0,24
C6 220 u 16V 0,47
Halfgeleiders
D1 1N4001 0,11
T1 MAT02 1,2
Diversen
Printschakelaar 0,69
TOTAAL (exlusief printplaat): 7,18
Luidsprekerversterker
Ontwerp
• Elektuur 1985: Juli/Augustus-nummer
Eigenschappen
• Voor luidspreker van 4 Ohm:
Voeding: 3V 9V
Ruststroom: 2,5 mA 7,5 mA
Volle uitsturing:
80 mA 270 ma
Afgegeven vermogen:
100 mW 1000 mW
Werking• C2 en C6
ontkoppelen voeding• C7 houdt
gelijkspanning weg van de luidspreker
• C3 en C5 vormen voor audiosignalen laagohmig pad naar massa
• Signaal op ingang van de versterker via P1 en C4
Werking• R4 en C8
onderdrukken oscillatieneigingen
• R1 en R3 bepalen de versterkingsfactor
• C1, parallel over R1, zorgt dat boven 20 kHz minder wordt versterkt
OverigeComponentenlijst Prijs (Euro)
Weerstanden
R1 10 k 5% 0,21
R2 47 Ohm 5% 0,21
R3 220 Ohm 5% 0,21
R4 1 Ohm 5% 0,21
P1 50 k Lineaire instelpot 1,31
Kondensatoren
C1 470 p 0,24
C2 220 u 10 V 0,34
C3 100 u 10 V 0,27
C4, C8 100 n 0,29
C5 10 u 10 V 0,2
C6, C7 470 u 10 V 0,5
Diversen
IC1 LM 1895N 1,38
TOTAAL (exlusief printplaat): 6,16
De PCF8591
• Analoge ingangen• Hardware adressen• Negatieve voeding• Positieve voeding• Analoge uitgang• Referentiespanning• Analoge massa• Externe switch• Oscilator in/uitgang• I²C-bussen
D/A conversie
• 8 datalijnen
• 256 uitgangen
• Uitgansspanning geregeld met weerstand
• Referentiespanning
Spanningskarakteristiek
A/D conversie
• successive approximation conversie • on-chip D/A converter + high-gain comparator • getriggerd op de dalende flank
Spanningskarakteristiek
Limietwaarden
Aansluitingsinformatie
De analoge ingangen
De adresbusDe i²c bus
De oscillator
De oscillator switch
Analoge massa
De referentiespanning
De analoge uitgang
De schakelaars en ledjes
Groene led
Rode led
s
r
s
r
Q
Q
Q
Q
Opname/Weergaveschakelaar
Stopschakelaar
Luidspreker
• Platte inbouwluidspreker die zowel geschikt is voor spraakoverdracht als voor melders van oproep- en alarmtonen.
• Technische spec.: Aluminium membraan Afm. korf-Æ 30 mm, hoogte 5 mm Imped. 8 W Nom. belasting max. 800 mAEigenfrequ. 1,3 kHz Overdrachtsber. 8 kHz Geluidsniv. 70 dB
• De impedantie van de versterker is 4 Ώ en de impedantie van de luidspreker is 8 Ώ.
• Normaal : geen probleem
• Anders : 8 Ώ parallel over de weerstand van de luidspreker
De microfoon
• Goedkoop• Schokbestendig• Licht• Grote gevoeligheid• Zeer betrouwbaar
De voeding
Eigenschappen
• Compactheid
• Bedrijfszekerheid
• Kostprijs
• Flexibiliteit
• Reset-signaal
• Beperkte uitgangsstroom (max. 0,8A)
I²C Systeem
• In rust staan beide lijnen hoog.
• De uitgangstransistorenzijn gespert.
• Zodra geleiding gaat de lijn laag.
I²C
• 2 lijnen SDA seriële data lijn
• SCL seriële klok lijn
• meerdere IC’s op 2 lijnen
• Seriële transmissie
I²C
• Bij D/A conversie wordt er een databyte meegestuurd.
I²C
• Bij A/D conversie alleen adres + databyte
I²C
• Start conditie• Stop conditie• 9de puls Acknowledge
Digitale Voice Recorder
Team 2:
Het geheugen en de display
Team 2Koen Vanhees
Kristof Marneff
Pieter Ketelslegers
Ons team kreeg de opdracht het geheugen en de display te ontwerpen. Concreet houdt dit in:
• Bepalen van de geheugencapaciteit
• Bepalen van het soort geheugen
• Ontwerpen van de interface
• Koppeling met andere schema’s
Keuze van de Microprocessor
Na overleg met andere groepen hebben we uiteindelijk gekozen voor de ATMEGA 128.
Deze component vonden we echter niet terug in Eagle daarom hebben we geopteerd voor de ATMEGA 103.
Aansluiten van de BCD-naar-7segment-decoders
We kozen voor 1 minuut speeltijd → twee 7 segment displays zijn voldoende om tijd weer te geven → elk 7 poorten van de µP nodig!
Oplossingen:• 14 (7 * 2) herleiden naar 9 (7 + 2) door tweemaal een transistor bij
te plaatsen → Deze worden actief gemaakt vanuit de µP en kiezen dus de 7-segment displays. Gebeurt dit snel dan is het door de traagheid van het menselijk oog onzichtbaar.
• BCD-code i.p.v. 7-segment-code → 8 (2 * 4) pennen nodig. Dit wordt onze uiteindelijke keuze en we maken gebruik van een BCD-naar-7segment-decoder, de 74LS48.
Functietabel 74LS48
LT, RBI en BI/RBO moeten hoog gehouden worden opdat het IC correct decodeert.
De ingangen verbinden we met poort E van de µP
Aansluiting van de 7segment displays Uitgangen van de BCD-naar-7segment-decoder niet zomaar aansluiten op de displays → voorschakelweerstanden van 330Ω.
Aansluiten LED’s voor RECORD/PLAY
We kiezen voor monostabiele schakelaars. Leds moeten branden totdat toestand verandert → systeem met 2 flipflopsPlay: waarde wordt vastgehouden → Led blijft branden. Uitgang verbonden met K-ingang → Led voor Record dooft.Record: play Led dooft en Record Led gaat branden.
De µP moet de toestand van de knoppen ook kennen → uitgang FF verbinden met PB6 en PB7 van µP
Aansluiten van de Stop-knop
De stop-knop is dominant→aansluiten op Clear ingang van de FF. Deze is Laag actief→inverteren.De µP vraagt de toestand van de Stop-knop op via PD2.
Eerste keuze van het geheugen.
Formule voor geheugencapaciteit: samplefrequentie * aantal bits/sample * opnametijd in seconden
Dit geeft: 8000 Hz * 8 * 60 = 384000 bit of 4Mbit geheugen.
Eerst kozen we SRAM → geheugens meestal te klein → DRAM: 41C8512. Dit IC werkt met rijen en kolommen → constante refresh.
Oplossing: Timer IC (NE 555). Schakeling werkt als astabiele multivibrator.
Afhankelijk van het feit of er geschreven werd of niet, konden we de timing regelen. Hoe dit moet is duidelijk in deze tabel:
Eerst RAS aanbieden daarna CAS → lezen of schrijven afhankelijk van het WE of OE signaal.
Refresh = Hidden Refresh. Gebeurt via RAS terwijl CAS laag blijft.
RAS → zelfde signaal als normale operatie. CAS → massa. Er wordt dus niet geschreven → er moet geen signaal binnen bij CAS.
We stellen hiervan een waarheidstabel op met A het CAS-signaal en B de toestand van WE. X is de juiste toestand van het CAS-signaal.
B A X
0 0 0
0 1 1
1 0 0
1 1 0
Als WE laag is, dus als er geschreven wordt moet het CAS-signaal dat overkomt van de timer gewoon overnemen.
Is WE hoog, dus er wordt niets gedaan, dan moet het uiteindelijke CAS-signaal laag worden. Dit maken we met een invertor gecombineerd met een AND-poort.
Overschakelen naar EEPROM
Uiteindelijk zijn we overgestapt naar een ander geheugen. Dit om de volgende redenen:
- Oplossing van de Refresh leek ons niet ideaal.
- Het was moeilijk voor Team 3, dat instond voor de
programmering van de µP, om de aangeboden rij-en kolomadressen te programmeren
Een alternatieve en simpelere oplossing was een EEPROM, de 28C040 van Atmel
19 adresingangen, breedte bitstroom: 8 bit → 2 ^ 19 * 8 = 4MBitVerder ook Chip Enable, Output Enable en Write Enable
Eerst voeding en massa aansluiten. Daarna eerste 8 adreslijnen aansluiten met poort A.
Van poort A → 8 adresingangen, maar ook naar 8 pennen van I/O van het geheugen (datastroom)
Dit is uiteraard fout → lees/schrijf-signaal en adresselectie mag men niet door mekaar gebruiken.
Oplossing: 74373 Latch
Enable is laag actief → massa
Klok → ALE (Adress Latch Enable) aparte functie bij ATMEGA 103 → ons schemabij ATMEGA 128 → geïntegreerd in PG2 → uiteindelijk ontwerp
Voor de Latch: adresstroom (Latch uitgeschakeld) en erna Datastroom (Latch ingeschakeld).
Dit is dus een beter schema:
Volgende 8 adreslijnen ( A8 – A15) → Poort C
Laatste 3 adreslijnen ( A16 – A19) → Poort B
Aansluiten Enable ingangen:
CE (Chip Enable) → aan massa leggen → IC constant geselecteerd
OE (Output Enable) moet actief zijn als we willen lezen uit het geheugen → aansluiten op RW van µPBij de ATMEGA 128 is deze pen geïntegreerd in PF7 → uiteindelijke ontwerp
WE (Write Enable) → schrijfsignaal uit PB3 van µP
Dit is het schema met de uitbreidingen:
Tenslotte ons deel van het uiteindelijke schema
Digitale Voice Recorder
Team 3:
De Microprocessor en de Software.
Team 3Tom Jacobs
Davy Aerts
Davy Leenen
De Microprocessor
De microprocessor
Geheugen Configuratie
Aansluiting van het ram geheugen
I²C
Het schema om i²c te versturen
Blokschema om i²c te versturen
Programma om i²c te versturen• void iclees_int(void) //zet codec als adc
{ TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //stuur start conditie while(!TWCR &(1<<TWINT))); //wacht tot TWINT is geset,adc
• //heeft start conditie ontvangen if((TWSR & SCL) != start); //check waarde van TWI
register, • //maskeer prescaler, klok is
8Khz • //= fs
error(); //als status niet gelijk aan start //conditie, ga
• //naar error TWDR = SLA_R //laad adres in TWDR TWCR = (1<<TWINT)|(1<<TWEN); //clear TWINT bit in TWCR om
• //adres te zenden while(!(TWCR &(1<<TWINT))); //wacht tot TWNT fag is geset
• //(SLA_W is verzonden en ACK is • //ontvangen)
if((TWSR & SCL) != MT_SLA_ACK); //check waarde van TWI • //register, maskeer prescaler
error(); //als satus niet gelijk is aan //MT_SLA_ACK ga
• //naar error}
Het schema om i²c te ontvangen
Blokschema om i²c te ontvangen
Programma om i²c te ontvangen• void lees_dac(void) //lees data van adc
{ int puls; int tijd; TWCR = (1<<TWINT)|(1<<TWEN); //clear TWINT flag om data te
• //ontvangen while(sec!=0) //doe dit 1 minuit lang { puls = tik; do //wacht tot TWDR vol is {
if(STOP==1) //kijk of er nog niet op stop
• //gedrukt is { sec = 0; //als stop gedrukt is beindig
• //opnemen scan_knoppen(); //keer terug,om opnieuw
• //af te spelen of op te • //nemen
} else { tijd = tik - puls;
data[tijd] = TWDR; //zet de in houd van • //TWDR in data
} } while(tijd!=8) //lees 8 bits scrijf_ram(); // is een eeprom maar is toegankelijk
// als sram • }
}
De Flowchart
De Flowchart
Start
Initialisatie Poorten
Scan Knoppen
Record PlayReturn Scan
Knoppen
Ja Janeenneen
De record
Ja
Initialisatie SPI
Initialisatie ADC
Stop
Start ADC
Lees ADC
Convert data
Schrijf RAM
Klok = 0
Return Scan Knoppen
Ja
Nee
Record
Ja
Return scan knoppen
Nee
De Play
Ja
Initialisatie SPI
Initialisatie DAC
Stop
Lees RAM
Convert Data
Start DAC
Schrijf DAC
Klok = 0
Return Scan Knoppen
Ja
Nee
Play
Ja
Return scan knoppen
Nee
Het programma
Na 60 Seconden tijd stil en de rest tijd op de display zetten
• interupt[TIMER_OVF]void TIFR(void) //als timmer =0 wordt stop• {• sec = 0;• }
• void IRQ_TIME(void) //seconden tellen• { • tik--;• if(tik==0)• {• tik = preset• sec--;• zeven_segment();• }• }•• • interupt[INT3]void teller(void) //interupt van de klok bij elke puls• { • IRQ_TIME();• }
• void zeven_segment(void)• {• display_een--;• if(display_een == 0x00)• display_tien--;• }
Schrijven naar het ramgeheugen• void schrijf_ram(void);• { • int plaats;• OE = 0; //output enabled• WE = 1; //rw hoog maken, we gaan schrijven• ALE = 1; //lacht adres in adreslatch• PORTA = pagina_teller; //selecteer geheugen plaats:eerste 8
//adreslijnen• if(pagina_teller==0xFF)• {• PORTC++; //adreslijnen 9 tot 16• pagina_teller = 0;• if(PORTC==0xFF)• {• PORTB++; //adreslijnen 17 tot 19• }• }• if(PORTA = 0xFF && PORTC = 0xFF && PORTB = 0x03) //contoleer of ram niet • //overloopt• error();• ALE = 0; //zet 0 om data te sturen• for(plaats = 0;plaat <= 7;plaats++) //laad data in DDRA• { • DDA[plaats] = data[plaats];• }• PORTA = DDRA; //zet data op data bus• pagina_teller++; //ga naar volgnde rij in EEPROM• lees_adc();• }
Dit was de Digitale Voice Recorder van
3 elte 2