Upload
winnifred-ganem-fosters
View
70
Download
0
Embed Size (px)
Citation preview
Capítulo 1
Telecontrol y microcontroladores
1.1 Introducción
El rápido avance de las telecomunicaciones en los últimos años ha supuesto una
auténtica revolución en nuestras vidas. En los hogares nadie se plantea levantarse para
cambiar el canal de la televisión, encender el equipo de música o el aparato de aire
acondicionado. El mando a distancia al igual que el teléfono móvil se han convertido en
elementos tan cotidianos que no se les da apenas importancia. La posibilidad de
mantener una conexión permanente a internet por un precio módico es una realidad ya
presente en muchos hogares. Todos estos avances hacen que cada vez se demanden
nuevos dispositivos de telecontrol que puedan ser activados desde cualquier lugar y que
permitan realizar acciones tales como encender o apagar la calefacción, o encender el
riego del jardín.
El término telecontrol, contiene el prefijo “tele” que proviene del griego cuyo
significado es “lejos”. Por tanto etimológicamente cuando hablamos de telecontrol nos
estamos refiriendo a controlar algo desde lejos o de forma remota. Esto que parece tan
trivial y sencillo hoy en día, ha sido y es de una dificultad tecnológica importante.
Debemos notar que las primeras aplicaciones de telecontrol aparecen en el ámbito
industrial durante la década de los sesenta, tan sólo hace unos cuarenta años.
El control a distancia de las máquinas ha sido una necesidad que ha ido apareciendo con
la evolución de la industria. Una breve reseña desde sus orígenes nos permitirá tomar
conciencia del esfuerzo científico y tecnológico que ha supuesto llegar al estado actual.
Las industrias, en sus inicios, eran grandes talleres con algunos ingenios mecánicos que
permitían elevar la producción respecto del método tradicional y que debido a su
complejidad eran manejadas por maestros artesanos con un importante grado de
conocimiento técnico. La mecanización consistió en descomponer el trabajo artesanal,
necesitado de bastantes conocimientos, en tareas simples y repetitivas que eran
ejecutadas por máquinas cada vez más evolucionadas y que, a su vez, requerían una
intervención cada vez menor del hombre en la producción. A medida que aumentaba la
1
automatización fueron apareciendo productos cada vez más elaborados cuyos procesos
de fabricación eran cada vez más complejos. De esta forma nace la necesidad de un
centro de mando de todo el proceso que permitiese una mejor coordinación de los
diferentes elementos que lo componen.
La industria nace con el descubrimiento del vapor como medio para la transformación
de la energía calorífica en mecánica. Las técnicas en valvulería y calderería fueron las
primeras en despegar y aún hoy en día son muchas las industrias que utilizan el vapor en
alguna fase del proceso de fabricación. Los primeros cuadros de mandos permitían la
operación de los diferentes elementos mediante accionamientos mecánicos como la
apertura y el cierre manual de válvulas, movimiento de palancas, etc.
El siguiente paso en la automatización y en el perfeccionamiento de los procesos fue la
regulación. Según fue aumentando la complejidad de los productos (textiles, químicos,
metalúrgicos, etc.) y según fueron apareciendo maquinas cada vez más grandes,
empezaron a ser necesarios sistemas de regulación continua.
La regulación permitió la mejora de los procesos industriales, obteniendo mayores
rendimientos mediante la intervención coordinada de grandes máquinas con mayor
capacidad de producción. El aumento del tamaño de éstas las convertía en grandes
devoradoras de energía que movían grandes cantidades de materias primas en el proceso
de fabricación. Las primeras regulaciones estaban basadas en la neumática. La acción de
la presión del aire a través de los conductos y la existencia de válvulas de doble acción,
actuadores y otros dispositivos permitía la centralización del control.
La llegada de los dispositivos eléctricos y electromecánicos supuso un nuevo empujón
hacia la centralización del control de las industrias, ya que permitían transmitir las
señales eléctricas y accionar los actuadores a mayor distancia y con un menor coste.
El hecho de que la unidad productiva se concentrase en un edificio o fábrica ha hecho
que las necesidades de telecontrol se limiten a la centralización de los controles de las
diferentes máquinas que intervienen en el proceso. En general, en las grandes industrias
una parada súbita (también conocida como disparo) suele tener graves consecuencias y
en muchas ocasiones importantes pérdidas económicas hasta que se normaliza de nuevo
la producción. Por este motivo, los industriales han sido tradicionalmente bastante
reacios a introducir cambios que no ofreciesen una clara ventaja.
2
Las primeras industrias en demandar nuevas necesidades de telecontrol fueron aquéllas
cuya producción se hallaba distribuida geográficamente. Un ejemplo de ellas son las
industrias petroleras que transportaban el combustible por medio de oleoductos o
gasoductos que discurrían por extensas zonas de terreno con estaciones de bombeo o
compresión distribuidas por todo el recorrido.
Fue en la década de los sesenta cuando éstas empezaron a tender líneas de
telecomunicación paralelas a los conductos que permitieron la centralización del control
de las subestaciones de bombeo y compresión por medio del telecontrol.
Uno de los problemas omnipresentes en este proceso ha sido la fiabilidad. Las
tecnologías de telecontrol en sus inicios sólo tenían justificación en un número muy
reducido de aplicaciones debido al elevado coste de las mismas y la escasa fiabilidad
que ofrecían.
El enorme avance de la tecnología electrónica y lo ajustado de los precios hace que hoy
podamos disponer de equipos para el control y telecontrol de dispositivos y máquinas,
tanto de la gama profesional como de la doméstica, a muy bajo precio.
Dejando a un lado los equipos de la gama profesional en los que se busca una alta
fiabilidad y por tanto el coste es más elevado, es posible encontrar una diversidad de
dispositivos en el mercado de consumo destinados al telecontrol dentro del ámbito
doméstico, como pueden ser mandos para puertas de garaje, alarmas de intrusión,
programadores de riego, dispositivos para la activación telefónica de aparatos como la
calefacción, etc.
La forma de vida actual obliga a una continua evolución de todo aquello que nos rodea,
evolución a la que no escapan nuestros hogares; desde la búsqueda de nuevos estilos de
diseño, técnicas de edificación y nuevos materiales hasta la incorporación de
tecnologías que gestionen el uso de la energía, aumenten el confort y la seguridad y que
permitan un total control desde el interior o el exterior de la casa.
Las necesidades de seguridad, junto con las de cobijo, fueron el origen de la aparición
del concepto de vivienda. No obstante, las necesidades actuales son muy diferentes de
las de hace cincuenta años. La vivienda es, en la mayoría de los casos, la principal
inversión que realiza una familia a lo largo de su vida y las características del entorno
social en el que nos movemos hacen que nuestra preocupación principal se centre
actualmente en posibles agresiones exteriores, robo, incendio, intrusión, fugas de agua,
3
etc. Las medidas tradicionales de seguridad como las puertas blindadas, rejas en las
ventanas, sistemas de alarma obsoletos, perros guardianes, no dan ya respuesta a las
necesidades de seguridad actuales.
En el entorno doméstico existen una multitud de aplicaciones y servicios destinados a
mejorar nuestra seguridad y confort que han dado lugar a un área tecnológica que se
denomina domótica.
A continuación se detallan algunos de los servicios que pueden ser implementados en
una vivienda.
1.1.1 Servicios domóticos
1.1.1.1Gestión del sistema de calefacción y refrigeración
El sistema de gestión, a nivel central, permitirá la programación diaria y semanal, así
como las consignas de regulación de la temperatura de cada una de las zonas; estas
últimas pueden ajustarse de modo individual desde cada uno de los termostatos de
ambiente de que disponen. Se efectuará la optimización, dependencia a dependencia, en
función de la ocupación, de las temperaturas interior y exterior y de las condiciones
térmicas de la edificación.
1.1.1.2Estadísticas de consumo
El sistema contabiliza y permite conocer el consumo de los sistemas de calefacción,
refrigeración, ACS, agua y teléfono, empleando para ello contadores con salida de
impulsos. La presentación de los consumos es de tipo totalizador o parcial, según
intervalos de tiempo y pueden realizarse gráficas estadísticas.
1.1.1.3Control de las tomas eléctricas
Se realiza el control sobre diferentes tomas eléctricas, lo que permite gestionar el
consumo energético de electrodomésticos conectándolos a las horas más propicias de
consumo en función de las tarifas eléctricas. También puede gestionar funciones de
conexión y desconexión de dispositivos para realizar una multitud de funciones tales
como despertador, desconexión de enchufes en las zonas de juego de los niños,
simulación de presencia, etc.
1.1.1.4Control de las persianas y toldos
Las motorizaciones de toldos y persianas se controlan mediante pulsadores locales, de
planta y a través del sistema de gestión centralizado. Permite la programación horaria y
4
semanal por el usuario, actuando en función de datos captados como son la insolación,
las temperaturas interior y exterior, la pluviometría y la velocidad del viento.
1.1.1.5Control de la iluminación exterior
Puede realizarse un control sobre diferentes zonas de alumbrado exterior en función de
un programa horario, semanal, mensual y crepuscular.
1.1.1.6Control del riego en jardín y jardineras
Puede realizarse una programación horaria y semanal secuenciada sobre diferentes
zonas de jardín y jardineras, en función de la humedad del terreno, la insolación y la
pluviometría, condicionando el funcionamiento de los aspersores a la no presencia de
personas en el jardín, para evitar sobresaltos derivados de la conexión del riego.
1.1.1.7Gestión de la piscina
Al margen de los sistemas habituales de programación, según la tarifa eléctrica, de la
puesta en marcha de la bomba para limpieza de la piscina, se incluye el control de la
limpieza de los filtros y la detección del porcentaje de cloro en el agua, con la
corrección del mismo.
1.1.1.8Gestión de la alarma antiintrusión
La alarma antiintrusión se gestiona según dos esquemas de trabajo: ausencia o presencia
de los usuarios en el interior de la vivienda.
1.1.1.9Control de accesos
Se realiza el control de accesos mediante teclado codificador y/o lector de tarjetas
magnéticas o inteligentes, con actuación sobre la puerta principal de acceso. Es posible
un programa de restricción de horarios de uso y código de seguridad antiatraco, con
apertura de la puerta y disparo de alarma silenciosa. El acceso al garaje se controla
mediante sistema de radio, con codificación ternaria, que inicia la temporización de
entrada del sistema de alarma, al tiempo que realiza la apertura de la puerta basculante.
1.1.1.10 Gestión de la alarma médica/pánico
Gestión de la alarma médica/pánico a partir de un medallón emisor por radio y un
receptor específico conectado al bus de comunicaciones. Es posible la selección
mediante programa del tipo de actuación tras una alarma: transmisor telefónico, sirena,
etc.
5
1.1.1.11 Gestión de la alarma de incendio
Se realiza la detección infrarroja/termovelocimétrica de incendios en los puntos de
mayor riesgo: garaje, cocina, salón comedor, dormitorios, etc. Tras la detección de
incendio se desencadena una actuación dirigida a advertir a las personas presentes en la
vivienda mediante la señalización interior y la actuación de la sirena, seguidas de
llamadas de aviso a los números telefónicos de emergencia.
1.1.1.12 Gestión de la alarma de inundación
Si se detecta agua en el pavimento de las zonas de riesgo: cuartos de baño, cocina y
lavadero, se acciona la electroválvula de corte de suministro de agua a la vivienda y se
inician las llamadas de aviso a los números de teléfono prefijados.
1.1.1.13 Gestión de la alarma de monóxido de carbono
Esta alarma detecta el grado de toxicidad por concentración de monóxido de carbono en
el garaje. Tras la detección de una concentración peligrosa de gas tóxico se produce la
puesta en marcha del sistema de ventilación del garaje, así como la actuación de la
señalización interior de la vivienda y la sirena y se inician las llamadas de aviso a los
números de teléfono prefijados.
1.1.1.14 Supervisión de la temperatura del congelador
Si se detecta la elevación de la temperatura del congelador por encima del umbral
prefijado se activa la señalización interior de la vivienda y el transmisor telefónico.
1.1.1.15 Transmisor telefónico
Hay un sistema de transmisión telefónica que puede realizar llamadas automáticas y
secuenciales a diferentes números de abonados particulares y a los servicios de
emergencia o compañía de seguridad. Tras efectuar la llamada de aviso, existe la
posibilidad de realizar la escucha del local bajo protección.
1.1.1.16 Distribución de audio
La distribución del sistema de audio se realiza sobre diferentes zonas, para sonorización
ambiental, con mando local sobre el equipo de música (marcha/paro) y control
individual del volumen en la dependencia, admitiendo posibilidad de selección entre
varios canales. Puede emplearse el sistema de sonorización para la difusión de mensajes
vocales de alarma que adviertan a los usuarios de las posibles eventualidades e
incidencias existentes en la instalación.
6
1.1.2 Las redes de comunicaciones
Para implantar cualquiera de los sistemas anteriormente descritos en una vivienda es
necesaria una planificación previa de las redes tanto eléctrica como de comunicaciones
necesarias. Durante la construcción de una vivienda se puede prever la instalación de las
conducciones y redes necesarias para una instalación domótica sin que ello suponga un
sobreprecio muy grande con respecto a una instalación convencional. El problema surge
cuando se quiere hacer la instalación en una vivienda ya construida debido a la
necesidad de llevar las conexiones de red a los diferentes puntos de la instalación, labor
ésta que supone la realización de las canalizaciones necesarias y que suele ser bastante
costoso o sencillamente inviable porque supone hacer obras.
En una instalación domótica, siempre se deberá disponer de una serie de elementos
distribuidos a lo largo de ésta, que servirán para recoger información sobre el estado de
aquellas variables que intervienen en los procesos de regulación y control; a estos
elementos se les denomina captadores, su misión es convertir las variables físicas o
eléctricas que recogen en señales eléctricas comprensibles por el sistema. De la misma
manera, siempre que se deba efectuar una operación de gobierno sobre un elemento bajo
control, se deberá disponer de actuadores, normalmente elementos electromecánicos,
adecuados a la acción a realizar. Toda la información que deba transitar entre los
captadores y el centro de gestión que rige la instalación y entre éste y los actuadores
utilizará para su transporte un soporte de comunicaciones adecuado al tipo de
información a transmitir.
A la hora de resolver la comunicación entre dispositivos se pueden dar varias
situaciones:
Varios dispositivos con canales dedicados: tan sólo hay que
acceder al canal del dispositivo en cuestión para resolver la
comunicación.
Varios dispositivos receptores y un único transmisor
compartiendo un mismo canal: la comunicación se puede resolver
por difusión asignando un identificador a cada receptor para
discriminar a quién va dirigida la orden.
Varios transmisores compartiendo un mismo canal: en este caso
pueden producirse colisiones que habrá que resolver. Una forma
7
sencilla de resolver la contienda es realizando cada transmisión bajo
demanda del centro de control. El principal inconveniente estriba en
que hay que aumentar la complejidad del captador para que pueda
recibir las órdenes del centro de control. Si la recepción de los datos
no es un factor crítico en el tiempo, como sucede en la mayoría de las
aplicaciones, simplemente se tomarán medidas para reducir la
probabilidad de colisión y en caso de que se produzca se descartan
las medidas afectadas.
Para cada captador y actuador habrá que elegir la forma de establecer el canal de
comunicación con el centro de control. Algunos de los posibles medios de
comunicación a nuestro alcance son:
1.1.2.1Comunicación alámbrica
1.1.2.1.1 Cableado específico
Esta solución goza de una gran fiabilidad y minimiza la complejidad de cada
dispositivo. Resulta idónea en el caso de nueva construcción pero es bastante costosa e
incómoda en los demás casos.
1.1.2.1.2 Utilización de la red eléctrica
Aprovecha la red eléctrica existente en todas las viviendas y locales para utilizarla como
red de comunicaciones entre los distintos dispositivos. Los diferentes sistemas
disponibles utilizan un módem para la red eléctrica. No existe un estándar único en el
mercado pudiéndose optar entre diferentes sistemas propietarios como son Cebus,
Lontalk, X10, etc. Al no tratarse de un mercado maduro es difícil decantarse por un
sistema u otro.
1.1.2.2Comunicación inalámbrica
1.1.2.2.1 Transmisión por radio
Es una solución interesante para multitud de aplicaciones. Existen en el mercado
transceptores digitales de onda media a precios muy asequibles y muy fáciles de operar.
El principal problema que presentan es que todos los dispositivos acceden al medio
radioeléctrico por contienda y se debe resolver el problema de las colisiones en el caso
de que varios transmisores operen al mismo tiempo.
8
1.1.2.2.2 Transmisión óptica por infrarrojos
Es la solución más utilizada en la actualidad en el entorno doméstico. Muchos de los
electrodomésticos de uso común disponen de un mando a distancia por infrarrojos, lo
que puede aprovecharse para su control por el sistema con sólo incorporar el transmisor
correspondiente. Los principales inconvenientes residen en la necesidad de que exista
visión directa entre el transmisor y el receptor y en el acceso al medio por contienda
cuando existen varios transmisores.
1.1.3 Sistemas basados en un microcontrolador
La innovación tecnológica pone a nuestro alcance la capacidad de poner en práctica, de
un modo sencillo, una multitud de aplicaciones que hasta hace poco eran impensables
debido a su complejidad o elevado coste. Para que una aplicación desarrollada con un
sistema basado en un microprocesador pueda interactuar con el mundo real necesita una
interfaz adecuada al propósito de la aplicación que se desarrolla. Si, por ejemplo, se está
desarrollando un sistema para el control de un ascensor, será necesario que reciba las
diferentes señales como son los detectores de puerta cerrada, las células de presencia en
el paso de puertas, las botoneras de llamada, etc. y deberá ser capaz de accionar los
motores de apertura y cierre de puertas así como del propio ascensor.
1.1.3.1El microcontrolador Motorola MC68331
El MC68331 es un microprocesador de 32 bits que combina una alta capacidad en el
tratamiento de datos con un potente subsistema de periféricos. El microcontrolador se
compone de los cuatro módulos siguientes:
Unidad Central de Proceso (CPU 32).
Módulo de Integración del Sistema (SIM).
Temporizador de Propósito General (GPT).
Módulo de Comunicación Serie (QSM).
Los principales dispositivos, puertos y periféricos que integra son:
Generador de interrupciones periódicas.
Sistema de supervisión de bloqueos que genera un reset cuando se
produce un bloqueo del sistema (Software Watchdog Monitor).
Dos puertos E y F de entradas/salidas configurables.
9
12 señales programables para selección de dispositivos (chip-select),
7 de las cuales pueden configurarse como salidas de propósito
general bajo la denominación de puerto C.
Modo de Depuración en Segundo Plano (BDM), que permite que
otro sistema tome el control del microcontrolador.
2 interfaces de comunicación serie (QSM), una de propósito general
y otra destinada a periféricos.
Unidad de captura/comparación de señales que contiene tres canales
de captura, cuatro de comparación y un octavo canal que puede
configurarse indistintamente de un modo u otro.
Un acumulador de impulsos de 8 bits.
2 moduladores de ancho de pulso (PWM).
Cualquier sistema basado en un microprocesador presenta la enorme ventaja de tratarse
de una herramienta de propósito general. Las utilidades de que dispone el MC68331
unidas a la potencia del procesador hacen que pueda implementarse una multitud de
aplicaciones sin apenas necesidad de circuitería externa simplificando aún más el
desarrollo de los prototipos. A pesar de ello, es necesario disponer de una serie de
interfaces que permitan la captación de los datos que han de ser procesados.
1.1.4 Objetivos
Los objetivos que se persiguen son el desarrollo de prácticas guiadas para que aquellos
alumnos que, con una especial motivación, deseen realizar su propio sistema digital
basado en el microcontrolador Motorola 68331 dispongan de algunas interfaces ya
resueltas de modo que no supongan una gran dificultad añadida al trabajo académico.
El primer objetivo del presente proyecto ha sido disponer del sistema basado en el
microcontrolador totalmente operativo. Después se han ido incorporando diferentes
interfaces y dispositivos para cubrir un abanico de aplicaciones.
Uno de los interfaces que ha sido objeto de interés ha sido el Módem para Red
Eléctrica. Después de realizar algunos estudios y desarrollos, no ha sido posible
implementarlo por no encontrar en el mercado unidades sueltas de algunos de los
componentes. Sólo era posible conseguirlos por encargo, para lo cual se exigía un
pedido mínimo de 25 o 50 unidades, según el componente.
10
Se ha optado por incluir este estudio previo en un apéndice para que pueda ser utilizado
como punto de partida por cualquier alumno en un futuro.
Los interfaces contenidos en la presente memoria son:
DISPLAY LCD.
TECLADO MATRICIAL.
REPRODUCTOR DE MENSAJES.
TRANSCEPTOR RADIO.
TRANSCEPTOR POR INFRARROJOS.
INTERFAZ TELEFÓNICO.
Capítulo 2
Montaje y descripción de la placa entrenadora basada en el microcontrolador Motorola 68331
2.1 Antecedentes
Durante el curso 1999/2000, el Departamento de Ingeniería Electrónica pone en marcha
una experiencia docente relacionada con la asignatura de Laboratorio de Sistemas
Electrónicos Digitales que consiste en facilitar a aquellos alumnos que lo deseen la
posibilidad de adquirir a un prototipo de placa entrenadora basada en el
Microcontrolador Motorola 68331. Con esta iniciativa se da la oportunidad de proponer
el desarrollo de una práctica especial a los alumnos que, con una especial motivación,
desean hacer algo diferente.
La placa entrenadora de bajo coste permite trasladar el laboratorio a la casa del alumno
disponiendo así de una potente herramienta con la que desarrollar de forma autónoma
multitud de aplicaciones.
La placa entrenadora, de fibra de vidrio, con unas dimensiones de 205 x 110 mm. tiene
soldado el microcontrolador en su parte central. El MC68331 es de aspecto cuadrado
disponiendo de 33 terminales en cada lado para sumar un total de 132. Alrededor de éste
11
se encuentran perforados 136 agujeros que conectan con los 132 terminales del Micro.
El resto de la placa también se encuentra perforada para poder insertar terminales de
“wire-wrapping”.
El montaje de la placa entrenadora es una tarea bastante laboriosa. Para el ensamblaje
de todos los subsistemas necesarios para el funcionamiento del entrenador se siguieron
las instrucciones facilitadas por el fabricante Motorola (“An Introducción to the
MC68332”, by Sharon Darley, Mark Maiolani, and Charles Melear -1995). El primer
prototipo fue montado por Tomás Palacios Gutiérrez quien redactó un documento con
unas primeras instrucciones de montaje. Éstas sirvieron de base para perfeccionar el
prototipo y confeccionar posteriores instrucciones de montaje.
2.2 Instrucciones de montaje
El prototipo completo puede considerarse que está formado por nueve subsistemas o
módulos más simples que pueden ser ensamblados y probados independientemente. De
esta forma podemos organizar el montaje en una serie de pasos que nos permitan
garantizar que el proceso de ensamblado del prototipo completo se realiza
correctamente, detectando los errores que pudieran cometerse mediante pruebas
intermedias. Los diferentes pasos a seguir se relacionan a continuación:
1) Microcontrolador.
2) Regulador de tensión.
3) Replanteo general del circuito.
4) Circuito de reloj.
5) Filtros de reloj de sistema.
6) Circuito de configuración del micro.
7) Reset del sistema.
8) Resistencias de pull-up.
9) Alimentación del microcontrolador.
10) Prueba de funcionamiento.
11) Comunicación BDM (Background Debug Mode).
12) Memoria.
12
13) Comunicación serie.
Figura 1 – Croquis de montaje de los elementos de la placa.
2.2.1 Microcontrolador
Lo primero que haremos será colocar las tiras de “wrapping” en las conexiones del
micro. Podemos observar que cada banda de la placa tiene dos filas con 17
perforaciones. Como el micro sólo tiene 33 patillas por banda, uno de los extremos de la
banda más exterior no tiene conexión con el micro. Para una mejor localización futura
de los pines cortaremos una tira de 17 y otra de 16 pines y las insertaremos en su lugar
cuidando de dejar libre el agujero sin conexión. Empezaremos soldando un terminal de
cada extremo de la tira para que se sujete y después seguiremos soldando todos y cada
uno de los 33 pines para asegurar el contacto eléctrico con el micro. A la hora de soldar
13
se recomienda que se tenga cuidado de no sobrecalentar el micro. Si observamos que
está muy caliente, esperar unos minutos a que se enfríe. Como recomendación, se puede
soldar cada vez un pin del extremo opuesto para que el calor se disipe mejor. Cabe
comentar que una persona entrenada en la soldadura puede soldar todas las patillas del
tirón sin calentar peligrosamente el micro.
Repetiremos la operación en cada una de las tres bandas restantes.
2.2.2 Regulador de tensión
Toda la electrónica del prototipo precisa ser alimentada a 5 voltios. Para ello se utilizará
un regulador L7805 que se conectará según el esquema adjunto. Comenzar el montaje
con los bornes, luego se montarán los condensadores C1 y C2 y finalmente el L7805 en
las posiciones indicadas en el croquis. Al tratarse del circuito de alimentación que va a
tener que soportar toda la corriente del sistema, se recomienda soldar los cuatro
componentes y realizar las conexiones con cable más grueso para evitar caídas de
tensión. Conectar la salida de tensión regulada y la masa a las líneas de alimentación
que se encuentran en ambos laterales de la placa. Para obtener una mejor inmunidad al
ruido, conectar la masa a las tiras interiores. En el croquis aparecen en negro la masa y
en rojo las líneas de alimentación. No debemos olvidarnos de colocar y conectar las dos
tiras cortas que aparecen junto al Microcontrolador que están dispuestas para distribuir
la alimentación de éste y sobre las cuales se van a colocar tres condensadores, C13, C14
y C15, que van a proporcionar, por su proximidad al procesador, un mejor filtrado de la
alimentación. El primero (C13 - 33F.) es un condensador electrolítico adecuado para
el filtrado de baja frecuencia, el segundo es cerámico (C14 - 22nF.) para el filtrado de
las altas frecuencias y el tercero de plástico (C15 – 100nF.) para las frecuencias medias.
Con esta disposición se conseguirá una mejor inmunidad al ruido de alimentación. En el
montaje aparecen dos condensadores electrolíticos, C1 y C13, con los que deberá
ponerse especial cuidado con la polaridad para no dañarlos y evitar que puedan reventar.
14
Figura 2 – Esquema de conexión del regulador de tensión.
En ningún caso deberemos conectar las líneas de alimentación del micro, ya que
primero deberá probarse el correcto funcionamiento del regulador. Por último se
recomienda alimentar los bornes de entrada con una tensión de entre 8 y 10 voltios y se
medirá en las líneas de alimentación los 5 voltios que debe proporcionar el regulador.
Para todas las pruebas iniciales es recomendable utilizar una fuente que permita limitar
la corriente de salida. Se puede limitar la corriente máxima a 150 mA. (máximo 200
mA.). En caso de no disponer de una fuente de estas características se deberá colocar un
fusible de entre 150 y 200 mA. en la entrada de alimentación, siendo recomendable
dejarlo de forma permanente, de este modo, en caso de producirse un cortocircuito
accidental el prototipo estará protegido siempre.
2.2.3 Replanteo general del circuito
Antes de proseguir con el montaje de los siguientes módulos es interesante realizar un
replanteo de todos los componentes sobre la placa con el fin de garantizar que todos
caben conforme al croquis. Esto facilitará mucho el montaje ya que las instrucciones
existentes se refieren a esta colocación. Las tiras correspondientes a los diferentes
circuitos integrados se pueden cortar e insertar en el lugar que les corresponde. En esta
fase de replanteo no se recomienda soldar las tiras ya que para el montaje del circuito de
reloj, del filtro y del circuito de reset puede venir bien desmontar las tiras de alrededor
para poder soldar con más facilidad.
2.2.4 Circuito de reloj
El sistema de generación de reloj del MC68331 es un tanto peculiar. Utiliza un
oscilador Pierce, también conocido como oscilador resonante paralelo, externo con una
frecuencia de 32.768 Hz. Esta frecuencia de referencia es multiplicada por un factor que
va desde 4 hasta 640, en función del valor escrito en el registro SYNCR, generando una
frecuencia de reloj que puede llegar hasta los 20.972 Khz., aunque, en principio, se va a
trabajar a 8.389 Khz.
El circuito oscilador es muy sensible a la suciedad, grasa y otros restos materiales sobre
el circuito impreso que puedan modificar la conductividad entre las conexiones, por no
hablar de soldaduras o contactos deficientes. Cualquiera de estos problemas van a
provocar que el circuito no oscile.
15
La longitud de las pistas, cableados, disposición de los componentes, etc. introducen
efectos resistivos y capacitivos que pueden alterar el correcto funcionamiento del
oscilador.
Por todos estos motivos se recomienda la colocación del oscilador lo más próximo
posible a las conexiones del micro y que se suelden los componentes al circuito impreso
para garantizar un buen contacto eléctrico.
Para la conexión de los componentes se recomienda colocarlos según el croquis de la
figura 1 y siguiendo el esquema de la figura 3.
Figura 3 – Esquema de conexión del oscilador de cuarzo.
2.2.5 Filtros de reloj del sistema
El circuito del apartado anterior junto con la electrónica interna conforma un
sintetizador PLL (Phase Lock Loop) de frecuencia. Para garantizar la estabilidad y un
adecuado rendimiento del PLL es necesario incorporar tan próximo a los terminales del
microcontrolador como sea posible el circuito de filtro capacitivo de la figura. Para su
montaje síganse el croquis y el esquema adjuntos.
16
Figura 4 – Red de filtrado del reloj del sistema.
2.2.6 Circuito de configuración del micro
El microcontrolador MC68331 dispone de diversos modos de funcionamiento que
pueden ser configurados durante la secuencia de reset. Para ello se dispone de 13
microinterruptores que permiten configurar los diferentes modos. Durante la secuencia
de reset deberán aplicarse las señales seleccionadas con los microinterruptores a los
terminales de configuración del micro y después deberán quedar en estado de alta
impedancia para permitir que éstos realicen su función normal.
En el prototipo se han montado dos grupos de ocho microinterruptores con los que se
podrán seleccionar los diferentes modos. Como sólo hay trece señales, tres de ellos
quedan sin uso. En la tabla adjunta se indica el número de microinterruptor, el pin sobre
el que actúa y la función del mismo dependiendo de la selección realizada. Durante la
secuencia de reset se configuran tanto las opciones de funcionamiento del micro como
la función de aquellos pines que pueden realizar dos funciones alternativas.
Microinterruptor Pin de selección
Función cuando está en posición de +5V
Función cuando está en posición de 0V
1 DATA0 El microcontrolador funciona con un bus de
memoria de 16 bits.
El microcontrolador funciona con un bus de
memoria de 8 bits.2 DATA1 #CS0
#CS1#CS2
#BR#BG
#BGACK3 DATA2 #CS3
#CS4#CS5
FC0FC1FC2
45678
DATA3DATA4DATA5DATA6DATA7
#CS6#CS[7:6]#CS[8:6]#CS[9:6]#CS[10:6]
ADDR19ADDR[20:19]ADDR[21:19]ADDR[22:19]ADDR[23:19]
17
1’ DATA8 #DSACK0, #DSACK1, #AVEC, #DS, #AS,
#SIZE
PORTE como puerto de entrada/salida
2’ DATA9 #IRQ[7:1], MODCLK PORTF como puerto de entrada/salida
4’ DATA11 Modo esclavo desactivado Modo esclavo activado6’ MODCLK VCO = Reloj del sistema EXTAL = Reloj del sistema8’ #BKPT Modo de depuración
desactivadoModo de depuración
activado
Tabla 1 – Modos de configuración del micro.
El significado de cada una de estas funciones se deja para un desarrollo posterior en el
capítulo dedicado a la puesta en marcha y nos centraremos en la electrónica que va a
permitir esta selección y en su montaje.
La base de funcionamiento del circuito de configuración se halla en el circuito integrado
74HC244. Se trata de un buffer de 8 entradas y 8 salidas con dos señales de activación
(enable), una por cada cuatro salidas, que permiten desactivarlas dejándolas en estado
de alta impedancia. Durante el reset se activará el buffer y las señales de configuración
estarán disponibles en las respectivas patillas del micro y, una vez finalizado, los buffer
quedarán en estado de alta impedancia permitiendo el funcionamiento normal del
microcontrolador.
Las señales, 0 voltios o 5 voltios, que se aplican a la entrada del buffer se configuran
con los microinterruptores. El esquema de conexión es el siguiente:
18
Figura 5 – Circuito de configuración del micro.
2.2.7 Reset del sistema
La generación de la señal de RESET en la línea parece una tarea bastante sencilla. Sin
embargo, conforme han ido adquiriendo mayor complejidad los microprocesadores, las
líneas de reset bidireccionales se han convertido en algo común. Éstas permiten que el
microprocesador pueda reiniciar dispositivos externos. Una línea bidireccional va
gobernada por un transistor en colector abierto, por lo que se debe colocar a nivel lógico
1 mediante una resistencia de 820 (resistencia de pull-up).
Cuando se usa el sintetizador PLL interno para generar la señal de reloj, como es el
caso que nos ocupa, el RESET funciona de la siguiente forma:
Durante el encendido el microcontrolador pone el pin de RESET a nivel
bajo.
Una vez que el PLL se estabiliza, libera la señal de reset y, si en un
periodo inferior a dos ciclos de reloj, el pin de RESET alcanza el nivel
alto, el microcontrolador da por hecho que se trata de un reset de
arranque.
En caso contrario el micro considera que se trata de un reset externo y
pone a nivel bajo el pin de reset durante 512 ciclos de reloj, tras los
19
cuales, si se alcanza el nivel alto en el pin de RESET en el intervalo de
10 ciclos, se inicia la ejecución del programa.
El prototipo cuenta con un circuito de reset evolucionado que incluye un dispositivo
inhibidor (MC34064) que mantiene la señal de reset a nivel bajo hasta que la
alimentación se estabiliza por encima del umbral de VT = 4,6 V. Con esto se evita que el
micro entre en un estado indeterminado debido a un fallo de alimentación. El circuito
debería implementarse con una puerta AND con salida en colector abierto como las que
contiene el integrado 74LS09. Con el fin de optimizar el número de circuitos integrados
se utiliza, en su lugar, una puerta NAND sin uso del integrado 74HC00 montado para el
circuito de configuración del micro junto con un inversor en colector abierto
implementado con un transistor BC547.
Figura 6 – Circuito de reset.
Una vez montado podemos proceder a su prueba. Para ello conectaremos la fuente sin
olvidarnos de ajustar el limitador de corriente previamente. Se medirá la tensión en el
terminal de #RESET que deberá ser de +5 voltios. Después se comprobará que al
apretar el pulsador la tensión pasa a valer 0 voltios.
En caso de no funcionar correctamente se repasarán de nuevo las conexiones y en caso
de no detectarse ningún error se repetirán los pasos anteriores pero midiendo ahora en la
salida de la puerta NAND. En este caso la tensión en reposo debe ser de 0 voltios y al
pulsar toma el valor de 5 voltios. Si no es correcto se comprobarán los valores de las
entradas y si lo es se comprobará que se ha conectado correctamente la resistencia de
pull-up de 820 , y el circuito MC34064.
20
2.2.8 Resistencias de pull-up
Varios terminales del microcontrolador necesitan resistencias de pull-up para
determinar su tensión en estado de reposo. Así se evita que puedan tomar valores
indeterminados que provoquen un mal funcionamiento. En general todas las entradas
deberán tener un estado conocido. Para esta operación se utilizarán dos arrays de
resistencias de 10 K que se conectarán a un punto de alimentación a 5 voltios. Para
ello se conectará a 5 voltios el extremo común, normalmente señalado con un punto.
Hay cuatro terminales que ya disponen de las resistencias de pull-up y que son:
Nº terminal Denominación Nº terminal Denominación1 56 #BKPT/DSCLK 3 78 PF0/#MODCLK2 68 #RESET 4 79 R/#W
Tabla 2 – Terminales que ya tienen conectadas las resistencias de pull-up.
Por lo tanto sólo quedan por conectar los siguientes terminales:
Nº terminal Denominación Nº terminal Denominación1 57 TSC 8 75 PF3/#IRQ3
2 69 #HALT 9 76 PF2/#IRQ23 70 #BERR 10 77 PF1/#IRQ14 71 PF7/#IRQ7 11 87 PE2/#AVEC5 72 PF6/#IRQ6 12 88 PE1/#DSACK16 73 PF5/#IRQ5 13 89 PE0/#DSACK07 74 PF4/#IRQ4 14 113 #BR/#CS0
Tabla 3 – Terminales pendientes de conectar las resistencias de pull-up.
2.2.9 Alimentación del microcontrolador
La conexión de la alimentación es el último paso a seguir para que el sistema funcione
de una forma muy básica. Esta operación es muy sencilla y tan sólo deberemos conectar
los 15 terminales de masa (VSS) y los 14 de alimentación a 5 voltios (VDD).
Para la conexión deberemos recordar que existen dos tiras cortas próximas al terminal
número 1 del microcontrolador con el fin de que todas las líneas de alimentación del
micro estén referenciadas a un único punto. Además se obtiene, de esta manera, una
mayor inmunidad al ruido.
Los terminales que se deberán conectar se relacionan en la siguiente tabla:
VSS 2 12 20 26 35 48 54 62 74 82 91 107 120 128 134VDD 11 19 25 37 47 61 72 84 86 89 109 121 135 144
21
Tabla 4 – Terminales de alimentación del micro.
2.2.10 Prueba de funcionamiento
Una vez concluido el paso anterior la placa entrenadora está lista para la primera
prueba.
Lo primero que se hará será revisar que la limitación de corriente de la fuente está
regulada a un valor inferior a los 200 mA., preferiblemente 150 mA. En caso de no
disponer de una fuente con limitación de corriente, asegurarse de haber colocado un
fusible calibrado a 150 mA. en serie con la línea de alimentación.
Antes de conectar la alimentación se deberán colocar todos los microinterruptores en
posición OFF (5 V.) a excepción del 8’ que se pondrá en posición ON (0 V.) para
activar el modo de depuración BDM. En cualquier caso, para esta prueba inicial sólo es
estrictamente imprescindible que los microinterruptores 4’ y 6’ estén en posición OFF.
Conectaremos la alimentación, observando el amperímetro para apagar rápidamente si
vemos que el consumo es elevado.
Si las conexiones están bien hechas, tras un pico inicial de corriente durante el arranque,
ésta se estabilizará en torno a los 50 o 70 mA. A continuación mediremos con el
osciloscopio la señal de reloj. Primero colocaremos la sonda en el terminal XTAL y
deberemos observar la onda cuadrada a 32Khz. del reloj que hemos montado. Luego la
colocaremos en el terminal CLKOUT y deberá aparecer la señal de reloj a 8 Mhz.
generada por el sintetizador PLL del sistema.
Si la corriente es excesiva, seguramente habrá un cortocircuito o una conexión mal
hecha. Inevitablemente habrá que repasar de nuevo el conexionado y buscar un posible
cortocircuito.
En el caso de que no aparezca la señal de reloj, comprobar que:
El microinterrruptor 6’ está en posición OFF, ya que con él se configura
el funcionamiento del sintetizador.
La señal de reset está a 5 voltios.
Las conexiones del circuito de reloj son correctas.
Si no existe un error aparente habría que pensar en la posibilidad de que el cristal de
cuarzo se haya deteriorado durante el proceso de soldado.
22
2.2.11 Comunicación BDM (Background Debug Mode)
El modo de depuración en segundo plano (BDM) es un modo de funcionamiento
especial del microcontrolador que permite que otro ordenador tome el control del micro.
Se trata de una herramienta muy útil para la depuración. Durante la operación en
segundo plano, la ejecución normal de instrucciones es suspendida, y el microcódigo
ejecuta las instrucciones internas de depuración bajo el control de una máquina externa.
La interfaz de comunicación BDM es relativamente sencilla de realizar. El mayor
inconveniente reside en el uso de un conector de 26 terminales soldado sobre la placa
que no permite “wrappinar” el cable y por tanto se deberá soldar con el máximo
cuidado posible. En la figura 7 se muestra el esquema de conexión. La disposición de
los diferentes componentes se debe consultar en la figura 1.
Figura 7 – Circuito interfaz para la comunicación BDM.
Una vez acabado el circuito de comunicación se deberá montar el cable. Para la
conexión a la placa se ha utilizado un conector de 26 terminales y en el extremo del
ordenador se utilizará un conector de 25 terminales (DB25) para su conexión al puerto
paralelo. Para ello utilizaremos cable plano y conectores de presión. Para el montaje se
deberá quitar uno de los hilos del cable, ya que sobra, y se deberá prestar especial
atención en que queden interconectados entre si los terminales número 1 de ambos
conectores. Para ello obsérvese que el primer hilo del cable lleva marcas distintivas.
Una vez montado el cable, se conectará a la placa y al puerto paralelo del ordenador. Se
encenderá la alimentación observando de nuevo que la corriente consumida se
encuentre dentro de los límites antes comentados.
23
Para probar el funcionamiento se cargará bajo entorno MSDOS el programa
TEST32.EXE. No es aconsejable trabajar en una ventana de Windows, por lo que se
deberá salir de Windows y trabajar directamente en MSDOS.
Una vez en MSDOS, escribiremos TEST32 en la consola y aparecerá el mensaje:
Test Program for CPU32 Background Mode Drivers
Available LPT Ports: <1>
Please select Printer Port:
Seleccionaremos el puerto de impresora al que se ha conectado el circuito y que
normalmente será el primero (1). A continuación nos solicitará que indiquemos la
velocidad de conexión. Normalmente deberá funcionar con un valor de 50. En caso de
no funcionar podremos ir probando con otros valores mayores dentro del rango que
indica el programa.
Please select Clock DELAY (0-20000): 50
Port 1 Initialized at Speed 50
Resetting Target MCU to enable BDM
Enter Command DHMRSQ('H' for Help):
En este momento todo está preparado para introducir un comando y verificar la
comunicación BDM. Pulsando la tecla H obtendremos una breve explicación sobre la
función de cada comando:
Help for TEST (CPU32 Target)
B: Begin Program Execution from Reset
D: Dump Target MCU Registers
P: Modify Target MCU Register PC
H: Print This Help Summary
L: Load S-Record File into Target
F: Memory Hex/ASCII Fill
M: Memory Hex/ASCII Display
R: Hardware Reset Target MCU
T: Communications TEST
U: MCU Status
S: Single Step Target MCU
O: Stop Target MCU
G: Run Target MCU
E: edit a file using QEDIT
24
A: Assemble file
V: go to DOS
K: insert breaKpoint
I: delete breakpoInt
Q: Quit back to DOS
Para probar el funcionamiento teclearemos ‘D’ + intro. En la pantalla deberá aparecer
un listado con los valores contenidos en los distintos registros del microcontrolador (no
todos deben valer cero).
Si el programa no ha dado ningún mensaje de error la comunicación está funcionando
correctamente. Si por el contrario aparece el mensaje “error en las comunicaciones” se
desconectará la placa y se revisarán todas las conexiones de nuevo ya que lo más fácil
es que se trate de un error en alguna conexión.
2.2.12 Memoria
El MC68331 puede trabajar con un bus de datos tanto de 8 como de 16 bits. El uso de
un bus de 8 bits simplifica el diseño y reduce el coste, pero implica una importante
penalización en el rendimiento que será tanto mayor cuantos más accesos haya a
memoria.
En el prototipo que estamos montando utilizaremos un bus de datos de 16 bits que
permite una mayor velocidad de transferencia de datos.
Se utilizarán dos chips de memoria RAM del tipo HY62256B con una capacidad de
32K x 8 bits conectados en paralelo para obtener un bus de datos de 32K x 16 bits.
Los terminales de direcciones de ambos chips de memoria se “wrappinarán” en
paralelo. Los terminales A0 de la memoria se conectarán al terminal de direcciones A1
del microcontrolador y así sucesivamente hasta los terminales A14 que se conectarán al
A15 del micro. El terminal A0 del micro se dejará sin conectar.
Los pins de datos (D0-D7) de una de las memorias se conectarán a los homónimos del
microcontrolador y los de la otra a los terminales D8-D15 del microcontrolador.
La señal chip enable (CE) será generada por el terminal CSBOOT del MC68331.
Con el objeto de eliminar ruidos en la alimentación, especialmente cuando se trabaja a
altas frecuencias, es muy recomendable conectar un condensador de 100 nF en paralelo
con la alimentación de cada chip de memoria.
25
Una vez finalizado este montaje será posible la carga de programas en memoria para su
ejecución. Sólo queda, por tanto, probar el correcto funcionamiento de esta parte.
Para ello repetiremos la secuencia del paso anterior. Se encenderá la fuente de
alimentación cuidando de que no exista ningún cortocircuito, se arrancará el programa
TEST32.EXE y después de seleccionar el puerto paralelo al que se haya conectado la
placa y la velocidad de comunicación de 50 se quedará a la espera de la introducción de
comandos.
Test Program for CPU32 Background Mode Drivers
Available LPT Ports: <1>
Please select Printer Port: 1 + intro
Please select Clock DELAY (0-20000): 50 + intro
Port 1 Initialized at Speed 50
Resetting Target MCU to enable BDM
Enter Command DHMRSQ('H' for Help):
Si escribimos “m + intro” se obtendrá una lectura del contenido de la memoria. Para
ello se deberá indicar la dirección de inicio y el programa mostrará en pantalla los 256
bytes siguientes a la dirección indicada.
En caso de que se produzca algún error deberán revisarse todas las conexiones y, en
especial, la alimentación.
2.2.13 Comunicación serie
Cuando se emprenda la realización de este paso, ya se tendrá la placa entrenadora
basada en el microcontrolador 68331 funcionando correctamente. Por ello en este
último apartado únicamente se instalará el módulo de adaptación de niveles para las
comunicaciones serie mediante el protocolo RS232.
La parte más importante de este subsistema es el chip MAX232, que permite adaptar los
niveles de tensión de 0 y 5V del microcontrolador, a los establecidos por la norma
RS232 (entre –15 y 15V). Curiosamente, gracias a los distintos condensadores que se
añaden al sistema, el chip MAX232 sólo necesita ser alimentado con 5V, aunque sea
capaz de dar una tensión mayor a su salida.
Se debe conectar el circuito de la figura:
26
Figura 8 – Circuito interfaz para la comunicación serie.
El punto donde más errores se suelen cometer es en la polaridad de los distintos
condensadores electrolíticos y en la identificación de cada uno de los pines del chip
MAX232. Por tanto, se debe prestar especial atención a estos dos aspectos.
Junto con el subsistema de adaptación de niveles desarrollado en la placa entrenadora,
se debe realizar también un cable de “módem nulo” que permita la conexión de la placa
al ordenador mediante el protocolo RS-232.
27
Figura 9 – Vista general de placa entrenadora.
Figura 10 – Detalle del conexionado con wire-wrapping.
28
Figura 11 – Detalle del montaje de la placa.
2.3 Descripción de funcionamiento
El funcionamiento del sistema viene determinado por el funcionamiento de los cuatro
subsistemas que lo componen y que son:
Módulo de Integración de Sistemas: SIM (System Integration Module).
Temporizador de Propósito General: GPT (General Purpose Timer).
Unidad Central de Proceso: CPU 32 (Central Processing Unit – 32 bits).
Módulo de Comunicaciones Serie: QSM (Queued Serial Module).
2.3.1 Módulo de integración de sistemas (SIM)
Para la integración de los subsistemas CPU32, GPT y QSM en un único circuito VLSI
ha sido necesario que el fabricante incorpore un módulo especialmente diseñado para
este fin. Así como al diseñar un sistema electrónico digital basado en un
microprocesador necesitaremos añadir no sólo memoria o periféricos, sino también
circuitos de reloj, de reset, de arbitraje de las interrupciones o una lógica de selección de
direcciones, de la misma manera el microcontrolador MC68331 cuenta con un módulo
29
de integración de sistemas denominado SIM que realiza todas estas funciones y algunas
otras adicionales.
Las funciones básicas que realiza el SIM son:
1. Generar la señal de reloj que comparten todos los módulos del micro.
Dicha señal de reloj puede ser generada con un sintetizador PLL
interno a partir de una señal de referencia externa, o bien tomada
directamente de una fuente exterior.
2. Proporcionar señales de chip-select configurables, que permitan
añadir memoria y nuevos periféricos al sistema sin tener que recurrir
a circuitería externa para la lógica de direcciones, con el consiguiente
ahorro de espacio en la placa de circuito impreso.
3. Servir de interface entre el espacio de direcciones interno (registros)
y el externo (memoria externa) conectados a través del bus
intermodular (InterModule Bus), así como arbitrar la generación de
interrupciones simultáneas (Interrupt Arbitration).
4. Permitir la configuración y protección general del sistema: para ello
contiene submódulos de supervisión interna (Bus Monitor, Halt
Monitor, Spurious Interrupt Monitor) y de supervisión del código
en ejecución (Software Watchdog Monitor). Por medio de estos
bloques, podremos reiniciar el microcontrolador en caso de que se
detecten ciertos problemas (o bien tratarlos si ello es posible).
Además de esto, proporciona un nuevo submódulo: un reloj de
tiempo real (Periodic Interrupt Timer), capaz de generar
interrupciones periódicas. El conjunto de todos estos submódulos
forma la interfaz del bus externo (External Bus Interface).
5. Incorporar circuitos que permitan la depuración de nuevos programas
en desarrollo sin tener que recurrir al puerto serie y a un programa
monitor (Background Debug Mode) y la verificación del
funcionamiento del microcontrolador cuando todavía se encuentra en
fábrica (System Test Block).
Ofrecer varios puertos de Entrada/Salida (ports E, F y C), que sólo estarán disponibles
si lo permite la configuración de la funcionalidad anterior. Por ejemplo: si no
30
empleamos todas las señales externas de chip-select, podremos emplear las no asignadas
como parte de un puerto denominado C.
2.3.1.1Terminales del SIM
Las señales externas o terminales del microcontrolador que tienen relación, de una u
otra manera, con el SIM son:
CS[0..10]#, CSBOOT#: proporcionan los chip-selects.
ADDR[0..18], SIZ[0..1], AS#, DS#, RMC#, AVEC#, DSACK[0..1]#,
DATA[0..7], R/W#, RESET#, HALT#, BERR#, IRQ[0..7]#:
componen el EBI, que permite el arbitraje de interrupciones y el control
del bus externo.
MODCLK, CLKOUT, XTAL, EXTAL, XFC, VDDSYN: permiten
sintetizar y distribuir la señal de reloj.
TSC/TSTME# y FREEZE/QOUT: proporcionan al fabricante la
posibilidad de probar el correcto funcionamiento el microcontrolador.
2.3.1.2Subsistema de configuración y protección
El submódulo de configuración y protección permite realizar las siguientes funciones:
2.3.1.2.1 Ubicación de los registros en memoria.
Un importante parámetro que es posible configurar en el 68331 es la situación
(mapping) de los 4-Kbytes del bloque de registros de propósito específico disponibles
en el microcontrolador. El bit MM (Module Mapping) del registro de configuración del
SIM (SIMCR) determina qué posiciones ocupan los registros en el mapa de memoria
general del sistema:
Bit MM Zona ocupada del mapa de memoria
0 $7FF000-$7FFFFF
1 $FFF000-$FFFFFF
Tabla 5 – Opciones de ubicación de los registros en el mapa de memoria.
Después del reset, el bit MM se inicializa con un 1.
31
2.3.1.2.2 Configuración tras el Reset
Durante la secuencia de arranque del micro se produce la configuración del sistema.
Para ello el microcontrolador realiza la lectura de los valores existentes en los
terminales MODCLK, #BKPT, DATA[0..9] y DATA11 a fin de determinar cómo
quiere el usuario configurar el sistema. Entre las opciones de configuración que se
pueden determinar están:
Qué chip-selects están activos: existen 3 grupos de terminales de chip-
select que, alternativamente pueden funcionar como terminales de
función de la CPU32 (FC[0..2]), como terminales destinados a compartir
el bus (#BR, #BG y #BGACK) o como terminales del bus de
direcciones (ADDR[19..23]).
Qué puertos adicionales están disponibles: dado que el número de
terminales disponibles (132 en la versión utilizada) es inferior al número
de señales que pueden ser manejadas, algunos terminales son
compartidos por dos o más señales, de modo que durante el reset se
deberá determinar la función sacrificando unas en favor de las otras. Por
ejemplo, el puerto E compartesus terminales con las señales de los buses
de datos y direcciones (SIZ[0..1], #AS, #DS, #AVEC y #DSACK[0..1]).
Aunque estos terminales son fundamentales en cualquier sistema basado
en un microprocesador como el MC68000 (cuya unidad central de
proceso es muy similar a la CPU32), la disponibilidad de chip-selects
programables, reduce su interés en el caso del 68331 (excepto en
sistemas grandes o complejos).
Si se va a funcionar o no en modo verificación (Test Mode).
Si se habilita o deshabilita la depuración en segundo plano (Background
Debug Mode).
Las diferentes posibilidades de configuración se resumen en la tabla 1 (Apartado 2.6).
2.3.1.2.3 Arbitraje de interrupciones
Los distintos módulos del 68331 que pueden solicitar interrupciones a la CPU32 tienen
un campo para el arbitraje de interrupciones (IARB) donde se indica el nivel de
prioridad. Dado que el SIM también puede solicitar interrupciones, en SIMCR existe
32
un campo denominado IARB, que contiene su prioridad. En el caso de peticiones
simultaneas de interrupción, el SIM arbitra las mismas atendiendo a la prioridad
indicada en los diferentes campos IARB y las del mismo nivel se atienden por
contienda.
Al salir del Reset, el IARB del SIMCR toma el valor $F (máxima prioridad). Si un
módulo cuyo IARB es $0 solicita una interrupción, no sólo no es atendida sino que se
genera una excepción por interrupción espúrea.
2.3.1.2.4 Supervisión del bus externo durante trasferencias internas
Los 2 bits del campo SHEN del registro SIMCR de configuración del SIM controlan el
comportamiento del bus externo durante las transferencias de datos internas (por
ejemplo, al mover datos entre registros de los módulos que componen el 68331).
Tras el Reset, #AS y #DS permanecen en alta impedancia durante los ciclos internos,
habilitando que sea un dispositivo exterior al 68331 quien controle el bus externo y
haciendo que los ciclos internos sean invisibles desde fuera del microcontrolador.
También se puede configurar que el ciclo interno sea visible y que los terminales #DS y
DATA[0..15] reflejen el flujo de datos en el bus interno (aunque #AS permanezca en
alta impedancia para impedir que este flujo interno afecte a dispositivos externos como,
por ejemplo, la memoria).
SHEN Ciclos Internos Arbitraje externo00 Invisibles desde el exterior Habilitado01 Visibles Deshabilitado10 Visibles Habilitado
11 InvisiblesHabilitado, pero una
petición de bus detiene la transferencia interna
Tabla 6 – Comportamiento del bus externo durante las transferencias.
2.3.1.2.5 Modo Verificación en fábrica.
El bit SLVEN del SIMCR refleja el estado de DATA11 durante el Reset, o sea, nos
permite consultar si estamos o no trabajando en el modo de verificación de fábrica
(permite que el fabricante compruebe el correcto funcionamiento del micro).
2.3.1.2.6 Accesibilidad de los registros del SIM
El bit SUPV del SIMCR coloca los registros globales del SIM en el mapa de memoria
del supervisor (cuando SUPV=1) o en el de usuario (cuando SPUV=0). En el caso de
33
encontrarse en el espacio de datos del supervisor, sólo se pondrá acceder a los registros
estando la CPU32 funcionando en modo supervisor. De esta manera un sistema
operativo puede impedir que los programas ejecutándose en modo usuario puedan
reconfigurar partes esenciales del SIM y del sistema.
2.3.1.2.7 Causa del último Reset
El registro de sólo lectura RSR guarda la causa del último Reset producido. Contiene un
bit por cada una de las 7 posibles causas, pudiéndose poner a 1 varios de estos bits en el
caso de simultaneidad de causas. Dichas causas pueden ser:
Fuente externa: el terminal #RESET ha sido activado por un dispositivo
externo durante al menos 520 ciclos de reloj.
Encendido del micro (Power-On Reset).
Supervisor SW (Software Watchdog), que ha provocado un reset por un
error en el funcionamiento o en el diseño del programa.
Supervisor de parada (Halt Monitor): interviene cuando se produce un
fallo doble de bus (Double Bus Fault), o cuando se activa la señal
#HALT.
Pérdida de la señal de referencia de reloj (Loss of Clock).
Ejecución de la instrucción de RESET.
Submódulo de Verificación (Test Submodule): usado por el fabricante.
2.3.1.2.8 Supervisión del Bus Interno
El funcionamiento asíncrono del bus de la CPU32 obliga a la existencia de señales de
reconocimiento y confirmación (acknowledge) de datos y autovectores. Cada vez que se
realiza una transferencia usando el bus interno, el SIM comprueba que se cumplen las
restricciones máximas en cuanto a tiempo de respuesta. Si las señales DSACK# o
AVEC# tardan demasiado en llegar, el SIM activa el terminal BERR# del 68331.
El campo BMT de 2 bits que se encuentra en el registro de control de protección del
sistema (SYPCR), permite definir cuál es el tiempo máximo de espera:
BMT Tiempo máximo de espera00 64 ciclos de reloj01 32 ciclos de reloj10 16 ciclos de reloj
34
11 8 ciclos de reloj
Tabla 7 – Tiempo de espera de las señales de reconocimiento antes de generar un error de bus.
Al salir del Reset el tiempo está configurado en 64 ciclos de reloj de espera máxima.
2.3.1.2.9 Supervisión de Parada (Halt)
La activación de la señal #HALT del 68331 provoca la entrada en funcionamiento del
supervisor de parada (siempre y cuando dicha intervención esté habilitada en el bit
HME del SYPCR), y el consiguiente Reset del sistema. También interviene este
supervisor cuando se produce un fallo doble de bus (Double Bus Fault).
2.3.1.2.10 Supervisión de interrupciones espúreas
Si el arbitraje de interrupciones no se llega a resolver (debido a que el correspondiente
campo IARB del módulo que ha provocado la interrupción es igual a 0 y, por lo tanto,
no está habilitado), el supervisor de interrupciones espúreas (Spurious Interrupt
Monitor) provoca la activación de la señal #BERR y un Reset del sistema. Esta
supervisión no se puede deshabilitar.
2.3.1.2.11 Supervisión SW
El bit SWE del registro de control de protección SYPCR habilita o deshabilita la
supervisión de programas en ejecución (Software WatchDog). En caso de estar
habilitada dicha supervisión, el programa que se está ejecutando deberá, regularmente,
ejecutar la siguiente secuencia:
Escribir un $55 en el registro SWSR.
Escribir un $AA en el registro SWSR.
En caso de no ejecutarse estas instrucciones en el tiempo preestablecido, si se halla
habilitado el supervisor, éste interpretará que el programa está mal diseñado o que se ha
producido un bloqueo o una entrada en algún bucle infinito y provocará un Reset del
microcontrolador.
El plazo de tiempo disponible depende de los valores de los campos SWP y SWT del
SYPCR:
SWP SWT Ciclos de reloj0 00 2 elevado a 90 01 2 elevado a 110 10 2 elevado a 130 11 2 elevado a 15
35
1 00 2 elevado a 181 01 2 elevado a 201 10 2 elevado a 221 11 2 elevado a 24
Tabla 8 – Tiempo de actualización de las escrituras del watchdog.
Tras el Reset, SWP adopta el valor negado del terminal MODCLK durante el Reset (si
la fuente de reloj es externa, SWP contendrá un 1; contendrá un 0 en caso contrario).
2.3.1.2.12 Interrupciones periódicas: el PIT
El SIM incluye un temporizador (el PIT) capaz de provocar interrupciones periódicas.
Estas interrupciones se usan para controlar tareas críticas en el tiempo y que deben de
ejecutarse con gran regularidad o bien que han de respetar unos plazos máximos en
cuanto a su tiempo de respuesta.
El periodo de generación de esta interrupción viene fijado por la señal EXTAL (reloj
externo o de referencia) y el valor del registro de configuración del temporizador de
interrupciones periódicas (PITR). Este registro contiene el bit PTP con el que se
selecciona un preescalado de 4 (PTP=0) o de 2048 (PTP=1); también contiene el
campo de 8 bits, PITM, cuyo valor multiplicado por el preescalado determina la
frecuencia del PIT. Tras el reset, el bit PTP adopta el valor contrario a la señal
MODCLK (si la fuente de reloj es externa, PTP contendrá un 1; contendrá un 0 en caso
contrario).
Para calcular la frecuencia a la que interrumpirá el SIM, aplicaremos la siguiente
fórmula:
Frecuencia del PIT=Frecuencia EXTAL/(PITM * Preescalado).
La frecuencia máxima de funcionamiento será por tanto la frecuencia EXTAL dividida
por 4 y se producirá si PITM contiene un 1 y PTP contiene un 0. La frecuencia mínima
será EXTAL/522.240 y se producirá cuando el PITM contenga su valor máximo ($FF)
y apliquemos el mayor preescalado (PTP=1). Si el reloj externo es 32,768 KHz., el
periodo de interrupción podrá variar entre un máximo de 15,93 s. y un mínimo de 122
s.
Las interrupciones periódicas se habilitan en función del valor contenido en los tres
registros siguientes:
36
1. SR o registro de estado de la CPU32: los bits de máscara de
interrupción IP deben contener un valor que permita las
interrupciones del PIT.
2. SIMCR o registro de configuración del SIM: su campo IARB debe
contener un valor de arbitraje mayor que 0.
3. PICR o registro de control del PIT, que contiene 2 campos
relevantes:
El campo PIRQL, que debe contener un nivel de interrupción
asignado al PIT que esté habilitado por la máscara de
interrupción del SR (PIRQL>IP)
El campo PIV debe contener el número del vector de interrupción
con el que deseamos que sea atendido el PIT (un valor entre $40
y $FF, los valores posibles para un vector de usuario en la
CPU32).
Por lo tanto, el PIT estará habilitado y en condiciones de interrumpir correctamente si
IARB>0, PIRQL>IP o PIRQL=7 y PIV>=$40.
2.3.1.2.13 Funcionamiento en bajo consumo
Cuando la CPU32 ejecuta la instrucción LPSTOP, se desactivan los supervisores de
bus, de parada y de interrupciones espúreas, y se para el supervisor software (si bien no
se pone a cero su contador).
Para salir de este estado de bajo consumo y baja funcionalidad, se ha de producir una
interrupción habilitada (por ejemplo, un reset, una interrupción externa o una
interrupción del PIT que cumpla las condiciones antes señaladas).
El bit STSIM del SYNCR (registro de control del sintetizador de reloj) determina si
durante el estado de bajo consumo el SIM utiliza una fuente de reloj externa (STSIM =
0) o interna (STSIM = 1).
Un programa cuyo funcionamiento básico sea la atención a interrupciones externas
puede tener una rutina principal que, tras la inicialización, se quede en modo de bajo
consumo esperando la aparición de una interrupción que atender.
37
2.3.1.2.14 Funcionamiento durante la depuración
Si el sistema externo que controla la depuración en segundo plano activa la señal
FREEZE y dicha depuración está permitida, el SIM se ve afectado de la siguiente
manera:
Los supervisores de parada y de interrupciones espúreas continúan
funcionando con normalidad, pudiendo provocar un reset en caso de
detectar algún fallo.
El supervisor de bus se deshabilita si así lo indica el bit FRZBM del
SIMCR (si contiene un 1).
El supervisor de SW se deshabilita si así lo indica el bit FRZSW del
SIMCR (si contiene un 1).
De esta manera durante la parada por depuración paso a paso, podremos deshabilitar el
supervisor de SW que podría provocar un reset no deseado.
2.3.1.3Reloj del sistema
Una de las funciones más importantes del SIM es la generación y distribución de la
señal de reloj que emplearán todos los módulos del microcontrolador. Para ello, el SIM
nos ofrece 2 alternativas: o bien generar la señal de reloj sintetizándola internamente a
partir de una señal de referencia externa, o bien usar directamente una fuente externa de
reloj. La señal de referencia presenta la ventaja de ser una señal de menor frecuencia
(más fácil de generar).
2.3.1.3.1 Reloj del sistema externo
Si mantenemos a nivel bajo el terminal MODCLK durante el reset y proporcionamos
una señal de reloj en el terminal EXTAL (dejando flotante el terminal XTAL), el SIM
distribuirá (eso sí, a través de un buffer interno) dicha señal de reloj a lo largo del
sistema. La frecuencia de esta señal de reloj vendrá limitada por la frecuencia máxima
recomendada por el fabricante para cada integrado (16 MHz, 20 MHz o 25 MHz). Para
cada circuito integrado que compremos, el fabricante nos garantiza que funcionará
correctamente por debajo de esa frecuencia máxima.
2.3.1.3.2 Reloj de referencia externo
Si mantenemos a nivel alto el terminal MODCLK durante el reset y proporcionamos
una señal de reloj de referencia entre los terminales EXTAL y XTAL, se activará el
38
PLL interno (Phase Lock Loop) que sintetiza una señal de reloj del sistema
configurable por medio de los campos X (1 bit), W (1 bit) e Y (6 bits) del registro
SYNCR.
La relación entre ambas señales de reloj viene fijada por las ecuaciones:
Frecuencia del sistema = frecuencia de referencia * [4*(Y + 1)*2(2 * W + X)],
en el caso que nos ocupa utilizamos una señal de referencia de 32,768 Khz.
No se debe forzar una frecuencia del sistema superior a la recomendada por el
fabricante.
Los terminales XFC y VDDSYN, permiten incorporar un filtro capacitivo para eliminar
armónicos de la señal de reloj del sistema cuando usemos una referencia externa.
2.3.1.3.3 Generación de reloj para un bus externo síncrono
Al igual que el MC68000 y por compatibilidad con los periféricos síncronos del 6800,
el 68331 proporciona una señal de reloj ECLK que permite a la CPU32 sincronizarse
con dichos periféricos. Si el campo CSPA1 del registro CSPAR1 contiene 00, ECLK
estará habilitado y disponible. Su frecuencia de trabajo vendrá determinada por el bit
EDIV del SYNCR, pudiendo ser la frecuencia del sistema dividida por 8 (EDIV =0) o
por 16 (EDIV =1).
2.3.1.3.4 Generación de reloj en bajo consumo
Durante los ciclos de funcionamiento en bajo consumo, los bits STSIM y STEXT del
registro SYNCR determinan qué señal de reloj está disponible para hacer funcionar el
SIM o los dispositivos externos. Si el bit STEXT está a 0 durante el tiempo de bajo
consumo, la señal CLKOUT no proporcionará reloj alguno al sistema digital basado en
el microcontrolador.
2.3.1.3.5 Supervisión del reloj de referencia
Si el supervisor de reloj detecta la pérdida de la señal de referencia puede provocar dos
situaciones, dependiendo de cómo esté configurado el bit RSTEN del SYNCR:
Si RSTEN vale 1, provocará inmediatamente un reset.
Si RSTEN vale 0, adoptará una frecuencia de reloj del sistema
denominada limp mode (cojera, renqueo), inferior en todo caso a la
frecuencia máxima del sistema.
39
El bit SLIMP del SYNCR refleja si el sistema está operando en modo
limp (SLIMP =1) o no (SLIMP =0).
2.3.1.4Interfaz del bus externo asíncrono: EBI
Además de controlar el bus interno, el SIM se encarga de proporcionar las señales que
permiten la comunicación con dispositivos (memoria o periféricos) externos al
microcontrolador.
El interfaz del bus del MC68000 constaba de un bus de datos DATA de 16 bits, un bus
de direcciones ADDR de 24 bits, dos señales de validación de datos #UDS y #LDS, una
señal de validación de direcciones #AS, un terminal de lectura/escritura R/#W, tres
señales de códigos de función FC, una señal #DTACK de confirmación de fin del ciclo
de bus, #BERR que indicaba error de bus durante una trasferencia, la señal de parada
#HALT y una señal #AVEC que indica al micro que la interrupción solicitada es
autovectorizada.
Las señales de tamaño de bus SIZ permiten definir si la transferencia de datos a través
de DATA es de 8, 16 o 32 bits.
2.3.1.4.1 Temporización del bus externo
Las operaciones de acceso a registros internos del microcontrolador vienen a durar dos
ciclos de reloj. Si interviene el bus externo, su duración mínima será de 3 ciclos ya que
los ciclos de lectura o escritura se componen de 6 estados de medio ciclo de reloj cada
uno.
Además de los ciclos ordinarios de lectura y escritura, la ejecución de la instrucción
TAS (que de un modo indivisible pone a uno el bit 7 de una posición del mapa de
memoria), provoca una secuencia especial de ciclos que facilita la implantación de
mecanismo de semáforos en sistemas multiprocesador con compartición de memoria.
2.3.1.4.2 Tamaño dinámico del bus de datos
El bus de datos permite realizar transferencias de 1, 2 o 4 bytes entre el micro y una
memoria o periférico externos de 8 o 16 bits, reflejando a través de SIZ cuántos bytes
quedan por transferir para completar el ciclo.
Un ciclo en el que se transfieran una anchura de datos superior a la anchura de DATA
(16 bits) o del periférico o memoria implicados, supondrá varios subciclos de lectura o
escritura como los descritos en el apartado anterior. A lo largo de estos subciclos el
40
contenido de SIZ irá decreciendo. El dispositivo externo deberá confirmar a través de
DSACK# el fin del subciclo en curso.
Un dispositivo de 16 bits se conectará a todo el bus DATA[15..0], mientras que un
periférico de 8 bits lo hará al byte alto DATA[15..8]. En una transferencia de una
anchura superior a la del bus DATA o la del periférico o la memoria implicados,
primero se transferirán los bytes más significativos y, posteriormente, los menos
significativos.
Los tipos de transferencias posibles se resumen en la siguiente tabla:
Tipos de transferencia.De <origen> a <puerto o memoria de
destino>
SIZ[0:1] ADDR0
DSACK[1:0]
Datos efectivos
transferidosDe 8 bits a 8 bits en dirección par 01 0 10 DATA[8..15]
De 8 bits a 8 bits en dirección impar 01 1 10 DATA[8..15]De 8 bits a 16 bits en dirección par 01 0 01 DATA[ 0..7 ]
De 8 bits a 16 bits en dirección impar 10 1 01 DATA[8..15]De 16 bits a 8 bits en dirección par 10 0 10 DATA[8..15]De 16 bits a 16 bits en direcc. Par 10 0 01 DATA[0..15]De 32 bits a 8 bits en dirección par 00 0 10 DATA[8..15]De 32 bits a 16 bits en direcc. Par 00 0 01 DATA[0..15]
De 24 bits a 8 11 1 10 DATA[8..15]
Tabla 9 – Tipos de transferencias.
Las transferencias de 24 bits a puertos o memorias de 8 son subciclos dentro de una
transferencia de 32 bits a 8. La CPU32 exige que las transferencias de 16 o 32 bits a 16
bits estén alineadas, esto es, que tengan como destino direcciones pares, lo cual
restringe las posibilidades de combinaciones correctas a tan sólo 9.
2.3.1.4.3 Los códigos de función
El valor de las señales FC depende del estado del microcontrolador. Los 8 valores
posibles se decodifican de acuerdo con la siguiente tabla:
FC2 FC1 FC0 Estado interno0 0 0 Valor no usado0 0 1 Acceso a datos en modo usuario0 1 0 Lectura de instrucciones en modo usuario0 1 1 Valor no usado1 0 0 Valor no usado1 0 1 Acceso a datos en modo supervisor
41
1 1 0 Lectura de instrucciones en modo supervisor1 1 1 3 subestados posibles:
(1) reconocimiento y confirmación de una interrupción,
(2) reconocimiento y confirmación de un punto de ruptura,
(3) ciclo de paso a funcionamiento en bajo consumo.
Tabla 10 – Códigos de función.
Para distinguir los tres posibles subestados del estado 111, se puede decodificar el bus
de direcciones de la siguiente manera:
Subestado A23..A20
A19 A18 A17 A16 A15..A5 A4
A3
A2
A1
A0
(1) pto. Ruptura 0 0 0 0 0 0 X X X Y 0(2) bajo consumo
0 0 0 1 1 1 1 1 1 1 0
(3) Interr. 1 1 1 1 1 1 1 X X X 1
Tabla 11 – Subestados del código de función 111.
2.3.1.4.4 Puntos de ruptura
Un punto de ruptura es un mecanismo que, bien sea por programa, bien sea por medio
de una señal externa, nos permite detener la ejecución de instrucciones por parte de la
CPU32 e inspeccionar el estado del microcontrolador (registros internos, memoria
externa, etc.). Para ello no es necesario que esté activo el depurador de segundo plano.
En el 68331 se pueden establecer puntos de ruptura de dos formas:
Por programa: si en nuestro programa insertamos una instrucción
BKPT, al llegar a ella, el microcontrolador detiene la ejecución e inicia
un ciclo de confirmación del punto de ruptura.
Por medio de la señal #BKPT: si algún dispositivo externo activa esta
señal, la CPU32 responde con un ciclo de confirmación.
2.3.1.4.5 Cesión del bus
El MC68331 dispone de 3 señales para arbitrar el uso y compartición de los buses de
datos y direcciones: #BR (petición de bus por el dispositivo externo), #BG (señal de
42
cesión del bus) y #BGACK (confirmación de fin de petición, y que indicará al 68331
que el bus está libre).
Cuando un dispositivo capaz de usar el bus (tal como un controlador de DMA u otro
micro) desee hacer uso del mismo, deberá activar la señal #BR, para informar al 68331
de sus intenciones. Cuando éste finalice el ciclo de bus en curso, activará la señal #BG,
momento a partir del cual el dispositivo externo se convierte en el gestor del bus (bus
master), pudiendo emplearlo para lo que desee. Mientras el nuevo gestor mantenga
activa la señal #BGACK, el 68331 no empleará el bus y mantendrá sus terminales
DATA, #DS, ADDR, #AS, FC, R/#W, #RMC y SIZ en alta impedancia para evitar
interferencias en el manejo del bus cedido.
2.3.1.5Interrupciones
2.3.1.5.1 Fuentes de interrupción externas
Además de las interrupciones generadas por el temporizador periódico (PIT), el SIM
gestiona las 7 entradas de interrupciones de origen externo #IRQ[1..7]. Todas estas
interrupciones se activan a nivel bajo, excepto la #IRQ7 que responde también al flanco
de bajada.
Las interrupciones externas están sujetas a un esquema de prioridad en el cual #IRQ0
recibe la mínima e #IRQ7 la máxima; en caso de simultaneidad de interrupciones se
atenderá primero a la más prioritaria. El dispositivo solicitante debe mantener la
petición de interrupción hasta que ésta es atendida, ya que las peticiones no son
capturadas (latched) por el micro.
2.3.1.5.2 Arbitraje de interrupciones simultáneas
Si se produce la petición simultanea de una interrupción de origen interno y otra de
origen externo (o entre dos de origen interno), el SIM usa los campos IARB para
decidir cuál se atiende antes. En el caso de las interrupciones externas, su IARB es el
del registro SIMCR. Es importante hacer notar que si este registro contiene un valor
igual a 0 será atendida como una interrupción espúrea.
2.3.1.5.3 Ciclo de reconocimiento y confirmación de una interrupción externa
La solicitud y atención a una interrupción implica un diálogo entre el 68331 y el
dispositivo solicitante de acuerdo con el siguiente protocolo de comunicaciones:
El dispositivo solicita la interrupción activando alguna línea #IRQ[1..7].
43
El micro responde (si la interrupción está permitida y una vez resuelto el
proceso de arbitraje) activando R/#W, FC[0..2], AS# y DS# a nivel alto,
y poniendo en SIZ[0..1] el valor adecuado (8 o 16 bis) para comunicarse
con el dispositivo.
El periférico debe activar AVEC# (para solicitar la atención en modo
autovectorizado) o DSACK# (en cuyo caso la interrupción será atendida
en modo vectorizado y el dispositivo debe haber colocado previamente el
vector de interrupción en el bus de datos).
En cualquiera de estos casos el 68331 responde desactivando #DS y
#AS, cuando el periférico desactive #DSACK, la CPU32 comenzará la
atención efectiva a la interrupción (si las interrupciones son
autovectorizadas esto es inmediato, dado que las señales #DSACK no
estarán activas durante el ciclo). Este proceso conlleva guardar en la pila
el estado de ejecución (esto es, los registros PC y SR), buscar el vector
de interrupción adecuado y ejecutarlo.
Si deseamos que todas las #IRQ[1..7] sean autovectorizadas podemos poner a nivel
bajo el terminal AVEC# permanentemente.
2.3.1.6Lógica de direcciones
El SIM permite que el diseñador de sistemas basados en el 68331 disponga de la
posibilidad de generar hasta 12 señales de selección de pastilla (chip-selects) sin
necesidad de añadir nuevos circuitos integrados. Es posible programar qué zona del
mapa de memoria activa cada una de estas señales y generar internamente las señales
DSACK# y AVEC# con los tiempos de respuesta adecuados al dispositivo periférico o
la memoria utilizados.
2.3.1.6.1 Registros de configuración de la lógica de direcciones: CSBORBT y CSOR0..CSOR10
Usando estos registros podemos programar el modo de funcionamiento de la lógica de
direcciones incorporada en el SIM. Todos ellos comparten una misma estructura interna
de campos:
MODE: permite seleccionar si el chip-select correspondiente es
asíncrono (MODE=0) o está sincronizado con la señal de reloj ECLK.
44
BYTE: permite definir si el dispositivo activado usa el byte más
significativo del bus de datos (BYTE=10), el menos significativo
(BYTE=01) o ambos (BYTE=11).
R/#W: permite definir chip-selects para dispositivos de sólo lectura
(R/#W=01), de sólo escritura (R/#W=10) o de lectura-escritura
(R/#W=11).
STRB: si se ha seleccionado el modo asíncrono (MODE=0), permite
definir si la activación del chip-select depende de #AS (STRB=0) o de
#DS.
#DSACK: especifica el número de estados de espera que se ha de
insertar antes de finalizar el ciclo de bus asociado a esta señal; el mínimo
es 0000 y el máximo es 1101; el valor 1110 indica que deseamos un
acceso rápido de sólo 2 ciclos de reloj.
SPACE: determina en qué modo de funcionamiento ha de estar la
CPU32 para que el ciclo de bus se pueda ejecutar con normalidad: modo
usuario (SPACE=01), modo supervisor (SPACE=10) o cualquiera de
los dos (SPACE=11).
IPL: nivel de prioridad asociado a la señal, en el caso de que sea usada
para generar las señales DSACK# o AVEC# para un dispositivo que
haya solicitado una interrupción.
AVEC#: habilita las interrupciones autovectorizadas (AVEC#=1).
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0Campo MODE BYTE R/W# STRB DSACK# SPACE IPL AVEC#
2.3.1.6.2 Registros de configuración de la dirección base: CSBARBT y CSBAR0..CSBAR10
La memoria accesible con cada señal de chip-select puede comenzar en cualquier
dirección que sea múltiplo de 2 KB. El tamaño del bloque de memoria al que se accede
puede tomar 8 valores entre un mínimo de 2 KB y un máximo de 1 MB. Los bits 15 al 3
especifican qué valores adoptan virtualmente los terminales ADDR23-ADDR11 del bus
de direcciones; los bits 2 al 0 (BLKSZ[2..0]) determinan el tamaño del bloque accedido:
BLKSZ[2..0] Tamaño del bloque Bits de direcciones fijos
45
000 2 KB ADDR[23..11]001 8 KB ADDR[23..13]010 16 KB ADDR[23..14]011 64 KB ADDR[23..16]100 128 KB ADDR[23..17]101 256 KB ADDR[23..18]110 512 KB ADDR[23..19]111 1 MB ADDR[23..20]
Tabla 12 – Determinación del tamaño de bloque de memoria.
Para permitir el autoarranque, el CSBOOT# se conectará a una memoria no volátil y
debe estar configurado en la dirección base $000000, ya que es ahí donde la CPU32 lee
los vectores de interrupción 0 y 1 tras el reset.
2.3.1.7Inicialización del SIM
El SIM debe ser el primer módulo que inicialicemos al salir del reset, dado que realiza
funciones de supervisión y arbitraje del sistema. Los pasos a seguir son:
1. Programar el SIMCR, principalmente los siguientes puntos:
El campo IARB que determina el nivel de arbitraje de las
interrupciones del SIM (al salir del reset vale $F, el nivel
máximo).
El campo IARB que determina el nivel de arbitraje de las
interrupciones del SIM (al salir del reset vale $F, el nivel
máximo).
El bit MM que determina la posición en el mapa de memoria de
los registros (por defecto estarán situados a partir de $FFF000).
El bit SUPV controla si el acceso a los registros se puede o no
hacer en modo usuario (por defecto sólo pueden hacerlo los
programas que funcionen en el modo supervisor).
El bit FRZSW deshabilita el supervisor SW y las interrupciones
periódicas durante la ejecución paso a paso del BDM
(deshabilitado por defecto).
El bit FRZBM habilita el supervisor de bus durante la ejecución
paso a paso del BDM (deshabilitado por defecto).
46
2. Programar el SYNCR:
El bis SWE habilita o deshabilita el supervisor SW (habilitado por
defecto).
Los campos SWP y SWT fijan el periodo de funcionamiento del
temporizador del supervisor SW (por defecto está fijado a su
mínimo valor).
El bit HME habilita el supervisor de parada (inicialmente
deshabilitado).
El bit BMT fija el tiempo máximo de espera de supervisor de bus
antes de generar internamente la señal #BERR (por defecto espera
64 ciclos de reloj, su valor máximo).
3. Programar el SYPCR, principalmente:
Los bits W, X e Y permiten establecer la velocidad del reloj del
sistema (por defecto multiplican la frecuencia de referencia por
256).
El bit RSTEN habilita la provocación de un reset cuando se
detecte falta de reloj de referencia (por defecto está deshabilitado).
4. Programar el PICR:
El campo PIRQL fija el nivel de prioridad de las interrupciones
periódicas (o bien las deshabilita).
El campo PIV establece el número del vector de interrupción de
las mismas (por defecto vale $F, que es el vector asociado a las
interrupciones no inicializadas). Lo inicializaremos con algún
vector de usuario (a partir de $40).
5. Programar el PITR:
El bit PTP fija si se usa o no el preescalado de valor 512 en el
temporizador del interrupciones periódicas (por defecto se usa el
preescalado).
El campo PITM fija el periodo del interrupción de dicho
temporizador.
47
6. Programar los chip-selects que use nuestro sistema, empleando para
ello los registros CSPAR0, CSPAR1, CSBARBT, CSBAR,
CSORBT y CSOR.
7. Programar los puertos de entrada o salida E y F (el puerto C siempre
funciona como salida):
Los registros PEPAR y PFPAR, habilitan dichos puertos (por
defecto, su valor depende de las señales DATA8 y DATA9
durante el reset).
Los registros DDRE Y DDRF configuran cada bit de los mismos
como entradas (DDREx=0) o como salidas (por defecto son
entradas).
Los registros PORTE y PORTF reflejan el contenido de los
puertos (para los bits configurados como entradas) o bien lo
establecen (para los bits configurados como salidas).
2.3.2 Temporizador de propósito general (GPT)
Un temporizador de propósito general (GPT) de 11 canales como el que contiene el
MC68331 se usa en sistemas donde se requiere un nivel de control medio por parte del
procesador.
El GPT consta de una unidad de captura/comparación, un acumulador de pulsos y dos
moduladores de ancho de pulso. La conexión interna se realiza a través del bus
intermodular (IMB) mediante una unidad de interfaz.
La unidad de captura/comparación incluye tres canales de captura de entrada, cuatro de
comparación de salidas y otro canal más que puede seleccionarse tanto como captura de
entrada como de comparación de salida. Estos canales comparten un contador continuo
de 16 bits cuya señal de reloj se puede obtener de un preescalador de nueve etapas
conectado al reloj del sistema o bien a través de una señal externa del reloj, PCLK.
El acumulador de pulsos contiene un contador de 8 bits que puede usarse como contador
de sucesos o como acumulador de tiempo, de modo que cuenta los pulsos de reloj
mientras se halla activo el terminal PAI.
El modulador de ancho de pulso (PWM) genera una señal periódica cuadrada cuya
duración del ciclo de trabajo se puede seleccionar desde el 0 % al 100 % mediante
48
software. En el caso de un ciclo de trabajo del 50 % tendremos la típica onda cuadrada.
Los circuitos PWM contienen un contador continuo de 16 bits cuyo reloj puede
ajustarse con el mismo preescalador de nueve etapas utilizado por la unidad de
captura/comparación o por la entrada del PCLK.
Todos los terminales del GPT pueden utilizarse como entradas/salidas de propósito
general. Los terminales de captura de entradas y los de comparación de salidas
constituyen un puerto paralelo bidireccional de 8 bits (PORTGP). Los terminales del
PWM son sólo de salida y los de PAI y PCLK son sólo de entrada.
2.3.2.1Registros del GPT y mapa de direcciones
Los registros del GPT con su respectivo mapa de direcciones se detallan en la tabla
siguiente:
Dirección 15 8 7 0$FFF900 MÓDULO DE CONFIGURACIÓN DEL GPT (GPTMCR)$FFF902 (RESERVADA PARA TEST)$FFF904 CONFIGURACIÓN DE INTERRUPCIÓN (ICR)$FFF906 DIRECC. DATOS PGP (DDRGP) DATOS PGP (PORTGP)$FFF908 MÁSCARA DE ACCIÓN OC1 (OC1M) DATOS DE ACCIÓN OC1 (OC1D)$FFF90A CONTADOR DEL TEMPORIZADOR (TCNT)$FFF90C CONTROL DE PA (PACTL) CONTADOR DE PA (PACNT)$FFF90E ENTRADA DE CAPTURA 1 (TIC1)$FFF910 ENTRADA DE CAPTURA 2 (TIC2)$FFF912 ENTRADA DE CAPTURA 3 (TIC3)$FFF914 SALIDA DE COMPARACIÓN 1 (TOC1)$FFF916 SALIDA DE COMPARACIÓN 2 (TOC2)$FFF918 SALIDA DE COMPARACIÓN 3 (TOC3)$FFF91A SALIDA DE COMPARACIÓN 4 (TOC4)$FFF91C ENTRADA DE CAPTURA 4/SALIDA DE COMPARACIÓN 5 (TI4/O5)$FFF91E CONTROL DE TEMP. 1 (TCTL1) CONTROL DE TEMP. 2 (TCTL2)$FFF920 MÁSCARA DE TEMP. 1 (TSMK1) MÁSCARA DE TEMP. 2 (TSMK2)$FFF922 FLAG DE TEMP. 1 (TFLG1) FLAG DE TEMP. 2 (TFLG2)$FFF924 COMPRAR. FORZADA (CFORC) CONTROL C DE PWM (PWMC)$FFF926 CONTROL A DE PWM (PWMA) CONTROL B DE PWM (PWMB)$FFF928 CONTADOR DE PWM (PWMCNT)$FFF92A BUFFER DE PWMA (PWMBUFA) BUFFER DE PWMB (PWMBUFB)$FFF92C PREESCALADOR DEL GPT (PRESCL)
Tabla 13 – Mapa de direcciones de los registros del GPT.
Se puede acceder a todos los registros utilizando accesos a byte o a palabra. A los
registros de captura/comparación y de modulación de ancho de pulso se debe acceder
mediante operaciones de palabra para garantizar la coherencia. Si se utilizasen accesos a
byte para leer un registro como el contador del temporizador (TCNT), podría darse el
caso de que el byte al que no se ha accedido cambiase mientras se lee el otro byte. Por
ello se debe acceder a ambos bytes a la vez.
49
2.3.2.2Funcionamiento por “polling” o por interrupciones
Todas las funciones del GPT tienen asociadas una interrupción y una bandera de estado.
Los registros de la bandera de interrupción del temporizador (TFLG1 y TFLG2)
contienen las banderas de estado utilizadas para el funcionamiento por “polling” o por
interrupciones, los registros de máscara (TMSK1 y TMSK2) contienen bits de control
de la interrupción. Las rutinas de control pueden monitorizar el funcionamiento del
GPT consultando los registros de estado. Cuando se produce un evento, la rutina de
control transfiere el control a una rutina de servicio que trata dicho evento. Si se han
habilitado las correspondientes interrupciones, el GPT solicita una interrupción de
servicio cuando dicho evento se produce. La utilización de interrupciones evita tener
que hacer un “polling” continuo de las banderas de estado para ver si se ha producido
algún evento. Las banderas de estado deben borrarse después de dar servicio a una
interrupción, para deshabilitar la petición de interrupción.
2.3.2.2.1 Funcionamiento por “polling”
Cuando se produce un evento en el GPT, se pone a uno la bandera de estado en TFLG1
o TFLG2, éstas son activadas por el GPT, no por la CPU. TFLG1 y TFLG2 son
registros de 8 bits a los que se puede acceder bien individualmente o conjuntamente con
un acceso de 16 bits. Estos registros se ponen a cero cuando se hace un reset.
A cada bit de TFLG1 y TFLG2 le corresponde un bit en TMSK1 y TMSK2 situado en
la misma posición. La interrupción asociada a un evento sólo se genera cuando se
encuentra habilitado su respectivo bit de máscara.
Una vez activada una bandera de estado por un evento, debe borrarse escribiendo un
cero en el bit correspondiente del registro. Los registros de estado se borran en una
secuencia particular: Primero debe leerse el registro para activar las banderas, después
deben escribirse ceros en las banderas que hay que borrar. Si se produce un nuevo
evento en el tiempo transcurrido desde que se lee el registro hasta que se escribe, la
bandera asociada no se borrará.
En el funcionamiento por “polling” se deberá consultar continuamente el estado de las
banderas y atender la correspondiente rutina de servicio cuando se active una.
A continuación se muestra la tabla de banderas de estado del GPT:
Nemónico Asignación de Registros
Fuente
50
IC1F TFLG1 Entrada de Captura 1IC2F TFLG1 Entrada de Captura 2IC3F TFLG1 Entrada de Captura 3OC1F TFLG1 Salida de Comparación 1OC2F TFLG1 Salida de Comparación 2OC3F TFLG1 Salida de Comparación 3OC4F TFLG1 Salida de Comparación 4I4/O5F TFLG1 Entrada de Captura 4 / Salida de Comparación 5TOF TFLG2 Desbordamiento del temporizador
PAOVF TFLG2 Desbordamiento del acumulador de pulsosPAIF TFLG2 Entrada del acumulador de pulsos
Tabla 14 – Tabla de banderas de estado del GTP.
2.3.2.2.2 Interrupciones del GPT
El GPT tiene 11 fuentes internas que pueden provocar una petición de interrupción.
Éstas se activan poniendo a uno los bits de los registros TMSK1 y TMSK2. Se trata de
registros de 8 bits a los que se puede acceder bien individualmente o bien
conjuntamente con un acceso de 16 bits. Estos registros se inicializan a cero después de
un reset. Cada bit de TMSK1 y TMSK2 tiene su respectivo bit en TFLG1 y TFLG2
situado en la misma posición. TMSK2 controla también el funcionamiento del
preescalador.
El valor del campo de nivel de interrupción (IRL) del registro de control de
interrupciones (ICR) determina la prioridad de las peticiones de interrupción del GPT.
Los valores de IRL se corresponden con las señales de petición de interrupción
#IRQ[7:1] del MCU. IRQ7 es la señal de petición de interrupción de mayor prioridad e
IRQ1 la de menor. Un valor de 111 hace que se active IRQ7 cuando se produce una
petición de interrupción, valores inferiores hacen que se activen las correspondientes
señales de petición de menor prioridad. Si se pone el campo a 000, se desactivan las
interrupciones.
La CPU32 reconoce sólo señales de petición de interrupción con una prioridad mayor
que el valor de la máscara de prioridad de interrupción (IP) del registro de estado.
Cuando la CPU reconoce una petición de interrupción, la prioridad de dicha petición se
anota en la máscara de IP y se pone en las líneas de dirección del IMB. Si dicho valor
es el mismo que el del IRL, se produce un arbitraje en la prioridad. Esta prioridad del
GPT viene determinada por el valor del campo de arbitraje de interrupciones, IARB,
del registro de configuración, GPTMCR. A cada módulo del microcontrolador que
51
pueda hacer peticiones de interrupción, debe asignársele un valor IARB diferente y
distinto de cero para poder implementar un esquema de arbitraje.
Cuando el GPT gana el arbitraje de interrupción, responde al ciclo de reconocimiento
de la CPU colocando un número de vector de interrupción en el bus de datos. El
número de vector se utiliza para calcular el desplazamiento dentro de la tabla de
vectores de excepción de la CPU32. Los números de vector se forman mediante la
concatenación del valor del campo IVBA del ICR con un número de 4 bits que
proporciona el GPT en función de la petición de interrupción atendida. El hardware
evita que el número de vector pueda cambiar cuando se está sacando al IMB. La
asignación de los números de vectores se muestra en la siguiente tabla:
NombreNúmero de
FuenteFuente
Número de Vector
--- 0000 Canal de Ajuste IVBA : 0000IC1 0001 Entrada de Captura 1 IVBA : 0001IC2 0010 Entrada de Captura 2 IVBA : 0010IC3 0011 Entrada de Captura 3 IVBA : 0011OC1 0100 Salida de Comparación 1 IVBA : 0100OC2 0101 Salida de Comparación 2 IVBA : 0101OC3 0110 Salida de Comparación 3 IVBA : 0110OC4 0111 Salida de Comparación 4 IVBA : 0111IC4/OC5
1000Entrada de Captura 4 / Salida de
Comparación 5IVBA : 1000
TO 1001 Desbordamiento del Temporizador IVBA : 1001
PAOV 1010Desbordamiento del Acumulador de
PulsosIVBA : 1010
PAI 1011 Entrada del Acumulador de Pulsos IVBA : 1011
Tabla 15 – Fuentes de interrupción del GPT.
2.3.2.3Descripción de los terminales
El GPT utiliza 12 terminales, cada uno de los cuales puede llevar a cabo más de una
función. Podemos agruparlos en los siguientes grupos funcionales:
2.3.2.3.1 Terminales de captura de entradas (IC[1:3])
Cada uno de estos terminales está asociado a una única función de captura de entrada
del GPT. El funcionamiento tiene la histéresis siguiente: se garantiza que cualquier
pulso de duración superior a dos ciclos de reloj es válido y que cualquiera inferior a uno
no se tiene en cuenta. Cada pin tiene asociado un registro de captura de 16 bits que
conserva el valor capturado del contador. Estos terminales pueden utilizarse también
como E/S de propósito general.
52
2.3.2.3.2 Terminal de captura de entrada / comparación de salida (IC4/OC5)
Este pin puede configurarse tanto para la captura de entrada como para la comparación
de salida. Tiene asociado un registro de 16 bits que se utiliza para guardar bien el valor
de captura de entrada o bien el de comparación de salida. Cuando se usa para la captura
de entrada tiene la misma histéresis que cualquier otro. También se puede utilizar como
E/S de propósito general.
2.3.2.3.3 Terminales de comparación de salidas (OC[1:4])
Estos terminales se utilizan para las funciones comparación de salida del GPT. Cada
terminal tiene asociado un registro de comparación y un comparador de 16 bits. Los
terminales OC2, OC3 y OC4 están asociados a su propia función de comparación,
mientras que la función del OC1 puede afectar a la salida de todos los terminales de
comparación. Si el terminal OC1 no se necesita para ninguna función de comparación,
puede utilizarse para sacar la señal de reloj seleccionada para el temporizador. Todos
estos terminales pueden utilizarse también como E/S de propósito general.
2.3.2.3.4 Terminal de entrada del acumulador de pulsos (PAI)
El PAI permite contar sucesos externos o bien contar el tiempo durante el que se
encuentra activa la señal en el terminal PAI. El PAI tiene la misma histéresis que los
terminales de captura de entradas. También puede utilizarse como entrada de propósito
general
2.3.2.3.5 Terminales de modulación de ancho de pulso (PWMA, PWMB)
Los terminales PWMA y PWMB están conectados a las salidas del modulador de
ancho de pulso. Los moduladores pueden programarse para generar una onda periódica
de frecuencia y porcentaje del ciclo de trabajo variables. PWMA puede utilizarse para
sacar la señal de reloj seleccionada como entrada del contador del PWM. Estos
terminales pueden utilizarse también como salidas de propósito general.
2.3.2.3.6 Entrada auxiliar de reloj del temporizador (PCLK)
El terminal PCLK sirve para conectar un reloj externo al GPT para proporcionar la
señal de reloj de la unidad de captura/comparación o de la unidad PWM en lugar de la
proporcionada por el preescalador. La histéresis de PCLK es la misma del resto de
entradas del GPT. También puede utilizarse como entrada de propósito general.
53
2.3.2.4E/S de propósito general
Cualquier terminal del GPT puede utilizarse como E/S de propósito general si no se
está usando para otra cosa. Los terminales de captura/comparación son bidireccionales.
La función como entrada o salida se controla con el bit de dirección de datos del registro
de dirección de datos del puerto GP (DDRGP).
Los datos se leen y se escriben en el registro de datos del puerto GP (PORTGP). Los
datos de los terminales se pueden leer incluso si están configurados para una función del
temporizador. Los datos leídos del puerto PORTGP siempre reflejan el estado del
terminal externo, mientras que los que se escriben en dicho puerto no siempre afectan a
dicho terminal externo.
Los datos escritos en el puerto PORTGP no se trasladan a los terminales utilizados para
la comparación de salidas, pero el dato es capturado por el registro del puerto. Cuando
se desactiva la función de comparación de salida, el último dato escrito en el puerto,
PORTGP, se saca por el terminal correspondiente, si está configurado como de salida.
Los datos escritos en el puerto PORTGP pueden provocar capturas de entrada si el
terminal correspondiente está configurado para ello.
Los terminales PAI y PCLK proporcionan entradas de propósito general. Se puede ver
el estado de estos terminales accediendo a los bits de estado PAIS y PCLKS del
registro de control del acumulador de pulsos (PACTL).
Los terminales de salida de modulación de ancho de pulso, A y B, pueden servir como
salidas de propósito general. Los bits FPWMx y F1x de los registros CFORC y
PWMC, respectivamente, controlan su funcionamiento.
2.3.2.5Preescalador
Las unidades de captura/comparación y de modulación de ancho de pulso tienen
contadores continuos independientes de 16 bits como componentes principales para la
temporización. Estos contadores obtienen su reloj del preescalador o de la entrada
PCLK.
En el preescalador se aplica al reloj del sistema un divisor de nueve etapas. El
preescalador proporciona como salidas los resultados de dividir el reloj del sistema entre
2, 4, 8, 16, 32, 64, 128, 256 y 512. A estas salidas se conectan dos multiplexores, uno
para la unidad de captura/comparación y otro para la unidad PWM.
54
Cada multiplexor puede seleccionar una de siete de las salidas del preescalador o la
entrada externa del terminal PCLK. La salida del multiplexor para el contador del
temporizador (TCNT) se selecciona con los bits CPR[2:0] en el registro 2 de la
máscara de interrupciones del temporizador (TMSK2). La salida del multiplexor para el
contador del PWM (PWMCNT) se selecciona mediante los bits PPR[2:0] del registro
de control del PWM (PWMC).
Figura 12 – Diagrama de bloques del preescalador.
Después de un reset, el GPT se configura para que el TCNT utilice el reloj del sistema
dividido entre cuatro y el PWMCNT dividido entre dos. Con el software de
inicialización se puede cambiar el factor de división con la particularidad de que en los
bits PPR se puede escribir en cualquier momento, pero en los bits CPR sólo se puede
escribir una vez después del reset, salvo que el GPT se encuentre en modo test o freeze.
El preescalador se puede leer en cualquier momento. En modo freeze también se puede
escribir en él. Deben utilizarse accesos a palabra para garantizar la coherencia aunque se
55
permiten los accesos a byte. El valor del preescalador se encuentra en los bits [8:0],
mientras que los bits [15:9] no están implementados y se leen como ceros.
Las salidas del multiplexor (incluida la señal PCLK) pueden conectarse a terminales
externos. El bit CPROUT del registro TMSK2 configura el terminal OC1 como salida
del reloj de TCNT y el bit PPROUT del registro PWMC configura el terminal PWMA
como salida del reloj de PWMCNT. Se puede escribir en CPROUT y PPROUT en
cualquier momento. Cuando por OC1 y PWMA se sacan las señales de reloj, su ciclo
de trabajo no es del 50%.
El preescalador proporciona también tres señales de reloj al selector de reloj del
acumulador de pulsos, que son: el reloj del sistema dividido por 512, la señal del reloj
externo que viene del terminal PCLK y la señal de reloj de la unidad de
captura/comparación.
2.3.2.6Unidad de captura/comparación
La unidad de captura/comparación consta del contador del temporizador (TCNT), las
funciones de captura de entradas (IC) y las de comparación de salidas (OC).
2.3.2.6.1 Contador del Temporizador
El contador del temporizador (TCNT) es el componente clave de la unidad de
captura/comparación. Es un contador continuo de 16 bits, que comienza a contar cuando
el procesador vuelve de un reset. El contador no puede pararse durante el
funcionamiento normal. Tras un reset, el GPT está configurado para usar el reloj del
sistema dividido por cuatro como entrada del contador. El preescalador divide el reloj
del sistema y proporciona frecuencias de entrada que se pueden seleccionar. Mediante
software de usuario se puede configurar el sistema para utilizar una de las siete salidas
del preescalador o una señal de reloj externa.
Se puede leer el contador en cualquier momento sin que afecte a su valor. Como el GPT
está conectado mediante un interfaz con el IMB y éste tiene un bus de 16 bits, deben
hacerse lecturas de palabras para garantizar la coherencia, aunque también se pueden
hacer accesos a byte. El contador se pone a $0000 durante el reset y funciona como un
registro de sólo lectura, salvo en los modos test y freeze en que se puede escribir
cualquier valor en él.
56
Cuando el contador pasa de $FFFF a $0000, se activa el flag de desbordamiento del
temporizador (TOF) en el registro 2 de la bandera de interrupciones del temporizador
(TFLG2). Se puede habilitar una interrupción con el correspondiente bit de activación
de interrupciones (TOI) del registro 2 de la máscara de interrupciones del temporizador
(TMSK2).
2.3.2.6.2 Funciones de captura de entradas
Todas las funciones de captura de entradas utilizan el mismo contador de 16 bits
(TCNT). Cada terminal de captura de entrada tiene un “latch” de 16 bits y una lógica de
detección/selección de flanco. Cada función de captura de entrada tiene asociada una
bandera de estado y puede hacer que el GPT lance una petición de interrupción de
servicio.
Cuando el flanco de la señal realiza la transición seleccionada en un terminal de captura
de entrada, el “latch” asociado captura el contenido del TCNT y activa la bandera de
estado correspondiente. También se puede generar una petición de interrupción cuando
se detecta la transición.
La lógica de detección de flancos consta de dos bits de control por cada entrada que
activan la detección de flancos y seleccionan una transición a detectar. Los bits EDGxA
y EDGxB del registro 2 de control del temporizador (TCTL2) determinan si las
funciones de captura de entrada deben detectar sólo flancos de subida, sólo flancos de
bajada o ambos. Si se borran ambos bits, se desactiva la función de captura de entrada.
Estas funciones operan independientemente unas de otras, y pueden capturar el mismo
valor de TCNT si se detectan flancos de entrada distintos dentro del mismo ciclo del
contador.
La lógica de interrupciones de la captura de entradas incluye una bandera de estado, que
indica que se ha detectado un flanco, y un bit de activación de interrupción. Un evento
de captura de entrada pone a 1 el bit ICxF del registro 1 de la bandera de interrupción
del temporizador (TFLG1) y hace que el GPT pida una interrupción si está activado el
correspondiente bit ICxI en el registro 1 de la máscara de interrupción del temporizador
(TMSK1). Si no se activa dicho bit ICxI, el software debe mirar la bandera de estado
para saber si ha ocurrido un evento (polling).
Los eventos de captura de entradas son normalmente asíncronos con el contador del
temporizador. Debido a esto, es necesario adaptar las señales por medio de un
57
sincronizador y un filtro digital. Como los eventos están sincronizados con el reloj del
sistema, la transición del valor del contador al “latch” y el incremento del contador
suceden en semiciclos opuestos del ciclo del reloj del sistema. Como las entradas tienen
histéresis, la captura de cualquier transición mayor que dos ciclos de reloj está
garantizada y cualquier transición de duración inferior a un ciclo de reloj se ignora.
Debido a estas necesidades de sincronización y a los tiempos de propagación de las
señales transcurren varios ciclos de reloj del sistema desde que se produce la transición
en el terminal hasta que se realiza la captura.
El registro de captura de entradas es de 16 bits. Se requiere acceso a palabra para
garantizar la coherencia aunque está permitido el acceso a byte. Los registros de captura
de entradas pueden leerse en cualquier instante sin que afecte a sus valores.
Cada vez que se detecta el flanco seleccionado se realiza la captura de la entrada,
incluso si está activada la bandera de estado de captura. Esto significa que el valor leído
del registro de captura de entradas corresponde al último flanco detectado que puede no
ser el que causó que se activase la bandera.
2.3.2.6.3 Funciones de comparación de salidas
Cada terminal de comparación de salida del GPT tiene asociados un registro de
comparación y un comparador, ambos de 16 bits. Cada función de comparación de
salida tiene asociada una bandera de estado y puede hacer que el GPT genere una
petición de interrupción de servicio. La lógica de las salidas de comparación está
diseñada para prevenir falsas comparaciones durante los periodos de transición de los
datos.
Cuando el contenido programado de un registro de salida de comparación coincide con
el valor del TCNT, se activa un bit (OCxF) de la bandera de estado de salida de
comparación en TFLG1. Si está activado el correspondiente bit de interrupción (OCxI)
de TMSK1, se origina una petición de interrupción al producirse la coincidencia.
El funcionamiento de la comparación de salida 1 (OC1) difiere de las otras funciones de
comparación de salida. La lógica de control de OC1 puede programarse para provocar
cambios de estado en otros terminales de comparación cuando se produce una
coincidencia en OC1. Los bits de control del registro de comparación forzada del
temporizador (CFORC) permiten forzar el valor de las salidas.
58
2.3.2.6.3.1 Comparación de salida 1
La comparación de salida 1 puede afectar a cualquiera de los OC[1:5] cuando se
produce una coincidencia. Además, para permitir la generación de múltiples señales de
control a partir de una única comparación, esta función hace posible que dos o más
funciones de salida de comparación controlen el estado de un único terminal de
comparación. Se pueden generar de esta forma pulsos de salida con una duración de tan
sólo un ciclo de contador del temporizador.
Los registros de máscara de acción (OC1M) y de datos de acción (OC1D) controlan la
función OC1. Poniendo a 1 un bit en OC1M se selecciona el correspondiente bit del
puerto de datos paralelo del GPT. Los bits de OC1D determinan si los bits
seleccionados deben ser activados o borrados cuando se produzca una coincidencia
OC1. Los terminales deben configurarse como de salida para que los datos del registro
salgan al terminal correspondiente. Si se producen dos coincidencias, una OC1 y otra de
otra salida, a la vez y ambas intentan modificar el mismo terminal, la función OC1 es la
que toma el control del terminal.
2.3.2.6.3.2 Comparación de salida forzada
El registro de comparación forzada (CFORC) se utiliza para hacer comparaciones
forzadas. La acción resultante de una comparación forzada es la misma que cuando se
produce una coincidencia en una salida de comparación, excepto que no se activan las
banderas de estado. Los canales forzados ejecutan las acciones programadas
inmediatamente después de la escritura en el CFORC.
El registro CFORC es el byte superior de un registro de 16 bits que contiene también al
registro de control del PWM (PWMC). Los accesos a este registro pueden ser tanto de
8 como de 16 bits. Las lecturas de los bits de comparación forzada (FOC) no tienen
ningún sentido y siempre devuelven ceros.
2.3.2.6.4 Captura de entrada 4 / Comparación de salida 5
El terminal IC4/OC5 se puede utilizar para la captura de entrada, para la comparación
de salida y como E/S de propósito general. La función del terminal como captura de
entrada (IC4) o comparación de salida (OC5) se configura con el bit de activación de
función (I4/O5) del registro de control del acumulador de pulsos (PACTL). Las
funciones de E/S IC4/OC5 se controlan con el bit I4/O5 del registro de dirección de
datos del puerto GP (DDRGP).
59
El registro de 16 bits (TI4/O5) utilizado con la función IC4/OC5 actúa como un
registro de captura de entrada o como uno de comparación de salida según la función
que se seleccione. Cuando se utilice como registro de captura de entrada 4, no podrá
escribirse en él excepto en modo test o freeze.
2.3.2.7Acumulador de pulsos
El contador del acumulador de pulsos (PACNT) es un contador ascendente de
lectura/escritura de 8 bits. El PACNT puede actuar como contador de sucesos externos
o como acumulador de tiempo contando los ciclos de reloj durante los que el terminal
del PAI está activo.
En el modo contador de sucesos, se incrementa cada vez que se detecta la transición
seleccionada en la entrada del acumulador de pulsos (PAI). La tasa de reloj máxima que
admite es la del reloj del sistema dividida por cuatro.
En el modo acumulador de tiempo, un señal de reloj incrementa PACNT mientras el
terminal PAI está en estado activo. Hay cuatro posibles fuentes de reloj.
Los dos bits del registro TFLG2 muestran el estado del acumulador de pulsos. La
bandera del acumulador de pulsos (PAIF) indica que se ha detectado un flanco del tipo
seleccionado. La bandera de desbordamiento (overflow) del acumulador de pulsos
(PAOVF) señala que el contador del acumulador ha pasado de $FF a $00. Esto puede
utilizarse para aumentar el rango del contador por encima de los ocho bits.
Se puede hacer una petición de interrupción cuando está a uno cada una de las banderas
de estado. Sin embargo, la operación de interrupción del PAI depende del modo de
operación. En modo de contador de sucesos, se pide una interrupción cuando se detecta
el flanco que se va a contar. En modo contado de tiempo, la petición se produce cuando
la entrada del PAI cambia de estado activo a inactivo. Las peticiones de interrupción
son activadas por los bits PAOVI y PAII del registro TMSK2.
Los bits del registro de control del acumulador de pulsos (PACTL) controlan el
funcionamiento de PACNT. El bit PAMOD selecciona la operación en el modo de
contador de sucesos o contador de tiempo. En modo de contador de sucesos, el bit de
control (PEDGE) determina la detección por flanco de subida o de bajada; en modo
contador de tiempo, PEDGE especifica si la señal es activa a nivel alto o a nivel bajo.
Los bits PACLK[1:0] seleccionan el origen del reloj que se utilizará en el modo
acumulador de tiempo.
60
PACTL y PACNT se implementan como registros de 16 bits, pero se puede acceder a
ellos en ciclos de acceso a byte o a palabra. Ambos registros se borran con un reset,
salvo los bits PAIS y PCLKS que muestran el estado de los terminales PAI y PCLK.
El terminal PAI puede utilizarse también como entrada de propósito general. El estado
lógico del bit PAIS en PACTL muestra el estado del pin.
2.3.2.8Unidad de modulación de ancho de pulso
La unidad de modulación de ancho de pulso (PWM) tiene dos canales de salida,
PWMA y PWMB. Una única salida de reloj procedente del multiplexor del
preescalador ataca al contador de 16 bits que se utiliza para controlar ambos canales.
La unidad PWM tiene dos modos de funcionamiento. El modo rápido utiliza una tasa
de reloj igual a 1/256 de la tasa de salida del preescalador; la tasa del modo lento es de
1/32768. Las proporciones de los ciclos de trabajo de ambos canales PWM pueden
controlarse individualmente mediante software. El terminal PWMA puede también
sacar la señal de reloj que va al contador PWM. Los terminales PWM pueden utilizarse
también como salidas.
2.3.2.8.1 Contador PWM
El contador de 16 bits de la unidad PWM es similar al contador de la unidad de
captura/comparación. Durante el reset, el GPT está configurado para que el contador
utilice el reloj del sistema divido por dos. El software de inicialización puede
reconfigurar el contador para que utilice una de las siete salidas del preescalador o una
entrada de reloj externa desde el terminal PCLK.
El registro del contador del PWM (PWMCNT) puede leerse en cualquier momento sin
que se vea afectado su valor. La lectura debe hacerse en modo palabra para garantizar la
coherencia, admitiéndose también los accesos a byte. El contador se pone a cero con el
reset y es un registro de sólo lectura salvo en los modos test y freeze.
Quince de los dieciséis bits del contador son salidas hacia los multiplexores A y B. Los
multiplexores proporcionan los modos lento y rápido de la unidad PWM. El modo para
PWMA es seleccionado por el bit SFA del registro de control del PWM (PWMC), el
de PWMB lo selecciona el bit SFB del mismo registro.
Los bits PWMA, PWMB y PPR[2:0] controlan la frecuencia de salida de PWM. En el
modo rápido, los bits [7:0] de PWMCNT son utilizados para marcar el ritmo a la lógica
61
del PWM; en el modo lento, se utilizan los bits [14:7]. El periodo de una salida PWM
es 128 veces mayor que el del modo rápido.
PPR [2:0]
Salida del Preescalador SFA/B=0 SFA/B=18.39 Mhz 16.78 Mhz 8.39 Mhz 16.78 Mhz 8.39 Mhz 16.78 Mhz
000 Div 2 = 4.19 Mhz Div 2 = 8.39 Mhz 16.4 Khz 32.8 Khz 128 Hz 256 Hz001 Div 4 = 2.10 Mhz Div 4 = 4.19 Mhz 8.19 Khz 16.4 Khz 64 Hz 128 Hz010 Div 8 = 1.05 Mhz Div 8 = 2.10 Mhz 4.09 Khz 8.19 Khz 32 Hz 64 Hz011 Div 16 = 524 Khz Div 16 = 1.05 Mhz 2.05 Khz 4.09 Khz 16 Hz 32 Hz100 Div 32 = 262 Khz Div 32 = 524 Khz 1.02 Khz 2.05 Khz 8 Hz 16 Hz101 Div 64 = 131 Khz Div 64 = 262 Khz 512 Hz 1.02 Khz 4 Hz 8 Hz110 Div 128 = 66 Khz Div 128 = 131 Khz 256 Hz 512 Hz 2 Hz 4 Hz111 PCLK PCLK PCLK/256 PCLK/256 PCLK/32768 PCLK/32768
Tabla 16 – Margen de frecuencias del PWM para señales de reloj del sistema de 8.39 MHz y 16.78 Mhz.
2.3.2.8.2 Función PWM
El ancho de pulso en las salidas de PWM viene determinado por el contenido de los
registros de control PWMA y PWMB. Son registros de 8 bits que forman parte de un
registro de 16 bits. Se puede acceder a PWMA y PWMB como bytes separados o como
un único registro de 16 bits. Un valor $00 grabado en cualquiera de los registros
provoca que salga por el correspondiente terminal de salida una señal continua de nivel
lógico cero. Un valor de $80 hace que la correspondiente señal de salida tenga un ciclo
de trabajo del 50% y así sucesivamente hasta llegar al valor máximo, $FF, que se
corresponde con una salida que está en el nivel lógico uno para 255/256 del periodo.
Si se ponen a uno los bits F1A (para PWMA) o F1B (para PWMB) en el registro hace
que por el correspondiente terminal salga una señal continua de nivel lógico uno. El
nivel lógico del terminal asociado no varía hasta el fin del ciclo en curso. F1A y F1B
son los dos bits inferiores de CFORC, pero se puede acceder a ellos en la misma
dirección de palabra como PWMC.
Los datos escritos a PWMA y PWMB no se utilizan hasta haber finalizado el ciclo
completo. Esto evita la aparición de pulsos espurios cortos o largos cuando cambian los
valores de registro. El valor del ciclo en curso se almacena en el buffer del registro
apropiado (PWMBUFA o PWMBUFB). El nuevo valor es transferido del registro
PWM al registro del buffer al finalizar el ciclo en curso.
Los registros PWMA, PWMB y PWMC se ponen a cero tras el reset. Se puede leer o
escribir en estos registros en cualquier momento. PWMC es el byte inferior de un
registro de 16 bits. El byte superior es el registro CFORC. Los registros del buffer,
62
PWMBUFA y PWMBUFB, son de sólo lectura en todo momento y se puede acceder a
ellos como bytes separados o como registro único de 16 bits.
Los terminales PWMA y PWMB pueden utilizarse también como salida de propósito
general. Los valores de los bits F1A y F1B se trasladan a los correspondientes
terminales de PWM cuando se desactiva el funcionamiento normal.
2.3.3 Unidad central de proceso (CPU32)
La CPU32 es el módulo de procesamiento de instrucciones de primera generación de la
familia MC68300 basada en la conocida familia de procesadores MC68000. Como ya
se ha tenido la ocasión de comentar, un microcontrolador está formado por un
microprocesador unido a un conjunto de periféricos y opcionalmente puede disponer de
memoria también integrada en el chip.
La CPU32 tiene muchas características del MC68010 y del MC68020, así como
algunas características específicas para las labores de control. Mantiene la
compatibilidad en sentido ascendente con el MC68000 y con el MC68010 y en sentido
descendente con el MC68020 ya que la CPU32 no tiene implementadas algunas
instrucciones de éste. También incorpora dos nuevas instrucciones para facilitar ciertas
tareas de control como son las funciones de ahorro de energía y de búsqueda e
interpolación en tablas. En todo caso las diferencias con la familia M68000 se limitan al
modo supervisor. Los programas de usuario pueden ser ejecutados en sentido
ascendente sin necesidad de modificación.
La CPU32 presenta un consumo muy bajo de energía durante la ejecución normal
gracias a la tecnología HCMOS con que ha sido desarrollada. Además el consumo de
energía puede reducirse a un mínimo durante los periodos de inactividad mediante la
ejecución de la instrucción LPSTOP que detiene a la CPU32 así como a otros
submódulos.
También presenta una mayor velocidad de ejecución gracias a que dispone de un
“pipeline” de dos instrucciones que supone un cierto grado de procesamiento en
paralelo.
Por último dispone de un nuevo modo de depuración en segundo plano que permite que
un PC tome el control del microcontrolador para la depuración.
63
2.3.3.1Registros de la CPU32
El modelo de programación de la CPU32 es básicamente el mismo que el del
MC68000. Cuenta con los siguientes registros de 32 bits: ocho registros de datos, siete
registros de direcciones, un contador de programa y dos punteros de pila independientes
para los modos de usuario y supervisor. También dispone de un registro de estado de 16
bits y tres nuevos registros accesibles sólo en modo supervisor y que son el VBR
(Vector Base Register), el SFC (Source Function Code) y el DFC (Destination
Function Code).
En el modo usuario los registros son los mismos que en el MC68000 y que se detallan
en la tabla 17.
31 16 15 8 7 0D0D1D2D3 REGISTROS DE DATOSD4D5D6D7
31 16 15 0A0A1A2A3 REGISTROS DE DIRECCIONESA4A5A6
31 16 15 0A7 (USP) PUNTERO DE PILA DE USUARIO
31 0PC CONTADOR DE PROGRAMA
7 0CCR REGISTRO DE CÓDIGOS DE CONDICIÓN
Tabla 17 – Registros del modo usuario.
En el modo supervisor se tiene acceso a nuevos registros. Por un lado se dispone de un
puntero de pila específico. Además es visible el registro de estado (SR) completo, ya
que en el modo usuario sólo estaba disponible el byte inferior (CCR) que contiene los
códigos de condición. En el byte superior se encuentran los tres bits de la máscara de
interrupción (IP), dos bits para habilitar o inhabilitar los dos modos de trazado en los
que puede trabajar el microprocesador y el bit de selección de modo con el que se puede
determinar el nivel de privilegio usuario/supervisor que se desea.
64
Los modos de traza son una ayuda al desarrollo de programas que generan una
excepción tras la ejecución de cada instrucción o bien cada vez que se produce una
bifurcación y que permite la utilización de un programa monitor para la depuración.
Figura 13 – Registro de estado.
También se tiene acceso a los tres nuevos registros que incorpora la CPU32 cuyas
funciones se describen a continuación:
Registro del Vector Base ( VBR ) : Contiene la dirección base de la tabla
de vectores de excepción cuya extensión es de 1024 bytes y contiene 256
vectores. Estos vectores son la dirección de memoria donde comienza la
rutina de atención a la excepción. Cada vector tiene asignado un número
de ocho bits. El procesador multiplica ese número por cuatro y le suma el
VBR para calcular la dirección de memoria del vector .
Registros SFC ( Source Function Code ) y DFC ( Destination Function
Code ) : Son registros de 3 bits. Los códigos de función pueden
considerarse como extensiones de los 24 bits de direcciones disponibles
proporcionando gracias a los códigos de función hasta 8 espacios
direccionables de 16 Mbytes. La instrucción MOVES copia datos
utilizando los registros SFC y/o DFC. Para el movimiento de datos en
los registros de códigos de función se utiliza la instrucción MOVEC. Se
trata de una transferencia de doble palabra siendo ignorados los 29 bits
superiores.
A7’ (SSP) PUNTERO DE PILA DE SUPERVISOR
65
31 16 15 8 7 0(CCR) SR REGISTRO DE ESTADO
31 0VBR REGISTRO DEL VECTOR BASE
7 0SFC CODIGO DE FUNCIÓN DE ORIGENDFC CODIGO DE FUNCIÓN DE DESTINO
Tabla 18 – Registros adicionales del modo supervisor.
2.3.3.2Modos de direccionamiento
La abundancia en modos de direccionamiento es la clave del éxito de la familia
MC68000 ya que esa aparente complejidad es lo que realmente simplifica la
programación. La CPU32 comparte los mismos modos de direccionamiento que la
familia MC68000 y añade algunos otros nuevos que se describen a continuación.
2.3.3.2.1 Nuevos modos de direccionamiento
Indirecto a registro con índice y desplazamiento de base: (bd, An, Xn).
La dirección efectiva es: <ea> = (An) + (Xn) + bd
Indirecto a contador de programa con índice y desplazamiento de base:
(bd, PC, Xn)
La dirección efectiva es: <ea> = (PC) + (Xn) + bd
Escalado de índice: todos los direccionamientos con índice admiten un
factor de escala de 1, 2, 4 y 8. Por ejemplo:
El direccionamiento (bd, An, Xn.size*scale) significa:
<ea> = (An) + (Xn*scale) + bd
Bifurcaciones con 32 bits de desplazamiento: La instrucción Bcc
admite desplazamientos de 32 bits al igual que el MC68020, ya que el
68000 y el 68010 sólo admite desplazamientos de 16 bits.
2.3.3.3Instrucciones de la CPU32
La familia MC68300 participa de la filosofía de Motorola de mantener una
compatibilidad ascendente de modo que los programas de usuario puedan ser ejecutados
en procesadores más avanzados sin la necesidad de que sean modificados y que los
programas que se ejecutan en modo supervisor sólo requieran unas mínimas
modificaciones.
66
La CPU32 puede ejecutar el código objeto desarrollado para el 68000 y el 68010. Es
muy similar al 68020 soportando la mayoría de las instrucciones de éste.
Las siguientes instrucciones del 68020 no están implementadas en la CPU32:
BFxxx, CALLM, RTM, CAS, CAS2, PACK, UNPK, cpxxx (instrucciones de
coprocesador).
No se va a entrar en detalle sobre las mismas pero se deberá tener en cuenta que si se
dispone de código objeto que las contenga será necesario modificarlo o bien emular
dichas instrucciones.
La CPU32 tiene implementadas algunas instrucciones nuevas orientadas principalmente
a las aplicaciones de control.
2.3.3.3.1 Nuevas instrucciones
LPSTOP #<dato> - Se trata de una instrucción que se ejecuta en modo
supervisor. El operando inmediato #<dato> de 16 bits se carga en el
registro de estado, el contador de programa avanza hasta la siguiente
instrucción y el procesador se para. La ejecución se reanuda de nuevo
cuando se genera un ciclo de interrupción, se entra en modo traza o
después de un reset.
MOVEC <origen>,<destino> - Es una instrucción específica para
mover datos a los registros de control SFC, DFC y VBR. Mueve el
contenido de un registro de control a un registro general o viceversa. Se
trata siempre de una operación de 32 bits.
MOVES Rn,<ea> o MOVES <ea>,Rn – Sirve para el movimiento de
datos entre registros y memoria, pero teniendo en cuenta el espacio de
direcciones especificado por los registros de códigos de función SFC y
DFC. Las operaciones pueden ser de 8, 16 y 32 bits.
TBLS.size <ea>,Dn – Esta instrucción sirve para realizar la búsqueda e
interpolación lineal en una tabla. Permite interpolar linealmente hasta
256 valores intermedios entre dos valores consecutivos de una tabla.
<ea> – apunta al comienzo de la tabla de interpolación.
Dx (15:8) – offset dentro de la tabla del primero de los datos.
67
Dx (7:0) – fracción de interpolación entre 0 y 255.
Ejemplo: Dada la tabla de pares de valores de una función (0,0), (1,1000), (15,5000), (35,7000), se desea conocer el valor interpolado asociado al 7.
Tabla DC.W 0,1000,5000,7000
MOVE.L #$00020080,D0 * la fracción es (15-1)*256/7=128=$80
* el offset es 2
TBLS.W tabla,D0 * en D0 se obtiene el valor interpolado
El resultado devuelto es 3000 = 1000+(128*(5000-1000))/256
RTD #<desplazamiento> - Funciona igual que RTS pero incrementa el
puntero de pila en (4 + #<despl>).
BKPT - Se genera un punto de ruptura si está habilitado el modo de
depuración en segundo plano. El vector asociado es el número 12.
MULS, MULU – El funcionamiento es idéntico con la salvedad de que
aceptan operandos de 32 bits y el resultado es de 64.
CHK2 <ea>,Rn – Si el contenido de Rn está fuera de dos límites genera
una excepción. <ea> contiene la dirección efectiva de la pareja de
límites, primero el inferior y luego el superior. Esta instrucción es del
68020.
TRAPcc - Causa una excepción TRAP cuando se cumple la condición
cc. Se trata de una instrucción del 68020.
2.3.3.4Depuración en segundo plano (BDM)
La CPU32 presenta una cualidad única que consiste en llevar implementado un
depurador en el propio microcódigo de la CPU. El BDM incorpora un conjunto
completo de herramientas de depuración que permiten ver y modificar los registros y la
memoria.
El BDM permite establecer una comunicación serie bidireccional con un equipo
externo. Con tan sólo implementar un sencillo circuito de comunicación se puede
controlar la ejecución desde un PC, por ejemplo. Los terminales asociados a este
proceso de comunicación son DSI, DSO y DSCLK.
La depuración en segundo plano (BDM) es una función que se activa durante el reset.
Durante el modo de operación BDM, la ejecución normal se suspende.
68
2.3.4 Módulo de comunicaciones serie (QSM)
El QSM contiene dos interfaces serie, la interfaz serie de periféricos en cola (QSPI) y la
interfaz serie de comunicaciones (SCI).
La QSPI facilita la expansión periférica o la comunicación entre procesadores mediante
un bus de tres líneas, síncrono y full-duplex. Dispone de cuatro terminales de selección
de chip programables permiten seleccionar hasta 16 dispositivos periféricos. Lleva
integrada una cola memoria RAM que permite realizar hasta 16 transferencias serie, de
8 a 16 bits cada una, o bien la transmisión de una cadena de datos de 256 bits, sin
intervención de la CPU. Un modo especial de bucle proporciona muestreo continuo de
un periférico serie, con actualización automática de la RAM de la QSPI, para
proporcionar una interfaz eficiente con los convertidores A/D.
La SCI utiliza un un formato NRZ estándar. Funciona tanto en modo full-duplex como
en semi-duplex. Dispone de bits independientes para la activación del transmisor y del
receptor. Un generador de flujo de datos tipo módulo proporciona de 32 baudios a 262
Kbaudios con un reloj de sistema de 8.38 MHz, o de 64 baudios a 524 Kbaudios con un
reloj de 16.77 MHz. Se pueden seleccionar longitudes de palabra de 8 o de 9 bits.
Permite la generación y control de paridad tanto par como impar. Dispone de una
función despertador que permite que la CPU se dedique a otras tareas hasta que un dato
completo esté disponible.
En este capítulo sólo se describe la interfaz de comunicación serie (QSI) por entenderse
que es la de mayor interés para las aplicaciones que se van a desarrollar.
2.3.4.1Registros generales del QSM
Existen básicamente tres registros de configuración generales que son:
QSMCR (Registro de configuración del QSM) – Contiene los
parámetros de interconexión con el bus intermodular, que son: el campo
de arbitraje de interrupciones IARB, el bit de restricción del modo
usuario SUPV, el bit FRZ1 que permite ignorar la señal FREEZE o
detener el QSPI cuando el IMB activa la señal y el bit STOP que
detiene el reloj del QSM.
QILR (Registro de niveles de interrupción) – Permite configurar el
nivel de prioridad de las interrupciones para cada uno de los módulos del
69
QSM de forma independiente por medio de los campos ILQSPI e
ILSCI. Se trata de un registro de ocho bits que forma parte de la misma
palabra que contiene al registro QIVR.
QIVR (Registro del vector de interrupciones) – Contiene el vector de
interrupción, INTV[7:0], de ambos submódulos. Cuando se escribe en
este registro sólo los 7 bits de mayor peso INTV[7:1] se ven afectados
ya que el valor del bit INTV0 lo proporciona el QSM, tomando valor 0
para el SCI y valor 1 para el QSPI.
2.3.4.1.1 Atención a las interrupciones
Ambos submódulos disponen de niveles de prioridad independientes. El funcionamiento
no difiere en esencia del resto de los módulos. Cuando la CPU32 reconoce una
interrupción de este módulo coloca el valor de prioridad en la máscara de interrupciones
IP y atiende la excepción salvo que exista otra del mismo nivel que deberá entonces
resolverse mediante el arbitrio de interrupciones.
2.3.4.2Registros de control de los terminales del QSM
El QSM utiliza 9 terminales de los cuales ocho pueden utilizarse como E/S de propósito
general. Los registros que permiten la configuración de la función de los terminales se
describen a continuación:
PQSPAR (Registro de asignación de pines del Puerto QS) – Se trata
del byte superior de un registro de 16 bits. Al escribir un 0 en el bit
asociado a cada terminal se asigna éste como E/S de propósito general.
Al escribir un 1 se asigna la función asociada al QSPI. Este registro no
afecta al funcionamiento de los terminales del SCI.
DDRQS (Registro de dirección de los datos) – Se determina si los
terminales actúan como entradas o como salidas. Escribiendo un 1 en el
bit correspondiente a un terminal actúa como salida y escribiendo un 0
como entrada.
PORTQS (Registro del Puerto QS) – A través de este registro se leen
los terminales determinados como entrada y se escribe en los terminales
de salida.
70
2.3.4.3Interfaz de Comunicación Serie (SCI)
La SCI se comunica con los dispositivos externos a través de un bus serie asíncrono,
utilizando un formato de transmisión NRZ estándar. Es totalmente compatible con otros
sistemas de Motorola, tales como los que incorporan el M68HC11 y M68HC05.
2.3.4.4Registros de SCI
La programación de la SCI se realiza a través de registros generales y de control de
pines del QSM y de cuatro registros de la SCI, que son: dos registros de control,
SCCR0 y SCCR1, un registro de estado, SCSR, y uno de datos, SCDR.
2.3.4.4.1 Registros de control
SCCR0 contiene el campo de selección de la velocidad de transmisión,
medida en baudios. Esta velocidad debe establecerse antes de activar la
SCI. La CPU puede leer y escribir en este registro en todo momento.
SCCR1 incluye varios parámetros de configuración, entre los que se
incluyen los bits de activación del emisor y el receptor, los de
interrupción y los del modo de funcionamiento. La CPU puede leer y
escribir en este registro en cualquier momento.
Si se cambia el valor de los bits de control de la SCI durante una operación de
transferencia, ésta puede interrumpirse. Antes de cambiar los valores de los registros
debe permitirse a la SCI terminar la transferencia en curso y, a continuación, desactivar
el receptor y el transmisor.
2.3.4.4.2 Registro de estado
El registro de estado de la SCI (SCSR) contiene banderas que muestran condiciones de
funcionamiento de la SCI. Las banderas se borran mediante el hardware de la SCI o
mediante una secuencia de lectura/escritura. Por regla general, las banderas se borran
leyendo primero el SCSR y a continuación leyendo o escribiendo en el SCDR. En una
lectura de doble palabra se puede acceder consecutivamente a ambos registros, SCSR y
SCDR. Esta acción borra los bits de las banderas de estado de recepción que se
activaron durante la lectura, pero no las de transmisión, TDRE o TC.
Si la SCI envía una señal de activación de un bit de estado después de que la CPU haya
leído los bits de estado, pero antes de que haya leído o escrito en el SCDR, el bit de
estado afectado no se borra.
71
La lectura de cualquiera de los bytes del SCSR hace que se acceda a los 16 bits
completos, y cualquier bit de estado ya activado en cualquiera de los bytes se borrará en
una lectura o escritura posterior del SCDR.
2.3.4.4.3 Registro de datos
El SCDR contiene dos registros de datos en la misma dirección. El RDR es un registro
de sólo lectura que contiene datos recibidos por la interfaz serie de la SCI. Los datos
entran al registro de desplazamiento de recepción y son transferidos al RDR. El TDR es
un registro de sólo escritura que contiene datos a transmitir. Los datos se escriben
primero en el TDR y a continuación se transfieren al registro de desplazamiento de
transmisión, donde se añaden bits de formato y luego se transmiten. En el campo
R[7:0]/T[7:0] se encuentran los primeros ocho bits de datos recibidos al leer el SCDR o
los primeros ocho bits a transmitir al escribir en el SCDR. R8/T8 se utilizan cuando la
SCI está configurada para funcionar con 9 bits; si está configurada para 8 bits, no tiene
ninguna función.
2.3.4.5Terminales de la SCI
La SCI tiene únicamente dos terminales unidireccionales asociados y que son, el TXD
(datos de transmisión) y el RXD (datos de recepción). El terminal TXD puede utilizarse
también como E/S de propósito general. Su funcionamiento se asigna mediante el
registro de asignación de pines del puerto QS (PQSPAR). El terminal de datos de
recepción (RXD) está dedicado a la SCI.
2.3.4.6Funcionamiento de la SCI
Las banderas de estado de la SCI permiten la gestión del funcionamiento mediante
“polling” o mediante interrupciones que pueden activarse con los correspondientes bits
del registro SCCR1.
2.3.4.6.1 Definiciones
Bit-Time (Duración de bit) - Tiempo requerido para transmitir o recibir
un bit de datos; un periodo completo de la frecuencia de transmisión en
baudios.
Start Bit (Bit de arranque) – Se trata del primer bit de la trama de
transmisión y que sirve para indicar el comienzo de una trama de datos.
72
Un bit de arranque tiene lógica cero y anuncia el inicio de la trama con
una transición de uno a cero.
Stop Bit (Bit de parada) - Se trata del último bit de la trama con lógica
uno y que señala el final de una trama de datos.
Frame (Trama) – Es una unidad completa de información en serie. La
SCI puede utilizar tramas de 10 o de 11 bits.
Data Frame (Trama de datos) – Consiste en una trama precedida por
un bit de arranque y terminada por un bit de parada.
Idle Frame (Trama nula) – Es cuando no se transmite información.
Como la línea permanece de modo continuo a 1 puede considerarse
como una trama de unos sin bit de arranque.
Break Frame (Trama de ruptura) – Se trata de una trama que contiene
sólo ceros y sin bit de parada.
2.3.4.6.2 Formatos de transmisión serie
Todas las tramas de datos deben tener un bit de arranque y al menos uno de parada. Los
dispositivos de recepción y transmisión deben utilizar el mismo formato de trama de
datos. La SCI proporciona soporte hardware tanto para tramas de 10 como de 11 bits. El
bit del modo serie (M) del registro SCCR1 de control de la SCI especifica el número de
bits por trama.
El formato de trama de datos de diez bits, el más habitual en los interfaces serie NRZ
consiste en un bit de arranque, ocho bits de datos (primero el LSB) y un bit de parada.
La trama de datos típica de once bits consta de un bit de arranque, ocho bits de datos, un
bit de paridad y uno de parada.
2.3.4.6.3 Reloj de transmisión
El reloj de transmisión de la SCI se programa escribiendo un valor de 13 bits en el
campo de velocidad de transmisión (SCBR) del registro SCCR0 de control de la SCI.
La velocidad de transmisión en baudios se obtiene a partir del reloj del sistema mediante
un contador. Si se escribe un cero en el SCBR, se desactiva el generador de reloj. La
velocidad de transmisión en baudios se calcula con la siguiente fórmula:
VelocidaddeTransmisión=
Re lojdelsistema
32∗SCBR
73
El valor de SCBR varía entre 1 y 8191.
Como el receptor de la SCI funciona en modo asíncrono, se necesita un reloj interno
para sincronizarlo con un flujo de datos entrante. El generador de reloj de la SCI
produce una señal de muestreo para la recepción (RT) con un frecuencia 16 veces
superior a la frecuencia de transmisión. La SCI determina los límites de la señal de bit a
partir de transiciones de la onda recibida y ajusta el muestreo dentro del periodo del bit
para una correcta detección.
2.3.4.6.4 Comprobación de paridad
El bit de selección de tipo de paridad (PT) del SCCR1 determina si se utiliza una
paridad par (PT=0) o impar (PT=1). El bit PT configura la paridad tanto de los datos
recibidos como de los transmitidos. El bit de activación de paridad (PE) de SCCR1
habilita la comprobación de paridad cuando PE=1 o la inhabilita cuando PE=0. Cuando
PE está a uno, se utiliza el bit más significativo de los datos de una trama para la
función de paridad. Para datos enviados, se genera un bit de paridad; para datos
recibidos, se comprueba dicho bit. Cuando está activada la comprobación de paridad, se
pone a uno la bandera de paridad (PF) del registro de estado de la SCI (SCSR) al
detectarse un error de paridad.
Al mantenerse el número de bits de una trama constante cuando se activa la paridad se
reduce en uno el número de bits de datos de una trama., lo que puede afectar, a su vez,
al tamaño de la trama.
M PE Resultado0 0 8 bits de datos0 1 7 bits de datos y 1 de paridad1 0 9 bits de datos1 1 8 bits de datos y 1 de paridad
Tabla 19 – Efecto del control de paridad en el tamaño de los datos.
2.3.4.6.5 Funcionamiento del transmisor
El transmisor consta de un registro de desplazamiento y un registro de datos paralelo
(TDR) accesible a través del registro de datos de la SCI (SCDR). Dispone de un buffer
doble, lo que supone que se pueden cargar datos en el TDR mientras el registro de
desplazamiento está transmitiendo otros. El bit de activación del transmisor (TE) de
SCCR1 activa el transmisor cuando vale 1 y lo desactiva cuando vale 0.
74
La salida del registro de desplazamiento mantiene la conexión con el terminal TXD
mientras el transmisor está funcionando (TE=1 o TE=0 y la transmisión en curso). Se
puede seleccionar el tipo de salida del terminal TXD mediante el bit WOMS del
SCCR1, de modo que si WOMS=0 presenta una salida CMOS estándar y si WOMS=1
presenta una salida en colector abierto lo que permite el funcionamiento en modo OR
cableado y la convivencia de varios transmisores conectados al mismo bus. Para ello
será necesario conectar una resistencia de pull-up para mantener el nivel lógico en
circuito abierto. El bit WOMS controla el funcionamiento del terminal TXD
independientemente de si se utiliza para transmisiones de la SCI (TE=1) o como E/S de
propósito general.
Los datos a transmitir se escriben en TDR y a continuación se transfieren al registro de
desplazamiento serie. La bandera de registro de datos de transmisión vacío (TDRE) del
SCSR muestra el estado del registro TDR. Mientras TDRE=0, el TDR contiene datos
que no han sido transferidos al registro de desplazamiento. Si se escribe de nuevo en
TDR se sobreescriben estos datos. El bit TDRE se activa cuando los datos de TDR son
transferidos al registro de desplazamiento. Sin embargo, antes volver a escribir nuevos
datos en el TDR, es necesario borrar el bit TDRE escribiendo en el registro SCSR, ya
que de no hacerlo no se transmitirán los datos.
La bandera de transmisión completa (TC) del registro SCSR muestra el estado del
registro de desplazamiento del transmisor. Si TC=0, el registro de desplazamiento está
ocupado. El bit TC se pone a uno cuando se han completado todas las operaciones de
desplazamiento. El bit TC no se borra automáticamente, por tanto el procesador deberá
borrarlo escribiendo en el SCSR antes de llevar nuevos datos al TDR.
El estado del registro de desplazamiento serie se comprueba cuando se activa el bit TE.
Si TC=1, se transmite una trama nula como preámbulo de la siguiente trama de datos; si
TC=0, se continúa la operación en curso hasta el envío del bit de parada, y entonces se
envía la trama nula.
El bit de trama de ruptura (SBK) de SCCR1 se utiliza para insertar tramas de ruptura en
una transmisión. Se transmite un número entero distinto de cero de tramas de ruptura
mientras SBK está a uno. La transmisión de ruptura comienza cuando SBK se pone a
uno y acaba cuando que se borra SBK o TE y finaliza la transmisión en curso. Si el bit
SBK se pone a uno durante una transmisión, ésta finaliza normalmente antes de
comenzar la trama de ruptura. Para garantizar el tiempo mínimo de ruptura, se debe
75
conmutar rápidamente el bit SBK a 1 y luego a 0. El bit TC se pone a 1 al final de una
ruptura y se transmite al menos un periodo de bit con nivel lógico 1 para asegurar el
reconocimiento del bit de arranque.
Si el bit TE permanece activo, después de la transmisión de las tramas nulas, de datos o
de ruptura pendientes, los bits TDRE y TC se activan y el terminal TXD se mantiene
en el nivel lógico 1.
Cuando se borra el bit TE, el transmisor se desactiva después de que todas las tramas
nulas, de datos y de ruptura pendientes han sido transmitidas. La bandera TC se pone a
uno, y el terminal TXD vuelve a ser controlado por los registros PQSPAR y DDRQS.
El dato almacenado en el buffer no se transmite después de haber borrado el bit TE, por
lo que para evitar la pérdida del dato del buffer, el bit TE no debe borrarse hasta recibir
la confirmación de fin mediante el bit TDRE.
Tanto TDRE como TC tienen asociadas interrupciones. Las interrupciones se activan
con los bits TIE (Transmit Interrupt Enable) y TCIE (Transmission Complete Interrupt
Enable) del registro SCCR1. Las rutinas de servicio pueden cargar el último byte de
datos de una secuencia en el registro TDR y, a continuación, terminar la transmisión
cuando se produce la interrupción asociada al TDRE.
2.3.4.6.6 Funcionamiento del receptor
El bit de activación del receptor (RE) en el registro SCCR1 activa (RE=1) y desactiva
(RE=0) el receptor. El receptor está formado por un registro de desplazamiento para la
recepción de datos serie y un registro paralelo RDR accesible desde el registro de datos
SCDR. La CPU no puede acceder directamente al registro de desplazamiento serie sino
a través del registro RDR. La existencia de este doble buffer permite que un dato se
mantenga en el RDR mientras otro dato está siendo recibido en el registro.
Para la sincronización con la trama de datos serie entrante, el receptor dispone de una
unidad de proceso de bits que conforma una máquina de estados capaz de determinar el
nivel lógico de cada ciclo de bit. Esta máquina de estados controla el instante de
muestreo del terminal RXD y la sincronización con el registro de desplazamiento del
receptor y utiliza un reloj de recepción 16 veces más rápido que el reloj del sistema. Los
bits que entran por el terminal RXD se sincronizan antes de entrar en el registro de
desplazamiento y a partir de ese punto el flujo de datos va sincronizado con el reloj del
sistema.
76
El número de bits que el receptor introduce en el registro de desplazamiento depende
del formato seleccionado. En cualquier caso, todas las tramas deben finalizar con un bit
de parada. Una vez recibido el bit de parada se considera completa la trama y se
transfiere al registro RDR el dato, poniéndose a 1 la bandera del registro de datos del
receptor.
Los errores de paridad, de trama y los debidos al ruido se detectan mientras se recibe la
cadena de datos. Pese a ello, las banderas de señalización de ruido (NF), de paridad
(PF) y de error de trama (FE) de SCSR no se activan hasta que el dato se transfiere al
registro RDR.
Debe borrarse el bit RDRF antes de que tenga lugar la siguiente transferencia desde el
registro de desplazamiento. Si el bit RDRF permanece a uno cuando el registro de
desplazamiento está lleno, las transferencias se suspenden y la bandera de error de
desbordamiento (OR) del SCSR se pone a uno. El bit OR indica que la CPU necesita
dar un servicio más rápido a RDR. Cuando el bit OR se pone a uno, el dato de RDR se
conserva, pero el del registro de desplazamiento se pierde.
Cuando la CPU lee los registros SCSR y SCDR secuencialmente primero adquiere el
estado del registro SCSR y con ello se activa el mecanismo de borrado y después con la
lectura del registro SCDR se obtiene el dato, acción ésta con la que se borran las
banderas del registro SCSR.
Cuando el bit RIE del registro SCCR1 se pone a uno, se genera una petición de
interrupción cada vez que el bit RDRF se activa.
2.3.4.6.7 Detección de línea desocupada
Durante una transmisión serie típica, las tramas se transmiten de forma consecutiva sin
intervalos de espera entre tramas. Incluso aunque todos los bits de una trama sean unos
lógicos, el bit de arranque proporciona un periodo con un cero lógico durante la trama.
Una línea desocupada es una secuencia de unos consecutivos de igual tamaño que la
trama. El tamaño de trama viene determinado por el bit M de SCCR1.
El receptor de la SCI es capaz de realizar tanto una detección corta como larga de la
línea desocupada. En la detección corta se inicia la cuenta de periodos a nivel lógico
uno en cualquier instante dentro de una trama incluyéndose en la cuenta el bit de parada
y los unos consecutivos que le precedan. De esta forma se detecta la ausencia del bit de
arranque lo antes posible. En la detección larga la cuenta se inicia después del bit de
77
parada. La detección de línea desocupada está siempre activa. El bit ILT determina el
tipo de detección a aplicar. Si ILT=0 se aplica la detección corta y si ILT=1 se aplica la
detección larga. Cuando se detecta la condición de línea desocupada, se pone a uno la
bandera IDLE.
En algunas aplicaciones la sobrecarga de la CPU puede introducir un periodo de nivel
lógico uno entre tramas. Este periodo no afecta al contenido, pero si se produce después
de una trama de unos cuando está activada la detección corta, el receptor activa la
bandera de línea desocupada.
Cuando el bit de activación de interrupción por línea desocupada (ILIE) de SCCR1
está a uno, se genera una petición de interrupción cuando la bandera IDLE se activa. La
bandera se borra leyendo SCSR y SCDR consecutivamente. IDLE no vuelve a ponerse
a uno hasta después de haberse recibido al menos una trama (RDRF=1). Esto evita que
un intervalo desocupado largo genere más de una interrupción.
78
Capítulo 3
Control de un display LCD de modo textoEl objetivo que se persigue es que el alumno adquiera unos conocimientos generales
sobre el funcionamiento de un display LCD que le permitan utilizar un dispositivo de
estas características de una forma sencilla y, si lo desea, mejorar o perfeccionar el
ejemplo que se pone a su disposición.
El funcionamiento del display LCD a que hace referencia este documento va gobernado
por el controlador HD44780U de Hitachi. Hoy día existen varios dispositivos en el
mercado compatibles con este controlador por lo que la descripción que aquí se facilita
valdrá para un gran número de dispositivos. En cualquier caso se recomienda consultar
en cada caso la documentación facilitada por el fabricante.
3.1 Descripción general
Cuando se adquiere un display LCD lo primero que se puede observar es su apariencia
externa. Éste se compone de una placa de circuito impreso rectangular, de un tamaño
similar al del “display”, sobre la que van soldados el LCD, el controlador y el resto de
componentes, formando todo un conjunto compacto.
Figura 1 - Aspecto general de un “display”.
79
Bien en la parte superior o en la inferior debe encontrarse el conjunto de puntos (14 en
el dispositivo que aquí se describe) que permiten su conexión. Numerados de izquierda
a derecha tienen la siguiente funcionalidad:
PIN Símbolo Descripción1 Vss Masa2 Vdd Alimentación3 Vo Voltaje de ajuste del contraste4 RS Selección de registro5 R/W Lectura / escritura6 E Validación de datos (Enable)7 D0 Bit de datos menos significativo8 D1 Bit de datos9 D2 Bit de datos10 D3 Bit de datos11 D4 Bit de datos12 D5 Bit de datos13 D6 Bit de datos14 D7 Bit de datos más significativo
Tabla 1 – Función de los puntos de conexión.
Los tres primeros puntos de conexión (pins) son para la alimentación y control del
contraste. Los tres siguientes (RS, R/W y E) son para el control y los restantes (D0 a
D7) son para el intercambio de datos.
El gobierno de la pantalla LCD lo lleva a cabo el controlador HD44780U de Hitachi (o
similar). La utilización correcta del dispositivo depende del conocimiento que se tenga
sobre su funcionamiento, señales de control, instrucciones, etc. Asimismo, la forma de
conexión al microcontrolador dependerá de los diferentes modos de funcionamiento del
“display” por lo que resulta imprescindible describir su funcionamiento.
3.2 Funcionamiento del display
A modo de introducción general, el “display” es un dispositivo que dispone de un
puerto de Entrada/Salida por el que recibe instrucciones y datos y por el que devuelve
información sobre su estado interno. Para ello dispone de algunos registros que se
seleccionan mediante las líneas de control. Cada operación necesita de unos tiempos de
ejecución que se describirán posteriormente. Todo este proceso de comunicación se
controla con las tres líneas de control (RS, R/W y E) conforme al cronograma del
dispositivo.
80
3.2.1 Alimentación y control de contraste
La alimentación de 5 V. la recibe a través de los dos primeros puntos de conexión, al
primero (Vss) se conecta la masa y al segundo (Vdd) los 5 voltios, con un consumo de
corriente que no excede de 5mA. El tercero (Vo) permitirá el control del contraste
variando la tensión en el mismo entre 0 (contraste mínimo) y 5 voltios (contraste
máximo). A la hora de conectarlo, podremos optar entre dos soluciones:
8. Fijar el contraste a su valor máximo.
Ésta es la solución más sencilla, para lo cual se conectará este punto a
5 V.
9. Regular el contraste.
Para esta solución se conectará un potenciómetro en configuración de
divisor de tensión variable, conforme se detalla en la figura y con el
que se suministra la tensión deseada entre 0 y 5 V.
Figura 2 – Conexión de un potenciómetro de contraste.
Cabe recordar que cada fabricante puede optar por diferentes soluciones de polarización
para la regulación del contraste y por tanto será necesario consultar la documentación
del dispositivo.
3.2.2 La pantalla y los caracteres
El “display” está formado por un LCD (Liquid Crystal Display, pantalla de cristal
líquido) de dos líneas con 16 posiciones cada una. Cada posición está formada por una
matriz que puede ser de 5 x 8 ó de 5 x 10 puntos, para representar los diferentes
caracteres o símbolos. La pantalla está gobernada por el controlador HD44780U que
dispone de dos plantillas de caracteres predefinidas en la CGROM (Character
Generator ROM). La primera plantilla está formada por 160 caracteres de 5 x 8 puntos
81
más 32 de 5 x 10 y la segunda por 240 caracteres de 5 x 8 puntos. Ambas se pueden
consultar en el Anexo I.
En la tabla 2 se muestran los caracteres más importantes de la referida plantilla. Los
códigos de cada carácter vienen dados en hexadecimal y se puede comprobar que
coinciden con los códigos en ASCII.
Código Carac. Código Carac. Código Carac. Código Carac. Código Carac. Código Carac.$20 Espacio $30 0 $40 @ $50 P $60 ` $70 P$21 ¡ $31 1 $41 A $51 Q $61 A $71 Q$22 “ $32 2 $42 B $52 R $62 B $72 R$23 # $33 3 $43 C $53 S $63 C $73 S$24 $ $34 4 $44 D $54 T $64 D $74 T$25 % $35 5 $45 E $55 U $65 E $75 U$26 & $36 6 $46 F $56 V $66 F $76 V$27 ‘ $37 7 $47 G $57 W $67 G $77 W$28 ( $38 8 $48 H $58 X $68 H $78 X$29 ) $39 9 $49 I $59 Y $69 I $79 Y$2A * $3A : $4A J $5ª Z $6A J $7A Z$2B + $3B ; $4B K $5B [ $6B K $7B {$2C , $3C < $4C L $5C \ $6C L $7C |$2D - $3D = $4D M $5D ] $6D M $7D }$2E . $3E > $4E N $5E ^ $6E N $7E ~$2F / $3F ? $4F O $5F _ $6F O $7F ⌂
Tabla 2 – Conjunto de caracteres de uso más común.
En el caso aquí referido, la matriz de cada posición de la pantalla LCD es de 5 x 8
puntos, por lo que sólo tiene sentido usar la segunda plantilla de 240 caracteres
predefinidos.
3.2.3 La memoria del “display”
El “display” dispone de dos memorias de acceso aleatorio. La DDRAM (Display Data
RAM) donde se guardan los datos que se presentan en la pantalla y consta de 80
posiciones de 8 bits, es decir, 80 caracteres, y la CGRAM (Character Generator RAM)
que permite definir caracteres de usuario diferentes de los predefinidos en la CGROM.
Veamos a continuación su funcionamiento:
3.2.3.1Display Data RAM (DDRAM)
Como ya se ha comentado dispone de 80 posiciones destinadas a guardar los caracteres
a representar en la pantalla. Esta memoria se puede configurar en el modo de una línea,
en cuyo caso tendrá las 80 direcciones consecutivas, o en modo de dos líneas (se
entiende que sólo tiene sentido si la pantalla LCD es de dos líneas), quedando
fraccionada en dos bloques de 40 posiciones consecutivas por línea. Existe una tercera
variante implementada con un LCD de cuatro líneas en la que se fracciona en cuatro
bloques de 20 posiciones.
82
DDRAM
Modo de 1 línea.
1 2 3 4 5 6 7 79 80
Dirección 00 01 02 03 04 05 06
4E 4F
Modo de 2 líneas.
1 2 3 4 5 6 7 39 40
Línea 1 00 01 02 03 04 05 06
26 27
Línea 2 40 41 42 43 44 45 46 66 67
Figura 3 – Configuración en los modos de una y dos líneas.
Como la pantalla LCD tiene únicamente 16 posiciones, se puede pensar en el “display”
como en un display virtual de una línea de 80 caracteres, o bien, dos de 40, donde la
pantalla real es una ventana en la que se visualizan una o dos líneas de 16 caracteres.
Mas adelante se verá cómo se puede desplazar la pantalla real sobre el display virtual.
Cualquier operación de escritura en el “display” se trata, en realidad, de una escritura en
la DDRAM y será visible o no en la pantalla dependiendo de la posición relativa que en
un momento dado tenga la ventana de visualización.
Figura 4 – Display virtual y pantalla LCD.
3.2.3.2Character Generator RAM (CGRAM)
La memoria CGRAM permite definir caracteres de usuario. En total consta de 64
posiciones de 5 bits. El controlador HD44780U puede trabajar con pantallas LCD
cuyos caracteres están definidos mediante matrices tanto de 5 x 10 como de 5 x 8
puntos. Cada fila de cada matriz se corresponde con una dirección de memoria y cada
uno de los cinco bits se corresponde, a su vez, con un punto de la fila, de modo que un 1
indica que el punto está encendido y un 0 que está apagado.
83
Para direccionar la CGRAM se precisan 6 bits (26 = 64). En el caso de un LCD con
matrices de 5 x 10 puntos, la memoria se divide en cuatro bloques de 10 posiciones,
correspondiendo cada posición con una de las 10 filas de la matriz. Los primeros cuatro
bits de la dirección CGRAM servirán para determinar la fila de la matriz y los dos bits
restantes serán para direccionar cada uno de los cuatro bloques posibles. Si el LCD
tiene matrices de 5 x 8, como es el caso que aquí se describe, la memoria se divide en
ocho bloques de ocho posiciones, de modo que con los tres bits de menor peso se
recorren las filas de cada bloque y con los tres de mayor peso se recorren cada uno de
los ocho caracteres de usuario.
Dirección CGRAM
DatoCGRAM
0 0 0
0 0 0 1 0 0 0 10 0 1 0 1 0 1 00 1 0 1 1 1 1 10 1 1 0 0 1 0 01 0 0 1 1 1 1 11 0 1 0 0 1 0 01 1 0 0 0 1 0 01 1 1 0 0 0 0 0
0 0 1
0 0 0 0 1 1 1 00 0 1 0 1 1 1 00 1 0 0 1 1 1 00 1 1 0 0 1 0 01 0 0 1 1 1 1 11 0 1 0 0 1 0 01 1 0 0 1 0 1 01 1 1 1 0 0 0 1
1 1 1
0 0 0 0 0 1 0 00 0 1 0 1 0 1 00 1 0 1 0 0 0 10 1 1 1 0 0 0 11 0 0 1 0 1 0 11 0 1 1 0 1 0 11 1 0 1 1 1 1 11 1 1 0 0 0 0 0
Tabla 3 - Creación de caracteres de usuario.
3.2.4 Señales de control y registros internos
Para el control se dispone de cuatro señales: validación de datos (E), selección de
lectura/escritura (R/W), selección de registro (RS) e indicador de sistema ocupado
84
(BF). Los registros internos son tres: el contador de direcciones (AC), el registro de
instrucciones (IR) y el de datos (DR).
3.2.4.1Señales de control
Validación de datos, “Enable” (E): Cuando no se utiliza el
“display” esta señal debe permanecer a 0. Cuando se desea realizar
una transferencia de información (lectura o escritura) se ponen los
datos y las señales de control deseadas y se valida la operación con
E=1, debiendo permanecer en ese estado lógico durante un tiempo
superior a 500 ns., para que se realice correctamente la captura de los
datos en el registro. Cuando se devuelve la señal de validación a su
estado de reposo, E=0, la ejecución de la instrucción se inicia con el
flanco de bajada de esta señal. El periodo completo de la señal de
validación, formado por el estado lógico 1 seguido del estado lógico
0, no podrá ser inferior a 1 s.
Selección de lectura/escritura, “Read/Write” (R/W): Se selecciona
R/W=0 para realizar una operación de escritura en el display y
R/W=1 para la lectura de datos del mismo.
Selección de registro, “Register Select” (RS): Con RS=0 se
selecciona el registro de instrucciones (IR), y con RS=1 se
selecciona el de datos (DR).
Indicador de ‘sistema ocupado’, “Busy Flag” (BF): Es una señal
que proporciona el sistema y que, con valor 1 (BF=1), indica que el
“display” está ejecutando una operación interna y no podrá aceptar
una nueva instrucción hasta que termine, momento en el cual pasa a
valor 0 (BF=0). El BF podrá ser leído en el último bit del registro de
instrucciones (IR7) para lo que se deberá seleccionar el registro IR
en modo lectura (RS=0, R/W=1).
85
Figura 5 – Ejemplo de cronograma de las señales de control. (Extraído del catálogo de Hitachi).
3.2.4.2Registros internos
Contador de direcciones, “Address Counter” (AC): Apunta la
dirección de memoria DDRAM o CGRAM sobre la que se escribe o
se lee un dato. Su valor se incrementa o decrementa automáticamente
en una unidad después de cada operación según se haya configurado
previamente. Para modificar o leer la dirección del AC se utilizan los
siete primeros bits del registro IR (IR0-IR6). El valor de este
contador es utilizado también por el circuito de control del cursor,
que lo colocará en la posición que éste indica.
Registro de instrucciones, “Instruction Register” (IR): En este
registro se escriben las instrucciones que se desea que el display
ejecute. También se puede leer el valor del contador de direcciones
(AC) en los primeros 7 bits (IR0 - IR6), teniendo disponible en el
octavo (IR7) la señal indicadora de ‘sistema ocupado’ (BF).
Registro de datos, “Data Register”, (DR): Se utiliza para las
operaciones de escritura y lectura en la memoria DDRAM o
CGRAM.
En la tabla 4 se resumen las señales de control asociadas a la selección de registro.
RS R/W Acción0 0 Operación de escritura en IR (instrucción u operación interna).0 1 Operación de lectura de IR (permite leer el AC (IR0-IR6) y el BF (IR7)).1 0 Operación de escritura en DR (escritura del dato en la DDRAM o CGRAM).1 1 Operación de lectura de DR (lectura del dato de la DDRAM o CGRAM).
Tabla 4 – Selección de registro.
86
3.2.5 Conjunto de instrucciones
El LCD se controla mediante instrucciones que se resumen en la tabla 5. En las líneas
siguientes se ofrece una breve descripción de cada una.
INSTRUCCION RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DuraciónBorrar display. 0 0 0 0 0 0 0 0 0 1 1.52 ms.Cursor a inicio. 0 0 0 0 0 0 0 0 1 --- 37 s.
Establecer modo de trabajo. 0 0 0 0 0 0 0 1 I/D S 37 s.Control ON/OFF del display. 0 0 0 0 0 0 1 D C B 37 s.
Desplazamiento del cursor / display. 0 0 0 0 0 1 S/C R/L --- --- 37 s.Establecer modo de interfaz. 0 0 0 0 1 DL N F --- --- 37 s.Fijar dirección de CGRAM. 0 0 0 1 ACG ACG ACG ACG ACG ACG 37 s.Fijar dirección de DDRAM. 0 0 1 ADD ADD ADD ADD ADD ADD ADD 37 s.
Lectura de BF y AC 0 1 BF AC AC AC AC AC AC AC 0 s.Escritura de datos en CGRAM/DDRAM 1 0 Datos a escribir 37 s.Lectura de datos en CGRAM/DDRAM 1 1 Lectura de datos 37 s.
I/D = 1S = 1
S/C = 1R/L = 1DL = 1N = 1F = 1
BF = 1
Incremento.Display acompaña al desplazamiento.
Desplazar el display.Desplazamiento a derecha.
Modo 8 bits.Dos líneas.
Fuentes de 5 x 10 puntos.Ocupado internamente.
I/D = 0S = 0
S/C = 0R/L = 0DL = 0N = 0F = 0
BF = 0
Decremento.Display quieto.
Desplazar el cursor.Desplazamiento a izquierda.
Modo 4 bits.Una línea.
Fuentes de 5 x 8 puntos.Listo para recibir comandos.
Tabla 5 – Resumen de instrucciones.
3.2.5.1Borrar display, “Clear Display”
CÓDIGO: $01
DESCRIPCIÓN: Esta instrucción escribe el carácter blanco ($20)
en todas las posiciones de la DDRAM, pone el contador de
direcciones (AC) a cero y devuelve el display a su posición de inicio
si se encuentra desplazado. También lo configura en el modo de
incremento (I/D=1).
TIEMPO DE EJECUCIÓN: 1.52 ms.
3.2.5.2Cursor a inicio, “Return Home”
CÓDIGO: $02
DESCRIPCIÓN: Envía el cursor a la posición 0, es decir, carga la
dirección 0 en el contador de direcciones (AC) y devuelve el display
a la posición de inicio.
TIEMPO DE EJECUCIÓN: 37 s.
87
3.2.5.3Establecer modo de trabajo, “Entry Mode Set”
CÓDIGO: 0 0 0 0 0 1 I/D S [$0 (4-7)]
DESCRIPCIÓN: Cada vez que se realiza una lectura o escritura el
contador de direcciones (AC) se incrementa o decrementa en función
del valor del bit I/D.
I/D: Cuando I/D=1, el contador de direcciones se incrementa y el
cursor se mueve hacia la derecha y cuando es I/D=0 se decrementa y
el cursor se mueve hacia la izquierda.
S: Con el bit S=1 se indica al display real que se desplace junto con
el cursor, con lo que da la impresión de que es el display el que se
desplaza, ya que cursor y display real mantienen la misma posición
relativa. Si S=0 el display permanece quieto y podemos observar
cómo el cursor avanza con cada escritura.
TIEMPO DE EJECUCIÓN: 37 s.
3.2.5.4Control ON/OFF del display
CÓDIGO: 0 0 0 0 1 D C B [$0 (8-F)] (Valor típico $0E)
DESCRIPCIÓN: Con este comando se activan y desactivan el
display, el cursor y la función de parpadeo.
D: Cuando D=0, el display funciona normalmente pero la pantalla
LCD está apagada. Todos los caracteres que se escriban
permanecerán en la DDRAM y se harán visibles en el momento en
que hagamos D=1.
C: Con C=1 se activa el cursor y con C=0 se desactiva, es decir, no
se ve.
B: Si B=1, el carácter que se halla en la posición del cursor parpadea.
Si B=0, no parpadea.
TIEMPO DE EJECUCIÓN: 37 s.
3.2.5.5Desplazamiento del cursor o display
CÓDIGO: 0 0 0 1 S/C R/L 0 0
88
DESCRIPCIÓN: Esta instrucción desplaza el cursor o el display
una posición a derecha o izquierda, según se indique con los bits S/C
y R/L. S/C=1 desplaza el display real y S/C=0 desplaza el cursor.
Con R/L=1/0 se indica que el desplazamiento sea a
derecha/izquierda.
TIEMPO DE EJECUCIÓN: 37 s.
3.2.5.6Establecer modo de interfaz, “Function Set”
CÓDIGO: 0 0 1 DL N F 0 0
DESCRIPCIÓN: Con esta instrucción se configuran tres aspectos
del “display”: La longitud del bus de datos, el número de líneas y el
tipo de fuentes.
DL: Si DL=1, se configura un bus de datos de 4 bits, usando sólo los
de mayor peso del puerto (DB4 a DB7) y, si DL=0, el bus es de ocho
bits (DB0 a DB7). En el modo de cuatro bits cada instrucción se
envía en dos bloques consecutivos.
N: Si N=1, el controlador trabaja en el modo de dos líneas (sólo tiene
sentido con un LCD de dos líneas) y si N=0 trabaja en el modo de
una línea.
F: Con F=1 se elige el juego de caracteres de 5 x 10 puntos y si F=0
el juego a utilizar es el de 5 x 8 puntos.
TIEMPO DE EJECUCIÓN: 37 s.
3.2.5.7Fijar dirección de CGRAM
CÓDIGO: 0 1 A5 A4 A3 A2 A1 A0
CÓDIGO TÍPICO: 0 1 0 0 0 0 0 0 (Acceso a la posición cero de la
CGRAM)
DESCRIPCIÓN: La dirección especificada en A5–A0 se copia en el
contador de direcciones para el acceso a la CGRAM.
TIEMPO DE EJECUCIÓN: 37 s.
89
3.2.5.8Fijar dirección de DDRAM
CÓDIGO: 1 A6 A5 A4 A3 A2 A1 A0
CÓDIGO TÍPICO: 1 0 0 0 0 0 0 0 (Acceso a la posición cero de la
DDRAM).
DESCRIPCIÓN: La dirección (A6-A0) se copia en el contador de
direcciones para el acceso a la DDRAM.
TIEMPO DE EJECUCIÓN: 37 s.
3.2.5.9Escritura de datos en la CGRAM o DDRAM
CÓDIGO: 1 0 D D D D D D D D
DESCRIPCIÓN: Escribe el dato especificado en la DDRAM o
CGRAM. La escritura en una u otra memoria viene determinada por
la operación previa. En el caso de iniciarse una escritura nueva,
mediante la operación de fijar una dirección de la CGRAM o
DDRAM. Por defecto se trabaja siempre en la DDRAM. No debe
olvidarse que tras cada escritura el AC se incrementa o decrementa
automáticamente.
TIEMPO DE EJECUCIÓN: 37 s.
3.2.5.10 Lectura de datos de la CGRAM o DDRAM
CÓDIGO: 1 1 D D D D D D D D
DESCRIPCIÓN: Esta instrucción funciona de forma idéntica a la
escritura y permite conocer los datos grabados en estas memorias.
TIEMPO DE EJECUCIÓN: 37 s.
3.2.6 Secuencia típica de inicialización del LCD
Cuando se va a comenzar a utilizar el display, es necesario configurar previamente el
dispositivo. Ello se hace a través de una secuencia de inicialización con la que se define,
el tamaño del bus de datos, el número de líneas, el juego de caracteres, etc., tras la cual
ya se puede enviar caracteres al display.
Hay que tener en cuenta que el controlador HS44780U dispone de un circuito de reset
interno que, al conectar la alimentación, realiza, durante 10 ms., la siguiente secuencia:
90
1. Borra display ($01).
2. Establece interfaz de datos de 8 bits, una línea y fuentes de 5 x 8
puntos ($20).
3. Display, cursor y parpadeo apagados ($08).
4. Modo de incremento con el display real quieto ($06).
Partiendo de esta configuración inicial parece necesario establecer una secuencia de
inicio para configurarlo conforme a la forma de conexión del hardware y a la aplicación
que se le vaya a dar. A continuación se describe una secuencia típica, válida para la
operación en 8 y 4 bits.
1. Interfaz de datos de 8 o 4 bits, una línea y fuentes de 5 x 8 puntos
($20 o $30).
2. Incrementar contador de direcciones y display quieto ($06).
3. Display y cursor encendidos y sin parpadeo ($0E).
Tras esta secuencia se encuentra listo para imprimir datos.
3.2.7 Formas de conexión a un microcontrolador
A la hora de conectar el display a un microcontrolador existen dos factores que van a
determinar la forma de conexión y que son: la longitud del bus de datos y los modos de
control del LCD. A su vez, el microcontrolador va a jugar un papel determinante en
función de los recursos que tenga disponibles, como son la memoria, puertos de entrada,
salida o bidireccionales, etc.
3.2.7.1Longitud del bus de datos
El bus de datos del display es de 8 bits, pero puede configurarse para trabajar con
cuatro, multiplexando los bytes en grupos de 4 bits (nibbles). Esto permite ahorrar 4
puntos de conexión (pins) del puerto de entrada/salida de datos, pero tiene el
inconveniente de que el software de control es más complejo, ya que debe controlar
además el proceso de multiplexación.
91
3.2.7.2Modos de control del LCD
Existen dos formas de controlar el LCD dependiendo de si se usa o no el bit indicador
de ocupado:
Control en bucle cerrado: En este caso se observa el bit de ocupado
(BF) hasta que el display termine la ejecución de la instrucción en
curso. Esto se podrá hacer con diferentes técnicas. Por ejemplo
mediante un bucle de observación hasta que finalice la instrucción en
ejecución (BF=0), o bien, provocando un proceso de interrupción
cuando se cumple esa condición BF=0, etc. Para realizar el control en
bucle cerrado es necesario conectar el pin DB7 del display a un
puerto bidireccional que deberá configurarse como salida o entrada
de forma alternativa, cada vez que se lee el BF o se envía un dato.
Control en bucle abierto: De este segundo modo no se realiza
comprobación alguna sobre el estado del display. Se considera a éste
como si de un componente pasivo se tratara. Esto se puede hacer si se
tienen en cuenta los tiempos máximos de ejecución de las
instrucciones indicados por el fabricante. Después de enviar una
instrucción, se espera un tiempo tal que asegure que la instrucción ha
finalizado antes de enviar la siguiente.
Si se opta por este control, se puede realizar una segunda simplificación en el hardware
derivada de considerar que no va a ser necesario leer ningún registro del display, con lo
que se podría configurar de modo permanente en modo escritura. De este modo no es
necesario dedicar una línea de control para esta función (R/W=0) y por tanto sólo son
necesarias dos señales de control (RS y E).
El control en bucle cerrado goza de una mayor velocidad ya que se establece un dialogo
entre el LCD y el micro. También es cierto que la complejidad del software es mucho
mayor ya que hay que realizar muchas mas operaciones diferentes para cada instrucción
que se envía, pero se pueden evitar los tiempos de espera del control en bucle abierto y
dedicarlos a procesar otras tareas. En función de la aplicación que se quiera diseñar se
optará por la velocidad de la primera solución o la sencillez de la segunda.
92
Bus de 4 bits Bus de 8 bits
Bucle cerrado3 pins de salida para el control
4 pins E/S3 pins de salida para el control
8 pins de E/S para los datos
Bucle abierto2 pins de salida para el control4 pins de salida para los datos
2 pins de salida para el control8 pins de salida para los datos
Tabla 6 – Puntos de conexión necesarios según las diferentes opciones.
3.3 Ejemplos de control del LCD con el micro MC68331
La potencia del microcontrolador 68331 y su variedad de puertos permite implementar
cualquier control que se desee de forma aislada. La elección de la forma de conexión y
del tipo de control no es una decisión que se deba tomar a priori, sino que debe ir
integrado en el diseño global de la aplicación que se quiera realizar y de la que forma
parte el display como un módulo de presentación. La mayor o menor complejidad de la
aplicación, el número de señales que es preciso manejar, la memoria disponible, la
necesidad de que funcione en tiempo real, etc., son las características que, de verdad,
van a determinar la conexión y el control. Es interesante tener siempre presente que,
ante varias soluciones alternativas que cumplen con los objetivos de diseño y fiabilidad,
siempre es deseable escoger la más sencilla.
El objetivo de este ejemplo es ofrecer un punto de partida a aquellos alumnos que
necesiten utilizar el display para la presentación de datos. Por ello se han implementado
sendos controles, en bucle abierto y en bucle cerrado, de una forma estructurada,
describiendo brevemente cómo se han resuelto algunos de los problemas relativos a su
puesta en funcionamiento.
3.3.1 Ejemplo de control en bucle abierto
3.3.1.1Descripción de la aplicación de control
La aplicación va a consistir en la realización de una serie de acciones que se detallan en
la lista que se muestra a continuación:
1. Escribir la frase, “PRIMERA PRUEBA. ESCRITURA NORMAL
DE TEXTO”.
2. Escribir de nuevo, “ESPERE UNOS SEGUNDOS DESPUES DE
APAGARSE EL DISPLAY”.
3. Apagar el display.
93
4. Escribir en la DDRAM el siguiente párrafo: “En un lugar de la
Mancha de cuyo nombre no quiero acordarme, no ha mucho .......”
sin que aparezca en la pantalla.
5. Encender la pantalla e ir avanzando el display, primero hacia delante
y después hacia detrás un total de tres veces seguidas en cada sentido.
3.3.1.2Descripción de la conexión y modo de control
En primer lugar se realizará la conexión de la alimentación y de la señal de contraste de
cualquiera de las formas descritas en 2.1. A continuación hay que conectar las señales
de control y datos al microcontrolador.
En este ejemplo se va a optar por un control en bucle abierto y con ocho bits de datos.
Las tres señales de control (E, RS y R/W) se van a conectar a los bits 5 (PC4), 6 (PC5)
y 7 (PC6) del puerto C del micro y las de datos al puerto E. Cabe observar que sería
posible prescindir de la señal R/W conectándola a masa de forma permanente,
economizando así un bit del puerto.
3.3.1.3Implementación en código ensamblador del programa de control
A continuación se adjunta el código en lenguaje ensamblador que realiza las tareas
arriba descritas. El interés del programa reside en las secciones INSTRUCCIONES
DEL LCD y SERVICIOS DEL DISPLAY. En la primera se han implementado todas las
instrucciones que puede ejecutar el LCD y en la segunda algunos servicios de más alto
nivel que permiten realizar acciones de utilidad general más complejas a partir de las
instrucciones de una forma trasparente para el usuario. Para ello los servicios son
invocados mediante una excepción TRAP #n sin la necesidad de conocer cómo
funcionan.
******************************************************************************
* REGISTROS SIM *
******************************************************************************
SIMCR EQU $FFFA00 * Controla la configuración del sistema ($00CF).
SYNCR EQU $FFFA04 * Fija frecuencia y modo de operación del reloj ($3F08).
RSR EQU $FFFA06 * Guarda la causa de un reset (Ej.-$80, reset hardware).
PORTE EQU $FFFA11 * Registro de lectura y escritura en el puerto E.
PORTE1 EQU $FFFA13 * Tiene exactamente la misma función que el anterior.
DDRE EQU $FFFA15 * Determina el sentido del puerto E pin a pin.
PEPAR EQU $FFFA17 * Asignación del puerto E (Puerto o control de BUS).
94
PORTF EQU $FFFA19 * Registro de lectura y escritura en el puerto F.
PORTF1 EQU $FFFA1B * Tiene exactamente la misma función que el anterior.
DDRF EQU $FFFA1D * Determina el sentido del puerto F pin a pin.
PFPAR EQU $FFFA1F * Asignación del puerto F (Puerto F o control de BUS).
PICR EQU $FFFA22 * Configuración de interrupciones periódicas ($000F).
PITR EQU $FFFA24 * Contiene la cuenta del timer periódico ($0000).
SYPCR EQU $FFFA21 * Controla las funciones de monitorización del sistema
* como es el caso del Watchdog. ($40 anula watchdog).
SWSR EQU $FFFA27 * Se debe escribir periódicamente si Watchdog activado.
CSPAR0 EQU $FFFA44 * Sirve junto con CSPAR1 para configurar la función de
CSPAR1 EQU $FFFA46 * los pins de Chip Select (CS, Port C, etc.).
PORTC EQU $FFFA41 * Registro de escritura en el puerto C.
******************************************************************************
* REGISTROS GPT-PWM *
******************************************************************************
GPTMCR EQU $FFF900 * Configuración del GPT.
ICR EQU $FFF904 * Configuración de interrupciones del GPT.
DDRGP EQU $FFF906 * Determina el sentido del puerto GP.
PORTGP EQU $FFF907 * Registro de lectura y escritura del puerto GP.
OC1M EQU $FFF908 * Máscara para asignar los pin de captura de OC.
OC1D EQU $FFF909 * Registro de datos a comparar con el puerto OC.
TCNT EQU $FFF90A * Registro del GPT asociado a las capturas IC, OC y PAI.
PACTL EQU $FFF90C * Configuración del acumulador de pulsos PAI.
PACNT EQU $FFF90D * Es el contador de registro de eventos del PAI.
TIC1 EQU $FFF90E * Capturan el TCNT cuando se registra un evento en IC1.
TIC2 EQU $FFF910 * Capturan el TCNT cuando se registra un evento en IC2.
TIC3 EQU $FFF912 * Capturan el TCNT cuando se registra un evento en IC3.
TOC1 EQU $FFF914 * Cuando coincide con TCNT causa eventos en los pin OC.
TOC2 EQU $FFF916 * Si el valor coincide con TCNT causa un evento en OC2.
TOC3 EQU $FFF918 * Si el valor coincide con TCNT causa un evento en OC3.
TOC4 EQU $FFF91A * Si el valor coincide con TCNT causa un evento en OC4.
TI4O5 EQU $FFF91C * Pin compartido (Puede realizar una función TIC o TOC).
TCTL1 EQU $FFF91E * Configura el modo de comparación y nivel de salida.
TCTL2 EQU $FFF91F * Configura que flanco provoca la captura en los IC.
TMSK1 EQU $FFF920 * Habilita las interrupciones de IC y OC.
TMSK2 EQU $FFF921 * Habilita las interrupciones del PAI y del TIMER.
TFLG1 EQU $FFF922 * Registro de flags de interrupciones de IC y OC.
TFLG2 EQU $FFF923 * Registro de flags de interrupciones del PAI y TIMER
95
CFORC EQU $FFF924 * Fuerza una salida en los pin OC y PWM.
PWMC EQU $FFF925 * Configuración del PWM.
PWMA EQU $FFF926 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMB EQU $FFF927 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMCNT EQU $FFF928 * Registro del contador del PWM.
PWMBUFA EQU $FFF92A * Buffer para prevenir glitches cuando modificamos PWMA.
PWMBUFB EQU $FFF92B * Buffer para prevenir glitches cuando modificamos PWMB.
PRESCL EQU $FFF92C * Guarda el valor del multiplicador del GPT.
******************************************************************************
* TIPOS DE RETARDO *
******************************************************************************
CORTO EQU $03FF * Del orden de 100us.
LARGO EQU $BFFF * Del orden de 5ms.
RETARDO EQU $6FFF * Se usa para el avance de caracteres.
******************************************************************************
* CONSTANTES DE INTERÉS *
******************************************************************************
INI_DR EQU $00 * Inicio de línea única de caracteres.
FIN_DR EQU $4F * Fin línea única de caracteres.
L1_INI_DR EQU $00 * Inicio de la primera línea.
L1_FIN_DR EQU $27 * Fin de la primera línea.
L2_INI_DR EQU $40 * Inicio de la segunda línea.
L2_FIN_DR EQU $67 * Fin de la segunda línea.
LCD_LONG EQU $0F * Longitud de la pantalla del LCD.
******************************************************************************
* PUERTOS DEL DISPLAY *
******************************************************************************
BYTE_DATA EQU PORTE * Puerto de datos.
BYTE_CONTROL EQU PORTC * Puerto de control.
BIT_ENABLE EQU 4 * Se usa para controlar el proceso de comunicación.
* con el controlador del display.
BIT_RS EQU 5 * Selección del tipo de registro al que se escribe:
* 0 - Registro de Instrucciones (IR).
* 1 - Registro de Datos (DR).
BIT_RW EQU 6 * Cambio entre los modos de lectura y escritura.
******************************************************************************
96
* VECTORES DEL RESET *
******************************************************************************
ORG $0
PILA_RESET DC.L FIN_PILA
PC_RESET DC.L PRINCIPAL
******************************************************************************
* VECTORES DE INTERRUPCIÓN *
******************************************************************************
ORG $80
VECTOR0 DC.L DRIVER_DISPLAY
******************************************************************************
* PUNTERO DE PILA *
******************************************************************************
ORG $4000
PILA DS.L 200
FIN_PILA:
******************************************************************************
* LISTA DE MENSAJES *
******************************************************************************
ORG $2000
MENSAJES DC.L MENS1,MENS2,MENS3
MENS1 DC.B 'PRIMERA PRUEBA. ESCRITURA NORMAL DE TEXTO.',$00
MENS2 DC.B 'ESPERE UNOS SEGUNDOS DESPUES DE APAGARSE EL DISPLAY.',$00
MENS3 DC.B 'En un lugar de la Mancha de cuyo nombre no quiero acordarme, no ha mucho .......',$00
******************************************************************************
* SUBRUTINAS *
******************************************************************************
ORG $1000
******************************************************************************
* CONFIGURACION DEL HARDWARE DEL MICRO *
******************************************************************************
*************************** INHAB_WDOG ****************************
97
* Inhabilita el Watchdog que es una función de monitoriración del *
* sistema para detectar la entrada en un bucle infinito. *
*******************************************************************
INHAB_WDOG:
MOVE.B #$40,SYPCR * Inhabilitamos WatchDog
RTS
*----------------------------------------------------------------------------*
************************** PORT_EC_CFG ****************************
* Con esta rutina se configuran los puertos E y C que son los que *
* se usan para controlar el display y el teclado. *
*******************************************************************
PORT_EC_CFG
MOVE.B #$FF,DDRE * PE0..PE7 salidas.
MOVE.B #$00,PEPAR * Configura el registro de control del puerto E.
MOVE.B #$00,CSPAR0 * PC0-PC2 utilizables.
MOVE.W #$0000,CSPAR1 * PC3-PC6 utilizables.
MOVE.B #$00,PORTE
MOVE.B #$0F,PORTC
RTS
*----------------------------------------------------------------------------*
******************************************************************************
* RUTINAS DE CONTROL *
******************************************************************************
***************************** DELAY *******************************
* Produce un retardo cuya duración viene determinada por el valor *
* almacenado en el registro D1. *
*******************************************************************
DELAY
SUB.L #1,D1
BNE DELAY
RTS
*----------------------------------------------------------------------------*
***************************** TOGGLE ******************************
* Provoca la ejecución de la instrucción, generando un pulso de *
* duración determinada por el valor del registro D2 en la línea *
* Enable del LCD. *
*******************************************************************
TOGGLE
98
MOVE.L D1,-(A7)
MOVE.L D2,D1
BSET.B #BIT_ENABLE,BYTE_CONTROL
BSR DELAY
MOVE.L D2,D1
BCLR.B #BIT_ENABLE,BYTE_CONTROL
BSR DELAY
MOVE.L (A7)+,D1
RTS
*----------------------------------------------------------------------------*
******************************************************************************
* INSTRUCCIONES LCD *
******************************************************************************
************************** CFG_DISPLAY ****************************
* Configura el modo de funcionamiento del display. Básicamente se *
* reduce a tres aspectos: *
* 1 - Comunicación con el display con 8 o 4 bits. *
* 2 - 1 o 2 líneas en pantalla. *
* 3 - Dos tipos de fuentes 5x8 o bien 5x10 puntos. *
* Suprimiendo el asterisco correspondiente se puede modificar la *
* opción seleccionada por defecto. *
* Retardo necesario CORTO *
*******************************************************************
CFG_DISPLAY
MOVE.B #$30,BYTE_DATA * Modo 8 bits, una línea, fuentes 5x8 puntos.
* BCLR.B #4,BYTE_DATA * Modo 4 bits.
* BSET.B #3,BYTE_DATA * Habilita 2 líneas.
* BSET.B #2,BYTE_DATA * Fuentes de 5x10 puntos.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*************************** MODO_AVC ******************************
* El cursor avanza cuando se escribe un carácter en el registro *
* DR. El display permanece estático. *
* Retardo necesario CORTO. *
*******************************************************************
MODO_AVC
99
MOVE.B #$06,BYTE_DATA * Cursor adelante, display no acompaña.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*************************** MODO_AVT ******************************
* El cursor y el display avanzan solidariamente cuando se escribe *
* un carácter en el registro DR. *
* Retardo necesario CORTO. *
*******************************************************************
MODO_AVT
MOVE.B #$07,BYTE_DATA * Cursor adelante, display acompaña.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*************************** MODO_RTC ******************************
* El cursor retrocede cuando se escribe un carácter en el regis- *
* tro DR. El display permanece estático. *
* Retardo necesario CORTO. *
*******************************************************************
MODO_RTC
MOVE.B #$04,BYTE_DATA * Cursor atrás, display no acompa¤a.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*************************** MODO_RTT ******************************
* El cursor y el display retroceden solidariamente cuando se es- *
* cribe un carácter en el registro DR. *
* Retardo necesario CORTO. *
*******************************************************************
MODO_RTT
MOVE.B #$05,BYTE_DATA * Cursor atrás, display acompaña.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
************************** MODO_NORMAL ****************************
100
* Se configura el modo del display. Por defecto estarán tanto el *
* display como el cursor encendidos y sin parpadear el carácter *
* donde se encuentra el cursor. *
* Retardo necesario CORTO *
*******************************************************************
MODO_NORMAL
MOVE.B #$0E,BYTE_DATA * Display y Cursor ON, blinkin OFF
* BCLR.B #2,BYTE_DATA * Display OFF
* BCLR.B #1,BYTE_DATA * Cursor OFF
* BSET.B #0,BYTE_DATA * Blinking ON
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
**************************** MODO_OFF *****************************
* Produce el apagado de la pantalla del LCD. Se puede seguir en- *
* viando ordenes al display que ser n ejecutadas. La única dife- *
* rencia es que no aparece reflejado hasta que no se enciende de *
* el LCD. *
* Retardo necesario CORTO *
*******************************************************************
MODO_OFF
MOVE.B #$08,BYTE_DATA * Display y Cursor ON, blinkin OFF
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
***************************** CLEAR *******************************
* Borra el contenido del display y situa el cursor a la izquierda *
* Retardo necesario INDEFINIDO *
*******************************************************************
CLEAR
MOVE.B #$01,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
************************** RETURN_HOME *****************************
101
* Devuelve el cursor a la primera posición conservando el conteni- *
* de la memoria del display. *
* Retardo necesario LARGO *
********************************************************************
RETURN_HOME
MOVE.B #$02,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*************************** CURS_IZQ ******************************
* Mueve el cursor a la izquierda sin modificar el texto. *
* Retardo necesario CORTO *
*******************************************************************
CURS_IZQ
MOVE.B #$10,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*************************** CURS_DCHA *****************************
* Mueve el cursor a la derecha sin modificar el texto. *
* Retardo necesario CORTO *
*******************************************************************
CURS_DCHA
MOVE.B #$14,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*************************** DISP_IZQ ******************************
* Desplaza la ventana del display hacia la izquierda. *
* Retardo necesario CORTO *
*******************************************************************
DISP_IZQ
MOVE.B #$1C,BYTE_DATA
BSR TOGGLE
RTS
*************************** DISP_DCHA *****************************
102
* Desplaza la ventana del display hacia la derecha. *
* Retardo necesario CORTO *
*******************************************************************
DISP_DCHA
MOVE.B #$18,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
************************** CGRAM_ADDR *****************************
* Coloca la dirección indicada en el contador de la Memoria del *
* Generador de Caracteres (CGRAM). Este generador permite definir *
* 8 caracteres de usuario en el modo 5x8 y cuatro en el de 5x10 *
* puntos. Para un correcto uso de la instrucción deberemos escri- *
* bir una de las 64 direcciones posibles (de $00 a $3F) en *
* BYTE_DATA. *
* Retardo necesario CORTO *
*******************************************************************
CGRAM_ADDR
ADD.B #$40,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR TOGGLE
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
************************** DDRAM_ADDR *****************************
* Coloca la dirección indicada en el contador de la Memoria de *
* Datos del Display (DDRAM). Existen 80 posiciones disponibles *
* que serán consecutivas cuando el display trabaje en una única *
* línea o repartidas en dos grupos de 40 cuando trabaje en el *
* modo de dos líneas. *
* V‚ase detalle a continuación: *
* - 80 posiciones x 1 línea - las direcciones van de $0 a $4F. *
* - 40 posiciones x 2 líneas - las direcciones se reparten: *
* Línea primera: de $00 a $27. *
* Línea segunda: de $40 a $67. *
* Retardo necesario CORTO *
*******************************************************************
DDRAM_ADDR
103
ADD.B #$80,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR TOGGLE
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
*************************** ESCRIBIR ******************************
* Esta instrucción permite escribir en el registro de datos (DR) *
* una palabra que puede ir destinada a la memoria del generador *
* de caracteres (CGRAM) o a la de datos del display (DDRAM) de- *
* pendiendo de cual fu‚ la última selección. El dato a escribir *
* lo pondremos en el puerto de datos (BYTE_DATA). *
* Retardo necesario CORTO. *
*******************************************************************
ESCRIBIR
BSET.B #BIT_RS,BYTE_CONTROL
BSR TOGGLE
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
******************************************************************************
* RUTINAS DE INICIALIZACIÓN DE DISPOSITIVOS *
******************************************************************************
**************************** INI_LCD ******************************
* Esta rutina realiza toda la inicialización del display tras el *
* encendido del mismo. Después de su ejecución el display queda *
* preparado para recibir ordenes y caracteres. *
*******************************************************************
INI_LCD
MOVE.L #CORTO,D2 * Fijamos la duración de retardo.
BSR CFG_DISPLAY
BSR MODO_NORMAL
BSR CLEAR
RTS
*----------------------------------------------------------------------------*
******************************************************************************
104
* SERVICIOS DE DISPOSITIVOS *
******************************************************************************
******************************************************************************
* SERVICIOS DEL DISPLAY *
******************************************************************************
************************** ESCR_MENSAJE ***************************
* Esta rutina escribe un mensaje completo en el display en el *
* sentido natural de escritura cuya dirección de inicio se la pa- *
* samos a través del registro A0. El símbolo con que deber ter- *
* minarse el mensaje es $00. Si el mensaje es superior a los 16 *
* caracteres que tiene el LCD, al alcanzar el final de la línea *
* automáticamente se cambia del modo AVC al AVT en el que el dis- *
* play acompaña al cursor dando la sensación de que el texto se *
* desplaza. *
*******************************************************************
ESCR_MENSAJE
MOVEM.L D0-D2,-(A7)
MOVE.L #LARGO,D2
BSR RETURN_HOME
MOVE.L #CORTO,D2
BSR MODO_AVC
MOVE.B #LCD_LONG,D0 * Cuenta los caracteres escritos en el display.
BUCLE1
TST.B (A0)
BEQ FIN1
MOVE.B (A0)+,BYTE_DATOS
BSR ESCRIBIR
SUB.B #1,D0
BEQ FIN_LIN1
MOVE.L #RETARDO,D1
BSR DELAY
BRA BUCLE1
FIN_LIN1
BSR MODO_AVT * Cambia al modo AVT para que el display acompañe al cursor.
BRA BUCLE1
FIN1
MOVEM.L (A7)+,D0-D2
RTS
*************************** DSP_ADELANTE **************************
105
* Esta rutina desplaza hacia la derecha la pantalla del display *
* recorriendo las 80 posiciones del registro DDRAM. *
*******************************************************************
DSP_ADELANTE
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0 * Cuenta los caracteres escritos en el display.
BUCLE2
BSR DISP_DCHA
MOVE.L #RETARDO,D1
BSR DELAY
SUB.B #1,D0
BNE BUCLE2
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*
**************************** DSP_ATRAS ****************************
* Esta rutina desplaza hacia la izquierda la pantalla del display *
* recorriendo las 80 posiciones del registro DDRAM. *
*******************************************************************
DSP_ATRAS
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0 * Cuenta los caracteres escritos en el display.
BUCLE3
BSR DISP_IZQ
MOVE.L #RETARDO,D1
BSR DELAY
SUB.B #1,D0
BNE BUCLE3
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*
************************** DRIVER_DISPLAY *************************
* Esta rutina realiza el servicio indicado a través del registro *
* D7 con un número ordinal. Para llamar a la rutina de servicio *
* se coloca el número de servicio en el registro D7 y se ejecuta *
* un TRAP #0. *
*******************************************************************
DRIVER_DISPLAY
106
MOVEM.L D0-D1,-(A7)
CMP.B #1,D7
BEQ SERVICIO1
CMP.B #2,D7
BEQ SERVICIO2
CMP.B #3,D7
BEQ SERVICIO3
SERVICIO1
BSR ESCR_MENSAJE
BRA FIN
SERVICIO2
BSR DSP_ADELANTE
BRA FIN
SERVICIO3
BSR DSP_ATRAS
FIN
MOVEM.L (A7)+,D0-D1
RTE
*----------------------------------------------------------------------------*
******************************************************************************
* PRINCIPAL *
******************************************************************************
ORG $400
PRINCIPAL
BSR INHAB_WDOG
BSR PORT_EC_CFG
BSR INI_LCD
MOVEA.L #MENSAJES,A6
MOVEA.L (A6)+,A0
MOVE.L #1,D7
TRAP #0
MOVEA.L (A6)+,A0
MOVE.L #1,D7
TRAP #0
BSR MODO_OFF
MOVEA.L (A6),A0
MOVE.L #1,D7
TRAP #0
107
BSR MODO_NORMAL
MOVE.B #3,D3
LOOP1
MOVE.L #2,D7
TRAP #0
SUB.B #1,D3
BNE LOOP1
MOVE.B #3,D3
LOOP2
MOVE.L #3,D7
TRAP #0
SUB.B #1,D3
BNE LOOP2
FINAL
BRA FINAL
END
3.3.1.3.1 Observaciones sobre el ajuste de parámetros
Existen ciertos parámetros que ha sido necesario someterlos a un ajuste, como son los
retardos.
3.3.1.3.1.1 Ajuste de la señal de activación, “Enable”.
Esta señal es la que gobierna el proceso de comunicación con el display. La función
“toggle” tiene como objetivo conformar un pulso sobre la línea de activación (E). Esta
función utiliza una subrutina llamada “DELAY” que introduce el retardo necesario para
definir el periodo de esta señal. Cada vez que se llama a la función TOGGLE, ésta
genera un pulso de aspecto más o menos cuadrado en la señal ”Enable” cuyo periodo
dependerá del valor que se cargue en el contador de retardo DELAY. A continuación se
detallan las dos subrutinas:
***************************** DELAY *******************************
* Produce un retardo cuya duración viene determinada por el valor *
* almacenado en el registro D1. *
*******************************************************************
DELAY
SUB.L #1,D1
BNE DELAY
RTS
*----------------------------------------------------------------------------*
108
***************************** TOGGLE ******************************
* Provoca la ejecución de la instrucción, generando un pulso de *
* duración determinada en la línea Enable del LCD. *
*******************************************************************
TOGGLE
MOVE.L D2,D1
BSET.B #BIT_ENABLE,BYTE_CONTROL
BSR DELAY
MOVE.L D2,D1
BCLR.B #BIT_ENABLE,BYTE_CONTROL
BSR DELAY
RTS
El display requiere de 37 s. para completar la mayoría de las instrucciones. Por tanto si
se elige un periodo de señal de 100 s., 50 s. por ciclo, con toda seguridad siempre
habrá terminado la instrucción. Para el ajuste de este periodo se ejecuta la rutina
TOGGLE en un bucle infinito y se mide con el osciloscopio el periodo de la señal
resultante, que iremos ajustando variando el valor de la constante CORTO. También se
debe generar esta señal con un retardo superior a los 1.6 ms. que requiere la instrucción
cursor a inicio (Return Home). Para ello se procederá de igual forma ajustando el valor
de la constante LARGO.
3.3.2 Ejemplo de control en bucle cerrado
3.3.2.1Descripción de la aplicación de control
La aplicación va a consistir en la repetición secuencial de un conjunto de mensajes, en
particular, los números del uno al nueve más el cero y la frase siguiente: ES UNA
PRUEBA DE MENSAJE LARGO PARA VER QUE PASA, esperándose que si el
servicio de escritura de mensajes es lo bastante rápido, sólo sean visibles en el display
los dieciséis caracteres últimos de la frase, esto es: “ARA VER QUE PASA”.
3.3.2.2Descripción de la conexión y modo de control
El modo de conexión no difiere con respecto al caso anterior, con la salvedad de que en
esta ocasión sí se utiliza la señal R/W y, por tanto, no se puede prescindir de ella.
109
3.3.2.3Implementación en código ensamblador del programa de control
El interés de este programa reside en la rapidez de ejecución basada en la comunicación
entre los dos dispositivos.
******************************************************************************
* REGISTROS SIM *
******************************************************************************
SIMCR EQU $FFFA00 * Controla la configuración del sistema ($00CF).
SYNCR EQU $FFFA04 * Fija frecuencia y modo de operación del reloj ($3F08).
RSR EQU $FFFA06 * Guarda la causa de un reset (Ej.-$80, reset hardware).
PORTE EQU $FFFA11 * Registro de lectura y escritura en el puerto E.
PORTE1 EQU $FFFA13 * Tiene exactamente la misma función que el anterior.
DDRE EQU $FFFA15 * Determina el sentido del puerto E pin a pin.
PEPAR EQU $FFFA17 * Asignación del puerto E (Puerto o control de BUS).
PORTF EQU $FFFA19 * Registro de lectura y escritura en el puerto F.
PORTF1 EQU $FFFA1B * Tiene exactamente la misma función que el anterior.
DDRF EQU $FFFA1D * Determina el sentido del puerto F pin a pin.
PFPAR EQU $FFFA1F * Asignación del puerto F (Puerto F o control de BUS).
PICR EQU $FFFA22 * Configuración de interrupciones periódicas ($000F).
PITR EQU $FFFA24 * Contiene la cuenta del timer periódico ($0000).
SYPCR EQU $FFFA21 * Controla las funciones de monitorización del sistema
* como es el caso del Watchdog. ($40 anula watchdog).
SWSR EQU $FFFA27 * Se debe escribir periódicamente si Watchdog activado.
CSPAR0 EQU $FFFA44 * Sirve junto con CSPAR1 para configurar la función de
CSPAR1 EQU $FFFA46 * los pins de Chip Select (CS, Port C, etc.).
PORTC EQU $FFFA41 * Registro de escritura en el puerto C.
******************************************************************************
* REGISTROS GPT-PWM *
******************************************************************************
GPTMCR EQU $FFF900 * Configuración del GPT.
ICR EQU $FFF904 * Configuración de interrupciones del GPT.
DDRGP EQU $FFF906 * Determina el sentido del puerto GP.
PORTGP EQU $FFF907 * Registro de lectura y escritura del puerto GP.
OC1M EQU $FFF908 * Máscara para asignar los pin de captura de OC.
OC1D EQU $FFF909 * Registro de datos a comparar con el puerto OC.
TCNT EQU $FFF90A * Registro del GPT asociado a las capturas IC, OC y PAI.
PACTL EQU $FFF90C * Configuración del acumulador de pulsos PAI.
PACNT EQU $FFF90D * Es el contador de registro de eventos del PAI.
110
TIC1 EQU $FFF90E * Capturan el TCNT cuando se registra un evento en IC1.
TIC2 EQU $FFF910 * Capturan el TCNT cuando se registra un evento en IC2.
TIC3 EQU $FFF912 * Capturan el TCNT cuando se registra un evento en IC3.
TOC1 EQU $FFF914 * Cuando coincide con TCNT causa eventos en los pin OC.
TOC2 EQU $FFF916 * Si el valor coincide con TCNT causa un evento en OC2.
TOC3 EQU $FFF918 * Si el valor coincide con TCNT causa un evento en OC3.
TOC4 EQU $FFF91A * Si el valor coincide con TCNT causa un evento en OC4.
TI4O5 EQU $FFF91C * Pin compartido (Puede realizar una función TIC o TOC).
TCTL1 EQU $FFF91E * Configura el modo de comparación y nivel de salida.
TCTL2 EQU $FFF91F * Configura que flanco provoca la captura en los IC.
TMSK1 EQU $FFF920 * Habilita las interrupciones de IC y OC.
TMSK2 EQU $FFF921 * Habilita las interrupciones del PAI y del TIMER.
TFLG1 EQU $FFF922 * Registro de flags de interrupciones de IC y OC.
TFLG2 EQU $FFF923 * Registro de flags de interrupciones del PAI y TIMER
CFORC EQU $FFF924 * Fuerza una salida en los pin OC y PWM.
PWMC EQU $FFF925 * Configuración del PWM.
PWMA EQU $FFF926 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMB EQU $FFF927 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMCNT EQU $FFF928 * Registro del contador del PWM.
PWMBUFA EQU $FFF92A * Buffer para prevenir glitches cuando modificamos PWMA.
PWMBUFB EQU $FFF92B * Buffer para prevenir glitches cuando modificamos PWMB.
PRESCL EQU $FFF92C * Guarda el valor del multiplicador del GPT.
******************************************************************************
* TIPOS DE RETARDO *
******************************************************************************
CORTO EQU $03FF * Del orden de 100us.
LARGO EQU $BFFF * Del orden de 5ms.
RETARDO EQU $6FFF * Se usa para el avance de caracteres.
******************************************************************************
* CONSTANTES DE INTERÉS *
******************************************************************************
INI_DR EQU $00 * Inicio de línea única de caracteres.
FIN_DR EQU $4F * Fin línea única de caracteres.
L1_INI_DR EQU $00 * Inicio de la primera línea.
L1_FIN_DR EQU $27 * Fin de la primera línea.
L2_INI_DR EQU $40 * Inicio de la segunda línea.
L2_FIN_DR EQU $67 * Fin de la segunda línea.
111
LCD_LONG EQU $0F * Longitud de la pantalla del LCD.
******************************************************************************
* PUERTOS DEL DISPLAY *
******************************************************************************
BYTE_DATA EQU PORTE * Puerto de datos.
BYTE_CONTROL EQU PORTC * Puerto de control.
BIT_ENABLE EQU 4 * Se usa para controlar el proceso de comunicación.
* con el controlador del display.
BIT_RS EQU 5 * Selección del tipo de registro al que se escribe:
* 0 - Registro de Instrucciones (IR).
* 1 - Registro de Datos (DR).
BIT_RW EQU 6 * Cambio entre los modos de lectura y escritura.
FLAG EQU 7 * Posición del flag de datos en el puerto.
******************************************************************************
* VECTORES DEL RESET *
******************************************************************************
ORG $0
PILA_RESET DC.L FIN_PILA
PC_RESET DC.L PRINCIPAL
******************************************************************************
* VECTORES DE INTERRUPCIÓN *
******************************************************************************
ORG $80
VECTOR1 DC.L DRIVER_DISPLAY
******************************************************************************
* PUNTERO DE PILA *
******************************************************************************
ORG $4000
PILA DS.L 200
FIN_PILA:
******************************************************************************
* LISTA DE MENSAJES *
******************************************************************************
ORG $2000
MENSAJES DC.L MENS1,MENS2,MENS3,MENS4,MENS5,MENS6,MENS7,MENS8,MENS9,MENS0,MENSLARGO
112
MENS1 DC.B 'UNO',$00
MENS2 DC.B 'DOS',$00
MENS3 DC.B 'TRES',$00
MENS4 DC.B 'CUATRO',$00
MENS5 DC.B 'CINCO',$00
MENS6 DC.B 'SEIS',$00
MENS7 DC.B 'SIETE',$00
MENS8 DC.B 'OCHO',$00
MENS9 DC.B 'NUEVE',$00
MENS0 DC.B 'CERO',$00
MENSLARGO DC.B 'ES UNA PRUEBA DE MENSAJE LARGO PARA VER QUE PASA',$00
******************************************************************************
* SUBRUTINAS *
******************************************************************************
ORG $1000
******************************************************************************
* CONFIGURACION DEL HARDWARE DEL MICRO *
******************************************************************************
*************************** INHAB_WDOG ****************************
* Inhabilita el Watchdog que es una función de monitoriración del *
* sistema para detectar la entrada en un bucle infinito. *
*******************************************************************
INHAB_WDOG:
MOVE.B #$40,SYPCR * Inhabilitamos WatchDog
RTS
*----------------------------------------------------------------------------*
************************** PORT_EC_CFG ****************************
* Con esta rutina se configuran los puertos E y C que son los que *
* se usan para controlar el display y el teclado. *
*******************************************************************
PORT_EC_CFG
MOVE.B #$FF,DDRE * PE0..PE7 salidas.
MOVE.B #$00,PEPAR * Configura el registro de control del puerto E.
MOVE.B #$00,CSPAR0 * PC0-PC2 utilizables.
MOVE.W #$0000,CSPAR1 * PC3-PC6 utilizables.
MOVE.B #$00,PORTE
113
MOVE.B #$0F,PORTC
RTS
*----------------------------------------------------------------------------*
******************************************************************************
* RUTINAS DE CONTROL *
******************************************************************************
***************************** DELAY *******************************
* Produce un retardo cuya duración viene determinada por el valor *
* almacenado en el registro D1. *
*******************************************************************
DELAY
SUB.L #1,D1
BNE DELAY
RTS
*----------------------------------------------------------------------------*
************************* FLAG_ESPERAR ****************************
* Espera a que se baje el flag de ocupado. *
*******************************************************************
FLAG_ESPERAR
MOVE.B #$7F,DDRE
BSET.B #BIT_RW,BYTE_CONTROL
BSET.B #BIT_ENABLE,BYTE_CONTROL
OCUPADO
BTST.B #FLAG,BYTE_DATA
BNE OCUPADO
BCLR.B #BIT_ENABLE,BYTE_CONTROL
BCLR.B #BIT_RW,BYTE_CONTROL
MOVE.B #$FF,DDRE
RTS
*----------------------------------------------------------------------------*
*************************** ENABLE_LCD ****************************
* Provoca la ejecución de la instrucción, generando un pulso en *
* la línea Enable del LCD. *
*******************************************************************
ENABLE_LCD
BSET.B #BIT_ENABLE,BYTE_CONTROL
114
BCLR.B #BIT_ENABLE,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
******************************************************************************
* INSTRUCCIONES LCD *
******************************************************************************
************************** CFG_DISPLAY ****************************
* Configura el modo de funcionamiento del display. Básicamente se *
* reduce a tres aspectos: *
* 1 - Comunicación con el display con 8 o 4 bits. *
* 2 - 1 o 2 líneas en pantalla. *
* 3 - Dos tipos de fuentes 5x8 o bien 5x10 puntos. *
* Suprimiendo el asterisco correspondiente se puede modificar la *
* opción seleccionada por defecto. *
*******************************************************************
CFG_DISPLAY
BSR FLAG_ESPERAR
MOVE.B #$30,BYTE_DATA * Modo 8 bits, una línea, fuentes 5x8 puntos.
* BCLR.B #4,BYTE_DATA * Modo 4 bits.
* BSET.B #3,BYTE_DATA * Habilita 2 líneas.
* BSET.B #2,BYTE_DATA * Fuentes de 5x10 puntos.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** MODO_AVC ******************************
* El cursor avanza cuando se escribe un carácter en el registro *
* DR. El display permanece estático. *
*******************************************************************
MODO_AVC
BSR FLAG_ESPERAR
MOVE.B #$06,BYTE_DATA * Cursor adelante, display no acompaña.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** MODO_AVT ******************************
* El cursor y el display avanzan solidariamente cuando se escribe *
115
* un carácter en el registro DR. *
*******************************************************************
MODO_AVT
BSR FLAG_ESPERAR
MOVE.B #$07,BYTE_DATA * Cursor adelante, display acompaña.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** MODO_RTC ******************************
* El cursor retrocede cuando se escribe un carácter en el regis- *
* tro DR. El display permanece estático. *
*******************************************************************
MODO_RTC
BSR FLAG_ESPERAR
MOVE.B #$04,BYTE_DATA * Cursor atrás, display no acompaña.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** MODO_RTT ******************************
* El cursor y el display retroceden solidariamente cuando se es- *
* cribe un carácter en el registro DR. *
*******************************************************************
MODO_RTT
BSR FLAG_ESPERAR
MOVE.B #$05,BYTE_DATA * Cursor atrás, display acompaña.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
************************** MODO_NORMAL ****************************
* Se configura el modo del display. Por defecto estarán tanto el *
* display como el cursor encendidos y sin parpadear el carácter *
* donde se encuentra el cursor. *
*******************************************************************
MODO_NORMAL
116
BSR FLAG_ESPERAR
MOVE.B #$0E,BYTE_DATA * Display y Cursor ON, blinkin OFF
* BCLR.B #2,BYTE_DATA * Display OFF
* BCLR.B #1,BYTE_DATA * Cursor OFF
* BSET.B #0,BYTE_DATA * Blinking ON
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
**************************** MODO_OFF *****************************
* Produce el apagado de la pantalla del LCD. Se puede seguir en- *
* viando ordenes al display que ser n ejecutadas. La única dife- *
* rencia es que no aparece reflejado hasta que no se enciende de *
* el LCD. *
*******************************************************************
MODO_OFF
BSR FLAG_ESPERAR
MOVE.B #$08,BYTE_DATA * Display y Cursor ON, blinkin OFF
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
***************************** CLEAR *******************************
* Borra el contenido del display y situa el cursor a la izquierda *
*******************************************************************
CLEAR
BSR FLAG_ESPERAR
MOVE.B #$01,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
************************** RETURN_HOME *****************************
* Devuelve el cursor a la primera posición conservando el conteni- *
* de la memoria del display. *
********************************************************************
RETURN_HOME
BSR FLAG_ESPERAR
117
MOVE.B #$02,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** CURS_IZQ ******************************
* Mueve el cursor a la izquierda sin modificar el texto. *
*******************************************************************
CURS_IZQ
BSR FLAG_ESPERAR
MOVE.B #$10,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** CURS_DCHA *****************************
* Mueve el cursor a la derecha sin modificar el texto. *
*******************************************************************
CURS_DCHA
BSR FLAG_ESPERAR
MOVE.B #$14,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** DISP_IZQ ******************************
* Desplaza la ventana del display hacia la izquierda. *
*******************************************************************
DISP_IZQ
BSR FLAG_ESPERAR
MOVE.B #$1C,BYTE_DATA
BSR ENABLE_LCD
RTS
*************************** DISP_DCHA *****************************
* Desplaza la ventana del display hacia la derecha. *
*******************************************************************
DISP_DCHA
BSR FLAG_ESPERAR
MOVE.B #$18,BYTE_DATA
118
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
************************** CGRAM_ADDR *****************************
* Coloca la dirección indicada en D0 en el contador de la Memoria *
* del Generador de Caracteres (CGRAM). Este generador permite de- *
* finir 8 caracteres de usuario en el modo 5x8 y cuatro en el de *
* 5x10 puntos. Para un correcto uso de la instrucción deberemos *
* escribir una de las 64 direcciones posibles (de $00 a $3F)en D0 *
*******************************************************************
CGRAM_ADDR
BSR FLAG_ESPERAR
ADD.B #$40,D0
MOVE.B D0,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR ENABLE_LCD
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
************************** DDRAM_ADDR *****************************
* Coloca la dirección indicada en D0 en el contador de la Memoria *
* de Datos del Display (DDRAM). Existen 80 posiciones disponibles *
* que ser n consecutivas cuando el display trabaje en una única *
* línea o repartidas en dos grupos de 40 cuando trabaje en el *
* modo de dos líneas. *
* V‚ase detalle a continuación: *
* - 80 posiciones x 1 línea - las direcciones van de $0 a $4F. *
* - 40 posiciones x 2 líneas - las direcciones se reparten: *
* Línea primera: de $00 a $27. *
* Línea segunda: de $40 a $67. *
*******************************************************************
DDRAM_ADDR
BSR FLAG_ESPERAR
ADD.B #$80,D0
MOVE.B D0,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR ENABLE_LCD
119
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
*************************** ESCRIBIR ******************************
* Esta instrucción permite escribir en el registro de datos (DR) *
* una palabra destinada al generador de caracteres (CGRAM) o al *
* de datos del display (DDRAM) dependiendo de cual fue la última *
* selección. El dato a escribir lo pondremos en el registro D0. *
*******************************************************************
ESCRIBIR
BSR FLAG_ESPERAR
MOVE.B D0,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR ENABLE_LCD
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
******************************************************************************
* RUTINAS DE INICIALIZACIÓN DE DISPOSITIVOS *
******************************************************************************
**************************** INI_LCD ******************************
* Esta rutina realiza toda la inicialización del display tras el *
* encendido del mismo. Después de su ejecución el display queda *
* preparado para recibir instrucciones y caracteres. *
*******************************************************************
INI_LCD:
BSR CFG_DISPLAY
BSR MODO_NORMAL
BSR CLEAR
RTS
*----------------------------------------------------------------------------*
******************************************************************************
* SERVICIOS DE DISPOSITIVOS *
******************************************************************************
******************************************************************************
* SERVICIOS DEL DISPLAY *
******************************************************************************
120
************************** ESCR_MENSAJE ***************************
* Esta rutina escribe un mensaje completo en el display cuya di- *
* rección de inicio se indica a través del registro A0, debiendo *
* terminar el mensaje con $00. Si es superior a los 16 caracteres *
* que tiene el LCD, al alcanzar el final de la línea automática- *
* mente se cambia del modo AVC al AVT en el que el display acom- *
* paña al cursor dando la sensación de que el texto se desplaza. *
*******************************************************************
ESCR_MENSAJE
MOVEM.L D0-D1,-(A7)
BSR RETURN_HOME
BSR MODO_AVC
MOVE.B #LCD_LONG,D1 * Cuenta los caracteres escritos en el display.
BUCLE1
TST.B (A0)
BEQ FIN1
MOVE.B (A0)+,D0
BSR ESCRIBIR
SUB.B #1,D1
BEQ FIN_LIN1
BRA BUCLE1
FIN_LIN1
BSR MODO_AVT * Cambia al modo AVT para que el display acompañe al cursor.
BRA BUCLE1
FIN1
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*
*************************** DSP_ADELANTE **************************
* Esta rutina desplaza hacia la derecha la pantalla del display *
* recorriendo las 80 posiciones del registro DDRAM. *
*******************************************************************
DSP_ADELANTE
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0 * Cuenta los caracteres escritos en el display.
BUCLE2
BSR DISP_DCHA
MOVE.L #RETARDO,D1
121
BSR DELAY
SUB.B #1,D0
BNE BUCLE2
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*
**************************** DSP_ATRAS ****************************
* Esta rutina desplaza hacia la izquierda la pantalla del display *
* recorriendo las 80 posiciones del registro DDRAM. *
*******************************************************************
DSP_ATRAS
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0 * Cuenta los caracteres escritos en el display.
BUCLE3
BSR DISP_IZQ
MOVE.L #RETARDO,D1
BSR DELAY
SUB.B #1,D0
BNE BUCLE3
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*
************************** DRIVER_DISPLAY *************************
* Esta rutina realiza el servicio indicado a través del registro *
* D7 con un número ordinal. Para llamar a la rutina de servicio *
* se coloca el número de servicio en el registro D7 y se ejecuta *
* un TRAP #0. *
*******************************************************************
DRIVER_DISPLAY
MOVEM.L D0-D1,-(A7)
CMP.B #1,D7
BEQ SERVICIO1
CMP.B #2,D7
BEQ SERVICIO2
CMP.B #3,D7
BEQ SERVICIO3
BRA FIN
122
SERVICIO1
BSR ESCR_MENSAJE
BRA FIN
SERVICIO2
BSR DSP_ADELANTE
BRA FIN
SERVICIO3
BSR DSP_ATRAS
FIN
MOVEM.L (A7)+,D0-D1
RTE
*----------------------------------------------------------------------------*
******************************** PRINCIPAL ***********************************
* El programa en cuestión muestra en el display de forma secuencial la lista *
* de mensajes definidos. Para la escritura utiliza el servicio de escritura *
* de mensajes del driver a través de TRAP #0. *
******************************************************************************
ORG $400
PRINCIPAL
BSR INHAB_WDOG
BSR PORT_EC_CFG
BSR INI_LCD
INIC_D0
MOVEA.W #MENSAJES,A6
MOVE.L #$B,D0
LOOP1
BSR CLEAR
MOVEA.L (A6)+,A0
MOVE.L #1,D7
TRAP #0
MOVE.L #LARGO,D1
BSR DELAY
SUBI.B #1,D0
BEQ INIC_D0
BRA LOOP1
END
123
3.4 Anexo I
A continuación se adjuntan copias de los juegos de caracteres predefinidos extraídos del
catalogo original del controlador HD44780U de Hitachi.
Esta primera tabla contiene patrones de caracteres de 5 x10 puntos.
Figura 6 – Correspondencia entre códigos y caracteres (Extraído del catálogo de HITACHI).
124
Esta otra contiene los patrones de caracteres de 5 x 8 puntos, que es además la que se
usará en el ejemplo de estas páginas.
Figura 7 – Correspondencia entre códigos y caracteres (Extraído del catálogo de HITACHI).
125
Capítulo 4
Control de un teclado matricialEl teclado matricial proporciona una interfaz sencilla de entrada de datos. Sus usos
pueden ser tan variados como aplicaciones que precisen de la introducción manual de
datos puedan ocurrírsele al diseñador. Desde una calculadora, pasando por una
cerradura codificada, un termostato programable, etc.
4.1 Descripción
En el mercado es habitual encontrar teclados matriciales pasivos de 3 x 4 y de 4 x 4
teclas. Esencialmente están constituidos por filas y columnas conductoras en cuyo cruce
se encuentra un pulsador mecánico o de membrana que, al ser pulsado, establece el
contacto eléctrico entre la fila y la columna correspondiente.
Figura 1 – Esquema típico de un teclado matricial de 4 filas y 4 columnas (cedido por Elena Muñoz Salinero y Olga Cristina Santos Martín-Moreno)
Para su conexión al microcontrolador se deben colocar unas resistencias de pull-up en
las filas (o las columnas). De esta forma si se pone a masa (cero lógico) una columna
(fila) se obtendrá un cero en la fila (columna) correspondiente cuando se pulse una
tecla.
Al pulsar pueden producirse rebotes mecánicos e interpretarlos como varias repeticiones
de la misma tecla. Para evitarlo basta con esperar un tiempo superior a la duración de
los mismos antes de seguir leyendo datos del teclado.
126
Este tiempo debe ser ajustado por el alumno de tal forma que ni se detecten pulsaciones
falsas ni resulte lento el manejo del teclado. El ajuste se puede realizar a tanto alzado,
aumentando la espera hasta que desaparezca el fenómeno de repetición o bien de modo
más preciso midiendo los transitorios con rebotes y su duración con un osciloscopio
digital con captura sensible a flancos (como los disponibles en el laboratorio B-043).
4.2 Algoritmo de reconocimiento de teclas
Para conocer la tecla pulsada se puede seguir un algoritmo como el descrito a
continuación:
REPETIR
Excitar una columna.
Retardo (necesario si hay optoacopladores)
Leer las filas.
Si no hay tecla pulsada pasar a la siguiente columna.
HASTA QUE SE PULSE UNA TECLA
Esperar un tiempo mayor que la duración de los rebotes.
REPETIR
Leer la fila
HASTA QUE SE SUELTE LA TECLA
Determinar la tecla pulsada a partir de la fila y la columna.
En el caso de que los puertos lleven optoacopladores es necesario introducir un retardo
que asegure la propagación de la señal, debido a la lentitud de los mismos.
4.3 Conexión al microcontrolador MC68331
Para conectar al microcontrolador un teclado de 4 x 4 teclas se necesitan ocho puntos de
conexión (pins), cuatro de salida y otros cuatro de entrada. Con las salidas se excitan las
columnas (filas) y con las entradas se leen las filas (columnas). El microcontrolador
MC68331 ofrece una amplia variedad de posibilidades de conexión, cuya elección
dependerá del diseño en cuestión.
En los ejemplos que se muestran a continuación se ha optado por usar como salidas los
cuatro primeros bits del puerto C (PC0-PC3) para excitar las columnas y como entradas
los cuatro primeros del puerto E (PE0-PE3) para leer las filas, sin que exista una razón
que haga de ésta una elección mejor que otra.
127
4.4 Rutina básica de atención al teclado
A continuación se muestra el código en ensamblador para el micro Motorola MC68331.
La rutina tiene por nombre TECLA_LEER y usa una subrutina llamada
TECLA_SOLTAR:
************************** TECLA_SOLTAR ***************************
* Permanece en un bucle mientras sigue pulsada la tecla indicada *
* en D5 y sale cuando se suelta. *
*******************************************************************
TECLA_SOLTAR
MOVE.L #REBOTES_MATAR,D1 * Duración del transitorio que aparece al
BSR DELAY * pulsar una tecla. (REBOTES_MATAR = 4)
SIGUE_PULSADA
BTST.B D3,PORTE * Se lee el puerto E
BEQ.S SIGUE_PULSADA * Si son iguales SIGUE PULSADA la tecla
RTS
**************************** TECLA_LEER ***************************
* Esta rutina rastrea las filas y columnas del teclado en busca *
* de una tecla pulsada. Utiliza los registros D1 a D4 para su uso *
* interno y devuelve el número correspondiente a la tecla pulsada.*
*******************************************************************
TECLA_LEER
MOVEM.L D1-D4,-(A7) * Se salva en la pila los registros a usar.
CLR.B D0 * D0 almacena el valor de la tecla pulsada.
MOVE.L #3,D1 * D1 es el contador de columnas.
MOVE.B #$0E,D4 * D4 es usado como registro auxiliar.
COLUMNA
MOVE.B D4,PORTC * Pone el Puerto C el valor 0000 1110
MOVE.L #3,D2 * D2 es el contador de filas
MOVE.B #0,D3 * D3 guarda el número de bit a comprobar
FILA
BTST.B D3,PORTE * Comprueba el bit de la fila
BEQ TECLA * Salta si encontró la tecla pulsada
ADDQ.B #1,D0 * Siguiente tecla
ADDQ.B #1,D3 * Siguiente fila
DBF D2,FILA * Decrementa el contador de filas y salta a la
* siguiente
128
ORI.B #$10,CCR * Pone a 1 el bit de eXtensión del CCR
ROXL.B #1,D4 * Siguiente columna
ANDI.B #$0F,D4 * Elimina los cuatro bits más significativos
DBF D1,COLUMNA * Decrementa el contador de columnas y salta a la
* siguiente
MOVE.B #$FF,D0 * Devuelve $FF si no hay tecla pulsada
BRA FIN
TECLA
BSR TECLA_SOLTAR * Salta a subrutina TECLA_SOLTAR
FIN
MOVEM.L (A7)+,D1-D4 * Restaura los registros desde la pila
RTE
4.5 Anexo – Ejemplos de uso del teclado
4.5.1 Ejemplo 1 – Programa básico de atención al teclado
El programa listado a continuación utiliza la rutina básica de atención al teclado para
dejar en el registro D2 del micro el código ASCII de la tecla pulsada.
******************************************************************************
* REGISTROS SIM *
******************************************************************************
SIMCR EQU $FFFA00 * Controla la configuración del sistema ($00CF).
SYNCR EQU $FFFA04 * Fija frecuencia y modo de operación del reloj ($3F08).
RSR EQU $FFFA06 * Guarda la causa de un reset (Ej.-$80, reset hardware).
PORTE EQU $FFFA11 * Registro de lectura y escritura en el puerto E.
PORTE1 EQU $FFFA13 * Tiene exactamente la misma función que el anterior.
DDRE EQU $FFFA15 * Determina el sentido del puerto E pin a pin.
PEPAR EQU $FFFA17 * Asignación del puerto E (Puerto o control de BUS).
PORTF EQU $FFFA19 * Registro de lectura y escritura en el puerto F.
PORTF1 EQU $FFFA1B * Tiene exactamente la misma función que el anterior.
DDRF EQU $FFFA1D * Determina el sentido del puerto F pin a pin.
PFPAR EQU $FFFA1F * Asignación del puerto F (Puerto F o control de BUS).
PICR EQU $FFFA22 * Configuración de interrupciones periódicas ($000F).
PITR EQU $FFFA24 * Contiene la cuenta del timer periódico ($0000).
SYPCR EQU $FFFA21 * Controla las funciones de monitorización del sistema
* como es el caso del Watchdog. ($40 anula watchdog).
SWSR EQU $FFFA27 * Se debe escribir periódicamente si Watchdog activado.
129
CSPAR0 EQU $FFFA44 * Sirve junto con CSPAR1 para configurar la función de
CSPAR1 EQU $FFFA46 * los pins de Chip Select (CS, Port C, etc.).
PORTC EQU $FFFA41 * Registro de escritura en el puerto C.
******************************************************************************
* REGISTROS GPT-PWM *
******************************************************************************
GPTMCR EQU $FFF900 * Configuración del GPT.
ICR EQU $FFF904 * Configuración de interrupciones del GPT.
DDRGP EQU $FFF906 * Determina el sentido del puerto GP.
PORTGP EQU $FFF907 * Registro de lectura y escritura del puerto GP.
OC1M EQU $FFF908 * Máscara para asignar los pin de captura de OC.
OC1D EQU $FFF909 * Registro de datos a comparar con el puerto OC.
TCNT EQU $FFF90A * Registro del GPT asociado a las capturas IC, OC y PAI.
PACTL EQU $FFF90C * Configuración del acumulador de pulsos PAI.
PACNT EQU $FFF90D * Es el contador de registro de eventos del PAI.
TIC1 EQU $FFF90E * Capturan el TCNT cuando se registra un evento en IC1.
TIC2 EQU $FFF910 * Capturan el TCNT cuando se registra un evento en IC2.
TIC3 EQU $FFF912 * Capturan el TCNT cuando se registra un evento en IC3.
TOC1 EQU $FFF914 * Cuando coincide con TCNT causa eventos en los pin OC.
TOC2 EQU $FFF916 * Si el valor coincide con TCNT causa un evento en OC2.
TOC3 EQU $FFF918 * Si el valor coincide con TCNT causa un evento en OC3.
TOC4 EQU $FFF91A * Si el valor coincide con TCNT causa un evento en OC4.
TI4O5 EQU $FFF91C * Pin compartido (Puede realizar una función TIC o TOC).
TCTL1 EQU $FFF91E * Configura el modo de comparación y nivel de salida.
TCTL2 EQU $FFF91F * Configura que flanco provoca la captura en los IC.
TMSK1 EQU $FFF920 * Habilita las interrupciones de IC y OC.
TMSK2 EQU $FFF921 * Habilita las interrupciones del PAI y del TIMER.
TFLG1 EQU $FFF922 * Registro de flags de interrupciones de IC y OC.
TFLG2 EQU $FFF923 * Registro de flags de interrupciones del PAI y TIMER
CFORC EQU $FFF924 * Fuerza una salida en los pin OC y PWM.
PWMC EQU $FFF925 * Configuración del PWM.
PWMA EQU $FFF926 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMB EQU $FFF927 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMCNT EQU $FFF928 * Registro del contador del PWM.
PWMBUFA EQU $FFF92A * Buffer para prevenir glitches cuando modificamos PWMA.
PWMBUFB EQU $FFF92B * Buffer para prevenir glitches cuando modificamos PWMB.
PRESCL EQU $FFF92C * Guarda el valor del multiplicador del GPT.
130
******************************************************************************
* TIPOS DE RETARDO *
******************************************************************************
CORTO EQU $0400 * Del orden de 100us.
MEDIO EQU $2800 * Del orden de 1ms.
LARGO EQU $C800 * Del orden de 5ms.
RETARDO EQU $FFFF * Se usa para el avance de caracteres.
REBOTES_MATAR EQU $0004 * Tiempo necesario para matar los transito-
* rios que se producen al pulsar una tecla.
******************************************************************************
* VECTORES DEL RESET *
******************************************************************************
ORG $0
PILA_RESET DC.L FIN_PILA
PC_RESET DC.L PRINCIPAL
******************************************************************************
* VECTORES DE INTERRUPCIÓN *
******************************************************************************
ORG $80
VECTOR0 DC.L TECLA_LEER
******************************************************************************
* PUNTERO DE PILA *
******************************************************************************
ORG $4000
PILA DS.L 200
FIN_PILA:
******************************************************************************
* LISTA DE TECLAS *
******************************************************************************
ORG $2000
TECLAS DC.B $41,$30,$42,$43,$37,$38,$39,$44,$34,$35,$36,$45,$31,$32,$33,$46
******************************************************************************
* SUBRUTINAS *
******************************************************************************
131
ORG $1000
******************************************************************************
* CONFIGURACION DEL HARDWARE DEL MICRO *
******************************************************************************
*************************** INHAB_WDOG ****************************
* Inhabilita el Watchdog que es una función de monitorización del *
* sistema para detectar la entrada en un bucle infinito. *
*******************************************************************
INHAB_WDOG:
MOVE.B #$40,SYPCR * Inhabilitamos WatchDog
RTS
*----------------------------------------------------------------------------*
************************** PORT_EC_CFG ****************************
* Con esta rutina se configuran los puertos E y C que son los que *
* se usan para controlar el teclado. *
*******************************************************************
PORT_EC_CFG
MOVE.B #$F0,DDRE * PE0..PE3 entradas, PE4..PE7 salidas.
MOVE.B #$00,PEPAR * Configura el registro de control del puerto E.
MOVE.B #$00,CSPAR0 * PC0-PC2 utilizables.
MOVE.W #$0000,CSPAR1 * PC3-PC6 utilizables.
MOVE.B #$00,PORTE
MOVE.B #$0F,PORTC
RTS
*----------------------------------------------------------------------------*
******************************************************************************
* SUBRUTINAS DE TECLADO *
******************************************************************************
************************** TECLA_SOLTAR ***************************
* Permanece en un bucle mientras sigue pulsada la tecla indicada *
* en D5 y sale cuando se suelta. *
*******************************************************************
TECLA_SOLTAR
MOVE.L D1,-(A7)
MOVE.L #REBOTES_MATAR,D1 * Duración del transitorio que aparece al
BSR DELAY * pulsar una tecla.
132
SIGUE_PULSADA
BTST.B D3,PORTE * Se lee el puerto E
BEQ.S SIGUE_PULSADA * Si son iguales SIGUE PULSADA la tecla
MOVE.L (A7)+,D1
RTS
******************************************************************************
* RUTINAS DE CONTROL *
******************************************************************************
***************************** DELAY *******************************
* Produce un retardo cuya duración viene determinada por el valor *
* almacenado en el registro D1. *
*******************************************************************
DELAY
SUB.L #1,D1
BNE DELAY
RTS
******************************************************************************
* SERVICIOS DE DISPOSITIVOS *
******************************************************************************
******************************************************************************
* SERVICIOS DE TECLADO *
******************************************************************************
**************************** TECLA_LEER ***************************
* Esta rutina rastrea las filas y columnas del teclado en busca *
* de una tecla pulsada. Utiliza los registros D6 y D7 para su uso *
* interno y devuelve el código ASCII de la tecla a través de D0. *
*******************************************************************
TECLA_LEER
MOVEM.L D1-D4,-(A7) * Se salva en la pila los registros que se van a usar
CLR.B D0 * D0 almacena el valor de la tecla pulsada
MOVE.L #3,D1 * D1 es el contador de columnas
MOVE.B #$0E,D4 * D4 es usado como registro auxiliar
COLUMNA
MOVE.B D4,PORTC * Pone el Puerto C el valor 0000 1110
MOVE.L #3,D2 * D2 es el contador de filas
MOVE.B #0,D3 * D3 guarda el número de bit a comprobar
FILA
133
BTST.B D3,PORTE * Comprueba el bit de la fila
BEQ TECLA * Salta si encontró la tecla pulsada
ADDQ.B #1,D0 * Siguiente tecla
ADDQ.B #1,D3 * Siguiente fila
DBF D2,FILA * Decrementa fila y salta a la siguiente
ORI.B #$10,CCR * Pone a 1 el bit eXtensión del CCR
ROXL.B #1,D4 * Siguiente columna
ANDI.B #$0F,D4 * Elimina los cuatro bits más significativos
DBF D1,COLUMNA * Decrementa columna y salta a la siguiente
MOVE.B #$FF,D0
BRA FIN
TECLA
BSR TECLA_SOLTAR
FIN
MOVEM.L (A7)+,D1-D4 * Restaura los registros desde la pila
RTE
******************************************************************************
* PRINCIPAL *
******************************************************************************
ORG $400
PRINCIPAL
BSR INHAB_WDOG
BSR PORT_EC_CFG
BUCLE
MOVE #LARGO,D1
BSR DELAY
CLR.L D0
TRAP #0
MOVE.B D0,D6
BRA BUCLE
END
4.5.2 Ejemplo 2 – Uso combinado con un display LCD
Este ejemplo combina el uso del teclado con el de un display LCD. En el display
aparecerá un rótulo indicativo de la tecla pulsada. Para ello utiliza una serie de rutinas
134
de control de un display LCD que podrán ser consultadas en las Notas sobre el control
de un display LCD.
******************************************************************************
* REGISTROS SIM *
******************************************************************************
SIMCR EQU $FFFA00 * Controla la configuración del sistema ($00CF).
SYNCR EQU $FFFA04 * Fija frecuencia y modo de operación del reloj ($3F08).
RSR EQU $FFFA06 * Guarda la causa de un reset (Ej.-$80, reset hardware).
PORTE EQU $FFFA11 * Registro de lectura y escritura en el puerto E.
PORTE1 EQU $FFFA13 * Tiene exactamente la misma función que el anterior.
DDRE EQU $FFFA15 * Determina el sentido del puerto E pin a pin.
PEPAR EQU $FFFA17 * Asignación del puerto E (Puerto o control de BUS).
PORTF EQU $FFFA19 * Registro de lectura y escritura en el puerto F.
PORTF1 EQU $FFFA1B * Tiene exactamente la misma función que el anterior.
DDRF EQU $FFFA1D * Determina el sentido del puerto F pin a pin.
PFPAR EQU $FFFA1F * Asignación del puerto F (Puerto F o control de BUS).
PICR EQU $FFFA22 * Configuración de interrupciones periódicas ($000F).
PITR EQU $FFFA24 * Contiene la cuenta del timer periódico ($0000).
SYPCR EQU $FFFA21 * Controla las funciones de monitorización del sistema
* como es el caso del Watchdog. ($40 anula watchdog).
SWSR EQU $FFFA27 * Se debe escribir periódicamente con Watchdog activado.
CSPAR0 EQU $FFFA44 * Sirve junto con CSPAR1 para configurar la función de
CSPAR1 EQU $FFFA46 * los pins de Chip Select (CS, Port C, etc.).
PORTC EQU $FFFA41 * Registro de escritura en el puerto C.
******************************************************************************
* REGISTROS GPT-PWM *
******************************************************************************
GPTMCR EQU $FFF900 * Configuración del GPT.
ICR EQU $FFF904 * Configuración de interrupciones del GPT.
DDRGP EQU $FFF906 * Determina el sentido del puerto GP.
PORTGP EQU $FFF907 * Registro de lectura y escritura del puerto GP.
OC1M EQU $FFF908 * Máscara para asignar los pin de captura de OC.
OC1D EQU $FFF909 * Registro de datos a comparar con el puerto OC.
TCNT EQU $FFF90A * Registro del GPT asociado a las capturas IC, OC y PAI.
PACTL EQU $FFF90C * Configuración del acumulador de pulsos PAI.
PACNT EQU $FFF90D * Es el contador de registro de eventos del PAI.
TIC1 EQU $FFF90E * Capturan el TCNT cuando se registra un evento en IC1.
135
TIC2 EQU $FFF910 * Capturan el TCNT cuando se registra un evento en IC2.
TIC3 EQU $FFF912 * Capturan el TCNT cuando se registra un evento en IC3.
TOC1 EQU $FFF914 * Cuando coincide con TCNT causa eventos en los pin OC.
TOC2 EQU $FFF916 * Si el valor coincide con TCNT causa un evento en OC2.
TOC3 EQU $FFF918 * Si el valor coincide con TCNT causa un evento en OC3.
TOC4 EQU $FFF91A * Si el valor coincide con TCNT causa un evento en OC4.
TI4O5 EQU $FFF91C * Pin compartido (Puede realizar una función TIC o TOC).
TCTL1 EQU $FFF91E * Configura el modo de comparación y nivel de salida.
TCTL2 EQU $FFF91F * Configura que flanco provoca la captura en los IC.
TMSK1 EQU $FFF920 * Habilita las interrupciones de IC y OC.
TMSK2 EQU $FFF921 * Habilita las interrupciones del PAI y del TIMER.
TFLG1 EQU $FFF922 * Registro de flags de interrupciones de IC y OC.
TFLG2 EQU $FFF923 * Registro de flags de interrupciones del PAI y TIMER
CFORC EQU $FFF924 * Fuerza una salida en los pin OC y PWM.
PWMC EQU $FFF925 * Configuración del PWM.
PWMA EQU $FFF926 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMB EQU $FFF927 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMCNT EQU $FFF928 * Registro del contador del PWM.
PWMBUFA EQU $FFF92A * Buffer para prevenir glitches cuando modificamos PWMA.
PWMBUFB EQU $FFF92B * Buffer para prevenir glitches cuando modificamos PWMB.
PRESCL EQU $FFF92C * Guarda el valor del multiplicador del GPT.
******************************************************************************
* TIPOS DE RETARDO *
******************************************************************************
CORTO EQU $0400 * Del orden de 100us.
MEDIO EQU $2800 * Del orden de 1ms.
LARGO EQU $C800 * Del orden de 5ms.
RETARDO EQU $FFFF * Se usa para el avance de caracteres.
REBOTES_MATAR EQU $0004 * Duración del transitorio de la tecla.
******************************************************************************
* CONSTANTES DE INTERÉS *
******************************************************************************
INI_DR EQU $00 * Inicio de línea única de caracteres.
FIN_DR EQU $4F * Fin línea única de caracteres.
L1_INI_DR EQU $00 * Inicio de la primera línea.
L1_FIN_DR EQU $27 * Fin de la primera línea.
L2_INI_DR EQU $40 * Inicio de la segunda línea.
136
L2_FIN_DR EQU $67 * Fin de la segunda línea.
LCD_LONG EQU $0F * Longitud de la pantalla del LCD.
******************************************************************************
* PUERTOS DEL DISPLAY *
******************************************************************************
BYTE_DATA EQU PORTE * Puerto de datos.
BYTE_CONTROL EQU PORTC * Puerto de control.
BIT_ENABLE EQU 4 * Se usa para controlar el proceso de comunicación.
* con el controlador del display.
BIT_RS EQU 5 * Selección del tipo de registro al que se escribe:
* 0 - Registro de Instrucciones (IR).
* 1 - Registro de Datos (DR).
BIT_RW EQU 6 * Cambio entre los modos de lectura y escritura.
FLAG EQU 7 * Posición del flag de datos en el puerto.
******************************************************************************
* VECTORES DEL RESET *
******************************************************************************
ORG $0
PILA_RESET DC.L FIN_PILA
PC_RESET DC.L PRINCIPAL
******************************************************************************
* VECTORES DE INTERRUPCIÓN *
******************************************************************************
ORG $80
VECTOR0 DC.L DRIVER_SERVICIOS
******************************************************************************
* PUNTERO DE PILA *
******************************************************************************
ORG $4000
PILA DS.L 200
FIN_PILA:
******************************************************************************
* LISTA DE MENSAJES *
******************************************************************************
ORG $2000
137
MENSAJES DC.L MENS1,MENS2,MENS3,MENS4,MENS5,MENS6,MENS7,MENS8,MENS9,MENS10,MENS11,MENS12,MENS13,MENS14,MENS15,MENS16
MENS1 DC.B 'TECLA C', $00
MENS2 DC.B 'TECLA B', $00
MENS3 DC.B 'CERO', $00
MENS4 DC.B 'TECLA A', $00
MENS5 DC.B 'TECLA D', $00
MENS6 DC.B 'NUEVE', $00
MENS7 DC.B 'OCHO', $00
MENS8 DC.B 'SIETE', $00
MENS9 DC.B 'TECLA E', $00
MENS10 DC.B 'SEIS',$00
MENS11 DC.B 'CINCO',$00
MENS12 DC.B 'CUATRO',$00
MENS13 DC.B 'TECLA F',$00
MENS14 DC.B 'TRES',$00
MENS15 DC.B 'DOS',$00
MENS16 DC.B 'UNO',$00
******************************************************************************
* SUBRUTINAS *
******************************************************************************
ORG $1000
******************************************************************************
* CONFIGURACION DEL HARDWARE DEL MICRO *
******************************************************************************
*************************** INHAB_WDOG ****************************
* Inhabilita el Watchdog que es una función de monitoriración del *
* sistema para detectar la entrada en un bucle infinito. *
*******************************************************************
INHAB_WDOG:
MOVE.B #$40,SYPCR * Inhabilitamos WatchDog
RTS
************************** PORT_EC_CFG ****************************
* Con esta rutina se configuran los puertos E y C que son los que *
* se usan para controlar el display y el teclado. *
*******************************************************************
138
PORT_EC_CFG
MOVE.B #$FF,DDRE * PE0..PE7 salidas.
MOVE.B #$00,PEPAR * Configura el registro de control del puerto E.
MOVE.B #$00,CSPAR0 * PC0-PC2 utilizables.
MOVE.W #$0000,CSPAR1 * PC3-PC6 utilizables.
MOVE.B #$00,PORTE
MOVE.B #$0F,PORTC
RTS
*----------------------------------------------------------------------------*
************************* CAMB_TECLADO ****************************
* Con esta rutina se cambia la configuración del puerto E para *
* que los cuatro primeros bits funcionen como entrada y poder *
* rastrear las columnas de la matriz del teclado. *
*******************************************************************
CAMB_TECLADO
MOVE.B #$F0,DDRE * PE0..PE3 entradas, PE4..PE7 salidas.
RTS
*----------------------------------------------------------------------------*
************************* CAMB_DISPLAY ****************************
* Con esta rutina se devuelve al puerto E a su estado inicial con *
* todos los bits de salida para poder enviar datos al display. *
*******************************************************************
CAMB_DISPLAY
MOVE.B #$FF,DDRE * PE0..PE7 salidas.
RTS
******************************************************************************
* RUTINAS DE CONTROL *
******************************************************************************
***************************** DELAY *******************************
* Produce un retardo cuya duración viene determinada por el valor *
* almacenado en el registro D1. *
*******************************************************************
DELAY
SUB.L #1,D1
BNE DELAY
RTS
139
*----------------------------------------------------------------------------*
************************* FLAG_ESPERAR ****************************
* Espera a que se baje el flag de ocupado. *
*******************************************************************
FLAG_ESPERAR
MOVE.B #$7F,DDRE
BSET.B #BIT_RW,BYTE_CONTROL
BSET.B #BIT_ENABLE,BYTE_CONTROL
OCUPADO
BTST.B #FLAG,BYTE_DATA
BNE OCUPADO
BCLR.B #BIT_ENABLE,BYTE_CONTROL
BCLR.B #BIT_RW,BYTE_CONTROL
MOVE.B #$FF,DDRE
RTS
*----------------------------------------------------------------------------*
*************************** ENABLE_LCD ****************************
* Provoca la ejecución de la instrucción, generando un pulso de *
* duración determinada en la línea Enable del LCD. *
*******************************************************************
ENABLE_LCD
BSET.B #BIT_ENABLE,BYTE_CONTROL
BCLR.B #BIT_ENABLE,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
******************************************************************************
* SUBRUTINAS DEL LCD (INSTRUCCIONES) *
******************************************************************************
************************** CFG_DISPLAY ****************************
* Configura el modo de funcionamiento del display. Básicamente se *
* reduce a tres aspectos: *
* 1 - Comunicación con el display con 8 o 4 bits. *
* 2 - 1 o 2 líneas en pantalla. *
* 3 - Dos tipos de fuentes 5x8 o bien 5x10 puntos. *
* Suprimiendo el asterisco correspondiente se puede modificar la *
* opción seleccionada por defecto. *
140
*******************************************************************
CFG_DISPLAY
BSR FLAG_ESPERAR
MOVE.B #$30,BYTE_DATA * Modo 8 bits, una línea, fuentes 5x8 puntos.
* BCLR.B #4,BYTE_DATA * Modo 4 bits.
* BSET.B #3,BYTE_DATA * Habilita 2 líneas.
* BSET.B #2,BYTE_DATA * Fuentes de 5x10 puntos.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** MODO_AVC ******************************
* El cursor avanza cuando se escribe un carácter en el registro *
* DR. El display permanece estático. *
*******************************************************************
MODO_AVC
BSR FLAG_ESPERAR
MOVE.B #$06,BYTE_DATA * Cursor adelante, display no acompaña.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** MODO_AVT ******************************
* El cursor y el display avanzan solidariamente cuando se escribe *
* un carácter en el registro DR. *
*******************************************************************
MODO_AVT
BSR FLAG_ESPERAR
MOVE.B #$07,BYTE_DATA * Cursor adelante, display acompaña.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** MODO_RTC ******************************
* El cursor retrocede cuando se escribe un carácter en el regis- *
* tro DR. El display permanece estático. *
*******************************************************************
MODO_RTC
BSR FLAG_ESPERAR
MOVE.B #$04,BYTE_DATA * Cursor atrás, display no acompaña.
BSR ENABLE_LCD
141
RTS
*----------------------------------------------------------------------------*
*************************** MODO_RTT ******************************
* El cursor y el display retroceden solidariamente cuando se es- *
* cribe un carácter en el registro DR. *
*******************************************************************
MODO_RTT
BSR FLAG_ESPERAR
MOVE.B #$05,BYTE_DATA * Cursor atrás, display acompaña.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
************************** MODO_NORMAL ****************************
* Se configura el modo del display. Por defecto estar n tanto el *
* display como el cursor encendidos y sin parpadear el carácter *
* donde se encuentra el cursor. *
*******************************************************************
MODO_NORMAL
BSR FLAG_ESPERAR
MOVE.B #$0E,BYTE_DATA * Display y Cursor ON, blinkin OFF
* BCLR.B #2,BYTE_DATA * Display OFF
* BCLR.B #1,BYTE_DATA * Cursor OFF
* BSET.B #0,BYTE_DATA * Blinking ON
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
**************************** MODO_OFF *****************************
* Produce el apagado de la pantalla del LCD. Se puede seguir en- *
* viando ordenes al display que serán ejecutadas. La única dife- *
* rencia es que no aparece reflejado hasta que no se enciende de *
* el LCD. *
*******************************************************************
MODO_OFF
BSR FLAG_ESPERAR
MOVE.B #$08,BYTE_DATA * Display y Cursor ON, blinkin OFF
BSR ENABLE_LCD
142
RTS
*----------------------------------------------------------------------------*
***************************** CLEAR *******************************
* Borra el contenido del display y sitúa el cursor a la izquierda *
*******************************************************************
CLEAR
BSR FLAG_ESPERAR
MOVE.B #$01,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
************************** RETURN_HOME *****************************
* Devuelve el cursor a la primera posición conservando el conteni- *
* de la memoria del display. *
********************************************************************
RETURN_HOME
BSR FLAG_ESPERAR
MOVE.B #$02,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** CURS_IZQ ******************************
* Mueve el cursor a la izquierda sin modificar el texto. *
*******************************************************************
CURS_IZQ
BSR FLAG_ESPERAR
MOVE.B #$10,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** CURS_DCHA *****************************
* Mueve el cursor a la derecha sin modificar el texto. *
143
*******************************************************************
CURS_DCHA
BSR FLAG_ESPERAR
MOVE.B #$14,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** DISP_IZQ ******************************
* Desplaza la ventana del display hacia la izquierda. *
*******************************************************************
DISP_IZQ
BSR FLAG_ESPERAR
MOVE.B #$1C,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*************************** DISP_DCHA *****************************
* Desplaza la ventana del display hacia la derecha. *
*******************************************************************
DISP_DCHA
BSR FLAG_ESPERAR
MOVE.B #$18,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
************************** CGRAM_ADDR *****************************
* Coloca la dirección indicada en D0 en el contador de la Memoria *
* del Generador de Caracteres (CGRAM). Este generador permite de- *
* finir 8 caracteres de usuario en el modo 5x8 y cuatro en el de *
* 5x10 puntos. Para un correcto uso de la instrucción deberemos *
* escribir una de las 64 direcciones posibles (de $00 a $3F)en D0 *
*******************************************************************
CGRAM_ADDR
BSR FLAG_ESPERAR
ADD.B #$40,D0
MOVE.B D0,BYTE_DATA
144
BSET.B #BIT_RS,BYTE_CONTROL
BSR ENABLE_LCD
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
************************** DDRAM_ADDR *****************************
* Coloca la dirección indicada en D0 en el contador de la Memoria *
* de Datos del Display (DDRAM). Existen 80 posiciones disponibles *
* que ser n consecutivas cuando el display trabaje en una única *
* línea o repartidas en dos grupos de 40 cuando trabaje en el *
* modo de dos líneas. *
* V‚ase detalle a continuación: *
* - 80 posiciones x 1 línea - las direcciones van de $0 a $4F. *
* - 40 posiciones x 2 líneas - las direcciones se reparten: *
* Línea primera: de $00 a $27. *
* Línea segunda: de $40 a $67. *
*******************************************************************
DDRAM_ADDR
BSR FLAG_ESPERAR
ADD.B #$80,D0
MOVE.B D0,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR ENABLE_LCD
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
*************************** ESCRIBIR ******************************
* Esta instrucción permite escribir en el registro de datos (DR) *
* una palabra que puede ir destinada a la memoria del generador *
* de caracteres (CGRAM) o a la de datos del display (DDRAM) de- *
* pendiendo de cual fu‚ la ultima selección. El dato a escribir *
* lo pondremos en el registro D0. *
*******************************************************************
ESCRIBIR
BSR FLAG_ESPERAR
MOVE.B D0,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
145
BSR ENABLE_LCD
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
******************************************************************************
* SUBRUTINAS DE TECLADO *
******************************************************************************
************************** TECLA_SOLTAR ***************************
* Permanece en un bucle mientras sigue pulsada la tecla indicada *
* en D5 y sale cuando se suelta. *
*******************************************************************
TECLA_SOLTAR
MOVE.L #REBOTES_MATAR,D1 * Duración del transitorio que aparece al
BSR DELAY * pulsar una tecla.
SIGUE_PULSADA
BTST.B D3,PORTE * Se lee el puerto E
BEQ.S SIGUE_PULSADA * Si son iguales SIGUE PULSADA la tecla
RTS
******************************************************************************
* RUTINAS DE INICIALIZACIÓN DE DISPOSITIVOS *
******************************************************************************
**************************** INI_LCD ******************************
* Esta rutina realiza toda la inicialización del display tras el *
* encendido del mismo. Después de su ejecución el display queda *
* preparado para recibir ordenes y caracteres. *
*******************************************************************
INI_LCD:
BSR CFG_DISPLAY
BSR MODO_NORMAL
BSR CLEAR
RTS
******************************************************************************
* SERVICIOS DE DISPOSITIVOS *
******************************************************************************
******************************************************************************
* SERVICIOS DEL DISPLAY *
******************************************************************************
************************** ESCR_MENSAJE ***************************
146
* Esta rutina escribe un mensaje completo en el display en el *
* sentido natural de escritura cuya dirección de inicio se la pa- *
* samos a través del registro A0. El símbolo con que deber ter- *
* minarse el mensaje es $00. Si el mensaje es superior a los 16 *
* caracteres que tiene el LCD, al alcanzar el final de la línea *
* automáticamente se cambia del modo AVC al AVT en el que el dis- *
* play acompaña al cursor dando la sensación de que el texto se *
* desplaza. *
*******************************************************************
ESCR_MENSAJE
BSR RETURN_HOME
BSR MODO_AVC
MOVE.B #LCD_LONG,D1 * Cuenta los caracteres escritos en el display.
BUCLE1
TST.B (A0)
BEQ FIN1
MOVE.B (A0)+,D0
BSR ESCRIBIR
SUB.B #1,D1
BEQ FIN_LIN1
BRA BUCLE1
FIN_LIN1
BSR MODO_AVT * Cambia al modo AVT para que el display acompañe al cursor.
BRA BUCLE1
FIN1
RTS
*----------------------------------------------------------------------------*
*************************** DSP_ADELANTE **************************
* Esta rutina desplaza hacia la derecha la pantalla del display *
* recorriendo las 80 posiciones del registro DDRAM. *
*******************************************************************
DSP_ADELANTE
MOVE.B #FIN_DR,D0 * Cuenta los caracteres escritos en el display.
BUCLE2
BSR DISP_DCHA
MOVE.L #RETARDO,D1
BSR DELAY
SUB.B #1,D0
147
BNE BUCLE2
RTS
*----------------------------------------------------------------------------*
**************************** DSP_ATRAS ****************************
* Esta rutina desplaza hacia la izquierda la pantalla del display *
* recorriendo las 80 posiciones del registro DDRAM. *
*******************************************************************
DSP_ATRAS
MOVE.B #FIN_DR,D0 * Cuenta los caracteres escritos en el display.
BUCLE3
BSR DISP_IZQ
MOVE.L #RETARDO,D1
BSR DELAY
SUB.B #1,D0
BNE BUCLE3
RTE
*----------------------------------------------------------------------------*
******************************************************************************
* SERVICIOS DE TECLADO *
******************************************************************************
**************************** TECLA_LEER ***************************
* Esta rutina rastrea las filas y columnas del teclado en busca *
* de una tecla pulsada. Utiliza los registros D6 y D7 para su uso *
* interno y devuelve el código ASCII de la tecla a través de D0. *
*******************************************************************
TECLA_LEER
MOVEM.L D1-D4,-(A7) * Se salva en la pila los registros que se van a usar
CLR.B D0 * D0 almacena el valor de la tecla pulsada
MOVE.L #3,D1 * D1 es el contador de columnas
MOVE.B #$0E,D4 * D4 es usado como registro auxiliar
COLUMNA
MOVE.B D4,PORTC * Pone el Puerto C el valor 0000 1110
MOVE.L #3,D2 * D2 es el contador de filas
MOVE.B #0,D3 * D3 guarda el número de bit a comprobar
FILA
BTST.B D3,PORTE * Comprueba el bit de la fila
BEQ TECLA * Salta si encontró la tecla pulsada
148
ADDQ.B #1,D0 * Siguiente tecla
ADDQ.B #1,D3 * Siguiente fila
DBF D2,FILA * Decrementa el contador de filas y salta a la
* siguiente
ORI.B #$10,CCR * Pone a 1 el bit extensión del CCR
ROXL.B #1,D4 * Siguiente columna
ANDI.B #$0F,D4 * Elimina los cuatro bits más significativos
DBF D1,COLUMNA * Decrementa el contador de columnas y salta a la
* siguiente,
MOVE.B #$FF,D0
BRA FIN_T
TECLA
BSR TECLA_SOLTAR
FIN_T
MOVEM.L (A7)+,D1-D4 * Restaura los registros desde la pila
RTS
*----------------------------------------------------------------------------*
************************* DRIVER_SERVICIOS ************************
* Esta rutina realiza el servicio indicado a través del registro *
* D7 con un número ordinal. Para llamar a la rutina de servicio *
* se coloca el número de servicio en el registro D7 y se ejecuta *
* un TRAP #0. *
*******************************************************************
DRIVER_SERVICIOS
CMP.B #1,D7
BEQ SERVICIO1
CMP.B #2,D7
BEQ SERVICIO2
CMP.B #3,D7
BEQ SERVICIO3
CMP.B #4,D7
BEQ SERVICIO4
BRA FIN
SERVICIO1
BSR ESCR_MENSAJE
BRA FIN
SERVICIO2
BSR DSP_ADELANTE
149
BRA FIN
SERVICIO3
BSR DSP_ATRAS
BRA FIN
SERVICIO4
BSR TECLA_LEER
FIN
RTE
*----------------------------------------------------------------------------*
******************************************************************************
* PRINCIPAL *
******************************************************************************
ORG $400
PRINCIPAL
MOVE.W #MENSAJES,A6
BSR INHAB_WDOG
BSR PORT_EC_CFG
BSR INI_LCD
BSR RETURN_HOME
BSR MODO_AVC
MOVE.B #LCD_LONG,D3 * Cuenta los caracteres escritos en el display.
BUCLE
CLR.L D0
BSR CAMB_TECLADO
MOVE.L #4,D7
TRAP #0
CMP.B #$FF,D0
BEQ BUCLE
MULU #4,D0
MOVE.L (A6,D0.L),A0
BSR CAMB_DISPLAY
BSR CLEAR
MOVE.L #1,D7
TRAP #0
SUB.B #1,D3
BEQ FIN_LIN
BRA BUCLE
FIN_LIN
150
BSR MODO_AVT * Cambia al modo AVT para que el display acompañe al cursor.
BRA BUCLE
END
151
Capítulo 5
Reproductor de mensajes basado en el dispositivo ISD 25XXLa familia ISD 25XX proporciona servicios de grabación y reproducción de mensajes
vocales integrados en un solo circuito integrado. El dispositivo de clase CMOS integra
todos los elementos necesarios para la digitalización y posterior reproducción de las
señales, para lo cual incorpora el oscilador, preamplificador para micrófono, control
automático de ganancia (AGC), filtro “antialiasing“, filtro de reconstrucción,
amplificador de audio y una memoria no volátil con una estructura multi-nivel que
permite la grabación de varios mensajes.
5.1 Descripción general
Existen varias versiones que proporcionan diferentes niveles de calidad y duración
dependiendo de la frecuencia de muestreo que emplean. Las diferentes versiones
trabajan con frecuencias de muestreo de 8, 6.4, 5.3 y 4 Khz. con una duración
respectivamente de 32, 40, 48 y 64 segundos, cubriendo así un amplio abanico de
necesidades en cuanto a calidad y duración. Una de las ventajas de la familia ISD 25XX
reside en la utilización de una memoria EEPROM capaz de conservar el mensaje
durante 100 años sin necesidad de alimentación y permitiendo que pueda ser regrabado
del orden de 100.000 veces.
Cabe reseñar que el dispositivo puede funcionar de dos formas, en Modo de Dirección y
en Modo de Función. En el primer modo la dirección proporcionada por las entradas de
dirección marcará el inicio de la grabación o reproducción de los mensajes, mientras
que en el segundo modo se han integrado 7 funciones (M0 - M6) que permiten la
utilización del dispositivo de una forma sencilla.
5.1.1 La memoria EEPROM de ISD25XX
Merece la pena entretenerse en este punto por lo peculiar de esta memoria. El chip de
ISD almacena en esta memoria el dato en formato analógico directamente, por lo que se
ahorra en el proceso dos conversiones, la A/D al grabar y la D/A al reproducir. El
método de grabación es denominado por ISD como “break through” (abrir paso) y
152
permite almacenar cada muestra en una celda en formato analógico. La grabación de
cada celda es un proceso en bucle cerrado donde se compara el valor de la muestra con
el contenido en la celda de memoria y se van inyectando electrones en la misma hasta
que se iguala la tensión de la muestra. El dato almacenado tiene una cuantificación
equivalente de 256 niveles (ocho bits). El proceso se basa en la tecnología EEPROM
floating gate.
Figura 1 – Diagrama de bloques (Tomado del catálogo de ISD).
5.2 Descripción de las señales y del patillaje
5.2.1 Alimentación (VCCA, VCCD, VSSA, VSSD)
La tensión de alimentación es de 5 voltios. Para reducir al mínimo el ruido, las partes
digital y analógica de los circuitos disponen de entradas de alimentación independientes.
5.2.2 Entrada de corte de corriente (PD - power down)
Cuando la señal PD se pone a nivel alto el circuito entra en el modo de muy bajo
consumo. Cuando se produce la condición de desbordamiento de la memoria, PD se
utiliza para llevar el puntero al inicio de la zona de grabación o reproducción. Además
tiene una funcionalidad adicional cuando se trabaja en el Modo de Función M6 (Push-
Button) que se describirá en la siguiente sección.
5.2.3 Entrada para habilitar circuito (CE – chip enable)
La entrada CE debe ponerse a nivel bajo para habilitar la operación del circuito. Las
direcciones de entrada y la señal de grabación/reproducción (P/R) son capturadas
153
durante el flanco de bajada de la señal. Además tiene una funcionalidad adicional
cuando se trabaja en el Modo de Función M6 (Push-Button) que se describirá en la
siguiente sección.
5.2.4 Entrada de Reproducción/Grabación (P/R – playback/record)
La entrada P/R permite seleccionar entre el modo de reproducción (nivel alto) y el de
grabación (nivel bajo). Durante un ciclo de grabación la dirección de comienzo se
proporciona a través de las correspondientes entradas y se detiene cuando se pone a
nivel alto cualquiera de las señales PD o CE, o cuando se produce un desbordamiento.
Cada vez que se termina un ciclo de grabación mediante las señales PD o CE, se pone
una marca de fin de mensaje (EOM) en la dirección de memoria donde se finalizó.
Durante un ciclo de reproducción se proporciona la dirección de comienzo y la
grabación se reproduce de manera continua hasta que se encuentra una marca de fin de
mensaje (EOM). El dispositivo puede seguir reproduciendo a continuación de una
marca de fin de mensaje (EOM) cuando se encuentra en el Modo de Función.
5.2.5 Señal de fin de mensaje y de funcionamiento (EOM)
La salida EOM genera un pulso a nivel bajo de duración TEOM al final de cada mensaje.
Cuando el dispositivo se configura en el Modo de Función M6, esta salida se mantiene a
nivel alto mientras el dispositivo está grabando o reproduciendo.
5.2.6 Señal de desbordamiento (OVF)
Se genera un pulso a nivel bajo cuando se agota el espacio de memoria. La salida OVF
sigue a la entrada CE hasta que se reinicia el puntero de memoria con la señal PD. Esta
salida puede utilizarse para la conexión de varios dispositivos en cascada.
5.2.7 Entrada de micrófono (MIC)
La entrada va conectada a un preamplificador integrado junto con un control automático
de ganancia (AGC) que regula la ganancia de éste desde –15 hasta 24 dB. La conexión
de un micrófono externo deberá hacerse a través de un condensador serie de desacoplo
que, junto con la resistencia interna de 10 K de la entrada, determina la frecuencia de
corte inferior.
154
5.2.8 Entrada de referencia de micrófono (MIC REF)
Es la entrada no inversora del preamplificador para la conexión del micrófono y
proporciona una cancelación de ruido gracias a su elevado grado de rechazo al modo
común.
5.2.9 Entrada del Control Automático de Ganancia (AGC)
El control automático de ganancia permite cubrir un amplio margen de niveles de
entrada procedentes del micrófono, que van desde un pequeño susurro hasta sonidos
muy altos. El tiempo de activación viene determinado por la constante de tiempo que
conforma un condensador externo conectado entre AGC y VSSA y la resistencia interna
de 5 K. El tiempo de desactivación viene determinado por la constante de tiempo
asociada al condensador externo anterior junto con una resistencia externa conectada en
paralelo con él. Los valores de 4.7 F y 470 K para el condensador y la resistencia
respectivamente dan en la mayoría de los casos un resultado satisfactorio.
5.2.10 Salida analógica (ANA OUT)
La salida del conjunto preamplificador – control automático de ganancia se conduce a
través de este pin.
5.2.11 Entrada analógica (ANA IN)
A través de esta entrada se conduce la señal al chip para su grabación. La señal de
entrada debe desacoplarse con un condensador externo, incluso si procede de la salida
ANA OUT (caso de un micrófono), debiendo tenerse en cuenta que este condensador
junto con la resistencia interna de 3K de la entrada conforma un filtro paso bajo que
pudiera recortar la señal.
5.2.12 Entrada de reloj externo (XCLK)
La tolerancia del reloj interno es de 5%. En caso de que se requiera una mayor
precisión, puede controlarse con una señal de reloj externa cuyo valor dependerá del
dispositivo de la familia que estemos utilizando. De este modo deberán usarse los
siguientes valores 1024 Khz., 819.2 Khz.,682.7 Khz. y 512 Khz. para las frecuencias de
muestreo de 8 Khz., 6.4 Khz., 5.3 Khz. y 4 Khz. que usan los dispositivos ISD 2532,
ISD 2540, ISD 2548 e ISD 2564 respectivamente. En caso de no usarse, esta entrada
deberá conectarse a masa.
155
5.2.13 Salidas de altavoz (SP+ y SP-)
Todos los dispositivos de esta familia disponen de una salida diferencial para altavoces
capaz de proporcionar 50 mW sobre un altavoz con impedancia de 16 si la señal
procede de AUX IN o 12.2 mW si procede de la memoria.
Nota: Cuando se usan varios dispositivos no se deben conectar en paralelo las salidas de
altavoz, ya que podría dañar los dispositivos. Nunca se deben poner a masa las salidas
de altavoz.
5.2.14 Entrada auxiliar (AUX IN)
La entrada auxiliar permite multiplexar una señal al amplificador de salida y el altavoz
cuando las señales CE y P/R están a nivel alto o cuando se produce un desbordamiento
durante la reproducción. Esto permite conectar la señal de reproducción al siguiente
dispositivo de una cascada.
5.2.15 Entradas de dirección y modo (AX/MX)
Las entradas de dirección y modo tienen dos funciones dependiendo de cómo se
conecten los dos bits más significativos (A7 y A8).
Si cualquiera de estos dos bits o ambos se conectan a masa, las entradas A0..A8 se
interpretan como bits de dirección. Cuando ambos bits (A7 y A8) se conectan a nivel
alto, las entradas (M0..M6) se interpretan como bits indicativos de cada modo de
función.
De los siete modos posibles sólo seis están operativos. Es posible combinar varios
modos a la vez.
5.3 Modos de función
Hay dos consideraciones importantes que hacer sobre el uso de los modos de función.
En primer lugar, todas las acciones comienzan en la dirección cero y las posteriores
pueden hacerlo en cualquier posición, dependiendo del modo en cuestión. Además el
puntero de direcciones se pone a cero cada vez que se cambia del modo reproducción al
modo grabación o viceversa y cuando se ejecuta un ciclo de corte de corriente (Power-
Down).
156
En segundo lugar, los Modos de Función se ejecutan cuando la señal CE pasa a nivel
bajo y los dos bits de dirección más significativos (A7-A8) están a nivel alto,
manteniéndose en el modo en cuestión hasta que se produce una nueva transición de
nivel alto a bajo en la señal CE.
5.4 Descripción de los modos de función
5.4.1 M0 – Búsqueda de mensaje
Esta función permite al usuario pasar de mensaje en mensaje sin conocer la dirección de
inicio de cada uno. Cada transición a nivel bajo de la señal CE hace que el puntero salte
al inicio del siguiente mensaje. Este modo inhabilita el amplificador de salida y
reproduce el mensaje a una velocidad 800 veces superior a la normal. Funciona como si
de un avance rápido se tratase.
5.4.2 M1 – Borrado de los marcadores de fin de mensaje
Permite reproducir los mensajes grabados de modo continuo como si de un solo
mensaje se tratara.
5.4.3 M2 – Sin uso
M2 debe ponerse a nivel bajo en el Modo de Función.
5.4.4 M3 – Repetición de mensaje
La función M3 permite la repetición continua del mensaje situado en la primera
posición de la memoria.
5.4.5 M4 – Direccionamiento consecutivo
Durante el funcionamiento normal, el puntero de direcciones se pone a cero cuando se
llega al final del mensaje (EOM). Este modo inhibe la puesta a cero del puntero y los
mensajes son reproducidos consecutivamente.
5.4.6 M5 – Activación por nivel de la entrada CE
Por defecto la activación del chip se realiza con el flanco de bajada de la señal CE
durante la reproducción y por el nivel detectado de la señal CE durante la grabación. El
modo de función M5 provoca que la activación mediante la señal CE se realice siempre
por la detección del nivel.
157
5.4.7 M6 – Pulsar Botón
El modo Pulsar Botón se usa, ante todo, en aplicaciones de muy bajo coste y ha sido
diseñado para reducir al máximo los circuitos y componentes externos. En este modo el
dispositivo siempre entra en desconexión (power-down) al final de cada reproducción.
En este modo varios de los terminales de entrada-salida tienen otra función diferente
que se describe a continuación.
5.4.7.1Entrada CE (START/PAUSE)
En el modo Pulsar Botón, CE actúa como una señal START/PAUSE cuando se lleva a
nivel bajo. Un pulso a nivel bajo iniciará la grabación o reproducción y el siguiente
pulso aplicado generará una pausa. El contador de direcciones no es puesto a cero y otro
pulso más provocará que la operación continúe en el punto donde se quedó.
5.4.7.2Entrada PD (STOP/RESET)
En el modo Pulsar Botón, cuando PD se lleva a nivel alto se termina el ciclo en
progreso y se pone a cero el contador de direcciones.
5.4.7.3Salida EOM (RUN)
En este modo, EOM se convierte en una señal activa a nivel alto mientras el dispositivo
se encuentra funcionando, lo que permite alimentar un LED o activar cualquier otro
dispositivo externo.
5.5 El modo Pulsar Botón (Grabación y reproducción)
El modo Pulsar Botón es ideal para multitud de aplicaciones. Para el control del
dispositivo sólo se requieren dos pulsadores y un conmutador para atacar las tres líneas
de control necesarias. Con el conmutador se selecciona el modo de grabación o el de
reproducción y con los pulsadores se activan las líneas CE (START/PAUSE) y PD
(STOP/RESET). Los pulsos generados para el control de las líneas CE y PD han de
tener, al menos, un ancho de 300 ns.
5.5.1 Proceso de grabación en el modo Pulsar Botón
1. La entrada PD deberá ponerse a nivel bajo. (normalmente mediante
una resistencia de pull-down)
2. La entrada P/R se pone a nivel bajo.
158
3. Se genera un pulso a nivel bajo en la entrada CE y la grabación
comienza. La salida EOM se activa a nivel alto indicando la
operación en progreso.
4. Generando otro pulso a nivel bajo, la grabación se detiene y EOM
retorna a nivel bajo. El contador de direcciones mantiene su valor y
se almacena un marcador de fin de mensaje en la memoria. La
entrada P/R podría llevarse a nivel alto para iniciar la reproducción.
5. Un nuevo pulso en CE ocasiona que la grabación se inicie de nuevo
en la siguiente dirección y la salida EOM se activa a nivel alto.
5.5.2 Proceso de reproducción en el modo Pulsar Botón
1. La entrada PD deberá ponerse a nivel bajo. (normalmente mediante
una resistencia de pull-down)
2. La entrada P/R se pone a nivel alto.
3. Se genera un pulso a nivel bajo en la entrada CE y la reproducción
comienza. La salida EOM se activa a nivel alto indicando la
operación en progreso.
4. Cuando se genera un pulso a nivel bajo en la entrada CE o bien
cuando se encuentra una marca EOM, la reproducción se detiene y
EOM retorna a nivel bajo. La entrada P/R podría llevarse a nivel
bajo para iniciar una grabación.
5. Un nuevo pulso en CE ocasiona que la reproducción se reanude
donde se dejó y la salida EOM se activa a nivel alto.
6. La reproducción continúa según los pasos 4 y 5 hasta que se genera
un pulso a nivel alto en la entrada PD o se produce un
desbordamiento.
159
5.5.3 Esquema de conexión.
Figura 2 – Esquema de conexión en modo Pulsar Botón (Tomado del catálogo de ISD).
160
Figura 3 – Esquema de conexión al microcontrolador MC68331 (Adaptado del catálogo de ISD).
5.6 Conexión al microcontrolador MC68331
Se desea utilizar el dispositivo para grabar mensajes y luego reproducirlos en el orden
adecuado en función de la opción seleccionada en un menú interactivo. El proceso de
grabación se va a realizar de forma secuencial, por lo que lo más sencillo es utilizar el
modo Pulsar Botón (M6). Se ha determinado que la mejor forma de hacerlo es
instalando un pulsador en el propio circuito que permita iniciar y finalizar la grabación
de cada mensaje de forma manual por el usuario. Durante la reproducción se desea
seleccionar previamente el mensaje a reproducir. Para ello, se hace un reset del puntero
de la memoria para situarlo al inicio de la misma. Seguidamente se irán reproduciendo
los mensajes previos al deseado en el modo M0, cuidando de seleccionar también el
modo M4 para que el puntero no vuelva al inicio del mensaje una vez reproducido. La
señal EOM va a ser muy útil para conocer cuándo empieza y finaliza la reproducción de
un mensaje.
******************************************************************************
* REGISTROS SIM *
******************************************************************************
SIMCR EQU $FFFA00 * Controla la configuración del sistema ($00CF).
SYNCR EQU $FFFA04 * Fija frecuencia y modo de operación del reloj ($3F08).
RSR EQU $FFFA06 * Guarda la causa de un reset (Ej.-$80, reset hardware).
PORTE EQU $FFFA11 * Registro de lectura y escritura en el puerto E.
PORTE1 EQU $FFFA13 * Tiene exactamente la misma función que el anterior.
DDRE EQU $FFFA15 * Determina el sentido del puerto E pin a pin.
PEPAR EQU $FFFA17 * Asignación del puerto E (Puerto o control de BUS).
PORTF EQU $FFFA19 * Registro de lectura y escritura en el puerto F.
PORTF1 EQU $FFFA1B * Tiene exactamente la misma función que el anterior.
DDRF EQU $FFFA1D * Determina el sentido del puerto F pin a pin.
PFPAR EQU $FFFA1F * Asignación del puerto F (Puerto F o control de BUS).
PICR EQU $FFFA22 * Configuración de interrupciones periódicas ($000F).
PITR EQU $FFFA24 * Contiene la cuenta del timer periódico ($0000).
SYPCR EQU $FFFA21 * Controla las funciones de monitorización del sistema
* como es el caso del Watchdog. ($40 anula watchdog).
161
SWSR EQU $FFFA27 * Se debe escribir periódicamente con Watchdog activado.
CSPAR0 EQU $FFFA44 * Sirve junto con CSPAR1 para configurar la función de
CSPAR1 EQU $FFFA46 * los pins de Chip Select (CS, Port C, etc.).
PORTC EQU $FFFA41 * Registro de escritura en el puerto C.
******************************************************************************
* REGISTROS GPT-PWM *
******************************************************************************
GPTMCR EQU $FFF900 * Configuración del GPT.
ICR EQU $FFF904 * Configuración de interrupciones del GPT.
DDRGP EQU $FFF906 * Determina el sentido del puerto GP.
PORTGP EQU $FFF907 * Registro de lectura y escritura del puerto GP.
OC1M EQU $FFF908 * Máscara para asignar los pin de captura de OC.
OC1D EQU $FFF909 * Registro de datos a comparar con el puerto OC.
TCNT EQU $FFF90A * Registro del GPT asociado a las capturas IC, OC y PAI.
PACTL EQU $FFF90C * Configuración del acumulador de pulsos PAI.
PACNT EQU $FFF90D * Es el contador de registro de eventos del PAI.
TIC1 EQU $FFF90E * Capturan el TCNT cuando se registra un evento en IC1.
TIC2 EQU $FFF910 * Capturan el TCNT cuando se registra un evento en IC2.
TIC3 EQU $FFF912 * Capturan el TCNT cuando se registra un evento en IC3.
TOC1 EQU $FFF914 * Cuando coincide con TCNT causa eventos en los pin OC.
TOC2 EQU $FFF916 * Si el valor coincide con TCNT causa un evento en OC2.
TOC3 EQU $FFF918 * Si el valor coincide con TCNT causa un evento en OC3.
TOC4 EQU $FFF91A * Si el valor coincide con TCNT causa un evento en OC4.
TI4O5 EQU $FFF91C * Pin compartido (Puede realizar una función TIC o TOC).
TCTL1 EQU $FFF91E * Configura el modo de comparación y nivel de salida.
TCTL2 EQU $FFF91F * Configura que flanco provoca la captura en los IC.
TMSK1 EQU $FFF920 * Habilita las interrupciones de IC y OC.
TMSK2 EQU $FFF921 * Habilita las interrupciones del PAI y del TIMER.
TFLG1 EQU $FFF922 * Registro de flags de interrupciones de IC y OC.
TFLG2 EQU $FFF923 * Registro de flags de interrupciones del PAI y TIMER
CFORC EQU $FFF924 * Fuerza una salida en los pin OC y PWM.
PWMC EQU $FFF925 * Configuración del PWM.
PWMA EQU $FFF926 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMB EQU $FFF927 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMCNT EQU $FFF928 * Registro del contador del PWM.
PWMBUFA EQU $FFF92A * Buffer para prevenir glitches cuando modificamos PWMA.
PWMBUFB EQU $FFF92B * Buffer para prevenir glitches cuando modificamos PWMB.
PRESCL EQU $FFF92C * Guarda el valor del multiplicador del GPT.
162
******************************************************************************
* TIPOS DE RETARDO *
******************************************************************************
CORTO EQU $03FF * Del orden de 100us.
MEDIO EQU $03FF * Del orden de 1ms.
LARGO EQU $BFFF * Del orden de 5ms.
******************************************************************************
* CONSTANTES DE INTERS *�******************************************************************************
******************************************************************************
* PUERTO Y BITS DE CONTROL DEL DISPOSITIVO *
******************************************************************************
BYTE_CONTROL EQU PORTE * Puerto de control.
GRAB_M6 EQU $0C * Activa la grabación en modo M6.
REPR_M6 EQU $2C * Activa la reproducción en modo M6.
REPR_M04 EQU $2B * Activa la reproducción en los modos M0 y M4
BIT_M0 EQU 0 * Con valor 1 selecciona el modo M0.
BIT_M4 EQU 1 * Con valor 1 selecciona el modo M4.
BIT_M6 EQU 2 * Con valor 1 selecciona el modo M6.
BIT_CE EQU 3 * Con valor 0 activa el chip.
BIT_PD EQU 4 * Con valor 1 provoca un POWER-DOWN.
BIT_PR EQU 5 * Con valor 1 reproduce y con 0 graba.
BIT_EOM EQU 6 * Bit de funcionamiento. (RUN)
BIT_PUSH EQU 7 * Bit de lectura de la tecla START/STOP.
******************************************************************************
* VECTORES DEL RESET *
******************************************************************************
ORG $0
PILA_RESET DC.L FIN_PILA
PC_RESET DC.L PRINCIPAL
******************************************************************************
* VECTORES DE INTERRUPCIÓN *
******************************************************************************
ORG $80
VECTOR0 DC.L MENSAJE_N
163
******************************************************************************
* PUNTERO DE PILA *
******************************************************************************
ORG $4000
PILA DS.L 200
FIN_PILA:
******************************************************************************
* SUBRUTINAS *
******************************************************************************
ORG $1000
******************************************************************************
* CONFIGURACION DEL HARDWARE DEL MICRO *
******************************************************************************
*************************** INHAB_WDOG ****************************
* Inhabilita el Watchdog que es una función de monitoriración del *
* sistema para detectar la entrada en un bucle infinito. *
*******************************************************************
INHAB_WDOG:
MOVE.B #$40,SYPCR * Inhabilitamos WatchDog
RTS
*----------------------------------------------------------------------------*
************************** PORT_E_CFG *****************************
* Con esta rutina se configura el puerto E que es el que se usa *
* para controlar el display y el teclado. *
*******************************************************************
PORT_E_CFG
MOVE.B #$3F,DDRE * PE0..PE5 salidas y PE6..PE7 entradas.
MOVE.B #$00,PEPAR * Configura el registro de control del puerto E.
MOVE.B #8,PORTE * Pone la señal CE a nivel alto, el resto a cero.
RTS
*----------------------------------------------------------------------------*
******************************************************************************
* RUTINAS DE CONTROL *
164
******************************************************************************
***************************** DELAY *******************************
* Produce un retardo cuya duración viene determinada por el valor *
* almacenado en el registro D1. *
*******************************************************************
DELAY
SUB.L #1,D1
BNE DELAY
RTS
*----------------------------------------------------------------------------*
************************** PULSAR_BOTON ***************************
* Espera hasta que se accione el pulsador instalado. *
*******************************************************************
PULSAR_BOTON
BTST.B #BIT_PUSH,BYTE_CONTROL
BNE PULSAR_BOTON
RTS
*----------------------------------------------------------------------------*
**************************** PULSO_CE *****************************
* Genera un pulso a nivel bajo en la línea CE. *
*******************************************************************
PULSO_CE
MOVE.L D1,-(A7)
MOVE.L #CORTO,D1
BCLR.B #BIT_CE,BYTE_CONTROL
BSR DELAY
BSET.B #BIT_CE,BYTE_CONTROL
MOVE.L (A7)+,D1
RTS
*----------------------------------------------------------------------------*
****************************** RESET ******************************
* Genera un reset en el puntero de direcciones mediante un pulso *
* a nivel alto en la línea PD. *
*******************************************************************
RESET
165
MOVE.L D1,-(A7)
MOVE.L #LARGO,D1
BSET.B #BIT_PD,BYTE_CONTROL
BSR DELAY
BCLR.B #BIT_PD,BYTE_CONTROL
MOVE.L (A7)+,D1
RTS
*----------------------------------------------------------------------------*
*************************** INI_DSP_VOZ ***************************
* Inicializa el dispositivo de voz para reproducción, con los mo- *
* dos M0 y M4 habilitados. Se coloca también el puntero de direc- *
* ciones al inicio mediante un reset. *
*******************************************************************
INI_DSP_VOZ
BSR PORT_E_CFG
BSR RESET
RTS
*----------------------------------------------------------------------------*
************************* GRABAR_MENSAJE **************************
* Se configura el chip en modo grabación y se espera la orden de *
* arranque para iniciarla. La grabación se termina cuando se re- *
* cibe la orden de Pausa o cuando se desborda la memoria del dis- *
* positivo. *
*******************************************************************
GRABAR_MENSAJE
MOVE.B #GRAB_M6,BYTE_CONTROL * Configura puerto modo grabación
BSR PULSAR_BOTON * Espera la orden de arranque
BSR PULSO_CE * Inicia la grabación
PARADA
BTST.B #BIT_EOM,BYTE_CONTROL * Se comprueba desbordamiento. Quizá no
* funcione y se requiera la señal OVF.
BEQ FIN * Si hay desbordamiento termina
BTST.B #BIT_PUSH,BYTE_CONTROL
BNE PARADA * Espera la orden de parada
BSR PULSO_CE * Finaliza la grabación
FIN
166
RTS
*----------------------------------------------------------------------------*
**************************** BUSCAR_N *****************************
* Se configura el chip en modo M0 y se van reproduciendo los men- *
* sajes previos al deseado cuyo número de orden se encuentra en *
* en el registro D0. (Sólo tiene sentido a partir del segundo) *
*******************************************************************
BUSCAR_N
MOVE.B #REPR_M04,BYTE_CONTROL * Se configuran los modos M0 y M4
SUBI.B #1,D0 * Se ajusta la salida del bucle DBF
BSR RESET * Se ejecuta un reset del chip
SIGUIENTE
BCLR.B #BIT_CE,BYTE_CONTROL * Se inicia reproducción rápida
BSET.B #BIT_CE,BYTE_CONTROL
EOM_ESPERAR
BTST.B #BIT_EOM,BYTE_CONTROL
BNE EOM_ESPERAR * Se espera a que finalice el mensaje
SUBI.B #1,D0
BNE SIGUIENTE
RTS
*----------------------------------------------------------------------------*
************************** REPRODUCIR *****************************
* Se configura el chip en modo M6 y se reproduce el mensaje que *
* señala el puntero de direcciones. *
*******************************************************************
REPRODUCIR
MOVE.B #REPR_M6,BYTE_CONTROL * Activa el modo reproducción M6
BSR PULSO_CE * Inicia la reproducción del mensaje
RTS
*----------------------------------------------------------------------------*
*************************** MENSAJE_N *****************************
* Reproduce el mensaje cuyo número de orden N está contenido en *
* el registro D0. *
*******************************************************************
MENSAJE_N
BSR BUSCAR_N * Busca el mensaje N.
167
BCLR.B #BIT_M0,BYTE_CONTROL
BCLR.B #BIT_CE,BYTE_CONTROL * Reproduce el mensaje.
BSET.B #BIT_CE,BYTE_CONTROL
RTE
*----------------------------------------------------------------------------*
******************************************************************************
* PRINCIPAL *
******************************************************************************
ORG $400
PRINCIPAL
BSR INHAB_WDOG
MOVE.L #5,D0
TRAP #0 * Reproduce el mensaje número 5
FINAL
BRA FINAL
END
Capítulo 6
Transceptor digital de datos por radio
6.1 Introducción
Para cualquier aplicación de telecontrol es necesaria la existencia de un canal sobre el
que transmitir las órdenes. Estos canales pueden ser alámbricos o inalámbricos. Los
primeros suelen ser más fiables pero también mucho más costosos de instalar. En un
entorno como el de una oficina o un hogar donde se quieren distribuir un conjunto de
sensores y actuadores es a menudo inviable la realización de un cableado específico.
Una solución para estos casos es la utilización de canales de comunicación
inalámbricos. Las dos opciones disponibles son la utilización de transceptores por luz
infrarroja o bien por radiofrecuencia. Ambas son bien conocidas por todos. La primera
es utilizada en la práctica totalidad de los mandos a distancia con que vienen equipados
la mayoría de los aparatos domésticos y comerciales, y la segunda es más frecuente
verla en aparatos de aeromodelismo, juguetes, mandos a distancia de garajes, etc.
168
La principales ventajas de los transceptores de radiofrecuencia frente a los de infrarrojos
son el mayor alcance y el que no sea necesaria la existencia de visión directa entre el
transmisor y el receptor.
Sin descartar que puedan existir o aparecer mejores opciones en el mercado, en el
presente documento se describe el funcionamiento de un par transmisor – receptor
digital del fabricante AURºEL. Se trata de sendos circuitos híbridos con unas
dimensiones de 38 x 12 mm que trabajan con una frecuencia portadora de 433,92 Mhz y
utilizan una modulación ON-OFF en banda base típica de 2 Khz.
6.1.1 Transmisor
El transmisor, modelo AURºEL TX-SAW/433 s-Z, dispone de siete terminales
numerados según se indica en la figura 1. Para la generación de la señal cuenta con un
oscilador SAW.
6.1.1.1Oscilador SAW
Un oscilador SAW (Surface Acoustic Wave) es aquél que utiliza un resonador basado en
ondas acústicas de superficie u ondas de Rayleigh. Este fenómeno que se produce
primordialmente en materiales con características piezoeléctricas, se compone de dos
ondas, una de compresión y otra de cizallamiento, que confinan en la superficie del
cristal la energía de las ondas acústicas de superficie. Esta onda de compresión y
cizallamiento produce en el substrato piezo-eléctrico una onda electrostática asociada a
las anteriores.
La velocidad de propagación de estas ondas de superficie es cuatro órdenes de magnitud
inferior a la velocidad de propagación de las ondas electromagnéticas. Esto permite que
las magnitudes de diseño derivadas sean manejables a nivel de integración. Se trata de
una solución de más bajo coste que los osciladores de cuarzo y de peores prestaciones,
pero suficiente para muchas aplicaciones.
Figura 1 – Transmisor digital.
La función de cada terminal se describe en la tabla siguiente:
169
Pin 1-4-13Masa Conexiones a masa (GND). Deben conectarse externamente a un único
plano de tierra.
Pin 2Entrada
ModulaciónEntrada de datos TTL con una impedancia de entrada de 5 K. Sólo se
utiliza si se utiliza alimentación a 12 V.
Pin 3Entrada
ModulaciónEntrada de datos TTL con una impedancia de entrada de 5 K. Sólo se
utiliza si se utiliza alimentación a 5 V.Pin 11 Salida RF Salida RF con una impedancia de 50 .Pin 15 +V Alimentación a + 5 V. También puede ser 12 V.
Tabla 1 – Terminales de conexión del transmisor.
El funcionamiento del transmisor es extremadamente sencillo. Con el fin de obtener el
rendimiento descrito en las especificaciones técnicas y una buena inmunidad al ruido, es
recomendable que se monte sobre una placa de circuito impreso auxiliar cuyo principal
cometido será generar un buen plano de tierra.
Lo ideal sería utilizar una placa de doble cara con interconexiones cada 15 mm. entre las
dos caras a fin de garantizar la equipotencialidad. La masa debería rodear tanto a las
soldaduras como a los conductores serigrafiados.
La línea de 50 para la señal de radiofrecuencia deberá ser lo más corta posible. La
pista deberá tener un ancho de 1,8 mm. para circuitos impresos de 1 mm. de espesor y
2,9 mm. para circuitos impresos de 1,6 mm. que es el caso más habitual. La distancia de
separación ente la pista y la masa circundante ha de ser de 2 mm. y el plano de masa
debe estar presente en la cara opuesta del circuito.
La antena consistirá en un pequeño mástil de cobre o bronce con una longitud de 16,5
mm. y 1 mm. de diámetro. No debe existir ningún otro componente o pieza metálica en
un radio de 5 cm. y debe disponer de un buen plano de masa.
La alimentación es recomendable desacoplarla con un condensador cerámico de 100 nF
colocado lo más próximo posible al terminal.
170
Figura 2 – Circuito impreso auxiliar.
Se deberá tener en cuenta que para respetar las recomendaciones anteriormente
expuestas es necesaria la fabricación de un PCB a doble cara. Lo más normal es que
dicha solución esté fuera de nuestro alcance por lo que se deberá tener en cuenta que
cuanto más nos alejemos de las recomendaciones peor será el funcionamiento y mayor
el ruido presente.
Una vez conectada la alimentación y la antena sólo queda proporcionar la señal TTL
moduladora a través de cualquier puerto del microcontrolador. Para las pruebas
preliminares será necesario tener el receptor operativo y se podrá aplicar una onda
cuadrada de 2 Khz y 5 voltios de amplitud con un generador de funciones.
6.1.2 Receptor
El receptor modelo AURºREL RX-BC-NBK dispone de ocho terminales numerados
según la figura 3.
Figura 3 – Receptor digital.
La tabla siguiente describe la función de cada terminal:
Pin 2-7-11 MasaConexiones a masa (GND). Deben conectarse externamente a un único
plano de tierra.Pin 3 Antena Conexión de una antena con una impedancia de 50 .
Pin 1-15 +V Alimentación a + 5 V.
Pin 13Terminal de
chequeoSalida analógica de la señal demodulada que permite la conexión de un
osciloscopio para su visualización.Pin 14 Salida digital Salida TTL de datos recibidos. Admite cargas de hasta 1 K.
Tabla 2 – Terminales de conexión del receptor.
171
Para el montaje del receptor es necesario utilizar una placa de circuito impreso auxiliar.
Se deben seguir exactamente las mismas recomendaciones dadas para el montaje del
transmisor.
Figura 4 – Circuito impreso auxiliar.
Probablemente no será factible la fabricación de una placa conforme con las
especificaciones dadas y por tanto deberemos adaptar los medios disponibles de la
forma más adecuada para obtener el mejor rendimiento posible.
Cabe incidir en que el receptor tiene la salida en colector abierto y por tanto requiere
una resistencia de pull-up de 10 K.
6.2 Conexión al microcontrolador
Existen diferentes posibilidades de conexión al MC68331.
El transmisor necesita enviar los datos con una tasa constante de unos 2400 baudios, por
lo que será necesario generar una interrupción periódica que marque el ritmo de
transmisión. La conexión física puede realizarse a través de cualquier terminal de un
puerto de salida.
El proceso de recepción es un tanto más complejo. El receptor puede conectarse a través
de cualquier puerto de entrada. Como la transmisión entre dos módulos es asíncrona, es
necesario muestrear la señal procedente del receptor y realizar la sincronización de bits
para al final obtener una secuencia digital. La programación de un receptor puede llegar
a ser laboriosa y compleja.
172
Afortunadamente, el MC68331 tiene este problema resuelto si se utiliza el módulo de
comunicación serie QSM. La interfaz de comunicación serie SCI sirve para la
transmisión y recepción asíncrona de datos serie, con lo que no será necesario resolver
los problemas anteriormente comentados ya que esta interfaz los ofrece ya resueltos por
hardware, descargando de trabajo a la CPU32.
La conexión, por tanto, es extremadamente simple. En el caso del transmisor, la salida
de datos serie del microcontrolador TXD se conecta a la entrada de datos del transmisor
radio. En el caso del receptor, la salida de datos de éste se conecta a la entrada de datos
serie RXD del microcontrolador.
6.2.1 Programa básico de atención de comunicaciones.
Con este programa se pretende resolver el caso general de comunicación en un entorno
domótico. Son básicamente dos las funciones de comunicación que se necesitan
resolver. Por un lado la difusión desde el microcontrolador de órdenes a diferentes
actuadores periféricos y por el otro la recepción de medidas o informaciones desde
sensores remotos.
El protocolo de comunicación que aquí se propone es muy sencillo. Se transmiten
palabras de siete bits de los cuales los cuatro bits menos significativos son el
identificador de dispositivo y los tres más significativos el código de instrucción. Luego
se configura el puerto serie SCI para que le añada un bit de paridad y los pertinentes
bits de arranque y parada.
De esta forma, con el envío de una única trama de datos es suficiente.
La trama de datos que se transmite vía radio tiene la estructura siguiente:
Bit 10 Bit 9 7 4 3 0 Bit 1Parada Paridad Código de instrucción Identificador Arranque
Tabla 3 – Estructura de la trama de datos.
La aplicación de ejemplo realiza lo siguiente:
1. Habilita las interrupciones del receptor y se queda esperando a recibir
un dato.
2. Una vez recibido, comprueba si es válido o no.
3. Si es valido, lo guarda en un buffer de memoria y envía por el
transmisor una trama de confirmación de dato recibido.
173
4. Si no es valido, envía por el transmisor una trama de confirmación de
dato erróneo.
5. Vuelve al paso 1.
Obsérvese que no se hace comprobación del desbordamiento del buffer , ya que se
entiende que para una prueba de recepción de órdenes es suficiente con un tamaño de
500 tramas almacenadas en memoria.
******************************************************************************
* REGISTROS SIM *
******************************************************************************
SIMCR EQU $FFFA00 * Controla la configuración del sistema ($00CF).
SYNCR EQU $FFFA04 * Fija frecuencia y modo de operación del reloj ($3F08).
RSR EQU $FFFA06 * Guarda la causa de un reset (Ej.-$80, reset hardware).
PORTE EQU $FFFA11 * Registro de lectura y escritura en el puerto E.
PORTE1 EQU $FFFA13 * Tiene exactamente la misma función que el anterior.
DDRE EQU $FFFA15 * Determina el sentido del puerto E pin a pin.
PEPAR EQU $FFFA17 * Asignación del puerto E (Puerto o control de BUS).
PORTF EQU $FFFA19 * Registro de lectura y escritura en el puerto F.
PORTF1 EQU $FFFA1B * Tiene exactamente la misma función que el anterior.
DDRF EQU $FFFA1D * Determina el sentido del puerto F pin a pin.
PFPAR EQU $FFFA1F * Asignación del puerto F (Puerto F o control de BUS).
PICR EQU $FFFA22 * Configuración de interrupciones periódicas ($000F).
PITR EQU $FFFA24 * Contiene la cuenta del timer periódico ($0000).
SYPCR EQU $FFFA21 * Controla las funciones de monitorización del sistema
* como es el caso del Watchdog. ($40 anula watchdog).
SWSR EQU $FFFA27 * Se debe escribir periódicamente con Watchdog activado.
CSPAR0 EQU $FFFA44 * Sirve junto con CSPAR1 para configurar la función de
CSPAR1 EQU $FFFA46 * los pins de Chip Select (CS, Port C, etc.).
PORTC EQU $FFFA41 * Registro de escritura en el puerto C.
******************************************************************************
* REGISTROS GPT-PWM *
******************************************************************************
GPTMCR EQU $FFF900 * Configuración del GPT.
ICR EQU $FFF904 * Configuración de interrupciones del GPT.
DDRGP EQU $FFF906 * Determina el sentido del puerto GP.
174
PORTGP EQU $FFF907 * Registro de lectura y escritura del puerto GP.
OC1M EQU $FFF908 * Máscara para asignar los pin de captura de OC.
OC1D EQU $FFF909 * Registro de datos a comparar con el puerto OC.
TCNT EQU $FFF90A * Registro del GPT asociado a las capturas IC, OC y PAI.
PACTL EQU $FFF90C * Configuración del acumulador de pulsos PAI.
PACNT EQU $FFF90D * Es el contador de registro de eventos del PAI.
TIC1 EQU $FFF90E * Capturan el TCNT cuando se registra un evento en IC1.
TIC2 EQU $FFF910 * Capturan el TCNT cuando se registra un evento en IC2.
TIC3 EQU $FFF912 * Capturan el TCNT cuando se registra un evento en IC3.
TOC1 EQU $FFF914 * Cuando coincide con TCNT causa eventos en los pin OC.
TOC2 EQU $FFF916 * Si el valor coincide con TCNT causa un evento en OC2.
TOC3 EQU $FFF918 * Si el valor coincide con TCNT causa un evento en OC3.
TOC4 EQU $FFF91A * Si el valor coincide con TCNT causa un evento en OC4.
TI4O5 EQU $FFF91C * Pin compartido (Puede realizar una función TIC o TOC).
TCTL1 EQU $FFF91E * Configura el modo de comparación y nivel de salida.
TCTL2 EQU $FFF91F * Configura que flanco provoca la captura en los IC.
TMSK1 EQU $FFF920 * Habilita las interrupciones de IC y OC.
TMSK2 EQU $FFF921 * Habilita las interrupciones del PAI y del TIMER.
TFLG1 EQU $FFF922 * Registro de flags de interrupciones de IC y OC.
TFLG2 EQU $FFF923 * Registro de flags de interrupciones del PAI y TIMER
CFORC EQU $FFF924 * Fuerza una salida en los pin OC y PWM.
PWMC EQU $FFF925 * Configuración del PWM.
PWMA EQU $FFF926 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMB EQU $FFF927 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMCNT EQU $FFF928 * Registro del contador del PWM.
PWMBUFA EQU $FFF92A * Buffer para prevenir glitches cuando modificamos PWMA.
PWMBUFB EQU $FFF92B * Buffer para prevenir glitches cuando modificamos PWMB.
PRESCL EQU $FFF92C * Guarda el valor del multiplicador del GPT.
******************************************************************************
* REGISTROS QSM-QSI *
******************************************************************************
QSMCR EQU $FFFC00 * Configuración del QSM.
QILR EQU $FFFC04 * Configuración del nivel de interrupción.
QIVR EQU $FFFC05 * Configuración del vector de interrupción.
SCCR0 EQU $FFFC08 * Control 0 del SCI determina velocidad de transmisión.
SCCR1 EQU $FFFC0A * Control 1 del SCI para configuraciones varias.
SCSR EQU $FFFC0C * Registro de estado del SCI.
SCDR EQU $FFFC0E * Registro de datos del SCI (RDR y TDR).
175
PORTQS EQU $FFFC15 * Registro de lectura y escritura del Puerto QS.
PQSPAR EQU $FFFC16 * Asignación de pins como Puerto QS o como QPSI.
DDRQS EQU $FFFC17 * Dirección E/S de los pins del Puerto QS.
******************************************************************************
* CONTROL DEL QSM - SCI *
******************************************************************************
BIT_FE EQU 16 * Bit indicador de error de trama (Frame Error).
BIT_PE EQU 17 * Bit de error de paridad (Parity Error).
BIT_TDRE EQU 24 * Bit indicador de registro TDR vacío.
BIT_TC EQU 23 * Bit indicador de transmisión finalizada.
TRAMA_NULA EQU $FF * Valor de inicialización antes de recibir trama
ERR_TRAMA EQU $AA * Valor devuelto cuando hay error de trama
ERR_PARIDAD EQU $80 * Valor devuelto cuando hay error de paridad
TRAMA_OK EQU $55 * Valor de confirmación de trama correcta
TRAMA_KO EQU $00 * Valor de confirmación de trama errónea
******************************************************************************
* VECTORES DEL RESET *
******************************************************************************
ORG $0
PILA_RESET DC.L FIN_PILA
PC_RESET DC.L PRINCIPAL
******************************************************************************
* VECTORES DE INTERRUPCIÓN *
******************************************************************************
ORG $80
VECTOR_ESC DC.L ESCRIBIR_SCI * Vector de la excepción TRAP #0
ORG $110
VECTOR_QSM DC.L LEER_SCI * Vector de interrupción $44
****************************************************************************** * PUNTERO DE PILA *
******************************************************************************
ORG $4000
PILA DS.L 200
FIN_PILA:
****************************************************************************** * BUFFER DE RECEPCIÓN *
******************************************************************************
176
ORG $2000
BUFFER DS.B 500
INI_BUFFER:
******************************************************************************
* SUBRUTINAS *
******************************************************************************
ORG $1000
******************************************************************************
* CONFIGURACION DEL HARDWARE DEL MICRO *
******************************************************************************
*************************** INHAB_WDOG ****************************
* Inhabilita el Watchdog que es una función de monitoriración del *
* sistema para detectar la entrada en un bucle infinito. *
*******************************************************************
INHAB_WDOG:
MOVE.B #$40,SYPCR * Inhabilitamos WatchDog
RTS
*----------------------------------------------------------------------------*
**************************** QSM_CFG *****************************
* Configuración del QSM_SCI *
******************************************************************
QSM_SCI_CFG
MOVE.W #$008F,QSMCR * Supervisor de arbitrio 15.
MOVE.B #$44,QIVR * Vector de interrupción $44.
MOVE.B #$06,QILR * Nivel de interrupción 6 para el SCI.
MOVE.W #$00DC,SCCR0 * velocidad de TX/RX de 2400 baudios.
RTS
*----------------------------------------------------------------------------*
************************** RECEPTOR_CFG **************************
* Configura y habilita el módulo receptor del QSM-SCI. Inhabi- *
* lita al tiempo el transmisor al tratarse de una comunicación *
* semi-duplex. *
******************************************************************
RECEPTOR_CFG
MOVE.W #$0424,SCCR1 * Interrupciones habilitadas para la recepción (RIE)
177
RTS * tramas de 7 bits + bit de paridad impar RTS
************************* TRANSMISOR_CFG *************************
* Configura y habilita el módulo transmisor del QSM-SCI. Inhabi- *
* lita al tiempo el receptor al tratarse de una comunicación *
* semi-duplex. *
******************************************************************
TRANSMISOR_CFG
MOVE.W #$0408,SCCR1 * tramas de 7 bits + bit de paridad impar RTS
RTS
******************************************************************************
* RUTINAS DE CONTROL *
******************************************************************************
************************** LEER_SCI *****************************
* Rutina LEER_SCI de atención a la interrupción del modulo serie*
* El dato recibido se deja disponible en el registro D0 *
*****************************************************************
LEER_SCI
MOVE.L D1,-(A7)
MOVE.L SCSR,D1 * Lectura de los registros de estado y de datos.
* a la vez; se resetean los flags de estado.
* automáticamente.
BTST.L #BIT_FE,D1 * Se comprueba el error de trama.
BNE TRAMA_ERROR
BTST.L #BIT_PE,D1 * Se comprueba el error de paridad.
BNE PARIDAD_ERROR
ANDI.W #$007F,D1 * Nos quedamos con los bits 0 a 6 en D3.
MOVE.W D1,D0 * Copia en D0 el dato bueno.
BRA FIN_LECTURA
TRAMA_ERROR
MOVE.W #ERR_TRAMA,D0
BRA FIN_LECTURA
PARIDAD_ERROR
MOVE.W #ERR_PARIDAD,D0
FIN_LECTURA
MOVE.L (A7)+,D1
178
RTE
*----------------------------------------------------------------------------*
************************ ESCRIBIR_SCI ***************************
* Rutina ESCRIBIR_SCI de atención a la excepción TRAP #0, de *
* modo que el dato depositado en el registro D0 se transmite *
* por la línea serie. *
*****************************************************************
ESCRIBIR_SCI
MOVE.L D1,-(A7)
ESPERAR
MOVE.L SCSR,D1
BTST.L #BIT_TDRE,D1 * Se espera hasta que el transmisor esté libre.
BEQ ESPERAR
ANDI.W #$FE7F,D1 * Se borran las banderas TDRE y TC.
MOVE.W D1,SCSR * Se actualiza el registro de estado del SCI.
MOVE.W D0,SCDR * Se copian los datos al registro TDR.
MOVE.L (A7)+,D1
RTE
*----------------------------------------------------------------------------*
******************************************************************************
* PRINCIPAL *
******************************************************************************
ORG $400
PRINCIPAL
BSR INHAB_WDOG * Se inhabilita watchdog
BSR QSM_SCI_CFG * Se configura el QSM
MOVEA.L #INI_BUFFER,A0 * Carga dirección inicio del buffer de datos.
NUEVA_TRAMA
MOVE.W #TRAMA_NULA,D0 * Valor de cuando no se recibe trama.
BSR RECEPTOR_CFG * Se activan las interrupciones del receptor
BUCLE
CMP.W #TRAMA_NULA,D0 * Espera a la recepción de una trama
BEQ BUCLE
CMP.W #ERR_TRAMA,D0 * Comprueba si hay error en la trama
BEQ TRAMA_MAL
CMP.W #ERR_PARIDAD,D0 * Comprueba si hay error en la paridad
BEQ TRAMA_MAL
179
TRAMA_BIEN
MOVE.B D0,(A0)+ * Copia la trama recibida en el buffer.
MOVE.W #TRAMA_OK,D0 * Carga la confirmación de trama correcta.
BRA CONFIRMACION_ENVIAR
TRAMA_MAL
MOVE.W #TRAMA_KO,D0 * Carga la confirmación de error de trama.
CONFIRMACION_ENVIAR
BSR TRANSMISOR_CFG * Configura el transmisor.
TRAP #0 * Envía la confirmación de recepción de trama.
BRA NUEVA_TRAMA
END
180
Capítulo 7
Telemando por infrarrojosDebido a la popularidad de este tipo de mandos, raro va a ser no encontrarlos en
cualquier hogar u oficina. Algunos de los aparatos más comunes que cuentan con ellos
son los televisores, vídeos, cadenas de música, aparatos de aire acondicionado, etc.
Esto nos permite decodificar las órdenes del mando de cada uno de estos aparatos y con
un único transmisor poderlos controlar sin necesidad de ninguna instalación adicional.
Existen además otras aplicaciones, como pueden ser la regulación de la iluminación de
una sala, el control de subida o bajada de persianas o toldos, para las que su uso puede
ser muy apropiado.
Con anterioridad a la aparición de esta tecnología, se utilizaban la radiofrecuencia y los
ultrasonidos. La primera tiene las desventajas de provocar interferencias
electromagnéticas, necesitar autorización administrativa y que su alcance no está
limitado, por lo que podría interferir en el funcionamiento de otros equipos existentes en
otras salas o viviendas. Los segundos presentan problemas de interferencias por
multitrayecto y son susceptibles a los ultrasonidos generados por una multitud de
objetos y sucesos cotidianos como pueden ser la caída de una moneda, el sonido de una
campanilla, un timbre, un reloj, sonidos generados por aparatos eléctricos como los
televisores, etc. En aquellas aplicaciones en las que sólo se requiere un alcance de unos
pocos metros y que la transmisión quede confinada en una sala, la transmisión por
infrarrojos es la solución ideal. De ahí el éxito que han tenido este tipo de mandos en los
últimos años.
7.1 Introducción
En el mercado existen una multitud de soluciones para este tipo de dispositivos. Existen
diferentes circuitos integrados que implementan todas las funciones de comunicación y
decodificación de las señales y que permiten realizar sin apenas esfuerzo todas las
funciones del telemando.
Nuestro objetivo es más ambicioso desde un punto de vista didáctico, por lo que se van
a desarrollar tanto el transmisor como el receptor con componentes de propósito
181
general. En cualquier caso, no se deben olvidar los codificadores y decodificadores
comerciales en tanto en cuanto los incorporan muchos equipos y aparatos de consumo.
La transmisión por luz infrarroja no está exenta de problemas, como el ruido y las
interferencias. Las dos principales fuentes que suelen aparecer son:
La luz solar, que incorpora una importante componente de luz
infrarroja, lo que genera bastante ruido en el fotodiodo y puede
saturar el receptor, disminuyendo la sensibilidad.
Los tubos fluorescentes o las lámparas de bajo consumo presentan
también una componente de luz infrarroja oscilante a la frecuencia de
100 Hz.
Los motivos anteriormente expuestos desaconsejan la transmisión en banda base. La
mayoría de los sistemas comerciales utilizan una modulación ASK con una frecuencia
de portadora que oscila entre los 36 y los 40 Khz. aunque hay algunos que utilizan una
modulación FSK con una frecuencia de la portadora de hasta 50 Khz.
7.1.1 Estándares de codificación de comandos
Para la codificación de los comandos existen dos estándares internacionales que son
RC-5 y RECS 80; pero éstos no son los únicos, ya que hay muchos fabricantes que
tienen sus propias codificaciones, como NEC, DENON, SIRCS, MOTOROLA, etc.
De todas ellas la más popular es la RC-5.
7.1.1.1Codificación RC-5
Para la codificación de bits utiliza un código bifase, de modo que un “0” se codifica por
una transición de nivel alto a nivel bajo y un “1” como una de nivel bajo a nivel alto. La
trama es de 14 bits con la siguiente estructura:
S1 S2 T D4 D3 D2 D1 D0 C5 C4 C3 C2 C1 C0
Tabla 1 – Trama de comando del estándar RC-5.
Cada bloque de bits tiene la siguiente función:
S1-S2 – Son los bits de arranque y sirven para el ajuste del CAG y la
sincronización del receptor.
T – Es el bit de toggle, que va alternándose entre una trama y otra
cuando se repite varias veces la transmisión del mismo comando.
182
D0-D4 – Contienen el número de dispositivo a controlar.
C0-C5 – Contienen el comando a ejecutar.
7.1.1.2Codificación RECS 80
La codificación de bits empleada es una modulación del ancho de pulso de modo que
cada bit se transmite como un pulso a nivel alto de duración T seguido por otro a nivel
bajo de duración 2T si se transmite un “0” y de duración 3T si se transmite “1”. En
cuanto a la longitud de la trama, depende de cada implementación y del número de
comandos que es capaz de transmitir. En general, la estructura consiste en una secuencia
de referencia de duración 3T, un bit de toggle para indicar si se trata de una repetición
del comando o de uno nuevo y, por último, la secuencia de bits de información que
puede contener un código de identificación de dispositivo y otro de comando, seguido
de un tiempo de inactividad antes de repetir o iniciar una nueva secuencia.
7.1.2 Codificación de los comandos
Para no complicar en exceso el diseño del telemando, se va a utilizar un formato de
trama muy sencillo. Va a consistir en una secuencia formada por un bit de activación,
seguido de un bit de arranque, ocho bits de información (comenzando por el menos
significativo) y uno de parada. Esta elección no es casual, sino que coincide con la
estructura de trama del módulo de comunicación serie SCI del microcontrolador y, por
tanto, se podrá utilizar este módulo para la recepción.
Activación Arranque Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Parada1 0 X X X X X X X X 1
Tabla 2 – Estructura de la trama de comando.
Los ocho bits de información pueden dividirse en una parte para la identificación de
dispositivo y otra para la señalización de comando. De este modo, se pueden estructurar
de ocho formas diferentes. La elección de una u otra dependerá en cada caso de la
aplicación, esta decisión se deja abierta al ser irrelevante de cara al diseño.
Estructura de la información Nº de dispositivos Nº de comandos0 Id. Disp. y 8 Comando 1 2561 Id. Disp. y 7 Comando 2 1282 Id. Disp. y 6 Comando 4 643 Id. Disp. y 5 Comando 8 324 Id. Disp. y 4 Comando 16 165 Id. Disp. y 3 Comando 32 86 Id. Disp. y 2 Comando 64 47 Id. Disp. y 1 Comando 128 2
183
Tabla 3 – Estructuras posibles de codificación de la información.
Para la transmisión de bits se va a utilizar un código NRZ unipolar con una frecuencia
de 100 Hz que va a determinar la velocidad de transmisión de la trama.
7.1.3 Tipo de modulación
Se va a utilizar una modulación ASK con una frecuencia de 38 Khz. La razón que
motiva esta decisión es la existencia de un buen número de dispositivos comerciales que
utilizan esta modulación y el hecho de estar lo suficientemente alejada de la
interferencia de 100 Hz. provocada por los tubos fluorescentes y de la velocidad de
transmisión.
7.2 Transmisor de infrarrojos
Disponiendo de un microcontrolador, el diseño de un transmisor de infrarrojos podría
limitarse al modulador y al driver que gobierna al diodo fototransmisor, que suele
demandar bastante corriente, ya que todo el conformado y transmisión de la trama se
puede hacer por software a través de un puerto.
También se puede realizar una transmisión serie convencional utilizando el módulo de
comunicación serie SCI del MC68331, lo que simplifica enormemente las tareas para
algunas aplicaciones concretas como podrían ser las de comunicación con un PC o con
otro microcontrolador.
El objetivo que en esta sección se pretende es el diseño de un mando de control remoto
totalmente independiente, que pueda alimentarse con pilas, sin perjuicio de la utilidad
que se le pueda dar a algunos de los bloques para otras aplicaciones de telemando.
7.2.1 Diagrama de bloques del transmisor
El conjunto del transmisor se ha descompuesto en seis módulos que pueden ser
diseñados con independencia según se detalla en la figura 1.
184
Figura 1 – Diagrama de bloques del transmisor.
7.2.2 Generador de reloj
Como la velocidad de transmisión se ha determinado que sea de 100 baudios, será
necesario generar una señal de reloj de esa frecuencia para marcar el ritmo de la
transmisión. Para ello se usará un temporizador 555 en configuración aestable y con un
ciclo de trabajo próximo al 50 %.
Figura 2 – Esquema de conexión del 555.
La frecuencia de la señal generada viene dada por la fórmula:
f= 1. 44
(R1+2⋅R2)⋅C , y el ciclo de trabajo por: Duty=
R2
R1+2⋅R2
La elección del condensador más adecuado puede realizarse a partir de las curvas
proporcionadas por el fabricante.
185
Figura 3 – Frecuencia de oscilación libre (Gráfica obtenida del catálogo del fabricante National).
A partir de la frecuencia de diseño de 100 Hz, podemos observar que el par formado por
la recta de carga y el valor del condensador que adopta los valores más razonables son
la de 100 K y un condensador de 100 nF.
Para el valor del condensador de 100 nF se obtiene:
R1+2⋅R2=1. 44
100⋅100⋅10−9=144
K
Por otro lado se quiere un ciclo de trabajo próximo al 50 %, para ello es necesario que
R1<< R2 . Si se toma un valor de R1=0 .1⋅R2 y eligiendo aquellos valores comerciales
más próximos se obtiene R2=68 K y R1=8 . 2K. Debido a las tolerancias de los
componentes la frecuencia resultante no se ajustará al valor de diseño. Para resolverlo se
colocará en lugar de la resistencia de 68 K la combinación serie de una resistencia de
56 K y un potenciómetro multivuelta de 20 K para permitir el ajuste de la frecuencia
exacta.
Con los valores calculados se obtendrá un ciclo de trabajo de aproximadamente el 47 %.
Una vez conectado a la alimentación, será necesario ajustar con el potenciómetro la
frecuencia de trabajo que se medirá con el osciloscopio.
7.2.3 Generador del intervalo de trama
Cada trama consiste en la transmisión de un conjunto de once bits. Para ello se cargará
la palabra que compone la trama en dos registros de desplazamiento en cascada y se
sacarán en serie. La función que va a realizar el generador del intervalo de trama es la
de mantener activo al registro de desplazamiento sólo mientras se transmite ésta y al
finalizar inhibe el funcionamiento.
186
Para realizar esta función se va a utilizar un contador para implementar un autómata que
al recibir la señal de arranque mediante un pulsador mantiene activa la señal LOAD
durante ocho ciclos de reloj. El esquema se muestra en la figura 4.
Figura 4 – Generador del intervalo de trama.
La descripción del funcionamiento es bastante sencilla:
El pulsador, dotado de un circuito antirebotes, genera un pulso a
nivel bajo en el terminal LOAD del contador.
El contador que se encontraba inhibido por la señal RCO (fin de
cuenta) aplicada a través de un inversor a la entrada ENP carga el
valor 4 (0100) existente en los terminales D, C, B y A.
La señal RCO cambia a nivel bajo y desinhibe el contador que
prosigue la cuenta hasta el valor 15 (1111).
Cuando alcanza este valor, la señal RCO pasa a nivel alto e inhibe de
nuevo el contador.
La misma señal RCO negada utilizada para activar e inhibir el contador es la que activa
e inhibe el registro de desplazamiento. Como se puede observar, la señal se mantiene a
nivel alto durante los once ciclos de reloj que tarda el contador en finalizar la cuenta y
luego retorna a nivel bajo que es su estado normal.
187
A continuación se representa el diagrama de estados que gobierna el autómata:
Figura 5 – Diagrama de estados del autómata generador del intervalo de trama.
7.2.4 Registro de desplazamiento
Se trata del alma del control remoto. El registro de desplazamiento recibe la trama a
través de sus entradas en paralelo y la saca en serie al ritmo que le marca el reloj.
El valor de los bits de activación, arranque y parada vienen van cableados de forma
permanente y los ocho bits de selección de dispositivo y comando se configuran a través
de ocho microinterruptores.
El registro permanece con el código de la trama precargado y en estado de inhibición.
Cuando el generador de intervalo de trama activa el registro comienza la transmisión
hasta el último bit de la trama, tras el cual pasa de nuevo a estado de inhibición.
188
Figura 6 – Registro de desplazamiento.
Para evitar que se produzca una transmisión espúrea durante la conexión inicial del
circuito, se ha introducido una red de inicialización, conectada al terminal de inhibición,
que garantiza un tiempo de 400 ms. Suficiente para que se estabilice el autómata.
Una peculiaridad importante es que en la salida serie aparece el valor precargado en el
último biestable H y que será, por tanto, el valor de reposo del terminal serie. Cuando se
produce la activación del circuito, el primer impulso de reloj llevará a la salida serie el
valor contenido en la entrada G y, por tanto, sólo se dispone de siete bits.
Afortunadamente el circuito cuenta con una entrada de datos serie que ataca al biestable
A y que pondremos a 1 para que haga la función de bit de parada.
Como se puede observar, con la conexión realizada la línea permanece en reposo o nivel
lógico cero hasta que el generador de intervalo saca al circuito de su estado de
inhibición. A partir de ese instante se transmite un 1 para la sincronización de trama, el
bit de arranque, los cinco bits de información y por último el de parada.
7.2.5 Modulador ASK
Como ya se ha comentado se va a utilizar una modulación digital ASK con una
frecuencia de 38 Khz. de modo que se transmitirá la señal modulada para denotar un “1”
lógico y no se emitirá para denotar el “0” lógico.
Para ello se va a utilizar un 555 en modo aestable al igual que se hizo con el circuito de
reloj y se utilizará el terminal de reset para gobernar la transmisión.
189
Sin entrar en detalles justificativos, diremos que la utilización de una onda cuadrada
para modular la señal infrarroja presenta una serie de ventajas desde el punto de vista de
la potencia transmitida, por lo que no será necesario filtrar la salida del 555.
A la salida del temporizador se conectarán dos inversores Schmitt Trigger en serie para
regenerar la señal sin negar la lógica.
Figura 7 – Modulador ASK
Para el cálculo de los componentes de ajuste se consulta la gráfica de la figura 3 y se
observa que para la recta de carga de 100 K se precisa un valor de condensador de
entre 100pF y 1nF, por lo que si elegimos un valor comercial de 220 pF, se obtiene:
Para el valor del condensador de 100 nF se obtiene:
R1+2⋅R2=1 . 44
38000⋅220⋅10−12=172
K
Por otro lado se quiere un ciclo de trabajo próximo al 50 % para ello es necesario que
R1 << R2 . Si se toma un valor pequeño de R1=2K el ciclo de trabajo será de 49.4 %
y el valor de R2=85 K. Para resolver la desviación de frecuencia debida a la
tolerancia de los componentes se colocará en lugar de la resistencia de 85 K la
combinación serie de una resistencia de 75 K y un potenciómetro multivuelta de 20
K para permitir el ajuste de la frecuencia exacta.
Una vez conectado a la alimentación será necesario ajustar con el potenciómetro la
frecuencia de trabajo que se medirá con el osciloscopio.
7.2.6 Emisor de luz infrarroja
La señal procedente del modulador debe ser aplicada al fotodiodo de luz infrarroja que
se encarga de la emisión.
190
Se ha utilizado el diodo CQY89 que habitualmente se encuentra disponible en las
tiendas de electrónica. Tiene una longitud de onda de emisión es de 930 nm. con un
ángulo de emisión de 40º. Admite una intensidad media de corriente de 100 mA con la
que alcanza una potencia de emisión de 15 mW.
Para la excitación del LED IR se ha utilizado el circuito de la figura 8. Podemos
observar que para la polarización de la base se han utilizado dos diodos 1N4148. Con
ello se consigue la tensión adecuada en la base del transistor y se evitan los efectos de
carga que introduciría un divisor resistivo.
Figura 8 – Transmisor de luz infrarroja.
Como el modulador proporciona una onda cuadrada, para que la corriente media por el
LED sea de 100 mA, se deberá hacer pasar una corriente de 200 mA durante el ciclo
activo.
Como en el LED cae una tensión de 1.7 V. y la tensión mínima colector-emisor, fuera
de la saturación, es V CE=0. 2V., la resistencia de emisor necesaria para limitar la
corriente del diodo a 200 mA es:
R=5−1. 7−0 .20. 2
=15 .5
El valor comercial más próximo disponible es 18 .
La tensión en la base del transistor ha de ser menor que:
V B≤V E+0. 7=5−1 .7−0 .2+0 .7=3 . 8V.
Utilizando los dos diodos en serie, la tensión en la base es: V B=5−1 . 4=3 .6≤3 .8V.
La tensión en el emisor del transistor será: V E=5−1. 4−0 .7=2.9V. y la potencia
disipada en la resistencia de 233 mW, por lo que es recomendable utilizar una
191
resistencia de ½ W. La corriente de pico en el LED será de 161 mA y la corriente media
de 80.5 mA.
7.2.7 Alimentación
El módulo transmisor ha de ser un elemento móvil para que realice la función de
telemando para la que fue diseñado. Para ello se alimentará con una pila de 9 V. Será
necesario el empleo de un regulador de tensión LM7805, conectado a la pila para
proporcionar a la salida los 5 V. que requiere todo el sistema. Dado lo popular de este
regulador se omite el esquema de conexión del mismo.
Una cuestión que debe tenerse en cuenta es la demanda de corriente del circuito.
Durante la transmisión la corriente media que va a consumir el circuito es de unos 100
mA durante los 80 ms que dura la transmisión, con una corriente de pico de 200 mA.
Como no se conocen datos sobre el comportamiento de la pila, debemos observar que
debe ser capaz de mantener una tensión superior a 7.5 V. para que el regulador funcione
correctamente. Si la pila no es capaz de soportar esa demanda de corriente, se deberá
desacoplar la misma mediante un condensador de gran capacidad en paralelo que sea
capaz de aportar el exceso de corriente que no es capaz de dar la pila.
7.3 Receptor de infrarrojos
El receptor de infrarrojos debe ser capaz de demodular la señal ASK de 38 Khz. y
entregar los pulsos de la trama.
Para la recepción existen dispositivos comerciales que integran todos los circuitos
necesarios para la correcta demodulación de la señal. Estos dispositivos de pequeño
tamaño integran en el mismo encapsulado, el receptor de luz infrarroja, una lente y toda
la lógica necesaria para distinguir señales moduladas a una determinada frecuencia.
Algunos de estos dispositivos son: el IS1U60 y el IS1U621 de Sharp, el PNA4602 y el
PNA4612 de Panasonic, el LTM-97DS-38 de LiteOn o el SFH5110 de Siemens.
192
Para el transmisor del título anterior se adapta perfectamente el IS1U60, cuyo diagrama
de bloques se muestra en la figura 9.
Figura 9 – Diagrama de bloques del receptor integrado IS1U60 (extraído del catálogo de Sharp).
Continuando con los objetivos didácticos de esta práctica, se va a desarrollar un receptor
mediante elementos discretos, sin perjuicio de la utilidad y comodidad de usar
cualquiera de los componentes antes enumerados.
7.3.1 Diagrama de bloques del receptor
El receptor se puede descomponer en cuatro bloques que pueden ser diseñados
independientemente.
Figura 10 – Diagrama de bloques del receptor.
7.3.2 Foto-receptor
La función de recepción la va a realizar el fotodiodo BPW41. Este dispositivo presenta
su máxima sensibilidad con señales cuya longitud de onda es de 950 nm. y tiene un
ángulo de recepción de 65º respecto de la normal.
193
Este dispositivo se polariza en inversa, de modo que la corriente que pasa por él se
comporta linealmente con respecto a la potencia de luz incidente.
Figura 11 – Corriente inversa en función de la irradiancia.
De este modo se puede asimilar el fotodiodo a un generador de corriente dependiente
linealmente de la luz incidente en el mismo. Las distintas formas en que puede
implementarse el circuito foto-receptor dependen del tipo de carga que presenten ante
dicho generador de corriente.
Carga resistiva: La carga es una simple resistencia. Se trata de una
solución muy sencilla con un comportamiento plano con la
frecuencia. Como no elimina las bajas frecuencias puede suceder que
el receptor se sature con la iluminación ambiente.
Carga reactiva (LC o RLC): Es la que promete un mejor
comportamiento, ya que sólo presenta una alta impedancia en el
margen de frecuencias deseado. El problema reside en la dificultad
de obtener las bobinas y en la forma de ajustar la sintonía por las
altas tolerancias de los componentes L y C.
Carga activa: Por medio de transistores con carga RC se puede
implementar una carga activa que presente una baja impedancia
frente a la corriente continua y que permita evitar la saturación de los
transistores por efecto de la iluminación ambiente.
En principio se va a utilizar el circuito de la figura 12 por su sencillez. El efecto de la
luz ambiente va a provocar una merma en la sensibilidad que, por lo general, podrá
resolverse con un posterior filtrado y amplificación.
194
Figura 12 – Circuito foto-receptor con carga resistiva.
Para el caso en que las condiciones de iluminación de una aplicación concreta
provoquen problemas de saturación y mal funcionamiento, se propone un circuito con
carga activa alternativo con una inmunidad al ruido mayor.
Figura 13 - Circuito foto-receptor con carga activa.
7.3.2.1Red de desacoplo
Antes de entregar la señal al filtro paso banda es interesante desacoplar las bajas
frecuencias. Para ello se utilizará un filtro RC paso alto con una frecuencia de corte
situada, al menos, una década por encima de la interferencia de 100 Hz que provocan
los tubos fluorescentes y, al menos, una década por debajo de la señal modulada de
38Khz., es decir 1Khz < fc < 3.8 Khz. Con el fin de eliminar los efectos de carga entre
etapas se utilizará un seguidor de tensión, según se puede observar en el esquema
general de la figura 14.
Figura 14 – Esquema completo de la etapa de foto-recepción.
La red RC formada por un condensador de 220 pF y una resistencia de 560 K presenta
una frecuencia de corte de 1290 Hz. y una impedancia de carga de alta. Por último, el
195
amplificador operacional utilizado para el seguidor de tensión tiene que ser capaz de
seguir la señal de 38 Khz. y, por tanto, deberá tener un Slew-Rate de:
SR≥2 π⋅f osc⋅Amax=2 π⋅38000⋅5=1. 2V/s.
Se ha escogido el TL082 que tiene un SR de 13 V/s y un producto GxBW de 4 Mhz.,
suficiente para la solución adoptada.
7.3.3 Filtro paso banda
Para reducir el ruido antes de la demodulación se debe realizar un filtrado paso banda
que sólo permita pasar la señal de interés cuya frecuencia es de 38 Khz.
El espectro de la señal tiene el aspecto de una sinc por el efecto de la modulación que
consiste en enventanar el tono de 38 Khz, por lo que es conveniente que la banda de
paso tenga un ancho finito, ya que si no eliminaríamos una parte importante del espectro
de la señal. Esto es una ventaja ya que no va a ser necesario utilizar filtros con un orden
elevado.
El filtro paso banda se va a realizar mediante la conexión en cascada de dos filtros de
Sallen-Key, uno paso bajo y el otro paso alto. El resultado corresponde con el cuadrado
de la función de transferencia de un filtro paso banda.
H BP (ω)= As2
s2+sQ+1
⋅ A
s2+sQ+1
=( As
s2+sQ+1 )
2
El módulo de la función de transferencia vale:
|H BP (ω)|= ( Aω )2
(1−ω2)2+(ωQ )
2
La frecuencia central vendrá amplificada por el factor (AQ)2.
El problema principal que presentan este tipo de montajes es que los componentes
discretos, como son los condensadores y resistencia, presentan una tolerancia bastante
grande para la precisión del filtro. Por ello, nos iremos a resistencias con una tolerancia
del 1% y condensadores del 5% si es posible. El caso peor se presenta cuando las
frecuencias de normalización fp de ambos filtros son coincidentes y están bastante
196
alejadas de la frecuencia objetivo, ya que ésta queda en banda atenuada y encima se está
amplificando otra frecuencia próxima diferente.
Figura 15 – Filtro paso banda.
La estrategia que se propone es la de comprar un lote de resistencias y condensadores de
los valores que se necesitan y con la ayuda de un polímetro (los hay que miden
capacidades) elegir aquéllos que presentan el menor error y se aproximan más a los
valores de diseño.
Para obtener la frecuencia central objetivo, fp = 38 Khz, se han elegido los siguientes
valores comerciales C = 470 pF y R= 9 K (el valor de la resistencia existe con
tolerancia del 1 %), por lo que la frecuencia real obtenida es fp = 37.625 Hz, valor
totalmente aceptable.
Para que las frecuencias de corte estén situadas en torno a 36 y 40 Khz el valor que
deberá adoptar el factor de calidad es Q = 1.9059, con lo que la ganancia del
amplificador deberá de ser:
A=3− 1Q=2 . 475
Con los valores comerciales para las resistencias resistencias de 150 K y 100 k, en el
amplificador se obtiene una ganancia de 2.5 y el factor de calidad vale Q = 2.
La ganancia máxima que se puede obtener con el conjunto a la frecuencia de interés es
(AQ)2 =(2.5 2)2 =25.
En cuanto al amplificador, se seguirá usando el TL082 cuyas características son
sobradas para el uso requerido.
197
7.3.4 Demodulador
El demodulador se va a encargar de reconstruir la señal en banda. La parte clave del
mismo es el detector de envolvente. La modulación ASK es un caso particular de la
demodulación AM con la ventaja de que la saturación que se pueda presentar en los
amplificadores no tiene ningún efecto negativo en la señal y, por tanto, la ganancia de
los mismos no es un factor crítico. Esto es así porque la información no va codificada en
la amplitud, sino en la frecuencia, en este caso frecuencia “0” o “32 Khz”.
El demodulador completo se compone de tres partes diferenciadas, que son: el
amplificador de entrada, el detector de envolvente y el regenerador.
7.3.4.1Amplificador de entrada
Se trata de un amplificador no inversor cuya función es la de adaptar el nivel de la señal
recibida a un valor adecuado para el buen funcionamiento del detector de envolvente.
Experimentalmente se ha determinado que una ganancia en torno a 50 es adecuada. Con
la pareja de resistencias de 120 K y 2K7 se obtiene una ganancia de 45 (33dB). En
cuanto al offset de tensión, la medida obtenida es de 340 mV., valor que se puede
asumir como aceptable.
Figura 16 – Demodulador.
7.3.4.2Detector de envolvente
El detector de envolvente está formado por un rectificador de media onda con carga RC.
Si se aplica un tono senoidal al detector, durante el semiciclo positivo el diodo conduce
produciéndose una caída de tensión de 0.7 V. Una vez que la tensión alcanza este valor
el condensador comienza a cargarse y la tensión sube hasta el máximo y desciende de
nuevo hasta los 0.7 V. A partir de ese punto el diodo entra en corte y el condensador
comienza su descarga hasta que la tensión vuelve a superar el umbral de los 0.7 voltios
198
en el ciclo siguiente. Se pretende que la tensión caiga sólo un 10 % durante el tiempo de
descarga, para lo cual:
exp (−T /2τ )=0 .9
; τ=− 1/2 f
ln 0 .9=125
s
Como = RC, se han escogido los siguientes valores: R =120 K y C = 1nF, con lo que
= 120 s.
El tiempo que tarda la señal en alcanzar el 10 % de su valor una vez finalizado el pulso
es:
t=−τ⋅ln 0 .1=287s que es el 2.8 % de la duración de un bit.
7.3.4.3Regenerador
A la salida del detector de envolvente se aplican dos inversores Trigger-Schmitt en
cascada para regenerar la señal sin invertir la lógica.
A la salida de esta etapa ya tenemos la señal demodulada y disponible.
7.4 Conexión al microcontrolador
De las diferentes posibilidades de conexión al MC68331 sólo vamos a plantear la
conexión del receptor a través del módulo de recepción serie SCI del QSM, para
aprovechar las facilidades que este módulo proporciona, ya que la programación de un
receptor puede llegar a ser laboriosa y compleja, aunque bastante interesante.
La conexión es sencilla. La salida de datos del receptor se conecta a la entrada de datos
serie RXD del microcontrolador.
7.4.1 Programa básico de atención de comunicaciones
Si recordamos el protocolo de comunicación del telemando, se trata de palabras de ocho
bits de los cuales una parte puede reservarse como identificación de dispositivo y la otra
como código de instrucción. La velocidad de transmisión es de 100 baudios y la trama
no contiene bit de paridad.
199
La trama de datos a recibir tiene la estructura siguiente:
Bit 10 7 0 Bit 1Parada Código de instrucción Identificador Arranque
Tabla 3 – Estructura de la trama de datos.
La aplicación de ejemplo realiza lo siguiente:
1. Habilita las interrupciones del receptor y se queda esperando a recibir
un dato.
2. Una vez recibido, comprueba si es válido o no.
3. Si es valido, lo guarda en un buffer de memoria.
4. Si no es valido, no hace nada y sigue esperando al dato siguiente.
Cabe notar que no se hace comprobación del desbordamiento del buffer, ya que se
entiende que es un programa de prueba y con un tamaño de 500 tramas es suficiente
para comprobar la recepción de ordenes.
******************************************************************************
* REGISTROS SIM *
******************************************************************************
SIMCR EQU $FFFA00 * Controla la configuración del sistema ($00CF).
SYNCR EQU $FFFA04 * Fija frecuencia y modo de operación del reloj ($3F08).
RSR EQU $FFFA06 * Guarda la causa de un reset (Ej.-$80, reset hardware).
PORTE EQU $FFFA11 * Registro de lectura y escritura en el puerto E.
PORTE1 EQU $FFFA13 * Tiene exactamente la misma función que el anterior.
DDRE EQU $FFFA15 * Determina el sentido del puerto E pin a pin.
PEPAR EQU $FFFA17 * Asignación del puerto E (Puerto o control de BUS).
PORTF EQU $FFFA19 * Registro de lectura y escritura en el puerto F.
PORTF1 EQU $FFFA1B * Tiene exactamente la misma función que el anterior.
DDRF EQU $FFFA1D * Determina el sentido del puerto F pin a pin.
PFPAR EQU $FFFA1F * Asignación del puerto F (Puerto F o control de BUS).
PICR EQU $FFFA22 * Configuración de interrupciones periódicas ($000F).
PITR EQU $FFFA24 * Contiene la cuenta del timer periódico ($0000).
SYPCR EQU $FFFA21 * Controla las funciones de monitorización del sistema
* como es el caso del Watchdog. ($40 anula watchdog).
SWSR EQU $FFFA27 * Se debe escribir periódicamente con Watchdog activado.
CSPAR0 EQU $FFFA44 * Sirve junto con CSPAR1 para configurar la función de
CSPAR1 EQU $FFFA46 * los pins de Chip Select (CS, Port C, etc.).
PORTC EQU $FFFA41 * Registro de escritura en el puerto C.
200
******************************************************************************
* REGISTROS GPT-PWM *
******************************************************************************
GPTMCR EQU $FFF900 * Configuración del GPT.
ICR EQU $FFF904 * Configuración de interrupciones del GPT.
DDRGP EQU $FFF906 * Determina el sentido del puerto GP.
PORTGP EQU $FFF907 * Registro de lectura y escritura del puerto GP.
OC1M EQU $FFF908 * Máscara para asignar los pin de captura de OC.
OC1D EQU $FFF909 * Registro de datos a comparar con el puerto OC.
TCNT EQU $FFF90A * Registro del GPT asociado a las capturas IC, OC y PAI.
PACTL EQU $FFF90C * Configuración del acumulador de pulsos PAI.
PACNT EQU $FFF90D * Es el contador de registro de eventos del PAI.
TIC1 EQU $FFF90E * Capturan el TCNT cuando se registra un evento en IC1.
TIC2 EQU $FFF910 * Capturan el TCNT cuando se registra un evento en IC2.
TIC3 EQU $FFF912 * Capturan el TCNT cuando se registra un evento en IC3.
TOC1 EQU $FFF914 * Cuando coincide con TCNT causa eventos en los pin OC.
TOC2 EQU $FFF916 * Si el valor coincide con TCNT causa un evento en OC2.
TOC3 EQU $FFF918 * Si el valor coincide con TCNT causa un evento en OC3.
TOC4 EQU $FFF91A * Si el valor coincide con TCNT causa un evento en OC4.
TI4O5 EQU $FFF91C * Pin compartido (Puede realizar una función TIC o TOC).
TCTL1 EQU $FFF91E * Configura el modo de comparación y nivel de salida.
TCTL2 EQU $FFF91F * Configura que flanco provoca la captura en los IC.
TMSK1 EQU $FFF920 * Habilita las interrupciones de IC y OC.
TMSK2 EQU $FFF921 * Habilita las interrupciones del PAI y del TIMER.
TFLG1 EQU $FFF922 * Registro de flags de interrupciones de IC y OC.
TFLG2 EQU $FFF923 * Registro de flags de interrupciones del PAI y TIMER
CFORC EQU $FFF924 * Fuerza una salida en los pin OC y PWM.
PWMC EQU $FFF925 * Configuración del PWM.
PWMA EQU $FFF926 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMB EQU $FFF927 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMCNT EQU $FFF928 * Registro del contador del PWM.
PWMBUFA EQU $FFF92A * Buffer para prevenir glitches cuando modificamos PWMA.
PWMBUFB EQU $FFF92B * Buffer para prevenir glitches cuando modificamos PWMB.
PRESCL EQU $FFF92C * Guarda el valor del multiplicador del GPT.
******************************************************************************
* REGISTROS QSM-QSI *
******************************************************************************
QSMCR EQU $FFFC00 * Configuración del QSM.
201
QILR EQU $FFFC04 * Configuración del nivel de interrupción.
QIVR EQU $FFFC05 * Configuración del vector de interrupción.
SCCR0 EQU $FFFC08 * Control 0 del SCI determina velocidad de transmisión.
SCCR1 EQU $FFFC0A * Control 1 del SCI para configuraciones varias.
SCSR EQU $FFFC0C * Registro de estado del SCI.
SCDR EQU $FFFC0E * Registro de datos del SCI (RDR y TDR).
PORTQS EQU $FFFC15 * Registro de lectura y escritura del Puerto QS.
PQSPAR EQU $FFFC16 * Asignación de pins como Puerto QS o como QPSI.
DDRQS EQU $FFFC17 * Dirección E/S de los pins del Puerto QS.
******************************************************************************
* CONTROL DEL QSM - SCI *
******************************************************************************
BIT_FE EQU 16 * Bit indicador de error de trama (Frame Error).
BIT_PE EQU 17 * Bit de error de paridad (Parity Error).
TRAMA_NULA EQU $FF * Valor de inicialización antes de recibir trama
ERR_TRAMA EQU $AA * Valor devuelto cuando hay error de trama
ERR_PARIDAD EQU $80 * Valor devuelto cuando hay error de paridad
******************************************************************************
* VECTORES DEL RESET *
******************************************************************************
ORG $0
PILA_RESET DC.L FIN_PILA
PC_RESET DC.L PRINCIPAL
******************************************************************************
* VECTORES DE INTERRUPCIÓN *
******************************************************************************
ORG $110
VECTOR_QSM DC.L LEER_SCI * Vector de interrupción $44
****************************************************************************** * PUNTERO DE PILA *
******************************************************************************
ORG $4000
PILA DS.L 200
FIN_PILA:
202
****************************************************************************** * BUFFER DE RECEPCIÓN *
******************************************************************************
ORG $2000
BUFFER DS.B 500
INI_BUFFER:
******************************************************************************
* SUBRUTINAS *
******************************************************************************
ORG $1000
******************************************************************************
* CONFIGURACION DEL HARDWARE DEL MICRO *
******************************************************************************
*************************** INHAB_WDOG ****************************
* Inhabilita el Watchdog que es una función de monitoriración del *
* sistema para detectar la entrada en un bucle infinito. *
*******************************************************************
INHAB_WDOG:
MOVE.B #$40,SYPCR * Inhabilitamos WatchDog
RTS
*----------------------------------------------------------------------------*
**************************** QSM_CFG *****************************
* Configuración del QSM_SCI *
******************************************************************
QSM_SCI_CFG
MOVE.W #$008F,QSMCR * Supervisor de arbitrio 15.
MOVE.B #$44,QIVR * Vector de interrupción $44.
MOVE.B #$06,QILR * Nivel de interrupción 6 para el SCI.
MOVE.W #$0A3D,SCCR0 * velocidad de TX/RX de 100 baudios.
RTS
*----------------------------------------------------------------------------*
************************** RECEPTOR_CFG **************************
* Configura y habilita el módulo receptor del QSM-SCI. Inhabi- *
* lita al tiempo el transmisor al tratarse de una comunicación *
* semi-duplex. *
******************************************************************
203
RECEPTOR_CFG
MOVE.W #$0424,SCCR1 * Interrupciones habilitadas para la recepción (RIE)
RTS * tramas de 7 bits + bit de paridad impar RTS
******************************************************************************
* RUTINAS DE CONTROL *
******************************************************************************
************************** LEER_SCI *****************************
* Rutina LEER_SCI de atención a la interrupción del modulo serie*
* El dato recibido se deja disponible en el registro D0 *
*****************************************************************
LEER_SCI
MOVE.L D1,-(A7)
MOVE.L SCSR,D1 * Lectura de los registros de estado y de datos.
* a la vez; se resetean los flags de estado.
* automáticamente.
BTST.L #BIT_FE,D1 * Se comprueba el error de trama.
BNE TRAMA_ERROR
BTST.L #BIT_PE,D1 * Se comprueba el error de paridad.
BNE PARIDAD_ERROR
ANDI.W #$007F,D1 * Nos quedamos con los bits 0 a 6 en D3.
MOVE.W D1,D0 * Copia en D0 el dato bueno.
BRA FIN_LECTURA
TRAMA_ERROR
MOVE.W #ERR_TRAMA,D0
BRA FIN_LECTURA
PARIDAD_ERROR
MOVE.W #ERR_PARIDAD,D0
FIN_LECTURA
MOVE.L (A7)+,D1
RTE
*----------------------------------------------------------------------------*
******************************************************************************
* PRINCIPAL *
******************************************************************************
ORG $400
PRINCIPAL
204
BSR INHAB_WDOG * Se inhabilita watchdog
BSR QSM_SCI_CFG * Se configura el QSM
MOVEA.L #INI_BUFFER,A0 * Carga dirección inicio del buffer de datos.
BSR RECEPTOR_CFG * Se activan las interrupciones del receptor
NUEVA_TRAMA
MOVE.W #TRAMA_NULA,D0 * Valor de cuando no se recibe trama.
BUCLE
CMP.W #TRAMA_NULA,D0 * Espera a la recepción de una trama
BEQ BUCLE
CMP.W #ERR_TRAMA,D0 * Comprueba si hay error en la trama
BEQ NUEVA_TRAMA
CMP.W #ERR_PARIDAD,D0 * Comprueba si hay error en la paridad
BEQ NUEVA_TRAMA
MOVE.B D0,(A0)+ * Copia la trama recibida en el buffer.
BRA NUEVA_TRAMA
END
205
Capítulo 8
Interfaz para línea telefónicaEl objetivo de esta interfaz es la utilización del servicio telefónico para transmitir
comandos mediante códigos numéricos a un sistema. De esta forma, gracias al carácter
universal del servicio, se pueden consultar desde cualquier punto las informaciones que
éste proporciona y transmitirle asimismo instrucciones.
8.1 Introducción
El sistema se compone de un circuito de conversación telefónico al que se conecta en un
extremo la línea y en el otro la entrada y la salida de audio. Además se ha incorporado
un circuito decodificador de tonos, que permite reconocer cualquier número que se
pulse. Algo tan sencillo abre un importante abanico de posibilidades, ya que permite
reproducir locuciones, reconocer secuencias de números pulsados e incluso utilizar una
aplicación de reconocimiento de voz.
Con el objeto de reducir la complejidad se ha subdividido en seis bloques
independientes que pueden ser montados y probados individualmente. En la Figura 1 se
puede observar el diagrama de bloques.
Figura 1 – Diagrama de bloques de la interfaz telefónica.
Haciendo una breve descripción de lo que hace cada bloque se puede decir que el
detector de llamada genera un pulso cada vez que se recibe el tono de llamada. Esto
permite conocer que se está recibiendo una llamada e incluso contar el número de
timbres. El gancho no es otra cosa que un conmutador que permite colgar y descolgar
atendiendo a una señal de encendido o apagado. El duplexor se encarga de la conversión
206
de dos a cuatro hilos, aislando además la línea telefónica del resto de la electrónica. Los
amplificadores son los responsables de la adaptación de niveles entre el duplexor y las
señales de entrada y salida de audio. El detector DTMF o de tonos tiene como fin
decodificarlos dando como resultado un número binario. Por último, mencionar el
circuito de alimentación encargado de filtrar y regular la tensión de alimentación.
Para comprender el funcionamiento de algunos módulos es necesario conocer algunas
especificaciones de la interfaz de línea analógica.
8.2 La línea telefónica
A continuación se describen los parámetros de mayor interés aplicables en el Punto de
Terminación de Red de la línea básica de usuario. Para mayor detalle se recomienda
consultar el documento de Telefónica de España, S.A.U.:
http://www.telefonica. e s /interfaces/do c _pdf/iteca001_v2.pdf
8.2.1 Alimentación en corriente continua
La alimentación consiste en un generador de tensión o de corriente que, a través de una
determinada resistencia o impedancia y de un par simétrico de hilos de cobre, se aplican
transversalmente entre los dos terminales del Punto de Terminación de Red (PTR, en
adelante).
La alimentación puede ofrecerse mediante dos sistemas:
Alimentación con puente convencional de baja resistencia.
Alimentación con limitación de corriente.
8.2.1.1Alimentación con puente convencional de baja resistencia
8.2.1.1.1 Tensión de alimentación en reposo
La tensión en los terminales del PTR, en condiciones de circuito abierto (tensión del
generador equivalente de Thevenin), se caracteriza por un valor nominal de 48 V. c. c.
que puede fluctuar entre 42 y 57 voltios.
El valor más usual para las resistencias del puente de alimentación es de 2 x 250
10%. Esta resistencia corresponde con la parte real de la impedancia del circuito de
línea. La resistencia máxima del bucle local de usuario, salvo casos excepcionales, no
supera el valor de 1200 ohmios.
207
8.2.1.1.2 Máximo consumo de corriente en situación de reposo
La corriente máxima que se puede extraer del PTR en estado de reposo es 1 mA. Si el
consumo es superior, no se garantiza el correcto funcionamiento de los equipos
conectados al PTR.
8.2.1.1.3 Corriente de línea en estado de línea tomada
La corriente de bucle viene dada por la Ley de Ohm, I=V/R, siendo R la resistencia
formada por el puente de alimentación, resistencia del bucle local de usuario y
resistencia equivalente del equipo terminal junto con la red interior del usuario.
8.2.1.2Alimentación con limitación de corriente
Es idéntico a lo establecido en el caso de puente convencional de baja resistencia, con la
diferencia de que la corriente a través del PTR durante el estado de línea tomada está
limitada. La limitación de corriente se realiza en un valor comprendido entre 36 y 49,5
mA.
Cuando el equipo terminal demande una corriente inferior al límite, ésta vendrá
determinada por la ley de Ohm.
8.2.1.3Polaridad
La polaridad que se proporciona entre los terminales del PTR no está predeterminada.
Además, es habitual que se produzcan cambios de polaridad durante el establecimiento
y final de la comunicación, ya que es normal que las centrales utilicen el cambio de
polaridad como forma de señalización.
8.2.2 Criterios de estado de la línea
Las corrientes de bucle determinantes de la toma y liberación de la línea en el PTR, se
fijan de acuerdo con los siguientes criterios:
1. En situación de bucle abierto, la red nunca interpreta que se ha
producido cierre de bucle cuando la corriente se mantiene por debajo
de 6 mA.
2. En situación de bucle abierto, la red interpreta que se ha producido
cierre de bucle cuando la corriente supera los 15 mA.
208
3. En situación de bucle cerrado, la red nunca interpreta que se ha
producido una apertura del bucle cuando la corriente se mantiene por
encima de 15 mA.
4. En situación de bucle cerrado, la red siempre interpreta que se ha
producido una apertura del bucle cuando la corriente disminuye de 6
mA.
8.2.3 Nivel máximo a la entrada del PTR
8.2.3.1Nivel medio máximo de transmisión
El nivel medio máximo de potencia activa generado a la entrada del PTR desde la red
interior de usuario debe ser inferior a –10 dBm respecto a la impedancia de referencia
de 600 durante un periodo de 10 segundos.
8.2.3.2Nivel de pico máximo
El nivel de pico máximo a la entrada del PTR generado desde la red de usuario debe ser
inferior a 1,5 V., medida sobre una resistencia de 600 conectada a los terminales de
línea.
8.2.4 Señal (corriente) de llamada
Es la señal alterna sinusoidal que la red presenta en el PTR de la línea llamada para
indicar la existencia de una llamada entrante.
La corriente de llamada se presenta en el PTR superpuesta a la tensión de alimentación
de corriente continua de la red.
Las características de la señal de llamada medidas en circuito abierto en el PTR se
detallan en la tabla siguiente:
CARACTERÍSTICA REQUISITOS
Frecuencia 25 Hz 3 Hz
Forma de onda Sinusoidal
Tensión alterna (valor eficaz) 75 V 10 %
Resistencia interna del generador de señal de llamada.
200
Tiempo máximo de aplicación 60 s.
209
Cadencia de la señal de llamada
1500 ms 10 % (on) / 3000 ms 10% (off)
Distorsión 5 %
Método de aplicación Superpuesta a la corriente continua
Tabla 1 – Características de la señal de llamada.
8.3 Descripción modular y montaje del sistema
El conjunto del sistema ofrece un punto de conexión al PTR, una entrada y una salida
de audio que permiten conectar un reproductor cualquiera (radiocasete portátil, por
ejemplo) en la entrada y unos auriculares o una grabadora, etc. en la salida. También
lleva acoplado un conector para el control del dispositivo. A través del mismo se
ofrecen y reciben las siguientes señales:
FUNCIÓN SENTIDO
Aviso de llamada Salida
Cierre / apertura del bucle Entrada
Aviso de recepción de tono Salida
Bit 0 - Tono recibido (Bit menos significativo)
Salida
Bit 1 - Tono recibido Salida
Bit 2 - Tono recibido Salida
Bit 3 - Tono recibido (Bit más significativo)
Salida
Tabla 2 – Señales de control.
Los diferentes módulos que componen el sistema se describen a continuación:
8.3.1 Detector de llamada
Este módulo tiene como misión detectar la corriente de llamada en la línea y generar
una señal que pueda ser tratada digitalmente. El circuito detector, como se puede ver en
la Figura 2, consiste de un filtro paso alto para eliminar la corriente continua seguido de
un rectificador de onda completa. La corriente rectificada excita el LED de un
optoacoplador cuando supera el umbral de 36 V impuesto por el diodo zener con el
210
objeto de discriminar la señal de llamada de otras de menor amplitud, como podría ser
la propia conversación. En el transistor del optoacoplador se obtiene algo parecido a un
tren de impulsos con una frecuencia de 50 Hz. que, convenientemente filtrados,
conforman un pulso invertido coincidente con la duración del tono.
El filtro paso alto está formado por una resistencia de 10 K y un condensador de
alterna de 1F y 100 V., cuya frecuencia de corte es 15,92 Hz. y, por tanto, permite el
paso de la señal de 25 Hz.
f c=1
2π RC= 1
2 π⋅104⋅10−6=15 , 92 Hz
Figura 2 – Circuito detector de llamada.
El zener sólo permite el paso de corriente cuando se supera su tensión umbral. Esto
sucede cuando la amplitud de la sinusoide de llamada es superior a la tensión del zener
más las de polarización del LED y los diodos del puente rectificador, aproximadamente
36 + 2,5 = 38,5 V. Como resultado, el diodo pasa por sucesivos estados ON/OFF (uno
por cada semiciclo de la señal de llamada) generando un tren de pulsos de frecuencia 50
Hz., con aspecto similar al que se muestra en la figura 3.
211
Figura 3 – Impulsos de corriente en el diodo LED.
En el colector del fototransistor se obtiene una señal cuadrada e invertida respecto de la
anterior, como la que podemos observar en la figura 4.
Figura 4 – Tensión de colector con tono de llamada presente.
Con el condensador de 10 F entre el colector y masa, se eliminan los impulsos gracias
a la elevada constante de tiempo del conjunto R-C. La tensión en el colector viene dada
por la expresión:
V C=V CC⋅(1−e− t
RC )=5⋅(1−e−t )
De la ecuación se desprende que para la duración de los pulsos (5 ms.) la tensión que
alcanza el colector es de 25 mV.
“El resultado final es una tensión de 5 V. (1 lógico) en estado de reposo y que cambiará a 0 V. (0
lógico) mientras esté presente la corriente de llamada, lo que va a permitir, incluso, contar el
número de timbrazos.”
Para montar este módulo se deberá poner especial cuidado en la polaridad de los
múltiples diodos. Para la prueba basta con alimentarlo y conectarlo a la línea telefónica.
Como su funcionamiento es independiente del resto de módulos, por razones de
comodidad al conectarlo, se recomienda probarlo una vez montados el gancho y el
212
regulador de tensión. La prueba consistirá en llamar y comprobar el cambio de tensión
en el colector del optotransistor.
AVISO IMPORTANTE: No utilizar nunca el osciloscopio para medir
directamente sobre la línea telefónica, ya que se podría provocar una avería. En caso
de ser necesaria la realización de alguna medida, puede utilizarse un polímetro. El
objetivo principal que se persigue con el uso del optoacoplador es el aislamiento de la
línea telefónica del resto de la electrónica, tanto por razones de seguridad, como para
evitar que un fallo en un lado afecte al otro. También hay que mencionar que no existe
conexión entre la masa a un lado y a otro del optoacoplador.
8.3.2 Alimentación
Todos los módulos se alimentan a 5 V., por lo que se ha usado un sencillo regulador
7805 de tres terminales que proporciona 5 V. estables en su patilla de salida. La
intensidad máxima que puede proporcionar es de 1,5 amperios y la tensión a la entrada
ha de ser superior a 7 voltios para que funcione correctamente. La elección de 9 V. es
por la existencia de pilas de ese voltaje en el mercado, pero podría ser cualquier otro
que superase el umbral. Por ejemplo existen adaptadores comerciales que ofrecen 7,5 V.
En la figura 5 puede verse el esquema de conexión.
Figura 5 – Regulador de tensión.
Los tres condensadores de la entrada son: uno cerámico, otro de plástico y el tercero
electrolítico, para el correcto filtrado de la alta, media y baja frecuencia
respectivamente.
La red en “pi” de la salida incluye un choque (VK200) para filtrar espúreos a través de
masa. En caso necesario, la red completa puede simplificarse dejando un único
condensador de filtro.
Con respecto al montaje y prueba del circuito no se observa ninguna dificultad.
213
8.3.3 Gancho automático
Merece la pena comenzar aclarando el porqué de la denominación “gancho”. El origen
data de los primeros tiempos de la telefonía y hace referencia al gancho donde se
colgaba el auricular finalizada la conversación. Este gancho por el propio peso del
auricular accionaba un conmutador que cortaba la comunicación. En nuestro caso
apenas se reduce a un pequeño relé de tan sólo un par de centímetros cúbicos.
En reposo conecta la línea con el circuito de timbre y al alimentar el relé conmuta al
circuito de conversación. Debido al elevado consumo del relé se utiliza un transistor
para la conmutación. El diodo tiene como fin la descarga de la bobina del relé cuando el
transistor corta.
El montaje y prueba del circuito no reviste dificultad alguna.
Figura 6 – Gancho automático.
8.3.4 Duplexor
Este módulo es el responsable de la conversión de dos a cuatro hilos y del aislamiento de la línea telefónica. Véase en detalle el funcionamiento:
Figura 7 – Duplexor
214
Lo primero que se observa es una resistencia y un puente rectificador de diodos. Este
último puede ocasionar algún quebradero de cabeza si no se cae en la cuenta de que su
función no es la de rectificar, sino la de ofrecer una polaridad fija independientemente
de la que presente la línea en todo momento, recuérdese que la polaridad de la línea no
está predeterminada y además puede cambiar durante la conversación.
El diodo zener tiene como fin proteger el resto de la circuitería contra sobretensiones.
La resistencia de 820 junto con la que presenta la línea cuando se encuentra tomada,
limitan, a su vez, la corriente máxima por el zener. El condensador cerámico de 10 nF
eliminará los picos de alta frecuencia no deseados.
El optoacoplador que se observa guarda la clave del funcionamiento de este módulo.
Utiliza un par fotodiodo-fototransistor para cada sentido de la conversación. Es el
responsable de la conversión de dos a cuatro hilos y del aislamiento de la línea
telefónica. Para un correcto funcionamiento del circuito de conversación, debe
polarizarse adecuadamente y presentar una impedancia que garantice el correcto cierre
del bucle.
8.3.4.1Cálculo de la polarización
Para cerrar el bucle es necesario que la corriente sea superior a 15 mA. El principal
problema que se plantea es que, dependiendo de la distancia entre el PTR y la central de
conmutación, la parte real de la impedancia que presenta la línea puede variar desde un
mínimo de 500 cuando la distancia es muy corta (centralitas privadas, por ejemplo) y
un máximo de 1200 como caso peor para distancias muy largas. La resistencia de
carga (RIT) ofrecida por la interfaz telefónica (equipo terminal) ha de ser tal que
funcione correctamente con independencia de la línea a que se conecte.
Se ha partido de las dos condiciones de diseño siguientes:
Un mínimo de corriente de 20 mA para garantizar siempre la apertura
del bucle.
Un máximo de corriente de 30 mA para evitar que la central limite la
corriente.
En los casos límite se tendrá:
La resistencia máxima para garantizar una corriente de bucle superior
a la mínima es:
215
I L=
V L
RLmax+R IT
≥20 mA
R IT≤V L
20 mA−RLmax=
4820⋅10−3
−1200=1200
La resistencia mínima para garantizar una corriente de bucle inferior
a la máxima es:
I L=
V L
RLmin+R IT
≤30 mA
R IT≥V L
30 mA−R Lmin=
4830⋅10−3
−500=1100
Por tanto, la resistencia podrá tomar cualquier valor dentro del margen posible,
escogiendo finalmente el valor central:
1100≤R IT≤1200
La resistencia RIT depende de dos parámetros de diseño, que son las resistencias R1 y
R2, y la corriente que circula por el optotransistor y de otros dos de la línea, que son la
parte real de la impedancia de línea, RL y la tensión en circuito abierto VL (generador
equivalente de Thevenin).
R IT=R1+R2(V L
I TRT
−(R1+RL )
V L
I TRT
+R2 )Como una primera aproximación, que por lo general será suficiente para el objetivo que
se pretende, se tomará la siguiente expresión:
R IT=R1+0,4⋅R2
El valor obtenido no va a diferir mucho del real, habida cuenta que tanto los parámetros
de la línea como los de diseño han de tomar unos valores razonables comprendidos
dentro de las cotas de diseño. Por ejemplo, la tensión nominal de línea de 48 V, la
corriente en el TRT de 15 mA, la resistencia de línea de 850 , etc.
Para los valores de R1 = R2 = 820 la resistencia RIT podrá tomar, en función de la
resistencia de la línea, RL, valores comprendidos entre 1060 y 1200 , por lo que la
216
corriente por el fotodiodo estará comprendida entre 20 y 30 mA. El fototransistor
colocado en paralelo con la resistencia de 820 será el responsable de inyectar en la
línea la señal de audio. Se ha fijado una corriente de polarización de unos 15 mA.,
mediante la resistencia de 180 que limita la corriente por su respectivo fotodiodo.
Debe tenerse en consideración que las resistencias R1 y R2 pueden llegar a disipar las
potencias de 0,6 W y 0,2 W, por lo que es recomendable montar resistencias de 1W y ½
W respectivamente.
La tensión en el diodo zener oscilará entre:
4 .2≤V Z≤10 . 6
8.3.4.2Transmisión de la señal
8.3.4.2.1 Recepción de la señal vocal
La señal telefónica se recibe como una corriente eficaz superpuesta a la continua que
recorre el bucle. En la figura 8 se describe el circuito equivalente de señal.
Figura 8 – Circuito equivalente de recepción de señal.
Si se considera que la señal está producida por un generador de corriente, is1, y llega al
PTR con una potencia P1 (100 W aproximadamente), el valor de esta corriente será:
is 1=√ P1
R1+R2
≃√10−4
1640=247
A.
La corriente por el fototransistor es de un 60% aproximadamente y, por tanto, la tensión
en colector es de:
vs1=0 .6⋅RC⋅i s1=0 .6⋅220⋅247⋅10−6=32 mV
Los valores referidos son corrientes y tensiones eficaces. La tensión pico-pico que se
puede medir con un osciloscopio es 110 mVpp.
217
8.3.4.2.2 Transmisión de la señal vocal
El circuito equivalente de señal para la transmisión se muestra en la figura 9.
Figura 9 – Circuito equivalente de transmisión de señal.
La corriente en la línea iL se modula con la corriente is2 del fototransistor y dependerá de
la parte real de la impedancia de la línea, RL que como modelo se considerará de 600 .
iL=R2
RL+R1+R2
⋅is 2
Para la potencia media máxima de 100 W que se puede inyectar en el PTR con una
impedancia de carga en línea de 600 , la corriente eficaz media en el fototransistor es:
is 2=RL+R1+R2
R2
⋅iLiL=√ P
RL
is 2=600+820+820820
⋅√10−4
600=1 .1
mA
La corriente eficaz máxima en el fotodiodo ha de ser de 1,82 mA. Esta corriente se le
suma a la de polarización del diodo mediante una resistencia de 1K y por tanto la
tensión eficaz máxima a aplicar en este punto será de 1,82V.
8.3.4.3Montaje y prueba del circuito
Este módulo es el más complejo en cuanto al montaje y prueba. Debe cuidarse muy bien
la polaridad de los componentes, ya que puede ser bastante fácil equivocarse.
Supóngase que una vez montado y comprobado el correcto cableado, la conexión y
polaridad de todos los componentes el duplexor sigue sin funcionar. Pues bien, a
continuación se relacionan una serie de comprobaciones que pueden ayudar a
determinar el origen del fallo:
Colocar la sonda del osciloscopio en el colector del fototransistor de entrada de señal.
Conectar la línea telefónica y cerrar el bucle con el gancho. Se debe observar en el
218
osciloscopio una sinusoide de 425 Hz. y unos 100 mV de amplitud. Esta señal es la de
invitación a marcar, por lo que la recepción es presumiblemente correcta (nótese que
sólo está presente durante 20 segundos de una forma continua y durante otro minuto
más de forma intermitente, por lo que se deberá abrir y cerrar el bucle cada minuto
aproximadamente para no perder el tono).
Si no aparece, realizar las siguientes comprobaciones:
Medir la tensión en bornes de R1 y calcular la corriente que pasa por
ella mediante la ley de Ohm. Debe dar un valor entre 20 y 30 mA.
Si es superior a 35 mA es probable que la central esté limitando la
corriente. Es muy posible que debido a un cortocircuito la
impedancia sea muy baja. Se recomienda revisar todas las conexiones
y comprobar la correcta polaridad de los componentes especialmente
los diodos y el puente rectificador.
Si es nula o muy pequeña es posible que el circuito esté abierto o que
algún componente se haya quemado o esté defectuoso. Obsérvese
que las resistencias R1 y R2 son de 1W y ½ W respectivamente y si
no se ha respetado han podido quemarse.
Medir la tensión en bornes del diodo zener que deberá estar
comprendida entre 4,2 V y 10.6 V.
Si vale 15 V es porque el diodo ha entrado en avalancha y está
limitando la tensión. La causa puede ser alguna de las siguientes:
La rama del optoacoplador está en circuito abierto (por ejemplo, el
fotodiodo se ha quemado).
La corriente por la resistencia R2 es superior a lo debido.
Si vale menos de 1 V puede deberse a:
Un cortocircuito en la rama del optoacoplador o en el condensador
cerámico.
El diodo zener está cortocircuitado o se ha montado al revés y
conduce en directa.
El puente de diodos se ha montado mal o está averiado.
219
Para comprobar la rama del optoacoplador pueden seguirse los
siguientes pasos:
Con la línea desconectada, sacar la resistencia R2 y comprobar que
no se ha quemado midiendo su valor de 820 . Sustituir si es
necesario.
Con la línea conectada medir la tensión en R2.
Si vale 0 V el circuito está cortado, probablemente en el fotodiodo.
Compruébense las conexiones, el fotodiodo y el fototransistor. En
alguno de estos puntos debe estar el problema. Debe considerarse
que un cortocircuito en el fototransistor o en R2 puede quemar el
fotodiodo.
Si vale 13,8 V la rama está saturada en corriente. En bornes del diodo
zener se han alcanzado 15 V y éste conduce todo el excedente de
corriente. Posiblemente se deba a que el fototransistor no
conduce o que la corriente es insuficiente y no alcanza los 15 mA
de diseño. Abrir la rama y medir la corriente con un amperímetro.
Como se conoce la corriente en la línea (medida en R1), las leyes
de Kirchhoff permiten determinar la corriente por cada rama y
deducir la causa del problema. Si se debe a que la corriente por el
fototransistor no es correcta, comprobar la corriente que pasa por
su fotodiodo y calcular la relación de transferencia, para ello
medir la tensión en resistencia de 180 que limita la corriente en
el fotodiodo. Calcular la resistencia adecuada.
Medir la tensión en el fotodiodo. Debe ser de 1.2 V
aproximadamente.
Medir con el polímetro la tensión en bornes de la resistencia de
colector del fototransistor de entrada y comprobar que no está
saturado.
Para comprobar la correcta transmisión inyectar una señal de 1 Khz
(o menos) y 2.8 Vpp (1 Vrms) en la entrada. Llamar desde otro
220
teléfono, cerrar el bucle con la señal CONEC del gancho y se deberá
escuchar el pitido al otro lado. También aparecerá en el colector del
optotransistor de recepción debido a la realimentación que se
produce.
Importante: Pasados 80 segundos la central pasa al estado de línea aparcada,
manteniendo sólo una corriente de supervisión de tan sólo 6 mA, estado en el cual no
funciona nada (de ahí la importancia de abrir y cerrar el bucle cada minuto).
8.3.5 Amplificadores
Los amplificadores son necesarios para la adaptación de las señales. El amplificador de
audio LM 386 se eligió en un principio para la etapa de salida, ya que era necesario
suministrar la potencia suficiente para alimentar unos auriculares. Después se valoraron
otras ventajas como son:
Montaje extremadamente sencillo que no precisa apenas de
componentes externos para funcionar en condiciones normales.
Funciona con alimentación asimétrica a 5 V.
Éstas motivaron que se utilizase también para la etapa de entrada, sobre todo por la
alimentación, ya que el sobrecoste que implica frente a un operacional convencional se
ve ampliamente compensado al no tener que montar una fuente de alimentación
simétrica.
En la entrada de la etapa de salida se ha incorporado un filtro RC con una frecuencia de
corte de 3400 Hz para eliminar el soplido de alta frecuencia, ya que los optoacopladores
utilizados son muy ruidosos y con esta medida mejora un poco.
221
Figura 10 – Amplificadores de entrada y salida.
8.3.6 Detector de tonos (DTMF)
La señalización de usuario a la red se puede realizar de dos formas:
Mediante señalización a impulsos consistentes en aperturas y cierres
del bucle local con una duración determinada para que la red no
interprete que se ha producido la apertura del bucle (habitualmente
10 ips con relaciones apertura/cierre en % de 50/50 o 70/30).
Mediante señalización a multifrecuencia por aplicación de pares de
tonos (DTMF, Dual Tone MultiFrecuency) de características
especificadas por ETSI en el documento ETR 206 [5].
La señalización a multifrecuencia consiste en transmitir a través de la red de un par de
frecuencias pertenecientes cada una a uno de los dos grupos de cuatro frecuencias. Las
cuatro frecuencias del grupo bajo junto con las cuatro del grupo alto permiten señalizar
un total de 16 dígitos, que son “1, 2, 3, 4, 5, 6, 7, 8, 9, 0, *, #, A, B, C, D”, según la
especificación ETSI ETR 206 [5]. Por el momento, en la red de Telefónica de España
S.A.U., no se utilizan los caracteres A, B, C y D.
222
Figura 11 – Croquis de un teclado DTMF con las frecuencias asociadas.
Aprovechando la capacidad de los aparatos de teléfono actuales de generar la
señalización a multifrecuencia se ha incorporado en la interfaz de línea telefónica un
receptor de tonos del fabricante MITEL modelo MT8870. El esquema de conexión
propuesto por el fabricante se muestra en la figura 12.
Figura 12 – Receptor y decodificador de tonos.
La señal procedente del módulo de amplificación se aplica a la entrada DTMF. Cada
vez que se recibe un tono, se genera un pulso positivo en la salida TR para indicar que
el código del número recibido está disponible en la salidas Q1-Q4. En la tabla 3 puede
consultarse la correspondencia entre los dígitos marcados, los tonos y el código binario.
Esta facilidad agregada a la interfaz abre un importante abanico de posibilidades. Se
pueden implementar aplicaciones de control remoto, que tras la identificación del
usuario mediante un código, permitan activar o desactivar dispositivos, o bien un
sistema de telepago con tarjeta, etc.
223
fbaja falta Nº Q4 Q3 Q2 Q1
697 1209 1 0 0 0 1
697 1336 2 0 0 1 0
697 1477 3 0 0 1 1
770 1209 4 0 1 0 0
770 1336 5 0 1 0 1
770 1477 6 0 1 1 0
852 1209 7 0 1 1 1
852 1336 8 1 0 0 0
852 1477 9 1 0 0 1
941 1209 0 1 0 1 0
941 1336 * 1 0 1 1
941 1477 # 1 1 0 0
697 1633 A 1 1 0 1
770 1633 B 1 1 1 0
852 1633 C 1 1 1 1
941 1633 D 0 0 0 0
Tabla 3 – Codificación de las señales DTMF.
8.4 Ejemplos de aplicaciones
8.4.1 Rutinas básicas de gestión del interfaz
******************************************************************************
* REGISTROS SIM *
******************************************************************************
SIMCR EQU $FFFA00 * Controla la configuración del sistema ($00CF).
SYNCR EQU $FFFA04 * Fija frecuencia y modo de operación del reloj ($3F08).
RSR EQU $FFFA06 * Guarda la causa de un reset (Ej.-$80, reset hardware).
PORTE EQU $FFFA11 * Registro de lectura y escritura en el puerto E.
PORTE1 EQU $FFFA13 * Tiene exactamente la misma función que el anterior.
DDRE EQU $FFFA15 * Determina el sentido del puerto E pin a pin.
PEPAR EQU $FFFA17 * Asignación del puerto E (Puerto o control de BUS).
PORTF EQU $FFFA19 * Registro de lectura y escritura en el puerto F.
PORTF1 EQU $FFFA1B * Tiene exactamente la misma función que el anterior.
DDRF EQU $FFFA1D * Determina el sentido del puerto F pin a pin.
PFPAR EQU $FFFA1F * Asignación del puerto F (Puerto F o control de BUS).
PICR EQU $FFFA22 * Configuración de interrupciones periódicas ($000F).
PITR EQU $FFFA24 * Contiene la cuenta del timer periódico ($0000).
224
SYPCR EQU $FFFA21 * Controla las funciones de monitorización del sistema
* como es el caso del Watchdog. ($40 anula watchdog).
SWSR EQU $FFFA27 * Se debe escribir periódicamente con Watchdog activado.
CSPAR0 EQU $FFFA44 * Sirve junto con CSPAR1 para configurar la función de
CSPAR1 EQU $FFFA46 * los pins de Chip Select (CS, Port C, etc.).
PORTC EQU $FFFA41 * Registro de escritura en el puerto C.
******************************************************************************
* REGISTROS GPT-PWM *
******************************************************************************
GPTMCR EQU $FFF900 * Configuración del GPT.
ICR EQU $FFF904 * Configuración de interrupciones del GPT.
DDRGP EQU $FFF906 * Determina el sentido del puerto GP.
PORTGP EQU $FFF907 * Registro de lectura y escritura del puerto GP.
OC1M EQU $FFF908 * Máscara para asignar los pin de captura de OC.
OC1D EQU $FFF909 * Registro de datos a comparar con el puerto OC.
TCNT EQU $FFF90A * Registro del GPT asociado a las capturas IC, OC y PAI.
PACTL EQU $FFF90C * Configuración del acumulador de pulsos PAI.
PACNT EQU $FFF90D * Es el contador de registro de eventos del PAI.
TIC1 EQU $FFF90E * Capturan el TCNT cuando se registra un evento en IC1.
TIC2 EQU $FFF910 * Capturan el TCNT cuando se registra un evento en IC2.
TIC3 EQU $FFF912 * Capturan el TCNT cuando se registra un evento en IC3.
TOC1 EQU $FFF914 * Cuando coincide con TCNT causa eventos en los pin OC.
TOC2 EQU $FFF916 * Si el valor coincide con TCNT causa un evento en OC2.
TOC3 EQU $FFF918 * Si el valor coincide con TCNT causa un evento en OC3.
TOC4 EQU $FFF91A * Si el valor coincide con TCNT causa un evento en OC4.
TI4O5 EQU $FFF91C * Pin compartido (Puede realizar una función TIC o TOC).
TCTL1 EQU $FFF91E * Configura el modo de comparación y nivel de salida.
TCTL2 EQU $FFF91F * Configura que flanco provoca la captura en los IC.
TMSK1 EQU $FFF920 * Habilita las interrupciones de IC y OC.
TMSK2 EQU $FFF921 * Habilita las interrupciones del PAI y del TIMER.
TFLG1 EQU $FFF922 * Registro de flags de interrupciones de IC y OC.
TFLG2 EQU $FFF923 * Registro de flags de interrupciones del PAI y TIMER
CFORC EQU $FFF924 * Fuerza una salida en los pin OC y PWM.
PWMC EQU $FFF925 * Configuración del PWM.
PWMA EQU $FFF926 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMB EQU $FFF927 * Determina el ancho de pulso. ($80 es medio ciclo)
PWMCNT EQU $FFF928 * Registro del contador del PWM.
PWMBUFA EQU $FFF92A * Buffer para prevenir glitches cuando modificamos PWMA.
225
PWMBUFB EQU $FFF92B * Buffer para prevenir glitches cuando modificamos PWMB.
PRESCL EQU $FFF92C * Guarda el valor del multiplicador del GPT.
******************************************************************************
* TIPOS DE RETARDO *
******************************************************************************
CORTO EQU $03FF * Del orden de 100us.
MEDIO EQU $03FF * Del orden de 1ms.
LARGO EQU $BFFF * Del orden de 5ms.
RETARDO EQU $6FFF * Se usa para el avance de caracteres.
******************************************************************************
* CONSTANTES DE INTERÉS *
******************************************************************************
NUM_TIMBRES EQU 4
******************************************************************************
* CONTROL DEL INTERFAZ TELEFÓNICO *
******************************************************************************
PUERTO EQU PORTF * Puerto de comunicación con el interfaz.
BIT_TONO EQU 4 * Se pone a 1 durante un tiempo al recibirse un tono.
BIT_TIMBRE EQU 5 * Se pone a 1 cuando aparece el timbre de llamada.
BIT_GANCHO EQU 6 * 0 colgado y 1 para descolgar.
******************************************************************************
* VECTORES DEL RESET *
******************************************************************************
ORG $0
PILA_RESET DC.L FIN_PILA
PC_RESET DC.L PRINCIPAL
****************************************************************************** * PUNTERO DE PILA *
******************************************************************************
ORG $4000
PILA DS.L 200
FIN_PILA:
226
******************************************************************************
* SUBRUTINAS *
******************************************************************************
ORG $1000
******************************************************************************
* CONFIGURACION DEL HARDWARE DEL MICRO *
******************************************************************************
*************************** INHAB_WDOG ****************************
* Inhabilita el Watchdog que es una función de monitoriración del *
* sistema para detectar la entrada en un bucle infinito. *
*******************************************************************
INHAB_WDOG:
MOVE.B #$40,SYPCR * Inhabilitamos WatchDog
RTS
*----------------------------------------------------------------------------*
*************************** PORT_F_CFG ****************************
* Con esta rutina se configura el puerto F con el que se comunica *
* con el interfaz telefónico. *
*******************************************************************
PORT_F_CFG
MOVE.B #$40,DDRF * PF0..PF3 entradas, PF4..PF7 salidas.
MOVE.B #$00,PFPAR * Configura el registro de control del puerto F.
MOVE.B #$00,PORTF
RTS
*------------------------------------------------------------------*
****************************************************************************** * RUTINAS DE CONTROL *
******************************************************************************
***************************** DELAY *******************************
* Produce un retardo cuya duración viene determinada por el valor *
* almacenado en el registro D1. *
*******************************************************************
DELAY
SUB.L #1,D1
BNE DELAY
RTS
227
************************* LLAMADA_ESPERAR *************************
* Esta rutina se queda esperando hasta que se activa el bit de *
* llamada y descuelga tras un número de timbrazos definido por la *
* constante NUM_TIMBRES. *
*******************************************************************
LLAMADA_ESPERAR
MOVE.L D0,-(A7)
MOVE.L #NUM_TIMBRES,D0
NO_HAY_TIMBRE
BTST.B #BIT_TIMBRE,PUERTO
BNE NO_HAY_TIMBRE
HAY_TIMBRE
BTST.B #BIT_TIMBRE,PUERTO
BEQ HAY_TIMBRE
SUBQ #1,D0
BNE NO_HAY_TIMBRE
BSET.B #BIT_GANCHO,PUERTO
MOVE.L (A7)+,D0
RTS
*-------------------------------------------------------------------*
***************************** COLGAR ******************************
* Esta rutina cuelga desactivando el relé del gancho automático. *
*******************************************************************
COLGAR
BCLR.B #BIT_GANCHO,PUERTO
RTS
*-------------------------------------------------------------------*
************************** TONO_RECIBIR ***************************
* Esta rutina lee el decodificador de tonos y devuelve a través *
* del registro D0 el tono recibido. *
*******************************************************************
TONO_ESPERAR
CLR.L D0
ESPERAR_TONO
BTST.B #BIT_TONO,PUERTO
BNE ESPERAR_TONO
MOVE.B PUERTO,D0
228
ANDI.B #$0F,D0
RTS
*----------------------------------------------------------------------------*
************************* DRIVER_INTER_TEL ************************
* Esta rutina realiza el servicio indicado a través del registro *
* D7 con un número ordinal. Para llamar a la rutina de servicio *
* se coloca el número de servicio en el registro D7 y se ejecuta *
* un TRAP #0. *
*******************************************************************
DRIVER_INTER_TEL
CMP.B #1,D7
BEQ SERVICIO1
CMP.B #2,D7
BEQ SERVICIO2
CMP.B #3,D7
BEQ SERVICIO3
BRA FIN
SERVICIO1
BSR LLAMADA_ATENDER
BRA FIN
SERVICIO2
BSR COLGAR
BRA FIN
SERVICIO3
BSR TONO_RECIBIR
FIN
RTE
*----------------------------------------------------------------------------*
****************************************************************************** * PRINCIPAL *
******************************************************************************
ORG $400
PRINCIPAL
BSR INHAB_WDOG
BSR PORT_F_CFG
MOVE.B #00,PUERTO
NUEVA_LLAMADA
229
MOVE.B #2,D7 * Llamada al servicio colgar
TRAP #0
MOVE.B #1,D7
TRAP #0 * Descuelga cuando entra una llamada
BUCLE
MOVE.B #3,D7
TRAP #0 * Recibe un tono y lo guarda en D0
CMP.B #C,D0 * Comprueba si es la tecla “#”
BEQ NUEVA_LLAMADA * Si lo es cuelga y espera una nueva llamada
BRA BUCLE * Si no lo es espera recibir otro tono
END
230
ConclusionesAl consistir el proyecto en el diseño de prácticas guiadas para el montaje de interfaces y
dispositivos, las conclusiones están determinadas por cada una de éstas.
El montaje de los circuitos electrónicos de cada práctica supone una dedicación y
esfuerzo razonable por parte de los alumnos, además de ser de bastante utilidad y recibir
muy buena aceptación. Los diferentes circuitos varían desde un mínimo de complejidad,
como son el teclado, el display y los módulos de transmisión por radio, hasta un
máximo en el caso del transmisor y receptor de infrarrojos y el interfaz telefónico.
Cuestión aparte merece la placa entrenadora del 68331. Debido a la complejidad de su
montaje, es importante que el alumno combine cierta habilidad y meticulosidad para no
cometer errores fatales. Por otro lado, el micro es un elemento delicado y crítico por ser
insustituible, de modo que cualquier daño que sufra llevará al traste todo el trabajo.
En el curso 99/00, en el que se inició esta experiencia docente, se apuntaron 31 parejas
para el montaje y realización de las prácticas de la asignatura de LSED (Laboratorio de
Sistemas Electrónicos digitales). Los resultados de los montajes fueron:
Tres placas no llegaron a funcionar después de montadas por causas
desconocidas.
Dos placas se quemaron durante la fase de montaje.
Tres más se quemaron durante el desarrollo de la prácticas.
En la mayoría de los casos los alumnos necesitaron un apoyo muy
importante por parte del coordinador de la asignatura D. Juan Manuel
Montero Martínez.
En resumen, un 25 % de los alumnos tuvo problemas que les imposibilitaron el
desarrollo normal de los trabajos. Del seguimiento que se ha podido hacer de las placas
se puede constatar que se han ido averiando presentando un cortocircuito interno. En
muchos de los casos no ha sido posible determinar la causa.
Como consecuencia, se desaconseja la realización de montajes tan complejos, más aún
cuando existen elementos críticos insustituibles.
231
Apéndice I
Técnicas de ConexionadoPara la interconexión de las componentes que van a constituir nuestros diseños,
utilizaremos dos técnicas:
I.1 Soldadura de estaño
Si describimos brevemente los pasos a seguir:
1. Retirar la longitud adecuada de aislante del hilo de cobre.
2. Estañar la punta del hilo desnudo (no si se dispone de hilo estañado).
3. Soldar, calentando con el soldador unos instantes y después
aplicando el hilo de estaño con decapante hasta fundir.
4. Dejar enfriar.
Debe tenerse especial cuidado en no calentar en exceso los componentes para evitar su
deterioro. También es importante cuidar la colocación del soldador para evitar
quemaduras accidentales.
Las principales ventajas que presenta son la robustez y fiabilidad de las conexiones.
Como principal inconveniente, la necesidad de cierta precisión en la soldadura del
cableado para evitar cortocircuitos indeseados. Ello hace que la técnica sea delicada y
laboriosa.
I.2 “Wrapping” o enrollado
Consiste en enrollar helicoidalmente la punta desnuda de un fino hilo de cobre alrededor
del terminal. Para ello nos ayudamos de una herramienta específica, tomando al final la
conexión un aspecto similar a un muelle.
I.2.1 Descripción de la herramienta
El “wrappinador” podría asemejarse a un bolígrafo acabado en ambos extremos en
sendas puntas cilíndricas. La más larga se usa para enrollar y la corta para desenrollar.
Ambas puntas presentan un agujero central donde se inserta el terminal sobre el que se
232
enrolla o desenrolla. El extremo largo presenta además otro orificio descentrado más
fino que comunica con una ranura lateral siguiendo la generatriz del cilindro y que se
usará para alojar el hilo de cobre. El utensilio tiene, además, en su parte central una
cuchilla peladora de cable.
I.2.1.1 Procedimiento de conexión:
1. Pelar de 20 a 25 mm., ayudándonos del pelador. Para evitar romper la
cuchilla es preferible introducir el hilo por el lado contrario a la
cuchilla, de modo que, al tirar del hilo, ésta queda asentada sobre la
herramienta.
2. Introducir el hilo desnudo por el agujero descentrado hasta el
aislante. Observaremos que sale por la ranura lateral.
3. Insertar la herramienta junto con el hilo en el terminal y, presionando
ligeramente, girar sin extraer la herramienta hasta que el hilo quede
completamente enrollado. Evitar una presión excesiva para que no se
monten las espiras.
Las principales ventajas son la facilidad, flexibilidad y fiabilidad del cableado, pudiendo
corregirse fácilmente errores de conexionado. Como inconvenientes cabe destacar la
necesidad de usar zócalos y terminales específicos, y el elevado precio de la
herramienta.
Hay componentes a los que no se puede aplicar esta técnica y que necesariamente hay
que soldarlos; por ello, emplearemos ambas técnicas, dejando la soldadura sólo para
aquellos casos en que su uso sea más adecuado.
233
Apéndice II
Estudio de viabilidad de la obtención de alimentación para un sistema de telemando telefónico de la propia líneaEn primera instancia precisamos conocer las características que, a nivel eléctrico,
presenta la línea de abonado. En este momento disponemos de las especificaciones de la
antigua CTNE para la línea de abonado ordinaria (LAO), las cuales deberemos
actualizar, pero entretanto, confiamos en que éstas no difieran mucho de las actuales, o
que las centrales de conmutación sigan respetando las mismas por razones de
compatibilidad tecnológica, hipótesis bastante razonable puesto que el servicio y los
terminales telefónicos no han sufrido variación sustancial.
II.1 Especificaciones del bucle de abonado
De la especificación 620.006 de la CTNE sobre los requisitos que deben cumplir las
centrales en cuanto a la línea de abonado ordinaria (LAO), extraemos aquellas
características que son de nuestro interés.
II.1.1 Características en corriente continua
Alimentación de 48V. nominales a través de un puente de 2 x 250
10% o con circuito limitador de corriente fijado a 45mA. 10%
para corrientes inferiores al límite y con tensión dependiente de la
resistencia de carga de la línea.
Resistencia del bucle completo con aparato descolgado de 1800
máximo.
Resistencia del par de hilos comprendida entre 0 y 1200.
Características del par de hilos como las de un cable subterráneo de
0.405mm:
Impedancia característica a 800Hz de 150 (1-j) con 286/Km y
50nF/Km.
Dos posibles estados del bucle:
234
Abierto: Se interpreta que se está en este estado si la corriente es
inferior a un valor entre 8.5 y 12mA 10%.
Cerrado: Se interpreta que se está en bucle cerrado si la corriente
del bucle es superior a un valor comprendido entre 12 y 13.5mA
10% y se tomará como paso a bucle abierto cuando la corriente
caiga por debajo de un valor entre 8.5 y 9.5mA 10%.
II.2 Especificaciones del aparato de abonado
De la especificación Nº 315.022 de la CTNE sobre estos aparatos, nos interesa sólo:
II.2.1 Características en corriente continua
En estado colgado la impedancia ha de ser superior a 100K, en
conversación no será superior a 600.
II.3 Hipótesis de partida
A partir de las especificaciones efectuamos algunas suposiciones que nos permiten
obtener una primera aproximación:
II.3.1 Estado de bucle abierto
Para garantizar que la central detecte este estado, en el caso peor la corriente deberá ser
inferior a 7.65mA (8.5 menos el 10%=7.65). Si sobre este valor respetamos un margen
de seguridad de un 5% por posibles fluctuaciones en la carga, la corriente máxima que
podremos extraer es de 7.25mA.
Como el sistema de telemando está pensado para utilizarse en entornos domésticos o
pequeñas oficinas, lo normal será que la línea no esté dedicada y, por tanto, tenga otros
terminales conectados en paralelo. Como la resistencia de carga en continua de un
terminal ha de ser mayor que 100K, la corriente consumida por los mismos será
inferior a 500A. Respetando el caso común de tener dos aparatos conectados a la línea,
la máxima corriente que podremos extraer será 6.25mA.
La potencia disponible en este estado es:
PA=V A⋅I A=(48−2⋅250⋅6 . 25⋅10−3)⋅6 .25=280 mW
235
II.3.2 Estado de bucle cerrado
En este estado consideraremos:
La única carga en continua sobre la línea es la que origina el circuito
de extracción de corriente, lo que significa que el muestreo e
inserción de señal se hace con una impedancia en continua infinita
(muy alta).
El circuito deberá ser inmune a la polaridad de la línea, y
comportarse como una carga resistiva de 600.
Bajo estas hipótesis, la potencia disponible en bucle cerrado será:
PC=V C⋅IC=R⋅IC2 =600⋅(48
600+2⋅500 )=1 .14 W
II.3.3 Eficiencia de la fuente
Partimos de la hipótesis de una fuente de alto rendimiento. Según la documentación
consultada, tomamos como referencia el regulador conmutado MC34129, cuyo diseño
es específico para este tipo de aplicaciones y con el que se obtienen eficiencias del
orden del 75%.
II.4 Potencia final disponible
La potencia que al final tendremos disponible para nuestra aplicación será:
Bucle abierto:
PBA=η⋅PA=0 .75⋅280=210 mW
Bucle cerrado:
PBC=η⋅PC=0 .75⋅1140=855mW
II.4.1 Planteamiento general de la solución
Disponemos de un equipo electrónico (Interfaz + Microcontrolador), con dos modos de
funcionamiento: espera (standby) y activo (run). En el primer modo, el equipo tiene un
consumo mínimo de potencia, Pmin, con la única función de escuchar la línea en espera
de una llamada. Cuando ésta se recibe, el detector de llamada envía una señal de
236
activación y el sistema pasa al modo activo, en el que tiene plena capacidad de
operación y un consumo de potencia Pmax.
Para que el sistema pueda funcionar de forma autónoma alimentándose a través de la
línea, su consumo medio deberá ser inferior a la energía que es capaz de proporcionar
ésta. El origen del problema está en el hecho de que Pmax > PBC y por ello vamos a
necesitar de un módulo que almacene toda la energía disponible para que nuestro equipo
vaya extrayéndola según precise. El primer requisito que debe cumplir el sistema para
que haya almacenamiento neto es que Pmin < PBA. Además deberá verificarse el
siguiente balance energético:
Energía consumida Energía suministrada
Si partimos de la suposición inicial de que el único tráfico que soporta la línea es el
asociado a la aplicación de telemando y que su valor medio en un periodo (T) de un día
(24 horas) es ‘a’, las energías puestas en juego son:
1. Energía consumida = [(1-a)Pmin + aPmax]T
2. Energía suministrada = [(1-a)PBA + aPBC]T
El balance energético es una función del tráfico soportado y habrá un valor umbral por
encima del cual no se cumple.
El tráfico máximo soportado es:
[(1-a)Pmin + aPmax]T [(1-a)PBA + aPBC]T
a(Pmax - Pmin + PBA - PBC) PBA - Pmin
a≤PBA -Pmin
(Pmax+PBA )−(PBC+Pmin )
Como no disponemos de datos reales de consumo del equipo estableceremos unos márgenes razonables para el funcionamiento del mismo:
50mW Pmin 100mW
5W Pmax 10W
En el caso peor, en que Pmin = 100mW y Pmax =10W, el tráfico máximo soportado es:
amax = 0.012 Erlang,
237
En el otro extremo, Pmin = 50mW y Pmax =5W, obtendremos un tráfico máximo aceptable
de:
amax = 0.037 Erlang.
Por tanto, dependiendo de las medidas reales de consumo que efectuemos, tendremos un
balance energético favorable dentro de los siguientes márgenes de tráfico ofrecido:
a amax
0.012 amax 0.037
Los valores entre los que se mueve amax se corresponden con el tráfico típico de un
usuario doméstico que no accede a la red Internet.
Las funciones de telemando en un entorno doméstico generan un tráfico muy pequeño,
ya que estaríamos hablando de acciones como conectar o desconectar la calefacción,
aire acondicionado, alarmas, electrodomésticos, y, por tanto, verificarían los requisitos
de tráfico.
También se podría pensar en nuevas funciones como la telemetría, proporcionando el
conjunto de mediciones para las que se haya diseñado cada vez que se llama al equipo.
Una aplicación podría ser la de pequeñas estaciones meteorológicas.
En cuanto al tráfico permitido y, siempre que la complejidad no elevase el consumo del
equipo por encima de los márgenes especificados, podría llegar a utilizarse para
funciones de mensajería doméstica (contestador automático).
II.4.2 Dimensionado de la batería
A la hora de escoger el tamaño de la batería debemos considerar el modo en el que se va
a usar el dispositivo. El caso peor sería aquél en que todo el consumo se realiza en una
única vez de forma continuada y el resto del día se recarga la batería; por el contrario, el
caso mejor sería aquél en que el consumo se hace de forma equiespaciada con una
pequeña duración del mismo.
Veamos dos ejemplos para ilustrar lo dicho: queremos comparar la capacidad que
requerirían sendas baterías para alimentar un equipo de 6W que soporta un tráfico
medio diario de a = 0,005 < amax , en los casos:
a) Un único consumo
238
En este caso la operación del telemando dura 24 60 0.005 = 7.2 minutos y
la energía consumida es 67.2 / 60= 720 mWh.
b) Consumos equiespaciados de duración 30 segundos:
Los 7.2 minutos de consumo se dividen en fracciones de 30 segundos, con lo
que resulta un total de 7.230/60 = 14.4 operaciones de telemando, lo que se
traduce en una operación de telemando cada 100 minutos. Como el tráfico
está por debajo del umbral, la batería se recarga completamente entre cada
par de operaciones. La energía consumida en cada operación es 630 / 3600
= 50 mWh.
Como podemos observar, en el primer caso precisamos una batería con una capacidad
del orden de 15 veces superior. Otro parámetro fundamental para elegir la batería
adecuada es la corriente máxima que es capaz de suministrar, que debe ser superior a la
que consume el equipo.
II.4.3 Otros aspectos a considerar
Otro aspecto importante es la rentabilidad de esta solución en cuanto a complejidad.
Dependiendo de la aplicación a que se destine y de la posibilidad de usar un regulador y
fuente convencionales puede merecer o no la pena usar este medio de alimentación. Por
ejemplo, si estamos diseñando un teléfono puede ser importante obtener la alimentación
de la propia línea y no condicionar su uso a la disponibilidad de un enchufe adicional.
En el caso de un equipo de telemetría aislado también puede merecer la pena el aumento
de complejidad, frente al coste de llevar una línea de alimentación al punto de medición.
Otro ejemplo podría ser el de un programador para calefacción o aire acondicionado que
permita la conexión/desconexión a través del teléfono. Si éste va incorporado en el
aparato, es mejor alimentarlo convencionalmente ya que disponemos de otra
alimentación alternativa, pero si se comercializa como accesorio aislado habría que
valorar si conviene condicionar el uso a la existencia de un enchufe cercano. Otra
alternativa nada despreciable cuando el consumo es bajo es el uso de pilas, ya que en un
entorno doméstico la operación de cambiar las pilas una o dos veces al año es más
fácilmente aceptada que la de colocar un enchufe cerca.
239
Apéndice III
Estudios previos para el desarrollo de un módem de red eléctricaTal y como se adelantó en la introducción, ésta es una solución muy interesante y por
ello ha sido objeto de algunos estudios. Cualquier dispositivo sensor o actuador remoto
necesita de una alimentación eléctrica. Salvo aquellos diseños cuyo consumo sea muy
pequeño y puedan ser alimentados con pilas, lo normal será tomar la alimentación de la
red. Pues bien, si existe la necesidad de una conexión física a la red eléctrica, parece
razonable utilizarla como medio de transmisión. El prototipo no se ha llevado a cabo
debido a que no se han resuelto los problemas de seguridad eléctrica de una forma
satisfactoria.
III.1 Introducción
En el mercado existen algunos circuitos integrados que implementan la función de
modem para red eléctrica y que se pueden utilizar para la construcción de algún
prototipo.
En la tabla 1 se detallan los mismos:
REFERENCIA FABRICANTE DENOMINACIÓN PRECIOPL513/TW523 X-10 Inc. Interfaz de línea eléctrica -----------------
LM1893 National Transceptor para línea de alimentación 18,30 €TDA5051A Philips Modem para automatización doméstica 13,40 €
Tabla 1 – Dispositivos para la comunicación a través de la red eléctrica.
En cuanto a los sistemas comerciales encontrados, se puede observar lo siguiente:
El PL513/TW523 del fabricante X-10 Inc. no ha sido posible
localizarlo ni obtener la documentación técnica necesaria.
El circuito TDA5051 de Philips es una buena solución que permite la
comunicación full-duplex con un precio bastante asequible. Utiliza
una modulación ASK a 132 Khz y soporta una velocidad de
transmisión de hasta 1200 baudios. La tensión de alimentación es de
5V. El inconveniente que presenta es que sólo se fabrica con
240
encapsulado SMD y sería necesario encargar placas con el chip
montado, encareciendo así el conjunto.
El circuito LM1893 de National permite la comunicación full-duplex.
Utiliza una modulación FSK, por lo que presenta una buena
inmunidad al ruido y permite velocidades de transmisión de hasta
4800 baudios. La frecuencia de la portadora se puede seleccionar
entre 50 Khz y 300 Khz, aunque se recomienda un valor de 125 Khz.
La tensión de alimentación se admite en un margen entre 15 y 30 V.
Se fabrica con el encapsulado estándar MDIP (Molded Dual In-line
Package).
Tanto el LM1893 como el TDA5051 son dispositivos que las tiendas del sector
consultadas no tienen en stock. Es posible obtenerlos por encargo a partir de 25
unidades.
III.2 Módem para red eléctrica
Debido a la dificultad de conseguir estos circuitos, se pensó en la posibilidad de diseñar
un modem utilizando componentes discretos.
Entre los diferentes aspectos que dificultan el desarrollo de un sistema de
comunicaciones a través de la red eléctrica, el ruido presente en el canal es el más
importante. Los diferentes elementos conectados la red, como motores, lámparas
fluorescentes, reguladores a base de tiristores, apagados y encendidos de interruptores
etc., generan ruido de diferentes características, como son el ruido impulsivo y el ruido
tonal.
Para comunicar a través de la red eléctrica lo haremos modulando una señal a una
frecuencia lo suficientemente alejada de la propia de la red y de los ruidos típicos de
ésta. Para determinar la frecuencia de transmisión más adecuada sería necesario
caracterizar tanto el ruido de la red como la propia línea eléctrica. Para ello es necesario
utilizar transformadores que permitan el paso de un margen amplio de frecuencias, ya
que el osciloscopio no puede conectarse directamente a la red.
Los dispositivos que para este fin existen en el mercado realizan la modulación en
frecuencias que oscilan entre los 50 Khz y los 150 Khz, siendo usual el uso de una
frecuencia de entre 125 y 135 Khz. Se ha optado, a partir de estos datos, por utilizar una
241
frecuencia de 130 Khz considerando que los fabricantes han realizado los estudios
suficientes para determinar su adecuación, sin perjuicio de que, de una caracterización
completa del medio de transmisión, resultase más conveniente la utilización de otra
frecuencia.
Entre las diferentes modulaciones a considerar se pensó por razones de sencillez en FSK
y en ASK. La primera presenta una mayor inmunidad al ruido que la segunda a costa de
aumentar la complejidad. El modulador ASK es bastante más sencillo de implementar y
presenta la ventaja de que la información se va a transmitir en la frecuencia de modo
que estará presente la portadora para transmitir un “1” y ausente para transmitir un “0”,
por lo que las fluctuaciones en la amplitud de la señal no van a afectar a la información,
siempre y cuando se mantengan dentro de unos límites. La amplitud de la señal que se
aplicará a la red eléctrica es de 1 Vrms., que es la que aplica el fabricante Philips en la
modulación ASK que implementa el circuito TDA5051.
Al no existir una caracterización del medio de transmisión es difícil predecir la
velocidad que se va a poder alcanzar, en principio se va a suponer que es de 500
baudios. Durante la fase de pruebas se podrá corregir este valor según los resultados.
La conexión de un circuito a la red eléctrica conlleva un importante problema de
seguridad eléctrica. Trabajar con un prototipo de laboratorio en el que los terminales
están al aire con tensiones de red supone un peligro y un riesgo que es necesario
eliminar. El circuito de acoplo a la red eléctrica debe aislar la parte de transmisión de
datos de la corriente alterna de la red. Esto se hace mediante el filtrado con un simple
circuito LC. En caso de fallo de alguno de los componentes del filtro, la tensión de red
podría pasar a nuestro circuito con el consiguiente peligro de manipulación. Para poder
disponer de una adecuada seguridad es necesario intercalar un transformador de
aislamiento y separar físicamente la parte de red colocándola en un circuito aparte
debidamente aislado, de modo que el circuito que se manipula recibe la salida del
transformador de aislamiento.
242
III.2.1 Estructura de bloques del transmisor
Figura 1 – Diagrama de bloques del transmisor.
Conceptualmente el modelo de transmisor es muy sencillo. Se dispone de un oscilador a
la frecuencia de modulación que genera una onda cuadrada. La forma de modular la
señal en banda base es mediante la conmutación ON/OFF del oscilador. A continuación
un amplificador ajustable para la adaptación de nivel de la señal y por último se filtra la
señal para que se parezca bastante a un tono puro y se inyecta en la red a través del
separador de red.
III.2.2 Estructura de bloques del receptor
Figura 2 – Diagrama de bloques del receptor.
En recepción, la señal que llega del separador de red se filtra para dejar sólo la banda de
interés. Antes de entrar en el demodulador se procede a una adaptación de nivel. La
demodulación se realiza mediante un detector de envolvente y, por último, se hace pasar
la señal por dos inversores con histéresis (Schmitt-Trigger) para conformar la señal.
III.2.3 Estructura de bloques de un conjunto transceptor
La necesidad de disponer en un mismo punto de un transmisor y un receptor para
transmitir comandos y recibir confirmaciones o viceversa es algo bastante común.
Cuando se envía un comando a un actuador remoto es necesario que éste confirme la
recepción del mismo, ya que, de no ser así, el sistema tendría siempre una incertidumbre
sobre la ejecución o no del mismo. Tan sólo en algunos dispositivos, como pueden ser
los de telemetría con envío periódico de medidas, no se precisa de confirmación ya que
es el propio sistema el que detecta el problema cuando transcurren varios periodos sin
haber recibido la medida correspondiente.
243
Como el medio es compartido por los dos sentidos de transmisión, si se quiere
implementar una comunicación full duplex será necesario multiplexar las señales.
Afortunadamente para la mayoría de las aplicaciones domóticas con una comunicación
semi-duplex es suficiente y no se requiere elevar la complejidad del sistema.
El sistema que se desea implementar va a ser semi-duplex. Las dos estructuras anteriores
tienen en común el separador de red y el filtro paso banda. Por ello, se propone
compartir estos dos módulos utilizando un conmutador electrónico que conecte
alternativamente el filtro y el separador de red a cada semicircuito.
Figura 3 – Diagrama de bloques del transceptor semi-duplex.
III.3 Descripción del transceptor
Figura 4 – Transceptor semi duplex para red eléctrica.
244
La solución propuesta está contenida en el esquema general de la figura 3. Cada uno de
los módulos que lo forman se describen en su correspondiente apartado.
III.3.1 Módulos comunes
Los módulos compartidos por el transmisor y el receptor son el separador de red, el
filtro paso banda y el conmutador.
III.3.1.1 Separador de red
Durante el montaje y manipulación de este módulo debe ponerse especial cuidado ya
que recibe directamente la tensión de la red. Este módulo es necesario montarlo en un
circuito aparte y proceder a su aislamiento introduciéndolo en una caja de plástico o
similar.
Figura 5 - Circuito separador de red.
El transformador es el elemento que aporta el adecuado aislamiento eléctrico al separar
físicamente la parte de red de la parte de usuario. No se trata de un transformador
convencional ya que tiene que permitir el paso de la señal modulada a 130 Khz.
También cuenta con otros elementos de protección, que son:
Un fusible de 50 mA a la entrada.
Un filtro paso alto formado por un circuito LC serie a la entrada
destinado a suprimir antes del transformador la tensión de red. La
frecuencia de corte de la red LC es:
Un filtro paso alto formado por un circuito LC paralelo a la salida del
transformador con una frecuencia de corte de 107.3 Khz.
245
f c=1
2π √LC=33 . 85 Khz
Un diodo zener de 5 V. para proteger de cualquier sobretensión de la
red que no haya sido eliminada por los anteriores filtros.
Con todo esto el circuito es capaz de garantizar la transmisión de las señales de interés
garantizando unos niveles de aislamiento y seguridad adecuados.
III.3.1.2 Filtro paso banda
Para el filtrado paso banda se ha optado por un filtro de segundo orden (estructura de
Rausch).
Figura 6 – Filtro paso banda.
Las características vienen dadas por las expresiones siguientes:
III.3.1.3 Conmutador
Para poder compartir el filtro y el separador de red es necesario conmutar la posición
del filtro para que, en el caso del receptor, reciba la señal de la red y entregue la señal
filtrada al adaptador de nivel del receptor para su demodulación, y en el caso del
transmisor reciba la señal del modulador y la entregue al separador para su inserción en
la red. Se va a utilizar el circuito integrado CD4053 que es un switch bidireccional que
por su configuración puede usarse como conmutador de tres terminales, uno de ellos
común.
246
R1=100⋅R2Q=R3
2√R2 R3
=5f c=1
2π⋅C√R2 R3
=132. 6 Khz
Figura 7 – Diagrama de bloques del CD4053 (extraído del catálogo de National).
Este circuito va a permitir controlar el modo de funcionamiento con una única señal
TX/RX aplicada a los switches.
III.3.2 Módulos del transmisor
Los módulos de la parte de transmisión son el modulador y un adaptador de nivel.
III.3.2.1 Modulador
El modulador se ha implementado de una forma extremadamente sencilla. Se trata de un
oscilador conectado a uno de los conmutadores del CD4053, de modo que conectando y
desconectando el switch se conmuta la portadora.
El oscilador se ha implementado con un 555 en configuración aestable. Como la señal
generada es una onda cuadrada, es necesario su posterior filtrado para conseguir algo
parecido a un tono senoidal.
247
Figura 8 – Modulador.
III.3.2.2 Adaptador de nivel
Como el 555 genera una señal con amplitud suficiente es necesario incorporar un
atenuador formado por un simple divisor de tensión variable conectado a un seguidor de
tensión.
III.3.3 Módulos del receptor
Figura 9 – Modulador.
III.3.3.1 Adaptador de nivel
El adaptador de tensión es un amplificador no inversor con una ganancia de 30dB con
un divisor variable de tensión a la entrada. Tiene por objeto ajustar el nivel óptimo para
el detector de envolvente usado para la demodulación de la señal.
III.3.3.2 Demodulador
La demodulación se hace con un detector de envolvente basado en un rectificador de
media onda con carga RC. Para que la tensión caiga sólo un 10 % durante el tiempo de
descarga debe tener una constante de tiempo de:
248
τ=− 1/2 fln 0 .9
=36 .5 μs
Como = RC, se han escogido los siguientes valores: R =120 K y C = 330pF, con lo
que = 39.6 s.
El tiempo que tarda la señal en alcanzar el 10 % de su valor una vez finalizado el pulso
es:
t=−τ⋅ln 0 .1=91s que es el 4.5 % de la duración de un bit.
III.3.3.3 Conformador de señal
Para la conformación de la señal se aplican dos inversores con histéresis 74LS14 para
no invertir la lógica de la señal.
III.4 Observación finales
No ha sido posible encontrar en tiendas de componentes transformadores adecuados
para el aislamiento de la línea. El Newport 76250 se podía adquirir bajo pedido mínimo
de 50 unidades. Se pensó en la posibilidad de realizar el aislamiento por filtrado pero no
parecía adecuado para unas prácticas de laboratorio debido al peligro que entrañaba.
249
Bibliografía
Los siguientes libros, manuales de usuario, artículos y catálogos, ordenados por orden
alfabético, han sido utilizados como documentación de consulta y/o referencia en la
realización de este PFC:
[Córdoba, 1999]: R. de Córdoba, “Temporizador de Propósito General, GPT”.
Transparencias, 1999.
[Darley, 1995]: S. Darley, M. Maiolani y C. Melear, “An Introduction to the
MC68332”. Motorola Semiconductor Device Tutorial, 1995. http://www.motorola.com
[Hernando, 1991]: J.M. Hernando Rábanos, “Transmisión por Línea y Redes”. Madrid:
E.T.S.I. Telecomunicación, 1991.
[ISD, 1996]: “Voice Record and Playback ICs”. ISD Data Book, 1996.
[Kelly-Bootle, 1989]: S. Kelly-Bootle B. Fowler, “68000/68010/68020 Arquitectura y
programación en ensamblador”. Madrid: Anaya Multimedia, 1989.
[Mata, 1999]: N.G. Mata, Filtros de Onda Acústica Superficial “Saw”. Universidad
Tecnológica Nacional – F.R. Bahía Blanca - Departamento Electrónica – Cátedra de
Electrónica Aplicada III.
[Montero, 1999]: J.M. Montero Martínez, “Módulo de Integración de Sistemas: SIM”,
1999.
[Motorola #1, 1996]: “MC68331 User´s Manual”. http://www.motorola.com
[Motorola #2, 1996]: “CPU 32 Reference Manual”. http://www.motorola.com
[Motorola #3, 1996]: “QSM Queued Serial Module. Reference Manual”.
http://www.motorola.com
[Motorola #4, 1995]: “GPT General-Purpose Timer. Reference Manual”.
http://www.motorola.com
[Sánchez, 1994]: D. Sánchez Maqueda, “Domótica: Tecnología y Calidad de Vida”.
Apfelsine, S.L. Montajes e Instalaciones, 1994. http://www.energuia.es
250
[Telefónica, 2001]: “Red Telefónica Pública con Conmutación. Interfaz de Línea
Analógica”. Características Técnicas de las Interfaces de Telefónica de España, S.A.U.
http://www.telefonica.es/interfaces/doc_pdf/iteca001_v2.pdf
251
ÍNDICE DE CONTENIDO
1. TELECONTROL Y MICROCONTROLADORES................................................1
1.1 INTRODUCCIÓN..............................................................................................................................1
1.1.1 SERVICIOS DOMÓTICOS...............................................................................................................4
1.1.1.1 Gestión del sistema de calefacción y refrigeración...............................................................4
1.1.1.2 Estadísticas de consumo........................................................................................................4
1.1.1.3 Control de las tomas eléctricas.............................................................................................4
1.1.1.4 Control de las persianas y toldos..........................................................................................5
1.1.1.5 Control de la iluminación exterior........................................................................................5
1.1.1.6 Control del riego en jardín y jardineras................................................................................5
1.1.1.7 Gestión de la piscina..............................................................................................................5
1.1.1.8 Gestión de la alarma antiintrusión........................................................................................5
1.1.1.9 Control de accesos.................................................................................................................5
1.1.1.10 Gestión de la alarma médica/pánico................................................................................6
1.1.1.11 Gestión de la alarma de incendio.....................................................................................6
1.1.1.12 Gestión de la alarma de inundación.................................................................................6
1.1.1.13 Gestión de la alarma de monóxido de carbono................................................................6
1.1.1.14 Supervisión de la temperatura del congelador.................................................................6
1.1.1.15 Transmisor telefónico.......................................................................................................6
1.1.1.16 Distribución de audio.......................................................................................................7
1.1.2 LAS REDES DE COMUNICACIONES...............................................................................................7
1.1.2.1 Comunicación alámbrica.......................................................................................................8
1.1.2.1.1 Cableado específico.....................................................................................................................8
1.1.2.1.2 Utilización de la red eléctrica......................................................................................................8
1.1.2.2 Comunicación inalámbrica....................................................................................................9
1.1.2.2.1 Transmisión por radio.................................................................................................................9
1.1.2.2.2 Transmisión óptica por infrarrojos..............................................................................................9
1.1.3 SISTEMAS BASADOS EN UN MICROCONTROLADOR......................................................................9
1.1.3.1 El microcontrolador Motorola MC68331.............................................................................9
1.1.4 OBJETIVOS.................................................................................................................................11
2. MONTAJE Y DESCRIPCIÓN DE LA PLACA ENTRENADORA BASADA EN
EL MICROCONTROLADOR MOTOROLA 68331............................................12
2.1 ANTECEDENTES...........................................................................................................................12
2.2 INSTRUCCIONES DE MONTAJE...............................................................................................13
2.2.1 MICROCONTROLADOR...............................................................................................................14
2.2.2 REGULADOR DE TENSIÓN..........................................................................................................15
2.2.3 REPLANTEO GENERAL DEL CIRCUITO........................................................................................16
V
2.2.4 CIRCUITO DE RELOJ...................................................................................................................16
2.2.5 FILTROS DE RELOJ DEL SISTEMA...............................................................................................17
2.2.6 CIRCUITO DE CONFIGURACIÓN DEL MICRO...............................................................................18
2.2.7 RESET DEL SISTEMA...................................................................................................................19
2.2.8 RESISTENCIAS DE PULL-UP........................................................................................................21
2.2.9 ALIMENTACIÓN DEL MICROCONTROLADOR..............................................................................22
2.2.10 PRUEBA DE FUNCIONAMIENTO..................................................................................................22
2.2.11 COMUNICACIÓN BDM (BACKGROUND DEBUG MODE).............................................................23
2.2.12 MEMORIA..................................................................................................................................26
2.2.13 COMUNICACIÓN SERIE...............................................................................................................27
2.3 DESCRIPCIÓN DE FUNCIONAMIENTO..................................................................................30
2.3.1 MÓDULO DE INTEGRACIÓN DE SISTEMAS (SIM).......................................................................30
2.3.1.1 Terminales del SIM..............................................................................................................31
2.3.1.2 Subsistema de configuración y protección..........................................................................32
2.3.1.2.1 Ubicación de los registros en memoria.....................................................................................32
2.3.1.2.2 Configuración tras el Reset........................................................................................................32
2.3.1.2.3 Arbitraje de interrupciones........................................................................................................33
2.3.1.2.4 Supervisión del bus externo durante trasferencias internas.......................................................33
2.3.1.2.5 Modo Verificación en fábrica....................................................................................................34
2.3.1.2.6 Accesibilidad de los registros del SIM......................................................................................34
2.3.1.2.7 Causa del último Reset..............................................................................................................34
2.3.1.2.8 Supervisión del Bus Interno......................................................................................................35
2.3.1.2.9 Supervisión de Parada (Halt)....................................................................................................35
2.3.1.2.10 Supervisión de interrupciones espúreas....................................................................................35
2.3.1.2.11 Supervisión SW.........................................................................................................................36
2.3.1.2.12 Interrupciones periódicas: el PIT..............................................................................................36
2.3.1.2.13 Funcionamiento en bajo consumo.............................................................................................38
2.3.1.2.14 Funcionamiento durante la depuración.....................................................................................38
2.3.1.3 Reloj del sistema..................................................................................................................39
2.3.1.3.1 Reloj del sistema externo..........................................................................................................39
2.3.1.3.2 Reloj de referencia externo........................................................................................................39
2.3.1.3.3 Generación de reloj para un bus externo síncrono....................................................................40
2.3.1.3.4 Generación de reloj en bajo consumo.......................................................................................40
2.3.1.3.5 Supervisión del reloj de referencia............................................................................................40
2.3.1.4 Interfaz del bus externo asíncrono: EBI..............................................................................40
2.3.1.4.1 Temporización del bus externo.................................................................................................41
2.3.1.4.2 Tamaño dinámico del bus de datos...........................................................................................41
2.3.1.4.3 Los códigos de función.............................................................................................................42
2.3.1.4.4 Puntos de ruptura.......................................................................................................................43
2.3.1.4.5 Cesión del bus...........................................................................................................................43
2.3.1.5 Interrupciones......................................................................................................................44
2.3.1.5.1 Fuentes de interrupción externas...............................................................................................44
VI
2.3.1.5.2 Arbitraje de interrupciones simultáneas....................................................................................44
2.3.1.5.3 Ciclo de reconocimiento y confirmación de una interrupción externa.....................................44
2.3.1.6 Lógica de direcciones..........................................................................................................45
2.3.1.6.1 Registros de configuración de la lógica de direcciones: CSBORBT y CSOR0..CSOR10.......45
2.3.1.6.2 Registros de configuración de la dirección base: CSBARBT y CSBAR0..CSBAR10.............46
2.3.1.7 Inicialización del SIM..........................................................................................................47
2.3.2 TEMPORIZADOR DE PROPÓSITO GENERAL (GPT)......................................................................49
2.3.2.1 Registros del GPT y mapa de direcciones...........................................................................50
2.3.2.2 Funcionamiento por “polling” o por interrupciones..........................................................50
2.3.2.2.1 Funcionamiento por “polling”...................................................................................................51
2.3.2.2.2 Interrupciones del GPT.............................................................................................................52
2.3.2.3 Descripción de los terminales..............................................................................................53
2.3.2.3.1 Terminales de captura de entradas (IC[1:3]).............................................................................53
2.3.2.3.2 Terminal de captura de entrada / comparación de salida (IC4/OC5)........................................53
2.3.2.3.3 Terminales de comparación de salidas (OC[1:4]).....................................................................54
2.3.2.3.4 Terminal de entrada del acumulador de pulsos (PAI)...............................................................54
2.3.2.3.5 Terminales de modulación de ancho de pulso (PWMA, PWMB)............................................54
2.3.2.3.6 Entrada auxiliar de reloj del temporizador (PCLK)..................................................................54
2.3.2.4 E/S de propósito general......................................................................................................54
2.3.2.5 Preescalador........................................................................................................................55
2.3.2.6 Unidad de captura/comparación.........................................................................................57
2.3.2.6.1 Contador del Temporizador.......................................................................................................57
2.3.2.6.2 Funciones de captura de entradas..............................................................................................58
2.3.2.6.3 Funciones de comparación de salidas.......................................................................................59
2.3.2.6.3.1 Comparación de salida 1......................................................................................................60
2.3.2.6.3.2 Comparación de salida forzada............................................................................................60
2.3.2.6.4 Captura de entrada 4 / Comparación de salida 5.......................................................................60
2.3.2.7 Acumulador de pulsos..........................................................................................................61
2.3.2.8 Unidad de modulación de ancho de pulso...........................................................................62
2.3.2.8.1 Contador PWM.........................................................................................................................62
2.3.2.8.2 Función PWM...........................................................................................................................63
2.3.3 UNIDAD CENTRAL DE PROCESO (CPU32).................................................................................64
2.3.3.1 Registros de la CPU32........................................................................................................65
2.3.3.2 Modos de direccionamiento.................................................................................................67
2.3.3.2.1 Nuevos modos de direccionamiento..........................................................................................67
2.3.3.3 Instrucciones de la CPU32..................................................................................................67
2.3.3.3.1 Nuevas instrucciones.................................................................................................................68
2.3.3.4 Depuración en segundo plano (BDM).................................................................................69
2.3.4 MÓDULO DE COMUNICACIONES SERIE (QSM)..........................................................................70
2.3.4.1 Registros generales del QSM...............................................................................................70
2.3.4.1.1 Atención a las interrupciones....................................................................................................71
2.3.4.2 Registros de control de los terminales del QSM..................................................................71
2.3.4.3 Interfaz de Comunicación Serie (SCI).................................................................................72
VII
2.3.4.4 Registros de SCI...................................................................................................................72
2.3.4.4.1 Registros de control...................................................................................................................72
2.3.4.4.2 Registro de estado.....................................................................................................................72
2.3.4.4.3 Registro de datos.......................................................................................................................73
2.3.4.5 Terminales de la SCI............................................................................................................73
2.3.4.6 Funcionamiento de la SCI...................................................................................................73
2.3.4.6.1 Definiciones..............................................................................................................................73
2.3.4.6.2 Formatos de transmisión serie...................................................................................................74
2.3.4.6.3 Reloj de transmisión..................................................................................................................74
2.3.4.6.4 Comprobación de paridad.........................................................................................................75
2.3.4.6.5 Funcionamiento del transmisor.................................................................................................75
2.3.4.6.6 Funcionamiento del receptor.....................................................................................................77
2.3.4.6.7 Detección de línea desocupada..................................................................................................78
3. CONTROL DE UN DISPLAY LCD DE MODO TEXTO....................................80
3.1 DESCRIPCIÓN GENERAL...........................................................................................................80
3.2 FUNCIONAMIENTO DEL DISPLAY...........................................................................................81
3.2.1 ALIMENTACIÓN Y CONTROL DE CONTRASTE.............................................................................82
3.2.2 LA PANTALLA Y LOS CARACTERES...........................................................................................82
3.2.3 LA MEMORIA DEL “DISPLAY”.....................................................................................................83
3.2.3.1 Display Data RAM (DDRAM).............................................................................................83
3.2.3.2 Character Generator RAM (CGRAM).................................................................................84
3.2.4 SEÑALES DE CONTROL Y REGISTROS INTERNOS........................................................................86
3.2.4.1 Señales de control................................................................................................................86
3.2.4.2 Registros internos................................................................................................................87
3.2.5 CONJUNTO DE INSTRUCCIONES.................................................................................................88
3.2.5.1 Borrar display, “Clear Display”.........................................................................................88
3.2.5.2 Cursor a inicio, “Return Home”.........................................................................................88
3.2.5.3 Establecer modo de trabajo, “Entry Mode Set”..................................................................89
3.2.5.4 Control ON/OFF del display...............................................................................................89
3.2.5.5 Desplazamiento del cursor o display...................................................................................89
3.2.5.6 Establecer modo de interfaz, “Function Set”......................................................................90
3.2.5.7 Fijar dirección de CGRAM..................................................................................................90
3.2.5.8 Fijar dirección de DDRAM.................................................................................................91
3.2.5.9 Escritura de datos en la CGRAM o DDRAM......................................................................91
3.2.5.10 Lectura de datos de la CGRAM o DDRAM....................................................................91
3.2.6 SECUENCIA TÍPICA DE INICIALIZACIÓN DEL LCD.....................................................................91
3.2.7 FORMAS DE CONEXIÓN A UN MICROCONTROLADOR.................................................................92
3.2.7.1 Longitud del bus de datos....................................................................................................92
3.2.7.2 Modos de control del LCD...................................................................................................93
VIII
3.3 EJEMPLOS DE CONTROL DEL LCD CON EL MICRO MC68331.......................................94
3.3.1 EJEMPLO DE CONTROL EN BUCLE ABIERTO...............................................................................94
3.3.1.1 Descripción de la aplicación de control..............................................................................94
3.3.1.2 Descripción de la conexión y modo de control....................................................................95
3.3.1.3 Implementación en código ensamblador del programa de control.....................................95
3.3.1.3.1 Observaciones sobre el ajuste de parámetros..........................................................................109
3.3.1.3.1.1 Ajuste de la señal de activación, “Enable”........................................................................109
3.3.2 EJEMPLO DE CONTROL EN BUCLE CERRADO...........................................................................110
3.3.2.1 Descripción de la aplicación de control............................................................................110
3.3.2.2 Descripción de la conexión y modo de control..................................................................110
3.3.2.3 Implementación en código ensamblador del programa de control...................................111
3.4 ANEXO I.........................................................................................................................................125
4. CONTROL DE UN TECLADO MATRICIAL....................................................127
4.1 DESCRIPCIÓN..............................................................................................................................127
4.2 ALGORITMO DE RECONOCIMIENTO DE TECLAS..........................................................128
4.3 CONEXIÓN AL MICROCONTROLADOR MC68331............................................................128
4.4 RUTINA BÁSICA DE ATENCIÓN AL TECLADO.................................................................129
4.5 ANEXO – EJEMPLOS DE USO DEL TECLADO....................................................................130
4.5.1 EJEMPLO 1 – PROGRAMA BÁSICO DE ATENCIÓN AL TECLADO................................................130
4.5.2 EJEMPLO 2 – USO COMBINADO CON UN DISPLAY LCD...........................................................136
5. REPRODUCTOR DE MENSAJES BASADO EN ELDISPOSITIVO ISD25XX........................153
5. REPRODUCTOR DE MENSAJES BASADO EN EL DISPOSITIVO
ISD25XX...................................................................................................................153
5.1 DESCRIPCIÓN GENERAL.........................................................................................................153
5.1.1 LA MEMORIA EEPROM DE ISD25XX...................................................................................153
5.2 DESCRIPCIÓN DE LAS SEÑALES Y DEL PATILLAJE.......................................................154
5.2.1 ALIMENTACIÓN (VCCA, VCCD, VSSA, VSSD)................................................................................154
5.2.2 ENTRADA DE CORTE DE CORRIENTE (PD - POWER DOWN)......................................................154
5.2.3 ENTRADA PARA HABILITAR CIRCUITO (CE – CHIP ENABLE)....................................................155
5.2.4 ENTRADA DE REPRODUCCIÓN/GRABACIÓN (P/R – PLAYBACK/RECORD).................................155
5.2.5 SEÑAL DE FIN DE MENSAJE Y DE FUNCIONAMIENTO (EOM)..................................................155
5.2.6 SEÑAL DE DESBORDAMIENTO (OVF)......................................................................................155
5.2.7 ENTRADA DE MICRÓFONO (MIC)............................................................................................155
5.2.8 ENTRADA DE REFERENCIA DE MICRÓFONO (MIC REF).........................................................156
5.2.9 ENTRADA DEL CONTROL AUTOMÁTICO DE GANANCIA (AGC).............................................156
IX
5.2.10 SALIDA ANALÓGICA (ANA OUT)..........................................................................................156
5.2.11 ENTRADA ANALÓGICA (ANA IN)...........................................................................................156
5.2.12 ENTRADA DE RELOJ EXTERNO (XCLK)..................................................................................156
5.2.13 SALIDAS DE ALTAVOZ (SP+ Y SP-)........................................................................................157
5.2.14 ENTRADA AUXILIAR (AUX IN)..............................................................................................157
5.2.15 ENTRADAS DE DIRECCIÓN Y MODO (AX/MX)........................................................................157
5.3 MODOS DE FUNCIÓN................................................................................................................157
5.4 DESCRIPCIÓN DE LOS MODOS DE FUNCIÓN....................................................................158
5.4.1 M0 – BÚSQUEDA DE MENSAJE................................................................................................158
5.4.2 M1 – BORRADO DE LOS MARCADORES DE FIN DE MENSAJE...................................................158
5.4.3 M2 – SIN USO..........................................................................................................................158
5.4.4 M3 – REPETICIÓN DE MENSAJE...............................................................................................158
5.4.5 M4 – DIRECCIONAMIENTO CONSECUTIVO..............................................................................158
5.4.6 M5 – ACTIVACIÓN POR NIVEL DE LA ENTRADA CE...............................................................159
5.4.7 M6 – PULSAR BOTÓN.............................................................................................................159
5.4.7.1 Entrada CE (START/PAUSE)............................................................................................159
5.4.7.2 Entrada PD (STOP/RESET)..............................................................................................159
5.4.7.3 Salida EOM (RUN)............................................................................................................159
5.5 EL MODO PULSAR BOTÓN (GRABACIÓN Y REPRODUCCIÓN)....................................159
5.5.1 PROCESO DE GRABACIÓN EN EL MODO PULSAR BOTÓN.........................................................160
5.5.2 PROCESO DE REPRODUCCIÓN EN EL MODO PULSAR BOTÓN...................................................160
5.5.3 ESQUEMA DE CONEXIÓN..........................................................................................................161
5.6 CONEXIÓN AL MICROCONTROLADOR MC68331.............................................................162
6. TRANSCEPTOR DIGITAL DE DATOS POR RADIO.....................................170
6.1 INTRODUCCIÓN..........................................................................................................................170
6.1.1 TRANSMISOR...........................................................................................................................170
6.1.1.1 Oscilador SAW...................................................................................................................171
6.1.2 RECEPTOR...............................................................................................................................173
6.2 CONEXIÓN AL MICROCONTROLADOR..............................................................................174
6.2.1 PROGRAMA BÁSICO DE ATENCIÓN DE COMUNICACIONES.......................................................174
7. TELEMANDO POR INFRARROJOS..................................................................182
7.1 INTRODUCCIÓN..........................................................................................................................182
7.1.1 ESTÁNDARES DE CODIFICACIÓN DE COMANDOS.....................................................................183
7.1.1.1 Codificación RC-5.............................................................................................................183
X
7.1.1.2 Codificación RECS 80.......................................................................................................184
7.1.2 CODIFICACIÓN DE LOS COMANDOS.........................................................................................184
7.1.3 TIPO DE MODULACIÓN............................................................................................................185
7.2 TRANSMISOR DE INFRARROJOS..........................................................................................185
7.2.1 DIAGRAMA DE BLOQUES DEL TRANSMISOR............................................................................185
GENERADOR DE RELOJ..........................................................................................................................186
7.2.3 GENERADOR DEL INTERVALO DE TRAMA................................................................................187
7.2.4 REGISTRO DE DESPLAZAMIENTO.............................................................................................189
7.2.5 MODULADOR ASK..................................................................................................................190
7.2.6 EMISOR DE LUZ INFRARROJA..................................................................................................191
7.2.7 ALIMENTACIÓN.......................................................................................................................193
7.3 RECEPTOR DE INFRARROJOS...............................................................................................193
7.3.1 DIAGRAMA DE BLOQUES DEL RECEPTOR................................................................................194
7.3.2 FOTO-RECEPTOR......................................................................................................................194
Red de desacoplo..............................................................................................................................196
7.3.3 FILTRO PASO BANDA...............................................................................................................197
7.3.4 DEMODULADOR.......................................................................................................................199
7.3.4.1 Amplificador de entrada....................................................................................................199
7.3.4.2 Detector de envolvente.......................................................................................................199
7.3.4.3 Regenerador.......................................................................................................................200
7.4 CONEXIÓN AL MICROCONTROLADOR..............................................................................200
7.4.1 PROGRAMA BÁSICO DE ATENCIÓN DE COMUNICACIONES.......................................................200
8. INTERFAZ PARA LÍNEA TELEFÓNICA.........................................................207
8.1 INTRODUCCIÓN..........................................................................................................................207
8.2 LA LÍNEA TELEFÓNICA...........................................................................................................208
8.2.1 ALIMENTACIÓN EN CORRIENTE CONTINUA.............................................................................208
8.2.1.1 Alimentación con puente convencional de baja resistencia..............................................208
8.2.1.1.1 Tensión de alimentación en reposo.........................................................................................208
8.2.1.1.2 Máximo consumo de corriente en situación de reposo...........................................................209
8.2.1.1.3 Corriente de línea en estado de línea tomada..........................................................................209
8.2.1.2 Alimentación con limitación de corriente..........................................................................209
8.2.1.3 Polaridad...........................................................................................................................209
8.2.2 CRITERIOS DE ESTADO DE LA LÍNEA.......................................................................................209
8.2.3 NIVEL MÁXIMO A LA ENTRADA DEL PTR...............................................................................210
8.2.3.1 Nivel medio máximo de transmisión..................................................................................210
8.2.3.2 Nivel de pico máximo.........................................................................................................210
8.2.4 SEÑAL (CORRIENTE) DE LLAMADA..........................................................................................210
XI
8.3 DESCRIPCIÓN MODULAR Y MONTAJE DEL SISTEMA...................................................211
8.3.1 DETECTOR DE LLAMADA.........................................................................................................211
8.3.2 ALIMENTACIÓN.......................................................................................................................214
8.3.3 GANCHO AUTOMÁTICO...........................................................................................................215
8.3.4 DUPLEXOR...............................................................................................................................215
8.3.4.1 Cálculo de la polarización.................................................................................................216
Transmisión de la señal...................................................................................................................218
8.3.4.2.1 Recepción de la señal vocal.....................................................................................................218
8.3.4.2.2 Transmisión de la señal vocal.................................................................................................219
8.3.4.3 Montaje y prueba del circuito............................................................................................219
8.3.5 AMPLIFICADORES....................................................................................................................222
8.3.6 DETECTOR DE TONOS (DTMF)...............................................................................................223
8.4 EJEMPLOS DE APLICACIONES..............................................................................................225
8.4.1 RUTINAS BÁSICAS DE GESTIÓN DEL INTERFAZ........................................................................225
CONCLUSIONES.......................................................................................................232
APÉNDICES
I. TÉCNICAS DE CONEXIONADO........................................................................233
I.1 SOLDADURA DE ESTAÑO........................................................................................................233
I.2 “WRAPPING” O ENROLLADO..................................................................................................233
I.2.1 DESCRIPCIÓN DE LA HERRAMIENTA........................................................................................234
I.2.1.1 Procedimiento de conexión:..............................................................................................234
II. ESTUDIO DE VIABILIDAD DE LA OBTENCIÓN DE ALIMENTACIÓN
PARA UN SISTEMA DE TELEMANDO TELEFÓNICO DE LA PROPIA
LÍNEA..................................................................................................................235
II.1 ESPECIFICACIONES DEL BUCLE DE ABONADO..............................................................235
II.1.1 CARACTERÍSTICAS EN CORRIENTE CONTINUA.........................................................................235
II.2 ESPECIFICACIONES DEL APARATO DE ABONADO........................................................236
II.2.1 CARACTERÍSTICAS EN CORRIENTE CONTINUA.........................................................................236
II.3 HIPÓTESIS DE PARTIDA..........................................................................................................236
II.3.1 ESTADO DE BUCLE ABIERTO...................................................................................................236
II.3.2 ESTADO DE BUCLE CERRADO..................................................................................................237
II.3.3 EFICIENCIA DE LA FUENTE......................................................................................................237
II.4 POTENCIA FINAL DISPONIBLE..............................................................................................237
XII
II.4.1 PLANTEAMIENTO GENERAL DE LA SOLUCIÓN.........................................................................238
II.4.2 DIMENSIONADO DE LA BATERÍA.............................................................................................239
II.4.3 OTROS ASPECTOS A CONSIDERAR...........................................................................................240
III. ESTUDIOS PREVIOS PARA EL DESARROLLO DE UN MODEM PARA
RED ELECTRICA..............................................................................................242
III.1 INTRODUCCIÓN..........................................................................................................................242
III.2 MÓDEM PARA RED ELÉCTRICA...........................................................................................243
III.2.1 ESTRUCTURA DE BLOQUES DEL TRANSMISOR.........................................................................245
III.2.2 ESTRUCTURA DE BLOQUES DEL RECEPTOR.............................................................................245
III.2.3 ESTRUCTURA DE BLOQUES DE UN CONJUNTO TRANSCEPTOR.................................................245
III.3 DESCRIPCIÓN DEL TRANSCEPTOR.....................................................................................246
III.3.1 MÓDULOS COMUNES...............................................................................................................247
III.3.1.1 Separador de red...........................................................................................................247
III.3.1.2 Filtro paso banda..........................................................................................................248
III.3.1.3 Conmutador..................................................................................................................248
III.3.2 MÓDULOS DEL TRANSMISOR...................................................................................................249
III.3.2.1 Modulador.....................................................................................................................249
III.3.2.2 Adaptador de nivel........................................................................................................250
III.3.3 MÓDULOS DEL RECEPTOR.......................................................................................................250
III.3.3.1 Adaptador de nivel........................................................................................................250
III.3.3.2 Demodulador................................................................................................................250
III.3.3.3 Conformador de señal...................................................................................................251
III.4 OBSERVACIÓN FINALES..........................................................................................................251
BIBLIOGRAFÍA.........................................................................................................252
XIII