Está en la página 1de 428

In clu ye CD-ROM

Diseo

prctico

de

aplicaciones

Jos Mara Angulo Usategui Aritza Etxebarra Ruiz Ignacio Angulo Martnez Ivn Trueba Parra

dsPIC Diseo Prctico de Aplicaciones

L T )

U i

S L 2 t x = M * l t l 2 2 L l ^ l 2 a c r / J W - V y . - V . Mit

s c 5

C ?- ;' V 3 :,V :-' " *& & * . P i , 'u t o

&W9I 0; '

,
-

iu i i ti'n *^

.- - !t; r.rm ~ .s a a w u w ^ ^ a > '.< w t m :

dsPIC Diseo Prctico de Aplicaciones


Jos M.a Angulo Usatcgui
Dr. Ingeniero Industrial Catedrtico de A rquitectura de Com putadores Universidad de D eusto

Aritza Etxebarra Ruiz


Licenciado en Inform tica Jefe del D epartam ento d e Inform tica C olegio Vizcaya

Ignacio Angulo Martnez


Licenciado en Inform tica Profesor del D epartam ento de A rquitectura de Com putadores U niversidad de D eusto

Ivn Trueba Parra


Ingeniero en A utom tica y E lectrnica Industrial e Ingeniero en O rganizacin Industrial Profesor del D epartam ento de A rquitectura de Com putadores U niversidad de D eusto

MADRID * BOGOT BUENOS AIRES CARACAS GUATEMALA LISBOA * MXICO NUEVA YORK * PANAM SAN JUAN SANTIAGO SAO PAULO

AUCKLAND * HAMBURGO LONDRES MILN MONTREAL NUEVA DELHI PARS SAN FRANCISCO SIDNEY SINGAPUR ST. LOUIS TOKIO TORONTO

Contenido

Prlogo

xv

Primera parte: ARQUITECTURA, FUNCIONAMIENTO Y REPERTORIO DE INSTRUCCIONES


Captulo 1. 1.1. 1.2. 1.3. 1.4. 1.5. EL M UNDO DE LOS D S P ..................................................................................... 3 3 5 7 8 9 10

El procesamiento digital de seales................................................................................ 1.1.1. Muestreo de las seales analgicas................................................................ . DSP. Definicin y caractersticas principales.............................................................. Microcontroladores y D S P ................................................................................................ DSP y D SC........................................................................................................................... Mercado y aplicaciones.....................................................................................................

Captulo 2. 2.1. 2.2. 2.3.

CONTROLADORES DIGITALES DE SEALES (DSC)............................

17 17 18 20 20 22 23 23 27 28 28 28 31
v

2.4. 2.5.

El concepto D S C ................................................................................................................ Caractersticas generales de los dsPIC30F..................................................................... Los modelos de la familia dsPIC 30F ............................................................................. 2.3.1. Dispositivos dsPIC30F de propsito general................................................. 2.3.2. Dispositivos dsPIC30F para el control de sensores....................................... 2.3.3. Dispositivos dsPIC30F para el control de motores y sistemas de alimentacin................................................................................................... Encapsulados y diagramas de conexiones.................................................................... La familia dsPIC 33F............................................................................................... .......... 2.5.1. M odelos de la familia d sP IC 3 3 F ..................................................................... 2.5.2. Dispositivos dsPIC33F de propsito general................................................. 2.5.3. Dispositivos dsPIC33F de control de motores y sistemas de alimentacin................................................................................................... 2.5.4. Diferencias entre dsPIC30F y dsPIC33F.......................................................

vi

CONTENIDO

2.6. 2.7. 2.8.

Herramientas de desarrollo software............................................................................. Herramientas de desarrollo hardware............................................................................ Aplicaciones recom endadas............................................................................................

31 32 34

Captulo 3. 3 .1. 3.2. 3.3. 3.4. 3.5. 3.6.

A R Q U ITEC TU R A DE LA C P U ...........................................................................

39 39 41 43 44 45 46

Descripcin del diagrama por bloques.......................................................................... Las m em orias.................................................................................................................... El Camino de D ato s......................................................................................................... Pueitas de E/S multifuncin............................................................................................ Perifricos integrados....................................................................................................... Gestin del sistema y de la energa...............................................................................

C ap tu lo 4. 4.1. 4.2. 4.3. 4.4.

E L C A M IN O DE D A T O S ...................................................................................

49 49 49 50 52 53 54 56 56 58 58 60 60 60 61 62 63 63

Introduccin................................................. ..................................................................... El banco de registros W .................................................................................................. La ALU de 16 bits............................................................................................................ El M otor D SP.................................................................................................................... 4.4.1. M ultiplicador....................................................................................................... 4.4.1.1. Representacin en modo entero y en modo fraccional.............. 4.4.2. Acumuladores A y B .......................................................................................... 4.4.3. Sumador/Restador de 40 bits............................................................................. 4.4.4. Registro de Desplazamiento.............................................................................. 4.4.5. Unidad de D ivisin............................................................................................. M A N IP U L A C I N D E DATOS EN E L M O T O R D S P ..................................... Representacin de datos.................................................................................... *............. Saturacin de los acum uladores..................................................................................... A.2.1. Saturacin norm al............................................................................................... A.2.2. Sper saturacin.................................................................................................. A.2.3. Saturacin de escritura..................................................................................... R edondeo....................................................*......................................................................

A nexo. A. 1. A.2.

A.3.

C aptulo 5. 5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.6.

M O D E L O D EL PR O C E SA D O R PARA E L P R O G R A M A D O R .............

65 65 67 67 68 69 70 71

Los registros del program ador....................................................................................... El banco de registros de trabajo..................................................................................... Registros som bra............................................................................................................... Punteros de la cima de la pila y del marco de la p ila ................................................. El registro de estado (S R )............................................................................................... El registro de control del ncleo (CORCON)............................................................. Otros registros de control.................................................................................................

CONTENIDO

C aptulo 6. 6.1. 6.2. 6.3. 6.4. 6.5.

LA M E M O R IA D E D A TO S.................................................................................

73 73 75 75 76 79

Los espacios de la memoria de d ato s.............................................................................. Direccionamiento de la memoria de datos..................................................................... Mapeado del espacio de datos en la memoria de program a....................................... Direccionamiento modular o circular............................................................................... Direccionamiento por inversin de acarreo o bit reverse ........................................

C aptulo 7. 7.1. 7.2. 7.3. 7.4. 7.5. 7.6. 7.7.

LA M E M O R IA D E P R O G R A M A ................. :...................................................

83 83 84 84 85 87 87 88 91

Estructura y distribucin................................................................................................... Direccionamiento mediante el PC ................................................................................... Transferencia de datos desde la memoria de program a.............................................. Las instrucciones de T ab la............................................................................................... Visibilidad del Espacio de Programa (P S V )................................................................. Grabacin de las memorias FLASH y E E PR O M ........................................................ 7.6.1. Autograbacin en tiempo de ejecucin (R TSP).............................................. Grabacin serie en circuito (IC PSIM ) ..............................................................................

C aptulo 8. 8.1. 8.2. 8.3. 8.4. 8.5. 8.6.

IN T E R R U P C IO N E S Y E X C E P C IO N E S .........................................................

93 93 93 96 99 100 100 101 101 101 102 104

8.7. 8.8.

Introduccin........................................................................................................................ Tabla de vectores IVT y A1VT de los dsP IC 30F ......................................................... Tabla de vectores IVT y AIVT de los dsP IC 33F ......................................................... Nivel de prioridad de la C P U ........................................................................................... Nivel de prioridad de las interrupciones........................................................................ Nivel de prioridad para las excepciones......................................................................... 8.6.1. Excepcin por Error A ritm tico...................................................................... 8.6.2. Excepcin por Error de P ila .............................................................................. 8.6.3. Excepciones por Error de Direccionamiento y Fallo del O scilador......... Procesamiento de las interrupciones.............................................................................. Registros de control y estado para las interrupciones.................................................

C aptulo 9.

CARA C T E R ST IC A S DE LA S IN ST R U C C IO N E S Y M OD O S D E D IR E C C IO N A M IE N T O ...............................................................................

109 109 110 112 113 114 114 114 115

9.1. 9.2. 9.3. 9.4. 9.5.

Caractersticas generales de las instrucciones.............................................................. Formato de las instrucciones................................................................................... *...... Tiempo de ejecucin de las instrucciones..................................................................... Modos de direccionamiento de la memoria de program a.......................................... 9.4.1. PSV: Visibilidad del Espacio de Programa (Program Space Visibility).... Modos de direccionamiento de los d ato s...................................................................... 9.5.1. Direccionamiento directo.................................................................................. 9.5.2. Direccionamiento directo por registro.............................................................

v iii

CONTENIDO

9.5.3.

9.6.

Direccionamiento indirecto por registro....................................................... 9.5.3.1. Representacin en modo entero y enmodo fraccional............... 9.5.4. Direccionamiento inm ediato........................................................................... Deteccin de dependencias............................................................................................

115 117 117 118

C aptulo 10.

E L R E P E R T O R IO DE IN STRU CC IO N ES. IN STR U C C IO N ES M CU...

119 119 119 122 123 125 127 129 131 133 135

10.1. Clasificacin de las instrucciones................................................................................. 10.2. Instrucciones de m ovim iento.............................. .......................................................... 10.3. Instrucciones lgicas....................................................................................................... 10.4. Instrucciones m atem ticas............................................................................................. 10.5. Instrucciones de rotacin y desplazamiento................................................................ 10.6. Instrucciones de b i t .......................................................................................................... 10.7. Instrucciones de comparacin y brinco......................................................... .............. 10.8. Instrucciones de control del flujo del program a......................................................... 10.9. Instrucciones de pila y registros som bra..................................................................... 10.10. Instrucciones de control...................................................................................................

C aptulo 11.1. 11.2.

11.

LA S IN ST R U C C IO N ES D S P ...........................................................................

139 139 140 142 143 144 145 145 145 146 147 147 148 148 148 149

Caractersticas especficas.............................................................................................. Operaciones bsicas con los acumuladores................................................................. 11.2.1. Suma de acumuladores (ADD)........................................................................ 11.2.2. Resta de acumuladores (SUB)......................................................................... 11.2.3. Borrado de los acumuladores (CLR)............................................................. 11.2.4. Negacin del acumulador (N E G )................................................................... 11.2.5. Multiplicacin de registros y carga al acumulador (MPY y M PY.N)).... 11.2.6. La distancia eucldea (ED y E D A C )............................................................. 11.2.7. Multiplicacin de registros y resta al acumulador (M S C )........................ 11.3. Instrucciones de carga y almacenamiento de los acum uladores............................... 11.3.1. Carga del acumulador (L A C )......................................................................... 11.3.2. Almacenamiento del acumulador (S A C )..................................... ............... 11.3.3. Prebsqueda de operandos y almacenamiento del acumulador (M O V SA C )............................................................................ 11.4. Desplazamiento de los acum uladores.......................................................................... 11.5. Instrucciones tipo MAC .............................................................................................

C aptulo

12.

P E R IF R IC O S Y R EC U R SO S IN T E G R A D O S ......................................

151 151 151 156 157 158

12.1. El mundo que rodea a los D S C ..................................................................................... 12.2. Patitas de E /S .................................................................................................................... 12.3. Tem porizadores................................................................................................................ 12.4. Conversores A D ...................................... .......................................................................... 12.5. M dulo de cap tu ra............................................................................................................

CONTENIDO

12.6. Mdulo de com paracin/PW M ....................................................................................... 12.7. M dulo PW M para el control de m otores..................................................................... 12.8. M dulo U A R T ................................................................................................................... 12.9. Mdulo S P I ........................................................................................................................ 12.10. Mdulo 12C .......................................................................................................................... 12.11. Mdulo D C I....................................................................................................................... 12.12. Mdulo C A N ...................................................................................................................... 12.13. Mdulo Q E I....................................................................................................................... 12.14. El Perro Guardin (WDT) y los modos de bajo con su m o ......................................... 12.15.El controlador D M A .....................................................'...................................................

159 160 161 162 163 164 164 165 167 167

S e g u n d a p a r te : P R O G R A M A C I N Y S IM U L A C I N D E A P L IC A C IO N E S A plicacin 0. LAS H ERRA M IEN TA S DE D E S A R R O L L O ............................................. 175 175 175 176 176 177 177 178 178 179 179

A0.1. Introduccin....................................................................................................................... A0.2. Descripcin del dsPIC30F4013 ...................................................................................... A 0.2.1. Diagrama de conexionado................................................................................ AO.2.2. Caractersticas principales................................................................................ A0.3. Herramientas de software utilizadas.............................................................................. AO.3.1. El entorno de desarrollo MPLAB ID E............................................................. AO.3.2. El compilador de C MPLAB C 30.................................................................... A0.3.3. Herramienta de diseo de filtros dsPICFdLite................................................ A0.3.4. Herramienta para el tratamiento de algoritmos de tratamiento de seales dsPICworks..................................................................... .................. A utoe valuacin..............................................................................................................................

A plicacin 1.

D ISE A N D O F I L T R O S ....................................................................................

181 181 181 181 182 186 190 196

A 1.1. Introduccin....................................................................................................................... A l .2. El plan de trab ajo .............................................................................................................. A 1.3. El problem a........................................................................................................................ A 1.4. Analizando la se al........................................................................................................... A l.5. Filtrando la seal............................................................................................................... A 1.6. Generando la seal sin ruido........................................................................................... A utoevaluacin..............................................................................................................................

A plicacin 2.

E L E N TO R N O D E D E S A R R O L L O M PLA B I D E ...................................

197 197 197 197 201 209 212

A 2.1. Introduccin....................................................................................................................... A2.2. Trabajando con proyectos................................................................................................ A2.3. Un vistazo rp id o .............................................................................................................. A2.4. Primer proyecto en ensamblador.................................................................................... A2.5. Primer proyecto en lenguaje C ........................................................................................ Autoevaluacin..............................................................................................................................

CONTENIDO

A plicacin 3.

P O N IE N D O EN M A R C H A E L S IM U L A D O R .........................................

215 215 215 216 217 219 220 221 224

A3.1. Introduccin....................................................................................................................... A3.2. Simulando el primer programa en ensam blador......................................................... A3.2. L. Explorando la memoria de program a............................................................. A3.2.2. Estableciendo puntos de ruptura y ventanas de inspeccin........................ A3.2.3. Resolviendo el ejercicio del tema anterior.................................................... A3.3. Caractersticas del sim ulador.......................................................................................... A3.3.1. Configurando el simulador y contando el tiem p o ....................................... A utoevaluacin.................................................................. ...........................................................

Aplicacin 4.

M A N EJA N D O LAS IN ST R U C C IO N ES TPIC A S DE LOS dsP IC ....

225 225 225 226 231 232

A 4.1. Introduccin....................................................................................................................... A4.2. Manejo de instrucciones de salto en ensam blador...................................................... A4.3. Manejo de instrucciones DSP. Inicial aciones............................................................ A4.3.1. Otras formas de inicializar los program as..................................................... A utoevaluacin..............................................................................................................................

Aplicacin 5.

LEY EN D O Y ESC R IB IEN D O LAS M EM O R IA S FLA SH Y E E P R O M ...........................................................................................................

233 233 237 241

A5.1. Manej ando la memoria de programa FL A SH .............................................................. A5.2. M anejando la memoria de datos EEPR O M ................................................................. Autoevaluacin..............................................................................................................................

Aplicacin 6.

PR O G R A M A N D O LOS P E R IF R IC O S CO N VISUAL IN IT IA L IZ E R ......................................................................................................

243 243 243 247 250 255 258

A 6.L Introduccin....................................................................................................................... A6.2. Visual Initializer................................................................................................................ A6.3. Controlando el mundo exterior. Puertas de E /S .......................................................... A6.4. M anejo de temporizadores. El semforo....................................................................... A6.5. M anejo de interrupciones. El semforo con pulsador................................................ Autoevaluacin..............................................................................................................................

A plicacin 7.

P E R IF R IC O S A V A N ZA D O S........................................................................

259 259 259 261 261

A7.1. Introduccin....................................................................................................................... A7.2. El Motor D SP..................................................................................................................... A7.3. Conversor analgico digital............................................................................................ A 7.3.L Descripcin del mdulo de Conversin Analgico Digital de 12 b its .............................................................................................................

CONTENIDO

xi

A7.3.2. Trabajando con el m dulo................................................................................ A7.4. Comunicaciones U A R T ................................................................................................... A7.5. M dulo de captura de entrada......................................................................................... A7.6. Mdulo de comparacin de sa lid a ................................................................................. A7.7. Consideraciones finales.................................................................................................... A utoevaluacin.............................................................................................................................. A pndice A.

262 266 269 271 274 274

C O N T E N ID O D EL CD E IN STA LA C I N D E LAS H ER R A M IEN TA S DE T R A B A JO ........................................................................................................ 275 S O L U C IO N E S A LO S E JE R C IC IO S DE AUTOEVA LU ACI N ......... 281

A pndice B.

T e rc e ra p a r te : L aboratorio 0.

L A B O R A T O R IO E X P E R IM E N T A L E L SISTEM A DE D ESA R R O LLO P IC S c h o o l...................................... 299 299 300 302 302 303 304 304 305 306 307 309 310 310 312 313 314 315 316 317 318

L0.1. Introduccin....................................................................................................................... L0.2. El fabuloso liPlC School ................................................................................................ L0.3. Arquitectura de PIC School............................................................................................ L0.3.1. Fuente de alimentacin...................................................................................... LO.3.2. El oscilador.......................................................................................................... L0.3.3. Los microcontroladores..................................................................................... LO.3.4. Entradas analgicas........................................................................................... LO.3.5. Entradas digitales............................................................................................... LO.3.6. El generador l g ico ........................................................................................... LO.3.7. El teclado............................................................................................................. L0.3.8. Salidas digitales.................................................................................................. L0.3.9. Salidas digitales de alta corriente.................................................................... L0.3.10. Interfaz serie RS-232......................................................................................... LO.3.11. Interfaz bus CAN................................................................................................ L0.3.12. Pantalla L C D ....................................................................................................... L0.3.13.Conectores para interfaz R J11 y U S B ............................................................ LO.3.14. Seccin de grabacin......................................................................................... LOA El mdulo dsPIC para la PIC School............................................................................. L0.5. Descripcin del software............................................................................................ . L0.5.1. Software W IN PIC 800.......................................................................................

L aboratorio 1.

A P L IC A C I N DE IN ST R U C C IO N E S DSP CO N ENTRADAS Y SA LIDA S D IG ITA LES ..............................................................................

323 323 324 326 326 329

L l .l. L1.2. L1.3. L1.4. L1.5.

O bjetivos............................................................................................................................. Descripcin del laboratorio.............................................................................................. Esquema electrnico......................................................................................................... Construccin del program a............................................................................................. Conexin de los perifricos.............................................................................................

x ii

CONTENIDO

L1.6. Grabacin y ejecucin...................................................................................................... L1.7. Librera m atem tica..........................................................................................................

330 331

L ab o ra to rio 2.

M A N EJA N D O A FO N D O L O S T E M P O R IZ A D O R E S D E 32 B IT S ..........................................................................................................

333 333 333 334 335 340 340

L 2.1. L2.2. L2.3. L2.4. L2.5. L2.6.

O bjetivos............................................................................................................................ Descripcin del laboratorio............................................................................ ................ Esquema electrnico............................................. J ........................................................... Construccin del program a............................................................................................. Conexin de los perifricos............................................................................................. Grabacin y ejecucin......................................................................................................

Laboratorio 3.

OPTIMIZANDO LA CONVERSIN ANALGICO/DIGITAL DE ALTA PR EC ISI N ....................................................................................

343 343 344 345 346 348 348

L3.1. L3.2. L3.3. L3.4. L3.5. L3.6.

O bjetivos............................................................................................................................. Descripcin del laboratorio............................................................................................. Esquema electrnico........................................................................................................ Construccin del program a............................................................................................. Conexin de los perifricos............................................................................................. Grabacin y ejecucin......................................................................................................

L ab o ra to rio 4. L4.1. L4.2. L4.3. L4.4. L4.5. L4.6.

C O M U N IC A C I N EN CRIPTA DA CON E L U SA R T ...........................

351 351 352 353 353 355 355

O bjetivos............................................................................................................................. Descripcin del laboratorio............................................................................................. Esquema electrnico......................................................................................................... Construccin del program a............................................................................................. Conexin de los perifricos.............................................................................................. Grabacin y ejecucin......................................................................................................

L ab o rato rio 5. L5.1. L5.2. L5.3. L5.4. L5.5. L5.6.

C O N T R O L DE UN M O T O R DE CC M ED IA N TE P W M ...................

359 359 360 360 362 362 364

O bjetivos............................................................................................................................. Descripcin del laboratorio............................................................................................. Esquem a electrnico......................................................................................................... Conexin de los perifricos............................................................................................. Creacin del program a..................................................................................................... Grabacin y ejecucin del p ro g ram a.............................................................................

CONTENIDO

Xlll

L aboratorio 6. L6.1. L6.2. L6 3 . L6.4. L6.5. L6.6.

D ISE A N D O F IL T R O S .................................................................................

367 367 367 368 369 369 371

O bjetivos............................................................................................................................. Descripcin del laboratorio.............................................................................................. Esquema electrnico......................................................................................................... Conexin de los perifricos.............................................................................................. Creacin del program a..................................................................................................... Grabacin y ejecucin del program a.............................................................................

L aboratorio 7.

G RA B A N D O LA M E M O R IA F L A S H DE PR O G R A M A C O N UN B O O T L O A D E R ..............................................................................

375 375 375 377 377 377 381

L7.1. L7.2. L7.3. L7.4. L7.5. L7.6.

O bjetivos............................................................................................................................. Descripcin del laboratorio............................................................................................. Esquema electrnico......................................................................................................... Conexin de los perifricos............................................................................................. Construccin del program a.............................................................................................. Grabacin y ejecucin del program a.............................................................................

L aboratorio 8. L8.1. L8.2. L8.3. L8.4. L8.5. L8.6.

M A N EJA N D O A FON D O LA S IN T E R R U P C IO N E S ..........................

385 385 385 386 387 387 390

O bjetivos............................................................................................................................. Descripcin del laboratorio.............................................................................................. Esquema electrnico......................................................................................................... Conexin de los perifricos.............................................................................................. Construccin del program a.............................................................................................. Grabacin y ejecucin del program a.............................................................................

L ab o rato rio 9. L9.1. L9.2. L9.3. L9.4. L9.5. L9.6.

P n .O T A N D O UN F R M U LA 1 ...................................................................

393 393 394 395 395 396 403

O bjetivos............................................................................................................................. Descripcin del laboratorio.............................................................................................. Esquema electrnico......................................................................................................... Conexin de los perifricos.............................................................................................. Construccin del program a............................................................................................. Grabacin y ejecucin del program a.............................................................................

n d ic e ......................................................................................................................................................

405

Prlogo

dsPic es un nombre genrico que se utiliza para referirse a los Controladores Digitales de Sea les (DSC) que ha diseado Microchip Technology Inc. para facilitar a los usuarios de sus microcontroladores PTC la transicin al campo de las aplicaciones de los Procesadores Digitales de Se ales (DSP), que van a propiciar en los prximos aos un crecimiento espectacular en reas como las comunicaciones, los sensores, el procesamiento de la imagen y el sonido, el tratamiento mate mtico de seales* los sistemas de alimentacin, el control de motores, la electro medicina, los sis temas multimedia, la automocin e Internet. Los DSC son unos dispositivos que combinan la arquitectura y la programacin de los microcontroladores PIC de 16 bits con los recursos hardware y software necesarios para soportar las pres taciones fundamentales de los DSP. Microchip ha prestado una gran atencin al mantenimiento de la compatibilidad entre sus microcontroladores clsicos y los DSC. El medio centenar aproximado de modelos de DSC que se comercializan en la actualidad se re parten entre dos familias, llamadas dsPIC30F y dsPIC33F. Los autores de este libro, experimentados pedagogos de la Universidad de Deusto, han intenta do construir una herramienta sencilla y eficaz para poner en manos de todos los que conocen y ma nejan los microcontroladores clsicos, y especialmente los PIC, que les permita dominar en el m nimo tiempo a los dsPlC y as poderse introducir en las nuevas aplicaciones cuyos proyectos son ms exigentes y complejos. Por eso han escrito esta obra intentando que fuese la que a ellos les hu biese gustado encontrar cuando comenzaron el estudio de los dsPIC. El contenido se ha estructurado en tres partes: Primera Parte: Arquitectura, funcionam iento y repertorio de instrucciones Segunda Parte: Programacin y simulacin de aplicaciones Tercera Parte: Laboratorio experimental En la Primera Parte que consta de 12 captulos se hace una descripcin de las caractersticas, es tructura y funcionamiento de los bloques principales de la arquitectura del procesador, haciendo n fasis en las partes nuevas que se aaden a los dsPIC como el M otor DSP, las especiales organiza ciones de las memorias, los nuevos modos de direccionamiento, las instrucciones DSP, etc. Tambin se explican los perifricos y el manejo bsico del repertorio de instrucciones. Los conceptos teri cos comprenden a las familias dsPIC30F y dsPIC33F.
xv

xvi

PRLOGO

El objetivo de la Segunda Parte es adiestrar al lector a programar aplicaciones en Ensamblador y en C empleando nicamente las herramientas software que facilita libremente el fabricante y que pueden encontrarse, al igual que los archivos de los ejercicios, en el CD que incluye este libro. To do el conjunto de trabajos y prcticas que se proponen se desarrollan alrededor del entorno MPLAB IDE y con los programas de ayuda de Microchip, tales como el dsPICWork, VD1, dsPIC FD Lite, etctera. Esta parte se distribuye en 7 Aplicaciones que van recorriendo desde la instalacin y ma nejo de todo el software de desarrollo hasta la descripcin detallada de numerosos ejercicios y pro gramas. Al final de cada una de dichas aplicaciones el lector puede comprobar el nivel de asimila cin de los conceptos estudiados a travs de varios ejercicios de autoevaluacin. Esta parte incluye 2 apndices en los que el lector encontrar las soluciones a Jos ejercicios de autoevaluacin de ca da aplicacin y el contenido del CD con las instrucciones de instalacin de los programas. La tercera y ltima parte de la obra, que a los autores les parece la ms eficaz e interesante, ofre ce una coleccin de 9 proyectos de complejidad progresiva en los que desarrolla ntegramente el hardware y el software que los configuran. En todos se usa el dsPIC30F4013 y para su grabacin y conexionado con los perifricos que manejan las experiencias se ha escogido el sistema de desarro llo PIC School de Ingeniera de Microsistemas Programados (www.microcontroladorcs.com) dado su excelente diseo tcnico, su facilidad de manejo, su flexibilidad, el soporte tcnico que lo garan tiza y su bajo precio. Los proyectos que se resuelven son los recomendados para los dsPIC, como el encriptado de datos, el diseo de filtros, el tratamiento matemtico, el control de motores, el manejo y procesado de seales con potentes conversores AD, las comunicaciones con diversos protocolos, el gobierno de pantallas LCD, la simulacin de un blido de Frmula 1, etc. Los programas de todas estas experiencias se desarrollan en Ensamblador y en C y se incluyen en el CD. Microchip nos ha brindado toda la informacin y colaboracin que hemos precisado y muy es pecialmente D. Juan Gutirrez desde la sede central en Chandler (Arizona). Tambin el Sr. Bustamante de Sagitron nos ha aclarado y enseado m uchos conceptos y peculiaridades. La ayuda de D. Mikel Echevarra de Ingeniera de M icrosistemas Programados ha sido valiossim a para la puesta a punto de los proyectos realizados sobre la PIC School. Desde la empresa Biltron nos han ayudado a encontrar todos los componentes que hemos necesitado. Los excelentes alumnos de las asignaturas de Arquitectura e Ingeniera de Computadores y de Arquitectura de Computadores de la Facultad de Ingeniera ESI DE de la Universidad de Deusto nos han servido para probar y co rregir la estructura y el contenido del libro y nos han ayudado a revisar algunos tem as y mejorar esquemas, figuras y fotos de varios captulos. Tambin agradecemos la aportacin de Francisco Bcnach que es el creador del software libre WinPICSOO que se emplea en la PIC School. Los autores se han esforzado en crear el libro que a ellos les hubiese gustado encontrar cuando comenzaron el estudio y manejo de los dsPIC.

Marcas registradas
El nombre y logo de M icrochip , dsPIC, PIC, PICmicro, PICSTART, PICMASTER, PRO MATE y MPLAB son marcas registradas p or Microchip Technology Incorporated en EE. UU. y otros pases. dsPICDEM , dsPIC.net , ICSP.Tn-Circuit Serial Programming (Programacin Serie En Circuito), ICEPIC, MPASM, MPLIB, MPL1NK , MPSIM, PICC, PlCkit, PIC DEM y PICDEM .net son marcas registradas p or Microchip Technology Incorporated en EE. UU. y otros pases. Determinados materiales e informaciones contenidos en esta obra y en el CD que le acompaa han sido reproducidos con el permiso de Microchip Technology Incorporated. No se pueden reprodu cir ni reeditar dichos materiales sin el previo consentimiento escrito de Microchip Technology Inc. Las restantes m arcas, logos y productos m encionados en este libro estn registrados p o r sus respect i vos propietarios.

Primera parte
Arquitectura, funcionamiento y repertorio de instrucciones

Captulo 1 . Captulo 2. Captulo 3. Captulo 4. Anexo. Captulo 5. Captulo 6. Captulo 7. Captulo 8. Captulo 9.

EL M U N D O DE LOS DSP.............................................................................................. 3 CONTROLADORES DIGITALES DE SEALES (DSC)........................................ ARQUITECTURA DE LA CPU................................................................................ EL C A M IN O DE DATOS....................................................................................... M ANIPULACIN DE DATOS EN EL MOTOR DSP........................................ MODELO DEL PROCESADOR PARA EL PROGRAMADOR............................ LA MEMORIA DE DATOS..................................................................................... LA MEMORIA DE PROGRAMA............................................................................ INTERRUPCIONES Y EXCEPCIONES.................................................................. CARACTERSTICAS DE LAS INSTRUCCIONES Y M ODOS DE DIRECCIO NAM IENTO ...................................................................................... 109

17 39 49 60 65 73 83 93

Captulo 10. Captulo 11. Captulo 12.

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES M C U .................... 119 LAS INSTRUCCIONES DSP..................................................................................... 139 PERIFRICOS Y RECURSOS INTEGRADOS.......................................................... 151

1.1. EL PROCESAMIENTO DIGITAL DE SEALES

El mundo que nos rodea est caracterizado por contar con un gran nmero de seales analgicas o continuas que varan entre un valor mnimo y otro mximo pasando por infinitos valores. La tem peratura, la luz, la presin atmosfrica, la humedad relativa y la concentracin de C 0 2 en el aire son algunos ejemplos de magnitudes analgicas tpicas en nuestro entorno. El correcto tratamiento de estas seales tiene una gran importancia para el control de procesos y dispositivos. Hasta mediados del siglo XX se utilizaron recursos y tcnicas analgicas, cuyo esquema fundamental se muestra en la Figura'1.1. Las enormes expectativas de aplicacin en el manejo de esas seales en un futuro in mediato ha desembocado en una optimizacin de las tcnicas y recursos para su tratamiento.

'
EN TRAD A V l ---------------- ^
SEAL a n a l g ic a .

.7
v:;> SALIDA

O
SENSOR

SISTEMA DE PROCESAMIENTO ANALGICO

SEAL ANALGICA-

< ]
ACTUADOR

I M
Figura 1 .1 .

En una fase inicial se utilizaron tcnicas y dispositivos analgicos para el tratamiento de las seales.

En el esquema de la Figura 1.1 el sensor de entrada es el encargado de medir el valor instant neo de la seal a procesar, como podra ser la temperatura. El sistema de procesamiento analgico recibe dicha seal y la manipula para transformarla en otra del mismo tipo que se aplica a un actuador, que podra ser una vlvula que regula el paso de combustible a una caldera. Cuando aumenta la temperatura, disminuye la seal analgica de salida que se aplica a la vlvula para reducir el pa so de combustible e intentar mantener el valor de la seal de entrada. En este caso, el sistema de pro cesamiento de la seal est compuesto por dispositivos y circuitos analgicos.

dsPIC. DISEO PRCTICO DE APLICACIONES

Desde que en 1971 Intel comercializ el primer microprocesador, las posibilidades y ventajas del procesamiento digital se incrementaron de forma exponencial. Un microprocesador es la pane ms compleja e importante de un computador digital. En nuestros das, existe una gran variedad de cir cuitos integrados con millones de transistores y otros elementos repartidos en pocos mm^ de silicio que configuran potentsimos computadores digitales a un coste asequible. (Figura 1.2.)

Figura 1.2.

Los microprocesadorcs actuales contienen decenas de millones de transistores alcan zando elevadas cotas de rendimiento en el procesamiento digital.

Los avances tecnolgicos en microelectrnica, as como el desarrollo de mtodos matemticos eficientes facilit el anlisis y tratamiento de las seales continuas. As, la serie bsica de Fourier es una extraordinaria herramienta para el procesamiento de seales peridicas, mientras que la Trans formada de Fourier lo es para las seales aperidicas. Con la Transformada Discreta de Fourier (DFT) y la Transformada Rpida de Fourier (FFT) se consigui reducir drsticamente el nmero de multiplicaciones necesarias en los clculos, lo que unido a la aplicacin de la Transformada de Laplace y especialmente su evolucin a la Transformada Z constituyeron excelentes mtodos mate mticos muy propicios para su resolucin mediante potentes computadores digitales. As comienza una nueva etapa en el mundo del tratamiento de seales, la del procesamiento di gital de las seales. Se puede definir un procesador digital de seales o DSP como un procesador monochip diseado para resolver un conjunto de operaciones matemticas sobre una seal continua o analgica expresada digitalmente como corresponde al sistema representado en la Figura l .3. Este procesador de seales se ha convertido en una de las ms poderosas herramientas tecnolgicas en las que se sustentarn la ciencia y la ingeniera del siglo XXI. El diseo de procesadores digitales orien tados a soportar los algoritmos matemticos para el anlisis y tratamiento de las seales continuas en tiempo real supuso la utilizacin de los mismos en sistemas de procesado de seales.

ENTRADA
DIGITAL

SALIDA

>
SENSOR

S E A L
D IGITAL DIGITAL

:! C D A

SEAL ANALGICA

- 0
ACTUADOR

Figura 1.3.

El procesamiento digital de seales bsicamente se descompone en tres etapas: la conversin de la seal analgica en digital (CAO), el procesamiento de Ja seal digital y, finalmente , la conversin de la seal procesada a una forma analgica (CDA).

EL M U N D O DE LOS DSP

En el esquema de la Figura 1.3 existe un Conversor de Analgico a Digital delante del procesa dor digital y otro Conversor de Digital a Analgico detrs. El inconveniente de incluir los conversores AD y DA queda compensado por las innumerables ventajas que aporta el procesamiento di gital de las seales respecto al procesamiento analgico. Se citan las ventajas ms relevantes.

1 La informacin digital se almacena y se transfiere con seguridad y rapidez posibilitando la realizacin de clculos matemticos complejos con gran exactitud y mnimo tiempo. 2 * La tolerancia de los componentes activos y pasivos que conforman los circuitos electrnicos ana lgicos (resistenpias, condensadores, transistores, etc.) unida a la variacin de sus valores y de su comportamiento ante las condiciones ambientales externas y su edad, suponen una grave falta de precisin que afecta ai funcionamiento general de dichos circuitos. Estas alteraciones contrastan con la exactitud de los resultados obtenidos en los procesadores digitales que dependen exclusi vamente del programa ejecutado. 3 a La modificacin de un parmetro o una operacin en un circuito electrnico analgico supone el rediseo completo del mismo, mientras que esta misma situacin se resuelve rpidamente en el procesamiento digital alterando el programa y manteniendo intacto el equipo fsico. 4.a El menor coste y volumen que caracterizan los sistemas digitales son otros factores clave en su uti lizacin.

...........................> :

::'

Un claro ejemplo de procesamiento digital de seales en nuestro entorno es el tratamiento de la seal de sonido captada por un micrfono, el cual queda ilustrado en la Figura 1.4.

Figura 1.4.

El micrfono transforma en una seal analgica las presiones acsticas de la voz. Dicha seal se aplica a un CAD, cuya salida se trata en un procesador digital do seales segn el algoritmo implementado en el programa con el fin de eliminar ruido de la seal obte nida del micrfono. El resultado de este procesamiento se aplica a un CDA para obtener de nuevo una seal analgica que se reproduce en un altavoz.

No obstante, existen situaciones en las que el requerimiento de trabajar en tiempo real impide la aplicacin del procesamiento digital debido a los retardos de los conversores, a la distorsin produ cida en la toma de muestras y a la exigencia de gran precisin en los clculos. Debido a que en ta les casos hay que generar una respuesta a gran velocidad, se opta por utilizar sistemas analgicos pa ra el procesamiento de seales.

1.1.1. Muestreo de las seales analgicas

El sistema tpico de aplicacin de un DSP dispone de un sensor como entrada que capta una seal analgica correspondiente a la magnitud a tratar. Dicha seal analgica se muestrea para ir pasando

dsPIC. DISEO PRCTICO DE APLICACIONES

estas muestras a un Conversor Analgico Digital (CAD) que las convierte a un formato digital pa ra introducirlas al procesador. Una vez obtenidos los resultados digitales, nuevamente se convierten los mismos en una seal analgica (CDA) de salida que puede transformarse de nuevo en una mag nitud fsica por medio de un actuador. (Figura 1.5.)

CAPTURA Y MANTENIMIENTO

SALIDA
SEAL
D IG IT A L

CDA

SEAL . A N A L G IC A 1

ACTUADOR

MUESTREO

Figura 1.5.

Esquema general p o r bloques de un sistema de procesamiento digital de seales.

La seal analgica generada por el sensor se muestrea mediante un circuito de Captura y M an tenimiento o Sample-and-Hold (S&H) que va tomando cada cierto tiempo (t) una muestra que car ga y mantiene su valor en el condensador mientras el CAD realiza su conversin a digital. El tiem po entre cada muestra se denomina perodo de muestreo (TM=1/Frecuencia de muestrea). Un gran inconveniente del proceso de muestreo de la seal analgica es la prdida de informacin entre muestras. (Figura 1.6.)

AMPLITUD

AMPLITUD
MUESTRAS

TIEMPO

Figura 1.6.

Muestreo de una seal analgica . La seal analgica inicial se convierte en muestras dis cretas tomadas cada cierto tiempo(t) en el circuito S&H.

La frecuencia de muestreo es el nmero de muestras que se realizan por segundo. Cuanto mayor sea esta frecuencia, ms parecido ser el resultado obtenido a la seal original. Para representar con precisin una seal analgica, el Teorema de Muestreo (Nyquist-Shannon) establece que la fre cuencia de muestreo debe ser igual o mayor que dos veces la mxima componente de frecuencia de la seal original {ancho de banda de la seal a muestrear ), segn la frmula: Fm uestreo ^ 2 * Fm x.. Tanto el CAD como el procesador digital deben disponer del tiempo suficiente entre cada dos muestras para llevar a cabo las labores que tienen asignadas. Muy frecuentemente el procesa miento de las seales digitales exige la aplicacin de las transformadas de Fourier y Laplace, las cuales hacen un uso intensivo de la funcin suma de productos (LCi F(x)). Por esta razn, los procesadores especializados en trabajar en el cam po de las seales deben disponer de un conjunto

EL M U N D O DE LOS DSP

de instrucciones muy potentes y rpidas, siendo la multiplicacin la operacin ms importante que deben soportar de form a ptima, ya que en caso contrario, supondra un verdadero cuello de bote lla en el clculo de la mayora de los algoritmos. Existen varias formas de medir la velocidad de un procesador digital de seales, aunque el pa rmetro de medida ms usual es el tiempo de ciclo de instruccin, que es el tiempo necesario para ejecutar la instruccin ms rpida del procesador. Su inverso dividido por un milln da lugar al ren dimiento del procesador en millones de instrucciones por segundo o MIPS.

1.2. DSP. D E FIN IC I N Y CARACTERSTICAS PRINCIPALES

Recibe el nombre de DSP (Procesador Digital de Seales) un circuito integrado que contiene un pro cesador digital y un conjunto de recursos complementarios capaces de manejar digitalmente las se ales analgicas del mundo real, como los sonidos y las imgenes. A principios de la dcada de los 80 del siglo pasado ya se comercializaban varios modelos de DSP, siendo pioneros los fabricantes Texas Instruments, NEC e Intel. En la actualidad Texas Ins truments mantiene el liderazgo en el mercado de DSP, fabricando modelos cada vez ms potentes para acoplarse a las aplicaciones ms complejas y cambiantes. Los DSP pueden asemejarse a los clsicos microcontroladores, pero incorporando arquitecturas y recursos especiales para poder controlar de form a ptima los requerimientos especficos y los al goritmos manejados en el procesamiento digital de seales analgicas. Se destacan las siguientes prestaciones de los DSP:

a) Las procesadores preferentemente son RISC; con un reducido juego de instrucciones que se eje cutan, generalmente, en un solo ciclo. b) Utilizan la arquitectura Harvard y disponen de dos memorias independientes, una dedicada a con tener las instrucciones y otra los datos, posibilitando el acceso simultneo a ambas informaciones. Adems, la memoria de datos suele dividirse en dos espacios independientes que aportan el ac ceso paralelo. (Figura 1.7.) c) Disponen de recursos fsicos complejos para soportar las operaciones especficas de los algorit mos DSP. Son imprescindibles un multiplicador rpido y un flexible registro de desplazamiento. Una operacin DSP tpica es la de *multiplicar y acumular" ( x = a b + x) y que la suele implementar a instruccin de nemnico MAC, ejecutndose en un solo ciclo. Se realizan varios accesos a memoria en un solo ciclo, para que el procesador pueda buscar una instruccin mientras reali za la bsqueda de operandos y/o almacena el resultado de la instruccin anterior. Esto es posible gracias a que fa memoria de datos se divide en dos partes para posibilitar el acceso simultneo de datos d) El repertorio de instrucciones contiene algunas especficas para resolver los algoritmos matemti cos habituales en el procesamiento de seales. e) Los modos de direccionamiento son muy sofisticados, ya que localizan los datos y almacenan los resultados de forma ptima para los algoritmos empleados. f) Disponen de un conjunto de interrupciones muy amplio y veloz, con niveles de prioridad. g) En el DSP se integran numerosos recursos y perifricos que minimizan el tamao y simplifican el diseo del sistema. h) Poseen mdulos para el control y optimizacin del consumo de energa.

dsPIC. DISEO PRCTICO DE APLICACIONES

Figura 1.7.

La arquitectura Harvard dispone de buses independientes para instrucciones y datos.

1.3. M ICROCONTROLADORES Y DSP

Los microcontroladores clsicos, denominados de forma resumida MCU, son circuitos integrados que contienen un procesador digital completo junto a diversos perifricos auxiliares que facilitan el desarrollo de las aplicaciones a las que se dedican. Su parecido con los DSP es muy grande, pero las diferencias que los distinguen hacen que sus campos de aplicacin sean diferentes. De forma resum ida puede decirse que los DSP son microcontroladores dotados de los recursos fsicos y lgicos necesarios para poder soportar las aplicaciones especficas del procesamiento di gital de seales. Las instrucciones aritmticas complejas de los M CU se ejecutan en varios ciclos, mientras que las de los DSP slo precisan uno. En los DSP siempre se dispone de conversores AD rpidos y pre cisos. Dado el carcter marcadamente matemtico de los programas para DSP, stos estn prepara dos para ser programados con lenguajes de alto nivel, como el C. La velocidad y el rendimiento de los DSP son muy superiores a los habituales en los MCU. En el momento que la expansin de las aplicaciones de los MCU ha alcanzado cotas extraordi narias y se fabrica un sin fin de productos y sistemas que llevan embebidos uno o varios, el nivel cientfico y los avances tecnolgicos han logrado fabricar DSP que aaden al MCU los recursos ne cesarios para soportar el procesamiento digital de las seales y cubrir as todo el cam po de posibi lidades y aplicaciones que envuelve. (Figura 1.8.)

Figura 1.8.

Fotografa de un m icrocontrolador convencional o M CU a la izquierda y de un DSP a la derecha. Detrs del parecido de ambos dispositivos existen diferencias que les orien tan hacia aplicaciones diferentes.

EL M U N D O DE LOS DSP

Al analizar el comportamiento del MCU se espera que ejecute la secuencia de instrucciones tal como la especifica el programa, siendo las interrupciones la nica causa que puede apartarle de La misma. Su funcionamiento es claramente previsible y su actuacin determinstica. Por el con trario, en muchas aplicaciones con DSP los resultados son consecuencia inmediata del flujo de da ros que suministra la seal muestreada y la ejecucin es dependiente de los datos obtenidos en nempo real.

1.4. DSP Y DSC

La empresa Microchip Technology Inc. ocupa el prim er puesto en el ranking mundial de microcontroladores de 8 bits desde el ao 2003; sus modelos son conocidos popularmente con el nombre genrico de PIC. Tras el exitoso lanzamiento de las familias de microcontroladorcs de 16 bits -IC24FXXX y PTC24HXXX, los usuarios necesitan nuevos dispositivos que soporten funciones de procesamiento digital de seales para atender las nuevas tendencias del mercado orientadas al au mento de la conectividad por Internet, las mejoras relacionadas con la imagen y el sonido, el con trol de motores, etc. Las aplicaciones modernas mezclan las funciones tpicas MCU con las de procesamiento digide seales (DSP). Esta situacin ha im pulsado a M icrochip a fabricar un circuito hbrido NICU/DSP, cuyo manejo es similar a los clsicos microcontroladores pero que incluye las principa les prestaciones de los DSP. As ha nacido el Controlador Digital de Seales, abreviadamente DSC (Digital Signal Controller), que rene las caractersticas de un microcontrolador PIC de 16 bits y las de un DSP de gama baja. En base a este controlador digital de seales, M icrochip consi gue reunir lo mejor de ambos mundos, marcando el comienzo de una nueva era en el mercado de controladores. (Figura 1.9.)

LU

----------
PRECIO

Figura 1.9.

Los controladores digitales de seales (DSC) comparten reas de aplicacin de los M CU de 32 bits y DSP.

10

dsPIC. DISEO PRCTICO DE APLICACIONES

La primera generacin de DSC, denominada dsPIC30F, constituy un intento por parte de Microchip de facilitar el acercamiento al mundo del procesamiento digital de seales a sus usuarios de MCU de 8 y 16 bits. Con esta intencin se ha mantenido el entorno de la arquitectura y juego de ins trucciones de los MCU tradicionales, pero aadiendo la funcionalidad y los principales requisitos de los DSP, para facilitar la transicin a sus clientes habituales. Posteriormente, la segunda generacin de DSC, llamada dsPIC33F, ha potenciado las capacidades, el nmero de perifricos y el rendi miento, permitiendo acceder a campos de aplicacin ms complejos.

1.5. MERCADO Y APLICACIONES

Las ventas de DSP en el mercado mundial crecen a un ritmo aproximado al 30 por l anual, ocu pando el prim er puesto del escalafn el fabricante Texas Instruments que consigue casi la mitad de las ventas totales. En la Figura 1.10 se muestra la distribucin porcentual de las ventas de DSP en el mundo, segn EE Times durante el ao 2004.
TEXAS INSTRUMENTS

FREESCALE S E M IC O N D U C T O R S

OTROS FABRICANTES

PHILIPS SEMICONDUCTOR AGERE SYSTEMS ANALOG DEVICES

Figura 1.10. Distribucin porcentual de las ventas mundiales de DSP en 2004.

En el ao 2005 se alcanz un total de 1,3 billones de unidades DSP vendidas, lo que supone un volumen de ventas de 7,8 billones de dlares, que se incrementar notablemente en un futuro in mediato. El sector de las comunicaciones ser el principal responsable de este crecimiento. La cuota en volumen de ventas de los sectores ms importantes en el mercado DSP fue de 6,4 billones de dlares en el sector de comunicaciones, 414 millones de dlares en el de computadores y 312 millones de dlares en el sector del automvil, segn IC InSights durante el ao 2005. En cuanto a la distribucin de las aplicaciones de DSP en el mercado global, Forward Concepta las ha dividido en seis secciones (2004). (Figura 1.11.) En lo que respecta a la fabricacin de DSP sobresale Asia que abarca un 52 por 100, destacan do China, Taiwn y Corea del Sur. Seguidamente Europa posee una cuota del 20 por 100 del total y luego se sitan Japn y Estados Unidos con un 17,3 por 100 y 10,7 por 100, respectivamente. Esta dos Unidos est a la cabeza en lo que se refiere a consumo de DSP. Dentro de los campos de aplicacin de los D SP destacan las Telecomunicaciones, la M ultime dia y el Control de Motores. Esto incluye una am plia variedad de soluciones como la mejora de

EL M U N D O DE LOS DSP

11

TECNOLOGA INALMBRICA 71,4 GRAN CONSUMO 8,4 MULTIPROPSITO 7 TECNOLOGA NO INALMBRICA 5,7 COMPONENTES Y PERIFRICOS 4,7 AUTOMOCIN 2,8

Figura 1.11. Distribucin porcentual del mercado en las aplicaciones en las que estn presentes los DSP.

imgenes, el reconocimiento y la generacin de voz, la compresin de datos para el almacena miento y transmisin, etc. A continuacin se describen algunas aplicaciones concretas en las que se pueden encontrar DSP como dispositivos imprescindibles de las mismas.

GRAN C O N S U M O i ' ; : - !
El uso cada vez ms extendido de DSP en aplicaciones porttiles como la telefona celular hace que el consumo de energa sea un factor a tener muy en cuenta en el momento de decidirse por un DSP u olro. Otros productos de consumo con DSP son televisores, radios, reproductores de msica digital, reproductores de -CD, rganos y sintetizadores musicales, frigorficos, lavadoras y equipos de aire acondicionado.

M E D IC IN A

Aparatos como los equipos destinados a la monitorizacin de pacientes, MNR, scanner, electrocar diogramas.. electroencefalogramas y tomografas, han logrado que sus imgenes sean mostradas con mucho ms detalle que las tcnicas convencionales gracias a los DSP, permitiendo un diagnstico y tratamiento significativamente mejor. Hay otros aparatos destinados al diagnstico asistido, las ecografas y la resonancia magntica, que pueden proporcionar informacin acerca de la fisiologa y del flujo de sangre a travs de las arterias.

12

dsPIC DISEO PRCTICO DE APLICACIONES

INDUSTRIA

l DSP ha revolucionado reas como la exploracin petrolera, minera, submarina y espacial, el control de motores, la instrumentacin y la robtica. (Figura 1.12.)

Figura 1.12. La placa de la fotografa corresponde a un radar para tiburones y contiene un DSP ADSP-TS2105 cuya funcin es optim izar su deteccin.

CONTROL DE MOTORES

:;; />. , - , - , .> :

V ,- , O ::

-. . , ,

m&y+Xs r!

-.-v -: > :>x::

El control de motores es un campo al que los fabricantes de DSP se estn dedicando ampliamente ya que al estar presentes en casi todos los procesos industriales el desarrollo de mdulos de control de po tencia es una inversin segura. De este modo se emplean DSP en sistemas como controladores de mo tores, inversores de potencia, controladores de posicin, impresoras y fotocopiadoras, compresores de alta potencia, etc. Los DSP presentan excelentes caractersticas debido a su potencia en el clculo nu mrico, permitiendo implementar controles de velocidad, de sistemas de energa magnetizante, de fac tor de potencia y otros, con niveles de eficiencia nunca alcanzados anteriormente.

. -- o'.:
.

A U T O M O C I N

La introduccin de DSP en esta rea ha supuesto un incremento de las prestaciones de los automvi les. Se aplican en los activadores de airbag, sistemas de chequeo, control de velocidad de crucero, suspensin activa, control del motor, ordenador de a bordo, ABS y control de la combustin. General Motors, por ejemplo, utiliza un DSP en su sistema de rastreo de automviles aprovechando la red glo bal de satlites GPS para establecer su ubicacin precisa.

EL M U N D O DE LOS DSP

13

MILITAR

El sonar, el radar, el piloto automtico y el guiado automtico de misiles son algunos de los ejemplos de la utilizacin DSP en el mbito militar.

TELECOMUNICACIONES

El DSP ha revolucionado la industria de las telecomunicaciones en muchas reas como la generacin y deteccin de tonos, filtrado para eliminar el ruido de la linea elctrica, multiplexado, compresin, con trol de eco, etc. y en productos como son los telfonos mviles e inalmbricos, mdems, emisoras, vi deoconferencia, GPS, PDA, cmaras digitales, fax, RDSI, redes de sensores, receptores DRM y encriptadores de datos entre muchos otros. Utilizando un telfono mvil en una habitacin ruidosa, muy poco de ese ruido Jlegar a la persona que est al otro lado del telfono, ya que el DSP emplea com plejos algoritmos matemticos que realzan la diferencia entre el ruido de fondo y la voz del usuario.

Figura 1.13. Cmara estabilizador de imagen con GPS para helicpteros. El cometido del DSP es gra bar las imgenes absorbiendo la vibracin del helicptero adems de disponer de un complejo sistema CPS incorporado.

Figura 1.14. Receptor de DRM. El receptor est basado en DSP y puede conectarse directamente a un PC para visualizar los parmetros de la emisin. Tiene la posibilidad do recibir texto, imgenes y hasta pequeos videoclips ju n to con la seal de audio.

14

dsPIC. DISEO PRCTICO DE APLICACIONES

Figura 1.15. La emisora de la fotografa contiene un DSP cuya funcin es eliminar la interferencia de seales de emisoras adyacentes y reducir al mnimo la distorsin de sonido causada por una mala recepcin.

IM A G E N Y S O N ID O

EDSP puede realizar muchas funciones importantes durante el procesado del sonido y las imgenes. Permite aadir ecos, soportar la visin artificial, ef reconocimiento de patrones, la compresin/des compresin de imgenes, el reconocimiento y la generacin de audio, la cancelacin de ruido, la can celacin de eco, el encriptado y la sntesis de voz.

Figura 1.16. Dskc.am. Cmara c.on TCP/IP Ethernet, que gracias a un DSP soporta la videoconferencia, el reconocimiento de imgenes, adems de disponer de filtros y compresin.

EL M U N D O DF LOS DSP

15

Figura 1.17. M d ulo de vdeo "5g DM 642 m ultichannel". Soporta diversos formatos de. vdeo y codifica y decodifica vdeo . Tiene un DSP que perm ite convertir las seales de vdeo y audio analgicas en archivos digitales con calidad de vdeo DVD.

Figura 1.18. Placa PCI. Contiene un DSP y capacidades de grabacin y reproduccin a gran calidad.

CAPTULO

2
}

Controladores Digitales de Seales (DSC)


"

* ' :;.' ? v/*, .v "

2.1. EL CONCEPTO DSC

Mkrrochip ha unido toda la potencia y posibilidades de sus microcontroladores de 16 bits (MCU) ; x i las prestaciones ms interesantes de los DSP para fabricar un nuevo circuito integrado denom i n o DSC, que intenta ser una respuesta eficaz a las necesidades de las modernas aplicaciones que : >mbinan las funciones tpicas de los microcontroladores con las del procesamiento digital de serIes de los DSP. Dada la similitud del DSC con los MCU en cuanto arquitectura y repertorio de instrucciones, los _' _arios d las familias de microcontroladores PC no encuentran dificultades para introducirse en ei fabuloso campo del procesamiento digital de seales.

- D S C esiruy parecido a un microcontrolador MCU de 16 bits en cuanto a la arquitectura, repertorio ce instrucciones y precio, pero con el rendimiento y las prestaciones de un DSP.

Estos dispositivos se caracterizan por alcanzar un rendimiento de 40 MIPS e integrar memoria FLASH de alta calidad junto a novedosos recursos hardware, apoyndose en herramientas de desa rrollo muy fciles de manejar y manteniendo la compatibilidad de los diversos modelos con encap azados de diferente patillaje. (Figura 2.1.)

cebrado en estados y e.ec>jcin predociblc Uso intensivo de interrupciones 3ae co'.e Menwria FLASH Perifricos robuetc>3 -se frecuente de Ht-il para programas grandes

Variedad de perifricos Rendimiento DSP ntecrupaones avanzadas Memoria FLASH robus Encapsuados con pocas patitas Optimizado para enguaje C Manejo parecido a MCU

Flujo centrado en datos Contrarios a interrupciones Orientado ai rendimiento Uso de memona FLASH Perifricos brollados Poco frecuente uso de HLL

^igura 2.1.

Los DSC renen lo mejor de los mundos M C U y DSP.


17

18

dsPIC. DISEO PRCTICO DF APLICACIONES

Los DSC se comercializan en la actualidad en diferentes dispositivos agrupados en dos familias:

1.a Familia dsPIC30F


2. Familia dsPIC33F

2.2. CARACTERSTICAS GENERALES DE LOS DSPIC30F

Inicialmenle M icrochip fabric la familia dsPIC30F de la que se ofrece en la tabla de la Figura 2.2 sus caractersticas ms destacables.

RECU RSO
Memoria de Programa FLASH Memoria de Datos RAM Memoria de Datos EEPROM Patillaje

R A N G O DE VALORES
12K b- 1 4 4 Kb 512 Bytes - 8 Kb 1Kb - 4 Kb 18 - 80 patitas Hasta 5 Hasta 8 entradas Hasta 8 salidas De 6 a 8 500 kbps, hasta 1f> canales 100 kbps, hasta 16 canales 1 -2 1-2 1 M dulo

de Encapsulado

Temporizadores de 16 bils M dulo de Captura M dulo Comparador / PVVM M dulo PVVM de Control de Motores Conversor A/D de 10 bits Conversor A /D de 12 bits UART SPI ( 16 bits)

i2 c1 M
QEI Interfaz CODEC CAN

1
1 1-2

Figura 2.2.

Tabla que presenta las caractersticas ms importantes de la familia dsPIC30F.

El voltaje de alimentacin admite un rango com prendido entre 2,5 y 5,5 VDC. Se tolera una temperatura interna entre -4 0 y 85 C y una externa entre -4 0 y 125 C. El rendim iento alcanza los 30 MIPS cuando el voltaje de alimentacin tiene un valor entre 4,5 y 5,5 VDC. En cuanto a la arquitectura de la CPU los dsPIC 30F se sustentan en un ncleo RISC con ar quitectura Harvard mejorada. Actuando como soporte central de informacin existe un banco de 16 registros de 16 bits cada uno; se dispone de un bus de datos de 16 lneas y otro de instruccio nes de 24. Para potenciar la velocidad de las operaciones aritm ticas com plejas existe un M o tor DSP que contiene un m ultiplicador hardw are rpido de 17 x 17 bits, dos acum uladores de 40 bits y un robusto registro de desplazamiento. La memoria de programa, tipo FLA SH, puede al canzar un tam ao de 4 M instrucciones de 24 bits cada una, aunque actualm ente slo hay m ode los con una capacidad mxima de 256 K bytes. La memoria de datos SRAM puede alcanzar 32 K posiciones de 16 bits, aunque en los modelos actuales slo se llega a la mitad. La memoria de datos se divide en dos espacios, X e Y, que pueden ser accedidos sim ultneam ente en las opera ciones m atem ticas DSP. Toda esta estructura adm ite operaciones M CU y operaciones DSP con

CONTROLADORES DIGITALES DE SEALES (DSC)


j

19

repertorio de 84 instrucciones, la m ayora de 24 bits de longitud y ejecutables en un ciclo de instruccin. (Figura 2.3.)

Figura 2.3.

Arquitectura bsica de ia CPU de los dsPICJOF.

Las secciones M CU y DSP cooperan en el funcionamiento general y comparten el flujo de insrucciones de los DSC. Los recursos especficos del M otor DSP, adems de soportar las operacio nes DSP, permiten implementar nuevas y potentes instrucciones MCU. Para reducir el tiempo de ejecucin de algunas instrucciones DSP la memoria de datos SRAM se divide en dos espacios X e Y que pueden ser accedidos a la vez. Otra caracterstica im portante en los dsPTC30F es la de admitir hasta 45 fuentes distintas de peticin de interrupcin con 7 niveles de prioridad, de las cuales 5 son externas. Hay modelos dsPIC30F que disponen de hasta 54 patitas de E/S programables y con otras funciones multiplexadas con un consum o de 25 mA cada una. Los dispositivos dsPIC.33F como disponen de ms perifricos tambin admiten ms causas de interrupcin. Se puede encontrar una gran variedad de perifricos en la familia dsPIC30F como temporizadores. conversores AD, mdulos de captura y comparacin, mdulos PWM para el control de moto res, mdulos de comunicacin PC, SPI, CAN, UART, DCT, etc. Los dsPIC33F adems contienen un Controlador de DMA. Tambin disponen de potentes herramientas para la gestin del sistema (Perro Guardin, Moni:?t de fallo de reloj, temporizadores para la estabilizacin del voltaje de alimentacin y la frecuen t a . etc.), as como dispositivos para controlar el consumo de energa (modos de bajo consumo Idie y Sleep, deteccin de voltaje bajo, etc.). En la tabla de la Figura 2.4 se presenta una comparativa sobre el rendimiento de diversas fami lias de MCU de varios fabricantes segn los programas de prueba sobre anlisis de frecuencia de instrucciones de EEM BC Automotive. En el grfico de la Figura 2.5 se compara la reduccin en el tamao del cdigo con lenguaje C que generan los dsPIC30F frente al de otros competidores segn los benchmark de EEM BC Automotive.

20

dsPIC DISFO PRCTICO DE APLICACIONES

FAM ILIA M CU
INFINEON MICROCHIP II M O TO R O IA HITACHI INFINEON ST MICRO MITSUBISHI MOTOROLA XC161/166 dsPO O F 320LF240X 56F8X H8S/26XX C16x ST10F269 M 16 C MC9S12D

C IC L O IN S TR U C C I N (M Hz)
40 30 40 40 33 25 20 20 25

C IC L O S POR IN STR U C C I N
1-6 1 -2 1-4 1-8 1 -7 2 -4 1-8 1-8 2 -6

MIPS
29 28 21 19 15 12 9 9 6

Figura 2.4.

Tabla de diversos fabricantes sobre algunos de sus modelos M CU usando los programas de prueba basados en el anlisis de frecuencia de instrucciones de EEMBC Automotive.
221%

100%

Figura 2.5.

Se muestra a reduccin del cdigo en lenguaje C que supone el uso de los dsPIC30F fren te a otros segn los benchmark de EEMBC Automotive para un tamao de 50 Kbytes.

2.3. LOS MODELOS DE LA FAMILIA DSPIC30F

M icrochip ha clasificado a los 19 modelos de la familia dsP!C30F que actualmente fabrica y co mercializa en tres categoras atendiendo a su aplicacin ms apropiada.
1: Dispositivos dsPIC30F de proposito general. 2 a Dispositivos dsPIC30F para el control de sensores. 3 Dispositivos dsPIC30F para el control de motores y sistemas de alimentacin.

2.3.1 Dispositivos dsPIC30F de propsito general

Este grupo consta de 8 modelos diferentes que se orientan especialmente a las aplicaciones avanzadas de MCU de 16 bits embebidos y para las de audio que precisen interfaces CODEC. (Figura 2.6.)

M O D ELO

FLASH M D U LO A/D PATITAS M EMORIA SRAM EEPROM TIMER M D U LO INTERFAZ C D IG O PATITAS 12-BIT UART SPI r e CAN COM PARADO R E/S PROGRAMA BYTES BYTES 16-BITS CAPTURA CO D EC EN CAPSULADO PWM STANDAR 100KBPS (MX) KBYTES
40/44 24 2048 1024 3 2

dsPIC 30F3014

13 ch

30

P,PT,ML

dsPIC 30F4013

40/44

48

2048

1024

AC97, |2S

13ch

30

P,PT,ML

dsPIC 30F5011

64

66

4096

1024

AC97, |2S

16 ch

52

PTC

CONTROLADORES

dsPIC 30F6011 dsPIC 30F60122 dsPIC 30F6012A dsPIC 30F5013 dsPIC 30F6013 dsPIC 30F6013A dsPIC 30F614 dsPIC 30F6014A

64

132

6144

2048

16 ch

52

PF PT

64

144

8192

4096

AC97, |2S

16 ch

52

PF I5T

80

66

4096

1024

AC97, |2s

16ch

i ' : 2

68

PT

DIGITALES D E SEALES (DSC)

80

132

6144

2048

5
....

16 ch

68

PF PT

90

144

8192

4096

AC97, |2S

16 ch

68

PF PT

Figura 2.6.

Principales caractersticas de los 8 modelos que componen el conjunto de dispositivos dsPIC30F de propsito general.

21

22

dsPIC. DISEO PRCTICO DF APLICACIONES

2.3.1. Dispositivos dsPIC30F para el control de sensores

Esta subfamilia consta de 4 modelos y se orienta a resolver aplicaciones embebidas que requieran altas prestaciones y bajo coste, razn por la que slo disponen de encapsulados de 18 y 28 patitas. (Figura 2.7.)

C DIG O E N C A P S U L A D O s f c = H -u j^ '< O . w u e s

i o < / > O i < ) C C _ - < c e C / > O T C T !


N C < N < O T N < N C N
o c

1 5
K <5 !| S8 | 2 | o ^ s

O )

C Z . J J Z J jj U U u c o c c

C N C N C N O J

o U L . O r> o

9
O< 5O c U J _ PT ^ i u 1 U JC u w

N C N C N C N C

r + l rr
' * = t C N O

ro

r T O l C N ^ O C C O C O N C 3 T O C N 0 4 O o
& u rn ( v 3 U vi -S 0 3 .Q , u

2 < /> c c <1 I 2 l < IS u .m Os * 5


l i l i SVlIlVd

C N o 4 't 0 C N

O C O c o C O C C N < N
O O O N m L l_ u _ O < o ro 1o u U _ c _ic w r " O b c ~ u _ O c n U fi s ~ i/i ~ o O I O C N L l_ O e n U Q .

0 m J

U J o s

C r8 u. 3 W D

CONTROLADORES DIGITALES DE SEALES (DSC)

23

Nlicrochip es un suministrador cualificado y homologado de los ms importantes fabricantes de automovilstica, en la que muchas aplicaciones exigen funcionamiento con amplios ranfCN de temperatura y ciclos de vida muy largos. La combinacin del conversor AD de 12 bits con los perifricos de comunicacin y la gestin d consumo de energa hacen a estos 4 modelos ideales para la construccin de mdulos basados es censores inteligentes. Pretensores de cinturones, airbags, controladores de ignicin, cancelacin d ruido en el habitculo, sensores de ocupantes, etc., son algunas de las aplicaciones de estos dispositivos.
il industria

I_3.3. Dispositivos dsPIC30F para el control de motores y sistemas de alimentacin

_ s 7 modelos que componen esta categora se dedican a las aplicaciones de control de motores, tacomo los de induccin de fase simple o trifsicos y los de corriente continua. Tambin son muy ^ ro p iad o s para la gestin de los sistemas de alimentacin ininterrumpibles, conversores, mdulos pira la correccin del factor de potencia, etc. (Figura 2.8.) Estos modelos de DSC se utilizan en sistemas destinados a calefaccin, ventilacin, lavadoras, ire n u ra industrial de puertas, control de estabilidad, medicin del caudal de agua y consumo de ectricidad, sistemas de seguridad, etc. M icrochip recom ienda el modelo dsPIC30F5015 para el control de motores paso a paso, el ^ ?IC 3 0 F 2 0 1 0 para su aplicacin en los motores de corriente continua y el control de velocihi. Para los m otores de induccin de corriente alterna recom ienda los modelos dsP IC 30F3011, is?IC 30F5015 y dsPIC30F6010.

2.4. ENCAPSULADOS Y DIAGRAMAS DE CONEXIONES

Con la finalidad de soportar todo tipo de diseos y necesidades los modelos dsPIC 30F estn capsulados desde 18 hasta 80 patitas, algunos con doble hilera de patitas, tipo PDP y SPDIP SOIC. O tros estn preparados para el m ontaje superficial com o los tipos T Q FP y QFN. Figura 2.9.) La nomenclatura de los dsPIC30F formada por nmeros y letras expresan las especificaciones particulares y su significado se describe en la Figura 2.10. El diagrama de conexiones para los miembros de esta familia lo ha diseado Microchip para prop d a r l a migracin hacia modelos superiores y con ms patitas, para lo cual ha mantenido la mxicompatibilidad en su posicin. Se ha favorecido la compatibilidad del pinout o distribucin del rciiilaje de los PIC M CU con los PTC DSC, tambin la de las instrucciones, la de las herramientas je desarrollo y la de las patitas de E/S correspondientes a los perifricos de los dos tipos de PTC, cox l c se refleja en la Figura 2.11. En la Figura 2.12 se muestran los diagramas de conexiones de los modelos dsPIC30F5013 y ^ ?IC 30F 6014, que coinciden, y el del dsPlC30F6013. Los dos prim eros disponen de inteifaz CODEC y el otro no lo tiene. La mayora de las patitas de ambos diagramas de conexin soportan varias funciones, pero la : : mpatibilidad en su posicin es total y slo las patitas 1, 78, 79 y 80 difieren en los diagramas de te Figura 2.12, que asumen las patitas de E/S que necesita el CODEC en el diagrama correspon dente a los modelos que lo contienen. En la tabla de la Figura 2.13 se describe el smbolo, el significado y la direccin de las patitas ~ is representativas en los dsPIC30F.

2 4 dsP IC DISEO PRCTICO

M O D ELO

M D. ; A/D C O D IF IC . DE MEM. SRAM EEPROM TIMER M D. COMP. CON TR. UART SPI 10-BIT PATITAS C U A D RA TU R A PWM M OTOR. PROGR. BYTES BYTES 16-BITS CAPT. 500 KBPS ' ESTND. KBYTES FLASH
28 28 28 40/44 40/44 64 80 64 80 12 24 48 24 48 66 144 144 66 512 1024 2048 1024 2048 2048 8192 8192 2048 1024 1024 1024 1024 1024 1024 4096 4096 1024 3 5 5 5 5 5 5 5 5 4 4 4 4 4 4 8 8 4 2 2 2 4 8 4 8 8 4 6ch 6ch 6ch 6ch 6ch 8ch 8ch 8ch 8ch 6ch 6ch 6c:h 9ch 9ch 16ch 16ch 16ch 16ch SI SI SI SI SI SI SI SI SI 1 1 1 2 2 1 2 2 1 1

re

CAN

PATITAS E/S (MX)

CD. ENCAPS.

t i
1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 20 20 20 30 30 52 68 52 68

! !

dsPIC 30F2010 dsPC 30F310 dsPIC 30F4012 dsPIC 30F3011 dsPIC 30F4011 dsPIC 30F5015 dsPIC 30F6010

SCP.SOG, MMG SP,SO SP,SO lJ ,PT,ML P/PT# ML PT PF PT PF PT

D E APLICACIONES

1
1 1 2 2 2 2

i-------------------- dsPIC 30F6015 dsPIC 30F5016

dsPIC 30F6010A

Figura 2.8.

Caractersticas ms significativas de los modelos dsPIC30F para el control de motores y sistemas de alimentacin.

CONTROLADORES DIGITALES DE SEALES (DSC)

25

m
MM{G): 28-pin QFN
15 m n x 6 mm * 0 .9 mm)

ML: 44-pin QFN


(S n w x $ > (J.9 mm)

P: 18-pirv PDIP
(22 1 * 7 . 5 5 * 0.3 mm>

PT(G): 64-pln TQFP


(10 mm x 10 mm x i <r*n)

M ic r o c h ip
SO: 18-pin SOIC
( l t . 5 3 * 1 0 .3 4 x ? 31 nvn)

PF: 64-pn TQFP P: 40-pin PUIP


152.27 x 1 5 .2 4 x 3.S1 m <1 mm x 1 4 m n x l mm)

SP(G): 28-p/n SPDIP


( M . tfT >. 7 .3 7 >: 3 .3 mm)

S0(G): 28-pin SOIC


{1 7 .3 3 x 1 0 .3 4 x 2 .3 1 mm)

PT: 44-pin TQFP


( i o mii x 1 0 rjvr. x 1 nvml

PT: 80-pin TQFP


J.2 m u x 1 2 nim x i mm)

PF: 80-pin TQFP


(14 irm . 1 4 n w x i min)

figura 2.9.

Modelos de encapsulado de la familia dsPIC30F.

Figura 2.10. Campos en que se descompone la nomenclatura de la familia dsPIC30F y significado de cada uno de ellos . Tambin es aplicable a los dsPIC33F
PIC* MCU TMR
CCP

d sP IC *D S C
/O T i'.V V W

TMR I 5
oc

TMR 1C

T 0 I

OC

UART

::

SPI

F^ura 2.11. M icrochip ha potenciado la com patibilidad de las lneas de E/S de los perifricos de los PIC M C U con la de los dsPIC DSC.

26

dsPIC. DISEO PRCTICO DE APLICACIONES

a s o & 8 5 ;:

2n3

Q 8 S S 2 5?? e

| 8

I 5 SI

ggo88a

nnnnnnnnnnnnnnnnnnn
0 s x 0 in '0 M -0 ( N ( irtr tN COFS/RG5 T2CK/RC1 C U T3CK/RC2 T4CWRC3 T5CK/RC4 SCK2/CN&RG6 S012/CN9.RG? SDQ2'CH*0tRG8 MCLR SS2/CN11XIG9 VSS V oo INT1AA12 !NT2iRA13 AN$>CN7.35 AN4/CN&R84 AN3.CN&33

s 5Ss1 2 I 11

!E M U c i/sa sc < y ria 0 C N < V R C i


I MUDl*SOSC*CNt/RC13 I EM UC2OC1D0 | IC4/R011 | C3/RD10 I IC2/RD9 11C1/RD8 | INT4.'RA5
I IK T i'R A '. | V2

d sP lC 3 0 F 6 0 1 4

I OSC2.C!.K>RC15 I OSCUCUO
H ] vdo

|SCLRG2 | SOA/RG3 I BHUC3/SCK1/lWT<VRre | SOI1.F7 | B.1UD3jSOO; jRF8 I U1IW RF2 I U1D0RF3

A J G m T .V D IW C N 4 . S 2
PGOEMUOANVCN3.B31 P G D EM U D Am 'C N 2fl3G d

UUUUUUUUIJ
r r ? T -r -T -lill. - - - d q q E E

sa ^ i Z Z i l l g g ll i s

85

r- O
8

8 35? SIS ^ V-

8
N M N )

s z z r ' O Q i q

O3 t 2 S28 8 3 82560055128888 n n n n n n n n n n p n n - Dn n nn n S.S535S3S35


R G15 T2C W R C I I T3C K/RG 2 d T 4C K /R C 3 C Z 73C K /R C 4 d SCK2>CN8.<RG6 E M U C tSOSCOT ICKiCNORCU

EMUDVSOSCCNtRC13
E M U C 2 O C 1 .R 0 0

IC/RD11 IC3/RD10 IC2RDS>


IC .R D S IW T4/RA15

tZZ
83 d

SOI2>CNaG7 d
S D O Z 'C N -.g'R G S d M CLR I S S /C N U < R G 3 d

IHT&RAM

Vss

V s s d

dsPlC30F6013

OSC2/CIKG/RC1S OSC1.CLXI
vas

Veo I d 1 N T 1 iR A 2 C U
IN T 2 R A 1 3

1ZZ

SCURG2
S D A 'R G 3

AH&yCM7/RBS d A tM .C N & R & d A fC C N M ? B 3 d A K & S S A .V C m C N 4 .-R a 2 d P G G E M U C /A M I/C N iR B '- d PjtMEMUClAM&lCN2>RB0

EMUC3-SCK1/1N7IVRFB SDI1JRF7
E M U B 3 ;S D 01 iR F S

U1RX FF2 20 UmORFS

EZZ

saaaajs&asssisissss&sss

UUUUUUUUUUUUU'U
o s # o o < 0 0 6 0 -a a w rt ^

H f $<<{51 ^ =5

> >22D>^(fleO)<no

S< S z z z z py <

%% % % %*2*

u s a :

Figura 2.12.

El diagrama de conexiones correspondiente a los modelos dsPIC30F5013 y dsPIC30F6014 so se diferencia del dsPIC30F6013 en las patitas 1, 78, 79 y 80 que soportan las funciones del CODEC que poseen slo los primeros.

CONTROLADORES DIGITALES DE SEALES (DSC)

27

NOM BRE D E LAS PATITAS


KAn RBn RCn RDn RFn RCn
V lJ!)

D IR EC C I N E/S
E/S

D ESCRIPCI N
PATITAS DE E/S DIGITAL l ) H A PUERTA A PATITAS DE E/S DIGITAL DE LA PUERTA B PATITAS DE E/S DIGITAL DE LA PUERTA C PATITAS DE E/S DIGITAL DE LA PUERTA D PATITAS DE E/S DIGITAL DE LA PUERTA F PATITAS DE E/S DIGITAL DE LA PUERTA G VOLTAJE POSITIVO PARA L G IG \ Y E/S

E/S
E/S

E/S E/S
ALIMENTACIN

y ss
A V dd

ALIMENTACIN ALIMENTACIN ALIMENTACIN ALIMENTACIN ALIMENTACIN E E

' TIERRA PARA LGICA Y E/S


VOLTAJE POSITIVO PARA M D U LO ANALG ICO TIERRA PARA M D U l O ANALG ICO ENTRADA VOLTAJE REFERENCIA + ANALGICO ENTRADA VOLTAJE REFERENCIA - ANALGICO INTERRUPCIN EXTERNA n CANALES ANALGICOS DE ENTRADA ENTRADA/SALIDA RELOJ EXTERNO ENTRADAS DE NOTIFICACIN DE CAMBIO PATITAS PARA INTERFAZ DE CONVERSIN DE DATOS PATITAS DE RECEPCIN/TRANSMISIN DE CAN I Y CAN2 PATITAS PARA EL CANAL DE COM UNICACIN ICD ENTRADAS DEL M D U LO DF CAPTURA ENTRADA/SALIDA DEL OSCILADOR DE CRISTAL ENTRADA/SALIDA OSCILADOR 32KHz BAJA POTENCIA ENTRADAS A - B FALTA COMPARADOR CANALES DE SALIDA DEL COMPARADOR PATITAS PARA PROGRAMACIN SERIE ENTRADA RELOJ EXTERNO TIMER n RECEPCIN/TRANSMISIN UAR11 Y UART2 PATITAS PARA M DULOS SPI1 Y SPI2

AVss

vrVREf
INTn An CLK1/CLK0 CNn COFS - CSCK - CSDI - CSDO C1RX - CTTX - C2RX - C2TX EMUxx ICn OSCI - OSC2

E/S

E/S E/S E/S E E/S

s o s a - SOSC2 OCFA - OCF8


OCn PCD - PGC TnCK U1RX - U'ITX - U2RX - U2TX SS1 -SS2 -SCK1 - SCK2 - SDII SDI2 -S D 0 1 - S D 0 2

E/S
E

s
E/S E E/S E/S

Frgura 2.13. Smbolo , direccin y descripcin de las patitas ms significativas de los encapsulados de los dsPIC30F.

1 3 . LA F A M IL IA dsPIC33F D voltaje de alimentacin admite un rango comprendido entre 2 y 3,6 VDC. El rango de tempera a s idntico a los dsPIC30F. El rendimiento mximo alcanza los 40 MIPS cuando el voltaje de ali mentacin tiene un valor de 3,3 VDC. (Figura 2.14.) Los aspectos ms destacables que incorporan los dsPIC33F son la ampliacin en el nmero de p a a s de E/S, la capacidad de la memoria FLASH que alcanza 256 KB, se mantienen los perifri cos, la disponibilidad del doble de interrupciones, SRAM de hasta 30 KB. No disponen de memon a EEPROM. Tienen un nuevo modo de bajo consumo DOZE y un nuevo Controlador DMA de 8 canales, que serve para no utilizar a la CPU en la transferencia de datos entre perifricos y la memoria.

28

dsPIC. DISEO PRCTICO DE APLICACIONES

RECURSO
Memoria de Programa FLASH Memoria de Datos RAM Memoria de Dalos EEPROM Temporizadores de 16 bits M dulo de Captura M dulo Comparador / PWM Conversor A/D de 10 bits Conversor A/D de 12 bits UART SP1 ( 8 - 1 6 bits)

R A N G O DE VALORES
Hasta 256 KB Hasta 30 KB No Dispone Hasta 9 Hasta 8 entradas Hasta 8 salidas 2.2 Mbps, hasta 32 canales 1Mbps, hasta 32 canales Hasta 2 mdulos Hasta 2 mdulos Hasta 2 mdulos

i2 crM
QEI Interfaz CODEC CAN

1
1 Hasta 2 mdulos

Figura 2.14.

Tabla que presenta las caractersticas ms importantes de la familia dsPIC33F.

En el modo DOZE todos los osciladores funcionan, pero a muy poca frecuencia, reduciendo de esta forma el consumo.

2.5.1. Modelos de la familia dsPIC33F

M icrochip ha clasificado a los 27 modelos de la familia dsPIC33F que actualmente fabrica y co mercializa en dos categoras atendiendo a su aplicacin ms apropiada.

1a Dispositivos dsPIC33F de propsito general. 2.a Dispositivos dsPlC33F para el control de motores y sistemas de alimentacin.

2.5.2. Dispositivos dsPIC33F de propsito general

Los dsPIC33F de propsito general son ideales para una amplia gama de avanzadas de MCU de 16 bits embebidos y en concreto, las variantes con interfaces CODEC son idneas para aplicaciones de tratamiento de la voz y audio. Este grupo est formado por 15 modelos diferentes. (Figura 2.15.)

2.5.3. Dispositivos dsPIC33F de control de motores y sistemas de alimentacin

La categora de control de motores ofrece una gran variedad de aplicaciones relacionadas con el go bierno de motores, como los de induccin, de fase simple o trifsicos y los de corriente continua. Tambin son muy apropiados para la gestin de los sistemas de alimentacin ininterrumpibles, conversores, mdulos para la correccin del factor de potencia, telecomunicaciones u otro equipa miento industrial. Este grupo est formado por 12 modelos diferentes. (Figura 2.16.)

M O D ELO

PATITAS

FLASH M EM ORIA

M D. SRAM CDM A Ch# TIM ER M D . COM P. PWM ESTND.


8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1

PROGRAM A KBYTES KBYTES


64 64 64 128 128 128 256 64 128 64 64 128 128 256 256 8

16-BITS CAPT.

CO D EC INTERF.

A/D 10-BIT 500KBPS


IADC,18ch,1S/H 1ADC,18ch,1S/H 2ADC,18ch,2S/H 1ADC,18ch,1S/H 1ADC,18ch,1S/H 2ADC,18ch,2S/H 1 ADC,18ch,1 S/H 2ADC,18cli,2S/H 2ADC,18ch,2S/H 1ADC,18ch,1S/H 2ADC,18ch,2$/H 1ADC,18ch,1S/H 2ADC/18chr2S/H 1ADC,18ch,15/H 2ADC,18ch;2S/H

UART

sp| T M

r c rM CAN

PATITAS E/S (MX)

CD. ENCAPS.

ds.PI G3 3 FJ64G P2 06 dsPIC33FJ64GP306 : dsPIC33 FJ64GP706 dsPIC33Fjl 28GP206 dsPIC33FJ128GP306 dsPIC33FJ128GP706 dsPIC33FJ256GP506 dsPIC3 3 FJ64C P708 dsPIC33FJ128GP708 dsPIC33 FJ64G P310 dsPIC33FJ64GP710 dsPIC33 FJ128GP310 dsPIC33FJ 128GP710 dsPIC33FJ256GP510 dsPIC33FJ256GP710

64 64 64 64 64 64 64 80 80 100 100 100 100 100 100

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

*
2 2 2 2 2 2 2 2 2 2 2 2 2 2

16 16
8

' " -i 2 2 2 2 2 2 2 2 2 2 2 2 2 2

2 2 1 2 2

53 53 53 53 53 53 53 69 69 85

PT PT PT PT PT PT PT PT PT,PF PT^PF PT, PF PT,PF PT,PF PT,PF i

16 16
16 16 16 16 16 16 16 16 30

1 ,
1 1 1 1 1 1 1 1 1

2 2 1 2

85 85 85 85 85

Figura 2.15. Principales caractersticas de los 15 modelos que componen los dsPIC33 de propsito general.

3 0
dsPIC. DISEO

FLASH M O D ELO MEM. RAM CD M A TIMER M D. PATITAS Ch# 16-BITS CAPT. PRO GR. KB KBYTES
ds Pl 0 . 3 FJ64 G P2 0 6 dsPIC33FJ64GP306 dsPIC33FJ64GP706 ds.PIC33 F J128GP206 dsPIC33FJ I28GP306 dsPIC33FJ128GP706 dsPIC33FJ256GP506 dsPIC33FJ64GP708 dsPIC33FJ128GP708 dsPIC33 FJ64GP310 dsPIC33FJ64GP710 dsPIC33 FJ128GP310 64 64 64 64 80 80 100 100 100 100 100 100 64 64 128 128 64 128 64 64 128 128 256 256 8 16 8 16 8 16 8 16 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8

M D. CO N TR. CO D IF. COMP. M OTOR PWM CUA D RATURA PWM ESTND.


8 8 8 8 8 8 8 8 8 8 8 8 8ch 8ch 8ch 8ch 8ch 8ch 8ch 8ch 8ch 8ch 8ch 8ch SI SI SI SI SI SI SI SI SI SI SI SI

A/D 10-BIT 1.1 MBPS


1A/D,16Ch,4S/H 2/D,16Ch,8S/l 1 1A/D,16Ch,4S/H 2A/D,16Ch,8S/H IA/D,18Ch,4S/H 2A/D,18Ch,8S/H 1A/D,24Ch,4S/H 2A/D,24Ch,8S/H 1A/D,24Ch,4S/H 2A/D,24Ch,8S/H 1A/D,16Ch,4S/H 2A/D,24Ch,8S/H

UART SPI |2C CAN

PATITAS CD. E/S ENCAPS. (MX)


53 53 53 53 69 69 85 85 85 85 85 85 PT PT PT PT PT PT PT, PF PT ,PF PT, PF PT, PF PT, PF PT, PF

PRCTICO

2 2 2 2 2 2 2 2 2 2 2 2

2 2 2 2 2 2 2 2 2 2 2 2

2 2 2 2 2 2 2 2 2 2 2

1
1 1 1 1 1 2 1 2 1 2

D E APLICACIONES

16
16

i 20

Figura 2.16.

Principales caractersticas do los 12 modelos que componen los dsPIC33F de control de motores y sistemas de alimentacin.

CONTROLADORES DIGITALES DE SEALES (DSC)

31

Diferencias entre dsPIC30F y dsPIC33F


A pesar de ser muy similares, existen algunas diferencias apreciables entre ambos DSC. El rango de voltajes soportado por cada uno es diferente, as como el voltaje ptimo para su mejor rendimiento. Les dsPTC30F tienen como tensin nominal 5VDC y los dsPIC33F 3.3VDC. Tambin difieren en las patas de E/S y la memoria FLASH que alcanza 144 KB en los 30F y 256 KB en los 33F. Los 33F ;.3iecen de EEPROM , pero su SRAM puede llegar a 30 KB, mientras que en los 30F no superan los ' KB. Finalmente, los dsPIC33F disponen del doble de interrupciones y un Controlador de DMA. En la tabla de la Figura 2.17 se representan las principales diferencias existentes entre las fami^ del dsP!C30F y dsPlC33F:

dsPIC33F
26 modelos disponibles 27 modelos disponibles Controlador de D M A (8 canales) 5 temporizadores 9 temporizadores Modos de trabajo con baja energa : 1. IDLE 2. SLEEP 3. DOZE (modo de frecuencia ms baj) Alimentacin de 2 a 3,6 V Rendimiento: 40MIPS a 3,3 V Muchos vectores de interrupcin (118) Memoria FLASH de 256 KB Memoria SRAM de 30 KB Ms perifricos

Modos de trabajo con baja energa : 1. IDLE 2.SLEEP

Alimentacin de 2 a 5,5 V Rendimiento: 30MIPS a 4,5 o 5,5 V Pocos vectores de interrupcin {62) Mem oria EEPROM Mem oria f LASH de 144 KB Mem oria SRAM de 8 KB Abundantes perifricos

Frgura 2.17. Diferencias destacables entre las familias dsPIC30F y dsPIC33F.

2.6. HERRAMIENTAS DE DESARROLLO SOFTWARE

rara mantener la continuidad a los diseadores con PIC MCU y facilitar su transicin a los DSC, Microchip proporciona un paquete de herramientas software para estos ltimos muy sim ilar a las utilizadas con los microcontroladores clsicos. Todo el software se cimienta en el conocido entorno integrado MPLAB IDE, que consiste en un sistema lgico gratuito con un Ensamblador MPLAB ASM30, un simulador software S1M30, un compilador de C, MPLAB C30, y el nicializador Grfico de Programas MPLAB VDI. (Figura 2.18.) l a mayor parte de estas herramientas pueden recogerse libremente desde el sitio de Microchip en internet. El MPLAB IDE gestiona todas las etapas del diseo software de un proyecto y se adapta a las herramientas hardware de Microchip y otras segundas fuentes. Corre en sistemas operativos W in dows XP, 2000, Me, 98SE y NT.

32

dsPIC DISEO PRCTICO DE APLICACIONES

Para el desarrollo y anlisis de algoritmos D SP se dispone de la herramienta dsPICworks que entre sus posibilidades es capaz de disear filtros, generar seales, proporciona operaciones para procesar seales aritmticas y digitales, tiene capacidad de mostrar y cuantificar elementos de una, dos y tres dimensionales. Una extensa oferta de libreras, muchas gratuitas, estn a disposicin de los usuarios para facili tar el diseo de proyectos, tales como los que soportan algoritmos DSP, de reconocimiento de voz, driver para perifricos, CAN, protocolo TCP/IP, MODEM embebidos, etc.

Figura 2.18. Ventana del programa MPLAB VDf que presta una gran ayuda en la fase de inicializacin de los programas con DSC, al aportar un entorno grfico para Ja configuracin de los recursos que intervienen.

2.7. HERRAMIENTAS DE DESARROLLO HARDWARE La arquitectura abierta de los productos de M icrochip y su generosa poltica comercial han conse guido inundar el mercado de interesantsimas herramientas hardware y software de segundas fuen tes que optimizan el desarrollo de las aplicaciones con los productos de este fabricante. En la foto grafa de la F igura 2.19 se m uestra el program ador universal de PIC y dsPIC denom inado P IC Burner de la empresa Ingeniera de Micros is temas Programados S. L. Una herramienta muy eficaz de M icrochip es el Programador y Depurador en Circuito MPLAB 1CD-2 que adems de grabar diversos microcontroladores y dsPIC depura el cdigo desarrollado en Ensamblador o C. (Figura 2.20.) M icrochip com ercializa un programador profesional denominado MPLAB PM3 y el Emulador en Circuito MPLAB ICE 4000. Para agilizar el entrenamiento y aprendizaje de los usuarios en el manejo de los dsPIC, M icro chip ha desarrollado un conjunto de tarjetas especficas para desarrollar proyectos en reas como el control de motores, la conectividad, etc. (Figura 2.21.)

CONTROLADORES DIGITALES DE SEALES (DSC)

33

Figura 2.19. Fotografa del programador universal de PIC y dsPIC, de bajo precio , fabricado por Ingeniera de Microsistemas Programados S.L.

Figura 2.20. Fotografa del MPLAB IC.D-2 que es capaz de grabar y depurar en circuito los modelos dsPIC

Figura 2.21. Fotografa de una tarjeta de entrenamiento fabricada por M icrochip .

34

cJsPIC DISEO PRCTICO DE APLICACIONES

2.8. APLICACIONES RECOMENDADAS

El fabricante ha clasificado en 6 reas las posibles aplicaciones de los DSC. A) CONTROL D E MOTORES

Bombas industriales. Lavadoras y aspiradoras. Equipos de gimnasia. Tensores de cinturones de seguridad. Calefaccin, ventilacin y aire acondicionado. Refrigeracin. Herramientas elctricas. Apertura de puertas. Control de estabilidad.

Figura 2.22. Los pretensores de cinturones de seguridad son una aplicacin recomendada para los dsPIC.. Cortesa de Citron.

B) CONTROL D E SENSORES Sensores de torsin. D epresin. De vibraciones. De golpes. De lluvia. De fallos en la red elctrica. De rotura de cristales. Sensores qumicos y de gases. Deteccin PIR avanzada 2-D.

CONTROLADORES DIGITALES DE SEALES (DSC)

35

r:^ura 2.23. El sensor de seguridad de la figura posee un DSP efue le permite incluso distinguir a una persona de una mascota. Cortesa de SmartHome.

C) AUTOM OCIN Control de potencia. Control de estabilidad y balanceo. Caja de cambios y embrague electrnico. Direccin hidrulica asistida elctricamente. Cancelacin de ruido en el habitculo. Airbag. Control de ignicin. Sensor de presencia de ocupantes. Control del combustible.

Figura 2.24.

El airbag es una aplicacin recomendada para los dsPIC. en automocin. Cortesa de Volvo.

D) +

CONECTIVIDA D EN INTERNET

M onitorizacin remota. Contadores automticos de agua y gas. Instrumentacin mdica remota. Sistemas de seguridad. Mquinas expendedoras. Diagnstico industrial remoto.

36

dsPIC. DISEO PRCTICO DE APLICACIONES

Figura 2.25. Los dsPIC tienen un vasto campo de aplicacin y control por Internet de las mquinas ex pendedoras. Imagen cortesa de ATM Inc..

E) AUDIO Reconocimiento de voz. Altavoces telefnicos. Redes distribuidas de megafona. Efectos especiales en instrumentos musicales. Cancelacin de ruidos. Reproduccin de sonido digital. Auriculares para la eliminacin de ruidos. Puertos de comunicacin para manos libres. M icrfono activado por la voz.

Figura 2.26. Los aparatos de audio para la reproduccin digital del sonido son productos en los que se utilizan DSP. Cortesa de BENQ.

CONTROLADORES DIGITALES DE SEALES (DSC)

37

F, GESTIN YM ONITO RIZACI N DE SISTEM AS D E AUM ENTACI N Convertidores AC-DC. Convertidores DC-AC. Fuentes de alimentacin ininterrumpibles (UPS). Inversores. Vehculos elctricos. Correccin del factor de potencia. Monitorizacin de la alimentacin en servidores. Gestin de la alimentacin y ahorro de consumo. Deteccin de fallos.

Figura 2.27. Las fuentes de alimentacin ininterrumpibles (UPS) constituyen un campo de aplicacin m uy interesante para los dsPIC. Cortesa de Craftsmans Electric.

CAPTULO

Arquitectura de la CPU

3.1. DESCRIPCIN DEL DIAGRAMA POR BLOQUES

En la Figura 3.1 se presenta el diagrama por bloques correspondiente a la arquitectura inlema del modelo dsPlC3F6010 que se le puede considerar uno de los ms representativos. Encapsulado con SO patitas en formato TQ FP dispone de casi todos los recursos posibles y cualquier otro componente de la familia contendr slo una parte de los elementos del mencionado dispositivo. El diagrama de Figura 3.1 puede dividirse en 6 bloques principales:

1 Memoria de datos. 2 Memoria de programa. 3. Camino de datos. 4. Puertas de E/S muitifuncin. 5. Perifricos diversos. 6 Recursos para la gestin del sistema y de la energa.

La memoria de datos RAM (SDRAM) se estructura en dos espacios, llamados X e Y, que per miten acceso simultneo y que pueden alcanzar hasta 8 KB de capacidad en el modelo dsPIC30F, siendo el tamao de todas sus posiciones de 16 bits. Tambin existe una memoria de datos no vol til de tipo EEPROM. En los 33F no hay EEPROM pero la SRAM puede alcanzar 30KB. Para una instruccin del tipo MCU (no DSP) los espacios X e Y se convierten en un solo espa cio lineal. Las instrucciones se alojan en la memoria de programa de tipo FLASH cuyas posiciones tienen un tamao de 24 bits, igual que el de la mayora de las instrucciones. La memoria de instrucciones del modelo dsPIC33F es algo ms rpida que la del dsPTC30F. La memoria FLASH de los 33F tra baja a 3,3 V, con el inconveniente de que slo puede ser escrita y borrada 1000 veces (Endurance). La memoria de programa puede alcanzar 144 KB como mximo. El Camino de Datos donde se ejecutan las instrucciones y se procesan los datos se basa en un banco de 16 registros de trabajo (W) de 16 bits de longitud cada uno, que alim entan una ALU
39

40

dsPIC DISEO PRCTICO DE APLICACIONES

Figura 3.1.

Diagrama p o r bloques correspondiente a la arquitectura interna d el dispositivo dsPJC30F6010, considerado como uno de los ms completos y representativos.

ARQUITECTURA DE LA CPU

41

- pica de MCU, un M otor DSP que sirve para realizar las operaciones DSP de 40 bits y una uni dad de divisin. Las 7 puertas que agrupan las lneas de E/S para la comunicacin con el exterior (PUERTA A, PUERTA B, PUERTA C, PUERTA D, PUERTA E, PUERTA F y PUERTA Q) se caracterizan por a p o rta r varias funciones multiplexadas. En cuanto a perifricos y recursos auxiliares contenidos en d dsP!C30F6010 abarcan a todos los posibles en la familia: Conversor AD, Mdulo de Captura, Mdulo de Comparacin, PWM para el control de motores, Codificador de Cuadratura, Mdulos de comunicacin (UART, SPI, I2C y CAN), Osciladores, Perro Guardin, etc. Tambin existen recur sos complementarios para el manejo de la energa y la tensin de alimentacin.

3.2. LAS MEMORIAS

Bajo una arquitectura Harvard mejorada la CPU soporta un potente repertorio de instrucciones, la mayora de 24 bits de longitud y algunas que realizan operaciones especficas DSP. El dircccionarniento de la memoria de programa corre a cargo del Contador de Programa que consta de 23 bits, iliendo siempre cero el de menos peso e ignorndose el de ms peso, con lo que se puede direc::onar un espacio mximo de 4 millones de palabras de instruccin de 24 bits.

0X0001

0X 0000

M EMC^'A CERCANA

S < 0

0X07FF

0X 07FE 0X 0800

MAX
64 KB.

ESPACIO V

NO
IM P L E M E N T A D O

NUNCA IMPLEMENTADO

0XFFFE

Figura 3.2.

Memoria de datos de los dsPIC.

42

dsPIC. DISEO PRCTICO DE APLICACIONES

El espacio mximo que puede alcanzar la memoria de datos es de 64 KB o 32 K palabras de 16

bits. El dsP!C30F6010 dispone de una memoria de datos de 8 KB que se distribuye en dos espacios llamados X e Y, que funcionan de forma independiente al tener sus propias Unidades de Generacin de Direcciones (AGU). La mayora de las instrucciones tipo MCU operan slo con la AGUX, que combina los espacios X e Y en uno solo unificado. Sin embargo, algunas instrucciones como la MAC (Multiplicar y Acumular), tipo DSP, dividen el espacio de la memoria de datos en dos espa cios X e Y independientes, que posibilitan el acceso simultneo en lectura y la reduccin del tiem po de ejecucin de algunas instrucciones. Una caracterstica especial de los dsPIC es su capacidad de guardar datos en la memoria de pro grama, existiendo dos mtodos para acceder a ellos.

'
a) Los 32 KB superiores del espacio de la memoria de datos pueden mapearse en la mitad inferior > '-W del espacio de la memoria de programa como 16 K palabras de 24 bits cada una. Slo se puede acceder a los 16 bits de menos peso de cada palabra de instruccin. A esta posiblidad se le de nomina PSV (Visibilidad del Espacio de Programa). b) Tambin existe la posibilidad de acceder indirectamente al espacio de la memoria de programa utilizando un registro de trabajo y las instrucciones especiales de lectura y escritura de Tabla.

VECTCft RESET

M E M O R IA U SU AR IO

T A B L A V E C T O R E S IN TER R U P C IO N

(2M B )

T A B L A A L T E R N A T IV A V E C T O R E S DE IN TER R U P C IO N

M E M O R IA P R O G R A M A F LA SH

M E M O R IA OF D A T O S E E PR O M

7FF F F E

a o c o o R E G IS T R O S C O N F IG U R A C I N . M E M O R IA C O N F IG U R AC I N (2M S

------- -------------------- 1 --------: __________ ____


R E G IS T R O S ID EN T IF IC A C I N

Figura 3.3.

Memoria de instrucciones de los dsPIC.

Para el direccionamiento de los datos se pueden utilizar los modos clsicos de todos los proce sadores: Inmediato, Inherente, Directo, Relativo, Registro Directo, Registro Indirecto y Registro de

ARQUITECTURA DE LA CPU

43

Desplazamiento. Adems, los espacios X e Y permiten el modo de direccionamiento modular o cir cular y slo el espacio X soporta el de inversin de acarreo o bit reverse, ambos muy interesantes para la rpida implementacin de los algoritmos DSP. Hay bastantes instrucciones en el repertorio que son capaces en un ciclo de instruccin de leer un dato de la memoria de datos, leer un registro del banco de registros, escribir un dalo en la me moria y leer la memoria de instrucciones, lo que posibilita que existan instrucciones que manejen tres operandos (C = A + B) y se ejecuten en un ciclo de instruccin.
3.3. EL C A M IN O DE DATOS

Para combinar las funciones aritmticas de una potente MCU de 16 bits con las especficas de un DSP se cuenta con los siguientes recursos: banco de 16 registros de trabajo W de 16 bits cada uno, ALU para MCU, M otor DSP y una unidad para la divisin. (Figura 3.4.)

Figura 3.4.

Esquema del Camino de Datos.

La ALU de 16 bits interviene en las operaciones aritmticas propias de las instrucciones MCU. El M otor DSP contiene un multiplicador rpido de 17 x 17 bits, dos Acumuladores A y B de 40 bits cada uno, un Sumador/Restador de 40 bits y un potente Registro de Desplazamiento de 40 bits bdireccional. Con los recursos comentados, una instruccin DSP, como la MAC, puede leer de la me moria dos operandos simultneamente, mientras que multiplica dos registros W en un solo ciclo. Una parte muy importante del Motor DSP es el banco de registros de 16 bits cada uno. Se llama banco de registros de trabajo y cada uno tiene una funcin concreta como se puede ver en la tabla de la Figura 3.5.

44

dsPIC. DISFO PRCTICO DE APLICACIONES

R egistros WO W0-YV3 W4-W7 W8-W9 VV9-VV10 W 12 W 13 W 14 W 15

D e scrip ci n Registro de trabajo por defecto (VVRFG).


Registros usados para contener resultados de las operaciones DIV y MUL. Registros utilizados para guardar operandos de las instrucciones MAC. Registros usados para direccionar operandos de la instruccin MAC en el espacio X. Registros usados para direccionar operandos de la instruccin MAC en el espacio Y. Offset de las instrucciones MAC. Registro de POST- ESCRITURA del Acumulador. Marco de la pila. Puntero de la pila. Por defecto, la direccin de la cim a de la pila ser la 0x0800.

Figura 3.5.

Funciones concretas de los registros existentes en el banco.

Aunque el procesador no admite la segmentacin de su cauce, utiliza un mecanismo de prebsqueda con el que accede y predecodifica las instrucciones en el ciclo anterior al de su ejecucin, eje cutando gran parte de las instrucciones en un ciclo y optimizando el rendimiento. Las nicas ins trucciones que tardan en ejecutarse ms de un ciclo son:

a) Las instrucciones destinadas al control del flujo (saltos, llamadas y retornos) que ocupan dos ciclos al tener que limpiar y volver a llenar el Registro de Instrucciones IR y el buffer de prebsqueda. b) Las instrucciones que deben acceder a un operando en el espacio de la memoria de programa. c) Las instrucciones que manejan dobles palabras.

3.4.

PUERTAS DE E/S M U LTIFU N C I N

El dsPIC30F6010 posee 7 puertas de E/S cuyas lneas soportan varias funciones multiplexadas, ade ms de la propia lnea de E/S digital. En la Figura 3.1 se aprecia la existencia de 68 lneas de E/S multifuncin, de las cuales 4 pertenecen a PUERTA A, 16 a PUERTA B, 5 a PUERTA C, 16 a PUERTA D ; 10 a PUERTA E, 9 a PUERTA F y 8 a PUERTA G. Como dicho modelo es uno de los ms completos de la familia, los restantes disponen de un subconjunto de las mencionadas puertas en funcin de su patillaje. Los dsP!C33F poseen al igual que el dsPIC30F6010, 7 puertas de E/S, cuyas lneas en este caso tambin soportan varias funciones multiplexadas, adems de la propia lnea de E/S. Los dsPIC33F pueden tener 87 lneas de E/S multifuncin, de las cuales 14 pertenecen a PUERTA A, 16 a PUER TA B, 8 a PUERTA C, 16 a PUERTA D, 10 a PUERTA E, 11 a PUERTA F y 12 a PUERTA G. Cada lnea de E/S controla varias funciones multiplexadas en el tiempo, la m ayor parte de ellas destinadas a m anejar los perifricos integrados, quedando algunas dedicadas al control de los vol tajes de alimentacin, las interrupciones externas, las seales de reloj y las seales del sistema. Una de las lneas de E/S que maneja ms funciones diferentes es la RBO, que en la Figura 3.1 vie ne representada con la nomenclatura: PGD/EMUD/AN0/CN2/RB0, que significa que soporta 5 funciones que se describen en la tabla de la Figura 3.6.

ARQUITECTURA DE LA CPU

45

Funciones PCD EMUt) ANO CN2 RBO

Descripcin Lnea de entrada y salida de dalos en la grabacin y lectura serie del disposilivo. Patita de entrada y salida de los datos principales del m dulo l2C. Canal analgico de entrada nmero 0. Notificacin de cambio de estado correspondiente a la entrada 2. Lnea de E/S digital bidireccional 0 de PUERTA B.

Figura 3.6.

Descripcin de las diferentes funciones de la RBO.

3.5.

PERIFRICOS INTEGRADOS

Los perifricos que se incorporan a cada uno de los modelos de la familia dsPIC30F son los ms adecuados para las aplicaciones a las que se destinan.

PERIFRICOS DE LOS dsPIC30F Perifricos analgicos Con versor AD de 10 bits Conversor AD de 12 bits Perifricos digitales 5 temporizadores de 16 bits Mduio de Captura con 8 entradas Mdulo de Comparacin con 8 canales de salida Interfaz para Codificador de Cuadratura Control de Motores PWM Mdulos de comunicacin UARJ (2) SPI (2)

?C
CAN (2)

PERIFRICOS DE LOS dsP!C33F Perifricos analgicos Conversor AD de 10 bits Convrsor AD de 12 bits Perifricos digitales 9temporizadores de 16 bits Mdulo de Captura con 8 entradas Mdulo de Comparacin con 8 canales de salida Interfaz para Codificador de Cuadratura Control de Motores PWM Controlador de DMA

46

dsPIC. DISEO PRCTICO DE APLICACIONES

3.WIRESPI'M(2)

f! $
.a

Mdulo DCI (Data Converter lnlerface)(2)

El conversor AD de 10 bits tiene + /- 1 bit de exactitud y 16 entradas analgicas con 4 amplificadores Sdjnple & H o d . El tiempo estndar de convrsin es de 2 js/500 ksps. El conversor AD de 12 bits de resolucin aunque es ms preciso tambin es ms lento, 10 jns/100 ksps. El mdulo PWM para el control de motores proporciona todas las seales necesarias con 4 ge neradores PW M con dos patitas de E/S cada uno. Disponen de una amplia base de tiempos y dos pa titas para deteccin de tallos programables. La interfaz para los codificadores pticos incrmentales (QE1) para la medida de la velocidad y el sentido de giro del eje de un motor proporciona todas las seales requeridas para su correcta adap tacin. (Figura 3.7.)

Figura 3.7.

Esquema de funcionamiento del sistema que alimenta al codificador ptico incremental o de cuadraturi (QEI).

Los dsPJC30F contienen hasta 5 temporizadores de 16 bits, mientras que los dsPIC33F pueden dis poner hasta de 9 de 16 bits, algunos de los cuales se pueden concatenar para formar otros de 32 bits. Finalmente, los posibles mdulos de comunicacin son muy diversos en los dsPTC y suponen un alto rendimiento en su conectividad. Destacan los mdulos UART, SP, 2C, CODEC y CAN.

3.6. GESTIN DEL SISTEMA Y DE LA ENERGA

Esta seccin del procesador se muestra en la Figura 3.8 y se encarga de la generacin de las seales de reloj, el control y optimizacin de la energa y la generacin de las acciones adecuadas ante los fallos.

ARQUITECTURA DE LA CPU

47

Figura 3.8.

Esquema simplificado de la seccin encargada de la gestin del sistema y do la energa.

En la generacin de las seales de reloj se utiliza un cristal de cuarzo o un resonador externo, o r:en un circuito RC interno. El temporizador de encendido retrasa un poco el tiempo de puesta en marcha del procesador cuando se le aplica la energa para dar tiempo a que se estabilice el valor de la tensin de alimenta cin aplicada. Tambin el temporizador de arranque del oscilador tiene la misin de retrasar el fun cionamiento del procesador para que se estabilice la frecuencia de trabajo del oscilador principal. La activacin de la patita M CLR# (Master Clear Reset) puede generar un Reset. Tambin se consigue un Reset al aplicar el voltaje de alimentacin (POR: Power On Reset) o cuando la tensin e alimentacin del dispositivo V D baja hasta un valor determinado y vuelve a subir al cabo de un instante (BOR: Brown Out Reset). Existe un temporizador especial llamado Perro Guardin similar al que existe en los MCU que provoca un Reset cuando se desborda y resuelve las prdidas de control del programa en curso. Otro 'ocurso muy interesante es un detector de voltaje bajo. Finalmente, el procesador dispone de dos modos de trabajar con bajo consumo de energa: 1DLE y SLEEP. El dsPIC33F adems de estos dos estados tambin dispone de otro llamado DOZE. el cual aumenta temporalmente el ciclo de instruccin del procesador al bajar la frecuencia de funcio namiento, reduciendo de esta manera el consumo de energa.

ino Datos

- 1 . IN T R O D U C C I N

El Camino de Datos de un procesador es la seccin encargada de realizar todas las operaciones que eva la instruccin en curso. Soporta funciones aritmticas, lgicas, de desplazamiento, movinto, rotacin y manipulacin de bits entre otras. En el caso de los DSC el Camino de Datos es _z de manejar un repertorio de instrucciones que consta de las propias de una MCU de 16 bits, to a otras especficas de un DSP y se organiza en 4 bloques principales:

1. 2 3. 4.

BANCO DE REGISTROS ALUDE 16 BITS MOTOR DSP UNIDAD DE DIVISIN

2 . EL BANCO DE REGISTROS W
r.m sta de 16 registros de 16 bits cada uno y se denominan W0-W15, pudiendo contener datos, di c c i o n e s y desplazamientos u offset, dependiendo de la instruccin que les utilice. Cada uno lieisignadas funciones diferentes. (Figura 4.1.) Como se indica en la Figura 4.1, algunos registros W actan con algunas instrucciones contenendo una informacin concreta, mientras otros asumen una funcin determinada. En los microcontroladorcs PTC (MCU) existen instrucciones que no especifican el registro de trafetjo que manejan y toman por defecto el que acta como Acumulador. Tambin sucede lo mismo los DSC, en los que se toma por defecto como W REG al registro WO. Como se muestra en el esquema de la Figura 4.2, el Banco de Registros comparte informacin b h i todos los bloques que componen el Camino de Datos.

50

dsPIC. DISEO PRCTICO DE APLICACIONES


15 W0

0
WREG IMPLCITO (ACUMULADOR)

RESULTADO MULYDIV

W1
W2 W3 W4

OPERANDOS INSTRUCCIONES MAC

W5 W6

W7 'W8
DIRECCIONES OPERANDOS MAC OFFSET INSTRUCCIONES MAC POST-ESCRITURA INSTRUCCIONES MAC PUNTERO MARCO PUNTERO PILA
W9 W 10 W11 W 12 W 13 W 14 W 15

g
BUS DE DATOS X

Figura 4.1.

Estructura del banco de registros de trabajo W.

SEALES DE CONTROL

ABj

UNIDAD DE DIVISIN

Figura 4.2.

El banco de registros Wes el destino y el origen de la informacin que comparten los blo ques del Camino de Datos y los buses X e Y

4.3. LA ALU DE 16 BITS

Las instrucciones lgico-aritm ticas correspondientes a la seccin MCU de los DSC las realiza una ALU de 16 bits que tambin controla 5 bits del Registro de Estado (SR) que actan como sealizadores del resultado. En la Figura 4.3 se presenta la ubicacin de dichos bits y su no menclatura:

EL CAMINO DE DATOS

51

SRH contiene los sealizadores para operaciones aritmtico-lgicas DSR mientras que SRL contiene los sealizadores para operaciones MCU.
REGISTRO DE ESTADO (SR)

figura 4.3.

El Registro de Estado (SR) contiene cinco bits sealizadores del resultado de la ALU pa ra operaciones MCU.

La ALU realiza operaciones con operandos de 16 bits de suma, resta, desplazam iento de un bit. otras de tipo lgico (AND, OR, EOR) y de com plem ento a 2. Como puede apreciarse en la Figura 4.4 la ALU recibe los operandos del banco de registros y de la memoria de datos a travs del bus de datos.

figura 4.4.

Esquema de conexionado de la Al.U.

Los operandos para la ALU pueden ser de 8 y de 16 bits. En las operaciones con 8 bits y para manKfier la compatibilidad con los PIC el resultado se reescribe con tamao palabra, no modificando el byte de ms peso y controlando los sealizadores para que acten para dicho tamao. Las instrucciones con operandos de tamao byte sobre registros de trabajo slo afectan al byte de menos peso.

52

dsPIC. DISEO PRCTICO DE APLICACIONES

Para facilitar el manejo combinado de instrucciones con operandos de 8 y de 16 bits hay dos ins trucciones especializadas, la de Extensin de Signo (SE), que toma el valor del byte cargado en el registro W o en la posicin de memoria y lo convierte en una palabra de 16 bits extendiendo el bit de signo y almacenando dicho valor en un registro W, y la instruccin de Extensin de Ceros (ZE), que pone a cero los 8 bits de ms peso de un registro W o de una posicin de memoria y el valor ob tenido lo carga en un registro W.

4.4. EL M O TO R DSP

Este bloque del Camino de Datos de los DSC se compone de un conjunto de recursos fsicos que tie nen la misin de soportar las instrucciones que conllevan operaciones complejas empleadas para re solver los principales algoritmos aplicados en el procesamiento digital de las seales. La instruccin MAC de M ultiplicar y Acumular es una de estas instrucciones tpicas, que se denominan instruc ciones DSP. El Motor DSP recibe los operandos desde el banco de registros W, pero dispone de sus propios registros para contener los resultados. Dado que slo existe un Decodificador de Instrucciones pa ra las tipo MCU y las tipo DSP y, por otra parte, las direcciones efectivas de los operandos proce den del banco de registros W, no es posible ejecutar de forma concurrente instrucciones MCU e ins trucciones DSP. Internamente el Motor DSP trabaja con 40 bits, pero externamente se relaciona mediante buses de 16 bits. En la Figura 4.5 se presenta el diagrama por bloques del M otor DSP con su conexionado prin cipal, que consta de los siguientes elementos:

1 . Multiplicador rpido de 17 x 17 bits. 2. Registro de desplazamiento. 3. Sumador/Restador de 40 bits. 4. Dos registros Acumuladores destino de 40 bits (A y B). 5. Lgica de redondeo. 6. Lgica de saturacin.

Las instrucciones DSP con dos operandos proporcionan estos ltimos al M otor DSP desde los re gistros W4, W5, W6 o W7. Los valores de dichos registros son prebuscados a travs de los buses X e Y en las instrucciones tipo MAC (MAC, MCS, MPY.N, ED, EDAC, CLR y MOVSAC). Para las restantes instrucciones DSP los operandos se reciben desde el bus de datos X. Tambin las instruc ciones MCU que utilizan el Registro de Desplazamiento reciben los operandos por el bus de datos X. Los resultados producidos en el M otor D SP se guardan en alguno de los Acumuladores A o B, si as se define en la instruccin, o bien en cualquier posicin de la memoria de datos a travs del bus de datos X. Las instrucciones MCU que emplean el Registro de Desplazamiento tambin sacan el resultado por el bus de datos X. Obsrvese en el esquema del M otor DSP que los caminos de entrada y salida con la CPU tienen 16 bits, pero internamente se opera con valores de 40 bits. El M otor DSP tiene la capacidad de realizar algunas operaciones (ADD, SUB y NEG) directa mente sobre el contenido de los dos Acumuladores A y B, sin necesidad de ms operandos.

EL CAMINO DE DATOS
MPX 3

53

M PX4

MPX 6

]_

ACUMULADOR B (40 BITS)

SUMAOOR

MPX 2

REGISTRO DESPLAZAMIENTO

RELLENO

CEROS

MULTIPLICADOR 17 x 1 7 BITS

CONVERSION 16 A 17 BITS

Figura 4.5.

Esquema general del M otor DSR

4.4.1. M u ltip lic a d o r

El multiplicador rpido de 17 x 17 bits es compartido por las instrucciones MCU y las DSP, siendo posible realizar multiplicaciones con signo y sin signo y generar resultados con nmeros enteros de 32 bits y con fraccinales tipo 1.31 (Q.31).

54

dsPIC. DISEO PRCTICO DE APLICACIONES

El multiplicador recibe datos de 16 bits y los convierte en 17 bits. Si los operandos tienen signo, la conversin se efecta extendiendo el bit de signo, y si no tienen signo, se extiende el valor con ceros. La conversin es transparente para el usuario y permite soportar multiplicaciones con y sin signo. (Figura 4.6.) O

Figura 4.6.

interconexin del m ultiplicador rpido de 17 x 17 bits.

El bit IF del registro CORCON establece si la operacin del multiplicador ser de tipo entero o fraccional en las instrucciones DSP: MAC, MSC, MPY, MPY.N, ED y EDAC. Sin embargo, el bit IF no interviene en las instrucciones MCU que usan el multiplicador (MUL, MUL.SS, M UL.UU, MUL.SU y MUL.US), las cuales siempre se realizan en modo entero. En las operaciones en modo fraccional el multiplicador escala el resultado un bit a la izquierda. El bit de menos peso del resultado siempre es cero. Tras un Reset las instrucciones DSP que usan el multiplicador se realizan en modo fraccional.

4 .4 .1 .1 . Representacin en m odo entero y en m odo fraccional La representacin de nmeros enteros se efecta en complemento a 2, donde el bit de ms peso es ,N -1 el de signo. El rango de un nmero entero con N bits abarca desde - 2 N 1 hasta 2;N 1 - 1. EJEMPLO 1 Qu valor representa el nmero entero de 16 bits 4001 expresado en hexadecimal? (Figura 4.7.) 0 : 0 0

Figura 4.7.

Valores que representan los bits del nmero entero 4001 en hexadecimal.

EL CAMINO DE DATOS

55

RESULTADO 4001 Hex. = 2 U + 2o = 16384 + /= 16385 EJEMPLO 2 Q u valor representa el nmero entero de 16 bits C002 H ex? (Figura 4.8.)

1 1 5 2 14

o o13

j o 'l;2

i 0 . 1 ... 2 10

0
!

0
28

0
2

0
2g

0
25

0
24

0
23

0
22

1
21

0 2o

2 11

2~

Figura 4.8.

Valores que representan los bits del nmero entero C002 Hex.

RESULTADO C W 2 Hex. = - 2 '5 + 214 + 2 ' = -32768 + 16384 + 2 = -16382 En los nmeros fraccinales se representa la parte fraccionaria en complemento a 2. El bit de ms reso es el de signo y se supone implcitamente que detrs del bit de signo est situado el punto de b parte fraccionaria. E l rango de un nmero fraccional de N bits en complemento a 2 est comrrendido entre -1 .0 y (1 - 2 ,_N). EJEMPLO 3 Qu valor representa el nmero fraccional de 16 bits 4001 Hex? (Figura 4.9.) O 0 j O
2 3 2a

m:

-2o.
Figura 4.9.

2 '1 2 '2

Valor que representan los bits correspondientes al nmero fraccional 4001 Hex.

RESULTADO -001 Hex. = 2-' + 2~'5 = 0,5 + 0,000030518 = 0,500030518 EJEMPLO 4 fi w Qu valor representa el nmero fraccional de 16 bits C002 Hex? (Figura 4.10.) ' , \y
o-10 o-11 2"'^ ^-12 2"1J 0 -13 o-14 o-15 2 '1U 2"11 2",/} 2

88L! TPf-

1
Figura 4.10.

::

0
2*4 2*5

O
2 'e

0
2

0 :0
2 3
o-9 2 'y

-2o. 2 1 2'2 23

Valor que representan los bits del nmero fraccional C002 Hex

RESULTADO C002 Hex. = -2 + 2 ' + 2 '14 = - 1 + 0,5 + 0,000061035 = -0,499938965

56

dsPIC. DISEO PRCTICO DE APLICACIONES

En la tabla de la Figura 4 .11 se ofrecen los rangos en modo entero y fraccional para nmeros de 16, 32 y 40 bits.

TAM A O

RA N G O M O D O ENTERO (-2n i a 2 n'- 1 )

RA N G O M O D O FRA CCIO N A L (-1.0 a 1 - 2 1N)

R ESO LU C I N M O D O FRA C C IO N A L

16

-32.768 HASTA 32.767

-1,0 HASTA (1-2*15) FORMATO Q. 15

3,052 x IO '5

32

-2.147.483.648 HASTA 2.147.483.647

-1,0 HASTA (1-23') FORMATO Q.31

4,657 x 10"

40

-549.755.813.888 HASTA 549.755.813.887

-256,0 HASTA (256-2 3) FORMATO Q.31 CON 8 BITS DE GUARDA 4,657 x 10''

Figura 4.11.

Tabla con los rangos en modo entero y fraccional de nmeros de 16, 32 y 40 bits.

4.4.2. Acumuladores A y B

El M otor DSP dispone de dos Acumuladores de 40 bits denominados ACCA y ACCB, en donde se guardan los resultados de las operaciones DSP que utilizan el m ultiplicador y que son MAC, MSC, MPY, MPY.N, ED y EDAC. Cada Acumulador se divide en tres campos, como se muestra en la Figura 4.12.
,31. ACCxU ACCrH 16.15. ACCxL 9

Figura 4.12.

Cada Acum ulador de 40 bits se divide en tres campos, que se implementan en 3 regis tros STR de la memoria de datos.

Para operaciones en modo fraccionario que utilizan los Acumuladores, el punto fraccional se si ta a la derecha del bit 31.
4.4.3. Sumador/Restador de 40 bits

El M otor DSP dispone de un Sumador de operandos de 40 bits con capacidad de restar, que puede realizar operaciones sobre los valores de los Acumuladores, as como con el valor que genera el multiplicador extendido en signo. (Figura 4.13.) El sumador puede opcionalmente negar uno de los operandos para implementar la resta como su cede con las instrucciones MSC (M ultiplicar y Restar) y MPY.N (M ultiplicar y Negar). Existen 6 sealizadores en el Registro de Estado (SR) que indican sobrepasamiento o saturacin en las operaciones realizadas por el sumador de 40 bits. (Figura 4.14.)

El. CAMINO DE DATOS


MPX3 MPX4

57

Figura 4.13. Esquema de conexionado del Sumador de 40 bits.

Figura 4.14. Situacin en el Registro de Estado de los 6 sealizadores del resultado de las operacio nes del Sumador de 40 bits.

Cuando el sealizador OA = 1 significa que se ha producido sobrepasamiento en los bits de guarda (32-39) de ACCA en la operacin efectuada por el Sumador de 40 bits. OB inform a de la misma situacin para ACCB, mientras que OAB es el resultado de la operacin lgica OR entre OA y OB. Se puede program ar el procesador para que cuando se active O A u OB se genere una excepcin de error aritmtico programando los bits OVATE y OVBTE del registro de control de interrupciones INTCON1<10:9>. ' Los sealizadores SA y SB informan que en la ejecucin de la ltima instruccin que ha usado el Sumador de 40 bits se ha producido saturacin en el resultado depositado en ACCA o en ACCB, respectivamente. Esto indica que se ha superado el mayor valor posible del rango (saturacin en el bit 31 para nmeros de 32 bits o saturacin en el bit 39 para nmeros de 40 bits). El bit SAB pro cede de la operacin lgica OR entre SA y SB.

58

dsPIC. DISEO PRCTICO DE APLICACIONES

Cuando no funciona el mdulo de Saturacin la activacin de SA o SB genera una condicin de sobrepasamiento catastrfico que puede generar una excepcin por error aritmtico activando el bit COVTE del registro TNTC0N1<8>. Estos sealizadores se actualizan cuando se realiza una instruccin DSP que modifica el valor de uno de los acumuladores ACCA o ACCB. Como se explicar posteriormente existe la posibilidad de post-escritura* de uno de los acu muladores en las instrucciones MAC y MSC, que consiste en escribir el valor redondeado del Acu mulador que no acta como destino en la instruccin en el espacio de la m emoria de datos. Esta post-escritura es muy interesante en algunos algoritmos tipo FFT y LMS. El contenido redondeado del Acumulador que no es el destino de la operacin s puede escribir directamente en W 13 o en la direccin de la memoria de datos direccionada por [W13J+=2El mdulo de Redondeo puede realizar un redondeo de tipo convencional o convergente duran te la escritura de un Acumulador de 40 bits. El permiso para el funcionamiento de este mdulo se controla con el bit RND del registro C 0 R C 0 N < 1 > . El bit correspondiente al mdulo de Saturacin es SADW del registro CORCON<5>. Se pueden resumir en 6 los modos de funcionamiento del Motor DSP. ' . ; . . . . :;,v Vv \ .. - :
1: Multiplicacin en modo entero o fraccionaI. 2 o Redondeo convencional o convergente. 3 CSaturacin automtica para ACCA. 4." Saturacin automtica para ACCB. 5 Saturacin automtica para escritura de datos en memoria. 6. Seleccin del modo de saturacin del Acumulador.

. ;

4.4.4. Registro de Desplazamiento

Se trata de un registro de desplazamiento de 40 bits que es capaz de realizar desplazamientos arit mticos de hasta 16 bits a la derecha o a la izquierda en un solo ciclo. Se emplea para desplaza mientos de mltiples bits en instrucciones DSP y MCU. Para determinar el nmero de bits a desplazar se precisa de un nmero con signo, que cuando es positivo significa que el desplazamiento es a la derecha y en caso contrario a la izquierda. Las instrucciones que utilizan el Registro de Desplazamiento son las 5 siguientes:

ASR: desplazamiento aritmtico varios bits a la derecha en una posicin de memoria. LSR: desplazamiento lgico varios bits a la derecha en una posicin de memoria. SL: desplazamiento a la izquierda varios bits en una posicin de memoria. SAC: almacenamiento de un Acumulador de 40 bits con desplazamiento opcional. SFTAC: desplazamiento de un Acumulador de 40 bits.

4.4.5. Unidad de Divisin

El repertorio de instrucciones de los DSC soporta las siguientes dedicadas a la divisin:

EL CAMINO DE DATOS

59

En todas las instrucciones de divisin el cociente se coloca en WO y el resto se deposita en W1. El divisor de 16 bits puede situarse en cualquier registro W y el dividendo de 16 bits tambin. En aso de ser de 32 bits se debe situar en una pareja de registros W adyacentes. Todas las instrucciones de divisin son interactivas y en ellas se ejecuta 18 veces un bucle mea n te la instruccin REPEAT. Despus de cada iteracin del bucle todos los datos son almacena dos de nuevo en sus registros, siendo el usuario el responsable de salvar los correspondientes regis tros W en la rutina de atencin a la interrupcin ISR.

ANEXO
w S y.

ta>viv.

Manipulacin de datos en el Motor DSP

A.1. REPRESENTACIN DE DATOS

El multiplicador del M otor DSP recibe dos operandos de 16 bits (Figura 4.5). Estos operandos pue den ser de dos tipos: a) Entero: Un valor entero de 16 bits, con o sin signo. b) Fraccionario: Un valor fraccionario de 16 bits con formato 1.15 (tambin llamado Q15), es decir, contiene un bit de signo y 15 bits fraccionarios. Antes de ser multiplicados, los operandos son procesados para convertirlos a 17 bits, ya que es to simplifica la multiplicacin MCU entre valores con signo y sin signo, y permite realizar correc tamente la operacin (-1 .0 x -1.0). El resultado de la operacin puede ser un entero de 32 bits (con o sin signo) o un valor fraccional con formato 1.31. En realidad, el multiplicador genera un resulta do de 33 bits, porque si es de tipo entero aade un 0 a la derecha, y si es de tipo fraccionario queda en formato 2.31, que luego puede transformarse al 1.31. Posteriormente, el resultado deber ser extendido a 40 bits para poder ser tratado correctamente en el resto de los elementos del Motor DSP. Los datos que se introducen al Motor DSP son de 16 bits, luego internamente se transforman en 40 bits y se manipulan. Finalmente, los resultados que proporciona el Motor DSP son de 16 bits al tener que ser transferidos por el bus X

A.2. SATURACIN DE LOS ACUMULADORES

La saturacin de los acumuladores se basa en el empleo de la aritmtica de saturacin, la cual se uti liza para hacer frente a situaciones de desbordamiento. En este caso se usa el Sumador-Restador de 40 bits. Si el resultado de una operacin aritmtica excede del rango establecido se produce una condi cin de desbordamiento, que significa que el resultado es incorrecto. En el caso de utilizar satura cin, se corrige el error manteniendo los lmites del rango que se ha desbordado. (Figura A .l.)
60

EL CAMINO DE DATOS

61

Si el desbordamiento es producido por : a) La suma de dos nmeros positivos b) La suma de dos nmeros negativos se sustituye la salida errnea p o r el mximo valor positivo, se sustituye la salida errnea p o r el mnimo valor negativo.

A ritm tica m odu lar 2 5 0 + 10 = 1 0 -2 6 9 5 -4

A ritm tica c o n satu racin 255 -255

Figura A.1.

Ejemplos con aritmtica modular y con saturacin . Cuando de sobrepasan los lmites, la aritmtica con saturacin corrige el resultado al valor absoluto mximo posible.

La aritmtica con saturacin es eficiente en el procesamiento digital de seales. En el caso de que los valores de la seal excedan los valores lmite del rango se puede utilizar la saturacin para re solver el problema. (Figura A.2.)

7FFFh O O O O h 8000h

Figura A.2.

Correccin por saturacin de la seal a representar.

Los dsPIC soportan dos modos opcionales de saturacin que afectan a la salida del sumador de 40 bits : a) Saturacin normal (1.31) b) Sper Saturacin (9.31) Para la seleccin del modo de saturacin se utilizan varios bits del registro CORCON. El bit SA TA habilita y deshabilita la saturacin del acumulador A y el SATB habilita y deshabilita la satura cin del acumulador B. Una vez activada la saturacin, la seleccin del modo de saturacin se realiza a travs del bit ACCSAT. Por defecto la saturacin siempre est deshabilitada. Por otro lado, el bit SATDW habilita y deshabilita la saturacin en la escritura, la cual afecta a la instruccin SAC, que almacena el Acumulador en la memoria de datos, y a la post-escritura de los acumuladores. Cuando la saturacin est deshabilitada no se altera el resultado del sumador de 40 bits y traba ja en un rango de -2 5 6 a ~ +256.0. Si excede de este rango de valores, el resultado no se satura y mantiene el valor aunque este sea incorrecto.

62

dsPIC. DISEO PRCTICO DE APLICACIONES

Para m anejar esta situacin se utiliza la condicin de overflow catastrfico, la cual se seali za con un hit de flag en el registro TNTCON1, que puede gestionar una excepcin Mcith Error (Error Aritmtico).

A.2.1. Saturacin normal

La saturacin normal soporta el formato de datos 1.31, el cual utiliza un bit de signo y 31 bits frac cionarios para representar el valor. El rango que admite este formato est comprendido desde -1.0 hasta - 1.0. Cuando la saturacin normal est habilitada, la salida del sumador est lim itada a un rango de 32 bits. Este valor se almacena en ACCxH : ACCxL y su signo (situado en el bit 15 de ACCxH) se ex tiende a todos los bits de ACCU. De este modo, si una operacin destruye el bit de signo, el suma dor saturar el resultado al mximo valor negativo de 32 bits o al mximo valor positivo de 32 bits. (Figura A.3.)

Mximo valor positivo de 32 bits: QxQQ7FFFFFFF (~+1.0)

3 -9

ACCxU 1111 1111

Mnimo valor negativo de 32 bits: 0xFF80000000(-1.0) a rr' Li ACCxL 32 31 ACCxH 16 15 0000 0000 0000 0000 | 0000 0000 0000 0000

Figura A.3.

Representacin del mximo valor positivo y negativo con 32 bits.

En este tipo de saturacin nunca se producir overflow, ya que se restringe el resultado a 32 bits y los 8 bits restantes son para recoger la extensin de signo.

A.2.2. Sper saturacin

La sper saturacin soporta el formato de datos 9.31, empleando 9 bits para representar un valor en tero con signo y 31 bits para la parte fraccionaria. En este modo de saturacin la salida del sumador est limitada a un rango de 40 bits, cuyo valor es almacenado en ACCxU : ACCxH : ACCxL y el bit de signo se guarda en el bit 7 de ACCxU, o lo que es lo mismo en el bit 39 del acumulador. Si una operacin destruye el bit de signo el sumador saturar el resultado con una de estas dos opciones : a) El mximo valor negativo de 40 bits. b) El mximo valor positivo de 40 bits.

EL CAMINO DE DATOS

63

Mximo valor positivo de 40 bits: 0x7FFFFFFFFFF (~+256.0)


39

ACCxU

32

3 1

ACCxH

16

15

A C C xl

01111111

1111111111111111

M xim o va lo r negativo d e 40 bits: 0 x 8 0 0 0 0 0 0 0 0 0 (-256.0)

39

ACCxU 32 31 1000 0000 I

ACCxH

ACCxL
16 15

0000 0000 0000 0000

Figura A.4.

Representacin del mximo valor positivo y negativo con 40 bits.

La sper saturacin permite realizar operaciones que admitan un rango mayor ( 2 5 6 ) que la sa turacin normal ( 1 ) aunque ambos procedimientos mantienen la precisin de la parte fraccionaria con 31 bits.

A.2.3. Saturacin de escritura

Existe otro tipo de saturacin que no tiene nada que ver con las comentadas anteriormente, se trata de la saturacin en la escritura del bus de datos X, que se origina cuando se almacena el Acumula dor en una posicin de la memoria de datos mediante una instruccin SAC. El Acumulador tiene 40 bits y tanto el bus X por el que se transfiere, como la posicin de la memoria de datos son de 16 bits, para lo cual slo se almacenan los 16 bits correspondientes al campo ACCxH. La saturacin de escritura es accesible a travs del bit SATDW en el registro CORCON y se en carga de proporcionar un dato limpio de 16 bits al bus de datos X buscando la mejor conversin posible, partiendo del valor de 40 bits del Acumulador. En esta saturacin no se modifica el valor del Acumulador, sino que se crea un nuevo valor de 16 bits a partir de l, para poderlo enviar por el bus X a una posicin de 16 bits en una instruccin SAC, o bien, al registro W13 en las instrucciones DSP con post-escritura. La saturacin de escritura es similar a la saturacin normal, pero slo se usan los 16 bits de ACCxH, por lo que el rango de valores comprendo de 1.0 a ~ 1.0, pero con una precisin de 15 bits (1.15 en vez de 1.31). El valor mximo ser 0x7FFF ( ~ 1.0) y el mnimo 0x8000 (-1.0).

A.3. REDONDEO

Cuando se ejecuta la instruccin SAC.R o se lleva a cabo la post-escritura del acumulador, es nece sario realizar una operacin de redondeo para convertir el dato extrado del acumulador de 40 bits a 16 bits y poder ser transportado por el bus de datos X. Lo que se obtiene como valor de 16 bits es ACCxH que se redondea segn el valor de ACCxL, que slo se utiliza para realizar dicha funcin de redondeo. El redondeo, como la saturacin de escritura no modifican el valor contenido en el acumulador, sino que crea uno nuevo de 16 bits a partir de aqul que corresponde con el valor de ACCxH. Para el redondeo existen dos modos de funcionamiento que se selecciona mediante el bit RND del registro CORCON.

64

dsPIC. DISEO PRCTICO DE APLICACIONES

a) Redondeo Convencional : Es el sistema ms sencillo y consiste en redondear hacia arriba ACCxH cuando el bit de ms peso de ACCxL vale 1, lo que significa que ACCxL ^ 0x8000. En este caso el redondeo hacia arriba aade 1 al valor de ACCxH, que es el valor final de 16 bits. Este modo tambin es conocido como biased (parcial). En el caso de que ACCxL < 0x8000 se aade un cero a ACCxH, que es el resultado que se transfiere por el bus de datos X de 16 bits. b) Redondeo Convergente : Este modo redondea hacia arriba, o sea, aade 1 a ACCxH, cuando se da una de estas dos opciones; 1 ACCx L es mayor a 0x8000. 2.a ACCxL es igual a 0x8000 y el prim er bit, que es el de menos peso, de ACCxH vale 1. En el caso de que ACCxL<0x8000, o bien, ACCxL=0x8000 pero el bit de menos peso de ACCxH valga 0, se aade 0 al valor de ACCxH en el redondeo convergente. Este sistema tambin es conocido como unbiased (imparcial).

CAPTULO

5
NO M BRE REGISTRO VVO - VV15 SPLIM ACCAL - ACCAH - ACCAU aCCBL - ACCBH - ACCBU PCX - PCH TBLPAG PSVPAG RCOUNT DCOUNT DOSTARTL - DOSTARTH DOENDI - DOENDH SR CORCON MDCON XMODSRT XMODEND YMODSRT YMODEN'D XBRFV DI5ICNT -

Modelo del procesador para el programador

5.1. LOS REGISTROS DEL PROGRAMADOR

El programador de DSC, especialmente cuando utiliza el lenguaje Ensamblador, debe conocer la mi sin y caractersticas principales de un conjunto de registros de la CPU. En la tabla de la Figura 5.1 se describe el nombre, la direccin que ocupa en la memoria y la descripcin de los registros funda mentales, que manejan las instrucciones del repertorio de los DSC. Los 2 KB iniciales de la memo ria de datos estn destinados a contener los registros especficos de control SFR del procesador.
D IR E C C I N 0000-001 c 0020 0022 - 0024 - 0026 0028 - 002A - 002C 002 E - 0030 0032 0034 0036 0038 003A - 003C 003 E - 0040 0042 0044 0046 0048 004A 004C 004E 0050 0052 0054 - 007E DESCRIPCIN BANCO DE REGISTROS DF TRABAJO REGISTRO DEL LMITE DEL PUNTERO PILA (SP) REGISTROS DE ACCA (40 BITS) REGISTROS DE ACCB (40 BITS) REGISTROS DEL CONTADOR DF PROGRAMA PC {23 BITS) REGISTRO DF DIRFCGONFS PARA INSTRUCCIONES DE TABLA REGISTRO DE PGINA PARA VISIBILIDAD DEL ESPACIO DE PROGRAMA REGISTRO CONTADOR DE BCl FS "RFPFAT" REGISTRO DE CONTADOR DE BUCLES "DO " REGISTROS PARA DIRECCIN INICIO DE BUCLE "D O " REGISTROS PARA DIRECCIN FINAI DF BUCLE "D O " REGISTRO DE ESTADO REGISTRO DE CONFIGURACIN DEL NCLEO REGISTRO CONTROL DIRECCIONAMIENTO MODULAR X REGISTRO DIRECCIN INICIO DIRECCIONAMIENTO MODULAR X REGISTRO DIRECCIN FINAL DIRECCIONAMIENTO MODULAR X REGISTRO DIRECCIN INICIO DIRECCIONAMIENTO MODULAR Y REGISTRO DIRECCIN I INAL DIRECCIONAMIENTO M O D U l AR Y REGISTRO PARA DIRECCIONAMIENTO "BIT REVERSE" REGISTRO CONTADOR DESACTIVACIN INTERRUPCIONES RESERVADOS

Figura 5.1.

Tabla que recoge el nombre, la direccin y la descripcin de los registros que conforman el modelo de la CPU para el programador de los DSC. Cada registro de 16 bits ocupa dos direcciones del espacio de datos, cada una con un byte de datos. 65

66

dsPIC. DISEO PRCTICO DE APLICACIONES

En la Figura 5.2 se ofrece un esquema interno con la nomenclatura de los principales registros usados por el programador.
REGISTROS SOMBRA PARA PUSH.S Y POP.S

R E G IS T R O S S O M B R A * D O '

R E G IS T R O S R E S U LT A O O D IV Y M U L

R E G IS T R O S DE O P E R A N D O S M AC

S - R E G IS T R O S DE T R A B A JO

R E G IS T R O S DE D IR E C C IO N E S DE O P ER A N D O S M AC

R E G IS T R O LIM IT E D E L P U N T E R O PILA

ACCAU

v -v .w

ACCAH
- .... ......

ACCAL

.
AC C B L

ACCBU

ACCBH

%
TLBPAG . PC C O N T A O O R DE P R O G R A M A D IR E C C IO N E S IN S T R U C C IO N E S D E T A B L A

DOSTART D IR E C C IO N E S V IS IB IL ID A D E S P A C IO D E P R O G R A M A D IR E C C IO N IN IC IO BU C LE DO

15

O
DOEND D IR E C C IO N F IN A L B U C LE DO

CO R C O N C O N T A D O R DE B U C LE S DO R E G IS T R O C O N F IG U R A C IO N N U C LE O

Figura 5.2.

Representacin grfica de los principales registros del modelo de la CPU que utiliza el programador de aplicaciones en lenguaje Ensamblador.

MODELO DEL PROCESADOR PARA EL PROGRAMADOR

67

5J>. EL BANCO DE REGISTROS DE TRABAJO

^ operatividad del Camino de Datos est basada en el banco de registros compuesto por 16 que tien una longitud de 16 bits cada uno y se denominan W 0-W 15. Dichos registros soportan muchas -r:>iones en la ejecucin de las instrucciones del repertorio. Las instrucciones ms comunes utilizan estos registros de trabajo para contener datos y direc; nes de memoria. Por ejemplo, la instruccin MOV W3, [W6J mueve el contenido del registro W3 i la posicin de memoria cuya direccin est depositada en W6. El operando fuente es W3 mientras t3De el destino est direccionado por W6. Otra instruccin que emplea los registros de trabajo para a n e j a r operandos es ADD [W2], W4, W6, en la que un operando fuente es el contenido de la di seccin apuntada por W 2 y el otro el valor de W4. El resultado de la suma de los dos operandos se deposita en W6 que acta como operando destino. Existe un tipo de instrucciones que utiliza el registro WO como registro de trabajo implcito cuanic se le referencia como WREG. Son instrucciones similares a las que hay en el repertorio MCU en fas que se hace una referencia implcita a un registro de trabajo que actuaba como Acumulador en .i ALU. Por ejemplo, la instruccin ADD 0x3F00, W REG suma el contenido de WT 0 con el alma cenado en la direccin 0x3F00 y deposita el resultado en WO. Como se desprende de la tabla de la Figura 5.1 los registros W0-W15 estn mapeados en la rne- : ria de datos entre las direcciones 0000-001E y se pueden manejar como posiciones, de forma que si desea mover el contenido del registro W2 a W4, se puede usar la instruccin MOV 0x0002,0x0004. Al ocupar cada registro W un par de posiciones de memoria de tamao byte se manipulan dalos tipo palabra. El resultado de una operacin con datos de tamao byte afecta al byte de menos pedel registro de trabajo.

Despus d realizar un Reset todos los registros de trabajo W toman el valor cero, excepto VZ15.

Los registros W0-W3 se utilizan para guardar el resultado de las instrucciones MUL y DIV. W0 ruarda el cociente de una dividisin y W 1 el resto, mientras que W 3:W2 guardan el resultado de la multiplicacin. Adems actan como registros sombra para las instrucciones PUSH.S y POP.S. Los registros W4-W7 se dedican a contener los operandos de las instrucciones MAC, mientras que '.YS-Wll se emplean habitualmente para contener las direcciones de los operandos de las instruc ciones tipo MAC. W12 acta como desplazamiento u offset y permite incrementar o decrementar el valor al que modifica. W13 en las instrucciones MCU, se puede usar como registro de trabajo. En algunas instruccio nes MAC se emplea como registro de post-escritura, que consiste en la post-escritura del acumula dor inactivo o no usado.W 14 trabaja como puntero del M arco de la Pila, que es una zona de la mis ma que es manejada por una subrutina. W15 es el puntero de la Pila y est relacionado con el registro SPLM que guarda el lmite que puede alcanzar W 15.

5 .3 . REGISTROS SOMBRA

Algunos registros de la Figura 5.2 tienen asociados unos registros llamados sombra, que se usan temporalmente para contener informacin que se enva o se recibe cuando ocurre algn suceso de terminado. Ningn registro sombra puede ser accedido directamente.

68

dsPIC. DISEO PRCTICO DE APLICACIONES

El contenido de los registros sombra se transfiere cuando se ejecutan las siguientes instruc ciones: 1) Las instrucciones PUSH.S y POP.S afectan a los registros sombra WO, W 1, W2, W3 y SR (slo los bits DC, N, OV, Z y C). En el caso de PUSH.S el contenido de dichos registros se carga en la Cima de la Pila, mientras que con POP.S los valores de la Ci ma de la Pila se depositan en dichos registros. De esta manera se pueden salvar y res taurar cmodamente los contenidos de estos registros en las llamadas a subrutina y en las rutinas de interrupcin. 2) La instruccin DO afecta a los registros sombra DOSTART, DOEND y DCOUNT que los carga con los valores de la Cima de la Pila o deposita sus contenidos en la Cima de la Pila. (Figura 5.3.)

REGISTROS SOMBRA PARA PUSH.S Y POP.S

REGISTROS SOMBRA PARA INSTRUCCIN DO

5-----*.... ......... ........


DCOUNT

1
22.
DOSTART

DOEND

Figura 5.3.

Representacin grfica de los dos conjuntos de registros sombra.

5.4. PUNTEROS DE LA C IM A DE LA PILA Y DEL MARCO DE LA PILA

El registro W 15 funciona como puntero de la Cim a de la Pila y contiene la direccin de la posicin ms alta pudindose modificar automticamente su valor con las llamadas a subrutina, los retornos y las interrupciones. No obstante W15 puede ser manejado por las instrucciones como cualquier otro registro del banco. Con el objetivo de mantener alineados los datos que se transfieren en la Pila, W15 tiene a cero el bit de menos peso apuntando siempre a direcciones pares. Tras producirse un Reset W15 queda inicializado con el valor 0x0800, que es una direccin v lida de la RAM de los DSC. El programador puede alterar dicho valor a uno mayor para ubicar la Pila en la zona deseada. El espacio comprendido entre las direcciones 0x0000 y 0x07FF est reser vado para registros de funciones especficas (SFR). Cuando W15 se carga con un valor inferior a 0x0800 el procesador genera una excepcin de error de Pila.

M O D ELO DEL PRO CESADO R PARA EL PRO GRAM A D O R

69

En la Figura 5.4 se supone que W15 est cargado con el valor 0x0800 y se ejecuta la instruccin CALL para producir una llamada a subrutina. Para salvar la direccin de retorno al programa prin cipal se salva en la Cima de la Pila el valor del PC<22:0> que al tener 23 bits ocupa dos posiciones de memoria de 16 bits. Realizada la carga del PC, W 15 se incrementa automticamente en 4, que son los bytes utilizados para guardar al PC. Obsrvese en la figura que el byte de ms peso de la paabra donde se almacena PC<22:16> se carga con ceros.

MEMORIA DE DATOS RAM


15 _ 87

D IR E C C IO N E S C R E C IE N T E S

PC <15:0>

: ::

W 1 5=0 x08 0 0 (A N TE S DEL C A LL)

B 0000 0000' : PC <22:16>


W 1 5 = 0 x08 0 4 (D E S P U E S D EL C A LL)

Figura 5.4.

A l salvarse en la Cima de la Pila el PC que contiene la direccin de retorno al programa principal, W15 se auto-incrementa en 4 unidades automticamente.

La instruccin PUSH escribe en la Cima de la Pila el operando que conlleva. Por ejemplo, PUSH W2 .escribe en la Pila los dos bytes del registro W 2 y despus auto-incrementa W 15 en 2 uni:ades. Con la instruccin POP W2 se coge la palabra que apunta en la Pila W 15 y se deposita en W2, decrementando en 2 unidades el valor de W15 automticamente. La instruccin PUSH W2 es equivalente a M OV W 2, [W15++], y POP W2 produce el mismo resultado que MOV [-W 15J, W2. El registro SPLIM guarda el lmite de la Pila o el valor mximo que puede alcanzar el puntero lie la Pila. El bit de menos peso vale cero para mantener los datos alineados. Tras el Reset SPLIM carga con ceros impidiendo la deteccin del desbordamiento de la Pila hasta que el programador no cargue a SPLIM con un valor vlido. Un M arco de Pila es una porcin de la mism a que se destina a una subrutina concreta. W14 contiene la direccin del M arco y se inicializa y se abandona dicha funcin con las instrucciones LNK y ULNK, respectivam ente. Cuando no se usa W 14 como puntero del M arco de Pila puede emplearse como otro registro de trabajo.

5.5. EL REGISTRO DE ESTADO (SR)

Los dos bytes que componen el Registro de Estado (SR) sirven para informar principalmente del eslado y de las condiciones especiales que se han producido en el resultado de la operacin aritmti co-lgica que se acaba de realizar, bien en la seccin MCU o en la DSP. El byte de menos peso se denomina SRL y se corresponde con la seccin MCU. Guarda la inormacin de los siguientes sealizadores:

70

dsPIC DISEO PRCTICO DE APLICACIONES

: i i f i

N es el bit de signo, y si no se trabaja con signo es simplemente el bit de ms peso. QV indica que el resultado de la operacin realizada ha producido un sobrepasamiento. Z indica que el resultado de la operacin realizada es cero. C es el sealizador de acarreo en las sumas y restas. IPL<2:0> son los tres bits, que junto con IPL3 que se ubica en el registro CORCON, conforman el nivel de prioridad que tiene la CPU frente a las interrupciones. Para atender una interrupcin el peticionario deber tener mayor nivel de prioridad que el de la CPU. RA informa si se encuentra activo un bucle REPEAT.

REGISTRO DE ESTADO (SR)

ESTADO DSP

Figura 5.5.

Los bits del Registro de Estado informan principalmente sobre el resultado obtenido en las instrucciones aritmticas de la seccin M CU y la DSP.

El byte de ms peso, SRH, soporta los bits que detectan condiciones especiales del resultado pro ducido por las instrucciones DSP desarrolladas con el Sumador de 40 bits y que depositan el resul tado en uno de los Acumuladores A y B.

0 4 y OB indican que se ha producido sobrepasamiento del resultado depositado en el Acumula dor A o en B, respectivamente. OAB es un bit que se obtiene de la operacin lgica OR de OA y OB. De esta manera basta con comprobar un solo sealizador en lugar de mirar los dos anteriores. SA y SB informan de la existencia de saturacin realizada por el Sumador de 40 bits sobre el Acu mulador A o B, respectivamente. SAB se obtiene de la operacin lgica OR de SA y SB. DC advierte del Acarreo/Llevada del 4Qbit en las operaciones MCU (til para operaciones BCD). DA informa si hay un bucle activo DO.

5.6.

EL REGISTRO DE CONTROL DEL NCLEO (CORCON)

En este registro reside el bit IPL3, que concatenado con los 1PL<2:0> de SR conforman el cdigo que determina el nivel de privilegio de interrupcin de la CPU. Otros bits se destinan al control de la operacin de multiplicacin DSP, del bucle DO, del redondeo y de algunos otros aspectos rele vantes de la CPU. Como se muestra en la Figura 5.6 los tres bits de ms peso de CORCON no es tn implementados y siempre se leen como ceros.
REGISTRO DE CONTROL DEL NCLEO (CORCON)

i ? i s a *
Figura 5.6.

...........-

-------------------

G s

E B T

DL2

bu

;P L 0

--------S A T A

------ -------- -------------------

S A T B S A T O WA C G S A T| !P L 3

p sv -_

* ! '

RND

* 1

cl 'F J

Distribucin de los bits del registro de control del ncleo CORCON.

M O D ELO DEL PRO CESADO R PARA EL PRO GRAM A D O R

71

A continuacin se describe la misin de cada uno de los bits de CORCON:


US: con este bit se controla que la multiplicacin DSP se realice sin signo (1) o con signo (0). EDT: cuando este bit vale 1la ejecucin del bucle DO finaliza al completarse la iteracin en curso. DL<2:0>: estos tres bits indican el nivel de anidamiento del bucle DO (0-7). SATA: permiso/prohibicin para la saturacin de ACCA (1/0). SATB: permiso/prohibicin para la saturacin de ACCB (1/0). SATDW: activacin/desactivacin de saturacin en la escritura en ei espacio de datos (1/0). ACCSAT: bit que selecciona el modo de saturacin del Acumulador (1: normal y 0: supersaturacin). IPL3: bit 3 que sirve para determinar el nivel de prioridad efe interrupcin, junto con IPL<2:0> del registro de estado SR. PSV: permiso/prohibicin de Visibilidad del Espacio de Programa (PSV) del espacio de datos (1/0). RND: bit para la seleccin del modo de redondeo (1: redondeo convencional y 0: redondeo con vergente). IF: bit para la seleccin del formato de los operandos de multiplicacin (1: operandos en modo en tero y 0: operandos en modo fraccionario).

....................................

..... ...............................................

5.7.

OTROS REGISTROS DE CONTROL

Para completar una visin general del conjunto de registros importantes que intervienen en la pro gramacin de los dispositivos DSC, se describen de forma resumida los siguientes. TBLPAG: Registro de Pgina para las instrucciones de Tabla En este registro se guardan los 8 bits de ms peso de la direccin de la memoria de programa du rante las operaciones de lectura y escritura de instrucciones de Tabla, que sirven para transferir datos entre el espacio de memoria y el de datos. PSVPAG: Registro de Pgina para Visibilidad del Espacio de Programa La Visibilidad del Espacio de Programa permite al usuario mapear una seccin de 32 KB del espacio de memoria de datos en el espacio de la memoria de programa. Esta propiedad permite el acceso transparente de datos constantes a travs de las instrucciones que operan en la memo ria de datos. El valor contenido en PSVPAG selecciona el trozo de 32 KB del espacio de la me moria de programa sobre el que se mapea el espacio de datos. MODCON: Registro de Control del Direccionamiento Modular Se empica para activar y configurar el modo de direccionamiento modular o circular. XMODSRT, XMODEND: Registros de inicio y Fin para el Direccionamiento Modular El registro XMODSRT contiene la direccin inicial y el XMODEND la direccin final de los buffers implementados en el espacio de memoria X para el direccionamiento modular. YMODSRT, YMODEND: Registros de Inicio y Fin para el Direccionamiento Modular Igual misin que los anteriores, pero referidos al espacio de memoria Y. XBREV: Registro para el Direccionamiento por Inversin de Acarreo o bit-reverse Contiene el m odificador, que es dependiente del tamao del buffer que se utiliza en el direccionamiento por acarreo invertido o bit-reverse . DISICNT: Registro Contador para Desactivacin de Interrupciones Se utiliza con la instruccin D1S1 para desactivar las interrupciones de prioridad 1 a 6 durante el nmero de ciclos indicado por este registro.

& sns$

CAPITULO
m

La memoria de datos

*. LOS ESPACIOS DE LA M EM ORIA DE DATOS

memoria de datos RAM de los DSC se divide en dos espacios, llamados X e Y, que son consi'os como independientes por algunas instrucciones DSP, mientras que las instrucciones MCU yan toda la memoria como un espacio unificado y lineal de direcciones. Cada espacio dispone sus propios buses de datos y de direcciones, ambos de 16 bits, lo que supone que el rango de dimamiento alcanza 64 KB o 32 K palabras de 16 bits cada una que se hallan alineadas en di mes pares. Como se refleja en la Figura 6.1 las 32 K palabras que abarca el espacio de la memoria de datos h id e n en 5 zonas:

* Espacio SFR, destinado a los registros especficos de control (2 KB). Espacio de datos X (tamao segn modelo de dsPIC). Espacio d datos Y (tamao segn modelo). - Zona no implementada. Zona de datos X opcionalmente mapeable en la memoria de programa (32 KB).

En la Figura 6.1 se observa que tiene una memoria SRAM de 8 KB, pero en el caso de los ds5F existen memorias de distintos tamaos: 8 KB, 16 KB y 30 KB. Te acuerdo con el espacio de memoria de la Figura 6.1 de 8 KB de SRAM, los espacios X e Y n de 4 KB cada uno. Les 8 KB inferiores de la memoria de datos (OxOOO-Ox 1FFF) se denominan M emoria Cercana se caracteriza porque sus posiciones pueden ser accedidas utilizando nicamente los 13 bits del de direccin absoluta que est reservado en el formato de las instrucciones que trabajan con onamiento directo. Les espacios X e Y tienen opciones de acceso diferentes segn se trate de instrucciones MCU o y segn se realice una lectura o una escritura. En todas las operaciones de escritura de datos,
73

74

dsPIC. DISEO PRCTICO DE APLICACIONES

0x0000 SFR <

W m
;

ESPACIO SFR (2KB)


0X07FE 0x0800

ESPACIO DE DATOS X (4KB) SSSfiSfl ESPACIO SRAM ) 8KB i? 0x17FE 0x1800

MEMORIA >- CERCANA (8KB)

,
ESPACIO DE DATOS Y ......................(4KB)

0x1 FFE

0x27FE 0x2800

NO DISPONIBLE
.

' : . ---- ----------- -------------------IV..V.V/.'vX'IV/ -V/ /.yV-V/.,.,-,-. .v.-

0x8000

OPCIONALMENTE MAPEABLE EN LA MEMORIA ' DE PROGRAMA

gm m m . 8 1
ESPACIO DE DATOS X NO IMPLEMENTADO (32 KB)

S^vM^*! '
.

P ll| l f _____ \_____


Figura 6.1.

OxFFFE

Estructura interna de la memoria de datos para un modelo dsPIC30F con una capaci dad de memoria SRAM de 8 KB disponibles para el usuario (modelos dsPIC30F6010 y dsPIC30F6014).

independientemente del tipo de instruccin que se trate, se accede a la memoria de datos como si los espacios X e Y conformasen un nico espacio lineal de direcciones. De la misma manera se con templa el espacio de datos en las operaciones de lectura por parte de las instrucciones MCU. En la lectura de datos de las instrucciones DSP es posible acceder de forma independiente y si multnea a los espacios X e Y. En esta situacin los registros W8 y W9 actan como punteros de di recciones del espacio X, y W10 y W 11 como punteros de direcciones de las posiciones a leer en el espacio Y. La Figura 6.2 muestra lo explicado de forma esquemtica.

LA MEMORIA DE DATOS

75

BUS DE DATOS Y

BLIS DE DATOS X

SRAM SRAM DATOS Y i DATOS X

RAGU X I BUS DE DIRECCIONES BUSES DE DIRECCIONESj X -p I


(LECTURA X)

WAGU X

(ESCRITURA X)

A X ) I

^
r

-------

AGUXI

DATOS MAPEADOS EN MEMORIA PROGRAMA

ni

Figura 6.2.

Las instrucciones DSP pueden acceder en lectura simultneamente a datos de los espacios X e Y .

6.2. DIRECCIO NAM IENTO DE LA M EM ORIA DE DATOS

Las direcciones de acceso a los espacios X e Y son generadas por las Unidades de Generacin de Direcciones AGUX y AGUY, respectivamente. La AGUX consta de una seccin destinada a la lec tura de datos. RAGUX, y otra para la escritura, WAGUX. Para aumentar el rendimiento del proce sador RAGUX com ienza el clculo de la direccin efectiva de un operando en el ciclo anterior al de ht instruccin al que corresponde, de manera que cuando se inicia la ejecucin ya es capaz de colo r ir en el bus de direcciones de lectura del espacio X la direccin de la posicin a acceder. Por el con trario, WAGUX comienza el clculo de la direccin de la posicin a escribir al empezar la ejecucin de la instruccin, pero ya la tiene disponible al llegar la fase de escritura. La AGUY funciona igual que RAGUX adelantando el clculo de la direccin, pero slo funcio na en las operaciones de lectura, no siendo posible realizar escrituras en el espacio Y. Los datos se colocan en la memoria, alineados de form a que el byte de menos peso se sita en la direccin par y el de menos peso en la impar superior.

6.3. MAPEADO DEL ESPACIO DE DATOS EN LA M EM O R IA DE PROGRAMA

Con carcter opcional el programador puede mapear los 32 KB superiores del espacio de la memo r a de datos en una pgina del espacio de la memoria de programa que consta de 16 K palabras de 14 bits cada una. A este modo de trabajo se le llama Visibilidad de Espacio de Programa (PSV) y re m ite un acceso transparente de constantes desde el espacio de datos X sin necesidad de emplear

76

dsPIC. DISEO PRCTICO DE APLICACIONES

instrucciones especiales como las de Tabla. De los 24 bits de cada posicin del espacio de la me moria de programa slo son vlidos los 16 de menos peso. Para obtener la direccin efectiva del PSV en la memoria de programa se necesitan 23 bits. Los 15 bits de menos peso de dicha direccin corresponden a los 15 bits de menos peso del registro W que contiene la direccin efectiva del espacio de la memoria de datos. Los 8 que faltan para com pletar la direccin efectiva PSV se toman del registro PSVPAG. (Figura 6.3.) wn
PSVPAG
:7 .
15 . . '1 4

DIREC CIN ESPACIO DE DATOS


* ..0

22

............ ,

D IREC CIN PSV

Figura 6.3.

Formacin de la direccin efectiva PSV a partir de os 8 bits del registro PSVPAG y los 15 de menos peso del registro Wn que contiene la direccin del espacio de la memoria de datos.

6.4. DIRECCIONAMIENTO MODULAR O CIRCULAR Existen bastantes algoritmos DSP en los que se repiten ciertas operaciones sobre un conjunto de da tos. Dichos conjuntos implementan buffer circulares que hay que recorrer ordenadamente. Esta si tuacin es habitual en el clculo de los filtros F1R (Finite Impulse Response). Para optimizar el pro cesamiento de este tipo de clculos se ha desarrollado un conjunto de recursos hardware que soportan el modo de direccionamiento modular o circular. De esta manera se evita el uso de software para realizar este tipo de algoritmos y, en consecuencia, la gestin hardware de los buffer o tablas de datos consigue mucha mayor rapidez. Para recorrer los buffer circulares se utiliza un puntero que se desplaza desde el principio al fi nal incrementando o decrementando su valor, incluso de forma bidireccional, como se muestra en la Figura 6.4. El hardware que incluyen los DSC exime al programador de comprobar constantemente el va lor del puntero para no rebasar el lmite y regresar a la posicin de inicio cuando ha terminado de recorrerlo. Para conseguir esta caracterstica existen unos registros hardware que soportan la operatividad de este direccionamiento.

XMODSRT: Registro de la direccin modular de inicio para AGUX. XMODEND: Registro de la direccin modular final para AGUX. YMODSRT: Registro de la direccin modular de inicio para AGUY. YMODEND: Registro de la direccin modular final para AGUY.

Cualquier registro W, excepto W 15, puede actuar como puntero del buffer y los 4 registros an teriormente m encionados establecen las direcciones inicial y final. En el direccionam iento ascen dente el puntero se va incrementando desde la posicin inicial del buffer hasta la final. Cuando el puntero se decrcm enta se recorre el buffer desde la posicin final a la inicial. El direccionam ien to modular puede funcionar en el espacio de la memoria de programa y en el de datos, tanto en la zona X com o en la Y. En el espacio X el cdigo binario del registro W que acta como puntero del

LA MEMORIA DE DATOS
BUFFER INCREMENTAL

77

BUFFER DECREMENTAL

BUFFER BIDIRECCIONAL

Figura 6.4.

El buffer circular se explora mediante un puntero que soporta direcciones ascendentes, descendentes o en ambos sentidos .

buffer se carga en los 4 bits de menos peso del registro MODCON<3:()>. El cdigo binario del re gistro W que funciona como puntero en el espacio Y se carga en los bits M ODCON<7:4>. La Fi gura 6.5 muestra de form a esquemtica la estructura del registro MODCON.
Byte Alto
RM/-0 R/W-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0

BW M <3:0>

Bit 15

Bit 8

Byte Bajo

Figura 6.5.

El registro M O D C O N en su totalidad. Los bits BW M<3:0> se utilizan para e l Bit Reverse. Los bits U-0 no se han implementado y se leen como ceros.

78

dsPIC. DISEO PRCTICO DE APLICACIONES

En la programacin del direccionamiento modular se comienza cargando la direccin de inicio del buffer en XMODSRT, luego la direccin final en XMODEND, despus se especifica en los 4 bits correspondientes de MODCON el registro W que participa como puntero y, finalmente, se in dica el nmero de veces que se recorrer el buffer circular en una operacin DO. En las Figuras 6.6 y 6.7 se muestran algunos ejemplos de aplicacin con direccionamiento modular o circular.

Direccin MOV #0x1100, W0 MOV W 0. XMODSRT MOV #0x1163, W0 MOV W0, XMODEND MOV #0x8001 , WO MOVWO, MODCON MOV #0x0000, WO MOV #0x1100, W1 DO #49 , FILL FILL: MOVWO, [W1++]

establece direccin de comienzo establece direccin de final habilita W1, AGU X para direcc. modular WO contiene el valor de relleno del buffer W1 apunta al buffer rellena los 50 espacios del buffer para rellenar siguiente direccin W1 = 0x1100 cuando $e completa el bucle DO

x1 1 0 0

0x1163 Dir. Comienzo = 0x1100 Dir. Final = 0x1163 Longitud = 50 palabras

Figura 6.6.

Ejemplo de exploracin del buffer incremental con direccionamiento modular.

Direccin MOV #0x11E0, WO MOV WO . XMODSRT MOV #0x11FF , WO MOVWO, XMODEND MOV #0x8001 , WO MOV WO , MODCON MOV #0x000F , WO MOV #0x11 FE , W1 DO #15, FILL MOV WO, [W 1-] FILL: DEC WO. WO ; establece direccin de comienzo ; establece direccin de final ; habilita W1, AGU X para direcc. modular ; WO contiene el valor de relleno del buffer ; W1 apunta al buffer ; rellena las 16 palabras del buffer ; para rellenar la siguiente palabra ; se decrementa el valor ; W1 = 0x11 FE cuando se completa el bucle DO 0x11FF Dir. Comienzo = 0x11 EO Dir. Final = 0x11 FF Longitud = 16 palabras

x 1 1 EO

' I

I !

Figura 6.7.

Ejemplo de exploracin del buffer decremental con direccionamiento modular.

LA MEMORIA DE DATOS

79

6.5. DIRECC IO NA M IEN TO POR INVERSIN DE ACARREO O "BIT REVERSE"

Las direcciones de la tabla de datos iniciales sobre la que se aplica el algoritmo FFT (Transforma da Rpida de Fourier) se reordenan en una tabla de resultados de acuerdo con unas reglas que so portan en hardware los DSC y que se controla con el direccionamiento por inversin de acarreo o bit reverse. Se trata de un direccionamiento indirecto especial que slo se realiza a travs del ge nerador de direcciones WAGUX para instrucciones de tamao palabra y con la colaboracin de los registros especficos XBREV y MODC.ON. Lo que hace el procedimiento de bit-reverse es crear un ordenamiento que facilitar el poste rior clculo de la FFT, y lo consigue intercambiando los bits del puntero de direcciones entorno al punto central de dicha direccin, con lo que el resultado es la imagen espejo de dicha direccin. Se tomarn en cuenta a la hora de realizar el intercambio tantos bits como sean significativos segn el tamao del buffer, es decir, si el buffer tiene un tamao de 4 bytes, se rotarn los 2 ltimos bits, si tiene 8 bytes, se rotarn, los 3 ltimos bytes, y as sucesivamente. EJEMPLO Se dispone de un buffer de 8 bytes , siendo la unidad de manejo del buffer el byte , y se desea aplicar el direccionamiento p o r ubit reverse . A l ser el tamao del buffer de 8 bytes , se cogen los 3 ltimos bits de la direccin, procediendo a rotar estos 3 bits en torno al bit I (el central) creando el espe j o de la direccin original , como se muestra en la Figura 6.8. Aplicado dicho mtodo, el conteni do de las direcciones del buffer queda dispuesto como se muestra en la Figura 6.9.

Figura 6.8.

Intercambio de bits de una direccin entorno a un punto central.

ORDENAMIENTO SECUENCIAL

BUFFER

BUFFER

ORDENAMIENTO POR INVERSIN DE ACARREO

0X0100 0X0101 0X0102 0X0103 0X0104 0X0105 0X0106 0X0107

0X0100 0X0104 0X0102 0X0106 0X0101 0X0105 0X0103 0X0107

Figura 6.9.

Buffer antes y despus de realizar las operaciones de "bit reverse"

80

dsPIC. DISEO PRCTICO DE APLICACIONES

La puesta en marcha del direccionamiento bit reverse se realiza en tres etapas. Ia. Se asigna a uno de los registros W como puntero de las tablas mediante los 4 bits MODC0N <11;8> que se denominan BWM<3:0>. (Figura 6.10.)
MODCON o

XMODEN YMODEN

BWM<0:3>

YWM<0:3>

XWM<0:3>

Figura 6.10. El registro M O D C O N con sus bits BW M <3:0> resaltados, los cuales indican qu registro W ser el puntero de las tablas en la operacin de "b it reverse".

Si se toma al registro W1 como puntero para el direccionamiento por inversin de acarreo hay que tener en cuenta que el valor inicial que corresponde a la direccin de lectura del dato se trans forma en otro valor que corresponde con la direccin donde se escribe el resultado, pero siempre dentro de las direcciones lmite de la tabla. Para W 1 el cdigo BWM<3:0> = 0001. 2a. Se activa el direccionamiento por inversin de acarreo poniendo a 1 el bit 15 del registro XBREV (XBREV<15> = BREN = 1). (Figura 6.11.)
XBREV MODIFICADOR (XB)

Figura 6.11. Estructura del registro XBREV con su b it BREN resaltado, que permite o no la operacin de "b it reverse".

3a. Se establece el valor del m odificador que acta sobre el valor del registro puntero fuente usando los 15 bits de menos peso del registro XBREV (XBREV<14:0>). Los valores del modificador que se carga en XBREV<14:0> dependen del tamao de la tabla o buffer de datos sobre el que se aplica el algoritmo FFT y se presentan en la tabla de la Figura 6 .12.
T A M A O BUFFER (PALABRAS) 32768 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 VALOR DEL M O D IF IC A D O R XB 0x4000 0x2000 0x1000 0x0800 0x0400 0x0200 0x0100 0x0080 0x0040 0x0020 0x0010 0x0008 0x0004 0x0002 0x0001

Figura 6.12.

Valor del modificador XB que se carga en XBREV<14:()> y que depende del tamao del buffer de datos de entrada medido en palabras.

LA MEMORIA DE DATOS

81

Para transformar el valor inicial del registro indirecto W segn el direccionamiento por inver sin de acarreo, el hardware auxiliar lo modifica sumando al mismo un valor. Este valor ser el del modificador XB en caso de que el tamao de los elementos sea de byte, y ser XB multiplicado por 2 en caso de que los elementos que se manejen sean de tamao word (2 bytes). Sin embargo, dicha suma es especial porque se efecta de izquierda a derecha y si se genera acarreo se traslada hacia la derecha , o sea, al revs de como se hace normalmente. Por eso se ha denominado a este direc cionamiento de inversin de acarreo. Se propone un ejemplo de aplicacin para comprender la obtencin de la direccin final que pa sa a contener el registro Wn cuando se utiliza el direccionamiento bit reverse. EJEMPLO Se dispone de un buffer de datos de 16 palabras a las que se direcciona indirectamente con el re gistro W2 (BWM<3:0> = 0010). El modificador XB segn la tabla de la Figura 6.13 vale 0x0008 v se comienza suponiendo que W2 contiene la direccin 0x000 que apunta a la palabra WO. El bit de menos peso de W2 siempre vale 0 para apuntar a datos de tamao palabra. La modificacin del valor inicial de W2 se logra sumando en direccin inversa el valor del m o dificador XB multiplicado p o r 2, y de form a que si se produce acarreo se traslada a la derecha , o sea , al revs que cuando se suma normalmente . Para que el valor 0x0008 no afecte al bit de menos peso se ha desplazado un bit a la izquierda que es lo mismo que multiplicar p o r 2. En la Figura 6.13 se presenta una secuencia de transfor maciones del valor de W2 al sumarle en sentido inverso el valor del modificador y trasladando el acarreo cuando se produce hacia la derecha.

0 0 0 0

0 0 0 0

000 0 +
1

0 00 0 0 00 0 0 0 0 0 000 0 1000 -> 0000 1 000

W2 APUNTA LA PALABRA 0 SE LE SUMA XBx2 PARA QUE LSB = 0 W2 APUNTA LA PALABRA 8 SE LE SUMA XB CON LSB = 0 0NVERSIN ACARREO) W2 APUNTA LA PALABRA 4 SE LE SUMA XBx2 W2 APUNTA LA PALABRA 12 SE LE SUMA XB CON LSB = 0 (INVERSIN ACARREO) W2 APUNTA LA PALABRA 2 SE LE SUMA XBx2 W2 APUNTA LA PALABRA 10

0000

0 0 00

0 0 0 1 + 1

00 0 0

0 000

0 000 + 1

0000

0 000

0 0 0 f +
1

0 00 0 0 100 0 0 0 0 0 100

0 0 0 0

0 0 00

0 00 0 * 1

00 00
-

0 0 00

0 0 0 1

Figura 6.13. Secuencia de transformaciones del contenido del registro W2 al aplicarle el direcciona miento p o r inversin de acarreo. Aprciese que la suma del modificador se hace de for ma inversa y que cuando hay acarreo se traslada hacia la derecha.

82

dsPIC. DISEO PRCTICO DE APLICACION E S

Del ejemplo estudiado se desprende que la misin del modificador XB es determinar el lugar desde donde comienza a transformarse la direccin. En este caso los bits que se transforman en la direccin destino son W2<5:1>. El bit de menos peso siempre vale 0 y el bit 5 es donde comienza el intercambio. (Figura 6.14.)
DIRECCIN INICIAL W2 XB<14:0>=0x0008 LOS BITS 1-4 DE LA DIRECCIN SE INTERCAMBIAN W2

Figura 6.14. El valor del m odificador XB<14:0> determina el bit donde comienza a transformarse la direccin. En el ejemplo propuesto los 4 bits que cambian de lugar en la direccin d el puntero destino son W2<4:1>. El b it de menos peso siempre vale 0, p o r lo que en realidad en el clculo de la siguiente direccin se suma XBx2 en sentido inverso y con inversin de acarreo.

CAPITULO

La memoria de programa

M . ESTRUCTURA Y DISTRIBUCI N

El mximo espacio disponible de los dispositivos dsPIC para la memoria de programa es de 4 M po siciones de 24 bits cada una, aunque en los modelos actuales no se sobrepasa las 86 K posiciones de 24 bits implementadas con memoria FLASH para contener los programas del usuario. La mitad inferior del espacio de memoria recibe el nombre de Espacio de Memoria del Usuario \ abarca 2 M posiciones, desde la 0x000000 hasta la 0x7FFFFF. La otra mitad se llama Espacio de Memoria de Configuracin y comprende desde la direccin 0x800000 hasta la OxFFFFFF. En el Espacio de Memoria del Usuario residen el Vector de Reset que consiste en una instruc cin GOTO que apunta a la primera instruccin del programa; la Tabla de Vectores de Interrupcin, cuyo tamao en los dsPIC33F ser mayor puesto que habr ms interrupciones debido a que dispo ne de ms perifricos; la Tabla Alternativa de Vectores de Interrupcin que es una imagen de la Ta bla de Vectores de Interrupcin; la memoria FLASH para el usuario, cuya capacidad mxima para k>s dsPIC30F es 124 KB y para los dsP!C33F es 256 KB; y la zona de datos EEPROM, que en el jaso de los dsPIC33F no existe. En el Espacio de M emoria de Configuracin se encuentran los registros para la configuracin ie l dispositivo y las posiciones ID destinadas a la identificacin (DEVID). (Figura 7.1.) Todas las posiciones del mapa de la Figura 7.1 son pares y sus direcciones de 23 bits tienen siemrre a cero el bit de menos peso. En el caso de los dsPIC33F no existe espacio para EEPROM y las Tablas de Vectores de Interrupcin son ms grandes. Hay tres procedimientos para acceder al espacio de direcciones de la memoria de programa:

1o) Directamente a travs de los 23 bits del Contador de Programa (PC). As se accede a la siguien te instruccin a ejecutar. ' 2 :) Mediante las instrucciones especiales de lectura de Tabla (TBLRD) y escritura de Tabla (TBLWT). Se accede a datos. 3) Mapeando un segmento de 32 KB de la memoria de datos en el espacio de direcciones de la me moria de programa. Se accede a datos.

83

84

dsPIC. DISEO PRCTICO DE APLICACIONES


23

"RESETRESET-

INSTR U C C I N GOTO DIR EC C I N DESTINO

000300
000002

T A 8 L A DE VECTO RES DE INTERRUPCIN

000004 00007E 000080 000082 00C084 0000FE


000100

ESPACIO DE MEMORIA DEL USUARIO (2 M x24)

RESERVADO T A BLA ALT E R N A TIV A DE VECTO RES D E INTERRUPCIN M EM O RIA P R O G R A M A USUARIO FLASH

017FFE 018000

R ESERVADO 7 FEFFE 7FF000 800000

EEPROM DATOS {4 K BYTES)

in -SI
R ESERVADO RESERVADO R ESERVADO DEVID

UNITID (32 INSTR U C C IO N E S)

8005BE 8005C0 8005FE 800600 F7FFEE F 80000 F800CE F 80010 FEFFFE FFOOOO FFFFFE

ESPACIO DE MEMORIA DE CONFIGURACIN (2 M x24)

REG ISTRO S DE CO NFIGURACI N DEL DISPO SITIVO

Figura 7.1.

Distribucin del espacio de direcciones de la memoria de programa para un dsPICJOF. El tamao de la FLASH y la EEPROM depende del dispositivo especfico que se trate.

7.2. DIRECC IO NA M IEN TO MEDIANTE EL PC

El Contador de Programa acta como un puntero directo al espacio de la memoria de programa. Consta de 23 bits valiendo siempre cero el de menos peso (PC<0> = 0), lo que supone que todas las direcciones son pares. El direccionamiento secuencial de las instrucciones lo realiza el PC incrementndose de 2 en 2. En los otros dos modos que existen para direccionar la memoria de programa el bit PC<0> se utili za para seleccionar el byte a acceder en la posicin de 24 bits (uno de los bytes no se usa). En la Fi gura 7.2 se muestra grficamente la peculiar manera de incrementarse el PC de 2 en 2 y la forma en que direcciona el Espacio de la Memoria del Usuario.

7.3. TRANSFERENCIA DE DATOS DESDE LA M EM ORIA DE PROGRAMA

En bastantes aplicaciones es muy interesante poder guardar en la memoria de program a datos que posteriorm ente pueden ser ledos. Adems de am pliar la capacidad de almacenamiento de la m e moria RAM, la informacin almacenada en la m em oria FLASH del programa se convierte en no voltil.

LA MEMORIA DE PROGRAMA

85

SU

000 000

ESPACIO MEMORIA USUARIO

i LSB

______________
22

PC

23

~ ~ f~

INSTRUCCIN

24

< r*

SIEMPRE 0

IR

>7FF FFE

Figura 7.2.

El PC slo incrementa el valor de los bits PC<21:1>, manteniendo a 0 el de menos peso para conseguir un direccionamiento secuencial de las direcciones pares en que se en cuentran las instrucciones de programa.

Para poder utilizar el espacio del programa para leer y escribir datos los DSC disponen de dos procedimientos:
.............
a) Utilizando ias instrucciones de Tabla que $e encargan de releer y escribir datos en la memoria de programa. b) Mapeando los 32 KB correspondientes a las direcciones ms altas del espacio de la memoria de datos en una pgina de la memoria de programa de 16 K palabras de 24 bits. Este procedimiento se denomina "Visibilidad del Espacio de Programa (PSV)".

-.4. LAS INSTRUCCIONES DE TABLA

Son 4 instrucciones del repertorio de los DSC que permiten leer o escribir la palabra baja o la al ta de una Tabla. La Tabla est formada por posiciones de la memoria de programa que constan de ,: I bits, o sea, 4 bytes, de los cuales el de ms peso no es vlido y sus bits siempre se leen como ceros. A este byte se llam a byte fantasma. (Figura 7.3.)

86

dsPIC. DISEO PRCTICO DF APLICACIONES


MEM ORIA. D E P R O G R A M A BYTE

Ox 000200 Ox 000202 Ox 000204 Ox 000206

0000 0000 0000 0000

I
; TABLA DE DATOS

oooooooo
0000 0000 31 23 16 15

I
9 PALABRA BAJA

PALABRA ALTA

Figura 7.3.

La Tabla existente en la memoria de programa destinada a los datos tiene posiciones de cuatro bytes, de los cuales el de ms peso no es vlido y se llama byte fantasma.

Las 4 instrucciones de Tabla son.

TBLRDL Lectura de la palabra baja.


TBLWTL: Escritura de palabra baja. TBLRDH: Lectura de la palabra alta. TBLWTH: Escritura de palabra alta.

Las instrucciones de Tabla utilizan como direccin efectiva de 23 bits para una posicin de la memoria de programa, la concatenacin de los 16 bits de un registro W con los 8 bits del registro TBLPAG. El bit de menos peso del registro de trabajo siempre a 0. (Figura 7.4). El registro Wn con tiene la direccin efectiva de la memoria de datos.
DIRECCIN EFECTIVA PARA TABLA

Figura 7.4.

Para direccionar una Tabla de datos en la memoria de programa se utiliza una direccin de 24 bits formados por la concatenacin de un registro Wn y el registro TBLPAG. Como el b it de menos peso de Wn siempre vale 0 las direcciones generadas siempre son pares. Wn contiene la direccin efectiva de la memoria de datos.

Con TBLRDH y TBLWTH se lee y escribe la palabra alta de la tabla, siendo posible el acceso al byte bajo y alto de cada palabra individualmente. El byte alto de la palabra alta no est implentado y se llama byte fantasma. EJEMPLO La instruccin TBLRDL W3,W4, lee los 16 bits de menos peso de lo posicin de lo memoria de pro grama cuya direccin se form a con TBLPAG: W3 <14:0> y los deposita en W4.

LA MEMORIA DE PROGRAMA

87

7.5. VISIBILIDAD DEL ESPACIO DE PROGRAMA (PSV) El otro mtodo que permite leer y escribir datos en la memoria de programa consiste en mapear el trozo de 32 KB de direcciones ms altas (0x800000 - OxFFFFFF) de la memoria de datos en una p gina de 16 K palabras de la memoria de programa. Este procedimiento recibe el nombre de Visibi lidad del Espacio de Programa o abreviadamente PSV. Como cada posicin de la memoria de datos es de 16 bits y la de la memoria de programa de 24 bits, se deshecha el byte de ms peso de esta ltima. A s cada posicin de la memoria de datos ocu pa una posicin en la memoria de programa. Las instrucciones que utilizan el PSV requieren de un ciclo de instruccin extra para ejecutarse. El ciclo de instruccin adicional sirve para direccionar el dato PSV dentro del bus de memoria de programa. Para poner en macha el PSV se pone a 1 el bit PSV residente en el registro CORCON. La direccin que apunta la posicin de la memoria de programa se obtiene concatenando los 8 bits jel registro PSVPAG con los 15 bits de menos peso de un registro de trabajo Wn. Cuando se trabai en modo PSV W n<15> = 1, mientras que en modo normal W n<15> = 0, es decir, que el bit de n s peso de la direccin efectiva de la memoria de datos vale 1 (mitad superior). Con el bit de me ros peso de Wn se puede seleccionar el byte a acceder dentro de la palabra. (Figuras 7.5 y 7.6.)
DIRECCION EFECTIVA

1514

ricura 7.5. l.a direccin afectiva de 23 bits que apunta la posicin de la memoria de programa se for ma con los 8 bits del registro PSVPAG concatenados con los 15 bits de menos peso de Wn. En m odo PSV Wn>15> = 1 y el bit Wn>0> selecciona el byte a acceder en la pala bra. Wn contiene la direccin efectiva de la memoria de datos.

En realidad el contenido de Wn es la direccin efectiva <EA> de la memoria de datos que se maen la memoria de programa. IPLO PSV= 1, la instruccin M O V 0xF052, W2 carga los 16 bits de menos peso de la direccin de la metria de programa form ada por la concatenacin PSVPAG: 7052 en el registro W2.

jy . GRABACION DE LAS MEMORIAS FLASH Y EEPROM

i grabar las memorias FLASH y EEPROM de los DSC hay dos mtodos:

l ' Autograbacin en tiempo de ejecucin (RTSP). : Grabacin serie en circuito (ICSP).

88

dsPIC. DISEO PRCTICO DE APLICACIONES


ESPACIO DE PROGRAMA

2?

, , . Q

ESPACIO DE DATOS
0x0000

o
/i 6 DAT O lE I D O

EL BYTE DE MS PESO NO SE LEE-------------- EN MODO PSV

Figura 7.6.

Los 8 bits de ms peso de la posicin del espacio de programa no son vlidos por lo que cada posicin de la memoria de datos ocupa una posicin en la memoria de programa.

La memoria EEPROM est mapeada dentro del espacio de la memoria de programa y segn el modelo que se trate puede alcanzar hasta una capacidad de 2 K palabras de 2 bytes de contenido ca da una en los dsPIC30F. Los dsPIC33F no disponen de memoria EEPROM. Las tcnicas usadas para la grabacin de la EEPROM de datos y la FLASH son similares cuan do se usa el mtodo RTSP. La nica diferencia destacable entre ambos tipos de memoria es la can tidad de datos o informacin que puede ser grabado o ledo en cada ciclo de grabacin/borrado.

7.6.1. Autograbacin en tiempo de ejecucin (RTSP)

Esta tcnica la desarrolla el usuario mediante las instrucciones de Tabla que transfieren informacin entre la memoria de datos y la de programa. Con las 4 instrucciones de Tabla comentadas anterior mente se leen o escriben los 16 bits de la palabra baja o los bits <23:16> de la palabra alta. La di reccin efectiva de la posicin de la memoria de programa se forma con los 8 bits del registro TBLPAG y los 16 de un registro Wn, que contiene la direccin efectiva de la memoria de datos. EJEMPLO 1 Programa para depositar en los registros W2:W3 los 24 bits vlidos de la posicin de la memoria de programa cuya direccin queda definida por tbIpage: tbloffset.

LA MEMORIA DE PROGRAMA

89

18 : MOV MOV MOV

v Iv v -T 1 #tblpage, WO W O, TBLPAG tttbloffsct, WO [WO], W2 TWOL W3 ; carga en WO el valor EA<23:6> ; carga WO en registro TBLPAG ; carga EA<I5:0> en WO ; lee el byte alto <23:16> en W2 ;!ee palabra baja <15:0> en W3

TBLRDH TBLRDL

EJEMPLO 2 Cargar un valor de 24 bits en una posicin de la m em oria de program a cuya direccin EA<23:0>es tblpage:tbloffset. El dato a grabar est form ado p or la palabra baja #\vord low v el bxte alto #b \te hi.

MOV MOV MOV MOV MOV TBLWTL TBLWTH

tttblpage, WO W O, TBLPAG fttblojfset, WO Jhvordjtw, W2 tbytejii . W3 W2y WO] V V 5. [W0++]

; carga en WO el valor EA<23:16> ; carga WO en registro TBLPAG ; carga EA<15:0> en WO ;carga en W2 la palabra baja ;carga en W3 el byte alto ;escribe la palabra baja ;escribe el byte alto

Tambin es posible grabar y leer la memoria de programa con datos de tamao byte dentro de cada una de sus palabras. Para la grabacin/borrado de mltiples datos de la FLASH y la EEPROM se utilizan tres regis tros de control NVM (M emoria No Voltil).

NVMCOM: Registro de Control NVM. NVMKEY: Registro Clave NVM. NVMADR: Registro de Direccin NVM.

El registro NVMCOM selecciona si la operacin se realizar sobre la FLASH o la EEPROM y las caractersticas principales de la misma, tal como se indica en la tabla de la Figura 7.7. El registro NVM CON se muestra en la Figura 7.8 y consta de los siguientes bits significativos:

'

WR (bit 15): Bit de control de escritura (borrado o grabacin). WREN (bit 14): Permiso de escritura (borrado o grabacin). WRERR (bit 13): Flag de error de escritura en Flash. Reservado (bit 12- 8). PROGOP <7:2> (bit 7 - 0): Cdigo de operacin de grabacin.

90

dsPIC DISEO PRCTICO DE APLICACIONES

VALO RES DE N VM CO M PARA O O P ER A C IO N ES DE G R A B A C I N /B O R R A D O TIP O M EM O RIA O PER A CI N


BORRADO FLASH GRABACIN 4 INSTRUCCIONES 1 PALABRA BORRADO 16 PALABRAS EEPROM 1 PALABRA GRABACIN 16 PALABRAS REGISTRO CONFIGURACIN ESCRITURA 1 REGISTRO CONFIGURACIN 0x4005 0x4008 0x4004 0x4045 0x4001 0x4044

TAM AO DATOS
1 FILA (32 INSTRUCCIONES)

V A LO R N VM CO M
0x4041

Figura 7.7.

Valores que hay que cargar en NVM CO M para llevar a cabo diversas operaciones con las memorias FLASH y EEPROM.

BYTE ALTO 15
.v a -.v / a \ w a w
w w

..w

.*

> > \W R

WREN

W RERR

BYTE BAJO 7 PROGOP < 7 :0 >

Figura 7.8.

Registro NVMCON.

El registro NVM ADR contiene los 16 bits de menos peso de la direccin efectiva (EA<15:0>) de la posicin a grabar o borrar. Este registro lo manejan automticamente las instrucciones de Ta bla y el usuario puede modificarlo cuando lo desee. El registro NVADR se muestra en la Figura 7.9. NVADR <15:0>: indica la posicin de memo ria en la que se quiere grabar o borrar.

o w o w M e nw o o i x c a w o o f j j o e a jooarac

NVM AD R< 15:8>

BYTE BAJO
i .......... n i ............... ih h jih ih i umili * > m u il ilinni M nnrwiniwn n~ ~i r i " ir i r r r r ~ r n i r i n "
~

N V M A D R <7 :0 >

:
Figura 7.9. Registro NVADR.

LA MEMORIA DE PROGRAMA

91

El registro NVMKJEY slo puede ser escrito y su misin es evitar grabaciones o borrados acci dentales. Se le utiliza para guardar unos valores claves o de seguridad, que se indican a continuacin: 1 Hay que escribir el valor clave o de seguridad 0x55 en NVMKEY. 2. Hay que escribir a continuacin el valor OxAA en NVMKEY. 3. Ejecutar dos instrucciones NOP. Las interrupciones debern ser deshabilitadas durante la secuencia anterior. Tras esta secuencia, la escritura estar permitida al registro N VMCON durante un ciclo de instruccin. Con la tcnica RTSP se pueden borrar 32 instrucciones o 96 bytes simultneamente y se pueden grabar 4 instrucciones (12 bytes) a la vez. EJEMPLO El programa que se propone de carcter didctico muestra las instrucciones apropiadas para bo rrar una lnea de 32 instrucciones (96 bytes) en la memoria de programa.

MOV MOV

#0X 4041, WO W0, NVM COM

: imcializacin NVMCOM ; creacin del puntero a la jila que se desea borrar

M OV M OV MOV M OV

m ip a g e , WO WO, TBLPAG m ioffseU WO WO, NVM ADR

; inicializa TfLPAG ; in id a l iza NVMADR bloqueo de las ;interrupciones durante las 5 ;siguientes instrucciones
;

DISi MOV M OV MOV M OV BSI;:" '' "

#5

0x55 . WO WO, N VM K EY OXAA, WO WO, NVM KEY


A^

; se escriben en el registro de ;seguridad NVM K EY tas ;claves 0x55 y OxAA

comienza borrado

sor
NOP

7.7. GRABACIN SERIE EN CIRCUITO (ICPS) Se trata de un protocolo registrado por Microchip destinado a la grabacin en serie de dispositivos programables conectados en el circuito de aplicacin, simplemente utilizando dos lneas, una para

92

dsPIC. DISEO PRCTICO DE APLICACIONES

el reloj y otra para transferir los datos serie a grabar mediante el interfaz SP1 y un software integral de tipo bootloader cuyas especificaciones tcnicas pueden encontrarse en las pginas del fabri cante en Internet (www.microchip.com). Este sistema de grabacin se utiliza con gran efectividad en todo tipo de microcontroladores y dispositivos programables, adems de los DSC.

mWMi

CAPITULO

Interrupciones y excepciones

8.1. IN T R O D U C C I N

Las interrupciones y las excepciones son causas que desvan el flujo de control en la ejecucin de instrucciones. Las interrupciones son provocadas por acontecimientos externos, como los que ori ginan los perifricos integrados o las seales aplicadas en determinadas patitas. Las excepciones se producen automticamente cuando el procesador detecta algn error o anomala en la ejecucin de una instruccin. Los dsPIC30F atienden a 54 tipos de interrupcin y 8 tipos de excepcin bajo un sistema de con trol de las" siguientes caractersticas:

Tabla de 62 vectores de interrupcin (IVT). 7 niveles de prioridad programables por el usuario para las interrupciones. Un vector dedicado para cada causa de interrupcin o excepcin. Para soportar labores de depuracin existe una Tabla Alternativa de Vectores de Interrupcin (AIVT).

8.2. TABLA DE VECTORES IVT Y A1VT DE LOS DSPIC30F La Tabla de Vectores de Interrupcin IVT ocupa 62 posiciones de la memoria de programa a partir de la direccin x 004. Cada posicin consta de 24 bits que conforman la direccin de la me moria de programa donde comienza la rutina de servicio de la interrupcin correspondiente (1SR). A dicha direccin se llama Vector de Interrupcin. Los 8 primeros vectores de la IVT soportan las excepciones y los 54 restantes las interrupciones. La Tabla A lternativa de Vectores de Interrupcin AIVT tiene una organizacin idntica a la IVT y est situada a continuacin en el espacio de la m emoria de programa. Para que el proce sador utilice la A IV T se precisa que el bit ALTIVT = 1 (INTCON2<15>). Cuando est operati va la AIVT los procesos de interrupcin y excepcin manejan dicha tabla que est diseada
93

94

dsPIC. DISEO PRCTICO DE APLICACIONES

para labores de em ulacin y depuracin ofreciendo un soporte para intercam biar la Tabla de Vec tores entre el entorno de aplicacin del usuario y el de las m encionadas labores. Estos rasgos tam bin se activan eligiendo en las aplicaciones para evaluacin de diferentes algoritm os soft ware en tiempo de ejecucin. Cuando no se usa la A1VT sus contenidos son los mismos que la IVT. (Figura 8.1.)

RESETRESET-

INSTRUCCIN GOTO DIRECCIN GOTO

I 0x000000 8 0x000002 Ox 000004

FALLO DE OSCILADOR ERROR DE DIRECCIQNAMIETO FALLO DE PILA

ERROR ARITMTICO
RESERVADO _____________ RESERVADO RESERVADO VECTOR DE INTERRUPCIN 0 ________ VECTOR b' lN T E R R U P C I N 1 0 0x000014

VECTORES DE EXCEPCIN

54 VECTORES DE INTERRUPCIN VECTOR D E INTERRUPCIN 52 VECTOR DE INTERRUPCIN 53" RESERVADO RESERVADO FALLO DE OSCILADOR ERROR DIRECCIONAMIENTO FALLO DE PILA ERROR ARITM TICO RESERVADO RESERVADO RESERVADO VECTOR DE INTERRUPCIN 0 VECTOR DE INTERRUPCIN 1
Ox 0 0 0 0 9 4

Ox 00G07E 0X 000080 0x000082 Ox 000084

VECTOR DE INTERRUPCIN 52 VECTOR DE INTERRUPCIN 53


UX OOOCr E

Figura 8.1.

Espacios de direcciones ocupados por las tablas IVT y AIVT en el mapa de la memoria de programa de los dsPIC30F

INTERRUPCIONES Y EXCEPCIONES

95

No se considera una interrupcin el Reset puesto que en su tratamiento no interviene el controjjdor de interrupciones. Cuando se produce un Reset se borran los registros y el PC pasa a valer ce ro, iniciando el procesador la ejecucin de instrucciones a partir de la situada en la direccin 0x000 V)0 de la memoria de programa en la que se coloca el cdigo de un GOTO que pasa el flujo de con s o l a la direccin donde empieza el programa principal. En la Figura 8.2 se presenta una tabla que muestra las direcciones ocupadas por la IVT y la AI VT \ .25 causas que originan las interrupciones y excepciones.

NMERO E VECTOR

D IR EC C I N IVT
0x000004 0x000006 0x000008 OxOOOOOA OxOOOOOC OxOOOOOE 0x000010 0x000012 0x000014 0x000016 0x000018 0x00001 A 0x00001C 0x00001E 0x000020 0x000022 0x000024 0x000026 0x000028 0x00002A 0x00002C 0x00002E 0x000030 0x000032 0x000034 0x000036 0x000038 0x00003A Qx00003C 0x00003E 0x000040 0x000042 0x000044 0x000046 0x000048 0x00004A 0x00004C

D IR EC C I N A IV T
0x000084 0x000086 0x000088 0x00008A 0x00008C 0x00008E 0x000090 0x000092 0x000094 0x000096 0x000098 Ox00009A 0x000096 0x00009D OxOOOOAO 0x0000A2 0x0000A4 0x)000A6 xOOOOA8_ OxOOOOAA OxOOOOAC OxOOOOAE OxOOOOBO 0x0000B2 0x000084 0x0000B6

CAUSA DE EX C EP CI N
RESERVADO FALLO DE OSCILADOR ERROR DE DIRECCION AMIENTO ERROR DE PILA ERROR ARITMTICO RESERVADO RESERVADO RESERVADO INTO - INTERRUPCION EXTERNA N U M O IC1 - ENTRADA M O D U LO CAPTURA 1 OC1 - SALIDA DEL COMPARADOR I TI -T1MER1 IC2 - ENTRADA M O D U LO CAPTURA 2 OC2 - SALIDA DEL COMPARADOR 2 T2 - TIMER 2 T3 - TIMER 3

U l RX

UART 1 RECEPTOR

U l T X -U A R T 1 EMISOR CONVERSIN ADC - ADC REALIZADA ESCRITURA COMPLETADA IC 2 OPERACION ESCLAVO - MENSAJE DETECTADO IC 2 OPERACION MAESTRO - MENSAJE COMPLETADO NOTIFICACIN DE CAMBIO DE ENTRADA INT1 - INTERRUPCION EXTERNA N U M 1 IC 7 - ENTRADA M D U LO DE CAPTURA 7 IC 8 - ENTRADA M O D U LO DE CAPTURA 8 OC 3 - SALIDA DEL COMPARADOR 3 OC 4 - SALIDA DEL COMPARADOR 4 T4 - TIMER 4 T5 - TIMER 5 INT 2 - INTERRUPCIN EXTERNA N M 2 UR2 X - UART 2 RECPETOR UT2X - UART 2 EMISOR

0x00001*8
0x0000BA OxOOOOBC 0X0OOOB3 OxOOOOCO
0x0000C 2

0x0000C4

oxooooce oxooooca
OxOOOOCA OxOOOOCC

CAN 1 IC3 - ENTRADA M D U LO CAPTURA 3

Direcciones de los vectores de IVT y AIVT en memoria de programa y causas que p ro ducen interrupciones y excepciones en los dsPIC30F. No todos los modelos DSC dispo nen de los mismos perifricos integrados y por tanto usan todos los vectores de la tabla ,

96

dsPIC. DISEO PRCTICO DE APLICACIONES

N M ERO DE V EC T O R
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53-61

D IR EC C I N IVT
0x00004E 0x000050 0x000052 0x000054 0x000056 0x000058 OxOOOOSA

D IR EC C I N A IV T
OxOOOOCE

CAUSA DE EXC EP CI N
IC4 - ENTRADA M D U LO CAPTURA 4 IC5 - ENTRADA M D U LO CAPTURA 5 IC6 - ENTRADA M D U l O CAPTURA 6 OC5 - SALIDA DEL COMPARADOR 5 OC6 - SALIDA DEL COMPARADOR 6 OC7 - SALIDA DEL COMPARADOR 7 OC8 - SALIDA DEL COMPARADOR 8 IN I 3 - INTERRUPCIN EXTERNA N M 3 . INT 4 -INTERRUPCIN EXTERNA N M 4 CAN 2 PVVM - PWM COMPARACIN PERODOS QEI - COMPARADOR POSICIN CONTADOR DCI - TRANSFERENCIA DE C D IG O REALIZADA LVD - DETECCIN DE VOLTAJE BAJO FLTA - MCPVVM FAULT A FLTB - MCPWM FAUi.T B RESERVADOS

0x000000
0x0000D2 OxOOOOD4 0x0000D6 0x000008 OxOOOODA OxOOOODC OxOOOODE OxOOOOEO OxOOOOE2 OxOOOOE4 0x000E6 0x0000E8 OxOOOOEA OxOOOOEC OxOOOOEE-OxOOOOFE

0x00005c
0x00005F 0x000060 0x000062 0x000064 0x000066 0x000068 0x00006A

0 x00006c
OxOOOO6E-OxO0OO7F

Figura 8.2.

Direcciones de los vectores de IVT y AIVT en memoria de programa y causas que p ro ducen interrupciones y excepciones en los dsPIC30F. No todos los modelos DSC dispo nen de los mismos perifricos integrados y por tanto usan todos los vectores de la tabla. (Continuacin).

8 .3. TABLA DE VECTORES IV T Y A IV T DE LOS DSPIC33F

La Tabla de Vectores de Interrupcin (IVT) de los dsP!C33F se muestra en la Figura 8.3. La IVT re side en la memoria de programa empezando en la posicin 0x000 004. La IVT contiene 126 vecto res comenzando por 8 vectores de excepciones no mascarables a los que se aaden 118 vectores de interrupcin. En general, cada fuente de interrupcin tiene su propio vector. Cada vector de interrupcin con tiene una direccin de 24 bits donde se inicia la rutina de atencin. El valor programado en cada localizacin del vector de interrupcin es el comienzo de la direccin de las rutinas de servicio de interrupcin asociadas (ISR). Los vectores de interrupcin estn organizados siguiendo el orden de su prioridad natural; esta prioridad es inherente a las direcciones en la tabla de vectores. Por ejem plo, la interrupcin asociada con el vector 0 tom ar el control antes que otras con el mismo nivel de prioridad. La tabla de vectores de interrupcin alternativa (AIVT) est situada despus de la IVT, co mo se m uestra en la Figura 8.3. El acceso a la A IVT lo proporciona el bit de control ALTIVT (INTCON2<'15>). Si ALTIVT est a 1, todas las interrupciones y excepciones usarn los vecto res alternativos en vez de los vectores principales. Los vectores alternativos estn organizados de la mism a m anera que los vectores de la IVT. La A IVT soporta tareas de depuracin. El espa cio de cdigo para el usuario com ienza detrs de la AIVT, es decir, a partir de la direccin 0x000200.

INTERRUPCIONES Y EXCEPCIONES

97

R E S E T - INSTRUCCI N GO TO RESET - DIRECCIN GOTO RESERVADO ________ FALLO DE'O SC ILA D O R ERROR DE D IR E C eiO N A M IE N TO FALLO DE PILA ERROR ARITM TICO ERROR DMA RESERVADO RESERVADO VECTO R DE IN TERRUPCIN 0 VECTOR DE IN TERRUPCI N 1

Ox 000000 Ox 000002 0x 000004

8 VE C TO R E S DE EXCEPCIN

u u

Ox 000014

118 VE C TO R E S DE INTERRUPCIN VECTO R DE IN TERRUPCIN 116 VECTOR DE IN TERRUPCI N 117 RESERVADO RESERVADO RESERVADO FALLO DE O SCILADOR ERROR D IR EC CION AM IENTO FALLO DE PILA ERROR ARITM TICO ERROR DMA RESERVADO RESERVADO Ox000114 OxOOOOFC 0x 0000FE

0x000100
0x000102
0x0 0 0 1 0 4

VECTO R DE IN TERRUPCIN 0

.....

VECTO R DE INTERRUPCI N 1
.

VECTOR DE IN TERRUPCI N 116 VECTO R DE INTERRUPCI N 117

Ox000 1 FC 0x0001 FE

.... . . . . . . ............ ...... . .


: :

Figura 8.3.

Espacios de direcciones ocupados por las tablas IVT y AIVT en el mapa de la memoria de programa de los dsPIC33F.

En las Figuras 8.4 y 8.5 se presenta una tabla que m uestra las direcciones ocupadas por la IVT y la AIVT junto a las causas que originan tanto las interrupciones com o las excepciones de los dsPIC33F.

98

dsPIC. DISEO PRCTICO DE APLICACIONES

N M ERO DE V EC T O R
0 1 3 4
i .

D IR EC C I N IVT
0x000004 0x000006 0x000008 OxOOOOOA OxOOOOOC OxOOOOOE 0x000010 0x000012 0x000014 0x000016 0x000018 0x00001A 0x00001C 0x00001E 0x000020 0x000022 0x000024 0x000026 0x000028 0x00002A 0x00002C 0x00002E 0x000030 0x000032 0x000034 0x000036 0x000038 0x00003A ()x00003C 0x00003F 0x000040 0x000042 0x000044 0x000046 0x000048 0x00004A 0x00004C 0x00004E 0x000050 0x000052 0x000054 0x000056 0x000058 0x0Q005A 0x00005C 0x00005E 0x000060 0x000062 0x000064 0x000066 0x000068 Qx00006A OxOOOOC 0x00Q06E

D IR E C C I N A IV T
0x000084 0X000J& 0x000088 Ox00008A OxOOOOtC 0x00008E 0x000090 0x000092 0x000094 0x000096 0x000098 Ox00009A 0x00009c 0x00009D OxOOOOAO
0 X0 0 0 A 2

CAUSA DE EXC EP CI N
RESERVADO FALLO DE OSCILADOR ERROR DE DIRECCIONAMIENTO ERROR DE PILA ERROR ARITMTICO ERROR D M A RESERVADO RESERVADO INTO - INTERRUPCIN EXTERNA N M 0 IC1 - ENTRADA M O D U LO CAPTURA 1 O C I - SALIDA DEL COMPARADOR 1 T1 -TIMERT DM A 0 - DM A CANAL 0 IC2 - ENTRADA M O D U L O CAPTURA 2 OC2 - SALIDA DEL COMPARADOR 2 T 2 -T IM E R 2 T3 - TIMER 3 SPI 1E-ERROR EN SPI1 SPI1 - TRANSFERENCIA SPI1 REALIZADA U IRX UARTI RECEPTOR U1 T X -U A R T 1 EMISOR ADC 1 - CONVF.RSOR A /D I DM A 1 - CANAL D M A 1 RESERVADO SI2C1 - OPERACION I2C1 ESCLAVO MI2C1 - OPERACION I2C1 MAESTRO RESERVADO NOTIFICACION DE CAMBIO DE ENTRADA INT1 - INTERRUPCIN EXTERNA N M 1 ADC 2 - CONVERSOR A 'D 2 IC 7 - ENTRADA M D U LO DE CAPTURA 7 IC 8 - ENTRADA M D U LO DE CAPTURA 8 DM A 2 - CAN Al D M A 2 OC3 SALIDA DEL COMPARADOR 3 OC4 - SALIDA DEL COMPARADOR 4 T4 - TIMER A T5 - TIMER 5 JNT 2 - INTERRUPCIN EXTERNA 2 U 2 R X -U A R T I RECEPTOR U2TX - UARTI EMISOR SPI2L - LRROR EN SPI2 SPI2 - TRANSFERENCIA SPI2 REALIZADA C1RX - EC/\N 1 PREPARADO PARA RECIBIR DATOS C1 - CAN1 DMA3 CANAL D M A 3 IC3 - ENTRADA M D U LO CAPTURA 3 IC4 - ENTRADA M O D U IO CAPTURA 4 IC5 ENTRADA M D U L O CAPTURA 5 IC6 - ENTRADA M O D U L O CAPTURA 6 OC5 - SALIDA COMPARADOR 5 OC6 - SALIDA COMPARADOR 6 OC7 SALIDA COMPARADOR 7 OC8 - SALIDA COMPARADOR 8 RESERVADOS

. . . 5 ...................

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
23 2-1

OxOOOOA4 OxOOOOA6 0x0000A8 OxOOOOAA OxOOOOAC OxOOOOAE 0x000080 0x000062 0x000084 0x000036 OxOOOOB8 OxOOOOBA OxOOOOBC OxOOOOBE OxOOOOCO 0x0000C2 OxOOOOC4 OxOOOOC6 OxOOOOC8 OxOOOOCA OxOOOOCC OxOOOOCE OxOOOODO 0x0000D2 0x0000D4 OxOOOOD6 0 x000008 OxOOOODA OxOOOODC Oxooocdf OxOOOOEO OxOOOOE2 0x0000E4 OxOOOOE6 OxOOOOEf OxOOOOEA OxOOOOEC OxOOOObE

25
26

27 28 29 30 31 32
33

34
35

36
37

......3 8
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

Figura 8.4.

Direcciones de los vectores de IVT y AJVT en memoria de programa y causas que produ cen interrupciones y excepciones en los dsPIC33F. No todos los modelos DSC disponen de los mismos perifricos integrados y por tanto usan todos los vectores de la tabla.

INTERRUPCIONES Y EXCEPCIONES

99

N M ERO DE VECTO R
54 55 56 57 50 59

D IR E C C I N IVT
0 x0 0007 0 0x0 0007 2 0x0 0007 4 0x0 0007 6 0x0 0007 8 0x0 0007 A X00007C 0x00007E 0x0 0008 0 0x000082 0 x0 0008 4 0x0 0008 6 0x0 0008 8 0 x0 0 0 0 8 a

D IR EC C I N AIVT
0 x0 0017 0 0x000172 0x0 0017 4 0x0 0017 6 0x000178 0 x0 0017A 0 x 0 0 0 1 7C 0 x0 0 0 1 7E 0 x0 0018 0 0x0 0018 2 0x0 0018 4 0x0 0018 6 0x0 0018 8 0x0 0 0 1 8A 0 x 0 0 0 18C 0 x 0 0 0 I8F 0x0 0019 0 0x000192 0x0 0019 4 0x0 0019 6 0x0 0019 8 0 x0 0 0 1 9A 0x00019C 0 x0 0 0 1 9E 0x0001 A 0

CAUSA DE EXCEPCI N
D M A 4 - C A NAL D M A *1 1 6 - IIM FR (t

T7 - TIMER 7
SI2C2 - EVENTO EN EL I2C2 ESCLAVO M I2C 2 - EVENTO EN EL I2C2 MAESTRO T8 - TIMER 8 T9 TIMER9

60
61 62 63 64 65

IN T3 -IN TER R U PC I N EXTERNA 3 IN T 4 - INTERRUPCION EXTERNA 4 C2RX - ECAN2 PREPARADO PARA RECIBIR DATOS C2 - EVENTO C AN2 PVVM PERODO P W M

66
67 68 69 70 71 72 73 74 75 76 77 78

QEI - C O M P A R AC I N C O N T A D O R DE POSICIONES DCIF - ERROR DCI D C ID - TRANSFERENCIA DCI REALIZADA D M A 5 - OXNAL D M A 5 RESERVADO FLTA - FALTA EN MCPVVM FLTB - FALTA EN MCPVVM U 1 E -E R R O R EN UART1 U2E - ERROR EN UART2 RESERVADO D M A 6 - CANAL D M A 6 D M A 7 - CANAL D M A 7 C IT X - PETICION DE TR AN SM ISIO N DE DATOS EN EC AN 1 RESERVADO (PARA DISPOSITIVOS "PS")

0x00008c
0x00008E 0x0 0 0 0 9 0 0x000092 0 x0 0009 4 0 x0 0009 6 0x 0 0 0 0 9 8 0 x 00 009 a

0x00009c
OxOOOOOE OxOOOOAO

79

0x0000A 2

0x0001 A2

C 2 T X - PETICIN DE TR AN SM ISI N DE DATOS FN FCAN2 RESERVADO (PARA DISPOSITIVOS "PS")

80-125

OxOOOOA4-OxOOOOFE 0 x 0 0 0 1A4-X0001 FE

RFSFRVADAS

Figura 8.5.

Continuacin de la tabla con lis direcciones de los vectores de IVT y AIVT en memoria de programa y causas que producen interrupciones y excepciones en los dsPIC33F.

8.4. NIVEL DE PRIORIDAD DE LA CPU La CPU funciona en todo momento con un nivel de prioridad para interrupciones y excepciones comprendido entre y 15. Los perifricos y las interrupciones externas trabajan con niveles de prio ridad entre 0 y 7. mientras que las excepciones operan con un nivel fijo cuyo valor oscila entre 8 y I 5 y se consideran como interrupciones no mascarables dirigidas a detectar problemas hardware y software. El nivel de prioridad de cada fuente de una excepcin es fijo. Para atender una interrupcin o una excepcin su nivel de prioridad debe superar el de la CPU. Si una peticin de interrupcin procedente de un perifrico o una patita especfica tiene un nivel de prioridad 0 se considera que est desactivada puesto que nunca podr superar el de la CPU. El nivel de prioridad de la CPU queda determinado por los 4 bits IPL<3:0>, estando ubicados los tres de menos peso en SR<7:5> y el de ms peso en CORCON<3>. Los niveles de prioridad de la CPU comprendidos entre 0 y 7 se fijan con IPL<2:0>. Si, por ejemplo, IPL<2:0> = 4, no se permi ten inteiTUpciones cuyo nivel de prioridad sea igual o menor que 4. En el caso que IPL<2:0> = 7 to das las fuentes de interrupcin estn prohibidas. Cuando se activa TPL3 (CORCON<3>) se progra ma el nivel de prioridad para las excepciones y puede valer de 8 a 15. Las excepciones tienen mayor

100

dsPIC. DISEO PRCTICO DE APLICACIONES

prioridad que cualquier interrupcin de usuario. Los bits IPL<2:0> pueden leerse y escribirse pero el bit IPL3 puede ser borrado, aunque no activado por el usuario. 8.5. NIVEL DE PRIORIDAD DE LAS INTERRUPCIONES Existen 54 causas de interrupcin diferentes en los dsPIC30F y 118 en los dsPIC33F que estn pro ducidas por los perifricos integrados o por las patitas destinadas a tal efecto. El usuario puede pro gramar individualmente cada tipo de interrupcin con el nivel de prioridad deseado situado entre 1 (mnimo) y 7 (mximo), pues el nivel 0 significa su prohibicin. Esta programacin se realiza es cribiendo el valor adecuado en los bits IPL<2:0>, no usndose el IPL3 que se lee como cero. Para resolver conflictos de prioridad en las situaciones en las que varias causas de interrupcin con el mismo nivel de prioridad se producen simultneamente, se tiene en cuenta el nivel natural de cada una que corresponde con el lugar o nmero que ocupa en la tabla. Cuanto ms alto sea el nmero del vector, menor es el nivel natural de prioridad. Este nivel natural slo se aplica para re solver los conflictos de prioridad entre varias interrupciones con el mismo IPL. Lo correcto es que el usuario al programar el IPL asigne un valor bajo a las causas que ocupan un nmero de vector al to y viceversa, para ajustarse al orden natural, aunque en algunas ocasiones puede interesar hacer lo contrario.

8.6. NIVEL DE PRIORIDAD PARA LA EXCEPCIONES Las excepciones son desviaciones del flujo de control provocadas por anomalas detectadas por el procesador durante la ejecucin de una instruccin. Hay excepciones que se detectan al comenzar la ejecucin de la instruccin causante, en cuyo caso se da paso a la rutina de atencin que intenta r corregir el error para, posteriormente, regresar a la instruccin y ejecutarla. Las excepciones tienen un nivel de prioridad entre 8 y 15 debiendo valer 1PL3 = 1, por lo que siempre superan el nivel de las interrupciones y por eso se las considera como "interrupciones no mascarables. El procesador pone a 1 automticamente el IPL3 al procesar una excepcin. Cada ti po de excepcin tiene un IPL fijo que viene determinado por el nmero de vector que ocupa en la tabla. (Figura 8.6.)
-....................................................

NMERO VECTOR
0 1 2 3 4 5 6 7

NIVEL DE INTERRUPCIN
M X IM A PR IO R ID AD (5) 14 13 12 M N IM A PR IO R ID AD (11)

CAUSA DE EXCEPCIN
RESERVADO TALLO O S C ILA D O R RRROR D IR E C IO N AM IEN TO ERROR PILA ERROR ARITM TIC O RESERVADO RESERVADO RESERVADO

Figura 8 .6 .

Nivel de prioridad de las excepciones de los dsPIC30F.

INTERRUPCIONES Y EXCEPCIONES

101

Las excepciones de Error de Pila y Error Aritmtico se consideran de tipo software, mientras que las de Fallo del Oscilador y Error de Dircccionamiento se las considera de tipo hardware. En las ex cepciones tipo software hay que terminar la ejecucin de la instruccin causante de las mismas an tes de ejecutar la rutina de atencin. En las excepciones tipo hardware no se completa la ejecucin de la instruccin causante porque dara resultados errneos y se lanza la rutina de atencin en cuan to se detecta el error. Los dsPIC33F disponen de una excepcin ms, originada por el Fallo del CDM A .

8.6.1. Excepcin por Error Aritmtico

Se trata de una excepcin tipo software de mnima prioridad (1PL = 11) que se genera por una de las siguientes causas:

a) b) c) d) e)

Sobrepasamiento de Acumulador A. Sealizador OVATE (INTCON 1<10>). Sobrepasamiento del Acumulador B Sealizador OVB TE (INTCON1<9>). Sobrepasamiento catastrfico en cualquier Acumulador. Sealizador COVTE (INTCON 1<8>) Divisin por cero. Desplazamiento del Acumulador superior a +/- 16 bits al ejecutar la instruccin SFTAC.

8.6.2. Excepcin por Error de Pila

La cima de la Pila queda direccionada despus de un Reset con el valor 0x0800 y su tamao mxi mo lo deterjnina el Registro Lmite de la Pila SPLTM. Cuando una direccin efectiva para la Pila ge-erada por W15 no est comprendida entre los lmites establecidos se genera este tipo de excepcin que posee un nivel de prioridad 12. El error de pila puede detectarse tambin por software comprobando el bit de estado STKERR en IN TCO M l<2>. El flag STKERR tiene que ser borrado por software para retornar con la ins truccin RETF1E.

3.6.3. Excepciones por Error de Direccionamiento y Fallo del Oscilador

Son las dos excepciones hardware de mxima prioridad que fuerzan a atender la causa antes de fi nalizar la ejecucin de la instruccin responsable de las mismas. Cuando se genera una peticin de una excepcin con mayor nivel de prioridad que la que se esi procesando, se suspende temporalmente esta ltima que pasa a marcarse como pendiente y se idende a la de mayor prioridad. Cuando se origina un conflicto de prioridad debido a las excepciones se genera un Reset. La excepcin por Fallo del Oscilador (IPL = 14) se origina por las siguientes causas: a) Se activa el M onitor de Fallo del Reloj (FSCM) al detectar un fallo en el sistema del reloj principal. b) Se detecta un fallo en el PLL cuando est en funcionamiento. c) Se activa FSCM y falla el PLL al producirse un Reset de encendido (POR).

102

dsPIC. DISEO PRCTICO DE APLICACIONES

La excepcin por Fallo del Oscilador puede detectarse por software comprobando el bit de esta do OSCFAIL en IN TC 0N <1> o el bit de estado CF en OSCCON<3>. El flag OSCFAIL tiene que ser borrado por software para retom ar con la instruccin RETFIE. La excepcin por Error de Direccionamiento (IPL = 13) se produce por las siguientes causas: a) Se intenta acceder a un dato desalineado (acceso a una palabra con direccin impar). b) Una instruccin de manipulacin de bits utiliza direccionamiento indirecto con el bit de me nos peso de la direccin efectiva a 1. c) Se intenta acceder a un dato en una zona de la memoria de datos no implementada fsicamente. d) Ejecucin de la instruccin BRA #literal o la GOTO #literaT cuando literal es una direc cin de memoria de programa sin implementar. e) Ejecutar una instruccin despus de modificar el PC para apuntar a una direccin de memo ria de programa sin implementar. El PC tiene que ser modificado con la carga de un valor dentro de la pila y ejecutando la instruccin RETURN. El espacio de datos estar prohibido mientras dure la excepcin en curso, para no destruir nin gn dato. El error de direccionamiento puede detectarse por software comprobando el bit de estado ADDRERR en 1NTC0N<3>. El flag ADDRERR tiene que ser borrado por software para retornar con la instruccin RETFIE.

8 .7 . PRO CESAM IENTO DE LAS INTERRUPCIO NES

Todos los sealizadores de las causas de interrupcin son explorados cada ciclo de instruccin. Cuando existe una peticin de interrupcin pendiente (IRQ - Interruption Routine Qcuc) se pone a 1 el bit sealizador correspondiente en el registro IFSx (Tnterrupl Falg Status). Para atender la inte rrupcin es preciso que el bit de permiso correspondiente est a 1 en el registro ECx (Interrupt Enablc Control). Durante el tiempo restante del ciclo de instruccin en que se exploran las IRQ se eva lan las prioridades de las interrupciones pendientes de ser atendidas. Cuando existe una peticin de una interrupcin pendiente que tenga mayor prioridad que la CPU se pone en marcha el procesa miento de la misma y el procesador salva en la Pila el valor actual del PC, el byte bajo del registro SR y el bit IPL3 (CORCON<3>). (Figura 8.7.)
15 0

W 15 (ANTES DE IRQ) W15 (DESPUES DE IRQ)

Esta posicin de memoria se utiliza para guardar el estado del bit IPL3 (CORCON<3>)

Figura 8.7.

A l iniciarse el procesamiento de una interrupcin se salva en la cima de la pila el PC<22:0>, el 5R<7:0> y el b it IPL3.

INTERRUPCIONFS Y EXCEPCIONES

103

Con la instruccin de Retorno de Interrupcin RETFIE que se coloca al final de la rutina ISR (Interruption Service Routine) se recuperan de la Pila el PC<22:0> (la direccin de retom o, es decir el PC almacenado antes de saltar a la rutina de interrupcin), el SR<7;0> (para recuperar el entorno en el que se encontraba el procesador antes de saltar) y el 1PL3. Las interrupciones son anidablcs, lo que significa que cuando se est atendiendo una interrupcin a travs de la rutina de servicio de in terrupciones (ISR), puede ser interrumpida por un tipo de interrupcin de mayor prioridad. Se pueden deshabilitar o prohibir las interrupciones que tengan niveles de prioridad de 1 a 6 con la instruccin DISL que funciona en combinacin del registro contador DISICNT. D1SICNT se va decrementando hasta que llega a 0, entonces se rehabilitan las interrupciones con prioridad 1-6. Al ejecutarse, por ejemplo, la instruccin DISI #5, se deshabilitan las interrupciones con IPL de 1 a 6 durante 5 ciclos de instruccin. Una vez detectada la causa que ha provocado una interrupcin, me diante la inspeccin del registro IFSx, comprobado que tiene permiso (inspeccionando el registro IECx) y tambin la prioridad suficiente, es decir no hay ninguna otra interrupcin con mayor prio ridad que ella, entonces se salva en la Pila el PC, el SRL y el IPL3. Luego se carga en el PC el con tenido del Vector de Interrupcin correspondiente y se pasa a iniciar la ejecucin de la rutina ISR. Al comienzo de ISR se deben salvar en la Pila con la instruccin PUSH.S los valores de los regis tros W-W3, para poder restablecer despus los valores que estaban y el procesador pueda continuar con lo que estaba haciendo antes de la interrupcin. Al completar la ISR, antes de RETFIE, se re cuperan los valores de dichos registros mediante la instruccin POP.S. (Figura 8.7.)
INICIO

SE SALVA

PC^-VECTOR INTERRUPCIN

SE SALVAN REGISTROS QUE SE MANEJAN

RUTINA DE ATENCIN

SE RECUPERAN' REGISTROS QUE SE MANEJAN

BAJAR FLAG INTERRUPCIN

RETFIE SE RECUPERAN PC22:0>, SR<7:0>. IPL3

Figura 8.8.

Organigrama que muestra las etapas del procesamiento de una interrupcin.

104

dsPIC DISEO PRCTICO DE APLICACIONES

El tiempo de duracin o latencia para la atencin de una peticin de interrupcin es de 4 ciclos de instruccin, de la siguiente forma:

7. 2: 3. 4.

En el primer ciclo se activa el sealizador. En el segundo ciclo se salva en la Pila el PC, el IPL3 y el SHL. En el tercer ciclo se carga el PC con el contenido del Vector de Interrupcin. En el cuarto ciclo se inicia la rutina ISf.
. .

El retorno de una rutina de interrupcin tiene una latencia de tres ciclos de instruccin.

1 . En el primer ciclo se recupera el PC<22:16>, el SRL y el IPL3. 2. En el segundo ciclo se recupera el PC< 15:0>. 3. En el tercer ciclo se comienza la ejecucin de la instruccin apuntada por el PC y se culmina el re torno al programa principal.

Cuando la CPU funciona en uno de los modos de bajo consumo (Sleep o Idle) y se produce una peticin de interrupcin de mayor prioridad que la CPU (para ello el nivel de prioridad que debe te ner la CPU es de 1 o mayor) se atiende la peticin, pero si el nivel de prioridad de la interrupcin es menor que el de la CPU se contina la ejecucin de la instruccin posterior en el programa princi pal a la que origin el paso al modo de bajo consumo, es decir, produce el despertar de la CPU aun que la interrupcin no sea atendida. 8.8. REGISTROS DE CONTROL Y ESTADO PARA LAS INTERRUPCIONES

Para el procesamiento y atencin de las interrupciones, el controlador utiliza los siguientes registros.

INTCON1 e INTCON2 Son los dos registros principales que regulan las funciones globales de las interrupciones. 1NTCONI contiene el bit NSTDIS que habilita/deshabilita el anidamiento de las interrupciones, as como los sealizadores de estado y control de las causas de las excepciones. INTCON2 contiene los sealizadores de las causas de interrupcin externa y el bit de uso de la A1VT. REG ISTRO DE ESTADO (SR) Contiene los bits IPL<2:0> (SR<7:5>) que emplea el usuario para determinar el valor del nivel de prioridad de las interrupciones. REG ISTRO DE CONFIGURACIN (CORCON) Contiene el bit 1PL3 (CORCON<3>) que sirve para determinar el nivel de prioridad de las excep ciones. Slo es legible porque se pone a 1 automticamente cuando se procesa una excepcin. REG ISTRO S DE SE ALIZAD O RES DE ESTADO DE LAS INTERRUPCIONES (IFSx) Son tres registros que contienen los sealizadores que informan de la peticin de interrupcin. Dichos sealizadores se activan automticamente cuando se produce la peticin y se desactivan por software. REG ISTRO S DE CONTROL I)E H ABILITAC I N I)E LAS INTERRUPCIO NES (IECx) Son tres registros que contienen los diversos bits de perm iso/prohibicin de cada una de las interrupciones.

INTERRUPCIONES Y EXCEPCIONES

105

REGISTROS D E CONTROL DE PRIORIDAD DE LA S INTERRUPCIONES (IPCx) Son 12 registros cuyos bits almacenan el nivel de prioridad asignado a cada una de las interrupciones.
En la tabla de la Figura 8.11 se muestra la distribucin de los bits de los registros que se utilizan rn el procesamiento de las interrupciones y excepciones. Hay que tener en cuenta que segn el moielo de DSC se dispondr de diferentes recursos internos y en consecuencia no todos tienen vlidos iodos los bits de estos registros. El INTCON1 vara de un modelo a otro, un dispositivo de dsPIC33F _liza ms bits del registro INTCON1 que un dsPIC30F. El dsPIC33F tiene ms tipos de interrup: nes por lo que necesita de algunos registros ms para controlar y registrar que se han producido ritas interrupciones nuevas que no dispone el dsPIC30F. En la Figura 8.9 se muestran los registros INTCON 1 e INTCON2 de los dsPIC30F.
IN T C O N 1 :
RAV-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W -0 U -0 U -0 U-0 RAV-0 R/W-0 R/W-0 R/W-0 U -0
I

^ E R R |S T K E R R | O S C F A IL

IN T C O N 2 :
R/W-0 RA/V-0 UO U-0 U-0 U-0 U-0 U-0 U-0 U-0 U -0 R/W-O R/W-0 RW -O RIW-Q R/W-0

TnT4P | tMT3EP [ NT2P

j M tlE P

p T ^ 1

Leyenda R = bit leble T = bit a 1 W = bit escribible 0 = bit a 0 U = bit sin implementar, ledo como 0 x = bit desconocido

8.9.

Distribucin de los bits de los registros INTC O N 1 e INTCON2 para el procesamiento de las interrupciones y excepciones en el modelo dsPIC30F.

En la Figura 8.10 se observan los registros INTCON 1 e INTCON2 que maneja el dsPIC33F.

TC O N 1:
w *-: R /w -o R/W -0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

C VAS r f OVATE
BUM) R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

OVBTE
R/W -0

COVTE
U-0 -

R R
ITC O N 2:
9 W O R/W-0 U-0 U-0 U-0

\THERR A D D R ER R IsT K R R

OSC FA l I

o s c f a il

U-0

U-0

U-0

U-0

U-0

U-0

R/W-0
IN T 4 E P

R/W -0

R/W -0

R/W -0

R/W-0

INT3EP

INT2EP

INT1EP

INTOEP

Leyenda
R = bit leble 1 = bit a 1 W = bit escribible U = bit sin implementar, ledo com o 0 0 = bit a 0 x = bit desconocido

8.10. Distribucin de los bits de los registros INTCO N 1 e INTCON2 para el procesamiento de las interrupciones y excepciones en el modelo dsPIC33F.

106

dsPIC. DISEO PRCTICO DE APLICACIONES

En la Figura 8.11 se presentan los registros que utiliza el dsPJC3F para m anejar las inte rrupciones.

NOM BRE
IFS IFS1 IFS2 IEC0 IEC1 IEC2 IPCO IPC1 IPC2 IPC3 PC4 IPC5 IPC6 IPC7 IPC8 IPC9 IPC10 IPC11

D IR E C C I N
0084 0086 0088 008C 008E 0090 0094 0096 0098 009A 009C 009L OOAO OOA2 00A4 00A6 00A8 00AA

BIT15
CNIF IC6IF CNIE IC6IE -

B1T14
BCLIF IC5IF BCLIF 1C5IE

BIT13
I2CIF IC4IF I2CIE IC4IE

BIT12
NViVIIF IC3IF FLIBIF NVVMIE IC3IE FLTBIE

B IT ll
ADIF C1IF FALTAIF ADIE C1IE FALTA IL

B1T10
u i rxiF SPI2IF LVDIF UITXIE SPI2IE LVDIE

BIT9
U1RXIF U2TXIF DCIIF r U IR X lP U2TXIE DCIIE OCIP<2:()>

BIT8
SPI1IF U2RXIF QVEIIF SPIIIF U2EXIE SPI1IE

BIT7
T3IF INT2IF PWMIF T3IE IKT2IL PWMIE -

T I IP <2:0> T3IP <2:0> ADIP <2:0> CNIP <2:0> OC3IP <2:0> -

T2IP <2:0> U1TXIP <2:0> BCLIP <2:0> IC8IP <2:0> T5IP <2:0> -

INT2IP <2:0> C1 IP <2:0> IC6IP <2:0> OC8IP <2:0> PWMIP <2:0> FALTAIP <2:0> : BIT2 -

SPI2IP<2:0> IC5IP <2:0> OC7IP <2:0> C2IP <2:0> I.VDIP <2:0> -

NOMBRE

BIT6

BIT5

BIT4

BIT3

BIT1

BITO

ES TA D O RESET

IFSO IFS1 ll:S2 IEC0 IEC1 IEC2 IPCO IPCJ ICP2 IPC3 IPC4 IPC5 IPC6 IPC7 IPC8 IPC9 IPC10 IPC11

T2IF T5IF C2IF T2IF T.5IL C2IE

OC2IF I4IF INT/1IF OC2IE T4IE I.NT4IE ICl IP <2:0> OC2IP <2:0> U1 RXIP <2:0> I2CIP <2:0> 1C7IP <2:0> T4IP <2:0> U2TXIP <2:0> IC4IP <2:0> OC6IP < 2:0 > INT4IP < 2:0 > DCIIP < 2 :0 >

IC2IF C4IF INT3IF IC2IE OOIIE INT3IE

T1IF OC3IF OC8IF THE OC3IE OC8IE -

OC1IF IC8IF OC7IF OCHE IC8IE OC7IE

IC1IF IC7IF OC6IF IC1IE IC7IE OC6IE INT0IP<2:0> I2CIP <2:0> SPI1IP <2:0> NVMIP <2:0> INT1 IP <2:0> OC4IP <2:0>
U2RXIP < 2:0 >

INTO INT1IF OC5IF INTOIE INT1IE OC5IE

0000 0000 0000 0000 oooo oono oooo oooo 0000 oooo oooo oooo

oooo oooo oooo oooo oooo oooo oooo oooo oooo oooo oooo oooo
0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100

IC3IP < 2:0 > OC5IP <2:0>

INT3IP <2:0> QEIIP <2:0> FLTBIP <2:0>

oooo oooo oooo oooo

Figura 8 .1 1 . Nombre y distribucin de los bits de los registros que se utilizan en el procesamiento de las interrupciones y excepciones de los dsPIC30F.

INTERRUPCIONES Y EXCEPCIONES

107

Los registros que utiliza el dsP!C33F para m anejar las interrupciones se m uestran en la Figu ra 8.12.

NOMBRE- D IR EC C I N
IFS0 0084 0086 0088 008A 008C 008E 0090 0092 0094 0096 0098 009A 009C. 009E 00A0 00A2 00A4 00A6 00A8 00AA 00AC 00AE OOBO 00B2 00B4 00B6 00B8 OOBA

BIT15
U2TXIF T6IF FLTAIF

BIT14
DMA1IF U2RXIF DMA4IF -

BIT13
AD1IF INT2IF DMA5IF -

BIT12
U1TXIIT5IF OC8IF DCIIF U1TXIE T5IE OC8IF DCIIE -

BIT11
U1RXIF T4IF OC7IF DCIEIF U1RXIE T4IE OC7IE DCIF.IL -

BIT10
SPI 1Ih OC4IF OC6IF QEIII SPI1IE OC4IL OC6IE QEIIE -

BIT9
SPHEIF

BIT8
T3IF DMA21IF IC6IF C2IF T3IE DMA2IE IC6IE C2IE -

BIT7
T2IF IC8IF IC5IF C2RXIF C2TXIF T2IE IC8IE IC5IE C2RXIF C2TXIE -

irsi
IFS2 IFS3 IFS4 IFC0 IEC1 ILC2 IEC3 ILC4 IPC0 IPC1 IPC2 IPC3 IPC4 IPC5 IPC6 IPC7 IPC8 IPC9 IPC.10 IPC11 IPC12 IPC13 IPC14 IPC15 ; IPC16 IPC17

o o ir
OC5IF PWMIF SPI1EIF OC3IE OC5IE PWMIE O C l IP<2:0> OC2IP <2:0> SPI1 IP <2:0>

U2TX1E T6IE FLTAIE -

DMAUE U2RXIE DMA4IE -

AD1IE INT2IE DMA5IE T1IP <2:0> T2IP <2:0>

U1RXIP <2:0>

DMA1 IP <2:0> IC/IP <2:0> OC4IP <2:()> U2RXIP <2:0> IC5IP <2:0> C1RXIP <2:0> IC4IP <2:0> OC6IP DMA4IP <2:0> MI2CIP <2:0> INT4IP <2:0> QEIIP <2:0>
. _

IC8IP <2:0> TAIP <2:0>

U2TXIP <2:0> IC6IP <2:0> C1 IP <2:0>

IC5IP <2:0> OC7IP <2:0> T6IP <2:0> T8IP <2:0> C2RXIP <2:0> DCIEIP <2:0> FI.TAIP <2:0>

' -

o " iV v - A -

C2TXIP <2:0>

U2FIP <2:0> CITXIP <2:0>

'

Figura 8 .1 2 . Nom bre y distribucin de los bits de los registros que se utilizan en el procesamiento de las interrupciones y excepciones de los dsPIC33F.

108

dsPIC. DISEO PRCTICO DE APLICACIONES

NOM BRE
IFSO
0 \

B1T6
OC2IF IC7IK IC4IF INT4IF C1TXIF OC2IE IC7IR IC4E INT4IE ClTXIE

BIT5
IC2IF AD2IF IC3IF INT3IF DMA7IF IC2IE AD2IE IC3IE INT3IE DMA7IE ICI IP <2:0> IC2IP <2:0> SPI1EIP <2:0> AD1IP <2:0> MI2C.1 IP <2:0> AD2IP <2:0> OC3IP <2:0> INT2IP <2:0> SPI2IP <2:0> C3|P <2:0> OC5IP <2:()>
I -

BIT4
DMA01IF INT1IF DMA3IF T9IF DMA6IF DMA0IE INTIIE DMA3IE T9IE DMA6IE

BIT3
T I IF CNIF C1IF T8IF THE C.NIE C1IE T3IE

BIT2
OC1IF C1RXIF MI2C2IF U2EIF OCHE C1RXIE MI2CI2IE U2EIE

BIT1
IC1IF MI2C1IF SPI2IF SI2C2IF U1EIF IC1IE MI2C1IE SPI2IE SI2CIE U1EIE INTOIP <2:0>

BITO
INT0IF SI2C1IF SPI2EIF T7IF FLTBIF INT0IE SI2C1IE SPI2EIE T7IE FI.TBIE

ESTADO RESET
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ; 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0 1 0 0 0 1 0 0 01000100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100010001000100 0000 0000 0000 0000 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100010001000100 0100 0100 0100 0100 0000 0000 0000 0000 ;

IFS2 IFS3 IFS4 IFCO IKC1 1LC2 IC O ICC4 IPCO IPC1 IPC2 IPC3 IPC4 IPC5 IPC6 IPC7 IPC8 IPC9

;;

DMA0IP <2:0> T3IP <2:0> U1TXIP <2:0>

SI2C1 IP <2:()> INT1 IP <2:0>

DMA2IP <2:0> T5IP <2:0> SPI2FIP <2:0>

DMA3IP <2:0> IC6IP <2:0> OC8IP <2:0> T7IP <2:0> T9IP <2:0>

ipcro
IPC11 IPC12 IPC13 IPCI4 IPC 1.5 IPC16 IPC17

I SI2C2IP <2:0> INT3IP <2:> PVVMIP <2:0> DMA5IP <2:0> U1 EIP <2:0> DMA7IP <2:0>

- : :

C2IP <2:0> DCIIP <2:0> FLTBIP <2:0>

DMA61P <2:0>

Figura 8 .12. Nombre y distribucin de los bits de los registros que se utilizan en el procesamiento de las interrupciones y excepciones de los dsPlC33F. (Continuacin).

CAPTULO

Caractersticas de las instrucciones y modos de direccionamiento

9.1. CARACTERSTICAS GENERALES DE LAS INSTRUCCIONES

Los DSC soportan dos tipos principales de instrucciones:

1* Las instrucciones tpicas de los microcontroladores clsicos, que se denominan instrucciones MCU" (65 instrucciones). 2 * Las instrucciones especficas de los DSP, que reciben el nombre de instrucciones DSP" (19 ins trucciones).

En base a un repertorio hbrido de 84 instrucciones M CU y DSP, M icrochip ha intentado facili tar el trnsito a los diseadores de proyectos con microcontroladores al campo de las aplicaciones DSP. Los dos tipos de instrucciones se procesan en una misma Unidad de Ejecucin manejando mu chos modos de direccionamiento del espacio de la memoria de datos y de la memoria de programa, con la finalidad de optimizar la eficiencia del com pilador en lenguaje C al cual se ha orientado la programacin de los DSC. El tamao de las posiciones de la memoria de programa es de 24 bits, que coincide con el de la mayora de las instrucciones DSC. Slo hay tres instrucciones que ocupan dos posiciones (48 bits) y son: CALL, DO y GOTO. La memoria de datos puede contener hasta 32 K palabras de 16 bits cada una, que es el tamao natural de los datos que manejan las instrucciones. El espacio de datos se divide en otros dos espa cios llamados X e Y, cada uno con su correspondiente U nidad Generadora de Direcciones, AGUX y AGUY. Como se explic anteriormente las instrucciones tipo MCU operan con un nico espacio lineal de datos y slo las instrucciones DSP trabajan con los espacios X e Y a los que se puede ac ceder simultneamente. Una caracterstica muy importante del espacio de datos es que su mitad superior de 32 KB de ta mao no est implementada en RAM fsica, pero se puede mapear opcionalmente en una pgina de 16 K posiciones de la memoria de programa denominada PSV (Visibilidad del Espacio de Progra ma). De esta manera se ampla el espacio til para los datos.

110

dsPIC DISFO PRCTICO DE APLICACIONES

9.2. FORMATO DE LAS INSTRUCCIONES El formato habitual de las instrucciones de los DSC tiene una longitud de 24 bits excepto en tres de ellas. El primer byte, el de ms peso del formato, es el cdigo OP que se destina a identificar la instruccin que se trata. El resto del formato se dedica a especificar los operandos y otras caracte rsticas de la instruccin. Por esta razn aquellas instrucciones que son implcitas y no necesitan operandos, detrs del cdigo OP tienen un valor concreto. EJEMPLO 1 La instruccin NO P (No Operar) tiene como cdigo OP 0x00, pudiendo existir cualquier valor en los dos bytes restantes del formato. (Figura 9 .1.)
16 15

oooo
Figura 9.1.

oooo

XX XX

X X X X

X X X X

X X X X

La instruccin NOP no tiene operandos y el cdigo OP en el prim er byte de su form}to es 0x00 pudiendo existir cualquier valor en los otros dos.

EJEMPLO 2 La instruccin RESET que fuerza la inicializacin del procesador no requiere ningn operando y su cdigo OP es l i l i 1110. (Figura 9.2.)

Figura 9.2.

Formato de la instruccin RESET que carece de operandos.

EJEMPLO 3 La instruccin PU SH 0x336A introduce en la cima de la Pila la palabra de 16 bits situada en la p o sicin de la memoria de datos cuya direccin es 0x336A que est situada en los 32 KB inferiores del espacio de memoria. El prim er byte del form ato de esta instruccin corresponde al cdigo OP, o sea al perteneciente a PUSH que es 1111 1000, mientras que los otros dos bytes contienen la di reccin de la memoria de datos donde se halla el operando que se va a cargar en la cima de la Pi la que apunta W I5. Tras la ejecucin de esta instruccin W15 se incrementa automticamente en dos unidades. (Figura 9.3.)

Figura 9.3.

F.l prim er byte del formato de la instruccin PUSH 0x336A es fijo porque es el cdigo OP de PUSH. Los otros dos contienen la direccin del operando.

CARACTERSTICAS DE LAS INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO

111

En la tabla de la Figura 9.4 se ofrecen los cdigos OP correspondientes al primer byte del for mato de las instrucciones de los DSC. El cdigo OP se forma lomando los 4 bits de la colum na y a continuacin los 4 bits de la fila.
(y g g

0000 0001 0010 0011 0100 0101


BRA

0110 0111

1000

1001

1010

1011 1100 1101

1110 1111

0000 NOP

G\LL GOTO RCAI.L

CALL

GOTO RETIW

RETFIE RETURN

RCAI.L

DO

RFPEAT

BRA <OA)

BRA (OB)

BRA (SA)

BRA (SB)

0001 0010 BRA OV) BRA BRA BRA (Nj

SUBR MOV BRA (LE) ADD SUB AND IOR MOV MOV BRA (LT) BRA (LEU) BRA (NOV) BRA (NC) BRA (NZ)

SUBBR MOV BRA (NN) ADDC SUBB XOR MOV MOV MOV BRA (GT) BRA (GE) BRA (CTU)

0011

(O

< z >

BRA

0100 0101 0110 0111 1000 1001 BIST

1010 BSET

BC LR

BTC

BTSTS

BTST

BTSS

BTSC

BSET

BCLR

BTG

BTST

BTSTS

BSW

BTSS

btsc:

1011

ADD
addc:

SUB SUBB MAC

AND XOR

IOR

ADD

SUB

AND XOR

IOR

MUL.US MUL.SS TBLRDII TBLWTH

MOV ADDC SUBB MAC CIRAC MPY MPY.N MSC

MOV MUL.UU MUL.SU TBLDRL TBIWTL

MUI

SUB SUBB

MOV.D

MOV

1100

MPY MPY.N MSC ASR ISR RLC

MOVSAC

ADD SFTAC ADD LAC NEC SUB SAC SAC.R -

FFIL FF1R

1101

SL

RRC

RLNC RRNC CP CPB

SI

ASR LSR

RLC RLNC CPSGT CPSI.T

RRC RRNC

DIV.S DIV.U INC INC2

DIVF

SL

ASR LSR FBCL

11 10 CPO CP CPB

CPO

CPSNL

DEC DEC2

COM NEG

C.LR SETM

INC INC2

DEC DEC2

COM NEC.

CLR SETM

'
11111 liD FDAC MAC MPY PUSH POP LNK IJLNK SE ZE DISI

CLRVVDT DAW HYVRSAV EXCH SWAP POPS PUSH.S RESET NOPR

Figura 9.4 .

Tabla con la que se puede obtener el cdigo OP del prim er byte del formato de las ins trucciones de los DSC.

112

dsPIC. DISEO PRCTICO DE APLICACION ES

9.3. TIEMPO DE EJECUCIN DE LAS INSTRUCCIONES

La mayora de las instrucciones se ejecutan en un ciclo de instruccin equivalente a 4 ciclos de reloj (4 . Tose), con las siguientes excepciones:

instrucciones DO, MOV.D, POP.D, TBLRDH, TBLWTH, TBLRDL y TBLWTL se ejecutan en 2 ci clos de instruccin. 2.a Las instrucciones DIV.S, DIV.Vy DIVF van precedidas por una instruccin REPEAT #17 que conlle va 18 repeticiones y supone una duracin de 18 ciclos de instruccin. 3 * Las instrucciones que modifican al PC requieren dos ciclos de instruccin. Las instrucciones de salto condicional se ejecutan en 1 ciclo si no se salta, 2 ciclos si se hace el salto sobre una instruccin de palabra y 3 ciclos si el salto se realiza sobre una instruccin de 2 pa labras. Las instrucciones de bifurcacin condicional se ejecutan en 1 ciclo si no hay bifurcacin y en 2 si la hay. 4 * Un caso especial son las instrucciones de retorno que modifican el PC, son RETFIE, RETLWy RETURN que se ejecutan en 3 ciclos de instruccin excepto si hay una excepcin pendiente de aten der; en cuyo caso se ejecutan en 2. 5 Las instrucciones que manejan datos ubicados en la memoria de programa, modo PSV, precisan uno o dos ciclos de retardo, excepto REPEAT que slo requiere retardo en la primera ejecucin del bucle.

EJEMPLO l Dado un D SC cuyo oscilador externo funciona a una frecuencia de 1MHz, calcular el tiempo que tardara en ejecutar la instruccin M AC W4xW5, B. El DSC larda en ejecutar la instruccin M AC 1 ciclo de instruccin . Tosc
=

Fosc

1M hz

= ------- " 7

1 1 0 6hz

= 1 1 0 6 -v = 1/ t

1 ciclo de instruccin = 4 T OSc = 4 * lp s = 4a s La instruccin M AC W4xW5, B tarda en ejecutarse 4/js EJEMPLO 2 Dado un D SC cuyo oscilador externo funciona a una frecuencia de 33MHz, calcular el tiempo que tardara en ejecutarse una instruccin CALL. La instruccin CALL, al tener que modificar el PC, tarda 2 ciclos de instruccin en ejecutarse.

1 _ 1 ____ \_ Tosc. = ^ = ---------------= -------------- Fosc ~ 33 M hz ~ 3 3 -10ofe

= 0 . 3 1 0 ^

= 30775

/ ciclo - 4 Tose 4 30ns = 120ns Debido a que esta instruccin tarda 2 ciclos > 2 !20rs = 240rs Una instruccin CALL tarda en ejecutarse 240ns

CARACTERSTICAS DE LAS INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO

113

9.4. M O D O S DE DIRECC IO NA M IEN TO DE LA M EM O R IA DE PROGRAMA

Se hace referencia en este apartado slo al direccionamiento de las instrucciones en la memoria de programa, dejando para ms adelante el direccionamiento de datos que pueden estar ubicados en la memoria de programa. Las posiciones de la memoria de program a tienen 24 bits y las direcciona el PC que consta de 23 bits, teniendo siem pre a 0 el bit de menos peso, lo que significa que su valor se incrementa autom ticam ente de form a sccuencial en 2 unidades. El valor del PC puede m odificarse de forma absoluta o relativa. La instruccin que modifica el PC puede manejar un valor inm ediato o hacer referencia a un registro de trabajo que soporta un cam bio dinmico. Existen varios modos de direccionamiento que no son muy conocidos. El direccionamiento in herente es el que usan las instrucciones NOP, RESET, PU SH ,... que aparentemente no direccionan ningn lugar pero, realmente, s lo estamos haciendo debido a que viene implcito dentro de la pro pia instruccin. Tambin est el direccionamiento por registro indexado, que consta de un registro base y un registro ndice, y cuyo funcionamiento es similar al que se ver mas adelante como di reccionamiento por registro indirecto con offset o desplazamiento. Cuando se ejecuta un bucle DO, el PC se carga en el comienzo con el contenido del registro DOSTART y finaliza al alcanzar el valor guardado en el registro DOEND. En el tratamiento de interrupciones y excepciones, el PC se carga con la direccin contenida en el correspondiente Vector de Interrupcin. En los retornos, el valor del PC se carga automticamen te con los valores salvados previamente en la Pila. En las llamadas a subrutina se recomienda utili zar la instruccin RCALL, que slo ocupa una palabra de instruccin en lugar de CALL, que consu me el doble. La Figura 9.5 muestra una tabla con las instrucciones que modifican el PC en los DSC.

IN S T R U C C I N /C O N D IC I N
EJECUCIN SECUENCIA!. BKA EXPR BIFURCACIN CO NDICIONAL BRA C O N D IC I N , EXPR BIFURCACIN CO NDICIONAL CALL EXPR LLAMADA SUBRUTINA CALL Wn LLAMADA SUBRl/TINA INDIRECTA GOTO EXPR SALTO INCONDICIONAL GOTO W jfi SALTO INCO NDICIO NAL INDIRECTO R CALL EXPR LLAMADA RELATIVA RCALL W n LLAMADA RELATIVA INDIRECTA TRATAMIENTO FXCFPCIN PC=DESTINO INSTRUCCIN REPEAT (BUCLE REPEAT) PC=DIRECCIN DO END (BUCLE DO)

M O D IF IC A C I N PC
PC=PC+2 PC=PC+2 S liti PC=PC+2 (CONDICIN FALSA) PC=PC+2-Slit16 (CO NDICI N VERDADERA) PC=lit23 PC=VVn P C -lit23 PG=Wn PG= PC+2-SI ti 6 PC=PC+2-Wn PC=VECTOR DE INTERRUPCIN N O SE MODIFICA PC SI EST ACTIVA REPEAT PC=DOSTART SI EST ACTIVO DO

U SO DE LA PILA
N IN G U N O N IN G U N O

N IN G U N O

SE SAIVA PC+4 SE SALVA PC+2 N IN G U N O N IN G U N O SE SALVA PC+2 SE SALVA PC+2 SE SALVA PC+2 N IN G U N O N IN G U N O

Figura 9.5.

Tabla que muestra el comportamiento del PC y de la Pila con las instrucciones que m o difican el PC.

114

dsPIC. DISFO PRCTICO DE APLICACIONES

9.4.1. PSV: Visibilidad del Espacio de Programa (Program Space Visibility)

Se trata de utilizar la Memoria de Programa, que es ms lenta, barata y no voltil, para almacenar datos. Aparentemente se accede a los 32 KB superiores de la memoria de datos, pero realmente se es t accediendo a la memoria de programa sin necesidad de ninguna instruccin especial. Se habilita este procedimiento poniendo a 1 con el tercer bit del registro CORCON y cargando el registro PSVPAG que tienen un tamao de 8 bits.

9.5.

M O D O S DE DIRECCIO NAM IENTO DE LOS DATOS

Los DSC disponen de 4 modos para direccionar los datos u operandos cuando se ejecutan las ins trucciones.

1o 2. 3 4

Direccionamiento directo. Direccionamiento directo por registro. Direccionamiento indirecto por registro. Direccionamiento inmediato.

9.5.1. Direccionamiento directo

Lo emplean las instrucciones que tienen como operando la direccin de la memoria de datos donde reside. Para este direccionamiento es frecuente utilizar los 8 KB inferiores del espacio de la memo ria que se denomina RAM cercana. Sin embargo, con la instruccin MOV es posible acceder a los 64 KB con este direccionamiento. Usando este modo de direccionado se puede cargar cualquier posicin de la memoria de datos con el contenido de un registro de trabajo W y viceversa. Los operandos pueden tener tamao byte o palabra, excepto MOV que slo trabaja con palabras. EJEMPLO 1 D EC 0x2200 ;[0x2200] [0x2200] - 1 La instruccin anterior decrementa una unidad el valor de la palabra depositada en la direccin 0x2200 de la RAM. EJEMPLO 2 M O V 0x2200, W5 ;[0x2200] - W5 Mueve la palabra depositada en la direccin 0x2200 de la RAM al registro W5. La mayora de las instrucciones que usan el direccionamiento directo toman al registro de trabajo WREG como operando implcito, actuando W como WREG. Este tipo de instrucciones comien

CARACTERSTICAS DE LAS INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO

115

zan leyendo los operandos, uno de los cuales implcitamente reside en WO, luego se realiza una ope racin con ellos y, finalmente, el resultado se escribe en WREG. Son instrucciones de lectura-m o dificacin-escritura. EJEMPLO 3 AND 0x2200 ; [0x2200] AND WO WO Con el valor de la palabra contenida en la direccin 0x2200 se realiza la operacin lgica AND bit a bit con el contenido del registro WREG (WO) y el resultado se carga en WREG (WO), quedando inalterado el valor de la direccin 0x2200.

9.5.2. Direccionamiento directo por registro

Se em plea para acceder al contenido de los 16 registros de trabajo (W 0-W 15) que actan como operando en la instruccin. El acceso puede ser a un dato de tamao byte o palabra. La ventaja de este modo de direccionado es la rapidez con la que se acceden a los registros internos de la CPU. EJEMPLO 1 EXCH W5, W6 ; W 5 * * + W6 Se intercambia el contenido de los registros W5 y W6. EJEMPLO 2 AND.B W i , #0xF2, W2; W<7:0> AND 0xF2 W2<7:0> Se realiza la operacin lgica AND entre el byte de menos peso de W1 y el operando inmediato 0xF2 , depositndose el resultado en el byte de menos peso de W2.

9.5.3. Direccionamiento indirecto por registro

El contenido de los registros de trabajo se utiliza para guardar la direccin efectiva del operando en la memoria de datos. Los registros W actan como punteros y la gran ventaja de este procedi miento es la posibilidad de incrementar o decrementar automticam ente el contenido de un regis tro antes o despus de ejecutar la instruccin, permitiendo la exploracin secuencial de los arrays o bancos de datos en el sentido que se desee. Segn que el tamao de los datos direccionados por el registro W sea de uno o de dos bytes o de ms, los incrementos o decrementos son de una, dos unidades o ms. En la tabla de la Figura 9.6 se presentan las modalidades del direccionam iento in directo por registro. El direccionamiento indirecto con Registro de Desplazamiento situado en la ltima lnea de la tabla de la Figura 9.6 emplea un registro Wb que suma su contenido con el del registro Wn que con tiene la direccin efectiva. Wb acta como desplazamiento de Wn y permite acceder a los 64 KB de la memoria RAM, aunque carece de posibilidades de incremento y decremento.

11 6

dsPIC. DISEO PRCTICO DE APLICACIONES

DATO TAM AO DATO TAM A O M O D O IN D IR EC T O SINTAXIS BYTE PALABRA POR REGISTRO


SIN MODIFICACIN [Wn] EA=[Wn] EA=[Wn)

M O D IFIC A C I N DE Wn
EL CONTENIDO DF W n CONTIENE LA DIRECCIN DE EA V N O VARA W n ES PRE-INCREMENTADO PARA FORMAR LA DIRECCIN EA DEL OPERANDO W n FS PRE-DECREMENTADO PARA FORMAR LA DIRECCIN FA DF.L OPERANDO W n CONTIENF I A DIRECCIN EA DE OPERANDO Y LUEGO ES POST-INCREMENTADO W n CONTIENE LA DIRECCIN EA DE OPERANDO Y LUEGO ES POST-DECREMENTADO LA SUMA DE W n Y W b FORMA LA DIRECCIN EA DEL OPERANDO. N O CAMBIAN W n Y W b

PRL-INCREMENTO

I++YVnl

E A =lW n+=l)

EA=fU'n+=2J

PRE-DFCREMENTO

|-W nJ

EA=[Wn-=1l

EA=lW n-=2]

POST-INCRFMFMO

[Wn+4-1

FA=lWri]+=1

EA=|W n]+=2

POST-DECREMENTO REGISTRO DESPLAZAMIENTO

[W n -]

EA=[Wn]-=1

EA=(Wn|-=2

IW n+W b]

EA=|Wn+Wb]

EA=[Wn+VVbl

Figura 9.6.

Modalidades que admite el modo de direc.cionamiento indirecto por registro.

EJEMPLO 1 M OV[W 3++], fW O -J ; fW 3] + [W0] ; W 3 ^r- W3 + 2 ; WO^r- W O -2

Con esta instruccin se mueve la palabra apuntada por el contenido de W3 a la posicin de m e moria que apunta WO. Despus W3 incrementa 2 unidades el contenido y WO decrementa otras dos unidades el suyo. Todo ello en un ciclo de instruccin. EJEMPLO 2 MOV.B [-W4], [W 5 + W6J ; W 4 + W4 -1 ;[ W 4 ] < 7 :0 > + [ W 5 + W6]<7:0>

Inicialmente se decrementa una unidad el contenido de \V4 y luego con ese valor se accede a la m e moria donde se lee el byte de menos peso de la misma y se carga en el byte de menos peso de la di reccin form ada p o r W5 + W6. Todo ello en un ciclo de instruccin. EJEMPLO 3 ADD [W 7~], [++W8], [W 5 + 0x6] ;W 8 + W 8 + 2 ; [W7] + [W 8]-*~ [W 5 + 0x6] ; W 7 ^r- W7 -2

En prim er lugar se incrementa en dos unidades el contenido de W8, luego se suma la palabra apun tada por el contenido de W7 con la apuntada p o r W8 y el resultado se carga en la posicin direccionada por W5 + 0x6. Finalmente , el contenido de W7 se decrementa en 2 unidades. Todo ello en un ciclo de instruccin.

CARACTERSTICAS DE LAS INSTRUCCIONES V MODOS DE DIRECCIONAMIENTO

117

La mayora de las instrucciones admiten todos los modos de direccionamiento mostrados en la tabla de la Figura 9.6 con excepcin del modo de Registro de Desplazamiento, que slo es soporta do por las instrucciones MOV y algunas tipo DSR Las instrucciones DSF tipo MAC (Multiplicar y Acumular) admiten modos de direccionamien to especiales al poder realizar dos prebsquedas de operandos simultneamente en los espacios X e Y. Los post-incrementos y los post-decrementos admiten variaciones de 2 ,4 y 6 unidades. Al espa cio X slo se accede a travs del direccionado indirecto con los registros W8 y W9, mientras que para el espacio Y se usan los registros W10 y W ll. Figura 9.7.

MODO DIRECCIONAMIENTO
INDIRECTO SIN MODIFICACIN INDIRECTO CON POST-INCRFMENTO 2 INDIRECTO CON POST-INCREMENTO 4 INDIRECTO CO N POST-INCREMENTO 6 INDIRECTO CON POST-DECREMENTO 2 INDIRECTO CON POST-DECREMENTO 4 INDIRECTO CON POST-DECREMENTO 6 INDIRECTO CON REGISTRO DESPLAZAMIENTO

ESPACIO X
EA=(Wx] EA=[YVxI+-2 EA=W x]+=4 EA=(W x)+=6 EA=[W x !-=2 EA~lW x|-=4 EA=[WxJ-=6 EA=[W9+W12]

ESPACIO Y
EA=[Wy] EA=[Wy]+=2 EA=IVVy)+=4 EA=(Wy]+=6 EA-(W y]-=2 EA=fWy|-=4 EA=|W yl-=6 EA=[W 11+W 12]

Figura 9.7.

Modos de direccionamiento indirecto por registro para lis instrucciones DSP, tipo MAC .

9.5.3.1. Direccionamiento modular y por inversin de acarreo (Bit reversed addressing)

Algunas instrucciones admiten el direccionamiento modular y el de inversin de acarreo, que son tan eficaces en el desarrollo de determinados algoritmos DSR El direccionamiento modular permi te recorrer de forma circular un buffer de datos desde la direccin inicial a la final automticamen te. El direccionamiento por inversin de acarreo se emplea para acceder a un buffer de datos es tructurado de forma no lineal y se aplica en la resolucin de algoritmos derivados de la FFT. Estos modos han sido analizados en las preguntas 6.4 y 6.5.

9.5.4. Direccionamiento inmediato

En este caso el operando que maneja la instruccin es un valor literal constante predefinido que es t contenido en el formato de la propia instruccin. Se usa de forma independiente o combinada con los restantes modos de direccionamiento. El tamao del operando inmediato puede abarcar desde 1 a 16 bits y puede tener o no bit de signo. EJEMPLO 1 AND.B #0x0 F, W6 Se realiza la operacin lgica AND, bit a bit, entre el valor inmediato expresado p or el byte OxOF y el byte de menos peso de W, depositndose el resultado en el byte de menos peso de W6.

118

dsPIC. DISFO PRCTICO DE APLICACIONES

EJEMPLO 2 ADD W i , #0x0500, [W2++] Se suma la palabra contenida en WI con el operando inmediato 0x0500 , depositndose el resulta do en la posicin de la memoria de datos direccionada p or W2. Luego se post-incrementa 2 unida des W2.

9.6. DETECCIN DE DEPENDENCIAS

El cauce de procesamiento de los DSC se segmenta en 2 etapas para aumentar el rendimiento im plcito del procesador. Con esta orientacin se realiza la prebsqueda de una instruccin mientras se ejecuta la anterior (segmentacin implcita de 2 etapas). Puede darse la circunstancia que en una de las etapas del cauce exista una instruccin que, por ejemplo, modifique el valor de un registro de tra bajo que como MOV.B #0x10, W5, y en la siguiente instruccin se utilice a este registro como pun tero de un operando, como por ejemplo ADD |W 5], W6. Hasta que no se com plete la primera ins truccin no se puede ejecutar la siguiente, porque no est actualizado el valor de W5. Hay un hardware complementario que detecta estas dependencias y aplica las reglas para elimi nar los atascos del cauce, generalmente retrasando un ciclo la ejecucin de la instruccin que ha mo tivado el conflicto.

CAPITULO

ir : ..i f.. Y . . . V . V .. . - . i <-. t.

. V .-

El repertorio de instrucciones. Instrucciones MCU

10.1. CLASIFICACIN DE LAS INSTRUCCIONES

Los DSC combinan en su repertorio las instrucciones tpicas de los microcontroladores, llamadas instrucciones M C U , con las especializadas en la resolucin de algoritmos matemticos para el pro cesamiento de seales, llamadas instrucciones DSP. Los DSC cuentan con 84 instrucciones, que se agrupan en 10 categoras que se distinguen por la funcin principal que realizan:
Instrucciones de movimiento. Instrucciones lgicas. Instrucciones matemticas. Instrucciones de rotacin y desplazamiento. Instrucciones de bit. Instrucciones de comparacin y brinco. Instrucciones de control del flujo del programa. Instrucciones de Pila y registros sombra. 9 f Instrucciones de control. 10 ? Instrucciones DSP. Xa 2? 3.a 4* 5* 6S 7v_

Las nueve primeras categoras configuran las instrucciones MCU y se describen en este captu lo dejando para el siguiente las instrucciones DSP. En la descripcin de las instrucciones se usar la nomenclatura que maneja M icrochip y que se presenta en la tabla de la Figura 10.1.

10.2. INSTRUCCIONES DE M O V IM IE N T O En la tabla de la Figura 10.2 se presentan las caractersticas principales de las instrucciones que se en cargan de mover informacin entre el operando fuente y el destino. La instruccin MOV es una de las ms empleadas en la mayora de los programas. Adems de mostrarse la sintaxis usada en lenguaje
119

120

dsPIC. DISEO PRCTICO DE APLICACIONES

SM B O LO
{) [TEXT} (TFXT) ffTEXT A C, DJ <N :M > { l ABEL:}

D ESCRIPC I N
OPERACIN O CAMPO OPCIONAL POSICIN DIRECCIONADA POR TEXT CONTENIDO DE TEXT LITERAL DEFINIDO POR TEXT "A" DEBE SER DEL CONJUNTO [B, C, D] CAMPO DE BIT DE REGISTRO NOMBRE DE ETIQUETA OPCIONAL SELECCIN DE M O D O DE BYTE SELECCIN M O D O DOBLE PALABRA SELECCIN REGISTRO SOMBRA SELECCIN DE M O D O PALABRA (POR DEFECTO) ACUMULADOR A O ACUMULADOR B ACUMULADOR CON POST-ESCRITURA POSICIN BIT BITS DE ESTADO MCU DIRECCIN ABSOLUTA, ETIQUETA O EXPRESIN DIRECCIN DE MEMORIA DATOS LITERAL DE 1 BIT (0:1) LITERAL DE 4 BITS (0:15) LITERAL DE 5 BITS (0:31) LITERAL DE 8 BITS (0:255) LITERAL DE 10 BITS LITERAL DE 14 BITS LITERAL DE 16 BITS LITERAL DE 23 BITS EL CAMPO NO REQUIERE UNA ENTRADA, PUEDE SER VACIO BITS DE ESTADO DSP: DESBORDAMIENTO ACCA Y ACCB, SATURACIN ACCA Y ACCB CONTADOR DE PROGRAMA REGISTRO DE TRABAJO BASE LITERAL DE 4 BITS CON SIGNO (-8:7) LITERAL DE 6 BITS CON SIGNO (-32:31) LITERAL DE 10 BITS CON SIGNO LITERAL DE 16 BITS CON SIGNO C IM A DE LA PALABRA REGISTRO DE TRABAJO BASE REGISTRO DE TRABAJO DESTINO REGISTRO DE TRABAJO DESTINO PAREJA DE REGISTROS DIVISIN (DIVIDENDO, DIVISOR) PAREJA DE REGISTROS MULTIPLICACIN (IGUALES) PAREJA DE REGISTROS MULTIPLICACIN (DIFERENTES) REGISTRO DE TRABAJO FUENTE Y DESTINO REGISTRO DE TRABAJO DESTINO REGISTRO DE TRABAJO FUENTE REGISTRO DE TRABAJO POR DEFECTO (W0) REGISTRO DE TRABAJO FUENTE REGISTRO DE TRABAJO FUENTE REGISTRO DE TRABAJO PARA PREBSQUFDA DEL BUS DE DATOS X REGISTRO DE TRABAJO DESTINO PARA PREBSQUEDA DEL BUS DE DATOS X M O D O DE DIRECCIONAMIENTO FUENTE Y REGISTRO DE TRABAJO PARA PREBSQUEDA DEL BUS DE DATOS Y REGISTRO DE TRABAJO DESTINO PARA PREBSQUEDA DEL BUS DE DATOS Y

....

I> .S .w

......

ACG AWB BIT4 C, DC, N V, Z EXPR F LIT1 LIT4 LIT5 LIT8 LITIO LIT14 LIT16 LIT23 N IN G U N O OA, OB, SA, SB PG VVb SLIT4 SLIT6 SLIT10 SLIT16 TOS Wb Wd VVdo Win, VVn W m *W m VVm Wn VVn W nd Wns WREG Ws VVso Wx Wxd Wv VVyd

Figura 10.1.

Tabla que muestra los smbolos usados en la descripcin de las instrucciones.

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU

121

Ensamblador para editar cada instruccin, se facilita el nmero de palabras de 24 bits que ocupa en la memoria de programa y el nmero de ciclos de instruccin que dura su ejecucin. Cuando se especi fica el operando opcional {,WREG} el destino de la instruccin es WREG (WO), pero si 110 se espe cifica el operando destino, acta como tal la direccin de la memoria de datos F.
SIN TAXI S EN SAM BLADO R
EXCH MOV MOV MOV MOV MOV.B M OV MOV MOV MOV M O V ) MOV.D SWAP TBLR.DH TBLRDL TBLWTH TBLWTL Wns, VVnd F{,WREG} WRCG,F F,Wnd Wns,F # L im W n d LIT16,VVnd [WS+SLIT10],Wnd Wns, |Wd+SLITI OI Ws,Wd Ws,Wnd Wns,Wd Wn Ws,'Wd Ws,Wd Ws,Wd Ws-Vd

D ESCR IPC I N
INTERCAMBIA W ns Y VVnd MUEVE F AL DESTINO (F ES LA DIRECCIN DE LA MEMORIA) MUFVF WREG A F MUEVE F A Wnd MUEVE Wns A F MUEVE 8 BITS A Wnd MUEVE 16 BITS A VVnd MUEVE [Ws+10 BITS CO N SIGNO] A W nd MUEVE Wns A [Ws+10 BITS CON SIGNO) MUEVE Ws A Wd MUEVE Ws:Ws+1 TAMAO DOBLE PALABRA A Wnd:Wnd+1 MUEVE Wns:Wns+1 TAM AO DOBLE PALABRA A W d :W d + l INTERCAMBIA LAS DOS MITADFS Wn LEE LA PALABRA ALTA DE MEMORIA DE PROGRAMA A W d LEE LA PALABRA BAJA DE MEMORIA DE PROGRAMA A Wd ESCRIBE Ws EN LA PALABRA ALTA DF MEMORIA DE PROGRAMA ESCRIBE W s EN LA PALABRA BAJA DE MEMORIA DE PROGRAMA

PALABRAS
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

C IC LO S
1 1 1 l 1 1 1 1 l 1 2 2 1 2 2 2 2

Figura 10.2. Principales caractersticas de las instrucciones de movimiento de los DSC.

La instruccin EXCH intercambia el contenido de los registros a los que afecta. L a instruccin SWAP intercambia las dos mitades de la palabra de trabajo depositadas en Wn, que si tiene tamao byte las dos mitades son de 4 bits cada una y si es palabra son de 8 bits. Tambin las instrucciones de Tabla mueven informacin entre las posiciones de la memoria de programa y los registros de tra bajo de forma bidireccional, lo que permite usar parte de dicha memoria para guardar datos. EJEMPLO 1 MOV.B W0} [W 1+0x7] Almacena el byte de menos peso de WO en la posicin W1 + 0x7 (=0x1807), que es el byte de ms peso de la posicin 0x1806. (Figura 10.3.)
ANTES DE LA INSTRUCCIN
M O V .B

DESPUS DE LA INSTRUCCIN

Figura 10.3. Efecto de la ejecucin de la instruccin MOV.B WO, [W 1+0x7] en WO, W l, posicin 1806 y en el Registro do Estado.

122

dsPIC. DISEO PRCTICO DE APLICACIONES

EJEMPLO 2 SWAP WO Hace un SWAP en el registro WO. SWAP consiste en intercambiar el byte de ms peso p or el de menos peso. (Figura 10.4.)
A N T E S DE L A IN STR U C C I N D E S P U S DE L A IN S TR U C C I N

SWAP WO

WO
-

8095 0000

WO SR

B H

9580 0000

SR

Figura 10.4. Efecto de la ejecucin de la instruccin SWAP WO en WO y en el Registro de Estado.

10.3. INSTRUCCIONES LGICAS

Las instrucciones de este grupo se encargan de realizar una operacin lgica bit a bit entre los dos operandos fuente, depositando el resultado en el destino. Soporta las operaciones AND, OR y XOR. La instruccin con nemnico COM halla el complemento a l del operando fuente y lo deja en el des tino. NEG calcula el complemento a 2. CLR borra o pone a cero el operando al que afecta. Final mente, SETM pone a 1 los bits del operando sobre el que acta. (Figura 10.5.)
SINTAXIS EN SA M BLA DO R
AND AN D AN D AN D ; CLR ! CLR : CLR ! COM COM IOR IOR IOR IOR NEC NEC SETM SETM SETM XOR XOR XOR XOR
f {,w r e g k t >

D ESCR IPC I N
DESTINO=F.AND.WREG W iiaLIT10.AN D.W n W d=W b.AND.LIT5 W d=W b.AND.W s F=0x0000 WREG=0x0000 W d=0x0000 COMPLEMENTO A 1 COMPLEMENTO A 1 DESTINO=F.IOR.WREG Wn=LIT1 O.IOR.Wn Wd=Wb.lOR.LIT5 Wd=WJb.lOR.Ws COMPLEMENTO A 2 COMPLEMENTO A 2 F-0xFFFF WREG=0xFFFF Wd=0xFFFF DESTINO=F.XOR.WRFG Wn=LIT10.XOR.Wn Wd=Wb.XOR.LIT5 Wd=Wb.XOR.Ws

PALABRAS
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

C IC LO S

LITIO,Wn W b, ?LIT5,Wd W b,W s,W d F WRfcG Wd F(,WREG} Ws,Wd F{,WREG}(1) LITIO, Wn Wh/#LIT5,W d W b,W s,W d FCWRKGKD WsAVd F WRFG Wd F{,WRF.G}(1) LITIO, Wn Wb,LIT5,W d Wb,W s,W d

1 1 1 1 1 1 1

1 1 1 1

Figura 10.5. Principales caractersticas de las instrucciones lgicas.

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU

123

EJEM PLO 1

AN D W 0,#0xlF,W l Realiza una AND entre WO y 0x1 F, y almacena el resultado en W L (Figura 10.6.)
A N T E S DE L A IN S TR U C C I N D E S P U S DE L A IN S TR U C C I N A N D W D,#0x1F,W 1

WO W1 SR 7373 obo

WO W1 SR >

6 72 3 0003 .

COCO S S b S b b S S v .-_.

.-.Y .-.

Figura 10.6. Efecto de la ejecucin de la instruccin A N D del ejemplo en WO, W1 y en e l Registro de


Estado.

EJEMPLO 2 SETM [~W 6] Pre-decrementa W6 y despus hace la operacin SETM (poner a unos todo) el contenido de la di reccin a la que apunta W6. (Figura 10.7.)
A N T E S DE L A IN S TR U C C I N SE TM [ W 6] D E S P U S DE L A IN S TR U C C I N

W6 RAM 124E SR

1250 3C D 9 0000

W6 RAM 124E SR

124E FFFF 0 00 0

Figura 10.7. Efecto de la ejecucin de la instruccin SETM del ejemplo en W6, a direccin 124E y en
el Registro de Estado.

10.4. INSTRUCCIONES MATEMTICAS Este importante grupo de instrucciones MCU soporta las operaciones aritmticas principales como son la suma (ADD), la resta (SUB), la multiplicacin (MUL) y la divisin (DIV), admitiendo di versas alternativas, modos de direccionado y tamao de los operandos. (Figura 10.8.) En algunas operaciones de suma y resta hay variantes que permiten participar el acarreo o la lle vada (ADDC y SUBB). Hay instrucciones simples pero muy tiles que incrementan o decrementan los operandos (INC y DEC). Existen tres instrucciones matemticas especiales que se describen brevemente. DAW.B: Realiza el ajuste decimal del byte de menos peso del registro Wn, generando un resultado en BCD. SE: Extiende el signo del byte depositado en Ws y el resultado de 16 bits lo carga en Wnd. ZE: Extiende con ceros el byte de menos peso del registro de trabajo fuente Ws y el resulta do de 16 bits lo deposita en el destino Wnd.

124

dsPIC DISbO PRCTICO DE APLICACIONES

SINTAXIS EN SA M BLA DO R
ADD ADD ADOC ADDC DAW.B DEC DEC DFC2 DEC2 DIV.S DIV.SD DIV.U DIV.U D DIVF INC INC 1NC2 INC2 M UI. MUL.SS MUL.SU MUL.SU MUL.US M UL.UU M UL.UU SE SUB SUB SUB SUB SUBB SUBB SUBB SUBB SUBBR SUBBR SUBBR : SUBR ! SUBR SUBR F{,WREG}(1): LlTI0,W n VVb,*T5,VVd WbAVsAVd Wn F(,WREG} WsA'Vd F[,WREG} WsA'Vd VVmA'Vn VVmA'Vn VVmAVn VVmA'Vn VVmA'Vn F{AVREG) WsA'Vd FA'VREG} WsA'Vd r Wb.WsA'Vnd W b, ?JIT5 A'Vnd VVbA'VsAV nd WbAVsAVnd W b ,* l IT5 AVnd WbA'VsA'Vnd VVsAVnd FfA'VRFG} ir LITI OAVn W b , LIT5AVd WbAVsAVd FAVREG} iLITIOA'Vn Wb,*fLIT5A'Vd VVbAVsAVd F{,VVREG} W b,*LIT5,W d VVbAVsAVd FiW REC} W b ,*U T 5 ,W d W b, WsA'Vd VVsAVnd

D ESCR IPC I N
DESTINO=F+WREG Wn=LIT10+Wn+(C) Wd=Wb+LIT5+(C) W d=W b+W s+(Q AJUSTE DECIMAL BCD DESTINO=F-1 W d-W s-1 DESTINO=F-2 Wd=Ws-2 DIVIDE ENTEROS CO N SIGNO DE 16/16 BITS DIVIDE ENTEROS CON SIGNO DE 32/16 BITS DIVIDE ENTEROS SIN SIGNO DE 16/16 BITS DIVIDF ENTEROS SIN SIGNO DE 32/16 BITS DIVISIN FRACCIONARIA DE 1 6/16 BITS CON SIGNO DESTINO=F+1 Wd=Ws+1 DESTINO=F+2 Wd=W s+2 W3:W2=F*WREC {Wnd+1,Wnd}=SIGNO(Wb)*SIGNO(Ws) (Wnd+1,Wnd}=SIGNO(Wb)*SIN SIGNO(LIT5) {VVnd+1 A'Vnd}=SIGN{ W h )*SIN SIGNO(Ws) {VVnd+1 ,Wnd}=SIN SIGNO(Wb)*SIGNO(Ws) {Wnd+1 AVnd}=SIN SIGNO(Wb)*$IGNO(LIT5) {VVnd+1 A'Vnd}-SIN SIGNO(VVb)*SlN SIGNO(Ws) W n d -W s EXTENDIDO EL SIGNO DESTINO=F-WREG W n=W n-LIT10 W d=W b-LIT5 W d=W b-W s DESTINQ f F-WREG-(C) W n=W n-LIT10-(O W d-W b-LIT5-(C) W d-W b-W s-(C) D ESTI NO=WR FG-f-(C) Wd=LIT5-Wb-(C) Wd=Ws-Wb-(C) DESTINO-VVREG-F W d=LIT5-W b Wd=Ws-VVb W nd=W s FXTFNDIDO A CEROS

PALABRAS
l 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I 1 1 1 1 l 1 1

C IC LO S
i 1 1 l 1 i 1 1 i 18 18 18 18 18 1 1 1 1 1 1 1 1 1 1 1 1 ! 1 1

1
i 1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 1

Zi

Figura 10.8. Principales caractersticas de las instrucciones matemticas.

EJEMPLO 1 DEC2 W5, [W6++J Decrementa en dos W5, y lo almacena en la direccin apuntada por W6, haciendo a continuacin un post-incremento de 2 en W6. (Figura 10.9.)

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU


ANTES DE LA INSTRUCCIN DEC2 W5, [W6++] DESPUS DE LA INSTRUCCIN

125

Figura 10.9. Efecto de la ejecucin de la instruccin DEC del ejemplo en WS, W6, direccin 1000 y en el Registro de Estado.

EJEMPLO 2 M O V #0x8002, W0 MOVWOAV4 M O V #0x8001,W0 MOVWO,W3 REPEAT #17 DI VU W4,W3 Ejecuta DIVF 18 veces. D1VF divide W4 por W3 y guarda el cociente en W0 y el resto en W l. (Figura 10.10.)
ANTES DE LA INSTRUCCIN wo W1 W3 W4 SR 6002 ooco 8001 8002 0000 WO DESPUS DE LA INSTRUCCIN 0001 0001 8001 8002 0101 i

W1 W3 W4 SR

Figura 10.10. Efecto de la ejecucin de la instruccin DIVF del ejemplo en W0, W1 y en el Registro de Estado.

1 0 .5 . INSTRUCCIONES DE ROTACIN Y DESPLAZAMIENTO

Este grupo engloba las instrucciones que realizan el desplazamiento aritmtico (se mantiene el bit de signo) o el lgico (sin signo), tanto a la derecha como a la izquierda, con un mximo de 15 posiciones. La instruccin ASR Wb, Wns, Wnd produce un desplazamiento aritmtico a la derecha del con tenido del registro Wb un nmero de posiciones que viene determinado por los 4 bits de menos pe so de Wns (mximo 15), depositando el resultado en el registro Wnd. Las instrucciones de rotacin a la derecha o a la izquierda pueden efectuarse a travs del acarreo (RLC y RRC), o bien sin tener en cuenta el acarreo (RLNC y RRNC). La instruccin con nem nico LSR produce un desplazamiento lgico a la derecha y SL lo ha ce a la izquierda. En este ltimo caso el bit de ms peso del operando fuente al desplazarse pasa a ocupar el bit sealizador de acarreo, introducindose un cero en el bit de menos peso del operan do. (Figura 10.11.)

126

dsPIC. DISEO PRCTICO DE APLICACIONES


Wb

Figura 10.11. La instruccin SL desplaza a la izquierda el contenido del operando fuente, pasando el bit de ms peso a ocupar el hit de Acarreo e introducindose un 0 por el b it de menos peso.

SINTAXIS ENSAiMBLADOR
ASR ASR ASR ASR LSR LSR LSR l.SR RI.C RLC F{,VVREG}(1) Ws,Wd W b,#UT4,W d Wb,Wn$,Wnd F{,WRFG}{1) WsA'Vd W b,LIT4,W nd VVb,YVns,VVnd F{,VVREG}() VVsAVd

DESCRIPCIN
DESTINO=DESPLAZAMIENTO ARITMTICO DF F A LA DERECHA Wd=DESPLAZAMIENTO ARITMTICO DE Ws A LA DERECHA Wnd=DESPLAZAMIENTO ARITMTICO DE W b A LA DERECHA TANTAS POSICIONES C O M O INDIQUE EL INMEDIATO Wnd=DESPLAZAMlENTO ARITMTICO DE W b A LA DERECHA TANTAS POSICIONES C O M O INDIQUE EL VALOR DF Wns DESTINO-DESPLAZAMIENTO LGICO DEL REGISTRO F Wd=DESPLAZAMIENTO LGICO DEL REGISTRO DE Ws W nd=D ESPLAZAM1 ENTO LGICO DEL REGISTRO DE W b TANTAS POSICIONES C O M O INDIQUE EL INMEDIATO Wnd=DESPLAZAMIENTO LGICO DE W b A LA DERECHA TANTAS POSICIONES C O M O INDIQUE EL VALOR DE Wns DESTINO=ROTACIN A LA IZQUIERDA A TRAVS DEL "CARRY" DEL REGISTRO F Wd=ROTACIN A LA IZQUIERDA A TRAVS DEL "CARRY" DEL REGISTRO Ws DESTINO=ROTACIN A LA IZQUIERDA DEL REGISTRO F Wd=ROTAC1 N A LA IZQUIERDA DEL REGISTRO Ws DESTINO=ROTACIN A LA DERECHA A TRAVS DEL "CARRY" DEL REGISTRO F Wd=ROTACIN A LA DERECHA A TRAVS DEL "CARRY" DEL REGISTRO Ws DESTIN0 = ROTAC 1 N A LA DERECHA DEL REGISTRO F Wd=ROTACIN A LA DERECHA DEL REGISTRO Ws DESTINO=DESPI AZAMIENTO A LA IZQUIERDA DE F Wd=DESPLAZAMIENTO A LA IZQUIERDA DE Ws Wnd=DESPLAZAMIENTO A LA IZQUIERDA DE W b TANTAS

PALABRAS
1 1 1 1 1 1 1

CICLOS
1 1 1 1 1 1 1

1
1 1 1 1

RLC
RING RRC RRC

aVVREG)(l)
WsA'Vd F{AVREG}(1) WsA'Vd

.
1 1 1 1 1 1 1 1 I

- 1 I 1

RRNC RRNC SL SL SL SI

F{,WREG}0) WsA'Vd F^WREGKD WsA'Vd Wb,LIT4A'Vnd WbAVnsA'Vnd

l
1 1 1 1 1

POSICIONES C O M O INDIQUE EL VALOR INMEDIATO Wnd=DESPLAZAMIENTO A LA IZQUIERDA DE W b TANTAS POSICIONES C O M O INDIQUE Wns

1 ) Si se especifica el operando VVREG, el destino es WREG y si no el destino es F .

Figura 10.12. Principales caractersticas de las instrucciones de rotacin y desplazamiento.

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU

127

EJEM PLO 1 ASR RAM200 Desplaza a la derecha los bits de RAM200, dejando el de menos peso en el bit C e introduciendo repetido el de ms peso p or la izquierda. (Figura 10.13.)
A N T E S DE L A IN S TR U C C I N A S R R A M 200 D E S P U S DE L A IN S TR U C C I N

R A M 200 SR

8 00 9 0000

R A M 20 0 SR

C 004 0 00 9 yvy.w :ririvfvi-i

Figura 10.13. Efecto de la ejecucin de a instruccin ASR del ejemplo en RAM200 y en e l Registro de Estado.

EJEMPLO 2 SL 0x1650, WREG Desplaza a la izquierda los bits de la direccin 0x1650, dejando el de ms peso en el h it C e intro duciendo un 0 p o r la derecha. Deja el resultado en WREG (W0). (Figura 10.14.)
A N T E S DE L A IN S TR U C C I N D E S P U S DE L A IN S TR U C C I N SL 0x1650, W R E G

WD RAM 1650 SR

' fg

' 0900
4G5 0000

WO v y .-.-; R AM 1 65 0 SR

.....

4065 0008

Figura 10.14. Efecto de la ejecucin de la instruccin SL del ejemplo en W0, direccin 1650 y en el Re gistro de Estado.

10.6. IN S TR U C C IO N E S DE BIT

Son las instrucciones que realizan una operacin sobre un bit concreto de una posicin de la me moria de datos direccionada por F, de un registro de trabajo Ws. La instruccin BCLR Ws, #bit4 pone a 0 el bit del registro Ws que viene determ inado por el valor #bit4, que es un valor comprendido entre 0 y 15 cuando se trabaja con operandos de 16 bits. En el caso de la instruccin BCLR f #bit4 pone a 0 el bit especificado por #bit4 en el contenido de la posicin de la m em oria de datos con direccin f. Cuando el nemnico es BSET pone a 1 el b.it especificado. La instruccin BSW.C Ws, Wb escribe el valor del acarreo C en el bit del registro W s especifica do por los 4 bits de menos peso del registro Wb. Esta operacin puede representarse C. ->- Ws<(Wb)>. La instruccin BSW.Z Ws, Wb realiza una operacin semejante pero escribiendo el valor del seali zador Z negado y se representa como

128

dsPIC. DISEO PRCTICO DE APLICACIONES

Z# Ws<(W b)>. Las instrucciones con nemnico BTG invierten el valor del bit especificado en el operando. La instruccin BTST testea un bit de un registro W s o de una posicin de memoria F y lo guar da en el sealizador C cuando tienen la extensin .C\ mientras que si la extensin es .Z se car ga en Z el inverso del bit testado. Cuando el nemnico es BTSTS hacen lo mismo que las anterio res y adems ponen a 1 el bit testado. La instruccin FBCL Ws, Wnd explora el registro Ws a partir del bit de ms peso detrs del de signo hasta encontrar el primer bit de cambio a 1 (si es un valor positivo) o de cambio a 0 (si es un valor negativo). El resultado de esta exploracin expresado con 16 bits con extensin de signo se de posita en Wnd. FF1L encuentra el primer cambio de bit a 1 empezando por la izquierda y guarda el resultado en formato de 16 bits con extensin de ceros en Wnd. Finalmente, la instruccin FF1R hace lo mismo que la anterior pero la exploracin com ienza por la derecha, o sea, por el bit de m e nos peso de Ws. (Figura 10.15.)
......................

------ ----- ---- I;' .


DESCRIPCIN
BORRAR EL BIT DF F QUE SE ESPECIFICA EN EL VALOR INMEDIATO BORRAR EL BIT DE Ws QUE SE ESPECIFICA EN EL VALOR INMEDIATO ESTABLECER EL BIT DF F QUE SE ESPECIFICA EN EL VALOR INMEDIATO FSTABI FCFR EL BIT DE Ws QUE SE ESPECIFICA EN EL VALOR INMEDIATO ESCRIBIR EL BIT C EN Ws<Wb> ESCRIBIR EL BIT Z tt EN Ws<Wb> INVERTIR EL VALOR DE UN BIT DEL REGISTRO F INVERTIR EL VALOR DE U N BIT DEL REGISTRO Ws EL INVERSO DEL BIT ESPECIFICADO SE GUARDA EN Z EL BIT ESPECIFICADO SE GUARDA EN C EL COMPLEMENTO DEL BIT ESPECIFICADO SF GUARDA FN Z EL BIT ESPECIFICADO SE GUARDA EN C EL COMPLEMENTO DEL BIT ESPECIFICADO SE GUARDA EN Z EL BIT ESPECIFICADO INVERTIDO SF GUARDA EN Z Y DICHO BIT SE PONE A 1 El. BIT ESPECIFICADO SE GUARDA EN C Y LUEGO SE PONE A 1 EL BIT ESPECIFICADO INVERTIDO SE GUARDA EN Z Y DICHO BIT SE PONE A l ENCUENTRA EL PRIMER BIT CAMBIO DE BIT, EMPEZANDO POR LA IZQUIERDA ENCUENTRA EL PRIMER B IT A 1 EMPEZANDO POR LA IZQUIERDA ENCUENTRA EL PRIMER BIT A 1 EMPEZANDO POR LA DERECHA 1 1 1 1 1 1 1 1

. ''

SINTAXIS ENSAMBLADOR
BCLR BCI.K F,*BIT4 W ;*glT4

PALABRAS
1

CICLOS
1 1

BSET

F,BlT4

BSET BSVV.C BSW.Z BTG BTG : BTST

Ws,#BIT4 VVs,VVb Ws,VVb F,BIT4 Ws,#8IT4 F,BIT4

1 1 1 1 1 1 1

1 1

1 1 I 1

BTST.C Ws,ffBIT4 BTST.Z BTST.C BTST.Z BTSTS Ws,*BIT4 Ws.Wb VVs,VVb F,SBIT4

1 1 1

: BTSTS.C Ws,*BIT4 BTSTS.Z W*>,-BIT4

FBCL FF1L FFIR

VVs.Wnd W s,Wnd VVsAVnd

1 1 1

Figura 10.15. Principales caractersticas de las instrucciones de bit.

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU

129

EJEM PLO 1

BTG 0x1660 , #0x8 Invierte el bit 8 de 0x1660 y lo guarda en esa misma direccin. (Figura 10.16.)
A N T E S DE L A IN STR U C C I N D E S P U S DE L A IN S TR U C C I N BTG 0x16 6 0 . # 0x8

RAM 1660 SR

5620 0000

| |

R AM 1660 SR '

5 72 0 O

Figura 10.16. Efecto de la ejecucin de la instruccin BTG clel ejemplo en la direccin 166 0 y en el Re gistro de Estado.

EJEMPLO 2 FF1L W2, W5 Encuentra el prim er bit a 1 de W2 y lo guarda en W5. (Figura 10.17.)
A N T E S D E L A IN S T R U C C I N FF1LW 2, W5 D E S P U S DE L A IN S TR U C C I N

W2 W5 . SR

OQO BBBB 000 0

W2 W5 SR

000A 000D 0 00 0

Figura 10.17. Efecto de la ejecucin de la instruccin FF11 . del ejemplo en W2, W5 y en el Registro de Estado.

10.7. IN S TR U C C IO N E S DE C O M P A R A C I N Y B R IN C O

Son instrucciones que comprueban una condicin o comparan un valor que puede ser el de un bit concreto y segn su valor binario se brinca o no. El brinco (skip) consiste en un salto pequeito. slo se salta la instruccin siguiente, ejecutando en lugar de la instruccin que hay a continua cin una NOP. Si no se cumple la condicin impuesta al bit a comparar se ejecuta normalmente la siguiente instruccin. Cuando no hay brinco la instruccin se ejecuta en un ciclo de instruccin, pe ro si lo hay la duracin es de 2 ciclos si el brinco se efecta sobre una instruccin de una palabra y de 3 si se trata de una instruccin de 2 palabras. La instruccin BTSC Ff #bit4 comienza testando el valor del bit expresado por #bit4 en el con tenido de la posicin de la memoria de datos de direccin F, y si vale 0. se produce un brinco. Cuan do el nemnico es BTSS el brinco se produce si el bit explorado vale 1. La instruccin de comparacin CP F compara o resta el valor contenido en la posicin F con el del registro de trabajo implcito W0 (WREG) y activa los sealizadores en el Registro de Estado (C, DC, OV, N y Z) segn el resultado (F) - W0. No genera resultado de la resta ni lo almacena. Hay

130

dsPIC. DISEO PRCTICO DE APLICACIONES

otras instrucciones de comparacin cuyos operandos son registros o valores inmediatos, como las instrucciones CPO que realizan la comparacin con el valor 0x0. La instruccin CPB F compara o resta el valor de la posicin direccionada por F con el del re gistro de trabajo implcito y con el acarreo invertido o llevada, es decir, (F) - W REG - C # . La ope racin no genera resultado y slo afecta a los sealizadores de SR. CPSEQ Wb , Wn resta el contenido de los dos registros especificados, Wb - Wn, y si son igua les brinca. La instruccin con nemnico CPSGT produce el brinco cuando la comparacin de los operandos da un resultado mayor que cero, mientras que CPSLT produce el brinco con un resulta do menor que cero y CPSNE si el resultado es distinto de cero. (Figura 10.18.)

SINTAXIS ENSAMBLADOR
BTSC BTSC BTSS BTSS ! CP CP CP CPO CPO CPB CPB CPB CPSEQ CPSGT CPSLI CPSNE F,*BIT4 VV/BIT4 F,ffBIT4 W s,BIT4 F W M UT5 VVb/Ws F Ws F: W M L IT 5 Wb,VVs VVb,Wn VVb/Wn WbAVn W b,W n

DESCRIPCIN
BRINCA SI El. BIT TESTEADO DEL REGISTRO F ES 0 BRINCA SI EL BIT TESTEADO DEL REGISTRO F ES 0 BRINCA SI EL BIT TESTEADO DEL REGISTRO Ws ES 1 BRINCA SI EL BIT TESTEADO DEL REGISTRO Ws ES 1 RESTA (F-VVREG) SLO AFECTA A FLAGS RESTA (Wb-LIT5) SLO AFECTA A FLAGS RESTA (Wb-Ws) SLO AFECTA A FLAGS RESTA (F-OxOOOO) SLO AFECTA A FLAGS RESTA (W$-0x0000) SLO AFECTA A FLAGS RESTA (F-WREG-C) SLO AFECTA A FLAGS RESTA (Wb-LIT5-C) SLO AFECTA A FLAGS RESTA (Wb-VVs-C) SLO AFECTA A FLAGS RESTA (Wb-Wn") BRINCA SI = RESTA (W b-W n) BRINO \ SI > RESTA (W b-W n) BRINCA SI < RESTA (W b-W n) BRINCA SI

PALABRAS
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

CICLOS
1 (2 J ; 1 (2 3} 1 {2 3) 1 (2 3) 1 1 1 1 1 1 1 1 1 (2 3) 1 (2 3) 1 (2 3) 1 (2 3}

Figura 10.18. Principales caractersticas do las instrucciones de comparacin y brinco.

EJEMPLO 1 CP 0x1200 Compara mediante una resta WREG (W0) con el contenido de la direccin 0x1200. El resultado no se guarda, slo afecta a los Jlags . (Figura 10.19.) EJEMPLO 2 CPB.B RAM400 Compara el byte contenido en RAM400 con el byte de menos peso de W0 mediante una resta (usan do CU). Slo afecta a los Jlags. Modo byte . (Figura 10.20. )

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU


D ESPUS DE L A INSTRUCCIN CP 0x1200

131

AN TES DE L A INSTRUCCIN

wo
RAM 1200 SR

T ill

...................:::

wo
RAM 1200 SR

V .V /.V .Y A V ,

2377 2277

0077
OOO

0008

(N = 1)

Figura 10.19. Efecto de la ejecucin de la instruccin C.P de! ejemplo en WQ, direccin 1200 y en el Re gistro de Estado.
A N T E S D E L A IN S TR U C C IO N C PB.B R A M 400 D E S P U S DE LA IN S TR U C C I N

W0 R A M 400 SR

WO RAM 400

8823 0823

l t l

0000

SR

0008

Figura 10.20. Efecto de la ejecucin de la instruccin CPB.B del ejemplo en WQ, RAM400 y en el Re gistro de Estado.

11

10.8. IN S TR U C C IO N E S DE C O N T R O L DEL FLUJO DEL P R O G R A M A

Hay un numeroso grupo de instrucciones cuya misin fundamental es la de controlar el valor del PC y por tanto el flujo del programa en curso. La mayora de estas instrucciones vienen acompaadas por el nemnico BRA que se refiere a la bifurcacin del PC consistente en aadir a su valor actual otro que se incluye en la instruccin. Por ejemplo, BRA E x p r t s una instruccin de bifurcacin incondicional que incrementa el valor actual del PC que es PC + 2 en el valor contenido en Expr (slitl) multiplicado por 2 ya que el PC slo opera con direcciones pares. La operacin que realiza esta instruccin es P C -< - (PC + 2) + 2 x slitl, que permite alcanzar una bifurcacin de 32 K instrucciones en ambas direcciones de la actual. Variantes de BRA son todas las condicionales, como BRA C, que bifurca si el sealizador C = 1, BRA NC. bifurca si C = 0, BRA GE bifurca si los sealizadotes N y OV indican que se ha pro ducido un resultado igual o mayor que cero, BRA LE bifurca cuando el resultado es igual o menor que cero, BRA LT bifurca cuando ha sido menor, BRA N bifurca si el resultado es negativo. BRA N Z cuan do Z = 0, BRA OA si OVA = 1 y BRA SA si el flag de saturacin del acumulador A es 1. Otro tipo de instrucciones que controlan el flujo del programa son las de llamada a subrutina, CALL, que permiten una desviacin a cualquiera de las 32 K primeras instrucciones de la memoria de programa. Antes de desviarse el PC su valor actual se salva en la Pila cuya cima est direccionada por W15.
La instruccin DO #114, Expr comienza salvando en la Pila ios registros sombra de DCOUNT. DOEND y DOSTART y luego carga DCOUNT con el valor de #lit14, DOSTART con el del PC y DOEND con PC + 2 x Expr. Despus incrementa DL<2:0> (CORCN<10:8>) y ejecuta el cdigo comprendido entre DOSTART y DOEND el nmero de veces que contenga DCOUNT La instruccin REPEAT #Ht14 reptela instruccin que tiene a continuacin #lit14+1 veces. La instruc cin REPEAT Wn repite ja instruccin siguiente Wn< 13:0> veces.

132

dsPIC DISEO PRCTICO DE APLICACIONES

R E TFIE se usa para el retorno al programa principal desde la rutina de atencin a una interrup cin. Restaura el SR, el PC y el del bit IPL<3>. Adems de RETURN para el retomo de subrutinas tambin se emplea RETLW que restaura el valor del PC y carga el literal que incluye (#lit 10) en un registro de trabajo Wn. (Figura 10.21.)

SINTAXIS ENSAMBLADOR
BRA RRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA CALL CALL DO DO GOTO GOTO RCALL RCALL REPEAT REPEAT RETFIE RETLW RETURN #1.1110,Wn EXPR Wn CEXPR CL.HXPR GEU,EXPR GT,EXPR GTUFXPR LE,EXPR I.EU,FXPR LT.EXPR ITUEXPR N,EXPR NQXPR NN,EXPR NOV, EXPR NZ,EXPR OAEXPR OB,FXPR OVEXPR SA.F.XPR SB, EXPR Z,EXPR FXPR Wn il.IT14.EXPR Wn,EXPR EXPR Wn EXPR Wn LIT14 Wn

DESCRIPCIN
BIFURCACIN CO NDICIO NAL BIFURCACIN CALCULADA BIFURCA SI "CARRY"='I, BIFURCA SI ES MAYOR IGUAL BIFURCA SI ES MAYOR IGUAL SIN SIGNO BIFURG\ SI ES MAYOR BIFURCA SI ES MAYOR SIN SIGNO BIFURCA SI ES IGUAL MAS PEQUEO BIFURCA SI ES IGUAL MS PEQUEO SIN SIGNO BIFURCA SI ES MS PEQUEO BIFURCA SI ES MS PEQUEO SIN SIGNO BIFURCA SI FS NEGATIVO BIFURCA SI N O HAY "CARRY" BIFURCA SI N O FS NEGATIVO BIFURCA SI N O HAY SOBREPASAMIENTO BIFURCA SI N O "ZERO" BIFURCA SI HAY SOBREPASAMIENTO EN Fl. ACUMULADOR A BIFURCA SI HAY SOBREPASAMIENTO EN EL ACUMULADOR B BIFURCA SI HAY SOBREPASAMIENTO BIFURCA SI HAY SATURACIN EN EL ACUMULADOR A BIFURCA SI HAY SATURACIN EN EL ACUMULADOR B BIFURCA SI "ZERO" LLAMADA A SUBRUTINA LLAMADA INDIRECTA A SUBRUTINA EJECUTA UN NMERO DE VECES PARTE DEL CDIGO EJECUTA UN NMERO DF VECES PARTE DEL C DIG O VA A UN A DIRECCIN VA A UNA DIRECCIN INDIRECTAMENTE LLAMADA RELATIVA A SUBRUTINA LLAMADA RELATIVA A SUBRUTINA REPITE ESTA INSTRUCCIN (LIT14+1) VECES REPITE ESTA INSTRUCCIN (Wn+1) VECES RETORNO DF UN A INTERRUPCIN RETORNO CO N LITIO EN Wn RETORNO DE U N A SUBRUTINA

PALABRAS
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 2 1 I 1 1 1

CICLOS
2 2 1(2) U) 1(2) (I) 1(2) (1) 1(2){1) 1(2) {1) 1(2X1) 1(2)(1) 1(2)(1) K2)(1) 1(2) (1) 1 (2 )0 ) 1 (2)0) 1 (2 )0 ) 1 (2 )0 ) 1(2)(1) 1 (2 )0 ) 1 (2 )0 ) 1(2) (1) 1 (2 )0 ) 1 (2 )0 ) 2 2 2 2 2 2 2

2
1 1 3(2) (2)

1 1

3(2) (2) 3(2) (2)

(1): Las instrucciones de bifurcacin condicional se ejecutan en un c ic lo si no se hace la bifurcacin o en dos si se hace. (2): Las instrucciones de retorno se ejecutan en tres ciclos, pero si hay alguna excepcin pendiente se ejecutan en dos.

Figura 10.21. Principales caractersticas de las instrucciones destinadas a controlar el flujo de control del programa.

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU

1 33

EJEMPLO 1

002000 AQU: BRA A LL 002002 . . . 002004 . . . 002006 . . . 002008. .. 00200A A L L :. . . 0 0 2 0 0 C .. . Bifurca a ALL. (Figura 10.22.)
A N T E S DE L A IN STR U C C I N D E S P U S DE L A IN S TR U C C I N

BRA ALL

PC SR

0 0 2 00 0 0 00 0

PC SR

0 0 200A i 000 0

Figura 10.22. Efecto de te ejecucin de la instruccin BRA del Ejemplo 1 on el Contador efe Programa

y en el Registro de Estado.
EJEMPLO 2

000A26 RETFIE Retorno de la interrupcin . (Figura 10.23.)


A N T E S D E L A IN S TR U C C I N D E S P U S DE L A IN S TR U C C I N

OOOA26 RETFIE

PC W15 RAM 0830 RAM 0832 CORCON SR

OOOA26 0834 0 23 0 8101 0001 0 00 0

PC W15 RAM 0 83 0 RAM 0 83 2 CORCON SR

01 0 2 3 0 0 83 0 0 23 0

8101
0001 0081

Figura 10.23. Efecto de la ejecucin de la instruccin RETFIE del Ejemplo 2 en el Contador de Progra ma, W 5, las direcciones 0830 y 0832, CORCON y en el Registro de Estado.

10.9. INSTRUCCIONES DE PILA Y REGISTROS SOMBRA

El manejo de la Pila y su carga y descarga se realiza por su cima que es apuntada por el Stack Pointer (SP) cuya direccin est cargada en W 15. Inicialmente W15 se carga con el valor 0x0800 y ca da vez que se almacena en la Pila una palabra de 16 bits, W15 se incrementa en 2 unidades, como sucede, por ejemplo cuando se ejecuta la instruccin PUSH W4. Por el contrario, con la instruccin

134

dsPIC DISEO PRCTICO DE APLICACION ES

POP se saca de la Pila el contenido de la cima y se deposita en el operando destino que incluya la instruccin. Con POP W2 el valor de 16 bits de la cima de la Pila se carga en W2 y W 15 se dccrcmenta en 2 unidades. La instruccin P U S IIF carga en la cima de la Pila el contenido de la posicin de la memoria de datos con direccin F, pasando W 15 a incrementarse 2 unidades. Se puede expresar la operacin de la siguiente forma: (F )-^- (TOS) y W15 W15 + 2. Con PUSH Ws se mete en la Pila Ws. La ins truccin PUSH.D Wns salva en la Pila una doble palabra formada por el contenido de los registros Wns y Wns + 1, incrementndose en 4 unidades W 15. Con PUSH.S se salvan en la Pila los regis tros sombra. El contenido de los registros principales se copia en los registros sombra, que son WO, W 1, W2 y W3 y los sealizadores de SR C, Z, O Y N y DC. Las instrucciones con nemnico POP hacen la transferencia inversa de PUSH y decrementan a W15. La instruccin LNK #lit4 salva a W 14 (puntero del marco de la Pila) en la cim a de la Pila, in crementa en 2 un idades a W15 y lo carga en W 14 que pasa a apuntar el marco de la Pila con un ta mao #lit 14 bytes que est dedicado a manejar una llamada a subrutina. El W15 se carga con W 15 + #litl4. La instruccin ULNK deshace la operacin de LNK cargando W14 en W 15, decrementando 2 unidades a W15 y cargando la cima de la Pila (TOS) en W14. Con LNK y UNLK en deter minadas secuencias de llamadas a subrutinas se pasa a usar un marco de la Pila con su propio pun tero W14 consiguiendo un gran aislamiento. (Figura 10.24.)

SINTAXIS ENSAMBLADOR
LNK POP POP POP.D POP.S PUSH PUSH PUSH.D PUSH.S U IN K F Ws Wns #LITT4 F Wd

DESCRIPCIN
UNF MARCO DE PILA SACA DE LA PILA TOS A F SACA DE LA PILA TOS A Wd SACA DC LA PILA TOS EN FORMATO DOBLE A Wnd:Wnd+1 SACA REGISTROS SOMBRA CARGA F A TOS CARGA Ws A TOS CARGA EN FORMATO DOBLE W ns:W ns+l A TOS G \R G A REGISTROS SOMBRA DESUNE M ARCO DE PILA

PALABRAS
1 1 1 1 1 1 1 1 1 1

CICLOS
1 1 1 2 1 1 1 2 1 1

Figura 10.24. Principales caractersticas de las instrucciones de Pila y registros sombra .

EJEMPLO l PUSH W2 Carga W2 a TOS . (Figura 1025.) EJEMPLO 2 LNK #0xA0 Une marco de pila. (Figura 10.26.)

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU


A N T E S DE L A IN STR U C C I N D E S P U S DE L A IN S TR U C C I N

135

PUSH W2

......

W2 W15 RAM 1566 SR

W2

W 15
RAM 1566 SR

Figura 10.25. Efecto de la ejecucin de la instruccin PU5H del ejemplo en W2, W15, direccin 1566 y en el Registro de Estado.

A N T E S DE L A IN STR U C C I N

D E S P U S DE L A IN S TR U C C I N

LNK #0xA0

W14 W15 RAM 2000 SR

2000 2000

W14 W15 RAM 2000 SR

2002 20A2 2000 0000 ;

0000 0000

Figura 10.26. Efecto de la ejecucin de la instruccin LNK del ejemplo en W I4, W15, direccin 2000 y en el Registro de Estado.

10.10. INSTRUCCIONES DE CONTROL

Son 6 instrucciones especiales, y sus caractersticas se muestran en la Figura 10.27.


v *XX* X X

SINTAXIS ENSAMBLADOR
CLRWDT

DESCRIPCIN
PONE A CERO EL TEMPORIZADOR "WATCHDOG" DESHABILITA INTERRUPCIONES DE PL DE 1 A 6 DURANTE iLIT I 4+1) CICLOS DE INSTRUCCINNO OPERACIN NO OPERACIN ENTRADA M O D O SLEEP O IDLE REINICIALIZACIN

PALABRAS
1

CICLOS
i 1

DI SI

LIT4

NOP NOPR PWRSAV *T1 RESET

1 1 1 1

1 1 1 1

Figura 10.27. Principales caractersticas de las instrucciones de control.

Con CLRWDT se pone a cero el registro contador del Perro Guardin, as como sus predi viso res A y B. Tiene la misin de refrescar al WDT y evitar su desbordamiento.

136

dsPIC. DISEO PRCTICO DE APLICACIONES

La. instruccin DISI #lit14 sirve para deshabilitar las interrupciones comprendidas entre fos niveles de prioridad 1 y 6 durante #lit 14+1 ciclos de instruccin, tras la ejecucin de dicha instruccin.

Con NO!5el procesador no realiza ninguna operacin consumiendo un tiempo de un ciclo de ins truccin y ocupando en la memoria de programa una palabra, lo mismo que pasa con la instruccin NOPR.

La instruccin PWRSAV #lit1 pasa al procesador al modo de bajo consumo Sleep si #Ht1 = 0 y a modo ldlesi#lit1 = i. Tambin borra al contador del Perro Guardin.

Finalmente, RESET fuerza a todos los registros del ncleo y de los perifricos a tomar un valor fijo. El bit SWR que es RCON<6> cuando vale 1 sealiza que se ha ejecutado una instruccin RESET. En la Figura 10.28 se muestra el valor que toman determinados registros despus de ejecutar la instruccin RESET.
AN TES PC wo W1 W2 W3 W4 W5 W6 W7 W8 W9 W 10 W11 W 12 W 13 W 14 W 15 SPLIM TB LP A G PSVPAG CORCON RCON SR 00 2 02 A 8901 08B B B87A 872F . V ,'.-,V .V .V .'.V .' i PC wo W1 W2 W3 W4 W5 W6 W7 W8 W9 W 10 W11 W 12 W 13 W 14 W 15 SPLIM T B LP A G PSVPAG CO R C O N RCO N (IPL. C=1 ) SR DESPUS 0 0 0 00 0 0 00 0 0 00 0 0000 0000 0000 0000 0000 0000 0000 0 00 0 0 00 0 0000 000 0 0000 0000 080 0 0000 0000 0 00 0 0 02 0 0 04 0 0 00 0 (S A TD W =1) (S W R =1)

.....

C 98 A

AAD4 981E 1809 C341 9 0F 4 F409 1700 1008 6556 231D 1704 1800 007F 0001 00F0 0 00 0 0021

Figura 10.28. Estado que toman determinados registros despus de ejecutarse una instruccin RESET.

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU

137

EJEMPLO l CLRWDT Pone a 0 el temporizador WDT. (Figura 10.29.)


A N T E S DE L A IN STR U C C I N D E S P U S DE L A IN S TR U C C I N

CLRWDT

SR

0000

Figura 10.29. Efecto de la ejecucin de la instruccin CLRWDT en el Registro de Estado.

EJEMPLO 2 PW RSAV#1 Entrada a modo IDLE. (Figura 10.30.)


A M T E S DE L A IN STR U C C I N D E S P U S D E L A IN S TR U C C I N

PWRSAV #1

SR

0020

1 (IPL = 1)

SR :

0020

(IPL = 1)

Figura 10.30. Efecto de la ejecucin de la instruccin PWRSAV del ejemplo en el Registro de Estado.

m&m

w m m

m sm

S im

11.1. CARACTERSTICAS ESPECFICAS

Las instrucciones DSP se distinguen porque en su ejecucin interviene el Motor DSP que es un con junto de recursos hardware que se representan en la Figura 11.1, en la que tambin se han colocado algunas instrucciones representativas en los lugares donde se resuelven.

REGISTROS^ C-/5 W
AL B A N C O W DEL BANCO W

Figura 1 1 .1 . Esquema del M otor DSP en donde se ejecutan las instrucciones DSP.
139

140

dsPIC. DISEO PRCTICO DE APLICACION ES

El M otor DSP es un circuito muy complejo dedicado a resolver las 19 instrucciones DSP del re pertorio. Las entradas y salidas del M otor DSP son de 16 bits, pero internamente opera con valores de 40 bits. Una peculiaridad destacable de las instrucciones DSP es que operan con los acumuladores A y B (ACCA y ACCB) de 40 bits de longitud. Cada acumulador se comporta como 3 registros que es tn mapeados en la memoria de datos en la zona SFR, y se denominan ACCxU, ACCxH y ACCxL. El primero consta de 8 bits y los otros dos tienen 16 bits cada uno. (Figura 11.2.)

ACCxH
39 32 31 16 15

ACCxL

Figura 11.2. Los acumuladores A y B del motor DSP se organizan en tres campos que se comportan com o 3 registros. La x de la nomenclatura puede ser A o B. Cada acum ulador dispone de sus propios bits sealizadores del resultado que se ha cargado en l. Cuando est configurado el procesador para trabajar con saturacin normal (32 bits) el valor a cargar en el acumulador se hace en ACCxH: ACCxL, dejando ACCxU para guardar el signo. Cuan do se trabaja con super saturacin el valor a alm acenar en el acum ulador ocupa ACCxU: ACCxH: ACCxL. Las instrucciones de carga y almacenamiento de los acumuladores con nemnicos LAC y SAC (SAC.R) slo afectan a los 16 bits correspondientes al campo ACCxH. (Figura 11.3.)

32 31

16 15

Figura 11.3. Las instrucciones de carga (LAC) y almacenamiento (SAC) de los acumuladores slo afectan al campo ACCxH. Tanto para la familia dsPlC30F como para la dsPIC33F, hay un total de 19 instrucciones DSP y todas ellas ocupan una palabra de la memoria de programa y todas tardan en ejecutarse un ciclo de instruccin. En la tabla de la Figura 11.4 se describen de forma resumida las 19 instrucciones DSP, junto con los operandos que utiliza cada una de ellas. El valor #SLIT4 representa un valor con signo de 4 bits que cubre un rango entre - 8 y +7. La funcin de los # S U T consiste en permitir el desplazamiento del acumulador o de un valor determinado.

11.2. OPERACIONES BSICAS C O N LOS ACUMULADORES

Los acum uladores A y B se utilizan en las instrucciones DSP para llevar a cabo operaciones ma temticas. Como los acumuladores ocupan 40 bits y los campos de datos X e Y son slo de 16 bits, el m todo para guardar datos y cargar los acumuladores tiene que ser entendido.

LAS INSTRUCCIONES DSP

141

NEMNICO
ADD ADD CLR ED EDAG I.AC MAC MAC MOVSAC

OPERANDOS
Acc Ws. SLIT4, Acc Acc, [W x], W x d , [W y], Wyd, AVVB W m x Wm, Acc, W x, Wy, VVxd VVm x W m, Acc, W x, Wy, VVxd Ws, *SUT4, Acc VVm x W n, Acc, IW xj, W xd, JWyl, W yd, AWB VVm x W m, Acc, [Wx], VVxd, [Wy], Wyd, AWB Acc, [W x], Wxd, |W y], Wyd, AVVB W m x W n, Acc, [Wx], VVxd, | W y], Wyd, AWB W m x Wm, Acc, [Wx], Wxd, [WyJ, Wyd., AWB W m x W n. Acc, [W x], VVxd, [Wy], W yd VVm x W n, Acc, [Wx], W xd, [WvJ, Wyd, AWB Acc

DESCRIPCIN RESUMIDA
SUMA LOS ACUMULADORES SUMA AL ACUMULADOR UN VALOR QUE PUEDE SER DESPLAZADO BORRA UN ACUMULADOR CON OPCIN DE PREBSQUEDA DE OPERANDOS DISTANCIA EUCI.DEA, SIN ACUMULACIN DISTANCIA EUCLDFA, CON ACUMULACIN CARGA EN Fl. ACUMULADOR EL OPERANDO FUENTE QUE PUEDE DESPLAZARSE MULTIPLICA Y ACUMULA ELEVA AL CUADRADO Y ACUMULA PREBSQUEDA DE OPERANDOS Y ALMACENA EL ACUMULADOR MULTIPLICA REGISTROS CON OPCIN DE PREBSQUEDA DE OPERANDOS ELF.VA AL CUADRADO UN REGISTRO CON OPCIN DE PREBSQUEDA DE OPERANDOS MULTIPLICA UN REGISTRO POR OTRO NEGADO Y TIENE OPCIN DE PREBSQUEDA MULTIPLICA DOS REGISTROS Y EL RESULTADO LO RESTA DEL ACUMULADOR HALLA EL COMPLEMENTO A 2 DEL ACUMULADOR ALMACENA UN ACUMULADOR QUE PUEDE SER DESPLAZADO PREVIAMENTE ALMACENA UN ACUMULADOR REDONDEADO QUE PUEDE SER DESPLAZADO PREVIAMENTE DESPLAZAMIENTO ARITMTICO DEL ACUMULADOR DESPLAZAMIENTO ARITMTICO DEL ACUMULADOR RESTA LOS DOS ACUMULADORES

........... .
MPY

MPY

MPY.N

msc:

NEG SAC

A cc, SLIT4, W do

SAC.R SFTAC SFTAC SUB

A cc, ffSUT4, W do Acc, #SLIT6 Acc, W n Acc

Figura 11.4.

Tabla con el resumen de las principales caractersticas de las 19 instrucciones DSP.

La parte A de la Figura 11.5 muestra que cada acumulador de 40 bits consta de:

ACCxU: Registro superior de 8 bits. ACCxH: Registro de 16 bits (bits de ms peso). ACCxL: Registro de 16 bits (bits de menos peso).

El ACCxH se utiliza como registro destino para la carga del acumulador cuando se utiliza la ins truccin LAC, y tambin como registro fuente para almacenar el acumulador en la instruccin SAC.R. Todo esto viene representado en la parte B de la Figura 11.5, donde las partes superior y ba-

142

dsPIC. DISEO PRCTICO DE APLICACIONES

ja del acumulador estn sombreadas. En realidad, durante la carga del valor en el acumulador, ACCxL se carga con 0 y ACCxU se extiende en signo para representar el signo del valor que se ha cargado en ACCxH. Cuando se habilita la saturacin normal (32 bits), las operaciones DSP (como por ejemplo ADD, MAC, MSC, etc.) slo utilizan ACCxH: ACCxL (parte C de la Figura 11.5) y el ACCxU se utiliza slo para mantener el signo del valor guardado en ACCxH:ACCxL. Por ejemplo, cuando se ejecu ta una instruccin MPY, el resultado se almacena en ACCxH: ACCxL, y el signo del resultado se ex tiende sobre ACCxU. Cuando se habilita la super saturacin, se utilizan todos los registros del acumulador (parte D de la Figura 11.5) y los resultados de las operaciones DSP se almacenan en ACCxU: ACCxH:ACCxL. La ventaja de ACCxU es que incrementa el rango dinmico de los valores que se pueden almacenar en el acumulador en la saturacin normal y en la super saturacin.

A) B) C) D)

El acumulador de 40 bits se compone de tres partes: ACCxU:ACCxH:ACCxL Operaciones de extraccin y carga Operaciones en modo saturacin normal Operaciones en modo super saturacin

Figura 11.5. Diversas formas de utilizar los acumuladores.

1 1.2 .1. Suma de a cu m u la d o re s (A D D )

Existen dos formatos para realizar la suma de los acumuladores ACCA y ACCB.

t ADD

2. ADD

Acc. Ws, #Sm, Acc.

Con el primer formato, el operando representado por Acc puede ser A o B. Si es A la suma de los acumuladores se guarda en ACCA y si es B en ACCB. ADDA ADD B ; ACCB + ACCA + ACCA ; ACCA + ACCB ACCB

LAS INSTRUCCIONES DSP

143

EJEMPLO 1 En la Figura 11.6 se muestra el comportamiento de AC C A , ACCB y $R al ejecutarse la instruccin ADD B. AD D B ; ACCA + A CCB A CCS
A N TES DE LA INSTRUCCION ADD B DESPUS DE L A INSTRUCCIN

00

E111

2222

ACC A ACC B SR

0 0 E111 01

2222

00 7654 3210 -v.*.*. .../.v.vv.vv.v!-; *>:*:

5765 5432 0000

W8&

0000

Figura 11.6. Efecto de la. ejecucin de la instruccin A D D B en los acumuladores y en el Registro de Estado.

Cuando se usa el segundo formato de la suma se suma un valor de 16 bits especificado por el contenido de un registro fuente Ws a la palabra alta del acum ulador (ACCxH). El operando fuen te puede ser especificado directamente con un registro de trabajo (Ws), o bien de forma indirecla en cuyo caso se admite el post y el pre incremento y decremento (fWs], [Ws++J, |W s -J , [++Ws] y [--WsJ). Tambin se adm ite el direccionamiento indirecto con registro de desplazamiento u off set ([Ws + WbJ). Antes de efectuarse la suma del operando al acumulador es posible efectuar un desplazamiento con el valor con signo que indique #SLIT4. EJEMPLO 2 ADD WO, #2, A Suma el contenido de WO desplazado dos posiciones a la derecha (signo positivo del valor) con el valor de ACCA, dejando el resultado en ACCA. En el supuesto de la Figura 1.7, WO = 8000 Hex., que al ser desplazado 2 hits a la derecha, se transforma WO = 2000 Hex., y al realizar la suma binaria con ACCAH = 7000 Hex., el resultado se deposita en ACCAH = 5000 Hex. Figura 11.7.
AN TES DE LA INSTRUCCION AD D WD,#2.A DESPUS DE L A INSTRUCCIN

WO : ACC A SR 00

3000 7000 0000 :

W0 ACC A SR

8000 0 0 9000 0000 0000

OCOO

Figura 11.7.

WO se desplaza dos posiciones a la derecha antes de sumarse a ACCAH.

11.2.2. Resta de acumuladores (SUB)

Resta al acumulador especificado en la instruccin el valor binario del otro acumulador, depositan do el resultado en el primero.

144

dsPIC. DISFO PRCTICO DE APLICACIONES

SUB A SUB R

; /l CCA - A CCB ; / l CCB - A CCA

A CCA A CCB

La operacin se puede realizar con saturacin o sin ella controlando el bit SATB del registro CORCON. EJEMPLO 3 SUB A ;ACCA -A C C B
A N TES DE LA INSTRUCCIN SUB B

ACCA
DESPUS DE LA INSTRUCCIN

ACC A ACC B CORCON SR

76 23

120F 098A F312 0000 0000 BC17 (SIN SATURACIN)

ACC A ACC B CORCON SR

52 23

1EFC 4D73 F312 0000 1100 BC17

Figura 11.8. Resta de los dos acumuladores sin saturacin.

11.2.3. Borrado de los acumuladores (CLR)

Borra o pone a 0 los 40 bits del acumulador especificado y tiene la opcin de prcbsqueda de operandos como preparativo para una instruccin MAC. Tambin permite el almacenamiento de resul tados en el acumulador no especificado. Finalmente esta instruccin borra los sealizadores de sobrepasamiento y saturacin OA, OB, SA y SB. EJEMPLO 4 CLR A, [W]+=2, W5, W13 Como se muestra grficamente en la Figura 11.9 esta instruccin borra el acumulador ACCA, car ga W5 con el contenido de la direccin {W6J, post-incrementa 2 unidades W6 y almacena el otro acumulador ACCB en W13.
ANTES DE LA INSTRUCCIN CLR A,[W 6]+=2,W 5,W 13 DESPUS DE LA INSTRUCCIN

W5 W6 W13 ACC A ACC B CONTENIDO EN 3000 SR <*'vvX*

8001 3000 C623 30 0067 2345

W5 W6 W13 ACC A ACC B CONTENIDO EN 3000 SR

F122 3002 6428 00 0000 0000 00 6428 3BDD

0 6428 3BDD F122 0000

Figura 11.9. Operatividad de la instruccin de borrado del acumulador CLR.

LAS INSTRUCCIONES DSP

145

11.2.4. N egacin del acu m u lad o r (NEG) Con esta instruccin se halla el complemento a 2 del acumulador especificado, afectando a sus 40 bits sin tener en cuenta el modo de saturacin con el que se trabaje. EJEMPLO 5 NEG B Calcula el complemento a 2 de los 40 bits de ACCB y deposita el resultado en ACCB. (Figura JIJO.) j
A N T E S DE L A IN STR U C C I N NEG A D E S P U S DE L A IN S TR U C C I N

Figura 11.10. La instruccin NEG B halla el complemento a 2 del contenido de ACCB.

11.2.5. Multiplicacin de registros y carga al acumulador (MPY y MPY.N)

Con la instruccin M PY se multiplica el contenido de dos registros de trabajo y el producto con sig no formado por 32 bits se extiende en signo hasta completar los 40 bits y se carga en el acumulador especificado. Adems y con carcter opcional se puede realizar en la misma instruccin la prebsqueda de operandos como preparativo a una MAC. Al ser posible multiplicar el contenido de un registro por s mismo, se puede calcular el cuadra do de un registro. La instruccin MPY.N multiplica un registro por el negado de otro, lo que proporciona el pro ducto de dos registros y la negacin del resultado (ACC = -X Y). EJEMPLO 6 M PY W 7 x W8, B, [W9]+=2,W5, [W U]-=2, W6 Con esta instruccin se multiplica el contenido de los registros W7 y W8 d e 16 bits cada uno obte niendo un resultado de 32 bits que se extiende en signo hasta alcanzar los 40 bits depositando este valor en ACCB . Adem s el dato contenido en la direccin apuntada p o r W9 se carga en W5 y lue go W9 se incrementa en 2 unidades . Tambin el dato contenido en la direccin que apunta W ll se carga en W 6 y luego W ll se decrementa en 2 unidades , como se refleja en la Figura 11.11. La m ul tiplicacin es de tipo fraccionario y sin saturacin (CORCON = 0000 Hex.).

11.2.6. La distancia eucldea (ED y EDAC)


..

La instruccin ED calcula el cuadrado de la resta de dos operandos (ACC = (X - Y )2) y dicho va lor extendido en signo hasta 40 bits lo deposita en el acumulador especificado.

146

dsPIC DISEO PRCTICO DE APLICACIONES


DESPUES DE L A INSTRUCCION

AN TES DE L A INSTRUCCION M PY

W7xW 8.B,[W 9|-*-=2,W 5,[W 11 ]-=2,W 6

W5 W6 W7 W8 W9 W11 ACC B DATO EN 1000 DATO EN 2000 CORCO N SR ss

6666

l'o y y .'

88FF 6 71 F E3DC 1000 2000

F5 0000 1001 2002 0000 0000

1122

Figura 11.11. Operatividad de la instruccin MPY.

La variante EDAC es similar a ED pero el cuadrado de la diferencia se suma al contenido exis tente en el acumulador y el resultado se almacena en l (ACC = ACC + (X - Y)2). EJEMPLO 7 ED W1 x WL By [W8]+=2 , [W 10]-= 2, W1 Inicialmente resta el contenido direccionado p o r W8 del direccionado p o r W10 y el resultado se carga en WJ. Luego el cuadrado de WI extendido en signo hasta 40 bits se carga enAC C B. Final mente se incrementa 2 unidades WS y se decrementa lo mismo WIO. (Figura 11.12.)
AN TES DE L A INSTRUCCIN ED DESPUS DE L A INSTRUCCIN

W1 x W 1 ,B,[W 8]+=2,[W 10]-=2,W 1

W1 W8 W 10 ACC B DATO EN 1000 DATO EN 2800 SR 00

009A 1000 2300 1111 0 07 F 0028 0000 5555

W1 W8 W 10 ACC B D ATO EN 1000 D ATO EN 2800 SR 00

0057 1002 27F5 0000 0 07 F 0028 0000 5CA4

Figura 11.12. Ejemplo de funcionamiento de la instruccin ED.

11 .2.7. Multiplicacin de registros y resta al acumulador (MSC)

El producto de dos registros de trabajo extendido en signo hasta 40 bits se resta del contenido del acumulador especificado ACC = ACC -X Y. Opcionalmente se puede realizar la prebsqueda de operandos y el almacenamiento de otro registro en el acumulador no usado.

LAS INSTRUCCIONES DSP

147

EJEMPLO 8 M SC W l x W2, A, [ W ll + W12], W5, W13 Al contenido de ACCA se resta el producto de W l x W2 con extensin de signo hasta los 40 bits , guardndose el resultado en ACCA. El contenido de la direccin form ada por W ll + W12 se de posita en W5 y, finalm ente, el contenido de ACCB se deposita en W13.

11.3. INSTRUCCIONES DE CARGA Y ALMACENAMIENTO DE LOS ACUMULADORES

Hay unas pocas instrucciones DSP que tienen la misin de cargar y almacenar los acumuladores ACCA y ACCB y que se describen a continuacin.

11.3.1. Carga del acumulador (LAC)

Se carga el acumulador especificado con el contenido del registro fuente que admite un desplaza miento expresado por un valor de 4 bits con signo (de -8 a +7). El dato contenido en el registro fuen te es de tipo fraccionario (1.15) y se extiende en signo hasta el bit 39, rellenndose con ceros los 16 bits de menos peso antes del posible desplazamiento, que ser a la derecha si el signo del valor es positivo y a la izquierda en caso contrario. EJEMPLO 9 LAC [W2++ ], # -i, A ACCA se carga con el valor contenido en la posicin direccionada por W2, que previamente es des plazado 3 posiciones o bits a la izquierda. Despus W2 se incrementa en 2 unidades. Si inicialmente W2 contiene el valor 1000 Hex. y en la direccin 1000 Hex. de la memoria existe el dato 1221 Hex., para calcular los 40 bits que hay que cargar al acumulador hay que tener en cuen ta los siguientes factores: L) El valor 1221 Hex, hay que desplazarlo 3 posiciones a la izquierda convirtindose en 9108 Hex., como se indica en la Figura 11.13.

Figura 11.13 .A l desplazar 3 posiciones a la izquierda el valor 1221 Hex. se convierte en el 9108 Hex.

2.) Para completar los 40 bits que hay que cargar en ACCA se extiende el signo en los 8 bits del campo ACCA U y se rellena con ceros A C C AL, quedando el valor a cargar en ACCA = FF 9108 0000 Hex.

148

dsPIC. DISEO PRCTICO DE APLICACIONES

11.3.2. Almacenamiento del acumulador (SAC)

El contenido de los bits ACCxH <31:16> del acumulador especificado en la instruccin SAC se al macena en el registro destino. Opcionalmente se puede desplazar el acumulador el nmero de posi ciones expresado por un valor de 4 bits con signo. EJEMPLO 10 SAC B, #4, [W4] ACCB se desplaza a la derecha 4 posiciones y despus el campo ACCBH<31:16> se almacena en la direccin apuntada por W4. Si inicialmente ACCB = 00 I20F FFOO Hex. al desplazarse 4 posiciones a la derecha se convierte en 00 0120 FFFO Hex., cuyos bits <31:16> conforman el valor a cargar en la direccin apuntada p or W4. Existe una variante de esta instruccin cuyo nemnico es S AC.R que se diferencia en que lo que se almacena es el contenido redondeado de ACCxH.

11.3.3. Prebsqueda de operandos y almacenamiento del acumulador (MOVSAC)

Esta instruccin opcionalmente puede realizar la prebsqueda de dos operandos com o preparacin de una instruccin MAC. Despus hay post-escritura del acumulador que no interviene que se al macena en un registro. EJEMPLO 11 M OVSAC A , fW 4 ]+ = 2 , W5, [W6J-=2 , W7, [W !3]+ = 2 Se comienza cargando W5 con el contenido de la direccin apuntada p o r W4. Se incrementa 2 uni dades W4. Se carga W7 con el contenido de la direccin apuntada por W6. Despus se decrementa en 2 unidades W6 y, finalm ente , los 16 bits de ACCBH<31:16> se almacenan en la direccin apuntada p or W l 3 y se incrementa 2 unidades W13.

11.4. DESPLAZAMIENTO DE LOS ACUMULADORES

La instruccin SFTAC permite desplazar el contenido de los acumuladores hasta 16 posiciones a la derecha o a la izquierda y almacenar el resultado en el mismo acumulador. El valor del desplaza miento se puede expresar por un literal con bit de signo compuesto por 6 bits (#SLIT6). Los bits que al desplazarse salen del acumulador se pierden. El encargado de estos desplazamientos es el Regis tro de Desplazamiento. EJEMPLO 12 SFTAC A, #72 Si inicialmente A C C A = 00 120F FFOO Hex, al producirse el desplazamiento a la derecha de 12 po siciones se convierte en 00 0001 20FF Hex, que ser el nuevo valor de ACCA.

LAS INSTRUCCIONES DSP

149

Una variante de esta instruccin existe cuando el valor del desplazamiento viene dado por los 6 bits de menos peso de un registro de trabajo.
11.5. INSTRUCCIONES TIPO "M AC"

A unque slo existe una instruccin con nem nico M AC (M ultiplicar y A cum ular) y dos variantes, la m ayora de las instrucciones DSP adm iten las caractersticas de esta instruccin tpica de los DSP, que es fundamental para el clculo de los algoritm os ms com unes usados en el procesam iento de las seales digitales. Se citan las caractersticas relevantes de este grupo de instrucciones.

1 Son capaces de realizar dos prebsquedas de operan dos en la memoria. Normalmente se utiliza el direccionamiento indirecto con post y pre decremento o incremento. van a cabo la actualizacin de los registros utilizados en el direccionamiento indirecto incrementando o s para el tamao de los datos manejados. o* 3 * Ejecutan una operacin matemtica con alguno de los acumuladores de suma, resta, borrado, ne gacin, multiplicacin o desplazamiento. 4* Permiten la post-escritura del otro acumulador que no interviene en la operacin matemtica . Las CLR, MAC, MOVSAC y MSC.

La instruccin MAC multiplica el contenido de dos registros de trabajo y el resultado de 32 bits se extiende en signo hasta alcanzar los 40 bits y se suma al contenido del acumulador especificado, quedando cargado este ltimo con el resultado de esa suma. Opcionalmente permite la prebsqueda de operandos como preparacin de una nueva MAC y tambin la post-escritura del acumulador que no interviene en la operacin anterior. Una variante de MAC multiplica por s mismo el contenido de un registro para hallar el cuadra do del mismo. EJEMPLO 13 1.) M AC W 2 x W 3 ,A El producto de W2 x W3 extendido en signo hasta los 40 bits se suma al contenido de ACCA y el re sultado se deposita en ACCA ACCA = ACCA + W2 x W3 2o) M AC W2 x W3, B, f W8]+=2 , W2 ACCB se carga con la suma de su contenido previo y el producto de W2 x W3 extendido en signo , adems W2 toma el valor del contenido de la posicin direccionada p o r W8 que se incrementa en 2 unidades. ACCB = ACCB + W2 x W3 X([W8] +=2)-+~ W2 3o ) M AC W l x W2, A, [W 8]+ = 6 , W l , f\V 10]+ = 2 , W2 ACCA se carga con el producto de W l x W2 extendido en signo ms su contenido previo . W l se car ga con el contenido apuntado por W8 y luego W8 se incrementa en 6 unidades. W2 se carga con el contenido de la posicin apuntada por W lO y este ltimo se incrementa en 2 unidades.

150

dsPIC. DISEO PRCTICO D APLICACIONES

ACCA = ACCA + WJ x W2 X([W8] + = 6) + Wl Y([W10]+=2W2 4 o ) M AC W h W2, A, [W8]+=2, W l, [W l]-= 2, W2, W13 Suma el contenido de ACCA con el producto de W l x W2 extendido en signo hasta los 40 hits y el resultado lo deposita en ACCA. El contenido de la direccin apuntada p or W8 lo deposita en W l y despus incrementa 2 unidades a WH. El contenido de la direccin apuntada p o r W ll lo deposita en W2 y luego decrementa 2 unidades a W ll. Finalmente, realiza la post-escritura de ACCB en W13. ACCB = AC C B + W l x W2 X(fW 8] + = 2 ) + W l Y ([W U ]-= 2 )-^W 2 ACCB W13 5.) M AC B, W2 x W3, W2, [W5], W3, [W7]+ = 4 Suma el contenido de ACCB con el producto W2 x W3 extendido en signo hasta 40 bits y lo depo sita en ACCB. W2 se carga con el contenido de la direccin que guarda W5 y W3 se carga con el contenido de la direccin apuntada p o r W7, que luego se incrementa. ACCB = ACCB + W l x W2 X([W5]) W2 Y([W7J+=4) W3

CAPTULO

Perifricos y recursos V
12.1. EL M U N D O Q UE RODEA A LOS DSC

Existe una gran variedad de perifricos y dispositivos complementarios que se integran en los di versos modelos de DSC para proporcionar al diseador todo lo que necesita su aplicacin en un so lo chip. Los recursos que se implementan en los DSC son los siguientes:

1. Patitas de E/S. 2. Temporisadores de propsito general y Perro Guardin. 3. ConversorAD de 10 bits de afta velocidad y conversor AD de 12 bits de alta resolucin. 4. Mdulo de Captura. 5. Mdulo de Comparacin y PWM. 6. Mdulo especial PWM para control de motores. 7. Interfaz para Codificador de Cuadratura (QEI). 8. Interfaz para Conversor de Datos (DCI). 9. Interfaz de Perifricos Serie. 10. Mdulo UART. 1 /. Mdulo l?C 12. Mdulo CAN. 13. Controlador de DMA

Cada modelo DSC integra una cantidad de recursos variable segn su orientacin. En las tablas de la Figura 12 .1 se presentan los perifricos y recursos que contienen los modelos dsPIC30F y los modelos dsPC33F. Cabe destacar que una de las principales diferencias entre ambos es el hecho de que el modelo dsPIC33F dispone de un controlador de DMA.

12.2. PATITAS DE E/S

Hay modelos DSC de la familia dsPIC30F con 54 patitas de E/S que multiplexan otras funciones para perm itir el manejo de los perifricos integrados. Todas las patitas de E/S pueden suministrar
151

152

M O D E L O S d s P IC 3 0 F D E P R O P S IT O G E N E R A L LNEAS E/S
30 30 52 52 52 68 68 68

D ISPO SITIV O
...................... dsPIC30F3014 dsPIC30F4013 dsPlC30F5011 dsPlC30F6011 i dsPIC30F6012 dsPIC30F5013 dsPl30F6013 dsPIC30F6014 dsPC30F6011A dsPIC30F6012A dsPIC30F6013A dsPIC30F6014A

PATITAS

TEM PO R IZ A D O R ES 16 BITS
3 5

M D U LO CAPTURA
2 4

M D U LO CO M PA RA D O R/ PW M N ORM AL
2 4 8 8 8 8 8 8 8 8 8 8

in t e r f a z !

C O N V ER S O R AD 12 BITS 100KBPS
13ch 13ch 16ch 16ch 16ch 16ch 16ch 16ch 16ch 16ch 16ch 16ch

CO D EC
AC97, |2S AC97, |2S AC97, |2S AC97, |2S AC9 7, |2S AC97, |2S AC97, |2S

UART

SPI 1 1
2 2 2 2 2 2 2 2

fe

CAN

dsPIC

40/44 40/44 64 64 64 80 80 80 64 64 80 80

2 2 2 2 2 2 2 2 2 2 2 2

1 1 1 1 1 1 1 1 I

1 2 2 2 2 2 2 2 2 2 2

DISEO

5
5 5 5 5 5 5 5 5 5

8
8 8 8 8 8 8 8 8 8

PRCTICO D E APLICACIONES

1
1

M O D E L O S d s P IC 3 0 F P A R A C O N T R O L D E M O T O R E S Y S IS T E M A S D E A L IM E N T A C IO N LNEAS E/S
20 20 20 30 30 52 68 52

D ISPO SITIV O

PATITAS

TEM PO R IZ A D O RES 16 BITS


3 5 5 5 5 5 5 5

M D U LO CAPTURA
4 4 4 4 4 4 8 4

M D U LO CO M PA RA D O R/ PW M N ORM AL
2 2 2 4 4 4 8

C O N T R O L C O N V ER SO R AD M O TO RES 10 BITS 500KBPS PWM


6ch 6ch 6ch 6ch 6ch 8ch 8ch 8c h 6ch 6ch 6ch 9ch 9ch 16ch 16ch 16ch

Q EI

UART

SPI

l2 C

CAN

dsPIC30F2010 dsPIC30F3010 dsPIC30F4012 dsPIC30F3011 dsPIC30F4011 dsPIC30F5015 dsPIC30F6010 dsPIC30F5016

28 28 28 40/44 40/44 64 80 80

I 1 1 1 1 1 1 1

1 1 1 2 2 1 2 1

1 1 1

1 1 1 1 1 1 1 1

1
1

1 1
2 2 2

2
1

Figura 12.1. Relacin de perifricos y recursos que integran los modelos dsPIC30F y dsPIC33F.

M O D E L O S d s P IC 3 0 F P A R A M A N E J O D E S E N S O R E S LNEAS E/S
12 12 24 24

D ISPO SITIV O

PATITAS

TEM PO R IZA D O RES 16 BITS


3 3

M D U LO CAPTURA
2 2

M D U LO CO M PA RAD O R/ PWM ESTNDAR

C O N V ER S O R A D 12 BITS 100KBPS
fich 8c h 10ch 10ch

UART

SPI

rc | 1
1 1 1

dsP!C30F2011 dsP O 0F 3012 dsPIC30F2012 dsPIC30F3013

18 18 28 28

2
2 2 2

1 1 1 2

1
1

.5
3

7 2

MODELOS dsPIC33F DE PROPSITO GENERAL


D ISPO SITIV O
d$PIC33FJ64GP206 dsPIC33FJ64GP306 dsPIC33FJ64GP310 dsPIC3 3 FJ64C P706 dsPIC33FJ64GP708 dsPIC33FJ64GP710 dsPIC33 Fj 128GP206 dsPIC33FJ128GP30f> dsPIC33FJ 128GP310 dsPIC33FJ 128GP706 dsPIC33FJ128GP708 dsPIC33FJ 128G P710 :dsPIC33FJ256GP506 dsPIC33FJ256GP510 ds PI C3 3 FJ2 56G P710

PATITAS
64 64 100 64 80 100 64 64 100 64 80 100 64 100 100

M D U LO LNEAS TEM PO R IZA D O RES M D U LO INTERFAZ CO N V ER SO R UART CO M PA RAD O R/ E/S 16 BITS CAPTURA CO D EC AD PWM N ORM AL
53 53 85 53 69 85 53 53 85 53 69 85 53 85 85 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A/D, 18ch 1 A/D, 18ch 2 2 2 2 2

SPI
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

I2 C
1 2 2 2 2 2 1 2 2

CAN DMA

r . . .
2 2 2 2

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

ir' v

I A/D, 32ch
2 A/D, 18ch 2 A/D, 24ch 2 A/D, 32ch 1 A/D, 18ch 1 A/D, 18ch 1 A^D, 32ch

. - ___

9 9 9 9 9 9 9 9 9 9

2
2 2 2 2 2 2 2 2 2

2 A/D, 18ch
2 A/D, 24ch 2 A/D, 32ch 1 A/D, 18ch 1 A/D, 32ch 2 A/D, 32ch

2 2 2 2 2 2

2
2 1 1 2

Figura 12.1. Rotacin de perifricos y recursos que integran os modelos dsPiC30F y dsP!C33F. (Continuacin)

5 4
dsPIC. DISEO

MODELOS dsPIOSF PARA CONTROL DE MOTORES Y SISTEMAS DE ALIMENTACIN


DISPOSITIVO
dsPIC33FJ64MC506 ds Pl C3 3 FJ64 MC-5 08 dsPIC33FJ64MC510 ds PIG3 3 FJ64 MC 706 dsPIC33FJ64MC710 dsPlC33FJ128MC506 dsPIC33FJ128MC510 dsPIC33FJ128MC706 dsPIC33FJ128MC708 dsPIC33Fj'l 28MC710 dsPIC33FJ256MC510 dsPIC33FJ256MC710 :

PATITAS

l i l i
64 80 100 64 100 64 100 64 80 100 100 100

CONTROL MDULO CONVERSOR LNEAS TEMPORIZADORES MDULO COMPARADOR/ MOTORES AD CAPTURA E/S 16 BITS PWM NORMAL PWM
53 69 85 53 85 53 85 53 69 85 85 85 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8ch 8ch 8ch 8ch 8ch 8ch 8ch 8ch 8ch 8c h 8ch 8ch 1 A/D, 16ch 1 A /U 18ch 1 A/D, 24ch 2 A/D, 16ch 2 A/D, 24ch 1 A/D, 16ch 1 A/D, 24ch 2 A/D, 16ch 2 A/D, 18ch 2 A/D, 24ch 1 A/D, 24ch 2 A/D, 24ch

IvXj v!

PRCTICO

QEI UART SPI


1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

re CAN DMA
2 2 2 2 2 2 2 2 2 2 2 2 i :- : 1 2 2 2 2 2

V'vv>

D E APLICACIONES

1 1
2

1 1 1 1 1
1 1 1

1 1 1
2 2 1 2

2
2 2 2 2 2 2

Figura 12.1. Relacin de perifricos y recursos que integran los modelos dsPIC30F y dsPIC33F(Continuacin)

PERIFRICOS Y RECURSOS INTEGRADOS

155

o absorber hasta 25 mA. Las patitas de E/S que multiplexan seales correspondientes a los perif ricos dejan de ser E/S digitales cuando estn funcionando dichos perifricos. Las patitas de E/S se agrupan para conformar las puertas de E/S, cada una de las cuales tiene aso ciados 3 registros:

TRISx: Registro de Direccin de los Datos. Cada uno de sus bits determina la direccin de la patiUi de E/S asociada. ' valor lgico de las patitas LATx: Registro cerrojo, tipo ",la tc lr d e E/S.

..

El registro LATx resuelve los problemas que provocan las instrucciones que leen, modifican y escriben las puertas. Una escritura sobre PORTx o LATx escribe un valor sobre el latehn de la puer ta. Una lectura de PORTx recoge el valor de las patitas de E/S. pero una lectura de LATx lee el va lor guardado en el latch o registro cerrojo de la puerta. En la Figura 12.2 se muestra el esquema de interconexin de una patita de E/S.

Figura 12.2. Esquema interno de conexionado de una patita de E/S.

El nmero de patitas de E/S depende del modelo de DSC que se trate. As hay dispositivos con s lo 12 patitas de E/S dedicados para el manejo de sensores, como los dsPIC30F2011/3012/2012/3013, y otros que llegan a 68, como los dsPTC30F5013/6013/6014/6010, y que disponen de las puertas PORTA, PORTB, PORTC, PORTD, PORTE, PORTF y PORTG. Existen hasta 24 patitas de E/S que tienen la posibilidad de generar peticiones de interrupcin al producirse un cambio de su estado lgico. Dichas patitas, llamadas CN, se programan con 4 regis tros asociados CNEN1 y CNEN2, que activan o desactivan la peticin de interrupcin, y CNPU1 y CNPU2, que habilitan o deshabilitan el circuito pull-up que tiene cada una de estas patitas.

156

dsPIC. DISEO PRCTICO DE APLICACIONES

1 2.3 . TE M P O R IZAD O R ES

Segn el modelo de DSC puede contener de 3 a 5 temporizadores de 16 bits en los dsPIC30F y has ta 9 en el caso de los dsPIC33F, llamados T1M ER1, TTMER2, T1M ER3,... TIMER9, algunos de los cuales pueden concatenarse por parejas conformando temporizadores de 32 bits. El TIMER1 funciona como temporizador tipo A, los TIM ER 2 y 4 funcionan como temporiza dores tipo B, y los restantes como tipo C. Los de tipo B se concatenan con los de tipo C para confi gurar temporizadores de 32 bits. Para controlar el comportamiento de los temporizadores, cada uno dispone de 3 registros de 16 bits cada uno.

TMRx: Guarda el valor que establece el tiempo a controlar. PRx: Es el registro de periodo asociado al temporizador. TxCON: Registro de Control.

Los temporizadores pueden solicitar peticiones de interrupcin al producirse su desbordamien to, que se regulan con los siguientes registros y bits:

TxIE: Contiene los bits de permiso para las diversas interrupciones de los Timer. TxlF: Sus bits actan como sealizadores del desbordamiento de los temporizadores. TxlP<2:0>: Son tres bits dedicados a cada temporizador que establecen el nivel de prioridad de la interrupcin correspondiente.

Los temporizadores pueden funcionar en 4 modos: Io. TEMPORIZADOR SNCRONO En este modo pueden trabajar los 5 temporizadores y emplean la seal del reloj interno del sis tema (Fosc/4). El valor del temporizador se incrementa con cada impulso hasta el desborda miento. 2 CONTADOR SNCRONO En este modo funcionan todos los temporizadores y los impulsos de reloj pueden provenir de una seal externa introducida por la patita TxCK que se sincroniza con la interna. 3o. CONTADOR ASINCRONO En este modo slo funciona el temporizador tipo A y el incremento del valor de la temporizacin se produce de forma asincrona con respecto al reloj interno del sistema. 4 CONTADOR CON DISPARO POR ACUMULACIN DE TIEMPO El registro contador se incrementa en funcin de la duracin que tienen los impulsos aplicados por la patita TxCK. Los temporizadores utilizan un divisor de frecuencias previo que puede dividir la frecuencia de los impulsos aplicados por 1, 8, 64 o 256. En los m dulos de Captura, Com paracin y PW M los tem porizadores actan como base de tiempo.

PERIFRICOS Y RECURSOS INTEGRADOS

157

12.4. CONVERSORES AD

Los conversores AD integrados en los DSC pueden ser de 10 hits de resolucin y alta velocidad, o bien, de 12 bits de alta resolucin. Convierten una seal analgica de entrada en un valor digital de 10 o 12 bits. En la Figura 12.3 se muestra un esquema de la estructura interna del conversor AD de 10 bits. o

"?V
BUFFER i 16 PALABRAS 3 FORMATO

AN 15 EN TRAD AS A N A L G IC A S

Figura 12.3. Esquema por bloques simplificado del conversor AD de 10 bits. Segn el esquema de la Figura 12.3 los multiplexores de las entradas seleccionan la seal ana lgica a convertir que es la introducida por las patitas AN0-AN15. Pasa por uno de los 4 circuitos amplificadores de captura y mantenimiento (S&H) y se selecciona una salida con los interruptores electrnicos que la introduce al CAD. La multiplexacin de los canales de entrada determina la fre cuencia del mucstreo. El conversor AD de 10 bits responde a las siguientes caractersticas: m m m >VcViVV4V.;<
Velocidad mxima de conversin de 1 Msps con una impedancia mxima de 500 Ohm, trabajan do normalmente a 500 ksps (kilo muestras por segundo) a 5 V y 100 ksps a 2,7 V . Tiempo de muestreo de 154 ns. Capacidad de hasta 4 patitas de entrada para muestreo simultneo. Exploracin automtica del canal. Bufer de 16 palabras para el almacenamiento de los resultados de la conversin.

- El conversor AD de 12 bits slo dispone de un canal CHO de amplificador unipolar de captura y mantenimiento. La velocidad mxima de conversin es de 200 ksps, siendo la normal de 100 ksps a 5 V y otra de 50 ksps a 2,7 V. Para la programacin del mdulo conversor AD existen 6 registros, de los cuales A D C O N 1, ADCON2 y ADCON3 sirven para gobernar la operacin de conversin. El registro ADCHS elige las

158

dsPIC. DISEO PRCTICO DE APLICACIONES

patitas de entradas analgicas que se conectan a los amplificadores de captura y mantenimiento. ADPCFG configura las patitas como entradas analgicas o E/S digitales. El registro ADCSSL se lecciona las entradas que se explorarn de forma secuencial. Mediante los bits de control SMPI<3:0> se controla la generacin de interrupciones que se pro ducen cuando ha sucedido un determinado nmero de secuencias de muestreo y conversin.
12.5. M D U L O DE CAPTURA

Tiene la misin fundamental de medir el tiempo que dura un acontecimiento externo producido por una seal que se aplica a una de las patitas de entrada del mdulo y que se mide con el TIMER2 o el TIMER3. Es muy til en aplicaciones que hay que controlar la frecuencia o el periodo de los im pulsos a analizar. Los modos de trabajo se distinguen por el momento en el que se realiza la captura de la seal a medir, y son:

.
1 . . 2. 3. 4. Cada flanco descendente de la seal de entrada capturada. Cada flanco ascendente. Cada 4 flancos ascendentes. Cada flanco ascendente y descendente.
.v C v !-v> *

...

. v i v ; - -* > > .

v*i-.v -'-./ v V vK vItS .Xvm < : V A -

11 .

TMR2

TM R3

Figura 12.4. Bloques fundamentales del mdulo de Captura. Los impulsos aplicados a las patitas de entrada ICx del mdulo de Captura mostrado en la Figu ra 12.4 se divide por 1, 4 o 16 en el divisor de frecuencia segn el valor de los bits correspondien tes en el registro ICxCON, que tambin gobierna el tipo de flanco que origina el periodo de medi da. El bit CTMR selecciona el Timer que actuar de base de tiempos en la medicin. Dicha base de tiempos se regula desde el Detector Lgico de Flancos, que al acabar el periodo a medir deposita en el buffer para los resultados el valor del Timer seleccionado y dos ciclos de instruccin despus ac tiva el sealizador de interrupcin ICxF.

PERIFRICOS Y RECURSOS INTEGRADOS

159

12.6.

M D U L O DE CO M PA R A C I N /PW M

Este recurso es muy eficaz en aquellas aplicaciones que precisan generar impulsos de anchura va riable y los que realizan operaciones simples de PWM. Para estas ltimas tareas existen algunos mo delos de DSC con un mdulo complejo e independiente especializado en PWM para control de mo tores que ser explicado ms adelante. Tienen los siguientes modos de trabajo: - M odo de comparacin simple - Doble modo de comparacin de salida - Pulso simple de salida - Pulso continuo de salida - Modulacin simple de anchura de pulso - Con proteccin de errores en la entrada - Sin proteccin de errores en la entrada El funcionamiento simplificado de este dispositivo se basa en la comparacin del valor almace nado en un registro con el de un temporizador (TIMER2 o TIMER3). Cuando coinciden dichos va lores se genera un pulso o un tren de pulsos en una patita de salida. Es capaz de generar interrup ciones. (Figura 12.5.)
REGISTRO DATO COMPARACIN M-

FLAG INTERRUPCIN OCxlF

OCx

ySj
SALIDA

PATITA SALIDA

, OCFA

a
MPX O C TS E L 4*
13

M px i

OCFB

&

ir
TIMER3 SEAL TIMER2 SEAL TIMER3

MODO OPERACIN

TIMER2

Figura 12.5. Esquema por bloques del mdulo de Comparacin/PWM. . Cuando coincide el valor cargado en el registro OCxR del esquema de la Figura 12.5 con el del Timer seleccionado, la Lgica de Salida obliga a la patita de salida OCx (OC1-OC8) a tom ar un ni vel lgico determinado, a generar un impulso o incluso a producir un tren de pulsos continuos. Las patitas OCFA y OCFB sirven para controlar el funcionamiento en modo PWM con entradas de pro teccin de fallo.

160

dsPIC. DISEO PRCTICO DE APLICACIONES

12.7. M D U L O P W M PARA EL C O N T R O L DE MOTORES

Sirve para generar un tren de impulsos de anchura variable que permite variar la potencia que se en trega a un motor y regular su velocidad con precisin. Existen grupos de dispositivos DSC destinados al control de motores, pudiendo ser de dos tipos en funcin de las patas del mismo: mdulo de 8 salidas si el dispositivo es de 64 palas o ms y otro de 6 salidas en caso de un nmero menor. El mdulo PWM de los los dispositivos dsPIC30F tiene las siguientes caractersticas: - - - ' ... 1 '

1 Dispone de 8 patitas de salida PWM y 4 generadores de impulsos de anchura variable con 16 bits de resolucin. Las 8 patitas de salida PWM se agrupan por parejas, una por cada generador, pa ra controlar la polaridad de las seales de salida, que pueden ser iguales o invertidas segn el ti po de motor al que se apliquen (PWM4H-PWM4L, PWM3H-PWM3L, PWM2H-PWM2L y PWM1HPWM1L). Tambin hay 2 patitas Fault A y Fault B que determinan los fallos y generadores de tiempo muerto. W X V / . < \ V A W 2 Modos de salida por flanco y por centro alineado. 3/' Modo de generacin de pulso nico.

n D o s c a D B M B M B B a ia ia H M

C O N TR O L S O B R E P A S A M IE N T O

Figura 12.6. Esquema general simplificado del mdulo PWM.

Se comienza cargando el ciclo de trabajo y la seal para cada generador en sus respectivos re gistros PDCx (Ciclo de trabajo). Tambin se programan los registros de configuracin para deter minar el tipo de seal que se desea en cada generador. Luego, en el registro PTPER (Registro base

PERIFRICOS Y RECURSOS INTEGRADOS

1 61

de periodo de tiempo) se carga el periodo de la seal y para la generacin de la base de tiempo se utiliza un temporizador implementado por el registro PTM R (Registro base de tiempo). El valor del temporizador se compara con el de PDCx (Ciclo de trabajo) y a su vez con el del pe riodo PTPER, para obtener la anchura de pulso deseada. La activacin de las seales de fallo llevan a las salidas a un estado prefijado que evitan que se dae el motor. Estas patitas de fallo se denomi nan FLTA y FLTB y son controladas por los registros FLTACON y FLTBCON. Por las dos patitas de salida que dispone cada generador se pueden obtener diferentes tipos de se ales para aplicar a los motores. Dichos modos de trabajo son los siguientes:

1) Modo ormui Cada vez que el temporizador PTMR alcanza el valor del registro PTPER se genera una interrup;- cin y el temporizador vuelve a 0. 2) Pulso nico Slo funciona cuando se pone el bit de control PTEN = 1 y se iguala el valor del temporizador PTMR con el del registro PTPER, generndose un solo pulso por interrupcin y pasando PTEN = 0. 3) Modo ascendente/descendente Cuando el temporizador PTMR alcanza el valor de PTPER comienza a contar en sentido descen dente y cuando llega a 0 se produce una interrupcin y pasa a contar en modo ascendente. Como no es posible que las salidas PWMxH y PWMxL conmuten a la vez, $e introduce un tiempo muerto que se controla desde los registros DTCON1 y DTCON2. 4) Disparo especial En este modo es posible sincronizar el mdulo PWM con el conversor AD para llevar a cabo ope raciones combinadas.

12.8. M D U L O UAR T

Los DSC disponen de uno o ms UART, segn el modelo que se trate. El UART es un elemento des tinado a soportar la comunicacin serie asincrona y funciona de forma bidireccional, adaptndose al trabajo de muchos perifricos. La comunicacin se realiza con dos lneas, una para la transmisin UTX y otra para la recepcin URX, entrando y saliendo los bits a una frecuencia controlada inter namente. El UART dispone de un generador de baudios con un predivisor de frecuencia que se encarga de generar la frecuencia de trabajo del mdulo.

'

GENERADOR DE BAUDIOS

RECEPTOR ....... "ART: UART

W L m J m
TRANSMISOR UART i

URX

vXwiv :

Figura 12.7. Esquema p o r bloques del mdulo UART.

162

dsPIC. DISEO PRCTICO DE APLICACIONES

En la Figura 12.7 se ofrece el esquema por bloques del mdulo UART, en el que se distinguen los 3 elementos hardware principales del mdulo UART: generador de baudios, transmisor asincro no UART y receptor asincrono UART. Funciona en modo full-duplex con datos de 8 o 9 bits, 1 o 2 bits de STOP y un bit de paridad par o impar. El mdulo UART est compuesto por los siguientes registros: UMODE: Registro de Modo USTA: Registro de Control y Estado URREG: Registro de Recepcin UTREG: Registro de Transmisin UBRG: Registro del generador de Baudios El comportamiento del UART se gobierna desde los registros USTA, URREG y UTREG. Puede generar una interrupcin tanto el bloque transmisor como el receptor y el margen de fre cuencias que soporta abarca desde 38 Hz hasta 2,5 Mbps.

12.9. M D U L O SPI

Consiste en un interfaz serie sncrono que es muy empleado para establecer la comunicacin con microcontroladores, memorias EEPROM, conversores AD, etc. Todos los modelos DSC disponen al menos de uno de estos mdulos SPI. En la Figura 12.8 se ofrece el esquema por bloques del mdulo SPI, en el que se distinguen varios registros SFR que soportan el manejo de la informacin con el bus de datos. Uno se llama SPIBUF y guarda los datos que se envan y se reciben internamente y consta de dos registros unidireccionales de 16-bits, denominados SPIRB y SPITB, que guardan el dato recibido o el que hay que transmitir, res pectivamente. Otro es el SPISR que desplaza los bits de datos de entrada y de salida al registro SPI BUF. Otro ms es el registro de control SPTCON que gobierna al SPIRB y al SPITB. Y, finalmente, el registro SPISTAT contiene los bits de estado que informan de las condiciones de trabajo.
18 BUS DE DATOS

-----------

PREESCALER

Figura 12.8. Esquema por bloques del mdulo SRI.

PERIFRICOS Y RECURSOS INTEGRADOS

1 63

En el esquema de la Figura 12.8 la patita SDI es por la que se introducen los datos en serie y la SDO por la que salen. SCK es la patita que introduce los impulsos de reloj en el modo maestro, mientras que en modo esclavo acta como salida. SS# es la patita mediante la que se activa el mo do esclavo con nivel lgico bajo. 12.10. M D U LO l2C Dada la popularidad y uso del protocolo de comunicacin I2C los DSC disponen de un mdulo que permite su adaptacin y que es muy empleado en las transferencias de informacin con otros microcontroladores, registros de desplazamiento, conversores AD,.ctc. El mdulo I2C (Inter-lntegrated-Circuit) tiene el hardware necesario para trabajar en modo es clavo y en modo maestro. Como se aprecia en la Figura 12.9 todos los elementos que se conectan al bus I2C lo hacen a travs de dos lneas, SDA (Datos) y SCL (Reloj).

Figura 12.9. Para la comunicacin c.on el protocolo PC slo se utilizan dos lneas, una para los datos (SDA) y la otra para el reloj (SCL).

En este protocolo las direcciones de los elementos de la red pueden especificarse con direccio nes de 7 o 10 bits. Iniciada la transferencia de informacin se enva la direccin del elemento y al comprobar que le corresponde genera una seal de reconocimiento ACK que permite el progreso de.la transferencia. Los registros I2CCON e I2CSTAT son los registros de control y estado del mdulo I2C, respec tivamente. Como registro receptor acta I2CRCV y com o transmisor el I2CTRN. La direccin de cada esclavo viene almacenada en el registro I2CADD y, finalmente, el registro I2CBRG contiene el valor de recarga del generador de frecuencia.

164

dsPIC. DISEO PRCTICO DE APLICACIONES

12.11 M O D U L O D C I

El mdulo interfaz del Conversor de Datos (DCI) permite una sencilla comunicacin con muchos dispositivos comunes como los codificadores/decodificadores de audio (CODEC), telefona, reco nocimiento de voz, eliminacin de eco, los conversores AD/DA, etc., soportando los siguientes ti pos de interfaces:
.. . :
a) Transferencia de trama serie sncrona. b) Inter-IC Sonido (l2S). c) AC-Link Compliant (AC'97).

La aplicacin ms interesante del mdulo DCI es la destinada a las aplicaciones de voz y soni do de alta calidad con frecuencias comprendidas entre 8 y 48 KHz que trabajan con palabras co dificadas. El tamao de la palabra puede programarse hasta 16 bits, con 16 ranuras de tiempo para una trama de un mximo de 256 bits que puede almacenar hasta 4 muestras sin la supervisin de la CPU. Est configurado para recibir y transmitir datos en espacios mltiplos de 16 bits, operacin que se hace de forma transparente para el usuario. Consta de cinco registros de control y uno de estado: DCICON1: bits de habilitacin y modo. DC1CON2: bits para configurar la longitud de la palabra, de la trama y el buffer. DC1CON3: configura el reloj. DC1STAT: muestra informacin sobre el estado. RSCON: configura la recepcin de datos. TSCON: configura la transmisin de datos. A estos registros se les aaden cuatro para la transmisin TXBUF0...TXBUF3 y cuatro para la recepcin RXBUF0...RXBUF3.

12.12 M D U L O CAN

El mdulo CAN (Controller Arca NetWork) consiste en un interfaz serie muy empleado para la co municacin con otros perifricos u otros modelos de microcontroladores. El bus CAN fue usado por primera vez en 1980 por la industria del automvil para solventar la gran densidad de cableado entre sus diferentes elementos y el ruido ambiental. Con el bus CAN se reduce el cableado y se evitan las interferencias de los ambientes ruidosos. Los mensajes que se transmiten por este procedimiento carecen de los campos de direccin pa ra el origen y para el destino, en su lugar se emplea un identificados Los nodos conectados al bus CAN analizan el identificador y deciden si recogen o no la trama. El mdulo CAN que incorporan los DSC satisface las especificaciones de la norm a o versin 2.0B que utiliza identificadores de 11 y/o 29 bits. Tambin soporta los protocolos 1.2, 2.0B Pasivo, 2.0B Activo y 2.0A. Para la comunicacin el mdulo CAN maneja 2 buffer de entrada con prioridad y 3 de transmi sin. La longitud de los datos est comprendida entre 0 y 8 bytes y la trama puede ser estndar o ex tendida. Puede generar interrupciones cuando se producen errores.

PERIFRICOS Y RECURSOS INTEGRADOS

165

En la programacin del mdulo se usan los siguientes grupos de registros:


Registros de Estado y Control

CiCTR: registro de control y estado del transmisor. Registros del Buffer Transmisor CiTXnCON: registro de control del buffer transmisor. CiTXnSID: identificador estndar del buffer transmisor. CiTXnETD: identificador extendido del buffer transmisor. CiTXnDLC: control de la longitud de transmisin. CiTXnBn: buffer de transmisin. Registros del Buffer Receptor CiRXOCON: registro de control y estado del receptor 0. CiRXICON: registro de control y estado del receptor 1. CiRXnSID: identificador estndar del buffer receptor. CiRXnEID: identificador extendido del buffer receptor. CiRXnBn: buffer de recepcin. CiRXnDLC: control de longitud de recepcin. Filtros de Aceptacin de Mensajes CiRXFnSID: identificador estndar del filtro de aceptacin. CiRXFnEIDH: identificador extendido del filtro de aceptacin, parte alta. CiRXFnEIDL: identificador extendido del filtro de aceptacin, parte baja. Registros de la M scara del Filtro de Aceptacin CiRXMnSID: identificador estndar de la m scara del filtro de aceptacin. CiRXMnElDH: identificador extendido de la mscara del filtro de aceptacin, parte alta. CiRXMnElDL: identificador extendido de la mscara del filtro de aceptacin, parte baja.
Registros de la Tasa en Baudios

C iC F G l: registro 1 de configuracin de la tasa en baudios. CCFG2: registro 2 de configuracin de la tasa en baudios. Registros Contadores de Errores CiEC: registro contador de errores de transmisin/recepcin. Registros de Interrupciones CilNTE: registro de activacin de interrupciones. CilNTF: registro de FLAGvS de interrupcin.

12.13 M D U L O QEI

El mdulo QEI (Interfaz del Codificador de Cuadratura) proporciona una cmoda adaptacin de los codificadores incrementales usados para la deteccin de la posicin y la velocidad en los sistemas rotacionales propios de los ejes de motores.

166

dsPIC. DISEO PRCTICO DE APLICACIONES

Un codificador incremcntal est formado por los siguientes componentes:

1 . Fuente de luz (LED). 2. Disco ranurado sujeto al eje del motor. 3. Detectores de luz que reciben el haz luminoso del LED al situarse una ranura entre el emisor y el detector de luz.

A) FUENTE DE LUZ

LUZ

B) DISCO RANURADO

Figura 12.10. Principio de funcionamiento de un codificador incremental usado en e l control del posicionamiento del eje de un motor.

Un codificador incremental proporciona 3 seales: FASE A, FASE B e INDEX PULSE. Anali zando la forma de dichas seales se puede determinar con exactitud la posicin del eje del motor. El mdulo QEI tiene las siguientes caractersticas: - Tres patas: dos para la seal de fase y una para el index pulse. - Filtros programables de nudos en la entrada. - Decodificador de cuadratura provisto de un contador de pulsos. - Contador ascendente/descendente de 16 bits. - Estado de la cuenta de direcciones. - Resolucin de cuenta X2 y X4. - Dos modos de reset para el contador. - Contador ascendente/descendente de propsito general de 16 bits. - Interrupciones.

PERIFRICOS Y RECURSOS INTEGRADOS

167

En el manejo del mdulo QE1 se dispone de 4 registros SFR: QETCON: registro de control y estado. Configura las operaciones y los flags. DFLTCON: control de los filtros digitales que se aplican a las seales de entrada. POSCNT: contador de posicin. Permite configurar la lectura/escritura. M AXCNT: mximo valor a contar para comparar con el valor de POSCNT.

12.14 EL PERRO G U A R D I N (W D T ) Y LOS M O D O S DE BAJO C O N S U M O

El Perro Guardin es un temporizador dedicado cuya nica misin es vigilar el procesamiento del flujo de control y reinicializar el procesador cuando se produzca un fallo. Fundamentalmente detecta situaciones en las que se queda colgado el procesador porque se ha metido en un bucle infinito o es t esperando que suceda una condicin que nunca ocurre. El WDT se program a con un valor para que se desborde y genere un Reset al cabo de un cierto tiempo. A lo largo del programa y en puntos estratgicos se colocan instrucciones CLRWDT que re frescan o ponen a 0 al WDT y evitan que se desborde. Cuando el procesador se enreda en un blo que del programa del que no sale, no hay refresco y al desbordarse el Perro Guardin se genera un Reset. El Perro Guardin es optativo y puede deshabilitarse mediante el bit FWDTEN ubicado en el re gistro de configuracin FWDT. Los dispositivos dsPlC30F tienen 2 modos de funcionamiento de bajo consumo que pueden ser seleccionados mediante la ejecucin de la instruccin PWRSAV. SLEEP: tanto la CPU como los perifricos dejan de funcionar al detenerse el reloj del sis tema mediante la inhabilitacin de los osciladores principal y externo respectivamente. Este es el modo en que menos potencia consume. IDLE: la CPU se deshabilita y deja de ejecutar instrucciones, pero los perifricos siguen funcionando aunque pueden ser desactivados opcional mente. En este modo slo se des habilita el oscilador principal.

Los dsPJC33F tienen tambin el modo de bajo consumo DOZE que consiste en rebajar la fre cuencia de trabajo para disminuir la energa consumida. Para salir de los modos de bajo consumo existen tres causas: Ia) Interrupcin. 2a) Rcset. 3a) Desbordamiento del W DT

12.15 EL C O N T R O L A D O R D M A

Adems de todos los perifricos que integran los dsPIC30F. los dsPIC33F disponen del Controla dor de Acceso Directo a Memoria (CDMA). El controlador DMA es un dispositivo que permite transferir datos directamente entre la memo ria y los perifricos a gran velocidad y sin la participacin de la CPU que puede dedicarse a otras misiones. (Figura 12.11.)

168

dsPIC DISEO PRCTICO DE APLICACIONES

Figura 12.11. El Controlador DMA permite la transferencia directa y veloz de datos entre la memoria y los perifricos sin intervencin de la CPU.

Los dsPIC33F y los PTC24H para soportar el DMA utilizan una memoria de doble puerto (DPSRAM), dedicando uno de ellos a la comunicacin con la CPU y el otro con los perifricos. En la Fi gura 12.11 se ha simplificado el diagrama por bloques que representa el funcionamiento del CDMA. Cada vez que un perifrico intenta transferir datos con la memoria genera una interrupcin al CD MA que pasa a controlar las lneas de los buses de datos, direcciones y control y organiza el tras vase directo y veloz de la informacin entre el perifrico y la memoria de datos. En los modelos dsPIC33F, el CDMA dispone de 8 canales para soportar las transferencias y la existencia de dos bus es de datos independientes, uno entre la CPU y los perifricos y el otro entre la memoria y los perifricos elimina gran parte de las colisiones, pudiendo realizar diversos acce sos simultneos:

1 Es posible realizar una lectura de una misma posicin de un perifrico o de la DPSRAM desde la CPU o desde el CDMA. 2. Es posible escribir simultneamente dos posiciones diferentes de la memoria o del perifrico des de la CPU y eJ CDMA. 3 Se produce una colisin si se intenta escribir la misma posicin de la memoria o del perifrico des de la CPU y desde el CDMA a la vez. En este caso prevalece la escritura de la CPU y se genera una excepcin que recoge los detalles que han producido la colisin, as como tambin se activa el sealizador de colisin correspondiente al canal en el que se ha producido.

Como se muestra en la Figura 12.13 la comunicacin de los perifricos mediante dos buses con la CPU y el CDMA permite implementar todo tipo de transferencias bidireccionales y directas en tre los perifricos y la DPSRAM. La gran ventaja del CDMA es la gran velocidad con la que se transfieren datos entre la memo ria y los perifricos sin afectar al trabajo de la CPU y sin rebajar el rendim iento del sistema. A tra vs de los 8 canales del CDMA se puede transferir bidircccionalmente un dato de tamao byte o

PERIFRICOS Y RECURSOS INTEGRADOS

169

B LO Q

CO N TR O LADO R

DATOS DMA LISTO PER 1

SRAM:-

DPSRAM

CONTROL

CNALS DMA

IN TE R R U P C IO N BU S D A TO S D M A

D IR E C C I N D P S R A M

D IR E C C I N P E R IF R IC O

B U S D A TO S C PU - P E R IF E R IC O S

Figura 12.12. El CDMA de los dsPIC33E dispone de 8 canales independientes para soportar las trans ferencias directas entre la DPSRAM y ios perifricos.

TEMPORIZ

TEMPORIZ

BUSTJTSSli 7I"

UART

ECAN

ECAN

Figura 12.13. Median te el control de los canales del CDMA se puede atender a un gran nmero de perifricos .

palabra en un ciclo. Cada bloque de datos que puede transferirse puede alcanzar los 2.048 bytes o palabras. En el CDM A existe un esquema de prioridades entre los canales para los casos de coli sin entre ellos. Con la finalidad de conseguir el mximo rendimiento en la transferencia con DM A el contro lador tiene 4 modos de funcionamiento que permiten adaptarse a las estructuras de datos que se manejen.

170

dsPIC. DISEO PRCTICO DE APLICACIONES

En el modo de disparo nico se mueve un bloque de datos y a continuacin se desactiva el ca n a l (Figura 12.14.)
E S P A C IO D IR E C C IO N E S D P S R A M

IN T E R R U P C IO N CPU A L C O M P LE TA R T R A N S F E R E N C IA D EL BLO Q U E

Figura 12.14. Representacin grfica del funcionamiento del modo de disparo nico en el CDMA.

En el modo de autorepeticin se mueve un bloque de datos y luego se configura automtica mente el canal para repetir la transferencia. (Figura 12.15.)

E S P A C IO D IR E C C IO N E S D P S R A M

IN T E R R U P C I N CPU A L C O M P LE TA R T R A N S F E R E N C IA D E L BLO Q U E

Figura 12.15. Representacin grfica del funcionamiento del modo de trabajo de autorepeticin del CDMA.

En el modo ping-pong se manejan 2 buffer de datos y cada vez que se completa la transmisin de uno de ellos se configuran automticamente los canales para comenzar la transferencia del otro. (Figura 12.16.)

PERIFRICOS Y RECURSOS INTEGRADOS


E S P A C IO D IR E C C IO N E S D PSRAM

1 71

BUFFER

C O U N T = D M A C N Tx

j^ >

IN T E R R U P C I N CPU AL CO M PLETAR TR A N S F E R E N C IA

B U FFE R B

----- ------------------------|
C O U N T = D M A C N Tx N

INTERRUPCIN CPU
AL CO M PLETAR T R A N S F E R E N C IA

Figura 12.16. M odo de funcionamiento tipo "ping-pong" del COMA.

Finalmente, en el modo de direccionamiento indirecto, la direccin de acceso a la DPSRAM se forma concatenando la parte baja de dicha direccin que suministra el perifrico con la parte alta que conforma la direccin Base suministrada por un registro del CDMA (DMASTnx). (Figura 12.17.)
EXTEN SI N DE C ER O S D IR E C C IO N IN D IR E C T A D ESDE P E R IF R IC O

D IR E C C I N D PSRAM /

_ _ _ _ _ _
D IRECCI N BASE j

i! :

D IR EC C I N BASE D ES D E D M A S Tnx

R E S P O N S A B ILID A D DEL U S U A R IO

Figura 12.17. La direccin de acceso a la DPSRAM en e l modo de direccionamiento indirecto se for ma concatenando los dos campos que se indican en la figura.

Segunda parte
Programacin y simulacin de aplicaciones

A plicacin 0. A plicacin 1. A plicacin 2. A plicacin 3. A plicacin 4. A plicacin 5. A plicacin 6. A p lic a c i n 7. A pndice A.

LAS HERRAMIENTAS DE DESARROLLO...............................................................1 75 D IS E A N D O FILTROS.............................................................................................. 181 EL ENTO RNO DE DESARROLLO MPLAB ID E .................................................... 197 P O N IE N D O EN M ARCH A EL S IM U L A D O R ........................................................215 M AN EJAN D O LAS INSTRUCCIONES TPICAS DE LOS dsPIC....................... 225 LEYENDO Y ESCRIBIENDO LAS MEM O RIAS FLASH Y EEPROM..................233 P R O G R A M A N D O LOS PERIFRICOS C O N VISUAL IN IT IA L IZ E R ............. 243 PERIFRICOS A V A N Z A D O S ....................................................................................259 C O N T E N ID O DEL CD E INSTALACI N DE LAS HERRAMIENTAS DE TRABAJO ..................................................................................................................275

A pndice B.

SOLUCIONES A LOS EJERCICIOS DE A U T O E V A LU A C I N .......................... 281

. . ..

v.*.

... .

APLICACIN
V lV

m
...... .

Las herramientas de desarrollo

A 0.1 . IN T R O D U C C I N

En esta segunda parte del libro, y tras haber estudiado el aspecto terico de los controladores dsPIC, se aborda un estudio ms prctico de los mismos, mediante el desarrollo de varias aplicaciones. As, se estudiar desde cmo comenzar a programar las aplicaciones, compilarlas y simularlas en el orde nador, hasta desarrollar alguna aplicacin de los perifricos avanzados introducidos en estos controla dores para el tratamiento digital de seales. As mismo, al final de cada captulo una seccin de autoevaluacin, servir al lector para conocer su evolucin en la asimilacin de los conceptos descritos. Para llevar a cabo esta tarea, esta segunda parte se encuentra dividida en varias aplicaciones prc ticas explicadas con detenimiento, tanto para el lector aventajado que ya ha programado con ante rioridad los microcontroladores PC, como para el nefito. En este captulo introductorio se analizan las herramientas a emplear, as como las caractersti cas de la familia del dsPIC utilizada tanto en esta segunda parte como en la tercera, en la que el lec tor podr comprobar prcticamente los conocimientos adquiridos mediante ejercicios sobre circui tos reales, utilizando la taijeta PIC School preparada a tal efecto. Las caractersticas de estos dispositivos requieren poseer una base terica sobre el tratamiento di gital de seales. Esta teora de seales no es objeto de este libro.

A 0.2 . DE S C R IP C I N DEL dsP IC 30F4013

El controlador elegido para realizar todas las aplicaciones y laboratorios, tanto de la segunda como de la tercera parte del libro, es el dsPIC30F4013 perteneciente a la familia de propsito general, que ha sido seleccionado por varias de sus caractersticas. En primer lugar pertenece a una familia de propsito general, que lo hace especialmente intere sante para poder adentrarse en el estudio de todas las posibilidades de los dsPIC. Por otro lado, se trata de un DSC con encapsulado PDIP (Plstic Dual In-line Package), que permite una mayor sen cillez de montaje sobre un circuito electrnico frente a otro tipo de encapsulados. Sin embargo, una pequea desventaja de este modelo es que no dispone de hardware especfico para el tratamiento de PWM, muy til en el control de motores.
175

176

dsPIC. DISEO PRCTICO DE APLICACIONES

AO .2.1. D ia g ra m a de co n e xio n a d o

El controlador d$PIC30F4013 se comercializa en varios encapsulados. El seleccionado para esta se gunda parte de esta obra, es el PDIP de 40 patitas, por su facilidad de conexin. El diagrama de co nexionado se corresponde con el de la Figura AO. 1.

M CLR AN0A/REF+/CN2/RB0 AN1A/REF-/CN3/RB1 AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 AN4/IC7/C N6/R B4 AN5/IC8/CN7/RB5 PGC/EMUC/AN6/OCFA/RB6 PGD/EMUD/AN7/RB7 AN8/RB8
VDD

n 1
C

vss OSC1/CLKIN OSC2/CLKO/RC15 EM UD1/SOSO I/T2CK/U1ATX/CN1 /RC13 EMUC1/SOSCO/T1CK/U1ARX/CNO/RC14 INT0/RA11 IC2/1NT2/RD9 OC4/RD3 V ss

n C C 5 fz 6 H7 C 8 C 9 J= 10 n ti n 12 n 13 C 14 C 15 H 16 C 17 10 Q 19 q 20

2 3 4

40 I] A V D D 39 1 AVSS 36 j AN9/CSCK/RB9 37 1 AN10/CSDI/RB10 36 35 34 33

"O o C a > o 2 o

32 31 H V SS 30 b C1RX/RF0 29 C1TX/RF1 28 U2RX/CN17/RF4 27 26 25 24 23 22

H AN11/CSDO/RB11 3 AN12/COFS/RB12 3 EMUC2/OC1/RDO H EMUD2/OC2/RD1 VDD

U2TX/CN18/RF5 U 1RX/SDI1/SDA/RF2 EMUD3/U1TX/SD01/SCL/RF3 EMUC3/SCK1/RF6 IC1/1NT1/RD8 OC3/RD2


VDD

21

Figura A0.1. Diagrama de conexionado del contro/ador dsPIC30F4013.

AO.2.2. C a ra cterstica s p rin cip a le s

Las caractersticas propias ms importantes del dsPIC30F4013 se encuentran resumidas en la si guiente tabla.
MEMORIA
Memoria de programa de 48 KB de capacidad. Hasta 16K instrucciones. 2048 bytes de memoria SRAM 1024 byies de memoria EEPROM 16 registros de trabajo de 16 bits cada uno i

PERIFRICO S_______________
5 temporizadores de I (> bits 4 mdulos de captura de 16 bits

4 mdulos comparadores o de salida PWM de 16 bits _____ Interfaz de conversin de datos DCI, con soporte de CODEC de audio AC'97 e l'S 2 mdulos UART 1 mdulo SPI 1 m dulo CAN I mdulo l2C
ca ra cterT s t Tc a s a n a l g i c a s

Conversor analgico digital de 12 bits Ratio de conversin de 100 ksps Hasta 13 canales de entrada

APLICACIN 0: LAS HERRAMIENTAS DF DESARROLLO

177

A 0.3. HERRAMIENTAS DE SOFTWARE U T IL IZ A D A S

Se describen las caractersticas y usos de las herramientas software que se utilizarn para desarro llar las aplicaciones. L a instalacin de estas herramientas se encuentra detallada en el Apndice A, Contenido del CD e Instalacin de las herramientas de trabajo.

AO.3.1. El e n to rn o de d e s a rro llo M PLAB IDE

Esta herramienta, desarrollada por Microchip, y disponible de forma gratuita en su web, va a ser el entorno de trabajo principal. El MPLAB IDE es un entorno de desarrollo dotado de un editor, un gestor de proyectos, un depurador de programas y varias herramientas para el desarrollo de aplica ciones para los microcontroladores PIC y los dsPIC. (Figura A0.2.)

o n o e c n e K io c o o n n c G O
0

v k e o o
VJK31 TRE52

3 U 3UCUW JU C0333CC
a 5

03CCC033 CC0330CC aaaeeon GCOOSaCC 33DCC003 CCC0330C

J JJ3ULLOJ ULL03JUC
o ooiaocco onccooDo O CCO33CC0 030C0033 u (xxrj3uco uaoccoaa n r m u n c c 030CC003 O CC03300C OJQCCCOJ u U.OU33UC osanccoa o t r m in n e rawiCCOO O CCC0330C 0330CC03 O CCCOJJUL IXIJUUlXrj c cccoaaoc nonnereo C GCCC033G CO3DCCC0

suca

S W 5 3 T O E S *

0 U U C C U 3 3U CU J3U CCV
ri,- -,
c B

wAv 3 3 X 4 orco n c c o
332Z SOCO aucc oai a

0326

CCCO

U U U LCU J33 C U U 3B U C O
n n n n rrm n r m ia n c c 0 030CC033 CC0330CC 3 333ULW3 UCUJ3SUC a naanrm a n rm innn 3 0330CC03 OCC03300 O 0330UC03 UQCOJ3UU o oaaaccoo accooaan O 0333DCC0 30CC0333 O SOCCO 30CCW33 a o jjju c c o oaccooaa O (OOOCCO 030CC033 O O33CC0 030CC033 O CC033DCC 030GC003 O CC003000 0 3 00 00 3

caccoaan coaannco OOCC0030 C0033CC0

H MBBBol

rtn> H H ol -M IC B H 8B S mu H B B H IB B .v j:
BWBftBftj BPgOQQP

W B flB g gc c ,' P P H COi


w-c.vyyl v . cmc
. ; v

coi e CO

oaan 0333 0033

ij j j j
c o 3 3

O IXV33DLO 0301X033

v .;-;-;

Figura A0.2. El entorno de desarrollo MPLAB IDE.

Se dedica un captulo a explicar las caractersticas de este entorno con el que se desarrollarn la mayora de las aplicaciones. A modo de resumen, se destacan las siguientes caractersticas:
Desarrollado para su uso bajo sistema operativo Windows. Edicin de cdigo integrada con resaltado de cdigo. Posibilidad de ensamblar, compilar y iinkar el cdigo. Posibilidad de depuracin del programa ejecutando paso a paso nuestro programa con un simu lador o en tiempo real sobre el circuito de aplicacin con las herramientas de depuracin en cir cuito de Microchip. Realizar medidas de tiempo mediante el simulador. m Observar el valor de variables y posiciones de memoria mediante ventanas de inspeccin. Programacin del firmware de los controladores a travs de las herramientas de programacin.

1 78

dsPIC DISEO PRCTICO DE APLICACIONES

AO.3.2. El compilador de C MPLAB C30

Microchip dispone de un compilador C integrable en el entorno de desarrollo MPLAB IDE con el que desarrollar programas en este lenguaje. Esta herramienta no es gratuita, aunque se puede disponer de una versin de uso libre durante 60 das. Puede resultar interesante instalar esta herramienta para comprobar si el programar en este len guaje supone una ventaja para sopesar la compra de la herramienta sin limitaciones de uso. En el CD que acompaa a esta obra, se encuentra una versin para estudiantes, que sigue activa tras superar este perodo de 60 das, y que transcurrido dicho tiempo pierde algunas de sus funcionalidades, pe ro es perfectamente utilizable para fines didcticos. Si el lector no es un estudiante, deber bajarse la demo gratuita de 60 das disponible en la web de Microchip.

AO.3.3. Herramienta de diseo de filtros dsPICFdLite

El programa dsPICFdLite, desarrollado por Momentum Data Systems Inc., es una versin DEMO de carcter introductorio y limitado que sirve para resolver filtros FIR e IIR de escasa complejidad m e diante un interfaz sencillo e intuitivo. En la actualidad Microchip ofrece una potente herramienta de nominada Digital Filter Design que cubre ampliamente todas las necesidades en el diseo de filtros. Todos los clculos matemticos complejos necesarios para realizar estas tareas se simplifican enormemente y, adems, se obtienen una serie de grficos (magnitud, fase, respuesta ante impulso, respuesta ante escaln, polos y zeros, retraso,...) que permitirn predecir el comportamiento de los filtros diseados. Simplemente, introduciendo las especificaciones del filtro que se desea realizar, tanto filtros FIR, como IIR, filtros pasabaja, pasaalta, pasabanda y banda eliminada, se genera un fi chero con los coeficientes del filtro con un par de clics de ratn y se puede importar ese fichero pa ra usarlo directamente en el MPLAB IDE. De igual forma, la aplicacin generar el cdigo en en samblador o en C para utilizar dicho filtro en nuestro programa para el dsPIC. (Figura A0.3.)

Pie We*v Cpsy> Filer Output

VVhdow

id * igf m iiw ai ni msi m iro;m m\ a ai g la


- i 1*
M agnitud vs Frquncy Log M agnitud vs Frquncy

nnm___ 4 iy > 9 s ___ wwi

* *
;

-X

L J
tan?* ^nivan

nrm

; :

i.T5niM

r r T

M Pole/Zero Plot

n i:

- 'a -

Figura A 0.3. Diseo de filtros mediante dsPICFdLite.

APLICACIN 0: LAS HERRAMIENTAS DE DESARROLLO

179

Esta herramienta es una versin reducida del programa dsPIC Fd. Se trata de una versin con ciertas limitaciones, tales como el orden mximo de los filtros generados.

AO.3.4. H e rra m ie n ta para el tra ta m ie n to de a lg o ritm o s de tra ta m ie n to de seales dsP IC w orks

Esta herramienta, tambin descrita en la Aplicacin 2, permite realizar anlisis y tratamiento de se ales de forma sencilla. El programa permite generar e importar y exportar seales de todo tipo. As mismo dispone de un sencillo men para realizar operaciones tpicas de DSP (Procesamiento Digital de Seales) co mo realizacin de transformadas, filtrado de seales (utilizando los filtros diseados con el progra ma dsPICFdLite), escalado, recorte de seales, etc. La aplicacin tambin muestra en pantalla representaciones de las seales, incluso con grficos 3D. Los datos de las seales podremos incorporarlos al MPLAB IDE y crear ficheros en ensambla dor para incluir en la aplicacin. (Figura A0.4.)

j& jg J: '!:& ':aj: B| B : HilBlj


. 0 L 2 ? S f> p c rc a d ttro ti y P -S S 100

t* f" W *

py

!/*'' M

x4 r .3 a .jG

c o n r u i d o .w a v * - J .ri* r;

VPV(n n a ^ c o n

ru iii.c i.)

K z : R E A jr iM B tN V l :

F r < | v n c y {k K x l

I?

(V :

0/11.

6 1

io 2 :

HQ

6 .7 9 1

l 'J . m v

1 'J .t O 'J 1 3 .5 8 3

il.l

r in *

fn S !

Figura A0.4. Tratamiento y anlisis de seales mediante la herramienta dsPICworks.

A U TO E V A LU A C I N

Al final de cada captulo de esta parte prctica, encontrar bajo el epgrafe Conceptos clave de este capitulo una serie de preguntas que le ayudarn a verificar si ha asimilado y comprendido los con tenidos explicados en el captulo. A s mismo, se propone una serie de enunciados de ejercicios correspondiente a la aplicacin estudiada.

180

dsPIC. DISEO PRCTICO DE APLICACIONES

Conceptos clave de este captulo

um
'esarrollarn los programas para dsPIC? 1. Con qu hern gunda parte de esta obra alguna placa de desarrollo o hardware basado 2. Es necesaria en dsPIC? a de datos y de programa dispone el dsPlC30F4013? 3. De cunta me 4. Con qu herr se debe tener especial cuidado al instalarla?por qu? Qu herramienta generar automticamente el cdigo fuente necesario para desarrollar un filtro para un dsPIC?

iS gB 8B 8S IW fi88giK gaai

APLICACIN
s W hiW iFFFfffifiiC?:-' , <* W A W . W :
y!vy.' /'Vv / .

WsS'&yWm W m M ,

Diseando filtros

A1.1. IN T R O D U C C I N

La teora de filtrado de seales abarca un temario muy amplio y denso lleno de clculos matemti cos. Elaborar esos clculos matemticos con los PIC resultara una tarea muy ardua debido a su ca rencia de instrucciones para hacer divisiones, multiplicaciones, y operaciones matemticas de ms complejidad. La empresa M icrochip dispone de dos herramientas especialmente tiles para el tratamiento de seales. Se trata de las herramientas dsPTC Fd Lite y dsPICworks. Ambas estn disponibles para su descarga gratuita desde la web www.microchip.com. En caso de que la herramienta de diseo de fil tros dsPIC FD Lite no cumpla con todas sus expectativas, debe saber que existe una versin com pleta, con ms funcionalidades, que comercializa Microchip.

A1.2. EL PLAN DE TRABAJO

En el captulo anterior, se han analizado las funcionalidades principales de las dos herramientas que aborda este captulo: dsPIC Fd Lite y dsPICworks. Se propone resolver un problema de filtrado de seales, utilizando dichas herramientas. Sin lle gar a profundizar en todas las funcionalidades y a travs de un ejemplo clarificador, se mostrar el potencial que alcanza la combinacin de estas 2 herramientas.

A1.3. EL PROBLEMA

En la carpeta Aplicaciones\aplicacinl\filtros del CD que acompaa al libro, se encuentra un fichero de sonido cuyo nombre es mensaje con ruido.wav: Se trata de una seal de audio reproducible en el ordenador que contiene un ruido. Puede identificarse rpidamente dicho ruido porque se trata de un pitido molesto que impide escuchar un mensaje con claridad. La experiencia trata de filtrar ese rui do de forma que se pueda escuchar el mensaje con claridad.
181

182

dsPIC. DISEO PRCTICO DE APLICACIONES

Al hacer doble clic sobre este fichero, se reproduce un mensaje con un ruido muy molesto. El ob jetivo de este ejercicio es eliminar ese ruido molesto de ese fichero y escuchar el mensaje de forma correcta. Las posibles aplicaciones de este ejemplo son muchas, pero quizs un ejemplo muy interesante es el de los m icrofiltros en las lneas ADSL. (Figura A 1.1.) Las lneas ADSL aprovechan el ca nal telefnico para enviar informacin al ordenador. As, estos filtros permiten hablar por telfo no y navegar simultneamente sin ningn problema. Las dos seales navegan por el mismo canal hasta el receptor. Para que al hablar por telfono, no se mezclen las seales, y slo llegue la seal de voz, se debe colocar unos microfiltros en las tom as de los telfonos, que filtran la seal a m o do de colador, evitando que lleguen a nuestros odos ruidos producidos por la seal de Internet. El ejemplo desarrollado acta de form a similar, al conseguir quitar de la seal de voz el ruido que acompaa.

Figura Al .1. Instalacin de un microfiltro DSL. Tambin es interesante el proceso contrario: extraer del mensaje una seal que contenga slo el ruido. As se podra enviar mensajes en clave, camuflndolos con un mensaje de audio normal. En ese caso, para descifrar el mensaje, hay que filtrar la seal original de forma que slo quede el rui do original y aplicar sobre este otro algoritmo de tratamiento de seales para obtener el mensaje des cifrado final.

A 1.4. ANALIZANDO LA SEAL Al escuchar la seal a travs de los altavoces del ordenador, se aprecia que la frecuencia del ruido es muy distinta a la del resto de la seal. Es un tono mucho ms agudo. El primer paso consistir en localizar el rango de frecuencias en las que se encuentra el ruido. Una vez localizado dicho rango, se deber disear un filtro que consiga hacer desaparecer de la se al original la parte que contenga dichas frecuencias. El programa dsPICworks1 permite analizar la seal. (Figura A l.2.) Una vez puesta en marcha la herramienta, se procede a cargar la seal a es tudiar. El program a no trabaja directamente con seales .WAV, sino con un formato interno de pro grama, cuyos archivos tienen una extensin J I M . La conversin a este formato se realiza de una form a bastante sencilla:
La instalacin de esta herramienta se encuentra detallada en el Apndice A contenido en el CD.

APLICACIN 1: DISEANDO FILTROS

183

Figura A l .2. La herramienta de tratamiento de seales dsPfCworks.


y.v.-y.-y.v/.v i'iv / iv iv X v i'/ iv X v y.'.-'.' v-;.;-v.v<::*v'v.vyy.'.\\\-y.y.\-y.-yl^ '^.\-yy '.-y yy. -y.-y. >'

En el men File -> Import File... se accede a la pantalla de la Figura A 1.3. En la lista desplegable Input File Format se escoge el formato de la seal de entrada. Dicho for mato es Windows WAVE File. A continuacin, y mediante el botn Source File, se selecciona el fichero que contiene la seal a ana lizar de la carpeta del CD que acompaa al libro: Aplicaciones\aplicacinl\mensaje con ruido.wav. Pulsando en el botn Destinantion File, se da un nombre y una ubicacin para la seal en formato . TIM. Un posible nombre podra ser mensaje con ruido, tim dentro de la carpeta Mis documentos. (Es importante cambiar la ubicacin del fichero de destino ya que de dejar la ruta por defecto, la del CD, al estar protegido contra escritura, el programa dara un mensaje de error.) Por ltimo,, se valida el proceso pulsando el botn OK.

/Sj Im port File

'.
S c u ce Ffe

X vXv.;.v.-iv.;.
mensaje cor. rt io .w a .

Destination Fie

mensaje con ruido.ti.

Ir r p o r tfile T y p e ----- ------ ------------ -----------------------------

f*

Time Domain File

Frequency Ocfnn Fite

Sampling R a le

Im p o nF ieF o rm a l N u m b e ro fC h a n n e ls F F TF w n e S ize F F T In te vd F F TW in d c wF o n c tio n

jW in d o w sW A V Efile (l | 1 0 2 4 }1 0 2 4 jR ec'fv-i^

Figura A 1.3. lmportindo la seal con ruido al dsRICworks.

184

dsPIC. DISEO PRCTICO DE APLICACIONES

Nada ms pulsar el botn OK, se obtiene una representacin grfica de la seal en pantalla. (Figura A 1.4.)
t / , dsPICworkr. [C:\Documents and Settin^\0lat7\f scrttorAContenido del CDVAP1 ICAC.IONfSVA...
F in View d t G e ne re to r O p eratio n D ? K ip te y U tlte e W in do w

-Ifll *
_____;_______

. ? ].# ];

l ! l l . H J . O l. H l. B l

Imported from 'mensaje con ruido.wav' 120159 pts @ 4100 H z : REALTIMEINT16: Binary

1 3 .5 8 3

L ili

Figura A1.4. Representacin grfica de la seal. El grfico de la Figura A l.4. muestra una representacin en magnitud de la seal en el dominio del tiempo. Al realizar la Transformada de Fourier se podr analizar dicha seal en el dominio de las frecuencias. Ms concretamente, y para seales discretas, se debe realizar la Transformada R pida de Fourier, FFT (Fast Fourier Transform). Se procede a realizar una operacin DSP accesible en el men DSP del programa, mediante la opcin Fcist Fourier Transform. Al acceder a este men, aparece en pantalla la Figura A 1.5.

6 Fast Fourier Transformation

input x(n)

mensaje con ruido. ti.

output: X(wj

mensajeconfuido.fr.

FFT Window Function Advance FFT frame after each block of

Rectangular |l0 2 4 samples -~l points computed

1024

Help

OK

Cancel

Figura A1.5. Realizacin de la Transformada Rpida de Fourier.

APLICACIN 1: DISEANDO FILTROS

185

Tras aceptar las opciones por defecto de la ventana y pulsar el botn OK, la herram ienta advier te del formato en que se guardarn los datos. Aceptando de nuevo ese mensaje, se obtiene casi ins tantneamente el resultado de la operacin. En el grfico de la Figura A 1.6. ya se puede estudiar el rango de frecuencias de la seal.
ckPICworks - [C:\Documents and SeUinp^\Olat 7\Fsr/(toro\Cntonirlo del COVAPI ICACIOWS\A..
r l t VJw CcJ: Se-ierator Cpsraicci

5 5
?

j f b y O R I*

]iwap^|a| alaai a|| aiHiBli_____


20932 p ts @ -a lO O

FFT ( n s a jo c o n c w id o .tiK ) H z : c o m p le x 6 i bit d o u b l e : Birsary

i i hfj
jlU
Ker.it/

'WijJu.J____

F r e q u e r . c y (kHz)

[Frame

0/11.61

(mS ) 1

Figura A 1.6. Representacin del espectro de frecuencias de la seal.

El grfico de la Figura A l .7. muestra dicho rango de frecuencias para la seal estudiada. Se ob serva una desviacin grande en forma de mximo. Al hacer clic con el ratn en el punto ms alto de ese mximo, en la parte inferior de la pantalla aparece el valor de dicha frecuencia que claramente es muy distinta a la del resto de la seal.

Figura A1.7. Localizando el ruido de la seal.

186

dsPIC. DISEO PRCTICO DE APLICACIONES

Luego la seal contiene una frecuencia cercana a los 4.867 Hz, que es muy distinta al resto de frecuencias que contiene la seal. Al filtrar un rango de frecuencias cercano a ese valor, se conseguir eliminar el dichoso ruido.

A l .5. F IL T R A N D O LA SEAL

Si la hiptesis de trabajo es correcta y el ruido escuchado al reproducir el sonido es el correspon diente a dicho rango de frecuencias, qu se debe hacer para eliminarlo? Se debe filtrar o atenuar di cho ruido. Existen varios tipos de filtros. La herramienta dsPIC Fd Lite permite trabajar tanto con filtros F1R como IIR. Ambos filtros reciben una seal de entrada y la atenan en funcin de unos parme tros para proporcionar otra seal distinta. Ambos filtros requieren de computaciones costosas, ya que para calcular la salida y ,, en un mo mento n, depende de sus estados anteriores y.|, y.2 ,.... Una de las caractersticas de los filtros IIR (Infinite Impulse Response) es que suelen tener una menor carga computacional que los filtros FIR (Finite Impulse response). Los filtros FIR suelen ser ms costosos de calcular debido a que son ms precisos en cierto tipo de operaciones, pues a dife rencia los filtros IIR, siempre introducen un retardo constante en cada frecuencia, y sin embargo los filtros IIR, el retardo introducido depende de la frecuencia y el tipo de seal. En esta experiencia se utilizar un filtro IIR que resulta ms apropiado para las seales de audio procedentes de la voz humana. Un filtro que haga desaparecer un rango de frecuencias entre 4.800 Hz y 5000 Hz, y deje el resto de la seal original sin atenuar. Para disear dicho filtro pue de ser de gran utilidad utilizar la herramienta dsPIC Fd Lite2. Dicha herramienta dispone de un ti po de filtro denominado banda-eliminada cuya funcin es atenuar una banda de frecuencias y el resto de frecuencias dejarlas inalteradas. El programa dispone de esa funcionalidad bajo el men Filer -> Bandstop. (Figura A 1.8.)

Filter O u tp ut

Codeger

Lo w p a ss...

w
Figura A1.8. Iniciando el filtro banda-eliminada.

Highpass .,. Bandpass ...

Bandstop ... S ta rt Design ...

A continuacin se param etriza el filtro. Lo ideal sera indicar las frecuencias que se desean eli minar y nada ms. Pero, este tipo de filtros no son perfectos y se deben param etrizar de forma que se llegue a un com prom iso entre un cierto valor de atenuacin para frecuencias cercanas a las que se desean elim inar y un valor de atenuacin muy superior para aquellas que se desean eliminar del todo. Para calcular dichos parmetros del filtro analizaremos la Figura A l .9 que representa
Su instalacin tambin se encuentra detallada en el Apndice A contenido en el CD.

APLICACIN 1: DISEANDO FILTROS

187

grficamente un filtro de Cauer o elptico. El parm etro passband ripplc (PO) indica la mayor o m enor atenuacin de la seal, en las frecuencias pasa banda (f 1 y f4) y el parm etro Stop band ripple (P l) indica la atenuacin obtenida en las frecuencias de elim ina banda (f2 y f3). Esta me dida se expresa en dB, y su clculo se realiza m ediante la siguiente frmula:

De esta frmula se puede deducir que para conseguir que para las frecuencias entre f2 y f3 (stop band frecuencies) slo pase una cien milsima de la seal, se debe conseguir que PO, Stop band ripple, sea de 50 dB. Y sin embargo, para que en el rango de frecuencias pasabanda, que es un rango de frecuencias en el que se encuentra el rango de frecuencias a eliminar, se obtenga apro ximadamente un 98 % de la seal original, se debe colocar P l, Pass band ripple, con 0.1 dB.

Figura Al .9. Representacin de un filtro de Cauer.

Se establecen unas frecuencias pasabanda, de fl a f4, que comprenden las frecuencias a eli m inar y en las que em pieza a filtrarse la seal. El filtro har que para frecuencias inferiores a f l y mayores que f4, la seal no ser atenuada de f l a f2, la atenuacin ser pequea (en funcin del parmetro passband ripple P l), mientras que de f2 a f3 la atenuacin ser m xima (en funcin del parm etro PO Stopband ripple), para volver a ser m nim a de f3 a f4 y prcticam ente nula a partir de f4. A s los parm etros que se seleccionan en este ejem plo sern los siguientes: Scimpling frecuency: En la parte superior de la Figura A l.7. se comprueba que la frecuencia de muestreo de la seal original es de 44100 Hz. Stopband Frecuencies: Ser un rango entorno a la frecuencia localizada, desde 4800Hz has ta 5000Hz. Estas frecuencias se vern muy atenuadas.

188

dsPIC. DISEO PRCTICO DE APLICACIONES

Passband frecuencies : Contendr un rango de frecuencias que abarque a las frecuencias Stop band frecuencies, donde empezar a funcionar el filtro y cuya atenuacin (a excepcin de la banda eliminada) ser definida por el parmetro Passband Ripple. Para definirlo, se debe lle gar a un compromiso de forma que la complejidad del filtro no sea elevada (orden elevado). Para dicho rango, elegiremos las frecuencias desde 4000 Hz hasta los 5600 Hz. Passband Ripple: 0.1 dB. Con este valor y mediante la frmula logartmica explicada con an terioridad se obtiene aproximadamente un 98% de la seal original. Stopband Ripple : 50 dB. Este parmetro nos indica que obtendremos una cien milsima parte de la seal original, es decir prcticamente nada, entre las frecuencias que deseamos eliminar.

Un resumen de los parmetros comentados se presenta en la Figura A1.10.

fc B a n d s to p

Filter

mm
|5EOO 5000

Filter Specicalicn Input Sampling Frequency. Passband Frequencies: Stopband Frequencies: Passband Ripple (dB) Stopband Ripple (d3> Next | 44100 (4000 4800 |o 1 [50 Help Cancel

Figura A^AO. Parmetros del filtro. Al pulsar Next sobre la pantalla representada en la Figura A 1.10, el programa elegir el mejor pa rmetro para establecer el orden del filtro. En este caso, Elliptic 8. Al aumentar el parmetro Stop band ripple. por ejemplo a 80 dB, para obtener una atenuacin todava mayor en las frecuencias que se quieren eliminar, el clculo del filtro requerira un orden mayor. La herramienta dsPIC Fd Lite no permite el clculo de filtros de orden superior a 8, para lo cual es necesaria la versin ampliada del programa. (Figura A 1.11.)

HR Analog Filter Orde# Estimates:

C C C

Butteiwoith T schebjischeff Inverse Tscbebyscheff

14 10 10

d - E p tic j
C
Bessel

8
14

Enter Desired Filter Order (optional}

Next

Prev

Help

Cancel

Figura A1.11 .Seleccin del orden del filtro.

APLICACIN 1: DISEANDO FILTROS

189

Tras pulsar de nuevo el botn Next, se obtiene el resultado representado en la Figura Al .12.

/ j, d s P IC FO L it e

Figura A1.12. Representacin grfica de las caractersticas del filtro.

Los lectores familiarizados con el tratamiento digital de seales, apreciarn en la Figura A l. 12 una serie de grficas que analizan las caractersticas del filtro diseado. Conseguir estas grficas me diante el programa dsPIC Fd Lite, ha sido realmente sencillo. A modo de ejemplo, cabe destacar pa ra los lectores no familiarizados con este tipo de grficos que el grfico titulado Pole/Zero Plot muestra la estabilidad del filtro. Si todos los polos y ceros se encuentran dentro del crculo unitario, el filtro ser estable. A continuacin, el programa puede exportar los datos del filtro para poder utilizarlos ms ade lante junto con la seal original. La realizacin de este filtro ha supuesto el clculo de una serie de coeficientes utilizados en la frmula de filtrado. Para obtenerlos, el programa dispone del men Output -> Create File r Coeficient File... en el que se genera el fichero coeficientes.flt dentro la carpe ta Mis Documentos. (Figura A 1.13.)

Output Codegen Window Plot Control ... Snap to Grid Quantization ... Create Specification File ,.. Create Filter Coefficient File ... Figura A l A 3. Generacin del fichero de coeficientes.

190

dsPIC. DISEO PRCTICO DE APLICACIONES

A l .6. GENERANDO LA SEAL SIN R U ID O

Mediante la herramienta dsPICworks puede comprobarse si el filtro diseado cumple con la funcin especificada. Aplicando el filtro diseado a la seal original se obtiene la seal de salida filtrada. Y si todos los supuestos han sido correctos, debera obtenerse una seal sin ese molesto pitido que no permite escuchar con comodidad el mensaje transmitido. En pasos anteriores se haba creado el fi chero mensaje con ruido.tim que no era ms que el resultado de importar el sonido original .WAV al formato .TIM con el que trabaja la herramienta dsPICworks. Para aplicar el filtro mediante dsPlC w orks se utiliza la opcin del filtrado m ostrada en el men D SP -> Signal Filtering. Al ha cerlo, aparecer en pantalla una ventana anloga a la de la- Figura A l . 14.
Apply dsPIC l D I ilter to Signal [x j

F i t Cwfficisnt Fib

j:

cocterte

irfiUL x2fn)
oi/oU vM

menjots oontuiooti .
f7 WT3aje sn andafc

.... Yfzl-HfzrXfz) wheift H|rl k ih Itawfei luraton el Ihe fliet ---------------------------------------------------- 1


Hdp I . - OK I Cancel |

Figura A1.14.Aplicacin del filtro a la seal original. Mediante el botn Filter Coefficient File , se selecciona el fichero de coeficientes generado en el apartado anterior, guardado en la carpeta Mis Documentos y denominado coeficientes.flt. Mediante el botn input: x2(n J, se selecciona la seal de entrada en formato TIM, guardada en pasos anterio res en la carpeta M is Documentos y denominada m ensaje con ruido.tim. Usando el botn output: y(n), se selecciona el fichero que contendr la seal filtrada en formato TIM que pasar a denomi narse mensaje sin ruido.tim y ser guardado en la carpeta Mis Documentos. Por ultimo, al pulsar OK aparecer en pantalla un nuevo grfico de la seal. Figura A 1.15.

Figura A1 AS.La seal original filtrada.

APLICACIN 1: DISEANDO FILTROS

191

Al comparar la seal original, Figura A l . 14, y la seal original filtrada, Figura A L 15, se obser va un cambio sustancial entre ambas. Pero para ver si realmente se ha alcanzado el objetivo, se pro cede a convertir la seal a formato de Windows WAV para reproducirla por los altavoces del orde nador y verificar definitivamente que carece del ruido original. Para poder escucharla, se pasa del formato de trabajo del dsPTCworks, TIM, a formato WAV. Desde el men File -> Expon File, se indica el formato al que se desea exportar la seal (selec cionando en la opcin E xpon File Fonnal el formato Windows Wave Format( 16 bit)) y seleccionando la carpeta destino Mis Documentos , el nombre del fichero ser mensaje sin ruido.wav. (Figura A l. 16.)
, fxport File

Sajfce Fie

Detmeritt Fie

mensaje h nidccwa.

E x p a l F e T y p e -

Erxxl Fite Foimo Windows V/AVE file (8-bfc) f " Add Assembter Directives

< True Domain Fite C r Frequency Domain Fie QEDeignFIR Filer Ffe

Hefc

O K

Cancel

Figura A l .16. Exportando la seal a formato .WAV.

Al pulsar la tecla OK, el programa generar el archivo mensaje sin ruido.wav ; y al reproducirse en el ordenador se podr or la original sin el ruido molesto. Lo conseguimos! Otra manera de ver el resultado sera analizando la seal filtrada en el dominio de las frecuen cias aplicndo tambin la Transformada Rpida de Fourier. Se atreve? Pero, qu se ha conseguido? Qu tiene que ver esto con la programacin de los dsPIC? Parece obvio que estas herramientas pueden resultar tiles para el tratamiento digital de seales, lo que no es tan obvio es cmo puede beneficiarnos en la programacin de los dsPTC. Cmo se po dra programar este filtro en un dsPIC? Muy sencillo, el programa dsPIC Fd Lite genera varias sa lidas para programar el dsPTC con el mismo filtro utilizado. Existen varias posibilidades. La primera opcin consiste en generar el programa en lenguaje C. Con un clic de ratn, el programa dsPIC Fd Lite, generar el cdigo en C para el dsPIC. Esta opcin se encuentra disponible en el men Qodegen -> C Code ... (Figura A 1.17.)

Figura A l. 17 . Opciones de generacin de cdigo.

Al seleccionar esta opcin del men, el programa generar un fichero en lenguaje C, ejecutable desde el entorno de programacin MPLAB IDE.

192

dsPIC. DISEO PRCTICO DE APLICACIONES

El cdigo generado consiste en un programa que debe recibir 2 parmetros, uno de entrada, el fichero de la seal original y otro de salida, el fichero a generar. Si se trabajase con un dsPIC en un circuito real, se debera cambiar la parte del programa que lee los datos del fichero de entrada por una conversin analgico a digital de la seal de entrada y la parte de la salida por una conversin digital a analgico.

#include "qed_filt.c" #include <stdio.h> #include <string.h> #include <stdlib.h> #ineJude <math.h> #define INSZ1 1000 #define OUTSZl L000 static float x[INSZ 1], yfOUTSZ 1];

int main(int argc. char *argv[J) { int i, in_count, file_status, error; FILE *fin; /* input file of samples */ FILE *fout; /* output file of filtered samples *7 fprintf (stderr," ***** start filter test *****\n"); fprintf (stderr," this program accepts 0,1 or 2 command line arguments\n"); fprintf (stderr," the first argument is the filename of the input file\n"); fprintf (stderr," the second argument is the filename of the outpt file\n"); fprintf (stderr, if there arc 0 arguments, in and out is respeetivelyW'); fprintf (stderr," stdin and stdout\nM ); fprintf (stderr," if only one argument is specified, output is stdout\nH ); fprintf (stderr," if input is stdin rather than a filefscanf expects in\n"); fprintf (stderr," from the console which may piped in or enter directly\n"); fin = stdin; fout = stdout; error = 0; if (argc == 1) { fprintf(stden\" ***** waiting for input }' ' if (argc >= 2) { fin = fopen (argv[l], "r"); if (fin == NULL) { fprintf(stderr/V n error - Cannot open file %s for input\n", argvf I ]); error = 1; ) 1 if (argc >=3) { fout = fopen (argv[2], "w"); if (foul = NULL) { fprintf(stderr,1 \n eixor - Cannot open file %s for outputVn", argv[2]); error = 1;

APLICACIN 1: DISEANDO FILTROS

193

if (error) { fprintl (stden\" ***** end filter test *****\n");

init_biquad_float (&IIR_filtro); do { get input samples */ for (in_count = 0; in_count < INSZ1; ineount++) { file_status = fscanf(fin.,% fr,&x[in_countl); if (file.status != 1) break; /* filter samples if (in_count == 0) break; II R_fi ltro.fi lter( x, y, iri_count, &IIR_filtro): for (i = 0: i < in_count; i++) fpri n t f (fout,1 1 %f\n" ,y[i]); } while (fife, status == 1); fciose (fin); fclose (fout); fprintffstdcrr," ***** end filter test *****\nn); return (1); #endif Listado A2-1. Filtrado de la seal en lenguaje C. Una segunda opcin es generar un fichero con el programa en lenguaje ensamblador. Tambin puede llevarse a cabo mediante la opcin del men Coclegen -> Microchip -> dsPIC30. Desde esta ventana se puede seleccionar el espacio donde guardar los coeficientes del filtro en el dsPIC (en el propio programa o en la memoria del dispositivo), si se incluyen los ficheros en len guaje C de cabecera y ejemplo, etc. Hl tener activada la casilla de Use General Subroutine implica que al proyecto hay que aadirle dicha rutina. Existen 3 tipos de subrutinas principales que se encuentran en la caipeta de instalacin del programa dsPCFd y se debe elegir una en funcin del filtro utilizado:

Fir Filter, s HRT Filter.s URCJilter.s

Para filtros FIR Para filtros IIR Transpuestos Para filtros IIR Cannicos

Mediante la activacin de la opcin CWrapper se generarn 3 ficheros, un fichero .c, otro .cmd y un ltimo .bat para poder simularlo desde la lnea de comandos. (Figura A l.18.)

194

dsPIC. DISEO PRCTICO DE APLICACIONES

/fc. dsPIC30 Code G eneration Options


Source File Gene/ation < |Use General Subrotiiriei C Support Fies

j r

C Header Re and Sample Calina Sequence{.h)

Coefficient Space Selection

< * X Data Space C


Piogram Space

Simulator Files fot Impulse Response Calculation r C Wrapper

OK

HeSp

Cancel

Figura A l. Vi.Generando el cdigo fuente del filtro en ensamblador.

El fichero generado se trata de un fichero con los coeficientes y con un ejemplo de llamada a la funcin de filtrado. Este ejemplo se encuentra comentado en el programa y debe ser copiado y pe gado en el programa cuantas veces se necesite.

.equ ppNumScctions, 4

; Allocate and initialize filter coefficients ; These coefficients have been designed for use in the Transpose filter only .section .xdata ppCoefs: .hword 0x334D .hword OxBODD .hword 0x5218 .hword 0x334D .hword OxCEl 1 .hword 0x4029 .hword 0x9AC8 .hword 0x606A .hword 0x4029 hword 0xCB9C .hword 0x2E39 .hword 0xB9DF .hword 0x58FC .hword 0x2E39 .hword 0xC2F9 .hword 0x29A6 .hword 0xBD5B .hword 0x68CA .hword 0x29A6 .hword 0xC25A

b( l,0)/2 b( 1,1)0 a( 1,1 )/2 b( 1,2)/2 a( L2)/2 b( 2.0)/2 b( 2,l)/2 a( 2 y!)/2 b( 22)12 a( 2,2)12 b( 3,0)/2 b(3,n/2 a( 3,1 )/2 b( 3,2)/2 a( 3,2)/2 b( 4,0)/2 b( 4,1 )/2 a(4.1)/2 b( 4,2)/2 a( 4,2)/2

APUCACIN 1: DISENANDO FILTROS

195

; Allocate stales buffers in (uninitialized) Y data space .section iybss, "bn ppStatesl ; .space ppNumSections*2 ppStates2: .spacc ppNumSections*2

: Allocate and initialize filter structure .section .data .global _ppFilter _ppFilter: .hword ppNumSections-1 .hvvord ppCoefs .hword OxFFOO .hword ppStatesl .hword ppStatcs2 .hword OxFFFF

; Sample assembly language calling program ; The following declarations can be cut and pasted as needed into a program ; .extern _JLRTransposeFi 1 terlnit .extern JBlockHRTransposeFilter ; .extern _ppFilter
*

.section

.bss

? ; The input and output buffers can be made any desired size ; the value 40 is just an example - however, one must ensure ; lhat the output buffer is at least as long as the number of samples - : to be filtered (parameter 4) ;input: .spaee40 output; .space40 ; .text J v v y l- v X v : .
1

; This code can be copied and pasted as needed into a program

; Set up pointers to access input samples, filter taps, delay line and ; output samples. mov #_ppFilter, WO ; Initalize WO to filter struct ; call _NRTransposeFilterInit ; call this function once ; The next 4 instructions arc required prior to each subroutine call

196

dsPIC. DISEO PRCTICO DE APLICACIONES

; to JBlocklIRTransposeFilter ; mov #_ppFilter, WO ; Initali/e WO to filter structure rt ; mov #input, W1 ; Initalize W1 to input buffer ; mov #output, W2 ; Initali/.e W2 to output buffer mov #20, W3 : Initialize W3 number of out samples ; call _BlockIIRTransposeFiIter ; call as many times as hended

Listado A2-2. Filtrado de la seal en lenguaje ensamblador.

La ltima opcin es generar un fichero con los coeficientes, para incluirlos directamente en el programa.

AUTOEVALUACION Conceptos clave de este captulo

1. Qu es un fittro?Para qu sirve? Cite ejemplos de aplicacin. 2. Dfina los cuatro tipos de filtros esenciales que nos permite disear la herramienta dsPIC Fd Lite. 3. En el ejemplo propuesto, para qu sirven los parmetros Stopband Ripple (dB) y Pasbband Ripple (dB)? 4. Para qu se ha usado la Transformada Rpida de Fourier? 5. En qu lenguajes se puede generar el programa de filtrado?

SM . '

Ejercicio: Un cambio en el planteamiento


# Se propone ai lector tratar de resolver el problema inverso. En vez de obtener la seal de voz, ex traer el ruido de la seal. En este caso, el tipo de filtro a disear no ser un filtro de banda-eliminada, sino uno de pasa-ban da. Este filtro, al contrario que el anterior, atena todas las frecuencias, excepto las de una deter minada banda o rango.

A2.1. IN T R O D U C C I N

A lo largo del presente captulo se analizan las cualidades del Entorno Integrado de Desarrollo (MPLAB IDE) de M icrochip. Este entorno permite, desde editar los programas fuente, hasta ver su ejecucin paso a paso en el simulador, grabarlo en la memoria del dsPIC a travs de herra mientas como el ICD 2 e incluso depurarlo paso a paso en el circuito real. Este tema se centra en el proceso de creacin de un program a en lenguaje ensam blador y en lenguaje C. La versin analizada del MPLAB IDE es la 7.30 que, an sabiendo que en un futuro se que dar obsoleta y surgirn nuevas versiones, seguro m antendr muchas similitudes con ellas.

A2.2. TRABAJANDO C O N PROYECTOS

Para facilitar enorm em ente la tarea del program ador resulta altamente recom endable al trabajar con el entorno de desarrollo MPLAB IDE, trabajar con proyectos . Los proyectos incluyen varios ficheros. Unos se encargan de la inicializacin del controlador, definicin de las distintas reas de memoria, establecim iento de etiquetas para atender interrup ciones, Reset, program a principal, etc. Otros ficheros contienen los nombres simblicos de los registros, direcciones de memoria, etc. Finalm ente los proyectos contienen ficheros con los program as fuente. Esta divisin en varios ficheros, y los ya incluidos en el entorno M PLAB IDE, sim plifica el desarrollo de aplicaciones.

A2.3. U N VISTAZO RPIDO

El MPLAB IDE es un entorno MDI con m ltiples ventanas desde el que se confeccionan, depu ran, monitorizan y se graban los proyectos. (Figura A 2 .1.)
197

198

dsPIC. DISEO PRCTICO DE APLICACIONES


M PI AO D C v7.30
fVw Ecfc Vm * P ro j*! Ti-v v i i j I i d i 4 * i C iW i;r Wrafctv

& :&

I : e? a i

-J $

SSl

C h ecksum : 0xb709

> 2i

C 0 0 0 c a o 2
COOi COO 5 coot COOC GOOI

B in a ry

3 ygto ol Jfcunc

00300000 00000000
00990000 0 9 9 :0 0 0 0 OD9GOOOO 002*30000 03000003 ( 0 0 0 0 9 0 020000K 5 00000000

V R 02
P Z 0 3 VRSCS

1 T R 0 0 mci
H K G 4

n n ru
0010
0012 001-t U 016 0016 001C

i wsif rt! cbjxtrfcj HyFte


s urta" Sep

oosooooo ecooooco
09930000 00000003 o 9 :c o o o o c o o o o o m

oooooooo ccooooco

0000
oooo oooo oooo
oooo
0009

nniJi ooir
0020 0022 002-1 002 6 0020 002* OO C 002 Z 0030 0032 003-1 0036 OOJt 003 A 003 C 003 E o o -i: on-i-i 0041

0 0 0 0 nono
oooo

0 9 2 0 0 0 0 0 COOOODZC o :-:o o oo o 930000:0 cccuoooo Qaoooooo

iDiiuM *p3ueui'j.

ocoooooo cooooooo
o=oaoooo caooooco o :co o o o o cooooccg 0 9 3 0 0 0 0 0 COOOOCCO

DCQOOOOO COOOOCCO

void fc:nu;aZlo;iat lung date! . void tn.Z10i.eXir ckractar. ;


v o id _a^rllv^e v o id . .ltttftrru p c

/ / fu n c tio M u n i V u xia ^la a

vh Clv&ui

0 0 0 0 0 0 coooocco

oooo oooo
0009 0009

cooooooo ooooouoo raaooooo aooooooo


ZCOOOOOD :C 0 0 0 0 0 3 COOOOOOO cooooooo cooooooo G 0 00 00 09 'JUOOOOOO COOODlOO coooocoo 00000300 ooooocoo oooooaoo 00000300 00000300

ccaooooo coooocco :c a o o o o o coooocoo

: : .in te r r u p t ! : _ACCXnc#rn^it:void _ATCIierrv5C*'*>id:

oooo
0009 0009 0009 0009

v n lil

I
5x6030.

oonr.
0009 0099 0099 00 009:

nonooonr, nooonnoo
00 00 00 09 00009300 GOOOOOOC 0 0 0 9 9 3 0 0 OOOOOOCC 0 0 0 0 9 3 0 0 00 0 0 0 0 9 : 00099300 00 0 0 0 0 9 2 00091000

0 0 4 1

oooooooc oooocooo

oo?:

Asrcev?.

Figura A2.1 . El entorno de desarrollo MP LA IDE.

El entorno dispone de un men clsico en la parte superior de la pantalla desde donde acceder a todas las funciones del mismo. Los mens File, Edit, Window y Help no tienen ninguna caracterstica que los haga especialmente destacables. No as el men View, que incluye caractersticas propias y especficas. (Figura A2.2.)

Project Project Output

Debugger

Programmer

Tools

Visual Inltiateer

Con

t'
1 Standard 2 Project Manager 3 Checksum < / 4 MPLAB1CD 2 Program Toofoar

1 Disassembly Listing
2 H a rd w a re Stack

3 Program Memory 4 File Registers 5 EEPROM 6 Memory Usage Gauge

O O O O O O O O 00000000
OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO

7 LCD Pxel
8 Locals 9 Watch 10 Call Stack 11 Special Function Registers

Figura A2.2. F.I men View.

Desde el men View, adems de configurar las barras de herramientas deseadas se puede acce der a la visualizacin de partes fundamentales del proyecto, como la memoria del programa, la me moria EEPROM, un grfico de uso de la memoria, una ventana para aadir datos que se deseen

APLICACIN 2: EL ENTORNO DE DESARROLLO MPLAB IDE

199

moniLorizar durante la ejecucin del programa, etc. Hay que destacar que muchos de los mens que se describen, disponen de ms o menos funcionalidades dependiendo de la accin desarrollada en cada momento. As, el men Debugger, cambia sustancialmente al estar ejecutndose una Depu racin del programa. Igualmente tambin cambia el men View. El men Project es fundamental para la realizacin de las aplicaciones. Desde l se comienza a crear los proyectos, se compilan, se construyen y se les aaden los ficheros necesarios para su per fecto funcionamiento. (Figura A2.3.)

Debugger Project Wizard... New... Open... Close Set Active Project Qtfckbuild Clean Build All Make Build Options...

Programmer

Tools

Visual

; 1 i Ctrl+F10 FIO f

Find in Project Files... Save Project Save Project As... Add Files to Project... Add New File to Project... Remove File From Project Select Language Toolsuite... Set Language Tool Locations... Version Control...

> 1 I 1

)
)

>1
; < i j Ii

Figura A2.3. El men Project.

El men D ebugger no se visualiza si no est seleccionada la herram ienta M PLAB SIM, tal y com o se muestra en la Figura A2.4. Esto se debe a que no tiene seleccionado la opcin Select Tool->3 MPLAB SIM. Bajo esta opcin del men se depuran los programas ejecutndolos a travs de distintas herram ientas como el MPLAB ICD2 o el sim ulador MPLAB SIM. El program a tiene la posibilidad de ejecutar paso a paso el cdigo, poner puntos de ruptura (breakpoints), resetear la ap licaci n , etc. En el cap tu lo sig u ien te se an aliza ms deten id am en te esta herram ienta. Bajo el epgrafe Programmer, podr seleccionarse el programador que se desee utilizar para gra bar el programa en el dsPIC. En caso de utilizar la tarjeta P1C School, no se necesitar utilizar esta opcin ya que utiliza un software distinto para la grabacin. En el men Tools se puede acceder a varias herramientas muy interesantes incluidas en esta ver sin del MPLAB IDE. Cabe destacar la herramienta Visual Initializer, que es especialmente til de bido a la com plejidad que puede suponer configurar al dsPIC para realizar algn tipo de tarea es pecfica. Mediante esta herramienta se configuraran los perifricos del dsPIC, desde las puertas de entradas y salidas hasta el Motor DSP con un solo clic de ratn. La herramienta MPLAB Macros permite grabar una serie de acciones realizadas con asiduidad en el entorno MPLAB IDE para lue go poder repetir esas acciones en cualquier momento pulsando una sola tecla.

200

dsPIC. DISEO PRCTICO DE APLICACIONES

Programmer I Select Tool Clear Memory Run Animate Halt Step Into Step Over Step Out Reset Breakpoints... StopWatch Stimulus Controller SCL Generator Profile Refresh PM Settings... F2 F5 F7 F8 F9

Tools

Visual Initializer None

Conl

1M PLAB ICD 2
2 MPLAB ICE 4000 3 MPLAB SIM

Figura A2.4. El men Debugger con el Simulador MPLAB SIM seleccionado.

La opcin del men Configure permite configurar distintas opciones del programa, como por ejemplo, el que cada vez que se construye un proyecto ste se salve en el disco, o asignar combina ciones de teclas para distintas acciones del entorno, etc. Puede resultar interesante la opcin Confi gure bajo la pestaa HotKeys para revisar las combinaciones y asignaciones de teclas a funciones del IDE para m em orizar aquellas que puedan ser de inters. (Figura A2.5.)
| M PLAB ID Ev7.30
D*Krw pr-<yrr ! ! W 9>*' IriH w f t ; c3 M f | d

H* 4 Hi V V py D

Cvft^IC WTtow *30


#>
C hednum : 0x67M

O H I

(g t , >

G E $ I#

t- i i f t f f
m i f,~.| wnrr.-

3 ] | -

*.

coco
M CI ooe*

raen
C0C6 COC.

UUVJ 030D 030} UJL'J Q3CO

o O O O u o

ixio o a o o c C0C03C0C COC03COO C0G03C03 Ronixinnn coa coe oj

n ro coo oo jOJLUJLJ 3C0C03C0 3C0G03C0 oconm co acuuixiuu

V P E O T
VR KC 1
3PEC2 TPZCi egrr.-:

spr
W RUI

P E 0 3
.

Uecnory
1 i 3 t 5 C OCOCO 0 0 03 2 OWH OLOJt 0CO36 03031 040100 0C03CO 0C030A aoDSOA O.-LA 0 3 0 :-Ci o t o 0x0 00 1 0 3 r s _P e9-Jlc In te r c u p ~ D f iiu lt J n c p r r u p ; ta m iC lD U ic u p t I 'c a u lc liit c t jp t j t . : n r .* r r a p r ~:-cXauC :nLn> rupt. > I l a u : U n C C it '- ;p l

7
__________ e 0 10

nnme
U'JLXJ: 03010 Q3C 12

03010.
o ju js a

0003 OA Q3C33JL

0-xox'A_e\\i'Kfcc*] Kj* y^e-;, f


e'* ri ;vTonComtJ( f r d n f t n 'M ' U e ' K O i - ttw tilM H to *H K B S Q

A SC II -rrroz irrcin v p fC fl -FPC33 -FFC43 i r r r .y i


tttt

rrrr rrrr TFTT TFTT


tttt

ttft tttt

fttf tttt

tttt tftt

tftt tttt

ftft fttt

tftf tttt

tftf

rrrr FTFT FTTT


fttt

rr r r FS T F TT T T
tttt

rrrr
tfff

TFFT
tttt

rrrr trtr FTFT


tttt

rrrr rrrr FTFF


tttt

rrrr rrrr TFTF


tttt

TTTT rrrr rrrr SFFF


tttt

Figura A2.5. Distintas ventanas del MPLAB IDE.

* En cuanto a las ventanas disponibles dentro del IDE, cabe destacar las num eradas en la Figura A2.5.:

APLICACIN 2: EL ENTORNO DE DESARROLLO MPLAB IDE

201

1. Ventana del proyecto. Visualiza los ficheros incluidos en el proyecto y la estructura del mismo. 2. Ventana de registros. Muestra el valor de los registros del dsPIC, tanto en hexadecimal como en ASCII. Desde esta ventana se puede tambin alterar su valor. Ventana de inspecciones. Gestiona los registros y variables a monitorizar durante la ejecucin del 4. Editor de cdigo con resaltado de sintaxis. 5. Ventana de resultados o salida. Muestra los resultados de la compilacin y ensamblado de los pro gramas, mensa/es de salida del simulador, etctera. 6. Memoria del programa. Permite examinar la memoria de cdigo con el programa que se est trabajando. 7. Visualtiacin de la EEPROM. Permite observar y modificar ios datos a grabar en la EEPROM del dsPIC. . 8. Grfico de la memoria utilizada, tanto la de programa como la de datos.

A 2 .4 . PRIMER PROYECTO EN E N S A M B LA D O R

Se aborda a continuacin un primer proyecto para dsPIC. En primer lugar se debe elegir el modelo de dsPIC a utilizar ya que dependiendo del elegido, variarn las caractersticas. En este primer ejem plo no resulta crucial el modelo elegido ya que apenas se van utilizar los recursos complementarios del dsPIC. Se limita a realizar operaciones matemticas para las cuales cualquier modelo de dsPIC sirve. Sin embargo, para usar el mismo en todas las prcticas de la segunda y tercera parte se ha ele gido el dsPIC30F40l 3. En primer lugar se debe crear el proyecto. Es importante seguir todos los pasos, explicados a continuacin con gran precisin, ya que de lo contrario puede resultar complicado llegar a compi lar el proyecto. Tras iniciar el MPLAB IDE, mediante la opcin Project -> Project Wizard se iniciar un asis tente que guiar al autor en la tarea de creacin de su proyecto. Tras pulsar el boln Siguiente en la primera pantalla del asistente se elige el modelo que en este caso es el dsPIC30F4013. A continuacin pulsamos el botn Siguiente. (Figura A2.6.)

P ro je c t W iz a rd Step One: Select a devee

Dcvicc:

Ctfs

|| Siguiente > |

Cancelar

Ayuda

Figura A2.6. Seleccin del tipo de dsPIC..

202

dsPIC. DISEO PRCTICO DE APLICACIONES

Una vez seleccionado el modelo de dsPIC, en el paso 2 se seleccionan las herramientas con las que compilar y linkar el proyecto. Dependiendo del lenguaje en el que se desee construir el proyec to se deber realizar una seleccin u otra. En prim er lugar, se detalla la creacin de un proyecto en ensamblador y, ms tarde, el mismo proyecto ser desarrollado en el lenguaje C. Slo la prim era vez que se accede al men Project Wizard se debe configurar la herramienta a utilizar e indicar dnde se encuentran los programas necesarios. Para ello, en la lista desplegablc A c tive Toolsuit debe seleccionarse Microchip ASM 30 Toolsuile, caso de querer desarrollar el proyec to en ensamblador. Al hacerlo, se observar cmo en la lista Toolsuite Contents , aparecen 3 lineas correspondientes a las herramientas necesarias para construir el proyecto con el ASM 30 Toolsuite, pero con un aspa roja a la izquierda que significa que el MPLAB IDE desconoce la ubicacin de los mismos. Es necesario indicar al MPLAB IDE dnde se encuentran dichas aplicaciones. Para ello, seleccionando cada una de estas 3 lneas y mediante el botn Browse se eligen las rutas adecuadas segn la tabla siguiente.

Lnea
MPLAB ASM30 Assembler MPLAB I.INK30 O bject l inker LIB30 Archiver

Ubicacin
C:\Archivos de programaNMicrochipYMPLAB ASM30 Suitc\bin\pic3Q-as.exe C:\Archivos de program a\M icrochip\M PLAB ASM30 Suite\bin\pic30-ld.exe C:\Archivos de program a\M icrochip\M PLAB ASM30 Suite\bin\pic30-ar.exe

Tras finalizar este paso, debera obtenerse un resultado como el de la Figura A2.7. Luego, me diante el botn Siguiente se accede a la siguiente pantalla del asistente.

P ro je c t W izard Step Two:


Select 3 language todsufce

Active T oolsuiteT oolaiit Cotant

Microchip ASM30 T ooteuite

MPLAB A SM 30 Assembler (pc30-es.exfc|

MPLAB LINK.30 Obsct Lnker (pic30-ldexe) LIB3 Axchivcr fpc30 ar.exe)

Location
iC M rch ivo s deprograma^MicrocKp'.MFLAB ASW3Suite'vbn\pc30-as | Browse...

Help! My Suite Isnt Listed!

Show all installed toolsuites

< Atrs

S ig u ie re >

C a ie a t

Ayuda

Figura A2.7. Seleccin del lenguaje a utilizar.

Seleccionado el lenguaje de programacin, se debe dotar de un nombre al proyecto y elegir la ubicacin donde alm acenar el mismo. En este ejem plo, se llamar suma al proyecto y se guarda r en el lugar que se desee del disco duro (es recom endable crear una carpeta especfica para este proyecto). Una vez nombrado el proyecto y seleccionada la carpeta se avanza mediante el botn Siguiente. (Figura A2.8.)

APLICACIN 2: EL ENTORNO DE DESARROLLO MPI.AB IDF

203

P ro je c t W ai d

Step hiee:
Nameyour pioject

Project Name

Prcject Direccxy i : !C:\e;emplos\suma

< Atrs

[[ Siguente> ;] (

Caricela'

Ayudo

Figura A2.8. Asignando nombre y ubicacin al proyecto. En la siguiente pantalla se seleccionan los ficheros a incluir en el proyecto. Para facilitar la ta rca de la inicial izacin y preparacin del proyecto, el MPLAB ASM30 Suite, dispone de varios fi cheros que al incluirlos en el proyecto permiten trabajar con nombres simblicos, e indican al linker cul es la organizacin de la memoria del dispositivo en cuestin, genera rutinas automticas de reset, etc. Estos ficheros a aadir, son los siguientes:

F icheros a aadir a n u estro p royecto

C .:\Archivos de programa\M icrochip\M P LAB ASM30 Suite\lib\Crl().s


C:\Archivos de programa\M icrochip\M PLAH ASM30 Suite\lib\C rt1 .$ C :\Archivos de program a\M crodiip\M PLAB ASM30 Suite\$uppori\gid\p30f4013.gld j C:\Archivos de programaXMicrochipXMPLAB ASM30 Sute\suppor\m c\p30f4013.inc

Si se desea profundizar en el contenido de estos ficheros se editan y se lee el cdigo que se en cuentra dentro de los mismos para conocer su contenido. Los dos ltimos archivos variarn en fun cin del modelo de dsPIC empicado. En caso de usar dsPIC3()F2011, se debern seleccionar los ar chivos p30f2011.gld y p30f2011.inc, respectivamente. Resulta muy interesante, que no necesario, marcar con un tic estos 4 ficheros aadidos. Al mar carlos con el tic, estos ficheros se copiarn en la carpeta de destino sealada en el paso anterior y as, en caso de modificarlos, siempre se dispondr de la copia original en la carpeta de la herramienta. Una vez aadidos los 4 ficheros y marcados con el tic correspondiente se accede a la siguiente ventana del asistente mediante el botn Siguiente .(Figura A2.9.) * El asistente presentar un resumen de los pasos dados y al pulsar el botn Finalizar se cerrar accediendo al proyecto. Puede observarse en la ventana del proyecto la inclusin de los dos ficheros crtO.s y crtl.s. Se deben modificar ambos ficheros, pulsando doble clic sobre ellos y cambiar las siguientes lneas, de forma que el modelo de dsPIC pase de ser el dsPIC30F2010 a ser el dsPIC30F4013.

204

dsPIC. DISEO PRCTICO DE APLICACIONES

P ro je c t W iz a rd S le p Foui: Add ary ewstirvg liles to your piopct

g ) p303010.hc g) ) di g) g) g) i) : g) g) p30f3tm.nc p30f3012.nc p30(3013.ric p30f3014.inc p30f4011.inc P3Q4012inc p30f4013.inc P30f5011.ine p30f50l3 inc

3i

Add

0 0 0

p30M013 ine I C:\ArcKvos de p o p30f4013. gld I C:\Archivos de pro crtO s I C:\ejemptos\surrw\crtO $

&

Remove

B ic r tl.* ! C:Vejempk\$uma\crtl.s

21

p30f5015.inc . flh p30f5016.inc

m\

Check the box lo copy Iba fe lo the projec dkectory. Cick the fitename le edrt the ame o! Ihe local copy.

<Atrs

|t Siguiente > j [

Cancelar

Ayuda

Figura A2.9. Aadiendo los ficheros necesarios al proyecto. Es decir, se deben cambiar las lneas equ 30F2010, 1 .include "p30f2010.inc" por las siguientes .equ__30F413, i .include M p30f4013.inc" y a continuacin guardar ambos ficheros. Tambin es necesario indicar al entorno, el directorio de los ficheros include. Para ello, a travs del men Project -> Build Options -> Project, y dentro de la pes taa General, en el cuadro Include Path,($INCDIR): se debe pulsar el botn Browse y elegir la ruta C:\Anchivos de programa\Microchip\MPLAB ASM 30 Suite\SupporAinc\ La base para empezar el proyecto ya est creada. Para empezar a escribir este primer programa, la opcin File -> New arran ca al editor de texto del entorno. En primer lugar, resulta interesante guardar el fichero para indicar le al entorno que se trata de un archivo fuente y as poder disfrutar del resaltado de sintaxis mientras se escribe el cdigo. De no hacerlo as, hasta que no se salve el programa, el texto del mismo no re saltar palabras clave, directivas, etc. Pulsando File-> Save as... se guarda el programa con el nom bre suma.s (ntese que se debe indicar la extensin del archivo). Al teclear el cdigo del programa los distintos elementos del mismo tomarn distintos colores en funcin de sus caractersticas. El listado de este prim er programa es el siguiente: ; Programa Ejemplo 1.s ; Creacin de nmeros impares

APLICACIN 2: EL ENTORNO DE DESARROLLO MPLA3 IDE

205

.text _rnain: mov #0x0001, WO mov #0x0002,W

Inicio, del cdigo de programa ;Etiqueta de inicio de programa Movemos un literal a W0 ;Movemos un 2 al registro W1 iejamos

Listado A2.1. Programa suma en ensamblador.

Si se compilara el programa mediante la opcin P ro je ct -> B u ild A ll , el com pilador informara de un error en la ventana de output, como se muestra en la Figura A2.10.
Output {luid Vetacn Cqtitol'i Frri ir. F ii !; MPL6B SIMi________________ _____________________________ __________

Ge an: Deieling nlermedidiy and oulputfiles. O sar.:O eieieclila 'G.\Ejemplo$\8uma\cri0.o". Gear,: Delelec: lila ,G.'\Ejemplos\sut,na\cm o". O san: D eleietilils ,C:\ejemp!os\sume\suma.o, Clean: Delelet lile 'sume.cof. C e an: D elded filo sume.hex' Ce an: Dore. Executing: "C\*5hivo3 d e pragromoVvlicrGchipvMPLAB C3G\bin\pic30-es.exe" p-30F?0 .0 'oO s" -orcrtO o" -g Executing: "C\Archivos d e p r o g r a m a ^ crochipVvIPLAB C30\bin\pic30es.exe" -p-30F2010 *cr.1 .s" -o"crtl o ' -g Executing: "CW rchivos de progrom&WicrochipyviPLAB C30\bin\pic30-ld e<e" "G \E|emplos\suma\crtG.o G:\Ejempl 0 S\Sum 8\crt G: NEjeapios;'--surr.a''.crfcO o ( Libc+Oxc) G ./E je : .p .lo S '''s u n a /p 3 0 f2 0 1 0 i n c u n d e f i n e d jrere r e r .e e t o n a i n G: \E je p lo s -\s u : .a 'v c rtO o ( . l i b c + 0 : o ) ^ / E j e a p l o s / s u n o / p S U t S U l O t n c u n d e f i n e d r e f e r e n c e t.o a i n G. S E jtsu p lo & N su x a N c rtl . o ( . i i b c + 0 x l 4 ) :G: / E j e s r . p l o s / s u n a / c r t l . s . u n d e f i n e d r e f e r e n c e t o ' n a a n ' G: \ E j e n p l o s 'v s i i t t n \ c r t l o ( i ib c + Q x l6 ) : G : /E j e w . p lo e / s u n a / c x ti . s : u n d e f i n e d r e f e r e n c e t o 'm a i n ' DILD FAILED: Sun Oct 02 1231 002005

Figura A 2.10. Resultado de la compilacin del proyecto.

La ltima frase, BUILD FAILED, indica que la compilacin ha fallado. Las 4 filas anteriores in dican el error: undefined referente to m a in \ es decir, que no existe una referencia a main. M ain es la etiqueta de inicio de programa. En el listado del programa s aparece la etiqueta jn a in y sin em bargo el compilador indica que no la encuentra. No se trata de quitar el guin bajo que hay delante de main, sino que no se ha aadido el fichero fuente al proyecto. Al observar la ventana de proyec to, vese la Figura A 2 .11, all no aparece por ningn lado el fichero suma.s.

sum a.m cw
s u m a .m c p G E Source Files crtO.s 1- c r t l . s E Header Files p30f4013.inc

\ O bject Files
i Library Files p 30f4013.gld : O ther Files Linker Scripts

Figura A 2.11. Ventana del proyecto sin incluir el fichero suma.s.

206

dsPIC. DISEO PRCTICO DE APLICACIONES

Para solucionar el error basta con aadir dicho fichero al proyecto. Se eligen las opciones del me n Project->Add Files to Project... y seleccionando el fichero suma.s se corregir el problema. Aho ra al compilar el proyecto mediante Project-> Ruild All dar el resultado deseado, reflejado en la Fi gura A2.12. En la ventana del proyecto, aparece el fichero suma.s. Figura A2.13.

Output
Build Version Control : Find in Files

Executing: "C:\Archivos de programa\Microchip\MPLAB Executing: "CWchivos de programa\Microchip\MPLAB Loaded C:\ejempIos\suma\suma.cof. BUILD SUCCEEDED: Wed May 17 13:04:03 2006

Figura M A I . Resultado satisfactorio de la compilacin.

fc suma.mcp
p-Source Ries

erto.5 erti .s
Header Files
p30f40l3.inc Cbjcct Fies Library Files L in k e r Scripts p30f4013.gld
O h n r Filft

Figura A2A 3 .Inclusin del fichero suma.s en nuestro proyecto.

En la ltima lnea de la Figura A2.12 puede observarse que el resultado de la compilacin ha si do satisfactorio (BUILD SUCCEEDED). Se ha conseguido compilar un primer programa para dsPIC. Pero, qu hace este programa?, qu se ha conseguido? Volvamos sobre el listado del programa.

; Programa Ejemplo I .s ; Creacin de nmeros Las 2 primeras lneas son comentarios. Los comentarios van precedidos siempre por el signo ; (punto y coma). Tras este signo se pueden escribir los comentarios que se quiera hasta el final de la l nea, y que puedan ayudar a identificar el programa y a comprender mejor cul es la lgica del mismo. Observe como se pueden dejar todas las lneas que se desee en blanco y colocar comentarios en cualquier posicin de la lnea. Todo el texto de una lnea a partir del signo punto y coma es ignora do por el compilador. As si se deseara poner un comentario que ocupe ms de una lnea se debera incluir el signo punto y coma en cada una de las lneas.

APLICACIN 2: EL ENTORNO DE DESARROLLO MPLAB IDE

207

La siguiente lnea, se corresponde con una directiva. Una directiva no es una instruccin propia del dsPIC, sino una instruccin para el compilador para que identifique que la etiqueta _main de inicio del programa se encuentra en este fichero fuente. Realmente, el programa no empieza a ejecutarse en la eti queta _main. El programa empieza a ejecutarse en la rutina de Reset. Esa rutina se encuentra en los fi cheros incluidos en el proyecto y, al finalizar la rutina de Reset, se pasa el control a esta etiqueta _main.
.text ;Imcio del codigo de programa
. . . o > ,

La directiva .text indica que a continuacin se va a escribir la parte del programa correspondiente al cdigo principal. El programa podra incluir datos, y para que l compilador distinga si lo que vie ne a continuacin son datos u otro tipo de informacin, se usa la directiva .text. mam: ;Eticjucta d(m cic>de pirograma ? V
........

Esta es la etiqueta de inicio de programa, la siguiente instruccin ser la primera que ejecute el controlador tras atender la rutina de Reset.
MOV #0x000,WG Movemos un literal a W0

La primera instruccin mueve el literal #0x0001 al registro general W0. Para indicar que se tra ta de una constante, se coloca el smbolo almohadilla # delante del nmero a escribir. Ox significa que el nmero est representado en hexadecimal y el valor 0001 representa la constante en hexadecimal. La instruccin M OV mueve el primer operando (fuente) al segundo operando (destino). Es conveniente familiarizarse con la expresin de nmeros en formato hexadecimal ya que al tra bajar con registros y datos de 16 bits, el formato hexadecimal resulta muy cmodo. En la mayora de los ejemplos utilizados se utilizar esta base numrica.
...a -. suma2: .... ....... . . . . . ....

Esta es otra etiqueta a la cual el programa salta frecuentemente. Una etiqueta debe terminar siem pre con el signo de puntuacin dos puntos (:) y no debe coincidir con ninguna palabra reservada del compilador.

MOV #0x0002.WI ADD W0,W 1,W0

;Movemos un 2 al registro W J ;sumamos el registro W0 y W 1 y dejamos ;el resultado en W0

A continuacin el programa mueve un 2 al registro general W l. Y luego suma los registros W0 y W1 y deja el resultado en W0. La instruccin ADD admite varios formatos. En el del ejemplo, su ma el contenido de los dos primeros operandos dejando el resultado en el tercero.
GOTO suma2 ;Repetimos el bucle suma2
.

208

dsPIC. DISEO PRCTICO DE APLICACIONES

Tras realizar la suma, con la instruccin GOTO la ejecucin del programa salta hasta la etique ta sealada suma.2, volviendo a mover 2 al registro W1 y volviendo a realizar la suma de forma in definida.
,end ;Directiva de fin de programa

Por ltimo, la directiva .end, indica el final del programa fuente. Qu es lo que hace el programa? En prim er lugar mueve un 1 al registro WO, despus mueve un 2 al registro W1 y los suma dejando el resultado (3) en el registro WO. Despus salta a la etiqueta suma2 para de nuevo mover un 2 a W1 y sumar ambos registros, obteniendo un 5 en WO y as su cesivamente. Es decir, el programa va generando nmeros impares en el registro WO desde el n mero 1 hasta cul? Los registros tienen una capacidad de almacenamiento de 16 bits, luego el n mero mayor que pueden alcanzar es el nmero #0xFFFF. Y qu pasar al sumar 2 a este nmero? El resultado en WO ser #0x0001. Se produce un acarreo y como el resultado debera ser el #0x10001 que requiere de 17 bits y el registro WO tan slo tiene 16, el resultado queda truncado y en el registro slo nos queda el valor #0x0001. Cmo se puede saber si se ha producido acarreo? Para saber si se ha producido esta circunstancia de desbordamiento hay que exam inar un bit, lla mado de acarreo, situado en el Registro de Estado (SR). Para poder analizar este fenmeno y ver cmo se ejecuta el programa, en el prximo captulo se simular la ejecucin de este programa gra cias a la herramienta MPLAB SiM.

Resumen:

Los siguientes pasos resumen el proceso necesario para la creacin y compilacin de un proyecto:

Crear el proyecto mediante men Project-> Project Wizard... Siguiente Seleccionar el modelo dsP!C30F4013 y pulsar Siguiente Seleccionr Microchip ASM30 Toolsuite de la lista desplegable Active Toolsuite a. Para el MPLAB ASM30 Assembler seleccionar C:\Archivos de programa\ Microchip\MPLAB ASM30 Suite\bin\pic30-as.exe b. Para el MPLAB LINK30 Object Linker seleccionar C:\Archivos de programa\ Microchip\MPLAB ASM30 Suite\bin\pic30-ld.exe c. Para el LIB30 Archiver seleccionar C:\Archivos de programa\Microchip\MPLAB ASM30 Suite\bin\pic30-ar.exe 5; Nombrar el proyecto, suma, y elegir ubicacin. 6. Aadir los siguientes ficheros a la lista de ficheros del proyecto:
F icheros a a ad ir a n u estro p ro y ecto
C:\Archivos de program a\M icrochip\M PI.AB ASM30 $uite\lh\C rl0.s C :\Archivos de programa\M icrochp\MPLAB ASM30 Sute\lib\Crt1.s C:\Archivos de programa\M icrochp\MPI.AB ASM30 Suite\support\gld\p30f4013.gld C :\Archivos de programa\M crochip\MPLAB ASM30 Sute\support\inc\p30f4013.inc

1. 2. 3. 4.

APLICACIN 2: EL ENTORNO DE DESARROLLO MPLAB IDE

209

Marcar estos ficheros con un tic para que se copien en la carpeta del proyecto. (En funcin del dsfW a utilizar se elige un fichero correspondiente al modelo usado: p30f4013.gld y p30f4013.inc.) 7. Finalizar l asistente 8. Modificar los ficheros CrtO.s y C rtl.s con el modelo de dsPIC elegido 9. Indicar al entorno, el directorio de los ficheros include. Para ello, en el men Project -> Build Options -> Project, y dentro de la pestaa General, en el cuadro Include Path,($INCDIR): pulsar el bo tn Browse y elegir la ruta C:\Archivos de program\Microchip\MPLAB ASM30 Suite\Support\inc\. Crear un fichero desde el men FHe-> New y guardarlo en la carpeta del proyecto con el nombre de suma.s (ntese que se debe especificar la extensin .s del archivo) 10. Aadir dicho fichero al proyecto a travs de la opcin Project->Add files to Project.. y seleccionar nuestro fichero fuente suma.s 11. Escribir el programa y compilarlo mediante Project->Build Ail

A pesar de que el lenguaje ensam blador permite el uso de maysculas y minsculas, en algu nos casos se debe respetar fielmente el uso de las apropiadas. As por ejemplo, a la hora de utili zar ciertas etiquetas o nombres simblicos de registros o bits hay que ser fieles a los listados que se proponen.

A 2.5 . PRIMER PROYECTO EN LENGUAJE C

Una vez visto cmo crear un programa para dsPIC en lenguaje ensamblador se invita al lector a con feccionar el mismo programa en lenguaje C para dar as una visin distinta y permitirle seleccionar el lenguaje que mejor se adapte a sus necesidades. La fam ilia dsPIC ha sido optim izada para la ejecucin de program as desarrollados en len guaje C. Una buena program acin en lenguaje ensam blador siempre ser ms ptim a que en len guaje C en cuanto a tamao de cdigo y tiempo de ejecucin. El lenguaje C tiene la ventaja de ser un lenguaje ms fcil de aprender y utilizar proporcionando mayor rendim iento en la programacin. Al igual que en el programa en ensamblador, el prim er paso consistir en crear un proyecto pa ra poder confeccionar el programa. Los pasos son similares a los del apartado anterior, pero con cier tas diferencias.

1 . 2. 3. 4.

Para crear el proyecto acceder al men Project-> Project Wizard... Pulsar Siguiente ': Seleccionar el modelo dsPIC30F4013 y pulsar Siguiente Seleccionar Microchip C30 Toolsuite de la lista despiegable Active Toolsuite a. Para el MPLAB ASM30 Assembler seleccionar C:\Archivos de programa\ Microchip\MPLAB C3\bin\pic3-as. exe b. Para el MPLAB C30 Compiler seleccionar C:\Archivos de programa\Microchip \MPLAB C30\bin\pic30-gcc.exe c. Para el MPLAB LINK30 Object Linker seleccionar C:\Archivos de programa\ Microchip\MPLAB C3Q\bin\pic30-ld. exe d. Para el LIB30 Archiver seleccionar C:\Archivos de programa\Microchip\MPLAB ASM30 Suite\bin\pic30-ar. exe

210

dsPIC. DISEO PRCTICO DE APLICACIONES

5. Dar nombre al proyecto, sumac, y elegir ubicacin 6,. Aadir el fichero C:\Archivos de programa\ Microchip \ MPLAB C30\ support\ gld\ p30f4013.gld y marcarlo con un tic para que se copie a la carpeta del proyecto. (En funcin del dsPIC a utilizar; seleccionar un fichero distinto correspondiente al modelo en cuestin.) 7. Finalizar el asistente 8. Mediante al men Project-> Build options -> Project, y en la pestaa General, seleccionar el direc torioG:\Archivos de programa\Microchip\MPLAB C30\lib\ a travs del botn Browse de la seccin Library Path. Ntese que aqu no se debe cambiar la ruta de los ficheros include como en el ejem plo en ensamblador, sino que se debe cambiar la ruta de las libreras 9. Crear un fichero desde el men File-> New y guardarlo en la carpeta del proyecto con el nombre de sumac. c (ntese que se debe especificar la extensin .c del archivo) 10. Aadir dicho fichero al proyecto a travs de la opcin Project->Add files to Project... y seleccionar el fichero fuente sumac. c

Ya est preparado el proyecto para ser escrito y compilado. Recuerde que debe ser especial mente cauteloso a la hora de seguir estos pasos si desea tener xito en esta tarca, pues el olvido de alguno de los pasos anteriores puede llevar a producir errores de compilacin o linkado que crea rn ms de un quebradero de cabeza. El estado del proyecto se debe corresponder con el represen tado en la Figura A2.14.

Q su m a c .m c p
0 Source Files sumac. c Header Files O bject Files Library Files 3 Linker Scripts ! L~ p30f4013.gld O ther Files

Figura A2.14. Estado del primer proyecto en lenguaje C.

A continuacin se detalla el cdigo fuente correspondiente al programa en s, mostrado en el Lis tado A2.2. Luego, mediante la opcin del men Project-> Build All, deber compilarse el proyecto.
7' i---..--'.. . '

// Programa Ejemplo 1.c


#include "p30f4013.h" int main(void)

WREGO = 1; w h ile (l)

C -K w X v

.'..V V /A V .'

Listado A 2.2. Programa sumac en lenguaje C (Contina)

APLICACIN 2: EL ENTORNO DE DESARROLLO MPLAB IDE

211

WREGO } roturn 0;
Y i'V.-i
V .rr * w - o-

c^ffa:: - " U S t l >*

Listado A2.2. Programa sumac en lenguaje C (Continuacin) Siguiendo los pasos correctamente deber obtener un BUILD SUCCEEDED tras construir el pro yecto. Tambin deber aparecer un mensaje de alerta o wam ing , advirtiendo de que el uso de los regis tros en lenguaje C como WREGO no es conveniente. Efectivamente, no lo es, ya que es ms recomen dable hacer uso de variables al igual que se hace normalmente en este lenguaje. An as, y para hacer el programa lo ms parecido al anterior desarrollado en ensamblador, se ha utilizado este recurso. De no obtener el resultado deseado, estudie el error i ndicado en la ventan Output . La falta de un punto y coma, o el no haber seguido todos los pasos con exactitud a la hora de crear el proyecto, pueden originar el fallo. Analicemos lo que hace el programa. // Programa Ejemplo 1.c

Vi.XtTO:TOXO.ttO.

En esta ocasin el comentario viene precedido por//. Este comentario es un comentario de lnea. Es decir, que todo lo que est escrito tras estos smbolos y en la misma lnea ser ignorado por el compilador. Si desea escribir comentarios de ms de una lnea incluya al principio del comentario los smbolos /* y al final del mismo */. Por ejemplo:

P Este es un coi:nentario

de mas de una lnea */ HaSfl8S688S8BBwSw88ro^

La siguiente lnea es una directiva del compilador. Sirve para incorporar el fichero de includes correspondiente al procesador empleado, en este caso el dsPIC30F4013.

#include p30f401^.h*1

La inclusin de este fichero permite entre otras cosas trabajar con smbolos en vez de con posi ciones de memoria absolutas, etc.
x 'i;

int main(void)

<

Todos los programas en C empiezan con la funcin main. La palabra reservada int significa que la funcin main devolver un valor entero. Y la palabra reservada void significa que la funcin main no recibe ningn parmetro para su ejecucin. A continuacin comienza un segmento de cdigo y dichos segmentos de cdigo siempre deben estar entre llaves {}.

212

dsPIC. DISEO PRCTICO DE APLICACIONES

WREGO = 1;

Es una instruccin de asignacin. Asigna el valor 1 a WREGO que es un registro general.

while(l) { WREGO = 2 + WREGO;

*%v X v iv I'X v '.- i -X 'X v X*X'X *X*>^V- '*'**X*1'X -"X .- - / X /X v ,*

. *.v. . l l j ' ! ' > **<

-.*>

.v J v X * X v - '-''

: x-:% x

-...

^ : * r

> -..............-.-.vv:-

v - : - . - : '

Estas instrucciones representan el bucle principal del programa. Se trata de un bucle while que se repite siempre que sea cierta la condicin que acompaa a la palabra reservada while entre pa rntesis. Verdadera es toda condicin cuyo resultado no sea cero. Luego al poner un 1, esa condi cin siempre va a ser cierta. Y al igual que en el ejemplo en ensamblador, este bucle se va a estar repitiendo siempre, sin tener un final. Lo que se va a repetir en ese bucle es el siguiente segmento de instrucciones delimitado por las llaves. Otra asignacin que hace que el registro WREGO adquiera el valor de la suma de los valo res contenidos en el registro WREGO ms un 2. As, y al igual que en el ejemplo en ensamblador, el programa va asignando al registro WREGO nmeros impares a base de ir sumando 2 al nmero impar inicial 1.

re tu rn 0;

Hay que devolver un valor del mismo tipo que la funcin. Es decir, se debe devolver un valor en tero. Normalmente la devolucin del nmero 0 indica que todo ha progresado de form a correcta. Por eso, y a pesar de saber que el programa no alcanzar nunca esta instruccin siempre deberemos co locar esta instruccin en los programas en C. De haber conseguido una ejecucin correcta, seguramente se querr comprobar que el programa funciona y hace lo previsto. Realice los ejercicios de autoevaluacin y pase al siguiente captulo donde podr sim ular su ejecucin mediante el MPLAB S1M, una herramienta muy til a la hora de depurar y probar programas antes de implementar el hardware.

AUTOEVALUACIN Conceptos clave de este captulo


X v v w > * S v X X*X*X* X-X X X*X\ *X-* X-X*X*X*X-X X'*X*X ' .

1. Qu ficheros son necesarios para todo proyecto escrito en ensamblador? 2 Para qu sirven los ficheros aadidos a un proyecto en C? 3. Qu hace la instruccin ADD W0,W1,W0? Cul es la etiqueta de inicio de programa en ensamblador? i 5. Dnde se encuentra la rutina de Reset de nuestros programas?
S v w S fS ra /X y I\< v X *

:y
.

: 5 i Iv X v X ;

APLICACIN 2: EL ENTORNO DE DESARROLLO MPLAB IDE

213

E jercicios

Al programar Ejemplo hs, el primer programa en ensamblador, no est del todo optimizado. Es cier to que el programa va generando nmeros impares en el registro W O, pero se puede hacer de una forma ms ptima. Ms rpida. Una pista: existe una instruccin que se ejecuta muchas veces y que no es necesario que se ejecute tantas.

Cul de los dos lenguajes le ha parecido ms interesante? Cul de los dos se adapta mejor a sus necesidades? A lo largo de los siguientes captulos trataremos de proponer ms ejemplos en los dos lenguajes para que pueda elegir con mayor criterio el lenguaje ms adecuado para sus necesidades.

A 3 .1 . IN T R O D U C C I N

En la aplicacin anterior se han creado unos programas introductorios para controladores dsPIC. En la presente se analizar el comportamiento de los mismos mediante un simulador dentro del entorno de desarrollo, ejecutndolos paso a paso, de forma continua, observando cmo cambian las variables y las posiciones de memoria, adems de seguir profundizando en la programacin de los dsPIC.

A 3.2 . S IM U L A N D O EL PRIMER P R O G R A M A EN E N S A M B LA D O R

El prim er paso ser cargar el proyecto anterior desarrollado en lenguaje ensamblador mediante la opcin File OpenWorkspace y abrirlo con todos sus componentes. Cuando aparezca en pantalla la ventana del proyecto se hace doble clic sobre el fichero suma.s para disponer del cdigo fuente. (Figura A3.1.)
IH jO CS f* V 'd fC .U O fJpr A* S M m
Q f c# .1* (**i . o u tk u m : fedSUd t >: i* ?1 T? Jfc ;

Figura A 3 .1 . El primer proyecto suma.mcw.


215

216

dsPIC. DISEO PRCTICO DE APLICACIONES

Para sim ular este ejemplo existen varias opciones. La primera, y la ms sencilla, es sim ular lo en el ordenador haciendo uso de una herram ienta integrada en el MPLAB IDE, denominada MPLAB SIM. O tra opcin sera grabar en un dsPIC el program a y depurarlo sobre circuito me diante otras herram ientas de la em presa M icrochip, como el MPLAB ICD2. Puede ser intere sante el uso de esta herram ienta en proyectos com plejos, donde los problem as con el hardware as lo requieran, pero para los ejem plos didcticos el sim ulador MPLAB SIM es una herram ien ta suficiente. El primer paso ser entonces seleccionar el simulador. Para ello, se debe acceder al men De bugger -> Select Tool -> 3 MPLAB SIM. (Figura A3.2.)

Debugger

Programmer

Tools

Configure None

Window

'Select Tool Clear Memory Run Animate Halt F5 F9

1 MPLAB ICD 2 2 MPLAB ICE 4000 3 MPLAB 5IM 4 MPLAB ICE 2000 tfTfi nni9A F'

Figura A3.2. Seleccin de la herramienta MPLAB SIM.

En la Figura A3.2. puede observarse cmo el men Debugger vara sus opciones al seleccionar el MPLAB SIM. Ahora dispone de nuevas opciones Run, Anmate, Step Into , Step Oven etc., que permiten hacer uso del depurador de programa para ejecutar cdigo paso a paso, animarlo, poner puntos de ruptura, etc. El siguiente paso consiste en que el sim ulador ejecute una instruccin. Para ello la herra m ienta dispone del men D ebugger -> Step Into. Al seleccionarlo, es posible que el programa muestre un m ensaje indicando que el proyecto debe com pilarse por no estar al da (The Project is out o f date. W ould you like lo build it now?). En tal caso pulsando A ceptar el proyecto se com pilar de nuevo. Pulsando de nuevo D ebugger -> Step In to ... no aparecer nada en pantalla! Efectivamente, no se observa ningn cambio en pantalla, pero el programa se est ejecutando. Que es lo que pasa? Debera apreciarse cmo el ordenador seala la instruccin que est ejecutan do y, sin embargo, no se ve absolutamente nada. En el tema anterior se comentaba la necesidad de trabajar con proyectos para facilitar la tarea. Una de las facilidades es que los ficheros aadidos a los proyectos preparan unas funciones que se deben incluir siempre. Ahora mismo, el programa est ejecutando una de esas instrucciones in cluidas en los ficheros que se han aadido al proyecto. Ms concretamente, est ejecutndose la ru tina de Reset. Luego, la primera instruccin que se ejecuta no es la primera instruccin del fichero suma.s.

A3.2.1. Explorando la memoria de programa

Para poder ver todas las instrucciones que ejecuta el simulador, se pulsa en el men Debugger la op cin Reset -> Processor Reset. Luego, se procede a visualizar la memoria de programa mediante el men View ->Program Memory.

APLICACIN .3: PONIENDO EN MARCHA EL SIMULADOR

217

Program Memory Line ; Address


00000

Opcode
Q4Q00

Labei goto _ceset nop _DefaultInterrupt _DeaultInterrupt _Defau.Lt Interrupt DefaultInterrupt

Disassembly

00002

00004 00006 00008

000000
0001A8 0 0 0 1A8 0 0 0 1A8

0000
;< ; ;
Opcoce Hex | Machine ||' Symbo'lic

00018
PSV Mixed | PSV Data

______ __ _________________

Figura A3.3. Visualization de la memoria de programa.

La ventana de la Figura A3.3 muestra el contenido de la memoria del programa. Es el programa que realmente ejecuta el procesador. La ventana dispone de varios botones en la parte inferior que permiten visualizar dicha informacin de distintas formas. Quizs la ms apropiada para seguir el ejemplo sea la que adopta la ventana por defecto, llamada Symbolic. En la columna Dissasembly se puede observar la primera instruccin del programa: goto reset. Por eso lo primero que hace el programa es atender la rutina de Reset. Tambin puede observarse una flecha en la parte derecha de la misma figura. Esa flecha indica cul es la prxima instruccin que va a ejecutar el simulador. Ahora s, al pulsar Debugger -> Step Into , se aprecia cmo la flecha se va desplazando por la memoria de programa. Puede resultar interesante intentar descifrar lo que va haciendo el programa. Obsrvese que el programa pasa por una rutina de inicializacin de datos, llamada _data_init, y cmo se ejecutan otras instrucciones hasta que llega a la primera instruccin del fichero suma.s. Cmo sabremos que ya ha llegado esa prim era lnea de nuestro fichero? Al seguir ejecutando paso a paso el programa lle gar un punto en el que en la columna Label de la ventana de exploracin de la memoria del pro grama, aparecer la etiqueta niain. (Figura A3.4.)

204 205 206 207 208 209

0 0 1 96 0 0 1 98 0019 0019C 0019E 001A0

0 00000 DA4000 FE0000 200010 200021 400001

m a in suma 2

nop R e se rve d B R re s e t m ov.w # 0 x 1 , wO m ov.w # 0 x 2 , w l a d d .w w O ,w l,w O

.
O pcode H ex M achine | Symbolic PSV M ixed PSV D a ta

Figura A3.4. Encontrando el inicio de nuestro programa,

A3.2.2. Estableciendo puntos de ruptura y ventanas de inspeccin

Otra opcin, mucho ms cmoda y sencilla, es utilizar un punto de ruptura para saltar todas las ins trucciones anteriores. Sin necesidad de abrir la ventana de exploracin del programa, se crea un punto de ruptura en la primera instruccin mov del fichero suma.s. Para crear dicho punto de rup tura, basta con hacer doble clic con el ratn en la parte izquierda de la lnea de cdigo donde se de see que se pare el programa (en la Figura A3.5 dicha posicin est marcada con una letra B). Al

218

dsPIC. DISEO PRCTICO DE APLICACIONES

hacerlo, aparecer una B en dicha lnea, que indicar que en esa lnea existe un Breakpoint o pun to de parada. Para quitarlo puede volver a hacer doble clic con el ratn en ese punto y desaparece r la B y el punto de parada.

C r e a c i n

de

n a e ro i

in p a r e r

. g l o b a l _ J ta in

-t-e x c m a in :

r io v

# 0 * 0 0 0 1 ,W 0

;M o v c i o s

un

uno

M0

svmaZ:
nov add # 0 x 0 0 0 2 ,K1 T 0 O , 1 ,M O ;M o v e 3 c o s ; s u in a a io s ;e l y o to . end sum aZ un 1 2 a l r e is c r o W0 y l V I y d e j& m c s r e s is t ro &

r e s u lta d o e l

VO
sun&2

; R p e c li a o s

b u c le

Figura A3.5. Aadiendo un punto de parada en el programa.

A continuacin, tras provocar de nuevo un Reset (Debugger -> Reset -> Processor Reset), en vez de pulsar D ebugger-> Step Into, que ejecuta una sola instruccin, se accede al men Debugger ->Run. M ediante esta opcin, el programa se ejecuta y rpidamente aparece la flecha encima del punto de parada marcado por B, lo que significa que se ha ejecutado todo el cdigo inicial hasta esa linca. El contador del program a se encuentra apuntando a la prim era direccin del cdigo. Para com prender los resultados de la ejecucin del cdigo se debe poder observar ios valores de los registros WO y W l. La ventana Walch del men View perm itir aadir cuantos elementos se deseen monitor i zar.
f. . . . . . .
I
-

W atch
_ v ; [ Add Symbol)
j_ _ SP

B
v V a lu e
j

Add SFR) ACCA A d d re s s

S y m b o l Mame

| Watch 1

Watch 2

Watch 3 j Watch 4 j

Figura A3.6. Ventana de inspeccin de valores Watch.

Desde la ventana de la Figura A3.6, se aadirn los registros W0 y W 1 para ir monitorizando los valores que van tomando cada uno de ellos. Desplegando la lista que se encuentra a la derecha del botn Add SFR se selecciona el registro WREG0 y a continuacin pulsando el botn A dd SFR , se aade dicho registro a la ventana de inspeccin. Se repite este proceso con el registro WREGJ , de forma que la ventana Watch quede como la de la Figura A3.7.

APLICACIN 3: PONIENDO EN MARCHA EL SIMULADOR

219

W atch V:j (A d d Symbol]

Add SFRj jWREGI A d d re s s 0000 0002 ' r

SP
V a lu e

i
0x0000 0x0000

S y m b o l Name WREGO WREG1

| j Watch 1

Watch 2 j Watch 3 1 Watch 4

Figura A3.7. Ventana de inspeccin con los registros WRECO y WREC1.

Al ejecutar el programa paso a paso se conocern los valores que van tomando de los registros. Al pulsar la tecla F7 {Debugger -> Step Into) se observar el nuevo valor de WREGO que ser 0x0001, que se corresponde con la ejecucin de la instruccin

que mueve el valor 1 a W0. Adems aparecer en rojo para indicar que acaba de ser modificado di cho valor.

A 3 .2 .3 . R esolviendo el e je rc ic io d el tem a a n te rio r

Al pulsar de nuevo F7 se observa cmo WREG1 tom a el valor 0x0002 correspondiente a la ins truccin

y al pulsar F7 WREGO tom a el valor 3, resultado de sumar WREGO y WREG1. Pulsando F7 el programa vuelve a la instruccin de carga del registro W REG1. Al ejecutar esta instruccin de nuevo, se vuelve a m over un 2 a W l, que ya tena un 2. Luego es ta instruccin no es muy interesante que est aqu. Se est repitiendo esta instruccin constante mente cuando no es necesaria. Si recuerda, en el tema anterior se propona como ejercicio mejorar el programa. Esa mejora se refera a esta cuestin. El program a sera ms ptimo si se colocara es ta instruccin antes de la etiqueta suma2. Puede observarlo en el Listado A4.1.

220

dsPIC. DISEO PRCTICO DE APLICACIONES

\ .t 4 ' . ' . l ; Programa Ejemplo l.s


* . 1, ; ;

ill
:

m ; Creacin de nmeros impares .global _main


.text __main: mov #0x0001.W0 mov #0x0002,W1 suma2: add W0,W1,W0 goto suma2 .end

;Movemos un literal a W0 ;Movemos un 2 al registro W 1 ;sumamos el registro W0 y W 1 y dejamos ;el resultado en W0 Repetimos el bucle suma2
I'XOX.

p W&f:

Listado A4.1. O p tim izacin del p rim e r programa.

Si se sigue pulsando la tecla F7 se aprecia cmo el programa no tiene fin y como el registro WREG1 no vara nunca, manteniendo siempre el valor 2 y, sin embargo, WREGI va tomando los valores de los nmeros impares: 1, 3, 5, 7, 9,...
Ejercicio:

Una vez depurado el programa en ensamblador, trate de hacer lo mismo con el programa en lenguaje C. Simlelo en pantalla observando cul es la primera instruccin que se ejecuta, aada un punto de parada e inspeccione los valores que va adquiriendo WREG0.

A3.3. CARACTERSTICAS DEL SIM ULADOR

En el resto de aplicaciones de esta segunda parte del libro se emplea este simulador, de ah la im portancia en conocer a fondo esta herramienta. Sin abandonar el prim er ejemplo, se estudi el problema del acarreo por desbordamiento en la suma, que se produca al sumar 2 a OxFFFF. La capacidad del registro de 16 bits se desborda y en tonces se activa el bit de acarreo (C) para indicar que el resultado que aparece en el registro WREG0 es incorrecto y le falta un bit por delante. Existen varias posibilidades para estudiar esta situacin. La primera, y la peor, sera pulsar F7 hasta que el registro WREGO tenga el valor OxFFFF y despus hacer la suma y observar el bit de acarreo. Una de las caractersticas que tiene el simulador es que permite cambiar ciertos valores de re gistros, posiciones de memoria, etc. As, la segunda opcin para mostrar cmo entra en accin al bit de acarreo es cam biar el valor del registro WREGO a OxFFFF. Para ello, se utilizar otra ventana que permite visualizar el valor de WREGO y el del registro SR, que es el encargado de indicar, entre otros, el valor del acarreo. Esta opcin se encuentra disponible en la ventana View -> 10 Special Function Registe rs, representada en la Figura A3.8. En primer lugar se debe reiniciar el programa mediante la opcin del men Debugger -> Reset -> Processor Reset. A continuacin, pulsando F9 se consigue que el programa llegue hasta el pun-

APLICACIN 3: PONIENDO EN MARCHA EL SIMULADOR

221

Special F u n c tio n Registers

PE*
Hex 0000 0000 0000 0000 0000 0000 nnnn 0 0 0 0 0 0 n
i
lo 1 e n s a rn b la d o i\c rtO c 3I0 1 e n s & m b la d o r\c rt 1 c d Io 1 e n s a m b la d o r\s u m

Address s SFR Name MR EGO 0000 0002 WREG1 WREG2_____ 0004 0003 000A nnnv
oooc

VJREG4 UREG5 UREG6


TTDlTf'V?

Figura A3.8. Inspeccin de registros.

to de ruptura, inicio del programa. Seguidamente, pulsando dos veces F7 se ejecutan las dos pri meras instrucciones. Es entonces cuando en la pantalla de Special Function Registers, WREGO to ma el valor 1 y WREG1 toma el valor 2. Pero como se desea acelerar el proceso del desbordamiento, haciendo clic en la ventana de Special Function Registers , dentro del valor de WREGO en hexadecimal escribe FFFF, de forma que la pantalla es la de la Figura A3.9.
M i S p e c ia l 1 u n c tio n R e g is te rs j JLclclress V 1 0000 1 0004 0006 0008 non j SFR K arre i ex 1 FT7T D e c im a i |

y g js
'S

REGO SP.EG l WRSG2 R Z04

..

o o oM 3S __ [ _o 5BHEBBHBI 0000 0 n n n n
0000 0000 0 0

u s r.;

Figura A3.9. M odificando el valor de WREGO.

Ahora, s se ha alcanzado la situacin necesaria para observar el fenmeno de la generacin del acarreo. El cursor verde que indica la prxima instruccin a ejecutar debe estar sobre la instruccin de suma add. Pulsando F7, el procesador realizar la suma y se observar que el resultado en WREGO pasar a 0001 y que el registro de estado SR, situado en la misma ventana de Special Function Registers , indicar que se ha producido un acarreo en la suma, al activarse el bit C de menos peso del registro y el bit DC que es el noveno. (Figura A3.10.)

Spcfol h ifttrln n Rogitlerc


'1 SFR Kerne Adeleca \ 0342 SR O Zi-i CORCCtt sodcccc 003 S 0D48 XBOCRT XKAD2XD OD9A j Esx

0 1 0 1 "0 2 0
CODO

D e c im a l 2S" n S

:ao o :o o i

Figura A3.10.E/ registro SR muestra que se ha producido acarreo.

A 3 .3 .1 . C o n fig u ra n d o el s im u la d o r y c o n ta n d o e l tie m p o

En muchas ocasiones, interesa saber cunto tiempo tarda en realizar ciertas operaciones el dsPIC. Naturalmente, eso depende de la configuracin del circuito del reloj. Para analizar estas y otras caractersticas el sim ulador dispone en el men D ebugger -> Settings... de varias opciones de configuracin.

222

dsPIC. DISEO PRCTICO DE APLICACIONES

Simulator Settings
Uartl 10 > Animation Reaftima Updates Break Options | jj Limitations SCL Options ' Units: MHz

Ose/T race Processor Frequency

O KHz O Hz

Trace Options Trace All f~ l B reak on Trace Buffer Full

} Aceptar j

| Cancelar

Aplicar

Figura A3.11. Configuracin del simulador.

M ediante el cuadro de dilogo representado en la Figura A 3.11 se puede configurar aspectos ta les como el circuito del reloj conectado al controlador, opciones de ruptura, establecer las rutas de los ficheros que van a simular, la entrada y salida serie por el puerto UART, observar las limitacio nes del simulador, etc. El simulador tambin permite controlar el tiempo transcurrido en la ejecu cin de un programa. As, se puede colocar un punto de ruptura y al parar en dicho punto, median te el men D ebugger-> Stop Watch se puede conocer el nmero de ciclos de instruccin ejecutados, el tiempo transcurrido desde que se inici el programa hasta dicho punto, etc. A modo de ejemplo, se propone averiguar qu tiempo transcurre desde que empieza el progra ma hasta que llega a la primera instruccin mov del fichero suma.s . Para ello, una vez cargado el pro yecto suma en ensamblador, se establece un punto de ruptura en la primera mov (doble clic a la iz quierda de la instruccin). Este ejemplo utiliza el programa suma.s modificado con la correccin descrita en el apartado anterior. Tras resetear la simulacin mediante la tecla F6 (Debugger -> Re set -> Processor reset) se debe pulsar F9 (Debugger -> Run) y al detenerse la ejecucin en el pun to de ruptura acceder a la pantalla Debugger -> Stop Watch.

Stopwatch ( Synch] Instruction Cycles


I

Total Simulated 32 32 6.400000

Zero

T,me

l uSecsJ

6.400000

Processor Frequency

(MHz)

20.000000

Figura A3.12. Contando el tiempo empleado por el controlador.

En la Figura A3.12. se observa cmo el nmero total de ciclos de instruccin empleados para eje cutar las rutinas de inicializacin es de 32. Y el tiempo empleado, a una frecuencia de 20 MHz, ha sido de 6.4 j j s .

APLICACIN 3: PONIENDO EN MARCHA EL SIMULADOR

223

Al continuar pulsando la tecla F7 y accediendo a la ventana StopWatch , puede conocerse el tiem po empleado y el nmero de ciclos de cada instruccin. Podra localizar una instruccin que se eje cute en 2 ciclos de instruccin en el programa de suma?
E je rcicio :

Confeccione un program a que genere 10 nmeros pares. Cunto tiempo tardar en ser ejecutado el programa con un cristal de 10 MHz? La solucin depender del cdigo empleado en el programa. Trate de confeccionar el programa ms rpido, que utilice menos ciclos de instruccin. U na posible solucin podra ser la siguiente:
.global _main .text .main: repeat #0x04 add #0x0002,WQ nop .end

Este programa repite 5 veces la suma del contenido W0 ms 2 para ir generando los 5 primeros nmeros pares. Y tras esto coloca una instruccin nop, donde se puede establecer un brcakpoint o punto de ruptura y as medir el tiempo transcurrido hasta dicha instruccin. Se configurar el reloj del simulador mediante la opcin Debugger -> Settings , de forma que la frecuencia de dicho reloj sea de 10 MHz. Una vez establecido el punto de ruptura en la instruccin nop y configurado el simulador, al eje cutar el programa con la tecla F9 (Debugger -> Run) y cuando el programa se detenga en dicha ins truccin, se debe acceder al men Debugger -> StopWatch para observar el tiempo empleado, que en este caso ser de 15,20 jas. Una de las nuevas instrucciones que se han desarrollado para los dsPTC es repeat. M uchos de los clculos realizados en el tratamiento de seales son de carcter repetitivo, de ah que se haya aa dido esta nueva instruccin al repertorio de instrucciones. Podra desarrollarse el program a en C y observar si hay alguna diferencia en el tiempo de ejecucin entre ste y el desarrolado en ensam blador. Una posible solucin en lenguaje C podra ser el siguiente programa: #inc!ude "p30f4013.h" int main(void)

in tc o n t= l; int num = 0; while(cont <6) ( num = 2 + num; cont+-K I

re tu rn 0;

224

dsPIC. DISEO PRCTICO DE APLICACIONES

En lugar de utilizar el registro WREG, esta solucin emplea variables, que es la forma ms ha bitual de programar en el lenguaje C. Naturalmente, el programa se podra depurar para hacerlo p timo, pero sta es una solucin tpica en este lenguaje. Los nmeros pares se generan en la variable num. Para poder observar el valor que toma esta va riable, se deber hacer uso de la opcin View -> Watch y seleccionar dicha variable en la lista Add symbol , y pulsar dicho botn. Al colocar un punto de ruptura en la ltima instruccin del programa, se puede conocer el tiempo empleado en esta solucin. Se debe cambiar la configuracin del simulador para que la velocidad del reloj sea de 10 MHz, al acceder al men Debugger -> StopWatch. El tiempo empleado es de 34,4 ,us. La diferencia de tiempo es importante. No debe pensarse que siempre se dan estas diferencias tan grandes de tiempo para conseguir la misma solucin en C y en ensamblador. De hecho, los dos pro gramas aunque parecidos no hacen exactamente lo mismo, y es por esto por lo que la diferencia se agranda. Pero s se confirma que con el lenguaje ensamblador bien utilizado se pueden optimizar los programas. Sin embargo, con el lenguaje C se pueden realizar operaciones de una form a ms ami gable, sin tener que conocer tan profundamente la arquitectura interna del controlador, obteniendo un mayor rendimiento en la fase de programacin.

AUTOEVALUACIN
C onceptos clave de este c a p tu lo

1 . Qu depuradores soporta la herramienta MPLAB IDE?Dnde puede conocer las limitaciones del simulador software ? 2. Qu pasa cuando se ejecuta un programa paso a paso?Cundo se ejecutan las instrucciones del cdigo fuente? 3. Cmo se puede observar con el simulador el nmero de ciclos que tarda en ejecutarse una ins truccin? 4. Describa las limitaciones del simulador 5. Mediante qu opcin del men se podra visualizar parte de la memoria de datos EEPROM?Po demos desde el MPLAB IDE escribir en ella?

E jercicios

^^^^^^S^SSSS^BSSSBSSSSSSSSSS^BSSBStBSSBSaBSBSSBBBSSBBSSBSSSBBKaSSSBSSSSBSSSSS^
Confeccione un programa en ensamblador que contenga la instruccin ADD, MOV, GOTO y CPSEQ. A continuacin simule el programa y calcule el nmero de ciclos de instruccin en los que se ejecuta cada una de esas instrucciones. Confeccione un programa en lenguaje C que le permita observar cmo cambia el bit de acarreo de la palabra de estado.

- -

APLICACIN

Manejando las instrucciones tpicas de los dsPIC


A4.1. IN T R O D U C C I N

En este terna se proponen diversos ejemplos de aplicacin que se simulan con el MPLAB SIM y que contienen instrucciones especficas de los dsPIC.

A4.2. MANEJO DE INSTRUCCIONES DE SALTO EN ENSAMBLADOR

Para aquellos lectores que no han trabajado con anterioridad con el lenguaje ensamblador, puede re sultarles algo complicado manejar las instrucciones de salto. Hay dos tipos bsicos de instrucciones de salto: Instrucciones de salto incondicional e instruc ciones de salto condicional. Las instrucciones de salto incondicional rompen el flujo de control en la ejecucin del programa saltando a la direccin que se indique, es el caso de GOTO Etiqueta, BRA Etiqueta y CALL Etiqueta. Las instrucciones de salto condicional evalan una condicin y, en funcin del resultado de la misma, actan de una forma u otra, es decir, saltan o no saltan. La instruccin BRA C es de salto condicional, de forma que se salta a la direccin de la etique ta si C = l y se ejecuta la instruccin siguiente si C = 0.

;Ejemplo de instruccin BRA MOV #0Xffff, WO ADD wO,#0X000l,W0 BRA CSALTO


SALTO:

;Movemos OXffff a WO
;Sumamos 1 a W0 para provocar el acarreo ;Si se activa el bit de acarreo salta a la etiqueta SALTO

Tambin existen otras instrucciones de salto condicional, denominadas instrucciones de com paracin y salto, por ejemplo la instruccin C.PSEQ, utilizada en el ejercicio de autoevaluacin del
225

226

dsPIC DISEO PRCTICO DE APLICACIONES

tema anterior. En el siguiente ejemplo, se utiliza la instruccin CPSEQ para buscar el primer n mero mayor que cero que es simtrico respecto a los dos bytes de un valor. Es decir, que si se in tercambia la posicin de sus dos bytes, se mantiene el valor.

MOV #0x0000,WO SUMA: ADD W0,#0x0001 ,W0 MOV W0.W1 SWAPW1 CPSEQ W0.W1

:Cargamos W0 con 0 ;Sumamos I a W0 ;Movemos W0 a W l Intercambiamos los bits de W 1 ;Si los W0 y W1 son iguales salta la ;siguiente inst. Realiza la suma ;Tratamiento de simtricos

y/'-s.
*x -x-x ; . x-x.,.:

> > > > X -V > X X X X V V V X -X *> X 'X 'X X 'S X -X \-X 'X -X -X -X -X -.' x-x-v-:-x-X ;> W < jX ^*x*x.X *^>!*>> X v,xx x-x-.-x-x-x

. GOTO SUMA SIMETRICOS:


.

En este ejemplo la instruccin CPSEQ primero comprueba que W0 y W1 tienen el mismo valor. Si no es as no hace nada y el programa sigue su curso ejecutando la siguiente instruccin GOTO SUMA. Una vez que W0 y W1 sean iguales, la instruccin CPSEQ har que se salte la siguiente ins truccin GOTO SUMA y el programa acceder a la parte del programa etiquetada como SIME TRICOS. El programa ya habr encontrado el prim er nmero simtrico mayor que cero.

A4.3. MANEJO DE INSTRUCCIONES DSP. INICIALIZACIONES Los dsPIC. incluyen 19 nuevas instrucciones especficas para el tratamiento de seales. En el si guiente ejemplo se estudia el manejo de la instruccin MAC. Esta instruccin puede resultar espe cialmente interesante para implementar un filtro FIR, cuya ecuacin general se corresponde con la siguiente frmula: yn = b0xn+ b,xn.| + b2x _2 + b3Xn-3

La instruccin MAC puede ayudamos a resolver esta ecuacin de forma rpida. Los coeficientes bo, bi, b2 y b, as como los valores de xn, xn.j, xn.2 y xn.3, se representan en la siguiente tabla:
b
0x0001 0x0003 0x0007 0x0001 Xn 0x0002 0x0005 0x0002 OxQOF

Para aprovechar al mximo la potencia de esta instruccin y hacer esta operacin matemtica lo ms rpidamente posible, se deben alojar los coeficientes b en el espacio de la memoria de datos X y los x en el espacio Y, para que el controlador pueda acceder a los dos operandos simultneamen te. El primer paso en el programa ser colocar dichos datos en sus zonas correspondientes. Para ello se define una seccin data en el espacio X, a partir de la direccin de memoria 0x0800, de tipo pa labra, llamada coeficientes, donde se almacenarn los valores de b.

APLICACIN 4: MANEJANDO LAS INSTRUCCIONES TPICAS DE LOS dsPIC

227

Programa MR global jtnain Seccin de datos X de la memoria. section coeficientes, data, xmemory. address(0x0800) bi: .hword 0x0001, 0x0003,0x0007,0x0001

Mediante estas instrucciones se ha creado una zona en el espacio X desde la posicin 0x0800 hasta la 0x807 incluida con los datos correspondientes a b*. Luego se crearn las entradas corres pondientes a xn a partir de la posicin OxOCOO en el espacio Y.

;Secein de datos Y de la memoria. .section inputs, data, ymemory, address(OxOCOO)


.........

u ............. r u ;n / \ n n

n j\ A c

r i.,n n n 't

n ..n n n r ?

Ntese la correspondencia de los datos de la tabla con los de la definicin de la seccin inputs.

.text & ::
_main:

V :; :

bset CORCON,#OxO

;Operaciones con enteros.

Al comenzar el programa se establece a 1 el bit 0 del registro CORCON para indicar que las ins trucciones DSP trabajan con nmeros enteros. Luego, mediante los registros W 4 y W6, se recogen los datos de los espacios de memoria X e Y, respectivamente, y los registros W8 y W 10 actan co mo punteros de las direcciones de la zona de memoria donde residen los coeficientes b y xn.

mov #bW8 mov [W8++],W4

:Mover Ja direccin de bi a W8. ;E1 contenido de la direccin de W8 lo llevamos a W4 y ;de jamos W8 apuntando al siguiente dato.

Se debe introducir el dato de la primera multiplicacin b0 en W4. Este dato se encuentra en la seccin etiquetada como bi. Luego la instruccin mov #bi, W8 introduce en W8 la direccin de me moria 0x800, que es donde se encuentra b0. La siguiente instruccin mueve el contenido de la posicin de memoria que se encuentra en W8 al registro W4. Es decir, lee la posicin 0x0800, cuyo dato es OxOOFF, y lo guarda en W4. Adems el programa ha realizado otra operacin que es postincrementar la direccin apuntada por W8. Es decir, que con la mism a instruccin se consigue dejar W 8 apuntando al siguiente dato situado en la posicin 0x0802, b|.

228

dsPIC. DISEO PRCTICO DE APLICACIONES

Mover la direccin de xn a W10. Contenido de la direccin W 10 a W6. Dejamos W6 apuntando al siguiente dato

El programa realiza una operacin similar con los datos xn, apuntndolos con el registro W10 y almacenando el dato en el registro W6. As, deposita xn en W6 y deja W10 apuntando a xn-i. Con las instrucciones descritas se realizan las siguientes acciones: Colocar desde la posicin 0x0800 los coeficientes b (espacio X) Colocar desde la posicin OxOCOO los valores de x (espacio Y) Recuperar en W4 el prim er valor b0 Recuperar en W6 el prim er valor xn Apuntar con W8 al siguiente valor b| Apuntar con W 10 al siguiente valor xn.j

A continuacin el programa realizar cuatro multiplicaciones y las ir acum ulando en el acu m ulador A. Las cuatro sumas correspondientes a la frmula general anteriorm ente descrita, yn = b0xn+ biXn-i + b2x n_ 2+ bjxn.3, se ordenan m ediante la instruccin repeat #0x003.

repeat #0x0003 repetimos 4 MAC, una para cada suma.

Los dos componentes del prim er sumando de la frmula (b0 y xn) se encuentran en W4 y W6. Hay que multiplicarlos entre s y mover el contenido de la posicin de memoria apuntada por W8 a W4 (para as tener en W4 el siguiente operando bi) y mover el contenido de la direccin apuntada por W lO a W6 (xn,a W 6 ) .
-.' ;= mac W4*W6,A,[W8]+=2,W4JW 10]+=2,W6

Adems, y para dejar preparada la instruccin para repetirse la prxima vez, se postincrementa W8 y W10 en dos unidades (datos de tipo word), para que apunten a los siguientes datos b2 y x_2 y que se manejan en el algoritmo. Al repetir 4 veces la instruccin mac, se realizan las 4 multiplicaciones necesarias a las que se suma el resultado de la mac anterior. Es conveniente comprobarlo con el simulador. El programa completo se corresponde con el siguiente listado:

Programa FIR ; Autor: Aritza Etxebarria Ruiz resolucin de la ecuacin yn=b0Xn+blXn-l+b2Xn-2+b3Xn-3 tpica de filtros FIR .include ,,p30f4013.inc,, .global _ma.in Seccin de datos de Ja Memoria X. Coeficientes b0,bl,b2 y b3 .section coeficientes, data, xmemory, address(0x0800) bi: .hword 0x000 j, 0x0003, 0x0007, 0x0001

APLICACIN 4: MANEJANDO LAS INSTRUCCIONES TPICAS DE LOS dsPIC

229

Seccin de datos de la memoria Y. Xn. Xn-1, Xn-2, Xn-3 .section inputs, dala, ymemory, address(OxOCOO) xn: .hword 0x0002,0x0005,0x0002, OxOOOF .text _main: bset CORCON.#IF Operaciones con enteros mov #bi,W8 Mover la direccin de bi a \V8. mov [ W 8 + + J .W 4 El contenido de la direccin de W8 io llevamos a W4 y dejamos W8 apuntando al siguiente dato, mov #xn,W 10 Mover la direccin de xn a W 10. mov fW10++],W6 Contenido de la direccin W 10 a W6. Dejamos W6 apuntando al siguiente dato repeat #0x0003 repetir 4 veces (una por cada suma de la ecuacin) mac W4*W6,A,LW8]+=2,W4,[W 10]+=2,W6 ; Instruccin MAC, Multiplicacin y acumulacin. ; Multiplicamos W4 y W6 y lo sumamos al contenido del acumulador A Adems, movemos el contenido de W8 a W4, coeficiente b y postincrementamos W8 para que apunte al siguiente coeficiente b As mismo, y gracias a que se encuentra en la zona de memoria Y, tambin podemos ; hacer que W6 recoja el dato apuntado por W 10, es decir el siguiente Xn ; y postincrementamos W 10 para que apunte al siguiente Xn. nop No operar. .end
.

Recuerde crear el proyecto e introducir el programa descrito. Establezca un punto de ruptura o breakpoint en la prim era instruccin bset y ejecute el program a paso a paso para observar el fun cionamiento del mismo. Puede comenzar por observar los datos del espacio X y los del espacio Y. Para ello, acceda al me n View -> File Registers y seleccione la pestaa XY Data en la parte inferior de la misma, para ob servar las posiciones 0x0800 y OxOCOO donde encontrar los coeficientes utilizados. (Figura A4.1.)

T i l e R o g i t l c r s :1 S iac Jrm s 0800 am o 0820 3830 9040 0850 0860 0070 0630 090 0SA 0 S r bus l j1 o c E 1. 00 :! ^ 0 0 . ,lL _ L i _ J 1 O S 1 nocD nop: DUOU o u o o ocoo 0003 0 0 0 DUCO OGOO o o o o OOCD OOOD o o o o OCOO o c o o OCDO o c o o OOCD u o o o OOCD 0 0 0 0 oooo OCDO OODO o u o o 0000 ocoo 0000 0 0 0 0 OOOO o o o o 0000 OD 0000 OGOO 0000 OCDO OC DO '/ X v X v f M A d d cfess ~ 0 C 10 0 C 20 0 C 30 0 C 40 ccso O C6 0 0C 70 0 C8 0 0 C9 0 : : j vOt t l Sj T r t ! V Y Y Y Y Y Y Y Y V 002 0000 OC DO eoo GODO 0000 0000 cooc 0300 ODOO ULDS OCDO 0000 OODO 0000 0000 oono 0000 CDOO OOOC p *04 p r u L S I 1 06 oono 0 CD 7 0 1 -.0 o o o o c o o c i 0000 OCDO OCDO OOOC CDOO o o o o 0 0 0 0 OOOC ODOO o o o o CDOO oooo OOOO o o o a OC 02 oooo 000 OOOC COOC OOOO w ? .v 1| W D te CDOO CDOO CDOO OOOO OOOO oooa oooa OOOC OOOC? oooo CDOO oooo oono oooo oooo noon oaoo 0000 ocoo OC DO OODO OCDO 0000 0000 oooo oaoo OGOO ocoo ocoo OGOO OCDO ocoo oooo 0000 oooo oooo _ _ _ OCOO OOOO oooo 0000 OOOO oooo CDOO OCDO ocoo ULJU OODO oooo oono OOOG _ _ _ oooo nouo oooo oooo oooo aooo CDOC OCDO UOD0 GODO OOOO COOG OOOO OOOO

............ 3

r 01S6 CDOO oooo oooo oooo oooo oooo OOCO ooco oooo i cooo 0000 ODOO oooo 0000 oooo ooao DOGO ooco oooo

....
>

>5

fi .H*:

Figura A4.1. Visualizando el rea de datos de los espacios X e Y .

230

dsPIC. DISEO PRCTICO DE APLICACIONES

Hasta llegar a la instruccin MAC ejecutando el programa paso a paso ( F7) observar cmo W4 contiene el prim er coeficiente, W8 apunta al siguiente coeficiente en la posicin 0x0802, W6 por el contrario contiene a Xn y W 10 apunta al siguiente coeficiente en Ja posicin 0x0C02, Puede obser var estos datos en la ventan de File Registers, en la vista Symbolic. (Figura A4.2.)

File Registers
G 0002 0004 0006 0008 000A OOOC 00 0 E 0010 0012 0014
n n * f

0000 0000 0000 0000


0001

0 0 0 0
1

00000000 00000000 00000000 00000000


00000000

00000000 00000000 00000000 00000000


00000001

01C2
0002

450
2

00000001
00000000

11000010
00000010

0000
0802

0
2050

00000000
00001000

00000000
00000010

0000
0C02 nnnn

0
3074
r-.

00000000
00001100
nnr-.i-.r-.t-.i-.i-.

00000000
00000010
r-.i-.r-.r-.nr-.nt-.

UREGO UREG1 TJREG2 UREG3 UREG4 UREG5 UREG6 UREG7 WREG8 WREG9 UREG10
TTT> 4 H

Figura A4.2. Los registros generales.

Si contina ejecutando el programa paso a paso, por cada vez que se ejecute la instruccin MAC, sta acumular en ACCA el resultado de la multiplicacin de W4 y W6. Puede observar su valor mediante la ventana View -> Watch y aadir el SFR (Add SFR) y el registro ACCA. Con la primera ejecucin de la MAC, el registro ACCA tom ar el valor 0x0002, resultado de multiplicar 0x0001 por 0x0002. Adems, si se fija en W8 y W10, comprobar que apuntan a los si guientes datos a recuperar en las direcciones 0x0804 y 0x0C04, mientras los registros W4 y W6 contienen ya los siguientes datos a multiplicar, 3 y 5. Con la segunda ejecucin, al resultado anterior 2 debe sumarle el resultado de multiplicar 3 por 5. As, el resultado en el ACCA deber ser de 17 (0x0011). Los registros W8 y W10 apuntan a los si guientes datos. Con la tercera MAC, se aade al resultado anterior, 17, el resultado de la multiplicacin de 7 por 2. Es decir, que en el acumulador se cargar el valor 17+ 14 = 31 = 0x001 F. Y ya con la ltima mul tiplicacin, se aadir al resultado anterior 31 la multiplicacin de 1 por 15, cuyo resultado final es de 31 + 15 = 46 = 0x002E. (Figura A4.3.)

1 Add SFR] [ACCA A d d re s s 0022

[Add Symbol] i_SP S y m b o l Name ACCA V a lu e 0X000000002E

Figura A4.3. El acumulador ACCA contiene el resultado final de la operacin matemtica que es 2E.

Este ejercicio muestra el potencial de la instruccin MAC junto con la instruccin repeat. Pue de parecer trivial porque los datos de los coeficientes han sido introducidos de form a directa y ar bitrariamente en memoria, pero perfectamente podran haberse introducido unos coeficientes cal culados con herramientas como las de la aplicacin Diseando Filtros Fcilmente y obtener los

APLICACIN 4: MANEJANDO LAS INSTRUCCIONES TPICAS DE LOS dsPIC

231

valores x com o resultado de una conversin analgico digital de una seal de entrada, para as ob tener rpidam ente la seal de salida filtrada. Una m uy parecida es la instruccin MSC, idntica a la m ac, pero que en vez de acum ular va res tando el resultado de la m ultiplicacin al acum ulador (ACCA = ACCA - X Y).

A4.3.1. Otras formas de inicializar los programas El ejem plo anterior, inicializaba parte del espacio X y parte de la m em oria Y de datos con ciertos valores. Se puede realizar otro tipo de inicializaciones en los program as.
E je m p lo de in ic ia liz a c i n de m em oria de datos

;Scccin de datos del espacio X. Coeficientes b0,bl,b2 y b3 .section coeficientes, data, xmemory, address(0x0800) bi: .hword 0x000 L 0x0003, 0x0007, 0x0001 Seccin de dalos del espacio Y. Xn, Xn.-l, Xn-2, Xn-3 .section inputs, data, ymemory. address(OxOCOO) xn: .hword 0x0002, 0x0005, 0x0002. OxOOOF

Para realizar la inicializacin se ha utilizado la directiva .section, luego se asigna un nom bre a dicha seccin y se debe especificar si los datos pertenecen a la seccin de cdigo ejecutable (.text ), seccin de datos no inicializados (.bss) o seccin de datos inicializados (.data). En nuestro caso, son datos que se han inicializado con un valor, de ah que se haya elegido data. Por ltimo, se elige el espacio donde se quieren inicializar esos datos. Se utilizar .xm em ory pa ra indicar que los datos se alojan en el espacio X, .ym em ory para indicar que los datos se guardarn en el espacio Y o .n e a r para indicar que los datos se guardarn en la m em oria cercana. Slo falta indicar a partir de qu posicin de m em oria se guardarn los datos m ediante . adress .

.section
.section

Coeficientes
Nombre asignado

data
Seccin del programa

Xmemory
Localizacin de los datos .. . ; Ymemory: datos en espacio Ynear: datos en memoria cercana

address(0 x0800 )
Direccin de memoria

ti la seccin

_ y

bss: Datos no inicializados.

La siguiente lnea m uestra cm o siguiendo a la especificacin del tipo de dato a inicializar, se in troducen dichos datos. bi: .hword 0x0001, 0x0003, 0x0007, 0x0001 Para obtener la direccin de los datos bi se utilizar la instruccin mov #bi, WREG0.

232

dsPIC. DISEO PRCTICO DF APLICACIONES

AUTOEVALU A C I N Conceptos clave de este captulo

/. Qu significa que una instruc. i i 4. Para qu sirve la instruccin mac?

.... Ejercicios

b lX iy f

b 2 X n .2 ~

b -jX n -s

i rul se dan los siguientes coeficientes:

b ;
.V /.V .SV.V.VV/AVAVAY.N VAVV.V/,

||
*n OxOOFF 0x0005 0x0002 OxOOOF

0x0001 0x0003 0x0007 0x0001

vv^A'X

Procure hacer el pro nuevas instrucciones DSP.

M A;:

APLICACIN

y escribiendo las memorias FLASH y EEPROM


A5.1. MANEJANDO LA MEMORIA DE PROGRAMA FLASH Existe la posibilidad de guardar datos en la memoria de programa FLASH y para su manipulacin se requiere poder leer y escribir los mismos. Los dsPTC disponen de dos recursos para el acceso a datos en la memoria FLASH: las instrucciones de Tabla y el PSV, que ya se han estudiado en la pri mera parte de teora. Los controladores dsPlC, disponen de varias instrucciones para el manejo de tablas. Median te estas instrucciones se pueden leer y escribir datos en la memoria de programa. A continuacin, se describe el funcionamiento de estas instrucciones mediante la elaboracin de un ejemplo y su co rrespondiente simulacin. Este ejemplo simplemente cargar en los registros W1 y W2 los datos de una posicin de la me moria de programa, la posicin 0x00300. Recordemos que las posiciones de memoria se componen de 3 bytes, por eso se necesitan 2 registros de 16 bits para guardar los datos. Ms concretamente, se guardar en la parte baja de W1 el byte ms alto de la direccin 0x00300 y los bytes ms bajos de dicha posicin en W2. El siguiente ejemplo muestra cm o acceder a la posicin 0x00300 utilizan do instrucciones de Tabla.
PROGRAMA TABLAS Lectura de la memoria de programa. .include M p30f4013.inc" .global main
. le x l

jmaii: ;S carga en TBLPAG el nmero de pgina : de la memoria a leer MOV #tblpace (#0x00300), W0 MOV W0, TBLPAG ;Hay que mover a WO, ei desplazamiento dentro ;de la pgina que se desea leer MOV #tbloffset (#0x00300), W0
233

234

dsPIC. DISEO PRCTICO DE APLICACIONES

Una vez establecida la direccin de la m emoria FLASH, se utiliza la instruccin TBLRDH (Lectura palabra alta de Tabla) para acceder al byte alto de la memoria de programa y TBLRDL (Lectura palabra baja de Tabla) para leer los 2 bytes ms bajos de la direccin de programa.

; A continuacin se carga en W1 el byte ms alto de la memoria de programa TBLRDH [WO], W1 ; En W2 se depositan los 2 bytes ms bajos de la memoria de programa TBLRDL [WO], W2 nop .end

Compile el programa y ponga un punto de parada en la primera lnea del mismo. A continuacin acceda al men View-> Program Memory y vaya hasta la posicin de memoria 0x00300 (atencin, esta direccin est expresada en hexadecimal, no se confunda con la posicin 300 en decimal) y cambie el valor por defecto FFFFFF por 123456. Ejecute el programa paso a paso debiendo en W 1 el valor 0x0012 y en W2 el valor 0x3456. La escritura en la memoria FLASH es un poco ms complicada que la lectura. Se puede realizar en bloques de 96 bytes que se corresponden con 32 instrucciones. A este bloque se le denomina fi la. Para programarlo se usa un algoritmo que se describe a continuacin, en el que existe una se cuencia de control que se debe seguir exactamente para realizar el proceso de grabado. 1er paso: Borrar el contenido de los 96 bytes que se van a escribir en la memoria FLASH. Pa ra ello, a su vez, se seguir el siguiente algoritmo: 1.1. M over al registro de control NVMCON el valor 0x4041, que significa que comienza una operacin de borrado de memoria FLASH. 1.2. M over la direccin de la memoria a borrar a los registros NVM ADRU y NVMDR. En NVMADRU se guarda el byte ms alto de la direccin a borrar y en NVMDR los dos bytes de menos peso de esa misma direccin. 1.3. Cargar 55 al registro de control NVMKEY. 1.4. C a rg a r4 A A al registro de control NVMKEY. Esta doble escritura en NUHKEY es un control de seguridad. 1.5. Poner el bit WR del rcgsitro NVMCON a 1. Cuando la operacin de grabado finalice dicho bit pasar a 0 automticamente. 2 Paso: M ediante las instrucciones de manejo de Tabla TBLWTL y TBLWTH, cargar las po siciones a grabar con los datos deseados. Los 96 bytes, ordenadamente. 3er Paso: Se escriben los 96 bytes mediante el siguiente algoritmo: 3.1. M over al registro de control NVMCON el valor 0x4001. que indica el comienzo de una operacin de grabado de memoria FLASH. 3.2. M over #0x55 al registro NVMKEY. 3.3. M over #0xAA al registro NVMKEY. 3.4. Poner el bit WR del registro NVM CON a 1. Esperar a que se ponga a cero y en ese momento se habrn grabado en la memoria de programa los 96 bytes.

Para programar ms lneas de memoria bastara con repetir este algoritmo las veces que fuera ne cesario. A continuacin se presenta el cdigo correspondiente a este algoritmo.

APLICACIN .5: LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM

235

PROGRAMA GRABAFLASII .include np30f4013.inc" .GLOBAL _main .text main: ; SECUENCIA DE BORRADO MOV MOV MOV MOV MOV MOV DISI MOV MOV MOV MOV BSET NOP NOP #0X4041,w() W0,NVMCON #tblpage( #0x300), W0 W0,NVMADRU #tbloffsei(#0x300).w0 W0. NVMADR #5 #0X55,W0 WUNVMKEY #0XA*W0 W0,NVMKEY NVM CON ,#0XF CARGAMOS EN NVMCON 0X4041 PARA INICIAR EL BORRADO ;MOVEMOS A NVMADRU ;LA PGINA DE MEMORA DE LA DIRECCIN A BORRAR MOVEMOS A NVMADR ;LOS 2 BYTES DE MENOS PESO DE LA DIRECCIN ;DESHABILITAMOS INTERRUPCIONES EN 5 INSTRUCCIONES MOVEMOS LA SECUENCIA ;DE 55 Y AA AL REGISTRO DE CONTROL NVMKEY, COMO CLVE DE SEGURIDAD ACTIVAMOS EL BIT WR (EL BIT 15 DE NVMCON) ;PARA QUE SE INICIE LA GRABACIN DEBEMOS INTRODUCIR 2 NOPS

; CARGA DE LOS DATOS EN MEMORIA : RELLENAMOS LA FILA COMPLETA DE 96 BYTES MOV MOV MOV #0X(),W() WO.TBLPAG #0x300, W0 MOVEMOS A TBLPAG LA PGINA DE MEMORIA DE LA DIRECCIN A ESCRIBIR DEJAMOS EN W0 EL DESPLAZAMIENTO DENTRO DE LA PAGINA ;CARGAMOS EN W2 LOS 2 BYTES DE MENOS PESO A GRABAR ;CARGAMOS EN \V3 EL BYTE MAS ALTO A GRABAR ESCRIBIMOS EN LA DIRECCION APUNTADA POR W0 EL ;CONTENIDO W2 EN LA PARTE ALTA EL CONTENIDO DE W3 REPETIMOS ESTE PROCESO CON LAS 31 INSTRUCCIONES RESTANTES. EN TOTAL. 32 VECES CARGAMOS EN W2 LOS 2 BYTES DE MENOS PESO A GRABAR CARGAMOS EN W3 EL BYTE MAS ALTO A GRABAR ESCRIBIMOS EN LA DIRECCION APUNTADA POR W0 EL CONTENIDO W2 EN LA PARTE ALTA EL CONTENIDO DE W3 CARGAMOS EN W2 LOS 2 BYTES DE MENOS PESO A GRABAR CARGAMOS EN W3 EL BYTE MAS ALTO A GRABAR ESCRIBIMOS EN LA DIRECCION APUNTADA POR W0 EL CONTENIDO W2 EN LA PARTE ALTA EL CONTENIDO DE W3

; PRIMERA INSTRUCCION MOV #0x1111,W2 MOV #0X0012,W3 TBLWTL W2,[W0] TBLWTH W3.[W0++J

; SEGUNDA INSTRUCCION MOV #0x 1111,W2 MOV #0X0011AV3 TBLWTL W2,[W0J TBLWTH W3,[W0+4*] ; INSTRUCCION 3 MOV #0x1111,W2 MOV #0X001LW3 TBLWTL W2.[W01 TBLWTH W3.| W0++]

236

dsPIC. DISEO PRCTICO DE APLICACIONES

Se debe repetir el cdigo de las 4 instrucciones finales hasta completar las 32 instrucciones a gra bar. En todas ellas se est grabando el mismo dato #0x l i l i l en la posicin de memoria indicada.

; INSTRUCCION 32 MOV #0x 111 l,W2 MOV #0X001LW3 TBLWTL W2,[W0] TBLWTH W3,[W0++]

CARGAMOS EN W2 LOS 2 BYTES DE MENOS PESO A GRABAR CARGAMOS EN W3 EL BYTE MAS ALTO A GRABAR ESCRIBIMOS EN LA DIRECCION APUNTADA POR W0 EL CONTENIDO W2 EN LA PARTE ALTA EL CONTENIDO DE W3

; PROCEDIMIENTO DE ESCRITURA MOV #0x4001, W0 MOV WO,NVMCON DISI #5 MOV #0X55,W2 MOV W2.NVMKEY MOV #0XAA,W 1 MOV W 1,NVMKEY BSET NVMCON,#WR NOP NOP ESPERA2: BTSC NVMCON,#WR GOTO ES PER A2 NOP .end INDICAMOS AL REGISTRO NVCOM CON EL DATO 0X04001 QUE DESEAMOS GRABAR DATOS EN MEMORIA FLASH DESHABILITAMOS INTERRUPCIONES EN 5 INSTRUCCIONES GENERAMOS LA SECUENCIA DE CONTROL DE SEGURIDAD 55 Y V\A EN NVMKEY

ESTABLECEMOS A 1 EL BIT WR DE NVMCON PARA QUE SE INICE LA GRABACIN Y ESPERAMOS CON 2 NOP AS MISMO ESPERAMOS A QUE EL BIT WR PASE A 0 PARA SEGUIR CON EL PROGRAMA

Se puede ejecutar el programa y observar su resultado con el simulador. Para ello se recomien da establecer 3 punios de ruptura. El primero se coloca en la primera instruccin del programa, el segundo en la prim era instruccin de carga de datos en memoria, y el ltimo en la ltima instruc cin NOP del programa. Al comenzar la simulacin y pararse el programa en la prim era instruccin, se puede acceder a la memoria de programa para modificar la posicin en la que se van a grabar los datos, posicin 0x00300, y sustituir el valor OxFFFFFF por otro, por ejemplo, Ox AAAAAA. Al seguir la simulacin hasta el siguiente punto de ruptura, se debe observar cmo el valor de di cha posicin de memoria ha cambiado por el valor OxFFFFFF. Y por ltimo, al llegar a la ltima instruccin de programa, se observar cmo desde la posicin 300 hasta la posicin 33E el valor almacenado en la memoria FLASH es 0x111111. (Figura A5.1.) La posibilidad de escribir en la memoria de programa, sin necesidad de cam biar el voltaje su ministrado al dsPIC, le proporciona un potencial importante. Se puede proporcionar al dsPIC una circuitera auxiliar para su conexin va serie con un ordenador y cargarle con un programa que re ciba los datos por dicho puerto, los escriba en la memoria de programa y transfiera el control de la ejecucin a dicha posicin de memoria. As, se podra grabar al dsPIC sin ms circuitera que la de un puerto serie, con el consiguiente ahorro correspondiente.

APLICACIN .5: LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM


rogram M emory:/

237

Dis& sse
384 385 386 387 388 389 390 391 392 393 394 395 002 F E 00300 00302 00304 003 06 00308 0030 0 03 0C 003 0 E 00310 00312 00314 00316 00318 0031A 0 0 3 1C 0 03 1E 00320 00322 00324 0032 6 0032 8 003 2 A 0 03 2C 0032E 00330 00332 00334 FFFFFF noe r nopr s u b r .u su b r. w su b r. w s u b r .w su b r. w s u b r .w s u b r .v su b r. v su b r. v su b r. u s u b r .n su b r . w su b r. w 3 u b r. w su b r. w s u b r .w su b r. w 3 u b r. w su b r. v su b r. v s u b r .w su b r. w su b r. u su b r. v s u b r . su b r . w su b r. w 3 u b r. w su b r. w su b r. w su b r. w su b r. v nour u 2 , [ w l ] , [ w2 ] w 2 ,[ w l] , [vZ ] v 2 ,[ v l] ,[ v 2 ~ ] w 2 , [ w l ] , [w 2 J v Z , [w l] , [ w 2 ~ ] 2 , [ w l ] , [w 2 ] u 2 , [ w l ] , [WZ ] w 2 , [ V i ] , [w 2 ] W2, [ u l ] , [w 2 ] w2, [ w l ] / [ w2 ] w2# [ w l ] , [ w 2 ] w 2 , [ w l ] , [w 2 ] u2 [ W l] , [ w2 ] v 2 , [ w l ] , [ w2 ] V 2 , [w l] , [ v 2 ] w 2 ,[ w l] ,[ v 2 ] w 2 , [w l] , [ v 2 ] w 2 , [ w l ] , [w 2 ] W2, [ w l] , [w 2 ] w 2 , [ w l ] , [w 2 ] 2 / [^ 1 ] / [W2 ] w2 , [ u l ] , [ w2 ] v 2 , [ w l ] , [ w 2 --] v2 , [ w l ] , [w 2 ] w2 , [ w l ] , [ w2 ] w 2 , [ w l ] , [W2 ] w 2 , [W l] , [ w2 ] W 2 , [ w l ] / [w 2 ] w 2 , [ w l ] , [ w2 ] w 2 , [ w l] , [ w2 ] w2 , [ v i ] , [w 2 ] w 2 , [ u l ] , [w 2 ] 1 11 11 1 l l l l l l 111111 l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l 396 l l l l l l 397 l l l l l l 398 l l l l l l 399 l l l l l l 400 l l l l l l 401 l l l l l l 402 l l l l l l 403 l l l l l l 404 l l l l l l 40S l l l l l l 406 l l l l l l 407 l l l l l l 408 l l l l l l 409 l l l l l l 410 l l l l l l 411 l l l l l l 412 l l l l l l 00336 413 00338 l l l l l l 0033 A 414 l l l l l l 0033C 415 l l l l l l 416 0033E l l l l l l FFFFFF 417 00340 Machine il SjfrboSc PSVMixedl PSV Data j

Figura A5.1. Resultado de la memoria FLASH de programa tras su programacin.


A5.2. M ANEJANDO LA M EM ORIA DE DATOS EEPROM

La lectura de la memoria EEPROM se diferencia con respecto a la de FLASH en que se leen los da tos de 2 en 2 bytes, en vez de 3 en 3 bytes. Para realizar la lectura se escribir en TBLPAG el n mero de pgina de la memoria EEPROM y en WO el desplazamiento dentro de dicha pgina y lue go con una simple instruccin TBLRDL se leer el dato. La EEPROM que slo est disponible en la fam ilia dsPIC3()F com ienza en la posicin 0x7FFC00. Se propone elaborar un programa que lea dicha posicin. Para simularlo hay que cam biar previamente el valor contenido en dicha posicin de memoria.

ion de memoria

;MOVEMOS LA PAGINA DE LA DIR. A TBLPAG ;EL DESPLAZAMIENTO A WO CARGAMOS EN W4 EL DATO LEIDO ;NOP PARA PONER UN PUNTO DE RUPTURA

238

dsPIC. DISEO PRCTICO DE APLICACIONES

HI mismo ejemplo en lenguaje C sera el siguiente:

// T,cc EEPROM en C #include p3f4013.h' mt main(void) TBLPAG = 0x7F: WREGO = OxFCOO; asm("TBLRDL [W0],W4M ) rcturn 0:

iii

C *v> .

Puede observarse en este ejem plo en C que, a veces, es necesario introducir ciertas instruc ciones especficas del lenguaje ensam blador en los program as en C. Para ello utilizam os la sentencia asm (instruccin), donde instruccin es la instruccin en ensam blador que no desea incluir. La grabacin en la memoria EEPROM tiene muchas similitudes con la grabacin en la memo ria FLASH. Cuando se graba esta memoria, se puede grabar una palabra de dos bytes o una lnea de 16 palabras (32 bytes). A continuacin, se describe el algoritmo de grabacin de una palabra en la memoria EEPROM: 1e r paso: Borrar la palabra de la EEPRO M a programar. Este paso se subdivide en los siguientes: 1.1. M over al registro de control NVM CON el valor 0x4044, que indica que comienza una operacin de borrado de memoria EEPROM. 1.2. M over la direccin de la memoria a borrar a los registros TBLPAG y W0. 1.3. M over 55 al registro de control NVMKEY. 1.4. M over A A al registro de control NVMKEY. 1.5. Poner el bit WR del regsitro NVMCON a 1. Cuando la operacin de grabado fina lice, dicho bit pasar a 0 automticamente.

2o Paso: M ediante la instruccin de m anejo de tabla TBLW TL, escribir la palabra a


program ar

3er Paso: Programar la palabra el siguiente algoritmo:


3.1. M over al registro de control NVM CON el valor 0x4004, que significa que comien za una operacin de grabado de m emoria EEPROM. 3.2. M over #0x55 al registro NVM KEY 3.3. M over #0xAA al registro NVMKEY. 3.4. Poner el bit WR del registro NVMCON a 1. Esperar a que se ponga a cero y en ese momento se habr grabado en la memoria EEPROM dicha palabra. El siguiente ejemplo muestra la programacin de una posicin de memoria EEPROM. El pro grama lee la posicin de memoria 0x7FFC00, suma 1 al contenido de dicha posicin de memoria y lo vuelve a grabar. Este programa podra ser de utilidad para lanzar una versin dem o de un pro grama, el cual podra ejecutarse un nmero determinado de veces.

APLICACIN .5: LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM

239

;EjempIo de PROGRAMACIN de una posicin de memoria ;PROGRAMA GRABA EEPROM .include p30f4013.inc" .global _main .tcxt main: ; APUNTAMOS MEDIANTE TBLPAG Y WO A LA POSICIN 0X7FFC00 MOV #tblpge(#Ox7FFCOO)>WO MOV WO.TBLPAG MOV #tb 1 offse t(#0x 7FFC00). W0 ; Loemos el dato EEPROM Y LO GUARDAMOS EN W4 TBLRDL | W0|,W4 : LE SUMAMOS 1 A DICHO VALOR MOV #1,W3 W4,W3.W4 ADD ;BORRADO DE DIRECCION EEPROM #0X4044, W O PROGRAMAMOS NVMCON PARA BORRAR PALABRA EEPROM MOV WO. NVMCON MOV MOV #tblpage(#0x7FFC00),W0 ;APUNTAMOS CON TBLPAG Y WO LA DIR. A BORR. WO,TBLPAG MOV MOV #tbloffset(#0x7FFC00),Wr0 ;DESHABILITAMOS INTERRUPCIONES EN 5 INSTRUCCIONES #5 DISI ;MOVEMOS LA SECUENCIA MOV #0X55,W0 ;DE 55 Y AA A MOV W0,NVMKEY MOV #0XAA,W0 ;AL REGISTRO DE CONTROL ;NVMKEY MOV WO,NVMKEY :ACTVAMOS EL BIT WR (EL BIT 15 DE NVMCON) BSET NVMCON,#WrR ;PAR A QUE SE INICIE EL BORRADO NOP ;DEBEMOS INTRODUCIR 2 NOPS NOP ;AS MISMO ESPERAMOS A QUE EL BIT WR ESPERA2: BTSC NVMCON,#WR ;PASE A 0 ;PARA SEGUIR CON EL PROGRAMA GOTO HSPERA2 NOP #tblpage(#0x7FFC00),W0 ;APUNTA MOS A LA DIRECCION A GRABAR MOV WO,TBLPAG MOV #tblofsel(#0x7FFC00),Wa) MOV ESCRIBIMOS EL DATO A GRABAR EN EL REGISTRO TBLWTL W4. [WOJ ;SECUENCIA DE GRABACIN ;EN NVMCON PROGRAMACION DE EEPROM #0X4(304,WO MV Wr0. NVMCON MOV ;DESHABILITAMOS INTERRUPCIONES EN 5 INSTRUCCIONES DISI #5 :MO VEMOS LA SECUENCIA MOV #0X55,WO :DE 55 Y AA A MOV W0. NVMKEY ;AL REGISTRO DE CONTROL MOV #0XAA,W0 ;NVMKEY MOV W0,N VM KEY ;ACTIVAMOS EL BIT WR (EL BIT 15 DE NVMCON) BSET NVMCON,#WR ;PARA QUE SE INICIE LA GRABACIN NOP :DEBEMOS INTRODUCIR 2 NOPS NOP :AS MISMO ESPERAMOS A QUE EL BIT WrR ESPERA: ;PASE A 0 BTSC NVMCON,#WR ;PARA SEGUIR CON EL PROGRAMA GOTO ESPERA NOP .cnd

240

dsPIC. DISEO PRCTICO DE APLICACIONES

Simule el programa con el MPLAB SIM y, a travs de la ventana View->EEPROM , compruebe cmo cambia el valor cada vez que se ejecuta el programa. El mismo programa en C puede resultar ms fcil de entender.

// Graba EEPROM en C // PROGRAMA GRABAEEPROMC #include p30f4013.h"

int sccuenciagrabacionQ // Esta funcin escribe la secuencia de grabacin // tanto para borrado como para grabacin TBLPAG = 0x7F: WREGO = OxFCOO; NVMKEY = 0x55; NVMKEY = OxAA; N V MCON bits. WR= 0x1 asmCNOP1 ); asm(,,NOP,r); return 0; //Apuntamos la pgina //Apuntamos el desplazamiento en la pgina //Movemos a NVKEY la secuencia 55 //Movemos a NVMKEY la secuencia A A //Activamos el bit WR de NVMCON //Esperamos 2 nops

% * # + ## s f c // Programa principal : < * * * *---*** **-Jf* **

i 1

int main(void) l int. a = 0; TBLPAG = 0x7 F; WREGO = OxFCOO; asmCTBLRDL [W0],W4B ); WREG4 = WREG4 + 1; NVMCON = 0x4044; a = secuenciagrabacion(); while(NVMCONbits.WR == 1); TBLPAG = 0x7 F; WREGO - OxFCOO; asmC'TBLWTL W4, [W0]M ); NVMCON = 0x4004; a = secuenciagrabacion(); whi le(N VMCONbi ts.W R == 1): return 0; !

//Variable auxiliar //Apuntamos a la pgina de la direccin a leer //Leemos el dato en WREG4 //Sumamos 1 a WREG4 //Configuramos NVMCON para borrar EEPROM //Ejecutamos secuencia borrado/grabacin //Esperamos al bit WR de NVMCON sea 0 //Apuntamos a la pgina de la direccin a leer //Apuntamos el desplazamiento en la pgina //Escribimos en el registro el cont. de W4 //Configuramos NVMCON para grabado EEPROM[ //Ejecutamos secuencia borrado/grabacion //Esperamos al bit WR de NVMCON sea 0

N tese que en el lenguaje C para acceder a la inform acin de los bits de cualquier registro, se de be escribir el nom bre de registro acom paado de la palabra b its y a continuacin, tras un punto de separacin, el bit al que se desea acceder. A s, por ejem plo, para poner a 1 el bit W R del registro N V M C O N se escribe lo siguiente: N V MCON bits. WR = 1;

APLICACIN 5: LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM

241

El simulador del entorno de desarrollo MPLAB IDE es una herramienta muy com pleta donde se pueden simular casi todas las caractersticas que presentan los controladores dsPIC. Esto convierte a esta herramienta en una plataforma de aprendizaje y de ensayo de proyectos inmejorable.

AUTOEVALU A C I N Conceptos clave de este captulo

Ejercicios
/

mov # 0x0002, WJ add WO, WJ, WO

Movemos un 2 al registro WJ ;Sumamos el registro WO y W y dejamos ;el resultado en WO

APLICACION

los perifricos con Visual Initializer


A6.1. IN T R O D U C C I N

A lo largo del presente tema, se abordarn distintos ejemplos en los que se utilizan los perifricos que se hallan integrados en el dsPIC. Muchas de las patitas del controlador soportan distintas fun ciones. Los perifricos pueden desarrollar distintas tareas en funcin de cmo sean configurados. Para facilitar esta tarea de la inicializacin de perifricos del controlador (puertas de entrada/salida, conversores analgicos, temporizadores, etctera) el entorno de desarrollo MPLAB IDE dispone de una herramienta denominada Visual Initializer , VDI o Inicializador Visual. Mediante el uso del VDI se profundizar en la programacin de los controladores dsPIC, reali zando ejemplos en los que se utilizan diversos perifricos. Siguiendo con la filosofa de esta parte de la obra, la ejecucin de estos programas se har de forma simulada, as por ejemplo, para el uso de las puertas de entrada/salida se har uso de las ven tanas de inspeccin de manejo de los datos que deberan llegar desde el exterior al controlador y viceversa.

A 6.2 . V IS U A L IN IT IA L IZ E R

El Visual Initializer o VDI es una herramienta que incorpora el MPLAB IDE para simplificar en la difcil tarea de la configuracin del dsPIC. El programa Visual Initializer hace que esta tarea sea tan fcil como pinchar y arrastrar iconos y cambiar los parmetros en un cuadro de dilogo. Una vez completada esta labor, genera el cdigo necesario para usar tanto en los programas en ensamblador como en lenguaje C. Tambin com prueba si existe algn tipo de inconsistencia en las configuraciones y genera mensajes de error en caso de existir conflictos en las asignaciones de patitas, m em oria, interrup ciones, etc. Para acceder a esta herramienta, resulta recomendable empezar un proyecto para tener seleccio nado el tipo de dsPIC con el que se desea trabajar y as la aplicacin Visual Initializer muestre las opciones de los perifricos especficos de dicho controlador.
243

244

dsPIC. DISEO PRCTICO DF APLICACIONES

Una vez arrancado el proyecto mediante el men Tools->4 Visual lnitializer se pone en marcha esta utilidad. Al hacerlo, puede comprobarse como en el men de la aplicacin MPLAB IDE apa rece un nuevo elemento. (Figura A 6.1.)
Visual Initializer SLI HELP View Errata View Data Sheet Setup Report Interrupt Usage Report SFR Usage by Address Report 5FR Usage by Name Report Pin Assignment Report Code Generation Options Code Generation Configure Window

Figura A6.1. Men c/e la aplicacin Visual Initializer.

Adems del nuevo men tambin aparecer en pantalla la ventana principal de esta herramien ta. (Figura A6.2.)

M P l AtJ ID L V / . 3 0 F ls D Edt C fa ycw ;

[V is u a l I n il i a lb e r ] O = tosqst S Procrammsr f | d ' Tate 9 Vsuol I n t i e l r 19 ( # $ Cor/gu-s i Window Heto 0x b f 6 7 ! t> ii ?>

'

P/ojetfc S

mamamama . e x

Checksum :

1 ; : i &

r* 1B T i3 nI (= = 3
" 'ft:ii
GEI PW M

Q y Q ijjy M l

d sP C 3 0 F 4 n i34 4 -P nT O F P pm 9d
OieiWo InlenupU n d t ip:

L
.M -

nr

1B T i rr a
r ~tt

a wm B

SE

CAN

3yrrp
M&AP.-SIM d s P I C ttiH O lj ; p c :0 o a b & a b lP O : d c n .o v .z c

Figura A6.2. Pantalla principal de la herramienta Visual lnitializer.

APLICACIN 6: PROGRAMANDO LOS PERIFRICOS CON VISUAL INITIALIZER

245

Al observar la ventana de la Figura A6.2, puede comprobarse que el dsPIC que aparece en pan talla no es el correcto. En la aplicacin 0 se acord utilizar el dsPIC30F4013 pero con encapsulado PDIP y el mostrado en pantalla no tiene dicho encapsulado. El encapsulado puede cambiarse con el botn derecho sobre la representacin del controlador en la ventana y pulsando la opcin Change package. Entonces aparecer en pantalla un cuadro de dilogo con una lista desplegablc denomina da Package type y habr que elegir 40 Pin-PDIP.
MPLAB IDE V 7 .3 0
Re

[V isual In itia liz e r]


Debugger Progranrer Took Visual Jntislzer Configure Window Meb

(Tdt View Project

Checksum:

0xb67

E>t. Interface Op Amp 45?K3Cf*0):< pc:fl

o ib H b lP O:acn'ovtc

Figura A6.3. Encapsulado PDIP del dsPIC30E4013 de 40 pines.

Tras esta operacin, el encapsulado del dsPIC pasa a ser el de la Figura A6.3. Esta pantalla se encuentra dividida en 2 partes. La prim era, situada verticalm ente en la parte izquierda, con tiene las distintas opciones configurables del controlador (RTC, DSP. I/O P orts,...). El resto de la ventana, donde aparece el controlador, sirve para representar grficam ente los elem entos inicializados en el mismo. Es im portante ensanchar la pantalla verticalm ente ya que de lo contra rio al pinchar en las opciones de la izquierda podra no desplegarse ninguna opcin por falta de espacio. Para configurar cualquier perifrico hay que seleccionarlo en el panel de la izquierda y arras trarlo sobre la representacin del controlador. Al soltarlo, aparecer un icono sobre el controla dor. A continuacin, haciendo doble clic sobre dicho icono, aparecer un cuadro de dilogo que hay que cum plim entar para configurar dicho perifrico. En cualquier momento, para volver a configurar esos parm etros, puede volver a hacerlo haciendo doble clic sobre el icono aadido al controlador. (Figura A6.4.)

246

dsPIC. DISEO PRCTICO DE APLICACIONES

d s P IC 3 Q F 4 0 1 3 4 0 -P in P D IP

Oscillator

Inteiiupts and Traos

Port B

Port B
Poit Pin Settings p io [R B I H~RB2 il RB3 ji RB4 | RB5 RB6 -;??

Data Direction Initial Value

1Unclaimed 1

Ext. Interface dp Amp

Figura A6.4. Configuracin de los pines de la puerta B.

Para elim inar una configuracin, basta con arrastrar el icono creado en el controlador a una par te de la ventana vaca, y as desparecer. Una vez configurados todos los perifricos necesarios de esta forma tan fcil e intuitiva, tan slo falta aplicar estos cambios sobre el proyecto. Para ello, se dispone de varias opciones confi gurables. Desde el men Visual Initializer->Code Generarion Options se pueden configurar las opciones del cdigo a generar. (Figura A6.5.)
Code Generation Options

[Q

Q Generate code only when initialization values do not match POR states Generate code only for featuresAesources on processor package

I I Comment on code not generated Generate Read-Modiiy-Write instruction sequence for SFR initialization

Help

OK

Cancel

Apply

Figura A6.5. Configurar la salida de cdigo.

Entre otras opciones, se debe indicar al generador de cdigo que slo genere el cdigo de aque llas funcionalidades que disponga el controlador utilizado, marcando la opcin Generate code only fo r features/re sources on processor package de dicha pantalla.

APLICACIN 6: PROGRAMANDO LOS PERIFRICOS CON VISUAL INITIALIZER

247

Una vez configuradas las opciones de generacin de cdigo, se puede generar dicho cdigo me diante la opcin Visual Initializer->Code Generation. Aparecer el cdigo en pantalla y se podr salvar dicho cdigo, incorporarlo al proyecto o copiar la parte que se desee e incorporarla al cdi go fuente. (Figura A6.6.)

I Code G en eratio n Display N H H H B


A

; In itializatio n C ode for dsPIC 30F4013. Fam ily: co n tro ller control. P ack ag e: 40-Pin PDIP 4 0 p in s .include "p 3 0 F 4 0 1 3 .m c

j; Filter C ontrols u s e d to G e n erate Code: j; PO R M atch Filter OFF ; P ro v isio n e d F eatu re Filter ON ; M a sk s a re Ignored and u s e s U nM asked R e g iste r W rite s .GLOBAL _ V isuallnitialization ; F e a tu re = fu s e s - f u s e s (DCRJ configuration !: B15:14=FSCK M 1:0 B 10:8=FO S2:0 B 4:0=FPR4:0 c o n fig __FOSC, OxCI 00 : B15=FW DTEN B5:4=FW PSA1:0 B3:0=FW PSB3:0 c o n fig __ FWDT, 0 x803F I: R1fi=MCI RFN R7=RORFN R5:4=RORV1 :fl R 3:n=FPW RT3:0
Help I

fSi
} Save to Project ] [ Close Window |

Figura A6.6. Cdigo generado por la herramienta Visual Initializer.

A 6 .3 . C O N T R O L A N D O EL M U N D O EXTERIOR. PUERTAS DE E/S

Como primer ejemplo, se acomete la creacin de un proyecto con el VDI. Recibir una seal digi tal por una patita procedente, por ejemplo, de un interruptor y sacar por otra patita el valor inver tido de la entrada del controlador que se usa para encender o apagar un lcd. Para poder llevar a cabo este proyecto, se debe configurar una patita del controlador como en trada y otra como salida. Despus el programa slo deber leer el valor de la patita de entrada, in vertir dicho valor, y mostrarlo por la patita de salida. Cree un proyecto para el controlador dsPIC 30F4013 y acceda al men Visual initializer. En la barra vertical de la derecha elija la opcin I/O Ports. Al hacerlo, bajo este epgrafe, aparecern dis tintos iconos de las distintas puertas que dispone el controlador. Elija la puerta D (port D) y arrs trela hasta el controlador. A continuacin haga doble clic sobre el icono de la puerta D arrastrada hasta el controlador y aparecer el cuadro de dilogo de la Figura A6.7. En la pestaa RDO de la Figura A6.7 se configura el PINO de la puerta D, de form a que sea la entrada en la que se conectar el interruptor. Para ello, en la lista desplegable Data Direction , seleccione Input. En la pestaa RD1, configu re el PIN1 de la puerta D como salida, output en la lista Data Direction , para colocar all el led co rrespondiente. Al finalizar pulse Ok. (Figura A6.8.)

248

dsPIC. DISEO PRCTICO DE APLICACIONES

- Port Pin Settings RDQ j RD1 Data Direction Initial Value I RD2 | RD3 R08 {; RD9

Help

OK

Cancel

Apply

Figura A6.7. Cuadro de dilogo de configuracin de la puerta D.


V dd

dspc3f413 RDO

//
RD1

FTT71 Figura A6.8. Diagrama de conexionado de las Entradas y Salidas. Ya ha configurado los perifricos del proyecto. Ahora slo queda generar el cdigo correspon diente e incorporarlo al programa. En primer lugar, acceda al men Visual Initializer -> Code Ge neration Options y marque la opcin Generate code only fo r features/resources on processor p a c kage. A continuacin, acceda al men Visual Initializer ->Code Generation para que aparezca en pantalla el cdigo correspondiente. Al pulsar Save to Project se guardar un fichero con dicha inicializacin, que se incorporar a la lista de ficheros del programa. Cierre dicha ventana y la venta na del Visual Initializer para regresar al proyecto. O bserve cm o en el panel del proyecto ahora se encuentra un fichero llam ado init_ dsPiC 30f40l3.s. Ese fichero contiene la rutina de inicializacin. Para llamar a dicha rutina de inicializacin se debe incluir una instruccin cali _VisualInitialization en el cdigo fuente del pro grama. El programa ser el siguiente:

;PROGRAMA PORTO .include ?p30f4Q:l3.inc-? .global jmain .text mam; cali _VisualInitialization

: -

m i ......

APLICACIN 6: PROGRAMANDO LOS PERIFRICOS CON VISUAI INITIALIZER

249

BXJCLH: fiTSS PORTD.#RDO BSET PORTD.#RDl BTSC PORTD.#RDO BCLR PORTD. #RD 1 GOTO BUCLE .end

;Si el bitO de PORTD est a Uno, salta ;Ponemos a l el kit 1 ;Si el bitO de PORTD est a cero, salta ;Ponemos a 0 el bit 1 .Repetimos indefinidamente el bucle

O tambin podemos confeccionar el mismo proyecto en lenguaje C.

//PROGRAMA PORTDC // Programa ejemplo de maneje > . //de puertas de E/S en C tfinciiiue p3ur^yi3>a

int main(void) { VisualInitiali/.ation(): whileC 1) //Bucle infinito if (PORTDbits.RDO == 0) PORTDbits.RDl - 1: else PORTDbits.RDl = 0 ; ) return 0; }

//Inicializamos las puertas

//Si el bit RDO es un 0 //Establecemos nivel alto en RD1 //En caso contrario nivel bajo

El simulador dispone de una utilidad para manejar datos del exterior. Se cambian los datos de la patita RDO de la puerta D. Para llevar a cabo este tipo de actuaciones, se debe crear un escenario en el que se aadirn para este ejemplo dos escenas, una para establecer un nivel alto por la patita RDO y as comprobar cmo reacciona el programa ante dicho estmulo, y otra para establecer un nivel bajo por la patita RDO. Para crear el escenario, se accede al men D ebugger -> Stimulus Controller -> N ew Scenario. Inmediatamente aparece en pantalla un cuadro de dilogo para crcar el escenario. Este cuadro dis pone de varias lneas en blanco para implementar varias escenas. Pinche en la primera fila bajo la etiqueta Pin/SFR y aparecer una lista desplegable en la que podr elegir el pin RDO. En esa misma fila, en la columna Action , seleccione de la lista la opcin Set High para que cuando utilice esta es cena se establezca en el bit RDO un nivel alto. Igualmente, en la fila inferior seleccione RDO y es tablezca una accin Set Low , que har que se cargue un nivel bajo en la patita RDO. El resultado que debe obtener se ofrece en la Figura A6.9. El simulador permite salvar este escenario con la opcin Save Scenario, para que cuando vuel va a abrir este proyecto no tenga que volver a crearlo. Si ahora se simulase el programa paso a paso, se podra cambiar el estado de RDO a nivel alto o a nivel bajo y observar su funcionamiento. Para cam biar a nivel alto o nivel bajo RDO debe pulsar

250

dsPIC. DISEO PRCTICO DE APLICACIONES

S tim u lu s C o n tro lle r - [U n title d ]


Stimulus (SCL) Fe

Attach

I .

Detsrh

inr-pat/Me'e*

Asynchronous Stimulus Fire : Pin / SFR j Action RDO _ Sei High v ! Set Low j Width ; Units Comments / Message

j Delete tow |

Save Scenario [ [

Exit

| [

Heip

Figura A6.9. Creacin de un escenario para actuar sobre las seales externas del controlador.

en el inicio de la fila donde aparece el smbolo > y observar cmo al ejecutar el programa se ejecu tan las instrucciones correspondientes a dicho estado. Utilizando este escenario, compruebe paso a paso el programa y observe si el valor del segundo bit de la puerta D va cambiando de valor, en funcin de si se establece un nivel alto o un nivel bajo mediante el escenario creado.

A6.4. MANEJO DE TEMPORIZADORES. EL SEMFORO

M ediante el siguiente ejemplo se configura un tem porizador para hacer que el controlador acte como un sem foro. Durante cierto tiempo encender un led rojo y durante otro tiempo un led verde. Adems de configurar el tem porizador tam bin se deben configurar 2 patitas del contro lador como salida para encender el led verde y el led rojo. Para ello se utilizarn los pines RDO y RD1. Para configurar estas patitas, se abre el Visual initializer y se cam bia el encapsulado del dsPIC mediante el botn derecho del ratn y la opcin Change Package. A continuacin, se accede a la opcin 1/0 Parts , se selecciona la puerta D y se arrastra hasta la figura del controla dor. Al hacer clic sobre el icono correspondiente a dicha puerta, se podrn configurar RDO y RD1 como salida. (Figura A6.10.) A continuacin se configura el Timer para que el semforo est cierto tiem po en rojo y otro en verde. Pero previam ente es necesario cam biar la frecuencia de trabajo del reloj del controla dor y establecer una frecuencia y un origen del reloj distinto al que trae por defecto el Visual Initializer. Acceda al cuadro de dilogo correspondiente haciendo clic sobre el icono OsciUator. Marque la casilla View Advanced Oscillator Settings y establezca como fuente de reloj Clock Source, Infernal LPRC. Y as la frecuencia del reloj se establecer a 0 ,5 12 Mhz.

APLICACIN 6: PROGRAMANDO LOS PERIFRICOS CON VISUAL INITIALIZER

251

Figura A6.10 .Configuramos las patitas RDO y RD1 como salidas.

Para configurar el temporizador, acceda a la opcin Timer del Visual Initializer, elija el Timerl y arrstrelo hasta el controlador. Pulse sobre el icono del timer y configrelo de la siguiente manera:

Active la casilla Enable on Startup (Habilitar al iniciar). En la casilla Timer Clock Prescale, seleccione 1:256para poder disponer de temporizaciones largas, m En la casilla Timer Period, coloque 1000 para realizar conteos de 1000 milisegundos = 1 segundo.

1.6 Bit Timer 1 Configuration


Operational Sellings 0 Enable on Slaitup O Gsled Time Accumulation Timer Clock Prescale: 1:256 Timet Period: j I imer Frequency: 1000 CPU Idle Operation : Continue

>

Poliscale: 1 ' (msec) (Calc.)

0,00100003690; (KHz)

- Interrupt----------------------------------------------------- 0 Enable Interrupt on Startup Interrupt Priority: j 4 v

Heb

OK

Cancel

Apply

Figura A 6.11. Cofigurac.in del Timer.

Observe la sencillez que supone trabajar con el VDI frente a configurar cada uno de los bits de los registros de configuracin de este recurso. No es necesario recordar todos los bits que intervie nen en la configuracin del mismo, tampoco se deben hacer clculos matemticos para establecer la cuanta del contador para as obtener un perodo determinado.

252

dsPIC. DISEO PRCTICO DE APLICACIONES

La herramienta Visual Initializer ha realizado estos clculos para una frecuencia de reloj estableci da previamente. Esta frecuencia no coincide con la frecuencia que usa el simulador, as que para obte ner el resultado deseado deber cambiar tambin la frecuencia de trabajo del simulador. (Figura A 6.12.)

O sc illa to r C o n fig u ra tio n


Primsy Oscillalo Sellings i----------- Fose (MHz): 0.512 |i Fcy(MHz): 0.128000

lin fe'.(M H z}
0 View Advanced Oscillalof Sellings Advanced Oscillator Sellings Clock Souice: Internal L PRC

Clock Divider: Switching and Monitor Mode: O Enable Aux 32KHz Oscillator

Divide by 1 Switching Disabled, Monilor Disabled v>

Cancel

Figura A6.1 2.Cofiguracin del reloj de la herramienta Visual Initializer.

Seleccione la herramienta MPLAB STM en el men Debugger y en la opcin Sim ulator Settings establezca como velocidad del reloj 0.512 (atencin, no use la coma como separador decimal sino el punto). (Figura A 6 .13.)
S im u la to r S e ttin g s
; IJaill IO. 1? Animation Reallime Updates Break Options Units: 0.512 MHz OKHz OH
z

Limitations

j !

Ose / Trace Processo: Frequency

fi

SCL Options

t Trace Options--------------EU Trace A l O Break on Trace Buffer Full

l Aceptar |

j Cancelar ]

Aplicar

Figura A6.13. Configuracin de la velocidad del simuJador.

Una vez configurado el temporizador y las puerta D como salida slo queda configurar la herra mienta Visual Initializer mediante las opciones Generate code only for features/resources on pro cessor package en el men Visual Initializer -> Code Generation Option , generar el cdigo e in cluirlo al fichero del proyecto.

APLICACIN 6: PROGRAMANDO LOS PERIFRICOS CON VISUAL INITIALIZER

253

La programacin del dsPiC emplea 2 ficheros fuente. Un fichero para el programa principal y otro en el que se atiende a la interrupcin. El programa principal podra ser el siguiente:

;Programa SEMAFORO ;PD0 ROJO, PD1 VERDE .global _main .text _main: cali Visuallnitialization mov #0x000LWO mov W0,PORTD BUCLE: goto BUCLE .end :lnieiali/.amos la puerta D y el Timerl :Ponemos el semforo en rojo

;Nos quedamos en un bucle infinito

G uarde el fichero e incluyalo en el proyecto. A continuacin, cree otro fichero donde se escribir el cdigo correspondiente a la interrupcin generada por el timer.

;PROGRAMA SEMAFORO .global__TJ Interrupt ;Atiende a la interrupcin del Timer 1. Comprueba el estado del semforo y lo cambia de color. T 1Interrupt: ; Borramos el flag de interrupciones. bclr 1FS0,#T1IF ;Si el bitO de PORTD est a Uno salta el rojo btss PORTD,#RD0 ;y pasa a verde goto ROJO VERDE: ;Ponemos verde el semforo mov #0x0002,'W0 mov W0,PORTD goto final ROJO: ;Ponemos a rojo el semforo mov #0x0001.W0 mov w0,PORTD final: ; Return de la interrupcin RETFE

Es importante destacar la instruccin .global__T llnterrupt que indica al compilador la direccin donde debe atenderse a esta interrupcin. As mismo, hay que colocar la etiqueta__T llnterrupt, in terrupcin del Timer 1, antes del cdigo que cambie el semforo de color. Ntese que la etiqueta lle va dos guiones b ajo s_ _ seguidos antes del texto TI Interrupt. La primera instruccin, al atender la interrupcin, debe ser la de borrar el flag de interrupciones mediante la instruccin bclr IFSO, #0X0003 , ya que de no hacerlo, al acabar el cdigo de la inte rrupcin, se volver a ejecutar indefinidamente.

254

dsPIC DISEO PRCTICO DE APLICACIONES

Para probar este programa en el simulador es recomendable colocar 2 puntos de parada, uno co mo siempre en la prim era instruccin del programa principal y otro en la primera instruccin del programa que atiende a la interrupcin del Timer 1. Si adems se aade en la ventana Watch del me n View el registro PORTD, se comprobar como este registro cambia peridicamente pasando de valer 0x0001 (semforo rojo) a 0x0002 (semforo verde). Puede comprobar el tiempo transcurrido entre cada cambio utilizando la opcin Stop Watch y tambin puede ver cmo va cambiando el con tador mientras el programa ejecuta el bucle principal visualizando el valor del registro T M R 1 en la ventana Watch del men View. Es probable que a la hora de ejecutar el programa con el simulador compruebe que el programa se para en una parte del cdigo desconocida. Volviendo a pulsar F9 el programa seguir su ejecucin normal. (Figura A6.14.) UM P ia bm rV 7 .3 0
Fife
Ed:

_lew Frot Debuj' : - *. % A r

~ctis Ccrifij.ro Wttow Wsf


't g ^ c $

; Cr

g j : Checksum : 0xa6da

t I I M > ? T?

&

O V .Ainterrupcion.s jiobal __ T im t rru p t


.in c lu d e ''p 3 0 ? H 0 1 3 . i n c " _ _ T i l r c r Lu c t- : ^ S y n c h | In sbucbon C j d e s

Sfapwateh
9999962 ' 33S3SG2

^ILK IfSO , t l l l f i Reset del fiagde tnCcxup< BTSS POJ>7>,92DU ;x c l fcitO de P0RH> esto a Uno alta ' COTO SDJO U8JB or <0x0002,*0
co r tfO .? O R D

f~ Z c^ nT tr* S ec* 1
Pnx* Frequency fNHz)

1 .3 9 3 5 3 2

".9 S 3 S 8 2
20.000

joto Iu ia jl

V.CJO :
0 7 O x O O O l .V O

Figura A6.14. Visualizando el tiempo con el simulador y la opcin Stopwatch.

Existen muchos tipos de temporizadores, temporizadores de 32 bits, contadores de pulsos exter nos, etc. Todos son configurables desde la herramienta Visual Initializer fcilmente. Pruebe con otros contadores, contar pulsos externos mediante la creacin de escenarios y descubra las posibili dades que ofrecen los controladores dsPTC en este campo. La solucin en lenguaje C puede ser la siguiente:

#xnclude p 0 f4 0 1 3 .h ,t //Programa Semforo en lenguaje C // PROGRAMA SEMAFOROC //Esta funcin atiende a la interrupcin del temporizador void attribute (( interrupt )) _T1 Interrupt void)

{
IFSObits.TlIF = 0; if (PORTDbits.RDO == l) PORTD = 2; else PORTD = I ;

//Borramos el flag de la interrupcin //Si el semforo est a rojo //lo ponemos en verde y viceversa

}
//Programa principal int main (void)

APLICACIN 6: PROGRAMANDO LOS PERIFRICOS CON VISUAL INITIALIZER

255

VisualInitiaUzation(); PORTO = J; while(l) { asm("drwdtM ); ttiM H ia i i.:

//Iniciatizamos puertas y temporizador //Ponemos a rojo el semforo //Esperamos en un bucle infinito

Para conseguir estas temporizaciones se ha jugado con el tipo de reloj empleado. No se han con seguido temporizaciones superiores al segundo. Puede ser interesante hacer uso de temporizadores de 32 bits. El manejo de estos temporizadores se estudia en el Laboratorio 2, Manejo de tempori zadores de 32 bits en la tercera parte de esta obra, donde se consiguen temporizaciones muy supe riores a la comentada con circuitos de reloj ms completos.

A6.5. MANEJO DE INTERRUPCIONES. EL SEMFORO C O N PULSADOR

Una posible ampliacin para el proyecto del semforo podra consistir en dotarlo con un interrup tor para que el peatn solicite que se ponga verde. Cuando el peatn pulse este interruptor que es tar conectado a una patita del controlador, se genera una interrupcin que har que el semforo se ponga rojo para los vehculos. Para llevar a cabo la simulacin de esta nueva situacin es necesario colocar un interruptor conectado a la patita INTO, que provocar que el semforo pase a rojo. Tomando como base el ejemplo anterior hay que incluir una nueva configuracin. La configura cin correspondiente a la interrupcin externa en la patita INTO. Adems se deben estudiar las prio ridades de las interrupciones y proteger la ejecucin de las mismas para que 110 se interrumpan unas a otras. El primer paso ser volver al Visual Initializer y habilitar la interrupcin externa INTO. Para ello no debe arrastrar ningn objeto nuevo sobre el dsPIC ya que la opcin para configurar las inte rrupciones ya se encuentra configurada. Se trata del icono denominado Interrupts and Traps sobre el que haciendo doble clic podr proporcionar el cuadro de dilogo mostrado en la Figura A6.15.
czn tzaj CZH
Grtttfil iriliil yoc* ;abl=: Mein
Ifii:v3l - F U pli'.nly: '

dsP1C H nR I013 4 0 -P in P D IP

Osdlatcc IriciiLpis on d I (oik FoilD

I a 1 E

n
U

1 Interrupts ami 1raps Configuration

0;
'.v .j

. p Tup on carnJetorA ovaifbw


'j 'j-Trfi T r i ^tori r^ j r i U n i .R d ln w acr.i.rrboi Bn ovedbw

OD is a b le
EnsbiMGLB

QapencoU tropcovelltw

Prcpefe oi Irtteirup*1NTU:

Pncr^

_ _;

Figura A 6.15. Configuracin de las interrupciones del dsPIC..

256

dsPIC. DISEO PRCTICO DE APLICACIONES

En el cuadro de dilogo de la Figura A6.15 se observa en la lista Enabled Interrupts la existen cia de la interrupcin T I, la cual tiene una prioridad 4. En la lista Enabled Interrupts se puede ob servar cmo se encuentra disponible la interrupcin INTO. Para habilitarla, seleccinela y pulse so bre la flecha con direccin hacia la izquierda. Desde aqu podr cambiar las prioridades de las interrupciones, as como observar la configuracin de las mismas. Pulse OK una vez aadida la interrupcin INTO y vuelva a generar el fichero de inicializacin con el que reem plazar el fichero de configuracin anterior. A continuacin, habr que reprogramar el ejemplo anterior. Para ello aada un nuevo fichero al proyecto con el cdigo correspondiente a la atencin de la interrupcin. .global__INTOInterrupt .include M p30F40J3.inc" __INTOInterrupt: disi #4 be Ir IFSO,#INTOIF mov #0x0001,W0 mov WO,PORTD rctfie

;Deshabilitamos otras interrupciones en las siguientes inst ;Borramos el flag de la interrupcin INTO ;Ponemos el semforo en ROJO ;para los vehculos finalizamos la ejecucin de la interrupcin

Resulta de especial inters la inclusin de la instruccin disi #4. Con esta instruccin se desha bilitan las interrupciones de nivel de prioridad del 1 al 6 durante las (4 + 1) siguientes instrucciones. As, si en un momento en que el programa atiende a la interrupcin del pulsador no se atender la interrupcin solicitada por el Temporizador TIM ER 1. Para establecer prioridades entre estas inte rrupciones se utiliza el cuadro de dilogo de la Figura A6.15. En lenguaje C la solucin puede ser la siguiente:

//PROGRAMA SEMAFOROINT

#includc "p30f4013.h" //Programa Semforo en lenguaje C

//Esta funcin atiende a la interrupcin del temporizador void__attribute (( interrupt )) _T1 Interrupt void) ( IFSObits.TI IF = 0; //Borramos el lag de la interrupcin if (PORTDbits.RDO == 1) //Si el semforo est a rojo PORTD = 2; else //lo ponemos en verde y viceversa PORTD =1; 1 //Funcin que atiende a la interrupcin externa INTO void_attribute__((___interrupt_)) JNTOInterrupt(void) { IFSObits.INTOlF = 0; //Borramos el flag de la interrupcin PORTD = 1: //Ponemos en rojo el semforo.
1

APLICACIN 6: PROGRAMANDO LOS PERIFRICOS CON VISUAL INITIALIZER

257

y temporizador semforo

Figura A6.16. Ejecucin del programa semforo con pulsador con un escenario.

Para simular este programa se establece un punto de parada en el cdigo que atiende a la inte rrupcin externa y se crea un escenario para provocar dicha interrupcin. Dicho escenario se puede crear a travs del men Debugger->Stimulus Controller-New Scenario. En la lista Asynchronous Stimulus aada INTO con la accin Pulse High. As, al pulsar sobre el smbolo > situado al inicio de la fila creada, el programa deber parar su ejecucin en la primera lnea del cdigo que atiende a la interrupcin externa. Observar que entonces el semforo se pondr en rojo. Pero todava queda al go por mejorar en este programa. Lo ha detectado? Se atreve con ello? En este ejemplo puede observar que para atender a la interrupcin INTO se ha necesitado incluir la etiqueta__INTOInterrupt. Esta etiqueta se encuentra definida en el fichero p30f4013.gld. Puede abrir este fichero y examinar la seccin ** Section M ap fo r Interrupt Vector Tables para observar o buscar la etiqueta correspondiente a otro tipo de interrupciones, as por ejemplo se dispone de __ADClnterrupL para interrupciones del mdulo conversor analgico digital,__TI Interrupt para in terrupciones del temporizador 1, etc. La siguiente tabla rene algunas de estas etiquetas.

258

dsPIC. DISEO PRCTICO DE APLICACIONES

ETIQ U ETA
__INTOInterrupt __IC1 Interrupt OC1 Interrupt __T;1 Interrupt __IC2 Interrupt T2 Interrupt _SPI1 Interrupt _UlR X Inlerrupt __U lTXInterrupt

IN TERRU PCI N
Interrupcin externa por activacin del pin INTO Interrupcin del m dulo de captura de entrada IC1 Interrupcin del m dulo de comparacin de salida OC1 Interrupcin provocada por el temporizador T1 Interrupcin provocada por el mdulo IC2 Interrupcin provocada por el temporizador T2 Interrupcin provocada por el mdulo SPI1 Recepcin de dato en el mdulo UART U l Interrupcin provocada por el envo de un dato en el m dulo UART U1

AUTOEVALUACION Conceptos clave de este captulo

j j f

2. Qu salida genera la herramienta Visual Initializer? 3. Cmo se puede sincronizar la velocidad con la que trabaja la herramienta Visual Initializer y el si mulador MPLAB SIM? 4. Do cuntos temporizadores dispone el controlador dsPIC30f4013? 5. Dnde se encuentran almacenadas las definiciones de las etiquetas correspondientes a las dis tintas interrupciones?

E je rcicio

APLICACIN
VrtVWl>
V iW 'W iX rt V

xoyivi-r,

..v.v.<iw iv r> v iv iw .* iv iv iv .v .v /.

Perifricos avanzados

r*

/ /

Wffi

A7.1. IN T R O D U C C I N

A lo largo del presente tenia se manejarn diversos perifricos de los controladores dsPIC que son ms especficos en el tratamiento de seales. Algunas aplicaciones son difciles de simular ya que resulta complicado insertar una seal analgica al simulador, por eso, en algunos casos, el estudio se limita r a describir el perifrico, sus posibilidades y su inicializacin para su conecto funcionamiento.

A7.2. EL M OTO R DSP

El comportamiento de las instrucciones DSP puede variar en funcin de la configuracin del Motor DSP. Para configurarlo de una forma sencilla se proceder a utilizar la herramienta Visual Initializer. Previamente se seleccionar el modelo, en nuestro caso el dsPIC30F4013. A continuacin se inicializar el Visual Initializer y se seleccionar el icono DSP, arrastrndolo hasta la imagen del con trolador. Al hacer doble clic con el ratn sobre dicho icono aparecer en pantalla el cuadro de di logo correspondiente para la configuracin del Motor DvSP. (Figura A7.1.)

P I Enable Saturation on Accumulator A. n Enable Saturation on Accumulator B H 71 Enable Saturatbn on Daia Space Writes from DSP Engine

Hep

or.

Cancel

Apply

Figura A 7.1. Ventana para la configuracin del motor DSP.


259

260

dsPIC DISEO PRCTICO DE APLICACIONES

Como primer parmetro, se configura el modo de multiplicacin, Multiplication Mode. Este mo do afecta a instrucciones como MAC. Afecta a todas aquellas en las que se use el multiplicador de 17 bits del que disponen los dsPIC. Las instrucciones que se ven afectadas por esta configuracin son las siguientes:
IN STR U C C I N
MAC MSC MPY MPY.N ED FDAC

D ESCRIPC I N
M ultiplicar y acumular. M ultiplicar y restar. Es equivalente a la anterior, pero en vez de sumar el resultado, lo resta. M ultiplica dos valores y deja el resultado en el acumulador. M ultiplica y niega el resultado. A ^ -B*C Calcula la distancia eucldea parcial. A = (B-C)2 Calcula la distancia eucldea parcial y la acumula. A = A + (B-C)2

Si se elige como Multiplication Mode la opcin niegen el resultado de las mencionadas ins trucciones se representar como un valor entero, si por el contrario se selecciona Fractional, el re sultado ser un numero fraccionario. Existen otras instrucciones que multiplican ciertos valores, como MUL, en las que el resultado siempre es un valor entero y por tanto no utiliza esta configuracin del motor DSP. Otra opcin para configurar el Motor DSP es el Accumulator Roundy o redondeo del acumula dor. Para este parmetro existen dos posibilidades, Convergente convergente y Conventional, con vencional. La diferencia entre ambos modos se analiza en la parte terica de esta obra, ms con cretamente en el Anexo del Captulo 4, M anipulacin de datos del Motor DSP. Bajo el epgrafe Accum ulator Saturation M ode , se perm ite configurar el modo de saturacin, pudiendo elegir el modo 1.31, norm al, que cargar en el acum ulador destino el valor 1.31 m xim o positivo (X07FFFFFFF) o m xim o negativo (0xFF80000000). El otro m odo es el 9.31, supersaturacin, donde cargar el valor 9.31 m ximo (0x7FFFFFFFFF) o el mnimo (0x8000000000). Y, por ltimo, se dispone de la posibilidad de habilitar o deshabilitar el modo de saturacin ele gido para el acum ulador A, B o la zona de memoria afectada por instrucciones DSP. Una vez seleccionados los parmetros necesarios, basta activar la casilla Generate Code O nlyfor features/resources on processor package a travs de la opcin Code Generation Options del men Visual Initializer, para que se genere el fichero init_dsPIC30F4013.s mediante la opcin Code Ge neration -> Save to ProjecL Una vez generado el cdigo de inicializacin del proyecto, en el cdigo fuente en ensamblador, se aade:
r.-.v-:-? \

Cali Visuallnitialization
::r :

O bien, en lenguaje C
: _ -

VsualIniializationO; A continuacin, las instrucciones DSP que se utilicen se comportarn de acuerdo a los parme tros elegidos en los pasos anteriores.

APLICACIN 7: PERIFRICOS AVANZADOS

261

A7.3. CONVERSOR AN A L G IC O DIGITAL

El dsPIC30F40l 3 dispone de un conversor analgico digital de 12 bits de resolucin. Para estudiar todas sus posibilidades, en primer lugar se presentan las caractersticas de este mdulo para pasar a crear un proyecto en el que se estudiar un ejemplo de utilizacin.

A7.3.1. Descripcin del mdulo de Conversin Analgico Digital de 12 bits

El conversor analgico digital de 12 bits permite convertir seales analgicas de entrada en valores digitales de 12 bits con una velocidad de conversin de lOjis. Este mdulo est basado en un regis tro de aproximaciones sucesivas y soporta hasta 16 entradas analgicas multiplexadas sobre un am plificador unipolar de muestreo y retencin denominado CHO. La tensin de referencia puede pro ceder de la tensin del controlador (AVdd y AVss) o bien de dos patitas que pueden recibir dicha tensin de referencia (Vref-i- y Vref-). Adems este conversor puede funcionar mientras el procesa dor est en modo Sleep con el oscilador RC. El mdulo dispone de varios registros para su control. Asi los registros ADCON1, ADCON2 y ADCON3 controlan el modo de trabajo del conversor analgico digital. El registro ADCHS, por su parte, selecciona los canales de entrada. El registro ADPCFG configura las patitas com o entradas analgicas o como entradas/salidas digitales. Y el registro ADCSSL selecciona las entradas a esca near o explorar. Los resultados de la conversin se guardan en un buffer de 16 palabras, denomina das ADCBUFO, A D CBU F1,... ADCBUFF. En la Figura A7.2 se muestra un esquema del mdulo conversor.

Figura A7.2. Esquema del Conversor Analgico Digital de 12 bits.

262

dsPIC DISEO PRCTICO DE APLICACIONES

Para realizar una conversin, se deben seguir los siguientes pasos:

1. 2. 3. 4. 5. 6.

7. 8. 9. 10.

Configurar las patitas analgicas, las tensiones de referencia y las entradas y salidas digitales. Seleccionar los canales de entrada A/D. Seleccionar el reloj para la conversin. Seleccionar el disparo (trigger) de la conversin. Poner en marcha el mdulo A/D. Configurar la interrupcin (si fuera necesario). a. Limpiar el bit ADIF. b. Seleccionar la prioridad de la interrupcin. c. Activar el bit ADIE. Comenzar el muestreo. Comenzar la conversin. Esperar a que se complete la conversin, lo que se detecta por una interrupcin o porque el bit DONE del registro ADCON1 se pone a 1 . Leer el buffer A/D con el resultado (ADCBUFO, ADCBUF1,...) y limpiar el bit ADIF.

A 7.3.2. T rabajando con el m dulo Para trabajar con el conversor AD cree un proyecto para el dsPTC30F4013, inicie la herram ienta V isual Initializer. cam bie el Pcickage y acceda a la opcin A D C del men de perifricos del controlador. Pinche y arrastre el icono denom inado 12-Bit A to D hasta la figura del contro lador. Al hacer doble clic aparecer en pantalla el cuadro de dilogo representado en la Figura A7.3.
'

? hir A/n Co nverter Configuration Opeiafor! Sailings -

Irterup! Sellings--------------

r-a sIso .'S tc rt'.-p


Dala OiipU Fu-tnat Urigrcc Irilse Vcfcage Re Souc: AVdd u Vtefh. AVss VrcH - Mode S e tth # ...........- -

[ M o

CFU Siaes Operation O Enafcic Irteiiutf on Sirttp Irterrupt Fikxly. v

CPU Ido Oration !Ccnir.wo v


A/O lrp .it Settings IfHO) "

Samclh; Mode Conversen Mode ;________ CJ Al!, between SamteAS B rois Frot h scanning c( !fe;ent A'D rputa irlo

Corfipj'e asA/D Irrcuii H'PinO ~ ^

y F iii Fri 2

CHOaroV
SaTolro Stait Mo. i S a n c irm i*ledmanual/ IrpUsto be sc3mcd:

y . y Pri 3

v. , AH 0

S a T t r f e A Pos Input

Sarrpe A Neg. Input : VflE FLjlnoUO i*! Irpi* I Sarpf B P ot Inpt/. AMO Serrcte B Neg. Input: \*rlF-

; 5 L U tp U 3
Hefp

-!irp L 2

A c o V

Figura A7.3. Cuadro de dilogo para la configuracin del conversor analgico digital de 12 bits.

Desde la ventana de la Figura A7.3 podr configurar muchos aspectos del conversor analgico digital de 12 bits de resolucin. A continuacin se estudia cada uno de los apartados del cuadro de dilogo.

APLICACIN 7: PERIFRICOS AVANZADOS

263

Operational Settings

Enable on startup- Activando esta casillael conversor analgico digital se activa al iniciarse la eje cucin del programa. De no marcarlo, se deber activar a 1 el bit ADON del registro ADCON1 pa ra que se inicie el proceso d conversin. Data Output Format: Establece cmo se desea recibirlos datos de la conversin, si enteros sin sig no (Unsigned Integer), enteros.con signo (Signed Integer), fraccinales sin signo (Unsigned Frac tional) o fraccinales con signo (Signed Fractional). Voltage Ref Sources Sirve para seleccionar la tensin de referencia. En esta lista despegable se puede elegir entre cuatro opciones diferentes. Se puede elegir la tensin de las patitas AVdd y AVss como referencia, o la tensin de las patitas Vref+ y Vref-, entre otras. CPU Sleep Operation: Mediante esta opcin se indica qu accin deber tomar el conversor cuan do el controlador entre el modo Sleep si se desea que despierte al controlador (Wake up on Start Bit) o que no lo haga (No wake up). CPU IDLE Operation: Indica si el perifrico contina su operacin (Continue) o se detiene (Stop) cuando entra en el modo de bajo consumo Idle.

En el cuadro Interrupt Settings, se puede configurar al conversor para que active una interrup cin cuando finalice la conversin. Es posible establecer que la interrupcin se active al iniciarse el mdulo as como su prioridad. Para atender a dicha interrupcin deberemos usar la etiqueta _ADCnterrupt. En el cuadro A/D fnput Settings (CHO) se configuran los canales de entrada del conversor. Esta blece las patitas que sern utilizadas para realizar la conversin, as como las tensiones de referen cia de los multiplexores MUXA y MUXB. Estos multiplexores pueden actuar de manera que cada entrada al conversor se vaya alternando, una por el multiplexor MUXA y la siguiente por el MUXB. El conversor dispone de hasta 13 patitas, desde ANO hasta AN12, para actuar como entradas ana lgicas. Se marcan con un tick aquellas que se van a usar en el proceso de conversin. Mode Settings Para seguir configurando el modo de funcionamiento del conversor analgico digital hay que es tablecer cundo se debe empezar a realizar el muestreo, cundo realizar la conversin, etc. Para ello la herramienta dispone del cuadro Mode Settings , que se encuentra divido en las pestaas Sampling Mode y Conversin Mode. (Figura A7.4.)

; SampingMode j~Convession Mods! d J Aft. between Sample A I B inputs : O Enable alt scanning of different A^D inputs into CHO samples
Sampling Start Mode:

: ;Samplng slatted manually | --------- ------ -------------- . ; Inputs to be scanned: pT} Input 0 L'.: Input 1 L Input 2 , L Input3

--------

V.

Figura A7.4. Configuracin del modo de funcionamiento del conversor, pestaa Sampling Mode.

264

dsPIC. DISEO PRCTICO DE APLICACIONES

Bajo la pestaa Sampling Mode , de la Figura A7.4, se pueden seleccionar las siguientes opciones: P. Al seleccionar con un Lick la opcin Alt. Between Sample A & B inputs , la entrada se ir al ternando entre el multiplexor A y el B. 2a. Habilitando la opcin Enable alt. Scanning o f differente A/D inputs into CHO samples sc per mite que los datos de distintas entradas vayan alternativamente al amplificador de muestreo y retencin CHO. 3a. En Sampling Start Mode se puede elegir cm o comienza el muestreo en la conversin, pudiendo elegir entre manual (Sampling started manually) para lo que hay que poner a 1 el bit SAM P del registro ADCON1, o automticamente tras la conversin anterior (Automatically after previous conversion). En este caso, es el bit ASAM del registro ADCON1 el que se de bera poner a 1 en caso de no usar la herram ienta Visual Initializer, ya que sta lo har de for ma automtica. 4a. Por ltimo, se puede seleccionar entre las 13 entradas. En la pestaa Conversion Mode se establecen los parmetros correspondientes a la operacin de conversin. (Figura A7.5.)
Sampfrig Mode j Conversion Mode j Trigger Source: Sample Period: Manual Dearing of SAMP bit 0 ~ ] usee ! (Calc.) v

XError:
Conversions / Int: Conversion Period: Clock Source

0
i 0 5* Tcy

usee (Caic.)

A/D Buffer Fill Mode: Do not alt. fill both halves of A/D ;y

Figura A7.5.

Configuracin del modo de funcionamiento del conversor con la pestaa Conversin Mode.

1. En la opcin Trigger Source , se establece cundo se activa la fase de conversin, que puede hacerse manualmente, una vez que se borre el bit SAMP (Manual clearing o fS A M bit) del registro A D C O N 1, mediante una transicin por flanco ascendente en la patita INTO (Active Transition on INTO). Tambin se puede hacer de forma sncrona utilizando el temporizador Timer 3 (Timer3 Compare) o el temporizador interno (Intem al Timer). 2. En la casilla Sample Period se establece el tiempo de muestreo en microsegundos. 3. En la casilla Conversions /In t se selecciona el nmero de conversiones que se realizarn an tes de que se genere la interrupcin. Ese nmero debe ser menor que el nmero de bulfers (16) ADCBUF, ya que de lo contrario se perdera algn dato de la conversin. Este parme tro se guarda en el registro ADCON2, en los bits SMPI. Despus de cada interrupcin, los da tos comienzan a guardarse siempre desde ADCBUFO. 4. En la casilla Clock Source se selecciona el reloj de conversin. La velocidad mxima es de 12 perodos de reloj por cada dato o muestra. 5. La casilla A/D Buffer FillM ode describe el modo y estado de llenado de la pila. El resultado se puede dividir en dos grupos de 8 que reciban de forma alterna el resultado de la conversin (Alt two 8words bujfers ofA/D), o bien, no dividirlos (Do not Alt. Fill both halves ofA /D ). Esta de cisin depender del tiempo que emplee la interrupcin en procesar los datos de la conversin.

APLICACIN 7: PERIFRICOS AVANZADOS

265

Puede ser interesante realizar la conversin en modo SIeep ya que con ello se reduce notable mente la posibilidad de recibir ruido provocado por el resto de perifricos del controlador. Se procede a desarrollar el primer ejemplo. Desde Visual Initializer se marcan las siguientes casillas:

Enable on startup. De esta forma en la. inicializacin se activa el mdulo. Enable interrupt on startup. Establece una interrupcin para cuando se lleve a cabo la con versin. En la pestaa Sampling Mode se elige Input 0. En la lista Sampling St^rt Mode se elige "automatically after previous conversion Asf tras una con versin comenzar la siguiente automticamente. En la opcin Trigger Source de la pestaa Conversion Mode se seleccionaInternal Timer. Como Sample Period, se escoge un perodo de 0.002 fe. [ En la pestaa Clock Source, se elige 3 0 * . 5* . Tcy.

El resto de parmetros se dejan tal cual aparecen por defecto en la herramienta Visual Initializer. A continuacin, se activa la casilla Generate Code Only forfeatures/resources on processor pac kage a travs de la opcin Code Generation Options del men Visual Initializer. Se genera el fichero init_dsPIC30F4013.s mediante la opcin Code Generation -> Save to Project.

PROGRAMA CAD .include "p30f40J 3.inc' .GLOBAL main .text _mairi: call JVisual Initialization bucle: goto bucle Tratamiento de la interrupcin .global ___ADCInterrupt ADCInterrupt: BCLR IFSO, #ADIF Leemos el resultado en ADCBUFO :Aqu trataramos la interrupcin RETFIE .end

;nicializamos el conversor analgico digital ;Permanecemos en un bucle infinito

;Etiqueta correspondiente a la interrupcin ;Borramos el flag de la interrupcin

\ \ simular este programa se aprecia cmo se accede peridicamente al tratamiento de la inte rrupcin. Aunque tambin sucede que la simulacin se para en un punto del programa. Esto es deh tio a que no se ha aplicado una seal simulada en la patita muestreada. Volviendo a ejecutar la op ta r Run del simulador, eliminaremos este problema. Cuando se detenga en el punto de ruptura sc irie c id o , el programa estar situado en la zona de instrucciones donde se debera tratar la lectubl recogida en el buffer ADCBUFO. Mediante la opcin Debugger -> Stopwach se podr estudiar e . r-empo transcurrido entre cada lectura.

266

dsPIC. DISEO PRCTICO DE APLICACIONES

Modifique los parmetros del Visual Initializer y siga estudiando los tiempos obtenidos. No as los datos obtenidos en ADCBUFO, pues es complicado simular una entrada analgica en las patitas de entrada, por lo que el resultado de la conversin siempre es cero. Otro ejercicio interesante consiste en analizar la secuencia generada en el fichero init_dsPIC30F4013.S para la inicializacin del mdulo. El programa anterior desarrollado en lenguaje C sera el siguiente: Contenido del fichero main.c
//PROGRAMA CADc # include ,'p30f4013.h" int main (void) / t VisualnitializationQ; while (1); return 0; }

m
//Inicializamos el conversor // Entramos en un bucle infinito
l.y.yX''

Contenido dei ficher adcint.c

#include p30f403.h" unsigned int ADResultl = 0;

.;X;

//Variable donde guardamos el resultado conversin

//Funcin que atiende a la interrupcin por el mdulo Conversor A/D void__attribute__((__interrupt__)) _ADClnterrupt(void); void attribute (( interrupt )) ADCInterrupt(void)

I
IFSObits.ADIF = 0; ADResultl = ADCBUFO; //Reestablecemos el flag de interrup. //Guardamos el resultado en ADResult 1

A 7.4 . C O M U N IC A C IO N E S UART

Este mdulo permite establecer comunicaciones serie con el exterior. Se trata de un transmisor re ceptor asincrono, bidireccional, con un buffer de transmisin y recepcin de 4 caracteres. Dispone de 2 patitas, denominadas TX y RX, que permiten enviar y recibir informacin en serie con la po sibilidad de activar una interrupcin cada vez que se reciba o se envie un dato. Entre otros, para trabajar con el mdulo UART, se utilizarn los registros U1TXREG para trans mitir los datos, U1RXREG para recibir los datos, U 1MODE para configurar el mdulo, U1BRG para configurar la velocidad de transferencia en baudios y U1STA para comprobar el estado del mdulo. La comunicacin serie es un protocolo de comunicacin muy extendido y conocido, por lo que a continuacin y sin ms prembulos, se desarrolla un primer ejemplo Hola amigo , que transmite el mensaje Hola amigo!

APLICACIN 7 : PERIFRICOS AVANZADOS

267

La herramienta Visual Initializer configurar al mdulo UART. Se crea un proyecto para el dsPIC30F40I3 y se inicializa Visual Initializer. Se cambia el encapsulado del dsPIC a formato PDIP y se elige del men de perifricos la opcin UART. El dsPIC dispone de dos mdulos para comunicaciones UART. Se escoge el mdulo UART1 y se arrastra hasta el dsPIC. Una vez all, se hace doble clic sobre el mismo accediendo al cuadro de dilogo de configuracin de dicho mdulo UART1. (Figura A7.6.)

IJARTC Configuration.
Coirniumsctcn Settojs - - ................................. 0 Ervlc en Startup Dock Source1; M tA- : SaudRate: .99X5 0 8 |1 [Nopanty v v v! el: :! ! tes (Cae.) : v| CPU Sleep Operation No tAake-up CR-* Idte Operatic; | Continue v v

il- C '.V v V jK : : riKs Afcct'rijtc P?r?

; . ; ' ;.;

% Error
DctoBh: Stop Bits: pcry:

O Enafcte auto-bdud detection I~| Enable loopback hetvceen T x Rx Ice C lx k ParJy: Active Hgh

Opcicbcnal Scltngs Recewsr Transmfcter

if 0 Erwble 7ifinsmt CJ Enable Irten^it o Startup


InieffuptPiiwfcy:
Generate Int on buffe;si:e: 1 Ernply

Hefp

O K

Cancel

A c tfy

Figura A7.6. Cuadro de dialogo para la configuracin del mdulo UART1.

Se habilita el mdulo en el inicio del programa activando la casilla Entibie on Startup. Si en vez de hacerlo automticamente fuese manualmente habra que poner a 1 el bit UTXEN del registro U1STA. Con la casilla Baud Rate se escoge la velocidad en baudios a 9.600. Mediante la casil la Data Bits se determina el nmero de bits por carcter, en este caso 8 bits. La casilla Stop bits se pone un 1 pa ra establecer 1 bit de parada, y la lista Parity se deja con la opcin No parity. De esta forma el m dulo se configura para una comunicacin a 9.600 baudios. 8 bits por carcter y 1 de stop. En la pestaa Transmitter se activa la casilla Enable Transmit para permitir la transmisin de datos. El Visual Initializer configura automticamente al mdulo para 9.600 baudios, como se puede apreciar haciendo doble clic sobre el icono Oscilador. Si desea configurar el mdulo manualmente, sin hacer uso de la herramienta Visual Initializer, deber calcular el valor a cargar en el registro UxBRG (donde x es 1 o 2 segn el mdulo seleccionado) de acuerdo con la siguiente frmula: UxBRG = (Frecuencia / (16 Baudios)) -1 Dispone de un ejemplo en el Laboratorio 4, Comunicacin USART ene ripiada. Tras esta aclaracin se genera el cdigo de inicializacin, para lo cual en la opcin Visual Ini tializer -> Code Generation Options se marca la opcin Gene rate Code Only fo r features/resources on processor package. A continuacin, se elige la opcin del men Visual Initializer -> Code Ge neration , y se salva el cdigo de inicializacin en el proyecto gracias a la opcin Save to Project.

268

d sP IC D ISE O PRCTICO DE APLICACIONES

Por ltimo, se crea el fichero fuente en ensamblador que transmitir el mensaje por dicho puerto:

; PROGRAMA Hola Amigo .include "p30f4013.inc" .global _main ;Escribimos el mensaje en la seccin X de la memoria .section holamundo,data,xmemory} address(0x0800) Mcnsaje: .ascii "Hola mundo!\r\n\0" .text X * ;-;* ::-x _main: call Visual Initialization ;Inicializa el dspic mov #Mensaje,Wl ;Mueve a W1 la direccin del mensaje Bucle: mov.b [W 1++), WO cpO.b WO bra Z,Fin call MandaCaracter bra Bucle MandaCaracter: btss U1STA,#TRMT bra MandaCaracter mov W0,U1TXREG return Fin: nop .end ;Lee el dato en WO ;Si el dato es 0 ;entonces ha acabado y salta a Fin ;En caso contrario escribe el caracter ;repite el bucle ;Espera a poder transmitir ;Si no puede transmitir sigue esperando ;Escribe el caracter en el buffer TX ;retoma a la llamada ;Fin del programa

*
.

Para ver cmo funciona este programa lo ideal es que trate de simularlo con la herramienta MPLAB SIM. Para ello deber indicar al simulador que los mensajes de salida del mdulo UART aparezcan por pantalla. Basta con acceder al men Debugger->Settings... y, en la pestaa UART 10. se activa la casilla Enable UART 10 y luego se elige en la opcin Window en el marco Output para que el resultado de la salida del mdulo se visualice en pantalla. (Figura A7.7.)

Figura A7.7. Configuracin del simulador para que muestre los datos del mdulo UART en pantalla.

APLICACIN 7: PERIFRICOS AVANZADOS

269

Se ejecuta el proyecto, se aprecia cmo en la ventana Output, dentro de la pestaa correspon diente al simulador SIM UARTJ , aparece el mensaje esperado Hola mundo! (Figura A7.8.)

O u tp ut
i

Bud ; Version Control ! Find in Files : Visual Infcalizet

MPLAB SIM [ SIM U a f t l ^

H o la mundo!

Figura A7.8. Visualization de la salida del mdulo UART1. Una vez configurado el mdulo con Visual Initializer enviar un dalo por el puerto serie es tan sencillo como esperar a que el bit UTXBF del registro de estado U1STA est desactivado para en viar el dato, simplemente escribindolo en el registro U1TXREG. Para recibir un dato, se habilita una interrupcin en la inicializacin del mdulo UART1 y se usa la etiqueta__U 1RXInterrupt para acceder al dato que se recibe en U1RXREG.

A7.5. M D U LO DE CAPTURA DE ENTRADA El dsPIC30F4013 dispone de 4 mdulos de captura de entrada. Se utilizan para capturar la infor macin de un temporizador cuando se produce cierto evento en una patita de entrada del controla dor. Cada uno de estos mdulos se denominan genricamente IC 1, IC2, IC7 e IC8. Pueden ser muy tiles para medir la anchura de un pulso o la frecuencia de una seal. Cada mdulo tiene asociado un registro de control, as para el mdulo IC 1 el registro de control asociado es el IC1CON, y un registro buffer de captura de entrada, que es el registro IC1BUF. Los 3 bits de menos peso del registro IC1CON configuran el modo de funcionamiento del m dulo de captura de entrada. Dichos modos son los siguientes:

Deteccin Deteccin Deteccin Deteccin Deteccin

de flancos ascendentes y descendentes. de flancos descendentes. de flancos ascendentes. de 4 flancos ascendentes. de 16 flancos ascendenetes.

Mediante el bit ICTMR se selecciona la fuente de reloj del temporizador. Debe elegir entre el Timer2 y el Timer3. (Figura A7.9.) La herramienta Visual Initializer permite configurar este mdulo fcilmente, pero si prefiere co nocer exactamente los pasos necesarios puede analizar el cdigo generado por dicha herramienta. Para configurar este mdulo no slo es necesario aadir el icono correspondiente al IC1 al con trolador, sino tambin el Timer3 que es el que controla el tiempo. La Figura A7.10. muestra algu nos posibles valores de configuracin. A continuacin se debe aadir el mdulo IC1. Como se pretende configurar el mdulo IC1 para medir la anchura de un pulso, los parmetros que se deben definir son los siguientes:

270

dsPIC DISEO PRCTICO DE APLICACIONES

T.\jR2
x I Cx Prescaler Detector de flanco y sincronizador v - jo t m r

1f Lgica de
c o n tra i

Flag de interrupcin#" ICxF

ICxBUF

FIFO

Figura A7.9. Esquema del mdulo de captura de entrada.

16 l Timer 3 Configuration
O pcfoli s ro l Sc tth g s ----------------;------------------------------------------ i ; 5 0 Enobie on Startup ; O Gated Tim e A ccurrdab'on : 7 rner CSock Prescale:; 1 64 Tim ei Pefiod: 7 m et Frequency: y , Postscsie: CPU Id c Opwolion ..........._^ 1 1 j

! j ____________: (msec) |1 ; (KHz) (C alc)

i_____________________________
Interrupt j [11 Enable IrtciruD! on Startup Intciiupt P iiaity. V jj ---------------------- --------- :

Figura A 7.10. C.onfiguracin del Timer3 para su empleo con el mdulo IC1.

Timebase fo r input capture: Seleccin del Timer2 o el Timer3 corno fuente de tiempo para el contage. Elegimos el Timer3. Capture Operating Mode: Permite elegir que evento se va a capturar. Disable para deshabi litar el mdulo, Capture every falling edge para capturar cada flanco descendente. Capture every rising edge para capturar cada flanco ascendente, Capture every 4th rising edge para capturar cada 4 flancos ascendentes, Capture every 16th rising edge cada 16 flancos ascen dentes, Capture every rising and falling edge cada flanco ascendente o descendente o Interrupt or wake up on idle para despertar en el modo Idle. Seleccionamos Capture every rising edge and falling edge . El pulso empieza con un flanco ascendente y acaba con uno descendente. El ejemplo trata de capturar el valor del temporizador Timer3 con el flanco ascendente y con el flanco descendente. La diferencia entre una lectura y otra dar la anchura del pulso. Capture events per interrupt: Permite seleccionar que la captura se produzca en cada evento (Capture every event) o en el segundo, tercer o cuarto evento (Capture 2nd, 3rd o 4th event Se elige Capture 2nd , y as al capturar el segundo evento, es decir el flanco descendente de

APLICACIN 7: PERIFRICOS AVANZADOS

271

pulso, se generar una interrupcin que calcula la diferencia entre la primera lectura del tem porizador y la segunda y obtener as la anchura del pulso. Por ltimo, se puede habilitar una interrupcin para tratar estos eventos mediante la opcin Enable interrupt on startup e Interrupt Priority.

In p u t Capture Configuration
Input Cpiuie Settings IC1

[lC2 ~f 7 " X tC 8 !

T imebate for jiput capture Capluie Operata*} Mode:

: T rrei 3

.v :

5Capture eveiy rising dos

Ccplice Evcrjts per Interrupt: Capture eveiy event CPU Idte Operation Contnue y

y .\

3 E rabie Inleirupl en Startup fnerupt Prsoty. 4 ..*>

< !.................
r ~h^ "

^
O K . ][
Cancel

A p p !^

Figura A 7.11. Configuracin del mdulo de captura de entrada.

Para tratar la interrupcin correspondiente, se empica la etiqueta__IClInterrupt. Si, por el contrario, se desea calcular la frecuencia de una seal, hay que configurar el mdulo de captura de entrada, igual que en el ejemplo anterior, a excepecin de que en Capture Operating Mode hay que seleccionar Capture every rising edge , ya que para medir la frecuencia se debe espe rar al segundo flanco ascendente. En este caso tambin la diferencia entre dos flancos ascendentes proporciona el perodo de la seal, cuyo valor inverso es la frecuencia de la seal. Tambin suele utilizarse este mdulo para el modo de deteccin automtica de velocidad del m dulo UART.

A 7.6 . M D U L O DE C O M P A R A C I N DE SALIDA

El controlador dsPIC30F4013 dispone de 4 mdulos de comparacin de salida de 16 bits, idnticos entre s e identificados como OC1, OC2, OC3 y OC4. Permiten comparar el valor de un temporizador con el valor de uno o dos registros. Adems permiten generar un pulso o tren de pulsos de sali da en el momento de la comparacin. Estos mdulos controlan el funcionamiento de las patitas de salida OC1, OC2, OC3 y OC4 respectivamente, por los que se genera la salida en funcin del re sultado de la comparacin. El valor del temporizador puede elegirse entre el valor del temporizador 2 o el temporizador 3. As mismo existen 3 registros, que en el caso del OC1 son el OC1CON, encargado de la configura cin del mdulo OC1, O CIR, registro de datos del mdulo y OC1RS, registro de datos secundario, que determinan el funcionamiento del mismo. Se inicializa el Visual Initializer y se selecciona el mdulo OC (Output Compare) que se arrastra hasta el controlador. Previamente, se aade el Timer2, necesario para el funcionamiento del mismo.

272

dsPIC. DISEO PRCTICO DE APLICACION ES

-Output Compare Settings QCn IQC2 ll 0C3 f o c T l

CPU Idle Operation 0C1R (hex]: OCIRS ft*)

I Q K 1I C ared | ( A p p ty |
Figura A7.12. Configuracin del mdulo de comparacin de salida.

En primer lugar se selecciona el mdulo O C l accediendo a la pestaa correspondiente. A con tinuacin, se elige el temporizador a utilizar, que previamente hay que haber configurado para esta blecer el tiempo que se desea que dure el evento. Para ello, en la pestaa Tim ebasefor input com pare se selecciona Timer 2. Despus, en la lista Compare Operating Mode, se elige el modo de operacin del mdulo. Exis ten los siguientes mdulos: Compare channel disabled Mediante esta opcin se deshabilita el mdulo y no funciona. OCx p in low to high En este modo, la patita O C l del controlador pasa de 0 a 1 en el siguiente ciclo de reloj tras al canzar el Temporizador seleccionado el valor que se haya escrito en el registro OCl R. Se gene rar una interrupcin 2 ciclos de reloj despus de activarse la seal O C l. OCx pin high to low En este caso la patita OCl se pondr a 0 un ciclo de reloj despus de que el temporizador selec cionado alcance el valor del registro OC1R. Tambin en este modo de operacin la interrupcin se activa 2 ciclos despus de que la seal pasa a 0. Toggles OCx pin En este caso, la patita O C l invierte su valor un ciclo despus de que el temporizador seleccio nado haya alcanzado el valor almacenado en el registro O C 1R. La interrupcin correspondiente tambin se genera 2 ciclos despus de este evento. Single Output Pulse on OCx Pin La patita O C l se activa mientras el valor del temporizador tiene un valor comprendido entre los registros OC1R y OCl RS. El cambio a nivel alto se produce en el siguiente ciclo tras alcanzar el temporizador el valor de OC1R y se mantiene a nivel lgico 1 hasta el mismo ciclo en el que el temporizador toma el valor de OC1RS. Una vez alcanzado el valor de OC 1RS, aunque el tem porizador vuelva a alcanzar los valores OC1R u OC1RS, la salida O Cl seguir a nivel lgico 0.

APLICACIN 7: PERIFRICOS AVANZADOS

273

Continuous Outpu pulses on OCx Pin Este modo es idntico al anterior salvo que las siguientes veces que el temporizado!* alcanza el valor OC1R se vuelve a generar el pulso en la salida O C L PW M mode Fault pin disabled Generacin de un tren de pulsos de anchura variable con la patita de fallo desactivado. PWM mode Fault p in enabled Generacin de un tren de pulsos de anchura variable con la patita de fallo activado. La patita de fa llo provoca una interrupcin para poder colocar la salida en un estado prefijado por el programador. Se elige Continuous Output pulses on OCx Pin. La casilla OC1R se carga con el dato con el que se desea que se active el comparador. Depen diendo del modo seleccionado, en el siguiente ciclo tras alcanzar el temporizador el valor guardado en OC1R, se activar la salida y la interrupcin correspondiente. Dicho valor se escribe en hexadecimal y en este caso es 0100. En la casilla OC1RS se debe colocar el segundo umbral para los modos en los que quiere que la salida se active desde un determinado perodo hasta otro. Dicho valor se coloca en hexadecimal y ser 010A. Por ltimo, se marca la opcin Enable Jnterrupt on startup , para provocar una interrupcin dos ciclos ms tarde de comenzar la salida deseada en O C 1. Complete la tabla con los valores de O CI para distintos valores de TIMER2 en funcin de los parmetros elegidos en el Apartado A7.6

T IM E R 2 0x00f f 0x0 100


0x0/07

OC1
0

0x0102 0x0103 0x0109 0x010A 0x0 JOB 0x0 WC

Qu valor tendr el T/MER2 cuando se provoque la interrupcin __ O CI Interrupt?

En la tercera parte de esta obra podr encontrar un ejemplo de utilizacin de este mdulo para el control de motores. Ms concretamente en el Laboratorio 5, Control de motores mediante PW M , se hace uso de este mdulo para controlar la velocidad de un motor y conseguir distintas velocidades de una forma sencilla.

274

dsPIC. DISEO PRCTICO DE APLICACIONES

A7.7. CONSIDERACIONES FINALES

A lo largo de la seccin Programacin y Simulacin de Aplicaciones se ha tratado de proporcionar al lector las habilidades necesarias para iniciarse en la programacin de los controladores dsPTC, una lase previa a la implcmentacin fsica de soluciones hardware basadas en controladores dsPTC que abordaremos en la ltima seccin del presente libro, denominada Laboratorio Experimental, y siempre tratando de presentar las caractersticas de estos controladores y su uso, de la forma ms sencilla y clara posible.

AUTOEVALUACIN Conceptos clave de este captulo

1. 2. 3. 4. 5.

A qu instrucciones afecta la configuracin del Motor DSP? Qu significa que la resolucin del convcrsor analgico digital sea de 12 bits? Para qu se necesita un temporizador junto con el mdulo Input Capture? Qu utilidad pueden desempear los mdulos de comparacin de salida? Cmo se puede configurar el mdulo UART para una comunicacin a 2400 baudios, 8 bits de datos y uno de parada?

Ejercicios

1. Medanle el simulador, almacene el siguiente cdigo en memoria EEPROM:


Direccin
7FFC0 7FFC02

Contenido
0x4 F4 8 0x414C

A continuacin, cree un programa en ensamblador que transmita por el puerto serie el contenido de esas direcciones de memoria. Simlelo y descubra el mensaje enviado.

IIS

2. Programe y simule un programa en lenguaje C; de forma que se lleve a cabo una conversin ana lgico digital por la patita ANO, con tensin de referencia en VREFH y VREFL, utilizando el tempo rizador interno con un perodo de muestreo de 0,002/is., con una velocidad de reloj de muestreo de 30 * .5 * .Tcy, de forma que cada 5 mustreos se genere una interrupcin y obtenga la media de esos 5 valores. Al tratarse de un perifrico tan veloz, el calcular la media y tomar ese valor como el valor resulta do, permite minimizar el riesgo producido por la entrada de ruido en el muestreo.

1.

...... :
Vi.. . . " '

:
i

r::: :::
.A

'

r n lr a te __ .-.i Y A Y A i M V v

del CD e instalacin de las herramientas de trabajo

C O N T E N ID O DEL C D

El CD que acompaa al libro dispone de los ejemplos explicados en el mismo, las aplicaciones de desarrollo utilizadas, as como los ficheros necesarios para realizar las actividades propuestas. La organizacin del CD en distintas carpetas se corresponde con la de la Figura AP.l.
a p l ic a c io n e s

DOCUMENTACION

DSPIC FD LITE

LABORATORIOS

M P IA B ID E Figura AP.1. rbol de directorios del C.D.

P P

DSPICWORKS

MPLAB C30

WINPICSOO

Dentro de la carpeta APLICACIONES, se encuentran todos los ficheros necesarios para hacer las actividades de esta parte del libro. As, existe una subcarpeta por cada captulo/aplicacin con los listados de los ejemplos realizados y, en la carpeta Filtros, encontraremos el fichero seal con rui do.wav necesario para la aplicacin 1. Por ltimo, tambin existe una carpeta denominada Autoevaluacin donde se encuentran los listados de los programas necesarios para la resolucin de los ejercicios de autoevaluacin. La carpeta LABORATORIOS se encuentra subdividida en tantas subcarpetas como laboratorios realizados en el libro. Estas carpetas contienen el cdigo fuente utilizado en cada uno de ellos y to dos los ficheros necesarios. En las carpetas M PLAB IDE, DSPICWORKS, DSPIC FD LITE, MPLAB C30 y WINPIC800 , pueden encontrarse los programas de instalacin de estas herramientas. Todos estos programas son propiedad de M icrochip y los tiene registrados en todo el mundo. Adems las versiones ms actua les de los mismos las puede encontrar en su sitio de Internet www.microchip.com.
275

276

dsPIC. DISEO PRCTICO DE APLICACIONES

En la carpeta DOCUMENTACIN puede encontrar distintos datasheets de las distintas familias de dsPIC.

INSTALACIN DE MPLAB IDE

Es importante instalar esta herramienta antes que el compilador de C MPLAB C30. Para instalar la herramienta MPLAB IDE, se acceder a dicha carpeta del CD que acompaa al libro y ejecutando el programa Install_MPLAB_v730b.exe.Tambin se puede obtener la ltima versin de este soft ware acccdicndo a la web de Microchip, www.microchip.com. Una vez iniciada la instalacin se debe esperar hasta observar el primer cuadro de dilogo de la aplicacin de instalacin. Es conveniente cerrar el resto de aplicaciones abiertas en ese momento. En este primer cuadro de dilogo pulsamos Next. A continuacin hay que aceptar el contrato me diante la opcin / agree y pulsamos de nuevo Next. (Figura AP.2.)

Figura AP.2. Instalacin de la herramienta MPLAB IDE.

A continuacin, se elige el tipo de instalacin, que se recomienda la instalacin completa, Com plete . V se sigue pulsando Next hasta que se llega al cuadro de dilogo donde se pregunta sobre la carpeta destino. (Figura AP.3.) Es importante no cambiar la carpeta destino, ya que a menudo se hace referencia a ficheros que se encuentran en dichas carpetas, y si se cambia la carpeta de instalacin base las referencias dadas en el libro no sern vlidas. Tras esto, contina la instalacin normalmente, aceptando los contratos de software y pulsando Next, hasta que comienza la copia de los archivos al ordenador. Al finalizar este proceso, el progra ma de instalacin pregunta si se desea leer instrucciones para la instalacin de otras herramientas, como por ejemplo el 1CD2. En tal caso, se contesta que s se quiere leer dichas instrucciones, e in cluso sera recomendable imprimirlas. (Figura AP.4.)

APNDICE A: CONTENIDO DEL CD E INSTALACIN DE LAS HERRAMIENTAS DE TRABAJO

277

C h oose D citm o lio n L ocation Sritti- M y to ic ssltp w l n sN Ilie :

M ic r o c h ip

Setup w l h:iaC MFt 4 8 7 1 v? 50 n Ibe fotoftvic lefctef.

wlhe Mk

To ir!al re lin foJe*. cfcK Mt To Ctal lu a dlfaerA fotts:. d rk Browie end sefey

r.O e a io c iio n C 'W iw w p :o a a ro # R itt;h p \

Ji . :

isa*.

M R . Tccte v 7 ^ 0

*v H C W O* phc<o

Figura AP.3. Seleccin de la carpeta de destino.

Choose Destination Locatoti Stect lodn bree letup w l n:tal He: Sfto VA I MFL-B Tcctt v7.2 n !n* IcA/wu luUe*

M ic r o c h ip

T0 it t il to lr> lotee. C it-. Newl I o risU to e dEieier> fafdei, cfc* Btowc and c c

w riet foie.

r Destratan FrfJei....................... C\Aid-ivo3 ce prosiematafCChiA

He*>

:-:-:% y ';-X v v v ....... :*.c/o


Figura AP.4.

Hciosoft Photo

Visualizando las instrucciones de instalacin de la herrmienta ICD2.

Por ltimo, al pinchar en el ltimo cuadro de dilogo de la instalacin, el botn Finish , aparece r en pantalla un visor de documentacin de la em presa Microchip, visor que se puede cerrar para empezar a trabajar con el MPLAB IDE. (Figura AP.5.)

278

dsPIC. DISEO PRCTICO DE API ICACIONES

UIH All UH OuCuiiU'iil Viewer VCfSDT.'W - - ----;--- :

W ---- '

Rele ose Heces t e r d*?c<i>.} L x r.ju * ? lo >i 2 ? A s t i l 2 00 =

H 5U B IW SSS, v i . 32

M W W M ) Assembler versar. v4.02 ] CD 2 I i-C r o it C e t w w r ] CE 2COJ IivOfCui E ro fo r 1CE -1003 In Q rc u t E rm i

c o s n n s

ittv /,2 0 FM3 Cv : b ?rcg-tfin*i

SIMJfnuW of

1. Cvervr ev . C H U C c r.a r a l 7 -j M c 5. T :.vi_ '< * Su^purtud


v

L ic e r n e

VDl Msud C e:e tmtelser M=l[Mi(TM] Ctyrv. Ui< end W te


D i f H W I rio,*!"-/"'*

4 . In s c a b l a t i o n 5. K i ^ r & c i n a c o Versici 1.3x 7 . y i x e t l Is s u e s 8 . L i l e s c io n s

C . Hurt:1 J.v ir. thi Bol V. Cmtoac Support

I n R iia o c n Heip K te i ( le x t O iy ) r -.A 3 ICO ? U?E OcvKe Ctrw ean M=(.M) 1CD 2 '_CUCiVKe Orrw insWlstco rM.fl3 ICE 2k P fc lr F w t Ctivw Ife d ltC M-\.\3 ICE 2>: 1153 O cvro C*to G . M?l A3 ICE USB Cowefter Device I rM-A*J ICE 4K US9 Or-i-.e Driver Cfeen M . .\3 ICE 41: U53 Owvit Dirv* jn ite ls f n Mil.A3 Pv 5 U53 C ^ C d D-lvc- CW.V. MK.A9 PV 2 U3D O evtte Unvsr ln s te la ta n

x t-v tfr 7 X o

O v x x v itv
T ie HP1A3 II>2 r e l e a s e o I 4 s 7 I C la n g u a g e co o c o n s is t, a i tui u t a o b i < jiic 3 0 - . * > , n a l i n x : { p i c 3 0 - l d . c x e ) . I& c t f i C r 'S G u id e d e s c r i a d d i t i o n a l U t i l i t i e s c h o c r e n o e s u p p o r t . d b y th KP LiE IC'3 s r. A t h i i o E u not. s u p p l i e d i n c h i s r e le a s e . 2 . GOT G e n e ra l P \ti ilc L ic e n s e

C m ttin

Macchia Cn The Wsb


U jr.h r.h x e a p s i.e n a n e t . c b . l o v , t i i * d s ? IC o o o lc a r e w r ic c e n a n i d i s t r i b u t e d u n d e r C h e 5NV G e n e ra l P u b lic l i c w a . (CJLJ w h ic h acaas d u o ; i c s i c j i e a c o fis i s t r e c l y d is - r lb u c e - 3 a n il ova-, l o b i t o t h -

;V ;v,svyivr^ttcsbft 'r^xaL*o. . H '-B !A ?rC rw ir*rI

Figura AP.5. Visor de documentacin del MPLAB IDE.

INSTALACIN DE MPLAB C30

Se recuerda una vez ms, que la versin del compilador de C MPLAB C30 que distribuye libre mente Microchip y que se acompaa en este CD, es una versin para estudiantes. Esta versin, pa sados 60 das tras su evaluacin, pierde ciertas funcionalidades pero sigue siendo funcional. En ca so de que no sea estudiante, debera descargar de la web de Microchip una versin de evaluacin de 60 das de esta misma herramienta que trascurrido este tiempo dejar de funcionar. Para instalar esta herramienta, hay que ejecutar el nico programa ejecutable situado en la car peta MPLAB C30 del CD que acompaa al libro. La instalacin es bastante trivial, se deben acep tar todas las opciones por defecto del programa de instalacin y mediante el botn N ext avanzar en la misma hasta que se muestre un cuadro de dilogo como el de la Figura AP.6. Hay que contestar Yes y finalizar la instalacin pulsando el botn Finish.

INSTALACIN DE DSPICWORKS

Para instalar esta herramienta, se ejecuta el programa setup.exe de la carpeta DSP/CW ORKS del CD que acompaa el libro. La instalacin resulta trivial, simplemente se acepta todo sobre las distintas opciones que por defecto marca el programa, pulsando el botn Next, hasta llegar a la ltima pan talla donde se pulsa el botn Finish , tras lo cual habr concluido la instalacin de esta aplicacin.

INSTALACIN DEL dsPIC Fd Lite

Para instalar esta herramienta se ejecuta el programa setup.exe de la caipeta dsPIC Fd Lite del CD que acompaa el libro.

APNDICE A: CONTENIDO DEL CD E INSTALACIN DE LAS HERRAMIENTAS DE TRABAJO

279

Figura AP.6. Configuracin de las variables de entorno.

I ,a instalacin resulta trivial, simplemente se acepta todo sobre las distintas opciones que por de fecto marca el programa, pulsando el botn Next, hasta llegar a la ltima pantalla donde al pulsar el botn Finish, se concluye la instalacin de esta aplicacin.

INSTALACIN DE W IN PIC 800 La instalacin del W inPic800 es bastante simple, basta con copiar la carpeta WinPicSOO en el disco duro, seleccionar todos los ficheros copiados y, mediante el botn derecho y la opcin Propiedades , desmarcar la opcin de Slo lectura . Tras esto bastar con ejecutar directamente el programa WinPic800.exe para tenerlo funcionando. Este programa de Siseo Benach es de libre distribucin y pue de encontrarse actualizado en http://perso.wanadoo.es/siscobf/winpic800.htm.

ejercicios de autoevaluacin
SOLUCIONES APLICACIN 0

/. Con qu herramienta se desarrollarn los programas para d sP lC ? Para los desarrollos propuestos se utiliza la herramienta MPLAB IDE, que genera los cdi gos fuente, que se compilarn y simularn. 2. Es necesaria en esta segunda parte alguna placa de desarrollo o hardware basado en dsP lC ? No, slo es necesario un PC y el software del CD que acompaa al libro para realizar todos los ejercicios y simulaciones planteados. 3. De cunta memoria de datos y de programa dispone el dsPiC30F4013? M emoria de programa de 48 KB de capacidad. Hasta I6K instrucciones. 2048 bytes de memoria SRAM. 1024 bytes de memoria EEPROM. 16 registros de trabajo de 16 bits cada uno. 4. Con qu herramienta se debe tener especial cuidado al instalarla? por qu? Debemos tener especial cuidado con la instalacin del compilador de lenguaje C MPLAB C30, ya que es una versin demo y una vez instalado, slo se puede utilizar de forma gratuita duran te 60 das. 5. Qu herramienta generara automticamente el cdigo fuente necesario para desarrollar un filtro para un controlador dsPIC? La herramienta para el tratamiento de filtros digitales dsPIC Fd Lite.

SOLUCIONES APLICACIN 1

I. Qu es un filtro ? Para qu sirve? Cite ejemplos de aplicacin. Se trata de un elemento que discrimina cierto rango de frecuencias de una seal que pasa a travs de l.
281

282

dsPIC DISEO PRCTICO DE APLICACIONES

Un ejemplo de aplicacin se puede observar en los microfltros que se conectan a las lneas de telfono cuando se utiliza ADSL para transmitir por el mismo canal voz y datos. 2. Defina los cuatro tipos de filtros esenciales que permite disear la herramienta dsPIC Fd Lite . Filtro paso bajo: Es aquel que permite el paso de frecuencias bajas y atena frecuencias mayores. Filtro paso alto: Es el que permite el paso de frecuencias desde una frecuencia de corte de terminada hacia arriba, sin que exista un lmite superior especificado. Filtro paso banda: Permite el paso de componentes frecuenciales contenidos en un determi nado rango de frecuencias, comprendido entre una frecuencia de corte superior y otra infe rior, atenuando el resto. Filtro elimina banda: Es el que dificulta el paso de componentes frecuenciales contenidos en un determinado rango de frecuencias comprendido entre una frecuencia de corte supe rior y otra inferior. 3 . En el ejemplo propuesto , para qu sirven los parmetros Stopband Ripple (dB) y Pashhand Ripple (dB)? Definen el porcentaje de la seal original que debe eliminarse para la banda eliminada (stop band ripple) y el porcentaje de la seal original que puede eliminarse como mximo de la se al original en el rango de frecuencias fuera de la banda seleccionada (passband ripple). 4. Para qu se ha usado la Transformada Rpida de Fourier? Para estudiar la seal en el rango de las frecuencias y as localizar una que sea muy distinta a la del resto de la seal y que probablemente est generada por una fuente distinta. 5. En qu lenguajes se puede generar el programa de filtrado? Tanto en ensamblador como en lenguaje C

Ejercicio

Los pasos para filtrar la seal son los siguientes: 1. 2. 3. 4. 5. 6. Crear el filtro con el programa dsPIC Fd Lite. Generar y guardar el fichero de coeficientes. Convertir la seal de entrada del formato .WAV a formato .TIM. Desde el programa dsPICworks, aplicar el filtro sobre la seal original. Convertir la seal de salida de .TIM a .WAV. Escuchar la seal en el reproductor de Windows.

Si no se consigue, puede que estos datos le sean de ayuda, aunque quizs desee primero inten tarlo sin pistas. Caractersticas del filtro: Sampling Frequency: 44100 Passband Frequencies: 4800 5000 Stopband Fequencies: 4000 5600 Passband Ripple (dB): 0.1 Stopband Ripple (dB): 50

APNDICE B: SO LU CIO N ES A LO S EJERCICIOS DE A UTO EVA LUA CI N

283

SOLUCIONES APLICACIN 2

1. Qu ficheros son necesarios para todo proyecto escrito en ensamblador?


F icheros a aadir a n u estro p ro y ecto
C:\Archivos de programa\M crochp\M PLAB ASM30 Sute\lib\C rl0.s C:,\Archivos de program a\M icrochp\M PLAB ASM30 Suie\Mb'sCrtl .s Q \A rch ivo s de programa\M icrochip\M P LAB ASM.'iO Suite\support\gld\p30f4013.gld C:\Archiyos.de program a\M icrochp\M PLAB ASM3.0 Suite.\support\inc\p3Q4)13.nc

2. Para qu sirven los ficheros aadidos a un proyecto en C? Para aadir las definiciones de las rutinas de inicializacin, definir posiciones de memoria, etiquetas para interrupciones, utilizacin de nombres sim blicos,... 3. Qu hace la instruccin ADD W0,W 1,W 0? Suma el contenido de los registros generales WO y W1 y deja el resultado en WO. 4. Cul es la etiqueta de inicio de programa en ensamblador? _main: 5. Dnde se encuentra la rutina de reset de nuestros programas? Se encuentra entre los ficheros que aadimos a nuestro proyecto.

Ejercicio:

Resuelto en el Captulo 4.

SOLUCIONES APLICACIN 3

/. Q u depuradores soporta la herramienta M PLAB IDE? Dnde puedo observar las limi taciones del simulador software? Soporta tanto depuradores software como el MPLAB SIM, o depuradores hardware como la herramienta MPLAB ICD2. Para ver las limitaciones del simulador se puede acceder al men men Debugger -> Settings. .. y acceder a la pestaa Limitations. 2. Q upasa cuando se ejecuta nuestro programa paso a paso? Cundo se ejecutan las ins trucciones del cdigo fuente? Al ejecutar el programa paso a paso la primera instruccin que se ejecuta no es la que se ha escrito en el fichero fuente, sino las que se han aadido en los ficheros del proyecto que con tienen las rutinas de reset, etc. Para poder ver la ejecucin del cdigo ms rpidamente se es tablece un punto de ruptura en la primera lnea de programa y se ejecute el mismo. As, tras ejecutar esas rutinas de inicializacin, el programa se detendr en la primera lnea de cdigo y se podr ver su ejecucin paso a paso.

284

dsPIC. DISEO PRCTICO DE APLICACIONES

3. Cmo se puede observar con el simulador el nmero de ciclos que tarda en ejecutarse una instruccin? Mediante la opcin Debugger -> StopWatch se observa el nmero de ciclos y el tiempo trans currido entre distintos puntos del programa, 4. Describa las limitaciones del simulador. Las limitaciones del simulador MPLAB SIM pueden observarse en el men Debugger->Settings, bajo la pestaa Limitations. As por ejemplo, puede observarse que la comunicacin UART no puede simularse en real, pero s redirigir la salida a pantalla o a un fichero. 5. Mediante qu opcin del men se podra visualizar parte de la memoria de datos EE PROM? Podemos desde el MPLAB IDE escribir en ella? Mediante la opcin del men View-> EEPROM se puede leer y escribir en la zona de la me moria de datos EEPROM.

E jercicios

Confeccione un programa en ensamblador que contenga la instruccin ADD, MOV, GOTO y CPSEQ. A continuacin simule el programa y calcule el nmero de ciclos de instruccin en los que se ejecuta cada una de esas instrucciones. Como solucin al ejercicio, ya que una de las instrucciones que debe incluir el programa es la instruccin CPSEQ, se propone confeccionar un program a que inicialice el registro WREGO con un valor, por ejemplo OxOFR e ir sumando a WREG1 una unidad, hasta al canzar dicho valor. Para ello, se podra confeccionar el siguiente programa:

:AUTOEVALUACIN APLICACIN 3.1. -.CONTANDO LOS CICLOS DE INSTRUCCIN ;EL PROGRAMA VA SUMANDO I A W L HASTA ;LLEGAR AL VALOR DE WO QUE LO INICIAMOS

;CON EL VALOR OxOOFF .global _main .text mam: MOV #OxOOFF,WO MOV #0x0000, W1 SUMA: ADD W ) ,#0x0001, W l CPSEQ W0,W1
GOTO SUMA FIN: NOP .end

;INICIALIZAMOS W0=0x0FF ; 1N1CIALIZAMOS W 1=0x0000 ;SUMAMOS 1 A W1 ;SI SON IGUALES W 0Y W 1 SALTA ;LA SIGUIENTE INSTRUCCIN GOTO VOLVEMOS A SUMAR iFINL. W0 Y W1 SON IGUALES

APNDICE B: SOLUCIONES A LOS EJERCICIOS DF AUTOEVALUACIN

285

Con la prim era instruccin MOV, el registro WREGO se inicializa con el valor OxOOFF. Con la siguiente MOV, W1 toma el valor 0. El programa pasa a continuacin a un bucle que se repetir siempre hasta que W 0 y W1 sean iguales. Ya que mientras no sean iguales se repetir siem pre la instruccin ADD que suma uno a W l y la instruccin de salto in condicional GOTO SUMA. Sin embargo, cuando los dos datos sean iguales, la instruccin CPSEQ har que la instruccin GOTO SUMA no se ejecute y por tanto se llegue al final del programa. Al simular el program a paso a paso, mediante la opcin del men D ebugger->Sopwatch , se puede observar el nmero de ciclos de instruccin ejecutados en cada momento. As, se puede deducir fcilmente el nmero de ciclos de instruccin necesarios al ejecutar cada una de las instrucciones anteriores. Dicho nmero de ciclos de instruccin se recoge en la si guiente tabla:
In s tru c c i n MOV ADD CPSQ GOTO N C ic lo s de in s tru c c i n

1 J_
1

Confeccione un programa en lenguaje C que le perm ita observar cmo cambia el bit de aca rreo de la palabra de estado. La solucin ms rpida para observar el acarreo es colocar en un registro como WREGO el valor mximo que puede contener y sumarle 1.

// Aplicacin 3.2 // Programa en C para la observacin // del bit de acarreo. #include ,'p3 013.h" int niain(void) { WREGO = OxFFFF; //Inicializamos WREGO a OxFFFF WREG0++: //Postincremento de WREGO rcturn(O); } .

Al ejecutarlo paso a paso, se puede observar bajo el men View->Special File Registers c mo cambia el valor del registro de estado SR al ejecutar el postincremento de WREGO.

SOLUCIONES APLICACIN 4

1. Q u significa que una instruccin de comparacin y salto , salta la siguiente instruccin? Significa que cuando se cumpla la condicin de salto, es decir cuando la condicin de la ins truccin de salto sea cierta, entonces el programa no ejecutar la siguiente instruccin. As,

286

cJsPIC. DISEO PRCTICO DE APLICACIONES

normal mente, para realizar una instruccin condicional tipo IF, suele colocarse una instruc cin de salto incondicional tras la instruccin de salto condicional. Con lo que se consigue que mientras la condicin no sea cierta, el programa salte a la etiqueta de la segunda instruc cin y, por el contrario, cuando la condicin sea cierta, entonces el programa siga la secuen cia de instrucciones siguientes. 2. Qu utilidad tienen las distintas etiquetas de inicializacin de datos? Sirven para inicializar la memoria de datos del controlador, disponiendo de distintas zonas de memoria segn las necesidades del programa. 3. Cuntas instrucciones DSP se han aadido al repertorio de instrucciones de la fanula dsPIC30F? Se han aadido un total de 19 instrucciones DSP que permiten realizar complejos clculos matemticos de una forma rpida y eficaz. 4. Para qu sirve la instruccin MAC? La instruccin MAC multiplica dos valores y acumula el resultado en el acumulador. Se uti liza a menudo en el filtrado de seales.

Ejercicios

Confeccione un programa en ensamblador, ejercicioDSP\ que calcule el resultado de la si guiente ecuacin: yn = boXn - b ]X n. b 2x n.2 - bjXn.3
-

Para el clculo se usan los siguientes coeficientes:


b, 0x0001 0x0003 0x0007 0x0001
Xn

OxOOFF 0x0005 0x0002 OxOOOF

A continuacin , simule el programa y observe el resultado de la ecuacin . Procure hacer el programa con el m enor nmero de instrucciones posible y utilizando las nuevas instruccio nes DSP. La ecuacin del ejercicio planteado es muy similar al ejemplo de filtro FIR. Las ecuaciones son muy similares: yn = b()x - b ]xn.] - b2xn.2 - b3xn.3 e yn = b0xn + b,xn.| + b2xn.2 + b3xn.3

En el caso de este ejercicio, para su resolucin debe acumularse el valor del prim er coefi ciente b0xn y luego restar el del resto de coeficientes. Para la prim era suma se recomienda usar la instruccin MPY, y para la resta de los siguien tes coeficientes, usaremos la instruccin MSC de multiplicacin y resta.

APNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVALUACIN

287

;Programa Ejercicio DSP resolucin de la ecuacin yn=b0Xn-blXn-l-b2Xn-2-b3Xn-3 ;Priinero haremos |a multiplicacin bOXn con la instruccin MPY y a ;eontinuacin gracias a la instruccin MSC iremos ;restando el resto de operandos include p30f4013.inc" .global _main ;Scccin de datos de la Memoria X. Coeficientes h0,bl,b2 y b3 .section coeficientes, dala, xmemory, address(0x0800) bi: .hword 0x0001, 0x0003. 0x0007, 0x0001 ;Seccin de datos de la memoria Y. Xn, Xn-1, Xn-2, Xn-3 .section inputs, data, ymemory, address(OxOCOO) xn: .hword OxOOFF, 0x0005, 0x0002, OxOOOF

.tcxr
_main: bsel CORCON,#lF mo\r#bi,W8 mov |W8++J,W4 ;Operaciones con enteros ;Mover la direccin de bi a W8. ;C1 contenido de la direccin de W8 lo llevamos a W4 ;y dejamos W8 apuntando al siguiente dato, mov #xn,W10 ;Mover la direccin de xn a W10. mov [W J0++1AV6 :Contenido de la direccin W10 aW. Dejamos W6 ;apuniando al siguiente dato ;lnstruccin MPY multiplicamos W4 y W8 sobre el acumulador ;y hacemos que tras la operacin, estos contengan los siguientes coeficientes ;y que W8 y W10 apunten a los siguientes. mpy W4nV6,A,lW8]+=2,W4,[W101+=2,W6

repeat #0x0002 ;repetir 3 veces (una por cada resta de la ecuacin) nivSCW4*W6,A*;[ W 8 ]+=2, W4,[W 10]+=2,W6 ; Instruccin MSC, Multiplicacin y resta. ; Multiplicamos W4 y W6 y lo restamos al contenido del acumulador A ; Adems, movemos el contenido de W8 a W4, coeficiente b ; y postincrementanios W8 para que apunte al siguiente coeficiente b ; As mismo, y gracias a que se encuentra en la zona de memoria Y, tambin podemos ; hacer que W recoja el dato apuntado por W 10, es decir el siguiente Xn ; y postineremen tamos W10 para que apunte al siguiente Xn. n o p ; No operar. .end . :

En la Figura BP.l podemos observar el resultado en el acumulador, tras la simulacin:

SOLUCIONES APLIACIN 5

I. Cuntos bytes como mnimo se deben grabar cuando se realiza una operacin de grabacin de memoria FLASH de programa? Como mnimo se deben grabar 32 instrucciones o posiciones de memoria, las cuales tienen cada una 3 bytes. Luego el nmero mnimo de bytes a grabar mediante esta operacin es de 96 bytes.

288

dsPIC DISEO PRCTICO DF APLICACIONES

Figura BP.1. Resultado d$ la simulacin del ejercicio.

Ejercicio:

Utilizando el simulador, visualice el cdigo en hexadecimal correspondiente al siguiente programa: ;Movemos un 2 a l registro W l ;sumamos el registro WO y W l y dejamos ;el resultado en WO
.

mov #0x0002 , W i add WO. W l, WO

> -.

A continuacin cree un programa que, leyendo esos datos de la seccin de datos del progra m a, grabe ese programa en la m em oria FLASH de program a a p a rtir de la direccin 0x000300. Al simular el programa que acompaa al enunciado del ejercicio, se pueden observar los c digos de operacin correspondientes a las instrucciones citadas, mediante la ventana Program Memory. En la Figura BP.2 se puede observar el cdigo correspondiente. A s el cdigo que el programa debe grabar en la memoria de programa, debern ser los si guientes 6 bytes: 20 00 21 40 00 01 El cdigo fuente correspondiente al programa que graba estos 6 bytes se encuentra desarro llado en lenguaje C.

// PROGRAMA grabaprograma // Este programa escribe el cdigo #include M p30f40l3.h''

APNDICF B: SOLUCIONES A LOS E)ERCICIOS DE AUTOEVALUACIN


.MPLAB IDE v7 .2 0 H a O it y Erojeil

289

teOjyj* PiOYifwet Tocfc Configure W ndm H *


3 M f i Cf I? U B> ( : $ J C hedcsum : 0x6814 | t II M

i G W

fe Q

1 i

1 20S 206 200 209 210

iU l es OD198 0019A 0019E OOIAO OD1A2 O1A4

| OpCOCJC | 5A4000 7EOOOO 900001 OOOOOO rc u o o o FFF7FF BGGCrvctBR re s e t

S is a js r m n ly ____________

I p UpCOfeH j) Mactvvs

atW .W 0 X 0 0 0 0 ,0 X 0 0 0 2 ,0 X 0 0 0 0 nop re s e t aopr

Syrrbcc | PSV.Mwdj PSVData|

Figura BP.2.

Obteniendo los cdigos de operacin del programa en ensamblador.

int secuenciagrabacionQ
// Esta funcin escribe la secuencia de grabacin // tanto para borrado corno para grabacin

NVMADRL = 0x0; NVMADR = 0x300; NVMKEY = 0x55; NVMKEY = OxAA; NVMCONbits.WR= 0x1; asmCNOP"); asmC'NOP"); retrn 0;
Y * * * > ; : * -+ // Programa principal
j[*

//Apuntamos la pgina //Apuntamos el desplazamiento en la pgina //Movemos a NVKEY la secuencia 55 //Movemos a NVMKEY la secuencia AA //Activamos el bit WR de NVMCON //Esperamos 2 nops

** *

* *# * * * * * Je* * * + * *

int main(void) int a = 0; //Borramos la memoria NVMCON = 0x4041; a = sccuenciagrabacion(): while(N VMCONbi is.WR == 1); //PRJMERA INSTRUCCION WREG2 = 0x0021; WREG4 = 0x0020; /A'ariable auxiliar //Configuramos NVMCON para borrar FLASH //Ejecutamos secuencia borrado/grabacin //Esperamos al bit WR de NVMCON sea 0 //Escribimos los 3 bytes 200021 correspondientes //a la instruccin MOV //Apuntamos a la pg. de la direccin a leer //Apuntamos al desplaz. dentro de la pgina //Escribimos en el registro el cont. de W2 en parte bajar //Escribimos el cont. de W4 en la parte alta

TBLPAG = 0x0; V VREGO = 0x300; asmCTBLWTL W2, [W0],,); asmCTBLWTH W4,[W0++]");

290

dsPIC. DISEO PRCTICO DE APLICACIONES

//SEGUNDA INSTRUCCION WREG2 = 0x0001; //Escribimos los 3 bytes 400001 correspondientes WRRG4 = 0x0040; //a la instruccin ADD WREG0 = 0x302; //Apuntamos al desplazamiento dentro de la pgina asmfTBLW TL W2. [W0]M ); //Escribimos en el registro el cont. de W4 asmCTBLWTH W 4,[W 0++r); //Escribimos el cont. de W4 en la parte alta //Rellenamos el resto de las 32 instrucciones con l i l i l for(a = 3;a<=32;a++) r i WREG2 = 0x11J ]; WREG4 = 0x0011; WREG0 = 0x300 + (a-l)*2: asm fTBLWTL W2, [W0]"); //Escribimos en el reg el cont. de W4 asmfTBLW TH W4}|W0++],,); i NVMCON = 0x4001; a = sccucnciagrabacion(); while(NV MC O Nb it s.W R == 1); return 0; //Configuramos NVMCON para grabado EEPROM //Ejecutamos secuencia borrado/grabacion //Esperamos al bit WR de NVMCON sea 0

ii"!f"v> '< /

Tras simular el programa, puede observarse en la Figura BP.3 la ventana Program Memory con el cdigo correspondiente a las dos instrucciones ya grabado.

Fd .

pew

f ro j-tt

DjsUW-

P rcv r T iiw

Iccfc

Q orftyje

' ckm

Hejp C hccksum : 0x5a20

af H ^16* 1 ? j, da? O i# s# i j 'C ^^iw u w :o ritf;S ,fl{ir ^y io ^^^.cu n w n tiw \g ra|> ap ro g rai.M \aft> p f t'r
D.EC2 - 0 x 0 0 0 1 .

VUC( - 0x0043.
VPXCO - 0x 3 0 2 , M B t 't B L D l b V 2 , J IlU -tM - 9 .M V .9 2 VP3S2 - C x l l l l . TO3-34 - 0 x 0 0 1 1 . OSHOO - 0 *3 0 0 t 1>M a < 7BLUTL V 2 , |U 0 J ' .o - T B W T H K . I W m ; |OOJ / / e r ib i Q * n

O m TlLTH Y 1JO O + + 1'

* 1

re g n rs re

e l c c ik .

de V i

ea e l r c f f i r r o

e l c o n c . de

HunccN - UX40V1; / / C m t i f l u r o x o s W/ ICC p i r a rafca.d z i t s c x o s c v e n c lo jT a S o c io n " ; - / .'S :c c u c o b c s r a c u s s c i i b o r c ftd o /q tia liM c i

Pjiijr<iin M innnry | L in e A d trc a s 382 383 384 385 386 am 002 7 A O pcode r is a a s tin b ly nnpr nopr nopc tr o v .a 0 x 2 , 0 x 0002 a d d .c i 0 x 0 0 0 0 ,0 x 0 0 0 2 ,0 x 0 0 0 0 n h r Ov v i i h . r nynnn? i . rnxnnn-J i . ~ .v .- lv .v . PSV Pal |

jf5 .4

002 ye
002 ?S 00300 DC30Z nr/n

F7TFTT r? rrtr
F ? rr? r 200021 ) i m i - i

.
Opee He || Martin S>nx4c PSV MrJ

>

I ! M l asf
Figura BP.3.

d tK C H 0 1 3

oab.saa IPO ctiavi r

La memoria de programa grabada correctamente.

APNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVALUACIN

291

SOLUCIONES APLICACIN 6

7. Q u perifricos se pueden inicializar con la herramienta Visual Initializer? Todos los perifricos que disponga el modelo del controlador seleccionado cuando se crea el proyecto mediante la opcin Project Wizard. 2. Qu salida genera la herramienta Visual Initializer? La herram ienta Visual Initializer genera un fichero llamado initdsPIC30F4013.s que se lla ma con la siguiente instruccin en ensamblador:

y con el lenguaje C:
yv' ..... Visual ' IO .U WInitial izationV i l i i l i
fifigg&ggagg !w ^w *'\v>:vi

3. Cmo se puede sincronizar la velocidad con la que trabaja la herramienta Visual Initializer y el Sim ulador MPLAB SIM? Para sincronizar ambas velocidades, se debe proceder a configurar con la misma velocidad el Simulador MPLAB SIM y la herramienta Visual Initializer. Para ello, el programa MPLAB SIM dispone de la opcin Debugger->Settings y bajo la pestaa Osc/Trace se puede esta blecer la velocidad del oscilador. Por otro lado, para acceder a configurar la velocidad de la herramienta Visual Initializer, se debe hacer doble clic sobre el icono Oscillator que se en cuentra en la representacin grfica del controlador. 4. De cuntos temporizadores dispone el controlador dsPIC30f4013? 5 Temporizadores de 16 bits: Tem porizadorl, Temporizador2, Temporizador3, Temporiza d o ^ y Tcmporizador5. 2 temporizadores de 32 bits, el primero compuesto de los temporizadores 2 y 3 y el segundo por los temporizadores 4 y 5. 5. Dnde se encuentran almacenadas las definiciones de las etiquetas correspondientes a las distintas interrupciones? En el fichero p30f4013.gld.

Ejercicio

Cree y simule un programa que cambie de estado un led, siempre que transcurra un minuto de tiempo , o bien se active por flanco ascendente una seal conectada a un pin del controlador La solucin implementada va a contar 60 segundos. Es decir, usando la misma inicializacin del ejemplo semforo del Captulo 5 y siguiendo los pasos detallados en ese captulo se con sigue inicializar los perifricos utilizados para contar 1 segundo. En la rutina de atencin a la interrupcin del temporizador contaremos 60 llamadas y as se obtiene una temporizacin de 1 minuto. En esta inicializacin tan slo se debe cambiar la configuracin de la interrupcin INTO y sustituir el flanco ascendente por flanco descendente.

292

dsPIC DISEO PRCTICO DE APLICACIONES

El cdigo fuente del programa podra ser el siguiente:

#include "p30f4013.h" //Programa Semforo en lenguaje C int segundos = 0; //Esta funcin atiende a la interrupcin del temporizador void _attribute (( interrupt )) _T 1Interrupt(void) JFSObits.TIF = 0; //Borramos el flag de la interrupcin segundos = segundos +1; //Sumamos un segundo if (segundos ==: 60) //Cuando llegamos a 60 segundos, cambiamos semforo { if (PORTDbits.RDO 1) //Si el semforo est a rojo PORTD = 2; else //lo ponemos en verde y viceversa PORTD = 1; segundos = 0; //Volvemos a contar un minuto, i i //Funcin que atiende a la interrupcin extema INTO void attribute (( interrupt )) _INTOInterrupt(void) { IFSObits.INTOIF = 0; //Borramos el flag de la interrupcin PORTD = 1; //Ponemos en rojo el semforo.

//Programa principal int main (void) { Visuallnitialization(); PORTD = 1; while(l) f asrnCclrwdt"); 1

//Inicializamos puertas y temporizador //Ponemos a rojo el semforo

//Esperamos en un bucle infinito

En la Figura BP.4 se puede observar el resultado del programa simulado en el que se apre cia cmo se cambia el semforo despus de haber pasado un minuto de tiempo.

SOLUCIONES APLICACIN 7

Complete la tabla con los valores de OC1 para distintos valores de TIMER2 en funcin de los parmetros elegidos en el Apartado A6.6

APNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVAI UACIN

293

Figura BP.4.

Cambio clel semforo al de un minuto.

TIMER2
OxOOFF 0x0100 0x0101 0x0102 0x0103 0x0109 0x0 JOA 0x0101i 0 x0 10C

OC1
0 0
1

1 1
1 1

0 0

Q u valor tendr el TIMER2 cuando se provoque la interrupcin __ O C lInterrupt? 0x0101

1. A qu instrucciones afecta la configuracin del M otor D SP ? Afecta a las instrucciones DSP, aunque algunas partes de esta configuracin como es el caso del modo de multiplicacin, slo afectan a las instrucciones DSP que utilizan el multiplicador. 2. Qu significa que la resolucin del conversor analgico digital sea de 12 bits? Significa que cuando se muestrea un dato de la seal original, se puede medir con una pre cisin/resolucin igual al resultado de dividir la diferencia entre las seales de referencia entre 2 12. As, por ejemplo, si la diferencia entre las seales de referencia es de 5 voltios, el conversor digital a analgico podr diferenciar entre valores de 5/21 2 = 0,001220703125 voltios.

294

dsPIC. DISEO PRCTICO DE APLICACIONES

3. Para qu se necesita un temporizador ju n to con el mdulo Input Capture? El mdulo Input Capture sirve para contar el tiempo en el que se da cierta condicin en un pin de entrada, Ese tiempo se obtiene al compararlo con el valor de un temporizador. 4. Qu utilidad pueden desempear los mdulos de comparacin de salida? Una de esas utilidades es generar seales con una anchura de pulso determinada. 5. Cmo puede configurar el mdulo U ARTpara una comunicacin a 2400 baudios, 8 bits de datos y uno de parada ? Mediante la herramienta Visual Initializer, colocando en la velocidad Baud Rate 2400 bps , Data bits 8 y Stop bits 1.

E je rcicio :

Mediante el simulador, almacene el siguiente cdigo en memoria EEPROM :


D ireccin
7FFC0Q 7FFC02

Contenido
0x4F48 0 x414C

A continuacin , cree un programa en ensamblador que transmita por el puerto serie el con tenido de esas direcciones de memoria. Simlelo y descubra el mensaje enviado. Tras inicial izar el mdulo UART con las caractersticas predefinidas, el cdigo correspon diente al programa ser el siguiente:

.global _main .include "p.WiOB.inc' .text _main: ; /;;;!

CALL _VisualInitialization MOV #tblpage(#Ox7FFCO()),WO MOV \V0,TBLPAG MOV #tbloffset(#0x7FFC00),W0 ; Leemos el dato EEPROM MOV W0.W1 TBLRDL |\V1]AV0 cali MandaCaracter ADD W L# 1,W 1 TBLRDL [\Vt|,W0 cali MandaCaracter ADD W 1,# LW 1 TBLRDL [W1],W0 cali MandaCaracter

;Movemos pag de la dir. a tblpag ;E1 desplazamiento a WO

;Cargamos en W4 el dato ledo ; En caso contrario escribe el carcter ;Cargamos en W4 el dato ledo : En caso contrario escribe el carcter ;Cargamos en W4 el dato ledo ; En caso contrailo escribe el carcter

APNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVALUACIN

295

ADD WI,#1.W1 TBLRDL | W 1JAVO CALL MandaCaracter GOTO Fin MandaCaracter: btss U 1STA,#TRMT bra MandaCaracter mov WO.UITXRP'G retrn Fin: nop .end

; Espera a poder transmitir ; Bit UTXBF de U1STA ; Si no puede transmitir espera : hscribe el carcter en el buffer TX ; retorna a la llamada :Fin del programa

I ras habilitar en el simulador el mdulo UART para obtener la salida por la pantalla se ob tendr el mensaje secreto en la pantalla de salida del simulador como puede apreciarse en la Figura BP.5.

Figura BP.5.

Enviando el mensaje secreto por el puerto serie.

Programe y simule un programa en lenguaje C, de forma que se lleve a cabo una conversin analgico digital por el pin ANO, con tensin de referencia en VREFH y VREFL, utilizando el temporizado r interno con un perodo de mu s reo de 0,002 micro segundos, con una velo cidad de reloj de muestreo de 30 * .5 * .Tcy deform a que cada 5 muestreos se genere una in terrupcin y obtenga la media de esos 5 valores. Al tratarse de un perifrico tan veloz, el calcular esa media y tomar ese valor como el valor resultado, nos va a perm itir minimizar el riesgo producido por la entrada de n u d o en nues tro muestreo.

296

dsPIC. DISEO PRCTICO DE APLICACIONES

Tras inicializar el mdulo ADC, el cdigo correspondiente a la solucin del ejercicio ser el siguiente:

#inelude "p30f4013.hM #include <stdio.h> unsigned int ADR1 = 0; unsigned int A_DR2 = 0; unsigned int A.DR3 = 0; unsigned int ADR4 = 0; unsigned int ADR5 = 0; unsigned int ADRESULTADO = 0; //Funcin que atiende a la interrupcin por el mdulo Conversr A/D void__attribute__((__interrupt__)) _ADCJnterrupt(void); void_attribute__((__interrupt__)) _ADCInterrupt(void) i lFSObits.ADIF = 0; //Reestablecemos el flag de interrup. ADR1 = ADCB UFO; //Guardamos el resultado en ADResultl ADR2 = ADCBUF1; //Guardamos el resultado en ADResult 1 ADR3 = ADCBUF2; //Guardamos el resultado en ADResultl ADR4 = ADCBUF3; //Guardamos el resultado en ADResultl ADR5 = ADCBUF4; //Guardamos el resultado en ADResult 1 ADRESULTADO = (ADR1 + ADR2 + ADR3 + ADR4 + ADR5) / 5; //Media } int main (void) l Visuallnitial ization (); while (1); return 0; }

; :'.v.||

'

' > *

.-.V.

!!* ;vi

' . * V -

* v l v O X !

v .-i

//Inicializamos el conversor // Entramos en un bucle infinito

Al simular el programa, la interrupcin se genera cuando se han muestreado 5 valores. Dichos valores se almacenan en los registros ADCBUF1, ADCB UF2, ADCBUF3, ADCBUF4 y ADCBUF5. Al hacer la media de estos 5 valores se alcanza un resultado ms inmune al ruido.

Tercera parte
Laboratorio experimental

Laboratorio 0. EL SISTEMA DE DESARROLLO PIC S chool............................................................299 Laboratorio 1. APLIC AC I N DE INSTRUCCIONES DSP C O N ENTRADAS Y SALIDAS DIG ITALES................................................................................................323 Laboratorio 2. M A N E JA N D O A FO N D O LOS TEMPORIZADORES DE 32 BITS.....................333 Laboratorio 3. O P T IM IZ A N D O LA CONVERSIN A N A L G IC O -D IG IT A L DE ALTA PRECISIN................................................................................................... 343 Laboratorio 4. C O M U N IC A C I N ENCRIPTADA C O N EL USART.............................................. 351 Laboratorio 5. C O N TR O L DE UN M O TO R DE CC M EDIANTE P W M ...................................... 359 Laboratorio 6. D IS E A N D O FILTROS................................................................................................367 Laboratorio 7. G R A B A N D O LA M E M O R IA FLASH DE PROGRAMA C O N U N BO O TLO ADER........................................................................................... 375 Laboratorio 8. M A N E JA N D O A F O N D O LAS INTERRUPCIONES............................................. 385 Laboratorio 9. PILO TAN D O UN FRMULA 1 ................................................................................. 393

LABORATORIO

El sistema de desarrollo PIC School


L0.1. IN T R O D U C C I N

La obra que tiene en sus manos consta de tres partes diferenciadas: Ia Teora: funcionamiento y programacin de los dsPIC. 2a Simulacin y programacin de aplicaciones. 3a Desarrollo de experimentos, proyectos y programas con hardware y software. Cada parte tiene una importancia fundamental para adquirir los conocimientos terico-prcticos necesarios para disear aplicaciones con dsPIC, pero la ltima en la que se maneja un modelo con creto de dsPIC al que se conectan diversos perifricos y dispositivos y se ejecutan programas en tiempo real es imprescindible para que el lector ponga manos a la obra y comience a disear y construir proyectos reales. Microchip realiza un gran esfuerzo para poner a disposicin de los usuarios de los productos que fabrica un conjunto de programas y herramientas que faciliten el diseo de las aplicaciones. As, go za de un gran prestigio el entorno de desarrollo MPLAB, cuya ltima versin siempre se puede ba jar libremente del sitio de Microchip en Internet, y que constituye la plataforma que soporta la ma yor parte de las etapas del diseo y la depuracin. Para cubrir el objetivo eminentemente didctico de la implcmentacin de los proyectos que pro ponemos en esta parte de la obra se ha seleccionado un equipo desarrollado y comercializado por la prestigiosa empresa Ingeniera de M icrosistemas Programados (www.microcontroladores.com). Se trata de un entrenador didctico universal denominado PIC School que sirve para todo tipo de microcontroladores PIC as como de perifricos y dispositivos complementarios. Este entrenador, ju n to con una serie de materiales complementarios para el desarrollo de aplicaciones dsPIC, conforman la plataforma necesaria para la programacin de los distintos laboratorios de esta tercera parte. El PIC School goza de una enorme flexibilidad porque se basa en un sistema modular con el que se puede abarcar el aprendizaje de todos los microcontroladores de 8 y 16 bits cncapsuiados con 40 patitas como mximo. Existen m dulos para los m icrocontroladores PIC12F, PIC16FXXXX, P1C18FXXXX, PIC24, dsPIC y otros. Tambin hay mdulos enfocados a la experimentacin de
299

300

dsPIC. DISFO PRCTICO DF APLICACIONES

dispositivos especficos como el bus CAN, USB, Internet, Bluetooth, etc. Para conseguir esta am plia gama de aplicaciones, la tarjeta contiene un grabador, fuente de alimentacin, numerosos pe rifricos y recursos que pueden conectarse a cualquier patita del procesador y una tarjeta de mon taje sin soldadura para aadir otros sensores o complementos que se requiera en cada mdulo. Cada uno de estos mdulos contiene el hardware especfico para el desarrollo de los experimentos, un tutorial didctico en el que se explica el funcionamiento de los elementos a los que se destina junto a una coleccin de proyectos completamente resueltos y comentados y, finalmente un CD con toda la informacin y programas necesarios para la implementacin de dichos proyectos. As mismo, en el CD que acompaa a esta obra, podr encontrar todos los laboratorios desarrollados en esta ter cera parte de laboratorios experimentales. (Figura LO. 1)

Figura L0.1. El entrenador universal PIC School.

El entrenador universal PIC School, no solamente sirve para desarrollar los laboratorios de esta tercera parte de la obra, sino que adems funciona com o grabador de distintos PTC y dsPIC y como sistema de desarrollo en el que los elementos que contiene no estn conectados, disponiendo de una plataforma de ampliacin y de adaptadores con los que puede aprender todo tipo de microcontroladores PIC, as como productos relacionados. Hay un mdulo para cada producto.

L0.2. EL FA B U LO S O "P IC S c h o o l"

Las principales caractersticas del PIC School son las siguientes:


Permite traba/ar directamente con microcontroladores PIC de 8 bits de las gamas baja, media y al ta con encapsulados de 8, 18, 28 y 40 contactos pudiendo incluso, con ayuda de un adaptador dar soporte a los dispositivos de 16 bits y a los potentes dsPIC. Adems dispone de un oscilador de cuarzo que permite trabajar a diferentes frecuencias, permitiendo tambin utilizar el oscilador RC incluido en algunos microcontroladores. Asimismo, y mediante un mdulo adaptador, tambin permite la ejecucin, depuracin y grabacin de controladores digitales de seales dsPIC.

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School

3 01

Dispone de un amplio y representativo nmero de perifricos, con la ventaja que ninguno de ellos se encuentra conectado de forma predeterminada a las lneas de E/S del microcontrolador. Es el propio usuario quien; mediante un sencillo cableado sin soldadura, conecta y asocia ios distintos perifricos esas lneas de E/S segn lo requira la aplicacin. Esto permite tener un contacto ms directo con l hardware y un mayor control del mismo. Adems dispone de una amplia superficie de BOARD en la cual se pueden conectar, sin soldadura, los perifricos necesarios para un pro yecto que no estn incluidos en el entrenador. Existe una serie de mdulos de prcticas opcionales en donde se van tratando diferentes temas raconidos con los microcontroladores: comunicaciones, Bluetooth, USB, CAN, R.F., control de motores, perifricos avanzados y un largo etctera. En esos mdulos tambin so describen apli caciones que permtan conocer las caractersticas de los PIC desde la sencilla familia 12FXXX has ta os potentes 18FXXXX. Cada mdulo consta de un conjunto de prcticas y todos los compo nentes necesarios para implcmentarlas. El.PIC School tiene tres modos de operacin diferentes que se seleccionan fcilmente mediante un conmutador. El modo "RUN se emplea cuando el dispositivo est grabado con el programa de aplicacin a ejecutar. Todas las lneas de E/S estn disponibles para el control de perifricos. El modo PC " se mpJ'a durante los ciclos de grabacin del dispositivo. Esta grabacin se realiza mediante el canal serio de un PC dotado del software de grabacin correspondiente (WinPic 800, IcProg, etc:.). Se suministra el cable de conexin con el PC. Finalmente el modo ICSP permite co nectar el laboratorio PIC School con otros grabadores externos dotados de las seales ICSP o bien con depuradores en circuito como el ICD2 de Microchip. De esta forma es posible la emulacn/depuracin/grabacin del dispositivo contenido en el laboratorio. Tambin existe un adapta dor opcional para conectar PIC School al puerto USB del PC.

A la hora de seleccionar los perifricos incluidos en este potente entrenador, cabe destacar que se han elegido los ms empleados que se distribuyen en las siguientes categoras.
Perifricos de entrada
Dos potencimetros capaces de simular cualquier entrada analgica. Cuatro interruptores deslizantes y cuatro pulsadores para soportar las entradas digitales. Un generador lgico capaz de generar ondas simtricas cuadradas de 1Hz, 10Hz, 100Hz y 1KHz indicado especialmente para aquellas aplicaciones que necesitan controlar tiempos o para aplica ciones en las que se emplean los mdulos de captura y comparacin (CCP) incluidos en algunos . ... microcontroladores.
Un teclado matrica de 4x4 teclas considerado el dispositivo de entrada por excelencia en aplica ciones microelectrnicas.

Perifricos de salida
m Och diodos LED que permiten monitorizar el estado de las lneas a las que se conectan. Un drver de cuatro canales capaz de proporcionar salidas de alta corriente permitiendo la conexin de motores, lmparas incandescentes, rels, etc. Una pantalla LCD de 2x16 caracteres que permite la representacin de mensajes mediante letras, nmeros o smbolos especiales.

Perifricos de comunicacin
% Interfaz serie. RS232 que permite adaptar los niveles lgicos del microcontrolador a niveles RS232. Interfaz CAN, que convierte las seales del microcontrolador segn las especificaciones de este BUS tan utilizado en redes sensoriales. m Conector RJ11, qu permite la conexin de dispositivos I2C, iButton, RS485, etc. Conector USB, que permte la conexin con cualquier dispositivo estndar existente en el mercado.

302

dsPIC. DISEO PRCTICO DE APLICACIONES

De esta forma, gracias a esta nueva herramienta, se solventan las cuatro grandes limitaciones existentes en el resto de entrenadores comerciales para microcontroladores: 1.a Es un entrenador vlido para todas las gamas de microcontroladores PIC, permitiendo al usuario seleccionar siempre aquel dispositivo que ms se ajuste a las necesidades especficas de cada proyecto. Pudiendo, adems, seleccionar la frecuencia y tipo de reloj ms adecuados en cada caso. 2.a Dispone de los perifricos ms universales utilizados en la microelectrnica, permitiendo que la conexin entre estos y el microcontrolador se realice a medida de cada experimento. Ade ms, gracias a la board que posee, cualquier dispositivo adicional se puede incorporar con fa cilidad. De esta forma se puede obtener el primer prototipo funcional de un proyecto en el m nimo tiempo y sin tener que realizar ni una soldadura. 3.a Gracias a sus tres modos de funcionam iento, el PIC School se adapta a todas las etapas que conlleva el desarrollo de una aplicacin m icroelectrnica, perm itiendo la emulacin, prueba y grabacin de m icrocontroladores PIC cam biando slo la posicin de un conm u tador. A s se evita la utilizacin de varios dispositivos que realicen cada una de esas tareas. 4.a Dada la gran cantidad de mdulos especficos para el aprendizaje prctico de microcontrola dores, dsPIC y productos novedosos, es posible conseguir en poco tiempo el conocimiento y la experiencia para desarrollar cualquier aplicacin real.

LO.3. ARQUITECTURA DE PIC School

La arquitectura de la tarjeta de entrenamiento universal PIC School, se divide en varias secciones que se presentan de forma pormenorizada.

LO.3.1. Fuente de alimentacin

Encargada de obtener la tensin general de +5Vcc con la que se alimenta el laboratorio PIC School, todos los perifricos de la misma y el procesador empleado. (Figura LO.2.)

Figura LO.2.

Fuente do alimentacin.

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School


API

303

CM 1

SW3

D1

U 1 IN

J A 7 . S 0 5 / T Q
OUT

-W
ON /O FF

-O +5VCC
AP?

1N4007
R3 330

3-15VDC

1 3

c2 :
C 28
lOOuF

100n

D3 Vcc ON

AP3

Figura L0.3.

Esquema elctrico de la fuente de alimentacin.

El esquema elctrico de la fuente se muestra en la Figura L0.3. A travs del conector CN1 se aplica una tensin de 9 a 15VDC procedente de un alimcntador estndar con el positivo al centro. El interruptor SW3 conecta el sistema. El diodo DI evita la polarizacin inversa y con ello los da os que se pudieran ocasionar al equipo. El regulador U 1 estabiliza la tensin a +5 Vcc con 1A m ximo. Dicha tensin, junto con GND estn disponibles en el conector A PI y AP2 respectivamente para alimentar a los circuitos y prototipos del usuario. En el conector AP3 est disponible tambin la tensin de entrada sin estabilizar +Vin para aquellos circuitos que la requieran. El diodo led D3 indica la presencia de tensin +5Vcc.

LO.3.2. El o s c ila d o r

Se encarga de generar la frecuencia principal de trabajo del microcontrolador. Su esquema se muestra en la Figura 1-5. Est formado por el dispositivo integrado XI y la red RC formada por R20 y C1. Me diante el jum per JP2 se obtiene la seal de reloj CLKIN. Cerrando 1-2 dicha seal la proporciona el oscilador X I. Cerrando 2-3 la seal se obtiene de la red RC. El valor de estos componentes determi na la frecuencia de la misma (consultar parmetros proporcionados por Microchip). (Figura LO.4.)

+ 5 V cc

46 V c c

Figura LO.4.

Circuito oscilador principal.

304

dsPIC. DJSEO PRCTICO DE APLICACIONES

El dispositivo XI contiene en su interior un oscilador preciso controlado por cuarzo y todo ello en una cpsula metlica en formato DIP8. Este oscilador, tambin llamado Canned O scillator , se puede adquirir para diferentes frecuencias segn las necesidades. Basta simplemente cambiar uno por otro para que la aplicacin se ejecute a ms o menos velocidad.

L0.3.3. Los microcontroladores

Es la seccin mas importante del entrenador PIC School y donde se instala el dispositivo PTC con el que se va a trabajar. Bsicamente consta de cuatro zcalos donde se pueden insertar los disposi tivos de 8, 18, 28 y 40 patitas tal y como se muestra en la fotografa de la Figura 1.7.

Figura LO.5. Zcalos de insercin de los microcontroladores.

Para los ejercicios de esta parte de la obra, se debe introducir el dsPIC30F4013 junto con un z calo adaptador en el espacio reservado para dispositivos de 40 patitas.

LO.3.4. Entradas analgicas

Estn formadas por dos potencimetros, tal y como se muestra en la fotografa de la Figura L0.6.

Figura L0.6.

Entradas analgicas.

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School

305

El esquema elctrico de las entradas analgicas se m uestra en la Figura L0.7. Las lneas de los potencimetros son directamente accesibles desde el bloque de conexin A P I6 correspondiente y se les puede conectar cualquier tipo de circuito elctrico analgico.

A P 16 ENTRADAS A N A LO G IC AS

Figura L.0.7. Esquema elctrico de las entradas analgicas.

LO.3.5. Entradas d ig ita le s

Se muestran en la fotografa de la Figura L0.8 y constan de 4 interruptores deslizantes y otros tan tos pulsadores.

Figura L0.8. Entradas digitales del entrenador PIC School.

La Figura L0.9 muestra el esquema elctrico de estas ocho entradas cuyas seales estn dispo nibles en el bloque de conexiones A P I8. Las seales E0-E3 proceden de los cuatro interruptores

306

dsPIC. DISEO PRCTICO DE APLICACIONES

deslizantes. Cuando estos estn abiertos (hacia arriba) proporcionan nivel lgico 1 gracias a las resistencias pull-up de RP2. Cuando cualquiera de ellos se cierra (hacia abajo) se conecta directa mente con la seal GND proporcionando nivel 0". Por otra parte, los cuatro pulsadores en situacin de reposo permanecen abiertos generando ni vel lgico 1 gracias a las resistencias pull-up contenidas en RP3. Cuando se accionan se cierra el circuito con GND y se genera nivel 0.

Figura L0.9.

Esquema elctrico de las entradas digitales.

LO.3.6. El generador lgico

Se muestra en la Figura LO. 10 y est basado en el dispositivo SYM10AA. Es capaz de generar on das cuadradas simtricas a frecuencias de 1Hz, 10Hz, 100Hz y lKHz. Est especialmente indicado para aplicaciones de control de tiempos y tambin para evaluar y ensayar con los mdulos de cap tura y comparacin (CCP) contenidos en ciertos modelos de dispositivos PIC. El esquema elctrico de dicho generador es el que proporciona su propio fabricante y se mues tra en la Figura LO. 1J. Puede servir como base para mltiples aplicaciones. La seal de salida se obtiene mediante el bloque de conexiones AP8. Por defecto la frecuencia de salida es siempre de 1Hz. Mediante el pulsador SW 2 se va seleccionando secuencialmente la fre cuencia a 10Hz, 100Hz, IKHz y vuelta a empezar con 1Hz. Los leds D5-D8 monitorizan la fre cuencia de salida en todo momento.

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School

307

Figura L0.10. Generador lgico de seales.

F R E Q .S E L E C

SW 2

i---- o

o
R 23 U6 SEL 10 K 1Hz 10HZ VDD 1 00H z 1KHZ GND S Y M -1 0 OUT 6 5 3 07 08 2 7 / y 1 A L rf D5

R17
+5VC C 470

+5VOCO-

022 :
lOOn

AP8

FR EQ

OUT

Figura L0.11. Esquema del generador lgico.

L0.3.7. El te c la d o

Como se aprecia en la Figura LO. 12, el laboratorio PIC School va provisto de un teclado matricial de 4 x 4 teclas. Se trata del perifrico de entrada por excelencia que va a permitir introducir todo ti po de datos para su posterior procesamiento.

Figura L0.12. El teclado.

308

dsPIC. DISEO PRCTICO DE APLICACIONES

El control del teclado supone el tener que aprender y utilizar una serie de tcnicas y conceptos que se emplean en las ms diversas aplicaciones. M anejar conceptos tales como barrido del tecla do , led a pulsada , rebotes , interrupcin con cada pulsacin , wake up con cada pulsacin , ctc.? da rn al usuario la posibilidad de acometer ambiciosos proyectos de carcter profesional. Un dato relevante a tener en cuenta es que a pesar de disponer de 16 teclas, tan slo son necesa rias 8 lneas de E/S del microcontrolador para su control. Ello es debido a su distribucin matricial. La Figura 1.17 muestra el teclado asociado al bloque de conexiones AP21. En dicha figura tambin se puede apreciar la relacin entre fila-columna y la tecla asociada. A s pues, la tecla 1 est asocia da con la fila 0 (F0) y la columna 0 (C0). En el laboratorio P1C School las 8 lneas del teclado se puede conectar a cualquier puerta del PIC, pero se sugiere conectarlo a las lneas de la puerta B (como se muestra en la Figura LO. 13). Esto se debe a que la mencionada puerta tiene, en la mayora de los dispositivos PTC, un par de caractersti cas muy interesantes para el control de un teclado: resistencias pull-up internas para las lneas de en trada y posibilidad de interrupcin cuando cualquiera de esas lneas de entrada cambie de estado.
SW5

Figura L0.13. Esquema elctrico del teclado.

Las cuatro filas F0-F3 de la Figura LO. 13 se conectan a RB4-RB7 y las cuatro columnas C0-C3 se conectan con las lneas RB0-RB3. La interseccin fila-columna da lugar a seleccionar una tecla en concreto. Es decir, si se pulsa por ejemplo la tecla 4, supone unir elctricamente la fila F1 con la columna C0, que es tanto como decir que las lneas RBO y RB5 del PIC se han unido. La rutina software encargada de explorar el teclado tiene que determinar qu tecla se ha pulsado. Pa ra ello, por ejemplo, se configuran las lneas RB0-RB3 (las columnas) como salidas y RB4-RB7 (las fi las) como entradas. Secuencialmente se van activando cada una de las columnas al tiempo que se lee el estado de las filas. Cuando se detecta que una fila est activa es porque se puls una tecla. Basta cono cer qu columna se activ en ese momento para sacar la relacin fila-columna que define a dicha tecla. Esta tarea, conocida como barrido de teclado , ha de repetirse de forma constante y peridica. De esta manera y, a la velocidad de trabajo del PIC, ser posible detectar una pulsacin en cualquier momento. Haciendo uso de algunas de las prestaciones que ofrecen los dispositivos PIC en la puerta B, es po sible desarrollar rutinas ms sofisticadas y eficaces. Efectivamente, programando los registros opor tunos de un PTC podemos hacer que las entradas RB4-RB7 (las filas) se conecten a las resistencias pull-up internas que hacen que esas lneas, en estado de reposo, estn a nivel 1. Por otra parte, tam bin podemos habilitar la interrupcin por cambio de estado de cualquiera de las entradas de la puer ta B. En este momento las salidas RB0-RB3 (columnas) se ponen a nivel 0 y esta situacin de re poso se mantiene mientras no se pulse ninguna tecla. El microcontrolador puede dedicarse a otras tareas o quedarse en standby reduciendo el consumo hasta que ocurra un suceso como puede ser la pul-

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School

309

saein de cualquier tecla. Efectivamente, puesto que RB0-RB3 (columnas) estn a 0 y RB4-RB7 (fi las) estn a 1 gracias a las resistencias pull-up internas, cuando se pulse cualquier tecla se produce una interrupcin por cambio de estado en cualquiera de las lneas RB4-RB7 (filas). Esa interrupcin provoca la inmediata atencin del microcontrolador que pasa a ejecutar la rutina que se encargar de averiguar qu tecla se puls.

LO.3.8. Salidas d ig ita le s

Estn formadas por 8 diodos led (S0-S7) que sirven para monitorizar el nivel lgico de las lneas a las que estn conectados.

Figura LO.14. Salidas digitales.

En el laboratorio PIC School los leds son accesibles mediante el conector A P I7 tal y como se mues tra en el esquema de la Figura LO.l 5, y se pueden conectar individualmente a cualquiera de las lneas del microcontrolador. Estas lneas son capaces de suministrar 25mA por lo que no es necesario ningn circuito adicional de amplificacin excepto las resistencias de absorcin contenidas en el pack RPl.
RP1 SIL 330

f,0 0 0 :0 (/! 0 0 W i n CO

-J rr> -J! & C O (O O

SALIDAS DIGITALES

Figura L.15. Esquema elctrico de las salidas digitales.

310

dsPIC. DISEO PRCTICO DE APLICACIONES

Un nivel lgico 1 por cualquiera de esas lneas provoca el encendido del led correspondiente. Un nivel 0 lo apaga. Es una forma muy simple y econmica de reflejar el estado binario de las li ncas de salida, donde cada led simula el estado de la carga que se desea controlar.

LO.3.9. Salidas digitales de alta corriente

El laboratorio PIC School dispone de un driver de 4 canales soportado por el dispositivo L293D y capaz de proporcionar salidas de alta corriente.

'

DRJVER 4 CANALES .6A

Figura LO. 16. Salidas digitales de alta corriente.

En la Figura LO. 17 se puede apreciar el esquema elctrico. El dispositivo integrado L293D dis pone de 4 canales amplificadores o drivers capaces de proporcionar salidas de hasta 0,6 A a 36V ca da uno, a partir de seales TTL de baja corriente. Mediante el conector AP6 se conectan las seales E1-E4 a amplificar y que proceden de sendas salidas del microcontrolador. El conector CN7 est formado por un conjunto de bomas o ciernas donde se obtienen las salidas S1-S4 debidamente amplificadas y se realizan las conexiones con las cargas a controlar. Mediante el jum per JP8 se selecciona la tensin de salida para las cargas. En la posicin l -2 (por defecto) dicha tensin es de +5Vcc. En la posicin 2-3 la tensin que alimenta a las cargas se apli ca externamente a travs de la bom a +VM. Mediante estas salidas de alta corriente el laboratorio PIC School puede controlar cargas de consu mo elevado, como pueden ser lmparas incandescentes, rels, motores DC, motores paso a paso, etc. Cabe indicar que el dispositivo L293D integra en su interior sendos diodos para la absorcin de com entes inversas provocadas por cargas inductivas.

L0.3.10. Interfaz serie RS-232

Su ubicacin dentro del laboratorio se muestra en la Figura LO. 18. Consiste en el clsico interfaz se rie que permite adaptar los niveles lgicos del microcontrolador a niveles RS-232.

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School


SAUOAS D E L D RIVER

311

CN7

CD CD CD CD CP
JP8

13
12

fffl
GND VDD GND GND GND
CO
IL

U5 L293D VCC
CO 2

1 6

-0+ 5V C C C21

2 2
lii

*-

q2

Oi
2

rz

100n

+5VCC O-

AP6 ENTRADAS AL D RIVER

Figura LO.17. Esquema de las salidas digitales de alta corriente.

Figura L0.18. Interfaz serie RS-232.

Segn el esquema elctrico mostrado en la Figura LO. 19 el interfaz est formado por el popular adaptador de niveles M AX-232. Mediante el conector AP5 se dispone de las seales de transmisin y recepcin (TxD y RxD) as como las de control de flujo CTS y RTS. Estas seales proceden del microcontrolador. El conector CN5 es un conector DB9 hembra estndar, que permite realizar la co nexin con el perifrico serie. Mediante un led bicolor (D17/D18) se monitoriza todo tipo de trans misin y/o recepcin.

312

dsPIC. DISEO PRCTICO DE APLICACIONES

Este interfaz permite realizar todo tipo de comunicaciones serie entre el laboratorio P1C School y cualquier otro equipo mediante el protocolo estndar RS-232. La velocidad de transferencia ir en funcin del tipo de microcontrolador empleado y su velocidad de trabajo. Se recuerda que algunos dispositivos PTC incorporan en su interior una UART completa que se encarga de realizar la mayor parte de los procedimientos propios de la comunicacin segn los pro tocolos tanto RS-232 como RS-485. En este ltimo caso basta con montar el sencillo circuito de adaptacin correspondiente sobre el mdulo board de montaje sin soldadura con que cuenta PIC School.
CN5 MAX232 U4 RTS RxD CTS TxD 12
11 10

T10UT T20UT TI IN T2IN C1 + C1V+ o O >

R 11N R2IN R 10U T R 20U T C2+ C2VQ 2 O

13

RTS

TxD
CTS RXD

C17 :

= j=

1001

C18 10On

INTERFACE RS-232

C15 : 100n

1
T
*5VCC

C16 10On

D17 ' R O JO fTx)'

r \

D18 VERDE (Rx)

C19 -XIo

10On
AP5 +5VCC CANAL SERIE

Figura LO.19. Esquema elctrico del interfaz serie RS-232.

LO.3.11. In te rfa z bus CAN

Est compuesto por el dispositivo adaptador MCP2551 que convierte las seales lgicas segn las especificaciones del bus CAN.

Figura L0.20. Interfaz bus CAN.

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School

313

El bus CAN permite crear una red con una transferencia de datos muy robusta y fiable entre el microcontrolador principal (host) y todo tipo de dispositivos o nodos CAN conectados entre s median te 2 hilos. Este protocolo es muy empleado por la industria del automvil y algunos dispositivos PIC incorporan mediante hardware interno todos los mecanismos necesarios para su implementacin. En la Figura L0.21 se muestra el esquema elctrico de este interfaz incorporado en el laborato rio PTC School. Por el conector APIO se proporcionan, procedentes del microcontrolador, las sea les RxCAN y TxCAN que van a parar al circuito de adaptacin MCP2551. Las seales de salida CANH y CANL se obtienen por el conector CN6 (DB9 macho) y de aqu van a parar a los diferen tes nodos de la red. El circuito de adaptacin es capaz de conectar con hasta 112 nodos. Mediante el jum per JP1 se habilita o no la resistencia Terminal R2 segn qu lugar ocupe el laboratorio en la red (por defecto habilitada).

Figura L0.21. Esquema del interfaz CAN.

LO.3.12. Pantalla LCD

Se trata de uno de los perifricos ms verstiles e interesantes que dispone el laboratorio PIC School. Se muestra en la Figura L0.22 y es capaz de visualizar dos lneas de 16 caracteres alfanumricos cada una. Este potente perifrico de salida va a permitir representar cualquier tipo de mensaje compuesto de letras, nmeros y smbolos produciendo adems diferentes efectos de visualizacin como des plazamientos a izquierda y derecha, parpadeos, scrolls, etc. 1.a transferencia de informacin entre la pantalla LCD y el microcontrolador se realiza en para lelo en grupos de 4 u 8 bits de datos y se conecta con las lneas de E/S mediante el conector AP20. El esquema elctrico se muestra en la Figura L0.23.

314

dsPIC. DISEO PRCTICO DE APLICACIONES

Figura LO.22. Pintalla LCD.

Existe adems otro conector, el AP9, donde se conectan las seales que controlan el flujo y ti po de informacin que se transfiere. Con la seal RS se determina si la pantalla recibe el cdigo ASCII del carcter a visualizar (nivel 1) o bien un cdigo de instruccin (nivel 0). Mediante la seal RW el m icrocontrolador informa a la pantalla LCD si se va a leer o escribir sobre la mis ma. Finalmente, con la seal E, se habilita o no a esa pantalla. Cuando esta seal vale 0 la pan talla queda desconectada, las lneas de datos quedan en alta impedancia. Cuando vale 1, la pantalla queda habilitada para recibir o mandar datos.

U 8 LC D

Figura L0.23. Esquema elctrico del LCD.

La resistencia R19 permite ajustar el contraste del LCD. Con el valor de 4K7 se consigue un con traste medio aceptable. Su valor se puede modificar.

LO.3.13. C o n e cto re s para in te rfa z RJ11 y USB

Son simples conectores de propsito general y se pueden observar en la fotografa de la Figura LO. 24.

LABORATORIO : EL SISTEMA DE DESARROLLO PIC School

315

Figura LO.24. Conectores USB y R) 7 7.

LO.3.14 Seccin de g rab aci n Se m uestra en la fotografa de la Figura L0.25 y se encarga, mediante el software oportuno, de realizar los ciclos de lectura/grabacin del dispositivo PIC contenido en el laboratorio.

Figura LO.25. Circuito grabador de la placa PIC School. El esquema por bloques de la Figura L0.26 trata de sintetizar el funcionamiento del circuito de grabacin que dispone el laboratorio PIC School. Todos los dispositivos PIC disponen de 3 seales para la lectura/grabacin de la memoria de pro grama, la memoria EEPROM para datos y la memoria de configuracin. La seal PTCDATA permite transferir los datos de forma serie y sncrona entre el PIC y el hardware de grabacin, la seal PICCLK transporta la seal de reloj para el sincronismo de los datos y la seal PICMCLR, que inicia los ciclos de lectura/grabacin y aplica la tensin Vpp necesaria. Estas tres seales son adems compartidas y empleadas como lneas de E/S de propsito general una vez que el PIC ha sido grabado.

316

dsPIC DISEO PRCTICO DE APLICACIONES

Estas tres seales se conectan con tres fuentes diferentes segn el modo de operacin seleccio nado mediante el conmutador SW4.

Figura L0.26. Esquema por bloques del circuito de grabacin.

El modo RUN se emplea cuando el dispositivo est grabado. Las tres seales del PIC anterior mente mencionadas se consideran lneas de E/S de propsito general y estn disponibles a travs de los bloques de conexin correspondientes, para ser utilizadas por los perifricos de la aplicacin. En el modo IC SP el laboratorio queda configurado para que el PTC actual insertado se pueda lccr/grabar a travs de las seales que se aplican mediante el conector R J11 (ICSP: In Circuit Se rial Programing). Estas seales a su vez las debe proporcionar un grabador externo dotado de su correspondiente software de grabacin. Se puede em plear el mdulo 1CD2 de M icrochip junto con el entorno integrado de desarrollo M PLA B, que se puede obtener de form a gratuita desde www.m icrochip.com. El mdulo ICD2 adems de grabar dispositivos es capaz de realizar depu racin en circuito en tiempo real, con ciertos modelos de dispositivos PIC. En el modo PC la lectura/grabacin del PIC se realiza a travs de las seales del canal serie de un PC dotado del correspondiente software de grabacin. Un diodo led, el Vpp ON, indica transfe rencia de datos entre el PC y el laboratorio. Entre los mltiples tipos de software existentes, noso tros hemos elegido el WinPICBOO y el IcProg, con los que hemos obtenido excelentes resultados. Ambos programas se pueden descargar y actualizar de forma gratuita en las direcciones http://perso.wanadoo.es/siscobf/winpic800.htm y en www.ic-prog.com. Se reitera una vez ms que, aunque un software de grabacin determinado grabe mltiples dis positivos y de diferentes familias, es necesario que tambin haya compatibilidad a nivel hardware. Esta compatibilidad viene dada fundamentalmente por la distribucin de patillas del dispositivo en cuestin.

L0.4. EL M D U L O DSPIC PARA LA PIC S chool

Para aprender a disear experimentalmente aplicaciones con la PIC School sobre diferentes dispo sitivos y temas. Ingeniera de Microsistemas Programados S.L. comercializa diversos mdulos conteniendo los componentes complementarios a los existentes en la PIC School y que requieren los proyectos que se proponen. As existen mdulos para el aprendizaje de PIC12F, PIC18F, Internet, Buetooth, USB, etc. El mdulo dsPIC , cuyo kit de materiales se muestra en la Figura LO.27 tiene la

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School

317

misin de soportar todas las experiencias que se proponen en este libro y muchas ms y consta de los siguientes componentes: 1. Adaptador de zcalo con dsPIC30F4013 incorporado. 2. Motor de corriente continua. 3. Circuito integrado para controlar LCD LCDSYM20AA. 4..Cables y material auxiliar. 5. Tutoral con ejercicios y proyectos progresivos comentados y resueltos (este libro). 6. CD con informacin tcnica y programas.

Figura L0.27. Fotografa que muestra los materiales que componen el "mdulo dsPIC" para realizarlos proyectos sobre dsPIC propuestos en este libro y muchos ms en la PIC School.

Para comenzar a trabajar con este mdulo, deber montarse el zcalo adaptador de dsPIC incor porando el dsPIC30F4013 sobre la placa PIC School. Para ello, la placa PIC School dispone de un nico zcalo de 40 pines donde se deber insertar. En cada aplicacin slo deber estar insertado el microcontrolador usado.

LO.5. DESC R IPC I N DEL SOFTWARE

El sistema PIC School puede programar un dispositivo dsPIC directamente a travs del puerto serie o emplear el canal ICSP y un programador de M icrochip. En caso de realizar la grabacin con un grabador de Microchip, el software de grabacin es el MPLAB, que permite la creacin de un pro yecto, su depuracin, simulacin y programacin en el dispositivo. En caso de que no se disponga de un sistema de desarrollo de Microchip, es posible grabar los dsPIC directamente con el hardwa re de grabacin que se encuentra en la tarjeta PIC School. Para ello, hay que disponer de un fiche ro hexadecimal correctamente compilado y de un software de programacin que se encargue de

318

dsPIC. DISEO PRCTICO DE APLICACIONES

transferir el fichero desde el ordenador hasta la memoria del dsPIC. Para realizar esta funcin de programacin, se puede utilizar el software WinPlCSOO. Se trata de un excelente programa de libre distribucin que puede descargarse de Internet y que se encuentra en la carpeta de Software de Pro gramacin del CD del libro.

LO.5 .1 . S o ftw a re W IN P IC 8 0 0

Este magnfico programa de Francisco Benach permite la programacin de la mayora de dispositi vos dsPIC presentes en el mercado. Segn van saliendo nuevos modelos al mercado, se puede des cargar una versin actualizada del software que incluya su programacin. La pgina web a travs de la cual pueden descargarse gratuitamente versiones futuras que permitan grabar nuevos dsPIC es: http://perso.wanadoo.es/siscobf/winpic800.htm Cuando se ejecuta el programa WinPlCSOO apare ce la pantalla principal que dispone de unos mens de acceso a configuraciones del programa y tam bin de unos conos para acceder directamente a las funciones ms empleadas, como borrar la me moria de programa, introducir un nuevo fichero en la memoria del dsPIC, etc. Se trata de un software genrico de programacin de microcontroladores PIC, pero que tambin recoge la gama de circuitos dsPIC. En la parte superior derecha de la pantalla existe un men desplegable mediante el cual se puede seleccionar el tipo de dsPIC que se va a programar. En la parte central del programa hay una pantalla en la que se muestra el cdigo hexadecimal con el que se est trabajando para la memoria de programa o de datos y un acceso directo a un men de seleccin de la palabra de con figuracin. El primer paso antes de realizar ninguna operacin de carga de ficheros es la configuracin del tipo de hardware de programacin que se va a emplear. Para configurar el tipo de hardware se ha de acceder al men Configuracin y seleccionar la opcin Hardware. Aparecer una pantalla en la que se puede seleccionar el tipo de circuito de programacin disponible. En nuestro caso, es necesario seleccionar el programador tipo PIC School. Adems de seleccionar este tipo de programador, otro paso indispensable consiste en seleccionar el puerto COM del ordenador a travs del cual se conec tar a la tarjeta PIC School. Por ejemplo, en la pantalla mostrada en la Figura L0.28, se ha selec cionado el puerto C 0M 3. Para seleccionar un puerto en el que conectar el equipo PIC School, se de be verificar previamente que es un puerto serie que se encuentra libre en el ordenador, es decir, que no est siendo empleando por un MODEM, un ratn u otro dispositivo. No hay que modificar el res-

V/nPlc800
Ed cor

3 .5 5 g Disposavo coftgjf acin Ldo.iv Ai,ua

1 S ch ivo

H I "S
C d ig o

! S* 2
D a '- u a FFFFFF FFFFFF FFFFFF FFFFFP FFFFFF FFFFFF FFFFFP FFFFFF FFFFFF FFFFFF FFFFFF FFFFPP

i%

i? %

j p x c r ! ^ !

30F4013

j j j

C o n tic i.

4$ C o d .T C S P
FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFPP FFFFFF FFFFFF

--FFFFFF FFFFFF

t& $
FFFFFF FFFFFF

0x00000 0x00010: 0x 0 0 0 2 0 : 0x00030 : U X U U 4 U : 0x00050 : 0x00060: <0x00070 : 0x00080 : 0x00090: O xOOOAO: OxOOOBO:

FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FPPPFF FFFFFF FFFFFF PFPFFF FFFFFF FFFFFF

FFFPFF FFFFFF FFFFFF PPFFFP FFFFFF FFFFFF PPFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF

FFFFFF FFFFFF FFFFFF FFFFFP FFFFFF FFFFFF FFFFFF FFFFFF FFFPPP FFFFFF FFFFFF

FFFFFF FFFFFF PPFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF >

FPPPPP FFFFPP FFFFFF FFFFFF FFFFFF FFFFFF

PPPPPF FFPPPP FFFFFF FFFFFF FFFFFF FFFFFF

P P F FF F PPPPPP FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF

PPPPPF F F F F F F

1 H x > T 7 e m rL F T l

Figura L0.28. Pntalla p rincipili del software de programacin WinPlCSOO.

LABORATORIO 0: EL SISTFMA DE DESARROLLO PIC School


w m P lc 80 [ H a rd w a re Confgi.
S o lc c c io n d e l H a rd w a re G IP - U S B - H F 1 G IP -U S B -2 3 2 IH E X - P a r a U L e l P o r t ;JD M P r o g r a m m e r M lc r o 4 y o u M ic ro 4 y o u _ 8 7 7 P o J )J .ln ;P ra P ro g ;PG 3D :P ic 8 0 0 . v Iti& s

319

de 3 /C eL p\s*rfco B loqueo contigui acin


9pp?.

^ / . w w m i : : s ic y . 0 .

F 1 F F xnvr r r

.-im f r . . ; .. 8 r l i DTK |c t s I r t s ! '* o IIMOV

Uc&Z V<d .U sa r 15clv

- In v F F

+4-

z
J jJ

F r F r . F

r r r r r

r r r r r

O :hy.

13
s I e J b

0 .

V f

jPlift

&

-m ^

sJ "
J -

J ::> !-

C a n c e la r

C onfi c a n t c a n b iu a

Figura L0.29. Primer paso: es necesario seleccionar el tipo de programador y escoger un puerto serie del PC.

to de iconos y casillas de seleccin que aparecen en la parte derecha de la pantalla. La seleccin del tipo de programador que se va a utilizar tan slo es necesario la prim era vez que se ejecuta el programa. Para aplicaciones posteriores, esta configuracin habr quedado almacena da como predeterminada, y se podr comprobar en la parte inferior izquierda de la pantalla princi pal, en donde aparece PIC School y el puerto COM seleccionado. El primer paso antes de iniciar una programacin consiste en seleccionar el modelo de dsPTC con el que se va a trabajar. En nuestro caso, se selecciona el 30F4013. El men de seleccin se encuen tra en la zona superior derecha de la pantalla principal. Al lado del nombre de cada modelo, se pue de apreciar una breve descripcin de sus caractersticas principales. (Figura LO.30.) Tras seleccionar el dispositivo, hay que abrir el fichero hexadecimal que se ha generado previa mente con el program a MPLAB y que se va a introducir en la memoria de programa del dsPIC. Pa ra abrir este fichero, se puede seleccionar el prim er icono de la parte izquierda de la pantalla que muestra una carpeta abierta. Al haber seleccionado un fichero hexadecimal para la memoria de pro grama, aparecer en la pantalla del software de grabacin un conjunto de datos en hexadecimal que se corresponden con el valor binario que va a ser introducido en cada una de las posiciones de me moria de programa del dsPIC. El software permite hacer un recorrido por toda la memoria FLASH del dsPIC y observar los vectores que estn ocupados con instrucciones y aquellos que se encuen-

VVinPic800

- 3. b i g

fcNvo Ejfan Dpipasiivo Cur/iga-scbc taioma filuda

G ?- ? Q

[U rrfid B w ife c
Figura LO.30. Seleccionando el modelo de dsPIC con el que se va a trabajar.

320

dsPIC DISEO PRCTICO DE APLICACIONES

W ln P f c 8 0 0 Fdctn

- 3 .5 5 g f^spcxtfwo H ^ '- D a t o s 002882 12U B AU B 13008 19 00 B A 1122E A E2057 77118A A D 082B 1 F 0 1 81 0601A 9 2601A 8 0900A 6 * i ![dem a Ainjd ? % | P IC x ! j J 1 30F4013

) @

I A rihw o G* *

C J C d ig o 0X 00000: 0x000111: 0X00020: 0x00030: 0x00040: 0X 00050: 0x00060: 0x00070: >0x00080: 0x00090: OxOOQAO: O xO O O B O :

C o n ig .

4 3 C o d .IC S P 0128X 8 303400 A 01803 411D 03 A P082D 0C 0821 A D 3001 0400A D 993019 6630FE 6400A C A A 0826

1 TA 000A 1 2F01A 1 B10DA1 40102E B0300A 992859 2A 2004 0C 082C 983026 673046 A A 3014 A B 0827

'% OCOBAO 211803 002824 4 0 1 .9 A B 202019 A 03030 6C 1E0C 99287B 833090 071283 A D 30FA A C 0828

#1 :* j.

8A 3000 A 03U 4A A 0282D 6400A P A E2843 033030 99205F 0400A D 002004 A 801A 7 A 70185 3120A C

84302D 000000 AOODAP A D 0820 0C 0821 2R 285C 0C 3043 A E3011 060583 9F1683 2700A A 328085

030800 090B 80 200830 300821 992845 A 13020 992865 01282E 9F1683 653000 2800A B A 800A 7

0B0BA1 A0082F 2D 0821 201A 2E 2100A D 0C 082D 010099 A D 3001 A 60098 A 6 3 IK 1 0 A A 2004 642064

H > P c B ro e r-C O M l

> DAPPALLBIX

_ _ _ _ _

Figura L0.31. Fichero hexadecimal abierto y listo para ser grabado en el dsPIC.

tran libres, en los que aparecer el cdigo por defecto FFFFFF. Adems de programar la memoria FLASH del dsPIC tambin es posible introducir datos en la memoria EEPROM de datos durante el proceso de grabacin del chip. Para poder acceder a la me moria de datos EEPROM se selecciona el icono con el texto Datos, el cual se encuentra a la dere cha del icono con el texto Cdigo, que es el que se selecciona para cargar la memoria de programa. Al seleccionar Datos, se pueden introducir valores en las posiciones que se deseen programar en la memoria EEPROM del dsPIC. Finalmente, antes de iniciar el proceso elctrico de grabacin, es conveniente revisar la palabra de configuracin del chip. Para acceder a la palabra de configuracin se debe seleccionar el icono Config que se encuentra a la derecha del icono Datos que se ha utilizado en el paso anterior. Se abre una nueva pantalla en la que se puede acceder a todos los modos de configuracin que admite el disposi tivo dsPIC que se ha seleccionado. En caso de que al compilar el programa se tuviera asignados unos valores para la palabra de configuracin, stos aparecern aqu cargados directamente, no siendo ne cesario volver a tener que seleccionar los valores de la palabra de configuracin para el dsPIC. Muy importante, al trabajar con la placa PIC School, deber seleccionarse como Oscilador Principal (Pri mar)* Oscillator) la opcin de la lista desplegable X T w/PLL 4X- X T crystal oscillator with 4x PLL. Una vez cargado el fichero .hex deber comprobarse antes de grabar el programa en la placa PIC School que la opcin del oscilador principal es la indicada ya que sta es la utilizada por la placa. Slo queda iniciar el proceso elctrico de programacin. En prim er lugar se borra la memoria de programa del dsPIC, para que contenga todas las posiciones con el valor FFhFFF y la programacin de un nuevo fichero se realice de forma ptima. Para borrar la memoria FLASH del dsPIC se dis pone de un icono de acceso directo que muestra un chip con una cruz roja sobre l. Si se sita el ra tn sobre este icono aparecer un texto que indica Borrar todo. Hay que seleccionar esta opcin. Tras borrar la memoria, el siguiente paso consiste en grabar el nuevo programa. El icono de ac ceso directo para realizar esta funcin muestra un chip con una flecha roja sobre l. Al situar el co no encima, aparece el texto Programar todo. Al realizar la programacin del chip, aparecer una ventana que indica el progreso de la programacin y en caso de que se detecte alguna anomala, apa recer un mensaje indicando que ha habido un error durante la programacin. (Figura L0.34.) Tras realizar una programacin es interesante com probar que el circuito ha sido correctamente grabado. Para realizar esta funcin, se dispone del icono que muestra una V de color amarillo en cima de un chip. Si se coloca el ratn encima, un texto indicar la opcin Verificar Todo. Si la ve-

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School

321

WfnPicBOO

- 3 .5 5 g

ychivo E<ton Expositivo

letama A^udo

G ^ 1 Q
Q
ox

S* % \ f? % fpicT

38TID13 ~ 1 3

Cdicro , ; ^ g P a to s
1231 PFPP FPPF FFFF FPPP 3fff FPPP FPPF FFFF PFPP FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF PPFF FFFF FFFF YYYY

C onfia.
FFFF FPPP FFFF FFFF PPFF

^ J c x l.x c s p
FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FPPP FFFF FPPP YYYY FFFF P IP F

FFFF

i*

7ffco o

FFFF FPPP FFFF FFFF FPPP FFFF FFFF PPFF FFFF PFFP FFFF FFFF YYYY

0x7P FC 10 0x7P P C 20 0X 7FFC 30 Q x7FFC 40 D X7FFC 30 0X 7FFC 60 0x7FFC 70 0X7FFC 80 O x7FFC 90 O xTFFC A O 0X7FFC B 0

rrrr
FFFF FFFF FFFF FFFF FFFF

FFFF
FFFF

FFFF
FFFF FFFF

rrrr rrrr
FPPP FPPP FFFF PPFF

rrrr
FFFF FFFF FFFF FFFF FFFF FFFF YVYY

rrrr rrrr
FFFF FFFF FFFF FFFF PPPP

FPPF F F F F FPPP F F F F FFFF FFFF FFFF FFFF FFPP

rrrr
FFFF PFPP

lftx 7 P P fO .fl F P P P

KF FK FFFF

IUr.hcfarer- COMI

DVPALHX

Figura L0.32. Cargando valores a programar en la memoria de datos del dsPIC.

rdevo tdoco

BspoaOvo Conftaraon idbon Ayuda

C ~ 0 ! ^
C 2 C d io o 4 -J DOCOO 4 C o n fig .

I r l c
4 g c d . IC S P : T"

30P413
. &

P rin x ry O s c illa r o r

- J id d r c o n f l g OkFSCOOO: C 7 0 1 OKF30C02: 8 0 3 F OkFWWH: 8 7 B 3 UKrwoot. a i o r B ro w n O xSW XK: 3 3 0 F CtxFSOOOC COO 3 w n r T if m k * A j 1.512

JpRC w /F t L 4 x Internai fast RC o s d U o r w ih 4x P IL 0 S C 2 p in is lIO . - O s e . S o u rc c o n PO H< Prnury C AJtena Osctor r C W P I ii t m d F ^ E C LowPw cr 32 K H z T x r r r I HPOL LPOL F W FTO TXN r r GCP GWRP ^ P BKBUG COE -C lo c k S w itc h in g G C C O .tal fe dock 0 8 O n .f safe dock Off On , b l u fe dock On -

PURI -

|2 .iY

P7 H C L R E N P H H P IN D tfP A L IH X X

wrarPiMMjeD I* * _J

ICD CanvunMticn FKUC * fKU O _J

17 B O R D I EUt -R cB urror-C O M I

Figura L0.33. Seleccionando la palabra de configuracin. Es un paso fundamental para que el progra ma que se va a programar se ejecute correctamente.

WinPic800 P r o g r a m a r - 3 0 F 4013 Detectado PIC -> DESCONOCIDO Borrando PIC . . . E rro r . . . E rro r . . .
1

Vdd 0 A

..yOZ
|

C an celar
dock-4 us

P ro g re so

f Conforme ;|
CPU -2806 Mhz

Cenar automticamente esta ventana al terminar

Figura L0.34. Ventana de progreso de programacin del dsPIC.

322

dsPIC. DISEO PRCTICO DE APLICACIONES

rificacin es correcta, el chip se encuentra correctamente programado y en caso de no funcionar nuestro programa se deber a una palabra de configuracin errnea o algn error cometido en el cdigo fuente escrito con el MPLAB. En caso de que el software de grabacin indique error, hay que revisar el hardware de progra macin. Por ejemplo, hay que comprobar que el equipo P1C School se encuentra correctamente ali mentado, lo cual se aprecia por el LED de color rojo de Power ON iluminado. Tambin es funda mental comprobar que el puerto serie del PC a travs del cual se est comunicando el equipo P1C School con el ordenador es un puerto vlido del ordenador y el mismo que se ha seleccionado en el men de configuracin del software. Otro icono que permite realizar una funcin que puede resultar interesante es el de lectura de la memoria del dsPIC, que muestra una flecha verde sobre un chip. Al realizar la lectura de la memo ria de un dsPIC se nos transfiere hacia el ordenador el contenido de la memoria de programa, de la memoria de datos y la palabra de configuracin. Esta lectura del dsPIC ser posible siempre que se encuentre programado sin la memoria protegida, puesto que si un chip al grabarse tiene habilitada la opcin de proteccin de memoria no ser posible leer su contenido. Es recomendable realizar una ltima configuracin a travs del men Configuracin: Software. Consiste en habilitar la primera casilla de la pantalla del men sealada con el texto: Verificar tras la programacin. Gracias a esta opcin, cada vez que se programe un nuevo dsPIC se realizar au tomticamente el proceso de verificacin y el software indicar con certeza si el chip ha quedado coW inPic800 [ S oftw are configuracin ]

r Verificar
r

tras la programacin

i A v i s a r a n t e s de b o r r a r y p r o g r a m a r Usar A u t o s e l e c c i n del disp ositivo D e t e c t a r y a u t o s e l e c c i o n a r el d i s p o s i t i v o a l e n t r a r

P A c t u a l i z a r e l A r c h i v o a n t e s d e p r o g r a m a r

j...C a n c e l a r

C o n fir m a r

Figura LO.35. Opciones del men de configuracin.

LABORATORIO

1
L1.1. OBJETIVOS

Aplicacin de instrucciones DSP con entradas y salidas digitales

Esta primera prctica utiliza las entradas y salidas digitales del equipo PIC School y el M otor DSP de los dsPIC. Los objetivos de la prctica son:
Realizar el primer programa bsico con dsPIC ejecutando correctamente todos los pasos de de sarrollo de un proyecto, que posteriormente se pueden aplicar a ejercicios mucho ms complejos. Manejar entradas y salidas digitales y las instrucciones DSP para realizar tareas que seran muy costosas en un microcontrolador MCU.

Las operaciones bsicas que realiza un m icrocontrolador MCU son las sumas, restas y opera ciones lgicas tipo AND, OR, XOR, etc. Otra limitacin importante de las familias clsicas de microcontroladores de M icrochip es el empleo de registros de 8 bits de datos, lo cual resulta muy limitado para aquellas aplicaciones que necesitan clculos matemticos con valores de m ayor lon gitud. Como ejemplo, a continuacin se muestra la rutina en ensam blador que realiza una opera cin tipo M ultiplicacin de 16 bits con un m icrocontrolador PTC de la familia 16F87x:
MULVI: MLU16LOOP: CLRF RESULT16 CLRF RESULTI6J-I BTFSC TEMPY J6,0 CALL ADDI6 STATUS.C BCF RRF TEMPY 16_H,F RRF TEMPY 16,F BCF STATUS,C RLF TEM PX16,F RLF TEMPX16_H,F MOVF TEMPY 16,F

Figura L1.1.

Rutina de M ultiplicacin de 16 bits con un microcontrolador M CU de 8 bits. (Contina). 323

324

dsPIC. DISEO PRCTICO DE APLICACIONES

ADD 16:

BTFSS STATUS,Z GOTO MULU16LOOP MOVF TEMPY16_H,F BTFSS STATUS,Z GOTO MULU16LOOP RETURN MOVF TEMPXJ6,W ADDWF RESULT 16 BTFSC STATUS,C INCF RESULT 16_H MOVF TEMPX16_H,W ADDWF RESULT 16_H RETURN

Figura L1.1.

Rutina de Multiplicacin de 76 bits con un microcontrolador MCU de 8 bits. (Continuacin)

Debe tenerse en cuenta que no se trata tan slo del nmero de instrucciones, sino que es un bu cle que se repite hasta 16 veces para llegar a la respuesta final. Es una operacin muy costosa para un microcontrolador. Sin embargo, en un dsPIC se dispone de instrucciones especficas para realizar operaciones complejas y una arquitectura que optimiza enormemente el desarrollo de funciones trigonomtricas o logartmicas en comparacin con los microcontroladores. La Figura L1.2 muestra algunas ins trucciones especficas contempladas en la arquitectura de los dsPIC, en las que se manejan valores de 40 bit de tamao. Se las denomina instrucciones DSP.
IN S T R U C C IO N E S D S P IC O P E R A C IO N E S A L G E B R A IC A S o il "C

CLR ED LDAC MAC MAC MPY MPY.N MSC

A = ( x - y)2 A A + ( x - y ) 2
x' * II +

A - A + x2 A = x* y A = -x * y A = A- x*y

Figura L1.2. Algunas instrucciones especficas para operaciones algebraicas con los dsPIC. L1.2. DESCRIPCIN DEL LABORATORIO Este laboratorio trata el manejo de instrucciones DSP. Supongamos que tenemos un robot o un vehcu lo autnomo que circula por un circuito. Est dotado de dos sensores de ultrasonidos que le indican la distancia a la que se encuentran las paredes situadas a la derecha e izquierda de la pista. El objetivo es seguir el recorrido por el centro de la pista. Realizando una simple resta entre la distancia de los dos sen sores, se puede conocer si el robot est situado ms cerca de la pared izquierda que de la derecha, pero adems, gracias a esta operacin es posible calcular este error de manera exponencial, de forma que se pudiera generar la aceleracin necesaria en las ruedas del vehculo para corregir el error de posicin.

LABORATORIO 1: APLICACIN DE INSTRUCCIONES DSP CON ENTRADAS Y SALIDAS...

325

En el ejercicio se emplean los interruptores El y E2 para introducir el dato correspondiente al primer sensor ultrasnico y los sensores E3 y E4 para el dato del segundo sensor ultrasnico. Como salida, se emplearn los diodos led del laboratorio PIC School, donde aparecer el dato correspon diente a la distancia. Ser necesario emplear la operacin de multiplicacin y realizar una divisin. Mientras la distancia sea menor que 4, otro led distinto permanecer apagado. Si la distancia supe ra este valor, dicho led se encender. El programa se repite cclicamente.

Figura L1.3.

Organigrama del Laboratorio /.

326

dsPIC. DISEO PRCTICO DE APLICACIONES

D ISTANCIA E U C L D E A -IN S T R U C C I N ED

-S e n so r 1

Sensor 2

B ro r c u a d r tic o de posicin

Figura L1.4.

Grfico que muestra el resultado tras aplicar la operacin ED.

L1.3. ESQUEMA ELECTRNICO

El hardware necesario para poner en funcionamiento la prctica se encuentra en su totalidad dentro de la tarjeta PTC School. Por una parte, es necesario el hardware de programacin de la tarjeta, pa ra introducir el programa compilado en la memoria FLASH del dsPIC. Una vez grabado el progra ma en la memoria del chip, para que un dsPIC entre en funcionamiento requiere de muy pocos ele mentos hardware externos, al igual que sucede con los microcontroladores MCU. Es necesario alimentar correctamente el dsPIC, introduciendo las seales de tierra por los pines 12, 20, 31 y 39 y la tensin positiva de alimentacin por los pines 11, 21, 32 y 40. El circuito oscilador est basado en un cristal de cuarzo de 4 MHz y dos condensadores cermicos de 18 pF. La ltima conexin re querida para el funcionamiento del dsPIC es la correspondiente a la tensin positiva en el pin de Re set. Es recomendable utilizar un circuito de Reset como el mostrado en el esquema, que utiliza un pulsador para activar un reset manual del chip para el caso que se requiera ejecutar el programa des de su inicio. Figura L1.5. Las conexiones descritas hasta ahora son universalmente vlidas para la mayora de los proyec tos con dsPIC, con la nica diferencia que se pueden utilizar tensiones de alimentacin menores, por ejemplo 3,3 V, y otros circuitos osciladores, como un cristal de cuarzo de 7,37 MHz. Los elemen tos perifricos complementarios de este circuito son los cuatro interruptores, los cuatro diodos led para mostrar el resultado y un ltimo led que nos avisa que la distancia es de un valor mayor a uno fijo. Tal y como estn configurados en la tarjeta, los conmutadores envan un uno lgico cuando es tn accionados hacia la zona superior de la placa. Los diodos led son dispositivos activados por ni vel alto, por lo tanto se encendern cada vez que el pin de salida correspondiente del dsPIC se en cuentre a nivel lgico uno.

L1.4. CO NSTRU CC I N DEL PROGRAMA

Para escribir el programa, se utiliza el entorno MPLAB de Microchip. Hay que crear un nuevo proyecto, para lo cual se accede al men Project y se ejecuta la opcin Project W izard, que es una

LABORATORIO 1: APLICACIN DE INSTRUCCIONES DSP CON ENTRADAS Y SALIDAS.


AP17 AP18

327

Figura L1.5. Esquema electrnico del Laboratorio 1. utilidad que facilita la creacin y configuracin de un proyecto. La primera seleccin que se soli cita es el modelo de dsPIC, que para esta prctica es el 30F4013. A continuacin, se sclccciona el com pilador M icrochip ASM 30 Toolsuite, que consta de 3 programas. Si al lado de alguno de es tos programas aparece una cruz roja, se indica que la ubicacin del program a no es correcta. Para corregir este error hay que situarse en Location y seleccionar cada programa directam ente de la carpeta en la que se haya instalado el MPLAB, que por defecto es C:\Archivos de programa\M icrochipYMPLAB ASM 30 Suite\bin . Figuras L1.6 y L1.7.

P ro je c t W iz a rd Step One:
Select a device

Device:

\m ^ m m

<Atrs

( I ; Siguenje> J

Cancel

Ayuda

Figura L1.6. Seleccin del dispositivo dsPIC30F4013. El siguiente paso consiste en dar un nombre al proyecto y seleccionar una carpeta en la que guar dar los ficheros generados, como el fichero hexadecimal que ser generado y que se programar en la memoria FLASH del dsPIC. Finalmente, el cuarto y ltimo paso del Project Wizard solicita aa dir los ficheros de cdigo necesarios para el proyecto. En este caso, hay que seleccionar el fichero Laboratoriol.s que se encuentra en la carpeta Laboratorio 1 dentro de la carpeta Laboratorios del CD que acompaa al libro. Cualquiera de los pasos que se han realizado en esta configuracin, pue den ser modificados una vez creado el proyecto. Por ejemplo, tambin es posible crear el proyecto sin aadir el fichero con el cdigo fuente y crearlo posteriormente.

328

dsPIC. DISEO PRCTICO DE APLICACIONES

P ro ject Wi7ard Step Two:


Select a language tQQlsvrte

Active T oolsuite:

Toobuite Contents
MPLA.B LINK30 Objcct Linker (pic30-ld.ox) UB30 Archiver (pic30-ar exe) Location

C :\A ich iv o sdep io g ra m a \M icro c h p \M P L A BA S M 3 0S u te\b in \p ic3 0 -as. B ro w se


Help! My Suite Isnt Listed! ~ ~ | f~l Show a9 installed toolsuites

<Atrs

~[| Siguiente:

C a n c ela r

Ayuda

Figura L1.7. Seleccin del compilador ASM.30, de libre distribucin y propiedad de Microchip.

La ventana del proyecto debe contener el fichero Laboratorio l.s bajo el directorio Source, el fi chero p30f4013.gld bajo el directorio Linker Script y el fichero p30f4013.inc bajo el directorio Header Files. Es imprescindible aadir estos tres ficheros en el proyecto para que el programa pueda ser compilado sin errores. Los ficheros con nombre p30f4013 son universales para cualquier apli cacin que utilice este modelo de dsPIC. Figura L1.8. Para aadir estos dos ficheros a un proyecto hay que seleccionar la opcin Add File pinchando con el botn derecho del ratn encima de cada directorio, tanto Header files como Linker Script. Despus hay que buscar los ficheros en el disco duro, ya que se encuentran dentro de las carpetas de instalacin del MPLAB en unos directorios nombrados INC y GLD, es decir, con las mismas ex tensiones que los ficheros. Dentro de estas carpetas se encuentran los ficheros de definicin para to dos los modelos de dsPIC. El fichero p30f4013.gld que se encuentra en la ubicacin C:\Archivos de programa\Microchip\MPLAB ASM30 Suite\Support\gld del disco duro del ordenador. El fi chero p30f4013.inc est en la ubicacin C:\Archivos de programa\Microchip\MPLAB ASM30 Suite\Support\gld.

I L b o r a to n o l.m c w Q Laboratoriol.m cp Q Source Res j- Practica l.s Header Files : p30f4013.inc Object Files Library Files B Linker Scripts p30f4013.gld Other Files

Figura L1.8.

Ventana del proyecto Laboratorio!.

LABORATORIO 1: APLICACIN DE INSTRUCCIONES DSP CON ENTRADAS Y SALIDAS...

329

Al comienzo del programa en ensamblador hay que realizar una llamada al fichero p30f4013.inc. Tambin es recomendable incorporar la definicin de la palabra de configuracin para el programa, la cual ser generada en el fichero hexadecimal y cargada directamente por el software de grabacin. Tambin cabe destacar que el resto de patitas del dsPIC que no se utilizan en el proyecto conviene configurarlas como entradas digitales.

.include p30f4013.inc .text [lobal main _main: C.LR PORTD #0x000F, WO MOV MOV WO, TRISD #0xFF0AV0 MOV WUTRISB MOV WO,PORTD MOV bucle: CORCON,#IF BSET MOV PORTD.W4 W4,#OxOOOC,W l AND w i, #0x0002,m LSR W4,#Ox0003,W3 AND W3.W2 CPSGT GOTO W3 MAYOR W3,W2,W7 SUB MULTIPLICA GOTO W3MAYOR: SUB W2.W3.W7 MULTIPLICA: W7*W7,A MPY MOV ACCAL,W2 MOV W2.PORTB MOV #0x0004, WO CPSGT W2AV0 APAGAR BRA BSET PORTD,#Ox8 GOTO bucle APAGAR: BCLR PORTD,#0x8 bucle GOTO .end

SE CONFIGURA LA PUERTA D COMO ENTRADA RD0 RDl RD2 Y RD3 RD8 COMO SALIDA (AVISO) PUERTA B COMO SALIDA APAGA RD8, AVISO TRABAJO CON ENTEROS LEE PORTD EN W4 SE LEEN LOS BITS RD2 Y RD3 EN EL REGISTRO W2 Y RD0 Y RDl EN W 3 SI W3 > W2 HACEMOS W 3 -W 2 EN CASO CONTRARIO W2-W3

MULTIPLICAMOS LA DIFERENCIA POR SI MISMA PARA ELEVARLA AL CUADRADO MOSTRAMOS EL RESULTADO POR PORTB SI EL VALOR ES INFERIOR A 4 APAGAMOS EL AVISO EN CASO CONTRARIO ENCENDEMOS AVISO

REPETIMOS EL BUCLE INDEFINIDAMENTE

Figura L1.9. Cdigo fuente del Laboratorio 1.s.

L1.5. CONEXIN DE LOS PERIFRICOS


Para conectar los distintos perifricos em pleados en este laboratorio, deber seguirse con detalle las conexiones descritas en la tabla siguiente.

330

dsPIC. DISEO PRCTICO DE APLICACIONES

Pin del dsP !C 30F 4013


RD8 RBO RB1 RB2 RB3 RDO RD1 RD2 RD3

E lem ento d e la PIC SCHOOL


S7 de SALIDAS DIGITALES (les) SO de SALIDAS DIGITALES SI de SALIDAS DIGITALES S2 de SALIDAS DIGITALES S3 de SALIDAS DIGITALES E0 de ENTRADAS DIGITALES (Interruptor) El de ENTRADAS DIGITALES E2 de ENTRADAS DIGITALES E3 de ENTRADAS DIGITALES

L1.6. G R A B A C I N V EJECUCIN

Para compilar el programa se accede a la opcin Project, Build All. Aparece un mensaje que indica Build Succeeded en caso de que el programa no tenga errores y se haya generado correctamente el fichero hexadecimal con extensin .hex que se introducir en la memoria FLASH del dsPIC. El l timo paso consiste en conectar el equipo PIC School al ordenador mediante el puerto serie y ejecu tar el programa de grabacin WinPICSOO. Desde este software se programa el dsPIC, siguiendo los pasos sealados en el apartado Software W inPlC800 del captulo anterior. Resulta conveniente recordar que a la hora de grabar el programa en la taijeta PIC School, se de ber colocar el interruptor del circuito de grabacin en la posicin PC para realizar la grabacin por el puerto serie.

Figura L1.10. Para grabar el programa el interruptor del circuito de grabacin deber situarse en la p o sicin PC.

Una vez grabado el programa en el dsPIC mediante el botn Programar Todo del programa WinPic800, para ver el programa funcionando deber pasarse el mismo interruptor anterior a la posicin RUN, es decir a la posicin central. Slo as com enzar a ejecutarse el programa creado.

LABORATORIO 1: APLICACIN DE INSTRUCCIONES DSP CON ENTRADAS Y SALIDAS...

331

Ahora ya slo falta probar el ejercicio con los perifricos incoiporados en la tarjeta P1C School y de este modo comprobar que el funcionamiento se corresponde con los objetivos de la prctica. Ya es posible modificar el valor de los interruptores de la tarjeta PTC School para que se visualicen distintos valores en los diodos led que se correspondern con la distancia. El dato binario mostrado en los led ser mayor segn se aumente la diferencia entre el dato introducido por los grupos de 2 interruptores. Cuando en un grupo de conmutadores se simule la mxima distancia ( l - 1) y en el otro grupo la mnima (0-0). se encender el led de aviso (RD8) ya que el resultado de la operacin ser mayor de 4. El zumbador dejar de pitar cuando el dato de respuesta vuelva a situarse por debajo de este um bral. El programa se repite cclicamente.

Figura L1.11. Probando el ejercicio con el equipo PIC School.

L1.7. LIBRERA M A TE M T IC A

Adems de las instrucciones matemticas especficas que se han presentado en esta prctica, cabe destacar que M icrochip ha desarrollado una librera especfica de funciones matemticas y que ade ms opera con precisin de simple y doble coma flotante segn el estndar IEEE-754. Esta librera denominada dsPIC30FMcith Library de libre distribucin se suministra compilada, de modo que no hay acceso para visualizar cmo se desarrollan las funciones matemticas, pero s se pueden utili zar en los proyectos. Adems, tiene la peculiaridad de poder llamar a estas funciones desde lenguaje C o desde len guaje ensamblador. En la Figura L1.12 se muestra una tabla que resume las funciones matemticas presentes en esta librera y los ciclos de ejecucin que necesita cada una de ellas operando en coma flotante.

332

dsPIC. DISEO PRCTICO DE APLICACIONES

G ru po

de F u n d o n e s

F uncin
Suma Resia

C iclo s d e e je c u c i n
122 124 109 361 385 478 363 696 3206 3249 2238 2460 1049 525 338 530 39 44 2889 3007 2134 493 94 51 6 151 129

Operaciones bsicas en coma flotante

M ultiplicacin Divisin Cociente Acos Asin Atan Atan2 Cos

Funciones Trigonomtricas c Hiperblicas Sin Tan Cosh Sinh Tanh Lxp Frcxp Funciones Logartmicas y Exponenciales Ldexp Log Log10 Pow Potencias Sqrt Funciones de redondeo Valor absoluto Funciones de Aritmtica Modular Fmod Ceil Floor Fabs M odf

Figura L1.12. Tabla con las instrucciones de la librera dsPIC30F Math Library.

NOTA: En el CD que acompaa al libro podr encontrar los programas de los laboratorios en lenguaje ensamblador y en C.

jando a fondo los temporizadores de 32 bits


L2.1. OBJETIVOS

Este laboratorio profundiza en el manejo de temporizadores de 32 bits. Para ello, y al igual que se realizara en el apartado de Simulacin y Programacin de Aplicaciones , se desarrollar un semfo ro con pulsador. Los objetivos de este laboratorio son los siguientes:

Profundizar en el manejo de temporizadores de 32 bits y estudiar sus ventajas. Manejar interrupciones controladas por el temporizados as como interrupciones externas provo cadas con un pulsador. Mostrar mensajes de texto por la pantalla LCD.

La introduccin de temporizadores de 32 bits en la arquitectura de los dsPIC permite controlar perodos de tiempo mucho ms grandes que con los anteriores temporizadores de 16 bits de una for ma mucho ms simple. Estos temporizadores de 32 bits se crean mediante la agrupacin de 2 con tadores de 16 bits. As, en el presente laboratorio, el temporizador empleado es el compuesto por los temporizadores 2 y 3 de 16 bits cada uno.

L2.2. DESCRIPCIN DEL LABORATORIO

Para implcmentar el semforo con pulsador se utilizarn varios recursos de la tarjeta de desarrollo PIC School. Por un lado, las salidas de los leds S7 y S5 representarn la luz roja y la luz verde del semforo respectivamente, cuyo valor ROJO o VERDE tambin se reflejar sobre la pantalla LCD incluida en la tarjeta. Por otro lado, el semforo estar dotado con un pulsador que ser el E7 de las entradas digitales de la placa, con el fin de que un peatn pueda pulsarlo y as el semforo cambie a ROJO para que los vehculos se detengan.
333

334

dsPIC DISEO PRCTICO DE APLICACIONES

Durante 10 segundos, el semforo estar en rojo, para despus pasar a verde durante otros 10 se gundos, volver a color rojo y as sucesivamente. Esta secuencia slo se interrumpir cuando se ac tive el pulsador E7 que har que el semforo pse a rojo y comience de nuevo el contaje de 10 se gundos antes de pasar a color verde.

Figura L2.1. Diagrama de flujo de la aplicacin Semforo.

L2.3. ESQUEMA ELECTRNICO

El esquema electrnico de este laboratorio es sencillo. Por un lado se debe conectar la patita RAI 1/INT0 a un pulsador de la seccin de Entradas Digitales (E7) de la placa PIC School y por otro lado, conectar las patitas RDO y RD1 a 2 leds de la seccin Salidas digitales de la placa (S7 y S5). Para la conexin de la pantalla LCD al dsPIC30F4013, se utilizar el controlador serie SYM 20AA que permite de una forma sencilla, mediante una transmisin UART y utilizando solamente una patita del controlador dsPIC, mostrar mensajes por la misma. As, simplemente iniciando uno de los mdulos UART del controlador, podremos enviar mensajes a la pantalla LCD a travs de la patita U1TX. El controlador serie SYM 20-AA requiere de las conexiones reflejadas en la Tabla L2.1.
Pin SYM 20-AA
Pin 1 Pin 2 Pin 3,5 Pin 4,6,8,10,11,12,13 Pin 7 Pin 9 Pin 14 Pin 15' Pin 16 Pin 17 Pin 18

Pin PIC School


L6 de PIC School L7 de PIC School G ND de PIC School Sin conectar RF3 de dsPIC30F4()13 E de PIC School (LCD) +5Vcc de PIC School RS de PIC School RAV de PIC School L4 de PIC School 15 de PIC School

Tabla L2.1.

Conexiones del controlador LCD serie SYM 20-AA.

LABORATORIO 2: MANEJANDO A FONDO LOS TEMPORIZADORES DE 32 BITS

335

Ntese que deben quedar ciertas lneas de la pantalla LCD sin conectar. As las lneas LO, L1, L2 y L3 quedarn libres sin ningn tipo de conexin, as com o la entrada GND de la pantalla.

A P 17

A P 18

S A L ID A S D IG IT A L E S

E N T R A D A S D IG IT A L E S

Figura L2.2.

Esquema electrnico del laboratorio 2.

Para enviar datos a la pantalla LCD se aplica a la patita U1TX del m dulo UART1 del dsPIC30F40l3, a 9600 bps, 8 bits de datos, 1 de stop y sin control de flujo, el cdigo ASCII del ca rcter a mostrar. Previamente es conveniente enviar el carcter OxOOOC que borra la pantalla y co loca el cursor en la prim era fila y columna de la pantalla. As para escribir la palabra ROJO, hay que enviar la siguiente secuencia de caracteres en hexadecimal: OxOC, 0 x 5 2 ,0x4F, 0x4A, 0x4F, correspondientes al cdigo de limpiar pantalla, y los cdi gos ASCII de las letras R, O, J y O respectivamente.

L2.4. C O N S T R U C C I N DEL P R O G R A M A

La programacin del controlador se realizar desde el entorno de desarrollo MPLAB IDE. Puede elegir entre hacer el desarrollo en lenguaje ensamblador o lenguaje C. El program a en lenguaje ensam blador se encuentra divido en tres partes principales. La pri m era m uestra la rutina de atencin a la interrupcin externa, que sim plem ente hace que el se mforo se ponga en rojo y vuelva a com enzar la secuencia del temporizador. Adems m uestra el mensaje ROJO en la pantalla LCD.

336

dsPIC DISEO PRCTICO DE APLICACIONES

.global _main .global INTOInterrupt .global_T3Intcrrupt __INTOInterrupt: DSI #3 :V BCLR IFS0,#0 MOV #0x0001;wo MOV WO,PORTD CLR TMR2 CLR TMR3 MOV #OxOGOC,WO CALL TRANSMITE MOV #0x52,WO CALL TRANSMITE MOV #0x004F,W0 CALL TRANSMITE MOV #OxO()4A,WO CALL TRANSMITE MOV #0x0O4F,W0 CALL TRANSMITE RETFTE

;Tratamiento de la interrupcin externa ;Deshabilitamos interrupciones ;Borramos el flag de la interrupcin ;Ponemos a rojo el semforo ;moviendo 1 a PORTD ;Borramos el temporizador ;Para que empiece de nuevo ;Limpia la pantalla LCD ;Transmite la letra R ;Letra O ;Letra J ;Letra 0 ;Devolvemos el control al programa principal

La segunda parte se activa cuando el temporizador alcanza su objetivo y simplemente comprue ba el estado del semforo para cambiar al estado contrario. As, si estuviera en rojo, pasara a verde y viceversa, mostrando los mensajes correspondientes por la pantalla LCD y los leds conectados al puerto D.

__T3Interrupt: BCLR IFS0,#7 BTSS PORTD,#0 GOTO ROJO VERDE: MOV #0x0002,W0 MOV W0,PORTD MOV #OxOOOC,WO CALL TRANSMITE MOV #0x0056,W0 CALL TRANSMITE MOV #0x0045,W0 CALL TRANSMITE MOV #0x0052,W0 CALL TRANSMITE MOV #0x0044,W0 CALL TRANSMITE MOV #0x0045,W0 CALL TRANSMITE GOTO FINAL ROJO:

;Tratamiento interrupcin Timer 32 bits ;Borramos el flag T3IF de la interrupcin ;Si el semforo est verde, lo ponemos ;cn rojo ;y en caso contrario ;lo ponemos en verde ;en los leds conectados al puerto D ;Borramos LCD ;Mostramos a V ;E ;R ;D ;E ;Lo ponemos en rojo

LABORATORIO 2: MANEJANDO A FONDO LOS TEMPORIZADORES DE 32 BITS

337

MOV #0x0001 ,W0 MOV W0,PORTD MOV #OxOOOCWO CALL TRANSMITE MOV #0x52,W0 I f CALL TRANSMITE MOV #0x004F,W0 CALI, TRANSMITE MOV #0x004A,W0 CALL TRANSMITE MOV #0x004p,w0 CALL TRANSMITE FINAL: RETFDE

;Limpia la pantalla LCD ;Transmite la letra R ;Letra O ;Lera J ;Letra0 . " *

;Retomo de la interrupcin

La tercera parte se corresponde con el programa principal, que realiza la incializacin de los pe rifricos y despus entra en un bucle hasta que se origine alguna interrupcin.

.tcxt _main: ;nicializacin del puerto D CLR MOV MOV MOV MOV CLR PORTD #0xFCF0, WO WO, TRISD #0x000 LWO WO,PORT) WO ;Inicial izainos el puerto D como ;RD0 y RD1 como salidas configurando TRISD ;Ponemps el semforo ;en rojo moviendo 1 a PORTD

Configuracin de interrupcin externa INTO MOV #0x000-1, W0 ;Activamos la interrupcin externa MOV WO, 1EC0 ;INT0 del pin R A 11

:Inicializacin del Timer CLR T2CON CLR T3CON CLR TMR3 CLR TMR-2 MOV #0x0280,W0 MOV W0JPR3 MOV #0x0000,W0 MOV W0,PR2 BSET BCLR BCLR BCLR BSET IPC1,#I2 PC1,#3 IPC1, #14 IFS0,#7 ifeCO, #7

Para cualquier operacin con Timers Borra el contenido del tcmporizador TMR3 Borra el contenido del temporizador TMR2 Inicializamos el temporizador con el valor 0x02800000 (10 segundos aprox) PR3 = 00A0 PR2 = 0000 Activamos lag T3IP = 0 0 1 Nivel de prioridad 1 Borramos el flag de interrupcin del Timer3 Habilita interrupciones del Timer 3

338

dsPIC DISEO PRCTICO DE APLICACIONES

BSET T2CON, #3 BSET T2CON, #15 'configuracin IJART1 CLR 1BRG MOV #0x0019,WO MOV W0.U1BRG MOV #0x0510, WO MOV WO, IJISTA MOV #0x8020, W0 MOV W0, U1MODE MOV CALL MOV CLL MOV CALL MOV CALL MOV CALL #OxOOOC,WO TRANSMITE #0x0052,W0 TRANSMITE #0x004F,W0 TRANSMITE #0x004A ,W0 TRANSMITE #0x004KW0 TRANSMITE

;FIag T32 = 1 . Habilitamos Timer 32 bits Comienza el temporizador con prcescaler 1:1 ; y fuente del reloj el ciclo de instruccin ; Configuracin de la velocidad ; del UART1 segn la frmula descrita en la aplicacin 6 Configuracin del registro U 1STA

; Limpia pantalla ; Enva R ; Enva O ; Enva J ; Enva O

PROGRAMA PRINCIPAL PRINCIPAL: ;Refrescamos Perro Guardian CLRWDT ;mientras esperamos que se origine alguna interrupcin GOTO PRINCIPAL TRANSMITE: BTSS U 1STA,#TRMT BRA TRANSMITE MOV W0,U1TXREG RETURN .end Espera a poder transmitir ;Transmite el dato por el registro LJ1TXREG

Para la inicializacin de la configuracin del temporizador de 32 bits, deber tenerse en cuenta el reloj utilizado en la placa PIC School, que se trata de un cuarzo tipo XT w /PLL 4X de 4 MHz. Para conseguir una temporizacin de 10 segundos deber calcularse el nmero de ciclos de instruc cin correspondientes. Si el cristal es de 4 MHz, el perodo de un ciclo de instruccin ser 1/4 MHz. Si dividimos 10 segundos entre este valor nos dar el nmero de ciclos a contar, que deber multiplicarse por 4 de bido a las caractersticas (XT w/PLL 4X ) del circuito de reloj, obteniendo a s un valor de 0x02800000 en hexadecimal, nmero de ciclos a contar. Por otro lado, para conseguir una velocidad de 9600 baudios, deber aplicarse la frmula ana lizada en la Aplicacin 6, Perifricos avanzados, correspondiente a la Segunda Parte de la obra. U1BREG = (Frecuencia / (16 Baudios)) -1 = (4.000.000 / 153.600)-!= 26-1 = 25 = 0x19 En el Laboratorio 4y Comunicacin USART encriptada se ahondar en el concepto anterior.

LABORATORIO 2: MANEJANDO A FONDO LOS TEMPORIZADORES DE 32 BITS

339

b l mismo programa en lenguaje C podra ser el siguiente:

include up30f4G13.hM void attribute (( interrupt )) _T3Intermpt(void) ( IFS0bils.T3TF = 0; if (PORTDbits.RDO = I) PORTD - 2; else PORTD= I; } voidattribute (( interrupt )) JNTOInterrupt(void) (
IFSObits.INTOIF = 0;

PORTD= I; TMR2 = 0; TMR3 = 0:

; }
int main(void) -'Jr i ' \ , . . .

'

'

'

//Inicializacin del temporizador T2CON = 0; T3CON = 0: TMR3 = 0; TMR2 = 0; PR3 = 0x0280; PR2 = 0: IPC1bits.T31P = ObOO 1; FS0biis.T3IF = 0: IEC0bits.T3IE = 1: T2C:ONbits.T32 = 1;

T2CONbits.TON = 1;
//Inicializacin del Puerto D PORTD = 0:

TRTSD = OxFCFO;
//Inicializacin de la rutina externa INT0 in c o = 1; //Com enzo semforo PORTD = 1; //Programa principal whiled) asmf'elrwdt"): return(O);

}/

340

dsPIC. DISEO PRCTICO DE APLICACIONES

Una vez compilado el programa, se procede a su grabacin en la placa PIC School, de igual manera que en captulos anteriores. Debe tenerse especial cuidado a la hora de configurar en la pestaa Config del programa WinPic800, y seleccionar como fuente primaria del reloj X T x/P L L 4X - X T With 4X PLL.

L2.5. C O N E X I N DE LOS PERIFRICOS

Adems de las conexiones anteriormente descritas para el controlador LCD serie, se debern co nectar los siguientes perifricos de la placa PIC School, segn la Tabla L2.2.

Pin del dsP IC 30F 4013


RA 1 RDO RD1 RF3/U1TX

E lem en to d e la PIC S ch ool


E7 de E. DIGITALES S7 de SALIDAS DIGITALES S5 de SALIDAS DIGITALES PIN 7 DEL CONTROLADOR LCD SERIE

Tabla L2.2.

Conexiones del semforo en la placa PIC School.

La Figura L2.3 recoge las conexiones anteriormente descritas.

Figura L2.3. Conexionado del semforo en la placa PIC School.

L2.6. GRABACIN Y EJECUCIN

Una vez cargado el fichero hexadecimal en el programa WinPic800, habr que configurar en la pes taa Config del programa WinPicSOO el reloj de la placa PIC School. Para ello, una vez cargado el fichero .hex, seleccionar de la lista desplegable Primary Oscillator la opcin X T W/PLL 4X - X T cristal oscillator with 4X PLL. Tras llevar a cabo esta operacin, pulsando la opcin Grabar Todo, se programar el controlador con la aplicacin del semforo.

LABORATORIO 2: MANEJANDO A FONDO LOS TEMPORIZA DORES DE 32 BITS

341

Al pasar el interruptor de la placa PIC School a modo RUN, comenzar la ejecucin del programa. El led S7 de la placa que simula la luz roja de un semforo, se encender durante los primeros 10 segundos. A continuacin, se encender el led S5 que simula la luz verde del semforo durante otros 10 segundos. De manera simultnea, aparecern en pantalla los mensajes ROJO y VERDE.

Figura L2.4. Ejecucin del programa semforo sobre la placa PIC School.

Si en algn momento se pulsa E7, entonces automticamente comenzar de nuevo la secuencia de 10 segundos de la luz roja.

LABORATORIO
..................... '* ; ; 7 M ! 1 !!!!!! 1'

analgico/digital de alta precisin


L3.1. OBJETIVOS

El siguiente laboratorio describe cmo realizar una conversin analgico/digital de 12 bits optimi zada empleando el dsP!C30F4013. Los dsPIC presentan mayor resolucin de conversin que los microcontroladores de M icrochip, ya que stos son de 8 y 10 bits en funcin del modelo. Adems, la velocidad de conversin tambin se ha elevado. Estas mejoras unidas a la capacidad de clculo DSP van a permitir optimizar notablemente los resultados de las conversiones A/D. Los objetivos de es ta prctica son:

Desarrollar una conversin analgico/digital de 12 bits de resolucin empleando el equipo PC School Mostrar las ventajas del clculo del dsPIC para realizar conversiones A/D optimizadas.

En esta prctica se van a utilizar las ventajas del conversor analgico/digital de los dsPIC unido a su capacidad de clculo, ya que se va a muestrear 10 veces una seal en el mnimo tiempo posi ble para calcular el dato promedio de la conversin. Para un microcontrolador resultara muy costoso tener que promediar 10 seales, y si el dato fue se alto, por ejemplo 1000, posiblemente se utilizara una memoria externa para almacenar las mues tras y posteriormente ir leyndolas, sumndolas y finalmente realizar una costosa operacin de di visin para un m icrocontrolador M CU. O btener datos prom edios de seales analgicas es interesante para filtrar posibles ruidos o perturbaciones que puedan influir en un instante concreto en el valor de salida de un sensor analgico. Gracias a la capacidad de clculo de los dsPIC, es posible emplear una frmula estadstica que permite ir obteniendo el dato promedio de un conjunto de datos sin necesidad de tener que almace narlos para realizar el promedio. La frmula es: M edia_actuat = ((M ediaanterior * (Contador - 1)) + D ato_Nuevo) / Contador

343

344

dsPIC. DISEO PRCTICO DE APLICACIONES

En la hoja de clculo de la Figura L3.1 se puede apreciar cmo la media aritm tica obtenida como el sumatorio de todas las muestras dividido por el nmero de ellas, coincide con el dato fi nal obtenido em pleando la frm ula estadstica. Esta frmula implica el empleo de m ultiplicacio nes y divisiones de 16 bits, y debe realizarse a gran velocidad, no siendo aceptable su duracin en un m icrocontrolador MCU.

C ontador
1 2 3 4 5 6 7 8 9 10

D ato N u evo
88 12 300 453 452 451 213 1025 2096 4000

M edia A ctual
88 50,00 133,33 213,25 261,00 292,67 281,29 374,25 565,56 909,00

Sumatorio Media Aritm tica

9090 909

Figura L3.1. Clculos matemticos para obtener el promedio de valores.

L3.2. DE S C R IP C I N DEL LA B O R A TO R IO

Para simular este ejercicio se utilizar un potencimetro de la tarjeta PIC School que servir para introducir una seal analgica variable entre 0 V y 5 V y el dato resultado del mencionado clcu lo estadstico se visualizar en modo binario por la pantalla LCD. Aunque la conversin analgi co/digital es de 12 bits, en pantalla se mostrarn los 16 bits del registro donde se almacenar el resultado, por eso los cuatro prim eros bits siem pre sern cero. El potencim etro utilizado se corresponde con el nombre P1 del grupo ENTRADAS ANALOGICAS de la tarjeta y su seal es introducida en la patita ANO del dsPIC. En el organigrama de la Figura L3.2 se observan los pasos que hay que seguir para realizar correctamente este laboratorio. Tras realizar las configuraciones necesarias en el dsPIC para con figurar correctamente patitas de entrada y salida y la conversin A/D se realizan las 10 muestras y el valor del resultado es mostrado en la pantalla LCD. El programa finaliza tras mostrar este re sultado, permaneciendo en un bucle infinito. Al igual que sucede con un m icrocontrolador MCU, la estructura general de un programa con dsPIC debe ser un bucle que se repite indefinidamente ejecutando un conjunto de tareas o un conjunto de acciones a realizar y que una vez terminadas no requieran ninguna otra ejecucin. En este ltimo caso, hay que finalizar el program a en un bucle infinito de espera o introduciendo el dispositivo en modo bajo consumo, el cual detiene la CPU y, por lo tanto, finaliza la ejecucin de ms instrucciones.

LABORATORIO 3: OPTIMIZANDO LA CONVERSIN ANALGICO/DIGITAL DE ALTA...

345

Seleccin de! DSPJC Seleccin de la palabra de

INICIO Configuraciones de Entrada y Salida

Configuracin d e .
Ir in r n i A n '

NO

Aplicar la Frmula estadstica

Muestra del resultado en ia pantalla LCD

Figura L3.2.

Organigrama del programa de conversin analgico/digital optimizada.

L3.3. ESQUEMA ELECTRNICO

El esquema electrnico que resuelve esta prctica utiliza el dsPTC30F4013 correctamente alimen tado y con su circuito de Reset y oscilador, un potencim etro ajustable con vstago y la conexin a la pantalla LCD descrita en el Laboratorio 2, Utilizando tempo rizadores de 32 bits. Las cone xiones necesarias para el dsPTC son las mismas que en la anterior experiencia y se vuelve a utili zar un circuito oscilador con cuarzo de 4 M Hz ya que es el que hay en la tarjeta PIC School. Cuan do se realizan conversiones analgico/digitales es conveniente que la impedancia de salida del sensor o del potencimetro que se va a utilizar no supere los 10 K2. Por esta razn, la resistencia interna del potencim etro utilizado en esta prctica es de 1 KQ. Deber conectarse el potenci metro en sus extrem os a seales de 0 V y 5 V para obtener una tensin variable entre estos dos valores segn se mueva el vstago. Asimismo, se utilizar la patita U1TX para enviar a la pantalla LCD el resultado.

346

dsPIC. DISEO PRCTICO DE APLICACIONES

Figura L3.3.

Esquema electrnico del Laboratorio 2 .

L3.4. C O N S T R U C C I N DEL P R O G R AM A

Para la construccin del programa se utilizar la herramienta de inicializacin de perifricos Visual Initializer. Esta herramienta, como ya se describi en la Segunda Parte, permite configurar de for ma rpida y cmoda el conversor analgico digital. Para ello se configurar este perifrico segn los datos de la Finura L3.4.

12-bit A/D C onverter Configuration


C 'je i * s ,v J S h j! ............................................................ _ Cnabjt 5 1 _ . Cf. .a .

UlH\Sl JInt CPU&63pO,Vli>Mrt v, w: v CWJIOcOcctfw. Cyt'ru e v-; in atte lMfluc<\SlTL 1

CdOtnAFcttut i'- ' y e d if t j a


Udoge S-ajccsr VdtVieh.AVscfcYrli

Pirz'iy.

SinfcioHode! CervwwsnMoe

CcrtQjre as A/D l^nAv.

*153 * Swcs
SanPafcc. * E -w :

1 Iwsir* irrc
13X i IClc.l

_.vj

0 *Pr 2
V Pr I = 3

CorrO5oi/lrt
Corr/9cv*iPflii^i OockSowse

1
0

v
; u c ec ) v v

itr e c k A P o . I w J : 'ANO Snele A N ea lno.1: vR f a r t 3 P ci. l-W G-srrp'e 9 Mea Input A.')

V ;| y ,: * V

2 **.5 *T q >

V & S irfa fJ k o rt j'o r c : lbclhtefeM ol }

L_.

Figura L3.4.

Configuracin del mdulo de Conversin Analgico Digital.

LABORATORIO 3: OPTIMIZANDO LA CONVERSIN ANALGICO/DIGITAI DF AITA.

347

Una vez configurado el mdulo, se generar el cdigo fuente necesario para dicha inicializacin a travs del men Code Generation de la herramienta Visual Initializer. El programa tambin utiliza el mdulo UART1 para enviar datos a la pantalla LCD. La confi guracin de dicho mdulo no se realizar a travs de la herram ienta Visual Initializer, ya que, se cre ar un fichero con el cdigo fuente correspondiente a la visualizacin de datos por el LCD total mente aparte del programa que realiza la conversin. As, dicho fichero podr utilizarse en cualquier otra prctica sin tener que reescribir el cdigo correspondiente y sin tener que volver a inicializar el mdulo dentro de la herramienta Visual Initializer. Tras esta inicializacin, el programa entra en un bucle infinito hasta que se d la interrupcin ge nerada por el Conversor Analgico Digital, que se encargar de.aplicar la frmula estadstica y mos trar los datos en pantalla.

.include ';p30f40!3.inc" .section .ndata eontador: .hword 0x0800 media: .hword 0x0802 dato_nuevo; .hword 0x0804 .section .rcxt .global ADCInterrupt

; Variable contador de la frmula ; Variable media de la frmula ; Dato recogido del conversor ADC ; Tratamiento de la interrupcin

__ADCInterrupt: BGLR 1FS0.#ADIF MOV ADC BUFO,W0 MOV W0,dato_nuevo INC contador DEC eontador. WREG MUL media MOV dato_nuevo,W5 ADD W2,W5,W3 MOV contador,'W4 REPEAT #17 DIV.U W3.W4 MOV WO,media MOV #OxOOOA ,W4; MOV conta dor,W0 CPSEQ W4,W0 RETFIE MOV medi a, W0 MOV w0,w2 CALL W2TOLCD MOV #0x0000,W 0 MOV W0,eontador MOV W0,media RETFIE .global main

;Borrado del 1 1ag de intemipcin Recogida del dato de la interrupcin ;Se incrementa el contador ;Se multiplica por la media

;Di visin entera

;La operacin se hace 10 veces

;Sc muestra el valor por el LCD ;Se reinician las variables

348

dsPIC. DISEO PRCTICO DE APLICACIONES

..mam: CALL _Visua}lnitialization MOV #0x0000, WO MOV W0,dato_nuevo MOV W0,media MOV W0,contador bucle' goto bucle

;lnicializacin del CAD ;lnicializacin de las variables

;Bucle infinito

cnd

Figura L3.5.

Listado del programa Laboratorio 3.

Cabe destacar la instruccin CALL W2TOLCD que llama al procedimiento guardado en el fi chero W2TOLCD.S que se encuentra en el mismo directorio que la aplicacin. Dicho procedimien to utiliza el controlador analizado en el laboratorio anterior para mostrar por el LCD el contenido del registro W2 en binario. As mismo, introduce un retardo para que pueda visualizarse, ya que de lo contrario, la conversin se hara tan rpidamente que no le dara tiempo a la pantalla LCD a vi sualizar los datos correctamente.

L3.5. C O N E X I N DE LOS PERIFRICOS

Para las conexiones de este laboratorio resulta altamente recomendable aprovechar el conexionado del controlador serie LCD de la prctica anterior. As, el resto de conexiones tan slo sern las in dicadas en la Tabla L 2 .1.

Pin d el dsP IC 30F 4013


ANO RF3/U1TX

E lem ento d e la PIC SCHOOL


P1 de ENTRADAS ANALGICAS PIN 7 DEL CONTROLADOR LCD SERIE

Tabla L2.1.

Conexiones de los perifricos del Laboratorio 3.

Adems debern conectarse a +5v y a GND las conexiones de referencia del potencimetro P l de ENTRADAS ANALGICAS.

L3.6. G R A B A C I N Y EJECUCIN

Para probar el experimento se puede abrir el proyecto que se encuentra en la carpeta LABORA TORIOS, LABORATORIO 3 del CD del libro o desarrollar un proyecto nuevo siguiendo los pa sos comentados en la primera prctica y con la ayuda del fichero laboratorio2.s, que se encuentra en la misma carpeta del CD y contiene el cdigo fuente del ejercicio. Tras escribir el programa, hay que com pilarlo para obtener el fichero hexadecimal y posteriormente ejecutar el software de gra

LABORATORIO 3: OPTIMIZANDO LA CONVERSIN ANALGICO/DIGITAL DE ALTA..

349

bacin WinPIC800 para grabar la memoria de programa del dsPTC empleando el equipo PIC School conectado al puerto serie del ordenador. Una vez grabado el ejercicio en el dsPlC modelo 30F4013, se coloca el interruptor del circuito de grabacin en modo RUN para comenzar su ejecucin. En la pantalla LCD aparecer un dato bi nario que mostrar los 16 bits, de los cuales, los ltimos 12 muestran el resultado de la conversin A/D tras realizar la frmula matemtica. Segn se cambie de posicin el valor del potencimetro P 1 se observar cmo vara el resultado mostrado en la pantalla LCD. El resultado binario mostrado en los diodos ir creciendo desde 000000000000 hasta 111111111111, a medida que el valor de la se al analgica de entrada pasa desde 0V hasta 5V.

Figura L3.5. Probando el ejercido de conversin A D en la tarjeta PIC School.

NOTA: En el CD que acompaa al libro podr encontrar los programas de los laboratorios en lenguaje ensamblador y en C.

'

:
'

.
'......... :

..
-

_:' ' --:

.........

S iS iv S

encriptada con el USART

L4.1. OBJETIVOS

En esta prctica se propone comunicar un dsPIC con un ordenador empleando el puerto serie del PC. Se utiliza el hardware de comunicaciones USART disponible en el dsPIC que permite realizar este lipo de comunicacin sin emplear recursos de la CPU. Los objetivos de la prctica son:

Configurar correctamente el dsPIC para el envo y recepcin de datos por el puerto serie. Utilizar el Motor DSP para realizar una encriptacin de los datos en las comunicaciones.

Para visualizar los datos enviados desde el dsPIC en el PC se puede utilizar cualquier programa Hypcrtcrminal de comunicaciones, como el software Hyperterminal que se encuentra en la carpeta Accesorios/Comunicaciones del sistema operativo Windows. Aprovechando las posibilidades matemticas de los dsPIC se pueden desarrollar mecanismos de encriptacin de comunicaciones mucho ms avanzados que con un microcontrolador MCU. Con un microcontrolador, para codificar un dato rpidamente se le puede sumar o restar una cantidad fija, que slo sea conocida por el equipo con el que se establece comunicacin. Por ejemplo, si se quiere enviar el carcter ASCII z\ correspondiente al cdigo ASCII 122, se le puede sumar una cantidad de forma que al transmitir el dato no pueda ser reconocido. El equipo receptor deber restar la misma cantidad al recibir el dato para desencriptarlo y convertirlo en un ca rcter inteligible. Esto se aplicar a todos los datos transferidos. Sin embargo, un simple desplaza miento de datos a travs de sumas y restas es una proteccin muy sencilla, que puede ser fcilmen te descubierta por un programa que pruebe a restar y sumar cifras hasta localizar cadenas de informacin vlidas. Con un dsPIC es posible com plicar mucho la encriptacin ya que las operaciones matemticas que se pueden ejecutar a gran velocidad son mucho ms complejas que las sumas o restas de un mi crocontrolador MCU. Por ejemplo, podemos elevar al cuadrado un dato, dividirlo entre una canti dad y despus enviar dos datos, el cociente y el resto de la divisin. Para poder desencriptar esta informacin, habra que conocer que hay 2 datos en transmisin por cada dato enviado, que est
351

352

dsPIC. DISEO PRCTICO DE APLICACIONES

previamente elevado al cuadrado y luego desglosado en cociente y resto de una divisin, que en el caso de esta experiencia tendr como divisor el valor 100.

L4.2. DESCRIPCIN DEL LABORATORIO

En la aplicacin el dsPIC esperar la recepcin de un carcter ASCII por el puerto serie. Una vez recibido el dato, lo reenviar hacia el PC a modo de ECO y hacia la pantalla LCD, pero aplicando antes una codificacin para encriptar los datos. Las comunicaciones se realizan a una velocidad de 9600 baudios, 8 bits de datos y con 1 bit de stop. Estos parmetros de la comunicacin hay que te nerlos en cuenta a la hora de configurar el dsPIC, ya que la comunicacin por el puerto serie es de tipo asincrono y es necesario que los dos equipos conozcan previamente estos parmetros.

Figura L4.1.

Organigrama de la prctica de transferencia de datos encriptados.

El programa se repite de forma indefinida en un bucle. Se espera a la recepcin de un dato del ordenador. Cuando llegue el dato se aplica el algoritmo de encriptacin que consiste en elevarlo al cuadrado y dividirlo entre 100. Tras realizar esta operacin tenemos un cociente y un resto, ambos de 8 bits. Estos dos datos son reenviados hacia el PC y se mostrarn en la pantalla del ordenador.

LABORATORIO 4: COMUNICACIN ENCRIPTADA CON EL USART

353

L4.3. ESQUEMA ELECTRNICO

1 hardware necesario para este programa se encuentra en la tarjeta PIC School. La conexin con los perifricos es muy sencilla, ya que sobre el circuito conversor serie a LCD del laboratorio ante rior slo hay que aadir una lnea para recibir los datos del PC, a travs de la lnea U1RX que se co necta a la patita RxD del interfaz RS-232 de la placa PTC School.

Figura L4.2. Esquema electrnico de la prctica.

Las patitas, en las que se encuentran las salidas hardware de la USART, sern las utilizadas en este laboratorio. Para probar las comunicaciones y poner en marcha la prctica hay que conectar la tarjeta PTC School al ordenador empleando un cable para el puerto serie que disponga de un termi nal DB9 hembra en un extremo y un DB9 macho en el otro. Los conectores tipo DB9 son el estn dar ms extendido en las comunicaciones por el puerto serie. Es el mismo tipo de cable que se uti liza para programar los dsPIC a travs del programa WinPIC800. As, se usa el mismo cable de la siguiente manera: primero se programa el microcontrolador y una vez programado, en segundo lu gar, antes de pasar a modo RUN, se cambia el cable de posicin en la PIC School, conectndolo al interfaz RS-232 para poder observar el funcionamiento de dicho laboratorio.

L4.4. C O NSTRU CC I N DEL PROGRAMA

El cdigo fuente del programa se encuentra en el CD del libro dentro del directorio LABORATO RIOS y en el subdirectorio LABORATORIO 4. El fichero se denomina LABORAT0RI04.S. Al principio es necesario incluir el fichero de definicin p30f4013.inc que contiene todos los bits y re gistros de control nombrados. Al comienzo del programa la configuracin que hay que realizar slo afecta al hardware de las comunicaciones y a las patitas R J X y T1X del dsPIC. La primera de ellas debe configurarse como entrada digital para poder recibir los datos y la segunda como salida. Es necesario acceder a los re gistros de control de la USART para activar la comunicacin a la velocidad adecuada.

354

dsPIC. DISEO PRCTICO DE APLICACIONES

.include "p30f4013.incM .global __U 1RXliiterrupt L1RX Interrupt: BCLR IFS0,#U1RXIF ; MOV U 1RXREG,W7 : MPY W7*W7,A MOV ACCAL,W2 MOV #0x0064,'W3 REPEAT #17 DIV.U W2jW3 CALL TRANSMITE MOV W 1AVO CALL TRANSMITE RETFE .global _ main _main: BSET CORCON,#OxO CALL INCIAUART bucle: CLRWDT bucle GOTO ;Tratamiento de interrupcin de recepcin de dato. Primero se borra el flag de interrupciones Se mueve a W7 el dato recibido ;Se eleva al cuadrado dicho dato ;Se mueve a W2 ;Se divide entre 100 ;Se transmite el resultado de la divisin ;Sc transmite el resto de la divisin

;Trabajo con enteros ;Inicializacin mdulo UART ;Se espera en un bucle infinito ; a que se origine una interrupcin por llegada ;de un carcter

NICIAUART: CLR U1BRG MOV #0x0019,'W0 MOV W0U1BRG MOV #0x8000, W0 MOV WO, Ul MODE MOV #0x0510, WO MOV WO, U1STA MOV #0x8020; WO MOV WO. Ul MODE MOV #0x0200, WO MOV WO, IECO CLR IEC1 CLR IEC2
RETURN

;Se inicial iza U1BREG para transmisin ;a 9600 baudios con un reloj de 4Mhz ;Se habilita la recepcin de datos

;Se habilita el mdulo ;Sc habilita interrupcin por recepcin

TRANSMITE: BTvSS U1STA,#8 BRA TRANSMITE MOV W0,U ITXREG


RETURN

;Rutina que enva un carcter Espera a estar disponible ; ;Enva el dato a travs de U1TXREG

.end
Figura L4.3. Cdigo fuente del programa Laboratorio 4.

LABORATORIO 4: COMUNICACIN FNCRIPTADA CON EL USAR!

355

Una vez configurado el chip, el programa queda a la espera de recibir un nuevo carcter por el puerto serie, evento que es detectado por la USART. Cuando llegue el nuevo dato, se descarga y se aplica el algoritmo de cifrado para reenviarlo. Hay que destacar que la comunicacin es full-duplex, de modo que si se recibe un nuevo dato mientras se est enviando la respuesta anterior tambin es almacenado en el buffer de recepcin de la USART.

L4.5. C O N E XI N DE LOS PERIFRICOS

La conexin de los perifricos es bien sencilla. M anteniendo las conexiones del adaptador serie al LCD del ejercicio anterior, slo se debern realizar las conexiones reflejadas en la siguiente tabla y que pueden apreciarse en la Figura L4.2.
Pin del d sP IC 30F 4013
RF2/U1RX KB /U 1TX

Elem ento d e la PIC SCHOOL


RxD de! Interfaz RS-232 Patita 7 del controlador LCD serie y TxD del interfaz RS-232

L4.6. GRABACIN Y EJECUCIN

Una vez abierto el proyecto LABORATORIO 4 que se encuentra en el CD del libro y tras compilar y grabar el programa en la memoria del dsPIC mediante el uso de la tarjeta PIC School y el softwa re WinPIC800, se deber ejecutar un programa de comunicacin en el PC para poder enviar datos por el puerto serie y recibir las respuestas del dsPIC. A modo de ejemplo, se muestran a continua cin los pasos necesarios para probar el ejercicio con el programa Hyperterminal de Windows, que se encuentra en el men Accesorios/Comunicaciones. Recordemos que una vez pasado a modo ktRUN deberemos cam biar el cable serie utilizado para la grabacin del conector donde se en cuentra al conector del interfaz serie RS-232.
Descripcin de
\<x

conexin

3*... Nueva conexin

Esciiba un nombre y elija un cono para la conexin: Hombre: [directo C0M1 Icono:

Aceptor

| [

Cancele?

Figura L4.4.

Pantalla inicial Iras ejecutar el programa de Windows Hyperteminal.

Tras ejecutar el programa Hyperterminal hay que configurar una nueva conexin, para lo cual el programa solicita un nombre, y escoger un icono. A continuacin, aparecer otra pantalla en la que se escoge el puerto COM del PC con el que se quiere comunicar con el dsPIC. Es necesario seleccionar un puerto COM que est libre, es decir, que no est siendo utilizado por algn otro dispositivo hard ware conectado en el ordenador. En la pantalla que se muestra en la Figura L4.5 se ha escogido el

356

dsPIC. DISEO PRCTICO DE APLICACIONES

puerto C O M 1. El ltimo paso de la configuracin es la pantalla de seleccin de velocidad y tipo de datos. Se ha de escoger la misma configuracin que la cargada en el dsPIC: 9.600 baudios, 8 bits de datos, sin paridad, 1 bit de stop y ningn control de flujo. Tras realizar este ltimo paso, se abrir el puerto serie del ordenador. Una vez que el programa entra en ejecucin, todo carcter escrito con el teclado es enviado por el puerto serie hacia la taijeta PTC School. Cada vez que se reciba un carcter por el puerto es mos trado en la pantalla. Se puede seleccionar en el men de configuracin del Hypcrtcrminal la opcin ECO de los caracteres escritos localmente, que sirve para que veamos en la pantalla los caracteres que estamos tecleando y estn siendo enviados hacia el dsPIC. En la pantalla principal hay 2 iconos con los que iniciar y detener la comunicacin, que tienen la forma de un telfono colgado y un te lfono descolgado respectivamente.

directo C0M1

Escffca detafcs del nmero de telfono que desea marcar E a is o regin; Cdigo de rea: Nmero de telefona Conectar usando -parta (34; |91
\

Aceptar

j |

C^xetar

Figura L4.5. Seleccin de un puerto CO M libre en e l ordenador.


P ro piedades de COMI
Conhguacwn efe puerto j

por segundo: 119200

B is de datos 18

Bits efe parada: 1

Control de Rupc [

Restaurar predetenroadre

Aceptar j

[ Cancelar )

Apicar

Figura L4.6. Pantalla de configuracin del puerto serie en el ordenador. Hay que escoger los mismos parmetros que los seleccionados en la USART del dsPIC.

Respecto a la configuracin necesaria en la taijeta PTC School, se ha de grabar el dsPIC con el fi chero LABORATORIO 4.hex generado en el proyecto empleando el programa WinPIC800. Hay que tener en cuenta que el programa WinPIC800 utiliza el puerto serie del ordenador para transmitir los

LABORATORIO 4: COMUNICACIN ENCRIPTADA CON EL USART

357

Figura L4.7.

Programa Hyperterminal en ejecucin. Las tedas pulsadas sern enviadas hacia el dsPIC y los caracteres recibidos se mostrarn p o r la pantalla.

ficheros hexadecimales a la memoria FLASH del dsPIC. Por esta razn, si se va a utilizar el mismo puerto serie que el WinPlCSOO para probar posteriormente el programa con el Hyperterminal, el soft ware WinPICBOO debe estar cerrado. De no ser as, el pueito serie estara controlado por este otro pro grama y no se podra entrar en comunicacin desde el Hyperterminal. Tras grabar el dsPIC, se pulsar el botn de Reset para comenzar la ejecucin de la experiencia. Al teclear un carcter en el programa Hyperterminal de Windows se reciben dos caracteres en la pantalla del ordenador y en la pantalla LCD, que es un resultado ECO del carcter enviado pero encriptado. Se puede probar a realizar manualmente la operacin de desencriptacin y as comprobar que las operaciones son realizadas correctamente por el dsPIC. Todo carcter ASCII recibido tiene un valor asignado entre 0 y 255 que puede ser consultado en una tabla estndar de cdigos ASCII o en el programa Mapa de Caracteres de las Herramientas del sistema operativo Windows.

Figura L4.8.

Fotografa de la PIC School conectada al puerto serie de un ordenador y con el Laboritorio 4 en ejecucin.

358

dsPIC. DISEO PRCTICO DE APLICACIONES

En la fotografa mostrada en la Figura L4.8, se ha tecleado en el ordenador la letra m que se co rresponde con el cdigo ASCII 109. El resultado de elevar 109 al cuadrado es 11881. Al dividir 11881 entre 100, el resultado es de 118 y resto 81, que se corresponden con los caracteres ASCII de v y Q respectivamente, que aparecen sobre la pantalla LCD.

NOTA: En el CD que acompaa al libro podr encontrar los programas de los laboratorios en lenguaje ensamblador y en C.

' ;

ORATORIO

: ' ? j m -m

Control de un motor de CC PWM

L5.1. OBJETIVOS Este laboratorio estudia cmo emplear la capacidad del dsPlC para generar seales PW M y regular la velocidad de funcionamiento de un motor de corriente continua. Se proceder a configurar el m dulo OC1 del dsPIC 30F40l3 para generar una seal cuadrada que aplicada a un chip amplificador regule la velocidad de funcionamiento de un motor. El dsPIC30F4013 pertenece a la familia de pro psito general de los dsP!C30F. Sin embargo, existe una familia especfica que dispone de un hard ware adicional para el control de motores. Estos dispositivos, adems de generar seales PW M pa ra control bsico de motores de corriente continua, pueden controlar motores ms avanzados, como los motores Brushlcss y los motores de induccin de corriente alterna. Microchip ha creado una serie de diseos de referencia para el control de motores de alto rendi miento empleando la familia dsPIC de control de motores. Estas aplicaciones realizan control vecto rial de un Motor de Induccin de Alterna, denominado por las siglas ACIM, y control sin sensores de un Motor de Continua sin escobillas, siglas BLDC. Estas aplicaciones son gratuitas y se encuentran descritas completamente en las notas de aplicacin AN908 y AN901 de Microchip. Pueden descar garse desde www.microchip.com en la seccin correspondiente a las Notas de Aplicacin para dsPIC.

Figura L5.1. Sistema de desarrollo para control de motores dsPICDEM MC.1.


359

360

dsPIC DISEO PRCTICO DE APLICACIONES

Gracias a las familias dsPIC30F y dsP33F especficas de control de motores pueden resolverse aplicaciones de control mucho ms complejas que las habituales con cualquier otro microcontrolador MCU. Como ejemplo, se muestra en la Figura L5.2 el algoritmo de control vectorial que es de sarrollado por un dsPIC para gestionar un motor AC de induccin. Hace falta una gran capacidad de clculo para resolver este algoritmo de control en tiempo real ya que dispone de lazos de posi cin, de velocidad, elementos de control Proporcional-Integral, etc. Para poner en funcionamiento los ejemplos de aplicacin que facilita Microchip para control avanzado de motores, est disponi ble el sistema de desarrollo de control de motores dsPICDEM M CI de Microchip. (Figura L5.1).

Figura L5.2.

Control vectorial de motores de induccin AC mediante dsPIC.

L5.2. DESCRIPCIN DEL LABORATORIO En esta prctica se regula la velocidad del motor de corriente continua con cuatro velocidades dis tintas, seleccionables mediante dos interruptores de la tarjeta PIC School. Con la combinacin 00, el motor estar parado e ir aumentando su velocidad progresivamente hasta que se seleccione el mximo valor binario, que se corresponde con los dos interruptores activados, valor 11. El ejercicio em plea el mdulo hardware Output Compare del dsPIC configurado en modo PWM sencillo. Para realizar el control bsico de un motor de corriente continua se emplea el con trol de velocidad en funcin de la tensin de alimentacin del motor. Cuanta mayor sea la tensin en las bornas del motor, mayor ser la velocidad de giro de su eje. Al aplicar una seal cuadrada a un motor de corriente continua, se consigue modificar la tensin media aplicada en los terminales del motor. M anteniendo la misma frecuencia de la seal cuadrada y modificando el ciclo de traba jo, es dccir, la proporcin de tiempo que la onda cuadrada permanece a nivel alto respecto a nivel bajo, se consigue que el motor gire a distintas velocidades.

L5.3. ESQUEMA ELECTRNICO El esquema electrnico configurado en la tarjeta PIC School para esta aplicacin em plea el driver de motores L293D como interfaz entre el dsPIC y el motor. No se puede conectar directam ente el

LABORATORIO 5: CONTROL DE UN MOTOR DE CC MEDIANTE PWM

361

Figura L5.3. Organigrama del Laboratorio 5.

dsPIC a un motor, puesto que no tiene capacidad para sum inistrar la corriente necesaria a travs de sus patitas. H acer esto estropeara el dsPIC. Es necesario utilizar un driver que acte como amplificador, convirtiendo las seales TTL generadas por el dsPC en seales am plificadas en co rriente adecuadas para el manejo de un motor. El driver L293D tiene una capacidad de carga de 0,6 A, mucho m ayor que los 20 mA suministrados por cada patita de salida de un dsPIC. Otra ventaja de em plear este driver es que la tensin aplicada al motor puede ser independiente de la tensin de alim entacin de la electrnica de control que se introduce a travs de la patita +V de la zona DRIVER 4 CANALES 0,6 A de la placa PIC School. En el presente laboratorio se utili zar la fuente de alim entacin comn para toda la placa y, por esta razn, esa patita perm anece r desconectada.
AP18

ENTRADAS AL DRIVER

ENTRADAS DIGITALES

Figura L5.4.

Esquema electrnico del Laboratorio 5.

362

dsPIC. DISEO PRCTICO DE APLICACIONES

L5.4. CONEXIN DE LOS PERIFRICOS Para llevar a cabo el laboratorio sobre la placa PIC School, debern realizarse 4 conexiones princi pales, resumidas en la Tabla L 5 .1. Deber prestarse especial atencin a conectar la entrada E4 del DRIVER 4 CANALES, a tierra (GND en la placa). Y por ltimo, deber conectarse el motor en los bornes S3 y S4 del DRIVER 4 CANALES.
Pin d el d sP IC 3 0F 4 0 1 3 RDO/O1 RFO RF1 Elem ento de la P IC S C H O O L F3 de DRIVER 4 CANALES (E4 CONECTADO A GND) EO de ENTRADAS DIGITALES El de ENTRADAS DIGITALES

Tabla L5.1.

Conexin de los elementos utilizados en el Laboratorio 5.

L5.6. CREACION DEL PROGRAMA

En primer lugar el programa configura el mdulo O C l comparador de salida. Al igual que se indi c en captulos anteriores, se utilizar la herramienta Visual Initializer para llevar a cabo esta tarea.

16 Bit Tim er 2 Configuration


0 p eration al S e ttin g s ....... . 0 O E n a b le o n S tartup G a te d T im e A c c u m u la tio n v CP U Idle O peration C o ntinue

v :

Timer C lo c k Prescale: | 1 :2 5 6 Timer Period: Tim er F reque ncy: 1

Postscale: (msec)

1 ,0 0 0 0 6 4 0 0 4 0 9 ; (K H z )

(Calc.)

Interrupt E n a b le Interrupt o n S ta rtu p

Interrupt Priority:

Help

OK

C a ncel

A p ply

Figura L5.5.

Configuracin del temporizador medanle Visual Initializer.

El primer paso ser configurar el circuito del reloj y colocar un reloj tipo XT w/PLL 4X a 4 MHz. A continuacin, se configura el temporizador Timer2 estableciendo los parmetros recogidos en la Figura L5.5, es decir, habilitarlo al inicio (Encible on startup), pre-cscaler de 1:256 y un perodo de 1 milisegundo. Y por ltimo, segn recoge la Figura L5.6, se proceder a configurar el mdulo O C l, estableciendo el Timer2 como elemento de con taje, modo de operacin PW M M ode fa u lt pin disabled y cargando en OC1R el valor 7000 y en O C 1RS el valor FFFF.

LABORATORIO 5: CONTROL DE UN MOTOR DE CC MEDIANTE PWM

363

Output Compare Configuration


Output Compare Settings---------0C1 0C2 ; 0C3 : 0C4

Timebase lor input compare: j Timer 2 Compare Operating Mod CPU Idle Operation OCIR (hex): 0C1RS (hex): I O Enable Interrupt on Startup ' Interrupt Priority:

:-V:

PWM mode. Fault pin disabled Continue 'Vj : V i

Help

OK

Cancel

Apply

Figura L5.6.

Configuracin del mdulo OC1.

Una vez configurados los elementos, se inicia la construccin del programa, que simplemente, llamar a la rutina de inicial izacin de los componentes, despus configurar las patitas RFO y RF1 para que lean los valores de los interruptores EO y E l y, en funcin de su estado, asignar un valor u otro al registro OC1RS, que har que se generen distintas seales de salida y, por lo tanto, distin tas velocidades en el motor. A continuacin, se presenta el cdigo fuente comentado correspondiente al programa que reali za la funcin descrita.

; Control de motores va PWM .include >30f4013,incn .global _main


_ m a in :

CALL MOV MOV MOV MOV MOV MOV COMPRUEBA: BTSC GOTO BTSS GOTO GOTO ROI UNO: BTSS GOTO

_VisualInitialization #0x0003.WO W0,TRISF #0x0,WO W0,ADPCFG #0x0100, WO W0.PR2 PORTF,#RFI RD1.UNO PORTF,#RFO m a r c h a _ c>;r o MARCHAJUNO PORTF,#RFO MARCHA_DOS

;Inicializacin de TMR2 y OC1 ;RF0 y RF1 entradas :PORTF seales digitales ;Valor mximo de OC1

;Comprueba valor interruptores El y E0 ;E1 es 1 ;Comprueba H0 cuando B1 es 0 ;Velocidad 0 ;Velocidad 1 ;Comprueba E0 cuando El es 1 ;Velocidad 2

364

dsPIC. DISEO PRCTICO DE APLICACIONES

GOTO MARCHA CERO: MOV MOV GOTO MARCHA_UNO: MOV MOV GOTO MARCHAJDOS: MOV MOV GOTO MARCHA_TRES: MOV MOV GOTO .end

MARCHA.TRES #0x0,W0 WO,OC1RS COMPRUEBA #0x0030,W0 WO,OC1RS COMPRUEBA #0x0080,W0 WO,OC 1RS COMPRUEBA #0x0100,WO WO,OC1RS COMPRUEBA

;Velocidad 3 ;Mueve 0 a OC1RS ;Ia velocidad ser 0 ;Compmeba interruptores ;Mueve a OC1 RS 30 ; Velocidad baja (mximo 100) ;Comprueba interruptores ;Mueve a OC1RS 80 ;velocidad alta ;Comprueba interruptores Mueve a OC1RS el valor 100 ;Velocidad mxima ;Comprueba interruptores

Al mover 0x0100 a PR2, para conseguir distintas velocidades, se carga el registro OC1RS con valores inferiores c iguales a dicho valor. As, para un valor 0 el motor no se mover y, sin embar go, para un valor 0x0100, el motor ir al mximo de revoluciones. Para cambiar el giro del motor, podra jugarse con la conexin E4 del DRIVER 4 CANALES y, si en vez de conectarlo a tierra, se conecta a un interruptor (por ejemplo E3), accionando dicho interruptor en un sentido u otro podr cambiarse el giro del motor.

L5.7. GRABACIN Y EJECUCIN DEL PROGRAMA

Este proyecto se encuentra en el CD del libro, en la carpeta LABORATORIOS y subearpeta Labo ratorios. El proyecto puede abrirse desde el programa MPLAB para ver el cdigo fuente y compi larlo. El siguiente paso consiste en grabar el fichero hexadecimal de la prctica en la memoria del dsPIC empleando el software WinPIC800 y el equipo PIC School. Para hacer esta operacin hay que seguir los mismos pasos que se han explicado en la seccin del software WinPIC800 y que se han seguido en el resto de laboratorios. Una vez grabado el programa, se pulsar el botn de Reset de la tarjeta para comenzar su ejecu cin. Segn se modifique el valor de los interruptores E0 y E l de la tarjeta, vara la seal PWM ge nerada por el dsPIC y se aprecia su efecto con el movimiento de giro del motor. D e las cuatro com binaciones posibles de velocidad que se pueden introducir con los dos conmutadores, el valor 00 corresponde a la velocidad inferior (motor parado) y el valor l a l a ms elevada, creciendo de for ma progresiva.

LABORATORIO 5: CONTROL DF UN MOTOR DE CC MFDIANTE PWM

365

Figura L5.7.

Control de un m otor de CC mediante PWM en la tarjeta PIC School.

NOTA: En el CD que acompaa al libro podr encontrar los programas de los laboratorios en lenguaje ensamblador y en C.

L6.1. OBJETIVOS

Este laboratorio aborda la tarea de resolucin de una ecuacin tpica de filtrado de seales. Concre tamente resuelve la ecuacin general para filtros FIR representada en la Figura L 6 .1.

yn = boXn + b , X n., + b 2X n.2

Figura L6.1. Ecuacin general de un filtro FIR.

La resolucin de este tipo de ecuaciones resulta de especial inters en el tratamiento digital de seales. Una de las caractersticas fundamentales para una vez capturada la seal se pueda aplicar el filtro y reconstruir la seal filtrada es la velocidad de proceso. Los dsPIC disponen de una ins truccin especialmente eficaz para realizar esta funcin, denominada MAC, que permite realizar esta ecuacin de una form a rpida y sencilla.

L6.2. DESCRIPCIN DEL LABORATORIO

Para introducir los coeficientes de la ecuacin general se utilizar el mdulo UART del dsPIC con el que se introducen los datos desde el teclado del ordenador. Cada uno de estos coeficientes se co rresponde con cada uno de los bytes transmitidos por este mdulo de comunicacin. La aplicacin, mientras recibe todos sus argumentos, ir mostrando en todo momento el valor acumulado de las operaciones realizadas por la pantalla LCD. Por cada dato recibido por el puerto serie se mostrar en la lnea superior de la pantalla el valor del dato recibido as como el de la par te baja del acumulador en el que se almacena el resultado yn de la ecuacin. Los datos debern enviarse de forma ordenada, es decir, en primer lugar se enviar b, a conti nuacin x, ms tarde bj, xn.i, b2, y por ltimo x_2.
367

368

dsPIC. DISEO PRCTICO DE APLICACIONES

Cada vez que se reciben dos operandos se efecta la suma de ambos y se acum ula el resul tado en el A cum ulador A, m ostrando el valor de sus 16 bits de menos peso en la parte inferior de la pantalla LCD. En la parte superior se visualizar el ltimo dato recibido por el puerto USART. El Acumulador A consta de 40 bits. La pantalla LCD tiene la posibilidad de mostrar 32 caracte res. Para poder visualizar los 32 bits de menos peso del acumulador hay que activar una interrup cin externa que origina que se visualicen estos bits por la pantalla LCD. Para distinguir que los da tos mostrados en pantalla se corresponden con los 32 bits de menos peso del acumulador o con el ltimo byte recibido y el contenido de los 16 bits de menos peso tambin del acumulador, cuando se visualice nicamente el acumulador, parpadear el cursor.

Inicializacin del mdulo UART

______I _____
Recepcin de un byte b, del mdulo UART

Activacin interrupcin extema INTO

____________ _____
Visualizadn del dato recibido y la parte baja del Acumulador A

\ /
Muestra los 32 bits de menos peso del Acumulador A

Recepcin del segundo byte x

Multiplicacin y acumulacin (MAC) de b, * x


T

Visualizacin del dato recibido y el valor del Acumulador A

Figura L6.2. Diagrama de flujo del Laboratorio 6 .

L6.3. ESQUEMA ELECTRNICO

El laboratorio 6 hace uso de varios perifricos para su funcionamiento. Por un lado se encuentra la pantalla LCD que visualizar los resultados y que requiere del controlador serie. P or otro, se re quiere de la conexin al puerto USART a travs del interfaz RS-232 para la recepcin de los ope randos de la ecuacin. Finalmente, esta aplicacin requiere un interruptor de entrada para activar la interrupcin encar gada de mostrar los 32 bits de menos peso del Acumulador A. El esquema electrnico correspon diente a estas funciones se muestra en la Figura L6.3.

LABORATORIO 6: DISEANDO FILTROS

369

35

R A 1 1 < 0 - Z --------------------- 1

3
2 -K

X- 2 RF2/U1RX
* 4
*" 5

CANAL SERIE ENTRADAS DIGITALES

Figura L6.3. Esquema electrnico del Laboratorio 6.

L6.4. C O N E X I N DE LOS PERIFRICOS

Para llevar a cabo las conexiones descritas en el esquema de la Figura L6.3, hay que interconectar adecuadamente los perifricos indicados en la Tabla L6.1 correspondientes a la tarjeta de desarro llo P1C SchooL La aplicacin utiliza el controlador serie a LCD, cuya adaptacin ya ha sido comentada en la boratorios anteriores.
Patita del d sP IC 30F 4013 RF2/UIRX RF3/U1TX RA1 l/INTO Elem ento de la PIC S C H O O L RxD del interfaz RS-232 Patita 7 del controlador LCD serie E7 de ENTRADAS DIGITALES

Tabla L6.1.

Conexiones de la PIC School para el Laboratorio 6.

L6.5. CREAC I N DEL PRO G RAM A

Para la programacin del dsPC se ha creado un proyecto que contiene dos ficheros fuente princi pales. El fichero lahom torio.s se corresponde con el cdigo principal del programa y, por otro la do, el fichero LCD.s contiene las rutinas necesarias para manejo del LCD de la PIC School a travs del adaptador serie a LCD. A continuacin, se describen las paites principales del fichero laboratorio.s que dispone de las rutinas principales de la aplicacin. El fichero LCD.s contiene rutinas ya explicadas en laboratorios anteriores.

370

dsPIC. DISEO PRCTICO DE APLICACIONES

.include "p30f4013.inc" global__JNTOInterrupt ; Tratamiento de la interrupcin INTO _NTOlnterrupt: BCLR CALL CALL MOV CALL MOV CALL RETFI IFS0,#0 LIMPIA PARPADEA ACCAH,W2 W2TOLCD ACCAL,W2 W2TOLCD ;Borra flag de interrupcin ;Borra pantalla LCD ;Muestra cursor parpadeando en LCD ;Muestra ACCAH en la lnea sup. del LCD ;Muestra ACCAL en la lnea inf. del LCD ;Retorna de la interrupcin

La primera parte del cdigo se corresponde con el tratamiento de la interrupcin externa INTO. Al activar el pulsador E7, se provoca una interrupcin que muestra en la pantalla LCD los 32 bits de menos peso del Acumulador A.

.global__U1RXInterrupt U1 RXInterrupt: BCLR IFS0,#U 1RXIF MOV U1RXREG,W2 BTSC W3,#0X0 GOTO OPERA MOV W2.W4 MOV #0X0001,W3 GOTO MOSTRARPANTALLA OPERA: MOV W2,W6 MAC W4*W6,A CLR W3 MOSTRARPANTALLA: CALL LIMPIA NOPARPADEA CALL CALL W2TOLCD MOV ACCAL.W2 CALL W2TOLCD RETEJE

;Borra flag interrupcin RXUART1 ;Mueve el dato recibido a W2 ;Si W3 es uno significar que ha recibido ;el segundo dato y realizar la multipl. ;Si es el primer dato lo guarda en W4 ;Marca en W3 que ya ha recibido un dato ;Muestra el primer dato en pantalla ;Si ha recibido el 2o dato ;Sa!va el 2o dato en W6 ;Multiplica los 2 operandos y acumula ;Pone a 0 W3 indicador de operandos ;Limpia pantalla ;No parpadea el cursor ;Muestra el ltimo dato recibido ;Mucstra ios 16 bits de menos peso de A ;Retoma de la interrupcin

Esta segunda parte se corresponde con el cdigo de atencin a la interrupcin de datos por el m dulo USART. Cuando recibe el primer dato lo salva en W4 y lo muestra junto con el valor de ACCAL. Al recibir el segundo dato, realiza la multiplicacin y acumulacin mediante el uso de la ins truccin MAC, mostrando de nuevo el ltimo dato y el valor del registro ACCAL. La ejecucin de esta instruccin MAC es la que realiza las operaciones matemticas necesarias para la resolucin de la ecuacin planteada.

LABORATORIO 6: DISEANDO FILTROS

371

.global _main ;PROGRAMA PRINCIPAL _main: BSET CORCON,#OxO CALL INICIAUART CLR W3 bucle: CLRWDT GOTO bucle

;Operacin con nmeros enteros ;Inicializa la UART e INTO ;Pone cero el contador de operandos ;Entra en un bucle infinito a la espera ;de una interrupcin

El programa principal simplemente inicializa los perifricos utilizados y entra en un bucle a la espera de que se d alguna interrupcin. INICIAINTO: Configuracin de interrupcin externa INTO MOV #0x0001, W0 MOV W0, IEC0 RETURN

Rutina de inicial izacin de la interrupcin externa TNTO y USART.

INICIAUART: CLRU1BRG #0x0019,W0 MOV MOV WOAJIBRG MOV #0x8000. W0 W0, UlMODE MOV - MOV #0x0510, W0 MOV W0, U 1STA MOV #0x8020, W0 MOV : W0, UlMODE MOV #0x0201, W0 MOV W0, IEC0 [EC1 CLR EC2 CLR RETURN .end

;Configuracin del registro U1BREG ;para un reloj de 4M Hz y 9600bps :Modo de transmisin

;Interrupciones activas para USART e INTO

L6.6. GRABACIN Y EJECUCIN DEL PROGRAMA

Una vez compilado el program a se utiliza el programa W inPic800 para grabarlo en la memoria del dsPIC. Es necesario seleccionar en la pestaa Config del programa WinPic800 la fuente de reloj XT w/PLL 4X para el correcto funcionamiento del laboratorio. Tras grabar el programa, se coloca el conector serie procedente del ordenador en la salida del Interfaz RS-232 de la tarjeta de entrenamiento para enviar datos desde el programa Hyperterminal

372

dsPIC. DISEO PRACTICO DE APLICACIONES

como ya se describi en laboratorios anteriores. La configuracin de esta comunicacin serie est establecida para una velocidad de 9600 bps, 8 bits de datos, 1 de stop y sin control de paridad. Tras realizar las conexiones descritas se coloca el interruptor del circuito grabador de la PIC School en la posicin RUN para que comience la ejecucin del programa. Los coeficientes a introducir en la ecuacin general sern los indicados en la Tabla L6.2.
b 65 67 69

xn
66 68 70

Tabla L6.2.

Coeficientes a introducir en el ejemplo de ejecucin del Laboratorio 6.

Los valores de la Tabla L6.2 se encuentran expresados en base decimal. Se han elegido dichos valores porque coinciden con los cdigos ASCII de las letras A, B, C, D, E y F respectivamente. As, la introduccin de estos valores por el programa HyperTerminal de Windows ser muy sencilla, te niendo que pulsar consecutivamente las teclas indicadas en mayscula. Con estos valores, el resultado final de la ecuacin de filtrado deber ser el siguiente: y = 65 x 66 + 67 x 68 + 69 x 70 = 13.676 La ejecucin de la aplicacin, paso a paso, sigue el guin detallado en la Tabla L6-3.
A c c i n
A l iniciar la ejecucin del programa en la pantalla LCD no aparece ningn dato hasta recibir el primer operando por el puerto USART. A l pulsarla tccla A (mayscula) en el programa HyperTerminal de Windows, se enva el cdigo ASCII 65 como b, representa do en binario en la parte superior de la pantalla. Kn la parle inferior se muestra el valor de ACCAL. que ser cero ya que todava slo ha recibido b y no puede multiplicarlo por x. Como segundo operando xn se enva la letra B, es decir 66, representado en la primera fila del LCD. En la segunda apa rece 4290 en binario resultado de 65*66, Ai introducir el siguiente dato. C (67), el valor del acumu lador no vara, ya que necesita de otro dato ms para reali zar la siguiente multiplicacin y acumulacin.

Con el cuaito dato, D (68), cambia de nuevo el resultado del acumulador, 8846 = 4290 + 68 * 67.

Con el quinto dato. E (69). de nuevo el valor del acumula dor no vara.

j Con el ltimo dato, F (70), aparece ya el resultado de la j ecuacin final. 13676 = 8846 + 69*70.

Tabla L6.3.

Seguimiento de la ejecucin del Laboratorio 6.

LABORATORIO 6: DISEANDO FILTROS

373

En cualquier momento podra pulsarse el interruptor E7 para ver los 32 bits menos significati vos del Acumulador A, como se muestra en la Figura L6.4.

Figura L6.4.

Fotografa que muestra la visualizacin do los 32 bits de menos peso del Acum ulador A.

El cursor parpadea para distinguir que en la lnea superior de la pantalla LCD se muestra el con tenido ampliado del Acumulador A y no el ltimo dato recibido.

NOTA: En el CD que acompaa al libro podr encontrar los programas de los laboratorios en lenguaje ensamblador y en C.

LABORATORIO

Grabando la memoria FLASH de programa con un bootloader


L7.1. OBJETIVOS

Una caracterstica muy interesante de los dsPIC consiste en la posibilidad de autoprogramarse. Aprovechando esta caracterstica, el presente laboratorio muestra cmo confeccionar un programa bootloader que permita la programacin del dsPIC sin necesidad de un circuito grabador, recibien do los datos por el puerto serie. Esta posibilidad significa el abaratamiento en el desarrollo hardware de aplicaciones, ya que el circuito de grabacin del dsPIC se sustituye por un circuito de recepcin de datos por el interfaz RS232 que es mucho ms econmico. Tambin puede resultar muy til en aplicaciones que cambien frecuentemente de parmetros de cdigo de ejecucin, en las que con una conexin por el puerto se rie se actualizaran fcilmente. Para conseguir el resultado deseado, el laboratorio 7 desarrolla los siguientes objetivos:
Analizar y comprender la estructura de la memoria de programa. Crear un programa capaz de grabar la memoria FLASH de programa.

17.2. DESCRIPCIN DEL LABORATORIO


Para la implemcntacn de este laboratorio se requieren dos elementos principales. Por un lado se requerir un program a bootloader en el PC que transmita los datos a grabar en el dsPIC por el puer to serie y, por otro lado, un programa en el dsPIC que reciba dichos datos y los grabe en la memo ria de programa. El programa bootloader del PC se encuentra en el CD que acompaa a esta obra, dentro de la car peta LABORATOR!OS\ LABORATORIO 7\ MINIBOOTLOADERV Minibootloadcr.exe. Se trata de un pequeo programa que no requiere instalacin alguna y que enviar por el puerto serie 96 bytes a razn de un byte cada medio segundo. Esos 96 bytes se corresponden con 32 instrucciones del progra ma. Cada instruccin est formada por 3 bytes y la grabacin en memoria FLASH se realiza en bloques de 32 instrucciones, de ah que el programa Minibootloader.exe enve 96 bytes por el puerto serie.
375

376

dsPIC. DISEO PRCTICO DE APLICACIONES

Puerto sene

jCOMI

Envf ptogtema

Figura L7.1. Aplicacin Minibootloader.exe.

El programa Minibootloader es muy sencillo. Para su ejecucin se selecciona el puerto serie a utilizar de la lista desplegable Puerto serie y se pulsa el botn Enviar programa. Con el fin de sim plificar la complejidad de esle laboratorio, el programa enviado al dsPIC siempre ser el mismo y se encuentra en el propio programa Minibootloader. El dsPIC dispone de un programa que recibe los datos enviados por el progama Minibootloader y los graba en la memoria FLASH. Una vez grabado dicho programa, se enciende un led para indi car que la grabacin se ha llevado a cabo. Cada dato recibido a travs del puerto serie, el dsPIC lo visualiza en la pantalla LCD por la fila superior de la pantalla y en la fila inferior de la pantalla la posicin de la memoria de datos donde almacenar temporalmente los datos recibidos hasta que pueda grabarlos en la memoria FLASH. Como la grabacin en la memoria FLASH se hace de 32 en 32 instrucciones, hay que almacenar los datos recibidos hasta completar los 96 bytes en la memora de datos del dsPIC.
Inicializa UART Inicializa contador de posicin de memoria Recibe dato por UART Muestra dato por LCD y contador posicin de memoria ; Aumenta contador de posicin de memoria

N o / H a recibido 96 b y t e s ? / ......... T ____

Graba datos en memoria FLASH de programa Activa la salida RDO paja encender led de aviso de fin.

Figura L7.2.

Diagrama de flujo del Laboratorio 7.

LABORATORIO 7: GRABANDO LA MEMORIA FLASH DE UN PROGRAMA CON UN.

377

L7.3. ESQUEMA ELECTR NICO

El Laboratorio 7 emplea perifricos analizados en temas anteriores, como son el display LCD, el in terfaz RS-232 y una salida digital conectada al led S5 que sealiza que el proceso de grabacin en memoria de programa se ha llevado a cabo. El esquema de estas conexiones se muestra en la Figu ra L7.3.

CANAL SERIE

SALIDAS DIGITALES

Figura L7.3.

Esquema electrnico del Laboratorio 7.

17A . C O N E X I N DE LOS PERIFRICOS

La conexin de los perifricos queda resumida en la tabla siguiente y es muy similiar a la de labo ratorios anteriores,
Ratita d e l dsP IC 30F 4013
RF2/U1RX RF3/U1TX RDO

E lem en to d e la PIC SCHO O L


RxD del Interfaz RS-232 Ratita 7 del controlador LCD serie S5 de SALIDAS DIGITALES

L7.5. C O N S T R U C C I N DEL PRO G RAM A

Para la construccin del Laboratorio 7 se ha creado un proyecto con 3 ficheros de cdigo fuente. Un primer fichero llamado LCD.s es el encargado de las rutinas de visualizacin de datos por la pantalla LCD de la placa PTC School y su estudio ya se ha realizado en laboratorios anteriores.

378

dsPIC. DISEO PRCTICO DE APLICACIONES

Hxiste un segundo fichero, denominado grabaprograma.s, que se analiza a continuacin y con tiene las rutinas necesarias para grabar los 96 bytes recibidos por el puerto serie en la memoria de programa a partir de la posicin 0x0A00. Para determinar la primera posicin desde la que se almacena el programa una vez creado den tro del MPLAB ID E con la opcin View Disassembly listing se puede observar hasta qu posicin ocupa el mismo. Con un pequeo margen se localiza una posicin libre de la memoria de programa donde ubicar los datos recibidos por el puerto serie. Para este laboratorio se ha elegido la posicin OxOAOO.

.global GRABA .include "p30f40i3.inc" GRABA: SECUENCIA DE BORRADO MOV MOV MOV MOV MOV MOV DfSI MOV MOV MOV MOV BSET NOP NOP CLR CLR #0X4041,wO WO.NVMCON #tblpage(#OxAOO),WO WO.NVMADRU #tbIoftset(#0xA00),W0 WO, NVMADR #5 #0X55,W0 W0.NVMKEY #0XAA,W0 W0,NVMKEY NVMCON,#OXF ;carga en NVMCON 0x4041 ;para iniciar el borrado ;mueve a NVMADRU ;la pgina de memoria a borrar ;mueve a NVMADR los 2 bytes de menos peso de la direccin ;deshabilita interrupciones en 5 instrucciones ;mueve la secuencia ;de 55 y AA ;al registro de control NVMKEY ;activa bit WR (el bit 15 de NVMCON) ;para que se inicie la grabacin introducir 2 NOP

W2 W3

El fichero grabaprograma contiene la rutina GRABA que comienza borrando 32 instrucciones a partir de la posicin OxOAOO de la memoria de programa.

; CARGA DE LOS DATOS EN MEMORIA ; RELLENAMOvS LA FILA COMPLETA DE 96 BYTES MOV #0X0, w o MOV W0,TBLPAG MOV #0xA00,W0 MOV #0x090 i,W4 MOV #0x096 LW6 OTRANSTR: MOV.B [W4],W3 ;Mueve a TBLPAG ;la pgina memoria de la direccin a escribir ;deja en W0 el desplazamiento de la pgina ;el primer byte recibido est en 901 ;el ltimo en 0x0961 de la memoria datos ;carga en W2 los 2 bytes de menos peso

LABORATORIO 7: GRABANDO LA MEMORIA FLASH DE UN PROGRAMA CON UN.

379

ADD MOV.B SL ADD MOV.B ADD TBLWTL TBLWTII ADD CPSEQ GOTO

W4J0x0001,W4 [W4],W2 VV2,#0x008, W2 W4> #0x000l,W4 | W4],W7 W7,W2.W2 W2,( W0J W34W0++] W4,#0x0001,W4 W4.W6 OTRAINSTR

laade 1 al coniador de direccin ;carga el dato en W2 .desplaza el dato al byte alto de W2 ;aade 1 al contador de memoria ;nive el contenido a W7 ;suma W2+W7 para tener en W2 2 datos ;escribe direccin apuntada por W0 el ;contenido W2 ;guarda W3 :suma uno al contador ;comprueba si es el ltimo dato :graba otra instruccin

A continuacin la rutina recupera los datos de las posiciones de memoria 0x0901 hasta la posi cin 0x0960 para su grabacin en memoria.

; PROCEDIMIENTO DE ESCRITURA MOV MOV DISI MOV MOV MOV MOV BSET NOP NOP ESPERA2: BTSC GOTO NOP #0x4001.W0 WO,NVMCON #5 #0X55,W2 W2.NVMKEY #0XAA,W1 WLNVMKEY NVMCON,#W R ;indica a NVCOM el dato 0x04001 ;para realizar grabacin memoria ;deshabilita interrupciones en 5 instrucciones ;genera la secuencia de control ;55 y C AA en NVMKEY

NVMCON,#WR ESPERA2

;A 1 el bit WR de NVMCON para que se ;inice la grabacin ; y espera con 2 NOP ;asimismo espera a que el bit WR ;pase a 0 ;para seguir con el programa

Se ejecuta el procedimiento de escritura en memoria como ya se estudiara en secciones anteriores de esta obra. TRSD PORTD,#OxO niciaJiza PORTD como salida ;enciende el led conectado a RD0 ;retomo

CLR BSET RETURN

Por ltimo, enciende el lcd conectado a RD0 para indicar al usuario que el proceso de grabacin ha finalizado. Esta rutina GRABA del fichero GRABAPROGRAMA.s es llamada desde el programa principal al macenado en el fichero laboratorio?.s. Este fichero contiene las rutinas principales de la aplicacin.

380

dsPIC DISEO PRCTICO DE APLICACIONES

.include "p3Gf401 3.ine"


cclhhl T1R XTnfp.mmf

_lRXInterrupt: Recepcin de un byte por UART BCLR IFS0,#U1RXIF CLR WO MOV U 1RXREG,Wr0 W0,[W4] MOV.b ADD W4,#0X0001,W4 MOV #0x0960,W3 CPSEQ W4,W3 GOTO FNRX GRABA CALL FNRX: U 1RXRHG,W2 MOV CALL LIMPIA CALL W2TOLCD MOV W4,W2 W2TOLCD : CALL RETFIE

;Se guardan los datos consecutivamente ;a partir de la posicin 0x0901 ;hasta la posicin 0x0961 ;Si se reciben todos los datos ;entonces se graban en FLASH ;Visualiza el dato recibido ;en la primera lnea del LCD Visualiza la posicin de memoria ;donde guarda dicho dato ;Retomo de la interrupcin

Esta rutina de interrupcin es la encargada de ir guardando los datos recibidos por el puerto se rie en la memoria de datos del dsPIC. La rutina va guardando los datos desde la posicin 0x0901 hasta la posicin 0x0961. Los guarda en la memoria de datos para que este proceso de almacena miento sea ms rpido y para que una vez recibidos todos los datos se llame a la rutina GRABA en cargada de almacenarlos en la memoria FLASH de programa. Mientras no recibe el ltimo dato la rutina visualiza en pantalla el dato recibido y la posicin de memoria donde es almacenado. .global _main main: CALL MOV INICIAUART #0x0900,W4 Jnicializacin del mdulo UART ;Direccin donde empezar a ;guardar los datos ;PROGRAMA PRINCIPAL ;Bucle infinito a la espera ;de interrupcin Jnicializacin UART ;Configura U 1BREG para 4MHz ;y 9600bps ;Gonfigura modo

bucle: CLRWDT GOTO bucle INICIA UART. CLR U1BRG MOV #0x0019,W0 MOV W0,U 1BRG MOV #0x8000. W0 MOV W0. U1MODE MOV #0x0510. W0 MOV W0, U 1STA #0x8020. WO MOV MOV W0, UMODE MOV #0x0200, W0 MOV W0. BCO CLR IEC1 IF.-C2 CLR RETURN .end

;Configura interrupciones ;Retomo subrutina

LABORATORIO 7: GRABANDO LA MEMORIA FLASH DE UN PROGRAMA CON UN...

381

Esta parte del cdigo contiene el programa principal, que simplemente inicializa el mdulo UART para una com unicacin serie a 9600 baudios, 8 bits de datos, 1 de stop y sin control de paridad. Inicia tambin el contador de posicin de memoria donde almacenar los dalos y entra en un bucle, infinito esperando que se produzca una interrupcin en el mdulo UART al recibir los da tos del programa Minibootloader.

17. 6. GRABACIN Y EJECUCIN DEL PROGRAMA


Una vez compilado el proyecto y generado el fichero laboratorio?.hex hay que cargar dicho fiche ro en el dsPIC a travs del programa WinPicBOO. Es conveniente recordar que en la pestaa Config hay que seleccionar XT w/PLL 4X en la opcin Primary Source antes de la grabacin del mismo.

Figura 17 A .

Fotografa del Laboratorio 7 montado sobre la PIC School.

A continuacin, se situar el interruptor del circuito grabador de la placa PIC School en modo RUN para ejecutar el programa. En la pantalla LCD no aparecer ningn dato hasta que se arranque en el PC el programa Minibootloader, se conecte el cable serie en el conector del interfaz RS232 y se pulse el botn Enviar Da los del programa Minibootloader. Deber elegirse de forma adecuada el puerto serie a utilizar.

Puerto serie:

C O M I

E n viai programa

Figura L7.5. Programa Minibootloader.

382

dsPIC DISEO PRCTICO DE APLICACIONES

Al pulsar el botn Enviar programa el dsPIC comienza a recibir datos por el puerto serie que se visualizan en la pantalla LCD junto con la direccin de la memoria donde se almacena, tal como se puede observar en la Figura L7.6.

Figura L7.6.

El display LCD muestra el dato recibido y la posicin de memoria donde es almacenado.

Una vez enviados los datos al dsPIC, el programa Minibootloader muestra un mensaje en pan talla indicando que el envo ha finalizado. Figura L7.7. Luego el dsPIC activa el led S5 para indicar que el proceso de grabacin ha concluido. (Figura L7.8.)

Mirribootloa...

Datos enviados Aceptar

1 ____ 1

Figura L7.7.

Fin del envo de datos.

Figura L7.8.

El led S7 se enciende al finalizar la grabacin del programa.

Queda por com probar que la grabacin ha sido correcta. Mediante el program a WinPicBOO se leer el contenido de la memoria de programa del dsPIC para efectuar esta comprobacin. Se coloca el interruptor del circuito de grabacin en posicin PC. Y en el program a WinPic800 se pulsa la opcin Leer Todo. Tras realizar esta operacin en la pestaa Datos se observa que en la posicin OxOOAOO se encuentran unos bytes distintos al resto, que son los enviados por el programa Minibootloader. (Figura L7.9.)

LABORATORIO 7: GRABANDO LA MEMORIA FLASH DE UN PROGRAMA CON UN...


FRE3

383

WnPic800

- v 3.56.c 'fiiwbwo Wvjocwi i{ik*no AnwJa w Cc w n g n xvw

\g *i \
: Sn ; <)x009A0: OX009B0: uxuuycu: Ok 009D 0: OX009E0: OxOOOFO: QxOOAOO: OxOOAlO: UX00A20: O x00A30: 0x00A 40: OxQOASO: *

0 :; M
*><.-

v
m ".

^
V

^
S I '

%
r :' %

j? ic 0?
j 30F4013

HK'zl &
3 :Q r'

D ato s FFFPFF FFFFFF FFFFT FFFFFF FFFFFF FFFFFF EF22D2 FFFFFF FFFFFF FFEFFF FFEFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF A802D4 FFFFFF FFFFFF FFFFFF FPFPFF FFFFFF

Conf irj,

^ C o d .I C S P FFFPFF FFFFFF FFFFFF FPFFFP FFFFFF FFFFFF JPFPFF Fp f p f f FFFFFF FFFFFF FFFFFF FFFFEF FFEFFF FFEFEF FFFFFF FFFFPF FFFFFF FFFFFF FF p f p f FFPFPF FFFFFF FFFFFF FFFFFF FFFEFF FFFPFF FFFFFF FFFFFF FFFPFF FFFFFF FFFFFF FFFPFF FPFFFP FFFFFF FFFFFF FFFPFF FFEFFF

r
-

ic s r

FEFEFF FFFEFF FFFFFF FFFPFF FFFFFF FFFFFF FE6000 FFFFFF FFFFFF FFFFFF FFEFFF FFFFFF

FFFFFF FFFFFF FFFFFF FFFFPF FFFFFF FFFFFF OOAO-1 FFFFFF FFFFFF FFFFFF FEFEFF FFFFFF

FPFFFP FFFFFF FFFFFF PPFFFF FFFFFF FFFFFF FFPFPF FFFFFF FFFFFF FFFF88 FFPFPF FFPFPF

m
i

.
2 _r

m m Figura L7.9. Memoria de programa modificada en la posicin 0x00A00.

LABORATORIO

L8.1. OBJETIVOS

Con este laboratorio se persiguen los siguientes objetivos:

Analizar el funcionamiento de las interrupciones. Asignar distintas prioridades a las interrupciones. Manejar correctamente la ejecucin de las rutinas de interrupcin, salvando los datos necesarios y protegiendo fa parte de cdigo adecuada.
V .W .

L8.2. DESCRIPCIN DEL LABORATORIO

La velocidad de procesamiento de instrucciones del dsPIC es muy alta. Tratar de producir dos inte rrupciones que se produzcan de forma simultnea resulta bastante complicado. Este laboratorio tra ta de conseguirlo mediante la configuracin de tres fuentes de interrupcin distintas. L a primera pro viene de un temporizador de 32 bits, la segunda de una interrupcin externa conectada al generador lgico de la placa PIC School y la tercera del mdulo UART. La interrupcin externa INTO se configura como la menos prioritaria y la ejecucin de su rutina de atencin mostrar en el LCD el mensaje INTO. La siguiente interrupcin con ms nivel de prio ridad ser la del Temporizador de 32 bits, que aproximadamente cada segundo generar una inte rrupcin que visualizar en el LCD el mensaje TEMP32. Por ltimo, la interrupcin ms prioritaria ser la proveniente del mdulo UART que mostrar en la pantalla LCD el mensaje recibido por el puerto serie del ordenador. Al estar conectada la patita INTO al generador lgico de la tarjeta PTC School, podrn seleccio narse distintas frecuencias para la generacin de interrupciones externas. Si se selecciona una fre cuencia de 1 Hz, se genera una interrupcin por segundo y con una frecuencia de 10 H z se genera rn 10 interrupciones por segundo.
385

386

dsPIC. DISEO PRCTICO DE APLICACIONES

Figura L8.1.

Diagrama de flujo del Laboratorio 8.

L8.3. ESQUEMA ELECTRONICO

El esquema electrnico del Laboratorio 8 se m uestra en la Figura L8.2, en el que se conectan al dsPIC el mdulo serie a LCD SYM 20-AA para m ostrar los mensajes de las interrupciones en la pantalla LCD, la patita RAI l/INTO al generador lgico para generar las interrupciones externas a distintas frecuencias y RF2 al interfaz RS-232 para recibir datos del ordenador va serie y provocar la correspondiente interrupcin.

RF3/ U 1TX

AP5
4 ^ R x O 3 2 -X X 1

AP8
i

< d > R F2/U 1R X RA11

o
4

C A N A L S E R IE

F R E Q . OUT

Figura L8.2.

Esquema electrnico del Laboratorio 8.

LABORATORIO 8: MANEJANDO A FONDO LAS INTERRUPCIONES L8.4. C O N E X I N DE LOS PERIFRICOS

387

La conexin de los perifricos queda resumida en la siguiente tabla y es muy similiar a la de labo ratorios anteriores. Slo se ha aadido un nuevo perifrico que se encuentra en la tarjeta de desa rrollo PIC School denominado Generador Lgico que se conecta a la patita RA11/1NT0.
Patita d el d sP lC 30F 4013
RF2/U1RX RF3/U1TX RA11/INT0

E lem ento d e la PIC SCHOOL


RxP del Inlerfaz RS-232 Patita 7 del controlador LCD serie Frec. ut del Generador Lgico

L8.5. C O N S T R U C C I N DEL PRO G RAM A

El cdigo principal del programa se encuentra recogido en un nico fichero llamado laboratorios.s. En l se encuentran las rutinas de atencin a interrupciones, as como la configuracin de las mis mas y el programa principal de la aplicacin.

Manejo de interrupciones .include "p30f4013.inc" .global _main .global__INTOInterrupt __INTOIntcrrupt: ;La interrupcin de menos prioridad PUSH WO ;Salva el registro WO en la pila BCLR IFS0,# ;Borra flag de interrupcin de INTO CALL INTO ;Escribe 1NT0 en pantalla POP WO ;restaura el valor de WO RETFTE ;retorna de la interrupcin

La primera parte del cdigo se encarga de la interrupcin externa INTO. Ntese cm o la prime ra instruccin consiste en salvar en la pila los registros cuyo valor va a ser modificado por la rutina. Esta rutina, al mostrar el mensaje INTO por pantalla, cambia el valor del registro WO, de ah que la primera instruccin sea PUSH WO para salvar su contenido actual en la pila de datos. A continua cin, borra el flag de la interrupcin para que no se vuelva a atender la misma interrupcin, para po der as mostrar el mensaje deseado, restaurar el valor de WO y retornar de la interrupcin.

.global_T3Interrupt Interrupcin del Timer de 32 bits _T3Tnterrupt: PUSH WO ;Salva los registros utilizados PUSH W1 DI SI #0x3E00 ;Deshabilita interrupciones.

388

dsPIC. DISEO PRCTICO DE APLICACIONES

BCLR ISO,#7 CALL TEMPORIZADOR MOV #0x3E00, WO Wl CLR BUCLET32: ADD W l,#0x0001,W1 CPSEQ W1,W0 GOTO BUCLET32 Wl POP WO POP R E IR E

;Afecta a las de la UART ya que esta ;es de nivel 7 ;Borra flag T3IF activacin interrupcin ;Muestra mensaje TIMER32 en pantalla ;Crea un bucle para que el mensaje ;se mantenga durante cierto tiempo ; y sea visible

;Restaura valores de WO ;y w i ;Retorno de la interrupcin

En la interrupcin del temporizador puede apreciarse que se ha incluido una nueva instruccin. Adems de las instrucciones PUSH que salvan los datos de los registros empleados en la rutina, se em plea la instruccin DIST. Esta instruccin deshabilita las interrupciones con prioridades comprendidas entre 1 y 6, de forma que si se provoca una interrupcin externa por INTO mientras se est ejecutan do dicha instruccin, no se atendera durante el nmero de ciclos expresados por el argumento ordi nal que sigue al nemnico. De esta manera, adems de que se ha configurado la interrupcin del tem porizador con una prioridad superior a la de INTO se consigue que se atienda antes que la externa. La instruccin DISI no afecta a las interrupciones provocadas por fuentes de interrupcin de prioridad 7 o mayor. La interrupcin del UART tiene asignado nivel 7, para as superar la prioridad de las interrupciones del timer y la externa INTO. Ntese tambin que si al salvar los registros me diante la instruccin PUSH el primero fue WO y el segundo W l, el orden de recuperacin con la ins truccin POP debe ser el inverso, primero W 1 y luego WO.

.global . J RXInterrupt ;lnterrupcin de recepcin de dato UART U l RXnterrupt: DISI #Ox3EOO ;Deshabilita resto de interrupciones PUSH WO ;Salva registros usados Wl PUSH BCLR IFS0,#U1RXIF ;Borra flag de atencin interrupcin CALL LIMPIA ;Limpia pantalla MOV U1RXREG,W0 ;Transmite el dato por el LCD CALL TRANSMITE MOV #0x3E00, WO ;Espera un pequeo tiempo para WL CLR ;que el dato sea perceptible BUCLEUART: W l,#0x0001,Wl ADD CPSEQ W1,W0 BUCLEUART GOTO Wl POP ;Restaura en orden inverso POP WO ;los registros salvados en la Pila ;Retorao de la interrupcin RETFIE

LABORATORIO 8: MANEJANDO A FONDO LAS INTERRUPCIONES

389

Esta parte del program a ofrece la rutina de atencin a la interrupcin provocada por la recepcin de un dato por el puerto UART. La nica diferencia con el cdigo correspondiente a la atencin por la interrupcin del temporizador es que tiene prioridad 7 y por tanto caso de ejecutarse simultnea mente tendr preferencia sobre el resto de interrupciones. .text _main: ;Inicializacin del Timer CLR T2CON CLR T3CON CLR TMR3 CLR TMR2 MOV #0x0040,WO MOV W0,PR3 : MOV #0x0000,W0 MOV W0,PR2 BCLR BCLR BSET BCLR BSET BSET BSET TPC1,#12 JBPCJ,#13 IPC1, #14 IF$),#7 IEC0, #7 T2CON, #3 T2CON, #15

Para cualquier operacin con Timers Borra el contenido del temporizador TMR3 Borra el contenido del temporizador TMR2 Inicializa el temporizador con el valor 0x00400000 (1 segundos aprox.) PR3 = 0040 PR2 = 0000 Activa flag T3IP = 100 Nivel de prioridad 4 Borra el flag de interrupcin del Timer3 Habilita interrupciones del Timer 3 Flag T32 = J . Habilita Timer 32 bits Comienza temporizador con preescaler 1:1 y fuente de reloj el ciclo de instruccin Configuracin U1BRG para 9600 bps y 4MH/.

;Inicializacin UART1 CLR U1BRG MOV #0x0019, W0 MOV W0,UJBRG MOV #0x8000, W0 MOV W0, U 1MODE MOV #0x0510, W0 MOV W0, U 1STA MOV #0x8020, W0 MOV W0, U1MODE BSET IPC2,#4 BSET IPC2,#5 BSET IPC2 # BSET IPC0? #0 BCLR IPC0,#1 BCLR IPC0,#2 MOV #0x0281, W0 MOV W0, EC0 CLR IEC1 CLR IEC2 ;PROGRAMA PRINCIPAL PRINCIPAL: CLRWDT GOTO PRINCIPAL

Configuracin buffers Configuracin modo

Prioridad de la interrupcin de UART 7 IPC2 <6:4>= 111 Configura la interrupcin INT0 con prioridad 1 IPC0<2:0> 001 Bit 0 INT0, Bit7 Timcr32 bits, Bit9 UART Habilita las 3 interrupciones

390

dsPIC. DISEO PRCTICO DE APLICACIONES

El programa principal simplemente configura los perifricos utilizados y entra en un bucle infi nito a la espera de que se d alguna interrupcin. Previamente se han configurado con los niveles de prioridad seleccionados las distintas interrupciones a travs de los bits de configuracin de los re gistros IPCO e IPC2.

L8.6. G R A B A C I N Y EJECUCIN DEL PR O G R A M A

Una vez compilado el proyecto y generado el fichero laboraorio8.hex se graba el mismo en el dsPIC a travs del programa WinPicSOO. Es conveniente recordar que en la pestaa Config de este programa hay que seleccionar XT w/PLL 4X en la opcin Primary Source antes de la grabacin. Luego se debe conectar el cable serie del ordenador al interfaz RS-232 de la placa PC School para poder provocar interrupciones del mdulo UART. Al pasar el interruptor del circuito de grabacin de la placa PC School a modo RUN, comenza r la ejecucin del laboratorio. Entonces podr observarse cmo se van alternando distintos mensa jes provenientes de la interrupcin externa y del temporizador en la pantalla LCD.

Figura L8.3. Fotografa del montaje del Laboratorio 8 en la PIC School.

Variando la frecuencia del generador lgico mediante el pulsador correspondiente se com prueba cm o a pesar de que la interrupcin externa INTO es menos prioritaria que la provocada por el tem porizador se visualiza ms tiempo. Esto se debe a que la ejecucin de la interrupcin del tem porizador se lleva a cabo durante un perodo de tiempo tan corto que no da tiempo a que se vea con claridad. A pesar de ello, a una frecuencia de 10 Hz todava puede apreciarse que la pantalla muestra el mensaje TEM P32 y que no se mezcla con el mensaje 1NT0. En la Figura L8.3 se muestra cmo en el circuito del generador lgico se enciende un led segn la frecuencia a la que est funcionando el mismo.

LABORATORIO 8: MANEJANDO A FONDO LAS INTERRUPCIONES

391

Figura L8.4.

Mensaje correspondiente a la interrupcin provocada por el temporizador de 32 bits.

Para com probar que la prioridad ms alta se corresponde con la interrupcin de la UART, aunque el generador lgico trabaje a una frecuencia de 10 Hz, si se arranca el program a HyperTerminal de Windows y se deja pulsada una tecla constantem ente, el mensaje ms m ostrado es el de dicha tecla y no el de las interrupciones liNT o TEMP32.

LABORATORIO

JH U

Pilotando un Frmula 1

L9.1. OBJETIVOS

En las competiciones de Frmula l los blidos que compiten deben optimizar su velocidad y su pre cisin para alcanzar el xito, que en muchas ocasiones depende de una milsima de segundo. Para gobernar estos vehculos tan sofisticados se necesita un procesador que rena las caractersticas apropiadas, como es el caso de los dsPIC de Microchip. Entre las caractersticas ms relevantes que poseen los dsPIC para soportar la tarea de gobernar un blido de Frmula 1 se citan las siguientes:

1.a Amplio abanico de canales de comunicacin. Destacan el mdulo UART, el bus fC , el mdulo SPI, el bus CAN y el mdulo DCl. En esta simulacin se utilizan 2 mdulos UART del dsPIC30F4013 pa ra visualizar informacin en una pantalla LCD y recibir rdenes de equipo del Ingeniero Jefe. 2.a El mdulo de comparacin de salida PWM se emplea para controlar con rigor la velocidad del mo tor. Dicho motor est simulado en esta experiencia con uno elctrico de corriente continua. 3 :3 Interrupcin externa de atencin inmediata para implementar un pulsador de seguridad que de tiene al vehculo inmediatamente 4 a Un excelente conversorAD que transforma la seal analgica correspondiente a la temperatura del motor en un valor digital que se procesa y reduce la velocidad del motor cuando supera un umbral. La temperatura se simula mediante un potencimetro. 5.a Potentes instrucciones DSP que facilitan el clculo matemtico de todos los procesos.

Todos los recursos y perifricos que requiere este proyecto estn disponibles en el sistema de desarrollo PIC School, sobre el que se implementar el hardware y se grabar el program a de apli cacin sobre un dsPIC 30F40l3. nicam cnte habr que conectar un motor de corriente continua externo a las salidas del driver de 4 canales que dispone la PIC School. Con esta experiencia se pretenden cubrir los siguientes objetivos:
393

394

dsPIC. DISEO PRCTICO DE APLICACIONES

Integrar en un proyecto el control mediante un dsPIC de diversos perifricos y dispositivos. Utilizar varios mdulos de comunicacin simultneamente. Manejar seales externas con tas que realizar clculos rpidos y precisos aprovechando la po tencia de las instrucciones DSP. Afianzarse en la programacin con el lenguaje C y el empleo de subrutinas para gobernar dispo sitivos varios.

L9.2. DESCRIPCIN DEL LABORATORIO

Este laboratorio utiliza varios recursos de la placa PIC School para simular el funcionamiento de un blido de Frm ula 1. Por un lado, los interruptores EO y El de la seccin de Entradas Digitales actuarn como acele rador del vehculo, proporcionando 4 velocidades distintas. Tambin el pulsador E l servir como botn de parada de emergencia, que har que el vehculo se detenga inmediatamente. En la seccin de Entradas Analgicas se utilizar el potencimetro Pl para simular un sensor de temperatura colocado junto al motor del vehculo. Deber medirse con precisin esta temperatura ya que cuando se observe que el motor se calienta demasiado, entonces se limitar el nmero de re voluciones por minuto. Por otro lado, se utilizar el driver de 4 canales para conectar un motor de corriente continua y as observar las variaciones de velocidad del vehculo. Tambin se utilizar el intefaz RS-232 para recibir y enviar datos y rdenes de equipo al Inge niero Jefe. Por ltimo, se har uso de la pantalla LCD para informar al piloto de la velocidad del vehculo, temperatura del m otor y rdenes del equipo. El organigrama de la Figura L 9 .1 resume el funcionamiento de este proyecto. La velocidad del motor se configura a travs del mdulo comparador de salida OC1 que debe ser previamente inicializado. Tambin se inicializar la puerta F del controlador para que a travs de las patitas RFO y RF1, el conductor del vehculo d ms o menos velocidad al motor conectado a las sa lidas digitales. El conversor analgico digital del dsPIC se conectar al potencimetro P 1 de la placa PIC School, que simule el valor de la temperatura del motor. Si dicha temperatura supera cierto umbral, la veloci dad del motor ser decrcmentada. Por otro lado, a travs de uno de los mdulos UART del dsPIC, los ingenieros se podrn conec tar va serie con el vehculo y enviar 3 rdenes distintas al vehculo. La instruccin L solicitar a la electrnica del vehculo a que enve el dato de la temperatura a los ingenieros para que puedan es tudiar su evolucin. El comando B har que el motor baje sus revoluciones. Y por ltimo, el comando S eliminar cualquier restriccin anterior iniciada con el comando B. El vehculo dispondr de un botn de emergencia que har que se detenga el motor definitiva mente. Para su implementacin se utilizar una interrupcin externa (INTO) que se conectar a la en trada digital E7 de la placa PIC School. Durante el funcionamiento del vehculo y gracias a otro mdulo UART el piloto del vehculo comprobar en la pantalla LCD la velocidad del motor y el valor de la temperatura.

LABORATORIO 9: PILOTANDO UN FRMULA 1

395

Figura L9.1. Diagrama de flujo del Laboratorio 9.

L9.3. ESQUEMA ELECTR NICO

El esquema electrnico del Laboratorio 9 se muestra en la Figura L9.2, en el que se conectan al dsPIC: 1) El mdulo serie a LCD SYM20-AA para mostrar los mensajes al conductor en la pantalla LCD. 2) La patita R A 11 /INTO a la entrada E7 para generar la interrupcin externa y detener el ve hculo. 3) ANO se conectar al potencimetro P 1 para simular la entrada analgica de la temperatura del motor. 4) U2TX a la patita TxD del interfaz serie para enviar informacin al Ingeniero del equipo. 5) U1RX a la patita RxD del mismo interfaz para recibir rdenes del equipo.

L9A

C O N E X I N DE LOS PERIFRICOS

Adems de la conexin tpica del controlador serie a LCD, ya analizado en laboratorios anteriores, la conexin del resto de los perifricos queda resumida en la Tabla L 9 .1.

396

dsPIC. DISEO PRCTICO DE APLICACIONES

Figura L9.2 . Esquema electrnico d el proyecto de co ntro l de un b lido de Frmula / con un dsPIC30F4013 y la PIC School.

Ratita del dsP IC 30F 4013


RF2/U1RX RF3/U1TX RAI 1/INTO RF5/U2TX ANO/RBO RDO/OCI M otor RFO RFl

E lem ento d e la PIC SC H O O L


RxD del Interfaz RS-232 Ratita 7 del controlador LCD serie E7 de Entradas digitales TxD del Interfaz RS-232 Potencimetro P1 (conectar adems G N D y +5v en los extremos de dicho potencimetro) E3 del Driver de 4 Canales. Conectar E4 a G ND Conectar m otor a S4 y S3 del Driver de 4 canales EO de Entradas digitales El de Entradas digitales

Tabla L9.1.

Tabla que presenta la conexin de las patitas del dsPIC30F4013 con los perifricos que controlan el blido de Frmula 1.

L9.5. C O NSTRU CC I N DEL PROGRAMA

El programa se encuentra dividido en varias partes principales. En la primera se definen las varia bles globales a utilizar: Limitacin que guardar la limitacin de velocidad impuesta por los jefes de equipo, Temperatura para almacenar la temperatura del motor del vehculo y Parar, variable de con trol que har que el coche se detenga cuando se d la interrupcin externa INT. Debido a la longi tud del programa, a continuacin se expone la solucin en lenguaje C que es menos extensa que la solucin en ensamblador y ms fcil de comprender. No obstante, y para los lectores interesados, en el CD que acompaa al libro, se incluye el fichero del programa en lenguaje Ensamblador con co mentarios aclarativos.

LABORATORIO 9: PILOTANDO UN FRMULA 1

397

Figura L9.3. Montaje del proyecto de control de un blido do Frmula 1 sobre la placa PIC School.

#includc p30f4013.tr //Variable que contiene la limitacin de velocidad impuesta por el equipo int limitacin; //Variable donde se almacena la temperatura del motor int Temperatura; //Variable de control para detener el vehculo con parada de emergencia int Parar;

En la segunda parte se definen variables auxiliares para el envo de textos, nmeros binarios y caracteres a travs de los mdulos UART1 y UART2 para mostrar mensajes en la pantalla LCD y en la consola de los Ingenieros del Equipo.

//RUTINAS AUXILIARES f-------------------------- .


_

void txt2LCD(char caracter): //Enva por U ART2 un dato en binario void binario2UART2(int long dato) 1 int long i; int long aux = 0x8000; IECObitsADIE = 0; while(U 2STAb ts.TRM T == 0); U2TXREG =12;

//M anda al LCD un carcter

//Deshabilita ADC //Lim pia pantalla

398

dsPIC. DISEO PRCTICO DE APLICACIONES

aux)

//Para los 16 bits //enva un 1 o un 0 //por UART2

dato = dato - aux; while(U2STAbits.TRMT == 0); U2TXREG else


i

while(U2STAbits.TRMT == 0); U2TXREG -O ';


11

aux = aux

1;

I
//for (j=0;i<=OxFFFF;i++); IECObits. ADTE = 1;
) //Enva un dato al LCD void txt2LCD(char caracter)

//Rotacin para pasar al //siguiente bit //Habilita ADC

while(U 1STAbits.TRMT == 0); U1TXREG =caracter; 1 //Enva un texto al LCD void msg2LCD(char *cadena,int longitud)

in ti; for (i=0;i<longitud;i++) txt2LCD(cadena[i]);


}

Estas funciones definidas son similares a las ya analizadas en laboratorios anteriores. En la tercera parte del cdigo del laboratorio se encuentran las rutinas de atencin a las inte rrupciones. La interrupcin _ADCInterrupt se encarga de guardar en la variable Temperatura el resultado de la operacin de conversin analgico digital del sensor colocado en ANO. La interrupcin J U / RXInterrupt se encarga de recibir va RS-232 las rdenes de equipo y ac tuar en consecuencia. Al recibir el comando L enviar a la consola de los ingenieros va UART2 la lectura del sensor de temperatura. Con el com ando B limitar la velocidad del motor bajando en 0x10 su velocidad actual. El comando S anular cualquier limitacin anterior establecida con el comando B. Por ltimo, la interrupcin JNTO Inierrupt har que la variable Parar tome el valor 0 y as se de tenga totalmente el vehculo emulando una parada de emergencia.

LABORATORIO 9: PILOTANDO UN FRMULA 1

399

// RUTINAS DE ATENCIN A INTERRUPCIONES

// Atencin a la interrupcin del mdulo ADC void_attribute ((__interrupt__)) _ADCInterrupt(void)


!

IFSObits.ADTF = 0; Temperatura = ADCBUFO;


}

//Borra tlag de interrupcin //Guarda la temperatura

//Atencin a recepcin de orden de equipo void_attribute _((__interrupt__)) _U I RXInterrupt(void)


i

char comando; IFSObits.U 1RXIF = 0; comando = U1RXREG; if (comando =='L')


i

//Enviar Temperatura por UART2 binario2U ART2 (Temperatura);


!

if (comando == B) limitacin = 0x10; if (comando S') limitacin = 0;


1

//Reducir velocidad //Quitar restriccin

//Rutina de interrupcin INTO. Detiene el vehculo void_attribute__((__interrupt__)) _INT01nterrupt(void)


{

IFSObits.INTOIF = 0; Parar = 0;
}

//La variable de control parar = 0

La cuarta parte contiene las rutinas de inicializacin de los perifricos que ya se han estudiado en laboratorios anteriores.

//R U T IN A S DH IN IC IA L IZ A C I N DE PER IFR IC O S void Jniciali/aINTOO


{

IHCObits.INTOlH = 1;
)

void Inicial i zaADC-0


{

A D PC FG = 0xF F F F ; A DCON1 = 0;

400

dsPIC. DISEO PRCTICO DE APLICACIONES

ADCSSL = 1; ADCHS = 0; ADPCFG = 0; ADCON3 = 0x0016; ADCON2 = 0; ADCON1 = 0x80E4; IPCO = 0x4444; IPC1= 0x4444; IPC2 = 0x4444; IECObits. ADIE = 1;// = 0x0800;
}

void InicializaOC I (void)


{

OC1RS OC1R OC1CON T2CON


}

=0; =0; =0x0006; = 0x8030;

void lnicializaUARTl() { //Transmisin y recepcin de datos a 9600bps //con XT w/PLL 4X 4Mhz. U1BRG =0x0019; U1MODE =0x8000; UISTA =0x0510; UIMODE =0x8020; IECObits. U I.RXIE = 1;
}

void InicializaUART2()
(

U2BRG=0x0019; U2MODE=OxBOOO; U2STA =0x0510; U2MODE=0x8020;


}

Y en la quinta y ltima parte del programa se encuentra el bucle principal del programa que tras inicializar los perifricos, va calculando la velocidad actual en funcin de los pulsadores conecta dos a la puerta F, el valor del sensor de temperatura y las rdenes de equipo. As mismo, muestra la informacin referente a la velocidad y a la temperatura en la pantalla LCD al piloto del vehculo.

// PROGRAMA PRINCIPAL
//= = = = = = = = = = =

int main (void)


{

LABORATORIO 9: PILOTANDO UN FRMULA 1

401

// Iteiaiiza la puerta F RFO y RF1 como entradas TRLSF=3; //Iniciaiiza el mdulo de comunicacin UART1 InicializaUARTl(); //Iniciaiiza el mdulo de comunicacin UART2 IniciaizaUART20; //Iniciaiiza el mdulo de comparacin de salida OC1 para control motor TnieializaOClO; //Iniciaiiza el conversor analgico para leer la temperatura Inicial izaADCQ: //Iniciaiiza la interrupcin INTO para actuar como parada de emergencia fnicializalNTOO; //Iniciaiiza la temperatura y la limitacin del motor a 0 Temperatura = 0; limitacin = 0; //Iniciaiiza PR2 con el valor mximo a introducir en OC1RS PR2=0x0100: //Iniciaiiza Parar a 1 para que el programa entre en bucle infinito //hasta que se ejecute la interrupcin INTO Parar = 1; // Bucle principal del programa \vhile(Parar == 1)
{

int Velocidad; int Proteccin; Proteccin = 0;


a s m .(,' c l r w ^ ,: ,).

Velocidad = 0; //te e los interruptores de la puerta F para elegir la velocidad if (PORTFbits.RFO == 1) Velocidad = Velocidad + l; if (PORTFbits.RFl == 1) Velocidad = Velocidad + 2; txt2LCD()f //Muestra temperatura en LCD y protege el motor //si la temperatura es superior a 0x07FF if (Temperatura >= 0x07FF)

msg2LCD("T Alta ,7); Proteccin = 0x10; else : msg2 LC D("T. Baj a,7): //Calcula velocidad en funcin de la temperatura y de las rdenes de equipo switeli (^lociclad) : :: case 0: OC1RS = 0; break; case 1: OC1RS = (0x0080 - Proteccin - limitacin); break;

402

dsPIC. DISEO PRCTICO DE APLICACIONES

case 2: OC1RS = (OxOOCO - Proteccin - limitacin); '"Brale; case 3: OC1RS =' (0x0100 - Proteccin - limitacin); break;
)

//Muestra mensaje de velocidad en pantalla switch (C1RS)


I

case 0x0: msg2LCD("Vcl: 0 \7); break; case OxAO: msg2LCD("Vel: A0*\7); break; case 0xB0: msg2LCD("Vel: B0,7);
break;

caseOxCO: msg2LCD(M Vel: C0"/7); break; case 0x60: msg2LCD("VeI: 60";7); break; case 0x70: msg2LCD("Vcl: 70,,t7); break; case 0x80: msg2LCD(Vel: 80",7); break; case OxEO: msg2LCD("Vel: E0,f,7); break; case OxFO: msg2LCD("Vel: F0",7); break: case 0x100: msg2LCD("Vcl:100",7); break;
}

//Retardo para una correcta visuali/.acin en la pantalla LCD int i; for(i=0;i<=0x 1FFF:i++);
}

//Parada de emergencia OCIRS = 0; txt2LCD( 12); msg2LCD(M STOP",4); //Bucle infinito while 1) asm(clrwdt");
}

LABORATORIO 9: PILOTANDO UN FRMULA 1

403

L9.6. GRABACIN Y EJECUCIN DEL PROGRAMA

Una vez com pilado el proyecto, grabado el mismo en el dsPIC a travs del program a WinPic800, y una vez realizadas la conexiones de la PTC School descritas en el Apartado L9.4, se debe co nectar el cable serie del ordenador al interfaz RS-232 de la placa PC School para poder enviar y recibir las instrucciones de equipo a travs del program a HyperTerminal de W indows u otro si milar. Al pasar el interruptor del circuito de grabacin de la placa PIC School a modo RUN comenza r la ejecucin del laboratorio. En funcin de los valores introducidos en los interruptores EO y E l la velocidad del motor va riar desde 0x0000 hasta 0x0100. Dicho valor se indicar en la pantalla LCD.

Figura L9.4.

La pantalla LCD muestra la velocidad del vehculo.

En esta misma pantalla se puede leer si la temperatura es Alta o Baja. Con el potencimetro P1 podr variarse dicha temperatura y as podr observarse cmo al variar la temperatura a Alta el mo tor baja su velocidad para protegerse.

f
1 ;>;, %

V '

y - :

.. . .

g F rx

_ .

Figura L9.5. A l pasar la temperatura a Alta la velocidad del motor baja automticamente.

Para conocer el valor exacto de la temperatura podr utilizarse el programa HyperTerminal de Windows que conectado a travs del puerto serie a una velocidad de 9600 baudios podr comuni carse con el dsPIC. A s enviando el comando L el vehculo responder con el valor exacto en bina rio de la temperatura. (Figura L9.6) A travs de este mismo program a podrn enviarse 2 com andos ms. El com ando B con el que se lim itar la velocidad del m otor y el com ando S para elim inar dicha restriccin. (Figura L9.7) Finalmente, accionando el pulsador E7 se activar la interrupcin externa INTO que har que el vehculo, y por consiguiente el motor, se detenga y visualice en la pantalla LCD el mensaje STOP (Figura L9.8).

404

dsPIC. DISEO PRCTICO DE APLICACIONES

- com lv - HyperTerminal Archivo BUcln Ver Uam er Ir refer'- Ayycb De# ts S -Oc9 E S * 0000101001010080

_ I ld f x !

|0:00:12ureitafa

A H 3W

9600frN ;l

- ;r M A Y .

>

Figura L9.7.

La velocidad del m otor baja ms debido a la instruccin del equipo.

f:

Figura L9.8. Mensaje de detencin.

Las limitaciones de velocidad se mantendrn a pesar de que se vare el valor de los interrupto res de control de velocidad.

ndice

#SLIT4, 143 ACCA, 56,140 ACCB, 56,140 ACCSAT, 62,71 ACCU, 63 ACCxH, 63, 140 ACCxL, 64, 140 ACCxU, 140 Acumuladores, 43 ADD, 141,142, 123 ADDC, 123 ADDRERR, 102 ADSL, 182 AGUA, 42 AGUX, 42, 75 A GUY, 75 Airbag, 12 AIVT, 93 Algoritmos, 182, 352 ALTTVT, 93, 96 Amplificadores, 310 AN0-AN15, 157 Anidables, 103 Aritmtica con saturacin, 62 modular, 62 ASCII, 351 ASM 30 Toolsuite, 202, 327 Atascos, 117 ATM Ine, 36 Autoevaluacin, 179,196, 212, 2 2 4 ,2 3 2 ,2 4 1 ,2 7 4 , 258 Autorcpcticin, 170 Banco de Registros W, 49 Banco de registros, 43 Barrido de teclado, 308 BCLR, 127 BEO, 36

Bit reverse, 79 Bootloader, 375 BOR, 47 B R A C , 131,225 BRA GE, 131 BRA LT, 131 B R A N , 131 BRA NZ, 131 BRA OA, 131 B R A SA , 131 BRA, 131 Brinco, 129 BSET, 127 BSW.C, 127 BSW.Z, 127 BTG, 128 BTSC, 129 BTSS, 129 B IS T , 128 BTSTS, 128 Buffer circulares, 76 B usC A N , 164 Byte fantasma, 85 C, 51, 70 CAD, 4, 5 CALL, 113, 131 Camino de Dalos, 52, 67 CAN, 312 Cancelacin del ruido, 23 Captura y Mantenimiento, 6 CDMA, 167 Cima de la Pila, 69 CLR, 122, 141, 144 CLRWDT, 135 CN, 155 CNEN1, 155 CNEN2, 155 CNPU1, 155 CNPU2, 155

CODEC, 20, 26, 164 Codificador de Cuadratura, 41 Cdigo OP, 110, 111 COM, 122 Compatibilidad, 25 Compilador de C MPLAB C30, 178 Conflictos de prioridad, 100 Contador de Programas, 84 Control de motores, 12, 23, 28, 359 Control de sensores, 22 Controlador de Programa, 41 Controlador Digital de Seales, 9 Controlador DMA, 27, 167 Conversor AD de 10 bits, 157 Conversor AD, 4 1 ,4 6 , 157 Conversor analgico digital, 261 CORCON, 54, 70 COVTE, 58 CP F, 129 CP0, 130 C PB F, 130 CPSEQ, 130, 226 CPSGT, 130 CPSLT, 130 CPSNE, 130 Craftsmans Electric, 37 DA, 70 Datasheets, 276 DAW.B, 123 DC, 5 1 ,7 0 DEC, 123 Decodifcador de Instrucciones, 52 Dependencias, 118 Desbordamiento, 61 DEVID, 83 Diagrama de conexiones, 23, 26

405

406

dsPIC. DISEO PRCTICO DE APLICACIONES EXCH, 120 Extensin de Ceros, 52 de Signo, 52 Fallo delCD M A , 101 del Oscilador, 101 FBCL, 128 FF1L, 128 F F 1 R ,128 FFT, 184 FFT, 79 Filtrado, 367 Filtro, 186 de Caucr, 187 FIR, 76, 178, 226, 367 FLASH, 233, 327 Formato, 110 Forward Concepts, 10 FWDTEN, 167 Generador Lgico, 306 General Motors, 12 Gestin del sistema, 47 GPS, 13 Grabacin, 315 Harvard, 7, 8,41 Herramientas software, 177 http://perso.wanadoo.es/siscobf/ winpic800.htm, 318 Hyperlerminal, 357 iButton, 301 IC InSights, 10 ICPS, 91 TDLE, 4 7 ,167 IECx. 102 IF, 54, 71 IFSx, 102 I1R, 178, 186 INC, 123 Ingeniera de Microsistemas Programados, 299 Inicializador Visual, 243 Instalaciones, 276 Instrucciones de Bit, 127 de Comparacin y Brinco, 129 de Control, 135

Direccionamiento directo, 114 directo por registros, 115 indirecto con Registros de Desplazamiento, 115 indirecto por registros, 115 inherente, 113 inmediato. 117 modular, 71, 117 por inversin de acarreo, 117 por registro indexado, 113 DISI, 103, 136 D ISICN T.71, 103 Disparo Unico, 170 DIV, 123 DL<2:>, 71 DOZE, 27, 47, 167 DPSRAM, 170 Drivcrs, 310 DRM, 13 DSC, 9, 17 Dskcam, 14 DSP, 4, 7 dsPIC Fd Lite, 186 dsPic30F Math Library, 331 dsPIC30F, 10, 18 dsPIC30F4013, 175 dsPIC30F50I3, 26 dsPTC30F6010, 39 dsPIC30F6014, 26 dsPlC33F, 10, 28, 168 dsPICDEM MCI, 360 dsPIC works, 179,190 ED, 141, 145 EDAC, 141, 145 EDT, 71 EE Times, 10 EEMBC Automotive, 19 EEPROM, 88, 237 Encapsulados, 23 Encriptacin, 352 Endurance. 39 Ensamblador, 201 Error Aritmtico, 62,101 de Direccionamiento, 102 d eP ila, 101 Escenario, 249 Espacio X, 73, 75 Espacio Y, 73, 75 Excepciones, 93

de Movimiento, 119 de Pila y Registros Sombras, 133 de Rotacin y Desplazamiento, 125 de Tabla, 71, 85 DSP, 140, 324 lgicas, 122 Matemticas, 123 MCU, 119 INTO, 385 INTCON, 57 INTCON1, 104, 105 INTCON2, 104, 105 Intel, 7 Interrupcin, 385 externa NT0, 255 pendiente, 102 Interrupciones, 93, 255 exlemas, 99 Intrucciones DSP, 117 IPL, 100 IPL<2:0>, 70, 99 IPL3, 71, 93 IRQ, 102 TVT, 93 Jumper, 303 L293D, 361 LAC, 140, 141, 147 Latencia, 104 LATx, 155 LCD, 313,368 LCDSYM20AA, 317 Led, 309 Lenguaje C, 209 Librera Matemtica, 331 Llamadas a subrutina, 113 LNK, 134 MAC, 7 ,4 2 ,6 7 , 141, 149, 226, 370 Marco de la Pila, 67 MAX-232, 311 MCLR#. 47 MCU, 8 MDI, 197 Memoria Cercana, 73 de Configuracin, 83 de programa, 83

NDICE MPY, 141, 145 MPY.N, 141, 145 MSC, 141, 146 Muestreo y retencin, 261 MUL, 123 Multiplicador, 53 N, 5 1 ,7 0 NEC, 7 NEO, 122, 141, 145 Nivel de prioridad, 99 de la CPU, 99 Nomenclatura, 25 NOP, 110, 136 NSTDIS, 104 NVM, 89 NVMADR, 90 NVMCOM, 89 NVMKEY, 91 Nyquist-Shannon, 6 OA, 57, 70 OAB, 57, 70 OB, 57. 70 OV, 5 1 ,7 0 OVBTE, 57 Parcial, 64 Patitas de E/S, 151 PC, 84, 113 PCT, 15 PDIP, 23 Perifricos, 259 Perro Guardin, 41, 47, 167 PIC School, 300 PIC, 9 PIC18FXXXX, 299 P1C24, 299 PC24FXXX, 9 PIC24H, 168 PTC24HXXX. 9 Ping-pong, 170 Poost-incrementos, 117 POP, 134 POP.S, 68, 103 POR, 47 PORTx, 155 Posl-decremcntos, 117 Post-escritura, 149 Prcbsqueda, 148 Presaturacin, 260 Pretensores, 23

407

de Usuario, 83 Mensajes, 182 Men Configure, 2 Debugger, 200 Project, 199 Tool, 200 View. 198 M icrochip, 303 Microchip Technology Inc., 9 Microcontroladores, 8 M inibootloader.exe, 375 MIPS, 7 MODCON, 71, 77 Modificador, 80 Modo dsPIC, 317 entero. 54 fraccional, 54 1CSP, 316 PC, 316 RUN, 316 Mdulo 12C, 163 CAN, 164 DCI, 164 de Captura de Entradas, 269 de Captura, 41, 158 de Comparacin, 41 de Comparacin /PW M , 159 de Comparacin de Salida, 271 de Redondeo, 58 de Saturacin, 58 PWM. 160 QEL 165 SPL 162 M ontaje superficial, 23 Motor, 362 DSP, 43. 52, 259 Motores de corriente continua, 23 de induccin de corriente alterna, 23 paso a paso, 23 MOVSAC, 141 MPLAB ASM30, 31 MPLAB C 3 0 ,31, 278 MPLAB ICD2, 216 MPLAB IDE, 31, 177, 197, 276 MPLAB Macros, 200 MPLAB SIM. 208, 216 MPLAB VDT, 31

Prioridad, 390 Procesador digital de seales, 4 PROC.OP, 89" Project Wizart. 291 Propsito general, 20, 28 PSV, 114 PSV, 71, 75, 87 PSVPAG, 7 1 Puertas de E/S, 44, 247 Pull-up, 155 Punto de ruptura, 217 PUSH, 110, 134 PUSH.D, 134 PUSH.S, 68, 103 PWM para el control de motores, 41 PWM, 46, 364 PWRSAV, 136 PWRSAV, 167 QEI, 46 QFN, 23 RA, 70 RAGUX, 75 RCALL, 113 Redondeo Convencional, 64 Convergente, 64 Registro de Desplazamiento, 43, 58 de Estado. 51, 69 sombra, 67 Rendimiento, 7 REPEAT, 59 Reservado, 89 RESET, 110, 136 Resct, 47, 95 RETFIE, 103, 132 RETLW, 132 RETURN. 132 RISC, 7 RLC, 125 RLNC, 125 R N D .58, 64, 71 RRC, 125 RRNC, 125LSR, 125 RTSP, 88 Ruido, 182 S&H, 6, 157 SA, 57, 70

408

dsPIC. DISEO PRCTICO DE APLICACIONES SWAP, 120 SYM 20-AA, 334 Tabla Alternativa de Vectores de Interrupcin, 93 Tabla de Vectores de Interrupcin, 83, 93 TBLPAG, 71, 76, 237 TBLRDH, 86, 234 TBLRDL, 8 6 ,234 TBLWTH, 86 TBLWTL, 86 Teclado, 307 Tcmporizadores, 156, 250 de 32 bits, 333 Teorema de Mucstrco, 6 Texas Instruments, 7 TIMER 1, 156 TIMER 2, 156 TQFP, 2 3 ,3 9 Transformacin Rpida de Fourier, 191 Transformada de Fourier, 4 de La place, 4 Discreta de Fourier, 4 Rpida de Fourier, 4 Z ,4 UART, 161,266 ULNK, 134 Unidad de Divisin, 58 US, 71 Valor entero, 61 fraccionario, 61

SAB, 70 SAC, 140, 141, 148 SAC.R, 64, 140, 141 SADW, 58 Sample-and-Hold, 6, 46 SATA, 62,71 SATB, 62, 71 SATDW, 62, 64, 71 Saturacin normaf, 62, 142 Saturacin, 260 SB, 5 7 ,7 0 SE, 52, 123 Segmentacin, 118 Semforo, 250, 333 Seales analgicas, 3 SETM, 122 SFR, 65 SFTAC, 141, 148 SIM30, 31 Smbolos, 120 Sistema de alimentacin, 2 3 ,2 8 Skip, 129 SL, 125 SLEEP, 47, 167, 265 SmarHome, 35 SOIC, 23 SPDIP, 23 SPLIM, 67 SR, 51 SRH, 51 SRL, 51 STKERR, 101 SUB, 141, 123, 143 SUBB, 123 Sumador/Restador, 4 3 ,5 6 Spcr Saturacin, 6 2 ,6 3 , 142

VDI, 243 Vector de Reset, 83 Visibilidad de Espacio de Programa, 75, 87 Visual Initializer, 200, 243, 255 Volvo, 35 www.miciocontroladores.com, 299 WO, 49 W 0 -W I5 ,67 W0-W3, 67 W12, 67 W13, 67 W14, 67 W15, 67, 68 W4-W7, 67 W8-W11, 67 WAGUX, 75 WDT, 167 W inPic800,279,318,3 71 WR, 89 WREG, 49 WREN, 89 WRERR, 89 XB, 80 XBREV, 71, 80 XMODEND, 71 XMODSRT, 71 XT w/PLL 4X , 381 YMODEND, 71 YMODSRT, 71 Z, 51, 70 ZE, 52, 123

PIC School
w vm m icrocontroladores.com

En el Prlogo los autores afirman que este es el libro que a ellos les hubiese gustado disponer cuando comenzaron a estudiar y manejar los dsPIC. Es claro, eficaz y prctico y pone en manos de los usuarios de los microcontroladores convencionales una extraordinaria herramienta para dominar un dispositivo de nivel superior, con el que es posible acometer aplicaciones ms avan zadas propias de los DSP y que tendrn un crecimiento especta cular en un futuro prximo. Los Controladores Digitales de Seales (DSC) de Microchip se comercializan en ms de medio centenar de modelos diferentes de las familias dsPIC30F y dsPIC33F y consisten en la combina cin de los microcontroladores de 16 bits con los recursos nece sarios para soportar las funciones clsicas de los DSP.
El L U

que acompaa al

La primera parte del libro tiene un marcado carcter terico y en sus 12 captulos se describe la arquitectura, el funcionamiento, los perifricos y el repertorio de instrucciones de los dsPIC. La segunda parte se destina a manejar diversas herramientas soft ware de Microchip para la confeccin, inicializacin, compilacin y simulacin de programas. Finalmente, la tercera parte, la ms importante ajuicio de los autores, desarrolla ntegramente el hardware y el software de 9 proyectos especficos para dsPIC basndose en el extraordinario sistema de desarrollo PIC School.

libro contiene todos los programas necesarios para el desarrollo de todas las aplicaciones, as como los archivos con los cdigos fuente en ensamblador y C de los ejercicios y proyectos propuestos.

The M cG raw H ill Companies