dspic diseño practico de aplicaciones

428
Incluye CD-ROM Diseño práctico de aplicaciones José María Angulo Usategui Aritza Etxebarría Ruiz Ignacio Angulo Martínez Iván Trueba Parra

Upload: gustavgut

Post on 04-Jan-2016

1.382 views

Category:

Documents


26 download

TRANSCRIPT

Page 1: DsPIC Diseño practico de aplicaciones

I n c l u y e C D-R OM

D i s e ñ o p r á c t i c o de a p l i c a c i o n e s

José María Angulo Usategui Ari tza Etxebarría Ruiz Ignacio Angulo Martínez Iván Trueba Parra

Page 2: DsPIC Diseño practico de aplicaciones

dsPICDiseño Práctico de Aplicaciones

Page 3: DsPIC Diseño practico de aplicaciones
Page 4: DsPIC Diseño practico de aplicaciones

L T ) U i

s c • 5

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

■ C ?¿- ;••' V3 :,V:-' &W9I 0; , l"«*&&££* «•.» •' - ■ -

P i ó , 'u t o•■ iu i» i« ti'n *^ ■.- ■- !t;« r.r¡m ~ .saaw u w ^ ^ a > '.< w t» m :

dsPIC Diseño Práctico de Aplicaciones

José M.a Angulo UsatcguiDr. Ingeniero Industrial

Catedrático de Arquitectura de Computadores Universidad de Deusto

Aritza Etxebarría RuizLicenciado en Inform ática

Jefe del Departamento de Informática Colegio Vizcaya

Ignacio Angulo MartínezLicenciado en Informática

Profesor del Departamento de Arquitectura de Computadores Universidad de Deusto

Iván Trueba ParraIngeniero en Automática y Electrónica Industrial

e Ingeniero en O rganización Industrial Profesor del Departamento de Arquitectura de Computadores

Universidad de Deusto

MADRID * BOGOTÁ • BUENOS AIRES • CARACAS • GUATEMALA • LISBOA * MÉXICO NUEVA YORK * PANAMÁ • SAN JUAN • SANTIAGO • SAO PAULO

AUCKLAND * HAMBURGO « LONDRES • MILÁN • MONTREAL • NUEVA DELHI • PARÍS SAN FRANCISCO • SIDNEY • SINGAPUR • ST. LOUIS • TOKIO • TORONTO

Page 5: DsPIC Diseño practico de aplicaciones
Page 6: DsPIC Diseño practico de aplicaciones

Contenido

Prólogo xv

Primera parte: ARQUITECTURA, FUNCIONAMIENTO Y REPERTORIO DE INSTRUCCIONES

Capítulo 1. EL MUNDO DE LOS D SP ..................................................................................... 3

1.1. El procesamiento digital de señales................................................................................ 31.1.1. Muestreo de las señales analógicas................................................................ 5

1.2. . DSP. Definición y características principales.............................................................. 71.3. Microcontroladores y D SP................................................................................................ 81.4. DSP y DSC........................................................................................................................... 91.5. Mercado y aplicaciones..................................................................................................... 10

Capítulo 2. CONTROLADORES DIGITALES DE SEÑALES (DSC)............................ 17

2.1. El concepto D SC ................................................................................................................ 172.2. Características generales de los dsPIC30F..................................................................... 182.3. Los modelos de la familia dsPIC30F............................................................................. 20

2.3.1. Dispositivos dsPIC30F de propósito general................................................. 202.3.2. Dispositivos dsPIC30F para el control de sensores....................................... 222.3.3. Dispositivos dsPIC30F para el control de motores y sistemas

de alimentación................................................................................................... 232.4. Encapsulados y diagramas de conexiones.................................................................... 232.5. La familia dsPIC33F............................................................................................... .......... 27

2.5.1. Modelos de la familia dsP IC 33F ..................................................................... 282.5.2. Dispositivos dsPIC33F de propósito general................................................. 282.5.3. Dispositivos dsPIC33F de control de motores y sistemas

de alimentación................................................................................................... 282.5.4. Diferencias entre dsPIC30F y dsPIC33F....................................................... 31

v

Page 7: DsPIC Diseño practico de aplicaciones

vi CONTENIDO

2.6. Herramientas de desarrollo software............................................................................. 312.7. Herramientas de desarrollo hardware............................................................................ 322.8. Aplicaciones recomendadas............................................................................................ 34

Capítulo 3. ARQUITECTURA DE LA C P U ........................................................................... 39

3 .1. Descripción del diagrama por bloques.......................................................................... 393.2. Las m em orias.................................................................................................................... 413.3. El Camino de D atos......................................................................................................... 433.4. Pueitas de E/S multifunción............................................................................................ 443.5. Periféricos integrados....................................................................................................... 453.6. Gestión del sistema y de la energía............................................................................... 46

C apítulo 4. EL CA M IN O DE D A T O S ................................................................................... 49

4.1. Introducción................................................. ..................................................................... 494.2. El banco de registros W .................................................................................................. 494.3. La ALU de 16 bits............................................................................................................ 504.4. El Motor DSP.................................................................................................................... 52

4.4.1. Multiplicador....................................................................................................... 534.4.1.1. Representación en modo entero y en modo fraccional.............. 54

4.4.2. Acumuladores A y B .......................................................................................... 564.4.3. Sumador/Restador de 40 bits............................................................................. 564.4.4. Registro de Desplazamiento.............................................................................. 584.4.5. Unidad de División............................................................................................. 58

Anexo. M A N IPU LA C IÓ N DE DATOS EN E L M O T O R D S P ..................................... 60

A. 1. Representación de datos.................................................................................... *............. 60A.2. Saturación de los acumuladores..................................................................................... 60

A.2.1. Saturación normal............................................................................................... 61A.2.2. Súper saturación.................................................................................................. 62A.2.3. Saturación de escritura............... ...................................................................... 63

A.3. Redondeo....................................................*...................................................................... 63

Capítulo 5. M O D ELO DEL PROCESADO R PARA EL PR O G R A M A D O R ............. 65

5.1. Los registros del program ador....................................................................................... 655.2. El banco de registros de trabajo..................................................................................... 675.3. Registros sombra............................................................................................................... 675.4. Punteros de la cima de la pila y del marco de la p ila ................................................. 685.5. El registro de estado (S R )............................................................................................... 695.6. El registro de control del núcleo (CORCON)............................................................. 705.6. Otros registros de control................................................................................................. 71

Page 8: DsPIC Diseño practico de aplicaciones

CONTENIDO VÜ

C apítulo 6. LA M EM O R IA DE DATOS................................................................................. 73

6.1. Los espacios de la memoria de datos.............................................................................. 736.2. Direccionamiento de la memoria de datos..................................................................... 756.3. Mapeado del espacio de datos en la memoria de programa....................................... 756.4. Direccionamiento modular o circular............................................................................... 766.5. Direccionamiento por inversión de acarreo o “bit reverse” ........................................ 79

Capítulo 7. LA M EM O R IA DE PR O G R A M A ................. :................................................... 83

7.1. Estructura y distribución................................................................................................... 837.2. Direccionamiento mediante el PC................................................................................... 847.3. Transferencia de datos desde la memoria de program a.............................................. 847.4. Las instrucciones de T abla............................................................................................... 857.5. Visibilidad del Espacio de Programa (PSV )................................................................. 877.6. Grabación de las memorias FLASH y EEPRO M ........................................................ 87

7.6.1. Autograbación en tiempo de ejecución (RTSP).............................................. 887.7. Grabación serie en circuito (ICPSIM) .............................................................................. 91

Capítulo 8. IN TERRU PCIO N ES Y E X C E PC IO N E S......................................................... 93

8.1. Introducción........................................................................................................................ 938.2. Tabla de vectores IVT y A1VT de los dsPIC30F......................................................... 938.3. Tabla de vectores IVT y AIVT de los dsPIC33F......................................................... 968.4. Nivel de prioridad de la C PU ........................................................................................... 998.5. Nivel de prioridad de las interrupciones........................................................................ 1008.6. Nivel de prioridad para las excepciones......................................................................... 100

8.6.1. Excepción por Error Aritmético...................................................................... 1018.6.2. Excepción por Error de P ila .............................................................................. 1018.6.3. Excepciones por Error de Direccionamiento y Fallo del Oscilador......... 101

8.7. Procesamiento de las interrupciones.............................................................................. 1028.8. Registros de control y estado para las interrupciones................................................. 104

C apítulo 9. CARA CTERÍSTICAS DE LAS IN STRUCCIO N ES Y MODOSDE D IR EC C IO N A M IEN TO ............................................................................... 109

9.1. Características generales de las instrucciones.............................................................. 1099.2. Formato de las instrucciones................................................................................... *...... 1109.3. Tiempo de ejecución de las instrucciones..................................................................... 1129.4. Modos de direccionamiento de la memoria de programa.......................................... 113

9.4.1. PSV: Visibilidad del Espacio de Programa (Program Space Visibility).... 1149.5. Modos de direccionamiento de los datos...................................................................... 114

9.5.1. Direccionamiento directo.................................................................................. 1149.5.2. Direccionamiento directo por registro............................................................. 115

Page 9: DsPIC Diseño practico de aplicaciones

v iii CONTENIDO

9.5.3. Direccionamiento indirecto por registro....................................................... 1159.5.3.1. Representación en modo entero y en modo fraccional............... 117

9.5.4. Direccionamiento inm ediato........................................................................... 1179.6. Detección de dependencias............................................................................................ 118

Capítulo 10. E L REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU... 119

10.1. Clasificación de las instrucciones................................................................................. 11910.2. Instrucciones de movimiento.............................. .......................................................... 11910.3. Instrucciones lógicas....................................................................................................... 12210.4. Instrucciones matemáticas............................................................................................. 12310.5. Instrucciones de rotación y desplazamiento................................................................ 12510.6. Instrucciones de b i t .......................................................................................................... 12710.7. Instrucciones de comparación y brinco......................................................... .............. 12910.8. Instrucciones de control del flujo del programa......................................................... 13110.9. Instrucciones de pila y registros som bra..................................................................... 13310.10. Instrucciones de control................................................................................................... 135

Capítulo 11. LAS INSTRUCCIONES D SP........................................................................... 139

11.1. Características específicas.............................................................................................. 13911.2. Operaciones básicas con los acumuladores................................................................. 140

11.2.1. Suma de acumuladores (ADD)........................................................................ 14211.2.2. Resta de acumuladores (SUB)......................................................................... 14311.2.3. Borrado de los acumuladores (CLR)............................................................. 14411.2.4. Negación del acumulador (NEG)................................................................... 14511.2.5. Multiplicación de registros y carga al acumulador (MPY y MPY.N)).... 14511.2.6. La distancia euclídea (ED y ED A C )............................................................. 14511.2.7. Multiplicación de registros y resta al acumulador (M SC )........................ 146

11.3. Instrucciones de carga y almacenamiento de los acumuladores............................... 14711.3.1. Carga del acumulador (LA C)......................................................................... 14711.3.2. Almacenamiento del acumulador (SA C )..................................... ............... 14811.3.3. Prebúsqueda de operandos y almacenamiento

del acumulador (M OVSAC)............................................................................ 14811.4. Desplazamiento de los acumuladores.......................................................................... 14811.5. Instrucciones tipo “MAC” ............................................................................................. 149

C apítulo 12. PER IFÉ R IC O S Y RECURSOS IN TEG RA DO S ...................................... 151

12.1. El mundo que rodea a los D SC ..................................................................................... 15112.2. Patitas de E /S .................................................................................................................... 15112.3. Temporizadores................................................................................................................ 15612.4. Conversores A D ...................................... .......................................................................... 15712.5. Módulo de captura............................................................................................................ 158

Page 10: DsPIC Diseño practico de aplicaciones

CONTENIDO ÍX

12.6. Módulo de comparación/PWM....................................................................................... 15912.7. Módulo PWM para el control de motores..................................................................... 16012.8. Módulo U A R T ................................................................................................................... 16112.9. Módulo S P I ........................................................................................................................ 16212.10. Módulo 12C .......................................................................................................................... 16312.11. Módulo D C I....................................................................................................................... 16412.12. Módulo CAN...................................................................................................................... 16412.13. Módulo Q E I....................................................................................................................... 16512.14. El Perro Guardián (WDT) y los modos de bajo consum o......................................... 16712.15.El controlador D M A .................................................... .'................................................... 167

S eg 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

Aplicación 0. LAS HERRAM IENTAS DE D E S A R R O L L O ............................................. 175

A0.1. Introducción....................................................................................................................... 175A0.2. Descripción del dsPIC30F4013 ...................................................................................... 175

A0.2.1. Diagrama de conexionado................................................................................ 176AO.2.2. Características principales................................................................................ 176

A0.3. Herramientas de software utilizadas.............................................................................. 177AO.3.1. El entorno de desarrollo MPLAB IDE............................................................. 177AO.3.2. El compilador de C MPLAB C30.................................................................... 178A0.3.3. Herramienta de diseño de filtros dsPICFdLite................................................ 178A0.3.4. Herramienta para el tratamiento de algoritmos de tratamiento

de señales dsPICworks..................................................................... .................. 179A utoe valuación.............................................................................................................................. 179

Aplicación 1. DISEÑANDO F IL T R O S .................................................................................... 181

A 1.1. Introducción....................................................................................................................... 181A l .2. El plan de trabajo .............................................................................................................. 181A 1.3. El problem a........................................................................................................................ 181A 1.4. Analizando la señal........................................................................................................... 182A l.5. Filtrando la señal............................................................................................................... 186A 1.6. Generando la señal sin ruido........................................................................................... 190Autoevaluación.............................................................................................................................. 196

Aplicación 2. E L ENTORNO DE D ESARROLLO M PLAB I D E ................................... 197

A 2.1. Introducción....................................................................................................................... 197A2.2. Trabajando con proyectos................................................................................................ 197A2.3. Un vistazo ráp ido .............................................................................................................. 197A2.4. Primer proyecto en ensamblador.................................................................................... 201A2.5. Primer proyecto en lenguaje C ........................................................................................ 209Autoevaluación.............................................................................................................................. 212

Page 11: DsPIC Diseño practico de aplicaciones

X CONTENIDO

Aplicación 3. PO N IEN D O EN M ARCHA EL S IM U L A D O R ......................................... 215

A3.1. Introducción....................................................................................................................... 215A3.2. Simulando el primer programa en ensam blador......................................................... 215

A3.2. L. Explorando la memoria de program a............................................................. 216A3.2.2. Estableciendo puntos de ruptura y ventanas de inspección........................ 217A3.2.3. Resolviendo el ejercicio del tema anterior.................................................... 219

A3.3. Características del sim ulador.......................................................................................... 220A3.3.1. Configurando el simulador y contando el tiem po....................................... 221

Autoevaluación.................................................................. ........................................................... 224

Aplicación 4. M ANEJANDO LAS INSTRUCCIONES TÍPICAS DE LOS dsPIC .... 225

A4.1. Introducción....................................................................................................................... 225A4.2. Manejo de instrucciones de salto en ensamblador...................................................... 225A4.3. Manejo de instrucciones DSP. Inicial ¡¿aciones............................................................ 226

A4.3.1. Otras formas de inicializar los programas..................................................... 231Autoevaluación.............................................................................................................................. 232

Aplicación 5. LEYENDO Y ESCRIBIENDO LAS M EM ORIAS FLASHY E E P R O M ........................................................................................................... 233

A5.1. Manej ando la memoria de programa FLASH.............................................................. 233A5.2. Manejando la memoria de datos EEPROM ................................................................. 237Autoevaluación.............................................................................................................................. 241

Aplicación 6. PROGRAM ANDO LOS PER IFÉR IC O S CON VISUALIN IT IA L IZ E R ...................................................................................................... 243

A6.L Introducción....................................................................................................................... 243A6.2. Visual Initializer................................................................................................................ 243A6.3. Controlando el mundo exterior. Puertas de E /S .......................................................... 247A6.4. Manejo de temporizadores. El semáforo....................................................................... 250A6.5. Manejo de interrupciones. El semáforo con pulsador................................................ 255Autoevaluación.............................................................................................................................. 258

Aplicación 7. PER IFÉR IC O S AVANZADOS........................................................................ 259

A7.1. Introducción....................................................................................................................... 259A7.2. El Motor D SP..................................................................................................................... 259A7.3. Conversor analógico digital............................................................................................ 261

A7.3.L Descripción del módulo de Conversión Analógico Digitalde 12 b its ............................................................................................................. 261

Page 12: DsPIC Diseño practico de aplicaciones

CONTENIDO xi

A7.3.2. Trabajando con el módulo................................................................................ 262A7.4. Comunicaciones U A RT................................................................................................... 266A7.5. Módulo de captura de entrada......................................................................................... 269A7.6. Módulo de comparación de sa lida ................................................................................. 271A7.7. Consideraciones finales.................................................................................................... 274Autoevaluación.............................................................................................................................. 274

Apéndice A. CO NTEN IDO DEL CD E INSTALACIÓN DE LAS HERRAM IENTASDE TRA BA JO ........................................................................................................ 275

Apéndice B. SOLUCIO N ES A LOS E JE R C IC IO S DE AUTOEVALUACIÓN ......... 281

T ercera p a r te : L A B O R A T O R IO E X P E R IM E N T A L

Laboratorio 0. EL SISTEM A DE DESARROLLO PIC S ch o o l...................................... 299

L0.1. Introducción....................................................................................................................... 299L0.2. El fabuloso liPlC School” ................................................................................................ 300L0.3. Arquitectura de PIC School............................................................................................ 302

L0.3.1. Fuente de alimentación...................................................................................... 302LO.3.2. El oscilador.......................................................................................................... 303L0.3.3. Los microcontroladores..................................................................................... 304LO.3.4. Entradas analógicas........................................................................................... 304LO.3.5. Entradas digitales............................................................................................... 305LO.3.6. El generador lógico ........................................................................................... 306LO.3.7. El teclado............................................................................................................. 307L0.3.8. Salidas digitales.................................................................................................. 309L0.3.9. Salidas digitales de alta corriente.................................................................... 310L0.3.10. Interfaz serie RS-232......................................................................................... 310LO.3.11. Interfaz bus CAN................................................................................................ 312L0.3.12. Pantalla L C D ....................................................................................................... 313L0.3.13.Conectores para interfaz RJ11 y U SB ............................................................ 314LO.3.14. Sección de grabación......................................................................................... 315

LOA El módulo dsPIC para la PIC School............................................................................. 316L0.5. Descripción del software............................................................................................ . 317

L0.5.1. Software W INPIC800....................................................................................... 318

L aboratorio 1. A PLICA CIÓ N DE IN STRUCCION ES DSP CON ENTRADASY SALIDAS DIGITALES .............................................................................. 323

L l .l . Objetivos............................................................................................................................. 323L1.2. Descripción del laboratorio.............................................................................................. 324L1.3. Esquema electrónico......................................................................................................... 326L1.4. Construcción del program a............................................................................................. 326L1.5. Conexión de los periféricos............................................................................................. 329

Page 13: DsPIC Diseño practico de aplicaciones

x ii CONTENIDO

L1.6. Grabación y ejecución...................................................................................................... 330L1.7. Librería m atem ática.......................................................................................................... 331

L aborato rio 2. M ANEJANDO A FONDO LO S TEM PO RIZA D O RESDE 32 B IT S .......................................................................................................... 333

L2.1. O bjetivos............................................................................................................. ............... 333L2.2. Descripción del laboratorio............................................................................ ................ 333L2.3. Esquema electrónico............................................. J........................................................... 334L2.4. Construcción del programa............................................................................................. 335L2.5. Conexión de los periféricos............................................................................................. 340L2.6. Grabación y ejecución...................................................................................................... 340

Laboratorio 3. OPTIMIZANDO LA CONVERSIÓN ANALÓGICO/DIGITALDE ALTA PRECISIÓN.................................................................................... 343

L3.1. Objetivos............................................................................................................................. 343L3.2. Descripción del laboratorio............................................................................................. 344L3.3. Esquema electrónico........................................................................................................ 345L3.4. Construcción del program a............................................................................................. 346L3.5. Conexión de los periféricos............................................................................................. 348L3.6. Grabación y ejecución...................................................................................................... 348

L aboratorio 4. COM UNICACIÓN ENCRIPTADA CON EL USART........................... 351

L4.1. Objetivos............................................................................................................................. 351L4.2. Descripción del laboratorio............................................................................................. 352L4.3. Esquema electrónico......................................................................................................... 353L4.4. Construcción del program a............................................................................................. 353L4.5. Conexión de los periféricos.............................................................................................. 355L4.6. Grabación y ejecución...................................................................................................... 355

L aboratorio 5. CO NTROL DE UN M O TO R DE CC M EDIANTE P W M ................... 359

L5.1. O bjetivos............................................................................................................................. 359L5.2. Descripción del laboratorio............................................................................................. 360L5.3. Esquema electrónico......................................................................................................... 360L5.4. Conexión de los periféricos............................................................................................. 362L5.5. Creación del program a..................................................................................................... 362L5.6. Grabación y ejecución del program a............................................................................. 364

Page 14: DsPIC Diseño practico de aplicaciones

CONTENIDO Xlll

L aboratorio 6. DISEÑANDO F IL T R O S ................................................................................. 367

L6.1. Objetivos............................................................................................................................. 367L6.2. Descripción del laboratorio.............................................................................................. 367L63 . Esquema electrónico......................................................................................................... 368L6.4. Conexión de los periféricos.............................................................................................. 369L6.5. Creación del programa..................................................................................................... 369L6.6. Grabación y ejecución del program a............................................................................. 371

L aboratorio 7. GRABANDO LA M EM O RIA FLA SH DE PROGRAM ACON UN B O O TLO A D ER .............................................................................. 375

L7.1. Objetivos............................................................................................................................. 375L7.2. Descripción del laboratorio............................................................................................. 375L7.3. Esquema electrónico......................................................................................................... 377L7.4. Conexión de los periféricos............................................................................................. 377L7.5. Construcción del programa.............................................................................................. 377L7.6. Grabación y ejecución del program a............................................................................. 381

Laboratorio 8. M ANEJANDO A FONDO LAS IN TER R U PC IO N ES.......................... 385

L8.1. Objetivos............................................................................................................................. 385L8.2. Descripción del laboratorio.............................................................................................. 385L8.3. Esquema electrónico......................................................................................................... 386L8.4. Conexión de los periféricos.............................................................................................. 387L8.5. Construcción del programa.............................................................................................. 387L8.6. Grabación y ejecución del program a............................................................................. 390

L aboratorio 9. Pn.O TA N D O UN FÓRMULA 1 ................................................................... 393

L9.1. O bjetivos............................................................................................................................. 393L9.2. Descripción del laboratorio.............................................................................................. 394L9.3. Esquema electrónico......................................................................................................... 395L9.4. Conexión de los periféricos.............................................................................................. 395L9.5. Construcción del program a............................................................................................. 396L9.6. Grabación y ejecución del program a............................................................................. 403

ín d ice ...................................................................................................................................................... 405

Page 15: DsPIC Diseño practico de aplicaciones
Page 16: DsPIC Diseño practico de aplicaciones

Prólogo

dsPic es un nombre genérico que se utiliza para referirse a los Controladores Digitales de Seña­les (DSC) que ha diseñado Microchip Technology Inc. para facilitar a los usuarios de sus micro- controladores PTC la transición al campo de las aplicaciones de los Procesadores Digitales de Se­ñales (DSP), que van a propiciar en los próximos años un crecimiento espectacular en áreas como las comunicaciones, los sensores, el procesamiento de la imagen y el sonido, el tratamiento mate­mático de señales* los sistemas de alimentación, el control de motores, la electro medicina, los sis­temas multimedia, la automoción e Internet.

Los DSC son unos dispositivos que combinan la arquitectura y la programación de los micro- controladores 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 atención al mantenimiento de la compatibilidad entre sus microcontroladores clásicos 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 clásicos, 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 más 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, funcionamiento y repertorio de instruccionesSegunda Parte: Programación y simulación de aplicacionesTercera Parte: Laboratorio experimental

En la Primera Parte que consta de 12 capítulos se hace una descripción de las características, es­tructura y funcionamiento de los bloques principales de la arquitectura del procesador, haciendo én­fasis en las partes nuevas que se añaden a los dsPIC como el Motor DSP, las especiales organiza­ciones de las memorias, los nuevos modos de direccionamiento, las instrucciones DSP, etc. También se explican los periféricos y el manejo básico del repertorio de instrucciones. Los conceptos teóri­cos comprenden a las familias dsPIC30F y dsPIC33F.

xv

Page 17: DsPIC Diseño practico de aplicaciones

xvi PRÓLOGO

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 prácticas 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, etcétera. Esta parte se distribuye en 7 Aplicaciones que van recorriendo desde la instalación y ma­nejo de todo el software de desarrollo hasta la descripción detallada de numerosos ejercicios y pro­gramas. Al final de cada una de dichas aplicaciones el lector puede comprobar el nivel de asimila­ción de los conceptos estudiados a través de varios ejercicios de autoevaluación. Esta parte incluye2 apéndices en los que el lector encontrará las soluciones a Jos ejercicios de autoevaluación de ca­da aplicación y el contenido del CD con las instrucciones de instalación de los programas.

La tercera y última parte de la obra, que a los autores les parece la más eficaz e interesante, ofre­ce una colección 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 grabación y conexionado con los periféricos que manejan las experiencias se ha escogido el sistema de desarro­llo PIC School de Ingeniería de Microsistemas Programados (www.microcontroladorcs.com) dado su excelente diseño técnico, su facilidad de manejo, su flexibilidad, el soporte técnico 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 diseño de filtros, el tratamiento matemático, el control de motores, el manejo y procesado de señales con potentes conversores AD, las comunicaciones con diversos protocolos, el gobierno de pantallas LCD, la simulación de un bólido de Fórmula 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 información y colaboración que hemos precisado y muy es­pecialmente D. Juan Gutiérrez desde la sede central en Chandler (Arizona). También el Sr. Bus- tamante de Sagitron nos ha aclarado y enseñado muchos conceptos y peculiaridades. La ayuda de D. Mikel Echevarría de Ingeniería de Microsistemas Programados ha sido valiosísima 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 Ingeniería de Computadores y de Arquitectura de Computadores de la Facultad de Ingeniería 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 temas y mejorar esquemas, figuras y fotos de varios capítulos. También agradecemos la aportación 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.

Page 18: DsPIC Diseño practico de aplicaciones

Marcas registradasEl nombre y logo de Microchip, dsPIC, PIC, PICmicro, PICSTART, PICMASTER, PRO MATE y MPLAB son marcas registradas por Microchip Technology Incorporated en EE. UU. y otros países.

dsPICDEM, dsPIC.net, ICSP.Tn-Circuit Serial Programming (Programación Serie En Circuito), ICEPIC, MPASM, MPLIB, MPL1NK, MPSIM, PICC, PlCkit, PIC DEM y PICDEM.net son marcas registradas por Microchip Technology Incorporated en EE. UU. y otros países.

Determinados materiales e informaciones contenidos en esta obra y en el CD que le acompaña 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 marcas, logos y productos mencionados en este libro están registrados por sus respect i vos propietarios.

Page 19: DsPIC Diseño practico de aplicaciones

Primera parteArquitectura, funcionamiento

y repertorio de instrucciones

Capítulo 1. EL M U N D O DE LOS DSP.............................................................................................. 3

Capítulo 2. CONTROLADORES DIGITALES DE SEÑALES (DSC)........................................ 17

Capítulo 3. ARQUITECTURA DE LA CPU................................................................................ 39

Capítulo 4. EL CAMINO DE DATOS....................................................................................... 49

Anexo. MANIPULACIÓN DE DATOS EN EL MOTOR DSP........................................ 60

Capítulo 5. MODELO DEL PROCESADOR PARA EL PROGRAMADOR............................ 65

Capítulo 6. LA MEMORIA DE DATOS..................................................................................... 73

Capítulo 7. LA MEMORIA DE PROGRAMA............................................................................ 83

Capítulo 8. INTERRUPCIONES Y EXCEPCIONES.................................................................. 93

Capítulo 9. CARACTERÍSTICAS DE LAS INSTRUCCIONES Y MODOS

DE DIRECCIONAMIENTO......................................................................................109

Capítulo 10. EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES M C U ....................119

Capítulo 11. LAS INSTRUCCIONES DSP.....................................................................................139

Capítulo 12. PERIFÉRICOS Y RECURSOS INTEGRADOS..........................................................151

Page 20: DsPIC Diseño practico de aplicaciones
Page 21: DsPIC Diseño practico de aplicaciones

1.1. EL PROCESAMIENTO DIGITAL DE SEÑALES

El mundo que nos rodea está caracterizado por contar con un gran número de señales analógicas o continuas que varían entre un valor mínimo y otro máximo pasando por infinitos valores. La tem­peratura, la luz, la presión atmosférica, la humedad relativa y la concentración de C 0 2 en el aire son algunos ejemplos de magnitudes analógicas típicas en nuestro entorno. El correcto tratamiento de estas señales tiene una gran importancia para el control de procesos y dispositivos. Hasta mediados del siglo XX se utilizaron recursos y técnicas analógicas, cuyo esquema fundamental se muestra en la Figura'1.1. Las enormes expectativas de aplicación en el manejo de esas señales en un futuro in­mediato ha desembocado en una optimización de las técnicas y recursos para su tratamiento.

' .7ENTRADA Vl ----------------^ v:;>

SISTEMASEÑAL . DE

a n a ló g ic a ^ PROCESAMIENTO ANALÓGICO

SENSOR

Ié M m í

O SEÑAL‘ANALÓGICA-

SALIDA

< ]

ACTUADOR

Figura 1 .1 . En una fase inicial se utilizaron técnicas y dispositivos analógicos para el tratamiento de las señales.

En el esquema de la Figura 1.1 el sensor de entrada es el encargado de medir el valor instantá­neo de la señal a procesar, como podría ser la temperatura. El sistema de procesamiento analógico recibe dicha señal y la manipula para transformarla en otra del mismo tipo que se aplica a un ac- tuador, que podría ser una válvula que regula el paso de combustible a una caldera. Cuando aumenta la temperatura, disminuye la señal analógica de salida que se aplica a la válvula para reducir el pa­so de combustible e intentar mantener el valor de la señal de entrada. En este caso, el sistema de pro­cesamiento de la señal está compuesto por dispositivos y circuitos analógicos.

Page 22: DsPIC Diseño practico de aplicaciones

4 dsPIC. DISEÑO PRÁCTICO 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 más compleja e importante de un computador digital. En nuestros días, existe una gran variedad de cir­cuitos integrados con millones de transistores y otros elementos repartidos en pocos mm^ de silicio que configuran potentísimos 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 tecnológicos en microelectrónica, así como el desarrollo de métodos matemáticos eficientes facilitó el análisis y tratamiento de las señales continuas. Así, la serie básica de Fourier es una extraordinaria herramienta para el procesamiento de señales periódicas, mientras que la Trans­formada de Fourier lo es para las señales aperiódicas. Con la Transformada Discreta de Fourier (DFT) y la Transformada Rápida de Fourier (FFT) se consiguió reducir drásticamente el número de multiplicaciones necesarias en los cálculos, lo que unido a la aplicación de la Transformada de La- place y especialmente su evolución a la Transformada Z constituyeron excelentes métodos mate­máticos muy propicios para su resolución mediante potentes computadores digitales.

Así comienza una nueva etapa en el mundo del tratamiento de señales, la del procesamiento di­gital de las señales. Se puede definir un procesador digital de señales o DSP como un procesador monochip diseñado para resolver un conjunto de operaciones matemáticas sobre una señal continuao analógica expresada digitalmente como corresponde al sistema representado en la Figura l .3. Este procesador de señales se ha convertido en una de las más poderosas herramientas tecnológicas en las que se sustentarán la ciencia y la ingeniería del siglo XXI. El diseño de procesadores digitales orien­tados a soportar los algoritmos matemáticos para el análisis y tratamiento de las señales continuas en tiempo real supuso la utilización de los mismos en sistemas de procesado de señales.

ENTRADA

> DIGITAL— DIGITAL

SENSOR

SEÑAL ;DIGITAL •:! CDA

SALIDA

SEÑALANALÓGICA

■ - 0ACTUADOR

Figura 1.3. El procesamiento digital de señales básicamente se descompone en tres etapas: la conversión de la señal analógica en digital (CAO), el procesamiento de Ja señal digital y, finalmente, la conversión de la señal procesada a una forma analógica (CDA).

Page 23: DsPIC Diseño practico de aplicaciones

EL MUNDO DE LOS DSP 5

En el esquema de la Figura 1.3 existe un Conversor de Analógico a Digital delante del procesa­dor digital y otro Conversor de Digital a Analógico detrás. El inconveniente de incluir los conver- sores AD y DA queda compensado por las innumerables ventajas que aporta el procesamiento di­gital de las señales respecto al procesamiento analógico. Se citan las ventajas más relevantes.

■ ■ •

1á La información digital se almacena y se transfiere con seguridad y rapidez posibilitando la realización de cálculos matemáticos complejos con gran exactitud y mínimo tiempo.

2* La tolerancia de los componentes activos y pasivos que conforman los circuitos electrónicos ana­lógicos (resistenpias, condensadores, transistores, etc.) unida a la variación de sus valores y de su comportamiento ante las condiciones ambientales externas y su edad, suponen una grave falta de precisión 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 modificación de un parámetro o una operación en un circuito electrónico analógico supone el rediseño completo del mismo, mientras que esta misma situación se resuelve rápidamente en el procesamiento digital alterando el programa y manteniendo intacto el equipo físico.

4.a El menor coste y volumen que caracterizan los sistemas digitales son otros factores clave en su uti­lización.

...........................•> : ::'

Un claro ejemplo de procesamiento digital de señales en nuestro entorno es el tratamiento de la señal de sonido captada por un micrófono, el cual queda ilustrado en la Figura 1.4.

Figura 1.4. El micrófono transforma en una señal analógica las presiones acústicas de la voz. Dicha señal se aplica a un CAD, cuya salida se trata en un procesador digital do señales según el algoritmo implementado en el programa con el fin de eliminar ruido de la señal obte­nida del micrófono. El resultado de este procesamiento se aplica a un CDA para obtener de nuevo una señal analógica que se reproduce en un altavoz.

No obstante, existen situaciones en las que el requerimiento de trabajar en tiempo real impide la aplicación del procesamiento digital debido a los retardos de los conversores, a la distorsión produ­cida en la toma de muestras y a la exigencia de gran precisión en los cálculos. Debido a que en ta­les casos hay que generar una respuesta a gran velocidad, se opta por utilizar sistemas analógicos pa­ra el procesamiento de señales.

1.1.1. Muestreo de las señales analógicas

El sistema típico de aplicación de un DSP dispone de un sensor como entrada que capta una señal analógica correspondiente a la magnitud a tratar. Dicha señal analógica se muestrea para ir pasando

Page 24: DsPIC Diseño practico de aplicaciones

6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

estas muestras a un Conversor Analógico 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 señal analógica (CDA) de salida que puede transformarse de nuevo en una mag­nitud física por medio de un actuador. (Figura 1.5.)

CAPTURA Y MANTENIMIENTO

SALIDA

SEÑALD IG ITA L CDA S E Ñ A L .

A N A L Ó G IC A 1

ACTUADOR

MUESTREO

Figura 1.5. Esquema general por bloques de un sistema de procesamiento digital de señales.

La señal analógica generada por el sensor se muestrea mediante un circuito de Captura y Man­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 conversión a digital. El tiem­po entre cada muestra se denomina período de muestreo (TM =1/Frecuencia de muestrea). Un gran inconveniente del proceso de muestreo de la señal analógica es la pérdida de información entre muestras. (Figura 1.6.)

AMPLITUD

MUESTRAS

TIEMPO

AMPLITUD

Figura 1.6. Muestreo de una señal analógica. La señal analógica inicial se convierte en muestras dis­cretas tomadas cada cierto tiempo(t) en el circuito S&H.

La frecuencia de muestreo es el número de muestras que se realizan por segundo. Cuanto mayor sea esta frecuencia, más parecido será el resultado obtenido a la señal original. Para representar con precisión una señal analógica, el Teorema de Muestreo (Nyquist-Shannon) establece que la fre­cuencia de muestreo debe ser igual o mayor que dos veces la máxima componente de frecuencia de la señal original {ancho de banda de la señal a muestrear), según la fórmula: Fmuestreo ^ 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 señales digitales exige la aplicación de las transformadas de Fourier y Laplace, las cuales hacen un uso intensivo de la función “suma de productos” (LCi • F(x)). Por esta razón, los procesadores especializados en trabajar en el campo de las señales deben disponer de un conjunto

Page 25: DsPIC Diseño practico de aplicaciones

EL MUNDO DE LOS DSP 7

de instrucciones muy potentes y rápidas, siendo la multiplicación la operación más importante que deben soportar de forma óptima, ya que en caso contrario, supondría un verdadero cuello de bote­lla en el cálculo de la mayoría de los algoritmos.

Existen varias formas de medir la velocidad de un procesador digital de señales, aunque el pa­rámetro de medida más usual es el tiempo de ciclo de instrucción, que es el tiempo necesario para ejecutar la instrucción más rápida del procesador. Su inverso dividido por un millón da lugar al ren­dimiento del procesador en millones de instrucciones por segundo o MIPS.

1.2. DSP. DEFINICIÓN Y CARACTERÍSTICAS PRINCIPALES

Recibe el nombre de DSP (Procesador Digital de Señales) un circuito integrado que contiene un pro­cesador digital y un conjunto de recursos complementarios capaces de manejar digitalmente las se­ñales analógicas del mundo real, como los sonidos y las imágenes.

A principios de la década 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 más potentes para acoplarse a las aplicaciones más complejas y cambiantes.

Los DSP pueden asemejarse a los clásicos microcontroladores, pero incorporando arquitecturas y recursos especiales para poder controlar de forma óptima los requerimientos específicos y los al­goritmos manejados en el procesamiento digital de señales analógicas. 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 simultáneo a ambas informaciones. Además, la memoria de datos suele dividirse en dos espacios independientes que aportan el ac­ceso paralelo. (Figura 1.7.)

c) Disponen de recursos físicos complejos para soportar las operaciones específicas de los algorit­mos DSP. Son imprescindibles un multiplicador rápido y un flexible registro de desplazamiento. Una operación DSP típica es la de *multiplicar y acumular" ( x = a ■ b + x) y que la suele imple- mentar ¡a instrucción de nemónico MAC, ejecutándose en un solo ciclo. Se realizan varios accesos a memoria en un solo ciclo, para que el procesador pueda buscar una instrucción mientras reali­za la búsqueda de operandos y/o almacena el resultado de la instrucción anterior. Esto es posible gracias a que fa memoria de datos se divide en dos partes para posibilitar el acceso simultáneo de datos

d) El repertorio de instrucciones contiene algunas específicas para resolver los algoritmos matemáti­cos habituales en el procesamiento de señales.

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 periféricos que minimizan el tamaño y simplifican el

diseño del sistema.h) Poseen módulos para el control y optimización del consumo de energía.

Page 26: DsPIC Diseño practico de aplicaciones

8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

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

1.3. MICROCONTROLADORES Y DSP

Los microcontroladores clásicos, denominados de forma resumida MCU, son circuitos integrados que contienen un procesador digital completo junto a diversos periféricos 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 aplicación sean diferentes.

De forma resumida puede decirse que los DSP son microcontroladores dotados de los recursos físicos y lógicos necesarios para poder soportar las aplicaciones específicas del procesamiento di­gital de señales.

Las instrucciones aritméticas complejas de los MCU se ejecutan en varios ciclos, mientras que las de los DSP sólo precisan uno. En los DSP siempre se dispone de conversores AD rápidos y pre­cisos. Dado el carácter marcadamente matemático de los programas para DSP, éstos están 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 expansión 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 científico y los avances tecnológicos han logrado fabricar DSP que añaden al MCU los recursos ne­cesarios para soportar el procesamiento digital de las señales y cubrir así todo el campo de posibi­lidades y aplicaciones que envuelve. (Figura 1.8.)

Figura 1.8. Fotografía de un microcontrolador convencional o MCU a la izquierda y de un DSP a la derecha. Detrás del parecido de ambos dispositivos existen diferencias que les orien­tan hacia aplicaciones diferentes.

Page 27: DsPIC Diseño practico de aplicaciones

EL MUNDO DE LOS DSP 9

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 actuación determinística. Por el con­trario, en muchas aplicaciones con DSP los resultados son consecuencia inmediata del flujo de da­ros que suministra la señal muestreada y la ejecución es dependiente de los datos obtenidos en nempo real.

1.4. DSP Y DSC

La empresa Microchip Technology Inc.® ocupa el primer puesto en el ranking mundial de micro- controladores de 8 bits desde el año 2003; sus modelos son conocidos popularmente con el nombre genérico 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 señales 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 típicas MCU con las de procesamiento digi-de señales (DSP). Esta situación ha impulsado a Microchip a fabricar un circuito híbrido

NICU/DSP, cuyo manejo es similar a los clásicos microcontroladores pero que incluye las principa­les prestaciones de los DSP. Así ha nacido el Controlador Digital de Señales, abreviadamente DSC® (Digital Signal Controller), que reúne las características de un microcontrolador PIC de 16 bits y las de un DSP de gama baja. En base a este controlador digital de señales, Microchip consi­gue reunir lo mejor de ambos mundos, marcando el comienzo de una nueva era en el mercado de controladores. (Figura 1.9.)

Figura 1.9.

— L U

----------►PRECIO

Los controladores digitales de señales (DSC) comparten áreas de aplicación de los MCU de 32 bits y DSP.

Page 28: DsPIC Diseño practico de aplicaciones

10 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

La primera generación de DSC, denominada dsPIC30F, constituyó un intento por parte de Mi- crochip de facilitar el acercamiento al mundo del procesamiento digital de señales a sus usuarios de MCU de 8 y 16 bits. Con esta intención se ha mantenido el entorno de la arquitectura y juego de ins­trucciones de los MCU tradicionales, pero añadiendo la funcionalidad y los principales requisitos de los DSP, para facilitar la transición a sus clientes habituales. Posteriormente, la segunda generación de DSC, llamada dsPIC33F, ha potenciado las capacidades, el número de periféricos y el rendi­miento, permitiendo acceder a campos de aplicación más 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 primer puesto del escalafón el fabricante Texas Instruments que consigue casi la mitad de las ventas totales. En la Figura 1.10 se muestra la distribución porcentual de las ventas de DSP en el mundo, según EE Times durante el año 2004.

FREESCALESEM ICONDUCTO RS

Figura 1.10. Distribución porcentual de las ventas mundiales de DSP en 2004.

En el año 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 dólares, 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 más importantes en el mercado DSP fue de 6,4 billones de dólares en el sector de comunicaciones, 414 millones de dólares en el de computadores y 312 millones de dólares en el sector del automóvil, según IC InSights durante el año 2005.

En cuanto a la distribución 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 fabricación de DSP sobresale Asia que abarca un 52 por 100, destacan­do China, Taiwán y Corea del Sur. Seguidamente Europa posee una cuota del 20 por 100 del total y luego se sitúan Japón 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 aplicación de los DSP destacan las Telecomunicaciones, la Multime­dia y el Control de Motores. Esto incluye una amplia variedad de soluciones como la mejora de

TEXASINSTRUMENTS

AGERESYSTEMS

OTROSFABRICANTES

PHILIPSSEMICONDUCTOR

ANALOGDEVICES

Page 29: DsPIC Diseño practico de aplicaciones

EL MUNDO DE LOS DSP 11

«TECNOLOGÍA INALÁMBRICA 71,4 ■ GRAN CONSUMO 8,4

MULTIPROPÓSITO 7 ■TECNOLOGÍA NO INALÁMBRICA 5,7

COMPONENTES Y PERIFÉRICOS 4,7 ■AUTOMOCIÓN 2,8

Figura 1.11. Distribución porcentual del mercado en las aplicaciones en las que están presentes los DSP.

imágenes, el reconocimiento y la generación de voz, la compresión de datos para el almacena­miento y transmisión, etc. A continuación se describen algunas aplicaciones concretas en las que se pueden encontrar DSP como dispositivos imprescindibles de las mismas.

GRAN CONSUM O

¡ i ' ; : - !El uso cada vez más extendido de DSP en aplicaciones portátiles como la telefonía celular hace que el consumo de energía 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 música digital, reproductores de -CD, órganos y sintetizadores musicales, frigoríficos, lavadoras y equipos de aire acondicionado.

M E D IC IN A

Aparatos como los equipos destinados a la monitorización de pacientes, MNR, scanner, electrocar­diogramas.. electroencefalogramas y tomografías, han logrado que sus imágenes sean mostradas con mucho más detalle que las técnicas convencionales gracias a los DSP, permitiendo un diagnóstico y tratamiento significativamente mejor. Hay otros aparatos destinados al diagnóstico asistido, las eco- grafías y la resonancia magnética, que pueden proporcionar información acerca de la fisiología y del flujo de sangre a través de las arterias.

Page 30: DsPIC Diseño practico de aplicaciones

12 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

INDUSTRIA

Él DSP ha revolucionado áreas como la exploración petrolera, minera, submarina y espacial, el control de motores, la instrumentación y la robótica. (Figura 1.12.)

Figura 1.12. La placa de la fotografía corresponde a un radar para tiburones y contiene un DSP ADSP-TS2105 cuya función es optim izar su detección.

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 están dedicando ampliamente ya que al estar presentes en casi todos los procesos industriales el desarrollo de módulos de control de po­tencia es una inversión segura. De este modo se emplean DSP en sistemas como controladores de mo­tores, inversores de potencia, controladores de posición, impresoras y fotocopiadoras, compresores de alta potencia, etc. Los DSP presentan excelentes características debido a su potencia en el cálculo nu­mérico, permitiendo implementar controles de velocidad, de sistemas de energía magnetizante, de fac­tor de potencia y otros, con niveles de eficiencia nunca alcanzados anteriormente.

- :• . -- -• o ' . : .

AUTO M O CIÓN

La introducción de DSP en esta área ha supuesto un incremento de las prestaciones de los automóvi­les. Se aplican en los activadores de airbag, sistemas de chequeo, control de velocidad de crucero, suspensión activa, control del motor, ordenador de a bordo, ABS y control de la combustión. General Motors, por ejemplo, utiliza un DSP en su sistema de rastreo de automóviles aprovechando la red glo­bal de satélites GPS para establecer su ubicación precisa.

Page 31: DsPIC Diseño practico de aplicaciones

EL MUNDO DE LOS DSP 13

MILITAR

El sonar, el radar, el piloto automático y el guiado automático de misiles son algunos de los ejemplos de la utilización DSP en el ámbito militar.

TELECOMUNICACIONES

El DSP ha revolucionado la industria de las telecomunicaciones en muchas áreas como la generación y detección de tonos, filtrado para eliminar el ruido de la linea eléctrica, multiplexado, compresión, con­trol de eco, etc. y en productos como son los teléfonos móviles e inalámbricos, módems, emisoras, vi­deoconferencia, GPS, PDA, cámaras digitales, fax, RDSI, redes de sensores, receptores DRM y en- criptadores de datos entre muchos otros. Utilizando un teléfono móvil en una habitación ruidosa, muy poco de ese ruido Jlegará a la persona que esté al otro lado del teléfono, ya que el DSP emplea com­plejos algoritmos matemáticos que realzan la diferencia entre el ruido de fondo y la voz del usuario.

Figura 1.13. Cámara estabilizador de imagen con GPS para helicópteros. El cometido del DSP es gra­bar las imágenes absorbiendo la vibración del helicóptero además 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 parámetros de la emisión. Tiene la posibilidad do recibir texto, imágenes y hasta pequeños videoclips junto con la señal de audio.

Page 32: DsPIC Diseño practico de aplicaciones

14 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Figura 1.15. La emisora de la fotografía contiene un DSP cuya función es eliminar la interferencia de señales de emisoras adyacentes y reducir al mínimo la distorsión de sonido causada por una mala recepción.

IM AGEN Y S O N ID O

EÍDSP puede realizar muchas funciones importantes durante el procesado del sonido y las imágenes. Permite añadir ecos, soportar la visión artificial, ef reconocimiento de patrones, la compresión/des­compresión de imágenes, el reconocimiento y la generación de audio, la cancelación de ruido, la can­celación de eco, el encriptado y la síntesis de voz.

Figura 1.16. Dskc.am. Cámara c.on TCP/IP Ethernet, que gracias a un DSP soporta la videoconferen- cia, el reconocimiento de imágenes, además de disponer de filtros y compresión.

Page 33: DsPIC Diseño practico de aplicaciones

EL M UNDO DF LOS DSP 15

Figura 1.17. M ódulo de vídeo "5¡g DM642 multichannel". Soporta diversos formatos de. vídeo y codifica y decodifica vídeo. Tiene un DSP que permite convertir las señales de vídeo y audio analógicas en archivos digitales con calidad de vídeo DVD.

Figura 1.18. Placa PCI. Contiene un DSP y capacidades de grabación y reproducción a gran calidad.

Page 34: DsPIC Diseño practico de aplicaciones
Page 35: DsPIC Diseño practico de aplicaciones

CAPÍTULO

2} Controladores■ Digitales

I de Señales (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 más interesantes de los DSP para fabricar un nuevo circuito integrado denomi­n o DSC, que intenta ser una respuesta eficaz a las necesidades de las modernas aplicaciones que : >mbinan las funciones típicas de los microcontroladores con las del procesamiento digital de se- r¿Ies 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 PÍC no encuentran dificultades para introducirse en ei fabuloso campo del procesamiento digital de señales.

- D S C esiríuy 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, apoyándose en herramientas de desa­rrollo muy fáciles 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>jción predociblc Uso intensivo de interrupciones

í3a¡e coí'.e Menwria FLASH

Periféricos robuetc>3 -•se frecuente de Ht-il para programas grandes

Variedad de periféricos Rendimiento DSP

¡ntecrupaones avanzadas Memoria FLASH robus«

Encapsu’ados 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

Periféricos brollados Poco frecuente uso de HLL

^igura 2.1. Los DSC reúnen lo mejor de los mundos MCU y DSP.

17

Page 36: DsPIC Diseño practico de aplicaciones

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

1.a Familia dsPIC30F2.“ Familia dsPIC33F

18 dsPIC. DISEÑO PRÁCTICO DF APLICACIONES

2.2. CARACTERÍSTICAS GENERALES DE LOS DSPIC30F

Inicialmenle Microchip fabricó la familia dsPIC30F de la que se ofrece en la tabla de la Figura 2.2 sus características más destacables.

\ RECURSO RANGO DE VALORES

Memoria de Programa FLASH 12Kb-1 4 4 Kb

Memoria de Datos RAM 512 Bytes - 8 Kb

Memoria de Datos EEPROM 1 Kb - 4 Kb

Patillaje de Encapsulado 18 - 80 patitas

Temporizadores de 16 bils Hasta 5

Módulo de Captura Hasta 8 entradas

Módulo Comparador / PVVM Hasta 8 salidas

Módulo PVVM de Control de Motores De 6 a 8

Conversor A/D de 10 bits 500 kbps, hasta 1f> canales

Conversor A/D de 12 bits 100 kbps, hasta 16 canales

UART 1 - 2

SPI™ (ñ — 16 bits) 1 - 2

i2c1M 1 Módulo

QEI 1

Interfaz CODEC 1

CAN 1 - 2

Figura 2.2. Tabla que presenta las características más importantes de la familia dsPIC30F.

El voltaje de alimentación admite un rango comprendido entre 2,5 y 5,5 VDC. Se tolera una temperatura interna entre -40° y 85° C y una externa entre -40° y 125° C. El rendimiento alcanza los 30 MIPS cuando el voltaje de alimentación tiene un valor entre 4,5 y 5,5 VDC.

En cuanto a la arquitectura de la CPU los dsPIC30F se sustentan en un núcleo RISC con ar­quitectura Harvard mejorada. Actuando como soporte central de información existe un banco de 16 registros de 16 bits cada uno; se dispone de un bus de datos de 16 líneas y otro de instruccio­nes de 24. Para potenciar la velocidad de las operaciones aritméticas complejas existe un “Mo­tor DSP” que contiene un multiplicador hardware rápido de 17 x 17 bits, dos acumuladores de 40 bits y un robusto registro de desplazamiento. La memoria de programa, tipo FLASH, puede al­canzar un tamaño de 4 M instrucciones de 24 bits cada una, aunque actualmente sólo hay mode­los con una capacidad máxima de 256 K bytes. La memoria de datos SRAM puede alcanzar 32 K posiciones de 16 bits, aunque en los modelos actuales sólo se llega a la mitad. La memoria de datos se divide en dos espacios, X e Y, que pueden ser accedidos simultáneamente en las opera­ciones matemáticas DSP. Toda esta estructura admite operaciones MCU y operaciones DSP con

Page 37: DsPIC Diseño practico de aplicaciones

CONTROLADORES DIGITALES DE SEÑALES (DSC) 19

jü repertorio de 84 instrucciones, la mayoría de 24 bits de longitud y ejecutables en un ciclo de instrucción. (Figura 2.3.)

Figura 2.3. Arquitectura básica de ia CPU de los dsPICJOF.

Las secciones MCU y DSP cooperan en el funcionamiento general y comparten el flujo de ins- rucciones de los DSC. Los recursos específicos del Motor DSP, además de soportar las operacio­nes DSP, permiten implementar nuevas y potentes instrucciones MCU. Para reducir el tiempo de ejecución de algunas instrucciones DSP la memoria de datos SRAM se divide en dos espacios X eY que pueden ser accedidos a la vez.

Otra característica importante en los dsPTC30F es la de admitir hasta 45 fuentes distintas de petición de interrupción 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 multi- plexadas con un consumo de 25 mA cada una. Los dispositivos dsPIC.33F como disponen de más periféricos también admiten más causas de interrupción.

Se puede encontrar una gran variedad de periféricos en la familia dsPIC30F como temporizado- res. conversores AD, módulos de captura y comparación, módulos PWM para el control de moto­res, módulos de comunicación PC, SPI, CAN, UART, DCT, etc.

Los dsPIC33F además contienen un Controlador de DMA.También disponen de potentes herramientas para la gestión del sistema (Perro Guardián, Moni-

:?t de fallo de reloj, temporizadores para la estabilización del voltaje de alimentación y la frecuen­t a . etc.), así como dispositivos para controlar el consumo de energía (modos de bajo consumo Id- ie y Sleep, detección 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 según los programas de prueba sobre análisis de frecuencia de instrucciones de EEMBC Automotive. En el gráfico de la Figura 2.5 se compara la reducción en el tamaño del código con lenguaje C que generan los dsPIC30F frente al de otros competidores según los benchmark de EEMBC Automotive.

Page 38: DsPIC Diseño practico de aplicaciones

2 0 dsPIC DISFÑO PRÁCTICO DE APLICACIONES

FAMILIA MCU

C ICLOINSTRUCCIÓN

(MHz)

CICLOS POR INSTRUCCIÓN

MIPS

INFINEON XC161/166 40 1 -6 29MICROCHIP dsPOOF 30 1 -2 28

II 320LF240X 40 1 - 4 21M OTOROIA 56F8ÖX 40 1 - 8 19

HITACHI H8S/26XX 33 1 - 7 15INFINEON C16x 25 2 - 4 12ST MICRO ST10F269 20 1 - 8 9

MITSUBISHI M16 C 20 1 - 8 9MOTOROLA MC9S12D 25 2 - 6 6

Figura 2.4. Tabla de diversos fabricantes sobre algunos de sus modelos MCU usando los programas de prueba basados en el análisis de frecuencia de instrucciones de EEMBC Automotive.

221%

100%

Figura 2.5. Se muestra ¡a reducción del código en lenguaje C que supone el uso de los dsPIC30F fren­te a otros según los benchmark de EEMBC Automotive para un tamaño de 50 Kbytes.

2.3. LOS MODELOS DE LA FAMILIA DSPIC30F

Microchip ha clasificado a los 19 modelos de la familia dsP!C30F que actualmente fabrica y co­mercializa en tres categorías atendiendo a su aplicación más 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 alimentación.

2.3.1 Dispositivos dsPIC30F de propósito 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.)

Page 39: DsPIC Diseño practico de aplicaciones

MODELO PATITAS

FLASHMEMORIA

PROGRAMA

KBYTES

SRAM

BYTES

EEPROM

BYTES

TIMER

16-BITSM ÓDULOCAPTURA

MÓDULO

COMPARADOR PWM STANDAR

INTERFAZCODEC

A/D 12-BIT

100KBPS

.

UART SPI™ re ™ CANPATITAS

E/S(MÁX)

CÓ D IG OENCAPSULADO

dsPIC 30F3014 40/44 24 2048 1024 3 2 2 - 13 ch 2 2 i - 30 P,PT,ML

dsPIC 30F4013 40/44 48 2048 1024 5 4 4 AC97, |2S 13ch 2 2 i 1 30 P,PT,ML

dsPIC 30F5011 64 66 4096 1024 5 8 8 AC97, |2S 16 ch 2 2 i 2 52 PTC

dsPIC 30F6011 64 132 6144 2048 5 8 8 - 16 ch 2 2 i 2 52 PF PT

dsPIC 30F60122 dsPIC 30F6012A

64 144 8192 4096 5 8 8 AC97, |2S 16 ch 2 2 i 2 52 PF I5T

dsPIC 30F5013 80 66 4096 1024 5 8 8 AC97, |2s 16ch 2 2 i ' : 2 68 PT

dsPIC 30F6013 dsPIC 30F6013A

80 132 6144 2048 5....

8 8 - 16 ch 2 2 i 2 68 PF PT

dsPIC 30F6Ü14 dsPIC 30F6014A

90 144 8192 4096 5 8 8 AC97, |2S 16 ch 2 2 i 2 68 PF PT

Figura 2.6. Principales características de los 8 modelos que componen el conjunto de dispositivos dsPIC30F de propósito general.

CO

NTR

OLA

DO

RES

D

IGITA

LES DE

SEÑALES

(DSC

) 21

Page 40: DsPIC Diseño practico de aplicaciones

2 2 dsPIC. DISEÑO PRÁCTICO 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, razón por la que sólo disponen de encapsulados de 18 y 28 patitas. (Figura 2.7.)

CÓDIG

OEN

CAPS

ULAD

O

o</>ceOC_- iCC</>

ió<✓)OTCT!

s - fc=H- uj ^'< wO.<NT— <N CN O<N

£ues - - - -

1 - - - -

5 - - - CN

K £< 5! |

Uco JZuccJZ.jj JCU

S 8 | 2 á | o ^ “ s § ¡

CN CN CN OJ

9 áO < 5 O

CN CN CN CN

c£ £UJ _P T—

r+l rr ro

i»“ 1 UJ Cuwu

' TCNC ■ rOlO

2 £ </> cc*=tCNO COTO04

CNOCO•3-oCN

<1 I 2 l í< IS su. m O *

5 £

CN oí 04 ■'tCN

liliSVlIlVd

CO co CO<N COCN•0mJUJ

OÍNLl_Orouc_w"O

OíOmu_o1 <-oU i c_■r¡

OIOCNLl_OenUQ.¡s¡~o

bc~¡u_Oc-nUfi-i/i~os

ocO)

“oUL.Or>o

&urn(v3Uvi-S¿03. Q ,u

CÑr8u.3WD

Page 41: DsPIC Diseño practico de aplicaciones

CONTROLADORES DIGITALES DE SEÑALES (DSC) 23

Nlicrochip es un suministrador cualificado y homologado de los más importantes fabricantes de il industria automovilística, en la que muchas aplicaciones exigen funcionamiento con amplios ran- fCN de temperatura y ciclos de vida muy largos.

La combinación del conversor AD de 12 bits con los periféricos de comunicación y la gestión ¿ d consumo de energía hacen a estos 4 modelos ideales para la construcción de módulos basados es censores inteligentes. Pretensores de cinturones, airbags, controladores de ignición, cancelación é d ruido en el habitáculo, sensores de ocupantes, etc., son algunas de las aplicaciones de estos dis- positivos.

I_3.3. Dispositivos dsPIC30F para el control de motores y sistemas de alimentación

_ s 7 modelos que componen esta categoría se dedican a las aplicaciones de control de motores, ta- como los de inducción de fase simple o trifásicos y los de corriente continua. También son muy

^ropiados para la gestión de los sistemas de alimentación ininterrumpibles, conversores, módulos pira la corrección del factor de potencia, etc. (Figura 2.8.)

Estos modelos de DSC se utilizan en sistemas destinados a calefacción, ventilación, lavadoras, iren u ra industrial de puertas, control de estabilidad, medición del caudal de agua y consumo de ¿ectricidad, sistemas de seguridad, etc.

Microchip recomienda el modelo dsPIC30F5015 para el control de motores paso a paso, el ^?IC 30F2010 para su aplicación en los motores de corriente continua y el control de veloci- ¿hi. Para los motores de inducción de corriente alterna recomienda los modelos dsPIC30F3011, is?IC30F5015 y dsPIC30F6010.

2.4. ENCAPSULADOS Y DIAGRAMAS DE CONEXIONES

Con la finalidad de soportar todo tipo de diseños y necesidades los modelos dsPIC30F están «©capsulados desde 18 hasta 80 patitas, algunos con doble hilera de patitas, tipo PDÍP y SPDIP

SOIC. Otros están preparados para el montaje superficial como los tipos TQ FP y QFN. Figura 2.9.)

La nomenclatura de los dsPIC30F formada por números 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 diseñado Microchip para pro- p d a r la migración hacia modelos superiores y con más patitas, para lo cual ha mantenido la máxi-

compatibilidad en su posición. Se ha favorecido la compatibilidad del “pinout” o distribución del rciiilaje de los PIC MCU con los PTC DSC, también la de las instrucciones, la de las herramientas je desarrollo y la de las patitas de E/S correspondientes a los periféricos de los dos tipos de PTC, co- x 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 30F6014, que coinciden, y el del dsPlC30F6013. Los dos primeros disponen de inteifaz CODEC y el otro no lo tiene.

La mayoría de las patitas de ambos diagramas de conexión soportan varias funciones, pero la : : mpatibilidad en su posición es total y sólo 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 símbolo, el significado y la dirección de las patitas ~ is representativas en los dsPIC30F.

Page 42: DsPIC Diseño practico de aplicaciones

MODELO PATITAS

FLASH

MEM.PROGR.KBYTES

SRAMBYTES

EEPROMBYTES

TIMER16-BITS

MÓD.

CAPT.

MÓD.COMP.

PWMESTÁND.

CONTR.

MOTOR.'

A/D 10-BIT

500 KBPS

COD IFIC . DE CUADRATURA

; ■ UART SPI™ r e ™ CAN

PATITASE/S

(MÁX)

CÓD.ENCAPS.

t i « ! !

dsPIC 30F2010 28 12 512 1024 3 4 2 6ch 6ch SI 1 1 1 - 20SCP.SOG,

MMG

dsPÌC 30F3Ò10 28 24 1024 1024 5 4 2 6ch 6ch SI 1 1 1 - 20 SP,SO

dsPIC 30F4012 28 48 2048 1024 5 4 2 6ch 6c:h SI 1 1 1 1 20 SP,SO

dsPIC 30F3011 40/44 24 1024 1024 5 4 4 6ch 9ch SI 2 1 1 - 30 lJ,PT,ML

dsPIC 30F4011 40/44 48 2048 1024 5 4 8 6ch 9ch SI 2 1 1 1 30 P/PT#ML

dsPIC 30F5015 64 66 2048 1024 5 4 4 8ch 16ch SI 1 2 1 1 52 PT

dsPIC 30F6010 dsPIC 30F6010A

80 144 8192 4096 5 8 8 8ch 16ch SI 2 2 1 2 68PFPT

i---------------------¡ dsPIC 30F6015 64 144 8192 4096 5 8 8 8ch 16ch SI 2 2 1 2 52 PF

dsPIC 30F5016 80 66 2048 1024 5 4 4 8ch 16ch SI 1 2 1 1 68 PT

Figura 2.8. Características más significativas de los modelos dsPIC30F para el control de motores y sistemas de alimentación.

24 dsPIC

DISEÑO PRÁCTICO

DE APLIC

ACIO

NES

Page 43: DsPIC Diseño practico de aplicaciones

CONTROLADORES DIGITALES DE SEÑALES (DSC) 25

P: 1‘8-pirv PDIP(22 « 1 * 7 .5 5 * 0.3 mm>

SO: 18-pin SOIC( l t .5 3 * 10 .34 x ? 31 nvn)

mMM{G): 28-pin QFN ML: 44-pin QFN

15 m n x 6 mm * 0 .9 mm) (S nw x $ >¡ (J.9 mm)

M icr o ch ip

P: 40-pin PUIP152.27 x 15 .24 x 3 .S1 m

PT(G): 64-pln TQFP(10 mm x 10 mm x i <r*n)

PF: 64-p¡n TQFP<1¿ mm x 14 m n x l mm)

SP(G): 28-p/n SPDIP(M . t fT >. 7 .3 7 >: 3 .3 mm)

S0(G): 28-pin SOIC PT: 44-pin TQFP{1 7 .3 3 x 1 0 .34 x 2 .31 mm) ( io miíi x 10 rjvr. x 1 nvml

PT: 80-pin TQFP PF: 80-pin TQFP¡J.2 m u x 12 nim x i mm) (14 irm «. 14 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. También es aplicable a los dsPIC33F

PIC* MCU

UART

SPI™

TMR

CCP

: :

■ « » X ■■

dsPIC*DSC

/O T i'.VÄVW «« ¿TMR I — 5

oc T— 0 I

TMR

1C

OC

F^ura 2.11. Microchip ha potenciado la compatibilidad de las líneas de E/S de los periféricos de los PIC MCU con la de los dsPIC DSC.

Page 44: DsPIC Diseño practico de aplicaciones

2 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

COFS/RGÍ5

T2CK/RC1 C U T3CK/RC2

T4CWRC3 T5CK/RC4

SCK2/CN&RG6 S012/CN9.RG?

SDQ2'CH*0tRG8 MCLR

SS2/CN11XIG9 VSS Voo

INT1AA12 !NT2iRA13

AN$>CN7.«35

AN4/CN&R84 AN3.CN&«33

AJGímTí.VDIWCN4.«S2 PGOEMUOANVCN3.B31

PGDEMUDAm'CN2fl3G d

Q 8 S S 2 |2 n 3 „ 5??e§ 8a s o&í 85 ;: £I í í í 5 §SI g g§§¿ o88a

¡ §§s § 5 Ss 1 2 I £ § §1 ¡§§1nnnnnnnnnnnnnnnnnnn0 ¡ s x 0 i n ' í 0 M » - 0 « ( » N ( « i r t í r t N » -

dsP lC 3 0 F 6 0 1 4

! EMUci/sasc<yria0CN<VRCi I £MUDl*SOSC*CNt/RC13

I EMUC2OC1«D0 | IC4/R011 | C3/RD10

I IC2/RD9 11C1/RD8

| INT4.'RAí5

I IK T i'R A '.á | VÍ2

I OSC2.‘C!.Kí>RC15 I OSCUCUO

H ] v d o

|SCL»RG2 | SOA/RG3

I BHUC3/SCK1/lWT<VRre | SOI1.«F7 | B.1UD3jSOO;jRF8

I U1IWRF2 I U1D0RF3

UUUUÜÜÜÜUÜÜUÜUÜÜÜÜUIJr r ? T - r - T - l i l l . - - - ¡ d q q E Es a

^ ó i Z Z

l i si l l g g l ü

RG15

T2C W R C I I

T3CK/RG2 d

T4C K/RC 3 C Z 73CK/RC4 d

SCK2>CN8.<RG6 tZZ SOI2>CNa«G7 d

SDOZ'CN-.g'RGS d

M CLR I

S S /C N U < R G 3 d

V s s dVeo I d

1N T1iR Aí2 C U IN T 2R A 1 3 1ZZ

AH&yCM7/RBS d

A tM .C N & R & í d

A fC«C NM ?B3 d

A K &SS ÍA.VC m C N 4.-R a2 d

P G G E M U C /A M I/C N iR B '- d

PíjtMEMUCl¡AM&lCN2>RB0 EZZ

£ r- O

85«

8 ¡35?SIS

8

8

^ V- ® N M N í ) s z z r ' O Q i q

O t í S28 2 5 6 0 0 5 5 1 2 8 8 8 8 3 2 8 8 3nnnnnnnnnnpnn- Dnnnnn

S . S 5 3 5 S é 3 S 3 5

83 d

dsPlC30F6013

20

s a a a a j s & a s s s i s i s s s s & s s s

EMUC tSOSCOíT ICKiCNORCUEMUDVSOSC»‘CNtíRC13

E M U C 2O C 1.R 00

ICÍ/RD11IC3/RD10

IC2íRDS>IC í.R D S

IWT4/RA15

IHT&RAMVssOSC2/CIKG/RC1SOSC1.CLXI

v a s

SCURG2SDA'RG3

EMUC3-SCK1/1N7IVRFBSDI1JRF7

EM U B3;SD 01iR FS

U1RXíFF2UmORFS

UUUUUÜUUÜUÜÜUÜUÜUUU'Uo s # o o « < 0 0 6 0 - - a a w r t í « ^? í ¿ í > > 2 2 ¡ D ® > ^ ( f l e O í í ) < n o u s a :H f $ < < ¡ { 5 1 %%%%% * 2 *

=5 S Sz z z zpy< <

Figura 2.12. El diagrama de conexiones correspondiente a los modelos dsPIC30F5013 y dsPIC30F6014 sóío se diferencia del dsPIC30F6013 en las patitas 1, 78, 79 y 80 que soportan las funciones del CODEC que poseen sólo los primeros.

Page 45: DsPIC Diseño practico de aplicaciones

CONTROLADORES DIGITALES DE SEÑALES (DSC) 27

NOMBRE DE LAS PATITAS DIRECCIÓN DESCRIPCIÓN

KAn E/S PATITAS DE E/S DIGITAL l ) H A PUERTA A

RBn E/S PATITAS DE E/S DIGITAL DE LA PUERTA B

RCn E/S PATITAS DE E/S DIGITAL DE LA PUERTA C

RDn E/S PATITAS DE E/S DIGITAL DE LA PUERTA D

RFn E/S PATITAS DE E/S DIGITAL DE LA PUERTA F

RCn E/S PATITAS DE E/S DIGITAL DE LA PUERTA G

V lJ!) ALIMENTACIÓN VOLTAJE POSITIVO PARA LÓGIG\ Y E/S

y ss . ALIMENTACIÓN ' TIERRA PARA LÓGICA Y E/S

A V dd ALIMENTACIÓN VOLTAJE POSITIVO PARA MÓDULO ANALÓGICO

AVss ALIMENTACIÓN TIERRA PARA M Ó D U l O ANALÓGICO

•v«r- ALIMENTACIÓN ENTRADA VOLTAJE REFERENCIA + ANALÓGICO

VREf ALIMENTACIÓN ENTRADA VOLTAJE REFERENCIA - ANALÓGICO

INTn E INTERRUPCIÓN EXTERNA n

AÑn E CANALES ANALÓGICOS DE ENTRADA

■CLK1/CLK0 E/S ENTRADA/SALIDA RELOJ EXTERNO

CNn í ENTRADAS DE NOTIFICACIÓN DE CAMBIO

COFS - CSCK - CSDI - CSDO E/S PATITAS PARA INTERFAZ DE CONVERSIÓN DE DATOS

C1RX - CTTX - C2RX - C2TX E/S PATITAS DE RECEPCIÓN/TRANSMISIÓN DE CAN I Y CAN2

EMUxx E/S PATITAS PARA EL CANAL DE COMUNICACIÓN ICD

ICn E ENTRADAS DEL MÓDULO DF CAPTURA

OSCI - OSC2 E/S ENTRADA/SALIDA DEL OSCILADOR DE CRISTAL

s o s a - SOSC2 E/S ENTRADA/SALIDA OSCILADOR 32KHz BAJA POTENCIA

OCFA - OCF8 E ENTRADAS A - B FALTA COMPARADOR

OCn s CANALES DE SALIDA DEL COMPARADOR

PCD - PGC E/S PATITAS PARA PROGRAMACIÓN SERIE

TnCK E ENTRADA RELOJ EXTERNO TIMER n

U1RX - U'ITX - U2RX - U2TX E/S RECEPCIÓN/TRANSMISIÓN UAR11 Y UART2

SS1 -SS2 -SCK1 - SCK2 - SDII - SDI2 -S D 01 - SD02

E/S PATITAS PARA MÓDULOS SPI1 Y SPI2

Frgura 2.13. Símbolo, dirección y descripción de las patitas más significativas de los encapsulados de los dsPIC30F.

1 3 . LA FAM ILIA dsPIC33F

D voltaje de alimentación admite un rango comprendido entre 2 y 3,6 VDC. El rango de tempera- ñ a s idéntico a los dsPIC30F. El rendimiento máximo alcanza los 40 MIPS cuando el voltaje de ali­mentación tiene un valor de 3,3 VDC. (Figura 2.14.)

Los aspectos más destacables que incorporan los dsPIC33F son la ampliación en el número de p aas de E/S, la capacidad de la memoria FLASH que alcanza 256 KB, se mantienen los periféri­cos, la disponibilidad del doble de interrupciones, SRAM de hasta 30 KB. No disponen de memo- na 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 periféricos y la memoria.

Page 46: DsPIC Diseño practico de aplicaciones

2 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

RECURSO RANGO DE VALORES

Memoria de Programa FLASH Hasta 256 KB

Memoria de Datos RAM Hasta 30 KB

Memoria de Dalos EEPROM No Dispone

Temporizadores de 16 bits Hasta 9

Módulo de Captura Hasta 8 entradas

Módulo Comparador / PWM Hasta 8 salidas

Conversor A/D de 10 bits 2.2 Mbps, hasta 32 canales

Conversor A/D de 12 bits 1Mbps, hasta 32 canales

UART Hasta 2 módulos

SP1™ ( 8 - 1 6 bits) Hasta 2 módulos

i2crM Hasta 2 módulos

QEI 1Interfaz CODEC 1

CAN Hasta 2 módulos

Figura 2.14. Tabla que presenta las características más 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

Microchip ha clasificado a los 27 modelos de la familia dsPIC33F que actualmente fabrica y co­mercializa en dos categorías atendiendo a su aplicación más apropiada.

1a Dispositivos dsPIC33F de propósito general.2.a Dispositivos dsPlC33F para el control de motores y sistemas de alimentación.

2.5.2. Dispositivos dsPIC33F de propósito general

Los dsPIC33F de propósito general son ideales para una amplia gama de avanzadas de MCU de 16 bits embebidos y en concreto, las variantes con interfaces CODEC son idóneas 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 alimentación

La categoría de control de motores ofrece una gran variedad de aplicaciones relacionadas con el go­bierno de motores, como los de inducción, de fase simple o trifásicos y los de corriente continua. También son muy apropiados para la gestión de los sistemas de alimentación ininterrumpibles, con- versores, módulos para la corrección del factor de potencia, telecomunicaciones u otro equipa­miento industrial. Este grupo está formado por 12 modelos diferentes. (Figura 2.16.)

Page 47: DsPIC Diseño practico de aplicaciones

MODELO PATITAS

FLASHMEMORIA

PROGRAMAKBYTES

SRAM

KBYTES

CDMA

Ch#

TIMER

16-BITS

MÓD.

CAPT.

MÓD.

COMP.

PWM

ESTÁND.

CODECINTERF.

A/D10-BIT

500KBPS

UART sp|TMr c rM CAN

PATITASE/S

(MÁX)

CÓD .

ENCAPS.

ds.PI G3 3 FJ 64G P2 06 64 64 8 8 9 8 8 1 IADC,18ch,1S/H 2* ' - 53 PT

dsPIC33FJ64GP306 64 64 16 8 9 8 8 1 1 ADC,18ch,1S/H 2■

2•" -i

2 - 53 PT

: dsPIC33 FJ64GP706 64 64 16 8 9 8 8 1 2ADC,18ch,2S/H 2 2 2 2 53 PT

dsPIC33Fjl 28GP206 64 128 8 8 9 8 8 1 1 ADC,18ch,1S/H 2 2 2 - 53 PT

dsPIC33FJ128GP306 64 128 16 8 9 8 8 1 1ADC,18ch,1S/H 2 2 2 - 53 PT

dsPIC33FJ128GP706 64 128 16 8 9 8 8 1 2ADC,18ch,2S/H 2 2 2 2 53 PT

dsPIC33FJ256GP506 64 256 16 8 9 8 8— ,—

1 1 ADC,18ch,1 S/H 2 2 2 1 53- i

dsPIC3 3 FJ64C P708 80 64 16 8 9 8 8 1 2ADC,18cli,2S/H 2 2 2 2 69 PT

dsPIC33FJ128GP708 80 128 16 8 9 8 8 1 2ADC,18ch,2S/H 2 2 2 2 69 PT

dsPIC33 FJ64G P310 100 64 16 8 9 8 8 1 1 ADC,18ch,1S/H 2 2 2 85 PT,PF

dsPIC33FJ64GP710 100 64 16 8 9 8 8 1 2ADC,18ch,2$/H 2 2 2 2 85 PT^PF

dsPIC33 FJ 128GP310 100 128 16 8 9 8 8 1 1 ADC,18ch,1S/H 2 2 2 - 85 PT, PF

dsPIC33FJ 128GP710 100 128 16 8 9 8 8 1 2ADC/18chr2S/H 2 2 2 2 85 PT,PF

dsPIC33FJ256GP510 100 256 16 8 9 8 8 1 1 ADC,18ch,15/H 2 2 2 1 85 PT,PF

dsPIC33FJ256GP710 100 256 30 8 9 8 8 1 2ADC,18ch;2S/H 2 2 2 2 85 PT,PF

Figura 2.15. Principales características de los 15 modelos que componen los dsPIC33í de propósito general.

Page 48: DsPIC Diseño practico de aplicaciones

MODELO PATITAS

FLASH

MEM.PROGR.

KBYTES

RAMKB

CDMACh#

TIMER16-BITS

MÓD.

CAPT.

MÓD.

COMP.PWM

ESTÁND.

CONTR.MOTOR

PWM

CODIF.

CUADRATURA

A/D

10-BIT 1.1 MBPS

UART SPI™ |2C™ CANPATITAS

E/S(MÁX)

CÓD.ENCAPS.

ds Pl 0 .3 FJ 64 G¡ P2 0 6 64 64 8 8 9 8 8 8ch SI 1 A/D,16Ch,4S/H 2 2 2 1 53 PT

dsPIC33FJ64GP306 64 64 16 8 9 8 8 8ch SI 2À/D,16Ch,8S/l 1 2 2 2 1 53 PT

dsPIC33FJ64GP706 64 128 8 8 9 8 8 8ch SI 1A/D,16Ch,4S/H 2 2 2 1 53 PT

ds.PIC33 FJ 128GP206 64 128 16 8 9 8 8 8ch SI 2A/D,16Ch,8S/H 2 2 2 1 53 PT

dsPIC33FJ I28GP306 80 64 8 8 9 8 8 8ch SI IA/D,18Ch,4S/H 2 2 2 1 69 PT

dsPIC33FJ128GP706 80 128 16 8 9 8 8 8ch SI 2A/D,18Ch,8S/H 2 2 2 1 69 PT

dsPIC33FJ256GP506 100 64 8 8 9 8 8 8ch SI 1 A/D,24Ch,4S/H 2 2 2 1 85 PT, PF

dsPIC33FJ64GP708 100 64 16 8 9 8 8 8ch SI 2A/D,24Ch,8S/H 2 2 2 2 85 PT ,PF

dsPIC33FJ128GP708 100 128 8 8 9 8 8 8ch SI 1A/D,24Ch,4S/H 2 2 2 1 85 PT, PF

dsPIC33 FJ64GP310 100 128 1 16 8 9 8 8 8ch SI 2A/D,24Ch,8S/H 2 2 2 2 85 PT, PF

dsPIC33FJ64GP710 100 256 16 8 9 8 8 8ch SI 1A/D,16Ch,4S/H 2 2 2 1 85 PT, PF

dsPIC33 FJ 128GP310 100 256 i 20 8 98

8 8ch SI 2A/D,24Ch,8S/H 2 22

2 85 PT, PF

Figura 2.16. Principales características do los 12 modelos que componen los dsPIC33F de control de motores y sistemas de alimentación.

30 dsPIC

. DISEÑO

PRÁCTICO

DE APLIC

ACIO

NES

Page 49: DsPIC Diseño practico de aplicaciones

CONTROLADORES DIGITALES DE SEÑALES (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 tensión nominal 5VDC y los dsPIC33F 3.3VDC. También 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:

26 modelos disponibles

Memoria SRAM de 8 KB

Abundantes periféricos Más periféricos

dsPIC33F

27 modelos disponibles

Controlador de DMA (8 canales)

5 temporizadores 9 temporizadores

Modos de trabajo con baja energía : 1. IDLE 2.SLEEP

Modos de trabajo con baja energía :1. IDLE2. SLEEP3. DOZE (modo de frecuencia más bajá)

Alimentación de 2 a 5,5 V Alimentación de 2 a 3,6 V

Rendimiento: 30MIPS a 4,5 o 5,5 V Rendimiento: 40MIPS a 3,3 V

Pocos vectores de interrupción {62) Muchos vectores de interrupción (118)

Memoria EEPROM -

Memoria f LASH de 144 KB Memoria FLASH de 256 KB

Memoria SRAM de 30 KB

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

2.6. HERRAMIENTAS DE DESARROLLO SOFTWARE

rara mantener la continuidad a los diseñadores con PIC MCU y facilitar su transición a los DSC, Microchip proporciona un paquete de herramientas software para estos últimos muy similar a las utilizadas con los microcontroladores clásicos.

Todo el software se cimienta en el conocido entorno integrado MPLAB IDE, que consiste en un sistema lógico gratuito con un Ensamblador MPLAB ASM30, un simulador software S1M30, un compilador de C, MPLAB C30, y el ínicializador Gráfico 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 diseño software de un proyecto y se adapta a las herramientas hardware de Microchip y otras segundas fuentes. Corre en sistemas operativos Win­dows XP, 2000, Me, 98SE y NT.

Page 50: DsPIC Diseño practico de aplicaciones

32 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

Para el desarrollo y análisis de algoritmos DSP se dispone de la herramienta dsPICworks™ que entre sus posibilidades es capaz de diseñar filtros, generar señales, proporciona operaciones para procesar señales aritméticas y digitales, tiene capacidad de mostrar y cuantificar elementos de una, dos y tres dimensionales.

Una extensa oferta de librerías, muchas gratuitas, están a disposición de los usuarios para facili­tar el diseño de proyectos, tales como los que soportan algoritmos DSP, de reconocimiento de voz, driver para periféricos, CAN, protocolo TCP/IP, MODEM embebidos, etc.

Figura 2.18. Ventana del programa MPLAB VDf que presta una gran ayuda en la fase de inicializa- ción de los programas con DSC, al aportar un entorno gráfico para Ja configuración de los recursos que intervienen.

2.7. HERRAMIENTAS DE DESARROLLO HARDWARE

La arquitectura abierta de los productos de Microchip y su generosa política comercial han conse­guido inundar el mercado de interesantísimas herramientas hardware y software de segundas fuen­tes que optimizan el desarrollo de las aplicaciones con los productos de este fabricante. En la foto­grafía de la F igura 2.19 se muestra el program ador universal de PIC y dsPIC denominado PIC’Burner de la empresa Ingeniería de Micros is temas Programados S. L.

Una herramienta muy eficaz de Microchip es el Programador y Depurador en Circuito MPLAB 1CD-2 que además de grabar diversos microcontroladores y dsPIC depura el código desarrollado en Ensamblador o C. (Figura 2.20.)

Microchip comercializa 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, Micro­chip ha desarrollado un conjunto de tarjetas específicas para desarrollar proyectos en áreas como el control de motores, la conectividad, etc. (Figura 2.21.)

Page 51: DsPIC Diseño practico de aplicaciones

CONTROLADORES DIGITALES DE SEÑALES (DSC) 33

Figura 2.19. Fotografía del programador universal de PIC y dsPIC, de bajo precio, fabricado por Ingeniería de Microsistemas Programados S.L.

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

Figura 2.21. Fotografía de una tarjeta de entrenamiento fabricada por Microchip.

Page 52: DsPIC Diseño practico de aplicaciones

3 4 cJsPIC DISEÑO PRÁCTICO DE APLICACIONES

2.8. APLICACIONES RECOMENDADAS

El fabricante ha clasificado en 6 áreas las posibles aplicaciones de los DSC.

A) CONTROL DE MOTORES

• Bombas industriales.• Lavadoras y aspiradoras.• Equipos de gimnasia.• Tensores de cinturones de seguridad.• Calefacción, ventilación y aire acondicionado.• Refrigeración.• Herramientas eléctricas.• Apertura de puertas.• Control de estabilidad.

Figura 2.22. Los pretensores de cinturones de seguridad son una aplicación recomendada para los dsPIC.. Cortesía de Citroën.

B) CONTROL DE SENSORES

• Sensores de torsión.• Depresión.• De vibraciones.• De golpes.• De lluvia.• De fallos en la red eléctrica.• De rotura de cristales.• Sensores químicos y de gases.• Detección PIR avanzada 2-D.

Page 53: DsPIC Diseño practico de aplicaciones

CONTROLADORES DIGITALES DE SEÑALES (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. Cortesía de SmartHome.

C) AUTOMOCIÓN

• Control de potencia.• Control de estabilidad y balanceo.• Caja de cambios y embrague electrónico.• Dirección hidráulica asistida eléctricamente.• Cancelación de ruido en el habitáculo.• Airbag.• Control de ignición.• Sensor de presencia de ocupantes.• Control del combustible.

Figura 2.24. El airbag es una aplicación recomendada para los dsPIC. en automoción. Cortesía de Volvo.

D) CONECTIVIDA D EN INTERNET

• Monitorización remota.• Contadores automáticos de agua y gas.+ Instrumentación médica remota.• Sistemas de seguridad.• Máquinas expendedoras.• Diagnóstico industrial remoto.

Page 54: DsPIC Diseño practico de aplicaciones

36 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Figura 2.25. Los dsPIC tienen un vasto campo de aplicación y control por Internet de las máquinas ex­pendedoras. Imagen cortesía de ATM Inc..

E) AUDIO

• Reconocimiento de voz.• Altavoces telefónicos.• Redes distribuidas de megafonía.• Efectos especiales en instrumentos musicales.• Cancelación de ruidos.• Reproducción de sonido digital.• Auriculares para la eliminación de ruidos.• Puertos de comunicación para manos libres.• Micrófono activado por la voz.

Figura 2.26. Los aparatos de audio para la reproducción digital del sonido son productos en los que se utilizan DSP. Cortesía de BENQ.

Page 55: DsPIC Diseño practico de aplicaciones

CONTROLADORES DIGITALES DE SEÑALES (DSC) 37

F, GESTIÓN YMONITORIZACIÓN DE SISTEMAS DE AUMENTACIÓN

• Convertidores AC-DC.• Convertidores DC-AC.• Fuentes de alimentación ininterrumpibles (UPS).• Inversores.• Vehículos eléctricos.• Corrección del factor de potencia.• Monitorización de la alimentación en servidores.• Gestión de la alimentación y ahorro de consumo.• Detección de fallos.

Figura 2.27. Las fuentes de alimentación ininterrumpibles (UPS) constituyen un campo de aplicación muy interesante para los dsPIC. Cortesía de Craftsmans Electric.

Page 56: DsPIC Diseño practico de aplicaciones
Page 57: DsPIC Diseño practico de aplicaciones

CAPÍTULO

Arquitectura de la CPU

3.1. DESCRIPCIÓN DEL DIAGRAMA POR BLOQUES

En la Figura 3.1 se presenta el diagrama por bloques correspondiente a la arquitectura inlema del modelo dsPlC3ÜF6010 que se le puede considerar uno de los más representativos. Encapsulado con SO patitas en formato TQFP dispone de casi todos los recursos posibles y cualquier otro componente de la familia contendrá sólo 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 muitifunción.5.° Periféricos diversos.6° Recursos para la gestión del sistema y de la energía.

La memoria de datos RAM (SDRAM) se estructura en dos espacios, llamados X e Y, que per­miten acceso simultáneo y que pueden alcanzar hasta 8 KB de capacidad en el modelo dsPIC30F, siendo el tamaño de todas sus posiciones de 16 bits. También 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 instrucción 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 tamaño de 24 bits, igual que el de la mayoría de las instrucciones. La memoria de instrucciones del modelo dsPIC33F es algo más rápida que la del dsPTC30F. La memoria FLASH de los 33F tra­baja a 3,3 V, con el inconveniente de que sólo puede ser escrita y borrada 1000 veces (Endurance). La memoria de programa puede alcanzar 144 KB como máximo.

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 alimentan una ALU

39

Page 58: DsPIC Diseño practico de aplicaciones

4 0 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

Figura 3.1. Diagrama por bloques correspondiente a la arquitectura interna del dispositivo dsPJC30F6010, considerado como uno de los más completos y representativos.

Page 59: DsPIC Diseño practico de aplicaciones

ARQUITECTURA DE LA CPU 41

- pica de MCU, un Motor DSP que sirve para realizar las operaciones DSP de 40 bits y una uni­dad de división.

Las 7 puertas que agrupan las líneas de E/S para la comunicación con el exterior (PUERTA A, PUERTA B, PUERTA C, PUERTA D, PUERTA E, PUERTA F y PUERTA Q) se caracterizan por ap o rta r varias funciones multiplexadas. En cuanto a periféricos y recursos auxiliares contenidos en d dsP!C30F6010 abarcan a todos los posibles en la familia: Conversor AD, Módulo de Captura, Módulo de Comparación, PWM para el control de motores, Codificador de Cuadratura, Módulos de comunicación (UART, SPI, I2C y CAN), Osciladores, Perro Guardián, etc. También existen recur­sos complementarios para el manejo de la energía y la tensión de alimentación.

3.2. LAS MEMORIAS

Bajo una arquitectura Harvard mejorada la CPU soporta un potente repertorio de instrucciones, la mayoría de 24 bits de longitud y algunas que realizan operaciones específicas DSP. El dirccciona- rniento 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 ignorándose el de más peso, con lo que se puede direc- ::onar un espacio máximo de 4 millones de palabras de instrucción de 24 bits.

0X0001

MEMC^'ACERCANA

S<00X07FF

MAX 64 KB.

ESPACIO V

NOIM PLEM EN TAD O

NUNCA IMPLEMENTADO

0X0000

0X07FE

0X0800

0XFFFE

Figura 3.2. Memoria de datos de los dsPIC.

Page 60: DsPIC Diseño practico de aplicaciones

4 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

El espacio máximo 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 Generación de Direcciones (AGU). La mayoría de las instrucciones tipo MCU operan sólo 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 simultáneo en lectura y la reducción del tiem­po de ejecución de algunas instrucciones.

Una característica especial de los dsPIC es su capacidad de guardar datos en la memoria de pro­grama, existiendo dos métodos para acceder a ellos.

'a) Los 32 KB superiores del espacio de la memoria de datos pueden mapearse en la mitad inferior

del espacio de la memoria de programa como 16 K palabras de 24 bits cada una. Sólo se puede acceder a los 16 bits de menos peso de cada palabra de instrucción. A esta posiblidad se le de­nomina PSV (Visibilidad del Espacio de Programa).

b) También 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.

>'-W

VECTCft RESET

MEM ORIA USUARIO (2 MB)

TAB LA VECTO RES INTERRUPCION

TAB LA ALTER N ATIVA VECTO RES DE INTERRUPCION

M E M O R IA PR OG RAM A FLASH

7FFFFE

M EM O R IA OF D ATOS EEPROM

aocoo-

M EM ORIAC ONFIGURACIÓN

(2M SÌ

R EGISTR OS CONFIGURACIÓN.

-------—-------------------- 1---------

: ■ __________ ____

R EG ISTR O S IDENTIFICACIÓ N

Figura 3.3. Memoria de instrucciones de los dsPIC.

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

Page 61: DsPIC Diseño practico de aplicaciones

ARQUITECTURA DE LA CPU 4 3

Desplazamiento. Además, los espacios X e Y permiten el modo de direccionamiento modular o cir­cular y sólo el espacio X soporta el de inversión de acarreo o bit reverse, ambos muy interesantes para la rápida implementación de los algoritmos DSP.

Hay bastantes instrucciones en el repertorio que son capaces en un ciclo de instrucción 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 instrucción.

3.3. EL CAM INO DE DATOS

Para combinar las funciones aritméticas de una potente MCU de 16 bits con las específicas 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 división. (Figura 3.4.)

Figura 3.4. Esquema del Camino de Datos.

La ALU de 16 bits interviene en las operaciones aritméticas propias de las instrucciones MCU. El Motor DSP contiene un multiplicador rápido 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 b¡- direccional. Con los recursos comentados, una instrucción DSP, como la MAC, puede leer de la me­moria dos operandos simultáneamente, 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 función concreta como se puede ver en la tabla de la Figura 3.5.

Page 62: DsPIC Diseño practico de aplicaciones

4 4 dsPIC. DISFÑO PRÁCTICO DE APLICACIONES

Registros D escripción

WO Registro de trabajo por defecto (VVRFG).

W0-YV3 Registros usados para contener resultados de las operaciones DIV y MUL.

W4-W7 Registros utilizados para guardar operandos de las instrucciones MAC.

W8-W9 Registros usados para direccionar operandos de la instrucción MAC en el espacio X.

VV9-VV10 Registros usados para direccionar operandos de la instrucción MAC en el espacio Y.

W12 Offset de las instrucciones MAC.

W 13 Registro de POST- ESCRITURA del Acumulador.

W14 Marco de la pila.

W15 Puntero de la pila. Por defecto, la dirección de la cima de la pila será la 0x0800.

Figura 3.5. Funciones concretas de los registros existentes en el banco.

Aunque el procesador no admite la segmentación de su cauce, utiliza un mecanismo de prebús- queda con el que accede y predecodifica las instrucciones en el ciclo anterior al de su ejecución, eje­cutando gran parte de las instrucciones en un ciclo y optimizando el rendimiento. Las únicas ins­trucciones que tardan en ejecutarse más 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 prebúsqueda.

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 MULTIFUNCIÓN

El dsPIC30F6010 posee 7 puertas de E/S cuyas líneas soportan varias funciones multiplexadas, ade­más de la propia línea de E/S digital. En la Figura 3.1 se aprecia la existencia de 68 líneas de E/S multifunción, 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 más completos de la familia, los restantes disponen de un subconjunto de las mencionadas puertas en función de su patillaje.

Los dsP!C33F poseen al igual que el dsPIC30F6010, 7 puertas de E/S, cuyas líneas en este caso también soportan varias funciones multiplexadas, además de la propia línea de E/S. Los dsPIC33F pueden tener 87 líneas de E/S multifunción, 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 línea de E/S controla varias funciones multiplexadas en el tiempo, la mayor parte de ellas destinadas a manejar los periféricos integrados, quedando algunas dedicadas al control de los vol­tajes de alimentación, las interrupciones externas, las señales de reloj y las señales del sistema.

Una de las líneas de E/S que maneja más 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.

Page 63: DsPIC Diseño practico de aplicaciones

ARQUITECTURA DE LA CPU 45

Funciones Descripción

PCD Línea de entrada y salida de dalos en la grabación y lectura serie del disposilivo.

EMUt) Patita de entrada y salida de los datos principales del módulo l2C.

ANO Canal analógico de entrada número 0.

CN2 Notificación de cambio de estado correspondiente a la entrada 2.

RBO Línea de E/S digital bidireccional 0 de PUERTA B.

Figura 3.6. Descripción de las diferentes funciones de la RBO.

3.5. PERIFÉRICOS INTEGRADOS

Los periféricos que se incorporan a cada uno de los modelos de la familia dsPIC30F son los más adecuados para las aplicaciones a las que se destinan.

PERIFÉRICOS DE LOS dsPIC30F

Periféricos analógicos Con ver sor AD de 10 bits Conversor AD de 12 bits

Periféricos digitales 5 temporizadores de 16 bits Móduio de Captura con 8 entradas Módulo de Comparación con 8 canales de salida Interfaz para Codificador de Cuadratura Control de Motores PWM

Módulos de comunicación UARJ (2)SPI™ (2)?C™CAN (2)

PERIFÉRICOS DE LOS dsP!C33F

Periféricos analógicos Conversor AD de 10 bits Convérsor AD de 12 bits

Periféricos digitales9 temporizadores de 16 bitsMódulo de Captura con 8 entradasMódulo de Comparación con 8 canales de salidaInterfaz para Codificador de CuadraturaControl de Motores PWMControlador de DMA

Page 64: DsPIC Diseño practico de aplicaciones

4 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

3.WIRESPI'M(2)«f!. a

Módulo DCI (Data Converter lnlerface)(2)$

El conversor AD de 10 bits tiene + /- 1 bit de exactitud y 16 entradas analógicas con 4 amplifi-cadores Sdjnple & H o íd . El tiempo estándar de convérsión es de 2 ¡js/500 ksps. El conversor AD de 12 bits de resolución aunque es más preciso también es más lento, 10 jns/100 ksps.

El módulo PWM para el control de motores proporciona todas las señales necesarias con 4 ge­neradores PWM con dos patitas de E/S cada uno. Disponen de una amplia base de tiempos y dos pa­titas para detección de tallos programables.

La interfaz para los codificadores ópticos incrémentales (QE1) para la medida de la velocidad y el sentido de giro del eje de un motor proporciona todas las señales requeridas para su correcta adap­tación. (Figura 3.7.)

Figura 3.7. Esquema de funcionamiento del sistema que alimenta al codificador óptico incremental

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 módulos de comunicación son muy diversos en los dsPTC y suponen un alto rendimiento en su conectividad. Destacan los módulos UART, SPÍ, Í2C, CODEC y CAN.

o de cuadratur¿i (QEI).

3.6. GESTIÓN DEL SISTEMA Y DE LA ENERGÍA

Esta sección del procesador se muestra en la Figura 3.8 y se encarga de la generación de las señales de reloj, el control y optimización de la energía y la generación de las acciones adecuadas ante los fallos.

Page 65: DsPIC Diseño practico de aplicaciones

ARQUITECTURA DE LA CPU 4 7

Figura 3.8. Esquema simplificado de la sección encargada de la gestión del sistema y do la energía.

En la generación de las señales 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 energía para dar tiempo a que se estabilice el valor de la tensión de alimenta­ción aplicada. También el temporizador de arranque del oscilador tiene la misión de retrasar el fun­cionamiento del procesador para que se estabilice la frecuencia de trabajo del oscilador principal.

La activación de la patita MCLR# (Master Clear Reset) puede generar un Reset. También se consigue un Reset al aplicar el voltaje de alimentación (POR: Power On Reset) o cuando la tensión áe alimentación 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 Guardián similar al que existe en los MCU que provoca un Reset cuando se desborda y resuelve las pérdidas 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 energía: 1D- LE y SLEEP. El dsPIC33F además de estos dos estados también dispone de otro llamado DOZE. el cual aumenta temporalmente el ciclo de instrucción del procesador al bajar la frecuencia de funcio­namiento, reduciendo de esta manera el consumo de energía.

Page 66: DsPIC Diseño practico de aplicaciones
Page 67: DsPIC Diseño practico de aplicaciones

ino Datos

- 1 . INTRODUCCIÓN

El Camino de Datos de un procesador es la sección encargada de realizar todas las operaciones que eva la instrucción en curso. Soporta funciones aritméticas, lógicas, de desplazamiento, movi-

nto, rotación y manipulación 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 específicas de un DSP y se organiza en 4 bloques principales:

1. BANCO DE REGISTROS 2 ALUDE 16 BITS3. MOTOR DSP4. UNIDAD DE DIVISIÓN

±2. EL BANCO DE REGISTROS W

r.msta de 16 registros de 16 bits cada uno y se denominan W0-W15, pudiendo contener datos, di­c c io n e s y desplazamientos u “offset”, dependiendo de la instrucción que les utilice. Cada uno lie-

isignadas funciones diferentes. (Figura 4.1.)Como se indica en la Figura 4.1, algunos registros W actúan con algunas instrucciones conte-

nendo una información concreta, mientras otros asumen una función determinada.En los microcontroladorcs PTC (MCU) existen instrucciones que no especifican el registro de tra-

fetjo que manejan y toman por defecto el que actúa como Acumulador. También sucede lo mismo los DSC, en los que se toma por defecto como WREG al registro WO.

Como se muestra en el esquema de la Figura 4.2, el Banco de Registros comparte información bhi todos los bloques que componen el Camino de Datos.

Page 68: DsPIC Diseño practico de aplicaciones

5 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

15

RESULTADOMULYDIV

OPERANDOSINSTRUCCIONES

MAC

DIRECCIONESOPERANDOS

MAC

OFFSET INSTRUCCIONES MAC POST-ESCRITURA INSTRUCCIONES MAC

PUNTERO MARCO

PUNTERO PILA

W0

W1W2

W3

W4

W5

W6

W7'W8W9

W10

W11

W12

W13

W14

W15

0WREG IMPLÍCITO (ACUMULADOR)

gFigura 4.1. Estructura del banco de registros de trabajo W.

AB j

UNIDADDE

DIVISIÓN

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

BUS DE DATOS X

SEÑALESDE

CONTROL

Figura 4.2.

4.3. LA ALU DE 16 BITS

Las instrucciones lógico-aritméticas correspondientes a la sección MCU de los DSC las realiza una ALU de 16 bits que también controla 5 bits del Registro de Estado (SR) que actúan como señalizadores del resultado. En la Figura 4.3 se presenta la ubicación de dichos bits y su no­menclatura:

Page 69: DsPIC Diseño practico de aplicaciones

EL CAMINO DE DATOS 51

SRH contiene los señalizadores para operaciones aritmético-lógicas DSR mientras que SRL contiene los señalizadores para operaciones MCU.

REGISTRO DE ESTADO (SR)

figura 4.3. El Registro de Estado (SR) contiene cinco bits señalizadores del resultado de la ALU pa­ra operaciones MCU.

La ALU realiza operaciones con operandos de 16 bits de suma, resta, desplazamiento de un bit. otras de tipo lógico (AND, OR, EOR) y de complemento 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 través 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 man- Kfier la compatibilidad con los PIC el resultado se reescribe con tamaño palabra, no modificando el byte de más peso y controlando los señalizadores para que actúen para dicho tamaño. Las instruc- ciones con operandos de tamaño byte sobre registros de trabajo sólo afectan al byte de menos peso.

Page 70: DsPIC Diseño practico de aplicaciones

52 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Para facilitar el manejo combinado de instrucciones con operandos de 8 y de 16 bits hay dos ins­trucciones especializadas, la de Extensión de Signo (SE), que toma el valor del byte cargado en el registro W o en la posición 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 instrucción de Extensión de Ceros (ZE), que pone a cero los 8 bits de más peso de un registro W o de una posición de memoria y el valor ob­tenido lo carga en un registro W.

4.4. EL MOTOR DSP

Este bloque del Camino de Datos de los DSC se compone de un conjunto de recursos físicos que tie­nen la misión de soportar las instrucciones que conllevan operaciones complejas empleadas para re­solver los principales algoritmos aplicados en el procesamiento digital de las señales. La instrucción MAC de Multiplicar y Acumular es una de estas instrucciones típicas, 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 sólo 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 Motor DSP con su conexionado prin­cipal, que consta de los siguientes elementos:

1. Multiplicador rápido 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. Lógica de redondeo.6. Lógica de saturación.

Las instrucciones DSP con dos operandos proporcionan estos últimos al Motor DSP desde los re­gistros W4, W5, W6 o W7. Los valores de dichos registros son prebuscados a través 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. También las instruc­ciones MCU que utilizan el Registro de Desplazamiento reciben los operandos por el bus de datos X.

Los resultados producidos en el Motor DSP se guardan en alguno de los Acumuladores A o B, si así se define en la instrucción, o bien en cualquier posición de la memoria de datos a través del bus de datos X. Las instrucciones MCU que emplean el Registro de Desplazamiento también sacan el resultado por el bus de datos X.

Obsérvese en el esquema del Motor 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 más operandos.

Page 71: DsPIC Diseño practico de aplicaciones

EL CAMINO DE DATOS 53

]_ ACUMULADOR B (40 BITS)

SUMAOOR

REGISTRODESPLAZAMIENTO

MULTIPLICADOR 17 x 1 7 BITS

CONVERSION 16 A 17 BITS

MPX 3 M PX4

MPX 6

MPX 2

RELLENOCEROS

Figura 4.5. Esquema general del Motor DSR

4.4.1. M u ltip lic a d o r

El multiplicador rápido 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 números enteros de 32 bits y con fracciónales tipo 1.31 (Q.31).

Page 72: DsPIC Diseño practico de aplicaciones

5 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

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

O

Figura 4.6. interconexión del multiplicador rápido de 17 x 17 bits.

El bit IF del registro CORCON establece si la operación 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, MUL.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 . Representación en modo entero y en modo fraccional

La representación de números enteros se efectúa en complemento a 2, donde el bit de más peso esel de signo. El rango de un número entero con N bits abarca desde - 2 N 1 hasta 2;N 1 - 1.

EJEMPLO 1

¿Qué valor representa el número entero de 16 bits 4001 expresado en hexadecimal? (Figura 4.7.)

,N -1

0 : 0 0

Figura 4.7. Valores que representan los bits del número entero 4001 en hexadecimal.

Page 73: DsPIC Diseño practico de aplicaciones

EL CAMINO DE DATOS 55

RESULTADO

4001 Hex. = 2 U + 2o = 16384 + /= 16385

EJEMPLO 2

¿Qué valor representa el número entero de 16 bits C002 H ex? (Figura 4.8.)

11 o j o 0 i 0

.1... !0 0 0 0 0 0 0 0 1 i 0 i

5 2 14 o13 Á'l;2 2 11 2 10 2~ 2 8 2 2 g 2 5 2 4 2 3 2 2 2 1 2 o

Figura 4.8. Valores que representan los bits del número entero C002 Hex.

RESULTADO

CW 2 Hex. = - 2 '5 + 214 + 2 ' = -32768 + 16384 + 2 = -16382

En los números fracciónales se representa la parte fraccionaria en complemento a 2. El bit de más reso es el de signo y se supone implícitamente que detrás del bit de signo está situado el punto de b parte fraccionaria. El rango de un número fraccional de N bits en complemento a 2 está com- rrendido entre -1 .0 y (1 - 2 ,_N).

EJEMPLO 3

Qué valor representa el número fraccional de 16 bits 4001 Hex? (Figura 4.9.)

m: 1 O 0 j O O

-2o. 2 '1 2'2 2 3 2a

Figura 4.9. Valor que representan los bits correspondientes al número fraccional 4001 Hex.

RESULTADO

-001 Hex. = 2-' + 2~'5 = 0,5 + 0,000030518 = 0,500030518

EJEMPLO 4fi w 8¡8L! í TPf-

Qué valor representa el número fraccional de 16 bits C002 Hex? (Figura 4.10.) ' ,

1:í: o 0 O 0 0 : 0

■3 o-9 o-10 o-11 ^-12 0 -13 o-14 o-15

\ y

2*4 2*5 2 ' e 2 2 ° 2 'y 2 '1U 2"11 2"'^ 2"1J 2",/} 2-2o. 2 1 2'2 2‘3

Figura 4.10. Valor que representan los bits del número fraccional C002 Hex

RESULTADO

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

Page 74: DsPIC Diseño practico de aplicaciones

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

56 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

TAMAÑO

RANGO

M ODO ENTERO(-2n i a 2 n'-1 )

RANGO M ODO FRACCIONAL

(-1.0 a 1 - 2 1N)

RESOLUCIÓN

MODO FRACCIONAL

16 -32.768 HASTA 32.767-1,0 HASTA (1-2*15)

FORMATO Q. 153,052 x IO'5

32-2.147.483.648 HASTA

2.147.483.647-1,0 HASTA (1-2’3')

FORMATO Q.314,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 números de 16, 32 y 40 bits.

4.4.2. Acumuladores A y B

El Motor 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 multiplicador 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. 16.15. 9

ACCxU ACCrH ACCxL

Figura 4.12. Cada Acumulador 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­túa a la derecha del bit 31.

4.4.3. Sumador/Restador de 40 bits

El Motor 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 (Multiplicar y Restar) y MPY.N (Multiplicar y Negar).

Existen 6 señalizadores en el Registro de Estado (SR) que indican sobrepasamiento o saturación en las operaciones realizadas por el sumador de 40 bits. (Figura 4.14.)

Page 75: DsPIC Diseño practico de aplicaciones

El. CAMINO DE DATOS 5 7

M P X 3 M P X 4

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

Figura 4.14. Situación en el Registro de Estado de los 6 señalizadores del resultado de las operacio­nes del Sumador de 40 bits.

Cuando el señalizador OA = 1 significa que se ha producido sobrepasamiento en los bits de guarda (32-39) de ACCA en la operación efectuada por el Sumador de 40 bits. OB informa de la misma situación para ACCB, mientras que OAB es el resultado de la operación lógica OR entre OA y OB. Se puede programar el procesador para que cuando se active O A u OB se genere una excepción de error aritmético programando los bits OVATE y OVBTE del registro de control de interrupciones INTCON1<10:9>.

' Los señalizadores SA y SB informan que en la ejecución de la última instrucción que ha usado el Sumador de 40 bits se ha producido saturación en el resultado depositado en ACCA o en ACCB, respectivamente. Esto indica que se ha superado el mayor valor posible del rango (saturación en el bit 31 para números de 32 bits o saturación en el bit 39 para números de 40 bits). El bit SAB pro­cede de la operación lógica OR entre SA y SB.

Page 76: DsPIC Diseño practico de aplicaciones

58 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Cuando no funciona el módulo de Saturación la activación de SA o SB genera una condición de sobrepasamiento catastrófico que puede generar una excepción por error aritmético activando el bit COVTE del registro TNTC0N1<8>.

Estos señalizadores se actualizan cuando se realiza una instrucción 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 actúa como destino en la instrucción en el espacio de la memoria 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 operación sé puede escribir directamente en W13 o en la dirección de la memoria de datos direccionada por [W13J+=2-

El módulo 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 módulo se controla con el bit RND del registro C 0R C 0N <1>. El bit correspondiente al módulo de Saturación es SADW del registro CORCON<5>.

Se pueden resumir en 6 los modos de funcionamiento del Motor DSP.

•' • . ; . . . . :;,vV v \ .. - : . ; -1°: Multiplicación en modo entero o fraccionaI.2 o Redondeo convencional o convergente.3 C Saturación automática para ACCA.4." Saturación automática para ACCB.5 ° Saturación automática para escritura de datos en memoria.6.° Selección del modo de saturación 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­méticos de hasta 16 bits a la derecha o a la izquierda en un solo ciclo. Se emplea para desplaza­mientos de múltiples bits en instrucciones DSP y MCU.

Para determinar el número de bits a desplazar se precisa de un número 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 aritmético varios bits a la derecha en una posición de memoria. LSR: desplazamiento lógico varios bits a la derecha en una posición de memoria.SL: desplazamiento a la izquierda varios bits en una posición 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 División

El repertorio de instrucciones de los DSC soporta las siguientes dedicadas a la división:

Page 77: DsPIC Diseño practico de aplicaciones

EL CAMINO DE DATOS 59

En todas las instrucciones de división 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 también. En ¿aso de ser de 32 bits se debe situar en una pareja de registros W adyacentes.

Todas las instrucciones de división son interactivas y en ellas se ejecuta 18 veces un bucle me- ¿an te la instrucción REPEAT. Después de cada iteración 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 atención a la interrupción ISR.

Page 78: DsPIC Diseño practico de aplicaciones

ANEXO

Manipulación de datos en el Motor DSP

■w íSy.

ta>viv.

A.1. REPRESENTACIÓN DE DATOS

El multiplicador del Motor 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 (también 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 multiplicación MCU entre valores con signo y sin signo, y permite realizar correc­tamente la operación (-1.0 x -1.0). El resultado de la operación puede ser un entero de 32 bits (cono 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 añade 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. SATURACIÓN DE LOS ACUMULADORES

La saturación de los acumuladores se basa en el empleo de la aritmética de saturación, 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 operación aritmética excede del rango establecido se produce una condi­ción de desbordamiento, que significa que el resultado es incorrecto. En el caso de utilizar satura­ción, se corrige el error manteniendo los límites del rango que se ha desbordado. (Figura A .l.)

60

Page 79: DsPIC Diseño practico de aplicaciones

EL CAMINO DE DATOS 61

Si el desbordamiento es producido por :

a) La suma de dos números positivos

b) La suma de dos números negativos

se sustituye la salida errónea por el máximo valor positivo, se sustituye la salida errónea por el mínimo valor negativo.

Aritm ética m odular Aritm ética con saturación

2 5 0 + 10 = 5 255

10-269 -4 -255

Figura A.1. Ejemplos con aritmética modular y con saturación. Cuando de sobrepasan los límites, la aritmética con saturación corrige el resultado al valor absoluto máximo posible.

La aritmética con saturación es eficiente en el procesamiento digital de señales. En el caso de que los valores de la señal excedan los valores límite del rango se puede utilizar la saturación para re­solver el problema. (Figura A.2.)

7FFFh

OOOOh

8000h

Figura A.2. Corrección por saturación de la señal a representar.

dos modos opcionales de saturación que afectan a la salida del sumador deLos dsPIC soportan 40 bits :

a) Saturación normal (1.31)b) Súper Saturación (9.31)

Para la selección del modo de saturación se utilizan varios bits del registro CORCON. El bit SA­TA habilita y deshabilita la saturación del acumulador A y el SATB habilita y deshabilita la satura­ción del acumulador B.

Una vez activada la saturación, la selección del modo de saturación se realiza a través del bit ACCSAT. Por defecto la saturación siempre está deshabilitada.

Por otro lado, el bit SATDW habilita y deshabilita la saturación en la escritura, la cual afecta a la instrucción SAC, que almacena el Acumulador en la memoria de datos, y a la post-escritura de los acumuladores.

Cuando la saturación está deshabilitada no se altera el resultado del sumador de 40 bits y traba­ja en un rango de -256 a ~ +256.0. Si excede de este rango de valores, el resultado no se satura y mantiene el valor aunque este sea incorrecto.

Page 80: DsPIC Diseño practico de aplicaciones

62 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Para manejar esta situación se utiliza la condición de “overflow catastrófico”, la cual se señali­za con un hit de flag en el registro TNTCON1, que puede gestionar una excepción Mcith Error (Error Aritmético).

A.2.1. Saturación normal

La saturación 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 saturación normal está habilitada, la salida del sumador está limitada 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 operación destruye el bit de signo, el suma­dor saturará el resultado al máximo valor negativo de 32 bits o al máximo valor positivo de 32 bits. (Figura A.3.)

Máximo valor positivo de 32 bits: QxQQ7FFFFFFF (~+1.0)

Mínimo valor negativo de 32 bits: 0xFF80000000(-1.0)

3-9 ACCxU a r»r' Li ACCxL 32 31 ACCxH 16 15 01111 1111 0000 0000 0000 0000 | 0000 0000 0000 0000

Figura A.3. Representación del máximo valor positivo y negativo con 32 bits.

En este tipo de saturación nunca se producirá overflow, ya que se restringe el resultado a 32 bits y los 8 bits restantes son para recoger la extensión de signo.

A.2.2. Súper saturación

La súper saturación 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 saturación 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, olo que es lo mismo en el bit 39 del acumulador.

Si una operación destruye el bit de signo el sumador saturará el resultado con una de estas dos opciones :

a) El máximo valor negativo de 40 bits.b) El máximo valor positivo de 40 bits.

Page 81: DsPIC Diseño practico de aplicaciones

EL CAMINO DE DATOS 63

Máximo valor positivo de 40 bits: 0x7FFFFFFFFFF (~+25’6.’0)

ACCxH « A C C xl39 ACCxU 32 31 16 15

01111111 g 1111111111111111

M áxim o va lor negativo de 40 bits: 0x8000000000 (-256.0)

39 ACCxU 32 31

1000 0000 IACCxH ACCxL

16 15

0000 0000 0000 0000

Figura A.4. Representación del máximo valor positivo y negativo con 40 bits.

La súper saturación permite realizar operaciones que admitan un rango mayor (±256) que la sa­turación normal (± 1 ) aunque ambos procedimientos mantienen la precisión de la parte fraccionaria con 31 bits.

A.2.3. Saturación de escritura

Existe otro tipo de saturación que no tiene nada que ver con las comentadas anteriormente, se trata de la saturación en la escritura del bus de datos X, que se origina cuando se almacena el Acumula­dor en una posición de la memoria de datos mediante una instrucción SAC. El Acumulador tiene 40 bits y tanto el bus X por el que se transfiere, como la posición de la memoria de datos son de 16 bits, para lo cual sólo se almacenan los 16 bits correspondientes al campo ACCxH.

La saturación de escritura es accesible a través 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 conversión posible, partiendo del valor de 40 bits del Acumulador.

En esta saturación 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 posición de 16 bits en una instrucción SAC, o bien, al registro W13 en las instrucciones DSP con post-escritura.

La saturación de escritura es similar a la saturación normal, pero sólo se usan los 16 bits de ACCxH, por lo que el rango de valores comprendo de —1.0 a ~ 1.0, pero con una precisión de 15 bits (1.15 en vez de 1.31). El valor máximo será 0x7FFF (~ 1.0) y el mínimo 0x8000 (-1.0).

A.3. REDONDEO

Cuando se ejecuta la instrucción SAC.R o se lleva a cabo la post-escritura del acumulador, es nece­sario realizar una operación de redondeo para convertir el dato extraído 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 según el valor de ACCxL, que sólo se utiliza para realizar dicha función de redondeo.

El redondeo, como la saturación de escritura no modifican el valor contenido en el acumulador, sino que crea uno nuevo de 16 bits a partir de aquél 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.

Page 82: DsPIC Diseño practico de aplicaciones

6 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

a) Redondeo Convencional: Es el sistema más sencillo y consiste en redondear hacia arriba ACCxH cuando el bit de más peso de ACCxL vale 1, lo que significa que ACCxL ^ 0x8000. En este caso el redondeo hacia arriba añade 1 al valor de ACCxH, que es el valor final de 16 bits. Este modo también es conocido como “biased” (parcial).En el caso de que ACCxL < 0x8000 se añade 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, añade 1 a ACCxH, cuando se da una de estas dos opciones;

1 ACCxL es mayor a 0x8000.2.a ACCxL es igual a 0x8000 y el primer 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 añade 0 al valor de ACCxH en el redondeo convergente.

Este sistema también es conocido como “unbiased” (imparcial).

Page 83: DsPIC Diseño practico de aplicaciones

CAPÍTULO

5 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­sión y características principales de un conjunto de registros de la CPU. En la tabla de la Figura 5.1 se describe el nombre, la dirección que ocupa en la memoria y la descripción de los registros funda­mentales, que manejan las instrucciones del repertorio de los DSC. Los 2 KB iniciales de la memo­ria de datos están destinados a contener los registros específicos de control SFR del procesador.

NOMBRE REGISTRO DIRECCIÓN DESCRIPCIÓN

VVO - VV15 0000-001 c BANCO DE REGISTROS DF TRABAJOSPLIM 0020 REGISTRO DEL LÍMITE DEL PUNTERO PILA (SP)

ACCAL - ACCAH - ACCAU 0022 - 0024 - 0026 REGISTROS DE ACCA (40 BITS)aCCBL - ACCBH - ACCBU 0028 - 002A - 002C REGISTROS DE ACCB (40 BITS)

PCX - PCH 002 E - 0030 REGISTROS DEL CONTADOR DF PROGRAMA PC {23 BITS)TBLPAG 0032 REGISTRO DF DIRFCGONFS PARA INSTRUCCIONES DE TABLAPSVPAG 0034 REGISTRO DE PÁGINA PARA VISIBILIDAD DEL ESPACIO DE PROGRAMA

RCOUNT 0036 REGISTRO CONTADOR DE BÚCl FS "RFPFAT"DCOUNT 0038 REGISTRO DE CONTADOR DE BUCLES "DO"

DOSTARTL - DOSTARTH 003A - 003C REGISTROS PARA DIRECCIÓN INICIO DE BUCLE "D O "DOENDI - DOENDH 003 E - 0040 REGISTROS PARA DIRECCIÓN FINAI DF BUCLE "D O "

SR 0042 REGISTRO DE ESTADOCORCON 0044 REGISTRO DE CONFIGURACIÓN DEL NÚCLEOMÛDCON 0046 REGISTRO CONTROL DIRECCIONAMIENTO MODULAR XXMODSRT 0048 REGISTRO DIRECCIÓN INICIO DIRECCIONAMIENTO MODULAR XXMODEND 004A REGISTRO DIRECCIÓN FINAL DIRECCIONAMIENTO MODULAR XYMODSRT 004C REGISTRO DIRECCIÓN INICIO DIRECCIONAMIENTO MODULAR YYMODEN'D 004E REGISTRO DIRECCIÓN I INAL DIRECCIONAMIENTO M O D U l AR Y

XBRFV 0050 REGISTRO PARA DIRECCIONAMIENTO "BIT REVERSE"

DI5ICNT 0052 REGISTRO CONTADOR DESACTIVACIÓN INTERRUPCIONES

- 0054 - 007E RESERVADOS

Figura 5.1. Tabla que recoge el nombre, la dirección y la descripción 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

Page 84: DsPIC Diseño practico de aplicaciones

6 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

En la Figura 5.2 se ofrece un esquema interno con la nomenclatura de los principales registros usados por el programador.

REGISTROS RESULTAOO D IV Y M U L

REG ISTR O S DE O PERAN DO S MAC

R EG ISTRO S DE D IRECCIO NES DE O PER AN DO S MAC

REGISTROS SOMBRA PARA PUSH.S Y POP.S

R EG ISTRO S SO M BRA * DO '

S - REGISTROS DE TR ABAJO

REG ISTR O LIM ITE DEL P U N T E R O PILA

ACC AUv - v . w V

ACCAH A C C AL

ACCBU

- . . . . . . . . . ..ACCBH ACCBL

TLBPAG .

D IR EC C IO N ES INSTRUCCIO NES DE TABLA

D IR E C C IO N E S V IS IB ILID AD ESPACIO DE PRO G RAM A

15 O

C O NTADO R DE BUCLES DO

%PC

CO NTAO O R DE PR O G R AM A

DOSTART

DOEND

D IR EC C IO N FINAL BUCLE DO

CORCON

D IRECCIO N IN IC IO BUCLE DOI

REG ISTRO CO N FIG U R AC IO N N UCLEO

Figura 5.2. Representación gráfica de los principales registros del modelo de la CPU que utiliza el programador de aplicaciones en lenguaje Ensamblador.

Page 85: DsPIC Diseño practico de aplicaciones

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 tie- n una longitud de 16 bits cada uno y se denominan W0-W15. Dichos registros soportan muchas -r:>iones en la ejecución de las instrucciones del repertorio.

Las instrucciones más comunes utilizan estos registros de trabajo para contener datos y direc- ; nes de memoria. Por ejemplo, la instrucción MOV W3, [W6J mueve el contenido del registro W3i la posición de memoria cuya dirección está depositada en W6. El operando fuente es W3 mientras t3De el destino está direccionado por W6. Otra instrucción que emplea los registros de trabajo para a n e ja r operandos es ADD [W2], W4, W6, en la que un operando fuente es el contenido de la di­sección apuntada por W2 y el otro el valor de W4. El resultado de la suma de los dos operandos se deposita en W6 que actúa como operando destino.

Existe un tipo de instrucciones que utiliza el registro WO como registro de trabajo implícito cuan- ic se le referencia como WREG. Son instrucciones similares a las que hay en el repertorio MCU en fas que se hace una referencia implícita a un registro de trabajo que actuaba como Acumulador en .i ALU. Por ejemplo, la instrucción ADD 0x3F00, WREG suma el contenido de WT0 con el alma­cenado en la dirección 0x3F00 y deposita el resultado en WO.

Como se desprende de la tabla de la Figura 5.1 los registros W0-W15 están 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 instrucción MOV 0x0002,0x0004.Al ocupar cada registro W un par de posiciones de memoria de tamaño byte se manipulan da-

los tipo palabra. El resultado de una operación con datos de tamaño byte afecta al byte de menos pe- del registro de trabajo.

i Después 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 dividisión y W 1 el resto, mientras que W3:W2 guardan el resultado de la multiplicación. Además actúan 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 actúa como desplazamiento u “offset” y permite incrementar o decremen- tar 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.W14 trabaja como puntero del Marco 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 SPLÍM que guarda el límite 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 información que se envía o se recibe cuando ocurre algún suceso de­terminado. Ningún registro sombra puede ser accedido directamente.

Page 86: DsPIC Diseño practico de aplicaciones

6 8 dsPIC. DISEÑO PRÁCTICO 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 (sólo 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 cómodamente los contenidos de estos registros en las llamadas a subrutina y en las rutinas de interrupción.

2) La instrucción 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 INSTRUCCIÓN DO

¿5—-----*.... .........— «........—DCOUNT

1

22.DOSTART

DOEND1

Figura 5.3. Representación gráfica de los dos conjuntos de registros sombra.

5.4. PUNTEROS DE LA CIMA DE LA PILA Y DEL MARCO DE LA PILA

El registro W 15 funciona como puntero de la Cima de la Pila y contiene la dirección de la posición más alta pudiéndose modificar automáticamente 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 dirección 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 específicas (SFR). Cuando W15 se carga con un valor inferior a 0x0800 el procesador genera una excepción de “error de Pila”.

REGISTROS SOMBRA PARA PUSH.S Y POP.S

Page 87: DsPIC Diseño practico de aplicaciones

MODELO DEL PROCESADOR PARA EL PROGRAMADOR 69

En la Figura 5.4 se supone que W15 está cargado con el valor 0x0800 y se ejecuta la instrucción CALL para producir una llamada a subrutina. Para salvar la dirección 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, W15 se incrementa automáticamente en 4, que son los bytes utilizados para guardar al PC. Obsérvese en la figura que el byte de más peso de la pa- abra donde se almacena PC<22:16> se carga con ceros.

W 15=0x0800 (ANTES DEL CALL)

W 15=0x0804 (DESPUES DEL CALL)

Figura 5.4. Al salvarse en la Cima de la Pila el PC que contiene la dirección de retorno al programa principal, W15 se auto-incrementa en 4 unidades automáticamente.

MEMORIA DE DATOS

RAM

15 _ 8 7

PC <15:0> : : : .B 0000 0000' : PC <22:16>

DIRECCIONESCRECIENTES

La instrucción 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 W2 y después auto-incrementa W 15 en 2 uni- :ades. Con la instrucción 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 automáticamente.

La instrucción PUSH W2 es equivalente a MOV W2, [W15++], y POP W2 produce el mismo resultado que MOV [-W 15J, W2.

El registro SPLIM guarda el límite de la Pila o el valor máximo 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 detección del desbordamiento de la Pila hasta que el programador no cargue a SPLIM con un valor válido.

Un Marco de Pila es una porción de la misma que se destina a una subrutina concreta. W14 contiene la dirección del Marco y se inicializa y se abandona dicha función con las instrucciones LNK y ULNK, respectivamente. Cuando no se usa W14 como puntero del Marco 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 es- lado y de las condiciones especiales que se han producido en el resultado de la operación aritméti­co-lógica que se acaba de realizar, bien en la sección MCU o en la DSP.

El byte de menos peso se denomina SRL y se corresponde con la sección MCU. Guarda la in- íormación de los siguientes señalizadores:

Page 88: DsPIC Diseño practico de aplicaciones

70 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

•■■■■:■ i i f i

• N es el bit de signo, y si no se trabaja con signo es simplemente el bit de más peso.• QV indica que el resultado de la operación realizada ha producido un sobrepasamiento.• Z indica que el resultado de la operación realizada es cero.• C es el señalizador 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 interrupción 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 aritméticas de la sección MCU y la DSP.

El byte de más 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 operación lógica OR de OA y OB. De esta manera basta con comprobar un solo señalizador en lugar de mirar los dos anteriores.

• SA y SB informan de la existencia de saturación realizada por el Sumador de 40 bits sobre el Acu­mulador A o B, respectivamente.

• SAB se obtiene de la operación lógica OR de SA y SB.• DC advierte del Acarreo/Llevada del 4Q bit en las operaciones MCU (útil para operaciones BCD).• DA informa si hay un bucle activo DO.

5.6. EL REGISTRO DE CONTROL DEL NÚCLEO (CORCON)

En este registro reside el bit IPL3, que concatenado con los 1PL<2:0> de SR conforman el código que determina el nivel de privilegio de interrupción de la CPU. Otros bits se destinan al control de la operación de multiplicación 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 más peso de CORCON no es­tán implementados y siempre se leen como ceros.

REGISTRO DE CONTROL DEL NÚCLEO (CORCON)i«? ...........- ------------------- a --------- ------ -------- -------------------cli s a * Gs EBT DL2 bu ;PL0 SATA SATB SATOW ACGSAT | !PL3 psv- _ RND*•!•' *1

'F J

Figura 5.6. Distribución de los bits del registro de control del núcleo CORCON.

Page 89: DsPIC Diseño practico de aplicaciones

MODELO DEL PROCESADOR PARA EL PROGRAMADOR 71

A continuación se describe la misión de cada uno de los bits de CORCON:

- ; . .................................... ..... ...............................................• US: con este bit se controla que la multiplicación DSP se realice sin signo (1) o con signo (0).• EDT: cuando este bit vale 1 la ejecución del bucle DO finaliza al completarse la iteración en curso.• DL<2:0>: estos tres bits indican el nivel de anidamiento del bucle DO (0-7).• SATA: permiso/prohibición para la saturación de ACCA (1/0).• SATB: permiso/prohibición para la saturación de ACCB (1/0).• SATDW: activación/desactivación de saturación en la escritura en ei espacio de datos (1/0).• ACCSAT: bit que selecciona el modo de saturación del Acumulador (1: normal y 0: supersaturación).• IPL3: bit 3 que sirve para determinar el nivel de prioridad efe interrupción, junto con IPL<2:0> del

registro de estado SR.• PSV: permiso/prohibición de Visibilidad del Espacio de Programa (PSV) del espacio de datos (1/0).• RND: bit para la selección del modo de redondeo (1: redondeo convencional y 0: redondeo con­

vergente).• IF: bit para la selección del formato de los operandos de multiplicación (1: operandos en modo en­

tero y 0: operandos en modo fraccionario).

5.7. OTROS REGISTROS DE CONTROL

Para completar una visión general del conjunto de registros importantes que intervienen en la pro­gramación de los dispositivos DSC, se describen de forma resumida los siguientes.

TBLPAG: Registro de Página para las instrucciones de TablaEn este registro se guardan los 8 bits de más peso de la dirección 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 Página para Visibilidad del Espacio de ProgramaLa “Visibilidad del Espacio de Programa” permite al usuario mapear una sección 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 través 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 ModularSe empica para activar y configurar el modo de direccionamiento modular o circular.

XMODSRT, XMODEND: Registros de inicio y Fin para el Direccionamiento ModularEl registro XMODSRT contiene la dirección inicial y el XMODEND la dirección 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 ModularIgual misión que los anteriores, pero referidos al espacio de memoria Y.

XBREV: Registro para el Direccionamiento por Inversión de Acarreo o “bit-reverse”Contiene el “modificador, que es dependiente del tamaño del buffer que se utiliza en el direc- cionamiento por acarreo invertido o “bit-reverse” .

DISICNT: Registro Contador para Desactivación de InterrupcionesSe utiliza con la instrucción D1S1 para desactivar las interrupciones de prioridad 1 a 6 durante el número de ciclos indicado por este registro.

Page 90: DsPIC Diseño practico de aplicaciones
Page 91: DsPIC Diseño practico de aplicaciones

& sn s$

CAPITULO

m f La memoria de datos

.

*. LOS ESPACIOS DE LA MEMORIA 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 di- mamiento 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 iden en 5 zonas:

• • ‘ *

* Espacio SFR, destinado a los registros específicos de control (2 KB).Espacio de datos X (tamaño según modelo de dsPIC).Espacio dé datos Y (tamaño según 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 ds- 5F existen memorias de distintos tamaños: 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 “Memoria Cercana” se caracteriza porque sus posiciones pueden ser accedidas utilizando únicamente los 13 bits del

de dirección 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 según se trate de instrucciones MCU o y según se realice una lectura o una escritura. En todas las operaciones de escritura de datos,

73

Page 92: DsPIC Diseño practico de aplicaciones

7 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

SFR <

ESPACIO SRAM ) 8KB

W m;

ESPACIO SFR (2KB)

•ESPACIO DE DATOS X

(4KB)SSSfiSfl

à i ?

OPCIONALMENTE MAPEABLE EN LA MEMORIA '

DE PROGRAMA

0x0000

0X07FE0x0800

MEMORIA >- CERCANA

(8KB)

,

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

.

.

0x17FE0x1800

0x1 FFE

0x27FE0x2800

NO DISPONIBLE

■ ' : ■ ■ . ■ •- ---- ----------- --------------------• IV. ’. V. V•/.•'vX'IV/ -V/ /.yV-V/.,.,-,-. . v.-

g m m m . 8 1 ••ESPACIO DE DATOS X NO IMPLEMENTADO

(32 KB)

0x8000

íSí^íívÁM^á*!

'.

P l l |É lÉ f _____ \_____ ¡OxFFFE

Figura 6.1. 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 instrucción 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­multánea a los espacios X e Y. En esta situación los registros W8 y W9 actúan 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 esquemática.

Page 93: DsPIC Diseño practico de aplicaciones

LA MEMORIA DE DATOS 75

SRAM SRAM DATOS Y i DATOS X

I BUS DE DIRECCIONES

RAGU X(LECTURA X)BUSES DE

DIRECCIONESj

X - p WAGU X IAX) I(ESCRITURA X)

I AG UXI— ^ -------

r

niDATOS MAPEADOS

EN MEMORIA PROGRAMA

BUS DE DATOS Y

BLIS DE v DATOS X

Figura 6.2. Las instrucciones DSP pueden acceder en lectura simultáneamente a datos de los espacios X e Y.

6.2. DIRECCIONAMIENTO DE LA MEMORIA DE DATOS

Las direcciones de acceso a los espacios X e Y son generadas por las Unidades de Generación de Direcciones AGUX y AGUY, respectivamente. La AGUX consta de una sección destinada a la lec­tura de datos. RAGUX, y otra para la escritura, WAGUX. Para aumentar el rendimiento del proce­sador RAGUX comienza el cálculo de la dirección efectiva de un operando en el ciclo anterior al de ht instrucción al que corresponde, de manera que cuando se inicia la ejecución ya es capaz de colo­r ir en el bus de direcciones de lectura del espacio X la dirección de la posición a acceder. Por el con­trario, WAGUX comienza el cálculo de la dirección de la posición a escribir al empezar la ejecución de la instrucción, pero ya la tiene disponible al llegar la fase de escritura.

La AGUY funciona igual que RAGUX adelantando el cálculo de la dirección, pero sólo 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 forma que el byte de menos peso se sitúa en la dirección par y el de menos peso en la impar superior.

6.3. MAPEADO DEL ESPACIO DE DATOS EN LA MEMORIA DE PROGRAMA

Con carácter opcional el programador puede mapear los 32 KB superiores del espacio de la memo­r a de datos en una página del espacio de la memoria de programa que consta de 16 K palabras de14 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

Page 94: DsPIC Diseño practico de aplicaciones

76 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

instrucciones especiales como las de Tabla. De los 24 bits de cada posición del espacio de la me­moria de programa sólo son válidos los 16 de menos peso.

Para obtener la dirección efectiva del PSV en la memoria de programa se necesitan 23 bits. Los15 bits de menos peso de dicha dirección corresponden a los 15 bits de menos peso del registro W que contiene la dirección efectiva del espacio de la memoria de datos. Los 8 que faltan para com­pletar la dirección efectiva PSV se toman del registro PSVPAG. (Figura 6.3.)

wnPSVPAG DIRECCIÓN ESPACIO DE DATOS

:7 Ó. 15 . . ' 1 4 * ..0

22 ............ ,

DIRECCIÓN PSV

Figura 6.3. Formación de la dirección efectiva PSV a partir de ¡os 8 bits del registro PSVPAG y los 15 de menos peso del registro Wn que contiene la dirección 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­tuación es habitual en el cálculo de los filtros F1R (Finite Impulse Response). Para optimizar el pro­cesamiento de este tipo de cálculos 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 gestión 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 límite y regresar a la posición de inicio cuando ha terminado de recorrerlo. Para conseguir esta característica existen unos registros hardware que soportan la opera- tividad de este direccionamiento.

XMODSRT: Registro de la dirección modular de inicio para AGUX.XMODEND: Registro de la dirección modular final para AGUX.YMODSRT: Registro de la dirección modular de inicio para AGUY.YMODEND: Registro de la dirección modular final para AGUY.

Cualquier registro W, excepto W 15, puede actuar como puntero del buffer y los 4 registros an­teriormente mencionados establecen las direcciones inicial y final. En el direccionamiento ascen­dente el puntero se va incrementando desde la posición inicial del buffer hasta la final. Cuando el puntero se decrcmenta se recorre el buffer desde la posición final a la inicial. El direccionamien­to modular puede funcionar en el espacio de la memoria de programa y en el de datos, tanto en la zona X como en la Y. En el espacio X el código binario del registro W que actúa como puntero del

m

Page 95: DsPIC Diseño practico de aplicaciones

LA MEMORIA DE DATOS 77

BUFFERINCREMENTAL

BUFFERDECREMENTAL

BUFFERBIDIRECCIONAL

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 código binario del re­gistro W que funciona como puntero en el espacio Y se carga en los bits MODCON<7:4>. La Fi­gura 6.5 muestra de form a esquemática 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

BWM<3:0>

Bit 15 Bit 8

Byte Bajo

Figura 6.5. El registro M ODCON en su totalidad. Los bits BWM<3:0> se utilizan para e l Bit Reverse. Los bits U-0 no se han implementado y se leen como ceros.

Page 96: DsPIC Diseño practico de aplicaciones

78 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

En la programación del direccionamiento modular se comienza cargando la dirección de inicio del buffer en XMODSRT, luego la dirección final en XMODEND, después se especifica en los 4 bits correspondientes de MODCON el registro W que participa como puntero y, finalmente, se in­dica el número de veces que se recorrerá el buffer circular en una operación DO. En las Figuras 6.6 y 6.7 se muestran algunos ejemplos de aplicación con direccionamiento modular o circular.

Dirección

0 x 1 1 0 0

0x1163

/

MOV #0x1100, W0 MOV W0. 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 dirección de comienzo

establece dirección 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 dirección

W1 = 0x1100 cuando $e completa el bucle DO

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

Figura 6.6. Ejemplo de exploración del buffer incremental con direccionamiento modular.

Dirección

0 x1 1 EO

0x11FF

MOV #0x11E0, WO MOV WO . XMODSRT MOV #0x11FF , WO MOVWO, XMODEND MOV #0x8001 , WO

i MOV WO , MODCON '• MOV #0x000F , WO I MOV #0x11 FE , W1

DO #15, FILL MOV WO, [W1-]

I FILL:! DEC WO. WO

; establece dirección de comienzo

; establece dirección 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

Dir. Comienzo = 0x11 EO Dir. Final = 0x11 FF Longitud = 16 palabras

Figura 6.7. Ejemplo de exploración del buffer decremental con direccionamiento modular.

Page 97: DsPIC Diseño practico de aplicaciones

LA MEMORIA DE DATOS 79

6.5. DIRECCIONAMIENTO POR INVERSIÓN DE ACARREO O "BIT REVERSE"

Las direcciones de la tabla de datos iniciales sobre la que se aplica el algoritmo FFT (Transforma­da Rápida 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 inversión de acarreo o “bit reverse”. Se trata de un direccionamiento indirecto especial que sólo se realiza a través del ge­nerador de direcciones WAGUX para instrucciones de tamaño palabra y con la colaboración de los registros específicos XBREV y MODC.ON.

Lo que hace el procedimiento de “bit-reverse” es crear un ordenamiento que facilitará el poste­rior cálculo de la FFT, y lo consigue intercambiando los bits del puntero de direcciones entorno al punto central de dicha dirección, con lo que el resultado es la “imagen espejo” de dicha dirección. Se tomarán en cuenta a la hora de realizar el intercambio tantos bits como sean significativos según el tamaño del buffer, es decir, si el buffer tiene un tamaño de 4 bytes, se rotarán los 2 últimos bits, si tiene 8 bytes, se rotarán, 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 po r ubit reverse ”. Al ser el tamaño del buffer de 8 bytes, se cogen los 3 últimos bits de la dirección, procediendo a rotar estos 3 bits en torno al bit I (el central) creando el “espe­jo ” de la dirección original, como se muestra en la Figura 6.8. Aplicado dicho método, 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 dirección entorno a un punto central.

ORDENAMIENTOSECUENCIAL BUFFER BUFFER

ORDENAMIENTO POR INVERSIÓN DE ACARREO

0X01000X0104

0X0102

0X01060X0101

0X0105

0X0103

0X0107

0X0100

0X0101

0X0102

0X01030X0104

0X0105

0X0106

0X0107

Figura 6.9. Buffer antes y después de realizar las operaciones de "bit reverse"

Page 98: DsPIC Diseño practico de aplicaciones

8 0 dsPIC. DISEÑO PRÁCTICO 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 MOD-

C0N<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 ODCON con sus bits BWM<3:0> resaltados, los cuales indican qué registro W será el puntero de las tablas en la operación de "b it reverse".

Si se toma al registro W1 como puntero para el direccionamiento por inversión de acarreo hay que tener en cuenta que el valor inicial que corresponde a la dirección de lectura del dato se trans­forma en otro valor que corresponde con la dirección donde se escribe el resultado, pero siempre dentro de las direcciones límite de la tabla. Para W 1 el código BWM<3:0> = 0001.

2a. Se activa el direccionamiento por inversión 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 operación de "b it reverse".

3a. Se establece el valor del “m odificador’ que actúa 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 tamaño 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.

TA M A Ñ O BUFFER (PALABRAS) VALOR DEL M O D IF IC A D O R XB32768 0x400016384 0x20008192 0x10004096 0x08002048 0x04001024 0x0200512 0x0100256 0x0080128 0x004064 0x002032 0x001016 0x00088 0x00044 0x00022 0x0001

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

Page 99: DsPIC Diseño practico de aplicaciones

LA MEMORIA DE DATOS 81

Para transformar el valor inicial del registro indirecto W según el direccionamiento por inver­sión de acarreo, el hardware auxiliar lo modifica sumando al mismo un valor. Este valor será el del modificador XB en caso de que el tamaño de los elementos sea de byte, y será XB multiplicado por2 en caso de que los elementos que se manejen sean de tamaño word (2 bytes). Sin embargo, dicha suma es especial porque se efectúa de izquierda a derecha y si se genera acarreo se traslada hacia la derecha, o sea, al revés de como se hace normalmente. Por eso se ha denominado a este direc­cionamiento de inversión de acarreo.

Se propone un ejemplo de aplicación para comprender la obtención de la dirección 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 según la tabla de la Figura 6.13 vale 0x0008 v se comienza suponiendo que W2 contiene la dirección 0x000 que apunta a la palabra WO. El bit de menos peso de W2 siempre vale 0 para apuntar a datos de tamaño palabra.

La modificación del valor inicial de W2 se logra sumando en dirección inversa el valor del mo­dificador XB multiplicado por 2, y de form a que si se produce acarreo se traslada a la derecha, o sea, al revés 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 por 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 0 0 0 0 0 0 0 0 W2 APUNTA LA PALABRA 0

+ 1 0 0 0 0 SE LE SUMA XBx2 PARA QUE LSB = 0

0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 W2 APUNTA LA PALABRA 8

+ 1 0 0 0 0 SE LE SUMA XB CON LSB = 0 0NVERSIÓN ACARREO)

0 0 0 0 0 0 0 0 0 0 0 0

+ 1

1 0 0 0- >

0 0 0 0

W2 APUNTA LA PALABRA 4

SE LE SUMA XBx2

0 0 0 0 0 0 0 0 0 0 0 f

+ 1

1 0 0 0 ►0 0 0 0

W2 APUNTA LA PALABRA 12

SE LE SUMA XB CON LSB = 0 (INVERSIÓN ACARREO)

0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 W2 APUNTA LA PALABRA 2

* 1 0 0 0 0 SE LE SUMA XBx2

0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 W2 APUNTA LA PALABRA 10

-

Figura 6.13. Secuencia de transformaciones del contenido del registro W2 al aplicarle el direcciona­miento por inversión de acarreo. Apréciese que la suma del modificador se hace de for­ma inversa y que cuando hay acarreo se traslada hacia la derecha.

Page 100: DsPIC Diseño practico de aplicaciones

82 dsPIC. DISEÑO PRÁCTICO DE APLICACION ES

Del ejemplo estudiado se desprende que la misión del modificador XB es determinar el lugar desde donde comienza a transformarse la dirección. En este caso los bits que se transforman en la dirección 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.)

DIRECCIÓN INICIAL

W2XB<14:0>=0x0008

LOS BITS 1-4 DE LA DIRECCIÓN SE INTERCAMBIAN

W2

Figura 6.14. El valor del modificador XB<14:0> determina el bit donde comienza a transformarse la dirección. En el ejemplo propuesto los 4 bits que cambian de lugar en la dirección del puntero destino son W2<4:1>. El b it de menos peso siempre vale 0, por lo que en realidad en el cálculo de la siguiente dirección se suma XBx2 en sentido inverso y con inversión de acarreo.

Page 101: DsPIC Diseño practico de aplicaciones

CAPITULO

La memoria de programa

M . ESTRUCTURA Y DISTRIBUCIÓN

El máximo 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 Configuración y comprende desde la dirección 0x800000 hasta la OxFFFFFF.

En el Espacio de Memoria del Usuario residen el Vector de Reset que consiste en una instruc­ción GOTO que apunta a la primera instrucción del programa; la Tabla de Vectores de Interrupción, cuyo tamaño en los dsPIC33F será mayor puesto que habrá más interrupciones debido a que dispo­ne de más periféricos; la Tabla Alternativa de Vectores de Interrupción que es una imagen de la Ta­bla de Vectores de Interrupción; la memoria FLASH para el usuario, cuya capacidad máxima 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 Memoria de Configuración se encuentran los registros para la configuración ie l dispositivo y las posiciones ID destinadas a la identificación (DEVID). (Figura 7.1.)

Todas las posiciones del mapa de la Figura 7.1 son pares y sus direcciones de 23 bits tienen siem- rre a cero el bit de menos peso. En el caso de los dsPIC33F no existe espacio para EEPROM y las Tablas de Vectores de Interrupción son más grandes.

Hay tres procedimientos para acceder al espacio de direcciones de la memoria de programa:

1o) Directamente a través de los 23 bits del Contador de Programa (PC). Así se accede a la siguien­te instrucción 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

Page 102: DsPIC Diseño practico de aplicaciones

8 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

ESPACIO DE

MEMORIA DEL

USUARIO (2 M x24)

ESPACIO DE MEMORIA DE

CONFIGURACIÓN (2 M x24)

23

I "RESET- INSTRUCCIÓN GOTO RESET- DIRECCIÓN DESTINO

TA8LA DE VECTORES DE INTERRUPCIÓN

RESERVADO

TABLA ALTERNATIVA DE VECTORES DE INTERRUPCIÓN

MEMORIA PROGRAMA USUARIO FLASH

RESERVADO

EEPROM DATOS {4 K BYTES)

A in - ¡SIRESERVADO

UNITID (32 INSTRUCCIONES)

RESERVADO

REGISTROS DE CONFIGURACIÓN DEL DISPOSITIVO

RESERVADO

YDEVID

000002000004

000300

00007E000080

00008200C084

0000FE000100

017FFE018000

7 FEFFE 7FF000

800000

8005BE8005C0

8005FE800600

F7FFEE F80000

F800CE F80010

FEFFFEFFOOOO

FFFFFE

Figura 7.1. Distribución del espacio de direcciones de la memoria de programa para un dsPICJOF.El tamaño de la FLASH y la EEPROM depende del dispositivo específico que se trate.

7.2. DIRECCIONAMIENTO MEDIANTE EL PC

El Contador de Programa actúa 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 incrementándose 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 posición de 24 bits (uno de los bytes no se usa). En la Fi­gura 7.2 se muestra gráficamente 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 MEMORIA DE PROGRAMA

En bastantes aplicaciones es muy interesante poder guardar en la memoria de programa datos que posteriormente pueden ser leídos. Además de ampliar la capacidad de almacenamiento de la me­moria RAM, la información almacenada en la memoria FLASH del programa se convierte en no volátil.

Page 103: DsPIC Diseño practico de aplicaciones

LA MEMORIA DE PROGRAMA 8 5

S U 000 000

ESPACIOMEMORIAUSUARIO

i LSB

PC 0 ~ ~ f~______________ b

22 I23

SIEMPRE 0

INSTRUCCIÓN <r*24

IR

>7FF FFE

Figura 7.2. El PC sólo 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 más altas del espacio de la memoria de

datos en una página 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 más peso no es válido y sus bits siempre se leen como ceros. A este byte se llama “byte fantasma”. (Figura 7.3.)

Page 104: DsPIC Diseño practico de aplicaciones

8 6 dsPIC. DISEÑO PRÁCTICO DF APLICACIONES

MEMORIA. DE PR O G RA M A

BYTE

Ox 000200

Ox 000202

Ox 000204

Ox 000206

• 0000 0000I

0000 0000 ;

•oooooooo

0000 0000■

I31 23 16

— PALABRA ALTA —►

15 9

PALABRA BAJA—►

TABLADE

DATOS

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 más peso no es válido 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 dirección efectiva de 23 bits para una posición de la memoria de programa, la concatenación 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 dirección efectiva de la memoria de datos.

DIRECCIÓN EFECTIVA PARA TABLA

0

Figura 7.4. Para direccionar una Tabla de datos en la memoria de programa se utiliza una dirección de 24 bits formados por la concatenación 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 dirección 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á implenta- do y se llama “byte fantasma”.

EJEMPLO

La instrucción TBLRDL W3,W4, lee los 16 bits de menos peso de lo posición de lo memoria de pro­grama cuya dirección se forma con TBLPAG: W3 <14:0> y los deposita en W4.

Page 105: DsPIC Diseño practico de aplicaciones

LA MEMORIA DE PROGRAMA 8 7

7.5. VISIBILIDAD DEL ESPACIO DE PROGRAMA (PSV)

El otro método que permite leer y escribir datos en la memoria de programa consiste en mapear el trozo de 32 KB de direcciones más 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 posición de la memoria de datos es de 16 bits y la de la memoria de programa de 24 bits, se deshecha el byte de más peso de esta última. Así cada posición de la memoria de datos ocu­pa una posición en la memoria de programa.

Las instrucciones que utilizan el PSV requieren de un ciclo de instrucción extra para ejecutarse. El ciclo de instrucción 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 dirección que apunta la posición 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 traba- i en modo PSV Wn<15> = 1, mientras que en modo normal Wn<15> = 0, es decir, que el bit de

nás peso de la dirección 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 dirección afectiva de 23 bits que apunta la posición 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 modo PSV Wn>15> = 1 y el bit Wn>0> selecciona el byte a acceder en la pala­bra. Wn contiene la dirección efectiva de la memoria de datos.

En realidad el contenido de Wn es la dirección efectiva <EA> de la memoria de datos que se ma- en la memoria de programa.

IPLO

PSV= 1, la instrucción MOV 0xF052, W2 carga los 16 bits de menos peso de la dirección de la me- tria de programa formada por la concatenación 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 métodos:■

l ' Autograbación en tiempo de ejecución (RTSP). : Grabación serie en circuito (ICSP™).

Page 106: DsPIC Diseño practico de aplicaciones

8 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

ESPACIO DE PROGRAMA

2? , , ■■■■■ . Q

o

/ i 6 DAT O lE ID O

Figura 7.6. Los 8 bits de más peso de la posición del espacio de programa no son válidos por lo que cada posición de la memoria de datos ocupa una posición en la memoria de programa.

La memoria EEPROM está mapeada dentro del espacio de la memoria de programa y según 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 técnicas usadas para la grabación de la EEPROM de datos y la FLASH son similares cuan­do se usa el método RTSP. La única diferencia destacable entre ambos tipos de memoria es la can­tidad de datos o información que puede ser grabado o leído en cada ciclo de grabación/borrado.

7.6.1. Autograbación en tiempo de ejecución (RTSP)

Esta técnica la desarrolla el usuario mediante las instrucciones de Tabla que transfieren información 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­rección efectiva de la posición de la memoria de programa se forma con los 8 bits del registro TBL- PAG y los 16 de un registro Wn, que contiene la dirección efectiva de la memoria de datos.

EJEMPLO 1

Programa para depositar en los registros W2:W3 los 24 bits válidos de la posición de la memoria de programa cuya dirección queda definida por tbIpage: tbloffset.

ESPACIO DE DATOS

0x0000

EL BYTE DE MÁSPESO NO SE LEE-------------- ►

EN MODO PSV

Page 107: DsPIC Diseño practico de aplicaciones

LA MEMORIA DE PROGRAMA 8 9

18: • vIvví-T1MOVMOVMOV

#tblpage, WO WO, TBLPAG tttbloffsct, WO

; carga en WO el valor EA<23:¡6> ; carga WO en registro TBLPAG ; carga EA<I5:0> en WO

TBLRDHTBLRDL

[WO], W2 TWOL W3

; lee el byte alto <23:16> en W2 ;!ee palabra baja <15:0> en W3

EJEMPLO 2

Cargar un valor de 24 bits en una posición de la memoria de programa cuya dirección EA<23:0>es tblpage:tbloffset. El dato a grabar está form ado por la palabra baja #\vord low v el bxte alto #b\te hi.

MOVMOVMOV

tttblpage, WO WO, TBLPAG fttblojfset, WO

; carga en WO el valor EA<23:16> ; carga WO en registro TBLPAG ; carga EA<15:0> en WO

MOVMOV

Jhvordjtów, W2 tíbytejii. W3

;carga en W2 la palabra baja ; carga en W3 el byte alto

TBLWTLTBLWTH

W2y ¡WO] VV5. [W0++]

;escribe la palabra baja ;escribe el byte alto

También es posible grabar y leer la memoria de programa con datos de tamaño byte dentro de cada una de sus palabras.

Para la grabación/borrado de múltiples datos de la FLASH y la EEPROM se utilizan tres regis­tros de control NVM (Memoria No Volátil).

NVMCOM: Registro de Control NVM.NVMKEY: Registro Clave NVM.NVM ADR: Registro de Dirección NVM.

El registro NVMCOM selecciona si la operación se realizará sobre la FLASH o la EEPROM y las características principales de la misma, tal como se indica en la tabla de la Figura 7.7.

El registro NVMCON se muestra en la Figura 7.8 y consta de los siguientes bits significativos:

WR (bit 15): Bit de control de escritura (borrado o grabación).' WREN (bit 14): Permiso de escritura (borrado o grabación).

WRERR (bit 13): Flag de error de escritura en Flash.Reservado (bit 12- 8).PROGOP <7:2> (bit 7 - 0): Código de operación de grabación.

Page 108: DsPIC Diseño practico de aplicaciones

9 0 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

VALORES DE NVMCOM PARA OOPERACIONES DE GRABACIÓN/BORRADO

TIPO MEMORIA OPERACIÓN TAMAÑO DATOS VALOR NVMCOM

FLASHBORRADO 1 FILA (32 INSTRUCCIONES) 0x4041

GRABACIÓN 4 INSTRUCCIONES 0x4001

EEPROM

BORRADO1 PALABRA 0x4044

16 PALABRAS 0x4045

GRABACIÓN1 PALABRA 0x4004

16 PALABRAS 0x4005

REGISTRO CONFIGURACIÓN ESCRITURA 1 REGISTRO CONFIGURACIÓN 0x4008

Figura 7.7. Valores que hay que cargar en NVMCOM para llevar a cabo diversas operaciones con las memorias FLASH y EEPROM.

15BYTE ALTO

•.v a -.v / a \ w a w w w .«.w .*

•>> \W R ÿ J W REN i WRERRÍ

BYTE BAJO7 0

PROGOP <7:0> 1

Figura 7.8. Registro NVMCON.

El registro NVMADR contiene los 16 bits de menos peso de la dirección efectiva (EA<15:0>) de la posición a grabar o borrar. Este registro lo manejan automáticamente 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 posición 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 oof j j o e a jooarac—

NVMADR< 15:8>

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

NVM ADR<7:0>: -

Figura 7.9. Registro NVADR.

Page 109: DsPIC Diseño practico de aplicaciones

LA MEMORIA DE PROGRAMA 91

El registro NVMKJEY sólo puede ser escrito y su misión es evitar grabaciones o borrados acci­dentales. Se le utiliza para guardar unos valores claves o de seguridad, que se indican a continua-

1 Hay que escribir el valor clave o de seguridad 0x55 en NVMKEY.2.° Hay que escribir a continuación el valor OxAA en NVMKEY.3.° Ejecutar dos instrucciones NOP.

Las interrupciones deberán ser deshabilitadas durante la secuencia anterior. Tras esta secuencia, la escritura estará permitida al registro N VMCON durante un ciclo de instrucción.

Con la técnica RTSP se pueden borrar 32 instrucciones o 96 bytes simultáneamente y se pueden grabar 4 instrucciones (12 bytes) a la vez.

El programa que se propone de carácter didáctico muestra las instrucciones apropiadas para bo­rrar una línea de 32 instrucciones (96 bytes) en la memoria de programa.

M OV #0X4041, WOMOV W0, NVMCOM : imcialización NVMCOM

; creación del puntero a laj i la que se desea borrar

MOV m ip a g e , WOMOV WO, TBLPAG ; inicial iza TfíLPAGM OV v m ioffseU WOMOV WO, NVMADR ; i n ida l iza NVMADR

ción:

EJEMPLO

; bloqueo de las ;interrupciones durante las 5 ;siguientes instrucciones

DISi #5

M OV 0x55. WOMOV WO, NVMKEYMOV OXAA, WO

; se escriben en el registro de ;seguridad NVMKEY tas ; claves 0x55 y OxAA

MOV WO, NVMKEY

BSÉI;:- " ' ' " A ^ / comienza borradosorNOP

7.7. GRABACIÓN SERIE EN CIRCUITO (ICPS™)

Se trata de un protocolo registrado por Microchip destinado a la grabación en serie de dispositivos programables conectados en el circuito de aplicación, simplemente utilizando dos líneas, una para

Page 110: DsPIC Diseño practico de aplicaciones

9 2 dsPIC. DISEÑO PRÁCTICO 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 técnicas pueden encontrarse en las páginas del fabri­cante en Internet (www.microchip.com).

Este sistema de grabación se utiliza con gran efectividad en todo tipo de microcontroladores y dispositivos programables, además de los DSC.

Page 111: DsPIC Diseño practico de aplicaciones

m W M iCAPITULO

Interrupciones y excepciones

8.1. INTRODUCCIÓ N

Las interrupciones y las excepciones son causas que desvían el flujo de control en la ejecución de instrucciones. Las interrupciones son provocadas por acontecimientos externos, como los que ori­ginan los periféricos integrados o las señales aplicadas en determinadas patitas. Las excepciones se producen automáticamente cuando el procesador detecta algún error o anomalía en la ejecución de una instrucción.

Los dsPIC30F atienden a 54 tipos de interrupción y 8 tipos de excepción bajo un sistema de con­trol de las" siguientes características:

Tabla de 62 vectores de interrupción (IVT).7 niveles de prioridad programables por el usuario para las interrupciones.Un vector dedicado para cada causa de interrupción o excepción.Para soportar labores de depuración existe una Tabla Alternativa de Vectores de Interrupción (AIVT).

8.2. TABLA DE VECTORES IVT Y A1VT DE LOS DSPIC30F

La Tabla de Vectores de Interrupción IVT ocupa 62 posiciones de la memoria de programa a partir de la dirección üxüüü 004. Cada posición consta de 24 bits que conforman la dirección de la me­moria de programa donde comienza la rutina de servicio de la interrupción correspondiente (1SR). A dicha dirección se llama Vector de Interrupción. Los 8 primeros vectores de la IVT soportan las excepciones y los 54 restantes las interrupciones.

La Tabla Alternativa de Vectores de Interrupción AIVT tiene una organización idéntica a la IVT y está situada a continuación en el espacio de la memoria de programa. Para que el proce­sador utilice la AIVT se precisa que el bit ALTIVT = 1 (INTCON2<15>). Cuando está operati­va la AIVT los procesos de interrupción y excepción manejan dicha tabla que está diseñada

9 3

Page 112: DsPIC Diseño practico de aplicaciones

9 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

para labores de emulación y depuración ofreciendo un soporte para intercambiar la Tabla de Vec­tores entre el entorno de aplicación del usuario y el de las mencionadas labores. Estos rasgos también se activan eligiendo en las aplicaciones para evaluación de diferentes algoritmos soft­ware en tiempo de ejecución. Cuando no se usa la A1VT sus contenidos son los mismos que la IVT. (Figura 8.1.)

VECTORES DE EXCEPCIÓN

54 VECTORES DE INTERRUPCIÓN

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

FALLO DE OSCILADOR ERROR DE DIRECCIQNAMIEÑTO

FALLO DE PILA

ERROR ARITMÉTICORESERVADO

_____________ RESERVADO

RESERVADO

VECTOR DE INTERRUPCIÓN 52 VECTOR DE INTERRUPCIÓN 53"

RESERVADO

RESERVADO FALLO DE OSCILADOR

ERROR DIRECCIONAMIENTOFALLO DE PILA

ERROR ARITMÉTICORESERVADORESERVADO

RESERVADO

VECTOR DE INTERRUPCIÓN 0

VECTOR DE INTERRUPCIÓN 1

VECTOR DE INTERRUPCIÓN 52 VECTOR DE INTERRUPCIÓN 53

RESET- INSTRUCCIÓN GOTO I 0x000000

RESET- DIRECCIÓN GOTO 8 0x000002Ox 000004

VECTOR DE INTERRUPCIÓN 0 0 0x000014

________ VECTOR b'ÉlNTERRUPCIÓN 1

Ox 00G07E0X 000080 0x000082 Ox 000084

Ox 000094

UX OOOCr E

Page 113: DsPIC Diseño practico de aplicaciones

INTERRUPCIONES Y EXCEPCIONES 9 5

No se considera una interrupción el Reset puesto que en su tratamiento no interviene el contro- jjdor de interrupciones. Cuando se produce un Reset se borran los registros y el PC pasa a valer ce­

ro, iniciando el procesador la ejecución de instrucciones a partir de la situada en la dirección 0x000 V)0 de la memoria de programa en la que se coloca el código de un GOTO que pasa el flujo de con­so l a la dirección 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.

DIRECCIÓN IVT DIRECCIÓN AIVT CAUSA DE EXCEPCIÓNNÚMERO ÜE VECTOR

0x000004 0x000084

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 oxooooce0x000048 oxooooca0x00004A

0x00004C

OxOOOOCA

OxOOOOCC

RESERVADO0x000086 FALLO DE OSCILADOR

0x000088 ERROR DE DIRECCION AMIENTO

0x00008A ERROR DE PILA

0x00008C0x00008E

ERROR ARITMÉTICO

RESERVADO

0x000090

0x000092

RESERVADO

RESERVADO

0x000094

0x000096

0x000098

INTO - INTERRUPCION EXTERNA NUM O

IC1 - ENTRADA MODULO CAPTURA 1

OC1 - SALIDA DEL COMPARADOR I

Ox00009A TI -T1MER1

0x000096 IC2 - ENTRADA MODULO CAPTURA 2

0x00009D

OxOOOOAO

OC2 - SALIDA DEL COMPARADOR 2

T2 - TIMER 2

0x0000A2 T3 - TIMER 3

0x0000A4

0xí)000A6 U l RX UART 1 RECEPTOR

°xOOOOA8_

OxOOOOAA

U l TX -U A R T 1 EMISOR

CONVERSIÓN ADC - ADC REALIZADA

OxOOOOAC ESCRITURA COMPLETADA

OxOOOOAE IC 2 OPERACION ESCLAVO - MENSAJE DETECTADO

OxOOOOBO IC 2 OPERACION MAESTRO - MENSAJE COMPLETADO

0x0000B2 NOTIFICACIÓN DE CAMBIO DE ENTRADA

0x000084 INT1 - INTERRUPCION EXTERNA NUM 1

0x0000B6 IC 7 - ENTRADA MÓDULO DE CAPTURA 7

0x00001*8 IC 8 - ENTRADA MODULO DE CAPTURA 8

0x0000BA OC 3 - SALIDA DEL COMPARADOR 3

OxOOOOBC OC 4 - SALIDA DEL COMPARADOR 4

0X0OOOB3 T4 - TIMER 4

OxOOOOCO

0 x 0 0 0 0 C 2

T5 - TIMER 5

INT 2 - INTERRUPCIÓN EXTERNA NÚM 2

0x0000C4 UR2 X - UART 2 RECPETOR

UT2X - UART 2 EMISOR

CAN 1

IC3 - ENTRADA MÓDULO CAPTURA 3

Direcciones de los vectores de IVT y AIVT en memoria de programa y causas que pro­ducen interrupciones y excepciones en los dsPIC30F. No todos los modelos DSC dispo­nen de los mismos periféricos integrados y por tanto usan todos los vectores de la tabla,

Page 114: DsPIC Diseño practico de aplicaciones

9 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

NÚMERO DE VECTOR DIRECCIÓN IVT DIRECCIÓN AIVT CAUSA DE EXCEPCIÓN

37 0x00004E OxOOOOCE IC4 - ENTRADA MÓDULO CAPTURA 4

38 0x000050 0x000000 IC5 - ENTRADA MÓDULO CAPTURA 5

39 0x000052 0x0000D2 IC6 - ENTRADA M Ó D U l O CAPTURA 640 0x000054 OxOOOOD4 OC5 - SALIDA DEL COMPARADOR 5

41 0x000056 0x0000D6 OC6 - SALIDA DEL COMPARADOR 642 0x000058 0x000008 OC7 - SALIDA DEL COMPARADOR 7

43 OxOOOOSA OxOOOODA OC8 - SALIDA DEL COMPARADOR 844 0x00005c OxOOOODC IN I 3 - INTERRUPCIÓN EXTERNA NÚM 3

45 0x00005F OxOOOODE . INT 4 -INTERRUPCIÓN EXTERNA NÚM 4

46 0x000060 OxOOOOEO CAN 247 0x000062 OxOOOOE2 PVVM - PWM COMPARACIÓN PERÍODOS48 0x000064 OxOOOOE4 QEI - COMPARADOR POSICIÓN CONTADOR

49 0x000066 0x00Ü0E6 DCI - TRANSFERENCIA DE CÓDIGO REALIZADA

50 0x000068 0x0000E8 LVD - DETECCIÓN DE VOLTAJE BAJO

51 0x00006A OxOOOOEA FLTA - MCPVVM FAULT A

52 0x00006c OxOOOOEC FLTB - MCPWM FAUi.T B

53-61 OxOOOO6E-OxO0OO7F OxOOOOEE-OxOOOOFE RESERVADOS

Figura 8.2. Direcciones de los vectores de IVT y AIVT en memoria de programa y causas que pro­ducen interrupciones y excepciones en los dsPIC30F. No todos los modelos DSC dispo­nen de los mismos periféricos integrados y por tanto usan todos los vectores de la tabla. (Continuación).

8.3. TABLA DE VECTORES IVT Y A IVT DE LOS DSPIC33F

La Tabla de Vectores de Interrupción (IVT) de los dsP!C33F se muestra en la Figura 8.3. La IVT re­side en la memoria de programa empezando en la posición 0x000 004. La IVT contiene 126 vecto­res comenzando por 8 vectores de excepciones no mascarables a los que se añaden 118 vectores de interrupción.

En general, cada fuente de interrupción tiene su propio vector. Cada vector de interrupción con­tiene una dirección de 24 bits donde se inicia la rutina de atención. El valor programado en cada localización del vector de interrupción es el comienzo de la dirección de las rutinas de servicio de interrupción asociadas (ISR). Los vectores de interrupción están organizados siguiendo el orden de su prioridad natural; esta prioridad es inherente a las direcciones en la tabla de vectores. Por ejem­plo, la interrupción asociada con el vector 0 tomará el control antes que otras con el mismo nivel de prioridad.

La tabla de vectores de interrupción alternativa (AIVT) está situada después de la IVT, co­mo se muestra en la Figura 8.3. El acceso a la AIVT lo proporciona el bit de control ALTIVT (INTCON2<'15>). Si ALTIVT está a 1, todas las interrupciones y excepciones usarán los vecto­res alternativos en vez de los vectores principales. Los vectores alternativos están organizados de la misma manera que los vectores de la IVT. La AIVT soporta tareas de depuración. El espa­cio de código para el usuario comienza detrás de la AIVT, es decir, a partir de la dirección 0x000200.

Page 115: DsPIC Diseño practico de aplicaciones

INTERRUPCIONES Y EXCEPCIONES 9 7

uu

R E S E T- INSTRUCCIÓN GOTO

RESET - DIRECCIÓN GOTO

RESERVADO ________

FALLO DE'OSCILADORERROR DE DIRECeiONAMIENTO

FALLO DE PILA

ERROR ARITMÉTICO

ERROR DMA

RESERVADO

RESERVADO

VECTOR DE INTERRUPCIÓN 0

VECTOR’ DE INTERRUPCIÓN 1

VECTOR DE INTERRUPCIÓN 116

VECTOR DE INTERRUPCIÓN 117

RESERVADO

RESERVADO

RESERVADO

FALLO DE OSCILADOR

ERROR DIRECCIONAMIENTO

FALLO DE PILA

ERROR ARITMÉTICO

ERROR DMA

RESERVADO

RESERVADO

VECTOR DE INTERRUPCIÓN 0í ..... ————VECTOR DE INTERRUPCIÓN 1

■.

VECTOR DE INTERRUPCIÓN 116

VECTOR DE INTERRUPCIÓN 117.... . . . . . . ............ ......: : . .

Ox 000000

Ox 0000020x 000004

8 VECTORES DE EXCEPCIÓN

Ox 000014

OxOOOOFC 0x 0000FE

118 VECTORES DE INTERRUPCIÓN

0x0001000x0001020x000104

Ox000114

Ox0001FC

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 muestra las direcciones ocupadas por la IVT y la AIVT junto a las causas que originan tanto las interrupciones como las excepciones de los dsPIC33F.

Page 116: DsPIC Diseño practico de aplicaciones

9 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

NÚMERO DE VECTOR DIRECCIÓN IVT D IRECCIÓN AIVT CAUSA DE EXCEPCIÓN

0 0x000004 0x000084 RESERVADO1 0x000006 0XÜ000ÍJ& FALLO DE OSCILADOR

0x000008 0x000088 ERROR DE DIRECCIONAMIENTO3 OxOOOOOA Ox00008A ERROR DE PILA

4 OxOOOOOC OxOOOOtíC ERROR ARITMÉTICO

i . . . . 5 ...................OxOOOOOE 0x00008E ERROR DMA

6 0x000010 0x000090 RESERVADO7 0x000012 0x000092 RESERVADO8 0x000014 0x000094 INTO - INTERRUPCIÓN EXTERNA NÚM 09 0x000016 0x000096 IC1 - ENTRADA M ODULO CAPTURA 110 0x000018 0x000098 OCI - SALIDA DEL COMPARADOR 111 0x00001A Ox00009A T1 -TIMERT12 0x00001C 0x00009c DMA 0 - DMA CANAL 013 0x00001E 0x00009D IC2 - ENTRADA M O DULO CAPTURA 214 0x000020 OxOOOOAO OC2 - SALIDA DEL COMPARADOR 215 0x000022 0 XÜ 0 0 0 A 2 T 2-T IM E R 216 0x000024 OxOOOOA4 T3 - TIMER 317 0x000026 OxOOOOA6 SPI 1E-ERROR EN SPI118 0x000028 0x0000A8 SPI1 - TRANSFERENCIA SPI1 REALIZADA19 0x00002A OxOOOOAA U IRX UARTI RECEPTOR20 0x00002C OxOOOOAC U1 T X -U A R T 1 EMISOR21 0x00002E OxOOOOAE ADC 1 - CONVF.RSOR A/D I22 0x000030 0x000080 DMA 1 - CANAL DM A 123 0x000032 0x000062 RESERVADO2-1 0x000034 0x000084 SI2C1 - OPERACION I2C1 ESCLAVO25 0x000036 0x000036 MI2C1 - OPERACION I2C1 MAESTRO2 6 0x000038 OxOOOOB8 RESERVADO27 0x00003A OxOOOOBA NOTIFICACION DE CAMBIO DE ENTRADA28 ()x00003C OxOOOOBC INT1 - INTERRUPCIÓN EXTERNA NÚM 129 0x00003F OxOOOOBE ADC 2 - CONVERSOR A 'D 230 0x000040 OxOOOOCO IC 7 - ENTRADA MÓDULO DE CAPTURA 731 0x000042 0x0000C2 IC 8 - ENTRADA MÓDULO DE CAPTURA 832 0x000044 OxOOOOC4 DMA 2 - CAN Al DM A 23 3 0x000046 OxOOOOC6 OC3 SALIDA DEL COMPARADOR 3

34 0x000048 OxOOOOC8 OC4 - SALIDA DEL COMPARADOR 435 0x00004A OxOOOOCA T4 - TIMER A36 0x00004C OxOOOOCC T5 - TIMER 53 7 0x00004E OxOOOOCE JNT 2 - INTERRUPCIÓN EXTERNA 2

......3 8 ■ 0x000050 OxOOOODO U 2R X -U A R TI RECEPTOR39 0x000052 0x0000D2 U2TX - UARTI EMISOR40 0x000054 0x0000D4 SPI2L - LRROR EN SPI241 0x000056 OxOOOOD6 SPI2 - TRANSFERENCIA SPI2 REALIZADA42 0x000058 0x000008 C1RX - EC/\N 1 PREPARADO PARA RECIBIR DATOS43 0x0Q005A OxOOOODA C1 - CAN144 0x00005C OxOOOODC DMA3 CANAL DM A 345 0x00005E Oxooocdf IC3 - ENTRADA M ÓDULO CAPTURA 346 0x000060 OxOOOOEO IC4 - ENTRADA M O D U IO CAPTURA 447 0x000062 OxOOOOE2 IC5 ENTRADA M Ó DULO CAPTURA 548 0x000064 0x0000E4 IC6 - ENTRADA M O DULO CAPTURA 649 0x000066 OxOOOOE6 OC5 - SALIDA COMPARADOR 550 0x000068 OxOOOOEfí OC6 - SALIDA COMPARADOR 651 Qx00006A OxOOOOEA OC7 SALIDA COMPARADOR 752 OxOOOOóC OxOOOOEC OC8 - SALIDA COMPARADOR 853 0x00Q06E OxOOOObE RESERVADOS

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 periféricos integrados y por tanto usan todos los vectores de la tabla.

Page 117: DsPIC Diseño practico de aplicaciones

INTERRUPCIONES Y EXCEPCIONES 99

NÚMERO DE VECTOR DIRECCIÓN IVT D IRECCIÓN AIVT CAUSA DE EXCEPCIÓN

54 0x000070 0x000170 D M A4 - CANAL D M A *1

55 0x000072 0x000172 1 6 - IIMFR (t56 0x000074 0x000174 T7 - TIMER 7

57 0x000076 0x000176 SI2C2 - EVENTO EN EL I2C2 ESCLAVO50 0x000078 0x000178 MI2C2 - EVENTO EN EL I2C2 MAESTRO59 0x00007A 0x00017A T8 - TIMER 860 ÜX00007C 0x00017C T9 TIMER961 0x00007E 0x00017E INT3 -INTERRUPCIÓN EXTERNA 362 0x000080 0x000180 INT4 - INTERRUPCION EXTERNA 4

63 0x000082 0x000182 C2RX - ECAN2 PREPARADO PARA RECIBIR DATOS64 0x000084 0x000184 C2 - EVENTO CAN265 0x000086 0x000186 PVVM PERÍODO PW M66 0x000088 0x000188 QEI - COMPARACIÓN CONTADOR DE POSICIONES67 0 x00008a 0x00018A DCIF - ERROR DCI68 0x00008c 0x0 0018C DCID - TRANSFERENCIA DCI REALIZADA

69 0x00008E 0 x0 0 0 I8F D M A5 - OXNAL D M A 570 0x000090 0x000190 RESERVADO71 0x000092 0x000192 FLTA - FALTA EN MCPVVM

72 0x000094 0x000194 FLTB - FALTA EN MCPVVM

73 0x000096 0x000196 U 1E -E R R O R EN UART1

74 0x000098 0x000198 U2E - ERROR EN UART2

75 0 x00009a 0x00019A RESERVADO

76 0x00009c 0x00019C D M A 6 - CANAL D M A 677 OxOOOOOE 0x00019E D M A 7 - CANAL D M A 778 OxOOOOAO 0x0001 A0 C IT X - PETICION DE TRANSMISION DE DATOS EN ECAN1

RESERVADO (PARA DISPOSITIVOS "PS")

79 0x0000A2 0x0001 A2 C 2 T X - PETICIÓN DE TRANSMISIÓN DE DATOS FN FCAN2

RESERVADO (PARA DISPOSITIVOS "PS")

80-125 OxOOOOA4-OxOOOOFE 0x0 001A4-ÜX0001 FE RFSFRVADAS

Figura 8.5. Continuación de la tabla con l¿is 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 periféricos 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 excepción es fijo.

Para atender una interrupción o una excepción su nivel de prioridad debe superar el de la CPU. Si una petición de interrupción procedente de un periférico o una patita específica 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 más 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 interrupción están 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

Page 118: DsPIC Diseño practico de aplicaciones

1 0 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

prioridad que cualquier interrupción 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 interrupción diferentes en los dsPIC30F y 118 en los dsPIC33F que están pro­ducidas por los periféricos integrados o por las patitas destinadas a tal efecto. El usuario puede pro­gramar individualmente cada tipo de interrupción con el nivel de prioridad deseado situado entre 1 (mínimo) y 7 (máximo), pues el nivel 0 significa su prohibición. Esta programación se realiza es­cribiendo el valor adecuado en los bits IPL<2:0>, no usándose el IPL3 que se lee como cero.

Para resolver conflictos de prioridad en las situaciones en las que varias causas de interrupción con el mismo nivel de prioridad se producen simultáneamente, se tiene en cuenta el nivel “natural” de cada una que corresponde con el lugar o número que ocupa en la tabla. Cuanto más alto sea el número del vector, menor es el nivel natural de prioridad. Este nivel natural sólo 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 número 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 anomalías detectadas por el procesador durante la ejecución de una instrucción. Hay excepciones que se detectan al comenzar la ejecución de la instrucción causante, en cuyo caso se da paso a la rutina de atención que intenta­rá corregir el error para, posteriormente, regresar a la instrucción 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 automáticamente el IPL3 al procesar una excepción. Cada ti­po de excepción tiene un IPL fijo que viene determinado por el número de vector que ocupa en la tabla. (Figura 8.6.)

-■....................................................

NÚMERO VECTOR NIVEL DE INTERRUPCIÓN CAUSA DE EXCEPCIÓN

0 M Á X IM A PRIORIDAD (5) RESERVADO

1 14 TALLO OSCILADOR

2 13 RRROR DIRECIONAMIENTO

3 12 ERROR PILA

4 M ÍN IM A PRIORIDAD (11) ERROR ARITMÉTICO

5 RESERVADO

6 RESERVADO

7 RESERVADO

Figura 8.6 . Nivel de prioridad de las excepciones de los dsPIC30F.

Page 119: DsPIC Diseño practico de aplicaciones

INTERRUPCIONES Y EXCEPCIONES 101

Las excepciones de Error de Pila y Error Aritmético 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 ejecución de la instrucción causante de las mismas an­tes de ejecutar la rutina de atención. En las excepciones tipo hardware no se completa la ejecución de la instrucción causante porque daría resultados erróneos y se lanza la rutina de atención en cuan­to se detecta el error.

Los dsPIC33F disponen de una excepción más, originada por el “Fallo del CDMA” .

8.6.1. Excepción por Error Aritmético

Se trata de una excepción tipo software de mínima prioridad (1PL = 11) que se genera por una de las siguientes causas:

a) Sobrepasamiento deí Acumulador A. Señalizador OVATE (INTCON 1<10>).b) Sobrepasamiento del Acumulador B Señalizador OVB TE (INTCON1 <9>).c) Sobrepasamiento catastrófico en cualquier Acumulador. Señalizador COVTE (INTCON 1 <8>)d) División por cero.e) Desplazamiento del Acumulador superior a +/- 16 bits al ejecutar la instrucción SFTAC.

8.6.2. Excepción por Error de Pila

La cima de la Pila queda direccionada después de un Reset con el valor 0x0800 y su tamaño máxi­mo lo deterjnina el Registro Límite de la Pila SPLTM. Cuando una dirección efectiva para la Pila ge- -■erada por W15 no está comprendida entre los límites establecidos se genera este tipo de excepción que posee un nivel de prioridad 12.

El error de pila puede detectarse también por software comprobando el bit de estado STKERR en INTCOMl<2>. El flag STKERR tiene que ser borrado por software para retornar con la ins­trucción RETF1E.

3.6.3. Excepciones por Error de Direccionamiento y Fallo del Oscilador

Son las dos excepciones hardware de máxima prioridad que fuerzan a atender la causa antes de fi­nalizar la ejecución de la instrucción responsable de las mismas.

Cuando se genera una petición de una excepción con mayor nivel de prioridad que la que se es- iá 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 excepción por Fallo del Oscilador (IPL = 14) se origina por las siguientes causas:

a) Se activa el Monitor 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).

Page 120: DsPIC Diseño practico de aplicaciones

102 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

La excepción por Fallo del Oscilador puede detectarse por software comprobando el bit de esta­do OSCFAIL en INTC0N<1> o el bit de estado CF en OSCCON<3>. El flag OSCFAIL tiene que ser borrado por software para retomar con la instrucción RETFIE.

La excepción 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 dirección impar).b) Una instrucción de manipulación de bits utiliza direccionamiento indirecto con el bit de me­

nos peso de la dirección efectiva a 1.c) Se intenta acceder a un dato en una zona de la memoria de datos no implementada físicamente.d) Ejecución de la instrucción “BRA #literal” o la “GOTO #literaT cuando literal es una direc­

ción de memoria de programa sin implementar.e) Ejecutar una instrucción después de modificar el PC para apuntar a una dirección 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 instrucción RETURN.

El espacio de datos estará prohibido mientras dure la excepción en curso, para no destruir nin­gún 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 instrucción RETFIE.

8.7. PROCESAMIENTO DE LAS INTERRUPCIONES

Todos los señalizadores de las causas de interrupción son explorados cada ciclo de instrucción. Cuando existe una petición de interrupción pendiente (IRQ - Interruption Routine Qcuc) se pone a 1 el bit señalizador correspondiente en el registro IFSx (Tnterrupl Falg Status). Para atender la inte­rrupción es preciso que el bit de permiso correspondiente esté a 1 en el registro ÍECx (Interrupt Ena- blc Control). Durante el tiempo restante del ciclo de instrucción en que se exploran las IRQ se eva­lúan las prioridades de las interrupciones pendientes de ser atendidas. Cuando existe una petición de una interrupción 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

W15 (ANTES DE IRQ)

W15(DESPUES DE IRQ)

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

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

Page 121: DsPIC Diseño practico de aplicaciones

INTERRUPCIONFS Y EXCEPCIONES 1 0 3

Con la instrucción de Retorno de Interrupción RETFIE que se coloca al final de la rutina ISR (In- terruption Service Routine) se recuperan de la Pila el PC<22:0> (la dirección de retomo, es decir el PC almacenado antes de saltar a la rutina de interrupción), 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 interrupción a través de la rutina de servicio de in­terrupciones (ISR), puede ser interrumpida por un tipo de interrupción de mayor prioridad.

Se pueden deshabilitar o prohibir las interrupciones que tengan niveles de prioridad de 1 a 6 con la instrucción DISL que funciona en combinación 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 instrucción DISI #5, se deshabilitan las interrupciones con IPL de 1 a 6 durante 5 ciclos de instrucción. Una vez detectada la causa que ha provocado una interrupción, me­diante la inspección del registro IFSx, comprobado que tiene permiso (inspeccionando el registro IECx) y también la prioridad suficiente, es decir no hay ninguna otra interrupción 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 Interrupción correspondiente y se pasa a iniciar la ejecución de la rutina ISR. Al comienzo de ISR se deben salvar en la Pila con la instrucción PUSH.S los valores de los regis­tros WÜ-W3, para poder restablecer después los valores que estaban y el procesador pueda continuar con lo que estaba haciendo antes de la interrupción. Al completar la ISR, antes de RETFIE, se re­cuperan los valores de dichos registros mediante la instrucción POP.S. (Figura 8.7.)

INICIO

SE SALVA

PC^-VECTOR INTERRUPCIÓN

SE SALVAN REGISTROS QUE SE MANEJAN

RUTINA DE ATENCIÓN

SE RECUPERAN' REGISTROS QUE SE

MANEJAN

BAJAR FLAG INTERRUPCIÓN

RETFIE SE RECUPERAN

PC«22:0>, SR<7:0>. IPL3

Figura 8.8. Organigrama que muestra las etapas del procesamiento de una interrupción.

Page 122: DsPIC Diseño practico de aplicaciones

1 0 4 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

El tiempo de duración o latencia para la atención de una petición de interrupción es de 4 ciclosde instrucción, de la siguiente forma:

7. En el primer ciclo se activa el señalizador.2: En el segundo ciclo se salva en la Pila el PC, el IPL3 y el SHL.3. En el tercer ciclo se carga el PC con el contenido del Vector de Interrupción.4. En el cuarto ciclo se inicia la rutina ISfí.

. .

El retorno de una rutina de interrupción tiene una latencia de tres ciclos de instrucción.

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 ejecución de la instrucción 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 petición de interrupción 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 petición, pero si el nivel de prioridad de la interrupción es menor que el de la CPU se continúa la ejecución de la instrucción 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 interrupción no sea atendida.

8.8. REGISTROS DE CONTROL Y ESTADO PARA LAS INTERRUPCIONES

Para el procesamiento y atención de las interrupciones, el controlador utiliza los siguientes registros.

INTCON1 e INTCON2Son 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 señalizadores de estado y control de las causas de las excepciones.INTCON2 contiene los señalizadores de las causas de interrupción externa y el bit de uso de la A1VT.

REGISTRO 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.

REGISTRO DE CONFIGURACIÓN (CORCON)Contiene el bit 1PL3 (CORCON<3>) que sirve para determinar el nivel de prioridad de las excep­ciones. Sólo es legible porque se pone a 1 automáticamente cuando se procesa una excepción.

REGISTROS DE SEÑALIZADORES DE ESTADO DE LAS INTERRUPCIONES (IFSx)Son tres registros que contienen los señalizadores que informan de la petición de interrupción. Dichos señalizadores se activan automáticamente cuando se produce la petición y se desactivan por software.

REGISTROS DE CONTROL I)E HABILITACIÓN I)E LAS INTERRUPCIONES (IECx)Son tres registros que contienen los diversos bits de permiso/prohibición de cada una de las interrupciones.

Page 123: DsPIC Diseño practico de aplicaciones

INTERRUPCIONES Y EXCEPCIONES 1 0 5

REGISTROS DE CONTROL DE PRIORIDAD DE LAS 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 distribución de los bits de los registros que se utilizan rn el procesamiento de las interrupciones y excepciones. Hay que tener en cuenta que según el mo- ielo de DSC se dispondrá de diferentes recursos internos y en consecuencia no todos tienen válidos iodos los bits de estos registros. El INTCON1 varía de un modelo a otro, un dispositivo de dsPIC33F _ñliza más bits del registro INTCON1 que un dsPIC30F. El dsPIC33F tiene más tipos de interrup- : nes por lo que necesita de algunos registros más 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

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

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

TnT4£P | tMT3EP [ ÍNT2£P j M tlE P p Ñ T ^ 1

Leyenda

R = bit leíble W = bit escribible U = bit sin implementar, leído como 0T = bit a 1 ‘0 ’ = bit a 0 x = bit desconocido

8.9. Distribución de los bits de los registros INTCON 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.

■ÍTCON1:« w * - : R/w-o R/W-0 R/W-0 R/W-0 R/W-0

CÓVAÍSr f OVATE

R/W-0 R/W-0

OVBTE COVTE

B U M ) R/W-0

ÍRRR/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0

\THERR ¡ADDRERR IsTKÉRR OSCFAÍl I -

ITCON2: o s c f a il

¡9W O R/W-0 U-0 U-0 U-0 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 leíble W = bit escribible U = bit sin implementar, leído como 01 = bit a 1 ‘0’ = bit a 0 x = bit desconocido

8.10. Distribución de los bits de los registros INTCON 1 e INTCON2 para el procesamiento delas interrupciones y excepciones en el modelo dsPIC33F.

Page 124: DsPIC Diseño practico de aplicaciones

En la Figura 8.11 se presentan los registros que utiliza el dsPJC3ÜF para manejar las inte­rrupciones.

1 0 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

NOMBRE DIRECCIÓN BIT15 B1T14 BIT13 BIT12 B IT ll B1T10 BIT9 BIT8 BIT7

IFSÜ 0084 CNIF BCLIF I2CIF NViVIIF ADIF u i rxiF U1RXIF SPI1IF T3IF

IFS1 0086 IC6IF IC5IF IC4IF IC3IF C1IF SPI2IF U2TXIF U2RXIF INT2IF

IFS2 0088 - - - FLIBIF FALTAIF LVDIF DCIIF QVEIIF PWMIF

IEC0 008C CNIE BCLIF I2CIE NVVMIE ADIE UITXIE r U IR X líP SPIIIF T3IE

IEC1 008E IC6IE 1C5IE IC4IE IC3IE C1IE SPI2IE U2TXIE U2EXIE IKT2IL

IEC2 0090 - • FLTBIE FALTA IL LVDIE DCIIE SPI1IE PWMIE

IPCO 0094 - TI IP <2:0> OCIP<2:()> -

IPC1 0096 - T3IP <2:0> - T2IP <2:0>

IPC2 0098 - ADIP <2:0> - U1TXIP <2:0> -

IPC3 009A CNIP <2:0> - BCLIP <2:0>

¡PC4 009C OC3IP <2:0> - IC8IP <2:0> -

IPC5 009L - INT2IP <2:0> T5IP <2:0> -

IPC6 OOAO - C1 IP <2:0> - SPI2IP<2:0> -

IPC7 OOA2 - IC6IP <2:0> - IC5IP <2:0> -

IPC8 00A4 - OC8IP <2:0> - OC7IP <2:0> -

IPC9 00A6 - PWMIP <2:0> - C2IP <2:0> -

IPC10 00A8 - FALTAIP <2:0> - I.VDIP <2:0> -

IPC11 00AA - - : - - - - -

NO M BRE BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BITO ESTADO RESET

IFSO T2IF OC2IF IC2IF T1IF OC1IF IC1IF INTO 0000 0000 0000 0000

IFS1 T5IF I4IF ÜC4IF OC3IF IC8IF IC7IF INT1IF oooo oono oooo oooo

ll:S2 C2IF INT/1IF INT3IF OC8IF OC7IF OC6IF OC5IF 0000 oooo oooo oooo

IEC0 T2IF OC2IE IC2IE THE OCHE IC1IE INTOIE oooo oooo oooo ooooIEC1 T.5IL T4IE OOIIE OC3IE IC8IE IC7IE INT1IE oooo oooo oooo ooooIEC2 C2IE I.NT4IE INT3IE OC8IE OC7IE OC6IE OC5IE oooo oooo oooo ooooIPCO ICl IP <2:0> - INT0IP<2:0> 0100 0100 0100 0100

IPCJ OC2IP <2:0> - I2CIP <2:0> 0100 0100 0100 0100

ICP2 U1 RXIP <2:0> - SPI1IP <2:0> 0100 0100 0100 0100

IPC3 I2CIP <2:0> - NVMIP <2:0> 0100 0100 0100 0100

IPC4 1C7IP <2:0> - INT1 IP <2:0> 0100 0100 0100 0100

IPC5 T4IP <2:0> - OC4IP <2:0> 0100 0100 0100 0100

IPC6 U2TXIP <2:0> - U2RXIP <2:0> 0100 0100 0100 0100

IPC7 IC4IP <2:0> - IC3IP <2:0> 0100 0100 0100 0100

IPC8 OC6IP <2:0> OC5IP <2:0> 0100 0100 0100 0100

IPC9 INT4IP <2:0> - INT3IP <2:0> 0100 0100 0100 0100

IPC10 DCIIP <2:0> - QEIIP <2:0> 0100 0100 0100 0100

IPC11 - - - FLTBIP <2:0> oooo oooo oooo oooo

Figura 8.11. Nombre y distribución de los bits de los registros que se utilizan en el procesamiento delas interrupciones y excepciones de los dsPIC30F.

Page 125: DsPIC Diseño practico de aplicaciones

INTERRUPCIONES Y EXCEPCIONES 107

Los registros que utiliza el dsP!C33F para manejar las interrupciones se muestran en la Figu­ra 8.12.

NOMBRE- DIRECCIÓN BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8 BIT7

IFS0 0084 - DMA1IF AD1IF U1TXII- U1RXIF SPI 1 Ih SPHEIF T3IF T2IF

irsi 0086 U2TXIF U2RXIF INT2IF T5IF T4IF OC4IF o o i r DMA21IF IC8IF

IFS2 0088 T6IF DMA4IF - OC8IF OC7IF OC6IF OC5IF IC6IF IC5IF

IFS3 008A FLTAIF - DMA5IF DCIIF DCIEIF QEIII PWMIF C2IF C2RXIF

IFS4 008C - - - - - - C2TXIF

IFC0 008E - DMAUE AD1IE U1TXIE U1RXIE SPI1IE SPI1EIF T3IE T2IE

IEC1 0090 U2TX1E U2RXIE INT2IE T5IE T4IE OC4IL OC3IE DMA2IE IC8IE

ILC2 0092 T6IE DMA4IE - OC8IF OC7IE OC6IE OC5IE IC6IE IC5IE

IEC3 0094 FLTAIE - DMA5IE DCIIE DCIF.IL QEIIE PWMIE C2IE C2RXIF

ILC4 0096 - - - - - - - - C2TXIE

IPC0 0098 T1IP <2:0> - O C l IP<2:0> -

IPC1 009A T2IP <2:0> - OC2IP <2:0> -

IPC2 009C. - U1RXIP <2:0> - SPI1 IP <2:0> -

IPC3 009E - - DMA1 IP <2:0>

IPC4 00A0 - IC8IP <2:0> - IC/IP <2:0> -

IPC5 00A2 TAIP <2:0> - OC4IP <2:()> -

IPC6 00A4 - U2TXIP <2:0> _ U2RXIP <2:0> -

IPC7 00A6 IC6IP <2:0> - IC5IP <2:0> -

IPC8 00A8 C1 IP <2:0> - C1RXIP <2:0>

IPC9 00AA - IC5IP <2:0> - IC4IP <2:0> _ ■/

IPC.10 00AC - OC7IP <2:0> - OC6IP• '

IPC11 00AE T6IP <2:0> - DMA4IP <2:0> -

IPC12 OOBO T8IP <2:0> - MI2CIP <2:0> -

IPC13 00B2 C2RXIP <2:0> - INT4IP <2:0>

IPC14 00B4 DCIEIP <2:0> - QEIIP <2:0> o í " iV Ív - A

IPC15 00B6 FI.TAIP <2:0> - . - -

; IPC16 00B8 - - - U2FIP <2:0>

IPC17 OOBA'

C2TXIP <2:0> CITXIP <2:0> -

Figura 8.12. Nombre y distribución de los bits de los registros que se utilizan en el procesamiento delas interrupciones y excepciones de los dsPIC33F.

Page 126: DsPIC Diseño practico de aplicaciones

1 0 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

NOMBRE B1T6 BIT5 BIT4 BIT3 BIT2 BIT1 BITO ESTADO RESET

IFSO OC2IF IC2IF DMA01IF TI IF OC1IF IC1IF INT0IF 0000 0000 0000 0000

0 \ IC7IK AD2IF INT1IF CNIF - MI2C1IF SI2C1IF 0000 0000 0000 0000

IFS2 IC4IF IC3IF DMA3IF C1IF C1RXIF SPI2IF SPI2EIF 0000 0000 0000 0000

IFS3 INT4IF INT3IF T9IF T8IF MI2C2IF SI2C2IF T7IF• • ................ -

0000 0000 0000 0000

IFS4 C1TXIF DMA7IF DMA6IF - U2EIF U1EIF FLTBIF 0000 0000 0000 0000

IFCO OC2IE IC2IE DMA0IE THE OCHE IC1IE INT0IE 0000 0000 0000 0000

IKC1 IC7IR AD2IE INTIIE C.NIE - MI2C1IE SI2C1IE 0000 0000 0000 0000

1LC2 IC4ÍE IC3IE DMA3IE C1IE C1RXIE SPI2IE SPI2EIE 0000 0000 0000 0000

ICO INT4IE INT3IE T9IE TÍ3IE MI2CI2IE SI2CIE T7IE 0000 0000 0000 0000

ICC 4 ClTXIE DMA7IE DMA6IE . ; ; U2EIE U1EIE FI.TBIE 0000 0000 0000 0000 ;

IPCO ICI IP <2:0> INTOIP <2:0> 0100 0100 0100 0100

IPC1 IC2IP <2:0> - DMA0IP <2:0> 0100 0100 0100 0100

IPC2 SPI1EIP <2:0> T3IP <2:0> 0100 0100 0100 0100

IPC3 AD1IP <2:0> U1TXIP <2:0> 0100 0100 0100 0100

IPC4 MI2C.1 IP <2:0> - SI2C1 IP <2:()> 01000100 01000100

IPC5 AD2IP <2:0> INT1 IP <2:0> 0100 0100 0100 0100

IPC6 OC3IP <2:0> - DMA2IP <2:0> 0100 0100 0100 0100

IPC7 INT2IP <2:0> T5IP <2:0> 0100 0100 0100 0100

IPC8 SPI2IP <2:0> SPI2FIP <2:0> 0100 0100 0100 0100

IPC9 ÍC3|P <2:0> - DMA3IP <2:0> 0100 0100 0100 0100

ipcro OC5IP <2:()> - IC6IP <2:0> 0100010001000100

IPC11I

-

I- OC8IP <2:0> 0000 0000 0000 0000

IPC12 SI2C2IP <2:0> - T7IP <2:0> 0100 0100 0100 0100

IPC13 INT3IP <2:ü> T9IP <2:0> 0100 0100 0100 0100

IPCI4 PVVMIP <2:0> - : C2IP <2:0> 0100 0100 0100 0100

I PC 1.5 DMA5IP <2:0> : DCIIP <2:0> 0100010001000100 ;

IPC16 U1 EIP <2:0> FLTBIP <2:0> 0100 0100 0100 0100

IPC17 DMA7IP <2:0> - DMA61P <2:0> 0000 0000 0000 0000

Figura 8.12. Nombre y distribución de los bits de los registros que se utilizan en el procesamiento delas interrupciones y excepciones de los dsPlC33F. (Continuación).

Page 127: DsPIC Diseño practico de aplicaciones

CAPÍTULO

9 Características de las instrucciones y modos de direccionamiento

9.1. CARACTERÍSTICAS GENERALES DE LAS INSTRUCCIONES

Los DSC soportan dos tipos principales de instrucciones:

1* Las instrucciones típicas de los microcontroladores clásicos, que se denominan “instrucciones MCU" (65 instrucciones).

2 * Las instrucciones específicas de los DSP, que reciben el nombre de “instrucciones DSP" (19 ins­trucciones).

En base a un repertorio híbrido de 84 instrucciones MCU y DSP, Microchip ha intentado facili­tar el tránsito a los diseñadores de proyectos con microcontroladores al campo de las aplicaciones DSP. Los dos tipos de instrucciones se procesan en una misma Unidad de Ejecución 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 compilador en lenguaje C al cual se ha orientado la programación de los DSC.

El tamaño de las posiciones de la memoria de programa es de 24 bits, que coincide con el de la mayoría de las instrucciones DSC. Sólo 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 tamaño 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 Unidad Generadora de Direcciones, AGUX y AGUY. Como se explicó anteriormente las instrucciones tipo MCU operan con un único espacio lineal de datos y sólo las instrucciones DSP trabajan con los espacios X e Y a los que se puede ac­ceder simultáneamente.

Una característica muy importante del espacio de datos es que su mitad superior de 32 KB de ta­maño no está implementada en RAM física, pero se puede mapear opcionalmente en una página de 16 K posiciones de la memoria de programa denominada PSV (Visibilidad del Espacio de Progra­ma). De esta manera se amplía el espacio útil para los datos.

Page 128: DsPIC Diseño practico de aplicaciones

1 1 0 dsPIC DISFÑO PRÁCTICO 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 más peso del formato, es el “código OP” que se destina a identificar la instrucción que se trata. El resto del formato se dedica a especificar los operandos y otras caracte­rísticas de la instrucción. Por esta razón aquellas instrucciones que son implícitas y no necesitan operandos, detrás del código OP tienen un valor concreto.

EJEMPLO 1

La instrucción NOP (No Operar) tiene como código OP 0x00, pudiendo existir cualquier valor en los dos bytes restantes del formato. (Figura 9 .1.)

o o o o o o o o16 15

X X X X X X X X X X X X X X X X

Figura 9.1. La instrucción NOP no tiene operandos y el código OP en el primer byte de su form¿}to es 0x00 pudiendo existir cualquier valor en los otros dos.

EJEMPLO 2

La instrucción RESET que fuerza la inicialización del procesador no requiere ningún operando y su código OP es l i l i 1110. (Figura 9.2.)

Figura 9.2. Formato de la instrucción RESET que carece de operandos.

EJEMPLO 3

La instrucción PUSH 0x336A introduce en la cima de la Pila la palabra de 16 bits situada en la po ­sición de la memoria de datos cuya dirección es 0x336A que está situada en los 32 KB inferiores del espacio de memoria. El primer byte del form ato de esta instrucción corresponde al código OP,o sea al perteneciente a PUSH que es 1111 1000, mientras que los otros dos bytes contienen la di­rección de la memoria de datos donde se halla el operando que se va a cargar en la cima de la Pi­la que apunta WI5. Tras la ejecución de esta instrucción W15 se incrementa automáticamente en dos unidades. (Figura 9.3.)

Figura 9.3. F.l primer byte del formato de la instrucción PUSH 0x336A es fijo porque es el código OP de PUSH. Los otros dos contienen la dirección del operando.

Page 129: DsPIC Diseño practico de aplicaciones

CARACTERÍSTICAS DE LAS INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO 111

En la tabla de la Figura 9.4 se ofrecen los códigos OP correspondientes al primer byte del for­mato de las instrucciones de los DSC.

El código OP se forma lomando los 4 bits de la columna y a continuación los 4 bits de la fila.

( y g g0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

0000 NOP

BRAG\LL

GOTORCAI.L

CALL GOTO RETIWRETFIE

RETURNRCAI.L DO RFPEAT -

BRA<OA)

BRA(OB)

BRA(SA)

BRA(SB)

0001 SUBR SUBBR

0010 MOV MOV

0011BRAÍOV)

BRA

(OBRA<z>

BRA(Nj

BRA

(LE)

BRA(LT)

BRA(LEU)

BRABRA

(NOV)BRA(NC)

BRA(NZ)

BRA(NN)

BRA(GT)

BRA(GE)

BRA(CTU)

0100 ADD ADDC

0101 SUB SUBB

0110 AND XOR

0111 IOR MOV

1000 MOV MOV

1001 MOV MOV

1010 BSET BC‘ LR BTC BIST BTSTS BTST BTSS BTSC BSET BCLR BTG BTST BTSTS BSW BTSS btsc:

1011ADD

a d d c :SUB

SUBBANDXOR

IORMOV

ADDADDC

SUBSUBB

ANDXOR

IORMOV

MUL.USMUL.UU

MUL.SSMUL.SU

TBLRDII TBLDRL

TBLWTHTBIWTL

MUISUB

SUBBMOV.D MOV

1100

MACMPY

MPY.NMSC

CIRAC

MACMPY

MPY.NMSC

MOV-SAC

SFTAC ADD LACADDNECSUB

SAC SAC.R -FFILFF1R

1101 SLASRISR

RLCRLNC

RRCRRNC

SIASRLSR

RLCRLNC

RRCRRNC

DIV.SDIV.U

DIVF - - - SL ASR LSR FBCL

11 10 CPO CP CPB CPOCP

CPBCPSGTCPSI.T

CPSNLINCINC2

DECDEC2

COMNEG

C.LRSETM

INCINC2

DECDEC2

COMNEC.

CLRSETM

11111liD

FDAC MAC MPY

■ ■'

PUSH POPLNK

IJLNKSE ZE DISI

DAWEXCHSWAP

CLRVVDTHYVRSAV

POPSPUSH.SRESET

NOPR

Figura 9.4. Tabla con la que se puede obtener el código OP del primer byte del formato de las ins­trucciones de los DSC.

Page 130: DsPIC Diseño practico de aplicaciones

112 dsPIC. DISEÑO PRÁCTICO DE APLICACION ES

9.3. TIEMPO DE EJECUCIÓN DE LAS INSTRUCCIONES

La mayoría de las instrucciones se ejecutan en un ciclo de instrucción equivalente a 4 ciclos de re- loj (4 . Tose), con las siguientes excepciones:

instrucciones DO, MOV.D, POP.D, TBLRDH, TBLWTH, TBLRDL y TBLWTL se ejecutan en 2 ci­clos de instrucción.

2.a Las instrucciones DIV.S, DIV.Vy DIVF van precedidas por una instrucción REPEAT #17 que conlle­va 18 repeticiones y supone una duración de 18 ciclos de instrucción.

3* Las instrucciones que modifican al PC requieren dos ciclos de instrucción.Las instrucciones de salto condicional se ejecutan en 1 ciclo si no se salta, 2 ciclos si se hace el salto sobre una instrucción de palabra y 3 ciclos si el salto se realiza sobre una instrucción de 2 pa­labras.Las instrucciones de bifurcación condicional se ejecutan en 1 ciclo si no hay bifurcación y en 2 si la hay.

4 * Un caso especial son las instrucciones de retorno que modifican el PC, son RETFIE, RETLWy RE- TURN que se ejecutan en 3 ciclos de instrucción excepto si hay una excepción 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 sólo requiere retardo en la primera ejecución del bucle.

EJEMPLO l

Dado un DSC cuyo oscilador externo funciona a una frecuencia de 1MHz, calcular el tiempo que tardaría en ejecutar la instrucción MAC W4xW5, B.El DSC larda en ejecutar la instrucción MAC 1 ciclo de instrucción.

Tosc = — = — = ------- "7— = 1 1 0 6 -v = 1/ tóFosc 1 M hz 1 1 0 6hz

1 ciclo de instrucción = 4 • T OSc = 4 * lp s = 4¡a s

La instrucción M AC W4xW5, B tarda en ejecutarse 4/js

EJEMPLO 2

Dado un DSC cuyo oscilador externo funciona a una frecuencia de 33MHz, calcular el tiempo que tardaría en ejecutarse una instrucción CALL.La instrucción CALL, al tener que modificar el PC, tarda 2 ciclos de instrucción en ejecutarse.

1 _ 1 ____ \_

Fosc ~ 33Mhz ~ 3 3 -10ofe

/ ciclo - 4 • Tose — 4 • 30ns = 120nsDebido a que esta instrucción tarda 2 ciclos —>• 2 • !20r¡s = 240r¡s Una instrucción CALL tarda en ejecutarse 240ns

Tosc. = — ^ = ---------------= -------------- — = 0 . ° 3 ■ 1 0 ^ = 30775

Page 131: DsPIC Diseño practico de aplicaciones

CARACTERÍSTICAS DE LAS INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO 113

9.4. M ODOS DE DIRECCIONAMIENTO DE LA MEMORIA DE PROGRAMA

Se hace referencia en este apartado sólo al direccionamiento de las instrucciones en la memoria de programa, dejando para más adelante el direccionamiento de datos que pueden estar ubicados en la memoria de programa.

Las posiciones de la memoria de programa tienen 24 bits y las direcciona el PC que consta de 23 bits, teniendo siempre a 0 el bit de menos peso, lo que significa que su valor se incrementa automáticamente de forma sccuencial en 2 unidades. El valor del PC puede modificarse de forma absoluta o relativa. La instrucción que modifica el PC puede manejar un valor inmediato o hacer referencia a un registro de trabajo que soporta un cambio dinámico.

Existen varios modos de direccionamiento que no son muy conocidos. El direccionamiento in­herente es el que usan las instrucciones NOP, RESET, PUSH,... que aparentemente no direccionan ningún lugar pero, realmente, sí lo estamos haciendo debido a que viene implícito dentro de la pro­pia instrucción. También 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 dirección contenida en el correspondiente Vector de Interrupción. En los retornos, el valor del PC se carga automáticamen­te con los valores salvados previamente en la Pila. En las llamadas a subrutina se recomienda utili­zar la instrucción RCALL, que sólo ocupa una palabra de instrucción 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.

INSTRUCCIÓN/CONDICIÓN M ODIFICACIÓN PC USO DE LA PILA

EJECUCIÓN SECUENCIA!. PC=PC+2 NINGUNO

BKA EXPR BIFURCACIÓN CONDICIONAL PC=PC+2 S litió NINGUNO

BRA CONDICIÓN, EXPR BIFURCACIÓN CONDICIONAL

PC=PC+2 (CONDICIÓN FALSA) PC=PC+2-Slit16 (CONDICIÓN VERDADERA)

NINGUNO

CALL EXPR LLAMADA SUBRUTINA PC=lit23 SE SAIVA PC+4

CALL Wn LLAMADA SUBRl/TINA INDIRECTA PC=VVn SE SALVA PC+2

GOTO EXPR SALTO INCONDICIONAL PC-lit23 NINGUNO

GOTO Wjfi SALTO INCONDICIONAL INDIRECTO PG=Wn NINGUNO

R CALL EXPR LLAMADA RELATIVA PG= PC+2-SI ¡ti 6 SE SALVA PC+2

RCALL Wn LLAMADA RELATIVA INDIRECTA PC=PC+2-Wn SE SALVA PC+2

TRATAMIENTO FXCFPCIÓN PC=VECTOR DE INTERRUPCIÓN SE SALVA PC+2

PC=DESTINO INSTRUCCIÓN REPEAT (BUCLE REPEAT)

NO SE MODIFICA PC SI ESTÁ ACTIVA REPEAT NINGUNO

PC=DIRECCIÓN DOEND (BUCLE DO) PC=DOSTART SI ESTÁ ACTIVO DO NINGUNO

Figura 9.5. Tabla que muestra el comportamiento del PC y de la Pila con las instrucciones que mo­difican el PC.

Page 132: DsPIC Diseño practico de aplicaciones

1 1 4 dsPIC. DISFÑO PRÁCTICO DE APLICACIONES

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

Se trata de utilizar la Memoria de Programa, que es más lenta, barata y no volátil, 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 instrucción especial. Se habilita este procedimiento poniendo a 1 con el tercer bit del registro CORCON y cargando el registro PSV- PAG que tienen un tamaño de 8 bits.

9.5. M ODOS DE DIRECCIONAMIENTO DE LOS DATOS

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

1o Direccionamiento directo.2.° Direccionamiento directo por registro. 3 ° Direccionamiento indirecto por registro. 4 ° Direccionamiento inmediato.

9.5.1. Direccionamiento directo

Lo emplean las instrucciones que tienen como operando la dirección 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 instrucción MOV es posible acceder a los 64 KB con este direccionamiento.

Usando este modo de direccionado se puede cargar cualquier posición de la memoria de datos con el contenido de un registro de trabajo W y viceversa. Los operandos pueden tener tamaño byte o palabra, excepto MOV que sólo trabaja con palabras.

EJEMPLO 1

DEC 0x2200 ;[0x2200] [0x2200] - 1La instrucción anterior decrementa una unidad el valor de la palabra depositada en la dirección 0x2200 de la RAM.

EJEMPLO 2

M O V0x2200, W5 ;[0x2200] -► W5Mueve la palabra depositada en la dirección 0x2200 de la RAM al registro W5.

La mayoría de las instrucciones que usan el direccionamiento directo toman al registro de trabajo WREG como operando implícito, actuando Wü como WREG. Este tipo de instrucciones comien­

Page 133: DsPIC Diseño practico de aplicaciones

CARACTERÍSTICAS DE LAS INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO 115

zan leyendo los operandos, uno de los cuales implícitamente reside en WO, luego se realiza una ope­ración con ellos y, finalmente, el resultado se escribe en WREG. Son instrucciones de lectura-mo­dificación-escritura.

EJEMPLO 3

AND 0x2200 ;[0x2200] AND WO WOCon el valor de la palabra contenida en la dirección 0x2200 se realiza la operación lógica 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 dirección 0x2200.

9.5.2. Direccionamiento directo por registro

Se emplea para acceder al contenido de los 16 registros de trabajo (W0-W15) que actúan como operando en la instrucción. El acceso puede ser a un dato de tamaño 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 * * + W6Se 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 operación lógica AND entre el byte de menos peso de W1 y el operando inmediato 0xF2, depositándose 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 dirección efectiva del operando en la memoria de datos. Los registros W actúan como punteros y la gran ventaja de este procedi­miento es la posibilidad de incrementar o decrementar automáticamente el contenido de un regis­tro antes o después de ejecutar la instrucción, permitiendo la exploración secuencial de los arrayso bancos de datos en el sentido que se desee. Según que el tamaño de los datos direccionados por el registro W sea de uno o de dos bytes o de más, los incrementos o decrementos son de una, dos unidades o más. En la tabla de la Figura 9.6 se presentan las modalidades del direccionamiento in­directo por registro.

El direccionamiento indirecto con Registro de Desplazamiento situado en la última línea 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 dirección efectiva. Wb actúa como desplazamiento de Wn y permite acceder a los 64 KB de la memoria RAM, aunque carece de posibilidades de incremento y decremento.

Page 134: DsPIC Diseño practico de aplicaciones

11 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

M ODO INDIRECTO

POR REGISTROSINTAXIS

DATO TAMAÑO BYTE

DATO TAMAÑO PALABRA

M ODIFICACIÓN DE Wn

SIN MODIFICACIÓN [Wn] EA=[Wn] EA=[Wn)EL CONTENIDO DF Wn CONTIENE LA

DIRECCIÓN DE EA V N O VARÍA

PRL-INCREMENTO I++YVnl EA=lW n+=l) EA=fU'n+=2JWn ES PRE-INCREMENTADO PARA FORMAR

LA DIRECCIÓN EA DEL OPERANDO

PRE-DFCREMENTO |-W nJ EA=[Wn-=1l EA=lWn-=2]Wn FS PRE-DECREMENTADO PARA FORMAR

LA DIRECCIÓN FA DF.L OPERANDO

POST-INCRFMFMO [Wn+4-1 FA=lWri]+=1 EA=|Wn]+=2Wn CONTIENF IA DIRECCIÓN EA DE OPERANDO

Y LUEGO ES POST-INCREMENTADO

POST-DECREMENTO [W n -] EA=[Wn]-=1 EA=(Wn|-=2Wn CONTIENE LA DIRECCIÓN EA DE OPERANDO

Y LUEGO ES POST-DECREMENTADO

REGISTRODESPLAZAMIENTO

IWn+Wb] EA=|Wn+Wb] EA=[Wn+VVblLA SUMA DE Wn Y W b FORMA LA DIRECCIÓN EA

DEL OPERANDO. NO CAMBIAN W n Y W b

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

EJEMPLO 1

MOV[W3++], fW O -J ; fW 3] + [W0]; W 3^r- W3 + 2 ; WO^r- W O -2

Con esta instrucción se mueve la palabra apuntada por el contenido de W3 a la posición de me­moria que apunta WO. Después W3 incrementa 2 unidades el contenido y WO decrementa otras dos unidades el suyo. Todo ello en un ciclo de instrucción.

EJEMPLO 2

MOV.B [-W4], [W5 + 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 me­moria donde se lee el byte de menos peso de la misma y se carga en el byte de menos peso de la di­rección form ada por W5 + W6. Todo ello en un ciclo de instrucción.

EJEMPLO 3

ADD [W7~], [++W8], [W5 + 0x6] ; W 8 + W 8 + 2; [W7] + [W 8]-*~[W 5 + 0x6]; W 7^r- W7 -2

En primer 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 por W8 y el resultado se carga en la posición direc- cionada por W5 + 0x6. Finalmente, el contenido de W7 se decrementa en 2 unidades. Todo ello en un ciclo de instrucción.

Page 135: DsPIC Diseño practico de aplicaciones

CARACTERÍSTICAS DE LAS INSTRUCCIONES V MODOS DE DIRECCIONAMIENTO 117

La mayoría de las instrucciones admiten todos los modos de direccionamiento mostrados en la tabla de la Figura 9.6 con excepción del modo de Registro de Desplazamiento, que sólo 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 prebúsquedas de operandos simultáneamente 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 sólo se accede a través 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 ESPACIO X ESPACIO Y

INDIRECTO SIN MODIFICACIÓN EA=(Wx] EA=[Wy]

INDIRECTO CON POST-INCRFMENTO 2 EA=[YVxI+-2 EA=[Wy]+=2

INDIRECTO CON POST-INCREMENTO 4 EA=ÍWx]+=4 EA=IVVy)+=4

INDIRECTO CON POST-INCREMENTO 6 EA=(Wx)+=6 EA=(Wy]+=6

INDIRECTO CON POST-DECREMENTO 2 EA=[Wx!-=2 EA-(Wy]-=2

INDIRECTO CON POST-DECREMENTO 4 EA~lWx|-=4 EA=fWy|-=4

INDIRECTO CON POST-DECREMENTO 6 EA=[WxJ-=6 EA=|Wyl-=6

INDIRECTO CON REGISTRO DESPLAZAMIENTO EA=[W9+W12] EA=[W11+W12]

Figura 9.7. Modos de direccionamiento indirecto por registro para l¿is instrucciones DSP, tipo MAC.

9.5.3.1. Direccionamiento modular y por inversión de acarreo (Bit reversed addressing)

Algunas instrucciones admiten el direccionamiento modular y el de inversión 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 dirección inicial a la final automáticamen­te. El direccionamiento por inversión de acarreo se emplea para acceder a un buffer de datos es­tructurado de forma no lineal y se aplica en la resolución 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 instrucción es un valor literal constante predefinido que es­tá contenido en el formato de la propia instrucción. Se usa de forma independiente o combinada con los restantes modos de direccionamiento. El tamaño del operando inmediato puede abarcar desde 1 a 16 bits y puede tener o no bit de signo.

EJEMPLO 1

AND.B #0x0 F, W6Se realiza la operación lógica AND, bit a bit, entre el valor inmediato expresado por el byte OxOF y el byte de menos peso de Wó, depositándose el resultado en el byte de menos peso de W6.

Page 136: DsPIC Diseño practico de aplicaciones

1 1 8 dsPIC. DISFÑO PRÁCTICO DE APLICACIONES

EJEMPLO 2

ADD W i, #0x0500, [W2++]Se suma la palabra contenida en WI con el operando inmediato 0x0500, depositándose el resulta­do en la posición de la memoria de datos direccionada por W2. Luego se post-incrementa 2 unida­des W2.

9.6. DETECCIÓN DE DEPENDENCIAS

El cauce de procesamiento de los DSC se segmenta en 2 etapas para aumentar el rendimiento im­plícito del procesador. Con esta orientación se realiza la prebúsqueda de una instrucción mientras se ejecuta la anterior (segmentación implícita de 2 etapas). Puede darse la circunstancia que en una de las etapas del cauce exista una instrucción que, por ejemplo, modifique el valor de un registro de tra­bajo que como MOV.B #0x10, W5, y en la siguiente instrucción se utilice a este registro como pun­tero de un operando, como por ejemplo ADD |W 5], W6. Hasta que no se complete la primera ins­trucción 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 ejecución de la instrucción que ha mo­tivado el conflicto.

Page 137: DsPIC Diseño practico de aplicaciones

CAPITULO

El repertorio de instrucciones. Instrucciones MCUi r: . . i f..Y. ï. .V.V. . .V. -

• • .•« -■ .¿ i <-. t.

10.1. CLASIFICACIÓN DE LAS INSTRUCCIONES

Los DSC combinan en su repertorio las instrucciones típicas de los microcontroladores, llamadas instrucciones M CU , con las especializadas en la resolución de algoritmos matemáticos para el pro­cesamiento de señales, llamadas instrucciones DSP.

Los DSC cuentan con 84 instrucciones, que se agrupan en 10 categorías que se distinguen por la función principal que realizan:

X a Instrucciones de movimiento.2? Instrucciones lógicas.3.a Instrucciones matemáticas.4* Instrucciones de rotación y desplazamiento.5* Instrucciones de bit.6 S Instrucciones de comparación y brinco.7v_ Instrucciones de control del flujo del programa.

Instrucciones de Pila y registros sombra.9 f Instrucciones de control.

10 ? Instrucciones DSP.

Las nueve primeras categorías configuran las instrucciones MCU y se describen en este capítu­lo dejando para el siguiente las instrucciones DSP.

En la descripción de las instrucciones se usará la nomenclatura que maneja Microchip y que se presenta en la tabla de la Figura 10.1.

10.2. INSTRUCCIONES DE M OVIM IENTO

En la tabla de la Figura 10.2 se presentan las características principales de las instrucciones que se en­cargan de mover información entre el operando fuente y el destino. La instrucción MOV es una de las más empleadas en la mayoría de los programas. Además de mostrarse la sintaxis usada en lenguaje

119

Page 138: DsPIC Diseño practico de aplicaciones

1 2 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

SÍMBOLO DESCRIPCIÓN

{) OPERACIÓN O CAMPO OPCIONAL

[TEXT} POSICIÓN DIRECCIONADA POR TEXT

(TFXT) CONTENIDO DE TEXT

ffTEXT LITERAL DEFINIDO POR TEXT

A C, DJ "A" DEBE SER DEL CONJUNTO [B, C, D]

<N:M> CAMPO DE BIT DE REGISTRO

{l ABEL:} NOMBRE DE ETIQUETA OPCIONAL

.... I> ...... SELECCIÓN DE M O DO DE BYTE

SELECCIÓN M O DO DOBLE PALABRA

.S SELECCIÓN REGISTRO SOMBRA

.w SELECCIÓN DE M O DO PALABRA (POR DEFECTO)

ACG ACUMULADOR A O ACUMULADOR B

AWB ACUMULADOR CON POST-ESCRITURA

BIT4 POSICIÓN BIT

C, DC, N ÓV, Z BITS DE ESTADO MCU

EXPR DIRECCIÓN ABSOLUTA, ETIQUETA O EXPRESIÓN

F DIRECCIÓN DE MEMORIA DATOS

LIT1 LITERAL DE 1 BIT (0:1)

LIT4 LITERAL DE 4 BITS (0:15)

LIT5 LITERAL DE 5 BITS (0:31)

LIT8 LITERAL DE 8 BITS (0:255)

LITIO LITERAL DE 10 BITS

LIT14 LITERAL DE 14 BITS

LIT16 LITERAL DE 16 BITS

LIT23 LITERAL DE 23 BITS

NINGUNO EL CAMPO NO REQUIERE UNA ENTRADA, PUEDE SER VACIO

OA, OB, SA, SB BITS DE ESTADO DSP: DESBORDAMIENTO ACCA Y ACCB, SATURACIÓN ACCA Y ACCB

PG CONTADOR DE PROGRAMA

VVb REGISTRO DE TRABAJO BASE

SLIT4 LITERAL DE 4 BITS CON SIGNO (-8:7)

SLIT6 LITERAL DE 6 BITS CON SIGNO (-32:31)

SLIT10 LITERAL DE 10 BITS CON SIGNO

SLIT16 LITERAL DE 16 BITS CON SIGNO

TOS CIMA DE LA PALABRA

Wb REGISTRO DE TRABAJO BASE

Wd REGISTRO DE TRABAJO DESTINO

VVdo REGISTRO DE TRABAJO DESTINO

Win, VVn PAREJA DE REGISTROS DIVISIÓN (DIVIDENDO, DIVISOR)

Wm*Wm PAREJA DE REGISTROS MULTIPLICACIÓN (IGUALES)

VVm‘ Wn PAREJA DE REGISTROS MULTIPLICACIÓN (DIFERENTES)

VVn REGISTRO DE TRABAJO FUENTE Y DESTINO

Wnd REGISTRO DE TRABAJO DESTINO

Wns REGISTRO DE TRABAJO FUENTE

WREG REGISTRO DE TRABAJO POR DEFECTO (W0)

Ws REGISTRO DE TRABAJO FUENTE

VVso REGISTRO DE TRABAJO FUENTE

Wx REGISTRO DE TRABAJO PARA PREBÚSQUFDA DEL BUS DE DATOS X

Wxd REGISTRO DE TRABAJO DESTINO PARA PREBÚSQUEDA DEL BUS DE DATOS X

Wv M O D O DE DIRECCIONAMIENTO FUENTE Y REGISTRO DE TRABAJO PARA PREBÚSQUEDA DEL BUS DE DATOS Y

VVyd REGISTRO DE TRABAJO DESTINO PARA PREBÚSQUEDA DEL BUS DE DATOS Y

Figura 10.1. Tabla que muestra los símbolos usados en la descripción de las instrucciones.

Page 139: DsPIC Diseño practico de aplicaciones

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 121

Ensamblador para editar cada instrucción, se facilita el número de palabras de 24 bits que ocupa en la memoria de programa y el número de ciclos de instrucción que dura su ejecución. Cuando se especi­fica el operando opcional {,WREG} el destino de la instrucción es WREG (WO), pero si 110 se espe­cifica el operando destino, actúa como tal la dirección de la memoria de datos F.

SIN TAXIS ENSAMBLADOR DESCRIPCIÓN PALABRAS CICLOS

EXCH Wns, VVnd INTERCAMBIA Wns Y VVnd 1 1

MOV F{,WREG} MUEVE F AL DESTINO (F ES LA DIRECCIÓN DE LA MEMORIA) 1 1

MOV WRCG,F MUFVF WREG A F 1 1MOV F,Wnd MUEVE F A Wnd 1 l

MOV Wns,F MUEVE Wns A F 1 1MOV.B #L im W nd MUEVE 8 BITS A Wnd 1 1

MOV LIT16,VVnd MUEVE 16 BITS A VVnd 1 1

MOV [WS+SLIT10],Wnd MUEVE [Ws+10 BITS CON SIGNO] A Wnd 1 1MOV Wns, | Wd+SLITI OI MUEVE Wns A [Ws+10 BITS CON SIGNO) 1 l

MOV Ws,Wd MUEVE Ws A Wd 1 1

M O V Í) Ws,Wnd MUEVE Ws:Ws+1 TAMAÑO DOBLE PALABRA A Wnd:Wnd+1 1 2

MOV.D Wns,Wd MUEVE Wns:Wns+1 TAMAÑO DOBLE PALABRA A W d:W d+l 1 2

SWAP Wn INTERCAMBIA LAS DOS MITADFS Wn 1 1

TBLR.DH Ws,'Wd LEE LA PALABRA ALTA DE MEMORIA DE PROGRAMA A Wd 1 2

TBLRDL Ws,Wd LEE LA PALABRA BAJA DE MEMORIA DE PROGRAMA A Wd 1 2

TBLWTH Ws,Wd ESCRIBE Ws EN LA PALABRA ALTA DF MEMORIA DE PROGRAMA 1 2

TBLWTL WsÁ-Vd ESCRIBE Ws EN LA PALABRA BAJA DE MEMORIA DE PROGRAMA 1 2

Figura 10.2. Principales características de las instrucciones de movimiento de los DSC.

La instrucción EXCH intercambia el contenido de los registros a los que afecta. La instrucción SWAP intercambia las dos mitades de la palabra de trabajo depositadas en Wn, que si tiene tamaño byte las dos mitades son de 4 bits cada una y si es palabra son de 8 bits. También las instrucciones de Tabla mueven información 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 posición W1 + 0x7 (=0x1807), que es el byte de más peso de la posición 0x1806. (Figura 10.3.)

ANTES DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

M O V .B

Figura 10.3. Efecto de la ejecución de la instrucción MOV.B WO, [W 1+0x7] en WO, W l, posición 1806 y en el Registro do Estado.

Page 140: DsPIC Diseño practico de aplicaciones

122 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

EJEMPLO 2

SWAP WOHace un SWAP en el registro WO. SWAP consiste en intercambiar el byte de más peso por el de menos peso. (Figura 10.4.)

AN TES DE L A INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

SWAP WO

WO 8095- WO B H 9580

SR 0000 SR 0000

Figura 10.4. Efecto de la ejecución de la instrucción SWAP WO en WO y en el Registro de Estado.

10.3. INSTRUCCIONES LÓGICAS

Las instrucciones de este grupo se encargan de realizar una operación lógica bit a bit entre los dos operandos fuente, depositando el resultado en el destino. Soporta las operaciones AND, OR y XOR. La instrucción con nemónico 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 actúa. (Figura 10.5.)

SINTAXIS ENSAMBLADOR DESCRIPCIÓN PALABRAS CICLOS

AND f{,w r eg kt> DESTINO=F.AND.WREG 1

AND ¿LITIO,Wn WiiaLIT10.AND.Wn 1

AND Wb, ?LIT5,Wd Wd=Wb.AND.LIT5 1

AND Wb,Ws,Wd W d=Wb.AND.Ws 1

; CLR F F=0x0000 1 1

! CLR WRfcG WREG=0x0000 1

: CLR Wd Wd=0x0000 1

! COM F(,WREG} COMPLEMENTO A 1 1

COM Ws,Wd COMPLEMENTO A 1 1 I

IOR F{,WREG}(1) DESTINO=F.IOR.WREG 1

IOR ¿LITIO, Wn Wn=LIT1 O.IOR.Wn 1 1

IOR Wh/#LIT5,Wd Wd=Wb.lOR.LIT5 1 1

IOR Wb,Ws,Wd Wd=WJb.lOR.Ws 1 1

NEC FCWRKGKD COMPLEMENTO A 2 1 1

NEC WsAVd COMPLEMENTO A 2 1 1

SETM F F-0xFFFF 1 1

SETM WRFG WREG=0xFFFF 1 1

SETM Wd Wd=0xFFFF 1

XOR F{,WRF.G}(1) DESTINO=F.XOR.WRFG 1 1

XOR ¿LITIO, Wn Wn=LIT10.XOR.Wn 1 1

XOR Wb,¿LIT5,Wd Wd=Wb.XOR.LIT5 1 1

XOR Wb,Ws,Wd Wd=Wb.XOR.Ws 1 1

Figura 10.5. Principales características de las instrucciones lógicas.

Page 141: DsPIC Diseño practico de aplicaciones

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 123

EJEMPLO 1

AND W0,#0xlF,WlRealiza una AND entre WO y 0x1 F, y almacena el resultado en WL (Figura 10.6.)

A N TE S DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

AND WD,#0x1F,W1

WO WO 6723

W1 7373 W1 > • 0 003 .

SR o óbo SR COCOSSbSbbSS • v .-_. . - . Y . - . —

Figura 10.6. Efecto de la ejecución de la instrucción A N D del ejemplo en WO, W1 y en el Registro de Estado.

EJEMPLO 2

SETM [~W6]Pre-decrementa W6 y después hace la operación SETM (poner a unos todo) el contenido de la di­rección a la que apunta W6. (Figura 10.7.)

AN TE S DE L A INSTRUCCIÓN DESPUÉS DE L A INSTRUCCIÓN

SETM [—W 6]

W 6 1250 W 6 124E

RAM 124E 3CD9 RAM 124E FFFF

SR 0000 SR 0000

Figura 10.7. Efecto de la ejecución de la instrucción SETM del ejemplo en W6, ¡a dirección 124E y en el Registro de Estado.

10.4. INSTRUCCIONES MATEMÁTICAS

Este importante grupo de instrucciones MCU soporta las operaciones aritméticas principales como son la suma (ADD), la resta (SUB), la multiplicación (MUL) y la división (DIV), admitiendo di­versas alternativas, modos de direccionado y tamaño 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 matemáticas 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.

Page 142: DsPIC Diseño practico de aplicaciones

12 4 dsPIC DISbÑO PRÁCTICO DE APLICACIONES

SINTAXIS ENSAMBLADOR DESCRIPCIÓN PALABRAS CICLOS

ADD F{,WREG}(1): DESTINO=F+WREG l i

ADDÇ ÄLlTI0,Wn Wn=LIT10+Wn+(C) 1 1

ADOC VVb,*ÜT5,VVd Wd=Wb+LIT5+(C) 1 1

ADDC WbAVsAVd W d=W b+W s+(Q 1 l

DAW.B Wn AJUSTE DECIMAL BCD 1 1

DEC F(,WREG} DESTINO=F-1 1 i

DEC WsA'Vd Wd-Ws-1 1 1

DFC2 F[,WREG} DESTINO=F-2 1 1

DEC2 WsA'Vd Wd=Ws-2 1 i

DIV.S VVmA'Vn DIVIDE ENTEROS CON SIGNO DE 16/16 BITS 1 18

DIV.SD VVmA'Vn DIVIDE ENTEROS CON SIGNO DE 32/16 BITS 1 18

DIV.U VVmA’Vn DIVIDE ENTEROS SIN SIGNO DE 16/16 BITS 1 18

DIV.U D VVmA'Vn DIVIDF ENTEROS SIN SIGNO DE 32/16 BITS 1 18

DIVF VVmA'Vn DIVISIÓN FRACCIONARIA DE 1 6/16 BITS CON SIGNO 1 18

INC F{AVREG) DESTINO=F+1 1 1

INC WsA'Vd Wd=Ws+1 1 1

1NC2 FÌA'VREG} DESTINO=F+2 1 1

INC2 WsA'Vd Wd=Ws+2 1 1

MUI. r W3:W2=F*WREC 1 1

MUL.SS Wb.WsA'Vnd {Wnd+1,Wnd}=SIGNO(Wb)*SIGNO(Ws) I 1

MUL.SU Wb, ?JIT5 A'Vnd (Wnd+1,Wnd}=SIGNO(Wb)*SIN SIGNO(LIT5) 1 1

MUL.SU VVbA'VsA’Vnd {VVnd+1 A'Vnd}=SIGNÓ{ W h)*SIN SIGNO(Ws) 1 1

MUL.US WbAVsAVnd {VVnd+1 ,Wnd}=SIN SIGNO(Wb)*SIGNO(Ws) 1 1

MUL.UU W b ,* l IT5 A’Vnd {Wnd+1 AVnd}=SIN SIGNO(Wb)*$IGNO(LIT5) 1 1

MUL.UU WbA'VsA'Vnd {VVnd+1 A'Vnd}-SIN SIGNO(VVb)*SlN SIGNO(Ws) l 1

SE VVsAVnd W nd-W s EXTENDIDO EL SIGNO 1 1

SUB FfA'VRFG} DESTINO=F-WREG 1 !

SUB ir LITI O AVn Wn=Wn-LIT10 1 1

SUB W b,“ LIT5A‘Vd Wd=Wb-LIT5 1

SUB WbAVsAVd Wd=Wb-Ws i 1

SUBB FÍAVREG} DESTINQf F-WREG-(C) 1 1

SUBB iLITIOA'Vn Wn=Wn-LIT10-(O 1

SUBB Wb,*fLIT5A'Vd Wd-Wb-LIT5-(C) 1 1

SUBB VVbAVsAVd Wd-Wb-Ws-(C) 1 1

SUBBR F{,VVREG} D ESTI NO=WR FG-f-(C) 1 1

SUBBR Wb,*LIT5,W d Wd=LIT5-Wb-(C) 1 1

SUBBR VVbAVsAVd Wd=Ws-Wb-(C) 1 1

: SUBR FiWREC} DESTINO-VVREG-F 1 1

! SUBR W b,*UT5,W d Wd=LIT5-Wb 1 1

SUBR Wb, WsA'Vd Wd=Ws-VVb 1 1

Z i VVsAVnd Wnd=Ws FXTFNDIDO A CEROS 1 1

Figura 10.8. Principales características de las instrucciones matemáticas.

EJEMPLO 1

DEC2 W5, [W6++JDecrementa en dos W5, y lo almacena en la dirección apuntada por W6, haciendo a continuación un post-incremento de 2 en W6. (Figura 10.9.)

Page 143: DsPIC Diseño practico de aplicaciones

ANTES DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 125

DEC2 W5, [W6++]

Figura 10.9. Efecto de la ejecución de la instrucción DEC del ejemplo en WS, W6, dirección 1000 y en el Registro de Estado.

EJEMPLO 2

M OV #0x8002, W0 MOVWOAV4 MOV #0x8001,W0 MOVWO,W3 REPEAT #17 DI VU W4,W3Ejecuta DIVF 18 veces. D1VF divide W4 por W3 y guarda el cociente en W0 y el resto en Wl. (Figura 10.10.)

ANTES DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

wo 6002

ooco 1

WO • 0001 i

W1 W1 0001

W3 8001 W3 8001

W4 8002 W4 8002

SR 0000 SR 0101

Figura 10.10. Efecto de la ejecución de la instrucción DIVF del ejemplo en W0, W1 y en el Registro de Estado.

10 .5 . INSTRUCCIONES DE ROTACIÓN Y DESPLAZAMIENTO

Este grupo engloba las instrucciones que realizan el desplazamiento aritmético (se mantiene el bit de signo) o el lógico (sin signo), tanto a la derecha como a la izquierda, con un máximo de 15 posiciones.

La instrucción ASR Wb, Wns, Wnd produce un desplazamiento aritmético a la derecha del con­tenido del registro Wb un número de posiciones que viene determinado por los 4 bits de menos pe­so de Wns (máximo 15), depositando el resultado en el registro Wnd.

Las instrucciones de rotación a la derecha o a la izquierda pueden efectuarse a través del acarreo (RLC y RRC), o bien sin tener en cuenta el acarreo (RLNC y RRNC).

La instrucción con nemónico LSR produce un desplazamiento lógico a la derecha y SL lo ha­ce a la izquierda. En este último caso el bit de más peso del operando fuente al desplazarse pasa a ocupar el bit señalizador de acarreo, introduciéndose un cero en el bit de menos peso del operan­do. (Figura 10.11.)

Page 144: DsPIC Diseño practico de aplicaciones

1 2 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Wb

Figura 10.11. La instrucción SL desplaza a la izquierda el contenido del operando fuente, pasando el bit de más peso a ocupar el hit de Acarreo e introduciéndose un 0 por el b it de menos peso.

SINTAXIS ENSAiMBLADOR DESCRIPCIÓN PALABRAS CICLOS

ASR F{,VVREG}(1) DESTINO=DESPLAZAMIENTO ARITMÉTICO DF F A LA DERECHA 1 1

ASR Ws,Wd Wd=DESPLAZAMIENTO ARITMÉTICO DE Ws A LA DERECHA 1 1

ASR Wb,#UT4,WdWnd=DESPLAZAMIENTO ARITMÉTICO DE W b A LA DERECHA

TANTAS POSICIONES COMO INDIQUE EL INMEDIATO1 1

ASR Wb,Wn$,WndWnd=DESPLAZAMlENTO ARITMÉTICO DE W b A LA DERECHA

TANTAS POSICIONES COMO INDIQUE EL VALOR DF Wns1 1

LSR F{,WRFG}{1) DESTINO-DESPLAZAMIENTO LÓGICO DEL REGISTRO F 1 1

LSR WsA'Vd Wd=DESPLAZAMIENTO LÓGICO DEL REGISTRO DE Ws 1 1

LSR W b,íLIT4,W ndW nd=D ES PLAZAM1ENTO LÓGICO DEL REGISTRO DE Wb

TANTAS POSICIONES COMO INDIQUE EL INMEDIATO1 1

l.SR VVb,YVns,VVndWnd=DESPLAZAMIENTO LÓGICO DE W b A LA DERECHA TANTAS POSICIONES COMO INDIQUE EL VALOR DE Wns 1

RI.C F{,VVREG}(Í)DESTINO=ROTACIÓN A LA IZQUIERDA A TRAVÉS DEL "CARRY"

DEL REGISTRO F1 1

RLC VVsAVdWd=ROTACIÓN A LA IZQUIERDA A TRAVÉS DEL "CARRY"

DEL REGISTRO Ws1 1

RLÑC aVVREG)(l) DESTINO=ROTACIÓN A LA IZQUIERDA DEL REGISTRO F. - -

RING WsA'Vd Wd=ROTAC1ÓN A LA IZQUIERDA DEL REGISTRO Ws 1 1

RRC F{AVREG}(1)DESTINO=ROTACIÓN A LA DERECHA A TRAVÉS DEL "CARRY"

DEL REGISTRO F1 I

RRC WsA'VdWd=ROTACIÓN A LA DERECHA A TRAVÉS DEL "CARRY"

DEL REGISTRO Ws1 1

RRNC F{,WREG}0) DESTIN0 = ROTAC 1ÓN A LA DERECHA DEL REGISTRO F 1 l

RRNC WsA'Vd Wd=ROTACIÓN A LA DERECHA DEL REGISTRO Ws 1 1

SL F^WREGKD DESTINO=DESPI AZAMIENTO A LA IZQUIERDA DE F 1 1

SL WsA'Vd Wd=DESPLAZAMIENTO A LA IZQUIERDA DE Ws 1 1

SL Wb,íLIT4A'VndWnd=DESPLAZAMIENTO A LA IZQUIERDA DE W b TANTAS

POSICIONES COMO INDIQUE EL VALOR INMEDIATO1 1

SI WbAVnsA'VndWnd=DESPLAZAMIENTO A LA IZQUIERDA DE W b TANTAS

POSICIONES COMO INDIQUE WnsI 1

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

Figura 10.12. Principales características de las instrucciones de rotación y desplazamiento.

Page 145: DsPIC Diseño practico de aplicaciones

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 127

EJEMPLO 1

ASR RAM200Desplaza a la derecha los bits de RAM200, dejando el de menos peso en el bit C e introduciendo repetido el de más peso por la izquierda. (Figura 10.13.)

A N TE S DE L A INSTRUCCIÓN DESPUÉS DE L A INSTRUCCIÓN

ASR RAM 200

RAM200 8009 i R AM 200 • C004

SR 0000 SR 0009yv»y.w:ririvfívi-i

Figura 10.13. Efecto de la ejecución de ¡a instrucción ASR del ejemplo en RAM200 y en el Registro de Estado.

EJEMPLO 2

SL 0x1650, WREGDesplaza a la izquierda los bits de la dirección 0x1650, dejando el de más peso en el h it C e intro­duciendo un 0 por la derecha. Deja el resultado en WREG (W0). (Figura 10.14.)

A N TE S DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

SL 0x1650, W REG

WD ' f g ¡ ' ¡ 0900 WO

RAM 1650 4ÜG5 RAM 1650v « y .- . - ;.....

4065

SR 0000 SR 0008

Figura 10.14. Efecto de la ejecución de la instrucción SL del ejemplo en W0, dirección 1650 y en el Re­gistro de Estado.

10.6. INSTRUCCIONES DE BIT

Son las instrucciones que realizan una operación sobre un bit concreto de una posición de la me­moria de datos direccionada por F, de un registro de trabajo Ws.

La instrucción BCLR Ws, #bit4 pone a 0 el bit del registro Ws que viene determinado 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 instrucción BCLR f #bit4 pone a 0 el bit especificado por #bit4 en el contenido de la posición de la memoria de datos con dirección f. Cuando el nemónico es BSET pone a 1 el b.it especificado.

La instrucción BSW.C Ws, Wb escribe el valor del acarreo C en el bit del registro Ws especifica­do por los 4 bits de menos peso del registro Wb. Esta operación puede representarse C. ->- Ws<(Wb)>. La instrucción BSW.Z Ws, Wb realiza una operación semejante pero escribiendo el valor del señali­zador Z negado y se representa como

Page 146: DsPIC Diseño practico de aplicaciones

1 2 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Z# Ws<(Wb)>. Las instrucciones con nemónico BTG invierten el valor del bit especificado en el operando.

La instrucción BTST testea un bit de un registro W s o de una posición de memoria F y lo guar­da en el señalizador C cuando tienen la extensión “.C’\ mientras que si la extensión es “.Z” se car­ga en Z el inverso del bit testado. Cuando el nemónico es BTSTS hacen lo mismo que las anterio­res y además ponen a 1 el bit testado.

La instrucción FBCL Ws, Wnd explora el registro Ws a partir del bit de más peso detrás 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 exploración expresado con 16 bits con extensión 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 extensión de ceros en Wnd. Finalmente, la instrucción FF1R hace lo mismo que la anterior pero la exploración comienza por la derecha, o sea, por el bit de me­nos peso de Ws. (Figura 10.15.)

......................SINTAXIS ENSAMBLADOR DESCRIPCIÓN

------ ---------PALABRAS

I;' . . ' '

CICLOS

BCLR F,*BIT4 BORRAR EL BIT DF F QUE SE ESPECIFICA EN EL VALOR INMEDIATO 1 1

BCI.K W§;*glT4BORRAR EL BIT DE Ws QUE SE ESPECIFICA EN

EL VALOR INMEDIATO1 1

BSET F,«BlT4ESTABLECER EL BIT DF F QUE SE ESPECIFICA EN

EL VALOR INMEDIATO1 1

BSET Ws,#BIT4FSTABI FCFR EL BIT DE Ws QUE SE ESPECIFICA EN

EL VALOR INMEDIATO1 1

BSVV.C VVs,VVb ESCRIBIR EL BIT C EN Ws<Wb> 1 1

BSW.Z Ws,VVb ESCRIBIR EL BIT Z tt EN Ws<Wb> 1

BTG F,¿BIT4 INVERTIR EL VALOR DE UN BIT DEL REGISTRO F 1 1

BTG Ws,#8IT4 INVERTIR EL VALOR DE UN BIT DEL REGISTRO Ws 1 1

: BTST F,«BIT4 EL INVERSO DEL BIT ESPECIFICADO SE GUARDA EN Z 1 I

BTST.C Ws,ffBIT4 EL BIT ESPECIFICADO SE GUARDA EN C 1 1

BTST.Z Ws,*BIT4 EL COMPLEMENTO DEL BIT ESPECIFICADO SF GUARDA FN Z

BTST.C Ws.Wb EL BIT ESPECIFICADO SE GUARDA EN C 1 1

BTST.Z VVs,VVb EL COMPLEMENTO DEL BIT ESPECIFICADO SE GUARDA EN Z 1 1

BTSTS F,SBIT4EL BIT ESPECIFICADO INVERTIDO SF GUARDA EN Z

Y DICHO BIT SE PONE A 11 1

: BTSTS.C Ws,*BIT4 El. BIT ESPECIFICADO SE GUARDA EN C Y LUEGO SE PONE A 1 1

BTSTS.Z W*>,-BIT4EL BIT ESPECIFICADO INVERTIDO SE GUARDA EN Z

Y DICHO BIT SE PONE A l1

FBCL VVs.WndENCUENTRA EL PRIMER BIT CAMBIO DE BIT,

EMPEZANDO POR LA IZQUIERDA1 1

FF1L Ws,Wnd ENCUENTRA EL PRIMER BITA 1 EMPEZANDO POR LA IZQUIERDA 1 1

FFIR VVsAVnd ENCUENTRA EL PRIMER BIT A 1 EMPEZANDO POR LA DERECHA 1 1

Figura 10.15. Principales características de las instrucciones de bit.

Page 147: DsPIC Diseño practico de aplicaciones

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 1 2 9

EJEMPLO 1

BTG 0x1660, #0x8Invierte el bit 8 de 0x1660 y lo guarda en esa misma dirección. (Figura 10.16.)

A N TE S DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

BTG 0x1660. #0x8

RAM 1660 5620 | RAM 1660 5720 j

SR 0000 | SR ' « » O j

Figura 10.16. Efecto de la ejecución de la instrucción BTG clel ejemplo en la dirección 1660 y en el Re­gistro de Estado.

EJEMPLO 2

FF1L W2, W5Encuentra el primer bit a 1 de W2 y lo guarda en W5. (Figura 10.17.)

AN TES DE L A INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

FF1LW 2, W5

W2 OQOÁ W 2 000A

W5 BBBB W 5 000D

. SR 0000 SR 0000

Figura 10.17. Efecto de la ejecución de la instrucción FF11. del ejemplo en W2, W5 y en el Registro de Estado.

10.7. INSTRUCCIONES DE CO M PARACIÓ N Y BRINCO

Son instrucciones que comprueban una condición o comparan un valor que puede ser el de un bit concreto y según su valor binario se “brinca” o no. El “brinco” (skip) consiste en un salto pequeñi- to. sólo se salta la instrucción siguiente, ejecutando en lugar de la instrucción que hay a continua­ción una NOP. Si no se cumple la condición impuesta al bit a comparar se ejecuta normalmente la siguiente instrucción. Cuando no hay brinco la instrucción se ejecuta en un ciclo de instrucción, pe­ro si lo hay la duración es de 2 ciclos si el brinco se efectúa sobre una instrucción de una palabra y de 3 si se trata de una instrucción de 2 palabras.

La instrucción BTSC Ff #bit4 comienza testando el valor del bit expresado por #bit4 en el con­tenido de la posición de la memoria de datos de dirección F, y si vale 0. se produce un brinco. Cuan­do el nemónico es BTSS el brinco se produce si el bit explorado vale 1.

La instrucción de comparación CP F compara o resta el valor contenido en la posición F con el del registro de trabajo implícito W0 (WREG) y activa los señalizadores en el Registro de Estado (C, DC, OV, N y Z) según el resultado (F) - W0. No genera resultado de la resta ni lo almacena. Hay

Page 148: DsPIC Diseño practico de aplicaciones

1 3 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

otras instrucciones de comparación cuyos operandos son registros o valores inmediatos, como las instrucciones CPO que realizan la comparación con el valor 0x0.

La instrucción CPB F compara o resta el valor de la posición direccionada por F con el del re­gistro de trabajo implícito y con el acarreo invertido o llevada, es decir, (F) - WREG - C # . La ope­ración no genera resultado y sólo afecta a los señalizadores de SR.

CPSEQ Wb, Wn resta el contenido de los dos registros especificados, Wb - Wn, y si son igua­les brinca. La instrucción con nemónico CPSGT produce el brinco cuando la comparación 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 DESCRIPCIÓN PALABRAS CICLOS

BTSC F,*BIT4 BRINCA SI El. BIT TESTEADO DEL REGISTRO F ES 0 1 1 (2 ó J ;

BTSC VV/ñBIT4 BRINCA SI EL BIT TESTEADO DEL REGISTRO F ES 0 1 1 (2 ó 3}

BTSS F,ffBIT4 BRINCA SI EL BIT TESTEADO DEL REGISTRO Ws ES 1 1 1 {2 ó 3)

BTSS Ws,íBIT4 BRINCA SI EL BIT TESTEADO DEL REGISTRO Ws ES 1 1 1 (2 ó 3)

! CP F RESTA (F-VVREG) SÓLO AFECTA A FLAGS 1 1

CP W M U T 5 RESTA (Wb-LIT5) SÓLO AFECTA A FLAGS 1 1

CP VVb/Ws RESTA (Wb-Ws) SÓLO AFECTA A FLAGS 1 1

CPO F RESTA (F-OxOOOO) SÓLO AFECTA A FLAGS 1 1

CPO Ws RESTA (W$-0x0000) SÓLO AFECTA A FLAGS 1 1

CPB F: RESTA (F-WREG-C) SÓLO AFECTA A FLAGS 1 1

CPB W M LIT5 RESTA (Wb-LIT5-C) SÓLO AFECTA A FLAGS 1 1

CPB Wb,VVs RESTA (Wb-VVs-C) SÓLO AFECTA A FLAGS 1 1

CPSEQ VVb,Wn RESTA (Wb-Wn") BRINCA SI = 1 1 (2 ó 3)

CPSGT VVb/Wn RESTA (Wb-Wn) BRINO\ SI > 1 1 (2 ó 3)

CPSLI WbAVn RESTA (Wb-Wn) BRINCA SI < 1 1 (2 ó 3)

CPSNE Wb,Wn RESTA (Wb-Wn) BRINCA SI 1 1 (2 ó 3}

Figura 10.18. Principales características do las instrucciones de comparación y brinco.

EJEMPLO 1

CP 0x1200Compara mediante una resta WREG (W0) con el contenido de la dirección 0x1200. El resultado no se guarda, sólo afecta a los Jlags. (Figura 10.19.)

EJEMPLO 2

CPB.B RAM400Compara el byte contenido en RAM400 con el byte de menos peso de W0 mediante una resta (usan­do CU). Sólo afecta a los Jlags. Modo byte. (Figura 10.20. )

Page 149: DsPIC Diseño practico de aplicaciones

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 131

ANTES DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

CP 0x1200

wo Till...................:: : ■ wo V .V /.V .Y A V , 2377

RAM 1200 0077 RAM 1200 2277

SR OOÜO SR . 0008 (N = 1)

Figura 10.19. Efecto de la ejecución de la instrucción C.P de! ejemplo en WQ, dirección 1200 y en el Re­gistro de Estado.

ANTES DE L A INSTRUCCION DESPUÉS DE LA INSTRUCCIÓN

CPB.B RAM400

W0

RAM400

SR

WO 8823 l t l £ £

RAM 400 0823

0000 SR 0008 11z

Figura 10.20. Efecto de la ejecución de la instrucción CPB.B del ejemplo en WQ, RAM400 y en el Re­gistro de Estado.

10.8. INSTRUCCIONES DE CO NTRO L DEL FLUJO DEL PROGRAM A

Hay un numeroso grupo de instrucciones cuya misión fundamental es la de controlar el valor del PC y por tanto el flujo del programa en curso. La mayoría de estas instrucciones vienen acompañadas por el nemónico BRA que se refiere a la “bifurcación” del PC consistente en añadir a su valor actual otro que se incluye en la instrucción. Por ejemplo, BRA E xp rts una instrucción de bifurcación incondicional que incrementa el valor actual del PC que es PC + 2 en el valor contenido en Expr (slitló) multiplicado por2 ya que el PC sólo opera con direcciones pares. La operación que realiza esta instrucción es PC -<- (PC + 2) + 2 x slitló, que permite alcanzar una bifurcación de 32 K instrucciones en ambas direcciones de la actual. Variantes de BRA son todas las condicionales, como BRA C, que bifurca si el señalizador C = 1, BRA NC. bifurca si C = 0, BRA GE bifurca si los señalizadotes 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 O A si OVA = 1 y BRA SA si el flag de saturación 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 desviación 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á direccio- nada por W15.

La instrucción 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. Después incrementa DL<2:0> (CORCÜN<10:8>) y ejecuta el código comprendido entre DOSTART y DOEND el número de veces que contenga DCOUNTLa instrucción REPEAT #Ht14 repítela instrucción que tiene a continuación #lit14+1 veces. La instruc­ción REPEAT Wn repite ja instrucción siguiente Wn< 13:0> veces.

Page 150: DsPIC Diseño practico de aplicaciones

RETFIE se usa para el retorno al programa principal desde la rutina de atención a una interrup­ción. Restaura el SR, el PC y el del bit IPL<3>.

Además de RETURN para el retomo de subrutinas también 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.)

1 3 2 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

SINTAXIS ENSAMBLADOR DESCRIPCIÓN PALABRAS CICLOS

BRA EXPR BIFURCACIÓN CONDICIONAL 1 2

RRA Wn BIFURCACIÓN CALCULADA 1 2

BRA CEXPR BIFURCA SI "CARRY"='I, 1 1(2) U)

BRA CL.HXPR BIFURCA SI ES MAYOR Ó IGUAL 1 1(2) (I)

BRA GEU,EXPR BIFURCA SI ES MAYOR Ó IGUAL SIN SIGNO 1 1(2) (1)

BRA GT,EXPR BIFURG\ SI ES MAYOR 1 1(2){1)

BRA GTUFXPR BIFURCA SI ES MAYOR SIN SIGNO 1 1(2) {1)

BRA LE,EXPR BIFURCA SI ES IGUAL Ó MAS PEQUEÑO 1 1(2X1)

BRA I.EU,FXPR BIFURCA SI ES IGUAL Ó MÁS PEQUEÑO SIN SIGNO 1 1(2)(1)

BRA LT.EXPR BIFURCA SI ES MÁS PEQUEÑO 1 1(2)(1)

BRA ITUEXPR BIFURCA SI ES MÁS PEQUEÑO SIN SIGNO 1 K2)(1)

BRA N,EXPR BIFURCA SI FS NEGATIVO 1 1(2) (1)

BRA NQËXPR BIFURCA SI N O HAY "CARRY" 1 1(2)0)

BRA NN,EXPR BIFURCA SI N O FS NEGATIVO 1 1(2)0)

BRA NOV, EX PR BIFURCA SI NO HAY SOBREPASAMIENTO 1 1(2)0)

BRA NZ,EXPR BIFURCA SI N O "ZERO" 1 1(2)0 )

BRA OAEXPR BIFURCA SI HAY SOBREPASAMIENTO EN Fl. ACUMULADOR A 1 1(2)(1)

BRA OB,FXPR BIFURCA SI HAY SOBREPASAMIENTO EN EL ACUMULADOR B 1 1(2)0 )

BRA OVEXPR BIFURCA SI HAY SOBREPASAMIENTO 1 1(2)0)

BRA SA.F.XPR BIFURCA SI HAY SATURACIÓN EN EL ACUMULADOR A 1 1(2) (1)

BRA SB, EXPR BIFURCA SI HAY SATURACIÓN EN EL ACUMULADOR B 1 1(2)0)

BRA Z,EXPR BIFURCA SI "ZERO" 1 1 (2)0)

CALL FXPR LLAMADA A SUBRUTINA 2 2

CALL Wn LLAMADA INDIRECTA A SUBRUTINA 1 2

DO il.IT14.EXPR EJECUTA UN NÚMERO DE VECES PARTE DEL CÓDIGO 2 2

DO Wn,EXPR EJECUTA UN NÚMERO DF VECES PARTE DEL CÓDIGO 2 2

GOTO EXPR VA A UNA DIRECCIÓN 2 2

GOTO Wn VA A UNA DIRECCIÓN INDIRECTAMENTE 1 2

RCALL EXPR LLAMADA RELATIVA A SUBRUTINA I 2

RCALL Wn LLAMADA RELATIVA A SUBRUTINA 1 2REPEAT LIT14 REPITE ESTA INSTRUCCIÓN (LIT14+1) VECES 1 1

REPEAT Wn REPITE ESTA INSTRUCCIÓN (Wn+1) VECES 1 1

RETFIE RETORNO DF UNA INTERRUPCIÓN 3(2) (2)

RETLW #1.1110, Wn RETORNO CON LITIO EN Wn 1 3(2) (2)

RETURN RETORNO DE UNA SUBRUTINA 1 3(2) (2)

(1): Las instrucciones de bifurcación condicional se ejecutan en un c ic lo si no se hace la bifurcación o en dos si se hace.(2): Las instrucciones de retorno se ejecutan en tres ciclos, pero si hay alguna excepción pendiente se ejecutan en dos.

Figura 10.21. Principales características de las instrucciones destinadas a controlar el flujo de control del programa.

Page 151: DsPIC Diseño practico de aplicaciones

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 1 33

EJEMPLO 1

002000 AQUÍ: BRA ALLÍ 002002 . . .002004 . . .002006 . . .002008. . .00200A A L L Í:. . .00200C . . .Bifurca a ALLÍ. (Figura 10.22.)

A N TE S DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

BRA ALLÍ

PC 00 2000 PC 00 200Ai

SR 0000 SR 0000 \

Figura 10.22. Efecto de te ejecución de la instrucción BRA del Ejemplo 1 on el Contador efe Programa y en el Registro de Estado.

EJEMPLO 2

000A26 RETFIERetorno de la interrupción. (Figura 10.23.)

AN TES DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

OOOA26 RETFIE

PC OOOA26 PC 01 0230

W15 0834 W15 0830

RAM 0830 0230 RAM 0830 0230

RAM 0832 8101 RAM 0832 8101

CORCON 0001 CORCON 0001 ¡

SR 0000 SR 0081

Figura 10.23. Efecto de la ejecución de la instrucción 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 Poin- ter (SP) cuya dirección está cargada en W15. 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 instrucción PUSH W4. Por el contrario, con la instrucción

Page 152: DsPIC Diseño practico de aplicaciones

1 34 dsPIC DISEÑO PRÁCTICO DE APLICACION ES

POP se saca de la Pila el contenido de la cima y se deposita en el operando destino que incluya la instrucción. Con POP W2 el valor de 16 bits de la cima de la Pila se carga en W2 y W 15 se dccrc- menta en 2 unidades.

La instrucción P U SIIF carga en la cima de la Pila el contenido de la posición de la memoria de datos con dirección F, pasando W15 a incrementarse 2 unidades. Se puede expresar la operación de la siguiente forma: (F )-^- (TOS) y W15 W15 + 2. Con PUSH Ws se mete en la Pila Ws. La ins­trucción PUSH.D Wns salva en la Pila una doble palabra formada por el contenido de los registros Wns y Wns + 1, incrementándose 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, W1, W2 y W3 y los señalizadores de SR C, Z, O Y N y DC.

Las instrucciones con nemónico POP hacen la transferencia inversa de PUSH y decrementan a W15.

La instrucción LNK #lit¡4 salva a W14 (puntero del marco de la Pila) en la cima de la Pila, in­crementa en 2 un idades a W15 y lo carga en W14 que pasa a apuntar el marco de la Pila con un ta­maño #lit 14 bytes que está dedicado a manejar una llamada a subrutina. El W15 se carga con W 15 + #litl4. La instrucción ULNK deshace la operación de LNK cargando W14 en W15, decremen- tando 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 DESCRIPCIÓN PALABRAS CICLOS

LNK #LITT4 UNF MARCO DE PILA 1 1

POP F SACA DE LA PILA TOS A F 1 1

POP Wd SACA DE LA PILA TOS A Wd 1 1

POP.D SACA DC LA PILA TOS EN FORMATO DOBLE A Wnd:Wnd+1 1 2

POP.S SACA REGISTROS SOMBRA 1 1

PUSH F CARGA F A TOS 1 1

PUSH Ws CARGA Ws A TOS 1 1

PUSH.D Wns CARGA EN FORMATO DOBLE Wns:Wns+l A TOS 1 2

PUSH.S G\RGA REGISTROS SOMBRA 1 1

UINK DESUNE MARCO DE PILA 1 1

Figura 10.24. Principales características de las instrucciones de Pila y registros sombra.

EJEMPLO l

PUSH W2Carga W2 a TOS. (Figura 1025.)

EJEMPLO 2

LNK #0xA0Une marco de pila. (Figura 10.26.)

Page 153: DsPIC Diseño practico de aplicaciones

A N TE S DE L A INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 135

PUSH W2

W2

W15

RAM 1566

SR

. . . . . . I W2

W15 RAM 1566

SR

Figura 10.25. Efecto de la ejecución de la instrucción PU5H del ejemplo en W2, W15, dirección 1566 y en el Registro de Estado.

A N TE S DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

LNK #0xA0

W14 2000 W14 2002

W15 2000 W15 20A2

RAM 2000 0000. RAM 2000 2000 ;

SR 0000 SR 0000

Figura 10.26. Efecto de la ejecución de la instrucción LNK del ejemplo en W I4, W15, dirección 2000 y en el Registro de Estado.

10.10. INSTRUCCIONES DE CONTROL

Son 6 instrucciones especiales, y sus características se muestran en la Figura 10.27.

SINTAXIS ENSAMBLADORv * »XX* X X

DESCRIPCIÓN PALABRAS CICLOS

CLRWDT PONE A CERO EL TEMPORIZADOR "WATCHDOG" 1 i

DI SI ¿LIT4DESHABILITA INTERRUPCIONES DE PL DE 1 A 6 DURANTE

iLIT I 4+1) CICLOS DE INSTRUCCIÓN-1 1

NOP NO OPERACIÓN 1 1

NOPR NO OPERACIÓN 1 1

PWRSAV *ÜT1 ENTRADA M O DO SLEEP O IDLE 1 1

RESET REINICIALIZACIÓN 1 1

Figura 10.27. Principales características de las instrucciones de control.

Con CLRWDT se pone a cero el registro contador del Perro Guardián, así como sus predi viso­res A y B. Tiene la misión de refrescar al WDT y evitar su desbordamiento.

Page 154: DsPIC Diseño practico de aplicaciones

1 3 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

La. instrucción DI SI #lit14 sirve para deshabilitar las interrupciones comprendidas entre fos niveles de prioridad 1 y 6 durante #lit 14+1 ciclos de instrucción, tras la ejecución de dicha instrucción.

Con NO!5 el procesador no realiza ninguna operación consumiendo un tiempo de un ciclo de ins­trucción y ocupando en la memoria de programa una palabra, lo mismo que pasa con la instrucción NOPR.

La instrucción PWRSAV #lit1 pasa al procesador al modo de bajo consumo Sleep si #Ht1 = 0 y a modo ldlesi#lit1 = i. También borra al contador del Perro Guardián.

Finalmente, RESET fuerza a todos los registros del núcleo y de los periféricos a tomar un valor fijo. El bit SWR que es RCON<6> cuando vale 1 señaliza que se ha ejecutado una instrucción RESET.

En la Figura 10.28 se muestra el valor que toman determinados registros después de ejecutar la instrucción RESET.

ANTES DESPUÉS

PC 00 202A PC 00 0000

w o 8901 w o 0000

W1 08BB W1 0000

W 2 B87A W 2 0000

W 3 872F W 3 0000•.V ,'.-,V.V.V.'.V.' iW 4 C98A..... W 4 0000

W5 A AD 4 W 5 0000

W6 981E W 6 0000

W 7 1809 W 7 0000

W 8 C341 W 8 0000

W 9 90F4 W 9 0000

W10 F409 W 10 0000

W11 1700 W11 0000

W 12 1008 W 12 0000

W 13 6556 W 13 0000

W 14 231D W 14 0000

W 15 1704 W 15 0800

SPLIM 1800 SPLIM 0000 í¡

TBLPAG 007F TBLPAG 0000

PSVPAG 0001 PSVPAG 0000

CORCON 00F0 CORCON 0020

RCON 0000 RCON 0040

SR 0021 (IPL. C=1 ) SR 0000

(SATDW =1)

(SWR=1)

Figura 10.28. Estado que toman determinados registros después de ejecutarse una instrucción RESET.

Page 155: DsPIC Diseño practico de aplicaciones

EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 137

EJEMPLO l

CLRWDTPone a 0 el temporizador WDT. (Figura 10.29.)

A N TE S DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

CLRWDT

SR 0000

Figura 10.29. Efecto de la ejecución de la instrucción CLRWDT en el Registro de Estado.

EJEMPLO 2

PWRSAV#1Entrada a modo IDLE. (Figura 10.30.)

AM TES DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

PWRSAV #1

SR | 0020 1 (IPL = 1) SR : 0020 (IPL = 1)

Figura 10.30. Efecto de la ejecución de la instrucción PWRSAV del ejemplo en el Registro de Estado.

Page 156: DsPIC Diseño practico de aplicaciones
Page 157: DsPIC Diseño practico de aplicaciones

11.1. CARACTERÍSTICAS ESPECÍFICAS

Las instrucciones DSP se distinguen porque en su ejecución interviene el Motor DSP que es un con­junto de recursos hardware que se representan en la Figura 11.1, en la que también 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 11.1. Esquema del Motor DSP en donde se ejecutan las instrucciones DSP.

139

,

w m mm & m

W S imm s m

Page 158: DsPIC Diseño practico de aplicaciones

1 4 0 dsPIC. DISEÑO PRÁCTICO DE APLICACION ES

El Motor DSP es un circuito muy complejo dedicado a resolver las 19 instrucciones DSP del re­pertorio. Las entradas y salidas del Motor 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­tán 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 ACCxL

39 32 31 16 15

Figura 11.2. Los acumuladores A y B del motor DSP se organizan en tres campos que se comportan como 3 registros. La x de la nomenclatura puede ser A o B.

Cada acumulador dispone de sus propios bits señalizadores del resultado que se ha cargado en él.

Cuando está configurado el procesador para trabajar con saturación 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 saturación el valor a almacenar en el acum ulador ocupa ACCxU: ACCxH: ACCxL.

Las instrucciones de carga y almacenamiento de los acumuladores con nemónicos LAC y SAC (SAC.R) sólo 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 sólo 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 instrucción.

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 función de los #SU T consiste en permitir el desplazamiento del acumulador o de un valor determinado.

11.2. OPERACIONES BÁSICAS CON LOS ACUMULADORES

Los acumuladores A y B se utilizan en las instrucciones DSP para llevar a cabo operaciones ma­temáticas.

Como los acumuladores ocupan 40 bits y los campos de datos X e Y son sólo de 16 bits, el mé­todo para guardar datos y cargar los acumuladores tiene que ser entendido.

Page 159: DsPIC Diseño practico de aplicaciones

LAS INSTRUCCIONES DSP 141

NEMÓNICO OPERANDOS DESCRIPCIÓN RESUMIDA

ADD Acc SUMA LOS ACUMULADORES

ADD Ws. ¿SLIT4, Acc SUMA AL ACUMULADOR UN VALOR QUE PUEDE SER DESPLAZADO

CLRAcc, [Wx], W xd , [Wy], Wyd, AVVB

BORRA UN ACUMULADOR CON OPCIÓN DE PREBÚSQUEDA DE OPERANDOS

EDW m x Wm, Acc,

Wx, Wy, VVxdDISTANCIA EUCI.ÍDEA, SIN ACUMULACIÓN

EDAGVVm x Wm, Acc,

W x, Wy, VVxdDISTANCIA EUCLÍDFA, CON ACUMULACIÓN

I.AC Ws, *SUT4, AccCARGA EN Fl. ACUMULADOR EL OPERANDO FUENTE

QUE PUEDE DESPLAZARSE

MACVVm x Wn, Acc, IW xj,

Wxd, JWyl, Wyd, AWBMULTIPLICA Y ACUMULA

MACVVm x Wm, Acc, [Wx],

VVxd, [Wy], Wyd, AWBELEVA AL CUADRADO Y ACUMULA

MOVSACAcc, [Wx], Wxd, |W y], Wyd, AVVB

PREBÚSQUEDA DE OPERANDOS Y ALMACENA EL ACUMULADOR

........... ■. ■■ ■MPY

W m x Wn, Acc, [Wx], VVxd, | Wy], Wyd, AWB

MULTIPLICA REGISTROS CON OPCIÓN DE PREBÚSQUEDA DE OPERANDOS

MPYWm x Wm, Acc, [Wx], Wxd, [WyJ, Wyd., AWB

ELF.VA AL CUADRADO UN REGISTRO CON OPCIÓN DE PREBÚSQUEDA DE OPERANDOS

MPY.NWm x Wn. Acc, [Wx],

VVxd, [Wy], W ydMULTIPLICA UN REGISTRO POR OTRO NEGADO

Y TIENE OPCIÓN DE PREBÚSQUEDA

m sc :VVm x Wn, Acc, [Wx], Wxd, [WvJ, Wyd, AWB

MULTIPLICA DOS REGISTROS Y EL RESULTADO LO RESTA DEL ACUMULADOR

NEG Acc HALLA EL COMPLEMENTO A 2 DEL ACUMULADOR

SAC ♦ Acc, ¿SLIT4, WdoALMACENA UN ACUMULADOR QUE PUEDE

SER DESPLAZADO PREVIAMENTE

SAC.R Acc, ffSUT4, WdoALMACENA UN ACUMULADOR REDONDEADO

QUE PUEDE SER DESPLAZADO PREVIAMENTE

SFTAC Acc, #SLIT6 DESPLAZAMIENTO ARITMÉTICO DEL ACUMULADOR

SFTAC Acc, Wn DESPLAZAMIENTO ARITMÉTICO DEL ACUMULADOR

SUB Acc RESTA LOS DOS ACUMULADORES

Figura 11.4. Tabla con el resumen de las principales características 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 más 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­trucción LAC, y también como registro fuente para almacenar el acumulador en la instrucción SAC.R. Todo esto viene representado en la parte B de la Figura 11.5, donde las partes superior y ba-

Page 160: DsPIC Diseño practico de aplicaciones

1 4 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

ja del acumulador están 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 saturación normal (32 bits), las operaciones DSP (como por ejemplo ADD, MAC, MSC, etc.) sólo utilizan ACCxH: ACCxL (parte C de la Figura 11.5) y el ACCxU se utiliza sólo para mantener el signo del valor guardado en ACCxH:ACCxL. Por ejemplo, cuando se ejecu­ta una instrucción MPY, el resultado se almacena en ACCxH: ACCxL, y el signo del resultado se ex­tiende sobre ACCxU.

Cuando se habilita la super saturación, 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 dinámico de los valores que se pueden almacenar en el acumulador en la saturación normal y en la super saturación.

A) El acumulador de 40 bits se compone de tres partes: ACCxU:ACCxH:ACCxLB) Operaciones de extracción y cargaC) Operaciones en modo saturación normalD) Operaciones en modo super saturación

Figura 11.5. Diversas formas de utilizar los acumuladores.

11.2.1. Suma de acum uladores (AD D )

Existen dos formatos para realizar la suma de los acumuladores ACCA y ACCB.

t ° ADD Acc.2.° ADD Ws, #S¡m, 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.

AD D A ; ACCB + ACCA + ACCAADD B ; ACCA + ACCB ACCB

Page 161: DsPIC Diseño practico de aplicaciones

LAS INSTRUCCIONES DSP 143

EJEMPLO 1

En la Figura 11.6 se muestra el comportamiento de ACCA , ACCB y $R al ejecutarse la instrucción ADD B.ADD B ; ACCA + A CCB A CCS

ANTES DE LA INSTRUCCION DESPUÉS DE LA INSTRUCCIÓN

ADD B

0 0 E111 2222 ACC A ■ 0 0 ‘E111 2 2 2 2

0 0 76 5 4 3210-v.*.*. •.‘.•.•/.v.vv.vív.v!-; *>:*:•

ACC B 01 5765 5432

W8&0 0 0 0 SR 00 0 0

Figura 11.6. Efecto de la. ejecución de la instrucción 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 acumulador (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). También se admite 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, ASuma 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.

ANTES DE LA INSTRUCCION DESPUÉS DE LA INSTRUCCIÓN

ADD WD,#2.A

WO : 3000

ACC A 00 7000 0000 :

SR OCOO ¡

W 0 8000

ACC A 00 9000 0000

SR 0000

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 instrucción el valor binario del otro acumulador, depositan­do el resultado en el primero.

Page 162: DsPIC Diseño practico de aplicaciones

144 dsPIC. DISFÑO PRÁCTICO DE APLICACIONES

SUB A ; /l CCA - A CCB A CCASUB R ; / l CCB - A CCA A CCB

La operación se puede realizar con saturación o sin ella controlando el bit SATB del registro CORCON.

EJEMPLO 3

SUB A ;ACCA -A C C B ACCA

ANTES DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

SUB B

ACC A 76 120F 098A ACC A 52 1EFC 4D73

ACC B 23 F312 BC17 ACC B 23 F312 BC17

CORCON 0000 (SIN SATURACIÓN) CORCON 0000

SR 0000 SR 1100

Figura 11.8. Resta de los dos acumuladores sin saturación.

11.2.3. Borrado de los acumuladores (CLR)

Borra o pone a 0 los 40 bits del acumulador especificado y tiene la opción de prcbúsqueda de ope- randos como preparativo para una instrucción MAC. También permite el almacenamiento de resul­tados en el acumulador no especificado. Finalmente esta instrucción borra los señalizadores de so- brepasamiento y saturación OA, OB, SA y SB.

EJEMPLO 4

CLR A, [WÓ]+=2, W5, W13Como se muestra gráficamente en la Figura 11.9 esta instrucción borra el acumulador ACCA, car­ga W5 con el contenido de la dirección {W6J, post-incrementa 2 unidades W6 y almacena el otro acumulador ACCB en W13.

ANTES DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

CLR A,[W6]+=2,W5,W13

W5 8001 W5 F122

W6 3000 W6 3002

W13 C623 W13 6428

ACC A 30 0067 2345 ACC A 00 0000 0000

ACC B 0 6428 3BDD ACC B 00 6428 3BDD

CONTENIDO EN 3000 <*'vív‘X* F122 CONTENIDO EN 3000

SR 0000 SR

Figura 11.9. Operatividad de la instrucción de borrado del acumulador CLR.

Page 163: DsPIC Diseño practico de aplicaciones

LAS INSTRUCCIONES DSP 145

11.2.4. N egación del acum ulador (NEG)

Con esta instrucción se halla el complemento a 2 del acumulador especificado, afectando a sus 40 bits sin tener en cuenta el modo de saturación con el que se trabaje.

EJEMPLO 5

NEG BCalcula el complemento a 2 de los 40 bits de ACCB y deposita el resultado en ACCB. (Figura JIJO.)

j

A N TE S DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

NEG A

Figura 11.10. La instrucción NEG B halla el complemento a 2 del contenido de ACCB.

11.2.5. Multiplicación de registros y carga al acumulador (MPY y MPY.N)

Con la instrucción MPY 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. Además y con carácter opcional se puede realizar en la misma instrucción la prebús- queda 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 instrucción MPY.N multiplica un registro por el negado de otro, lo que proporciona el pro­ducto de dos registros y la negación del resultado (ACC = -X • Y).

EJEMPLO 6

MPY W 7x W8, B, [W9]+=2,W5, [WU]-=2, W6Con esta instrucción 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 dirección apuntada por W9 se carga en W5 y lue­go W9 se incrementa en 2 unidades. También el dato contenido en la dirección que apunta W ll se carga en W 6y luego W ll se decrementa en 2 unidades, como se refleja en la Figura 11.11. La mul­tiplicación es de tipo fraccionario y sin saturación (CORCON = 0000 Hex.).

11.2.6. La distancia euclídea (ED y EDAC)..

La instrucción 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.

Page 164: DsPIC Diseño practico de aplicaciones

1 4 6 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

ANTES DE LA INSTRUCCION DESPUES DE LA INSTRUCCION

MPY W7xW8.B,[W9|-*-=2,W5,[W11 ]-=2,W6

W 5 6666

W6l'oyy.'

88FF

W 7 671F

W8 E3DC

W 9 1000

W11 áss 2000

ACC B F5 0000 1122

DATO EN 1000 1001

DATO EN 2000 2002

CORCON 0000

SR 0000

Figura 11.11. Operatividad de la instrucción 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, W1Inicialmente resta el contenido direccionado por W8 del direccionado por W10 y el resultado se carga en WJ. Luego el cuadrado de WI extendido en signo hasta 40 bits se carga enACCB. Final­mente se incrementa 2 unidades WS y se decrementa lo mismo WIO. (Figura 11.12.)

ANTES DE LA INSTRUCCIÓN DESPUÉS DE LA INSTRUCCIÓN

ED W1 xW1 ,B,[W8]+=2,[W10]-=2,W1

W1 009A W1 0057

W8 1000 W8 1002

W 10 2300 W10 27F5

ACC B 00 1111 5555 ACC B 00 0000 5CA4

DATO EN 1000 007F DATO EN 1000 007F

DATO EN 2800 0028 DATO EN 2800 0028

SR 0000 SR 0000

Figura 11.12. Ejemplo de funcionamiento de la instrucción ED.

11 .2.7. Multiplicación 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 prebúsqueda de operandos y el almacenamiento de otro registro en el acumulador no usado.

Page 165: DsPIC Diseño practico de aplicaciones

LAS INSTRUCCIONES DSP 147

EJEMPLO 8

MSC W l x W2, A, [ W ll + W12], W5, W13Al contenido de ACCA se resta el producto de W l x W2 con extensión de signo hasta los 40 bits, guardándose el resultado en ACCA. El contenido de la dirección formada por W ll + W12 se de­posita en W5 y, finalmente, 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 misión de cargar y almacenar los acumuladores ACCA y ACCB y que se describen a continuación.

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, rellenándose 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, AACCA se carga con el valor contenido en la posición direccionada por W2, que previamente es des­plazado 3 posiciones o bits a la izquierda. Después W2 se incrementa en 2 unidades.Si inicialmente W2 contiene el valor 1000 Hex. y en la dirección 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 convirtiéndose 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 ACC AL, quedando el valor a cargar en ACCA = FF 9108 0000 Hex.

Page 166: DsPIC Diseño practico de aplicaciones

1 4 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

11.3.2. Almacenamiento del acumulador (SAC)

El contenido de los bits ACCxH <31:16> del acumulador especificado en la instrucción SAC se al­macena en el registro destino. Opcionalmente se puede desplazar el acumulador el número 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 después el campo ACCBH<31:16> se almacena en la dirección 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 dirección apuntada por W4.

Existe una variante de esta instrucción cuyo nemónico es S AC.R que se diferencia en que lo que se almacena es el contenido “redondeado” de ACCxH.

11.3.3. Prebúsqueda de operandos y almacenamiento del acumulador (MOVSAC)

Esta instrucción opcionalmente puede realizar la prebúsqueda de dos operandos como preparación de una instrucción MAC. Después hay post-escritura del acumulador que no interviene que se al­macena en un registro.

EJEMPLO 11

MOVSAC A , fW 4]+ = 2, W5, [W6J-=2 , W7, [W !3]+=2Se comienza cargando W5 con el contenido de la dirección apuntada por W4. Se incrementa 2 uni­dades W4. Se carga W7 con el contenido de la dirección apuntada por W6. Después se decremen- ta en 2 unidades W6 y, finalmente, los 16 bits de ACCBH<31:16> se almacenan en la dirección apuntada por W l 3 y se incrementa 2 unidades W13.

11.4. DESPLAZAMIENTO DE LOS ACUMULADORES

La instrucción 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, #72Si inicialmente ACC 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.

Page 167: DsPIC Diseño practico de aplicaciones

LAS INSTRUCCIONES DSP 149

Una variante de esta instrucción existe cuando el valor del desplazamiento viene dado por los 6 bits de menos peso de un registro de trabajo.

11.5. INSTRUCCIONES TIPO "MAC"

Aunque sólo existe una instrucción con nem ónico MAC (M ultiplicar y A cum ular) y dos variantes, la mayoría de las instrucciones DSP admiten las características de esta instrucción típica de los DSP, que es fundamental para el cálculo de los algoritmos más comunes usados en el procesamiento de las señales digitales. Se citan las características relevantes de este grupo de instrucciones.

1Ú Son capaces de realizar dos prebúsquedas de operan dos en la memoria. Normalmente se utiliza el direccionamiento indirecto con post y pre decremento o incremento.

van a cabo la actualización de los registros utilizados en el direccionamiento indirecto incre-s para el tamaño de los datos manejados.

3* Ejecutan una operación matemática con alguno de los acumuladores de suma, resta, borrado, ne­gación, multiplicación o desplazamiento.

4* Permiten la post-escritura del otro acumulador que no interviene en la operación matemática. LasCLR, MAC, MOVSAC y MSC.

mentando oo* —

La instrucción 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 prebúsque- da de operandos como preparación de una nueva MAC y también la post-escritura del acumulador que no interviene en la operación 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 xW 3 ,AEl 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) MAC W2 x W3, B, f W8]+=2 , W2ACCB se carga con la suma de su contenido previo y el producto de W2 x W3 extendido en signo, además W2 toma el valor del contenido de la posición direccionada por W8 que se incrementa en2 unidades.

ACCB = ACCB + W2 x W3 X([W8] +=2)-+~ W2

3o) MAC Wl x W2, A, [W 8]+=6 , W l, f\V10]+=2 , W2ACCA se carga con el producto de W l x W2 extendido en signo más 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 posición apuntada por W lO y este último se incrementa en 2 unidades.

Page 168: DsPIC Diseño practico de aplicaciones

1 5 0 dsPIC. DISEÑO PRÁCTICO DÉ APLICACIONES

ACCA = ACCA + WJ x W2 X([W8] + = 6) + Wl Y ( [ W 1 0 ] + = 2 W 2

4 o) MAC W h W2, A, [W8]+=2, Wl, [W l¡]-=2, W2, W13Suma 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 dirección apuntada por W8 lo deposita en W l y después incrementa 2 unidades a WH. El contenido de la dirección apuntada por W ll lo deposita en W2 y luego decrementa 2 unidades a W ll. Finalmente, realiza la post-escritura de ACCB en W13.

ACCB = ACCB + W l x W2 X(fW 8] + = 2 ) + Wl Y ([ W U ] -= 2 ) -^ W 2

ACCB W13

5.°) MAC B, W2 x W3, W2, [W5], W3, [W7]+=4Suma 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 dirección que guarda W5 y W3 se carga con el contenido de la dirección apuntada por W7, que luego se incrementa.

ACCB = ACCB + W l x W2 X([W5]) W2

Y([W7J+=4) W3

Page 169: DsPIC Diseño practico de aplicaciones

CAPÍTULO

Periféricos y recursosV ¡

12.1. EL M U N D O QUE RODEA A LOS DSC

Existe una gran variedad de periféricos y dispositivos complementarios que se integran en los di­versos modelos de DSC para proporcionar al diseñador todo lo que necesita su aplicación en un so­lo chip. Los recursos que se implementan en los DSC son los siguientes:

1. Patitas de E/S.2. Temporisadores de propósito general y Perro Guardián.3. Conver sorAD de 10 bits de afta velocidad y conversor AD de 12 bits de alta resolución.4. Módulo de Captura.5. Módulo de Comparación y PWM.6. Módulo especial PWM para control de motores.7. Interfaz para Codificador de Cuadratura (QEI).8. Interfaz para Conversor de Datos (DCI).9. Interfaz de Periféricos Serie.

10. Módulo UART.1 /. Módulo l?C12. Módulo CAN.13. Controlador de DMA

Cada modelo DSC integra una cantidad de recursos variable según su orientación. En las tablas de la Figura 12 .1 se presentan los periféricos y recursos que contienen los modelos dsPIC30F y los modelos dsPÍC33F. 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 permitir el manejo de los periféricos integrados. Todas las patitas de E/S pueden suministrar

151

Page 170: DsPIC Diseño practico de aplicaciones

M O D ELO S d sP IC30F D E PR O P Ó S ITO G EN ER A L

DISPOSITIVO PATITASLÍNEAS

E/S

TEMPORIZADORES

16 BITS

MÓDULO-

CAPTURA

M ÓDULO

COMPARADOR/ PWM NORMAL

in t e r f a z !CO DEC

CONVERSOR AD

12 BITS 100KBPS

UART SPI f e CAN

......................dsPIC30F3014 40/44 30 3 2 2 - 13ch 2 1 1 - ]

dsPIC30F4013 40/44 30 5 4 4 AC97, |2S 13ch 2 1 1 1

dsPlC30F5011 64 52 5 8 8 AC97, |2S 16ch 2 2 1 2

dsPlC30F6011 64 52 5 8 8 - 16ch 2 2 1 2

i dsPIC30F6012 64 52 5 8 8 AC97, |2S 16ch 2 2 1 2

dsPIC30F5013 80 68 5 8 8 AC97, |2S 16ch 2 2 1 2

dsPl€30F6013 80 68 5 8 8 - 16ch 2 2 1 2

dsPIC30F6014 80 68 5 8 8 AC97, |2S 16ch 2 2 1 2

dsPÍC30F6011A 64 5 8 8 • 16ch 2 2 I 2

dsPIC30F6012A 64 5 8 8 AC97, |2S 16ch 2 2 1 2

dsPIC30F6013A 80 5 8 8 - 16ch 2 1 2

dsPIC30F6014A 80 5 8 8 AC97, |2S 16ch 2 2 1 2

M O D ELO S d sP IC 30F PARA C O N T R O L D E M O TO R ES Y S ISTEM AS DE A L IM EN TA C IO N

DISPOSITIVO PATITASLÍNEAS

E/S

TEMPORIZADORES

16 BITSM ÓDULOCAPTURA

M ÓDULO COMPARADOR/ PWM NORMAL

CONTROLMOTORES

PWM

CONVERSOR AD

10 BITS 500KBPS

QEI UART SPI l2C CAN

dsPIC30F2010 28 20 3 4 2 6ch 6ch I 1 1 1 -

dsPIC30F3010 28 20 5 4 2 6ch 6ch 1 1 1 1 -

dsPIC30F4012 28 20 5 4 2 6ch 6ch 1 1 1 1 1

dsPIC30F3011 40/44 30 5 4 4 6ch 9ch 1 2 1 1 -

dsPIC30F4011 40/44 30 5 4 4 6ch 9ch 1 2 1 1 1

dsPIC30F5015 64 52 5 4 4 8ch 16ch 1 1 2 1 1

dsPIC30F6010 80 68 5 8 8 8ch 16ch 1 2 2 1 2dsPIC30F5016 80 52 5 4 8c h 16ch 1 1 2 1 1

Figura 12.1. Relación de periféricos y recursos que integran los modelos dsPIC30F y dsPIC33F.

152 dsPIC

DISEÑ

O

PRÁCTIC

O

DE A

PLIC

AC

ION

ES

Page 171: DsPIC Diseño practico de aplicaciones

M O D E LO S d sP IC30F PARA M A N EJO DE SEN SO RES

DISPOSITIVO PATITASLÍNEAS

E/STEMPORIZADORES

16 BITSM ÓDULOCAPTURA

M ÓDULO

COMPARADOR/ PWM ESTÁNDAR

CONVERSOR AD

12 BITS 100KBPS

UART SPI r’c |

dsP!C30F2011 18 12 3 2 2 fich 1 1 1dsPO0F3012 18 12 3 2 2 8c h 1 1 1

dsPIC30F2012 28 24 .5 7 2 10ch 1 1 1

dsPIC30F3013 28 24 3 2 2 10ch 2 1 1

MODELOS dsPIC33F DE PROPÓSITO GENERAL

DISPOSITIVO PATITASLÍNEAS

E/STEMPORIZADORES

16 BITSM ÓDULOCAPTURA

M ÓDULO COMPARADOR/ PWM NORMAL

INTERFAZCO DEC

CONVERSORAD

UART SPI I2C CAN DMA

d$PIC33FJ64GP206 64 53 9 8 8 1 1 A/D, 18ch 2 2 1 r... ■ 2

dsPIC33FJ64GP306 64 53 9 8 8 1 1 A/D, 18ch 2 2 2 •••ir' ¡v 2

dsPIC33FJ64GP310 100 85 9 8 8 1 I A/D, 32ch 2 2 2 - 2

dsPIC3 3 FJ64C P706 64 53 9 8 8 1 2 A/D, 18ch 2 2 2 2 2

dsPIC33FJ64GP708 80 69 9 8 8 2 A/D, 24ch 2 2 2 2 2

dsPIC33FJ64GP710 100 85 . 9 8- ___ 8 1 2 A/D, 32ch 2 2 2 2 2

dsPIC33 Fj 128GP206 64 53 9 8 8 1 1 A/D, 18ch 2 2 1 - 2

dsPIC33FJ128GP30f> 64 53 9 8 8 1 1 A/D, 18ch 2 2 2 - 2

dsPIC33FJ 128GP310 100 85 9 8 8 1 1 A^D, 32ch 2 2 2 - 2

dsPIC33FJ 128GP706 64 53 9 8 8 1 2 A/D, 18ch 2 2 2 2 2

dsPIC33FJ128GP708 80 69 9 8 8 1 2 A/D, 24ch 2 2 2 2 2

dsPIC33FJ 128GP710 100 85 9 8 8 1 2 A/D, 32ch 2 2 2 2 2

:dsPIC33FJ256GP506 64 53 9 8 8 1 1 A/D, 18ch 2 2 2 1 2

dsPIC33FJ256GP510 100 85 9 8 8 1 1 A/D, 32ch 2 2 2 1 2

ds PI C3 3 FJ2 56G P710 100 85 9 8 8 1 2 A/D, 32ch 2 2 2 2 2

Figura 12.1. Rotación de periféricos y recursos que integran ¡os modelos dsPiC30F y dsP!C33F. (Continuación)

Page 172: DsPIC Diseño practico de aplicaciones

MODELOS dsPIOSF PARA CONTROL DE MOTORES Y SISTEMAS DE ALIMENTACIÓN

DISPOSITIVO PATITAS

l i l i

LÍNEASE/S

TEMPORIZADORES 16 BITS

MÓDULOCAPTURA

MÓDULO COMPARADOR/ PWM NORMAL

CONTROLMOTORES

PWM

CONVERSORAD

QEI UART SPI

IvX’jv!

re CAN DMA¡V'ív£v>

dsPIC33FJ64MC506 64 53 9 8 8 8ch 1 A/D, 16ch 1 2 2 2 i :- : 2

ds Pl C3 3 FJ 64 MC-5 08 80 69 9 8 8 8ch 1 A /U 18ch 1 2 2 2 1 2

dsPIC33FJ64MC510 : 100 85 9 8 8 8ch 1 A/D, 24ch 1 2 2 2 1 2

ds PIG3 3 F J 64 MC 706 64 53 9 8 8 8ch 2 A/D, 16ch 1 2 2 2 1 2

dsPIC33FJ64MC710 100 85 9 8 8 8ch 2 A/D, 24ch 1 2 2 2 2 2

dsPlC33FJ128MC506 64 53 9 8 8 8ch 1 A/D, 16ch 1 2 2 2 1 2

dsPIC33FJ128MC510 100 85 9 8 8 8ch 1 A/D, 24ch 1 2 2 2 1 2

dsPIC33FJ128MC706 64 53 9 8 8 8ch 2 A/D, 16ch 1 2 2 2 1 2

dsPIC33FJ128MC708 80 69 9 8 8 8ch 2 A/D, 18ch 1 2 2 2 2 2

dsPIC33Fj'l 28MC710 100 85 9 8 8 8c h 2 A/D, 24ch 1 2 2 2 2 2

dsPIC33FJ256MC510 100 85 9 8 8 8ch 1 A/D, 24ch 1 2 2 2 1 2

dsPIC33FJ256MC710 100 85 9 8 8 8ch 2 A/D, 24ch 1 2 2 2 2 2

Figura 12.1. Relación de periféricos y recursos que integran los modelos dsPIC30F y dsPIC33F(Continuación)

54 dsP

IC.

DISEÑ

O

PRÁCTICO

DE

APLIC

AC

ION

ES

Page 173: DsPIC Diseño practico de aplicaciones

PERIFÉRICOS Y RECURSOS INTEGRADOS 1 5 5

o absorber hasta 25 mA. Las patitas de E/S que multiplexan señales correspondientes a los perifé­ricos dejan de ser E/S digitales cuando están funcionando dichos periféricos.

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 Dirección de los Datos. Cada uno de sus bits determina la dirección de la pati- Ui de E/S asociada.

' valor lógico de las patitas

• LATx: Registro cerrojo, tipo ",la tc lrd 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 interconexión de una patita de E/S.

Figura 12.2. Esquema interno de conexionado de una patita de E/S.

El número 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 interrupción al producirse un cambio de su estado lógico. Dichas patitas, llamadas CN, se programan con 4 regis­tros asociados CNEN1 y CNEN2, que activan o desactivan la petición de interrupción, y CNPU1 y CNPU2, que habilitan o deshabilitan el circuito pull-up que tiene cada una de estas patitas.

Page 174: DsPIC Diseño practico de aplicaciones

1 5 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

12.3. TEMPORIZADORES

Según el modelo de DSC puede contener de 3 a 5 temporizadores de 16 bits en los dísPIC30F y has­ta 9 en el caso de los dsPIC33F, llamados T1MER1, TTMER2, T1MER3,... TIMER9, algunos de los cuales pueden concatenarse por parejas conformando temporizadores de 32 bits.

El TIMER1 funciona como temporizador tipo A, los TIMER 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 interrupción 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 actúan como señalizadores del desbordamiento de los temporizadores.• TxlP<2:0>: Son tres bits dedicados a cada temporizador que establecen el nivel de prioridad de

la interrupción correspondiente.

Los temporizadores pueden funcionar en 4 modos:

Io. TEMPORIZADOR SÍNCRONOEn este modo pueden trabajar los 5 temporizadores y emplean la señal del reloj interno del sis­tema (Fosc/4). El valor del temporizador se incrementa con cada impulso hasta el desborda­miento.2° CONTADOR SÍNCRONOEn este modo funcionan todos los temporizadores y los impulsos de reloj pueden provenir de una señal externa introducida por la patita TxCK que se sincroniza con la interna.3o. CONTADOR ASINCRONOEn este modo sólo funciona el temporizador tipo A y el incremento del valor de la temporización se produce de forma asincrona con respecto al reloj interno del sistema.4° CONTADOR CON DISPARO POR ACUMULACIÓN DE TIEMPOEl registro contador se incrementa en función de la duración que tienen los impulsos aplicadospor 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, Comparación y PWM los temporizadores actúan como base de tiempo.

Page 175: DsPIC Diseño practico de aplicaciones

PERIFÉRICOS Y RECURSOS INTEGRADOS 15 7

12.4. CONVERSORES AD

Los conversores AD integrados en los DSC pueden ser de 10 hits de resolución y alta velocidad, o bien, de 12 bits de alta resolución. Convierten una señal analógica 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

AN 15

ENTRADASANALÓGICAS

BUFFER i 16 PALABRAS 3

"?VFORMATO

Figura 12.3. Esquema por bloques simplificado del conversor AD de 10 bits.

Según el esquema de la Figura 12.3 los multiplexores de las entradas seleccionan la señal ana­lógica 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 electrónicos que la introduce al CAD. La multiplexación de los canales de entrada determina la fre­cuencia del mucstreo.

El conversor AD de 10 bits responde a las siguientes características:

m m m•>VcViV«V4V.;<

Velocidad máxima de conversión de 1 Msps con una impedancia máxima de 500 Ohm, trabajan­do normalmente a 500 ksps (kilo muestras por segundo) a 5 Vy 100 ksps a 2,7 V.Tiempo de muestreo de 154 ns.Capacidad de hasta 4 patitas de entrada para muestreo simultáneo.Exploración automática del canal.Bufíer de 16 palabras para el almacenamiento de los resultados de la conversión.

- El conversor AD de 12 bits sólo dispone de un canal CHO de amplificador unipolar de captura y mantenimiento. La velocidad máxima de conversión es de 200 ksps, siendo la normal de 100 ksps a 5 V y otra de 50 ksps a 2,7 V.

Para la programación del módulo conversor AD existen 6 registros, de los cuales ADCON1, AD- CON2 y ADCON3 sirven para gobernar la operación de conversión. El registro ADCHS elige las

Page 176: DsPIC Diseño practico de aplicaciones

1 5 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

patitas de entradas analógicas que se conectan a los amplificadores de captura y mantenimiento. ADPCFG configura las patitas como entradas analógicas o E/S digitales. El registro ADCSSL se­lecciona las entradas que se explorarán de forma secuencial.

Mediante los bits de control SMPI<3:0> se controla la generación de interrupciones que se pro­ducen cuando ha sucedido un determinado número de secuencias de muestreo y conversión.

12.5. M Ó D U LO DE CAPTURA

Tiene la misión fundamental de medir el tiempo que dura un acontecimiento externo producido por una señal que se aplica a una de las patitas de entrada del módulo 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 señal a medir, y son:

.1. Cada flanco descendente de la señal de entrada capturada. ■.vCv!-v> * ...

. 2. Cada flanco ascendente. ví‘* i-.v -'-./vV■vKvItSÍ.’Xv- 1 13. Cada 4 flancos ascendentes.

. v i v ; — > • > m<::4. Cada flanco ascendente y descendente.

- -* .• • V A - .• ’

TMR2 TMR3

Figura 12.4. Bloques fundamentales del módulo de Captura.

Los impulsos aplicados a las patitas de entrada ICx del módulo de Captura mostrado en la Figu­ra 12.4 se divide por 1, 4 o 16 en el divisor de frecuencia según el valor de los bits correspondien­tes en el registro ICxCON, que también 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 medición. Dicha base de tiempos se regula desde el Detector Lógico 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 instrucción después ac­tiva el señalizador de interrupción ICxíF.

Page 177: DsPIC Diseño practico de aplicaciones

PERIFÉRICOS Y RECURSOS INTEGRADOS 159

12.6. M Ó D ULO DE COMPARACIÓN/PWM

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 módulo complejo e independiente especializado en PWM para control de mo­tores que será explicado más adelante.

Tienen los siguientes modos de trabajo:

- Modo de comparación simple- Doble modo de comparación de salida

- Pulso simple de salida- Pulso continuo de salida

- Modulación simple de anchura de pulso- Con protección de errores en la entrada- Sin protección de errores en la entrada

El funcionamiento simplificado de este dispositivo se basa en la comparación 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 COMPARACIÓN M-

FLAG INTERRUPCIÓN

OCxlF

r

M PX OCTSEL ► M p x

& 4 * i

/13 ir MODO OPERACIÓN

TIMER2 TIMER3 SEÑAL SEÑAL TIMER2 TIMER3

SALIDA

, OCFAa

OCFB

OCxPATITA

y S j SALIDA

Figura 12.5. Esquema por bloques del módulo de Comparación/PWM.

. Cuando coincide el valor cargado en el registro OCxR del esquema de la Figura 12.5 con el del Timer seleccionado, la Lógica de Salida obliga a la patita de salida OCx (OC1-OC8) a tomar un ni­vel lógico 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­tección de fallo.

Page 178: DsPIC Diseño practico de aplicaciones

1 60 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

12.7. M Ó D U L O PW M PARA EL C O NTRO 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 precisión.

Existen grupos de dispositivos DSC destinados al control de motores, pudiendo ser de dos tipos en función de las patas del mismo: módulo de 8 salidas si el dispositivo es de 64 palas o más y otro de 6 salidas en caso de un número menor. El módulo PWM de los los dispositivos dsPIC30F tiene las siguientes características:

- - - - ' ... 1 '•

1Ú Dispone de 8 patitas de salida PWM y 4 generadores de impulsos de anchura variable con 16 bits de resolución. Las 8 patitas de salida PWM se agrupan por parejas, una por cada generador, pa­ra controlar la polaridad de las señales de salida, que pueden ser iguales o invertidas según el ti­po de motor al que se apliquen (PWM4H-PWM4L, PWM3H-PWM3L, PWM2H-PWM2L y PWM1H- PWM1L). También hay 2 patitas Fault A y Fault B que determinan los fallos y generadores detiempo muerto. W X V / .< \ V A W

2° Modos de salida por flanco y por centro alineado. 3/' Modo de generación de pulso único.

n D o s c a D B M B M B B a i a i a H M

CONTROLSOBREPASAM IENTO 7

Figura 12.6. Esquema general simplificado del módulo PWM.

Se comienza cargando el ciclo de trabajo y la señal para cada generador en sus respectivos re­gistros PDCx (Ciclo de trabajo). También se programan los registros de configuración para deter­minar el tipo de señal que se desea en cada generador. Luego, en el registro PTPER (Registro base

Page 179: DsPIC Diseño practico de aplicaciones

PERIFÉRICOS Y RECURSOS INTEGRADOS 1 61

de periodo de tiempo) se carga el periodo de la señal y para la generación de la base de tiempo se utiliza un temporizador implementado por el registro PTMR (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 activación de las señales de fallo llevan a las salidas a un estado prefijado que evitan que se dañe 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 ñor muiCada vez que el temporizador PTMR alcanza el valor del registro PTPER se genera una interrup-

; - ción y el temporizador vuelve a 0.2) Pulso único■

Sólo funciona cuando se pone el bit de control PTEN = 1 y se iguala el valor del temporizador PTMR con el del registro PTPER, generándose un solo pulso por interrupción y pasando PTEN = 0.

3) Modo ascendente/descendenteCuando el temporizador PTMR alcanza el valor de PTPER comienza a contar en sentido descen­dente y cuando llega a 0 se produce una interrupción 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 especialEn este modo es posible sincronizar el módulo PWM con el conversor AD para llevar a cabo ope­raciones combinadas.

12.8. M Ó D U L O UART

Los DSC disponen de uno o más UART, según el modelo que se trate. El UART es un elemento des­tinado a soportar la comunicación serie asincrona y funciona de forma bidireccional, adaptándose al trabajo de muchos periféricos. La comunicación se realiza con dos líneas, una para la transmisión UTX y otra para la recepción 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 módulo.

GENERADOR ' DE BAUDIOS

RECEPTOR UART

......."ART: r

W L m J È Ê Ê m URX

TRANSMISOR i¡ UARTvXwiv :

Figura 12.7. Esquema por bloques del módulo UART.

Page 180: DsPIC Diseño practico de aplicaciones

1 6 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

En la Figura 12.7 se ofrece el esquema por bloques del módulo UART, en el que se distinguen los 3 elementos hardware principales del módulo 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 o2 bits de STOP y un bit de paridad par o impar.

El módulo UART está compuesto por los siguientes registros:

UMODE: Registro de Modo USTA: Registro de Control y Estado URREG: Registro de Recepción UTREG: Registro de Transmisión UBRG: Registro del generador de Baudios

El comportamiento del UART se gobierna desde los registros USTA, URREG y UTREG. Puede generar una interrupción 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 LO SPI

Consiste en un interfaz serie síncrono que es muy empleado para establecer la comunicación con mi- crocontroladores, memorias EEPROM, conversores AD, etc. Todos los modelos DSC disponen al menos de uno de estos módulos SPI.

En la Figura 12.8 se ofrece el esquema por bloques del módulo SPI, en el que se distinguen varios registros SFR que soportan el manejo de la información con el bus de datos. Uno se llama SPIBUF y guarda los datos que se envían 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 más 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 módulo SRI.

Page 181: DsPIC Diseño practico de aplicaciones

PERIFÉRICOS 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 actúa como salida. SS# es la patita mediante la que se activa el mo­do esclavo con nivel lógico bajo.

12.10. M ÓDULO l2C

Dada la popularidad y uso del protocolo de comunicación I2C los DSC disponen de un módulo que permite su adaptación y que es muy empleado en las transferencias de información con otros mi- crocontroladores, registros de desplazamiento, conversores AD,.ctc.

El módulo 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 través de dos líneas, SDA (Datos) y SCL (Reloj).

Figura 12.9. Para la comunicación c.on el protocolo PC sólo se utilizan dos líneas, 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 información se envía la dirección del elemento y al comprobar que le corresponde genera una señal de reconocimiento ACK que permite el progreso de.la transferencia.

Los registros I2CCON e I2CSTAT son los registros de control y estado del módulo I2C, respec­tivamente. Como registro receptor actúa I2CRCV y como transmisor el I2CTRN. La dirección de cada esclavo viene almacenada en el registro I2CADD y, finalmente, el registro I2CBRG contiene el valor de recarga del generador de frecuencia.

Page 182: DsPIC Diseño practico de aplicaciones

1 6 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

12.11 M O D U L O DCI

El módulo interfaz del Conversor de Datos (DCI) permite una sencilla comunicación con muchos dispositivos comunes como los codificadores/decodificadores de audio (CODEC), telefonía, reco­nocimiento de voz, eliminación de eco, los conversores AD/DA, etc., soportando los siguientes ti­pos de interfaces:

* ÍÍK

.. ■. :a) Transferencia de trama serie síncrona.b) Inter-IC Sonido (l2S).c) AC-Link Compliant (AC'97).

La aplicación más interesante del módulo 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 tamaño de la palabra puede programarse hasta 16 bits, con 16 ranuras de tiempo para una trama de un máximo de 256 bits que puede almacenar hasta 4 muestras sin la supervisión de la CPU. Está configurado para recibir y transmitir datos en espacios múltiplos de 16 bits, operación que se hace de forma transparente para el usuario.

Consta de cinco registros de control y uno de estado:

DCICON1: bits de habilitación y modo.DC1CON2: bits para configurar la longitud de la palabra, de la trama y el buffer.DC1CON3: configura el reloj.DC1STAT: muestra información sobre el estado.RSCON: configura la recepción de datos.TSCON: configura la transmisión de datos.

A estos registros se les añaden cuatro para la transmisión TXBUF0...TXBUF3 y cuatro para la recepción RXBUF0...RXBUF3.

12.12 M Ó D U L O CAN

El módulo CAN (Controller Arca NetWork) consiste en un interfaz serie muy empleado para la co­municación con otros periféricos u otros modelos de microcontroladores.

El bus CAN fue usado por primera vez en 1980 por la industria del automóvil 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 dirección 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 módulo CAN que incorporan los DSC satisface las especificaciones de la norma o versión 2.0B que utiliza identificadores de 11 y/o 29 bits. También soporta los protocolos 1.2, 2.0B Pasivo, 2.0B Activo y 2.0A.

Para la comunicación el módulo CAN maneja 2 buffer de entrada con prioridad y 3 de transmi­sión. La longitud de los datos está comprendida entre 0 y 8 bytes y la trama puede ser estándar o ex­tendida. Puede generar interrupciones cuando se producen errores.

Page 183: DsPIC Diseño practico de aplicaciones

PERIFÉRICOS Y RECURSOS INTEGRADOS 1 6 5

En la programación del módulo se usan los siguientes grupos de registros:

• Registros de Estado y ControlCiCTR: registro de control y estado del transmisor.

• Registros del Buffer TransmisorCiTXnCON: registro de control del buffer transmisor.CiTXnSID: identificador estándar del buffer transmisor.CiTXnETD: identificador extendido del buffer transmisor.CiTXnDLC: control de la longitud de transmisión.CiTXnBn: buffer de transmisión.

• Registros del Buffer ReceptorCiRXOCON: registro de control y estado del receptor 0.CiRXICON: registro de control y estado del receptor 1.CiRXnSID: identificador estándar del buffer receptor.CiRXnEID: identificador extendido del buffer receptor.CiRXnBn: buffer de recepción.CiRXnDLC: control de longitud de recepción.

• Filtros de Aceptación de MensajesCiRXFnSID: identificador estándar del filtro de aceptación.CiRXFnEIDH: identificador extendido del filtro de aceptación, parte alta.CiRXFnEIDL: identificador extendido del filtro de aceptación, parte baja.

• Registros de la Máscara del Filtro de AceptaciónCiRXMnSID: identificador estándar de la máscara del filtro de aceptación. CiRXMnElDH: identificador extendido de la máscara del filtro de aceptación, parte alta.CiRXMnElDL: identificador extendido de la máscara del filtro de aceptación, parte baja.

• Registros de la Tasa en BaudiosC iC FG l: registro 1 de configuración de la tasa en baudios.CÍCFG2: registro 2 de configuración de la tasa en baudios.

• Registros Contadores de ErroresCiEC: registro contador de errores de transmisión/recepción.

• Registros de InterrupcionesCilNTE: registro de activación de interrupciones.CilNTF: registro de FLAGvS de interrupción.

12.13 M Ó D U LO QEI

El módulo QEI (Interfaz del Codificador de Cuadratura) proporciona una cómoda adaptación de los codificadores incrementales usados para la detección de la posición y la velocidad en los sistemas rotacionales propios de los ejes de motores.

Page 184: DsPIC Diseño practico de aplicaciones

Un codificador incremcntal está formado por los siguientes componentes:

1 6 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

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

B) DISCO RANURADO

Figura 12.10. Principio de funcionamiento de un codificador incremental usado en el control del posi- cionamiento del eje de un motor.

Un codificador incremental proporciona 3 señales: FASE A, FASE B e INDEX PULSE. Anali­zando la forma de dichas señales se puede determinar con exactitud la posición del eje del motor.

El módulo QEI tiene las siguientes características:

- Tres patas: dos para la señal 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.- Resolución de cuenta X2 y X4.- Dos modos de reset para el contador.- Contador ascendente/descendente de propósito general de 16 bits.- Interrupciones.

LUZ

Page 185: DsPIC Diseño practico de aplicaciones

PERIFÉRICOS Y RECURSOS INTEGRADOS 167

En el manejo del módulo 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 señales de entrada.POSCNT: contador de posición. Permite configurar la lectura/escritura.M AXCNT: máximo valor a contar para comparar con el valor de POSCNT.

12.14 EL PERRO G U A R D IÁ N (W DT) Y LOS M O D O S DE BAJO C O N S U M O

El Perro Guardián es un temporizador dedicado cuya única misión 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 condición que nunca ocurre.

El WDT se programa 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 estratégicos 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 Guardián se genera un Reset.

El Perro Guardián es optativo y puede deshabilitarse mediante el bit FWDTEN ubicado en el re­gistro de configuración FWDT.

Los dispositivos dsPlC30F tienen 2 modos de funcionamiento de bajo consumo que pueden ser seleccionados mediante la ejecución de la instrucción PWRSAV.

• SLEEP: tanto la CPU como los periféricos dejan de funcionar al detenerse el reloj del sis­tema mediante la inhabilitación 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 periféricos siguen funcionando aunque pueden ser desactivados opcional mente. En este modo sólo se des­habilita el oscilador principal.

Los dsPJC33F tienen también el modo de bajo consumo DOZE que consiste en rebajar la fre­cuencia de trabajo para disminuir la energía consumida.

Para salir de los modos de bajo consumo existen tres causas:

Ia) Interrupción.2a) Rcset.3a) Desbordamiento del WDT

12.15 EL C O N TR O LA D O R D M A

Además de todos los periféricos 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 periféricos a gran velocidad y sin la participación de la CPU que puede dedicarse a otras misiones. (Figura 12.11.)

Page 186: DsPIC Diseño practico de aplicaciones

1 6 8 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

Figura 12.11. El Controlador DMA permite la transferencia directa y veloz de datos entre la memoria y los periféricos sin intervención de la CPU.

Los dsPIC33F y los PTC24H para soportar el DMA utilizan una memoria de doble puerto (DPS- RAM), dedicando uno de ellos a la comunicación con la CPU y el otro con los periféricos. En la Fi­gura 12.11 se ha simplificado el diagrama por bloques que representa el funcionamiento del CDMA. Cada vez que un periférico intenta transferir datos con la memoria genera una interrupción al CD­MA que pasa a controlar las líneas de los buses de datos, direcciones y control y organiza el tras­vase directo y veloz de la información entre el periférico 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 periféricos y el otro entre la memoria y los periféricos elimina gran parte de las colisiones, pudiendo realizar diversos acce­sos simultáneos:

1° Es posible realizar una lectura de una misma posición de un periférico o de la DPSRAM desde la CPU o desde el CDMA.

2.° Es posible escribir simultáneamente dos posiciones diferentes de la memoria o del periférico des­de la CPU y eJ CDMA.

3 ° Se produce una colisión si se intenta escribir la misma posición de la memoria o del periférico des­de la CPU y desde el CDMA a la vez. En este caso prevalece la escritura de la CPU y se genera una excepción que recoge los detalles que han producido la colisión, así como también se activa el señalizador de colisión correspondiente al canal en el que se ha producido.

Como se muestra en la Figura 12.13 la comunicación de los periféricos mediante dos buses con la CPU y el CDMA permite implementar todo tipo de transferencias bidireccionales y directas en­tre los periféricos y la DPSRAM.

La gran ventaja del CDMA es la gran velocidad con la que se transfieren datos entre la memo­ria y los periféricos sin afectar al trabajo de la CPU y sin rebajar el rendimiento del sistema. A tra­vés de los 8 canales del CDMA se puede transferir bidircccionalmente un dato de tamaño byte o

Page 187: DsPIC Diseño practico de aplicaciones

PERIFÉRICOS Y RECURSOS INTEGRADOS 169

CONTROLADO R

CONTROL DMA LISTO PER 1

■ I »•SRAM:- CÁNALÉS DMADPSRAM

INTERRUPCIONBUS DATOS DMA

DIRECCIÓN DPSRAM DIRECCIÓN PERIFÉRICO

BUS DATOS CPU - PERIFERICOS

B L O Q

DATOS

Figura 12.12. El CDMA de los dsPIC33E dispone de 8 canales independientes para soportar las trans­ferencias directas entre la DPSRAM y ios periféricos.

TEMPORIZ TEMPORIZ

BUSTJÄTSSli 7IÄ"

UART ECAN ECAN

Figura 12.13. Median te el control de los canales del CDMA se puede atender a un gran número de periféricos.

palabra en un ciclo. Cada bloque de datos que puede transferirse puede alcanzar los 2.048 bytes o palabras. En el CDMA existe un esquema de prioridades entre los canales para los casos de coli­sión entre ellos.

Con la finalidad de conseguir el máximo rendimiento en la transferencia con DMA el contro­lador tiene 4 modos de funcionamiento que permiten adaptarse a las estructuras de datos que se manejen.

Page 188: DsPIC Diseño practico de aplicaciones

En el modo de disparo único se mueve un bloque de datos y a continuación se desactiva el ca­n a l (Figura 12.14.)

17 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

ESPACIO DIRECCIO NES DPSRAM

INTERRUPCIO N CPU A L COM PLETAR

TR AN SFER ENC IA DEL BLOQUE

Figura 12.14. Representación gráfica del funcionamiento del modo de disparo único en el CDMA.

En el modo de autorepetición se mueve un bloque de datos y luego se configura automática­mente el canal para repetir la transferencia. (Figura 12.15.)

ESPACIO D IRECCIONES DPSRAM

INTERRUPCIÓ N CPU A L COMPLETAR

TR ANSFERENCIA DEL BLOQUE

Figura 12.15. Representación gráfica del funcionamiento del modo de trabajo de autorepetición del CDMA.

En el modo “ping-pong” se manejan 2 buffer de datos y cada vez que se completa la transmisión de uno de ellos se configuran automáticamente los canales para comenzar la transferencia del otro. (Figura 12.16.)

Page 189: DsPIC Diseño practico de aplicaciones

PERIFÉRICOS Y RECURSOS INTEGRADOS 1 71

ESPACIO DIRECCIONES DPSRAM

B U FFE R À

C OUNT = DMACNTx

INTERRUPCIÓ N CPU j ^ > AL COM PLETAR

TRANSFERENCIA

BUFFER B

----- ------------------------| INTERRUPCIÓN CPUC OUNT = DM ACNTx N AL CO M PLETAR

TR ANSFERENCIA

Figura 12.16. Modo de funcionamiento tipo "ping-pong" del COMA.

Finalmente, en el modo de direccionamiento indirecto, la dirección de acceso a la DPSRAM se forma concatenando la parte baja de dicha dirección que suministra el periférico con la parte alta que conforma la dirección Base suministrada por un registro del CDMA (DMASTnx). (Figura 12.17.)

EXTENSIÓN DE CEROS

DIRECCION INDIRECTA DESDE

PERIFÉRICO

DIRECCIÓN DPSRAM

/ ______

DIRECCI ÓN BASE j

i!

«

î :

: °

ÎDIRECCIÓN BASE RESPONSABILIDAD DESDE DMASTnx DEL USUARIO

Figura 12.17. La dirección de acceso a la DPSRAM en el modo de direccionamiento indirecto se for­ma concatenando los dos campos que se indican en la figura.

Page 190: DsPIC Diseño practico de aplicaciones
Page 191: DsPIC Diseño practico de aplicaciones

Segunda parteProgramación y simulación de aplicaciones

Aplicación 0. LAS HERRAMIENTAS DE DESARROLLO...............................................................1 75

Aplicación 1. DISEÑANDO FILTROS.............................................................................................. 181

Aplicación 2. EL ENTORNO DE DESARROLLO MPLAB IDE.................................................... 197

Aplicación 3. PONIENDO EN MARCHA EL S IM ULADOR........................................................215

Aplicación 4. MANEJANDO LAS INSTRUCCIONES TÍPICAS DE LOS dsPIC....................... 225

Aplicación 5. LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM..................233

Aplicación 6. PROGRAMANDO LOS PERIFÉRICOS CON VISUAL IN IT IALIZER............. 243

Aplicación 7. PERIFÉRICOS AVANZADO S....................................................................................259

Apéndice A. CO NTENIDO DEL CD E INSTALACIÓN DE LAS HERRAMIENTAS

DE TRABAJO..................................................................................................................275

Apéndice B. SOLUCIONES A LOS EJERCICIOS DE AUTOEVALUACIÓN.......................... 281

Page 192: DsPIC Diseño practico de aplicaciones
Page 193: DsPIC Diseño practico de aplicaciones

. . . . . v.*. . . . .

APLICACIÓN

VlV

m M

..... . .

Las herramientas de desarrollo

A0.1. IN T R O D U C C IÓ N

En esta segunda parte del libro, y tras haber estudiado el aspecto teórico de los controladores dsPIC, se aborda un estudio más práctico de los mismos, mediante el desarrollo de varias aplicaciones. Así, se estudiará desde cómo comenzar a programar las aplicaciones, compilarlas y simularlas en el orde­nador, hasta desarrollar alguna aplicación de los periféricos avanzados introducidos en estos controla­dores para el tratamiento digital de señales. Así mismo, al final de cada capítulo una sección de auto- evaluación, servirá al lector para conocer su evolución en la asimilación de los conceptos descritos.

Para llevar a cabo esta tarea, esta segunda parte se encuentra dividida en varias aplicaciones prác­ticas explicadas con detenimiento, tanto para el lector aventajado que ya ha programado con ante­rioridad los microcontroladores PÍC, como para el neófito.

En este capítulo introductorio se analizan las herramientas a emplear, así como las característi­cas de la familia del dsPIC utilizada tanto en esta segunda parte como en la tercera, en la que el lec­tor podrá comprobar prácticamente los conocimientos adquiridos mediante ejercicios sobre circui­tos reales, utilizando la taijeta PIC School preparada a tal efecto.

Las características de estos dispositivos requieren poseer una base teórica sobre el tratamiento di­gital de señales. Esta teoría de señales no es objeto de este libro.

A0.2. DESCRIPCIÓN DEL dsPIC30F4013

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 propósito general, que ha sido seleccionado por varias de sus características.

En primer lugar pertenece a una familia de propósito 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 (Plástic Dual In-line Package), que permite una mayor sen­cillez de montaje sobre un circuito electrónico frente a otro tipo de encapsulados. Sin embargo, una pequeña desventaja de este modelo es que no dispone de hardware específico para el tratamiento de PWM, muy útil en el control de motores.

1 7 5

Page 194: DsPIC Diseño practico de aplicaciones

1 7 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

AO.2.1. D iagram a de conexionado

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 conexión. El diagrama de co­nexionado se corresponde con el de la Figura AO. 1.

MCLR n 1 40 I] AVD DAN0A/REF+/CN2/RB0 C 2 39 1 AVSSAN1A/REF-/CN3/RB1 n 3 36 j AN9/CSCK/RB9

AN2/SS1/LVDIN/CN4/RB2 C 4 37 1 AN10/CSDI/RB10AN3/CN5/RB3 C 5 36 H AN11/CSDO/RB11

AN4/IC7/C N6/R B4 fz 6 35 3 AN12/COFS/RB12AN5/IC8/CN7/RB5 H 7

"O34 3 EMUC2/OC1/RDO

PGC/EMUC/AN6/OCFA/RB6 C 8 33 H EMUD2/OC2/RD1PGD/EMUD/AN7/RB7 C 9 o

Ca>32 □ V D D

AN8/RB8 J= 10 31 H VSSVD D n ti o 30 b C1RX/RF0v s s n 12 2 29 □ C1TX/RF1

OSC1/CLKIN n 13 o 28 □ U2RX/CN17/RF4OSC2/CLKO/RC15 C 14 27 □ U2TX/CN18/RF5

EMUD1 /SOSO I/T2CK/U1ATX/CN1 /RC13 C 15 26 □ U1RX/SDI1/SDA/RF2EMUC1/SOSCO/T1CK/U1ARX/CNO/RC14 H 16 25 □ EMUD3/U1TX/SD01/SCL/RF3

INT0/RA11 C 17 24 □ EMUC3/SCK1/RF6IC2/1NT2/RD9 £ 10 23 □ IC1/1NT1/RD8

OC4/RD3 Q 19 22 □ OC3/RD2Vss q 20 21 □ VD D

Figura A0.1. Diagrama de conexionado del contro/ador dsPIC30F4013.

AO.2.2. Características principales

Las características propias más importantes del dsPIC30F4013 se encuentran resumidas en la si­guiente tabla.

MEMORIA iMemoria 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

PERIFÉRICOS_______________ ~

5 temporizadores de I (> bits

4 módulos de captura de 16 bits

4 módulos comparadores o de salida PWM de 16 bits

_____ Interfaz de conversión de datos DCI, con soporte de CODEC de audio AC'97 e l'S

2 módulos UART

1 módulo SPI

1 módulo CAN

I módulo l2C

c a r a c t e r TstTc a s a n a l ó g ic a s

Conversor analógico digital de 12 bits

Ratio de conversión de 100 ksps

Hasta 1 3 canales de entrada

Page 195: DsPIC Diseño practico de aplicaciones

APLICACIÓN 0: LAS HERRAMIENTAS DF DESARROLLO 17 7

A0.3. HERRAMIENTAS DE SOFTWARE UTILIZAD AS

Se describen las características y usos de las herramientas software que se utilizarán para desarro­llar las aplicaciones. La instalación de estas herramientas se encuentra detallada en el Apéndice A, Contenido del CD e Instalación de las herramientas de trabajo.

AO.3.1. El en to rno de desarro llo MPLAB 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 noecneKio coonncGO0 03CCC033 CC0330CC3 U3UCUWJ UC0333CCa aaaeeon GCOOSaCC 5 33DCC003 CCC0330C•J JJ3ULLOJ ULL03JUCo ooiaocco onccooDoO 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 IXIJUUlXrjc cccoaaoc nonnereo C GCCC033G CO3DCCC00 UUCCU33U CUJ3UCCVc caccoaan coaannco B OOCC0030 C0033CC0U UULCUJ33 CUU3BUCOn nnnrrm n rm ia n c c 0 030CC033 CC0330CC3 333ULW3 UCUJ3SUCa naanrma nrm 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 030CC033O IXV33DLO 0301X033O CC033DCC 030GC003 O CC003000 0300003

vkeooVJK31TRE52SW53TOES*suca

ri,- -,« B » 0326 CCCOwAv 33X4 nccoorco■ H 332Z SOCOM B B B o l auccrtn>H H «olí

-MICoai aBH8BS muHBBHIBB «.vj:

BWBftBftj c o i e oaanBPgOQQP C O « 0333WBflBgg cc,'¿ ijjjjP P H CO«i 0033íw-c.vyyl cmc co33

v . - . ; v v .;-;-;

Figura A0.2. El entorno de desarrollo MPLAB IDE.

Se dedica un capítulo a explicar las características de este entorno con el que se desarrollarán la mayoría de las aplicaciones. A modo de resumen, se destacan las siguientes características:

• Desarrollado para su uso bajo sistema operativo Windows.• Edición de código integrada con resaltado de código.• Posibilidad de ensamblar, compilar y iinkar el código.• Posibilidad de depuración del programa ejecutando paso a paso nuestro programa con un simu­

lador o en tiempo real sobre el circuito de aplicación con las herramientas de depuración 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 inspección.• Programación del firmware de los controladores a través de las herramientas de programación.

Page 196: DsPIC Diseño practico de aplicaciones

1 7 8 dsPIC DISEÑO PRÁCTICO 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 versión de uso libre durante 60 días. 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 acompaña a esta obra, se encuentra una versión para estudiantes, que sigue activa tras superar este período de 60 días, y que transcurrido dicho tiempo pierde algunas de sus funcionalidades, pe­ro es perfectamente utilizable para fines didácticos. Si el lector no es un estudiante, deberá bajarse la demo gratuita de 60 días disponible en la web de Microchip.

AO.3.3. Herramienta de diseño de filtros dsPICFdLite

El programa dsPICFdLite, desarrollado por Momentum Data Systems Inc., es una versión DEMO de carácter introductorio y limitado que sirve para resolver filtros FIR e IIR de escasa complejidad me­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 diseño de filtros.

Todos los cálculos matemáticos complejos necesarios para realizar estas tareas se simplifican enormemente y, además, se obtienen una serie de gráficos (magnitud, fase, respuesta ante impulso, respuesta ante escalón, polos y zeros, retraso,...) que permitirán predecir el comportamiento de los filtros diseñados. 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 ratón y se puede importar ese fichero pa­ra usarlo directamente en el MPLAB IDE. De igual forma, la aplicación generará el código en en­samblador o en C para utilizar dicho filtro en nuestro programa para el dsPIC. (Figura A0.3.)

Pie We*v Cps»y> Filer Output VVhdow

id * i gf m «ii w ai ni m si miro; m m\ a ai g la- i ° 1 *

Log Magnitud» vs Fr»qu«ncyMagnitud» vs Fr»qu«ncy

n nm___ 4iy>9s___ wwi

** -X; ¡

:

LJ

n rm tan?* nivan

; £ : i.T5niM r r ° T i

n i: - 'a -- 7

M Pole/Zero Plot

Figura A0.3. Diseño de filtros mediante dsPICFdLite.

Page 197: DsPIC Diseño practico de aplicaciones

APLICACIÓN 0: LAS HERRAMIENTAS DE DESARROLLO 1 7 9

Esta herramienta es una versión reducida del programa dsPIC Fd. Se trata de una versión con ciertas limitaciones, tales como el orden máximo de los filtros generados.

AO.3.4. H erram ien ta para el tra tam ien to de a lgoritm os de tra tam ien to de señales dsPICworks

Esta herramienta, también descrita en la Aplicación 2, permite realizar análisis y tratamiento de se­ñales de forma sencilla.

El programa permite generar e importar y exportar señales de todo tipo. Así mismo dispone de un sencillo menú para realizar operaciones típicas de DSP (Procesamiento Digital de Señales) co­mo realización de transformadas, filtrado de señales (utilizando los filtros diseñados con el progra­ma dsPICFdLite), escalado, recorte de señales, etc.

La aplicación también muestra en pantalla representaciones de las señales, incluso con gráficos3D.

Los datos de las señales podremos incorporarlos al MPLAB IDE y crear ficheros en ensambla­dor para incluir en la aplicación. (Figura A0.4.)

t* íf" W* py !/*''« ¡¡M»■j&jgJ: ■'!:&'•: «¡aj: B|»B: HilBlj

ü . 0 L2 ? S f> p c rc a d ttroti ’x4r.3a.jG con ru id o .w a v * y P - S S « 1 0 0 K z : R E A jr iM B tN V l í: - J . r i * r ;

6 .7 9 1 l 'J . m v 1 'J .tO 'J

r i n * fnS! 1 3 .5 8 3

V P V ( n « n a » ^ « c o n r u i i i . c i í . )

F r«< | v «n c y {k K x l I? (V: 0 / 1 1 . 61 io 2 ¡ :

HQ

il.l

Figura A0.4. Tratamiento y análisis de señales mediante la herramienta dsPICworks.

AUTOEVALU A C IÓ N

Al final de cada capítulo de esta parte práctica, encontrará bajo el epígrafe Conceptos clave de este capitulo una serie de preguntas que le ayudarán a verificar si ha asimilado y comprendido los con­tenidos explicados en el capítulo.

Así mismo, se propone una serie de enunciados de ejercicios correspondiente a la aplicación estudiada.

Page 198: DsPIC Diseño practico de aplicaciones

1 8 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Conceptos clave de este capítulo

1. ¿Con qué hern2. ¿Es necesaria

en dsPIC?3. ¿De cuánta me4. ¿Con qué herr¿

u m m'esarrollarán los programas para dsPIC?

gunda parte de esta obra alguna placa de desarrollo o hardware basado

a de datos y de programa dispone el dsPlC30F4013? se debe tener especial cuidado al instalarla?¿por qué?

¿Qué herramienta generará automáticamente el código fuente necesario para desarrollar un filtro para un dsPIC?

Page 199: DsPIC Diseño practico de aplicaciones

APLICACIÓN

iSgB8B8SIW«fi88giKgaai

sy!vy.' /•'•Vv/ . Í

WsS'&yWm

W m M á ,WhiWiFFFfffifiiC?:-',<*• W A W . W :

Diseñando filtros

A1.1. INTRODUCCIÓN

La teoría de filtrado de señales abarca un temario muy amplio y denso lleno de cálculos matemáti­cos. Elaborar esos cálculos matemáticos con los PIC resultaría una tarea muy ardua debido a su ca­rencia de instrucciones para hacer divisiones, multiplicaciones, y operaciones matemáticas de más complejidad.

La empresa Microchip dispone de dos herramientas especialmente útiles para el tratamiento de señales. Se trata de las herramientas dsPTC Fd Lite y dsPICworks. Ambas están disponibles para su descarga gratuita desde la web www.microchip.com. En caso de que la herramienta de diseño de fil­tros dsPIC FD Lite no cumpla con todas sus expectativas, debe saber que existe una versión com­pleta, con más funcionalidades, que comercializa Microchip.

A1.2. EL PLAN DE TRABAJO

En el capítulo anterior, se han analizado las funcionalidades principales de las dos herramientas que aborda este capítulo: dsPIC Fd Lite y dsPICworks.

Se propone resolver un problema de filtrado de señales, utilizando dichas herramientas. Sin lle­gar a profundizar en todas las funcionalidades y a través de un ejemplo clarificador, se mostrará el potencial que alcanza la combinación de estas 2 herramientas.

A1.3. EL PROBLEMA

En la carpeta Aplicaciones\aplicaciónl\filtros del CD que acompaña al libro, se encuentra un fichero de sonido cuyo nombre es mensaje con ruido.wav: Se trata de una señal de audio reproducible en el ordenador que contiene un ruido. Puede identificarse rápidamente 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

Page 200: DsPIC Diseño practico de aplicaciones

182 dsPIC. DISEÑO PRÁCTICO 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 quizás un ejemplo muy interesante es el de los microfiltros en las líneas ADSL. (Figura A 1.1.) Las líneas ADSL aprovechan el ca­nal telefónico para enviar información al ordenador. Así, estos filtros permiten hablar por teléfo­no y navegar simultáneamente sin ningún problema. Las dos señales navegan por el mismo canal hasta el receptor. Para que al hablar por teléfono, no se mezclen las señales, y sólo llegue la señal de voz, se debe colocar unos microfiltros en las tomas de los teléfonos, que filtran la señal a mo­do de colador, evitando que lleguen a nuestros oídos ruidos producidos por la señal de Internet. El ejemplo desarrollado actúa de forma similar, al conseguir quitar de la señal de voz el ruido que acompaña.

Figura Al .1. Instalación de un microfiltro DSL.

También es interesante el proceso contrario: extraer del mensaje una señal que contenga sólo el ruido. Así se podría enviar mensajes en clave, camuflándolos con un mensaje de audio normal. En ese caso, para descifrar el mensaje, hay que filtrar la señal original de forma que sólo quede el rui­do original y aplicar sobre este otro algoritmo de tratamiento de señales para obtener el mensaje des­cifrado final.

A1.4. ANALIZANDO LA SEÑAL

Al escuchar la señal a través de los altavoces del ordenador, se aprecia que la frecuencia del ruido es muy distinta a la del resto de la señal. Es un tono mucho más 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á diseñar un filtro que consiga hacer desaparecer de la se­ñal original la parte que contenga dichas frecuencias. El programa dsPICworks1 permite analizar la señal. (Figura A l.2.) Una vez puesta en marcha la herramienta, se procede a cargar la señal a es­tudiar. El programa no trabaja directamente con señales .WAV, sino con un formato interno de pro­grama, cuyos archivos tienen una extensión J IM . La conversión a este formato se realiza de una forma bastante sencilla:

La instalación de esta herramienta se encuentra detallada en el Apéndice A contenido en el CD.

Page 201: DsPIC Diseño practico de aplicaciones

APLICACIÓN 1: DISEÑANDO FILTROS 1 8 3

Figura A l .2. La herramienta de tratamiento de señales dsPfCworks.

y.v.-y.-y.v/.v i 'iv / iv iv X v i '/ iv X v y.'.-'.' v-;.;-v.v<::*v'v-.v■yy.'.\\\-y.y.\-y.-y- l¿ '^.\-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 señal de entrada. Dicho for­

mato es Windows WAVE File.• A continuación, y mediante el botón Source File, se selecciona el fichero que contiene la señal a ana­

lizar de la carpeta del CD que acompaña al libro: Aplicaciones\aplicaciónl\mensaje con ruido.wav.• Pulsando en el botón Destinantion File, se da un nombre y una ubicación para la señal en formato

. TIM. Un posible nombre podría ser mensaje con ruido, tim dentro de la carpeta Mis documentos. (Es importante cambiar la ubicación del fichero de destino ya que de dejar la ruta por defecto, la del CD, al estar protegido contra escritura, el programa daría un mensaje de error.)

• Por último,, se valida el proceso pulsando el botón OK.

/Sj Import File

' . XvXv.;.v.-iv.;.Scuce Ffe mensaje cor. rtó io .w a.

Destination Fie mensaje con ruido.ti.

I r rp o rtfile T yp e ----- ------ -----------------------------------------

f* Time Domain File C Frequency Ocfnóín Fite

Sampling R a le

Impon Fie Formal j Windows WAVE file Number of Channels (l

FFT FwneSize | 1024 FFTIntevd } 1024

FFT Windcw Fonction j Rec'áfv-i

Figura A1.3. lmport¿indo la señal con ruido al dsRICworks.

Page 202: DsPIC Diseño practico de aplicaciones

1 8 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Nada más pulsar el botón OK, se obtiene una representación gráfica de la señal en pantalla. (Figura A 1.4.)

t / , dsPICworkr. [C:\Documents and Settin^\0lat7\f scrttorúAContenido del CDVAP1 ICAC.IONfSVA...

F in View £ d t G eneretor O peration D§? K ip te y U tlte e í W indow

i .?].# ]; M « I » l ! ü l l .H J .O l.H l.B l _____;_______I m p o r t e d f rom 'mensaje c on ruido.wav'

120159 pts @ í4100 H z : REALTIMEINT16: Binary

-Ifll *

L i l i

1 3 .5 8 3

Figura A1.4. Representación gráfica de la señal.

El gráfico de la Figura A l.4. muestra una representación en magnitud de la señal en el dominio del tiempo. Al realizar la Transformada de Fourier se podrá analizar dicha señal en el dominio de las frecuencias. Más concretamente, y para señales discretas, se debe realizar la Transformada Rá­pida de Fourier, FFT (Fast Fourier Transform).

Se procede a realizar una operación DSP accesible en el menú DSP del programa, mediante la opción Fcist Fourier Transform. Al acceder a este menú, aparece en pantalla la Figura A 1.5.

¿ 6 Fast Fourier Transformation

i mensaje con ruido. ti.input x(n)

output: X(wj mensajeconfuido.fr.

FFT Window Function Rectangular

Advance FFT frame |l024

after each block of j 1024

Help

samples

-~l points computed

OK Cancel

Figura A1.5. Realización de la Transformada Rápida de Fourier.

Page 203: DsPIC Diseño practico de aplicaciones

APLICACIÓN 1: DISEÑANDO FILTROS 185

Tras aceptar las opciones por defecto de la ventana y pulsar el botón OK, la herramienta advier­te del formato en que se guardarán los datos. Aceptando de nuevo ese mensaje, se obtiene casi ins­tantáneamente el resultado de la operación. En el gráfico de la Figura A 1.6. ya se puede estudiar el rango de frecuencias de la señal.

ckPICworks - [C:\Documents and SeUinp^\Olat7\Fsr/(tor¡o\Cúntonirlo del COVAPI ICACIOWS\A..

r l t VJéw CcJ: Se-ierator Cpsraíicci 55? j f b y O R I«*

]iwap |a| alaai a|«| aiHiBlií_____FFT (» « n s a jo con c w id o .tiK )

2 0 9 3 2 p t s @ -a ílO O H z : c o m p le x 6 i bit d o u b le : Birsary

x

i ih fj N '«WijJu.J____

F r e q u e r . c y (kHz) 3 [ F r a m e 0 / 1 1 . 6 1 (mS) 1

jlUKer.it/

Figura A1.6. Representación del espectro de frecuencias de la señal.

El gráfico de la Figura A l .7. muestra dicho rango de frecuencias para la señal estudiada. Se ob­serva una desviación grande en forma de máximo. Al hacer clic con el ratón en el punto más alto de ese máximo, en la parte inferior de la pantalla aparece el valor de dicha frecuencia que claramente es muy distinta a la del resto de la señal.

Figura A1.7. Localizando el ruido de la señal.

Page 204: DsPIC Diseño practico de aplicaciones

1 8 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Luego la señal contiene una frecuencia cercana a los 4.867 Hz, que es muy distinta al resto de frecuencias que contiene la señal.

Al filtrar un rango de frecuencias cercano a ese valor, se conseguirá eliminar el dichoso ruido.

A l .5. FILTRANDO LA SEÑAL

Si la hipótesis 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 señal de entrada y la atenúan en función de unos paráme­tros para proporcionar otra señal 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 características 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 más costosos de calcular debido a que son más 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 señal.

En esta experiencia se utilizará un filtro IIR que resulta más apropiado para las señales de au- dio 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 señal original sin atenuar. Para diseñar 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 función es atenuar una banda de frecuencias y el resto de frecuencias dejarlas inalteradas. El programa dispone de esa funcionalidad bajo el menú Filíer -> Bandstop. (Figura A 1.8.)

Filter Output Codeger

Lowpass...

Highpass .,.

Bandpass ...wBandstop ...

Start Design ...

Figura A1.8. Iniciando el filtro banda-eliminada.

A continuación se parametriza el filtro. Lo ideal sería indicar las frecuencias que se desean eli­minar y nada más. Pero, este tipo de filtros no son perfectos y se deben parametrizar de forma que se llegue a un compromiso entre un cierto valor de atenuación para frecuencias cercanas a las que se desean eliminar y un valor de atenuación muy superior para aquellas que se desean eliminar del todo. Para calcular dichos parámetros del filtro analizaremos la Figura A l .9 que representa

“ Su instalación también se encuentra detallada en el Apéndice A contenido en el CD.

Page 205: DsPIC Diseño practico de aplicaciones

APLICACIÓN 1: DISEÑANDO FILTROS 187

gráficamente un filtro de Cauer o elíptico. El parámetro passband ripplc (PO) indica la mayor o menor atenuación de la señal, en las frecuencias pasa banda (f 1 y f4) y el parámetro Stop band ripple (P l) indica la atenuación obtenida en las frecuencias de elimina banda (f2 y f3). Esta me­dida se expresa en dB, y su cálculo se realiza mediante la siguiente fórmula:

De esta fórmula se puede deducir que para conseguir que para las frecuencias entre f2 y f3 (stop band frecuencies) sólo pase una cien milésima de la señal, 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 señal original, se debe colocar P l, Pass band ripple, con 0.1 dB.

Figura Al .9. Representación de un filtro de Cauer.

Se establecen unas frecuencias pasabanda, de fl a f4, que comprenden las frecuencias a eli­minar y en las que empieza a filtrarse la señal. El filtro hará que para frecuencias inferiores a f l y mayores que f4, la señal no será atenuada de f l a f2, la atenuación será pequeña (en función del parámetro passband ripple P l), mientras que de f2 a f3 la atenuación será máxima (en función del parámetro PO Stopband ripple), para volver a ser mínima de f3 a f4 y prácticamente nula a partir de f4. Así los parámetros que se seleccionan en este ejemplo serán los siguientes:

• Scimpling frecuency: En la parte superior de la Figura A l.7. se comprueba que la frecuencia de muestreo de la señal original es de 44100 Hz.

• Stopband Frecuencies: Será un rango entorno a la frecuencia localizada, desde 4800Hz has­ta 5000Hz. Estas frecuencias se verán muy atenuadas.

Page 206: DsPIC Diseño practico de aplicaciones

1 8 8 dsPIC. DISEÑO PRÁCTICO 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 atenuación (a excepción de la banda eliminada) será definida por el parámetro 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 fórmula logarítmica explicada con an­terioridad se obtiene aproximadamente un 98% de la señal original.

• Stopband Ripple: 50 dB. Este parámetro nos indica que obtendremos una cien milésima parte de la señal original, es decir prácticamente nada, entre las frecuencias que deseamos eliminar.

Un resumen de los parámetros comentados se presenta en la Figura A1.10.

¿fcB and stop Filter m m

I Filter Specíicalicn Input

Sampling Frequency. | 44100—

Passband Frequencies: (4000 |5EOO

Stopband Frequencies: ¡4800 ¡5000

Passband Ripple (dB) |o 1

Stopband Ripple (d3> [50

Next Help Cancel

Figura A^AO. Parámetros del filtro.

Al pulsar Next sobre la pantalla representada en la Figura A 1.10, el programa elegirá el mejor pa­rámetro para establecer el orden del filtro. En este caso, Elliptic 8. Al aumentar el parámetro Stop band ripple. por ejemplo a 80 dB, para obtener una atenuación todavía mayor en las frecuencias que se quieren eliminar, el cálculo del filtro requeriría un orden mayor. La herramienta dsPIC Fd Lite no permite el cálculo de filtros de orden superior a 8, para lo cual es necesaria la versión ampliada del programa. (Figura A 1.11.)

HR Analog Filter Orde# Estimates:

C Butteiwoith 14

C T schebjischeff 10

C Inverse Tscbebyscheff 10

d- ÍEÜpticj 8C Bessel 14

Enter Desired Filter Order (optional}

Next Prev I Help Cancel

Figura A1.11 .Selección del orden del filtro.

Page 207: DsPIC Diseño practico de aplicaciones

APLICACIÓN 1: DISEÑANDO FILTROS 1 8 9

Tras pulsar de nuevo el botón Next, se obtiene el resultado representado en la Figura Al .12.

/ j, dsP IC FO L ite

Figura A1.12. Representación gráfica de las características del filtro.

Los lectores familiarizados con el tratamiento digital de señales, apreciarán en la Figura A l. 12 una serie de gráficas que analizan las características del filtro diseñado. Conseguir estas gráficas 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 gráficos que el gráfico titulado Pole/Zero Plot muestra la estabilidad del filtro. Si todos los polos y ceros se encuentran dentro del círculo unitario, el filtro será estable.

A continuación, el programa puede exportar los datos del filtro para poder utilizarlos más ade­lante junto con la señal original. La realización de este filtro ha supuesto el cálculo de una serie de coeficientes utilizados en la fórmula de filtrado. Para obtenerlos, el programa dispone del menú Out- put -> Create Filíe 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 A3. Generación del fichero de coeficientes.

Page 208: DsPIC Diseño practico de aplicaciones

1 9 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Al .6. GENERANDO LA SEÑAL SIN RUIDO

Mediante la herramienta dsPICworks puede comprobarse si el filtro diseñado cumple con la función especificada. Aplicando el filtro diseñado a la señal original se obtiene la señal de salida filtrada. Y si todos los supuestos han sido correctos, debería obtenerse una señal sin ese molesto pitido que no permite escuchar con comodidad el mensaje transmitido. En pasos anteriores se había creado el fi­chero mensaje con ruido.tim que no era más que el resultado de importar el sonido original .WAV al formato .TIM con el que trabaja la herramienta dsPICworks. Para aplicar el filtro mediante ds- PlCworks se utiliza la opción del filtrado mostrada en el menú DSP -> Signal Filtering. Al ha­cerlo, aparecerá en pantalla una ventana análoga a la de la- Figura A l . 14.

Apply dsPIC l D I ilter to Signal [ x j

F it « Cwfficisnt Fib j : coctóerteí

irfiUL x2fn) menjots oontuiooti .

oi/oU vM f7WT3aje sn andafc

....Yfzl-HfzrXfz) wheift H|rl k ih« Itawfei luraton el Ihe fliet

---------------------------------------------------- 1Hdp I . - OK I Cancel |

Figura A1.14.Aplicación del filtro a la señal original.

Mediante el botón 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 botón input: x2(nJ, se selecciona la señal de entrada en formato TIM, guardada en pasos anterio­res en la carpeta Mis Documentos y denominada mensaje con ruido.tim. Usando el botón output: y(n), se selecciona el fichero que contendrá la señal 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 gráfico de la señal. Figura A 1.15.

Figura A1 AS.La señal original filtrada.

Page 209: DsPIC Diseño practico de aplicaciones

APLICACIÓN 1 : DISEÑANDO FILTROS 191

Al comparar la señal original, Figura A l . 14, y la señal 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 señal 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 señal (selec­

cionando en la opción Expon 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

Deîtmerittï Fie mensaje íh nidccwa.

E x p a l F íe Ty p e-

<• True Domain Fite

C Frequency Domain Fie

r QEDeíignFIR Filer Ffe

Erçxxl Fite Foimoí

¡ Windows V/AVE file (8-bfc)

f " Add Assembter Directives

Hefc OK Cancel

Figura A l .16. Exportando la señal 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á oír la original sin el ruido molesto. ¡Lo conseguimos!

Otra manera de ver el resultado sería analizando la señal filtrada en el dominio de las frecuen­cias aplicándo también la Transformada Rápida de Fourier. ¿Se atreve?

Pero, ¿qué se ha conseguido? ¿Qué tiene que ver esto con la programación de los dsPIC?Parece obvio que estas herramientas pueden resultar útiles para el tratamiento digital de señales,

lo que no es tan obvio es cómo puede beneficiarnos en la programación de los dsPTC. ¿Cómo se po­dría 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 opción consiste en generar el programa en lenguaje C. Con un clic de ratón, el programa dsPIC Fd Lite, generará el código en C para el dsPIC. Esta opción se encuentra disponible en el menú Qodegen -> C Code... (Figura A 1.17.)

Figura A l. 17.Opciones de generación de código.

Al seleccionar esta opción del menú, el programa generará un fichero en lenguaje C, ejecutable desde el entorno de programación MPLAB IDE.

Page 210: DsPIC Diseño practico de aplicaciones

1 9 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

El código generado consiste en un programa que debe recibir 2 parámetros, uno de entrada, el fichero de la señal original y otro de salida, el fichero a generar. Si se trabajase con un dsPIC en un circuito real, se debería cambiar la parte del programa que lee los datos del fichero de entrada por una conversión analógico a digital de la señal de entrada y la parte de la salida por una conversión digital a analógico.

#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 *7fprintf (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/’Vn error - Cannot open file %s for input\n", argvf I ]);

error = 1;)

1if (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;

Page 211: DsPIC Diseño practico de aplicaciones

APLICACIÓN 1: DISEÑANDO 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; in„eount++) {

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,11 %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 señal en lenguaje C.

Una segunda opción es generar un fichero con el programa en lenguaje ensamblador. También puede llevarse a cabo mediante la opción 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 añadirle dicha rutina. Existen 3 tipos de subrutinas principales que se encuentran en la caipeta de instalación del programa dsPíCFd y se debe elegir una en función del filtro utilizado:

Fir Filter, s Para filtros FIR

HRT Filter.s Para filtros IIR Transpuestos

URCJilter.s Para filtros IIR Canónicos

Mediante la activación de la opción CWrapper se generarán 3 ficheros, un fichero .c, otro .cmd y un último .bat para poder simularlo desde la línea de comandos. (Figura A l.18.)

Page 212: DsPIC Diseño practico de aplicaciones

1 9 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

/fc. dsPIC30 Code Generation 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

r C Wrapper

Simulator Files fot Impulse Response Calculation

OK H eSp Cancel

Figura A l.Vi.Generando el código fuente del filtro en ensamblador.

El fichero generado se trata de un fichero con los coeficientes y con un ejemplo de llamada a la función 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 b( l,0)/2.hword OxBODD b( 1,1)0.hword 0x5218 a( 1,1 )/2.hword 0x334D b( 1,2)/2.hword OxCEl 1 a( L2)/2.hword 0x4029 b( 2.0)/2.hword 0x9AC8 b( 2,l)/2.hword 0x606A a( 2 y ! )/2.hword 0x4029 b( 22)12hword 0xCB9C a( 2,2)12.hword 0x2E39 b( 3,0)/2.hword 0xB9DF b(3,n/2.hword 0x58FC a( 3,1 )/2.hword 0x2E39 b( 3,2)/2.hword 0xC2F9 a( 3,2)/2.hword 0x29A6 b( 4,0)/2.hword 0xBD5B b( 4,1 )/2.hword 0x68CA a(4.1)/2.hword 0x29A6 b( 4,2)/2.hword 0xC25A a( 4,2)/2

Page 213: DsPIC Diseño practico de aplicaciones

APUCACIÓN 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 ; .textJ 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

Page 214: DsPIC Diseño practico de aplicaciones

1 9 6 dsPIC. DISEÑO PRÁCTICO 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 señal en lenguaje ensamblador.

La última opción es generar un fichero con los coeficientes, para incluirlos directamente en el programa.

AUTOEVALUACION

Conceptos clave de este capítulo

• •• - SM. ' ’1. ¿Qué es un fittro?¿Para qué sirve? Cite ejemplos de aplicación.2. Défina los cuatro tipos de filtros esenciales que nos permite diseñar la herramienta dsPIC Fd Lite.3. En el ejemplo propuesto, ¿para qué sirven los parámetros Stopband Ripple (dB) y Pasbband

Ripple (dB)?4. ¿Para qué se ha usado la Transformada Rápida de Fourier?5. ¿En qué lenguajes se puede generar el programa de filtrado?

Ejercicio: Un cambio en el planteamiento

# Se propone ai lector tratar de resolver el problema inverso. En vez de obtener la señal de voz, ex­traer el ruido de la señal.

• En este caso, el tipo de filtro a diseñar no será un filtro de banda-eliminada, sino uno de pasa-ban­da. Este filtro, al contrario que el anterior, atenúa todas las frecuencias, excepto las de una deter­minada banda o rango.

Page 215: DsPIC Diseño practico de aplicaciones

A2.1. INTRODUCCIÓN

A lo largo del presente capítulo se analizan las cualidades del Entorno Integrado de Desarrollo (MPLAB IDE) de Microchip. Este entorno permite, desde editar los programas fuente, hasta ver su ejecución paso a paso en el simulador, grabarlo en la memoria del dsPIC a través de herra­mientas como el ICD2 e incluso depurarlo paso a paso en el circuito real.

Este tema se centra en el proceso de creación de un programa en lenguaje ensamblador y en lenguaje C.

La versión analizada del MPLAB IDE es la 7.30 que, aún sabiendo que en un futuro se que­dará obsoleta y surgirán nuevas versiones, seguro mantendrá muchas similitudes con ellas.

A2.2. TRABAJANDO CON PROYECTOS

Para facilitar enormemente la tarea del programador resulta altamente recomendable al trabajar con el entorno de desarrollo MPLAB IDE, trabajar con “proyectos” .

Los proyectos incluyen varios ficheros. Unos se encargan de la inicialización del controlador, definición de las distintas áreas de memoria, establecimiento de etiquetas para atender interrup­ciones, Reset, programa principal, etc.

Otros ficheros contienen los nombres simbólicos de los registros, direcciones de memoria, etc. Finalmente los proyectos contienen ficheros con los programas fuente. Esta división en varios ficheros, y los ya incluidos en el entorno MPLAB IDE, sim plifica el desarrollo de aplicaciones.

••A2.3. UN VISTAZO RÁPIDO

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

Page 216: DsPIC Diseño practico de aplicaciones

1 9 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

MPI AO DC v7.30

«íAsrcev?.

B in a r y 3ygtool JfcuncC000cao2COOi COO 5coot»nnruCOOC GOOI 0010 0012 001-t U016 0016 nniJi 001C oo ir 0020 0022 002-1 002 6 0020 0 0 2 * OO’ C002 Z 00 30 0032 003-1 0036 OOJt003 A 003 C 003 E oo-i: 0041 on-i-i 0 0 4 1

00300000 00000000 00990000 03000003 0 9 9 :0 0 0 0 (» 0 0 0 0 9 0 OD9GOOOO 020000K5 002*30000 00000000oosooooo ecooooco09930000 00000003o9:coooo c o o o o o m

oooooooo ccooooco09 20 00 00 COOOODZC o:-:ooooo 930000:0 cccuoooo Qaoooooo ocoooooo cooooooo o=oaoooo caooooco o:cooooo cooooccg09300000 COOOOCCO DCQOOOOO COOOOCCO«000000 coooocco ccaooooo coooocco :caooooo coooocoo cooooooo ooooouoo raaooooo aoooooooZCOOOOOD COOODlOO:C 0 00 00 3 coooocoo COOOOOOO 00000300 cooooooo ooooocoo cooooooo oooooaoo G0000009 00000300 'JUOOOOOO 00000300nonooonr, nooonnoo00 00 00 09 00009300 GOOOOOOC 00099300 OOOOOOCC 00009300oooooooc oooocooo00 0 0 0 0 9 : 00099300 00 0 0 0 0 9 2 00091000

1TRÎ00mciVRÏ02ÏPZ03H»KG4VRSCS

i wsiîf rît! cbjxtrfcj HíüyFte

s urta" Sep»

•iDiiuM *p3ue«ui'j.

00000000nonooooooooooooooooooooo0009oooooooo00090009oooo00090009000900 09oonr.00 0900 9900990 0 »0 0 9 :oo?:

vnlil I

5x6030.

fVw Ecfc Vm* Proj*! Ti«-v v i i j I id i4 * i C iW i;r« Wrafctv

D « U A & : & « ? I : e ? a i » 3 -J» $ SSl C hecksum : 0xb709 >2 » i « ¡

/ / fu n c tio M uni Vuxia^laa vh Clv&ui void fc:nu;aZlo;iat lung date! . void tn.Z10i.eXir ckractar. ;void _a^çrll»v^e : : .in te r ru p t ! : _ACCXnc#rn^it:void¡void . .ltttftrrupc _ATCIi«errv5C*'*>id:

Figura A2.1 . El entorno de desarrollo MP LAß IDE.

El entorno dispone de un menú clásico en la parte superior de la pantalla desde donde acceder a todas las funciones del mismo.

Los menús File, Edit, Window y Help no tienen ninguna característica que los haga especialmente destacables. No así el menú View, que incluye características propias y específicas. (Figura A2.2.)

Project Debugger

Project

✓ Output

Programmer Tools Visual Inltiateer Con

tí'

1 Disassembly Listing

2 Hardware Stack

3 Program Memory

4 File Registers

5 EEPROM

6 Memory Usage Gauge

7 LCD Pxel

8 Locals

9 Watch

10 Call Stack

11 Special Function Registers

1 Standard

✓ 2 Project Manager

✓ 3 Checksum

</ 4 MPLAB1CD 2 Program Toofoar

OOOOOOOO 00000000 OOOOOOOO OOOOOOOO

OOOOOOOO OOOOOOOO

OOOOOOOO OOOOOOOO

OOOOOOOO OOOOOOOO

OOOOOOOO OOOOOOOO

OOOOOOOO OOOOOOOO

OOOOOOOO OOOOOOOO

OOOOOOOO OOOOOOOO

Figura A2.2. F.I menú View.

Desde el menú View, además de configurar las barras de herramientas deseadas se puede acce­der a la visualización de partes fundamentales del proyecto, como la memoria del programa, la me­moria EEPROM, un gráfico de uso de la memoria, una ventana para añadir datos que se deseen

Page 217: DsPIC Diseño practico de aplicaciones

APLICACIÓN 2: EL ENTORNO DE DESARROLLO MPLAB IDE 1 9 9

moniLorizar durante la ejecución del programa, etc. Hay que destacar que muchos de los menús que se describen, disponen de más o menos funcionalidades dependiendo de la acción desarrollada en cada momento. Así, el menú Debugger, cambia sustancialmente al estar ejecutándose una Depu­ración del programa. Igualmente también cambia el menú View.

El menú Project es fundamental para la realización de las aplicaciones. Desde él se comienza a crear los proyectos, se compilan, se construyen y se les añaden los ficheros necesarios para su per­fecto funcionamiento. (Figura A2.3.)

Debugger Programmer Tools Visual

Project Wizard...

New...Open...

Close ►

Set Active Project ► ;

Qtfckbuild 1

Clean i

Build All Ctrl+F10 »Make FIO fBuild Options...

Find in Project Files... >

Save Project 1Save Project As... I1Add Files to Project... )Add New File to Project... )Remove File From Project >1Select Language Toolsuite... ;<iSet Language Tool Locations... j

Version Control...iI

Figura A2.3. El menú Project.

El menú Debugger no se visualiza si no está seleccionada la herramienta MPLAB SIM, tal y como se muestra en la Figura A2.4. Esto se debe a que no tiene seleccionado la opción Select To- ol->3 MPLAB SIM. Bajo esta opción del menú se depuran los programas ejecutándolos a través de distintas herramientas como el MPLAB ICD2 o el simulador MPLAB SIM. El programa tiene la posibilidad de ejecutar paso a paso el código, poner puntos de ruptura (breakpoints), resetear la aplicación, etc. En el capítulo siguiente se analiza más detenidam ente esta herramienta.

Bajo el epígrafe 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 opción ya que utiliza un software distinto para la grabación.

En el menú Tools se puede acceder a varias herramientas muy interesantes incluidas en esta ver­sión del MPLAB IDE. Cabe destacar la herramienta Visual Initializer, que es especialmente útil de­bido a la complejidad que puede suponer configurar al dsPIC para realizar algún tipo de tarea es­pecífica. Mediante esta herramienta se configuraran los periféricos del dsPIC, desde las puertas de entradas y salidas hasta el Motor DSP con un solo clic de ratón. 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.

Page 218: DsPIC Diseño practico de aplicaciones

2 0 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Programmer Tools Visual Initializer Conl

None

1 MPLAB ICD 22 MPLAB ICE 4000

✓ 3 MPLAB SIM

I Select Tool DClear Memory

Run F9AnimateHalt F5Step Into F7Step Over F8Step OutReset ►

Breakpoints... F2

StopWatch

Stimulus Controller ►

SCL Generator ►

Profile ►

Refresh PM

Settings...

Figura A2.4. El menú Debugger con el Simulador MPLAB SIM seleccionado.

La opción 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 opción Confi­gure bajo la pestaña HotKeys para revisar las combinaciones y asignaciones de teclas a funciones del IDE para memorizar aquellas que puedan ser de interés. (Figura A2.5.)

.■ Uecnory

m i f,~.| wnrr.-cocoM C Iooe*raenC0C6COCÍ.

UUVJ030D0 3 0 }

o ixiooaooc nrocooooO C0C03C0C jOJLUJL’J O COC03COO 3C0C03C0 O C0G03C03 3C0G03C0 u Ronixinnn oconm co o coacoeoj acuuixiuu

VPEOTVRKC13PEC2TPZCiÍPE03egrr.-:

spr«W R U I

UJL'JQ3CO

1 OCOCO 040100 « o to 0x000103i 00032 0C03CO r » s3 O W H 0C030A _Peí9-Jlc In te rc u p ít OLOJt aoDSOA ~ D « f i iu l t J n c p r r u p ;5 0CO36 OÜü.-LA ‘ t a m iC lD U ic u p tC 03031 0 3 0 :-Ci I ' c í a u lc l i i t c í t jp t7 nnme 03010».e U'JLXJí: o j u j s a j t . : n r .* r r a p r0 03010 0003 OA ~:-cXau¿C :nLn> rupt.

__________ 10 Q3C12 Q3C33JL > I la u :U n C C it '- ;p l0-xox'A_e¿\\ i'Kfcc* ] Kj* y e-;, f .

e'* ri ;v«TonComtJ( f r d n f t n ' M ' U e ' K O i - ttw tilM H to*¡HKÁBSÍQ

A SCII-rrroz t t t t t t f t f t t f t t t t t f t t f t f t t f t f t f t f

■irrcin rrrr t t t t t t t t t f t t t t t t f t t t t t t t TTTT

•vp fC ífl rrrr rrrr rrrr rrrr rrrr rrrr rrrr rrrr-•FPC33 TFTT FTFT FSTF t f f f trtr rrrr rrrr rrrr-FFC43 TFTT FTTT TTTT TFFT FTFT FTFF TFTF SFFF

irr r .y i t t t t f t t t t t t t t t t t t t t t t t t t t t t t t t t t

| m MPLAB IDE v7.30 O H ® IH* 4 Hi VVpy D*Krw pr -<yrr— ! » ! W9>*' IriH w Cvft IC WT«tow *30

D (g t í , > f t ; c3 M f | ■ d G¿ E $ I# #> £ C hednum : 0x67M t- i i » f t f f ;• 3 ] | ■- • : ^ * . * .

Figura A2.5. Distintas ventanas del MPLAB IDE.*

En cuanto a las ventanas disponibles dentro del IDE, cabe destacar las numeradas en la Figura A2.5.:

Page 219: DsPIC Diseño practico de aplicaciones

APLICACIÓN 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 también alterar su valor.Ventana de inspecciones. Gestiona los registros y variables a monitorizar durante la ejecución del

4. Editor de código con resaltado de sintaxis.5. Ventana de resultados o salida. Muestra los resultados de la compilación y ensamblado de los pro­

gramas, mensa/es de salida del simulador, etcétera.6. Memoria del programa. Permite examinar la memoria de código con el programa que se esté

trabajando.7. Visualtiación de la EEPROM. Permite observar y modificar ios datos a grabar en la EEPROM del

dsPIC. .8. Gráfico de la memoria utilizada, tanto la de programa como la de datos.

A 2.4. PRIMER PROYECTO EN ENSAMBLADOR

Se aborda a continuación un primer proyecto para dsPIC. En primer lugar se debe elegir el modelo de dsPIC a utilizar ya que dependiendo del elegido, variarán las características. 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 matemáticas para las cuales cualquier modelo de dsPIC sirve. Sin embargo, para usar el mismo en todas las prácticas 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 continuación con gran precisión, ya que de lo contrario puede resultar complicado llegar a compi­lar el proyecto.

Tras iniciar el MPLAB IDE, mediante la opción Project -> Project Wizard se iniciará un asis­tente que guiará al autor en la tarea de creación de su proyecto.

Tras pulsar el bolón Siguiente en la primera pantalla del asistente se elige el modelo que en este caso es el dsPIC30F4013. A continuación pulsamos el botón Siguiente. (Figura A2.6.)

P roject W izard

Step One:Select a devee

Dcvicc:

Cótfés | | Siguiente > | j Cancelar j [ Ayuda

Figura A2.6. Selección del tipo de dsPIC..

Page 220: DsPIC Diseño practico de aplicaciones

2 0 2 dsPIC. DISEÑO PRÁCTICO 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 selección u otra. En primer lugar, se detalla la creación de un proyecto en ensamblador y, más tarde, el mismo proyecto será desarrollado en el lenguaje C.

Sólo la primera vez que se accede al menú Project Wizard se debe configurar la herramienta a utilizar e indicar dónde se encuentran los programas necesarios. Para ello, en la lista desplegablc Ac­tive Toolsuit debe seleccionarse Microchip ASM 30 Toolsuile, caso de querer desarrollar el proyec­to en ensamblador. Al hacerlo, se observará cómo 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 ubicación de los mismos. Es necesario indicar al MPLAB IDE dónde se encuentran dichas aplicaciones. Para ello, seleccionando cada una de estas 3 líneas y mediante el botón Browse se eligen las rutas adecuadas según la tabla siguiente.

Línea UbicaciónMPLAB ASM30 Assembler C:\Archivos de programaNMicrochipYMPLAB ASM30 Suitc\bin\pic3Q-as.exe

MPLAB I.INK30 Object l inker C:\Archivos de programa\Microchip\MPLAB ASM30 Suite\bin\pic30-ld.exe

LIB30 Archiver C:\Archivos de programa\Microchip\MPLAB ASM30 Suite\bin\pic30-ar.exe

Tras finalizar este paso, debería obtenerse un resultado como el de la Figura A2.7. Luego, me­diante el botón Siguiente se accede a la siguiente pantalla del asistente.

Pro jec t Wizard

Step Two:Select 3 language todsufce

Active T oolsuite- ¡ Microchip ASM30 T ooteuite

T oolaiit© Coûtant»

MPLAB ASM30 Assembler (pc30-es.exfc|MPLAB LINK.30 Obsct Lnker (pic30-ldexe) LIB3Û Axchivcr fpc30 ar.exe)

Location

iCM rch ivos deprograma^MicrocKp'.MFLAB ASW3ÚSuite'vbn\p¿c30-as | Browse...

Help! My Suite Isn’t Listed! □ Show all installed toolsuites

< Atrás S igu ie re > C aie ëat Ayuda

Figura A2.7. Selección del lenguaje a utilizar.

Seleccionado el lenguaje de programación, se debe dotar de un nombre al proyecto y elegir la ubicación donde almacenar el mismo. En este ejemplo, se llamará suma al proyecto y se guarda­rá en el lugar que se desee del disco duro (es recomendable crear una carpeta específica para este proyecto). Una vez nombrado el proyecto y seleccionada la carpeta se avanza mediante el botón Siguiente. (Figura A2.8.)

Page 221: DsPIC Diseño practico de aplicaciones

APLICACIÓN 2: EL ENTORNO DE DESARROLLO MPI.AB IDF 203

P roject W ¡¿ai d

Step íhiee:Nameyour pioject

Project Name

Prcject Direcícxy i

: !C:\e;emplos\suma

{ <Atrás [[ Siguente> ;] ( Caricela' | [ Ayudo

Figura A2.8. Asignando nombre y ubicación al proyecto.

En la siguiente pantalla se seleccionan los ficheros a incluir en el proyecto. Para facilitar la ta­rca de la inicial i zación y preparación del proyecto, el MPLAB ASM30 Suite, dispone de varios fi­cheros que al incluirlos en el proyecto permiten trabajar con nombres simbólicos, e indican al lin- ker cuál es la organización de la memoria del dispositivo en cuestión, genera rutinas automáticas de reset, etc. Estos ficheros a añadir, son los siguientes:

Ficheros a añadir a nuestro proyecto

C.:\Archivos de programa\Microchip\MPLAB ASM30 Suite\lib\Crl().s

C:\Archivos de programa\Microchip\MPLAH ASM30 Suite\lib\Crt1 .$

C:\Archivos de programa\M¡crodiip\MPLAB ASM30 Suite\$uppori\gid\p30f4013.gld

j C:\Archivos de programaXMicrochipXMPLAB ASM30 Su¡te\supporí\mc\p30f4013.inc

Si se desea profundizar en el contenido de estos ficheros se editan y se lee el código que se en­cuentra dentro de los mismos para conocer su contenido. Los dos últimos archivos variarán en fun­ción del modelo de dsPIC empicado. En caso de usar dsPIC3()F2011, se deberán seleccionar los ar­chivos p30f2011 .gld y p30f2011 .inc, respectivamente.

Resulta muy interesante, que no necesario, marcar con un tic estos 4 ficheros añadidos. Al mar­carlos con el tic, estos ficheros se copiarán en la carpeta de destino señalada 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 añadidos los 4 ficheros y marcados con el tic correspondiente se accede a la siguiente ventana del asistente mediante el botón Siguiente.(Figura A2.9.)

*■ El asistente presentará un resumen de los pasos dados y al pulsar el botón Finalizar se cerrará accediendo al proyecto.

Puede observarse en la ventana del proyecto la inclusión de los dos ficheros crtO.s y crtl.s. Se deben modificar ambos ficheros, pulsando doble clic sobre ellos y cambiar las siguientes líneas, de forma que el modelo de dsPIC pase de ser el dsPIC30F2010 a ser el dsPIC30F4013.

Page 222: DsPIC Diseño practico de aplicaciones

2 0 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

P roject W izard

Slep Foui:Add ary ewstirvg liles to your piopct

g) p30í3010.hc í3ig) p30f3tm.ncÜ) p30f3012.ncd i p30(3013.ricg ) p30f3014.inc &g) p30f4011.inc

• g ) P3Qí4012inc

i ) p30f4013.inc: g) P30f5011.ine

g) p30f50l3 inc

p30f5015.inc. flh p30f5016.inc

m \

A d d »

Remove

0 p30M013 ine I C:\ArcKvos de po 0 p30f4013. gld I C:\Archivos de pro

0 crtO s I C:\ejemptos\surrw\crtO $

B ic rtl.* ! C:Vejempk»\$uma\crtl. s

21 ACheck the box lo copy Iba fíe lo the projecí dkectory. Cick the fitename le edrt the ñame o! Ihe local copy.

< Atrás |t Siguiente > j [ Cancelar ] [ Ayuda

Figura A2.9. Añadiendo los ficheros necesarios al proyecto.

Es decir, se deben cambiar las líneas

equ —30F2010, 1 .include "p30f2010.inc"

por las siguientes

.equ__30F4Ü13, i

.include Mp30f4013.inc"

y a continuación guardar ambos ficheros. También es necesario indicar al entorno, el directorio de los ficheros include. Para ello, a través del menú Project -> Build Options -> Project, y dentro de la pes­taña General, en el cuadro Include Path,($INCDIR): se debe pulsar el botón Browse y elegir la ruta C:\Anchivos de programa\Microchip\MPLAB ASM30 Suite\SupporAinc\ La base para empezar el proyecto ya está creada. Para empezar a escribir este primer programa, la opción 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 código. 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 (nótese que se debe indicar la extensión del archivo). Al teclear el código del programa los distintos elementos del mismo tomarán distintos colores en función de sus características.

El listado de este primer programa es el siguiente:

; Programa Ejemplo 1 .s; Creación de números impares

Page 223: DsPIC Diseño practico de aplicaciones

APLICACIÓN 2: EL ENTORNO DE DESARROLLO MPLAÍ3 IDE 205

.text ¿Inicio, del código de programa_rnain: ;Etiqueta de inicio de programa

mov #0x0001, WO ¡Movemos un literal a W0

mov #0x0002,W í ;Movemos un 2 al registro W1iejamos

Listado A2.1. Programa suma en ensamblador.

Si se compilara el programa mediante la opción Project -> B u ild A ll , el compilador informaría 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.Osar.:Oeieieclila 'G.\Ejemplo$\8uma\cri0.o".Gear,: Delelec: lila ,G.'\Ejemplos\sut,na\cm o".Osan: Deleietilils ,C:\ejemp!os\sume\suma.o,Clean: Deleletí lile 'sume.cof.Ce an: Delded filo ’sume.hex'Cíe an: Dore.Executing: "C\*«5hivo3 de pragromoVvlicrGchipvMPLAB C3G\bin\pic30-es.exe" •p-30F?0’.0 'oíO s" -orcrtO o" -g Executing: "C\Archivos de p ro g ra 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:\Ejempl0S\Sum8\crt G: NEjeapios;'--surr.a''.crfcO o ( ¡Libc+Oxc) G ./E je :» .p .lo S '''su n a/p 3 0 f2010 i n c u n d e f in e d jreríe re r .e e t o n a in G: \E je» p lo s-\su :» .a 'v c rtO o ( . l ib c + 0 :o ) ^ /E je a p lo s / s u n o /p S U tS U lO t n c u n d e f in e d r e f e r e n c e t.o « a in G. S E jtsup lo& N suxaN crtl . o ( . i ib c + 0 x l4 ) :G: / E j e s r .p l o s / s u n a / c r t l . s . u n d ef in e d r e f e r e n c e t o ' n a a n 'G: \E je n p lo s 'v s i i t tn \ c r t l o ( i ib c + Q x l6 ) :G : /E je w .p lo e / s u n a /c x ti . s : u n d e f in e d r e f e r e n c e t o 'm a in 'DÜILD FAILED: Sun Oct 02 1 231 002005

Figura A2.10. Resultado de la compilación del proyecto.

La última frase, BUILD FAILED, indica que la compilación ha fallado. Las 4 filas anteriores in­dican el error: undefined referente to ‘m ain \ es decir, que no existe una referencia a main. Main 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 guión bajo que hay delante de main, sino que no se ha añadido el fichero fuente al proyecto. Al observar la ventana de proyec­to, veáse la Figura A 2.11, allí no aparece por ningún lado el fichero suma.s.

suma.mcw

su m a .m c p

GE¡ Source Files

crtO.s

1 - c r t l . s ¡E Header Files

p30f4013.inc

\— Object Files

i Library Files

È Linker Scripts

p30f4013.gld : Other Files

Figura A 2.11. Ventana del proyecto sin incluir el fichero suma.s.

Page 224: DsPIC Diseño practico de aplicaciones

2 0 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Para solucionar el error basta con añadir 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 compilación.

fc¡ suma.mcp¡p-Source Ries

erto .5 •erti .s

à Header Filesp30f40l3.inc

Cbjcct Fies Library Files

© L inker Scriptsp30f4013.gld

O h n r Filft•«

Figura A2A 3 .Inclusión del fichero suma.s en nuestro proyecto.

En la última línea de la Figura A2.12 puede observarse que el resultado de la compilación 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; Creación de números

Las 2 primeras líneas 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 cuál es la lógica del mismo.

Observe como se pueden dejar todas las líneas que se desee en blanco y colocar comentarios en cualquier posición de la línea. Todo el texto de una línea a partir del signo punto y coma es ignora­do por el compilador. Así si se deseara poner un comentario que ocupe más de una línea se debería incluir el signo punto y coma en cada una de las líneas.

Page 225: DsPIC Diseño practico de aplicaciones

APLICACIÓN 2: EL ENTORNO DE DESARROLLO MPLAB IDE 2 07

La siguiente línea, se corresponde con una directiva. Una directiva no es una instrucción propia del dsPIC, sino una instrucción 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.

. . . ■ ■ o >• ,.text ;Imcio del codigo de programa

La directiva .text indica que a continuación se va a escribir la parte del programa correspondiente al código principal. El programa podría incluir datos, y para que él compilador distinga si lo que vie­ne a continuación son datos u otro tipo de información, se usa la directiva .text.

• ■ ■ ? ........mam: ;Eticjucta d(m cic> de pirograma V

Esta es la etiqueta de inicio de programa, la siguiente instrucción será la primera que ejecute el controlador tras atender la rutina de Reset.

MOV #0x000í,WG ¿Movemos un literal a W0

La primera instrucción mueve el literal #0x0001 al registro general W0. Para indicar que se tra­ta de una constante, se coloca el símbolo almohadilla # delante del número a escribir. Ox significa que el número está representado en hexadecimal y el valor 0001 representa la constante en hexade- cimal. La instrucción MOV mueve el primer operando (fuente) al segundo operando (destino).

Es conveniente familiarizarse con la expresión de números en formato hexadecimal ya que al tra­bajar con registros y datos de 16 bits, el formato hexadecimal resulta muy cómodo. En la mayoría de los ejemplos utilizados se utilizará esta base numérica.

• . . .a- . ..........-...... ....suma2:

Esta es otra etiqueta a la cual el programa salta frecuentemente. Una etiqueta debe terminar siem­pre con el signo de puntuación dos puntos (:) y no debe coincidir con ninguna palabra reservada del compilador.

MOV #0x0002.WI ;Movemos un 2 al registro W JADD W0,W 1 ,W0 ;sumamos el registro W0 y W 1 y dejamos

;el resultado en W0

A continuación 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 instrucción 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.

Page 226: DsPIC Diseño practico de aplicaciones

2 0 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Tras realizar la suma, con la instrucción GOTO la ejecución del programa salta hasta la etique­ta señalada 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 primer lugar mueve un 1 al registro WO, después mueve

un 2 al registro W1 y los suma dejando el resultado (3) en el registro WO. Después 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 números impares en el registro WO desde el nú­mero 1 hasta ¿cuál? Los registros tienen una capacidad de almacenamiento de 16 bits, luego el nú­mero mayor que pueden alcanzar es el número #0xFFFF. Y ¿qué pasará al sumar 2 a este número? El resultado en WO será #0x0001. Se produce un acarreo y como el resultado debería ser el #0x10001 que requiere de 17 bits y el registro WO tan sólo tiene 16, el resultado queda truncado y en el registro sólo nos queda el valor #0x0001. ¿Cómo se puede saber si se ha producido acarreo? Para saber si se ha producido esta circunstancia de desbordamiento hay que examinar un bit, lla­mado de acarreo, situado en el Registro de Estado (SR). Para poder analizar este fenómeno y ver cómo se ejecuta el programa, en el próximo capítulo se simulará la ejecución de este programa gra­cias a la herramienta MPLAB SiM.

Resumen:

Los siguientes pasos resumen el proceso necesario para la creación y compilación de un proyecto:

1. Crear el proyecto mediante menú Project-> Project Wizard...2. Siguiente3. Seleccionar el modelo dsP!C30F4013 y pulsar Siguiente4. 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 ubicación.6. Añadir los siguientes ficheros a la lista de ficheros del proyecto:

Ficheros a añadir a nuestro proyecto

C:\Archivos de programa\Microchip\MPI.AB ASM30 $uite\l¡h\Crl0.s

C:\Archivos de programa\Microch¡p\MPLAB ASM30 Su¡te\lib\Crt1.s

C:\Archivos de programa\Microch¡p\MPI.AB ASM30 Suite\support\gld\p30f4013.gld

C:\Archivos de programa\M¡crochip\MPLAB ASM30 Su¡te\support\inc\p30f4013.inc

Page 227: DsPIC Diseño practico de aplicaciones

APLICACIÓN 2: EL ENTORNO DE DESARROLLO MPLAB IDE 2 0 9

Marcar estos ficheros con un tic para que se copien en la carpeta del proyecto. (En función del ds- fW a utilizar se elige un fichero correspondiente al modelo usado: p30f4013.gld y p30f4013.inc.)

7. Finalizar él asistente8. Modificar los ficheros CrtO.s yC rtl.s con el modelo de dsPIC elegido9. Indicar al entorno, el directorio de los ficheros include. Para ello, en el menú Project -> Build Op-

tions -> Project, y dentro de la pestaña General, en el cuadro Include Path,($INCDIR): pulsar el bo­tón 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 (nótese que se debe especificar la extensión .s del archivo)

10. Añadir dicho fichero al proyecto a través de la opción 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 ensamblador permite el uso de mayúsculas y minúsculas, 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 simbólicos de registros o bits hay que ser fieles a los listados que se proponen.

A2.5. PRIMER PROYECTO EN LENGUAJE C

Una vez visto cómo 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 visión distinta y permitirle seleccionar el lenguaje que mejor se adapte a sus necesidades.

La familia dsPIC ha sido optimizada para la ejecución de programas desarrollados en len­guaje C. Una buena programación en lenguaje ensamblador siempre será más óptima que en len­guaje C en cuanto a tamaño de código y tiempo de ejecución. El lenguaje C tiene la ventaja de ser un lenguaje más fácil de aprender y utilizar proporcionando mayor rendimiento en la programación.

Al igual que en el programa en ensamblador, el primer 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. Para crear el proyecto acceder al menú Project-> Project Wizard...2. Pulsar Siguiente ■':■■ ■3. Seleccionar el modelo dsPIC30F4013 y pulsar Siguiente4. 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

Page 228: DsPIC Diseño practico de aplicaciones

2 1 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

5. Dar nombre al proyecto, sumac, y elegir ubicación6,. Añadir 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 función del dsPIC a utilizar; seleccionar un fichero distinto correspondiente al modelo en cuestión.)

7. Finalizar el asistente.

8. Mediante al menú Project-> Build options -> Project, y en la pestaña General, seleccionar el direc­torioG:\Archivos de programa\Microchip\MPLAB C30\lib\ a través del botón Browse de la sección Library Path. Nótese 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 librerías

9. Crear un fichero desde el menú File-> New y guardarlo en la carpeta del proyecto con el nombre de sumac. c (nótese que se debe especificar la extensión .c del archivo)

10. Añadir dicho fichero al proyecto a través de la opción 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 compilación o linkado que crea­rán más 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 cp0 Source Files ¡ sumac. c

Header Files Object Files

Library Files É3 Linker Scripts ! L~ p30f4013.gld

•• Other Files

Figura A2.14. Estado del primer proyecto en lenguaje C.

A continuación se detalla el código fuente correspondiente al programa en sí, mostrado en el Lis­tado A2.2. Luego, mediante la opción del menú Project-> Build All, deberá compilarse el proyecto.

7' i---..-- '.. . •• • ■ '

// Programa Ejemplo 1 .c

#include "p30f4013.h"

int main(void) íWREGO = 1; w hile(l) í

•C -K w X « v

.'.•.V íV/AV .'

Listado A2.2. Programa sumac en lenguaje C (Continúa)

Page 229: DsPIC Diseño practico de aplicaciones

APLICACIÓN 2: EL ENTORNO DE DESARROLLO MPLAB IDE 211

WREGO}

roturn 0;í ¡Y ¡ í ■ ’ ■ i'V.-i V . r r * w - - o -

c^ffíñíía::- " U S t l >*

Listado A2.2. Programa sumac en lenguaje C (Continuación)

Siguiendo los pasos correctamente deberá obtener un BUILD SUCCEEDED tras construir el pro­yecto. También deberá aparecer un mensaje de alerta o waming , advirtiendo de que el uso de los regis­tros en lenguaje C como WREGO no es conveniente. Efectivamente, no lo es, ya que es más recomen­dable hacer uso de variables al igual que se hace normalmente en este lenguaje. Aún así, y para hacer el programa lo más 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 .cVi.XtTO: TOXO.ttO.

En esta ocasión el comentario viene precedido por//. Este comentario es un comentario de línea. Es decir, que todo lo que esté escrito tras estos símbolos y en la misma línea será ignorado por el compilador. Si desea escribir comentarios de más de una línea incluya al principio del comentario los símbolos /* y al final del mismo */. Por ejemplo:

P Este es un coi: de mas de una

nentario

línea */HaSfl8S688S8BBwSw88ro^

La siguiente línea 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 inclusión de este fichero permite entre otras cosas trabajar con símbolos en vez de con posi­ciones de memoria absolutas, etc.

int main(void)x'i;

í<

Todos los programas en C empiezan con la función main. La palabra reservada int significa que la función main devolverá un valor entero. Y la palabra reservada void significa que la función main no recibe ningún parámetro para su ejecución.

A continuación comienza un segmento de código y dichos segmentos de código siempre deben estar entre llaves {}.

Page 230: DsPIC Diseño practico de aplicaciones

2 1 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

WREGO = 1;

Es una instrucción de asignación. 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 condición que acompaña a la palabra reservada while entre pa­réntesis. Verdadera es toda condición cuyo resultado no sea cero. Luego al poner un 1, esa condi­ción 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 asignación que hace que el registro WREGO adquiera el valor de la suma de los valo­res contenidos en el registro WREGO más un 2.

Así, y al igual que en el ejemplo en ensamblador, el programa va asignando al registro WREGO números impares a base de ir sumando 2 al número impar inicial 1.

re tu rn 0;

Hay que devolver un valor del mismo tipo que la función. Es decir, se debe devolver un valor en­tero. Normalmente la devolución del número 0 indica que todo ha progresado de forma correcta. Por eso, y a pesar de saber que el programa no alcanzará nunca esta instrucción siempre deberemos co­locar esta instrucción en los programas en C.

De haber conseguido una ejecución correcta, seguramente se querrá comprobar que el programa funciona y hace lo previsto. Realice los ejercicios de autoevaluación y pase al siguiente capítulo donde podrá simular su ejecución mediante el MPLAB S1M, una herramienta muy útil a la hora de depurar y probar programas antes de implementar el hardware.

AUTOEVALUACIÓN

Conceptos clave de este capítulo

X v v w > * S

1.v X ’X*X*X* X-X X X*X\ *X-‘* X-X*X*X*X-X X'*X*X ' .¿Qué ficheros son necesarios para todo proyecto escrito en ensamblador?

2 ¿Para qué sirven los ficheros añadidos a un proyecto en C? ■ ■ :’y3. ¿Qué hace la instrucción ADD W0,W1,W0?

i ¿Cuál es la etiqueta de inicio de programa en ensamblador? . :• 5 i Í

5.S v w S f S r a/X yI\< vX *

¿Dónde se encuentra la rutina de Reset de nuestros programas? Iv X v X ;

Page 231: DsPIC Diseño practico de aplicaciones

APLICACIÓN 2: EL ENTORNO DE DESARROLLO MPLAB IDE 2 1 3

Ejercicios

• Al programar Ejemplo hs, el primer programa en ensamblador, no está del todo optimizado. Es cier­to que el programa va generando números impares en el registro WO, pero se puede hacer de una forma más óptima. Más rápida.

• Una pista: existe una instrucción que se ejecuta muchas veces y que no es necesario que se eje-cute tantas.

¿Cuál de los dos lenguajes le ha parecido más interesante? ¿Cuál de los dos se adapta mejor a sus necesidades? A lo largo de los siguientes capítulos trataremos de proponer más ejemplos en los dos lenguajes para que pueda elegir con mayor criterio el lenguaje más adecuado para sus necesidades.

Page 232: DsPIC Diseño practico de aplicaciones
Page 233: DsPIC Diseño practico de aplicaciones

A3.1. IN T R O D U C C IÓ N

En la aplicación 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, ejecutándolos paso a paso, de forma continua, observando cómo cambian las variables y las posiciones de memoria, además de seguir profundizando en la programación de los dsPIC.

A3.2. S IM U LA N D O EL PRIMER PROGRAM A EN ENSAM BLADOR

El primer paso será cargar el proyecto anterior desarrollado en lenguaje ensamblador mediante la opción 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 código fuente. (Figura A3.1.)

IH jOC Séf* V'dfC’. UOfJpr A* «SMmQ 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

Page 234: DsPIC Diseño practico de aplicaciones

2 1 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Para simular este ejemplo existen varias opciones. La primera, y la más sencilla, es simular­lo en el ordenador haciendo uso de una herram ienta integrada en el MPLAB IDE, denominada MPLAB SIM. Otra opción sería grabar en un dsPIC el programa y depurarlo sobre circuito me­diante otras herramientas de la empresa M icrochip, como el MPLAB ICD2. Puede ser intere­sante el uso de esta herramienta en proyectos complejos, donde los problemas con el hardware así lo requieran, pero para los ejemplos didácticos el simulador MPLAB SIM es una herramien­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.)

Programmer Tools Configure Window

None ► 1 MPLAB ICD 2

2 MPLAB ICE 4000 ✓ 3 MPLAB 5IM

4 MPLAB ICE 2000 tfíTfi n n i 9 A F'

Figura A3.2. Selección de la herramienta MPLAB SIM.

En la Figura A3.2. puede observarse cómo el menú Debugger varía sus opciones al seleccionar el MPLAB SIM. Ahora dispone de nuevas opciones Run, Anímate, Step Into, Step Oven etc., quepermiten hacer uso del depurador de programa para ejecutar código paso a paso, animarlo, poner puntos de ruptura, etc.

El siguiente paso consiste en que el simulador ejecute una instrucción. Para ello la herra­mienta dispone del menú Debugger -> Step Into. Al seleccionarlo, es posible que el programa muestre un mensaje indicando que el proyecto debe compilarse por no estar al día (The Project is out o f date. Would you like lo build it now?). En tal caso pulsando Aceptar el proyecto se com pilará de nuevo. Pulsando de nuevo D ebugger -> Step In to ... ¡no aparecerá nada en pantalla!

Efectivamente, no se observa ningún cambio en pantalla, pero el programa se está ejecutando. ¿Que es lo que pasa? Debería apreciarse cómo el ordenador señala la instrucción 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 añadidos 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 añadido al proyecto. Más concretamente, está ejecutándose la ru­tina de Reset. Luego, la primera instrucción que se ejecuta no es la primera instrucción 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­ción Reset -> Processor Reset. Luego, se procede a visualizar la memoria de programa mediante el menú View ->Program Memory.

'Select ToolClear Memory

Run F9AnimateHalt F5

Debugger

Page 235: DsPIC Diseño practico de aplicaciones

APLICACIÓN .3: PONIENDO EN MARCHA EL SIMULADOR 2 1 7

Program Memory

Line ; Address Opcode Labei Disassembly

00000

000020000400006000080000À

Q4QÌ00 000000 0001A8 0001A8 0001A8 0001À8

goto _ceset nop_DefaultInterrupt _De£aultInterrupt _Defau.Lt Interrupt DefaultInterrupt

;<■; ; ________ _________________Opcoce Hex | Machine ||' Symbo'lic 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 información de distintas formas. Quizás la más apropiada para seguir el ejemplo sea la que adopta la ventana por defecto, llamada Symbolic.

En la columna Dissasembly se puede observar la primera instrucción del programa: goto reset. Por eso lo primero que hace el programa es atender la rutina de Reset. También puede observarse una flecha en la parte derecha de la misma figura. Esa flecha indica cuál es la próxima instrucción que va a ejecutar el simulador. Ahora sí, al pulsar Debugger -> Step Into, se aprecia cómo la flecha se va desplazando por la memoria de programa.

Puede resultar interesante intentar descifrar lo que va haciendo el programa. Obsérvese que el programa pasa por una rutina de inicialización de datos, llamada _data_init, y cómo se ejecutan otras instrucciones hasta que llega a la primera instrucción del fichero suma.s. ¿Cómo sabremos que ya ha llegado esa primera línea 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 exploración de la memoria del pro­grama, aparecerá la etiqueta niain. (Figura A3.4.)

204 00196 000000 nop205 00198 DA4000 ReservedBR206 0019À FE0000 r e s e t207 0019C 200010 m a in m ov.w # 0 x 1 ,wO208 0019E 200021 suma 2 m ov.w # 0 x 2 ,w l209 001A0 400001 ad d .w wO ,w l,wO

.O pcode Hex M achine | Symbolic PSV Mixed PSV Data

Figura A3.4. Encontrando el inicio de nuestro programa,

A3.2.2. Estableciendo puntos de ruptura y ventanas de inspección

Otra opción, mucho más cómoda y sencilla, es utilizar un punto de ruptura para saltar todas las ins­trucciones anteriores. Sin necesidad de abrir la ventana de exploración del programa, se crea un punto de ruptura en la primera instrucción mov del fichero suma.s. Para crear dicho punto de rup­tura, basta con hacer doble clic con el ratón en la parte izquierda de la línea de código donde se de­see que se pare el programa (en la Figura A3.5 dicha posición está marcada con una letra B). Al

Page 236: DsPIC Diseño practico de aplicaciones

2 1 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

hacerlo, aparecerá una B en dicha línea, que indicará que en esa línea existe un Breakpoint o pun­to de parada. Para quitarlo puede volver a hacer doble clic con el ratón en ese punto y desaparece­rá la B y el punto de parada.

; C r e a c ió n d e n ú a e r o i i n p a r e r

. g l o b a l _ J t a in

- t - e x c

m a in :

r i o v # 0 * 0 0 0 1 ,W 0 ;M o v c íio s u n u n o a M0

svmaZ:n o v # 0 x 0 0 0 2 , K 1 ;M o v e 3 c o s u n 2 a l r e ç i s c r o ü l

a d d T0O ,¥1 ,M O ;s u in a a io s « 1 r e s i s t r o W0 y V I y d e j& m c s

; e l r e s u l t a d o « & VO y o t o s u m a Z ; R é p e c l ia o s e l b u c l e s u n & 2

. e n d

Figura A3.5. Añadiendo un punto de parada en el programa.

A continuación, tras provocar de nuevo un Reset (Debugger -> Reset -> Processor Reset), en vez de pulsar Debugger-> Step Into, que ejecuta una sola instrucción, se accede al menú Debugger ->Run. Mediante esta opción, el programa se ejecuta y rápidamente aparece la flecha encima del punto de parada marcado por B, lo que significa que se ha ejecutado todo el código inicial hasta esa linca.

El contador del programa se encuentra apuntando a la primera dirección del código. Para comprender los resultados de la ejecución del código se debe poder observar ios valores de los registros WO y W l. La ventana Walch del menú View permitirá añadir cuantos elementos se deseen monitor i zar.

f. . . . . . . — -

■ I W atch Ê Ü BAdd SFR) ÍACCA _ v ; [ Add Symbol) j __ SP v j

A d d re s s S ym b o l Mame V a lu e

| Watch 1 Watch 2 Watch 3 j Watch 4 j

Figura A3.6. Ventana de inspección de valores Watch.

Desde la ventana de la Figura A3.6, se añadirán 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 botón Add SFR se selecciona el registro WREG0 y a continuación pulsando el botón Add SFR, se añade dicho registro a la ventana de inspección. Se repite este proceso con el registro WREGJ, de forma que la ventana Watch quede como la de la Figura A3.7.

Page 237: DsPIC Diseño practico de aplicaciones

APLICACIÓN 3: PONIENDO EN MARCHA EL SIMULADOR 21 9

■ Watch i

Add SFRj jWREGI V:j (AddSymbol]ESP mA d d re s s S ym b o l Name V a lu e i

00000002

WREGOWREG1

0 x0 0 000 x0 0 00

' r i

| j Watch 1 Watch 2 j Watch 3 1 Watch 4 ¡

Figura A3.7. Ventana de inspección con los registros WRECO y WREC1.

Al ejecutar el programa paso a paso se conocerán 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 ejecución de la instrucción

que mueve el valor 1 a W0. Además aparecerá en rojo para indicar que acaba de ser modificado di­cho valor.

A3.2.3. Resolviendo el e je rc ic io del tem a an te rio r

Al pulsar de nuevo F7 se observa cómo WREG1 toma el valor 0x0002 correspondiente a la ins­trucción

y al pulsar F7 WREGO toma el valor 3, resultado de sumar WREGO y WREG1.Pulsando F7 el programa vuelve a la instrucción de carga del registro WREG1.Al ejecutar esta instrucción de nuevo, se vuelve a mover un 2 a W l, que ya tenía un 2. Luego es­

ta instrucción no es muy interesante que esté aquí. Se está repitiendo esta instrucción constante­mente cuando no es necesaria. Si recuerda, en el tema anterior se proponía como ejercicio mejorar el programa. Esa mejora se refería a esta cuestión. El programa sería más óptimo si se colocara es­ta instrucción antes de la etiqueta suma2. Puede observarlo en el Listado A4.1.

Page 238: DsPIC Diseño practico de aplicaciones

2 2 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

\.t« « » * » 4. 1 , ' . ' . l ;•;

; Programa Ejemplo l.s ; Creación de números 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

ill

• • : ••

•I'XÍOX.

Ü ¿ pW&f:

Listado A4.1. O ptim ización del prim er programa.

Si se sigue pulsando la tecla F7 se aprecia cómo el programa no tiene fin y como el registro WREG1 no varía nunca, manteniendo siempre el valor 2 y, sin embargo, WREGI va tomando los valores de los números 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. Simúlelo en pantalla observando cuál es la primera instrucción que se ejecuta, añada un punto de parada e inspeccione los valores que va adquiriendo WREG0.

A3.3. CARACTERÍSTICAS DEL SIMULADOR

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 primer ejemplo, se estudió el problema del acarreo por desbordamiento en la suma, que se producía 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 situación. La primera, y la peor, sería pulsar F7 hasta que el registro WREGO tenga el valor OxFFFF y después hacer la suma y observar el bit de acarreo.

Una de las características que tiene el simulador es que permite cambiar ciertos valores de re­gistros, posiciones de memoria, etc. Así, la segunda opción para mostrar cómo entra en acción al bit de acarreo es cambiar 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 opción se encuentra disponible en la ventana View -> 10 Special Function Re giste rs, representada en la Figura A3.8.

En primer lugar se debe reiniciar el programa mediante la opción del menú Debugger -> Reset -> Processor Reset. A continuación, pulsando F9 se consigue que el programa llegue hasta el pun-

Page 239: DsPIC Diseño practico de aplicaciones

APLICACIÓN 3: PONIENDO EN MARCHA EL SIMULADOR 221

Special Fu nctio n Registers

Address s SFR Name Hex

□ P E *

0000 MR EGO 0000 00002 WREG1 0000 0 i0004 WREG2_____ 0000 0

0003 VJREG4 0000 0000A UREG5 0000 0oooc UREG6 0000 0nnnv TTDlTf'V? nnnn n

lo 1 ensarnb lado i\crtO c 3I0 1 ens& m b lado r\c rt1 c d Io 1 ensam b lador\sum ¡

Figura A3.8. Inspección 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 hexade- cimal 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 eg is te rs y g jsj JLclclress V 1 SFR Karre i » e x 1 D e c im a i | ••'S

0 0 0 0 ÍÍREGO F T 7T

1 ■SP.EG l . .__ [_oooo M 3S5BHEBBHBI■ H 3 B H0 0 0 4 WRSG2 0 0 0 0 00 0 0 6 0 0 0 0 00 0 0 8 »RZ04 0 0 0 0 0n o n j u»sr.«; nnnn n

Figura A3.9. Modificando el valor de WREGO.

Ahora, sí se ha alcanzado la situación necesaria para observar el fenómeno de la generación del acarreo. El cursor verde que indica la próxima instrucción a ejecutar debe estar sobre la instrucción 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.)

■ Spécfol hifttrlnn Rogitlerc

Adeleca» \' 1 SFR Kerne j Esx ! D ec im al ¡0342 SR 0101 2S"OZi-i CORCCtt "020 n

003 S sodcccc CODO S0D48 XBOÖCRT :aoo cOD9A XKAD2XD :o o i

Figura A3.10.E/ registro SR muestra que se ha producido acarreo.

A3.3 .1. C onfigurando el s im u lador y contando el tiem po

En muchas ocasiones, interesa saber cuánto tiempo tarda en realizar ciertas operaciones el dsPIC. Naturalmente, eso depende de la configuración del circuito del reloj. Para analizar estas y otras características el simulador dispone en el menú Debugger -> Settings... de varias opciones de configuración.

Page 240: DsPIC Diseño practico de aplicaciones

2 2 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Simulator Settings

Uartl 10 > Animation Ì Reaftima Updates jj Limitations

Break Options | SCL OptionsOse/Trace

Processor Frequency' Units: —

® MHz O KHz

O Hzmi

Trace Options

□ Trace All f~ l B reak on Trace Buffer Full

} Aceptar j | Cancelar Aplicar

Figura A3.11. Configuración del simulador.

Mediante el cuadro de diálogo representado en la Figura A3.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 también permite controlar el tiempo transcurrido en la ejecu­ción 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 número de ciclos de instrucción 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 instrucción 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 instrucción). Este ejemplo utiliza el programa suma.s modificado con la corrección descrita en el apartado anterior. Tras resetear la simulación mediante la tecla F6 (Debugger -> Re­set -> Processor reset) se debe pulsar F9 (Debugger -> Run) y al detenerse la ejecución en el pun­to de ruptura acceder a la pantalla Debugger -> Stop Watch.

S topwatch T otal S imulated

( Synch] Instruction Cycles 32 32

I Zero T,me l u S e c s J 6.400000 6.400000

Processor Frequency (MHz) 20.000000

Figura A3.12. Contando el tiempo empleado por el controlador.

En la Figura A3.12. se observa cómo el número total de ciclos de instrucción empleados para eje­cutar las rutinas de inicialización es de 32. Y el tiempo empleado, a una frecuencia de 20 MHz, ha sido de 6.4 jjs .

Page 241: DsPIC Diseño practico de aplicaciones

APLICACIÓN 3: PONIENDO EN MARCHA EL SIMULADOR 22 3

Al continuar pulsando la tecla F7 y accediendo a la ventana StopWatch, puede conocerse el tiem­po empleado y el número de ciclos de cada instrucción. ¿Podría localizar una instrucción que se eje­cute en 2 ciclos de instrucción en el programa de suma?

Ejercicio:

Confeccione un programa que genere 10 números pares. ¿Cuánto tiempo tardará en ser ejecutado el programa con un cristal de 10 MHz?

La solución dependerá del código empleado en el programa. Trate de confeccionar el programa más rápido, que utilice menos ciclos de instrucción. Una posible solución podría ser la siguiente:

.global _main

.text.main:

repeat #0x04add #0x0002,WQnop

.end

Este programa repite 5 veces la suma del contenido W0 más 2 para ir generando los 5 primeros números pares. Y tras esto coloca una instrucción nop, donde se puede establecer un brcakpoint o punto de ruptura y así medir el tiempo transcurrido hasta dicha instrucción. Se configurará el reloj del simulador mediante la opción Debugger -> Settings, de forma que la frecuencia de dicho reloj sea de 10 MHz.

Una vez establecido el punto de ruptura en la instrucción 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­trucción, 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. Muchos de los cálculos realizados en el tratamiento de señales son de carácter repetitivo, de ahí que se haya aña­dido esta nueva instrucción al repertorio de instrucciones. Podría desarrollarse el programa en C y observar si hay alguna diferencia en el tiempo de ejecución entre éste y el desarrolado en ensam­blador. Una posible solución en lenguaje C podría ser el siguiente programa:

#inc!ude "p30f4013.h"

int main(void)íin tcon t= l;int num = 0;while(cont <6)(num = 2 + num; cont+-K

Ire tu rn 0;

Page 242: DsPIC Diseño practico de aplicaciones

2 2 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

En lugar de utilizar el registro WREG, esta solución emplea variables, que es la forma más ha­bitual de programar en el lenguaje C. Naturalmente, el programa se podría depurar para hacerlo óp­timo, pero ésta es una solución típica en este lenguaje.

Los números pares se generan en la variable num. Para poder observar el valor que toma esta va­riable, se deberá hacer uso de la opción View -> Watch y seleccionar dicha variable en la lista Add symbol, y pulsar dicho botón.

Al colocar un punto de ruptura en la última instrucción del programa, se puede conocer el tiempo empleado en esta solución. Se debe cambiar la configuración 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 solución 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 forma más ami­gable, sin tener que conocer tan profundamente la arquitectura interna del controlador, obteniendo un mayor rendimiento en la fase de programación.

AUTOEVALUACIÓN

Conceptos clave de este capítu lo

1. ¿Qué depuradores soporta la herramienta MPLAB IDE?¿Dónde puede conocer las limitaciones del simulador software ?

2. ¿Qué pasa cuando se ejecuta un programa paso a paso?¿Cuándo se ejecutan las instrucciones del código fuente?

3. ¿Cómo se puede observar con el simulador el número de ciclos que tarda en ejecutarse una ins­trucción?

4. Describa las limitaciones del simulador5. ¿Mediante qué opción del menú se podría visualizar parte de la memoria de datos EEPROM?¿Po­

demos desde el MPLAB IDE escribir en ella?

Ejercicios

^^^^^^S^SSSS^BSSSBSSSSSSSSSS^BSSBStBSSBSaBSBSSBBBSSBBSSBSSSBBKaSSSBSSSSBSSSSS^ Confeccione un programa en ensamblador que contenga la instrucción ADD, MOV, GOTO y CP- SEQ. A continuación simule el programa y calcule el número de ciclos de instrucción en los que se ejecuta cada una de esas instrucciones.Confeccione un programa en lenguaje C que le permita observar cómo cambia el bit de acarreo de la palabra de estado.

Page 243: DsPIC Diseño practico de aplicaciones

APLICACIÓN

Manejando las instrucciones típicas de los dsPIC

- -

A4.1. INTRODUCCIÓN

En este terna se proponen diversos ejemplos de aplicación que se simulan con el MPLAB SIM y que contienen instrucciones específicas 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 básicos 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 ejecución del programa saltando a la dirección que se indique, es el caso de GOTO Etiqueta, BRA Etiqueta y CALL Etiqueta.

Las instrucciones de salto condicional evalúan una condición y, en función del resultado de la misma, actúan de una forma u otra, es decir, saltan o no saltan.

La instrucción BRA C es de salto condicional, de forma que se salta a la dirección de la etique­ta si C = l y se ejecuta la instrucción siguiente si C = 0.

;Ejemplo de instrucción 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

También existen otras instrucciones de salto condicional, denominadas instrucciones de com­paración y salto, por ejemplo la instrucción C.PSEQ, utilizada en el ejercicio de autoevaluación del

225

Page 244: DsPIC Diseño practico de aplicaciones

2 2 6 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

tema anterior. En el siguiente ejemplo, se utiliza la instrucción CPSEQ para buscar el primer nú­mero mayor que cero que es “simétrico” respecto a los dos bytes de un valor. Es decir, que si se in­tercambia la posición de sus dos bytes, se mantiene el valor.

MOV #0x0000,WO SUMA:

ADD W0,#0x0001 ,W0 MOV W0.W1 SWAPW1 CPSEQ W0.W1

•• • . . .

GOTO SUMA SIMETRICOS:>>>>X-V‘>X‘XXXVVV‘X-X*>X'X'XX'SX-X\-X'X-X-X-X-X-.'x-x-v-:-x-X;>¡‘W<jX*x*x.X* >!*>>Xv,xx x-x-.-x-x-x- ■ ■

: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 simétricos

y/'í-s.

*x -x-x ■;•• •• . x-x.,.:

En este ejemplo la instrucción 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 instrucción GOTO SUMA. Una vez que W0 y W1 sean iguales, la instrucción CPSEQ hará que se salte la siguiente ins­trucción GOTO SUMA y el programa accederá a la parte del programa etiquetada como SIME­TRICOS. El programa ya habrá encontrado el primer número simétrico mayor que cero.

A4.3. MANEJO DE INSTRUCCIONES DSP. INICIALIZACIONES

Los dsPIC. incluyen 19 nuevas instrucciones específicas para el tratamiento de señales. En el si­guiente ejemplo se estudia el manejo de la instrucción MAC. Esta instrucción puede resultar espe­cialmente interesante para implementar un filtro FIR, cuya ecuación general se corresponde con la siguiente fórmula:

yn = b0xn + b,xn.| + b2x„_2 + b3Xn-3

La instrucción MAC puede ayudamos a resolver esta ecuación de forma rápida. 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¡ Xn

0x0001 0x0002

0x0003 0x0005

0x0007 0x0002

0x0001 OxQOÓF

Para aprovechar al máximo la potencia de esta instrucción y hacer esta operación matemática lo más rápidamente 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 simultáneamen­te. El primer paso en el programa será colocar dichos datos en sus zonas correspondientes. Para ello se define una sección data en el espacio X, a partir de la dirección de memoria 0x0800, de tipo pa­labra, llamada coeficientes, donde se almacenarán los valores de b¡.

Page 245: DsPIC Diseño practico de aplicaciones

APLICACIÓN 4: MANEJANDO LAS INSTRUCCIONES TÍPICAS DE LOS dsPIC 22 7

¡Programa MR global jtnain¡Sección 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 posición 0x0800 hasta la 0x807 incluida con los datos correspondientes a b*. Luego se crearán las entradas corres­pondientes a xn a partir de la posición OxOCOO en el espacio Y.

;Seceión de datos Y de la memoria..section inputs, data, ymemory, address(OxOCOO)......... u ............. ru ;n /\ n n n „ j\ Á A c r i . , n n n ' t n . . n n n r ?

Nótese la correspondencia de los datos de la tabla con los de la definición de la sección inputs.

.text££&:■: V:; ••••:_main:

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 números enteros. Luego, mediante los registros W4 y W6, se recogen los datos de los espacios de memoria X e Y, respectivamente, y los registros W8 y W10 actúan co­mo punteros de las direcciones de la zona de memoria donde residen los coeficientes b¡ y xn.

mov #búW8 :Mover Ja dirección de bi a W8.mov [W8++],W4 ;E1 contenido de la dirección de W8 lo llevamos a W4 y

;de jamos W8 apuntando al siguiente dato.

Se debe introducir el dato de la primera multiplicación b0 en W4. Este dato se encuentra en la sección etiquetada como bi. Luego la instrucción mov #bi, W8 introduce en W8 la dirección de me­moria 0x800, que es donde se encuentra b0.

La siguiente instrucción mueve el contenido de la posición de memoria que se encuentra en W8 al registro W4. Es decir, lee la posición 0x0800, cuyo dato es OxOOFF, y lo guarda en W4. Además el programa ha realizado otra operación que es postincrementar la dirección apuntada por W8. Es decir, que con la misma instrucción se consigue dejar W8 apuntando al siguiente dato situado en la posición 0x0802, b|.

Page 246: DsPIC Diseño practico de aplicaciones

2 2 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

¡Mover la dirección de xn a W10.¡Contenido de la dirección W 10 a W6. Dejamos W6 ¡apuntando al siguiente dato

El programa realiza una operación similar con los datos xn, apuntándolos 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 posición 0x0800 los coeficientes b¡ (espacio X)• Colocar desde la posición OxOCOO los valores de x„ (espacio Y)• Recuperar en W4 el primer valor b0• Recuperar en W6 el primer valor xn• Apuntar con W8 al siguiente valor b|• Apuntar con W 10 al siguiente valor xn.j

A continuación el programa realizará cuatro multiplicaciones y las irá acumulando en el acu­mulador A. Las cuatro sumas correspondientes a la fórmula general anteriormente descrita, yn = b0xn+ biXn-i + b2xn_2+ bjxn.3, se ordenan mediante la instrucción repeat #0x003.

repeat #0x0003 ¡repetimos 4 MAC, una para cada suma.

Los dos componentes del primer sumando de la fórmula (b0 y xn) se encuentran en W4 y W6. Hay que multiplicarlos entre sí y mover el contenido de la posición de memoria apuntada por W8 a W4 (para así tener en W4 el siguiente operando bi) y mover el contenido de la dirección apuntada

Además, y para dejar preparada la instrucción para repetirse la próxima 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 instrucción 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

¡resolución de la ecuación yn=b0Xn+blXn-l+b2Xn-2+b3Xn-3 típica de filtros FIR .include ,,p30f4013.inc,,.global _ma.in¡Sección 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

por W lO a W6 (xn,a W 6 ) .

- . ' - ; =-• • mac W4*W6,A,[W8]+=2,W4JW 10]+=2,W6

Page 247: DsPIC Diseño practico de aplicaciones

APLICACIÓN 4: MANEJANDO LAS INSTRUCCIONES TÍPICAS DE LOS dsPIC 22 9

¡Sección 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 enterosmov #bi,W8 ¡Mover la dirección de bi a \V8.mov [ W 8 + + J .W 4 ¡El contenido de la dirección de W8 io llevamos a W4

¡y dejamos W8 apuntando al siguiente dato,mov #xn,W 10 ¡Mover la dirección de xn a W 10.mov fW10++],W6 ¡Contenido de la dirección W 10 a W6. Dejamos W6

¡apuntando al siguiente dato repeat #0x0003 ¡repetir 4 veces (una por cada suma de la ecuación)mac W4*W6,A,LW8]+=2,W4,[W 10]+=2,W6

; Instrucción MAC, Multiplicación y acumulación.; Multiplicamos W4 y W6 y lo sumamos al contenido del acumulador A ¡ Además, 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, también 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 primera instrucción bset y ejecute el programa 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 pestaña 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 I B I

S ia c J r m s S r b u s l 00 . ,lL ° ¡ _ L ° i _ J 1 O S 11. 00 :! ^ j1 o c ì□ EÁ

0 8 0 0 0 0 0 3 0 0 0 ’ n o p : n o c D DUOU o u o o o c o oa m o OOCD OOOD o o o o DUCO OGOO o o o o OCOO o c o o

08 2 0 OOCD u o o o OOCD 0 000 OCDO o o o o OCDO o c o o3830 0 000 0 000 OOOO o o o o OODO o u o o 0 000 o c o o

9040 0 000 n o o n 00 0 0 OGOO OCOO OCDO o o o o OCDO0850 □□OD o a o o 0000 OCDO OOOO o c o o n o u o UOD00860 0 000 0 0 0 0 o o o o o c o o o o o o ULJU o o o o GODO00 7 0 OGOO o c o o o a o o o o o o 0 0 0 0 OODO o o o o OOOO06 3 0 0 0 0 0 OC DO OGOO 00 0 0 OOOO o o o o o o o o COOG

0£ 9 0 OCDO OODO o c o o o o o o o o o o o o n o a o o o OOOO0SA 0 OC DO OCDO o c o o o o o o CDOO OOOG CDOC OOOO ............ 3

' / X v X v

■ f M

_ _ _ _ _ _

A d d c f e s s j v O t t l S j T r t ò ! p *04 L S I 1 06 p r u ” r i— T

ü ó ü ~ V □002 ULDS OC 02 0CD7 0 1 -.0 o o n o 0 1 S 6 c o o o0C 10 Y 0 0 0 0 OCDO OCDO o o o o c o o c i 0 0 0 0 CDOO 0 0 0 00C 20 Y OC DO 00 0 0 OCDO OOOC CDOO o o o o o o o o ODOO

0C 30 Y □ e o o OODO 0 0 0 0 OOOC ODOO o o o o o o o o o o o o

0C 40 Y GODO 00 0 0 o o o o OOOO o o o a CDOO o o o o 0 0 0 0c c s o Y 0 000 0 000 o o o o CDOO o o o a CDOO o o o o o o o oOC 6 0 Y 0 0 0 0 o o n o □000 CDOO o o o a o o o o o o o o o o a o

0C 70 Y c o o c 00 0 0 OOOC CDOO OOOC o o n o OOCO DOGO0 C80 Y 0 3 0 0 CDOO COOC OOOO OOOC? o o o o o o c o o o c o0 C90 V ODOO OOOC OOOO OOOO o o o o o o o o o o o o o o o o .... >5

: : w ? . v >

fi .H®*: ! 1| W D íte

Figura A4.1. Visualizando el área de datos de los espacios X e Y.

Page 248: DsPIC Diseño practico de aplicaciones

2 3 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Hasta llegar a la instrucción MAC ejecutando el programa paso a paso (F7) observará cómo W4 contiene el primer coeficiente, W8 apunta al siguiente coeficiente en la posición 0x0802, W6 por el contrario contiene a Xn y W 10 apunta al siguiente coeficiente en Ja posición 0x0C02, Puede obser­var estos datos en la ventan de File Registers, en la vista Symbolic. (Figura A4.2.)

File Registers

ÜÜÜG 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 UREGO0002 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 UREG10 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 TJREG20 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 UREG30 0 0 8 0001 1 0 0 0 0 0 0 0 0 0 0 0 00 0 0 1 UREG4000A 01C2 4 5 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 UREG5OOOC 0002 2 0 0 0 00 0 0 0 0 0 0 0 0 0 1 0 UREG6000E 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 UREG70 0 1 0 0802 2050 0 0 0 01 0 0 0 0 0 0 0 0 0 1 0 WREG80012 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 WREG90 0 1 4 0C02 3074 0 0 0 0 1 1 0 0 00 0 00 0 1 0 UREG10n n * f nnnn r-. nnr-.i-.r-.t-.i-.i-. r-.i-.r-.r-.nr-.nt-. TTT> 4 H

Figura A4.2. Los registros generales.

Si continúa ejecutando el programa paso a paso, por cada vez que se ejecute la instrucción MAC, ésta acumulará en ACCA el resultado de la multiplicación de W4 y W6. Puede observar su valor mediante la ventana View -> Watch y añadir el SFR (Add SFR) y el registro ACCA.

Con la primera ejecución de la MAC, el registro ACCA tomará el valor 0x0002, resultado de multiplicar 0x0001 por 0x0002. Además, 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 ejecución, 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 añade al resultado anterior, 17, el resultado de la multiplicación de 7 por2. Es decir, que en el acumulador se cargará el valor 17+ 14 = 31 = 0x001 F. Y ya con la última mul­tiplicación, se añadirá al resultado anterior 31 la multiplicación de 1 por 15, cuyo resultado final es de 31 + 15 = 46 = 0x002E. (Figura A4.3.)

1 Add SFR] [ACCA y [Add Symbol] i_SP

A d d re s s S ym b o l Name V a lu e0022 ACCA 0X 000000002E

Figura A4.3. El acumulador ACCA contiene el resultado final de la operación matemática que es 2E.

Este ejercicio muestra el potencial de la instrucción MAC junto con la instrucción repeat. Pue­de parecer trivial porque los datos de los coeficientes han sido introducidos de forma directa y ar­bitrariamente en memoria, pero perfectamente podrían haberse introducido unos coeficientes cal­culados con herramientas como las de la aplicación Diseñando Filtros Fácilmente y obtener los

Page 249: DsPIC Diseño practico de aplicaciones

APLICACIÓN 4: MANEJANDO LAS INSTRUCCIONES TÍPICAS DE LOS dsPIC 231

valores x„ como resultado de una conversión analógico digital de una señal de entrada, para así ob­tener rápidamente la señal de salida filtrada.

Una m uy parecida es la instrucción MSC, idéntica a la mac, pero que en vez de acum ular va res­tando el resultado de la multiplicación al acumulador (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 programas.

Ejem plo de in ic ia lizac ión de memoria de datos

;Sccción de datos del espacio X. Coeficientes b0,bl,b2 y b3 .«section coeficientes, data, xmemory, address(0x0800) bi: .hword 0x000 L 0x0003, 0x0007, 0x0001 ■Sección 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 inicialización se ha utilizado la directiva .section, luego se asigna un nombre a dicha sección y se debe especificar si los datos pertenecen a la sección de código ejecutable (.text), sección de datos no inicializados (.bss) o sección 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á .xmemory pa­ra indicar que los datos se alojan en el espacio X, .ymem ory para indicar que los datos se guardarán en el espacio Y o .near para indicar que los datos se guardarán en la memoria cercana.

Sólo falta indicar a partir de qué posición de m em oria se guardarán los datos m ediante .adress.

.section Coeficientes data Xmemory address(0x0800)

.sectionNombre asignado

ti la sección

Sección del

programaLocalización de los datos

Dirección

de memoria

_ y .. . ’ •;

bss: Datos no inicializados.

Ymemory: datos en espacio Ynear: datos en memoria cercana

La siguiente línea m uestra cómo siguiendo a la especificación del tipo de dato a inicializar, se in­troducen dichos datos.

bi: .hword 0x0001, 0x0003, 0x0007, 0x0001

Para obtener la dirección de los datos bi se utilizará la instrucción mov #bi, WREG0.

Page 250: DsPIC Diseño practico de aplicaciones

232 dsPIC. DISEÑO PRÁCTICO DF APLICACIONES

AUTOEVALU ACIÓN

Conceptos clave de este capítulo

/. ¿Qué significa que una instruc.i i4. ¿Para qué sirve la instrucción mac?

....

Ejercicios

b l X i y f - b 2 X n .2 ~ b - j X n - s

ruló se dan los siguientes coeficientes:

.V/.V.SV.V.V»V/AVAVAY.NVAVV.V/,

1 «

b; *n

0x0001 OxOOFF

0x0003 0x0005

0x0007 0x0002

0x0001 OxOOOF

i »

É | |vv A'X

M■ X A;:Procure hacer el pro­

nuevas instrucciones DSP.

Page 251: DsPIC Diseño practico de aplicaciones

APLICACIÓN

y escribiendo las memoriasFLASH 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 manipulación 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 teoría.

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 continuación, se describe el funcionamiento de estas instrucciones mediante la elaboración de un ejemplo y su co­rrespondiente simulación.

Este ejemplo simplemente cargará en los registros W1 y W2 los datos de una posición de la me­moria de programa, la posición 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. Más concretamente, se guardará en la parte baja de W1 el byte más alto de la dirección 0x00300 y los bytes más bajos de dicha posición en W2. El siguiente ejemplo muestra cómo acceder a la posición 0x00300 utilizan­do instrucciones de Tabla.

•PROGRAMA TABLAS ¡Lectura de la memoria de programa..include Mp30f4013.inc".global main. le x l

jmaíii:;Sé carga en TBLPAG el número de página : de la memoria a leer MOV #tblpace (#0x00300), W0 MOV W0, TBLPAG;Hay que mover a WO, ei desplazamiento dentro ;de la página que se desea leer MOV #tbloffset (#0x00300), W0

233

Page 252: DsPIC Diseño practico de aplicaciones

2 3 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Una vez establecida la dirección de la memoria FLASH, se utiliza la instrucción 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 más bajos de la dirección de programa.

; A continuación se carga en W1 el byte más alto de la memoria de programa TBLRDH [WO], W1; En W2 se depositan los 2 bytes más bajos de la memoria de programa TBLRDL [WO], W2 nop .end

Compile el programa y ponga un punto de parada en la primera línea del mismo. A continuación acceda al menú View-> Program Memory y vaya hasta la posición de memoria 0x00300 (atención, esta dirección está expresada en hexadecimal, no se confunda con la posición 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 más 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 continuación, 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. Mover al registro de control NVMCON el valor 0x4041, que significa que comienza una operación de borrado de memoria FLASH.

1.2. Mover la dirección de la memoria a borrar a los registros NVMADRU y NVMDR. En NVMADRU se guarda el byte más alto de la dirección a borrar y en NVMDR los

dos bytes de menos peso de esa misma dirección.1.3. Cargar ‘55’ al registro de control NVMKEY.1.4. C arg ar4 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 operación de grabado finalice

dicho bit pasará a 0 automáticamente.

• 2° Paso: Mediante 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. Mover al registro de control NVMCON el valor 0x4001. que indica el comienzo de

una operación de grabado de memoria FLASH.3.2. Mover #0x55 al registro NVMKEY.3.3. Mover #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án grabado en la memoria de programa los 96 bytes.

Para programar más líneas de memoria bastaría con repetir este algoritmo las veces que fuera ne­cesario. A continuación se presenta el código correspondiente a este algoritmo.

Page 253: DsPIC Diseño practico de aplicaciones

APLICACIÓN .5: LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM 235

¿CARGAMOS EN NVMCON 0X4041 ¡PARA INICIAR EL BORRADO ;MOVEMOS A NVMADRU;LA PÁGINA DE MEMORÍA DE LA DIRECCIÓN A BORRAR ¡MOVEMOS A NVMADR;LOS 2 BYTES DE MENOS PESO DE LA DIRECCIÓN ;DESHABILITAMOS INTERRUPCIONES EN 5 INSTRUCCIONES ¡MOVEMOS LA SECUENCIA ;DE 55 Y AA¡AL REGISTRO DE CONTROL ¡NVMKEY, COMO CLÁVE DE SEGURIDAD ¡ACTIVAMOS EL BIT WR (EL BIT 15 DE NVMCON);PARA QUE SE INICIE LA GRABACIÓN ¡DEBEMOS INTRODUCIR 2 NOPS

; CARGA DE LOS DATOS EN MEMORIA : RELLENAMOS LA FILA COMPLETA DE 96 BYTES

MOV #0X(),W()MOV WO.TBLPAG MOV #0x300, W0

; 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++]

¡MOVEMOS A TBLPAG¡LA PÁGINA DE MEMORIA DE LA DIRECCIÓN 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

¡PROGRAMA GRABAFLASII .include np30f4013.inc" .GLOBAL _main .text main:

; SECUENCIA DE BORRADO

MOV #0X4041,w()MOV W0,NVMCON MOV #tblpage( #0x300), W0 MOV W0,NVMADRU MOV #tbloff sei(#0x300).w0 MOV W0. NVMADR DISI #5 MOV #0X55,W0 MOV WUNVMKEY MOV #0XÁA*W0 MOV W0,NVMKEY BSET N V M CON ,#0XF NOP NOP

Page 254: DsPIC Diseño practico de aplicaciones

2 3 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Se debe repetir el código 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 posición de memoria indicada.

; INSTRUCCION 32MOV #0x 111 l,W2 ¡CARGAMOS EN W2 LOS 2 BYTES DE MENOS PESO A GRABARMOV #0X001LW3 ¡CARGAMOS EN W3 EL BYTE MAS ALTO A GRABARTBLWTL W2,[W0] ¡ESCRIBIMOS EN LA DIRECCION APUNTADA POR W0 EL

¡CONTENIDO W2TBLWTH W3,[W0++] ¡EN LA PARTE ALTA EL CONTENIDO DE W3

; PROCEDIMIENTO DE ESCRITURA

MOV #0x4001, W0 ¡INDICAMOS AL REGISTRO NVCOM CON EL DATO 0X04001MOV WO,NVMCON ¡QUE DESEAMOS GRABAR DATOS EN MEMORIA FLASH

DISI #5 ¡DESHABILITAMOS INTERRUPCIONES EN 5 INSTRUCCIONESMOV #0X55,W2 ¡GENERAMOS LA SECUENCIA DE CONTROL DE SEGURIDADMOV W2.NVMKEY ¡’55’ Y V\A’ EN NVMKEYMOV #0XAA,W 1MOV W 1 ,N VMKEYBSET NVMCON,#WR ¡ESTABLECEMOS A 1 EL BIT WR DE NVMCON PARA QUE SENOP ¡INICE LA GRABACIÓNNOP ¡ Y ESPERAMOS CON 2 NOPESPERA2: ¡ASÍ MISMO ESPERAMOS A QUE EL BIT WRBTSC NVMCON,#WR ¡PASE A 0GOTO ES PER A 2 ¡PARA SEGUIR CON EL PROGRAMANOP.end

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 instrucción del programa, el segundo en la primera instrucción de carga de datos en memoria, y el último en la última instruc­ción NOP del programa.

Al comenzar la simulación y pararse el programa en la primera instrucción, se puede acceder a la memoria de programa para modificar la posición en la que se van a grabar los datos, posición 0x00300, y sustituir el valor OxFFFFFF por otro, por ejemplo, Ox AAAAAA.

Al seguir la simulación hasta el siguiente punto de ruptura, se debe observar cómo el valor de di­cha posición de memoria ha cambiado por el valor OxFFFFFF.

Y por último, al llegar a la última instrucción de programa, se observará cómo desde la posición 300 hasta la posición 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 cambiar el voltaje su­ministrado al dsPIC, le proporciona un potencial importante. Se puede proporcionar al dsPIC una circuitería auxiliar para su conexión vía 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 ejecución a dicha posición de memoria. Así, se podría grabar al dsPIC sin más circuitería que la de un puerto serie, con el consiguiente ahorro correspondiente.

Page 255: DsPIC Diseño practico de aplicaciones

APLICACIÓN .5: LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM 2 3 7

rogram Memory:/

Dis&ssenoe r

384 002 F E F F F F F F nop r

385 00300 111111 s u b r .u u 2 , [w l ] , [ w2 — ]386 00302 l l l l l l s u b r . w w 2 , [w l ] , [vZ — ]387 00304 111111 s u b r . w v 2 , [ v l ] , [ v 2 ~ ]388 003 06 l l l l l l s u b r .w w 2 , [ w l ] , [w2— J389 00308 l l l l l l s u b r . w v Z , [w l] , [ w 2 ~ ]390 0030À l l l l l l s u b r .w ® 2 , [ w l ] , [w2— ]391 0030C l l l l l l s u b r . v u 2 , [w l ] , [WZ— ]392 003 0E l l l l l l s u b r . v w 2 , [ V i ] , [w2— ]393 00310 l l l l l l s u b r . v W2, [ u l ] , [w 2— ]

394 00312 l l l l l l s u b r . u w2, [w l ] / [ w2 ]395 00314 l l l l l l s u b r .n w2# [ w l ] , [ w 2 — ]396 00316 l l l l l l s u b r . w w2 , [w l ] , [w2— ]397 00318 l l l l l l s u b r . w u2 [ W l] , [ w2— ]398 0031A l l l l l l 3 u b r . w v 2 , [ w l ] , [ w2— ]399 0 03 1C l l l l l l s u b r . w V2 , [w l ] , [ v 2 — ]400 003 1E l l l l l l s u b r .w w 2 , [ w l ] , [ v 2 — ]401 00320 l l l l l l s u b r . w w 2 , [w l] , [ v 2 — ]402 00322 l l l l l l 3 u b r . w w2 , [w l] , [w2— ]403 00324 l l l l l l s u b r . v W2, [w l] , [w2— ]404 0032 6 l l l l l l s u b r . v w 2 , [ w l ] , [w2— ]40S 0032 8 l l l l l l s u b r .w “ 2 / [^ 1] / [W2— ]406 003 2 A l l l l l l s u b r . w w2, [ u l ] , [ w2— ]407 0032C l l l l l l s u b r . u v 2 , [ w l ] , [ w 2 --]408 0032E l l l l l l s u b r . v v2 , [w l ] , [w 2— ]409 00330 l l l l l l s u b r .« w2 , [w l ] , [ w2— ]410 00332 l l l l l l s u b r . w w 2 , [ w l ] , [W2— ]

411 00334 l l l l l l s u b r . w w2 , [W l] , [ w2— ]

412 00336 l l l l l l 3 u b r . w W 2 , [w l ] / [w2— ]413 00338 l l l l l l s u b r . w w 2 , [ w l ] , [ w2— ]

414 0033 A l l l l l l s u b r . w w2, [w l] , [ w2— ]

415 0033C l l l l l l s u b r . w w2, [ v i ] , [w2— ]

416 0 03 3 E l l l l l l s u b r . v w 2 , [ u l ] , [w2— ]417 00340 F F F F F F n o u rMachine il SjfrboSc PSVMixedl PSV Data j

Figura A5.1. Resultado de la memoria FLASH de programa tras su programación.

A5.2. MANEJANDO LA MEMORIA 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 página de la memoria EEPROM y en WO el desplazamiento dentro de dicha página y lue­go con una simple instrucción TBLRDL se leerá el dato.

La EEPROM que sólo está disponible en la fam ilia dsPIC3()F com ienza en la posición 0x7FFC00. Se propone elaborar un programa que lea dicha posición. Para simularlo hay que cam­biar previamente el valor contenido en dicha posición 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

Page 256: DsPIC Diseño practico de aplicaciones

2 3 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

// T ,cc EEPROM en C #include ”p3üf4013.h' mt main(void)

TBLPAG = 0x7F:WREGO = OxFCOO; asm("TBLRDL [W0],W4M) rcturn 0:

HI mismo ejemplo en lenguaje C sería el siguiente:

i i i

C*v>.

-

Puede observarse en este ejemplo en C que, a veces, es necesario introducir ciertas instruc­ciones específicas del lenguaje ensamblador en los programas en C. Para ello utilizamos la sentencia asm (“instrucción”), donde instrucción es la instrucción en ensamblador que no desea incluir.

La grabación en la memoria EEPROM tiene muchas similitudes con la grabación en la memo­ria FLASH. Cuando se graba esta memoria, se puede grabar una palabra de dos bytes o una línea de16 palabras (32 bytes). A continuación, se describe el algoritmo de grabación de una palabra en la memoria EEPROM:

• 1e r paso: Borrar la palabra de la EEPROM a programar. Este paso se subdivide en los siguientes:

1.1. Mover al registro de control NVMCON el valor 0x4044, que indica que comienza una operación de borrado de memoria EEPROM.

1.2. Mover la dirección de la memoria a borrar a los registros TBLPAG y W0.1.3. Mover ‘55’ al registro de control NVMKEY.1.4. Mover ‘A A al registro de control NVMKEY.1.5. Poner el bit WR del regsitro NVMCON a 1. Cuando la operación de grabado fina­

lice, dicho bit pasará a 0 automáticamente.

• 2o Paso: M ediante la instrucción de manejo de tabla TBLWTL, escribir la palabra a programar

• 3er Paso: Programar la palabra el siguiente algoritmo:3.1. Mover al registro de control NVMCON el valor 0x4004, que significa que comien­

za una operación de grabado de memoria EEPROM.3.2. Mover #0x55 al registro NVMKEY3.3. Mover #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 programación de una posición de memoria EEPROM. El pro­grama lee la posición de memoria 0x7FFC00, suma 1 al contenido de dicha posición de memoria y lo vuelve a grabar. Este programa podría ser de utilidad para lanzar una versión demo de un pro­grama, el cual podría ejecutarse un número determinado de veces.

Page 257: DsPIC Diseño practico de aplicaciones

APLICACIÓN .5: LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM 23 9

;EjempIo de PROGRAMACIÓN de una posición de memoria ;PROGRAMA GRABA EEPROM .include ”p30f4013.inc".global _main .tcxt

main:; APUNTAMOS MEDIANTE TBLPAG Y WO A LA POSICIÓN 0X7FFC00MOV #tblpáge(#Ox7FFCOO)>WOMOV WO.TBLPAGMOV #tb 1 offse t( #0x 7FFC00). W 0; Loemos el dato EEPROM Y LO GUARDAMOS EN W4TBLRDL | W0|,W4: LE SUMAMOS 1 A DICHO VALORMOV #1,W3ADD W4,W3.W4;BORRADO DE DIRECCION EEPROMMOV #0X4044, WO PROGRAMAMOS NVMCON PARA BORRAR PALABRA EEPROMMOV WO. NVMCONMOV #tblpage(#0x7FFC00),W0 ;APUNTAMOS CON TBLPAG Y WO LA DIR. A BORR.MOV WO,TBLPAGMOV #tbloffset(#0x7FFC00),Wr0DISI #5 ;DESHABILITAMOS INTERRUPCIONES EN 5 INSTRUCCIONESMOV #0X55,W0 ;MOVEMOS LA SECUENCIAMOV W0,NVMKEY ;DE 55 Y AA AMOV #0XAA,W0 ;AL REGISTRO DE CONTROLMOV WO,NVMKEY ; NVMKEYBSET NVMCON,#WrR :ACTÍVAMOS EL BIT WR (EL BIT 15 DE NVMCON)NOP ;PAR A QUE SE INICIE EL BORRADONOP ;DEBEMOS INTRODUCIR 2 NOPSESPERA2: ;ASÍ MISMO ESPERAMOS A QUE EL BIT WRBTSC NVMCON,#WR ;PASE A 0GOTO HSPERA2 ;PARA SEGUIR CON EL PROGRAMANOPMOV #tblpage(#0x7FFC00),W0 ; APUNTA MOS A LA DIRECCION A GRABARMOV WO,TBLPAGMOV #tblofísel(#0x7FFC00),Wa)TBLWTL W4. [WOJ ESCRIBIMOS EL DATO A GRABAR EN EL REGISTRO

;SECUENCIA DE GRABACIÓNMÖV #0X4(304,WO ;EN NVMCON PROGRAMACION DE EEPROMMOV Wr0. NVMCONDISI #5 ;DESHABILITAMOS INTERRUPCIONES EN 5 INSTRUCCIONESMOV #0X55,WO :M O VEMOS LA SECUENCIAMOV W0. NVMKEY :DE 55 Y AA AMOV #0XAA,W0 ;AL REGISTRO DE CONTROLMOV W0,N VM KEY ;NVMKEYBSET NVMCON,#WR ;ACTIVAMOS EL BIT WR (EL BIT 15 DE NVMCON)NOP ;PARA QUE SE INICIE LA GRABACIÓNNOP :DEBEMOS INTRODUCIR 2 NOPSESPERA: :ASÍ MISMO ESPERAMOS A QUE EL BIT WrRBTSC NVMCON,#WR ;PASE A 0GOTO ESPERA ;PARA SEGUIR CON EL PROGRAMANOP.cnd

Page 258: DsPIC Diseño practico de aplicaciones

2 4 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Simule el programa con el MPLAB SIM y, a través de la ventana View->EEPROM , compruebe cómo cambia el valor cada vez que se ejecuta el programa.

El mismo programa en C puede resultar más fácil de entender.

// Graba EEPROM en C// PROGRAMA GRABAEEPROMC#include ”p30f4013.h"

int sccuenciagrabacionQ// Esta función escribe la secuencia de grabación// tanto para borrado como para grabación

TBLPAG = 0x7F: //Apuntamos la páginaWREGO = OxFCOO; //Apuntamos el desplazamiento en la páginaNVMKEY = 0x55; //Movemos a NVKEY la secuencia 55NVMKEY = OxAA; //Movemos a NVMKEY la secuencia A AN V MCON bits. WR= 0x1 //Activamos el bit WR de NVMCONasmCNOP1’); //Esperamos 2 nopsasm(,,NOP,r);return 0;

i1% * ❖ £ # ❖ + ❖ # # sfc

// Programa principal■:< * * * * --Í-- * * * * * -Jfí * * *

int main(void)lint. a = 0; //Variable auxiliarTBLPAG = 0x7 F; //Apuntamos a la página de la dirección a leerWREGO = OxFCOO;asmCTBLRDL [W0],W4B); //Leemos el dato en WREG4WREG4 = WREG4 + 1; //Sumamos 1 a WREG4NVMCON = 0x4044; //Configuramos NVMCON para borrar EEPROMa = secuenciagrabacion(); //Ejecutamos secuencia borrado/grabaciónwhile(NVMCONbits.WR == 1); //Esperamos al bit WR de NVMCON sea 0TBLPAG = 0x7 F; //Apuntamos a la página de la dirección a leerWREGO - OxFCOO; //Apuntamos el desplazamiento en la páginaasmC'TBLWTL W4, [W0]M); //Escribimos en el registro el cont. de W4NVMCON = 0x4004; //Configuramos NVMCON para grabado EEPROM[a = secuenciagrabacion(); //Ejecutamos secuencia borrado/grabacionwhi le(N VMCONbi ts. W R == 1): //Esperamos al bit WR de NVMCON sea 0return 0; !

Nótese que en el lenguaje C para acceder a la información de los bits de cualquier registro, se de­be escribir el nom bre de registro acompañado de la palabra bits y a continuación, tras un punto deseparación, el bit al que se desea acceder. Así, por ejemplo, para poner a 1 el bit W R del registroNVM CON se escribe lo siguiente:

N V M CON bits. WR = 1;

Page 259: DsPIC Diseño practico de aplicaciones

APLICACIÓN 5: LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM 241

El simulador del entorno de desarrollo MPLAB IDE es una herramienta muy completa donde se pueden simular casi todas las características que presentan los controladores dsPIC. Esto convierte a esta herramienta en una plataforma de aprendizaje y de ensayo de proyectos inmejorable.

AUTOEVALU ACIÓN

Conceptos clave de este capítulo

Ejercicios

■ /

mov #0x0002, WJ ¡Movemos un 2 al registro WJadd WO, WJ, WO ;Sumamos el registro WO y W¡ y dejamos

;el resultado en WO

Page 260: DsPIC Diseño practico de aplicaciones
Page 261: DsPIC Diseño practico de aplicaciones

APLICACION

los periféricos con Visual Initializer

A6.1. INTRODUCCIÓN

A lo largo del presente tema, se abordarán distintos ejemplos en los que se utilizan los periféricos que se hallan integrados en el dsPIC. Muchas de las patitas del controlador soportan distintas fun­ciones. Los periféricos pueden desarrollar distintas tareas en función de cómo sean configurados. Para facilitar esta tarea de la inicialización de periféricos del controlador (puertas de entrada/salida, conversores analógicos, temporizadores, etcétera) 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 programación de los controladores dsPIC, reali­zando ejemplos en los que se utilizan diversos periféricos.

Siguiendo con la filosofía de esta parte de la obra, la ejecución 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 inspección de manejo de los datos que deberían llegar desde el exterior al controlador y viceversa.

A6.2. V ISUAL IN ITIALIZER

El Visual Initializer o VDI es una herramienta que incorpora el MPLAB IDE para simplificar en la difícil tarea de la configuración del dsPIC. El programa Visual Initializer hace que esta tarea sea tan fácil como pinchar y arrastrar iconos y cambiar los parámetros en un cuadro de diálogo. Una vez completada esta labor, genera el código necesario para usar tanto en los programas en ensamblador como en lenguaje C.

También comprueba si existe algún tipo de inconsistencia en las configuraciones y genera mensajes de error en caso de existir conflictos en las asignaciones de patitas, memoria, 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 aplicación Visual Initializer muestre las opciones de los periféricos específicos de dicho controlador.

243

Page 262: DsPIC Diseño practico de aplicaciones

2 4 4 dsPIC. DISEÑO PRÁCTICO 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 aplicación MPLAB IDE apa­rece un nuevo elemento. (Figura A 6.1.)

Configure Window

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

Visual Initializer

Figura A6.1. Menú c/e la aplicación Visual Initializer.

Además del nuevo menú también aparecerá en pantalla la ventana principal de esta herramien­ta. (Figura A6.2.)

L M P l AtJ ID L V / .3 0 [V is u a l I n i l i a l b e r ] ' mamamamaF ls Edt yícw P/ojetfc O =tosqst Procrammsr Tóate Vsuol I n t ie l « r Cor/ígu-s Window Heto . ex

D C í f a ; S ¡ S f | d ' ¡ 9 19» ( # $ i C h e c k s u m : 0x b f 6 7 ! t> i i ? > ñ 1 ; ¡ : i & ¡

"¡'ft: iiGEI

PW M

CAN

3y¿rrp

Q y Q ü i j j y ü M lr* dsPÍC30F4ni3 44-P¡n TOFPL1 BT pmi 3 9 dnI OieiWo» InlenupU .Mínd t i«p:

(==3— nr » -

a wm1 BT B ■

i—rr SEr ~tt

a

M&AP.-SIM d s P I C tt iH O lj ; p c :0 o a b & ab lP O : d c n .o v .z c

Figura A6.2. Pantalla principal de la herramienta Visual lnitializer.

Page 263: DsPIC Diseño practico de aplicaciones

APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS 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 aplicación 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 botón derecho sobre la representación del controlador en la ventana y pulsando la opción Change package. Entonces aparecerá en pantalla un cuadro de diálogo con una lista desplegablc denomina­da Package type y habrá que elegir 40 Pin-PDIP.

MPLAB IDE V 7 .3 0 [Visual In itia lizer]

R e (Tdt View Project Debugger Progranrer Took Visual Jntislzer Configure Window Meb

Checksum: 0xbí67

E>t. Interface

Op Amp

45?K3Cf*0):< pc:fl oibHblPO : acn'ovtc

Figura A6.3. Encapsulado PDIP del dsPIC30E4013 de 40 pines.

Tras esta operación, el encapsulado del dsPIC pasa a ser el de la Figura A6.3. Esta pantalla se encuentra dividida en 2 partes. La primera, situada verticalmente en la parte izquierda, con­tiene las distintas opciones configurables del controlador (RTC, DSP. I/O Ports,...). El resto de la ventana, donde aparece el controlador, sirve para representar gráficamente los elementos ini- cializados en el mismo. Es importante ensanchar la pantalla verticalmente ya que de lo contra­rio al pinchar en las opciones de la izquierda podría no desplegarse ninguna opción por falta de espacio.

Para configurar cualquier periférico hay que seleccionarlo en el panel de la izquierda y arras­trarlo sobre la representación del controlador. Al soltarlo, aparecerá un icono sobre el controla­dor. A continuación, haciendo doble clic sobre dicho icono, aparecerá un cuadro de diálogo que hay que cumplimentar para configurar dicho periférico. En cualquier momento, para volver a configurar esos parámetros, puede volver a hacerlo haciendo doble clic sobre el icono añadido al controlador. (Figura A6.4.)

Page 264: DsPIC Diseño practico de aplicaciones

2 4 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Port B

Ext. Interface

dp Amp

dsP IC 3Q F 4013 40-P in P D IP

Oscillator Inteiiupts Port B and T raos

Poit Pin Settings

p i o [R B I H~RB2 il RB3 ji RB4 |¡ RB5 RB6 -;??

Data Direction

Initial Value

1 Unclaimed -

1° -

Figura A6.4. Configuración de los pines de la puerta B.

Para eliminar una configuración, basta con arrastrar el icono creado en el controlador a una par­te de la ventana vacía, y así desparecerá.

Una vez configurados todos los periféricos necesarios de esta forma tan fácil e intuitiva, tan sólo 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 código 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 código.

Entre otras opciones, se debe indicar al generador de código que sólo genere el código de aque­llas funcionalidades que disponga el controlador utilizado, marcando la opción Generate code only fo r features/re sources on processor package de dicha pantalla.

Page 265: DsPIC Diseño practico de aplicaciones

APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS CON VISUAL INITIALIZER 2 4 7

Una vez configuradas las opciones de generación de código, se puede generar dicho código me­diante la opción Visual Initializer->Code Generation. Aparecerá el código en pantalla y se podrá salvar dicho código, incorporarlo al proyecto o copiar la parte que se desee e incorporarla al códi­go fuente. (Figura A6.6.)

I Code G eneration DisplayN H H H B ü

; Initialization Code for dsPIC30F4013. Fam ily: contro ller control. Package:A

40-Pin PDIP 40pins

¡.include "p30F4013.m c”

j; Filter C ontrols u sed to G enerate Code:

j; POR M atch Filter OFF

; P rov isioned Feature Filter ON

; M asks a re Ignored and u s e s U nM asked R eg iste r W rites

¡.GLOBAL _V isuallnitialization

; F ea tu re= fu se s - fu s e s (DCRJ configuration

!: B15:14=FSCKM 1:0 B10:8=FOS2:0 B4:0=FPR4:0 c o n fig __FOSC, OxCI 00

: B15=FWDTEN B5:4=FWPSA1:0 B3:0=FW PSB3:0 c o n fig __FWDT, 0x803F

I: R1fi=MCI RFN R7=RORFN R5:4=RORV1 :fl R3:n=FPWRT3:0 fSi

Help I } Save to Project ] [ Close Window |

Figura A6.6. Código generado por la herramienta Visual Initializer.

A6.3. C O N T R O LA N D O EL M U N D O EXTERIOR. PUERTAS DE E/S

Como primer ejemplo, se acomete la creación de un proyecto con el VDI. Recibirá una señal 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. Después el programa sólo 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 dsPIC30F4013 y acceda al menú Visual initializer. En la barra vertical de la derecha elija la opción I/O Ports. Al hacerlo, bajo este epígrafe, aparecerán dis­tintos iconos de las distintas puertas que dispone el controlador. Elija la puerta D (port D) y arrás­trela hasta el controlador. A continuación haga doble clic sobre el icono de la puerta D arrastrada hasta el controlador y aparecerá el cuadro de diálogo de la Figura A6.7.

En la pestaña RDO de la Figura A6.7 se configura el PINO de la puerta D, de forma que sea la entrada en la que se conectará el interruptor.

Para ello, en la lista desplegable Data Direction, seleccione Input. En la pestaña 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.)

Page 266: DsPIC Diseño practico de aplicaciones

2 4 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

- Port Pin Settings

RDQ j RD1 I RD2 | RD3 § R08 {; RD9

Data Direction

Initial Value

Help OK Cancel Apply

Figura A6.7. Cuadro de diálogo de configuración de la puerta D.

V dd

dsp¡c3óf4ó13 _RDO

/ /RD1

FTT71

Figura A6.8. Diagrama de conexionado de las Entradas y Salidas.

Ya ha configurado los periféricos del proyecto. Ahora sólo queda generar el código correspon­diente e incorporarlo al programa. En primer lugar, acceda al menú Visual Initializer -> Code Ge­neration Options y marque la opción Generate code only fo r features/resources on processor pac­kage. A continuación, acceda al menú Visual Initializer ->Code Generation para que aparezca en pantalla el código correspondiente. Al pulsar Save to Project se guardará un fichero con dicha ini- cialización, que se incorporará a la lista de ficheros del programa. Cierre dicha ventana y la venta­na del Visual Initializer para regresar al proyecto.

Observe cóm o en el panel del proyecto ahora se encuentra un fichero llamado init_ dsPiC30f40l3.s. Ese fichero contiene la rutina de inicialización. Para llamar a dicha rutina de inicialización se debe incluir una instrucción cali _VisualInitialization en el código fuente del pro­grama. El programa será el siguiente:

; PROGRAMA PORTO.include ?p30f4Q:l3.inc-?.global jmain.text„mam;cali _VisualInitialization

• : :

m i ...... -

Page 267: DsPIC Diseño practico de aplicaciones

APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS CON VISUAI INITIALIZER 2 4 9

BXJCLH:fiTSS PORTD.#RDO ;Si el bitO de PORTD está a Uno, saltaBSET PORTD.#RDl ;Ponemos a l el kit 1BTSC PORTD.#RDO ;Si el bitO de PORTD está a cero, saltaBCLR PORTD. #RD 1 ;Ponemos a 0 el bit 1GOTO BUCLE •.Repetimos indefinidamente el bucle.end

O también 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

//Inicializamos las puertas

íif (PORTDbits.RDO == 0)

PORTDbits.RDl - 1: else

PORTDbits.RDl =0;)

return 0;}

//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 añadirán para este ejemplo dos escenas, una para establecer un nivel alto por la patita RDO y así comprobar cómo reacciona el programa ante dicho estímulo, y otra para establecer un nivel bajo por la patita RDO.

Para crear el escenario, se accede al menú Debugger -> Stimulus Controller -> New Scenario. Inmediatamente aparece en pantalla un cuadro de diálogo para crcar el escenario. Este cuadro dis­pone de varias líneas 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 opción 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 acción 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 opción 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 podría cambiar el estado de RDO a nivel alto o a nivel bajo y observar su funcionamiento. Para cambiar a nivel alto o nivel bajo RDO debe pulsar

Page 268: DsPIC Diseño practico de aplicaciones

2 5 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Stim ulus C o n tro lle r - [U n titled ]

Stimulus (SCL) Fíe

[ 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 |

j Save Scenario [ [ Exit | [ Heip

Figura A6.9. Creación de un escenario para actuar sobre las señales externas del controlador.

en el inicio de la fila donde aparece el símbolo > y observar cómo 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 función de si se establece un nivel alto o un nivel bajo mediante el escenario creado.

A6.4. MANEJO DE TEMPORIZADORES. EL SEMÁFORO

Mediante el siguiente ejemplo se configura un temporizador para hacer que el controlador actúe como un semáforo. Durante cierto tiempo encenderá un led rojo y durante otro tiempo un led verde. Además de configurar el temporizador también se deben configurar 2 patitas del contro­lador como salida para encender el led verde y el led rojo. Para ello se utilizarán los pines RDO y RD1.

Para configurar estas patitas, se abre el Visual initializer y se cambia el encapsulado del dsPIC mediante el botón derecho del ratón y la opción Change Package. A continuación, se accede a la opción 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 podrán configurar RDO y RD1 como salida. (Figura A6.10.)

A continuación se configura el Timer para que el semáforo esté cierto tiempo en rojo y otro en verde. Pero previamente es necesario cambiar 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 diálogo 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 ,512 Mhz.

Page 269: DsPIC Diseño practico de aplicaciones

APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS CON VISUAL INITIALIZER 251

Figura A6.10.Configuramos las patitas RDO y RD1 como salidas.

Para configurar el temporizador, acceda a la opción Timer del Visual Initializer, elija el Timerl y arrástrelo hasta el controlador. Pulse sobre el icono del timer y configúrelo 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 G sled Time Accumulation

CPU Idle Operation

: Continue -Poliscale: 1 '

(msec)

Timer Clock Prescale: 1:256 >

Timet Period: 1000

j I imer Frequency: 0,00100003690; (KH z) (Calc.)

¡- • Interrupt----------------------------------------------------- “

0 Enable Interrupt on Startup

Interrupt Priority: j 4 v ■

Heb OK Cancel Apply

Figura A 6.11. Cofigurac.ión del Timer.

Observe la sencillez que supone trabajar con el VDI frente a configurar cada uno de los bits de los registros de configuración de este recurso. No es necesario recordar todos los bits que intervie­nen en la configuración del mismo, tampoco se deben hacer cálculos matemáticos para establecer la cuantía del contador para así obtener un período determinado.

Page 270: DsPIC Diseño practico de aplicaciones

25 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

La herramienta Visual Initializer ha realizado estos cálculos 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 también la frecuencia de trabajo del simulador. (Figura A6.12.)

O scilla to r C onfigura tion

Primsy Oscillalo« Sellings — i------------

¡ Fose (MHz): ¡0.512 | i Fcy(MHz): 0.128000

linfe'.(MHz}0 View Advanced Oscillalof Sellings

Advanced Oscillator Sellings —

Clock Souice:

Clock Divider:

Switching and Monitor Mode:

O Enable Aux 32KHz Oscillator

Internal L PRC

Divide by 1

Switching Disabled, Monilor Disabled v>

Cancel

Figura A6.12.Cofiguración del reloj de la herramienta Visual Initializer.

Seleccione la herramienta MPLAB STM en el menú Debugger y en la opción Simulator Settings establezca como velocidad del reloj 0.512 (atención, no use la coma como separador decimal sino el punto). (Figura A 6 .13.)

Sim ulato r S e ttings

; IJai l l IO. 1? Animation ì Reallime Updates £ Limitations j Ose / Trace Break Options fi SCL Options !

Processo: Frequency -Units:® M H z

¡0.512 O K H z

O H z

t Trace Options---------------

EU Trace A l O Break on Trace Buffer Full

l Aceptar | j Cancelar ] [ Aplicar |

Figura A6.13. Configuración de la velocidad del simuJador.

Una vez configurado el temporizador y las puerta D como salida sólo 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 código e in­cluirlo al fichero del proyecto.

Page 271: DsPIC Diseño practico de aplicaciones

APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS CON VISUAL INITIALIZER 253

La programación del dsPiC emplea 2 ficheros fuente. Un fichero para el programa principal y otro en el que se atiende a la interrupción.

El programa principal podría ser el siguiente:

;Programa SEMAFORO;PD0 ROJO, PD1 VERDE.global _main.text_main:

cali Visuallnitialization mov #0x000LWO mov W0,PORTD

:lnieiali/.amos la puerta D y el Timerl :Ponemos el semáforo en rojo

BUCLE: goto BUCLE .end

;Nos quedamos en un bucle infinito

Guarde el fichero e incluyalo en el proyecto. A continuación, cree otro fichero donde se escribi-rá el código correspondiente a la interrupción generada por el timer.

; PROGRAMA SEMAFORO.global__TJ Interrupt;Atiende a la interrupción del Timer 1.•»Comprueba el estado del semáforo y lo cambia de color.

T 1 Interrupt:bclr 1FS0,#T1IF ; Borramos el flag de interrupciones.btss PORTD,#RD0 ;Si el bitO de PORTD está a Uno salta el rojo

;y pasa a verdegoto ROJOVERDE:mov #0x0002,'W0 ;Ponemos verde el semáforomov W0,PORTDgoto finalROJO:mov #0x0001.W0 ;Ponemos a rojo el semáforomov w0,PORTDfinal:RETFÍE ; Return de la interrupción

Es importante destacar la instrucción .global__Tllnterrupt que indica al compilador la direccióndonde debe atenderse a esta interrupción. Así mismo, hay que colocar la etiqueta__Tllnterrupt, in­terrupción del Timer 1, antes del código que cambie el semáforo de color. Nótese que la etiqueta lle­va dos guiones bajos__ seguidos antes del texto TI Interrupt.

La primera instrucción, al atender la interrupción, debe ser la de borrar el flag de interrupciones mediante la instrucción bclr IFSO, #0X0003, ya que de no hacerlo, al acabar el código de la inte­rrupción, se volverá a ejecutar indefinidamente.

Page 272: DsPIC Diseño practico de aplicaciones

2 5 4 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

Para probar este programa en el simulador es recomendable colocar 2 puntos de parada, uno co­mo siempre en la primera instrucción del programa principal y otro en la primera instrucción del programa que atiende a la interrupción del Timer 1. Si además se añade en la ventana Watch del me­nú View el registro PORTD, se comprobará como este registro cambia periódicamente pasando de valer 0x0001 (semáforo rojo) a 0x0002 (semáforo verde). Puede comprobar el tiempo transcurrido entre cada cambio utilizando la opción Stop Watch y también puede ver cómo va cambiando el con­tador mientras el programa ejecuta el bucle principal visualizando el valor del registro TM 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 código desconocida. Volviendo a pulsar F9 el programa seguirá su ejecución normal. (Figura A6.14.)

U MPi ab mr V7.30

OV.Ainterrupcion.s

■jiobal __T im t«rrupt. i n c l u d e ''p 3 0 ? H 0 1 3 . i n c "__ T i l r Æ c r L’u c t- :^ILK IfSO , t l l l f i Reset del fiagde tnC«cxup<BTSS POJ>7£>,92DU ;ïx c l fcitO de P0RH> esto a Uno «alta «' COTO SDJOU8J®Bñor <0x0002,*0 co r tfO .?O R íD •joto Iu ia jl V.CJO:ÍÍ0 7 «O x O O O l .V O

Fife Ed: _l£ew Fro¡«t Debujç©' ~ctis Ccrifij.ro Wttíow Wsf

; □ C r : - *•. % â A r Ü ' t ÿ g ^ c » $ g j : Checksum: 0xa6da t» I I M> ?•» T? §&

Sfapwateh S ynch | Insbucbon C jd e s 9999962 ' 33S3SG2

f~Zcn Ttr* ÍSec*1 1.393532 ‘ " Î.9S3S82Pnx«*« Frequency fNHz) 20.000»»

Figura A6.14. Visualizando el tiempo con el simulador y la opción Stopwatch.

Existen muchos tipos de temporizadores, temporizadores de 32 bits, contadores de pulsos exter­nos, etc. Todos son configurables desde la herramienta Visual Initializer fácilmente. Pruebe con otros contadores, contar pulsos externos mediante la creación de escenarios y descubra las posibili­dades que ofrecen los controladores dsPTC en este campo.

La solución en lenguaje C puede ser la siguiente:

#xnclude p0 f4013 .h ,t//Programa Semáforo en lenguaje C// PROGRAMA SEMAFOROC//Esta función atiende a la interrupción del temporizadorvoid attribute (( interrupt )) _T1 Interrupt void)

{IFSObits.TlIF = 0; if (PORTDbits.RDO == l)

PORTD = 2; else

PORTD = I ;}

//Borramos el flag de la interrupción //Si el semáforo está a rojo

//lo ponemos en verde y viceversa

//Programa principal int main (void)

Page 273: DsPIC Diseño practico de aplicaciones

APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS CON VISUAL INITIALIZER 2 5 5

VisualInitiaUzation(); //Iniciatizamos puertas y temporizadorPORTO = J; //Ponemos a rojo el semáforowhile(l){asm("drwdtM); //Esperamos en un bucle infinito

á t t iM H É ia iü É i . :

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 más completos.

A6.5. MANEJO DE INTERRUPCIONES. EL SEMÁFORO CON PULSADOR

Una posible ampliación para el proyecto del semáforo podría consistir en dotarlo con un interrup­tor para que el peatón solicite que se ponga verde. Cuando el peatón pulse este interruptor que es­tará conectado a una patita del controlador, se genera una interrupción que hará que el semáforo se ponga rojo para los vehículos. Para llevar a cabo la simulación de esta nueva situación es necesario colocar un interruptor conectado a la patita INTO, que provocará que el semáforo pase a rojo.

Tomando como base el ejemplo anterior hay que incluir una nueva configuración. La configura­ción correspondiente a la interrupción externa en la patita INTO. Además se deben estudiar las prio­ridades de las interrupciones y proteger la ejecución de las mismas para que 110 se interrumpan unas a otras. El primer paso será volver al Visual Initializer y habilitar la interrupción externa INTO. Para ello no debe arrastrar ningún objeto nuevo sobre el dsPIC ya que la opción 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 diálogo mostrado en la Figura A6.15.

czn dsP1CH nRI013 40-P in P D IP

tzajOsdlatcc IriciiLpis

►FoilD nCZH ond I (oik Ia— 1

1 Interrupts ami 1 raps Configuration E ®Gértttfil

iriliil yoc*« ;abl=: ¡Mein 0 ; . p T up on àcarnJetorA ovaifbw

Ifii:v3l - F U pli'.nly: ' '.v .j ' ' Í T « r i^ Á r^ j¿ r¿ iU » n i .R nú«d lnw

O Disable ÉEnsbiéMGLB

j ííj-Tr¿fi tori acr.i.rr«b»oi B ovedbw

¡ QñapencoUtropcovelltw

Prcpefíe® íoi Irtteirup* 1NTU: ;

Pncr U __ ;

Figura A 6.15. Configuración de las interrupciones del dsPIC..

Page 274: DsPIC Diseño practico de aplicaciones

2 5 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

En el cuadro de diálogo de la Figura A6.15 se observa en la lista Enabled Interrupts la existen­cia de la interrupción T I, la cual tiene una prioridad 4. En la lista Enabled Interrupts se puede ob­servar cómo se encuentra disponible la interrupción INTO. Para habilitarla, selecciónela y pulse so­bre la flecha con dirección hacia la izquierda. Desde aquí podrá cambiar las prioridades de las interrupciones, así como observar la configuración de las mismas.

Pulse OK una vez añadida la interrupción INTO y vuelva a generar el fichero de inicialización con el que reemplazará el fichero de configuración anterior.

A continuación, habrá que reprogramar el ejemplo anterior. Para ello añada un nuevo fichero al proyecto con el código correspondiente a la atención de la interrupción.

.global__INTOInterrupt

.include Mp30F40J3.inc"__INTOInterrupt:disi #4be Ir IFSO,#INTOIF mov #0x0001,W0 mov WO,PORTD rctfie

Resulta de especial interés la inclusión de la instrucción disi #4. Con esta instrucción 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 interrupción del pulsador no se atenderá la interrupción solicitada por el Temporizador TIMER 1. Para establecer prioridades entre estas inte­rrupciones se utiliza el cuadro de diálogo de la Figura A6.15.

En lenguaje C la solución puede ser la siguiente:

//PROGRAMA SEMAFOROINT #includc "p30f4013.h"//Programa Semáforo en lenguaje C

//Esta función atiende a la interrupción del temporizador void__attribute (( interrupt )) _T1 Interrupt void)(IFSObits.TI IF = 0; //Borramos el ílag de la interrupciónif (PORTDbits.RDO == 1) //Si el semáforo está a rojo

PORTD = 2;else //lo ponemos en verde y viceversa

PORTD =1;1//Función que atiende a la interrupción externa INTOvoid_attribute__((___interrupt_)) JNTOInterrupt(void){IFSObits.INTOlF = 0; //Borramos el flag de la interrupciónPORTD = 1: //Ponemos en rojo el semáforo.1

;Deshabilitamos otras interrupciones en las siguientes inst ;Borramos el flag de la interrupción INTO ;Ponemos el semáforo en ROJO ;para los vehículosfinalizamos la ejecución de la interrupción

Page 275: DsPIC Diseño practico de aplicaciones

APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS CON VISUAL INITIALIZER 2 5 7

y temporizador semáforo

Figura A6.16. Ejecución del programa semáforo con pulsador con un escenario.

Para simular este programa se establece un punto de parada en el código que atiende a la inte­rrupción externa y se crea un escenario para provocar dicha interrupción. Dicho escenario se puede crear a través del menú Debugger->Stimulus Controller-New Scenario. En la lista Asynchronous Stimulus añada INTO con la acción Pulse High. Así, al pulsar sobre el símbolo > situado al inicio de la fila creada, el programa deberá parar su ejecución en la primera línea del código que atiende a la interrupción externa. Observará que entonces el semáforo se pondrá en rojo. Pero todavía 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 interrupción INTO se ha necesitado incluirla etiqueta__INTOInterrupt. Esta etiqueta se encuentra definida en el fichero p30f4013.gld. Puedeabrir este fichero y examinar la sección ** Section Map 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 módulo conversor analógico digital,__TI Interrupt para in­terrupciones del temporizador 1, etc. La siguiente tabla reúne algunas de estas etiquetas.

Page 276: DsPIC Diseño practico de aplicaciones

2 5 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

ETIQUETA INTERRUPCIÓN

__INTOInterrupt Interrupción externa por activación del pin INTO

__IC1 Interrupt Interrupción del módulo de captura de entrada IC1

OC1 Interrupt Interrupción del módulo de comparación de salida OC1

__T;1 Interrupt Interrupción provocada por el temporizador T1

__IC2 Interrupt Interrupción provocada por el módulo IC2

T2 Interrupt Interrupción provocada por el temporizador T2

_SPI1 Interrupt Interrupción provocada por el módulo SPI1

_UlRXInlerrupt Recepción de dato en el módulo UART U l

__UlTXInterrupt Interrupción provocada por el envío de un dato en el módulo UART U1

AUTOEVALUACION

Conceptos clave de este capítulo

¡ F j j f2. ¿Qué salida genera la herramienta Visual Initializer?3. ¿Cómo se puede sincronizar la velocidad con la que trabaja la herramienta Visual Initializer y el si­

mulador MPLAB SIM?4. ¿Do cuántos temporizadores dispone el controlador dsPIC30f4013?5. ¿Dónde se encuentran almacenadas las definiciones de las etiquetas correspondientes a las dis­

tintas interrupciones?

E jercicio

Page 277: DsPIC Diseño practico de aplicaciones

APLICACIÓNVrtV»Wl>

V iW 'W iX írtV

ÉB•••¡xoyivi-r,

. .v.v.»•«•»•<iw ííiv r> v iv iw .* iv iv iv .v .v /.

r * • / » / •Periféricos avanzados

Wffi

A7.1. INTRODUCCIÓN

A lo largo del presente tenia se manejarán diversos periféricos de los controladores dsPIC que son más específicos en el tratamiento de señales. Algunas aplicaciones son difíciles de simular ya que resulta complicado insertar una señal analógica al simulador, por eso, en algunos casos, el estudio se limita­rá a describir el periférico, sus posibilidades y su inicialización para su conecto funcionamiento.

A7.2. EL MOTOR DSP

El comportamiento de las instrucciones DSP puede variar en función de la configuración 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 continuación se ini- cializará el Visual Initializer y se seleccionará el icono DSP, arrastrándolo hasta la imagen del con­trolador. Al hacer doble clic con el ratón sobre dicho icono aparecerá en pantalla el cuadro de diá­logo correspondiente para la configuración del Motor DvSP. (Figura A7.1.)

P I Enable Saturation on Accumulator A.

n Enable Saturation on Accumulator B

H71 Enable Saturatbn on Dai a Space Writes from DSP Engine

He’p or. Cancel Apply

Figura A7.1. Ventana para la configuración del motor DSP.

25 9

Page 278: DsPIC Diseño practico de aplicaciones

2 6 0 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

Como primer parámetro, se configura el modo de multiplicación, Multiplication Mode. Este mo­do afecta a instrucciones como MAC. Afecta a todas aquellas en las que se use el multiplicador de17 bits del que disponen los dsPIC. Las instrucciones que se ven afectadas por esta configuración son las siguientes:

INSTRUCCIÓN DESCRIPCIÓN

MAC M ultiplicar y acumular.

MSC M ultiplicar y restar. Es equivalente a la anterior, pero en vez de sumar el resultado, lo resta.

MPY Multiplica dos valores y deja el resultado en el acumulador.

MPY.N Multiplica y niega el resultado. A ^ -B*C

ED Calcula la distancia euclídea parcial. A = (B-C)2

FDAC Calcula la distancia euclídea parcial y la acumula. A = A + (B-C)2

Si se elige como Multiplication Mode la opción ¡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 configuración del motor DSP.

Otra opción para configurar el Motor DSP es el Accumulator Roundy o redondeo del acumula­dor. Para este parámetro existen dos posibilidades, Convergente convergente y Conventional, con­vencional. La diferencia entre ambos modos se analiza en la parte teórica de esta obra, más con­cretamente en el Anexo del Capítulo 4, Manipulación de datos del Motor DSP.

Bajo el epígrafe Accumulator Saturation M ode , se permite configurar el modo de saturación, pudiendo elegir el modo 1.31, “normal”, que cargará en el acumulador destino el valor 1.31 m áximo positivo (ÜXÜ07FFFFFFF) o máximo negativo (0xFF80000000). El otro modo es el 9.31, “supersaturación”, donde cargará el valor 9.31 máximo (0x7FFFFFFFFF) o el mínimo (0x8000000000).

Y, por último, se dispone de la posibilidad de habilitar o deshabilitar el modo de saturación ele­gido para el acumulador A, B o la zona de memoria afectada por instrucciones DSP.

Una vez seleccionados los parámetros necesarios, basta activar la casilla Generate Code Onlyfor features/resources on processor package a través de la opción Code Generation Options del menú Visual Initializer, para que se genere el fichero init_dsPIC30F4013.s mediante la opción Code Ge­neration -> Save to ProjecL

Una vez generado el código de inicialización del proyecto, en el código fuente en ensamblador, se añade:

r.-.v-:-•? \ ¡Cali Visuallnitialization

: :r :

O bien, en lenguaje C: _ -

VísualIniíializationO;

A continuación, las instrucciones DSP que se utilicen se comportarán de acuerdo a los paráme­tros elegidos en los pasos anteriores.

Page 279: DsPIC Diseño practico de aplicaciones

APLICACIÓN 7: PERIFÉRICOS AVANZADOS 261

A7.3. CONVERSOR ANALÓGICO DIGITAL

El dsPIC30F40l 3 dispone de un conversor analógico digital de 12 bits de resolución. Para estudiar todas sus posibilidades, en primer lugar se presentan las características de este módulo para pasar a crear un proyecto en el que se estudiará un ejemplo de utilización.

A7.3.1. Descripción del módulo de Conversión Analógico Digital de 12 bits

El conversor analógico digital de 12 bits permite convertir señales analógicas de entrada en valores digitales de 12 bits con una velocidad de conversión de lOjis. Este módulo está basado en un regis­tro de aproximaciones sucesivas y soporta hasta 16 entradas analógicas multiplexadas sobre un am­plificador unipolar de muestreo y retención denominado CHO. La tensión de referencia puede pro­ceder de la tensión del controlador (AVdd y AVss) o bien de dos patitas que pueden recibir dicha tensión de referencia (Vref-i- y Vref-). Además este conversor puede funcionar mientras el procesa­dor está en modo Sleep con el oscilador RC.

El módulo dispone de varios registros para su control. Asi los registros ADCON1, ADCON2 y ADCON3 controlan el modo de trabajo del conversor analógico digital. El registro ADCHS, por su parte, selecciona los canales de entrada. El registro ADPCFG configura las patitas como entradas analógicas o como entradas/salidas digitales. Y el registro ADCSSL selecciona las entradas a esca­near o explorar. Los resultados de la conversión se guardan en un buffer de 16 palabras, denomina­das ADCBUFO, ADCBUF1,... ADCBUFF.

En la Figura A7.2 se muestra un esquema del módulo conversor.

Figura A7.2. Esquema del Conversor Analógico Digital de 12 bits.

Page 280: DsPIC Diseño practico de aplicaciones

2 6 2 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

Para realizar una conversión, se deben seguir los siguientes pasos:

1. Configurar las patitas analógicas, las tensiones de referencia y las entradas y salidas digitales.2. Seleccionar los canales de entrada A/D.3. Seleccionar el reloj para la conversión.4. Seleccionar el disparo (trigger) de la conversión.5. Poner en marcha el módulo A/D.6. Configurar la interrupción (si fuera necesario).

a. Limpiar el bit ADIF.b. Seleccionar la prioridad de la interrupción.c. Activar el bit ADIE.

7. Comenzar el muestreo.8. Comenzar la conversión.9. Esperar a que se complete la conversión, lo que se detecta por una interrupción o porque el bit

DONE del registro ADCON1 se pone a 1.10. Leer el buffer A/D con el resultado (ADCBUFO, ADCBUF1,...) y limpiar el bit ADIF.

A7.3.2. Trabajando con el m ódulo

Para trabajar con el conversor AD cree un proyecto para el dsPTC30F4013, inicie la herramienta Visual Initializer. cam bie el Pcickage y acceda a la opción AD C del menú de periféricos del controlador. Pinche y arrastre el icono denominado 12-Bit A to D hasta la figura del contro­lador. Al hacer doble clic aparecerá en pantalla el cuadro de diálogo representado en la Figura A7.3.

' ? hir A/n Converter Configuration

Opeiaforá! Sailings -

□ ír-asIso.'íStcrt'.-pDala OiipU Fu-tnat ¡ U ríigrcc I rilóse

Vcfcage Reí Souc«: ¡AVdd u Vtefh. AVss VrcH

- Mode S e tth # ...........- - -

Samclh; Mode ¡ Conversen Mode ;________

CJ Al!, between Samóte AS B ¡roiís

□ Frotí« íh scanning c( á!fe;ent A'D ¡rputa irlo CHO «aroVíí

SaTolro Stait Mo». i ¡S ancirm i*ledmanual/

IrpUsto be sc3mcd:¡LjlnoUO¡i*! Irpi* I-!□ irpLí 2;5LUtpU3 v

Hefp

CFU Siaes Operation[MoCPU Ido Oration ! Ccnir.wo v ■

A/O lrp .it Settings IfHO) "

Corfipj'e as A/D Irrcuii

HÍ'PinO ~ ^ y F iii -■y. Fri 2 y Pri 3 v.

AcoV

Irteríup! Sellings--------------

O Enafcic Irteiiutf on Siérttp

Irterrupt Fikxly. ¿ v

SaTtrfe A Pos Input , AH 0

Sarrpìe A Neg. Input : VflE F-

Sarpf© B Pot Inpt/. ¡AMO

Serrcte B Neg. Input: ¡\*rl£F-

Figura A7.3. Cuadro de diálogo para la configuración del conversor analógico digital de 12 bits.

Desde la ventana de la Figura A7.3 podrá configurar muchos aspectos del conversor analógico digital de 12 bits de resolución. A continuación se estudia cada uno de los apartados del cuadro de diálogo.

Page 281: DsPIC Diseño practico de aplicaciones

APLICACIÓN 7: PERIFÉRICOS AVANZADOS 263

Operational Settings

Enable on startup- Activando esta casillael conversor analógico digital se activa al iniciarse la eje­cución del programa. De no marcarlo, se deberá activar a 1 el bit ADON del registro ADCON1 pa­ra que se inicie el proceso dé conversión.Data Output Format: Establece cómo se desea recibirlos datos de la conversión, si enteros sin sig­no (Unsigned Integer), enteros.con signo (Signed Integer), fracciónales sin signo (Unsigned Frac­tional) o fracciónales con signo (Signed Fractional).Voltage Ref Sources Sirve para seleccionar la tensión de referencia. En esta lista despíegable se puede elegir entre cuatro opciones diferentes. Se puede elegir la tensión de las patitas AVdd y AVss como referencia, o la tensión de las patitas Vref+ y Vref-, entre otras.

• CPU Sleep Operation: Mediante esta opción se indica qué acción 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 periférico continúa su operación (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­ción cuando finalice la conversión. Es posible establecer que la interrupción se active al iniciarse el módulo así como su prioridad. Para atender a dicha interrupción deberemos usar la etiqueta _AD- Cínterrupt.

En el cuadro A/D fnput Settings (CHO) se configuran los canales de entrada del conversor. Esta­blece las patitas que serán utilizadas para realizar la conversión, 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­lógicas. Se marcan con un tick aquellas que se van a usar en el proceso de conversión.

Mode SettingsPara seguir configurando el modo de funcionamiento del conversor analógico digital hay que es­

tablecer cuándo se debe empezar a realizar el muestreo, cuándo realizar la conversión, etc. Para ello la herramienta dispone del cuadro Mode Settings, que se encuentra divido en las pestañas Sampling Mode y Conversión Mode. (Figura A7.4.)

; SampingMode j~Convession Mods!

• dJ 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. Configuración del modo de funcionamiento del conversor, pestaña Sampling Mode.

Page 282: DsPIC Diseño practico de aplicaciones

2 6 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Bajo la pestaña Sampling Mode, de la Figura A7.4, se pueden seleccionar las siguientes opciones:

P. Al seleccionar con un Lick la opción Alt. Between Sample A & B inputs, la entrada se irá al­ternando entre el multiplexor A y el B.

2a. Habilitando la opción 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 retención CHO.

3a. En Sampling Start Mode se puede elegir cómo comienza el muestreo en la conversión, pu- diendo elegir entre manual (Sampling started manually) para lo que hay que poner a 1 el bit SAMP del registro ADCON1, o automáticamente tras la conversión anterior (Automatically after previous conversion). En este caso, es el bit ASAM del registro ADCON1 el que se de­bería poner a 1 en caso de no usar la herramienta Visual Initializer, ya que ésta lo hará de for­ma automática.

4a. Por último, se puede seleccionar entre las 13 entradas.

En la pestaña Conversion Mode se establecen los parámetros correspondientes a la operación de conversión. (Figura A7.5.)

¡ Sampfrig Mode j Conversion Mode j

Trigger Source: M anual Dearing of SAM P bit v

Sample Period: 0 ~ ] usee

X Error: 0 ! (Calc.)

Conversions / Int: i

Conversion Period: 0 ■ usee (Caic.)

Clock Source •5* Tcy

A/D Buffer Fill Mode: Do not alt. fill both halves of A/D ;y

Figura A7.5. Configuración del modo de funcionamiento del conversor con la pestaña Conversión Mode.

1. En la opción Trigger Source, se establece cuándo se activa la fase de conversión, que puede hacerse manualmente, una vez que se borre el bit SAMP (Manual clearing o fS A M bit) del registro ADCON1, mediante una transición por flanco ascendente en la patita INTO (Active Transition on INTO). También se puede hacer de forma síncrona utilizando el temporizador Timer 3 (Timer3 Compare) o el temporizador interno (Intemal 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 número de conversiones que se realizarán an­

tes de que se genere la interrupción. Ese número debe ser menor que el número de bulfers (16) ADCBUF, ya que de lo contrario se perdería algún dato de la conversión. Este paráme­tro se guarda en el registro ADCON2, en los bits SMPI. Después de cada interrupción, los da­tos comienzan a guardarse siempre desde ADCBUFO.

4. En la casilla Clock Source se selecciona el reloj de conversión. La velocidad máxima es de 12 períodos 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 conversión (Alt two 8words bujfers ofA/D), o bien, no dividirlos (Do not Alt. Fill both halves ofA/D). Esta de­cisión dependerá del tiempo que emplee la interrupción en procesar los datos de la conversión.

Page 283: DsPIC Diseño practico de aplicaciones

APLICACIÓN 7: PERIFÉRICOS AVANZADOS 2 6 5

Puede ser interesante realizar la conversión en modo SIeep ya que con ello se reduce notable­mente la posibilidad de recibir ruido provocado por el resto de periféricos 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. inicialización se activa el módulo.m Enable interrupt on startup. Establece una interrupción para cuando se lleve a cabo la con versión.• En la pestaña Sampling Mode se elige Input 0.• En la lista Sampling St^rt Mode se elige "automatically after previous conversion Asf tras una con­

versión comenzará la siguiente automáticamente.• En la opción Trigger Source de la pestaña Conversion Mode se selecciona Internal Timer.• Como Sample Period, se escoge un período de 0.002 fe.• [ En la pestaña Clock Source, se elige 30* .5* . Tcy.

El resto de parámetros se dejan tal cual aparecen por defecto en la herramienta Visual Initializer. A continuación, se activa la casilla Generate Code Only forfeatures/resources on processor pac­

kage a través de la opción Code Generation Options del menú Visual Initializer. Se genera el fichero init_dsPIC30F4013.s mediante la opción Code Generation -> Save to Project.

PROGRAMA CAD .include "p30f40J 3.inc'’.GLOBAL „main .text _mairi:call JVisual Initialization bucle: goto bucle

Tratamiento de la interrupción .global ___ADCInterrupt ADCInterrupt: ;Etiqueta correspondiente a la interrupción

BCLR IFSO, #ADIF ; Borramos el flag de la interrupciónLeemos el resultado en ADCBUFO :Aquí trataríamos la interrupción

RETFIE.end

\ \ simular este programa se aprecia cómo se accede periódicamente al tratamiento de la inte­rrupción. Aunque también sucede que la simulación se para en un punto del programa. Esto es de- h tio a que no se ha aplicado una señal simulada en la patita muestreada. Volviendo a ejecutar la op­taré Run del simulador, eliminaremos este problema. Cuando se detenga en el punto de ruptura sc iriec ido , el programa estará situado en la zona de instrucciones donde se debería tratar la lectu- bl recogida en el buffer ADCBUFO. Mediante la opción Debugger -> Stopwach se podrá estudiar e . r-empo transcurrido entre cada lectura.

;ínicializamos el conversor analógico digital ;Permanecemos en un bucle infinito

Page 284: DsPIC Diseño practico de aplicaciones

2 6 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Modifique los parámetros del Visual Initializer y siga estudiando los tiempos obtenidos. No así los datos obtenidos en ADCBUFO, pues es complicado simular una entrada analógica en las patitas de entrada, por lo que el resultado de la conversión siempre es cero.

Otro ejercicio interesante consiste en analizar la secuencia generada en el fichero init_ds- PIC30F4013.S para la inicialización del módulo.

El programa anterior desarrollado en lenguaje C sería el siguiente:

Contenido del fichero main.c

//PROGRAMA CADc # include ,'p30f4013.h" mint main (void) /tVisualínitializationQ; //Inicializamos el conversor while (1); // Entramos en un bucle infinito return 0;

}l’.y.yX''

Contenido dei ficherò adcint.c

••• •: .;X;#include ”p30f40í3.h"unsigned int ADResultl = 0; //Variable donde guardamos el resultado conversión

//Función que atiende a la interrupción por el módulo Conversor A/Dvoid__attribute__((__interrupt__)) _ADClnterrupt(void);void attribute (( interrupt )) ADCInterrupt(void)I

IFSObits.ADIF = 0; //Reestablecemos el flag de interrup. ADResultl = ADCBUFO; //Guardamos el resultado en ADResult 1

A7.4. C O M U N IC AC IO N E S UART

Este módulo permite establecer comunicaciones serie con el exterior. Se trata de un transmisor re­ceptor asincrono, bidireccional, con un buffer de transmisión y recepción de 4 caracteres. Dispone de 2 patitas, denominadas TX y RX, que permiten enviar y recibir información en serie con la po­sibilidad de activar una interrupción cada vez que se reciba o se envie un dato.

Entre otros, para trabajar con el módulo UART, se utilizarán los registros U1TXREG para trans­mitir los datos, U1RXREG para recibir los datos, U 1MODE para configurar el módulo, U1BRG para configurar la velocidad de transferencia en baudios y U1STA para comprobar el estado del módulo.

La comunicación serie es un protocolo de comunicación muy extendido y conocido, por lo que a continuación y sin más preámbulos, se desarrolla un primer ejemplo Hola amigo, que transmite el mensaje Hola amigo!

Page 285: DsPIC Diseño practico de aplicaciones

APLICACIÓN 7: PERIFÉRICOS AVANZADOS 26 7

La herramienta Visual Initializer configurará al módulo UART. Se crea un proyecto para el ds- PIC30F40I3 y se inicializa Visual Initializer. Se cambia el encapsulado del dsPIC a formato PDIP y se elige del menú de periféricos la opción UART.

El dsPIC dispone de dos módulos para comunicaciones UART. Se escoge el módulo UART1 y se arrastra hasta el dsPIC. Una vez allí, se hace doble clic sobre el mismo accediendo al cuadro de diálogo de configuración de dicho módulo UART1. (Figura A7.6.)

IJARTC Configuration.

• Coirniumsctcn Settojs - - ...................... ...........

0 Erv±lc en Startup CPU Sleep Operation ¡ No tAake-up v

Dock Source1; MítA- í: el: :!■■! • : CR-* Idte Operatic«; | Continue v

SaudRate: .99X5 ¡tes v |

% Error 0 (Cae.)il-C ' .V v V jK íí ; . ; 'ó ;.;

O Enafcte auto-bdud detection

DctoBh: ¡8 v

Stop Bits: |1 v

: : £ri«K«s Afcct'rijtc P?r?

I~| Enable loopback hetvceen T x í Rx

pcrüy: [Nopanty v ! Icíe C lxk ParJy: ¡Active H ¡gh

Opcicbcnal Scltngs

i f

Recewsr Transmfcter

0 Erwble 7 ifinsmt

CJ Enable Irten^it o» Startup

InieffuptPiiwfcy:

Generate Int on buffe;si:e: ¡ 1 Ernply

Hefp OK Cancel A c tfy

Figura A7.6. Cuadro de dialogo para la configuración del módulo UART1.

Se habilita el módulo en el inicio del programa activando la casilla Entibie on Startup. Si en vez de hacerlo automáticamente fuese manualmente habría 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 número de bits por carácter, 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 opción No parity. De esta forma el mó­dulo se configura para una comunicación a 9.600 baudios. 8 bits por carácter y 1 de stop.

En la pestaña Transmitter se activa la casilla Enable Transmit para permitir la transmisión de datos.El Visual Initializer configura automáticamente al módulo para 9.600 baudios, como se puede

apreciar haciendo doble clic sobre el icono Oscilador. Si desea configurar el módulo 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 según el módulo seleccionado) de acuerdo con la siguiente fórmula:

UxBRG = (Frecuencia / (16 • Baudios)) -1

Dispone de un ejemplo en el Laboratorio 4, Comunicación USART ene ripiada.Tras esta aclaración se genera el código de inicialización, para lo cual en la opción Visual Ini­

tializer -> Code Generation Options se marca la opción Gene rate Code Only fo r features/resources on processor package. A continuación, se elige la opción del menú Visual Initializer -> Code Ge­neration, y se salva el código de inicialización en el proyecto gracias a la opción Save to Project.

Page 286: DsPIC Diseño practico de aplicaciones

2 68 dsPIC DISEÑO PRÁCTICO 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 sección 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 dspicmov #Mensaje,Wl ;Mueve a W1 la dirección del mensaje

Bucle:mov.b [ W1 ++), WO ;Lee el dato en WOcpO.b WO ;Si el dato es 0bra Z,Fin ;entonces ha acabado y salta a Fincall MandaCaracter ;En caso contrario escribe el caracterbra Bucle ;repite el bucle

MandaCaracter:btss U1 STA,#TRMT ;Espera a poder transmitirbra MandaCaracter ;Si no puede transmitir sigue esperandomov W0,U1TXREG ;Escribe el caracter en el buffer TXreturn ;retoma a la llamada

Fin:nop ;Fin del programa

.end

Para ver cómo 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 módulo UART aparezcan por pantalla. Basta con acceder al menú Debugger->Settings... y, en la pestaña UART 10. se activa la casilla Enable UART 10 y luego se elige en la opción Window en el marco Output para que el resultado de la salida del módulo se visualice en pantalla. (Figura A7.7.)

Figura A7.7. Configuración del simulador para que muestre los datos del módulo UART en pantalla.

Page 287: DsPIC Diseño practico de aplicaciones

APLICACIÓN 7: PERIFÉRICOS AVANZADOS 26 9

Se ejecuta el proyecto, se aprecia cómo en la ventana Output, dentro de la pestaña correspon­diente al simulador SIM UARTJ, aparece el mensaje esperado Hola mundo! (Figura A7.8.)

Output

i Buüd ¡; Version Control !¡ Find in Files : Visual Infcalizet MPLAB SIM [ SIM U a f t l ^

Hola mundo!

Figura A7.8. Visualization de la salida del módulo UART1.

Una vez configurado el módulo 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 escribiéndolo en el registro U1TXREG.

Para recibir un dato, se habilita una interrupción en la inicialización del módulo UART1 y se usa la etiqueta__U 1 RXInterrupt para acceder al dato que se recibe en U1RXREG.

A7.5. M ÓDULO DE CAPTURA DE ENTRADA

El dsPIC30F4013 dispone de 4 módulos de captura de entrada. Se utilizan para capturar la infor­mación de un temporizador cuando se produce cierto evento en una patita de entrada del controla­dor. Cada uno de estos módulos se denominan genéricamente IC 1, IC2, IC7 e IC8. Pueden ser muy útiles para medir la anchura de un pulso o la frecuencia de una señal.

Cada módulo tiene asociado un registro de control, así para el módulo 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:

• Detección de flancos ascendentes y descendentes.• Detección de flancos descendentes.

Detección de flancos ascendentes.Detección de 4 flancos ascendentes.Detección de 16 flancos ascendenetes.

Mediante el bit ICTMR se selecciona la fuente de reloj del temporizador. Debe elegir entre el Ti- mer2 y el Timer3. (Figura A7.9.)

La herramienta Visual Initializer permite configurar este módulo fácilmente, pero si prefiere co­nocer exactamente los pasos necesarios puede analizar el código generado por dicha herramienta.

Para configurar este módulo no sólo es necesario añadir el icono correspondiente al IC1 al con­trolador, sino también el Timer3 que es el que controla el tiempo. La Figura A7.10. muestra algu­nos posibles valores de configuración.

A continuación se debe añadir el módulo IC1. Como se pretende configurar el módulo IC1 para medir la anchura de un pulso, los parámetros que se deben definir son los siguientes:

Page 288: DsPIC Diseño practico de aplicaciones

2 7 0 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

I Cxx Prescaler Detector de flanco y sincronizador

1fLógica de

c o n t r a i

T.\jR2

v -¿jo tm r

Flag de interrupción#" ICxF

ÏICxBUF

FIFO

Figura A7.9. Esquema del módulo de captura de entrada.

16 lì» Timer 3 Configuration

• Opcfoli s ro l S c tthgs — ■— ----------------;------------------------------------------ i

; 5 0 Enobie on Startup CPU Id c Opwolion

; O Gated Time Accurrdab'on ..........._‘ 1 j

: 7 rner CSock Prescale:; 1 64 y , Postscsie: 1

• Timei Pefiod: ! j ____________: (msec)

7 met Frequency: |1 ; (KHz) (Calc)

i_____________________________■ Interrupt ---------------------- —— — — --------- :

j [11 Enable IrtciruD! on Startup

Intciiupt P iiaity. V j j

Figura A7.10. C.onfiguración del Timer3 para su empleo con el módulo IC1.

• Timebase fo r input capture: Selección 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 módulo, 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í

Page 289: DsPIC Diseño practico de aplicaciones

APLICACIÓN 7: PERIFÉRICOS AVANZADOS 271

pulso, se generará una interrupción 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 interrupción para tratar estos eventos mediante la opción Enable interrupt on startup e Interrupt Priority.

Input Capture Configuration

Input Cápiuie Settings

IC1 [lC2 ~Íf í¿7 " XtC8 !

T imebate for jiput capture : T rrei 3 .v : ¡

Capluie Operata*} Mode: 5Capture eveiy rising ©dos

Ccplice Evcrjts per Interrupt: Capture eveiy event y .\

CPU Idte Operation ■ Contnue y

3 E rabie Inleirupl en Startup

fníerupt Prsoñty. 4 ..*>

< !................. — ^

r ~h " OK. ] [ Cancel App!

Figura A7.11. Configuración del módulo de captura de entrada.

Para tratar la interrupción correspondiente, se empica la etiqueta__IClInterrupt.Si, por el contrario, se desea calcular la frecuencia de una señal, hay que configurar el módulo

de captura de entrada, igual que en el ejemplo anterior, a excepeción 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 también la diferencia entre dos flancos ascendentes proporciona el período de la señal, cuyo valor inverso es la frecuencia de la señal.

También suele utilizarse este módulo para el modo de detección automática de velocidad del mó­dulo UART.

A7.6. M Ó D U L O DE CO M PAR AC IÓ N DE SALIDA

El controlador dsPIC30F4013 dispone de 4 módulos de comparación de salida de 16 bits, idénticos entre sí e identificados como OC1, OC2, OC3 y OC4. Permiten comparar el valor de un temporiza- dor con el valor de uno o dos registros. Además permiten generar un pulso o tren de pulsos de sali­da en el momento de la comparación. Estos módulos controlan el funcionamiento de las patitas de salida OC1, OC2, OC3 y OC4 respectivamente, por los que se genera la salida en función del re­sultado de la comparación.

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­ción del módulo OC1, OCIR, registro de datos del módulo y OC1RS, registro de datos secundario, que determinan el funcionamiento del mismo.

Se inicializa el Visual Initializer y se selecciona el módulo OC (Output Compare) que se arrastra hasta el controlador. Previamente, se añade el Timer2, necesario para el funcionamiento del mismo.

Page 290: DsPIC Diseño practico de aplicaciones

2 7 2 dsPIC. DISEÑO PRÁCTICO DE APLICACION ES

-Output Compare Settings

QCn IQC2 ll 0C3 f o c T l

0C1R (hex]:

OCIRS ft*»)

CPU Idle Operation

I QK 1 I Cared | ( Appty |

Figura A7.12. Configuración del módulo de comparación de salida.

En primer lugar se selecciona el módulo O Cl accediendo a la pestaña correspondiente. A con­tinuación, 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 pestaña Timebasefor input com­pare se selecciona Timer 2.

Después, en la lista Compare Operating Mode, se elige el modo de operación del módulo. Exis­ten los siguientes módulos:

Compare channel disabledMediante esta opción se deshabilita el módulo y no funciona.

OCx pin low to highEn este modo, la patita OCl 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 interrupción 2 ciclos de reloj después de activarse la señal O C l.

OCx pin high to lowEn este caso la patita OCl se pondrá a 0 un ciclo de reloj después de que el temporizador selec­cionado alcance el valor del registro OC1R. También en este modo de operación la interrupción se activa 2 ciclos después de que la señal pasa a 0.

Toggles OCx pinEn este caso, la patita O Cl invierte su valor un ciclo después de que el temporizador seleccio­nado haya alcanzado el valor almacenado en el registro O C 1R. La interrupción correspondiente también se genera 2 ciclos después de este evento.

Single Output Pulse on OCx PinLa patita OCl 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 lógico 1 hasta el mismo ciclo en el que el temporizador toma el valor de OC1RS. Una vez alcanzado el valor de OC 1 RS, aunque el tem­porizador vuelva a alcanzar los valores OC1R u OC1RS, la salida OCl seguirá a nivel lógico 0.

Page 291: DsPIC Diseño practico de aplicaciones

APLICACIÓN 7: PERIFÉRICOS AVANZADOS 2 73

Continuous Outpuí pulses on OCx PinEste modo es idéntico al anterior salvo que las siguientes veces que el temporizado!* alcanza elvalor OC1R se vuelve a generar el pulso en la salida OCL

PWM mode Fault pin disabledGeneración de un tren de pulsos de anchura variable con la patita de fallo desactivado.

PWM mode Fault p in enabledGeneración de un tren de pulsos de anchura variable con la patita de fallo activado. La patita de fa­llo provoca una interrupción 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 interrupción correspondiente. Dicho valor se escribe en hexade- cimal 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 período hasta otro. Dicho valor se coloca en hexadecimal y será 010A.

Por último, se marca la opción Enable Jnterrupt on startup, para provocar una interrupción dos ciclos más tarde de comenzar la salida deseada en OC1.

• Complete la tabla con los valores de OCI para distintos valores de TIMER2 en función de los parámetros elegidos en el Apartado A7.6

TIMER2 OC1

0x00f f 0

0x0 1 00

0 x 0 / 0 7

0x0102

0x0103

0x0109

0x010A

0x0 JOB

0x0 WC

• ¿Qué valor tendrá el T/MER2 cuando se provoque la interrupción__OCI Interrupt?

En la tercera parte de esta obra podrá encontrar un ejemplo de utilización de este módulo para el control de motores. Más concretamente en el Laboratorio 5, Control de motores mediante PWM , se hace uso de este módulo para controlar la velocidad de un motor y conseguir distintas velocidades de una forma sencilla.

Page 292: DsPIC Diseño practico de aplicaciones

2 7 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

A7.7. CONSIDERACIONES FINALES

A lo largo de la sección Programación y Simulación de Aplicaciones se ha tratado de proporcionar al lector las habilidades necesarias para iniciarse en la programación de los controladores dsPTC, una lase previa a la implcmentación física de soluciones hardware basadas en controladores dsPTC que abordaremos en la última sección del presente libro, denominada Laboratorio Experimental, y siempre tratando de presentar las características de estos controladores y su uso, de la forma más sencilla y clara posible.

AUTOEVALUACIÓN

Conceptos clave de este capítulo

1. ¿A qué instrucciones afecta la configuración del Motor DSP?2. ¿Qué significa que la resolución del convcrsor analógico digital sea de 12 bits?3. ¿Para qué se necesita un temporizador junto con el módulo Input Capture?4. ¿Qué utilidad pueden desempeñar los módulos de comparación de salida?5. ¿Cómo se puede configurar el módulo UART para una comunicación a 2400 baudios, 8 bits de

datos y uno de parada?

Ejercicios

1. Medíanle el simulador, almacene el siguiente código en memoria EEPROM:

Dirección Contenido

7FFCÓ0 0x4 F 4 8

7FFC02 0x414C

A continuación, cree un programa en ensamblador que transmita por el puerto serie el contenido de esas direcciones de memoria. Simúlelo y descubra el mensaje enviado.

IIS * v ‘1 - £2. Programe y simule un programa en lenguaje C; de forma que se lleve a cabo una conversión ana­

lógico digital por la patita ANO, con tensión de referencia en VREFH y VREFL, utilizando el tempo­rizador interno con un período de muestreo de 0,002/is., con una velocidad de reloj de muestreo de 30 * .5 * .Tcy, de forma que cada 5 muéstreos se genere una interrupción y obtenga la media de esos 5 valores.Al tratarse de un periférico 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.

Page 293: DsPIC Diseño practico de aplicaciones

1 . ...... : : ; r::: : : : 'Vi.. . . " ' . Ai

r n l r a t e__. -‘. ‘i ÍY A Y A ’i MVv

del CD e instalación de las herramientas de trabajo

CONTENIDO DEL CD

El CD que acompaña 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 organización del CD en distintas carpetas se corresponde con la de la Figura AP.l.

aplicac io n es

DSPIC FD LITE

LABORATORIOS

MPIABIDE

Figura AP.1. Árbol de directorios del C.D.

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 capítulo/aplicación con los listados de los ejemplos realizados y, en la carpeta Filtros, encontraremos el fichero señal con rui­do.wav necesario para la aplicación 1. Por último, también existe una carpeta denominada Autoe- valuación donde se encuentran los listados de los programas necesarios para la resolución de los ejercicios de autoevaluación.

La carpeta LABORATORIOS se encuentra subdividida en tantas subcarpetas como laboratorios realizados en el libro. Estas carpetas contienen el código fuente utilizado en cada uno de ellos y to­dos los ficheros necesarios.

En las carpetas MPLAB IDE, DSPICWORKS, DSPIC FD LITE, MPLAB C30 y WINPIC800, pueden encontrarse los programas de instalación de estas herramientas. Todos estos programas son propiedad de Microchip y los tiene registrados en todo el mundo. Además las versiones más actua­les de los mismos las puede encontrar en su sitio de Internet www.microchip.com.

DPP

DOCUMENTACION

DSPICWORKS

MPLAB C30

WINPICSOO

275

Page 294: DsPIC Diseño practico de aplicaciones

2 7 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

En la carpeta DOCUMENTACIÓNpuede encontrar distintos datasheets de las distintas familias de dsPIC.

INSTALACIÓN 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 acompaña al libro y ejecutando el programa Install_MPLAB_v730b.exe.También se puede obtener la última versión de este soft­ware acccdicndo a la web de Microchip, www.microchip.com.

Una vez iniciada la instalación se debe esperar hasta observar el primer cuadro de diálogo de la aplicación de instalación. Es conveniente cerrar el resto de aplicaciones abiertas en ese momento. En este primer cuadro de diálogo pulsamos Next. A continuación hay que aceptar el contrato me­diante la opción / agree y pulsamos de nuevo Next. (Figura AP.2.)

Figura AP.2. Instalación de la herramienta MPLAB IDE.

A continuación, se elige el tipo de instalación, que se recomienda la instalación completa, Com­plete. V se sigue pulsando Next hasta que se llega al cuadro de diálogo 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 instalación base las referencias dadas en el libro no serán válidas.

Tras esto, continúa la instalación 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 instalación pregunta si se desea leer instrucciones para la instalación de otras herramientas, como por ejemplo el 1CD2. En tal caso, se contesta que sí se quiere leer dichas instrucciones, e in­cluso sería recomendable imprimirlas. (Figura AP.4.)

Page 295: DsPIC Diseño practico de aplicaciones

APÉNDICE A: CONTENIDO DEL CD E INSTALACIÓN DE LAS HERRAMIENTAS DE TRABAJO 2 7 7

Setup w l h:iaC MFt 48 7 «1» v? 50 n Ibe fotoftvic lefctef.

To ir«!al re lin fo«Je*. cfcK Mé«t To ¡Cítal lu a dlfaerA fotts:. d rk Browie end sefey »wlheí íMk

r. Oeaiociion

isa*. M R .» Tccte v 7 ^ 0 *v HCWOÍ* phc<o

C hoose D citm olion Location

Sritti- M y « to ic ss ltp w l n sN Ilie : M ic r o c h ip

J i . : •C'Wiww « p:oaaro#Ríitt;hp\

Figura AP.3. Selección de la carpeta de destino.

:-:-:%y¿';-Xvívví.......í:*».c/o

He*>

Choose Destination Locatoti Sètect lodn «bree letup w l n:tal He: M ic r o c h ip

Sftìo VAI MFL-B T cctt v7.2ü n !n* IcA/wu luUe*

T0 it í t i l to lr«> lotee«. Citó-. Newl I o risU to e dEieier> fafdei, cfc* Btowíc and «ccí w riet foie«.

r Destratan FrfJei.......................

C \Aid-ivo3 ce prosiemaÚtafCChiA

. “• Hciosoft Photo

Figura AP.4. Visualizando las instrucciones de instalación de la herrmienta ICD2.

Por último, al pinchar en el último cuadro de diálogo de la instalación, el botón Finish, aparece­rá en pantalla un visor de documentación de la empresa Microchip, visor que se puede cerrar para empezar a trabajar con el MPLAB IDE. (Figura AP.5.)

Page 296: DsPIC Diseño practico de aplicaciones

2 7 8 dsPIC. DISEÑO PRÁCTICO DE API ICACIONES

3 UIH All UH OuCuiiU'iil Viewer

r ttcsbft 'r xa L*o. . H '-B»! A? rC€ rw ir*rI

VCfSDT.'W« - - ----;--- : W ---- ' ■ •

M W W M ) Assembler versar. v4.02 ] CD 2 I i-C ro it C e tw w r ] CE 2COJ IivOfCui Erofor«1CE -1003 In Q rcu t E rm i«« i t t v / ,2 0FM3 Cìv ì:b ?rcg-«tfin*iSIM JfnuWofVDl Msud Ce»:e tmtelserM=l[Mi(TM] Ctyrv. Ui»«< end W » te vD ifH W I rio,*!"-/"'*

In R iia o cn Heip K te i ( le x t O iy )

r -«.A 3 ICO ? U?E OcvKe Ctr«w Üean M=(.M) 1CD 2 '_CU CiVKe Orr«w insWlstco r«M.fl3 ICE 2k P ífclr Fw t Ctivw Ife¿d«ltC M-\.\3 ICE 2>: 1153 oxt-vtfr Ocvro C*to» G ì. M?l A3 ICE 7X USB Cowefter Device Cmtt in I r«M-A*J ICE 4K US9 Or-i-.e Driver Cfeen M » . .\3 ICE 41: U53 Owvitó Dirv* jn ite ls fn Mil.A3 Pv 5 U53 C ^ C d D-lvc- CW.V.MK.A9 PV2 U3D Oevtte Unvsr ln s te la ta n Macchia Cn The Wsb

;• V; v,¡svyiv-

Releose Heces t e r d*?£c<i>.} L x r.ju * ? « lo 2? A s t i l 200=

c o s n n s

1. Cvervr ev£ . CHU C c r.a ra l 7-jM íc L ic e rn e5. T :.vi-_'<•* Su purtud4 . In s c a b la t io n5. Ki^r&cina co Versici» 1.3xC. Hurt:1» Jí.v ir. thi» Bol»««7 . y ix e t l Is s u e s8 . L ió le s c io n sV. Cmtoa«c Support

>i» í « H5UBIW SSS, v i . 32

O vxxvitv

Tìie HP1A3 II>2 r e le a s e o I 4s 7 I C lan gu ag e coo»« c o n s is t , ai tui u t a o b i« < ji ic 3 0 -» « . • * • > , «né a l i n x « : { p ic 3 0 - ld . c x e ) . I& c t f iC r 'S G u ide d e s c r i a d d i t io n a l U t i l i t i e s ch o c « re n o e s u p p o r t .d b y th « KPLiE IC'3 s r. A th « i« io E « u « not. s u p p l ie d i n c h is r e le a s e .

2 . GOT G e n e ra l P \t i» ilc L ice n se

U jr.h r.h» •xe a p s i.e n a n e t . c b . lo v , t i i * ds? IC o o o lc a re 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 he 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 ; ic s i c j i e a co fis i s t r e c l y d is - r lb u c e -3 an il ova-, lo b i» t o t h -

Figura AP.5. Visor de documentación del MPLAB IDE.

INSTALACIÓN DE MPLAB C30

Se recuerda una vez más, que la versión del compilador de C MPLAB C30 que distribuye libre­mente Microchip y que se acompaña en este CD, es una versión para estudiantes. Esta versión, pa­sados 60 días tras su evaluación, pierde ciertas funcionalidades pero sigue siendo funcional. En ca­so de que no sea estudiante, debería descargar de la web de Microchip una versión de evaluación de 60 días 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 acompaña al libro. La instalación es bastante trivial, se deben acep­tar todas las opciones por defecto del programa de instalación y mediante el botón Next avanzar en la misma hasta que se muestre un cuadro de diálogo como el de la Figura AP.6. Hay que contestar Yes y finalizar la instalación pulsando el botón Finish.

INSTALACIÓN DE DSPICWORKS

Para instalar esta herramienta, se ejecuta el programa setup.exe de la carpeta DSP/CWORKS del CD que acompaña el libro. La instalación resulta trivial, simplemente se acepta todo sobre las distintas opciones que por defecto marca el programa, pulsando el botón Next, hasta llegar a la última pan­talla donde se pulsa el botón Finish, tras lo cual habrá concluido la instalación de esta aplicación.

INSTALACIÓN DEL dsPIC Fd Lite

Para instalar esta herramienta se ejecuta el programa setup.exe de la caipeta dsPIC Fd Lite del CD que acompaña el libro.

Page 297: DsPIC Diseño practico de aplicaciones

APÉNDICE A: CONTENIDO DEL CD E INSTALACIÓN DE LAS HERRAMIENTAS DE TRABAJO 27 9

Figura AP.6. Configuración de las variables de entorno.

I ,a instalación resulta trivial, simplemente se acepta todo sobre las distintas opciones que por de­fecto marca el programa, pulsando el botón Next, hasta llegar a la última pantalla donde al pulsar el botón Finish, se concluye la instalación de esta aplicación.

INSTALACIÓN DE W INPIC800

La instalación del WinPic800 es bastante simple, basta con copiar la carpeta WinPicSOO en el disco duro, seleccionar todos los ficheros copiados y, mediante el botón derecho y la opción Propiedades, desmarcar la opción de Sólo lectura. Tras esto bastará con ejecutar directamente el programa Win- Pic800.exe para tenerlo funcionando. Este programa de Siseo Benach es de libre distribución y pue­de encontrarse actualizado en http://perso.wanadoo.es/siscobf/winpic800.htm.

Page 298: DsPIC Diseño practico de aplicaciones
Page 299: DsPIC Diseño practico de aplicaciones

ejercicios de autoevaluación

SOLUCIONES APLICACIÓN 0

/. ¿Con qué herramienta se desarrollarán los programas para dsPlC ?Para los desarrollos propuestos se utiliza la herramienta MPLAB IDE, que genera los códi­gos fuente, que se compilarán y simularán.

2. ¿ Es necesaria en esta segunda parte alguna placa de desarrollo o hardware basado en dsPlC? No, sólo es necesario un PC y el software del CD que acompaña al libro para realizar todos los ejercicios y simulaciones planteados.

3. ¿De cuánta memoria de datos y de programa dispone el dsPiC30F4013?Memoria 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 instalación del compilador de lenguaje C MPLAB C30, ya que es una versión demo y una vez instalado, sólo se puede utilizar de forma gratuita duran­te 60 días.

5. ¿ Qué herramienta generara automáticamente el código fuente necesario para desarrollar un filtro para un controlador dsPIC?La herramienta para el tratamiento de filtros digitales dsPIC Fd Lite.

SOLUCIONES APLICACIÓN 1

I. ¿Qué es un filtro ? ¿Para qué sirve? Cite ejemplos de aplicación.Se trata de un elemento que discrimina cierto rango de frecuencias de una señal que pasa a través de él.

281

Page 300: DsPIC Diseño practico de aplicaciones

28 2 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

Un ejemplo de aplicación se puede observar en los microfíltros que se conectan a las líneas de teléfono cuando se utiliza ADSL para transmitir por el mismo canal voz y datos.

2. De fina los cuatro tipos de filtros esenciales que permite diseñar la herramienta dsPIC Fd Lite. Filtro paso bajo: Es aquel que permite el paso de frecuencias bajas y atenúa 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 límite 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 parámetros Stopband Ripple (dB) y Pashhand Ripple (dB)?Definen el porcentaje de la señal original que debe eliminarse para la banda eliminada (stop­band ripple) y el porcentaje de la señal original que puede eliminarse como máximo 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 Rápida de Fourier?Para estudiar la señal en el rango de las frecuencias y así localizar una que sea muy distinta a la del resto de la señal 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 señal son los siguientes:

1. Crear el filtro con el programa dsPIC Fd Lite.2. Generar y guardar el fichero de coeficientes.3. Convertir la señal de entrada del formato .WAV a formato .TIM.4. Desde el programa dsPICworks, aplicar el filtro sobre la señal original.5. Convertir la señal de salida de .TIM a .WAV.6. Escuchar la señal en el reproductor de Windows.

Si no se consigue, puede que estos datos le sean de ayuda, aunque quizás desee primero inten­tarlo sin pistas. Características del filtro:

Sampling Frequency: 44100 Passband Frequencies: 4800 5000 Stopband Fequencies: 4000 5600 Passband Ripple (dB): 0.1 Stopband Ripple (dB): 50

Page 301: DsPIC Diseño practico de aplicaciones

APÉNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVALUACIÓN 283

SOLUCIONES APLICACIÓN 2

1. ¿ Qué ficheros son necesarios para todo proyecto escrito en ensamblador?

Ficheros a añadir a nuestro proyecto

C:\Archivos de programa\M¡croch¡p\MPLAB ASM30 Su¡te\lib\Crl0.s

C:,\Archivos de programa\Microchíp\MPLAB ASM30 Su¡ie\Mb'sCrtl .s

Q \Archivos de programa\M icrochip\MPLAB ASM.'iO Suite\support\gld\p30f4013.gld

C:\Archiyos.de programa\Microchíp\MPLAB ASM3.0 Suite.\support\inc\p3Qí4í)13.¡nc

2. ¿Para qué sirven los ficheros añadidos a un proyecto en C?Para añadir las definiciones de las rutinas de inicialización, definir posiciones de memoria, etiquetas para interrupciones, utilización de nombres simbólicos,...

3. ¿ Qué hace la instrucción ADD W0,W 1 ,W0?Suma el contenido de los registros generales WO y W1 y deja el resultado en WO.

4. ¿ Cuál es la etiqueta de inicio de programa en ensamblador?_main:

5. ¿Dónde se encuentra la rutina de reset de nuestros programas?Se encuentra entre los ficheros que añadimos a nuestro proyecto.

Ejercicio:

Resuelto en el Capítulo 4.

SOLUCIONES APLICACIÓN 3

/. ¿Qué depuradores soporta la herramienta MPLAB IDE? ¿Dónde 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 -> Set- tings... y acceder a la pestaña Limitations.

2. ¿Q uépasa cuando se ejecuta nuestro programa paso a paso? ¿Cuándo se ejecutan las ins­trucciones del código fuente?Al ejecutar el programa paso a paso la primera instrucción que se ejecuta no es la que se ha escrito en el fichero fuente, sino las que se han añadido en los ficheros del proyecto que con­tienen las rutinas de reset, etc. Para poder ver la ejecución del código más rápidamente se es­tablece un punto de ruptura en la primera línea de programa y se ejecute el mismo. Así, tras ejecutar esas rutinas de inicialización, el programa se detendrá en la primera línea de código y se podrá ver su ejecución paso a paso.

Page 302: DsPIC Diseño practico de aplicaciones

2 8 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

3. ¿Cómo se puede observar con el simulador el número de ciclos que tarda en ejecutarse una instrucción?Mediante la opción Debugger -> StopWatch se observa el número 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->Set- tings, bajo la pestaña Limitations. Así por ejemplo, puede observarse que la comunicación UART no puede simularse en real, pero sí redirigir la salida a pantalla o a un fichero.

5. ¿Mediante qué opción del menú se podría visualizar parte de la memoria de datos EE­PROM? ¿Podemos desde el MPLAB IDE escribir en ella?Mediante la opción del menú View-> EEPROM se puede leer y escribir en la zona de la me­moria de datos EEPROM.

Ejercicios

• Confeccione un programa en ensamblador que contenga la instrucción ADD, MOV, GOTO y CPSEQ. A continuación simule el programa y calcule el número de ciclos de instrucción en los que se ejecuta cada una de esas instrucciones.Como solución al ejercicio, ya que una de las instrucciones que debe incluir el programa es la instrucción CPSEQ, se propone confeccionar un programa que inicialice el registro WREGO con un valor, por ejemplo OxOÜFR e ir sumando a WREG1 una unidad, hasta al­canzar dicho valor.Para ello, se podría confeccionar el siguiente programa:

:AUTOEVALUACIÓN •APLICACIÓN 3.1.-.CONTANDO LOS CICLOS DE INSTRUCCIÓN ;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=0xü0FF ; 1N1CIALIZAMOS W 1=0x0000

;SUMAMOS 1 A W1 ;SI SON IGUALES W 0YW1 SALTA ;LA SIGUIENTE INSTRUCCIÓN GOTO •VOLVEMOS A SUMAR

iFINÁL. W0 Y W1 SON IGUALES

Page 303: DsPIC Diseño practico de aplicaciones

APÉNDICE B: SOLUCIONES A LOS EJERCICIOS DF AUTOEVALUACIÓN 285

Con la primera instrucción MOV, el registro WREGO se inicializa con el valor OxOOFF. Con la siguiente MOV, W1 toma el valor 0. El programa pasa a continuación a un bucle que se repetirá siempre hasta que W0 y W1 sean iguales. Ya que mientras no sean iguales se repetirá siempre la instrucción ADD que suma uno a W l y la instrucción de salto in­condicional GOTO SUMA. Sin embargo, cuando los dos datos sean iguales, la instrucción CPSEQ hará que la instrucción GOTO SUMA no se ejecute y por tanto se llegue al final del programa.Al simular el programa paso a paso, mediante la opción del menú Debugger->Síopwatch, se puede observar el número de ciclos de instrucción ejecutados en cada momento. Así, se puede deducir fácilmente el número de ciclos de instrucción necesarios al ejecutar cada una de las instrucciones anteriores. Dicho número de ciclos de instrucción se recoge en la si­guiente tabla:

í In s tru cc ió n N ° C ic lo s de in s tru cc ió n

MOV 1ADD J _CPSÉQ 1

GOTO 2

• Confeccione un programa en lenguaje C que le permita observar cómo cambia el bit de aca­rreo de la palabra de estado.La solución más rápida para observar el acarreo es colocar en un registro como WREGO el valor máximo que puede contener y sumarle 1.

// Aplicación 3.2// Programa en C para la observación // del bit de acarreo.#include ,'p3Ü 013.h" int niain(void){WREGO = OxFFFF; //Inicializamos WREGO a OxFFFFWREG0++: //Postincremento de WREGOrcturn(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 APLICACIÓN 4

1. ¿Qué significa que una instrucción de comparación y salto, salta la siguiente instrucción? Significa que cuando se cumpla la condición de salto, es decir cuando la condición de la ins­trucción de salto sea cierta, entonces el programa no ejecutará la siguiente instrucción. Así,

Page 304: DsPIC Diseño practico de aplicaciones

2 8 6 cJsPIC. DISEÑO PRÁCTICO DE APLICACIONES

normal mente, para realizar una instrucción condicional tipo IF, suele colocarse una instruc­ción de salto incondicional tras la instrucción de salto condicional. Con lo que se consigue que mientras la condición no sea cierta, el programa salte a la etiqueta de la segunda instruc­ción y, por el contrario, cuando la condición sea cierta, entonces el programa siga la secuen­cia de instrucciones siguientes.

2. ¿Qué utilidad tienen las distintas etiquetas de inicialización de datos?Sirven para inicializar la memoria de datos del controlador, disponiendo de distintas zonas de memoria según las necesidades del programa.

3. ¿ Cuántas instrucciones DSP se han añadido al repertorio de instrucciones de la fanula ds- PIC30F?Se han añadido un total de 19 instrucciones DSP que permiten realizar complejos cálculos matemáticos de una forma rápida y eficaz.

4. ¿Para qué sirve la instrucción MAC?La instrucción MAC multiplica dos valores y acumula el resultado en el acumulador. Se uti­liza a menudo en el filtrado de señales.

Ejercicios

• Confeccione un programa en ensamblador, ejercicioDSP\ que calcule el resultado de la si­guiente ecuación:

yn = boXn - b ]Xn.¡ - b2x n.2 - bjXn.3

Para el cálculo se usan los siguientes coeficientes:

b, Xn

0x0001 OxOOFF

0x0003 0x0005

0x0007 0x0002

0x0001 OxOOOF

A continuación, simule el programa y observe el resultado de la ecuación. Procure hacer el programa con el menor número de instrucciones posible y utilizando las nuevas instruccio­nes DSP.La ecuación 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 resolución debe acumularse el valor del primer coefi­ciente b0xn y luego restar el del resto de coeficientes.Para la primera suma se recomienda usar la instrucción MPY, y para la resta de los siguien­tes coeficientes, usaremos la instrucción MSC de multiplicación y resta.

Page 305: DsPIC Diseño practico de aplicaciones

APÉNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVALUACIÓN 2 8 7

;Programa Ejercicio DSP•‘resolución de la ecuación yn=b0Xn-blXn-l-b2Xn-2-b3Xn-3 ;Priinero haremos |a multiplicación bOXn con la instrucción MPY y a ;eontinuación gracias a la instrucción MSC iremos ;restando el resto de operandos include ”p30f4013.inc"

.global _main;Sccción de datos de la Memoria X. Coeficientes h0,bl,b2 y b3.section coeficientes, dala, xmemory, address(0x0800)bi: .hword 0x0001, 0x0003. 0x0007, 0x0001;Sección 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 ;Operaciones con enterosmo\r#bi,W8 ;Mover la dirección de bi a W8.mov |W8++J,W4 ;C1 contenido de la dirección de W8 lo llevamos a W4

;y dejamos W8 apuntando al siguiente dato, mov #xn,W10 ;Mover la dirección de xn a W10.mov [W J 0++1AV6 :Contenido de la dirección W10 a Wó. Dejamos W6

;apuniando al siguiente dato ;lnstrucción MPY multiplicamos W4 y W8 sobre el acumulador ;y hacemos que tras la operación, 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 ecuación) nivSC W4*W6,A*;[ W 8 ]+=2, W4,[W 10]+=2,W6

; Instrucción MSC, Multiplicación y resta.; Multiplicamos W4 y W6 y lo restamos al contenido del acumulador A ; Además, 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, también 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 simulación:

SOLUCIONES APLIACIÓN 5

I. ¿ Cuántos bytes como mínimo se deben grabar cuando se realiza una operación de grabación de memoria FLASH de programa?Como mínimo se deben grabar 32 instrucciones o posiciones de memoria, las cuales tienen cada una 3 bytes. Luego el número mínimo de bytes a grabar mediante esta operación es de 96 bytes.

Page 306: DsPIC Diseño practico de aplicaciones

2 8 8 dsPIC DISEÑO PRÁCTICO DF APLICACIONES

Figura BP.1. Resultado d$ la simulación del ejercicio.

Ejercicio:

• Utilizando el simulador, visualice el código en hexadecimal correspondiente al siguiente programa:

mov #0x0002, Wi ;Movemos un 2 a l registro W l add WO. Wl, WO ;sumamos el registro WO y W l y dejamos

;el resultado en WO•. >-. ■

A continuación cree un programa que, leyendo esos datos de la sección de datos del progra­ma, grabe ese programa en la memoria FLASH de programa a partir de la dirección0x000300.Al simular el programa que acompaña al enunciado del ejercicio, se pueden observar los có­digos de operación correspondientes a las instrucciones citadas, mediante la ventana Program Memory. En la Figura BP.2 se puede observar el código correspondiente.Así el código que el programa debe grabar en la memoria de programa, deberán ser los si­guientes 6 bytes:

20 00 21 40 00 01

El código fuente correspondiente al programa que graba estos 6 bytes se encuentra desarro­llado en lenguaje C.

// PROGRAMA grabaprograma // Este programa escribe el código #include Mp30f40l3.h''

Page 307: DsPIC Diseño practico de aplicaciones

APÉNDICF B: SOLUCIONES A LOS E)ERCICIOS DE AUTOEVALUACIÓN 2 8 9

.MPLAB IDE v7.20

Ha O it y«» Erojeil teOjyj* PiOYifwet Tocfc Configure W ndm H *

i ü G Í W f e Q 3 M f i C f I ? U B> ( • : $ É J Chedcsum : 0x6814 | t I I M

1 1 ¿ iUíl es» | OpCOCJC | S is a js r m n ly20S OD198 5A4000 BGGCrvctíBR •

i 206 0019 A 7EOOOO r e s e t ____________

200 0019E •900001 atW.W 0X 0000,0X 0002,0X 0000209 OOIAO OOOOOO nop

:¡ 210 OD1A2 rc u o o o re s e t

I OÜ1A4 FFF7FF aop r y

p UpCOfeH«« j) Mactvvs Syrrbcíc | PSV.Mwdj PSVData|

Figura BP.2. Obteniendo los códigos de operación del programa en ensamblador.

int secuenciagrabacionQ// Esta función escribe la secuencia de grabación// tanto para borrado corno para grabación

NVMADRLÍ = 0x0;NVMADR = 0x300;NVMKEY = 0x55;NVMKEY = OxAA; NVMCONbits.WR= 0x1; asmCNOP"); asmC'NOP"); retürn 0;

¡¡■Y- * * * > ; : * -+ * * *

// Programa principalj [ * * * # * * * * * ¿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;TBLPAG = 0x0;VV REGO = 0x300; asmCTBLWTL W2, [W0],,); asmC’TBLWTH W4,[W0++]");

//Apuntamos la página //Apuntamos el desplazamiento en la página //Movemos a NVKEY la secuencia 55 //Movemos a NVMKEY la secuencia AA //Activamos el bit WR de NVMCON //Esperamos 2 nops

/A'ariable auxiliar

//Configuramos NVMCON para borrar FLASH //Ejecutamos secuencia borrado/grabación //Esperamos al bit WR de NVMCON sea 0

//Escribimos los 3 bytes 200021 correspondientes //a la instrucción MOV //Apuntamos a la pág. de la dirección a leer //Apuntamos al desplaz. dentro de la página //Escribimos en el registro el cont. de W2 en parte bajar //Escribimos el cont. de W4 en la parte alta

Page 308: DsPIC Diseño practico de aplicaciones

2 9 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

//SEGUNDA INSTRUCCIONWREG2 = 0x0001; //Escribimos los 3 bytes 400001 correspondientesWRRG4 = 0x0040; //a la instrucción ADDWREG0 = 0x302; //Apuntamos al desplazamiento dentro de la páginaasmfTBLWTL W2. [W0]M); //Escribimos en el registro el cont. de W4asmCTBLWTH W4,[W0++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 i ’"! f"v>'<ó/i

WREG2 = 0x11J ];WREG4 = 0x0011;WREG0 = 0x300 + (a-l)*2:asm f’TBLWTL W2, [W0]"); //Escribimos en el reg el cont. de W4asmfTBLWTH W4}|W0++],,);

iNVMCON = 0x4001; //Configuramos NVMCON para grabado EEPROMa = sccucnciagrabacion(); //Ejecutamos secuencia borrado/grabacionwhile(NV M C O N b i t s. W R == 1); //Esperamos al bit WR de NVMCON sea 0return 0;

Tras simular el programa, puede observarse en la Figura BP.3 la ventana Program Memory con el código correspondiente a las dos instrucciones ya grabado.

Fd» ¡pew f r o j - t t DjsUíW»- Prcvr«T iiw Iccfc Qorftyje '£ c¿km Hejp

. □ af H ^16* £1 ? j, d£ a? O i# s# i£íj C hccksum : 0 x 5 a 2 0

■ 'C iwuwú:oritf;S,fl{ir«yioúó^.cunwntiw\gra|>aprograi.M\afát>«pf»t'r«D.EC2 - 0x0001.VUC( - 0x0043.VPXCO - 0x302, M B t ' tB L D lb V 2 , |OOJ O ím ’ TlLÜTH Y1JO O ++1'

J IlU -tM - 9 .M V .92

/ / í » e r i b i» Q í * n *1 r e g n rs re e l c c ik . de V i

VP3S2 - C x l l l l .TO3-34 - 0x0011.OSHOO - 0*300 t í» 1>-

M a < ’ 7BLUTL V 2 , |U 0J ' » .o í-T B W T H K . I W m ;

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 lu ro x o s W/¡ICC« p i r a «rafca.d© zitscx

o • s íc v e n c lo jT a S o c io n " ; - / .'S :ccu cob cs r a c u s s c i i b o r c ftd o /q tia liM c i

■ Pjiij»r<iin M innnry jf5¿¡

| L in e ¡ A d tírcas Opcode r is a a s t in b ly .4382 002 7 A F7TFTT nnp r383 002 ye r ? r r t r nop r384 002 ?S F ? r r ? r nopc385 00300 200021 tro v .a « 0x2 , 0 x0002386 DC30Z ■)□□□□ i a d d .c i 0 x 0 0 0 0 ,0 x 0 0 0 2 ,0 x 0 0 0 0a m nr/»n¿ m i - i • n h r » Ov ív i ih . r nynnn? i . rnxnnn-J i

. . ~ . v . - lv . v . >Opee« He« || Martin« S>níx4c ¡ PSV M«rJ PSV Pal» |

I»!M°lÁa síf d tK C » H 0 1 3 oab.saa IPO áctiavi r

Figura BP.3. La memoria de programa grabada correctamente.

Page 309: DsPIC Diseño practico de aplicaciones

APÉNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVALUACIÓN 291

SOLUCIONES APLICACIÓN 6

7. ¿Qué periféricos se pueden inicializar con la herramienta Visual Initializer?Todos los periféricos que disponga el modelo del controlador seleccionado cuando se crea el proyecto mediante la opción Project Wizard.

2. ¿Qué salida genera la herramienta Visual Initializer?La herramienta Visual Initializer genera un fichero llamado initdsPIC30F4013.s que se lla­ma con la siguiente instrucción en ensamblador:

y con el lenguaje C:

Visualyv'

Initial izationíVfifigg&ggagg»»»

..... ' IO.UWi l i i l i !w ^w *'\v>íí:víi

3. ¿Cómo se puede sincronizar la velocidad con la que trabaja la herramienta Visual Initiali- zer y el Simulador 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 opción Debugger->Settings y bajo la pestaña 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 representación gráfica del controlador.

4. ¿De cuántos temporizadores dispone el controlador dsPIC30f4013?5 Temporizadores de 16 bits: Temporizadorl, 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. ¿Dónde 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 señal conectada a un pin del controlador La solución implementada va a contar 60 segundos. Es decir, usando la misma inicialización del ejemplo semáforo del Capítulo 5 y siguiendo los pasos detallados en ese capítulo se con­sigue inicializar los periféricos utilizados para contar 1 segundo. En la rutina de atención a la interrupción del temporizador contaremos 60 llamadas y así se obtiene una temporización de 1 minuto. En esta inicialización tan sólo se debe cambiar la configuración de la interrupción INTO y sustituir el flanco ascendente por flanco descendente.

Page 310: DsPIC Diseño practico de aplicaciones

El código fuente del programa podría ser el siguiente:

2 9 2 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

#include "p30f4013.h"//Programa Semáforo en lenguaje C int segundos = 0;//Esta función atiende a la interrupción del temporizadorvoid _attribute (( interrupt )) _T 1 Interrupt(void)íJFSObits.TÍIF = 0; //Borramos el flag de la interrupciónsegundos = segundos +1; //Sumamos un segundoif (segundos ==: 60) //Cuando llegamos a 60 segundos, cambiamos semáforo{if (PORTDbits.RDO — 1) //Si el semáforo está a rojo

PORTD = 2;else //lo ponemos en verde y viceversa

PORTD = 1;segundos = 0; //Volvemos a contar un minuto,i i//Función que atiende a la interrupción extema INTOvoid attribute (( interrupt )) _INTOInterrupt(void){IFSObits.INTOIF = 0; //Borramos el flag de la interrupciónPORTD = 1; //Ponemos en rojo el semáforo.

//Programa principal

int main (void){

Visuallnitialization(); //Inicializamos puertas y temporizadorPORTD = 1; //Ponemos a rojo el semáforowhile(l) fasrnCclrwdt"); //Esperamos en un bucle infinito1

En la Figura BP.4 se puede observar el resultado del programa simulado en el que se apre­cia cómo se cambia el semáforo después de haber pasado un minuto de tiempo.

SOLUCIONES APLICACIÓN 7

• Complete la tabla con los valores de OC1 para distintos valores de TIMER2 en función de los parámetros elegidos en el Apartado A6.6

Page 311: DsPIC Diseño practico de aplicaciones

APÉNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVAI UACIÓN 2 9 3

Figura BP.4. Cambio clel semáforo al de un minuto.

TIMER2 OC1

OxOOFF 0

0x0100 0

0x0101 1

0x0102 1

0x0103 1

0x0109 1

0x0 JO A 1

0x0101i 0

0x010C 0

• ¿Qué valor tendrá el TIMER2 cuando se provoque la interrupción__OClInterrupt?0x0101

1. ¿A qué instrucciones afecta la configuración del Motor DSP?Afecta a las instrucciones DSP, aunque algunas partes de esta configuración como es el caso del modo de multiplicación, sólo afectan a las instrucciones DSP que utilizan el multiplicador.

2. ¿ Qué significa que la resolución del conversor analógico digital sea de 12 bits?Significa que cuando se muestrea un dato de la señal original, se puede medir con una pre­cisión/resolución igual al resultado de dividir la diferencia entre las señales de referencia entre 212.Así, por ejemplo, si la diferencia entre las señales de referencia es de 5 voltios, el conversor digital a analógico podrá diferenciar entre valores de 5/212 = 0,001220703125 voltios.

Page 312: DsPIC Diseño practico de aplicaciones

2 9 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

3. ¿Para qué se necesita un temporizador junto con el módulo Input Capture?El módulo Input Capture sirve para contar el tiempo en el que se da cierta condición en un pin de entrada, Ese tiempo se obtiene al compararlo con el valor de un temporizador.

4. ¿ Qué utilidad pueden desempeñar los módulos de comparación de salida?Una de esas utilidades es generar señales con una anchura de pulso determinada.

5. ¿ Cómo puede configurar el módulo UARTpara una comunicación 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.

Ejercicio:

• Mediante el simulador, almacene el siguiente código en memoria EEPROM:

Dirección Contenido

7FFC0Q 0x4 F48

7FFC02 0x414C

A continuación, cree un programa en ensamblador que transmita por el puerto serie el con­tenido de esas direcciones de memoria. Simúlelo y descubra el mensaje enviado.Tras inicial izar el módulo UART con las características predefinidas, el código correspon­diente al programa será el siguiente:

.global _main

.include "p.WiOB.inc'’

.text_main:

CALL _VisualInitialization • ‘ ; /;;;!£

MOV #tblpage(#Ox7FFCO()),WO ; Movemos pag de la dir. a tblpagMOV \V0,TBLPAGMOV #tbloffset(#0x7FFC00),W0 ;E1 desplazamiento a WO

; Leemos el dato EEPROMMOV W0.W1TBLRDL |\V1]AV0 ;Cargamos en W4 el dato leídocali MandaCaracter ; En caso contrario escribe el carácterADD W L# 1 ,W 1TBLRDL [\Vt|,W0 ;Cargamos en W4 el dato leídocali MandaCaracter : En caso contrario escribe el carácterADD W 1 ,# L W 1TBLRDL [W1],W0 ;Cargamos en W4 el dato leídocali MandaCaracter ; En caso contrailo escribe el carácter

Page 313: DsPIC Diseño practico de aplicaciones

APÉNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVALUACIÓN 2 9 5

ADD WI,#1.W1TBLRDL | W 1 JAVO CALL MandaCaracter GOTO Fin

MandaCaracter: btss U 1 STA,#TRMT

bra MandaCaracter mov WO.UITXRP'G retürn

Fin: nop

.end

; Espera a poder transmitir ; Bit UTXBF de U1STA ; Si no puede transmitir espera : hscribe el carácter en el buffer TX ; retorna a la llamada

:Fin del programa

I ras habilitar en el simulador el módulo 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 conversión analógico digital por el pin ANO, con tensión de referencia en VREFH y VREFL, utilizando el temporizado r interno con un período 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­terrupción y obtenga la media de esos 5 valores.Al tratarse de un periférico tan veloz, el calcular esa media y tomar ese valor como el valor resultado, nos va a permitir minimizar el riesgo producido por la entrada de nudo en nues­tro muestreo.

Page 314: DsPIC Diseño practico de aplicaciones

2 9 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Tras inicializar el módulo ADC, el código correspondiente a la solución del ejercicio seráel siguiente:

#inelude "p30f4013.hM #include <stdio.h>

; :'.v.áá§||

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;//Función que atiende a la interrupción por el módulo Conversór A/Dvoid__attribute__((__interrupt__)) _ADCJnterrupt(void);void_attribute__((__interrupt__)) _ADCInterrupt(void)

• ' ■ '■>* • V .-.V. ! ! *■;vi»

' .* V- * ‘vl’vOX»!

ilFSObits.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) í

■ v’.-i.

lVisuallnitial i zation (); while (1); return 0;

}

//Inicializamos el conversor // Entramos en un bucle infinito

Al simular el programa, la interrupción 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 más inmune al ruido.

Page 315: DsPIC Diseño practico de aplicaciones

Tercera parteLaboratorio experimental

Laboratorio 0. EL SISTEMA DE DESARROLLO PIC School............................................................299

Laboratorio 1. APLICACIÓN DE INSTRUCCIONES DSP CON ENTRADAS

Y SALIDAS DIGITALES................................................................................................323

Laboratorio 2. MANEJANDO A FONDO LOS TEMPORIZADORES DE 32 BITS.....................333

Laboratorio 3. O P TIM IZA N D O LA CONVERSIÓN ANALÓGICO-DIG ITAL

DE ALTA PRECISIÓN................................................................................................... 343

Laboratorio 4. CO M UN IC AC IÓ N ENCRIPTADA CON EL USART.............................................. 351

Laboratorio 5. CONTROL DE UN MOTOR DE CC MEDIANTE P W M ...................................... 359

Laboratorio 6. D ISEÑANDO FILTROS................................................................................................367

Laboratorio 7. GRABANDO LA MEMORIA FLASH DE PROGRAMA

CON UN BOOTLOADER........................................................................................... 375

Laboratorio 8. MANEJANDO A FO NDO LAS INTERRUPCIONES............................................. 385

Laboratorio 9. PILOTANDO UN FÓRMULA 1 ................................................................................. 393

Page 316: DsPIC Diseño practico de aplicaciones
Page 317: DsPIC Diseño practico de aplicaciones

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 Teoría: funcionamiento y programación de los dsPIC.2a Simulación y programación de aplicaciones.3a Desarrollo de experimentos, proyectos y programas con hardware y software.

Cada parte tiene una importancia fundamental para adquirir los conocimientos teórico-prácticos necesarios para diseñar aplicaciones con dsPIC, pero la última en la que se maneja un modelo con­creto de dsPIC al que se conectan diversos periféricos y dispositivos y se ejecutan programas en tiempo real es imprescindible para que el lector ponga “manos a la obra” y comience a diseñar y construir proyectos reales.

Microchip realiza un gran esfuerzo para poner a disposición de los usuarios de los productos que fabrica un conjunto de programas y herramientas que faciliten el diseño de las aplicaciones. Así, go­za de un gran prestigio el entorno de desarrollo MPLAB, cuya última versión 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 diseño y la depuración.

Para cubrir el objetivo eminentemente didáctico de la implcmentación de los proyectos que pro­ponemos en esta parte de la obra se ha seleccionado un equipo desarrollado y comercializado por la prestigiosa empresa Ingeniería de Microsistemas Programados (www.microcontroladores.com). Se trata de un entrenador didáctico universal denominado PIC School que sirve para todo tipo de mi- crocontroladores PIC así como de periféricos y dispositivos complementarios. Este entrenador, jun­to con una serie de materiales complementarios para el desarrollo de aplicaciones dsPIC, conforman la plataforma necesaria para la programación 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 máximo. Existen módulos para los microcontroladores PIC12F, PIC16FXXXX, P1C18FXXXX, PIC24, dsPIC y otros. También hay módulos enfocados a la experimentación de

29 9

Page 318: DsPIC Diseño practico de aplicaciones

3 0 0 dsPIC. DISFÑO PRÁCTICO DF APLICACIONES

dispositivos específicos como el bus CAN, USB, Internet, Bluetooth, etc. Para conseguir esta am­plia gama de aplicaciones, la tarjeta contiene un grabador, fuente de alimentación, numerosos pe­riféricos y recursos que pueden conectarse a cualquier patita del procesador y una tarjeta de mon­taje sin soldadura para añadir otros sensores o complementos que se requiera en cada módulo. Cada uno de estos módulos contiene el hardware específico para el desarrollo de los experimentos, un tu- torial didáctico en el que se explica el funcionamiento de los elementos a los que se destina junto a una colección de proyectos completamente resueltos y comentados y, finalmente un CD con toda la información y programas necesarios para la implementación de dichos proyectos. Así mismo, en el CD que acompaña 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 además funciona como grabador de distintos PTC y dsPIC y como sistema de desarrollo en el que los elementos que contiene no están conectados, disponiendo de una plataforma de ampliación y de adaptadores con los que puede aprender todo tipo de microcontrola- dores PIC, así como productos relacionados. Hay un módulo para cada producto.

L0.2. EL FABULOSO "P IC S choo l"

Las principales características 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. Además dispone de un oscilador de cuarzo que permite trabajar a diferentes frecuencias, permitiendo también utilizar el oscilador RC incluido en algunos microcontroladores. Asimismo, y mediante un módulo adaptador, también permite la ejecución, depuración y grabación de controladores digitales de señales dsPIC.

Page 319: DsPIC Diseño practico de aplicaciones

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 301

• Dispone de un amplio y representativo número de periféricos, con la ventaja que ninguno de ellos se encuentra conectado de forma predeterminada a las líneas de E/S del microcontrolador. Es el propio usuario quien; mediante un sencillo cableado sin soldadura, conecta y asocia ios distintos periféricos á esas líneas de E/S según lo requiéra la aplicación. Esto permite tener un contacto más directo con él hardware y un mayor control del mismo. Además dispone de una amplia superficie de BOARD en la cual se pueden conectar, sin soldadura, los periféricos necesarios para un pro­yecto que no estén incluidos en el entrenador.

• Existe una serie de módulos de prácticas opcionales en donde se van tratando diferentes temas réíacíon¿idos con los microcontroladores: comunicaciones, Bluetooth, USB, CAN, R.F., control de motores, periféricos avanzados y un largo etcétera. En esos módulos también so describen apli­caciones que permítan conocer las características de los PIC desde la sencilla familia 12FXXX has­ta ¡os potentes 18FXXXX. Cada módulo consta de un conjunto de prácticas y todos los compo­nentes necesarios para implcmentarlas.

• El.PIC School tiene tres modos de operación diferentes que se seleccionan fácilmente mediante un conmutador. El modo "RUN” se emplea cuando el dispositivo está grabado con el programa de aplicación a ejecutar. Todas las líneas de E/S están disponibles para el control de periféricos. El modo PC " se émpJé'a durante los ciclos de grabación del dispositivo. Esta grabación se realiza mediante el canal serio de un PC dotado del software de grabación correspondiente (WinPic 800, IcProg, etc:.). Se suministra el cable de conexión con el PC. Finalmente el modo ICSP” permite co­nectar el laboratorio PIC School con otros grabadores externos dotados de las señales ICSP o bien con depuradores en circuito como el ICD2 de Microchip. De esta forma es posible la emula- cíón/depuración/grabación del dispositivo contenido en el laboratorio. También existe un adapta­dor opcional para conectar PIC School al puerto USB del PC.

A la hora de seleccionar los periféricos incluidos en este potente entrenador, cabe destacar que se han elegido los más empleados que se distribuyen en las siguientes categorías.

Periféricos de entrada• Dos potenciómetros capaces de simular cualquier entrada analógica.• Cuatro interruptores deslizantes y cuatro pulsadores para soportar las entradas digitales.• Un generador lógico capaz de generar ondas simétricas 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 módulos de captura y comparación (CCP) incluidos en algunos

. ... microcontroladores.• Un teclado matricíaí de 4x4 teclas considerado el dispositivo de entrada por excelencia en aplica­

ciones microelectrónicas.

Periféricos de salidam Ochó diodos LED que permiten monitorizar el estado de las líneas a las que se conectan.• Un dríver de cuatro canales capaz de proporcionar salidas de alta corriente permitiendo la conexión

de motores, lámparas incandescentes, relés, etc.• Una pantalla LCD de 2x16 caracteres que permite la representación de mensajes mediante letras,

números o símbolos especiales.

Periféricos de comunicación% Interfaz serie. RS232 que permite adaptar los niveles lógicos del microcontrolador a niveles RS232.• Interfaz CAN, que convierte las señales del microcontrolador según las especificaciones de este

BUS tan utilizado en redes sensoriales.m Conector RJ11, qué permite la conexión de dispositivos I2C, iButton, RS485, etc.• Conector USB, que permíte la conexión con cualquier dispositivo estándar existente en el mercado.

Page 320: DsPIC Diseño practico de aplicaciones

3 0 2 dsPIC. DISEÑO PRÁCTICO 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 válido para todas las gamas de microcontroladores PIC, permitiendo al usuario seleccionar siempre aquel dispositivo que más se ajuste a las necesidades específicas de cada proyecto. Pudiendo, además, seleccionar la frecuencia y tipo de reloj más adecuados en cada caso.

2.a Dispone de los periféricos más universales utilizados en la microelectrónica, permitiendo que la conexión entre estos y el microcontrolador se realice a medida de cada experimento. Ade­más, 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 funcionamiento, el PIC School se adapta a todas las etapas que conlleva el desarrollo de una aplicación microelectrónica, permitiendo la emulación, prueba y grabación de microcontroladores PIC cambiando sólo la posición de un conmu­tador. Así se evita la utilización de varios dispositivos que realicen cada una de esas tareas.

4.a Dada la gran cantidad de módulos específicos para el aprendizaje práctico de microcontrola­dores, dsPIC y productos novedosos, es posible conseguir en poco tiempo el conocimiento y la experiencia para desarrollar cualquier aplicación 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 alimentación

Encargada de obtener la tensión general de +5Vcc con la que se alimenta el laboratorio PIC School, todos los periféricos de la misma y el procesador empleado. (Figura LO.2.)

Figura LO.2. Fuente do alimentación.

Page 321: DsPIC Diseño practico de aplicaciones

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 3 0 3

CM 1D3-15VDC

SW3

ON /OFF

C28lOOuF

D1

-W1N4007

U1■JA7.S05/TQIN OUT

c 2 :100n

A P I

-O +5VCC

R3330

D3Vcc ON AP3

A P ?

1

3A

Figura L0.3. Esquema eléctrico de la fuente de alimentación.

El esquema eléctrico de la fuente se muestra en la Figura L0.3. A través del conector CN1 se aplica una tensión de 9 a 15VDC procedente de un alimcntador estándar con el positivo al centro. El interruptor SW3 conecta el sistema. El diodo DI evita la polarización inversa y con ello los da­ños que se pudieran ocasionar al equipo. El regulador U 1 estabiliza la tensión a +5 Vcc con 1A má­ximo. Dicha tensión, junto con GND están disponibles en el conector API y AP2 respectivamente para alimentar a los circuitos y prototipos del usuario. En el conector AP3 está disponible también la tensión de entrada sin estabilizar +Vin para aquellos circuitos que la requieran. El diodo led D3 indica la presencia de tensión +5Vcc.

LO.3.2. El osc ilador

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 jumper JP2 se obtiene la señal de reloj CLKIN. Cerrando 1 -2 dicha señal la proporciona el oscilador X I. Cerrando 2-3 la señal se obtiene de la red RC. El valor de estos componentes determi­na la frecuencia de la misma (consultar parámetros proporcionados por Microchip). (Figura LO.4.)

+5Vcc 46 Vcc

Figura LO.4. Circuito oscilador principal.

Page 322: DsPIC Diseño practico de aplicaciones

3 0 4 dsPIC. DJSEÑO PRÁCTICO DE APLICACIONES

El dispositivo XI contiene en su interior un oscilador preciso controlado por cuarzo y todo ello en una cápsula metálica en formato DIP8. Este oscilador, también llamado “Canned Oscillator”, se puede adquirir para diferentes frecuencias según las necesidades. Basta simplemente cambiar uno por otro para que la aplicación se ejecute a más o menos velocidad.

L0.3.3. Los microcontroladores

Es la sección mas importante del entrenador PIC School y donde se instala el dispositivo PTC con el que se va a trabajar. Básicamente consta de cuatro zócalos donde se pueden insertar los disposi­tivos de 8, 18, 28 y 40 patitas tal y como se muestra en la fotografía de la Figura 1.7.

Figura LO.5. Zócalos de inserción 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 analógicas

Están formadas por dos potenciómetros, tal y como se muestra en la fotografía de la Figura L0.6.

Figura L0.6. Entradas analógicas.

Page 323: DsPIC Diseño practico de aplicaciones

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 3 0 5

El esquema eléctrico de las entradas analógicas se muestra en la Figura L0.7. Las líneas de los potenciómetros son directamente accesibles desde el bloque de conexión A PI6 correspondiente y se les puede conectar cualquier tipo de circuito eléctrico analógico.

A P 16

ENTRADAS ANALOGICAS

Figura L.0.7. Esquema eléctrico de las entradas analógicas.

LO.3.5. Entradas d ig ita les

Se muestran en la fotografía 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 eléctrico de estas ocho entradas cuyas señales están dispo­nibles en el bloque de conexiones A P I8. Las señales E0-E3 proceden de los cuatro interruptores

Page 324: DsPIC Diseño practico de aplicaciones

3 0 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

deslizantes. Cuando estos están abiertos (hacia arriba) proporcionan nivel lógico “ 1” gracias a las resistencias pull-up de RP2. Cuando cualquiera de ellos se cierra (hacia abajo) se conecta directa­mente con la señal GND proporcionando nivel “0"’.

Por otra parte, los cuatro pulsadores en situación de reposo permanecen abiertos generando ni­vel lógico “ 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 eléctrico de las entradas digitales.

LO.3.6. El generador lógico

Se muestra en la Figura LO. 10 y está basado en el dispositivo SYM10AA. Es capaz de generar on­das cuadradas simétricas a frecuencias de 1 Hz, 10Hz, 100Hz y lKHz. Está especialmente indicado para aplicaciones de control de tiempos y también para evaluar y ensayar con los módulos de cap­tura y comparación (CCP) contenidos en ciertos modelos de dispositivos PIC.

El esquema eléctrico de dicho generador es el que proporciona su propio fabricante y se mues­tra en la Figura LO. 1J. Puede servir como base para múltiples aplicaciones.

La señal de salida se obtiene mediante el bloque de conexiones AP8. Por defecto la frecuencia de salida es siempre de 1Hz. Mediante el pulsador SW2 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.

Page 325: DsPIC Diseño practico de aplicaciones

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 3 0 7

Figura L0.10. Generador lógico de señales.

FR E Q .S E LE C ^ SW 2

i----o o—

+5VOCO-R 23

10 K

022 : lOOn

U6

S E L 1Hz

10HZ

V D D 100Hz

1KHZ

GND OUT

SYM -10

2 D5

7

6/ y “

0 7 1A

5 0 8 L rf

3

AP8

R17

470

+5VCC

FR E Q OUT

Figura L0.11. Esquema del generador lógico.

L0.3.7. El tec lado

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 periférico de entrada por excelencia que va a permitir introducir todo ti­po de datos para su posterior procesamiento.

Figura L0.12. El teclado.

Page 326: DsPIC Diseño practico de aplicaciones

3 0 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

El control del teclado supone el tener que aprender y utilizar una serie de técnicas y conceptos que se emplean en las más diversas aplicaciones. Manejar conceptos tales como barrido del tecla­do , leda pulsada, rebotes, interrupción con cada pulsación , wake up con cada pulsación, ctc.? da­rán al usuario la posibilidad de acometer ambiciosos proyectos de carácter profesional.

Un dato relevante a tener en cuenta es que a pesar de disponer de 16 teclas, tan sólo son necesa­rias 8 líneas de E/S del microcontrolador para su control. Ello es debido a su distribución matricial. La Figura 1.17 muestra el teclado asociado al bloque de conexiones AP21. En dicha figura también se puede apreciar la relación entre fila-columna y la tecla asociada. Así pues, la tecla 1 está asocia­da con la fila 0 (F0) y la columna 0 (C0).

En el laboratorio P1C School las 8 líneas del teclado se puede conectar a cualquier puerta del PIC, pero se sugiere conectarlo a las líneas de la puerta B (como se muestra en la Figura LO. 13). Esto se debe a que la mencionada puerta tiene, en la mayoría de los dispositivos PTC, un par de característi­cas muy interesantes para el control de un teclado: resistencias pull-up internas para las líneas de en­trada y posibilidad de interrupción cuando cualquiera de esas líneas de entrada cambie de estado.

SW5

Figura L0.13. Esquema eléctrico 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 líneas RB0-RB3. La intersección fila-columna da lugar a seleccionar una tecla en concreto. Es decir, si se pulsa por ejemplo la tecla 4, supone unir eléctricamente la fila F1 con la columna C0, que es tanto como decir que las líneas 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 líneas 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 relación fila-columna que define a dicha tecla. Esta tarea, conocida como barrido de teclado, ha de repetirse de forma constante y periódica. De esta manera y, a la velocidad de trabajo del PIC, será posible detectar una pulsación en cualquier momento.

Haciendo uso de algunas de las prestaciones que ofrecen los dispositivos PIC en la puerta B, es po­sible desarrollar rutinas más 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 líneas, en estado de reposo, estén a nivel “ 1”. Por otra parte, tam­bién podemos habilitar la interrupción 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 situación 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-

Page 327: DsPIC Diseño practico de aplicaciones

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 3 0 9

saeión de cualquier tecla. Efectivamente, puesto que RB0-RB3 (columnas) están a “0” y RB4-RB7 (fi­las) están a “ 1” gracias a las resistencias pull-up internas, cuando se pulse cualquier tecla se produce una interrupción por cambio de estado en cualquiera de las líneas RB4-RB7 (filas). Esa interrupción provoca la inmediata atención del microcontrolador que pasa a ejecutar la rutina que se encargará de averiguar qué tecla se pulsó.

LO.3.8. Salidas d ig ita les

Están formadas por 8 diodos led (S0-S7) que sirven para monitorizar el nivel lógico de las líneas a las que están conectados.

Figura LO.14. Salidas digitales.

En el laboratorio PIC School los leds son accesibles mediante el conector A PI7 tal y como se mues­tra en el esquema de la Figura LO.l 5, y se pueden conectar individualmente a cualquiera de las líneas del microcontrolador. Estas líneas son capaces de suministrar 25mA por lo que no es necesario ningún circuito adicional de amplificación excepto las resistencias de absorción contenidas en el pack RPl.

RP1 SIL 330

f,0 0 0 :0 (/! 00 W in CO -J rr> -J! & CO (O — O

SALIDAS DIGITALES

Figura LÖ.15. Esquema eléctrico de las salidas digitales.

Page 328: DsPIC Diseño practico de aplicaciones

3 1 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Un nivel lógico “ 1” por cualquiera de esas líneas provoca el encendido del led correspondiente. Un nivel “0” lo apaga. Es una forma muy simple y económica 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 eléctrico. 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 señales TTL de baja corriente.

Mediante el conector AP6 se conectan las señales 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 jumper JP8 se selecciona la tensión de salida para las cargas. En la posición l -2 (por defecto) dicha tensión es de +5Vcc. En la posición 2-3 la tensión que alimenta a las cargas se apli­ca externamente a través de la boma +VM.

Mediante estas salidas de alta corriente el laboratorio PIC School puede controlar cargas de consu­mo elevado, como pueden ser lámparas incandescentes, relés, motores DC, motores paso a paso, etc.

Cabe indicar que el dispositivo L293D integra en su interior sendos diodos para la absorción de comentes inversas provocadas por cargas inductivas.

L0.3.10. Interfaz serie RS-232

Su ubicación dentro del laboratorio se muestra en la Figura LO. 18. Consiste en el clásico interfaz se­rie que permite adaptar los niveles lógicos del microcontrolador a niveles RS-232.

Page 329: DsPIC Diseño practico de aplicaciones

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 311

SAUOAS DEL DRIVER

CN7 CD CD CD © CD CP

13

12

GND

GND

GND

GND

U 5

L293D

VDD

VCC

CO *-2 2IL l i i

■q- CO O i r -2 2 2 z

+5VCC O-

JP8

fffl16 -0+5VCC

C21

100n

AP6

ENTRADAS AL DRIVER

Figura LO.17. Esquema de las salidas digitales de alta corriente.

Figura L0.18. Interfaz serie RS-232.

Según el esquema eléctrico mostrado en la Figura LO. 19 el interfaz está formado por el popular adaptador de niveles MAX-232. Mediante el conector AP5 se dispone de las señales de transmisión y recepción (TxD y RxD) así como las de control de flujo CTS y RTS. Estas señales proceden del microcontrolador. El conector CN5 es un conector DB9 hembra estándar, que permite realizar la co­nexión con el periférico serie. Mediante un led bicolor (D17/D18) se monitoriza todo tipo de trans­misión y/o recepción.

Page 330: DsPIC Diseño practico de aplicaciones

3 1 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Este interfaz permite realizar todo tipo de comunicaciones serie entre el laboratorio P1C School y cualquier otro equipo mediante el protocolo estándar RS-232. La velocidad de transferencia irá en función 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 comunicación según los pro­tocolos tanto RS-232 como RS-485. En este último caso basta con montar el sencillo circuito de adaptación correspondiente sobre el módulo board de montaje sin soldadura con que cuenta PIC School.

AP5

-XI o

CANAL SERIE

RTSRxDCTSTxD

C17 : 1001

C15 : 100n

12

1110

MAX232U4

T10UT R 11NT20UT R2INTI IN R10UTT2IN R20UT

C1 + C2+C1- C2-

V+ V-

oOQ2

> O

C19

10On

13

+5VCC

CN5

RTSTxDCTSRXD

1T

*5VCC

= j= C18 10On

C16 10On

D17 ' ROJOfTx)'

INTERFACE RS-232

r D18\ VERDE (Rx)

Figura LO.19. Esquema eléctrico del interfaz serie RS-232.

LO.3.11. In te rfaz bus CAN

Está compuesto por el dispositivo adaptador MCP2551 que convierte las señales lógicas según las especificaciones del bus CAN.

Figura L0.20. Interfaz bus CAN.

Page 331: DsPIC Diseño practico de aplicaciones

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 3 1 3

El bus CAN permite crear una red con una transferencia de datos muy robusta y fiable entre el mi- crocontrolador 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 automóvil y algunos dispositivos PIC incorporan mediante hardware interno todos los mecanismos necesarios para su implementación.

En la Figura L0.21 se muestra el esquema eléctrico de este interfaz incorporado en el laborato­rio PTC School. Por el conector APIO se proporcionan, procedentes del microcontrolador, las seña­les RxCAN y TxCAN que van a parar al circuito de adaptación MCP2551. Las señales 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 adaptación es capaz de conectar con hasta 112 nodos. Mediante el jumper JP1 se habilita o no la resistencia Terminal R2 según 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 periféricos más versátiles e interesantes que dispone el laboratorio PIC School. Se muestra en la Figura L0.22 y es capaz de visualizar dos líneas de 16 caracteres alfanuméricos cada una.

Este potente periférico de salida va a permitir representar cualquier tipo de mensaje compuesto de letras, números y símbolos produciendo además diferentes efectos de visualización como des­plazamientos a izquierda y derecha, parpadeos, scrolls, etc.

1.a transferencia de información 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 líneas de E/S mediante el conector AP20. El esquema eléctrico se muestra en la Figura L0.23.

Page 332: DsPIC Diseño practico de aplicaciones

3 1 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Figura LO.22. P¿intalla LCD.

Existe además otro conector, el AP9, donde se conectan las señales que controlan el flujo y ti­po de información que se transfiere. Con la señal RS se determina si la pantalla recibe el código ASCII del carácter a visualizar (nivel “ 1”) o bien un código de instrucción (nivel “0”). Mediante la señal RW el microcontrolador informa a la pantalla LCD si se va a leer o escribir sobre la mis­ma. Finalmente, con la señal E, se habilita o no a esa pantalla. Cuando esta señal vale “0” la pan­talla queda desconectada, las líneas de datos quedan en alta impedancia. Cuando vale “ 1”, la pantalla queda habilitada para recibir o mandar datos.

U 8

L C D

Figura L0.23. Esquema eléctrico 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 onectores para in te rfaz RJ11 y USB

Son simples conectores de propósito general y se pueden observar en la fotografía de la Figura LO. 24.

Page 333: DsPIC Diseño practico de aplicaciones

LABORATORIO ü: EL SISTEMA DE DESARROLLO PIC School 315

Figura LO.24. Conectores USB y R) 7 7.

LO.3.14 Sección de grabación

Se muestra en la fotografía de la Figura L0.25 y se encarga, mediante el software oportuno, de realizar los ciclos de lectura/grabación 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 grabación que dispone el laboratorio PIC School.

Todos los dispositivos PIC disponen de 3 señales para la lectura/grabación de la memoria de pro­grama, la memoria EEPROM para datos y la memoria de configuración. La señal PTCDATA permite transferir los datos de forma serie y síncrona entre el PIC y el hardware de grabación, la señal PICCLK transporta la señal de reloj para el sincronismo de los datos y la señal PICMCLR, que inicia los ciclos de lectura/grabación y aplica la tensión Vpp necesaria. Estas tres señales son además compartidas y empleadas como líneas de E/S de propósito general una vez que el PIC ha sido grabado.

Page 334: DsPIC Diseño practico de aplicaciones

3 1 6 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

Estas tres señales se conectan con tres fuentes diferentes según el modo de operación seleccio­nado mediante el conmutador SW4.

Figura L0.26. Esquema por bloques del circuito de grabación.

El modo RUN se emplea cuando el dispositivo está grabado. Las tres señales del PIC anterior­mente mencionadas se consideran líneas de E/S de propósito general y están disponibles a través de los bloques de conexión correspondientes, para ser utilizadas por los periféricos de la aplicación.

En el modo ICSP el laboratorio queda configurado para que el PTC actual insertado se pueda lccr/grabar a través de las señales que se aplican mediante el conector RJ11 (ICSP: In Circuit Se­rial Programing). Estas señales a su vez las debe proporcionar un grabador externo dotado de su correspondiente software de grabación. Se puede emplear el módulo 1CD2 de Microchip junto con el entorno integrado de desarrollo M PLAB, que se puede obtener de forma gratuita desde www.microchip.com. El módulo ICD2 además de grabar dispositivos es capaz de realizar depu­ración en circuito en tiempo real, con ciertos modelos de dispositivos PIC.

En el modo PC la lectura/grabación del PIC se realiza a través de las señales del canal serie de un PC dotado del correspondiente software de grabación. Un diodo led, el Vpp ON, indica transfe­rencia de datos entre el PC y el laboratorio. Entre los múltiples 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://per- so.wanadoo.es/siscobf/winpic800.htm y en www.ic-prog.com.

Se reitera una vez más que, aunque un software de grabación determinado grabe múltiples dis­positivos y de diferentes familias, es necesario que también haya compatibilidad a nivel hardware. Esta compatibilidad viene dada fundamentalmente por la distribución de patillas del dispositivo en cuestión.

L0.4. EL M Ó D U L O DSPIC PARA LA PIC School

Para aprender a diseñar experimentalmente aplicaciones con la PIC School sobre diferentes dispo­sitivos y temas. Ingeniería de Microsistemas Programados S.L. comercializa diversos módulos conteniendo los componentes complementarios a los existentes en la PIC School y que requieren los proyectos que se proponen. Así existen módulos para el aprendizaje de PIC12F, PIC18F, Internet, Buetooth, USB, etc. El módulo dsPIC , cuyo kit de materiales se muestra en la Figura LO.27 tiene la

Page 335: DsPIC Diseño practico de aplicaciones

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 3 1 7

misión de soportar todas las experiencias que se proponen en este libro y muchas más y consta de los siguientes componentes:

1.° Adaptador de zócalo con dsPIC30F4013 incorporado.2.° Motor de corriente continua.3.° Circuito integrado para controlar LCD LCDSYM20AA.4.°.Cables y material auxiliar.5.° Tutoríal con ejercicios y proyectos progresivos comentados y resueltos (este libro).6.° CD con información técnica y programas.

Figura L0.27. Fotografía que muestra los materiales que componen el "módulo dsPIC" para realizarlos proyectos sobre dsPIC propuestos en este libro y muchos más en la PIC School.

Para comenzar a trabajar con este módulo, deberá montarse el zócalo adaptador de dsPIC incor­porando el dsPIC30F4013 sobre la placa PIC School. Para ello, la placa PIC School dispone de un único zócalo de 40 pines donde se deberá insertar. En cada aplicación sólo deberá estar insertado el microcontrolador usado.

LO.5. DESCRIPCIÓN DEL SOFTWARE

El sistema PIC School puede programar un dispositivo dsPIC directamente a través del puerto serie o emplear el canal ICSP y un programador de Microchip. En caso de realizar la grabación con un grabador de Microchip, el software de grabación es el MPLAB, que permite la creación de un pro­yecto, su depuración, simulación y programación 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 grabación 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 programación que se encargue de

Page 336: DsPIC Diseño practico de aplicaciones

3 1 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

transferir el fichero desde el ordenador hasta la memoria del dsPIC. Para realizar esta función de programación, se puede utilizar el software WinPlCSOO. Se trata de un excelente programa de libre distribución que puede descargarse de Internet y que se encuentra en la carpeta de Software de Pro­gramación del CD del libro.

LO.5.1. Software W IN P IC 800

Este magnífico programa de Francisco Benach permite la programación de la mayoría de dispositi­vos dsPIC presentes en el mercado. Según van saliendo nuevos modelos al mercado, se puede des­cargar una versión actualizada del software que incluya su programación. La página web a través 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 menús de acceso a configuraciones del programa y tam­bién de unos ¡conos para acceder directamente a las funciones más empleadas, como borrar la me­moria de programa, introducir un nuevo fichero en la memoria del dsPIC, etc. Se trata de un software genérico de programación de microcontroladores PIC, pero que también 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 código hexadecimal con el que se está trabajando para la memoria de programa o de datos y un acceso directo a un menú de selección de la palabra de con­figuración.

El primer paso antes de realizar ninguna operación de carga de ficheros es la configuración del tipo de hardware de programación que se va a emplear. Para configurar el tipo de hardware se ha de acceder al menú Configuración y seleccionar la opción Hardware. Aparecerá una pantalla en la que se puede seleccionar el tipo de circuito de programación disponible. En nuestro caso, es necesario seleccionar el programador tipo PIC School. Además de seleccionar este tipo de programador, otro paso indispensable consiste en seleccionar el puerto COM del ordenador a través 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 C0M 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 ratón u otro dispositivo. No hay que modificar el res-

í V/¡nPlc800 3 . 5 5 g Q H S ’1 Schivo Ed cor» Disposavo Çcoftgjf ación Ldo.iv» Ai,uéa

H ! S* i% i? % j p x c r ! © ^ ! 3 0 F 4 0 1 3 j j j II "S C ó d ig o ¿ 2 D a '-u a $ C o n tic i. 4$C od.TC S P --- t& $ k M «

0 x 0 0 0 0 0 F F F F F F F F F F F F F F F P F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F a

0 x 0 0 0 1 0 : F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

0x 0 0 0 2 0 : F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F P P P P P F F F F P P P P F F F F0 x 0 0 0 3 0 : F F F F F F F F F F F P P P F F F P F F F F F P F F F F F F F F F F F F F F F F F F F F F F F F

UXÜUU4U: F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

0 x 0 0 0 5 0 : F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F P P P P P F F F P P P P F F F F F F0 x 0 0 0 6 0 : F P P P F F F F F F F P P P F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

< 0 x 0 0 0 7 0 : F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

0 x 0 0 0 8 0 : F F F F F F F F F F F F F F F F F F F F F P P P F F F F P P P P F F F F P P P P P P F F F F F F

0 x 0 0 0 9 0 : P F P F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

O xOOOA O: F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

OxOOOBO: F F F F F F F F F F P P F F F F F F P P P P P F F F F F F F F F F F F F F F F F F F F F F F F F Y>

1 H x > T 7 e m îrL F T l

Figura L0.28. Péìntalla principili del software de programación WinPlCSOO.

Page 337: DsPIC Diseño practico de aplicaciones

LABORATORIO 0: EL SISTFMA DE DESARROLLO PIC School 3 1 9

w m Plc80ü [ H a rd w are Confìgi.

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

;JDM P r o g r a m m e r M l c r o 4 y o u

¡ M ic r o 4 y o u _ 8 7 7

P o J )J .ln ; P « r a P r o g

;PG3D

: P ic 8 0 0

13

ìsI e J bì jPlift

I t i& s de 3 /C óeL p\s*rfco

^ Bloqueo contigui ación F

■ ■9pp?. 1í v / . w w m i ¿ : .-im f Uc &Z V<£d F

:• • • • r . . ; . . » 8 r . .U sar 15clv F

- • « ¡ l - M O V - In v - xn v r

. í s i c á y . i DTK +4- F r r

® | c t s

0 . I’r t s zíF

F r r

O :hy. ! '* o J - r r r

0 V f í í I- j J • F r r

© •. -m I- sJ " r r r

& ^ J ::•> !- J - . F r r

C a n c e la r C onfi ca 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 selección que aparecen en la parte derecha de la pantalla.La selección del tipo de programador que se va a utilizar tan sólo es necesario la primera vez que

se ejecuta el programa. Para aplicaciones posteriores, esta configuración 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 programación consiste en seleccionar el modelo de dsPTC con el que se va a trabajar. En nuestro caso, se selecciona el 30F4013. El menú de selección 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 descripción de sus características principales. (Figura LO.30.)

Tras seleccionar el dispositivo, hay que abrir el fichero hexadecimal que se ha generado previa­mente con el programa MPLAB y que se va a introducir en la memoria de programa del dsPIC. Pa­ra abrir este fichero, se puede seleccionar el primer 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 grabación 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 están ocupados con instrucciones y aquellos que se encuen-

VVinPic800 - 3. b i g

áfcNvo Ejfaón Dpipasiivo Cur/iga-scbc taioma filuda

G? - ?■ Q ^

[UrrfidBwifec

Figura LO.30. Seleccionando el modelo de dsPIC con el que se va a trabajar.

Page 338: DsPIC Diseño practico de aplicaciones

3 2 0 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

- W ln P fc 8 0 0 - 3 . 5 5 g E ) @ B

I Arihwo Fdctón f^spcxtfwo ![dema Ainjdá

G * * © H ^ * i ? % | P IC -x ! © j J 1 3 0 F 4 0 1 3

C J C ó d ig o ■'-£ D a t o s # C o n £ ig . 4 3 C o d .IC S P 1 T - : '% k # 1

0 X 0 0 0 0 0 : 8 A 3 0 0 0 0 0 2 8 8 2 8 4 3 0 2 D 0 3 0 8 0 0 0 1 2 8 X 8 A 0 0 0 A 1 OCOBAO 0B 0B A 1 : *0 x 0 0 0 1 1 1 : A 0 3 U 4 A 12U B AU 0 0 0 0 0 0 0 9 0 B 8 0 3 0 3 4 0 0 2 F 0 1 A 1 2 1 1 8 0 3 A 0 0 8 2 F ‘ « j .

0 X 0 0 0 2 0 : A 0 2 8 2 D B 1 3 0 0 8 AOODAP 2 0 0 8 3 0 A 0 1 8 0 3 B 1 0 D A 1 0 0 2 8 2 4 2 D 0 8 2 1

0 x 0 0 0 3 0 : 6 4 0 0 A P 19 0 0 B Ü A D 0 8 2 0 3 0 0 8 2 1 4 1 1 D 0 3 4 0 1 0 2 E 40 1 .9A B 2 0 1 A 2 E .

0 x 0 0 0 4 0 : A E 2 8 4 3 A 1 1 2 2 E 0 C 0 8 2 1 9 9 2 8 4 5 A P 0 8 2 D B 0 3 0 0 A 2 0 2 0 1 9 2 1 0 0 A D

0 X 0 0 0 5 0 : 0 3 3 0 3 0 A E 2 0 5 7 2 R 2 8 5 C A 1 3 0 2 0 0 C 0 8 2 1 9 9 2 8 5 9 A 0 3 0 3 0 0 C 0 8 2 D

0 x 0 0 0 6 0 : 9 9 2 0 5 F 7 7 1 1 8 A 0 C 3 0 4 3 9 9 2 8 6 5 A D 3 0 0 1 2 A 2 0 0 4 6C 1 E 0 C 0 1 0 0 9 9

0 x 0 0 0 7 0 : 0 4 0 0 A D A D 0 8 2 B A E 3 0 1 1 0 1 2 8 2 E 0 4 0 0 A D 0 C 0 8 2 C 9 9 2 8 7 B A D 3 0 0 1

> 0 x 0 0 0 8 0 : 0 0 2 0 0 4 1 F 0 1 8 1 0 6 0 5 8 3 9 F 1 6 8 3 9 9 3 0 1 9 9 8 3 0 2 6 8 3 3 0 9 0 A 6 0 0 9 8

0 x 0 0 0 9 0 : A 8 0 1 A 7 0 6 0 1 A 9 9 F 1 6 8 3 6 5 3 0 0 0 6 6 3 0 F E 6 7 3 0 4 6 0 7 1 2 8 3 A 6 3 IK 1 0

OxOOQAO: A 7 0 1 8 5 2 6 0 1 A 8 2 7 0 0 A A 2 8 0 0 A B 6 4 0 0 A C A A 3 0 1 4 A D 3 0 F A A A 2 0 0 4

OxOOOBO: 3 1 2 0 A C 0 9 0 0 A 6 3 2 8 0 8 5 A 8 0 0 A 7 A A 0 8 2 6 A B 0 8 2 7 A C 0 8 2 8 6 4 2 0 6 4

£

H «>P¡cB roer-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 código por defecto FFFFFF.Además de programar la memoria FLASH del dsPIC también es posible introducir datos en la

memoria EEPROM de datos durante el proceso de grabación 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 Código, 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 eléctrico de grabación, es conveniente revisar la palabra de configuración del chip. Para acceder a la palabra de configuración se debe seleccionar el icono Con- fig 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 configuración 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 configuración, éstos aparecerán aquí cargados directamente, no siendo ne­cesario volver a tener que seleccionar los valores de la palabra de configuración para el dsPIC. Muy importante, al trabajar con la placa PIC School, deberá seleccionarse como Oscilador Principal (Pri­mar)* Oscillator) la opción 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 opción del oscilador principal es la indicada ya que ésta es la utilizada por la placa.

Sólo queda iniciar el proceso eléctrico de programación. En primer lugar se borra la memoria de programa del dsPIC, para que contenga todas las posiciones con el valor FFhFFF y la programación 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 sitúa el ra­tón sobre este icono aparecerá un texto que indica “Borrar todo”. Hay que seleccionar esta opción.

Tras borrar la memoria, el siguiente paso consiste en grabar el nuevo programa. El icono de ac­ceso directo para realizar esta función muestra un chip con una flecha roja sobre él. Al situar el ¡co­no encima, aparece el texto “Programar todo”. Al realizar la programación del chip, aparecerá una ventana que indica el progreso de la programación y en caso de que se detecte alguna anomalía, apa­recerá un mensaje indicando que ha habido un error durante la programación. (Figura L0.34.)

Tras realizar una programación es interesante comprobar que el circuito ha sido correctamente grabado. Para realizar esta función, se dispone del icono que muestra una V de color amarillo en­cima de un chip. Si se coloca el ratón encima, un texto indicará la opción Verificar Todo. Si la ve-

Page 339: DsPIC Diseño practico de aplicaciones

LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 321

- WfnPicBOO - 3.55 g

¿y chivo E<toón Expositivo letama A^udo

GÍ ^ §1 Q ^ % S* % \ f? % fpicT 38TID13 ~ 1 3

Q Códicro ,; ^ g P a to s 9 Confia. ^ Jc íx l.x c sp í ¿ i * ^ M «

o x 7 f f c o o 1 2 3 1 3 f f f F F F F F F F F F F F F F F F F F F F F F F F F

0 x 7 P F C 1 0 P F P P FP P P F F F F F P P P FP P P F F F F P I’P F rrrr0 x 7 P P C 2 0 F P P F F P P F F F F F F F F F F F F F F F F F FFFF F F F F

0 X 7 F F C 3 0 F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

Q x 7 F F C 4 0 F P P P P FP P F F F F FP P P P P F F F F F F FFFF F F F F

D X 7 F F C 3 0 rrrr rrrr F F F F F F F F rrrr F F F F F F F F F F F F

0 X 7 F F C 6 0 FP P P F F F F F F F F F F F F F F F F F F F F F F F F F F F F

0 x 7 F F C 7 0 FP P P P P F F F F F F P P F F F F F F F F F F rrrr rrrr0 X 7 F F C 8 0 F P P F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

O x 7 F F C 9 0 FP P P F F F F P P F F P F F P F F F F F P P P rrrr F F F F

O x TFFC A O F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F

0 X 7 F F C B 0 F F F F F F F F F F F F F F F F F F F F F P P P P F P P P P PPlftx 7 P P fO .fl F P P P F F P P Y Y Y Y Y Y Y Y Y V Y Y Y Y Y Y KF’FK FFFF

IUr.»hcfarer- COMI DVPALÍHÉX

Figura L0.32. Cargando valores a programar en la memoria de datos del dsPIC.

àrdevo tdoco BspoaOvo Conftaraoón idbon» Ayuda

CÍ ~ © 0 ! ^ | I r l” c 30P4Ù13 □C 2 C Ò d io o 4 -J DOCOO 4 C o n f ig . 4 g c © d . IC S P : ¿T" ¿ . & ¿4

- P r i n x r y O s c i l l a r o r - -J id d r c o n f lg -

JpRC w /F t L 4x — Internai fast RC o s d U o r w ih 4x PIL 0S C 2 pinislIO . J

-O s e . S o u rc c o n POH- -C lo c k S w itc h in g - - PURI -

OkFSCOOO: C 7 0 1

OKF30C02: 8 0 3 F

OkFWWH: 8 7 B 3

<• Prnury C AJtenáa Osctóor

G O« .tal » fe dock 08 C O n .fá safe dock Off C On , b l ufe dock On

- B row n -

UKrwoot. a i o rOxSWXK: 3 3 0 F

r I i i tm d F ^ E C C LowPwcr 32 KHz Tx rrr I

| 2 . i Y

w nr T ifm k * ACtxFSOOOC COO 3

W HPOL F F T O T X N

P LPO L P7 H C LR E N r GCP ^ BKBUG

j 1.512

wrarPiMMjeíD ICD CanvunÍMticn

17 B O R D I W P H H P IN r GWRP P COE I * * _ J FKUC * fKUO _»J

EUt í-RcBurror-COMI D tfP A L IH X X

Figura L0.33. Seleccionando la palabra de configuración. Es un paso fundamental para que el progra­ma que se va a programar se ejecute correctamente.

WinPic800P ro g ra m a r - 30F4013 Vdd 0

Detectado PIC -> DESCONOCIDO ABorrando PIC . . .E rro r . . .E rro r . . .

..y-

1 OZ |

C ancelar P rogreso f Conforme ;|

dock-4 us CPU-2806 Mhz

r Cenar automáticamente esta ventana al terminar

Figura L0.34. Ventana de progreso de programación del dsPIC.

Page 340: DsPIC Diseño practico de aplicaciones

3 2 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

rificación es correcta, el chip se encuentra correctamente programado y en caso de no funcionar nuestro programa se deberá a una palabra de configuración errónea o algún error cometido en el código fuente escrito con el MPLAB.

En caso de que el software de grabación indique error, hay que revisar el hardware de progra­mación. 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. También es funda­mental comprobar que el puerto serie del PC a través del cual se está comunicando el equipo P1C School con el ordenador es un puerto válido del ordenador y el mismo que se ha seleccionado en el menú de configuración del software.

Otro icono que permite realizar una función 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 configuración. 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 opción de protección de memoria no será posible leer su contenido.

Es recomendable realizar una última configuración a través del menú Configuración: Software. Consiste en habilitar la primera casilla de la pantalla del menú señalada con el texto: Verificar tras la programación. Gracias a esta opción, cada vez que se programe un nuevo dsPIC se realizará au­tomáticamente el proceso de verificación y el software indicará con certeza si el chip ha quedado co-

r V e r i f i c a r t r a s la p r o g r a m a c i ó n

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

Us a r A u t o s e l e c c i ó n del d i s p o s i t i v o

r 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 al entrar

P” A c t u a l i z a r el A r c h i v o a n t e s de p r o g r a m a r

j ...C a n c e l a r ¡I C o n f i r m a r

WinPic800 [ Software configuración ]

Figura LO.35. Opciones del menú de configuración.

Page 341: DsPIC Diseño practico de aplicaciones

LABORATORIO

1 Aplicación de instrucciones DSP con entradas y salidas digitales

L1.1. OBJETIVOS

Esta primera práctica utiliza las entradas y salidas digitales del equipo PIC School y el Motor DSP de los dsPIC. Los objetivos de la práctica son:

• Realizar el primer programa básico con dsPIC ejecutando correctamente todos los pasos de de­sarrollo de un proyecto, que posteriormente se pueden aplicar a ejercicios mucho más complejos.

• Manejar entradas y salidas digitales y las instrucciones DSP para realizar tareas que serían muy costosas en un microcontrolador MCU.

Las operaciones básicas que realiza un microcontrolador MCU son las sumas, restas y opera­ciones lógicas tipo AND, OR, XOR, etc. Otra limitación importante de las familias clásicas de microcontroladores de Microchip es el empleo de registros de 8 bits de datos, lo cual resulta muy limitado para aquellas aplicaciones que necesitan cálculos matemáticos con valores de mayor lon­gitud. Como ejemplo, a continuación se muestra la rutina en ensamblador que realiza una opera­ción tipo M ultiplicación de 16 bits con un microcontrolador PTC de la familia 16F87x:

MULVIó: CLRF RESULT16CLRF RESULTI6J-I

MÜLU16LOOP: BTFSC TEMPY J 6,0CALL ADDI6BCF STATUS.CRRF TEMPY 16_H,FRRF TEMPY 16,FBCF STATUS,CRLF TEMPX16,FRLF TEMPX16_H,FMOVF TEMPY 16,F

Figura L1.1. Rutina de Multiplicación de 16 bits con un microcontrolador MCU de 8 bits. (Continúa).

3 2 3

Page 342: DsPIC Diseño practico de aplicaciones

3 2 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

BTFSS STATUS,Z GOTO MULU16LOOP MOVF TEMPY16_H,F BTFSS STATUS, Z GOTO MULU16LOOP RETURN

ADD 16: MOVF TEMPXJ6,WADDWF RESULT 16 BTFSC STATUS,C INCF RESULT 16_HMOVF TEMPX16_H,W ADDWF RESULT 16_H RETURN

Figura L1.1. Rutina de Multiplicación de 7 6 bits con un microcontrolador MCU de 8 bits. (Continuación)

Debe tenerse en cuenta que no se trata tan sólo del número de instrucciones, sino que es un bu­cle que se repite hasta 16 veces para llegar a la respuesta final. Es una operación muy costosa para un microcontrolador.

Sin embargo, en un dsPIC se dispone de instrucciones específicas para realizar operaciones complejas y una arquitectura que optimiza enormemente el desarrollo de funciones trigonométricaso logarítmicas en comparación con los microcontroladores. La Figura L1.2 muestra algunas ins­trucciones específicas contempladas en la arquitectura de los dsPIC, en las que se manejan valores de 40 bit de tamaño. Se las denomina “instrucciones DSP.”

I N S T R U C C I O N E S D S P I C O P E R A C I O N E S A L G E B R A I C A S

CLR

oil"C

ED A = ( x - y)2

LDAC A — A + ( x -y )2

MAC II + x' *

MAC A - A + x2

MPY A = x * y

MPY.N A = - x * y

MSC A = A - x * y

Figura L1.2. Algunas instrucciones específicas para operaciones algebraicas con los dsPIC.

L1.2. DESCRIPCIÓN DEL LABORATORIO

Este laboratorio trata el manejo de instrucciones DSP. Supongamos que tenemos un robot o un vehícu­lo autónomo 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 más cerca de la pared izquierda que de la derecha, pero además, gracias a esta operación es posible calcular este error de manera exponencial, de forma que se pudiera generar la aceleración necesaria en las ruedas del vehículo para corregir el error de posición.

Page 343: DsPIC Diseño practico de aplicaciones

LABORATORIO 1: APLICACIÓN DE INSTRUCCIONES DSP CON ENTRADAS Y SALIDAS... 3 2 5

En el ejercicio se emplean los interruptores El y E2 para introducir el dato correspondiente al primer sensor ultrasónico y los sensores E3 y E4 para el dato del segundo sensor ultrasónico. Como salida, se emplearán los diodos led del laboratorio PIC School, donde aparecerá el dato correspon­diente a la distancia. Será necesario emplear la operación de multiplicación y realizar una división. 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 cíclicamente.

Figura L1.3. Organigrama del Laboratorio /.

Page 344: DsPIC Diseño practico de aplicaciones

3 2 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

-Sensor 1

■Sensor 2

B ro rcuadrá tico de posición

DISTANCIA EUCLÍDEA-INSTRUCCIÓ N ED

Figura L1.4. Gráfico que muestra el resultado tras aplicar la operación ED.

L1.3. ESQUEMA ELECTRÓNICO

El hardware necesario para poner en funcionamiento la práctica se encuentra en su totalidad dentro de la tarjeta PTC School. Por una parte, es necesario el hardware de programación 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 señales de tierra por los pines 12, 20, 31 y 39 y la tensión positiva de alimentación por los pines 11, 21, 32 y 40. El circuito oscilador está basado en un cristal de cuarzo de 4 MHz y dos condensadores cerámicos de 18 pF. La última conexión re­querida para el funcionamiento del dsPIC es la correspondiente a la tensión 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 válidas para la mayoría de los proyec­tos con dsPIC, con la única diferencia que se pueden utilizar tensiones de alimentación menores, por ejemplo 3,3 V, y otros circuitos osciladores, como un cristal de cuarzo de 7,37 MHz. Los elemen­tos periféricos 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 están configurados en la tarjeta, los conmutadores envían un uno lógico cuando es­tán accionados hacia la zona superior de la placa. Los diodos led son dispositivos activados por ni­vel alto, por lo tanto se encenderán cada vez que el pin de salida correspondiente del dsPIC se en­cuentre a nivel lógico uno.

L1.4. CONSTRUCCIÓ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 opción Project Wizard, que es una

Page 345: DsPIC Diseño practico de aplicaciones

LABORATORIO 1: APLICACIÓN DE INSTRUCCIONES DSP CON ENTRADAS Y SALIDAS. 3 2 7

AP17 AP18

Figura L1.5. Esquema electrónico del Laboratorio 1.

utilidad que facilita la creación y configuración de un proyecto. La primera selección que se soli­cita es el modelo de dsPIC, que para esta práctica es el 30F4013. A continuación, se sclccciona el compilador Microchip ASM30 Toolsuite, que consta de 3 programas. Si al lado de alguno de es­tos programas aparece una cruz roja, se indica que la ubicación del programa no es correcta. Para corregir este error hay que situarse en Location y seleccionar cada programa directamente de la carpeta en la que se haya instalado el MPLAB, que por defecto es “C:\Archivos de programa\Mi- crochipYMPLAB ASM30 Suite\bin” . Figuras L1.6 y L1.7.

P ro ject W iza rd

Step One:Select a device Ü

Device:

\m ^ m m H

< Atrás (I; Sigu¡enje> J ( Cancel« J 1 Ayuda

Figura L1.6. Selección 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 aña­dir los ficheros de código 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 acompaña al libro. Cualquiera de los pasos que se han realizado en esta configuración, pue­den ser modificados una vez creado el proyecto. Por ejemplo, también es posible crear el proyecto sin añadir el fichero con el código fuente y crearlo posteriormente.

Page 346: DsPIC Diseño practico de aplicaciones

3 2 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Project Wi7ard

Step Two:Select a language tQQlsvrte

Active T oolsuite:

T oobuite Contents

MPLA.B LINK30 Objcct Linker (pic30-ld.ox©) UB30 Archiver (pic30-ar exe)

■ Location

C:\Aichivos de piograma\Microchp\MPLAB ASM30 Sute\bin\pic30-as. ■ Browse

Help! My Suite Isn’t Listed! ~~| f~l Show a9 installed toolsuites

< Atrás ~[| Siguiente: Cancelar Ayuda

Figura L1.7. Selección del compilador ASM.30, de libre distribución 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 He- ader Files. Es imprescindible añadir 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­cación que utilice este modelo de dsPIC. Figura L1.8.

Para añadir estos dos ficheros a un proyecto hay que seleccionar la opción Add File pinchando con el botón derecho del ratón encima de cada directorio, tanto “Header files” como “Linker Script”. Después hay que buscar los ficheros en el disco duro, ya que se encuentran dentro de las carpetas de instalación 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 definición para to­dos los modelos de dsPIC. El fichero p30f4013.gld que se encuentra en la ubicación “C:\Archivos de programa\Microchip\MPLAB ASM30 Suite\Support\gld” del disco duro del ordenador. El fi­chero p30f4013.inc está en la ubicación “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.mcpQ Source Ríes

j- Practica l.sÉ Header Files

: p30f4013.incObject FilesLibrary Files

B Linker Scriptsp30f4013.gld

Other Files

Figura L1.8. Ventana del proyecto Laboratorio!.

Page 347: DsPIC Diseño practico de aplicaciones

LABORATORIO 1: APLICACIÓN DE INSTRUCCIONES DSP CON ENTRADAS Y SALIDAS... 3 2 9

Al comienzo del programa en ensamblador hay que realizar una llamada al fichero p30f4013.inc. También es recomendable incorporar la definición de la palabra de configuración para el programa, la cual será generada en el fichero hexadecimal y cargada directamente por el software de grabación. También 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 SE CONFIGURA LA PUERTA D COMOMOV #0x000F, WO ENTRADA RD0 RDl RD2 Y RD3MOV WO, TRISD RD8 COMO SALIDA (AVISO)MOV #0xFFü0AV0 PUERTA B COMO SALIDAMOV WUTRISBMOV WO,PORTD APAGA RD8, AVISO

bucle:BSET CORCON,#IF TRABAJO CON ENTEROSMOV PORTD.W4 LEE PORTD EN W4AND W4,#OxOOOC,W l SE LEEN LOS BITS RD2 Y RD3 ENLSR w i,#0x0002, m EL REGISTRO W2AND W4,#Ox0003,W3 Y RD0 Y RDl ENW 3CPSGT W3.W2 SI W3 > W2 HACEMOSGOTO W3 MAYOR W 3 -W 2SUB W3,W2,W7 EN CASO CONTRARIO W2-W3GOTO MULTIPLICA

W3MAYOR:SUB W2.W3.W7

MULTIPLICA:MPY W7*W7,A MULTIPLICAMOS LA DIFERENCIAMOV ACCAL,W2 POR SI MISMA PARA ELEVARLA AL CUADRADOMOV W2.PORTB MOSTRAMOS EL RESULTADO POR PORTBMOV #0x0004, WO SI EL VALOR ES INFERIOR A 4CPSGT W2AV0 APAGAMOS EL AVISOBRA APAGAR EN CASO CONTRARIO ENCENDEMOS AVISOBSET PORTD,#Ox8GOTO bucle

APAGAR:BCLR PORTD,#0x8GOTO bucle REPETIMOS EL BUCLE INDEFINIDAMENTE

.end

Figura L1.9. Código fuente del Laboratorio 1 .s.

L1.5. CONEXIÓN DE LOS PERIFÉRICOS

Para conectar los distintos periféricos empleados en este laboratorio, deberá seguirse con detalle las conexiones descritas en la tabla siguiente.

Page 348: DsPIC Diseño practico de aplicaciones

3 3 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Pin del dsP!C 30F4013 Elem ento de la PIC SCHOOL

RD8 S7 de SALIDAS DIGITALES (les)

RBO SO de SALIDAS DIGITALES

RB1 SI de SALIDAS DIGITALES

RB2 S2 de SALIDAS DIGITALES

RB3 S3 de SALIDAS DIGITALES

RDO E0 de ENTRADAS DIGITALES (Interruptor)

RD1 El de ENTRADAS DIGITALES

RD2 E2 de ENTRADAS DIGITALES

RD3 E3 de ENTRADAS DIGITALES

L1.6. G RABACIÓ N V EJECUCIÓN

Para compilar el programa se accede a la opción 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 extensión .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 grabación WinPICSOO. Desde este software se programa el dsPIC, siguiendo los pasos señalados en el apartado Software WinPlC800 del capítulo 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 grabación en la posición PC para realizar la grabación por el puerto serie.

Figura L1.10. Para grabar el programa el interruptor del circuito de grabación deberá situarse en la po­sición PC.

Una vez grabado el programa en el dsPIC mediante el botón Programar Todo del programa Win- Pic800, para ver el programa funcionando deberá pasarse el mismo interruptor anterior a la posición RUN, es decir a la posición central. Sólo así comenzará a ejecutarse el programa creado.

Page 349: DsPIC Diseño practico de aplicaciones

LABORATORIO 1: APLICACIÓN DE INSTRUCCIONES DSP CON ENTRADAS Y SALIDAS... 331

Ahora ya sólo falta probar el ejercicio con los periféricos incoiporados en la tarjeta P1C School y de este modo comprobar que el funcionamiento se corresponde con los objetivos de la práctica. 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 corresponderán con la distancia. El dato binario mostrado en los led será mayor según se aumente la diferencia entre el dato introducido por los grupos de 2 interruptores.

Cuando en un grupo de conmutadores se simule la máxima distancia ( l - 1) y en el otro grupo la mínima (0-0). se encenderá el led de aviso (RD8) ya que el resultado de la operación será mayor de4. El zumbador dejará de pitar cuando el dato de respuesta vuelva a situarse por debajo de este um­bral. El programa se repite cíclicamente.

Figura L1.11. Probando el ejercicio con el equipo PIC School.

L1.7. LIBRERÍA MATEM ÁTICA

Además de las instrucciones matemáticas específicas que se han presentado en esta práctica, cabe destacar que Microchip ha desarrollado una librería específica de funciones matemáticas y que ade­más opera con precisión de simple y doble coma flotante según el estándar IEEE-754. Esta librería denominada dsPIC30FMcith Library de libre distribución se suministra compilada, de modo que no hay acceso para visualizar cómo se desarrollan las funciones matemáticas, pero sí se pueden utili­zar en los proyectos.

Además, 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 matemáticas presentes en esta librería y los ciclos de ejecución que necesita cada una de ellas operando en coma flotante.

Page 350: DsPIC Diseño practico de aplicaciones

3 3 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

G rupo de F u n d on es Función C iclos d e e jecu c ió n

Suma 122

Resia 124

Operaciones básicas en coma flotante Multiplicación 109

División 361

Cociente 385

Acos 478

Asin 363

Atan 696

Atan2 3206

Funciones Trigonométricas c HiperbólicasCos 3249

Sin 2238

Tan 2460

Cosh 1049

Sinh 525

Tanh 338

Lxp 530

Frcxp 39

Funciones Logarítmicas y Exponenciales Ldexp 44

Log 2889

Log10 3007

PotenciasPow 2134

Sqrt 493

Funciones de redondeoCeil 94

Floor 51

Valor absoluto Fabs 6

Funciones de Aritmética ModularM odf 151

Fmod 129

Figura L1.12. Tabla con las instrucciones de la librería dsPIC30F Math Library.

NOTA:

En el CD que acompaña al libro podrá encontrar los programas de los laboratorios en lenguaje ensamblador y en C.

Page 351: DsPIC Diseño practico de aplicaciones

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 Simulación y Programación de Aplicaciones, se desarrollará un semáfo­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 introducción de temporizadores de 32 bits en la arquitectura de los dsPIC permite controlar períodos de tiempo mucho más grandes que con los anteriores temporizadores de 16 bits de una for­ma mucho más simple. Estos temporizadores de 32 bits se crean mediante la agrupación 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. DESCRIPCIÓN DEL LABORATORIO

Para implcmentar el semáforo con pulsador se utilizarán varios recursos de la tarjeta de desarrollo PIC School. Por un lado, las salidas de los leds S7 y S5 representarán la luz roja y la luz verde del semáforo respectivamente, cuyo valor ROJO o VERDE también se reflejará sobre la pantalla LCD incluida en la tarjeta.

Por otro lado, el semáforo estará dotado con un pulsador que será el E7 de las entradas digitales de la placa, con el fin de que un peatón pueda pulsarlo y así el semáforo cambie a ROJO para que los vehículos se detengan.

3 3 3

Page 352: DsPIC Diseño practico de aplicaciones

3 3 4 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

Durante 10 segundos, el semáforo estará en rojo, para después pasar a verde durante otros 10 se­gundos, volver a color rojo y así sucesivamente. Esta secuencia sólo se interrumpirá cuando se ac­tive el pulsador E7 que hará que el semáforo páse 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 aplicación Semáforo.

L2.3. ESQUEMA ELECTRÓNICO

El esquema electrónico de este laboratorio es sencillo. Por un lado se debe conectar la patita RAI 1/INT0 a un pulsador de la sección de Entradas Digitales (E7) de la placa PIC School y por otro lado, conectar las patitas RDO y RD1 a 2 leds de la sección Salidas digitales de la placa (S7 y S5).

Para la conexión de la pantalla LCD al dsPIC30F4013, se utilizará el controlador serie SYM 20- AA que permite de una forma sencilla, mediante una transmisión UART y utilizando solamente una patita del controlador dsPIC, mostrar mensajes por la misma. Así, simplemente iniciando uno de los módulos UART del controlador, podremos enviar mensajes a la pantalla LCD a través 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 PIC SchoolPin 1 L6 de PIC School

Pin 2 L7 de PIC School

Pin 3,5 GND de PIC School

Pin 4,6,8,10,11,12,13 Sin conectar

Pin 7 RF3 de dsPIC30F4()13

Pin 9 E de PIC School (LCD)

Pin 14 +5Vcc de PIC School

Pin 15' RS de PIC School

Pin 16 RAV de PIC School

Pin 17 L4 de PIC School

Pin 18 15 de PIC School

Tabla L2.1. Conexiones del controlador LCD serie SYM 20-AA.

Page 353: DsPIC Diseño practico de aplicaciones

LABORATORIO 2: MANEJANDO A FONDO LOS TEMPORIZADORES DE 32 BITS 3 3 5

Nótese que deben quedar ciertas líneas de la pantalla LCD sin conectar. Así las líneas LO, L1, L2 y L3 quedarán libres sin ningún tipo de conexión, así como la entrada GND de la pantalla.

AP17 AP18

SALID AS DIG ITALES ENTRAD AS DIG ITALES

Figura L2.2. Esquema electrónico 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 código ASCII del ca­rácter a mostrar. Previamente es conveniente enviar el carácter OxOOOC que borra la pantalla y co­loca el cursor en la primera fila y columna de la pantalla.

Así para escribir la palabra ROJO, hay que enviar la siguiente secuencia de caracteres en hexa- decimal: OxOC, 0x52 ,0x4F, 0x4A, 0x4F, correspondientes al código de limpiar pantalla, y los códi­gos ASCII de las letras R, O, J y O respectivamente.

L2.4. C O N STR U C C IÓ N DEL PROGRAMA

La programación del controlador se realizará desde el entorno de desarrollo MPLAB IDE. Puede elegir entre hacer el desarrollo en lenguaje ensamblador o lenguaje C.

El programa en lenguaje ensamblador se encuentra divido en tres partes principales. La pri­mera muestra la rutina de atención a la interrupción externa, que simplemente hace que el se­máforo se ponga en rojo y vuelva a comenzar la secuencia del temporizador. Además muestra el mensaje ROJO en la pantalla LCD.

Page 354: DsPIC Diseño practico de aplicaciones

3 3 6 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

.global _main

.global INTOInterrupt

.global_T3Intcrrupt__INTOInterrupt: ;Tratamiento de la interrupción externa

DÍSI #3 :V ;Deshabilitamos interrupcionesBCLR IFS0,#0 ;Borramos el flag de la interrupciónMOV #0x0001;wo ;Ponemos a rojo el semáforoMOV WO,PORTD ;moviendo 1 a PORTDCLR TMR2 ;Borramos el temporizadorCLR TMR3 ;Para que empiece de nuevoMOV #OxOGOC,WO ;Limpia la pantalla LCDCALL TRANSMITEMOV #0x52,WO ;Transmite la letra RCALL TRANSMITEMOV #0x004F,W0 ;Letra OCALL TRANSMITEMOV #OxO()4A,WO ;Letra JCALL TRANSMITEMOV #0x0O4F,W0 ;Letra 0CALL TRANSMITERETFTE ;Devolvemos el control al programa principal

La segunda parte se activa cuando el temporizador alcanza su objetivo y simplemente comprue­ba el estado del semáforo para cambiar al estado contrario. Así, si estuviera en rojo, pasaría a verde y viceversa, mostrando los mensajes correspondientes por la pantalla LCD y los leds conectados al puerto D.

__T3Interrupt: ;Tratamiento interrupción Timer 32 bitsBCLR IFS0,#7 ;Borramos el flag T3IF de la interrupciónBTSS PORTD,#0 ;Si el semáforo está verde, lo ponemosGOTO ROJO ;cn rojoVERDE: ;y en caso contrarioMOV #0x0002,W0 ;lo ponemos en verdeMOV W0,PORTD ;en los leds conectados al puerto DMOV #OxOOOC,WO ;Borramos LCDCALL TRANSMITEMOV #0x0056,W0 ;Mostramos ía VCALL TRANSMITEMOV #0x0045,W0 ;ECALL TRANSMITEMOV #0x0052,W0 ;RCALL TRANSMITEMOV #0x0044,W0 ;DCALL TRANSMITEMOV #0x0045,W0 ;ECALL TRANSMITEGOTO FINALROJO: ;Lo ponemos en rojo

Page 355: DsPIC Diseño practico de aplicaciones

LABORATORIO 2: MANEJANDO A FONDO LOS TEMPORIZADORES DE 32 BITS 3 3 7

MOV #0x0001 ,W0MOV W0,PORTDMOV #OxOOOCWO ;Limpia la pantalla LCDCALL TRANSMITEMOV #0x52,W0 ;Transmite la letra R

I f CALL TRANSMITEMOV #0x004F,W0 ; Letra OCALI, TRANSMITEMOV #0x004A,W0 ;Leíra J . •"CALL TRANSMITE *MOV #0x004p,w0 ;Letra0CALL TRANSMITE

FINAL:RETFDE ;Retomo de la interrupción

La tercera parte se corresponde con el programa principal, que realiza la incialización de los pe­riféricos y después entra en un bucle hasta que se origine alguna interrupción.

.tcxt_main:;ínicialización del puerto D

CLR PORTD MOV #0xFCF0, WO MOV WO, TRISD MOV #0x000 LWO MOV WO,PORTÉ)CLR WO

;Inicial i zainos el puerto D como ;RD0 y RD1 como salidas •configurando TRISD ;Ponemps el semáforo ;en rojo moviendo 1 a PORTD

¡Configuración de interrupción externa INTOMOV #0x000-1, W0 ;Activamos la interrupción externaMOV WO, 1EC0 ;INT0 del pin R A11

:Inicialización del Timer CLR T2CON CLR T3CON CLR TMR3 CLR TMR-2 MOV #0x0280,W0 MOV W0JPR3 MOV #0x0000,W0 MOV W0,PR2

Para cualquier operación 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

BSET IPC1,#I2 BCLR ÍPC1,#Í3 BCLR IPC1, #14 BCLR IFS0,#7 BSET ifeCO, #7

Activamos ílag T3IP = 001 Nivel de prioridad 1

Borramos el flag de interrupción del Timer3 Habilita interrupciones del Timer 3

Page 356: DsPIC Diseño practico de aplicaciones

3 3 8 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

BSET T2CON, #3 ;FIag T32 = 1 . Habilitamos Timer 32 bitsBSET T2CON, #15 ¡Comienza el temporizador con prcescaler 1:1

; y fuente del reloj el ciclo de instrucción'configuración IJART1CLR Ü1BRG ; Configuración de la velocidadMOV #0x0019,WO ; del UART1 según la fórmula descrita en la aplicación 6MOV W0.U1BRGMOV #0x0510, WO Configuración del registro U 1STAMOV WO, IJISTAMOV #0x8020, W0MOV W0, U1MODE

MOV #OxOOOC,WO ; Limpia pantallaCALL TRANSMITEMOV #0x0052,W0 ; Envía RCÁLL TRANSMITEMOV #0x004F,W0 ; Envía OCALL TRANSMITEMOV #0x004A ,W0 ; Envía JCALL TRANSMITEMOV #0x004KW0 ; Envía OCALL TRANSMITE

¡PROGRAMA PRINCIPALPRINCIPAL:CLRWDT ;Refrescamos Perro GuardianGOTO PRINCIPAL ;mientras esperamos que se origine alguna interrupción

TRANSMITE:BTSS U 1 STA,#TRMT ¡Espera a poder transmitirBRA TRANSMITEMOV W0,U1TXREG ;Transmite el dato por el registro LJ1TXREGRETURN.end

Para la inicialización de la configuración del temporizador de 32 bits, deberá tenerse en cuentael reloj utilizado en la placa PIC School, que se trata de un cuarzo tipo XT w/PLL 4X de 4 MHz.Para conseguir una temporización de 10 segundos deberá calcularse el número de ciclos de instruc­ción correspondientes.

Si el cristal es de 4 MHz, el período de un ciclo de instrucción será 1/4 MHz. Si dividimos 10segundos entre este valor nos dará el número de ciclos a contar, que deberá multiplicarse por 4 de­bido a las características (XT w/PLL 4X) del circuito de reloj, obteniendo así un valor de0x02800000 en hexadecimal, número de ciclos a contar.

Por otro lado, para conseguir una velocidad de 9600 baudios, deberá aplicarse la fórmula ana­lizada en la Aplicación 6, Periféricos 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 Comunicación USART encriptada se ahondará en el concepto anterior.

Page 357: DsPIC Diseño practico de aplicaciones

LABORATORIO 2: MANEJANDO A FONDO LOS TEMPORIZADORES DE 32 BITS 339

b l mismo programa en lenguaje C podría ser el siguiente:

«include up30f4G13.hMvoid attribute (( interrupt )) _T3Intermpt(void)(IFS0bils.T3TF = 0; if (PORTDbits.RDO = I)

PORTD - 2; else

PORTD= I;}void attribute (( interrupt )) JNTOInterrupt(void)(IFSObits.INTOIF = 0;PORTD= I;TMR2 = 0;TMR3 = 0:

; }

int main(void)’-'Jr i ' \ , . . . ■ ' . ' '

//Inicialización del temporizador T2CON = 0;T3CON = 0:TMR3 = 0;TMR2 = 0;PR3 = 0x0280;PR2 = 0:IPC1 bits.T31P = ObOO 1;ÍFS0biis.T3IF = 0:IEC0bits.T3IE = 1:T2C:ONbits.T32 = 1;T2CONbits.TON = 1;

//Inicialización del Puerto D PORTD = 0:TRTSD = OxFCFO;

//Inicialización de la rutina externa INT0in co = 1;

//Comí enzo semáforo PORTD = 1; //Programa principal whiled)

asmf'elrwdt"): return(O);} /

Page 358: DsPIC Diseño practico de aplicaciones

3 4 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Una vez compilado el programa, se procede a su grabación en la placa PIC School, de igual manera que en capítulos anteriores. Debe tenerse especial cuidado a la hora de configurar en la pestaña Config del programa WinPic800, y seleccionar como fuente primaria del reloj XTx/PLL 4X - X T With 4X PLL.

L2.5. CONEXIÓN DE LOS PERIFÉRICOS

Además de las conexiones anteriormente descritas para el controlador LCD serie, se deberán co­nectar los siguientes periféricos de la placa PIC School, según la Tabla L2.2.

Pin del dsPIC 30F4013 E lem ento de la PIC School

RAÍ 1 E7 de E. DIGITALES

RDO S7 de SALIDAS DIGITALES

RD1 S5 de SALIDAS DIGITALES

RF3/U1TX PIN 7 DEL CONTROLADOR LCD SERIE

Tabla L2.2. Conexiones del semáforo en la placa PIC School.

La Figura L2.3 recoge las conexiones anteriormente descritas.

Figura L2.3. Conexionado del semáforo en la placa PIC School.

L2.6. GRABACIÓN Y EJECUCIÓN

Una vez cargado el fichero hexadecimal en el programa WinPic800, habrá que configurar en la pes­taña 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 opción X T W/PLL 4X - XT cristal oscillator with 4X PLL. Tras llevar a cabo esta operación, pulsando la opción Grabar Todo, se programará el controlador con la aplicación del semáforo.

Page 359: DsPIC Diseño practico de aplicaciones

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 ejecución del programa. El led S7 de la placa que simula la luz roja de un semáforo, se encenderá durante los primeros

10 segundos. A continuación, se encenderá el led S5 que simula la luz verde del semáforo durante otros 10 segundos. De manera simultánea, aparecerán en pantalla los mensajes ROJO y VERDE.

Figura L2.4. Ejecución del programa semáforo sobre la placa PIC School.

Si en algún momento se pulsa E7, entonces automáticamente comenzará de nuevo la secuencia de 10 segundos de la luz roja.

Page 360: DsPIC Diseño practico de aplicaciones
Page 361: DsPIC Diseño practico de aplicaciones

LABORATORIO..................... ' * ; ; 7 • M ! 1 ! ! ! ! ! • ! 1 '

analógico/digital de alta precisión

L3.1. OBJETIVOS

El siguiente laboratorio describe cómo realizar una conversión analógico/digital de 12 bits optimi­zada empleando el dsP!C30F4013. Los dsPIC presentan mayor resolución de conversión que los mi- crocontroladores de Microchip, ya que éstos son de 8 y 10 bits en función del modelo. Además, la velocidad de conversión también se ha elevado. Estas mejoras unidas a la capacidad de cálculo DSP van a permitir optimizar notablemente los resultados de las conversiones A/D. Los objetivos de es­ta práctica son:

• Desarrollar una conversión analógico/digital de 12 bits de resolución empleando el equipo PÍC School

• Mostrar las ventajas del cálculo del dsPIC para realizar conversiones A/D optimizadas.

En esta práctica se van a utilizar las ventajas del conversor analógico/digital de los dsPIC unido a su capacidad de cálculo, ya que se va a muestrear 10 veces una señal en el mínimo tiempo posi­ble para calcular el dato promedio de la conversión.

Para un microcontrolador resultaría muy costoso tener que promediar 10 señales, y si el dato fue­se alto, por ejemplo 1000, posiblemente se utilizaría una memoria externa para almacenar las mues­tras y posteriormente ir leyéndolas, sumándolas y finalmente realizar una costosa operación de di­visión para un m icrocontrolador MCU. Obtener datos promedios de señales analógicas es interesante para filtrar posibles ruidos o perturbaciones que puedan influir en un instante concreto en el valor de salida de un sensor analógico.

Gracias a la capacidad de cálculo de los dsPIC, es posible emplear una fórmula estadística que permite ir obteniendo el dato promedio de un conjunto de datos sin necesidad de tener que almace­narlos para realizar el promedio. La fórmula es:

M edia_actuat = ((Media„anterior * (Contador - 1)) + Dato_Nuevo) / Contador

3 4 3

Page 362: DsPIC Diseño practico de aplicaciones

3 4 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

En la hoja de cálculo de la Figura L3.1 se puede apreciar cómo la media aritmética obtenida como el sumatorio de todas las muestras dividido por el número de ellas, coincide con el dato fi­nal obtenido empleando la fórmula estadística. Esta fórmula implica el empleo de multiplicacio­nes y divisiones de 16 bits, y debe realizarse a gran velocidad, no siendo aceptable su duración en un microcontrolador MCU.

Contador D ato N uevo M edia Actual

1 88 88

2 12 50,00

3 300 133,33

4 453 213,25

5 452 261,00

6 451 292,67

7 213 281,29

8 1025 374,25

9 2096 565,56

10 4000 909,00

Sumatorio 9090Media Aritmética 909

Figura L3.1. Cálculos matemáticos para obtener el promedio de valores.

L3.2. DESCRIPCIÓN DEL LABORATORIO

Para simular este ejercicio se utilizará un potenciómetro de la tarjeta PIC School que servirá para introducir una señal analógica variable entre 0 V y 5 V y el dato resultado del mencionado cálcu­lo estadístico se visualizará en modo binario por la pantalla LCD. Aunque la conversión analógi­co/digital es de 12 bits, en pantalla se mostrarán los 16 bits del registro donde se almacenará el resultado, por eso los cuatro primeros bits siempre serán cero. El potenciómetro utilizado se corresponde con el nombre P1 del grupo ENTRADAS ANALOGICAS de la tarjeta y su señal 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 conversión 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 microcontrolador 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 ejecución. En este último caso, hay que finalizar el programa 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 ejecución de más instrucciones.

Page 363: DsPIC Diseño practico de aplicaciones

LABORATORIO 3: OPTIMIZANDO LA CONVERSIÓN ANALÓGICO/DIGITAL DE ALTA... 3 4 5

Selección de! DSPJC Selección de la palabra de

INICIO ► Configuraciones de

Entrada y Salida

NO

Configuración de .Ir» in r n iA n - '

Aplicar la Fórmula estadística

Muestra del resultado en ia pantalla LCD

Figura L3.2. Organigrama del programa de conversión analógico/digital optimizada.

L3.3. ESQUEMA ELECTRÓNICO

El esquema electrónico que resuelve esta práctica utiliza el dsPTC30F4013 correctamente alimen­tado y con su circuito de Reset y oscilador, un potenciómetro ajustable con vástago y la conexión 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 MHz ya que es el que hay en la tarjeta PIC School. Cuan­do se realizan conversiones analógico/digitales es conveniente que la impedancia de salida del sensor o del potenciómetro que se va a utilizar no supere los 10 KÍ2. Por esta razón, la resistencia interna del potenciómetro utilizado en esta práctica es de 1 KQ. Deberá conectarse el potenció­metro en sus extremos a señales de 0 V y 5 V para obtener una tensión variable entre estos dos valores según se mueva el vástago. Asimismo, se utilizará la patita U1TX para enviar a la pantalla LCD el resultado.

Page 364: DsPIC Diseño practico de aplicaciones

3 4 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Figura L3.3. Esquema electrónico del Laboratorio 2.

L3.4. C O N STR U C C IÓ N DEL PROGRAMA

Para la construcción del programa se utilizará la herramienta de inicialización de periféricos Visual Initializer. Esta herramienta, como ya se describió en la Segunda Parte, permite configurar de for­ma rápida y cómoda el conversor analógico digital. Para ello se configurará este periférico según los datos de la Finura L3.4.

12-bit A/D Converter ConfigurationC 'je ié* s ,v JS « « h j! ............................................................ UlH\Sl üéJInÿt_ Cnabjt 5 1 1 CPU&63pO,Vli>Mrt

■ □ inatte lM«flu«c<\Sl»TLÇ_ - . Cf. ».a .v ,

CdáOütnAFcttut i '- 'ú y e d if ít ja w :CWJIOcOcctfw. 1 Pirz'iy. | v

Udoge S-ajccsr ¡«VdütVieh.AVscfcYríli v C yt'rue v-;

SinçfcioHode! CervwwsnMoée CcrtQjre as A/D l^nAv.

_.vj*153* Swcs 1 Iwsir* irrcSanâïPafcc. 13X

*E -w : i ICílc.l

CorríOí5«oi/lrt 1 v Corr/9cv*iPflii^i ¡0 ; u»c £eíc )

OockSowse ¡2**.5*Tq> v

»V & SirfafJkort j'o rc :á ¿ líbclhtefeMolÁ} v

0V P r I*Pr 2

=«• 3

i tr e c k A P oí. Iw J : •'ANO V ;|

Sánele A N ea lno.1: •vRíf- •y ,:

î a rç à t 3 Pci. l-çW A«.') *

G-srrp'e 9 Mea Input V

L _ .

Figura L3.4. Configuración del módulo de Conversión Analógico Digital.

Page 365: DsPIC Diseño practico de aplicaciones

LABORATORIO 3: OPTIMIZANDO LA CONVERSIÓN ANALÒGICO/DIGITAI DF AITA. 3 4 7

Una vez configurado el módulo, se generará el código fuente necesario para dicha inicialización a través del menú Code Generation de la herramienta Visual Initializer.

El programa también utiliza el módulo UART1 para enviar datos a la pantalla LCD. La confi­guración de dicho módulo no se realizará a través de la herramienta Visual Initializer, ya que, se cre­ará un fichero con el código fuente correspondiente a la visualización de datos por el LCD total­mente aparte del programa que realiza la conversión. Así, dicho fichero podrá utilizarse en cualquier otra práctica sin tener que reescribir el código correspondiente y sin tener que volver a inicializar el módulo dentro de la herramienta Visual Initializer.

Tras esta inicialización, el programa entra en un bucle infinito hasta que se dé la interrupción ge­nerada por el Conversor Analógico Digital, que se encargará de.aplicar la fórmula estadística y mos­trar los datos en pantalla.

.include ';p30f40!3.inc"

.section .ndataeontador: .hword 0x0800media: .hword 0x0802dato_nuevo; .hword 0x0804.section .rcxt .global ADCInterrupt

__ADCInterrupt:BGLR 1FS0.#ADIFMOV ADC BUFO,W0MOV W0,dato_nuevoINC contadorDEC eontador. WREG MUL mediaMOV dato_nuevo,W5ADD W2,W5,W3MOV contador,'W4REPEAT #17DIV.U W3.W4MOV WO,mediaMOV #OxOOOA ,W4;MOV conta dor,W0CPSEQ W4,W0RETFIEMOV medi a, W0MOV w0,w2CALL W2TOLCDMOV #0x0000,W0MOV W0,eontadorMOV W0,mediaRETFIE

; Variable contador de la fórmula ; Variable media de la fórmula ; Dato recogido del conversor ADC

; Tratamiento de la interrupción

;Borrado del 11 ag de intemipción ¡Recogida del dato de la interrupción

;Se incrementa el contador

;Se multiplica por la media

; Di visión entera

;La operación se hace 10 veces

;Sc muestra el valor por el LCD ;Se reinician las variables

.global „main

Page 366: DsPIC Diseño practico de aplicaciones

3 4 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

..mam:CALL _Visua}lnitialization MOV #0x0000, WOMOV W0,dato_nuevo MOV W0,mediaMOV W0,contador

bucle'

goto buclecnd

;lnicialización del CAD ;lnicialización de las variables

;Bucle infinito

Figura L3.5. Listado del programa Laboratorio 3.

Cabe destacar la instrucción CALL W2TOLCD que llama al procedimiento guardado en el fi­chero W2TOLCD.S que se encuentra en el mismo directorio que la aplicación. 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 conversión se haría tan rápidamente que no le daría tiempo a la pantalla LCD a vi­sualizar los datos correctamente.

L3.5. C O N E X IÓ N DE LOS PERIFÉRICOS

Para las conexiones de este laboratorio resulta altamente recomendable aprovechar el conexionado del controlador serie LCD de la práctica anterior. Así, el resto de conexiones tan sólo serán las in­dicadas en la Tabla L 2.1.

Pin del dsPIC 30F4013 E lem ento d e la PIC SCHOOL

ANO P1 de ENTRADAS ANALÓGICAS

RF3/U1TX PIN 7 DEL CONTROLADOR LCD SERIE

Tabla L2.1. Conexiones de los periféricos del Laboratorio 3.

Además deberán conectarse a +5v y a GND las conexiones de referencia del potenciómetro P l de ENTRADAS ANALÓGICAS.

L3.6. G RABAC IÓ N Y EJECUCIÓN

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 práctica y con la ayuda del fichero laboratorio2.s, que se encuentra en la misma carpeta del CD y contiene el código fuente del ejercicio. Tras escribir el programa, hay que compilarlo para obtener el fichero hexadecimal y posteriormente ejecutar el software de gra­

Page 367: DsPIC Diseño practico de aplicaciones

LABORATORIO 3: OPTIMIZANDO LA CONVERSIÓN ANALÓGICO/DIGITAL DE ALTA.. 349

bación WinPIC800 para grabar la memoria de programa del dsPTC empleando el equipo PIC Scho-ol conectado al puerto serie del ordenador.

Una vez grabado el ejercicio en el dsPlC modelo 30F4013, se coloca el interruptor del circuito de grabación en modo RUN para comenzar su ejecución. 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 conversión A/D tras realizar la fórmula matemática. Según se cambie de posición el valor del potenciómetro P 1 se observará cómo varía 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 analógica de entrada pasa desde 0V hasta 5V.

Figura L3.5. Probando el ejercido de conversión AD en la tarjeta PIC School.

NOTA:

En el CD que acompaña al libro podrá encontrar los programas de los laboratorios en lenguaje ensamblador y en C.

Page 368: DsPIC Diseño practico de aplicaciones
Page 369: DsPIC Diseño practico de aplicaciones

. ' ■ i , : , . . ..

_:' • ■•■■'■--:•• ■■■■• ' '......... : -.........

S iS

m í¿ ■ iv íS

encriptada con el USART

: ; •

L4.1. OBJETIVOS

En esta práctica 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 comunicación sin emplear recursos de la CPU. Los objetivos de la práctica son:

• Configurar correctamente el dsPIC para el envío y recepción de datos por el puerto serie.• Utilizar el Motor DSP para realizar una encriptación 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 matemáticas de los dsPIC se pueden desarrollar mecanismos de encriptación de comunicaciones mucho más avanzados que con un microcontrolador MCU. Con un microcontrolador, para codificar un dato rápidamente se le puede sumar o restar una cantidad fija, que sólo sea conocida por el equipo con el que se establece comunicación.

Por ejemplo, si se quiere enviar el carácter ASCII “z’\ correspondiente al código 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­rácter inteligible. Esto se aplicará a todos los datos transferidos. Sin embargo, un simple desplaza­miento de datos a través de sumas y restas es una protección muy sencilla, que puede ser fácilmen­te descubierta por un programa que pruebe a restar y sumar cifras hasta localizar cadenas de información válidas.

Con un dsPIC es posible complicar mucho la encriptación ya que las operaciones matemáticas que se pueden ejecutar a gran velocidad son mucho más 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 después enviar dos datos, el cociente y el resto de la división. Para poder desencriptar esta información, habría que conocer que hay 2 datos en transmisión por cada dato enviado, que está

351

Page 370: DsPIC Diseño practico de aplicaciones

35 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

previamente elevado al cuadrado y luego desglosado en cociente y resto de una división, que en el caso de esta experiencia tendrá como divisor el valor 100.

L4.2. DESCRIPCIÓN DEL LABORATORIO

En la aplicación el dsPIC esperará la recepción de un carácter 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 codificación 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 parámetros de la comunicación hay que te­nerlos en cuenta a la hora de configurar el dsPIC, ya que la comunicación por el puerto serie es de tipo asincrono y es necesario que los dos equipos conozcan previamente estos parámetros.

Figura L4.1. Organigrama de la práctica de transferencia de datos encriptados.

El programa se repite de forma indefinida en un bucle. Se espera a la recepción de un dato del ordenador. Cuando llegue el dato se aplica el algoritmo de encriptación que consiste en elevarlo al cuadrado y dividirlo entre 100. Tras realizar esta operación tenemos un cociente y un resto, ambos de 8 bits. Estos dos datos son reenviados hacia el PC y se mostrarán en la pantalla del ordenador.

Page 371: DsPIC Diseño practico de aplicaciones

LABORATORIO 4: COMUNICACIÓN ENCRIPTADA CON EL USART 353

L4.3. ESQUEMA ELECTRÓNICO

£1 hardware necesario para este programa se encuentra en la tarjeta PIC School. La conexión con los periféricos es muy sencilla, ya que sobre el circuito conversor serie a LCD del laboratorio ante­rior sólo hay que añadir una línea para recibir los datos del PC, a través de la línea U1RX que se co­necta a la patita RxD del interfaz RS-232 de la placa PTC School.

Figura L4.2. Esquema electrónico de la práctica.

Las patitas, en las que se encuentran las salidas hardware de la USART, serán las utilizadas en este laboratorio. Para probar las comunicaciones y poner en marcha la práctica 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 están­dar más extendido en las comunicaciones por el puerto serie. Es el mismo tipo de cable que se uti­liza para programar los dsPIC a través 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 posición en la PIC School, conectándolo al interfaz RS-232 para poder observar el funcionamiento de dicho laboratorio.

L4.4. CONSTRUCCIÓN DEL PROGRAMA

El código 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 definición p30f4013.inc que contiene todos los bits y re­gistros de control nombrados.

Al comienzo del programa la configuración que hay que realizar sólo 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 comunicación a la velocidad adecuada.

Page 372: DsPIC Diseño practico de aplicaciones

3 5 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

.include "p30f4013.incM

.global __U 1 RXliiterrupt

LÍ1RX Interrupt: ;Tratamiento de interrupción de recepciónBCLR IFS0,#U1RXIF ; de dato. Primero se borra el flag de interrupcionesMOV U 1 RXREG,W7 : Se mueve a W7 el dato recibidoMPY W7*W7,A ;Se eleva al cuadrado dicho datoMOV ACCAL,W2 ;Se mueve a W2MOV #0x0064,'W3 ;Se divide entre 100REPEAT #17DIV.U W2jW3 ;Se transmite el resultado de la divisiónCALL TRANSMITEMOV W 1 AVO ;Sc transmite el resto de la divisiónCALL TRANSMITERETFÍE

.global _main

_main:BSET CORCON,#OxO ;Trabajo con enterosCALL INÍCIAUART ;Inicialización módulo UARTbucle:CLRWDT ;Se espera en un bucle infinitoGOTO bucle ; a que se origine una interrupción por llegada

;de un carácter

ÍN ICI AU ART:CLR U1BRG ;Se inicial iza U1BREG para transmisiónMOV #0x0019,'W0 ;a 9600 baudios con un reloj de 4MhzMOV W0U1BRGMOV #0x8000, W0 ;Se habilita la recepción de datosMOV WO, Ul MODEMOV #0x0510, WOMOV WO, U1 STAMOV #0x8020; WO ;Se habilita el móduloMOV WO. Ul MODEMOV #0x0200, WO ;Sc habilita interrupción por recepciónMOV WO, IECOCLR IEC1CLR IEC2RETURN

TRANSMITE: ;Rutina que envía un carácterBTvSS U1STA,#8 ¡Espera a estar disponibleBRA TRANSMITE ;MOV W0,U ITXREG ;Envía el dato a través de U1TXREGRETURN.end

Figura L4.3. Código fuente del programa Laboratorio 4.

Page 373: DsPIC Diseño practico de aplicaciones

LABORATORIO 4: COMUNICACIÓN FNCRIPTADA CON EL USAR! 355

Una vez configurado el chip, el programa queda a la espera de recibir un nuevo carácter 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 comunicación es full-duplex, de modo que si se recibe un nuevo dato mientras se está enviando la respuesta anterior también es almacenado en el buffer de recepción de la USART.

L4.5. CONEXIÓN DE LOS PERIFÉRICOS

La conexión de los periféricos es bien sencilla. Manteniendo las conexiones del adaptador serie al LCD del ejercicio anterior, sólo se deberán realizar las conexiones reflejadas en la siguiente tabla y que pueden apreciarse en la Figura L4.2.

Pin del dsPIC 30F4013 Elem ento de la PIC SCHOOL

RF2/U1RX RxD de! Interfaz RS-232

KB/U1TX Patita 7 del controlador LCD serie y TxD del interfaz RS-232

L4.6. GRABACIÓN Y EJECUCIÓN

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 comunicación 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­ción 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 cambiar el cable serie utilizado para la grabación del conector donde se en­cuentra al conector del interfaz serie RS-232.

Descripción de \<x conexión

£¿3*... Nueva conexión

Esciiba un nombre y elija un »cono para la conexión:

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 conexión, para lo cual el programa solicita un nombre, y escoger un icono. A continuación, 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 algún otro dispositivo hard­ware conectado en el ordenador. En la pantalla que se muestra en la Figura L4.5 se ha escogido el

Page 374: DsPIC Diseño practico de aplicaciones

3 5 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

puerto CO M 1. El último paso de la configuración es la pantalla de selección de velocidad y tipo de datos. Se ha de escoger la misma configuración que la cargada en el dsPIC: 9.600 baudios, 8 bits de datos, sin paridad, 1 bit de stop y ningún control de flujo. Tras realizar este último paso, se abrirá el puerto serie del ordenador.

Una vez que el programa entra en ejecución, todo carácter escrito con el teclado es enviado por el puerto serie hacia la taijeta PTC School. Cada vez que se reciba un carácter por el puerto es mos­trado en la pantalla. Se puede seleccionar en el menú de configuración del Hypcrtcrminal la opción ECO de los caracteres escritos localmente, que sirve para que veamos en la pantalla los caracteres que estamos tecleando y están siendo enviados hacia el dsPIC. En la pantalla principal hay 2 iconos con los que iniciar y detener la comunicación, que tienen la forma de un teléfono colgado y un te­léfono descolgado respectivamente.

directo C0M1

Escffca detafcs del número de teléfono que desea marcar

E a is o región; £ -parta (34;

Código de área: |91 \

Número de telefona

Conectar usando-

l Aceptar j | C^xetar ]

Figura L4.5. Selección de un puerto COM libre en el ordenador.

Propiedades 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 configuración del puerto serie en el ordenador. Hay que escoger los mismos parámetros que los seleccionados en la USART del dsPIC.

Respecto a la configuración 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

Page 375: DsPIC Diseño practico de aplicaciones

LABORATORIO 4: COMUNICACIÓN ENCRIPTADA CON EL USART 35 7

Figura L4.7. Programa Hyperterminal en ejecución. Las tedas pulsadas serán enviadas hacia el dsPIC y los caracteres recibidos se mostrarán por la pantalla.

ficheros hexadecimales a la memoria FLASH del dsPIC. Por esta razón, 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 estaría controlado por este otro pro­grama y no se podría entrar en comunicación desde el Hyperterminal.

Tras grabar el dsPIC, se pulsará el botón de Reset para comenzar la ejecución de la experiencia. Al teclear un carácter 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 carácter enviado pero en- criptado. Se puede probar a realizar manualmente la operación de desencriptación y así comprobar que las operaciones son realizadas correctamente por el dsPIC. Todo carácter ASCII recibido tiene un valor asignado entre 0 y 255 que puede ser consultado en una tabla estándar de códigos ASCII o en el programa Mapa de Caracteres de las Herramientas del sistema operativo Windows.

Figura L4.8. Fotografía de la PIC School conectada al puerto serie de un ordenador y con el Labor¿i- torio 4 en ejecución.

Page 376: DsPIC Diseño practico de aplicaciones

3 5 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

En la fotografía mostrada en la Figura L4.8, se ha tecleado en el ordenador la letra m que se co­rresponde con el código 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 acompaña al libro podrá encontrar los programas de los laboratorios en lenguaje ensamblador y en C.

Page 377: DsPIC Diseño practico de aplicaciones

í í 'í í ;.ORATORIO

■■ Control deí : í 'í í í í ? j m í-m un motor de CC

PWM

L5.1. OBJETIVOS

Este laboratorio estudia cómo emplear la capacidad del dsPlC para generar señales PWM y regular la velocidad de funcionamiento de un motor de corriente continua. Se procederá a configurar el mó­dulo OC1 del dsPIC30F40l3 para generar una señal cuadrada que aplicada a un chip amplificador regule la velocidad de funcionamiento de un motor. El dsPIC30F4013 pertenece a la familia de pro­pósito general de los dsP!C30F. Sin embargo, existe una familia específica que dispone de un hard­ware adicional para el control de motores. Estos dispositivos, además de generar señales PWM pa­ra control básico de motores de corriente continua, pueden controlar motores más avanzados, como los motores Brushlcss y los motores de inducción de corriente alterna.

Microchip ha creado una serie de diseños 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 Inducción 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 aplicación AN908 y AN901 de Microchip. Pueden descar­garse desde www.microchip.com en la sección correspondiente a las Notas de Aplicación para dsPIC.

Figura L5.1. Sistema de desarrollo para control de motores dsPICDEM MC.1.

35 9

Page 378: DsPIC Diseño practico de aplicaciones

3 6 0 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

Gracias a las familias dsPIC30F y dsP33F específicas de control de motores pueden resolverse aplicaciones de control mucho más complejas que las habituales con cualquier otro microcontrola- dor 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 inducción. Hace falta una gran capacidad de cálculo para resolver este algoritmo de control en tiempo real ya que dispone de lazos de posi­ción, de velocidad, elementos de control Proporcional-Integral, etc. Para poner en funcionamiento los ejemplos de aplicación que facilita Microchip para control avanzado de motores, está disponi­ble el sistema de desarrollo de control de motores dsPICDEM MCI de Microchip. (Figura L5.1).

Figura L5.2. Control vectorial de motores de inducción AC mediante dsPIC.

L5.2. DESCRIPCIÓN DEL LABORATORIO

En esta práctica 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 combinación 00, el motor estará parado e irá aumentando su velocidad progresivamente hasta que se seleccione el máximo valor binario, que se corresponde con los dos interruptores activados, valor 11.

El ejercicio emplea el módulo hardware “Output Compare” del dsPIC configurado en modo PWM sencillo. Para realizar el control básico de un motor de corriente continua se emplea el con­trol de velocidad en función de la tensión de alimentación del motor. Cuanta mayor sea la tensión en las bornas del motor, mayor será la velocidad de giro de su eje. Al aplicar una señal cuadrada a un motor de corriente continua, se consigue modificar la tensión media aplicada en los terminales del motor. Manteniendo la misma frecuencia de la señal cuadrada y modificando el ciclo de traba­jo, es dccir, la proporción 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 ELECTRÓNICO

El esquema electrónico configurado en la tarjeta PIC School para esta aplicación emplea el driver de motores L293D como interfaz entre el dsPIC y el motor. No se puede conectar directamente el

Page 379: DsPIC Diseño practico de aplicaciones

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 suministrar la corriente necesaria a través de sus patitas. Hacer esto estropearía el dsPIC. Es necesario utilizar un driver que actúe como amplificador, convirtiendo las señales TTL generadas por el dsPíC en señales amplificadas en co­rriente adecuadas para el manejo de un motor. El driver L293D tiene una capacidad de carga de0,6 A, mucho mayor que los 20 mA suministrados por cada patita de salida de un dsPIC. Otra ventaja de emplear este driver es que la tensión aplicada al motor puede ser independiente de la tensión de alimentación de la electrónica de control que se introduce a través 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 alimentación común para toda la placa y, por esta razón, esa patita permanece­rá desconectada.

AP18

ENTRADAS AL DRIVER ENTRADAS DIGITALES

Figura L5.4. Esquema electrónico del Laboratorio 5.

Page 380: DsPIC Diseño practico de aplicaciones

3 6 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

L5.4. CONEXIÓN DE LOS PERIFÉRICOS

Para llevar a cabo el laboratorio sobre la placa PIC School, deberán realizarse 4 conexiones princi­pales, resumidas en la Tabla L 5.1.

Deberá prestarse especial atención 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 del dsPIC30F4013 Elemento de la PIC SC H O O L

RDO/OÇ1 F3 de DRIVER 4 CANALES (E4 CONECTADO A GND)

RFO EO de ENTRADAS DIGITALES

RF1 El de ENTRADAS DIGITALES

Tabla L5.1. Conexión de los elementos utilizados en el Laboratorio 5.

L5.6. CREACION DEL PROGRAMA

En primer lugar el programa configura el módulo OCl comparador de salida. Al igual que se indi­có en capítulos anteriores, se utilizará la herramienta Visual Initializer para llevar a cabo esta tarea.

CPU Idle Operation

16 Bit Timer 2 Configuration

0 perational S e ttin g s .......

. 0 Enable on Startup

O G ated Tim e A ccum ula tion

• Timer C lock Prescale: | 1 :256 v

Timer Period: 1

Timer Frequency: 1 ,00006400409 ; (KH z ) (Calc.)

Continue v :

Postscale: :

(msec)

Interrupt

□ E nable Interrupt on Startup

Interrupt Priority:

Help OK C ancel A pply

Figura L5.5. Configuración del temporizador medíanle Visual Initializer.

El primer paso será configurar el circuito del reloj y colocar un reloj tipo XT w/PLL 4X a 4 MHz. A continuación, se configura el temporizador Timer2 estableciendo los parámetros recogidos en la Figura L5.5, es decir, habilitarlo al inicio (Encible on startup), “pre-cscaler” de 1:256 y un período de 1 milisegundo. Y por último, según recoge la Figura L5.6, se procederá a configurar el módulo O C l, estableciendo el Timer2 como elemento de con taje, modo de operación PWM Mode fau lt pin disabled y cargando en OC1R el valor 7000 y en O C 1RS el valor FFFF.

Page 381: DsPIC Diseño practico de aplicaciones

LABORATORIO 5: CONTROL DE UN MOTOR DE CC MEDIANTE PWM 363

Output Compare Configuration

Output Compare Settings----------

0C2 ; 0C3 : 0C40C1

I O Enable Interrupt on Startup

' Interrupt Priority: 0

Help OK Cancel Apply

Timebase lor input compare: j Timer 2 :-V:

Compare Operating Mod« Ì PWM mode. Fault pin disabled

CPU Idle Operation ■Continue V Ì i

OCIR (hex): ■'Vj

: §

0C1RS (hex): •

Figura L5.6. Configuración del módulo OC1.

Una vez configurados los elementos, se inicia la construcción del programa, que simplemente, llamará a la rutina de inicial i zación de los componentes, después configurará las patitas RFO y RF1 para que lean los valores de los interruptores EO y El y, en función de su estado, asignará un valor u otro al registro OC1RS, que hará que se generen distintas señales de salida y, por lo tanto, distin­tas velocidades en el motor.

A continuación, se presenta el código fuente comentado correspondiente al programa que reali­za la función descrita.

; Control de motores vía PWM .include >30f4013,incn .global _main

_ m a in :

CALL _VisualInitializationMOV #0x0003. WOMOV W0,TRISFMOV #0x0,WOMOV W0,ADPCFGMOV #0x0100, WOMOV W0.PR2

COMPRUEBA:BTSC PORTF,#RFIGOTO RD1 „.UNOBTSS PORTF,#RFOGOTO m a r c h a _c>;roGOTO MARCHA JUNO

ROI „UNO:BTSS PORTF,#RFOGOTO MARCHA_DOS

;Inicialización de TMR2 y OC1 ;RF0 y RF1 entradas

:PORTF señales digitales

;Valor máximo 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

Page 382: DsPIC Diseño practico de aplicaciones

3 6 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

GOTO MARCHA.TRES ;Velocidad 3MARCHA CERO:

MOV #0x0,W0 ;Mueve 0 a OC1RSMOV WO,OC1RS ;Ia velocidad será 0GOTO COMPRUEBA ;Compmeba interruptores

MARCHA_UNO:MOV #0x0030,W0 ;Mueve a OC1 RS 30MOV WO,OC1RS ; Velocidad baja (máximo 100)GOTO COMPRUEBA ;Comprueba interruptores

MARCHAJDOS:MOV #0x0080,W0 ;Mueve a OC1RS 80MOV WO,OC 1 RS ;velocidad altaGOTO COMPRUEBA ;Comprueba interruptores

MARCHA_TRES:MOV #0x0100, WO •»Mueve a OC1RS el valor 100MOV WO,OC1RS ;Velocidad máximaGOTO COMPRUEBA ;Comprueba interruptores

.end

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 máximo de revoluciones. Para cambiar el giro del motor, podría jugarse con la conexión 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. GRABACIÓN Y EJECUCIÓN 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 código fuente y compi­larlo. El siguiente paso consiste en grabar el fichero hexadecimal de la práctica en la memoria del dsPIC empleando el software WinPIC800 y el equipo PIC School. Para hacer esta operación hay que seguir los mismos pasos que se han explicado en la sección del software WinPIC800 y que se han seguido en el resto de laboratorios.

Una vez grabado el programa, se pulsará el botón de Reset de la tarjeta para comenzar su ejecu­ción. Según se modifique el valor de los interruptores E0 y E l de la tarjeta, varía la señal PWM ge­nerada por el dsPIC y se aprecia su efecto con el movimiento de giro del motor. De 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 más elevada, creciendo de for­ma progresiva.

Page 383: DsPIC Diseño practico de aplicaciones

LABORATORIO 5: CONTROL DF UN MOTOR DE CC MFDIANTE PWM

Figura L5.7. Control de un motor de CC mediante PWM en la tarjeta PIC School.

NOTA:

365

En el CD que acompaña al libro podrá encontrar los programas de los laboratorios en lenguaje ensamblador y en C.

Page 384: DsPIC Diseño practico de aplicaciones
Page 385: DsPIC Diseño practico de aplicaciones

L6.1. OBJETIVOS

Este laboratorio aborda la tarea de resolución de una ecuación típica de filtrado de señales. Concre­tamente resuelve la ecuación general para filtros FIR representada en la Figura L 6 .1.

yn = boXn+ b ,X n., + b 2Xn.2

Figura L6.1. Ecuación general de un filtro FIR.

La resolución de este tipo de ecuaciones resulta de especial interés en el tratamiento digital de señales. Una de las características fundamentales para una vez capturada la señal se pueda aplicar el filtro y reconstruir la señal filtrada es la velocidad de proceso. Los dsPIC disponen de una ins­trucción especialmente eficaz para realizar esta función, denominada MAC, que permite realizar esta ecuación de una forma rápida y sencilla.

L6.2. DESCRIPCIÓN DEL LABORATORIO

Para introducir los coeficientes de la ecuación general se utilizará el módulo 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 módulo de comunicación.

La aplicación, 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 línea 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 ecuación.

Los datos deberán enviarse de forma ordenada, es decir, en primer lugar se enviará bü, a conti­nuación x„, más tarde bj, xn.i, b2, y por último x„_2.

3 6 7

Page 386: DsPIC Diseño practico de aplicaciones

3 6 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Cada vez que se reciben dos operandos se efectúa la suma de ambos y se acum ula el resul­tado en el Acumulador A, mostrando 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­ción 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 también del acumulador, cuando se visualice únicamente el acumulador, parpadeará el cursor.

Inicialización del módulo UART

______I _____Recepción de un

► byte b, del módulo UART

____________▼_____

Visualizadón del dato recibido y la

parte baja del Acumulador A

Recepción del segundo byte x„

Multiplicación y acumulación

(MAC) de b, * x„

TVisualización del dato recibido y el

valor del Acumulador A

Figura L6.2. Diagrama de flujo del Laboratorio 6.

L6.3. ESQUEMA ELECTRÓNICO

El laboratorio 6 hace uso de varios periféricos para su funcionamiento. Por un lado se encuentra la pantalla LCD que visualizará los resultados y que requiere del controlador serie. Por otro, se re­quiere de la conexión al puerto USART a través del interfaz RS-232 para la recepción de los ope­randos de la ecuación.

Finalmente, esta aplicación requiere un interruptor de entrada para activar la interrupción encar­gada de mostrar los 32 bits de menos peso del Acumulador A. El esquema electrónico correspon­diente a estas funciones se muestra en la Figura L6.3.

Activación interrupción extema INTO

\/Muestra los 32 bits de menos

peso del Acumulador A

Page 387: DsPIC Diseño practico de aplicaciones

LABORATORIO 6: DISEÑANDO FILTROS 36 9

35 R A 1 1 < 0 - Ê Z --------------------- 1— X- 2

3 RF2/U1RX *“ 42 -K * " 5

CANAL SERIE

ENTRADAS DIGITALES

Figura L6.3. Esquema electrónico del Laboratorio 6.

L6.4. C O N E X IÓ N DE LOS PERIFÉRICOS

Para llevar a cabo las conexiones descritas en el esquema de la Figura L6.3, hay que interconectar adecuadamente los periféricos indicados en la Tabla L6.1 correspondientes a la tarjeta de desarro­llo P1C SchooL

La aplicación utiliza el controlador serie a LCD, cuya adaptación ya ha sido comentada en la­boratorios anteriores.

Patita del dsPIC30F4013 Elemento de la PIC SCH O O L

RF2/UIRX RxD del interfaz RS-232

RF3/U1TX Patita 7 del controlador LCD serie

RA1 l/INTO E7 de ENTRADAS DIGITALES

Tabla L6.1. Conexiones de la PIC School para el Laboratorio 6.

L6.5. CREACIÓN DEL PROGRAMA

Para la programación del dsPíC se ha creado un proyecto que contiene dos ficheros fuente princi­pales. El fichero lahomtorioó.s se corresponde con el código 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 través del adaptador serie a LCD.

A continuación, se describen las paites principales del fichero laboratorioó.s que dispone de las rutinas principales de la aplicación. El fichero LCD.s contiene rutinas ya explicadas en laboratorios anteriores.

Page 388: DsPIC Diseño practico de aplicaciones

3 7 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

.include "p30f4013.inc"global__JNTOInterrupt; Tratamiento de la interrupción INTO_ÍNTOlnterrupt:

BCLR IFS0,#0 ;Borra flag de interrupciónCALL LIMPIA ; Borra pantalla LCDCALL PARPADEA ;Muestra cursor parpadeando en LCDMOV ACCAH,W2 ;Muestra ACCAH en la línea sup. del LCDCALL W2TOLCDMOV ACCAL,W2 ;Muestra ACCAL en la línea inf. del LCDCALL W2TOLCDRETFIÉ ;Retorna de la interrupción

La primera parte del código se corresponde con el tratamiento de la interrupción externa INTO. Al activar el pulsador E7, se provoca una interrupción que muestra en la pantalla LCD los 32 bits de menos peso del Acumulador A.

.global__U1 RXInterruptU1 RXInterrupt:

BCLR IFS0,#U 1RXIF ;Borra flag interrupción RXUART1MOV U1RXREG,W2 ;Mueve el dato recibido a W2BTSC W3,#0X0 ;Si W3 es uno significará que ha recibidoGOTO OPERA ;el segundo dato y realizará la multipl.MOV W2.W4 ;Si es el primer dato lo guarda en W4MOV #0X0001,W3 ;Marca en W3 que ya ha recibido un datoGOTO MOSTRARPANTALLA ;Muestra el primer dato en pantalla

OPERA: ;Si ha recibido el 2o datoMOV W2,W6 ;Sa!va el 2o dato en W6MAC W4*W6,A ;Multiplica los 2 operandos y acumulaCLR W3 ;Pone a 0 W3 indicador de operandos

MOSTRARPANTALLA:CALL LIMPIA ;Limpia pantallaCALL NOPARPADEA ;No parpadea el cursorCALL W2TOLCD ;Muestra el último dato recibidoMOV ACCAL.W2 ;Mucstra ios 16 bits de menos peso de ACALL W2TOLCDRETEJE ;Retoma de la interrupción

Esta segunda parte se corresponde con el código de atención a la interrupción de datos por el mó­dulo USART. Cuando recibe el primer dato lo salva en W4 y lo muestra junto con el valor de AC- CAL. Al recibir el segundo dato, realiza la multiplicación y acumulación mediante el uso de la ins­trucción MAC, mostrando de nuevo el último dato y el valor del registro ACCAL. La ejecución de esta instrucción MAC es la que realiza las operaciones matemáticas necesarias para la resolución de la ecuación planteada.

Page 389: DsPIC Diseño practico de aplicaciones

LABORATORIO 6: DISEÑANDO FILTROS 371

.global _main;PROGRAMA PRINCIPAL_main:

BSET CORCON,#OxO ;Operación con números enterosCALL INICIAUART ;Inicializa la UART e INTOCLR W3 ;Pone cero el contador de operandos

bucle:CLRWDT ; Entra en un bucle infinito a la esperaGOTO bucle ;de una interrupción

El programa principal simplemente inicializa los periféricos utilizados y entra en un bucle a la espera de que se dé alguna interrupción.

INICIAINTO:•Configuración de interrupción externa INTO MOV #0x0001, W0MOV W0, IEC0RETURN

Rutina de inicial i zación de la interrupción externa TNTO y USART.

INICIAUART:CLRU1BRGMOV #0x0019,W0 ;Configuración del registro U1BREGMOV WOAJIBRG ;para un reloj de 4M Hz y 9600bpsMOV #0x8000. W0MOV W0, UlMODE :Modo de transmisión

- MOV #0x0510, W0MOV W0, U1 STAMOV #0x8020, W0MOV í : W0, UlMODEMOV #0x0201, W0 ; Interrupciones activas para USART e INTOMOV W0, IEC0CLR [EC1CLRRETURN

.end

ÍEC2

L6.6. GRABACIÓN Y EJECUCIÓN DEL PROGRAMA

Una vez compilado el programa se utiliza el programa WinPic800 para grabarlo en la memoria del dsPIC. Es necesario seleccionar en la pestaña 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

Page 390: DsPIC Diseño practico de aplicaciones

3 7 2 dsPIC. DISEÑO PRACTICO DE APLICACIONES

como ya se describió en laboratorios anteriores. La configuración de esta comunicación 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 posición RUN para que comience la ejecución del programa.

Los coeficientes a introducir en la ecuación general serán los indicados en la Tabla L6.2.

b ¡ xn

65 66

67 68

69 70

Tabla L6.2. Coeficientes a introducir en el ejemplo de ejecución 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 códigos ASCII de las letras A, B, C, D, E y F respectivamente. Así, la introducción de estos valores por el programa HyperTerminal de Windows será muy sencilla, te­niendo que pulsar consecutivamente las teclas indicadas en mayúscula.

Con estos valores, el resultado final de la ecuación de filtrado deberá ser el siguiente:

y„ = 65 x 66 + 67 x 68 + 69 x 70 = 13.676

La ejecución de la aplicación, paso a paso, sigue el guión detallado en la Tabla L6-3.

A cció n

Al iniciar la ejecución del programa en la pantalla LCD no aparece ningún dato hasta recibir el primer operando por el puerto USART.

A l pulsarla tccla A (mayúscula) en el programa HyperTerminal de Windows, se envía el código 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 todavía sólo ha recibido b¡ y no puede multiplicarlo por x„.

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 varía.

j Con el último dato, F (70), aparece ya el resultado de la j ecuación final. 13676 = 8846 + 69*70.

Como segundo operando xn se envía 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 varía, ya que necesita de otro dato más para reali­zar la siguiente multiplicación y acumulación.

Tabla L6.3. Seguimiento de la ejecución del Laboratorio 6.

Page 391: DsPIC Diseño practico de aplicaciones

LABORATORIO 6: DISEÑANDO FILTROS 373

En cualquier momento podría 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. Fotografía que muestra la visualización do los 32 bits de menos peso del Acumulador A.

El cursor parpadea para distinguir que en la línea 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 acompaña al libro podrá encontrar los programas de los laboratorios en lenguaje ensamblador y en C.

Page 392: DsPIC Diseño practico de aplicaciones
Page 393: DsPIC Diseño practico de aplicaciones

•••••• • -

LABORATORIO

Grabando la memoria FLASH de programa con un bootloader

L7.1. OBJETIVOS

Una característica muy interesante de los dsPIC consiste en la posibilidad de autoprogramarse. Aprovechando esta característica, el presente laboratorio muestra cómo confeccionar un programa bootloader que permita la programación 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 grabación del dsPIC se sustituye por un circuito de recepción de datos por el interfaz RS- 232 que es mucho más económico. También puede resultar muy útil en aplicaciones que cambien frecuentemente de parámetros de código de ejecución, en las que con una conexión por el puerto se­rie se actualizarían fácilmente.

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. DESCRIPCIÓN DEL LABORATORIO

Para la implemcntacíón de este laboratorio se requieren dos elementos principales. Por un lado se requerirá un programa 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 acompaña a esta obra, dentro de la car­peta LABORATOR!OS\ LABORATORIO 7\ MINIBOOTLOADERV Minibootloadcr.exe. Se trata de un pequeño programa que no requiere instalación alguna y que enviará por el puerto serie 96 bytes a razón de un byte cada medio segundo. Esos 96 bytes se corresponden con 32 instrucciones del progra­ma. Cada instrucción está formada por 3 bytes y la grabación en memoria FLASH se realiza en bloques de 32 instrucciones, de ahí que el programa Minibootloader.exe envíe 96 bytes por el puerto serie.

3 75

Page 394: DsPIC Diseño practico de aplicaciones

3 7 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Puerto sene jCOMI v

Env«f ptogtema

Figura L7.1. Aplicación Minibootloader.exe.

El programa Minibootloader es muy sencillo. Para su ejecución se selecciona el puerto serie a utilizar de la lista desplegable Puerto serie y se pulsa el botón 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 grabación se ha llevado a cabo.

Cada dato recibido a través 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 posición de la memoria de datos donde almacenará temporalmente los datos recibidos hasta que pueda grabarlos en la memoria FLASH. Como la grabación 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 posición de memoria

▼Recibe dato por

UART

▼Muestra dato por LCD y contador

posición de memoria

;

Aumenta contador de posición 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.

Page 395: DsPIC Diseño practico de aplicaciones

LABORATORIO 7: GRABANDO LA MEMORIA FLASH DE UN PROGRAMA CON UN. 3 7 7

L7.3. ESQUEMA ELECTRÓNICO

El Laboratorio 7 emplea periféricos analizados en temas anteriores, como son el display LCD, el in­terfaz RS-232 y una salida digital conectada al led S5 que señaliza que el proceso de grabación 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 electrónico del Laboratorio 7.

17A . C O N E X IÓ N DE LOS PERIFÉRICOS

La conexión de los periféricos queda resumida en la tabla siguiente y es muy similiar a la de labo­ratorios anteriores,

Ratita del dsPIC 30F4013 Elem ento d e la PIC SCHOOL

RF2/U1RX RxD del Interfaz RS-232

RF3/U1TX Ratita 7 del controlador LCD serie

RDO S5 de SALIDAS DIGITALES

L7.5. C O N STR U C C IÓ N DEL PROGRAMA

Para la construcción del Laboratorio 7 se ha creado un proyecto con 3 ficheros de código fuente.Un primer fichero llamado LCD.s es el encargado de las rutinas de visualización de datos por la

pantalla LCD de la placa PTC School y su estudio ya se ha realizado en laboratorios anteriores.

Page 396: DsPIC Diseño practico de aplicaciones

3 7 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Hxiste un segundo fichero, denominado grabaprograma.s, que se analiza a continuación 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 posición 0x0A00.

Para determinar la primera posición desde la que se almacena el programa una vez creado den­tro del MPLAB IDE con la opción View Disassembly listing se puede observar hasta qué posición ocupa el mismo. Con un pequeño margen se localiza una posición libre de la memoria de programa donde ubicar los datos recibidos por el puerto serie. Para este laboratorio se ha elegido la posición OxOAOO.

.global GRABA

.include "p30f40i3.inc"

GRABA:

SECUENCIA DE BORRADO

MOV #0X4041,wO ;carga en NVMCON 0x4041MOV WO.NVMCON ;para iniciar el borradoMOV #tblpage(#OxAOO),WO ;mueve a NVMADRUMOV WO.NVMADRU ;la página de memoria a borrarMOV #tbIoftset(#0xA00),W0 ;mueve a NVMADRMOV WO, NVMADR ■los 2 bytes de menos peso de la direcciónDfSI #5 ;deshabilita interrupciones en 5 instruccionesMOV #0X55,W0 ;mueve la secuenciaMOV W0.NVMKEY ;de 55 y AAMOV #0XAA,W0 ;al registro de controlMOV W0,NVMKEY ■NVMKEYBSET NVMCON,#OXF ;activa bit WR (el bit 15 de NVMCON)NOP ;para que se inicie la grabaciónNOP ■introducir 2 NOPCLR W2CLR W3

El fichero grabaprograma contiene la rutina GRABA que comienza borrando 32 instrucciones apartir de la posición OxOAOO de la memoria de programa.

; CARGA DE LOS DATOS EN MEMORIA; RELLENAMOvS LA FILA COMPLETA DE 96 BYTES

MOV #0X0, w o ;Mueve a TBLPAGMOV W0,TBLPAG ;la página memoria de la dirección a escribirMOV #0xA00,W0 ;deja en W0 el desplazamiento de la páginaMOV #0x090 i,W4 ;el primer byte recibido está en 901MOV #0x096 LW6 ;el último en 0x0961 de la memoria datosOTRAÍNSTR:MOV.B [W4],W3 ;carga en W2 los 2 bytes de menos peso

Page 397: DsPIC Diseño practico de aplicaciones

LABORATORIO 7: GRABANDO LA MEMORIA FLASH DE UN PROGRAMA CON UN. 37 9

ADD W4J0x0001,W4 lañade 1 al coniador de direcciónMOV.B [W4],W2 ;carga el dato en W2SL VV2,#0x008, W2 ■.desplaza el dato al byte alto de W2ADD W4>#0x000l,W4 ;añade 1 al contador de memoriaMOV.B | W4],W7 ;niüéve el contenido a W7ADD W7,W2.W2 ;suma W2+W7 para tener en W2 2 datosTBLWTL W2,( W0J ;escribe dirección apuntada por W0 el

;contenido W2TBLWTII W34W0++] ;guarda W3ADD W4,#0x0001, W4 :suma uno al contadorCPSEQ W4.W6 ;comprueba si es el último datoGOTO OTRAINSTR :graba otra instrucción

A continuación la rutina recupera los datos de las posiciones de memoria 0x0901 hasta la posi­ción 0x0960 para su grabación en memoria.

; PROCEDIMIENTO DE ESCRITURA

MOV #0x4001.W0 ;indica a NVCOM el dato 0x04001MOV WO,NVMCON ;para realizar grabación memoriaDISI #5 ;deshabilita interrupciones en 5 instruccionesMOV #0X55,W2 ;genera la secuencia de controlMOV W2.NVMKEY ;’55’ y CAA’ en NVMKEYMOV #0XAA,W1MOV WLNVMKEYBSET N VMCON,#W R ;A 1 el bit WR de NVMCON para que seNOP ;inice la grabaciónNOP ; y espera con 2 NOPESPERA2: ;asimismo espera a que el bit WRBTSC NVMCON,#WR ;pase a 0GOTO ESPERA2 ;para seguir con el programaNOP

Se ejecuta el procedimiento de escritura en memoria como ya se estudiara en secciones anterio-res de esta obra.

CLR TRÍSD ániciaJiza PORTD como salidaBSET PORTD,#OxO ;enciende el led conectado a RD0

RETURN ;retomo

Por último, enciende el lcd conectado a RD0 para indicar al usuario que el proceso de grabación 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 aplicación.

Page 398: DsPIC Diseño practico de aplicaciones

3 8 0 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

.include "p3Gf401 3.ine"cclhhñl Ï T1R XTnfp.mmf

‘ _ÜlRXInterrupt:¡Recepción de un byte por UART

BCLR IFS0,#U1RXIFCLR WOMOV U 1 RXREG,Wr0MOV.b W0,[W4] ;Se guardan los datos consecutivamenteAD D W4, #0X0001,W4 ;a partir de la posición 0x0901MOV #0x0960,W3 ;hasta la posición 0x0961

CPSEQ W4,W3GOTO FÍNRX ;Si se reciben todos los datosCALL GRABA ;entonces se graban en FLASH

FÍNRX:MOV U 1RXRHG,W2 ; Visualiza el dato recibidoCALL LIMPIA ;en la primera línea del LCDCALL W2TOLCDMOV W4,W2 •»Visualiza la posición de memoria

: CALL W2TOLCD ;donde guarda dicho datoRETFIE ;Retomo de la interrupción

Esta rutina de interrupción 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 posición 0x0901 hasta la posición 0x0961. Los guarda en la memoria de datos para que este proceso de almacena­miento sea más rápido 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 posición de memoria donde es almacenado.

.global _main

main:CALL INICIAUART •Jnicialización del módulo UARTMOV #0x0900,W4 ;Dirección donde empezar a

;guardar los datosbucle: ;PROGRAMA PRINCIPAL

CLRWDT ;Bucle infinito a la esperaGOTO bucle ;de interrupción

INICIA UART. CLR MOV

Jnicialización UART ;Configura U1BREG para 4MHzU1BRG

#0x0019,W0 ;y 9600bpsMOV W0,U 1BRGMOV #0x8000. W0MOV W0. U1MODE ;Gonfigura modoMOV #0x0510. W0MOV W0, U1 STAMOV #0x8020. WOMOV W0, UÌMODEMOV #0x0200, W0MOV W0. BÉCO ;Configura interrupcionesCLR IEC1CLR IF.-C2RETURN ;Retomo subrutina

.end

Page 399: DsPIC Diseño practico de aplicaciones

LABORATORIO 7: GRABANDO LA MEMORIA FLASH DE UN PROGRAMA CON UN... 381

Esta parte del código contiene el programa principal, que simplemente inicializa el módulo UART para una comunicación serie a 9600 baudios, 8 bits de datos, 1 de stop y sin control de paridad. Inicia también el contador de posición de memoria donde almacenar los dalos y entra en un bucle, infinito esperando que se produzca una interrupción en el módulo UART al recibir los da­tos del programa Minibootloader.

17.6. GRABACIÓN Y EJECUCIÓN DEL PROGRAMA

Una vez compilado el proyecto y generado el fichero laboratorio?.hex hay que cargar dicho fiche­ro en el dsPIC a través del programa WinPicBOO. Es conveniente recordar que en la pestaña Config hay que seleccionar XT w/PLL 4X en la opción Primary Source antes de la grabación del mismo.

Figura 17 A . Fotografía del Laboratorio 7 montado sobre la PIC School.

A continuación, 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á ningún dato hasta que se arranque en el PC el programa Mini- bootloader, se conecte el cable serie en el conector del interfaz RS232 y se pulse el botón Enviar Da­los del programa Minibootloader. Deberá elegirse de forma adecuada el puerto serie a utilizar.

Puerto serie: ¡C O M I v

Enviai programa

Figura L7.5. Programa Minibootloader.

Page 400: DsPIC Diseño practico de aplicaciones

38 2 dsPIC DISEÑO PRÁCTICO DE APLICACIONES

Al pulsar el botón Enviar programa el dsPIC comienza a recibir datos por el puerto serie que se visualizan en la pantalla LCD junto con la dirección 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 posición de memoria donde es almacenado.

Una vez enviados los datos al dsPIC, el programa Minibootloader muestra un mensaje en pan­talla indicando que el envío ha finalizado. Figura L7.7. Luego el dsPIC activa el led S5 para indicar que el proceso de grabación ha concluido. (Figura L7.8.)

Figura L7.7. Fin del envío de datos.

Mirribootloa... X

Datos enviados

Aceptar 1 í____1

Figura L7.8. El led S7 se

Queda por comprobar que la grabación ha sido correcta. Mediante el programa WinPicBOO se leerá el contenido de la memoria de programa del dsPIC para efectuar esta comprobación.

Se coloca el interruptor del circuito de grabación en posición PC. Y en el programa WinPic800 se pulsa la opción Leer Todo. Tras realizar esta operación en la pestaña Datos se observa que en la posición OxOOAOO se encuentran unos bytes distintos al resto, que son los enviados por el programa Minibootloader. (Figura L7.9.)

enciende al finalizar la grabación del programa.

Page 401: DsPIC Diseño practico de aplicaciones

LABORATORIO 7: GRABANDO LA MEMORIA FLASH DE UN PROGRAMA CON UN... 3 8 3

p W¡nPic800 - v 3.56.c FÍRE3'fiiwbííwo CcWvjocwi {ik*no AnwJaw i w n g n x v w

\g¡*i \ 0 :; M ® v ^ ^ % j ?ic Í0? HK'zl &

Figura L7.9. Memoria de programa modificada en la posición 0x00A00.

*><.- ^ m " . ¿V S I ' r : ' % j 3 0F 4 01 3 3 :Q r'

: S n ¿ D atos 4 Conf irj, ^C o d .IC S P -r ic s r

; <)x009A0: FFFPFF FFFFFF FEFEFF FFFFFF FFFPFF FFEFFF FFFPFF FPFFFP ±1OX009B0: FFFFFF FFFFFF FFFEFF FFFFFF FFFFFF FFEFEF FFFFFF FFFFFF

Juxuu y cu : FFFFÍT FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFFOk009D 0: FFFFFF FFFFFF FFFPFF FFFFPF FPFFFP FFFFPF FFFPFF PPFFFFOX009E0: FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF m

i

OxOOOFO: FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFFQxOOAOO: EF22D2 A802D4 FE6000 OáOAO-1 ¡JPFPFF FFp f p f FFFPFF FFPFPFOxOOAlO: FFFFFF FFFFFF FFFFFF FFFFFF Fp f p f f FFPFPF FPFFFP FFFFFFUX00A20: FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF ■Ox00A30: FFEFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF FFFF880x00A40: FFEFFF FPFPFF FFEFFF FEFEFF FFFFFF FFFFFF FFFPFF FFPFPF .OxQOASO:

*FFFFFF FFFFFF FFFFFF FFFFFF FFFFEF FFFEFF FFEFFF FFPFPF d2_r

m m

Page 402: DsPIC Diseño practico de aplicaciones
Page 403: DsPIC Diseño practico de aplicaciones

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 ejecución de las rutinas de interrupción, salvando los datos necesarios

y protegiendo fa parte de código adecuada.

» V .W .

L8.2. DESCRIPCIÓN DEL LABORATORIO

La velocidad de procesamiento de instrucciones del dsPIC es muy alta. Tratar de producir dos inte­rrupciones que se produzcan de forma simultánea resulta bastante complicado. Este laboratorio tra­ta de conseguirlo mediante la configuración de tres fuentes de interrupción distintas. La primera pro­viene de un temporizador de 32 bits, la segunda de una interrupción externa conectada al generador lógico de la placa PIC School y la tercera del módulo UART.

La interrupción externa INTO se configura como la menos prioritaria y la ejecución de su rutina de atención mostrará en el LCD el mensaje INTO. La siguiente interrupción con más nivel de prio­ridad será la del Temporizador de 32 bits, que aproximadamente cada segundo generará una inte­rrupción que visualizará en el LCD el mensaje TEMP32. Por último, la interrupción más prioritaria será la proveniente del módulo UART que mostrará en la pantalla LCD el mensaje recibido por el puerto serie del ordenador.

Al estar conectada la patita INTO al generador lógico de la tarjeta PTC School, podrán seleccio­narse distintas frecuencias para la generación de interrupciones externas. Si se selecciona una fre­cuencia de 1 Hz, se genera una interrupción por segundo y con una frecuencia de 10 Hz se genera­rán 10 interrupciones por segundo.

385

Page 404: DsPIC Diseño practico de aplicaciones

3 8 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Figura L8.1. Diagrama de flujo del Laboratorio 8.

L8.3. ESQUEMA ELECTRONICO

El esquema electrónico del Laboratorio 8 se muestra en la Figura L8.2, en el que se conectan al dsPIC el módulo serie a LCD SYM20-AA para mostrar los mensajes de las interrupciones en la pantalla LCD, la patita RAI l/INTO al generador lógico para generar las interrupciones externas a distintas frecuencias y RF2 al interfaz RS-232 para recibir datos del ordenador vía serie y provocar la correspondiente interrupción.

RF3/U1TX

AP5 AP8

4 “^ R x O32 - X1 —X

< d > R F2 /U 1 R XRA11

i

o4

CANAL S E R IE

Figura L8.2. Esquema electrónico del Laboratorio 8.

FR EQ . OUT

Page 405: DsPIC Diseño practico de aplicaciones

LABORATORIO 8: MANEJANDO A FONDO LAS INTERRUPCIONES 38 7

L8.4. C O N EXIÓ N DE LOS PERIFÉRICOS

La conexión de los periféricos queda resumida en la siguiente tabla y es muy similiar a la de labo­ratorios anteriores. Sólo se ha añadido un nuevo periférico que se encuentra en la tarjeta de desa­rrollo PIC School denominado Generador Lógico que se conecta a la patita RA11/1NT0.

Patita del dsPlC 30F4013 E lem ento de la PIC SCHOOL

RF2/U1RX RxP del Inlerfaz RS-232

RF3/U1TX Patita 7 del controlador LCD serie

RA11/INT0 Frec. Óut del Generador Lógico

L8.5. C O N STR U C C IÓ N DEL PROGRAMA

El código principal del programa se encuentra recogido en un único fichero llamado laboratorios.s. En él se encuentran las rutinas de atención a interrupciones, así como la configuración de las mis­mas y el programa principal de la aplicación.

‘Manejo de interrupciones .include "p30f4013.inc".global _main

.global__INTOInterrupt__INTOIntcrrupt:

;La interrupción de menos prioridadPUSH WO ;Salva el registro WO en la pilaBCLR IFS0,#Ü ;Borra flag de interrupción de INTOCALL INTO ;Escribe 1NT0 en pantallaPOP WO ;restaura el valor de WORETFTE ;retorna de la interrupción

La primera parte del código se encarga de la interrupción externa INTO. Nótese cómo la prime­ra instrucción 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 instrucción sea PUSH WO para salvar su contenido actual en la pila de datos. A continua­ción, borra el flag de la interrupción para que no se vuelva a atender la misma interrupción, para po­der así mostrar el mensaje deseado, restaurar el valor de WO y retornar de la interrupción.

.global_T3Interrupt•Interrupción del Timer de 32 bits _T3Tnterrupt:

PUSH WO ;Salva los registros utilizadosPUSH W1DI SI #0x3E00 ;Deshabilita interrupciones.

Page 406: DsPIC Diseño practico de aplicaciones

3 8 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

;Afecta a las de la UART ya que esta ;es de nivel 7

BCLR IÍSO,#7 ;Borra flag T3IF activación interrupciónCALL TEMPORIZADOR ;Muestra mensaje TIMER32 en pantallaMOV #0x3E00, WO ;Crea un bucle para que el mensajeCLR Wl ;se mantenga durante cierto tiempo

BUCLET32: ; y sea visibleADD W l,#0x0001,W1CPSEQ W1,W0GOTO BUCLET32POP Wl ;Restaura valores de WOPOP WO ;y w iREIRE ;Retorno de la interrupción

En la interrupción del temporizador puede apreciarse que se ha incluido una nueva instrucción. Además de las instrucciones PUSH que salvan los datos de los registros empleados en la rutina, se em­plea la instrucción DIST. Esta instrucción deshabilita las interrupciones con prioridades comprendidas entre 1 y 6, de forma que si se provoca una interrupción externa por INTO mientras se está ejecutan­do dicha instrucción, no se atendería durante el número de ciclos expresados por el argumento ordi­nal que sigue al nemónico. De esta manera, además de que se ha configurado la interrupción del tem­porizador con una prioridad superior a la de INTO se consigue que se atienda antes que la externa.

La instrucción DISI no afecta a las interrupciones provocadas por fuentes de interrupción de prioridad 7 o mayor. La interrupción del UART tiene asignado nivel 7, para así superar la prioridad de las interrupciones del timer y la externa INTO. Nótese también que si al salvar los registros me­diante la instrucción PUSH el primero fue WO y el segundo W l, el orden de recuperación con la ins­trucción POP debe ser el inverso, primero W 1 y luego WO.

.global . ÍJÍ R XInterrupt ;lnterrupción de recepción de dato UART

Ul RXÍnterrupt:DISI #Ox3EOO ;Deshabilita resto de interrupcionesPUSH WO ;Salva registros usadosPUSH WlBCLR IFS0,#U1RXIF ;Borra flag de atención interrupciónCALL LIMPIA ;Limpia pantallaMOV U1RXREG,W0 ;Transmite el dato por el LCDCALL TRANSMITEMOV #0x3E00, WO ;Espera un pequeño tiempo paraCLR WL ;que el dato sea perceptible

BUCLEUART:ADD W l,#0x0001,WlCPSEQ W1,W0GOTO BUCLEUARTPOP Wl ;Restaura en orden inversoPOP WO ;los registros salvados en la PilaRETFIE ;Retorao de la interrupción

Page 407: DsPIC Diseño practico de aplicaciones

LABORATORIO 8: MANEJANDO A FONDO LAS INTERRUPCIONES 3 8 9

Esta parte del programa ofrece la rutina de atención a la interrupción provocada por la recepción de un dato por el puerto UART. La única diferencia con el código correspondiente a la atención por la interrupción del temporizador es que tiene prioridad 7 y por tanto caso de ejecutarse simultánea­mente tendrá preferencia sobre el resto de interrupciones.

.text_main:;Inicialización del TimerCLR T2CON Para cualquier operación con TimersCLR T3CONCLR TMR3 Borra el contenido del temporizador TMR3CLR TMR2 Borra el contenido del temporizador TMR2MOV #0x0040,WO Inicializa el temporizador conMOV W0,PR3 : el valor 0x00400000 (1 segundos aprox.)MOV #0x0000,W0 PR3 = 0040MOV W0,PR2 PR2 = 0000

BCLR TPC1,#12 Activa flag T3IP = 100BCLR JBPCJ,#13 Nivel de prioridad 4BSET IPC1, #14BCLR IF$Í),#7 Borra el flag de interrupción del Timer3BSET IEC0, #7 Habilita interrupciones del Timer 3BSET T2CON, #3 Flag T32 = J . Habilita Timer 32 bitsBSET T2CON, #15 Comienza temporizador con preescaler 1:1

y fuente de reloj el ciclo de instrucción;Inicialización UART1CLR U1BRG Configuración U1BRG para 9600 bps y 4MH/.MOV #0x0019, W0MOV W0,UJBRGMOV #0x8000, W0 Configuración buffersMOV W0, U 1 MODE Configuración modoMOV #0x0510, W0MOV W0, U 1 STAMOV #0x8020, W0MOV W0, U1MODEBSET IPC2,#4 Prioridad de la interrupción de UART 7BSET IPC2,#5 IPC2 <6:4>= 111BSET IPC2 #óBSET IPC0?#0 Configura la interrupción INT0BCLR IPC0,#1 con prioridad 1BCLR IPC0,#2 IPC0<2:0> 001MOV #0x0281, W0 Bit 0 INT0, Bit7 Timcr32 bits, Bit9 UARTMOV W0, ÍEC0 Habilita las 3 interrupcionesCLR IEC1CLR IEC2

;PROGRAMA PRINCIPAL

PRINCIPAL:CLRWDTGOTO PRINCIPAL

Page 408: DsPIC Diseño practico de aplicaciones

3 9 0 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

El programa principal simplemente configura los periféricos utilizados y entra en un bucle infi­nito a la espera de que se dé alguna interrupción. Previamente se han configurado con los niveles de prioridad seleccionados las distintas interrupciones a través de los bits de configuración de los re­gistros IPCO e IPC2.

L8.6. GRABACIÓN Y EJECUCIÓN DEL PROGRAMA

Una vez compilado el proyecto y generado el fichero laboraíorio8.hex se graba el mismo en el dsPIC a través del programa WinPicSOO. Es conveniente recordar que en la pestaña Config de este programa hay que seleccionar XT w/PLL 4X en la opción Primary Source antes de la grabación.

Luego se debe conectar el cable serie del ordenador al interfaz RS-232 de la placa PÍC School para poder provocar interrupciones del módulo UART.

Al pasar el interruptor del circuito de grabación de la placa PÍC School a modo RUN, comenza­rá la ejecución del laboratorio. Entonces podrá observarse cómo se van alternando distintos mensa­jes provenientes de la interrupción externa y del temporizador en la pantalla LCD.

Figura L8.3. Fotografía del montaje del Laboratorio 8 en la PIC School.

Variando la frecuencia del generador lógico mediante el pulsador correspondiente se com­prueba cómo a pesar de que la interrupción externa INTO es menos prioritaria que la provocada por el temporizador se visualiza más tiempo. Esto se debe a que la ejecución de la interrupción del temporizador se lleva a cabo durante un período de tiempo tan corto que no da tiempo a que se vea con claridad. A pesar de ello, a una frecuencia de 10 Hz todavía puede apreciarse que la pantalla muestra el mensaje TEMP32 y que no se mezcla con el mensaje 1NT0. En la Figura L8.3 se muestra cómo en el circuito del generador lógico se enciende un led según la frecuencia a la que esté funcionando el mismo.

Page 409: DsPIC Diseño practico de aplicaciones

LABORATORIO 8: MANEJANDO A FONDO LAS INTERRUPCIONES 391

Figura L8.4. Mensaje correspondiente a la interrupción provocada por el temporizador de 32 bits.

Para comprobar que la prioridad más alta se corresponde con la interrupción de la UART, aunque el generador lógico trabaje a una frecuencia de 10 Hz, si se arranca el programa Hyper- Terminal de Windows y se deja pulsada una tecla constantemente, el mensaje más mostrado es el de dicha tecla y no el de las interrupciones liNTÜ o TEMP32.

Page 410: DsPIC Diseño practico de aplicaciones
Page 411: DsPIC Diseño practico de aplicaciones

LABORATORIO

9 PilotandoJH U un Fórmula 1

L9.1. OBJETIVOS

En las competiciones de Fórmula l los bólidos que compiten deben optimizar su velocidad y su pre­cisión para alcanzar el éxito, que en muchas ocasiones depende de una milésima de segundo. Para gobernar estos vehículos tan sofisticados se necesita un procesador que reúna las características apropiadas, como es el caso de los dsPIC® de Microchip.

Entre las características más relevantes que poseen los dsPIC para soportar la tarea de gobernar un bólido de Fórmula 1 se citan las siguientes:

1.a Amplio abanico de canales de comunicación. Destacan el módulo UART, el bus fC, el módulo SPI, el bus CAN y el módulo DCl. En esta simulación se utilizan 2 módulos UART del dsPIC30F4013 pa­ra visualizar información en una pantalla LCD y recibir “órdenes de equipo” del Ingeniero Jefe.

2.a El módulo de comparación de salida PWM se emplea para controlar con rigor la velocidad del mo­tor. Dicho motor está simulado en esta experiencia con uno eléctrico de corriente continua.

3:3 Interrupción externa de atención inmediata para implementar un pulsador de seguridad que de­tiene al vehículo inmediatamente

4 a Un excelente conversorAD que transforma la señal analógica 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 potenciómetro.

5.a Potentes instrucciones DSP que facilitan el cálculo matemático de todos los procesos.

Todos los recursos y periféricos que requiere este proyecto están disponibles en el sistema de desarrollo PIC School, sobre el que se implementará el hardware y se grabará el programa de apli­cación sobre un dsPIC30F40l3.Únicamcnte 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:

3 9 3

Page 412: DsPIC Diseño practico de aplicaciones

3 9 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

• Integrar en un proyecto el control mediante un dsPIC de diversos periféricos y dispositivos.• Utilizar varios módulos de comunicación simultáneamente.• Manejar señales externas con tas que realizar cálculos rápidos y precisos aprovechando la po­

tencia de las instrucciones DSP.0 Afianzarse en la programación con el lenguaje C y el empleo de subrutinas para gobernar dispo­

sitivos varios.

L9.2. DESCRIPCIÓN DEL LABORATORIO

Este laboratorio utiliza varios recursos de la placa PIC School para simular el funcionamiento de un bólido de Fórmula 1.

Por un lado, los interruptores EO y El de la sección de Entradas Digitales actuarán como acele­rador del vehículo, proporcionando 4 velocidades distintas. También el pulsador E l servirá como botón de parada de emergencia, que hará que el vehículo se detenga inmediatamente.

En la sección de Entradas Analógicas se utilizará el potenciómetro Pl para simular un sensor de temperatura colocado junto al motor del vehículo. Deberá medirse con precisión esta temperatura ya que cuando se observe que el motor se calienta demasiado, entonces se limitará el número 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 vehículo.

También 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 vehículo, temperatura del motor 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 través del módulo comparador de salida OC1 que debe ser

previamente inicializado. También se inicializará la puerta F del controlador para que a través de las patitas RFO y RF1, el conductor del vehículo dé más o menos velocidad al motor conectado a las sa­lidas digitales.

El conversor analógico digital del dsPIC se conectará al potenciómetro 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 través de uno de los módulos UART del dsPIC, los ingenieros se podrán conec­tar vía serie con el vehículo y enviar 3 órdenes distintas al vehículo. La instrucción L solicitará a la electrónica del vehículo a que envíe el dato de la temperatura a los ingenieros para que puedan es­tudiar su evolución.

El comando B hará que el motor baje sus revoluciones. Y por último, el comando S eliminará cualquier restricción anterior iniciada con el comando B.

El vehículo dispondrá de un botón de emergencia que hará que se detenga el motor definitiva­mente. Para su implementación se utilizará una interrupción externa (INTO) que se conectará a la en­trada digital E7 de la placa PIC School.

Durante el funcionamiento del vehículo y gracias a otro módulo UART el piloto del vehículo comprobará en la pantalla LCD la velocidad del motor y el valor de la temperatura.

Page 413: DsPIC Diseño practico de aplicaciones

LABORATORIO 9: PILOTANDO UN FÓRMULA 1 395

Figura L9.1. Diagrama de flujo del Laboratorio 9.

L9.3. ESQUEMA ELECTRÓNICO

El esquema electrónico del Laboratorio 9 se muestra en la Figura L9.2, en el que se conectan al dsPIC:

1) El módulo 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 interrupción externa y detener el ve­hículo.

3) ANO se conectará al potenciómetro P 1 para simular la entrada analógica de la temperatura del motor.

4) U2TX a la patita TxD del interfaz serie para enviar información al Ingeniero del equipo.5) U1RX a la patita RxD del mismo interfaz para recibir órdenes del equipo.

L 9 A C O N EXIÓ N DE LOS PERIFÉRICOS

Además de la conexión típica del controlador serie a LCD, ya analizado en laboratorios anteriores, la conexión del resto de los periféricos queda resumida en la Tabla L 9 .1.

Page 414: DsPIC Diseño practico de aplicaciones

3 9 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Figura L9.2 . Esquema electrónico del proyecto de contro l de un bólido de Fórmula / con un dsPIC30F4013 y la PIC School.

Ratita del dsPIC 30F4013 Elem ento d e la PIC SCHOOL

RF2/U1RX RxD del Interfaz RS-232

RF3/U1TX Ratita 7 del controlador LCD serie

RAI 1/INTO E7 de Entradas digitales

RF5/U2TX TxD del Interfaz RS-232

ANO/RBO Potenciómetro P1 (conectar además GND y +5v en los extremos de dicho potenciómetro)

RDO/OCI E3 del Driver de 4 Canales. Conectar E4 a GND

Motor Conectar motor a S4 y S3 del Driver de 4 canales

RFO EO de Entradas digitales

RFl El de Entradas digitales

Tabla L9.1. Tabla que presenta la conexión de las patitas del dsPIC30F4013 con los periféricos que controlan el bólido de Fórmula 1.

L9.5. CONSTRUCCIÓN DEL PROGRAMA

El programa se encuentra dividido en varias partes principales. En la primera se definen las varia­bles globales a utilizar: Limitación que guardará la limitación de velocidad impuesta por los jefes de equipo, Temperatura para almacenar la temperatura del motor del vehículo y Parar, variable de con­trol que hará que el coche se detenga cuando se dé la interrupción externa INTÜ. Debido a la longi­tud del programa, a continuación se expone la solución en lenguaje C que es menos extensa que la solución en ensamblador y más fácil de comprender. No obstante, y para los lectores interesados, en el CD que acompaña al libro, se incluye el fichero del programa en lenguaje Ensamblador con co­mentarios aclarativos.

Page 415: DsPIC Diseño practico de aplicaciones

LABORATORIO 9: PILOTANDO UN FÓRMULA 1 39 7

Figura L9.3. Montaje del proyecto de control de un bólido do Fórmula 1 sobre la placa PIC School.

#includc “p30f4013.tr

//Variable que contiene la limitación de velocidad impuesta por el equipo int limitación;//Variable donde se almacena la temperatura del motor int Temperatura;//Variable de control para detener el vehículo con parada de emergenciaint Parar;

En la segunda parte se definen variables auxiliares para el envío de textos, números binarios y caracteres a través de los módulos 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): //Manda al LCD un carácter//Envía por U ART2 un dato en binariovoid binario2UART2(int long dato)1int long i;int long aux = 0x8000;IECObitsADIE = 0; //Deshabilita ADCwhile(U 2STAbí ts.TRMT == 0);

U2TXREG =12; //Limpia pantalla

Page 416: DsPIC Diseño practico de aplicaciones

3 9 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

aux)

//Para los 16 bits //envía un 1 o un 0 //por UART2

dato = dato - aux; while(U2STAbits.TRMT == 0);

U2TXREG

elsei

while(U2STAbits.TRMT == 0); U2TXREG -O ';

11aux = aux » 1 ;I

//for (j=0;i<=OxFFFF;i++); IECObits. ADTE = 1 ;)//Envía un dato al LCD void txt2LCD(char caracter)

//Rotación para pasar al //siguiente bit

//Habilita ADC

while(U 1 STAbits.TRMT == 0); U1TXREG =caracter;

1//Envía 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 código del laboratorio se encuentran las rutinas de atención a las inte­

rrupciones.La interrupción _ADCInterrupt se encarga de guardar en la variable Temperatura el resultado de

la operación de conversión analógico digital del sensor colocado en ANO.La interrupción JU / RXInterrupt se encarga de recibir vía RS-232 las órdenes de equipo y ac­

tuar en consecuencia. Al recibir el comando L enviará a la consola de los ingenieros vía UART2 la lectura del sensor de temperatura. Con el comando B limitará la velocidad del motor bajando en 0x10 su velocidad actual. El comando S anulará cualquier limitación anterior establecida con el comando B.

Por último, la interrupción JNTOInierrupt hará que la variable Parar tome el valor 0 y así se de­tenga totalmente el vehículo emulando una parada de emergencia.

Page 417: DsPIC Diseño practico de aplicaciones

LABORATORIO 9: PILOTANDO UN FÓRMULA 1 3 9 9

// RUTINAS DE ATENCIÓN A INTERRUPCIONES

// Atención a la interrupción del módulo ADCvoid_attribute „((__interrupt__)) _ADCInterrupt(void)!

IFSObits.ADTF = 0; //Borra tlag de interrupciónTemperatura = ADCBUFO; //Guarda la temperatura

}//Atención a recepción de orden de equipovoid_attribute _((__interrupt__)) _U I RXInterrupt(void)ichar comando;IFSObits.U 1RXIF = 0; comando = U1RXREG; if (comando =='L')

i//Enviar Temperatura por UART2

binario2U A RT2 (Temperatura);!

if (comando == ’B’) limitación = 0x10; //Reducir velocidad

if (comando — ‘S')limitación = 0; //Quitar restricción

1//Rutina de interrupción INTO. Detiene el vehículo void_attribute__((__interrupt__)) _INT01nterrupt(void){IFSObits.INTOIF = 0;Parar = 0; //La variable de control parar = 0}

La cuarta parte contiene las rutinas de inicialización de los periféricos que ya se han estudiado en laboratorios anteriores.

//RUTINAS DH INICIALIZACIÓN DE PERIFÉRICOS

void Jniciali/aINTOO{

IHCObits.INTOlH = 1;

)

void Inicial i zaADC-0 {

ADPCFG = 0xFFFF;ADCON1 = 0;

Page 418: DsPIC Diseño practico de aplicaciones

4 0 0 dsPIC. DISEÑO PRÁCTICO 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 =0;OC1R =0;OC1CON =0x0006;T2CON = 0x8030;

}

void lnicializaUARTl(){ //Transmisión y recepción 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 periféricos, va calculando la velocidad actual en función de los pulsadores conecta­dos a la puerta F, el valor del sensor de temperatura y las órdenes de equipo. Así mismo, muestra la información referente a la velocidad y a la temperatura en la pantalla LCD al piloto del vehículo.

// PROGRAMA PRINCIPAL / / = = = = = = = = = = =

int main (void){

Page 419: DsPIC Diseño practico de aplicaciones

LABORATORIO 9: PILOTANDO UN FÓRMULA 1 401

// Itüeiaiiza la puerta F RFO y RF1 como entradas TRLSF=3;//Iniciaiiza el módulo de comunicación UART1 InicializaUARTl();//Iniciaiiza el módulo de comunicación UART2 IniciaiízaU ART20;//Iniciaiiza el módulo de comparación de salida OC1 para control motor TnieializaOClO;//Iniciaiiza el conversor analógico para leer la temperatura Inicial izaADCQ://Iniciaiiza la interrupción INTO para actuar como parada de emergencia fnicializalNTOO;//Iniciaiiza la temperatura y la limitación del motor a 0 Temperatura = 0; limitación = 0;//Iniciaiiza PR2 con el valor máximo a introducir en OC1RS PR2=0x0100://Iniciaiiza Parar a 1 para que el programa entre en bucle infinito //hasta que se ejecute la interrupción INTO

Parar = 1;

// Bucle principal del programa

\vhile(Parar == 1){int Velocidad; int Protección;Protección = 0; asm .(,' c l r w ^ ,:,)¿.

Velocidad = 0;//tee 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);Protección = 0x10;

• else :msg2 LC D(" T. B aj a“ ,7):

//Calcula velocidad en función de la temperatura y de las órdenes de equipo switeli (^lociclad) : ::

case 0:OC1RS = 0; break;

case 1:OC1RS = (0x0080 - Protección - limitación); break;

Page 420: DsPIC Diseño practico de aplicaciones

4 0 2 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

case 2:OC1RS = (OxOOCO - Protección - limitación);

'•"Bréale; case 3:

OC1RS =' (0x0100 - Protección - limitación); break;)

//Muestra mensaje de velocidad en pantalla switch (ÓC1RS)

Icase 0x0:

msg2LCD("Vcl: 0\7);break;

case OxAO:msg2LCD("Vel: A0*\7);

break; case 0xB0:

msg2LCD("Vel: B0”,7);break;

caseOxCO:msg2LCD(MVel: 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/.ación en la pantalla LCD int i; for(i=0;i<=0x 1 FFF:i++);}//Parada de emergencia OCIRS = 0; txt2LCD( 12); msg2LCD(MSTOP",4);//Bucle infinito whileí 1)

asm(”clrwdt");}

Page 421: DsPIC Diseño practico de aplicaciones

LABORATORIO 9: PILOTANDO UN FÓRMULA 1 4 0 3

L9.6. GRABACIÓN Y EJECUCIÓN DEL PROGRAMA

Una vez compilado el proyecto, grabado el mismo en el dsPIC a través del programa 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 PÍC School para poder enviar y recibir las instrucciones de equipo a través del programa HyperTerminal de Windows u otro si­milar.

Al pasar el interruptor del circuito de grabación de la placa PIC School a modo RUN comenza­rá la ejecución del laboratorio.

En función 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 vehículo.

En esta misma pantalla se puede leer si la temperatura es Alta o Baja. Con el potenciómetro P1 podrá variarse dicha temperatura y así podrá observarse cómo al variar la temperatura a Alta el mo­tor baja su velocidad para protegerse.

f • V '

1 ;>•£;, % y • - • •••:’

g „ . . . ._ ¡.

Frx

Figura L9.5. Al pasar la temperatura a Alta la velocidad del motor baja automáticamente.

Para conocer el valor exacto de la temperatura podrá utilizarse el programa HyperTerminal de Windows que conectado a través del puerto serie a una velocidad de 9600 baudios podrá comuni­carse con el dsPIC. Así enviando el comando L el vehículo responderá con el valor exacto en bina­rio de la temperatura. (Figura L9.6)

A través de este mismo programa podrán enviarse 2 comandos más. El comando B con el que se limitará la velocidad del motor y el comando S para eliminar dicha restricción. (Figura L9.7)

Finalmente, accionando el pulsador E7 se activará la interrupción externa INTO que hará que el vehículo, y por consiguiente el motor, se detenga y visualice en la pantalla LCD el mensaje STOP (Figura L9.8).

Page 422: DsPIC Diseño practico de aplicaciones

4 0 4 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

- comlv - HyperTerminal _ I ld fx !Archivo BUclín Ver Uamer Ir ¿referí'- AyycbDe# ts S -O c9 ES*

0000101001010080

>|0:00:12ureitafa AH3W 9600frN;l ■ — - ;r MAY .

Figura L9.7. La velocidad del motor baja más debido a la instrucción del equipo.

f:

Figura L9.8. Mensaje de detención.

Las limitaciones de velocidad se mantendrán a pesar de que se varíe el valor de los interrupto­res de control de velocidad.

Page 423: DsPIC Diseño practico de aplicaciones

índice

#SLIT4, 143

ACCA, 56,140ACCB, 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, 75A GUY, 75 Airbag, 12 AIVT, 93Algoritmos, 182, 352 ALTTVT, 93, 96 Amplificadores, 310 AN0-AN15, 157 Anidables, 103 Aritmética

con saturación, 62 modular, 62

ASCII, 351ASM 30 Toolsuite, 202, 327 Atascos, 117 ATM Ine, 36Autoevaluación, 179,196, 212,

224,232 ,241 ,274 , 258 Autorcpctición, 170

Banco de Registros W, 49 Banco de registros, 43 Barrido de teclado, 308 BCLR, 127 BEÑO, 36

Bit reverse, 79 Bootloader, 375 BOR, 47 BRA C, 131,225 BRA GE, 131 BRA LT, 131 BR A N , 131 BRA NZ, 131 BRA OA, 131 BRASA, 131 BRA, 131 Brinco, 129 BSET, 127 BSW.C, 127 BSW.Z, 127 BTG, 128 BTSC, 129 BTSS, 129 BIST, 128 BTSTS, 128 Buffer circulares, 76 BusCAN, 164 Byte fantasma, 85

C, 51, 70 CAD, 4, 5 CALL, 113, 131 Camino de Dalos, 52, 67 CAN, 312Cancelación del ruido, 23Captura y Mantenimiento, 6CDMA, 167Cima de la Pila, 69CLR, 122, 141, 144CLRWDT, 135CN, 155CNEN1, 155CNEN2, 155CNPU1, 155CNPU2, 155

CODEC, 20, 26, 164 Codificador de Cuadratura, 41 Código OP, 110, 111 COM, 122 Compatibilidad, 25 Compilador de C MPLAB C30,

178Conflictos de prioridad, 100 Contador de Programas, 84 Control de motores, 12, 23, 28,

359Control de sensores, 22Controlador de Programa, 41Controlador Digital de Señales, 9Controlador DMA, 27, 167Conversor AD de 10 bits, 157Conversor AD, 41 ,46 , 157Conversor analógico digital, 261CORCON, 54, 70COVTE, 58CP F, 129CP0, 130C PBF, 130CPSEQ, 130, 226CPSGT, 130CPSLT, 130CPSNE, 130Craftsmans Electric, 37

DA, 70Datasheets, 276 DAW.B, 123 DC, 51,70 DEC, 123 Decodifícador

de Instrucciones, 52 Dependencias, 118 Desbordamiento, 61 DEVID, 83Diagrama de conexiones, 23, 26

4 0 5

Page 424: DsPIC Diseño practico de aplicaciones

4 0 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

Direccionamiento directo, 114directo por registros, 115 indirecto con Registros de

Desplazamiento, 115 indirecto por registros, 115 inherente, 113 inmediato. 117 modular, 71, 117 por inversión de acarreo, 117 por registro indexado, 113

DISI, 103, 136 DISICNT.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, 7dsPIC 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 Encriptación, 352 Endurance. 39 Ensamblador, 201 Error

Aritmético, 62,101 de Direccionamiento, 102 dePila, 101

Escenario, 249 Espacio X, 73, 75 Espacio Y, 73, 75 Excepciones, 93

EXCH, 120 Extensión

de Ceros, 52 de Signo, 52

Fallo delCDM 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 Lógico, 306 General Motors, 12 Gestión del sistema, 47 GPS, 13 Grabación, 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, 47,167 IECx. 102 IF, 54, 71 IFSx, 102 I1R, 178, 186 INC, 123Ingeniería de Microsistemas

Programados, 299 Inicializador Visual, 243 Instalaciones, 276 Instrucciones

de Bit, 127 de Comparación

y Brinco, 129 de Control, 135

de Movimiento, 119 de Pila y Registros

Sombras, 133 de Rotación y

Desplazamiento, 125 de Tabla, 71, 85 DSP, 140, 324 lógicas, 122 Matemáticas, 123 MCU, 119

INTO, 385 INTCON, 57 INTCON1, 104, 105 INTCON2, 104, 105 Intel, 7Interrupción, 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 Librería Matemática, 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 Configuración, 83 de programa, 83

Page 425: DsPIC Diseño practico de aplicaciones

ÍNDICE 4 0 7

de Usuario, 83 Mensajes, 182 Menú

Configure, 2ÜÜ Debugger, 200 Project, 199 Tool», 200 View. 198

Microchip, 303 Microchip Technology Inc., 9 Microcontroladores, 8 Minibootloader.exe, 375 MIPS, 7MODCON, 71, 77 Modificador, 80 Modo

dsPIC, 317 entero. 54 fraccional, 54 1CSP, 316 PC, 316 RUN, 316

Módulo 12C, 163 CAN, 164 DCI, 164de Captura de Entradas, 269 de Captura, 41, 158 de Comparación, 41 de Comparación /PWM, 159 de Comparación de Salida, 271 de Redondeo, 58 de Saturación, 58 PWM. 160 QEL 165 SPL 162

Montaje superficial, 23 Motor, 362

DSP, 43. 52, 259 Motores

de corriente continua, 23 de inducción de corriente

alterna, 23 paso a paso, 23

MOVSAC, 141 MPLAB ASM30, 31 MPLAB C 30,31, 278 MPLAB ICD2, 216 MPLAB IDE, 31, 177, 197, 276 MPLAB Macros, 200 MPLAB SIM. 208, 216 MPLAB VDT, 31

MPY, 141, 145 MPY.N, 141, 145 MSC, 141, 146 Muestreo y retención, 261 MUL, 123 Multiplicador, 53

N, 51 ,70 NEC, 7NEO, 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, 51,70 OVBTE, 57

Parcial, 64Patitas de E/S, 151PC, 84, 113PCT, 15PDIP, 23Periféricos, 259Perro Guardián, 41, 47, 167PIC School, 300PIC, 9PIC18FXXXX, 299 P1C24, 299 PÍC24FXXX, 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 Prcbúsqueda, 148 Presaturación, 260 Pretensores, 23

Prioridad, 390Procesador digital de señales, 4 PROC.OP, 89"Project Wizart. 291 Propósito 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 RND.58, 64, 71 RRC, 125RRNC, 125LSR, 125 RTSP, 88 Ruido, 182

S&H, 6, 157 SA, 57, 70

Page 426: DsPIC Diseño practico de aplicaciones

4 0 8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES

SAB, 70SAC, 140, 141, 148 SAC.R, 64, 140, 141 SADW, 58Sample-and-Hold, 6, 46 SATA, 62,71 SATB, 62, 71 SATDW, 62, 64, 71 Saturación normaf, 62, 142 Saturación, 260 SB, 57,70 SE, 52, 123 Segmentación, 118 Semáforo, 250, 333 Señales analógicas, 3 SETM, 122 SFR, 65SFTAC, 141, 148 SIM30, 31 Símbolos, 120 Sistema de alimentación,

23 ,28 Skip, 129 SL, 125SLEEP, 47, 167, 265 SmarHome, 35 SOIC, 23 SPDIP, 23 SPLIM, 67 SR, 51 SRH, 51 SRL, 51 STKERR, 101 SUB, 141, 123, 143 SUBB, 123Sumador/Restador, 43 ,56 Súpcr Saturación, 62,63, 142

SWAP, 120 SYM 20-AA, 334

Tabla Alternativa de Vectores de Interrupción, 93

Tabla de Vectores de Interrupción, 83, 93

TBLPAG, 71, 76, 237 TBLRDH, 86, 234 TBLRDL, 86,234 TBLWTH, 86 TBLWTL, 86 Teclado, 307Tcmporizadores, 156, 250

de 32 bits, 333 Teorema de Mucstrco, 6 Texas Instruments, 7 TIMER 1, 156 TIMER 2, 156 TQFP, 23 ,39Transformación Rápida de

Fourier, 191 Transformada

de Fourier, 4 de La place, 4 Discreta de Fourier, 4 Rápida de Fourier, 4 Z ,4

UART, 161,266 ULNK, 134 Unidad de División, 58 US, 71

Valor entero, 61 fraccionario, 61

VDI, 243Vector de Reset, 83 Visibilidad de Espacio de

Programa, 75, 87 Visual Initializer, 200,

243, 255 Volvo, 35

www.miciocontroladores.com, 299WO, 49W 0-W I5,67W0-W3, 67W12, 67W13, 67W14, 67W15, 67, 68W4-W7, 67W8-W11, 67WAGUX, 75WDT, 167W inPic800,279,318,371 WR, 89 WREG, 49 WREN, 89 WRERR, 89

XB, 80XBREV, 71, 80 XMODEND, 71 XMODSRT, 71 XT w/PLL 4X, 381

YMODEND, 71 YMODSRT, 71

Z, 51, 70 ZE, 52, 123

Page 427: DsPIC Diseño practico de aplicaciones
Page 428: DsPIC Diseño practico de aplicaciones

PIC Schoolwvmmicrocontroladores.com

En el Prólogo 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 práctico 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 más avan­

zadas propias de los DSP y que tendrán un crecimiento especta­

cular en un futuro próximo.

Los Controladores Digitales de Señales (DSC) de Microchip se

comercializan en más de medio centenar de modelos diferentes

de las familias dsPIC30F y dsPIC33F y consisten en la combina­

ción de los microcontroladores de 16 bits con los recursos nece­

sarios para soportar las funciones clásicas de los DSP.

La primera parte del libro tiene un marcado carácter teórico y en

sus 12 capítulos se describe la arquitectura, el funcionamiento,

los periféricos y el repertorio de instrucciones de los dsPIC. La

segunda parte se destina a manejar diversas herramientas soft­

ware de Microchip para la confección, inicialización, compilación

y simulación de programas. Finalmente, la tercera parte, la más

importante ajuicio de los autores, desarrolla íntegramente el

hardware y el software de 9 proyectos específicos para dsPIC

basándose en el extraordinario sistema de desarrollo PIC School.

El L U que acompaña al

libro contiene todos los

programas necesarios para

el desarrollo de todas las

aplicaciones, así como los

archivos con los códigos

fuente en ensamblador y C

de los ejercicios y proyectos

propuestos.

The McGrawHill Companies