Академический Документы
Профессиональный Документы
Культура Документы
P i ó , 'u t o
•■ iu i» i« ti'n *^ ■
.- ■- !t;« r.r¡m ~ .s a a w u w ^ ^ a > '.< w t» m :
dsPIC
Diseño Práctico de Aplicaciones
Prólogo xv
v
vi CONTENIDO
C ap ítu lo 4. E L C A M IN O DE D A T O S ................................................................................... 49
C apítulo 6. LA M E M O R IA D E D A TO S................................................................................. 73
C apítulo 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
8.1. Introducción........................................................................................................................ 93
8.2. Tabla de vectores IVT y A1VT de los dsP IC 30F ......................................................... 93
8.3. Tabla de vectores IVT y AIVT de los dsP IC 33F ......................................................... 96
8.4. Nivel de prioridad de la C P U ........................................................................................... 99
8.5. Nivel de prioridad de las interrupciones........................................................................ 100
8.6. Nivel de prioridad para las excepciones......................................................................... 100
8.6.1. Excepción por Error A ritm ético...................................................................... 101
8.6.2. Excepción por Error de P ila .............................................................................. 101
8.6.3. Excepciones por Error de Direccionamiento y Fallo del O scilador......... 101
8.7. Procesamiento de las interrupciones.............................................................................. 102
8.8. Registros de control y estado para las interrupciones................................................. 104
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
T e rc e ra p a r te : L A B O R A T O R IO E X P E R IM E N T A L
L ab o ra to rio 2. M A N EJA N D O A FO N D O L O S T E M P O R IZ A D O R E S
D E 32 B IT S .......................................................................................................... 333
L aboratorio 7. G RA B A N D O LA M E M O R IA F L A S H DE PR O G R A M A
C O N UN B O O T L O A D E R .............................................................................. 375
ín d ic e ...................................................................................................................................................... 405
Prólogo
dsPic es un nombre genérico que se utiliza para referirse a los Controladores Digitales de Seña
les (DSC) que ha diseñado Microchip Technology Inc. para facilitar a los usuarios de sus micro-
controladores PTC la transición al campo de las aplicaciones de los Procesadores Digitales de Se
ñales (DSP), que van a propiciar en los próximos años un crecimiento espectacular en áreas como
las comunicaciones, los sensores, el procesamiento de la imagen y el sonido, el tratamiento mate
mático de señales* los sistemas de alimentación, el control de motores, la electro medicina, los sis
temas multimedia, la automoción e Internet.
Los DSC son unos dispositivos que combinan la arquitectura y la programación de los micro-
controladores PIC de 16 bits con los recursos hardware y software necesarios para soportar las pres
taciones fundamentales de los DSP. Microchip ha prestado una gran atención al mantenimiento de
la compatibilidad entre sus microcontroladores clásicos y los DSC.
El medio centenar aproximado de modelos de DSC que se comercializan en la actualidad se re
parten entre dos familias, llamadas dsPIC30F y dsPIC33F.
Los autores de este libro, experimentados pedagogos de la Universidad de Deusto, han intenta
do construir una herramienta sencilla y eficaz para poner en manos de todos los que conocen y ma
nejan los microcontroladores clásicos, y especialmente los PIC, que les permita dominar en el mí
nimo tiempo a los dsPlC y así poderse introducir en las nuevas aplicaciones cuyos proyectos son
más exigentes y complejos. Por eso han escrito esta obra intentando que fuese la que a ellos les hu
biese gustado encontrar cuando comenzaron el estudio de los dsPIC.
El contenido se ha estructurado en tres partes:
En la Primera Parte que consta de 12 capítulos se hace una descripción de las características, es
tructura y funcionamiento de los bloques principales de la arquitectura del procesador, haciendo én
fasis en las partes nuevas que se añaden a los dsPIC como el M otor DSP, las especiales organiza
ciones de las memorias, los nuevos modos de direccionamiento, las instrucciones DSP, etc. También
se explican los periféricos y el manejo básico del repertorio de instrucciones. Los conceptos teóri
cos comprenden a las familias dsPIC30F y dsPIC33F.
xv
xvi PRÓLOGO
Las restantes m arcas, logos y productos m encionados en este libro están registrados p o r sus
respect i vos propietarios.
Primera parte
Arquitectura, funcionamiento
y repertorio de instrucciones
El mundo que nos rodea está caracterizado por contar con un gran número de señales analógicas o
continuas que varían entre un valor mínimo y otro máximo pasando por infinitos valores. La tem
peratura, la luz, la presión atmosférica, la humedad relativa y la concentración de C 0 2 en el aire son
algunos ejemplos de magnitudes analógicas típicas en nuestro entorno. El correcto tratamiento de
estas señales tiene una gran importancia para el control de procesos y dispositivos. Hasta mediados
del siglo XX se utilizaron recursos y técnicas analógicas, cuyo esquema fundamental se muestra en
la Figura'1.1. Las enormes expectativas de aplicación en el manejo de esas señales en un futuro in
mediato ha desembocado en una optimización de las técnicas y recursos para su tratamiento.
' .7
EN TRAD A V SALIDA
l ---------------- ^ v:;>
O
SISTEMA
SEÑAL . DE SEÑAL
a n a ló g ic a ^ PROCESAMIENTO ‘ ANALÓGICA- < ]
ANALÓGICO
SENSOR ACTUADOR
Ié M m í
Figura 1 .1 . En una fase inicial se utilizaron técnicas y dispositivos analógicos para el tratamiento de
las señales.
Desde que en 1971 Intel comercializó el primer microprocesador, las posibilidades y ventajas del
procesamiento digital se incrementaron de forma exponencial. Un microprocesador es la pane más
compleja e importante de un computador digital. En nuestros días, existe una gran variedad de cir
cuitos integrados con millones de transistores y otros elementos repartidos en pocos mm^ de silicio
que configuran potentísimos computadores digitales a un coste asequible. (Figura 1.2.)
Figura 1.2. Los microprocesadorcs actuales contienen decenas de millones de transistores alcan
zando elevadas cotas de rendimiento en el procesamiento digital.
ENTRADA SALIDA
SEÑAL ; SEÑAL
DIGITAL — D IGITAL DIGITAL •:! C D A ANALÓGICA
> ■ - 0
■
SENSOR ACTUADOR
En el esquema de la Figura 1.3 existe un Conversor de Analógico a Digital delante del procesa
dor digital y otro Conversor de Digital a Analógico detrás. El inconveniente de incluir los conver-
sores AD y DA queda compensado por las innumerables ventajas que aporta el procesamiento di
gital de las señales respecto al procesamiento analógico. Se citan las ventajas más relevantes.
■■ •
Figura 1.4. El micrófono transforma en una señal analógica las presiones acústicas de la voz. Dicha
señal se aplica a un CAD, cuya salida se trata en un procesador digital do señales según
el algoritmo implementado en el programa con el fin de eliminar ruido de la señal obte
nida del micrófono. El resultado de este procesamiento se aplica a un CDA para obtener
de nuevo una señal analógica que se reproduce en un altavoz.
No obstante, existen situaciones en las que el requerimiento de trabajar en tiempo real impide la
aplicación del procesamiento digital debido a los retardos de los conversores, a la distorsión produ
cida en la toma de muestras y a la exigencia de gran precisión en los cálculos. Debido a que en ta
les casos hay que generar una respuesta a gran velocidad, se opta por utilizar sistemas analógicos pa
ra el procesamiento de señales.
El sistema típico de aplicación de un DSP dispone de un sensor como entrada que capta una señal
analógica correspondiente a la magnitud a tratar. Dicha señal analógica se muestrea para ir pasando
6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
estas muestras a un Conversor Analógico Digital (CAD) que las convierte a un formato digital pa
ra introducirlas al procesador. Una vez obtenidos los resultados digitales, nuevamente se convierten
los mismos en una señal analógica (CDA) de salida que puede transformarse de nuevo en una mag
nitud física por medio de un actuador. (Figura 1.5.)
CAPTURA Y
MANTENIMIENTO
SALIDA
SEÑAL SEÑAL .
D IG IT A L CDA A N A L Ó G IC A 1
ACTUADOR
MUESTREO
La señal analógica generada por el sensor se muestrea mediante un circuito de Captura y M an
tenimiento o Sample-and-Hold (S&H) que va tomando cada cierto tiempo (t) una muestra que car
ga y mantiene su valor en el condensador mientras el CAD realiza su conversión a digital. El tiem
po entre cada muestra se denomina período de muestreo (TM=1/Frecuencia de muestrea). Un gran
inconveniente del proceso de muestreo de la señal analógica es la pérdida de información entre
muestras. (Figura 1.6.)
AMPLITUD AMPLITUD
MUESTRAS
TIEMPO
Figura 1.6. Muestreo de una señal analógica. La señal analógica inicial se convierte en muestras dis
cretas tomadas cada cierto tiempo(t) en el circuito S&H.
La frecuencia de muestreo es el número de muestras que se realizan por segundo. Cuanto mayor
sea esta frecuencia, más parecido será el resultado obtenido a la señal original. Para representar con
precisión una señal analógica, el Teorema de Muestreo (Nyquist-Shannon) establece que la fre
cuencia de muestreo debe ser igual o mayor que dos veces la máxima componente de frecuencia de
la señal original {ancho de banda de la señal a muestrear), según la fórmula: Fmuestreo ^ 2 * Fmáx..
Tanto el CAD como el procesador digital deben disponer del tiempo suficiente entre cada dos
muestras para llevar a cabo las labores que tienen asignadas. Muy frecuentemente el procesa
miento de las señales digitales exige la aplicación de las transformadas de Fourier y Laplace, las
cuales hacen un uso intensivo de la función “suma de productos” (LCi • F(x)). Por esta razón, los
procesadores especializados en trabajar en el cam po de las señales deben disponer de un conjunto
EL M U N D O DE LOS DSP 7
de instrucciones muy potentes y rápidas, siendo la multiplicación la operación más importante que
deben soportar de form a óptima, ya que en caso contrario, supondría un verdadero cuello de bote
lla en el cálculo de la mayoría de los algoritmos.
Existen varias formas de medir la velocidad de un procesador digital de señales, aunque el pa
rámetro de medida más usual es el tiempo de ciclo de instrucción, que es el tiempo necesario para
ejecutar la instrucción más rápida del procesador. Su inverso dividido por un millón da lugar al ren
dimiento del procesador en millones de instrucciones por segundo o MIPS.
Recibe el nombre de DSP (Procesador Digital de Señales) un circuito integrado que contiene un pro
cesador digital y un conjunto de recursos complementarios capaces de manejar digitalmente las se
ñales analógicas del mundo real, como los sonidos y las imágenes.
A principios de la década de los 80 del siglo pasado ya se comercializaban varios modelos de
DSP, siendo pioneros los fabricantes Texas Instruments, NEC e Intel. En la actualidad Texas Ins
truments mantiene el liderazgo en el mercado de DSP, fabricando modelos cada vez más potentes
para acoplarse a las aplicaciones más complejas y cambiantes.
Los DSP pueden asemejarse a los clásicos microcontroladores, pero incorporando arquitecturas
y recursos especiales para poder controlar de form a óptima los requerimientos específicos y los al
goritmos manejados en el procesamiento digital de señales analógicas. Se destacan las siguientes
prestaciones de los DSP:
a) Las procesadores preferentemente son RISC; con un reducido juego de instrucciones que se eje
cutan, generalmente, en un solo ciclo.
b) Utilizan la arquitectura Harvard y disponen de dos memorias independientes, una dedicada a con
tener las instrucciones y otra los datos, posibilitando el acceso simultáneo a ambas informaciones.
Además, la memoria de datos suele dividirse en dos espacios independientes que aportan el ac
ceso paralelo. (Figura 1.7.)
c) Disponen de recursos físicos complejos para soportar las operaciones específicas de los algorit
mos DSP. Son imprescindibles un multiplicador rápido y un flexible registro de desplazamiento.
Una operación DSP típica es la de *multiplicar y acumular" ( x = a ■b + x) y que la suele imple-
mentar ¡a instrucción de nemónico MAC, ejecutándose en un solo ciclo. Se realizan varios accesos
a memoria en un solo ciclo, para que el procesador pueda buscar una instrucción mientras reali
za la búsqueda de operandos y/o almacena el resultado de la instrucción anterior. Esto es posible
gracias a que fa memoria de datos se divide en dos partes para posibilitar el acceso simultáneo
de datos
d) El repertorio de instrucciones contiene algunas específicas para resolver los algoritmos matemáti
cos habituales en el procesamiento de señales.
e) Los modos de direccionamiento son muy sofisticados, ya que localizan los datos y almacenan los
resultados de forma óptima para los algoritmos empleados.
f) Disponen de un conjunto de interrupciones muy amplio y veloz, con niveles de prioridad.
g) En el DSP se integran numerosos recursos y periféricos que minimizan el tamaño y simplifican el
diseño del sistema.
h) Poseen módulos para el control y optimización del consumo de energía.
8 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Figura 1.7. La arquitectura Harvard dispone de buses independientes para instrucciones y datos.
Los microcontroladores clásicos, denominados de forma resumida MCU, son circuitos integrados
que contienen un procesador digital completo junto a diversos periféricos auxiliares que facilitan el
desarrollo de las aplicaciones a las que se dedican. Su parecido con los DSP es muy grande, pero las
diferencias que los distinguen hacen que sus campos de aplicación sean diferentes.
De forma resum ida puede decirse que los DSP son microcontroladores dotados de los recursos
físicos y lógicos necesarios para poder soportar las aplicaciones específicas del procesamiento di
gital de señales.
Las instrucciones aritméticas complejas de los M CU se ejecutan en varios ciclos, mientras que
las de los DSP sólo precisan uno. En los DSP siempre se dispone de conversores AD rápidos y pre
cisos. Dado el carácter marcadamente matemático de los programas para DSP, éstos están prepara
dos para ser programados con lenguajes de alto nivel, como el C. La velocidad y el rendimiento de
los DSP son muy superiores a los habituales en los MCU.
En el momento que la expansión de las aplicaciones de los MCU ha alcanzado cotas extraordi
narias y se fabrica un sin fin de productos y sistemas que llevan embebidos uno o varios, el nivel
científico y los avances tecnológicos han logrado fabricar DSP que añaden al MCU los recursos ne
cesarios para soportar el procesamiento digital de las señales y cubrir así todo el cam po de posibi
lidades y aplicaciones que envuelve. (Figura 1.8.)
Al analizar el comportamiento del MCU se espera que ejecute la secuencia de instrucciones tal
como la especifica el programa, siendo las interrupciones la única causa que puede apartarle de
La misma. Su funcionamiento es claramente previsible y su actuación determinística. Por el con
trario, en muchas aplicaciones con DSP los resultados son consecuencia inmediata del flujo de da
ros que suministra la señal muestreada y la ejecución es dependiente de los datos obtenidos en
nempo real.
La empresa Microchip Technology Inc.® ocupa el prim er puesto en el ranking mundial de micro-
controladores de 8 bits desde el año 2003; sus modelos son conocidos popularmente con el nombre
genérico de PIC®. Tras el exitoso lanzamiento de las familias de microcontroladorcs de 16 bits
-IC24FXXX y PTC24HXXX, los usuarios necesitan nuevos dispositivos que soporten funciones de
procesamiento digital de señales para atender las nuevas tendencias del mercado orientadas al au
mento de la conectividad por Internet, las mejoras relacionadas con la imagen y el sonido, el con
trol de motores, etc.
Las aplicaciones modernas mezclan las funciones típicas MCU con las de procesamiento digi-
de señales (DSP). Esta situación ha im pulsado a M icrochip a fabricar un circuito híbrido
NICU/DSP, cuyo manejo es similar a los clásicos microcontroladores pero que incluye las principa
les prestaciones de los DSP. Así ha nacido el Controlador Digital de Señales, abreviadamente
DSC® (Digital Signal Controller), que reúne las características de un microcontrolador PIC de 16
bits y las de un DSP de gama baja. En base a este controlador digital de señales, M icrochip consi
gue reunir lo mejor de ambos mundos, marcando el comienzo de una nueva era en el mercado de
controladores. (Figura 1.9.)
— LU
----------►
PRECIO
Figura 1.9. Los controladores digitales de señales (DSC) comparten áreas de aplicación de los M CU
de 32 bits y DSP.
10 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
La primera generación de DSC, denominada dsPIC30F, constituyó un intento por parte de Mi-
crochip de facilitar el acercamiento al mundo del procesamiento digital de señales a sus usuarios de
MCU de 8 y 16 bits. Con esta intención se ha mantenido el entorno de la arquitectura y juego de ins
trucciones de los MCU tradicionales, pero añadiendo la funcionalidad y los principales requisitos de
los DSP, para facilitar la transición a sus clientes habituales. Posteriormente, la segunda generación
de DSC, llamada dsPIC33F, ha potenciado las capacidades, el número de periféricos y el rendi
miento, permitiendo acceder a campos de aplicación más complejos.
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 escalafón el fabricante Texas Instruments que consigue casi la mitad de
las ventas totales. En la Figura 1.10 se muestra la distribución porcentual de las ventas de DSP en
el mundo, según EE Times durante el año 2004.
TEXAS
INSTRUMENTS
OTROS
FREESCALE FABRICANTES
S E M IC O N D U C T O R S
PHILIPS
SEMICONDUCTOR
AGERE
SYSTEMS ANALOG
DEVICES
En el año 2005 se alcanzó un total de 1,3 billones de unidades DSP vendidas, lo que supone un
volumen de ventas de 7,8 billones de dólares, que se incrementará notablemente en un futuro in
mediato. El sector de las comunicaciones será el principal responsable de este crecimiento.
La cuota en volumen de ventas de los sectores más importantes en el mercado DSP fue de 6,4
billones de dólares en el sector de comunicaciones, 414 millones de dólares en el de computadores
y 312 millones de dólares en el sector del automóvil, según IC InSights durante el año 2005.
En cuanto a la distribución de las aplicaciones de DSP en el mercado global, Forward Concepta
las ha dividido en seis secciones (2004). (Figura 1.11.)
En lo que respecta a la fabricación de DSP sobresale Asia que abarca un 52 por 100, destacan
do China, Taiwán y Corea del Sur. Seguidamente Europa posee una cuota del 20 por 100 del total y
luego se sitúan Japón y Estados Unidos con un 17,3 por 100 y 10,7 por 100, respectivamente. Esta
dos Unidos está a la cabeza en lo que se refiere a consumo de DSP.
Dentro de los campos de aplicación de los 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. Distribución porcentual del mercado en las aplicaciones en las que están presentes
los DSP.
GRAN C O N S U M O
¡ i ' ; : - !
El uso cada vez más extendido de DSP en aplicaciones portátiles como la telefonía celular hace que
el consumo de energía sea un factor a tener muy en cuenta en el momento de decidirse por un DSP u
olro. Otros productos de consumo con DSP son televisores, radios, reproductores de música digital,
reproductores de -CD, órganos y sintetizadores musicales, frigoríficos, lavadoras y equipos de aire
acondicionado.
M E D IC IN A
Aparatos como los equipos destinados a la monitorización de pacientes, MNR, scanner, electrocar
diogramas.. electroencefalogramas y tomografías, han logrado que sus imágenes sean mostradas con
mucho más detalle que las técnicas convencionales gracias a los DSP, permitiendo un diagnóstico y
tratamiento significativamente mejor. Hay otros aparatos destinados al diagnóstico asistido, las eco-
grafías y la resonancia magnética, que pueden proporcionar información acerca de la fisiología y del
flujo de sangre a través de las arterias.
12 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
INDUSTRIA
Él DSP ha revolucionado áreas como la exploración petrolera, minera, submarina y espacial, el control
de motores, la instrumentación y la robótica. (Figura 1.12.)
Figura 1.12. La placa de la fotografía corresponde a un radar para tiburones y contiene un DSP
ADSP-TS2105 cuya función es optim izar su detección.
CONTROL DE MOTORES
A U T O M O C IÓ N
La introducción de DSP en esta área ha supuesto un incremento de las prestaciones de los automóvi
les. Se aplican en los activadores de airbag, sistemas de chequeo, control de velocidad de crucero,
suspensión activa, control del motor, ordenador de a bordo, ABS y control de la combustión. General
Motors, por ejemplo, utiliza un DSP en su sistema de rastreo de automóviles aprovechando la red glo
bal de satélites GPS para establecer su ubicación precisa.
EL M U N D O DE LOS DSP 13
MILITAR
El sonar, el radar, el piloto automático y el guiado automático de misiles son algunos de los ejemplos
de la utilización DSP en el ámbito militar.
TELECOMUNICACIONES
Figura 1.13. Cámara estabilizador de imagen con GPS para helicópteros. El cometido del DSP es gra
bar las imágenes absorbiendo la vibración del helicóptero además de disponer de un
complejo sistema CPS incorporado.
Figura 1.14. Receptor de DRM. El receptor está basado en DSP y puede conectarse directamente a
un PC para visualizar los parámetros de la emisión. Tiene la posibilidad do recibir texto,
imágenes y hasta pequeños videoclips ju n to con la señal de audio.
14 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Figura 1.15. La emisora de la fotografía contiene un DSP cuya función es eliminar la interferencia de
señales de emisoras adyacentes y reducir al mínimo la distorsión de sonido causada por
una mala recepción.
IM A G E N Y S O N ID O
EÍDSP puede realizar muchas funciones importantes durante el procesado del sonido y las imágenes.
Permite añadir ecos, soportar la visión artificial, ef reconocimiento de patrones, la compresión/des
compresión de imágenes, el reconocimiento y la generación de audio, la cancelación de ruido, la can
celación de eco, el encriptado y la síntesis de voz.
Figura 1.16. Dskc.am. Cámara c.on TCP/IP Ethernet, que gracias a un DSP soporta la videoconferen-
cia, el reconocimiento de imágenes, además de disponer de filtros y compresión.
EL M U N D O DF LOS DSP 15
Figura 1.17. M ó d ulo de vídeo "5¡g DM 642 m ultichannel". Soporta diversos formatos de. vídeo y
codifica y decodifica vídeo. Tiene un DSP que perm ite convertir las señales de vídeo
y audio analógicas en archivos digitales con calidad de vídeo DVD.
Figura 1.18. Placa PCI. Contiene un DSP y capacidades de grabación y reproducción a gran calidad.
CAPÍTULO
2
} Controladores
■ Digitales
I de Señales (DSC)
" *' ■■ :;.' ? v/*, .v "
17
18 dsPIC. DISEÑO PRÁCTICO DF APLICACIONES
Inicialmenle M icrochip fabricó la familia dsPIC30F de la que se ofrece en la tabla de la Figura 2.2
sus características más destacables.
Figura 2.2. Tabla que presenta las características más importantes de la familia dsPIC30F.
El voltaje de alimentación 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 alimentación 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 núcleo RISC con ar
quitectura Harvard mejorada. Actuando como soporte central de información existe un banco de
16 registros de 16 bits cada uno; se dispone de un bus de datos de 16 líneas y otro de instruccio
nes de 24. Para potenciar la velocidad de las operaciones aritm éticas com plejas existe un “M o
tor DSP” que contiene un m ultiplicador hardw are rápido 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 año de 4 M instrucciones de 24 bits cada una, aunque actualm ente sólo hay m ode
los con una capacidad máxima de 256 K bytes. La memoria de datos SRAM puede alcanzar 32
K posiciones de 16 bits, aunque en los modelos actuales sólo se llega a la mitad. La memoria de
datos se divide en dos espacios, X e Y, que pueden ser accedidos sim ultáneam ente en las opera
ciones m atem áticas DSP. Toda esta estructura adm ite operaciones M CU y operaciones DSP con
CONTROLADORES DIGITALES DE SEÑALES (DSC) 19
C IC L O
C IC L O S POR
FAM ILIA M CU IN S TR U C C IÓ N MIPS
IN STR U C C IÓ N
(M Hz)
INFINEON XC161/166 40 1-6 29
MICROCHIP dsPO O F 30 1 -2 28
II 320LF240X 40 1-4 21
M O TO R O IA 56F8ÖX 40 1-8 19
HITACHI H8S/26XX 33 1 -7 15
INFINEON C16x 25 2 -4 12
ST MICRO ST10F269 20 1-8 9
MITSUBISHI M 16 C 20 1-8 9
MOTOROLA MC9S12D 25 2 -6 6
Figura 2.4. Tabla de diversos fabricantes sobre algunos de sus modelos M CU usando los programas
de prueba basados en el análisis de frecuencia de instrucciones de EEMBC Automotive.
221%
100%
Figura 2.5. Se muestra ¡a reducción del código en lenguaje C que supone el uso de los dsPIC30F fren
te a otros según los benchmark de EEMBC Automotive para un tamaño de 50 Kbytes.
M icrochip ha clasificado a los 19 modelos de la familia dsP!C30F que actualmente fabrica y co
mercializa en tres categorías atendiendo a su aplicación más apropiada.
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.)
.
FLASH
M Ó D U LO A/D PATITAS
M EMORIA SRAM EEPROM TIMER M Ó D U LO INTERFAZ C Ó D IG O
M O D ELO PATITAS COM PARADO R 12-BIT UART SPI™ r e ™ CAN E/S
PROGRAMA BYTES BYTES 16-BITS CAPTURA CO D EC EN CAPSULADO
PWM STANDAR 100KBPS (MÁX)
KBYTES
CONTROLADORES
dsPIC 30F6011 64 132 6144 2048 5 8 8 - 16 ch 2 2 i 2 52 PF PT
dsPIC 30F60122
64 144 8192 4096 5 8 8 AC97, |2S 16 ch 2 2 i 2 52 PF I5T
dsPIC 30F6012A
dsPIC 30F6Ü14
90 144 8192 4096 5 8 8 AC97, |2S 16 ch 2 2 i 2 68 PF PT
dsPIC 30F6014A
Figura 2.6. Principales características de los 8 modelos que componen el conjunto de dispositivos dsPIC30F de propósito general.
21
22 dsPIC. DISEÑO PRÁCTICO DF APLICACIONES
Esta subfamilia consta de 4 modelos y se orienta a resolver aplicaciones embebidas que requieran altas
prestaciones y bajo coste, razón por la que sólo disponen de encapsulados de 18 y 28 patitas. (Figura 2.7.)
ENCAPSULADO
CÓDIGO
o i
</> O iCC ó
ce C_- </> <
O
✓
T
)
CT!
s -
fH
c=- uj ^ <N <N CN <
T— O
N
'<
O. w
£ - - - -
esu
o
- - - - c
1 O)
- - - CN
5
K£ JZ JjjZ. JU
C
cU
o cuc
< 5! |
S8 |
2á | C
N C
N CN OJ
o ^ “ “o
UL.
s§¡ O
r>
o
9á
N CN C
C N C
N
O<
5O
cU£J £
_ r+l rr ro
^P T—
i» TN ^rl
' C ■ O
C O
“u
U
wJC1u
*C
=N
t C
TO CN CO
•3
-
2/>£ O 04 O o
O CN
< cc
&
<1l í urn
I 2 (v3
N oí 04 ■
C 't
CN U
<. m
u ISOs* vi
-S¿
5£ 03
.Q ,
l i l i
u
SVlIlVd
C
O co CO C
<N O
C
N
• Oí OI
0 O O O b
c~
mJ
UJ ÍN
Ll_ mu_ C
LlN
_ u _¡ CÑ
ro 1o
O <-o O
en O
c-n r8
o u U U U u.
3
s _ i c■
cw _r¡ Q. fi-i/i
"O ~¡o
s¡ ~ W D
CONTROLADORES DIGITALES DE SEÑALES (DSC) 23
_ s 7 modelos que componen esta categoría se dedican a las aplicaciones de control de motores, ta-
como los de inducción de fase simple o trifásicos y los de corriente continua. También son muy
^ ro p iad o s para la gestión de los sistemas de alimentación ininterrumpibles, conversores, módulos
pira la corrección del factor de potencia, etc. (Figura 2.8.)
Estos modelos de DSC se utilizan en sistemas destinados a calefacción, ventilación, lavadoras,
ire n u ra industrial de puertas, control de estabilidad, medición 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 aplicación en los motores de corriente continua y el control de veloci-
¿hi. Para los m otores de inducción de corriente alterna recom ienda los modelos dsP IC 30F3011,
is?IC 30F5015 y dsPIC30F6010.
Con la finalidad de soportar todo tipo de diseños y necesidades los modelos dsPIC 30F están
«©capsulados desde 18 hasta 80 patitas, algunos con doble hilera de patitas, tipo PDÍP y SPDIP
SOIC. O tros están 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 números y letras expresan las especificaciones
particulares y su significado se describe en la Figura 2.10.
El diagrama de conexiones para los miembros de esta familia lo ha diseñado Microchip para pro-
p d a r l a migración hacia modelos superiores y con más patitas, para lo cual ha mantenido la máxi-
compatibilidad en su posición. Se ha favorecido la compatibilidad del “pinout” o distribución del
rciiilaje de los PIC M CU con los PTC DSC, también la de las instrucciones, la de las herramientas
je desarrollo y la de las patitas de E/S correspondientes a los periféricos de los dos tipos de PTC, co-
x l c se refleja en la Figura 2.11.
DE APLICACIONES
dsPIC 30F2010 28 12 512 1024 3 4 2 6ch 6ch SI 1 1 1 - 20
MMG
dsPIC 30F6010 PF
80 144 8192 4096 5 8 8 8ch 16ch SI 2 2 1 2 68
dsPIC 30F6010A PT
i---------------------
¡ dsPIC 30F6015 64 144 8192 4096 5 8 8 8ch 16ch SI 2 2 1 2 52 PF
Figura 2.8. Características más significativas de los modelos dsPIC30F para el control de motores y sistemas de alimentación.
CONTROLADORES DIGITALES DE SEÑALES (DSC) 25
m
MM{G): 28-pin QFN ML: 44-pin QFN
15 m n x 6 mm * 0 .9 mm) (S n w x $ >¡ (J.9 mm)
SP(G): 28-p/n SPDIP S0(G): 28-pin SOIC PT: 44-pin TQFP PT: 80-pin TQFP PF: 80-pin TQFP
( M . tfT >. 7 .3 7 >: 3 .3 mm) {1 7 .3 3 x 1 0 .3 4 x 2 .3 1 mm) ( i o miíi x 1 0 rjvr. x 1 nvml ¡J.2 m u x 1 2 nim x i mm) (14 irm «. 1 4 n w x i min)
PIC* MCU d sP IC *D S C
/O T i'.V Ä V W « « ¿
TMR TMR I — 5 TMR
CCP 1C
oc T— 0 I OC
UART ::
SPI™
■« » X ■■
F^ura 2.11. M icrochip ha potenciado la com patibilidad de las líneas de E/S de los periféricos de los
PIC M C U con la de los dsPIC DSC.
26 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Q 8 S S 2 |
2n3 „ 5?? e§ 8
a s o & í 8 5 ;: £
I í í í 5 §SI gg§§¿o88a
¡ §§s § 5Ss1 2 I £ §§1¡§§1
nnnnnnnnnnnnnnnnnnn
0 ¡s x 0 in 'í0 M » -0 « ( » N ( « irtír tN » -
COFS/RGÍ5
!EMUci/sasc<yria0CN<VRCi
I £MUDl*SOSC*CNt/RC13
T2CK/RC1 C U
I EM UC2OC1«D0
T3CK/RC2
| IC4/R011
T4CWRC3
| C3/RD10
T5CK/RC4
I IC2/RD9
SCK2/CN&RG6
11C1/RD8
S012/CN9.RG?
| INT4.'RAí5
SDQ2'CH*0tRG8
I IK T i'R A '.á
MCLR
| VÍ2
SS2/CN11XIG9 d sP lC 3 0 F 6 0 1 4
VSS I OSC2.‘C!.Kí>RC15
I OSCUCUO
V oo
H ] vdo
INT1AA12
|SCL»RG2
!NT2iRA13
| SOA/RG3
AN$>CN7.«35
AN4/CN&R84 I BHUC3/SCK1/lWT<VRre
AN3.CN&«33 | SOI1.«F7
UUUUÜÜÜÜUÜÜUÜUÜÜÜÜUIJ
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? 8
£ r- O SIS
^ V- ® N M N í)
s z z r ' O Q i q
85«
8
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.S535Sé3S35
E M U C tSOSCOíT ICKiCNORCU
R G15
EMUDVSOSC»‘CNtíRC13
T2C W R C I I
E M U C 2 O C 1 .R 0 0
T3C K/RG 2 d
ICÍ/RD11
T 4C K /R C 3 C Z
IC3/RD10
73C K /R C 4 d
IC2íRDS>
SCK2>CN8.<RG6 tZZ
IC í.R D S
SOI2>CNa«G7 d
83 d IW T4/RA15
S D O Z 'C N -.g'R G S d
M CLR I IHT&RAM
Vss
S S /C N U < R G 3 d
dsPlC30F6013 OSC2/CIKG/RC1S
V s s d
OSC1.CLXI
Veo I d
vas
1 N T 1 iR A í2 C U
IN T 2 R A 1 3 1ZZ SCURG2
S D A 'R G 3
AH&yCM7/RBS d
A tM .C N & R & í d EMUC3-SCK1/1N7IVRFB
A fC « C N M ? B 3 d
SDI1JRF7
A K & S S ÍA .V C m C N 4 .-R a 2 d E M U B 3 ;S D 01 iR F S
saaaajs&asssisissss&sss
UUUUUÜUUÜUÜÜUÜUÜUUU'U
o s # o o « < 0 0 6 0 -- a a w rt í « ^
? í ¿ í > >22¡D®>^(fleOíí)<no u s a :
H f $<<¡{51 %%%%% * 2 *
^ =5 <S <
S z z z z py
Frgura 2.13. Símbolo, dirección y descripción de las patitas más significativas de los encapsulados de
los dsPIC30F.
1 3 . LA F A M IL IA dsPIC33F
D voltaje de alimentación admite un rango comprendido entre 2 y 3,6 VDC. El rango de tempera-
ñ a s idéntico a los dsPIC30F. El rendimiento máximo alcanza los 40 MIPS cuando el voltaje de ali
mentación tiene un valor de 3,3 VDC. (Figura 2.14.)
Los aspectos más destacables que incorporan los dsPIC33F son la ampliación en el número de
p a a s de E/S, la capacidad de la memoria FLASH que alcanza 256 KB, se mantienen los periféri
cos, la disponibilidad del doble de interrupciones, SRAM de hasta 30 KB. No disponen de memo-
n 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 periféricos y la memoria.
28 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
RECURSO R A N G O DE VALORES
Figura 2.14. Tabla que presenta las características más importantes de la familia dsPIC33F.
En el modo DOZE todos los osciladores funcionan, pero a muy poca frecuencia, reduciendo de
esta forma el consumo.
M icrochip ha clasificado a los 27 modelos de la familia dsPIC33F que actualmente fabrica y co
mercializa en dos categorías atendiendo a su aplicación más apropiada.
Los dsPIC33F de propósito general son ideales para una amplia gama de avanzadas de MCU de 16
bits embebidos y en concreto, las variantes con interfaces CODEC son idóneas para aplicaciones de
tratamiento de la voz y audio. Este grupo está formado por 15 modelos diferentes. (Figura 2.15.)
La categoría de control de motores ofrece una gran variedad de aplicaciones relacionadas con el go
bierno de motores, como los de inducción, de fase simple o trifásicos y los de corriente continua.
También son muy apropiados para la gestión de los sistemas de alimentación ininterrumpibles, con-
versores, módulos para la corrección del factor de potencia, telecomunicaciones u otro equipa
miento industrial. Este grupo está formado por 12 modelos diferentes. (Figura 2.16.)
FLASH M ÓD.
A/D PATITAS
M EM ORIA SRAM CDM A TIM ER M ÓD . COM P. CO D EC sp|TM CÓD.
M O D ELO PATITAS 10-BIT UART r c rM CAN E/S
PROGRAM A KBYTES Ch# 16-BITS CAPT. PWM INTERF. ENCAPS.
500KBPS (MÁX)
KBYTES ESTÁND.
Figura 2.15. Principales características de los 15 modelos que componen los dsPIC33í de propósito general.
30
dsPIC. DISEÑO
FLASH M ÓD.
CO N TR. A/D PATITAS
MEM. RAM CD M A TIMER M ÓD. COMP. CO D IF. CÓD.
M O D ELO PATITAS M OTOR 10-BIT 1.1 UART SPI™ |2C ™ CAN E/S
PRO GR. KB Ch# 16-BITS CAPT. PWM CUA D RATURA ENCAPS.
PRÁCTICO
PWM MBPS (MÁX)
KBYTES ESTÁND.
DE APLICACIONES
dsPIC33FJ64GP706 64 128 8 8 9 8 8 8ch SI 1A/D,16Ch,4S/H 2 2 2 1 53 PT
Figura 2.16. Principales características do los 12 modelos que componen los dsPIC33F de control de motores y sistemas de alimentación.
CONTROLADORES DIGITALES DE SEÑALES (DSC) 31
A pesar de ser muy similares, existen algunas diferencias apreciables entre ambos DSC. El rango de
voltajes soportado por cada uno es diferente, así como el voltaje óptimo para su mejor rendimiento.
Les dsPTC30F tienen como tensión nominal 5VDC y los dsPIC33F 3.3VDC. También difieren en
las patas de E/S y la memoria FLASH que alcanza 144 KB en los 30F y 256 KB en los 33F. Los 33F
;.3iecen de EEPROM , pero su SRAM puede llegar a 30 KB, mientras que en los 30F no superan los
' KB. Finalmente, los dsPIC33F disponen del doble de interrupciones y un Controlador de DMA.
En la tabla de la Figura 2.17 se representan las principales diferencias existentes entre las fami-
^ del dsP!C30F y dsPlC33F:
dsPIC33F
Controlador de D M A (8 canales)
5 temporizadores 9 temporizadores
rara mantener la continuidad a los diseñadores con PIC MCU y facilitar su transición a los DSC,
Microchip proporciona un paquete de herramientas software para estos últimos muy sim ilar a las
utilizadas con los microcontroladores clásicos.
Todo el software se cimienta en el conocido entorno integrado MPLAB IDE, que consiste en un
sistema lógico gratuito con un Ensamblador MPLAB ASM30, un simulador software S1M30, un
compilador de C, MPLAB C30, y el ínicializador Gráfico de Programas MPLAB VDI. (Figura 2.18.)
l a mayor parte de estas herramientas pueden recogerse libremente desde el sitio de Microchip en
internet.
El MPLAB IDE gestiona todas las etapas del diseño software de un proyecto y se adapta a las
herramientas hardware de Microchip y otras segundas fuentes. Corre en sistemas operativos W in
dows XP, 2000, Me, 98SE y NT.
32 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
Figura 2.18. Ventana del programa MPLAB VDf que presta una gran ayuda en la fase de inicializa-
ción de los programas con DSC, al aportar un entorno gráfico para Ja configuración de
los recursos que intervienen.
La arquitectura abierta de los productos de M icrochip y su generosa política comercial han conse
guido inundar el mercado de interesantísimas herramientas hardware y software de segundas fuen
tes que optimizan el desarrollo de las aplicaciones con los productos de este fabricante. En la foto
grafía de la F igura 2.19 se m uestra el program ador universal de PIC y dsPIC denom inado
P IC ’Burner de la empresa Ingeniería de Micros is temas Programados S. L.
Una herramienta muy eficaz de M icrochip es el Programador y Depurador en Circuito MPLAB
1CD-2 que además de grabar diversos microcontroladores y dsPIC depura el código desarrollado en
Ensamblador o C. (Figura 2.20.)
M icrochip com ercializa un programador profesional denominado MPLAB PM3 y el Emulador
en Circuito MPLAB ICE 4000.
Para agilizar el entrenamiento y aprendizaje de los usuarios en el manejo de los dsPIC, M icro
chip ha desarrollado un conjunto de tarjetas específicas para desarrollar proyectos en áreas como el
control de motores, la conectividad, etc. (Figura 2.21.)
CONTROLADORES DIGITALES DE SEÑALES (DSC) 33
Figura 2.19. Fotografía del programador universal de PIC y dsPIC, de bajo precio, fabricado por
Ingeniería de Microsistemas Programados S.L.
Figura 2.20. Fotografía del MPLAB IC.D-2 que es capaz de grabar y depurar en circuito los modelos
dsPIC
A) CONTROL D E MOTORES
• Bombas industriales.
• Lavadoras y aspiradoras.
• Equipos de gimnasia.
• Tensores de cinturones de seguridad.
• Calefacción, ventilación y aire acondicionado.
• Refrigeración.
• Herramientas eléctricas.
• Apertura de puertas.
• Control de estabilidad.
Figura 2.22. Los pretensores de cinturones de seguridad son una aplicación recomendada para los
dsPIC.. Cortesía de Citroën.
B) CONTROL D E SENSORES
• Sensores de torsión.
• D epresión.
• De vibraciones.
• De golpes.
• De lluvia.
• De fallos en la red eléctrica.
• De rotura de cristales.
• Sensores químicos y de gases.
• Detección PIR avanzada 2-D.
CONTROLADORES DIGITALES DE SEÑALES (DSC) 35
r:^ura 2.23. El sensor de seguridad de la figura posee un DSP efue le permite incluso distinguir a una
persona de una mascota. Cortesía de SmartHome.
C) AUTOM OCIÓN
• Control de potencia.
• Control de estabilidad y balanceo.
• Caja de cambios y embrague electrónico.
• Dirección hidráulica asistida eléctricamente.
• Cancelación de ruido en el habitáculo.
• Airbag.
• Control de ignición.
• Sensor de presencia de ocupantes.
• Control del combustible.
Figura 2.24. El airbag es una aplicación recomendada para los dsPIC. en automoción. Cortesía de Volvo.
D) CONECTIVIDA D EN INTERNET
• M onitorización remota.
• Contadores automáticos de agua y gas.
+ Instrumentación médica remota.
• Sistemas de seguridad.
• Máquinas expendedoras.
• Diagnóstico industrial remoto.
36 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Figura 2.25. Los dsPIC tienen un vasto campo de aplicación y control por Internet de las máquinas ex
pendedoras. Imagen cortesía de ATM Inc..
E) AUDIO
• Reconocimiento de voz.
• Altavoces telefónicos.
• Redes distribuidas de megafonía.
• Efectos especiales en instrumentos musicales.
• Cancelación de ruidos.
• Reproducción de sonido digital.
• Auriculares para la eliminación de ruidos.
• Puertos de comunicación para manos libres.
• M icrófono activado por la voz.
Figura 2.26. Los aparatos de audio para la reproducción digital del sonido son productos en los que
se utilizan DSP. Cortesía de BENQ.
CONTROLADORES DIGITALES DE SEÑALES (DSC) 37
• Convertidores AC-DC.
• Convertidores DC-AC.
• Fuentes de alimentación ininterrumpibles (UPS).
• Inversores.
• Vehículos eléctricos.
• Corrección del factor de potencia.
• Monitorización de la alimentación en servidores.
• Gestión de la alimentación y ahorro de consumo.
• Detección de fallos.
Figura 2.27. Las fuentes de alimentación ininterrumpibles (UPS) constituyen un campo de aplicación
m uy interesante para los dsPIC. Cortesía de Craftsmans Electric.
CAPÍTULO
Arquitectura
de la CPU
En la Figura 3.1 se presenta el diagrama por bloques correspondiente a la arquitectura inlema del
modelo dsPlC3ÜF6010 que se le puede considerar uno de los más representativos. Encapsulado con
SO patitas en formato TQ FP dispone de casi todos los recursos posibles y cualquier otro componente
de la familia contendrá sólo una parte de los elementos del mencionado dispositivo. El diagrama de
Figura 3.1 puede dividirse en 6 bloques principales:
1 ° Memoria de datos.
2 ° Memoria de programa.
3.° Camino de datos.
4.° Puertas de E/S muitifunción.
5.° Periféricos diversos.
6° Recursos para la gestión del sistema y de la energía.
La memoria de datos RAM (SDRAM) se estructura en dos espacios, llamados X e Y, que per
miten acceso simultáneo y que pueden alcanzar hasta 8 KB de capacidad en el modelo dsPIC30F,
siendo el tamaño de todas sus posiciones de 16 bits. También existe una memoria de datos no volá
til de tipo EEPROM. En los 33F no hay EEPROM pero la SRAM puede alcanzar 30KB.
Para una instrucción del tipo MCU (no DSP) los espacios X e Y se convierten en un solo espa
cio lineal.
Las instrucciones se alojan en la memoria de programa de tipo FLASH cuyas posiciones tienen
un tamaño de 24 bits, igual que el de la mayoría de las instrucciones. La memoria de instrucciones
del modelo dsPIC33F es algo más rápida que la del dsPTC30F. La memoria FLASH de los 33F tra
baja a 3,3 V, con el inconveniente de que sólo puede ser escrita y borrada 1000 veces (Endurance).
La memoria de programa puede alcanzar 144 KB como máximo.
El Camino de Datos donde se ejecutan las instrucciones y se procesan los datos se basa en un
banco de 16 registros de trabajo (W) de 16 bits de longitud cada uno, que alim entan una ALU
39
40 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
- pica de MCU, un M otor DSP que sirve para realizar las operaciones DSP de 40 bits y una uni
dad de división.
Las 7 puertas que agrupan las líneas de E/S para la comunicación con el exterior (PUERTA A,
PUERTA B, PUERTA C, PUERTA D, PUERTA E, PUERTA F y PUERTA Q) se caracterizan por
a p o rta r varias funciones multiplexadas. En cuanto a periféricos y recursos auxiliares contenidos en
d dsP!C30F6010 abarcan a todos los posibles en la familia: Conversor AD, Módulo de Captura,
Módulo de Comparación, PWM para el control de motores, Codificador de Cuadratura, Módulos de
comunicación (UART, SPI, I2C y CAN), Osciladores, Perro Guardián, etc. También existen recur
sos complementarios para el manejo de la energía y la tensión de alimentación.
Bajo una arquitectura Harvard mejorada la CPU soporta un potente repertorio de instrucciones, la
mayoría de 24 bits de longitud y algunas que realizan operaciones específicas DSP. El dirccciona-
rniento de la memoria de programa corre a cargo del Contador de Programa que consta de 23 bits,
iliendo siempre cero el de menos peso e ignorándose el de más peso, con lo que se puede direc-
::onar un espacio máximo de 4 millones de palabras de instrucción de 24 bits.
0X0001 0X 0000
M EMC^'A
CERCANA
S<0
0X07FF 0X 07FE
0X 0800
MAX ESPACIO V
64 KB.
NO
IM P L E M E N T A D O
NUNCA IMPLEMENTADO
0XFFFE
'
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. Sólo se puede
acceder a los 16 bits de menos peso de cada palabra de instrucción. A esta posiblidad se le de
nomina PSV (Visibilidad del Espacio de Programa).
b) También existe la posibilidad de acceder indirectamente al espacio de la memoria de programa
utilizando un registro de trabajo y las instrucciones especiales de lectura y escritura de Tabla.
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
aocoo-
R E G IS T R O S C O N F IG U R A C IÓ N .
M E M O R IA
C O N F IG U R AC IÓ N
(2M SÌ
-------—-------------------- 1---------
: ■ __________ ____
R E G IS T R O S ID EN T IF IC A C IÓ N
Para el direccionamiento de los datos se pueden utilizar los modos clásicos de todos los proce
sadores: Inmediato, Inherente, Directo, Relativo, Registro Directo, Registro Indirecto y Registro de
ARQUITECTURA DE LA CPU 43
3.3. EL C A M IN O DE DATOS
Para combinar las funciones aritméticas de una potente MCU de 16 bits con las específicas de un
DSP se cuenta con los siguientes recursos: banco de 16 registros de trabajo W de 16 bits cada uno,
ALU para MCU, M otor DSP y una unidad para la división. (Figura 3.4.)
La ALU de 16 bits interviene en las operaciones aritméticas propias de las instrucciones MCU.
El M otor DSP contiene un multiplicador rápido de 17 x 17 bits, dos Acumuladores A y B de 40 bits
cada uno, un Sumador/Restador de 40 bits y un potente Registro de Desplazamiento de 40 bits b¡-
direccional. Con los recursos comentados, una instrucción DSP, como la MAC, puede leer de la me
moria dos operandos simultáneamente, mientras que multiplica dos registros W en un solo ciclo.
Una parte muy importante del Motor DSP es el banco de registros de 16 bits cada uno. Se llama
banco de registros de trabajo y cada uno tiene una función concreta como se puede ver en la tabla
de la Figura 3.5.
44 dsPIC. DISFÑO PRÁCTICO DE APLICACIONES
W0-YV3 Registros usados para contener resultados de las operaciones DIV y MUL.
W 14 Marco de la pila.
a) Las instrucciones destinadas al control del flujo (saltos, llamadas y retornos) que ocupan dos ciclos
al tener que limpiar y volver a llenar el Registro de Instrucciones IR y el buffer de prebúsqueda.
b) Las instrucciones que deben acceder a un operando en el espacio de la memoria de programa.
c) Las instrucciones que manejan dobles palabras.
El dsPIC30F6010 posee 7 puertas de E/S cuyas líneas soportan varias funciones multiplexadas, ade
más de la propia línea de E/S digital. En la Figura 3.1 se aprecia la existencia de 68 líneas de E/S
multifunción, de las cuales 4 pertenecen a PUERTA A, 16 a PUERTA B, 5 a PUERTA C, 16 a
PUERTA D ; 10 a PUERTA E, 9 a PUERTA F y 8 a PUERTA G. Como dicho modelo es uno de los
más completos de la familia, los restantes disponen de un subconjunto de las mencionadas puertas
en función de su patillaje.
Los dsP!C33F poseen al igual que el dsPIC30F6010, 7 puertas de E/S, cuyas líneas en este caso
también soportan varias funciones multiplexadas, además de la propia línea de E/S. Los dsPIC33F
pueden tener 87 líneas de E/S multifunción, de las cuales 14 pertenecen a PUERTA A, 16 a PUER
TA B, 8 a PUERTA C, 16 a PUERTA D, 10 a PUERTA E, 11 a PUERTA F y 12 a PUERTA G.
Cada línea de E/S controla varias funciones multiplexadas en el tiempo, la m ayor parte de ellas
destinadas a m anejar los periféricos integrados, quedando algunas dedicadas al control de los vol
tajes de alimentación, las interrupciones externas, las señales de reloj y las señales del sistema.
Una de las líneas de E/S que maneja más funciones diferentes es la RBO, que en la Figura 3.1 vie
ne representada con la nomenclatura: PGD/EMUD/AN0/CN2/RB0, que significa que soporta 5
funciones que se describen en la tabla de la Figura 3.6.
ARQUITECTURA DE LA CPU 45
Funciones Descripción
PCD Línea de entrada y salida de dalos en la grabación y lectura serie del disposilivo.
EMUt) Patita de entrada y salida de los datos principales del m ódulo l2C.
Los periféricos que se incorporan a cada uno de los modelos de la familia dsPIC30F son los más
adecuados para las aplicaciones a las que se destinan.
Periféricos analógicos
Con versor AD de 10 bits
Conversor AD de 12 bits
Periféricos digitales
5 temporizadores de 16 bits
Móduio de Captura con 8 entradas
Módulo de Comparación con 8 canales de salida
Interfaz para Codificador de Cuadratura
Control de Motores PWM
Módulos de comunicación
UARJ (2)
SPI™ (2)
?C™
CAN (2)
Periféricos analógicos
Conversor AD de 10 bits
Convérsor AD de 12 bits
Periféricos digitales
9temporizadores de 16 bits
Módulo de Captura con 8 entradas
Módulo de Comparación con 8 canales de salida
Interfaz para Codificador de Cuadratura
Control de Motores PWM
Controlador de DMA
46 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
3.WIRESPI'M(2)
«f!
.a
$
Módulo DCI (Data Converter lnlerface)(2)
Figura 3.7. Esquema de funcionamiento del sistema que alimenta al codificador óptico incremental
o de cuadratur¿i (QEI).
Los dsPJC30F contienen hasta 5 temporizadores de 16 bits, mientras que los dsPIC33F pueden dis
poner hasta de 9 de 16 bits, algunos de los cuales se pueden concatenar para formar otros de 32 bits.
Finalmente, los posibles módulos de comunicación son muy diversos en los dsPTC y suponen un
alto rendimiento en su conectividad. Destacan los módulos UART, SPÍ, Í2C, CODEC y CAN.
Esta sección del procesador se muestra en la Figura 3.8 y se encarga de la generación de las señales de
reloj, el control y optimización de la energía y la generación de las acciones adecuadas ante los fallos.
ARQUITECTURA DE LA CPU 47
Figura 3.8. Esquema simplificado de la sección encargada de la gestión del sistema y do la energía.
- 1 . IN T R O D U C C IÓ N
El Camino de Datos de un procesador es la sección encargada de realizar todas las operaciones que
eva la instrucción en curso. Soporta funciones aritméticas, lógicas, de desplazamiento, movi-
nto, rotación y manipulación de bits entre otras. En el caso de los DSC el Camino de Datos es
_z de manejar un repertorio de instrucciones que consta de las propias de una MCU de 16 bits,
to a otras específicas de un DSP y se organiza en 4 bloques principales:
1. BANCO DE REGISTROS
2 ALUDE 16 BITS
3. MOTOR DSP
4. UNIDAD DE DIVISIÓN
± 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 instrucción que les utilice. Cada uno lie-
isignadas funciones diferentes. (Figura 4.1.)
Como se indica en la Figura 4.1, algunos registros W actúan con algunas instrucciones conte-
nendo una información concreta, mientras otros asumen una función determinada.
En los microcontroladorcs PTC (MCU) existen instrucciones que no especifican el registro de tra-
fetjo que manejan y toman por defecto el que actúa como Acumulador. También sucede lo mismo
los DSC, en los que se toma por defecto como W REG al registro WO.
Como se muestra en el esquema de la Figura 4.2, el Banco de Registros comparte información
b h i todos los bloques que componen el Camino de Datos.
50 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
15 0
WREG IMPLÍCITO
W0
(ACUMULADOR)
RESULTADO W1
MULYDIV
W2
W3
W4
OPERANDOS
W5
INSTRUCCIONES
MAC W6
W7
'W8
DIRECCIONES
W9
OPERANDOS
MAC W 10
W11
PUNTERO PILA W 15
g
Figura 4.1. Estructura del banco de registros de trabajo W.
BUS DE DATOS X
SEÑALES UNIDAD
DE DE
ABj
CONTROL DIVISIÓN
Figura 4.2. El banco de registros Wes el destino y el origen de la información que comparten los blo
ques del Camino de Datos y los buses X e Y
Las instrucciones lógico-aritm éticas correspondientes a la sección MCU de los DSC las realiza
una ALU de 16 bits que también controla 5 bits del Registro de Estado (SR) que actúan como
señalizadores del resultado. En la Figura 4.3 se presenta la ubicación de dichos bits y su no
menclatura:
EL CAMINO DE DATOS 51
SRH contiene los señalizadores para operaciones aritmético-lógicas DSR mientras que SRL
contiene los señalizadores para operaciones MCU.
figura 4.3. El Registro de Estado (SR) contiene cinco bits señalizadores del resultado de la ALU pa
ra operaciones MCU.
La ALU realiza operaciones con operandos de 16 bits de suma, resta, desplazam iento de un
bit. otras de tipo lógico (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 través
del bus de datos.
Los operandos para la ALU pueden ser de 8 y de 16 bits. En las operaciones con 8 bits y para man-
Kfier la compatibilidad con los PIC el resultado se reescribe con tamaño palabra, no modificando el
byte de más peso y controlando los señalizadores para que actúen para dicho tamaño. Las instruc-
ciones con operandos de tamaño byte sobre registros de trabajo sólo afectan al byte de menos peso.
52 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Para facilitar el manejo combinado de instrucciones con operandos de 8 y de 16 bits hay dos ins
trucciones especializadas, la de Extensión de Signo (SE), que toma el valor del byte cargado en el
registro W o en la posición de memoria y lo convierte en una palabra de 16 bits extendiendo el bit
de signo y almacenando dicho valor en un registro W, y la instrucción de Extensión de Ceros (ZE),
que pone a cero los 8 bits de más peso de un registro W o de una posición de memoria y el valor ob
tenido lo carga en un registro W.
4.4. EL M O TO R DSP
Este bloque del Camino de Datos de los DSC se compone de un conjunto de recursos físicos que tie
nen la misión de soportar las instrucciones que conllevan operaciones complejas empleadas para re
solver los principales algoritmos aplicados en el procesamiento digital de las señales. La instrucción
MAC de M ultiplicar y Acumular es una de estas instrucciones típicas, que se denominan “instruc
ciones DSP”.
El Motor DSP recibe los operandos desde el banco de registros W, pero dispone de sus propios
registros para contener los resultados. Dado que sólo existe un Decodificador de Instrucciones pa
ra las tipo MCU y las tipo DSP y, por otra parte, las direcciones efectivas de los operandos proce
den del banco de registros W, no es posible ejecutar de forma concurrente instrucciones MCU e ins
trucciones DSP.
Internamente el Motor DSP trabaja con 40 bits, pero externamente se relaciona mediante buses
de 16 bits.
En la Figura 4.5 se presenta el diagrama por bloques del 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 través de los buses X
e Y en las instrucciones tipo MAC (MAC, MCS, MPY.N, ED, EDAC, CLR y MOVSAC). Para las
restantes instrucciones DSP los operandos se reciben desde el bus de datos X. También las instruc
ciones MCU que utilizan el Registro de Desplazamiento reciben los operandos por el bus de datos X.
Los resultados producidos en el M otor D SP se guardan en alguno de los Acumuladores A o B,
si así se define en la instrucción, o bien en cualquier posición de la memoria de datos a través del
bus de datos X. Las instrucciones MCU que emplean el Registro de Desplazamiento también sacan
el resultado por el bus de datos X.
Obsérvese en el esquema del 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 más operandos.
EL CAMINO DE DATOS 53
MPX 3 M PX4
MPX 6
SUMAOOR
MPX 2
REGISTRO
DESPLAZAMIENTO
RELLENO
CEROS
MULTIPLICADOR
17 x 1 7 BITS
CONVERSION
16 A 17 BITS
El multiplicador rápido de 17 x 17 bits es compartido por las instrucciones MCU y las DSP, siendo
posible realizar multiplicaciones con signo y sin signo y generar resultados con números enteros de
32 bits y con fracciónales tipo 1.31 (Q.31).
54 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
El multiplicador recibe datos de 16 bits y los convierte en 17 bits. Si los operandos tienen signo,
la conversión se efectúa extendiendo el bit de signo, y si no tienen signo, se extiende el valor con
ceros. La conversión es transparente para el usuario y permite soportar multiplicaciones con y sin
signo. (Figura 4.6.)
El bit IF del registro CORCON establece si la operación del multiplicador será de tipo entero o
fraccional en las instrucciones DSP: MAC, MSC, MPY, MPY.N, ED y EDAC.
Sin embargo, el bit IF no interviene en las instrucciones MCU que usan el multiplicador (MUL,
MUL.SS, 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.
EJEMPLO 1
¿Qué valor representa el número entero de 16 bits 4001 expresado en hexadecimal? (Figura 4.7.)
0 : 0 0
Figura 4.7. Valores que representan los bits del número entero 4001 en hexadecimal.
EL CAMINO DE DATOS 55
RESULTADO
EJEMPLO 2
1 o j o 0 i 0 0 0 0 0 0 0 0 0 1
1 i 0 i
. 1 ... !
5 o13 Á'l;2
2 14 2 11 2 10 2~ 28 2 2g 25 24 23 22 21 2o
Figura 4.8. Valores que representan los bits del número entero C002 Hex.
RESULTADO
EJEMPLO 3
Qué valor representa el número fraccional de 16 bits 4001 Hex? (Figura 4.9.)
m: 1 O 0 j O O
-2o. 2 '1 2 '2 2 3 2a
Figura 4.9. Valor que representan los bits correspondientes al número fraccional 4001 Hex.
RESULTADO
EJEMPLO 4
fi w 8¡8L! í TPf-
Qué valor representa el número fraccional de 16 bits C002 Hex? (Figura 4.10.) ' ,
:í: o 0 O 0 0 :0 \y
1
-2o. 2 1 2'2 2‘3 2*4 2*5 2 'e 2 2■
°3 o-9
2 'y 2o-10
'1U 2"11 ^-12 2"1J
o-11 2"'^ 0 -13 o-14
2",/} 2o-15
Figura 4.10. Valor que representan los bits del número fraccional C002 Hex
RESULTADO
En la tabla de la Figura 4 .11 se ofrecen los rangos en modo entero y fraccional para números de
16, 32 y 40 bits.
RA N G O RA N G O
R ESO LU C IÓ N
TAM AÑ O M O D O ENTERO M O D O FRA CCIO N A L
M O D O FRA C C IO N A L
(-2n i a 2 n'- 1 ) (-1.0 a 1 - 2 1N)
Figura 4.11. Tabla con los rangos en modo entero y fraccional de números de 16, 32 y 40 bits.
4.4.2. Acumuladores A y B
El M otor DSP dispone de dos Acumuladores de 40 bits denominados ACCA y ACCB, en donde
se guardan los resultados de las operaciones DSP que utilizan el m ultiplicador y que son MAC,
MSC, MPY, MPY.N, ED y EDAC. Cada Acumulador se divide en tres campos, como se muestra
en la Figura 4.12.
,31. 16.15. 9
ACCxU ACCrH ACCxL
Figura 4.12. Cada Acum ulador de 40 bits se divide en tres campos, que se implementan en 3 regis
tros STR de la memoria de datos.
Para operaciones en modo fraccionario que utilizan los Acumuladores, el punto fraccional se si
túa a la derecha del bit 31.
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 señalizadores en el Registro de Estado (SR) que indican sobrepasamiento o saturación
en las operaciones realizadas por el sumador de 40 bits. (Figura 4.14.)
El. CAMINO DE DATOS 57
MPX3 MPX4
Figura 4.14. Situación en el Registro de Estado de los 6 señalizadores del resultado de las operacio
nes del Sumador de 40 bits.
•' • . ; . . . . :;,vVv \ .. - : . ; -
1°: Multiplicación en modo entero o fraccionaI.
2 o Redondeo convencional o convergente.
3 CSaturación automática para ACCA.
4." Saturación automática para ACCB.
5 ° Saturación automática para escritura de datos en memoria.
6.° Selección del modo de saturación del Acumulador.
Manipulación
■w í Sy.
ta>viv.
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:
Antes de ser multiplicados, los operandos son procesados para convertirlos a 17 bits, ya que es
to simplifica la multiplicación MCU entre valores con signo y sin signo, y permite realizar correc
tamente la operación (-1 .0 x -1.0). El resultado de la operación puede ser un entero de 32 bits (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 añade un 0 a la derecha, y si es de tipo fraccionario queda
en formato 2.31, que luego puede transformarse al 1.31.
Posteriormente, el resultado deberá ser extendido a 40 bits para poder ser tratado correctamente
en el resto de los elementos del Motor DSP.
Los datos que se introducen al Motor DSP son de 16 bits, luego internamente se transforman en
40 bits y se manipulan. Finalmente, los resultados que proporciona el Motor DSP son de 16 bits al
tener que ser transferidos por el bus X
60
EL CAMINO DE DATOS 61
2 5 0 + 10 = 5 255
1 0 -2 6 9 -4 -255
Figura A.1. Ejemplos con aritmética modular y con saturación. Cuando de sobrepasan los límites, la
aritmética con saturación corrige el resultado al valor absoluto máximo posible.
7FFFh
OOOOh
8000h
Los dsPIC soportan dos modos opcionales de saturación que afectan a la salida del sumador de
40 bits :
Para la selección del modo de saturación se utilizan varios bits del registro CORCON. El bit SA
TA habilita y deshabilita la saturación del acumulador A y el SATB habilita y deshabilita la satura
ción del acumulador B.
Una vez activada la saturación, la selección del modo de saturación se realiza a través del bit
ACCSAT. Por defecto la saturación siempre está deshabilitada.
Por otro lado, el bit SATDW habilita y deshabilita la saturación en la escritura, la cual afecta a
la instrucción SAC, que almacena el Acumulador en la memoria de datos, y a la post-escritura de
los acumuladores.
Cuando la saturación está deshabilitada no se altera el resultado del sumador de 40 bits y traba
ja en un rango de -2 5 6 a ~ +256.0. Si excede de este rango de valores, el resultado no se satura y
mantiene el valor aunque este sea incorrecto.
62 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Para m anejar esta situación se utiliza la condición de “overflow catastrófico”, la cual se señali
za con un hit de flag en el registro TNTCON1, que puede gestionar una excepción Mcith Error (Error
Aritmético).
La saturación normal soporta el formato de datos 1.31, el cual utiliza un bit de signo y 31 bits frac
cionarios para representar el valor. El rango que admite este formato está comprendido desde -1.0
hasta - 1.0.
Cuando la saturación normal está habilitada, la salida del sumador está 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 operación destruye el bit de signo, el suma
dor saturará el resultado al máximo valor negativo de 32 bits o al máximo valor positivo de 32 bits.
(Figura A.3.)
Figura A.3. Representación del máximo valor positivo y negativo con 32 bits.
En este tipo de saturación nunca se producirá overflow, ya que se restringe el resultado a 32 bits
y los 8 bits restantes son para recoger la extensión de signo.
La súper saturación soporta el formato de datos 9.31, empleando 9 bits para representar un valor en
tero con signo y 31 bits para la parte fraccionaria.
En este modo de saturación la salida del sumador está limitada a un rango de 40 bits, cuyo valor
es almacenado en ACCxU : ACCxH : ACCxL y el bit de signo se guarda en el bit 7 de ACCxU, o
lo que es lo mismo en el bit 39 del acumulador.
Si una operación destruye el bit de signo el sumador saturará el resultado con una de estas dos
opciones :
39 ACCxU 32 31 ACCxH 16 «
15 A C C xl
01111111 g 1111111111111111
ACCxL
39 ACCxU 32 31 ACCxH 16 15
1000 0000 I 0000 0000 0000 0000
Figura A.4. Representación del máximo valor positivo y negativo con 40 bits.
La súper saturación permite realizar operaciones que admitan un rango mayor (± 2 5 6 ) que la sa
turación normal (± 1 ) aunque ambos procedimientos mantienen la precisión de la parte fraccionaria
con 31 bits.
Existe otro tipo de saturación que no tiene nada que ver con las comentadas anteriormente, se trata
de la saturación en la escritura del bus de datos X, que se origina cuando se almacena el Acumula
dor en una posición de la memoria de datos mediante una instrucción SAC. El Acumulador tiene 40
bits y tanto el bus X por el que se transfiere, como la posición de la memoria de datos son de 16 bits,
para lo cual sólo se almacenan los 16 bits correspondientes al campo ACCxH.
La saturación de escritura es accesible a través del bit SATDW en el registro CORCON y se en
carga de proporcionar un dato “limpio” de 16 bits al bus de datos X buscando la mejor conversión
posible, partiendo del valor de 40 bits del Acumulador.
En esta saturación no se modifica el valor del Acumulador, sino que se crea un nuevo valor de
16 bits a partir de él, para poderlo enviar por el bus X a una posición de 16 bits en una instrucción
SAC, o bien, al registro W13 en las instrucciones DSP con post-escritura.
La saturación de escritura es similar a la saturación normal, pero sólo se usan los 16 bits de
ACCxH, por lo que el rango de valores comprendo de —1.0 a ~ 1.0, pero con una precisión de 15 bits
(1.15 en vez de 1.31). El valor máximo será 0x7FFF ( ~ 1.0) y el mínimo 0x8000 (-1.0).
A.3. REDONDEO
Cuando se ejecuta la instrucción SAC.R o se lleva a cabo la post-escritura del acumulador, es nece
sario realizar una operación de redondeo para convertir el dato extraído del acumulador de 40 bits
a 16 bits y poder ser transportado por el bus de datos X. Lo que se obtiene como valor de 16 bits es
ACCxH que se redondea según el valor de ACCxL, que sólo se utiliza para realizar dicha función
de redondeo.
El redondeo, como la saturación de escritura no modifican el valor contenido en el acumulador,
sino que crea uno nuevo de 16 bits a partir de aquél que corresponde con el valor de ACCxH.
Para el redondeo existen dos modos de funcionamiento que se selecciona mediante el bit RND
del registro CORCON.
64 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Modelo del
5 procesador para
el programador
El programador de DSC, especialmente cuando utiliza el lenguaje Ensamblador, debe conocer la mi
sión y características principales de un conjunto de registros de la CPU. En la tabla de la Figura 5.1
se describe el nombre, la dirección que ocupa en la memoria y la descripción de los registros funda
mentales, que manejan las instrucciones del repertorio de los DSC. Los 2 KB iniciales de la memo
ria de datos están destinados a contener los registros específicos de control SFR del procesador.
Figura 5.1. Tabla que recoge el nombre, la dirección y la descripción de los registros que conforman
el modelo de la CPU para el programador de los DSC. Cada registro de 16 bits ocupa dos
direcciones del espacio de datos, cada una con un byte de datos.
65
66 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
En la Figura 5.2 se ofrece un esquema interno con la nomenclatura de los principales registros
usados por el programador.
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
v -v .w V
ACCAU ACCAH ACCAL
- .... ...... .
ACCBU ACCBH AC C B L
%
PC
TLBPAG .
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
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 O
DOSTART
D IR E C C IO N IN IC IO BU C LE DO
I
DOEND
D IR E C C IO N F IN A L B U C LE DO
CO R C O N
C O N T A D O R DE B U C LE S DO R E G IS T R O C O N F IG U R A C IO N N U C LE O
Figura 5.2. Representación gráfica de los principales registros del modelo de la CPU que utiliza el
programador de aplicaciones en lenguaje Ensamblador.
MODELO DEL PROCESADOR PARA EL PROGRAMADOR 67
^ operatividad del Camino de Datos está basada en el banco de registros compuesto por 16 que tie-
n una longitud de 16 bits cada uno y se denominan W 0-W 15. Dichos registros soportan muchas
-r:>iones en la ejecución de las instrucciones del repertorio.
Las instrucciones más comunes utilizan estos registros de trabajo para contener datos y direc-
; nes de memoria. Por ejemplo, la instrucción MOV W3, [W6J mueve el contenido del registro W3
i la posición de memoria cuya dirección está depositada en W6. El operando fuente es W3 mientras
t3De el destino está direccionado por W6. Otra instrucción que emplea los registros de trabajo para
a n e j a r operandos es ADD [W2], W4, W6, en la que un operando fuente es el contenido de la di
sección 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 actúa como operando destino.
Existe un tipo de instrucciones que utiliza el registro WO como registro de trabajo implícito cuan-
ic se le referencia como WREG. Son instrucciones similares a las que hay en el repertorio MCU en
fas que se hace una referencia implícita a un registro de trabajo que actuaba como Acumulador en
.i ALU. Por ejemplo, la instrucción ADD 0x3F00, W REG suma el contenido de WT0 con el alma
cenado en la dirección 0x3F00 y deposita el resultado en WO.
Como se desprende de la tabla de la Figura 5.1 los registros W0-W15 están mapeados en la rne-
- : ria de datos entre las direcciones 0000-001E y se pueden manejar como posiciones, de forma que si
desea mover el contenido del registro W2 a W4, se puede usar la instrucción MOV 0x0002,0x0004.
Al ocupar cada registro W un par de posiciones de memoria de tamaño byte se manipulan da-
los tipo palabra. El resultado de una operación con datos de tamaño byte afecta al byte de menos pe-
del registro de trabajo.
i Después dé realizar un Reset todos los registros de trabajo W toman el valor cero, excepto VZ15.
Los registros W0-W3 se utilizan para guardar el resultado de las instrucciones MUL y DIV. W0
ruarda el cociente de una dividisión y W 1 el resto, mientras que W 3:W2 guardan el resultado de la
multiplicación. Además actúan como “registros sombra” para las instrucciones PUSH.S y POP.S.
Los registros W4-W7 se dedican a contener los operandos de las instrucciones MAC, mientras que
■'.YS-Wll se emplean habitualmente para contener las direcciones de los operandos de las instruc
ciones tipo MAC. W12 actúa como desplazamiento u “ offset” y permite incrementar o decremen-
tar el valor al que modifica.
W13 en las instrucciones MCU, se puede usar como registro de trabajo. En algunas instruccio
nes MAC se emplea como registro de post-escritura, que consiste en la post-escritura del acumula
dor inactivo o no usado.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 SPLÍM que guarda el límite que puede alcanzar W 15.
5 .3 . REGISTROS SOMBRA
Algunos registros de la Figura 5.2 tienen asociados unos registros llamados “sombra”, que se usan
temporalmente para contener información que se envía o se recibe cuando ocurre algún suceso de
terminado. Ningún registro sombra puede ser accedido directamente.
68 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
El contenido de los registros sombra se transfiere cuando se ejecutan las siguientes instruc
ciones:
1) Las instrucciones PUSH.S y POP.S afectan a los registros sombra WO, W 1, W2, W3
y SR (sólo los bits DC, N, OV, Z y C). En el caso de PUSH.S el contenido de dichos
registros se carga en la Cima de la Pila, mientras que con POP.S los valores de la Ci
ma de la Pila se depositan en dichos registros. De esta manera se pueden salvar y res
taurar cómodamente los contenidos de estos registros en las llamadas a subrutina y en
las rutinas de interrupción.
2) La instrucción DO afecta a los registros sombra DOSTART, DOEND y DCOUNT que
los carga con los valores de la Cima de la Pila o deposita sus contenidos en la Cima de
la Pila. (Figura 5.3.)
¿5—-----*.... .........—«........—
DCOUNT
1
22.
DOSTART
DOEND
1
En la Figura 5.4 se supone que W15 está cargado con el valor 0x0800 y se ejecuta la instrucción
CALL para producir una llamada a subrutina. Para salvar la dirección de retorno al programa prin
cipal se salva en la Cima de la Pila el valor del PC<22:0> que al tener 23 bits ocupa dos posiciones
de memoria de 16 bits. Realizada la carga del PC, W 15 se incrementa automáticamente en 4, que
son los bytes utilizados para guardar al PC. Obsérvese en la figura que el byte de más peso de la pa-
abra donde se almacena PC<22:16> se carga con ceros.
MEMORIA
DE DATOS
RAM
15 _ 87
Figura 5.4. A l salvarse en la Cima de la Pila el PC que contiene la dirección de retorno al programa
principal, W15 se auto-incrementa en 4 unidades automáticamente.
La instrucción PUSH escribe en la Cima de la Pila el operando que conlleva. Por ejemplo,
PUSH W2 .escribe en la Pila los dos bytes del registro W 2 y después auto-incrementa W 15 en 2 uni-
:ades. Con la instrucción POP W2 se coge la palabra que apunta en la Pila W 15 y se deposita en
W2, decrementando en 2 unidades el valor de W15 automáticamente.
La instrucción PUSH W2 es equivalente a M OV W 2, [W15++], y POP W2 produce el mismo
resultado que MOV [-W 15J, W2.
El registro SPLIM guarda el límite de la Pila o el valor máximo que puede alcanzar el puntero
lie la Pila. El bit de menos peso vale cero para mantener los datos alineados. Tras el Reset SPLIM
carga con ceros impidiendo la detección del desbordamiento de la Pila hasta que el programador
no cargue a SPLIM con un valor válido.
Un M arco de Pila es una porción de la mism a que se destina a una subrutina concreta. W14
contiene la dirección del M arco y se inicializa y se abandona dicha función 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 es-
lado y de las condiciones especiales que se han producido en el resultado de la operación aritméti
co-lógica que se acaba de realizar, bien en la sección MCU o en la DSP.
El byte de menos peso se denomina SRL y se corresponde con la sección MCU. Guarda la in-
íormación de los siguientes señalizadores:
70 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
•■■■■:■ i i f i
• N es el bit de signo, y si no se trabaja con signo es simplemente el bit de más peso.
• QV indica que el resultado de la operación realizada ha producido un sobrepasamiento.
• Z indica que el resultado de la operación realizada es cero.
• C es el señalizador de acarreo en las sumas y restas.
• IPL<2:0> son los tres bits, que junto con IPL3 que se ubica en el registro CORCON, conforman
el nivel de prioridad que tiene la CPU frente a las interrupciones. Para atender una interrupción el
peticionario deberá tener mayor nivel de prioridad que el de la CPU.
• RA informa si se encuentra activo un bucle REPEAT.
ESTADO DSP
Figura 5.5. Los bits del Registro de Estado informan principalmente sobre el resultado obtenido en
las instrucciones aritméticas de la sección M CU y la DSP.
El byte de más peso, SRH, soporta los bits que detectan condiciones especiales del resultado pro
ducido por las instrucciones DSP desarrolladas con el Sumador de 40 bits y que depositan el resul
tado en uno de los Acumuladores A y B.
En este registro reside el bit IPL3, que concatenado con los 1PL<2:0> de SR conforman el código
que determina el nivel de privilegio de interrupción de la CPU. Otros bits se destinan al control de
la operación de multiplicación DSP, del bucle DO, del redondeo y de algunos otros aspectos rele
vantes de la CPU. Como se muestra en la Figura 5.6 los tres bits de más peso de CORCON no es
tán implementados y siempre se leen como ceros.
i s a * Gs EBT DL2 bu ;PL0 SATA SATB SATOW ACGSAT| !PL3 psv-_ RND 'F J
*•!•' *1
Figura 5.6. Distribución de los bits del registro de control del núcleo CORCON.
M O D ELO DEL PRO CESADO R PARA EL PRO GRAM A D O R 71
Para completar una visión general del conjunto de registros importantes que intervienen en la pro
gramación de los dispositivos DSC, se describen de forma resumida los siguientes.
CAPITULO
m
f La memoria
.
de datos
memoria de datos RAM de los DSC se divide en dos espacios, llamados X e Y, que son consi-
'os como independientes por algunas instrucciones DSP, mientras que las instrucciones MCU
yan toda la memoria como un espacio unificado y lineal de direcciones. Cada espacio dispone
sus propios buses de datos y de direcciones, ambos de 16 bits, lo que supone que el rango de di-
mamiento alcanza 64 KB o 32 K palabras de 16 bits cada una que se hallan alineadas en di
mes pares.
Como se refleja en la Figura 6.1 las 32 K palabras que abarca el espacio de la memoria de datos
áh 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 ds-
5F existen memorias de distintos tamaños: 8 KB, 16 KB y 30 KB.
Te acuerdo con el espacio de memoria de la Figura 6.1 de 8 KB de SRAM, los espacios X e Y
n de 4 KB cada uno.
Les 8 KB inferiores de la memoria de datos (OxOOO-Ox 1FFF) se denominan “M emoria Cercana”
se caracteriza porque sus posiciones pueden ser accedidas utilizando únicamente los 13 bits del
de dirección absoluta que está reservado en el formato de las instrucciones que trabajan con
onamiento directo.
Les espacios X e Y tienen opciones de acceso diferentes según se trate de instrucciones MCU o
y según se realice una lectura o una escritura. En todas las operaciones de escritura de datos,
73
74 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
0x0000
W m ESPACIO SFR
SFR < ; (2KB)
0X07FE
0x0800
•
MEMORIA
ESPACIO DE DATOS X
>- CERCANA
(4KB)
SSSfiSfl (8KB)
à i?
ESPACIO SRAM ) 0x17FE
8KB 0x1800
,
0x27FE
0x2800
.
NO DISPONIBLE
.
■ ' : ■■ . ■•-
---- ----------- -------------------- 0x8000
•IV.’.V.V•/.•'vX'IV/ -V/ /.yV-V/.,.,-,-. .v.-
••
gm m m . 8 1
OPCIONALMENTE ESPACIO DE DATOS X
MAPEABLE EN NO IMPLEMENTADO
LA MEMORIA ' (32 KB)
DE PROGRAMA
íSí^íívÁM^á*!
'
.
P_____
l l | É\_____
lÉ f ¡OxFFFE
Figura 6.1. Estructura interna de la memoria de datos para un modelo dsPIC30F con una capaci
dad de memoria SRAM de 8 KB disponibles para el usuario (modelos dsPIC30F6010 y
dsPIC30F6014).
independientemente del tipo de instrucción que se trate, se accede a la memoria de datos como si los
espacios X e Y conformasen un único espacio lineal de direcciones. De la misma manera se con
templa el espacio de datos en las operaciones de lectura por parte de las instrucciones MCU.
En la lectura de datos de las instrucciones DSP es posible acceder de forma independiente y si
multánea a los espacios X e Y. En esta situación los registros W8 y W9 actúan como punteros de di
recciones del espacio X, y W10 y W 11 como punteros de direcciones de las posiciones a leer en el
espacio Y. La Figura 6.2 muestra lo explicado de forma esquemática.
LA MEMORIA DE DATOS 75
BUS DE BLIS DE
DATOS Y v DATOS X
SRAM SRAM
DATOS Y i DATOS X
RAGU X
(LECTURA X)
I BUS DE BUSES DE
DIRECCIONES DIRECCIONESj
X -p WAGU X
AX) I
(ESCRITURA X)
I
I AGUXI
— ^ -------
r
ni
DATOS MAPEADOS
EN MEMORIA
PROGRAMA
Figura 6.2. Las instrucciones DSP pueden acceder en lectura simultáneamente a datos de los
espacios X e Y.
Las direcciones de acceso a los espacios X e Y son generadas por las Unidades de Generación de
Direcciones AGUX y AGUY, respectivamente. La AGUX consta de una sección destinada a la lec
tura de datos. RAGUX, y otra para la escritura, WAGUX. Para aumentar el rendimiento del proce
sador RAGUX com ienza el cálculo de la dirección efectiva de un operando en el ciclo anterior al de
ht instrucción al que corresponde, de manera que cuando se inicia la ejecución ya es capaz de colo
r ir en el bus de direcciones de lectura del espacio X la dirección de la posición a acceder. Por el con
trario, WAGUX comienza el cálculo de la dirección de la posición a escribir al empezar la ejecución
de la instrucción, pero ya la tiene disponible al llegar la fase de escritura.
La AGUY funciona igual que RAGUX adelantando el cálculo de la dirección, pero sólo funcio
na en las operaciones de lectura, no siendo posible realizar escrituras en el espacio Y.
Los datos se colocan en la memoria, alineados de form a que el byte de menos peso se sitúa en la
dirección par y el de menos peso en la impar superior.
Con carácter opcional el programador puede mapear los 32 KB superiores del espacio de la memo
r a de datos en una página del espacio de la memoria de programa que consta de 16 K palabras de
14 bits cada una. A este modo de trabajo se le llama “Visibilidad de Espacio de Programa (PSV)” y
re m ite un acceso transparente de constantes desde el espacio de datos X sin necesidad de emplear
76 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
instrucciones especiales como las de Tabla. De los 24 bits de cada posición del espacio de la me
moria de programa sólo son válidos los 16 de menos peso.
Para obtener la dirección efectiva del PSV en la memoria de programa se necesitan 23 bits. Los
15 bits de menos peso de dicha dirección corresponden a los 15 bits de menos peso del registro W
que contiene la dirección efectiva del espacio de la memoria de datos. Los 8 que faltan para com
pletar la dirección efectiva PSV se toman del registro PSVPAG. (Figura 6.3.)
wn
PSVPAG DIREC CIÓN ESPACIO DE DATOS
:7 Ó. 15 . . '1 4 * ..0
22 ............ ,
Figura 6.3. Formación de la dirección efectiva PSV a partir de ¡os 8 bits del registro PSVPAG y los 15 de
menos peso del registro Wn que contiene la dirección del espacio de la memoria de datos.
Existen bastantes algoritmos DSP en los que se repiten ciertas operaciones sobre un conjunto de da
tos. Dichos conjuntos implementan buffer circulares que hay que recorrer ordenadamente. Esta si
tuación es habitual en el cálculo de los filtros F1R (Finite Impulse Response). Para optimizar el pro
cesamiento de este tipo de cálculos se ha desarrollado un conjunto de recursos hardware que
soportan el modo de direccionamiento modular o circular. De esta manera se evita el uso de software
para realizar este tipo de algoritmos y, en consecuencia, la gestión hardware de los buffer o tablas
de datos consigue mucha mayor rapidez.
Para recorrer los buffer circulares se utiliza un puntero que se desplaza desde el principio al fi
nal incrementando o decrementando su valor, incluso de forma bidireccional, como se muestra en
la Figura 6.4.
El hardware que incluyen los DSC exime al programador de comprobar constantemente el va
lor del puntero para no rebasar el límite y regresar a la posición de inicio cuando ha terminado de
recorrerlo. Para conseguir esta característica existen unos registros hardware que soportan la opera-
tividad de este direccionamiento.
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 posición inicial del buffer hasta la final. Cuando el
puntero se decrcm enta se recorre el buffer desde la posición 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 código binario del registro W que actúa como puntero del
LA MEMORIA DE DATOS 77
BUFFER BUFFER
INCREMENTAL DECREMENTAL
BUFFER
BIDIRECCIONAL
Figura 6.4. El buffer circular se explora mediante un puntero que soporta direcciones ascendentes,
descendentes o en ambos sentidos.
buffer se carga en los 4 bits de menos peso del registro MODCON<3:()>. El código 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 esquemática la estructura del registro MODCON.
Byte Alto
BW M <3:0>
Bit 15 Bit 8
Byte Bajo
Figura 6.5. El registro M O D C O N en su totalidad. Los bits BW M<3:0> se utilizan para e l Bit Reverse.
Los bits U-0 no se han implementado y se leen como ceros.
78 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Dirección
MOV #0x1100, W0
MOV W 0. XMODSRT establece dirección de comienzo
MOV #0x1163, W0
/ MOV W0, XMODEND establece dirección de final
0 x1 1 0 0 MOV #0x8001 , WO
MOVWO, MODCON habilita W1, AGU X para direcc. modular
MOV #0x0000, WO WO contiene el valor de relleno del buffer
MOV #0x1100, W1 W1 apunta al buffer
DO #49 , FILL rellena los 50 espacios del buffer
FILL:
MOVWO, [W1++] para rellenar siguiente dirección
0x1163
Dir. Comienzo = 0x1100
Dir. Final = 0x1163
Longitud = 50 palabras
Figura 6.6. Ejemplo de exploración del buffer incremental con direccionamiento modular.
Dirección
MOV #0x11E0, WO
MOV WO . XMODSRT ; establece dirección de comienzo
MOV #0x11FF , WO
MOVWO, XMODEND ; establece dirección de final
MOV #0x8001 , WO
0 x 1 1 EO
i MOV WO , MODCON ; habilita W1, AGU X para direcc. modular
'• MOV #0x000F , WO ; WO contiene el valor de relleno del buffer
I MOV #0x11 FE , W1 ; W1 apunta al buffer
DO #15, FILL ; rellena las 16 palabras del buffer
MOV WO, [W 1-] ; para rellenar la siguiente palabra
I FILL:
! DEC WO. WO ; se decrementa el valor
Figura 6.7. Ejemplo de exploración del buffer decremental con direccionamiento modular.
LA MEMORIA DE DATOS 79
Las direcciones de la tabla de datos iniciales sobre la que se aplica el algoritmo FFT (Transforma
da Rápida de Fourier) se reordenan en una tabla de resultados de acuerdo con unas reglas que so
portan en hardware los DSC y que se controla con el direccionamiento por inversión de acarreo o
“bit reverse”. Se trata de un direccionamiento indirecto especial que sólo se realiza a través del ge
nerador de direcciones WAGUX para instrucciones de tamaño palabra y con la colaboración de los
registros específicos XBREV y MODC.ON.
Lo que hace el procedimiento de “bit-reverse” es crear un ordenamiento que facilitará el poste
rior cálculo de la FFT, y lo consigue intercambiando los bits del puntero de direcciones entorno al
punto central de dicha dirección, con lo que el resultado es la “imagen espejo” de dicha dirección.
Se tomarán en cuenta a la hora de realizar el intercambio tantos bits como sean significativos según
el tamaño del buffer, es decir, si el buffer tiene un tamaño de 4 bytes, se rotarán los 2 últimos bits,
si tiene 8 bytes, se rotarán, los 3 últimos bytes, y así sucesivamente.
EJEMPLO
Se dispone de un buffer de 8 bytes, siendo la unidad de manejo del buffer el byte, y se desea aplicar
el direccionamiento p o r ubit reverse ”. A l ser el tamaño del buffer de 8 bytes, se cogen los 3 últimos
bits de la dirección, procediendo a rotar estos 3 bits en torno al bit I (el central) creando el “espe
j o ” de la dirección original, como se muestra en la Figura 6.8. Aplicado dicho método, el conteni
do de las direcciones del buffer queda dispuesto como se muestra en la Figura 6.9.
0X0100 0X0100
0X0101 0X0104
0X0102 0X0102
0X0103 0X0106
0X0104 0X0101
0X0105 0X0105
0X0106 0X0103
0X0107 0X0107
Figura 6.9. Buffer antes y después de realizar las operaciones de "bit reverse"
80 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
MODCON o
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 operación de "b it reverse".
Si se toma al registro W1 como puntero para el direccionamiento por inversión de acarreo hay
que tener en cuenta que el valor inicial que corresponde a la dirección de lectura del dato se trans
forma en otro valor que corresponde con la dirección donde se escribe el resultado, pero siempre
dentro de las direcciones límite de la tabla. Para W 1 el código BWM<3:0> = 0001.
2a. Se activa el direccionamiento por inversión de acarreo poniendo a 1 el bit 15 del registro
XBREV (XBREV<15> = BREN = 1). (Figura 6.11.)
XBREV
MODIFICADOR (XB)
Figura 6.11. Estructura del registro XBREV con su b it BREN resaltado, que permite o no la operación
de "b it reverse".
3a. Se establece el valor del “m odificador’ que actúa sobre el valor del registro puntero fuente
usando los 15 bits de menos peso del registro XBREV (XBREV<14:0>).
Los valores del modificador que se carga en XBREV<14:0> dependen del tamaño de la tabla o
buffer de datos sobre el que se aplica el algoritmo FFT y se presentan en la tabla de la Figura 6 .12.
Figura 6.12. Valor del modificador XB que se carga en XBREV<14:()> y que depende del tamaño del
buffer de datos de entrada medido en palabras.
LA MEMORIA DE DATOS 81
Para transformar el valor inicial del registro indirecto W según el direccionamiento por inver
sión de acarreo, el hardware auxiliar lo modifica sumando al mismo un valor. Este valor será el del
modificador XB en caso de que el tamaño de los elementos sea de byte, y será XB multiplicado por
2 en caso de que los elementos que se manejen sean de tamaño word (2 bytes). Sin embargo, dicha
suma es especial porque se efectúa de izquierda a derecha y si se genera acarreo se traslada hacia
la derecha, o sea, al revés de como se hace normalmente. Por eso se ha denominado a este direc
cionamiento de inversión de acarreo.
Se propone un ejemplo de aplicación para comprender la obtención de la dirección final que pa
sa a contener el registro Wn cuando se utiliza el direccionamiento “bit reverse”.
EJEMPLO
Se dispone de un buffer de datos de 16 palabras a las que se direcciona indirectamente con el re
gistro W2 (BWM<3:0> = 0010). El modificador XB según la tabla de la Figura 6.13 vale 0x0008
v se comienza suponiendo que W2 contiene la dirección 0x000 que apunta a la palabra WO. El bit
de menos peso de W2 siempre vale 0 para apuntar a datos de tamaño palabra.
La modificación del valor inicial de W2 se logra sumando en dirección inversa el valor del 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 revés que cuando se suma normalmente.
Para que el valor 0x0008 no afecte al bit de menos peso se ha desplazado un bit a la izquierda
que es lo mismo que multiplicar 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.
* 1 0 0 0 0 SE LE SUMA XBx2
Figura 6.13. Secuencia de transformaciones del contenido del registro W2 al aplicarle el direcciona
miento p o r inversión de acarreo. Apréciese que la suma del modificador se hace de for
ma inversa y que cuando hay acarreo se traslada hacia la derecha.
82 dsPIC. DISEÑO PRÁCTICO DE APLICACION ES
Del ejemplo estudiado se desprende que la misión del modificador XB es determinar el lugar
desde donde comienza a transformarse la dirección. En este caso los bits que se transforman en la
dirección destino son W2<5:1>. El bit de menos peso siempre vale 0 y el bit 5 es donde comienza
el intercambio. (Figura 6.14.)
DIRECCIÓN INICIAL
W2
XB<14:0>=0x0008
LOS BITS 1-4 DE LA
DIRECCIÓN SE
INTERCAMBIAN
W2
Figura 6.14. El valor del m odificador XB<14:0> determina el bit donde comienza a transformarse
la dirección. En el ejemplo propuesto los 4 bits que cambian de lugar en la dirección
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 cálculo de la siguiente dirección se suma XBx2 en sentido inverso y con
inversión de acarreo.
CAPITULO
La memoria
de programa
M . ESTRUCTURA Y DISTRIBUCIÓ N
El máximo espacio disponible de los dispositivos dsPIC para la memoria de programa es de 4 M po
siciones de 24 bits cada una, aunque en los modelos actuales no se sobrepasa las 86 K posiciones de
24 bits implementadas con memoria FLASH para contener los programas del usuario.
La mitad inferior del espacio de memoria recibe el nombre de Espacio de Memoria del Usuario
\ abarca 2 M posiciones, desde la 0x000000 hasta la 0x7FFFFF. La otra mitad se llama Espacio de
Memoria de Configuración y comprende desde la dirección 0x800000 hasta la OxFFFFFF.
En el Espacio de Memoria del Usuario residen el Vector de Reset que consiste en una instruc
ción GOTO que apunta a la primera instrucción del programa; la Tabla de Vectores de Interrupción,
cuyo tamaño en los dsPIC33F será mayor puesto que habrá más interrupciones debido a que dispo
ne de más periféricos; la Tabla Alternativa de Vectores de Interrupción que es una imagen de la Ta
bla de Vectores de Interrupción; la memoria FLASH para el usuario, cuya capacidad máxima para
k>s dsPIC30F es 124 KB y para los dsP!C33F es 256 KB; y la zona de datos EEPROM, que en el
jaso de los dsPIC33F no existe.
En el Espacio de M emoria de Configuración se encuentran los registros para la configuración
ie l dispositivo y las posiciones ID destinadas a la identificación (DEVID). (Figura 7.1.)
Todas las posiciones del mapa de la Figura 7.1 son pares y sus direcciones de 23 bits tienen siem-
rre a cero el bit de menos peso. En el caso de los dsPIC33F no existe espacio para EEPROM y las
Tablas de Vectores de Interrupción son más grandes.
Hay tres procedimientos para acceder al espacio de direcciones de la memoria de programa:
1o) Directamente a través de los 23 bits del Contador de Programa (PC). Así se accede a la siguien
te instrucción a ejecutar.
' 2 :) Mediante las instrucciones especiales de lectura de Tabla (TBLRD) y escritura de Tabla (TBLWT).
Se accede a datos.
3°) Mapeando un segmento de 32 KB de la memoria de datos en el espacio de direcciones de la me
moria de programa. Se accede a datos.
83
84 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
23
"RESET- INSTR U C C IÓ N GOTO 000300
I RESET- DIR EC C IÓ N DESTINO 000002
000004
T A 8 L A DE VECTO RES DE
INTERRUPCIÓN
00007E
000080
ESPACIO RESERVADO
000082
DE 00C084
MEMORIA T A BLA ALT E R N A TIV A DE
DEL VECTO RES D E INTERRUPCIÓN
0000FE
USUARIO M EM O RIA P R O G R A M A USUARIO 000100
(2 M x24) FLASH 017FFE
018000
R ESERVADO
7 FEFFE
7FF000
EEPROM DATOS {4 K BYTES)
A
in -¡SI
R ESERVADO
800000
8005BE
8005C0
UNITID (32 INSTR U C C IO N E S)
8005FE
ESPACIO 800600
DE MEMORIA DE RESERVADO
CONFIGURACIÓN F7FFEE
(2 M x24) REG ISTRO S DE CO NFIGURACIÓ N F 80000
DEL DISPO SITIVO F800CE
F 80010
R ESERVADO
FEFFFE
FFOOOO
DEVID
Y FFFFFE
Figura 7.1. Distribución del espacio de direcciones de la memoria de programa para un dsPICJOF.
El tamaño de la FLASH y la EEPROM depende del dispositivo específico que se trate.
En bastantes aplicaciones es muy interesante poder guardar en la memoria de program a datos que
posteriorm ente pueden ser leídos. Además de am pliar la capacidad de almacenamiento de la m e
moria RAM, la información almacenada en la m em oria FLASH del programa se convierte en no
volátil.
LA MEMORIA DE PROGRAMA 85
SU 000 000
ESPACIO
MEMORIA
USUARIO
i LSB
23 24
PC 0 ~ ~ f~ INSTRUCCIÓN <r*
______________ b
22
I SIEMPRE 0
IR
>7FF FFE
Figura 7.2. El PC sólo incrementa el valor de los bits PC<21:1>, manteniendo a 0 el de menos peso
para conseguir un direccionamiento secuencial de las direcciones pares en que se en
cuentran las instrucciones de programa.
Para poder utilizar el espacio del programa para leer y escribir datos los DSC disponen de dos
procedimientos:
.............
a) Utilizando ias instrucciones de Tabla que $e encargan de releer y escribir datos en la memoria de
programa.
b) Mapeando los 32 KB correspondientes a las direcciones más altas del espacio de la memoria de
datos en una página de la memoria de programa de 16 K palabras de 24 bits. Este procedimiento
se denomina "Visibilidad del Espacio de Programa (PSV)".
Son 4 instrucciones del repertorio de los DSC que permiten leer o escribir la palabra baja o la al
ta de una Tabla. La Tabla está formada por posiciones de la memoria de programa que constan de
,: I bits, o sea, 4 bytes, de los cuales el de más peso no es válido y sus bits siempre se leen como
ceros. A este byte se llam a “byte fantasma”. (Figura 7.3.)
86 dsPIC. DISEÑO PRÁCTICO DF APLICACIONES
MEM ORIA. D E P R O G R A M A
BYTE
■
Ox 000206 0000 0000
I
31 23 16 15 9
— PALABRA ALTA —► PALABRA BAJA—►
Figura 7.3. La Tabla existente en la memoria de programa destinada a los datos tiene posiciones de
cuatro bytes, de los cuales el de más peso no es válido y se llama byte fantasma.
Las instrucciones de Tabla utilizan como dirección efectiva de 23 bits para una posición de la
memoria de programa, la concatenación de los 16 bits de un registro W con los 8 bits del registro
TBLPAG. El bit de menos peso del registro de trabajo siempre a 0. (Figura 7.4). El registro Wn con
tiene la dirección efectiva de la memoria de datos.
Figura 7.4. Para direccionar una Tabla de datos en la memoria de programa se utiliza una dirección
de 24 bits formados por la concatenación de un registro Wn y el registro TBLPAG. Como
el b it de menos peso de Wn siempre vale 0 las direcciones generadas siempre son pares.
Wn contiene la dirección efectiva de la memoria de datos.
Con TBLRDH y TBLWTH se lee y escribe la palabra alta de la tabla, siendo posible el acceso
al byte bajo y alto de cada palabra individualmente. El byte alto de la palabra alta no está implenta-
do y se llama “byte fantasma”.
EJEMPLO
La instrucción TBLRDL W3,W4, lee los 16 bits de menos peso de lo posición de lo memoria de pro
grama cuya dirección se form a con TBLPAG: W3 <14:0> y los deposita en W4.
LA MEMORIA DE PROGRAMA 87
El otro método que permite leer y escribir datos en la memoria de programa consiste en mapear el
trozo de 32 KB de direcciones más altas (0x800000 - OxFFFFFF) de la memoria de datos en una pá
gina de 16 K palabras de la memoria de programa. Este procedimiento recibe el nombre de Visibi
lidad del Espacio de Programa o abreviadamente PSV.
Como cada posición de la memoria de datos es de 16 bits y la de la memoria de programa de 24
bits, se deshecha el byte de más peso de esta última. A sí cada posición de la memoria de datos ocu
pa una posición en la memoria de programa.
Las instrucciones que utilizan el PSV requieren de un ciclo de instrucción extra para ejecutarse.
El ciclo de instrucción adicional sirve para direccionar el dato PSV dentro del bus de memoria de
programa. Para poner en macha el PSV se pone a 1 el bit PSV residente en el registro CORCON.
La dirección que apunta la posición de la memoria de programa se obtiene concatenando los 8 bits
jel registro PSVPAG con los 15 bits de menos peso de un registro de trabajo Wn. Cuando se traba-
i en modo PSV W n<15> = 1, mientras que en modo normal W n<15> = 0, es decir, que el bit de
n ás peso de la dirección efectiva de la memoria de datos vale 1 (mitad superior). Con el bit de me
ros peso de Wn se puede seleccionar el byte a acceder dentro de la palabra. (Figuras 7.5 y 7.6.)
DIRECCION EFECTIVA
1514
ricura 7.5. ‘ l.a dirección afectiva de 23 bits que apunta la posición de la memoria de programa se for
ma con los 8 bits del registro PSVPAG concatenados con los 15 bits de menos peso de
Wn. En m odo PSV Wn>15> = 1 y el bit Wn>0> selecciona el byte a acceder en la pala
bra. Wn contiene la dirección efectiva de la memoria de datos.
IPLO
PSV= 1, la instrucción M O V 0xF052, W2 carga los 16 bits de menos peso de la dirección de la me-
tria de programa form ada por la concatenación PSVPAG: 7052 en el registro W2.
i grabar las memorias FLASH y EEPROM de los DSC hay dos métodos:
■
ESPACIO DE PROGRAMA
2? , , ■■■■■ . Q
ESPACIO DE DATOS
0x0000
/i 6 DAT O
lE I D O
EL BYTE DE MÁS
PESO NO SE LEE-------------- ►
EN MODO PSV
Figura 7.6. Los 8 bits de más peso de la posición del espacio de programa no son válidos por lo que
cada posición de la memoria de datos ocupa una posición en la memoria de programa.
La memoria EEPROM está mapeada dentro del espacio de la memoria de programa y según el
modelo que se trate puede alcanzar hasta una capacidad de 2 K palabras de 2 bytes de contenido ca
da una en los dsPIC30F. Los dsPIC33F no disponen de memoria EEPROM.
Las técnicas usadas para la grabación de la EEPROM de datos y la FLASH son similares cuan
do se usa el método RTSP. La única diferencia destacable entre ambos tipos de memoria es la can
tidad de datos o información que puede ser grabado o leído en cada ciclo de grabación/borrado.
Esta técnica la desarrolla el usuario mediante las instrucciones de Tabla que transfieren información
entre la memoria de datos y la de programa. Con las 4 instrucciones de Tabla comentadas anterior
mente se leen o escriben los 16 bits de la palabra baja o los bits <23:16> de la palabra alta. La di
rección efectiva de la posición de la memoria de programa se forma con los 8 bits del registro TBL-
PAG y los 16 de un registro Wn, que contiene la dirección efectiva de la memoria de datos.
EJEMPLO 1
Programa para depositar en los registros W2:W3 los 24 bits válidos de la posición de la memoria
de programa cuya dirección queda definida por tbIpage: tbloffset.
LA MEMORIA DE PROGRAMA 89
18
:• vIvví-T1
MOV #tblpage, WO ; carga en WO el valor EA<23:¡6>
MOV WO, TBLPAG ; carga WO en registro TBLPAG
MOV tttbloffsct, WO ; carga EA<I5:0> en WO
EJEMPLO 2
También es posible grabar y leer la memoria de programa con datos de tamaño byte dentro de
cada una de sus palabras.
Para la grabación/borrado de múltiples datos de la FLASH y la EEPROM se utilizan tres regis
tros de control NVM (M emoria No Volátil).
1 PALABRA 0x4044
BORRADO
16 PALABRAS 0x4045
EEPROM
1 PALABRA 0x4004
GRABACIÓN
16 PALABRAS 0x4005
Figura 7.7. Valores que hay que cargar en NVM CO M para llevar a cabo diversas operaciones con las
memorias FLASH y EEPROM.
BYTE ALTO
15
•.v a -.v / a \ w a w w w .«.w .*
BYTE BAJO
7 0
El registro NVM ADR contiene los 16 bits de menos peso de la dirección efectiva (EA<15:0>)
de la posición a grabar o borrar. Este registro lo manejan automáticamente las instrucciones de Ta
bla y el usuario puede modificarlo cuando lo desee.
El registro NVADR se muestra en la Figura 7.9. NVADR <15:0>: indica la posición de memo
ria en la que se quiere grabar o borrar.
o w o w M e nw o o i x c a w o o f j j o e a jooarac—
BYTE BAJO
i .......... n i ............... ih h jih ih i umili ■ ■»» * ■> m u il il■inni— M nnrwiniwn n~ ~i r i " ir i r r r r ~ r n i r i n " ~
N V M A D R <7 :0 >
: -
El registro NVMKJEY sólo puede ser escrito y su misión es evitar grabaciones o borrados acci
dentales. Se le utiliza para guardar unos valores claves o de seguridad, que se indican a continua-
ción:
Las interrupciones deberán ser deshabilitadas durante la secuencia anterior. Tras esta secuencia,
la escritura estará permitida al registro N VMCON durante un ciclo de instrucción.
Con la técnica RTSP se pueden borrar 32 instrucciones o 96 bytes simultáneamente y se pueden
grabar 4 instrucciones (12 bytes) a la vez.
EJEMPLO
El programa que se propone de carácter didáctico muestra las instrucciones apropiadas para bo
rrar una línea de 32 instrucciones (96 bytes) en la memoria de programa.
M OV m ip a g e , WO
M OV WO, TBLPAG ; inicializa TfíLPAG
MOV v m ioffseU WO
M OV WO, NVM ADR ; in id a l iza NVMADR
; bloqueo de las
;interrupciones durante las 5
;siguientes instrucciones
DISi #5
el reloj y otra para transferir los datos serie a grabar mediante el interfaz SP1 y un software integral
de tipo “bootloader” cuyas especificaciones técnicas pueden encontrarse en las páginas del fabri
cante en Internet (www.microchip.com).
Este sistema de grabación se utiliza con gran efectividad en todo tipo de microcontroladores y
dispositivos programables, además de los DSC.
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 desvían el flujo de control en la ejecución de
instrucciones. Las interrupciones son provocadas por acontecimientos externos, como los que ori
ginan los periféricos integrados o las señales aplicadas en determinadas patitas. Las excepciones se
producen automáticamente cuando el procesador detecta algún error o anomalía en la ejecución de
una instrucción.
Los dsPIC30F atienden a 54 tipos de interrupción y 8 tipos de excepción bajo un sistema de con
trol de las" siguientes características:
93
94 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
para labores de em ulación y depuración ofreciendo un soporte para intercam biar la Tabla de Vec
tores entre el entorno de aplicación del usuario y el de las m encionadas labores. Estos rasgos
tam bién se activan eligiendo en las aplicaciones para evaluación de diferentes algoritm os soft
ware en tiempo de ejecución. Cuando no se usa la A1VT sus contenidos son los mismos que la
IVT. (Figura 8.1.)
54 VECTORES DE
INTERRUPCIÓN
VECTOR D E INTERRUPCIÓN 52
VECTOR DE INTERRUPCIÓN 53" Ox 00G07E
0X 000080
RESERVADO 0x000082
RESERVADO Ox 000084
FALLO DE OSCILADOR
ERROR DIRECCIONAMIENTO
FALLO DE PILA
ERROR ARITM ÉTICO
RESERVADO
RESERVADO
RESERVADO
Ox 0 0 0 0 9 4
VECTOR DE INTERRUPCIÓN 0
VECTOR DE INTERRUPCIÓN 1
VECTOR DE INTERRUPCIÓN 52
VECTOR DE INTERRUPCIÓN 53 UX OOOCr E
Figura 8.1. Espacios de direcciones ocupados por las tablas IVT y AIVT en el mapa de la memoria de
programa de los dsPIC30F
INTERRUPCIONES Y EXCEPCIONES 95
Figura 8.2. Direcciones de los vectores de IVT y AIVT en memoria de programa y causas que p ro
ducen interrupciones y excepciones en los dsPIC30F. No todos los modelos DSC dispo
nen de los mismos periféricos integrados y por tanto usan todos los vectores de la tabla.
(Continuación).
La Tabla de Vectores de Interrupción (IVT) de los dsP!C33F se muestra en la Figura 8.3. La IVT re
side en la memoria de programa empezando en la posición 0x000 004. La IVT contiene 126 vecto
res comenzando por 8 vectores de excepciones no mascarables a los que se añaden 118 vectores de
interrupción.
En general, cada fuente de interrupción tiene su propio vector. Cada vector de interrupción con
tiene una dirección de 24 bits donde se inicia la rutina de atención. El valor programado en cada
localización del vector de interrupción es el comienzo de la dirección de las rutinas de servicio de
interrupción asociadas (ISR). Los vectores de interrupción están organizados siguiendo el orden de
su prioridad natural; esta prioridad es inherente a las direcciones en la tabla de vectores. Por ejem
plo, la interrupción asociada con el vector 0 tom ará el control antes que otras con el mismo nivel
de prioridad.
La tabla de vectores de interrupción alternativa (AIVT) está situada después de la IVT, co
mo se 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 usarán los vecto
res alternativos en vez de los vectores principales. Los vectores alternativos están organizados
de la mism a m anera que los vectores de la IVT. La A IVT soporta tareas de depuración. El espa
cio de código para el usuario com ienza detrás de la AIVT, es decir, a partir de la dirección
0x000200.
INTERRUPCIONES Y EXCEPCIONES 97
R E S E T - INSTRUCCIÓ N GO TO Ox 000000
RESET - DIRECCIÓN GOTO Ox 000002
RESERVADO ________ 0x 000004
FALLO DE'O SC ILA D O R
ERROR DE D IR E C eiO N A M IE N TO
FALLO DE PILA 8 VE C TO R E S DE
ERROR ARITM ÉTICO EXCEPCIÓN
ERROR DMA
RESERVADO
uu
RESERVADO
VECTO R DE IN TERRUPCIÓN 0 Ox 000014
VECTOR’ DE IN TERRUPCIÓ N 1
118 VE C TO R E S DE
INTERRUPCIÓN
VECTO R DE IN TERRUPCIÓN 116 OxOOOOFC
VECTOR DE IN TERRUPCIÓ N 117 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 TERRUPCIÓN 0 Ox000114
í ..... ————
VECTO R DE INTERRUPCIÓ N 1
■
.
Figura 8.3. Espacios de direcciones ocupados por las tablas IVT y AIVT en el mapa de la memoria de
programa de los dsPIC33F.
En las Figuras 8.4 y 8.5 se presenta una tabla que m uestra las direcciones ocupadas por la IVT
y la AIVT junto a las causas que originan tanto las interrupciones com o las excepciones de los
dsPIC33F.
98 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Figura 8.4. Direcciones de los vectores de IVT y AJVT en memoria de programa y causas que produ
cen interrupciones y excepciones en los dsPIC33F. No todos los modelos DSC disponen de
los mismos periféricos integrados y por tanto usan todos los vectores de la tabla.
INTERRUPCIONES Y EXCEPCIONES 99
Figura 8.5. Continuación de la tabla con l¿is direcciones de los vectores de IVT y AIVT en memoria
de programa y causas que producen interrupciones y excepciones en los dsPIC33F.
La CPU funciona en todo momento con un nivel de prioridad para interrupciones y excepciones
comprendido entre ü y 15. Los periféricos y las interrupciones externas trabajan con niveles de prio
ridad entre 0 y 7. mientras que las excepciones operan con un nivel fijo cuyo valor oscila entre 8 y
I 5 y se consideran como interrupciones no mascarables dirigidas a detectar problemas hardware y
software. El nivel de prioridad de cada fuente de una excepción es fijo.
Para atender una interrupción o una excepción su nivel de prioridad debe superar el de la CPU.
Si una petición de interrupción procedente de un periférico o una patita específica tiene un nivel de
prioridad 0 se considera que está desactivada puesto que nunca podrá superar el de la CPU.
El nivel de prioridad de la CPU queda determinado por los 4 bits IPL<3:0>, estando ubicados los
tres de menos peso en SR<7:5> y el de más peso en CORCON<3>. Los niveles de prioridad de la
CPU comprendidos entre 0 y 7 se fijan con IPL<2:0>. Si, por ejemplo, IPL<2:0> = 4, no se permi
ten inteiTUpciones cuyo nivel de prioridad sea igual o menor que 4. En el caso que IPL<2:0> = 7 to
das las fuentes de interrupción están prohibidas. Cuando se activa TPL3 (CORCON<3>) se progra
ma el nivel de prioridad para las excepciones y puede valer de 8 a 15. Las excepciones tienen mayor
100 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
prioridad que cualquier interrupción de usuario. Los bits IPL<2:0> pueden leerse y escribirse pero
el bit IPL3 puede ser borrado, aunque no activado por el usuario.
Existen 54 causas de interrupción diferentes en los dsPIC30F y 118 en los dsPIC33F que están pro
ducidas por los periféricos integrados o por las patitas destinadas a tal efecto. El usuario puede pro
gramar individualmente cada tipo de interrupción con el nivel de prioridad deseado situado entre 1
(mínimo) y 7 (máximo), pues el nivel 0 significa su prohibición. Esta programación se realiza es
cribiendo el valor adecuado en los bits IPL<2:0>, no usándose el IPL3 que se lee como cero.
Para resolver conflictos de prioridad en las situaciones en las que varias causas de interrupción
con el mismo nivel de prioridad se producen simultáneamente, se tiene en cuenta el nivel “natural”
de cada una que corresponde con el lugar o número que ocupa en la tabla. Cuanto más alto sea el
número del vector, menor es el nivel natural de prioridad. Este nivel natural sólo se aplica para re
solver los conflictos de prioridad entre varias interrupciones con el mismo IPL. Lo correcto es que
el usuario al programar el IPL asigne un valor bajo a las causas que ocupan un número de vector al
to y viceversa, para ajustarse al orden natural, aunque en algunas ocasiones puede interesar hacer lo
contrario.
Las excepciones son desviaciones del flujo de control provocadas por anomalías detectadas por el
procesador durante la ejecución de una instrucción. Hay excepciones que se detectan al comenzar
la ejecución de la instrucción causante, en cuyo caso se da paso a la rutina de atención que intenta
rá corregir el error para, posteriormente, regresar a la instrucción y ejecutarla.
Las excepciones tienen un nivel de prioridad entre 8 y 15 debiendo valer 1PL3 = 1, por lo que
siempre superan el nivel de las interrupciones y por eso se las considera como "‘interrupciones no
mascarables”. El procesador pone a 1 automáticamente el IPL3 al procesar una excepción. Cada ti
po de excepción tiene un IPL fijo que viene determinado por el número de vector que ocupa en la
tabla. (Figura 8.6.)
-■....................................................
NÚMERO VECTOR NIVEL DE INTERRUPCIÓN CAUSA DE EXCEPCIÓN
0 M Á X IM A PR IO R ID AD (5) RESERVADO
1 14 TALLO O S C ILA D O R
2 13 RRROR D IR E C IO N AM IEN TO
3 12 ERROR PILA
5 RESERVADO
6 RESERVADO
7 RESERVADO
Las excepciones de Error de Pila y Error Aritmético se consideran de tipo software, mientras que
las de Fallo del Oscilador y Error de Dircccionamiento se las considera de tipo hardware. En las ex
cepciones tipo software hay que terminar la ejecución de la instrucción causante de las mismas an
tes de ejecutar la rutina de atención. En las excepciones tipo hardware no se completa la ejecución
de la instrucción causante porque daría resultados erróneos y se lanza la rutina de atención en cuan
to se detecta el error.
Los dsPIC33F disponen de una excepción más, originada por el “Fallo del CDM A” .
Se trata de una excepción tipo software de mínima prioridad (1PL = 11) que se genera por una de
las siguientes causas:
La cima de la Pila queda direccionada después de un Reset con el valor 0x0800 y su tamaño máxi
mo lo deterjnina el Registro Límite de la Pila SPLTM. Cuando una dirección efectiva para la Pila ge-
-■erada por W15 no está comprendida entre los límites establecidos se genera este tipo de excepción
que posee un nivel de prioridad 12.
El error de pila puede detectarse también por software comprobando el bit de estado STKERR
en IN TCO M l<2>. El flag STKERR tiene que ser borrado por software para retornar con la ins
trucción RETF1E.
Son las dos excepciones hardware de máxima prioridad que fuerzan a atender la causa antes de fi
nalizar la ejecución de la instrucción responsable de las mismas.
Cuando se genera una petición de una excepción con mayor nivel de prioridad que la que se es-
iá procesando, se suspende temporalmente esta última que pasa a marcarse como “pendiente” y se
idende a la de mayor prioridad.
Cuando se origina un conflicto de prioridad debido a las excepciones se genera un Reset.
La excepción por Fallo del Oscilador (IPL = 14) se origina por las siguientes causas:
a) Se activa el M onitor de Fallo del Reloj (FSCM) al detectar un fallo en el sistema del reloj
principal.
b) Se detecta un fallo en el PLL cuando está en funcionamiento.
c) Se activa FSCM y falla el PLL al producirse un Reset de encendido (POR).
102 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
La excepción por Fallo del Oscilador puede detectarse por software comprobando el bit de esta
do OSCFAIL en 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 instrucción RETFIE.
La excepción por Error de Direccionamiento (IPL = 13) se produce por las siguientes causas:
a) Se intenta acceder a un dato desalineado (acceso a una palabra con dirección impar).
b) Una instrucción de manipulación de bits utiliza direccionamiento indirecto con el bit de me
nos peso de la dirección efectiva a 1.
c) Se intenta acceder a un dato en una zona de la memoria de datos no implementada físicamente.
d) Ejecución de la instrucción “BRA #literal” o la “GOTO #literaT cuando literal es una direc
ción de memoria de programa sin implementar.
e) Ejecutar una instrucción después de modificar el PC para apuntar a una dirección de memo
ria de programa sin implementar. El PC tiene que ser modificado con la carga de un valor
dentro de la pila y ejecutando la instrucción RETURN.
El espacio de datos estará prohibido mientras dure la excepción en curso, para no destruir nin
gún dato. El error de direccionamiento puede detectarse por software comprobando el bit de estado
ADDRERR en 1NTC0N<3>. El flag ADDRERR tiene que ser borrado por software para retornar
con la instrucción RETFIE.
Todos los señalizadores de las causas de interrupción son explorados cada ciclo de instrucción.
Cuando existe una petición de interrupción pendiente (IRQ - Interruption Routine Qcuc) se pone a
1 el bit señalizador correspondiente en el registro IFSx (Tnterrupl Falg Status). Para atender la inte
rrupción es preciso que el bit de permiso correspondiente esté a 1 en el registro ÍECx (Interrupt Ena-
blc Control). Durante el tiempo restante del ciclo de instrucción en que se exploran las IRQ se eva
lúan las prioridades de las interrupciones pendientes de ser atendidas. Cuando existe una petición de
una interrupción pendiente que tenga mayor prioridad que la CPU se pone en marcha el procesa
miento de la misma y el procesador salva en la Pila el valor actual del PC, el byte bajo del registro
SR y el bit IPL3 (CORCON<3>). (Figura 8.7.)
15 0
W 15
(ANTES DE IRQ)
W15
(DESPUES DE IRQ)
Con la instrucción de Retorno de Interrupción RETFIE que se coloca al final de la rutina ISR (In-
terruption Service Routine) se recuperan de la Pila el PC<22:0> (la dirección de retom o, es decir el
PC almacenado antes de saltar a la rutina de interrupción), el SR<7;0> (para recuperar el entorno en
el que se encontraba el procesador antes de saltar) y el 1PL3. Las interrupciones son anidablcs, lo
que significa que cuando se está atendiendo una interrupción a través de la rutina de servicio de in
terrupciones (ISR), puede ser interrumpida por un tipo de interrupción de mayor prioridad.
Se pueden deshabilitar o prohibir las interrupciones que tengan niveles de prioridad de 1 a 6 con
la instrucción DISL que funciona en combinación del registro contador DISICNT. D1SICNT se va
decrementando hasta que llega a 0, entonces se rehabilitan las interrupciones con prioridad 1-6. Al
ejecutarse, por ejemplo, la instrucción DISI #5, se deshabilitan las interrupciones con IPL de 1 a 6
durante 5 ciclos de instrucción. Una vez detectada la causa que ha provocado una interrupción, me
diante la inspección del registro IFSx, comprobado que tiene permiso (inspeccionando el registro
IECx) y también la prioridad suficiente, es decir no hay ninguna otra interrupción con mayor prio
ridad que ella, entonces se salva en la Pila el PC, el SRL y el IPL3. Luego se carga en el PC el con
tenido del Vector de Interrupción correspondiente y se pasa a iniciar la ejecución de la rutina ISR.
Al comienzo de ISR se deben salvar en la Pila con la instrucción PUSH.S los valores de los regis
tros WÜ-W3, para poder restablecer después los valores que estaban y el procesador pueda continuar
con lo que estaba haciendo antes de la interrupción. Al completar la ISR, antes de RETFIE, se re
cuperan los valores de dichos registros mediante la instrucción POP.S. (Figura 8.7.)
INICIO
SE SALVA
PC^-VECTOR INTERRUPCIÓN
SE SALVAN REGISTROS
QUE SE MANEJAN
RUTINA DE ATENCIÓN
SE RECUPERAN'
REGISTROS QUE SE
MANEJAN
RETFIE
SE RECUPERAN
PC«22:0>, SR<7:0>. IPL3
Figura 8.8. Organigrama que muestra las etapas del procesamiento de una interrupción.
104 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
El retorno de una rutina de interrupción tiene una latencia de tres ciclos de instrucción.
Cuando la CPU funciona en uno de los modos de bajo consumo (Sleep o Idle) y se produce una
petición de interrupción de mayor prioridad que la CPU (para ello el nivel de prioridad que debe te
ner la CPU es de 1 o mayor) se atiende la petición, pero si el nivel de prioridad de la interrupción es
menor que el de la CPU se continúa la ejecución de la instrucción posterior en el programa princi
pal a la que originó el paso al modo de bajo consumo, es decir, produce el despertar de la CPU aun
que la interrupción no sea atendida.
Para el procesamiento y atención 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 señalizadores de estado y control de las causas de las excepciones.
INTCON2 contiene los señalizadores de las causas de interrupción externa y el bit de uso de la A1VT.
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/prohibición de cada una de las
interrupciones.
INTERRUPCIONES Y EXCEPCIONES 105
En la tabla de la Figura 8.11 se muestra la distribución de los bits de los registros que se utilizan
rn el procesamiento de las interrupciones y excepciones. Hay que tener en cuenta que según el mo-
ielo de DSC se dispondrá de diferentes recursos internos y en consecuencia no todos tienen válidos
iodos los bits de estos registros. El INTCON1 varía de un modelo a otro, un dispositivo de dsPIC33F
_ñliza más bits del registro INTCON1 que un dsPIC30F. El dsPIC33F tiene más tipos de interrup-
: nes por lo que necesita de algunos registros más para controlar y registrar que se han producido
ritas interrupciones nuevas que no dispone el dsPIC30F. En la Figura 8.9 se muestran los registros
INTCON 1 e INTCON2 de los dsPIC30F.
IN T C O N 1 :
RAV-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W -0 U -0 U -0 U-0 RAV-0 R/W-0 R/W-0 R/W-0 U -0
^ E R R |S T K E R R | O S C F A IL ¡ - I
IN T C O N 2 :
R/W-0 RA/V-0 UO U-0 U-0 U-0 U-0 U-0 U-0 U-0 U -0 R/W-O R/W-0 RW -O RIW-Q R/W-0
Leyenda
8.9. Distribución de los bits de los registros INTC O N 1 e INTCON2 para el procesamiento de
las interrupciones y excepciones en el modelo dsPIC30F.
En la Figura 8.10 se observan los registros INTCON 1 e INTCON2 que maneja el dsPIC33F.
■ÍTC O N 1:
« w *-: R /w -o R/W -0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
CÓ VAÍS r f OVATE OVBTE COVTE
ITC O N 2: o s c f a il
¡9 W O R/W-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W -0 R/W -0 R/W -0 R/W-0
IN T 4 E P INT3EP INT2EP INT1EP INTOEP
Leyenda
8.10. Distribución de los bits de los registros INTCO N 1 e INTCON2 para el procesamiento de
las interrupciones y excepciones en el modelo dsPIC33F.
106 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
En la Figura 8.11 se presentan los registros que utiliza el dsPJC3ÜF para m anejar las inte
rrupciones.
NOM BRE D IR E C C IÓ N BIT15 B1T14 BIT13 BIT12 B IT ll B1T10 BIT9 BIT8 BIT7
IFSÜ 0084 CNIF BCLIF I2CIF NViVIIF ADIF u i rxiF U1RXIF SPI1IF T3IF
IFS1 0086 IC6IF IC5IF IC4IF IC3IF C1IF SPI2IF U2TXIF U2RXIF INT2IF
IFS2 0088 - - - FLIBIF FALTAIF LVDIF DCIIF QVEIIF PWMIF
IEC0 008C CNIE BCLIF I2CIE NVVMIE ADIE UITXIE r U IR X líP SPIIIF T3IE
IEC1 008E IC6IE 1C5IE IC4IE IC3IE C1IE SPI2IE U2TXIE U2EXIE IKT2IL
IEC2 0090 - FLTBIE FALTA IL LVDIE DCIIE SPI1IE PWMIE
•
IPCO 0094 - 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 - INT2IP <2:0> T5IP <2:0> -
IPC6 OOAO - C1 IP <2:0> - SPI2IP<2:0> -
IPC7 OOA2 - IC6IP <2:0> - IC5IP <2:0> -
IPC8 00A4 - OC8IP <2:0> - OC7IP <2:0> -
IPC9 00A6 - PWMIP <2:0> - C2IP <2:0> -
IPC10 00A8 - FALTAIP <2:0> - I.VDIP <2:0> -
IPC11 00AA - - - - - - -
:
IFSO T2IF OC2IF IC2IF T1IF OC1IF IC1IF INTO 0000 0000 0000 0000
IFS1 T5IF I4IF ÜC4IF OC3IF IC8IF IC7IF INT1IF oooo oono oooo oooo
ll:S2 C2IF INT/1IF INT3IF OC8IF OC7IF OC6IF OC5IF 0000 oooo oooo oooo
IEC0 T2IF OC2IE IC2IE THE OCHE IC1IE INTOIE oooo oooo oooo oooo
IEC1 T.5IL T4IE OOIIE OC3IE IC8IE IC7IE INT1IE oooo oooo oooo oooo
IEC2 C2IE I.NT4IE INT3IE OC8IE OC7IE OC6IE OC5IE oooo oooo oooo oooo
IPCO ICl IP <2:0> - INT0IP<2:0> 0100 0100 0100 0100
IPCJ OC2IP <2:0> - I2CIP <2:0> 0100 0100 0100 0100
ICP2 U1 RXIP <2:0> - SPI1IP <2:0> 0100 0100 0100 0100
IPC3 I2CIP <2:0> - NVMIP <2:0> 0100 0100 0100 0100
IPC4 1C7IP <2:0> - INT1 IP <2:0> 0100 0100 0100 0100
IPC5 T4IP <2:0> - OC4IP <2:0> 0100 0100 0100 0100
IPC6 U2TXIP <2:0> - U2RXIP < 2:0 > 0100 0100 0100 0100
IPC7 IC4IP <2:0> - IC3IP < 2:0 > 0100 0100 0100 0100
IPC8 OC6IP < 2:0 > OC5IP <2:0> 0100 0100 0100 0100
IPC9 INT4IP < 2:0 > - INT3IP <2:0> 0100 0100 0100 0100
IPC10 DCIIP < 2 :0 > - QEIIP <2:0> 0100 0100 0100 0100
IPC11 - - - FLTBIP <2:0> oooo oooo oooo oooo
Figura 8 .1 1 . Nombre y distribución 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
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
Figura 8 .1 2 . Nom bre y distribución de los bits de los registros que se utilizan en el procesamiento de
las interrupciones y excepciones de los dsPIC33F.
108 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
NOM BRE B1T6 BIT5 BIT4 BIT3 BIT2 BIT1 BITO ESTADO RESET
IFSO OC2IF IC2IF DMA01IF T I IF OC1IF IC1IF INT0IF 0000 0000 0000 0000
0 \ IC7IK AD2IF INT1IF CNIF - MI2C1IF SI2C1IF 0000 0000 0000 0000
IFS2 IC4IF IC3IF DMA3IF C1IF C1RXIF SPI2IF SPI2EIF 0000 0000 0000 0000
• • ................ -
IFS3 INT4IF INT3IF T9IF T8IF MI2C2IF SI2C2IF T7IF 0000 0000 0000 0000
IFS4 C1TXIF DMA7IF DMA6IF - U2EIF U1EIF FLTBIF 0000 0000 0000 0000
IFCO OC2IE IC2IE DMA0IE THE OCHE IC1IE INT0IE 0000 0000 0000 0000
IKC1 IC7IR AD2IE INTIIE C.NIE - MI2C1IE SI2C1IE 0000 0000 0000 0000
1LC2 IC4ÍE IC3IE DMA3IE C1IE C1RXIE SPI2IE SPI2EIE 0000 0000 0000 0000
IC O INT4IE INT3IE T9IE TÍ3IE MI2CI2IE SI2CIE T7IE 0000 0000 0000 0000
ICC4 ClTXIE DMA7IE DMA6IE . ;; U2EIE U1EIE FI.TBIE 0000 0000 0000 0000 ;
Figura 8 .12. Nombre y distribución de los bits de los registros que se utilizan en el procesamiento de
las interrupciones y excepciones de los dsPlC33F. (Continuación).
CAPÍTULO
Características
9 de las instrucciones
y modos de
direccionamiento
9.1. CARACTERÍSTICAS GENERALES DE LAS INSTRUCCIONES
El formato habitual de las instrucciones de los DSC tiene una longitud de 24 bits excepto en tres de
ellas. El primer byte, el de más peso del formato, es el “código OP” que se destina a identificar la
instrucción que se trata. El resto del formato se dedica a especificar los operandos y otras caracte
rísticas de la instrucción. Por esta razón aquellas instrucciones que son implícitas y no necesitan
operandos, detrás del código OP tienen un valor concreto.
EJEMPLO 1
La instrucción NO P (No Operar) tiene como código OP 0x00, pudiendo existir cualquier valor en
los dos bytes restantes del formato. (Figura 9 .1.)
16 15
oooo oooo XX XX X X X X X X X X X X X X
Figura 9.1. La instrucción NOP no tiene operandos y el código OP en el prim er byte de su form¿}to
es 0x00 pudiendo existir cualquier valor en los otros dos.
EJEMPLO 2
La instrucción RESET que fuerza la inicialización del procesador no requiere ningún operando y
su código OP es l i l i 1110. (Figura 9.2.)
EJEMPLO 3
Figura 9.3. F.l prim er byte del formato de la instrucción PUSH 0x336A es fijo porque es el código OP
de PUSH. Los otros dos contienen la dirección del operando.
CARACTERÍSTICAS DE LAS INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO 111
En la tabla de la Figura 9.4 se ofrecen los códigos OP correspondientes al primer byte del for
mato de las instrucciones de los DSC.
El código OP se forma lomando los 4 bits de la colum na y a continuación los 4 bits de la fila.
(y g g
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
BRA
G\LL RETFIE BRA BRA BRA BRA
0000 NOP CALL GOTO RETIW RCAI.L DO RFPEAT -
GOTO RETURN <OA) (OB) (SA) (SB)
RCAI.L
BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA
0011 BRA
ÍOV) (O <z> (Nj (LE) (LT) (LEU) (NOV) (NC) (NZ) (NN) (GT) (GE) (CTU)
1010 BSET BC‘ LR BTC BIST BTSTS BTST BTSS BTSC BSET BCLR BTG BTST BTSTS BSW BTSS btsc:
ADD SUB AND IOR ADD SUB AND IOR MUL.US MUL.SS TBLRDII TBLWTH SUB
1011 MUI MOV.D MOV
addc: SUBB XOR MOV ADDC SUBB XOR MOV MUL.UU MUL.SU TBLDRL TBIWTL SUBB
MAC MAC
ADD
MPY MPY MOV- FFIL
1100 CIRAC SFTAC ADD LAC NEC SAC SAC.R -
MPY.N MPY.N SAC FF1R
SUB
MSC MSC
CLRVVDT
■■'
DAW HYVRSAV
liD LNK
11111 PUSH POP SE ZE DISI EXCH POPS NOPR
FDAC MAC MPY IJLNK
SWAP PUSH.S
RESET
Figura 9.4 . Tabla con la que se puede obtener el código OP del prim er byte del formato de las ins
trucciones de los DSC.
112 dsPIC. DISEÑO PRÁCTICO DE APLICACION ES
instrucciones DO, MOV.D, POP.D, TBLRDH, TBLWTH, TBLRDL y TBLWTL se ejecutan en 2 ci
clos de instrucción.
2.a Las instrucciones DIV.S, DIV.Vy DIVF van precedidas por una instrucción REPEAT #17 que conlle
va 18 repeticiones y supone una duración de 18 ciclos de instrucción.
3 * Las instrucciones que modifican al PC requieren dos ciclos de instrucción.
Las instrucciones de salto condicional se ejecutan en 1 ciclo si no se salta, 2 ciclos si se hace el
salto sobre una instrucción de palabra y 3 ciclos si el salto se realiza sobre una instrucción de 2 pa
labras.
Las instrucciones de bifurcación condicional se ejecutan en 1 ciclo si no hay bifurcación y en 2 si
la hay.
4 * Un caso especial son las instrucciones de retorno que modifican el PC, son RETFIE, RETLWy RE-
TURN que se ejecutan en 3 ciclos de instrucción excepto si hay una excepción pendiente de aten
der; en cuyo caso se ejecutan en 2.
5 Ü Las instrucciones que manejan datos ubicados en la memoria de programa, modo PSV, precisan
uno o dos ciclos de retardo, excepto REPEAT que sólo requiere retardo en la primera ejecución del
bucle.
EJEMPLO l
Dado un D SC cuyo oscilador externo funciona a una frecuencia de 1MHz, calcular el tiempo que
tardaría en ejecutar la instrucción M AC W4xW5, B.
El DSC larda en ejecutar la instrucción M AC 1 ciclo de instrucción.
EJEMPLO 2
Dado un D SC cuyo oscilador externo funciona a una frecuencia de 33MHz, calcular el tiempo que
tardaría en ejecutarse una instrucción CALL.
La instrucción CALL, al tener que modificar el PC, tarda 2 ciclos de instrucción en ejecutarse.
1 _ 1 ____ \_
Tosc. = — ^ = ---------------= -------------- — = 0 . ° 3 ■1 0 ^ = 30775
Fosc ~ 33M hz ~ 3 3 -10ofe
/ ciclo - 4 • Tose — 4 • 30ns = 120ns
Debido a que esta instrucción tarda 2 ciclos —>• 2 • !20r¡s = 240r¡s
Una instrucción CALL tarda en ejecutarse 240ns
CARACTERÍSTICAS DE LAS INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO 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
Figura 9.5. Tabla que muestra el comportamiento del PC y de la Pila con las instrucciones que m o
difican el PC.
114 dsPIC. DISFÑO PRÁCTICO DE APLICACIONES
Se trata de utilizar la Memoria de Programa, que es más lenta, barata y no volátil, para almacenar
datos.
Aparentemente se accede a los 32 KB superiores de la memoria de datos, pero realmente se es
tá accediendo a la memoria de programa sin necesidad de ninguna instrucción especial. Se habilita
este procedimiento poniendo a 1 con el tercer bit del registro CORCON y cargando el registro PSV-
PAG que tienen un tamaño de 8 bits.
Los DSC disponen de 4 modos para direccionar los datos u operandos cuando se ejecutan las ins
trucciones.
1o Direccionamiento directo.
2.° Direccionamiento directo por registro.
3° Direccionamiento indirecto por registro.
4° Direccionamiento inmediato.
Lo emplean las instrucciones que tienen como operando la dirección de la memoria de datos donde
reside. Para este direccionamiento es frecuente utilizar los 8 KB inferiores del espacio de la memo
ria que se denomina “RAM cercana”. Sin embargo, con la instrucción MOV es posible acceder a los
64 KB con este direccionamiento.
Usando este modo de direccionado se puede cargar cualquier posición de la memoria de datos
con el contenido de un registro de trabajo W y viceversa. Los operandos pueden tener tamaño byte
o palabra, excepto MOV que sólo trabaja con palabras.
EJEMPLO 1
EJEMPLO 2
M O V 0x2200, W5 ;[0x2200] -► W5
Mueve la palabra depositada en la dirección 0x2200 de la RAM al registro W5.
La mayoría de las instrucciones que usan el direccionamiento directo toman al registro de trabajo
WREG como operando implícito, actuando Wü como WREG. Este tipo de instrucciones comien
CARACTERÍSTICAS DE LAS INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO 115
zan leyendo los operandos, uno de los cuales implícitamente reside en WO, luego se realiza una ope
ración con ellos y, finalmente, el resultado se escribe en WREG. Son instrucciones de lectura-m o
dificación-escritura.
EJEMPLO 3
Se em plea para acceder al contenido de los 16 registros de trabajo (W 0-W 15) que actúan como
operando en la instrucción. El acceso puede ser a un dato de tamaño byte o palabra. La ventaja
de este modo de direccionado es la rapidez con la que se acceden a los registros internos de la
CPU.
EJEMPLO 1
EXCH W5, W6 ; W 5 * * + W6
Se intercambia el contenido de los registros W5 y W6.
EJEMPLO 2
El contenido de los registros de trabajo se utiliza para guardar la dirección efectiva del operando
en la memoria de datos. Los registros W actúan como punteros y la gran ventaja de este procedi
miento es la posibilidad de incrementar o decrementar automáticam ente el contenido de un regis
tro antes o después de ejecutar la instrucción, permitiendo la exploración secuencial de los arrays
o bancos de datos en el sentido que se desee. Según que el tamaño de los datos direccionados por
el registro W sea de uno o de dos bytes o de más, los incrementos o decrementos son de una, dos
unidades o más. En la tabla de la Figura 9.6 se presentan las modalidades del direccionam iento in
directo por registro.
El direccionamiento indirecto con Registro de Desplazamiento situado en la última línea de la
tabla de la Figura 9.6 emplea un registro Wb que suma su contenido con el del registro Wn que con
tiene la dirección efectiva. Wb actúa como desplazamiento de Wn y permite acceder a los 64 KB de
la memoria RAM, aunque carece de posibilidades de incremento y decremento.
11 6 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Figura 9.6. Modalidades que admite el modo de direc.cionamiento indirecto por registro.
EJEMPLO 1
EJEMPLO 2
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
rección form ada p o r W5 + W6. Todo ello en un ciclo de instrucción.
EJEMPLO 3
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 posición direc-
cionada por W5 + 0x6. Finalmente, el contenido de W7 se decrementa en 2 unidades. Todo ello en
un ciclo de instrucción.
CARACTERÍSTICAS DE LAS INSTRUCCIONES V MODOS DE DIRECCIONAMIENTO 117
Figura 9.7. Modos de direccionamiento indirecto por registro para l¿is instrucciones DSP, tipo MAC.
En este caso el operando que maneja la instrucción es un valor literal constante predefinido que es
tá contenido en el formato de la propia instrucción. Se usa de forma independiente o combinada con
los restantes modos de direccionamiento. El tamaño del operando inmediato puede abarcar desde 1
a 16 bits y puede tener o no bit de signo.
EJEMPLO 1
AND.B #0x0 F, W6
Se realiza la operación lógica AND, bit a bit, entre el valor inmediato expresado p or el byte OxOF
y el byte de menos peso de Wó, depositándose el resultado en el byte de menos peso de W6.
118 dsPIC. DISFÑO PRÁCTICO DE APLICACIONES
EJEMPLO 2
El cauce de procesamiento de los DSC se segmenta en 2 etapas para aumentar el rendimiento im
plícito del procesador. Con esta orientación se realiza la prebúsqueda de una instrucción mientras se
ejecuta la anterior (segmentación implícita de 2 etapas). Puede darse la circunstancia que en una de
las etapas del cauce exista una instrucción que, por ejemplo, modifique el valor de un registro de tra
bajo que como MOV.B #0x10, W5, y en la siguiente instrucción se utilice a este registro como pun
tero de un operando, como por ejemplo ADD |W 5], W6. Hasta que no se com plete la primera ins
trucción no se puede ejecutar la siguiente, porque no está actualizado el valor de W5.
Hay un hardware complementario que detecta estas dependencias y aplica las reglas para elimi
nar los atascos del cauce, generalmente retrasando un ciclo la ejecución de la instrucción que ha mo
tivado el conflicto.
CAPITULO
El repertorio
de instrucciones.
i r: ..i f..Y. ï. .V.V. .
• • .• « - ■ .¿ i <-. t.
.V. -
Instrucciones MCU
Los DSC combinan en su repertorio las instrucciones típicas de los microcontroladores, llamadas
instrucciones M C U , con las especializadas en la resolución de algoritmos matemáticos para el pro
cesamiento de señales, llamadas instrucciones DSP.
Los DSC cuentan con 84 instrucciones, que se agrupan en 10 categorías que se distinguen por la
función principal que realizan:
Xa Instrucciones de movimiento.
2? Instrucciones lógicas.
3.a Instrucciones matemáticas.
4* Instrucciones de rotación y desplazamiento.
5* Instrucciones de bit.
6S Instrucciones de comparación y brinco.
7v_ Instrucciones de control del flujo del programa.
Instrucciones de Pila y registros sombra.
9 f Instrucciones de control.
10 ? Instrucciones DSP.
Las nueve primeras categorías configuran las instrucciones MCU y se describen en este capítu
lo dejando para el siguiente las instrucciones DSP.
En la descripción de las instrucciones se usará la nomenclatura que maneja 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 características principales de las instrucciones que se en
cargan de mover información entre el operando fuente y el destino. La instrucción MOV es una de las
más empleadas en la mayoría de los programas. Además de mostrarse la sintaxis usada en lenguaje
119
120 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
SÍM B O LO D ESCRIPC IÓ N
{) OPERACIÓN O CAMPO OPCIONAL
[TEXT} POSICIÓN DIRECCIONADA POR TEXT
(TFXT) CONTENIDO DE TEXT
ffTEXT LITERAL DEFINIDO POR TEXT
A C, DJ "A" DEBE SER DEL CONJUNTO [B, C, D]
<N :M > CAMPO DE BIT DE REGISTRO
{ l ABEL:} NOMBRE DE ETIQUETA OPCIONAL
.... I> ...... SELECCIÓN DE M O D O DE BYTE
SELECCIÓN M O D O DOBLE PALABRA
.S SELECCIÓN REGISTRO SOMBRA
.w SELECCIÓN DE M O D O PALABRA (POR DEFECTO)
ACG ACUMULADOR A O ACUMULADOR B
AWB ACUMULADOR CON POST-ESCRITURA
BIT4 POSICIÓN BIT
C, DC, N ÓV, Z BITS DE ESTADO MCU
EXPR DIRECCIÓN ABSOLUTA, ETIQUETA O EXPRESIÓN
F DIRECCIÓN DE MEMORIA DATOS
LIT1 LITERAL DE 1 BIT (0:1)
LIT4 LITERAL DE 4 BITS (0:15)
LIT5 LITERAL DE 5 BITS (0:31)
LIT8 LITERAL DE 8 BITS (0:255)
LITIO LITERAL DE 10 BITS
LIT14 LITERAL DE 14 BITS
LIT16 LITERAL DE 16 BITS
LIT23 LITERAL DE 23 BITS
N IN G U N O EL CAMPO NO REQUIERE UNA ENTRADA, PUEDE SER VACIO
OA, OB, SA, SB BITS DE ESTADO DSP: DESBORDAMIENTO ACCA Y ACCB, SATURACIÓN ACCA Y ACCB
PG CONTADOR DE PROGRAMA
VVb REGISTRO DE TRABAJO BASE
SLIT4 LITERAL DE 4 BITS CON SIGNO (-8:7)
SLIT6 LITERAL DE 6 BITS CON SIGNO (-32:31)
SLIT10 LITERAL DE 10 BITS CON SIGNO
SLIT16 LITERAL DE 16 BITS CON SIGNO
TOS C IM A DE LA PALABRA
Wb REGISTRO DE TRABAJO BASE
Wd REGISTRO DE TRABAJO DESTINO
VVdo REGISTRO DE TRABAJO DESTINO
Win, VVn PAREJA DE REGISTROS DIVISIÓN (DIVIDENDO, DIVISOR)
W m *W m PAREJA DE REGISTROS MULTIPLICACIÓN (IGUALES)
VVm‘ Wn PAREJA DE REGISTROS MULTIPLICACIÓN (DIFERENTES)
VVn REGISTRO DE TRABAJO FUENTE Y DESTINO
W nd REGISTRO DE TRABAJO DESTINO
Wns REGISTRO DE TRABAJO FUENTE
WREG REGISTRO DE TRABAJO POR DEFECTO (W0)
Ws REGISTRO DE TRABAJO FUENTE
VVso REGISTRO DE TRABAJO FUENTE
Wx REGISTRO DE TRABAJO PARA PREBÚSQUFDA DEL BUS DE DATOS X
Wxd REGISTRO DE TRABAJO DESTINO PARA PREBÚSQUEDA DEL BUS DE DATOS X
Wv M O D O DE DIRECCIONAMIENTO FUENTE Y REGISTRO DE TRABAJO PARA PREBÚSQUEDA DEL BUS DE DATOS Y
VVyd REGISTRO DE TRABAJO DESTINO PARA PREBÚSQUEDA DEL BUS DE DATOS Y
Figura 10.1. Tabla que muestra los símbolos usados en la descripción de las instrucciones.
EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 121
Ensamblador para editar cada instrucción, se facilita el número de palabras de 24 bits que ocupa en la
memoria de programa y el número de ciclos de instrucción que dura su ejecución. Cuando se especi
fica el operando opcional {,WREG} el destino de la instrucción es WREG (WO), pero si 110 se espe
cifica el operando destino, actúa como tal la dirección de la memoria de datos F.
La instrucción EXCH intercambia el contenido de los registros a los que afecta. L a instrucción
SWAP intercambia las dos mitades de la palabra de trabajo depositadas en Wn, que si tiene tamaño
byte las dos mitades son de 4 bits cada una y si es palabra son de 8 bits. También las instrucciones
de Tabla mueven información entre las posiciones de la memoria de programa y los registros de tra
bajo de forma bidireccional, lo que permite usar parte de dicha memoria para guardar datos.
EJEMPLO 1
M O V .B
Figura 10.3. Efecto de la ejecución de la instrucción MOV.B WO, [W 1+0x7] en WO, W l, posición 1806
y en el Registro do Estado.
122 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
EJEMPLO 2
SWAP WO
Hace un SWAP en el registro WO. SWAP consiste en intercambiar el byte de más 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 B H 9580
-
SR 0000 SR 0000
Las instrucciones de este grupo se encargan de realizar una operación lógica bit a bit entre los dos
operandos fuente, depositando el resultado en el destino. Soporta las operaciones AND, OR y XOR.
La instrucción con nemónico COM halla el complemento a l del operando fuente y lo deja en el des
tino. NEG calcula el complemento a 2. CLR borra o pone a cero el operando al que afecta. Final
mente, SETM pone a 1 los bits del operando sobre el que actúa. (Figura 10.5.)
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 6 72 3
SR oóbo SR COCO
S S b S b b S S • v .-_. .-.Y .-.—
EJEMPLO 2
SETM [~W 6]
Pre-decrementa W6 y después hace la operación SETM (poner a unos todo) el contenido de la di
rección a la que apunta W6. (Figura 10.7.)
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 1250 W6 124E
SR 0000 SR 0 00 0
Figura 10.7. Efecto de la ejecución de la instrucción SETM del ejemplo en W6, ¡a dirección 124E y en
el Registro de Estado.
Este importante grupo de instrucciones MCU soporta las operaciones aritméticas principales como
son la suma (ADD), la resta (SUB), la multiplicación (MUL) y la división (DIV), admitiendo di
versas alternativas, modos de direccionado y tamaño de los operandos. (Figura 10.8.)
En algunas operaciones de suma y resta hay variantes que permiten participar el acarreo o la lle
vada (ADDC y SUBB). Hay instrucciones simples pero muy útiles que incrementan o decrementan
los operandos (INC y DEC).
Existen tres instrucciones matemáticas especiales que se describen brevemente.
• DAW.B: Realiza el ajuste decimal del byte de menos peso del registro Wn, generando un
resultado en BCD.
• SE: Extiende el signo del byte depositado en Ws y el resultado de 16 bits lo carga en Wnd.
• ZE: Extiende con ceros el byte de menos peso del registro de trabajo fuente Ws y el resulta
do de 16 bits lo deposita en el destino Wnd.
124 dsPIC DISbÑO PRÁCTICO DE APLICACIONES
EJEMPLO 1
Figura 10.9. Efecto de la ejecución de la instrucción DEC del ejemplo en WS, W6, dirección 1000 y
en el Registro de Estado.
EJEMPLO 2
M 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.)
wo 6002 WO • 0001 i
W1 ooco W1 0001
1
W3 8001 W3 8001
W4 8002 W4 8002
SR 0000 SR 0101
Figura 10.10. Efecto de la ejecución de la instrucción DIVF del ejemplo en W0, W1 y en el Registro de
Estado.
Este grupo engloba las instrucciones que realizan el desplazamiento aritmético (se mantiene el bit de
signo) o el lógico (sin signo), tanto a la derecha como a la izquierda, con un máximo de 15 posiciones.
La instrucción ASR Wb, Wns, Wnd produce un desplazamiento aritmético a la derecha del con
tenido del registro Wb un número de posiciones que viene determinado por los 4 bits de menos pe
so de Wns (máximo 15), depositando el resultado en el registro Wnd.
Las instrucciones de rotación a la derecha o a la izquierda pueden efectuarse a través del acarreo
(RLC y RRC), o bien sin tener en cuenta el acarreo (RLNC y RRNC).
La instrucción con nem ónico LSR produce un desplazamiento lógico a la derecha y SL lo ha
ce a la izquierda. En este último caso el bit de más peso del operando fuente al desplazarse pasa a
ocupar el bit señalizador de acarreo, introduciéndose un cero en el bit de menos peso del operan
do. (Figura 10.11.)
126 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Wb
Figura 10.11. La instrucción SL desplaza a la izquierda el contenido del operando fuente, pasando el bit
de más peso a ocupar el hit de Acarreo e introduciéndose un 0 por el b it de menos peso.
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 más 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 i R A M 20 0 • C 004
SR 0000 SR 0 00 9
yv»y.w :ririvfívi-i
Figura 10.13. Efecto de la ejecución de ¡a instrucción 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 dirección 0x1650, dejando el de más 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
SR 0000 SR 0008
Figura 10.14. Efecto de la ejecución de la instrucción SL del ejemplo en W0, dirección 1650 y en el Re
gistro de Estado.
10.6. IN S TR U C C IO N E S DE BIT
Son las instrucciones que realizan una operación sobre un bit concreto de una posición de la me
moria de datos direccionada por F, de un registro de trabajo Ws.
La instrucción BCLR Ws, #bit4 pone a 0 el bit del registro Ws que viene 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 instrucción BCLR f #bit4 pone a 0 el bit especificado por #bit4 en el contenido
de la posición de la m em oria de datos con dirección f. Cuando el nemónico es BSET pone a 1 el
b.it especificado.
La instrucción BSW.C Ws, Wb escribe el valor del acarreo C en el bit del registro W s especifica
do por los 4 bits de menos peso del registro Wb. Esta operación puede representarse C. ->- Ws<(Wb)>.
La instrucción BSW.Z Ws, Wb realiza una operación semejante pero escribiendo el valor del señali
zador Z negado y se representa como
128 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Z# Ws<(W b)>. Las instrucciones con nemónico BTG invierten el valor del bit especificado
en el operando.
La instrucción BTST testea un bit de un registro W s o de una posición de memoria F y lo guar
da en el señalizador C cuando tienen la extensión “.C’\ mientras que si la extensión es “.Z” se car
ga en Z el inverso del bit testado. Cuando el nemónico es BTSTS hacen lo mismo que las anterio
res y además ponen a 1 el bit testado.
La instrucción FBCL Ws, Wnd explora el registro Ws a partir del bit de más peso detrás del de
signo hasta encontrar el primer bit de cambio a 1 (si es un valor positivo) o de cambio a 0 (si es un
valor negativo). El resultado de esta exploración expresado con 16 bits con extensión de signo se de
posita en Wnd. FF1L encuentra el primer cambio de bit a 1 empezando por la izquierda y guarda
el resultado en formato de 16 bits con extensión de ceros en Wnd. Finalmente, la instrucción FF1R
hace lo mismo que la anterior pero la exploración com ienza por la derecha, o sea, por el bit de m e
nos peso de Ws. (Figura 10.15.)
EJEM PLO 1
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
Figura 10.16. Efecto de la ejecución de la instrucción BTG clel ejemplo en la dirección 1660 y en el Re
gistro de Estado.
EJEMPLO 2
FF1L W2, 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 ejecución de la instrucción 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 condición o comparan un valor que puede ser el de un bit
concreto y según su valor binario se “brinca” o no. El “brinco” (skip) consiste en un salto pequeñi-
to. sólo se salta la instrucción siguiente, ejecutando en lugar de la instrucción que hay a continua
ción una NOP. Si no se cumple la condición impuesta al bit a comparar se ejecuta normalmente la
siguiente instrucción. Cuando no hay brinco la instrucción se ejecuta en un ciclo de instrucción, pe
ro si lo hay la duración es de 2 ciclos si el brinco se efectúa sobre una instrucción de una palabra y
de 3 si se trata de una instrucción de 2 palabras.
La instrucción BTSC Ff #bit4 comienza testando el valor del bit expresado por #bit4 en el con
tenido de la posición de la memoria de datos de dirección F, y si vale 0. se produce un brinco. Cuan
do el nemónico es BTSS el brinco se produce si el bit explorado vale 1.
La instrucción de comparación CP F compara o resta el valor contenido en la posición F con el
del registro de trabajo implícito W0 (WREG) y activa los señalizadores en el Registro de Estado (C,
DC, OV, N y Z) según el resultado (F) - W0. No genera resultado de la resta ni lo almacena. Hay
130 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
otras instrucciones de comparación cuyos operandos son registros o valores inmediatos, como las
instrucciones CPO que realizan la comparación con el valor 0x0.
La instrucción CPB F compara o resta el valor de la posición direccionada por F con el del re
gistro de trabajo implícito y con el acarreo invertido o llevada, es decir, (F) - W REG - C # . La ope
ración no genera resultado y sólo afecta a los señalizadores de SR.
CPSEQ Wb, Wn resta el contenido de los dos registros especificados, Wb - Wn, y si son igua
les brinca. La instrucción con nemónico CPSGT produce el brinco cuando la comparación de los
operandos da un resultado mayor que cero, mientras que CPSLT produce el brinco con un resulta
do menor que cero y CPSNE si el resultado es distinto de cero. (Figura 10.18.)
EJEMPLO 1
CP 0x1200
Compara mediante una resta WREG (W0) con el contenido de la dirección 0x1200. El resultado
no se guarda, sólo afecta a los Jlags. (Figura 10.19.)
EJEMPLO 2
CPB.B RAM400
Compara el byte contenido en RAM400 con el byte de menos peso de W0 mediante una resta (usan
do CU). Sólo afecta a los Jlags. Modo byte. (Figura 10.20. )
EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 131
CP 0x1200
SR OOÜO SR . 0008 (N = 1)
Figura 10.19. Efecto de la ejecución de la instrucción C.P de! ejemplo en WQ, dirección 1200 y en el Re
gistro de Estado.
A N T E S D E L A IN S TR U C C IO N D E S P U É S DE LA IN S TR U C C IÓ N
C PB.B R A M 400
W0 WO 8823 l t l £ £
0000
z
SR SR 0008
11
Figura 10.20. Efecto de la ejecución de la instrucción CPB.B del ejemplo en WQ, RAM400 y en el Re
gistro de Estado.
Hay un numeroso grupo de instrucciones cuya misión fundamental es la de controlar el valor del PC y
por tanto el flujo del programa en curso. La mayoría de estas instrucciones vienen acompañadas por el
nemónico BRA que se refiere a la “bifurcación” del PC consistente en añadir a su valor actual otro que
se incluye en la instrucción. Por ejemplo, BRA E x p r ts una instrucción de bifurcación incondicional que
incrementa el valor actual del PC que es PC + 2 en el valor contenido en Expr (slitló) multiplicado por
2 ya que el PC sólo opera con direcciones pares. La operación que realiza esta instrucción es P C -< - (PC
+ 2) + 2 x slitló, que permite alcanzar una bifurcación de 32 K instrucciones en ambas direcciones de
la actual. Variantes de BRA son todas las condicionales, como BRA C, que bifurca si el señalizador
C = 1, BRA NC. bifurca si C = 0, BRA GE bifurca si los señalizadotes N y OV indican que se ha pro
ducido un resultado igual o mayor que cero, BRA LE bifurca cuando el resultado es igual o menor que
cero, BRA LT bifurca cuando ha sido menor, BRA N bifurca si el resultado es negativo. BRA N Z cuan
do Z = 0, BRA OA si OVA = 1 y BRA SA si el flag de saturación del acumulador A es 1.
Otro tipo de instrucciones que controlan el flujo del programa son las de llamada a subrutina,
CALL, que permiten una desviación a cualquiera de las 32 K primeras instrucciones de la memoria
de programa. Antes de desviarse el PC su valor actual se salva en la Pila cuya cima está direccio-
nada por W15.
La instrucción DO #¡¡114, Expr comienza salvando en la Pila ios registros sombra de DCOUNT. DOEND
y DOSTART y luego carga DCOUNT con el valor de #lit14, DOSTART con el del PC y DOEND con PC
+ 2 x Expr. Después incrementa DL<2:0> (CORCÜN<10:8>) y ejecuta el código comprendido entre
DOSTART y DOEND el número de veces que contenga DCOUNT
La instrucción REPEAT #Ht14 repítela instrucción que tiene a continuación #lit14+1 veces. La instruc
ción REPEAT Wn repite ja instrucción siguiente Wn< 13:0> veces.
132 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
R E TFIE se usa para el retorno al programa principal desde la rutina de atención a una interrup
ción. Restaura el SR, el PC y el del bit IPL<3>.
Además de RETURN para el retomo de subrutinas también se emplea RETLW que restaura el
valor del PC y carga el literal que incluye (#lit 10) en un registro de trabajo Wn. (Figura 10.21.)
(1): Las instrucciones de bifurcación condicional se ejecutan en un c ic lo si no se hace la bifurcación o en dos si se hace.
(2): Las instrucciones de retorno se ejecutan en tres ciclos, pero si hay alguna excepción pendiente se ejecutan en dos.
Figura 10.21. Principales características de las instrucciones destinadas a controlar el flujo de control
del programa.
EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 1 33
EJEMPLO 1
A N T E S DE L A IN STR U C C IÓ N D E S P U É S DE L A IN S TR U C C IÓ N
BRA ALLÍ
PC 0 0 2 00 0 PC 0 0 200A
i
SR 0 00 0 SR 000 0 \
Figura 10.22. Efecto de te ejecución de la instrucción BRA del Ejemplo 1 on el Contador efe Programa
y en el Registro de Estado.
EJEMPLO 2
000A26 RETFIE
Retorno de la interrupción. (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 01 0 2 3 0
SR 0 00 0 SR 0081
Figura 10.23. Efecto de la ejecución de la instrucción RETFIE del Ejemplo 2 en el Contador de Progra
ma, W ¡5, las direcciones 0830 y 0832, CORCON y en el Registro de Estado.
El manejo de la Pila y su carga y descarga se realiza por su cima que es apuntada por el Stack Poin-
ter (SP) cuya dirección está cargada en 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 instrucción PUSH W4. Por el contrario, con la instrucción
134 dsPIC DISEÑO PRÁCTICO DE APLICACION ES
POP se saca de la Pila el contenido de la cima y se deposita en el operando destino que incluya la
instrucción. Con POP W2 el valor de 16 bits de la cima de la Pila se carga en W2 y W 15 se dccrc-
menta en 2 unidades.
La instrucción P U S IIF carga en la cima de la Pila el contenido de la posición de la memoria de
datos con dirección F, pasando W 15 a incrementarse 2 unidades. Se puede expresar la operación de
la siguiente forma: (F )-^- (TOS) y W15 W15 + 2. Con PUSH Ws se mete en la Pila Ws. La ins
trucción PUSH.D Wns salva en la Pila una doble palabra formada por el contenido de los registros
Wns y Wns + 1, incrementándose en 4 unidades W 15. Con PUSH.S se salvan en la Pila los regis
tros sombra. El contenido de los registros principales se copia en los registros sombra, que son WO,
W 1, W2 y W3 y los señalizadores de SR C, Z, O Y N y DC.
Las instrucciones con nemónico POP hacen la transferencia inversa de PUSH y decrementan a
W15.
La instrucción LNK #lit¡4 salva a 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
maño #lit 14 bytes que está dedicado a manejar una llamada a subrutina. El W15 se carga con W 15
+ #litl4. La instrucción ULNK deshace la operación de LNK cargando W14 en W 15, decremen-
tando 2 unidades a W15 y cargando la cima de la Pila (TOS) en W14. Con LNK y UNLK en deter
minadas secuencias de llamadas a subrutinas se pasa a usar un marco de la Pila con su propio pun
tero W14 consiguiendo un gran aislamiento. (Figura 10.24.)
EJEMPLO l
PUSH W2
Carga W2 a TOS. (Figura 1025.)
EJEMPLO 2
LNK #0xA0
Une marco de pila. (Figura 10.26.)
EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 135
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
PUSH W2
......
W2 I W2
W15 W15
RAM 1566 RAM 1566
SR SR
Figura 10.25. Efecto de la ejecución de la instrucción PU5H del ejemplo en W2, W15, dirección 1566
y en el Registro de Estado.
A N 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
Figura 10.26. Efecto de la ejecución de la instrucción LNK del ejemplo en W I4, W15, dirección 2000
y en el Registro de Estado.
v *»XX* X X
SINTAXIS ENSAMBLADOR DESCRIPCIÓN PALABRAS CICLOS
NOP NO OPERACIÓN 1 1
NOPR NO OPERACIÓN 1 1
RESET REINICIALIZACIÓN 1 1
Con CLRWDT se pone a cero el registro contador del Perro Guardián, así como sus predi viso
res A y B. Tiene la misión de refrescar al WDT y evitar su desbordamiento.
136 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
La. instrucción DISI #lit14 sirve para deshabilitar las interrupciones comprendidas entre fos niveles de
prioridad 1 y 6 durante #lit 14+1 ciclos de instrucción, tras la ejecución de dicha instrucción.
Con NO!5el procesador no realiza ninguna operación consumiendo un tiempo de un ciclo de ins
trucción y ocupando en la memoria de programa una palabra, lo mismo que pasa con la instrucción
NOPR.
La instrucción PWRSAV #lit1 pasa al procesador al modo de bajo consumo Sleep si #Ht1 = 0 y a modo
ldlesi#lit1 = i. También borra al contador del Perro Guardián.
Finalmente, RESET fuerza a todos los registros del núcleo y de los periféricos a tomar un valor
fijo. El bit SWR que es RCON<6> cuando vale 1 señaliza que se ha ejecutado una instrucción
RESET.
En la Figura 10.28 se muestra el valor que toman determinados registros después de ejecutar la
instrucción RESET.
AN TES DESPUÉS
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 W3 0000
•.V,'.-,V.V.V.'.V.' i
W4 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
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
TB LP A G 007F T B LP A G 0000
Figura 10.28. Estado que toman determinados registros después de ejecutarse una instrucción RESET.
EL REPERTORIO DE INSTRUCCIONES. INSTRUCCIONES MCU 137
EJEMPLO l
CLRWDT
Pone a 0 el temporizador WDT. (Figura 10.29.)
A N T E S DE L A IN STR U C C IÓ N D E S P U É S DE L A IN S TR U C C IÓ N
CLRWDT
SR 0000
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
Figura 10.30. Efecto de la ejecución de la instrucción PWRSAV del ejemplo en el Registro de Estado.
,
m&m w m m
m sm W S im
Las instrucciones DSP se distinguen porque en su ejecución interviene el Motor DSP que es un con
junto de recursos hardware que se representan en la Figura 11.1, en la que también se han colocado
algunas instrucciones representativas en los lugares donde se resuelven.
REGISTROS^ C-/5
W
AL B A N C O W
DEL BANCO W
Figura 1 1 .1 . Esquema del M otor DSP en donde se ejecutan las instrucciones DSP.
139
140 dsPIC. DISEÑO PRÁCTICO DE APLICACION ES
El M otor DSP es un circuito muy complejo dedicado a resolver las 19 instrucciones DSP del re
pertorio. Las entradas y salidas del M otor DSP son de 16 bits, pero internamente opera con valores
de 40 bits.
Una peculiaridad destacable de las instrucciones DSP es que operan con los acumuladores A y
B (ACCA y ACCB) de 40 bits de longitud. Cada acumulador se comporta como 3 registros que es
tán mapeados en la memoria de datos en la zona SFR, y se denominan ACCxU, ACCxH y ACCxL.
El primero consta de 8 bits y los otros dos tienen 16 bits cada uno. (Figura 11.2.)
ACCxH ACCxL
39 32 31 16 15
Figura 11.2. Los acumuladores A y B del motor DSP se organizan en tres campos que se comportan
com o 3 registros. La x de la nomenclatura puede ser A o B.
Cada acum ulador dispone de sus propios bits señalizadores del resultado que se ha cargado
en él.
Cuando está configurado el procesador para trabajar con saturación normal (32 bits) el valor a
cargar en el acumulador se hace en ACCxH: ACCxL, dejando ACCxU para guardar el signo. Cuan
do se trabaja con super saturación el valor a alm acenar en el acum ulador ocupa
ACCxU: ACCxH: ACCxL.
Las instrucciones de carga y almacenamiento de los acumuladores con nemónicos LAC y SAC
(SAC.R) sólo afectan a los 16 bits correspondientes al campo ACCxH. (Figura 11.3.)
32 31 16 15
Figura 11.3. Las instrucciones de carga (LAC) y almacenamiento (SAC) de los acumuladores sólo
afectan al campo ACCxH.
Tanto para la familia dsPlC30F como para la dsPIC33F, hay un total de 19 instrucciones DSP y
todas ellas ocupan una palabra de la memoria de programa y todas tardan en ejecutarse un ciclo de
instrucción.
En la tabla de la Figura 11.4 se describen de forma resumida las 19 instrucciones DSP, junto con
los operandos que utiliza cada una de ellas. El valor #SLIT4 representa un valor con signo de 4 bits
que cubre un rango entre - 8 y +7. La función de los # 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
temáticas.
Como los acumuladores ocupan 40 bits y los campos de datos X e Y son sólo de 16 bits, el mé
todo para guardar datos y cargar los acumuladores tiene que ser entendido.
LAS INSTRUCCIONES DSP 141
ADD Ws. ¿SLIT4, Acc SUMA AL ACUMULADOR UN VALOR QUE PUEDE SER DESPLAZADO
Figura 11.4. Tabla con el resumen de las principales características de las 19 instrucciones DSP.
La parte A de la Figura 11.5 muestra que cada acumulador de 40 bits consta de:
El ACCxH se utiliza como registro destino para la carga del acumulador cuando se utiliza la ins
trucción LAC, y también como registro fuente para almacenar el acumulador en la instrucción
SAC.R. Todo esto viene representado en la parte B de la Figura 11.5, donde las partes superior y ba-
142 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
ja del acumulador están sombreadas. En realidad, durante la carga del valor en el acumulador,
ACCxL se carga con 0 y ACCxU se extiende en signo para representar el signo del valor que se ha
cargado en ACCxH.
Cuando se habilita la saturación normal (32 bits), las operaciones DSP (como por ejemplo ADD,
MAC, MSC, etc.) sólo utilizan ACCxH: ACCxL (parte C de la Figura 11.5) y el ACCxU se utiliza
sólo para mantener el signo del valor guardado en ACCxH:ACCxL. Por ejemplo, cuando se ejecu
ta una instrucción MPY, el resultado se almacena en ACCxH: ACCxL, y el signo del resultado se ex
tiende sobre ACCxU.
Cuando se habilita la super saturación, se utilizan todos los registros del acumulador (parte D de
la Figura 11.5) y los resultados de las operaciones DSP se almacenan en ACCxU: ACCxH:ACCxL.
La ventaja de ACCxU es que incrementa el rango dinámico de los valores que se pueden almacenar
en el acumulador en la saturación normal y en la super saturación.
Existen dos formatos para realizar la suma de los acumuladores ACCA y ACCB.
t ° ADD Acc.
2.° ADD Ws, #S¡m, Acc.
Con el primer formato, el operando representado por Acc puede ser A o B. Si es A la suma de
los acumuladores se guarda en ACCA y si es B en ACCB.
EJEMPLO 1
ADD B
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). También 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
AD D WD,#2.A
WO : 3000 W0 8000
SR OCOO ¡ SR 0000
Resta al acumulador especificado en la instrucción el valor binario del otro acumulador, depositan
do el resultado en el primero.
144 dsPIC. DISFÑO PRÁCTICO DE APLICACIONES
La operación se puede realizar con saturación o sin ella controlando el bit SATB del registro
CORCON.
EJEMPLO 3
SUB B
SR 0000 SR 1100
Borra o pone a 0 los 40 bits del acumulador especificado y tiene la opción de prcbúsqueda de ope-
randos como preparativo para una instrucción MAC. También permite el almacenamiento de resul
tados en el acumulador no especificado. Finalmente esta instrucción borra los señalizadores de so-
brepasamiento y saturación OA, OB, SA y SB.
EJEMPLO 4
W5 8001 W5 F122
W6 3000 W6 3002
SR 0000 SR
Con esta instrucción se halla el complemento a 2 del acumulador especificado, afectando a sus 40
bits sin tener en cuenta el modo de saturación con el que se trabaje.
EJEMPLO 5
NEG B
Calcula el complemento a 2 de los 40 bits de ACCB y deposita el resultado en ACCB. (Figura JIJO.)
j
A N T E S DE L A IN STR U C C IÓ N D E S P U É S DE L A IN S TR U C C IÓ N
NEG A
Con la instrucción 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. Además y con carácter opcional se puede realizar en la misma instrucción la prebús-
queda de operandos como preparativo a una MAC.
Al ser posible multiplicar el contenido de un registro por sí mismo, se puede calcular el cuadra
do de un registro.
La instrucción MPY.N multiplica un registro por el negado de otro, lo que proporciona el pro
ducto de dos registros y la negación del resultado (ACC = -X • Y).
EJEMPLO 6
La instrucción ED calcula el cuadrado de la resta de dos operandos (ACC = (X - Y )2) y dicho va
lor extendido en signo hasta 40 bits lo deposita en el acumulador especificado.
146 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
W5 6666
l'oyy.'
W6 88FF
W7 6 71 F
W8 E3DC
W9 1000
CORCO N 0000
SR 0000
EJEMPLO 7
ED W1 x WL By [W8]+=2 , [W 10]-= 2, W1
Inicialmente resta el contenido direccionado p o r W8 del direccionado p o r W10 y el resultado se
carga en WJ. Luego el cuadrado de WI extendido en signo hasta 40 bits se carga enAC C B. Final
mente se incrementa 2 unidades WS y se decrementa lo mismo WIO. (Figura 11.12.)
W1 009A W1 0057
W8 1000 W8 1002
W 10 2300 W 10 27F5
SR 0000 SR 0000
El producto de dos registros de trabajo extendido en signo hasta 40 bits se resta del contenido del
acumulador especificado ACC = ACC -X • Y. Opcionalmente se puede realizar la prebúsqueda de
operandos y el almacenamiento de otro registro en el acumulador no usado.
LAS INSTRUCCIONES DSP 147
EJEMPLO 8
Hay unas pocas instrucciones DSP que tienen la misión de cargar y almacenar los acumuladores
ACCA y ACCB y que se describen a continuación.
Se carga el acumulador especificado con el contenido del registro fuente que admite un desplaza
miento expresado por un valor de 4 bits con signo (de -8 a +7). El dato contenido en el registro fuen
te es de tipo fraccionario (1.15) y se extiende en signo hasta el bit 39, rellenándose con ceros los 16
bits de menos peso antes del posible desplazamiento, que será a la derecha si el signo del valor es
positivo y a la izquierda en caso contrario.
EJEMPLO 9
L°) El valor 1221 Hex, hay que desplazarlo 3 posiciones a la izquierda convirtiéndose en 9108
Hex., como se indica en la Figura 11.13.
Figura 11.13 .A l desplazar 3 posiciones a la izquierda el valor 1221 Hex. se convierte en el 9108 Hex.
2.°) Para completar los 40 bits que hay que cargar en ACCA se extiende el signo en los 8 bits
del campo ACCA U y se rellena con ceros A C C AL, quedando el valor a cargar en ACCA =
FF 9108 0000 Hex.
148 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
El contenido de los bits ACCxH <31:16> del acumulador especificado en la instrucción SAC se al
macena en el registro destino. Opcionalmente se puede desplazar el acumulador el número de posi
ciones expresado por un valor de 4 bits con signo.
EJEMPLO 10
Existe una variante de esta instrucción cuyo nemónico es S AC.R que se diferencia en que lo que
se almacena es el contenido “redondeado” de ACCxH.
Esta instrucción opcionalmente puede realizar la prebúsqueda de dos operandos com o preparación
de una instrucción MAC. Después hay post-escritura del acumulador que no interviene que se al
macena en un registro.
EJEMPLO 11
EJEMPLO 12
SFTAC A, #72
Si inicialmente A C C A = 00 120F FFOO Hex, al producirse el desplazamiento a la derecha de 12 po
siciones se convierte en 00 0001 20FF Hex, que será el nuevo valor de ACCA.
LAS INSTRUCCIONES DSP 149
Una variante de esta instrucción existe cuando el valor del desplazamiento viene dado por los 6
bits de menos peso de un registro de trabajo.
A unque sólo existe una instrucción con nem ónico M AC (M ultiplicar y A cum ular) y dos
variantes, la m ayoría de las instrucciones DSP adm iten las características de esta instrucción
típica de los DSP, que es fundamental para el cálculo de los algoritm os más com unes usados en
el procesam iento de las señales digitales. Se citan las características relevantes de este grupo de
instrucciones.
1Ú Son capaces de realizar dos prebúsquedas de operan dos en la memoria. Normalmente se utiliza
el direccionamiento indirecto con post y pre decremento o incremento.
van a cabo la actualización de los registros utilizados en el direccionamiento indirecto incre-
mentando o s para el tamaño de los datos manejados.
3o*
* —
Ejecutan una operación matemática con alguno de los acumuladores de suma, resta, borrado, ne
gación, multiplicación o desplazamiento.
4* Permiten la post-escritura del otro acumulador que no interviene en la operación matemática. Las
CLR, MAC, MOVSAC y MSC.
EJEMPLO 13
1.°) M AC W 2 x W 3 ,A
El producto de W2 x W3 extendido en signo hasta los 40 bits se suma al contenido de ACCA y el re
sultado se deposita en ACCA
ACCA = ACCA + W2 x W3
ACCA = ACCA + WJ x W2
X([W8] + = 6) + Wl
Y([W10]+=2W2
Periféricos
y recursos
V ¡
Existe una gran variedad de periféricos y dispositivos complementarios que se integran en los di
versos modelos de DSC para proporcionar al diseñador todo lo que necesita su aplicación en un so
lo chip. Los recursos que se implementan en los DSC son los siguientes:
1. Patitas de E/S.
2. Temporisadores de propósito general y Perro Guardián.
3. ConversorAD de 10 bits de afta velocidad y conversor AD de 12 bits de alta resolución.
4. Módulo de Captura.
5. Módulo de Comparación y PWM.
6. Módulo especial PWM para control de motores.
7. Interfaz para Codificador de Cuadratura (QEI).
8. Interfaz para Conversor de Datos (DCI).
9. Interfaz de Periféricos Serie.
10. Módulo UART.
1 /. Módulo l?C
12. Módulo CAN.
13. Controlador de DMA
Cada modelo DSC integra una cantidad de recursos variable según su orientación. En las tablas
de la Figura 12 .1 se presentan los periféricos y recursos que contienen los modelos dsPIC30F y los
modelos dsPÍC33F. Cabe destacar que una de las principales diferencias entre ambos es el hecho de
que el modelo dsPIC33F dispone de un controlador de DMA.
Hay modelos DSC de la familia dsPIC30F con 54 patitas de E/S que multiplexan otras funciones
para perm itir el manejo de los periféricos 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 C O N V ER S O R AD
LÍNEAS TEM PO R IZ A D O R ES M Ó D U LO - in t e r f a z !
D ISPO SITIV O PATITAS CO M PA RA D O R/ 12 BITS UART SPI fe CAN
E/S 16 BITS CAPTURA CO D EC
dsPIC
PW M N ORM AL 100KBPS
......................
dsPIC30F3014 40/44 30 3 2 2 - 13ch 2 1 1 - ]
DISEÑO
dsPIC30F4013 40/44 30 5 4 4 AC97, |2S 13ch 2 1 1 1
PRÁCTICO
i dsPIC30F6012 64 52 5 8 8 AC97, |2S 16ch 2 2 1 2
dsPl€30F6013 80 68 5 8 8 - 16ch 2 2 1 2
DE APLICACIONES
dsPIC30F6014 80 68 5 8 8 AC9 7, |2S 16ch 2 2 1 2
dsPÍC30F6011A 64 5 8 8 • 16ch 2 2 I 2
dsPIC30F6013A 80 5 8 8 - 16ch 2 1 2
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
M Ó D U LO C O N T R O L C O N V ER SO R AD
LÍNEAS TEM PO R IZ A D O RES M Ó D U LO
D ISPO SITIV O PATITAS CO M PA RA D O R/ M O TO RES 10 BITS Q EI UART SPI l2C CAN
E/S 16 BITS CAPTURA
PW M N ORM AL PWM 500KBPS
Figura 12.1. Relación de periféricos 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
LÍNEAS TEM PO R IZA D O RES M Ó D U LO
D ISPO SITIV O PATITAS CO M PA RAD O R/ 12 BITS UART SPI r’c |
E/S 16 BITS CAPTURA
PWM ESTÁNDAR 100KBPS
dsP!C30F2011 18 12 3 2 2 fich 1 1 1
dsP O 0F 3012 18 12 3 2 2 8c h 1 1 1
dsPIC30F2012 28 24 .5 7 2 10ch 1 1 1
dsPIC30F3013 28 24 3 2 2 10ch 2 1 1
Figura 12.1. Rotación de periféricos y recursos que integran ¡os modelos dsPiC30F y dsP!C33F. (Continuación)
54
dsPIC. DISEÑO
MODELOS dsPIOSF PARA CONTROL DE MOTORES Y SISTEMAS DE ALIMENTACIÓN
MÓDULO CONTROL IvX’j v!
LÍNEAS TEMPORIZADORES MÓDULO CONVERSOR
PRÁCTICO
DISPOSITIVO PATITAS COMPARADOR/ MOTORES QEI UART SPI re CAN DMA
E/S 16 BITS CAPTURA AD ¡V'ív£v>
l i l i PWM NORMAL PWM
DE APLICACIONES
dsPIC33FJ64MC510 : 100 85 9 8 8 8ch 1 A/D, 24ch 1 2 2 2 1 2
Figura 12.1. Relación de periféricos y recursos que integran los modelos dsPIC30F y dsPIC33F(Continuación)
PERIFÉRICOS Y RECURSOS INTEGRADOS 155
o absorber hasta 25 mA. Las patitas de E/S que multiplexan señales correspondientes a los perifé
ricos dejan de ser E/S digitales cuando están funcionando dichos periféricos.
Las patitas de E/S se agrupan para conformar las puertas de E/S, cada una de las cuales tiene aso
ciados 3 registros:
TRISx: Registro de Dirección de los Datos. Cada uno de sus bits determina la dirección de la pati-
Ui de E/S asociada.
' valor lógico de las patitas
El registro LATx resuelve los problemas que provocan las instrucciones que leen, modifican y
escriben las puertas. Una escritura sobre PORTx o LATx escribe un valor sobre el “latehn de la puer
ta. Una lectura de PORTx recoge el valor de las patitas de E/S. pero una lectura de LATx lee el va
lor guardado en el “latch” o registro cerrojo de la puerta. En la Figura 12.2 se muestra el esquema
de interconexión de una patita de E/S.
El número de patitas de E/S depende del modelo de DSC que se trate. Así hay dispositivos con só
lo 12 patitas de E/S dedicados para el manejo de sensores, como los dsPIC30F2011/3012/2012/3013,
y otros que llegan a 68, como los dsPTC30F5013/6013/6014/6010, y que disponen de las puertas
PORTA, PORTB, PORTC, PORTD, PORTE, PORTF y PORTG.
Existen hasta 24 patitas de E/S que tienen la posibilidad de generar peticiones de interrupción al
producirse un cambio de su estado lógico. Dichas patitas, llamadas CN, se programan con 4 regis
tros asociados CNEN1 y CNEN2, que activan o desactivan la petición de interrupción, y CNPU1 y
CNPU2, que habilitan o deshabilitan el circuito pull-up que tiene cada una de estas patitas.
156 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
1 2.3 . TE M P O R IZAD O R ES
Según el modelo de DSC puede contener de 3 a 5 temporizadores de 16 bits en los dísPIC30F y has
ta 9 en el caso de los dsPIC33F, llamados 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 actúan como señalizadores del desbordamiento de los temporizadores.
• TxlP<2:0>: Son tres bits dedicados a cada temporizador que establecen el nivel de prioridad de
la interrupción correspondiente.
Los temporizadores utilizan un divisor de frecuencias previo que puede dividir la frecuencia de
los impulsos aplicados por 1, 8, 64 o 256.
En los m ódulos de Captura, Com paración y PW M los tem porizadores actúan como base de
tiempo.
PERIFÉRICOS Y RECURSOS INTEGRADOS 157
12.4. CONVERSORES AD
Los conversores AD integrados en los DSC pueden ser de 10 hits de resolución y alta velocidad, o
bien, de 12 bits de alta resolución. Convierten una señal analógica de entrada en un valor digital de
10 o 12 bits. En la Figura 12.3 se muestra un esquema de la estructura interna del conversor AD de
10 bits.
"?V
BUFFER i
FORMATO
16 PALABRAS 3
AN 15
EN TRAD AS
A N A LÓ G IC A S
Según el esquema de la Figura 12.3 los multiplexores de las entradas seleccionan la señal ana
lógica a convertir que es la introducida por las patitas AN0-AN15. Pasa por uno de los 4 circuitos
amplificadores de captura y mantenimiento (S&H) y se selecciona una salida con los interruptores
electrónicos que la introduce al CAD. La multiplexación de los canales de entrada determina la fre
cuencia del mucstreo.
El conversor AD de 10 bits responde a las siguientes características:
m m m
•>VcViV«V4V.;<
Velocidad máxima de conversión de 1 Msps con una impedancia máxima de 500 Ohm, trabajan
do normalmente a 500 ksps (kilo muestras por segundo) a 5 V y 100 ksps a 2,7 V.
Tiempo de muestreo de 154 ns.
Capacidad de hasta 4 patitas de entrada para muestreo simultáneo.
Exploración automática del canal.
Bufíer de 16 palabras para el almacenamiento de los resultados de la conversión.
12.5. M Ó D U L O DE CAPTURA
Tiene la misión fundamental de medir el tiempo que dura un acontecimiento externo producido por
una señal que se aplica a una de las patitas de entrada del módulo y que se mide con el TIMER2 o
el TIMER3. Es muy útil en aplicaciones que hay que controlar la frecuencia o el periodo de los im
pulsos a analizar.
Los modos de trabajo se distinguen por el momento en el que se realiza la captura de la señal a
medir, y son:
.
1. Cada flanco descendente de la señal de entrada capturada. ■.v C v !-v> *
...
. 2. Cada flanco ascendente. ví‘*i-.v -'-./ v V ■vKvItSÍ.’Xv- 11
3. Cada 4 flancos ascendentes. . v i v ; — - -* m<:
> • > .• • V A -
.
• ’
4. Cada flanco ascendente y descendente.
■
TMR2 TM R3
Los impulsos aplicados a las patitas de entrada ICx del módulo de Captura mostrado en la Figu
ra 12.4 se divide por 1, 4 o 16 en el divisor de frecuencia según el valor de los bits correspondien
tes en el registro ICxCON, que también gobierna el tipo de flanco que origina el periodo de medi
da. El bit ÍCTMR selecciona el Timer que actuará de base de tiempos en la medición. Dicha base de
tiempos se regula desde el Detector Lógico de Flancos, que al acabar el periodo a medir deposita en
el buffer para los resultados el valor del Timer seleccionado y dos ciclos de instrucción después ac
tiva el señalizador de interrupción ICxíF.
PERIFÉRICOS Y RECURSOS INTEGRADOS 159
12.6. M Ó D U L O DE CO M PA R A C IÓ N /PW M
Este recurso es muy eficaz en aquellas aplicaciones que precisan generar impulsos de anchura va
riable y los que realizan operaciones simples de PWM. Para estas últimas tareas existen algunos mo
delos de DSC con un módulo complejo e independiente especializado en PWM para control de mo
tores que será explicado más adelante.
Tienen los siguientes modos de trabajo:
FLAG
INTERRUPCIÓN
OCxlF
r OCx
ySj
PATITA
SALIDA
SALIDA
, OCFA
a
MPX O C TS E L ► M px
OCFB
& 4* i
/
13
ir MODO OPERACIÓN
TIMER2 TIMER3 SEÑAL SEÑAL
TIMER2 TIMER3
. Cuando coincide el valor cargado en el registro OCxR del esquema de la Figura 12.5 con el del
Timer seleccionado, la Lógica de Salida obliga a la patita de salida OCx (OC1-OC8) a tom ar un ni
vel lógico determinado, a generar un impulso o incluso a producir un tren de pulsos continuos. Las
patitas OCFA y OCFB sirven para controlar el funcionamiento en modo PWM con entradas de pro
tección de fallo.
160 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Sirve para generar un tren de impulsos de anchura variable que permite variar la potencia que se en
trega a un motor y regular su velocidad con precisión.
Existen grupos de dispositivos DSC destinados al control de motores, pudiendo ser de dos tipos
en función de las patas del mismo: módulo de 8 salidas si el dispositivo es de 64 palas o más y otro
de 6 salidas en caso de un número menor. El módulo PWM de los los dispositivos dsPIC30F tiene
las siguientes características:
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
7
Se comienza cargando el ciclo de trabajo y la señal para cada generador en sus respectivos re
gistros PDCx (Ciclo de trabajo). También se programan los registros de configuración para deter
minar el tipo de señal que se desea en cada generador. Luego, en el registro PTPER (Registro base
PERIFÉRICOS Y RECURSOS INTEGRADOS 1 61
1) Modo ñormui
Cada vez que el temporizador PTMR alcanza el valor del registro PTPER se genera una interrup-
;- ción y el temporizador vuelve a 0.
■ 2) Pulso único
Sólo funciona cuando se pone el bit de control PTEN = 1 y se iguala el valor del temporizador PTMR
con el del registro PTPER, generándose un solo pulso por interrupción y pasando PTEN = 0.
3) Modo ascendente/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 interrupción y pasa a contar en modo ascendente.
Como no es posible que las salidas PWMxH y PWMxL conmuten a la vez, $e introduce un tiempo
muerto que se controla desde los registros DTCON1 y DTCON2.
4) Disparo especial
En este modo es posible sincronizar el módulo PWM con el conversor AD para llevar a cabo ope
raciones combinadas.
12.8. M Ó D U L O UAR T
Los DSC disponen de uno o más UART, según el modelo que se trate. El UART es un elemento des
tinado a soportar la comunicación serie asincrona y funciona de forma bidireccional, adaptándose
al trabajo de muchos periféricos. La comunicación se realiza con dos líneas, una para la transmisión
UTX y otra para la recepción URX, entrando y saliendo los bits a una frecuencia controlada inter
namente.
El UART dispone de un generador de baudios con un predivisor de frecuencia que se encarga de
generar la frecuencia de trabajo del módulo.
GENERADOR
' DE BAUDIOS
.......
RECEPTOR
"ART:
UART r
URX
W L m JÈ Ê Ê m
TRANSMISOR i¡
UART
vXwiv :
En la Figura 12.7 se ofrece el esquema por bloques del módulo UART, en el que se distinguen
los 3 elementos hardware principales del módulo UART: generador de baudios, transmisor asincro
no UART y receptor asincrono UART. Funciona en modo “full-duplex” con datos de 8 o 9 bits, 1 o
2 bits de STOP y un bit de paridad par o impar.
El módulo UART está compuesto por los siguientes registros:
UMODE: Registro de Modo
USTA: Registro de Control y Estado
URREG: Registro de Recepción
UTREG: Registro de Transmisión
UBRG: Registro del generador de Baudios
El comportamiento del UART se gobierna desde los registros USTA, URREG y UTREG.
Puede generar una interrupción tanto el bloque transmisor como el receptor y el margen de fre
cuencias que soporta abarca desde 38 Hz hasta 2,5 Mbps.
12.9. M Ó D U L O SPI
Consiste en un interfaz serie síncrono que es muy empleado para establecer la comunicación con mi-
crocontroladores, memorias EEPROM, conversores AD, etc. Todos los modelos DSC disponen al
menos de uno de estos módulos SPI.
En la Figura 12.8 se ofrece el esquema por bloques del módulo SPI, en el que se distinguen varios
registros SFR que soportan el manejo de la información con el bus de datos. Uno se llama SPIBUF y
guarda los datos que se envían y se reciben internamente y consta de dos registros unidireccionales de
16-bits, denominados SPIRB y SPITB, que guardan el dato recibido o el que hay que transmitir, res
pectivamente. Otro es el SPISR que desplaza los bits de datos de entrada y de salida al registro SPI
BUF. Otro más es el registro de control SPTCON que gobierna al SPIRB y al SPITB. Y, finalmente,
el registro SPISTAT contiene los bits de estado que informan de las condiciones de trabajo.
18 BUS DE DATOS
-----------
PREESCALER
En el esquema de la Figura 12.8 la patita SDI es por la que se introducen los datos en serie y la
SDO por la que salen. SCK es la patita que introduce los impulsos de reloj en el modo maestro,
mientras que en modo esclavo actúa como salida. SS# es la patita mediante la que se activa el mo
do esclavo con nivel lógico bajo.
12.10. M Ó D U LO l2C
Dada la popularidad y uso del protocolo de comunicación I2C los DSC disponen de un módulo que
permite su adaptación y que es muy empleado en las transferencias de información con otros mi-
crocontroladores, registros de desplazamiento, conversores AD,.ctc.
El módulo I2C (Inter-lntegrated-Circuit) tiene el hardware necesario para trabajar en modo es
clavo y en modo maestro. Como se aprecia en la Figura 12.9 todos los elementos que se conectan
al bus I2C lo hacen a través de dos líneas, SDA (Datos) y SCL (Reloj).
Figura 12.9. Para la comunicación c.on el protocolo PC sólo se utilizan dos líneas, una para los datos
(SDA) y la otra para el reloj (SCL).
En este protocolo las direcciones de los elementos de la red pueden especificarse con direccio
nes de 7 o 10 bits. Iniciada la transferencia de información se envía la dirección del elemento y al
comprobar que le corresponde genera una señal de reconocimiento ACK que permite el progreso
de.la transferencia.
Los registros I2CCON e I2CSTAT son los registros de control y estado del módulo I2C, respec
tivamente. Como registro receptor actúa I2CRCV y com o transmisor el I2CTRN. La dirección de
cada esclavo viene almacenada en el registro I2CADD y, finalmente, el registro I2CBRG contiene
el valor de recarga del generador de frecuencia.
164 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
12.11 M O D U L O D C I
El módulo interfaz del Conversor de Datos (DCI) permite una sencilla comunicación con muchos
dispositivos comunes como los codificadores/decodificadores de audio (CODEC), telefonía, reco
nocimiento de voz, eliminación de eco, los conversores AD/DA, etc., soportando los siguientes ti
pos de interfaces:
.. ■. :
a) Transferencia de trama serie síncrona.
b) Inter-IC Sonido (l2S). * ÍÍK
c) AC-Link Compliant (AC'97).
La aplicación más interesante del módulo DCI es la destinada a las aplicaciones de voz y soni
do de alta calidad con frecuencias comprendidas entre 8 y 48 KHz que trabajan con palabras co
dificadas. El tamaño de la palabra puede programarse hasta 16 bits, con 16 ranuras de tiempo para
una trama de un máximo de 256 bits que puede almacenar hasta 4 muestras sin la supervisión de la
CPU. Está configurado para recibir y transmitir datos en espacios múltiplos de 16 bits, operación
que se hace de forma transparente para el usuario.
A estos registros se les añaden cuatro para la transmisión TXBUF0...TXBUF3 y cuatro para la
recepción RXBUF0...RXBUF3.
12.12 M Ó D U L O CAN
El módulo CAN (Controller Arca NetWork) consiste en un interfaz serie muy empleado para la co
municación con otros periféricos u otros modelos de microcontroladores.
El bus CAN fue usado por primera vez en 1980 por la industria del automóvil para solventar la
gran densidad de cableado entre sus diferentes elementos y el ruido ambiental. Con el bus CAN se
reduce el cableado y se evitan las interferencias de los ambientes ruidosos.
Los mensajes que se transmiten por este procedimiento carecen de los campos de dirección pa
ra el origen y para el destino, en su lugar se emplea un identificados Los nodos conectados al bus
CAN analizan el identificador y deciden si recogen o no la trama.
El módulo CAN que incorporan los DSC satisface las especificaciones de la norm a o versión
2.0B que utiliza identificadores de 11 y/o 29 bits. También soporta los protocolos 1.2, 2.0B Pasivo,
2.0B Activo y 2.0A.
Para la comunicación el módulo CAN maneja 2 buffer de entrada con prioridad y 3 de transmi
sión. La longitud de los datos está comprendida entre 0 y 8 bytes y la trama puede ser estándar o ex
tendida. Puede generar interrupciones cuando se producen errores.
PERIFÉRICOS Y RECURSOS INTEGRADOS 165
• Registros de Interrupciones
CilNTE: registro de activación de interrupciones.
CilNTF: registro de FLAGvS de interrupción.
12.13 M Ó D U L O QEI
El módulo QEI (Interfaz del Codificador de Cuadratura) proporciona una cómoda adaptación de los
codificadores incrementales usados para la detección de la posición y la velocidad en los sistemas
rotacionales propios de los ejes de motores.
166 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
A) FUENTE DE LUZ
LUZ
B) DISCO RANURADO
Figura 12.10. Principio de funcionamiento de un codificador incremental usado en e l control del posi-
cionamiento del eje de un motor.
- Tres patas: dos para la señal de fase y una para el “index pulse”.
- Filtros programables de nudos en la entrada.
- Decodificador de cuadratura provisto de un contador de pulsos.
- Contador ascendente/descendente de 16 bits.
- Estado de la cuenta de direcciones.
- Resolución de cuenta X2 y X4.
- Dos modos de reset para el contador.
- Contador ascendente/descendente de propósito general de 16 bits.
- Interrupciones.
PERIFÉRICOS Y RECURSOS INTEGRADOS 167
El Perro Guardián es un temporizador dedicado cuya única misión es vigilar el procesamiento del
flujo de control y reinicializar el procesador cuando se produzca un fallo. Fundamentalmente detecta
situaciones en las que se queda colgado el procesador porque se ha metido en un bucle infinito o es
tá esperando que suceda una condición que nunca ocurre.
El WDT se 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 estratégicos se colocan instrucciones CLRWDT que re
frescan o ponen a 0 al WDT y evitan que se desborde. Cuando el procesador se enreda en un blo
que del programa del que no sale, no hay refresco y al desbordarse el Perro Guardián se genera un
Reset.
El Perro Guardián es optativo y puede deshabilitarse mediante el bit FWDTEN ubicado en el re
gistro de configuración FWDT.
Los dispositivos dsPlC30F tienen 2 modos de funcionamiento de bajo consumo que pueden ser
seleccionados mediante la ejecución de la instrucción PWRSAV.
• SLEEP: tanto la CPU como los periféricos dejan de funcionar al detenerse el reloj del sis
tema mediante la inhabilitación de los osciladores principal y externo respectivamente.
Este es el modo en que menos potencia consume.
• IDLE: la CPU se deshabilita y deja de ejecutar instrucciones, pero los periféricos siguen
funcionando aunque pueden ser desactivados opcional mente. En este modo sólo se des
habilita el oscilador principal.
Los dsPJC33F tienen también el modo de bajo consumo DOZE que consiste en rebajar la fre
cuencia de trabajo para disminuir la energía consumida.
Para salir de los modos de bajo consumo existen tres causas:
Ia) Interrupción.
2a) Rcset.
3a) Desbordamiento del W DT
12.15 EL C O N T R O L A D O R D M A
Además de todos los periféricos que integran los dsPIC30F. los dsPIC33F disponen del Controla
dor de Acceso Directo a Memoria (CDMA).
El controlador DMA es un dispositivo que permite transferir datos directamente entre la memo
ria y los periféricos a gran velocidad y sin la participación de la CPU que puede dedicarse a otras
misiones. (Figura 12.11.)
168 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
Figura 12.11. El Controlador DMA permite la transferencia directa y veloz de datos entre la memoria y
los periféricos sin intervención de la CPU.
Los dsPIC33F y los PTC24H para soportar el DMA utilizan una memoria de doble puerto (DPS-
RAM), dedicando uno de ellos a la comunicación con la CPU y el otro con los periféricos. En la Fi
gura 12.11 se ha simplificado el diagrama por bloques que representa el funcionamiento del CDMA.
Cada vez que un periférico intenta transferir datos con la memoria genera una interrupción al CD
MA que pasa a controlar las líneas de los buses de datos, direcciones y control y organiza el tras
vase directo y veloz de la información entre el periférico y la memoria de datos.
En los modelos dsPIC33F, el CDMA dispone de 8 canales para soportar las transferencias y la
existencia de dos bus es de datos independientes, uno entre la CPU y los periféricos y el otro entre
la memoria y los periféricos elimina gran parte de las colisiones, pudiendo realizar diversos acce
sos simultáneos:
1° Es posible realizar una lectura de una misma posición de un periférico o de la DPSRAM desde la
CPU o desde el CDMA.
2.° Es posible escribir simultáneamente dos posiciones diferentes de la memoria o del periférico des
de la CPU y eJ CDMA.
3 ° Se produce una colisión si se intenta escribir la misma posición de la memoria o del periférico des
de la CPU y desde el CDMA a la vez. En este caso prevalece la escritura de la CPU y se genera
una excepción que recoge los detalles que han producido la colisión, así como también se activa
el señalizador de colisión correspondiente al canal en el que se ha producido.
Como se muestra en la Figura 12.13 la comunicación de los periféricos mediante dos buses con
la CPU y el CDMA permite implementar todo tipo de transferencias bidireccionales y directas en
tre los periféricos y la DPSRAM.
La gran ventaja del CDMA es la gran velocidad con la que se transfieren datos entre la memo
ria y los periféricos sin afectar al trabajo de la CPU y sin rebajar el rendim iento del sistema. A tra
vés de los 8 canales del CDMA se puede transferir bidircccionalmente un dato de tamaño byte o
PERIFÉRICOS Y RECURSOS INTEGRADOS 169
B LO Q
CO N TR O LADO R DATOS
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 periféricos.
TEMPORIZ TEMPORIZ
BUSTJÄTSSli 7IÄ"
Figura 12.13. Median te el control de los canales del CDMA se puede atender a un gran número de
periféricos.
palabra en un ciclo. Cada bloque de datos que puede transferirse puede alcanzar los 2.048 bytes o
palabras. En el CDM A existe un esquema de prioridades entre los canales para los casos de coli
sión entre ellos.
Con la finalidad de conseguir el máximo rendimiento en la transferencia con DM A el contro
lador tiene 4 modos de funcionamiento que permiten adaptarse a las estructuras de datos que se
manejen.
170 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
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. Representación gráfica 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. Representación gráfica del funcionamiento del modo de trabajo de autorepetición del
CDMA.
En el modo “ping-pong” se manejan 2 buffer de datos y cada vez que se completa la transmisión
de uno de ellos se configuran automáticamente los canales para comenzar la transferencia del otro.
(Figura 12.16.)
PERIFÉRICOS Y RECURSOS INTEGRADOS 1 71
E S P A C IO D IR E C C IO N E S D PSRAM
BUFFERÀ
IN T E R R U P C IÓ N CPU
C O U N T = D M A C N Tx j^ > AL CO M PLETAR
TR A N S F E R E N C IA
B U FFE R B
D IR E C C IO N
EXTEN SIÓ N
IN D IR E C T A D ESDE
DE C ER O S
P E R IFÉ R IC O
D IR E C C IÓ N D PSRAM
/ ______
:
î
« :
i!
°
D IRECCI ÓN BASE j
Î
D IR EC C IÓ N BASE R E S P O N S A B ILID A D
D ES D E D M A S Tnx DEL U S U A R IO
DE TRABAJO ..................................................................................................................275
APLICACIÓN
V lV
Las herramientas
m M
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 teórico de los controladores dsPIC,
se aborda un estudio más práctico de los mismos, mediante el desarrollo de varias aplicaciones. Así,
se estudiará desde cómo comenzar a programar las aplicaciones, compilarlas y simularlas en el orde
nador, hasta desarrollar alguna aplicación de los periféricos avanzados introducidos en estos controla
dores para el tratamiento digital de señales. Así mismo, al final de cada capítulo una sección de auto-
evaluación, servirá al lector para conocer su evolución en la asimilación de los conceptos descritos.
Para llevar a cabo esta tarea, esta segunda parte se encuentra dividida en varias aplicaciones prác
ticas explicadas con detenimiento, tanto para el lector aventajado que ya ha programado con ante
rioridad los microcontroladores PÍC, como para el neófito.
En este capítulo introductorio se analizan las herramientas a emplear, así como las característi
cas de la familia del dsPIC utilizada tanto en esta segunda parte como en la tercera, en la que el lec
tor podrá comprobar prácticamente los conocimientos adquiridos mediante ejercicios sobre circui
tos reales, utilizando la taijeta PIC School preparada a tal efecto.
Las características de estos dispositivos requieren poseer una base teórica sobre el tratamiento di
gital de señales. Esta teoría de señales no es objeto de este libro.
El controlador elegido para realizar todas las aplicaciones y laboratorios, tanto de la segunda como
de la tercera parte del libro, es el dsPIC30F4013 perteneciente a la familia de propósito general, que
ha sido seleccionado por varias de sus características.
En primer lugar pertenece a una familia de propósito general, que lo hace especialmente intere
sante para poder adentrarse en el estudio de todas las posibilidades de los dsPIC. Por otro lado, se
trata de un DSC con encapsulado PDIP (Plástic Dual In-line Package), que permite una mayor sen
cillez de montaje sobre un circuito electrónico frente a otro tipo de encapsulados. Sin embargo, una
pequeña desventaja de este modelo es que no dispone de hardware específico para el tratamiento de
PWM, muy útil en el control de motores.
175
176 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
AO .2.1. D ia g ra m a de co n e xio n a d o
M CLR n 1 40 I] A V D D
AN0A/REF+/CN2/RB0 C 2 39 1 AVSS
AN1A/REF-/CN3/RB1 n 3 36 j AN9/CSCK/RB9
AN2/SS1/LVDIN/CN4/RB2 C 4 37 1 AN10/CSDI/RB10
AN3/CN5/RB3 C 5 36 H AN11/CSDO/RB11
AN4/IC7/C N6/R B4 fz 6 35 3 AN12/COFS/RB12
AN5/IC8/CN7/RB5 H7 34 3 EMUC2/OC1/RDO
PGC/EMUC/AN6/OCFA/RB6 C 8 "O 33 H EMUD2/OC2/RD1
PGD/EMUD/AN7/RB7 C 9 32 □VDD
o
AN8/RB8 J= 10 Ca> 31 H V SS
VDD n ti o 30 b C1RX/RF0
vss n 12 2 29 □ C1TX/RF1
OSC1/CLKIN n 13 o 28 □ U2RX/CN17/RF4
OSC2/CLKO/RC15 C 14 27 □ U2TX/CN18/RF5
EM UD1/SOSO I/T2CK/U1ATX/CN1 /RC13 C 15 26 □ U 1RX/SDI1/SDA/RF2
EMUC1/SOSCO/T1CK/U1ARX/CNO/RC14 H 16 25 □ EMUD3/U1TX/SD01/SCL/RF3
INT0/RA11 C 17 24 □ EMUC3/SCK1/RF6
IC2/1NT2/RD9 £ 10 23 □ IC1/1NT1/RD8
OC4/RD3 Q 19 22 □ OC3/RD2
V ss q 20 21 □ VDD
Las características propias más importantes del dsPIC30F4013 se encuentran resumidas en la si
guiente tabla.
MEMORIA i
Memoria de programa de 48 KB de capacidad. Hasta 16K instrucciones.
2048 bytes de memoria SRAM
1024 byies de memoria EEPROM
16 registros de trabajo de 16 bits cada uno
PERIFÉRICO S_______________ ~
5 temporizadores de I (> bits
4 módulos de captura de 16 bits
4 módulos comparadores o de salida PWM de 16 bits
_____ Interfaz de conversión de datos DCI, con soporte de CODEC de audio AC'97 e l'S
2 módulos UART
1 módulo SPI
1 m ódulo CAN
I módulo l2C
c a r a c t e r Ts t Tc a s a n a l ó g i c a s
Se describen las características y usos de las herramientas software que se utilizarán para desarro
llar las aplicaciones. L a instalación de estas herramientas se encuentra detallada en el Apéndice A,
Contenido del CD e Instalación 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.)
Se dedica un capítulo a explicar las características de este entorno con el que se desarrollarán la
mayoría de las aplicaciones. A modo de resumen, se destacan las siguientes características:
El programa dsPICFdLite, desarrollado por Momentum Data Systems Inc., es una versión DEMO de
carácter introductorio y limitado que sirve para resolver filtros FIR e IIR de escasa complejidad 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 diseño de filtros.
Todos los cálculos matemáticos complejos necesarios para realizar estas tareas se simplifican
enormemente y, además, se obtienen una serie de gráficos (magnitud, fase, respuesta ante impulso,
respuesta ante escalón, polos y zeros, retraso,...) que permitirán predecir el comportamiento de los
filtros diseñados. Simplemente, introduciendo las especificaciones del filtro que se desea realizar,
tanto filtros FIR, como IIR, filtros pasabaja, pasaalta, pasabanda y banda eliminada, se genera un fi
chero con los coeficientes del filtro con un par de clics de ratón y se puede importar ese fichero pa
ra usarlo directamente en el MPLAB IDE. De igual forma, la aplicación generará el código en en
samblador o en C para utilizar dicho filtro en nuestro programa para el dsPIC. (Figura A0.3.)
n i: - 'a -- 7
Esta herramienta es una versión reducida del programa dsPIC Fd. Se trata de una versión con
ciertas limitaciones, tales como el orden máximo de los filtros generados.
Esta herramienta, también descrita en la Aplicación 2, permite realizar análisis y tratamiento de se
ñales de forma sencilla.
El programa permite generar e importar y exportar señales de todo tipo. Así mismo dispone de
un sencillo menú para realizar operaciones típicas de DSP (Procesamiento Digital de Señales) co
mo realización de transformadas, filtrado de señales (utilizando los filtros diseñados con el progra
ma dsPICFdLite), escalado, recorte de señales, etc.
La aplicación también muestra en pantalla representaciones de las señales, incluso con gráficos
3D.
Los datos de las señales podremos incorporarlos al MPLAB IDE y crear ficheros en ensambla
dor para incluir en la aplicación. (Figura A0.4.)
HQ
r in * fn S ! 1 3 .5 8 3
il.l
A U TO E V A LU A C IÓ N
Al final de cada capítulo de esta parte práctica, encontrará bajo el epígrafe Conceptos clave de este
capitulo una serie de preguntas que le ayudarán a verificar si ha asimilado y comprendido los con
tenidos explicados en el capítulo.
A sí mismo, se propone una serie de enunciados de ejercicios correspondiente a la aplicación
estudiada.
180 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
um m
1. ¿Con qué hern 'esarrollarán los programas para dsPIC?
2. ¿Es necesaria gunda parte de esta obra alguna placa de desarrollo o hardware basado
en dsPIC?
3. ¿De cuánta me a de datos y de programa dispone el dsPlC30F4013?
4. ¿Con qué herr¿ se debe tener especial cuidado al instalarla?¿por qué?
¿Qué herramienta generará automáticamente el código fuente necesario para desarrollar un filtro
para un dsPIC?
iSgB8B8SIW«fi88giKgaai
APLICACIÓN
s
y!vy.' /•'•Vv / . Í
WsS'&yWm Diseñando
W m M á,
WhiWiFFFfffifiiC?:-' ,
<*• W A W . W :
filtros
A1.1. IN T R O D U C C IÓ N
La teoría de filtrado de señales abarca un temario muy amplio y denso lleno de cálculos matemáti
cos. Elaborar esos cálculos matemáticos con los PIC resultaría una tarea muy ardua debido a su ca
rencia de instrucciones para hacer divisiones, multiplicaciones, y operaciones matemáticas de más
complejidad.
La empresa M icrochip dispone de dos herramientas especialmente útiles para el tratamiento de
señales. Se trata de las herramientas dsPTC Fd Lite y dsPICworks. Ambas están disponibles para su
descarga gratuita desde la web www.microchip.com. En caso de que la herramienta de diseño de fil
tros dsPIC FD Lite no cumpla con todas sus expectativas, debe saber que existe una versión com
pleta, con más funcionalidades, que comercializa Microchip.
En el capítulo anterior, se han analizado las funcionalidades principales de las dos herramientas que
aborda este capítulo: dsPIC Fd Lite y dsPICworks.
Se propone resolver un problema de filtrado de señales, utilizando dichas herramientas. Sin lle
gar a profundizar en todas las funcionalidades y a través de un ejemplo clarificador, se mostrará el
potencial que alcanza la combinación de estas 2 herramientas.
A1.3. EL PROBLEMA
181
182 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Al hacer doble clic sobre este fichero, se reproduce un mensaje con un ruido muy molesto. El ob
jetivo de este ejercicio es eliminar ese ruido molesto de ese fichero y escuchar el mensaje de forma
correcta.
Las posibles aplicaciones de este ejemplo son muchas, pero quizás un ejemplo muy interesante
es el de los m icrofiltros en las líneas ADSL. (Figura A 1.1.) Las líneas ADSL aprovechan el ca
nal telefónico para enviar información al ordenador. Así, estos filtros permiten hablar por teléfo
no y navegar simultáneamente sin ningún problema. Las dos señales navegan por el mismo canal
hasta el receptor. Para que al hablar por teléfono, no se mezclen las señales, y sólo llegue la señal
de voz, se debe colocar unos microfiltros en las tom as de los teléfonos, que filtran la señal a m o
do de colador, evitando que lleguen a nuestros oídos ruidos producidos por la señal de Internet.
El ejemplo desarrollado actúa de form a similar, al conseguir quitar de la señal de voz el ruido que
acompaña.
También es interesante el proceso contrario: extraer del mensaje una señal que contenga sólo el
ruido. Así se podría enviar mensajes en clave, camuflándolos con un mensaje de audio normal. En
ese caso, para descifrar el mensaje, hay que filtrar la señal original de forma que sólo quede el rui
do original y aplicar sobre este otro algoritmo de tratamiento de señales para obtener el mensaje des
cifrado final.
Al escuchar la señal a través de los altavoces del ordenador, se aprecia que la frecuencia del ruido
es muy distinta a la del resto de la señal. Es un tono mucho más agudo.
El primer paso consistirá en localizar el rango de frecuencias en las que se encuentra el ruido.
Una vez localizado dicho rango, se deberá diseñar un filtro que consiga hacer desaparecer de la se
ñal original la parte que contenga dichas frecuencias. El programa dsPICworks1 permite analizar la
señal. (Figura A l.2.) Una vez puesta en marcha la herramienta, se procede a cargar la señal a es
tudiar. El program a no trabaja directamente con señales .WAV, sino con un formato interno de pro
grama, cuyos archivos tienen una extensión J I M . La conversión a este formato se realiza de una
form a bastante sencilla:
y.v.-y.-y.v/.v i'iv / iv iv X v i'/ iv X v y.'.-'.' v-;.;-v.v<::*v'v-.v■yy.'.\\\-y.y.\-y.-y- l¿^ '^.\-yy '.-y yy. ‘-y.-y. >'
'. X vXv.;.v.-iv.;.
S c u ce Ffe mensaje cor. rtó io .w a .
Sampling R a le
ImponFieFormal j WindowsWAVEfile
NumberofChannels (l
FFTFwneSize | 1024
FFTIntevd }1024
FFTWindcwFonction j Rec'áfv-i^
Nada más pulsar el botón OK, se obtiene una representación gráfica de la señal en pantalla.
(Figura A 1.4.)
1 3 .5 8 3
L ili
Help OK Cancel
Tras aceptar las opciones por defecto de la ventana y pulsar el botón OK, la herram ienta advier
te del formato en que se guardarán los datos. Aceptando de nuevo ese mensaje, se obtiene casi ins
tantáneamente el resultado de la operación. En el gráfico de la Figura A 1.6. ya se puede estudiar el
rango de frecuencias de la señal.
i i
hfj N '«WijJu.J____
El gráfico de la Figura A l .7. muestra dicho rango de frecuencias para la señal estudiada. Se ob
serva una desviación grande en forma de máximo. Al hacer clic con el ratón en el punto más alto de
ese máximo, en la parte inferior de la pantalla aparece el valor de dicha frecuencia que claramente
es muy distinta a la del resto de la señal.
Luego la señal contiene una frecuencia cercana a los 4.867 Hz, que es muy distinta al resto de
frecuencias que contiene la señal.
Al filtrar un rango de frecuencias cercano a ese valor, se conseguirá eliminar el dichoso ruido.
A l .5. F IL T R A N D O LA SEÑAL
Filter O u tp ut Codeger
Lo w p a ss...
w
Highpass .,.
Bandpass ...
Bandstop ...
S ta rt Design ...
A continuación se param etriza el filtro. Lo ideal sería indicar las frecuencias que se desean eli
minar y nada más. Pero, este tipo de filtros no son perfectos y se deben param etrizar de forma que
se llegue a un com prom iso entre un cierto valor de atenuación para frecuencias cercanas a las que
se desean elim inar y un valor de atenuación muy superior para aquellas que se desean eliminar
del todo. Para calcular dichos parámetros del filtro analizaremos la Figura A l .9 que representa
gráficamente un filtro de Cauer o elíptico. El parám etro passband ripplc (PO) indica la mayor o
m enor atenuación de la señal, en las frecuencias pasa banda (f 1 y f4) y el parám etro Stop band
ripple (P l) indica la atenuación obtenida en las frecuencias de elim ina banda (f2 y f3). Esta me
dida se expresa en dB, y su cálculo se realiza m ediante la siguiente fórmula:
De esta fórmula se puede deducir que para conseguir que para las frecuencias entre f2 y f3
(stop band frecuencies) sólo pase una cien milésima de la señal, se debe conseguir que PO, Stop
band ripple, sea de 50 dB. Y sin embargo, para que en el rango de frecuencias pasabanda, que es
un rango de frecuencias en el que se encuentra el rango de frecuencias a eliminar, se obtenga apro
ximadamente un 98 % de la señal original, se debe colocar P l, Pass band ripple, con 0.1 dB.
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 señal. El filtro hará que para frecuencias inferiores a f l
y mayores que f4, la señal no será atenuada de f l a f2, la atenuación será pequeña (en función del
parámetro passband ripple P l), mientras que de f2 a f3 la atenuación será m áxima (en función del
parám etro PO Stopband ripple), para volver a ser m ínim a de f3 a f4 y prácticam ente nula a partir
de f4. A sí los parám etros que se seleccionan en este ejem plo serán los siguientes:
• Passband frecuencies: Contendrá un rango de frecuencias que abarque a las frecuencias Stop
band frecuencies, donde empezará a funcionar el filtro y cuya atenuación (a excepción de la
banda eliminada) será definida por el parámetro Passband Ripple. Para definirlo, se debe lle
gar a un compromiso de forma que la complejidad del filtro no sea elevada (orden elevado).
Para dicho rango, elegiremos las frecuencias desde 4000 Hz hasta los 5600 Hz.
• Passband Ripple: 0.1 dB. Con este valor y mediante la fórmula logarítmica explicada con an
terioridad se obtiene aproximadamente un 98% de la señal original.
• Stopband Ripple: 50 dB. Este parámetro nos indica que obtendremos una cien milésima parte
de la señal original, es decir prácticamente nada, entre las frecuencias que deseamos eliminar.
¿ fc B a n d s to p Filter
mm
I Filter Specíicalicn Input
—
Sampling Frequency. | 44100
Al pulsar Next sobre la pantalla representada en la Figura A 1.10, el programa elegirá el mejor pa
rámetro para establecer el orden del filtro. En este caso, Elliptic 8. Al aumentar el parámetro Stop
band ripple. por ejemplo a 80 dB, para obtener una atenuación todavía mayor en las frecuencias que
se quieren eliminar, el cálculo del filtro requeriría un orden mayor. La herramienta dsPIC Fd Lite no
permite el cálculo de filtros de orden superior a 8, para lo cual es necesaria la versión ampliada del
programa. (Figura A 1.11.)
C T schebjischeff 10
C Inverse Tscbebyscheff 10
d- ÍEÜpticj 8
C Bessel 14
Tras pulsar de nuevo el botón Next, se obtiene el resultado representado en la Figura Al .12.
/ j, d s P IC FO L it e
Snap to Grid
Quantization ...
Mediante la herramienta dsPICworks puede comprobarse si el filtro diseñado cumple con la función
especificada. Aplicando el filtro diseñado a la señal original se obtiene la señal de salida filtrada. Y
si todos los supuestos han sido correctos, debería obtenerse una señal sin ese molesto pitido que no
permite escuchar con comodidad el mensaje transmitido. En pasos anteriores se había creado el fi
chero mensaje con ruido.tim que no era más que el resultado de importar el sonido original .WAV
al formato .TIM con el que trabaja la herramienta dsPICworks. Para aplicar el filtro mediante ds-
PlC w orks se utiliza la opción del filtrado m ostrada en el menú D SP -> Signal Filtering. Al ha
cerlo, aparecerá en pantalla una ventana análoga a la de la- Figura A l . 14.
Yfzl-HfzrXfz) ....
wheift H|rl k ih« Itawfei luraton el Ihe fliet
---------------------------------------------------- 1
Hdp I . - OK I Cancel |
Al comparar la señal original, Figura A l . 14, y la señal original filtrada, Figura A L 15, se obser
va un cambio sustancial entre ambas. Pero para ver si realmente se ha alcanzado el objetivo, se pro
cede a convertir la señal a formato de Windows WAV para reproducirla por los altavoces del orde
nador y verificar definitivamente que carece del ruido original.
Para poder escucharla, se pasa del formato de trabajo del dsPTCworks, TIM, a formato WAV.
Desde el menú File -> Expon File, se indica el formato al que se desea exportar la señal (selec
cionando en la opción 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
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á oír la original sin el ruido molesto. ¡Lo conseguimos!
Otra manera de ver el resultado sería analizando la señal filtrada en el dominio de las frecuen
cias aplicándo también la Transformada Rápida de Fourier. ¿Se atreve?
Pero, ¿qué se ha conseguido? ¿Qué tiene que ver esto con la programación de los dsPIC?
Parece obvio que estas herramientas pueden resultar útiles para el tratamiento digital de señales,
lo que no es tan obvio es cómo puede beneficiarnos en la programación de los dsPTC. ¿Cómo se po
dría programar este filtro en un dsPIC? Muy sencillo, el programa dsPIC Fd Lite genera varias sa
lidas para programar el dsPTC con el mismo filtro utilizado.
Existen varias posibilidades. La primera opción consiste en generar el programa en lenguaje C.
Con un clic de ratón, el programa dsPIC Fd Lite, generará el código en C para el dsPIC. Esta opción
se encuentra disponible en el menú Qodegen -> C Code... (Figura A 1.17.)
Al seleccionar esta opción del menú, el programa generará un fichero en lenguaje C, ejecutable
desde el entorno de programación MPLAB IDE.
192 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
El código generado consiste en un programa que debe recibir 2 parámetros, uno de entrada, el
fichero de la señal original y otro de salida, el fichero a generar. Si se trabajase con un dsPIC en un
circuito real, se debería cambiar la parte del programa que lee los datos del fichero de entrada por
una conversión analógico a digital de la señal de entrada y la parte de la salida por una conversión
digital a analógico.
#include "qed_filt.c"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#ineJude <math.h>
if (argc == 1) {
fprintf(stden\" ***** waiting for input
}' '
if (argc >= 2) {
fin = fopen (argv[l], "r");
if (fin == NULL) {
fprintf(stderr/’Vn error - Cannot open file %s for input\n", argvf I ]);
error = 1;
)
1
if (argc >=3) {
fout = fopen (argv[2], "w");
if (foul = NULL) {
fprintf(stderr,’1\n eixor - Cannot open file %s for outputVn", argv[2]);
error = 1;
APLICACIÓN 1: DISEÑANDO FILTROS 193
if (error) {
fprintl’(stden\" ***** end filter test *****\n");
init_biquad_float (&IIR_filtro);
do {
get input samples */
for (in_count = 0; in_count < INSZ1; in„eount++) {
file_status = fscanf(fin.’,% fr,&x[in_countl);
if (file.status != 1)
break;
/* filter samples
if (in_count == 0) break;
II R_fi ltro.fi lter( x, y, iri_count, &IIR_filtro):
for (i = 0: i < in_count; i++)
fpri n t f (fout,11%f\n" ,y[i]);
#endif
Una segunda opción es generar un fichero con el programa en lenguaje ensamblador. También
puede llevarse a cabo mediante la opción del menú Coclegen -> Microchip -> dsPIC30.
Desde esta ventana se puede seleccionar el espacio donde guardar los coeficientes del filtro en
el dsPIC (en el propio programa o en la memoria del dispositivo), si se incluyen los ficheros en len
guaje C de cabecera y ejemplo, etc.
Hl tener activada la casilla de Use General Subroutine implica que al proyecto hay que añadirle
dicha rutina. Existen 3 tipos de subrutinas principales que se encuentran en la caipeta de instalación
del programa dsPíCFd y se debe elegir una en función del filtro utilizado:
Mediante la activación de la opción CWrapper se generarán 3 ficheros, un fichero .c, otro .cmd
y un último .bat para poder simularlo desde la línea de comandos. (Figura A l.18.)
194 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
C Piogram Space
OK HeSp Cancel
El fichero generado se trata de un fichero con los coeficientes y con un ejemplo de llamada a la
función de filtrado. Este ejemplo se encuentra “comentado” en el programa y debe ser copiado y pe
gado en el programa cuantas veces se necesite.
.equ ppNumScctions, 4
; These coefficients have been designed for use in the Transpose filter only
.section .xdata
ppCoefs:
.hword 0x334D b( l,0)/2
.hword OxBODD b( 1,1)0
.hword 0x5218 a( 1,1 )/2
.hword 0x334D b( 1,2)/2
.hword OxCEl 1 a( L2)/2
.hword 0x4029 b( 2.0)/2
.hword 0x9AC8 b( 2,l)/2
.hword 0x606A a( 2 y!)/2
.hword 0x4029 b( 22)12
hword 0xCB9C a( 2,2)12
.hword 0x2E39 b( 3,0)/2
.hword 0xB9DF b(3,n/2
.hword 0x58FC a( 3,1 )/2
.hword 0x2E39 b( 3,2)/2
.hword 0xC2F9 a( 3,2)/2
.hword 0x29A6 b( 4,0)/2
.hword 0xBD5B b( 4,1 )/2
.hword 0x68CA a(4.1)/2
.hword 0x29A6 b( 4,2)/2
.hword 0xC25A a( 4,2)/2
APUCACIÓN 1: DISENANDO FILTROS 195
ppStatesl ;
.space ppNumSections*2
ppStates2:
.spacc ppNumSections*2
.section .data
.global _ppFilter
_ppFilter:
.hword ppNumSections-1
.hvvord ppCoefs
.hword OxFFOO
.hword ppStatesl
.hword ppStatcs2
.hword OxFFFF
1
; This code can be copied and pasted as needed into a program
; Set up pointers to access input samples, filter taps, delay line and
; output samples.
mov #_ppFilter, WO ; Initalize WO to filter struct
; call _NRTransposeFilterInit ; call this function once
; to JBlocklIRTransposeFilter
; mov #_ppFilter,
—rt WO ; Initali/e WO to filter structure
; 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 opción es generar un fichero con los coeficientes, para incluirlos directamente en el
programa.
AUTOEVALUACION
• •• - SM. ' ’
1. ¿Qué es un fittro?¿Para qué sirve? Cite ejemplos de aplicación.
2. Défina los cuatro tipos de filtros esenciales que nos permite diseñar la herramienta dsPIC Fd Lite.
3. En el ejemplo propuesto, ¿para qué sirven los parámetros Stopband Ripple (dB) y Pasbband
Ripple (dB)?
4. ¿Para qué se ha usado la Transformada Rápida de Fourier?
5. ¿En qué lenguajes se puede generar el programa de filtrado?
# Se propone ai lector tratar de resolver el problema inverso. En vez de obtener la señal de voz, ex
traer el ruido de la señal.
• En este caso, el tipo de filtro a diseñar no será un filtro de banda-eliminada, sino uno de pasa-ban
da. Este filtro, al contrario que el anterior, atenúa todas las frecuencias, excepto las de una deter
minada banda o rango.
A2.1. IN T R O D U C C IÓ N
A lo largo del presente capítulo 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 ejecución paso a paso en el simulador, grabarlo en la memoria del dsPIC a través 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 creación de un program a en lenguaje ensam blador y en
lenguaje C.
La versión analizada del MPLAB IDE es la 7.30 que, aún sabiendo que en un futuro se que
dará obsoleta y surgirán nuevas versiones, seguro 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 inicialización del controlador,
definición de las distintas áreas de memoria, establecim iento de etiquetas para atender interrup
ciones, Reset, program a principal, etc.
Otros ficheros contienen los nombres simbólicos de los registros, direcciones de memoria,
etc. Finalm ente los proyectos contienen ficheros con los program as fuente. Esta división en
varios ficheros, y los ya incluidos en el entorno M PLAB IDE, sim plifica el desarrollo de
aplicaciones.
••
A2.3. U N VISTAZO RÁPIDO
El MPLAB IDE es un entorno MDI con m últiples ventanas desde el que se confeccionan, depu
ran, monitorizan y se graban los proyectos. (Figura A 2 .1.)
197
198 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
M PI AO D C v7.30
fVw Ecfc Vm * P ro j*! Ti«-v v i i j I i d i 4 * i C iW i;r« Wrafctv
B in a ry 3 ygto ol Jfcunc
C000 00300000 00000000 1TRÎ00
cao2 00990000 03000003 mci
COOi 0 9 9 :0 0 0 0 (» 0 0 0 0 9 0 VRÏ02 i wsiîf rît!
COO 5 OD9GOOOO 020000K 5 ÏP Z 0 3 cbjxtrfcj
coot» 002*30000 00000000 H»KG4 HíüyFte
nnru oosooooo ecooooco VRSCS s urta" Sep»
COOC 09930000 00000003
GOOI o 9 :c o o o o c o o o o o m
0010 oooooooo ccooooco •iDiiuM *p3ue«ui'j.
0012 0 9 2 0 0 0 0 0 COOOODZC
001-t o :-:o o oo o 930000:0
U 016 0000 cccuoooo Qaoooooo
0016
nniJi
0nono
000 ocoooooo cooooooo
o=oaoooo caooooco
001C oooo o :co o o o o cooooccg / / fu n c tio M u n i V u xia ^la a vh Clv&ui
ooir oooo 0 9 3 0 0 0 0 0 COOOOCCO void fc:nu;aZlo;iat lung date! .
0020 oooo DCQOOOOO COOOOCCO void tn.Z10i.eXir ckractar. ;
0022 oooo « 0 0 0 0 0 0 coooocco v o id _a^çrll»v^e : : .in te r r u p t ! : _ACCXnc#rn^it:void¡
002-1 oooo ccaooooo coooocco v o id . .ltttftrru p c _ATCIi«errv5C*'*>id:
002 6 0009 :c a o o o o o coooocoo
0020 oooo cooooooo ooooouoo
002* oooo raaooooo aooooooo
OO’ C 0009 ZCOOOOOD COOODlOO
002 Z 0009 :C 0 0 0 0 0 3 coooocoo
0030
0032
oooo
0009
COOOOOOO
cooooooo
00000300
ooooocoo
vnlil I
003-1 0009 cooooooo oooooaoo
0036 0009 G 0 00 00 09 00000300 5x6030.
OOJt 0009 'JUOOOOOO 00000300
003 A oonr. nonooonr, nooonnoo
003 C 0009 00 00 00 09 00009300
003 E 0099 GOOOOOOC 0 0 0 9 9 3 0 0
o o -i: 0099 OOOOOOCC 0 0 0 0 9 3 0 0
0041
on-i-i
00»
009:
oooooooc oooocooo
00 0 0 0 0 9 : 00099300
0041 oo?: 00 0 0 0 0 9 2 00091000
«íAsrcev?.
El entorno dispone de un menú clásico en la parte superior de la pantalla desde donde acceder a
todas las funciones del mismo.
Los menús File, Edit, Window y Help no tienen ninguna característica que los haga especialmente
destacables. No así el menú View, que incluye características propias y específicas. (Figura A2.2.)
Project
✓ Output
tí'
1 Standard
✓ 2 Project Manager
1 Disassembly Listing
✓ 3 Checksum
2 H a rd w a re Stack
</ 4 MPLAB1CD 2 Program Toofoar
3 Program Memory
4 File Registers
OOOOOOOO 00000000
OOOOOOOO OOOOOOOO
5 EEPROM
OOOOOOOO OOOOOOOO
6 Memory Usage Gauge
OOOOOOOO OOOOOOOO
7 LCD Pxel
OOOOOOOO OOOOOOOO
8 Locals OOOOOOOO OOOOOOOO
9 Watch OOOOOOOO OOOOOOOO
10 Call Stack OOOOOOOO OOOOOOOO
11 Special Function Registers OOOOOOOO OOOOOOOO
Desde el menú View, además de configurar las barras de herramientas deseadas se puede acce
der a la visualización de partes fundamentales del proyecto, como la memoria del programa, la me
moria EEPROM, un gráfico de uso de la memoria, una ventana para añadir datos que se deseen
APLICACIÓN 2: EL ENTORNO DE DESARROLLO MPLAB IDE 199
moniLorizar durante la ejecución del programa, etc. Hay que destacar que muchos de los menús que
se describen, disponen de más o menos funcionalidades dependiendo de la acción desarrollada en
cada momento. Así, el menú Debugger, cambia sustancialmente al estar ejecutándose una Depu
ración del programa. Igualmente también cambia el menú View.
El menú Project es fundamental para la realización de las aplicaciones. Desde él se comienza a
crear los proyectos, se compilan, se construyen y se les añaden los ficheros necesarios para su per
fecto funcionamiento. (Figura A2.3.)
New...
Open...
Close ►
Set Active Project ►;
Qtfckbuild 1
Clean i
Build All Ctrl+F10 »
Make FIO f
Build Options...
Save Project 1
Save Project As...
Add Files to Project...
1
I
)
Add New File to Project... )
Remove File From Project
>1
Select Language Toolsuite... ;<
i
Set Language Tool Locations... j
Version Control... 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 opción Select To-
ol->3 MPLAB SIM. Bajo esta opción del menú se depuran los programas ejecutándolos a través
de distintas herram ientas como el MPLAB ICD2 o el sim ulador MPLAB SIM. El program a
tiene la posibilidad de ejecutar paso a paso el código, poner puntos de ruptura (breakpoints),
resetear la ap licació n , etc. En el cap ítu lo sig u ien te se an aliza más deten id am en te esta
herram ienta.
Bajo el epígrafe Programmer, podrá seleccionarse el programador que se desee utilizar para gra
bar el programa en el dsPIC. En caso de utilizar la tarjeta P1C School, no se necesitará utilizar esta
opción ya que utiliza un software distinto para la grabación.
En el menú Tools se puede acceder a varias herramientas muy interesantes incluidas en esta ver
sión del MPLAB IDE. Cabe destacar la herramienta Visual Initializer, que es especialmente útil de
bido a la com plejidad que puede suponer configurar al dsPIC para realizar algún tipo de tarea es
pecífica. Mediante esta herramienta se configuraran los periféricos del dsPIC, desde las puertas de
entradas y salidas hasta el Motor DSP con un solo clic de ratón. La herramienta MPLAB Macros
permite grabar una serie de acciones realizadas con asiduidad en el entorno MPLAB IDE para lue
go poder repetir esas acciones en cualquier momento pulsando una sola tecla.
200 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Breakpoints... F2
StopWatch
Stimulus Controller ►
SCL Generator ►
Profile ►
Refresh PM
Settings...
La opción del menú Configure permite configurar distintas opciones del programa, como por
ejemplo, el que cada vez que se construye un proyecto éste se salve en el disco, o asignar combina
ciones de teclas para distintas acciones del entorno, etc. Puede resultar interesante la opción Confi
gure bajo la pestaña HotKeys para revisar las combinaciones y asignaciones de teclas a funciones
del IDE para m em orizar aquellas que puedan ser de interés. (Figura A2.5.)
| m MPLAB IDEv7.30 O H ® I
H* 4 Hi VVpy D*Krw pr-<yrr— ! » ! W9>*' IriH w Cvft^IC WT«tow *30
D (g t í , > f t ; c3 M f | ■ d G¿ E $ I# #> £ C hednum : 0x67M t- i i » f t f f ;• 3 ] | ■- •: ^ *. * .
m i f,~.| wnrr.-
coco UUVJ o ixio o a o o c n ro coo oo VPEOT
M CI 030D O C0C03C0C jOJLUJL’J VRKC1
ooe* 030} O COC03COO 3C0C03C0 3PEC2
spr«
WR U I
raen O C0G03C03 3C0G03C0 TPZCi
C0C6 UJL'J u Ronixinnn oconm co ÍPE03
COCÍ. Q3CO o coa coe oj acuuixiuu egrr.-:
.■ Uecnory
A SC II
-rrroz tttt ttft fttf tttt tftt ftft tftf tftf
■irrcin rrrr tttt tttt tftt tttt fttt tttt TTTT
•v p fC ífl rrrr rrrr rr r r rrrr rrrr rrrr rrrr rrrr
-•FPC33 TFTT FTFT FS T F tfff trtr rrrr rrrr rrrr
-FFC43 TFTT FTTT TT T T TFFT FTFT FTFF TFTF SFFF
i r r r .y i tttt 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.:
APLICACIÓN 2: EL ENTORNO DE DESARROLLO MPLAB IDE 201
1. Ventana del proyecto. Visualiza los ficheros incluidos en el proyecto y la estructura del mismo.
2. Ventana de registros. Muestra el valor de los registros del dsPIC, tanto en hexadecimal como en
ASCII. Desde esta ventana se puede también alterar su valor.
Ventana de inspecciones. Gestiona los registros y variables a monitorizar durante la ejecución del
A 2 .4 . PRIMER PROYECTO EN E N S A M B LA D O R
Se aborda a continuación un primer proyecto para dsPIC. En primer lugar se debe elegir el modelo
de dsPIC a utilizar ya que dependiendo del elegido, variarán las características. En este primer ejem
plo no resulta crucial el modelo elegido ya que apenas se van utilizar los recursos complementarios
del dsPIC. Se limita a realizar operaciones matemáticas para las cuales cualquier modelo de dsPIC
sirve. Sin embargo, para usar el mismo en todas las prácticas de la segunda y tercera parte se ha ele
gido el dsPIC30F40l 3.
En primer lugar se debe crear el proyecto. Es importante seguir todos los pasos, explicados a
continuación con gran precisión, ya que de lo contrario puede resultar complicado llegar a compi
lar el proyecto.
Tras iniciar el MPLAB IDE, mediante la opción Project -> Project Wizard se iniciará un asis
tente que guiará al autor en la tarea de creación de su proyecto.
Tras pulsar el bolón Siguiente en la primera pantalla del asistente se elige el modelo que en este
caso es el dsPIC30F4013. A continuación pulsamos el botón Siguiente. (Figura A2.6.)
P ro je c t W iz a rd
Step One:
Select a devee
Dcvicc:
Una vez seleccionado el modelo de dsPIC, en el paso 2 se seleccionan las herramientas con las
que compilar y linkar el proyecto. Dependiendo del lenguaje en el que se desee construir el proyec
to se deberá realizar una selección u otra. En prim er lugar, se detalla la creación de un proyecto en
ensamblador y, más tarde, el mismo proyecto será desarrollado en el lenguaje C.
Sólo la prim era vez que se accede al menú Project Wizard se debe configurar la herramienta a
utilizar e indicar dónde se encuentran los programas necesarios. Para ello, en la lista desplegablc A c
tive Toolsuit debe seleccionarse Microchip ASM 30 Toolsuile, caso de querer desarrollar el proyec
to en ensamblador. Al hacerlo, se observará cómo en la lista Toolsuite Contents, aparecen 3 lineas
correspondientes a las herramientas necesarias para construir el proyecto con el ASM 30 Toolsuite,
pero con un aspa roja a la izquierda que significa que el MPLAB IDE desconoce la ubicación de los
mismos. Es necesario indicar al MPLAB IDE dónde se encuentran dichas aplicaciones. Para ello,
seleccionando cada una de estas 3 líneas y mediante el botón Browse se eligen las rutas adecuadas
según la tabla siguiente.
Línea Ubicación
MPLAB ASM30 Assembler C:\Archivos de programaNMicrochipYMPLAB ASM30 Suitc\bin\pic3Q-as.exe
MPLAB I.INK30 O bject l inker C:\Archivos de program a\M icrochip\M PLAB ASM30 Suite\bin\pic30-ld.exe
LIB30 Archiver C:\Archivos de program a\M icrochip\M PLAB ASM30 Suite\bin\pic30-ar.exe
Tras finalizar este paso, debería obtenerse un resultado como el de la Figura A2.7. Luego, me
diante el botón Siguiente se accede a la siguiente pantalla del asistente.
P ro je c t W izard
Step Two:
Select 3 language todsufce
T oolaiit© Coûtant»
MPLAB A SM 30 Assembler (pc30-es.exfc|
MPLAB LINK.30 Obsct Lnker (pic30-ldexe)
LIB3Û Axchivcr fpc30 ar.exe)
Location
P ro je c t W ¡¿ai d
Step íhiee:
Nameyour pioject
Project Name
Prcject Direcícxy i
: !C:\e;emplos\suma
En la siguiente pantalla se seleccionan los ficheros a incluir en el proyecto. Para facilitar la ta
rca de la inicial ización y preparación del proyecto, el MPLAB ASM30 Suite, dispone de varios fi
cheros que al incluirlos en el proyecto permiten trabajar con nombres simbólicos, e indican al lin-
ker cuál es la organización de la memoria del dispositivo en cuestión, genera rutinas automáticas de
reset, etc. Estos ficheros a añadir, son los siguientes:
Si se desea profundizar en el contenido de estos ficheros se editan y se lee el código que se en
cuentra dentro de los mismos para conocer su contenido. Los dos últimos archivos variarán en fun
ción del modelo de dsPIC empicado. En caso de usar dsPIC3()F2011, se deberán seleccionar los ar
chivos p30f2011.gld y p30f2011.inc, respectivamente.
Resulta muy interesante, que no necesario, marcar con un tic estos 4 ficheros añadidos. Al mar
carlos con el tic, estos ficheros se copiarán en la carpeta de destino señalada en el paso anterior y así,
en caso de modificarlos, siempre se dispondrá de la copia original en la carpeta de la herramienta.
Una vez añadidos los 4 ficheros y marcados con el tic correspondiente se accede a la siguiente
ventana del asistente mediante el botón Siguiente.(Figura A2.9.)
*■ El asistente presentará un resumen de los pasos dados y al pulsar el botón Finalizar se cerrará
accediendo al proyecto.
Puede observarse en la ventana del proyecto la inclusión de los dos ficheros crtO.s y crtl.s. Se
deben modificar ambos ficheros, pulsando doble clic sobre ellos y cambiar las siguientes líneas, de
forma que el modelo de dsPIC pase de ser el dsPIC30F2010 a ser el dsPIC30F4013.
204 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
P ro je c t W iz a rd
S le p Foui:
Add ary ewstirvg liles to your piopct
equ —30F2010, 1
.include "p30f2010.inc"
.equ__30F4Ü13, i
.include M
p30f4013.inc"
y a continuación guardar ambos ficheros. También es necesario indicar al entorno, el directorio de los
ficheros include. Para ello, a través del menú Project -> Build Options -> Project, y dentro de la pes
taña General, en el cuadro Include Path,($INCDIR): se debe pulsar el botón Browse y elegir la ruta
C:\Anchivos de programa\Microchip\MPLAB ASM 30 Suite\SupporAinc\ La base para empezar el
proyecto ya está creada. Para empezar a escribir este primer programa, la opción File -> New arran
ca al editor de texto del entorno. En primer lugar, resulta interesante guardar el fichero para indicar
le al entorno que se trata de un archivo fuente y así poder disfrutar del resaltado de sintaxis mientras
se escribe el código. De no hacerlo así, hasta que no se salve el programa, el texto del mismo no re
saltará palabras clave, directivas, etc. Pulsando File-> Save as... se guarda el programa con el nom
bre suma.s (nótese que se debe indicar la extensión del archivo). Al teclear el código del programa
los distintos elementos del mismo tomarán distintos colores en función de sus características.
El listado de este prim er programa es el siguiente:
■ Output
{luid ¡ Vetacn Cqtitol'i Frri ir. F ii» !; MPL6B SIMi________________ _____________________________ __________
Ge an: Deieling ¡nlermedidiy and oulputfiles.
O sar.:O eieieclila 'G.\Ejemplo$\8uma\cri0.o".
Gear,: Delelec: lila ,G.'\Ejemplos\sut,na\cm o".
O san: D eleietilils ,C:\ejemp!os\sume\suma.o,
Clean: Deleletí lile 'sume.cof.
C e an: D elded filo ’sume.hex'
Cíe an: Dore.
Executing: "C\*«5hivo3 d e pragromoVvlicrGchipvMPLAB C3G\bin\pic30-es.exe" •p-30F?0’.0 'oíO s" -orcrtO o" -g
Executing: "C\Archivos d e p r o g r a m a ^ crochipVvIPLAB C30\bin\pic30es.exe" -p-30F2010 *cr.1 .s" -o"crtl o ' -g
Executing: "CW rchivos de progrom&WicrochipyviPLAB C30\bin\pic30-ld e<e" "G \E|emplos\suma\crtG.o‘ ‘G:\Ejempl 0 S\Sum 8\crt
G: NEjeapios;'--surr.a''.crfcO o ( ¡Libc+Oxc) G ./E je :» .p .lo S '''s u n a /p 3 0 f2 0 1 0 i n c u n d e f i n e d jreríe r e r .e e t o n a i n
G: \E je » p lo s -\s u :» .a 'v c rtO o ( . l i b c + 0 : o ) ^ / E j e a p l o s / s u n o / p S U t S U l O t n c u n d e f i n e d r e f e r e n c e t.o « a i n
G. S E jtsu p lo & N su x a N c rtl . o ( . i i b c + 0 x l 4 ) :G: / E j e s r . p l o s / s u n a / c r t l . s . u n d e f i n e d r e f e r e n c e t o ' n a a n '
G: \ E j e n p l o s 'v s i i t t n \ c r t l o ( i ib c + Q x l6 ) : G : /E j e w . p lo e / s u n a / c x ti . s : u n d e f i n e d r e f e r e n c e t o 'm a i n '
DÜILD FAILED: Sun Oct 02 1231 002005
La última frase, BUILD FAILED, indica que la compilación 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 guión bajo que hay delante
de main, sino que no se ha añadido el fichero fuente al proyecto. Al observar la ventana de proyec
to, veáse la Figura A 2 .11, allí no aparece por ningún lado el fichero suma.s.
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
Para solucionar el error basta con añadir dicho fichero al proyecto. Se eligen las opciones del me
nú Project->Add Files to Project... y seleccionando el fichero suma.s se corregirá el problema. Aho
ra al compilar el proyecto mediante Project-> Ruild All dará el resultado deseado, reflejado en la Fi
gura A2.12. En la ventana del proyecto, aparece el fichero suma.s. Figura A2.13.
Output
Build Version Control : Find in Files
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•«
En la última línea de la Figura A2.12 puede observarse que el resultado de la compilación ha si
do satisfactorio (BUILD SUCCEEDED). Se ha conseguido compilar un primer programa para dsPIC.
Pero, ¿qué hace este programa?, ¿qué se ha conseguido? Volvamos sobre el listado del programa.
; Programa Ejemplo I .s
; Creación de números
Las 2 primeras líneas son comentarios. Los comentarios van precedidos siempre por el signo ;
(punto y coma). Tras este signo se pueden escribir los comentarios que se quiera hasta el final de la lí
nea, y que puedan ayudar a identificar el programa y a comprender mejor cuál es la lógica del mismo.
Observe como se pueden dejar todas las líneas que se desee en blanco y colocar comentarios en
cualquier posición de la línea. Todo el texto de una línea a partir del signo punto y coma es ignora
do por el compilador. Así si se deseara poner un comentario que ocupe más de una línea se debería
incluir el signo punto y coma en cada una de las líneas.
APLICACIÓN 2: EL ENTORNO DE DESARROLLO MPLAB IDE 207
La siguiente línea, se corresponde con una directiva. Una directiva no es una instrucción propia del
dsPIC, sino una instrucción para el compilador para que identifique que la etiqueta _main de inicio del
programa se encuentra en este fichero fuente. Realmente, el programa no empieza a ejecutarse en la eti
queta _main. El programa empieza a ejecutarse en la rutina de Reset. Esa rutina se encuentra en los fi
cheros incluidos en el proyecto y, al finalizar la rutina de Reset, se pasa el control a esta etiqueta _main.
. . . ■■ o >• ,
.text ;Imcio del codigo de programa
La directiva .text indica que a continuación se va a escribir la parte del programa correspondiente
al código principal. El programa podría incluir datos, y para que él compilador distinga si lo que vie
ne a continuación son datos u otro tipo de información, se usa la directiva .text.
• ■■ ? ........
mam: ;Eticjucta d(m cic>de pirograma
V
Esta es la etiqueta de inicio de programa, la siguiente instrucción será la primera que ejecute el
controlador tras atender la rutina de Reset.
La primera instrucción mueve el literal #0x0001 al registro general W0. Para indicar que se tra
ta de una constante, se coloca el símbolo almohadilla # delante del número a escribir. Ox significa
que el número está representado en hexadecimal y el valor 0001 representa la constante en hexade-
cimal. La instrucción M OV mueve el primer operando (fuente) al segundo operando (destino).
Es conveniente familiarizarse con la expresión de números en formato hexadecimal ya que al tra
bajar con registros y datos de 16 bits, el formato hexadecimal resulta muy cómodo. En la mayoría
de los ejemplos utilizados se utilizará esta base numérica.
Esta es otra etiqueta a la cual el programa salta frecuentemente. Una etiqueta debe terminar siem
pre con el signo de puntuación dos puntos (:) y no debe coincidir con ninguna palabra reservada del
compilador.
Tras realizar la suma, con la instrucción GOTO la ejecución del programa salta hasta la etique
ta señalada suma.2, volviendo a mover 2 al registro W1 y volviendo a realizar la suma de forma in
definida.
Resumen:
Los siguientes pasos resumen el proceso necesario para la creación y compilación de un proyecto:
Marcar estos ficheros con un tic para que se copien en la carpeta del proyecto. (En función del ds-
fW a utilizar se elige un fichero correspondiente al modelo usado: p30f4013.gld y p30f4013.inc.)
7. Finalizar él 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 Op-
tions -> Project, y dentro de la pestaña General, en el cuadro Include Path,($INCDIR): pulsar el bo
tón Browse y elegir la ruta C:\Archivos de programá\Microchip\MPLAB ASM30 Suite\Support\inc\.
Crear un fichero desde el menú FHe-> New y guardarlo en la carpeta del proyecto con el nombre
de suma.s (nótese que se debe especificar la extensión .s del archivo)
10. Añadir dicho fichero al proyecto a través de la opción Project->Add files to Project.. y seleccionar
nuestro fichero fuente suma.s
11. Escribir el programa y compilarlo mediante Project->Build Ail
A pesar de que el lenguaje ensam blador permite el uso de mayúsculas y minúsculas, en algu
nos casos se debe respetar fielmente el uso de las apropiadas. Así por ejemplo, a la hora de utili
zar ciertas etiquetas o nombres simbólicos de registros o bits hay que ser fieles a los listados que
se proponen.
Una vez visto cómo crear un programa para dsPIC en lenguaje ensamblador se invita al lector a con
feccionar el mismo programa en lenguaje C para dar así una visión distinta y permitirle seleccionar
el lenguaje que mejor se adapte a sus necesidades.
La fam ilia dsPIC ha sido optim izada para la ejecución de program as desarrollados en len
guaje C. Una buena program ación en lenguaje ensam blador siempre será más óptim a que en len
guaje C en cuanto a tamaño de código y tiempo de ejecución. El lenguaje C tiene la ventaja
de ser un lenguaje más fácil de aprender y utilizar proporcionando mayor rendim iento en la
programación.
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.
8. Mediante al menú Project-> Build options -> Project, y en la pestaña General, seleccionar el direc
torioG:\Archivos de programa\Microchip\MPLAB C30\lib\ a través del botón Browse de la sección
Library Path. Nótese que aquí no se debe cambiar la ruta de los ficheros include como en el ejem
plo en ensamblador, sino que se debe cambiar la ruta de las librerías
9. Crear un fichero desde el menú File-> New y guardarlo en la carpeta del proyecto con el nombre
de sumac. c (nótese que se debe especificar la extensión .c del archivo)
10. Añadir dicho fichero al proyecto a través de la opción Project->Add files to Project... y seleccionar
el fichero fuente sumac. c
Ya está preparado el proyecto para ser escrito y compilado. Recuerde que debe ser especial
mente cauteloso a la hora de seguir estos pasos si desea tener éxito en esta tarca, pues el olvido de
alguno de los pasos anteriores puede llevar a producir errores de compilación o linkado que crea
rán más de un quebradero de cabeza. El estado del proyecto se debe corresponder con el represen
tado en la Figura A2.14.
Q su m a c .m c p
0 Source Files
¡ sumac. c
Header Files
O bject Files
Library Files
É3 Linker Scripts
! L~ p30f4013.gld
•• O ther Files
#include "p30f4013.h"
int main(void)
í
WREGO = 1; •C -K w X « v
.'.•.V í V /A V .'
w h ile (l)
í
WREGO
} c^ffíñíía::
- " U S t l >*
roturn 0;
í ¡ Y ¡ í ■’ ■i'V.-i V .rr * w - - o-
Siguiendo los pasos correctamente deberá obtener un BUILD SUCCEEDED tras construir el pro
yecto. También deberá aparecer un mensaje de alerta o wam ing, advirtiendo de que el uso de los regis
tros en lenguaje C como WREGO no es conveniente. Efectivamente, no lo es, ya que es más recomen
dable hacer uso de variables al igual que se hace normalmente en este lenguaje. Aún así, y para hacer
el programa lo más parecido al anterior desarrollado en ensamblador, se ha utilizado este recurso.
De no obtener el resultado deseado, estudie el error i ndicado en la ventan Output. La falta de un
punto y coma, o el no haber seguido todos los pasos con exactitud a la hora de crear el proyecto,
pueden originar el fallo. Analicemos lo que hace el programa.
En esta ocasión el comentario viene precedido por//. Este comentario es un comentario de línea.
Es decir, que todo lo que esté escrito tras estos símbolos y en la misma línea será ignorado por el
compilador. Si desea escribir comentarios de más de una línea incluya al principio del comentario
los símbolos /* y al final del mismo */. Por ejemplo:
P Este es un coi:nentario
de mas de una
línea */
HaSfl8S688S8BBwSw88ro^
La siguiente línea es una directiva del compilador. Sirve para incorporar el fichero de includes
correspondiente al procesador empleado, en este caso el dsPIC30F4013.
#include ‘p30f401^.h*1
La inclusión de este fichero permite entre otras cosas trabajar con símbolos en vez de con posi
ciones de memoria absolutas, etc.
x 'i;
int main(void) í<
Todos los programas en C empiezan con la función main. La palabra reservada int significa que
la función main devolverá un valor entero. Y la palabra reservada void significa que la función main
no recibe ningún parámetro para su ejecución.
A continuación comienza un segmento de código y dichos segmentos de código siempre deben
estar entre llaves {}.
212 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
WREGO = 1;
while(l)
{
WREGO = 2 + WREGO;
••••*•%v X v iv I'X v '.- i -X 'X v X*X'X *X*>^V- '•*•'**•‘X*1'X -"X .“- - / » X /X v ,* . *.v. . ú l l j ' ! ' > ’**•< -.*•> ♦.v ¡ J v X * X v - '-''
•• # : x-:%
x
•••-•■••...
^ : * r • ••• • • • • • > •-..............-.-.vv:- v - : - . - : •'
Estas instrucciones representan el bucle principal del programa. Se trata de un bucle while que
se repite siempre que sea cierta la condición que acompaña a la palabra reservada while entre pa
réntesis. Verdadera es toda condición cuyo resultado no sea cero. Luego al poner un 1, esa condi
ción siempre va a ser cierta. Y al igual que en el ejemplo en ensamblador, este bucle se va a estar
repitiendo siempre, sin tener un final.
Lo que se va a repetir en ese bucle es el siguiente segmento de instrucciones delimitado por las
llaves. Otra asignación que hace que el registro WREGO adquiera el valor de la suma de los valo
res contenidos en el registro WREGO más un 2.
Así, y al igual que en el ejemplo en ensamblador, el programa va asignando al registro WREGO
números impares a base de ir sumando 2 al número impar inicial 1.
re tu rn 0;
Hay que devolver un valor del mismo tipo que la función. Es decir, se debe devolver un valor en
tero. Normalmente la devolución del número 0 indica que todo ha progresado de form a correcta. Por
eso, y a pesar de saber que el programa no alcanzará nunca esta instrucción siempre deberemos co
locar esta instrucción en los programas en C.
De haber conseguido una ejecución correcta, seguramente se querrá comprobar que el programa
funciona y hace lo previsto. Realice los ejercicios de autoevaluación y pase al siguiente capítulo
donde podrá sim ular su ejecución mediante el MPLAB S1M, una herramienta muy útil a la hora de
depurar y probar programas antes de implementar el hardware.
AUTOEVALUACIÓN
E jercicios
• Al programar Ejemplo hs, el primer programa en ensamblador, no está del todo optimizado. Es cier
to que el programa va generando números impares en el registro WO, pero se puede hacer de una
forma más óptima. Más rápida.
• Una pista: existe una instrucción que se ejecuta muchas veces y que no es necesario que se eje-
cute tantas.
¿Cuál de los dos lenguajes le ha parecido más interesante? ¿Cuál de los dos se adapta mejor a sus
necesidades? A lo largo de los siguientes capítulos trataremos de proponer más ejemplos en los dos
lenguajes para que pueda elegir con mayor criterio el lenguaje más adecuado para sus necesidades.
A 3 .1 . IN T R O D U C C IÓ N
En la aplicación anterior se han creado unos programas introductorios para controladores dsPIC. En
la presente se analizará el comportamiento de los mismos mediante un simulador dentro del entorno
de desarrollo, ejecutándolos paso a paso, de forma continua, observando cómo cambian las variables
y las posiciones de memoria, además de seguir profundizando en la programación de los dsPIC.
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
opción File OpenWorkspace y abrirlo con todos sus componentes. Cuando aparezca en pantalla la
ventana del proyecto se hace doble clic sobre el fichero suma.s para disponer del código fuente.
(Figura A3.1.)
215
216 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Para sim ular este ejemplo existen varias opciones. La primera, y la más sencilla, es sim ular
lo en el ordenador haciendo uso de una herram ienta integrada en el MPLAB IDE, denominada
MPLAB SIM. O tra opción sería 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 didácticos el sim ulador MPLAB SIM es una herram ien
ta suficiente.
El primer paso será entonces seleccionar el simulador. Para ello, se debe acceder al menú De-
bugger -> Select Tool -> 3 MPLAB SIM. (Figura A3.2.)
En la Figura A3.2. puede observarse cómo el menú Debugger varía sus opciones al seleccionar
el MPLAB SIM. Ahora dispone de nuevas opciones Run, Anímate, Step Into, Step Oven etc., que
permiten hacer uso del depurador de programa para ejecutar código paso a paso, animarlo, poner
puntos de ruptura, etc.
El siguiente paso consiste en que el sim ulador ejecute una instrucción. 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 día (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 ningún cambio en pantalla, pero el programa se está ejecutando.
¿Que es lo que pasa? Debería apreciarse cómo el ordenador señala la instrucción que está ejecutan
do y, sin embargo, no se ve absolutamente nada.
En el tema anterior se comentaba la necesidad de trabajar con proyectos para facilitar la tarea.
Una de las facilidades es que los ficheros añadidos a los proyectos preparan unas funciones que se
deben incluir siempre. Ahora mismo, el programa está ejecutando una de esas instrucciones in
cluidas en los ficheros que se han añadido al proyecto. Más concretamente, está ejecutándose la ru
tina de Reset. Luego, la primera instrucción que se ejecuta no es la primera instrucción del fichero
suma.s.
Para poder ver todas las instrucciones que ejecuta el simulador, se pulsa en el menú Debugger la op
ción Reset -> Processor Reset. Luego, se procede a visualizar la memoria de programa mediante el
menú View ->Program Memory.
APLICACIÓN .3: PONIENDO EN MARCHA EL SIMULADOR 217
Program Memory
Line ; Address Opcode Labei Disassembly
00000 Q4QÌ00 goto _ceset
00002 000000 nop
00004 0001A8 _DefaultInterrupt
00006 0 0 0 1A8 _De£aultInterrupt
00008 0 0 0 1A8 _Defau.Lt Interrupt
0000À 0001À8 DefaultInterrupt
;<■; ; ______ __ _________________
Opcoce Hex | Machine ||' Symbo'lic PSV Mixed | PSV Data
Otra opción, mucho más cómoda y sencilla, es utilizar un punto de ruptura para saltar todas las ins
trucciones anteriores. Sin necesidad de abrir la ventana de exploración del programa, se crea un
punto de ruptura en la primera instrucción mov del fichero suma.s. Para crear dicho punto de rup
tura, basta con hacer doble clic con el ratón en la parte izquierda de la línea de código donde se de
see que se pare el programa (en la Figura A3.5 dicha posición está marcada con una letra B). Al
218 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
hacerlo, aparecerá una B en dicha línea, que indicará que en esa línea existe un Breakpoint o pun
to de parada. Para quitarlo puede volver a hacer doble clic con el ratón en ese punto y desaparece
rá la B y el punto de parada.
; C r e a c ió n 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 a M0
svmaZ:
nov # 0 x 0 0 0 2 ,K1 ;M o v e 3 c o s un 2 a l r e ç is c r o ü l
add T 0 O ,¥ 1 ,M O ; s u in a a io s «1 r e s is t ro W0 y V I y d e j& m c s
;e l r e s u lta d o «& VO
y o to sum aZ ; R é p e c li a o s e l b u c le sun&2
. end
A continuación, tras provocar de nuevo un Reset (Debugger -> Reset -> Processor Reset), en
vez de pulsar D ebugger-> Step Into, que ejecuta una sola instrucción, se accede al menú Debugger
->Run. M ediante esta opción, el programa se ejecuta y rápidamente aparece la flecha encima del
punto de parada marcado por B, lo que significa que se ha ejecutado todo el código inicial hasta esa
linca.
El contador del program a se encuentra apuntando a la prim era dirección del código. Para
com prender los resultados de la ejecución del código se debe poder observar ios valores de los
registros WO y W l. La ventana Walch del menú View perm itirá añadir cuantos elementos se
deseen monitor i zar.
f. . . . . . . — -
■ I W atch Ê Ü B
Add SFR) ÍACCA _v ; [ Add Symbol) j __ SP v j
A d d re s s S y m b o l Mame V a lu e
Desde la ventana de la Figura A3.6, se añadirán los registros W0 y W 1 para ir monitorizando los
valores que van tomando cada uno de ellos. Desplegando la lista que se encuentra a la derecha del
botón Add SFR se selecciona el registro WREG0 y a continuación pulsando el botón A dd SFR, se
añade dicho registro a la ventana de inspección. Se repite este proceso con el registro WREGJ, de
forma que la ventana Watch quede como la de la Figura A3.7.
APLICACIÓN 3: PONIENDO EN MARCHA EL SIMULADOR 219
i
■ W atch
Al ejecutar el programa paso a paso se conocerán los valores que van tomando de los registros.
Al pulsar la tecla F7 {Debugger -> Step Into) se observará el nuevo valor de WREGO que será
0x0001, que se corresponde con la ejecución de la instrucción
que mueve el valor 1 a W0. Además aparecerá en rojo para indicar que acaba de ser modificado di
cho valor.
Al pulsar de nuevo F7 se observa cómo WREG1 tom a el valor 0x0002 correspondiente a la ins
trucción
Si se sigue pulsando la tecla F7 se aprecia cómo el programa no tiene fin y como el registro
WREG1 no varía nunca, manteniendo siempre el valor 2 y, sin embargo, WREGI va tomando los
valores de los números impares: 1, 3, 5, 7, 9,...
Ejercicio:
Una vez depurado el programa en ensamblador, trate de hacer lo mismo con el programa en lenguaje
C. Simúlelo en pantalla observando cuál es la primera instrucción que se ejecuta, añada un punto de
parada e inspeccione los valores que va adquiriendo WREG0.
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 producía al sumar 2 a OxFFFF. La capacidad del registro de 16 bits se desborda y en
tonces se activa el bit de acarreo (C) para indicar que el resultado que aparece en el registro WREG0
es incorrecto y le falta un bit por delante.
Existen varias posibilidades para estudiar esta situación. La primera, y la peor, sería pulsar F7
hasta que el registro WREGO tenga el valor OxFFFF y después hacer la suma y observar el bit de
acarreo.
Una de las características que tiene el simulador es que permite cambiar ciertos valores de re
gistros, posiciones de memoria, etc. Así, la segunda opción para mostrar cómo entra en acción al bit
de acarreo es 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 opción 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 opción del menú Debugger -> Reset
-> Processor Reset. A continuación, pulsando F9 se consigue que el programa llegue hasta el pun-
APLICACIÓN 3: PONIENDO EN MARCHA EL SIMULADOR 221
to de ruptura, inicio del programa. Seguidamente, pulsando dos veces F7 se ejecutan las dos pri
meras instrucciones. Es entonces cuando en la pantalla de Special Function Registers, WREGO to
ma el valor 1 y WREG1 toma el valor 2. Pero como se desea acelerar el proceso del desbordamiento,
haciendo clic en la ventana de Special Function Registers, dentro del valor de WREGO en hexade-
cimal escribe FFFF, de forma que la pantalla es la de la Figura A3.9.
M i S p e c ia l 1 u n c tio n R e g is te rs
y g js
j JLclclress V 1 SFR K arre i »ex 1 D e c im a i | ••'S
0000 ÍÍREGO FT7T
1 ■SP.EG l __ [ _ooooM 3S5BHEBBHBI■
.. H 3 B H
0004 WRSG2 0000 0
0006 0000 0
0008 »R Z04 0000 0
non j u»sr.«; nnnn n
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 cuánto tiempo tarda en realizar ciertas operaciones el dsPIC.
Naturalmente, eso depende de la configuración del circuito del reloj. Para analizar estas y otras
características el sim ulador dispone en el menú D ebugger -> Settings... de varias opciones de
configuración.
222 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Simulator Settings
Processor Frequency
' Units: —
® MHz
im
Trace Options
O KHz
O Hz
M ediante el cuadro de diálogo representado en la Figura A 3.11 se puede configurar aspectos ta
les como el circuito del reloj conectado al controlador, opciones de ruptura, establecer las rutas de
los ficheros que van a simular, la entrada y salida serie por el puerto UART, observar las limitacio
nes del simulador, etc. El simulador también permite controlar el tiempo transcurrido en la ejecu
ción de un programa. Así, se puede colocar un punto de ruptura y al parar en dicho punto, median
te el menú D ebugger-> Stop Watch se puede conocer el número de ciclos de instrucción ejecutados,
el tiempo transcurrido desde que se inició el programa hasta dicho punto, etc.
A modo de ejemplo, se propone averiguar qué tiempo transcurre desde que empieza el progra
ma hasta que llega a la primera instrucción mov del fichero suma.s. Para ello, una vez cargado el pro
yecto suma en ensamblador, se establece un punto de ruptura en la primera mov (doble clic a la iz
quierda de la instrucción). Este ejemplo utiliza el programa suma.s modificado con la corrección
descrita en el apartado anterior. Tras resetear la simulación mediante la tecla F6 (Debugger -> Re
set -> Processor reset) se debe pulsar F9 (Debugger -> Run) y al detenerse la ejecución en el pun
to de ruptura acceder a la pantalla Debugger -> Stop Watch.
En la Figura A3.12. se observa cómo el número total de ciclos de instrucción empleados para eje
cutar las rutinas de inicialización es de 32. Y el tiempo empleado, a una frecuencia de 20 MHz, ha
sido de 6.4 j j s .
APLICACIÓN 3: PONIENDO EN MARCHA EL SIMULADOR 223
E je rcicio :
Confeccione un program a que genere 10 números pares. ¿Cuánto tiempo tardará en ser ejecutado el
programa con un cristal de 10 MHz?
La solución dependerá del código empleado en el programa. Trate de confeccionar el programa
más rápido, que utilice menos ciclos de instrucción. U na posible solución podría ser la siguiente:
.global _main
.text
.main:
repeat #0x04
add #0x0002,WQ
nop
.end
Este programa repite 5 veces la suma del contenido W0 más 2 para ir generando los 5 primeros
números pares. Y tras esto coloca una instrucción nop, donde se puede establecer un brcakpoint o
punto de ruptura y así medir el tiempo transcurrido hasta dicha instrucción. Se configurará el reloj
del simulador mediante la opción Debugger -> Settings, de forma que la frecuencia de dicho reloj
sea de 10 MHz.
Una vez establecido el punto de ruptura en la instrucción nop y configurado el simulador, al eje
cutar el programa con la tecla F9 (Debugger -> Run) y cuando el programa se detenga en dicha ins
trucción, se debe acceder al menú Debugger -> StopWatch para observar el tiempo empleado, que
en este caso será de 15,20 jas.
Una de las nuevas instrucciones que se han desarrollado para los dsPTC es repeat. M uchos de los
cálculos realizados en el tratamiento de señales son de carácter repetitivo, de ahí que se haya aña
dido esta nueva instrucción al repertorio de instrucciones. Podría desarrollarse el program a en C y
observar si hay alguna diferencia en el tiempo de ejecución entre éste y el desarrolado en ensam
blador. Una posible solución en lenguaje C podría ser el siguiente programa:
#inc!ude "p30f4013.h"
int main(void)
í
in tc o n t= l;
int num = 0;
while(cont <6)
(
num = 2 + num;
cont+-K
I
re tu rn 0;
224 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
En lugar de utilizar el registro WREG, esta solución emplea variables, que es la forma más ha
bitual de programar en el lenguaje C. Naturalmente, el programa se podría depurar para hacerlo óp
timo, pero ésta es una solución típica en este lenguaje.
Los números pares se generan en la variable num. Para poder observar el valor que toma esta va
riable, se deberá hacer uso de la opción View -> Watch y seleccionar dicha variable en la lista Add
symbol, y pulsar dicho botón.
Al colocar un punto de ruptura en la última instrucción del programa, se puede conocer el tiempo
empleado en esta solución. Se debe cambiar la configuración del simulador para que la velocidad del
reloj sea de 10 MHz, al acceder al menú Debugger -> StopWatch. El tiempo empleado es de 34,4 ,us.
La diferencia de tiempo es importante. No debe pensarse que siempre se dan estas diferencias tan
grandes de tiempo para conseguir la misma solución en C y en ensamblador. De hecho, los dos pro
gramas aunque parecidos no hacen exactamente lo mismo, y es por esto por lo que la diferencia se
agranda. Pero sí se confirma que con el lenguaje ensamblador bien utilizado se pueden optimizar los
programas. Sin embargo, con el lenguaje C se pueden realizar operaciones de una form a más ami
gable, sin tener que conocer tan profundamente la arquitectura interna del controlador, obteniendo
un mayor rendimiento en la fase de programación.
AUTOEVALUACIÓN
1. ¿Qué depuradores soporta la herramienta MPLAB IDE?¿Dónde puede conocer las limitaciones del
simulador software ?
2. ¿Qué pasa cuando se ejecuta un programa paso a paso?¿Cuándo se ejecutan las instrucciones
del código fuente?
3. ¿Cómo se puede observar con el simulador el número de ciclos que tarda en ejecutarse una ins
trucción?
4. Describa las limitaciones del simulador
5. ¿Mediante qué opción del menú se podría visualizar parte de la memoria de datos EEPROM?¿Po
demos desde el MPLAB IDE escribir en ella?
E jercicios
^^^^^^S^SSSS^BSSSBSSSSSSSSSS^BSSBStBSSBSaBSBSSBBBSSBBSSBSSSBBKaSSSBSSSSBSSSSS^
Confeccione un programa en ensamblador que contenga la instrucción ADD, MOV, GOTO y CP-
SEQ. A continuación simule el programa y calcule el número de ciclos de instrucción en los que se
ejecuta cada una de esas instrucciones.
Confeccione un programa en lenguaje C que le permita observar cómo cambia el bit de acarreo
de la palabra de estado.
- -
APLICACIÓN
Manejando las
instrucciones
típicas de
los dsPIC
A4.1. IN T R O D U C C IÓ N
En este terna se proponen diversos ejemplos de aplicación que se simulan con el MPLAB SIM y que
contienen instrucciones específicas de los dsPIC.
Para aquellos lectores que no han trabajado con anterioridad con el lenguaje ensamblador, puede re
sultarles algo complicado manejar las instrucciones de salto.
Hay dos tipos básicos de instrucciones de salto: Instrucciones de salto incondicional e instruc
ciones de salto condicional.
Las instrucciones de salto incondicional rompen el flujo de control en la ejecución del programa
saltando a la dirección que se indique, es el caso de GOTO Etiqueta, BRA Etiqueta y CALL Etiqueta.
Las instrucciones de salto condicional evalúan una condición y, en función del resultado de la
misma, actúan de una forma u otra, es decir, saltan o no saltan.
La instrucción BRA C es de salto condicional, de forma que se salta a la dirección de la etique
ta si C = l y se ejecuta la instrucción siguiente si C = 0.
SALTO:
225
226 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
tema anterior. En el siguiente ejemplo, se utiliza la instrucción CPSEQ para buscar el primer nú
mero mayor que cero que es “simétrico” respecto a los dos bytes de un valor. Es decir, que si se in
tercambia la posición de sus dos bytes, se mantiene el valor.
En este ejemplo la instrucción CPSEQ primero comprueba que W0 y W1 tienen el mismo valor.
Si no es así no hace nada y el programa sigue su curso ejecutando la siguiente instrucción GOTO
SUMA. Una vez que W0 y W1 sean iguales, la instrucción CPSEQ hará que se salte la siguiente ins
trucción GOTO SUMA y el programa accederá a la parte del programa etiquetada como SIME
TRICOS. El programa ya habrá encontrado el prim er número simétrico mayor que cero.
Los dsPIC. incluyen 19 nuevas instrucciones específicas para el tratamiento de señales. En el si
guiente ejemplo se estudia el manejo de la instrucción MAC. Esta instrucción puede resultar espe
cialmente interesante para implementar un filtro FIR, cuya ecuación general se corresponde con la
siguiente fórmula:
La instrucción MAC puede ayudamos a resolver esta ecuación de forma rápida. Los coeficientes
bo, bi, b2 y bí, así como los valores de xn, xn.j, xn.2 y xn.3, se representan en la siguiente tabla:
b¡ Xn
0x0001 0x0002
0x0003 0x0005
0x0007 0x0002
0x0001 OxQOÓF
Para aprovechar al máximo la potencia de esta instrucción y hacer esta operación matemática lo
más rápidamente posible, se deben alojar los coeficientes b¡ en el espacio de la memoria de datos X
y los x¡ en el espacio Y, para que el controlador pueda acceder a los dos operandos simultáneamen
te. El primer paso en el programa será colocar dichos datos en sus zonas correspondientes. Para ello
se define una sección data en el espacio X, a partir de la dirección de memoria 0x0800, de tipo pa
labra, llamada coeficientes, donde se almacenarán los valores de b¡.
APLICACIÓN 4: MANEJANDO LAS INSTRUCCIONES TÍPICAS DE LOS dsPIC 227
¡Programa MR
global jtnain
¡Sección de datos X de la memoria.
section coeficientes, data, xmemory. address(0x0800)
bi: .hword 0x0001, 0x0003,0x0007,0x0001
Mediante estas instrucciones se ha creado una zona en el espacio X desde la posición 0x0800
hasta la 0x807 incluida con los datos correspondientes a b*. Luego se crearán las entradas corres
pondientes a xn a partir de la posición OxOCOO en el espacio Y.
Nótese la correspondencia de los datos de la tabla con los de la definición de la sección inputs.
.text
££&:■: V:; ••••:
_main:
Al comenzar el programa se establece a 1 el bit 0 del registro CORCON para indicar que las ins
trucciones DSP trabajan con números enteros. Luego, mediante los registros W 4 y W6, se recogen
los datos de los espacios de memoria X e Y, respectivamente, y los registros W8 y W 10 actúan co
mo punteros de las direcciones de la zona de memoria donde residen los coeficientes b¡ y xn.
El programa realiza una operación similar con los datos xn, apuntándolos con el registro W10 y
almacenando el dato en el registro W6. Así, deposita xn en W6 y deja W10 apuntando a xn-i.
Con las instrucciones descritas se realizan las siguientes acciones:
A continuación el programa realizará cuatro multiplicaciones y las irá acum ulando en el acu
m ulador A. Las cuatro sumas correspondientes a la fórmula general anteriorm ente descrita, yn =
b0xn+ biXn-i + b2x n_2+ bjxn.3, se ordenan m ediante la instrucción repeat #0x003.
Los dos componentes del prim er sumando de la fórmula (b0 y xn) se encuentran en W4 y W6.
Hay que multiplicarlos entre sí y mover el contenido de la posición de memoria apuntada por W8 a
W4 (para así tener en W4 el siguiente operando bi) y mover el contenido de la dirección apuntada
por W lO a W6 (xn,a W 6 ) .
-.' - ; =-• •
mac W4*W6,A,[W8]+=2,W4JW 10]+=2,W6
Además, y para dejar preparada la instrucción para repetirse la próxima vez, se postincrementa
W8 y W10 en dos unidades (datos de tipo word), para que apunten a los siguientes datos b2 y x„_2 y
que se manejan en el algoritmo.
Al repetir 4 veces la instrucción mac, se realizan las 4 multiplicaciones necesarias a las que se
suma el resultado de la mac anterior. Es conveniente comprobarlo con el simulador. El programa
completo se corresponde con el siguiente listado:
¡Programa FIR
‘ ; Autor: Aritza Etxebarria Ruiz
¡resolución de la ecuación yn=b0Xn+blXn-l+b2Xn-2+b3Xn-3 típica de filtros FIR
.include ,,p30f4013.inc,,
.global _ma.in
¡Sección de datos de Ja Memoria X. Coeficientes b0,bl,b2 y b3
.section coeficientes, data, xmemory, address(0x0800)
bi: .hword 0x000 j, 0x0003, 0x0007, 0x0001
APLICACIÓN 4: MANEJANDO LAS INSTRUCCIONES TÍPICAS DE LOS dsPIC 229
■ T i l e R o g i t l c r s :1 I B I
■ f M
j vOt t l Sj T r t ò ! p *04 p r u ” — T
L S I 1 06
A d d cfess
r i
ü ó ü ~ V □002 ULDS OC 02 0 CD7 0 1 -.0 oono 01S6 cooo
0 C 10 Y 0000 OCDO OCDO o o o o c o o c i 0000 CDOO 0000
0 C 20 Y OC DO 0000 OCDO OOOC CDOO o o o o oooo ODOO
0 C 30 Y □eoo OODO 0 0 0 0 OOOC ODOO o o o o oooo oooo
0 C 40 Y GODO 0000 oooo OOOO o o o a CDOO oooo 0000
ccso Y 0000 0000 oooo CDOO oooa CDOO oooo oooo
O C6 0 Y 0000 oono □000 CDOO oooa oooo oooo ooao
0C 70 Y cooc 0000 OOOC CDOO OOOC oono OOCO DOGO
0 C8 0 Y 0300 CDOO COOC OOOO OOOC? oooo ooco ooco
0 C9 0 V ODOO OOOC OOOO OOOO oooo oooo oooo oooo .... >5
w ? .v >
: :
fi .H®*: ! 1| W D íte
Hasta llegar a la instrucción MAC ejecutando el programa paso a paso (F7) observará cómo W4
contiene el prim er coeficiente, W8 apunta al siguiente coeficiente en la posición 0x0802, W6 por el
contrario contiene a Xn y W 10 apunta al siguiente coeficiente en Ja posición 0x0C02, Puede obser
var estos datos en la ventan de File Registers, en la vista Symbolic. (Figura A4.2.)
File Registers
Si continúa ejecutando el programa paso a paso, por cada vez que se ejecute la instrucción
MAC, ésta acumulará en ACCA el resultado de la multiplicación de W4 y W6. Puede observar su
valor mediante la ventana View -> Watch y añadir el SFR (Add SFR) y el registro ACCA.
Con la primera ejecución de la MAC, el registro ACCA tom ará el valor 0x0002, resultado de
multiplicar 0x0001 por 0x0002. Además, si se fija en W8 y W10, comprobará que apuntan a los si
guientes datos a recuperar en las direcciones 0x0804 y 0x0C04, mientras los registros W4 y W6
contienen ya los siguientes datos a multiplicar, 3 y 5.
Con la segunda ejecución, al resultado anterior 2 debe sumarle el resultado de multiplicar 3 por 5.
Así, el resultado en el ACCA deberá ser de 17 (0x0011). Los registros W8 y W10 apuntan a los si
guientes datos.
Con la tercera MAC, se añade al resultado anterior, 17, el resultado de la multiplicación de 7 por
2. Es decir, que en el acumulador se cargará el valor 17+ 14 = 31 = 0x001 F. Y ya con la última mul
tiplicación, se añadirá al resultado anterior 31 la multiplicación de 1 por 15, cuyo resultado final es
de 31 + 15 = 46 = 0x002E. (Figura A4.3.)
A d d re s s S y m b o l Name V a lu e
0022 ACCA 0X000000002E
Figura A4.3. El acumulador ACCA contiene el resultado final de la operación matemática que es 2E.
Este ejercicio muestra el potencial de la instrucción MAC junto con la instrucción repeat. Pue
de parecer trivial porque los datos de los coeficientes han sido introducidos de form a directa y ar
bitrariamente en memoria, pero perfectamente podrían haberse introducido unos coeficientes cal
culados con herramientas como las de la aplicación Diseñando Filtros Fácilmente y obtener los
APLICACIÓN 4: MANEJANDO LAS INSTRUCCIONES TÍPICAS DE LOS dsPIC 231
valores x„ com o resultado de una conversión analógico digital de una señal de entrada, para así ob
tener rápidam ente la señal de salida filtrada.
Una m uy parecida es la instrucción MSC, idéntica a la m ac, pero que en vez de acum ular va res
tando el resultado de la m ultiplicación al acum ulador (ACCA = ACCA - X • Y).
El ejem plo anterior, inicializaba parte del espacio X y parte de la m em oria Y de datos con ciertos
valores. Se puede realizar otro tipo de inicializaciones en los program as.
Para realizar la inicialización se ha utilizado la directiva .section, luego se asigna un nom bre a
dicha sección y se debe especificar si los datos pertenecen a la sección de código ejecutable (.text ),
sección de datos no inicializados (.bss) o sección de datos inicializados (.data). En nuestro caso, son
datos que se han inicializado con un valor, de ahí que se haya elegido data.
Por último, se elige el espacio donde se quieren inicializar esos datos. Se utilizará .xm em ory pa
ra indicar que los datos se alojan en el espacio X, .ym em ory para indicar que los datos se guardarán
en el espacio Y o .n e a r para indicar que los datos se guardarán en la m em oria cercana.
Sólo falta indicar a partir de qué posición de m em oria se guardarán los datos m ediante . adress .
_y .. . ’ •;
Ymemory: datos
bss: Datos no en espacio
inicializados. Ynear: datos en
memoria cercana
La siguiente línea m uestra cóm o siguiendo a la especificación del tipo de dato a inicializar, se in
troducen dichos datos.
Para obtener la dirección de los datos bi se utilizará la instrucción mov #bi, WREG0.
232 dsPIC. DISEÑO PRÁCTICO DF APLICACIONES
AUTOEVALU A C IÓ N
Ejercicios
b lX iy f - b 2 X n .2 ~ b -jX n -s
i »
ruló se dan los siguientes coeficientes:
É ||
b; *n
.V /.V .SV.V.V»V/AVAVAY.N VAVV.V/, vv^A'X
0x0001 OxOOFF
1 « 0x0003 0x0005
0x0007 0x0002
0x0001 OxOOOF
M
■ X A;:
Procure hacer el pro
nuevas instrucciones DSP.
APLICACIÓN
y escribiendo
las memorias
FLASH y EEPROM
A5.1. MANEJANDO LA MEMORIA DE PROGRAMA FLASH
•PROGRAMA TABLAS
¡Lectura de la memoria de programa.
.include Mp30f4013.inc"
.global main
. le x l
jmaíii:
;Sé carga en TBLPAG el número de página
: de la memoria a leer
MOV #tblpace (#0x00300), W0
MOV W0, TBLPAG
;Hay que mover a WO, ei desplazamiento dentro
;de la página que se desea leer
MOV #tbloffset (#0x00300), W0
233
234 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Compile el programa y ponga un punto de parada en la primera línea del mismo. A continuación
acceda al menú View-> Program Memory y vaya hasta la posición de memoria 0x00300 (atención,
esta dirección está expresada en hexadecimal, no se confunda con la posición 300 en decimal) y
cambie el valor por defecto FFFFFF por 123456.
Ejecute el programa paso a paso debiendo en W 1 el valor 0x0012 y en W2 el valor 0x3456.
La escritura en la memoria FLASH es un poco más complicada que la lectura. Se puede realizar
en bloques de 96 bytes que se corresponden con 32 instrucciones. A este bloque se le denomina fi
la. Para programarlo se usa un algoritmo que se describe a continuación, en el que existe una se
cuencia de control que se debe seguir exactamente para realizar el proceso de grabado.
• 1er paso: Borrar el contenido de los 96 bytes que se van a escribir en la memoria FLASH. Pa
ra ello, a su vez, se seguirá el siguiente algoritmo:
1.1. M over al registro de control NVMCON el valor 0x4041, que significa que comienza
una operación de borrado de memoria FLASH.
1.2. M over la dirección de la memoria a borrar a los registros NVM ADRU y NVMDR.
En NVMADRU se guarda el byte más alto de la dirección a borrar y en NVMDR los
dos bytes de menos peso de esa misma dirección.
1.3. Cargar ‘55’ al registro de control NVMKEY.
1.4. C 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 operación de grabado finalice
dicho bit pasará a 0 automáticamente.
• 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 más líneas de memoria bastaría con repetir este algoritmo las veces que fuera ne
cesario. A continuación se presenta el código correspondiente a este algoritmo.
APLICACIÓN .5: LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM 235
¡PROGRAMA GRABAFLASII
.include np30f4013.inc"
.GLOBAL _main
.text
main:
; SECUENCIA DE BORRADO
Se debe repetir el código de las 4 instrucciones finales hasta completar las 32 instrucciones a gra
bar. En todas ellas se está grabando el mismo dato #0x l i l i l í en la posición de memoria indicada.
; INSTRUCCION 32
MOV #0x 111 l,W2 ¡CARGAMOS EN W2 LOS 2 BYTES DE MENOS PESO A GRABAR
MOV #0X001LW3 ¡CARGAMOS EN W3 EL BYTE MAS ALTO A GRABAR
TBLWTL W2,[W0] ¡ESCRIBIMOS EN LA DIRECCION APUNTADA POR W0 EL
¡CONTENIDO W2
TBLWTH W3,[W0++] ¡EN LA PARTE ALTA EL CONTENIDO DE W3
; PROCEDIMIENTO DE ESCRITURA
Se puede ejecutar el programa y observar su resultado con el simulador. Para ello se recomien
da establecer 3 punios de ruptura. El primero se coloca en la primera instrucción del programa, el
segundo en la prim era instrucción de carga de datos en memoria, y el último en la última instruc
ción NOP del programa.
Al comenzar la simulación y pararse el programa en la prim era instrucción, se puede acceder a
la memoria de programa para modificar la posición en la que se van a grabar los datos, posición
0x00300, y sustituir el valor OxFFFFFF por otro, por ejemplo, Ox AAAAAA.
Al seguir la simulación hasta el siguiente punto de ruptura, se debe observar cómo el valor de di
cha posición de memoria ha cambiado por el valor OxFFFFFF.
Y por último, al llegar a la última instrucción de programa, se observará cómo desde la posición
300 hasta la posición 33E el valor almacenado en la memoria FLASH es 0x111111. (Figura A5.1.)
La posibilidad de escribir en la memoria de programa, sin necesidad de cam biar el voltaje su
ministrado al dsPIC, le proporciona un potencial importante. Se puede proporcionar al dsPIC una
circuitería auxiliar para su conexión vía serie con un ordenador y cargarle con un programa que re
ciba los datos por dicho puerto, los escriba en la memoria de programa y transfiera el control de la
ejecución a dicha posición de memoria. Así, se podría grabar al dsPIC sin más circuitería que la de
un puerto serie, con el consiguiente ahorro correspondiente.
APLICACIÓN .5: LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM 237
rogram M emory:/
Dis&sse
noe r
384 002 F E FFFFFF nopr
385 00300 1 11 11 1 s u b r .u u 2 , [ w l ] , [ w2 — ]
386 00302 l l l l l l su b r. w w 2 ,[ w l] , [vZ — ]
387 00304 111111 su b r. w v 2 ,[ v l] ,[ v 2 ~ ]
388 003 06 l l l l l l s u b r .w w 2 , [ w l ] , [w 2 — J
389 00308 l l l l l l su b r. w v Z , [w l] , [ w 2 ~ ]
390 0030À l l l l l l s u b r .w ® 2 , [ w l ] , [w 2 — ]
391 0 03 0C l l l l l l s u b r .v u 2 , [ w l ] , [WZ— ]
392 003 0 E l l l l l l su b r. v w 2 , [ V i ] , [w 2 — ]
393 00310 l l l l l l su b r. v W2, [ u l ] , [w 2 — ]
394 00312 l l l l l l su b r. u w2, [ w l ] / [ w2 ]
395 00314 l l l l l l s u b r .n w2# [ w l ] , [ w 2 — ]
396 00316 l l l l l l su b r . w w 2 , [ w l ] , [w 2 — ]
397 00318 l l l l l l su b r. w u2 [ W l] , [ w2— ]
398 0031A l l l l l l 3 u b r. w v 2 , [ w l ] , [ w2— ]
399 0 0 3 1C l l l l l l su b r. w V 2 , [w l] , [ v 2 — ]
400 0 03 1E l l l l l l s u b r .w w 2 ,[ w l] ,[ v 2 — ]
401 00320 l l l l l l su b r. w w 2 , [w l] , [ v 2 — ]
402 00322 l l l l l l 3 u b r. w w 2 , [ w l ] , [w 2 — ]
403 00324 l l l l l l su b r. v W2, [ w l] , [w 2 — ]
404 0032 6 l l l l l l su b r. v w 2 , [ w l ] , [w 2 — ]
40S 0032 8 l l l l l l s u b r .w “ 2 / [^ 1 ] / [W2— ]
406 003 2 A l l l l l l su b r. w w2 , [ u l ] , [ w2— ]
407 0 03 2C l l l l l l su b r. u v 2 , [ w l ] , [ w 2 --]
408 0032E l l l l l l su b r. v v2 , [ w l ] , [w 2 — ]
409 00330 l l l l l l s u b r .« w2 , [ w l ] , [ w2— ]
410 00332 l l l l l l su b r . w w 2 , [ w l ] , [W2— ]
411 00334 l l l l l l su b r. w w 2 , [W l] , [ w2— ]
412 00336 l l l l l l 3 u b r. w W 2 , [ w l ] / [w 2 — ]
413 00338 l l l l l l su b r. w w 2 , [ w l ] , [ w2— ]
414 0033 A l l l l l l su b r. w w 2 , [ w l] , [ w2— ]
415 0033C l l l l l l su b r. w w2 , [ v i ] , [w 2 — ]
416 0033E l l l l l l su b r. v w 2 , [ u l ] , [w 2 — ]
417 00340 FFFFFF nour
Machine il SjfrboSc PSVMixedl PSV Data j
La lectura de la memoria EEPROM se diferencia con respecto a la de FLASH en que se leen los da
tos de 2 en 2 bytes, en vez de 3 en 3 bytes. Para realizar la lectura se escribirá en TBLPAG el nú
mero de página de la memoria EEPROM y en WO el desplazamiento dentro de dicha página y lue
go con una simple instrucción TBLRDL se leerá el dato.
La EEPROM que sólo está disponible en la fam ilia dsPIC3()F com ienza en la posición
0x7FFC00. Se propone elaborar un programa que lea dicha posición. Para simularlo hay que cam
biar previamente el valor contenido en dicha posición de memoria.
ion de memoria »
»
;EL DESPLAZAMIENTO A WO
// T,cc EEPROM en C
#include ”p3üf4013.h'
-
mt main(void)
TBLPAG = 0x7F:
WREGO = OxFCOO; iii
asm("TBLRDL [W0],W4M
)
rcturn 0:
C*v>.
Puede observarse en este ejem plo en C que, a veces, es necesario introducir ciertas instruc
ciones específicas del lenguaje ensam blador en los program as en C. Para ello utilizam os la
sentencia asm (“instrucción”), donde instrucción es la instrucción en ensam blador que no desea
incluir.
La grabación en la memoria EEPROM tiene muchas similitudes con la grabación en la memo
ria FLASH. Cuando se graba esta memoria, se puede grabar una palabra de dos bytes o una línea de
16 palabras (32 bytes). A continuación, se describe el algoritmo de grabación de una palabra en la
memoria EEPROM:
// Graba EEPROM en C
// PROGRAMA GRABAEEPROMC
#include ”p30f4013.h"
int sccuenciagrabacionQ
// Esta función escribe la secuencia de grabación
// tanto para borrado como para grabación
N ótese que en el lenguaje C para acceder a la inform ación de los bits de cualquier registro, se de
be escribir el nom bre de registro acom pañado de la palabra b its y a continuación, tras un punto de
separación, 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;
APLICACIÓN 5: LEYENDO Y ESCRIBIENDO LAS MEMORIAS FLASH Y EEPROM 241
El simulador del entorno de desarrollo MPLAB IDE es una herramienta muy com pleta donde se
pueden simular casi todas las características 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
Ejercicios
■/
A6.1. IN T R O D U C C IÓ N
A lo largo del presente tema, se abordarán distintos ejemplos en los que se utilizan los periféricos
que se hallan integrados en el dsPIC. Muchas de las patitas del controlador soportan distintas fun
ciones. Los periféricos pueden desarrollar distintas tareas en función de cómo sean configurados.
Para facilitar esta tarea de la inicialización de periféricos del controlador (puertas de entrada/salida,
conversores analógicos, temporizadores, etcétera) el entorno de desarrollo MPLAB IDE dispone de
una herramienta denominada Visual Initializer, VDI o Inicializador Visual.
Mediante el uso del VDI se profundizará en la programación de los controladores dsPIC, reali
zando ejemplos en los que se utilizan diversos periféricos.
Siguiendo con la filosofía de esta parte de la obra, la ejecución de estos programas se hará de
forma simulada, así por ejemplo, para el uso de las puertas de entrada/salida se hará uso de las ven
tanas de inspección de manejo de los datos que deberían llegar desde el exterior al controlador y
viceversa.
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
difícil tarea de la configuración del dsPIC. El programa Visual Initializer hace que esta tarea sea tan
fácil como pinchar y arrastrar iconos y cambiar los parámetros en un cuadro de diálogo. Una vez
completada esta labor, genera el código necesario para usar tanto en los programas en ensamblador
como en lenguaje C.
También com prueba si existe algún tipo de inconsistencia en las configuraciones y genera
mensajes de error en caso de existir conflictos en las asignaciones de patitas, 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 aplicación Visual Initializer muestre las
opciones de los periféricos específicos de dicho controlador.
243
244 dsPIC. DISEÑO PRÁCTICO DF APLICACIONES
Una vez arrancado el proyecto mediante el menú Tools->4 Visual lnitializer se pone en marcha
esta utilidad. Al hacerlo, puede comprobarse como en el menú de la aplicación MPLAB IDE apa
rece un nuevo elemento. (Figura A 6.1.)
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
Además del nuevo menú también aparecerá en pantalla la ventana principal de esta herramien
ta. (Figura A6.2.)
L M P l AtJ ID L V / . 3 0
F ls Edt yícw
[V is u a l I n il i a lb e r ]
Q y Q ü ijjy ü M l
1 BT
i3
r* dsPÍC30F4ni344-P¡nTOFP
9d
pm
L
nI OieiWo» InlenupU
ín d t i«p:
.M
(==3
— nr » -
"¡'ft:ii a wm
1 BT B ■
GEI
PW M
i—rr SE
r ~tt
CAN
3y¿rrp
M&AP.-SIM d s P I C ttiH O lj ; p c :0 o a b & a b lP O : d c n .o v .z c
Al observar la ventana de la Figura A6.2, puede comprobarse que el dsPIC que aparece en pan
talla no es el correcto. En la aplicación 0 se acordó utilizar el dsPIC30F4013 pero con encapsulado
PDIP y el mostrado en pantalla no tiene dicho encapsulado. El encapsulado puede cambiarse con el
botón derecho sobre la representación del controlador en la ventana y pulsando la opción Change
package. Entonces aparecerá en pantalla un cuadro de diálogo con una lista desplegablc denomina
da Package type y habrá que elegir 40 Pin-PDIP.
Checksum: 0xbí67
E>t. Interface
Op Amp
Tras esta operación, el encapsulado del dsPIC pasa a ser el de la Figura A6.3. Esta pantalla
se encuentra dividida en 2 partes. La 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 gráficam ente los elem entos ini-
cializados 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 podría no desplegarse ninguna opción por falta de
espacio.
Para configurar cualquier periférico hay que seleccionarlo en el panel de la izquierda y arras
trarlo sobre la representación del controlador. Al soltarlo, aparecerá un icono sobre el controla
dor. A continuación, haciendo doble clic sobre dicho icono, aparecerá un cuadro de diálogo que
hay que cum plim entar para configurar dicho periférico. En cualquier momento, para volver a
configurar esos parám etros, puede volver a hacerlo haciendo doble clic sobre el icono añadido al
controlador. (Figura A6.4.)
246 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
d s P IC 3 Q F 4 0 1 3 4 0 -P in P D IP
Port B
Poit Pin Settings
Ext. Interface
dp Amp
Para elim inar una configuración, basta con arrastrar el icono creado en el controlador a una par
te de la ventana vacía, y así desparecerá.
Una vez configurados todos los periféricos necesarios de esta forma tan fácil e intuitiva, tan
sólo falta aplicar estos cambios sobre el proyecto. Para ello, se dispone de varias opciones confi
gurables. Desde el menú Visual Initializer->Code Generarion Options se pueden configurar las
opciones del código a generar. (Figura A6.5.)
Entre otras opciones, se debe indicar al generador de código que sólo genere el código de aque
llas funcionalidades que disponga el controlador utilizado, marcando la opción Generate code only
fo r features/re sources on processor package de dicha pantalla.
APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS CON VISUAL INITIALIZER 247
Una vez configuradas las opciones de generación de código, se puede generar dicho código me
diante la opción Visual Initializer->Code Generation. Aparecerá el código en pantalla y se podrá
salvar dicho código, incorporarlo al proyecto o copiar la parte que se desee e incorporarla al códi
go fuente. (Figura A6.6.)
; 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”
¡.GLOBAL _ V isuallnitialization
; F e a tu re = fu s e s - f u s e s (DCRJ configuration
Como primer ejemplo, se acomete la creación de un proyecto con el VDI. Recibirá una señal digi
tal por una patita procedente, por ejemplo, de un interruptor y sacará por otra patita el valor inver
tido de la entrada del controlador que se usa para encender o apagar un lcd.
Para poder llevar a cabo este proyecto, se debe configurar una patita del controlador como en
trada y otra como salida. Después el programa sólo deberá leer el valor de la patita de entrada, in
vertir dicho valor, y mostrarlo por la patita de salida.
Cree un proyecto para el controlador dsPIC 30F4013 y acceda al menú Visual initializer. En la
barra vertical de la derecha elija la opción I/O Ports. Al hacerlo, bajo este epígrafe, aparecerán dis
tintos iconos de las distintas puertas que dispone el controlador. Elija la puerta D (port D) y arrás
trela hasta el controlador. A continuación haga doble clic sobre el icono de la puerta D arrastrada
hasta el controlador y aparecerá el cuadro de diálogo de la Figura A6.7.
En la pestaña RDO de la Figura A6.7 se configura el PINO de la puerta D, de 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 pestaña RD1, configu
re el PIN1 de la puerta D como salida, output en la lista Data Direction, para colocar allí el led co
rrespondiente. Al finalizar pulse Ok. (Figura A6.8.)
248 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Data Direction
Initial Value
V dd
dsp¡c3óf4ó13 _
RDO
//
RD1
FTT71
Ya ha configurado los periféricos del proyecto. Ahora sólo queda generar el código correspon
diente e incorporarlo al programa. En primer lugar, acceda al menú Visual Initializer -> Code Ge
neration Options y marque la opción Generate code only fo r features/resources on processor p a c
kage. A continuación, acceda al menú Visual Initializer ->Code Generation para que aparezca en
pantalla el código correspondiente. Al pulsar Save to Project se guardará un fichero con dicha ini-
cialización, que se incorporará a la lista de ficheros del programa. Cierre dicha ventana y la venta
na del Visual Initializer para regresar al proyecto.
O bserve cóm o en el panel del proyecto ahora se encuentra un fichero llam ado init_
dsPiC 30f40l3.s. Ese fichero contiene la rutina de inicialización. Para llamar a dicha rutina de
inicialización se debe incluir una instrucción cali _VisualInitialization en el código fuente del pro
grama. El programa será el siguiente:
;PROGRAMA PORTO
.include ?p30f4Q:l3.inc-? •: :
.global jmain
.text
m i
...... -
„mam;
cali _VisualInitialization
APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS CON VISUAI INITIALIZER 249
BXJCLH:
fiTSS PORTD.#RDO ;Si el bitO de PORTD está a Uno, salta
BSET PORTD.#RDl ;Ponemos a l el kit 1
BTSC PORTD.#RDO ;Si el bitO de PORTD está a cero, salta
BCLR PORTD. #RD 1 ;Ponemos a 0 el bit 1
GOTO BUCLE •.Repetimos indefinidamente el bucle
.end
//PROGRAMA PORTDC
// Programa ejemplo de maneje >.
//de puertas de E/S en C
tfinciiiue p3ur^yi3>a
int main(void)
{
VisualInitiali/.ation(): //Inicializamos las puertas
whileC 1) //Bucle infinito
í
if (PORTDbits.RDO == 0) //Si el bit RDO es un 0
PORTDbits.RDl - 1: //Establecemos nivel alto en RD1
else
PORTDbits.RDl = 0 ; //En caso contrario nivel bajo
)
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 añadirán para
este ejemplo dos escenas, una para establecer un nivel alto por la patita RDO y así comprobar cómo
reacciona el programa ante dicho estímulo, y otra para establecer un nivel bajo por la patita RDO.
Para crear el escenario, se accede al menú D ebugger -> Stimulus Controller -> N ew Scenario.
Inmediatamente aparece en pantalla un cuadro de diálogo para crcar el escenario. Este cuadro dis
pone de varias líneas en blanco para implementar varias escenas. Pinche en la primera fila bajo la
etiqueta Pin/SFR y aparecerá una lista desplegable en la que podrá elegir el pin RDO. En esa misma
fila, en la columna Action, seleccione de la lista la opción Set High para que cuando utilice esta es
cena se establezca en el bit RDO un nivel alto. Igualmente, en la fila inferior seleccione RDO y es
tablezca una acción Set Low, que hará que se cargue un nivel bajo en la patita RDO. El resultado que
debe obtener se ofrece en la Figura A6.9.
El simulador permite salvar este escenario con la opción Save Scenario, para que cuando vuel
va a abrir este proyecto no tenga que volver a crearlo.
Si ahora se simulase el programa paso a paso, se podría cambiar el estado de RDO a nivel alto o
a nivel bajo y observar su funcionamiento. Para cam biar a nivel alto o nivel bajo RDO debe pulsar
250 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Asynchronous Stimulus
j Delete tow |
Figura A6.9. Creación de un escenario para actuar sobre las señales externas del controlador.
en el inicio de la fila donde aparece el símbolo > y observar cómo al ejecutar el programa se ejecu
tan las instrucciones correspondientes a dicho estado.
Utilizando este escenario, compruebe paso a paso el programa y observe si el valor del segundo
bit de la puerta D va cambiando de valor, en función de si se establece un nivel alto o un nivel bajo
mediante el escenario creado.
M ediante el siguiente ejemplo se configura un tem porizador para hacer que el controlador actúe
como un sem áforo. Durante cierto tiempo encenderá un led rojo y durante otro tiempo un led
verde. Además de configurar el tem porizador tam bién se deben configurar 2 patitas del contro
lador como salida para encender el led verde y el led rojo. Para ello se utilizarán los pines RDO
y RD1.
Para configurar estas patitas, se abre el Visual initializer y se cam bia el encapsulado del
dsPIC mediante el botón derecho del ratón y la opción Change Package. A continuación, se
accede a la opción 1/0 Parts, se selecciona la puerta D y se arrastra hasta la figura del controla
dor. Al hacer clic sobre el icono correspondiente a dicha puerta, se podrán configurar RDO y RD1
como salida. (Figura A6.10.)
A continuación se configura el Timer para que el semáforo esté cierto 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 diálogo correspondiente haciendo clic sobre el icono OsciUator. Marque la
casilla View Advanced Oscillator Settings y establezca como fuente de reloj Clock Source, Infernal
LPRC. Y así la frecuencia del reloj se establecerá a 0 ,5 12 Mhz.
APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS CON VISUAL INITIALIZER 251
Para configurar el temporizador, acceda a la opción Timer del Visual Initializer, elija el Timerl y
arrástrelo hasta el controlador. Pulse sobre el icono del timer y configúrelo de la siguiente manera:
Operational Sellings
¡- • Interrupt----------------------------------------------------- “
Interrupt Priority: j 4 v ■
Observe la sencillez que supone trabajar con el VDI frente a configurar cada uno de los bits de
los registros de configuración de este recurso. No es necesario recordar todos los bits que intervie
nen en la configuración del mismo, tampoco se deben hacer cálculos matemáticos para establecer
la cuantía del contador para así obtener un período determinado.
252 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
La herramienta Visual Initializer ha realizado estos cálculos para una frecuencia de reloj estableci
da previamente. Esta frecuencia no coincide con la frecuencia que usa el simulador, así que para obte
ner el resultado deseado deberá cambiar también la frecuencia de trabajo del simulador. (Figura A 6.12.)
linfe'.(MHz}
0 View Advanced Oscillalof Sellings
Cancel
Seleccione la herramienta MPLAB STM en el menú Debugger y en la opción Sim ulator Settings
establezca como velocidad del reloj 0.512 (atención, 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
Processo: Frequency -
Units:
®MHz
¡0.512 OKHz
OH z
t Trace Options---------------
EU Trace A l O Break on Trace Buffer Full
Una vez configurado el temporizador y las puerta D como salida sólo queda configurar la herra
mienta Visual Initializer mediante las opciones Generate code only for features/resources on pro
cessor package en el menú Visual Initializer -> Code Generation Option, generar el código e in
cluirlo al fichero del proyecto.
APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS CON VISUAL INITIALIZER 253
La programación del dsPiC emplea 2 ficheros fuente. Un fichero para el programa principal y
otro en el que se atiende a la interrupción.
El programa principal podría ser el siguiente:
;Programa SEMAFORO
;PD0 ROJO, PD1 VERDE
.global _main
.text
_main:
G uarde el fichero e incluyalo en el proyecto. A continuación, cree otro fichero donde se escribi-
rá el código correspondiente a la interrupción generada por el timer.
;PROGRAMA SEMAFORO
.global__TJ Interrupt
;Atiende a la interrupción del Timer 1.
•»Comprueba el estado del semáforo y lo cambia de color.
T 1Interrupt:
bclr 1FS0,#T1IF ; Borramos el flag de interrupciones.
btss PORTD,#RD0 ;Si el bitO de PORTD está a Uno salta el rojo
;y pasa a verde
goto ROJO
VERDE:
mov #0x0002,'W0 ;Ponemos verde el semáforo
mov W0,PORTD
goto final
ROJO:
mov #0x0001.W0 ;Ponemos a rojo el semáforo
mov w0,PORTD
final:
RETFÍE ; Return de la interrupción
Para probar este programa en el simulador es recomendable colocar 2 puntos de parada, uno co
mo siempre en la prim era instrucción del programa principal y otro en la primera instrucción del
programa que atiende a la interrupción del Timer 1. Si además se añade en la ventana Watch del me
nú View el registro PORTD, se comprobará como este registro cambia periódicamente pasando de
valer 0x0001 (semáforo rojo) a 0x0002 (semáforo verde). Puede comprobar el tiempo transcurrido
entre cada cambio utilizando la opción Stop Watch y también puede ver cómo va cambiando el con
tador mientras el programa ejecuta el bucle principal visualizando el valor del registro 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 código desconocida. Volviendo a pulsar F9 el
programa seguirá su ejecución normal. (Figura A6.14.)
U MPiabmr V7.30
Fife Ed: _l£ew Fro¡«t Debujç©' ~ctis Ccrifij.ro Wttíow Wsf
; □ Cr : - *•. % â A r Ü 't ÿ g ^ c » $ g j : Checksum : 0xa6da t» I I M> ?•» T? §&
O V .Ainterrupcion.s
■jiobal __ T im t« rru p t Sfapwateh
.in c lu d e ''p 3 0 ? H 0 1 3 . i n c "
^ S y n c h | In sbucbon C j d e s 9999962 ' 33S3SG2
__ T i l r Æ c r L’u c t- :
^ILK IfSO , t l l l f i Reset del fiagde tnC«cxup<
BTSS POJ>7£>,92DU ;ïx c l fcitO de P0RH> esto a Uno « alta «' f~Zc^n Ttr* ÍSec*1 1.393532 ‘"Î.9S3S82
COTO SDJO
U8J®B Pnx«*« Frequency fNHz) 20.000»»
ñor <0x0002,*0
co r tfO .? O R íD
•joto Iu ia jl
V.CJO:
ÍÍ0 7 «O x O O O l .V O
#xnclude p 0 f4 0 1 3 .h ,t
//Programa Semáforo en lenguaje C
// PROGRAMA SEMAFOROC
//Esta función atiende a la interrupción del temporizador
void attribute (( interrupt )) _T1 Interrupt void)
{
IFSObits.TlIF = 0; //Borramos el flag de la interrupción
if (PORTDbits.RDO == l) //Si el semáforo está a rojo
PORTD = 2;
else //lo ponemos en verde y viceversa
PORTD = I ;
}
//Programa principal
int main (void)
APLICACIÓN 6: PROGRAMANDO LOS PERIFÉRICOS CON VISUAL INITIALIZER 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 más completos.
Una posible ampliación para el proyecto del semáforo podría consistir en dotarlo con un interrup
tor para que el peatón solicite que se ponga verde. Cuando el peatón pulse este interruptor que es
tará conectado a una patita del controlador, se genera una interrupción que hará que el semáforo se
ponga rojo para los vehículos. Para llevar a cabo la simulación de esta nueva situación es necesario
colocar un interruptor conectado a la patita INTO, que provocará que el semáforo pase a rojo.
Tomando como base el ejemplo anterior hay que incluir una nueva configuración. La configura
ción correspondiente a la interrupción externa en la patita INTO. Además se deben estudiar las prio
ridades de las interrupciones y proteger la ejecución de las mismas para que 110 se interrumpan unas
a otras. El primer paso será volver al Visual Initializer y habilitar la interrupción externa INTO. Para
ello no debe arrastrar ningún objeto nuevo sobre el dsPIC ya que la opción para configurar las inte
rrupciones ya se encuentra configurada. Se trata del icono denominado Interrupts and Traps sobre el
que haciendo doble clic podrá proporcionar el cuadro de diálogo mostrado en la Figura A6.15.
tzaj
CZH
Osdlatcc
ÉEnsbiéMGLB
Pncr^ U __ ;
.global__INTOInterrupt
.include Mp30F40J3.inc"
__INTOInterrupt:
disi #4 ;Deshabilitamos otras interrupciones en las siguientes inst
be Ir IFSO,#INTOIF ;Borramos el flag de la interrupción INTO
mov #0x0001,W0 ;Ponemos el semáforo en ROJO
mov WO,PORTD ;para los vehículos
rctfie finalizamos la ejecución de la interrupción
Resulta de especial interés la inclusión de la instrucción disi #4. Con esta instrucción se desha
bilitan las interrupciones de nivel de prioridad del 1 al 6 durante las (4 + 1) siguientes instrucciones.
Así, si en un momento en que el programa atiende a la interrupción del pulsador no se atenderá la
interrupción solicitada por el Temporizador TIM ER 1. Para establecer prioridades entre estas inte
rrupciones se utiliza el cuadro de diálogo de la Figura A6.15.
En lenguaje C la solución puede ser la siguiente:
//PROGRAMA SEMAFOROINT
#includc "p30f4013.h"
//Programa Semáforo en lenguaje C
y temporizador
semáforo
Figura A6.16. Ejecución del programa semáforo con pulsador con un escenario.
Para simular este programa se establece un punto de parada en el código que atiende a la inte
rrupción externa y se crea un escenario para provocar dicha interrupción. Dicho escenario se puede
crear a través del menú Debugger->Stimulus Controller-New Scenario. En la lista Asynchronous
Stimulus añada INTO con la acción Pulse High. Así, al pulsar sobre el símbolo > situado al inicio de
la fila creada, el programa deberá parar su ejecución en la primera línea del código que atiende a la
interrupción externa. Observará que entonces el semáforo se pondrá en rojo. Pero todavía queda al
go por mejorar en este programa. ¿Lo ha detectado? ¿Se atreve con ello?
En este ejemplo puede observar que para atender a la interrupción INTO se ha necesitado incluir
la etiqueta__INTOInterrupt. Esta etiqueta se encuentra definida en el fichero p30f4013.gld. Puede
abrir este fichero y examinar la sección ** 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 módulo conversor analógico digital,__TI Interrupt para in
terrupciones del temporizador 1, etc. La siguiente tabla reúne algunas de estas etiquetas.
258 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
AUTOEVALUACION
¡ F j j f
2. ¿Qué salida genera la herramienta Visual Initializer?
3. ¿Cómo se puede sincronizar la velocidad con la que trabaja la herramienta Visual Initializer y el si
mulador MPLAB SIM?
4. ¿Do cuántos temporizadores dispone el controlador dsPIC30f4013?
5. ¿Dónde se encuentran almacenadas las definiciones de las etiquetas correspondientes a las dis
tintas interrupciones?
E je rcicio
APLICACIÓN
VrtV»Wl>
r* • / » / •
V iW 'W iX írt V
Periféricos Wffi
¡xoyivi-r,
•••
ÉB
A7.1. IN T R O D U C C IÓ N
A lo largo del presente tenia se manejarán diversos periféricos de los controladores dsPIC que son más
específicos en el tratamiento de señales. Algunas aplicaciones son difíciles de simular ya que resulta
complicado insertar una señal analógica al simulador, por eso, en algunos casos, el estudio se limita
rá a describir el periférico, sus posibilidades y su inicialización para su conecto funcionamiento.
El comportamiento de las instrucciones DSP puede variar en función de la configuración del Motor
DSP. Para configurarlo de una forma sencilla se procederá a utilizar la herramienta Visual Initializer.
Previamente se seleccionará el modelo, en nuestro caso el dsPIC30F4013. A continuación se ini-
cializará el Visual Initializer y se seleccionará el icono DSP, arrastrándolo hasta la imagen del con
trolador. Al hacer doble clic con el ratón sobre dicho icono aparecerá en pantalla el cuadro de diá
logo correspondiente para la configuración del Motor DvSP. (Figura A7.1.)
259
260 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
Como primer parámetro, se configura el modo de multiplicación, Multiplication Mode. Este mo
do afecta a instrucciones como MAC. Afecta a todas aquellas en las que se use el multiplicador de
17 bits del que disponen los dsPIC. Las instrucciones que se ven afectadas por esta configuración
son las siguientes:
IN STR U C C IÓ N D ESCRIPC IÓ N
MAC M ultiplicar y acumular.
MSC M ultiplicar y restar. Es equivalente a la anterior, pero en vez de sumar el resultado, lo resta.
MPY M ultiplica dos valores y deja el resultado en el acumulador.
MPY.N M ultiplica y niega el resultado. A ^ -B*C
Si se elige como Multiplication Mode la opción ¡niegen el resultado de las mencionadas ins
trucciones se representará como un valor entero, si por el contrario se selecciona Fractional, el re
sultado será un numero fraccionario.
Existen otras instrucciones que multiplican ciertos valores, como MUL, en las que el resultado
siempre es un valor entero y por tanto no utiliza esta configuración del motor DSP.
Otra opción para configurar el Motor DSP es el Accumulator Roundy o redondeo del acumula
dor. Para este parámetro existen dos posibilidades, Convergente convergente y Conventional, con
vencional. La diferencia entre ambos modos se analiza en la parte teórica de esta obra, más con
cretamente en el Anexo del Capítulo 4, M anipulación de datos del Motor DSP.
Bajo el epígrafe Accum ulator Saturation M ode, se perm ite configurar el modo de saturación,
pudiendo elegir el modo 1.31, “norm al”, que cargará en el acum ulador destino el valor 1.31
m áxim o positivo (ÜXÜ07FFFFFFF) o m áxim o negativo (0xFF80000000). El otro m odo es
el 9.31, “supersaturación”, donde cargará el valor 9.31 m áximo (0x7FFFFFFFFF) o el mínimo
(0x8000000000).
Y, por último, se dispone de la posibilidad de habilitar o deshabilitar el modo de saturación ele
gido para el acum ulador A, B o la zona de memoria afectada por instrucciones DSP.
Una vez seleccionados los parámetros necesarios, basta activar la casilla Generate Code O nlyfor
features/resources on processor package a través de la opción Code Generation Options del menú
Visual Initializer, para que se genere el fichero init_dsPIC30F4013.s mediante la opción Code Ge
neration -> Save to ProjecL
Una vez generado el código de inicialización del proyecto, en el código fuente en ensamblador,
se añade:
r.-.v-:-•? \ ¡
Cali Visuallnitialization
::r :
O bien, en lenguaje C
: _ -
VísualIniíializationO;
A continuación, las instrucciones DSP que se utilicen se comportarán de acuerdo a los paráme
tros elegidos en los pasos anteriores.
APLICACIÓN 7: PERIFÉRICOS AVANZADOS 261
El conversor analógico digital de 12 bits permite convertir señales analógicas de entrada en valores
digitales de 12 bits con una velocidad de conversión de lOjis. Este módulo está basado en un regis
tro de aproximaciones sucesivas y soporta hasta 16 entradas analógicas multiplexadas sobre un am
plificador unipolar de muestreo y retención denominado CHO. La tensión de referencia puede pro
ceder de la tensión del controlador (AVdd y AVss) o bien de dos patitas que pueden recibir dicha
tensión de referencia (Vref-i- y Vref-). Además este conversor puede funcionar mientras el procesa
dor está en modo Sleep con el oscilador RC.
El módulo dispone de varios registros para su control. Asi los registros ADCON1, ADCON2 y
ADCON3 controlan el modo de trabajo del conversor analógico digital. El registro ADCHS, por su
parte, selecciona los canales de entrada. El registro ADPCFG configura las patitas com o entradas
analógicas o como entradas/salidas digitales. Y el registro ADCSSL selecciona las entradas a esca
near o explorar. Los resultados de la conversión se guardan en un buffer de 16 palabras, denomina
das ADCBUFO, A D CBU F1,... ADCBUFF.
En la Figura A7.2 se muestra un esquema del módulo conversor.
1. Configurar las patitas analógicas, las tensiones de referencia y las entradas y salidas digitales.
2. Seleccionar los canales de entrada A/D.
3. Seleccionar el reloj para la conversión.
4. Seleccionar el disparo (trigger) de la conversión.
5. Poner en marcha el módulo A/D.
6. Configurar la interrupción (si fuera necesario).
a. Limpiar el bit ADIF.
b. Seleccionar la prioridad de la interrupción.
c. Activar el bit ADIE.
7. Comenzar el muestreo.
8. Comenzar la conversión.
9. Esperar a que se complete la conversión, lo que se detecta por una interrupción o porque el bit
DONE del registro ADCON1 se pone a 1.
10. Leer el buffer A/D con el resultado (ADCBUFO, ADCBUF1,...) y limpiar el bit ADIF.
Para trabajar con el conversor AD cree un proyecto para el dsPTC30F4013, inicie la herram ienta
V isual Initializer. cam bie el Pcickage y acceda a la opción A D C del menú de periféricos
del controlador. Pinche y arrastre el icono denom inado 12-Bit A to D hasta la figura del contro
lador. Al hacer doble clic aparecerá en pantalla el cuadro de diálogo representado en la Figura
A7.3.
Hefp AcoV
Figura A7.3. Cuadro de diálogo para la configuración del conversor analógico digital de 12 bits.
Desde la ventana de la Figura A7.3 podrá configurar muchos aspectos del conversor analógico
digital de 12 bits de resolución. A continuación se estudia cada uno de los apartados del cuadro de
diálogo.
APLICACIÓN 7: PERIFÉRICOS AVANZADOS 263
Operational Settings
Enable on startup- Activando esta casillael conversor analógico digital se activa al iniciarse la eje
cución del programa. De no marcarlo, se deberá activar a 1 el bit ADON del registro ADCON1 pa
ra que se inicie el proceso dé conversión.
Data Output Format: Establece cómo se desea recibirlos datos de la conversión, si enteros sin sig
no (Unsigned Integer), enteros.con signo (Signed Integer), fracciónales sin signo (Unsigned Frac
tional) o fracciónales con signo (Signed Fractional).
Voltage Ref Sources Sirve para seleccionar la tensión de referencia. En esta lista despíegable se
puede elegir entre cuatro opciones diferentes. Se puede elegir la tensión de las patitas AVdd y
AVss como referencia, o la tensión de las patitas Vref+ y Vref-, entre otras.
• CPU Sleep Operation: Mediante esta opción se indica qué acción deberá tomar el conversor cuan
do el controlador entre el modo Sleep si se desea que despierte al controlador (Wake up on Start
Bit) o que no lo haga (No wake up).
CPU IDLE Operation: Indica si el periférico continúa su operación (Continue) o se detiene (Stop)
cuando entra en el modo de bajo consumo Idle.
En el cuadro Interrupt Settings, se puede configurar al conversor para que active una interrup
ción cuando finalice la conversión. Es posible establecer que la interrupción se active al iniciarse el
módulo así como su prioridad. Para atender a dicha interrupción deberemos usar la etiqueta _AD-
Cínterrupt.
En el cuadro A/D fnput Settings (CHO) se configuran los canales de entrada del conversor. Esta
blece las patitas que serán utilizadas para realizar la conversión, así como las tensiones de referen
cia de los multiplexores MUXA y MUXB. Estos multiplexores pueden actuar de manera que cada
entrada al conversor se vaya alternando, una por el multiplexor MUXA y la siguiente por el MUXB.
El conversor dispone de hasta 13 patitas, desde ANO hasta AN12, para actuar como entradas ana
lógicas. Se marcan con un tick aquellas que se van a usar en el proceso de conversión.
Mode Settings
Para seguir configurando el modo de funcionamiento del conversor analógico digital hay que es
tablecer cuándo se debe empezar a realizar el muestreo, cuándo realizar la conversión, etc. Para ello
la herramienta dispone del cuadro Mode Settings, que se encuentra divido en las pestañas Sampling
Mode y Conversión Mode. (Figura A7.4.)
Figura A7.4. Configuración del modo de funcionamiento del conversor, pestaña Sampling Mode.
264 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Bajo la pestaña Sampling Mode, de la Figura A7.4, se pueden seleccionar las siguientes opciones:
P. Al seleccionar con un Lick la opción Alt. Between Sample A & B inputs, la entrada se irá al
ternando entre el multiplexor A y el B.
2a. Habilitando la opción Enable alt. Scanning o f differente A/D inputs into CHO samples sc per
mite que los datos de distintas entradas vayan alternativamente al amplificador de muestreo
y retención CHO.
3a. En Sampling Start Mode se puede elegir cóm o comienza el muestreo en la conversión, pu-
diendo elegir entre manual (Sampling started manually) para lo que hay que poner a 1 el bit
SAM P del registro ADCON1, o automáticamente tras la conversión anterior (Automatically
after previous conversion). En este caso, es el bit ASAM del registro ADCON1 el que se de
bería poner a 1 en caso de no usar la herram ienta Visual Initializer, ya que ésta lo hará de for
ma automática.
4a. Por último, se puede seleccionar entre las 13 entradas.
XError: ! (Calc.)
0
Conversions / Int: i
Conversion Period: 0 ■ usee (Caic.)
A/D Buffer Fill Mode: Do not alt. fill both halves of A/D ;y
Figura A7.5. Configuración del modo de funcionamiento del conversor con la pestaña Conversión Mode.
1. En la opción Trigger Source, se establece cuándo se activa la fase de conversión, que puede
hacerse manualmente, una vez que se borre el bit SAMP (Manual clearing o fS A M bit) del
registro A D C O N 1, mediante una transición por flanco ascendente en la patita INTO (Active
Transition on INTO). También se puede hacer de forma síncrona utilizando el temporizador
Timer 3 (Timer3 Compare) o el temporizador interno (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 número de conversiones que se realizarán an
tes de que se genere la interrupción. Ese número debe ser menor que el número de bulfers
(16) ADCBUF, ya que de lo contrario se perdería algún dato de la conversión. Este paráme
tro se guarda en el registro ADCON2, en los bits SMPI. Después de cada interrupción, los da
tos comienzan a guardarse siempre desde ADCBUFO.
4. En la casilla Clock Source se selecciona el reloj de conversión. La velocidad máxima es de
12 períodos de reloj por cada dato o muestra.
5. La casilla A/D Buffer FillM ode describe el modo y estado de llenado de la pila. El resultado se
puede dividir en dos grupos de 8 que reciban de forma alterna el resultado de la conversión (Alt
two 8words bujfers ofA/D), o bien, no dividirlos (Do not Alt. Fill both halves ofA /D ). Esta de
cisión dependerá del tiempo que emplee la interrupción en procesar los datos de la conversión.
APLICACIÓN 7: PERIFÉRICOS AVANZADOS 265
Puede ser interesante realizar la conversión en modo SIeep ya que con ello se reduce notable
mente la posibilidad de recibir ruido provocado por el resto de periféricos del controlador.
Se procede a desarrollar el primer ejemplo. Desde Visual Initializer se marcan las siguientes casillas:
El resto de parámetros se dejan tal cual aparecen por defecto en la herramienta Visual Initializer.
A continuación, se activa la casilla Generate Code Only forfeatures/resources on processor pac
kage a través de la opción Code Generation Options del menú Visual Initializer. Se genera el fichero
init_dsPIC30F4013.s mediante la opción Code Generation -> Save to Project.
PROGRAMA CAD
.include "p30f40J 3.inc'’
.GLOBAL „main
.text
_mairi:
call JVisual Initialization ;ínicializamos el conversor analógico digital
bucle: ;Permanecemos en un bucle infinito
goto bucle
Tratamiento de la interrupción
.global ___ADCInterrupt
ADCInterrupt: ;Etiqueta correspondiente a la interrupción
RETFIE
.end
Modifique los parámetros del Visual Initializer y siga estudiando los tiempos obtenidos. No así
los datos obtenidos en ADCBUFO, pues es complicado simular una entrada analógica en las patitas
de entrada, por lo que el resultado de la conversión siempre es cero.
Otro ejercicio interesante consiste en analizar la secuencia generada en el fichero init_ds-
PIC30F4013.S para la inicialización del módulo.
El programa anterior desarrollado en lenguaje C sería el siguiente:
//PROGRAMA CADc
# include ,'p30f4013.h"
••• •: .;X;
#include ”p30f40í3.h"
unsigned int ADResultl = 0; //Variable donde guardamos el resultado conversión
A 7.4 . C O M U N IC A C IO N E S UART
Este módulo permite establecer comunicaciones serie con el exterior. Se trata de un transmisor re
ceptor asincrono, bidireccional, con un buffer de transmisión y recepción de 4 caracteres. Dispone
de 2 patitas, denominadas TX y RX, que permiten enviar y recibir información en serie con la po
sibilidad de activar una interrupción cada vez que se reciba o se envie un dato.
Entre otros, para trabajar con el módulo UART, se utilizarán los registros U1TXREG para trans
mitir los datos, U1RXREG para recibir los datos, U 1MODE para configurar el módulo, U1BRG para
configurar la velocidad de transferencia en baudios y U1STA para comprobar el estado del módulo.
La comunicación serie es un protocolo de comunicación muy extendido y conocido, por lo que
a continuación y sin más preámbulos, se desarrolla un primer ejemplo Hola amigo, que transmite el
mensaje Hola amigo!
APLICACIÓN 7 : PERIFÉRICOS AVANZADOS 267
La herramienta Visual Initializer configurará al módulo UART. Se crea un proyecto para el ds-
PIC30F40I3 y se inicializa Visual Initializer. Se cambia el encapsulado del dsPIC a formato PDIP
y se elige del menú de periféricos la opción UART.
El dsPIC dispone de dos módulos para comunicaciones UART. Se escoge el módulo UART1 y
se arrastra hasta el dsPIC. Una vez allí, se hace doble clic sobre el mismo accediendo al cuadro de
diálogo de configuración de dicho módulo UART1. (Figura A7.6.)
IJARTC Configuration.
• Coirniumsctcn Settojs - - .................................
Opcicbcnal Scltngs
Recewsr Transmfcter
if
0 Erwble 7ifinsmt
CJ Enable Irten^it o» Startup
InieffuptPiiwfcy:
Generate Int on buffe;si:e: ¡ 1 Ernply
Se habilita el módulo en el inicio del programa activando la casilla Entibie on Startup. Si en vez de
hacerlo automáticamente fuese manualmente habría que poner a 1 el bit UTXEN del registro U1STA.
Con la casilla Baud Rate se escoge la velocidad en baudios a 9.600. Mediante la casil la Data Bits
se determina el número de bits por carácter, en este caso 8 bits. La casilla Stop bits se pone un 1 pa
ra establecer 1 bit de parada, y la lista Parity se deja con la opción No parity. De esta forma el mó
dulo se configura para una comunicación a 9.600 baudios. 8 bits por carácter y 1 de stop.
En la pestaña Transmitter se activa la casilla Enable Transmit para permitir la transmisión de datos.
El Visual Initializer configura automáticamente al módulo para 9.600 baudios, como se puede
apreciar haciendo doble clic sobre el icono Oscilador. Si desea configurar el módulo manualmente,
sin hacer uso de la herramienta Visual Initializer, deberá calcular el valor a cargar en el registro
UxBRG (donde x es 1 o 2 según el módulo seleccionado) de acuerdo con la siguiente fórmula:
Por último, se crea el fichero fuente en ensamblador que transmitirá el mensaje por dicho puerto:
.include "p30f4013.inc"
.global _main
;Escribimos el mensaje en la sección X de la memoria
.section holamundo,data,xmemory}address(0x0800)
Mcnsaje:
.ascii "Hola mundo!\r\n\0"
.text X*;-;*::-x • - ■*
.
_main:
call „Visual Initialization ;Inicializa el dspic
mov #Mensaje,Wl ;Mueve a W1 la dirección del mensaje
Bucle:
mov.b [W 1++), WO ;Lee el dato en WO
cpO.b WO ;Si el dato es 0
bra Z,Fin ;entonces ha acabado y salta a Fin
call MandaCaracter ;En caso contrario escribe el caracter
bra Bucle ;repite el bucle
MandaCaracter:
btss U1STA,#TRMT ;Espera a poder transmitir
bra MandaCaracter ;Si no puede transmitir sigue esperando
mov W0,U1TXREG ;Escribe el caracter en el buffer TX
return ;retoma a la llamada
Fin:
nop ;Fin del programa
.end
Para ver cómo funciona este programa lo ideal es que trate de simularlo con la herramienta
MPLAB SIM. Para ello deberá indicar al simulador que los mensajes de salida del módulo UART
aparezcan por pantalla. Basta con acceder al menú Debugger->Settings... y, en la pestaña UART 10.
se activa la casilla Enable UART 10 y luego se elige en la opción Window en el marco Output para
que el resultado de la salida del módulo se visualice en pantalla. (Figura A7.7.)
Figura A7.7. Configuración del simulador para que muestre los datos del módulo UART en pantalla.
APLICACIÓN 7: PERIFÉRICOS AVANZADOS 269
O u tp ut
i Buüd ¡; Version Control !¡ Find in Files : Visual Infcalizet MPLAB SIM [ SIM U a f t l ^
H o la mundo!
Una vez configurado el módulo con Visual Initializer enviar un dalo por el puerto serie es tan
sencillo como esperar a que el bit UTXBF del registro de estado U1STA esté desactivado para en
viar el dato, simplemente escribiéndolo en el registro U1TXREG.
Para recibir un dato, se habilita una interrupción en la inicialización del módulo UART1 y se usa
la etiqueta__U 1RXInterrupt para acceder al dato que se recibe en U1RXREG.
Mediante el bit ICTMR se selecciona la fuente de reloj del temporizador. Debe elegir entre el Ti-
mer2 y el Timer3. (Figura A7.9.)
La herramienta Visual Initializer permite configurar este módulo fácilmente, pero si prefiere co
nocer exactamente los pasos necesarios puede analizar el código generado por dicha herramienta.
Para configurar este módulo no sólo es necesario añadir el icono correspondiente al IC1 al con
trolador, sino también el Timer3 que es el que controla el tiempo. La Figura A7.10. muestra algu
nos posibles valores de configuración.
A continuación se debe añadir el módulo IC1. Como se pretende configurar el módulo IC1 para
medir la anchura de un pulso, los parámetros que se deben definir son los siguientes:
270 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
T.\jR2
x
I Cx Prescaler Detector de flanco v -¿ jo t m r
y sincronizador
1f
Lógica de
c o n tra i
Flag de interrupción#"
ICxF
Ï
ICxBUF
FIFO
Intciiupt P iiaity. V jj
Figura A 7.10. C.onfiguración del Timer3 para su empleo con el módulo IC1.
• Timebase fo r input capture: Selección del Timer2 o el Timer3 corno fuente de tiempo para el
contage. Elegimos el Timer3.
• Capture Operating Mode: Permite elegir que evento se va a capturar. Disable para deshabi
litar el módulo, Capture every falling edge para capturar cada flanco descendente. Capture
every rising edge para capturar cada flanco ascendente, Capture every 4th rising edge para
capturar cada 4 flancos ascendentes, Capture every 16th rising edge cada 16 flancos ascen
dentes, Capture every rising and falling edge cada flanco ascendente o descendente o Interrupt
or wake up on idle para despertar en el modo Idle. Seleccionamos Capture every rising edge
and falling edge. El pulso empieza con un flanco ascendente y acaba con uno descendente. El
ejemplo trata de capturar el valor del temporizador Timer3 con el flanco ascendente y con el
flanco descendente. La diferencia entre una lectura y otra dará la anchura del pulso.
• Capture events per interrupt: Permite seleccionar que la captura se produzca en cada evento
(Capture every event) o en el segundo, tercer o cuarto evento (Capture 2nd, 3rd o 4th event
Se elige Capture 2nd, y así al capturar el segundo evento, es decir el flanco descendente deí
APLICACIÓN 7: PERIFÉRICOS AVANZADOS 271
pulso, se generará una interrupción que calcula la diferencia entre la primera lectura del tem
porizador y la segunda y obtener así la anchura del pulso.
• Por último, se puede habilitar una interrupción para tratar estos eventos mediante la opción
Enable interrupt on startup e Interrupt Priority.
In p u t Capture Configuration
< !................. — ^
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
0C1R (hex]:
OCIRS ft*»)
I QK 1I Cared | ( Appty |
• Complete la tabla con los valores de O CI para distintos valores de TIMER2 en función de
los parámetros elegidos en el Apartado A7.6
T IM E R 2 OC1
0x00f f 0
0x0 100
0x0/07
0x0102
0x0103
0x0109
0x010A
0x0 JOB
0x0 WC
En la tercera parte de esta obra podrá encontrar un ejemplo de utilización de este módulo para el
control de motores. Más concretamente en el Laboratorio 5, Control de motores mediante PW M , se
hace uso de este módulo para controlar la velocidad de un motor y conseguir distintas velocidades
de una forma sencilla.
274 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
AUTOEVALUACIÓN
Ejercicios
Dirección Contenido
7FFCÓ0 0x4 F4 8
7FFC02 0x414C
A continuación, cree un programa en ensamblador que transmita por el puerto serie el contenido
de esas direcciones de memoria. Simúlelo y descubra el mensaje enviado.
IIS * v ‘1 - £
2. Programe y simule un programa en lenguaje C; de forma que se lleve a cabo una conversión ana
lógico digital por la patita ANO, con tensión de referencia en VREFH y VREFL, utilizando el tempo
rizador interno con un período de muestreo de 0,002/is., con una velocidad de reloj de muestreo
de 30 * .5 * .Tcy, de forma que cada 5 muéstreos se genere una interrupción y obtenga la media
de esos 5 valores.
Al tratarse de un periférico tan veloz, el calcular la media y tomar ese valor como el valor resulta
do, permite minimizar el riesgo producido por la entrada de ruido en el muestreo.
1. ...... : : ; r::: ::: '
del CD
Vi.. . . " ' .A
i
r n lr a te
.-‘.‘i__
ÍY A Y A ’i M V v
e instalación de
las herramientas
de trabajo
C O N T E N ID O DEL C D
El CD que acompaña al libro dispone de los ejemplos explicados en el mismo, las aplicaciones de
desarrollo utilizadas, así como los ficheros necesarios para realizar las actividades propuestas.
La organización del CD en distintas carpetas se corresponde con la de la Figura AP.l.
a p l ic a c io n e s DOCUMENTACION
DSPIC FD LITE
D DSPICWORKS
LABORATORIOS
P MPLAB C30
MPIABIDE
P WINPICSOO
Dentro de la carpeta APLICACIONES, se encuentran todos los ficheros necesarios para hacer las
actividades de esta parte del libro. Así, existe una subcarpeta por cada capítulo/aplicación con los
listados de los ejemplos realizados y, en la carpeta Filtros, encontraremos el fichero señal con rui
do.wav necesario para la aplicación 1. Por último, también existe una carpeta denominada Autoe-
valuación donde se encuentran los listados de los programas necesarios para la resolución de los
ejercicios de autoevaluación.
La carpeta LABORATORIOS se encuentra subdividida en tantas subcarpetas como laboratorios
realizados en el libro. Estas carpetas contienen el código fuente utilizado en cada uno de ellos y to
dos los ficheros necesarios.
En las carpetas M PLAB IDE, DSPICWORKS, DSPIC FD LITE, MPLAB C30 y WINPIC800,
pueden encontrarse los programas de instalación de estas herramientas. Todos estos programas son
propiedad de M icrochip y los tiene registrados en todo el mundo. Además las versiones más actua
les de los mismos las puede encontrar en su sitio de Internet www.microchip.com.
275
276 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Es importante instalar esta herramienta antes que el compilador de C MPLAB C30. Para instalar la
herramienta MPLAB IDE, se accederá a dicha carpeta del CD que acompaña al libro y ejecutando
el programa Install_MPLAB_v730b.exe.También se puede obtener la última versión de este soft
ware acccdicndo a la web de Microchip, www.microchip.com.
Una vez iniciada la instalación se debe esperar hasta observar el primer cuadro de diálogo de la
aplicación de instalación. Es conveniente cerrar el resto de aplicaciones abiertas en ese momento.
En este primer cuadro de diálogo pulsamos Next. A continuación hay que aceptar el contrato me
diante la opción / agree y pulsamos de nuevo Next. (Figura AP.2.)
To ir«!al re lin fo«Je*. cfcK Mé«t To ¡Cítal lu a dlfaerA fotts:. d rk Browie end sefey
»wlheí íMk
r.Oeaiociion
C'Wiww« p:oaaro#Ríitt;hp\ Ji . : •
T0 it í t il to lr«> lotee«. Citó-. Newl I o risU to e dEieier> fafdei, cfc* Btowíc and « c c í
w riet foie«.
r Destratan FrfJei.......................
C\Aid-ivo3 ce prosiemaÚtafCChiA
He*>
:-:-:%y¿';-Xvívví
.......
í:*».c/o . “• Hciosoft Photo
Por último, al pinchar en el último cuadro de diálogo de la instalación, el botón Finish, aparece
rá en pantalla un visor de documentación de la em presa Microchip, visor que se puede cerrar para
empezar a trabajar con el MPLAB IDE. (Figura AP.5.)
278 dsPIC. DISEÑO PRÁCTICO DE API ICACIONES
7X oxt-vtfr
O v x x v itv
M-\.\3 ICE 2>: 1153 O cvro C*to» G ì.
M?l A3 ICE USB Cowefter Device Cmttin
I
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 «
r«M-A*J ICE 4K US9 Or-i-.e Driver Cfeen
< 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
M » . .\3 ICE 41: U53 Owvitó Dirv* jn ite ls f n
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
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 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 .
Macchia Cn The Wsb
2 . GOT G e n e ra l P \ti» ilc L ic e n s e
;•V;v,¡svyiv-
Se recuerda una vez más, que la versión del compilador de C MPLAB C30 que distribuye libre
mente Microchip y que se acompaña en este CD, es una versión para estudiantes. Esta versión, pa
sados 60 días tras su evaluación, pierde ciertas funcionalidades pero sigue siendo funcional. En ca
so de que no sea estudiante, debería descargar de la web de Microchip una versión de evaluación de
60 días de esta misma herramienta que trascurrido este tiempo dejará de funcionar.
Para instalar esta herramienta, hay que ejecutar el único programa ejecutable situado en la car
peta MPLAB C30 del CD que acompaña al libro. La instalación es bastante trivial, se deben acep
tar todas las opciones por defecto del programa de instalación y mediante el botón N ext avanzar en
la misma hasta que se muestre un cuadro de diálogo como el de la Figura AP.6. Hay que contestar
Yes y finalizar la instalación pulsando el botón Finish.
INSTALACIÓN DE DSPICWORKS
Para instalar esta herramienta, se ejecuta el programa setup.exe de la carpeta DSP/CW ORKS del CD
que acompaña el libro. La instalación resulta trivial, simplemente se acepta todo sobre las distintas
opciones que por defecto marca el programa, pulsando el botón Next, hasta llegar a la última pan
talla donde se pulsa el botón Finish, tras lo cual habrá concluido la instalación de esta aplicación.
Para instalar esta herramienta se ejecuta el programa setup.exe de la caipeta dsPIC Fd Lite del CD
que acompaña el libro.
APÉNDICE A: CONTENIDO DEL CD E INSTALACIÓN DE LAS HERRAMIENTAS DE TRABAJO 279
I ,a instalación resulta trivial, simplemente se acepta todo sobre las distintas opciones que por de
fecto marca el programa, pulsando el botón Next, hasta llegar a la última pantalla donde al pulsar el
botón Finish, se concluye la instalación de esta aplicación.
La instalación del W inPic800 es bastante simple, basta con copiar la carpeta WinPicSOO en el disco
duro, seleccionar todos los ficheros copiados y, mediante el botón derecho y la opción Propiedades,
desmarcar la opción de Sólo lectura. Tras esto bastará con ejecutar directamente el programa Win-
Pic800.exe para tenerlo funcionando. Este programa de Siseo Benach es de libre distribución y pue
de encontrarse actualizado en http://perso.wanadoo.es/siscobf/winpic800.htm.
ejercicios
de autoevaluación
SOLUCIONES APLICACIÓN 0
2. ¿ Es necesaria en esta segunda parte alguna placa de desarrollo o hardware basado en dsP lC ?
No, sólo es necesario un PC y el software del CD que acompaña al libro para realizar todos
los ejercicios y simulaciones planteados.
4. ¿Con qué herramienta se debe tener especial cuidado al instalarla? ¿por qué?
Debemos tener especial cuidado con la instalación del compilador de lenguaje C MPLAB C30,
ya que es una versión demo y una vez instalado, sólo se puede utilizar de forma gratuita duran
te 60 días.
SOLUCIONES APLICACIÓN 1
281
282 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
Un ejemplo de aplicación se puede observar en los microfíltros que se conectan a las líneas
de teléfono cuando se utiliza ADSL para transmitir por el mismo canal voz y datos.
2. Defina los cuatro tipos de filtros esenciales que permite diseñar la herramienta dsPIC Fd Lite.
Filtro paso bajo: Es aquel que permite el paso de frecuencias bajas y atenúa frecuencias
mayores.
Filtro paso alto: Es el que permite el paso de frecuencias desde una frecuencia de corte de
terminada hacia arriba, sin que exista un límite superior especificado.
Filtro paso banda: Permite el paso de componentes frecuenciales contenidos en un determi
nado rango de frecuencias, comprendido entre una frecuencia de corte superior y otra infe
rior, atenuando el resto.
Filtro elimina banda: Es el que dificulta el paso de componentes frecuenciales contenidos
en un determinado rango de frecuencias comprendido entre una frecuencia de corte supe
rior y otra inferior.
3. En el ejemplo propuesto, ¿para qué sirven los parámetros Stopband Ripple (dB) y Pashhand
Ripple (dB)?
Definen el porcentaje de la señal original que debe eliminarse para la banda eliminada (stop
band ripple) y el porcentaje de la señal original que puede eliminarse como máximo de la se
ñal original en el rango de frecuencias fuera de la banda seleccionada (passband ripple).
Ejercicio
Si no se consigue, puede que estos datos le sean de ayuda, aunque quizás desee primero inten
tarlo sin pistas. Características del filtro:
SOLUCIONES APLICACIÓN 2
Ejercicio:
Resuelto en el Capítulo 4.
SOLUCIONES APLICACIÓN 3
/. ¿Q ué depuradores soporta la herramienta M PLAB IDE? ¿Dónde puedo observar las limi
taciones del simulador software?
Soporta tanto depuradores software como el MPLAB SIM, o depuradores hardware como la
herramienta MPLAB ICD2.
Para ver las limitaciones del simulador se puede acceder al menú menú Debugger -> Set-
tings... y acceder a la pestaña Limitations.
2. ¿Q uépasa cuando se ejecuta nuestro programa paso a paso? ¿Cuándo se ejecutan las ins
trucciones del código fuente?
Al ejecutar el programa paso a paso la primera instrucción que se ejecuta no es la que se ha
escrito en el fichero fuente, sino las que se han añadido en los ficheros del proyecto que con
tienen las rutinas de reset, etc. Para poder ver la ejecución del código más rápidamente se es
tablece un punto de ruptura en la primera línea de programa y se ejecute el mismo. Así, tras
ejecutar esas rutinas de inicialización, el programa se detendrá en la primera línea de código
y se podrá ver su ejecución paso a paso.
284 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
3. ¿Cómo se puede observar con el simulador el número de ciclos que tarda en ejecutarse una
instrucción?
Mediante la opción Debugger -> StopWatch se observa el número de ciclos y el tiempo trans
currido entre distintos puntos del programa,
5. ¿Mediante qué opción del menú se podría visualizar parte de la memoria de datos EE
PROM? ¿Podemos desde el MPLAB IDE escribir en ella?
Mediante la opción del menú View-> EEPROM se puede leer y escribir en la zona de la me
moria de datos EEPROM.
E jercicios
:AUTOEVALUACIÓN
•APLICACIÓN 3.1.
-.CONTANDO LOS CICLOS DE INSTRUCCIÓN
;EL PROGRAMA VA SUMANDO I A W L HASTA
;LLEGAR AL VALOR DE WO QUE LO INICIAMOS
;CON EL VALOR OxOOFF
.global _main
.text
mam:
MOV #OxOOFF,WO ;INICIALIZAMOS W0=0xü0FF
MOV #0x0000, W1 ; 1N1CIALIZAMOS W 1=0x0000
SUMA:
ADD W ) ,#0x0001, W l ;SUMAMOS 1 A W1
CPSEQ W0,W1 ;SI SON IGUALES W 0Y W 1 SALTA
;LA SIGUIENTE INSTRUCCIÓN GOTO
GOTO SUMA •VOLVEMOS A SUMAR
FIN:
NOP iFINÁL. W0 Y W1 SON IGUALES
.end
APÉNDICE B: SOLUCIONES A LOS EJERCICIOS DF AUTOEVALUACIÓN 285
Con la prim era instrucción MOV, el registro WREGO se inicializa con el valor OxOOFF.
Con la siguiente MOV, W1 toma el valor 0. El programa pasa a continuación a un bucle
que se repetirá siempre hasta que W 0 y W1 sean iguales. Ya que mientras no sean iguales
se repetirá siem pre la instrucción ADD que suma uno a W l y la instrucción de salto in
condicional GOTO SUMA. Sin embargo, cuando los dos datos sean iguales, la instrucción
CPSEQ hará que la instrucción GOTO SUMA no se ejecute y por tanto se llegue al final
del programa.
Al simular el program a paso a paso, mediante la opción del menú D ebugger->Síopwatch,
se puede observar el número de ciclos de instrucción ejecutados en cada momento. Así, se
puede deducir fácilmente el número de ciclos de instrucción necesarios al ejecutar cada una
de las instrucciones anteriores. Dicho número de ciclos de instrucción se recoge en la si
guiente tabla:
í In s tru c c ió n N ° C ic lo s de in s tru c c ió n
MOV 1
ADD J_
CPSÉQ 1
GOTO 2
• Confeccione un programa en lenguaje C que le perm ita observar cómo cambia el bit de aca
rreo de la palabra de estado.
La solución más rápida para observar el acarreo es colocar en un registro como WREGO el
valor máximo que puede contener y sumarle 1.
// Aplicación 3.2
// Programa en C para la observación
// del bit de acarreo.
#include ,'p3Ü 013.h"
int niain(void)
{
WREGO = OxFFFF; //Inicializamos WREGO a 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 APLICACIÓN 4
normal mente, para realizar una instrucción condicional tipo IF, suele colocarse una instruc
ción de salto incondicional tras la instrucción de salto condicional. Con lo que se consigue
que mientras la condición no sea cierta, el programa salte a la etiqueta de la segunda instruc
ción y, por el contrario, cuando la condición sea cierta, entonces el programa siga la secuen
cia de instrucciones siguientes.
Ejercicios
b, Xn
0x0001 OxOOFF
0x0003 0x0005
0x0007 0x0002
0x0001 OxOOOF
En el caso de este ejercicio, para su resolución 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 instrucción MPY, y para la resta de los siguien
tes coeficientes, usaremos la instrucción MSC de multiplicación y resta.
APÉNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVALUACIÓN 287
SOLUCIONES APLIACIÓN 5
I. ¿ Cuántos bytes como mínimo se deben grabar cuando se realiza una operación de grabación
de memoria FLASH de programa?
Como mínimo se deben grabar 32 instrucciones o posiciones de memoria, las cuales tienen
cada una 3 bytes. Luego el número mínimo de bytes a grabar mediante esta operación es de
96 bytes.
288 dsPIC DISEÑO PRÁCTICO DF APLICACIONES
Ejercicio:
A continuación cree un programa que, leyendo esos datos de la sección de datos del progra
m a, grabe ese programa en la m em oria FLASH de program a a p a rtir de la dirección
0x000300.
Al simular el programa que acompaña al enunciado del ejercicio, se pueden observar los có
digos de operación correspondientes a las instrucciones citadas, mediante la ventana Program
Memory. En la Figura BP.2 se puede observar el código correspondiente.
A sí el código que el programa debe grabar en la memoria de programa, deberán ser los si
guientes 6 bytes:
20 00 21 40 00 01
El código fuente correspondiente al programa que graba estos 6 bytes se encuentra desarro
llado en lenguaje C.
// PROGRAMA grabaprograma
// Este programa escribe el código
#include Mp30f40l3.h''
APÉNDICF B: SOLUCIONES A LOS E)ERCICIOS DE AUTOEVALUACIÓN 289
.MPLAB IDE v7 .2 0
H a O it y « » Erojeil teOjyj* PiOYifwet Tocfc Configure W ndm H *
i ü G Í W fe Q 3 M f i Cf I? U B> ( • : $ ÉJ C hedcsum : 0x6814 | t II M
1 1 ¿ i Uí l es» | OpCOCJC | S is a js r m n ly
20S OD198 5A4000 BGGCrvctíBR •
i 206 0019A 7EOOOO re s e t ____________
int secuenciagrabacionQ
// Esta función escribe la secuencia de grabación
// tanto para borrado corno para grabación
¡¡■Y- * * * > ; : * -+ ** *
// Programa principal
j[* * * # * * * * * ¿Je* * * + * *
int main(void)
//SEGUNDA INSTRUCCION
WREG2 = 0x0001; //Escribimos los 3 bytes 400001 correspondientes
WRRG4 = 0x0040; //a la instrucción ADD
WREG0 = 0x302; //Apuntamos al desplazamiento dentro de la página
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 ii’"!f"v>'<ó/
WREG2 = 0x11J ];
WREG4 = 0x0011;
WREG0 = 0x300 + (a-l)*2:
asm f’TBLWTL W2, [W0]"); //Escribimos en el reg el cont. de W4
asmfTBLW TH W4}|W0++],,);
i
NVMCON = 0x4001; //Configuramos NVMCON para grabado EEPROM
a = sccucnciagrabacion(); //Ejecutamos secuencia borrado/grabacion
while(NV MC O Nb it s.W R == 1); //Esperamos al bit WR de NVMCON sea 0
return 0;
Tras simular el programa, puede observarse en la Figura BP.3 la ventana Program Memory
con el código correspondiente a las dos instrucciones ya grabado.
Fd» ¡pew f ro j-tt DjsUíW»- P rcv r« T iiw Iccfc Q orftyje '£ c¿km Hejp
■'C^^iwuwú:oritf;S,fl{ir«^yioúó^^^.cunwntiw\gra|>aprograi.M\afát>«pf»t'r
«D.EC2 - 0 x 0 0 0 1 .
VUC( - 0x0043.
VPXCO - 0x 3 0 2 ,
M B t 't B L D l b V 2 , |OOJ / / í » e r ib i» Q í * n *1 re g n rs re e l c c ik . de V i
O ím ’ TlLÜTH Y 1JO O + + 1'
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 ' ea e l r c f f i í r r o e l c o n c . de
» .o í- T B W T H K . I W m ;
I»!
M °lÁasíf d tK C » H 0 1 3 oab.saa IPO á ctiavi r
SOLUCIONES APLICACIÓN 6
y con el lenguaje C:
yv' fifigg&ggagg»»»
..... Visual
' IO.UWInitial izationíV
i l i i l i !w ^w *'\v>íí:víi
3. ¿Cómo se puede sincronizar la velocidad con la que trabaja la herramienta Visual Initiali-
zer y el 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 opción Debugger->Settings y bajo la pestaña Osc/Trace se puede esta
blecer la velocidad del oscilador. Por otro lado, para acceder a configurar la velocidad de la
herramienta Visual Initializer, se debe hacer doble clic sobre el icono Oscillator que se en
cuentra en la representación gráfica del controlador.
Ejercicio
• Cree y simule un programa que cambie de estado un led, siempre que transcurra un minuto de
tiempo, o bien se active por flanco ascendente una señal conectada a un pin del controlador
La solución implementada va a contar 60 segundos. Es decir, usando la misma inicialización
del ejemplo semáforo del Capítulo 5 y siguiendo los pasos detallados en ese capítulo se con
sigue inicializar los periféricos utilizados para contar 1 segundo. En la rutina de atención a la
interrupción del temporizador contaremos 60 llamadas y así se obtiene una temporización de
1 minuto. En esta inicialización tan sólo se debe cambiar la configuración de la interrupción
INTO y sustituir el flanco ascendente por flanco descendente.
292 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
#include "p30f4013.h"
//Programa Semáforo en lenguaje C
int segundos = 0;
//Esta función atiende a la interrupción del temporizador
void _attribute (( interrupt )) _T 1Interrupt(void)
í
JFSObits.TÍIF = 0; //Borramos el flag de la interrupción
segundos = segundos +1; //Sumamos un segundo
if (segundos ==: 60) //Cuando llegamos a 60 segundos, cambiamos semáforo
{
if (PORTDbits.RDO — 1) //Si el semáforo está a rojo
PORTD = 2;
else //lo ponemos en verde y viceversa
PORTD = 1;
segundos = 0; //Volvemos a contar un minuto,
i
i
//Función que atiende a la interrupción extema INTO
void attribute (( interrupt )) _INTOInterrupt(void)
{
IFSObits.INTOIF = 0; //Borramos el flag de la interrupción
PORTD = 1; //Ponemos en rojo el semáforo.
//Programa principal
En la Figura BP.4 se puede observar el resultado del programa simulado en el que se apre
cia cómo se cambia el semáforo después de haber pasado un minuto de tiempo.
SOLUCIONES APLICACIÓN 7
• Complete la tabla con los valores de OC1 para distintos valores de TIMER2 en función de
los parámetros elegidos en el Apartado A6.6
APÉNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVAI UACIÓN 293
TIMER2 OC1
OxOOFF 0
0x0100 0
0x0101 1
0x0102 1
0x0103 1
0x0109 1
0x0 JOA 1
0x0101i 0
0 x0 10C 0
2. ¿ Qué significa que la resolución del conversor analógico digital sea de 12 bits?
Significa que cuando se muestrea un dato de la señal original, se puede medir con una pre
cisión/resolución igual al resultado de dividir la diferencia entre las señales de referencia
entre 2 12.
Así, por ejemplo, si la diferencia entre las señales de referencia es de 5 voltios, el conversor
digital a analógico podrá diferenciar entre valores de 5/212 = 0,001220703125 voltios.
294 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
5. ¿ Cómo puede configurar el módulo U ARTpara una comunicación a 2400 baudios, 8 bits de
datos y uno de parada ?
Mediante la herramienta Visual Initializer, colocando en la velocidad Baud Rate 2400 bps,
Data bits 8 y Stop bits 1.
E je rcicio :
D irección Contenido
7FFC0Q 0x4F48
7FFC02 0 x414C
A continuación, cree un programa en ensamblador que transmita por el puerto serie el con
tenido de esas direcciones de memoria. Simúlelo y descubra el mensaje enviado.
Tras inicial izar el módulo UART con las características predefinidas, el código correspon
diente al programa será el siguiente:
.global _main
.include "p.WiOB.inc'’
.text
_main:
• ‘ ; /;;;!£
CALL _VisualInitialization
MOV #tblpage(#Ox7FFCO()),WO ;Movemos pag de la dir. a tblpag
MOV \V0,TBLPAG
MOV #tbloffset(#0x7FFC00),W0 ;E1 desplazamiento a WO
; Leemos el dato EEPROM
MOV W0.W1
TBLRDL |\V1]AV0 ;Cargamos en W4 el dato leído
cali MandaCaracter ; En caso contrario escribe el carácter
ADD W L# 1,W 1
TBLRDL [\Vt|,W0 ;Cargamos en W4 el dato leído
cali MandaCaracter : En caso contrario escribe el carácter
ADD W 1,# LW 1
TBLRDL [W1],W0 ;Cargamos en W4 el dato leído
cali MandaCaracter ; En caso contrailo escribe el carácter
APÉNDICE B: SOLUCIONES A LOS EJERCICIOS DE AUTOEVALUACIÓN 295
ADD WI,#1.W1
TBLRDL | W 1JAVO
CALL MandaCaracter
GOTO Fin
MandaCaracter:
btss U 1STA,#TRMT ; Espera a poder transmitir
; Bit UTXBF de U1STA
bra MandaCaracter ; Si no puede transmitir espera
mov WO.UITXRP'G : hscribe el carácter en el buffer TX
retürn ; retorna a la llamada
Fin:
nop :Fin del programa
.end
I ras habilitar en el simulador el módulo UART para obtener la salida por la pantalla se ob
tendrá el mensaje secreto en la pantalla de salida del simulador como puede apreciarse en la
Figura BP.5.
• Programe y simule un programa en lenguaje C, de forma que se lleve a cabo una conversión
analógico digital por el pin ANO, con tensión de referencia en VREFH y VREFL, utilizando
el temporizado r interno con un período de mué sí reo de 0,002 micro segundos, con una velo
cidad de reloj de muestreo de 30 * .5 * .Tcy deform a que cada 5 muestreos se genere una in
terrupción y obtenga la media de esos 5 valores.
Al tratarse de un periférico tan veloz, el calcular esa media y tomar ese valor como el valor
resultado, nos va a perm itir minimizar el riesgo producido por la entrada de n u d o en nues
tro muestreo.
296 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Tras inicializar el módulo ADC, el código correspondiente a la solución del ejercicio será
el siguiente:
Laboratorio 3. O P T IM IZ A N D O LA CONVERSIÓN A N A LÓ G IC O -D IG IT A L
Laboratorio 6. D IS E Ñ A N D O FILTROS................................................................................................367
El sistema
de desarrollo
PIC School
L0.1. IN T R O D U C C IÓ N
Cada parte tiene una importancia fundamental para adquirir los conocimientos teórico-prácticos
necesarios para diseñar aplicaciones con dsPIC, pero la última en la que se maneja un modelo con
creto de dsPIC al que se conectan diversos periféricos y dispositivos y se ejecutan programas en
tiempo real es imprescindible para que el lector ponga “manos a la obra” y comience a diseñar y
construir proyectos reales.
Microchip realiza un gran esfuerzo para poner a disposición de los usuarios de los productos que
fabrica un conjunto de programas y herramientas que faciliten el diseño de las aplicaciones. Así, go
za de un gran prestigio el entorno de desarrollo MPLAB, cuya última versión siempre se puede ba
jar libremente del sitio de Microchip en Internet, y que constituye la plataforma que soporta la ma
yor parte de las etapas del diseño y la depuración.
Para cubrir el objetivo eminentemente didáctico de la implcmentación de los proyectos que pro
ponemos en esta parte de la obra se ha seleccionado un equipo desarrollado y comercializado por la
prestigiosa empresa Ingeniería de M icrosistemas Programados (www.microcontroladores.com). Se
trata de un entrenador didáctico universal denominado PIC School que sirve para todo tipo de mi-
crocontroladores PIC así como de periféricos y dispositivos complementarios. Este entrenador, ju n
to con una serie de materiales complementarios para el desarrollo de aplicaciones dsPIC, conforman
la plataforma necesaria para la programación de los distintos laboratorios de esta tercera parte.
El PIC School goza de una enorme flexibilidad porque se basa en un sistema modular con el que
se puede abarcar el aprendizaje de todos los microcontroladores de 8 y 16 bits cncapsuiados con 40
patitas como máximo. Existen m ódulos para los m icrocontroladores PIC12F, PIC16FXXXX,
P1C18FXXXX, PIC24, dsPIC y otros. También hay módulos enfocados a la experimentación de
299
300 dsPIC. DISFÑO PRÁCTICO DF APLICACIONES
dispositivos específicos como el bus CAN, USB, Internet, Bluetooth, etc. Para conseguir esta am
plia gama de aplicaciones, la tarjeta contiene un grabador, fuente de alimentación, numerosos pe
riféricos y recursos que pueden conectarse a cualquier patita del procesador y una tarjeta de mon
taje sin soldadura para añadir otros sensores o complementos que se requiera en cada módulo. Cada
uno de estos módulos contiene el hardware específico para el desarrollo de los experimentos, un tu-
torial didáctico en el que se explica el funcionamiento de los elementos a los que se destina junto a
una colección de proyectos completamente resueltos y comentados y, finalmente un CD con toda
la información y programas necesarios para la implementación de dichos proyectos. Así mismo, en
el CD que acompaña a esta obra, podrá encontrar todos los laboratorios desarrollados en esta ter
cera parte de laboratorios experimentales. (Figura LO. 1)
El entrenador universal PIC School, no solamente sirve para desarrollar los laboratorios de esta
tercera parte de la obra, sino que además funciona com o grabador de distintos PTC y dsPIC y como
sistema de desarrollo en el que los elementos que contiene no están conectados, disponiendo de una
plataforma de ampliación y de adaptadores con los que puede aprender todo tipo de microcontrola-
dores PIC, así como productos relacionados. Hay un módulo para cada producto.
• Permite traba/ar directamente con microcontroladores PIC de 8 bits de las gamas baja, media y al
ta con encapsulados de 8, 18, 28 y 40 contactos pudiendo incluso, con ayuda de un adaptador
dar soporte a los dispositivos de 16 bits y a los potentes dsPIC. Además dispone de un oscilador
de cuarzo que permite trabajar a diferentes frecuencias, permitiendo también utilizar el oscilador
RC incluido en algunos microcontroladores. Asimismo, y mediante un módulo adaptador, también
permite la ejecución, depuración y grabación de controladores digitales de señales dsPIC.
LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 3 01
• Dispone de un amplio y representativo número de periféricos, con la ventaja que ninguno de ellos
se encuentra conectado de forma predeterminada a las líneas de E/S del microcontrolador. Es el
propio usuario quien; mediante un sencillo cableado sin soldadura, conecta y asocia ios distintos
periféricos á esas líneas de E/S según lo requiéra la aplicación. Esto permite tener un contacto más
directo con él hardware y un mayor control del mismo. Además dispone de una amplia superficie
de BOARD en la cual se pueden conectar, sin soldadura, los periféricos necesarios para un pro
yecto que no estén incluidos en el entrenador.
• Existe una serie de módulos de prácticas opcionales en donde se van tratando diferentes temas
réíacíon¿idos con los microcontroladores: comunicaciones, Bluetooth, USB, CAN, R.F., control de
motores, periféricos avanzados y un largo etcétera. En esos módulos también so describen apli
caciones que permítan conocer las características de los PIC desde la sencilla familia 12FXXX has
ta ¡os potentes 18FXXXX. Cada módulo consta de un conjunto de prácticas y todos los compo
nentes necesarios para implcmentarlas.
• El.PIC School tiene tres modos de operación diferentes que se seleccionan fácilmente mediante un
conmutador. El modo "RUN” se emplea cuando el dispositivo está grabado con el programa de
aplicación a ejecutar. Todas las líneas de E/S están disponibles para el control de periféricos. El
modo PC " se émpJé'a durante los ciclos de grabación del dispositivo. Esta grabación se realiza
mediante el canal serio de un PC dotado del software de grabación correspondiente (WinPic 800,
IcProg, etc:.). Se suministra el cable de conexión con el PC. Finalmente el modo ICSP” permite co
nectar el laboratorio PIC School con otros grabadores externos dotados de las señales ICSP o bien
con depuradores en circuito como el ICD2 de Microchip. De esta forma es posible la emula-
cíón/depuración/grabación del dispositivo contenido en el laboratorio. También existe un adapta
dor opcional para conectar PIC School al puerto USB del PC.
A la hora de seleccionar los periféricos incluidos en este potente entrenador, cabe destacar que
se han elegido los más empleados que se distribuyen en las siguientes categorías.
Periféricos de entrada
• Dos potenciómetros capaces de simular cualquier entrada analógica.
• Cuatro interruptores deslizantes y cuatro pulsadores para soportar las entradas digitales.
• Un generador lógico capaz de generar ondas simétricas cuadradas de 1Hz, 10Hz, 100Hz y 1KHz
indicado especialmente para aquellas aplicaciones que necesitan controlar tiempos o para aplica
ciones en las que se emplean los módulos de captura y comparación (CCP) incluidos en algunos
. ... microcontroladores.
• Un teclado matricíaí de 4x4 teclas considerado el dispositivo de entrada por excelencia en aplica
ciones microelectrónicas.
Periféricos de salida
m Ochó diodos LED que permiten monitorizar el estado de las líneas a las que se conectan.
• Un dríver de cuatro canales capaz de proporcionar salidas de alta corriente permitiendo la conexión
de motores, lámparas incandescentes, relés, etc.
• Una pantalla LCD de 2x16 caracteres que permite la representación de mensajes mediante letras,
números o símbolos especiales.
Periféricos de comunicación
% Interfaz serie. RS232 que permite adaptar los niveles lógicos del microcontrolador a niveles RS232.
• Interfaz CAN, que convierte las señales del microcontrolador según las especificaciones de este
BUS tan utilizado en redes sensoriales.
m Conector RJ11, qué permite la conexión de dispositivos I2C, iButton, RS485, etc.
• Conector USB, que permíte la conexión con cualquier dispositivo estándar existente en el mercado.
302 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
De esta forma, gracias a esta nueva herramienta, se solventan las cuatro grandes limitaciones
existentes en el resto de entrenadores comerciales para microcontroladores:
1.a Es un entrenador válido para todas las gamas de microcontroladores PIC, permitiendo al
usuario seleccionar siempre aquel dispositivo que más se ajuste a las necesidades específicas
de cada proyecto. Pudiendo, además, seleccionar la frecuencia y tipo de reloj más adecuados
en cada caso.
2.a Dispone de los periféricos más universales utilizados en la microelectrónica, permitiendo que
la conexión entre estos y el microcontrolador se realice a medida de cada experimento. Ade
más, gracias a la board que posee, cualquier dispositivo adicional se puede incorporar con fa
cilidad. De esta forma se puede obtener el primer prototipo funcional de un proyecto en el mí
nimo tiempo y sin tener que realizar ni una soldadura.
3.a Gracias a sus tres modos de funcionam iento, el PIC School se adapta a todas las etapas
que conlleva el desarrollo de una aplicación m icroelectrónica, perm itiendo la emulación,
prueba y grabación de m icrocontroladores PIC cam biando sólo la posición de un conm u
tador. A sí se evita la utilización de varios dispositivos que realicen cada una de esas
tareas.
4.a Dada la gran cantidad de módulos específicos para el aprendizaje práctico de microcontrola
dores, dsPIC y productos novedosos, es posible conseguir en poco tiempo el conocimiento y
la experiencia para desarrollar cualquier aplicación real.
Encargada de obtener la tensión general de +5Vcc con la que se alimenta el laboratorio PIC
School, todos los periféricos de la misma y el procesador empleado. (Figura LO.2.)
API
U1
CM 1 SW3 D1 ■JA7.S05/TQ
D 3-15VDC
ON /O FF
-W
1N4007
IN OUT
R3
-O +5VCC
330
AP?
3
A
c2 :
C 28 100n D3
lOOuF Vcc ON AP3
El esquema eléctrico de la fuente se muestra en la Figura L0.3. A través del conector CN1 se
aplica una tensión de 9 a 15VDC procedente de un alimcntador estándar con el positivo al centro.
El interruptor SW3 conecta el sistema. El diodo DI evita la polarización inversa y con ello los da
ños que se pudieran ocasionar al equipo. El regulador U 1 estabiliza la tensión a +5 Vcc con 1A má
ximo. Dicha tensión, junto con GND están disponibles en el conector A PI y AP2 respectivamente
para alimentar a los circuitos y prototipos del usuario. En el conector AP3 está disponible también
la tensión de entrada sin estabilizar +Vin para aquellos circuitos que la requieran. El diodo led D3
indica la presencia de tensión +5Vcc.
LO.3.2. El o s c ila d o r
+ 5 V cc 46 V c c
El dispositivo XI contiene en su interior un oscilador preciso controlado por cuarzo y todo ello
en una cápsula metálica en formato DIP8. Este oscilador, también llamado “Canned O scillator”, se
puede adquirir para diferentes frecuencias según las necesidades. Basta simplemente cambiar uno
por otro para que la aplicación se ejecute a más o menos velocidad.
Es la sección mas importante del entrenador PIC School y donde se instala el dispositivo PTC con
el que se va a trabajar. Básicamente consta de cuatro zócalos donde se pueden insertar los disposi
tivos de 8, 18, 28 y 40 patitas tal y como se muestra en la fotografía de la Figura 1.7.
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.
Están formadas por dos potenciómetros, tal y como se muestra en la fotografía de la Figura L0.6.
El esquema eléctrico de las entradas analógicas se m uestra en la Figura L0.7. Las líneas de los
potenciómetros son directamente accesibles desde el bloque de conexión A P I6 correspondiente y
se les puede conectar cualquier tipo de circuito eléctrico analógico.
A P 16
ENTRADAS A N A LO G IC AS
La Figura L0.9 muestra el esquema eléctrico de estas ocho entradas cuyas señales están dispo
nibles en el bloque de conexiones A P I8. Las señales E0-E3 proceden de los cuatro interruptores
306 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
deslizantes. Cuando estos están abiertos (hacia arriba) proporcionan nivel lógico “ 1” gracias a las
resistencias pull-up de RP2. Cuando cualquiera de ellos se cierra (hacia abajo) se conecta directa
mente con la señal GND proporcionando nivel “0"’.
Por otra parte, los cuatro pulsadores en situación de reposo permanecen abiertos generando ni
vel lógico “ 1” gracias a las resistencias pull-up contenidas en RP3. Cuando se accionan se cierra el
circuito con GND y se genera nivel “0”.
Se muestra en la Figura LO. 10 y está basado en el dispositivo SYM10AA. Es capaz de generar on
das cuadradas simétricas a frecuencias de 1Hz, 10Hz, 100Hz y lKHz. Está especialmente indicado
para aplicaciones de control de tiempos y también para evaluar y ensayar con los módulos de cap
tura y comparación (CCP) contenidos en ciertos modelos de dispositivos PIC.
El esquema eléctrico de dicho generador es el que proporciona su propio fabricante y se mues
tra en la Figura LO. 1J. Puede servir como base para múltiples aplicaciones.
La señal de salida se obtiene mediante el bloque de conexiones AP8. Por defecto la frecuencia
de salida es siempre de 1Hz. Mediante el pulsador SW 2 se va seleccionando secuencialmente la fre
cuencia a 10Hz, 100Hz, IKHz y vuelta a empezar con 1Hz. Los leds D5-D8 monitorizan la fre
cuencia de salida en todo momento.
LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 307
F R E Q .S E L E C ^ SW 2
i---- o o— R17
+5VC C
U6
R 23 470
2 D5
+5VOCO- SEL 1Hz
10 K 7
10HZ
/ y “
6
VDD 1 00H z 07 1A
022 : 5 08 L rf
lOOn 1KHZ
3
GND OUT
S Y M -1 0
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 periférico de entrada por excelencia que va a permitir introducir todo ti
po de datos para su posterior procesamiento.
El control del teclado supone el tener que aprender y utilizar una serie de técnicas y conceptos
que se emplean en las más diversas aplicaciones. M anejar conceptos tales como barrido del tecla
do, led a pulsada, rebotes, interrupción con cada pulsación, wake up con cada pulsación, ctc.? da
rán al usuario la posibilidad de acometer ambiciosos proyectos de carácter profesional.
Un dato relevante a tener en cuenta es que a pesar de disponer de 16 teclas, tan sólo son necesa
rias 8 líneas de E/S del microcontrolador para su control. Ello es debido a su distribución matricial.
La Figura 1.17 muestra el teclado asociado al bloque de conexiones AP21. En dicha figura también
se puede apreciar la relación entre fila-columna y la tecla asociada. 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 líneas del teclado se puede conectar a cualquier puerta del PIC,
pero se sugiere conectarlo a las líneas de la puerta B (como se muestra en la Figura LO. 13). Esto se
debe a que la mencionada puerta tiene, en la mayoría de los dispositivos PTC, un par de característi
cas muy interesantes para el control de un teclado: resistencias pull-up internas para las líneas de en
trada y posibilidad de interrupción cuando cualquiera de esas líneas de entrada cambie de estado.
SW5
Las cuatro filas F0-F3 de la Figura LO. 13 se conectan a RB4-RB7 y las cuatro columnas C0-C3
se conectan con las líneas RB0-RB3. La intersección fila-columna da lugar a seleccionar una tecla
en concreto. Es decir, si se pulsa por ejemplo la tecla 4, supone unir eléctricamente la fila F1 con la
columna C0, que es tanto como decir que las líneas RBO y RB5 del PIC se han unido.
La rutina software encargada de explorar el teclado tiene que determinar qué tecla se ha pulsado. Pa
ra ello, por ejemplo, se configuran las líneas RB0-RB3 (las columnas) como salidas y RB4-RB7 (las fi
las) como entradas. Secuencialmente se van activando cada una de las columnas al tiempo que se lee el
estado de las filas. Cuando se detecta que una fila está activa es porque se pulsó una tecla. Basta cono
cer qué columna se activó en ese momento para sacar la relación fila-columna que define a dicha tecla.
Esta tarea, conocida como barrido de teclado, ha de repetirse de forma constante y periódica. De esta
manera y, a la velocidad de trabajo del PIC, será posible detectar una pulsación en cualquier momento.
Haciendo uso de algunas de las prestaciones que ofrecen los dispositivos PIC en la puerta B, es po
sible desarrollar rutinas más sofisticadas y eficaces. Efectivamente, programando los registros opor
tunos de un PTC podemos hacer que las entradas RB4-RB7 (las filas) se conecten a las resistencias
pull-up internas que hacen que esas líneas, en estado de reposo, estén a nivel “ 1”. Por otra parte, tam
bién podemos habilitar la interrupción por cambio de estado de cualquiera de las entradas de la puer
ta B. En este momento las salidas RB0-RB3 (columnas) se ponen a nivel “0” y esta situación de re
poso se mantiene mientras no se pulse ninguna tecla. El microcontrolador puede dedicarse a otras
tareas o quedarse en standby reduciendo el consumo hasta que ocurra un suceso como puede ser la pul-
LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 309
saeión de cualquier tecla. Efectivamente, puesto que RB0-RB3 (columnas) están a “0” y RB4-RB7 (fi
las) están a “ 1” gracias a las resistencias pull-up internas, cuando se pulse cualquier tecla se produce
una interrupción por cambio de estado en cualquiera de las líneas RB4-RB7 (filas). Esa interrupción
provoca la inmediata atención del microcontrolador que pasa a ejecutar la rutina que se encargará de
averiguar qué tecla se pulsó.
Están formadas por 8 diodos led (S0-S7) que sirven para monitorizar el nivel lógico de las líneas a
las que están conectados.
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 líneas
del microcontrolador. Estas líneas son capaces de suministrar 25mA por lo que no es necesario ningún
circuito adicional de amplificación excepto las resistencias de absorción contenidas en el pack RPl.
RP1 SIL
330
f,0 0 0 :0 (/! 0 0 W i n CO
-J rr> -J! & CO (O — O
SALIDAS DIGITALES
Un nivel lógico “ 1” por cualquiera de esas líneas provoca el encendido del led correspondiente.
Un nivel “0” lo apaga. Es una forma muy simple y económica de reflejar el estado binario de las li
ncas de salida, donde cada led simula el estado de la carga que se desea controlar.
El laboratorio PIC School dispone de un driver de 4 canales soportado por el dispositivo L293D y
capaz de proporcionar salidas de alta corriente.
■'
DRJVER 4 CANALES Ó.6A
En la Figura LO. 17 se puede apreciar el esquema eléctrico. El dispositivo integrado L293D dis
pone de 4 canales amplificadores o drivers capaces de proporcionar salidas de hasta 0,6 A a 36V ca
da uno, a partir de señales TTL de baja corriente.
Mediante el conector AP6 se conectan las señales E1-E4 a amplificar y que proceden de sendas
salidas del microcontrolador. El conector CN7 está formado por un conjunto de bomas o ciernas
donde se obtienen las salidas S1-S4 debidamente amplificadas y se realizan las conexiones con las
cargas a controlar.
Mediante el jum per JP8 se selecciona la tensión de salida para las cargas. En la posición l -2 (por
defecto) dicha tensión es de +5Vcc. En la posición 2-3 la tensión que alimenta a las cargas se apli
ca externamente a través de la bom a +VM.
Mediante estas salidas de alta corriente el laboratorio PIC School puede controlar cargas de consu
mo elevado, como pueden ser lámparas incandescentes, relés, motores DC, motores paso a paso, etc.
Cabe indicar que el dispositivo L293D integra en su interior sendos diodos para la absorción de
com entes inversas provocadas por cargas inductivas.
Su ubicación dentro del laboratorio se muestra en la Figura LO. 18. Consiste en el clásico interfaz se
rie que permite adaptar los niveles lógicos del microcontrolador a niveles RS-232.
LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 311
SAUOAS D E L D RIVER
CN7 CD CD CD © CD CP
JP8
13
GND
fffl
12 VDD
GND U5
GND L293D 16
VCC -0+ 5V C C
GND
CO *-
2 2
IL lii
■q-
2
CO
2
Oi
2
r-
z
C21
100n
+5VCC O-
AP6
ENTRADAS AL D RIVER
Según el esquema eléctrico 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 señales de transmisión
y recepción (TxD y RxD) así como las de control de flujo CTS y RTS. Estas señales proceden del
microcontrolador. El conector CN5 es un conector DB9 hembra estándar, que permite realizar la co
nexión con el periférico serie. Mediante un led bicolor (D17/D18) se monitoriza todo tipo de trans
misión y/o recepción.
312 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Este interfaz permite realizar todo tipo de comunicaciones serie entre el laboratorio P1C School
y cualquier otro equipo mediante el protocolo estándar RS-232. La velocidad de transferencia irá en
función del tipo de microcontrolador empleado y su velocidad de trabajo.
Se recuerda que algunos dispositivos PTC incorporan en su interior una UART completa que se
encarga de realizar la mayor parte de los procedimientos propios de la comunicación según los pro
tocolos tanto RS-232 como RS-485. En este último caso basta con montar el sencillo circuito de
adaptación correspondiente sobre el módulo board de montaje sin soldadura con que cuenta PIC
School.
CN5
MAX232
U4
RTS 12 13 RTS
T10UT R 11N TxD
RxD
T20UT R2IN CTS
CTS 11
TI IN R 10U T RXD
TxD 10
T2IN R 20U T
C1 + C2+
C1- C2- = j= C18
C17 :
1001 10On INTERFACE RS-232
V+ V-
C15 :
o
O
>
Q
2
O 1 C16 D17 ' r D18
T
100n 10On R O JO fTx)' \ VERDE (Rx)
C19
-XIo *5VCC
10On
AP5
+5VCC
CANAL SERIE
Está compuesto por el dispositivo adaptador MCP2551 que convierte las señales lógicas según las
especificaciones del bus CAN.
El bus CAN permite crear una red con una transferencia de datos muy robusta y fiable entre el mi-
crocontrolador principal (host) y todo tipo de dispositivos o nodos CAN conectados entre sí median
te 2 hilos. Este protocolo es muy empleado por la industria del automóvil y algunos dispositivos PIC
incorporan mediante hardware interno todos los mecanismos necesarios para su implementación.
En la Figura L0.21 se muestra el esquema eléctrico de este interfaz incorporado en el laborato
rio PTC School. Por el conector APIO se proporcionan, procedentes del microcontrolador, las seña
les RxCAN y TxCAN que van a parar al circuito de adaptación MCP2551. Las señales de salida
CANH y CANL se obtienen por el conector CN6 (DB9 macho) y de aquí van a parar a los diferen
tes nodos de la red. El circuito de adaptación es capaz de conectar con hasta 112 nodos. Mediante
el jum per JP1 se habilita o no la resistencia Terminal R2 según qué lugar ocupe el laboratorio en la
red (por defecto habilitada).
Se trata de uno de los periféricos más versátiles e interesantes que dispone el laboratorio PIC School.
Se muestra en la Figura L0.22 y es capaz de visualizar dos líneas de 16 caracteres alfanuméricos
cada una.
Este potente periférico de salida va a permitir representar cualquier tipo de mensaje compuesto
de letras, números y símbolos produciendo además diferentes efectos de visualización como des
plazamientos a izquierda y derecha, parpadeos, scrolls, etc.
1.a transferencia de información entre la pantalla LCD y el microcontrolador se realiza en para
lelo en grupos de 4 u 8 bits de datos y se conecta con las líneas de E/S mediante el conector AP20.
El esquema eléctrico se muestra en la Figura L0.23.
314 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Existe además otro conector, el AP9, donde se conectan las señales que controlan el flujo y ti
po de información que se transfiere. Con la señal RS se determina si la pantalla recibe el código
ASCII del carácter a visualizar (nivel “ 1”) o bien un código de instrucción (nivel “0”). Mediante
la señal RW el m icrocontrolador informa a la pantalla LCD si se va a leer o escribir sobre la mis
ma. Finalmente, con la señal E, se habilita o no a esa pantalla. Cuando esta señal vale “0” la pan
talla queda desconectada, las líneas de datos quedan en alta impedancia. Cuando vale “ 1”, la
pantalla queda habilitada para recibir o mandar datos.
U 8
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.
El esquema por bloques de la Figura L0.26 trata de sintetizar el funcionamiento del circuito de
grabación que dispone el laboratorio PIC School.
Todos los dispositivos PIC disponen de 3 señales para la lectura/grabación de la memoria de pro
grama, la memoria EEPROM para datos y la memoria de configuración. La señal PTCDATA permite
transferir los datos de forma serie y síncrona entre el PIC y el hardware de grabación, la señal PICCLK
transporta la señal de reloj para el sincronismo de los datos y la señal PICMCLR, que inicia los ciclos
de lectura/grabación y aplica la tensión Vpp necesaria. Estas tres señales son además compartidas y
empleadas como líneas de E/S de propósito general una vez que el PIC ha sido grabado.
316 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
Estas tres señales se conectan con tres fuentes diferentes según el modo de operación seleccio
nado mediante el conmutador SW4.
El modo RUN se emplea cuando el dispositivo está grabado. Las tres señales del PIC anterior
mente mencionadas se consideran líneas de E/S de propósito general y están disponibles a través de
los bloques de conexión correspondientes, para ser utilizadas por los periféricos de la aplicación.
En el modo IC SP el laboratorio queda configurado para que el PTC actual insertado se pueda
lccr/grabar a través de las señales que se aplican mediante el conector R J11 (ICSP: In Circuit Se
rial Programing). Estas señales a su vez las debe proporcionar un grabador externo dotado de su
correspondiente software de grabación. Se puede em plear el módulo 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 módulo ICD2 además de grabar dispositivos es capaz de realizar depu
ración en circuito en tiempo real, con ciertos modelos de dispositivos PIC.
En el modo PC la lectura/grabación del PIC se realiza a través de las señales del canal serie de
un PC dotado del correspondiente software de grabación. Un diodo led, el Vpp ON, indica transfe
rencia de datos entre el PC y el laboratorio. Entre los múltiples tipos de software existentes, noso
tros hemos elegido el WinPICBOO y el IcProg, con los que hemos obtenido excelentes resultados.
Ambos programas se pueden descargar y actualizar de forma gratuita en las direcciones http://per-
so.wanadoo.es/siscobf/winpic800.htm y en www.ic-prog.com.
Se reitera una vez más que, aunque un software de grabación determinado grabe múltiples dis
positivos y de diferentes familias, es necesario que también haya compatibilidad a nivel hardware.
Esta compatibilidad viene dada fundamentalmente por la distribución de patillas del dispositivo en
cuestión.
Para aprender a diseñar experimentalmente aplicaciones con la PIC School sobre diferentes dispo
sitivos y temas. Ingeniería de Microsistemas Programados S.L. comercializa diversos módulos
conteniendo los componentes complementarios a los existentes en la PIC School y que requieren los
proyectos que se proponen. Así existen módulos para el aprendizaje de PIC12F, PIC18F, Internet,
Buetooth, USB, etc. El módulo dsPIC, cuyo kit de materiales se muestra en la Figura LO.27 tiene la
LABORATORIO 0: EL SISTEMA DE DESARROLLO PIC School 317
misión de soportar todas las experiencias que se proponen en este libro y muchas más y consta de
los siguientes componentes:
Figura L0.27. Fotografía que muestra los materiales que componen el "módulo dsPIC" para realizarlos
proyectos sobre dsPIC propuestos en este libro y muchos más en la PIC School.
Para comenzar a trabajar con este módulo, deberá montarse el zócalo adaptador de dsPIC incor
porando el dsPIC30F4013 sobre la placa PIC School. Para ello, la placa PIC School dispone de un
único zócalo de 40 pines donde se deberá insertar. En cada aplicación sólo deberá estar insertado el
microcontrolador usado.
El sistema PIC School puede programar un dispositivo dsPIC directamente a través del puerto serie
o emplear el canal ICSP y un programador de M icrochip. En caso de realizar la grabación con un
grabador de Microchip, el software de grabación es el MPLAB, que permite la creación de un pro
yecto, su depuración, simulación y programación en el dispositivo. En caso de que no se disponga
de un sistema de desarrollo de Microchip, es posible grabar los dsPIC directamente con el hardwa
re de grabación que se encuentra en la tarjeta PIC School. Para ello, hay que disponer de un fiche
ro hexadecimal correctamente compilado y de un software de programación que se encargue de
318 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
transferir el fichero desde el ordenador hasta la memoria del dsPIC. Para realizar esta función de
programación, se puede utilizar el software WinPlCSOO. Se trata de un excelente programa de libre
distribución que puede descargarse de Internet y que se encuentra en la carpeta de Software de Pro
gramación del CD del libro.
LO.5 .1 . S o ftw a re W IN P IC 8 0 0
í V/¡nPlc800 3 .5 5 g
Q H S ’
1 S ch ivo Ed cor» Disposavo Çcoftgjf ación Ldo.iv» Ai,uéa
H ! S* i% i? % j p x c r ! © ^ ! 30F4013 j j j I
I "S C ó d ig o ¿2 D a '- u a $ C o n tic i. 4$ C o d .T C S P --- t& $ k M «
0x00000 FFFFFF FFFFFF FFFPFF FFFFFF FFFFFF FFFFFF FFFFFF FFFFFF a
1 H x > T 7 e m îrL F T l
w m P lc 80ü [ H a rd w a re Confìgi.
13 0 V f íí I- jJ • F r r
© •. -m I- sJ " r r r
& ^ J ::•> !- J - . F r r
ìs I e J bì jPlift
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
áfcNvo Ejfaón Dpipasiivo Cur/iga-scbc taioma filuda
G? - ?■ Q ^
[UrrfidBwifec
- W ln P f c 8 0 0 - 3 .5 5 g
E ) @ B
I A rihw o Fdctón f^spcxtfwo ![dem a Ainjdá
G* * © H ^ * i ? % | P IC -x ! © j J 1 30F4013
Figura L0.31. Fichero hexadecimal abierto y listo para ser grabado en el dsPIC.
- WfnPicBOO - 3 .5 5 g
¿ychivo E<toón Expositivo letama A^udo
GÍ ^ §1 Q ^ % S* % \ f? % fpicT 38TID13 ~ 1 3
Q Códicro ,; ^ g P a t o s 9 C onfia. ^ J c íx l.x c s p í ¿ i* ^ M «
ox 7ffco o 1231 3fff FFFF FFFF FFFF FFFF FFFF FFFF
0x7P FC 10 PFPP FPPP FFFF FPPP FPPP FFFF P I’P 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
0X 7FFC 60 FPPP FFFF FFFF FFFF FFFF 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 DVPALÍHÉX
CÍ ~ © 0 ! ^ | I r l” c 30P4Ù13 □
C 2 C Ò d io o 4 -J DOCOO 4 C o n fig . 4 g c © d . IC S P : ¿T" ¿ . & ¿4
- P rin x ry O s c illa r o r - - J id d r c o n f l g -
j 1.512
W HPOL F FTO TXN
wrarPiMMjeíD ICD CanvunÍMticn
P LPOL P7 H C L R E N r GCP ^ BKBUG
17 B O R D I W P H H P IN r GWRP P COE I* * _J FKUC * fKU O _»J
Figura L0.33. Seleccionando la palabra de configuración. Es un paso fundamental para que el progra
ma que se va a programar se ejecute correctamente.
WinPic800
P r o g r a m a r - 3 0 F 4013 Vdd 0
Detectado PIC -> DESCONOCIDO A
Borrando PIC . . .
E rro r . . .
E rro r . . .
..y-
1 OZ |
C an celar P ro g re so f Conforme ;|
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
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 ¡I C o n fir m a r
1
Aplicación de
instrucciones DSP
con entradas
y salidas digitales
L1.1. OBJETIVOS
Esta primera práctica utiliza las entradas y salidas digitales del equipo PIC School y el M otor DSP
de los dsPIC. Los objetivos de la práctica son:
• Realizar el primer programa básico con dsPIC ejecutando correctamente todos los pasos de de
sarrollo de un proyecto, que posteriormente se pueden aplicar a ejercicios mucho más complejos.
• Manejar entradas y salidas digitales y las instrucciones DSP para realizar tareas que serían muy
costosas en un microcontrolador MCU.
Las operaciones básicas que realiza un m icrocontrolador MCU son las sumas, restas y opera
ciones lógicas tipo AND, OR, XOR, etc. Otra limitación importante de las familias clásicas de
microcontroladores de M icrochip es el empleo de registros de 8 bits de datos, lo cual resulta muy
limitado para aquellas aplicaciones que necesitan cálculos matemáticos con valores de m ayor lon
gitud. Como ejemplo, a continuación se muestra la rutina en ensam blador que realiza una opera
ción tipo M ultiplicación de 16 bits con un m icrocontrolador PTC de la familia 16F87x:
323
324 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
BTFSS STATUS,Z
GOTO MULU16LOOP
MOVF TEMPY16_H,F
BTFSS STATUS,Z
GOTO MULU16LOOP
RETURN
ADD 16: MOVF TEMPXJ6,W
ADDWF RESULT 16
BTFSC STATUS,C
INCF RESULT 16_H
MOVF TEMPX16_H,W
ADDWF RESULT 16_H
RETURN
Figura L1.1. Rutina de Multiplicación de 76 bits con un microcontrolador MCU de 8 bits. (Continuación)
Debe tenerse en cuenta que no se trata tan sólo del número de instrucciones, sino que es un bu
cle que se repite hasta 16 veces para llegar a la respuesta final. Es una operación muy costosa para
un microcontrolador.
Sin embargo, en un dsPIC se dispone de instrucciones específicas para realizar operaciones
complejas y una arquitectura que optimiza enormemente el desarrollo de funciones trigonométricas
o logarítmicas en comparación con los microcontroladores. La Figura L1.2 muestra algunas ins
trucciones específicas contempladas en la arquitectura de los dsPIC, en las que se manejan valores
de 40 bit de tamaño. Se las denomina “instrucciones DSP.”
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
"C
CLR
il
ED A = ( x - y)2
LDAC A —A + ( x - y ) 2
*
MAC
x'
II
MAC A - A + x2
MPY A = x* y
MPY.N A = -x * y
MSC A = A- x*y
Figura L1.2. Algunas instrucciones específicas para operaciones algebraicas con los dsPIC.
Este laboratorio trata el manejo de instrucciones DSP. Supongamos que tenemos un robot o un vehícu
lo autónomo que circula por un circuito. Está dotado de dos sensores de ultrasonidos que le indican la
distancia a la que se encuentran las paredes situadas a la derecha e izquierda de la pista. El objetivo es
seguir el recorrido por el centro de la pista. Realizando una simple resta entre la distancia de los dos sen
sores, se puede conocer si el robot está situado más cerca de la pared izquierda que de la derecha, pero
además, gracias a esta operación es posible calcular este error de manera exponencial, de forma que se
pudiera generar la aceleración necesaria en las ruedas del vehículo para corregir el error de posición.
LABORATORIO 1: APLICACIÓN DE INSTRUCCIONES DSP CON ENTRADAS Y SALIDAS... 325
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
posición
Figura L1.4. Gráfico que muestra el resultado tras aplicar la operación ED.
Para escribir el programa, se utiliza el entorno MPLAB de Microchip. Hay que crear un nuevo
proyecto, para lo cual se accede al menú Project y se ejecuta la opción Project W izard, que es una
LABORATORIO 1: APLICACIÓN DE INSTRUCCIONES DSP CON ENTRADAS Y SALIDAS. 327
AP17 AP18
utilidad que facilita la creación y configuración de un proyecto. La primera selección que se soli
cita es el modelo de dsPIC, que para esta práctica es el 30F4013. A continuación, se sclccciona el
com pilador M icrochip ASM 30 Toolsuite, que consta de 3 programas. Si al lado de alguno de es
tos programas aparece una cruz roja, se indica que la ubicación del program a no es correcta. Para
corregir este error hay que situarse en Location y seleccionar cada programa directam ente de la
carpeta en la que se haya instalado el MPLAB, que por defecto es “C:\Archivos de programa\M i-
crochipYMPLAB ASM 30 Suite\bin” . Figuras L1.6 y L1.7.
P ro je c t W iz a rd
Ü
Step One:
Select a device
Device:
\m ^ m m H
El siguiente paso consiste en dar un nombre al proyecto y seleccionar una carpeta en la que guar
dar los ficheros generados, como el fichero hexadecimal que será generado y que se programará en
la memoria FLASH del dsPIC. Finalmente, el cuarto y último paso del Project Wizard solicita aña
dir los ficheros de código necesarios para el proyecto. En este caso, hay que seleccionar el fichero
“Laboratoriol.s” que se encuentra en la carpeta Laboratorio 1 dentro de la carpeta Laboratorios del
CD que acompaña al libro. Cualquiera de los pasos que se han realizado en esta configuración, pue
den ser modificados una vez creado el proyecto. Por ejemplo, también es posible crear el proyecto
sin añadir el fichero con el código fuente y crearlo posteriormente.
328 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
P ro ject Wi7ard
Step Two:
Select a language tQQlsvrte
Active T oolsuite:
Toobuite Contents
■Location
C:\Aichivosdepiograma\Microchp\MPLABASM30Sute\bin\pic30-as. ■ Browse
Figura L1.7. Selección del compilador ASM.30, de libre distribución y propiedad de Microchip.
La ventana del proyecto debe contener el fichero Laboratorio l.s bajo el directorio Source, el fi
chero p30f4013.gld bajo el directorio Linker Script y el fichero p30f4013.inc bajo el directorio He-
ader Files. Es imprescindible añadir estos tres ficheros en el proyecto para que el programa pueda
ser compilado sin errores. Los ficheros con nombre p30f4013 son universales para cualquier apli
cación que utilice este modelo de dsPIC. Figura L1.8.
Para añadir estos dos ficheros a un proyecto hay que seleccionar la opción Add File pinchando
con el botón derecho del ratón encima de cada directorio, tanto “Header files” como “Linker Script”.
Después hay que buscar los ficheros en el disco duro, ya que se encuentran dentro de las carpetas
de instalación del MPLAB en unos directorios nombrados INC y GLD, es decir, con las mismas ex
tensiones que los ficheros. Dentro de estas carpetas se encuentran los ficheros de definición para to
dos los modelos de dsPIC. El fichero p30f4013.gld que se encuentra en la ubicación “C:\Archivos
de programa\Microchip\MPLAB ASM30 Suite\Support\gld” del disco duro del ordenador. El fi
chero p30f4013.inc está en la ubicación “C:\Archivos de programa\Microchip\MPLAB ASM30
Suite\Support\gld”.
■ I L ü b o r a to n o l.m c w
Q Laboratoriol.m cp
Q Source Ríes
j- Practica l.s
É Header Files
: p30f4013.inc
Object Files
Library Files
B Linker Scripts
p30f4013.gld
Other Files
Al comienzo del programa en ensamblador hay que realizar una llamada al fichero p30f4013.inc.
También es recomendable incorporar la definición de la palabra de configuración para el programa,
la cual será generada en el fichero hexadecimal y cargada directamente por el software de grabación.
También cabe destacar que el resto de patitas del dsPIC que no se utilizan en el proyecto conviene
configurarlas como entradas digitales.
.include ”p30f4013.inc”
.text
[lobal main
_main:
C.LR PORTD SE CONFIGURA LA PUERTA D COMO
MOV #0x000F, WO ENTRADA RD0 RDl RD2 Y RD3
MOV WO, TRISD RD8 COMO SALIDA (AVISO)
MOV #0xFFü0AV0 PUERTA B COMO SALIDA
MOV WUTRISB
MOV WO,PORTD APAGA RD8, AVISO
bucle:
BSET CORCON,#IF TRABAJO CON ENTEROS
MOV PORTD.W4 LEE PORTD EN W4
AND W4,#OxOOOC,W l SE LEEN LOS BITS RD2 Y RD3 EN
LSR w i, #0x0002,m EL REGISTRO W2
AND W4,#Ox0003,W3 Y RD0 Y RDl EN W 3
CPSGT W3.W2 SI W3 > W2 HACEMOS
GOTO W3 MAYOR W 3 -W 2
SUB W3,W2,W7 EN CASO CONTRARIO W2-W3
GOTO MULTIPLICA
W3MAYOR:
SUB W2.W3.W7
MULTIPLICA:
MPY W7*W7,A MULTIPLICAMOS LA DIFERENCIA
MOV ACCAL,W2 POR SI MISMA PARA ELEVARLA AL CUADRADO
MOV W2.PORTB MOSTRAMOS EL RESULTADO POR PORTB
MOV #0x0004, WO SI EL VALOR ES INFERIOR A 4
CPSGT W2AV0 APAGAMOS EL AVISO
BRA APAGAR EN CASO CONTRARIO ENCENDEMOS AVISO
BSET PORTD,#Ox8
GOTO bucle
APAGAR:
BCLR PORTD,#0x8
GOTO bucle REPETIMOS EL BUCLE INDEFINIDAMENTE
.end
Para conectar los distintos periféricos em pleados en este laboratorio, deberá seguirse con detalle las
conexiones descritas en la tabla siguiente.
330 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
L1.6. G R A B A C IÓ N V EJECUCIÓN
Para compilar el programa se accede a la opción Project, Build All. Aparece un mensaje que indica
Build Succeeded en caso de que el programa no tenga errores y se haya generado correctamente el
fichero hexadecimal con extensión .hex que se introducirá en la memoria FLASH del dsPIC. El úl
timo paso consiste en conectar el equipo PIC School al ordenador mediante el puerto serie y ejecu
tar el programa de grabación WinPICSOO. Desde este software se programa el dsPIC, siguiendo los
pasos señalados en el apartado Software W inPlC800 del capítulo anterior.
Resulta conveniente recordar que a la hora de grabar el programa en la taijeta PIC School, se de
berá colocar el interruptor del circuito de grabación en la posición PC para realizar la grabación por
el puerto serie.
Figura L1.10. Para grabar el programa el interruptor del circuito de grabación deberá situarse en la p o
sición PC.
Una vez grabado el programa en el dsPIC mediante el botón Programar Todo del programa Win-
Pic800, para ver el programa funcionando deberá pasarse el mismo interruptor anterior a la posición
RUN, es decir a la posición central. Sólo así com enzará a ejecutarse el programa creado.
LABORATORIO 1: APLICACIÓN DE INSTRUCCIONES DSP CON ENTRADAS Y SALIDAS... 331
Ahora ya sólo falta probar el ejercicio con los periféricos incoiporados en la tarjeta P1C School
y de este modo comprobar que el funcionamiento se corresponde con los objetivos de la práctica.
Ya es posible modificar el valor de los interruptores de la tarjeta PTC School para que se visualicen
distintos valores en los diodos led que se corresponderán con la distancia. El dato binario mostrado
en los led será mayor según se aumente la diferencia entre el dato introducido por los grupos de 2
interruptores.
Cuando en un grupo de conmutadores se simule la máxima distancia ( l - 1) y en el otro grupo la
mínima (0-0). se encenderá el led de aviso (RD8) ya que el resultado de la operación será mayor 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 cíclicamente.
L1.7. LIBRERÍA M A TE M Á T IC A
Además de las instrucciones matemáticas específicas que se han presentado en esta práctica, cabe
destacar que M icrochip ha desarrollado una librería específica de funciones matemáticas y que ade
más opera con precisión de simple y doble coma flotante según el estándar IEEE-754. Esta librería
denominada dsPIC30FMcith Library de libre distribución se suministra compilada, de modo que no
hay acceso para visualizar cómo se desarrollan las funciones matemáticas, pero sí se pueden utili
zar en los proyectos.
Además, tiene la peculiaridad de poder llamar a estas funciones desde lenguaje C o desde len
guaje ensamblador. En la Figura L1.12 se muestra una tabla que resume las funciones matemáticas
presentes en esta librería y los ciclos de ejecución que necesita cada una de ellas operando en coma
flotante.
332 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
G ru po de F u n d o n e s F unción C iclo s d e e je c u c ió n
Suma 122
Resia 124
Operaciones básicas en coma flotante M ultiplicación 109
División 361
Cociente 385
Acos 478
Asin 363
Atan 696
Atan2 3206
Cos 3249
Funciones Trigonométricas c Hiperbólicas
Sin 2238
Tan 2460
Cosh 1049
Sinh 525
Tanh 338
Lxp 530
Frcxp 39
Funciones Logarítmicas y Exponenciales Ldexp 44
Log 2889
Log10 3007
Pow 2134
Potencias
Sqrt 493
Ceil 94
Funciones de redondeo
Floor 51
Valor absoluto Fabs 6
M odf 151
Funciones de Aritmética Modular
Fmod 129
Figura L1.12. Tabla con las instrucciones de la librería dsPIC30F Math Library.
NOTA:
En el CD que acompaña al libro podrá encontrar los programas de los laboratorios en lenguaje
ensamblador y en C.
jando
a fondo los
temporizadores
de 32 bits
L2.1. OBJETIVOS
Este laboratorio profundiza en el manejo de temporizadores de 32 bits. Para ello, y al igual que se
realizara en el apartado de Simulación y Programación de Aplicaciones, se desarrollará un semáfo
ro con pulsador. Los objetivos de este laboratorio son los siguientes:
Para implcmentar el semáforo con pulsador se utilizarán varios recursos de la tarjeta de desarrollo
PIC School. Por un lado, las salidas de los leds S7 y S5 representarán la luz roja y la luz verde del
semáforo respectivamente, cuyo valor ROJO o VERDE también se reflejará sobre la pantalla LCD
incluida en la tarjeta.
Por otro lado, el semáforo estará dotado con un pulsador que será el E7 de las entradas digitales
de la placa, con el fin de que un peatón pueda pulsarlo y así el semáforo cambie a ROJO para que
los vehículos se detengan.
333
334 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
Durante 10 segundos, el semáforo estará en rojo, para después pasar a verde durante otros 10 se
gundos, volver a color rojo y así sucesivamente. Esta secuencia sólo se interrumpirá cuando se ac
tive el pulsador E7 que hará que el semáforo páse a rojo y comience de nuevo el contaje de 10 se
gundos antes de pasar a color verde.
El esquema electrónico de este laboratorio es sencillo. Por un lado se debe conectar la patita
RAI 1/INT0 a un pulsador de la sección de Entradas Digitales (E7) de la placa PIC School y por otro
lado, conectar las patitas RDO y RD1 a 2 leds de la sección Salidas digitales de la placa (S7 y S5).
Para la conexión de la pantalla LCD al dsPIC30F4013, se utilizará el controlador serie SYM 20-
AA que permite de una forma sencilla, mediante una transmisión UART y utilizando solamente una
patita del controlador dsPIC, mostrar mensajes por la misma. Así, simplemente iniciando uno de los
módulos UART del controlador, podremos enviar mensajes a la pantalla LCD a través de la patita
U1TX.
El controlador serie SYM 20-AA requiere de las conexiones reflejadas en la Tabla L2.1.
Nótese que deben quedar ciertas líneas de la pantalla LCD sin conectar. Así las líneas LO, L1, L2
y L3 quedarán libres sin ningún tipo de conexión, así com o la entrada GND de la pantalla.
A P 17 A P 18
S A L ID A S D IG IT A L E S E N T R A D A S D IG IT A L E S
Para enviar datos a la pantalla LCD se aplica a la patita U1TX del m ódulo UART1 del
dsPIC30F40l3, a 9600 bps, 8 bits de datos, 1 de stop y sin control de flujo, el código ASCII del ca
rácter a mostrar. Previamente es conveniente enviar el carácter OxOOOC que borra la pantalla y co
loca el cursor en la prim era fila y columna de la pantalla.
Así para escribir la palabra ROJO, hay que enviar la siguiente secuencia de caracteres en hexa-
decimal: OxOC, 0 x 5 2 ,0x4F, 0x4A, 0x4F, correspondientes al código de limpiar pantalla, y los códi
gos ASCII de las letras R, O, J y O respectivamente.
L2.4. C O N S T R U C C IÓ N DEL P R O G R A M A
La programación del controlador se realizará desde el entorno de desarrollo MPLAB IDE. Puede
elegir entre hacer el desarrollo en lenguaje ensamblador o lenguaje C.
El program a en lenguaje ensam blador se encuentra divido en tres partes principales. La pri
m era m uestra la rutina de atención a la interrupción externa, que sim plem ente hace que el se
máforo se ponga en rojo y vuelva a com enzar la secuencia del temporizador. Además m uestra el
mensaje ROJO en la pantalla LCD.
336 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
.global _main
.global INTOInterrupt
.global_T3Intcrrupt
__INTOInterrupt: ;Tratamiento de la interrupción externa
DÍSI #3 :V ;Deshabilitamos interrupciones
BCLR IFS0,#0 ;Borramos el flag de la interrupción
MOV #0x0001;wo ;Ponemos a rojo el semáforo
MOV WO,PORTD ;moviendo 1 a PORTD
CLR TMR2 ;Borramos el temporizador
CLR TMR3 ;Para que empiece de nuevo
MOV #OxOGOC,WO ;Limpia la pantalla LCD
CALL TRANSMITE
MOV #0x52,WO ;Transmite la letra R
CALL TRANSMITE
MOV #0x004F,W0 ;Letra O
CALL TRANSMITE
MOV #OxO()4A,WO ;Letra J
CALL TRANSMITE
MOV #0x0O4F,W0 ;Letra 0
CALL TRANSMITE
RETFTE ;Devolvemos el control al programa principal
La tercera parte se corresponde con el programa principal, que realiza la incialización de los pe
riféricos y después entra en un bucle hasta que se origine alguna interrupción.
.tcxt
_main:
;ínicialización del puerto D
¡PROGRAMA PRINCIPAL
PRINCIPAL:
CLRWDT ;Refrescamos Perro Guardian
GOTO PRINCIPAL ;mientras esperamos que se origine alguna interrupción
TRANSMITE:
BTSS U 1STA,#TRMT ¡Espera a poder transmitir
BRA TRANSMITE
MOV W0,U1TXREG ;Transmite el dato por el registro LJ1TXREG
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 ' \ , . . . ■ ' . ' '
Una vez compilado el programa, se procede a su grabación en la placa PIC School, de igual
manera que en capítulos anteriores. Debe tenerse especial cuidado a la hora de configurar en la
pestaña Config del programa WinPic800, y seleccionar como fuente primaria del reloj X T x/P L L
4X - X T With 4X PLL.
Además de las conexiones anteriormente descritas para el controlador LCD serie, se deberán co
nectar los siguientes periféricos de la placa PIC School, según la Tabla L2.2.
Una vez cargado el fichero hexadecimal en el programa WinPic800, habrá que configurar en la pes
taña Config del programa WinPicSOO el reloj de la placa PIC School. Para ello, una vez cargado el
fichero .hex, seleccionará de la lista desplegable Primary Oscillator la opción X T W/PLL 4X - X T
cristal oscillator with 4X PLL. Tras llevar a cabo esta operación, pulsando la opción Grabar Todo,
se programará el controlador con la aplicación del semáforo.
LABORATORIO 2: MANEJANDO A FONDO LOS TEMPORIZA DORES DE 32 BITS 341
Al pasar el interruptor de la placa PIC School a modo RUN, comenzará la ejecución del programa.
El led S7 de la placa que simula la luz roja de un semáforo, se encenderá durante los primeros
10 segundos. A continuación, se encenderá el led S5 que simula la luz verde del semáforo durante
otros 10 segundos. De manera simultánea, aparecerán en pantalla los mensajes ROJO y VERDE.
Figura L2.4. Ejecución del programa semáforo sobre la placa PIC School.
analógico/digital
de alta precisión
L3.1. OBJETIVOS
El siguiente laboratorio describe cómo realizar una conversión analógico/digital de 12 bits optimi
zada empleando el dsP!C30F4013. Los dsPIC presentan mayor resolución de conversión que los mi-
crocontroladores de M icrochip, ya que éstos son de 8 y 10 bits en función del modelo. Además, la
velocidad de conversión también se ha elevado. Estas mejoras unidas a la capacidad de cálculo DSP
van a permitir optimizar notablemente los resultados de las conversiones A/D. Los objetivos de es
ta práctica son:
En esta práctica se van a utilizar las ventajas del conversor analógico/digital de los dsPIC unido
a su capacidad de cálculo, ya que se va a muestrear 10 veces una señal en el mínimo tiempo posi
ble para calcular el dato promedio de la conversión.
Para un microcontrolador resultaría muy costoso tener que promediar 10 señales, y si el dato fue
se alto, por ejemplo 1000, posiblemente se utilizaría una memoria externa para almacenar las mues
tras y posteriormente ir leyéndolas, sumándolas y finalmente realizar una costosa operación de di
visión para un m icrocontrolador M CU. O btener datos prom edios de señales analógicas es
interesante para filtrar posibles ruidos o perturbaciones que puedan influir en un instante concreto
en el valor de salida de un sensor analógico.
Gracias a la capacidad de cálculo de los dsPIC, es posible emplear una fórmula estadística que
permite ir obteniendo el dato promedio de un conjunto de datos sin necesidad de tener que almace
narlos para realizar el promedio. La fórmula es:
343
344 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
En la hoja de cálculo de la Figura L3.1 se puede apreciar cómo la media aritm ética obtenida
como el sumatorio de todas las muestras dividido por el número de ellas, coincide con el dato fi
nal obtenido em pleando la fórm ula estadística. Esta fórmula implica el empleo de m ultiplicacio
nes y divisiones de 16 bits, y debe realizarse a gran velocidad, no siendo aceptable su duración
en un m icrocontrolador MCU.
1 88 88
2 12 50,00
3 300 133,33
4 453 213,25
5 452 261,00
6 451 292,67
7 213 281,29
8 1025 374,25
9 2096 565,56
10 4000 909,00
Sumatorio 9090
Media Aritm ética 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 potenciómetro de la tarjeta PIC School que servirá para
introducir una señal analógica variable entre 0 V y 5 V y el dato resultado del mencionado cálcu
lo estadístico se visualizará en modo binario por la pantalla LCD. Aunque la conversión analógi
co/digital es de 12 bits, en pantalla se mostrarán los 16 bits del registro donde se almacenará el
resultado, por eso los cuatro prim eros bits siem pre serán cero. El potencióm etro utilizado se
corresponde con el nombre P1 del grupo ENTRADAS ANALOGICAS de la tarjeta y su señal es
introducida en la patita ANO del dsPIC.
En el organigrama de la Figura L3.2 se observan los pasos que hay que seguir para realizar
correctamente este laboratorio. Tras realizar las configuraciones necesarias en el dsPIC para con
figurar correctamente patitas de entrada y salida y la conversión A/D se realizan las 10 muestras y
el valor del resultado es mostrado en la pantalla LCD. El programa finaliza tras mostrar este re
sultado, permaneciendo en un bucle infinito. Al igual que sucede con un 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 ejecución. 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 ejecución de más instrucciones.
LABORATORIO 3: OPTIMIZANDO LA CONVERSIÓN ANALÓGICO/DIGITAL DE ALTA... 345
INICIO
► Configuraciones de
Entrada y Salida
Configuración d e .
Ir» in r n i A n - '
NO
Aplicar la Fórmula
estadística
Muestra del
resultado en ia
pantalla LCD
El esquema electrónico que resuelve esta práctica utiliza el dsPTC30F4013 correctamente alimen
tado y con su circuito de Reset y oscilador, un potencióm etro ajustable con vástago y la conexión
a la pantalla LCD descrita en el Laboratorio 2, Utilizando tempo rizadores de 32 bits. Las cone
xiones necesarias para el dsPTC son las mismas que en la anterior experiencia y se vuelve a utili
zar un circuito oscilador con cuarzo de 4 M Hz ya que es el que hay en la tarjeta PIC School. Cuan
do se realizan conversiones analógico/digitales es conveniente que la impedancia de salida del
sensor o del potenciómetro que se va a utilizar no supere los 10 KÍ2. Por esta razón, la resistencia
interna del potencióm etro utilizado en esta práctica es de 1 KQ. Deberá conectarse el potenció
metro en sus extrem os a señales de 0 V y 5 V para obtener una tensión variable entre estos dos
valores según se mueva el vástago. Asimismo, se utilizará la patita U1TX para enviar a la pantalla
LCD el resultado.
346 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
L3.4. C O N S T R U C C IÓ N DEL P R O G R AM A
L_.
Una vez configurado el módulo, se generará el código fuente necesario para dicha inicialización
a través del menú Code Generation de la herramienta Visual Initializer.
El programa también utiliza el módulo UART1 para enviar datos a la pantalla LCD. La confi
guración de dicho módulo no se realizará a través de la herram ienta Visual Initializer, ya que, se cre
ará un fichero con el código fuente correspondiente a la visualización de datos por el LCD total
mente aparte del programa que realiza la conversión. Así, dicho fichero podrá utilizarse en cualquier
otra práctica sin tener que reescribir el código correspondiente y sin tener que volver a inicializar el
módulo dentro de la herramienta Visual Initializer.
Tras esta inicialización, el programa entra en un bucle infinito hasta que se dé la interrupción ge
nerada por el Conversor Analógico Digital, que se encargará de.aplicar la fórmula estadística y mos
trar los datos en pantalla.
.include ';p30f40!3.inc"
.section .ndata
eontador: .hword 0x0800 ; Variable contador de la fórmula
media: .hword 0x0802 ; Variable media de la fórmula
dato_nuevo; .hword 0x0804 ; Dato recogido del conversor ADC
.section .rcxt
.global ADCInterrupt ; Tratamiento de la interrupción
__ADCInterrupt:
BGLR 1FS0.#ADIF ;Borrado del 11ag de intemipción
MOV ADC BUFO,W0 ¡Recogida del dato de la interrupción
MOV W0,dato_nuevo
INC contador ;Se incrementa el contador
DEC eontador. WREG
MUL media ;Se multiplica por la media
MOV dato_nuevo,W5
ADD W2,W5,W3
MOV contador,'W4
REPEAT #17 ;Di visión entera
DIV.U W3.W4
MOV WO,media
MOV #OxOOOA ,W4; ;La operación se hace 10 veces
MOV conta dor,W0
CPSEQ W4,W0
RETFIE
MOV medi a, W0
MOV w0,w2
CALL W2TOLCD ;Sc muestra el valor por el LCD
MOV #0x0000,W 0 ;Se reinician las variables
MOV W0,eontador
MOV W0,media
RETFIE
.global „main
348 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
..mam:
CALL _Visua}lnitialization ;lnicialización del CAD
MOV #0x0000, WO ;lnicialización de las variables
MOV W0,dato_nuevo
MOV W0,media
MOV W0,contador
bucle'
;Bucle infinito
goto bucle
cnd
Cabe destacar la instrucción CALL W2TOLCD que llama al procedimiento guardado en el fi
chero W2TOLCD.S que se encuentra en el mismo directorio que la aplicación. Dicho procedimien
to utiliza el controlador analizado en el laboratorio anterior para mostrar por el LCD el contenido
del registro W2 en binario. Así mismo, introduce un retardo para que pueda visualizarse, ya que de
lo contrario, la conversión se haría tan rápidamente que no le daría tiempo a la pantalla LCD a vi
sualizar los datos correctamente.
Para las conexiones de este laboratorio resulta altamente recomendable aprovechar el conexionado
del controlador serie LCD de la práctica anterior. Así, el resto de conexiones tan sólo serán las in
dicadas en la Tabla L 2 .1.
Además deberán conectarse a +5v y a GND las conexiones de referencia del potenciómetro P l
de ENTRADAS ANALÓGICAS.
L3.6. G R A B A C IÓ N Y EJECUCIÓN
Para probar el experimento se puede abrir el proyecto que se encuentra en la carpeta LABORA
TORIOS, LABORATORIO 3 del CD del libro o desarrollar un proyecto nuevo siguiendo los pa
sos comentados en la primera práctica y con la ayuda del fichero laboratorio2.s, que se encuentra
en la misma carpeta del CD y contiene el código fuente del ejercicio. Tras escribir el programa, hay
que com pilarlo para obtener el fichero hexadecimal y posteriormente ejecutar el software de gra
LABORATORIO 3: OPTIMIZANDO LA CONVERSIÓN ANALÓGICO/DIGITAL DE ALTA.. 349
bación WinPIC800 para grabar la memoria de programa del dsPTC empleando el equipo PIC Scho-
ol conectado al puerto serie del ordenador.
Una vez grabado el ejercicio en el dsPlC modelo 30F4013, se coloca el interruptor del circuito
de grabación en modo RUN para comenzar su ejecución. En la pantalla LCD aparecerá un dato bi
nario que mostrará los 16 bits, de los cuales, los últimos 12 muestran el resultado de la conversión
A/D tras realizar la fórmula matemática. Según se cambie de posición el valor del potenciómetro P 1
se observará cómo varía el resultado mostrado en la pantalla LCD. El resultado binario mostrado en
los diodos irá creciendo desde 000000000000 hasta 111111111111, a medida que el valor de la se
ñal analógica de entrada pasa desde 0V hasta 5V.
NOTA:
En el CD que acompaña al libro podrá encontrar los programas de los laboratorios en lenguaje
ensamblador y en C.
. ' ■ i , : , . ..
S iS
¿ ■ iv íS
m í
encriptada
con el USART
: ; •
L4.1. OBJETIVOS
En esta práctica se propone comunicar un dsPIC con un ordenador empleando el puerto serie del PC.
Se utiliza el hardware de comunicaciones USART disponible en el dsPIC que permite realizar este
lipo de comunicación sin emplear recursos de la CPU. Los objetivos de la práctica son:
• Configurar correctamente el dsPIC para el envío y recepción de datos por el puerto serie.
• Utilizar el Motor DSP para realizar una encriptación de los datos en las comunicaciones.
Para visualizar los datos enviados desde el dsPIC en el PC se puede utilizar cualquier programa
Hypcrtcrminal de comunicaciones, como el software Hyperterminal que se encuentra en la carpeta
Accesorios/Comunicaciones del sistema operativo Windows.
Aprovechando las posibilidades matemáticas de los dsPIC se pueden desarrollar mecanismos de
encriptación de comunicaciones mucho más avanzados que con un microcontrolador MCU. Con un
microcontrolador, para codificar un dato rápidamente se le puede sumar o restar una cantidad fija,
que sólo sea conocida por el equipo con el que se establece comunicación.
Por ejemplo, si se quiere enviar el carácter ASCII “z’\ correspondiente al código ASCII 122, se
le puede sumar una cantidad de forma que al transmitir el dato no pueda ser reconocido. El equipo
receptor deberá restar la misma cantidad al recibir el dato para desencriptarlo y convertirlo en un ca
rácter inteligible. Esto se aplicará a todos los datos transferidos. Sin embargo, un simple desplaza
miento de datos a través de sumas y restas es una protección muy sencilla, que puede ser fácilmen
te descubierta por un programa que pruebe a restar y sumar cifras hasta localizar cadenas de
información válidas.
Con un dsPIC es posible com plicar mucho la encriptación ya que las operaciones matemáticas
que se pueden ejecutar a gran velocidad son mucho más complejas que las sumas o restas de un mi
crocontrolador MCU. Por ejemplo, podemos elevar al cuadrado un dato, dividirlo entre una canti
dad y después enviar dos datos, el cociente y el resto de la división. Para poder desencriptar esta
información, habría que conocer que hay 2 datos en transmisión por cada dato enviado, que está
351
352 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
previamente elevado al cuadrado y luego desglosado en cociente y resto de una división, que en el
caso de esta experiencia tendrá como divisor el valor 100.
En la aplicación el dsPIC esperará la recepción de un carácter ASCII por el puerto serie. Una vez
recibido el dato, lo reenviará hacia el PC a modo de ECO y hacia la pantalla LCD, pero aplicando
antes una codificación para encriptar los datos. Las comunicaciones se realizan a una velocidad de
9600 baudios, 8 bits de datos y con 1 bit de stop. Estos parámetros de la comunicación hay que te
nerlos en cuenta a la hora de configurar el dsPIC, ya que la comunicación por el puerto serie es de
tipo asincrono y es necesario que los dos equipos conozcan previamente estos parámetros.
£1 hardware necesario para este programa se encuentra en la tarjeta PIC School. La conexión con
los periféricos es muy sencilla, ya que sobre el circuito conversor serie a LCD del laboratorio ante
rior sólo hay que añadir una línea para recibir los datos del PC, a través de la línea U1RX que se co
necta a la patita RxD del interfaz RS-232 de la placa PTC School.
Las patitas, en las que se encuentran las salidas hardware de la USART, serán las utilizadas en
este laboratorio. Para probar las comunicaciones y poner en marcha la práctica hay que conectar la
tarjeta PTC School al ordenador empleando un cable para el puerto serie que disponga de un termi
nal DB9 hembra en un extremo y un DB9 macho en el otro. Los conectores tipo DB9 son el están
dar más extendido en las comunicaciones por el puerto serie. Es el mismo tipo de cable que se uti
liza para programar los dsPIC a través del programa WinPIC800. Así, se usa el mismo cable de la
siguiente manera: primero se programa el microcontrolador y una vez programado, en segundo lu
gar, antes de pasar a modo “RUN”, se cambia el cable de posición en la PIC School, conectándolo
al interfaz RS-232 para poder observar el funcionamiento de dicho laboratorio.
El código fuente del programa se encuentra en el CD del libro dentro del directorio LABORATO
RIOS y en el subdirectorio LABORATORIO 4. El fichero se denomina LABORAT0RI04.S. Al
principio es necesario incluir el fichero de definición p30f4013.inc que contiene todos los bits y re
gistros de control nombrados.
Al comienzo del programa la configuración que hay que realizar sólo afecta al hardware de las
comunicaciones y a las patitas R J X y T1X del dsPIC. La primera de ellas debe configurarse como
entrada digital para poder recibir los datos y la segunda como salida. Es necesario acceder a los re
gistros de control de la USART para activar la comunicación a la velocidad adecuada.
354 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
.include "p30f4013.incM
.global __U 1RXliiterrupt
.global _ main
_main:
BSET CORCON,#OxO ;Trabajo con enteros
CALL INÍCIAUART ;Inicialización módulo UART
bucle:
CLRWDT ;Se espera en un bucle infinito
GOTO bucle ; a que se origine una interrupción por llegada
;de un carácter
ÍNICIAUART:
CLR U1BRG ;Se inicial iza U1BREG para transmisión
MOV #0x0019,'W0 ;a 9600 baudios con un reloj de 4Mhz
MOV W0U1BRG
MOV #0x8000, W0 ;Se habilita la recepción de datos
MOV WO, Ul MODE
MOV #0x0510, WO
MOV WO, U1STA
MOV #0x8020; WO ;Se habilita el módulo
MOV WO. Ul MODE
MOV #0x0200, WO ;Sc habilita interrupción por recepción
MOV WO, IECO
CLR IEC1
CLR IEC2
RETURN
Una vez configurado el chip, el programa queda a la espera de recibir un nuevo carácter por el
puerto serie, evento que es detectado por la USART. Cuando llegue el nuevo dato, se descarga y se
aplica el algoritmo de cifrado para reenviarlo. Hay que destacar que la comunicación es full-duplex,
de modo que si se recibe un nuevo dato mientras se está enviando la respuesta anterior también es
almacenado en el buffer de recepción de la USART.
La conexión de los periféricos es bien sencilla. M anteniendo las conexiones del adaptador serie al
LCD del ejercicio anterior, sólo se deberán realizar las conexiones reflejadas en la siguiente tabla y
que pueden apreciarse en la Figura L4.2.
Una vez abierto el proyecto LABORATORIO 4 que se encuentra en el CD del libro y tras compilar
y grabar el programa en la memoria del dsPIC mediante el uso de la tarjeta PIC School y el softwa
re WinPIC800, se deberá ejecutar un programa de comunicación en el PC para poder enviar datos
por el puerto serie y recibir las respuestas del dsPIC. A modo de ejemplo, se muestran a continua
ción los pasos necesarios para probar el ejercicio con el programa Hyperterminal de Windows, que
se encuentra en el menú Accesorios/Comunicaciones. Recordemos que una vez pasado a modo
ktRUN” deberemos cam biar el cable serie utilizado para la grabación del conector donde se en
cuentra al conector del interfaz serie RS-232.
Hombre:
[directo C0M1
Icono:
(¡ Aceptor | [ Cancele?
Tras ejecutar el programa Hyperterminal hay que configurar una nueva conexión, para lo cual el
programa solicita un nombre, y escoger un icono. A continuación, aparecerá otra pantalla en la que se
escoge el puerto COM del PC con el que se quiere comunicar con el dsPIC. Es necesario seleccionar
un puerto COM que esté libre, es decir, que no esté siendo utilizado por algún otro dispositivo hard
ware conectado en el ordenador. En la pantalla que se muestra en la Figura L4.5 se ha escogido el
356 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
directo C0M1
Número de
telefona
Conectar usando-
l Aceptar j | C^xetar ]
P ro piedades de COMI
B is de datos 18
Control de Rupc ¡[
Restaurar predetenroadre
Figura L4.6. Pantalla de configuración del puerto serie en el ordenador. Hay que escoger los mismos
parámetros que los seleccionados en la USART del dsPIC.
Respecto a la configuración necesaria en la taijeta PTC School, se ha de grabar el dsPIC con el fi
chero LABORATORIO 4.hex generado en el proyecto empleando el programa WinPIC800. Hay que
tener en cuenta que el programa WinPIC800 utiliza el puerto serie del ordenador para transmitir los
LABORATORIO 4: COMUNICACIÓN ENCRIPTADA CON EL USART 357
Figura L4.7. Programa Hyperterminal en ejecución. Las tedas pulsadas serán enviadas hacia el dsPIC
y los caracteres recibidos se mostrarán p o r la pantalla.
ficheros hexadecimales a la memoria FLASH del dsPIC. Por esta razón, si se va a utilizar el mismo
puerto serie que el WinPlCSOO para probar posteriormente el programa con el Hyperterminal, el soft
ware WinPICBOO debe estar cerrado. De no ser así, el pueito serie estaría controlado por este otro pro
grama y no se podría entrar en comunicación desde el Hyperterminal.
Tras grabar el dsPIC, se pulsará el botón de Reset para comenzar la ejecución de la experiencia.
Al teclear un carácter en el programa Hyperterminal de Windows se reciben dos caracteres en la
pantalla del ordenador y en la pantalla LCD, que es un resultado ECO del carácter enviado pero en-
criptado. Se puede probar a realizar manualmente la operación de desencriptación y así comprobar
que las operaciones son realizadas correctamente por el dsPIC. Todo carácter ASCII recibido tiene
un valor asignado entre 0 y 255 que puede ser consultado en una tabla estándar de códigos ASCII o
en el programa Mapa de Caracteres de las Herramientas del sistema operativo Windows.
Figura L4.8. Fotografía de la PIC School conectada al puerto serie de un ordenador y con el Labor¿i-
torio 4 en ejecución.
358 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
NOTA:
En el CD que acompaña al libro podrá encontrar los programas de los laboratorios en lenguaje
ensamblador y en C.
íí 'í í ;
.
ORATORIO
■■ Control de
í : í 'í í í í ?j m í -m
un motor de CC
PWM
L5.1. OBJETIVOS
Este laboratorio estudia cómo emplear la capacidad del dsPlC para generar señales 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 señal cuadrada que aplicada a un chip amplificador
regule la velocidad de funcionamiento de un motor. El dsPIC30F4013 pertenece a la familia de pro
pósito general de los dsP!C30F. Sin embargo, existe una familia específica que dispone de un hard
ware adicional para el control de motores. Estos dispositivos, además de generar señales PW M pa
ra control básico de motores de corriente continua, pueden controlar motores más avanzados, como
los motores Brushlcss y los motores de inducción de corriente alterna.
Microchip ha creado una serie de diseños de referencia para el control de motores de alto rendi
miento empleando la familia dsPIC de control de motores. Estas aplicaciones realizan control vecto
rial de un Motor de Inducción de Alterna, denominado por las siglas ACIM, y control sin sensores de
un Motor de Continua sin escobillas, siglas BLDC. Estas aplicaciones son gratuitas y se encuentran
descritas completamente en las notas de aplicación AN908 y AN901 de Microchip. Pueden descar
garse desde www.microchip.com en la sección correspondiente a las Notas de Aplicación para dsPIC.
359
360 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
Gracias a las familias dsPIC30F y dsP33F específicas de control de motores pueden resolverse
aplicaciones de control mucho más complejas que las habituales con cualquier otro microcontrola-
dor MCU. Como ejemplo, se muestra en la Figura L5.2 el algoritmo de control vectorial que es de
sarrollado por un dsPIC para gestionar un motor AC de inducción. Hace falta una gran capacidad
de cálculo para resolver este algoritmo de control en tiempo real ya que dispone de lazos de posi
ción, de velocidad, elementos de control Proporcional-Integral, etc. Para poner en funcionamiento
los ejemplos de aplicación que facilita Microchip para control avanzado de motores, está disponi
ble el sistema de desarrollo de control de motores dsPICDEM M CI de Microchip. (Figura L5.1).
En esta práctica se regula la velocidad del motor de corriente continua con cuatro velocidades dis
tintas, seleccionables mediante dos interruptores de la tarjeta PIC School. Con la combinación 00,
el motor estará parado e irá aumentando su velocidad progresivamente hasta que se seleccione el
máximo valor binario, que se corresponde con los dos interruptores activados, valor 11.
El ejercicio em plea el módulo hardware “Output Compare” del dsPIC configurado en modo
PWM sencillo. Para realizar el control básico de un motor de corriente continua se emplea el con
trol de velocidad en función de la tensión de alimentación del motor. Cuanta mayor sea la tensión
en las bornas del motor, mayor será la velocidad de giro de su eje. Al aplicar una señal cuadrada a
un motor de corriente continua, se consigue modificar la tensión media aplicada en los terminales
del motor. M anteniendo la misma frecuencia de la señal cuadrada y modificando el ciclo de traba
jo, es dccir, la proporción de tiempo que la onda cuadrada permanece a nivel alto respecto a nivel
bajo, se consigue que el motor gire a distintas velocidades.
El esquema electrónico configurado en la tarjeta PIC School para esta aplicación em plea el driver
de motores L293D como interfaz entre el dsPIC y el motor. No se puede conectar directam ente el
LABORATORIO 5: CONTROL DE UN MOTOR DE CC MEDIANTE PWM 361
dsPIC a un motor, puesto que no tiene capacidad para sum inistrar la corriente necesaria a través
de sus patitas. H acer esto estropearía el dsPIC. Es necesario utilizar un driver que actúe como
amplificador, convirtiendo las señales TTL generadas por el dsPíC en señales 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 tensión aplicada al motor puede ser independiente de la
tensión de alim entación de la electrónica de control que se introduce a través de la patita +V de
la zona DRIVER 4 CANALES 0,6 A de la placa PIC School. En el presente laboratorio se utili
zará la fuente de alim entación común para toda la placa y, por esta razón, esa patita perm anece
rá desconectada.
AP18
Para llevar a cabo el laboratorio sobre la placa PIC School, deberán realizarse 4 conexiones princi
pales, resumidas en la Tabla L 5 .1.
Deberá prestarse especial atención a conectar la entrada E4 del DRIVER 4 CANALES, a tierra
(GND en la placa).
Y por último, deberá conectarse el motor en los bornes S3 y S4 del DRIVER 4 CANALES.
En primer lugar el programa configura el módulo O C l comparador de salida. Al igual que se indi
có en capítulos anteriores, se utilizará la herramienta Visual Initializer para llevar a cabo esta tarea.
C o ntinue v :
O G a te d T im e A c c u m u la tio n
Interrupt
□ E n a b le Interrupt o n S ta rtu p
Interrupt Priority:
El primer paso será configurar el circuito del reloj y colocar un reloj tipo XT w/PLL 4X a 4 MHz.
A continuación, se configura el temporizador Timer2 estableciendo los parámetros recogidos en la
Figura L5.5, es decir, habilitarlo al inicio (Encible on startup), “pre-cscaler” de 1:256 y un período
de 1 milisegundo. Y por último, según recoge la Figura L5.6, se procederá a configurar el módulo
O C l, estableciendo el Timer2 como elemento de con taje, modo de operación PW M M ode fa u lt pin
disabled y cargando en OC1R el valor 7000 y en O C 1RS el valor FFFF.
LABORATORIO 5: CONTROL DE UN MOTOR DE CC MEDIANTE PWM 363
■'Vj
OCIR (hex):
:§
0C1RS (hex): •
I O Enable Interrupt on Startup
' Interrupt Priority:
0
Una vez configurados los elementos, se inicia la construcción del programa, que simplemente,
llamará a la rutina de inicial ización de los componentes, después configurará las patitas RFO y RF1
para que lean los valores de los interruptores EO y E l y, en función de su estado, asignará un valor
u otro al registro OC1RS, que hará que se generen distintas señales de salida y, por lo tanto, distin
tas velocidades en el motor.
A continuación, se presenta el código fuente comentado correspondiente al programa que reali
za la función descrita.
_ m a in :
CALL _VisualInitialization ;Inicialización de TMR2 y OC1
MOV #0x0003.WO ;RF0 y RF1 entradas
MOV W0,TRISF
MOV #0x0,WO :PORTF señales digitales
MOV W0,ADPCFG
MOV #0x0100, WO ;Valor máximo de OC1
MOV W0.PR2
COMPRUEBA:
BTSC PORTF,#RFI ;Comprueba valor interruptores El y E0
GOTO RD1„.UNO ;E1 es 1
BTSS PORTF,#RFO ;Comprueba H0 cuando B1 es 0
GOTO m a r c h a _ c>;r o ;Velocidad 0
GOTO MARCHAJUNO ;Velocidad 1
ROI „UNO:
BTSS PORTF,#RFO ;Comprueba E0 cuando El es 1
GOTO MARCHA_DOS ;Velocidad 2
364 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Al mover 0x0100 a PR2, para conseguir distintas velocidades, se carga el registro OC1RS con
valores inferiores c iguales a dicho valor. Así, para un valor 0 el motor no se moverá y, sin embar
go, para un valor 0x0100, el motor irá al máximo de revoluciones. Para cambiar el giro del motor,
podría jugarse con la conexión E4 del DRIVER 4 CANALES y, si en vez de conectarlo a tierra, se
conecta a un interruptor (por ejemplo E3), accionando dicho interruptor en un sentido u otro podrá
cambiarse el giro del motor.
NOTA:
En el CD que acompaña al libro podrá encontrar los programas de los laboratorios en lenguaje
ensamblador y en C.
L6.1. OBJETIVOS
Este laboratorio aborda la tarea de resolución de una ecuación típica de filtrado de señales. Concre
tamente resuelve la ecuación general para filtros FIR representada en la Figura L 6 .1.
Para introducir los coeficientes de la ecuación general se utilizará el módulo UART del dsPIC con
el que se introducen los datos desde el teclado del ordenador. Cada uno de estos coeficientes se co
rresponde con cada uno de los bytes transmitidos por este módulo de comunicación.
La aplicación, mientras recibe todos sus argumentos, irá mostrando en todo momento el valor
acumulado de las operaciones realizadas por la pantalla LCD. Por cada dato recibido por el puerto
serie se mostrará en la línea superior de la pantalla el valor del dato recibido así como el de la par
te baja del acumulador en el que se almacena el resultado yn de la ecuación.
Los datos deberán enviarse de forma ordenada, es decir, en primer lugar se enviará bü, a conti
nuación x„, más tarde bj, xn.i, b2, y por último x„_2.
367
368 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Cada vez que se reciben dos operandos se efectúa la suma de ambos y se acum ula el resul
tado en el 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
ción externa que origina que se visualicen estos bits por la pantalla LCD. Para distinguir que los da
tos mostrados en pantalla se corresponden con los 32 bits de menos peso del acumulador o con el
último byte recibido y el contenido de los 16 bits de menos peso también del acumulador, cuando
se visualice únicamente el acumulador, parpadeará el cursor.
Inicialización del
módulo UART
\/
▼_____
Visualizadón del
dato recibido y la
parte baja del
Acumulador A
Muestra los 32
Recepción del bits de menos
segundo byte x„ peso del
Acumulador A
Multiplicación y
acumulación
(MAC) de b, * x„
T
Visualización del
dato recibido y el
valor del
Acumulador A
El laboratorio 6 hace uso de varios periféricos para su funcionamiento. Por un lado se encuentra la
pantalla LCD que visualizará los resultados y que requiere del controlador serie. P or otro, se re
quiere de la conexión al puerto USART a través del interfaz RS-232 para la recepción de los ope
randos de la ecuación.
Finalmente, esta aplicación requiere un interruptor de entrada para activar la interrupción encar
gada de mostrar los 32 bits de menos peso del Acumulador A. El esquema electrónico correspon
diente a estas funciones se muestra en la Figura L6.3.
LABORATORIO 6: DISEÑANDO FILTROS 369
35 R A 1 1 < 0 - Ê Z --------------------- 1
— X- 2
3 RF2/U1RX * “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 periféricos indicados en la Tabla L6.1 correspondientes a la tarjeta de desarro
llo P1C SchooL
La aplicación utiliza el controlador serie a LCD, cuya adaptación ya ha sido comentada en la
boratorios anteriores.
Para la programación del dsPíC se ha creado un proyecto que contiene dos ficheros fuente princi
pales. El fichero lahom torioó.s se corresponde con el código principal del programa y, por otro la
do, el fichero LCD.s contiene las rutinas necesarias para manejo del LCD de la PIC School a través
del adaptador serie a LCD.
A continuación, se describen las paites principales del fichero laboratorioó.s que dispone de las
rutinas principales de la aplicación. El fichero LCD.s contiene rutinas ya explicadas en laboratorios
anteriores.
370 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
.include "p30f4013.inc"
global__JNTOInterrupt
; Tratamiento de la interrupción INTO
_ÍNTOlnterrupt:
La primera parte del código se corresponde con el tratamiento de la interrupción externa INTO.
Al activar el pulsador E7, se provoca una interrupción que muestra en la pantalla LCD los 32 bits
de menos peso del Acumulador A.
.global__U1RXInterrupt
U1 RXInterrupt:
BCLR IFS0,#U 1RXIF ;Borra flag interrupción RXUART1
MOV U1RXREG,W2 ;Mueve el dato recibido a W2
BTSC W3,#0X0 ;Si W3 es uno significará que ha recibido
GOTO OPERA ;el segundo dato y realizará la multipl.
MOV W2.W4 ;Si es el primer dato lo guarda en W4
MOV #0X0001,W3 ;Marca en W3 que ya ha recibido un dato
GOTO MOSTRARPANTALLA ;Muestra el primer dato en pantalla
OPERA: ;Si ha recibido el 2o dato
MOV W2,W6 ;Sa!va el 2o dato en W6
MAC W4*W6,A ;Multiplica los 2 operandos y acumula
CLR W3 ;Pone a 0 W3 indicador de operandos
MOSTRARPANTALLA:
CALL LIMPIA ;Limpia pantalla
CALL NOPARPADEA ;No parpadea el cursor
CALL W2TOLCD ;Muestra el último dato recibido
MOV ACCAL.W2 ;Mucstra ios 16 bits de menos peso de A
CALL W2TOLCD
RETEJE ;Retoma de la interrupción
Esta segunda parte se corresponde con el código de atención a la interrupción de datos por el mó
dulo USART. Cuando recibe el primer dato lo salva en W4 y lo muestra junto con el valor de AC-
CAL. Al recibir el segundo dato, realiza la multiplicación y acumulación mediante el uso de la ins
trucción MAC, mostrando de nuevo el último dato y el valor del registro ACCAL. La ejecución de
esta instrucción MAC es la que realiza las operaciones matemáticas necesarias para la resolución de
la ecuación planteada.
LABORATORIO 6: DISEÑANDO FILTROS 371
.global _main
;PROGRAMA PRINCIPAL
_main:
BSET CORCON,#OxO ;Operación con números enteros
CALL INICIAUART ;Inicializa la UART e INTO
CLR W3 ;Pone cero el contador de operandos
bucle:
CLRWDT ;Entra en un bucle infinito a la espera
GOTO bucle ;de una interrupción
INICIAINTO:
•Configuración de interrupción externa INTO
MOV #0x0001, W0
MOV W0, IEC0
RETURN
INICIAUART:
CLRU1BRG
MOV #0x0019,W0 ;Configuración del registro U1BREG
MOV WOAJIBRG ;para un reloj de 4M Hz y 9600bps
MOV #0x8000. W0
MOV W0, UlMODE :Modo de transmisión
- MOV #0x0510, W0
MOV W0, U 1STA
MOV #0x8020, W0
MOV í : W0, UlMODE
MOV #0x0201, W0 ;Interrupciones activas para USART e INTO
MOV W0, IEC0
CLR [EC1
CLR ÍEC2
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 pestaña Config del programa WinPic800 la fuente de reloj XT
w/PLL 4X para el correcto funcionamiento del laboratorio.
Tras grabar el programa, se coloca el conector serie procedente del ordenador en la salida del
Interfaz RS-232 de la tarjeta de entrenamiento para enviar datos desde el programa Hyperterminal
372 dsPIC. DISEÑO PRACTICO DE APLICACIONES
b¡ 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 códigos ASCII de las letras A, B, C, D, E y F respectivamente. Así,
la introducción de estos valores por el programa HyperTerminal de Windows será muy sencilla, te
niendo que pulsar consecutivamente las teclas indicadas en mayúscula.
Con estos valores, el resultado final de la ecuación de filtrado deberá ser el siguiente:
y„ = 65 x 66 + 67 x 68 + 69 x 70 = 13.676
A c c ió n
En cualquier momento podría pulsarse el interruptor E7 para ver los 32 bits menos significati
vos del Acumulador A, como se muestra en la Figura L6.4.
Figura L6.4. Fotografía que muestra la visualización do los 32 bits de menos peso del Acum ulador A.
El cursor parpadea para distinguir que en la línea superior de la pantalla LCD se muestra el con
tenido ampliado del Acumulador A y no el último dato recibido.
NOTA:
En el CD que acompaña al libro podrá encontrar los programas de los laboratorios en lenguaje
ensamblador y en C.
•••••• •-
LABORATORIO
Grabando la
memoria FLASH
de programa
con un bootloader
L7.1. OBJETIVOS
Para la implemcntacíón de este laboratorio se requieren dos elementos principales. Por un lado se
requerirá un program a bootloader en el PC que transmita los datos a grabar en el dsPIC por el puer
to serie y, por otro lado, un programa en el dsPIC que reciba dichos datos y los grabe en la memo
ria de programa.
El programa bootloader del PC se encuentra en el CD que acompaña a esta obra, dentro de la car
peta LABORATOR!OS\ LABORATORIO 7\ MINIBOOTLOADERV Minibootloadcr.exe. Se trata de
un pequeño programa que no requiere instalación alguna y que enviará por el puerto serie 96 bytes a
razón de un byte cada medio segundo. Esos 96 bytes se corresponden con 32 instrucciones del progra
ma. Cada instrucción está formada por 3 bytes y la grabación en memoria FLASH se realiza en bloques
de 32 instrucciones, de ahí que el programa Minibootloader.exe envíe 96 bytes por el puerto serie.
375
376 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Env«f ptogtema
Inicializa UART
Inicializa contador
de posición de
memoria
▼
Recibe dato por
UART
▼
Muestra dato por
LCD y contador
posición de
memoria
;
Aumenta contador
de posición de
memoria
N o /¿ H a recibido -
96 b y t e s ? /
......... T ____
Graba datos en
memoria FLASH
de programa
▼
Activa la salida
RDO paja
encender led de
aviso de fin.
El Laboratorio 7 emplea periféricos analizados en temas anteriores, como son el display LCD, el in
terfaz RS-232 y una salida digital conectada al led S5 que señaliza que el proceso de grabación en
memoria de programa se ha llevado a cabo. El esquema de estas conexiones se muestra en la Figu
ra L7.3.
La conexión de los periféricos queda resumida en la tabla siguiente y es muy similiar a la de labo
ratorios anteriores,
Para la construcción del Laboratorio 7 se ha creado un proyecto con 3 ficheros de código fuente.
Un primer fichero llamado LCD.s es el encargado de las rutinas de visualización de datos por la
pantalla LCD de la placa PTC School y su estudio ya se ha realizado en laboratorios anteriores.
378 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
.global GRABA
.include "p30f40i3.inc"
GRABA:
SECUENCIA DE BORRADO
A continuación la rutina recupera los datos de las posiciones de memoria 0x0901 hasta la posi
ción 0x0960 para su grabación en memoria.
; PROCEDIMIENTO DE ESCRITURA
RETURN ;retomo
Por último, enciende el lcd conectado a RD0 para indicar al usuario que el proceso de grabación
ha finalizado.
Esta rutina GRABA del fichero GRABAPROGRAMA.s es llamada desde el programa principal al
macenado en el fichero laboratorio?.s. Este fichero contiene las rutinas principales de la aplicación.
380 dsPIC DISEÑO PRÁCTICO DE APLICACIONES
Esta rutina de interrupción es la encargada de ir guardando los datos recibidos por el puerto se
rie en la memoria de datos del dsPIC. La rutina va guardando los datos desde la posición 0x0901
hasta la posición 0x0961. Los guarda en la memoria de datos para que este proceso de almacena
miento sea más rápido y para que una vez recibidos todos los datos se llame a la rutina GRABA en
cargada de almacenarlos en la memoria FLASH de programa. Mientras no recibe el último dato la
rutina visualiza en pantalla el dato recibido y la posición de memoria donde es almacenado.
.global _main
main:
CALL INICIAUART •Jnicialización del módulo UART
MOV #0x0900,W4 ;Dirección donde empezar a
;guardar los datos
bucle: ;PROGRAMA PRINCIPAL
CLRWDT ;Bucle infinito a la espera
GOTO bucle ;de interrupción
INICIA UART. Jnicialización UART
CLR U1BRG ;Configura U 1BREG para 4MHz
MOV #0x0019,W0 ;y 9600bps
MOV W0,U 1BRG
MOV #0x8000. W0
MOV W0. U1MODE ;Gonfigura modo
MOV #0x0510. W0
MOV W0, U 1STA
MOV #0x8020. WO
MOV W0, UÌMODE
MOV #0x0200, W0
MOV W0. BÉCO ;Configura interrupciones
CLR IEC1
CLR IF.-C2
RETURN ;Retomo subrutina
.end
LABORATORIO 7: GRABANDO LA MEMORIA FLASH DE UN PROGRAMA CON UN... 381
Esta parte del código contiene el programa principal, que simplemente inicializa el módulo
UART para una com unicación serie a 9600 baudios, 8 bits de datos, 1 de stop y sin control de
paridad. Inicia también el contador de posición de memoria donde almacenar los dalos y entra en
un bucle, infinito esperando que se produzca una interrupción en el módulo UART al recibir los da
tos del programa Minibootloader.
Una vez compilado el proyecto y generado el fichero laboratorio?.hex hay que cargar dicho fiche
ro en el dsPIC a través del programa WinPicBOO. Es conveniente recordar que en la pestaña Config
hay que seleccionar XT w/PLL 4X en la opción Primary Source antes de la grabación del mismo.
A continuación, se situará el interruptor del circuito grabador de la placa PIC School en modo
RUN para ejecutar el programa.
En la pantalla LCD no aparecerá ningún dato hasta que se arranque en el PC el programa Mini-
bootloader, se conecte el cable serie en el conector del interfaz RS232 y se pulse el botón Enviar Da
los del programa Minibootloader. Deberá elegirse de forma adecuada el puerto serie a utilizar.
Puerto serie: ¡C O M I v
E n viai programa
Al pulsar el botón Enviar programa el dsPIC comienza a recibir datos por el puerto serie que se
visualizan en la pantalla LCD junto con la dirección de la memoria donde se almacena, tal como se
puede observar en la Figura L7.6.
Figura L7.6. El display LCD muestra el dato recibido y la posición de memoria donde es almacenado.
Una vez enviados los datos al dsPIC, el programa Minibootloader muestra un mensaje en pan
talla indicando que el envío ha finalizado. Figura L7.7. Luego el dsPIC activa el led S5 para indicar
que el proceso de grabación ha concluido. (Figura L7.8.)
Mirribootloa... X
Datos enviados
Aceptar 1 í
____ 1
Queda por com probar que la grabación ha sido correcta. Mediante el program a WinPicBOO se
leerá el contenido de la memoria de programa del dsPIC para efectuar esta comprobación.
Se coloca el interruptor del circuito de grabación en posición PC. Y en el program a WinPic800
se pulsa la opción Leer Todo. Tras realizar esta operación en la pestaña Datos se observa que en la
posición OxOOAOO se encuentran unos bytes distintos al resto, que son los enviados por el programa
Minibootloader. (Figura L7.9.)
LABORATORIO 7: GRABANDO LA MEMORIA FLASH DE UN PROGRAMA CON UN... 383
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 simultánea resulta bastante complicado. Este laboratorio tra
ta de conseguirlo mediante la configuración de tres fuentes de interrupción distintas. L a primera pro
viene de un temporizador de 32 bits, la segunda de una interrupción externa conectada al generador
lógico de la placa PIC School y la tercera del módulo UART.
La interrupción externa INTO se configura como la menos prioritaria y la ejecución de su rutina
de atención mostrará en el LCD el mensaje INTO. La siguiente interrupción con más nivel de prio
ridad será la del Temporizador de 32 bits, que aproximadamente cada segundo generará una inte
rrupción que visualizará en el LCD el mensaje TEMP32. Por último, la interrupción más prioritaria
será la proveniente del módulo UART que mostrará en la pantalla LCD el mensaje recibido por el
puerto serie del ordenador.
Al estar conectada la patita INTO al generador lógico de la tarjeta PTC School, podrán seleccio
narse distintas frecuencias para la generación de interrupciones externas. Si se selecciona una fre
cuencia de 1 Hz, se genera una interrupción por segundo y con una frecuencia de 10 H z se genera
rán 10 interrupciones por segundo.
385
386 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
RF3/
U 1TX
AP5 AP8
4 i
“^ R x O
3 < d > R F2/U 1R X
2 -X RA11 o
1 —X 4
C A N A L S E R IE F R E Q . OUT
La conexión de los periféricos queda resumida en la siguiente tabla y es muy similiar a la de labo
ratorios anteriores. Sólo se ha añadido un nuevo periférico que se encuentra en la tarjeta de desa
rrollo PIC School denominado Generador Lógico que se conecta a la patita RA11/1NT0.
El código principal del programa se encuentra recogido en un único fichero llamado laboratorios.s.
En él se encuentran las rutinas de atención a interrupciones, así como la configuración de las mis
mas y el programa principal de la aplicación.
‘Manejo de interrupciones
.include "p30f4013.inc"
.global _main
.global__INTOInterrupt
__INTOIntcrrupt:
;La interrupción de menos prioridad
PUSH WO ;Salva el registro WO en la pila
BCLR IFS0,#Ü ;Borra flag de interrupción de INTO
CALL INTO ;Escribe 1NT0 en pantalla
POP WO ;restaura el valor de WO
RETFTE ;retorna de la interrupción
La primera parte del código se encarga de la interrupción externa INTO. Nótese cóm o la prime
ra instrucción consiste en salvar en la pila los registros cuyo valor va a ser modificado por la rutina.
Esta rutina, al mostrar el mensaje INTO por pantalla, cambia el valor del registro WO, de ahí que la
primera instrucción sea PUSH WO para salvar su contenido actual en la pila de datos. A continua
ción, borra el flag de la interrupción para que no se vuelva a atender la misma interrupción, para po
der así mostrar el mensaje deseado, restaurar el valor de WO y retornar de la interrupción.
.global_T3Interrupt
•Interrupción del Timer de 32 bits
_T3Tnterrupt:
PUSH WO ;Salva los registros utilizados
PUSH W1
DI SI #0x3E00 ;Deshabilita interrupciones.
388 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
En la interrupción del temporizador puede apreciarse que se ha incluido una nueva instrucción.
Además de las instrucciones PUSH que salvan los datos de los registros empleados en la rutina, se em
plea la instrucción DIST. Esta instrucción deshabilita las interrupciones con prioridades comprendidas
entre 1 y 6, de forma que si se provoca una interrupción externa por INTO mientras se está ejecutan
do dicha instrucción, no se atendería durante el número de ciclos expresados por el argumento ordi
nal que sigue al nemónico. De esta manera, además de que se ha configurado la interrupción del tem
porizador con una prioridad superior a la de INTO se consigue que se atienda antes que la externa.
La instrucción DISI no afecta a las interrupciones provocadas por fuentes de interrupción de
prioridad 7 o mayor. La interrupción del UART tiene asignado nivel 7, para así superar la prioridad
de las interrupciones del timer y la externa INTO. Nótese también que si al salvar los registros me
diante la instrucción PUSH el primero fue WO y el segundo W l, el orden de recuperación con la ins
trucción POP debe ser el inverso, primero W 1 y luego WO.
Esta parte del program a ofrece la rutina de atención a la interrupción provocada por la recepción
de un dato por el puerto UART. La única diferencia con el código correspondiente a la atención por
la interrupción del temporizador es que tiene prioridad 7 y por tanto caso de ejecutarse simultánea
mente tendrá preferencia sobre el resto de interrupciones.
.text
_main:
;Inicialización del Timer
CLR T2CON Para cualquier operación con Timers
CLR T3CON
CLR TMR3 Borra el contenido del temporizador TMR3
CLR TMR2 Borra el contenido del temporizador TMR2
MOV #0x0040,WO Inicializa el temporizador con
MOV W0,PR3 : el valor 0x00400000 (1 segundos aprox.)
MOV #0x0000,W0 PR3 = 0040
MOV W0,PR2 PR2 = 0000
;PROGRAMA PRINCIPAL
PRINCIPAL:
CLRWDT
GOTO PRINCIPAL
390 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
El programa principal simplemente configura los periféricos utilizados y entra en un bucle infi
nito a la espera de que se dé alguna interrupción. Previamente se han configurado con los niveles de
prioridad seleccionados las distintas interrupciones a través de los bits de configuración de los re
gistros IPCO e IPC2.
Para com probar que la prioridad más alta se corresponde con la interrupción de la UART,
aunque el generador lógico trabaje a una frecuencia de 10 Hz, si se arranca el program a Hyper-
Terminal de Windows y se deja pulsada una tecla constantem ente, el mensaje más m ostrado es el
de dicha tecla y no el de las interrupciones liNTÜ o TEMP32.
LABORATORIO
Pilotando
JH U 9 un Fórmula 1
L9.1. OBJETIVOS
En las competiciones de Fórmula l los bólidos que compiten deben optimizar su velocidad y su pre
cisión para alcanzar el éxito, que en muchas ocasiones depende de una milésima de segundo. Para
gobernar estos vehículos tan sofisticados se necesita un procesador que reúna las características
apropiadas, como es el caso de los dsPIC® de Microchip.
Entre las características más relevantes que poseen los dsPIC para soportar la tarea de gobernar
un bólido de Fórmula 1 se citan las siguientes:
1.a Amplio abanico de canales de comunicación. Destacan el módulo UART, el bus fC , el módulo SPI,
el bus CAN y el módulo DCl. En esta simulación se utilizan 2 módulos UART del dsPIC30F4013 pa
ra visualizar información en una pantalla LCD y recibir “órdenes de equipo” del Ingeniero Jefe.
2.a El módulo de comparación de salida PWM se emplea para controlar con rigor la velocidad del mo
tor. Dicho motor está simulado en esta experiencia con uno eléctrico de corriente continua.
3:3 Interrupción externa de atención inmediata para implementar un pulsador de seguridad que de
tiene al vehículo inmediatamente
4 a Un excelente conversorAD que transforma la señal analógica correspondiente a la temperatura del
motor en un valor digital que se procesa y reduce la velocidad del motor cuando supera un umbral.
La temperatura se simula mediante un potenciómetro.
5.a Potentes instrucciones DSP que facilitan el cálculo matemático de todos los procesos.
Todos los recursos y periféricos que requiere este proyecto están disponibles en el sistema de
desarrollo PIC School, sobre el que se implementará el hardware y se grabará el program a de apli
cación sobre un dsPIC 30F40l3.Ú nicam cnte habrá que conectar un motor de corriente continua
externo a las salidas del driver de 4 canales que dispone la PIC School.
Con esta experiencia se pretenden cubrir los siguientes objetivos:
393
394 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Este laboratorio utiliza varios recursos de la placa PIC School para simular el funcionamiento de un
bólido de Fórm ula 1.
Por un lado, los interruptores EO y El de la sección de Entradas Digitales actuarán como acele
rador del vehículo, proporcionando 4 velocidades distintas. También el pulsador E l servirá como
botón de parada de emergencia, que hará que el vehículo se detenga inmediatamente.
En la sección de Entradas Analógicas se utilizará el potenciómetro Pl para simular un sensor de
temperatura colocado junto al motor del vehículo. Deberá medirse con precisión esta temperatura ya
que cuando se observe que el motor se calienta demasiado, entonces se limitará el número de re
voluciones por minuto.
Por otro lado, se utilizará el driver de 4 canales para conectar un motor de corriente continua y
así observar las variaciones de velocidad del vehículo.
También se utilizará el intefaz RS-232 para recibir y enviar datos y órdenes de equipo al Inge
niero Jefe.
Por último, se hará uso de la pantalla LCD para informar al piloto de la velocidad del vehículo,
temperatura del 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 través del módulo comparador de salida OC1 que debe ser
previamente inicializado. También se inicializará la puerta F del controlador para que a través de las
patitas RFO y RF1, el conductor del vehículo dé más o menos velocidad al motor conectado a las sa
lidas digitales.
El conversor analógico digital del dsPIC se conectará al potenciómetro P 1 de la placa PIC School,
que simule el valor de la temperatura del motor. Si dicha temperatura supera cierto umbral, la veloci
dad del motor será decrcmentada.
Por otro lado, a través de uno de los módulos UART del dsPIC, los ingenieros se podrán conec
tar vía serie con el vehículo y enviar 3 órdenes distintas al vehículo. La instrucción L solicitará a la
electrónica del vehículo a que envíe el dato de la temperatura a los ingenieros para que puedan es
tudiar su evolución.
El comando B hará que el motor baje sus revoluciones. Y por último, el comando S eliminará
cualquier restricción anterior iniciada con el comando B.
El vehículo dispondrá de un botón de emergencia que hará que se detenga el motor definitiva
mente. Para su implementación se utilizará una interrupción externa (INTO) que se conectará a la en
trada digital E7 de la placa PIC School.
Durante el funcionamiento del vehículo y gracias a otro módulo UART el piloto del vehículo
comprobará en la pantalla LCD la velocidad del motor y el valor de la temperatura.
LABORATORIO 9: PILOTANDO UN FÓRMULA 1 395
1) El módulo serie a LCD SYM20-AA para mostrar los mensajes al conductor en la pantalla
LCD.
2) La patita R A 11 /INTO a la entrada E7 para generar la interrupción externa y detener el ve
hículo.
3) ANO se conectará al potenciómetro P 1 para simular la entrada analógica de la temperatura del
motor.
4) U2TX a la patita TxD del interfaz serie para enviar información al Ingeniero del equipo.
5) U1RX a la patita RxD del mismo interfaz para recibir órdenes del equipo.
Además de la conexión típica del controlador serie a LCD, ya analizado en laboratorios anteriores,
la conexión del resto de los periféricos queda resumida en la Tabla L 9 .1.
396 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
Tabla L9.1. Tabla que presenta la conexión de las patitas del dsPIC30F4013 con los periféricos que
controlan el bólido de Fórmula 1.
El programa se encuentra dividido en varias partes principales. En la primera se definen las varia
bles globales a utilizar: Limitación que guardará la limitación de velocidad impuesta por los jefes de
equipo, Temperatura para almacenar la temperatura del motor del vehículo y Parar, variable de con
trol que hará que el coche se detenga cuando se dé la interrupción externa INTÜ. Debido a la longi
tud del programa, a continuación se expone la solución en lenguaje C que es menos extensa que la
solución en ensamblador y más fácil de comprender. No obstante, y para los lectores interesados, en
el CD que acompaña al libro, se incluye el fichero del programa en lenguaje Ensamblador con co
mentarios aclarativos.
LABORATORIO 9: PILOTANDO UN FÓRMULA 1 397
Figura L9.3. Montaje del proyecto de control de un bólido do Fórmula 1 sobre la placa PIC School.
#includc “p30f4013.tr
En la segunda parte se definen variables auxiliares para el envío de textos, números binarios y
caracteres a través de los módulos UART1 y UART2 para mostrar mensajes en la pantalla LCD y
en la consola de los Ingenieros del Equipo.
//RUTINAS AUXILIARES
¡f-------------------------- .—
_
else
i
while(U2STAbits.TRMT == 0);
U2TXREG -O ';
11
aux = aux » 1; //Rotación para pasar al
I //siguiente bit
//for (j=0;i<=OxFFFF;i++);
IECObits. ADTE = 1; //Habilita ADC
)
//Envía un dato al LCD
void txt2LCD(char caracter)
La cuarta parte contiene las rutinas de inicialización de los periféricos que ya se han estudiado
en laboratorios anteriores.
void Jniciali/aINTOO
{
IHCObits.INTOlH = 1;
)
ADCSSL = 1;
ADCHS = 0;
ADPCFG = 0;
ADCON3 = 0x0016;
ADCON2 = 0;
ADCON1 = 0x80E4;
IPCO = 0x4444;
IPC1= 0x4444;
IPC2 = 0x4444;
IECObits. ADIE = 1;// = 0x0800;
}
void lnicializaUARTl()
{ //Transmisión y recepción de datos a 9600bps
//con XT w/PLL 4X 4Mhz.
U1BRG =0x0019;
U1MODE =0x8000;
UISTA =0x0510;
UIMODE =0x8020;
IECObits. U I.RXIE = 1;
}
void InicializaUART2()
(
U2BRG=0x0019;
U2MODE=OxBOOO;
U2STA =0x0510;
U2MODE=0x8020;
}
Y en la quinta y última parte del programa se encuentra el bucle principal del programa que tras
inicializar los periféricos, va calculando la velocidad actual en función de los pulsadores conecta
dos a la puerta F, el valor del sensor de temperatura y las órdenes de equipo. Así mismo, muestra la
información referente a la velocidad y a la temperatura en la pantalla LCD al piloto del vehículo.
// PROGRAMA PRINCIPAL
//= = = = = = = = = = =
int main (void)
{
LABORATORIO 9: PILOTANDO UN FÓRMULA 1 401
\vhile(Parar == 1)
{
int Velocidad;
int Protección;
Protección = 0;
a s m .(,' c l r w ^ ,:,)¿.
Velocidad = 0;
//te e los interruptores de la puerta F para elegir la velocidad
if (PORTFbits.RFO == 1) Velocidad = Velocidad + l;
if (PORTFbits.RFl == 1) Velocidad = Velocidad + 2;
txt2LCD()f§
//Muestra temperatura en LCD y protege el motor
//si la temperatura es superior a 0x07FF
if (Temperatura >= 0x07FF)
í
msg2LCD("T Alta ”,7);
Protección = 0x10;
• else :
msg2 LC D("T. Baj a“,7):
//Calcula velocidad en función de la temperatura y de las órdenes de equipo
switeli (^lociclad) : ::
case 0:
OC1RS = 0;
break;
case 1:
OC1RS = (0x0080 - Protección - limitación);
break;
402 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
case 2:
OC1RS = (OxOOCO - Protección - limitación);
'•"Bréale;
case 3:
OC1RS =' (0x0100 - Protección - limitación);
break;
)
//Muestra mensaje de velocidad en pantalla
switch (ÓC1RS)
I
case 0x0:
msg2LCD("Vcl: 0 \7);
break;
case OxAO:
msg2LCD("Vel: A0*\7);
break;
case 0xB0:
msg2LCD("Vel: B0”,7);
break;
caseOxCO:
msg2LCD(M
Vel: C0"/7);
break;
case 0x60:
msg2LCD("VeI: 60";7);
break;
case 0x70:
msg2LCD("Vcl: 70,,t7);
break;
case 0x80:
msg2LCD(”Vel: 80",7);
break;
case OxEO:
msg2LCD("Vel: E0,f,7);
break;
case OxFO:
msg2LCD("Vel: F0",7);
break:
case 0x100:
msg2LCD("Vcl:100",7);
break;
}
//Retardo para una correcta visuali/.ación en la pantalla LCD
int i; for(i=0;i<=0x 1FFF:i++);
}
//Parada de emergencia
OCIRS = 0;
txt2LCD( 12);
msg2LCD(M STOP",4);
//Bucle infinito
whileí 1)
asm(”clrwdt");
}
LABORATORIO 9: PILOTANDO UN FÓRMULA 1 403
Una vez com pilado el proyecto, grabado el mismo en el dsPIC a través 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 PÍC School para poder enviar y
recibir las instrucciones de equipo a través del program a HyperTerminal de W indows u otro si
milar.
Al pasar el interruptor del circuito de grabación de la placa PIC School a modo RUN comenza
rá la ejecución del laboratorio.
En función de los valores introducidos en los interruptores EO y E l la velocidad del motor va
riará desde 0x0000 hasta 0x0100. Dicho valor se indicará en la pantalla LCD.
En esta misma pantalla se puede leer si la temperatura es Alta o Baja. Con el potenciómetro P1
podrá variarse dicha temperatura y así podrá observarse cómo al variar la temperatura a Alta el mo
tor baja su velocidad para protegerse.
•V '
f
1 ;>•£;, % y •- • •••:’
g „ .. . .
_¡.
Frx
Figura L9.5. A l pasar la temperatura a Alta la velocidad del motor baja automáticamente.
- com lv - HyperTerminal _ I ld f x !
Archivo BUclín Ver Uamer Ir ¿referí'- Ayycb
De# ts S -Oc9 ES*
0000101001010080
>
|0:00:12ureitafa AH3W 9600frN;l ■
— - ;r MAY .
Figura L9.7. La velocidad del m otor baja más debido a la instrucción del equipo.
f:
Las limitaciones de velocidad se mantendrán a pesar de que se varíe el valor de los interrupto
res de control de velocidad.
índice
405
406 dsPIC. DISEÑO PRÁCTICO DE APLICACIONES
El L U que acompaña al La primera parte del libro tiene un marcado carácter teórico y en
libro contiene todos los sus 12 capítulos se describe la arquitectura, el funcionamiento,
programas necesarios para los periféricos y el repertorio de instrucciones de los dsPIC. La
el desarrollo de todas las segunda parte se destina a manejar diversas herramientas soft
aplicaciones, así como los ware de Microchip para la confección, inicialización, compilación
archivos con los códigos y simulación de programas. Finalmente, la tercera parte, la más
fuente en ensamblador y C importante ajuicio de los autores, desarrolla íntegramente el
de los ejercicios y proyectos hardware y el software de 9 proyectos específicos para dsPIC
propuestos. basándose en el extraordinario sistema de desarrollo PIC School.