Story Transcript
TREBALL DE FI DE CARRERA
TÍTOL: Aplicació dels microcontroladors a la docència de sistemes digitals Contestador telefònic (gravador i reproductor de veu). AUTOR: José Ramón Rodríguez Becerra. DIRECTOR: Francesc Josep Sanchez i Robert DATA: 4 de setembre de 2006
Títol: Aplicació dels microcontroladors a la docència de sistemes digitals. Contestador telefònic (gravador i reproductor de veu). Autor: José Ramón Rodríguez Becerra. Director: Francesc Josep Sanchez i Robert Data: 4 de setembre de 2006
Resum Aquest projecte té l’objectiu d’apropar l’ús dels microcontroladors a la docència (com a recurs per a la assignatura de Sistemes Electrònics Digitals). Per a tal s’ha dissenyat una aplicació que grava un missatge de l’usuari i després el reprodueix. Aquesta aplicació es dirigida per un controlador (protagonista del nostre projecte). Nosaltres hem fet servir el microcontrolador PIC16F877A del fabricant Arizona Microchip Technology. Els PICmicros son com petits microprocessadors dels computadors, els quals inclouen la CPU, la RAM, ROM, ports de comunicació i tot això en només 18 polzades. El disseny del projecte s’ha dividit en diferents parts, cadascuna té un objectiu diferent. Això ens permet de poder crear grups de treball i assignar a cadascun d’ells una part del projecte. A continuació comentarem les parts que formen el projecte: - Part I, introducció als microcontroladors. - Part II, s’encarrega de l’adquisició del missatge de l’usuari (conversió analògic a digital). - Part III, representa el sistema d’emmagatzematge de la RAM dissenyat per a guardar el missatge. - Part IV representa el sistema d’emmagatzematge de la EEPROM per a guardar el missatge de forma permanent. - Part V, representa la reproducció del missatge (conversió de digital a analògic). -Part VI, representa l’acoblament de les parts anteriors. Les eines de software que s’han fet servir per a fer proves son: el simulador Proteus VSM (laboratori virtual), el framework MPLAB IDE de Arizona Microchip i el compilador PICC-Lite de HITECH. Els resultats obtinguts han estat positius. Això ens dona ànims per a continuar treballant per a millorar el projecte i incrementar la motivació dels estudiants.
Title:
Application of the microcontrollers to the educational teaching.
Answerphone machine “Recorder and voice reproducer”. Author: José-Ramón Rodríguez-Becerra Director: Francesc-Josep Sanchez i Robert Date: Setember, 4th 2006
Overview This project has the objective of approaching the use of the microcontrollers to the educational teaching (as a resource for the subject Digital Electronic Systems). For it has been designed an application to save a message and it reproduces it (Answerphone machine). This application is driven by a microcontroller (leading role of the project). We have used the microcontroller PIC16F877A of the manufacturing Arizona Microchip Technology. A PICmicros are as bit like a Intel-based microcomputer, they have a central processor, in-built ROM and RAM, in-built communications ports, A/Ds, etc. In a PICmicro, all of this is on one 18 inch chip which is totally reconfigurable on the desktop !!. The design of the project has been divided in different parts, each one has a different objective. This allows to be possible to create work groups and to assign to each group a part of the project. Next we comment the parts that it consists the project: - Part I, introduction to PIC MCU microcontrollers. - Part II, this part to performance of acquiring the user's message (from analogical to digital conversion). - Part III, this part represents the RAM storage system designed to store the message. - Part IV this part it represents the EEPROM storage system designed for to keep the message in a permanent way. - Part V, this part it represents the reproduction of the message (from digital to analogical conversion). - Part VI, this part represents the assembling of the previous parts. The software tools that we have used to performance tests are: Proteus VSM simulator (a virtual laboratory), the MPLAB IDE framework of Arizona Microchip and the compiler PICC-Lite of HITECH. The obtained results have been positive. This encourages us to continue working to improve the project and to increase the motivation of the students.
ÍNDEX 1.
INTRODUCCIÓ .......................................................................................... 1
2.
PART I: INTRODUCCIÓ ALS MICROCONTROLADORS (µC) ................ 4
2.1.
Introducció. ........................................................................................................................ 4
2.2.
Controlador i microcontrolador. ...................................................................................... 4 2.2.1. Components que incorpora un microcontrolador. .................................................. 4 2.2.2. Avantatges de treballar amb microcontroladors..................................................... 5 2.2.3. Aplicacions dels microcontroladors. ....................................................................... 5
2.3.
Recursos comuns a tots els microcontroladors............................................................ 6 2.3.1. Arquitectura bàsica................................................................................................. 6 2.3.2. El processador (CPU)............................................................................................. 7 2.3.3. Memòria.................................................................................................................. 7 2.3.4. Ports d’entrades i sortides (E/S)............................................................................. 8 2.3.5. Rellotge principal. ................................................................................................... 9
2.4.
Llenguatge de programació. ............................................................................................ 9
2.5.
Eines de desenvolupament. ............................................................................................. 9
2.6.
El microcontrolador PIC 16F877A.................................................................................... 9
3.
PART II: SUBSISTEMA D’ADQUISICIÓ DEL MISSATGE ..................... 12
3.1.
Disseny i implementació del subsistema. .................................................................... 12 3.1.1. Descripció. ............................................................................................................ 12 3.1.2. Circuit esquemàtic del subsistema d’adquisició del senyal.................................. 13 3.1.3. Diagrama de flux del programa. ........................................................................... 13 3.1.4. Codi del programa en llenguatge C...................................................................... 14 3.1.5. Comprovació del funcionament. ........................................................................... 16
4.
PART III: SUBSISTEMA DE GRAVACIÓ DEL MISSATGE (RAM) ........ 18
4.1.
Disseny i implementació del subsistema. .................................................................... 18 4.1.1. Descripció. ............................................................................................................ 18 4.1.2. Diagrama de flux del programa principal i de les funcions................................... 18 4.1.3. Circuit esquemàtic del sistema RAM.................................................................... 23 4.1.4. Codi del programa en llenguatge C...................................................................... 24 4.1.5. Comprovació del funcionament. ........................................................................... 26
5.
PART IV: SUBSISTEMA DE GRAVACIÓ DEL MISSATGE (EEPROM). 31
5.1.
Disseny i implementació del subsistema. .................................................................... 31 5.1.1. Descripció. ............................................................................................................ 31 5.1.2. Diagrama de flux del programa principal de la EEPROM. ................................... 31 5.1.3. Circuit esquemàtic del sistema EEPROM. ........................................................... 32 5.1.4. Comprovació del funcionament. ........................................................................... 33
6.
PART V: SUBSISTEMA DE REPRODUCCIÓ DEL MISSATGE ............. 36
6.1.
Disseny i implementació del subsistema. .................................................................... 36
6.1.1. 6.1.2. 6.1.3. 6.1.4. 6.1.5.
Descripció. ............................................................................................................ 36 Diagrama de flux del programa del subsistema de reproducció. ......................... 36 Circuit esquemàtic del subsistema de reproducció.............................................. 36 Codi font del programa del subsistema de reproducció....................................... 36 Comprovació del funcionament. ........................................................................... 37
7.
PART VI: ACOBLAMENT DEL SISTEMA GLOBAL ............................. 38
7.1.
Objectius i requisits. ....................................................................................................... 38
7.2.
Descripció del sistema global. ....................................................................................... 38
7.3.
Desenvolupament del problema. ................................................................................... 38 7.3.1. Disseny i implementació del sistema global......................................................... 38 7.3.2. Diagrama de connectivitat del sistema global. ..................................................... 38 7.3.3. Diagrama de flux del programa del sistema global. ............................................. 39 7.3.4. Diagrames de flux de funcions auxiliars del sistema global................................. 42 7.3.5. Circuit esquemàtic del sistema global. ................................................................. 43 7.3.6. Codi font en llenguatge C del programa del sistema global................................. 43 7.3.7. Comprovació del funcionament del sistema global.............................................. 43
8.
CONCLUSIONS....................................................................................... 47
9.
LÍNIES FUTURES.................................................................................... 49
10.
BIBLIOGRAFIA..................................................................................... 52
11.
ANNEXOS............................................................................................. 55
ANNEX A.
SUBSISTEMA D’ADQUISICIÓ DEL MISSATGE....................... 56
A.1. Objectius i requisits. ....................................................................................................... 56 A.2. Descripció del subsistema. ............................................................................................ 56 A.3. Desenvolupament del problema. ................................................................................... 56 A.3.1. Estudi previ del/s perifèric/s que intervenen......................................................... 56 A.3.2. Guia de configuració de l´ADC (diagrama de flux)............................................... 63 A.3.3. Programació del perifèric ADC. Primer contacte.................................................. 65 A.3.4. Comprovació del funcionament. ........................................................................... 68 A.3.5. Circuit condicionador i filtre antialiasing. .............................................................. 69
ANNEX B.
SUBSISTEMA DE GRAVACIÓ DEL MISSATGE (RAM) ........... 75
B.1. Objectius i requisits. ....................................................................................................... 75 B.2. Descripció del subsistema. ............................................................................................ 75 B.3. Desenvolupament del problema. ................................................................................... 76 B.3.1. Estudi previ del/s perifèric/s que intervenen......................................................... 76 B.3.2. Guia de configuració de la RAM (diagrama de flux). .......................................... 78 B.3.3. Comunicació amb la RAM. Primer contacte......................................................... 80 B.3.4. Comprovació del funcionament. ........................................................................... 85 B.3.5. Càlcul de la capacitat de la RAM.......................................................................... 87
ANNEX C.
SUBSISTEMA DE GRAVACIÓ DEL MISSATGE (EEPROM).... 89
C.1. Objectius i requisits. ....................................................................................................... 89 C.2. Descripció del subsistema. ............................................................................................ 89 C.3. Desenvolupament del problema. ................................................................................... 89 C.3.1. Estudi previ del/s perifèric/s que intervenen......................................................... 89 C.3.2. Guia de configuració del mòdul MSSP (diagrama de flux). ................................ 96 C.3.3. Comunicació amb la EEPROM. Primer contacte. .............................................. 103 C.3.4. Comprovació del funcionament. ......................................................................... 111
ANNEX D.
SUBSISTEMA DE REPRODUCCIÓ DEL MISSATGE............. 115
D.1. Objectius i requisits. ..................................................................................................... 115 D.2. Descripció del subsistema. .......................................................................................... 115 D.3. Desenvolupament del problema. ................................................................................. 115 D.3.1. Estudi previ del/s perifèric/s que intervenen....................................................... 115 D.3.2. Comprovació del funcionament del DAC. .......................................................... 119 D.3.3. Filtre passa baix. ................................................................................................ 120
ANNEX E.
DADES TÈCNIQUES DEL µC PIC 16F877A ........................... 127
ANNEX F.
DADES TÈCNIQUES DEL DAC DAC0808 .............................. 136
ANNEX G.
DADES TÈCNIQUES DEL OP-AMP AD8631 ......................... 138
ANNEX H.
DADES TÈCNIQUES DE LA EEPROM M24512 ..................... 139
ANNEX I.
PROGRAMA EN LLENGUATGE C DEL SISTEMA ................ 145
ANNEX J.
ESTADÍSTIQUES DE COMPILACIÓ DEL SISTEMA .............. 158
ANNEX K.
CAPTURA DEL FUNCIONAMENT DEL SISTEMA ................. 159
ANNEX L.
MEMÒRIA DS1250Y 4096K NONVOLATILE SRAM............... 160
ANNEX M.
PRODUCTE COMERCIAL DEL FABRICANT CEBEK............ 161
ANNEX N.
MEMÒRIA DS1270Y 16M NONVOLATILE SRAM .................. 162
ANNEX O.
MEMÒRIA FM20L08 1M BYTEWIDE FRAM ........................... 163
ANNEX P.
MEMÒRIA FM25256 256K SERIAL FRAM ............................. 164
ANNEX Q.
CODEC/FILTER COMBO TP3064/TP3067.............................. 165
ANNEX R.
MONO AUDIO CODEC AD74111 ............................................ 166
ANNEX S.
5TH-ORDER LOWPASS FILTERS .......................................... 167
ANNEX T.
8TH-ORDER LOWPASS FILTERS .......................................... 168
ÍNDEX DE FIGURES FIG. 1.1 DIAGRAMA DE BLOCS DEL GRAVADOR I REPRODUCTOR DE VEU .............................................. 2 FIG. 1.2 DIAGRAMA DE GANTT DEL PROJECTE ................................................................................... 3 FIG. 2.1 ARQUITECTURA VON NEUMANN ........................................................................................... 6 FIG. 2.2 ARQUITECTURA HARVARD ................................................................................................... 6 FIG. 2.3 ARQUITECTURA INTERNA DEL PIC 16F877A ...................................................................... 11 FIG. 3.1 DISSENY ESQUEMÀTIC DEL SUBSISTEMA D’ADQUISICIÓ DEL MISSATGE.................................. 13 FIG. 3.2 DIAGRAMA DE FLUXOS DEL PROGRAMA I DE LA RUTINA DE SERVEI........................................ 14 FIG. 3.3 SIMULACIÓ DEL SUBSISTEMA D’ADQUISICIÓ DEL MISSATGE .................................................. 16 FIG. 3.4 CRONOGRAMA DEL SUBSISTEMA D’ADQUISICIÓ DEL MISSATGE ............................................. 17 FIG. 4.1 DIAGRAMA DE BLOCS DEL SUBSISTEMA RAM...................................................................... 18 FIG. 4.2 DIAGRAMA DE FLUX DEL PROGRAMA DEL SISTEMA RAM...................................................... 19 FIG. 4.3 DIAGRAMA DE FLUX DE LES FUNCIONS DEL SISTEMA RAM (PART I) ...................................... 20 FIG. 4.4 DIAGRAMA DE FLUX DE LES FUNCIONS DEL SISTEMA RAM (PART II) ..................................... 21 FIG. 4.5 DIAGRAMA DE FLUX DE LES FUNCIONS DEL SISTEMA RAM (I PART III) .................................. 22 FIG. 4.6 CIRCUIT ESQUEMÀTIC DEL SISTEMA RAM........................................................................... 23 FIG. 4.7 COMPROVACIÓ DEL SISTEMA RAM .................................................................................... 27 FIG. 4.8 CRONOGRAMA D’ESCRIPTURA DEL SISTEMA RAM............................................................... 28 FIG. 4.9 CRONOGRAMA DE LECTURA DEL SISTEMA RAM.................................................................. 28 FIG. 4.10 CRONOGRAMA DE LECTURA I ESCRIPTURA DEL SISTEMA RAM........................................... 29 FIG. 5.1 DIAGRAMA DE FLUX DEL PROGRAMA PRINCIPAL DE LA EEPROM......................................... 32 FIG. 5.2 CIRCUIT ESQUEMÀTIC DEL SISTEMA DE GRAVACIÓ A LA EEPROM ....................................... 33 FIG. 5.3 COMPROVACIÓ DEL FUNCIONAMENT DEL SISTEMA DE GRAVACIÓ EEPROM ......................... 33 FIG. 5.4 CAPTURA DE L’ANALITZADOR DEL BUS I2C AL SUBSISTEMA EEPROM.................................. 34 FIG. 6.1 CIRCUIT ESQUEMÀTIC DEL SUBSISTEMA DE REPRODUCCIÓ .................................................. 36 FIG. 6.2 COMPROVACIÓ DEL FUNCIONAMENT DEL SUBSISTEMA DE REPRODUCCIÓ ............................. 37 FIG. 7.1 DIAGRAMA DE BLOCS DEL SISTEMA GLOBAL ........................................................................ 38 FIG. 7.2 DIAGRAMA DE CONNEXIÓ DEL SISTEMA GLOBAL .................................................................. 39 FIG. 7.3 DIAGRAMA GENERAL DE FLUX DEL SISTEMA GLOBAL ............................................................ 40 FIG. 7.4 DIAGRAMA DE FLUX DETALLAT DEL SISTEMA GLOBAL ........................................................... 41 FIG. 7.5 DIAGRAMES DE FLUX DE FUNCIONS AUXILIARS DEL SISTEMA GLOBAL ................................... 42 FIG. 7.6 CIRCUIT ESQUEMÀTIC DEL SISTEMA GLOBAL ....................................................................... 43 FIG. 7.7 SIMULACIÓ NO INTERACTIVA DEL SISTEMA GLOBAL .............................................................. 44 FIG. 7.8 PERÍODE DE MOSTREIG (CAPTURA) DEL SISTEMA GLOBAL ................................................... 45 FIG. 7.9 PERÍODE DE MOSTREIG (REPRODUCCIÓ) DEL SISTEMA GLOBAL ............................................ 46 FIG. 7.10 SIMULACIÓ INTERACTIVA DEL SISTEMA GLOBAL ................................................................. 46 FIG. 11.1 DIAGRAMA DE BLOCS DEL SUBSISTEMA D’ADQUISICIÓ DEL MISSATGE ................................. 56 FIG. 11.2 DIAGRAMA INTERN DE CONNEXIÓ DE L’ADC ..................................................................... 59 FIG. 11.3 MODEL ADC DEL µC....................................................................................................... 60 FIG. 11.4 EQUACIÓ DEL TEMPS D’ADQUISICIÓ (ZIN=RS=10K)........................................................... 60 FIG. 11.5 CICLES TAD DE CONVERSIÓ DE L´ADC............................................................................ 60 FIG. 11.6 DIAGRAMA DE BLOCS DEL TIMER 2 ................................................................................... 62 FIG. 11.7 DIAGRAMA DE FLUX DE CONFIGURACIÓ DE L´ADC ............................................................ 64 FIG. 11.8 DIAGRAMA DE FLUX DEL PROGRAMA DE CONTACTE AMB L´ADC......................................... 65 FIG. 11.9 DISSENY DEL CIRCUIT PER A PROVAR EL PERIFÈRIC ADC.................................................. 66 FIG. 11.10 CRONOGRAMA DEL FUNCIONAMENT DE L´ADC ............................................................... 68 FIG. 11.11 CIRCUIT DE POLARITZACIÓ D’UN MICRÒFON ELECTRET .................................................... 69 FIG. 11.12 ANÀLISIS ASIMPTÒTIC DEL GUANY DEL FILTRE PASSA BAIX ............................................... 72 FIG. 11.13 CIRCUIT CONDICIONADOR DEL SENYAL I FILTRE ANTI-ALIASING ......................................... 73 FIG. 11.14 SORTIDA DEL CIRCUIT CONDICIONADOR DE SENYAL......................................................... 74 FIG. 11.15 DIAGRAMA DE BODE DEL FILTRE ANTIALIASING ............................................................... 74 FIG. 11.16 DIAGRAMA DE BLOCS DEL SUBSISTEMA RAM.................................................................. 75 FIG. 11.17 DIAGRAMA DELS BUSOS DEL SUBSISTEMA RAM.............................................................. 75 FIG. 11.18 DIAGRAMA DE FLUX DE LA TINY RAM ............................................................................. 79 FIG. 11.19 DIAGRAMA DE FLUX DEL PROGRAMA DE COMUNICACIÓ AMB LA RAM................................ 81 FIG. 11.20 DISSENY DEL CIRCUIT PER A PROVAR LA RAM................................................................ 82 FIG. 11.21 FUNCIONAMENT DEL CIRCUIT DE COMUNICACIÓ DE LA TINY RAM ................................... 85 FIG. 11.22 CRONOGRAMA DE COMUNICACIÓ AMB LA TINY RAM ...................................................... 86
FIG. 11.23 DIAGRAMA DE BLOCS DEL SUBSISTEMA EEPROM.......................................................... 89 FIG. 11.24 EXEMPLE DE CONNEXIÓ DE DISPOSITIUS A UN BUS I2C .................................................... 90 FIG. 11.25 FORMAT D’ADRECES DEL BUS DE CAMP I2C .................................................................... 91 FIG. 11.26 PARTS D’UNA ADREÇA I2C ............................................................................................. 91 FIG. 11.27 CONDICIÓ D’INICI AL BUS I2C.......................................................................................... 92 FIG. 11.28 CONDICIÓ D’ATURADA AL BUS I2C .................................................................................. 92 FIG. 11.29 OPERACIÓ D’ESCRIPTURA AL BUS I2C............................................................................. 93 FIG. 11.30 OPERACIÓ DE LECTURA AL BUS I2C................................................................................ 93 FIG. 11.31 OPERACIÓ DE LECTURA I ESCRIPTURA MIXTA AL BUS I2C ................................................. 94 FIG. 11.32 DIAGRAMA LÒGIC DE LA EEPROM AMB BUS I2C............................................................. 95 FIG. 11.33 GUIA DE CONFIGURACIÓ DEL MÒDUL MSSP (I) ............................................................... 97 FIG. 11.34 GUIA DE CONFIGURACIÓ DEL MÒDUL MSSP (II) .............................................................. 98 FIG. 11.35 GUIA DE CONFIGURACIÓ DEL MÒDUL MSSP (III)............................................................. 99 FIG. 11.36 GUIA DE CONFIGURACIÓ DEL MÒDUL MSSP (IV) .......................................................... 100 FIG. 11.37 GUIA DE CONFIGURACIÓ DEL MÒDUL MSSP (V) ........................................................... 101 FIG. 11.38 GUIA DE CONFIGURACIÓ DEL MÒDUL MSSP (I VI)......................................................... 102 FIG. 11.39 DIAGRAMA DE FLUX DEL PROGRAMA DE COMUNICACIÓ AMB LA EEPROM ...................... 104 FIG. 11.40 DISSENY DEL CIRCUIT PER A PROVAR LA EEPROM ...................................................... 105 FIG. 11.41 FUNCIONAMENT DEL PROGRAMA DE CONTACTE AMB LA EEPROM ................................ 111 FIG. 11.42 CRONOGRAMA DEL PROGRAMA DE CONTACTE AMB LA EEPROM .................................. 112 FIG. 11.43 ANALITZADOR DEL BUS I2C .......................................................................................... 112 FIG. 11.44 TEMPS DE LECTURA DELS MODES BYTE A BYTE I SEQÜENCIAL DEL BUS I2C..................... 113 FIG. 11.45 DIAGRAMA DE BLOCS DEL SUBSISTEMA REPRODUCTOR ................................................. 115 FIG. 11.46 DISSENY ESQUEMÀTIC DEL CIRCUIT DE PROVA DEL DAC............................................... 116 FIG. 11.47 DIAGRAMA DE FLUX DEL PROGRAMA DE CONTACTE AMB EL DAC ................................... 117 FIG. 11.48 COMPROVACIÓ DEL FUNCIONAMENT DEL DAC.............................................................. 119 FIG. 11.49 ESTRUCTURA GENÈRICA D’UN FILTRE SALLEN-KEY ....................................................... 120 FIG. 11.50 FILTRE PASSA BAIX MODEL SALLEN-KEY ...................................................................... 122 FIG. 11.51 ANÀLISIS ASIMPTÒTIC DEL GUANY D’UN FILTRE PASSA BAIX DE SEGON ORDRE ................ 123 FIG. 11.52 CIRCUIT ESQUEMÀTIC DEL FILTRE PASSA BAIX .............................................................. 124 FIG. 11.53 COMPROVACIÓ DEL FUNCIONAMENT DEL FILTRE PASSA BAIX ......................................... 125 FIG. 11.54 DIAGRAMA DE BODE DEL FILTRE PASSA BAIX ................................................................ 125 FIG. 11.55 TIPUS D’ENCAPSULAT I NUMERACIÓ DELS PINS .............................................................. 127 FIG. 11.56 ARQUITECTURA INTERNA DEL PIC16F877A................................................................. 128 FIG. 11.57 MAPA DE MEMÒRIA DELS REGISTRES DEL PIC 16F877A............................................... 132 FIG. 11.58 CIRCUIT DE CONNEXIÓ AMB UN MICRÒFON .................................................................... 138 FIG. 11.59 ESTADÍSTIQUES DE LA COMPILACIÓ DEL SISTEMA GLOBAL ............................................. 158 FIG. 11.60 COMPROVACIÓ DEL FUNCIONAMENT DEL SISTEMA GLOBAL ............................................ 159 FIG. 11.61 GRAVADOR/REPRODUCTOR DIGITAL MODEL C-9701 ..................................................... 161 FIG. 11.62 GRAVADOR/REPRODUCTOR DIGITAL MODEL TR-1......................................................... 161
ÍNDEX DE TAULES TAULA 2.1 COMPARATIVA DE LA FAMÍLIA PIC 16F87X..................................................................... 10 TAULA 11.1 FUNCIONS DEL PORT A.............................................................................................. 57 TAULA 11.2 REGISTRES ASSOCIATS AL PORT A............................................................................. 57 TAULA 11.3 FUNCIONS DELS PINS DEL PORT D.............................................................................. 58 TAULA 11.4 REGISTRES ASSOCIATS AL PORT D ............................................................................ 58 TAULA 11.5 REGISTRE ADCON0................................................................................................... 61 TAULA 11.6 REGISTRE ADCON1................................................................................................... 61 TAULA 11.7 CONFIGURACIÓ DELS CANALS ANALÒGICS I TENSIONS VREFS ........................................ 61 TAULA 11.8 REGISTRES ASSOCIATS A L´ADC ................................................................................ 62 TAULA 11.9 REGISTRE DE CONTROL T2CON DEL TIMER 2 .............................................................. 63 TAULA 11.10 FUNCIONS DELS PINS DEL PORT C............................................................................. 76 TAULA 11.11 REGISTRES ASSOCIATS AL PORT C ............................................................................ 77 TAULA 11.12 FUNCIONS DEL PORT E.............................................................................................. 77 TAULA 11.13 REGISTRES ASSOCIATS AL PORT E............................................................................. 77 TAULA 11.14 REGISTRE D’ESTAT SSPSTAT DEL MÒDUL MSSP ..................................................... 94 TAULA 11.15 REGISTRE DE CONTROL SSPCON1 DEL MÒDUL MSSP.............................................. 94 TAULA 11.16 REGISTRE DE CONTROL SSPCON2 DEL MÒDUL MSSP.............................................. 95 TAULA 11.17 LLOC GEOMÈTRIC DELS POLOS DE BUTTERWORTH.................................................... 126 TAULA 11.18 POLINOMIS DE BUTTERWORTH................................................................................. 126 TAULA 11.19 DESCRIPCIÓ DELS PINS DEL PIC 16F877A(I) ........................................................... 129 TAULA 11.20 DESCRIPCIÓ DELS PINS DEL PIC16F877A ( II) ......................................................... 130 TAULA 11.21 DESCRIPCIÓ DELS PINS DEL PIC16F877A (III) ......................................................... 130 TAULA 11.22 DESCRIPCIÓ DELS PINS DEL PIC 16F877A (I IV) ...................................................... 131 TAULA 11.23 RESUM DELS REGISTRES DEL PIC 16F877A (I)........................................................ 133 TAULA 11.24 RESUM DELS REGISTRES DEL PIC 16F877A(II)........................................................ 134 TAULA 11.25 RESUM DELS REGISTRES DEL PIC 16F877A (I III) .................................................... 135
ÍNDEX DE FITXERS EN LLENGUATGE C FITXER 3.1 MAIN-ISR.C ................................................................................................................... 15 FITXER 3.2 ISR.C ........................................................................................................................... 15 FITXER 3.3 INIT_T2.C ..................................................................................................................... 16 FITXER 4.1 MAIN_RAM.C ................................................................................................................ 24 FITXER 4.2 SRAM.C ........................................................................................................................ 26 FITXER 4.3 SRAM.H ........................................................................................................................ 26 FITXER 11.1 MAIN_ADC.C ............................................................................................................... 66 FITXER 11.2 INIT.C ......................................................................................................................... 67 FITXER 11.3 ADC.C ........................................................................................................................ 68 FITXER 11.4 INIT.H ......................................................................................................................... 68 FITXER 11.5 ADC.H ....................................................................................................................... 68 FITXER 11.6 MAIN_TINY_RAM.C ...................................................................................................... 83 FITXER 11.7 TINY_RAM.C ............................................................................................................... 84 FITXER 11.8 TINY_RAM.H ............................................................................................................... 84 FITXER 11.9 MAIN_TINY_I2C.C ..................................................................................................... 106 FITXER 11.10 I2C_EEPROM.C ....................................................................................................... 109 FITXER 11.11 I2C_EEPROM.H ....................................................................................................... 110 FITXER 11.12 DELAY.H ................................................................................................................. 110 FITXER 11.13 MAIN_TINY_DAC.C .................................................................................................. 118 FITXER 11.14 INIT_D.C................................................................................................................. 118 FITXER 11.15 MAIN_SYSTEM.C .................................................................................................... 146 FITXER 11.16 ADC.C .................................................................................................................... 147 FITXER 11.17 CORE.C .................................................................................................................. 148 FITXER 11.18 GLOBAL.C............................................................................................................... 149 FITXER 11.19 ISR.C ..................................................................................................................... 149 FITXER 11.20 INIT.C ..................................................................................................................... 150 FITXER 11.21 I2C_EEPROM.C ....................................................................................................... 154 FITXER 11.22 MYRAM.C ............................................................................................................... 155 FITXER 11.23 CORE.H .................................................................................................................. 156 FITXER 11.24 GLOBAL.H............................................................................................................... 156 FITXER 11.25 I2C_EEPROM.H ....................................................................................................... 157 FITXER 11.26 MYRAM.H ............................................................................................................... 157
ÍNDEX D’EQUACIONS 12T AD + T ACQ + TW ≤ Tmostreig TNyquist ≤ 2 × Tsenyal font Tmostreig ≤ TNyquist ADC out =
(3.2)................................................................................................ 12 (3.3)....................................................................................................... 12
(Vref + − Vref − )
2n n = nombre de bits
(11.1) ...................................................................................... 58
T ACQ = T AMP + TC + TCOFF
H (s) =
(3.1) ......................................................................... 12
(11.2) .............................................................................. 60
Transformada de la resposta a estat nul.l Vout ( s ) = Transformada del senyal d ' entrada Vin( s)
impedància condensador ( Zc o Xc) =
1 Cs
(11.3) ........................... 70
(11.4)........................................................... 70
impedància resistència ( Z ) = R H ( s ) inversor op − amp =
H ( s ) band pass filter =
Z Vo( s ) =− 2 Vi ( s ) Z1
(11.5)........................................................................... 70
b1 s s 2 + 2ςω 0 s + ω 0
2
(11.6)..................................................................... 71
H (s) = s n H 1 (s) H 1 (0) ≠ 0
(11.7) .............................................................................................. 71
n = nombre de zeros
⎛ DATA ⎞ DACOUT = Vref × ⎜ ⎟ n ⎝ 2 ⎠ {DATA = valor binari; n = bits del DAC} H (s) =
b0 s 2 + 2ξω 0 s + ω 0
H ( s ) high filter =
b1 s s +1
2
(11.8) ......................................................... 119
(11.10) .................................................................................. 121
(11.13) ............................................................................................ 124
Introducció
1.
1
INTRODUCCIÓ
La finalitat d’aquest treball de fi de carrera és de caràcter docent. Això vol dir que el tema del projecte elegit, juntament amb la manera de desenvolupar-lo i redactar-lo, s’ha fet d'una manera clara per que servirà com a material de suport de l´ assignatura de Sistemes Digitals (veure [2]) del departament d’electrònica de la universitat politècnica EPSC, UPC. El propòsit del projecte és apropar a l’estudiant al disseny de circuits electrònics amb l’ús de microcontroladors (µC). Per a tal s’ha fet el disseny d'una aplicació que s’encarrega de gravar i reproduir el missatge d'una persona d'una durada aproximada de 30 segons (gravador i reproductor de veu). Aquest gravador i reproductor de veu té dos polsadors (PLAY i RECORD) per a gravar i reproduir el missatge. El control de l'aplicació és responsabilitat del microcontrolador. El qual té la tasca de governar sobre la resta de components que intervenen en el disseny (veure Fig. 7.1). Per a la realització del projecte s'han fet servir tres eines de desenvolupament. La primera eina correspon a l’entorn de programació MPLAB© IDE versió 7.31 del fabricant Arizona Microchip Technology (veure [3]). Aquesta eina ens permet fer la programació del microcontrolador. Aquest es el fabricant de microcontroladors PIC-MCU amb el qual es treballa a l’assignatura SED (sistemes electrònics digitals), ja que ofereix eines, recursos gratuïts i a més disposa d'una gran varietat de microcontroladors. La segona eina correspon al compilador PICC-Lite© versió 9.50 del fabricant HITECH (veure [4]). Es tracta d’una versió gratuïta d’un compilador en llenguatge C per a programar microcontroladors del fabricant Microchip. La tercera i última eina utilitzada ha estat el simulador de circuits electrònics Proteus© VSM versió 6.9 SP1 (veure [5]). Es tracta d’un laboratori virtual (també utilitzat a l’assignatura) on disposem d’instrumentació de laboratori, a més de la possibilitat de simular microcontroladors de diferents fabricants. La metodologia que s'ha fet servir ha estat primerament fer un estudi previ de les característiques del microcontrolador model PIC 16F877A (veure [6]). Component clau en la etapa de disseny per a saber si suportava els requisits, principalment en la part de mostreig. Un cop es va aprovar l’ús d'aquest model, començava la fase de contacte amb les eines de treball (MPLAB©, PICC-Lite© i Proteus© VSM). Seguidament es va dissenyar l’aplicació mitjançant un diagrama de blocs (veure Fig. 1.1). On cadascun d’ells té una funció ben definida. Això ens va facilità la divisió del projecte ens petits subprojectes com es veurà més endavant. Degut a la complexitat del disseny i a les diferents parts ben diferenciades que intervenen, varem decidir de dividir el desenvolupament del mateix en blocs (subsistemes es la nomenclatura que s'ha fet servir al llarg del document).
2
Contestador telefònic (gravador i reproductor de veu).
Fig. 1.1 Diagrama de blocs del gravador i reproductor de veu
D’aquesta manera el projecte global el varem dividir en petits projectes o subprojectes de complexitat inferior. Això ens ha permès d’aconseguir objectius a curt període de temps i anar desenvolupant el projecte o sistema de forma seqüencial. Aquesta metodologia o procediment d’actuació aporta altres avantatges. Per exemple, es poden crear diferents grups de persones de desenvolupament, cadascun centrat en un subsistema o bloc del sistema global. Molt adient per a entorn educatius (el nostre cas). D’aquesta manera es fomenta el treball en grup, però sempre mantenint la independència de la informació entre grups. Es a dir, cap dels integrants d’un grup té accés a la informació d’altres grups que no sigui el seu, i l’única manera d’intercomunicar-se amb la resta de grups es mitjançant un responsable o líder del mateix. Això també enforteix la forma de treballar sota una jerarquia de treball. El desenvolupament del projecte s’ha dividit en sis parts on cadascuna d’elles pot assignar-se a un grup de treball. A continuació es fa una breu descripció de les parts que formen el document. Cadascuna d’aquestes parts té el seu estudi previ corresponent situat als annexos. Més endavant facilitem un diagrama amb les fases del projecte (veure Fig. 1.2). Part I: Introducció als microcontroladors (µC), aquesta part fa una breu introducció als microcontroladors, què són?, aplicacions, parts fonamentals, etc. És una part comuna a tots els grups de treball. Part II: Subsistema d’adquisició del missatge, aquesta part s’encarrega de condicionar el senyal de l'usuari provinent d'un micròfon. També s’inclou la part de filtratge i mostreig. Aquesta última feta per un convertidor ADC integrat al microcontrolador (un dels molts recursos que ens ofereix). Aquesta part pot assignar-se a grup de treball. Part III: Subsistema de gravació del missatge (RAM), aquesta part té la finalitat de dissenyar un sistema de emmagatzematge temporal del missatge capturat. Ja que la capacitat de la RAM que ens ofereix el microcontrolador no és suficient. Aquesta part pot assignar-se a un grup de treball.
Introducció
3
Part IV: Subsistema de gravació del missatge (EEPROM), aquesta part té l’objectiu de dissenyar un sistema d’emmagatzematge del missatge de forma permanent. La coherència indica que la capacitat de la mateixa hauria d’ésser igual o major que la del sistema de la RAM. La transferència d'informació cap a la EEPROM es fa mitjançant el bus I2C. Aquesta part pot assignar-se a un grup de treball. Part V: Subsistema de reproducció del missatge, aquesta part té la responsabilitat de reproduir el missatge emmagatzemat a la EEPROM. La reproducció del mateix es fa amb l’ajuda d'un convertidor DAC el qual mitjançant un filtre passa baix i un circuit anul·lador de continua entrega el senyal analògic a un altaveu. La reproducció del missatge es fa des de la RAM (prèviament es fa un bolcat de dades de la EEPROM a la RAM). Això es degut a la impossibilitat de pogué reproduir el senyal amb la mateixa taxa de mostreig des de la EEPROM. Aquesta part pot assignar-se a un grup de treball. Part VI: Acoblament del sistema global, en aquesta part s’arreplega tots els subsistemes anteriorment comentats i es prova el funcionament del sistema global. Aquesta part posa en contacte tots els grups de treball de manera que puguin observar el resultat de la feina de cadascun d’ells (és un sentiment de satisfacció).
Fig. 1.2 Diagrama de Gantt del projecte
4
Contestador telefònic (gravador i reproductor de veu).
2.
Part I: Introducció als microcontroladors (µC)
2.1. Introducció. En aquest capítol farem una breu explicació de que és un microcontrolador, les seves aplicacions i les característiques principals del microcontrolador que farem servir en el desenvolupament del projecte(veure [1][2]).
2.2. Controlador i microcontrolador. Rep el nom de controlador aquell dispositiu que es fa servir per a governar una o varies tasques. Per exemple, el controlador que regula el funcionament d'un forn disposa d'un sensor que mesura constantment la temperatura interna i, quan traspassa els límits preestablerts genera els senyals elèctrics adequats que accionen els actuadors que intenten portar el valor de la temperatura dintre del rang estipulat. Al llarg del temps el concepte de controlador ha restat invariable, en canvi la seva implementació física ha variat. Al principi el controladors es construïen amb components de lògica discreta, posteriorment es van emprar microprocessadors els quals s’envoltaven de xips de memòria i E/S (entrades i sortides) sobre una placa de circuit imprès (PCB) . A la actualitat, tots els components del controlador s'han pogut incloure en un sol xip. Aquest xip rep el nom de microcontrolador (d’ara en davant µC). Es diu que es “la solució en un xip”, per que la seva reduïda mida minimitza el nombre de dispositius i el cost.
2.2.1.
Components que incorpora un microcontrolador.
Un microncontrolador disposa normalment dels següents components:
processador o CPU (Central Unit Processing). Memòria RAM per a contenir les dades. Memòria ROM/PROM/EPROM per a contenir el programa. Ports d´E/S per a comunicar-se amb l’exterior. Diversos mòduls pel control de perifèrics (timers, ports sèrie/paral·lel, etc) Generador d’impulsos de rellotge que sincronitzen tot el sistema.
Segons el model de microcontrolador que es tracti aquests components varien (veure Taula 2.1). La diversificació de models ens permet seleccionar el més adequat segons la nostra aplicació.
Introducció als microcontroladors (µC)
2.2.2.
5
Avantatges de treballar amb microcontroladors.
Els productes (dissenys electrònics) disposen de les següents avantatges:
2.2.3.
que incorporen un microcontrolador
Augment de les prestacions. Per exemple, incorporar un microcontrolador en la gestió del motor d'un vehicle representa una considerable millora del mateix. Podríem disposar de sensors de temperatura de l'aire, de l'aigua, del motor, actuadors sobre l’injecció de gasolina, bomba de gasolina, i comunicació amb l’ordinador d’abord. Augment de la fiabilitat. Degut a la substitució d'un nombre elevat de components per un microcontrolador, fa que el risc d’averies disminueixi, també es requereixen menys calibratges. Reducció de la mida i del cost en el producte acabat. La integració del microcontrolador en un xip disminueix el volum, i els stocks. Major flexibilitat. Donat que les característiques de control estan programades, la seva modificació solament requereix canvis en el programa d'instruccions. Això suposa una important acomodació a les circumstàncies que envolten al producte final, juntament amb una gran rapidesa a la implementació de possibles canvis.
Aplicacions dels microcontroladors.
Cada cop existeixen més productes que incorporen un microcontrolador amb la finalitat d’augmentar les prestacions, reduir la grandària, el cost, millorar la fiabilitat i disminuir el consum. Els camps més destacats on es fan servir els microcontroladors son les següents:
Perifèrics i dispositius auxiliars dels computadors. Electrodomèstics. Aparells portàtils i de butxaca. Màquines expenedores. Instrumentació. Industria de l’automòbil. Control industrial i robòtica. Electromedicina. Sistemes de navegació espacial. Sistemes de seguretat i alarmes. Termoregulació.
Com es pot apreciar, pràcticament la nostra vida està envoltada de microcontroladors.
6
Contestador telefònic (gravador i reproductor de veu).
2.3. Recursos comuns a tots els microcontroladors. Tots el microcontroladors tenen una estructura fonamental i característiques bàsiques molt semblants. Tots ells deuen de disposar dels blocs essencials: processador, memòria de dades i d'instruccions, línies d´ E/S, oscil·lador de rellotge i mòduls controladors de perifèrics (veure Fig. 2.3). En aquest apartat es farà un recorregut dels recursos que es troben a tots els microcontroladors.
2.3.1.
Arquitectura bàsica.
Inicialment tots els microcontroladors van adoptar l'arquitectura clàssica de Von Neumann (veure Fig. 2.1). L'arquitectura de Von Neumann es caracteritza per a disposar d'una sola memòria principal on es emmagatzema les dades i les instruccions de forma indiferent. La forma d’accedir a aquesta memòria es a través d'un sistema de busos únic. A data d’avui l'arquitectura que s’imposa es la Harvard (veure Fig. 2.2).
Fig. 2.1 Arquitectura Von Neumann
Fig. 2.2 Arquitectura Harvard
Introducció als microcontroladors (µC)
7
L'arquitectura Harvard (veure Fig. 2.2) disposa de dues memòries independents: la primera només conté instruccions i la segona i última conté només dades. Les dues disposen dels seus respectius sistemes de busos d’accés (adreces, control i dades) i es possible realitzar operacions d'accés (lectura o escriptura) simultàniament a les dues memòries.
2.3.2.
El processador (CPU).
Aquest es l'element més important del microcontrolador i determina les seves principals característiques. S’encarrega de direccionar la memòria d'instruccions, rebre el codi d’operació de la instrucció en curs, descodificar-la i executar la operació que implica la instrucció, a més de la cerca dels operands i l’emmagatzematge del resultat. N’hi han de tres tipus:
2.3.3.
CISC (Complex Instruction Set Computer), disposen de més de 80 instruccions màquina en el seu repertori, algunes de les quals son molt sofisticades i potents, però requereixen molts cicles de rellotge per a la seva execució. L’avantatge es que ofereixen al programador instruccions complexes que actuen com a macros. RISC (Reduce Instruction Set Computer), el repertori d'instruccions màquina es molt reduït, les instruccions son simples i normalment s’executen en un cicle de rellotge. La senzillesa i rapidesa de les instruccions permet optimitzar el hardware i el software del processador. SISC (Specific Instruction Set Computer) son processadors on apart del nombre reduït d'instruccions, també son d’ús específic, es a dir, s’adapten a les necessitats de la aplicació destí.
Memòria.
En els microcontroladors la memòria de programa i de dades esta integrada al propi xip (veure Fig. 11.57). Una part té que ser no volàtil tipus ROM (Read Only Memory) i la seva finalitat es contenir el programa d'instruccions que governa l'aplicació. L’altre part de la memòria es del tipus RAM (Random Access Memory) i aquesta si és volàtil, a ella es guarda les variables i dades en general. Hi han dos peculiaritats que diferencien als microcontroladors del processadors de PC(Personal Computer). No existeixen sistemes d’emmagatzematge massiu (disc dur o disquets). Com el microcontrolador només es destina a una sola tasca a la memòria ROM només es té que emmagatzemar un sol programa. La RAM en aquest dispositius es de poca quantitat, ja que només ha de contenir les variables i els canvis d'informació que es produeixen al llarg del programa. Per altre banda, com només existeix un programa no requereix fer una copia a la RAM i per tant, s’executa des de la ROM. Per tant, les capacitats de les memòries que es fan servir en el desenvolupament d'aplicacions amb
8
Contestador telefònic (gravador i reproductor de veu).
microcontroladors es de l'ordre de kilobytes (1024 bytes), en lloc de megabytes (1024 x 1024 bytes) com sol passar als PCs. Els microcontroladors també es podem diferenciar pel tipus de memòria ROM. A continuació es descriuen els cinc tipus de memòries que podem trobar. 2.3.3.1. ROM amb màscara. Es una memòria no volàtil de només lectura i el seu contingut es grava durant el procés de fabricació de la mateixa. L’elevat cost del disseny de la màscara sols fa recomanable el seu ús quan es necessiten quantitats superiors de milers d’unitats. 2.3.3.2. OTP Es una memòria no volàtil de només lectura, però programable només un cop per l'usuari (One Time Programming) mitjançant un gravador connectat a un PC. Aquesta versió es recomanable en la construcció de prototips. 2.3.3.3. EPROM Son memòries on es pot gravar i esborrar el contingut moltes vegades (Erasable Programmable ROM). La forma de gravar es la mateixa que a les de tipus OTP. Per a esborrar-les disposen d'una finestra de cristall a la seva superfície en la qual s’aplica raigs ultraviolat durant uns quants minuts. 2.3.3.4. EEPROM Es una memòria de només lectura on es pot gravar i esborrar de forma elèctrica (Electrical Erasable Programmable ROM). Tant la gravació com l’esborra’t es fa des de el gravador. Son més ràpides que les anteriors. 2.3.3.5. FLASH Es una memòria no volàtil de baix consum que es pot escriure i esborrar. A diferència de la ROM la memòria FLASH es pot programar en el circuit. Es a dir, no cal treure-la del circuit imprès per a la seva programació. A més son més ràpides i de major capacitat.
2.3.4.
Ports d’entrades i sortides (E/S).
La gran majoria dels pins (potes) que disposa un microcontrolador son per a suportar línies d'entrades i sortides amb les quals podrà comunicar-se amb els perifèrics externs (veure Taula 11.1 i Fig. 2.3).
Introducció als microcontroladors (µC)
2.3.5.
9
Rellotge principal.
Tots els microcontroladors disposen d'un circuit oscil·lador que genera una ona quadrada d’alta freqüència que configura els polsos de rellotge fets servits a la sincronització de totes les operacions del sistema. Només caldrà seleccionar la freqüència de treball. Augmentar la freqüència del rellotge implica disminuir el temps d’execució de les instruccions, però incrementa el consum d’energia.
2.4. Llenguatge de programació. Els llenguatges que es podem fer servir per a programar microcontroladors son l’assembler , el BASIC i el C. Nosaltres programarem el microcontrolador en llenguatge C.
2.5. Eines de desenvolupament. Les eines que hem fet servit per a programar el microcontrolador son: per una banda tenim el framework MPLAB IDE v. que ens l’ofereix de forma gratuïta el fabricant del microcontrolador (Arizona Microchip Technology) (veure [3]). En el nostre cas treballarem amb microcontroladors PIC (Peripheral Interface Controller). Aquet entorn de desenvolupament incorpora un compilador en llenguatge assembler (MPASM) i també un simulador (MPSIM) del programa binari resultat de la compilació. Nosaltres no programarem el microcontrolador en assembler, sinó en C. Degut a que aquest entorn no disposa d'un compilador de C gratuït ens veiem amb la necessitat de fer servir el compilador gratuït PICC-Lite v.9.50 de la empresa HITECH (veure [4]). A més a més, aquest compilador ofereix la possibilitat d’instal·lar-lo dintre de l’entorn de treball MPLAB IDE v.7.31. Per altre banda, com a eina de proves de l’execució del programa del microcontrolador amb els components hardware afegits al disseny, farem servir un laboratori d’electrònica virtual. Estem parlant d’en Proteus VSM v.6.9 SP1 (veure [5]), un entorn de simulació d’electrònica analògica i digital amb la possibilitat de simular també dissenys on hi hagi la presencia de microcontroladors.
2.6. El microcontrolador PIC 16F877A A continuació comentarem breument les característiques del microcontrolador que farem servir en el nostre projecte. El microcontrolador PIC 16F877A (veure [6]) manté una arquitectura Harvard i la CPU segueix el concepte RISC. Aquest microcontrolador pertany a la gama mitja de la família de PICs de Microchip (veure Taula 2.1).
10
Contestador telefònic (gravador i reproductor de veu).
Disposa de dos blocs de memòria separats (Harvard), la memòria de programa (tipus Flash) i els bancs de registres (tipus SRAM) (veure Fig. 11.57). Cada posició de la memòria de dades té una mida de 1 byte i en la memòria de programa de 14 bits. El µC disposa d'un comptador de programa (Program Counter) de 13 bits, això vol dir que la capacitat de la Flash es de 8K x 14 bits. Els bancs de registres SRAM son de 8 bits (byte) cadascun a excepció del PC que es de 13 bits. Estan formats per 4 bancs on a la part baixa (adreces inferiors) hi son els registres especials i la resta els de propòsit general (dades). La capacitat màxima es de 368 x 8 bytes. Aquest microcontrolador suporta la programació perifèrics que ens ofereix son:
amb interrupcions. Els
33 línies d´E/S, repartides en 4 ports (A, B, C, D i E). Tres timers (dos de 8 bits i un de 16 bits). Mòdul de captura/comparació (CCP). Mòdul de modulació de polsos (PWM). Port sèrie síncron (SSP). Interfase de comunicació sèrie USART. Convertidor A/D de 10 bits.
Aquestes són les principals característiques del nostre PIC (microcontrolador). Taula 2.1 Comparativa de la família PIC 16F87X
Introducció als microcontroladors (µC)
Fig. 2.3 Arquitectura interna del PIC 16F877A
11
12
3.
Contestador telefònic (gravador i reproductor de veu).
Part II: Subsistema d’adquisició del missatge
3.1. Disseny i implementació del subsistema. 3.1.1.
Descripció.
Un cop estem familiaritzats amb l’ADC (veure Annex A) toca fer-hi el disseny total del subsistema. Aquest estarà format pel circuit de control de l’ADC (veure Fig. 11.9), més la part de condicionament del senyal (veure Fig. 11.13). En aquest disseny entra en lloc un altre perifèric, el timer 2 (veure A.3.1.4), el qual es farà servir com a clock de mostreig. Això per què?, doncs perquè no necessitem estar mostrejant constantment, sinó, quan calgui. Això vol dir que tenim que determinar quina serà la freqüència de mostreig. Per a tal decisió tenim les següents dades: freqüència del senyal a mostrejar (canal vocal amb un ampla de banda de 4kHz), temps d’adquisició de l’ADC (TACQ) i temps de conversió de la mostra a binari (12 TAD). Com a dada desconeguda seria el temps que es triga en guardar la mostra a la RAM. Per tant, es tenen que respectar les següents equacions.
12T AD + T ACQ + TW ≤ Tmostreig
(3.1)
TNyquist ≤ 2 × Tsenyal font
(3.2)
Tmostreig ≤ TNyquist
(3.3)
El període de mostreig que aplicarem serà de 50µs, es a dir, farem oversampling (mostrejar per sobra de Nyquist per a obtenir millor qualitat del senyal). Aquest valor s’ha escollit per dos motius principals. El primer perquè es un valor que quadra amb el període del senyal font (250µs) i el segon i més important perquè compleix les dues equacions anteriors (3.1 i 3.3). Sabem que 12xTAD (on TAD = 1.6µs, veure Fig. 11.5), aquest és el temps que triga el µC en convertir cada bit de la paraula del convertidor de l’ADC. El nostre ADC té una paraula de 10 bits més dos TAD que afegeix el µC. El temps d’adquisició TACQ = 7.32 µs (amb impedància d’entrada la Zout del OP-AMP de 10kΩ, veure Fig. 11.4), és el temps que triga l’ADC en agafar una mostra (veure Fig. 11.3 i Fig. 11.2). Això dona un valor de 26,52 µs molt inferior al valor que hem elegit (50 µs).
Subsistema d´adquisició del missatge.
3.1.2.
13
Circuit esquemàtic del subsistema d’adquisició del senyal.
Aprofitem per a mostrar el disseny electrònic i la taula del resultat de la simulació no interactiva tot en la mateixa figura (veure Fig. 3.1).
Fig. 3.1 Disseny esquemàtic del subsistema d’adquisició del missatge.
3.1.3.
Diagrama de flux del programa.
El programa que a continuació s’exposa té com a finalitat comprovar el funcionament de l’ADC juntament amb el circuit condicionador de senyal. En aquest programa es farà ús d’interrupcions. Estem parlant de la interrupció que activa el timer 2 que es troba al registre PIE1 (veure Taula 11.21). Com s’ha comentat abans, la finalitat d’aquest timer es la de marcar el taxa de mostreig, amb un període de 50µs. Així mateix es facilita els diagrames de flux del programa principal i de la rutina de servei (coneguda genèricament amb el nom d’interrupt service routine) (veure Fig. 3.2). Com es pot apreciar el programa de control continua sent el mateix (l’objectiu segueix sent el mateix, mostrejar). En canvi, la part de mostreig ara s’implementa dins de la rutina de servei d’interrupció. Aquesta rutina es crida via hardware (es el µC el que s’encarrega de la seva invocació).
14
Contestador telefònic (gravador i reproductor de veu).
Fig. 3.2 Diagrama de fluxos del programa i de la rutina de servei.
El programa principal no fa res fins que es crida a la rutina de servei. I dintre d’ella es quant es comença a mostrejar i a treure la mostra digitalitzada pel PORT D.
3.1.4.
Codi del programa en llenguatge C.
Només exposarem els fitxers nous o aquells que hagin sofert alguna modificació per part de l´ ús del timer2. El programa està format pels fitxers: main-isr.c (veure Fitxer 3.1), isr.c (veure Fitxer 3.2), init_t2.c (veure Fitxer 3.3), adc.h (veure Fitxer 11.5) i init.h (veure Fitxer 11.4). /* file:main-isr.c Descripció: Aquest programa representa el funcionament del sistema d’adquisició del missatge. El període de mostreig està controlat pel timer2. */ #include #include "adc.h" #include "init.h" void main (void) { init_pic(); setup_adc(); ei(); //enable interrupt GIE=1;
Subsistema d´adquisició del missatge.
15
for(;;) RB1=0;//Fsampling }
Fitxer 3.1 main-isr.c /* Fitxer:isr.c Descripció: Aquest arxiu representa la definició de la rutina de servei d’interrupció del PIC. En ella només es fa el tractament del temporitzador TMR2. Aquest es el que controla el període de mostreig (Ts). */ #include #include "adc.h" //interrupt es una paraula reservada (keyword) del compilador. void interrupt isr(void) { /***** TIMER 2 *****/ if((TMR2IE)&&(TMR2IF)) { TMR2IF=0;//esborrar el flag. //agafem una mostra. PORTD=get_adc(); //comencem la captura del missatge. RB1=1;//Fsampling } }
Fitxer 3.2 isr.c /* Fitxer:init.c Descripció: Aquest arxiu conté la configuració global del PIC que no varia durant tota l’execució de l’aplicació. */ #include /* Funció d’inicialització dels perifèrics. En aquesta funció es inicialitza tot allò que no canvia durant l’execució de l’aplicació. */ void init_pic(void) { /* * Permís de interrupció dels perifèrics(PEIE=1). * GIE=0. */ INTCON = 0b01000000; /* * * * */
Configuració del registres pel timer2. seguint recomanacions del fabricant, reset i assignació dels valors.
T2CON=0; TMR2=0; TMR2IF=0;//esborrem el flag. Registre PIR1 TMR2IE=1;//habilitació de la interrupció. Registre PIE1 PR2=0x0f9;//activa el flag en el següent clock LOAD-1.
16
Contestador telefònic (gravador i reproductor de veu).
T2CON=0;//postscale=1:1, tmr shut-off, prescale=1:1. TMR2ON=1;//a contar.... /*Configuració del port B. ************************* */ TRISB=0; RB1=0; /*Configuració del port D. ************************* */ TRISD=0; PORTD=0; }
Fitxer 3.3 init_t2.c
3.1.5.
Comprovació del funcionament.
Fig. 3.3 Simulació del subsistema d’adquisició del missatge
A la figura Fig. 3.3 es mostra el funcionament correcte i la freqüència de mostreig. Com a curiositat també es pot apreciar el sentit del corrent elèctric mitjançant fletxes en el circuit condicionador de senyal , tot un detall del simulador Proteus VSM.
Subsistema d´adquisició del missatge.
17
Fig. 3.4 Cronograma del subsistema d’adquisició del missatge
A la figura Fig. 3.4 es pot apreciar la freqüència de mostreig, també quan el µC agafa una mostra del senyal font i el seu valor en hexadecimal. Com a comentari sobre la duració de l’amplada dels polsos de la freqüència de mostreig, indicar que, el pols estret, correspon al temps en el qual la rutina de servei s’està executant (i dintre d´ ella, el procés de mostreig). El pols més ampli, correspon al moment en el qual el programa no fa rés. Per a concloure aquesta part del projecte indicar que els objectius han estat complerts en la seva totalitat malgrat les pica baralles home-software-hardware.
18
4.
Contestador telefònic (gravador i reproductor de veu).
Part III: Subsistema de gravació del missatge (RAM)
4.1. Disseny i implementació del subsistema. 4.1.1.
Descripció.
Un cop hem tingut un primer contacte amb la memòria RAM (veure Annex B), ja podem començar a dissenyar el subsistema de gravació a la RAM (veure Fig. 4.6). Pel disseny farem servir 8 ICs (integrated circuit) de RAMs amb una capacitat de 64 KB (aquesta es la grandària més gran que ens ofereix en ‘Proteus VSM’). Això representa una capacitat total de 512 Kbytes. Pel seu control s’utilitzarà un decoder (descodificador) d’adreces. També s’implementarà la multiplexació (latch) en un port del µC per a compartir-lo amb el bus d’adreces i el bus de dades (veure Fig. 4.1 i [19]).
Fig. 4.1 Diagrama de blocs del subsistema RAM
4.1.2.
Diagrama de flux del programa principal i de les funcions.
A continuació indiquem el diagrama de flux del programa que s’ha fet servir per a provar tot el sistema (veure Fig. 4.2) i seguidament el diagrama de flux de les funcions amb les quals treballarem (veure Fig. 4.3, Fig. 4.4 i Fig. 4.5). El programa que s’ha fet servir té el mateix comportament que l’utilitza’t a l’estudi previ (veure B.3.3). Es a dir, escriure i llegir en ordre invers. L’adreça que fem servir per a començar a escriure o gravar no es des de zero (0x00000), perquè volem comprovar si el programa es comporta correctament quan arriba al límit de la capacitat de la RAM (0x7FFFF), cada IC té una capacitat de 64KB i n’hi han 8), el qual el µC té que activar un diode LED indicant que la RAM està plena. Llavors el direccionament de la RAM serà des de l’adreça 0x7FFE0 fins a la 0x7FFFF. I el byte o dada a gravar comença amb un valor de zero i es va incrementant una unitat per cada escriptura.
Subsistema de gravació del missatge (RAM).
Fig. 4.2 Diagrama de flux del programa del sistema RAM
19
20
Contestador telefònic (gravador i reproductor de veu).
Fig. 4.3 Diagrama de flux de les funcions del sistema RAM (part I)
Subsistema de gravació del missatge (RAM).
Fig. 4.4 Diagrama de flux de les funcions del sistema RAM (part II)
21
22
Contestador telefònic (gravador i reproductor de veu).
Fig. 4.5 Diagrama de flux de les funcions del sistema RAM (i part III)
Subsistema de gravació del missatge (RAM).
4.1.3.
23
Circuit esquemàtic del sistema RAM.
A la figura Fig. 4.6 es mostra el circuit emprat per a representar el subsistema RAM. Degut a la grandària de la imatge hem posat etiquetes numerades per a explicar i identificar cada component electrònic (address decoder, address latch, line drivers). La etiqueta amb el nombre ‘1’ fa referència al latch d’adreces (model 74573). Aquest component es fa servir per a reutilitzar un port I/O (input/output) del µC, d’aquesta manera el port es compartit pel bus de dades i pel bus d’adreces (la part alta de l’adreça).
1
2
3
Fig. 4.6 Circuit esquemàtic del sistema RAM
La etiqueta amb el nombre ‘2’ identifica al descodificar d’adreces (model 74137). Aquest component té la finalitat d’activar el CS (chip select) del IC de la RAM que correspongui segons l’adreça. Això es fa servir quan es connecten en cascada diversos ICs d’una capacitat determinada per a obtenir una capacitat superior (veure [19]). Degut a que tots el ICs rebran la mateixa informació en el busos, es té que discriminar d’alguna manera quin és realment el seleccionat. La etiqueta amb el nombre ‘3’ identifica als line drivers (model 74244), té la finalitat d’amplificar el corrent, per si de cas el µC no pogués atacar (alimentar) als ICs de la RAM. S’han posat dos per a llegir i altres dos per a escriure a la RAM. La resta de ICs de la dreta formen el 8 ICs de la RAM. Cadascun d’una capacitat de 64KB.
24
Contestador telefònic (gravador i reproductor de veu).
4.1.4.
Codi del programa en llenguatge C.
El programa està format pels següents fitxers: main_ram.c (Fitxer 4.1), sram.c (Fitxer 4.2) i sram.h (Fitxer 4.3). /* File: main_ram.c Descripció: Aquest programa representa la RAM que farem servir. */ #include #include #include “sram.h” unsigned long ram_address;//adreça global per a direccionar la RAM. void main(void) { ALARM=0; setup_ram_buses(); for(;;){ ram_address=0x7ffe0;//límit 0x7ffff while(ram_address < RAM_SIZE){ write_ram(); } if(ram_address==RAM_SIZE) ram_address--;//(0x80000 - 1) while (ram_address != 0xffffffff){//0x00000000-1 read_ram(); } } }
Fitxer 4.1 main_ram.c /* File: sram.c Descripció:definició del mòduls del sistema RAM. */ #include #include #include “sram.h” /* Aquesta funció configura els ports per a utilitzar-los com a busos del sistema per accedir a la RAM. */ void setup_ram_buses(void) { ADCON1=0b00001110;//Tenim que definir el tipus(digital) d’entrada del PORT A/E. TRISA=0b000001;//AN0 es l’entrada de l´ADC. La resta són línies de control i adreces. iRD=1;//deixem les línies de control inactives. iWR=1; iCS=1; PORTC=0x00;//reset. TRISC=0x00;//LOW_ADD BUS. PORTD=0x00; TRISD=0X00;//HIGH_ADD BUS i DATA BUS(selecciona’t pel latch). PORTE=0x00;//Adreces A17,A16,A18
Subsistema de gravació del missatge (RAM).
TRISE=0x00; } //Aquesta funció escriu a la RAM. void write_ram(void) { static uchar mydata=0x00;//byte a escriure. //comprovem que la adreça està dintre dels límits. if(ram_address >= RAM_SIZE) return; else { iCS=1;//disable latch decoder. ALE=0;//actiu a nivell alt. iWR=1; TRISD=0x00;//(output). split_ram_address();//posem l’adreça al bus. ALE=1;//carreguem l’adreça. ALE=0; iCS=0;//load latch decoder !iCS; iCS=1;//disable latch decoder. DATA_BUS = mydata++; iWR=0;//!WR=actiu. iWR=1; ram_address++; //comprovem si la RAM s’ha omplert. if(ram_address == RAM_SIZE) ALARM=1; } } /* Aquesta funció llegeix de la RAM. Per a carregar l’adreça al address bus fem servir la funció split_ram_address(). */ void read_ram(void) { uchar my_data; //comprovem que la adreça està dintre dels límits. if(ram_address >= RAM_SIZE) return; else { iCS=1;//disable latch decoder. ALE=0;//disable. iRD=1;//disable. TRISD=0x00;//(output). split_ram_address();//col·loquem la direcció al bus. ALE=1;//carreguem el latch. ALE=0; iCS=0;//enable latch decoder. iCS=1;//disable decoder TRISD=0xFF;//canviem el sentit del PORT D (input). iRD=0; my_data = DATA_BUS; iRD=1; ram_address--; //comprovem si hem llegit tota la RAM. if(ram_address == 0xFFFFFFFF)//0x00000000-1 ram_address=0; if(ram_address < RAM_SIZE) ALARM=0; } } /* Aquesta funció agafa la variable ram_address de tipus u_long i treu la part baixa(first byte LSB), i la part alta(second byte LSB)de la adreça. També carreguem els bits MSBs(A16,A17 i A18) de l’adreça. */
25
26
Contestador telefònic (gravador i reproductor de veu).
void split_ram_address(void) { LOW_ADD = (uchar)ram_address;//first byte LSB.PORTC HIGH_ADD = (uchar)(ram_address >> 8);//second byte LSB.PORTD PORTE=((uchar)(ram_address >> 16));//agafem els tres bits MSB(A16,A17,A18). }
Fitxer 4.2 sram.c /* File:sram.h Descripció:declaracions i redefinicions. */ #ifndef _SRAM_H #define _SRAM_H #include #include #define RAM_SIZE 0x80000 //64K x 8 xips. #define PORTBIT(PORT,BIT) (unsigned)&PORT*8+BIT;//((unsigned)&(PORT)*8+(BIT)); static volatile uchar LOW_ADD static volatile uchar HIGH_ADD static volatile uchar DATA_BUS HIGH_ADD).
@ @ @
0x07;//PORTC part baixa de l’adreça. 0x08;//PORTD part alta de l’adreça. 0x08;//PORTD data bus.(comparteix amb
static volatile bit iWR static volatile bit iRD
@ @
PORTBIT(PORTA,1);//write bit(!WR, actiu). PORTBIT(PORTA,2);//read bit(!RD, actiu).
static volatile bit iCS
@
static volatile bit ALE
@
PORTBIT(PORTA,3);//latch enable de l´address //decoder. PORTBIT(PORTA,4);//LED indicador de falta //d’espai. PORTBIT(PORTA,5);//address latch enable.
static volatile bit A_16 static volatile bit A_17 static volatile bit A_18
@ @ @
PORTBIT(PORTE,0);//address bit. PORTBIT(PORTE,1); PORTBIT(PORTE,2);
static volatile bit ALARM @
void setup_ram_buses(void); void split_ram_address(void); void write_ram(void); void read_ram(void); #endif
Fitxer 4.3 sram.h
4.1.5.
Comprovació del funcionament.
A la figura Fig. 4.7 es mostra el funcionament del circuit. A més, podem observar el contingut de la memòria RAM referent al xip U13 (on s’ha fet la gravació). Aquest conté 32 bytes gravats a les posicions 0xFFE0 fins a la 0xFFFF (veure Fig. 4.7 i Fig. 4.1). El xip U13 es seleccionat pel valor de la part alta de l’adreça (0x07). També s’aprecia l’activació del diode LED indican memòria plena.
Subsistema de gravació del missatge (RAM).
27
Fig. 4.7 Comprovació del sistema RAM
A la figura Fig. 4.8 es representa el cronograma del sistema RAM quan es realitza la operació d’escriptura. Es pot observar la seqüència de les línies de control per a realitzar tal tasca (ALE, CS i WR). Les línies que seleccionen el IC de RAM on es farà la operació d’escriptura, són línies del bus d’adreces que estan connectades al decoder d’adreces (A[16..18]) (veure Fig. 4.6). Aquestes línies sempre són les de major pes (veure [19]). Es pot apreciar que la línia de control WR (write) s’activa quan la dada a gravar-hi hi és al bus de dades (ja que aquest es compartit amb la part alta del bus d’adreces AD[0..7]). El procediment d’escriptura o gravació ja es va estudiar a l’estudi previ (veure B.3.2). Del cronograma (veure Fig. 4.8) aclarirem el significat del busos que apareixen. El bus A[0..15], fa referència a una part del bus d’adreces (les setze línies menys significatives). El bus A[16..18] a les línies més significatives del bus d’adreces. El bus D[0..7] correspon al bus de dades (vist des de la RAM). El bus AD[0..7] correspon al bus compartit pel bus d’adreces (la part alta) i el bus de dades (vist des del port del µC). I finalment el bus ADD[0..7] correspon a la part baixa del bus d’adreces. Amb aquest aclariment es pot interpretar el valor dels busos i comprovar la càrrega de l’adreça quan s’activa la línia ALE (address latch enable). També el moment en que la dada passa al bus de dades de la RAM (D[0..7]) al activar la línia de control WR.
28
Contestador telefònic (gravador i reproductor de veu).
Fig. 4.8 Cronograma d’escriptura del sistema RAM
Fig. 4.9 Cronograma de lectura del sistema RAM
Subsistema de gravació del missatge (RAM).
29
A la figura Fig. 4.9 es representa el cronograma del sistema RAM quan es realitza la operació de lectura. La seqüència es pràcticament la mateixa que a l’anterior (operació de gravació), excepte que ara la línia de control a emprar és RD. En aquest cronograma s’observa completament els valors dels busos per a recuperar una dada amb valor 0x1E que hi és a l’adreça de memòria 0xFFFE. Important destacar que la recuperació es produeix quan es dona l’ordre a la línia de control RD. I automàticament el byte es reflexa als busos de dades (AD[0..7] i D[0..7]). A la figura Fig. 4.10 s’ha volgut mostrar un cronograma més complert on es veu quan el programa termina de gravar i quan comença a llegir (indicat amb els cursors).
Fig. 4.10 Cronograma de lectura i escriptura del sistema RAM
Finalment per a concloure aquesta part comentar que els objectius s’han complert però amb excepció. Hem aconseguit de comunicar-nos amb una memòria RAM i realitzar les operacions bàsiques de lectura i escriptura. Per contra, els requisits de disseny demanàvem una memòria d’una grandària suficient per a emmagatzemar 30’’ de missatge de l’usuari. Això representa una RAM de 586 KB. El nostre sistema RAM té una capacitat de 512 KB. El motiu d’aquesta reducció està causat pels recursos o dispositius disponibles pel programa ‘Proteus VSM’. Es a dir, ell només disposa de memòries RAM de fins a 64KB, això ens obliga a posar blocs de 64 KB en cascada fins a arribar als 586 KB (64K x 10 blocs). Fins aquí cap problema, el problema serà que la
30
Contestador telefònic (gravador i reproductor de veu).
capacitat de les memòries EEPROM amb connexió I2C que disposa el ‘Proteus VSM’ són també de 64KB. I en aquest cas no podem posar en cascada tantes memòries EEPROM com vulguem, ja que aquests dispositius fan servir un nombre específics de bits per a direccionar-se entre ells dintre del bus I2C. En el nostre cas les EEPROM disposen de 3 bits (8 dispositius ). Si volguéssim ampliar el nombre de dispositius EEPROM al bus I2C, hauríem de crear un sistema per a evitar conflictes d’adreces. Aquesta solució seria fem servir nous components hardware, la qual cosa encareix el disseny (no viable). La solució es sacrificar un parell de segons del missatge si es que es vol mantenir la mateixa freqüència de mostreig. Si per contra baixem el període de mostreig el nombre de mostres agafades es el mateix però amb un interval de temps major, per tant, la longitud o durada del missatge es major. Es a dir, podríem estar parlant d’un missatge de durada major que el demanat com a requisit. Per tant, considerem que l’objectiu s’aconseguit però amb excepcions.
Subsistema de gravació del missatge (EEPROM).
31
5.
Part IV: Subsistema de gravació del missatge (EEPROM)
5.1.
Disseny i implementació del subsistema.
5.1.1.
Descripció.
Un cop hem tingut un primer contacte amb la memòria EEPROM i el bus I2C (veure C.3.3) ja podem començar a dissenyar el subsistema de gravació a la EEPROM. Pel disseny farem servir 8 ICs EEPROMs model M24512 (veure Annex H) amb una capacitat de 64 KB (aquesta es la capacitat més gran que ens ofereix en ‘Proteus VSM’). Això representa una capacitat total de 512 Kbytes. Es la mateixa capacitat que la del sistema RAM, ja que es aquí on es guardarà de forma permanent el missatge.
5.1.2.
Diagrama de flux del programa principal de la EEPROM.
A la figura Fig. 5.1 es mostra el diagrama de flux del programa que s’ha fet servir per a provar el sistema de gravació a la EEPROM. El programa grava un missatge de 17 bytes a partir de l’adreça 0xFFF0 (el número 2 de 0x2FFF0 correspon a l’adreça hardware del dispositiu slave) i després ho llegeix. El motiu de seleccionar aquesta adreça i no altre es per a comprovar si el programa es comporta correctament a l’arribar al límit d’un xip i canviar a un altre xip EEPROM (canviar d’adreça hardware). Es a dir, cadascun del xips EEPROM té una capacitat de 65536 bytes (de 0 a 65535) si comencem a la posició 0xFFF0 (65520) i gravem 17 bytes, acabarem a la posició 0x10000 (65536) amb la qual cosa vol dir que estem direccionan un altre xip EEPROM. I per tant, l´ adreça global passa de 0x2FFF0 Æ 0x30000. Cal recordar que només dos bytes son utilitzats per a direccionar la EEPROM, l’altre byte correspon a l’adreça hardware de la EEPROM. El cos del programa està format principalment per tres funcions: una de configuració del µC i les altres dues encarregades dels processos de lectura i escriptura.
32
Contestador telefònic (gravador i reproductor de veu).
Fig. 5.1 Diagrama de flux del programa principal de la EEPROM
5.1.3.
Circuit esquemàtic del sistema EEPROM.
El circuit dissenyat (veure Fig. 5.2) es el resultat de la connexió dels 8 xips EEPROM model M24512 (veure [20]) al bus de camp I2C. El direccionament hardware es té que realitzar connecten els pins (A2, A1 i A0) a VDD o VSS segons el valor lògic que es vulgui donar al pin. Els displays 7-segments no son obligatoris, només fan funció de monitorització.
Subsistema de gravació del missatge (EEPROM).
33
Fig. 5.2 Circuit esquemàtic del sistema de gravació a la EEPROM
5.1.4.
Comprovació del funcionament.
A la figura Fig. 5.3 es mostra el resultat de provar el circuit de la figura Fig. 5.2. Els continguts de les memòries EEPROM mostren el resultat de la execució del programa. Es a dir, els xips U4 amb una adreça hardware de ‘010’(byte MSB de 0x2FFF0) i el xip U5 amb una adreça hardware de ‘011’(byte MSB de 0x30000).
Fig. 5.3 Comprovació del funcionament del sistema de gravació EEPROM
34
Contestador telefònic (gravador i reproductor de veu).
El programa escriu des de la posició 0x2FFF0 fins a la posició 0x2FFFF del xip U4 i posteriorment canvia al xip U5 per a terminar d’escriure la dada 0x11 a la posició 0x30000. Això demostra que el comportament del programa es correcte. Com ha curiositat comentar que els valors o informació que hi resideix a la EEPROM abans d’escriure és 0xFF (veure Annex H).
Fig. 5.4 Captura de l’analitzador del bus I2C al subsistema EEPROM
Finalment per a concloure mostrarem la figura Fig. 5.4 amb la finalitat de mostrar l’activitat del bus de camp I2C durant l’execució del programa. Primerament l’analitzador ens mostra la escriptura de les dades a les dues EEPROM. Els valors de les dades van des de 0x01 fins a 0x11 (17 bytes).
Subsistema de gravació del missatge (EEPROM).
35
Tot seguit es mostra el procediment de lectura dels 17 bytes distribuïts a les dues EEPROMs. També puguem observar com es produeix el canvi de selecció de xip EEPROM (passen del xip U4 al xip U5). Com es pot apreciar el byte de control inicialment té un valor de 0xA4, indican el codi I2C de les EEPROM (1010) més l’adreça hardware (010) i l’operació a fer-hi (RW=0, gravació). Aquest valor el continua mantenint fins a arribar a la posició 0xFFFF (límit de la capacitat de la EEPROM). La següent adreça que apunta pertany a l’altre xip EEPROM (U5) i per tant, ara el byte de control passa a tenir el valor 0xA6 (l’adreça hardware ha canviat a 011). Això es mostra en el primer requadre a la figura Fig. 5.4 Aquest comportament passa tant a la escriptura com a la lectura, ja que és un procés de direccionament (segon requadre). El procés de lectura es una mica més llarg degut a què s’està llegint cada byte de forma independent. Això vol dir que cada vegada que volem recuperar una dada, primer tenim que indicar-li a la EEPROM on es troba aquesta dada (posició de memòria) i a continuació indicar-li amb l’ordre corresponent que volem llegir (RW=1). Es per això que es fa servir la condició Sr (re-Start condition) i posteriorment es torna a enviar un altre byte de control amb l’ordre desitjada. Com ha curiositat comentarem la seqüència “S FF N Sr P” que apareix a sota del primer requadre. Aquesta seqüència es una recomanació del fabricant per a treure d’algun estat de bloqueig als dispositius EEPROM que es comuniquen amb el bus I2C. Consisteix a enviar 9 bits a ‘1’ (el control byte a 0xFF i el NACK), seguidament del re-Start condition i finalment del Stop condition. Per la part que correspon als objectius, comentar que han estat complerts, sense cap excepció.
36
6.
Contestador telefònic (gravador i reproductor de veu).
Part V: Subsistema de reproducció del missatge
6.1. Disseny i implementació del subsistema. 6.1.1.
Descripció.
Un cop hem fet proves de funcionament del component DAC (veure ¡Error! No se encuentra el origen de la referencia.), ja podem dissenyar completament el subsistema de reproducció. El disseny serà molt semblant al que s’ha utilitzat en la presa de contacte del DAC (veure D.3.1.3), amb l’afegit del amplificador operacional inversor.
6.1.2.
Diagrama de flux del programa del subsistema de reproducció.
El diagrama de flux es el mateix que el de la figura Fig. 11.47. Per tant, la finalitat del programa es la mateixa, agafar mostres d’un senyal analògic i enviar-les al DAC a través del port D (veure Fig. 11.46).
6.1.3.
Circuit esquemàtic del subsistema de reproducció.
En aquest disseny s´afegit un amplificador operacional amb configuració d´ inversor (veure Fig. 6.1). El motiu es degut a que en la fase de disseny del condicionador del senyal (veure Fig. 11.13) la configuració del amplificador és un inversor, i per tant, per a recuperar el senyal original tenim que tornar a invertir el senyal abans d’enviar-la a l’altaveu.
Fig. 6.1 Circuit esquemàtic del subsistema de reproducció
6.1.4.
Codi font del programa del subsistema de reproducció.
El codi font es el mateix que el codi font de l’apartat D.3.1.2 “Comunicació amb un DAC”.
Subsistema de reproducció del missatge.
6.1.5.
37
Comprovació del funcionament.
A la figura Fig. 6.2 es mostra el funcionament del subsistema de reproducció. Els dos senyals que apareixen a dalt, representen el senyal d’entrada (amb una freqüència de 1KHz i una amplitud de 2 volts) i la sortida del DAC (aquesta es veu esglaonada). El senyal que apareix a baix representa el senyal a la sortida del subsistema. Es a dir, després de la etapa de filtratge i també de la etapa d’eliminació de continua (veure Fig. 6.1).
Fig. 6.2 Comprovació del funcionament del subsistema de reproducció
38
7.
Contestador telefònic (gravador i reproductor de veu).
Part VI: Acoblament del sistema global
7.1. Objectius i requisits. Acoblar tots el subsistemes i què funcionin com a un de sol sistema.
7.2. Descripció del sistema global. A la figura Fig. 7.1 es mostra el diagrama de blocs del sistema global del gravador i reproductor de veu. En ell, es reflexa totes les parts que participen dels diferents subsistemes.
Fig. 7.1 Diagrama de blocs del sistema global
7.3. Desenvolupament del problema. 7.3.1.
Disseny i implementació del sistema global.
Hem arribat a un punt del projecte on toca acoblar totes les peces per a formar un sol sistema. Es a dir, el reproductor i gravador de veu. En els punts següents es facilitarà el programa global de funcionament amb la seva descripció corresponent i el seu diagrama de flux.
7.3.2.
Diagrama de connectivitat del sistema global.
A la figura Fig. 7.2 es mostra un diagrama de connexió del µC amb els perifèrics externs que es fan servir (RAM, EEPROM, DAC, OP-AMPs, polsadors). Cal recordar que el perifèric ADC està integrat al µC (veure A.3.1.3 i [6]). Els polsadors que apareixen formen part del panel de control del sistema. N’hi han dos, el polsador RECORD amb la funcionalitat d’iniciar la captura del missatge per part de l’usuari (mentre es mantingui polsat) i el polsador PLAY què té dos funcions: la primera iniciar la gravació del mateix a la EEPROM
Aconblament del sistema global.
39
(amb la conformitat de l’usuari, es a dir, es reprodueix abans de gravar-lo a la EEPROM) i la segona i última la reproducció del missatge (un cop el missatge ja està emmagatzemat a la EEPROM).
Fig. 7.2 Diagrama de connexió del sistema global
7.3.3.
Diagrama de flux del programa del sistema global.
A continuació explicarem el comportament del programa principal del gravador i reproductor de veu. També es facilita el seu diagrama de flux (veure Fig. 7.3). El programa que controla el sistema global i que té la finalitat de gravar i reproduir el missatge disposa de dos polsadors (PLAY i RECORD) per a dur a terme tal tasca. La operació de captura del missatge de l’usuari comença al prémer el polsador RECORD i sense deixar de prémer el polsador, el sistema anirà agafant mostres del missatge què seguidament seran guardades a la RAM. Aquest procés continua fins que l’usuari deixi de prémer el polsador o fins que la RAM s’ompli (hi ha un LED indicador de RAM complerta, per a informar a l’usuari). Un cop el missatge s’ha gravat a la RAM cal la conformitat de l’usuari de si l’agrada o no el missatge per a què aquest sigui gravat a la EEPROM. Això es fa mitjançant el polsador PLAY i consultant la variable PLAYED. Si aquesta variable té un valor de 0, el missatge no ha estat reproduït i per tant, es reprodueix. Si es torna a prémer el polsador PLAY, la variable PLAYED tindrà un valor de 1. Es a dir, missatge ja reproduït, i per tant, passem a gravar el missatge a la memòria EEPROM. Si pel contrari l’usuari no l’hi agrada el missatge, pot tornar a prémer el polsador RECORD per a tornar a iniciar el procés (les variables d’estat són “resetejades”).
40
Contestador telefònic (gravador i reproductor de veu).
Fig. 7.3 Diagrama general de flux del sistema global
A la figura Fig. 7.4 es mostra el diagrama de flux del sistema global més detallat amb les funcions principals que intervenen.
Aconblament del sistema global.
Fig. 7.4 Diagrama de flux detallat del sistema global
41
42
7.3.4.
Contestador telefònic (gravador i reproductor de veu).
Diagrames de flux de funcions auxiliars del sistema global.
Fig. 7.5 Diagrames de flux de funcions auxiliars del sistema global
Aconblament del sistema global.
7.3.5.
43
Circuit esquemàtic del sistema global.
A la figura Fig. 7.6 es mostra el disseny esquemàtic de tot el sistema. Es a dir, tots els subsistemes vistos en el apartats anteriors acoblats en un de sol per a treballar conjuntament i de forma sincronitzada
Fig. 7.6 Circuit esquemàtic del sistema global
7.3.6.
Codi font en llenguatge C del programa del sistema global.
Degut a la quantitat i grandària dels arxius s’ha optat per posar-los tots junts a l’Annex I. El programa està format pels fitxers: main_system.c (Fitxer 11.15), adc.c (Fitxer 11.16), global.c (Fitxer 11.18), isr.c (Fitxer 11.19), core.c (Fitxer 11.17), init.c (Fitxer 11.20), i2c_eeprom.c (Fitxer 11.21), myram.c (Fitxer 11.22), adc.h (Fitxer 11.5), global.h (Fitxer 11.24), core.h (Fitxer 11.23), init.h (Fitxer 11.4), i2c_eeprom.h (Fitxer 11.25), myram.h (Fitxer 11.26) i delay.h (Fitxer 11.12).
7.3.7.
Comprovació del funcionament del sistema global.
La comprovació del sistema global s’ha fet de dues maneres. La primera mitjançant una simulació gràfica (no interactiva, veure Fig. 7.7). Per tal de pogué valorar i observar el comportament del mateix. Es fa servir la definició
44
Contestador telefònic (gravador i reproductor de veu).
d’una constant anomenada “DUMMY_RUN” situada al fitxer global.h (Fitxer 11.24). La qual ens permet realitzar una compilació condicionada. La segona manera i última de simulació ha estat de forma interactiva (veure Fig. 7.10), es a dir, es requereix de la participació de l’usuari. Per fer-hi aquesta simulació es té que treure la constant abans mencionada (DUMMY_RUN).
Fig. 7.7 Simulació no interactiva del sistema global
A la figura Fig. 7.7 es veu el comportament del gravador i reproductor de veu a una simulació no interactiva. El programa mostreja (grava) un missatge (senyal font de 1kHz) i abans de gravar-ho a la EEPROM el reprodueix per a sapigué si l'usuari està conforme. Un cop l'usuari indica al sistema mitjançant el polsador PLAY que sí, el sistema comença a gravar el missatge a la EEPROM. Finalment s’observa la reproducció del missatge quan l'usuari torna a prémer el polsador PLAY. A la figura Fig. 7.7 també s’aprecia el moment del mostreig del senyal (indicat per l’indicador sampling). La reproducció del missatge és indicada per l’indicador OE_DAC (sortida del DAC). Com a observació comentar dues coses: la primera es que al final de la figura el missatge es reproduït un parell de vegades seguides (per això l’indicador OE_DAC té una durada més gran). I la segona i última es que el senyal font que apareix a la figura amb l'indicador ‘Van0’ fa referència a la sortida del amplificador condicionador del senyal, ja
Aconblament del sistema global.
45
que si es prenia com a indicador el senyal d'entrada del micròfon l’amplitud de la mateixa es molt petita per a ser visualitzada (de l’ordre de milivolts).
Fig. 7.8 Període de mostreig (captura) del sistema global
A la figura Fig. 7.8 volem mostrar el valor del període de mostreig de l´ADC indicat pels cursors (50.3µs). Aquí es veu millor com un cop el missatge s’ha mostrejat es reprodueix a petició de l'usuari. Els dos senyals estan desfasats 180 graus, degut a que la mesura del senyal font (color blau) no correspon realment al senyal del micròfon sinó a la seva posterior amplificació ja que sinó no les podrien veure juntes a la captura (Vin=mV i Vout=V). A la figura Fig. 7.9 mostrem el mateix que a la figura Fig. 7.8, però en aquest cas els cursors estan indicant el període de reproducció. Es a dir, com que la taxa de mostreig es de 50 µs, 20 mil mostres per segon (en anglès Ksps), el període de reproducció ha d’ésser el mateix. I per tant, la velocitat de reproducció es de 20 Kbytes per segon. Finalment a la figura Fig. 7.10 es veu el funcionament del sistema global de forma interactiva (mitjançant el polsador PLAY i RECORD). També es mostra el contingut de les memòries (RAM i EEPROM). El missatge ocupa una capacitat de 99 bytes (fins a la posició o adreça 0x0063). Amb l’analitzador del bus I2C es pot apreciar l’últim byte gravat a la EEPROM i el començament de la lectura del mateix per a transferir el missatge des de la EEPROM cap a la RAM. Això es veu a la línia ressaltada de la captura, on el sistema de lectura que s’ha emprat ha estat el mode seqüencial (més eficient que el mode byte a byte, veure [29]). Comentar que els senyals visualitzats a l’oscil·loscopi corresponent
46
Contestador telefònic (gravador i reproductor de veu).
a la sortida del sistema i el senyal després de l’etapa condicionadora del senyal, ja que la resolució de l’oscil·loscopi no es suficient per a veure la mateixa (Vin = 20mV) i el guany màxim de l’oscil·loscopi es de 20 V/div.
Fig. 7.9 Període de mostreig (reproducció) del sistema global
Fig. 7.10 Simulació interactiva del sistema global
Conclusions
8.
47
Conclusions 1. El sistema funciona. El simulador ens ha permès “entrenar-nos” (practicar) sense tenir que fer-hi cap tipus d’inversió en costos d’adquisició de material electrònic (tant d’instrumentació de laboratori, com de components del propi disseny). 2. La limitació de la capacitat de les memòries RAM i EEPROM que ens ofereix en Proteus VSM (laboratori virtual) ha provocat un increment en la complexitat del disseny hardware i software del projecte. Aquestes memòries no compleixen els nostres requisits. Això ha definit una corba de desenvolupament del projecte més pronunciada. S'ha tingut que afegir components electrònics per a controlar un sistema RAM propietari, juntament amb la implementació de funcions software de tractament per a la EEPROM i RAM. 3. El procés de digitalitzar un senyal analògic (adquisició d’un senyal) requereix grans quantitats de memòria. Això vol dir que necessitem d’un mecanisme o algorisme de compressió per a reduir tal quantitat d’informació. Això ens porta a una situació de compromís, ja que comprimir vol dir perdre informació, es a dir, qualitat del senyal. Llavors, segons el tipus d’aplicació a dissenyar ens determinarà la necessitat de comprimir o no. Per exemple, les aplicacions d’àudio i vídeo ens donen la possibilitat de comprimir la informació perquè la sensibilitat humana (auditiva i visual) no té capacitat suficient per aprofitar tots els detalls (massa informació). En canvi una aplicació on es requereix tota la informació com són els aparells d’instrumentació no es pot comprimir. 4. Es necessari una recerca dels components actuals en el mercat abans de passar a la part de disseny de la placa de circuit imprès (Printed Circuit Board). Això implicarà una reducció considerable del nombre de components a fer servir. Per exemple, nosaltres fem servir 8 xips de memòria RAM, més 8 xips de memòria EEPROM per aconseguir la capacitat de la memòria que necessitem per a emmagatzemar el missatge. En canvi, per exemple, s’ha trobat un xip amb capacitat suficient per a emmagatzemar tota la informació requerida per la nostra aplicació. A més aquest xip és del tipus NV SRAM (Non Volatile Static RAM), això vol dir que la informació no es perd en absència del subministrament elèctric. Per tant, ens faria funció de memòria RAM (amb les seves característiques) i EEPROM (veure Annex L). Dit d’una altre manera, el sistema de memòria s’ha reduït de 16 xips a 1 sol xip. Això té dos avantatges principals: abaratiment de costos (ja que es redueix el nombre de components) i major integració a la placa PCB
48
Contestador telefònic (gravador i reproductor de veu).
(això també repercuteix als costos, ja que la placa té una mida inferior i en produccions en sèrie la diferència en termes de costos es notable ). 5. La nostra aplicació no és un producte nou en el mercat. Per exemple, la empresa CEBEK disposa de circuits molt semblants al nostre en quant a característiques de durada del missatge (veure Annex M). Sembla ser, que fan servir pocs components, però també cal saber quin és el tipus de qualitat del producte. Per exemple, si estem parlant de sistemes de gravació de veu, amb qualitat sintètica (típics missatges què es fan servir a operadors telefònics “el número de teléfono al que llama, está apagado o fuera de cobertura”). Aquests tipus de circuits es podem dissenyar amb tres components bàsics, un VOCODER (Voice CODEC), un microcontrolador senzill i una memòria per a guardar el missatge. Nosaltres no fem servir CODECs de la banda vocal, sinó, també hauríem reduït força el disseny (aquests CODECs tenen l’inconvenient que la qualitat del senyal no és molt bona, ja que l’ampla de banda de treball és 3.1kHz (300Hz3400Hz), en lloc de 4kHz). Impacte mediambiental. L’impacte mediambiental és mínim, ja que només hem fet servir eines de software. Si de cas hauríem d’avaluar l’impacta què ocasiona el hardware del computador on s’ha treballat. Fins que no es faci el muntatge de la placa PCB no és pot fer un anàlisis detallat.
Línies futures
9.
49
Línies futures
Com a línies futures explicarem les millores què és podem fer-hi per a millorar l’aplicació i la seva justificació. Les millores es comentaran seguin la estructura del document dividit en parts. Ja que cadascuna d’elles representa una funcionalitat dins del projecte o aplicació. D’aquesta manera és manté la metodologia de treball en grup i la segmentació de l’assignació de tasques. També comentar què les línies futures s’han dividit en dues grans vessants: la vessant docent, la qual continua sent la mateixa, apropar a l’estudiant al mon del disseny electrònic amb microcontroladors i la vessant professional, la qual té com a objectiu explicar les millores per a dissenyar una versió comercial (una solució viable). Línies futures vessant docent. 1. Part II. A la part d’adquisició del senyal, la part d’amplificació del senyal del micròfon hauria d’esser substituït per un circuit GAC (Gain Automatic Control), d’aquesta manera s’evitarien possibles saturacions del senyal degut a variacions del volum de l’usuari a l’hora de parlar. El filtre fet servir es podria substituir per un xip on estigues implementat, d’aquesta manera obtindríem un filtre amb menys components electrònics i sobretot amb una resposta freqüencial molt millor, degut al nombre de l’ordre del filtre (n’hi han de 5è i 8è ordre) (veure Annex S i Annex T). Per últim, i potser la més important, fa referència al tipus de codificació què fa el convertidor ADC. Es a dir, l’ADC codifica el senyal d’entrada de forma lineal, això vol dir que no es preocupa del tipus de senyal analògic que té a la entrada. Per tant, només s’encarrega d’assignar un valor binari a un valor analògic en un instant de temps. En el nostre cas, el senyal analògic que hi ha a la entrada de l’ADC, no és un senyal qualsevol (com podria ser un sensor de temperatura, pressió, humitat, etc). Sinó, què és tracta de la veu humana, i aquest senyal segons la freqüència, la amplitud es més baixa que d’altres. Per tant, per a mostrejar un senyal vocal correcte sense perdre qualitat, és té que fer servir una codificació no lineal, i això vol dir amplificar el senyal a amplituds baixes i reduir-les a amplituds altes. Això és fa servir als sistemes de telefonia, on el senyal abans de mostrejar-lo s’expandeix i a continuació es mostreja. Després en el procés de reproducció a la sortida del DAC el senyal es comprimeix. Aquest procés es coneix amb el nom de la llei A (aplicat a Europa) i la llei µ (aplicat a USA i al Japó). Llavors, un cop feta aquesta breu introducció proposem la implementació la llei A de forma digital. Aquesta es basa en reduir la longitud de la
50
Contestador telefònic (gravador i reproductor de veu).
paraula de ADC, per exemple, un ADC de 12 bits i codificar la mostra amb 8 bits. Nosaltres tenim un ADC de 10 bits, dels quals només n’aprofiten 8 bits, ara, seria qüestió d’aprofitar els 10 bits i passar-los a 8 bits (veure [33]). 2. Part III i part IV. Els sistemes de memòria RAM i EEPROM respectivament, podem ser substituïdes per un sol xip amb capacitat suficient segons els requisits de la nostra aplicació. Per tant, la nostra aplicació quedaria de tenir 16 xips (8 de RAM més 8 d’ EEPROM) a un de sol (l’abaratiment de costos és notable). Hem trobat un tipus de memòria on la informació es manté en absència del subministrament elèctric. Estem parlant de les memòries RAM no volàtils (Non-Volatile Static RAM). Aquest tipus de memòria inclouen els avantatges de les memòries RAM (temps d’accés molt baix) i els avantatges de les memòries EEPROM (permanència de la informació). Les capacitats trobades són varies, només indicarem dues, la que s’ajusta a la nostra aplicació (veure Annex L) i la capacitat màxima per si es volgués ampliar la durada del missatge (veure Annex N). Malauradament, encara tenim un inconvenient, i és que aquestes memòries són d’accés paral·lel, això vol dir, que necessitem tantes línies dels ports del microcontrolador, com de línies d’adreces tingui la memòria. Per tant, cal implementar un nou sistema d’adreçament extern, (aquest sistema seria d’accés seqüencial). Un altre solució pot ser fer servir memòries on l’accés sigui sèrie (I2C o SPI). Amb aquest tipus de memòries les línies que s’utilitzen són dues i el consum de línies I/O dels ports del microcontrolador és mínim. Les memòries que hem trobat amb aquest tipus d’accés són del tipus FRAM (Ferroelectric RAM). Aquestes memòries també tenen la funcionalitat de substituir en un sol xip a les memòries RAM i EEPROM. L’inconvenient que tenim amb aquestes memòries, és la mida de les mateixes, es a dir, necessitem 8 xips per arribar a la capacitat de la nostra aplicació (veure Annex O i Annex P). Malgrat això, encara estem reduïm de 16 xips a 8 xips. 3. Part V. A la part de la reproducció del missatge, el convertidor DAC podria ser substituït per una implementació software, en lloc, de fer servir un dispositiu hardware (estalviem costos). Aquesta implementació es basa en la utilització del mòdul CCP (Compare/Capture/Pulse With Modulation) per a generar un senyal analògic. D’aquesta manera aconseguim augmentar la justificació de l’ús d’aquest microcontrolador explotant els seus recursos (veure [34][35]). En el cas que el rendiment no sigui l’espera’t es pot substituir per un DAC amb comunicació I2C d’aquesta manera estalviem línies I/O del microcontrolador (veure [38][39]).
Línies futures
51
4. Podem afegir l’ús d’una pantalla LCD (Liquid Crystal Display) amb connectivitat I2C o USART. D’aquesta manera podem augmentar la interactivitat de l’aplicació amb l’usuari a través de missatges, en lloc de fer-la amb diodes LED com es fa ara. A més, estaríem aplicant els nous coneixements adquirits de l’ús del bus de camp I2C o fer servir el mòdul USART també conegut com a SCI (Serial Communications Interface) i ampliar coneixements (continuant la vessant docent) (veure [40]). 5. Donada la freqüència de l’oscil·lador que disposa aquest microcontrolador, es podria provar d’implementar filtres digitals, d’aquesta manera els filtres analògics s’eliminarien (abaratiment de costos) i a més es faria un tractament del senyal vocal des de el domini discret (veure [36][37]). Línies futures vessant professional. En aquestes línies futures parlarem de les modificacions que s’haurien de portar a terme en el cas de què és volgués muntar l’aplicació sobre una placa PCB (Printed Circuit Board). 1. A la part II, d’adquisició del senyal, l’ADC hauria de ser substituït per un CODEC o VOCODER (Voice Codec). Aquest dispositiu s’encarrega de fer tota la feina de mostreig del senyal vocal, es a dir, digitalitzar. També fa el recíproc, es a dir, passar-la al seu format original (analògic) (veure Annex R). Per tant, ens estalviaríem el DAC que fem servir a la part V (reproducció del missatge). N’hi han CODECs, anomenats COMBO (veure Annex Q), que porten a més del ADC i del DAC els filtres antialiasing i el filtre passa baix. Per tant, la part V, quedaria pràcticament suprimida. 2. A les parts III i IV relacionades amb l’emmagatzematge la solució donada anteriorment és valida. Cal recordar que al fer servir el CODEC la freqüència de mostreig és més baixa i per tant la quantitat de mostres també és inferior (capacitat de la RAM disminueix). 3. A la part V, hem comentat anteriorment, què si fem servir un CODEC, tant l’ADC com el DAC i els filtres desapareixen. En el cas que no es faci servir un CODEC els filtres es podríem substituir per un xip que implementa filtres d’ordre molt superiors (cinquè i vuitè ordre) el nostre (segon ordre) (veure Annex S i Annex T).
52
10.
Contestador telefònic (gravador i reproductor de veu).
Bibliografia
[1]
Martín Cuenca, E, Angulo Usategui, JM, Angulo Martínez, IA Microcontroladores PIC, la clave del diseño, THOMSON, Madrid, 2003.
[2]
http://epsc.upc.edu/sed/projectes. Plana web de la assignatura Sistemes Electrònics Digitals de la Universitat EPSC, UPC.
[3]
Arizona Microchip Technology, MPLAB IDE User´s Guide, 2005.
[4]
http://www.htsoft.com 2005.
[5]
http://www.labcenter.co.uk Proteus VSM
[6]
Arizona Microchip Technology, PIC 16F87XA Datasheet, 2003.
[7]
Kumen, B. Analog Sensor Conditioning Circuit –An overview. (AN990) Microchip Technology, 2005.
[8]
Bonnie, B. Anti-Aliasing, Analog Filters for Data Adquisition System. Microchip Technology (AN699), 1999.
[9]
Bonnie, B. Operational Amplifier Topologies and DC Specifications. Microchip Technology, (AN722), 1999.
[10]
Bonnie, B. Operational Amplifier AC, Specifications and Applications. Microchip Technology (AN723), 2000.
[11]
A Filter primer. Maxim Integrated Products (AN733), 2005.
[12]
Analog Filters Design Demystified. Maxim Integrated Products (AN1795), 2002
[13]
Analog Devices, AD8631/AD8632 Datasheet, USA, 2000
[14]
Bonnie, B. Select The Right Operational Amplifier For Your Filtering Circuits. Microchip Technology, (ADN003), 2003.
[15]
Bonnie, B. What Does “Rail-to-Rail” Operation Really Mean?, Microchip, (ADN009), 2004.
[16]
Bonnie, B. Using Single Supply Operational Amplifiers in Embedded Systems, (AN682) Microchip, 2000.
[17]
Steve B. Understanding A/D converter Performance Specifications, (AN693), Microchip, 2000.
HI-TECH PICC-Lite Compiler Manual, Australia
Bibliografia
53
[18]
Julicher, J. Hardware Techniques for PICmicro Microcontrollers, Microchiip, (AN234), 2003.
[19]
Alcobilla González, R. Pons Nin, J. Bardés Llorensí, D. Diseño digital. Una perspectiva VLSI-CMOS. “Capítol 7 Diseño de circuitos secuenciales síncronos”. Edicions UPC, 1996.
[20]
ST Microelectronics, 512 Kbit Serial I2C Bus EEPROM Datasheet, 2005
[21]
Stoneking, R. System Level Design Considerations When Using I2C Serial EEPROM Devices, (AN709) 1999.
[22]
Microchip, Questions and Answers Concerning Serial EEPROMs, (AN572), 1994.
[23]
www.mcc-us.com , Quick Overview Of General Purpose I2C Logic Devices.
[24]
Irazabal, JM, Blozis, S. I2C Semiconductors, California 2003.
[25]
Fischer, R. Using The PICmicro MSSP Module for Master I2C Communications, (AN735), Microchip, 2000.
[26]
Parris, C. Using The MSSP Module to Interface I2C Serial EEPROMs with PIC16 Devices. (AN976), Microxip, 2005.
[27]
Philips Semiconductor, The I2C Bus Specification version 2., 2000.
[28]
Abdelwahad F. Interfacing The MCP23016 I/O Expander With The PIC16F877A, (AN245) Microxip, 2003.
[29]
Parris, C. Recommended Usage of Microchip I2C Serial EEPROM Devices, (AN1028), Microxip, 2006.
[30]
Microchip, Basic Serial EEPROM Operation, (AN536), 1993.
[31]
National Semiconductor, DAC0808 8-bit D/A Converter Datasheet, 1999.
[32]
Amar, P. Using PWM to Generate Analog Output. Microchip Technology, (AN538), 1997.
[33]
Dalllas Semiconductor-Maxim, Applications, (AN3696), 2005.
[34]
Stein, R. Day, J. D/A Conversion Using PWM and R-2R Ladders to Generate Sine and DMTF Wavesforms. Microchip Technology (AN655), 1997.
[35]
Palmer, M. Using CCP module. Microchip Technology (AN594), 1997.
Manual,
Using
the
(AN10216-01),
MAXQ3120
in
Philips
Codec
54
Contestador telefònic (gravador i reproductor de veu).
[36]
Palacherla, A. Implementing IIR Filters. Microchip Technology (AN540), 1997.
[37]
Anantha Ramu. Implementing FIR and IIR Filters Using PIC18 Microcontrollers. Microchip Technology (AN854), 2002.
[38]
8-bit Digital-to-Analog Converter with Two-Wire Interface. Microchip Technology (TC1320), 2002.
[39]
10-bit Digital-to-Analog Converter with Two-Wire Interface. Microchip Technology (TC1321), 2002.
[40]
Palmer, M. Interfacing PICmicro MCUs to an LCD module. Microchip Technology (AN587), 1997.
Annexos
11.
55
Annexos
56
Contestador telefònic (gravador i reproductor de veu).
Annex A. Part II: Subsistema d’adquisició del missatge A.1.
Objectius i requisits.
Conèixer les característiques tècniques del dispositiu que té la responsabilitat de capturar el missatge (ADC), aprendre a programar-lo i comprovar el funcionament segons els requisits. Aquestes característiques ens determinaran la viabilitat o no de poder treballar amb aquest µC o tindre que buscar-ne un altre. Dissenyar un filtre anti-aliasing. Com a requisit tenim que el senyal font a mostrejar té un ampla de banda de 4 kHz (canal vocal).
A.2.
Descripció del subsistema.
El subsistema d’adquisició del missatge té la finalitat de capturar o adquirir el missatge (veure Fig. 11.1). Per a tal tasca, consta dels següents components elèctrics: el primer d’ells correspon a la part de mostreig del senyal font, estem parlant de l´ ADC (en anglès, Analògic to Digital Converter, veure A.3.1.3). El segon està format per un condicionador de senyal, que té la finalitat d’adaptar el senyal per a la seva manipulació (veure A.3.5). I el tercer i últim es un filtre passa-banda, amb la finalitat d’evitar el solapament (en anglès, aliasing).
Fig. 11.1 Diagrama de blocs del subsistema d’adquisició del missatge
A.3.
Desenvolupament del problema.
La forma de treballar ha estat la següent: estudi previ dels perifèrics a utilitzar, implementació d’un petit disseny per a familiaritzar-nos amb cadascun d’ells, i finalment dissenyar el subsistema complet. A continuació es mostren els punts indican l’ordre de treball.
A.3.1. Estudi previ del/s perifèric/s que intervenen. Els perifèrics amb els quals treballarem son el convertidor ADC, el temporitzador (timer 2) i els ports I/O (input/output) del µC. A continuació explicarem breument les seves característiques i els registres que intervenen per a treballar amb ells.
Annexos
57
A.3.1.1. Perifèric PORT A. El PORT A es un registre de 6 bits. Cadascun dels seus pins té una finalitat segons l’ús que es doni (veure Taula 11.1). Es pot utilitzar com a port d’entrades analògiques o digitals (fins a 5 entrades analògiques), també ens permet connectar un rellotge extern per a alimentar el timer0 (un altre perifèric del µC, veure [6]), les tensions de referència (Vref) en el cas d’utilitzar el perifèric ADC i les entrades analògiques del mateix. Per a configurar el sentit de les entrades i sortides s’utilitza el registre TRISA (veure Taula 11.2), que segons el valor binari associat a cadascuna de les entrades (‘1’ o ‘0’) estem indicant al µC una entrada o sortida respectivament. Taula 11.1 Funcions del PORT A
Taula 11.2 Registres associats al PORT A
A.3.1.2. Perifèric PORT D. El PORT D, es un registre de 8 bits. Aquests poden ser entrades o sortides digitals(veure Taula 11.3). També es fa servir com a port de comunicació amb un altre µC. Per a indicar el sentit de les dades es fa servir el registre TRISD (veure Taula 11.4).
58
Contestador telefònic (gravador i reproductor de veu).
Taula 11.3 Funcions dels pins del PORT D
Taula 11.4 Registres associats al PORT D
A.3.1.3. Perifèric ADC. Aquest perifèric és el més important de tot el disseny del sistema global (veure [17]). Es a dir, del projecte sencer. Segons les seves prestacions es podrà fer servir aquest µC o es tindrà que buscar un altre. Per tant, estem parlant d’un component determinant en el desenvolupament del nostre projecte. A continuació es descriuran les característiques bàsiques del mateix. El convertidor analògic a digital (d’ara en davant ADC), disposa de fins a 8 entrades analògiques, però només pot digitalitzar una a la vegada (veure Fig. 11.2). Cada conversió del senyal analògic a digital que fa es representat per un valor de 10 bits (veure equació 10.1). Es a dir, cada mostra es guarda amb una resolució de 10 bits. Nosaltres només farem servir una resolució de 8 bits en lloc de 10 bits (més endavant explicarem perquè). També disposa l’opció de seleccionar via software (mitjançant la programació) l’origen i els valors de les tensions de referència (Vref+ i Vref-) de l´ ADC (veure Taula 11.7). Una d’aquestes opcions (i es la que fem servir), es dir-li al µC que ofereixi les tensions de referència ell mateix. ADC out =
(Vref + − Vref − )
2n n = nombre de bits
(11.1)
Annexos
59
Fig. 11.2 Diagrama intern de connexió de l’ADC
El perifèric (també anomenat mòdul) requereix del coneixement de quatre registres per a treballar amb ell, es a dir, per a configurar-lo. Registres ADRESH i ADRESL on es guarda el resultat de la mostra digitalitzada (veure Taula 11.7). Cadascun d’aquests registres es d’una grandària de 8 bits, però això no vol dir que la mostra tingui una mida de 16 bits (requereix una justificació a esquerre o a dreta). Registre ADCON0, es tracta d’un registre de control i de configuració (veure Taula 11.5). Amb aquest registre seleccionem la freqüència de mostreig (ADCS0:ADCS1), el canal amb el qual volem treballar (senyal analògic a digitalitzar) (CHS2:CHS0), el control per a donar-li l’ordre de quan té que començar a fer la conversió (atenció no confondre amb mostreig) (GO), quan la mostra ja està feta (DONE) i per últim el bit d’encès o apagat (ADON). Registre ADCON1 (veure Taula 11.6), aquest registre ens permet seleccionar el tipus de justificació del resultat digitalitzat (ADFM) i la configuració dels canals analògics juntament amb les tensions de referència (PCFG3:PCFG0), es a dir, si els canals seran analògics o digitals (el qual vol dir que la resta seran ignorats). Fins aquí només em parlat de registres de configuració i control, però rés de les seves prestacions. Ara donarem dades que determinaran si el nostre µC potser candidat o no per al desenvolupament del projecte. Parlarem dels temps que triga en capturar el valor analògic en un instant de temps (veure Fig. 11.4) i el valor de temps que triga en convertir-lo a digital (veure Fig. 11.5).
60
Contestador telefònic (gravador i reproductor de veu).
Segons el datasheet del µC (veure [6]), el convertidor ADC es del tipus Sample & Hold (circuit RC). Per tant, el temps de captura del valor analògic estarà determinat pel temps de càrrega del condensador.
Fig. 11.3 Model ADC del µC
El fabricant ens indica que el temps d’adquisició (TACQ) serà directament perjudicat pels valors de les impedàncies del mostrejador (Rss) i de la impedància d’entrada (Rs) (veure Fig. 11.3). Aquesta última ens recomana que no superi el valor de 2.5 KΩ. En el nostre cas això no serà un problema, ja que al fer servir un amplificador operacional (OP-AMP) com a condicionador del senyal, la seva impedància de sortida serà de l’ordre de Ohms (Ω). El fabricant ens ofereix la equació del càlcul del temps TACQ (veure 10.2). Per al nostre cas (Rs menyspreable) tenim un valor de 7,32 µs.
T ACQ = T AMP + TC + TCOFF
Fig. 11.4 Equació del temps d’adquisició (Zin=Rs=10k)
Fig. 11.5 Cicles TAD de conversió de l´ADC
(11.2)
Annexos
61
Ara ens falta l’altre paràmetre de l´ADC, que es el temps de conversió per bit (definit com a TAD). Aquest valor està determinat per la resolució de l´ADC (mida de la paraula en bits). El nostre perifèric té una resolució de 10 bits (malgrat que no es facin servir tots ells). Per tant, el temps de conversió d’una mostra representada per 10 bits serà de 12 TAD (10+2) (veure Fig. 11.5). Aquest extra de 2 TAD bé donat pel fet que el µC abans de començar (bit GO=1) a convertir el valor de tensió del condensador, té que desconnectar el condensador de l’entrada analògica (temps que triga 100 ns, veure [6]) i després inicia la conversió. Un cop ja sabem quant triga en convertir una paraula, tenim que seleccionar via software el valor d’un TAD. El fabricant ens recomana que aquest valor no sigui inferior a 1.6 µs (veure [6]). Taula 11.5 Registre ADCON0
Taula 11.6 Registre ADCON1
Taula 11.7 Configuració dels canals analògics i tensions Vrefs
62
Contestador telefònic (gravador i reproductor de veu).
Taula 11.8 Registres associats a l´ADC
A.3.1.4. Perifèric TIMER 2. El timer2 es un temporitzador de 8 bits (veure Fig. 11.6). Aquest mòdul o perifèric no es obligatori per a treballar amb l´ADC. Però nosaltres el farem servir com a rellotge de mostreig (sampling clock).
Fig. 11.6 Diagrama de blocs del timer 2
Aquest timer disposa d’un prescaler i un postscaler. També ens dona l’opció de fer la càrrega per hardware mitjançant el registre PR2. El timer2 contarà des de 0 fins arribar al valor del registre PR2. T2CON es el registre de control del timer, amb el qual seleccionem el prescaler, el postscaler i la posada en marxa (veure Taula 11.9).
Annexos
63
Taula 11.9 Registre de control T2CON del timer 2
A.3.2. Guia de configuració de l´ADC (diagrama de flux). A continuació es facilita un diagrama de flux com guia de referència per a agilitzar la feina a l’hora de tindre que configurar aquest perifèric (veure Fig. 11.7).
64
Contestador telefònic (gravador i reproductor de veu).
Fig. 11.7 Diagrama de flux de configuració de l´ADC
Annexos
65
A.3.3. Programació del perifèric ADC. Primer contacte. A continuació es facilita un programa que té com a objectiu comprovar la correcta programació de l´ADC. I pogué observar el seu funcionament. El comportament del mateix està indicat al diagrama de flux (veure Fig. 11.8), seguidament del codi del programa en llenguatge C. Aquest programa envia al port D el valor digital en hexadecimal de cada mostra del senyal analògic digitalitzat. Per a tal tasca es fan servir una sèrie de funcions creades per nosaltres. A.3.3.1. Diagrama de flux del programa de contacte amb l´ ADC.
Fig. 11.8 Diagrama de flux del programa de contacte amb l´ADC
A.3.3.2. Disseny del circuit per a provar el perifèric ADC. Per a evitar la duplicació de la imatge, hem posat el disseny amb la versió executant-se (veure Fig. 11.9). El circuit està format pel PIC 16F877, un freqüencímetre per a pogué mesurar la freqüència de mostreig i dos displays 7segments per a visualitzar el valor de la mostra en hexadecimal. Com a senyal
66
Contestador telefònic (gravador i reproductor de veu).
d’entrada al canal analògic del µC em posat una sinusoide de freqüència molt baixa (100 Hz) per a observar que els valors de les mostres varien paulatinament degut a la poca variació del senyal font i a la alta taxa de mostreig.
Fig. 11.9 Disseny del circuit per a provar el perifèric ADC
A.3.3.3. Codi en llenguatge C del programa de contacte amb l´ ADC. El programa està format pels fitxers: main_adc.c (Fitxer 11.1), init.c (Fitxer 11.2), adc.c (Fitxer 11.3), init.h (Fitxer 11.4) i adc.h (Fitxer 11.5). /* file:main_adc.c descripció: La finalitat d’aquest programa es la familiaritza-hi amb el perifèric ADC. Per aquest motiu em fet un petit programa que mostreja un senyal. */ #include #include #include #include
"init.h" "adc.h"
void main (void) { init_pic(); setup_adc();//configuració de l´ADC. di();//no volem interrupcions GIE=0. for(;;) { PORTD=get_adc(); RB1^=1;//Fsampler. } }
Fitxer 11.1 main_adc.c
Annexos
67
/* file:init.c descripció:inicialització dels perifèrics. */ #include #include "adc.h" // Funció d’inicialització dels perifèrics. void init_pic(void){ INTCON = 0b01000000;/* * Permís de interrupció dels perifèrics(PEIE=1). * GIE durant la inicialització la posem en disable. */ OPTION = 0b11000010;
/*Configuració del port D ************************* */ TRISD = 0b00000000; //PORTD sortida (1=input, 0=output). PORTD = 0; /*Configuració del port B. ************************* */ TRISB1=0x00; RB1=0; /* Aquesta sortida estarà connectada a un freqüencímetre. * el qual ens mostrarà la freqüència de mostreig. */ }
Fitxer 11.2 init.c /*file:adc.c Descripció:configuració de l’ADC i definició de la funció de captura de les mostres */ #include #include #include "adc.h" void setup_adc(void) { TRISA = 0b00000001;//direcció del canal AN0(1=input, 0=output). ADCON1 = 0b00001110;
/* * Configuració del port A, només un canal * analògic (Vref+=Vdd i Vref-=Vss). * Justificació a la esquerra. */
ADCON0 = 0b10000001;
/* * El mòdul ADC està connectat. * Selecció del canal AN0. * El clock de conversió 32Tosc(1,6us). */
} /* Aquesta funció retorna una mostra. El temps de conversió està determinat per 12TADs(TAD=1.6us). */ BYTE get_adc(void) {
68
Contestador telefònic (gravador i reproductor de veu).
ADGO=1;//inici de la conversió. while(ADGO) continue; return ADRESH;//l´ADC deixa la mostra en aquest registre. }
Fitxer 11.3 adc.c /* File:init.h Descripció:declaració de prototips. */ #ifndef _INIT_H #define _INIT_H extern void init_pic(void);// Inicialització del pic en general #endif
Fitxer 11.4 init.h /* File:adc.h descripció: declaració dels prototips de les funcions de l’ADC. */ #ifndef _ADC_H #define _ADC_H #include #define PORTBIT(PORT,BIT) ((unsigned)(&PORT)*8+(BIT)); extern void setup_adc(void); extern BYTE get_adc(void); #endif
Fitxer 11.5 adc.h
A.3.4. Comprovació del funcionament.
Fig. 11.10 Cronograma del funcionament de l´ADC
Annexos
69
Com es pot apreciar l´ADC treballa segons l’espera’t (veure Fig. 11.10). Es pot apreciar que les mostres varien entre elles una unitat (aquest es el motiu de seleccionar una freqüència baixa). També podem veure com la freqüència de mostreig correspon a un valor de 45.4 µs. Aquest valor es correcte, ja que la impedància d’entrada del canal analògic seria de l’ordre de KΩs.
A.3.5. Circuit condicionador i filtre antialiasing. Els micròfons del tipus electret com a qualsevol sensor (aquest de tipus acústic) no es poden connectar directament a cap etapa d’adquisició de senyal. El primer motiu es el petit valor de senyal que ofereixen (ordre de milivolts), per tant, requereix d’una part d’amplificació i l’altre es la polarització, formada per una resistència. Finalment per a eliminar la part de continua (DC) afegim un condensador (veure Fig. 11.11).
Fig. 11.11 Circuit de polarització d’un micròfon electret
A part dels components requerits per a poder treballar amb un micròfon, nosaltres tenim configurat l’ADC per a que treballi nomes amb valors positius (veure Taula 11.7 i Fitxer 11.3). Per tant, un senyal analògic no el podríem digitalitzar completament. Per a solucionar aquest inconvenient, apliquem un offset (valor de continua) al senyal que ens entrega el micròfon. Aquesta és la funció que té el circuit condicionador de senyal (veure [7][16]). El circuit condicionador està format per un amplificador operacional model AD8631(veure Annex G). Aquest circuit ens fa d’interfase entre el micròfon i l´ADC. La particularitat d’aquest circuit es la no necessitat de alimentació simètrica per a tractar senyals amb valors negatius. Aplicant una tensió de referència (típicament Vdd/2) a la entrada no inversora del OP-AMP, obtindrem el nostre senyal analògic a la sortida del OP-AMP sense cap retall (veure [16]) Desprès vindria la part de filtratge (veure [8]). D’aquesta manera evitem mostrejar senyals que estiguin fora de la banda del canal vocal. Les conseqüències són soroll en la reproducció degut a que la freqüència de mostreig no es la correcta. El diagrama de Bode ens mostra les freqüències de tall del filtre (veure Fig. 11.15). Normalment es tracta d’un filtre passabaix, però nosaltres hem utilitzat un filtre passa-banda (veure Fig. 11.13). Aquest filtre ha de complir el teorema de Nyquist, per tal d’evitar el solapament.
70
Contestador telefònic (gravador i reproductor de veu).
A.3.5.1. Càlculs associats al subsistema d’adquisició. A continuació es mostren els càlculs del filtre passa-banda i els valors de les resistències per a tindre un guany de K=100 (guany en DC). Aquest guany assignat es perquè el valor del senyal entregat pel micròfon electret és de l’ordre de milivolts i el marge dinàmic (full scale en anglès) de l’ADC és de 5V. Les freqüències de tall son: freqüència de tall per al filtre passa altes de 50 Hz i la freqüència de tall per al filtre passa baixes de 4kHz (veure Fig. 11.15). A continuació facilitem un breu anàlisis per a obtenir la funció de transferència del filtre (veure [9][10][11][14]).
H (s) =
Transformada de la resposta a estat nul.l Vout ( s ) = Transformada del senyal d ' entrada Vin( s)
(11.3)
El circuit l’analitzarem en el domini de Laplace (s = freqüència complexa) ja que d’aquesta manera el components elèctrics amb memòria són més senzills de tractar amb operacions algebraiques, enlloc de equacions diferencials (domini temporal). Per a tal recordem les transformades de les impedàncies del components elèctrics. impedància condensador ( Zc o Xc) =
1 Cs
(11.4)
impedància resistència ( Z ) = R
Del circuit (veure Fig. 11.13) podem representar 1 Z 1 = R1 + C1 s
⎛ 1 ⎞ Z 2 = ⎜⎜ + C 2 s ⎟⎟ ⎝ R4 ⎠
−1
Un cop tenim el circuit simplificat, s’observa que la funció de transferència del circuit correspon amb la de l’amplificador inversor H ( s ) inversor op − amp =
Z Vo( s ) =− 2 Vi ( s ) Z1
(11.5)
Per tant, aplicant la equació 10.5 tenim H ( s) =
R4 C1 s R4 C1 s Vo( s) =− = 2 (R1C1 s + 1)(R4 C 2 s + 1) R4 C1 R1C 2 s + (R1C1 + R4 C 2 )s + 1 Vi ( s)
Annexos
71
Aquesta expressió l’arreglarem segons l’expressió genèrica de la funció de transferència bipolar.
H ( s ) band pass filter =
b1 s s 2 + 2ςω 0 s + ω 0
2
(11.6)
I finalment la funció de transferència ens queda d’aquesta forma
1
s R1C 2 H (s) = − ⎛ 1 1 ⎞ 1 ⎟⎟ s + s 2 + ⎜⎜ + R4 C1 R1C 2 ⎝ R1C1 R4 C 2 ⎠ Degut a que conté un zero a l’origen, es a dir, H (0){s → jω} = 0
Aquest tipus de funcions es poden representar de la forma
H (s) = s n H 1 (s) H 1 (0) ≠ 0
(11.7)
n = nombre de zeros Per tant,
H ( s ) = − sH 1 ( s ) = − s
1 R1C 2 ⎛ 1 1 s 2 + ⎜⎜ + ⎝ R1C1 R4 C 2
⎞ 1 ⎟⎟ s + R4 C1 R1C 2 ⎠
D’aquesta manera a freqüències molt baixes, per exemple a 1Hz, el guany és H 1 (0) = − R2 C1 aquí jω = 0 representa una freqüència molt baixa per sota de la primera freqüència de tall. A més, en una gràfica logarítmica no es pot representar freqüències de valor zero. Comparant la funció de transferència i la expressió 10.6 obtindrem més dades del filtre. Conté dues pulsacions de tall
ω c1 =
1 R1C1
ωc 2 =
1 R4 C 2
El guany màxim es produeix a la pulsació central o pròpia del sistema (ω0)
72
Contestador telefònic (gravador i reproductor de veu).
H ( jω 0 ) = 20 log
b1 2ξω 0
= 20 log
1 R1C 2 ⎛ 1 1 ⎜⎜ + ⎝ R1C1 R4 C 2
⎞ ⎟⎟ ⎠
= 20 log
R4 C1 R1C1 + R4 C 2
Suposant que ω1 es inferior a ω2 el guany que tindrem a les pulsacions de tall ω1 i ω2 son: H ( jω c1 ) dB = 20 log R4 C1 jω c1 − 20 log R1C1 jω c1 + 20 log R4 C 2 jω c1 ≅ 20 log
R4 R1
H ( jω c 2 ) dB = 20 log R4 C1 jω c 2 − 20 log R1C1 jω c 2 + 20 log R4 C 2 jω c 2 ≅ 20 log
C1 C2
Aquests guanys es produeixen a -3dBs del guany màxim. Per a concloure els valors dels components segons els requisits 100 =
C1 = C2 =
R4 {R1 = 1KΩ} → R4 = 100 KΩ R1
1 = 3.18 → 3.2nF 2π × 50 Hz × 1KΩ
1 = 398 pF → 400 pF 2π × 4kHz × 100 KΩ
Av dB
⎛R ⎞ 20 log⎜⎜ 4 ⎟⎟ ⎝ R1 ⎠
20 log(R4C1 )
ω=1
⎛ 1 ⎞ ⎟⎟ ωc1 = ⎜⎜ ⎝ R1C1 ⎠
⎛ 1 ⎞ ⎟⎟ ωc2 = ⎜⎜ ⎝ R4C 2 ⎠
ω
Fig. 11.12 Anàlisis asimptòtic del guany del filtre passa baix
Annexos
73
A.3.5.2. Comprovació del funcionament del filtre passa-banda Per a provar el circuit (veure Fig. 11.13) s’ha injectat un senyal sinusoïdal de 25mVp amb un offsset de 2.5v, a una freqüència de 1kHz. La resposta del circuit en el domini temporal es molt bona (veure Fig. 11.14). La sonda de mesura que apareix de color verd correspon al senyal font amb una amplitud de l’ordre de milivolts (25 mV), per això la seva apreciació es nul·la respecte a la resta.
Fig. 11.13 Circuit condicionador del senyal i filtre anti-aliasing
La resposta del filtre és correcte (veure Fig. 11.15).Les freqüències de tall quan el guany disminueix 3dBs (la meitat) són: freqüència de tall del filtre passaalt (50.4 Hz) i freqüència de tall del filtre passabaix (4.48kHz). Amb el qual obtenim una amplada de banda de 4430 Hz.
74
Contestador telefònic (gravador i reproductor de veu).
Fig. 11.14 Sortida del circuit condicionador de senyal
Fig. 11.15 Diagrama de Bode del filtre antialiasing
Annexos
75
Annex B. Part III: Subsistema de gravació del missatge (RAM) B.1.
Objectius i requisits.
Aprendre a escriure i llegir en una memòria RAM (Random Access Memory). Trobar una memòria on puguem emmagatzemar el missatge. Com a requisit tenim que el missatge té que tindre una durada aproximada de 30 segons.
B.2.
Descripció del subsistema.
Aquest subsistema té la responsabilitat de guardar les mostres de l´ADC. Es a dir, el missatge. Per a tal tasca necessitem una memòria amb una capacitat aproximada de l’ordre de centenars de Kilobytes (1 Kbyte = 1024 x 8 bits). Degut a la poca quantitat de memòria RAM que disposa el µC (de l´ ordre de centenars, veure Fig. 2.3), ens veiem en la necessitat de dissenyar un sistema de memòria RAM extern (veure Fig. 11.16).
Fig. 11.16 Diagrama de blocs del subsistema RAM
Això vol dir que tenim que controlar via software l’accés a la RAM. Es a dir, tenim que implementar el bus d’adreçament, el bus de control i el bus de dades (veure Fig. 11.17).
Fig. 11.17 Diagrama dels busos del subsistema RAM
76
B.3.
Contestador telefònic (gravador i reproductor de veu).
Desenvolupament del problema.
Les tasques que s’han seguit per afrontar aquesta part del projecte són: calcular el grandària de la RAM necessària (veure B.3.5), estudi previ dels perifèrics que intervenen per a la seva implementació, implementació d´ un petit disseny per a comprovar el funcionament correcte de cadascun d’ells, i finalment dissenyar el subsistema complet.
B.3.1. Estudi previ del/s perifèric/s que intervenen. Els perifèrics amb els quals treballarem son els ports d’entrades i sortides de dades (input/output) del µC. A continuació explicarem les seves característiques i els registres que intervenen per a treballar amb ells.
B.3.1.1. Perifèric PORT A. Aquest port ja es familiar per a nosaltres i no entrarem en detalls, només indiquem les referències on es pot trobar més informació sobre ell (veure A.3.1.1, Taula 11.2, Taula 11.1). B.3.1.2. Perifèric PORT C. Es tracta d’un registre de 8 bits bidireccional d’entrades i sortides digitals. Per a indicar el sentit de les dades binaries, s’utilitza el registre TRISC (veure Taula 11.11), on el valor de ‘1’ indica entrada i el valor de ‘0’ sortida. Alguns pins tenen doble funció (veure Taula 11.10). Nosaltres només el farem servir com a port de dades digitals. Taula 11.10 Funcions dels pins del port C
Annexos
77
Taula 11.11 Registres associats al port C
B.3.1.3. Perifèric PORT D. Aquest port ja es familiar per a nosaltres i no entrarem en detalls, només indiquem les referències on es pot trobar més informació sobre ell (veure A.3.1.2, Taula 11.3 i Taula 11.4). B.3.1.4. Perifèric PORT E. El port E es un registre de 8 bits però només estan disponibles tres pins, per tant, es un port de 3 línies. Aquestes poden ser entrades o sortides digitals, entrades analògiques o també poden ser entrades per a treballar en mode paral·lel amb un altre µC(veure Taula 11.12). La selecció del sentit de les línies en el cas del tipus digital es fa amb el registre TRISE (veure Taula 11.13). Com a variació respecte a altres registres d’altres ports, aquest també es fa servir per a seleccionar el mode de treball paral·lel i controlar l’estat del mateix. Taula 11.12 Funcions del port E
Taula 11.13 Registres associats al port E
78
Contestador telefònic (gravador i reproductor de veu).
B.3.2. Guia de configuració de la RAM (diagrama de flux). A continuació es facilita un diagrama de flux (veure Fig. 11.18) on es mostra els passos que s’han d’efectuar per a llegir o escriure a una memòria RAM externa. Això no vol dir que sigui suficient, ja què cada dispositiu RAM de cada fabricant, pot afegir pins donant un valor afegit al propi dispositiu. Però les potes principals (CS, RD, WR, address bus, data bus) estan present a totes les memòries.
Annexos
79
Fig. 11.18 Diagrama de flux de la tiny RAM
80
Contestador telefònic (gravador i reproductor de veu).
B.3.3. Comunicació amb la RAM. Primer contacte. A continuació es facilita un programa que té com a objectiu mostrar com s’escriu i llegeix a una memòria RAM. El comportament del mateix està indicat al diagrama de flux (veure Fig. 11.19), seguidament del codi en llenguatge C. El circuit de prova utilitzat correspon a la figura Fig. 11.20 B.3.3.1. Diagrama de flux del programa de comunicació amb la RAM. Aquest programa grava a la RAM un byte des de l’adreça 0x00 fins a la 0x0F i després els llegeix en ordre invers (de la 0x0F fins a la 0x00). Per a tal tasca hem creat dues funcions que facin aquesta feina, llegir i escriure.
Annexos
81
Fig. 11.19 Diagrama de flux del programa de comunicació amb la RAM
82
Contestador telefònic (gravador i reproductor de veu).
B.3.3.2. Disseny del circuit per a provar la RAM. A la figura Fig. 11.20 es mostra el circuit utilitzat per a provar la comunicació amb una memòria RAM. El model fet servit es genèric i per això no s’ha detallat les característiques del propi dispositiu. Només podem indicar què es tracta d’un model amb una capacitat de 64Kilobytes. A més indicar que les línies de control (CS, RD i WR) són actives a nivell baix.
Fig. 11.20 Disseny del circuit per a provar la RAM
B.3.3.3. Codi font del programa de comunicació amb la RAM. El programa està format pels fitxers: main_tiny_ram.c (Fitxer 11.6), tiny_ram.c (Fitxer 11.7) i tiny_ram.h (Fitxer 11.8). /* File:main_ram.c Descripció:Amb aquest programa volem saber quin es el procediment per a guardar dades a una memòria RAM. */ #include #include "tiny_ram.h" void main(void) { unsigned char address;//adreça de la RAM. unsigned char octet;//dada
setup_pic(); for(;;) { address=0x00;//adreça de la RAM.
Annexos
83
//escrivim a la ram des de la posició 0x00 fins a la 0x0F do{ write(address); address++; }while(address > 16)) 16)) 8);//high while(STAT_BF||STAT_RW); while(ACKSTAT);
Annexos
109
SSPIF = 0; SSPBUF = (unsigned char)(eeprom_address);//low while(STAT_BF||STAT_RW); while(ACKSTAT); RSEN = 1; while(RSEN); SSPIF = 0; //ara l’hi diem a la EEPROM que volem llegir(RW=1). SSPBUF = ((unsigned char)(((eeprom_address >> 16))= RAM_SIZE) || (eeprom_address >= I2C_EEPROM_SIZE)) break; } EEPROM_EMPTY = FALSE;//la EEPROM ara conté el missatge. len_msg=len_msg_tmp; } /* Aquesta funció reprodueix el missatge des de la RAM. A velocitat del timer2, es a dir Fsampling. */ void play_from_ram(void){ unsigned long len_msg_tmp;
148
Contestador telefònic (gravador i reproductor de veu).
len_msg_tmp=len_msg; /* Reproducció des de la RAM i abans de ser gravat el missatge a la EEPROM. */ if(!PLAYED && EEPROM_EMPTY) ; /* Fem el bolcat si la RAM no conté el missatge. D’aquesta manera no sempre es fa el bolcat EEPROM -> RAM. */ else if(!MSG_ON_RAM){ eeprom_to_ram(); MSG_ON_RAM=1;//la pròxima vegada no es farà. NO_MSG = 1;//ataca un LED. #ifndef DUMMY_RUN FULL_RAM = FALSE; ALARM=0; #endif } //Reproducció del missatge (Fsampling). ram_address=0; #ifdef DUMMY_RUN TOGGLE_KEY=1;//exclusió mútua. #endif while(len_msg >= 1){ ei();//GIE=1. } di();//GIE=0 len_msg=len_msg_tmp; OE_DAC=0;//disable. } /* Funció que realitza el bolcat de la EEPROM a la RAM. Es a dir, el missatge es copia a la RAM. */ void eeprom_to_ram(void){ eeprom_address=0; ram_address=0; /* Llegim tota la EEPROM i dintre d’aquesta (sequential_read()) es fa l’escriptura a la RAM. */ i2c_setup(); setup_ram_buses(); i2c_read_eeprom(); }
Fitxer 11.17 core.c /* File:global.c Descripció: Aquest arxiu les variables globals. */ #include "global.h"
conté les definicions de
eeprom unsigned char EEPROM_EMPTY = 1;//flag indicador d´EEPROM buida. unsigned char FULL_RAM = 0;//flag indicador de RAM completa. #ifdef DUMMY_RUN//simulació gràfica. extern unsigned char TOGGLE_KEY=0;//exclusió mútua #endif unsigned char FIRST_TIME=1;//flag.
Annexos
149
unsigned char MSG_ON_RAM=0;//flag, evitem de fer sempre el bolcat EEPROM --> RAM. unsigned char PLAYED=0;//flag, indicatiu si s’ha reproduït el missatge. unsigned unsigned unsigned unsigned
long long long char
eeprom_address=0x00000000;//address pointer. ram_address=0x00000000;//address pointer. len_msg=0;//longitud del missatge en bytes (8 bits). octet=0;//variable temporal que conté una dada.
Fitxer 11.18 global.c /* Fitxer:isr.c Descripció: Aquest arxiu representa la definició de la rutina de servei d’interrupció del PIC. En ella només es fa el tractament del temporitzador TMR2. Aquest es el que controla el període de mostreig (Ts). */ #include #include "global.h" #include "adc.h" #include "myram.h" //interrupt es una paraula reservada (keyword) del compilador. void interrupt isr(void) { /***** TIMER 2 *****/ if((TMR2IE)&&(TMR2IF)) { TMR2IF=0;//esborrar el flag. #ifdef DUMMY_RUN if(!RECORD && !TOGGLE_KEY){ #else if(!RECORD){ #endif //comencem la captura del missatge. RC2=1;//Fsampling //agafem una mostra. octet=get_adc(); //guardem la mostra a la RAM. write_ram(); RC2=0;//Fsampling } #ifdef DUMMY_RUN else if (!PLAY && TOGGLE_KEY){ #else else if (!PLAY){ #endif OE_DAC=0;//output enable del DAC. setup_ram_buses(); read_ram(); //Desprès de llegir de la RAM el sentit es input. TRISD=0; DATA_BUS=octet;//enviem la mostra al DAC. OE_DAC=1; } } }
Fitxer 11.19 isr.c /*
150
Contestador telefònic (gravador i reproductor de veu).
Fitxer:init.c Descripció: Aquest arxiu conté la configuració global del PIC que no varia durant tota l’execució de l’aplicació. */ #include /* Funció d’inicialització dels perifèrics. En aquesta funció es inicialitza tot allò que no canvia durant l’execució de l’aplicació. */ void init_pic(void) { /* * Permís d’interrupció dels perifèrics(PEIE=1). * GIE=0. */ INTCON = 0b01000000; /* * * * */
Configuració del registres pel timer2. seguint recomanacions del fabricant, reset i assignació dels valors.
T2CON=0;//reset TMR2=0;//reset TMR2IF=0;//esborrem el flag. Registre PIR1 TMR2IE=1;//habilitació de la interrupció. Registre PIE1 PR2=0x0f9;//activa el flag en el següent clock LOAD-1. T2CON=0;//postscale=1:1, tmr shut-off, prescale=1:1. TMR2ON=1;//a contar.... /*Configuració del port C. ************************* Tenim dos polsadors PLAY i RECORD. I la sortida del output enable del DAC(OE_DAC). */ TRISC=0b11011000; RC2=0;//OE_DAC. RC1=0;//ataca el LED NO_MSG a la RAM. }
Fitxer 11.20 init.c /* Fitxer:i2c_eeprom.c Descripció: Conté les definicions del mòduls per a treballar amb la memòria EEPROM del nostre sistema mitjançant l’ús del bus I2C. */ #include #include "global.h" #include "i2c_eeprom.h" #include "myram.h" #include "delay.h" /* Aquesta funció configura el PORTC per a fer servir el mòdul CP. També configurem els registres necessaris per a utilitzar el mode I2C. */ void i2c_setup(void) { TRISC=0x18;//configuració del PORT C(RC4:RC3 com a entrades).
Annexos
151
//configuració del registre SSPCON SSPEN=1;//activem el mòdul CP. SSPM3=1;//master mode amb el clock intern, no confondre amb firmware master mode. SSPM2=0; SSPM1=0; SSPM0=0; //configuració del clock (i2c BitRate).SSSPADD=((FOSC/BIT RATE)/4)-1 SSPADD=I2C_CLOCK; //configuració del registre SSPSTAT. STAT_SMP=0;//slew rate activat quan es treballa amb 400kHz. STAT_CKE=0;//no volem compatibilitat amb el bus SMB. //reset del registre SSPCON2 SSPCON2=0;//un reset manual no posa tots els bits a cero. Només el POR. } /* Aquesta funció comprova que el bus estigui lliure de transmissions. RW=1 transmissió en progrés. SSPCON2, comprovació de: ACKEN(enviament de l´ack o nack). RCEN(recepció de dades, from slave to master). PEN(start condition) RSEN(re-start condition) SEN(start condition) */ void i2c_idle(void) { while ((STAT_RW) | ((SSPCON2 & 0x1F )!=0) ){}; } /* Aquesta funció escriu a la EEPROM. El mode d’escriptura es en mode byte a byte. */ void i2c_write_eeprom(void) { i2c_reset_sequence();//per si de cas hi ha un xip a la virola. SSPIF=0;//interrupt flag. i2c_select_slave(I2C_WRITE);//selecció del xip EEPROM. SSPBUF=octet;//dada a gravar-hi(provenen de la RAM). while(STAT_BF || STAT_RW);//encara n’hi han bits al buffer. while(ACKSTAT);//esperem ACK del slave. SSPIF=0; i2c_idle();//comprovem que el bus i2c estigui lliure. PEN=1;//stop condition. while(PEN);//stop en curs. SSPIF=0; eeprom_address++;//increment per a byte emmagatzemat DelayMs(1);//temps de gravació. Twc } /* Aquesta funció fa la lectura de la EEPROM en mode seqüencial d’un nombre de bytes determinat per 'restore'. Per a cada byte que rep el master del slave, respon amb un ACK si vol rebre més bytes, o en el cas contrari(l’últim)el master respon amb un NAK i tanca amb un PEN(stop condition). */ void i2c_sequential_read(unsigned short restore) { unsigned short i;//si la EEPROM es major de 64K //aquesta var ha de ser u_int.
152
Contestador telefònic (gravador i reproductor de veu).
SSPIF=0; len_msg=0;//si s’escriu a la RAM, abans rst. //llegim 'restore' bytes de la EEPROM. for(i = 0; i < restore; i ++) { RCEN = 1;//eh!! slave vull rebre. while(RCEN); //PORTD = octet = SSPBUF;//byte rebut. octet = SSPBUF;//byte rebut. write_ram();//aprofitem el mode seqüencial. if(i < (restore - 1))//si no és l’últim byte. ACKDT = MORE_BYTE;//(0) else ACKDT = LAST_BYTE;//(1). ACKEN = 1;//enviem l´ack o nack. while(ACKEN); } PEN = 1;//stop condition..fins un altre. while(PEN); SSPIF=0; } /* Aquesta funció envia el byte de control i l´ adreça de memòria on volem començar a llegir o escriure. El paràmetre que rep es el tipus de operació a fer-hi, llegir o escriure. En el cas de lectura es té que fer un Re-Start.(RSEN=1). El byte de control està format de la següent manera: control byte = 1010+SLAVE ADDRESS+RW El 'word address' el tenim que treure de l’adreça general(eeprom_address). Els dos bytes LSBs de la variable eeprom_address formen el 'word address', i el LSB byte dels dos bytes Cps forman el 'slave address'. address= (MSB)00000 a2a1a0 ad15....ad0 ad[0..15]=rang d’adreces de la EEPROM. a2,a1 i a0=slave address. */ void i2c_select_slave(unsigned char erb) { //ack polling per a evitar implementar el write cycle time. do{ i2c_idle(); SSPIF=0; if(STAT_S){ RSEN=1;//re-start condition. while(RSEN); } else{ SEN=1;//start condition. while(SEN); } /* enviem el byte de control, 0xA0 = EEPROM I2C_ID. el tipus d’operació i l’adreça del slave. */ SSPBUF= ((unsigned char)(((eeprom_address >> 16)) 8);//enviem high address while(STAT_BF||STAT_RW);//si no esperem hi haurà col·lisió. SSPIF=0; while(ACKSTAT);
Annexos
153
SSPBUF=(unsigned char)(eeprom_address);//low address SSPIF=0; while(STAT_BF||STAT_RW); while(ACKSTAT); SSPIF=0; //en funció del valor de erb, l’usuari voldrà llegir o escriure a la EEPROM. if(erb==I2C_READ){ RSEN=1;//Re-start condition. while(RSEN);//esperem que termini. /*Tenim que tornar a enviar un altre byte de control amb el bit RW=1, perquè volem llegir. */ SSPBUF=((unsigned char)(((eeprom_address >> 16))0 ){ i2c_select_slave(I2C_READ); i2c_sequential_read(EEPROM_SIZE_UNIT);//64K eeprom_address+=EEPROM_SIZE_UNIT; bytes_read+=EEPROM_SIZE_UNIT; n_xips--; } else{ i2c_select_slave(I2C_READ); i2c_sequential_read(remainder); eeprom_address+=remainder; bytes_read+=remainder; } }while((eeprom_address < I2C_EEPROM_SIZE) && (bytes_read < len_msg)); } /* Funció per a treure d’algun estat infinit o de bloqueig als dispositius I2C. Recomanació del datasheet de Microxip. */ void i2c_reset_sequence(void) { i2c_idle(); SSPIF=0; SEN=1; while(SEN);
154
Contestador telefònic (gravador i reproductor de veu).
SSPIF=0; SSPBUF=0xFF;//envia 9 cicles a '1'. while(STAT_RW || STAT_BF); RSEN=1; while(RSEN); PEN=1; while(PEN); }
Fitxer 11.21 i2c_eeprom.c /* File:myram.c Descripció: Aquest arxiu conté les definicions dels mòduls que ens permet de llegir i escriure a la RAM del sistema. */ #include "myram.h" #include "global.h" /* Aquesta funció configura els ports PORTA, PORTB, PORTD i PORTE per a utilitzar-los com a busos del sistema per accedir a la RAM. */ void setup_ram_buses(void) { //Tenim que definir el tipus(digital) d’entrada del PORT A/E. ADCON1=0b00001110; //AN0 es l’entrada de l´ADC. La resta són línies de control i adreces. TRISA=0b00000001; //deixem les línies de control inactives(disable). iRD=1; iWR=1; iCS=1; PORTB=0x00; TRISB=0x00; PORTD=0x00;
//LOW_ADD BUS, part baixa del address bus. //output //HIGH_ADD BUS (part alta del address bus) // i DATA BUS(seleccionat pel latch).
TRISD=0X00; PORTE=0x00; TRISE=0x00;
//output //línies d’adreces A16,A17,A18 //output
} /* Aquesta funció escriu a la RAM. */ void write_ram(void) { //comprovem que la adreça està dintre dels límits. if(ram_address >= RAM_SIZE) return; else { iCS=1;//disable latch decoder. ALE=0;//address latch enable.Actiu a nivell alt. iWR=1;//disable. TRISD=0x00;//(output). split_ram_address();//posem l’adreça a l´address bus. ALE=1;//carreguem l’adreça. ALE=0; iCS=0;//load latch decoder !iCS=lògica negativa. iCS=1;//disable latch decoder. DATA_BUS=octet;//posem la dada al data bus. iWR=0;//!WR=actiu. iWR=1;
Annexos
155
ram_address++; len_msg++;//increment de la grandària del missatge. //Posar aquesta condició per a fer simulació gràfica. #ifdef DUMMY_RUN if(len_msg >= 100){ FULL_RAM= TRUE; ALARM=1; } #endif //comprovem si la RAM s’ha omplert. if(ram_address == RAM_SIZE){ ALARM=1;//no hi ha més espai en RAM. FULL_RAM=1; } } } /* Aquesta funció llegeix de la RAM. Per a carregar l’adreça l´address bus fem servir la funció split_ram_address(). */ void read_ram(void) { //comprovem que la adreça està dintre dels límits. if(ram_address >= RAM_SIZE) return; else { iCS=1;//disable latch decoder. ALE=0;//disable. iRD=1;//disable. TRISD=0x00;//(output). split_ram_address();//col·loquem la direcció al bus. ALE=1;//carreguem el latch. ALE=0; iCS=0;//enable latch decoder. iCS=1;//disable decoder TRISD=0xFF;//canviem el sentit del PORT D (input). iRD=0;//enable. llegim el byte de la RAM. octet=DATA_BUS; iRD=1; ram_address++; len_msg--; } } /* Aquesta funció agafa la variable ram_address de tipus u_long i treu la part baixa(first byte lsb), i la part alta(second byte lsb)de la adreça. També carreguem els bits Cps(A16,A17 i A18) de l’adreça. */ void split_ram_address(void) { LOW_ADD = (uchar)ram_address;//first byte lsb.PORTC HIGH_ADD = (uchar)(ram_address >> 8);//second byte LSB.PORTD PORTE=((uchar)(ram_address >> 16));//agafem els tres bits MSB(A16,A17,A18). }
Fitxer 11.22 myram.c /* File:core.h Descripció: Conté els prototips de les funcions que es fan servir a l’aplicació. */ #ifndef _CORE_H
156
Contestador telefònic (gravador i reproductor de veu).
#define _CORE_H extern void ram_to_eeprom(void); extern void eeprom_to_ram(void); extern void play_from_ram(void); #endif
Fitxer 11.23 core.h
/* File:global.h Descripció:Aquest arxiu conté les variables globals i definicions de macros. */ #ifndef _GLOBAL_H #define _GLOBAL_H #include #define FALSE 0 #define TRUE 1 #define DUMMY_RUN
//simulació gràfica. No interactiva PICUSER.
#define PORTBIT(PORT,BIT) (unsigned)&PORT*8+BIT; eeprom extern #ifdef extern #endif
extern unsigned char EEPROM_EMPTY;//flag EEPROM buida unsigned char FULL_RAM;//flag RAM completa. DUMMY_RUN unsigned char TOGGLE_KEY;//flag per a simulació gràfica.
extern unsigned char FIRST_TIME;//flag extern unsigned char MSG_ON_RAM;//flag indicador que la RAM conté el missatge. extern unsigned char PLAYED;//flag indicador que l’usuari a reproduït el missatge abans de gravar-lo. static volatile bit missatge a la RAM. static volatile bit static volatile bit missatge. static volatile bit reproducció. extern extern extern extern #endif
unsigned unsigned unsigned unsigned
NO_MSG @
PORTBIT(PORTC,1);//indicador de que no hi ha
OE_DAC @ PLAY @
PORTBIT(PORTC,5);//output enable del DAC. PORTBIT(PORTC,6);//polsador per a gravar el
RECORD @
PORTBIT(PORTC,7);//polsador per a la
long long long char
eeprom_address;//address pointer. ram_address;//punter per a direccionar la RAM. len_msg;//longitud del missatge en bytes. octet;//mostra, dada, byte de la RAM/EEPROM/ADC.
Fitxer 11.24 global.h /* file:i2c_eeprom.h Descripció:declaració de macros i definició del clock del bus i2c. */#ifndef _I2C_EEPROM_H_ #define _I2C_EEPROM_H_ #include #define I2C_EEPROM_SIZE
0x80000
#define EEPROM_SIZE_UNIT
//grandària de la EEPROM total //del sistema. 65536 //grandària d’un xip.64K or 0x10000
#define I2C_READ #define I2C_WRITE
0x01 0x00
//bit de lectura. Protocol I2C. //bit d’escriptura. Protocol I2C.
Annexos
157
#define LAST_BYTE #define MORE_BYTE
1 0
#define I2C_BITRATE #define XTAL_FREQ #define I2C_CLOCK carregar al SSPADD.
400000 //400 kHZ. BitRate del bus I2C. 20000000 //FOSC (((XTAL_FREQ/I2C_BITRATE)/4) -1) //valor a
extern extern extern extern extern extern extern extern #endif
void void void void void void void void
//S’envia NACK. Protocol I2C. //s’envia ACK. Protocol I2C.
i2c_idle(void); i2c_setup(void); i2c_read_eeprom(void); i2c_read_byte_eeprom(void); i2c_write_eeprom(void); i2c_select_slave(unsigned char); i2c_reset_sequence(void); i2c_sequential_read(unsigned short);
Fitxer 11.25 i2c_eeprom.h /* File:myram.h Descripció: Conté els prototips de les funcions del mòdul de la RAM del sistema. També n’hi han definides variables i línies de control de la RAM. */ #ifndef _MYRAM_H #define _MYRAM_H #include #include #define RAM_SIZE 0x80000 //grandària de la RAM del sistema.64K x 8 xips. #define PORTBIT(PORT,BIT) (unsigned)&PORT*8+BIT; static volatile uchar LOW_ADD static volatile uchar HIGH_ADD static volatile uchar DATA_BUS HIGH_ADD).
@ @ @
0x06;//PORTB part baixa de l’adreça. 0x08;//PORTD part alta de l’adreça. 0x08;//PORTD data bus.(comparteix amb
static volatile bit iWR actiu). static volatile bit iRD actiu).
@
PORTBIT(PORTA,1);//write bit(!WR,
@
PORTBIT(PORTA,2);//read bit(!RD,
static volatile bit iCS l´address decoder. static volatile bit ALARM @ d’espai. static volatile bit ALE enable.
@
PORTBIT(PORTA,3);//latch enable de
static volatile bit A_16 static volatile bit A_17 static volatile bit A_18
@ @ @
PORTBIT(PORTA,4);//LED indicador de falta @
PORTBIT(PORTA,5);//address latch
PORTBIT(PORTE,0);//address bit. PORTBIT(PORTE,1); PORTBIT(PORTE,2);
void setup_ram_buses(void); void split_ram_address(void); void write_ram(void); void read_ram(void); #endif
Fitxer 11.26 myram.h
158
Contestador telefònic (gravador i reproductor de veu).
Annex J. Estadístiques de compilació del sistema
Fig. 11.59 Estadístiques de la compilació del sistema global
Annexos
159
Annex K. Captura del funcionament del sistema
Fig. 11.60 Comprovació del funcionament del sistema global
160
Contestador telefònic (gravador i reproductor de veu).
Annex L. Memòria DS1250Y 4096k Nonvolatile SRAM
Annexos
Annex M.
161
Producte comercial del fabricant CEBEK
Fig. 11.61 Gravador/reproductor digital model C-9701
Fig. 11.62 Gravador/reproductor digital model TR-1
162
Contestador telefònic (gravador i reproductor de veu).
Annex N. Memòria DS1270Y 16M Nonvolatile SRAM
Annexos
Annex O. Memòria FM20L08 1M bytewide FRAM
163
164
Contestador telefònic (gravador i reproductor de veu).
Annex P. Memòria FM25256 256k Serial FRAM
Annexos
Annex Q. CODEC/Filter COMBO TP3064/TP3067
165
166
Contestador telefònic (gravador i reproductor de veu).
Annex R. Mono Audio CODEC AD74111
Annexos
Annex S. 5th-Order Lowpass Filters
167
168
Contestador telefònic (gravador i reproductor de veu).
Annex T. 8th-Order Lowpass Filters