Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diseo
prctico
de
aplicaciones
dsPIC
Diseo Prctico de Aplicaciones
L T )
S L 2 t x = M * l t l 2 2 L l ^ l 2 a c r / J W - V y . - V . Mit
U i
s c 5
C ?- ;' V3 :,V:-'
"*&&* .
&W9I 0;
'
,
-
P i , 'u t o
iu i i ti'n *^
dsPIC
Diseo Prctico de Aplicaciones
Jos M.a Angulo Usatcgui
Dr. Ingeniero Industrial
Catedrtico de A rquitectura de Com putadores
Universidad de D eusto
Contenido
Prlogo
xv
3
5
7
8
9
10
Captulo 2.
2.1.
2.2.
2.3.
2.4.
2.5.
17
El concepto D S C ................................................................................................................
Caractersticas generales de los dsPIC30F.....................................................................
Los modelos de la familia dsPIC 30F .............................................................................
2.3.1. Dispositivos dsPIC30F de propsito general.................................................
2.3.2. Dispositivos dsPIC30F para el control de sensores.......................................
2.3.3. Dispositivos dsPIC30F para el control de motores y sistemas
de alimentacin...................................................................................................
Encapsulados y diagramas de conexiones....................................................................
La familia dsPIC 33F............................................................................................... ..........
2.5.1. M odelos de la familia d sP IC 3 3 F .....................................................................
2.5.2. Dispositivos dsPIC33F de propsito general.................................................
2.5.3. Dispositivos dsPIC33F de control de motores y sistemas
de alimentacin...................................................................................................
2.5.4. Diferencias entre dsPIC30F y dsPIC33F.......................................................
17
18
20
20
22
23
23
27
28
28
28
31
v
vi
CONTENIDO
2.6.
2.7.
2.8.
Captulo 3.
3 .1.
3.2.
3.3.
3.4.
3.5.
3.6.
31
32
34
A R Q U ITEC TU R A DE LA C P U ...........................................................................
39
39
41
43
44
45
46
C ap tu lo 4.
E L C A M IN O DE D A T O S ...................................................................................
49
4.1.
4.2.
4.3.
4.4.
Introduccin................................................. .....................................................................
El banco de registros W ..................................................................................................
La ALU de 16 bits............................................................................................................
El M otor D SP....................................................................................................................
4.4.1. M ultiplicador.......................................................................................................
4.4.1.1. Representacin en modo entero y en modo fraccional..............
4.4.2. Acumuladores A y B ..........................................................................................
4.4.3. Sumador/Restador de 40 bits.............................................................................
4.4.4. Registro de Desplazamiento..............................................................................
4.4.5. Unidad de D ivisin.............................................................................................
49
49
50
52
53
54
56
56
58
58
A nexo.
M A N IP U L A C I N D E DATOS EN E L M O T O R D S P .....................................
60
60
60
61
62
63
63
A. 1.
A.2.
A.3.
C aptulo 5.
5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
5.6.
M O D E L O D EL PR O C E SA D O R PARA E L P R O G R A M A D O R .............
65
65
67
67
68
69
70
71
CONTENIDO
C aptulo 6.
6.1.
6.2.
6.3.
6.4.
6.5.
LA M E M O R IA D E D A TO S.................................................................................
73
73
75
75
76
79
C aptulo 7.
7.1.
7.2.
7.3.
7.4.
7.5.
7.6.
7.7.
LA M E M O R IA D E P R O G R A M A ................. :...................................................
83
Estructura y distribucin...................................................................................................
Direccionamiento mediante el PC ...................................................................................
Transferencia de datos desde la memoria de program a..............................................
Las instrucciones de T ab la...............................................................................................
Visibilidad del Espacio de Programa (P S V ).................................................................
Grabacin de las memorias FLASH y E E PR O M ........................................................
7.6.1. Autograbacin en tiempo de ejecucin (R TSP)..............................................
Grabacin serie en circuito (IC PSIM) ..............................................................................
83
84
84
85
87
87
88
91
C aptulo 8.
8.1.
8.2.
8.3.
8.4.
8.5.
8.6.
8.7.
8.8.
IN T E R R U P C IO N E S Y E X C E P C IO N E S .........................................................
93
Introduccin........................................................................................................................
Tabla de vectores IVT y A1VT de los dsP IC 30F .........................................................
Tabla de vectores IVT y AIVT de los dsP IC 33F .........................................................
Nivel de prioridad de la C P U ...........................................................................................
Nivel de prioridad de las interrupciones........................................................................
Nivel de prioridad para las excepciones.........................................................................
8.6.1. Excepcin por Error A ritm tico......................................................................
8.6.2. Excepcin por Error de P ila ..............................................................................
8.6.3. Excepciones por Error de Direccionamiento y Fallo del O scilador.........
Procesamiento de las interrupciones..............................................................................
Registros de control y estado para las interrupciones.................................................
93
93
96
99
100
100
101
101
101
102
104
C aptulo 9.
9.1.
9.2.
9.3.
9.4.
9.5.
CARA C T E R ST IC A S DE LA S IN ST R U C C IO N E S Y M OD O S
D E D IR E C C IO N A M IE N T O ...............................................................................
109
109
110
112
113
114
114
114
115
v iii
CONTENIDO
9.5.3.
9.6.
C aptulo 10.
115
117
117
118
119
119
119
122
123
125
127
129
131
133
135
C aptulo
11.
LA S IN ST R U C C IO N ES D S P ...........................................................................
139
Caractersticas especficas..............................................................................................
Operaciones bsicas con los acumuladores.................................................................
11.2.1. Suma de acumuladores (ADD)........................................................................
11.2.2. Resta de acumuladores (SUB).........................................................................
11.2.3. Borrado de los acumuladores (CLR).............................................................
11.2.4. Negacin del acumulador (N E G )...................................................................
11.2.5. Multiplicacin de registros y carga al acumulador (MPY y M PY.N))....
11.2.6. La distancia eucldea (ED y E D A C ).............................................................
11.2.7. Multiplicacin de registros y resta al acumulador (M S C )........................
11.3. Instrucciones de carga y almacenamiento de los acum uladores...............................
11.3.1. Carga del acumulador (L A C ).........................................................................
11.3.2. Almacenamiento del acumulador (S A C )..................................... ...............
11.3.3. Prebsqueda de operandos y almacenamiento
del acumulador (M O V SA C )............................................................................
11.4. Desplazamiento de los acum uladores..........................................................................
11.5. Instrucciones tipo MAC .............................................................................................
139
140
142
143
144
145
145
145
146
147
147
148
11.1.
11.2.
C aptulo
12.
148
148
149
P E R IF R IC O S Y R EC U R SO S IN T E G R A D O S ......................................
151
151
151
156
157
158
CONTENIDO
159
160
161
162
163
164
164
165
167
167
S e g u n d a p a r te : P R O G R A M A C I N Y S IM U L A C I N D E A P L IC A C IO N E S
A plicacin 0.
175
A0.1. Introduccin.......................................................................................................................
A0.2. Descripcin del dsPIC30F4013 ......................................................................................
A 0.2.1. Diagrama de conexionado................................................................................
AO.2.2. Caractersticas principales................................................................................
A0.3. Herramientas de software utilizadas..............................................................................
AO.3.1. El entorno de desarrollo MPLAB ID E.............................................................
AO.3.2. El compilador de C MPLAB C 30....................................................................
A0.3.3. Herramienta de diseo de filtros dsPICFdLite................................................
A0.3.4. Herramienta para el tratamiento de algoritmos de tratamiento
de seales dsPICworks..................................................................... ..................
A utoe valuacin..............................................................................................................................
175
175
176
176
177
177
178
178
A plicacin 1.
179
179
D ISE A N D O F I L T R O S ....................................................................................
181
A 1.1. Introduccin.......................................................................................................................
A l .2. El plan de trab ajo ..............................................................................................................
A 1.3. El problem a........................................................................................................................
A 1.4. Analizando la se al...........................................................................................................
A l.5. Filtrando la seal...............................................................................................................
A 1.6. Generando la seal sin ruido...........................................................................................
A utoevaluacin..............................................................................................................................
181
181
181
182
186
190
196
A plicacin 2.
E L E N TO R N O D E D E S A R R O L L O M PLA B I D E ...................................
197
A 2.1. Introduccin.......................................................................................................................
A2.2. Trabajando con proyectos................................................................................................
A2.3. Un vistazo rp id o ..............................................................................................................
A2.4. Primer proyecto en ensamblador....................................................................................
A2.5. Primer proyecto en lenguaje C ........................................................................................
Autoevaluacin..............................................................................................................................
197
197
197
201
209
212
CONTENIDO
A plicacin 3.
P O N IE N D O EN M A R C H A E L S IM U L A D O R .........................................
215
A3.1. Introduccin.......................................................................................................................
A3.2. Simulando el primer programa en ensam blador.........................................................
A3.2. L. Explorando la memoria de program a.............................................................
A3.2.2. Estableciendo puntos de ruptura y ventanas de inspeccin........................
A3.2.3. Resolviendo el ejercicio del tema anterior....................................................
A3.3. Caractersticas del sim ulador..........................................................................................
A3.3.1. Configurando el simulador y contando el tiem p o .......................................
A utoevaluacin.................................................................. ...........................................................
215
215
216
217
219
220
221
224
Aplicacin 4.
225
A 4.1. Introduccin.......................................................................................................................
A4.2. Manejo de instrucciones de salto en ensam blador......................................................
A4.3. Manejo de instrucciones DSP. Inicial aciones............................................................
A4.3.1. Otras formas de inicializar los program as.....................................................
A utoevaluacin..............................................................................................................................
225
225
226
231
232
Aplicacin 5.
233
233
237
241
Aplicacin 6.
PR O G R A M A N D O LOS P E R IF R IC O S CO N VISUAL
IN IT IA L IZ E R ......................................................................................................
243
A 6.L Introduccin.......................................................................................................................
A6.2. Visual Initializer................................................................................................................
A6.3. Controlando el mundo exterior. Puertas de E /S ..........................................................
A6.4. M anejo de temporizadores. El semforo.......................................................................
A6.5. M anejo de interrupciones. El semforo con pulsador................................................
Autoevaluacin..............................................................................................................................
243
243
247
250
255
258
A plicacin 7.
P E R IF R IC O S A V A N ZA D O S........................................................................
259
A7.1. Introduccin.......................................................................................................................
A7.2. El Motor D SP.....................................................................................................................
A7.3. Conversor analgico digital............................................................................................
A 7.3.L Descripcin del mdulo de Conversin Analgico Digital
de 12 b its .............................................................................................................
259
259
261
261
CONTENIDO
xi
262
266
269
271
274
274
A pndice A.
A pndice B.
T e rc e ra p a r te :
L aboratorio 0.
281
L A B O R A T O R IO E X P E R IM E N T A L
E L SISTEM A DE D ESA R R O LLO P IC S c h o o l......................................
299
L0.1. Introduccin.......................................................................................................................
L0.2. El fabuloso liPlC School ................................................................................................
L0.3. Arquitectura de PIC School............................................................................................
L0.3.1. Fuente de alimentacin......................................................................................
LO.3.2. El oscilador..........................................................................................................
L0.3.3. Los microcontroladores.....................................................................................
LO.3.4. Entradas analgicas...........................................................................................
LO.3.5. Entradas digitales...............................................................................................
LO.3.6. El generador l g ico ...........................................................................................
LO.3.7. El teclado.............................................................................................................
L0.3.8. Salidas digitales..................................................................................................
L0.3.9. Salidas digitales de alta corriente....................................................................
L0.3.10. Interfaz serie RS-232.........................................................................................
LO.3.11. Interfaz bus CAN................................................................................................
L0.3.12. Pantalla L C D .......................................................................................................
L0.3.13.Conectores para interfaz R J11 y U S B ............................................................
LO.3.14. Seccin de grabacin.........................................................................................
LOA El mdulo dsPIC para la PIC School.............................................................................
L0.5. Descripcin del software............................................................................................ .
L0.5.1. Software W IN PIC 800.......................................................................................
299
300
302
302
303
304
304
305
306
307
309
310
310
312
313
314
315
316
317
318
L aboratorio 1.
L l .l.
L1.2.
L1.3.
L1.4.
L1.5.
A P L IC A C I N DE IN ST R U C C IO N E S DSP CO N ENTRADAS
Y SA LIDA S D IG ITA LES ..............................................................................
323
O bjetivos.............................................................................................................................
Descripcin del laboratorio..............................................................................................
Esquema electrnico.........................................................................................................
Construccin del program a.............................................................................................
Conexin de los perifricos.............................................................................................
323
324
326
326
329
x ii
CONTENIDO
L ab o ra to rio 2.
L 2.1.
L2.2.
L2.3.
L2.4.
L2.5.
L2.6.
M A N EJA N D O A FO N D O L O S T E M P O R IZ A D O R E S
D E 32 B IT S ..........................................................................................................
333
O bjetivos............................................................................................................................
Descripcin del laboratorio............................................................................ ................
Esquema electrnico............................................. J...........................................................
Construccin del program a.............................................................................................
Conexin de los perifricos.............................................................................................
Grabacin y ejecucin......................................................................................................
333
333
334
335
340
340
Laboratorio 3.
L3.1.
L3.2.
L3.3.
L3.4.
L3.5.
L3.6.
343
O bjetivos.............................................................................................................................
Descripcin del laboratorio.............................................................................................
Esquema electrnico........................................................................................................
Construccin del program a.............................................................................................
Conexin de los perifricos.............................................................................................
Grabacin y ejecucin......................................................................................................
343
344
345
346
348
348
L ab o ra to rio 4.
L4.1.
L4.2.
L4.3.
L4.4.
L4.5.
L4.6.
351
O bjetivos.............................................................................................................................
Descripcin del laboratorio.............................................................................................
Esquema electrnico.........................................................................................................
Construccin del program a.............................................................................................
Conexin de los perifricos..............................................................................................
Grabacin y ejecucin......................................................................................................
351
352
353
353
355
355
L ab o rato rio 5.
L5.1.
L5.2.
L5.3.
L5.4.
L5.5.
L5.6.
330
331
C O N T R O L DE UN M O T O R DE CC M ED IA N TE P W M ...................
359
O bjetivos.............................................................................................................................
Descripcin del laboratorio.............................................................................................
Esquem a electrnico.........................................................................................................
Conexin de los perifricos.............................................................................................
Creacin del program a.....................................................................................................
Grabacin y ejecucin del p ro g ram a.............................................................................
359
360
360
362
362
364
CONTENIDO
L aboratorio 6.
L6.1.
L6.2.
L63 .
L6.4.
L6.5.
L6.6.
D ISE A N D O F IL T R O S .................................................................................
367
O bjetivos.............................................................................................................................
Descripcin del laboratorio..............................................................................................
Esquema electrnico.........................................................................................................
Conexin de los perifricos..............................................................................................
Creacin del program a.....................................................................................................
Grabacin y ejecucin del program a.............................................................................
367
367
368
369
369
371
L aboratorio 7.
L7.1.
L7.2.
L7.3.
L7.4.
L7.5.
L7.6.
G RA B A N D O LA M E M O R IA F L A S H DE PR O G R A M A
C O N UN B O O T L O A D E R ..............................................................................
375
O bjetivos.............................................................................................................................
Descripcin del laboratorio.............................................................................................
Esquema electrnico.........................................................................................................
Conexin de los perifricos.............................................................................................
Construccin del program a..............................................................................................
Grabacin y ejecucin del program a.............................................................................
375
375
377
377
377
381
L aboratorio 8.
L8.1.
L8.2.
L8.3.
L8.4.
L8.5.
L8.6.
Xlll
385
O bjetivos.............................................................................................................................
Descripcin del laboratorio..............................................................................................
Esquema electrnico.........................................................................................................
Conexin de los perifricos..............................................................................................
Construccin del program a..............................................................................................
Grabacin y ejecucin del program a.............................................................................
385
385
386
387
387
390
L ab o rato rio 9.
P n .O T A N D O UN F R M U LA 1 ...................................................................
393
O bjetivos.............................................................................................................................
Descripcin del laboratorio..............................................................................................
Esquema electrnico.........................................................................................................
Conexin de los perifricos..............................................................................................
Construccin del program a.............................................................................................
Grabacin y ejecucin del program a.............................................................................
393
394
395
395
396
403
n d ic e ......................................................................................................................................................
405
L9.1.
L9.2.
L9.3.
L9.4.
L9.5.
L9.6.
Prlogo
dsPic es un nombre genrico que se utiliza para referirse a los Controladores Digitales de Sea
les (DSC) que ha diseado Microchip Technology Inc. para facilitar a los usuarios de sus microcontroladores PTC la transicin al campo de las aplicaciones de los Procesadores Digitales de Se
ales (DSP), que van a propiciar en los prximos aos un crecimiento espectacular en reas como
las comunicaciones, los sensores, el procesamiento de la imagen y el sonido, el tratamiento mate
mtico de seales* los sistemas de alimentacin, el control de motores, la electro medicina, los sis
temas multimedia, la automocin e Internet.
Los DSC son unos dispositivos que combinan la arquitectura y la programacin de los microcontroladores PIC de 16 bits con los recursos hardware y software necesarios para soportar las pres
taciones fundamentales de los DSP. Microchip ha prestado una gran atencin al mantenimiento de
la compatibilidad entre sus microcontroladores clsicos y los DSC.
El medio centenar aproximado de modelos de DSC que se comercializan en la actualidad se re
parten entre dos familias, llamadas dsPIC30F y dsPIC33F.
Los autores de este libro, experimentados pedagogos de la Universidad de Deusto, han intenta
do construir una herramienta sencilla y eficaz para poner en manos de todos los que conocen y ma
nejan los microcontroladores clsicos, y especialmente los PIC, que les permita dominar en el m
nimo tiempo a los dsPlC y as poderse introducir en las nuevas aplicaciones cuyos proyectos son
ms exigentes y complejos. Por eso han escrito esta obra intentando que fuese la que a ellos les hu
biese gustado encontrar cuando comenzaron el estudio de los dsPIC.
El contenido se ha estructurado en tres partes:
Primera Parte: Arquitectura, funcionam iento y repertorio de instrucciones
Segunda Parte: Programacin y simulacin de aplicaciones
Tercera Parte: Laboratorio experimental
En la Primera Parte que consta de 12 captulos se hace una descripcin de las caractersticas, es
tructura y funcionamiento de los bloques principales de la arquitectura del procesador, haciendo n
fasis en las partes nuevas que se aaden a los dsPIC como el M otor DSP, las especiales organiza
ciones de las memorias, los nuevos modos de direccionamiento, las instrucciones DSP, etc. Tambin
se explican los perifricos y el manejo bsico del repertorio de instrucciones. Los conceptos teri
cos comprenden a las familias dsPIC30F y dsPIC33F.
xv
xvi
PRLOGO
Marcas registradas
El nombre y logo de M icrochip, dsPIC, PIC, PICmicro, PICSTART, PICMASTER, PRO MATE y
MPLAB son marcas registradas p or Microchip Technology Incorporated en EE. UU. y otros pases.
dsPICDEM , dsPIC.net, ICSP.Tn-Circuit Serial Programming (Programacin Serie En Circuito),
ICEPIC, MPASM, MPLIB, MPL1NK, MPSIM, PICC, PlCkit, PIC DEM y PICDEM .net son marcas
registradas p or Microchip Technology Incorporated en EE. UU. y otros pases.
Determinados materiales e informaciones contenidos en esta obra y en el CD que le acompaa han
sido reproducidos con el permiso de Microchip Technology Incorporated. No se pueden reprodu
cir ni reeditar dichos materiales sin el previo consentimiento escrito de Microchip Technology Inc.
Las restantes m arcas, logos y productos m encionados en este libro estn registrados p o r sus
respect i vos propietarios.
Primera parte
Arquitectura, funcionamiento
y repertorio de instrucciones
Captulo 1 .
EL M U N D O DE LOS DSP.............................................................................................. 3
Captulo 2.
17
Captulo 3.
ARQUITECTURA DE LA CPU................................................................................
39
Captulo 4.
EL C A M IN O DE DATOS.......................................................................................
49
Anexo.
60
Captulo 5.
65
Captulo 6.
LA MEMORIA DE DATOS.....................................................................................
73
Captulo 7.
LA MEMORIA DE PROGRAMA............................................................................
83
Captulo 8.
INTERRUPCIONES Y EXCEPCIONES..................................................................
93
Captulo 9.
Captulo 10.
Captulo 11.
Captulo 12.
El mundo que nos rodea est caracterizado por contar con un gran nmero de seales analgicas o
continuas que varan entre un valor mnimo y otro mximo pasando por infinitos valores. La tem
peratura, la luz, la presin atmosfrica, la humedad relativa y la concentracin de C 0 2 en el aire son
algunos ejemplos de magnitudes analgicas tpicas en nuestro entorno. El correcto tratamiento de
estas seales tiene una gran importancia para el control de procesos y dispositivos. Hasta mediados
del siglo XX se utilizaron recursos y tcnicas analgicas, cuyo esquema fundamental se muestra en
la Figura'1.1. Las enormes expectativas de aplicacin en el manejo de esas seales en un futuro in
mediato ha desembocado en una optimizacin de las tcnicas y recursos para su tratamiento.
'
EN TRAD A
V
l ---------------- ^
SEAL
a n a l g ic a
.7
SALIDA
v:;>
.
SISTEMA
DE
PROCESAMIENTO
ANALGICO
< ]
ACTUADOR
SENSOR
I M
Figura 1 .1 .
SEAL
ANALGICA-
Desde que en 1971 Intel comercializ el primer microprocesador, las posibilidades y ventajas del
procesamiento digital se incrementaron de forma exponencial. Un microprocesador es la pane ms
compleja e importante de un computador digital. En nuestros das, existe una gran variedad de cir
cuitos integrados con millones de transistores y otros elementos repartidos en pocos mm^ de silicio
que configuran potentsimos computadores digitales a un coste asequible. (Figura 1.2.)
Figura 1.2.
SALIDA
ENTRADA
>
SENSOR
Figura 1.3.
DIGITAL
SEAL
D IGITAL
DIGITAL
:! C D A
SEAL
ANALGICA
- 0
ACTUADOR
EL M U N D O DE LOS DSP
En el esquema de la Figura 1.3 existe un Conversor de Analgico a Digital delante del procesa
dor digital y otro Conversor de Digital a Analgico detrs. El inconveniente de incluir los conversores AD y DA queda compensado por las innumerables ventajas que aporta el procesamiento di
gital de las seales respecto al procesamiento analgico. Se citan las ventajas ms relevantes.
...........................> :
::'
Figura 1.4.
El micrfono transforma en una seal analgica las presiones acsticas de la voz. Dicha
seal se aplica a un CAD, cuya salida se trata en un procesador digital do seales segn
el algoritmo implementado en el programa con el fin de eliminar ruido de la seal obte
nida del micrfono. El resultado de este procesamiento se aplica a un CDA para obtener
de nuevo una seal analgica que se reproduce en un altavoz.
No obstante, existen situaciones en las que el requerimiento de trabajar en tiempo real impide la
aplicacin del procesamiento digital debido a los retardos de los conversores, a la distorsin produ
cida en la toma de muestras y a la exigencia de gran precisin en los clculos. Debido a que en ta
les casos hay que generar una respuesta a gran velocidad, se opta por utilizar sistemas analgicos pa
ra el procesamiento de seales.
El sistema tpico de aplicacin de un DSP dispone de un sensor como entrada que capta una seal
analgica correspondiente a la magnitud a tratar. Dicha seal analgica se muestrea para ir pasando
estas muestras a un Conversor Analgico Digital (CAD) que las convierte a un formato digital pa
ra introducirlas al procesador. Una vez obtenidos los resultados digitales, nuevamente se convierten
los mismos en una seal analgica (CDA) de salida que puede transformarse de nuevo en una mag
nitud fsica por medio de un actuador. (Figura 1.5.)
CAPTURA Y
MANTENIMIENTO
SALIDA
SEAL
D IG IT A L
CDA
SEAL
.
A N A L G IC A 1
ACTUADOR
MUESTREO
Figura 1.5.
AMPLITUD
AMPLITUD
MUESTRAS
TIEMPO
Figura 1.6.
Muestreo de una seal analgica. La seal analgica inicial se convierte en muestras dis
cretas tomadas cada cierto tiempo(t) en el circuito S&H.
La frecuencia de muestreo es el nmero de muestras que se realizan por segundo. Cuanto mayor
sea esta frecuencia, ms parecido ser el resultado obtenido a la seal original. Para representar con
precisin una seal analgica, el Teorema de Muestreo (Nyquist-Shannon) establece que la fre
cuencia de muestreo debe ser igual o mayor que dos veces la mxima componente de frecuencia de
la seal original {ancho de banda de la seal a muestrear), segn la frmula: Fmuestreo ^ 2 * Fmx..
Tanto el CAD como el procesador digital deben disponer del tiempo suficiente entre cada dos
muestras para llevar a cabo las labores que tienen asignadas. Muy frecuentemente el procesa
miento de las seales digitales exige la aplicacin de las transformadas de Fourier y Laplace, las
cuales hacen un uso intensivo de la funcin suma de productos (LCi F(x)). Por esta razn, los
procesadores especializados en trabajar en el cam po de las seales deben disponer de un conjunto
EL M U N D O DE LOS DSP
Recibe el nombre de DSP (Procesador Digital de Seales) un circuito integrado que contiene un pro
cesador digital y un conjunto de recursos complementarios capaces de manejar digitalmente las se
ales analgicas del mundo real, como los sonidos y las imgenes.
A principios de la dcada de los 80 del siglo pasado ya se comercializaban varios modelos de
DSP, siendo pioneros los fabricantes Texas Instruments, NEC e Intel. En la actualidad Texas Ins
truments mantiene el liderazgo en el mercado de DSP, fabricando modelos cada vez ms potentes
para acoplarse a las aplicaciones ms complejas y cambiantes.
Los DSP pueden asemejarse a los clsicos microcontroladores, pero incorporando arquitecturas
y recursos especiales para poder controlar de form a ptima los requerimientos especficos y los al
goritmos manejados en el procesamiento digital de seales analgicas. Se destacan las siguientes
prestaciones de los DSP:
a) Las procesadores preferentemente son RISC; con un reducido juego de instrucciones que se eje
cutan, generalmente, en un solo ciclo.
b) Utilizan la arquitectura Harvard y disponen de dos memorias independientes, una dedicada a con
tener las instrucciones y otra los datos, posibilitando el acceso simultneo a ambas informaciones.
Adems, la memoria de datos suele dividirse en dos espacios independientes que aportan el ac
ceso paralelo. (Figura 1.7.)
c) Disponen de recursos fsicos complejos para soportar las operaciones especficas de los algorit
mos DSP. Son imprescindibles un multiplicador rpido y un flexible registro de desplazamiento.
Una operacin DSP tpica es la de *multiplicar y acumular" ( x = a b + x) y que la suele implementar a instruccin de nemnico MAC, ejecutndose en un solo ciclo. Se realizan varios accesos
a memoria en un solo ciclo, para que el procesador pueda buscar una instruccin mientras reali
za la bsqueda de operandos y/o almacena el resultado de la instruccin anterior. Esto es posible
gracias a que fa memoria de datos se divide en dos partes para posibilitar el acceso simultneo
de datos
d) El repertorio de instrucciones contiene algunas especficas para resolver los algoritmos matemti
cos habituales en el procesamiento de seales.
e) Los modos de direccionamiento son muy sofisticados, ya que localizan los datos y almacenan los
resultados de forma ptima para los algoritmos empleados.
f) Disponen de un conjunto de interrupciones muy amplio y veloz, con niveles de prioridad.
g) En el DSP se integran numerosos recursos y perifricos que minimizan el tamao y simplifican el
diseo del sistema.
h) Poseen mdulos para el control y optimizacin del consumo de energa.
Figura 1.7.
Los microcontroladores clsicos, denominados de forma resumida MCU, son circuitos integrados
que contienen un procesador digital completo junto a diversos perifricos auxiliares que facilitan el
desarrollo de las aplicaciones a las que se dedican. Su parecido con los DSP es muy grande, pero las
diferencias que los distinguen hacen que sus campos de aplicacin sean diferentes.
De forma resum ida puede decirse que los DSP son microcontroladores dotados de los recursos
fsicos y lgicos necesarios para poder soportar las aplicaciones especficas del procesamiento di
gital de seales.
Las instrucciones aritmticas complejas de los M CU se ejecutan en varios ciclos, mientras que
las de los DSP slo precisan uno. En los DSP siempre se dispone de conversores AD rpidos y pre
cisos. Dado el carcter marcadamente matemtico de los programas para DSP, stos estn prepara
dos para ser programados con lenguajes de alto nivel, como el C. La velocidad y el rendimiento de
los DSP son muy superiores a los habituales en los MCU.
En el momento que la expansin de las aplicaciones de los MCU ha alcanzado cotas extraordi
narias y se fabrica un sin fin de productos y sistemas que llevan embebidos uno o varios, el nivel
cientfico y los avances tecnolgicos han logrado fabricar DSP que aaden al MCU los recursos ne
cesarios para soportar el procesamiento digital de las seales y cubrir as todo el cam po de posibi
lidades y aplicaciones que envuelve. (Figura 1.8.)
Figura 1.8.
EL M U N D O DE LOS DSP
Al analizar el comportamiento del MCU se espera que ejecute la secuencia de instrucciones tal
como la especifica el programa, siendo las interrupciones la nica causa que puede apartarle de
La misma. Su funcionamiento es claramente previsible y su actuacin determinstica. Por el con
trario, en muchas aplicaciones con DSP los resultados son consecuencia inmediata del flujo de da
ros que suministra la seal muestreada y la ejecucin es dependiente de los datos obtenidos en
nempo real.
La empresa Microchip Technology Inc. ocupa el prim er puesto en el ranking mundial de microcontroladores de 8 bits desde el ao 2003; sus modelos son conocidos popularmente con el nombre
genrico de PIC. Tras el exitoso lanzamiento de las familias de microcontroladorcs de 16 bits
-IC24FXXX y PTC24HXXX, los usuarios necesitan nuevos dispositivos que soporten funciones de
procesamiento digital de seales para atender las nuevas tendencias del mercado orientadas al au
mento de la conectividad por Internet, las mejoras relacionadas con la imagen y el sonido, el con
trol de motores, etc.
Las aplicaciones modernas mezclan las funciones tpicas MCU con las de procesamiento digide seales (DSP). Esta situacin ha im pulsado a M icrochip a fabricar un circuito hbrido
NICU/DSP, cuyo manejo es similar a los clsicos microcontroladores pero que incluye las principa
les prestaciones de los DSP. As ha nacido el Controlador Digital de Seales, abreviadamente
DSC (Digital Signal Controller), que rene las caractersticas de un microcontrolador PIC de 16
bits y las de un DSP de gama baja. En base a este controlador digital de seales, M icrochip consi
gue reunir lo mejor de ambos mundos, marcando el comienzo de una nueva era en el mercado de
controladores. (Figura 1.9.)
LU
----------
PRECIO
Figura 1.9.
10
La primera generacin de DSC, denominada dsPIC30F, constituy un intento por parte de Microchip de facilitar el acercamiento al mundo del procesamiento digital de seales a sus usuarios de
MCU de 8 y 16 bits. Con esta intencin se ha mantenido el entorno de la arquitectura y juego de ins
trucciones de los MCU tradicionales, pero aadiendo la funcionalidad y los principales requisitos de
los DSP, para facilitar la transicin a sus clientes habituales. Posteriormente, la segunda generacin
de DSC, llamada dsPIC33F, ha potenciado las capacidades, el nmero de perifricos y el rendi
miento, permitiendo acceder a campos de aplicacin ms complejos.
Las ventas de DSP en el mercado mundial crecen a un ritmo aproximado al 30 por l anual, ocu
pando el prim er puesto del escalafn el fabricante Texas Instruments que consigue casi la mitad de
las ventas totales. En la Figura 1.10 se muestra la distribucin porcentual de las ventas de DSP en
el mundo, segn EE Times durante el ao 2004.
TEXAS
INSTRUMENTS
OTROS
FABRICANTES
FREESCALE
S E M IC O N D U C T O R S
PHILIPS
SEMICONDUCTOR
AGERE
SYSTEMS
ANALOG
DEVICES
En el ao 2005 se alcanz un total de 1,3 billones de unidades DSP vendidas, lo que supone un
volumen de ventas de 7,8 billones de dlares, que se incrementar notablemente en un futuro in
mediato. El sector de las comunicaciones ser el principal responsable de este crecimiento.
La cuota en volumen de ventas de los sectores ms importantes en el mercado DSP fue de 6,4
billones de dlares en el sector de comunicaciones, 414 millones de dlares en el de computadores
y 312 millones de dlares en el sector del automvil, segn IC InSights durante el ao 2005.
En cuanto a la distribucin de las aplicaciones de DSP en el mercado global, Forward Concepta
las ha dividido en seis secciones (2004). (Figura 1.11.)
En lo que respecta a la fabricacin de DSP sobresale Asia que abarca un 52 por 100, destacan
do China, Taiwn y Corea del Sur. Seguidamente Europa posee una cuota del 20 por 100 del total y
luego se sitan Japn y Estados Unidos con un 17,3 por 100 y 10,7 por 100, respectivamente. Esta
dos Unidos est a la cabeza en lo que se refiere a consumo de DSP.
Dentro de los campos de aplicacin de los D SP destacan las Telecomunicaciones, la M ultime
dia y el Control de Motores. Esto incluye una am plia variedad de soluciones como la mejora de
EL M U N D O DE LOS DSP
11
Figura 1.11. Distribucin porcentual del mercado en las aplicaciones en las que estn presentes
los DSP.
GRAN C O N S U M O
i ' ; : - !
El uso cada vez ms extendido de DSP en aplicaciones porttiles como la telefona celular hace que
el consumo de energa sea un factor a tener muy en cuenta en el momento de decidirse por un DSP u
olro. Otros productos de consumo con DSP son televisores, radios, reproductores de msica digital,
reproductores de -CD, rganos y sintetizadores musicales, frigorficos, lavadoras y equipos de aire
acondicionado.
M E D IC IN A
Aparatos como los equipos destinados a la monitorizacin de pacientes, MNR, scanner, electrocar
diogramas.. electroencefalogramas y tomografas, han logrado que sus imgenes sean mostradas con
mucho ms detalle que las tcnicas convencionales gracias a los DSP, permitiendo un diagnstico y
tratamiento significativamente mejor. Hay otros aparatos destinados al diagnstico asistido, las ecografas y la resonancia magntica, que pueden proporcionar informacin acerca de la fisiologa y del
flujo de sangre a travs de las arterias.
12
INDUSTRIA
l DSP ha revolucionado reas como la exploracin petrolera, minera, submarina y espacial, el control
de motores, la instrumentacin y la robtica. (Figura 1.12.)
Figura 1.12. La placa de la fotografa corresponde a un radar para tiburones y contiene un DSP
ADSP-TS2105 cuya funcin es optim izar su deteccin.
CONTROL DE MOTORES
V,- , O::
-. . , ,
m&y+Xs r!
-.-v -:>:>x::
El control de motores es un campo al que los fabricantes de DSP se estn dedicando ampliamente ya
que al estar presentes en casi todos los procesos industriales el desarrollo de mdulos de control de po
tencia es una inversin segura. De este modo se emplean DSP en sistemas como controladores de mo
tores, inversores de potencia, controladores de posicin, impresoras y fotocopiadoras, compresores de
alta potencia, etc. Los DSP presentan excelentes caractersticas debido a su potencia en el clculo nu
mrico, permitiendo implementar controles de velocidad, de sistemas de energa magnetizante, de fac
tor de potencia y otros, con niveles de eficiencia nunca alcanzados anteriormente.
:
--
o'.:
A U T O M O C I N
La introduccin de DSP en esta rea ha supuesto un incremento de las prestaciones de los automvi
les. Se aplican en los activadores de airbag, sistemas de chequeo, control de velocidad de crucero,
suspensin activa, control del motor, ordenador de a bordo, ABS y control de la combustin. General
Motors, por ejemplo, utiliza un DSP en su sistema de rastreo de automviles aprovechando la red glo
bal de satlites GPS para establecer su ubicacin precisa.
EL M U N D O DE LOS DSP
13
MILITAR
El sonar, el radar, el piloto automtico y el guiado automtico de misiles son algunos de los ejemplos
de la utilizacin DSP en el mbito militar.
TELECOMUNICACIONES
Figura 1.13. Cmara estabilizador de imagen con GPS para helicpteros. El cometido del DSP es gra
bar las imgenes absorbiendo la vibracin del helicptero adems de disponer de un
complejo sistema CPS incorporado.
Figura 1.14. Receptor de DRM. El receptor est basado en DSP y puede conectarse directamente a
un PC para visualizar los parmetros de la emisin. Tiene la posibilidad do recibir texto,
imgenes y hasta pequeos videoclips ju n to con la seal de audio.
14
Figura 1.15. La emisora de la fotografa contiene un DSP cuya funcin es eliminar la interferencia de
seales de emisoras adyacentes y reducir al mnimo la distorsin de sonido causada por
una mala recepcin.
IM A G E N Y S O N ID O
EDSP puede realizar muchas funciones importantes durante el procesado del sonido y las imgenes.
Permite aadir ecos, soportar la visin artificial, ef reconocimiento de patrones, la compresin/des
compresin de imgenes, el reconocimiento y la generacin de audio, la cancelacin de ruido, la can
celacin de eco, el encriptado y la sntesis de voz.
Figura 1.16. Dskc.am. Cmara c.on TCP/IP Ethernet, que gracias a un DSP soporta la videoconferencia, el reconocimiento de imgenes, adems de disponer de filtros y compresin.
EL M U N D O DF LOS DSP
15
Figura 1.17. M d ulo de vdeo "5g DM 642 m ultichannel". Soporta diversos formatos de. vdeo y
codifica y decodifica vdeo. Tiene un DSP que perm ite convertir las seales de vdeo
y audio analgicas en archivos digitales con calidad de vdeo DVD.
Figura 1.18. Placa PCI. Contiene un DSP y capacidades de grabacin y reproduccin a gran calidad.
CAPTULO
2
}
Controladores
Digitales
de Seales (DSC)
"
^igura 2.1.
Variedad de perifricos
Rendimiento DSP
ntecrupaones avanzadas
Memoria FLASH robus
Encapsuados con pocas patitas
Optimizado para enguaje C
Manejo parecido a MCU
18
Inicialmenle M icrochip fabric la familia dsPIC30F de la que se ofrece en la tabla de la Figura 2.2
sus caractersticas ms destacables.
RECU RSO
Memoria de Programa FLASH
12K b- 1 4 4 Kb
512 Bytes - 8 Kb
de Encapsulado
1Kb - 4 Kb
18 - 80 patitas
Temporizadores de 16 bils
Hasta 5
M dulo de Captura
Hasta 8 entradas
Hasta 8 salidas
De 6 a 8
Conversor A /D de 12 bits
UART
1 -2
SPI ( 16 bits)
i2c 1M
Figura 2.2.
R A N G O DE VALORES
1-2
1 M dulo
QEI
Interfaz CODEC
CAN
1-2
El voltaje de alimentacin admite un rango com prendido entre 2,5 y 5,5 VDC. Se tolera una
temperatura interna entre -4 0 y 85 C y una externa entre -4 0 y 125 C. El rendim iento alcanza
los 30 MIPS cuando el voltaje de alimentacin tiene un valor entre 4,5 y 5,5 VDC.
En cuanto a la arquitectura de la CPU los dsPIC 30F se sustentan en un ncleo RISC con ar
quitectura Harvard mejorada. Actuando como soporte central de informacin existe un banco de
16 registros de 16 bits cada uno; se dispone de un bus de datos de 16 lneas y otro de instruccio
nes de 24. Para potenciar la velocidad de las operaciones aritm ticas com plejas existe un M o
tor DSP que contiene un m ultiplicador hardw are rpido de 17 x 17 bits, dos acum uladores de 40
bits y un robusto registro de desplazamiento. La memoria de programa, tipo FLA SH, puede al
canzar un tam ao de 4 M instrucciones de 24 bits cada una, aunque actualm ente slo hay m ode
los con una capacidad mxima de 256 K bytes. La memoria de datos SRAM puede alcanzar 32
K posiciones de 16 bits, aunque en los modelos actuales slo se llega a la mitad. La memoria de
datos se divide en dos espacios, X e Y, que pueden ser accedidos sim ultneam ente en las opera
ciones m atem ticas DSP. Toda esta estructura adm ite operaciones M CU y operaciones DSP con
19
Figura 2.3.
Las secciones M CU y DSP cooperan en el funcionamiento general y comparten el flujo de insrucciones de los DSC. Los recursos especficos del M otor DSP, adems de soportar las operacio
nes DSP, permiten implementar nuevas y potentes instrucciones MCU. Para reducir el tiempo de
ejecucin de algunas instrucciones DSP la memoria de datos SRAM se divide en dos espacios X e
Y que pueden ser accedidos a la vez.
Otra caracterstica im portante en los dsPTC30F es la de admitir hasta 45 fuentes distintas de
peticin de interrupcin con 7 niveles de prioridad, de las cuales 5 son externas. Hay modelos
dsPIC30F que disponen de hasta 54 patitas de E/S programables y con otras funciones multiplexadas con un consum o de 25 mA cada una. Los dispositivos dsPIC.33F como disponen de ms
perifricos tambin admiten ms causas de interrupcin.
Se puede encontrar una gran variedad de perifricos en la familia dsPIC30F como temporizadores. conversores AD, mdulos de captura y comparacin, mdulos PWM para el control de moto
res, mdulos de comunicacin PC, SPI, CAN, UART, DCT, etc.
Los dsPIC33F adems contienen un Controlador de DMA.
Tambin disponen de potentes herramientas para la gestin del sistema (Perro Guardin, Moni:?t de fallo de reloj, temporizadores para la estabilizacin del voltaje de alimentacin y la frecuen
t a . etc.), as como dispositivos para controlar el consumo de energa (modos de bajo consumo Idie y Sleep, deteccin de voltaje bajo, etc.).
En la tabla de la Figura 2.4 se presenta una comparativa sobre el rendimiento de diversas fami
lias de MCU de varios fabricantes segn los programas de prueba sobre anlisis de frecuencia de
instrucciones de EEM BC Automotive. En el grfico de la Figura 2.5 se compara la reduccin en el
tamao del cdigo con lenguaje C que generan los dsPIC30F frente al de otros competidores segn
los benchmark de EEM BC Automotive.
20
FAM ILIA M CU
C IC L O
IN S TR U C C I N
(M Hz)
INFINEON
MICROCHIP
II
M O TO R O IA
HITACHI
INFINEON
ST MICRO
MITSUBISHI
MOTOROLA
Figura 2.4.
XC161/166
dsPO O F
320LF240X
56F8X
H8S/26XX
C16x
ST10F269
M 16 C
MC9S12D
C IC L O S POR
IN STR U C C I N
1-6
1 -2
1-4
1-8
1 -7
2 -4
1-8
40
30
40
40
33
25
20
20
25
1-8
2 -6
MIPS
29
28
21
19
15
12
9
9
6
Tabla de diversos fabricantes sobre algunos de sus modelos M CU usando los programas
de prueba basados en el anlisis de frecuencia de instrucciones de EEMBC Automotive.
221%
100%
Figura 2.5.
Se muestra a reduccin del cdigo en lenguaje C que supone el uso de los dsPIC30F fren
te a otros segn los benchmark de EEMBC Automotive para un tamao de 50 Kbytes.
Este grupo consta de 8 modelos diferentes que se orientan especialmente a las aplicaciones avanzadas
de MCU de 16 bits embebidos y para las de audio que precisen interfaces CODEC. (Figura 2.6.)
M O D ELO
FLASH
M D U LO
A/D
PATITAS
M EMORIA SRAM EEPROM TIMER M D U LO
INTERFAZ
C D IG O
PATITAS
12-BIT UART SPI r e CAN
COM PARADO R
E/S
PROGRAMA BYTES
BYTES 16-BITS CAPTURA
CO D EC
EN CAPSULADO
PWM STANDAR
100KBPS
(MX)
KBYTES
24
2048
1024
13 ch
30
P,PT,ML
dsPIC 30F4013
40/44
48
2048
1024
AC97, |2S
13ch
30
P,PT,ML
dsPIC 30F5011
64
66
4096
1024
AC97, |2S
16 ch
52
PTC
dsPIC 30F6011
64
132
6144
2048
16 ch
52
PF PT
64
144
8192
4096
AC97, |2S
16 ch
52
PF I5T
80
66
4096
1024
AC97, |2s
16ch
i ' : 2
68
PT
80
132
6144
2048
16 ch
68
PF PT
AC97, |2S
16 ch
68
PF PT
dsPIC 30F60122
dsPIC 30F6012A
dsPIC 30F5013
dsPIC 30F6013
dsPIC 30F6013A
....
dsPIC 30F614
dsPIC 30F6014A
Figura 2.6.
90
144
8192
4096
Principales caractersticas de los 8 modelos que componen el conjunto de dispositivos dsPIC30F de propsito general.
40/44
CONTROLADORES
dsPIC 30F3014
21
22
CDIGO
ENCAPSULADO
Esta subfamilia consta de 4 modelos y se orienta a resolver aplicaciones embebidas que requieran altas
prestaciones y bajo coste, razn por la que slo disponen de encapsulados de 18 y 28 patitas. (Figura 2.7.)
i
o
</> O iCC
)
ce C_- </> <
O
T
C
T
!
s fH
c=- uj ^
'<
O. w
esu
1
5
K
< 5! |
S8 |
2 |
o ^
s
<
N <N CN <
O
T
N
-
CN
O<
5O
cUJ
_
^P T
i
u
1u
U
JC
w
2/>
<
cc
r+l rr
ro
'
^rl
TN
C
O
C O
*C
=N
t
O
C
O CN C
O
3
T
O
CN
04 O o
C
N o 04
't
CN
l i l i
SVlIlVd
O
C
O co C
O C
C
N
<N
UJ
o
s
o
UL.
O
r>
o
N C
N
C
N CN C
<1l
I 2
<. m
ISOs*
u
5
0
mJ
O)
C
JZ JjjZ. JU
cU
o cuc
C
N C
N CN OJ
o
c
O
O
O
N
L
l_ m
u_
O
<-o
ro 1o
u
U
_r
cw
_ i c
"O
OI
O
C
L
lN
_
O
en
U
Q.
b
c~
u
_
O
c-n
U
fi-i/i
s ~
~o
&
urn
(v3
U
vi
-S
03
.Q ,
u
C
r8
u.
3
W
D
23
_ s 7 modelos que componen esta categora se dedican a las aplicaciones de control de motores, tacomo los de induccin de fase simple o trifsicos y los de corriente continua. Tambin son muy
^ ro p iad o s para la gestin de los sistemas de alimentacin ininterrumpibles, conversores, mdulos
pira la correccin del factor de potencia, etc. (Figura 2.8.)
Estos modelos de DSC se utilizan en sistemas destinados a calefaccin, ventilacin, lavadoras,
ire n u ra industrial de puertas, control de estabilidad, medicin del caudal de agua y consumo de
ectricidad, sistemas de seguridad, etc.
M icrochip recom ienda el modelo dsPIC30F5015 para el control de motores paso a paso, el
^ ?IC 3 0 F 2 0 1 0 para su aplicacin en los motores de corriente continua y el control de velocihi. Para los m otores de induccin de corriente alterna recom ienda los modelos dsP IC 30F3011,
is?IC 30F5015 y dsPIC30F6010.
Con la finalidad de soportar todo tipo de diseos y necesidades los modelos dsPIC 30F estn
capsulados desde 18 hasta 80 patitas, algunos con doble hilera de patitas, tipo PDP y SPDIP
SOIC. O tros estn preparados para el m ontaje superficial com o los tipos T Q FP y QFN.
Figura 2.9.)
La nomenclatura de los dsPIC30F formada por nmeros y letras expresan las especificaciones
particulares y su significado se describe en la Figura 2.10.
El diagrama de conexiones para los miembros de esta familia lo ha diseado Microchip para prop d a r l a migracin hacia modelos superiores y con ms patitas, para lo cual ha mantenido la mxicompatibilidad en su posicin. Se ha favorecido la compatibilidad del pinout o distribucin del
rciiilaje de los PIC M CU con los PTC DSC, tambin la de las instrucciones, la de las herramientas
je desarrollo y la de las patitas de E/S correspondientes a los perifricos de los dos tipos de PTC, cox l c se refleja en la Figura 2.11.
En la Figura 2.12 se muestran los diagramas de conexiones de los modelos dsPIC30F5013 y
^ ?IC 30F 6014, que coinciden, y el del dsPlC30F6013. Los dos prim eros disponen de inteifaz
CODEC y el otro no lo tiene.
La mayora de las patitas de ambos diagramas de conexin soportan varias funciones, pero la
: : mpatibilidad en su posicin es total y slo las patitas 1, 78, 79 y 80 difieren en los diagramas de
te Figura 2.12, que asumen las patitas de E/S que necesita el CODEC en el diagrama correspon
dente a los modelos que lo contienen.
En la tabla de la Figura 2.13 se describe el smbolo, el significado y la direccin de las patitas
~ is representativas en los dsPIC30F.
24
dsPIC
DISEO
M O D ELO
re
CAN
PATITAS
E/S
(MX)
CD.
ENCAPS.
t i
! !
28
12
512
1024
6ch
6ch
SI
20
dsPC 30F310
28
24
1024
1024
6ch
6ch
SI
20
SP,SO
dsPIC 30F4012
28
48
2048
1024
6ch
6c:h
SI
20
SP,SO
dsPIC 30F3011
40/44
24
1024
1024
6ch
9ch
SI
30
lJ,PT,ML
dsPIC 30F4011
40/44
48
2048
1024
6ch
9ch
SI
30
P/PT#ML
dsPIC 30F5015
64
66
2048
1024
8ch
16ch
SI
52
PT
80
144
8192
4096
8ch
16ch
SI
68
dsPIC 30F6015
64
144
8192
4096
8ch
16ch
SI
52
PF
dsPIC 30F5016
80
66
2048
1024
8ch
16ch
SI
68
PT
dsPIC 30F6010
dsPIC 30F6010A
i---------------------
Figura 2.8.
Caractersticas ms significativas de los modelos dsPIC30F para el control de motores y sistemas de alimentacin.
PF
PT
DE APLICACIONES
dsPIC 30F2010
SCP.SOG,
MMG
PRCTICO
M D.
;
A/D
C O D IF IC . DE
MEM.
SRAM EEPROM TIMER M D. COMP. CON TR.
UART SPI
10-BIT
PATITAS
C U A D RA TU R A
PWM
M OTOR.
PROGR. BYTES BYTES 16-BITS CAPT.
500 KBPS
'
ESTND.
KBYTES
FLASH
25
m
MM{G): 28-pin QFN
15 m n x 6 mm * 0 .9 mm)
P: 18-pirv PDIP
(10 mm x 10 mm x i <r*n)
M ic r o c h ip
SO: 18-pin SOIC
( l t . 5 3 * 1 0 .3 4 x ? 31 nvn)
<1 mm x 1 4 m n x l mm)
P: 40-pin PUIP
152.27 x 1 5 .2 4 x 3.S1 m
{1 7 .3 3 x 1 0 .3 4 x 2 .3 1 mm)
figura 2.9.
PIC* MCU
/O T i'.V V W
TMR
TMR I 5
CCP
1C
oc
UART
TMR
T 0 I
OC
::
SPI
F^ura 2.11. M icrochip ha potenciado la com patibilidad de las lneas de E/S de los perifricos de los
PIC M C U con la de los dsPIC DSC.
26
2n3
Q 8 S S 2
5??
e
a s o & 8 5 ;:
I 5 SI
|
8
ggo88a
s 5Ss1 2 I 11
nnnnnnnnnnnnnnnnnnn
0 s x 0 in '0 M -0 ( N ( irtr tN -
!EMUci/sasc<yria0CN<VRCi
COFS/RG5
I MUDl*SOSC*CNt/RC13
T2CK/RC1 C U
I EM UC2OC1D0
T3CK/RC2
| IC4/R011
| C3/RD10
T4CWRC3
T5CK/RC4
I IC2/RD9
SCK2/CN&RG6
11C1/RD8
S012/CN9.RG?
| INT4.'RA5
SDQ2'CH*0tRG8
I IK T i'R A '.
MCLR
SS2/CN11XIG9
VSS
| V2
d sP lC 3 0 F 6 0 1 4
I OSC2.C!.K>RC15
I OSCUCUO
V oo
H ] vdo
INT1AA12
|SCLRG2
!NT2iRA13
| SOA/RG3
AN$>CN7.35
I BHUC3/SCK1/lWT<VRre
AN4/CN&R84
AN3.CN&33
| SOI1.F7
AJGmT.VDIWCN4.S2
| B.1UD3jSOO; jRF8
I U1IW RF2
I U1D0RF3
PGOEMUOANVCN3.B31
P G D EM U D Am 'C N 2fl3G d
UUUUUUUUIJ
r r
? T -r -T -lill.
- - - d q q E E
sa
^ i Z Z
i l l g g ll i s
8 35?
SIS
^ V-
r- O
85
8
N M N )
s z z r ' O Q i q
8 2 5 6 0 0 5 5 1 2 8 8 8 8O 3t 2S28 8 3
n n n n n n n n n n p n n - Dn n nn n
S.S535S3S35
E M U C tSOSCOT ICKiCNORCU
R G15
EMUDVSOSCCNtRC13
T2C W R C I I
E M U C 2 O C 1 .R 0 0
T3C K/RG 2 d
IC/RD11
IC3/RD10
T 4C K /R C 3 C Z
73C K /R C 4 d
SCK2>CN8.<RG6
IC2RDS>
tZZ
IC .R D S
SOI2>CNaG7 d
83 d
S D O Z 'C N -.g'R G S d
Vss
S S /C N U < R G 3 d
dsPlC30F6013
V s s d
OSC2/CIKG/RC1S
OSC1.CLXI
Veo I d
1 N T 1 iR A 2 C U
IN T 2 R A 1 3
vas
SCURG2
1ZZ
S D A 'R G 3
AH&yCM7/RBS d
EMUC3-SCK1/1N7IVRFB
A tM .C N & R & d
SDI1JRF7
A fC C N M ? B 3 d
E M U B 3 ;S D 01 iR F S
A K & S S A .V C m C N 4 .-R a 2 d
U1RX FF2
P G G E M U C /A M I/C N iR B '- d
PjtMEMUClAM&lCN2>RB0
EZZ
IW T4/RA15
IHT&RAM
M CLR I
UmORFS
20
saaaajs&asssisissss&sss
UUUUUUUUUUUUU'U
o
< 0 0 6 0 --
Figura 2.12.
rt
> >22D>^(fleO)<no
H f $<<{51
^ =5
u s a :
%%%%% * 2 *
S z z z z py
<S <
D IR EC C I N
D ESCRIPCI N
KAn
E/S
RBn
E/S
RCn
E/S
RDn
E/S
RFn
E/S
RCn
E/S
V lJ!)
ALIMENTACIN
y ss
A V dd
ALIMENTACIN
ALIMENTACIN
AVss
ALIMENTACIN
vr-
ALIMENTACIN
VREf
ALIMENTACIN
INTn
INTERRUPCIN EXTERNA n
An
CLK1/CLK0
E/S
CNn
E/S
E/S
EMUxx
E/S
ICn
OSCI - OSC2
E/S
s o s a - SOSC2
E/S
OCFA - OCF8
OCn
PCD - PGC
E/S
TnCK
E/S
E/S
27
Frgura 2.13. Smbolo, direccin y descripcin de las patitas ms significativas de los encapsulados de
los dsPIC30F.
1 3 . LA F A M IL IA dsPIC33F
D voltaje de alimentacin admite un rango comprendido entre 2 y 3,6 VDC. El rango de tempera a s idntico a los dsPIC30F. El rendimiento mximo alcanza los 40 MIPS cuando el voltaje de ali
mentacin tiene un valor de 3,3 VDC. (Figura 2.14.)
Los aspectos ms destacables que incorporan los dsPIC33F son la ampliacin en el nmero de
p a a s de E/S, la capacidad de la memoria FLASH que alcanza 256 KB, se mantienen los perifri
cos, la disponibilidad del doble de interrupciones, SRAM de hasta 30 KB. No disponen de memon a EEPROM.
Tienen un nuevo modo de bajo consumo DOZE y un nuevo Controlador DMA de 8 canales, que
serve para no utilizar a la CPU en la transferencia de datos entre perifricos y la memoria.
28
RECURSO
R A N G O DE VALORES
Hasta 256 KB
Hasta 30 KB
No Dispone
Temporizadores de 16 bits
Hasta 9
M dulo de Captura
Hasta 8 entradas
Hasta 8 salidas
UART
Hasta 2 mdulos
SP1 ( 8 - 1 6 bits)
Hasta 2 mdulos
i2crM
QEI
Figura 2.14.
Hasta 2 mdulos
Interfaz CODEC
CAN
Hasta 2 mdulos
En el modo DOZE todos los osciladores funcionan, pero a muy poca frecuencia, reduciendo de
esta forma el consumo.
Los dsPIC33F de propsito general son ideales para una amplia gama de avanzadas de MCU de 16
bits embebidos y en concreto, las variantes con interfaces CODEC son idneas para aplicaciones de
tratamiento de la voz y audio. Este grupo est formado por 15 modelos diferentes. (Figura 2.15.)
La categora de control de motores ofrece una gran variedad de aplicaciones relacionadas con el go
bierno de motores, como los de induccin, de fase simple o trifsicos y los de corriente continua.
Tambin son muy apropiados para la gestin de los sistemas de alimentacin ininterrumpibles, conversores, mdulos para la correccin del factor de potencia, telecomunicaciones u otro equipa
miento industrial. Este grupo est formado por 12 modelos diferentes. (Figura 2.16.)
M O D ELO
ds.PI G3 3 FJ64G P2 06
PATITAS
64
FLASH
M EM ORIA
M D.
SRAM
PROGRAM A KBYTES
KBYTES
64
CDM A
Ch#
TIM ER
M D .
16-BITS CAPT.
COM P.
PWM
CO D EC
INTERF.
ESTND.
8
A/D
10-BIT
UART
sp|TM
r c rM CAN
500KBPS
IADC,18ch,1S/H
PATITAS
E/S
(MX)
CD.
ENCAPS.
53
PT
53
PT
dsPIC33FJ64GP306
64
64
16
1ADC,18ch,1S/H
' " -i
2
: dsPIC33 FJ64GP706
64
64
16
2ADC,18ch,2S/H
53
PT
dsPIC33Fjl 28GP206
64
128
1ADC,18ch,1S/H
53
PT
dsPIC33FJ128GP306
64
128
16
1ADC,18ch,1S/H
53
PT
dsPIC33FJ128GP706
64
128
16
2ADC,18ch,2S/H
53
PT
dsPIC33FJ256GP506
64
256
16
1 ADC,18ch,1 S/H
53
80
64
16
2ADC,18cli,2S/H
69
PT
dsPIC33FJ128GP708
80
128
16
2ADC,18ch,2S/H
69
PT
100
64
16
1ADC,18ch,1S/H
85
PT,PF
dsPIC33FJ64GP710
100
64
16
2ADC,18ch,2$/H
85
PT^PF
dsPIC33 FJ128GP310
100
128
16
1ADC,18ch,1S/H
85
PT, PF
dsPIC33FJ 128GP710
100
128
16
2ADC/18chr2S/H
85
PT,PF
dsPIC33FJ256GP510
100
256
16
1ADC,18ch,15/H
85
PT,PF
dsPIC33FJ256GP710
100
256
30
2ADC,18ch;2S/H
85
PT,PF
1,
Figura 2.15. Principales caractersticas de los 15 modelos que componen los dsPIC33 de propsito general.
30
M O D ELO
KBYTES
M D.
CO N TR.
CO D IF.
COMP.
M OTOR
PWM
CUA D RATURA
PWM
ESTND.
A/D
10-BIT 1.1
MBPS
PATITAS
CD.
E/S
ENCAPS.
(MX)
64
64
8ch
SI
1A/D,16Ch,4S/H
53
PT
dsPIC33FJ64GP306
64
64
16
8ch
SI
2/D,16Ch,8S/l 1
53
PT
dsPIC33FJ64GP706
64
128
8ch
SI
1A/D,16Ch,4S/H
53
PT
ds.PIC33 FJ128GP206
64
128
16
8ch
SI
2A/D,16Ch,8S/H
53
PT
dsPIC33FJ I28GP306
80
64
8ch
SI
IA/D,18Ch,4S/H
69
PT
dsPIC33FJ128GP706
80
128
16
8ch
SI
2A/D,18Ch,8S/H
69
PT
dsPIC33FJ256GP506
100
64
8ch
SI
1A/D,24Ch,4S/H
85
PT, PF
dsPIC33FJ64GP708
100
64
16
8ch
SI
2A/D,24Ch,8S/H
85
PT ,PF
dsPIC33FJ128GP708
100
128
8ch
SI
1A/D,24Ch,4S/H
85
PT, PF
dsPIC33 FJ64GP310
100
128
16
8ch
SI
2A/D,24Ch,8S/H
85
PT, PF
dsPIC33FJ64GP710
100
256
16
8ch
SI
1A/D,16Ch,4S/H
85
PT, PF
dsPIC33 FJ128GP310
100
256
i 20
8ch
SI
2A/D,24Ch,8S/H
85
PT, PF
Figura 2.16.
Principales caractersticas do los 12 modelos que componen los dsPIC33F de control de motores y sistemas de alimentacin.
DE APLICACIONES
ds Pl 0 . 3 FJ64 GP2 0 6
PRCTICO
dsPIC. DISEO
FLASH
31
dsPIC33F
26 modelos disponibles
27 modelos disponibles
Controlador de D M A (8 canales)
5 temporizadores
9 temporizadores
Modos de trabajo con baja energa :
1. IDLE
2. SLEEP
3. DOZE (modo de frecuencia ms baj)
Alimentacin de 2 a 5,5 V
Alimentacin de 2 a 3,6 V
Memoria SRAM de 30 KB
Abundantes perifricos
Ms perifricos
rara mantener la continuidad a los diseadores con PIC MCU y facilitar su transicin a los DSC,
Microchip proporciona un paquete de herramientas software para estos ltimos muy sim ilar a las
utilizadas con los microcontroladores clsicos.
Todo el software se cimienta en el conocido entorno integrado MPLAB IDE, que consiste en un
sistema lgico gratuito con un Ensamblador MPLAB ASM30, un simulador software S1M30, un
compilador de C, MPLAB C30, y el nicializador Grfico de Programas MPLAB VDI. (Figura 2.18.)
l a mayor parte de estas herramientas pueden recogerse libremente desde el sitio de Microchip en
internet.
El MPLAB IDE gestiona todas las etapas del diseo software de un proyecto y se adapta a las
herramientas hardware de Microchip y otras segundas fuentes. Corre en sistemas operativos W in
dows XP, 2000, Me, 98SE y NT.
32
Figura 2.18. Ventana del programa MPLAB VDf que presta una gran ayuda en la fase de inicializacin de los programas con DSC, al aportar un entorno grfico para Ja configuracin de
los recursos que intervienen.
33
Figura 2.19. Fotografa del programador universal de PIC y dsPIC, de bajo precio, fabricado por
Ingeniera de Microsistemas Programados S.L.
Figura 2.20. Fotografa del MPLAB IC.D-2 que es capaz de grabar y depurar en circuito los modelos
dsPIC
34
CONTROL D E MOTORES
Bombas industriales.
Lavadoras y aspiradoras.
Equipos de gimnasia.
Tensores de cinturones de seguridad.
Calefaccin, ventilacin y aire acondicionado.
Refrigeracin.
Herramientas elctricas.
Apertura de puertas.
Control de estabilidad.
Figura 2.22. Los pretensores de cinturones de seguridad son una aplicacin recomendada para los
dsPIC.. Cortesa de Citron.
B) CONTROL D E SENSORES
Sensores de torsin.
D epresin.
De vibraciones.
De golpes.
De lluvia.
De fallos en la red elctrica.
De rotura de cristales.
Sensores qumicos y de gases.
Deteccin PIR avanzada 2-D.
35
r:^ura 2.23. El sensor de seguridad de la figura posee un DSP efue le permite incluso distinguir a una
persona de una mascota. Cortesa de SmartHome.
C) AUTOM OCIN
Control de potencia.
Control de estabilidad y balanceo.
Caja de cambios y embrague electrnico.
Direccin hidrulica asistida elctricamente.
Cancelacin de ruido en el habitculo.
Airbag.
Control de ignicin.
Sensor de presencia de ocupantes.
Control del combustible.
Figura 2.24.
D)
El airbag es una aplicacin recomendada para los dsPIC. en automocin. Cortesa de Volvo.
CONECTIVIDA D EN INTERNET
M onitorizacin remota.
Contadores automticos de agua y gas.
Instrumentacin mdica remota.
Sistemas de seguridad.
Mquinas expendedoras.
Diagnstico industrial remoto.
36
Figura 2.25. Los dsPIC tienen un vasto campo de aplicacin y control por Internet de las mquinas ex
pendedoras. Imagen cortesa de ATM Inc..
E) AUDIO
Reconocimiento de voz.
Altavoces telefnicos.
Redes distribuidas de megafona.
Efectos especiales en instrumentos musicales.
Cancelacin de ruidos.
Reproduccin de sonido digital.
Auriculares para la eliminacin de ruidos.
Puertos de comunicacin para manos libres.
M icrfono activado por la voz.
Figura 2.26. Los aparatos de audio para la reproduccin digital del sonido son productos en los que
se utilizan DSP. Cortesa de BENQ.
37
Convertidores AC-DC.
Convertidores DC-AC.
Fuentes de alimentacin ininterrumpibles (UPS).
Inversores.
Vehculos elctricos.
Correccin del factor de potencia.
Monitorizacin de la alimentacin en servidores.
Gestin de la alimentacin y ahorro de consumo.
Deteccin de fallos.
Figura 2.27. Las fuentes de alimentacin ininterrumpibles (UPS) constituyen un campo de aplicacin
m uy interesante para los dsPIC. Cortesa de Craftsmans Electric.
CAPTULO
Arquitectura
de la CPU
En la Figura 3.1 se presenta el diagrama por bloques correspondiente a la arquitectura inlema del
modelo dsPlC3F6010 que se le puede considerar uno de los ms representativos. Encapsulado con
SO patitas en formato TQ FP dispone de casi todos los recursos posibles y cualquier otro componente
de la familia contendr slo una parte de los elementos del mencionado dispositivo. El diagrama de
Figura 3.1 puede dividirse en 6 bloques principales:
1 Memoria de datos.
2 Memoria de programa.
3. Camino de datos.
4. Puertas de E/S muitifuncin.
5. Perifricos diversos.
6 Recursos para la gestin del sistema y de la energa.
La memoria de datos RAM (SDRAM) se estructura en dos espacios, llamados X e Y, que per
miten acceso simultneo y que pueden alcanzar hasta 8 KB de capacidad en el modelo dsPIC30F,
siendo el tamao de todas sus posiciones de 16 bits. Tambin existe una memoria de datos no vol
til de tipo EEPROM. En los 33F no hay EEPROM pero la SRAM puede alcanzar 30KB.
Para una instruccin del tipo MCU (no DSP) los espacios X e Y se convierten en un solo espa
cio lineal.
Las instrucciones se alojan en la memoria de programa de tipo FLASH cuyas posiciones tienen
un tamao de 24 bits, igual que el de la mayora de las instrucciones. La memoria de instrucciones
del modelo dsPIC33F es algo ms rpida que la del dsPTC30F. La memoria FLASH de los 33F tra
baja a 3,3 V, con el inconveniente de que slo puede ser escrita y borrada 1000 veces (Endurance).
La memoria de programa puede alcanzar 144 KB como mximo.
El Camino de Datos donde se ejecutan las instrucciones y se procesan los datos se basa en un
banco de 16 registros de trabajo (W) de 16 bits de longitud cada uno, que alim entan una ALU
39
40
Figura 3.1.
ARQUITECTURA DE LA CPU
41
- pica de MCU, un M otor DSP que sirve para realizar las operaciones DSP de 40 bits y una uni
dad de divisin.
Las 7 puertas que agrupan las lneas de E/S para la comunicacin con el exterior (PUERTA A,
PUERTA B, PUERTA C, PUERTA D, PUERTA E, PUERTA F y PUERTA Q) se caracterizan por
a p o rta r varias funciones multiplexadas. En cuanto a perifricos y recursos auxiliares contenidos en
d dsP!C30F6010 abarcan a todos los posibles en la familia: Conversor AD, Mdulo de Captura,
Mdulo de Comparacin, PWM para el control de motores, Codificador de Cuadratura, Mdulos de
comunicacin (UART, SPI, I2C y CAN), Osciladores, Perro Guardin, etc. Tambin existen recur
sos complementarios para el manejo de la energa y la tensin de alimentacin.
Bajo una arquitectura Harvard mejorada la CPU soporta un potente repertorio de instrucciones, la
mayora de 24 bits de longitud y algunas que realizan operaciones especficas DSP. El dircccionarniento de la memoria de programa corre a cargo del Contador de Programa que consta de 23 bits,
iliendo siempre cero el de menos peso e ignorndose el de ms peso, con lo que se puede direc::onar un espacio mximo de 4 millones de palabras de instruccin de 24 bits.
0X0001
0X 0000
M EMC^'A
CERCANA
S<0
0X 07FE
0X07FF
0X 0800
MAX
ESPACIO V
64 KB.
NO
IM P L E M E N T A D O
NUNCA IMPLEMENTADO
0XFFFE
Figura 3.2.
42
bits. El dsP!C30F6010 dispone de una memoria de datos de 8 KB que se distribuye en dos espacios
llamados X e Y, que funcionan de forma independiente al tener sus propias Unidades de Generacin
de Direcciones (AGU). La mayora de las instrucciones tipo MCU operan slo con la AGUX, que
combina los espacios X e Y en uno solo unificado. Sin embargo, algunas instrucciones como la
MAC (Multiplicar y Acumular), tipo DSP, dividen el espacio de la memoria de datos en dos espa
cios X e Y independientes, que posibilitan el acceso simultneo en lectura y la reduccin del tiem
po de ejecucin de algunas instrucciones.
Una caracterstica especial de los dsPIC es su capacidad de guardar datos en la memoria de pro
grama, existiendo dos mtodos para acceder a ellos.
'
a) Los 32 KB superiores del espacio de la memoria de datos pueden mapearse en la mitad inferior >'-W
del espacio de la memoria de programa como 16 K palabras de 24 bits cada una. Slo se puede
acceder a los 16 bits de menos peso de cada palabra de instruccin. A esta posiblidad se le de
nomina PSV (Visibilidad del Espacio de Programa).
b) Tambin existe la posibilidad de acceder indirectamente al espacio de la memoria de programa
utilizando un registro de trabajo y las instrucciones especiales de lectura y escritura de Tabla.
VECTCft RESET
T A B L A V E C T O R E S IN TER R U P C IO N
M E M O R IA
U SU AR IO
(2M
B)
T A B L A A L T E R N A T IV A V E C T O R E S DE IN TER R U P C IO N
M E M O R IA P R O G R A M A F LA SH
M E M O R IA OF D A T O S E E PR O M
7FF F F E
aocooR E G IS T R O S C O N F IG U R A C I N .
M E M O R IA
C O N F IG U R AC I N
(2M S
--------------------------- 1--------:
__________ ____
R E G IS T R O S ID EN T IF IC A C I N
Figura 3.3.
Para el direccionamiento de los datos se pueden utilizar los modos clsicos de todos los proce
sadores: Inmediato, Inherente, Directo, Relativo, Registro Directo, Registro Indirecto y Registro de
ARQUITECTURA DE LA CPU
43
Para combinar las funciones aritmticas de una potente MCU de 16 bits con las especficas de un
DSP se cuenta con los siguientes recursos: banco de 16 registros de trabajo W de 16 bits cada uno,
ALU para MCU, M otor DSP y una unidad para la divisin. (Figura 3.4.)
Figura 3.4.
La ALU de 16 bits interviene en las operaciones aritmticas propias de las instrucciones MCU.
El M otor DSP contiene un multiplicador rpido de 17 x 17 bits, dos Acumuladores A y B de 40 bits
cada uno, un Sumador/Restador de 40 bits y un potente Registro de Desplazamiento de 40 bits bdireccional. Con los recursos comentados, una instruccin DSP, como la MAC, puede leer de la me
moria dos operandos simultneamente, mientras que multiplica dos registros W en un solo ciclo.
Una parte muy importante del Motor DSP es el banco de registros de 16 bits cada uno. Se llama
banco de registros de trabajo y cada uno tiene una funcin concreta como se puede ver en la tabla
de la Figura 3.5.
44
Figura 3.5.
R egistros
D e scrip ci n
WO
W0-YV3
W4-W7
W8-W9
VV9-VV10
W 12
W 13
W 14
Marco de la pila.
W 15
Aunque el procesador no admite la segmentacin de su cauce, utiliza un mecanismo de prebsqueda con el que accede y predecodifica las instrucciones en el ciclo anterior al de su ejecucin, eje
cutando gran parte de las instrucciones en un ciclo y optimizando el rendimiento. Las nicas ins
trucciones que tardan en ejecutarse ms de un ciclo son:
a) Las instrucciones destinadas al control del flujo (saltos, llamadas y retornos) que ocupan dos ciclos
al tener que limpiar y volver a llenar el Registro de Instrucciones IR y el buffer de prebsqueda.
b) Las instrucciones que deben acceder a un operando en el espacio de la memoria de programa.
c) Las instrucciones que manejan dobles palabras.
3.4.
El dsPIC30F6010 posee 7 puertas de E/S cuyas lneas soportan varias funciones multiplexadas, ade
ms de la propia lnea de E/S digital. En la Figura 3.1 se aprecia la existencia de 68 lneas de E/S
multifuncin, de las cuales 4 pertenecen a PUERTA A, 16 a PUERTA B, 5 a PUERTA C, 16 a
PUERTA D ; 10 a PUERTA E, 9 a PUERTA F y 8 a PUERTA G. Como dicho modelo es uno de los
ms completos de la familia, los restantes disponen de un subconjunto de las mencionadas puertas
en funcin de su patillaje.
Los dsP!C33F poseen al igual que el dsPIC30F6010, 7 puertas de E/S, cuyas lneas en este caso
tambin soportan varias funciones multiplexadas, adems de la propia lnea de E/S. Los dsPIC33F
pueden tener 87 lneas de E/S multifuncin, de las cuales 14 pertenecen a PUERTA A, 16 a PUER
TA B, 8 a PUERTA C, 16 a PUERTA D, 10 a PUERTA E, 11 a PUERTA F y 12 a PUERTA G.
Cada lnea de E/S controla varias funciones multiplexadas en el tiempo, la m ayor parte de ellas
destinadas a m anejar los perifricos integrados, quedando algunas dedicadas al control de los vol
tajes de alimentacin, las interrupciones externas, las seales de reloj y las seales del sistema.
Una de las lneas de E/S que maneja ms funciones diferentes es la RBO, que en la Figura 3.1 vie
ne representada con la nomenclatura: PGD/EMUD/AN0/CN2/RB0, que significa que soporta 5
funciones que se describen en la tabla de la Figura 3.6.
ARQUITECTURA DE LA CPU
Funciones
Descripcin
PCD
EMUt)
ANO
CN2
RBO
Figura 3.6.
3.5.
45
PERIFRICOS INTEGRADOS
Los perifricos que se incorporan a cada uno de los modelos de la familia dsPIC30F son los ms
adecuados para las aplicaciones a las que se destinan.
?C
CAN (2)
46
3.WIRESPI'M(2)
f!
$
.a
El conversor AD de 10 bits tiene + /- 1 bit de exactitud y 16 entradas analgicas con 4 amplificadores Sdjnple & H o d . El tiempo estndar de convrsin es de 2 js/500 ksps. El conversor AD
de 12 bits de resolucin aunque es ms preciso tambin es ms lento, 10 jns/100 ksps.
El mdulo PWM para el control de motores proporciona todas las seales necesarias con 4 ge
neradores PW M con dos patitas de E/S cada uno. Disponen de una amplia base de tiempos y dos pa
titas para deteccin de tallos programables.
La interfaz para los codificadores pticos incrmentales (QE1) para la medida de la velocidad y
el sentido de giro del eje de un motor proporciona todas las seales requeridas para su correcta adap
tacin. (Figura 3.7.)
Figura 3.7.
Los dsPJC30F contienen hasta 5 temporizadores de 16 bits, mientras que los dsPIC33F pueden dis
poner hasta de 9 de 16 bits, algunos de los cuales se pueden concatenar para formar otros de 32 bits.
Finalmente, los posibles mdulos de comunicacin son muy diversos en los dsPTC y suponen un
alto rendimiento en su conectividad. Destacan los mdulos UART, SP, 2C, CODEC y CAN.
Esta seccin del procesador se muestra en la Figura 3.8 y se encarga de la generacin de las seales de
reloj, el control y optimizacin de la energa y la generacin de las acciones adecuadas ante los fallos.
ARQUITECTURA DE LA CPU
Figura 3.8.
47
ino
Datos
- 1 . IN T R O D U C C I N
El Camino de Datos de un procesador es la seccin encargada de realizar todas las operaciones que
eva la instruccin en curso. Soporta funciones aritmticas, lgicas, de desplazamiento, movinto, rotacin y manipulacin de bits entre otras. En el caso de los DSC el Camino de Datos es
_z de manejar un repertorio de instrucciones que consta de las propias de una MCU de 16 bits,
to a otras especficas de un DSP y se organiza en 4 bloques principales:
1.
2
3.
4.
BANCO DE REGISTROS
ALUDE 16 BITS
MOTOR DSP
UNIDAD DE DIVISIN
2 . EL BANCO DE REGISTROS W
r.m sta de 16 registros de 16 bits cada uno y se denominan W0-W15, pudiendo contener datos, di
c c i o n e s y desplazamientos u offset, dependiendo de la instruccin que les utilice. Cada uno lieisignadas funciones diferentes. (Figura 4.1.)
Como se indica en la Figura 4.1, algunos registros W actan con algunas instrucciones contenendo una informacin concreta, mientras otros asumen una funcin determinada.
En los microcontroladorcs PTC (MCU) existen instrucciones que no especifican el registro de trafetjo que manejan y toman por defecto el que acta como Acumulador. Tambin sucede lo mismo
los DSC, en los que se toma por defecto como W REG al registro WO.
Como se muestra en el esquema de la Figura 4.2, el Banco de Registros comparte informacin
b h i todos los bloques que componen el Camino de Datos.
50
15
WREG IMPLCITO
(ACUMULADOR)
W0
RESULTADO
MULYDIV
W1
W2
W3
W4
OPERANDOS
INSTRUCCIONES
MAC
W5
W6
W7
'W8
DIRECCIONES
OPERANDOS
MAC
W9
W 10
W11
Figura 4.1.
W 12
W 13
PUNTERO MARCO
W 14
PUNTERO PILA
W 15
BUS DE DATOS X
SEALES
DE
CONTROL
Figura 4.2.
ABj
UNIDAD
DE
DIVISIN
El banco de registros Wes el destino y el origen de la informacin que comparten los blo
ques del Camino de Datos y los buses X e Y
Las instrucciones lgico-aritm ticas correspondientes a la seccin MCU de los DSC las realiza
una ALU de 16 bits que tambin controla 5 bits del Registro de Estado (SR) que actan como
sealizadores del resultado. En la Figura 4.3 se presenta la ubicacin de dichos bits y su no
menclatura:
EL CAMINO DE DATOS
51
SRH contiene los sealizadores para operaciones aritmtico-lgicas DSR mientras que SRL
contiene los sealizadores para operaciones MCU.
REGISTRO DE ESTADO (SR)
figura 4.3.
El Registro de Estado (SR) contiene cinco bits sealizadores del resultado de la ALU pa
ra operaciones MCU.
La ALU realiza operaciones con operandos de 16 bits de suma, resta, desplazam iento de un
bit. otras de tipo lgico (AND, OR, EOR) y de com plem ento a 2. Como puede apreciarse en la
Figura 4.4 la ALU recibe los operandos del banco de registros y de la memoria de datos a travs
del bus de datos.
figura 4.4.
Los operandos para la ALU pueden ser de 8 y de 16 bits. En las operaciones con 8 bits y para manKfier la compatibilidad con los PIC el resultado se reescribe con tamao palabra, no modificando el
byte de ms peso y controlando los sealizadores para que acten para dicho tamao. Las instrucciones con operandos de tamao byte sobre registros de trabajo slo afectan al byte de menos peso.
52
Para facilitar el manejo combinado de instrucciones con operandos de 8 y de 16 bits hay dos ins
trucciones especializadas, la de Extensin de Signo (SE), que toma el valor del byte cargado en el
registro W o en la posicin de memoria y lo convierte en una palabra de 16 bits extendiendo el bit
de signo y almacenando dicho valor en un registro W, y la instruccin de Extensin de Ceros (ZE),
que pone a cero los 8 bits de ms peso de un registro W o de una posicin de memoria y el valor ob
tenido lo carga en un registro W.
4.4. EL M O TO R DSP
Este bloque del Camino de Datos de los DSC se compone de un conjunto de recursos fsicos que tie
nen la misin de soportar las instrucciones que conllevan operaciones complejas empleadas para re
solver los principales algoritmos aplicados en el procesamiento digital de las seales. La instruccin
MAC de M ultiplicar y Acumular es una de estas instrucciones tpicas, que se denominan instruc
ciones DSP.
El Motor DSP recibe los operandos desde el banco de registros W, pero dispone de sus propios
registros para contener los resultados. Dado que slo existe un Decodificador de Instrucciones pa
ra las tipo MCU y las tipo DSP y, por otra parte, las direcciones efectivas de los operandos proce
den del banco de registros W, no es posible ejecutar de forma concurrente instrucciones MCU e ins
trucciones DSP.
Internamente el Motor DSP trabaja con 40 bits, pero externamente se relaciona mediante buses
de 16 bits.
En la Figura 4.5 se presenta el diagrama por bloques del M otor DSP con su conexionado prin
cipal, que consta de los siguientes elementos:
Las instrucciones DSP con dos operandos proporcionan estos ltimos al M otor DSP desde los re
gistros W4, W5, W6 o W7. Los valores de dichos registros son prebuscados a travs de los buses X
e Y en las instrucciones tipo MAC (MAC, MCS, MPY.N, ED, EDAC, CLR y MOVSAC). Para las
restantes instrucciones DSP los operandos se reciben desde el bus de datos X. Tambin las instruc
ciones MCU que utilizan el Registro de Desplazamiento reciben los operandos por el bus de datos X.
Los resultados producidos en el M otor D SP se guardan en alguno de los Acumuladores A o B,
si as se define en la instruccin, o bien en cualquier posicin de la memoria de datos a travs del
bus de datos X. Las instrucciones MCU que emplean el Registro de Desplazamiento tambin sacan
el resultado por el bus de datos X.
Obsrvese en el esquema del M otor DSP que los caminos de entrada y salida con la CPU tienen
16 bits, pero internamente se opera con valores de 40 bits.
El M otor DSP tiene la capacidad de realizar algunas operaciones (ADD, SUB y NEG) directa
mente sobre el contenido de los dos Acumuladores A y B, sin necesidad de ms operandos.
EL CAMINO DE DATOS
MPX 3
53
M PX4
MPX 6
]_
SUMAOOR
MPX 2
REGISTRO
DESPLAZAMIENTO
RELLENO
CEROS
MULTIPLICADOR
17 x 1 7 BITS
CONVERSION
16 A 17 BITS
Figura 4.5.
El multiplicador rpido de 17 x 17 bits es compartido por las instrucciones MCU y las DSP, siendo
posible realizar multiplicaciones con signo y sin signo y generar resultados con nmeros enteros de
32 bits y con fraccinales tipo 1.31 (Q.31).
54
El multiplicador recibe datos de 16 bits y los convierte en 17 bits. Si los operandos tienen signo,
la conversin se efecta extendiendo el bit de signo, y si no tienen signo, se extiende el valor con
ceros. La conversin es transparente para el usuario y permite soportar multiplicaciones con y sin
signo. (Figura 4.6.)
O
Figura 4.6.
El bit IF del registro CORCON establece si la operacin del multiplicador ser de tipo entero o
fraccional en las instrucciones DSP: MAC, MSC, MPY, MPY.N, ED y EDAC.
Sin embargo, el bit IF no interviene en las instrucciones MCU que usan el multiplicador (MUL,
MUL.SS, M UL.UU, MUL.SU y MUL.US), las cuales siempre se realizan en modo entero.
En las operaciones en modo fraccional el multiplicador escala el resultado un bit a la izquierda.
El bit de menos peso del resultado siempre es cero. Tras un Reset las instrucciones DSP que usan el
multiplicador se realizan en modo fraccional.
Figura 4.7.
Valores que representan los bits del nmero entero 4001 en hexadecimal.
EL CAMINO DE DATOS
55
RESULTADO
4001 Hex. = 2 U + 2o = 16384 + /= 16385
EJEMPLO 2
Q u valor representa el nmero entero de 16 bits C002 H ex? (Figura 4.8.)
j o
1
5
Figura 4.8.
o13
2 14
'l;2
i 0
. 1 ...
2 11
2~
28
2g
25
24
23
22
21
2 10
2o
Valores que representan los bits del nmero entero C002 Hex.
RESULTADO
C W 2 Hex. = - 2 '5 + 214 + 2 ' = -32768 + 16384 + 2 = -16382
En los nmeros fraccinales se representa la parte fraccionaria en complemento a 2. El bit de ms
reso es el de signo y se supone implcitamente que detrs del bit de signo est situado el punto de
b parte fraccionaria. E l rango de un nmero fraccional de N bits en complemento a 2 est comrrendido entre -1 .0 y (1 - 2 ,_N).
EJEMPLO 3
Qu valor representa el nmero fraccional de 16 bits 4001 Hex? (Figura 4.9.)
m:
-2o.
Figura 4.9.
0 j O
2 '1 2 '2
2 3 2a
Valor que representan los bits correspondientes al nmero fraccional 4001 Hex.
RESULTADO
-001 Hex. = 2-' + 2~'5 = 0,5 + 0,000030518 = 0,500030518
EJEMPLO 4
fi w
Qu valor representa el nmero fraccional de 16 bits C002 Hex? (Figura 4.10.) ' ,
::
-2o. 2 1 2'2 23
Figura 4.10.
O
2*4
2*5
2 'e
0
2
\y
0 :0
2
3
o-9
2 'y
o-11 2"'^
^-12 2"1J
0 -13 o-14
2o-10
'1U 2"11
2",/} 2o-15
Valor que representan los bits del nmero fraccional C002 Hex
RESULTADO
C002 Hex. = -2 + 2 ' + 2 '14 = - 1 + 0,5 + 0,000061035 = -0,499938965
88L! TPf-
56
En la tabla de la Figura 4 .11 se ofrecen los rangos en modo entero y fraccional para nmeros de
16, 32 y 40 bits.
TAM A O
16
32
40
Figura 4.11.
RA N G O
M O D O ENTERO
(-2n i a 2 n'- 1 )
RA N G O
M O D O FRA CCIO N A L
(-1.0 a 1 - 2 1N)
R ESO LU C I N
M O D O FRA C C IO N A L
3,052 x IO '5
FORMATO Q. 15
-2.147.483.648 HASTA
2.147.483.647
FORMATO Q.31
-549.755.813.888 HASTA
549.755.813.887
4,657 x 10"
Tabla con los rangos en modo entero y fraccional de nmeros de 16, 32 y 40 bits.
4.4.2. Acumuladores A y B
El M otor DSP dispone de dos Acumuladores de 40 bits denominados ACCA y ACCB, en donde
se guardan los resultados de las operaciones DSP que utilizan el m ultiplicador y que son MAC,
MSC, MPY, MPY.N, ED y EDAC. Cada Acumulador se divide en tres campos, como se muestra
en la Figura 4.12.
16.15.
,31.
ACCxU
Figura 4.12.
ACCrH
9
ACCxL
Cada Acum ulador de 40 bits se divide en tres campos, que se implementan en 3 regis
tros STR de la memoria de datos.
Para operaciones en modo fraccionario que utilizan los Acumuladores, el punto fraccional se si
ta a la derecha del bit 31.
4.4.3. Sumador/Restador de 40 bits
El M otor DSP dispone de un Sumador de operandos de 40 bits con capacidad de restar, que puede
realizar operaciones sobre los valores de los Acumuladores, as como con el valor que genera el
multiplicador extendido en signo. (Figura 4.13.)
El sumador puede opcionalmente negar uno de los operandos para implementar la resta como su
cede con las instrucciones MSC (M ultiplicar y Restar) y MPY.N (M ultiplicar y Negar).
Existen 6 sealizadores en el Registro de Estado (SR) que indican sobrepasamiento o saturacin
en las operaciones realizadas por el sumador de 40 bits. (Figura 4.14.)
57
MPX4
Figura 4.14. Situacin en el Registro de Estado de los 6 sealizadores del resultado de las operacio
nes del Sumador de 40 bits.
58
. ;
EL CAMINO DE DATOS
59
ANEXO
w Sy.
ta>viv.
Manipulacin
de datos en
el Motor DSP
El multiplicador del M otor DSP recibe dos operandos de 16 bits (Figura 4.5). Estos operandos pue
den ser de dos tipos:
a) Entero: Un valor entero de 16 bits, con o sin signo.
b) Fraccionario: Un valor fraccionario de 16 bits con formato 1.15 (tambin llamado
Q15), es decir, contiene un bit de signo y 15 bits fraccionarios.
Antes de ser multiplicados, los operandos son procesados para convertirlos a 17 bits, ya que es
to simplifica la multiplicacin MCU entre valores con signo y sin signo, y permite realizar correc
tamente la operacin (-1 .0 x -1.0). El resultado de la operacin puede ser un entero de 32 bits (con
o sin signo) o un valor fraccional con formato 1.31. En realidad, el multiplicador genera un resulta
do de 33 bits, porque si es de tipo entero aade un 0 a la derecha, y si es de tipo fraccionario queda
en formato 2.31, que luego puede transformarse al 1.31.
Posteriormente, el resultado deber ser extendido a 40 bits para poder ser tratado correctamente
en el resto de los elementos del Motor DSP.
Los datos que se introducen al Motor DSP son de 16 bits, luego internamente se transforman en
40 bits y se manipulan. Finalmente, los resultados que proporciona el Motor DSP son de 16 bits al
tener que ser transferidos por el bus X
EL CAMINO DE DATOS
61
Figura A.1.
2 5 0 + 10 =
255
1 0 -2 6 9
-4
-255
Ejemplos con aritmtica modular y con saturacin. Cuando de sobrepasan los lmites, la
aritmtica con saturacin corrige el resultado al valor absoluto mximo posible.
7FFFh
OOOOh
8000h
Figura A.2.
Los dsPIC soportan dos modos opcionales de saturacin que afectan a la salida del sumador de
40 bits :
a) Saturacin normal (1.31)
b) Sper Saturacin (9.31)
Para la seleccin del modo de saturacin se utilizan varios bits del registro CORCON. El bit SA
TA habilita y deshabilita la saturacin del acumulador A y el SATB habilita y deshabilita la satura
cin del acumulador B.
Una vez activada la saturacin, la seleccin del modo de saturacin se realiza a travs del bit
ACCSAT. Por defecto la saturacin siempre est deshabilitada.
Por otro lado, el bit SATDW habilita y deshabilita la saturacin en la escritura, la cual afecta a
la instruccin SAC, que almacena el Acumulador en la memoria de datos, y a la post-escritura de
los acumuladores.
Cuando la saturacin est deshabilitada no se altera el resultado del sumador de 40 bits y traba
ja en un rango de -2 5 6 a ~ +256.0. Si excede de este rango de valores, el resultado no se satura y
mantiene el valor aunque este sea incorrecto.
62
Para m anejar esta situacin se utiliza la condicin de overflow catastrfico, la cual se seali
za con un hit de flag en el registro TNTCON1, que puede gestionar una excepcin Mcith Error (Error
Aritmtico).
La saturacin normal soporta el formato de datos 1.31, el cual utiliza un bit de signo y 31 bits frac
cionarios para representar el valor. El rango que admite este formato est comprendido desde -1.0
hasta - 1.0.
Cuando la saturacin normal est habilitada, la salida del sumador est lim itada a un rango de
32 bits.
Este valor se almacena en ACCxH : ACCxL y su signo (situado en el bit 15 de ACCxH) se ex
tiende a todos los bits de ACCU. De este modo, si una operacin destruye el bit de signo, el suma
dor saturar el resultado al mximo valor negativo de 32 bits o al mximo valor positivo de 32 bits.
(Figura A.3.)
3-9
ACCxU
1111 1111
Figura A.3.
En este tipo de saturacin nunca se producir overflow, ya que se restringe el resultado a 32 bits
y los 8 bits restantes son para recoger la extensin de signo.
La sper saturacin soporta el formato de datos 9.31, empleando 9 bits para representar un valor en
tero con signo y 31 bits para la parte fraccionaria.
En este modo de saturacin la salida del sumador est limitada a un rango de 40 bits, cuyo valor
es almacenado en ACCxU : ACCxH : ACCxL y el bit de signo se guarda en el bit 7 de ACCxU, o
lo que es lo mismo en el bit 39 del acumulador.
Si una operacin destruye el bit de signo el sumador saturar el resultado con una de estas dos
opciones :
a) El mximo valor negativo de 40 bits.
b) El mximo valor positivo de 40 bits.
EL CAMINO DE DATOS
63
39
01111111
31
32
ACCxH
15
16
A C C xl
1111111111111111
39
ACCxU 32 31
1000 0000
Figura A.4.
ACCxH
ACCxL
16
15
La sper saturacin permite realizar operaciones que admitan un rango mayor ( 2 5 6 ) que la sa
turacin normal ( 1 ) aunque ambos procedimientos mantienen la precisin de la parte fraccionaria
con 31 bits.
Existe otro tipo de saturacin que no tiene nada que ver con las comentadas anteriormente, se trata
de la saturacin en la escritura del bus de datos X, que se origina cuando se almacena el Acumula
dor en una posicin de la memoria de datos mediante una instruccin SAC. El Acumulador tiene 40
bits y tanto el bus X por el que se transfiere, como la posicin de la memoria de datos son de 16 bits,
para lo cual slo se almacenan los 16 bits correspondientes al campo ACCxH.
La saturacin de escritura es accesible a travs del bit SATDW en el registro CORCON y se en
carga de proporcionar un dato limpio de 16 bits al bus de datos X buscando la mejor conversin
posible, partiendo del valor de 40 bits del Acumulador.
En esta saturacin no se modifica el valor del Acumulador, sino que se crea un nuevo valor de
16 bits a partir de l, para poderlo enviar por el bus X a una posicin de 16 bits en una instruccin
SAC, o bien, al registro W13 en las instrucciones DSP con post-escritura.
La saturacin de escritura es similar a la saturacin normal, pero slo se usan los 16 bits de
ACCxH, por lo que el rango de valores comprendo de 1.0 a ~ 1.0, pero con una precisin de 15 bits
(1.15 en vez de 1.31). El valor mximo ser 0x7FFF ( ~ 1.0) y el mnimo 0x8000 (-1.0).
A.3. REDONDEO
Cuando se ejecuta la instruccin SAC.R o se lleva a cabo la post-escritura del acumulador, es nece
sario realizar una operacin de redondeo para convertir el dato extrado del acumulador de 40 bits
a 16 bits y poder ser transportado por el bus de datos X. Lo que se obtiene como valor de 16 bits es
ACCxH que se redondea segn el valor de ACCxL, que slo se utiliza para realizar dicha funcin
de redondeo.
El redondeo, como la saturacin de escritura no modifican el valor contenido en el acumulador,
sino que crea uno nuevo de 16 bits a partir de aqul que corresponde con el valor de ACCxH.
Para el redondeo existen dos modos de funcionamiento que se selecciona mediante el bit RND
del registro CORCON.
64
CAPTULO
Modelo del
procesador para
el programador
D IR E C C I N
DESCRIPCIN
VVO - VV15
SPLIM
ACCAL - ACCAH - ACCAU
aCCBL - ACCBH - ACCBU
PCX - PCH
0000-001 c
0020
0022 - 0024 - 0026
0028 - 002A - 002C
002 E - 0030
0032
0034
DCOUNT
0036
0038
DOSTARTL - DOSTARTH
DOENDI - DOENDH
003A - 003C
003 E - 0040
SR
CORCON
0042
0044
MDCON
0046
0048
004A
REGISTRO DE ESTADO
REGISTRO DE CONFIGURACIN DEL NCLEO
REGISTRO CONTROL DIRECCIONAMIENTO MODULAR X
TBLPAG
PSVPAG
RCOUNT
XMODSRT
XMODEND
YMODSRT
YMODEN'D
XBRFV
004C
004E
DI5ICNT
0050
0052
0054 - 007E
Figura 5.1.
Tabla que recoge el nombre, la direccin y la descripcin de los registros que conforman
el modelo de la CPU para el programador de los DSC. Cada registro de 16 bits ocupa dos
direcciones del espacio de datos, cada una con un byte de datos.
65
66
En la Figura 5.2 se ofrece un esquema interno con la nomenclatura de los principales registros
usados por el programador.
REGISTROS SOMBRA PARA
PUSH.S Y POP.S
R E G IS T R O S S O M B R A * D O '
R E G IS T R O S R E S U LT A O O
D IV Y M U L
R E G IS T R O S DE
O P E R A N D O S M AC
S - R E G IS T R O S DE T R A B A JO
R E G IS T R O S DE
D IR E C C IO N E S DE
O P ER A N D O S M AC
R E G IS T R O LIM IT E D E L P U N T E R O PILA
ACCAU
v -v .w
ACCAL
ACCAH
- ....
......
ACCBH
ACCBU
AC C B L
%
TLBPAG
PC
C O N T A O O R DE P R O G R A M A
D IR E C C IO N E S IN S T R U C C IO N E S D E T A B L A
DOSTART
D IR E C C IO N E S V IS IB IL ID A D E S P A C IO D E P R O G R A M A
15
D IR E C C IO N IN IC IO BU C LE DO
O
DOEND
D IR E C C IO N F IN A L B U C LE DO
CO R C O N
C O N T A D O R DE B U C LE S DO
Figura 5.2.
R E G IS T R O C O N F IG U R A C IO N N U C LE O
Representacin grfica de los principales registros del modelo de la CPU que utiliza el
programador de aplicaciones en lenguaje Ensamblador.
67
^ operatividad del Camino de Datos est basada en el banco de registros compuesto por 16 que tien una longitud de 16 bits cada uno y se denominan W 0-W 15. Dichos registros soportan muchas
-r:>iones en la ejecucin de las instrucciones del repertorio.
Las instrucciones ms comunes utilizan estos registros de trabajo para contener datos y direc; nes de memoria. Por ejemplo, la instruccin MOV W3, [W6J mueve el contenido del registro W3
i la posicin de memoria cuya direccin est depositada en W6. El operando fuente es W3 mientras
t3De el destino est direccionado por W6. Otra instruccin que emplea los registros de trabajo para
a n e j a r operandos es ADD [W2], W4, W6, en la que un operando fuente es el contenido de la di
seccin apuntada por W 2 y el otro el valor de W4. El resultado de la suma de los dos operandos se
deposita en W6 que acta como operando destino.
Existe un tipo de instrucciones que utiliza el registro WO como registro de trabajo implcito cuanic se le referencia como WREG. Son instrucciones similares a las que hay en el repertorio MCU en
fas que se hace una referencia implcita a un registro de trabajo que actuaba como Acumulador en
.i ALU. Por ejemplo, la instruccin ADD 0x3F00, W REG suma el contenido de WT0 con el alma
cenado en la direccin 0x3F00 y deposita el resultado en WO.
Como se desprende de la tabla de la Figura 5.1 los registros W0-W15 estn mapeados en la rne- : ria de datos entre las direcciones 0000-001E y se pueden manejar como posiciones, de forma que si
desea mover el contenido del registro W2 a W4, se puede usar la instruccin MOV 0x0002,0x0004.
Al ocupar cada registro W un par de posiciones de memoria de tamao byte se manipulan dalos tipo palabra. El resultado de una operacin con datos de tamao byte afecta al byte de menos pedel registro de trabajo.
Despus d realizar un Reset todos los registros de trabajo W toman el valor cero, excepto VZ15.
Los registros W0-W3 se utilizan para guardar el resultado de las instrucciones MUL y DIV. W0
ruarda el cociente de una dividisin y W 1 el resto, mientras que W 3:W2 guardan el resultado de la
multiplicacin. Adems actan como registros sombra para las instrucciones PUSH.S y POP.S.
Los registros W4-W7 se dedican a contener los operandos de las instrucciones MAC, mientras que
'.YS-Wll se emplean habitualmente para contener las direcciones de los operandos de las instruc
ciones tipo MAC. W12 acta como desplazamiento u offset y permite incrementar o decrementar el valor al que modifica.
W13 en las instrucciones MCU, se puede usar como registro de trabajo. En algunas instruccio
nes MAC se emplea como registro de post-escritura, que consiste en la post-escritura del acumula
dor inactivo o no usado.W 14 trabaja como puntero del M arco de la Pila, que es una zona de la mis
ma que es manejada por una subrutina. W15 es el puntero de la Pila y est relacionado con el
registro SPLM que guarda el lmite que puede alcanzar W 15.
5 .3 . REGISTROS SOMBRA
Algunos registros de la Figura 5.2 tienen asociados unos registros llamados sombra, que se usan
temporalmente para contener informacin que se enva o se recibe cuando ocurre algn suceso de
terminado. Ningn registro sombra puede ser accedido directamente.
68
El contenido de los registros sombra se transfiere cuando se ejecutan las siguientes instruc
ciones:
1) Las instrucciones PUSH.S y POP.S afectan a los registros sombra WO, W 1, W2, W3
y SR (slo los bits DC, N, OV, Z y C). En el caso de PUSH.S el contenido de dichos
registros se carga en la Cima de la Pila, mientras que con POP.S los valores de la Ci
ma de la Pila se depositan en dichos registros. De esta manera se pueden salvar y res
taurar cmodamente los contenidos de estos registros en las llamadas a subrutina y en
las rutinas de interrupcin.
2) La instruccin DO afecta a los registros sombra DOSTART, DOEND y DCOUNT que
los carga con los valores de la Cima de la Pila o deposita sus contenidos en la Cima de
la Pila. (Figura 5.3.)
5-----*.... .................
DCOUNT
1
22.
DOSTART
DOEND
Figura 5.3.
69
En la Figura 5.4 se supone que W15 est cargado con el valor 0x0800 y se ejecuta la instruccin
CALL para producir una llamada a subrutina. Para salvar la direccin de retorno al programa prin
cipal se salva en la Cima de la Pila el valor del PC<22:0> que al tener 23 bits ocupa dos posiciones
de memoria de 16 bits. Realizada la carga del PC, W 15 se incrementa automticamente en 4, que
son los bytes utilizados para guardar al PC. Obsrvese en la figura que el byte de ms peso de la paabra donde se almacena PC<22:16> se carga con ceros.
MEMORIA
DE DATOS
RAM
15
D IR E C C IO N E S
C R E C IE N T E S
87
PC <15:0>
: ::
Figura 5.4.
La instruccin PUSH escribe en la Cima de la Pila el operando que conlleva. Por ejemplo,
PUSH W2 .escribe en la Pila los dos bytes del registro W 2 y despus auto-incrementa W 15 en 2 uni:ades. Con la instruccin POP W2 se coge la palabra que apunta en la Pila W 15 y se deposita en
W2, decrementando en 2 unidades el valor de W15 automticamente.
La instruccin PUSH W2 es equivalente a M OV W 2, [W15++], y POP W2 produce el mismo
resultado que MOV [-W 15J, W2.
El registro SPLIM guarda el lmite de la Pila o el valor mximo que puede alcanzar el puntero
lie la Pila. El bit de menos peso vale cero para mantener los datos alineados. Tras el Reset SPLIM
carga con ceros impidiendo la deteccin del desbordamiento de la Pila hasta que el programador
no cargue a SPLIM con un valor vlido.
Un M arco de Pila es una porcin de la mism a que se destina a una subrutina concreta. W14
contiene la direccin del M arco y se inicializa y se abandona dicha funcin con las instrucciones
LNK y ULNK, respectivam ente. Cuando no se usa W 14 como puntero del M arco de Pila puede
emplearse como otro registro de trabajo.
Los dos bytes que componen el Registro de Estado (SR) sirven para informar principalmente del eslado y de las condiciones especiales que se han producido en el resultado de la operacin aritmti
co-lgica que se acaba de realizar, bien en la seccin MCU o en la DSP.
El byte de menos peso se denomina SRL y se corresponde con la seccin MCU. Guarda la inormacin de los siguientes sealizadores:
70
: i i f i
ESTADO DSP
Figura 5.5.
Los bits del Registro de Estado informan principalmente sobre el resultado obtenido en
las instrucciones aritmticas de la seccin M CU y la DSP.
El byte de ms peso, SRH, soporta los bits que detectan condiciones especiales del resultado pro
ducido por las instrucciones DSP desarrolladas con el Sumador de 40 bits y que depositan el resul
tado en uno de los Acumuladores A y B.
5.6.
En este registro reside el bit IPL3, que concatenado con los 1PL<2:0> de SR conforman el cdigo
que determina el nivel de privilegio de interrupcin de la CPU. Otros bits se destinan al control de
la operacin de multiplicacin DSP, del bucle DO, del redondeo y de algunos otros aspectos rele
vantes de la CPU. Como se muestra en la Figura 5.6 los tres bits de ms peso de CORCON no es
tn implementados y siempre se leen como ceros.
REGISTRO DE CONTROL DEL NCLEO (CORCON)
i?
i s a *
Figura 5.6.
...........-
Gs
EBT
DL2
-------------------
bu
;PL0
--------SATA
cl
'F J
psv-_
RND
*!'
*1
71
5.7.
....................................
..... ...............................................
US: con este bit se controla que la multiplicacin DSP se realice sin signo (1) o con signo (0).
EDT: cuando este bit vale 1la ejecucin del bucle DO finaliza al completarse la iteracin en curso.
DL<2:0>: estos tres bits indican el nivel de anidamiento del bucle DO (0-7).
SATA: permiso/prohibicin para la saturacin de ACCA (1/0).
SATB: permiso/prohibicin para la saturacin de ACCB (1/0).
SATDW: activacin/desactivacin de saturacin en la escritura en ei espacio de datos (1/0).
ACCSAT: bit que selecciona el modo de saturacin del Acumulador (1: normal y 0: supersaturacin).
IPL3: bit 3 que sirve para determinar el nivel de prioridad efe interrupcin, junto con IPL<2:0> del
registro de estado SR.
PSV: permiso/prohibicin de Visibilidad del Espacio de Programa (PSV) del espacio de datos (1/0).
RND: bit para la seleccin del modo de redondeo (1: redondeo convencional y 0: redondeo con
vergente).
IF: bit para la seleccin del formato de los operandos de multiplicacin (1: operandos en modo en
tero y 0: operandos en modo fraccionario).
Para completar una visin general del conjunto de registros importantes que intervienen en la pro
gramacin de los dispositivos DSC, se describen de forma resumida los siguientes.
TBLPAG: Registro de Pgina para las instrucciones de Tabla
En este registro se guardan los 8 bits de ms peso de la direccin de la memoria de programa du
rante las operaciones de lectura y escritura de instrucciones de Tabla, que sirven para transferir
datos entre el espacio de memoria y el de datos.
PSVPAG: Registro de Pgina para Visibilidad del Espacio de Programa
La Visibilidad del Espacio de Programa permite al usuario mapear una seccin de 32 KB del
espacio de memoria de datos en el espacio de la memoria de programa. Esta propiedad permite
el acceso transparente de datos constantes a travs de las instrucciones que operan en la memo
ria de datos. El valor contenido en PSVPAG selecciona el trozo de 32 KB del espacio de la me
moria de programa sobre el que se mapea el espacio de datos.
MODCON: Registro de Control del Direccionamiento Modular
Se empica para activar y configurar el modo de direccionamiento modular o circular.
XMODSRT, XMODEND: Registros de inicio y Fin para el Direccionamiento Modular
El registro XMODSRT contiene la direccin inicial y el XMODEND la direccin final de los
buffers implementados en el espacio de memoria X para el direccionamiento modular.
YMODSRT, YMODEND: Registros de Inicio y Fin para el Direccionamiento Modular
Igual misin que los anteriores, pero referidos al espacio de memoria Y.
XBREV: Registro para el Direccionamiento por Inversin de Acarreo o bit-reverse
Contiene el m odificador, que es dependiente del tamao del buffer que se utiliza en el direccionamiento por acarreo invertido o bit-reverse .
DISICNT: Registro Contador para Desactivacin de Interrupciones
Se utiliza con la instruccin D1S1 para desactivar las interrupciones de prioridad 1 a 6 durante
el nmero de ciclos indicado por este registro.
& sns$
CAPITULO
m
La memoria
de datos
memoria de datos RAM de los DSC se divide en dos espacios, llamados X e Y, que son consi'os como independientes por algunas instrucciones DSP, mientras que las instrucciones MCU
yan toda la memoria como un espacio unificado y lineal de direcciones. Cada espacio dispone
sus propios buses de datos y de direcciones, ambos de 16 bits, lo que supone que el rango de dimamiento alcanza 64 KB o 32 K palabras de 16 bits cada una que se hallan alineadas en di
mes pares.
Como se refleja en la Figura 6.1 las 32 K palabras que abarca el espacio de la memoria de datos
h id e n en 5 zonas:
En la Figura 6.1 se observa que tiene una memoria SRAM de 8 KB, pero en el caso de los ds5F existen memorias de distintos tamaos: 8 KB, 16 KB y 30 KB.
Te acuerdo con el espacio de memoria de la Figura 6.1 de 8 KB de SRAM, los espacios X e Y
n de 4 KB cada uno.
Les 8 KB inferiores de la memoria de datos (OxOOO-Ox 1FFF) se denominan M emoria Cercana
se caracteriza porque sus posiciones pueden ser accedidas utilizando nicamente los 13 bits del
de direccin absoluta que est reservado en el formato de las instrucciones que trabajan con
onamiento directo.
Les espacios X e Y tienen opciones de acceso diferentes segn se trate de instrucciones MCU o
y segn se realice una lectura o una escritura. En todas las operaciones de escritura de datos,
73
74
0x0000
W m
SFR <
ESPACIO SFR
(2KB)
0X07FE
0x0800
MEMORIA
>- CERCANA
(8KB)
ESPACIO DE DATOS X
(4KB)
SSSfiSfl
i?
ESPACIO SRAM )
8KB
,
ESPACIO DE DATOS Y
......................(4KB)
0x17FE
0x1800
0x1 FFE
0x27FE
0x2800
NO DISPONIBLE
.
' :
.
---- ----------- -------------------IV..V.V/.'vX'IV/ -V/
OPCIONALMENTE
MAPEABLE EN
LA MEMORIA '
DE PROGRAMA
/.yV-V/.,.,-,-.
0x8000
.v.-
gm m m . 8 1
ESPACIO DE DATOS X
NO IMPLEMENTADO
(32 KB)
S^vM^*!
'
.
P_____
l l | \_____
l f
Figura 6.1.
OxFFFE
Estructura interna de la memoria de datos para un modelo dsPIC30F con una capaci
dad de memoria SRAM de 8 KB disponibles para el usuario (modelos dsPIC30F6010 y
dsPIC30F6014).
independientemente del tipo de instruccin que se trate, se accede a la memoria de datos como si los
espacios X e Y conformasen un nico espacio lineal de direcciones. De la misma manera se con
templa el espacio de datos en las operaciones de lectura por parte de las instrucciones MCU.
En la lectura de datos de las instrucciones DSP es posible acceder de forma independiente y si
multnea a los espacios X e Y. En esta situacin los registros W8 y W9 actan como punteros de di
recciones del espacio X, y W10 y W 11 como punteros de direcciones de las posiciones a leer en el
espacio Y. La Figura 6.2 muestra lo explicado de forma esquemtica.
LA MEMORIA DE DATOS
BUS DE
DATOS Y
75
BLIS DE
DATOS X
SRAM
SRAM
DATOS Y i DATOS X
RAGU X
I
BUS DE
DIRECCIONES
BUSES DE
DIRECCIONESj
X
-p
(LECTURA X)
WAGU X
AX) I
(ESCRITURA X)
AGUXI
-------
ni
DATOS MAPEADOS
EN MEMORIA
PROGRAMA
Figura 6.2.
Las direcciones de acceso a los espacios X e Y son generadas por las Unidades de Generacin de
Direcciones AGUX y AGUY, respectivamente. La AGUX consta de una seccin destinada a la lec
tura de datos. RAGUX, y otra para la escritura, WAGUX. Para aumentar el rendimiento del proce
sador RAGUX com ienza el clculo de la direccin efectiva de un operando en el ciclo anterior al de
ht instruccin al que corresponde, de manera que cuando se inicia la ejecucin ya es capaz de colo
r ir en el bus de direcciones de lectura del espacio X la direccin de la posicin a acceder. Por el con
trario, WAGUX comienza el clculo de la direccin de la posicin a escribir al empezar la ejecucin
de la instruccin, pero ya la tiene disponible al llegar la fase de escritura.
La AGUY funciona igual que RAGUX adelantando el clculo de la direccin, pero slo funcio
na en las operaciones de lectura, no siendo posible realizar escrituras en el espacio Y.
Los datos se colocan en la memoria, alineados de form a que el byte de menos peso se sita en la
direccin par y el de menos peso en la impar superior.
Con carcter opcional el programador puede mapear los 32 KB superiores del espacio de la memo
r a de datos en una pgina del espacio de la memoria de programa que consta de 16 K palabras de
14 bits cada una. A este modo de trabajo se le llama Visibilidad de Espacio de Programa (PSV) y
re m ite un acceso transparente de constantes desde el espacio de datos X sin necesidad de emplear
76
instrucciones especiales como las de Tabla. De los 24 bits de cada posicin del espacio de la me
moria de programa slo son vlidos los 16 de menos peso.
Para obtener la direccin efectiva del PSV en la memoria de programa se necesitan 23 bits. Los
15 bits de menos peso de dicha direccin corresponden a los 15 bits de menos peso del registro W
que contiene la direccin efectiva del espacio de la memoria de datos. Los 8 que faltan para com
pletar la direccin efectiva PSV se toman del registro PSVPAG. (Figura 6.3.)
wn
PSVPAG
:7
22
15
. . '1 4
..0
............ ,
Figura 6.3.
Formacin de la direccin efectiva PSV a partir de os 8 bits del registro PSVPAG y los 15 de
menos peso del registro Wn que contiene la direccin del espacio de la memoria de datos.
Cualquier registro W, excepto W 15, puede actuar como puntero del buffer y los 4 registros an
teriormente m encionados establecen las direcciones inicial y final. En el direccionam iento ascen
dente el puntero se va incrementando desde la posicin inicial del buffer hasta la final. Cuando el
puntero se decrcm enta se recorre el buffer desde la posicin final a la inicial. El direccionam ien
to modular puede funcionar en el espacio de la memoria de programa y en el de datos, tanto en la
zona X com o en la Y. En el espacio X el cdigo binario del registro W que acta como puntero del
LA MEMORIA DE DATOS
BUFFER
INCREMENTAL
77
BUFFER
DECREMENTAL
BUFFER
BIDIRECCIONAL
Figura 6.4.
buffer se carga en los 4 bits de menos peso del registro MODCON<3:()>. El cdigo binario del re
gistro W que funciona como puntero en el espacio Y se carga en los bits M ODCON<7:4>. La Fi
gura 6.5 muestra de form a esquemtica la estructura del registro MODCON.
Byte Alto
RM/-0
R/W-0
U-0
U-0
R/W-0
R/W-0
R/W-0
R/W-0
BW M <3:0>
Bit 8
Bit 15
Byte Bajo
Figura 6.5.
78
Direccin
x1 1 0 0
MOV #0x1100, W0
MOV W 0. XMODSRT
MOV #0x1163, W0
MOV W0, XMODEND
MOV #0x8001 , WO
MOVWO, MODCON
MOV #0x0000, WO
MOV #0x1100, W1
DO #49 , FILL
FILL:
MOVWO, [W1++]
0x1163
Dir. Comienzo = 0x1100
Dir. Final = 0x1163
Longitud = 50 palabras
Figura 6.6.
Direccin
x 1 1 EO
'
I
I
!
MOV #0x11E0, WO
MOV WO . XMODSRT
MOV #0x11FF , WO
MOVWO, XMODEND
MOV #0x8001 , WO
MOV WO , MODCON
MOV #0x000F , WO
MOV #0x11 FE , W1
DO #15, FILL
MOV WO, [W 1-]
FILL:
DEC WO. WO
0x11FF
Dir. Comienzo = 0x11 EO
Dir. Final = 0x11 FF
Longitud = 16 palabras
Figura 6.7.
LA MEMORIA DE DATOS
79
Las direcciones de la tabla de datos iniciales sobre la que se aplica el algoritmo FFT (Transforma
da Rpida de Fourier) se reordenan en una tabla de resultados de acuerdo con unas reglas que so
portan en hardware los DSC y que se controla con el direccionamiento por inversin de acarreo o
bit reverse. Se trata de un direccionamiento indirecto especial que slo se realiza a travs del ge
nerador de direcciones WAGUX para instrucciones de tamao palabra y con la colaboracin de los
registros especficos XBREV y MODC.ON.
Lo que hace el procedimiento de bit-reverse es crear un ordenamiento que facilitar el poste
rior clculo de la FFT, y lo consigue intercambiando los bits del puntero de direcciones entorno al
punto central de dicha direccin, con lo que el resultado es la imagen espejo de dicha direccin.
Se tomarn en cuenta a la hora de realizar el intercambio tantos bits como sean significativos segn
el tamao del buffer, es decir, si el buffer tiene un tamao de 4 bytes, se rotarn los 2 ltimos bits,
si tiene 8 bytes, se rotarn, los 3 ltimos bytes, y as sucesivamente.
EJEMPLO
Se dispone de un buffer de 8 bytes, siendo la unidad de manejo del buffer el byte, y se desea aplicar
el direccionamiento p o r ubit reverse . A l ser el tamao del buffer de 8 bytes, se cogen los 3 ltimos
bits de la direccin, procediendo a rotar estos 3 bits en torno al bit I (el central) creando el espe
j o de la direccin original, como se muestra en la Figura 6.8. Aplicado dicho mtodo, el conteni
do de las direcciones del buffer queda dispuesto como se muestra en la Figura 6.9.
Figura 6.8.
ORDENAMIENTO
SECUENCIAL
Figura 6.9.
BUFFER
BUFFER
ORDENAMIENTO POR
INVERSIN DE ACARREO
0X0100
0X0100
0X0101
0X0104
0X0102
0X0102
0X0103
0X0104
0X0106
0X0101
0X0105
0X0105
0X0106
0X0103
0X0107
0X0107
80
BWM<0:3>
XMODEN YMODEN
YWM<0:3>
XWM<0:3>
Figura 6.10. El registro M O D C O N con sus bits BW M <3:0> resaltados, los cuales indican qu registro
W ser el puntero de las tablas en la operacin de "b it reverse".
Si se toma al registro W1 como puntero para el direccionamiento por inversin de acarreo hay
que tener en cuenta que el valor inicial que corresponde a la direccin de lectura del dato se trans
forma en otro valor que corresponde con la direccin donde se escribe el resultado, pero siempre
dentro de las direcciones lmite de la tabla. Para W 1 el cdigo BWM<3:0> = 0001.
2a. Se activa el direccionamiento por inversin de acarreo poniendo a 1 el bit 15 del registro
XBREV (XBREV<15> = BREN = 1). (Figura 6.11.)
XBREV
MODIFICADOR (XB)
Figura 6.11. Estructura del registro XBREV con su b it BREN resaltado, que permite o no la operacin
de "b it reverse".
3a. Se establece el valor del m odificador que acta sobre el valor del registro puntero fuente
usando los 15 bits de menos peso del registro XBREV (XBREV<14:0>).
Los valores del modificador que se carga en XBREV<14:0> dependen del tamao de la tabla o
buffer de datos sobre el que se aplica el algoritmo FFT y se presentan en la tabla de la Figura 6 .12.
Figura 6.12.
T A M A O BUFFER (PALABRAS)
VALOR DEL M O D IF IC A D O R XB
32768
16384
8192
4096
2048
1024
512
256
128
64
32
16
8
4
2
0x4000
0x2000
0x1000
0x0800
0x0400
0x0200
0x0100
0x0080
0x0040
0x0020
0x0010
0x0008
0x0004
0x0002
0x0001
Valor del modificador XB que se carga en XBREV<14:()> y que depende del tamao del
buffer de datos de entrada medido en palabras.
LA MEMORIA DE DATOS
81
Para transformar el valor inicial del registro indirecto W segn el direccionamiento por inver
sin de acarreo, el hardware auxiliar lo modifica sumando al mismo un valor. Este valor ser el del
modificador XB en caso de que el tamao de los elementos sea de byte, y ser XB multiplicado por
2 en caso de que los elementos que se manejen sean de tamao word (2 bytes). Sin embargo, dicha
suma es especial porque se efecta de izquierda a derecha y si se genera acarreo se traslada hacia
la derecha, o sea, al revs de como se hace normalmente. Por eso se ha denominado a este direc
cionamiento de inversin de acarreo.
Se propone un ejemplo de aplicacin para comprender la obtencin de la direccin final que pa
sa a contener el registro Wn cuando se utiliza el direccionamiento bit reverse.
EJEMPLO
Se dispone de un buffer de datos de 16 palabras a las que se direcciona indirectamente con el re
gistro W2 (BWM<3:0> = 0010). El modificador XB segn la tabla de la Figura 6.13 vale 0x0008
v se comienza suponiendo que W2 contiene la direccin 0x000 que apunta a la palabra WO. El bit
de menos peso de W2 siempre vale 0 para apuntar a datos de tamao palabra.
La modificacin del valor inicial de W2 se logra sumando en direccin inversa el valor del m o
dificador XB multiplicado p o r 2, y de form a que si se produce acarreo se traslada a la derecha, o
sea, al revs que cuando se suma normalmente.
Para que el valor 0x0008 no afecte al bit de menos peso se ha desplazado un bit a la izquierda
que es lo mismo que multiplicar p o r 2. En la Figura 6.13 se presenta una secuencia de transfor
maciones del valor de W2 al sumarle en sentido inverso el valor del modificador y trasladando el
acarreo cuando se produce hacia la derecha.
0 0 0 0
0000
00 0 0
0 0 0 0
0 0 00
0 000
000 0
0 00 0
0 00 0
0 0 0 1
0 0 0 0
W2 APUNTA LA PALABRA 8
000 0
1000
W2 APUNTA LA PALABRA 4
0 000
W2 APUNTA LA PALABRA 0
SE LE SUMA XBx2 PARA QUE LSB = 0
->
+
0000
0 000
0 0 0 f
0000
1 000
SE LE SUMA XBx2
W2 APUNTA LA PALABRA 12
0 00 0
0 00 0
0 100
W2 APUNTA LA PALABRA 2
0 0 0 0
+
0 0 0 0
00 00
0 0 00
0 0 00
0 0 0 1
0 100
SE LE SUMA XBx2
W2 APUNTA LA PALABRA 10
Figura 6.13. Secuencia de transformaciones del contenido del registro W2 al aplicarle el direcciona
miento p o r inversin de acarreo. Aprciese que la suma del modificador se hace de for
ma inversa y que cuando hay acarreo se traslada hacia la derecha.
82
Del ejemplo estudiado se desprende que la misin del modificador XB es determinar el lugar
desde donde comienza a transformarse la direccin. En este caso los bits que se transforman en la
direccin destino son W2<5:1>. El bit de menos peso siempre vale 0 y el bit 5 es donde comienza
el intercambio. (Figura 6.14.)
DIRECCIN INICIAL
W2
XB<14:0>=0x0008
LOS BITS 1-4 DE LA
DIRECCIN SE
INTERCAMBIAN
W2
Figura 6.14. El valor del m odificador XB<14:0> determina el bit donde comienza a transformarse
la direccin. En el ejemplo propuesto los 4 bits que cambian de lugar en la direccin
d el puntero destino son W2<4:1>. El b it de menos peso siempre vale 0, p o r lo que en
realidad en el clculo de la siguiente direccin se suma XBx2 en sentido inverso y con
inversin de acarreo.
CAPITULO
La memoria
de programa
M . ESTRUCTURA Y DISTRIBUCI N
1o) Directamente a travs de los 23 bits del Contador de Programa (PC). As se accede a la siguien
te instruccin a ejecutar.
' 2 :) Mediante las instrucciones especiales de lectura de Tabla (TBLRD) y escritura de Tabla (TBLWT).
Se accede a datos.
3) Mapeando un segmento de 32 KB de la memoria de datos en el espacio de direcciones de la me
moria de programa. Se accede a datos.
83
84
"RESETRESET-
INSTR U C C I N GOTO
DIR EC C I N DESTINO
T A 8 L A DE VECTO RES DE
INTERRUPCIN
RESERVADO
ESPACIO
DE
MEMORIA
DEL
USUARIO
(2 M x24)
000300
000002
000004
00007E
000080
000082
00C084
0000FE
000100
017FFE
018000
R ESERVADO
in -SI
7 FEFFE
7FF000
800000
R ESERVADO
ESPACIO
DE MEMORIA DE
CONFIGURACIN
(2 M x24)
8005BE
8005C0
8005FE
800600
RESERVADO
REG ISTRO S DE CO NFIGURACI N
DEL DISPO SITIVO
F7FFEE
F 80000
F800CE
F 80010
R ESERVADO
DEVID
Figura 7.1.
FEFFFE
FFOOOO
FFFFFE
En bastantes aplicaciones es muy interesante poder guardar en la memoria de program a datos que
posteriorm ente pueden ser ledos. Adems de am pliar la capacidad de almacenamiento de la m e
moria RAM, la informacin almacenada en la m em oria FLASH del programa se convierte en no
voltil.
LA MEMORIA DE PROGRAMA
SU
85
000 000
ESPACIO
MEMORIA
USUARIO
i LSB
PC
______________
22
23
~ ~ f~
INSTRUCCIN
24
<r*
IR
SIEMPRE 0
>7FF FFE
Figura 7.2.
Para poder utilizar el espacio del programa para leer y escribir datos los DSC disponen de dos
procedimientos:
.............
a) Utilizando ias instrucciones de Tabla que $e encargan de releer y escribir datos en la memoria de
programa.
b) Mapeando los 32 KB correspondientes a las direcciones ms altas del espacio de la memoria de
datos en una pgina de la memoria de programa de 16 K palabras de 24 bits. Este procedimiento
se denomina "Visibilidad del Espacio de Programa (PSV)".
Son 4 instrucciones del repertorio de los DSC que permiten leer o escribir la palabra baja o la al
ta de una Tabla. La Tabla est formada por posiciones de la memoria de programa que constan de
,: I bits, o sea, 4 bytes, de los cuales el de ms peso no es vlido y sus bits siempre se leen como
ceros. A este byte se llam a byte fantasma. (Figura 7.3.)
86
Ox 000200
0000 0000
Ox 000202
0000 0000
Ox 000204
oooooooo
Ox 000206
0000 0000
31
I
;
I
23
16 15
PALABRA ALTA
Figura 7.3.
TABLA
DE
DATOS
9
PALABRA BAJA
Las instrucciones de Tabla utilizan como direccin efectiva de 23 bits para una posicin de la
memoria de programa, la concatenacin de los 16 bits de un registro W con los 8 bits del registro
TBLPAG. El bit de menos peso del registro de trabajo siempre a 0. (Figura 7.4). El registro Wn con
tiene la direccin efectiva de la memoria de datos.
DIRECCIN EFECTIVA PARA TABLA
Figura 7.4.
Para direccionar una Tabla de datos en la memoria de programa se utiliza una direccin
de 24 bits formados por la concatenacin de un registro Wn y el registro TBLPAG. Como
el b it de menos peso de Wn siempre vale 0 las direcciones generadas siempre son pares.
Wn contiene la direccin efectiva de la memoria de datos.
Con TBLRDH y TBLWTH se lee y escribe la palabra alta de la tabla, siendo posible el acceso
al byte bajo y alto de cada palabra individualmente. El byte alto de la palabra alta no est implentado y se llama byte fantasma.
EJEMPLO
La instruccin TBLRDL W3,W4, lee los 16 bits de menos peso de lo posicin de lo memoria de pro
grama cuya direccin se form a con TBLPAG: W3 <14:0> y los deposita en W4.
LA MEMORIA DE PROGRAMA
87
1514
ricura 7.5. l.a direccin afectiva de 23 bits que apunta la posicin de la memoria de programa se for
ma con los 8 bits del registro PSVPAG concatenados con los 15 bits de menos peso de
Wn. En m odo PSV Wn>15> = 1 y el bit Wn>0> selecciona el byte a acceder en la pala
bra. Wn contiene la direccin efectiva de la memoria de datos.
En realidad el contenido de Wn es la direccin efectiva <EA> de la memoria de datos que se maen la memoria de programa.
IPLO
PSV= 1, la instruccin M O V 0xF052, W2 carga los 16 bits de menos peso de la direccin de la metria de programa form ada por la concatenacin PSVPAG: 7052 en el registro W2.
i grabar las memorias FLASH y EEPROM de los DSC hay dos mtodos:
88
2?
, , . Q
ESPACIO DE DATOS
0x0000
o
/i 6
DAT O
lE I D O
EL BYTE DE MS
PESO NO SE LEE--------------
EN MODO PSV
Figura 7.6.
Los 8 bits de ms peso de la posicin del espacio de programa no son vlidos por lo que
cada posicin de la memoria de datos ocupa una posicin en la memoria de programa.
La memoria EEPROM est mapeada dentro del espacio de la memoria de programa y segn el
modelo que se trate puede alcanzar hasta una capacidad de 2 K palabras de 2 bytes de contenido ca
da una en los dsPIC30F. Los dsPIC33F no disponen de memoria EEPROM.
Las tcnicas usadas para la grabacin de la EEPROM de datos y la FLASH son similares cuan
do se usa el mtodo RTSP. La nica diferencia destacable entre ambos tipos de memoria es la can
tidad de datos o informacin que puede ser grabado o ledo en cada ciclo de grabacin/borrado.
Esta tcnica la desarrolla el usuario mediante las instrucciones de Tabla que transfieren informacin
entre la memoria de datos y la de programa. Con las 4 instrucciones de Tabla comentadas anterior
mente se leen o escriben los 16 bits de la palabra baja o los bits <23:16> de la palabra alta. La di
reccin efectiva de la posicin de la memoria de programa se forma con los 8 bits del registro TBLPAG y los 16 de un registro Wn, que contiene la direccin efectiva de la memoria de datos.
EJEMPLO 1
Programa para depositar en los registros W2:W3 los 24 bits vlidos de la posicin de la memoria
de programa cuya direccin queda definida por tbIpage: tbloffset.
LA MEMORIA DE PROGRAMA
18
:
89
vIvv-T1
MOV
MOV
MOV
#tblpage, WO
WO, TBLPAG
tttbloffsct, WO
TBLRDH
TBLRDL
[WO], W2
TWOL W3
EJEMPLO 2
Cargar un valor de 24 bits en una posicin de la m em oria de program a cuya direccin
EA<23:0>es tblpage:tbloffset. El dato a grabar est form ado p or la palabra baja #\vord low v el
bxte alto #b \te hi.
MOV
MOV
MOV
tttblpage, WO
WO, TBLPAG
fttblojfset, WO
MOV
MOV
Jhvordjtw, W2
tbytejii. W3
TBLWTL
TBLWTH
W2y WO]
VV5. [W0++]
Tambin es posible grabar y leer la memoria de programa con datos de tamao byte dentro de
cada una de sus palabras.
Para la grabacin/borrado de mltiples datos de la FLASH y la EEPROM se utilizan tres regis
tros de control NVM (M emoria No Voltil).
'
90
O PER A CI N
TAM AO DATOS
V A LO R N VM CO M
BORRADO
0x4041
GRABACIN
4 INSTRUCCIONES
0x4001
1 PALABRA
0x4044
16 PALABRAS
0x4045
1 PALABRA
0x4004
16 PALABRAS
0x4005
1 REGISTRO CONFIGURACIN
0x4008
FLASH
BORRADO
EEPROM
GRABACIN
REGISTRO CONFIGURACIN
Figura 7.7.
ESCRITURA
Valores que hay que cargar en NVM CO M para llevar a cabo diversas operaciones con las
memorias FLASH y EEPROM.
BYTE ALTO
15
.v a -.v / a \ w a w
>> \W R
..w
WREN
.*
W RERR
BYTE BAJO
7
PROGOP < 7 :0 >
Figura 7.8.
Registro NVMCON.
El registro NVM ADR contiene los 16 bits de menos peso de la direccin efectiva (EA<15:0>)
de la posicin a grabar o borrar. Este registro lo manejan automticamente las instrucciones de Ta
bla y el usuario puede modificarlo cuando lo desee.
El registro NVADR se muestra en la Figura 7.9. NVADR <15:0>: indica la posicin de memo
ria en la que se quiere grabar o borrar.
o w o w M e nw o o i x c a w o o f j j o e a jooarac
BYTE BAJO
i .......... n i ............... ih h jih ih i
N V M A D R <7 :0 >
:
Figura 7.9.
Registro NVADR.
LA MEMORIA DE PROGRAMA
91
El registro NVMKJEY slo puede ser escrito y su misin es evitar grabaciones o borrados acci
dentales. Se le utiliza para guardar unos valores claves o de seguridad, que se indican a continuacin:
1 Hay que escribir el valor clave o de seguridad 0x55 en NVMKEY.
2. Hay que escribir a continuacin el valor OxAA en NVMKEY.
3. Ejecutar dos instrucciones NOP.
Las interrupciones debern ser deshabilitadas durante la secuencia anterior. Tras esta secuencia,
la escritura estar permitida al registro N VMCON durante un ciclo de instruccin.
Con la tcnica RTSP se pueden borrar 32 instrucciones o 96 bytes simultneamente y se pueden
grabar 4 instrucciones (12 bytes) a la vez.
EJEMPLO
El programa que se propone de carcter didctico muestra las instrucciones apropiadas para bo
rrar una lnea de 32 instrucciones (96 bytes) en la memoria de programa.
MOV
MOV
#0X 4041, WO
W0, NVM COM
M OV
M OV
MOV
M OV
m ip a g e , WO
WO, TBLPAG
m ioffseU WO
WO, NVM ADR
: imcializacin NVMCOM
; creacin del puntero a la
jila que se desea borrar
; inicializa TfLPAG
; in id a l iza NVMADR
bloqueo de las
;interrupciones durante las 5
;siguientes instrucciones
;
DISi
#5
MOV
M OV
MOV
M OV
BSI;:-
0x55 . WO
WO, N VM K EY
OXAA, WO
WO, NVM KEY
" ''
"
A^
; se escriben en el registro de
;seguridad NVM K EY tas
;claves 0x55 y OxAA
comienza borrado
sor
NOP
92
el reloj y otra para transferir los datos serie a grabar mediante el interfaz SP1 y un software integral
de tipo bootloader cuyas especificaciones tcnicas pueden encontrarse en las pginas del fabri
cante en Internet (www.microchip.com).
Este sistema de grabacin se utiliza con gran efectividad en todo tipo de microcontroladores y
dispositivos programables, adems de los DSC.
mWMi
CAPITULO
Interrupciones
y excepciones
8.1. IN T R O D U C C I N
Las interrupciones y las excepciones son causas que desvan el flujo de control en la ejecucin de
instrucciones. Las interrupciones son provocadas por acontecimientos externos, como los que ori
ginan los perifricos integrados o las seales aplicadas en determinadas patitas. Las excepciones se
producen automticamente cuando el procesador detecta algn error o anomala en la ejecucin de
una instruccin.
Los dsPIC30F atienden a 54 tipos de interrupcin y 8 tipos de excepcin bajo un sistema de con
trol de las" siguientes caractersticas:
94
para labores de em ulacin y depuracin ofreciendo un soporte para intercam biar la Tabla de Vec
tores entre el entorno de aplicacin del usuario y el de las m encionadas labores. Estos rasgos
tam bin se activan eligiendo en las aplicaciones para evaluacin de diferentes algoritm os soft
ware en tiempo de ejecucin. Cuando no se usa la A1VT sus contenidos son los mismos que la
IVT. (Figura 8.1.)
RESETRESET-
INSTRUCCIN GOTO
I 0x000000
DIRECCIN GOTO
8 0x000002
Ox 000004
FALLO DE OSCILADOR
ERROR DE DIRECCIQNAMIETO
FALLO DE PILA
VECTORES DE
EXCEPCIN
ERROR ARITMTICO
RESERVADO
_____________ RESERVADO
RESERVADO
VECTOR DE INTERRUPCIN 0
0 0x000014
Ox 00G07E
0X 000080
RESERVADO
0x000082
RESERVADO
Ox 000084
FALLO DE OSCILADOR
ERROR DIRECCIONAMIENTO
FALLO DE PILA
ERROR ARITM TICO
RESERVADO
RESERVADO
RESERVADO
VECTOR DE INTERRUPCIN 0
Ox 0 0 0 0 9 4
VECTOR DE INTERRUPCIN 1
VECTOR DE INTERRUPCIN 52
VECTOR DE INTERRUPCIN 53
Figura 8.1.
UX OOOCr E
Espacios de direcciones ocupados por las tablas IVT y AIVT en el mapa de la memoria de
programa de los dsPIC30F
INTERRUPCIONES Y EXCEPCIONES
95
No se considera una interrupcin el Reset puesto que en su tratamiento no interviene el controjjdor de interrupciones. Cuando se produce un Reset se borran los registros y el PC pasa a valer ce
ro, iniciando el procesador la ejecucin de instrucciones a partir de la situada en la direccin 0x000
V)0 de la memoria de programa en la que se coloca el cdigo de un GOTO que pasa el flujo de con
s o l a la direccin donde empieza el programa principal.
En la Figura 8.2 se presenta una tabla que muestra las direcciones ocupadas por la IVT y la AI VT
\ .25 causas que originan las interrupciones y excepciones.
NMERO E VECTOR
D IR EC C I N IVT
D IR EC C I N A IV T
CAUSA DE EX C EP CI N
0x000004
0x000084
RESERVADO
0x000006
0x000086
FALLO DE OSCILADOR
ERROR DE DIRECCION AMIENTO
0x000008
0x000088
OxOOOOOA
0x00008A
ERROR DE PILA
OxOOOOOC
0x00008C
ERROR ARITMTICO
OxOOOOOE
0x00008E
RESERVADO
0x000010
0x000090
RESERVADO
0x000012
0x000092
RESERVADO
0x000014
0x000094
0x000016
0x000096
0x000018
0x000098
0x00001 A
Ox00009A
TI -T1MER1
0x00001C
0x000096
0x00001E
0x00009D
0x000020
OxOOOOAO
T2 - TIMER 2
0x000022
0x0000A2
T3 - TIMER 3
0x000024
0x0000A4
0x000026
0x)000A6
0x000028
xOOOOA8_
U l T X -U A R T 1 EMISOR
0x00002A
OxOOOOAA
0x00002C
OxOOOOAC
ESCRITURA COMPLETADA
0x00002E
OxOOOOAE
0x000030
OxOOOOBO
0x000032
0x0000B2
0x000034
0x000084
0x000036
0x0000B6
IC 7 - ENTRADA M D U LO DE CAPTURA 7
IC 8 - ENTRADA M O D U LO DE CAPTURA 8
U l RX
UART 1 RECEPTOR
0x000038
0x00001*8
0x00003A
0x0000BA
Qx00003C
OxOOOOBC
0x00003E
0X0OOOB3
0x000040
OxOOOOCO
0x000042
0x0000C 2
0x000044
0x0000C4
0x000046
0x000048
oxooooce
oxooooca
0x00004A
OxOOOOCA
CAN 1
0x00004C
OxOOOOCC
T5 - TIMER 5
96
N M ERO DE V EC T O R
D IR EC C I N IVT
D IR EC C I N A IV T
CAUSA DE EXC EP CI N
37
0x00004E
OxOOOOCE
38
0x000050
0x000000
39
0x000052
0x0000D2
40
0x000054
OxOOOOD4
41
0x000056
0x0000D6
42
0x000058
0x000008
43
OxOOOOSA
OxOOOODA
44
0x00005c
OxOOOODC
IN I 3 - INTERRUPCIN EXTERNA N M 3
45
0x00005F
OxOOOODE
46
0x000060
OxOOOOEO
CAN 2
47
0x000062
OxOOOOE2
48
0x000064
OxOOOOE4
49
0x000066
0x000E6
50
0x000068
0x0000E8
51
0x00006A
OxOOOOEA
52
0 x00006c
OxOOOOEC
53-61
OxOOOO6E-OxO0OO7F
OxOOOOEE-OxOOOOFE
RESERVADOS
Figura 8.2.
La Tabla de Vectores de Interrupcin (IVT) de los dsP!C33F se muestra en la Figura 8.3. La IVT re
side en la memoria de programa empezando en la posicin 0x000 004. La IVT contiene 126 vecto
res comenzando por 8 vectores de excepciones no mascarables a los que se aaden 118 vectores de
interrupcin.
En general, cada fuente de interrupcin tiene su propio vector. Cada vector de interrupcin con
tiene una direccin de 24 bits donde se inicia la rutina de atencin. El valor programado en cada
localizacin del vector de interrupcin es el comienzo de la direccin de las rutinas de servicio de
interrupcin asociadas (ISR). Los vectores de interrupcin estn organizados siguiendo el orden de
su prioridad natural; esta prioridad es inherente a las direcciones en la tabla de vectores. Por ejem
plo, la interrupcin asociada con el vector 0 tom ar el control antes que otras con el mismo nivel
de prioridad.
La tabla de vectores de interrupcin alternativa (AIVT) est situada despus de la IVT, co
mo se m uestra en la Figura 8.3. El acceso a la A IVT lo proporciona el bit de control ALTIVT
(INTCON2<'15>). Si ALTIVT est a 1, todas las interrupciones y excepciones usarn los vecto
res alternativos en vez de los vectores principales. Los vectores alternativos estn organizados
de la mism a m anera que los vectores de la IVT. La A IVT soporta tareas de depuracin. El espa
cio de cdigo para el usuario com ienza detrs de la AIVT, es decir, a partir de la direccin
0x000200.
INTERRUPCIONES Y EXCEPCIONES
R E S E T - INSTRUCCI N GO TO
Ox 000000
Ox 000002
RESERVADO ________
97
0x 000004
8 VE C TO R E S DE
EXCEPCIN
uu
RESERVADO
VECTO R DE IN TERRUPCIN 0
Ox 000014
VECTOR DE IN TERRUPCI N 1
118 VE C TO R E S DE
INTERRUPCIN
VECTO R DE IN TERRUPCIN 116
VECTOR DE IN TERRUPCI N 117
OxOOOOFC
0x 0000FE
RESERVADO
0x000100
RESERVADO
0x000102
RESERVADO
0x0 0 0 1 0 4
FALLO DE O SCILADOR
ERROR D IR EC CION AM IENTO
FALLO DE PILA
ERROR ARITM TICO
ERROR DMA
RESERVADO
RESERVADO
VECTO R DE IN TERRUPCIN 0
.....
Ox000114
VECTO R DE INTERRUPCI N 1
Ox000 1 FC
0x0001 FE
Figura 8.3.
Espacios de direcciones ocupados por las tablas IVT y AIVT en el mapa de la memoria de
programa de los dsPIC33F.
En las Figuras 8.4 y 8.5 se presenta una tabla que m uestra las direcciones ocupadas por la IVT
y la AIVT junto a las causas que originan tanto las interrupciones com o las excepciones de los
dsPIC33F.
98
N M ERO DE V EC T O R
D IR EC C I N IVT
D IR E C C I N A IV T
0x000004
0x000084
RESERVADO
0x000006
0x000008
OxOOOOOA
0X000J&
0x000088
Ox00008A
FALLO DE OSCILADOR
OxOOOOOC
OxOOOOOE
0x000010
0x000012
0x000014
OxOOOOtC
0x00008E
0x000090
0x000092
0x000094
3
4
i
. . . 5 ...................
6
7
8
0x000016
0x000096
0x000018
0x000098
0x00001A
0x00001C
0x00001E
Ox00009A
0x00009c
0x00009D
0x000020
0x000022
0x000024
OxOOOOAO
OxOOOOA6
0x0000A8
20
0x000026
0x000028
0x00002A
0x00002C
21
22
0x00002E
0x000030
23
0x000032
0x000034
9
10
11
12
13
14
15
16
17
18
19
2-1
0x000036
0x000038
0x00003A
()x00003C
0x00003F
25
26
27
28
29
0x000040
0x000042
0x000044
30
31
32
0 X0 0 0 A 2
OxOOOOA4
OxOOOOAA
OxOOOOAC
OxOOOOAE
0x000080
0x000062
0x000084
0x000036
OxOOOOB8
OxOOOOBA
OxOOOOBC
OxOOOOBE
OxOOOOCO
0x0000C2
OxOOOOC4
CAUSA DE EXC EP CI N
ERROR DE DIRECCIONAMIENTO
ERROR DE PILA
ERROR ARITMTICO
ERROR D M A
RESERVADO
RESERVADO
INTO - INTERRUPCIN EXTERNA N M 0
IC1 - ENTRADA M O D U LO CAPTURA 1
O C I - SALIDA DEL COMPARADOR 1
T1 -TIMERT
DM A 0 - DM A CANAL 0
IC2 - ENTRADA M O D U L O CAPTURA 2
OC2 - SALIDA DEL COMPARADOR 2
T 2 -T IM E R 2
T3 - TIMER 3
SPI 1E-ERROR EN SPI1
SPI1 - TRANSFERENCIA SPI1 REALIZADA
U IRX UARTI RECEPTOR
U1 T X -U A R T 1 EMISOR
ADC 1 - CONVF.RSOR A /D I
DM A 1 - CANAL D M A 1
RESERVADO
SI2C1 - OPERACION I2C1 ESCLAVO
MI2C1 - OPERACION I2C1 MAESTRO
RESERVADO
NOTIFICACION DE CAMBIO DE ENTRADA
INT1 - INTERRUPCIN EXTERNA N M 1
ADC 2 - CONVERSOR A 'D 2
IC 7 - ENTRADA M D U LO DE CAPTURA 7
IC 8 - ENTRADA M D U LO DE CAPTURA 8
DM A 2 - CAN Al D M A 2
OC3 SALIDA DEL COMPARADOR 3
33
0x000046
34
36
0x000048
0x00004A
0x00004C
37
0x00004E
OxOOOOC6
OxOOOOC8
OxOOOOCA
OxOOOOCC
OxOOOOCE
0x000050
0x000052
0x000054
0x000056
OxOOOODO
0x0000D2
0x0000D4
OxOOOOD6
0x000058
0x0Q005A
0 x000008
OxOOOODA
OxOOOODC
Oxooocdf
OxOOOOEO
OxOOOOE2
0x0000E4
OxOOOOE6
OxOOOOEf
OxOOOOEA
35
......3 8
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Figura 8.4.
0x00005C
0x00005E
0x000060
0x000062
0x000064
0x000066
0x000068
Qx00006A
OxOOOOC
0x00Q06E
OxOOOOEC
OxOOOObE
Direcciones de los vectores de IVT y AJVT en memoria de programa y causas que produ
cen interrupciones y excepciones en los dsPIC33F. No todos los modelos DSC disponen de
los mismos perifricos integrados y por tanto usan todos los vectores de la tabla.
INTERRUPCIONES Y EXCEPCIONES
N M ERO DE VECTO R
D IR E C C I N IVT
D IR EC C I N AIVT
CAUSA DE EXCEPCI N
54
0 x0 0007 0
0 x0 0017 0
D M A 4 - C A NAL D M A *1
55
0x0 0007 2
0x000172
1 6 - IIM FR (t
56
0x0 0007 4
0x0 0017 4
T7 - TIMER 7
57
0x0 0007 6
0x0 0017 6
50
0x0 0007 8
0x000178
59
0x0 0007 A
0 x0 0017A
T8 - TIMER 8
60
X00007C
0 x 0 0 0 1 7C
61
0x00007E
0 x0 0 0 1 7E
T9
99
TIMER9
62
0x0 0008 0
0 x0 0018 0
IN T 4 - INTERRUPCION EXTERNA 4
63
0x000082
0x0 0018 2
64
0 x0 0008 4
0x0 0018 4
65
0x0 0008 6
0x0 0018 6
66
0x0 0008 8
0x0 0018 8
67
0 x0 0 0 0 8 a
0x0 0 0 1 8A
68
0x00008c
0 x 0 0 0 18C
C2 - EVENTO C AN2
PVVM
PERODO P W M
QEI - C O M P A R AC I N C O N T A D O R DE POSICIONES
69
0x00008E
0 x 0 0 0 I8F
70
0x0 0 0 0 9 0
0x0 0019 0
RESERVADO
71
0x000092
0x000192
72
0 x0 0009 4
0x0 0019 4
73
0 x0 0009 6
0x0 0019 6
U 1 E -E R R O R EN UART1
74
0x 0 0 0 0 9 8
0x0 0019 8
75
0 x 00 009 a
0 x0 0 0 1 9A
RESERVADO
76
0x00009c
0x00019C
D M A 6 - CANAL D M A 6
77
OxOOOOOE
0 x0 0 0 1 9E
D M A 7 - CANAL D M A 7
78
OxOOOOAO
0x0001 A 0
79
0x0000A 2
0x0001 A2
Figura 8.5.
OxOOOOA4-OxOOOOFE 0 x 0 0 0 1A4-X0001 FE
RFSFRVADAS
Continuacin de la tabla con lis direcciones de los vectores de IVT y AIVT en memoria
de programa y causas que producen interrupciones y excepciones en los dsPIC33F.
100
prioridad que cualquier interrupcin de usuario. Los bits IPL<2:0> pueden leerse y escribirse pero
el bit IPL3 puede ser borrado, aunque no activado por el usuario.
8.5. NIVEL DE PRIORIDAD DE LAS INTERRUPCIONES
Existen 54 causas de interrupcin diferentes en los dsPIC30F y 118 en los dsPIC33F que estn pro
ducidas por los perifricos integrados o por las patitas destinadas a tal efecto. El usuario puede pro
gramar individualmente cada tipo de interrupcin con el nivel de prioridad deseado situado entre 1
(mnimo) y 7 (mximo), pues el nivel 0 significa su prohibicin. Esta programacin se realiza es
cribiendo el valor adecuado en los bits IPL<2:0>, no usndose el IPL3 que se lee como cero.
Para resolver conflictos de prioridad en las situaciones en las que varias causas de interrupcin
con el mismo nivel de prioridad se producen simultneamente, se tiene en cuenta el nivel natural
de cada una que corresponde con el lugar o nmero que ocupa en la tabla. Cuanto ms alto sea el
nmero del vector, menor es el nivel natural de prioridad. Este nivel natural slo se aplica para re
solver los conflictos de prioridad entre varias interrupciones con el mismo IPL. Lo correcto es que
el usuario al programar el IPL asigne un valor bajo a las causas que ocupan un nmero de vector al
to y viceversa, para ajustarse al orden natural, aunque en algunas ocasiones puede interesar hacer lo
contrario.
Figura 8 .6 .
NMERO VECTOR
NIVEL DE INTERRUPCIN
CAUSA DE EXCEPCIN
M X IM A PR IO R ID AD (5)
RESERVADO
14
TALLO O S C ILA D O R
13
RRROR D IR E C IO N AM IEN TO
12
ERROR PILA
M N IM A PR IO R ID AD (11)
RESERVADO
RESERVADO
RESERVADO
INTERRUPCIONES Y EXCEPCIONES
101
Las excepciones de Error de Pila y Error Aritmtico se consideran de tipo software, mientras que
las de Fallo del Oscilador y Error de Dircccionamiento se las considera de tipo hardware. En las ex
cepciones tipo software hay que terminar la ejecucin de la instruccin causante de las mismas an
tes de ejecutar la rutina de atencin. En las excepciones tipo hardware no se completa la ejecucin
de la instruccin causante porque dara resultados errneos y se lanza la rutina de atencin en cuan
to se detecta el error.
Los dsPIC33F disponen de una excepcin ms, originada por el Fallo del CDM A .
Se trata de una excepcin tipo software de mnima prioridad (1PL = 11) que se genera por una de
las siguientes causas:
a)
b)
c)
d)
e)
La cima de la Pila queda direccionada despus de un Reset con el valor 0x0800 y su tamao mxi
mo lo deterjnina el Registro Lmite de la Pila SPLTM. Cuando una direccin efectiva para la Pila ge-erada por W15 no est comprendida entre los lmites establecidos se genera este tipo de excepcin
que posee un nivel de prioridad 12.
El error de pila puede detectarse tambin por software comprobando el bit de estado STKERR
en IN TCO M l<2>. El flag STKERR tiene que ser borrado por software para retornar con la ins
truccin RETF1E.
Son las dos excepciones hardware de mxima prioridad que fuerzan a atender la causa antes de fi
nalizar la ejecucin de la instruccin responsable de las mismas.
Cuando se genera una peticin de una excepcin con mayor nivel de prioridad que la que se esi procesando, se suspende temporalmente esta ltima que pasa a marcarse como pendiente y se
idende a la de mayor prioridad.
Cuando se origina un conflicto de prioridad debido a las excepciones se genera un Reset.
La excepcin por Fallo del Oscilador (IPL = 14) se origina por las siguientes causas:
a) Se activa el M onitor de Fallo del Reloj (FSCM) al detectar un fallo en el sistema del reloj
principal.
b) Se detecta un fallo en el PLL cuando est en funcionamiento.
c) Se activa FSCM y falla el PLL al producirse un Reset de encendido (POR).
102
La excepcin por Fallo del Oscilador puede detectarse por software comprobando el bit de esta
do OSCFAIL en IN TC 0N <1> o el bit de estado CF en OSCCON<3>. El flag OSCFAIL tiene que
ser borrado por software para retom ar con la instruccin RETFIE.
La excepcin por Error de Direccionamiento (IPL = 13) se produce por las siguientes causas:
a) Se intenta acceder a un dato desalineado (acceso a una palabra con direccin impar).
b) Una instruccin de manipulacin de bits utiliza direccionamiento indirecto con el bit de me
nos peso de la direccin efectiva a 1.
c) Se intenta acceder a un dato en una zona de la memoria de datos no implementada fsicamente.
d) Ejecucin de la instruccin BRA #literal o la GOTO #literaT cuando literal es una direc
cin de memoria de programa sin implementar.
e) Ejecutar una instruccin despus de modificar el PC para apuntar a una direccin de memo
ria de programa sin implementar. El PC tiene que ser modificado con la carga de un valor
dentro de la pila y ejecutando la instruccin RETURN.
El espacio de datos estar prohibido mientras dure la excepcin en curso, para no destruir nin
gn dato. El error de direccionamiento puede detectarse por software comprobando el bit de estado
ADDRERR en 1NTC0N<3>. El flag ADDRERR tiene que ser borrado por software para retornar
con la instruccin RETFIE.
Todos los sealizadores de las causas de interrupcin son explorados cada ciclo de instruccin.
Cuando existe una peticin de interrupcin pendiente (IRQ - Interruption Routine Qcuc) se pone a
1 el bit sealizador correspondiente en el registro IFSx (Tnterrupl Falg Status). Para atender la inte
rrupcin es preciso que el bit de permiso correspondiente est a 1 en el registro ECx (Interrupt Enablc Control). Durante el tiempo restante del ciclo de instruccin en que se exploran las IRQ se eva
lan las prioridades de las interrupciones pendientes de ser atendidas. Cuando existe una peticin de
una interrupcin pendiente que tenga mayor prioridad que la CPU se pone en marcha el procesa
miento de la misma y el procesador salva en la Pila el valor actual del PC, el byte bajo del registro
SR y el bit IPL3 (CORCON<3>). (Figura 8.7.)
15
W 15
(ANTES DE IRQ)
W15
(DESPUES DE IRQ)
Figura 8.7.
INTERRUPCIONFS Y EXCEPCIONES
103
Con la instruccin de Retorno de Interrupcin RETFIE que se coloca al final de la rutina ISR (Interruption Service Routine) se recuperan de la Pila el PC<22:0> (la direccin de retom o, es decir el
PC almacenado antes de saltar a la rutina de interrupcin), el SR<7;0> (para recuperar el entorno en
el que se encontraba el procesador antes de saltar) y el 1PL3. Las interrupciones son anidablcs, lo
que significa que cuando se est atendiendo una interrupcin a travs de la rutina de servicio de in
terrupciones (ISR), puede ser interrumpida por un tipo de interrupcin de mayor prioridad.
Se pueden deshabilitar o prohibir las interrupciones que tengan niveles de prioridad de 1 a 6 con
la instruccin DISL que funciona en combinacin del registro contador DISICNT. D1SICNT se va
decrementando hasta que llega a 0, entonces se rehabilitan las interrupciones con prioridad 1-6. Al
ejecutarse, por ejemplo, la instruccin DISI #5, se deshabilitan las interrupciones con IPL de 1 a 6
durante 5 ciclos de instruccin. Una vez detectada la causa que ha provocado una interrupcin, me
diante la inspeccin del registro IFSx, comprobado que tiene permiso (inspeccionando el registro
IECx) y tambin la prioridad suficiente, es decir no hay ninguna otra interrupcin con mayor prio
ridad que ella, entonces se salva en la Pila el PC, el SRL y el IPL3. Luego se carga en el PC el con
tenido del Vector de Interrupcin correspondiente y se pasa a iniciar la ejecucin de la rutina ISR.
Al comienzo de ISR se deben salvar en la Pila con la instruccin PUSH.S los valores de los regis
tros W-W3, para poder restablecer despus los valores que estaban y el procesador pueda continuar
con lo que estaba haciendo antes de la interrupcin. Al completar la ISR, antes de RETFIE, se re
cuperan los valores de dichos registros mediante la instruccin POP.S. (Figura 8.7.)
INICIO
SE SALVA
PC^-VECTOR INTERRUPCIN
SE SALVAN REGISTROS
QUE SE MANEJAN
RUTINA DE ATENCIN
SE RECUPERAN'
REGISTROS QUE SE
MANEJAN
RETFIE
SE RECUPERAN
PC22:0>, SR<7:0>. IPL3
Figura 8.8.
104
7.
2:
3.
4.
El retorno de una rutina de interrupcin tiene una latencia de tres ciclos de instruccin.
Cuando la CPU funciona en uno de los modos de bajo consumo (Sleep o Idle) y se produce una
peticin de interrupcin de mayor prioridad que la CPU (para ello el nivel de prioridad que debe te
ner la CPU es de 1 o mayor) se atiende la peticin, pero si el nivel de prioridad de la interrupcin es
menor que el de la CPU se contina la ejecucin de la instruccin posterior en el programa princi
pal a la que origin el paso al modo de bajo consumo, es decir, produce el despertar de la CPU aun
que la interrupcin no sea atendida.
8.8.
Para el procesamiento y atencin de las interrupciones, el controlador utiliza los siguientes registros.
INTCON1 e INTCON2
Son los dos registros principales que regulan las funciones globales de las interrupciones.
1NTCONI contiene el bit NSTDIS que habilita/deshabilita el anidamiento de las interrupciones, as
como los sealizadores de estado y control de las causas de las excepciones.
INTCON2 contiene los sealizadores de las causas de interrupcin externa y el bit de uso de la A1VT.
REG ISTRO DE ESTADO (SR)
Contiene los bits IPL<2:0> (SR<7:5>) que emplea el usuario para determinar el valor del nivel de
prioridad de las interrupciones.
REG ISTRO DE CONFIGURACIN (CORCON)
Contiene el bit 1PL3 (CORCON<3>) que sirve para determinar el nivel de prioridad de las excep
ciones. Slo es legible porque se pone a 1 automticamente cuando se procesa una excepcin.
REG ISTRO S DE SE ALIZAD O RES DE ESTADO DE LAS INTERRUPCIONES (IFSx)
Son tres registros que contienen los sealizadores que informan de la peticin de interrupcin. Dichos
sealizadores se activan automticamente cuando se produce la peticin y se desactivan por software.
REG ISTRO S DE CONTROL I)E H ABILITAC I N I)E LAS INTERRUPCIO NES (IECx)
Son tres registros que contienen los diversos bits de perm iso/prohibicin de cada una de las
interrupciones.
INTERRUPCIONES Y EXCEPCIONES
105
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
^ E R R |S T K E R R | O S C F A IL
U -0
-
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
j M tlE P
R/W-0
p T ^ 1
Leyenda
R = bit leble
T = bit a 1
8.9.
W = bit escribible
0 = bit a 0
En la Figura 8.10 se observan los registros INTCON 1 e INTCON2 que maneja el dsPIC33F.
TC O N 1:
w *-:
R /w -o
R/W -0
R/W-0
R/W-0
R/W-0
C VAS r f OVATE
BUM)
R/W-0
R/W-0
RR
R/W-0
R/W-0
ITC O N 2:
9 W O
R/W-0
\THERR A D D R ER R IsT K R R
R/W-0
R/W-0
R/W-0
OVBTE
COVTE
R/W -0
OSC FA l I
U-0
-
o s c f a il
U-0
U-0
U-0
U-0
U-0
U-0
U-0
U-0
U-0
R/W-0
R/W -0
R/W -0
R/W -0
IN T 4 E P
INT3EP
INT2EP
INT1EP
R/W-0
INTOEP
Leyenda
R = bit leble
1 = bit a 1
8.10. Distribucin de los bits de los registros INTCO N 1 e INTCON2 para el procesamiento de
las interrupciones y excepciones en el modelo dsPIC33F.
106
En la Figura 8.11 se presentan los registros que utiliza el dsPJC3F para m anejar las inte
rrupciones.
NOM BRE
D IR E C C I N
BIT15
B1T14
IFS
0084
CNIF
IFS1
0086
IC6IF
IFS2
0088
BIT13
BIT12
B IT ll
B1T10
BIT9
BCLIF
I2CIF
NViVIIF
ADIF
u i rxiF
IC5IF
IC4IF
IC3IF
C1IF
SPI2IF
FLIBIF
FALTAIF
BCLIF
I2CIE
NVVMIE
1C5IE
IC4IE
IEC0
008C
CNIE
IEC1
008E
IC6IE
IEC2
0090
IPCO
0094
BIT8
BIT7
U1RXIF
SPI1IF
T3IF
U2TXIF
U2RXIF
INT2IF
LVDIF
DCIIF
QVEIIF
PWMIF
ADIE
UITXIE
r U IR X lP
SPIIIF
T3IE
IC3IE
C1IE
SPI2IE
U2TXIE
U2EXIE
IKT2IL
FLTBIE
FALTA IL
LVDIE
DCIIE
SPI1IE
PWMIE
T I 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
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
INT2IP <2:0>
NOMBRE
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BITO
ES TA D O RESET
IFSO
T2IF
OC2IF
IC2IF
T1IF
OC1IF
IC1IF
INTO
IFS1
T5IF
I4IF
C4IF
OC3IF
IC8IF
IC7IF
INT1IF
ll:S2
C2IF
INT/1IF
INT3IF
OC8IF
OC7IF
OC6IF
OC5IF
IEC0
T2IF
OC2IE
IC2IE
THE
OCHE
IC1IE
INTOIE
IEC1
T.5IL
T4IE
OOIIE
OC3IE
IC8IE
IC7IE
INT1IE
IEC2
C2IE
I.NT4IE
INT3IE
OC8IE
OC7IE
OC6IE
OC5IE
ICl IP <2:0>
IPCO
INT0IP<2:0>
IPCJ
OC2IP <2:0>
I2CIP <2:0>
ICP2
U1 RXIP <2:0>
SPI1IP <2:0>
IPC3
I2CIP <2:0>
NVMIP <2:0>
IPC4
1C7IP <2:0>
INT1 IP <2:0>
IPC5
T4IP <2:0>
OC4IP <2:0>
IPC6
U2TXIP <2:0>
IPC7
IC4IP <2:0>
IPC8
IPC9
IPC10
IPC11
OC5IP <2:0>
INT3IP <2:0>
QEIIP <2:0>
FLTBIP <2:0>
Figura 8 .1 1 . Nombre y distribucin de los bits de los registros que se utilizan en el procesamiento de
las interrupciones y excepciones de los dsPIC30F.
INTERRUPCIONES Y EXCEPCIONES
107
Los registros que utiliza el dsP!C33F para m anejar las interrupciones se m uestran en la Figu
ra 8.12.
NOMBRE- D IR EC C I N
BIT15
BIT14
BIT13
BIT12
BIT11
BIT10
BIT9
BIT8
BIT7
IFS0
0084
DMA1IF
AD1IF
U1TXII-
U1RXIF
SPI 1Ih
SPHEIF
T3IF
T2IF
irsi
0086
U2TXIF
U2RXIF
INT2IF
T5IF
T4IF
OC4IF
o o ir
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>
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>
IPC15
00B6
FI.TAIP <2:0>
IPC16
00B8
IPC17
OOBA
C2TXIP <2:0>
OC6IP
'
o " iV v - A
-
U2FIP <2:0>
CITXIP <2:0>
'
Figura 8 .1 2 . Nom bre y distribucin de los bits de los registros que se utilizan en el procesamiento de
las interrupciones y excepciones de los dsPIC33F.
108
NOM BRE
B1T6
BIT5
BIT4
BIT3
BIT2
BIT1
BITO
ESTADO RESET
IFSO
OC2IF
IC2IF
DMA01IF
T I IF
OC1IF
IC1IF
INT0IF
0 \
IC7IK
AD2IF
INT1IF
CNIF
MI2C1IF
SI2C1IF
IFS2
IC4IF
IC3IF
DMA3IF
C1IF
C1RXIF
SPI2IF
SPI2EIF
IFS3
INT4IF
INT3IF
T9IF
T8IF
MI2C2IF
SI2C2IF
T7IF
IFS4
C1TXIF
DMA7IF
DMA6IF
U2EIF
U1EIF
FLTBIF
IFCO
OC2IE
IC2IE
DMA0IE
THE
OCHE
IC1IE
INT0IE
IKC1
IC7IR
AD2IE
INTIIE
C.NIE
MI2C1IE
SI2C1IE
1LC2
IC4E
IC3IE
DMA3IE
C1IE
C1RXIE
SPI2IE
SPI2EIE
IC O
INT4IE
INT3IE
T9IE
T3IE
MI2CI2IE
SI2CIE
T7IE
ICC4
ClTXIE
DMA7IE
DMA6IE
U2EIE
U1EIE
FI.TBIE
;;
INTOIP <2:0>
DMA0IP <2:0>
SPI1EIP <2:0>
T3IP <2:0>
IPC3
AD1IP <2:0>
U1TXIP <2:0>
IPC4
MI2C.1 IP <2:0>
SI2C1 IP <2:()>
0 1 0 0 0 1 0 0 01000100
IPC5
AD2IP <2:0>
INT1 IP <2:0>
IPC6
OC3IP <2:0>
DMA2IP <2:0>
IPC7
INT2IP <2:0>
T5IP <2:0>
IPC8
SPI2IP <2:0>
SPI2FIP <2:0>
IPC9
C3|P <2:0>
DMA3IP <2:0>
ipcro
OC5IP <2:()>
IC6IP <2:0>
0100010001000100
OC8IP <2:0>
T7IP <2:0>
T9IP <2:0>
C2IP <2:0>
DCIIP <2:0>
0100010001000100
FLTBIP <2:0>
DMA61P <2:0>
IPCO
ICI IP <2:0>
IPC1
IC2IP <2:0>
IPC2
IPC11
I
IPC12
SI2C2IP <2:0>
IPC13
INT3IP <2:>
IPCI4
PVVMIP <2:0>
IPC 1.5
DMA5IP <2:0>
IPC16
U1 EIP <2:0>
IPC17
DMA7IP <2:0>
- :
:
Figura 8 .12. Nombre y distribucin de los bits de los registros que se utilizan en el procesamiento de
las interrupciones y excepciones de los dsPlC33F. (Continuacin).
CAPTULO
Caractersticas
de las instrucciones
y modos de
direccionamiento
110
oooo
Figura 9.1.
oooo
XX XX
X X X X
X X X X
X X X X
EJEMPLO 2
La instruccin RESET que fuerza la inicializacin del procesador no requiere ningn operando y
su cdigo OP es l i l i 1110. (Figura 9.2.)
Figura 9.2.
EJEMPLO 3
La instruccin PU SH 0x336A introduce en la cima de la Pila la palabra de 16 bits situada en la p o
sicin de la memoria de datos cuya direccin es 0x336A que est situada en los 32 KB inferiores
del espacio de memoria. El prim er byte del form ato de esta instruccin corresponde al cdigo OP,
o sea al perteneciente a PUSH que es 1111 1000, mientras que los otros dos bytes contienen la di
reccin de la memoria de datos donde se halla el operando que se va a cargar en la cima de la Pi
la que apunta W I5. Tras la ejecucin de esta instruccin W15 se incrementa automticamente en
dos unidades. (Figura 9.3.)
Figura 9.3.
F.l prim er byte del formato de la instruccin PUSH 0x336A es fijo porque es el cdigo OP
de PUSH. Los otros dos contienen la direccin del operando.
111
En la tabla de la Figura 9.4 se ofrecen los cdigos OP correspondientes al primer byte del for
mato de las instrucciones de los DSC.
El cdigo OP se forma lomando los 4 bits de la colum na y a continuacin los 4 bits de la fila.
(y g g
0110 0111
1000
1001
DO
RFPEAT
1010
1110 1111
BRA
G\LL
0000 NOP
GOTO RETIW
CALL
GOTO
RETFIE
RETURN
RCAI.L
BRA
BRA
BRA
BRA
<OA)
(OB)
(SA)
(SB)
RCAI.L
0001
SUBR
SUBBR
0010
MOV
MOV
0011
BRA
BRA
BRA
BRA
BRA
BRA
BRA
OV)
(O
<z>
(Nj
(LE)
(LT)
(LEU)
BRA
BRA
BRA
BRA
BRA
BRA
BRA
BRA
(NOV)
(NC)
(NZ)
(NN)
(GT)
(GE)
(CTU)
BTSTS
BSW
BTSS
btsc:
MOV.D
MOV
0100
ADD
ADDC
0101
SUB
SUBB
0110
AND
XOR
0111
IOR
MOV
1000
MOV
MOV
1001
MOV
MOV
1010 BSET
1011
BC LR
BTC
SUB
AND
SUBB
XOR
ADD
addc:
BIST
BTSTS
BTST
BTSS
IOR
ADD
SUB
AND
XOR
MPY
CIRAC
MPY.N
MSC
1101
BCLR
BTG
RLC
ISR
RRC
RLNC RRNC
11 10 CPO CP CPB
CPO
SI
MPY
MOV-
MPY.N
SAC
RLC
RRC
DIV.S
RLNC
RRNC
DIV.U
CPSGT
CPSI.T
CPSNL
ADD
LAC
NEC
SAC
SAC.R
SL
liD
FDAC MAC MPY
FFIL
FF1R
DIVF
INC
DEC
COM
C.LR
INC
DEC
COM
CLR
INC2
DEC2
NEG
SETM
INC2
DEC2
NEC.
SETM
CLRVVDT
'
11111
SUB
SUBB
SUB
LSR
CP
MUI
ADD
SFTAC
ASR
CPB
BTST
MSC
ASR
SL
IOR
BSET
MAC
MAC
1100
BTSC
PUSH
POP
LNK
IJLNK
DAW HYVRSAV
SE ZE
DISI
EXCH
POPS
SWAP
PUSH.S
NOPR
RESET
Figura 9.4 .
Tabla con la que se puede obtener el cdigo OP del prim er byte del formato de las ins
trucciones de los DSC.
112
La mayora de las instrucciones se ejecutan en un ciclo de instruccin equivalente a 4 ciclos de reloj (4 . Tose), con las siguientes excepciones:
EJEMPLO l
Dado un D SC cuyo oscilador externo funciona a una frecuencia de 1MHz, calcular el tiempo que
tardara en ejecutar la instruccin M AC W4xW5, B.
El DSC larda en ejecutar la instruccin M AC 1 ciclo de instruccin.
Tosc
Fosc
1M hz
= ------- " 7
1 1 0 6hz
= 1 1 0 6 -v = 1/ t
1 _
1
____ \_
Tosc. = ^ = ---------------= --------------
Fosc ~ 33M hz ~ 3 3 -10ofe
= 0 . 3 1 0 ^
= 30775
113
IN S T R U C C I N /C O N D IC I N
M O D IF IC A C I N PC
U SO DE LA PILA
EJECUCIN SECUENCIA!.
PC=PC+2
N IN G U N O
PC=PC+2 S liti
N IN G U N O
BRA C O N D IC I N , EXPR
BIFURCACIN CO NDICIONAL
PC=lit23
SE SAIVA PC+4
PC=VVn
SE SALVA PC+2
P C -lit23
N IN G U N O
PG=Wn
N IN G U N O
PG= PC+2-SI ti 6
SE SALVA PC+2
PC=PC+2-Wn
SE SALVA PC+2
TRATAMIENTO FXCFPCIN
PC=VECTOR DE INTERRUPCIN
SE SALVA PC+2
N IN G U N O
N IN G U N O
Figura 9.5.
N IN G U N O
Tabla que muestra el comportamiento del PC y de la Pila con las instrucciones que m o
difican el PC.
114
Se trata de utilizar la Memoria de Programa, que es ms lenta, barata y no voltil, para almacenar
datos.
Aparentemente se accede a los 32 KB superiores de la memoria de datos, pero realmente se es
t accediendo a la memoria de programa sin necesidad de ninguna instruccin especial. Se habilita
este procedimiento poniendo a 1 con el tercer bit del registro CORCON y cargando el registro PSVPAG que tienen un tamao de 8 bits.
9.5.
Los DSC disponen de 4 modos para direccionar los datos u operandos cuando se ejecutan las ins
trucciones.
1o
2.
3
4
Direccionamiento directo.
Direccionamiento directo por registro.
Direccionamiento indirecto por registro.
Direccionamiento inmediato.
Lo emplean las instrucciones que tienen como operando la direccin de la memoria de datos donde
reside. Para este direccionamiento es frecuente utilizar los 8 KB inferiores del espacio de la memo
ria que se denomina RAM cercana. Sin embargo, con la instruccin MOV es posible acceder a los
64 KB con este direccionamiento.
Usando este modo de direccionado se puede cargar cualquier posicin de la memoria de datos
con el contenido de un registro de trabajo W y viceversa. Los operandos pueden tener tamao byte
o palabra, excepto MOV que slo trabaja con palabras.
EJEMPLO 1
D EC 0x2200
;[0x2200]
[0x2200] - 1
La instruccin anterior decrementa una unidad el valor de la palabra depositada en la direccin
0x2200 de la RAM.
EJEMPLO 2
M O V 0x2200, W5
;[0x2200] - W5
Mueve la palabra depositada en la direccin 0x2200 de la RAM al registro W5.
La mayora de las instrucciones que usan el direccionamiento directo toman al registro de trabajo
WREG como operando implcito, actuando W como WREG. Este tipo de instrucciones comien
115
zan leyendo los operandos, uno de los cuales implcitamente reside en WO, luego se realiza una ope
racin con ellos y, finalmente, el resultado se escribe en WREG. Son instrucciones de lectura-m o
dificacin-escritura.
EJEMPLO 3
AND 0x2200
;[0x2200] AND WO
WO
Con el valor de la palabra contenida en la direccin 0x2200 se realiza la operacin lgica AND bit
a bit con el contenido del registro WREG (WO) y el resultado se carga en WREG (WO), quedando
inalterado el valor de la direccin 0x2200.
Se em plea para acceder al contenido de los 16 registros de trabajo (W 0-W 15) que actan como
operando en la instruccin. El acceso puede ser a un dato de tamao byte o palabra. La ventaja
de este modo de direccionado es la rapidez con la que se acceden a los registros internos de la
CPU.
EJEMPLO 1
EXCH
W5, W6
; W 5 * * + W6
Se intercambia el contenido de los registros W5 y W6.
EJEMPLO 2
AND.B
W i, #0xF2, W2; W<7:0> AND 0xF2
W2<7:0>
Se realiza la operacin lgica AND entre el byte de menos peso de W1 y el operando inmediato
0xF2, depositndose el resultado en el byte de menos peso de W2.
El contenido de los registros de trabajo se utiliza para guardar la direccin efectiva del operando
en la memoria de datos. Los registros W actan como punteros y la gran ventaja de este procedi
miento es la posibilidad de incrementar o decrementar automticam ente el contenido de un regis
tro antes o despus de ejecutar la instruccin, permitiendo la exploracin secuencial de los arrays
o bancos de datos en el sentido que se desee. Segn que el tamao de los datos direccionados por
el registro W sea de uno o de dos bytes o de ms, los incrementos o decrementos son de una, dos
unidades o ms. En la tabla de la Figura 9.6 se presentan las modalidades del direccionam iento in
directo por registro.
El direccionamiento indirecto con Registro de Desplazamiento situado en la ltima lnea de la
tabla de la Figura 9.6 emplea un registro Wb que suma su contenido con el del registro Wn que con
tiene la direccin efectiva. Wb acta como desplazamiento de Wn y permite acceder a los 64 KB de
la memoria RAM, aunque carece de posibilidades de incremento y decremento.
11 6
[Wn]
EA=[Wn]
EA=[Wn)
PRL-INCREMENTO
I++YVnl
E A =lW n+=l)
EA=fU'n+=2J
PRE-DFCREMENTO
|-W nJ
EA=[Wn-=1l
EA=lW n-=2]
POST-INCRFMFMO
[Wn+4-1
FA=lWri]+=1
EA=|W n]+=2
POST-DECREMENTO
[W n -]
EA=[Wn]-=1
EA=(Wn|-=2
IW n+W b]
EA=|Wn+Wb]
EA=[Wn+VVbl
REGISTRO
DESPLAZAMIENTO
Figura 9.6.
M O D IFIC A C I N DE Wn
EL CONTENIDO DF W n CONTIENE LA
DIRECCIN DE EA V N O VARA
W n ES PRE-INCREMENTADO PARA FORMAR
LA DIRECCIN EA DEL OPERANDO
W n FS PRE-DECREMENTADO PARA FORMAR
LA DIRECCIN FA DF.L OPERANDO
W n CONTIENF I A DIRECCIN EA DE OPERANDO
Y LUEGO ES POST-INCREMENTADO
W n CONTIENE LA DIRECCIN EA DE OPERANDO
Y LUEGO ES POST-DECREMENTADO
LA SUMA DE W n Y W b FORMA LA DIRECCIN EA
DEL OPERANDO. N O CAMBIAN W n Y W b
EJEMPLO 1
M OV[W 3++], fW O -J
; fW 3] + [W0]
; W 3 ^r- W3 + 2
; WO^r- W O -2
; W 4 + W4 -1
;[ W 4 ] < 7 :0 > + [ W 5 + W6]<7:0>
Inicialmente se decrementa una unidad el contenido de \V4 y luego con ese valor se accede a la m e
moria donde se lee el byte de menos peso de la misma y se carga en el byte de menos peso de la di
reccin form ada p o r W5 + W6. Todo ello en un ciclo de instruccin.
EJEMPLO 3
ADD [W 7~], [++W8], [W 5 + 0x6]
;W 8 + W 8 + 2
; [W7] + [W 8]-*~ [W 5 + 0x6]
; W 7 ^r- W7 -2
En prim er lugar se incrementa en dos unidades el contenido de W8, luego se suma la palabra apun
tada por el contenido de W7 con la apuntada p o r W8 y el resultado se carga en la posicin direccionada por W5 + 0x6. Finalmente, el contenido de W7 se decrementa en 2 unidades. Todo ello en
un ciclo de instruccin.
117
MODO DIRECCIONAMIENTO
ESPACIO X
ESPACIO Y
EA=(Wx]
EA=[Wy]
EA=[YVxI+-2
EA=[Wy]+=2
EA=W x]+=4
EA=IVVy)+=4
INDIRECTO CO N POST-INCREMENTO 6
EA=(W x)+=6
EA=(Wy]+=6
EA=[W x !-=2
EA-(W y]-=2
EA~lW x|-=4
EA=fWy|-=4
EA=[WxJ-=6
EA=|W yl-=6
EA=[W9+W12]
Figura 9.7.
Modos de direccionamiento indirecto por registro para lis instrucciones DSP, tipo MAC.
En este caso el operando que maneja la instruccin es un valor literal constante predefinido que es
t contenido en el formato de la propia instruccin. Se usa de forma independiente o combinada con
los restantes modos de direccionamiento. El tamao del operando inmediato puede abarcar desde 1
a 16 bits y puede tener o no bit de signo.
EJEMPLO 1
AND.B
#0x0 F, W6
Se realiza la operacin lgica AND, bit a bit, entre el valor inmediato expresado p or el byte OxOF
y el byte de menos peso de W, depositndose el resultado en el byte de menos peso de W6.
118
EJEMPLO 2
ADD W i, #0x0500, [W2++]
Se suma la palabra contenida en WI con el operando inmediato 0x0500, depositndose el resulta
do en la posicin de la memoria de datos direccionada p or W2. Luego se post-incrementa 2 unida
des W2.
CAPITULO
.V. -
El repertorio
de instrucciones.
Instrucciones MCU
Los DSC combinan en su repertorio las instrucciones tpicas de los microcontroladores, llamadas
instrucciones M C U , con las especializadas en la resolucin de algoritmos matemticos para el pro
cesamiento de seales, llamadas instrucciones DSP.
Los DSC cuentan con 84 instrucciones, que se agrupan en 10 categoras que se distinguen por la
funcin principal que realizan:
Xa
2?
3.a
4*
5*
6S
7v_
Instrucciones de movimiento.
Instrucciones lgicas.
Instrucciones matemticas.
Instrucciones de rotacin y desplazamiento.
Instrucciones de bit.
Instrucciones de comparacin y brinco.
Instrucciones de control del flujo del programa.
Instrucciones de Pila y registros sombra.
9 f Instrucciones de control.
10 ? Instrucciones DSP.
Las nueve primeras categoras configuran las instrucciones MCU y se describen en este captu
lo dejando para el siguiente las instrucciones DSP.
En la descripcin de las instrucciones se usar la nomenclatura que maneja M icrochip y que se
presenta en la tabla de la Figura 10.1.
10.2. INSTRUCCIONES DE M O V IM IE N T O
En la tabla de la Figura 10.2 se presentan las caractersticas principales de las instrucciones que se en
cargan de mover informacin entre el operando fuente y el destino. La instruccin MOV es una de las
ms empleadas en la mayora de los programas. Adems de mostrarse la sintaxis usada en lenguaje
119
120
SM B O LO
D ESCRIPC I N
{)
[TEXT}
....
(TFXT)
CONTENIDO DE TEXT
ffTEXT
C, DJ
<N :M >
{ l ABEL:}
I>
......
SELECCIN DE M O D O DE BYTE
SELECCIN M O D O DOBLE PALABRA
.S
.w
ACG
ACUMULADOR A O ACUMULADOR B
AWB
BIT4
POSICIN BIT
C, DC, N V, Z
EXPR
LIT1
LIT4
LIT5
LIT8
LITIO
LITERAL DE 10 BITS
LIT14
LITERAL DE 14 BITS
LIT16
LITERAL DE 16 BITS
LIT23
LITERAL DE 23 BITS
N IN G U N O
PG
CONTADOR DE PROGRAMA
VVb
SLIT4
SLIT6
SLIT10
SLIT16
TOS
C IM A DE LA PALABRA
Wb
Wd
VVdo
Win, VVn
W m *W m
VVm Wn
VVn
W nd
Wns
WREG
Ws
VVso
Wx
Wxd
Wv
VVyd
Figura 10.1.
121
Ensamblador para editar cada instruccin, se facilita el nmero de palabras de 24 bits que ocupa en la
memoria de programa y el nmero de ciclos de instruccin que dura su ejecucin. Cuando se especi
fica el operando opcional {,WREG} el destino de la instruccin es WREG (WO), pero si 110 se espe
cifica el operando destino, acta como tal la direccin de la memoria de datos F.
SIN TAXI S EN SAM BLADO R
D ESCR IPC I N
PALABRAS
C IC LO S
1
EXCH
Wns, VVnd
INTERCAMBIA W ns Y VVnd
MOV
F{,WREG}
MOV
WRCG,F
MUFVF WREG A F
MOV
F,Wnd
MUEVE F A Wnd
l
1
MOV
Wns,F
MOV.B
# L im W n d
M OV
LIT16,VVnd
MUEVE Wns A F
MOV
[WS+SLIT10],Wnd
MOV
Wns, |Wd+SLITI OI
MOV
Ws,Wd
MUEVE Ws A Wd
M O V )
Ws,Wnd
2
2
MOV.D
Wns,Wd
SWAP
Wn
TBLR.DH
Ws,'Wd
TBLRDL
Ws,Wd
TBLWTH
Ws,Wd
TBLWTL
Ws-Vd
La instruccin EXCH intercambia el contenido de los registros a los que afecta. L a instruccin
SWAP intercambia las dos mitades de la palabra de trabajo depositadas en Wn, que si tiene tamao
byte las dos mitades son de 4 bits cada una y si es palabra son de 8 bits. Tambin las instrucciones
de Tabla mueven informacin entre las posiciones de la memoria de programa y los registros de tra
bajo de forma bidireccional, lo que permite usar parte de dicha memoria para guardar datos.
EJEMPLO 1
MOV.B W0} [W 1+0x7]
Almacena el byte de menos peso de WO en la posicin W1 + 0x7 (=0x1807), que es el byte de ms
peso de la posicin 0x1806. (Figura 10.3.)
ANTES DE LA INSTRUCCIN
DESPUS DE LA INSTRUCCIN
M O V .B
Figura 10.3. Efecto de la ejecucin de la instruccin MOV.B WO, [W 1+0x7] en WO, W l, posicin 1806
y en el Registro do Estado.
122
EJEMPLO 2
SWAP WO
Hace un SWAP en el registro WO. SWAP consiste en intercambiar el byte de ms peso p or el de
menos peso. (Figura 10.4.)
A N T E S DE L A IN STR U C C I N
D E S P U S DE L A IN S TR U C C I N
SWAP WO
WO
8095
WO
0000
SR
SR
B H
9580
0000
Las instrucciones de este grupo se encargan de realizar una operacin lgica bit a bit entre los dos
operandos fuente, depositando el resultado en el destino. Soporta las operaciones AND, OR y XOR.
La instruccin con nemnico COM halla el complemento a l del operando fuente y lo deja en el des
tino. NEG calcula el complemento a 2. CLR borra o pone a cero el operando al que afecta. Final
mente, SETM pone a 1 los bits del operando sobre el que acta. (Figura 10.5.)
SINTAXIS EN SA M BLA DO R
D ESCR IPC I N
PALABRAS
AND
f {,w r e g k t >
DESTINO=F.AND.WREG
AN D
LITIO,Wn
W iiaLIT10.AN D.W n
AN D
W b, ?LIT5,Wd
W d=W b.AND.LIT5
AN D
W b,W s,W d
; CLR
! CLR
WRfcG
: CLR
Wd
W d=W b.AND.W s
F=0x0000
WREG=0x0000
C IC LO S
W d=0x0000
F(,WREG}
COMPLEMENTO A 1
COM
Ws,Wd
COMPLEMENTO A 1
IOR
F{,WREG}(1)
DESTINO=F.IOR.WREG
IOR
LITIO, Wn
Wn=LIT1 O.IOR.Wn
1
1
! COM
IOR
Wh/#LIT5,W d
Wd=Wb.lOR.LIT5
IOR
W b,W s,W d
Wd=WJb.lOR.Ws
NEC
FCWRKGKD
COMPLEMENTO A 2
COMPLEMENTO A 2
F-0xFFFF
WREG=0xFFFF
Wd=0xFFFF
DESTINO=F.XOR.WRFG
Wn=LIT10.XOR.Wn
NEC
WsAVd
SETM
SETM
WRFG
SETM
Wd
XOR
F{,WRF.G}(1)
XOR
LITIO, Wn
XOR
Wb,LIT5,W d
Wd=Wb.XOR.LIT5
Wb,W s,W d
Wd=Wb.XOR.Ws
XOR
123
EJEM PLO 1
AN D W 0,#0xlF,W l
Realiza una AND entre WO y 0x1 F, y almacena el resultado en W L (Figura 10.6.)
A N T E S DE L A IN S TR U C C I N
D E S P U S DE L A IN S TR U C C I N
A N D W D,#0x1F,W 1
WO
WO
W1
7373
W1
SR
obo
SR
6 72 3
>
0003 .
COCO
S S b S b b S S v .-_.
.-.Y .-.
EJEMPLO 2
SETM [~W 6]
Pre-decrementa W6 y despus hace la operacin SETM (poner a unos todo) el contenido de la di
reccin a la que apunta W6. (Figura 10.7.)
A N T E S DE L A IN S TR U C C I N
D E S P U S DE L A IN S TR U C C I N
SE TM [W 6 ]
W6
RAM 124E
SR
1250
3C D 9
0000
W6
RAM 124E
SR
124E
FFFF
0 00 0
Figura 10.7. Efecto de la ejecucin de la instruccin SETM del ejemplo en W6, a direccin 124E y en
el Registro de Estado.
DAW.B: Realiza el ajuste decimal del byte de menos peso del registro Wn, generando un
resultado en BCD.
SE: Extiende el signo del byte depositado en Ws y el resultado de 16 bits lo carga en Wnd.
ZE: Extiende con ceros el byte de menos peso del registro de trabajo fuente Ws y el resulta
do de 16 bits lo deposita en el destino Wnd.
124
D ESCR IPC I N
PALABRAS
ADD
F{,WREG}(1):
DESTINO=F+WREG
ADD
LlTI0,W n
Wn=LIT10+Wn+(C)
1
1
SINTAXIS EN SA M BLA DO R
C IC LO S
ADOC
VVb,*T5,VVd
Wd=Wb+LIT5+(C)
ADDC
WbAVsAVd
DAW.B
Wn
DEC
F(,WREG}
DESTINO=F-1
W d-W s-1
DESTINO=F-2
Wd=Ws-2
DEC
WsA'Vd
DFC2
F[,WREG}
DEC2
WsA'Vd
DIV.S
VVmA'Vn
18
DIV.SD
VVmA'Vn
18
DIV.U
VVmAVn
18
DIV.U D
VVmA'Vn
18
DIVF
VVmA'Vn
18
INC
F{AVREG)
DESTINO=F+1
Wd=Ws+1
DESTINO=F+2
Wd=W s+2
W3:W2=F*WREC
INC
WsA'Vd
1NC2
FA'VREG}
INC2
WsA'Vd
M UI.
MUL.SS
{Wnd+1,Wnd}=SIGNO(Wb)*SIGNO(Ws)
(Wnd+1,Wnd}=SIGNO(Wb)*SIN SIGNO(LIT5)
VVbA'VsAV nd
WbAVsAVnd
1
1
Wb.WsA'Vnd
MUL.SU
W b, ?JIT5 A'Vnd
MUL.SU
MUL.US
W n d -W s EXTENDIDO EL SIGNO
FfA'VRFG}
DESTINO=F-WREG
SUB
ir LITI OAVn
W n=W n-LIT10
SUB
W b , LIT5AVd
W d=W b-LIT5
M UL.UU
W b ,* l IT5 AVnd
M UL.UU
WbA'VsA'Vnd
SE
SUB
SUB
VVsAVnd
WbAVsAVd
W d=W b-W s
SUBB
FAVREG}
DESTINQ f F-WREG-(C)
SUBB
iLITIOA'Vn
W n=W n-LIT10-(O
SUBB
Wb,*fLIT5A'Vd
SUBB
1
i
1
1
1
1
W d-W b-LIT5-(C)
VVbAVsAVd
F{,VVREG}
SUBBR
W b,*LIT5,W d
Wd=LIT5-Wb-(C)
SUBBR
VVbAVsAVd
Wd=Ws-Wb-(C)
DESTINO-VVREG-F
W d=LIT5-W b
Wd=Ws-VVb
SUBBR
: SUBR
FiW REC}
! SUBR
W b ,*U T 5 ,W d
SUBR
Zi
W b, WsA'Vd
VVsAVnd
EJEMPLO 1
DEC2 W5, [W6++J
Decrementa en dos W5, y lo almacena en la direccin apuntada por W6, haciendo a continuacin
un post-incremento de 2 en W6. (Figura 10.9.)
125
DESPUS DE LA INSTRUCCIN
DEC2 W5, [W6++]
Figura 10.9. Efecto de la ejecucin de la instruccin DEC del ejemplo en WS, W6, direccin 1000 y
en el Registro de Estado.
EJEMPLO 2
M O V #0x8002, W0
MOVWOAV4
M O V #0x8001,W0
MOVWO,W3
REPEAT #17
DI VU W4,W3
Ejecuta DIVF 18 veces. D1VF divide W4 por W3 y guarda el cociente en W0 y el resto en W l.
(Figura 10.10.)
ANTES DE LA INSTRUCCIN
DESPUS DE LA INSTRUCCIN
wo
6002
WO
W1
ooco
W1
0001
W3
8001
W3
8001
W4
8002
W4
8002
SR
0000
SR
0101
0001
Figura 10.10. Efecto de la ejecucin de la instruccin DIVF del ejemplo en W0, W1 y en el Registro de
Estado.
Este grupo engloba las instrucciones que realizan el desplazamiento aritmtico (se mantiene el bit de
signo) o el lgico (sin signo), tanto a la derecha como a la izquierda, con un mximo de 15 posiciones.
La instruccin ASR Wb, Wns, Wnd produce un desplazamiento aritmtico a la derecha del con
tenido del registro Wb un nmero de posiciones que viene determinado por los 4 bits de menos pe
so de Wns (mximo 15), depositando el resultado en el registro Wnd.
Las instrucciones de rotacin a la derecha o a la izquierda pueden efectuarse a travs del acarreo
(RLC y RRC), o bien sin tener en cuenta el acarreo (RLNC y RRNC).
La instruccin con nem nico LSR produce un desplazamiento lgico a la derecha y SL lo ha
ce a la izquierda. En este ltimo caso el bit de ms peso del operando fuente al desplazarse pasa a
ocupar el bit sealizador de acarreo, introducindose un cero en el bit de menos peso del operan
do. (Figura 10.11.)
126
Figura 10.11. La instruccin SL desplaza a la izquierda el contenido del operando fuente, pasando el bit
de ms peso a ocupar el hit de Acarreo e introducindose un 0 por el b it de menos peso.
SINTAXIS ENSAiMBLADOR
ASR
F{,VVREG}(1)
ASR
Ws,Wd
ASR
W b,#UT4,W d
ASR
Wb,Wn$,Wnd
LSR
F{,WRFG}{1)
LSR
WsA'Vd
LSR
W b,LIT4,W nd
l.SR
VVb,YVns,VVnd
DESCRIPCIN
PALABRAS
CICLOS
RI.C
F{,VVREG}()
RLC
VVsAVd
RLC
aVVREG)(l)
RING
WsA'Vd
RRC
F{AVREG}(1)
1
1
- -
RRC
WsA'Vd
RRNC
F{,WREG}0)
RRNC
WsA'Vd
SL
F^WREGKD
Wd=DESPLAZAMIENTO A LA IZQUIERDA DE Ws
SL
WsA'Vd
DEL REGISTRO Ws
Wb,LIT4A'Vnd
SI
WbAVnsA'Vnd
127
EJEM PLO 1
ASR RAM200
Desplaza a la derecha los bits de RAM200, dejando el de menos peso en el bit C e introduciendo
repetido el de ms peso p or la izquierda. (Figura 10.13.)
A N T E S DE L A IN S TR U C C I N
D E S P U S DE L A IN S TR U C C I N
A S R R A M 200
R A M 200
8 00 9
SR
0000
R A M 20 0
SR
C 004
0 00 9
yvy.w :ririvfvi-i
Figura 10.13. Efecto de la ejecucin de a instruccin ASR del ejemplo en RAM200 y en e l Registro de
Estado.
EJEMPLO 2
SL 0x1650, WREG
Desplaza a la izquierda los bits de la direccin 0x1650, dejando el de ms peso en el h it C e intro
duciendo un 0 p o r la derecha. Deja el resultado en WREG (W0). (Figura 10.14.)
A N T E S DE L A IN S TR U C C I N
D E S P U S DE L A IN S TR U C C I N
SL 0x1650, W R E G
WD
' fg
' 0900
WO
v y .-.-;
RAM 1650
SR
4G5
0000
R AM 1 65 0
SR
.....
4065
0008
Figura 10.14. Efecto de la ejecucin de la instruccin SL del ejemplo en W0, direccin 1650 y en el Re
gistro de Estado.
10.6. IN S TR U C C IO N E S DE BIT
Son las instrucciones que realizan una operacin sobre un bit concreto de una posicin de la me
moria de datos direccionada por F, de un registro de trabajo Ws.
La instruccin BCLR Ws, #bit4 pone a 0 el bit del registro Ws que viene determ inado por el
valor #bit4, que es un valor comprendido entre 0 y 15 cuando se trabaja con operandos de 16 bits.
En el caso de la instruccin BCLR f #bit4 pone a 0 el bit especificado por #bit4 en el contenido
de la posicin de la m em oria de datos con direccin f. Cuando el nemnico es BSET pone a 1 el
b.it especificado.
La instruccin BSW.C Ws, Wb escribe el valor del acarreo C en el bit del registro W s especifica
do por los 4 bits de menos peso del registro Wb. Esta operacin puede representarse C. ->- Ws<(Wb)>.
La instruccin BSW.Z Ws, Wb realiza una operacin semejante pero escribiendo el valor del seali
zador Z negado y se representa como
128
Z#
Ws<(W b)>. Las instrucciones con nemnico BTG invierten el valor del bit especificado
en el operando.
La instruccin BTST testea un bit de un registro W s o de una posicin de memoria F y lo guar
da en el sealizador C cuando tienen la extensin .C\ mientras que si la extensin es .Z se car
ga en Z el inverso del bit testado. Cuando el nemnico es BTSTS hacen lo mismo que las anterio
res y adems ponen a 1 el bit testado.
La instruccin FBCL Ws, Wnd explora el registro Ws a partir del bit de ms peso detrs del de
signo hasta encontrar el primer bit de cambio a 1 (si es un valor positivo) o de cambio a 0 (si es un
valor negativo). El resultado de esta exploracin expresado con 16 bits con extensin de signo se de
posita en Wnd. FF1L encuentra el primer cambio de bit a 1 empezando por la izquierda y guarda
el resultado en formato de 16 bits con extensin de ceros en Wnd. Finalmente, la instruccin FF1R
hace lo mismo que la anterior pero la exploracin com ienza por la derecha, o sea, por el bit de m e
nos peso de Ws. (Figura 10.15.)
......................
SINTAXIS ENSAMBLADOR
BCLR
F,*BIT4
BCI.K
W ;*glT4
BSET
F,BlT4
BSET
Ws,#BIT4
BSVV.C
VVs,VVb
. ''
DESCRIPCIN
PALABRAS
CICLOS
BSW.Z
Ws,VVb
BTG
F,BIT4
BTG
Ws,#8IT4
: BTST
F,BIT4
BTST.C Ws,ffBIT4
BTST.Z
Ws,*BIT4
BTST.C
Ws.Wb
BTST.Z
VVs,VVb
BTSTS
F,SBIT4
: BTSTS.C Ws,*BIT4
BTSTS.Z W*>,-BIT4
FBCL
VVs.Wnd
FF1L
W s,Wnd
FFIR
VVsAVnd
129
EJEM PLO 1
D E S P U S DE L A IN S TR U C C I N
BTG 0x16 6 0 . # 0x8
RAM 1660
5620
SR
0000
5 72 0
R AM 1660
SR
'
Figura 10.16. Efecto de la ejecucin de la instruccin BTG clel ejemplo en la direccin 1660 y en el Re
gistro de Estado.
EJEMPLO 2
FF1L W2, W5
Encuentra el prim er bit a 1 de W2 y lo guarda en W5. (Figura 10.17.)
A N T E S D E L A IN S T R U C C I N
D E S P U S DE L A IN S TR U C C I N
FF1LW 2, W5
W2
OQO
W2
000A
W5
BBBB
W5
000D
SR
000 0
SR
0 00 0
Figura 10.17. Efecto de la ejecucin de la instruccin FF11. del ejemplo en W2, W5 y en el Registro de
Estado.
10.7. IN S TR U C C IO N E S DE C O M P A R A C I N Y B R IN C O
Son instrucciones que comprueban una condicin o comparan un valor que puede ser el de un bit
concreto y segn su valor binario se brinca o no. El brinco (skip) consiste en un salto pequeito. slo se salta la instruccin siguiente, ejecutando en lugar de la instruccin que hay a continua
cin una NOP. Si no se cumple la condicin impuesta al bit a comparar se ejecuta normalmente la
siguiente instruccin. Cuando no hay brinco la instruccin se ejecuta en un ciclo de instruccin, pe
ro si lo hay la duracin es de 2 ciclos si el brinco se efecta sobre una instruccin de una palabra y
de 3 si se trata de una instruccin de 2 palabras.
La instruccin BTSC Ff #bit4 comienza testando el valor del bit expresado por #bit4 en el con
tenido de la posicin de la memoria de datos de direccin F, y si vale 0. se produce un brinco. Cuan
do el nemnico es BTSS el brinco se produce si el bit explorado vale 1.
La instruccin de comparacin CP F compara o resta el valor contenido en la posicin F con el
del registro de trabajo implcito W0 (WREG) y activa los sealizadores en el Registro de Estado (C,
DC, OV, N y Z) segn el resultado (F) - W0. No genera resultado de la resta ni lo almacena. Hay
130
otras instrucciones de comparacin cuyos operandos son registros o valores inmediatos, como las
instrucciones CPO que realizan la comparacin con el valor 0x0.
La instruccin CPB F compara o resta el valor de la posicin direccionada por F con el del re
gistro de trabajo implcito y con el acarreo invertido o llevada, es decir, (F) - W REG - C # . La ope
racin no genera resultado y slo afecta a los sealizadores de SR.
CPSEQ Wb, Wn resta el contenido de los dos registros especificados, Wb - Wn, y si son igua
les brinca. La instruccin con nemnico CPSGT produce el brinco cuando la comparacin de los
operandos da un resultado mayor que cero, mientras que CPSLT produce el brinco con un resulta
do menor que cero y CPSNE si el resultado es distinto de cero. (Figura 10.18.)
SINTAXIS ENSAMBLADOR
DESCRIPCIN
PALABRAS
CICLOS
BTSC
F,*BIT4
1 (2 J ;
BTSC
VV/BIT4
1 (2 3}
BTSS
F,ffBIT4
1 {2 3)
BTSS
W s,BIT4
1 (2 3)
! CP
CP
W M UT5
CP
VVb/Ws
CPO
CPO
Ws
CPB
F:
CPB
W M L IT 5
CPB
Wb,VVs
CPSEQ
VVb,Wn
1 (2 3)
CPSGT
VVb/Wn
1 (2 3)
CPSLI
WbAVn
1 (2 3)
CPSNE
W b,W n
1 (2 3}
EJEMPLO 1
CP 0x1200
Compara mediante una resta WREG (W0) con el contenido de la direccin 0x1200. El resultado
no se guarda, slo afecta a los Jlags. (Figura 10.19.)
EJEMPLO 2
CPB.B RAM400
Compara el byte contenido en RAM400 con el byte de menos peso de W0 mediante una resta (usan
do CU). Slo afecta a los Jlags. Modo byte. (Figura 10.20. )
131
D ESPUS DE L A INSTRUCCIN
AN TES DE L A INSTRUCCIN
CP 0x1200
wo
RAM 1200
T ill
...................:::
0077
OOO
SR
wo
V .V /.V .Y A V ,
RAM 1200
SR
2377
2277
(N = 1)
0008
Figura 10.19. Efecto de la ejecucin de la instruccin C.P de! ejemplo en WQ, direccin 1200 y en el Re
gistro de Estado.
D E S P U S DE LA IN S TR U C C I N
A N T E S D E L A IN S TR U C C IO N
C PB.B R A M 400
W0
WO
RAM 400
R A M 400
SR
0008
11
0000
l t l
0823
z
SR
8823
Figura 10.20. Efecto de la ejecucin de la instruccin CPB.B del ejemplo en WQ, RAM400 y en el Re
gistro de Estado.
Hay un numeroso grupo de instrucciones cuya misin fundamental es la de controlar el valor del PC y
por tanto el flujo del programa en curso. La mayora de estas instrucciones vienen acompaadas por el
nemnico BRA que se refiere a la bifurcacin del PC consistente en aadir a su valor actual otro que
se incluye en la instruccin. Por ejemplo, BRA E x p r ts una instruccin de bifurcacin incondicional que
incrementa el valor actual del PC que es PC + 2 en el valor contenido en Expr (slitl) multiplicado por
2 ya que el PC slo opera con direcciones pares. La operacin que realiza esta instruccin es P C -< - (PC
+ 2) + 2 x slitl, que permite alcanzar una bifurcacin de 32 K instrucciones en ambas direcciones de
la actual. Variantes de BRA son todas las condicionales, como BRA C, que bifurca si el sealizador
C = 1, BRA NC. bifurca si C = 0, BRA GE bifurca si los sealizadotes N y OV indican que se ha pro
ducido un resultado igual o mayor que cero, BRA LE bifurca cuando el resultado es igual o menor que
cero, BRA LT bifurca cuando ha sido menor, BRA N bifurca si el resultado es negativo. BRA N Z cuan
do Z = 0, BRA OA si OVA = 1 y BRA SA si el flag de saturacin del acumulador A es 1.
Otro tipo de instrucciones que controlan el flujo del programa son las de llamada a subrutina,
CALL, que permiten una desviacin a cualquiera de las 32 K primeras instrucciones de la memoria
de programa. Antes de desviarse el PC su valor actual se salva en la Pila cuya cima est direccionada por W15.
La instruccin DO #114, Expr comienza salvando en la Pila ios registros sombra de DCOUNT. DOEND
y DOSTART y luego carga DCOUNT con el valor de #lit14, DOSTART con el del PC y DOEND con PC
+ 2 x Expr. Despus incrementa DL<2:0> (CORCN<10:8>) y ejecuta el cdigo comprendido entre
DOSTART y DOEND el nmero de veces que contenga DCOUNT
La instruccin REPEAT #Ht14 reptela instruccin que tiene a continuacin #lit14+1 veces. La instruc
cin REPEAT Wn repite ja instruccin siguiente Wn< 13:0> veces.
132
R E TFIE se usa para el retorno al programa principal desde la rutina de atencin a una interrup
cin. Restaura el SR, el PC y el del bit IPL<3>.
Adems de RETURN para el retomo de subrutinas tambin se emplea RETLW que restaura el
valor del PC y carga el literal que incluye (#lit 10) en un registro de trabajo Wn. (Figura 10.21.)
SINTAXIS ENSAMBLADOR
BRA
EXPR
RRA
Wn
BRA
CEXPR
BRA
CL.HXPR
BRA
GEU,EXPR
BRA
GT,EXPR
BRA
GTUFXPR
BRA
LE,EXPR
BRA
I.EU,FXPR
BRA
LT.EXPR
BRA
ITUEXPR
BRA
N,EXPR
BRA
NQXPR
DESCRIPCIN
PALABRAS
CICLOS
BIFURCACIN CALCULADA
BIFURCA SI "CARRY"='I,
1(2) U)
1(2) (I)
1(2) (1)
BIFURG\ SI ES MAYOR
1(2){1)
1(2) {1)
1(2X1)
1(2)(1)
BIFURCA SI ES MS PEQUEO
1(2)(1)
K2)(1)
BIFURCA SI FS NEGATIVO
1(2) (1)
1 (2 )0 )
BIFURCA SI N O FS NEGATIVO
1 (2)0)
1 (2 )0 )
NZ,EXPR
BIFURCA SI N O "ZERO"
1 (2 )0 )
BRA
OAEXPR
1(2)(1)
BRA
OB,FXPR
1 (2 )0 )
BRA
OVEXPR
1 (2 )0 )
BRA
SA.F.XPR
1(2) (1)
BRA
SB, EXPR
1 (2 )0 )
BRA
Z,EXPR
BIFURCA SI "ZERO"
1 (2 )0 )
CALL
FXPR
LLAMADA A SUBRUTINA
CALL
Wn
BRA
NN,EXPR
BRA
NOV, EXPR
BRA
il.IT14.EXPR
DO
Wn,EXPR
GOTO
EXPR
VA A UN A DIRECCIN
DO
GOTO
Wn
RCALL
EXPR
RCALL
Wn
REPEAT
LIT14
REPEAT
Wn
RETURN
1
1
RETORNO DF UN A INTERRUPCIN
RETFIE
RETLW
#1.1110,Wn
3(2) (2)
RETORNO CO N LITIO EN Wn
3(2) (2)
RETORNO DE U N A SUBRUTINA
3(2) (2)
(1): Las instrucciones de bifurcacin condicional se ejecutan en un c ic lo si no se hace la bifurcacin o en dos si se hace.
(2): Las instrucciones de retorno se ejecutan en tres ciclos, pero si hay alguna excepcin pendiente se ejecutan en dos.
Figura 10.21. Principales caractersticas de las instrucciones destinadas a controlar el flujo de control
del programa.
1 33
EJEMPLO 1
D E S P U S DE L A IN S TR U C C I N
BRA ALL
PC
0 0 2 00 0
PC
0 0 200A
SR
0 00 0
SR
000 0
Figura 10.22. Efecto de te ejecucin de la instruccin BRA del Ejemplo 1 on el Contador efe Programa
y en el Registro de Estado.
EJEMPLO 2
000A26 RETFIE
Retorno de la interrupcin. (Figura 10.23.)
A N T E S D E L A IN S TR U C C I N
D E S P U S DE L A IN S TR U C C I N
OOOA26 RETFIE
PC
OOOA26
PC
W15
01 0 2 3 0
W15
0834
RAM 0830
0 23 0
RAM 0 83 0
0 23 0
RAM 0832
8101
RAM 0 83 2
8101
CORCON
0001
CORCON
0001
SR
0 00 0
SR
0081
0 83 0
Figura 10.23. Efecto de la ejecucin de la instruccin RETFIE del Ejemplo 2 en el Contador de Progra
ma, W 5, las direcciones 0830 y 0832, CORCON y en el Registro de Estado.
El manejo de la Pila y su carga y descarga se realiza por su cima que es apuntada por el Stack Pointer (SP) cuya direccin est cargada en W 15. Inicialmente W15 se carga con el valor 0x0800 y ca
da vez que se almacena en la Pila una palabra de 16 bits, W15 se incrementa en 2 unidades, como
sucede, por ejemplo cuando se ejecuta la instruccin PUSH W4. Por el contrario, con la instruccin
134
POP se saca de la Pila el contenido de la cima y se deposita en el operando destino que incluya la
instruccin. Con POP W2 el valor de 16 bits de la cima de la Pila se carga en W2 y W 15 se dccrcmenta en 2 unidades.
La instruccin P U S IIF carga en la cima de la Pila el contenido de la posicin de la memoria de
datos con direccin F, pasando W 15 a incrementarse 2 unidades. Se puede expresar la operacin de
la siguiente forma: (F )-^- (TOS) y W15
W15 + 2. Con PUSH Ws se mete en la Pila Ws. La ins
truccin PUSH.D Wns salva en la Pila una doble palabra formada por el contenido de los registros
Wns y Wns + 1, incrementndose en 4 unidades W 15. Con PUSH.S se salvan en la Pila los regis
tros sombra. El contenido de los registros principales se copia en los registros sombra, que son WO,
W 1, W2 y W3 y los sealizadores de SR C, Z, O Y N y DC.
Las instrucciones con nemnico POP hacen la transferencia inversa de PUSH y decrementan a
W15.
La instruccin LNK #lit4 salva a W 14 (puntero del marco de la Pila) en la cim a de la Pila, in
crementa en 2 un idades a W15 y lo carga en W 14 que pasa a apuntar el marco de la Pila con un ta
mao #lit 14 bytes que est dedicado a manejar una llamada a subrutina. El W15 se carga con W 15
+ #litl4. La instruccin ULNK deshace la operacin de LNK cargando W14 en W 15, decrementando 2 unidades a W15 y cargando la cima de la Pila (TOS) en W14. Con LNK y UNLK en deter
minadas secuencias de llamadas a subrutinas se pasa a usar un marco de la Pila con su propio pun
tero W14 consiguiendo un gran aislamiento. (Figura 10.24.)
DESCRIPCIN
PALABRAS
CICLOS
POP.D
POP.S
CARGA F A TOS
SINTAXIS ENSAMBLADOR
LNK
#LITT4
POP
POP
Wd
PUSH
PUSH
Ws
CARGA Ws A TOS
PUSH.D
Wns
G \R G A REGISTROS SOMBRA
PUSH.S
U IN K
EJEMPLO l
PUSH W2
Carga W2 a TOS. (Figura 1025.)
EJEMPLO 2
LNK #0xA0
Une marco de pila. (Figura 10.26.)
135
D E S P U S DE L A IN S TR U C C I N
PUSH W2
......
W2
W2
W15
W15
RAM 1566
RAM 1566
SR
SR
Figura 10.25. Efecto de la ejecucin de la instruccin PU5H del ejemplo en W2, W15, direccin 1566
y en el Registro de Estado.
A N T E S DE L A IN STR U C C I N
D E S P U S DE L A IN S TR U C C I N
LNK #0xA0
W14
2000
W14
2002
W15
2000
W15
20A2
0000
RAM 2000
2000
0000
SR
0000
RAM 2000
SR
Figura 10.26. Efecto de la ejecucin de la instruccin LNK del ejemplo en W I4, W15, direccin 2000
y en el Registro de Estado.
SINTAXIS ENSAMBLADOR
CLRWDT
DI SI
LIT4
*XX* X X
DESCRIPCIN
PALABRAS
CICLOS
NOP
NO OPERACIN
NOPR
NO OPERACIN
REINICIALIZACIN
PWRSAV *T1
RESET
Con CLRWDT se pone a cero el registro contador del Perro Guardin, as como sus predi viso
res A y B. Tiene la misin de refrescar al WDT y evitar su desbordamiento.
136
La. instruccin DISI #lit14 sirve para deshabilitar las interrupciones comprendidas entre fos niveles de
prioridad 1 y 6 durante #lit 14+1 ciclos de instruccin, tras la ejecucin de dicha instruccin.
Con NO!5el procesador no realiza ninguna operacin consumiendo un tiempo de un ciclo de ins
truccin y ocupando en la memoria de programa una palabra, lo mismo que pasa con la instruccin
NOPR.
La instruccin PWRSAV #lit1 pasa al procesador al modo de bajo consumo Sleep si #Ht1 = 0 y a modo
ldlesi#lit1 = i. Tambin borra al contador del Perro Guardin.
Finalmente, RESET fuerza a todos los registros del ncleo y de los perifricos a tomar un valor
fijo. El bit SWR que es RCON<6> cuando vale 1 sealiza que se ha ejecutado una instruccin
RESET.
En la Figura 10.28 se muestra el valor que toman determinados registros despus de ejecutar la
instruccin RESET.
AN TES
DESPUS
PC
00 2 02 A
PC
0 0 0 00 0
wo
8901
wo
0 00 0
W1
08B B
W1
0 00 0
W2
B87A
W2
0000
W3
872F
.V,'.-,V
.V.V.'.V.' i
W3
0000
C 98 A
W4
0000
W5
AAD4
W5
0000
W6
981E
W6
0000
W7
1809
W7
0000
W8
C341
W8
0000
W9
9 0F 4
W9
0 00 0
W 10
F409
W 10
0 00 0
W11
1700
W11
0000
W 12
1008
W 12
000 0
W 13
6556
W 13
0000
W 14
231D
W 14
0000
W 15
1704
W 15
080 0
SPLIM
1800
SPLIM
0000
TB LP A G
007F
T B LP A G
0000
PSVPAG
W4
.....
0001
PSVPAG
0 00 0
CORCON
00F0
CO R C O N
0 02 0
(S A TD W =1)
RCON
0 00 0
RCO N
0 04 0
(S W R =1)
SR
0021
SR
0 00 0
(IPL. C=1 )
Figura 10.28. Estado que toman determinados registros despus de ejecutarse una instruccin RESET.
137
EJEMPLO l
CLRWDT
Pone a 0 el temporizador WDT. (Figura 10.29.)
A N T E S DE L A IN STR U C C I N
D E S P U S DE L A IN S TR U C C I N
CLRWDT
SR
0000
EJEMPLO 2
PW RSAV#1
Entrada a modo IDLE. (Figura 10.30.)
A M T E S DE L A IN STR U C C I N
D E S P U S D E L A IN S TR U C C I N
PWRSAV #1
SR
0020
1 (IPL = 1)
SR :
0020
(IPL = 1)
Figura 10.30. Efecto de la ejecucin de la instruccin PWRSAV del ejemplo en el Registro de Estado.
m&m
m sm
w m m
S im
Las instrucciones DSP se distinguen porque en su ejecucin interviene el Motor DSP que es un con
junto de recursos hardware que se representan en la Figura 11.1, en la que tambin se han colocado
algunas instrucciones representativas en los lugares donde se resuelven.
REGISTROS^ C-/5
W
AL B A N C O W
DEL BANCO W
Figura 1 1 .1 . Esquema del M otor DSP en donde se ejecutan las instrucciones DSP.
139
140
El M otor DSP es un circuito muy complejo dedicado a resolver las 19 instrucciones DSP del re
pertorio. Las entradas y salidas del M otor DSP son de 16 bits, pero internamente opera con valores
de 40 bits.
Una peculiaridad destacable de las instrucciones DSP es que operan con los acumuladores A y
B (ACCA y ACCB) de 40 bits de longitud. Cada acumulador se comporta como 3 registros que es
tn mapeados en la memoria de datos en la zona SFR, y se denominan ACCxU, ACCxH y ACCxL.
El primero consta de 8 bits y los otros dos tienen 16 bits cada uno. (Figura 11.2.)
ACCxH
39
32 31
ACCxL
16 15
Figura 11.2. Los acumuladores A y B del motor DSP se organizan en tres campos que se comportan
com o 3 registros. La x de la nomenclatura puede ser A o B.
Cada acum ulador dispone de sus propios bits sealizadores del resultado que se ha cargado
en l.
Cuando est configurado el procesador para trabajar con saturacin normal (32 bits) el valor a
cargar en el acumulador se hace en ACCxH: ACCxL, dejando ACCxU para guardar el signo. Cuan
do se trabaja con super saturacin el valor a alm acenar en el acum ulador ocupa
ACCxU: ACCxH: ACCxL.
Las instrucciones de carga y almacenamiento de los acumuladores con nemnicos LAC y SAC
(SAC.R) slo afectan a los 16 bits correspondientes al campo ACCxH. (Figura 11.3.)
32 31
16 15
Figura 11.3. Las instrucciones de carga (LAC) y almacenamiento (SAC) de los acumuladores slo
afectan al campo ACCxH.
Tanto para la familia dsPlC30F como para la dsPIC33F, hay un total de 19 instrucciones DSP y
todas ellas ocupan una palabra de la memoria de programa y todas tardan en ejecutarse un ciclo de
instruccin.
En la tabla de la Figura 11.4 se describen de forma resumida las 19 instrucciones DSP, junto con
los operandos que utiliza cada una de ellas. El valor #SLIT4 representa un valor con signo de 4 bits
que cubre un rango entre - 8 y +7. La funcin de los # S U T consiste en permitir el desplazamiento
del acumulador o de un valor determinado.
Los acum uladores A y B se utilizan en las instrucciones DSP para llevar a cabo operaciones ma
temticas.
Como los acumuladores ocupan 40 bits y los campos de datos X e Y son slo de 16 bits, el m
todo para guardar datos y cargar los acumuladores tiene que ser entendido.
NEMNICO
OPERANDOS
DESCRIPCIN RESUMIDA
ADD
Acc
ADD
CLR
PREBSQUEDA DE OPERANDOS
W m x Wm, Acc,
ED
W x, Wy, VVxd
VVm x W m, Acc,
EDAG
W x, Wy, VVxd
I.AC
MAC
MULTIPLICA Y ACUMULA
MAC
MOVSAC
........... .
MPY
W m x W n, Acc, [Wx],
VVxd, | W y], Wyd, AWB
W m x Wm, Acc, [Wx],
MPY
MPY.N
msc:
NEG
SAC
DE PREBSQUEDA DE OPERANDOS
W m x W n. Acc, [W x],
VVxd, [Wy], W yd
Acc
A cc, SLIT4, W do
SAC.R
A cc, ffSUT4, W do
SFTAC
Acc, #SLIT6
SFTAC
Acc, W n
SUB
Acc
Figura 11.4.
141
La parte A de la Figura 11.5 muestra que cada acumulador de 40 bits consta de:
El ACCxH se utiliza como registro destino para la carga del acumulador cuando se utiliza la ins
truccin LAC, y tambin como registro fuente para almacenar el acumulador en la instruccin
SAC.R. Todo esto viene representado en la parte B de la Figura 11.5, donde las partes superior y ba-
142
ja del acumulador estn sombreadas. En realidad, durante la carga del valor en el acumulador,
ACCxL se carga con 0 y ACCxU se extiende en signo para representar el signo del valor que se ha
cargado en ACCxH.
Cuando se habilita la saturacin normal (32 bits), las operaciones DSP (como por ejemplo ADD,
MAC, MSC, etc.) slo utilizan ACCxH: ACCxL (parte C de la Figura 11.5) y el ACCxU se utiliza
slo para mantener el signo del valor guardado en ACCxH:ACCxL. Por ejemplo, cuando se ejecu
ta una instruccin MPY, el resultado se almacena en ACCxH: ACCxL, y el signo del resultado se ex
tiende sobre ACCxU.
Cuando se habilita la super saturacin, se utilizan todos los registros del acumulador (parte D de
la Figura 11.5) y los resultados de las operaciones DSP se almacenan en ACCxU: ACCxH:ACCxL.
La ventaja de ACCxU es que incrementa el rango dinmico de los valores que se pueden almacenar
en el acumulador en la saturacin normal y en la super saturacin.
A)
B)
C)
D)
Existen dos formatos para realizar la suma de los acumuladores ACCA y ACCB.
t ADD
2. ADD
Acc.
Ws, #Sm, Acc.
Con el primer formato, el operando representado por Acc puede ser A o B. Si es A la suma de
los acumuladores se guarda en ACCA y si es B en ACCB.
ADDA
ADD B
143
EJEMPLO 1
En la Figura 11.6 se muestra el comportamiento de AC C A, ACCB y $R al ejecutarse la instruccin
ADD B.
AD D B
; ACCA + A CCB
A CCS
A N TES DE LA INSTRUCCION
DESPUS DE L A INSTRUCCIN
ADD B
00
E111
ACC A
2222
ACC B
00 7654 3210
-v.*.*. .../.v.vv.vv.v!-; *>:*:
0000
W8&
SR
0 0 E111
01
2222
5765 5432
0000
Cuando se usa el segundo formato de la suma se suma un valor de 16 bits especificado por el
contenido de un registro fuente Ws a la palabra alta del acum ulador (ACCxH). El operando fuen
te puede ser especificado directamente con un registro de trabajo (Ws), o bien de forma indirecla
en cuyo caso se admite el post y el pre incremento y decremento (fWs], [Ws++J, |W s -J , [++Ws]
y [--WsJ). Tambin se adm ite el direccionamiento indirecto con registro de desplazamiento u off
set ([Ws + WbJ). Antes de efectuarse la suma del operando al acumulador es posible efectuar un
desplazamiento con el valor con signo que indique #SLIT4.
EJEMPLO 2
ADD WO, #2, A
Suma el contenido de WO desplazado dos posiciones a la derecha (signo positivo del valor) con el
valor de ACCA, dejando el resultado en ACCA.
En el supuesto de la Figura 1.7, WO = 8000 Hex., que al ser desplazado 2 hits a la derecha, se
transforma WO = 2000 Hex., y al realizar la suma binaria con ACCAH = 7000 Hex., el resultado
se deposita en ACCAH = 5000 Hex. Figura 11.7.
DESPUS DE L A INSTRUCCIN
AN TES DE LA INSTRUCCION
AD D WD,#2.A
WO :
ACC A
SR
Figura 11.7.
W0
3000
00
7000
0000
OCOO
ACC A
SR
8000
0 0 9000
0000
0000
Resta al acumulador especificado en la instruccin el valor binario del otro acumulador, depositan
do el resultado en el primero.
144
SUB A
SUB R
; /l CCA - A CCB
; / l CCB - A CCA
A CCA
A CCB
La operacin se puede realizar con saturacin o sin ella controlando el bit SATB del registro
CORCON.
EJEMPLO 3
SUB A
;ACCA -A C C B
ACCA
A N TES DE LA INSTRUCCIN
DESPUS DE LA INSTRUCCIN
SUB B
ACC A
76
120F 098A
ACC A
52
1EFC 4D73
ACC B
23
F312
ACC B
23
F312
CORCON
0000
SR
0000
BC17
(SIN SATURACIN)
BC17
CORCON
0000
SR
1100
Borra o pone a 0 los 40 bits del acumulador especificado y tiene la opcin de prcbsqueda de operandos como preparativo para una instruccin MAC. Tambin permite el almacenamiento de resul
tados en el acumulador no especificado. Finalmente esta instruccin borra los sealizadores de sobrepasamiento y saturacin OA, OB, SA y SB.
EJEMPLO 4
CLR A, [W]+=2, W5, W13
Como se muestra grficamente en la Figura 11.9 esta instruccin borra el acumulador ACCA, car
ga W5 con el contenido de la direccin {W6J, post-incrementa 2 unidades W6 y almacena el otro
acumulador ACCB en W13.
ANTES DE LA INSTRUCCIN
DESPUS DE LA INSTRUCCIN
CLR A,[W 6]+=2,W 5,W 13
W5
8001
W5
F122
W6
3000
W6
3002
W13
C623
W13
ACC A
30 0067
ACC B
0 6428 3BDD
CONTENIDO EN 3000
SR
<*'vvX*
2345
6428
ACC A
00 0000 0000
ACC B
00 6428
F122
CONTENIDO EN 3000
0000
SR
3BDD
145
D E S P U S DE L A IN S TR U C C I N
NEG A
Con la instruccin M PY se multiplica el contenido de dos registros de trabajo y el producto con sig
no formado por 32 bits se extiende en signo hasta completar los 40 bits y se carga en el acumulador
especificado. Adems y con carcter opcional se puede realizar en la misma instruccin la prebsqueda de operandos como preparativo a una MAC.
Al ser posible multiplicar el contenido de un registro por s mismo, se puede calcular el cuadra
do de un registro.
La instruccin MPY.N multiplica un registro por el negado de otro, lo que proporciona el pro
ducto de dos registros y la negacin del resultado (ACC = -X Y).
EJEMPLO 6
M PY W 7 x W8, B, [W9]+=2,W5, [W U]-=2, W6
Con esta instruccin se multiplica el contenido de los registros W7 y W8 d e 16 bits cada uno obte
niendo un resultado de 32 bits que se extiende en signo hasta alcanzar los 40 bits depositando este
valor en ACCB. Adem s el dato contenido en la direccin apuntada p o r W9 se carga en W5 y lue
go W9 se incrementa en 2 unidades. Tambin el dato contenido en la direccin que apunta W ll se
carga en W 6 y luego W ll se decrementa en 2 unidades, como se refleja en la Figura 11.11. La m ul
tiplicacin es de tipo fraccionario y sin saturacin (CORCON = 0000 Hex.).
146
AN TES DE L A INSTRUCCION
M PY
W5
W6
6666
l'oyy.'
88FF
W7
6 71 F
W8
E3DC
1000
W9
W11
ACC B
DESPUES DE L A INSTRUCCION
ss
2000
F5 0000
DATO EN 1000
1001
DATO EN 2000
2002
CORCO N
0000
SR
0000
1122
DESPUS DE L A INSTRUCCIN
W1
009A
W1
0057
W8
1000
W8
1002
2300
W 10
ACC B
00
1111
27F5
W 10
5555
ACC B
00
0000
DATO EN 1000
0 07 F
D ATO EN 1000
DATO EN 2800
0028
D ATO EN 2800
0028
SR
0000
SR
0000
5CA4
0 07 F
El producto de dos registros de trabajo extendido en signo hasta 40 bits se resta del contenido del
acumulador especificado ACC = ACC -X Y. Opcionalmente se puede realizar la prebsqueda de
operandos y el almacenamiento de otro registro en el acumulador no usado.
147
EJEMPLO 8
M SC W l x W2, A, [ W ll + W12], W5, W13
Al contenido de ACCA se resta el producto de W l x W2 con extensin de signo hasta los 40 bits,
guardndose el resultado en ACCA. El contenido de la direccin form ada por W ll + W12 se de
posita en W5 y, finalm ente, el contenido de ACCB se deposita en W13.
Hay unas pocas instrucciones DSP que tienen la misin de cargar y almacenar los acumuladores
ACCA y ACCB y que se describen a continuacin.
Se carga el acumulador especificado con el contenido del registro fuente que admite un desplaza
miento expresado por un valor de 4 bits con signo (de -8 a +7). El dato contenido en el registro fuen
te es de tipo fraccionario (1.15) y se extiende en signo hasta el bit 39, rellenndose con ceros los 16
bits de menos peso antes del posible desplazamiento, que ser a la derecha si el signo del valor es
positivo y a la izquierda en caso contrario.
EJEMPLO 9
LAC [W2++ ], # -i, A
ACCA se carga con el valor contenido en la posicin direccionada por W2, que previamente es des
plazado 3 posiciones o bits a la izquierda. Despus W2 se incrementa en 2 unidades.
Si inicialmente W2 contiene el valor 1000 Hex. y en la direccin 1000 Hex. de la memoria existe el
dato 1221 Hex., para calcular los 40 bits que hay que cargar al acumulador hay que tener en cuen
ta los siguientes factores:
L) El valor 1221 Hex, hay que desplazarlo 3 posiciones a la izquierda convirtindose en 9108
Hex., como se indica en la Figura 11.13.
Figura 11.13 .A l desplazar 3 posiciones a la izquierda el valor 1221 Hex. se convierte en el 9108 Hex.
2.) Para completar los 40 bits que hay que cargar en ACCA se extiende el signo en los 8 bits
del campo ACCA U y se rellena con ceros A C C AL, quedando el valor a cargar en ACCA =
FF 9108 0000 Hex.
148
El contenido de los bits ACCxH <31:16> del acumulador especificado en la instruccin SAC se al
macena en el registro destino. Opcionalmente se puede desplazar el acumulador el nmero de posi
ciones expresado por un valor de 4 bits con signo.
EJEMPLO 10
SAC B, #4, [W4]
ACCB se desplaza a la derecha 4 posiciones y despus el campo ACCBH<31:16> se almacena en
la direccin apuntada por W4.
Si inicialmente ACCB = 00 I20F FFOO Hex. al desplazarse 4 posiciones a la derecha se convierte
en 00 0120 FFFO Hex., cuyos bits <31:16> conforman el valor a cargar en la direccin apuntada
p or W4.
Existe una variante de esta instruccin cuyo nemnico es S AC.R que se diferencia en que lo que
se almacena es el contenido redondeado de ACCxH.
Esta instruccin opcionalmente puede realizar la prebsqueda de dos operandos com o preparacin
de una instruccin MAC. Despus hay post-escritura del acumulador que no interviene que se al
macena en un registro.
EJEMPLO 11
M OVSAC A , fW 4 ]+ = 2 , W5, [W6J-=2 , W7, [W !3]+ = 2
Se comienza cargando W5 con el contenido de la direccin apuntada p o r W4. Se incrementa 2 uni
dades W4. Se carga W7 con el contenido de la direccin apuntada por W6. Despus se decrementa en 2 unidades W6 y, finalm ente, los 16 bits de ACCBH<31:16> se almacenan en la direccin
apuntada p or W l 3 y se incrementa 2 unidades W13.
149
Una variante de esta instruccin existe cuando el valor del desplazamiento viene dado por los 6
bits de menos peso de un registro de trabajo.
11.5. INSTRUCCIONES TIPO "M AC"
A unque slo existe una instruccin con nem nico M AC (M ultiplicar y A cum ular) y dos
variantes, la m ayora de las instrucciones DSP adm iten las caractersticas de esta instruccin
tpica de los DSP, que es fundamental para el clculo de los algoritm os ms com unes usados en
el procesam iento de las seales digitales. Se citan las caractersticas relevantes de este grupo de
instrucciones.
1 Son capaces de realizar dos prebsquedas de operan dos en la memoria. Normalmente se utiliza
el direccionamiento indirecto con post y pre decremento o incremento.
van a cabo la actualizacin de los registros utilizados en el direccionamiento indirecto incrementando o
s para el tamao de los datos manejados.
3o*
*
Ejecutan una operacin matemtica con alguno de los acumuladores de suma, resta, borrado, ne
gacin, multiplicacin o desplazamiento.
4* Permiten la post-escritura del otro acumulador que no interviene en la operacin matemtica. Las
CLR, MAC, MOVSAC y MSC.
150
ACCA = ACCA + WJ x W2
X([W8] + = 6) + Wl
Y([W10]+=2W2
4 o) M AC W h W2, A, [W8]+=2, W l, [W l]-= 2, W2, W13
Suma el contenido de ACCA con el producto de W l x W2 extendido en signo hasta los 40 hits y el
resultado lo deposita en ACCA. El contenido de la direccin apuntada p or W8 lo deposita en W l y
despus incrementa 2 unidades a WH. El contenido de la direccin apuntada p o r W ll lo deposita
en W2 y luego decrementa 2 unidades a W ll. Finalmente, realiza la post-escritura de ACCB en
W13.
ACCB = AC C B + W l x W2
X(fW 8] + = 2 ) + W l
Y ([W U ]-= 2 )-^W 2
ACCB
W13
5.) M AC B, W2 x W3, W2, [W5], W3, [W7]+=4
Suma el contenido de ACCB con el producto W2 x W3 extendido en signo hasta 40 bits y lo depo
sita en ACCB.
W2 se carga con el contenido de la direccin que guarda W5 y W3 se carga con el contenido de la
direccin apuntada p o r W7, que luego se incrementa.
ACCB = ACCB + W l x W2
X([W5])
W2
Y([W7J+=4)
W3
CAPTULO
Perifricos
y recursos
V
Existe una gran variedad de perifricos y dispositivos complementarios que se integran en los di
versos modelos de DSC para proporcionar al diseador todo lo que necesita su aplicacin en un so
lo chip. Los recursos que se implementan en los DSC son los siguientes:
1. Patitas de E/S.
2. Temporisadores de propsito general y Perro Guardin.
3. ConversorAD de 10 bits de afta velocidad y conversor AD de 12 bits de alta resolucin.
4. Mdulo de Captura.
5. Mdulo de Comparacin y PWM.
6. Mdulo especial PWM para control de motores.
7. Interfaz para Codificador de Cuadratura (QEI).
8. Interfaz para Conversor de Datos (DCI).
9. Interfaz de Perifricos Serie.
10. Mdulo UART.
1 /. Mdulo l?C
12. Mdulo CAN.
13. Controlador de DMA
Cada modelo DSC integra una cantidad de recursos variable segn su orientacin. En las tablas
de la Figura 12 .1 se presentan los perifricos y recursos que contienen los modelos dsPIC30F y los
modelos dsPC33F. Cabe destacar que una de las principales diferencias entre ambos es el hecho de
que el modelo dsPIC33F dispone de un controlador de DMA.
Hay modelos DSC de la familia dsPIC30F con 54 patitas de E/S que multiplexan otras funciones
para perm itir el manejo de los perifricos integrados. Todas las patitas de E/S pueden suministrar
151
152
M O D E L O S d s P IC 3 0 F D E P R O P S IT O G E N E R A L
M D U LO
TEM PO R IZ A D O R ES
M D U LO -
16 BITS
CAPTURA
CO M PA RA D O R/
PW M N ORM AL
......................
dsPIC30F3014
40/44
30
dsPIC30F4013
40/44
30
dsPlC30F5011
64
52
dsPlC30F6011
64
i dsPIC30F6012
64
C O N V ER S O R AD
CO D EC
12 BITS
100KBPS
UART
SPI
13ch
AC97, |2S
13ch
AC97, |2S
16ch
52
16ch
52
AC97, |2S
16ch
CAN
fe
dsPIC
D ISPO SITIV O
in t e r f a z !
PRCTICO
80
68
AC97, |2S
16ch
dsPl30F6013
80
68
16ch
dsPIC30F6014
80
68
AC9 7, |2S
16ch
dsPC30F6011A
64
16ch
dsPIC30F6012A
64
AC97, |2S
16ch
dsPIC30F6013A
80
16ch
dsPIC30F6014A
80
AC97, |2S
16ch
DE APLICACIONES
dsPIC30F5013
DISEO
PATITAS
LNEAS
E/S
M O D E L O S d s P IC 3 0 F P A R A C O N T R O L D E M O T O R E S Y S IS T E M A S D E A L IM E N T A C IO N
C O N T R O L C O N V ER SO R AD
M O TO RES
10 BITS
500KBPS
PWM
PATITAS
LNEAS
E/S
TEM PO R IZ A D O RES
16 BITS
M D U LO
CAPTURA
M D U LO
CO M PA RA D O R/
PW M N ORM AL
dsPIC30F2010
28
20
6ch
dsPIC30F3010
28
20
dsPIC30F4012
28
20
dsPIC30F3011
40/44
30
dsPIC30F4011
40/44
30
dsPIC30F5015
64
dsPIC30F6010
dsPIC30F5016
D ISPO SITIV O
Q EI
UART
SPI
l2C
CAN
6ch
6ch
6ch
6ch
6ch
6ch
9ch
6ch
9ch
52
8ch
16ch
80
68
8ch
16ch
80
52
8c h
16ch
Figura 12.1. Relacin de perifricos y recursos que integran los modelos dsPIC30F y dsPIC33F.
M O D E L O S d s P IC 3 0 F P A R A M A N E J O D E S E N S O R E S
M D U LO
C O N V ER S O R A D
CO M PA RAD O R/
PWM ESTNDAR
12 BITS
100KBPS
UART
SPI
fich
8c h
24
.5
10ch
24
10ch
PATITAS
LNEAS
E/S
M D U LO
CAPTURA
dsP!C30F2011
18
12
dsP O 0F 3012
18
12
dsPIC30F2012
28
dsPIC30F3013
28
D ISPO SITIV O
rc |
PATITAS
M D U LO
LNEAS TEM PO R IZA D O RES M D U LO
INTERFAZ CO N V ER SO R
UART
CO M PA RAD O R/
E/S
16 BITS
CAPTURA
CO D EC
AD
PWM N ORM AL
SPI
I2C
CAN DMA
r...
d$PIC33FJ64GP206
64
53
1 A/D, 18ch
dsPIC33FJ64GP306
64
53
1 A/D, 18ch
ir' v
dsPIC33FJ64GP310
100
85
I A/D, 32ch
64
53
2 A/D, 18ch
dsPIC33FJ64GP708
80
69
2 A/D, 24ch
dsPIC33FJ64GP710
100
85
2 A/D, 32ch
dsPIC33 Fj 128GP206
64
53
1 A/D, 18ch
. - ___
dsPIC33FJ128GP30f>
64
53
1 A/D, 18ch
dsPIC33FJ 128GP310
100
85
1 A^D, 32ch
dsPIC33FJ 128GP706
64
53
2 A/D, 18ch
dsPIC33FJ128GP708
80
69
2 A/D, 24ch
100
85
2 A/D, 32ch
:dsPIC33FJ256GP506
64
53
1 A/D, 18ch
dsPIC33FJ256GP510
100
85
1 A/D, 32ch
100
85
2 A/D, 32ch
Figura 12.1. Rotacin de perifricos y recursos que integran os modelos dsPiC30F y dsP!C33F. (Continuacin)
54
dsPIC. DISEO
l i l i
CONTROL
MDULO
CONVERSOR
LNEAS TEMPORIZADORES MDULO
COMPARADOR/ MOTORES
AD
CAPTURA
E/S
16 BITS
PWM NORMAL
PWM
IvXj v!
re CAN DMA
V'vv>
64
53
8ch
1 A/D, 16ch
i :- :
ds Pl C3 3 FJ64 MC-5 08
80
69
8ch
1 A /U 18ch
100
85
8ch
1 A/D, 24ch
64
53
8ch
2 A/D, 16ch
dsPIC33FJ64MC710
100
85
8ch
2 A/D, 24ch
dsPlC33FJ128MC506
64
53
8ch
1 A/D, 16ch
dsPIC33FJ128MC510
100
85
8ch
1 A/D, 24ch
dsPIC33FJ128MC706
64
53
8ch
2 A/D, 16ch
dsPIC33FJ128MC708
80
69
8ch
2 A/D, 18ch
dsPIC33Fj'l 28MC710
100
85
8c h
2 A/D, 24ch
dsPIC33FJ256MC510
100
85
8ch
1 A/D, 24ch
dsPIC33FJ256MC710
100
85
8ch
2 A/D, 24ch
dsPIC33FJ64MC510
Figura 12.1. Relacin de perifricos y recursos que integran los modelos dsPIC30F y dsPIC33F(Continuacin)
DE APLICACIONES
dsPIC33FJ64MC506
PRCTICO
DISPOSITIVO
155
o absorber hasta 25 mA. Las patitas de E/S que multiplexan seales correspondientes a los perif
ricos dejan de ser E/S digitales cuando estn funcionando dichos perifricos.
Las patitas de E/S se agrupan para conformar las puertas de E/S, cada una de las cuales tiene aso
ciados 3 registros:
TRISx: Registro de Direccin de los Datos. Cada uno de sus bits determina la direccin de la patiUi de E/S asociada.
' valor lgico de las patitas
..
El registro LATx resuelve los problemas que provocan las instrucciones que leen, modifican y
escriben las puertas. Una escritura sobre PORTx o LATx escribe un valor sobre el latehn de la puer
ta. Una lectura de PORTx recoge el valor de las patitas de E/S. pero una lectura de LATx lee el va
lor guardado en el latch o registro cerrojo de la puerta. En la Figura 12.2 se muestra el esquema
de interconexin de una patita de E/S.
El nmero de patitas de E/S depende del modelo de DSC que se trate. As hay dispositivos con s
lo 12 patitas de E/S dedicados para el manejo de sensores, como los dsPIC30F2011/3012/2012/3013,
y otros que llegan a 68, como los dsPTC30F5013/6013/6014/6010, y que disponen de las puertas
PORTA, PORTB, PORTC, PORTD, PORTE, PORTF y PORTG.
Existen hasta 24 patitas de E/S que tienen la posibilidad de generar peticiones de interrupcin al
producirse un cambio de su estado lgico. Dichas patitas, llamadas CN, se programan con 4 regis
tros asociados CNEN1 y CNEN2, que activan o desactivan la peticin de interrupcin, y CNPU1 y
CNPU2, que habilitan o deshabilitan el circuito pull-up que tiene cada una de estas patitas.
156
1 2.3 . TE M P O R IZAD O R ES
Segn el modelo de DSC puede contener de 3 a 5 temporizadores de 16 bits en los dsPIC30F y has
ta 9 en el caso de los dsPIC33F, llamados T1M ER1, TTMER2, T1M ER3,... TIMER9, algunos de los
cuales pueden concatenarse por parejas conformando temporizadores de 32 bits.
El TIMER1 funciona como temporizador tipo A, los TIM ER 2 y 4 funcionan como temporiza
dores tipo B, y los restantes como tipo C. Los de tipo B se concatenan con los de tipo C para confi
gurar temporizadores de 32 bits.
Para controlar el comportamiento de los temporizadores, cada uno dispone de 3 registros de 16
bits cada uno.
TxIE: Contiene los bits de permiso para las diversas interrupciones de los Timer.
TxlF: Sus bits actan como sealizadores del desbordamiento de los temporizadores.
TxlP<2:0>: Son tres bits dedicados a cada temporizador que establecen el nivel de prioridad de
la interrupcin correspondiente.
157
12.4. CONVERSORES AD
Los conversores AD integrados en los DSC pueden ser de 10 hits de resolucin y alta velocidad, o
bien, de 12 bits de alta resolucin. Convierten una seal analgica de entrada en un valor digital de
10 o 12 bits. En la Figura 12.3 se muestra un esquema de la estructura interna del conversor AD de
10 bits.
o
"?V
BUFFER
i
16 PALABRAS 3
FORMATO
AN 15
EN TRAD AS
A N A L G IC A S
158
Tiene la misin fundamental de medir el tiempo que dura un acontecimiento externo producido por
una seal que se aplica a una de las patitas de entrada del mdulo y que se mide con el TIMER2 o
el TIMER3. Es muy til en aplicaciones que hay que controlar la frecuencia o el periodo de los im
pulsos a analizar.
Los modos de trabajo se distinguen por el momento en el que se realiza la captura de la seal a
medir, y son:
.
1.
. 2.
3.
4.
.v C v !-v> *
...
. v i v ; - -*
> > .
11
.
TMR2
TM R3
12.6.
159
M D U L O DE CO M PA R A C I N /PW M
Este recurso es muy eficaz en aquellas aplicaciones que precisan generar impulsos de anchura va
riable y los que realizan operaciones simples de PWM. Para estas ltimas tareas existen algunos mo
delos de DSC con un mdulo complejo e independiente especializado en PWM para control de mo
tores que ser explicado ms adelante.
Tienen los siguientes modos de trabajo:
- M odo de comparacin simple
- Doble modo de comparacin de salida
- Pulso simple de salida
- Pulso continuo de salida
- Modulacin simple de anchura de pulso
- Con proteccin de errores en la entrada
- Sin proteccin de errores en la entrada
El funcionamiento simplificado de este dispositivo se basa en la comparacin del valor almace
nado en un registro con el de un temporizador (TIMER2 o TIMER3). Cuando coinciden dichos va
lores se genera un pulso o un tren de pulsos en una patita de salida. Es capaz de generar interrup
ciones. (Figura 12.5.)
REGISTRO DATO COMPARACIN M-
FLAG
INTERRUPCIN
OCxlF
OCx
ySj
PATITA
SALIDA
SALIDA
, OCFA
a
MPX
&
O C TS E L
4*
13
TIMER2
ir
TIMER3
OCFB
M px
MODO OPERACIN
SEAL
TIMER2
SEAL
TIMER3
160
Sirve para generar un tren de impulsos de anchura variable que permite variar la potencia que se en
trega a un motor y regular su velocidad con precisin.
Existen grupos de dispositivos DSC destinados al control de motores, pudiendo ser de dos tipos
en funcin de las patas del mismo: mdulo de 8 salidas si el dispositivo es de 64 palas o ms y otro
de 6 salidas en caso de un nmero menor. El mdulo PWM de los los dispositivos dsPIC30F tiene
las siguientes caractersticas:
- - -
- ' ...
'
1 Dispone de 8 patitas de salida PWM y 4 generadores de impulsos de anchura variable con 16 bits
de resolucin. Las 8 patitas de salida PWM se agrupan por parejas, una por cada generador, pa
ra controlar la polaridad de las seales de salida, que pueden ser iguales o invertidas segn el ti
po de motor al que se apliquen (PWM4H-PWM4L, PWM3H-PWM3L, PWM2H-PWM2L y PWM1HPWM1L). Tambin hay 2 patitas Fault A y Fault B que determinan los fallos y generadores de
tiempo muerto. W X V / . < \ V A W
2 Modos de salida por flanco y por centro alineado.
3/' Modo de generacin de pulso nico.
n D o s c a D B M B M B B a ia ia H M
C O N TR O L
S O B R E P A S A M IE N T O
Se comienza cargando el ciclo de trabajo y la seal para cada generador en sus respectivos re
gistros PDCx (Ciclo de trabajo). Tambin se programan los registros de configuracin para deter
minar el tipo de seal que se desea en cada generador. Luego, en el registro PTPER (Registro base
1 61
1) Modo ormui
Cada vez que el temporizador PTMR alcanza el valor del registro PTPER se genera una interrup;- cin y el temporizador vuelve a 0.
2) Pulso nico
Slo funciona cuando se pone el bit de control PTEN = 1 y se iguala el valor del temporizador PTMR
con el del registro PTPER, generndose un solo pulso por interrupcin y pasando PTEN = 0.
3) Modo ascendente/descendente
Cuando el temporizador PTMR alcanza el valor de PTPER comienza a contar en sentido descen
dente y cuando llega a 0 se produce una interrupcin y pasa a contar en modo ascendente.
Como no es posible que las salidas PWMxH y PWMxL conmuten a la vez, $e introduce un tiempo
muerto que se controla desde los registros DTCON1 y DTCON2.
4) Disparo especial
En este modo es posible sincronizar el mdulo PWM con el conversor AD para llevar a cabo ope
raciones combinadas.
12.8. M D U L O UAR T
Los DSC disponen de uno o ms UART, segn el modelo que se trate. El UART es un elemento des
tinado a soportar la comunicacin serie asincrona y funciona de forma bidireccional, adaptndose
al trabajo de muchos perifricos. La comunicacin se realiza con dos lneas, una para la transmisin
UTX y otra para la recepcin URX, entrando y saliendo los bits a una frecuencia controlada inter
namente.
El UART dispone de un generador de baudios con un predivisor de frecuencia que se encarga de
generar la frecuencia de trabajo del mdulo.
'
GENERADOR
DE BAUDIOS
RECEPTOR
.......
"ART:
UART
W L m J m
TRANSMISOR
UART
vXwiv :
URX
162
En la Figura 12.7 se ofrece el esquema por bloques del mdulo UART, en el que se distinguen
los 3 elementos hardware principales del mdulo UART: generador de baudios, transmisor asincro
no UART y receptor asincrono UART. Funciona en modo full-duplex con datos de 8 o 9 bits, 1 o
2 bits de STOP y un bit de paridad par o impar.
El mdulo UART est compuesto por los siguientes registros:
UMODE: Registro de Modo
USTA: Registro de Control y Estado
URREG: Registro de Recepcin
UTREG: Registro de Transmisin
UBRG: Registro del generador de Baudios
El comportamiento del UART se gobierna desde los registros USTA, URREG y UTREG.
Puede generar una interrupcin tanto el bloque transmisor como el receptor y el margen de fre
cuencias que soporta abarca desde 38 Hz hasta 2,5 Mbps.
12.9. M D U L O SPI
Consiste en un interfaz serie sncrono que es muy empleado para establecer la comunicacin con microcontroladores, memorias EEPROM, conversores AD, etc. Todos los modelos DSC disponen al
menos de uno de estos mdulos SPI.
En la Figura 12.8 se ofrece el esquema por bloques del mdulo SPI, en el que se distinguen varios
registros SFR que soportan el manejo de la informacin con el bus de datos. Uno se llama SPIBUF y
guarda los datos que se envan y se reciben internamente y consta de dos registros unidireccionales de
16-bits, denominados SPIRB y SPITB, que guardan el dato recibido o el que hay que transmitir, res
pectivamente. Otro es el SPISR que desplaza los bits de datos de entrada y de salida al registro SPI
BUF. Otro ms es el registro de control SPTCON que gobierna al SPIRB y al SPITB. Y, finalmente,
el registro SPISTAT contiene los bits de estado que informan de las condiciones de trabajo.
18
BUS DE DATOS
-----------
PREESCALER
1 63
En el esquema de la Figura 12.8 la patita SDI es por la que se introducen los datos en serie y la
SDO por la que salen. SCK es la patita que introduce los impulsos de reloj en el modo maestro,
mientras que en modo esclavo acta como salida. SS# es la patita mediante la que se activa el mo
do esclavo con nivel lgico bajo.
12.10. M D U LO l2C
Dada la popularidad y uso del protocolo de comunicacin I2C los DSC disponen de un mdulo que
permite su adaptacin y que es muy empleado en las transferencias de informacin con otros microcontroladores, registros de desplazamiento, conversores AD,.ctc.
El mdulo I2C (Inter-lntegrated-Circuit) tiene el hardware necesario para trabajar en modo es
clavo y en modo maestro. Como se aprecia en la Figura 12.9 todos los elementos que se conectan
al bus I2C lo hacen a travs de dos lneas, SDA (Datos) y SCL (Reloj).
Figura 12.9. Para la comunicacin c.on el protocolo PC slo se utilizan dos lneas, una para los datos
(SDA) y la otra para el reloj (SCL).
En este protocolo las direcciones de los elementos de la red pueden especificarse con direccio
nes de 7 o 10 bits. Iniciada la transferencia de informacin se enva la direccin del elemento y al
comprobar que le corresponde genera una seal de reconocimiento ACK que permite el progreso
de.la transferencia.
Los registros I2CCON e I2CSTAT son los registros de control y estado del mdulo I2C, respec
tivamente. Como registro receptor acta I2CRCV y com o transmisor el I2CTRN. La direccin de
cada esclavo viene almacenada en el registro I2CADD y, finalmente, el registro I2CBRG contiene
el valor de recarga del generador de frecuencia.
164
12.11 M O D U L O D C I
El mdulo interfaz del Conversor de Datos (DCI) permite una sencilla comunicacin con muchos
dispositivos comunes como los codificadores/decodificadores de audio (CODEC), telefona, reco
nocimiento de voz, eliminacin de eco, los conversores AD/DA, etc., soportando los siguientes ti
pos de interfaces:
.. .
La aplicacin ms interesante del mdulo DCI es la destinada a las aplicaciones de voz y soni
do de alta calidad con frecuencias comprendidas entre 8 y 48 KHz que trabajan con palabras co
dificadas. El tamao de la palabra puede programarse hasta 16 bits, con 16 ranuras de tiempo para
una trama de un mximo de 256 bits que puede almacenar hasta 4 muestras sin la supervisin de la
CPU. Est configurado para recibir y transmitir datos en espacios mltiplos de 16 bits, operacin
que se hace de forma transparente para el usuario.
Consta de cinco registros de control y uno de estado:
DCICON1: bits de habilitacin y modo.
DC1CON2: bits para configurar la longitud de la palabra, de la trama y el buffer.
DC1CON3: configura el reloj.
DC1STAT: muestra informacin sobre el estado.
RSCON: configura la recepcin de datos.
TSCON: configura la transmisin de datos.
A estos registros se les aaden cuatro para la transmisin TXBUF0...TXBUF3 y cuatro para la
recepcin RXBUF0...RXBUF3.
12.12 M D U L O CAN
El mdulo CAN (Controller Arca NetWork) consiste en un interfaz serie muy empleado para la co
municacin con otros perifricos u otros modelos de microcontroladores.
El bus CAN fue usado por primera vez en 1980 por la industria del automvil para solventar la
gran densidad de cableado entre sus diferentes elementos y el ruido ambiental. Con el bus CAN se
reduce el cableado y se evitan las interferencias de los ambientes ruidosos.
Los mensajes que se transmiten por este procedimiento carecen de los campos de direccin pa
ra el origen y para el destino, en su lugar se emplea un identificados Los nodos conectados al bus
CAN analizan el identificador y deciden si recogen o no la trama.
El mdulo CAN que incorporan los DSC satisface las especificaciones de la norm a o versin
2.0B que utiliza identificadores de 11 y/o 29 bits. Tambin soporta los protocolos 1.2, 2.0B Pasivo,
2.0B Activo y 2.0A.
Para la comunicacin el mdulo CAN maneja 2 buffer de entrada con prioridad y 3 de transmi
sin. La longitud de los datos est comprendida entre 0 y 8 bytes y la trama puede ser estndar o ex
tendida. Puede generar interrupciones cuando se producen errores.
165
12.13 M D U L O QEI
El mdulo QEI (Interfaz del Codificador de Cuadratura) proporciona una cmoda adaptacin de los
codificadores incrementales usados para la deteccin de la posicin y la velocidad en los sistemas
rotacionales propios de los ejes de motores.
166
A) FUENTE DE LUZ
LUZ
B) DISCO RANURADO
Figura 12.10. Principio de funcionamiento de un codificador incremental usado en e l control del posicionamiento del eje de un motor.
167
El Perro Guardin es un temporizador dedicado cuya nica misin es vigilar el procesamiento del
flujo de control y reinicializar el procesador cuando se produzca un fallo. Fundamentalmente detecta
situaciones en las que se queda colgado el procesador porque se ha metido en un bucle infinito o es
t esperando que suceda una condicin que nunca ocurre.
El WDT se program a con un valor para que se desborde y genere un Reset al cabo de un cierto
tiempo. A lo largo del programa y en puntos estratgicos se colocan instrucciones CLRWDT que re
frescan o ponen a 0 al WDT y evitan que se desborde. Cuando el procesador se enreda en un blo
que del programa del que no sale, no hay refresco y al desbordarse el Perro Guardin se genera un
Reset.
El Perro Guardin es optativo y puede deshabilitarse mediante el bit FWDTEN ubicado en el re
gistro de configuracin FWDT.
Los dispositivos dsPlC30F tienen 2 modos de funcionamiento de bajo consumo que pueden ser
seleccionados mediante la ejecucin de la instruccin PWRSAV.
SLEEP: tanto la CPU como los perifricos dejan de funcionar al detenerse el reloj del sis
tema mediante la inhabilitacin de los osciladores principal y externo respectivamente.
Este es el modo en que menos potencia consume.
IDLE: la CPU se deshabilita y deja de ejecutar instrucciones, pero los perifricos siguen
funcionando aunque pueden ser desactivados opcional mente. En este modo slo se des
habilita el oscilador principal.
Los dsPJC33F tienen tambin el modo de bajo consumo DOZE que consiste en rebajar la fre
cuencia de trabajo para disminuir la energa consumida.
Para salir de los modos de bajo consumo existen tres causas:
Ia) Interrupcin.
2a) Rcset.
3a) Desbordamiento del W DT
12.15 EL C O N T R O L A D O R D M A
Adems de todos los perifricos que integran los dsPIC30F. los dsPIC33F disponen del Controla
dor de Acceso Directo a Memoria (CDMA).
El controlador DMA es un dispositivo que permite transferir datos directamente entre la memo
ria y los perifricos a gran velocidad y sin la participacin de la CPU que puede dedicarse a otras
misiones. (Figura 12.11.)
168
Figura 12.11. El Controlador DMA permite la transferencia directa y veloz de datos entre la memoria y
los perifricos sin intervencin de la CPU.
Los dsPIC33F y los PTC24H para soportar el DMA utilizan una memoria de doble puerto (DPSRAM), dedicando uno de ellos a la comunicacin con la CPU y el otro con los perifricos. En la Fi
gura 12.11 se ha simplificado el diagrama por bloques que representa el funcionamiento del CDMA.
Cada vez que un perifrico intenta transferir datos con la memoria genera una interrupcin al CD
MA que pasa a controlar las lneas de los buses de datos, direcciones y control y organiza el tras
vase directo y veloz de la informacin entre el perifrico y la memoria de datos.
En los modelos dsPIC33F, el CDMA dispone de 8 canales para soportar las transferencias y la
existencia de dos bus es de datos independientes, uno entre la CPU y los perifricos y el otro entre
la memoria y los perifricos elimina gran parte de las colisiones, pudiendo realizar diversos acce
sos simultneos:
1 Es posible realizar una lectura de una misma posicin de un perifrico o de la DPSRAM desde la
CPU o desde el CDMA.
2. Es posible escribir simultneamente dos posiciones diferentes de la memoria o del perifrico des
de la CPU y eJ CDMA.
3 Se produce una colisin si se intenta escribir la misma posicin de la memoria o del perifrico des
de la CPU y desde el CDMA a la vez. En este caso prevalece la escritura de la CPU y se genera
una excepcin que recoge los detalles que han producido la colisin, as como tambin se activa
el sealizador de colisin correspondiente al canal en el que se ha producido.
Como se muestra en la Figura 12.13 la comunicacin de los perifricos mediante dos buses con
la CPU y el CDMA permite implementar todo tipo de transferencias bidireccionales y directas en
tre los perifricos y la DPSRAM.
La gran ventaja del CDMA es la gran velocidad con la que se transfieren datos entre la memo
ria y los perifricos sin afectar al trabajo de la CPU y sin rebajar el rendim iento del sistema. A tra
vs de los 8 canales del CDMA se puede transferir bidircccionalmente un dato de tamao byte o
169
B LO Q
DATOS
CO N TR O LADO R
SRAM:-
DPSRAM
CONTROL
DMA LISTO
PER 1
CNALS DMA
IN TE R R U P C IO N
BU S D A TO S D M A
D IR E C C I N D P S R A M
D IR E C C I N P E R IF R IC O
B U S D A TO S C PU - P E R IF E R IC O S
Figura 12.12. El CDMA de los dsPIC33E dispone de 8 canales independientes para soportar las trans
ferencias directas entre la DPSRAM y ios perifricos.
TEMPORIZ
TEMPORIZ
BUSTJTSSli 7I"
UART
ECAN
ECAN
Figura 12.13. Median te el control de los canales del CDMA se puede atender a un gran nmero de
perifricos.
palabra en un ciclo. Cada bloque de datos que puede transferirse puede alcanzar los 2.048 bytes o
palabras. En el CDM A existe un esquema de prioridades entre los canales para los casos de coli
sin entre ellos.
Con la finalidad de conseguir el mximo rendimiento en la transferencia con DM A el contro
lador tiene 4 modos de funcionamiento que permiten adaptarse a las estructuras de datos que se
manejen.
170
IN T E R R U P C IO N CPU
A L C O M P LE TA R
T R A N S F E R E N C IA
D EL BLO Q U E
Figura 12.14. Representacin grfica del funcionamiento del modo de disparo nico en el CDMA.
E S P A C IO D IR E C C IO N E S D P S R A M
IN T E R R U P C I N CPU
A L C O M P LE TA R
T R A N S F E R E N C IA
D E L BLO Q U E
Figura 12.15. Representacin grfica del funcionamiento del modo de trabajo de autorepeticin del
CDMA.
En el modo ping-pong se manejan 2 buffer de datos y cada vez que se completa la transmisin
de uno de ellos se configuran automticamente los canales para comenzar la transferencia del otro.
(Figura 12.16.)
1 71
E S P A C IO D IR E C C IO N E S D PSRAM
BUFFER
C O U N T = D M A C N Tx
j^ >
IN T E R R U P C I N CPU
AL CO M PLETAR
TR A N S F E R E N C IA
B U FFE R B
----- ------------------------|
C O U N T = D M A C N Tx
INTERRUPCIN CPU
N
AL CO M PLETAR
T R A N S F E R E N C IA
EXTEN SI N
DE C ER O S
D IR E C C I N D PSRAM
______
D IR EC C I N BASE
D ES D E D M A S Tnx
i!
:
D IRECCI N BASE
R E S P O N S A B ILID A D
DEL U S U A R IO
Segunda parte
Programacin y simulacin
de aplicaciones
A plicacin 0.
A plicacin 1.
D IS E A N D O FILTROS.............................................................................................. 181
A plicacin 2.
A plicacin 3.
P O N IE N D O EN M ARCH A EL S IM U L A D O R ........................................................215
A plicacin 4.
A plicacin 5.
A plicacin 6.
A p lic a c i n 7.
PERIFRICOS A V A N Z A D O S ....................................................................................259
A pndice A.
A pndice B.
. . ..
v.*.
... .
APLICACIN
V lV
m
......
Las herramientas
de desarrollo
A 0.1 . IN T R O D U C C I N
En esta segunda parte del libro, y tras haber estudiado el aspecto terico de los controladores dsPIC,
se aborda un estudio ms prctico de los mismos, mediante el desarrollo de varias aplicaciones. As,
se estudiar desde cmo comenzar a programar las aplicaciones, compilarlas y simularlas en el orde
nador, hasta desarrollar alguna aplicacin de los perifricos avanzados introducidos en estos controla
dores para el tratamiento digital de seales. As mismo, al final de cada captulo una seccin de autoevaluacin, servir al lector para conocer su evolucin en la asimilacin de los conceptos descritos.
Para llevar a cabo esta tarea, esta segunda parte se encuentra dividida en varias aplicaciones prc
ticas explicadas con detenimiento, tanto para el lector aventajado que ya ha programado con ante
rioridad los microcontroladores PC, como para el nefito.
En este captulo introductorio se analizan las herramientas a emplear, as como las caractersti
cas de la familia del dsPIC utilizada tanto en esta segunda parte como en la tercera, en la que el lec
tor podr comprobar prcticamente los conocimientos adquiridos mediante ejercicios sobre circui
tos reales, utilizando la taijeta PIC School preparada a tal efecto.
Las caractersticas de estos dispositivos requieren poseer una base terica sobre el tratamiento di
gital de seales. Esta teora de seales no es objeto de este libro.
El controlador elegido para realizar todas las aplicaciones y laboratorios, tanto de la segunda como
de la tercera parte del libro, es el dsPIC30F4013 perteneciente a la familia de propsito general, que
ha sido seleccionado por varias de sus caractersticas.
En primer lugar pertenece a una familia de propsito general, que lo hace especialmente intere
sante para poder adentrarse en el estudio de todas las posibilidades de los dsPIC. Por otro lado, se
trata de un DSC con encapsulado PDIP (Plstic Dual In-line Package), que permite una mayor sen
cillez de montaje sobre un circuito electrnico frente a otro tipo de encapsulados. Sin embargo, una
pequea desventaja de este modelo es que no dispone de hardware especfico para el tratamiento de
PWM, muy til en el control de motores.
175
176
AO .2.1. D ia g ra m a de co n e xio n a d o
M CLR
AN0A/REF+/CN2/RB0
AN1A/REF-/CN3/RB1
AN2/SS1/LVDIN/CN4/RB2
AN3/CN5/RB3
AN4/IC7/C N6/R B4
AN5/IC8/CN7/RB5
PGC/EMUC/AN6/OCFA/RB6
PGD/EMUD/AN7/RB7
AN8/RB8
VDD
vss
OSC1/CLKIN
OSC2/CLKO/RC15
EM UD1/SOSO I/T2CK/U1ATX/CN1 /RC13
EMUC1/SOSCO/T1CK/U1ARX/CNO/RC14
INT0/RA11
IC2/1NT2/RD9
OC4/RD3
V ss
n 1
C
40 I] A V D D
39 1 AVSS
36 j AN9/CSCK/RB9
37 1 AN10/CSDI/RB10
2
3
4
n
C
C 5
fz 6
H7
C 8
C 9
J= 10
n ti
n 12
n 13
C 14
C 15
H 16
C 17
10
Q 19
q 20
"O
o
Ca>
o
2
o
36
35
34
33
H AN11/CSDO/RB11
3 AN12/COFS/RB12
3 EMUC2/OC1/RDO
H EMUD2/OC2/RD1
VDD
32
31 H V SS
30 b C1RX/RF0
29 C1TX/RF1
28 U2RX/CN17/RF4
23
22
U2TX/CN18/RF5
U 1RX/SDI1/SDA/RF2
EMUD3/U1TX/SD01/SCL/RF3
EMUC3/SCK1/RF6
IC1/1NT1/RD8
OC3/RD2
21
VDD
27
26
25
24
PERIFRICO S_______________
177
Se describen las caractersticas y usos de las herramientas software que se utilizarn para desarro
llar las aplicaciones. L a instalacin de estas herramientas se encuentra detallada en el Apndice A,
Contenido del CD e Instalacin de las herramientas de trabajo.
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 coonncGO
vkeoo
03CCC033 CC0330CC
VJK31
TRE52
a
5
aaaeeon GCOOSaCC
33DCC003 CCC0330C
3 U3UCUWJ UC0333CC
J JJ3ULLOJ ULL03JUC
S
W
53
TOES*
suca
o ooiaocco onccooDo
O CCO33CC0 030C0033
u (xxrj3uco uaoccoaa
n r m u n c c 030CC003
O CC03300C OJQCCCOJ
u U.OU33UC osanccoa
o t r m in n e rawiCCOO
O CCC0330C 0330CC03
O CCCOJJUL IXIJUUlXrj
c cccoaaoc nonnereo
C GCCC033G CO3DCCC0
0 UUCCU33U CUJ3UCCV
ri,- -,
0326
CCCO
332Z
SOCO
aucc
H
MBBBol
rtn>
H H ol
-MIC
B
H
HB
B8B
HIBS
B mu
.vj:
oai a
BWBftBftj
BPgOQQP
coi e
CO
oaan
0333
W
BflBgg cCOi
c,'
P P H
0033
. ; v
v .;-;-;
w-c.vyyl
v . -
cmc
ijjjj
co33
c
B
caccoaan coaannco
OOCC0030 C0033CC0
U UULCUJ33 CUU3BUCO
n n n n rrm n r m ia n c c
0 030CC033 CC0330CC
3 333ULW3 UCUJ3SUC
a naanrm a n rm innn
3 0330CC03 OCC03300
O 0330UC03 UQCOJ3UU
o oaaaccoo accooaan
O 0333DCC0 30CC0333
O SOCCO 30CCW33
a o jjju c c o oaccooaa
O (OOOCCO 030CC033
O O33CC0 030CC033
O IXV33DLO 0301X033
O CC033DCC 030GC003
O CC003000 0 3 00 00 3
Se dedica un captulo a explicar las caractersticas de este entorno con el que se desarrollarn la
mayora de las aplicaciones. A modo de resumen, se destacan las siguientes caractersticas:
1 78
El programa dsPICFdLite, desarrollado por Momentum Data Systems Inc., es una versin DEMO de
carcter introductorio y limitado que sirve para resolver filtros FIR e IIR de escasa complejidad m e
diante un interfaz sencillo e intuitivo. En la actualidad Microchip ofrece una potente herramienta de
nominada Digital Filter Design que cubre ampliamente todas las necesidades en el diseo de filtros.
Todos los clculos matemticos complejos necesarios para realizar estas tareas se simplifican
enormemente y, adems, se obtienen una serie de grficos (magnitud, fase, respuesta ante impulso,
respuesta ante escaln, polos y zeros, retraso,...) que permitirn predecir el comportamiento de los
filtros diseados. Simplemente, introduciendo las especificaciones del filtro que se desea realizar,
tanto filtros FIR, como IIR, filtros pasabaja, pasaalta, pasabanda y banda eliminada, se genera un fi
chero con los coeficientes del filtro con un par de clics de ratn y se puede importar ese fichero pa
ra usarlo directamente en el MPLAB IDE. De igual forma, la aplicacin generar el cdigo en en
samblador o en C para utilizar dicho filtro en nuestro programa para el dsPIC. (Figura A0.3.)
VVhdow
-X
**
;
nrm
; :
i.T5niM
r r T
n i:
- 'a --
L J
tan?*
M Pole/Zero Plot
^nivan
179
Esta herramienta es una versin reducida del programa dsPIC Fd. Se trata de una versin con
ciertas limitaciones, tales como el orden mximo de los filtros generados.
t* f" W*
py
!/*'' M
P -S
S 100
x4r.3a.jG
c o n r u i d o .w a v *
K z : R E A jr iM B tN V l :
VPV(n n a ^ c o n
F r < | v n c y {k K x l
6 .7 9 1
il.l
r in *
fn S !
l 'J . m v
ru iii.c i.)
- J .ri* r;
I?
(V:
0/11.
61
io 2 :
HQ
1 'J .t O 'J
1 3 .5 8 3
A U TO E V A LU A C I N
Al final de cada captulo de esta parte prctica, encontrar bajo el epgrafe Conceptos clave de este
capitulo una serie de preguntas que le ayudarn a verificar si ha asimilado y comprendido los con
tenidos explicados en el captulo.
A s mismo, se propone una serie de enunciados de ejercicios correspondiente a la aplicacin
estudiada.
180
um
'esarrollarn los programas para dsPIC?
1. Con qu hern
gunda parte de esta obra alguna placa de desarrollo o hardware basado
2. Es necesaria
en dsPIC?
a de datos y de programa dispone el dsPlC30F4013?
3. De cunta me
4. Con qu herr
se debe tener especial cuidado al instalarla?por qu?
Qu herramienta generar automticamente el cdigo fuente necesario para desarrollar un filtro
para un dsPIC?
iSgB8B8SIWfi88giKgaai
APLICACIN
s
WhiWiFFFfffifiiC?:-'
,
<* W A W . W :
y!vy.' /'Vv / .
WsS'&yWm
W m M ,
Diseando
filtros
A1.1. IN T R O D U C C I N
La teora de filtrado de seales abarca un temario muy amplio y denso lleno de clculos matemti
cos. Elaborar esos clculos matemticos con los PIC resultara una tarea muy ardua debido a su ca
rencia de instrucciones para hacer divisiones, multiplicaciones, y operaciones matemticas de ms
complejidad.
La empresa M icrochip dispone de dos herramientas especialmente tiles para el tratamiento de
seales. Se trata de las herramientas dsPTC Fd Lite y dsPICworks. Ambas estn disponibles para su
descarga gratuita desde la web www.microchip.com. En caso de que la herramienta de diseo de fil
tros dsPIC FD Lite no cumpla con todas sus expectativas, debe saber que existe una versin com
pleta, con ms funcionalidades, que comercializa Microchip.
En el captulo anterior, se han analizado las funcionalidades principales de las dos herramientas que
aborda este captulo: dsPIC Fd Lite y dsPICworks.
Se propone resolver un problema de filtrado de seales, utilizando dichas herramientas. Sin lle
gar a profundizar en todas las funcionalidades y a travs de un ejemplo clarificador, se mostrar el
potencial que alcanza la combinacin de estas 2 herramientas.
A1.3. EL PROBLEMA
182
Al hacer doble clic sobre este fichero, se reproduce un mensaje con un ruido muy molesto. El ob
jetivo de este ejercicio es eliminar ese ruido molesto de ese fichero y escuchar el mensaje de forma
correcta.
Las posibles aplicaciones de este ejemplo son muchas, pero quizs un ejemplo muy interesante
es el de los m icrofiltros en las lneas ADSL. (Figura A 1.1.) Las lneas ADSL aprovechan el ca
nal telefnico para enviar informacin al ordenador. As, estos filtros permiten hablar por telfo
no y navegar simultneamente sin ningn problema. Las dos seales navegan por el mismo canal
hasta el receptor. Para que al hablar por telfono, no se mezclen las seales, y slo llegue la seal
de voz, se debe colocar unos microfiltros en las tom as de los telfonos, que filtran la seal a m o
do de colador, evitando que lleguen a nuestros odos ruidos producidos por la seal de Internet.
El ejemplo desarrollado acta de form a similar, al conseguir quitar de la seal de voz el ruido que
acompaa.
183
v-;.;-v.v<::*v'v-.vyy.'.\\\-y.y.\-y.-y-
'.
S c u ce Ffe
X vXv.;.v.-iv.;.
mensaje cor. rt io .w a .
Destination Fie
f*
Sampling R a le
ImponFieFormal
NumberofChannels
FFTFwneSize
FFTIntevd
FFTWindcwFonction
j WindowsWAVEfile
(l
| 1024
}1024
j Rec'fv-i^
184
Nada ms pulsar el botn OK, se obtiene una representacin grfica de la seal en pantalla.
(Figura A 1.4.)
t / , dsPICworkr. [C:\Documents and Settin^\0lat7\f scrttorAContenido del CDVAP1 ICAC.IONfSVA...
F in
View
d t G e ne re to r
. ? ].# ];
O p eratio n
D ? K ip te y
-Ifll *
U tlte e W in do w
l ! l l . H J . O l. H l. B l
_____;_______
1 3 .5 8 3
L ili
input x(n)
output: X(wj
mensajeconfuido.fr.
Rectangular
|l0 2 4
Help
samples
-~l points computed
1024
OK
Cancel
185
Tras aceptar las opciones por defecto de la ventana y pulsar el botn OK, la herram ienta advier
te del formato en que se guardarn los datos. Aceptando de nuevo ese mensaje, se obtiene casi ins
tantneamente el resultado de la operacin. En el grfico de la Figura A 1.6. ya se puede estudiar el
rango de frecuencias de la seal.
ckPICworks - [C:\Documents and SeUinp^\Olat7\Fsr/(toro\Cntonirlo del COVAPI ICACIOWS\A..
r l t VJw CcJ: Se-ierator Cpsraicci
55
?
j f b y O R I*
i i
hfj
p ts
FFT ( n s a jo c o n c w id o .tiK )
H z : c o m p le x 6 i bit d o u b l e : Birsary
@ -a lO O
'WijJu.J____
F r e q u e r . c y (kHz)
[Frame
0/11.61
(mS ) 1
jlU
Ker.it/
El grfico de la Figura A l .7. muestra dicho rango de frecuencias para la seal estudiada. Se ob
serva una desviacin grande en forma de mximo. Al hacer clic con el ratn en el punto ms alto de
ese mximo, en la parte inferior de la pantalla aparece el valor de dicha frecuencia que claramente
es muy distinta a la del resto de la seal.
186
Luego la seal contiene una frecuencia cercana a los 4.867 Hz, que es muy distinta al resto de
frecuencias que contiene la seal.
Al filtrar un rango de frecuencias cercano a ese valor, se conseguir eliminar el dichoso ruido.
A l .5. F IL T R A N D O LA SEAL
Filter O u tp ut
Codeger
Lo w p a ss...
Highpass .,.
Bandpass ...
Bandstop ...
S ta rt Design ...
187
grficamente un filtro de Cauer o elptico. El parm etro passband ripplc (PO) indica la mayor o
m enor atenuacin de la seal, en las frecuencias pasa banda (f 1 y f4) y el parm etro Stop band
ripple (P l) indica la atenuacin obtenida en las frecuencias de elim ina banda (f2 y f3). Esta me
dida se expresa en dB, y su clculo se realiza m ediante la siguiente frmula:
De esta frmula se puede deducir que para conseguir que para las frecuencias entre f2 y f3
(stop band frecuencies) slo pase una cien milsima de la seal, se debe conseguir que PO, Stop
band ripple, sea de 50 dB. Y sin embargo, para que en el rango de frecuencias pasabanda, que es
un rango de frecuencias en el que se encuentra el rango de frecuencias a eliminar, se obtenga apro
ximadamente un 98 % de la seal original, se debe colocar P l, Pass band ripple, con 0.1 dB.
Se establecen unas frecuencias pasabanda, de fl a f4, que comprenden las frecuencias a eli
m inar y en las que em pieza a filtrarse la seal. El filtro har que para frecuencias inferiores a f l
y mayores que f4, la seal no ser atenuada de f l a f2, la atenuacin ser pequea (en funcin del
parmetro passband ripple P l), mientras que de f2 a f3 la atenuacin ser m xima (en funcin del
parm etro PO Stopband ripple), para volver a ser m nim a de f3 a f4 y prcticam ente nula a partir
de f4. A s los parm etros que se seleccionan en este ejem plo sern los siguientes:
188
Passband frecuencies: Contendr un rango de frecuencias que abarque a las frecuencias Stop
band frecuencies, donde empezar a funcionar el filtro y cuya atenuacin (a excepcin de la
banda eliminada) ser definida por el parmetro Passband Ripple. Para definirlo, se debe lle
gar a un compromiso de forma que la complejidad del filtro no sea elevada (orden elevado).
Para dicho rango, elegiremos las frecuencias desde 4000 Hz hasta los 5600 Hz.
Passband Ripple: 0.1 dB. Con este valor y mediante la frmula logartmica explicada con an
terioridad se obtiene aproximadamente un 98% de la seal original.
Stopband Ripple: 50 dB. Este parmetro nos indica que obtendremos una cien milsima parte
de la seal original, es decir prcticamente nada, entre las frecuencias que deseamos eliminar.
fc B a n d s to p
Filter
mm
Sampling Frequency.
| 44100
Passband Frequencies:
(4000
|5EOO
Stopband Frequencies:
4800
5000
|o 1
[50
Next
Help
Cancel
Butteiwoith
T schebjischeff
14
10
Inverse Tscbebyscheff
10
d- Epticj
C
Bessel
14
Next
Prev
Help
Cancel
189
Tras pulsar de nuevo el botn Next, se obtiene el resultado representado en la Figura Al .12.
/ j, d s P IC FO L it e
190
Mediante la herramienta dsPICworks puede comprobarse si el filtro diseado cumple con la funcin
especificada. Aplicando el filtro diseado a la seal original se obtiene la seal de salida filtrada. Y
si todos los supuestos han sido correctos, debera obtenerse una seal sin ese molesto pitido que no
permite escuchar con comodidad el mensaje transmitido. En pasos anteriores se haba creado el fi
chero mensaje con ruido.tim que no era ms que el resultado de importar el sonido original .WAV
al formato .TIM con el que trabaja la herramienta dsPICworks. Para aplicar el filtro mediante dsPlC w orks se utiliza la opcin del filtrado m ostrada en el men D SP -> Signal Filtering. Al ha
cerlo, aparecer en pantalla una ventana anloga a la de la- Figura A l . 14.
Apply dsPIC l D I ilter to Signal
F i t Cwfficisnt Fib
j:
[x j
cocterte
irfiUL x2fn)
menjots oontuiooti .
oi/oU vM
f7WT3aje sn andafc
....
Yfzl-HfzrXfz)
wheift H|rl k ih Itawfei luraton el Ihe fliet
---------------------------------------------------- 1
Hdp
- OK
Cancel
191
Al comparar la seal original, Figura A l . 14, y la seal original filtrada, Figura A L 15, se obser
va un cambio sustancial entre ambas. Pero para ver si realmente se ha alcanzado el objetivo, se pro
cede a convertir la seal a formato de Windows WAV para reproducirla por los altavoces del orde
nador y verificar definitivamente que carece del ruido original.
Para poder escucharla, se pasa del formato de trabajo del dsPTCworks, TIM, a formato WAV.
Desde el men File -> Expon File, se indica el formato al que se desea exportar la seal (selec
cionando en la opcin E xpon File Fonnal el formato Windows Wave Format( 16 bit)) y seleccionando
la carpeta destino Mis Documentos, el nombre del fichero ser mensaje sin ruido.wav. (Figura A l. 16.)
, fxport File
Sajfce Fie
mensaje h nidccwa.
Detmeritt Fie
E x p a l F e T y p e -
Hefc
OK
Cancel
Al pulsar la tecla OK, el programa generar el archivo mensaje sin ruido.wav; y al reproducirse
en el ordenador se podr or la original sin el ruido molesto. Lo conseguimos!
Otra manera de ver el resultado sera analizando la seal filtrada en el dominio de las frecuen
cias aplicndo tambin la Transformada Rpida de Fourier. Se atreve?
Pero, qu se ha conseguido? Qu tiene que ver esto con la programacin de los dsPIC?
Parece obvio que estas herramientas pueden resultar tiles para el tratamiento digital de seales,
lo que no es tan obvio es cmo puede beneficiarnos en la programacin de los dsPTC. Cmo se po
dra programar este filtro en un dsPIC? Muy sencillo, el programa dsPIC Fd Lite genera varias sa
lidas para programar el dsPTC con el mismo filtro utilizado.
Existen varias posibilidades. La primera opcin consiste en generar el programa en lenguaje C.
Con un clic de ratn, el programa dsPIC Fd Lite, generar el cdigo en C para el dsPIC. Esta opcin
se encuentra disponible en el men Qodegen -> C Code... (Figura A 1.17.)
Al seleccionar esta opcin del men, el programa generar un fichero en lenguaje C, ejecutable
desde el entorno de programacin MPLAB IDE.
192
El cdigo generado consiste en un programa que debe recibir 2 parmetros, uno de entrada, el
fichero de la seal original y otro de salida, el fichero a generar. Si se trabajase con un dsPIC en un
circuito real, se debera cambiar la parte del programa que lee los datos del fichero de entrada por
una conversin analgico a digital de la seal de entrada y la parte de la salida por una conversin
digital a analgico.
#include "qed_filt.c"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#ineJude <math.h>
#define INSZ1 1000
#define OUTSZl L000
static
193
if (error) {
fprintl(stden\" ***** end filter test *****\n");
init_biquad_float (&IIR_filtro);
do {
get input samples */
for (in_count = 0; in_count < INSZ1; ineount++) {
file_status = fscanf(fin.,% fr,&x[in_countl);
if (file.status != 1)
break;
/* filter samples
if (in_count == 0) break;
II R_fi ltro.fi lter( x, y, iri_count, &IIR_filtro):
for (i = 0: i < in_count; i++)
fpri n t f (fout,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 seal en lenguaje C.
Una segunda opcin es generar un fichero con el programa en lenguaje ensamblador. Tambin
puede llevarse a cabo mediante la opcin del men Coclegen -> Microchip -> dsPIC30.
Desde esta ventana se puede seleccionar el espacio donde guardar los coeficientes del filtro en
el dsPIC (en el propio programa o en la memoria del dispositivo), si se incluyen los ficheros en len
guaje C de cabecera y ejemplo, etc.
Hl tener activada la casilla de Use General Subroutine implica que al proyecto hay que aadirle
dicha rutina. Existen 3 tipos de subrutinas principales que se encuentran en la caipeta de instalacin
del programa dsPCFd y se debe elegir una en funcin del filtro utilizado:
Fir Filter, s
HRT Filter.s
URCJilter.s
Mediante la activacin de la opcin CWrapper se generarn 3 ficheros, un fichero .c, otro .cmd
y un ltimo .bat para poder simularlo desde la lnea de comandos. (Figura A l.18.)
194
C Support Fies
j r
Piogram Space
C Wrapper
OK
HeSp
Cancel
El fichero generado se trata de un fichero con los coeficientes y con un ejemplo de llamada a la
funcin de filtrado. Este ejemplo se encuentra comentado en el programa y debe ser copiado y pe
gado en el programa cuantas veces se necesite.
.equ ppNumScctions, 4
b( l,0)/2
b( 1,1)0
a( 1,1 )/2
b( 1,2)/2
a( L2)/2
b( 2.0)/2
b( 2,l)/2
a( 2 y!)/2
b( 22)12
a( 2,2)12
b( 3,0)/2
b(3,n/2
a( 3,1 )/2
b( 3,2)/2
a( 3,2)/2
b( 4,0)/2
b( 4,1 )/2
a(4.1)/2
b( 4,2)/2
a( 4,2)/2
.section
.bss
?
; The input and output buffers can be made any desired size
; the value 40 is just an example - however, one must ensure
; lhat the output buffer is at least as long as the number of samples
- : to be filtered (parameter 4)
;input:
.spaee40
output; .space40
;
.text
J
v v y l- v X v : .
1
; 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
195
196
; 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
La ltima opcin es generar un fichero con los coeficientes, para incluirlos directamente en el
programa.
AUTOEVALUACION
Conceptos clave de este captulo
SM. '
Se propone ai lector tratar de resolver el problema inverso. En vez de obtener la seal de voz, ex
traer el ruido de la seal.
En este caso, el tipo de filtro a disear no ser un filtro de banda-eliminada, sino uno de pasa-ban
da. Este filtro, al contrario que el anterior, atena todas las frecuencias, excepto las de una deter
minada banda o rango.
A2.1. IN T R O D U C C I N
A lo largo del presente captulo se analizan las cualidades del Entorno Integrado de Desarrollo
(MPLAB IDE) de M icrochip. Este entorno permite, desde editar los programas fuente, hasta ver
su ejecucin paso a paso en el simulador, grabarlo en la memoria del dsPIC a travs de herra
mientas como el ICD 2 e incluso depurarlo paso a paso en el circuito real.
Este tema se centra en el proceso de creacin de un program a en lenguaje ensam blador y en
lenguaje C.
La versin analizada del MPLAB IDE es la 7.30 que, an sabiendo que en un futuro se que
dar obsoleta y surgirn nuevas versiones, seguro m antendr muchas similitudes con ellas.
Para facilitar enorm em ente la tarea del program ador resulta altamente recom endable al trabajar
con el entorno de desarrollo MPLAB IDE, trabajar con proyectos .
Los proyectos incluyen varios ficheros. Unos se encargan de la inicializacin del controlador,
definicin de las distintas reas de memoria, establecim iento de etiquetas para atender interrup
ciones, Reset, program a principal, etc.
Otros ficheros contienen los nombres simblicos de los registros, direcciones de memoria,
etc. Finalm ente los proyectos contienen ficheros con los program as fuente. Esta divisin en
varios ficheros, y los ya incluidos en el entorno M PLAB IDE, sim plifica el desarrollo de
aplicaciones.
El MPLAB IDE es un entorno MDI con m ltiples ventanas desde el que se confeccionan, depu
ran, monitorizan y se graban los proyectos. (Figura A 2 .1.)
197
198
Ti-v v i i j I i d i 4 * i
& :&
I : e? a i
B in a ry
C000
cao2
COOi
COO 5
coot
COOC
GOOI
09930000 00000003
o 9 :c o o o o c o o o o o m
0010
oooooooo ccooooco
0012
001-t
U 016
0016
0 9 2 0 0 0 0 0 COOOODZC
o :-:o o oo o 930000:0
cccuoooo Qaoooooo
nnru
001C
ooir
0020
0022
002-1
002 6
0020
002*
OO C
002 Z
0030
0032
003-1
0036
OOJt
003 A
003 C
003 E
o o -i:
0041
on-i-i
0041
SSl
0nono
000
oooo
oooo
oooo
VR02
HKG4
ccaooooo coooocco
:c a o o o o o coooocoo
oooo
oooo
cooooooo ooooouoo
raaooooo aooooooo
0009
0009
ZCOOOOOD
:C 0 0 0 0 0 3
COOOOOOO
cooooooo
cooooooo
G 0 00 00 09
'JUOOOOOO
iDiiuM *p3ueui'j.
nonooonr, nooonnoo
0009
0099
0099
00
009:
00 00 00 09 00009300
GOOOOOOC 0 0 0 9 9 3 0 0
OOOOOOCC 0 0 0 0 9 3 0 0
vh Clv&ui
COOODlOO
coooocoo
00000300
ooooocoo
oooooaoo
00000300
00000300
oonr.
oo?:
s urta" Sep
VRSCS
DCQOOOOO COOOOCCO
0 0 0 0 0 0 coooocco
0009
0009
0009
0009
i wsif rt!
cbjxtrfcj
HyFte
P Z 0 3
o=oaoooo caooooco
o :co o o o o cooooccg
0 9 3 0 0 0 0 0 COOOOCCO
0009
oooo
ocoooooo cooooooo
oooo
oooo
>2 i
C h ecksum : 0xb709
1TR00
mci
03000003
( 0 0 0 0 9 0
020000K 5
00000000
oosooooo ecooooco
0000
Wrafctv
3 ygto ol Jfcunc
00300000 00000000
00990000
0 9 9 :0 0 0 0
OD9GOOOO
002*30000
nniJi
C iW i;r
-J $
vnlil
: : .in te r r u p t ! : _ACCXnc#rn^it:void
_ATCIierrv5C*'*>id:
I
5x6030.
oooooooc oooocooo
00 0 0 0 0 9 : 00099300
00 0 0 0 0 9 2 00091000
Asrcev?.
El entorno dispone de un men clsico en la parte superior de la pantalla desde donde acceder a
todas las funciones del mismo.
Los mens File, Edit, Window y Help no tienen ninguna caracterstica que los haga especialmente
destacables. No as el men View, que incluye caractersticas propias y especficas. (Figura A2.2.)
Project
Debugger
Programmer
Project
Output
Tools
Visual Inltiateer
Con
t'
1 Standard
1 Disassembly Listing
2 H a rd w a re Stack
3 Program Memory
4 File Registers
5 EEPROM
6 Memory Usage Gauge
7 LCD Pxel
2 Project Manager
3 Checksum
</ 4 MPLAB1CD 2 Program Toofoar
OOOOOOOO 00000000
OOOOOOOO OOOOOOOO
OOOOOOOO OOOOOOOO
OOOOOOOO OOOOOOOO
OOOOOOOO OOOOOOOO
8 Locals
OOOOOOOO OOOOOOOO
9 Watch
OOOOOOOO OOOOOOOO
10 Call Stack
OOOOOOOO OOOOOOOO
OOOOOOOO OOOOOOOO
Desde el men View, adems de configurar las barras de herramientas deseadas se puede acce
der a la visualizacin de partes fundamentales del proyecto, como la memoria del programa, la me
moria EEPROM, un grfico de uso de la memoria, una ventana para aadir datos que se deseen
199
moniLorizar durante la ejecucin del programa, etc. Hay que destacar que muchos de los mens que
se describen, disponen de ms o menos funcionalidades dependiendo de la accin desarrollada en
cada momento. As, el men Debugger, cambia sustancialmente al estar ejecutndose una Depu
racin del programa. Igualmente tambin cambia el men View.
El men Project es fundamental para la realizacin de las aplicaciones. Desde l se comienza a
crear los proyectos, se compilan, se construyen y se les aaden los ficheros necesarios para su per
fecto funcionamiento. (Figura A2.3.)
Debugger
Programmer
Tools
Visual
Project Wizard...
New...
Open...
Close
Qtfckbuild
1
i
Clean
Build All
Ctrl+F10
Make
FIO
Build Options...
Find in Project Files...
>
Save Project
I
1
>1
;<
i
j
Ii
El men D ebugger no se visualiza si no est seleccionada la herram ienta M PLAB SIM, tal y
com o se muestra en la Figura A2.4. Esto se debe a que no tiene seleccionado la opcin Select Tool->3 MPLAB SIM. Bajo esta opcin del men se depuran los programas ejecutndolos a travs
de distintas herram ientas como el MPLAB ICD2 o el sim ulador MPLAB SIM. El program a
tiene la posibilidad de ejecutar paso a paso el cdigo, poner puntos de ruptura (breakpoints),
resetear la ap licaci n , etc. En el cap tu lo sig u ien te se an aliza ms deten id am en te esta
herram ienta.
Bajo el epgrafe Programmer, podr seleccionarse el programador que se desee utilizar para gra
bar el programa en el dsPIC. En caso de utilizar la tarjeta P1C School, no se necesitar utilizar esta
opcin ya que utiliza un software distinto para la grabacin.
En el men Tools se puede acceder a varias herramientas muy interesantes incluidas en esta ver
sin del MPLAB IDE. Cabe destacar la herramienta Visual Initializer, que es especialmente til de
bido a la com plejidad que puede suponer configurar al dsPIC para realizar algn tipo de tarea es
pecfica. Mediante esta herramienta se configuraran los perifricos del dsPIC, desde las puertas de
entradas y salidas hasta el Motor DSP con un solo clic de ratn. La herramienta MPLAB Macros
permite grabar una serie de acciones realizadas con asiduidad en el entorno MPLAB IDE para lue
go poder repetir esas acciones en cualquier momento pulsando una sola tecla.
200
Programmer
I
Tools
Select Tool
F9
3 MPLAB SIM
Animate
Halt
F5
Step Into
F7
Step Over
F8
Conl
1 MPLAB ICD 2
Clear Memory
Run
Visual Initializer
None
Step Out
Reset
Breakpoints...
F2
StopWatch
Stimulus Controller
SCL Generator
Profile
Refresh PM
Settings...
La opcin del men Configure permite configurar distintas opciones del programa, como por
ejemplo, el que cada vez que se construye un proyecto ste se salve en el disco, o asignar combina
ciones de teclas para distintas acciones del entorno, etc. Puede resultar interesante la opcin Confi
gure bajo la pestaa HotKeys para revisar las combinaciones y asignaciones de teclas a funciones
del IDE para m em orizar aquellas que puedan ser de inters. (Figura A2.5.)
|
MPLAB IDEv7.30
H* 4 Hi VVpy
D
(g t , >
f t ; c3 M f | d
#>
G E $ I#
O H I
C hednum : 0x67M
t- i i f t f f
3 ] | -
*.
m i f,~.| wnrr.-
coco
M CI
ooe*
UUVJ
030D
030}
C0C6
COC.
UJL'J
Q3CO
raen
o
O
O
O
u
o
ixio o a o o c
C0C03C0C
COC03COO
C0G03C03
Ronixinnn
coa coe oj
VPEOT
n ro coo oo
jOJLUJLJ
3C0C03C0
3C0G03C0
oconm co
acuuixiuu
VRKC1
spr
3PEC2
TPZCi
WR U I
PE03
egrr.-:
Uecnory
__________
1
i
3
t
5
C
OCOCO
0 0 03 2
OWH
OLOJt
0CO36
03031
040100
0C03CO
0C030A
aoDSOA
O.-LA
0 3 0 :-Ci
nnme
03010.
e
0
10
U'JLXJ:
03010
Q3C12
0003 OA
Q3C33JL
o ju js a
o t o 0x0 00 1 0 3
r s
_P e9-Jlc In te r c u p
~ D f iiu lt J n c p r r u p ;
ta m iC lD U ic u p t
I 'c a u lc liit c t jp t
j t . : n r .* r r a p r
~:-cXauC :nLn> rupt.
> I l a u : U n C C it '- ;p l
A SC II
-rrroz
irrcin
v p fC fl
-FPC33
-FFC43
i r r r .y i
tttt
rrrr
rrrr
TFTT
TFTT
tttt
ttft
tttt
fttf
tttt
tttt
tftt
tftt
tttt
ftft
fttt
tftf
tttt
rrrr
FTFT
FTTT
rr r r
FS T F
TT T T
rrrr
tfff
TFFT
rrrr
trtr
FTFT
rrrr
rrrr
FTFF
rrrr
rrrr
TFTF
TTTT
rrrr
rrrr
SFFF
tftf
fttt
tttt
tttt
tttt
tttt
tttt
tttt
*
En cuanto a las ventanas disponibles dentro del IDE, cabe destacar las num eradas en la
Figura A2.5.:
201
1. Ventana del proyecto. Visualiza los ficheros incluidos en el proyecto y la estructura del mismo.
2. Ventana de registros. Muestra el valor de los registros del dsPIC, tanto en hexadecimal como en
ASCII. Desde esta ventana se puede tambin alterar su valor.
Ventana de inspecciones. Gestiona los registros y variables a monitorizar durante la ejecucin del
4. Editor de cdigo con resaltado de sintaxis.
5. Ventana de resultados o salida. Muestra los resultados de la compilacin y ensamblado de los pro
gramas, mensa/es de salida del simulador, etctera.
6. Memoria del programa. Permite examinar la memoria de cdigo con el programa que se est
trabajando.
7. Visualtiacin de la EEPROM. Permite observar y modificar ios datos a grabar en la EEPROM del
dsPIC.
.
8. Grfico de la memoria utilizada, tanto la de programa como la de datos.
A 2 .4 . PRIMER PROYECTO EN E N S A M B LA D O R
Se aborda a continuacin un primer proyecto para dsPIC. En primer lugar se debe elegir el modelo
de dsPIC a utilizar ya que dependiendo del elegido, variarn las caractersticas. En este primer ejem
plo no resulta crucial el modelo elegido ya que apenas se van utilizar los recursos complementarios
del dsPIC. Se limita a realizar operaciones matemticas para las cuales cualquier modelo de dsPIC
sirve. Sin embargo, para usar el mismo en todas las prcticas de la segunda y tercera parte se ha ele
gido el dsPIC30F40l 3.
En primer lugar se debe crear el proyecto. Es importante seguir todos los pasos, explicados a
continuacin con gran precisin, ya que de lo contrario puede resultar complicado llegar a compi
lar el proyecto.
Tras iniciar el MPLAB IDE, mediante la opcin Project -> Project Wizard se iniciar un asis
tente que guiar al autor en la tarea de creacin de su proyecto.
Tras pulsar el boln Siguiente en la primera pantalla del asistente se elige el modelo que en este
caso es el dsPIC30F4013. A continuacin pulsamos el botn Siguiente. (Figura A2.6.)
P ro je c t W iz a rd
Step One:
Select a devee
Dcvicc:
Ctfs
|| Siguiente > |
Cancelar
Ayuda
202
Una vez seleccionado el modelo de dsPIC, en el paso 2 se seleccionan las herramientas con las
que compilar y linkar el proyecto. Dependiendo del lenguaje en el que se desee construir el proyec
to se deber realizar una seleccin u otra. En prim er lugar, se detalla la creacin de un proyecto en
ensamblador y, ms tarde, el mismo proyecto ser desarrollado en el lenguaje C.
Slo la prim era vez que se accede al men Project Wizard se debe configurar la herramienta a
utilizar e indicar dnde se encuentran los programas necesarios. Para ello, en la lista desplegablc A c
tive Toolsuit debe seleccionarse Microchip ASM 30 Toolsuile, caso de querer desarrollar el proyec
to en ensamblador. Al hacerlo, se observar cmo en la lista Toolsuite Contents, aparecen 3 lineas
correspondientes a las herramientas necesarias para construir el proyecto con el ASM 30 Toolsuite,
pero con un aspa roja a la izquierda que significa que el MPLAB IDE desconoce la ubicacin de los
mismos. Es necesario indicar al MPLAB IDE dnde se encuentran dichas aplicaciones. Para ello,
seleccionando cada una de estas 3 lneas y mediante el botn Browse se eligen las rutas adecuadas
segn la tabla siguiente.
Lnea
Ubicacin
LIB30 Archiver
Tras finalizar este paso, debera obtenerse un resultado como el de la Figura A2.7. Luego, me
diante el botn Siguiente se accede a la siguiente pantalla del asistente.
P ro je c t W izard
Step Two:
Select 3 language todsufce
Active T oolsuite-
T oolaiit Cotant
MPLAB A SM 30 Assembler (pc30-es.exfc|
Location
iC M rch ivo s deprograma^MicrocKp'.MFLAB ASW3Suite'vbn\pc30-as
Browse...
< Atrs
S ig u ie re >
C a ie a t
Ayuda
203
P ro je c t W ai d
Step hiee:
Nameyour pioject
Project Name
Prcject Direccxy i
: !C:\e;emplos\suma
< Atrs
[[ Siguente> ;] (
Caricela'
Ayudo
204
P ro je c t W iz a rd
S le p Foui:
Add ary ewstirvg liles to your piopct
g ) p303010.hc
g)
)
di
g)
g)
g)
i)
: g)
g)
p30f3tm.nc
p30f3012.nc
p30(3013.ric
p30f3014.inc
p30f4011.inc
P3Q4012inc
p30f4013.inc
P30f5011.ine
p30f50l3 inc
3i
&
Add
Remove
crtO s I C:\ejemptos\surrw\crtO $
B ic r tl.* ! C:Vejempk\$uma\crtl.s
21
p30f5015.inc
. flh p30f5016.inc
m\
<Atrs
|t Siguiente > j [
Cancelar
Ayuda
.text
_rnain:
mov #0x0001, WO
mov #0x0002,W
205
_____________________________ __________
La ltima frase, BUILD FAILED, indica que la compilacin ha fallado. Las 4 filas anteriores in
dican el error: undefined referente to m a in \ es decir, que no existe una referencia a main. M ain es
la etiqueta de inicio de programa. En el listado del programa s aparece la etiqueta jn a in y sin em
bargo el compilador indica que no la encuentra. No se trata de quitar el guin bajo que hay delante
de main, sino que no se ha aadido el fichero fuente al proyecto. Al observar la ventana de proyec
to, vese la Figura A 2 .11, all no aparece por ningn lado el fichero suma.s.
sum a.m cw
s u m a .m c p
GE Source Files
crtO.s
1- c r t l . s
E Header Files
p30f4013.inc
\O bject Files
i
Library Files
Linker Scripts
p 30f4013.gld
: O ther Files
206
Para solucionar el error basta con aadir dicho fichero al proyecto. Se eligen las opciones del me
n Project->Add Files to Project... y seleccionando el fichero suma.s se corregir el problema. Aho
ra al compilar el proyecto mediante Project-> Ruild All dar el resultado deseado, reflejado en la Fi
gura A2.12. En la ventana del proyecto, aparece el fichero suma.s. Figura A2.13.
Output
Build
fc suma.mcp
p-Source Ries
erto.5
erti .s
Header Files
p30f40l3.inc
Cbjcct Fies
Library Files
L in k e r Scripts
p30f4013.gld
O h n r Filft
; Programa Ejemplo I .s
; Creacin de nmeros
Las 2 primeras lneas son comentarios. Los comentarios van precedidos siempre por el signo ;
(punto y coma). Tras este signo se pueden escribir los comentarios que se quiera hasta el final de la l
nea, y que puedan ayudar a identificar el programa y a comprender mejor cul es la lgica del mismo.
Observe como se pueden dejar todas las lneas que se desee en blanco y colocar comentarios en
cualquier posicin de la lnea. Todo el texto de una lnea a partir del signo punto y coma es ignora
do por el compilador. As si se deseara poner un comentario que ocupe ms de una lnea se debera
incluir el signo punto y coma en cada una de las lneas.
207
La siguiente lnea, se corresponde con una directiva. Una directiva no es una instruccin propia del
dsPIC, sino una instruccin para el compilador para que identifique que la etiqueta _main de inicio del
programa se encuentra en este fichero fuente. Realmente, el programa no empieza a ejecutarse en la eti
queta _main. El programa empieza a ejecutarse en la rutina de Reset. Esa rutina se encuentra en los fi
cheros incluidos en el proyecto y, al finalizar la rutina de Reset, se pasa el control a esta etiqueta _main.
.text
. .
o >
La directiva .text indica que a continuacin se va a escribir la parte del programa correspondiente
al cdigo principal. El programa podra incluir datos, y para que l compilador distinga si lo que vie
ne a continuacin son datos u otro tipo de informacin, se usa la directiva .text.
mam:
........
Esta es la etiqueta de inicio de programa, la siguiente instruccin ser la primera que ejecute el
controlador tras atender la rutina de Reset.
MOV #0x000,WG Movemos un literal a W0
La primera instruccin mueve el literal #0x0001 al registro general W0. Para indicar que se tra
ta de una constante, se coloca el smbolo almohadilla # delante del nmero a escribir. Ox significa
que el nmero est representado en hexadecimal y el valor 0001 representa la constante en hexadecimal. La instruccin M OV mueve el primer operando (fuente) al segundo operando (destino).
Es conveniente familiarizarse con la expresin de nmeros en formato hexadecimal ya que al tra
bajar con registros y datos de 16 bits, el formato hexadecimal resulta muy cmodo. En la mayora
de los ejemplos utilizados se utilizar esta base numrica.
...a -.
suma2:
.... ......-......
....
Esta es otra etiqueta a la cual el programa salta frecuentemente. Una etiqueta debe terminar siem
pre con el signo de puntuacin dos puntos (:) y no debe coincidir con ninguna palabra reservada del
compilador.
MOV #0x0002.WI
ADD W0,W 1,W0
;Movemos un 2 al registro W J
;sumamos el registro W0 y W 1 y dejamos
;el resultado en W0
208
Tras realizar la suma, con la instruccin GOTO la ejecucin del programa salta hasta la etique
ta sealada suma.2, volviendo a mover 2 al registro W1 y volviendo a realizar la suma de forma in
definida.
,end
Resumen:
Los siguientes pasos resumen el proceso necesario para la creacin y compilacin de un proyecto:
1.
2.
3.
4.
209
Marcar estos ficheros con un tic para que se copien en la carpeta del proyecto. (En funcin del dsfW a utilizar se elige un fichero correspondiente al modelo usado: p30f4013.gld y p30f4013.inc.)
7. Finalizar l asistente
8. Modificar los ficheros CrtO.s y C rtl.s con el modelo de dsPIC elegido
9. Indicar al entorno, el directorio de los ficheros include. Para ello, en el men Project -> Build Options -> Project, y dentro de la pestaa General, en el cuadro Include Path,($INCDIR): pulsar el bo
tn Browse y elegir la ruta C:\Archivos de program\Microchip\MPLAB ASM30 Suite\Support\inc\.
Crear un fichero desde el men FHe-> New y guardarlo en la carpeta del proyecto con el nombre
de suma.s (ntese que se debe especificar la extensin .s del archivo)
10. Aadir dicho fichero al proyecto a travs de la opcin Project->Add files to Project.. y seleccionar
nuestro fichero fuente suma.s
11. Escribir el programa y compilarlo mediante Project->Build Ail
A pesar de que el lenguaje ensam blador permite el uso de maysculas y minsculas, en algu
nos casos se debe respetar fielmente el uso de las apropiadas. As por ejemplo, a la hora de utili
zar ciertas etiquetas o nombres simblicos de registros o bits hay que ser fieles a los listados que
se proponen.
Una vez visto cmo crear un programa para dsPIC en lenguaje ensamblador se invita al lector a con
feccionar el mismo programa en lenguaje C para dar as una visin distinta y permitirle seleccionar
el lenguaje que mejor se adapte a sus necesidades.
La fam ilia dsPIC ha sido optim izada para la ejecucin de program as desarrollados en len
guaje C. Una buena program acin en lenguaje ensam blador siempre ser ms ptim a que en len
guaje C en cuanto a tamao de cdigo y tiempo de ejecucin. El lenguaje C tiene la ventaja
de ser un lenguaje ms fcil de aprender y utilizar proporcionando mayor rendim iento en la
programacin.
Al igual que en el programa en ensamblador, el prim er paso consistir en crear un proyecto pa
ra poder confeccionar el programa. Los pasos son similares a los del apartado anterior, pero con cier
tas diferencias.
1.
2.
3.
4.
210
Ya est preparado el proyecto para ser escrito y compilado. Recuerde que debe ser especial
mente cauteloso a la hora de seguir estos pasos si desea tener xito en esta tarca, pues el olvido de
alguno de los pasos anteriores puede llevar a producir errores de compilacin o linkado que crea
rn ms de un quebradero de cabeza. El estado del proyecto se debe corresponder con el represen
tado en la Figura A2.14.
Q su m a c .m c p
0
Source Files
sumac. c
Header Files
O bject Files
Library Files
3 Linker Scripts
!
L~ p30f4013.gld
O ther Files
'
WREGO = 1;
w h ile (l)
C -K w X v
.'..V V /A V .'
WREGO
}
roturn 0;
211
c^ffa::
- " U S t l >*
Y i'V.-i
V .rr * w -
- o-
Vi.XtTO:TOXO.ttO.
En esta ocasin el comentario viene precedido por//. Este comentario es un comentario de lnea.
Es decir, que todo lo que est escrito tras estos smbolos y en la misma lnea ser ignorado por el
compilador. Si desea escribir comentarios de ms de una lnea incluya al principio del comentario
los smbolos /* y al final del mismo */. Por ejemplo:
P Este es un coi:nentario
de mas de una
lnea
*/
HaSfl8S688S8BBwSw88ro^
La siguiente lnea es una directiva del compilador. Sirve para incorporar el fichero de includes
correspondiente al procesador empleado, en este caso el dsPIC30F4013.
#include p30f401^.h*1
La inclusin de este fichero permite entre otras cosas trabajar con smbolos en vez de con posi
ciones de memoria absolutas, etc.
x 'i;
int main(void)
<
Todos los programas en C empiezan con la funcin main. La palabra reservada int significa que
la funcin main devolver un valor entero. Y la palabra reservada void significa que la funcin main
no recibe ningn parmetro para su ejecucin.
A continuacin comienza un segmento de cdigo y dichos segmentos de cdigo siempre deben
estar entre llaves {}.
212
WREGO = 1;
while(l)
{
WREGO = 2 + WREGO;
-...
^ : * r
-.*>
.v J v X * X v - '-''
> -..............-.-.vv:-
v - : - . - : '
: x-:%
x
Estas instrucciones representan el bucle principal del programa. Se trata de un bucle while que
se repite siempre que sea cierta la condicin que acompaa a la palabra reservada while entre pa
rntesis. Verdadera es toda condicin cuyo resultado no sea cero. Luego al poner un 1, esa condi
cin siempre va a ser cierta. Y al igual que en el ejemplo en ensamblador, este bucle se va a estar
repitiendo siempre, sin tener un final.
Lo que se va a repetir en ese bucle es el siguiente segmento de instrucciones delimitado por las
llaves. Otra asignacin que hace que el registro WREGO adquiera el valor de la suma de los valo
res contenidos en el registro WREGO ms un 2.
As, y al igual que en el ejemplo en ensamblador, el programa va asignando al registro WREGO
nmeros impares a base de ir sumando 2 al nmero impar inicial 1.
re tu rn 0;
Hay que devolver un valor del mismo tipo que la funcin. Es decir, se debe devolver un valor en
tero. Normalmente la devolucin del nmero 0 indica que todo ha progresado de form a correcta. Por
eso, y a pesar de saber que el programa no alcanzar nunca esta instruccin siempre deberemos co
locar esta instruccin en los programas en C.
De haber conseguido una ejecucin correcta, seguramente se querr comprobar que el programa
funciona y hace lo previsto. Realice los ejercicios de autoevaluacin y pase al siguiente captulo
donde podr sim ular su ejecucin mediante el MPLAB S1M, una herramienta muy til a la hora de
depurar y probar programas antes de implementar el hardware.
AUTOEVALUACIN
Conceptos clave de este captulo
X v v w > * S v X X*X*X* X-X X X*X\ *X-*
:y
.
: 5 i
Iv X v X ;
213
E jercicios
Al programar Ejemplo hs, el primer programa en ensamblador, no est del todo optimizado. Es cier
to que el programa va generando nmeros impares en el registro WO, pero se puede hacer de una
forma ms ptima. Ms rpida.
Una pista: existe una instruccin que se ejecuta muchas veces y que no es necesario que se ejecute tantas.
Cul de los dos lenguajes le ha parecido ms interesante? Cul de los dos se adapta mejor a sus
necesidades? A lo largo de los siguientes captulos trataremos de proponer ms ejemplos en los dos
lenguajes para que pueda elegir con mayor criterio el lenguaje ms adecuado para sus necesidades.
A 3 .1 . IN T R O D U C C I N
En la aplicacin anterior se han creado unos programas introductorios para controladores dsPIC. En
la presente se analizar el comportamiento de los mismos mediante un simulador dentro del entorno
de desarrollo, ejecutndolos paso a paso, de forma continua, observando cmo cambian las variables
y las posiciones de memoria, adems de seguir profundizando en la programacin de los dsPIC.
A 3.2 . S IM U L A N D O EL PRIMER P R O G R A M A EN E N S A M B LA D O R
El prim er paso ser cargar el proyecto anterior desarrollado en lenguaje ensamblador mediante la
opcin File OpenWorkspace y abrirlo con todos sus componentes. Cuando aparezca en pantalla la
ventana del proyecto se hace doble clic sobre el fichero suma.s para disponer del cdigo fuente.
(Figura A3.1.)
IH jOCSf* V'dfC. UOfJpr
A*
SMm
Q f c#
t >: i* ?1 T?
Jfc ;
216
Para sim ular este ejemplo existen varias opciones. La primera, y la ms sencilla, es sim ular
lo en el ordenador haciendo uso de una herram ienta integrada en el MPLAB IDE, denominada
MPLAB SIM. O tra opcin sera grabar en un dsPIC el program a y depurarlo sobre circuito me
diante otras herram ientas de la em presa M icrochip, como el MPLAB ICD2. Puede ser intere
sante el uso de esta herram ienta en proyectos com plejos, donde los problem as con el hardware
as lo requieran, pero para los ejem plos didcticos el sim ulador MPLAB SIM es una herram ien
ta suficiente.
El primer paso ser entonces seleccionar el simulador. Para ello, se debe acceder al men Debugger -> Select Tool -> 3 MPLAB SIM. (Figura A3.2.)
Debugger
Programmer
Tools
Clear Memory
F9
Animate
Halt
Window
None
'Select Tool
Run
Configure
F5
1 MPLAB ICD 2
2 MPLAB ICE 4000
3 MPLAB 5IM
4 MPLAB ICE 2000
tfTfi
nni9A
F'
En la Figura A3.2. puede observarse cmo el men Debugger vara sus opciones al seleccionar
el MPLAB SIM. Ahora dispone de nuevas opciones Run, Anmate, Step Into, Step Oven etc., que
permiten hacer uso del depurador de programa para ejecutar cdigo paso a paso, animarlo, poner
puntos de ruptura, etc.
El siguiente paso consiste en que el sim ulador ejecute una instruccin. Para ello la herra
m ienta dispone del men D ebugger -> Step Into. Al seleccionarlo, es posible que el programa
muestre un m ensaje indicando que el proyecto debe com pilarse por no estar al da (The Project
is out o f date. W ould you like lo build it now?). En tal caso pulsando A ceptar el proyecto
se com pilar de nuevo. Pulsando de nuevo D ebugger -> Step In to ... no aparecer nada en
pantalla!
Efectivamente, no se observa ningn cambio en pantalla, pero el programa se est ejecutando.
Que es lo que pasa? Debera apreciarse cmo el ordenador seala la instruccin que est ejecutan
do y, sin embargo, no se ve absolutamente nada.
En el tema anterior se comentaba la necesidad de trabajar con proyectos para facilitar la tarea.
Una de las facilidades es que los ficheros aadidos a los proyectos preparan unas funciones que se
deben incluir siempre. Ahora mismo, el programa est ejecutando una de esas instrucciones in
cluidas en los ficheros que se han aadido al proyecto. Ms concretamente, est ejecutndose la ru
tina de Reset. Luego, la primera instruccin que se ejecuta no es la primera instruccin del fichero
suma.s.
Para poder ver todas las instrucciones que ejecuta el simulador, se pulsa en el men Debugger la op
cin Reset -> Processor Reset. Luego, se procede a visualizar la memoria de programa mediante el
men View ->Program Memory.
217
Program Memory
Line ; Address
Q4Q00
00002
000000
00004
00006
00008
Labei
Disassembly
goto _ceset
nop
_DefaultInterrupt
_DeaultInterrupt
_Defau.Lt Interrupt
DefaultInterrupt
0001A8
0 0 0 1A8
0 0 0 1A8
0000
;<; ;
Opcode
00000
00018
______ __ _________________
204
205
206
207
208
209
0 0 1 96
0 0 1 98
0019
0019C
0019E
001A0
0 00000
DA4000
FE0000
200010
200021
400001
nop
R e se rve d B R
re s e t
m ov.w # 0 x 1 , wO
m ov.w # 0 x 2 , w l
a d d .w w O ,w l,w O
m a in
suma 2
.
O pcode H ex
M achine | Symbolic
PSV M ixed
PSV D a ta
Otra opcin, mucho ms cmoda y sencilla, es utilizar un punto de ruptura para saltar todas las ins
trucciones anteriores. Sin necesidad de abrir la ventana de exploracin del programa, se crea un
punto de ruptura en la primera instruccin mov del fichero suma.s. Para crear dicho punto de rup
tura, basta con hacer doble clic con el ratn en la parte izquierda de la lnea de cdigo donde se de
see que se pare el programa (en la Figura A3.5 dicha posicin est marcada con una letra B). Al
218
hacerlo, aparecer una B en dicha lnea, que indicar que en esa lnea existe un Breakpoint o pun
to de parada. Para quitarlo puede volver a hacer doble clic con el ratn en ese punto y desaparece
r la B y el punto de parada.
C r e a c i n
de
n a e ro i
in p a r e r
. g l o b a l _ J ta in
-t-e x c
m a in :
r io v
# 0 * 0 0 0 1 ,W 0
;M o v c i o s
un
uno
M0
svmaZ:
nov
add
# 0 x 0 0 0 2 ,K1
T 0 O , 1 ,M O
;M o v e 3 c o s
; s u in a a io s
;e l
y o to
sum aZ
un
1
r e s u lta d o
; R p e c li a o s
a l
r e is c r o
r e s is t ro
e l
&
W0 y
l
V I
d e j& m c s
VO
b u c le
sun&2
. end
A continuacin, tras provocar de nuevo un Reset (Debugger -> Reset -> Processor Reset), en
vez de pulsar D ebugger-> Step Into, que ejecuta una sola instruccin, se accede al men Debugger
->Run. M ediante esta opcin, el programa se ejecuta y rpidamente aparece la flecha encima del
punto de parada marcado por B, lo que significa que se ha ejecutado todo el cdigo inicial hasta esa
linca.
El contador del program a se encuentra apuntando a la prim era direccin del cdigo. Para
com prender los resultados de la ejecucin del cdigo se debe poder observar ios valores de los
registros WO y W l. La ventana Walch del men View perm itir aadir cuantos elementos se
deseen monitor i zar.
f. . . . . . .
I
W atch
| Watch 1
Watch 2
_v ; [ Add Symbol)
j __ SP
S y m b o l Mame
V a lu e
Watch 3 j Watch 4 j
Desde la ventana de la Figura A3.6, se aadirn los registros W0 y W 1 para ir monitorizando los
valores que van tomando cada uno de ellos. Desplegando la lista que se encuentra a la derecha del
botn Add SFR se selecciona el registro WREG0 y a continuacin pulsando el botn A dd SFR, se
aade dicho registro a la ventana de inspeccin. Se repite este proceso con el registro WREGJ, de
forma que la ventana Watch quede como la de la Figura A3.7.
W atch
V:j (A d d Symbol]
A d d re s s
| j Watch 1
SP
S y m b o l Name
WREGO
WREG1
0000
0002
'
219
V a lu e
0x0000
0x0000
Al ejecutar el programa paso a paso se conocern los valores que van tomando de los registros.
Al pulsar la tecla F7 {Debugger -> Step Into) se observar el nuevo valor de WREGO que ser
0x0001, que se corresponde con la ejecucin de la instruccin
que mueve el valor 1 a W0. Adems aparecer en rojo para indicar que acaba de ser modificado di
cho valor.
Al pulsar de nuevo F7 se observa cmo WREG1 tom a el valor 0x0002 correspondiente a la ins
truccin
220
ill
. 1,
;;
;Movemos un literal a W0
;Movemos un 2 al registro W 1
;sumamos el registro W0 y W 1 y dejamos
;el resultado en W0
Repetimos el bucle suma2
I'XOX.
p
W&f:
Si se sigue pulsando la tecla F7 se aprecia cmo el programa no tiene fin y como el registro
WREG1 no vara nunca, manteniendo siempre el valor 2 y, sin embargo, WREGI va tomando los
valores de los nmeros impares: 1, 3, 5, 7, 9,...
Ejercicio:
Una vez depurado el programa en ensamblador, trate de hacer lo mismo con el programa en lenguaje
C. Simlelo en pantalla observando cul es la primera instruccin que se ejecuta, aada un punto de
parada e inspeccione los valores que va adquiriendo WREG0.
En el resto de aplicaciones de esta segunda parte del libro se emplea este simulador, de ah la im
portancia en conocer a fondo esta herramienta.
Sin abandonar el prim er ejemplo, se estudi el problema del acarreo por desbordamiento en la
suma, que se produca al sumar 2 a OxFFFF. La capacidad del registro de 16 bits se desborda y en
tonces se activa el bit de acarreo (C) para indicar que el resultado que aparece en el registro WREG0
es incorrecto y le falta un bit por delante.
Existen varias posibilidades para estudiar esta situacin. La primera, y la peor, sera pulsar F7
hasta que el registro WREGO tenga el valor OxFFFF y despus hacer la suma y observar el bit de
acarreo.
Una de las caractersticas que tiene el simulador es que permite cambiar ciertos valores de re
gistros, posiciones de memoria, etc. As, la segunda opcin para mostrar cmo entra en accin al bit
de acarreo es cam biar el valor del registro WREGO a OxFFFF. Para ello, se utilizar otra ventana que
permite visualizar el valor de WREGO y el del registro SR, que es el encargado de indicar, entre
otros, el valor del acarreo. Esta opcin se encuentra disponible en la ventana View -> 10 Special
Function Registe rs, representada en la Figura A3.8.
En primer lugar se debe reiniciar el programa mediante la opcin del men Debugger -> Reset
-> Processor Reset. A continuacin, pulsando F9 se consigue que el programa llegue hasta el pun-
PE*
Address s
SFR Name
MR EGO
0000
0002
WREG1
WREG2_____
0004
0003
000A
oooc
nnnv
221
VJREG4
UREG5
UREG6
TTDlTf'V?
Hex
0000
0000
0000
0
0
0
0000
0000
0000
nnnn
0
0
0
n
i
lo 1 e n s a rn b la d o i\c rtO c
3I0 1 e n s & m b la d o r\c rt 1 c
d Io 1 e n s a m b la d o r\s u m
to de ruptura, inicio del programa. Seguidamente, pulsando dos veces F7 se ejecutan las dos pri
meras instrucciones. Es entonces cuando en la pantalla de Special Function Registers, WREGO to
ma el valor 1 y WREG1 toma el valor 2. Pero como se desea acelerar el proceso del desbordamiento,
haciendo clic en la ventana de Special Function Registers, dentro del valor de WREGO en hexadecimal escribe FFFF, de forma que la pantalla es la de la Figura A3.9.
y g js
M i S p e c ia l 1 u n c tio n R e g is te rs
j
JLclclress V 1
0000
SFR K arre
REGO
SP.EG l
1
0004
WRSG2
0006
0008
non j
R Z04
ex
1
FT7T
D e c im a i
'S
__ [ _ooooM 3S5BHEBBHBI
0000
0
..
usr.;
0000
0000
nnnn
Esx
0"010210
CODO
D e c im a l
2S"
n
S
:ao o
:o o i
A 3 .3 .1 . C o n fig u ra n d o el s im u la d o r y c o n ta n d o e l tie m p o
En muchas ocasiones, interesa saber cunto tiempo tarda en realizar ciertas operaciones el dsPIC.
Naturalmente, eso depende de la configuracin del circuito del reloj. Para analizar estas y otras
caractersticas el sim ulador dispone en el men D ebugger -> Settings... de varias opciones de
configuracin.
222
Simulator Settings
Uartl 10
>
Ose/T race
Break Options
jj
Limitations
SCL Options
Processor Frequency
' Units:
MHz
O KHz
O Hz
Trace Options
Trace All
} Aceptar j
| Cancelar
Aplicar
Stopwatch
( Synch] Instruction Cycles
I
Zero
T,me
l uSecsJ
Processor Frequency
Total Simulated
32
32
6.400000
6.400000
(MHz)
20.000000
En la Figura A3.12. se observa cmo el nmero total de ciclos de instruccin empleados para eje
cutar las rutinas de inicializacin es de 32. Y el tiempo empleado, a una frecuencia de 20 MHz, ha
sido de 6.4 j j s .
223
Confeccione un program a que genere 10 nmeros pares. Cunto tiempo tardar en ser ejecutado el
programa con un cristal de 10 MHz?
La solucin depender del cdigo empleado en el programa. Trate de confeccionar el programa
ms rpido, que utilice menos ciclos de instruccin. U na posible solucin podra ser la siguiente:
.global _main
.text
.main:
repeat #0x04
add #0x0002,WQ
nop
.end
Este programa repite 5 veces la suma del contenido W0 ms 2 para ir generando los 5 primeros
nmeros pares. Y tras esto coloca una instruccin nop, donde se puede establecer un brcakpoint o
punto de ruptura y as medir el tiempo transcurrido hasta dicha instruccin. Se configurar el reloj
del simulador mediante la opcin Debugger -> Settings, de forma que la frecuencia de dicho reloj
sea de 10 MHz.
Una vez establecido el punto de ruptura en la instruccin nop y configurado el simulador, al eje
cutar el programa con la tecla F9 (Debugger -> Run) y cuando el programa se detenga en dicha ins
truccin, se debe acceder al men Debugger -> StopWatch para observar el tiempo empleado, que
en este caso ser de 15,20 jas.
Una de las nuevas instrucciones que se han desarrollado para los dsPTC es repeat. M uchos de los
clculos realizados en el tratamiento de seales son de carcter repetitivo, de ah que se haya aa
dido esta nueva instruccin al repertorio de instrucciones. Podra desarrollarse el program a en C y
observar si hay alguna diferencia en el tiempo de ejecucin entre ste y el desarrolado en ensam
blador. Una posible solucin en lenguaje C podra ser el siguiente programa:
#inc!ude "p30f4013.h"
int main(void)
in tc o n t= l;
int num = 0;
while(cont <6)
(
num = 2 + num;
cont+-K
I
re tu rn 0;
224
En lugar de utilizar el registro WREG, esta solucin emplea variables, que es la forma ms ha
bitual de programar en el lenguaje C. Naturalmente, el programa se podra depurar para hacerlo p
timo, pero sta es una solucin tpica en este lenguaje.
Los nmeros pares se generan en la variable num. Para poder observar el valor que toma esta va
riable, se deber hacer uso de la opcin View -> Watch y seleccionar dicha variable en la lista Add
symbol, y pulsar dicho botn.
Al colocar un punto de ruptura en la ltima instruccin del programa, se puede conocer el tiempo
empleado en esta solucin. Se debe cambiar la configuracin del simulador para que la velocidad del
reloj sea de 10 MHz, al acceder al men Debugger -> StopWatch. El tiempo empleado es de 34,4 ,us.
La diferencia de tiempo es importante. No debe pensarse que siempre se dan estas diferencias tan
grandes de tiempo para conseguir la misma solucin en C y en ensamblador. De hecho, los dos pro
gramas aunque parecidos no hacen exactamente lo mismo, y es por esto por lo que la diferencia se
agranda. Pero s se confirma que con el lenguaje ensamblador bien utilizado se pueden optimizar los
programas. Sin embargo, con el lenguaje C se pueden realizar operaciones de una form a ms ami
gable, sin tener que conocer tan profundamente la arquitectura interna del controlador, obteniendo
un mayor rendimiento en la fase de programacin.
AUTOEVALUACIN
C onceptos clave de este c a p tu lo
1. Qu depuradores soporta la herramienta MPLAB IDE?Dnde puede conocer las limitaciones del
simulador software ?
2. Qu pasa cuando se ejecuta un programa paso a paso?Cundo se ejecutan las instrucciones
del cdigo fuente?
3. Cmo se puede observar con el simulador el nmero de ciclos que tarda en ejecutarse una ins
truccin?
4. Describa las limitaciones del simulador
5. Mediante qu opcin del men se podra visualizar parte de la memoria de datos EEPROM?Po
demos desde el MPLAB IDE escribir en ella?
E jercicios
^^^^^^S^SSSS^BSSSBSSSSSSSSSS^BSSBStBSSBSaBSBSSBBBSSBBSSBSSSBBKaSSSBSSSSBSSSSS^
Confeccione un programa en ensamblador que contenga la instruccin ADD, MOV, GOTO y CPSEQ. A continuacin simule el programa y calcule el nmero de ciclos de instruccin en los que se
ejecuta cada una de esas instrucciones.
Confeccione un programa en lenguaje C que le permita observar cmo cambia el bit de acarreo
de la palabra de estado.
- -
APLICACIN
Manejando las
instrucciones
tpicas de
los dsPIC
A4.1. IN T R O D U C C I N
En este terna se proponen diversos ejemplos de aplicacin que se simulan con el MPLAB SIM y que
contienen instrucciones especficas de los dsPIC.
Para aquellos lectores que no han trabajado con anterioridad con el lenguaje ensamblador, puede re
sultarles algo complicado manejar las instrucciones de salto.
Hay dos tipos bsicos de instrucciones de salto: Instrucciones de salto incondicional e instruc
ciones de salto condicional.
Las instrucciones de salto incondicional rompen el flujo de control en la ejecucin del programa
saltando a la direccin que se indique, es el caso de GOTO Etiqueta, BRA Etiqueta y CALL Etiqueta.
Las instrucciones de salto condicional evalan una condicin y, en funcin del resultado de la
misma, actan de una forma u otra, es decir, saltan o no saltan.
La instruccin BRA C es de salto condicional, de forma que se salta a la direccin de la etique
ta si C = l y se ejecuta la instruccin siguiente si C = 0.
;Movemos OXffff a WO
;Sumamos 1 a W0 para provocar el acarreo
;Si se activa el bit de acarreo salta a la etiqueta SALTO
SALTO:
226
tema anterior. En el siguiente ejemplo, se utiliza la instruccin CPSEQ para buscar el primer n
mero mayor que cero que es simtrico respecto a los dos bytes de un valor. Es decir, que si se in
tercambia la posicin de sus dos bytes, se mantiene el valor.
MOV #0x0000,WO
SUMA:
ADD W0,#0x0001 ,W0
MOV W0.W1
SWAPW1
CPSEQ W0.W1
:Cargamos W0 con 0
;Sumamos I a W0
;Movemos W0 a W l
Intercambiamos los bits de W 1
;Si los W0 y W1 son iguales salta la
;siguiente inst.
Realiza la suma
;Tratamiento de simtricos
.
GOTO SUMA
SIMETRICOS:
.
>>>>X
>X
XVVVX*^>!*>>
-X*>X'XX'X
X'SXx-x-.-x-x-x-X\-X'X-X-X-X-X-.'
x-x-v-:-x-X
;>-V
W
<X
jXX
^*x*x.X
v,xx
y/'-s.
*x -x-x ;
. x-x.,.:
En este ejemplo la instruccin CPSEQ primero comprueba que W0 y W1 tienen el mismo valor.
Si no es as no hace nada y el programa sigue su curso ejecutando la siguiente instruccin GOTO
SUMA. Una vez que W0 y W1 sean iguales, la instruccin CPSEQ har que se salte la siguiente ins
truccin GOTO SUMA y el programa acceder a la parte del programa etiquetada como SIME
TRICOS. El programa ya habr encontrado el prim er nmero simtrico mayor que cero.
La instruccin MAC puede ayudamos a resolver esta ecuacin de forma rpida. Los coeficientes
bo, bi, b2 y b, as como los valores de xn, xn.j, xn.2 y xn.3, se representan en la siguiente tabla:
b
Xn
0x0001
0x0002
0x0003
0x0005
0x0007
0x0002
0x0001
OxQOF
Para aprovechar al mximo la potencia de esta instruccin y hacer esta operacin matemtica lo
ms rpidamente posible, se deben alojar los coeficientes b en el espacio de la memoria de datos X
y los x en el espacio Y, para que el controlador pueda acceder a los dos operandos simultneamen
te. El primer paso en el programa ser colocar dichos datos en sus zonas correspondientes. Para ello
se define una seccin data en el espacio X, a partir de la direccin de memoria 0x0800, de tipo pa
labra, llamada coeficientes, donde se almacenarn los valores de b.
227
Programa MR
global jtnain
Seccin de datos X de la memoria.
section coeficientes, data, xmemory. address(0x0800)
bi: .hword 0x0001, 0x0003,0x0007,0x0001
Mediante estas instrucciones se ha creado una zona en el espacio X desde la posicin 0x0800
hasta la 0x807 incluida con los datos correspondientes a b*. Luego se crearn las entradas corres
pondientes a xn a partir de la posicin OxOCOO en el espacio Y.
u ............. r u ;n / \ n n
n j\ A c
r i.,n n n 't
n ..n n n r ?
Ntese la correspondencia de los datos de la tabla con los de la definicin de la seccin inputs.
.text
&::
V:; :
_main:
bset CORCON,#OxO
Al comenzar el programa se establece a 1 el bit 0 del registro CORCON para indicar que las ins
trucciones DSP trabajan con nmeros enteros. Luego, mediante los registros W 4 y W6, se recogen
los datos de los espacios de memoria X e Y, respectivamente, y los registros W8 y W 10 actan co
mo punteros de las direcciones de la zona de memoria donde residen los coeficientes b y xn.
mov #bW8
mov [W8++],W4
228
El programa realiza una operacin similar con los datos xn, apuntndolos con el registro W10 y
almacenando el dato en el registro W6. As, deposita xn en W6 y deja W10 apuntando a xn-i.
Con las instrucciones descritas se realizan las siguientes acciones:
Los dos componentes del prim er sumando de la frmula (b0 y xn) se encuentran en W4 y W6.
Hay que multiplicarlos entre s y mover el contenido de la posicin de memoria apuntada por W8 a
W4 (para as tener en W4 el siguiente operando bi) y mover el contenido de la direccin apuntada
por W lO a W6 (xn,a W 6 ) .
-.' ; =-
mac W4*W6,A,[W8]+=2,W4JW 10]+=2,W6
Adems, y para dejar preparada la instruccin para repetirse la prxima vez, se postincrementa
W8 y W10 en dos unidades (datos de tipo word), para que apunten a los siguientes datos b2 y x_2 y
que se manejan en el algoritmo.
Al repetir 4 veces la instruccin mac, se realizan las 4 multiplicaciones necesarias a las que se
suma el resultado de la mac anterior. Es conveniente comprobarlo con el simulador. El programa
completo se corresponde con el siguiente listado:
Programa FIR
; Autor: Aritza Etxebarria Ruiz
resolucin de la ecuacin yn=b0Xn+blXn-l+b2Xn-2+b3Xn-3 tpica de filtros FIR
.include ,,p30f4013.inc,,
.global _ma.in
Seccin de datos de Ja Memoria X. Coeficientes b0,bl,b2 y b3
.section coeficientes, data, xmemory, address(0x0800)
bi: .hword 0x000 j, 0x0003, 0x0007, 0x0001
229
T i l e R o g i t l c r s :1
S iac Jrm s
S r
bus l
0800
am o
0820
3830
9040
0850
0860
0070
0630
0000
0000
OD
noon
oaoo
0000
OCDO
0000
OGOO
0000
oooo
oaoo
0000
OCDO
090
0SA 0
j1 o c E
0 0 . ,lL _ L i _ J 1 O S 11. 00 :! ^
nocD
nop:
DUOU o u o o
ocoo
0003 0 0 0
DUCO OGOO o o o o
OOCD OOOD o o o o
OCOO o c o o
OCDO o c o o
OOCD u o o o
OOCD 0 0 0 0
oooo
OCDO
OODO o u o o
0000
ocoo
0000
0 0 0 0 OOOO o o o o
OC DO
OGOO
ocoo
OC DO
OGOO
ocoo
oooo
0000
OODO
ocoo
oooo
OCDO
ocoo
oooo
OCDO
ocoo
oooo
nouo
OCDO
UOD0
ULJU
oooo
GODO
0000
OODO
OOOO
oooo
CDOO
oooo
oono
oooo
oooo
OOOO
COOG
OCOO
OOOO
oooo
_ _ _
'/ X v X v
OOOG
aooo
OOOO
CDOC
OOOO
............ 3
_ _ _
f M
A d d cfess
0 C 10
0 C 20
0 C 30
V
Y
002
0000
OC DO
eoo
GODO
Y
Y
Y
0 C 40
ccso
O C6 0
0C 70
0 C8 0
0 C9 0
Y
Y
V
OCDO
0000
OODO
0000
p r u
L S I 1 06
oono
0 CD7 0 1 -.0
o
o
o
o
c o o c i 0000
OCDO
OCDO OOOC CDOO o o o o
0 0 0 0 OOOC ODOO o o o o
CDOO
oooo
OOOO o o o a
OC 02
0000
oono
0000
oooo
000
CDOO
CDOO
OOOC
CDOO
0300
CDOO
OOOC
COOC
OOOO
OOOO
OOOO
oooa
oooa
OOOC
OOOC?
oooo
CDOO
oooo
oono
oooo
oooo
r
01S6
CDOO
oooo
oooo
oooo
oooo
oooo
OOCO
ooco
oooo
w ? .v
: :
fi .H*:
ULDS
0000
0000
cooc
ODOO
p *04
j vOt t l Sj T r t !
1| W D te
i
cooo
0000
ODOO
oooo
0000
oooo
ooao
DOGO
ooco
oooo
....
>
>5
230
Hasta llegar a la instruccin MAC ejecutando el programa paso a paso (F7) observar cmo W4
contiene el prim er coeficiente, W8 apunta al siguiente coeficiente en la posicin 0x0802, W6 por el
contrario contiene a Xn y W 10 apunta al siguiente coeficiente en Ja posicin 0x0C02, Puede obser
var estos datos en la ventan de File Registers, en la vista Symbolic. (Figura A4.2.)
File Registers
G
0002
0004
0006
0008
000A
OOOC
00 0 E
0010
0012
0014
n n
* f
0000
0000
0000
0000
0
0
0
0
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000001
0000
00000000
0C02
nnnn
3074
00001100
00000010
UREGO
UREG1
TJREG2
UREG3
UREG4
UREG5
UREG6
UREG7
WREG8
WREG9
UREG10
nnr-.i-.r-.t-.i-.i-.
r-.i-.r-.r-.nr-.nt-.
TTT>
0001
00000000
01C2
450
00000001
11000010
0002
00000000
00000010
0000
00000000
00000000
0802
2050
00001000
00000010
00000000
r-.
4 H
Si contina ejecutando el programa paso a paso, por cada vez que se ejecute la instruccin
MAC, sta acumular en ACCA el resultado de la multiplicacin de W4 y W6. Puede observar su
valor mediante la ventana View -> Watch y aadir el SFR (Add SFR) y el registro ACCA.
Con la primera ejecucin de la MAC, el registro ACCA tom ar el valor 0x0002, resultado de
multiplicar 0x0001 por 0x0002. Adems, si se fija en W8 y W10, comprobar que apuntan a los si
guientes datos a recuperar en las direcciones 0x0804 y 0x0C04, mientras los registros W4 y W6
contienen ya los siguientes datos a multiplicar, 3 y 5.
Con la segunda ejecucin, al resultado anterior 2 debe sumarle el resultado de multiplicar 3 por 5.
As, el resultado en el ACCA deber ser de 17 (0x0011). Los registros W8 y W10 apuntan a los si
guientes datos.
Con la tercera MAC, se aade al resultado anterior, 17, el resultado de la multiplicacin de 7 por
2. Es decir, que en el acumulador se cargar el valor 17+ 14 = 31 = 0x001 F. Y ya con la ltima mul
tiplicacin, se aadir al resultado anterior 31 la multiplicacin de 1 por 15, cuyo resultado final es
de 31 + 15 = 46 = 0x002E. (Figura A4.3.)
V a lu e
0X000000002E
Figura A4.3. El acumulador ACCA contiene el resultado final de la operacin matemtica que es 2E.
Este ejercicio muestra el potencial de la instruccin MAC junto con la instruccin repeat. Pue
de parecer trivial porque los datos de los coeficientes han sido introducidos de form a directa y ar
bitrariamente en memoria, pero perfectamente podran haberse introducido unos coeficientes cal
culados con herramientas como las de la aplicacin Diseando Filtros Fcilmente y obtener los
231
valores x com o resultado de una conversin analgico digital de una seal de entrada, para as ob
tener rpidam ente la seal de salida filtrada.
Una m uy parecida es la instruccin MSC, idntica a la m ac, pero que en vez de acum ular va res
tando el resultado de la m ultiplicacin al acum ulador (ACCA = ACCA - X Y).
Para realizar la inicializacin se ha utilizado la directiva .section, luego se asigna un nom bre a
dicha seccin y se debe especificar si los datos pertenecen a la seccin de cdigo ejecutable (.text ),
seccin de datos no inicializados (.bss) o seccin de datos inicializados (.data). En nuestro caso, son
datos que se han inicializado con un valor, de ah que se haya elegido data.
Por ltimo, se elige el espacio donde se quieren inicializar esos datos. Se utilizar .xm em ory pa
ra indicar que los datos se alojan en el espacio X, .ym em ory para indicar que los datos se guardarn
en el espacio Y o .n e a r para indicar que los datos se guardarn en la m em oria cercana.
Slo falta indicar a partir de qu posicin de m em oria se guardarn los datos m ediante . adress .
.section
.section
Coeficientes
data
Xmemory
Nombre asignado
Seccin del
Localizacin de
Direccin
ti la seccin
programa
los datos
de memoria
_y
address(0x0800)
.. . ;
Ymemory: datos
bss: Datos no
inicializados.
en espacio
Ynear: datos en
memoria cercana
232
AUTOEVALU A C I N
Conceptos clave de este captulo
....
Ejercicios
b lX iy f
b 2 X n .2 ~
b -jX n -s
i
rul se dan los siguientes coeficientes:
||
b;
*n
0x0001
OxOOFF
0x0003
0x0005
0x0007
0x0002
0x0001
OxOOOF
vv^A'X
M
A;:
APLICACIN
y escribiendo
las memorias
FLASH y EEPROM
A5.1. MANEJANDO LA MEMORIA DE PROGRAMA FLASH
Existe la posibilidad de guardar datos en la memoria de programa FLASH y para su manipulacin
se requiere poder leer y escribir los mismos. Los dsPTC disponen de dos recursos para el acceso a
datos en la memoria FLASH: las instrucciones de Tabla y el PSV, que ya se han estudiado en la pri
mera parte de teora.
Los controladores dsPlC, disponen de varias instrucciones para el manejo de tablas. Median
te estas instrucciones se pueden leer y escribir datos en la memoria de programa. A continuacin, se
describe el funcionamiento de estas instrucciones mediante la elaboracin de un ejemplo y su co
rrespondiente simulacin.
Este ejemplo simplemente cargar en los registros W1 y W2 los datos de una posicin de la me
moria de programa, la posicin 0x00300. Recordemos que las posiciones de memoria se componen
de 3 bytes, por eso se necesitan 2 registros de 16 bits para guardar los datos. Ms concretamente, se
guardar en la parte baja de W1 el byte ms alto de la direccin 0x00300 y los bytes ms bajos de
dicha posicin en W2. El siguiente ejemplo muestra cm o acceder a la posicin 0x00300 utilizan
do instrucciones de Tabla.
PROGRAMA TABLAS
Lectura de la memoria de programa.
.include Mp30f4013.inc"
.global main
. le x l
jmaii:
;S carga en TBLPAG el nmero de pgina
: de la memoria a leer
MOV #tblpace (#0x00300), W0
MOV W0, TBLPAG
;Hay que mover a WO, ei desplazamiento dentro
;de la pgina que se desea leer
MOV #tbloffset (#0x00300), W0
233
234
Compile el programa y ponga un punto de parada en la primera lnea del mismo. A continuacin
acceda al men View-> Program Memory y vaya hasta la posicin de memoria 0x00300 (atencin,
esta direccin est expresada en hexadecimal, no se confunda con la posicin 300 en decimal) y
cambie el valor por defecto FFFFFF por 123456.
Ejecute el programa paso a paso debiendo en W 1 el valor 0x0012 y en W2 el valor 0x3456.
La escritura en la memoria FLASH es un poco ms complicada que la lectura.
Se puede realizar
en bloques de 96 bytes que se corresponden con 32 instrucciones. A este bloque se le denomina fi
la. Para programarlo se usa un algoritmo que se describe a continuacin, en el que existe una se
cuencia de control que se debe seguir exactamente para realizar el proceso de grabado.
1er paso: Borrar el contenido de los 96 bytes que se van a escribir en la memoria FLASH. Pa
ra ello, a su vez, se seguir el siguiente algoritmo:
1.1. M over al registro de control NVMCON el valor 0x4041, que significa que comienza
una operacin de borrado de memoria FLASH.
1.2. M over la direccin de la memoria a borrar a los registros NVM ADRU y NVMDR.
En NVMADRU se guarda el byte ms alto de la direccin a borrar y en NVMDR los
dos bytes de menos peso de esa misma direccin.
1.3. Cargar 55 al registro de control NVMKEY.
1.4. C a rg a r4A A al registro de control NVMKEY. Esta doble escritura en NUHKEY es
un control de seguridad.
1.5. Poner el bit WR del rcgsitro NVMCON a 1. Cuando la operacin de grabado finalice
dicho bit pasar a 0 automticamente.
2 Paso: M ediante las instrucciones de manejo de Tabla TBLWTL y TBLWTH, cargar las po
siciones a grabar con los datos deseados. Los 96 bytes, ordenadamente.
Para programar ms lneas de memoria bastara con repetir este algoritmo las veces que fuera ne
cesario. A continuacin se presenta el cdigo correspondiente a este algoritmo.
235
PROGRAMA GRABAFLASII
.include np30f4013.inc"
.GLOBAL _main
.text
main:
; SECUENCIA DE BORRADO
MOV
MOV
MOV
MOV
MOV
MOV
DISI
MOV
MOV
MOV
MOV
BSET
NOP
NOP
#0X4041,w()
W0,NVMCON
#tblpage( #0x300), W0
W0,NVMADRU
#tbloffsei(#0x300).w0
W0. NVMADR
#5
#0X55,W0
WUNVMKEY
#0XA*W0
W0,NVMKEY
NVM CON ,#0XF
#0X(),W()
WO.TBLPAG
#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 PGINA DE MEMORIA DE LA DIRECCIN A ESCRIBIR
DEJAMOS EN W0 EL DESPLAZAMIENTO DENTRO
DE LA PAGINA
;CARGAMOS EN W2 LOS 2 BYTES DE MENOS PESO A GRABAR
;CARGAMOS EN \V3 EL BYTE MAS ALTO A GRABAR
ESCRIBIMOS EN LA DIRECCION APUNTADA POR W0 EL
;CONTENIDO W2
EN LA PARTE ALTA EL CONTENIDO DE W3
REPETIMOS ESTE PROCESO CON LAS 31 INSTRUCCIONES
RESTANTES. EN TOTAL. 32 VECES
CARGAMOS EN W2 LOS 2 BYTES DE MENOS PESO A GRABAR
CARGAMOS EN W3 EL BYTE MAS ALTO A GRABAR
ESCRIBIMOS EN LA DIRECCION APUNTADA POR W0 EL
CONTENIDO W2
EN LA PARTE ALTA EL CONTENIDO DE W3
CARGAMOS EN W2 LOS 2 BYTES DE MENOS PESO A GRABAR
CARGAMOS EN W3 EL BYTE MAS ALTO A GRABAR
ESCRIBIMOS EN LA DIRECCION APUNTADA POR W0 EL
CONTENIDO W2
EN LA PARTE ALTA EL CONTENIDO DE W3
236
Se debe repetir el cdigo de las 4 instrucciones finales hasta completar las 32 instrucciones a gra
bar. En todas ellas se est grabando el mismo dato #0x l i l i l en la posicin de memoria indicada.
; INSTRUCCION 32
MOV
#0x 111 l,W2
MOV
#0X001LW3
TBLWTL W2,[W0]
TBLWTH W3,[W0++]
; PROCEDIMIENTO DE ESCRITURA
MOV #0x4001, W0
MOV WO,NVMCON
DISI
#5
MOV #0X55,W2
MOV W2.NVMKEY
MOV #0XAA,W 1
MOV W 1,NVMKEY
BSET NVMCON,#WR
NOP
NOP
ESPERA2:
BTSC NVMCON,#WR
GOTO ES PER A2
NOP
.end
Se puede ejecutar el programa y observar su resultado con el simulador. Para ello se recomien
da establecer 3 punios de ruptura. El primero se coloca en la primera instruccin del programa, el
segundo en la prim era instruccin de carga de datos en memoria, y el ltimo en la ltima instruc
cin NOP del programa.
Al comenzar la simulacin y pararse el programa en la prim era instruccin, se puede acceder a
la memoria de programa para modificar la posicin en la que se van a grabar los datos, posicin
0x00300, y sustituir el valor OxFFFFFF por otro, por ejemplo, Ox AAAAAA.
Al seguir la simulacin hasta el siguiente punto de ruptura, se debe observar cmo el valor de di
cha posicin de memoria ha cambiado por el valor OxFFFFFF.
Y por ltimo, al llegar a la ltima instruccin de programa, se observar cmo desde la posicin
300 hasta la posicin 33E el valor almacenado en la memoria FLASH es 0x111111. (Figura A5.1.)
La posibilidad de escribir en la memoria de programa, sin necesidad de cam biar el voltaje su
ministrado al dsPIC, le proporciona un potencial importante. Se puede proporcionar al dsPIC una
circuitera auxiliar para su conexin va serie con un ordenador y cargarle con un programa que re
ciba los datos por dicho puerto, los escriba en la memoria de programa y transfiera el control de la
ejecucin a dicha posicin de memoria. As, se podra grabar al dsPIC sin ms circuitera que la de
un puerto serie, con el consiguiente ahorro correspondiente.
237
rogram M emory:/
Dis&sse
384
385
386
387
388
389
390
391
392
393
394
395
002 F E
noe r
nopr
FFFFFF
00300
00302
00304
003 06
00308
0030
0 03 0C
003 0 E
00310
00312
00314
00316
00318
0031A
0 0 3 1C
0 03 1E
00320
00322
00324
0032 6
0032 8
003 2 A
0 03 2C
0032E
00330
00332
00334
s u b r .u
su b r. w
su b r. w
s u b r .w
su b r. w
s u b r .w
s u b r .v
su b r. v
su b r. v
su b r. u
s u b r .n
su b r . w
su b r. w
3 u b r. w
su b r. w
s u b r .w
su b r. w
3 u b r. w
su b r. v
su b r. v
s u b r .w
su b r. w
su b r. u
su b r. v
s u b r .
su b r . w
su b r. w
1 11 11 1
l l l l l l
111111
l l l l l l
l l l l l l
l l l l l l
l l l l l l
l l l l l l
l l l l l l
l l l l l l
l l l l l l
396
l l l l l l
397
l l l l l l
398
l l l l l l
399
l l l l l l
400
l l l l l l
401
l l l l l l
402
l l l l l l
403
l l l l l l
404
l l l l l l
40S
l l l l l l
406
l l l l l l
407
l l l l l l
408
l l l l l l
409
l l l l l l
410
l l l l l l
411
l l l l l l
412
l l l l l l
00336
413
00338
l l l l l l
0033 A
414
l l l l l l
0033C
415
l l l l l l
416
0033E
l l l l l l
FFFFFF
417
00340
Machine il SjfrboSc PSVMixedl PSV Data j
3 u b r. w
su b r. w
su b r. w
su b r. w
su b r. v
nour
u 2 , [ w l ] , [ w2 ]
w 2 ,[ w l] , [vZ ]
v 2 ,[ v l] ,[ v 2 ~ ]
w 2 , [ w l ] , [w 2 J
v Z , [w l] , [ w 2 ~ ]
2 , [ w l ] , [w 2 ]
u 2 , [ w l ] , [WZ ]
w 2 , [ V i ] , [w 2 ]
W2, [ u l ] , [w 2 ]
w2, [ w l ] / [ w2
]
w2# [ w l ] , [ w 2 ]
w 2 , [ w l ] , [w 2 ]
u2 [ W l] , [ w2 ]
v 2 , [ w l ] , [ w2 ]
V 2 , [w l] , [ v 2 ]
w 2 ,[ w l] ,[ v 2 ]
w 2 , [w l] , [ v 2 ]
w 2 , [ w l ] , [w 2 ]
W2, [ w l] , [w 2 ]
w 2 , [ w l ] , [w 2 ]
2 / [^ 1 ] / [W2 ]
w2 , [ u l ] , [ w2 ]
v 2 , [ w l ] , [ w 2 --]
v2 , [ w l ] , [w 2 ]
w2 , [ w l ] , [ w2 ]
w 2 , [ w l ] , [W2 ]
w 2 , [W l] , [ w2 ]
W 2 , [ w l ] / [w 2 ]
w 2 , [ w l ] , [ w2 ]
w 2 , [ w l] , [ w2 ]
w2 , [ v i ] , [w 2 ]
w 2 , [ u l ] , [w 2 ]
La lectura de la memoria EEPROM se diferencia con respecto a la de FLASH en que se leen los da
tos de 2 en 2 bytes, en vez de 3 en 3 bytes. Para realizar la lectura se escribir en TBLPAG el n
mero de pgina de la memoria EEPROM y en WO el desplazamiento dentro de dicha pgina y lue
go con una simple instruccin TBLRDL se leer el dato.
La EEPROM que slo est disponible en la fam ilia dsPIC3()F com ienza en la posicin
0x7FFC00. Se propone elaborar un programa que lea dicha posicin. Para simularlo hay que cam
biar previamente el valor contenido en dicha posicin de memoria.
ion de memoria
238
// T,cc EEPROM en C
#include p3f4013.h'
mt main(void)
TBLPAG = 0x7F:
WREGO = OxFCOO;
asm("TBLRDL [W0],W4M
)
rcturn 0:
iii
C*v>.
Puede observarse en este ejem plo en C que, a veces, es necesario introducir ciertas instruc
ciones especficas del lenguaje ensam blador en los program as en C. Para ello utilizam os la
sentencia asm (instruccin), donde instruccin es la instruccin en ensam blador que no desea
incluir.
La grabacin en la memoria EEPROM tiene muchas similitudes con la grabacin en la memo
ria FLASH. Cuando se graba esta memoria, se puede grabar una palabra de dos bytes o una lnea de
16 palabras (32 bytes). A continuacin, se describe el algoritmo de grabacin de una palabra en la
memoria EEPROM:
239
240
// Graba EEPROM en C
// PROGRAMA GRABAEEPROMC
#include p30f4013.h"
int sccuenciagrabacionQ
// Esta funcin escribe la secuencia de grabacin
// tanto para borrado como para grabacin
i
1
TBLPAG = 0x7F:
WREGO = OxFCOO;
NVMKEY = 0x55;
NVMKEY = OxAA;
N V MCON bits. WR= 0x1
asmCNOP1);
asm(,,NOP,r);
return 0;
//Apuntamos la pgina
//Apuntamos el desplazamiento en la pgina
//Movemos a NVKEY la secuencia 55
//Movemos a NVMKEY la secuencia A A
//Activamos el bit WR de NVMCON
//Esperamos 2 nops
%* #+## sfc
// Programa principal
:<* * * *---*** **-Jf* **
int main(void)
l
int. a = 0;
TBLPAG = 0x7 F;
WREGO = OxFCOO;
asmCTBLRDL [W0],W4B);
WREG4 = WREG4 + 1;
NVMCON = 0x4044;
a = secuenciagrabacion();
while(NVMCONbits.WR == 1);
TBLPAG = 0x7 F;
WREGO - OxFCOO;
asmC'TBLWTL
W4, [W0]M);
NVMCON = 0x4004;
a = secuenciagrabacion();
whi le(N VMCONbi ts.W R == 1):
return 0;
!
//Variable auxiliar
//Apuntamos a la pgina de la direccin a leer
//Leemos el dato en WREG4
//Sumamos 1 a WREG4
//Configuramos NVMCON para borrar EEPROM
//Ejecutamos secuencia borrado/grabacin
//Esperamos al bit WR de NVMCON sea 0
//Apuntamos a la pgina de la direccin a leer
//Apuntamos el desplazamiento en la pgina
//Escribimos en el registro el cont. de W4
//Configuramos NVMCON para grabado EEPROM[
//Ejecutamos secuencia borrado/grabacion
//Esperamos al bit WR de NVMCON sea 0
N tese que en el lenguaje C para acceder a la inform acin de los bits de cualquier registro, se de
be escribir el nom bre de registro acom paado de la palabra b its y a continuacin, tras un punto de
separacin, el bit al que se desea acceder. A s, por ejem plo, para poner a 1 el bit W R del registro
N V M C O N se escribe lo siguiente:
N V MCON bits. WR = 1;
241
El simulador del entorno de desarrollo MPLAB IDE es una herramienta muy com pleta donde se
pueden simular casi todas las caractersticas que presentan los controladores dsPIC. Esto convierte
a esta herramienta en una plataforma de aprendizaje y de ensayo de proyectos inmejorable.
AUTOEVALU A C I N
Conceptos clave de este captulo
Ejercicios
/
mov #0x0002, WJ
add WO, WJ, WO
Movemos un 2 al registro WJ
;Sumamos el registro WO y W y dejamos
;el resultado en WO
APLICACION
A lo largo del presente tema, se abordarn distintos ejemplos en los que se utilizan los perifricos
que se hallan integrados en el dsPIC. Muchas de las patitas del controlador soportan distintas fun
ciones. Los perifricos pueden desarrollar distintas tareas en funcin de cmo sean configurados.
Para facilitar esta tarea de la inicializacin de perifricos del controlador (puertas de entrada/salida,
conversores analgicos, temporizadores, etctera) el entorno de desarrollo MPLAB IDE dispone de
una herramienta denominada Visual Initializer, VDI o Inicializador Visual.
Mediante el uso del VDI se profundizar en la programacin de los controladores dsPIC, reali
zando ejemplos en los que se utilizan diversos perifricos.
Siguiendo con la filosofa de esta parte de la obra, la ejecucin de estos programas se har de
forma simulada, as por ejemplo, para el uso de las puertas de entrada/salida se har uso de las ven
tanas de inspeccin de manejo de los datos que deberan llegar desde el exterior al controlador y
viceversa.
A 6.2 . V IS U A L IN IT IA L IZ E R
El Visual Initializer o VDI es una herramienta que incorpora el MPLAB IDE para simplificar en la
difcil tarea de la configuracin del dsPIC. El programa Visual Initializer hace que esta tarea sea tan
fcil como pinchar y arrastrar iconos y cambiar los parmetros en un cuadro de dilogo. Una vez
completada esta labor, genera el cdigo necesario para usar tanto en los programas en ensamblador
como en lenguaje C.
Tambin com prueba si existe algn tipo de inconsistencia en las configuraciones y genera
mensajes de error en caso de existir conflictos en las asignaciones de patitas, m em oria, interrup
ciones, etc.
Para acceder a esta herramienta, resulta recomendable empezar un proyecto para tener seleccio
nado el tipo de dsPIC con el que se desea trabajar y as la aplicacin Visual Initializer muestre las
opciones de los perifricos especficos de dicho controlador.
243
244
Una vez arrancado el proyecto mediante el men Tools->4 Visual lnitializer se pone en marcha
esta utilidad. Al hacerlo, puede comprobarse como en el men de la aplicacin MPLAB IDE apa
rece un nuevo elemento. (Figura A 6.1.)
Visual Initializer
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
Adems del nuevo men tambin aparecer en pantalla la ventana principal de esta herramien
ta. (Figura A6.2.)
M P l AtJ ID L V / . 3 0
F ls
D
Edt
C
fa
ycw
;
[V is u a l I n il i a lb e r ]
P/ojetfc
S
O = tosqst
S
d '
Tate
9
Vsuol I n t i e l r
19 ( #
Cor/gu-s
r*
1 BT
i3
nI
(==3
Window
Heto
Checksum :
0x b f 6 7
t>
ii
Q y Q ijjy M l
OieiWo
InlenupU
n d t ip:
1 BT
irr
a
GEI
PW M
r ~tt
CAN
3yrrp
d s P I C ttiH O lj
; p c :0
?>
1 ; : i &
dsPC30F4ni344-PnTOFP
pm
9d
nr
"'ft:ii
M&AP.-SIM
mamamama
. ex
'
Procrammsr
o a b & a b lP O : d c n .o v .z c
.M
a wm
B
SE
245
Al observar la ventana de la Figura A6.2, puede comprobarse que el dsPIC que aparece en pan
talla no es el correcto. En la aplicacin 0 se acord utilizar el dsPIC30F4013 pero con encapsulado
PDIP y el mostrado en pantalla no tiene dicho encapsulado. El encapsulado puede cambiarse con el
botn derecho sobre la representacin del controlador en la ventana y pulsando la opcin Change
package. Entonces aparecer en pantalla un cuadro de dilogo con una lista desplegablc denomina
da Package type y habr que elegir 40 Pin-PDIP.
MPLAB IDE V 7 .3 0
Re
Debugger
Progranrer
Took
Visual Jntislzer
Configure
Window Meb
Checksum:
0xb67
E>t. Interface
Op Amp
45?K3Cf*0):<
pc:fl
oibHblPO:acn'ovtc
Tras esta operacin, el encapsulado del dsPIC pasa a ser el de la Figura A6.3. Esta pantalla
se encuentra dividida en 2 partes. La prim era, situada verticalm ente en la parte izquierda, con
tiene las distintas opciones configurables del controlador (RTC, DSP. I/O P orts,...). El resto de
la ventana, donde aparece el controlador, sirve para representar grficam ente los elem entos inicializados en el mismo. Es im portante ensanchar la pantalla verticalm ente ya que de lo contra
rio al pinchar en las opciones de la izquierda podra no desplegarse ninguna opcin por falta de
espacio.
Para configurar cualquier perifrico hay que seleccionarlo en el panel de la izquierda y arras
trarlo sobre la representacin del controlador. Al soltarlo, aparecer un icono sobre el controla
dor. A continuacin, haciendo doble clic sobre dicho icono, aparecer un cuadro de dilogo que
hay que cum plim entar para configurar dicho perifrico. En cualquier momento, para volver a
configurar esos parm etros, puede volver a hacerlo haciendo doble clic sobre el icono aadido al
controlador. (Figura A6.4.)
246
d s P IC 3 Q F 4 0 1 3 4 0 -P in P D IP
Oscillator
Inteiiupts
and Traos
Port B
Port B
Poit Pin Settings
p io
[R B I
H~RB2
il RB3
ji RB4
1Unclaimed
Data Direction
Initial Value
| RB5
RB6
-;??
Ext. Interface
dp Amp
Para elim inar una configuracin, basta con arrastrar el icono creado en el controlador a una par
te de la ventana vaca, y as desparecer.
Una vez configurados todos los perifricos necesarios de esta forma tan fcil e intuitiva, tan
slo falta aplicar estos cambios sobre el proyecto. Para ello, se dispone de varias opciones confi
gurables. Desde el men Visual Initializer->Code Generarion Options se pueden configurar las
opciones del cdigo a generar. (Figura A6.5.)
Code Generation Options
[Q
Q Generate code only when initialization values do not match POR states
Help
OK
Cancel
Apply
Entre otras opciones, se debe indicar al generador de cdigo que slo genere el cdigo de aque
llas funcionalidades que disponga el controlador utilizado, marcando la opcin Generate code only
fo r features/re sources on processor package de dicha pantalla.
247
Una vez configuradas las opciones de generacin de cdigo, se puede generar dicho cdigo me
diante la opcin Visual Initializer->Code Generation. Aparecer el cdigo en pantalla y se podr
salvar dicho cdigo, incorporarlo al proyecto o copiar la parte que se desee e incorporarla al cdi
go fuente. (Figura A6.6.)
; In itializatio n C ode for dsPIC 30F4013. Fam ily: co n tro ller control. P ack ag e: 40-Pin PDIP 4 0 p in s
.include "p 3 0 F 4 0 1 3 .m c
fSi
} Save to Project ] [ Close Window |
Como primer ejemplo, se acomete la creacin de un proyecto con el VDI. Recibir una seal digi
tal por una patita procedente, por ejemplo, de un interruptor y sacar por otra patita el valor inver
tido de la entrada del controlador que se usa para encender o apagar un lcd.
Para poder llevar a cabo este proyecto, se debe configurar una patita del controlador como en
trada y otra como salida. Despus el programa slo deber leer el valor de la patita de entrada, in
vertir dicho valor, y mostrarlo por la patita de salida.
Cree un proyecto para el controlador dsPIC 30F4013 y acceda al men Visual initializer. En la
barra vertical de la derecha elija la opcin I/O Ports. Al hacerlo, bajo este epgrafe, aparecern dis
tintos iconos de las distintas puertas que dispone el controlador. Elija la puerta D (port D) y arrs
trela hasta el controlador. A continuacin haga doble clic sobre el icono de la puerta D arrastrada
hasta el controlador y aparecer el cuadro de dilogo de la Figura A6.7.
En la pestaa RDO de la Figura A6.7 se configura el PINO de la puerta D, de form a que sea la
entrada en la que se conectar el interruptor.
Para ello, en la lista desplegable Data Direction, seleccione Input. En la pestaa RD1, configu
re el PIN1 de la puerta D como salida, output en la lista Data Direction, para colocar all el led co
rrespondiente. Al finalizar pulse Ok. (Figura A6.8.)
248
{; RD9
Data Direction
Initial Value
OK
Help
Cancel
Apply
dspc3f413
RDO
//
RD1
FTT71
Figura A6.8. Diagrama de conexionado de las Entradas y Salidas.
Ya ha configurado los perifricos del proyecto. Ahora slo queda generar el cdigo correspon
diente e incorporarlo al programa. En primer lugar, acceda al men Visual Initializer -> Code Ge
neration Options y marque la opcin Generate code only fo r features/resources on processor p a c
kage. A continuacin, acceda al men Visual Initializer ->Code Generation para que aparezca en
pantalla el cdigo correspondiente. Al pulsar Save to Project se guardar un fichero con dicha inicializacin, que se incorporar a la lista de ficheros del programa. Cierre dicha ventana y la venta
na del Visual Initializer para regresar al proyecto.
O bserve cm o en el panel del proyecto ahora se encuentra un fichero llam ado init_
dsPiC 30f40l3.s. Ese fichero contiene la rutina de inicializacin. Para llamar a dicha rutina de
inicializacin se debe incluir una instruccin cali _VisualInitialization en el cdigo fuente del pro
grama. El programa ser el siguiente:
;PROGRAMA PORTO
.include ?p30f4Q:l3.inc-?
.global jmain
.text
mam;
cali _VisualInitialization
m i
......
BXJCLH:
fiTSS PORTD.#RDO
BSET PORTD.#RDl
BTSC PORTD.#RDO
BCLR PORTD. #RD 1
GOTO BUCLE
.end
249
//PROGRAMA PORTDC
// Programa ejemplo de maneje >.
//de puertas de E/S en C
tfinciiiue p3ur^yi3>a
int main(void)
{
VisualInitiali/.ation():
whileC 1) //Bucle infinito
if (PORTDbits.RDO == 0)
PORTDbits.RDl - 1:
else
PORTDbits.RDl = 0 ;
)
return 0;
}
El simulador dispone de una utilidad para manejar datos del exterior. Se cambian los datos de la
patita RDO de la puerta D.
Para llevar a cabo este tipo de actuaciones, se debe crear un escenario en el que se aadirn para
este ejemplo dos escenas, una para establecer un nivel alto por la patita RDO y as comprobar cmo
reacciona el programa ante dicho estmulo, y otra para establecer un nivel bajo por la patita RDO.
Para crear el escenario, se accede al men D ebugger -> Stimulus Controller -> N ew Scenario.
Inmediatamente aparece en pantalla un cuadro de dilogo para crcar el escenario. Este cuadro dis
pone de varias lneas en blanco para implementar varias escenas. Pinche en la primera fila bajo la
etiqueta Pin/SFR y aparecer una lista desplegable en la que podr elegir el pin RDO. En esa misma
fila, en la columna Action, seleccione de la lista la opcin Set High para que cuando utilice esta es
cena se establezca en el bit RDO un nivel alto. Igualmente, en la fila inferior seleccione RDO y es
tablezca una accin Set Low, que har que se cargue un nivel bajo en la patita RDO. El resultado que
debe obtener se ofrece en la Figura A6.9.
El simulador permite salvar este escenario con la opcin Save Scenario, para que cuando vuel
va a abrir este proyecto no tenga que volver a crearlo.
Si ahora se simulase el programa paso a paso, se podra cambiar el estado de RDO a nivel alto o
a nivel bajo y observar su funcionamiento. Para cam biar a nivel alto o nivel bajo RDO debe pulsar
250
Attach
I .
Detsrh
inr-pat/Me'e*
Asynchronous Stimulus
Fire : Pin / SFR j Action
RDO
j Width
; Units
Comments / Message
Sei High
v ! Set Low
j Delete tow |
Save Scenario [ [
Exit
| [
Heip
Figura A6.9. Creacin de un escenario para actuar sobre las seales externas del controlador.
en el inicio de la fila donde aparece el smbolo > y observar cmo al ejecutar el programa se ejecu
tan las instrucciones correspondientes a dicho estado.
Utilizando este escenario, compruebe paso a paso el programa y observe si el valor del segundo
bit de la puerta D va cambiando de valor, en funcin de si se establece un nivel alto o un nivel bajo
mediante el escenario creado.
M ediante el siguiente ejemplo se configura un tem porizador para hacer que el controlador acte
como un sem foro. Durante cierto tiempo encender un led rojo y durante otro tiempo un led
verde. Adems de configurar el tem porizador tam bin se deben configurar 2 patitas del contro
lador como salida para encender el led verde y el led rojo. Para ello se utilizarn los pines RDO
y RD1.
Para configurar estas patitas, se abre el Visual initializer y se cam bia el encapsulado del
dsPIC mediante el botn derecho del ratn y la opcin Change Package. A continuacin, se
accede a la opcin 1/0 Parts, se selecciona la puerta D y se arrastra hasta la figura del controla
dor. Al hacer clic sobre el icono correspondiente a dicha puerta, se podrn configurar RDO y RD1
como salida. (Figura A6.10.)
A continuacin se configura el Timer para que el semforo est cierto tiem po en rojo y otro
en verde. Pero previam ente es necesario cam biar la frecuencia de trabajo del reloj del controla
dor y establecer una frecuencia y un origen del reloj distinto al que trae por defecto el Visual
Initializer.
Acceda al cuadro de dilogo correspondiente haciendo clic sobre el icono OsciUator. Marque la
casilla View Advanced Oscillator Settings y establezca como fuente de reloj Clock Source, Infernal
LPRC. Y as la frecuencia del reloj se establecer a 0 ,5 12 Mhz.
251
Para configurar el temporizador, acceda a la opcin Timer del Visual Initializer, elija el Timerl y
arrstrelo hasta el controlador. Pulse sobre el icono del timer y configrelo de la siguiente manera:
0 Enable on Slaitup
O Gsled Time Accumulation
Timer Clock Prescale: 1:256
Timet Period:
j I imer Frequency:
1000
: Continue
>
Poliscale: 1 '
(msec)
0,00100003690; (KHz)
(Calc.)
- Interrupt-----------------------------------------------------
0 Enable Interrupt on Startup
Interrupt Priority: j 4
Heb
OK
Cancel
Apply
Observe la sencillez que supone trabajar con el VDI frente a configurar cada uno de los bits de
los registros de configuracin de este recurso. No es necesario recordar todos los bits que intervie
nen en la configuracin del mismo, tampoco se deben hacer clculos matemticos para establecer
la cuanta del contador para as obtener un perodo determinado.
252
La herramienta Visual Initializer ha realizado estos clculos para una frecuencia de reloj estableci
da previamente. Esta frecuencia no coincide con la frecuencia que usa el simulador, as que para obte
ner el resultado deseado deber cambiar tambin la frecuencia de trabajo del simulador. (Figura A 6.12.)
|i
Fcy(MHz): 0.128000
linfe'.(MHz}
0 View Advanced Oscillalof Sellings
Advanced Oscillator Sellings
Clock Souice:
Internal L PRC
Clock Divider:
Divide by 1
v>
Cancel
Seleccione la herramienta MPLAB STM en el men Debugger y en la opcin Sim ulator Settings
establezca como velocidad del reloj 0.512 (atencin, no use la coma como separador decimal sino
el punto). (Figura A 6 .13.)
S im u la to r S e ttin g s
;
IJaill IO.
1?
Ose / Trace
Processo: Frequency
Break Options
fi
Limitations
SCL Options
j
!
Units:
MHz
OKHz
0.512
OH
l Aceptar |
j Cancelar ]
Aplicar
Una vez configurado el temporizador y las puerta D como salida slo queda configurar la herra
mienta Visual Initializer mediante las opciones Generate code only for features/resources on pro
cessor package en el men Visual Initializer -> Code Generation Option, generar el cdigo e in
cluirlo al fichero del proyecto.
253
La programacin del dsPiC emplea 2 ficheros fuente. Un fichero para el programa principal y
otro en el que se atiende a la interrupcin.
El programa principal podra ser el siguiente:
;Programa SEMAFORO
;PD0 ROJO, PD1 VERDE
.global _main
.text
_main:
cali Visuallnitialization
mov #0x000LWO
mov W0,PORTD
BUCLE:
goto BUCLE
.end
G uarde el fichero e incluyalo en el proyecto. A continuacin, cree otro fichero donde se escribir el cdigo correspondiente a la interrupcin generada por el timer.
;PROGRAMA SEMAFORO
.global__TJ Interrupt
;Atiende a la interrupcin del Timer 1.
Comprueba el estado del semforo y lo cambia de color.
T 1Interrupt:
; Borramos el flag de interrupciones.
bclr
1FS0,#T1IF
;Si el bitO de PORTD est a Uno salta el rojo
btss PORTD,#RD0
;y pasa a verde
goto ROJO
VERDE:
;Ponemos verde el semforo
mov #0x0002,'W0
mov W0,PORTD
goto final
ROJO:
;Ponemos a rojo el semforo
mov #0x0001.W0
mov w0,PORTD
final:
; Return de la interrupcin
RETFE
254
Para probar este programa en el simulador es recomendable colocar 2 puntos de parada, uno co
mo siempre en la prim era instruccin del programa principal y otro en la primera instruccin del
programa que atiende a la interrupcin del Timer 1. Si adems se aade en la ventana Watch del me
n View el registro PORTD, se comprobar como este registro cambia peridicamente pasando de
valer 0x0001 (semforo rojo) a 0x0002 (semforo verde). Puede comprobar el tiempo transcurrido
entre cada cambio utilizando la opcin Stop Watch y tambin puede ver cmo va cambiando el con
tador mientras el programa ejecuta el bucle principal visualizando el valor del registro T M R 1 en la
ventana Watch del men View. Es probable que a la hora de ejecutar el programa con el simulador
compruebe que el programa se para en una parte del cdigo desconocida. Volviendo a pulsar F9 el
programa seguir su ejecucin normal. (Figura A6.14.)
U MPiabmr V7.30
Fife
Ed:
; Cr
- *. %
't g ^ c
g j : Checksum : 0xa6da
t I I M> ? T?
&
O V .Ainterrupcion.s
jiobal __ T im t rru p t
.in c lu d e
Sfapwateh
''p 3 0 ? H 0 1 3 . i n c "
__ T i l r c r Lu c t- :
^ILK
IfSO , t l l l f
i Reset del fiagde tnCcxup<
BTSS POJ>7>,92DU ;x c l fcitO de P0RH> esto a Uno alta '
COTO SDJO
U8JB
or <0x0002,*0
co r
^ S y n c h | In sbucbon C j d e s
9999962 '
33S3SG2
1.393532
".9S3S82
20.000
tfO .? O R D
joto Iu ia jl
V.CJO:
0 7 O x O O O l .V O
#xnclude p 0 f4 0 1 3 .h ,t
//Programa Semforo en lenguaje C
// PROGRAMA SEMAFOROC
//Esta funcin atiende a la interrupcin del temporizador
void attribute (( interrupt )) _T1 Interrupt void)
{
IFSObits.TlIF = 0;
if (PORTDbits.RDO == l)
PORTD = 2;
else
PORTD = I ;
}
//Programa principal
int main (void)
VisualInitiaUzation();
PORTO = J;
while(l)
{
asm("drwdtM
);
255
ttiM 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 ms completos.
Una posible ampliacin para el proyecto del semforo podra consistir en dotarlo con un interrup
tor para que el peatn solicite que se ponga verde. Cuando el peatn pulse este interruptor que es
tar conectado a una patita del controlador, se genera una interrupcin que har que el semforo se
ponga rojo para los vehculos. Para llevar a cabo la simulacin de esta nueva situacin es necesario
colocar un interruptor conectado a la patita INTO, que provocar que el semforo pase a rojo.
Tomando como base el ejemplo anterior hay que incluir una nueva configuracin. La configura
cin correspondiente a la interrupcin externa en la patita INTO. Adems se deben estudiar las prio
ridades de las interrupciones y proteger la ejecucin de las mismas para que 110 se interrumpan unas
a otras. El primer paso ser volver al Visual Initializer y habilitar la interrupcin externa INTO. Para
ello no debe arrastrar ningn objeto nuevo sobre el dsPIC ya que la opcin para configurar las inte
rrupciones ya se encuentra configurada. Se trata del icono denominado Interrupts and Traps sobre el
que haciendo doble clic podr proporcionar el cuadro de dilogo mostrado en la Figura A6.15.
czn
tzaj
CZH
dsP1C H nR I013 4 0 -P in P D IP
Osdlatcc
IriciiLpis
on d I (oik
FoilD
I a 1
E
0;
Ifii:v3l - F U pli'.nly:
'.v .j
ODisable
'
QapencoU tropcovelltw
EnsbiMGLB
Prcpefe oi Irtteirup*1NTU:
Pncr^
__ ;
256
Resulta de especial inters la inclusin de la instruccin disi #4. Con esta instruccin se desha
bilitan las interrupciones de nivel de prioridad del 1 al 6 durante las (4 + 1) siguientes instrucciones.
As, si en un momento en que el programa atiende a la interrupcin del pulsador no se atender la
interrupcin solicitada por el Temporizador TIM ER 1. Para establecer prioridades entre estas inte
rrupciones se utiliza el cuadro de dilogo de la Figura A6.15.
En lenguaje C la solucin puede ser la siguiente:
//PROGRAMA SEMAFOROINT
#includc "p30f4013.h"
//Programa Semforo en lenguaje C
257
y temporizador
semforo
Figura A6.16. Ejecucin del programa semforo con pulsador con un escenario.
Para simular este programa se establece un punto de parada en el cdigo que atiende a la inte
rrupcin externa y se crea un escenario para provocar dicha interrupcin. Dicho escenario se puede
crear a travs del men Debugger->Stimulus Controller-New Scenario. En la lista Asynchronous
Stimulus aada INTO con la accin Pulse High. As, al pulsar sobre el smbolo > situado al inicio de
la fila creada, el programa deber parar su ejecucin en la primera lnea del cdigo que atiende a la
interrupcin externa. Observar que entonces el semforo se pondr en rojo. Pero todava queda al
go por mejorar en este programa. Lo ha detectado? Se atreve con ello?
En este ejemplo puede observar que para atender a la interrupcin INTO se ha necesitado incluir
la etiqueta__INTOInterrupt. Esta etiqueta se encuentra definida en el fichero p30f4013.gld. Puede
abrir este fichero y examinar la seccin ** Section M ap fo r Interrupt Vector Tables para observar o
buscar la etiqueta correspondiente a otro tipo de interrupciones, as por ejemplo se dispone de
__ADClnterrupL para interrupciones del mdulo conversor analgico digital,__TI Interrupt para in
terrupciones del temporizador 1, etc. La siguiente tabla rene algunas de estas etiquetas.
258
ETIQ U ETA
IN TERRU PCI N
__INTOInterrupt
__IC1 Interrupt
OC1 Interrupt
__T;1 Interrupt
__IC2 Interrupt
T2 Interrupt
_SPI1 Interrupt
_UlR X Inlerrupt
__U lTXInterrupt
AUTOEVALUACION
Conceptos clave de este captulo
j j f
E je rcicio
APLICACIN
VrtVWl>
r*
V iW 'W iX rt V
xoyivi-r,
..v.v.<iw iv r> v iv iw .* iv iv iv .v .v /.
/ /
Perifricos
avanzados
Wffi
A7.1. IN T R O D U C C I N
A lo largo del presente tenia se manejarn diversos perifricos de los controladores dsPIC que son ms
especficos en el tratamiento de seales. Algunas aplicaciones son difciles de simular ya que resulta
complicado insertar una seal analgica al simulador, por eso, en algunos casos, el estudio se limita
r a describir el perifrico, sus posibilidades y su inicializacin para su conecto funcionamiento.
El comportamiento de las instrucciones DSP puede variar en funcin de la configuracin del Motor
DSP. Para configurarlo de una forma sencilla se proceder a utilizar la herramienta Visual Initializer.
Previamente se seleccionar el modelo, en nuestro caso el dsPIC30F4013. A continuacin se inicializar el Visual Initializer y se seleccionar el icono DSP, arrastrndolo hasta la imagen del con
trolador. Al hacer doble clic con el ratn sobre dicho icono aparecer en pantalla el cuadro de di
logo correspondiente para la configuracin del Motor DvSP. (Figura A7.1.)
Hep
or.
Cancel
Apply
260
D ESCRIPC I N
MAC
M ultiplicar y acumular.
MSC
MPY
MPY.N
ED
FDAC
Si se elige como Multiplication Mode la opcin niegen el resultado de las mencionadas ins
trucciones se representar como un valor entero, si por el contrario se selecciona Fractional, el re
sultado ser un numero fraccionario.
Existen otras instrucciones que multiplican ciertos valores, como MUL, en las que el resultado
siempre es un valor entero y por tanto no utiliza esta configuracin del motor DSP.
Otra opcin para configurar el Motor DSP es el Accumulator Roundy o redondeo del acumula
dor. Para este parmetro existen dos posibilidades, Convergente convergente y Conventional, con
vencional. La diferencia entre ambos modos se analiza en la parte terica de esta obra, ms con
cretamente en el Anexo del Captulo 4, M anipulacin de datos del Motor DSP.
Bajo el epgrafe Accum ulator Saturation M ode, se perm ite configurar el modo de saturacin,
pudiendo elegir el modo 1.31, norm al, que cargar en el acum ulador destino el valor 1.31
m xim o positivo (X07FFFFFFF) o m xim o negativo (0xFF80000000). El otro m odo es
el 9.31, supersaturacin, donde cargar el valor 9.31 m ximo (0x7FFFFFFFFF) o el mnimo
(0x8000000000).
Y, por ltimo, se dispone de la posibilidad de habilitar o deshabilitar el modo de saturacin ele
gido para el acum ulador A, B o la zona de memoria afectada por instrucciones DSP.
Una vez seleccionados los parmetros necesarios, basta activar la casilla Generate Code O nlyfor
features/resources on processor package a travs de la opcin Code Generation Options del men
Visual Initializer, para que se genere el fichero init_dsPIC30F4013.s mediante la opcin Code Ge
neration -> Save to ProjecL
Una vez generado el cdigo de inicializacin del proyecto, en el cdigo fuente en ensamblador,
se aade:
r.-.v-:-? \
Cali Visuallnitialization
::r :
O bien, en lenguaje C
:
VsualIniializationO;
A continuacin, las instrucciones DSP que se utilicen se comportarn de acuerdo a los parme
tros elegidos en los pasos anteriores.
261
El conversor analgico digital de 12 bits permite convertir seales analgicas de entrada en valores
digitales de 12 bits con una velocidad de conversin de lOjis. Este mdulo est basado en un regis
tro de aproximaciones sucesivas y soporta hasta 16 entradas analgicas multiplexadas sobre un am
plificador unipolar de muestreo y retencin denominado CHO. La tensin de referencia puede pro
ceder de la tensin del controlador (AVdd y AVss) o bien de dos patitas que pueden recibir dicha
tensin de referencia (Vref-i- y Vref-). Adems este conversor puede funcionar mientras el procesa
dor est en modo Sleep con el oscilador RC.
El mdulo dispone de varios registros para su control. Asi los registros ADCON1, ADCON2 y
ADCON3 controlan el modo de trabajo del conversor analgico digital. El registro ADCHS, por su
parte, selecciona los canales de entrada. El registro ADPCFG configura las patitas com o entradas
analgicas o como entradas/salidas digitales. Y el registro ADCSSL selecciona las entradas a esca
near o explorar. Los resultados de la conversin se guardan en un buffer de 16 palabras, denomina
das ADCBUFO, A D CBU F1,... ADCBUFF.
En la Figura A7.2 se muestra un esquema del mdulo conversor.
262
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Configurar las patitas analgicas, las tensiones de referencia y las entradas y salidas digitales.
Seleccionar los canales de entrada A/D.
Seleccionar el reloj para la conversin.
Seleccionar el disparo (trigger) de la conversin.
Poner en marcha el mdulo A/D.
Configurar la interrupcin (si fuera necesario).
a. Limpiar el bit ADIF.
b. Seleccionar la prioridad de la interrupcin.
c. Activar el bit ADIE.
Comenzar el muestreo.
Comenzar la conversin.
Esperar a que se complete la conversin, lo que se detecta por una interrupcin o porque el bit
DONE del registro ADCON1 se pone a 1.
Leer el buffer A/D con el resultado (ADCBUFO, ADCBUF1,...) y limpiar el bit ADIF.
r-asIso.'Stcrt'.-p
Dala OiipU Fu-tnat Urigrcc Irilse
Vcfcage Re Souc: AVdd u Vtefh. AVss VrcH
- Mode S e tth # ...........- -
[M
o
Irterrupt Fikxly.
H'PinO ~ ^
y.
y Pri 3
CHOaroV
i S a n c irm i*ledmanual/
y F iii
Fri 2
v.
, AH 0
-!irpL2
;5LUtpU3
Hefp
AcoV
Figura A7.3. Cuadro de dilogo para la configuracin del conversor analgico digital de 12 bits.
Desde la ventana de la Figura A7.3 podr configurar muchos aspectos del conversor analgico
digital de 12 bits de resolucin. A continuacin se estudia cada uno de los apartados del cuadro de
dilogo.
263
Operational Settings
Enable on startup- Activando esta casillael conversor analgico digital se activa al iniciarse la eje
cucin del programa. De no marcarlo, se deber activar a 1 el bit ADON del registro ADCON1 pa
ra que se inicie el proceso d conversin.
Data Output Format: Establece cmo se desea recibirlos datos de la conversin, si enteros sin sig
no (Unsigned Integer), enteros.con signo (Signed Integer), fraccinales sin signo (Unsigned Frac
tional) o fraccinales con signo (Signed Fractional).
Voltage Ref Sources Sirve para seleccionar la tensin de referencia. En esta lista despegable se
puede elegir entre cuatro opciones diferentes. Se puede elegir la tensin de las patitas AVdd y
AVss como referencia, o la tensin de las patitas Vref+ y Vref-, entre otras.
CPU Sleep Operation: Mediante esta opcin se indica qu accin deber tomar el conversor cuan
do el controlador entre el modo Sleep si se desea que despierte al controlador (Wake up on Start
Bit) o que no lo haga (No wake up).
CPU IDLE Operation: Indica si el perifrico contina su operacin (Continue) o se detiene (Stop)
cuando entra en el modo de bajo consumo Idle.
En el cuadro Interrupt Settings, se puede configurar al conversor para que active una interrup
cin cuando finalice la conversin. Es posible establecer que la interrupcin se active al iniciarse el
mdulo as como su prioridad. Para atender a dicha interrupcin deberemos usar la etiqueta _ADCnterrupt.
En el cuadro A/D fnput Settings (CHO) se configuran los canales de entrada del conversor. Esta
blece las patitas que sern utilizadas para realizar la conversin, as como las tensiones de referen
cia de los multiplexores MUXA y MUXB. Estos multiplexores pueden actuar de manera que cada
entrada al conversor se vaya alternando, una por el multiplexor MUXA y la siguiente por el MUXB.
El conversor dispone de hasta 13 patitas, desde ANO hasta AN12, para actuar como entradas ana
lgicas. Se marcan con un tick aquellas que se van a usar en el proceso de conversin.
Mode Settings
Para seguir configurando el modo de funcionamiento del conversor analgico digital hay que es
tablecer cundo se debe empezar a realizar el muestreo, cundo realizar la conversin, etc. Para ello
la herramienta dispone del cuadro Mode Settings, que se encuentra divido en las pestaas Sampling
Mode y Conversin Mode. (Figura A7.4.)
--------
; Inputs to be scanned:
pT} Input 0
L'.: Input 1
L Input 2
, L Input3
V.
Figura A7.4. Configuracin del modo de funcionamiento del conversor, pestaa Sampling Mode.
264
Bajo la pestaa Sampling Mode, de la Figura A7.4, se pueden seleccionar las siguientes opciones:
P. Al seleccionar con un Lick la opcin Alt. Between Sample A & B inputs, la entrada se ir al
ternando entre el multiplexor A y el B.
2a. Habilitando la opcin Enable alt. Scanning o f differente A/D inputs into CHO samples sc per
mite que los datos de distintas entradas vayan alternativamente al amplificador de muestreo
y retencin CHO.
3a. En Sampling Start Mode se puede elegir cm o comienza el muestreo en la conversin, pudiendo elegir entre manual (Sampling started manually) para lo que hay que poner a 1 el bit
SAM P del registro ADCON1, o automticamente tras la conversin anterior (Automatically
after previous conversion). En este caso, es el bit ASAM del registro ADCON1 el que se de
bera poner a 1 en caso de no usar la herram ienta Visual Initializer, ya que sta lo har de for
ma automtica.
4a. Por ltimo, se puede seleccionar entre las 13 entradas.
En la pestaa Conversion Mode se establecen los parmetros correspondientes a la operacin de
conversin. (Figura A7.5.)
Sampfrig Mode j Conversion Mode j
Trigger Source:
Sample Period:
XError:
Conversions / Int:
Conversion Period:
Clock Source
5* Tcy
~ ] usee
! (Calc.)
usee (Caic.)
A/D Buffer Fill Mode: Do not alt. fill both halves of A/D ;y
Figura A7.5.
Configuracin del modo de funcionamiento del conversor con la pestaa Conversin Mode.
1. En la opcin Trigger Source, se establece cundo se activa la fase de conversin, que puede
hacerse manualmente, una vez que se borre el bit SAMP (Manual clearing o fS A M bit) del
registro A D C O N 1, mediante una transicin por flanco ascendente en la patita INTO (Active
Transition on INTO). Tambin se puede hacer de forma sncrona utilizando el temporizador
Timer 3 (Timer3 Compare) o el temporizador interno (Intem al Timer).
2. En la casilla Sample Period se establece el tiempo de muestreo en microsegundos.
3. En la casilla Conversions /In t se selecciona el nmero de conversiones que se realizarn an
tes de que se genere la interrupcin. Ese nmero debe ser menor que el nmero de bulfers
(16) ADCBUF, ya que de lo contrario se perdera algn dato de la conversin. Este parme
tro se guarda en el registro ADCON2, en los bits SMPI. Despus de cada interrupcin, los da
tos comienzan a guardarse siempre desde ADCBUFO.
4. En la casilla Clock Source se selecciona el reloj de conversin. La velocidad mxima es de
12 perodos de reloj por cada dato o muestra.
5. La casilla A/D Buffer FillM ode describe el modo y estado de llenado de la pila. El resultado se
puede dividir en dos grupos de 8 que reciban de forma alterna el resultado de la conversin (Alt
two 8words bujfers ofA/D), o bien, no dividirlos (Do not Alt. Fill both halves ofA /D ). Esta de
cisin depender del tiempo que emplee la interrupcin en procesar los datos de la conversin.
265
Puede ser interesante realizar la conversin en modo SIeep ya que con ello se reduce notable
mente la posibilidad de recibir ruido provocado por el resto de perifricos del controlador.
Se procede a desarrollar el primer ejemplo. Desde Visual Initializer se marcan las siguientes casillas:
El resto de parmetros se dejan tal cual aparecen por defecto en la herramienta Visual Initializer.
A continuacin, se activa la casilla Generate Code Only forfeatures/resources on processor pac
kage a travs de la opcin Code Generation Options del men Visual Initializer. Se genera el fichero
init_dsPIC30F4013.s mediante la opcin Code Generation -> Save to Project.
PROGRAMA CAD
.include "p30f40J 3.inc'
.GLOBAL main
.text
_mairi:
call JVisual Initialization
bucle:
goto bucle
Tratamiento de la interrupcin
.global ___ADCInterrupt
ADCInterrupt:
BCLR IFSO, #ADIF
Leemos el resultado en ADCBUFO
:Aqu trataramos la interrupcin
RETFIE
.end
266
Modifique los parmetros del Visual Initializer y siga estudiando los tiempos obtenidos. No as
los datos obtenidos en ADCBUFO, pues es complicado simular una entrada analgica en las patitas
de entrada, por lo que el resultado de la conversin siempre es cero.
Otro ejercicio interesante consiste en analizar la secuencia generada en el fichero init_dsPIC30F4013.S para la inicializacin del mdulo.
El programa anterior desarrollado en lenguaje C sera el siguiente:
Contenido del fichero main.c
//PROGRAMA CADc
# include ,'p30f4013.h"
int main (void)
/t
VisualnitializationQ;
while (1);
return 0;
}
//Inicializamos el conversor
// Entramos en un bucle infinito
l.y.yX''
#include p30f403.h"
unsigned int ADResultl = 0;
.;X;
I
IFSObits.ADIF = 0;
ADResultl = ADCBUFO;
A 7.4 . C O M U N IC A C IO N E S UART
Este mdulo permite establecer comunicaciones serie con el exterior. Se trata de un transmisor re
ceptor asincrono, bidireccional, con un buffer de transmisin y recepcin de 4 caracteres. Dispone
de 2 patitas, denominadas TX y RX, que permiten enviar y recibir informacin en serie con la po
sibilidad de activar una interrupcin cada vez que se reciba o se envie un dato.
Entre otros, para trabajar con el mdulo UART, se utilizarn los registros U1TXREG para trans
mitir los datos, U1RXREG para recibir los datos, U 1MODE para configurar el mdulo, U1BRG para
configurar la velocidad de transferencia en baudios y U1STA para comprobar el estado del mdulo.
La comunicacin serie es un protocolo de comunicacin muy extendido y conocido, por lo que
a continuacin y sin ms prembulos, se desarrolla un primer ejemplo Hola amigo, que transmite el
mensaje Hola amigo!
267
La herramienta Visual Initializer configurar al mdulo UART. Se crea un proyecto para el dsPIC30F40I3 y se inicializa Visual Initializer. Se cambia el encapsulado del dsPIC a formato PDIP
y se elige del men de perifricos la opcin UART.
El dsPIC dispone de dos mdulos para comunicaciones UART. Se escoge el mdulo UART1 y
se arrastra hasta el dsPIC. Una vez all, se hace doble clic sobre el mismo accediendo al cuadro de
dilogo de configuracin de dicho mdulo UART1. (Figura A7.6.)
IJARTC Configuration.
Coirniumsctcn Settojs - - .................................
0 Ervlc en Startup
SaudRate:
% Error
el: :!
.99X5
tes
v|
(Cae.)
DctoBh:
Stop Bits:
|1
pcry:
[Nopanty
| Continue
il- C '.V v V jK
; . ; ' ;.;
Ice C lx k ParJy:
Active Hgh
Opcicbcnal Scltngs
Recewsr
Transmfcter
if
0 Erwble 7ifinsmt
CJ Enable Irten^it o Startup
InieffuptPiiwfcy:
Generate Int on buffe;si:e: 1 Ernply
Hefp
OK
Cancel
A c tfy
Se habilita el mdulo en el inicio del programa activando la casilla Entibie on Startup. Si en vez de
hacerlo automticamente fuese manualmente habra que poner a 1 el bit UTXEN del registro U1STA.
Con la casilla Baud Rate se escoge la velocidad en baudios a 9.600. Mediante la casil la Data Bits
se determina el nmero de bits por carcter, en este caso 8 bits. La casilla Stop bits se pone un 1 pa
ra establecer 1 bit de parada, y la lista Parity se deja con la opcin No parity. De esta forma el m
dulo se configura para una comunicacin a 9.600 baudios. 8 bits por carcter y 1 de stop.
En la pestaa Transmitter se activa la casilla Enable Transmit para permitir la transmisin de datos.
El Visual Initializer configura automticamente al mdulo para 9.600 baudios, como se puede
apreciar haciendo doble clic sobre el icono Oscilador. Si desea configurar el mdulo manualmente,
sin hacer uso de la herramienta Visual Initializer, deber calcular el valor a cargar en el registro
UxBRG (donde x es 1 o 2 segn el mdulo seleccionado) de acuerdo con la siguiente frmula:
UxBRG = (Frecuencia / (16 Baudios)) -1
Dispone de un ejemplo en el Laboratorio 4, Comunicacin USART ene ripiada.
Tras esta aclaracin se genera el cdigo de inicializacin, para lo cual en la opcin Visual Ini
tializer -> Code Generation Options se marca la opcin Gene rate Code Only fo r features/resources
on processor package. A continuacin, se elige la opcin del men Visual Initializer -> Code Ge
neration, y se salva el cdigo de inicializacin en el proyecto gracias a la opcin Save to Project.
268
Por ltimo, se crea el fichero fuente en ensamblador que transmitir el mensaje por dicho puerto:
_main:
call Visual Initialization
;Inicializa el dspic
mov #Mensaje,Wl
;Mueve a W1 la direccin del mensaje
Bucle:
mov.b [W 1++), WO
cpO.b WO
bra Z,Fin
call MandaCaracter
bra Bucle
MandaCaracter:
btss U1STA,#TRMT
bra MandaCaracter
mov W0,U1TXREG
return
Fin:
nop
.end
*
.
;Lee el dato en WO
;Si el dato es 0
;entonces ha acabado y salta a Fin
;En caso contrario escribe el caracter
;repite el bucle
;Espera a poder transmitir
;Si no puede transmitir sigue esperando
;Escribe el caracter en el buffer TX
;retoma a la llamada
;Fin del programa
Para ver cmo funciona este programa lo ideal es que trate de simularlo con la herramienta
MPLAB SIM. Para ello deber indicar al simulador que los mensajes de salida del mdulo UART
aparezcan por pantalla. Basta con acceder al men Debugger->Settings... y, en la pestaa UART 10.
se activa la casilla Enable UART 10 y luego se elige en la opcin Window en el marco Output para
que el resultado de la salida del mdulo se visualice en pantalla. (Figura A7.7.)
Figura A7.7. Configuracin del simulador para que muestre los datos del mdulo UART en pantalla.
269
O u tp ut
i
H o la mundo!
Deteccin
Deteccin
Deteccin
Deteccin
Deteccin
Mediante el bit ICTMR se selecciona la fuente de reloj del temporizador. Debe elegir entre el Timer2 y el Timer3. (Figura A7.9.)
La herramienta Visual Initializer permite configurar este mdulo fcilmente, pero si prefiere co
nocer exactamente los pasos necesarios puede analizar el cdigo generado por dicha herramienta.
Para configurar este mdulo no slo es necesario aadir el icono correspondiente al IC1 al con
trolador, sino tambin el Timer3 que es el que controla el tiempo. La Figura A7.10. muestra algu
nos posibles valores de configuracin.
A continuacin se debe aadir el mdulo IC1. Como se pretende configurar el mdulo IC1 para
medir la anchura de un pulso, los parmetros que se deben definir son los siguientes:
270
T.\jR2
x
I Cx
Prescaler
Detector de flanco
y sincronizador
- jo t m r
1f
Lgica de
c o n tra i
ICxBUF
Flag de interrupcin#"
ICxF
FIFO
16 l Timer 3 Configuration
O pcfoli s ro l Sc tth g s ----------------;------------------------------------------ i
; 5 0 Enobie on Startup
CPU Id c Opwolion
..........._^ 1
y ,
Postscsie:
! j ____________: (msec)
|1
; (KHz)
(C alc)
i_____________________________
Interrupt
---------------------- --------- :
V jj
Figura A 7.10. C.onfiguracin del Timer3 para su empleo con el mdulo IC1.
Timebase fo r input capture: Seleccin del Timer2 o el Timer3 corno fuente de tiempo para el
contage. Elegimos el Timer3.
Capture Operating Mode: Permite elegir que evento se va a capturar. Disable para deshabi
litar el mdulo, Capture every falling edge para capturar cada flanco descendente. Capture
every rising edge para capturar cada flanco ascendente, Capture every 4th rising edge para
capturar cada 4 flancos ascendentes, Capture every 16th rising edge cada 16 flancos ascen
dentes, Capture every rising and falling edge cada flanco ascendente o descendente o Interrupt
or wake up on idle para despertar en el modo Idle. Seleccionamos Capture every rising edge
and falling edge. El pulso empieza con un flanco ascendente y acaba con uno descendente. El
ejemplo trata de capturar el valor del temporizador Timer3 con el flanco ascendente y con el
flanco descendente. La diferencia entre una lectura y otra dar la anchura del pulso.
Capture events per interrupt: Permite seleccionar que la captura se produzca en cada evento
(Capture every event) o en el segundo, tercer o cuarto evento (Capture 2nd, 3rd o 4th event
Se elige Capture 2nd, y as al capturar el segundo evento, es decir el flanco descendente de
271
pulso, se generar una interrupcin que calcula la diferencia entre la primera lectura del tem
porizador y la segunda y obtener as la anchura del pulso.
Por ltimo, se puede habilitar una interrupcin para tratar estos eventos mediante la opcin
Enable interrupt on startup e Interrupt Priority.
In p u t Capture Configuration
Input Cpiuie Settings
IC1
[lC2 ~f 7 " X tC 8 !
: T rrei 3
.v :
Contnue
y .\
< !.................
r ~h^ "
..*>
^
OK. ] [
Cancel
App!^
A 7.6 . M D U L O DE C O M P A R A C I N DE SALIDA
272
IQC2 ll 0C3 f o c T l
I QK 1I Cared | ( Appty |
Figura A7.12. Configuracin del mdulo de comparacin de salida.
273
Complete la tabla con los valores de O CI para distintos valores de TIMER2 en funcin de
los parmetros elegidos en el Apartado A7.6
T IM E R 2
OC1
0x00f f
0x0 100
0x0/07
0x0102
0x0103
0x0109
0x010A
0x0 JOB
0x0 WC
En la tercera parte de esta obra podr encontrar un ejemplo de utilizacin de este mdulo para el
control de motores. Ms concretamente en el Laboratorio 5, Control de motores mediante PW M , se
hace uso de este mdulo para controlar la velocidad de un motor y conseguir distintas velocidades
de una forma sencilla.
274
AUTOEVALUACIN
Conceptos clave de este captulo
1.
2.
3.
4.
5.
Ejercicios
Contenido
7FFC0
0x4 F4 8
7FFC02
0x414C
A continuacin, cree un programa en ensamblador que transmita por el puerto serie el contenido
de esas direcciones de memoria. Simlelo y descubra el mensaje enviado.
IIS
2. Programe y simule un programa en lenguaje C; de forma que se lleve a cabo una conversin ana
lgico digital por la patita ANO, con tensin de referencia en VREFH y VREFL, utilizando el tempo
rizador interno con un perodo de muestreo de 0,002/is., con una velocidad de reloj de muestreo
de 30 * .5 * .Tcy, de forma que cada 5 mustreos se genere una interrupcin y obtenga la media
de esos 5 valores.
Al tratarse de un perifrico tan veloz, el calcular la media y tomar ese valor como el valor resulta
do, permite minimizar el riesgo producido por la entrada de ruido en el muestreo.
1.
...... :
Vi.. . . " '
r::: :::
'
del CD
e instalacin de
las herramientas
de trabajo
.A
r n lr a te
.-.i__
Y A Y A i M V v
C O N T E N ID O DEL C D
El CD que acompaa al libro dispone de los ejemplos explicados en el mismo, las aplicaciones de
desarrollo utilizadas, as como los ficheros necesarios para realizar las actividades propuestas.
La organizacin del CD en distintas carpetas se corresponde con la de la Figura AP.l.
DOCUMENTACION
a p l ic a c io n e s
DSPIC FD LITE
LABORATORIOS
MPIABIDE
DSPICWORKS
P
P
MPLAB C30
WINPICSOO
276
Es importante instalar esta herramienta antes que el compilador de C MPLAB C30. Para instalar la
herramienta MPLAB IDE, se acceder a dicha carpeta del CD que acompaa al libro y ejecutando
el programa Install_MPLAB_v730b.exe.Tambin se puede obtener la ltima versin de este soft
ware acccdicndo a la web de Microchip, www.microchip.com.
Una vez iniciada la instalacin se debe esperar hasta observar el primer cuadro de dilogo de la
aplicacin de instalacin. Es conveniente cerrar el resto de aplicaciones abiertas en ese momento.
En este primer cuadro de dilogo pulsamos Next. A continuacin hay que aceptar el contrato me
diante la opcin / agree y pulsamos de nuevo Next. (Figura AP.2.)
277
M ic r o c h ip
To ir!al re lin foJe*. cfcK Mt To Ctal lu a dlfaerA fotts:. d rk Browie end sefey
wlhe Mk
r.Oeaiociion
C'Wiww p:oaaro#Ritt;hp\
isa*.
Ji . :
M R . Tccte v 7 ^ 0
*v H C W O* phc<o
M ic r o c h ip
T0 it t il to lr> lotee. Cit-. Newl I o risU to e dEieier> fafdei, cfc* Btowc and c c
w riet foie.
r Destratan FrfJei.......................
C\Aid-ivo3 ce prosiematafCChiA
He*>
:-:-:%y';-Xvvv
.......
:*.c/o
Figura AP.4.
Hciosoft Photo
Por ltimo, al pinchar en el ltimo cuadro de dilogo de la instalacin, el botn Finish, aparece
r en pantalla un visor de documentacin de la em presa Microchip, visor que se puede cerrar para
empezar a trabajar con el MPLAB IDE. (Figura AP.5.)
278
W ---- '
H 5U B IW SSS, v i . 32
c o s n n s
1. Cvervr ev
. CHU C c r.a r a l 7-j M c
5. T :.vi-_'<* Su^purtud
ittv /,2 0
FM3 Cv : b ?rcg-tfin*i
SIMJfnuWof
L ic e r n e
4 . In s c a b l a t i o n
5. K i ^ r & c i n a c o Versici 1.3x
V. Cmtoac Support
I n R iia o c n Heip K te i ( le x t O iy )
r -.A 3 ICO ? U?E OcvKe Ctrw ean
M=(.M) 1CD 2 '_CUCiVKe Orrw insWlstco
rM.fl3 ICE 2k P fc lr F w t Ctivw Ife d ltC
M-\.\3 ICE 2>: 1153
O cvro C*to G .
M?l A3 ICE
USB Cowefter Device
I
rM-A*J ICE 4K US9 Or-i-.e Driver Cfeen
M . .\3 ICE 41: U53 Owvit Dirv* jn ite ls f n
Mil.A3 Pv 5 U53 C ^ C d D-lvc- CW.V.
MK.A9 PV 2 U3D O evtte Unvsr ln s te la ta n
7X oxt-vtfr
Cmttin
O v x x v itv
T ie HP1A3 II>2 r e l e a s e o I 4 s 7 I C la n g u a g e co o c o n s is t, a i tui u t a o b i
< jiic 3 0 - . * > , n a l i n x : { p i c 3 0 - l d . c x e ) . I& c t f i C r 'S G u id e d e s c r i
a d d i t i o n a l U t i l i t i e s c h o c r e n o e s u p p o r t . d b y th KP LiE IC'3 s r. A
t h i i o E u not. s u p p l i e d i n c h i s r e le a s e .
L ic e n s e
;V;v,svyivr^ttcsbft 'r^xaL*o. .
H '-B!A?rCrw ir*rI
Se recuerda una vez ms, que la versin del compilador de C MPLAB C30 que distribuye libre
mente Microchip y que se acompaa en este CD, es una versin para estudiantes. Esta versin, pa
sados 60 das tras su evaluacin, pierde ciertas funcionalidades pero sigue siendo funcional. En ca
so de que no sea estudiante, debera descargar de la web de Microchip una versin de evaluacin de
60 das de esta misma herramienta que trascurrido este tiempo dejar de funcionar.
Para instalar esta herramienta, hay que ejecutar el nico programa ejecutable situado en la car
peta MPLAB C30 del CD que acompaa al libro. La instalacin es bastante trivial, se deben acep
tar todas las opciones por defecto del programa de instalacin y mediante el botn N ext avanzar en
la misma hasta que se muestre un cuadro de dilogo como el de la Figura AP.6. Hay que contestar
Yes y finalizar la instalacin pulsando el botn Finish.
INSTALACIN DE DSPICWORKS
Para instalar esta herramienta, se ejecuta el programa setup.exe de la carpeta DSP/CW ORKS del CD
que acompaa el libro. La instalacin resulta trivial, simplemente se acepta todo sobre las distintas
opciones que por defecto marca el programa, pulsando el botn Next, hasta llegar a la ltima pan
talla donde se pulsa el botn Finish, tras lo cual habr concluido la instalacin de esta aplicacin.
Para instalar esta herramienta se ejecuta el programa setup.exe de la caipeta dsPIC Fd Lite del CD
que acompaa el libro.
279
I ,a instalacin resulta trivial, simplemente se acepta todo sobre las distintas opciones que por de
fecto marca el programa, pulsando el botn Next, hasta llegar a la ltima pantalla donde al pulsar el
botn Finish, se concluye la instalacin de esta aplicacin.
ejercicios
de autoevaluacin
SOLUCIONES APLICACIN 0
SOLUCIONES APLICACIN 1
282
Un ejemplo de aplicacin se puede observar en los microfltros que se conectan a las lneas
de telfono cuando se utiliza ADSL para transmitir por el mismo canal voz y datos.
2. Defina los cuatro tipos de filtros esenciales que permite disear la herramienta dsPIC Fd Lite.
Filtro paso bajo: Es aquel que permite el paso de frecuencias bajas y atena frecuencias
mayores.
Filtro paso alto: Es el que permite el paso de frecuencias desde una frecuencia de corte de
terminada hacia arriba, sin que exista un lmite superior especificado.
Filtro paso banda: Permite el paso de componentes frecuenciales contenidos en un determi
nado rango de frecuencias, comprendido entre una frecuencia de corte superior y otra infe
rior, atenuando el resto.
Filtro elimina banda: Es el que dificulta el paso de componentes frecuenciales contenidos
en un determinado rango de frecuencias comprendido entre una frecuencia de corte supe
rior y otra inferior.
3. En el ejemplo propuesto, para qu sirven los parmetros Stopband Ripple (dB) y Pashhand
Ripple (dB)?
Definen el porcentaje de la seal original que debe eliminarse para la banda eliminada (stop
band ripple) y el porcentaje de la seal original que puede eliminarse como mximo de la se
al original en el rango de frecuencias fuera de la banda seleccionada (passband ripple).
4. Para qu se ha usado la Transformada Rpida de Fourier?
Para estudiar la seal en el rango de las frecuencias y as localizar una que sea muy distinta
a la del resto de la seal y que probablemente est generada por una fuente distinta.
5. En qu lenguajes se puede generar el programa de filtrado?
Tanto en ensamblador como en lenguaje C
Ejercicio
Si no se consigue, puede que estos datos le sean de ayuda, aunque quizs desee primero inten
tarlo sin pistas. Caractersticas del filtro:
Sampling Frequency: 44100
Passband Frequencies: 4800 5000
Stopband Fequencies: 4000 5600
Passband Ripple (dB): 0.1
Stopband Ripple (dB): 50
283
SOLUCIONES APLICACIN 2
Ejercicio:
Resuelto en el Captulo 4.
SOLUCIONES APLICACIN 3
/. Q u depuradores soporta la herramienta M PLAB IDE? Dnde puedo observar las limi
taciones del simulador software?
Soporta tanto depuradores software como el MPLAB SIM, o depuradores hardware como la
herramienta MPLAB ICD2.
Para ver las limitaciones del simulador se puede acceder al men men Debugger -> Settings... y acceder a la pestaa Limitations.
2. Q upasa cuando se ejecuta nuestro programa paso a paso? Cundo se ejecutan las ins
trucciones del cdigo fuente?
Al ejecutar el programa paso a paso la primera instruccin que se ejecuta no es la que se ha
escrito en el fichero fuente, sino las que se han aadido en los ficheros del proyecto que con
tienen las rutinas de reset, etc. Para poder ver la ejecucin del cdigo ms rpidamente se es
tablece un punto de ruptura en la primera lnea de programa y se ejecute el mismo. As, tras
ejecutar esas rutinas de inicializacin, el programa se detendr en la primera lnea de cdigo
y se podr ver su ejecucin paso a paso.
284
3. Cmo se puede observar con el simulador el nmero de ciclos que tarda en ejecutarse una
instruccin?
Mediante la opcin Debugger -> StopWatch se observa el nmero de ciclos y el tiempo trans
currido entre distintos puntos del programa,
4. Describa las limitaciones del simulador.
Las limitaciones del simulador MPLAB SIM pueden observarse en el men Debugger->Settings, bajo la pestaa Limitations. As por ejemplo, puede observarse que la comunicacin
UART no puede simularse en real, pero s redirigir la salida a pantalla o a un fichero.
5. Mediante qu opcin del men se podra visualizar parte de la memoria de datos EE
PROM? Podemos desde el MPLAB IDE escribir en ella?
Mediante la opcin del men View-> EEPROM se puede leer y escribir en la zona de la me
moria de datos EEPROM.
E jercicios
:AUTOEVALUACIN
APLICACIN 3.1.
-.CONTANDO LOS CICLOS DE INSTRUCCIN
;EL PROGRAMA VA SUMANDO I A W L HASTA
;LLEGAR AL VALOR DE WO QUE LO INICIAMOS
;INICIALIZAMOS W0=0x0FF
; 1N1CIALIZAMOS W 1=0x0000
;SUMAMOS 1 A W1
;SI SON IGUALES W 0Y W 1 SALTA
;LA SIGUIENTE INSTRUCCIN GOTO
VOLVEMOS A SUMAR
iFINL. W0 Y W1 SON IGUALES
285
Con la prim era instruccin MOV, el registro WREGO se inicializa con el valor OxOOFF.
Con la siguiente MOV, W1 toma el valor 0. El programa pasa a continuacin a un bucle
que se repetir siempre hasta que W 0 y W1 sean iguales. Ya que mientras no sean iguales
se repetir siem pre la instruccin ADD que suma uno a W l y la instruccin de salto in
condicional GOTO SUMA. Sin embargo, cuando los dos datos sean iguales, la instruccin
CPSEQ har que la instruccin GOTO SUMA no se ejecute y por tanto se llegue al final
del programa.
Al simular el program a paso a paso, mediante la opcin del men D ebugger->Sopwatch,
se puede observar el nmero de ciclos de instruccin ejecutados en cada momento. As, se
puede deducir fcilmente el nmero de ciclos de instruccin necesarios al ejecutar cada una
de las instrucciones anteriores. Dicho nmero de ciclos de instruccin se recoge en la si
guiente tabla:
In s tru c c i n
N C ic lo s de in s tru c c i n
MOV
ADD
J_
CPSQ
GOTO
Confeccione un programa en lenguaje C que le perm ita observar cmo cambia el bit de aca
rreo de la palabra de estado.
La solucin ms rpida para observar el acarreo es colocar en un registro como WREGO el
valor mximo que puede contener y sumarle 1.
// Aplicacin 3.2
// Programa en C para la observacin
// del bit de acarreo.
#include ,'p3 013.h"
int niain(void)
{
WREGO = OxFFFF;
//Inicializamos WREGO a OxFFFF
WREG0++:
//Postincremento de WREGO
rcturn(O);
}
.
Al ejecutarlo paso a paso, se puede observar bajo el men View->Special File Registers c
mo cambia el valor del registro de estado SR al ejecutar el postincremento de WREGO.
SOLUCIONES APLICACIN 4
286
normal mente, para realizar una instruccin condicional tipo IF, suele colocarse una instruc
cin de salto incondicional tras la instruccin de salto condicional. Con lo que se consigue
que mientras la condicin no sea cierta, el programa salte a la etiqueta de la segunda instruc
cin y, por el contrario, cuando la condicin sea cierta, entonces el programa siga la secuen
cia de instrucciones siguientes.
2. Qu utilidad tienen las distintas etiquetas de inicializacin de datos?
Sirven para inicializar la memoria de datos del controlador, disponiendo de distintas zonas de
memoria segn las necesidades del programa.
3. Cuntas instrucciones DSP se han aadido al repertorio de instrucciones de la fanula dsPIC30F?
Se han aadido un total de 19 instrucciones DSP que permiten realizar complejos clculos
matemticos de una forma rpida y eficaz.
4. Para qu sirve la instruccin MAC?
La instruccin MAC multiplica dos valores y acumula el resultado en el acumulador. Se uti
liza a menudo en el filtrado de seales.
Ejercicios
Xn
0x0001
OxOOFF
0x0003
0x0005
0x0007
0x0002
0x0001
OxOOOF
En el caso de este ejercicio, para su resolucin debe acumularse el valor del prim er coefi
ciente b0xn y luego restar el del resto de coeficientes.
Para la prim era suma se recomienda usar la instruccin MPY, y para la resta de los siguien
tes coeficientes, usaremos la instruccin MSC de multiplicacin y resta.
287
.tcxr
_main:
bsel CORCON,#lF
mo\r#bi,W8
mov |W8++J,W4
SOLUCIONES APLIACIN 5
I. Cuntos bytes como mnimo se deben grabar cuando se realiza una operacin de grabacin
de memoria FLASH de programa?
Como mnimo se deben grabar 32 instrucciones o posiciones de memoria, las cuales tienen
cada una 3 bytes. Luego el nmero mnimo de bytes a grabar mediante esta operacin es de
96 bytes.
288
Ejercicio:
mov #0x0002 , W i
add WO. W l, WO
;Movemos un 2 a l registro W l
;sumamos el registro WO y W l y dejamos
;el resultado en WO
.
>-.
A continuacin cree un programa que, leyendo esos datos de la seccin de datos del progra
m a, grabe ese programa en la m em oria FLASH de program a a p a rtir de la direccin
0x000300.
Al simular el programa que acompaa al enunciado del ejercicio, se pueden observar los c
digos de operacin correspondientes a las instrucciones citadas, mediante la ventana Program
Memory. En la Figura BP.2 se puede observar el cdigo correspondiente.
A s el cdigo que el programa debe grabar en la memoria de programa, debern ser los si
guientes 6 bytes:
20 00 21 40 00 01
El cdigo fuente correspondiente al programa que graba estos 6 bytes se encuentra desarro
llado en lenguaje C.
// PROGRAMA grabaprograma
// Este programa escribe el cdigo
#include Mp30f40l3.h''
Erojeil
i G W
fe Q
3 M
1
20S
206
i U l es
OD198
0019A
200
209
210
0019E
OOIAO
OD1A2
O1A4
I
p UpCOfeH j) Mactvvs
Figura BP.2.
Cf I? U
B> ( : $
| OpCOCJC |
C hedcsum :
0x6814 |
II M
S is a js r m n ly
5A4000
7EOOOO
BGGCrvctBR
re s e t
900001
OOOOOO
rc u o o o
FFF7FF
atW .W 0 X 0 0 0 0 ,0 X 0 0 0 2 ,0 X 0 0 0 0
nop
re s e t
aopr
____________
int secuenciagrabacionQ
// Esta funcin escribe la secuencia de grabacin
// tanto para borrado corno para grabacin
NVMADRL = 0x0;
NVMADR = 0x300;
NVMKEY = 0x55;
NVMKEY = OxAA;
NVMCONbits.WR= 0x1;
asmCNOP");
asmC'NOP");
retrn 0;
Y* * * > ; : * -+
// Programa principal
j[*
//Apuntamos la pgina
//Apuntamos el desplazamiento en la pgina
//Movemos a NVKEY la secuencia 55
//Movemos a NVMKEY la secuencia AA
//Activamos el bit WR de NVMCON
//Esperamos 2 nops
** *
* * # * * * * * Je* * * + * *
int main(void)
int a = 0;
//Borramos la memoria
NVMCON = 0x4041;
a = sccuenciagrabacion():
while(N VMCONbi is.WR == 1);
//PRJMERA INSTRUCCION
WREG2 = 0x0021;
WREG4 = 0x0020;
TBLPAG = 0x0;
VVREGO = 0x300;
asmCTBLWTL
W2, [W0],,);
asmCTBLWTH W4,[W0++]");
/A'ariable auxiliar
//Configuramos NVMCON para borrar FLASH
//Ejecutamos secuencia borrado/grabacin
//Esperamos al bit WR de NVMCON sea 0
//Escribimos los 3 bytes 200021 correspondientes
//a la instruccin MOV
//Apuntamos a la pg. de la direccin a leer
//Apuntamos al desplaz. dentro de la pgina
//Escribimos en el registro el cont. de W2 en parte bajar
//Escribimos el cont. de W4 en la parte alta
289
290
//SEGUNDA INSTRUCCION
WREG2 = 0x0001;
//Escribimos los 3 bytes 400001 correspondientes
WRRG4 = 0x0040;
//a la instruccin ADD
WREG0 = 0x302;
//Apuntamos al desplazamiento dentro de la pgina
asmfTBLW TL
W2. [W0]M);
//Escribimos en el registro el cont. de W4
asmCTBLWTH W 4,[W 0++r);
//Escribimos el cont. de W4 en la parte alta
//Rellenamos el resto de las 32 instrucciones con l i l i l
for(a = 3;a<=32;a++)
ir
WREG2 = 0x11J ];
WREG4 = 0x0011;
WREG0 = 0x300 + (a-l)*2:
asm fTBLWTL W2, [W0]");
//Escribimos en el reg el cont. de W4
asmfTBLW TH W4}|W0++],,);
i
NVMCON = 0x4001;
a = sccucnciagrabacion();
while(NV MC O Nb it s.W R == 1);
return 0;
ii"!f"v>'</
Tras simular el programa, puede observarse en la Figura BP.3 la ventana Program Memory
con el cdigo correspondiente a las dos instrucciones ya grabado.
Fd
pew
f ro j-tt
DjsUW-
P rcv r T iiw
Iccfc
Q orftyje
' ckm
Hejp
af H ^16* 1 ? j, da? O i# s# ij
'C^^iwuw:oritf;S,fl{ir^yio^^^.cunwntiw\gra|>aprograi.M\aft>pft'r
C hccksum :
0x5a20
D.EC2 - 0 x 0 0 0 1 .
VUC( - 0x0043.
VPXCO - 0x 3 0 2 ,
M B t 't B L D l b V 2 ,
|OOJ
/ / e r ib i Q * n
*1
re g n rs re
e l c c ik .
de V i
J IlU -tM - 9 .M V .9 2
VP3S2 - C x l l l l .
TO3-34 - 0 x 0 0 1 1 .
OSHOO - 0 *3 0 0 t 1>M a < 7BLUTL V 2 , |U 0 J '
.o - T B W T H K . I W m ;
ea e l r c f f i r r o
e l c o n c . de
HunccN - UX40V1;
/ / C m t i f l u r o x o s W/ICC p i r a rafca.d z i t s c x
o s c v e n c lo jT a S o c io n " ; - / .'S :c c u c o b c s r a c u s s c i i b o r c ftd o /q tia liM c i
Pjiijr<iin M innnry
jf5
| L in e A d trc a s
382
383
384
385
386
am
O pcode
002 ye
F7TFTT
r? rrtr
002 ?S
00300
DC30Z
nr/n
F ? rr? r
200021
) i
m i - i
002 7 A
.
Opee He || Martin
I!
M
lasf
Figura BP.3.
d tK C H 0 1 3
.4
r is a a s tin b ly
nnpr
nopr
nopc
tr o v .a 0 x 2 , 0 x 0002
a d d .c i 0 x 0 0 0 0 ,0 x 0 0 0 2 ,0 x 0 0 0 0
n h r Ov v i i h . r nynnn? i . rnxnnn-J
i
.
~
.v .- lv .v .
PSV Pal |
>
291
SOLUCIONES APLICACIN 6
y con el lenguaje C:
yv'
..... Visual
' IO.UWInitial izationV
i l i i l i
fifigg&ggagg
!w ^w *'\v>:vi
3. Cmo se puede sincronizar la velocidad con la que trabaja la herramienta Visual Initializer y el Sim ulador MPLAB SIM?
Para sincronizar ambas velocidades, se debe proceder a configurar con la misma velocidad
el Simulador MPLAB SIM y la herramienta Visual Initializer. Para ello, el programa MPLAB
SIM dispone de la opcin Debugger->Settings y bajo la pestaa Osc/Trace se puede esta
blecer la velocidad del oscilador. Por otro lado, para acceder a configurar la velocidad de la
herramienta Visual Initializer, se debe hacer doble clic sobre el icono Oscillator que se en
cuentra en la representacin grfica del controlador.
4. De cuntos temporizadores dispone el controlador dsPIC30f4013?
5 Temporizadores de 16 bits: Tem porizadorl, Temporizador2, Temporizador3, Temporiza
d o ^ y Tcmporizador5.
2 temporizadores de 32 bits, el primero compuesto de los temporizadores 2 y 3 y el segundo
por los temporizadores 4 y 5.
5. Dnde se encuentran almacenadas las definiciones de las etiquetas correspondientes a las
distintas interrupciones?
En el fichero p30f4013.gld.
Ejercicio
Cree y simule un programa que cambie de estado un led, siempre que transcurra un minuto de
tiempo, o bien se active por flanco ascendente una seal conectada a un pin del controlador
La solucin implementada va a contar 60 segundos. Es decir, usando la misma inicializacin
del ejemplo semforo del Captulo 5 y siguiendo los pasos detallados en ese captulo se con
sigue inicializar los perifricos utilizados para contar 1 segundo. En la rutina de atencin a la
interrupcin del temporizador contaremos 60 llamadas y as se obtiene una temporizacin de
1 minuto. En esta inicializacin tan slo se debe cambiar la configuracin de la interrupcin
INTO y sustituir el flanco ascendente por flanco descendente.
292
#include "p30f4013.h"
//Programa Semforo en lenguaje C
int segundos = 0;
//Esta funcin atiende a la interrupcin del temporizador
void _attribute (( interrupt )) _T 1Interrupt(void)
JFSObits.TIF = 0;
//Borramos el flag de la interrupcin
segundos = segundos +1; //Sumamos un segundo
if (segundos ==: 60)
//Cuando llegamos a 60 segundos, cambiamos semforo
{
if (PORTDbits.RDO 1) //Si el semforo est a rojo
PORTD = 2;
else
//lo ponemos en verde y viceversa
PORTD = 1;
segundos = 0;
//Volvemos a contar un minuto,
i
i
//Funcin que atiende a la interrupcin extema INTO
void attribute (( interrupt )) _INTOInterrupt(void)
{
IFSObits.INTOIF = 0;
//Borramos el flag de la interrupcin
PORTD = 1;
//Ponemos en rojo el semforo.
//Programa principal
int main (void)
{
Visuallnitialization();
PORTD = 1;
while(l)
f
asrnCclrwdt");
1
En la Figura BP.4 se puede observar el resultado del programa simulado en el que se apre
cia cmo se cambia el semforo despus de haber pasado un minuto de tiempo.
SOLUCIONES APLICACIN 7
Complete la tabla con los valores de OC1 para distintos valores de TIMER2 en funcin de
los parmetros elegidos en el Apartado A6.6
Figura BP.4.
293
TIMER2
OC1
OxOOFF
0x0100
0x0101
0x0102
0x0103
0x0109
0x0 JOA
0x0101i
0 x0 10C
294
E je rcicio :
Contenido
7FFC0Q
0x4F48
7FFC02
0 x414C
A continuacin, cree un programa en ensamblador que transmita por el puerto serie el con
tenido de esas direcciones de memoria. Simlelo y descubra el mensaje enviado.
Tras inicial izar el mdulo UART con las caractersticas predefinidas, el cdigo correspon
diente al programa ser el siguiente:
.global _main
.include "p.WiOB.inc'
.text
_main:
CALL _VisualInitialization
MOV
#tblpage(#Ox7FFCO()),WO
MOV
\V0,TBLPAG
MOV
#tbloffset(#0x7FFC00),W0
; Leemos el dato EEPROM
MOV
W0.W1
TBLRDL
|\V1]AV0
cali
MandaCaracter
ADD
W L# 1,W 1
TBLRDL
[\Vt|,W0
cali
MandaCaracter
ADD
W 1,# LW 1
TBLRDL
[W1],W0
cali
MandaCaracter
/;;;!
ADD
WI,#1.W1
TBLRDL | W 1JAVO
CALL
MandaCaracter
GOTO
Fin
MandaCaracter:
btss
U 1STA,#TRMT
bra
MandaCaracter
mov WO.UITXRP'G
retrn
Fin:
nop
.end
295
I ras habilitar en el simulador el mdulo UART para obtener la salida por la pantalla se ob
tendr el mensaje secreto en la pantalla de salida del simulador como puede apreciarse en la
Figura BP.5.
Figura BP.5.
Programe y simule un programa en lenguaje C, de forma que se lleve a cabo una conversin
analgico digital por el pin ANO, con tensin de referencia en VREFH y VREFL, utilizando
el temporizado r interno con un perodo de mu s reo de 0,002 micro segundos, con una velo
cidad de reloj de muestreo de 30 * .5 * .Tcy deform a que cada 5 muestreos se genere una in
terrupcin y obtenga la media de esos 5 valores.
Al tratarse de un perifrico tan veloz, el calcular esa media y tomar ese valor como el valor
resultado, nos va a perm itir minimizar el riesgo producido por la entrada de n u d o en nues
tro muestreo.
296
Tras inicializar el mdulo ADC, el cdigo correspondiente a la solucin del ejercicio ser
el siguiente:
#inelude "p30f4013.hM
#include <stdio.h>
; :'.v.||
'
' .*V-
'>*
.-.V.
!!*;vi
* vlvOX!
v.-i
//Inicializamos el conversor
// Entramos en un bucle infinito
Tercera parte
Laboratorio experimental
LABORATORIO
El sistema
de desarrollo
PIC School
L0.1. IN T R O D U C C I N
300
dispositivos especficos como el bus CAN, USB, Internet, Bluetooth, etc. Para conseguir esta am
plia gama de aplicaciones, la tarjeta contiene un grabador, fuente de alimentacin, numerosos pe
rifricos y recursos que pueden conectarse a cualquier patita del procesador y una tarjeta de mon
taje sin soldadura para aadir otros sensores o complementos que se requiera en cada mdulo. Cada
uno de estos mdulos contiene el hardware especfico para el desarrollo de los experimentos, un tutorial didctico en el que se explica el funcionamiento de los elementos a los que se destina junto a
una coleccin de proyectos completamente resueltos y comentados y, finalmente un CD con toda
la informacin y programas necesarios para la implementacin de dichos proyectos. As mismo, en
el CD que acompaa a esta obra, podr encontrar todos los laboratorios desarrollados en esta ter
cera parte de laboratorios experimentales. (Figura LO. 1)
El entrenador universal PIC School, no solamente sirve para desarrollar los laboratorios de esta
tercera parte de la obra, sino que adems funciona com o grabador de distintos PTC y dsPIC y como
sistema de desarrollo en el que los elementos que contiene no estn conectados, disponiendo de una
plataforma de ampliacin y de adaptadores con los que puede aprender todo tipo de microcontroladores PIC, as como productos relacionados. Hay un mdulo para cada producto.
Permite traba/ar directamente con microcontroladores PIC de 8 bits de las gamas baja, media y al
ta con encapsulados de 8, 18, 28 y 40 contactos pudiendo incluso, con ayuda de un adaptador
dar soporte a los dispositivos de 16 bits y a los potentes dsPIC. Adems dispone de un oscilador
de cuarzo que permite trabajar a diferentes frecuencias, permitiendo tambin utilizar el oscilador
RC incluido en algunos microcontroladores. Asimismo, y mediante un mdulo adaptador, tambin
permite la ejecucin, depuracin y grabacin de controladores digitales de seales dsPIC.
3 01
Dispone de un amplio y representativo nmero de perifricos, con la ventaja que ninguno de ellos
se encuentra conectado de forma predeterminada a las lneas de E/S del microcontrolador. Es el
propio usuario quien; mediante un sencillo cableado sin soldadura, conecta y asocia ios distintos
perifricos esas lneas de E/S segn lo requira la aplicacin. Esto permite tener un contacto ms
directo con l hardware y un mayor control del mismo. Adems dispone de una amplia superficie
de BOARD en la cual se pueden conectar, sin soldadura, los perifricos necesarios para un pro
yecto que no estn incluidos en el entrenador.
Existe una serie de mdulos de prcticas opcionales en donde se van tratando diferentes temas
raconidos con los microcontroladores: comunicaciones, Bluetooth, USB, CAN, R.F., control de
motores, perifricos avanzados y un largo etctera. En esos mdulos tambin so describen apli
caciones que permtan conocer las caractersticas de los PIC desde la sencilla familia 12FXXX has
ta os potentes 18FXXXX. Cada mdulo consta de un conjunto de prcticas y todos los compo
nentes necesarios para implcmentarlas.
El.PIC School tiene tres modos de operacin diferentes que se seleccionan fcilmente mediante un
conmutador. El modo "RUN se emplea cuando el dispositivo est grabado con el programa de
aplicacin a ejecutar. Todas las lneas de E/S estn disponibles para el control de perifricos. El
modo PC " se mpJ'a durante los ciclos de grabacin del dispositivo. Esta grabacin se realiza
mediante el canal serio de un PC dotado del software de grabacin correspondiente (WinPic 800,
IcProg, etc:.). Se suministra el cable de conexin con el PC. Finalmente el modo ICSP permite co
nectar el laboratorio PIC School con otros grabadores externos dotados de las seales ICSP o bien
con depuradores en circuito como el ICD2 de Microchip. De esta forma es posible la emulacn/depuracin/grabacin del dispositivo contenido en el laboratorio. Tambin existe un adapta
dor opcional para conectar PIC School al puerto USB del PC.
A la hora de seleccionar los perifricos incluidos en este potente entrenador, cabe destacar que
se han elegido los ms empleados que se distribuyen en las siguientes categoras.
Perifricos de entrada
Un teclado matrica de 4x4 teclas considerado el dispositivo de entrada por excelencia en aplica
ciones microelectrnicas.
Perifricos de salida
m Och diodos LED que permiten monitorizar el estado de las lneas a las que se conectan.
Un drver de cuatro canales capaz de proporcionar salidas de alta corriente permitiendo la conexin
de motores, lmparas incandescentes, rels, etc.
Una pantalla LCD de 2x16 caracteres que permite la representacin de mensajes mediante letras,
nmeros o smbolos especiales.
Perifricos de comunicacin
% Interfaz serie. RS232 que permite adaptar los niveles lgicos del microcontrolador a niveles RS232.
Interfaz CAN, que convierte las seales del microcontrolador segn las especificaciones de este
BUS tan utilizado en redes sensoriales.
m Conector RJ11, qu permite la conexin de dispositivos I2C, iButton, RS485, etc.
Conector USB, que permte la conexin con cualquier dispositivo estndar existente en el mercado.
302
De esta forma, gracias a esta nueva herramienta, se solventan las cuatro grandes limitaciones
existentes en el resto de entrenadores comerciales para microcontroladores:
1.a Es un entrenador vlido para todas las gamas de microcontroladores PIC, permitiendo al
usuario seleccionar siempre aquel dispositivo que ms se ajuste a las necesidades especficas
de cada proyecto. Pudiendo, adems, seleccionar la frecuencia y tipo de reloj ms adecuados
en cada caso.
2.a Dispone de los perifricos ms universales utilizados en la microelectrnica, permitiendo que
la conexin entre estos y el microcontrolador se realice a medida de cada experimento. Ade
ms, gracias a la board que posee, cualquier dispositivo adicional se puede incorporar con fa
cilidad. De esta forma se puede obtener el primer prototipo funcional de un proyecto en el m
nimo tiempo y sin tener que realizar ni una soldadura.
3.a Gracias a sus tres modos de funcionam iento, el PIC School se adapta a todas las etapas
que conlleva el desarrollo de una aplicacin m icroelectrnica, perm itiendo la emulacin,
prueba y grabacin de m icrocontroladores PIC cam biando slo la posicin de un conm u
tador. A s se evita la utilizacin de varios dispositivos que realicen cada una de esas
tareas.
4.a Dada la gran cantidad de mdulos especficos para el aprendizaje prctico de microcontrola
dores, dsPIC y productos novedosos, es posible conseguir en poco tiempo el conocimiento y
la experiencia para desarrollar cualquier aplicacin real.
Encargada de obtener la tensin general de +5Vcc con la que se alimenta el laboratorio PIC
School, todos los perifricos de la misma y el procesador empleado. (Figura LO.2.)
Figura LO.2.
Fuente do alimentacin.
303
API
CM 1
SW3
D1
-W
ON /O FF
U1
JA7.S05/TQ
IN
-O +5VCC
OUT
1N4007
AP?
R3
330
3-15VDC
1
3
c2 :
100n
C 28
lOOuF
Figura L0.3.
D3
Vcc ON
AP3
El esquema elctrico de la fuente se muestra en la Figura L0.3. A travs del conector CN1 se
aplica una tensin de 9 a 15VDC procedente de un alimcntador estndar con el positivo al centro.
El interruptor SW3 conecta el sistema. El diodo DI evita la polarizacin inversa y con ello los da
os que se pudieran ocasionar al equipo. El regulador U 1 estabiliza la tensin a +5 Vcc con 1A m
ximo. Dicha tensin, junto con GND estn disponibles en el conector A PI y AP2 respectivamente
para alimentar a los circuitos y prototipos del usuario. En el conector AP3 est disponible tambin
la tensin de entrada sin estabilizar +Vin para aquellos circuitos que la requieran. El diodo led D3
indica la presencia de tensin +5Vcc.
LO.3.2. El o s c ila d o r
+ 5 V cc
Figura LO.4.
46 V c c
304
El dispositivo XI contiene en su interior un oscilador preciso controlado por cuarzo y todo ello
en una cpsula metlica en formato DIP8. Este oscilador, tambin llamado Canned O scillator, se
puede adquirir para diferentes frecuencias segn las necesidades. Basta simplemente cambiar uno
por otro para que la aplicacin se ejecute a ms o menos velocidad.
Es la seccin mas importante del entrenador PIC School y donde se instala el dispositivo PTC con
el que se va a trabajar. Bsicamente consta de cuatro zcalos donde se pueden insertar los disposi
tivos de 8, 18, 28 y 40 patitas tal y como se muestra en la fotografa de la Figura 1.7.
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.
Estn formadas por dos potencimetros, tal y como se muestra en la fotografa de la Figura L0.6.
Figura L0.6.
Entradas analgicas.
305
El esquema elctrico de las entradas analgicas se m uestra en la Figura L0.7. Las lneas de los
potencimetros son directamente accesibles desde el bloque de conexin A P I6 correspondiente y
se les puede conectar cualquier tipo de circuito elctrico analgico.
A P 16
ENTRADAS A N A LO G IC AS
La Figura L0.9 muestra el esquema elctrico de estas ocho entradas cuyas seales estn dispo
nibles en el bloque de conexiones A P I8. Las seales E0-E3 proceden de los cuatro interruptores
306
deslizantes. Cuando estos estn abiertos (hacia arriba) proporcionan nivel lgico 1 gracias a las
resistencias pull-up de RP2. Cuando cualquiera de ellos se cierra (hacia abajo) se conecta directa
mente con la seal GND proporcionando nivel 0".
Por otra parte, los cuatro pulsadores en situacin de reposo permanecen abiertos generando ni
vel lgico 1 gracias a las resistencias pull-up contenidas en RP3. Cuando se accionan se cierra el
circuito con GND y se genera nivel 0.
Figura L0.9.
307
F R E Q .S E L E C
i---- o
SW 2
R17
+5VC C
R 23
+5VOCO-
U6
SEL
470
1Hz
D5
10 K
10HZ
VDD
022 :
1 00H z
1KHZ
lOOn
GND
S Y M -1 0
OUT
/ y
6
5
07
1A
08
L rf
AP8
FR EQ
OUT
L0.3.7. El te c la d o
Como se aprecia en la Figura LO. 12, el laboratorio PIC School va provisto de un teclado matricial
de 4 x 4 teclas. Se trata del perifrico de entrada por excelencia que va a permitir introducir todo ti
po de datos para su posterior procesamiento.
308
El control del teclado supone el tener que aprender y utilizar una serie de tcnicas y conceptos
que se emplean en las ms diversas aplicaciones. M anejar conceptos tales como barrido del tecla
do, led a pulsada, rebotes, interrupcin con cada pulsacin, wake up con cada pulsacin, ctc.? da
rn al usuario la posibilidad de acometer ambiciosos proyectos de carcter profesional.
Un dato relevante a tener en cuenta es que a pesar de disponer de 16 teclas, tan slo son necesa
rias 8 lneas de E/S del microcontrolador para su control. Ello es debido a su distribucin matricial.
La Figura 1.17 muestra el teclado asociado al bloque de conexiones AP21. En dicha figura tambin
se puede apreciar la relacin entre fila-columna y la tecla asociada. A s pues, la tecla 1 est asocia
da con la fila 0 (F0) y la columna 0 (C0).
En el laboratorio P1C School las 8 lneas del teclado se puede conectar a cualquier puerta del PIC,
pero se sugiere conectarlo a las lneas de la puerta B (como se muestra en la Figura LO. 13). Esto se
debe a que la mencionada puerta tiene, en la mayora de los dispositivos PTC, un par de caractersti
cas muy interesantes para el control de un teclado: resistencias pull-up internas para las lneas de en
trada y posibilidad de interrupcin cuando cualquiera de esas lneas de entrada cambie de estado.
SW5
Las cuatro filas F0-F3 de la Figura LO. 13 se conectan a RB4-RB7 y las cuatro columnas C0-C3
se conectan con las lneas RB0-RB3. La interseccin fila-columna da lugar a seleccionar una tecla
en concreto. Es decir, si se pulsa por ejemplo la tecla 4, supone unir elctricamente la fila F1 con la
columna C0, que es tanto como decir que las lneas RBO y RB5 del PIC se han unido.
La rutina software encargada de explorar el teclado tiene que determinar qu tecla se ha pulsado. Pa
ra ello, por ejemplo, se configuran las lneas RB0-RB3 (las columnas) como salidas y RB4-RB7 (las fi
las) como entradas. Secuencialmente se van activando cada una de las columnas al tiempo que se lee el
estado de las filas. Cuando se detecta que una fila est activa es porque se puls una tecla. Basta cono
cer qu columna se activ en ese momento para sacar la relacin fila-columna que define a dicha tecla.
Esta tarea, conocida como barrido de teclado, ha de repetirse de forma constante y peridica. De esta
manera y, a la velocidad de trabajo del PIC, ser posible detectar una pulsacin en cualquier momento.
Haciendo uso de algunas de las prestaciones que ofrecen los dispositivos PIC en la puerta B, es po
sible desarrollar rutinas ms sofisticadas y eficaces. Efectivamente, programando los registros opor
tunos de un PTC podemos hacer que las entradas RB4-RB7 (las filas) se conecten a las resistencias
pull-up internas que hacen que esas lneas, en estado de reposo, estn a nivel 1. Por otra parte, tam
bin podemos habilitar la interrupcin por cambio de estado de cualquiera de las entradas de la puer
ta B. En este momento las salidas RB0-RB3 (columnas) se ponen a nivel 0 y esta situacin de re
poso se mantiene mientras no se pulse ninguna tecla. El microcontrolador puede dedicarse a otras
tareas o quedarse en standby reduciendo el consumo hasta que ocurra un suceso como puede ser la pul-
309
saein de cualquier tecla. Efectivamente, puesto que RB0-RB3 (columnas) estn a 0 y RB4-RB7 (fi
las) estn a 1 gracias a las resistencias pull-up internas, cuando se pulse cualquier tecla se produce
una interrupcin por cambio de estado en cualquiera de las lneas RB4-RB7 (filas). Esa interrupcin
provoca la inmediata atencin del microcontrolador que pasa a ejecutar la rutina que se encargar de
averiguar qu tecla se puls.
Estn formadas por 8 diodos led (S0-S7) que sirven para monitorizar el nivel lgico de las lneas a
las que estn conectados.
En el laboratorio PIC School los leds son accesibles mediante el conector A P I7 tal y como se mues
tra en el esquema de la Figura LO.l 5, y se pueden conectar individualmente a cualquiera de las lneas
del microcontrolador. Estas lneas son capaces de suministrar 25mA por lo que no es necesario ningn
circuito adicional de amplificacin excepto las resistencias de absorcin contenidas en el pack RPl.
RP1 SIL
330
f,0 0 0 :0 (/! 0 0 W i n CO
SALIDAS DIGITALES
310
Un nivel lgico 1 por cualquiera de esas lneas provoca el encendido del led correspondiente.
Un nivel 0 lo apaga. Es una forma muy simple y econmica de reflejar el estado binario de las li
ncas de salida, donde cada led simula el estado de la carga que se desea controlar.
El laboratorio PIC School dispone de un driver de 4 canales soportado por el dispositivo L293D y
capaz de proporcionar salidas de alta corriente.
'
En la Figura LO. 17 se puede apreciar el esquema elctrico. El dispositivo integrado L293D dis
pone de 4 canales amplificadores o drivers capaces de proporcionar salidas de hasta 0,6 A a 36V ca
da uno, a partir de seales TTL de baja corriente.
Mediante el conector AP6 se conectan las seales E1-E4 a amplificar y que proceden de sendas
salidas del microcontrolador. El conector CN7 est formado por un conjunto de bomas o ciernas
donde se obtienen las salidas S1-S4 debidamente amplificadas y se realizan las conexiones con las
cargas a controlar.
Mediante el jum per JP8 se selecciona la tensin de salida para las cargas. En la posicin l -2 (por
defecto) dicha tensin es de +5Vcc. En la posicin 2-3 la tensin que alimenta a las cargas se apli
ca externamente a travs de la bom a +VM.
Mediante estas salidas de alta corriente el laboratorio PIC School puede controlar cargas de consu
mo elevado, como pueden ser lmparas incandescentes, rels, motores DC, motores paso a paso, etc.
Cabe indicar que el dispositivo L293D integra en su interior sendos diodos para la absorcin de
com entes inversas provocadas por cargas inductivas.
Su ubicacin dentro del laboratorio se muestra en la Figura LO. 18. Consiste en el clsico interfaz se
rie que permite adaptar los niveles lgicos del microcontrolador a niveles RS-232.
311
SAUOAS D E L D RIVER
CN7
CD CD CD CD CP
JP8
13
12
fffl
GND
VDD
GND
U5
GND
L293D
GND
CO
*-
IL
lii
2 2
q2
VCC
CO
2
Oi
2
16
rz
-0+ 5V C C
C21
100n
+5VCC O-
AP6
ENTRADAS AL D RIVER
Segn el esquema elctrico mostrado en la Figura LO. 19 el interfaz est formado por el popular
adaptador de niveles M AX-232. Mediante el conector AP5 se dispone de las seales de transmisin
y recepcin (TxD y RxD) as como las de control de flujo CTS y RTS. Estas seales proceden del
microcontrolador. El conector CN5 es un conector DB9 hembra estndar, que permite realizar la co
nexin con el perifrico serie. Mediante un led bicolor (D17/D18) se monitoriza todo tipo de trans
misin y/o recepcin.
312
Este interfaz permite realizar todo tipo de comunicaciones serie entre el laboratorio P1C School
y cualquier otro equipo mediante el protocolo estndar RS-232. La velocidad de transferencia ir en
funcin del tipo de microcontrolador empleado y su velocidad de trabajo.
Se recuerda que algunos dispositivos PTC incorporan en su interior una UART completa que se
encarga de realizar la mayor parte de los procedimientos propios de la comunicacin segn los pro
tocolos tanto RS-232 como RS-485. En este ltimo caso basta con montar el sencillo circuito de
adaptacin correspondiente sobre el mdulo board de montaje sin soldadura con que cuenta PIC
School.
CN5
MAX232
U4
RTS
RxD
CTS
TxD
12
11
10
T10UT
T20UT
TI IN
T2IN
R 11N
R2IN
R 10U T
R 20U T
1001
V+
C15 :
100n
RTS
TxD
CTS
RXD
C2+
C2-
C1 +
C1-
C17 :
13
VQ
2
O
o
O
>
C19
-XIo
= j=
1
T
C16
10On
C18
10On
D17 '
R O JO fTx)'
INTERFACE RS-232
r
\
D18
VERDE (Rx)
*5VCC
10On
AP5
+5VCC
CANAL SERIE
Est compuesto por el dispositivo adaptador MCP2551 que convierte las seales lgicas segn las
especificaciones del bus CAN.
313
El bus CAN permite crear una red con una transferencia de datos muy robusta y fiable entre el microcontrolador principal (host) y todo tipo de dispositivos o nodos CAN conectados entre s median
te 2 hilos. Este protocolo es muy empleado por la industria del automvil y algunos dispositivos PIC
incorporan mediante hardware interno todos los mecanismos necesarios para su implementacin.
En la Figura L0.21 se muestra el esquema elctrico de este interfaz incorporado en el laborato
rio PTC School. Por el conector APIO se proporcionan, procedentes del microcontrolador, las sea
les RxCAN y TxCAN que van a parar al circuito de adaptacin MCP2551. Las seales de salida
CANH y CANL se obtienen por el conector CN6 (DB9 macho) y de aqu van a parar a los diferen
tes nodos de la red. El circuito de adaptacin es capaz de conectar con hasta 112 nodos. Mediante
el jum per JP1 se habilita o no la resistencia Terminal R2 segn qu lugar ocupe el laboratorio en la
red (por defecto habilitada).
Se trata de uno de los perifricos ms verstiles e interesantes que dispone el laboratorio PIC School.
Se muestra en la Figura L0.22 y es capaz de visualizar dos lneas de 16 caracteres alfanumricos
cada una.
Este potente perifrico de salida va a permitir representar cualquier tipo de mensaje compuesto
de letras, nmeros y smbolos produciendo adems diferentes efectos de visualizacin como des
plazamientos a izquierda y derecha, parpadeos, scrolls, etc.
1.a transferencia de informacin entre la pantalla LCD y el microcontrolador se realiza en para
lelo en grupos de 4 u 8 bits de datos y se conecta con las lneas de E/S mediante el conector AP20.
El esquema elctrico se muestra en la Figura L0.23.
314
Existe adems otro conector, el AP9, donde se conectan las seales que controlan el flujo y ti
po de informacin que se transfiere. Con la seal RS se determina si la pantalla recibe el cdigo
ASCII del carcter a visualizar (nivel 1) o bien un cdigo de instruccin (nivel 0). Mediante
la seal RW el m icrocontrolador informa a la pantalla LCD si se va a leer o escribir sobre la mis
ma. Finalmente, con la seal E, se habilita o no a esa pantalla. Cuando esta seal vale 0 la pan
talla queda desconectada, las lneas de datos quedan en alta impedancia. Cuando vale 1, la
pantalla queda habilitada para recibir o mandar datos.
U 8
LC D
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.
315
316
Estas tres seales se conectan con tres fuentes diferentes segn el modo de operacin seleccio
nado mediante el conmutador SW4.
El modo RUN se emplea cuando el dispositivo est grabado. Las tres seales del PIC anterior
mente mencionadas se consideran lneas de E/S de propsito general y estn disponibles a travs de
los bloques de conexin correspondientes, para ser utilizadas por los perifricos de la aplicacin.
En el modo IC SP el laboratorio queda configurado para que el PTC actual insertado se pueda
lccr/grabar a travs de las seales que se aplican mediante el conector R J11 (ICSP: In Circuit Se
rial Programing). Estas seales a su vez las debe proporcionar un grabador externo dotado de su
correspondiente software de grabacin. Se puede em plear el mdulo 1CD2 de M icrochip junto con
el entorno integrado de desarrollo M PLA B, que se puede obtener de form a gratuita desde
www.m icrochip.com. El mdulo ICD2 adems de grabar dispositivos es capaz de realizar depu
racin en circuito en tiempo real, con ciertos modelos de dispositivos PIC.
En el modo PC la lectura/grabacin del PIC se realiza a travs de las seales del canal serie de
un PC dotado del correspondiente software de grabacin. Un diodo led, el Vpp ON, indica transfe
rencia de datos entre el PC y el laboratorio. Entre los mltiples tipos de software existentes, noso
tros hemos elegido el WinPICBOO y el IcProg, con los que hemos obtenido excelentes resultados.
Ambos programas se pueden descargar y actualizar de forma gratuita en las direcciones http://perso.wanadoo.es/siscobf/winpic800.htm y en www.ic-prog.com.
Se reitera una vez ms que, aunque un software de grabacin determinado grabe mltiples dis
positivos y de diferentes familias, es necesario que tambin haya compatibilidad a nivel hardware.
Esta compatibilidad viene dada fundamentalmente por la distribucin de patillas del dispositivo en
cuestin.
Para aprender a disear experimentalmente aplicaciones con la PIC School sobre diferentes dispo
sitivos y temas. Ingeniera de Microsistemas Programados S.L. comercializa diversos mdulos
conteniendo los componentes complementarios a los existentes en la PIC School y que requieren los
proyectos que se proponen. As existen mdulos para el aprendizaje de PIC12F, PIC18F, Internet,
Buetooth, USB, etc. El mdulo dsPIC, cuyo kit de materiales se muestra en la Figura LO.27 tiene la
317
misin de soportar todas las experiencias que se proponen en este libro y muchas ms y consta de
los siguientes componentes:
1. Adaptador de zcalo con dsPIC30F4013 incorporado.
2. Motor de corriente continua.
3. Circuito integrado para controlar LCD LCDSYM20AA.
4..Cables y material auxiliar.
5.
Tutoral con ejercicios y proyectos progresivos comentados y resueltos (este libro).
6. CD con informacin tcnica y programas.
Figura L0.27. Fotografa que muestra los materiales que componen el "mdulo dsPIC" para realizarlos
proyectos sobre dsPIC propuestos en este libro y muchos ms en la PIC School.
Para comenzar a trabajar con este mdulo, deber montarse el zcalo adaptador de dsPIC incor
porando el dsPIC30F4013 sobre la placa PIC School. Para ello, la placa PIC School dispone de un
nico zcalo de 40 pines donde se deber insertar. En cada aplicacin slo deber estar insertado el
microcontrolador usado.
El sistema PIC School puede programar un dispositivo dsPIC directamente a travs del puerto serie
o emplear el canal ICSP y un programador de M icrochip. En caso de realizar la grabacin con un
grabador de Microchip, el software de grabacin es el MPLAB, que permite la creacin de un pro
yecto, su depuracin, simulacin y programacin en el dispositivo. En caso de que no se disponga
de un sistema de desarrollo de Microchip, es posible grabar los dsPIC directamente con el hardwa
re de grabacin que se encuentra en la tarjeta PIC School. Para ello, hay que disponer de un fiche
ro hexadecimal correctamente compilado y de un software de programacin que se encargue de
318
transferir el fichero desde el ordenador hasta la memoria del dsPIC. Para realizar esta funcin de
programacin, se puede utilizar el software WinPlCSOO. Se trata de un excelente programa de libre
distribucin que puede descargarse de Internet y que se encuentra en la carpeta de Software de Pro
gramacin del CD del libro.
LO.5 .1 . S o ftw a re W IN P IC 8 0 0
V/nPlc800
1 S ch ivo
Ed cor
3 .5 5 g
Disposavo
Q
coftgjf acin
H
I
"S
C d ig o
! S*
2
D a '- u a
Ldo.iv
i%
C o n tic i.
Ai,ua
i? %
j p x c r ! ^ !
4$ C o d .T C S P
---
30F4013
t& $
j j j
0x00000
FFFFFF
FFFFFF
FFFPFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
0x00010:
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
0x 0 0 0 2 0 :
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FPPPPP FFFFPP
PPFFFF
0x00030 :
FFFFFF
FFFFFP
PPFFFP
FFFFFP
FFFFFF
FFFFFF
FFFFFF
FFFFFF
U X U U 4 U :
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
0x00050 :
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
PPPPPF FFPPPP
FFFFFF
FFFFFP
0x00060:
FPPPFF
PPFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
<0x00070 :
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
0x00080 :
FFFFFF
FFFFFF
FFFFFF
FFFPPP
FFFFPP
P P F FF F PPPPPP
FFFFFF
0x00090:
PFPFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
O xOOOAO:
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
OxOOOBO:
FFFFFF
FFFFPP
FFFFFF
PPPPPF F F F F F F
FFFFFF
FFFFFF
FFFFFF
FFFFFF
Y
>
1 H x > T 7 e m rL F T l
319
w m P lc 80 [ H a rd w a re Confgi.
Iti& s
S o lc c c io n d e l H a rd w a re
de 3 /C eL p\s*rfco
G IP - U S B - H F 1
G IP -U S B -2 3 2
IH E X - P a r a U L e l P o r t
;JD M P r o g r a m m e r
/ . w w m i :
:
.-im f
r . . ; .. 8 r
M lc r o 4 y o u
M ic ro 4 y o u _ 8 7 7
P o J )J .ln
s ic y .
i DTK
MOV
+4-
9pp?.
Uc&Z V<d
.U sa r 15clv
- In v F
1
F
F
xnvr
;P ra P ro g
;PG 3D
:P ic 8 0 0
13
|c t s
Ir t s
O :hy.
! '* o
I-
jJ
I-
sJ "
. F
V f
s I e J b
jPlift
&
-m
^
J ::> !-
C a n c e la r
C onfi c a n t c a n b iu a
Figura L0.29. Primer paso: es necesario seleccionar el tipo de programador y escoger un puerto serie
del PC.
VVinPic800
- 3. b i g
G? - ? Q
[UrrfidBwifec
Figura LO.30. Seleccionando el modelo de dsPIC con el que se va a trabajar.
320
W ln P f c 8 0 0
I A rihw o
G*
Fdctn
- 3 .5 5 g
C J C d ig o
E
![dem a
f^spcxtfwo
^
'- D a t o s
002882
C o n ig .
| P IC -x ! j J
4 3 C o d .IC S P
0X 00000:
8A 3000
0x000111:
A 03U 4A
12U B AU
000000
090B 80
0X00020:
A 0282D
B 13008
AOODAP
200830
84302D
) @
030800
0128X 8
1 T-
1 30F4013
'%
#1
A 000A 1
OCOBAO
0B0BA1
303400
2F01A 1
211803
A0082F
A 01803
B10DA1
002824
2D 0821
0x00030:
6400A P
19 00 B
A D 0820
300821
411D 03
40102E
4 0 1 .9 A B
201A 2E
0x00040:
A E2843
A 1122E
0C 0821
992845
A P082D
B0300A
202019
2100A D
992859
A 03030
0X 00050:
033030
A E2057
Ainjd
0C 0821
:*
j.
0C 082D
2R 285C
A 13020
0x00060:
99205F
77118A
0C 3043
992865
A D 3001
2A 2004
6C 1E0C
010099
0x00070:
0400A D
A D 082B
A E3011
01282E
0400A D
0C 082C
99287B
A D 3001
>0x00080:
002004
1 F 0 1 81
060583
9F1683
993019
983026
833090
A 60098
0x00090:
A 801A 7
0601A 9
9F1683
653000
6630FE
673046
071283
A 6 3 IK 1 0
OxOOQAO:
A 70185
2601A 8
2700A A
2800A B
6400A C
A A 3014
A D 30FA
A A 2004
O xO O O B O :
3120A C
0900A 6
328085
A 800A 7
A A 0826
A B 0827
A C 0828
642064
H > P c B ro e r-C O M l
> DAPPALLBIX
_ _ _ _ _
Figura L0.31. Fichero hexadecimal abierto y listo para ser grabado en el dsPIC.
WfnPicBOO
- 3 .5 5 g
G ^ 1 Q
Q
ox
letama A^udo
1231
S* % \ f? % fpicT
Cdicro ,; ^ g P a t o s
7ffco o
3fff
FFFF
C onfia.
FFFF
^ J c x l.x c s p
FFFF
FFFF
FFFF
38TID13 ~ 1 3
PFPP
FPPP
FFFF
FPPP
FPPP
FFFF
P IP F
rrrr
0x7P P C 20
FPPF
FPPF
FFFF
FFFF
FFFF
FFFF
FFFF
FFFF
0X 7FFC 30
FFFF
FFFF
FFFF
FFFF
FFFF
FFFF
FFFF
FFFF
Q x7FFC 40
FPPP
PFPP
FFFF
FPPP
PPFF
FFFF
FFFF
FFFF
D X7FFC 30
rrrr rrrr
FFFF
FFFF
rrrr
FFFF
FFFF
FFFF
FFFF
FFFF
FFFF
FPPP
FFFF
FFFF
FFFF
0x7FFC 70
FPPP
PPFF
FFFF
PPFF
FFFF
FFFF
rrrr rrrr
0X7FFC 80
FPPF F F F F
FFFF
FFFF
FFFF
FFFF
FFFF
FFFF
O x7FFC 90
FPPP F F F F
PPFF
PFFP
FFFF
FPPP
rrrr
FFFF
O xTFFC A O
FFFF
FFFF
FFFF
FFFF
FFFF
FFFF
FFFF
FFFF
0X7FFC B 0
FFFF
FFFF
FFFF
FFFF
FFFF
FPPP
PFPP
PPPP
lftx 7 P P fO .fl F P P P
FFPP
YYYY
YYYY
YVYY
YYYY
KF
FK FFFF
IUr.hcfarer- COMI
i*
FFFF
0x7P FC 10
0X 7FFC 60
321
FFFF
DVPALHX
rdevo tdoco
C ~ 0 ! ^
C 2 C d io o
4 -J
DOCOO
C o n fig .
I r l c
4 g c d . IC S P
P rin x ry O s c illa r o r
30P413
:
T"
&
- J id d r c o n f l g J
OkFSCOOO: C 7 0 1
PURI -
OkFWWH: 8 7 B 3
OKF30C02: 8 0 3 F
- O s e . S o u rc c o n PO H-
-C lo c k S w itc h in g -
< Prnury
C AJtena Osctor
G
C
C
r
C
O .tal fe dock 0 8
O n .f safe dock Off
On , b l u fe dock On
I ii t m d F ^ E C
LowPw cr 32 K H z T x r r r I
UKrwoot. a i o r
-
B ro w n -
O xSW XK: 3 3 0 F
|2 .iY
CtxFSOOOC COO 3
w n r T if m k * A
j 1.512
HPOL
LPOL
P7 H C L R E N
GCP
BKBUG
GWRP
COE
17 B O R D I
EUt -R cB urror-C O M I
FTO TXN
P H H P IN
wrarPiMMjeD
I* *
_J
ICD CanvunMticn
FKUC * fKU O
_J
D tfP A L IH X X
Figura L0.33. Seleccionando la palabra de configuracin. Es un paso fundamental para que el progra
ma que se va a programar se ejecute correctamente.
WinPic800
P r o g r a m a r - 3 0 F 4013
Vdd 0
A
..yOZ
C an celar
dock-4 us
P ro g re so
f Conforme ;|
CPU -2806 Mhz
322
r Verificar
tras la programacin
i A v i s a r a n t e s de b o r r a r y p r o g r a m a r
Usar A u t o s e l e c c i n del disp ositivo
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 a l e n t r a r
P A c t u a l i z a r e l A r c h i v o a n t e s d e p r o g r a m a r
j...C a n c e l a r
C o n fir m a r
LABORATORIO
Aplicacin de
instrucciones DSP
con entradas
y salidas digitales
L1.1. OBJETIVOS
Esta primera prctica utiliza las entradas y salidas digitales del equipo PIC School y el M otor DSP
de los dsPIC. Los objetivos de la prctica son:
Realizar el primer programa bsico con dsPIC ejecutando correctamente todos los pasos de de
sarrollo de un proyecto, que posteriormente se pueden aplicar a ejercicios mucho ms complejos.
Manejar entradas y salidas digitales y las instrucciones DSP para realizar tareas que seran muy
costosas en un microcontrolador MCU.
Las operaciones bsicas que realiza un m icrocontrolador MCU son las sumas, restas y opera
ciones lgicas tipo AND, OR, XOR, etc. Otra limitacin importante de las familias clsicas de
microcontroladores de M icrochip es el empleo de registros de 8 bits de datos, lo cual resulta muy
limitado para aquellas aplicaciones que necesitan clculos matemticos con valores de m ayor lon
gitud. Como ejemplo, a continuacin se muestra la rutina en ensam blador que realiza una opera
cin tipo M ultiplicacin de 16 bits con un m icrocontrolador PTC de la familia 16F87x:
MULVI:
MLU16LOOP:
Figura L1.1.
CLRF RESULT16
CLRF RESULTI6J-I
BTFSC TEMPY J6,0
CALL ADDI6
STATUS.C
BCF
RRF
TEMPY 16_H,F
RRF
TEMPY 16,F
BCF
STATUS,C
RLF
TEM PX16,F
RLF
TEMPX16_H,F
MOVF TEMPY 16,F
324
ADD 16:
Figura L1.1.
BTFSS
STATUS,Z
GOTO MULU16LOOP
MOVF TEMPY16_H,F
BTFSS
STATUS,Z
GOTO MULU16LOOP
RETURN
MOVF TEMPXJ6,W
ADDWF RESULT 16
BTFSC STATUS,C
INCF
RESULT 16_H
MOVF TEMPX16_H,W
ADDWF RESULT 16_H
RETURN
Debe tenerse en cuenta que no se trata tan slo del nmero de instrucciones, sino que es un bu
cle que se repite hasta 16 veces para llegar a la respuesta final. Es una operacin muy costosa para
un microcontrolador.
Sin embargo, en un dsPIC se dispone de instrucciones especficas para realizar operaciones
complejas y una arquitectura que optimiza enormemente el desarrollo de funciones trigonomtricas
o logartmicas en comparacin con los microcontroladores. La Figura L1.2 muestra algunas ins
trucciones especficas contempladas en la arquitectura de los dsPIC, en las que se manejan valores
de 40 bit de tamao. Se las denomina instrucciones DSP.
IN S T R U C C IO N E S D S P IC
O P E R A C IO N E S A L G E B R A IC A S
LDAC
A A + ( x - y ) 2
MAC
x'
*
A = ( x - y)2
II
o
il
"C
ED
CLR
MAC
A - A + x2
MPY
A = x* y
MPY.N
A = -x * y
MSC
A = A- x*y
Figura L1.2. Algunas instrucciones especficas para operaciones algebraicas con los dsPIC.
L1.2. DESCRIPCIN DEL LABORATORIO
Este laboratorio trata el manejo de instrucciones DSP. Supongamos que tenemos un robot o un vehcu
lo autnomo que circula por un circuito. Est dotado de dos sensores de ultrasonidos que le indican la
distancia a la que se encuentran las paredes situadas a la derecha e izquierda de la pista. El objetivo es
seguir el recorrido por el centro de la pista. Realizando una simple resta entre la distancia de los dos sen
sores, se puede conocer si el robot est situado ms cerca de la pared izquierda que de la derecha, pero
adems, gracias a esta operacin es posible calcular este error de manera exponencial, de forma que se
pudiera generar la aceleracin necesaria en las ruedas del vehculo para corregir el error de posicin.
325
Figura L1.3.
326
D ISTANCIA E U C L D E A -IN S T R U C C I N ED
-S e n so r 1
Sensor 2
B ro r
c u a d r tic o de
posicin
Figura L1.4.
Para escribir el programa, se utiliza el entorno MPLAB de Microchip. Hay que crear un nuevo
proyecto, para lo cual se accede al men Project y se ejecuta la opcin Project W izard, que es una
327
AP18
P ro je c t W iz a rd
Step One:
Select a device
Device:
\m ^ m m
<Atrs
(I; Siguenje> J
Cancel
Ayuda
328
P ro ject Wi7ard
Step Two:
Select a language tQQlsvrte
Active T oolsuite:
Toobuite Contents
MPLA.B LINK30 Objcct Linker (pic30-ld.ox)
UB30 Archiver (pic30-ar exe)
Location
C:\Aichivosdepiograma\Microchp\MPLABASM30Sute\bin\pic30-as. Browse
Help! My Suite Isnt Listed!
~~|
<Atrs
~[| Siguiente:
Cancelar
Ayuda
Figura L1.7. Seleccin del compilador ASM.30, de libre distribucin y propiedad de Microchip.
La ventana del proyecto debe contener el fichero Laboratorio l.s bajo el directorio Source, el fi
chero p30f4013.gld bajo el directorio Linker Script y el fichero p30f4013.inc bajo el directorio Header Files. Es imprescindible aadir estos tres ficheros en el proyecto para que el programa pueda
ser compilado sin errores. Los ficheros con nombre p30f4013 son universales para cualquier apli
cacin que utilice este modelo de dsPIC. Figura L1.8.
Para aadir estos dos ficheros a un proyecto hay que seleccionar la opcin Add File pinchando
con el botn derecho del ratn encima de cada directorio, tanto Header files como Linker Script.
Despus hay que buscar los ficheros en el disco duro, ya que se encuentran dentro de las carpetas
de instalacin del MPLAB en unos directorios nombrados INC y GLD, es decir, con las mismas ex
tensiones que los ficheros. Dentro de estas carpetas se encuentran los ficheros de definicin para to
dos los modelos de dsPIC. El fichero p30f4013.gld que se encuentra en la ubicacin C:\Archivos
de programa\Microchip\MPLAB ASM30 Suite\Support\gld del disco duro del ordenador. El fi
chero p30f4013.inc est en la ubicacin C:\Archivos de programa\Microchip\MPLAB ASM30
Suite\Support\gld.
I L b o r a to n o l.m c w
Q Laboratoriol.m cp
Q Source Res
j- Practica l.s
Header Files
: p30f4013.inc
Object Files
Library Files
B Linker Scripts
p30f4013.gld
Other Files
Figura L1.8.
329
Al comienzo del programa en ensamblador hay que realizar una llamada al fichero p30f4013.inc.
Tambin es recomendable incorporar la definicin de la palabra de configuracin para el programa,
la cual ser generada en el fichero hexadecimal y cargada directamente por el software de grabacin.
Tambin cabe destacar que el resto de patitas del dsPIC que no se utilizan en el proyecto conviene
configurarlas como entradas digitales.
.include p30f4013.inc
.text
[lobal main
_main:
C.LR PORTD
#0x000F, WO
MOV
MOV
WO, TRISD
#0xFF0AV0
MOV
WUTRISB
MOV
WO,PORTD
MOV
bucle:
CORCON,#IF
BSET
MOV
PORTD.W4
W4,#OxOOOC,W l
AND
w i, #0x0002,m
LSR
W4,#Ox0003,W3
AND
W3.W2
CPSGT
GOTO
W3 MAYOR
W3,W2,W7
SUB
MULTIPLICA
GOTO
W3MAYOR:
SUB
W2.W3.W7
MULTIPLICA:
W7*W7,A
MPY
MOV
ACCAL,W2
MOV
W2.PORTB
MOV
#0x0004, WO
CPSGT
W2AV0
APAGAR
BRA
BSET
PORTD,#Ox8
GOTO
bucle
APAGAR:
BCLR
PORTD,#0x8
bucle
GOTO
.end
MULTIPLICAMOS LA DIFERENCIA
POR SI MISMA PARA ELEVARLA AL CUADRADO
MOSTRAMOS EL RESULTADO POR PORTB
SI EL VALOR ES INFERIOR A 4
APAGAMOS EL AVISO
EN CASO CONTRARIO ENCENDEMOS AVISO
330
RD8
RBO
SO de SALIDAS DIGITALES
RB1
SI de SALIDAS DIGITALES
RB2
S2 de SALIDAS DIGITALES
RB3
S3 de SALIDAS DIGITALES
RDO
RD1
El de ENTRADAS DIGITALES
RD2
E2 de ENTRADAS DIGITALES
RD3
E3 de ENTRADAS DIGITALES
L1.6. G R A B A C I N V EJECUCIN
Para compilar el programa se accede a la opcin Project, Build All. Aparece un mensaje que indica
Build Succeeded en caso de que el programa no tenga errores y se haya generado correctamente el
fichero hexadecimal con extensin .hex que se introducir en la memoria FLASH del dsPIC. El l
timo paso consiste en conectar el equipo PIC School al ordenador mediante el puerto serie y ejecu
tar el programa de grabacin WinPICSOO. Desde este software se programa el dsPIC, siguiendo los
pasos sealados en el apartado Software W inPlC800 del captulo anterior.
Resulta conveniente recordar que a la hora de grabar el programa en la taijeta PIC School, se de
ber colocar el interruptor del circuito de grabacin en la posicin PC para realizar la grabacin por
el puerto serie.
Figura L1.10. Para grabar el programa el interruptor del circuito de grabacin deber situarse en la p o
sicin PC.
Una vez grabado el programa en el dsPIC mediante el botn Programar Todo del programa WinPic800, para ver el programa funcionando deber pasarse el mismo interruptor anterior a la posicin
RUN, es decir a la posicin central. Slo as com enzar a ejecutarse el programa creado.
331
Ahora ya slo falta probar el ejercicio con los perifricos incoiporados en la tarjeta P1C School
y de este modo comprobar que el funcionamiento se corresponde con los objetivos de la prctica.
Ya es posible modificar el valor de los interruptores de la tarjeta PTC School para que se visualicen
distintos valores en los diodos led que se correspondern con la distancia. El dato binario mostrado
en los led ser mayor segn se aumente la diferencia entre el dato introducido por los grupos de 2
interruptores.
Cuando en un grupo de conmutadores se simule la mxima distancia ( l - 1) y en el otro grupo la
mnima (0-0). se encender el led de aviso (RD8) ya que el resultado de la operacin ser mayor de
4. El zumbador dejar de pitar cuando el dato de respuesta vuelva a situarse por debajo de este um
bral. El programa se repite cclicamente.
L1.7. LIBRERA M A TE M T IC A
Adems de las instrucciones matemticas especficas que se han presentado en esta prctica, cabe
destacar que M icrochip ha desarrollado una librera especfica de funciones matemticas y que ade
ms opera con precisin de simple y doble coma flotante segn el estndar IEEE-754. Esta librera
denominada dsPIC30FMcith Library de libre distribucin se suministra compilada, de modo que no
hay acceso para visualizar cmo se desarrollan las funciones matemticas, pero s se pueden utili
zar en los proyectos.
Adems, tiene la peculiaridad de poder llamar a estas funciones desde lenguaje C o desde len
guaje ensamblador. En la Figura L1.12 se muestra una tabla que resume las funciones matemticas
presentes en esta librera y los ciclos de ejecucin que necesita cada una de ellas operando en coma
flotante.
332
G ru po
de F u n d o n e s
F uncin
C iclo s d e e je c u c i n
Suma
122
Resia
124
M ultiplicacin
109
Divisin
361
Cociente
385
Acos
478
Asin
363
Atan
696
Atan2
3206
Cos
3249
Sin
2238
Tan
2460
Cosh
1049
Sinh
525
Tanh
338
Lxp
530
Frcxp
39
Ldexp
44
Log
2889
Log10
3007
Pow
2134
Sqrt
493
Ceil
94
Floor
51
Fabs
Potencias
Funciones de redondeo
Valor absoluto
M odf
151
Fmod
129
Figura L1.12. Tabla con las instrucciones de la librera dsPIC30F Math Library.
NOTA:
En el CD que acompaa al libro podr encontrar los programas de los laboratorios en lenguaje
ensamblador y en C.
jando
a fondo los
temporizadores
de 32 bits
L2.1. OBJETIVOS
Este laboratorio profundiza en el manejo de temporizadores de 32 bits. Para ello, y al igual que se
realizara en el apartado de Simulacin y Programacin de Aplicaciones, se desarrollar un semfo
ro con pulsador. Los objetivos de este laboratorio son los siguientes:
Para implcmentar el semforo con pulsador se utilizarn varios recursos de la tarjeta de desarrollo
PIC School. Por un lado, las salidas de los leds S7 y S5 representarn la luz roja y la luz verde del
semforo respectivamente, cuyo valor ROJO o VERDE tambin se reflejar sobre la pantalla LCD
incluida en la tarjeta.
Por otro lado, el semforo estar dotado con un pulsador que ser el E7 de las entradas digitales
de la placa, con el fin de que un peatn pueda pulsarlo y as el semforo cambie a ROJO para que
los vehculos se detengan.
333
334
Durante 10 segundos, el semforo estar en rojo, para despus pasar a verde durante otros 10 se
gundos, volver a color rojo y as sucesivamente. Esta secuencia slo se interrumpir cuando se ac
tive el pulsador E7 que har que el semforo pse a rojo y comience de nuevo el contaje de 10 se
gundos antes de pasar a color verde.
El esquema electrnico de este laboratorio es sencillo. Por un lado se debe conectar la patita
RAI 1/INT0 a un pulsador de la seccin de Entradas Digitales (E7) de la placa PIC School y por otro
lado, conectar las patitas RDO y RD1 a 2 leds de la seccin Salidas digitales de la placa (S7 y S5).
Para la conexin de la pantalla LCD al dsPIC30F4013, se utilizar el controlador serie SYM 20AA que permite de una forma sencilla, mediante una transmisin UART y utilizando solamente una
patita del controlador dsPIC, mostrar mensajes por la misma. As, simplemente iniciando uno de los
mdulos UART del controlador, podremos enviar mensajes a la pantalla LCD a travs de la patita
U1TX.
El controlador serie SYM 20-AA requiere de las conexiones reflejadas en la Tabla L2.1.
Pin SYM 20-AA
Tabla L2.1.
Pin 1
L6 de PIC School
Pin 2
L7 de PIC School
Pin 3,5
G ND de PIC School
Pin 4,6,8,10,11,12,13
Sin conectar
Pin 7
RF3 de dsPIC30F4()13
Pin 9
Pin 14
Pin 15'
RS de PIC School
Pin 16
Pin 17
L4 de PIC School
Pin 18
15 de PIC School
335
Ntese que deben quedar ciertas lneas de la pantalla LCD sin conectar. As las lneas LO, L1, L2
y L3 quedarn libres sin ningn tipo de conexin, as com o la entrada GND de la pantalla.
A P 17
S A L ID A S D IG IT A L E S
Figura L2.2.
A P 18
E N T R A D A S D IG IT A L E S
Para enviar datos a la pantalla LCD se aplica a la patita U1TX del m dulo UART1 del
dsPIC30F40l3, a 9600 bps, 8 bits de datos, 1 de stop y sin control de flujo, el cdigo ASCII del ca
rcter a mostrar. Previamente es conveniente enviar el carcter OxOOOC que borra la pantalla y co
loca el cursor en la prim era fila y columna de la pantalla.
As para escribir la palabra ROJO, hay que enviar la siguiente secuencia de caracteres en hexadecimal: OxOC, 0 x 5 2 ,0x4F, 0x4A, 0x4F, correspondientes al cdigo de limpiar pantalla, y los cdi
gos ASCII de las letras R, O, J y O respectivamente.
L2.4. C O N S T R U C C I N DEL P R O G R A M A
La programacin del controlador se realizar desde el entorno de desarrollo MPLAB IDE. Puede
elegir entre hacer el desarrollo en lenguaje ensamblador o lenguaje C.
El program a en lenguaje ensam blador se encuentra divido en tres partes principales. La pri
m era m uestra la rutina de atencin a la interrupcin externa, que sim plem ente hace que el se
mforo se ponga en rojo y vuelva a com enzar la secuencia del temporizador. Adems m uestra el
mensaje ROJO en la pantalla LCD.
336
.global _main
.global INTOInterrupt
.global_T3Intcrrupt
__INTOInterrupt:
DSI #3 :V
BCLR IFS0,#0
MOV #0x0001;wo
MOV WO,PORTD
CLR TMR2
CLR TMR3
MOV #OxOGOC,WO
CALL TRANSMITE
MOV #0x52,WO
CALL TRANSMITE
MOV #0x004F,W0
CALL TRANSMITE
MOV #OxO()4A,WO
CALL TRANSMITE
MOV #0x0O4F,W0
CALL TRANSMITE
RETFTE
__T3Interrupt:
BCLR IFS0,#7
BTSS PORTD,#0
GOTO ROJO
VERDE:
MOV #0x0002,W0
MOV W0,PORTD
MOV #OxOOOC,WO
CALL TRANSMITE
MOV #0x0056,W0
CALL TRANSMITE
MOV #0x0045,W0
CALL TRANSMITE
MOV #0x0052,W0
CALL TRANSMITE
MOV #0x0044,W0
CALL TRANSMITE
MOV #0x0045,W0
CALL TRANSMITE
GOTO FINAL
ROJO:
337
. "
*
;Letra0
;Retomo de la interrupcin
La tercera parte se corresponde con el programa principal, que realiza la incializacin de los pe
rifricos y despus entra en un bucle hasta que se origine alguna interrupcin.
.tcxt
_main:
;nicializacin del puerto D
CLR
MOV
MOV
MOV
MOV
CLR
PORTD
#0xFCF0, WO
WO, TRISD
#0x000 LWO
WO,PORT)
WO
IPC1,#I2
PC1,#3
IPC1, #14
IFS0,#7
ifeCO, #7
338
BSET T2CON, #3
BSET T2CON, #15
'configuracin IJART1
CLR 1BRG
MOV #0x0019,WO
MOV W0.U1BRG
MOV #0x0510, WO
MOV WO, IJISTA
MOV #0x8020, W0
MOV W0, U1MODE
MOV
CALL
MOV
CLL
MOV
CALL
MOV
CALL
MOV
CALL
#OxOOOC,WO
TRANSMITE
#0x0052,W0
TRANSMITE
#0x004F,W0
TRANSMITE
#0x004A ,W0
TRANSMITE
#0x004KW0
TRANSMITE
; Limpia pantalla
; Enva R
; Enva O
; Enva J
; Enva O
PROGRAMA PRINCIPAL
PRINCIPAL:
;Refrescamos Perro Guardian
CLRWDT
;mientras esperamos que se origine alguna interrupcin
GOTO PRINCIPAL
TRANSMITE:
BTSS U 1STA,#TRMT
BRA TRANSMITE
MOV W0,U1TXREG
RETURN
.end
include up30f4G13.hM
void attribute (( interrupt )) _T3Intermpt(void)
(
IFS0bils.T3TF = 0;
if (PORTDbits.RDO = I)
PORTD - 2;
else
PORTD= I;
}
voidattribute (( interrupt )) JNTOInterrupt(void)
(
IFSObits.INTOIF = 0;
PORTD= I;
TMR2 = 0;
TMR3 = 0:
; }
int main(void)
-'Jr i ' \ , . . .
'
'
'
T2CONbits.TON = 1;
//Inicializacin del Puerto D
PORTD = 0:
TRTSD = OxFCFO;
//Inicializacin de la rutina externa INT0
in c o = 1;
//Com enzo semforo
PORTD = 1;
//Programa principal
whiled)
asmf'elrwdt"):
return(O);
}/
339
340
Una vez compilado el programa, se procede a su grabacin en la placa PIC School, de igual
manera que en captulos anteriores. Debe tenerse especial cuidado a la hora de configurar en la
pestaa Config del programa WinPic800, y seleccionar como fuente primaria del reloj X T x/P L L
4X - X T With 4X PLL.
Adems de las conexiones anteriormente descritas para el controlador LCD serie, se debern co
nectar los siguientes perifricos de la placa PIC School, segn la Tabla L2.2.
Tabla L2.2.
RA 1
E7 de E. DIGITALES
RDO
S7 de SALIDAS DIGITALES
RD1
S5 de SALIDAS DIGITALES
RF3/U1TX
Una vez cargado el fichero hexadecimal en el programa WinPic800, habr que configurar en la pes
taa Config del programa WinPicSOO el reloj de la placa PIC School. Para ello, una vez cargado el
fichero .hex, seleccionar de la lista desplegable Primary Oscillator la opcin X T W/PLL 4X - X T
cristal oscillator with 4X PLL. Tras llevar a cabo esta operacin, pulsando la opcin Grabar Todo,
se programar el controlador con la aplicacin del semforo.
341
Al pasar el interruptor de la placa PIC School a modo RUN, comenzar la ejecucin del programa.
El led S7 de la placa que simula la luz roja de un semforo, se encender durante los primeros
10 segundos. A continuacin, se encender el led S5 que simula la luz verde del semforo durante
otros 10 segundos. De manera simultnea, aparecern en pantalla los mensajes ROJO y VERDE.
Figura L2.4. Ejecucin del programa semforo sobre la placa PIC School.
LABORATORIO
.....................
'* ; ; 7
M ! 1 !!!!!! 1'
analgico/digital
de alta precisin
L3.1. OBJETIVOS
El siguiente laboratorio describe cmo realizar una conversin analgico/digital de 12 bits optimi
zada empleando el dsP!C30F4013. Los dsPIC presentan mayor resolucin de conversin que los microcontroladores de M icrochip, ya que stos son de 8 y 10 bits en funcin del modelo. Adems, la
velocidad de conversin tambin se ha elevado. Estas mejoras unidas a la capacidad de clculo DSP
van a permitir optimizar notablemente los resultados de las conversiones A/D. Los objetivos de es
ta prctica son:
En esta prctica se van a utilizar las ventajas del conversor analgico/digital de los dsPIC unido
a su capacidad de clculo, ya que se va a muestrear 10 veces una seal en el mnimo tiempo posi
ble para calcular el dato promedio de la conversin.
Para un microcontrolador resultara muy costoso tener que promediar 10 seales, y si el dato fue
se alto, por ejemplo 1000, posiblemente se utilizara una memoria externa para almacenar las mues
tras y posteriormente ir leyndolas, sumndolas y finalmente realizar una costosa operacin de di
visin para un m icrocontrolador M CU. O btener datos prom edios de seales analgicas es
interesante para filtrar posibles ruidos o perturbaciones que puedan influir en un instante concreto
en el valor de salida de un sensor analgico.
Gracias a la capacidad de clculo de los dsPIC, es posible emplear una frmula estadstica que
permite ir obteniendo el dato promedio de un conjunto de datos sin necesidad de tener que almace
narlos para realizar el promedio. La frmula es:
M edia_actuat = ((M ediaanterior * (Contador - 1)) + D ato_Nuevo) / Contador
343
344
En la hoja de clculo de la Figura L3.1 se puede apreciar cmo la media aritm tica obtenida
como el sumatorio de todas las muestras dividido por el nmero de ellas, coincide con el dato fi
nal obtenido em pleando la frm ula estadstica. Esta frmula implica el empleo de m ultiplicacio
nes y divisiones de 16 bits, y debe realizarse a gran velocidad, no siendo aceptable su duracin
en un m icrocontrolador MCU.
C ontador
D ato N u evo
M edia A ctual
88
88
12
50,00
300
133,33
453
213,25
452
261,00
451
292,67
213
281,29
1025
374,25
2096
565,56
10
4000
909,00
Sumatorio
9090
909
L3.2. DE S C R IP C I N DEL LA B O R A TO R IO
Para simular este ejercicio se utilizar un potencimetro de la tarjeta PIC School que servir para
introducir una seal analgica variable entre 0 V y 5 V y el dato resultado del mencionado clcu
lo estadstico se visualizar en modo binario por la pantalla LCD. Aunque la conversin analgi
co/digital es de 12 bits, en pantalla se mostrarn los 16 bits del registro donde se almacenar el
resultado, por eso los cuatro prim eros bits siem pre sern cero. El potencim etro utilizado se
corresponde con el nombre P1 del grupo ENTRADAS ANALOGICAS de la tarjeta y su seal es
introducida en la patita ANO del dsPIC.
En el organigrama de la Figura L3.2 se observan los pasos que hay que seguir para realizar
correctamente este laboratorio. Tras realizar las configuraciones necesarias en el dsPIC para con
figurar correctamente patitas de entrada y salida y la conversin A/D se realizan las 10 muestras y
el valor del resultado es mostrado en la pantalla LCD. El programa finaliza tras mostrar este re
sultado, permaneciendo en un bucle infinito. Al igual que sucede con un m icrocontrolador MCU,
la estructura general de un programa con dsPIC debe ser un bucle que se repite indefinidamente
ejecutando un conjunto de tareas o un conjunto de acciones a realizar y que una vez terminadas no
requieran ninguna otra ejecucin. En este ltimo caso, hay que finalizar el program a en un bucle
infinito de espera o introduciendo el dispositivo en modo bajo consumo, el cual detiene la CPU y,
por lo tanto, finaliza la ejecucin de ms instrucciones.
345
INICIO
Configuraciones de
Entrada y Salida
Configuracin d e .
Ir
in r n i A n -
'
NO
Aplicar la Frmula
estadstica
Muestra del
resultado en ia
pantalla LCD
Figura L3.2.
El esquema electrnico que resuelve esta prctica utiliza el dsPTC30F4013 correctamente alimen
tado y con su circuito de Reset y oscilador, un potencim etro ajustable con vstago y la conexin
a la pantalla LCD descrita en el Laboratorio 2, Utilizando tempo rizadores de 32 bits. Las cone
xiones necesarias para el dsPTC son las mismas que en la anterior experiencia y se vuelve a utili
zar un circuito oscilador con cuarzo de 4 M Hz ya que es el que hay en la tarjeta PIC School. Cuan
do se realizan conversiones analgico/digitales es conveniente que la impedancia de salida del
sensor o del potencimetro que se va a utilizar no supere los 10 K2. Por esta razn, la resistencia
interna del potencim etro utilizado en esta prctica es de 1 KQ. Deber conectarse el potenci
metro en sus extrem os a seales de 0 V y 5 V para obtener una tensin variable entre estos dos
valores segn se mueva el vstago. Asimismo, se utilizar la patita U1TX para enviar a la pantalla
LCD el resultado.
346
Figura L3.3.
L3.4. C O N S T R U C C I N DEL P R O G R AM A
C 'je i * s ,v J S h j! ............................................................
_ Cnabjt 5 1
_ . Cf. .a .
CPU&63pO,Vli>Mrt
v,
w:
Udoge
S-ajccsr VdtVieh.AVscfcYrli
SinfcioHode! CervwwsnMoe
*153* Swcs
SanPafcc.
v-;
1Iwsir* irrc
_.vj
13X
0
*Pr 2
V Pr I
= 3
* E -w :
CorrO5oi/lrt
Pirz'iy.
CWJIOcOcctfw.
Cyt'ru e
in atte lMfluc<\SlTL
i IClc.l
Corr/9cv*iPflii^i
OockSowse
2 **.5 *T q >
; u c ec )
V ;|
Snele A N ea lno.1: vR f-
y ,:
a r t 3 P ci. l-W
itr e c k A P o . I w J : 'ANO
A.')
*
V
L_.
Figura L3.4.
347
Una vez configurado el mdulo, se generar el cdigo fuente necesario para dicha inicializacin
a travs del men Code Generation de la herramienta Visual Initializer.
El programa tambin utiliza el mdulo UART1 para enviar datos a la pantalla LCD. La confi
guracin de dicho mdulo no se realizar a travs de la herram ienta Visual Initializer, ya que, se cre
ar un fichero con el cdigo fuente correspondiente a la visualizacin de datos por el LCD total
mente aparte del programa que realiza la conversin. As, dicho fichero podr utilizarse en cualquier
otra prctica sin tener que reescribir el cdigo correspondiente y sin tener que volver a inicializar el
mdulo dentro de la herramienta Visual Initializer.
Tras esta inicializacin, el programa entra en un bucle infinito hasta que se d la interrupcin ge
nerada por el Conversor Analgico Digital, que se encargar de.aplicar la frmula estadstica y mos
trar los datos en pantalla.
.include ';p30f40!3.inc"
.section
.ndata
eontador:
.hword 0x0800
media:
.hword 0x0802
dato_nuevo; .hword 0x0804
.section .rcxt
.global ADCInterrupt
__ADCInterrupt:
BGLR
1FS0.#ADIF
MOV
ADC BUFO,W0
MOV
W0,dato_nuevo
INC
contador
DEC
eontador. WREG
MUL
media
MOV
dato_nuevo,W5
ADD
W2,W5,W3
MOV
contador,'W4
REPEAT #17
DIV.U
W3.W4
MOV
WO,media
MOV
#OxOOOA ,W4;
MOV
conta dor,W0
CPSEQ
W4,W0
RETFIE
MOV
medi a, W0
MOV
w0,w2
CALL
W2TOLCD
MOV
#0x0000,W 0
MOV
W0,eontador
MOV
W0,media
RETFIE
.global main
348
..mam:
CALL _Visua}lnitialization
MOV
#0x0000, WO
MOV
W0,dato_nuevo
MOV
W0,media
MOV
W0,contador
bucle'
;Bucle infinito
goto
bucle
cnd
Figura L3.5.
Para las conexiones de este laboratorio resulta altamente recomendable aprovechar el conexionado
del controlador serie LCD de la prctica anterior. As, el resto de conexiones tan slo sern las in
dicadas en la Tabla L 2 .1.
Tabla L2.1.
ANO
P1 de ENTRADAS ANALGICAS
RF3/U1TX
Adems debern conectarse a +5v y a GND las conexiones de referencia del potencimetro P l
de ENTRADAS ANALGICAS.
L3.6. G R A B A C I N Y EJECUCIN
Para probar el experimento se puede abrir el proyecto que se encuentra en la carpeta LABORA
TORIOS, LABORATORIO 3 del CD del libro o desarrollar un proyecto nuevo siguiendo los pa
sos comentados en la primera prctica y con la ayuda del fichero laboratorio2.s, que se encuentra
en la misma carpeta del CD y contiene el cdigo fuente del ejercicio. Tras escribir el programa, hay
que com pilarlo para obtener el fichero hexadecimal y posteriormente ejecutar el software de gra
349
bacin WinPIC800 para grabar la memoria de programa del dsPTC empleando el equipo PIC School conectado al puerto serie del ordenador.
Una vez grabado el ejercicio en el dsPlC modelo 30F4013, se coloca el interruptor del circuito
de grabacin en modo RUN para comenzar su ejecucin. En la pantalla LCD aparecer un dato bi
nario que mostrar los 16 bits, de los cuales, los ltimos 12 muestran el resultado de la conversin
A/D tras realizar la frmula matemtica. Segn se cambie de posicin el valor del potencimetro P 1
se observar cmo vara el resultado mostrado en la pantalla LCD. El resultado binario mostrado en
los diodos ir creciendo desde 000000000000 hasta 111111111111, a medida que el valor de la se
al analgica de entrada pasa desde 0V hasta 5V.
NOTA:
En el CD que acompaa al libro podr encontrar los programas de los laboratorios en lenguaje
ensamblador y en C.
'
_:' '--:
.........
,
'
.
'......... :
..
-
S iS
iv S
encriptada
con el USART
L4.1. OBJETIVOS
En esta prctica se propone comunicar un dsPIC con un ordenador empleando el puerto serie del PC.
Se utiliza el hardware de comunicaciones USART disponible en el dsPIC que permite realizar este
lipo de comunicacin sin emplear recursos de la CPU. Los objetivos de la prctica son:
Configurar correctamente el dsPIC para el envo y recepcin de datos por el puerto serie.
Utilizar el Motor DSP para realizar una encriptacin de los datos en las comunicaciones.
Para visualizar los datos enviados desde el dsPIC en el PC se puede utilizar cualquier programa
Hypcrtcrminal de comunicaciones, como el software Hyperterminal que se encuentra en la carpeta
Accesorios/Comunicaciones del sistema operativo Windows.
Aprovechando las posibilidades matemticas de los dsPIC se pueden desarrollar mecanismos de
encriptacin de comunicaciones mucho ms avanzados que con un microcontrolador MCU. Con un
microcontrolador, para codificar un dato rpidamente se le puede sumar o restar una cantidad fija,
que slo sea conocida por el equipo con el que se establece comunicacin.
Por ejemplo, si se quiere enviar el carcter ASCII z\ correspondiente al cdigo ASCII 122, se
le puede sumar una cantidad de forma que al transmitir el dato no pueda ser reconocido. El equipo
receptor deber restar la misma cantidad al recibir el dato para desencriptarlo y convertirlo en un ca
rcter inteligible. Esto se aplicar a todos los datos transferidos. Sin embargo, un simple desplaza
miento de datos a travs de sumas y restas es una proteccin muy sencilla, que puede ser fcilmen
te descubierta por un programa que pruebe a restar y sumar cifras hasta localizar cadenas de
informacin vlidas.
Con un dsPIC es posible com plicar mucho la encriptacin ya que las operaciones matemticas
que se pueden ejecutar a gran velocidad son mucho ms complejas que las sumas o restas de un mi
crocontrolador MCU. Por ejemplo, podemos elevar al cuadrado un dato, dividirlo entre una canti
dad y despus enviar dos datos, el cociente y el resto de la divisin. Para poder desencriptar esta
informacin, habra que conocer que hay 2 datos en transmisin por cada dato enviado, que est
351
352
previamente elevado al cuadrado y luego desglosado en cociente y resto de una divisin, que en el
caso de esta experiencia tendr como divisor el valor 100.
En la aplicacin el dsPIC esperar la recepcin de un carcter ASCII por el puerto serie. Una vez
recibido el dato, lo reenviar hacia el PC a modo de ECO y hacia la pantalla LCD, pero aplicando
antes una codificacin para encriptar los datos. Las comunicaciones se realizan a una velocidad de
9600 baudios, 8 bits de datos y con 1 bit de stop. Estos parmetros de la comunicacin hay que te
nerlos en cuenta a la hora de configurar el dsPIC, ya que la comunicacin por el puerto serie es de
tipo asincrono y es necesario que los dos equipos conozcan previamente estos parmetros.
Figura L4.1.
353
1 hardware necesario para este programa se encuentra en la tarjeta PIC School. La conexin con
los perifricos es muy sencilla, ya que sobre el circuito conversor serie a LCD del laboratorio ante
rior slo hay que aadir una lnea para recibir los datos del PC, a travs de la lnea U1RX que se co
necta a la patita RxD del interfaz RS-232 de la placa PTC School.
Las patitas, en las que se encuentran las salidas hardware de la USART, sern las utilizadas en
este laboratorio. Para probar las comunicaciones y poner en marcha la prctica hay que conectar la
tarjeta PTC School al ordenador empleando un cable para el puerto serie que disponga de un termi
nal DB9 hembra en un extremo y un DB9 macho en el otro. Los conectores tipo DB9 son el estn
dar ms extendido en las comunicaciones por el puerto serie. Es el mismo tipo de cable que se uti
liza para programar los dsPIC a travs del programa WinPIC800. As, se usa el mismo cable de la
siguiente manera: primero se programa el microcontrolador y una vez programado, en segundo lu
gar, antes de pasar a modo RUN, se cambia el cable de posicin en la PIC School, conectndolo
al interfaz RS-232 para poder observar el funcionamiento de dicho laboratorio.
El cdigo fuente del programa se encuentra en el CD del libro dentro del directorio LABORATO
RIOS y en el subdirectorio LABORATORIO 4. El fichero se denomina LABORAT0RI04.S. Al
principio es necesario incluir el fichero de definicin p30f4013.inc que contiene todos los bits y re
gistros de control nombrados.
Al comienzo del programa la configuracin que hay que realizar slo afecta al hardware de las
comunicaciones y a las patitas R J X y T1X del dsPIC. La primera de ellas debe configurarse como
entrada digital para poder recibir los datos y la segunda como salida. Es necesario acceder a los re
gistros de control de la USART para activar la comunicacin a la velocidad adecuada.
354
.include "p30f4013.incM
.global __U 1RXliiterrupt
L1RX Interrupt:
BCLR
IFS0,#U1RXIF ;
MOV
U 1RXREG,W7 :
MPY
W7*W7,A
MOV
ACCAL,W2
MOV
#0x0064,'W3
REPEAT #17
DIV.U
W2jW3
CALL
TRANSMITE
MOV
W 1AVO
CALL TRANSMITE
RETFE
.global _ main
_main:
BSET
CORCON,#OxO
CALL
INCIAUART
bucle:
CLRWDT
bucle
GOTO
NICIAUART:
CLR
U1BRG
MOV
#0x0019,'W0
MOV
W0U1BRG
MOV
#0x8000, W0
MOV
WO, Ul MODE
MOV
#0x0510, WO
MOV
WO, U1STA
MOV
#0x8020; WO
MOV
WO. Ul MODE
MOV
#0x0200, WO
MOV
WO, IECO
CLR
IEC1
CLR
IEC2
RETURN
TRANSMITE:
BTvSS
U1STA,#8
BRA
TRANSMITE
MOV
W0,U ITXREG
RETURN
.end
Figura L4.3.
355
Una vez configurado el chip, el programa queda a la espera de recibir un nuevo carcter por el
puerto serie, evento que es detectado por la USART. Cuando llegue el nuevo dato, se descarga y se
aplica el algoritmo de cifrado para reenviarlo. Hay que destacar que la comunicacin es full-duplex,
de modo que si se recibe un nuevo dato mientras se est enviando la respuesta anterior tambin es
almacenado en el buffer de recepcin de la USART.
La conexin de los perifricos es bien sencilla. M anteniendo las conexiones del adaptador serie al
LCD del ejercicio anterior, slo se debern realizar las conexiones reflejadas en la siguiente tabla y
que pueden apreciarse en la Figura L4.2.
Pin del d sP IC 30F 4013
RF2/U1RX
KB /U 1TX
Una vez abierto el proyecto LABORATORIO 4 que se encuentra en el CD del libro y tras compilar
y grabar el programa en la memoria del dsPIC mediante el uso de la tarjeta PIC School y el softwa
re WinPIC800, se deber ejecutar un programa de comunicacin en el PC para poder enviar datos
por el puerto serie y recibir las respuestas del dsPIC. A modo de ejemplo, se muestran a continua
cin los pasos necesarios para probar el ejercicio con el programa Hyperterminal de Windows, que
se encuentra en el men Accesorios/Comunicaciones. Recordemos que una vez pasado a modo
ktRUN deberemos cam biar el cable serie utilizado para la grabacin del conector donde se en
cuentra al conector del interfaz serie RS-232.
Descripcin de
\<x
conexin
Figura L4.4.
Aceptor
| [
Cancele?
Tras ejecutar el programa Hyperterminal hay que configurar una nueva conexin, para lo cual el
programa solicita un nombre, y escoger un icono. A continuacin, aparecer otra pantalla en la que se
escoge el puerto COM del PC con el que se quiere comunicar con el dsPIC. Es necesario seleccionar
un puerto COM que est libre, es decir, que no est siendo utilizado por algn otro dispositivo hard
ware conectado en el ordenador. En la pantalla que se muestra en la Figura L4.5 se ha escogido el
356
directo C0M1
-parta (34;
|91
Nmero de
telefona
Conectar usando-
Aceptar
j |
C^xetar
B is de datos 18
Control de Rupc [
Restaurar predetenroadre
Aceptar j
[ Cancelar )
Apicar
Figura L4.6. Pantalla de configuracin del puerto serie en el ordenador. Hay que escoger los mismos
parmetros que los seleccionados en la USART del dsPIC.
Figura L4.7.
357
Programa Hyperterminal en ejecucin. Las tedas pulsadas sern enviadas hacia el dsPIC
y los caracteres recibidos se mostrarn p o r la pantalla.
ficheros hexadecimales a la memoria FLASH del dsPIC. Por esta razn, si se va a utilizar el mismo
puerto serie que el WinPlCSOO para probar posteriormente el programa con el Hyperterminal, el soft
ware WinPICBOO debe estar cerrado. De no ser as, el pueito serie estara controlado por este otro pro
grama y no se podra entrar en comunicacin desde el Hyperterminal.
Tras grabar el dsPIC, se pulsar el botn de Reset para comenzar la ejecucin de la experiencia.
Al teclear un carcter en el programa Hyperterminal de Windows se reciben dos caracteres en la
pantalla del ordenador y en la pantalla LCD, que es un resultado ECO del carcter enviado pero encriptado. Se puede probar a realizar manualmente la operacin de desencriptacin y as comprobar
que las operaciones son realizadas correctamente por el dsPIC. Todo carcter ASCII recibido tiene
un valor asignado entre 0 y 255 que puede ser consultado en una tabla estndar de cdigos ASCII o
en el programa Mapa de Caracteres de las Herramientas del sistema operativo Windows.
Figura L4.8.
Fotografa de la PIC School conectada al puerto serie de un ordenador y con el Laboritorio 4 en ejecucin.
358
NOTA:
En el CD que acompaa al libro podr encontrar los programas de los laboratorios en lenguaje
ensamblador y en C.
' ;
ORATORIO
: ' ?j m -m
Control de
un motor de CC
PWM
L5.1. OBJETIVOS
Este laboratorio estudia cmo emplear la capacidad del dsPlC para generar seales PW M y regular
la velocidad de funcionamiento de un motor de corriente continua. Se proceder a configurar el m
dulo OC1 del dsPIC 30F40l3 para generar una seal cuadrada que aplicada a un chip amplificador
regule la velocidad de funcionamiento de un motor. El dsPIC30F4013 pertenece a la familia de pro
psito general de los dsP!C30F. Sin embargo, existe una familia especfica que dispone de un hard
ware adicional para el control de motores. Estos dispositivos, adems de generar seales PW M pa
ra control bsico de motores de corriente continua, pueden controlar motores ms avanzados, como
los motores Brushlcss y los motores de induccin de corriente alterna.
Microchip ha creado una serie de diseos de referencia para el control de motores de alto rendi
miento empleando la familia dsPIC de control de motores. Estas aplicaciones realizan control vecto
rial de un Motor de Induccin de Alterna, denominado por las siglas ACIM, y control sin sensores de
un Motor de Continua sin escobillas, siglas BLDC. Estas aplicaciones son gratuitas y se encuentran
descritas completamente en las notas de aplicacin AN908 y AN901 de Microchip. Pueden descar
garse desde www.microchip.com en la seccin correspondiente a las Notas de Aplicacin para dsPIC.
360
Gracias a las familias dsPIC30F y dsP33F especficas de control de motores pueden resolverse
aplicaciones de control mucho ms complejas que las habituales con cualquier otro microcontrolador MCU. Como ejemplo, se muestra en la Figura L5.2 el algoritmo de control vectorial que es de
sarrollado por un dsPIC para gestionar un motor AC de induccin. Hace falta una gran capacidad
de clculo para resolver este algoritmo de control en tiempo real ya que dispone de lazos de posi
cin, de velocidad, elementos de control Proporcional-Integral, etc. Para poner en funcionamiento
los ejemplos de aplicacin que facilita Microchip para control avanzado de motores, est disponi
ble el sistema de desarrollo de control de motores dsPICDEM M CI de Microchip. (Figura L5.1).
Figura L5.2.
361
dsPIC a un motor, puesto que no tiene capacidad para sum inistrar la corriente necesaria a travs
de sus patitas. H acer esto estropeara el dsPIC. Es necesario utilizar un driver que acte como
amplificador, convirtiendo las seales TTL generadas por el dsPC en seales am plificadas en co
rriente adecuadas para el manejo de un motor. El driver L293D tiene una capacidad de carga de
0,6 A, mucho m ayor que los 20 mA suministrados por cada patita de salida de un dsPIC. Otra
ventaja de em plear este driver es que la tensin aplicada al motor puede ser independiente de la
tensin de alim entacin de la electrnica de control que se introduce a travs de la patita +V de
la zona DRIVER 4 CANALES 0,6 A de la placa PIC School. En el presente laboratorio se utili
zar la fuente de alim entacin comn para toda la placa y, por esta razn, esa patita perm anece
r desconectada.
AP18
ENTRADAS AL DRIVER
Figura L5.4.
ENTRADAS DIGITALES
362
Tabla L5.1.
Pin d el d sP IC 3 0F 4 0 1 3
Elem ento de la P IC S C H O O L
RDO/O1
RFO
EO de ENTRADAS DIGITALES
RF1
El de ENTRADAS DIGITALES
En primer lugar el programa configura el mdulo O C l comparador de salida. Al igual que se indi
c en captulos anteriores, se utilizar la herramienta Visual Initializer para llevar a cabo esta tarea.
CP U Idle O peration
E n a b le o n S tartup
Timer C lo c k Prescale: | 1 :2 5 6
v :
C o ntinue
G a te d T im e A c c u m u la tio n
v
Postscale:
Timer Period:
1 ,0 0 0 0 6 4 0 0 4 0 9 ; (K H z )
(msec)
(Calc.)
Interrupt
E n a b le Interrupt o n S ta rtu p
Interrupt Priority:
Help
Figura L5.5.
OK
C a ncel
A p ply
El primer paso ser configurar el circuito del reloj y colocar un reloj tipo XT w/PLL 4X a 4 MHz.
A continuacin, se configura el temporizador Timer2 estableciendo los parmetros recogidos en la
Figura L5.5, es decir, habilitarlo al inicio (Encible on startup), pre-cscaler de 1:256 y un perodo
de 1 milisegundo. Y por ltimo, segn recoge la Figura L5.6, se proceder a configurar el mdulo
O C l, estableciendo el Timer2 como elemento de con taje, modo de operacin PW M M ode fa u lt pin
disabled y cargando en OC1R el valor 7000 y en O C 1RS el valor FFFF.
363
0C2
; 0C3
: 0C4
:-V:
Continue
OCIR (hex):
'Vj
:
0C1RS (hex):
Interrupt Priority:
Help
Figura L5.6.
OK
Cancel
Apply
Una vez configurados los elementos, se inicia la construccin del programa, que simplemente,
llamar a la rutina de inicial izacin de los componentes, despus configurar las patitas RFO y RF1
para que lean los valores de los interruptores EO y E l y, en funcin de su estado, asignar un valor
u otro al registro OC1RS, que har que se generen distintas seales de salida y, por lo tanto, distin
tas velocidades en el motor.
A continuacin, se presenta el cdigo fuente comentado correspondiente al programa que reali
za la funcin descrita.
CALL
MOV
MOV
MOV
MOV
MOV
MOV
COMPRUEBA:
BTSC
GOTO
BTSS
GOTO
GOTO
ROI UNO:
BTSS
GOTO
_VisualInitialization
#0x0003.WO
W0,TRISF
#0x0,WO
W0,ADPCFG
#0x0100, WO
W0.PR2
PORTF,#RFI
RD1.UNO
PORTF,#RFO
m a r c h a _ c>;r o
MARCHAJUNO
PORTF,#RFO
MARCHA_DOS
;Comprueba E0 cuando El es 1
;Velocidad 2
364
GOTO
MARCHA CERO:
MOV
MOV
GOTO
MARCHA_UNO:
MOV
MOV
GOTO
MARCHAJDOS:
MOV
MOV
GOTO
MARCHA_TRES:
MOV
MOV
GOTO
.end
MARCHA.TRES
;Velocidad 3
#0x0,W0
WO,OC1RS
COMPRUEBA
;Mueve 0 a OC1RS
;Ia velocidad ser 0
;Compmeba interruptores
#0x0030,W0
WO,OC1RS
COMPRUEBA
;Mueve a OC1 RS 30
; Velocidad baja (mximo 100)
;Comprueba interruptores
#0x0080,W0
WO,OC 1RS
COMPRUEBA
;Mueve a OC1RS 80
;velocidad alta
;Comprueba interruptores
#0x0100,WO
WO,OC1RS
COMPRUEBA
Al mover 0x0100 a PR2, para conseguir distintas velocidades, se carga el registro OC1RS con
valores inferiores c iguales a dicho valor. As, para un valor 0 el motor no se mover y, sin embar
go, para un valor 0x0100, el motor ir al mximo de revoluciones. Para cambiar el giro del motor,
podra jugarse con la conexin E4 del DRIVER 4 CANALES y, si en vez de conectarlo a tierra, se
conecta a un interruptor (por ejemplo E3), accionando dicho interruptor en un sentido u otro podr
cambiarse el giro del motor.
Figura L5.7.
365
NOTA:
En el CD que acompaa al libro podr encontrar los programas de los laboratorios en lenguaje
ensamblador y en C.
L6.1. OBJETIVOS
Este laboratorio aborda la tarea de resolucin de una ecuacin tpica de filtrado de seales. Concre
tamente resuelve la ecuacin general para filtros FIR representada en la Figura L 6 .1.
Para introducir los coeficientes de la ecuacin general se utilizar el mdulo UART del dsPIC con
el que se introducen los datos desde el teclado del ordenador. Cada uno de estos coeficientes se co
rresponde con cada uno de los bytes transmitidos por este mdulo de comunicacin.
La aplicacin, mientras recibe todos sus argumentos, ir mostrando en todo momento el valor
acumulado de las operaciones realizadas por la pantalla LCD. Por cada dato recibido por el puerto
serie se mostrar en la lnea superior de la pantalla el valor del dato recibido as como el de la par
te baja del acumulador en el que se almacena el resultado yn de la ecuacin.
Los datos debern enviarse de forma ordenada, es decir, en primer lugar se enviar b, a conti
nuacin x, ms tarde bj, xn.i, b2, y por ltimo x_2.
367
368
Cada vez que se reciben dos operandos se efecta la suma de ambos y se acum ula el resul
tado en el A cum ulador A, m ostrando el valor de sus 16 bits de menos peso en la parte inferior
de la pantalla LCD. En la parte superior se visualizar el ltimo dato recibido por el puerto
USART.
El Acumulador A consta de 40 bits. La pantalla LCD tiene la posibilidad de mostrar 32 caracte
res. Para poder visualizar los 32 bits de menos peso del acumulador hay que activar una interrup
cin externa que origina que se visualicen estos bits por la pantalla LCD. Para distinguir que los da
tos mostrados en pantalla se corresponden con los 32 bits de menos peso del acumulador o con el
ltimo byte recibido y el contenido de los 16 bits de menos peso tambin del acumulador, cuando
se visualice nicamente el acumulador, parpadear el cursor.
Inicializacin del
mdulo UART
______I _____
Recepcin de un
byte b, del mdulo
UART
____________
_____
Visualizadn del
dato recibido y la
parte baja del
Acumulador A
Recepcin del
segundo byte x
Activacin
interrupcin
extema INTO
\/
Muestra los 32
bits de menos
peso del
Acumulador A
Multiplicacin y
acumulacin
(MAC) de b, * x
T
Visualizacin del
dato recibido y el
valor del
Acumulador A
El laboratorio 6 hace uso de varios perifricos para su funcionamiento. Por un lado se encuentra la
pantalla LCD que visualizar los resultados y que requiere del controlador serie. P or otro, se re
quiere de la conexin al puerto USART a travs del interfaz RS-232 para la recepcin de los ope
randos de la ecuacin.
Finalmente, esta aplicacin requiere un interruptor de entrada para activar la interrupcin encar
gada de mostrar los 32 bits de menos peso del Acumulador A. El esquema electrnico correspon
diente a estas funciones se muestra en la Figura L6.3.
35
R A 1 1 < 0 - Z --------------------- 1
X- 2
RF2/U1RX
369
* 4
2 -K
*" 5
CANAL SERIE
ENTRADAS DIGITALES
Para llevar a cabo las conexiones descritas en el esquema de la Figura L6.3, hay que interconectar
adecuadamente los perifricos indicados en la Tabla L6.1 correspondientes a la tarjeta de desarro
llo P1C SchooL
La aplicacin utiliza el controlador serie a LCD, cuya adaptacin ya ha sido comentada en la
boratorios anteriores.
Tabla L6.1.
RF2/UIRX
RF3/U1TX
RA1 l/INTO
E7 de ENTRADAS DIGITALES
Para la programacin del dsPC se ha creado un proyecto que contiene dos ficheros fuente princi
pales. El fichero lahom torio.s se corresponde con el cdigo principal del programa y, por otro la
do, el fichero LCD.s contiene las rutinas necesarias para manejo del LCD de la PIC School a travs
del adaptador serie a LCD.
A continuacin, se describen las paites principales del fichero laboratorio.s que dispone de las
rutinas principales de la aplicacin. El fichero LCD.s contiene rutinas ya explicadas en laboratorios
anteriores.
370
.include "p30f4013.inc"
global__JNTOInterrupt
; Tratamiento de la interrupcin INTO
_NTOlnterrupt:
BCLR
CALL
CALL
MOV
CALL
MOV
CALL
RETFI
IFS0,#0
LIMPIA
PARPADEA
ACCAH,W2
W2TOLCD
ACCAL,W2
W2TOLCD
La primera parte del cdigo se corresponde con el tratamiento de la interrupcin externa INTO.
Al activar el pulsador E7, se provoca una interrupcin que muestra en la pantalla LCD los 32 bits
de menos peso del Acumulador A.
.global__U1RXInterrupt
U1 RXInterrupt:
BCLR
IFS0,#U 1RXIF
MOV
U1RXREG,W2
BTSC
W3,#0X0
GOTO
OPERA
MOV
W2.W4
MOV
#0X0001,W3
GOTO
MOSTRARPANTALLA
OPERA:
MOV
W2,W6
MAC
W4*W6,A
CLR
W3
MOSTRARPANTALLA:
CALL
LIMPIA
NOPARPADEA
CALL
CALL
W2TOLCD
MOV
ACCAL.W2
CALL
W2TOLCD
RETEJE
Esta segunda parte se corresponde con el cdigo de atencin a la interrupcin de datos por el m
dulo USART. Cuando recibe el primer dato lo salva en W4 y lo muestra junto con el valor de ACCAL. Al recibir el segundo dato, realiza la multiplicacin y acumulacin mediante el uso de la ins
truccin MAC, mostrando de nuevo el ltimo dato y el valor del registro ACCAL. La ejecucin de
esta instruccin MAC es la que realiza las operaciones matemticas necesarias para la resolucin de
la ecuacin planteada.
.global _main
;PROGRAMA PRINCIPAL
_main:
BSET
CORCON,#OxO
CALL
INICIAUART
CLR
W3
bucle:
CLRWDT
GOTO bucle
371
INICIAUART:
CLRU1BRG
#0x0019,W0
MOV
MOV
WOAJIBRG
MOV
#0x8000. W0
W0, UlMODE
MOV
- MOV
#0x0510, W0
MOV
W0, U 1STA
MOV
#0x8020, W0
MOV : W0, UlMODE
MOV
#0x0201, W0
MOV
W0, IEC0
[EC1
CLR
EC2
CLR
RETURN
.end
Una vez compilado el program a se utiliza el programa W inPic800 para grabarlo en la memoria del
dsPIC. Es necesario seleccionar en la pestaa Config del programa WinPic800 la fuente de reloj XT
w/PLL 4X para el correcto funcionamiento del laboratorio.
Tras grabar el programa, se coloca el conector serie procedente del ordenador en la salida del
Interfaz RS-232 de la tarjeta de entrenamiento para enviar datos desde el programa Hyperterminal
372
Tabla L6.2.
xn
65
66
67
68
69
70
Los valores de la Tabla L6.2 se encuentran expresados en base decimal. Se han elegido dichos
valores porque coinciden con los cdigos ASCII de las letras A, B, C, D, E y F respectivamente. As,
la introduccin de estos valores por el programa HyperTerminal de Windows ser muy sencilla, te
niendo que pulsar consecutivamente las teclas indicadas en mayscula.
Con estos valores, el resultado final de la ecuacin de filtrado deber ser el siguiente:
y = 65 x 66 + 67 x 68 + 69 x 70 = 13.676
La ejecucin de la aplicacin, paso a paso, sigue el guin detallado en la Tabla L6-3.
A c c i n
A l iniciar la ejecucin del programa en la pantalla LCD no
aparece ningn dato hasta recibir el primer operando por el
puerto USART.
A l pulsarla tccla A (mayscula) en el programa HyperTerminal
de Windows, se enva el cdigo ASCII 65 como b, representa
do en binario en la parte superior de la pantalla. Kn la parle
inferior se muestra el valor de ACCAL. que ser cero ya que
todava slo ha recibido b y no puede multiplicarlo por x.
Como segundo operando xn se enva la letra B, es decir 66,
representado en la primera fila del LCD. En la segunda apa
rece 4290 en binario resultado de 65*66,
Ai introducir el siguiente dato. C (67), el valor del acumu
lador no vara, ya que necesita de otro dato ms para reali
zar la siguiente multiplicacin y acumulacin.
Tabla L6.3.
373
En cualquier momento podra pulsarse el interruptor E7 para ver los 32 bits menos significati
vos del Acumulador A, como se muestra en la Figura L6.4.
Figura L6.4.
Fotografa que muestra la visualizacin do los 32 bits de menos peso del Acum ulador A.
El cursor parpadea para distinguir que en la lnea superior de la pantalla LCD se muestra el con
tenido ampliado del Acumulador A y no el ltimo dato recibido.
NOTA:
En el CD que acompaa al libro podr encontrar los programas de los laboratorios en lenguaje
ensamblador y en C.
LABORATORIO
Grabando la
memoria FLASH
de programa
con un bootloader
L7.1. OBJETIVOS
376
Puerto sene
jCOMI
Envf ptogtema
N o / H a recibido 96 b y t e s ? /
.........
____
Graba datos en
memoria FLASH
de programa
Activa la salida
RDO paja
encender led de
aviso de fin.
Figura L7.2.
377
El Laboratorio 7 emplea perifricos analizados en temas anteriores, como son el display LCD, el in
terfaz RS-232 y una salida digital conectada al led S5 que sealiza que el proceso de grabacin en
memoria de programa se ha llevado a cabo. El esquema de estas conexiones se muestra en la Figu
ra L7.3.
CANAL SERIE
Figura L7.3.
SALIDAS DIGITALES
La conexin de los perifricos queda resumida en la tabla siguiente y es muy similiar a la de labo
ratorios anteriores,
Ratita d e l dsP IC 30F 4013
RF2/U1RX
RF3/U1TX
RDO
S5 de SALIDAS DIGITALES
Para la construccin del Laboratorio 7 se ha creado un proyecto con 3 ficheros de cdigo fuente.
Un primer fichero llamado LCD.s es el encargado de las rutinas de visualizacin de datos por la
pantalla LCD de la placa PTC School y su estudio ya se ha realizado en laboratorios anteriores.
378
.global GRABA
.include "p30f40i3.inc"
GRABA:
SECUENCIA DE BORRADO
MOV
MOV
MOV
MOV
MOV
MOV
DfSI
MOV
MOV
MOV
MOV
BSET
NOP
NOP
CLR
CLR
#0X4041,wO
WO.NVMCON
#tblpage(#OxAOO),WO
WO.NVMADRU
#tbIoftset(#0xA00),W0
WO, NVMADR
#5
#0X55,W0
W0.NVMKEY
#0XAA,W0
W0,NVMKEY
NVMCON,#OXF
W2
W3
;Mueve a TBLPAG
;la pgina memoria de la direccin a escribir
;deja en W0 el desplazamiento de la pgina
;el primer byte recibido est en 901
;el ltimo en 0x0961 de la memoria datos
;carga en W2 los 2 bytes de menos peso
ADD
MOV.B
SL
ADD
MOV.B
ADD
TBLWTL
W4J0x0001,W4
[W4],W2
VV2,#0x008, W2
W4>#0x000l,W4
| W4],W7
W7,W2.W2
W2,( W0J
TBLWTII
ADD
CPSEQ
GOTO
W34W0++]
W4,#0x0001,W4
W4.W6
OTRAINSTR
379
A continuacin la rutina recupera los datos de las posiciones de memoria 0x0901 hasta la posi
cin 0x0960 para su grabacin en memoria.
; PROCEDIMIENTO DE ESCRITURA
MOV
MOV
DISI
MOV
MOV
MOV
MOV
BSET
NOP
NOP
ESPERA2:
BTSC
GOTO
NOP
#0x4001.W0
WO,NVMCON
#5
#0X55,W2
W2.NVMKEY
#0XAA,W1
WLNVMKEY
NVMCON,#W R
NVMCON,#WR
ESPERA2
Se ejecuta el procedimiento de escritura en memoria como ya se estudiara en secciones anteriores de esta obra.
CLR
BSET
RETURN
TRSD
PORTD,#OxO
Por ltimo, enciende el lcd conectado a RD0 para indicar al usuario que el proceso de grabacin
ha finalizado.
Esta rutina GRABA del fichero GRABAPROGRAMA.s es llamada desde el programa principal al
macenado en el fichero laboratorio?.s. Este fichero contiene las rutinas principales de la aplicacin.
380
T1R XTnfp.mmf
_lRXInterrupt:
Recepcin de un byte por UART
BCLR
IFS0,#U1RXIF
CLR
WO
MOV
U 1RXREG,Wr0
W0,[W4]
MOV.b
ADD
W4,#0X0001,W4
MOV
#0x0960,W3
CPSEQ
W4,W3
GOTO
FNRX
GRABA
CALL
FNRX:
U 1RXRHG,W2
MOV
CALL
LIMPIA
CALL
W2TOLCD
MOV
W4,W2
W2TOLCD
: CALL
RETFIE
Esta rutina de interrupcin es la encargada de ir guardando los datos recibidos por el puerto se
rie en la memoria de datos del dsPIC. La rutina va guardando los datos desde la posicin 0x0901
hasta la posicin 0x0961. Los guarda en la memoria de datos para que este proceso de almacena
miento sea ms rpido y para que una vez recibidos todos los datos se llame a la rutina GRABA en
cargada de almacenarlos en la memoria FLASH de programa. Mientras no recibe el ltimo dato la
rutina visualiza en pantalla el dato recibido y la posicin de memoria donde es almacenado.
.global _main
main:
CALL
MOV
INICIAUART
#0x0900,W4
bucle:
CLRWDT
GOTO
bucle
INICIA UART.
CLR
U1BRG
MOV
#0x0019,W0
MOV
W0,U 1BRG
MOV
#0x8000. W0
MOV
W0. U1MODE
MOV
#0x0510. W0
MOV
W0, U 1STA
#0x8020. WO
MOV
MOV
W0, UMODE
MOV
#0x0200, W0
MOV
W0. BCO
CLR
IEC1
IF.-C2
CLR
RETURN
.end
;Configura interrupciones
;Retomo subrutina
381
Esta parte del cdigo contiene el programa principal, que simplemente inicializa el mdulo
UART para una com unicacin serie a 9600 baudios, 8 bits de datos, 1 de stop y sin control de
paridad. Inicia tambin el contador de posicin de memoria donde almacenar los dalos y entra en
un bucle, infinito esperando que se produzca una interrupcin en el mdulo UART al recibir los da
tos del programa Minibootloader.
Figura 17 A .
A continuacin, se situar el interruptor del circuito grabador de la placa PIC School en modo
RUN para ejecutar el programa.
En la pantalla LCD no aparecer ningn dato hasta que se arranque en el PC el programa Minibootloader, se conecte el cable serie en el conector del interfaz RS232 y se pulse el botn Enviar Da
los del programa Minibootloader. Deber elegirse de forma adecuada el puerto serie a utilizar.
Puerto serie:
C O M I
E n viai programa
382
Al pulsar el botn Enviar programa el dsPIC comienza a recibir datos por el puerto serie que se
visualizan en la pantalla LCD junto con la direccin de la memoria donde se almacena, tal como se
puede observar en la Figura L7.6.
Figura L7.6.
Una vez enviados los datos al dsPIC, el programa Minibootloader muestra un mensaje en pan
talla indicando que el envo ha finalizado. Figura L7.7. Luego el dsPIC activa el led S5 para indicar
que el proceso de grabacin ha concluido. (Figura L7.8.)
Mirribootloa...
Datos enviados
Aceptar
____ 1
Figura L7.7.
Figura L7.8.
Queda por com probar que la grabacin ha sido correcta. Mediante el program a WinPicBOO se
leer el contenido de la memoria de programa del dsPIC para efectuar esta comprobacin.
Se coloca el interruptor del circuito de grabacin en posicin PC. Y en el program a WinPic800
se pulsa la opcin Leer Todo. Tras realizar esta operacin en la pestaa Datos se observa que en la
posicin OxOOAOO se encuentran unos bytes distintos al resto, que son los enviados por el programa
Minibootloader. (Figura L7.9.)
WnPic800
\g *i \
0 :; M
*><.-
: Sn
; <)x009A0:
OX009B0:
uxuuycu:
Ok 009D 0:
OX009E0:
OxOOOFO:
QxOOAOO:
OxOOAlO:
UX00A20:
O x00A30:
0x00A 40:
OxQOASO:
*
FRE3
- v 3.56.c
'fiiwbwow CcWvjocwi i{ik*no
w n g
nAnwJa
xvw
FFFPFF
FFFFFF
FFFFT
FFFFFF
FFFFFF
FFFFFF
EF22D2
FFFFFF
FFFFFF
FFEFFF
FFEFFF
FFFFFF
v
m
".
D ato s
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
FFFFFF
A802D4
FFFFFF
FFFFFF
FFFFFF
FPFPFF
FFFFFF
FEFEFF
FFFEFF
FFFFFF
FFFPFF
FFFFFF
FFFFFF
FE6000
FFFFFF
FFFFFF
FFFFFF
FFEFFF
FFFFFF
^
V
Conf irj,
^
S I '
%
r :'
j ?ic 0?
%
FFFPFF
FFFFFF
FFFFFF
FPFFFP
FFFFFF
FFFFFF
JPFPFF
Fp f p f f
FFFFFF
FFFFFF
FFFFFF
FFFFEF
3 :Q r'
r
-
^ C o d .I C S P
FFFFFF
FFFFFF
FFFFFF
FFFFPF
FFFFFF
FFFFFF
OOAO-1
FFFFFF
FFFFFF
FFFFFF
FEFEFF
FFFFFF
HK'zl &
30F4013
FFEFFF
FFEFEF
FFFFFF
FFFFPF
FFFFFF
FFFFFF
FF p f p f
FFPFPF
FFFFFF
FFFFFF
FFFFFF
FFFEFF
FFFPFF
FFFFFF
FFFFFF
FFFPFF
FFFFFF
FFFFFF
FFFPFF
FPFFFP
FFFFFF
FFFFFF
FFFPFF
FFEFFF
m
i
2_r
m m
Figura L7.9.
ic s r
FPFFFP
FFFFFF
FFFFFF
PPFFFF
FFFFFF
FFFFFF
FFPFPF
FFFFFF
FFFFFF
FFFF88
FFPFPF
FFPFPF
383
LABORATORIO
L8.1. OBJETIVOS
La velocidad de procesamiento de instrucciones del dsPIC es muy alta. Tratar de producir dos inte
rrupciones que se produzcan de forma simultnea resulta bastante complicado. Este laboratorio tra
ta de conseguirlo mediante la configuracin de tres fuentes de interrupcin distintas. L a primera pro
viene de un temporizador de 32 bits, la segunda de una interrupcin externa conectada al generador
lgico de la placa PIC School y la tercera del mdulo UART.
La interrupcin externa INTO se configura como la menos prioritaria y la ejecucin de su rutina
de atencin mostrar en el LCD el mensaje INTO. La siguiente interrupcin con ms nivel de prio
ridad ser la del Temporizador de 32 bits, que aproximadamente cada segundo generar una inte
rrupcin que visualizar en el LCD el mensaje TEMP32. Por ltimo, la interrupcin ms prioritaria
ser la proveniente del mdulo UART que mostrar en la pantalla LCD el mensaje recibido por el
puerto serie del ordenador.
Al estar conectada la patita INTO al generador lgico de la tarjeta PTC School, podrn seleccio
narse distintas frecuencias para la generacin de interrupciones externas. Si se selecciona una fre
cuencia de 1 Hz, se genera una interrupcin por segundo y con una frecuencia de 10 H z se genera
rn 10 interrupciones por segundo.
385
386
Figura L8.1.
RF3/
U 1TX
AP5
4
^ R x O
3
2 -X
1 X
AP8
i
C A N A L S E R IE
Figura L8.2.
RA11
o
4
F R E Q . OUT
387
La conexin de los perifricos queda resumida en la siguiente tabla y es muy similiar a la de labo
ratorios anteriores. Slo se ha aadido un nuevo perifrico que se encuentra en la tarjeta de desa
rrollo PIC School denominado Generador Lgico que se conecta a la patita RA11/1NT0.
Patita d el d sP lC 30F 4013
RF2/U1RX
RF3/U1TX
RA11/INT0
El cdigo principal del programa se encuentra recogido en un nico fichero llamado laboratorios.s.
En l se encuentran las rutinas de atencin a interrupciones, as como la configuracin de las mis
mas y el programa principal de la aplicacin.
Manejo de interrupciones
.include "p30f4013.inc"
.global _main
.global__INTOInterrupt
__INTOIntcrrupt:
;La interrupcin de menos prioridad
PUSH
WO
;Salva el registro WO en la pila
BCLR
IFS0,#
;Borra flag de interrupcin de INTO
CALL
INTO
;Escribe 1NT0 en pantalla
POP
WO
;restaura el valor de WO
RETFTE
;retorna de la interrupcin
La primera parte del cdigo se encarga de la interrupcin externa INTO. Ntese cm o la prime
ra instruccin consiste en salvar en la pila los registros cuyo valor va a ser modificado por la rutina.
Esta rutina, al mostrar el mensaje INTO por pantalla, cambia el valor del registro WO, de ah que la
primera instruccin sea PUSH WO para salvar su contenido actual en la pila de datos. A continua
cin, borra el flag de la interrupcin para que no se vuelva a atender la misma interrupcin, para po
der as mostrar el mensaje deseado, restaurar el valor de WO y retornar de la interrupcin.
.global_T3Interrupt
Interrupcin del Timer de 32 bits
_T3Tnterrupt:
PUSH
WO
;Salva los registros utilizados
PUSH
W1
DI SI
#0x3E00
;Deshabilita interrupciones.
388
BCLR
ISO,#7
CALL
TEMPORIZADOR
MOV
#0x3E00, WO
Wl
CLR
BUCLET32:
ADD
W l,#0x0001,W1
CPSEQ
W1,W0
GOTO
BUCLET32
Wl
POP
WO
POP
R E IR E
;Restaura valores de WO
;y w i
;Retorno de la interrupcin
En la interrupcin del temporizador puede apreciarse que se ha incluido una nueva instruccin.
Adems de las instrucciones PUSH que salvan los datos de los registros empleados en la rutina, se em
plea la instruccin DIST. Esta instruccin deshabilita las interrupciones con prioridades comprendidas
entre 1 y 6, de forma que si se provoca una interrupcin externa por INTO mientras se est ejecutan
do dicha instruccin, no se atendera durante el nmero de ciclos expresados por el argumento ordi
nal que sigue al nemnico. De esta manera, adems de que se ha configurado la interrupcin del tem
porizador con una prioridad superior a la de INTO se consigue que se atienda antes que la externa.
La instruccin DISI no afecta a las interrupciones provocadas por fuentes de interrupcin de
prioridad 7 o mayor. La interrupcin del UART tiene asignado nivel 7, para as superar la prioridad
de las interrupciones del timer y la externa INTO. Ntese tambin que si al salvar los registros me
diante la instruccin PUSH el primero fue WO y el segundo W l, el orden de recuperacin con la ins
truccin POP debe ser el inverso, primero W 1 y luego WO.
.global . J RXInterrupt
;lnterrupcin de recepcin de dato UART
U l RXnterrupt:
DISI
#Ox3EOO
;Deshabilita resto de interrupciones
PUSH
WO
;Salva registros usados
Wl
PUSH
BCLR
IFS0,#U1RXIF
;Borra flag de atencin interrupcin
CALL
LIMPIA
;Limpia pantalla
MOV
U1RXREG,W0
;Transmite el dato por el LCD
CALL
TRANSMITE
MOV
#0x3E00, WO
;Espera un pequeo tiempo para
WL
CLR
;que el dato sea perceptible
BUCLEUART:
W l,#0x0001,Wl
ADD
CPSEQ
W1,W0
BUCLEUART
GOTO
Wl
POP
;Restaura en orden inverso
POP
WO
;los registros salvados en la Pila
;Retorao de la interrupcin
RETFIE
389
Esta parte del program a ofrece la rutina de atencin a la interrupcin provocada por la recepcin
de un dato por el puerto UART. La nica diferencia con el cdigo correspondiente a la atencin por
la interrupcin del temporizador es que tiene prioridad 7 y por tanto caso de ejecutarse simultnea
mente tendr preferencia sobre el resto de interrupciones.
.text
_main:
;Inicializacin del Timer
CLR
T2CON
CLR
T3CON
CLR
TMR3
CLR
TMR2
MOV #0x0040,WO
MOV W0,PR3
:
MOV #0x0000,W0
MOV W0,PR2
BCLR
BCLR
BSET
BCLR
BSET
BSET
BSET
TPC1,#12
JBPCJ,#13
IPC1, #14
IF$),#7
IEC0, #7
T2CON, #3
T2CON, #15
;Inicializacin UART1
CLR
U1BRG
MOV #0x0019, W0
MOV W0,UJBRG
MOV #0x8000, W0
MOV W0, U 1MODE
MOV #0x0510, W0
MOV W0, U 1STA
MOV #0x8020, W0
MOV W0, U1MODE
BSET IPC2,#4
BSET IPC2,#5
BSET IPC2 #
BSET IPC0?#0
BCLR IPC0,#1
BCLR IPC0,#2
MOV #0x0281, W0
MOV W0, EC0
CLR
IEC1
CLR
IEC2
;PROGRAMA PRINCIPAL
PRINCIPAL:
CLRWDT
GOTO PRINCIPAL
Configuracin buffers
Configuracin modo
390
El programa principal simplemente configura los perifricos utilizados y entra en un bucle infi
nito a la espera de que se d alguna interrupcin. Previamente se han configurado con los niveles de
prioridad seleccionados las distintas interrupciones a travs de los bits de configuracin de los re
gistros IPCO e IPC2.
Figura L8.4.
391
Para com probar que la prioridad ms alta se corresponde con la interrupcin de la UART,
aunque el generador lgico trabaje a una frecuencia de 10 Hz, si se arranca el program a HyperTerminal de Windows y se deja pulsada una tecla constantem ente, el mensaje ms m ostrado es el
de dicha tecla y no el de las interrupciones liNT o TEMP32.
LABORATORIO
JH U
Pilotando
un Frmula 1
L9.1. OBJETIVOS
En las competiciones de Frmula l los blidos que compiten deben optimizar su velocidad y su pre
cisin para alcanzar el xito, que en muchas ocasiones depende de una milsima de segundo. Para
gobernar estos vehculos tan sofisticados se necesita un procesador que rena las caractersticas
apropiadas, como es el caso de los dsPIC de Microchip.
Entre las caractersticas ms relevantes que poseen los dsPIC para soportar la tarea de gobernar
un blido de Frmula 1 se citan las siguientes:
1.a Amplio abanico de canales de comunicacin. Destacan el mdulo UART, el bus fC , el mdulo SPI,
el bus CAN y el mdulo DCl. En esta simulacin se utilizan 2 mdulos UART del dsPIC30F4013 pa
ra visualizar informacin en una pantalla LCD y recibir rdenes de equipo del Ingeniero Jefe.
2.a El mdulo de comparacin de salida PWM se emplea para controlar con rigor la velocidad del mo
tor. Dicho motor est simulado en esta experiencia con uno elctrico de corriente continua.
3:3 Interrupcin externa de atencin inmediata para implementar un pulsador de seguridad que de
tiene al vehculo inmediatamente
4 a Un excelente conversorAD que transforma la seal analgica correspondiente a la temperatura del
motor en un valor digital que se procesa y reduce la velocidad del motor cuando supera un umbral.
La temperatura se simula mediante un potencimetro.
5.a Potentes instrucciones DSP que facilitan el clculo matemtico de todos los procesos.
Todos los recursos y perifricos que requiere este proyecto estn disponibles en el sistema de
desarrollo PIC School, sobre el que se implementar el hardware y se grabar el program a de apli
cacin sobre un dsPIC 30F40l3. nicam cnte habr que conectar un motor de corriente continua
externo a las salidas del driver de 4 canales que dispone la PIC School.
Con esta experiencia se pretenden cubrir los siguientes objetivos:
393
394
Este laboratorio utiliza varios recursos de la placa PIC School para simular el funcionamiento de un
blido de Frm ula 1.
Por un lado, los interruptores EO y El de la seccin de Entradas Digitales actuarn como acele
rador del vehculo, proporcionando 4 velocidades distintas. Tambin el pulsador E l servir como
botn de parada de emergencia, que har que el vehculo se detenga inmediatamente.
En la seccin de Entradas Analgicas se utilizar el potencimetro Pl para simular un sensor de
temperatura colocado junto al motor del vehculo. Deber medirse con precisin esta temperatura ya
que cuando se observe que el motor se calienta demasiado, entonces se limitar el nmero de re
voluciones por minuto.
Por otro lado, se utilizar el driver de 4 canales para conectar un motor de corriente continua y
as observar las variaciones de velocidad del vehculo.
Tambin se utilizar el intefaz RS-232 para recibir y enviar datos y rdenes de equipo al Inge
niero Jefe.
Por ltimo, se har uso de la pantalla LCD para informar al piloto de la velocidad del vehculo,
temperatura del m otor y rdenes del equipo.
El organigrama de la Figura L 9 .1 resume el funcionamiento de este proyecto.
La velocidad del motor se configura a travs del mdulo comparador de salida OC1 que debe ser
previamente inicializado. Tambin se inicializar la puerta F del controlador para que a travs de las
patitas RFO y RF1, el conductor del vehculo d ms o menos velocidad al motor conectado a las sa
lidas digitales.
El conversor analgico digital del dsPIC se conectar al potencimetro P 1 de la placa PIC School,
que simule el valor de la temperatura del motor. Si dicha temperatura supera cierto umbral, la veloci
dad del motor ser decrcmentada.
Por otro lado, a travs de uno de los mdulos UART del dsPIC, los ingenieros se podrn conec
tar va serie con el vehculo y enviar 3 rdenes distintas al vehculo. La instruccin L solicitar a la
electrnica del vehculo a que enve el dato de la temperatura a los ingenieros para que puedan es
tudiar su evolucin.
El comando B har que el motor baje sus revoluciones. Y por ltimo, el comando S eliminar
cualquier restriccin anterior iniciada con el comando B.
El vehculo dispondr de un botn de emergencia que har que se detenga el motor definitiva
mente. Para su implementacin se utilizar una interrupcin externa (INTO) que se conectar a la en
trada digital E7 de la placa PIC School.
Durante el funcionamiento del vehculo y gracias a otro mdulo UART el piloto del vehculo
comprobar en la pantalla LCD la velocidad del motor y el valor de la temperatura.
395
L9A
C O N E X I N DE LOS PERIFRICOS
Adems de la conexin tpica del controlador serie a LCD, ya analizado en laboratorios anteriores,
la conexin del resto de los perifricos queda resumida en la Tabla L 9 .1.
396
RF2/U1RX
RF3/U1TX
RAI 1/INTO
E7 de Entradas digitales
RF5/U2TX
ANO/RBO
RDO/OCI
M otor
RFO
EO de Entradas digitales
RFl
El de Entradas digitales
Tabla L9.1.
Tabla que presenta la conexin de las patitas del dsPIC30F4013 con los perifricos que
controlan el blido de Frmula 1.
El programa se encuentra dividido en varias partes principales. En la primera se definen las varia
bles globales a utilizar: Limitacin que guardar la limitacin de velocidad impuesta por los jefes de
equipo, Temperatura para almacenar la temperatura del motor del vehculo y Parar, variable de con
trol que har que el coche se detenga cuando se d la interrupcin externa INT. Debido a la longi
tud del programa, a continuacin se expone la solucin en lenguaje C que es menos extensa que la
solucin en ensamblador y ms fcil de comprender. No obstante, y para los lectores interesados, en
el CD que acompaa al libro, se incluye el fichero del programa en lenguaje Ensamblador con co
mentarios aclarativos.
397
Figura L9.3. Montaje del proyecto de control de un blido do Frmula 1 sobre la placa PIC School.
#includc p30f4013.tr
//Variable que contiene la limitacin de velocidad impuesta por el equipo
int limitacin;
//Variable donde se almacena la temperatura del motor
int Temperatura;
//Variable de control para detener el vehculo con parada de emergencia
int Parar;
En la segunda parte se definen variables auxiliares para el envo de textos, nmeros binarios y
caracteres a travs de los mdulos UART1 y UART2 para mostrar mensajes en la pantalla LCD y
en la consola de los Ingenieros del Equipo.
//RUTINAS AUXILIARES
f-------------------------- .
_
//Deshabilita ADC
//Lim pia pantalla
398
aux)
while(U2STAbits.TRMT == 0);
U2TXREG -O ';
11
aux = aux
1;
I
//for (j=0;i<=OxFFFF;i++);
IECObits. ADTE = 1;
)
//Enva un dato al LCD
void txt2LCD(char caracter)
in ti;
for (i=0;i<longitud;i++)
txt2LCD(cadena[i]);
}
399
IFSObits.ADTF = 0;
Temperatura = ADCBUFO;
char comando;
IFSObits.U 1RXIF = 0;
comando = U1RXREG;
if (comando =='L')
i
if (comando == B)
limitacin = 0x10;
if (comando S')
limitacin = 0;
//Reducir velocidad
//Quitar restriccin
IFSObits.INTOIF = 0;
Parar = 0;
La cuarta parte contiene las rutinas de inicializacin de los perifricos que ya se han estudiado
en laboratorios anteriores.
IHCObits.INTOlH = 1;
)
A D PC FG = 0xF F F F ;
A DCON1 = 0;
400
ADCSSL = 1;
ADCHS = 0;
ADPCFG = 0;
ADCON3 = 0x0016;
ADCON2 = 0;
ADCON1 = 0x80E4;
IPCO = 0x4444;
IPC1= 0x4444;
IPC2 = 0x4444;
IECObits. ADIE = 1;// = 0x0800;
}
OC1RS
OC1R
OC1CON
T2CON
=0;
=0;
=0x0006;
= 0x8030;
void lnicializaUARTl()
{ //Transmisin y recepcin de datos a 9600bps
//con XT w/PLL 4X 4Mhz.
U1BRG
=0x0019;
U1MODE =0x8000;
UISTA
=0x0510;
UIMODE =0x8020;
IECObits. U I.RXIE = 1;
}
void InicializaUART2()
(
U2BRG=0x0019;
U2MODE=OxBOOO;
U2STA =0x0510;
U2MODE=0x8020;
}
Y
en la quinta y ltima parte del programa se encuentra el bucle principal del programa que tras
inicializar los perifricos, va calculando la velocidad actual en funcin de los pulsadores conecta
dos a la puerta F, el valor del sensor de temperatura y las rdenes de equipo. As mismo, muestra la
informacin referente a la velocidad y a la temperatura en la pantalla LCD al piloto del vehculo.
// PROGRAMA PRINCIPAL
//= = = =
= = = = =
int Velocidad;
int Proteccin;
Proteccin = 0;
a s m .(,' c l r w ^ ,:,).
Velocidad = 0;
//te e los interruptores de la puerta F para elegir la velocidad
if (PORTFbits.RFO == 1) Velocidad = Velocidad + l;
if (PORTFbits.RFl == 1) Velocidad = Velocidad + 2;
txt2LCD()f
//Muestra temperatura en LCD y protege el motor
//si la temperatura es superior a 0x07FF
if (Temperatura >= 0x07FF)
401
402
case 2:
OC1RS = (OxOOCO - Proteccin - limitacin);
'"Brale;
case 3:
OC1RS =' (0x0100 - Proteccin - limitacin);
break;
)
case 0x0:
msg2LCD("Vcl: 0 \7);
break;
case OxAO:
msg2LCD("Vel: A0*\7);
break;
case 0xB0:
msg2LCD("Vel: B0,7);
break;
caseOxCO:
msg2LCD(M
Vel: C0"/7);
break;
case 0x60:
msg2LCD("VeI: 60";7);
break;
case 0x70:
msg2LCD("Vcl: 70,,t7);
break;
case 0x80:
msg2LCD(Vel: 80",7);
break;
case OxEO:
msg2LCD("Vel: E0,f,7);
break;
case OxFO:
msg2LCD("Vel: F0",7);
break:
case 0x100:
msg2LCD("Vcl:100",7);
break;
}
//Parada de emergencia
OCIRS = 0;
txt2LCD( 12);
msg2LCD(M
STOP",4);
//Bucle infinito
while 1)
asm(clrwdt");
}
403
Una vez com pilado el proyecto, grabado el mismo en el dsPIC a travs del program a WinPic800,
y una vez realizadas la conexiones de la PTC School descritas en el Apartado L9.4, se debe co
nectar el cable serie del ordenador al interfaz RS-232 de la placa PC School para poder enviar y
recibir las instrucciones de equipo a travs del program a HyperTerminal de W indows u otro si
milar.
Al pasar el interruptor del circuito de grabacin de la placa PIC School a modo RUN comenza
r la ejecucin del laboratorio.
En funcin de los valores introducidos en los interruptores EO y E l la velocidad del motor va
riar desde 0x0000 hasta 0x0100. Dicho valor se indicar en la pantalla LCD.
Figura L9.4.
En esta misma pantalla se puede leer si la temperatura es Alta o Baja. Con el potencimetro P1
podr variarse dicha temperatura y as podr observarse cmo al variar la temperatura a Alta el mo
tor baja su velocidad para protegerse.
V '
f
1
;>;, %
y - :
.. . .
_.
Frx
Figura L9.5. A l pasar la temperatura a Alta la velocidad del motor baja automticamente.
404
- com lv - HyperTerminal
Archivo BUcln Ver Uamer Ir refer'- Ayycb
De# ts S -Oc9 ES*
_ I ld f x !
0000101001010080
|0:00:12ureitafa
Figura L9.7.
AH3W
9600frN;l
- ;r MAY .
>
f:
Las limitaciones de velocidad se mantendrn a pesar de que se vare el valor de los interrupto
res de control de velocidad.
ndice
#SLIT4, 143
ACCA, 56,140
ACCB, 56,140
ACCSAT, 62,71
ACCU, 63
ACCxH, 63, 140
ACCxL, 64, 140
ACCxU, 140
Acumuladores, 43
ADD, 141,142, 123
ADDC, 123
ADDRERR, 102
ADSL, 182
AGUA, 42
AGUX, 42, 75
A GUY, 75
Airbag, 12
AIVT, 93
Algoritmos, 182, 352
ALTTVT, 93, 96
Amplificadores, 310
AN0-AN15, 157
Anidables, 103
Aritmtica
con saturacin, 62
modular, 62
ASCII, 351
ASM 30 Toolsuite, 202, 327
Atascos, 117
ATM Ine, 36
Autoevaluacin, 179,196, 212,
2 2 4 ,2 3 2 ,2 4 1 ,2 7 4 , 258
Autorcpcticin, 170
Banco de Registros W, 49
Banco de registros, 43
Barrido de teclado, 308
BCLR, 127
BEO, 36
Bit reverse, 79
Bootloader, 375
BOR, 47
B R A C , 131,225
BRA GE, 131
BRA LT, 131
B R A N , 131
BRA NZ, 131
BRA OA, 131
B R A SA , 131
BRA, 131
Brinco, 129
BSET, 127
BSW.C, 127
BSW.Z, 127
BTG, 128
BTSC, 129
BTSS, 129
B IS T , 128
BTSTS, 128
Buffer circulares, 76
B usC A N , 164
Byte fantasma, 85
C, 51, 70
CAD, 4, 5
CALL, 113, 131
Camino de Dalos, 52, 67
CAN, 312
Cancelacin del ruido, 23
Captura y Mantenimiento, 6
CDMA, 167
Cima de la Pila, 69
CLR, 122, 141, 144
CLRWDT, 135
CN, 155
CNEN1, 155
CNEN2, 155
CNPU1, 155
CNPU2, 155
405
406
Direccionamiento
directo, 114
directo por registros, 115
indirecto con Registros de
Desplazamiento, 115
indirecto por registros, 115
inherente, 113
inmediato. 117
modular, 71, 117
por inversin de acarreo, 117
por registro indexado, 113
DISI, 103, 136
D ISICN T.71, 103
Disparo Unico, 170
DIV, 123
DL<2:>, 71
DOZE, 27, 47, 167
DPSRAM, 170
Drivcrs, 310
DRM, 13
DSC, 9, 17
Dskcam, 14
DSP, 4, 7
dsPIC Fd Lite, 186
dsPic30F Math Library, 331
dsPIC30F, 10, 18
dsPIC30F4013, 175
dsPIC30F50I3, 26
dsPTC30F6010, 39
dsPIC30F6014, 26
dsPlC33F, 10, 28, 168
dsPICDEM MCI, 360
dsPIC works, 179,190
Harvard, 7, 8,41
Herramientas software, 177
http://perso.wanadoo.es/siscobf/
winpic800.htm, 318
Hyperlerminal, 357
iButton, 301
IC InSights, 10
ICPS, 91
TDLE, 4 7 ,167
IECx. 102
IF, 54, 71
IFSx, 102
I1R, 178, 186
INC, 123
Ingeniera de Microsistemas
Programados, 299
Inicializador Visual, 243
Instalaciones, 276
Instrucciones
de Bit, 127
de Comparacin
y Brinco, 129
de Control, 135
EXCH, 120
Extensin
de Ceros, 52
de Signo, 52
Fallo
delCD M A , 101
del Oscilador, 101
FBCL, 128
FF1L, 128
F F 1 R ,128
FFT, 184
FFT, 79
Filtrado, 367
Filtro, 186
de Caucr, 187
FIR, 76, 178, 226, 367
FLASH, 233, 327
Formato, 110
Forward Concepts, 10
FWDTEN, 167
Generador Lgico, 306
General Motors, 12
Gestin del sistema, 47
GPS, 13
Grabacin, 315
de Movimiento, 119
de Pila y Registros
Sombras, 133
de Rotacin y
Desplazamiento, 125
de Tabla, 71, 85
DSP, 140, 324
lgicas, 122
Matemticas, 123
MCU, 119
INTO, 385
INTCON, 57
INTCON1, 104, 105
INTCON2, 104, 105
Intel, 7
Interrupcin, 385
externa NT0, 255
pendiente, 102
Interrupciones, 93, 255
exlemas, 99
Intrucciones DSP, 117
IPL, 100
IPL<2:0>, 70, 99
IPL3, 71, 93
IRQ, 102
TVT, 93
Jumper, 303
L293D, 361
LAC, 140, 141, 147
Latencia, 104
LATx, 155
LCD, 313,368
LCDSYM20AA, 317
Led, 309
Lenguaje C, 209
Librera Matemtica, 331
Llamadas a subrutina, 113
LNK, 134
MAC, 7 ,4 2 ,6 7 , 141,
149, 226, 370
Marco de la Pila, 67
MAX-232, 311
MCLR#. 47
MCU, 8
MDI, 197
Memoria
Cercana, 73
de Configuracin, 83
de programa, 83
NDICE
de Usuario, 83
Mensajes, 182
Men
Configure, 2
Debugger, 200
Project, 199
Tool, 200
View. 198
M icrochip, 303
Microchip Technology Inc., 9
Microcontroladores, 8
M inibootloader.exe, 375
MIPS, 7
MODCON, 71, 77
Modificador, 80
Modo
dsPIC, 317
entero. 54
fraccional, 54
1CSP, 316
PC, 316
RUN, 316
Mdulo
12C, 163
CAN, 164
DCI, 164
de Captura de Entradas, 269
de Captura, 41, 158
de Comparacin, 41
de Comparacin /PW M , 159
de Comparacin de Salida, 271
de Redondeo, 58
de Saturacin, 58
PWM. 160
QEL 165
SPL 162
M ontaje superficial, 23
Motor, 362
DSP, 43. 52, 259
Motores
de corriente continua, 23
de induccin de corriente
alterna, 23
paso a paso, 23
MOVSAC, 141
MPLAB ASM30, 31
MPLAB C 3 0 ,31, 278
MPLAB ICD2, 216
MPLAB IDE, 31, 177, 197, 276
MPLAB Macros, 200
MPLAB SIM. 208, 216
MPLAB VDT, 31
407
Prioridad, 390
Procesador digital de seales, 4
PROC.OP, 89"
Project Wizart. 291
Propsito general, 20, 28
PSV, 114
PSV, 71, 75, 87
PSVPAG, 7 1
Puertas de E/S, 44, 247
Pull-up, 155
Punto de ruptura, 217
PUSH, 110, 134
PUSH.D, 134
PUSH.S, 68, 103
PWM para el control de
motores, 41
PWM, 46, 364
PWRSAV, 136
PWRSAV, 167
QEI, 46
QFN, 23
RA, 70
RAGUX, 75
RCALL, 113
Redondeo
Convencional, 64
Convergente, 64
Registro
de Desplazamiento, 43, 58
de Estado. 51, 69
sombra, 67
Rendimiento, 7
REPEAT, 59
Reservado, 89
RESET, 110, 136
Resct, 47, 95
RETFIE, 103, 132
RETLW, 132
RETURN. 132
RISC, 7
RLC, 125
RLNC, 125
R N D .58, 64, 71
RRC, 125
RRNC, 125LSR, 125
RTSP, 88
Ruido, 182
S&H, 6, 157
SA, 57, 70
408
SAB, 70
SAC, 140, 141, 148
SAC.R, 64, 140, 141
SADW, 58
Sample-and-Hold, 6, 46
SATA, 62,71
SATB, 62, 71
SATDW, 62, 64, 71
Saturacin normaf, 62, 142
Saturacin, 260
SB, 5 7 ,7 0
SE, 52, 123
Segmentacin, 118
Semforo, 250, 333
Seales analgicas, 3
SETM, 122
SFR, 65
SFTAC, 141, 148
SIM30, 31
Smbolos, 120
Sistema de alimentacin,
2 3 ,2 8
Skip, 129
SL, 125
SLEEP, 47, 167, 265
SmarHome, 35
SOIC, 23
SPDIP, 23
SPLIM, 67
SR, 51
SRH, 51
SRL, 51
STKERR, 101
SUB, 141, 123, 143
SUBB, 123
Sumador/Restador, 4 3 ,5 6
Spcr Saturacin, 6 2 ,6 3 , 142
SWAP, 120
SYM 20-AA, 334
Tabla Alternativa de Vectores de
Interrupcin, 93
Tabla de Vectores de
Interrupcin, 83, 93
TBLPAG, 71, 76, 237
TBLRDH, 86, 234
TBLRDL, 8 6 ,234
TBLWTH, 86
TBLWTL, 86
Teclado, 307
Tcmporizadores, 156, 250
de 32 bits, 333
Teorema de Mucstrco, 6
Texas Instruments, 7
TIMER 1, 156
TIMER 2, 156
TQFP, 2 3 ,3 9
Transformacin Rpida de
Fourier, 191
Transformada
de Fourier, 4
de La place, 4
Discreta de Fourier, 4
Rpida de Fourier, 4
Z ,4
UART, 161,266
ULNK, 134
Unidad de Divisin, 58
US, 71
Valor
entero, 61
fraccionario, 61
VDI, 243
Vector de Reset, 83
Visibilidad de Espacio de
Programa, 75, 87
Visual Initializer, 200,
243, 255
Volvo, 35
www.miciocontroladores.com, 299
WO, 49
W 0 -W I5 ,67
W0-W3, 67
W12, 67
W13, 67
W14, 67
W15, 67, 68
W4-W7, 67
W8-W11, 67
WAGUX, 75
WDT, 167
W inPic800,279,318,3 71
WR, 89
WREG, 49
WREN, 89
WRERR, 89
XB, 80
XBREV, 71, 80
XMODEND, 71
XMODSRT, 71
XT w/PLL 4X , 381
YMODEND, 71
YMODSRT, 71
Z, 51, 70
ZE, 52, 123
PIC School
w vm m icrocontroladores.com
que acompaa al
fuente en ensamblador y C
propuestos.