Módulo de Control de Temperatura

Anuncio
Elaboración de Módulos Didácticos Basados en
Microprocesadores
AUTOR: Antonio Miguel Zaplana Alcaraz
DIRECTOR: José Luís Ramírez Falo
FECHA: Septiembre / 2002.
Índice
5
MEMORIA DESCRIPTIVA
1. Objeto del Proyecto
6
2. Titular
6
3. Antecedentes
6
4. Posibles Soluciones y Solución Adoptada
7
4.1 Módulo 1: Control de un Display LCD
7
4.2 Módulo 2: Control de Temperatura
7
4.3 Práctica de Controlador de Teclado
9
5. Descripción de la Solución Adoptada
10
5.1 Módulo 1: Control de un Display LCD
10
5.1.1 Objetivo Didáctico del Módulo
10
5.1.2 Planificación de la Práctica
11
5.1.3 Conocimientos Adquiridos
11
5.1.4 Descripción del Hardware
11
5.2 Módulo 2: Control de Temperatura
15
5.2.1 Objetivo Didáctico del Módulo
15
5.2.2 Planificación de la Práctica
16
5.2.2.1 Práctica de Control de Temperatura con Lectura de 8 bits
16
5.2.2.2 Práctica de Control de Temperatura con Lectura de 10 bits
17
5.2.2.3 Práctica de Conversión A / D y Visualización en 7 Segmentos
18
5.2.3 Descripción del Hardware
19
5.2.3.1 Medición de Temperatura
22
5.2.3.2 Conversión Analógico – Digital
23
5.2.3.3 Visualización en 7 Segmentos
25
5.2.3.4 Conversión Digital – Analógico
26
5.2.3.5 Conexión con el Microinstructor TM-683
27
5.2.3.6 Módulo de Calor
28
5.2.3.7 Programador PIC16F873
28
5.2.3.7.1 Software de Programación del PIC16F873
5.2.4 Descripción del Software
30
31
2
5.3 Práctica de Controlador de Teclado
33
5.3.1 Objetivo Didáctico del Módulo
33
5.3.2 Planificación de la Práctica
33
5.3.3 Descripción del Hardware
34
5.3.3.1 Funcionamiento del Teclado
36
5.3.3.1.1 Códigos de Rastreo del Teclado
5.3.3.2 Programación de la DUART
36
37
6. Resumen del Presupuesto
37
38
PLANOS
Plano Nº1: Módulo Control LCD. Esquema Eléctrico
Plano Nº2: Módulo Control LCD. Situación de Componentes
Plano Nº3: Módulo Control LCD. Fotolitos
Plano Nº4: Módulo Control de Temperatura. Esquema Eléctrico
Plano Nº5: Módulo Control de Temperatura. Situación de Componentes
Plano Nº6: Módulo Control de Temperatura. Fotolito Cara Superior
Plano Nº7: Módulo Control de Temperatura. Fotolito Cara Inferior
Plano Nº8: Controlador de Teclado. Esquema Eléctrico
39
PRESUPUESTO
1. Módulo de Control LCD
40
1.1 Cuadro de Precios
40
1.2 Aplicación de Precios
41
1.3 Resumen del Presupuesto
41
2. Módulo de Control de Temperatura
42
2.1 Cuadro de Precios
42
2.2 Aplicación de Precios
43
2.3 Resumen del Presupuesto
44
3. Práctica de Controlador de Teclado
45
3.1 Cuadro de Precios
45
3.2 Aplicación de Precios
45
3.3 Resumen del Presupuesto
46
4. Resumen Total del Presupuesto
46
3
ANEXOS
47
ANEXO 1: Módulo de Control LCD. Información para el Alumno
48
ANEXO 2: Módulo de Control LCD. Solución de la Práctica
56
ANEXO 3: Guión de la Práctica Control de Temperatura con Lectura de 8 bits
73
ANEXO 4: Guión de la Práctica Control de Temperatura con Lectura de 10 bits
79
ANEXO 5: Guión de la Práctica Conversión A/D y Visualización en 7 segmentos
87
ANEXO 6: Módulo Control de Temperatura. Solución de las Prácticas
99
ANEXO 7: Módulo Control de Temperatura. Programa Residente en el
Microcontrolador
132
ANEXO 8: Práctica Controlador de Teclado. Información para el Alumno
140
ANEXO 9: Práctica Controlador de Teclado. Solución de la Práctica
146
Referencias
155
4
MEMORIA
DESCRIPTIVA
MEMORIA DESCRIPTIVA
MEMORIA DESCRIPTIVA
1. Objeto del Proyecto:
El presente proyecto tiene como objetivo la elaboración de módulos didácticos para la
realización de prácticas de programación. Estos módulos están propuestos para
asignaturas sobre sistemas digitales con microprocesadores y microcontroladores. Como
por ejemplo, las asignaturas de Sistemas Digitales – II y Sistemas Electrónicos con
Microcontroladores, del primer ciclo de Ingeniería Técnica Industrial, especialidad en
Electrónica Industrial y, la asignatura de Sistemas Electrónicos Digitales del segundo
ciclo de la carrera de Ingeniería en Automática y Electrónica Industrial.
Los módulos y prácticas que se proponen en este proyecto pretenden ofrecer al alumno
la oportunidad de afianzar sus conocimientos, sobre el temario correspondiente a los
dispositivos de entrada-salida de acceso programado y control digital. Ayudar al alumno
a entender el entorno hardware y software del microprocesador MC68000. Permitir al
alumno conocer el diseño de circuitos electrónicos basados en microcontroladores y
microprocesadores, los recursos que ofrecen estos dispositivos y optimizar su uso.
Programar estructuradamente aplicaciones. Introducirle en los microcontroladores PIC y
hacerle ver los problemas de hardware y software que surgen en los sistemas digitales.
2. Titular:
El promotor de este proyecto es el Departamento de Ingeniería Eléctrica, Electrónica y
Automática (DEEEA), de la Escuela Técnica Superior de Ingeniería de la Universidad
Rovira i Virgili con dirección: Campus Sescelades, avenida Països Catalans, 26. C.P.:
43007 Tarragona. Y en su nombre el señor Don José Luís Ramírez Falo.
3. Antecedentes:
En el segundo curso de la enseñanza de Ingeniería Técnica Industrial, Especialidad en
Electrónica Industrial, se realiza la asignatura obligatoria de Sistemas Digitales – II.
Los objetivos de esta asignatura son: el análisis y uso eficaz de sistemas basados en
microprocesadores, estudiando el entorno hardware y software del MC68000 de
Motorola. El programa de la asignatura incluye el estudio de cada una de las partes que
componen un sistema basado en microprocesadores, así como la programación en
lenguaje ensamblador de éstos.
Para ayudar al alumno a entender mejor todos los conceptos expuestos en las clases
teóricas, se realizan una serie de prácticas de programación sobre el microinstructor
TM-683 de Promax. Este dispositivo incluye un microprocesador MC68000 lo que lo
hace idóneo para esta asignatura. En total se realizan dos prácticas, la primera de
carácter introductorio y la segunda con la ayuda de módulos de aplicación. Estos
módulos se conectan a las diferentes puertas de entrada-salida que dispone el
microinstructor. Simulan aparatos o procesos reales que el alumno debe controlar
mediante la programación en ensamblador. Los módulos descritos en este proyecto
están destinados a la realización de la segunda práctica de la asignatura.
6
MEMORIA DESCRIPTIVA
Además, proporcionan al alumno un mejor conocimiento sobre dispositivos digitales
que, por falta de tiempo, se ven de una forma muy general en las clases teóricas, como
son los dispositivos de entrada-salida de acceso programado.
Estos módulos están formados por nuevos elementos muy utilizados actualmente, como
las pantallas de cristal líquido y los microcontroladores PIC de MICROCHIP.
4. Posibles Soluciones y Solución Adoptada:
4.1 Módulo 1: Control de un Display LCD
Dado que el módulo está formado básicamente por un display LCD tenemos las
siguientes posibilidades:
a) Display LCD de siete segmentos
b) Módulo de display LCD alfanumérico de matriz de puntos.
Los módulos LCD de siete segmentos disponen de un gran número de líneas a controlar.
Esto hace que sea bastante difícil su control mediante los conectores de aplicación del
microinstructor TM-683. El principal inconveniente de esta solución es que disponen de
muy pocos dígitos con los que no es posible presentar mensajes de texto.
La segunda opción es la solución adoptada. Los módulos alfanuméricos disponen de
una matriz de 8, 16, 20, 32, 40, etc. caracteres, e incluso disponen de 1, 2, 4 o más
líneas. Son capaces de visualizar caracteres, números y símbolos. Están gobernados por
un microcontrolador incluido en el módulo capaz de generar los caracteres y funciones
especiales y se controlan mediante 14 líneas, lo que es idóneo para ser conectado al
microinstructor TM-683.
4.2 Módulo 2: Control de Temperatura:
El módulo de control de temperatura está formado básicamente por cuatro bloques:
medición de temperatura y acondicionamiento de la señal, conversión analógico –
digital, conversión digital – analógico, resistencia de calentamiento.
Como elementos de medición de temperaturas tenemos los siguientes:
-
Termopares: el rango de temperaturas que ofrecen es bastante amplio, aunque la
circuitería necesaria hace que sea algo complicado su uso. Además, se necesita otro
elemento sensor para compensar el efecto producido por la unión fría. El precio de
estos sensores es de unos 9€ aproximadamente.
-
PT100: Detector de película de platino. Ofrecen también un amplio rango de
temperaturas y en precio es bastante aproximado al de los termopares. Para su
correcta medición se puede utilizar un puente linealizador con resistencias de baja
tolerancia y un amplificador de instrumentación.
7
MEMORIA DESCRIPTIVA
-
PRC100: Es una alternativa de bajo coste al sensor de resistencia de hilo arrollado
de platino. Tiene una resistencia a temperatura cero de 100Ω y presenta un
comportamiento lineal con sensibilidad media de 0.00385Ω/ºC, en el margen de
temperaturas de -40ºC a 150ºC. El precio es de unos 9 € aproximadamente. La
circuitería adicional para la medición sería la misma que para una PT100.
-
C.I. LM35: es un circuito integrado sensor de temperatura con tres terminales, que
proporciona una salida lineal de tensión de 10mV/ºC. Es el elemento más
económico (4€ aprox.) y más fácil de usar. El rango de temperaturas va de 0ºC a
100ºC y tiene una precisión de aproximadamente ±1ºC.
Para la realización del módulo no se requiere que el sensor tenga un amplio rango de
temperaturas, ni tampoco demasiada precisión. Por este motivo se considera que la
opción más indicada es la del C.I. LM35.
Independientemente del elemento utilizado como sensor de temperatura, podemos tener
más o menos prestaciones según la conversión de la señal analógica a digital se haga
mediante un chip conversor o utilizando un microcontrolador con conversor A / D
incluido.
En el primer caso, el módulo dispone de una circuitería de adaptación de la señal
analógica para ser introducida en el conversor A / D. El resultado de la conversión se
envía al microinstructor mediante uno de los dos puertos disponibles en la VIA
(Versatile Interface Adapter, en adelante VIA). El puerto restante de la VIA se conecta a
un conversor digital - analógico cuya salida está a su vez conectada con la resistencia de
calentamiento mediante un transistor de potencia.
Por otro lado, si utilizamos un microcontrolador, las funciones del módulo se ven muy
incrementadas. Se puede utilizar un microcontrolador de la clase PIC con conversor
analógico digital. De esta forma podemos realizar las mismas funciones que con el caso
anterior. También podemos conectar uno de los puertos de entrada - salida del PIC a un
display de tres dígitos de siete segmentos, para visualizar el valor de la temperatura.
Además, incluyendo en el módulo un conector DB25 junto con una circuitería simple es
posible realizar la programación del PIC en el propio módulo, sin tener que quitar el
microcontrolador y sin utilizar grabadores adicionales.
Todo este conjunto sería de una gran utilidad didáctica, no sólo para la asignatura de
Sistemas Digitales - II, sino también, para la asignatura de Sistemas Electrónicos con
Microcontroladores y, en definitiva, para cualquier asignatura que pueda tener prácticas
sobre microcontroladores, con la particularidad añadida del tratamiento digital de
señales analógicas como el de la medición de temperatura.
Existe una amplia gama de microcontroladores PIC que nos permiten seleccionar el más
conveniente para nuestro proyecto. MICROCHIP dispone de cuatro familias de
microcontroladores de ocho bits: la gama enana de ocho pins (PIC12C(F)XXX), la
gama baja con instrucciones de 12 bits (PIC16C5X), la gama media con instrucciones
de
14 bits (PIC16C(F)XXX) y, la gama alta con instrucciones de 16 bits
(PIC17CXXX). De las cuatro gamas anteriores, la gama enana y la gama baja no se
adaptan a nuestras necesidades, ya que tienen menos líneas de entrada – salida de las
8
MEMORIA DESCRIPTIVA
que necesitamos. Los microcontroladores de la gama alta tienen unas características
demasiado potentes e incrementarían el precio final del proyecto innecesariamente. La
gama media de microcontroladores PIC es la que mejor se ajusta a nuestras necesidades.
En esta gama disponemos de microcontroladores con conversor analógico – digital, que
es la principal característica que necesitamos. Se podría utilizar el PIC16F73, el cual
dispone de 22 líneas de E / S, conversor A / D de 8 bits y 5 canales, 3 temporizadores y
memoria flash; la cual es idónea para la realización de las prácticas puesto que se puede
grabar y borrar mediante un software adecuado muchas veces. El precio de este
microcontrolador es de 6,66€ (según catálogo de FARNELL, número de producto:
3529137). También se puede utilizar el microcontrolador PIC16F873, que tiene las
mismas características que el anterior pero con un conversor A / D de 10 bits. Además,
este microcontrolador es más fácil de conseguir.
El precio de un conversor analógico - digital simple, de 8 bits se encuentra a partir de 5€
(según catálogo de RS - COMPONENTS: ADC0804LCN, RS #:411-674, precio:
5,48€). Por lo tanto, se pueden aumentar considerablemente las prestaciones y
funcionalidad del módulo incluyendo en él, un microcontrolador para realizar las tareas
del tratamiento de la señal analógica.
4.3 Práctica de Controlador de Teclado
Para la realización de esta práctica existen dos posibles alternativas:
La primera de ellas es proporcionar al alumno de un módulo de aplicación ya montado y
verificado, sobre el que sólo tendría que realizar su programación.
La segunda alternativa es proporcionar al alumno el esquema eléctrico del módulo y que
él mismo realizase el montaje, verificación y, seguidamente, programación del circuito.
Para cada una de las soluciones anteriores se plantean otras dos posibles alternativas. La
primera consiste en realizar este módulo con un microcontrolador como elemento de
comunicación con el teclado y, un visualizador LCD para presentar los caracteres.
La segunda opción consiste en aprovechar el conector del canal A disponible en el
microinstructor TM-683 para conectar el teclado.
De entre estas alternativas expuestas, la solución adoptada para la realización de la
práctica es, proporcionar al alumno el esquema eléctrico del módulo para que lo monte
y utilizar el microinstructor como comunicación con el teclado.
Los motivos que nos han llevado a esta elección son, en primer lugar, hacer que el
alumno realice un montaje de un sistema digital con sus propias manos para conocer
más en detalle al problema que se enfrenta y, para que no se centre exclusivamente en la
programación. Se ha elegido también utilizar el microinstructor TM-683 porque el
alumno no tendría tiempo de asimilar los conceptos necesarios que supone aprender a
programar un dispositivo que no se había visto antes. Ya que según la cronología de las
asignaturas de Ingeniería Técnica Industrial, Especialidad en Electrónica Industrial, el
tema de microcontroladores no se ve hasta tercer curso. La asignatura de Sistemas
Digitales – II, del segundo cuatrimestre del segundo curso, es la que trata más a fondo el
tema de los microprocesadores. Debido a que en esta asignatura sólo se disponen de
9
MEMORIA DESCRIPTIVA
quince horas de prácticas, que corresponden a siete sesiones para realizar dos prácticas,
en cuatro sesiones de prácticas el alumno no tendría el suficiente tiempo para realizarla.
5. Descripción de la Solución Adoptada:
5.1 Módulo 1: Control de un Display LCD:
5.1.1 Objetivo Didáctico del Módulo
El principal objetivo del módulo de Control LCD es dar a conocer a los alumnos el
funcionamiento de los dispositivos de salida de acceso programado, ya que se pueden
encontrar en muchos de los aparatos electrónicos del mercado, y también, que el alumno
adquiera experiencia en la programación de microprocesadores en lenguaje
ensamblador.
Para llevar a cabo este cometido se ha diseñado un guión de práctica que consta de las
siguientes partes:
En primer lugar, el alumno estudiará la composición y funcionamiento de una pantalla
de cristal líquido mediante el análisis de sus hojas de características. Una vez se
entienda el funcionamiento de la misma, los alumnos responderán un cuestionario a
modo de estudio previo a la práctica para comprobar sus conocimientos. Este
cuestionario se encuentra en el Capítulo de Anexos con el título de Anexo 1:
Documentación para el alumno.
Una vez realizado el estudio previo indicado anteriormente, el alumno está ya preparado
para afrontar la práctica. Con la ayuda de las hojas de características del visualizador
LCD y los conocimientos de programación adquiridos en las clases de teoría de la
asignatura, debe realizar una librería de funciones básicas de manejo de la LCD tales
como: enviar un comando, enviar un dato, configuración, etc.
Finalmente, para evaluar la capacidad de diseño y estructuración en la programación en
ensamblador del alumno, éste deberá programar una aplicación utilizando las funciones
de librería que creó anteriormente. Como ejemplo práctico, se propone que el alumno
programe un marcador de un estadio de fútbol, en el que se visualicen los nombres de
los equipos que juegan, junto con sus respectivos goles marcados. Los pulsadores
disponibles en el módulo se pueden utilizar para ir incrementando cada uno de los
marcadores, borrarlos, etc.
En el capítulo de Anexos, con el nombre Anexo 2, se encuentra la solución a la práctica
del marcador de estadio de fútbol, el código del programa de ejemplo, así como el
código de las funciones de librería de manejo de la LCD.
10
MEMORIA DESCRIPTIVA
5.1.2 Planificación de la Práctica
En el diagrama siguiente se puede ver la planificación de cada una de las tareas
necesarias para la realización de esta práctica, considerando que el alumno dispone de
cuatro sesiones de laboratorio de dos horas por sesión.
HORAS
1 2 3 4 5 6 7 8
TAREAS
Programación de la librería de funciones básicas
Programación de la aplicación
Teniendo en cuenta que el alumno debe realizar el estudio previo de la práctica antes de
la primera sesión y, según el diagrama anterior, se establece un reparto de horas de tal
forma que: la primera sesión de prácticas y la primera hora de la segunda, se dedican a
la programación de la librería de funciones básicas de manejo de la LCD. El resto de la
segunda sesión, la tercera y la cuarta se dedican a la programación de la aplicación.
5.1.3 Conocimientos Adquiridos
Con la realización de esta práctica el alumno aprenderá el funcionamiento de un módulo
LCD, así como el funcionamiento de la comunicación paralela con dispositivos de
entrada salida. Aprenderá a crear temporizadores y comprobará la necesidad del uso de
los tiempos de espera en el tratamiento de dispositivos lentos. También aprenderá a
dividir un problema para llegar a su solución con más facilidad.
5.1.4 Descripción del Hardware
Tal y como se puede apreciar en el esquema de bloques de la Figura 1, este módulo está
basado en un display LCD. Una LCD estándar es una pantalla de cristal líquido con una
matriz de 8, 16, 32, 40, etc. caracteres de 5x7 puntos. La LCD del módulo es una LCD
estándar (Powetip PC-1602) de 16 caracteres y 2 líneas (16x2). Estos módulos
contienen además un controlador que las gobierna, generalmente el HITACHI
HD44780.
Figura 1. Esquema de bloques del Módulo de Control LCD.
11
MEMORIA DESCRIPTIVA
La LCD del módulo tiene 14 patillas, se alimenta con una tensión de +5V y es posible
regular el contraste de la pantalla mediante un potenciómetro. De estas 14 patillas, 8 son
para el bus de datos (D0 - D7) y 3 de control, que son EN (habilitación), RS (Selector
de registros, instrucción o datos) y R / W (Lectura / Escritura).
El esquema eléctrico se encuentra en el capítulo de Planos señalado con el número de
plano 1. En él se pueden observar cada una de las partes que forman este módulo de
aplicación, las cuales se describen a continuación:
El módulo se comunica con el conector de aplicación del microinstructor TM-683
mediante el conector CN11 de cincuenta contactos. La relación de los contactos del
conector CN1 con las señales de la VIA se muestran en la Tabla 1.
CN1
1,2
3,4,5,6
7,8
9,10
11,12
13,14
15,16
17,18
19,20
21,22
23,24
25,26
27,28
29,30
31,32
33,34
35,36
37,38
39,40
41,42
43 a 50
VIA
Vcc
GND
PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7
CA1
CA2
PA0
PA1
PA2
PA3
PA4
PA5
PA6
PA7
GND
Tabla 1. Equivalencia entre las señales del conector CN1
del módulo y las de la VIA
El circuito integrado U1 es del tipo 74LS245. Son ocho amplificadores de corriente
bidireccionales conectados al puerto B de la VIA. Puesto que es bidireccional,
controlamos la dirección de los datos mediante la línea R / W que está conectada a la
patilla DIR del integrado, según se quiera leer o escribir en la LCD.
1
NOTA IMPORTANTE: En el conector de aplicación del microinstructor tenemos que el pin 1 es GND
mientras que en el conector CN1 del módulo es Vcc. Lo mismo ocurre con el conector de alimentación.
Todos los módulos de aplicación PROMAX tienen esta característica. Por lo tanto, hay que poner especial
cuidado en no cortocircuitar estas señales. Para evitar esto se deben usar cables planos con los conectores
cruzados.
12
MEMORIA DESCRIPTIVA
El circuito integrado U2 es del tipo 74LS04. Son seis inversores que hacen la función de
amplificadores de corriente de las tres líneas de control de la LCD (EN, RS, R/W) ya
que las líneas de salida de la VIA del microinstructor no proporcionan la suficiente
corriente. La línea RS se controla mediante los inversores U2A y U2B, conectados a la
línea PA0 de la VIA. La línea R / W se controla mediante los inversores U2C y U2D,
conectados a la línea PA1 de la VIA. La línea EN se controla mediante los inversores
U2E y U2F, conectados a la línea PA2 de la VIA.
Las 14 patillas de la LCD están disponibles en un conector de cable plano de 16 pins
designado en el esquema eléctrico con el nombre de LCD1. Este conector sigue la
misma numeración que las líneas de la LCD, su correspondencia con las líneas de ésta
se muestran en la Tabla 2.
La explicación de cada una de las líneas de la LCD, así como su manejo se puede
observar detenidamente en la hoja de características.
LCD1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LCD
Vss
Vcc
Vo (Alimentación Driver)
RS (Selector de Registro)
R/W (Lectura / Escritura)
EN (Habilitación)
D0
D1
D2
D3
D4
D5
D6
D7
No utilizado
No utilizado
Tabla 2. Correspondencia entre el conector LCD1 y
las líneas del display LCD.
El módulo de aplicación se alimenta mediante el conector CN2 que está unido a la
fuente de alimentación MM-600. La relación de las tensiones de la fuente con las
patillas del conector se muestra en la Tabla 3:
CN2
1,3,4,5,7,9
10
8
6
2
GND
+5V
+15V
-15V
+30V
Tabla 3. Voltages del conector de alimentación CN2
13
MEMORIA DESCRIPTIVA
Por último el módulo dispone de 5 pulsadores de propósito general conectados al puerto
A de la VIA. Estos pulsadores disponen de un filtro paso bajo formado por una red RC
para eliminar los rebotes en el contacto.
Al pulsar el pulsador se detecta un nivel lógico "0" mientras que en reposo se detecta un
nivel lógico "1".
En la Tabla 4 se puede observar la correspondencia entre cada una de las líneas de la
VIA y las líneas de la LCD y los pulsadores.
VIA
PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7
PA0
PA1
PA2
PA3
PA4
PA5
PA6
PA7
D0
D1
D2
D3
D4
D5
D6
D7
RS
R/W
EN
SW1
SW2
SW3
SW4
SW5
Tabla 4. Correspondencia entre las líneas de la VIA
y las líneas de control y datos del módulo
En la Tabla 5 se puede observar la lista de todos los componentes que forman el módulo
de aplicación.
Código
U1
U2
C1
C2
C3
C4
C5
R1
R2
R3
R4
R5
R6
Descripción
C.I. octal bus bidireccional 3 estados 74LS245
C.I. inversores 74LS04
Condensador plaqueta 220 nF/100V
Condensador plaqueta 220 nF/100V
Condensador plaqueta 220 nF/100V
Condensador plaqueta 220 nF/100V
Condensador plaqueta 220 nF/100V
Potenciómetro 10kΩ
Resistencia 12kΩ 5% 1/4W
Resistencia 12kΩ 5% 1/4W
Resistencia 12kΩ 5% 1/4W
Resistencia 12kΩ 5% 1/4W
Resistencia 12kΩ 5% 1/4W
14
MEMORIA DESCRIPTIVA
Código
R7
R8
R9
R10
R11
SW1
SW2
SW3
SW4
SW5
CN1
LCD1
CN2
Descripción
1/4W
1/4W
1/4W
1/4W
1/4W
Resistencia 100Ω 5%
Resistencia 100Ω 5%
Resistencia 100Ω 5%
Resistencia 100Ω 5%
Resistencia 100Ω 5%
Pulsador para PCB
Pulsador para PCB
Pulsador para PCB
Pulsador para PCB
Pulsador para PCB
Conector macho acodado 50 pins
Conector macho recto 16 pins
Conector macho acodado 10 pins
Tabla 5. Componentes del módulo de Control de una LCD
El tipo de módulo LCD elegido es de dieciséis caracteres y dos líneas, a pesar de esto
se pueden colocar otros tipos de módulos como los de 8x2, 12x2, 16x1, 20x1, 16x4,
20x2, 20x4, 24x2 y 40x2. En efecto, es posible conectar cualquier módulo alfanumérico
de pantalla de cristal líquido que tenga la misma descripción de patillaje que el módulo
elegido.
En el capítulo de Planos, además del esquema eléctrico señalado con el plano número 1,
se encuentran también los diseños del circuito impreso, situación de componentes
(plano número 2) y fotolitos de la placa (plano número 3).
5.2 Módulo 2: Control de Temperatura:
5.2.1 Objetivo Didáctico del módulo
Como se explicó anteriormente, este módulo dispone de unas prestaciones bastante
elevadas, lo que hace que tenga diversos usos didácticos. Su utilización va más allá de
la asignatura de Sistemas Digitales – II, ya que también puede ser utilizado en otras
asignaturas de la carrera como Sistemas Electrónicos con Microcontroladores e incluso,
en asignaturas de la carrera de segundo ciclo, Ingeniería en Automática y Electrónica
Industrial como Sistemas Electrónicos Digitales.
En la asignatura de Sistemas Digitales – II se puede utilizar este módulo para practicar
los temas de interrupciones, así como controles digitales. Para esta asignatura se han
diseñado dos prácticas con diferente nivel de dificultad. La primera y más sencilla de
ellas trata del control de temperatura de un aparato calefactor, como por ejemplo un
horno, basado en la adquisición del valor de la temperatura de ocho bits mediante
interrupciones.
15
MEMORIA DESCRIPTIVA
La segunda de las prácticas es un poco más compleja ya que la adquisición del dato se
realiza con una precisión de diez bits. Además provoca una interrupción por cada dato
que envía al microinstructor, de forma que se obtiene un valor de conversión cada dos
interrupciones.
Para la asignatura de Sistemas Electrónicos con Microcontroladores se ha diseñado una
práctica con el objetivo de procesar digitalmente señales analógicas y presentar el
resultado en un visualizador de siete segmentos.
También es útil este módulo para realizar prácticas en la asignatura de Sistemas
Electrónicos Digitales, proporcionando al alumno un mejor conocimiento sobre los
temas del programa de la asignatura que tratan sobre los dispositivos microprocesadores
y microcontroladores y, en el tema de problemas y limitaciones del hardware en la
implementación de sistemas digitales.
5.2.2 Planificación de la Práctica
5.2.2.1 Práctica de Control de Temperatura con Lectura de Ocho Bits
Con esta práctica el alumno aprenderá el manejo de las interrupciones y también a
procesar el resultado de una conversión analógico–digital para realizar un control
digital.
Para llevar a cabo estos objetivos se ha preparado un guión de prácticas que se
encuentra en el Anexo 3 del capítulo de Anexos.
La práctica se ha dividido en tres partes:
a) Estudio Previo de la práctica: con este estudio previo se introducirá al alumno al
tema del procesado digital de señales analógicas y a los controladores digitales.
El alumno deberá estudiar la información técnica de la placa y responder a un
cuestionario para comprobar sus conocimientos.
b) Adquisición y Procesado de la Señal: En este apartado el alumno deberá adquirir
el valor de la conversión analógico–digital de la temperatura utilizando
interrupciones. Posteriormente, el valor adquirido debe ser procesado para
obtener el valor real de la temperatura.
c) Controlador Digital: El alumno deberá escoger entre uno de los siguientes
controles, los cuales están ordenados de menor a mayor dificultad de
programación:
-
Todo – Nada
Todo – Nada con Histéresis
Proporcional (P)
Proporcional – Integral (PI)
Proporcional, Integral y Derivativo (PID)
16
MEMORIA DESCRIPTIVA
Una vez elegido el control y argumentada su elección, deberá programarlo para hacer
que el valor de la temperatura medida siga a un valor de consigna dado.
En el diagrama siguiente se puede ver la planificación de cada una de las tareas
necesarias para la realización de esta práctica, considerando que el alumno dispone de
cuatro sesiones de laboratorio de dos horas por sesión.
HORAS
1 2 3 4 5 6 7 8
TAREAS
Adquisición y procesado de la señal
Programación del control digital
Teniendo en cuenta que el alumno debe realizar el estudio previo de la práctica antes de
la primera sesión y, según el diagrama anterior, se establece un reparto de horas de tal
forma que: las dos primeras sesiones de prácticas se dedican a la programación del
microinstructor para adquirir y procesar el resultado de la conversión analógico-digital.
Las dos siguientes sesiones se dedican a la programación del control digital.
5.2.2.2 Práctica de Control de Temperatura con Lectura de Diez Bits
Con esta práctica el alumno aprenderá el manejo de interrupciones para la adquisición
de un dato de diez bits dividido en dos bytes (5 + 5) multiplexados en tiempo. También
aprenderá a reconstruir y procesar este dato para hacer un control digital de una
magnitud física.
Para llevar a cabo estos objetivos se ha preparado un guión de prácticas que se
encuentra en el Anexo 4 del capítulo de Anexos.
Esta práctica está dividida en tres partes, que son:
a) Estudio Previo: El alumno hará un estudio del sistema mediante la lectura de la
información técnica del módulo para ver la relación entre la variable que se
quiere medir y el resultado de la conversión. También responderá un
cuestionario para comprobar sus conocimientos adquiridos.
b) Adquisición y Procesado de la Señal: En este apartado, el alumno deberá
adquirir el valor de la conversión analógico – digital en dos veces utilizando las
interrupciones. Posteriormente deberá procesar el dato adquirido para reconstruir
y obtener el valor real de la temperatura.
d) Controlador Digital: El alumno deberá escoger uno de los siguientes controles,
los cuales están ordenados de menor a mayor dificultad de programación:
-
Todo – Nada
Todo – Nada con Histéresis
Proporcional (P)
Proporcional Integral (PI)
Proporcional, Integral y Derivativo (PID)
17
MEMORIA DESCRIPTIVA
Una vez elegido según su criterio uno de los controles, argumentando la elección,
deberá programarlo para que el valor de la temperatura medida siga a un valor de
consigna dado.
En el diagrama siguiente se puede ver la planificación de cada una de las tareas
necesarias para la realización de esta práctica, considerando que el alumno dispone de
cuatro sesiones de laboratorio de dos horas por sesión.
HORAS
1 2 3 4 5 6 7 8
TAREAS
Adquisición y procesado de la señal
Programación del control digital
Teniendo en cuenta que el alumno debe realizar el estudio previo de la práctica antes de
la primera sesión y, según el diagrama anterior, se establece un reparto de horas de tal
forma que: las dos primeras sesiones de prácticas se dedican a la programación del
microinstructor para adquirir y procesar el resultado de la conversión analógico-digital.
Las dos siguientes sesiones se dedican a la programación del control digital.
5.2.2.3 Práctica de Conversión A / D y Visualización en Display de Siete Segmentos
Esta práctica está enfocada para la asignatura de Sistemas Electrónicos con
Microcontroladores. Tiene como objetivos que el alumno aprenda a programar un
microcontrolador para que realice la conversión analógico – digital de una señal.
Aprenderá a procesar el dato obtenido y a visualizar el resultado en un display de siete
segmentos. También aprenderá el uso de las interrupciones y a crear tablas de datos.
Para alcanzar estos objetivos se ha preparado un guión de prácticas que se encuentra en
el Anexo 5 del capítulo de Anexos.
Esta práctica se ha dividido en tres partes, que son las siguientes:
a) Estudio Previo: El alumno deberá estudiar la información técnica de la placa y
responder a un cuestionario para comprobar sus conocimientos.
b) Conversión A / D: En este apartado el alumno deberá programar el
microcontrolador de la placa para que realice la conversión analógico – digital
de la señal analógica procedente del sensor de temperatura, utilizando las
interrupciones.
c) Procesado y Visualización: El alumno deberá procesar el dato obtenido de la
conversión para obtener el valor real de la temperatura. También tendrá que
visualizar el valor calculado en un display de siete segmentos.
En el diagrama siguiente se puede ver la planificación de cada una de las tareas
necesarias para la realización de esta práctica, considerando que el alumno dispone de
cuatro sesiones de laboratorio de dos horas por sesión.
18
MEMORIA DESCRIPTIVA
TAREAS
HORAS
1 2 3 4 5 6 7 8
Conversión Analógico – Digital
Procesado y Visualización
Teniendo en cuenta que el alumno debe realizar el estudio previo de la práctica antes de
la primera sesión y, según el diagrama anterior, se establece un reparto de horas de tal
forma que: la primera sesión de prácticas se dedica a la programación del
microcontrolador para que realice la conversión analógico - digital. El resto de las
sesiones se dedican al procesado digital de la señal analógica y visualización del
resultado en el display de siete segmentos.
5.2.3 Descripción del Hardware
Este módulo está formado por un elemento sensor de temperatura cuya salida está
acondicionada por un circuito analógico. Posteriormente la salida acondicionada se
muestrea mediante el conversor analógico – digital disponible en el microcontrolador
PIC16F873. La señal muestreada se trata mediante un programa que se ejecuta en el
microcontrolador. Mediante uno de los puertos de sus entrada – salidas se envía el
valor de la conversión al puerto A de la VIA, para su tratamiento en el programa de
control que se ejecuta en el microinstructor TM-683. Mediante otro puerto del
microcontrolador se visualiza la temperatura medida en un visualizador de siete
segmentos formado por tres módulos de cátodo común.
El programa de control genera un valor digital que es convertido, mediante un conversor
digital–analógico, a una señal analógica. Esta señal es la encargada de excitar un
transistor de potencia, que regula la corriente que pasa por la resistencia de
calentamiento. Y, por consiguiente, controla la potencia disipada por la resistencia cuya
temperatura queremos controlar.
El módulo dispone de un circuito de programación en serie del PIC16F873 mediante un
conector de 25 pins conectado al puerto paralelo de un PC.
El esquema eléctrico del módulo de control de temperatura se encuentra en el capítulo
de Planos señalado con el número 4.
En la Figura 2 se puede ver el diagrama de bloques del módulo de control de
temperatura.
19
MEMORIA DESCRIPTIVA
Figura 2. Diagrama de Bloques del Módulo de Control de Temperatura
En la Tabla 6 se muestra una lista de todos los componentes utilizados para el montaje
del módulo de control de temperatura.
Código
CN1
CN2
CN3
C1
C2
C3
C4
C5
C6
C7
C8
C9
DIG2
DIG1
DIG0
D1
D2
D3
D4
D5
D6
IC1
IC2
Descripción
Conector macho 10 pins recto cable plano
Conector DB25 macho acodado
Conector macho 50 pins recto cable plano
Condensador 330 pF
Condensador electrolítico 470uF
Condensador electrolítico 10uF
Condensador electrolítico 10uF
Condensador 27pF
Condensador 27pF
Condensador 0.01uF
Condensador 0.1uF
Condensador 0.1uF
Dígito LED de 7 segmentos de cátodo común
Dígito LED de 7 segmentos de cátodo común
Dígito LED de 7 segmentos de cátodo común
Diodo 1N4004
Diodo 1N4004
Diodo 1N4004
Diodo LED 3mm rojo
Diodo LED 3mm rojo
Diodo LED 3mm verde
Sensor de Temperatura LM35DZ
Amplificador Operacional OP07
20
MEMORIA DESCRIPTIVA
Código
IC3
IC4
IC5
IC6
IC7
IC8
IC9
IC10
IC11
J1
Q1
Q2
Q3
Q4
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13
R14
R15
R16
R17
R18
R19
R20
R21
SW1
SW2
Y1
Descripción
Amplificador Operacional OP07
Amplificador Operacional OP07
Regulador de Tensión L7812
Regulador de Tensión L7810
CI 74LS06
Microcontrolador PIC16F873
CI 74LS139
Conversor Digital – Analógico DAC08C
Amplificador Operacional OP07
Puente de configuración
Transistor PNP BC557
Transistor PNP BC557
Transistor PNP BC557
Transistor NPN BD139
Resistor 39kΩ 1% ¼ W
Resistor 10kΩ 1% ¼ W
Resistor 10kΩ 5% ¼ W
Resistor 10kΩ 5% ¼ W
Resistor 4k7Ω 5% ¼ W
Resistor 4k7Ω 5% ¼ W
Resistor 4k7Ω 5% ¼ W
Resistor 4k7Ω 5% ¼ W
Resistor 4k7Ω 5% ¼ W
Resistor 4k7Ω 5% ¼ W
Resistor 1kΩ 5% ¼ W
Resistor 680Ω 5% ¼ W
Resistor 10kΩ 5% ¼ W
Resistor 10kΩ 5% ¼ W
Resistor 5kΩ 5% ¼ W
Resistor 5kΩ 5% ¼ W
Resistor 5kΩ 5% ¼ W
Resistor 100Ω 5% ¼ W
Resistor de potencia 10Ω 15 W
Red de 8 resistencias individuales en encapsulado DIL de
270Ω
Resistor 10kΩ 5% ¼ W
Pulsador cuadrado para circuito impreso
7 Microinterruptores de configuración
Cristal de cuarzo de 4MHz
Tabla 6. Componentes del Módulo de Control de Temperatura
21
MEMORIA DESCRIPTIVA
5.2.3.1. Medición de Temperatura:
El elemento sensor de temperatura IC1, es un circuito integrado tipo LM35, el cual
dispone de tres terminales y proporciona una salida lineal de tensión de 10mV/ºC. El
rango de temperatura es de 0ºC a 100ºC, aproximadamente. Las c aracterísticas técnicas
de este circuito se pueden ver en la Tabla 7:
Factor de escala lineal
Precisión a 25ºC
Alimentación
No linealidad
Impedancia de salida baja
+10mV/ºC
0.5ºC
4 a 30V
±¼ ºC
0.1Ω para una carga de 1mA.
Tabla 7. Características técnicas del CI. LM35DZ
Tal y como muestra el esquema de bloques de la Figura 3, el sensor de temperatura
reacciona ante el calor emitido por la resistencia de potencia, produciendo una
diferencia de tensión, proporcional a la temperatura de la resistencia, entre su salida y el
nodo de referencia.
Figura 3. Esquema de la medición de temperatura
La salida del sensor de temperatura se introduce en el circuito de acondicionamiento de
señal por medio del integrado IC2, que es un amplificador operacional tipo OP07 en
configuración de seguidor de tensión. La salida de esta etapa seguidora se introduce en
IC3, que es un amplificador de ganancia 5, realizado también con un amplificador
operacional OP07, en configuración no inversora. Las resistencias utilizadas son de baja
tolerancia para respetar al máximo la señal del sensor.
Posteriormente, la salida del amplificador de tensión, se introduce en otra etapa
separadora IC4, formada también por un amplificador operacional tipo OP07 de la
misma forma que IC2. Por último, la señal de salida se introduce a uno de los canales
analógicos del microcontrolador, concretamente, a la entrada AN0.
22
MEMORIA DESCRIPTIVA
5.2.3.2. Conversión Analógico – Digital:
El microcontrolador utilizado en el módulo, dispone de un conversor analógico-digital
con una resolución de 10 bits. Este módulo se ha diseñado para medir temperaturas
dentro de un rango de 0 a 100 ºC. Tal y como se vio en el apartado anterior, el sensor
de temperatura proporciona una salida lineal de tensión de 10mV/ºC que es
proporcional a la temperatura a la que está sometido. Estos datos se representan en el
Gráfico 1, que relaciona la tensión de salida del sensor con la temperatura.
Gráfico 1. Tensión de salida del sensor Vs. Temperatura
La salida del sensor de temperatura se acondiciona por medio de un circuito analógico,
consistente en un amplificador de tensión con ganancia cinco. Por lo tanto, la relación
existente entre la tensión de entrada al conversor analógico-digital y la temperatura es la
que se muestra en el Grafico 2.
23
MEMORIA DESCRIPTIVA
Grafico 2. Tensión de entrada al conversor A/D Vs. Temperatura
El conversor analógico-digital está configurado con unas tensiones de referencia de 0V
y 5V. Con esta configuración, para una entrada de 0V se obtiene el valor digital
00000000002 y, para una entrada de 5V se obtiene el valor digital 11111111112 (1023).
El Gráfico 3 muestra la relación entre el valor digital obtenido respecto a la
temperatura.
Grafico 3. Valor Digital Vs. Temperatura
24
MEMORIA DESCRIPTIVA
Como se ha indicado previamente, la conversión analógico – digital de la señal se hace
mediante el microcontrolador IC8 del tipo PIC16F873 fabricado por MICROCHIP, el
cual dispone de un conversor analógico – digital (ADC) de 10 bits y cinco canales. Este
microcontrolador dispone, además, de 22 líneas de entrada – salida capaces de entregar
una corriente máxima de 25mA por línea, 7168 bytes de memoria FLASH, 192 bytes de
memoria RAM, 128 bytes de memoria EEPROM, dos módulos de modulación de
anchura de pulsos (PWM) con una precisión de 10 bits, un temporizador de 16 bits, dos
temporizadores de 8 bits, un temporizador de perro guardián (WDT), módulo universal
de transmisión / recepción síncrona / asíncrona de datos vía serie (USART), bus I²C
(Inter-Integrated Circuit Bus), interfase serie de periféricos (SPI), todo ello en un
encapsulado de 28 pins tipo SP (Lead Skinny PDIP).
El microcontrolador funciona con una señal de reloj de 4MHz procedente del cristal de
cuarzo Y1.
5.2.3.3. Visualizador de 7 Segmentos:
La visualización de la temperatura se realiza mediante tres módulos de siete segmentos
LED de cátodo común tipo ELS-511IDB de color rojo y frontal negro. Los segmentos
tienen una altura de 7.62mm y están dispuestos en encapsulados de 10 pines. Estos
displays están diseñados para dar un óptimo contraste entre encendido / apagado. La
versión de cátodo común dispone de un punto decimal. Las características técnicas de
estos módulos se pueden observar en la Tabla 8:
Tensión directa nominal
Corriente directa
Nominal
1.6V
10mA
Máxima
30mA
Intensidad luminosa nominal por dígito
2.5mcd
Tensión inversa máxima
6V
Ángulo de visión
±75º
Potencia máxima disipada por segmento
60mW
Temperatura de funcionamiento
De –40ºC a +85ºC
Tabla 8. Características técnicas del módulo de 7 segmentos.
Cada uno de los segmentos del display está conectado a una línea del puerto C del
microcontrolador mediante resistencia limitadoras de corriente. La relación entre los
segmentos del display y las líneas del puerto C del microcontrolador se encuentra en la
Tabla 9:
SEGMENTO
PUERTO C
A
RC6
B
RC5
C
RC4
D
RC3
E
RC2
F
RC1
G
RC0
Punto decimal
RC7
Tabla 9. Relación entre los segmentos y sus líneas de datos
25
MEMORIA DESCRIPTIVA
En la figura 4 siguiente se muestra la posición de cada segmento:
Figura 4. Posición de los segmentos
en el display
Como se ha indicado antes, los dígitos del display son de cátodo común. El cátodo de
cada dígito está conectado a una salida del decodificador IC9 del tipo 74LS139. El
circuito IC9 es un decodificador 2 a 4 cuyas entradas son las líneas RA4 y RA5 del PIC.
En la Tabla 10 se detallan los estados de cada una estas señales para activar los digitos.
RA4 RA5 DIGITO
0
0
DIG0
0
1
DIG1
1
0
DIG2
1
1 No utilizado
Tabla 10. Selección de los dígitos de 7 segmentos
5.2.3.4. Conversor Digital – Analógico:
La conversión digital – analógico se realiza mediante el circuito integrado IC10 tipo
DAC08CN. Es un circuito integrado con tecnología CMOS en un encapsulado de 16
pins tipo DIL. Las características técnicas se presentan en la Tabla 11:
Resolución
Datos
Tiempo de conversión
Alimentación
Error de ganancia
Canales
8 bits
Paralelo
1µs
18V (máx)
±1%
2
Tabla 11. Características del conversor DAC08CN
El conversor DAC está polarizado con una corriente de 2mA, resultado de aplicar una
tensión de 10 voltios, procedente de un regulador lineal de tensión IC6 tipo 7810, a una
resistencia de polarización de 5kΩ. La salida analógica del conversor se introduce en
IC11 que es un amplificador operacional tipo OP07 realimentado con una resistencia de
5kΩ, para producir una tensión de salida entre 0V y 10V.
26
MEMORIA DESCRIPTIVA
5.2.3.5. Conexión con el Microinstructor TM-683:
En el microinstructor TM-683 están disponibles dos conectores de aplicación
(Aplicación 1 y Aplicación 2) con dos puertos de 8 bits cada uno (puerto A y puerto B).
En el microcontrolador disponemos de tres puertos de entrada-salida. De estos tres
puertos, sólo dos de ellos (puerto B y puerto C) disponen de ocho líneas de datos. El
puerto A del microcontrolador sólo dispone de cinco líneas de datos.
El microinstructor TM-683 se conecta al módulo de aplicación mediante el conector de
aplicación CN3. En este conector están disponibles las señales de la VIA. El puerto A
(PA0 – PA7) de la VIA está conectado al puerto B (RB0 – RB7) del microcontrolador;
mientras que el puerto B (PB0 – PB7) de la VIA está conectado a las entradas digitales
del conversor DAC. Por el puerto A de la VIA, el microcontrolador envía al
microinstructor el valor de la conversión analógico – digital de la temperatura.
La señal RA1 del microcontrolador está conectado a un interruptor de configuración. Si
el estado lógico del interruptor es “1”, el microcontrolador envía al microinstructor un
valor de 8 bits correspondientes a los ocho bits más significativos de la conversión.
Cuando el estado lógico del interruptor es “0”, el microcontrolador envía los 10 bits de
la conversión multiplexados en tiempo con el siguiente formato:
MSB
0
0
0
X
X
Byte Bajo
X
X
LSB
X
MSB
1
0
0
X
X
Byte Alto
X
X
LSB
X
En ambos casos, el microcontrolador provoca un flanco descendente en su línea RA3,
que está conectada a la línea CA1 del microinstructor, indicando que en el puerto A hay
un valor de conversión.
El valor de la conversión, se envía al puerto A de la VIA porque en el conector de
aplicación sólo están disponibles las señales de control del puerto A. Estas señales de
control son necesarias para realizar una petición de interrupción y para el
reconocimiento de la interrupción por parte del microcontrolador. Programando
debidamente el microinstructor, un flanco de bajada en la línea CA1 sería motivo de
interrupción externa.
La línea RA2 del microcontrolador está conectada a la línea CA2 de la VIA. El
programa de control del microinstructor debe programar los registros de la VIA para
que al leer el dato de la conversión del puerto A, la línea CA2 baje a nivel lógico “0”,
hecho que el microcontrolador interpreta como que se ha recibido el dato de la
conversión y puede enviar el siguiente.
27
MEMORIA DESCRIPTIVA
En el Gráfico 4 se representa la variación de las líneas de datos y control (CA1 y CA2)
cuando el microcontrolador envía un dato a la VIA del microinstructor.
Grafico 4. Comportamiento de las líneas que intervienen en el envío de un dato a la VIA.
5.2.3.6. Módulo de Calor:
La salida procedente del conversor DAC junto con el amplificador operacional, se
conectan a la base del transistor de potencia Q4 tipo DB139. El colector del transistor
está conectado a la tensión de alimentación de la fuente de +15V y, el emisor está
conectado a la resistencia de potencia R19 de 10Ω y 15W. Según pase más o menos
corriente por el transistor, el conjunto transistor – resistencia de potencia se calentará
más o menos. Esta corriente se controla con la tensión de salida del DAC. Hay que tener
en cuenta a la hora de realizar el control digital de la temperatura, que la resistencia de
potencia presenta una gran inercia, es decir, la variación de la temperatura no es
instantánea, sino que tarda un tiempo en llegar a la temperatura deseada. En el control
digital de la temperatura no sólo intervienen las características eléctricas del resistor de
potencia, sino que también influyen considerablemente otros aspectos como la
temperatura ambiental que no podemos controlar.
5.2.3.7. Programador PIC16F873:
El circuito de programación es muy sencillo pero mantiene un nivel de prestaciones alto
y cumple las especificaciones de MICROCHIP como programador ICSP (In Circuit
Serial Programmer) de desarrollo.
Se conecta al puerto paralelo del PC mediante el conector CN2 y necesita, además, una
alimentación continua comprendida entre 15V y 30V. El consumo de corriente del
programador es inferior a 100mA.
Este montaje es capaz de leer, verificar, programar y comparar los PIC sin ninguna
restricción, lo mismo que puede leer y programar sus fusibles de configuración.
Los microcontroladores PIC de MICROCHIP están todos provistos de memoria de
acceso serie. Tres de las patillas del encapsulado cambian momentáneamente de función
durante la fase de programación para dar acceso a la memoria de programa interna; este
cambio se desencadena simplemente aplicando una tensión 13.8V (tensión alta de
programación) en la patilla VPP.
Aunque las memorias PIC se programan en serie, el programador se conecta al puerto
paralelo del PC. En efecto, por una parte este puerto se puede controlar muy fácilmente
por software y, por otra parte, suministra niveles TTL directamente utilizables. Además,
28
MEMORIA DESCRIPTIVA
debemos disponer de algunas líneas de control para conmutar las diversas
alimentaciones del microcontrolador en el curso de la programación.
Las señales del puerto paralelo son señales TTL bastante deterioradas por el cable de
conexión. Por este motivo se restauran por medio de los inversores contenidos en el
circuito IC7 tipo 74LS06. Este circuito dispone de salidas de colector abierto, lo cual
permite controlar fácilmente los transistores Q1, Q2 y Q3. Q2 y Q3 permiten aplicar la
tensión alta de programación VPP a las patillas adecuadas. El transistor Q1 gobierna la
tensión normal de alimentación VDD y permite no alimentar el circuito a programar
más que cuando es verdaderamente necesario acceder a él.
Figura 5. Esquema eléctrico del programador del PIC16F873
Para indicar la aplicación o no de estas tensiones, se utilizan dos LED rojos, D4 y D5,
gobernados por las dos tensiones VPP. En cuanto al diodo D6, se enciende simplemente
cuando el programador está bajo tensión, con el fin de señalar el buen funcionamiento
de la alimentación.
Los datos a programar en el circuito transitan por la puerta IC7a, pasando por IC7b en
caso de una segunda lectura del circuito. En cuanto al reloj de programación pasa por
IC7c.
El programador se alimenta mediante la fuente de alimentación MM-600, común a
todos los módulos de aplicación del microinstructor TM-683. La salida de +15V pasa a
través del regulador lineal de tensión IC5 tipo 7812, el cual tiene en su patilla común
tres diodos (D1, D2, D3, tipo 1N4004) conectados en serie que elevan la tensión de
salida a 13.8V.
El programador dispone también de 5 microinterruptores disponibles en SW2 cuya
función es la de dejar las señales del programador en circuito abierto en caso de que no
se tenga que programar y se esté en fase de ejecución.
29
MEMORIA DESCRIPTIVA
En la Figura 6 se puede ver la posición de los siete microinterruptores disponibles en
SW2 cuando se está en fase de grabación del PIC16F873 y cuando se está ejecutando el
programa.
Cuando se está en fase de programación (ver Figura 6a), cerramos los interruptores 1 a
5 de forma que por el primer microinterruptor se gobierna la tensión alta de
programación, por el tercer microinterruptor se gobierna la tensión de alimentación del
chip, por el cuarto transita el reloj de programación; y por el quinto transitan los datos a
programar. Los microinterruptores 6 y 7 deben estar abiertos ya que el 6 gobierna la
tensión del chip en la fase de ejecución y el microinterruptor 7 indica la longitud del
dato de conversión A / D que se envía al microinstructor TM-683.
Figura 6. Posición de los microinterruptores para (a) programación,
o (b) ejecución
5.2.3.7.1 Software de Programación del PIC16F873
Numerosos programas disponibles en Internet pueden utilizarse con el programador que
incorpora el módulo de Control de Temperatura. Se ha elegido el programa P16Pro de
Bojan Dobaj. Este software se adapta perfectamente al montaje del programador.
Antes de ejecutar el programa se deben poner los interruptores de configuración tal y
como indica la Figura 6a. Con el módulo apagado, conectar el programador al puerto
paralelo del PC.
Una vez alimentado el módulo, comprobar que el LED verde está encendido. Los LEDs
rojos pueden estar encendidos o apagados según el estado del puerto paralelo del PC.
Ejecutar entonces el programa P16PRO. Tratándose de un programa DOS se ejecuta
bajo MS-DOS, en modo MS-DOS si se trabaja con Windows 9x.
Cualquiera que sea el modo de ejecución se accede a una pantalla principal. En la parte
superior izquierda de la pantalla se encuentran accesibles dos menús desplegables
pulsando la tecla Alt. Estos menús dan acceso a todo lo concerniente a los ficheros
(menú FILE) y a la configuración hardware (menú SETTINGS).
La primera operación a realizar consiste en configurar los parámetros del programador.
Para esto, vaya al menú Settings y sitúese en Other por medio de las teclas de
desplazamiento del cursor. Entonces puede seleccionar el puerto paralelo al cual se
30
MEMORIA DESCRIPTIVA
encuentra conectado el módulo. Una vez hecho esto ir al menú Settings y situarse en
Hardware.
Para que el programador funcione se debe configurar de la siguiente forma:
OutData D0 Neg
Clock
D1 Neg
Vdd
D2
Vpp
D3
Vpp1
D4
Data In ACK Neg
A continuación ir al menú Settings y situarse en Device. Aparece una pantalla en la que
debemos escribir el número 9 (PIC16F873) y pulsar ENTER.
Entonces se debe elegir el fichero con extensión .HEX a programar en el menú FILE>Open Program. Para programar el microcontrolador basta con pulsar la tecla F4.
5.2.4 Descripción del Software
Para realizar las prácticas de la asignatura de Sistemas Digitales – II, es necesario
programar el microcontrolador PIC16F873 de la placa con el programa que se encuentra
en el Anexo 7 del capítulo de Anexos. A continuación se describe el funcionamiento de
dicho programa.
El código del programa está dividido en dos archivos:
a) Fichero TEMP.ASM: contiene el código principal del programa
b) Fichero TEMP.INC: contiene la implementación de las funciones utilizadas.
Cuando el programa empieza a ejecutarse, inicializa todas las posiciones de memoria
que se usan como variables. Seguidamente, se configuran los puertos de entrada – salida
del microcontrolador, el conversor analógico – digital y las interrupciones.
Cuando el conversor analógico – digital termina una conversión, provoca una
interrupción al microcontrolador, cuya rutina de servicio guarda los valores de la
conversión en la memoria para ser procesados posteriormente por las funciones del
programa.
Mientras no llega ninguna interrupción, el microcontrolador decodifica el resultado de
la conversión analógico – digital guardado en memoria y envía el resultado de la
conversión al microinstructor provocándole una interrupción. Seguidamente, convierte
el resultado de la decodificación en tres dígitos BCD, los cuales son convertidos de
nuevo mediante una tabla para ser visualizados en el display de siete segmentos.
A continuación, se describe el funcionamiento de las dos funciones más importantes
utilizadas.
31
MEMORIA DESCRIPTIVA
La primera de ellas (DEC_ADRES) se encarga de decodificar el resultado de la
conversión analógico – digital. Para ello divide el valor de la conversión por diez. Esto
es así porque el margen de temperaturas que queremos medir es de 0ºC a 100ºC. Para
este margen, el sensor de temperatura proporciona una salida de entre 0V y 1V.
Como el amplificador conectado a la salida del sensor tiene ganancia 5, en la entrada
analógica del microcontrolador tendremos un margen de 0V a 5V para un margen de
temperaturas de 0ºC a 100ºC.
La precisión del conversor analógico – digital del microcontrolador PIC16F873 es de
diez bits, por lo tanto, tenemos 1024 posibles estados. Si programamos el
microcontrolador para que el conversor analógico – digital tenga un margen de tensión
de referencia entre 0V y 5V, obtendremos una precisión en la conversión analógico –
digital de:
100 º C
= 0.097656 º C
≅ 0.1 º C
estado
estado
1024 estados
(1)
Por lo tanto, la expresión que relaciona la temperatura real con el resultado de la
conversión es:
Treal =
ADRES
10
(2)
Donde ADRES es el resultado de la conversión analógico – digital.
Entonces, para obtener el valor de la temperatura, basta con dividir el resultado de la
conversión analógico – digital por diez.
La siguiente función (ADRES_VIA) se encarga de enviar el resultado de la conversión
por la VIA del microinstructor provocándole una interrupción.
Si el interruptor número siete de configuración de la placa está abierto (estado lógico
“1”) entonces, colocará en el puerto de entrada – salida del microcontrolador los ocho
bits más significativos de la conversión, despreciando los dos bits menos significativos
y, provocando posteriormente una interrupción al microinstructor con un flanco
descendente en la línea CA1.
Finalmente, si por el contrario el interruptor de configuración de la placa está cerrado
(estado lógico “0”), enviará los diez bits de la conversión analógico – digital en dos
paquetes de cinco bits. Primero enviará los cinco bits menos significativos seguidos de
una interrupción. Cuando el microinstructor acepte la interrupción y lea el dato que se le
ha enviado (línea CA2 = 0), el microcontrolador enviará el segundo paquete con los
cinco bits más significativos provocando otra interrupción.
32
MEMORIA DESCRIPTIVA
En el capítulo de Planos, se encuentra, además del esquema eléctrico del módulo, un
plano con la situación de los componentes en el circuito impreso (Plano Nº 5) y los
planos con los fotolitos del circuito impreso de las caras superior e inferior (Planos Nº 6
y Nº 7, respectivamente).
5.3 Práctica de Controlador de Teclado
5.3.1 Objetivo Didáctico del módulo
El objetivo de esta práctica es dar una visión práctica al alumno en el tema de las
comunicaciones serie, coincidiendo con el Capítulo 5 “Entrada / Salida” del programa
de la asignatura de Sistemas Digitales – II. Y más concretamente, estudiando uno de los
protocolos más utilizados en la comunicación serie, el RS232.
Con esta práctica el alumno aprenderá cuales son los parámetros que definen un
protocolo. Además, aprenderá también a controlar un dispositivo digital de entrada de
acceso programado, el teclado.
5.3.2 Planificación de la Práctica
Para llevar a cabo los objetivos descritos en el apartado anterior, se ha diseñado un
guión de prácticas para el alumno que se encuentra en el Anexo 8 del capítulo Anexos.
La práctica se ha dividido en tres partes con el fin de guiar al alumno en todo el proceso.
Las partes de las que se compone la práctica son las siguientes:
a) Estudio Previo. Consta de una serie de recomendaciones que debe seguir el
alumno para realizar con éxito la práctica. También dispone de una serie de
preguntas a las que debe responder antes de la realización de la práctica.
b) Montaje y Verificación del Circuito. En este apartado el alumno montará un
sencillo circuito de adaptación de señales para conectar el teclado de un
ordenador personal (PC) al conector del Canal A del microinstructor TM683.
c) Programación del Controlador de Teclado. El alumno deberá crear un
programa en ensamblador que sea capaz de identificar las teclas pulsadas en
el teclado y presentarlas en la pantalla del ordenador.
En el diagrama siguiente se puede ver la planificación de cada una de las tareas
necesarias para la realización de esta práctica, considerando que el alumno dispone de
cuatro sesiones de laboratorio de dos horas por sesión.
HORAS
1 2 3 4 5 6 7 8
TAREAS
Montaje y Verificación del Circuito
Programación del Controlador de Teclado
33
MEMORIA DESCRIPTIVA
Teniendo en cuenta que el alumno debe realizar el estudio previo de la práctica antes de
la primera sesión y, según el diagrama anterior, se establece un reparto de horas de tal
forma que: la primera sesión de prácticas se dedica al montaje del circuito y a su
posterior verificación. El resto de las sesiones se dedican a la programación del
controlador del teclado.
5.3.3 Descripción del Hardware
El esquema eléctrico del circuito que tiene que montar el alumno se encuentra en el
Plano N º 8 del capítulo de Planos. En él se pueden observar las siguientes partes:
En primer lugar, un conector tipo DIN hembra de cinco contactos para la conexión del
teclado. En la Figura 7 se puede observar el aspecto de este conector.
Figura 7. Conector DIN – 5
En la Tabla 12 se explican las funciones de cada uno de los contactos del conector DIN
de cinco contactos.
Pin
Señal
1
Reloj
2
Datos
3
Reset
4
Masa
5 Vcc (+5V)
Tabla 12. Señales del conector
DIN – 5
Por los contactos 1 y 2 circulan las señales de reloj y datos respectivamente. Estas dos
líneas son bidireccionales de colector abierto y niveles TTL. En nuestro caso la
comunicación será asíncrona por lo que la línea de reloj no se conectará.
Por la línea de datos, el teclado envía los códigos de exploración de las teclas pulsadas
con el siguiente formato:
-
Un bit de inicio
Ocho bits de datos correspondientes al código de exploración de la tecla pulsada
empezando por el bit menos significativo.
Un bit de paridad impar
Un bit de parada.
La línea número tres corresponde a la señal de RESET, la cual tampoco conectaremos.
Finalmente las líneas cuatro y cinco son para la conexión del nodo de referencia y
alimentación, respectivamente.
34
MEMORIA DESCRIPTIVA
En segundo lugar, tenemos un conector hembra de 25 contactos tipo DB25 para la
conexión del circuito de adaptación al conector del Canal A del microinstructor.
El significado de cada uno de los contactos del conector se encuentra en la Tabla 13.
Pin Señal Canal A
1
GND
2
TxA
3
RxA
4
RTSA
5
CTSA
6
DSRA
7
GND
8
CDA
9 – 19 No conectadas
20
DTRA
21 – 25 No conectadas
Tabla 13. Señales del conector serie DB25
De los veinticinco contactos disponibles, sólo se utilizan dos; el contacto número tres
para la recepción de datos del teclado y, el contacto número siete para la conexión al
nodo de referencia.
Por último, tenemos un circuito integrado tipo MAX232 cuya función es la de adaptar la
señal de datos enviada por el teclado con niveles TTL, al nivel de tensión que define el
protocolo RS-232, que es el usado por el micoinstructor para comunicaciones serie. Este
protocolo define los niveles de tensiones descritos en la Tabla 14.
“0” Lógico +5V a +15V
“1” Lógico -5V a -15V
(a)
“0” Lógico
“1” Lógico
+3V a +25V
-3V a –25V
(b)
Tabla 14. Niveles lógicos RS-232, (a) para las salidas, (b) para las entradas
El circuito integrado MAX232 se caracteriza por tener dos transmisores y dos
receptores, se alimenta con una tensión de +5V y necesita cuatro condensadores
electrolíticos de un microfaradio.
La solución de la práctica del Controlador de Teclado se encuentra en el Anexo 9 del
capítulo de Anexos.
35
MEMORIA DESCRIPTIVA
5.3.3.1. Funcionamiento del Teclado
A continuación se explica el funcionamiento del teclado utilizado para la realización de
este módulo. Los códigos generados por el teclado pueden variar en función de la clase
de teclado. Sólo se consideran para esta práctica la utilización de las teclas de caracteres
y números del teclado normal. No se ha considerado la pulsación de las teclas de
función, las teclas extendidas ni las teclas del teclado numérico.
Cuando se pulsa una tecla, el teclado envía un código que identifica la tecla pulsada,
estos códigos se conocen con el nombre de códigos de exploración del teclado. Al soltar
la tecla, el teclado envía dos códigos: el primer código, llamado código BREAK, es el
0xF0. El segundo código es el mismo código de exploración que envió al pulsar la tecla.
Por ejemplo, cuando se pulsa la tecla de la letra “R”, el teclado envía el código 0x2D.
Al soltar la tecla, envía los códigos 0xF0 seguido del código 0x2D.
5.3.3.1.1. Códigos de Rastreo del Teclado
En la Tabla 15 se presentan los códigos de rastreo de las teclas correspondientes al
teclado utilizado. Como se ha indicado anteriormente, estos códigos pueden variar
según el teclado utilizado.
Código
Tecla
Hex. Dec.
0D
13
TAB
15
21
Q
16
22
1
1A
26
Z
1B
27
S
1C
28
A
1D
29
W
1E
30
2
21
33
C
22
34
X
23
35
D
24
36
E
25
37
4
26
38
3
29
41 ESPACIO
2A
42
V
Código
Hex. Dec.
2B
43
2C
44
2D
45
2E
46
31
49
32
50
33
51
34
52
35
53
36
54
3ª
58
3B
59
3C
60
3D
61
3E
62
41
65
Tecla
F
T
R
5
N
B
H
G
Y
6
M
J
U
7
8
,;
Tabla 15. Códigos de Exploración del Teclado.
36
Código
Tecla
Hex. Dec.
42
66
K
43
67
I
44
68
O
45
69
0
46
70
9
49
73
.:
4A
74
-_
4B
75
L
4C
76
Ñ
4D
77
P
4E
78
‘?
5A
90
INTRO
5D
93
Ç
76
118 ESCAPE
MEMORIA DESCRIPTIVA
5.3.3.2 Programación de la DUART
En este apartado se explica como debe ser programado el chip de comunicaciones serie
que lleva incorporado el microinstructor, DUART (Dual Universal Asynchronous
Receiver Transmitter). De la misma forma que se indicó en el apartado anterior respecto
de los códigos de exploración del teclado, la programación de la DUART puede variar
según el teclado, ya que la velocidad de transmisión de los datos puede ser diferente.
Para que el microinstructor pueda recibir los códigos de exploración de las teclas
pulsadas, el canal A de la DUART debe ser programado de la siguiente forma:
-
Paridad Impar
Ocho bits por carácter
Un bit de parada
Control de RxRTS = NO
Selección de RxINT por RxRDY
Modo de error por carácter
Modo de canal normal
Control de RxRTS = NO
Control de Tx por CTS = NO
Modo y reloj del Timer = TIMER (X1/CLK)
Interrupciones generadas por cambio en IP3, IP2, IP1, IP0 = NO
Valor de inicio del Timer = 0x0009
Velocidad de recepción por Timer
Interrupciones habilitadas: RxRDYA
6. Resumen del Presupuesto
El precio total de ejecución de este proyecto de elaboración de módulos didácticos
basados en microprocesadores es de CUATRO MIL OCHOCIENTOS SIETE EUROS
con NOVENTA Y SIETE CÉNTIMOS.
Tarragona, 30 de agosto de 2002
Antonio Miguel Zaplana Alcaraz
Ingeniero Técnico.
37
PLANOS
PRESUPUESTO
PRESUPUESTO
PRESUPUESTO
1 Módulo Control LCD
1.1 Cuadro de Precios
Nº
Descripción
Precio
1 Display, LCD, inteligente, alfanumérico, 14,60€ Catorce euros con sesenta
matriz de puntos, PowerTip 16x2 TN
céntimos
2 Placa de circuito impreso, fibra de vidrio
3,00€ Tres euros
3 Conector macho recto 50 pins
0,76€ Setenta y seis céntimos de
euro
4 Conector macho recto 10 pins
0,20€ Veinte céntimos de euro
5 Conector macho recto 16 pins
0,35€ Treinta y cinco céntimos
de euro
6 Circuito integrado SN 74HC245
0,31€ Treinta y un céntimos de
euro
7 Circuito integrado 74HC04N
0,36€ Treinta y seis céntimos de
euro
8 Zócalo para circuito integrado 14 pins
0,08€ Ocho céntimos de euro
9 Zócalo para circuito integrado 20 pins
0,14€ Catorce céntimos de euro
10 Pulsador para PCB plástico cuadrado
0,47€ Cuarenta y siete céntimos
de euro
11 Condensador de poliéster 220nF 100V
0,22€ Veintidós céntimos de
euro
12 Resistencia de carbón 1/4W 5%
0,02€ Dos céntimos de euro
13 Conector hembra cable plano 16 pins
0,37€ Treinta y siete céntimos de
euro
14 Patas de soporte de circuito impreso, latón,
0,15€ Quince céntimos de euro
roscado con tornillo prisionero
15 Potenciómetro de 1 vuelta vertical 10kΩ
0,27€ Veintisiete céntimos de
euro
16 Mano de obra diseño
15,02€/h Quince euros con 2
céntimos de euro la hora
17 Mano de obra fabricación y montaje
12,00€/h Doce euros la hora
40
PRESUPUESTO
1.2 Aplicación de Precios
Nº
Descripción
Cantidad Precio
Total
1 Display, LCD, inteligente, alfanumérico, matriz de
1
14,60€ 14,60€
puntos, PowerTip 16x2 TN
2 Placa de circuito impreso, fibra de vidrio
1
3,00€
3,00€
3 Conector macho recto 50 pins
1
0,76€
0,76€
4 Conector macho recto 10 pins
1
0,20€
0,20€
5 Conector macho recto 16 pins
2
0,35€
0,70€
6 Circuito integrado SN 74HC245
1
0,31€
0,31€
7 Circuito integrado 74HC04N
1
0,36€
0,36€
8 Zócalo para circuito integrado 14 pins
1
0,08€
0,08€
9 Zócalo para circuito integrado 20 pins
1
0,14€
0,14€
10 Pulsador para PCB plástico cuadrado
5
0,47€
2,35€
11 Condensador de poliéster 220nF 100V
5
0,22€
1,10€
12 Resistencia de carbón 1/4W 5%
10
0,02€
0,20€
13 Conector hembra cable plano 16 pins
2
0,37€
0,74€
14 Patas de soporte de circuito impreso, latón, roscado
4
0,15€
0,60€
con tornillo prisionero
15 Potenciómetro de 1 vuelta vertical 10kΩ
1
0,27€
0,27€
16 Mano de obra diseño
48 h 15,02€/h 720,96€
17 Mano de obra fabricación y montaje
4 h 12,00€/h 48,00€
TOTAL: 794,37€
1.3 Resumen del Presupuesto
El presupuesto de ejecución material del módulo de control LCD asciende a la cantidad
de SETECIENTOS NOVENTA Y CUATRO EUROS con TREINTA Y SIETE
CÉNTIMOS.
Presupuesto de Ejecución Material
794,37€
Gastos Generales (13%)
103,27€
Presupuesto de Ejecución por Contrato 897,64€
I.V.A. (16%)
143,62€
TOTAL: 1041,26€
El presupuesto final del módulo de control LCD asciende a la cantidad de MIL
CUARENTA Y UN EUROS con VEINTISÉIS CÉNTIMOS.
41
PRESUPUESTO
2 Módulo Control de Temperatura
2.1 Cuadro de Precios
Nº
Descripción
1 Conector macho recto 50 pins
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Precio
0,76€ Setenta y seis céntimos de
euro
Conector macho recto 10 pins
0,20€ Veinte céntimos de euro
Conector macho DB25 acodado
2,00€ Dos euros
Condensador de disco 330pF 500V
0,11€ Once céntimos de euro
0,61€ Sesenta y un céntimos de euro
Condensador electrolítico radial 470µF
63V
0,14€ Catorce céntimos de euro
Condensador electrolítico radial 10µF
35V
Condensador de disco 27pF 500V
0,14€ Catorce céntimos de euro
0,08€ Ocho céntimos de euro
Condensador MKT 0,01µF 100V
0,13€ Trece céntimos de euro
Condensador MKT 0,1µF 100V
Dígito LED 0,5” 7 segmentos con punto
1,05€ Un euro con cinco céntimos
decimal, cátodo común
de euro
Diodo 1N4004
0,02€ Dos céntimos de euro
Diodo LED rojo 3mm
0,06€ Seis céntimos de euro
Diodo LED verde 3mm
0,08€ Ocho céntimos de euro
Circuito Integrado sensor de temperatura
3,86€ Tres euros con ochenta y seis
LM35DZ
céntimos de euro
Circuito Integrado OP07C
0,61€ Sesenta y un céntimos de euro
Circuito Integrado L7812CV
0,27€ Veintisiete céntimos de euro
Circuito Integrado L7810CV
0,47€ Cuarenta y siete céntimos de
euro
Circuito Integrado 74LS06
0,39€ Treinta y nueve céntimos de
euro
Circuito Integrado PIC16F873-04/SP
7,33€ Siete euros con treinta y tres
céntimos de euro
Circuito Integrado 74LS139
0,30€ Treinta céntimos de euro
Circuito Integrado DAC08C
2,31€ Dos euros con treinta y un
céntimos de euro
Puente de configuración
0,01€ Un céntimo de euro
Transistor PNP BC557
0,06€ Seis céntimos de euro
Transistor NPN BD139
0,20€ Veinte céntimos de euro
Resistencia de película metálica 1/4W
0,08€ Ocho céntimos de euro
1%
Resistencia de película de carbón 1/4W
0,02€ Dos céntimos de euro
5%
Resistencia bobinada axial BC 15W dh
0,80€ Ochenta céntimos de euro
10R
Red de ocho resistencias individuales en
0,90€ Noventa céntimos de euro
encapsulado DIL
Pulsador para PCB plástico cuadrado
0,47€ Cuarenta y siete céntimos de
euro
42
PRESUPUESTO
Nº
Descripción
30 Conmutador SWITCH 7 contactos
31 Cristal de cuarzo FY 4.0000MHz
32
33
34
35
36
37
Zócalo de circuito integrado 8 pins
Zócalo de circuito integrado 14 pins
Zócalo de circuito integrado 16 pins
Zócalo de circuito integrado 28 pins
Placa de circuito impreso fibra de vidrio
Mano de obra diseño
38 Mano de obra fabricación y montaje
Precio
1,17€ Un euro con diecisiete
céntimos de euro
0,47€ Cuarenta y siete céntimos de
euro
0,04€ Cuatro céntimos de euro
0,08€ Ocho céntimos de euro
0,10€ Diez céntimos de euro
0,27€ Veintisiete céntimos de euro
3,00€ Tres euros
15,02€/h Quince euros con 2 céntimos
de euro la hora
12,00€/h Doce euros la hora
2.2 Aplicación de Precios
Nº
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Descripción
Cantidad
Conector macho recto 50 pins
1
Conector macho recto 10 pins
1
Conector macho DB25 acodado
1
Condensador de disco 330pF 500V
1
1
Condensador electrolítico radial 470µF 63V
2
Condensador electrolítico radial 10µF 35V
Condensador de disco 27pF 500V
2
1
Condensador MKT 0,01µF 100V
2
Condensador MKT 0,1µF 100V
Dígito LED 0,5” 7 segmentos con punto decimal,
3
cátodo común
Diodo 1N4004
3
Diodo LED rojo 3mm
2
Diodo LED verde 3mm
1
Circuito Integrado sensor de temperatura
1
LM35DZ
Circuito Integrado OP07C
4
Circuito Integrado L7812CV
1
Circuito Integrado L7810CV
1
Circuito Integrado 74LS06
1
Circuito Integrado PIC16F873-04/SP
1
Circuito Integrado 74LS139
1
Circuito Integrado DAC08C
1
Puente de configuración
1
Transistor PNP BC557
3
Transistor NPN BD139
1
Resistencia de película metálica 1/4W 1%
2
Resistencia de película de carbón 1/4W 5%
17
Resistencia bobinada axial BC 15W dh 10R
1
43
Precio
0,76€
0,20€
2,00€
0,11€
0,61€
0,14€
0,14€
0,08€
0,13€
1,05€
Total
0,76 €
0,20 €
2,00 €
0,11 €
0,61 €
0,28 €
0,28 €
0,08 €
0,26 €
3,15 €
0,02€
0,06€
0,08€
3,86€
0,06 €
0,12 €
0,08 €
3,86 €
0,61€
0,27€
0,47€
0,39€
7,33€
0,30€
2,31€
0,01€
0,06€
0,20€
0,08€
0,02€
0,80€
2,44 €
0,27 €
0,47 €
0,39 €
7,33 €
0,30 €
2,31 €
0,01 €
0,18 €
0,20 €
0,16 €
0,34 €
0,80 €
PRESUPUESTO
Nº
Descripción
28 Red de ocho resistencias individuales
encapsulado DIL
29 Pulsador para PCB plástico cuadrado
30 Conmutador SWITCH 7 contactos
31 Cristal de cuarzo FY 4.0000MHz
32 Zócalo de circuito integrado 8 pins
33 Zócalo de circuito integrado 14 pins
34 Zócalo de circuito integrado 16 pins
35 Zócalo de circuito integrado 28 pins
36 Placa de circuito impreso fibra de vidrio
37 Mano de obra diseño
38 Mano de obra fabricación y montaje
Cantidad
en
1
Precio
0,90€
Total
0,90 €
1
0,47€
0,47 €
1
1,17€
1,17 €
1
0,47€
0,47 €
4
0,04€
0,16 €
1
0,08€
0,08 €
2
0,10€
0,20 €
1
0,27€
0,27 €
1
3,00€
3,00 €
150 h 15,02€/h 2253,00€
10 h 12,00€/h 120,00€
TOTAL: 2406,77€
2.3 Resumen del Presupuesto
El presupuesto de ejecución material del módulo de control de temperatura asciende a la
cantidad de TREINTA Y TRES EUROS con SETENTA Y SIETE CÉNTIMOS.
Presupuesto de Ejecución Material
2046,77€
Gastos Generales (13%)
312,78€
Presupuesto de Ejecución por Contrato 2719,55€
I.V.A. (16%)
435,13€
TOTAL: 3154,68€
El presupuesto final del módulo de control de temperatura asciende a la cantidad de
TRES MIL CIENTO CINCUENTA Y CUATRO EUROS con SESENTA Y OCHO
CÉNTIMOS.
44
PRESUPUESTO
3 Práctica Controlador de Teclado1
3.1 Cuadro de Precios
Nº
Descripción
Precio
1 Placa de montaje de circuitos por 12,00€ Doce euros
inserción (protoboard)
2 Conector hembra DB25 aéreo
1,50€ Un euro con cincuenta céntimos
de euro
3 Conector DIN 5 contactos hembra
0,91€ Noventa y un céntimos de euro
chasis
4 Condensador electrolítico radial 1uF
0,05€ Cinco céntimos de euro
63V
5 Circuito Integrado MAX232
1,70€ Un euro con setenta céntimos de
euro
6 Mano de obra diseño
15,02€/h Quince euros con dos céntimos
de euro la hora
3.2 Aplicación de Precios
Descripción
Cantidad Precio
Total
Nº
1 Placa de montaje de circuitos por inserción
1
12,00€ 12,00€
(protoboard)
2 Conector hembra DB25 aéreo
1
1,50€
1,50€
3 Conector DIN 5 contactos hembra chasis
1
0,91€
0,91€
4 Condensador electrolítico radial 1uF 63V
4
0,05€
0,20€
5 Circuito Integrado MAX232
1
1,70€
1,70€
6 Mano de obra diseño
30 h 15,02€/h 450,60€
TOTAL: 466,91€
1
No se ha incluido en el presupuesto el teclado necesario para realizar la práctica, ya que se le
proporcionará al alumno uno de los teclados del almancén procedentes de la renovación de equipos
informáticos.
45
PRESUPUESTO
3.3 Resumen del Presupuesto
El presupuesto de ejecución material del módulo del controlador de teclado asciende a
la cantidad de CUATROCIENTOS SESENTA Y SEIS EUROS con NOVENTA Y UN
CÉNTIMOS.
Presupuesto de Ejecución Material
466,91€
Gastos Generales (13%)
60,70€
Presupuesto de Ejecución por Contrato 527,61€
I.V.A. (16%)
84,42€
TOTAL: 612,03€
El presupuesto final del módulo del controlador de teclado asciende a la cantidad de
SEISCIENTOS DOCE EUROS con TRES CÉNTIMOS.
4 Resumen Total del Presupuesto2
Módulo
Precio
Módulo de Control LCD
1041,26€
Módulo de Control de Temperatura 3154,68€
Módulo de Controlador de Teclado 612,03€
TOTAL: 4807,97€
El presupuesto total para la elaboración de todos los módulos descritos en este proyecto
con título Elaboración de Módulos Didácticos Basados en Microprocesadores es de
CUATRO MIL OCHOCIENTOS SIETE EUROS con NOVENTA Y SIETE
CÉNTIMOS.
Tarragona, 30 de agosto de 2002
Antonio Miguel Zaplana Alcaraz
Ingeniero Técnico.
2
Los precios de este presupuesto están calculados para el montaje de una unidad.
46
ANEXOS
ANEXO 1: MÓDULO DE CONTROL DE UNA LCD
INFORMACIÓN PARA EL ALUMNO
Anexo 1:
Módulo Control LCD
(Información para el alumno)
1 Enunciado de la Práctica:
El objetivo de la práctica es controlar un display LCD de cristal líquido y visualizar
mensajes en él, para ello se propone simular el marcador de un estadio de fútbol, tal y
como se muestra en la Figura 1 :
M a n c h e s t e r
0 0
L i v e r p o o l
0 0
Figura 1. Marcador de un Estadio de Fútbol
Para conseguir este propósito vamos a dividir la práctica en tres partes. La primera
consiste en realizar un estudio previo estudiando las hojas de características de la LCD y
respondiendo las preguntas del cuestionario. La segunda parte trata de crear unas
funciones de librería para el manejo de la LCD. Finalmente, se creará la aplicación del
marcador de un estadio de fútbol utilizando las funciones de la librería creada.
2 Información Técnica:
Para entender cuál es el funcionamiento del display LCD es muy recomendable leer las
hojas de características, donde se detallan cada una de las funciones y el procedimiento
de uso de la LCD. A continuación se presenta un resumen del funcionamiento de dicho
display, así como información técnica acerca del módulo que se va a usar.
Una LCD estándar es una pantalla de cristal líquido con una matriz de 16, 32, 40 u 80
caracteres de 5x7 píxeles, contando, además, con un microcontrolador (generalmente el
HITACHI HD44780) que lo gobierna. Normalmente cada línea contiene entre 8 y 80
caracteres y, suelen ser capaces de mostrar caracteres ASCII, japoneses, griegos ...; o
símbolos matemáticos. Su bus de conexión puede ser de 4 u 8 bits.
El consumo de este tipo de módulos es muy bajo (7,5mW) y, gracias a su sencillo
manejo, son ideales para dispositivos que requieren una visualización pequeña o media.
El módulo LCD sobre el que vamos a trabajar tiene 14 patillas. Su alimentación es de
+5V, y la regulación del contraste se realiza dividiendo esos +5V mediante un
potenciómetro de 10kΩ conectado a la patilla Vo. Para el modo de 8 bits se requieren
11 líneas (en el modo de 4 bits sólo se necesitan 7). De ellas hay tres de control, que son
EN (habilitación), I/D (Instrucción / Datos) y R/W (Lectura / Escritura).
48
ANEXO 1: MÓDULO DE CONTROL DE UNA LCD
INFORMACIÓN PARA EL ALUMNO
PIN
1
2
3
4
5
6
7 – 14
NOMBRE
Vss
Vdd
Vo ó Vee
I/D ó RS
R/W
E ó EN
DB
FUNCIÓN
Masa
+5V
Ajuste del contraste
Selección de modo
Lectura / Escritura
Validación (1) / Deshabilitación (0)
Líneas de datos
Tabla 1. Señales de la LCD
La activación de la línea EN (Habilitación) es la que permite a la LCD leer el resto de
las líneas, es decir, si la desactivamos no reaccionará ante los cambios en el resto de las
líneas.
La línea I/D selecciona entre el modo de comando si vale 0, o el modo de datos si es 1.
Debemos recordar que la línea R/W es la que determina si se lee o escribe, debiendo
estar debidamente activada según nuestros deseos antes de cualquier intento de acceso a
la LCD.
Los comandos de una LCD estándar se presentan en la Tabla 2:
Comando
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
Borra Pantalla
0
0
0
0
0
0
0
0
0
1
Cursor a Inicio
0
0
0
0
0
0
0
0
1
*
Modo
0
0
0
0
0
0
0
1
I/D
S
Pantalla On/Off
0
0
0
0
0
0
1
D
C
B
Modo
0
0
0
0
0
1
S/C
R/L
*
*
Función
0
0
0
0
1
DL
N
F
*
*
Dirección
0
0
0
1
0
0
1
Dirección DDRAM
0
1
BF
Dirección AC
Escribe RAM
1
0
Dato a escribir
Lee RAM
1
1
Dato a leer
Introducción
Desplazamiento
Dirección CGRAM
CGRAM
Dirección
DDRAM
Lectura
ocupado y
dirección
contador
Tabla 2. Comandos de la LCD
49
ANEXO 1: MÓDULO DE CONTROL DE UNA LCD
INFORMACIÓN PARA EL ALUMNO
-
-
-
-
-
Borra Pantalla: Borra el contenido de la memoria de la LCD y sitúa el cursor
en la posición 0.
Cursor a Inicio: El cursor va a la posición 0.
Modo Instrucción: Configura la dirección del cursor. Cuando I/D = 1
incrementa la posición del cursor automáticamente, cuando I/D = 0 la
decrementa. Cuando S = 1 significa que hay desplazamiento en la pantalla.
Pantalla On / Off: Si D = 1 enciende la pantalla, D = 0 apaga la pantalla. C = 1
visualiza el cursor, C = 0 no lo visualiza. B = 1 hace parpadear el cursor.
Modo Desplazamiento: S/C = 1 indica movimiento de la pantalla completa.
S/C = 0 indica movimiento del cursor. R/L = 1 indica movimiento hacia la
derecha, R/L = 0 indica movimiento a la izquierda.
Función: DL = 1 indica interfaz de 8 bits, DL = 0 indica interfaz de 4 bits. N =
1 indica 2 líneas visibles, N = 0 indica 1 línea visible. F = 1 indica una fuente de
5x10 píxeles, F = 0 indica una fuente de 5x7 píxeles.
Dirección CGRAM: Coloca el dato enviado en la dirección CGRAM indicada
después de este comando.
Dirección DDRAM: Coloca el dato enviado en la dirección DDRAM indicada
después de este comando.
Lectura ocupado y dirección del contador: Si BF = 1 la LCD está ocupada,
BF = 0 la LCD está libre. También lee el contenido del contador de direcciones
AC.
Escribe RAM: Escribe un dato en la RAM.
Lee RAM: Lee datos de la RAM.
Al resetear una LCD o encenderla, ésta se queda a la espera de instrucciones.
Usualmente se suele empezar encendiendo la pantalla, colocando el cursor y
configurando una escritura de izquierda a derecha.
La LCD contiene una RAM propia en la que almacena los datos, que se denomina
DDRAM. Independientemente del número de caracteres visibles, la DDRAM contará
con 80 posiciones. Los caracteres no visibles se visualizarán provocando un
desplazamiento. La RAM de una LCD no tiene direccionamiento continuo y lineal, pues
el mapa depende de los caracteres y líneas que tenga el módulo. En la Tabla 3 se puede
ver el direccionamiento de las primeras posiciones visibles:
Visible
Tamaño Pantalla
1x8
1x16
1x20
1x24
1x32
1x40
2x16
2x20
2x24
2x32
2x40
Posición Carácter
00 – 07
00 – 15
00 – 19
00 – 23
00 – 31
00 – 39
00 – 15
00 – 19
00 – 23
00 – 31
00 – 39
Dirección DDRAM
0x00 – 0x07
0x00 – 0x0F
0x00 – 0x13
0x00 – 0x17
0x00 – 0x1F
0x00 – 0x27
0x00 – 0x0F + 0x40 – 0x4F
0x00 – 0x13 + 0x40 – 0x53
0x00 – 0x17 + 0x40 – 0x57
0x00 – 0x1F + 0x40 – 0x5F
0x00 – 0x27 + 0x40 – 0x67
Tabla 3. Direccionamiento de la memoria DDRAM
50
ANEXO 1: MÓDULO DE CONTROL DE UNA LCD
INFORMACIÓN PARA EL ALUMNO
•
Ejemplo de acceso visualización de un carácter en una posición
determinada del display:
Como ejemplo, para visualizar la letra “A” en el carácter número 5 de la segunda línea,
se seguiría una secuencia como la siguiente:
BCLR
BCLR
MOVE.B
JSR
BSET
MOVE.B
JSR
#RS,PORTA
;LCD en modo comando
#RW,PORTA
;LCD en modo escritura
#%11000100,PORTB
;Carácter 5, Línea 2
LCD_COMMAND
;Ejecuta el comando
#RS,PORTA
;LCD en modo datos
#$41,PORTB
;Envía el carácter “A”
LCD_DATA
;Visualiza el carácter
La utilización de una LCD es lenta, comparada con la velocidad de ejecución de
instrucciones del microprocesador MC68000 (0.5µs de la más rápida y 3µs de la más
lenta). Una escritura o lectura en la LCD puede tardar entre 40 y 120 microsegundos,
otras instrucciones pueden llegar a los 5 milisegundos.
Todas las líneas de datos y control del módulo LCD son accesibles por el
microinstructor mediante el conector de aplicación de la VIA. La correspondencia entre
las señales de los puertos A y B de la VIA con las señales de la LCD se muestran en la
Tabla 4:
VIA
PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7
PA0
PA1
PA2
LCD
D0
D1
D2
D3
D4
D5
D6
D7
RS
R/W
EN
Tabla 4. Correspondencia entre VIA y LCD
Además, el módulo contiene cinco pulsadores conectados a las líneas PA3 a PA7 de la
VIA. En reposo se lee un “1” mientras que cuando se ha pulsado se lee un “0”.
51
ANEXO 1: MÓDULO DE CONTROL DE UNA LCD
INFORMACIÓN PARA EL ALUMNO
3 Estudio Previo:
Para entender el funcionamiento de la LCD es necesario leer con detenimiento sus hojas
de características. Por este motivo se deben leer los documentos relacionados con un
módulo LCD de 16x2 caracteres así como las hojas de características del controlador de
HITACHI HD44780U disponible en la página web del fabricante.
Una vez leídos estos documentos, y entendidos sus contenidos, responded al siguiente
cuestionario:
1) ¿Qué se puede visualizar en un módulo LCD alfanumérico de matriz de puntos?
a)
b)
c)
d)
Sólo números porque la visualización es de 7 segmentos.
Sólo letras
Todos los caracteres ASCII
Los caracteres que pueden ser generados por el generador de caracteres
2) ¿Cuál es el tamaño del bus de datos de la LCD?
a)
b)
c)
d)
16 bits
4 bits
4 u 8 bits
8 bits
3) ¿Qué byte se debe enviar para configurar la LCD con 2 líneas, interfase de 8 bits
y una fuente de 5x7 puntos?
a)
b)
c)
d)
00111000
00011000
10111000
01010101
4) ¿Cuántos caracteres puede almacenar la LCD?
a)
b)
c)
d)
16
32
80
64
5) ¿En qué estado tienen que estar las líneas de control para enviar un carácter a la
memoria de la LCD?
a)
b)
c)
d)
RS=0; RW=0; E=0
RS=1; RW=0; E=1
RS=1; RW=1; E=1
RS=0; RW=1; E=1
52
ANEXO 1: MÓDULO DE CONTROL DE UNA LCD
INFORMACIÓN PARA EL ALUMNO
6) ¿Qué byte debo enviar a la LCD para visualizar la letra ñ?
a)
b)
c)
d)
11101110
11100000
00011000
11101111
7) ¿Cuál es el tiempo mínimo del pulso de habilitación?
a)
b)
c)
d)
100ns
1ms
500ns
500ms
8) En la dirección de memoria 0x10 está guardada la letra “A” pero la última
posición visible es la 0x0F. ¿Qué se debe hacer para ver la letra “A” de la
dirección 0x10 en la primera posición visible?
a)
b)
c)
d)
Hacer un shift de la pantalla de 8 caracteres hacia la derecha
Hacer un shift de la pantalla de 16 caracteres hacia la izquierda
Hacer un shift de la pantalla de 16 caracteres hacia la derecha
Hacer un shift de la pantalla de 8 caracteres hacia la izquierda
4 Creación de una Librería de Funciones:
A continuación se indican los pasos a seguir para crear una serie de rutinas generales
para controlar el uso de una pantalla LCD. Las rutinas a implementar son las siguientes:
LCD_FIRST:
Deshabilitar la LCD y dejarla en modo escritura y de espera de comandos.
LCD_INI:
Secuencia de inicialización de la LCD:
- Esperar 20ms
- Configurar una interfaz de 8 bits y 1 línea
- Generar un pulso de activación de la línea EN.
- Esperar 5ms.
- Repetir las tres líneas anteriores tres veces.
- Programar un incremento automático de AC.
- Esperar 5ms.
- Configurar una interfaz de 8 bits y 2 líneas.
- Configurar un incremento automático de AC.
- Apagar la pantalla.
- Borrar el contenido de la memoria de la LCD.
53
ANEXO 1: MÓDULO DE CONTROL DE UNA LCD
INFORMACIÓN PARA EL ALUMNO
LCD_ENABLE:
Genera un pulso de activación de la EN.
- Habilitar la LCD.
- Esperar 5ms.
- Deshabilitar la LCD.
- Esperar 5ms.
LCD_DATA:
Envía un dato a la LCD.
- Colocar el dato en D0 a D7.
- LCD en modo datos.
- Pulso de activación.
- LCD en modo comandos.
LCD_COMMAND:
Envía un comando a la LCD.
- LCD en modo comando.
- Colocar el comando en D0 a D7.
- Pulso de activación.
DELAY: Realiza una espera de 5ms.
5 Creación de la Aplicación:
En primer lugar la aplicación debe realizar las secuencias de inicialización de los
puertos de entrada / salida del microprocesador, así como también de la LCD.
A continuación se deben visualizar en la LCD los nombres de los equipos local y
visitante que juegan el partido, así como sus marcadores inicializados a cero. Para esto
hay dos opciones:
a) Insertar los nombres de los equipos en el código del programa, de manera
que cada vez que se quiera cambiar un nombre el programa debe ser editado
y, posteriormente, compilado y lincado.
b) Introducir los nombres de los equipos mediante el teclado del ordenador en
tiempo de ejecución de la aplicación.
A continuación se deben rastrear los pulsadores de forma que, el pulsador 1 incremente
el marcador del equipo local, el pulsador 2 incremente el marcador del equipo visitante,
el pulsador 3 borre el marcador del equipo local, el pulsador 4 borre el marcador del
equipo visitante y el pulsador 5 finalice el partido y también la aplicación.
Opcionalmente, se pueden incluir rutinas que visualicen la palabra GOL parpadeando en
la LCD cada vez que se pulsen los pulsadores 1 o 2. También se puede incluir otra
rutina que indique cual ha sido el equipo ganador o si el resultado ha sido empate.
54
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
Anexo 2:
Módulo Control LCD
Solución de la Práctica
1 Solución del Cuestionario del Estudio Previo
Las soluciones a las preguntas del cuestionario se encuentran señaladas en color rojo,
estilo cursiva y subrayadas.
-
¿Qué se puede visualizar en un módulo LCD alfanumérico de matriz de puntos?
a)
b)
c)
d)
Sólo números porque la visualización es de 7 segmentos.
Sólo letras
Todos los caracteres ASCII
Los caracteres que pueden ser generados por el generador de caracteres
-
¿Cuál es el tamaño del bus de datos de la LCD?
a)
b)
c)
d)
16 bits
4 bits
4 u 8 bits
8 bits
-
¿Qué byte se debe enviar para configurar la LCD con 2 líneas, interfase de 8 bits
y una fuente de 5x7 puntos?
a)
b)
c)
d)
00111000
00011000
10111000
01010101
-
¿Cuántos caracteres puede almacenar la LCD?
a)
b)
c)
d)
16
32
80
64
-
¿En qué estado tienen que estar las líneas de control para enviar un carácter a la
memoria de la LCD?
a)
b)
c)
d)
RS=0; RW=0; E=0
RS=1; RW=0; E=1
RS=1; RW=1; E=1
RS=0; RW=1; E=1
56
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
-
¿Qué byte debo enviar a la LCD para visualizar la letra ñ?
a)
b)
c)
d)
11101110
11100000
00011000
11101111
-
¿Cuál es el tiempo mínimo del pulso de habilitación?
a)
b)
c)
d)
100ns
1ms
500ns
500ms
-
En la dirección de memoria 0x10 está guardada la letra “A” pero la última
posición visible es la 0x0F. ¿Qué se debe hacer para ver la letra “A” de la
dirección 0x10 en la primera posición visible?
a)
b)
c)
d)
Hacer un shift de la pantalla de 8 caracteres hacia la derecha
Hacer un shift de la pantalla de 16 caracteres hacia la izquierda
Hacer un shift de la pantalla de 16 caracteres hacia la derecha
Hacer un shift de la pantalla de 8 caracteres hacia la izquierda
2 Código de la Librería de Funciones
;*********************************************************************
;*********************************************************************
;
LIBRERIA DE UTILIZACION DE LA LCD: Rutinas de Uso General
;*********************************************************************
;*********************************************************************
;-------------------------------------------------------------;LCD_FIRST: Deshabilita la LCD y la deja en modo de espera de comandos
;-------------------------------------------------------------LCD_FIRST:
BCLR
BCLR
BCLR
RTS
#EN,PORTA
#RS,PORTA
#RW,PORTA
;Deshabilita la LCD
;Modo Comandos
;Modo Escritura
;Final de la subrutina
57
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
;-------------------------------------------------------------;LCD_INI: Inicializa la LCD para empezar a trabajar
;-------------------------------------------------------------LCD_INI:
;Esperamos 20ms
JSR
JSR
JSR
JSR
DELAY
DELAY
DELAY
DELAY
MOVE.B
#$30,PORTB
JSR
JSR
LCD_ENABLE
DELAY
MOVE.B
#$30,PORTB
JSR
JSR
LCD_ENABLE
DELAY
MOVE.B
#$30,PORTB
JSR
JSR
LCD_ENABLE
DELAY
MOVE.B
JSR
JSR
#LCDINC,PORTB
LCD_ENABLE
DELAY
MOVE.B
#LCDFUNCION,D0
JSR
LCD_COMMAND
MOVE.B
JSR
#LCDINC,D0
LCD_COMMAND
MOVE.B
JSR
#LCDOFF,D0
LCD_COMMAND
;Apaga LCD
MOVE.B
JSR
#LCDCLR,D0
LCD_COMMAND
;Borra LCD
RTS
;Configuracion de interfase de 8 bits,
;1 linea
;Habilita la LCD
;Espera 5ms
;Configuracion de interfase de 8 bits,
;1 linea
;Habilita la LCD
;Espera 5ms
;Configuracion de interfase de 8 bits,
;1 linea
;Habilita la LCD
;Espera 5ms
;Incremento automatico de AC
;Habilita la LCD
;Espera 5ms
;Configuracion de interfase de 8
;bits, 2 lineas
;Incremento automatico del AC
;Fin de la subrutina
;-------------------------------------------------------------;LCD_ENABLE: Realiza un pulso de activacion de la LCD
;de como minimo 500ns para activarla
;-------------------------------------------------------------LCD_ENABLE:
BSET
JSR
BCLR
JSR
RTS
#EN,PORTA
DELAY
#EN,PORTA
DELAY
;Habilita la LCD
;Espera 5ms
;Deshabilita la LCD
;Espera 5ms
;Fin de la Subrutina
58
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
;-------------------------------------------------------------;LCD_DATA: Envia el dato almacenado en D0 a la LCD
;para presentarlo en la pantalla
;-------------------------------------------------------------LCD_DATA:
MOVE.B
BSET
JSR
BCLR
RTS
D0,PORTB
#RS,PORTA
LCD_ENABLE
#RS,PORTA
;Envia el dato a la LCD
;LCD en modo Datos
;Realiza el pulso de activacion para
;que acepte el dato.
;LCD en modo Comandos
;Fin de la subrutina
;-------------------------------------------------------------;LCD_COMMAND: Envia el comando almacenado en D0
;a la LCD para configurarla
;-------------------------------------------------------------LCD_COMMAND:
BCLR
MOVE.B
JSR
#RS,PORTA
D0,PORTB
LCD_ENABLE
RTS
;LCD en modo Comando
;Envia el comando a la LCD
;Realiza el pulso de activación para
;que acepte el comando.
;Fin de la subrutina
;-------------------------------------------------------------;DELAY: Realiza una temporizacion de 5ms
;Esta temporizaci¢n se realiza utilizando el timer 2 de la VIA
;Como el reloj de la VIA es de 800kHz (8MHz/10) el valor
;a cargar en el temporizador es $0FA0
;-------------------------------------------------------------DELAY:
BSET
BCLR
#7,IER
#5,IER
;Activa interrupciones se¤aladas con 1
;Desactiva interrupciones del timer 2
MOVE.B
MOVE.B
MOVE.B
#$00,ACR
#CONT_L,T2C_L
#CONT_H,T2C_H
;Programa T2 en modo temporizador
;Carga byte bajo del contador
;Carga byte alto del contador.
;Inicia la cuenta
BTST
BEQ
#5,IFR
L1
;Mira si el flag T2=1
L1:
RTS
;Fin de la subrutina
Código 1. Funciones de uso general para el manejo de una LCD
59
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
3 Código de la Aplicación de Marcador de un Estadio de Fútbol
;*********************************************************************
;
PFC: ELABORACION DE MODULOS DIDACTICOS PARA MICROPROCESADORES
;
MODULO 1: Control de un Display LCD.
;
APLICACION: Marcador de un estadio de Futbol
;
;
REALIZADO POR: Antonio Miguel Zaplana Alcaraz
;
DIRECTOR: Jose Luis Ramirez Falo
;*********************************************************************
ABSOLUTE
ORG $25000
;********** MACROS UTILIZADAS EN LA LIBRERIA *****************
CONT_L
CONT_H
EQU
EQU
$A0
$0F
;Byte bajo del contador
;Byte alto del contador
;********** COMANDOS DE LA LCD *******************************
LCDLINEA1
LCDLINEA2
LCDLIN1_PAN2
LCDLIN2_PAN2
LCDCLR
LCDHOME
LCDINC
EQU
EQU
EQU
EQU
EQU
EQU
EQU
LCDDEC
EQU
LCDON
LCDOFF
CURSOFF
CURSON
CURSBLINK
EQU
EQU
EQU
EQU
EQU
LCDIZDA
EQU
LCDDCHA
CURSIZDA
EQU
EQU
CURSDCHA
EQU
LCDFUNCION
EQU
$80
$C0
$90
$D0
$01
$02
$06
;Situa el cursor en la posicion 1, linea 1
;Situa el cursor en la posicion 1, linea 2
;Situa el cursor en la posicion 17, linea 1
;Situa el cursor en la posicion 17, linea 2
;Borra Pantalla + LCDLINEA1
;Equivalente a LCDLINEA1
;Incrementa la posicion del cursor después
;de cada caracter
$04 ;Decrementa la posicion del cursor después
;de cada caracter
$0C
;Enciende la pantalla de la LCD
$08
;Apaga la pantalla de la LCD
$0C
;Enciende la pantalla y apaga el cursor
$0E
;Enciende la pantalla y el cursor
$0F ;Enciende la pantalla, el cursor y el
;parpadeo
$18
;Desplaza los caracteres hacia la
;izquierda
$1C
;Desplaza los caracteres hacia la derecha
$10
;Desplaza el cursor una posicion a la
;izquierda
$14
;Desplaza el cursor una posicion a la
;derecha
$38
;Programa una interfase de 8 bits,
;pantalla 2 lineas y fuente 5x7 pixeles
;********* REGISTROS DE LA VIA *******************************
VIA
EQU
$60021 ;Direccion base de la VIA
PORTB
EQU
VIA+0
;Puerto B
PORTA
EQU
VIA+2
;Puerto A
DDRB
EQU
VIA+4
;Registro de configuracion de la direccion
;del puerto B
DDRA
EQU
VIA+6
;Registro de configuracion de la direccion
;del puerto A
T2C_L
EQU
VIA+16 ;Byte Bajo del Timer 2
T2C_H
EQU
VIA+18 ;Byte Alto del Timer 2
ACR
EQU
VIA+22 ;Registro Auxiliar de Control
PCR
EQU
VIA+24 ;Registro de Control de Perifericos
IFR
EQU
VIA+26 ;Registro de Banderas de Interrupciones
IER
EQU VIA+28 ;Registro de Habilitacion de Interrupciones
60
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
;********* CONSTANTES UTILIZADAS EN LA APLICACION *************
EQ1DECP
EQU
$8E
EQ2DECP
EQU
$CE
SW1
SW2
SW3
SW4
SW5
EQU
EQU
EQU
EQU
EQU
3
4
5
6
7
;Direccion de la
;las decenas del
;Direccion de la
;las decenas del
;Pulsador
;Pulsador
;Pulsador
;Pulsador
;Pulsador
LCD para
marcador
LCD para
marcador
visualizar
del equipo 1
visualizar
del equipo 2
1
2
3
4
5
;********** CONSTANTES UTILIZADAS EN LA LIBRERIA *****************
EN
EQU
2
RW
RS
EQU
EQU
1
0
;Habilitacion (EN=1)
;Deshabilitacion (EN=0) de la LCD
;Modo Lectura (R/W=1). Modo Escritura (R/W=0)
;Modo Datos (RS=1). Modo Comandos (RS=0)
;********* VARIABLES DEL PROGRAMA *****************************
;El registro D6 contiene el valor de los goles
;marcados por el equipo 1
;El registro D7 contiene el valor de los goles
;marcados por el equipo 2
VARIABLES
EQ_1_ASCII
EQU
EQU
$28000
VARIABLES+0
EQ_2_ASCII
EQU
VARIABLES+8
EQUIPO1
EQU
VARIABLES+12
EQUIPO2
EQU
VARIABLES+30
;Valor ASCII de los goles
;marcados por el equipo 1
;Valor ASCII de los goles
;marcados por el equipo 2
;String que contiene el nombre
;del equipo 1
;String que contiene el nombre
;del equipo 2
;**************************************************************
;
INICIO DEL PROGRAMA
;**************************************************************
;Inicializar las variables
MOVE.L
MOVE.L
MOVE.L
#$0,D6
#$0,D7
#$29000,A7
;Inicializa el marcador del equipo 1
;Inicializa el marcador del equipo 2
;Inicializa la pila
;Inicializar los puertos de E / S
MOVE.B #$FF,DDRB
MOVE.B #$07,DDRA
;Configuramos el puerto B como Salidas
;Configuramos de PA0 a PA2 como Salidas
;y las restantes como entradas
61
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
;Inicializar la LCD
JSR
JSR
LCD_FIRST
LCD_INI
MOVE.B
JSR
#LCDLINEA1,D0
;Mueve el cursor a la
;posicion 1 de la linea 1
LCD_COMMAND
;Visualizamos en la pantalla del ordenador la cabecera
PEA
MOVE.L
TRAP
ADDA.L
CABECERA
#25,D0
#0
#4,A7
;Funcion PUTS() del monitor
;Preguntamos al usuario el nombre del equipo local
PEA
MOVE.L
TRAP
ADDA.L
PREG_1
#25,D0
#0
#4,A7
;Funcion PUTS() del monitor
;Espera una respuesta del usuario
MOVE.L
MOVE.L
MOVE.L
TRAP
ADDA.L
#13,-(A7)
#EQUIPO1,-(A7)
#26,D0
#0
#8,A7
;Funcion CGETS() del monitor
;Preguntamos al usuario el nombre del equipo Visitante
PEA
MOVE.L
TRAP
ADDA.L
PREG_2
#25,D0
#0
#4,A7
;Funcion PUTS() del monitor
;Espera una respuesta del usuario
MOVE.L
MOVE.L
MOVE.L
TRAP
ADDA.L
#13,-(A7)
#EQUIPO2,-(A7)
#26,D0
#0
#8,A7
PEA
MOVE.L
TRAP
ADDA.L
TEXT9
#25,D0
#0
#4,A7
;Funcion CGETS() del monitor
;Funcion PUTS() del monitor
;Enviamos los datos iniciales que se tienen que visualizar en la LCD
LEA
EQUIPO1,A1
JSR
ENVIA_TEXTO
;Escribe en la LCD el nombre
;del primer equipo
MOVE.B
JSR
#LCDLINEA2,D0 ;Situa el cursor en el
;caracter 1 de la linea 2
LCD_COMMAND
62
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
LEA
EQUIPO2,A1
JSR
ENVIA_TEXTO
JSR
ACT_MARCA
;Escribe en la LCD el nombre
;del segundo equipo
;Escribe en la LCD el num. de goles que
;lleva cada equipo
;Graba en la memoria de la LCD la palabra GOOL
MOVE.B #LCDLIN1_PAN2,D0
;En la linea 1
JSR
LCD_COMMAND
LEA
JSR
GOOL,A1
ENVIA_TEXTO
MOVE.B
JSR
#LCDLIN2_PAN2,D0
LCD_COMMAND
LEA
JSR
GOOL,A1
ENVIA_TEXTO
MOVE.B
JSR
#LCDLINEA1,D0
LCD_COMMAND
;Situa el cursor al principio
MOVE.B
JSR
#LCDON,D0
LCD_COMMAND
;Enciende la pantalla de la LCD
;En la linea 2
;Escaneamos los pulsadores
INICIO:
BTST
BEQ
#SW1,PORTA
GOL_EQ_1
BTST
BEQ
#SW2,PORTA
GOL_EQ_2
BTST
BEQ
#SW3,PORTA
BORRA_EQ_1
BTST
BEQ
#SW4,PORTA
BORRA_EQ_2
BTST
BEQ
#SW5,PORTA
ACABA
JMP
INICIO
GOL_EQ_1:
JSR
T20MS
BTST
BEQ
#SW1,PORTA
INICIO
JSR
GOL
;Espera 20ms para eliminar los rebotes
;El equipo 1 ha marcado gol
JSR
BIP
;Hace pitar el altavoz
ADDQ.L #1,D6
;Se incrementa el contador del equipo 1
JSR
ACT_MARCA
;Actualizamos los marcadores
JMP
INICIO
63
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
GOL_EQ_2:
JSR
T20MS
BTST
BEQ
#SW2,PORTA
INICIO
JSR
GOL
;Espera 20ms para eliminar los rebotes
;El equipo 2 ha marcado gol
JSR
BIP
;Hace pitar el altavoz
ADDQ.L #1,D7
;Se incrementa el contador del equipo 2
JSR
ACT_MARCA
;Actualizamos los marcadores
JMP
INICIO
BORRA_EQ_1:
JSR
BTST
BEQ
T20MS
#SW3,PORTA
INICIO
CLR.L
D6
JSR
ACT_MARCA
JMP
INICIO
BORRA_EQ_2:
JSR
BTST
BEQ
T20MS
;Pone a 0 el marcador del equipo 1
;Actualizamos los marcadores
;Espera 20ms para eliminar los rebotes
#SW4,PORTA
INICIO
CLR.L
D7
JSR
ACT_MARCA
JMP
INICIO
ACABA:
JSR
;Espera 20ms para eliminar los rebotes
T20MS
BTST
BEQ
#SW5,PORTA
INICIO
JSR
FINAL
;Pone a 0 el marcador del equipo 2
;Actualizamos los marcadores
;Espera 20ms para eliminar los rebotes
;Calcula el resultado del partido
PEA
TEXT5
MOVE.L
#25,D0
TRAP #0
ADDA.L
#4,A7
;Indica que el partido ha terminado
JSR
BLINK
;Parpadea el display LCD
MOVE.B
JSR
#LCDON,D0
LCD_COMMAND
;Deja el display encendido
;Funci¢n PUTS() del monitor
MOVE.L #29,d0
TRAP
#0
;Espera a que se pulse una tecla
;Funcion TECLA() del monitor
MOVE.B
JSR
;Apaga el display LCD
#LCDOFF,D0
LCD_COMMAND
TRAP #5
;Fin del programa
;**************************************************************
;
FIN DEL PROGRAMA
;**************************************************************
64
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
;**************************************************************
;
SUBRUTINAS UTILIZADAS EN LA APLICACIÓN
;**************************************************************
;**************************************************************
;Subrutina que realiza una espera de 20ms con la base de tiempos
;de 5ms de la rutina DELAY para eliminar los rebotes en los
;pulsadores
;**************************************************************
T20MS:
MOVE.L
#$3,D3
T1:
JSR
DELAY
DBF
D3,T1
RTS
;**************************************************************
;Desplaza la LCD 16 caracteres hacia la izquierda y hace que la
;palabra GOOL parpadee en la pantalla
;**************************************************************
GOL:
MOVE.B #LCDOFF,D0
JSR
LCD_COMMAND
;Apaga el display
MOVE.L
;Numero de caracteres a desplazar
#$0F,D2
S1:
MOVE.B #LCDIZDA,D0
JSR
LCD_COMMAND
DBF
D2,S1
JSR
BLINK
;Desplazamiento hacia la izquierda
;Hace que parpadee GOOL
MOVE.B #LCDOFF,D0
JSR
LCD_COMMAND
;Apaga el display
MOVE.L
;Numero de caracteres a desplazar
#$0F,D2
S2:
MOVE.B #LCDDCHA,D0
JSR
LCD_COMMAND
DBF
D2,S2
;Desplazamiento hacia la derecha
MOVE.B #LCDON,D0
JSR
LCD_COMMAND
;Enciende el display
RTS
;**************************************************************
;La rutina BLINK hace que el contenido del display parpadee
;controlando el tiempo que esta encendido y apagado
;**************************************************************
BLINK:
MOVE.L
#$2,D4
;Numero de veces que parpadea
MOVE.B
JSR
#LCDON,D0
LCD_COMMAND
;Enciende la pantalla de la LCD
MOVE.L
#$63,D3
;Espera 500ms (T=k*5ms)
NEXT:
65
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
TIME1:
JSR
DBF
DELAY
D3,TIME1
MOVE.B
JSR
#LCDOFF,D0
LCD_COMMAND
MOVE.L
#$63,D3
JSR
DBF
DELAY
D3,TIME2
DBF
RTS
D4,NEXT
;Apaga la pantalla de la LCD
;Espera 500ms
TIME2:
;**************************************************************
;FINAL: Escribe en la pantalla el resultado final del partido
;**************************************************************
FINAL:
CMP
BEQ
BLT
BGT
RTS
D6,D7
IGUALES
WIN_EQ1
WIN_EQ2
;Calcula el resultado del partido
;El resultado es empate
;Ganador el equipo 1
;Ganador el equipo 2
IGUALES:
;Visualiza en la pantalla del ordenador el resultado
PEA
EMPATE
MOVE.L #25,D0
;Funcion PUTS() del monitor
TRAP #0
ADDA.L
#4,A7
MOVE.B
JSR
#LCDCLR,D0
LCD_COMMAND
;Borra el contenido de la LCD
LEA
JSR
TEXT10,A1
ENVIA_TEXTO
;Envia a la LCD el resultado
MOVE.B
JSR
#LCDLINEA2,D0
LCD_COMMAND
LEA
JSR
TEXT11,A1
ENVIA_TEXTO
MOVE.B
JSR
#LCDON,D0
LCD_COMMAND
;Enciende el display LCD
RTS
WIN_EQ1:
;Visualiza en la pantalla del ordenador el resultado
PEA
GANA
MOVE.L
#25,D0
TRAP #0
ADDA.L
#4,A7
PEA
EQUIPO1
MOVE.L
#25,D0
TRAP #0
ADDA.L
#4,A7
66
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
MOVE.B
JSR
#LCDCLR,D0
LCD_COMMAND
;Borra el contenido de la LCD
LEA
JSR
TEXT12,A1
ENVIA_TEXTO
;Envia a la LCD el resultado
MOVE.B
JSR
#LCDLINEA2,D0
LCD_COMMAND
LEA
JSR
EQUIPO1,A1
ENVIA_TEXTO
MOVE.B
JSR
RTS
#LCDON,D0
LCD_COMMAND
;Enciende el display LCD
WIN_EQ2:
;Visualiza en la pantalla del ordenador el resultado
PEA
GANA
MOVE.L
#25,D0
TRAP #0
ADDA.L
#4,A7
PEA
EQUIPO2
MOVE.L
#25,D0
TRAP #0
ADDA.L
#4,A7
MOVE.B
JSR
#LCDCLR,D0
LCD_COMMAND
;Borra el contenido de la LCD
LEA
JSR
TEXT12,A1
ENVIA_TEXTO
;Envia a la LCD el resultado
MOVE.B
JSR
#LCDLINEA2,D0
LCD_COMMAND
LEA
JSR
EQUIPO2,A1
ENVIA_TEXTO
MOVE.B
JSR
RTS
#LCDON,D0
LCD_COMMAND
;Enciende el display LCD
;-------------------------------------------------------------;ENVIA_TEXTO: Envia a la LCD los caracteres ASCII que se encuentran
;en la direccion apuntada por el registro A1. El texto debe finalizar
;con un byte igual a $00
;-------------------------------------------------------------ENVIA_TEXTO:
CMPI.B
BEQ
#$0,(A1)
FIN_CHAR
MOVE.B
(A1)+,D0
JSR
LCD_DATA
JMP ENVIA_TEXTO
FIN_CHAR:
RTS
;Mira si es el final del texto
;Envia el codigo ASCII a la LCD
;Fin de la subrutina
67
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
;-------------------------------------------------------------;ACT_MARCA: Convierte el numero de goles de cada equipo
;a codigos ASCII y los envia a la LCD para ser visualizados y
;a la pantalla del ordenador
;-------------------------------------------------------------ACT_MARCA:
;Convierte el marcador del EQUIPO 1
MOVE.L
MOVE.L
MOVE.L
MOVE.L
TRAP
ADDA.L
#10,-(A7)
#EQ_1_ASCII,-(A7)
D6,-(A7)
#19,D0
;Funcion ITOSTR() del monitor
#0
#12,A7
;Convierte el marcador del EQUIPO 2
MOVE.L
MOVE.L
MOVE.L
MOVE.L
TRAP
ADDA.L
#10,-(A7)
#EQ_2_ASCII,-(A7)
D7,-(A7)
#19,D0
;Funcion ITOSTR() del monitor
#0
#12,A7
;Presenta por la pantalla del ordenador los marcadores
PEA
MOVE.L
TRAP
ADDA.L
TEXT6
#25,D0
#0
#4,A7
PEA
MOVE.L
TRAP
ADDA.L
TEXT7
#25,D0
#0
#4,A7
PEA
MOVE.L
TRAP
ADDA.L
EQ_1_ASCII
#25,D0
#0
#4,A7
PEA
MOVE.L
TRAP
ADDA.L
TEXT7
#25,D0
#0
#4,A7
PEA
MOVE.L
TRAP
ADDA.L
TEXT7
#25,D0
#0
#4,A7
PEA
MOVE.L
TRAP
ADDA.L
PEA
MOVE.L
TRAP
EQ_2_ASCII
#25,D0
#0
#4,A7
TEXT7
#25,D0
#0
;Escribe el marcador del equipo 1
;Escribe el marcador del equipo 2
68
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
ADDA.L
#4,A7
;Envia el resultado del EQUIPO 1 a la LCD
CMPI.L
BLT
#$0A,D6
UNI_1
;Comprueba si es mayor que 10
;El marcador es mayor que 10
MOVE.B
#EQ1DECP,D0
;Desplaza el cursor a la posicion
;donde estan las decenas del marcador 1
JSR LCD_COMMAND
MOVE.B
(EQ_1_ASCII),D0
;Envia a la LCD el codigo ASCII
;de las decenas
JSR LCD_DATA
MOVE.B
(EQ_1_ASCII+1),D0
JSR LCD_DATA
JMP
EQ2
;Envia a la LCD el codigo
;ASCII de las unidades
;Salto a visualizar el marcador del equipo 2
;El marcador es menor que 10
UNI_1:
MOVE.B
#EQ1DECP,D0
JSR LCD_COMMAND
;Desplaza el cursor a la
;posicion donde estan
;las decenas del marcador 1
MOVE.B #$20,D0
;Envia un espacio en blanco
JSR
LCD_DATA
MOVE.B (EQ_1_ASCII),D0 ;Envia a la LCD el codigo ASCII
JSR LCD_DATA
;Envia el resultado del EQUIPO 2
EQ2:
CMPI.L
BLT
#$0A,D7
UNI_2
;Comprueba si es mayor que 10
;El resultado es mayor que 10
MOVE.B
#EQ2DECP,D0
JSR LCD_COMMAND
;Desplaza el cursor a la
;posicion donde estan
;las decenas del marcador 2
MOVE.B
(EQ_2_ASCII),D0 ;Envia a la LCD el codigo
;ASCII de las decenas
JSR LCD_DATA
MOVE.B (EQ_2_ASCII+1),D0 ;Envia a la LCD el codigo
;ASCII de las unidades
JSR LCD_DATA
JMP
FACT
;Salto a fin de la actualizacion de marcadores
;El resultado es menor que 10
UNI_2:
MOVE.B #EQ2DECP,D0 ;Desplaza el cursor a la
;posicion donde estan
JSR
LCD_COMMAND ;las decenas del marcador 2
MOVE.B #$20,D0
;Envia un espacio en blanco
JSR
LCD_DATA
69
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
MOVE.B (EQ_2_ASCII),D0
JSR LCD_DATA
;Envia a la LCD el codigo ASCII
FACT:
RTS
;Fin de la Subrutina
;-------------------------------------------------------------;Subrutina que hace que el altavoz pite
;-------------------------------------------------------------BIP:
MOVE.L
#GOL_BEEP,-(A7)
MOVE.L #25,D0 ;Funcion PUTS() del monitor
TRAP #0
ADDA.L
#4,A7
RTS
;Fin de la Subrutina
;*********************************************************************
;*********************************************************************
;
LIBRERIA DE UTILIZACION DE LA LCD: Rutinas de Uso General
;*********************************************************************
;*********************************************************************
;-------------------------------------------------------------;LCD_FIRST: Deshabilita la LCD y la deja en modo de espera de comandos
;-------------------------------------------------------------LCD_FIRST:
BCLR
BCLR
BCLR
#EN,PORTA
#RS,PORTA
#RW,PORTA
RTS
;Deshabilita la LCD
;Modo Comandos
;Modo Escritura
;Final de la subrutina
;-------------------------------------------------------------;LCD_INI: Inicializa la LCD para empezar a trabajar
;-------------------------------------------------------------LCD_INI:
;Esperamos 20ms
JSR
JSR
JSR
JSR
DELAY
DELAY
DELAY
DELAY
MOVE.B
#$30,PORTB
JSR
JSR
LCD_ENABLE
DELAY
MOVE.B
#$30,PORTB
JSR
JSR
LCD_ENABLE
DELAY
MOVE.B
#$30,PORTB
JSR
LCD_ENABLE
;Configuracion de interfase de 8 bits,
;1 linea
;Habilita la LCD
;Espera 5ms
;Configuracion de interfase de 8 bits,
;1 linea
;Habilita la LCD
;Espera 5ms
;Configuracion de interfase de 8 bits,
;1 linea
;Habilita la LCD
70
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
JSR
DELAY
MOVE.B
JSR
JSR
#LCDINC,PORTB
LCD_ENABLE
DELAY
MOVE.B
#LCDFUNCION,D0
JSR
LCD_COMMAND
MOVE.B
JSR
#LCDINC,D0
LCD_COMMAND
MOVE.B
JSR
#LCDOFF,D0
LCD_COMMAND
;Apaga LCD
MOVE.B
JSR
#LCDCLR,D0
LCD_COMMAND
;Borra LCD
RTS
;Espera 5ms
;Incremento automatico de AC
;Habilita la LCD
;Espera 5ms
;Configuracion de interfase de 8
;bits, 2 lineas
;Incremento automatico del AC
;Fin de la subrutina
;-------------------------------------------------------------;LCD_ENABLE: Realiza un pulso de activacion de la LCD
;de como minimo 500ns para activarla
;-------------------------------------------------------------LCD_ENABLE:
BSET
JSR
BCLR
JSR
RTS
#EN,PORTA
DELAY
#EN,PORTA
DELAY
;Habilita la LCD
;Espera 5ms
;Deshabilita la LCD
;Espera 5ms
;Fin de la Subrutina
;-------------------------------------------------------------;LCD_DATA: Envia el dato almacenado en D0 a la LCD
;para presentarlo en la pantalla
;-------------------------------------------------------------LCD_DATA:
MOVE.B
BSET
JSR
BCLR
RTS
D0,PORTB
#RS,PORTA
LCD_ENABLE
#RS,PORTA
;Envia el dato a la LCD
;LCD en modo Datos
;Realiza el pulso de activacion para
;que acepte el dato.
;LCD en modo Comandos
;Fin de la subrutina
;-------------------------------------------------------------;LCD_COMMAND: Envia el comando almacenado en D0
;a la LCD para configurarla
;-------------------------------------------------------------LCD_COMMAND:
BCLR
MOVE.B
JSR
RTS
#RS,PORTA
D0,PORTB
LCD_ENABLE
;LCD en modo Comando
;Envia el comando a la LCD
;Realiza el pulso de activación para
;que acepte el comando.
;Fin de la subrutina
71
ANEXO 2: MODULO DE CONTROL DE UNA LCD
SOLUCIÓN DE LA PRÁCTICA
;-------------------------------------------------------------;DELAY: Realiza una temporizacion de 5ms
;Esta temporizaci¢n se realiza utilizando el timer 2 de la VIA
;Como el reloj de la VIA es de 800kHz (8MHz/10) el valor
;a cargar en el temporizador es $0FA0
;-------------------------------------------------------------DELAY:
BSET
BCLR
#7,IER
#5,IER
;Activa interrupciones se¤aladas con 1
;Desactiva interrupciones del timer 2
MOVE.B
MOVE.B
MOVE.B
#$00,ACR
#CONT_L,T2C_L
#CONT_H,T2C_H
;Programa T2 en modo temporizador
;Carga byte bajo del contador
;Carga byte alto del contador.
;Inicia la cuenta
BTST
BEQ
#5,IFR
L1
;Mira si el flag T2=1
L1:
RTS
;Fin de la subrutina
;********** CADENAS DE TEXTO UTILIZADAS EN LA APLICACION ******
CABECERA
PREG_1
PREG_2
GOOL
GOL_BEEP
TEXT5
TEXT6
TEXT7
TEXT8
TEXT9
TEXT10
TEXT11
TEXT12
EMPATE
GANA
DB $0d,$0a,$07,'MARCADOR DE UN ESTADIO DE
FUTBOL',$0d,$0a,'Por: Antonio M. Zaplana',$0
DB $0d,$0a,'Nombre del equipo Local: ',$0
DB $0d,$0a,'Nombre del equipo Visitante: ',$0
DB '* * * GOOL * * *',$0
DB $07,$0
DB
$07,$07,$0d,$0a,$0a,$0a,'Fin del programa',$0
DB
$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,
$08,$08,$08,$08,$08,$08,$08,$08,$09,$09,$0
DB
' ',$0
DB
$0D,$0A,$0
DB
$0D,$0A,'Resultado: ',$0D,$0A,$0
DB
'Resultado:',$0
DB
'
EMPATE
',$0
DB
'Ha ganado el:',$0
DB
$0D,$0A,'Fin del Partido, el resultado
ha sido empate',$0
DB
$0D,$0A,'Fin del Partido, ha ganado el ',$0
END
Código 2. Código fuente de la aplicación Marcador de un Estadio de Fútbol
72
ANEXO 3: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
Anexo 3:
Práctica de Control de Temperatura con Lectura de
Ocho Bits
1 Enunciado de la Práctica
El módulo de control de temperatura funciona como un horno eléctrico. Esta práctica
tiene como objetivo realizar un control de temperatura del horno con la ayuda del
microinstructor del 68000.
Para conseguir este propósito, hemos dividido la práctica en tres partes. La primera
consiste en realizar un estudio previo estudiando la información técnica del módulo que
se va a usar. Esta documentación está disponible en el siguiente capítulo. El alumno
debe responder las preguntas del cuestionario del estudio previo antes de la primera
sesión de prácticas. La segunda parte de la práctica consiste en realizar la adquisición de
la conversión analógico – digital de la salida del sensor de temperatura. Finalmente, la
tercera parte de la práctica consiste en programar un control digital para que la
temperatura del horno sea la que nosotros queremos.
2 Información Técnica
Este módulo está formado por un elemento sensor de temperatura cuya salida está
acondicionada por un circuito analógico. Posteriormente la salida acondicionada se
muestrea mediante el conversor analógico – digital disponible en el microcontrolador
PIC16F873. La señal muestreada se trata mediante un programa que se ejecuta en el
microcontrolador. Mediante uno de los puertos de entrada – salida de éste se envía el
valor de la conversión al puerto A de la VIA para su tratamiento en el programa de
control que se ejecuta en el microinstructor TM-683. Mediante otro puerto del
microcontrolador se visualiza la temperatura medida en un visualizador de tres dígitos
de siete segmentos.
El programa de control tiene que generar una señal, que convertida mediante un
conversor digital – analógico será la encargada de excitar un transistor de potencia. Este
transistor regula la corriente que pasa por la resistencia de calentamiento. De esta forma
se controla la potencia disipada por la resistencia, cuya temperatura es la que se quiere
controlar. Para este motivo se pueden programar varios tipos de control: todo – nada,
todo – nada con histéresis, control proporcional e incluso un control PID.
El esquema eléctrico del módulo de control de temperatura se encuentra al final de este
documento.
73
ANEXO 3: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
En la Figura 1 se puede ver el diagrama de bloques del módulo de control de
temperatura.
Figura 1. Diagrama de Bloques del Módulo de Control de Temperatura
2.1 Medición de Temperatura
El elemento sensor de temperatura IC1, es un circuito integrado tipo LM35, el cual
dispone de tres terminales y proporciona una salida lineal de tensión de 10mV/ºC. El
rango de temperatura es de 0ºC a 100ºC, aproximadamente. Las características técnicas
de este circuito se pueden ver en la Tabla 1:
Factor de escala lineal
Precisión a 25ºC
Alimentación
No linealidad
Impedancia de salida baja
+10mV/ºC
0.5ºC
4 a 30V
±¼ ºC
0.1Ω para una carga de 1mA.
Tabla 1. Características técnicas del CI. LM35DZ
Tal y como muestra el esquema de bloques de la Figura 2, el sensor de temperatura
reacciona ante el calor emitido por la resistencia de potencia, produciendo una
diferencia de tensión, proporcional a la temperatura de la resistencia, entre su salida y el
nodo de referencia.
74
ANEXO 3: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
Figura 2. Esquema de la medición de temperatura
La salida del sensor de temperatura se introduce en el circuito de acondicionamiento de
señal por medio del integrado IC2, que es un amplificador operacional tipo OP07 en
configuración de seguidor de tensión. La salida de esta etapa seguidora se introduce en
IC3, que es un amplificador de ganancia 5, realizado también con un amplificador
operacional OP07, en configuración no inversora. Las resistencias utilizadas son de baja
tolerancia para respetar al máximo la señal del sensor.
Posteriormente, la salida del amplificador de tensión, se introduce en otra etapa
separadora IC4, formada también por un amplificador operacional tipo OP07 de la
misma forma que IC2. Por último, la señal de salida se introduce a uno de los canales
analógicos del microcontrolador, concretamente, a la entrada AN0.
2.2 Conversor Digital – Analógico
La conversión digital – analógico se realiza mediante el circuito integrado IC10 tipo
DAC08CN. Es un circuito integrado con tecnología CMOS en un encapsulado de 16
pins tipo DIL. Las características técnicas se encuentran en la Tabla 2:
Resolución
Datos
Tiempo de conversión
Alimentación
Error de ganancia
Canales
8 bits
Paralelo
1µs
18V (máx)
±1%
2
Tabla 2. Características del DAC08CN
El conversor DAC está polarizado con una corriente de 2mA, resultado de aplicar una
tensión de 10 voltios, procedente de un regulador lineal de tensión IC6 tipo 7810, a una
resistencia de polarización de 5kΩ. La salida analógica del conversor se introduce en
IC11 que es un amplificador operacional tipo OP07 realimentado con una resistencia de
5kΩ, para producir una tensión de salida entre 0V y 10V.
75
ANEXO 3: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
2.3 Conexión con el Microinstructor TM-683
En el microinstructor TM-683 están disponibles dos conectores de aplicación
(Aplicación 1 y Aplicación 2) con dos puertos de 8 bits cada uno (puerto A y puerto B).
En el microcontrolador disponemos de tres puertos de entrada-salida. De estos tres
puertos, sólo dos de ellos (puerto B y puerto C) disponen de ocho líneas de datos. El
puerto A del microcontrolador sólo dispone de cinco líneas de datos.
El microinstructor TM-683 se conecta al módulo de aplicación mediante el conector de
aplicación CN3. En este conector están disponibles las señales de la VIA. El puerto A
(PA0 – PA7) de la VIA está conectado al puerto B (RB0 – RB7) del microcontrolador;
mientras que el puerto B (PB0 – PB7) de la VIA está conectado a las entradas digitales
del conversor DAC. Por el puerto A de la VIA, el microcontrolador envía al
microinstructor el valor de la conversión analógico – digital de la temperatura.
La señal RA1 del microcontrolador está conectado a un interruptor de configuración.
Para la realización de esta práctica, el interruptor de configuración del módulo (SW7)
debe estar en estado lógico “1”. En este caso el microcontrolador envía al
microinstructor un valor de 8 bits correspondientes a los ocho bits más significativos de
la conversión.
Cuando el microcontrolador tiene un nuevo valor de conversión para enviar, provoca un
flanco descendente en su línea RA3, que está conectada a la línea CA1 del
microinstructor, indicando que en el puerto A hay un valor de conversión. Programando
debidamente el microinstructor, este hecho puede servir de interrupción externa.
2.4 Módulo de Calor
La salida procedente del conversor DAC junto con el amplificador operacional, se
conectan a la base del transistor de potencia Q4 tipo DB139. El colector del transistor
está conectado a la tensión de alimentación de la fuente de +15V y, el emisor está
conectado a la resistencia de potencia R19 de 10Ω y 15W. Según pase más o menos
corriente por el transistor, el conjunto transistor – resistencia de potencia se calentará
más o menos. Esta corriente se controla con la tensión de salida del DAC.
3 Estudio Previo
Una vez leída y entendida la información técnica del apartado 2, responder a las
siguientes cuestiones, argumentando las respuestas.
a) Obtener la expresión que relaciona la temperatura de la resistencia con el valor
de la conversión analógico – digital, suponiendo que tenemos un conversor A /
D de 8 bits y que sus tensiones de referencia son: Vmax = 5V y Vmin = 0V para un
rango de temperaturas de 0ºC a 100ºC.
b) Si el resultado de la conversión analógico – digital es 136 (88h), ¿cuál es la
temperatura de la resistencia?
c) ¿Cuál es la resolución de la conversión en ºC / cuenta?
76
ANEXO 3: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
d) Calcula la expresión que relaciona el dato digital de la entrada del conversor
digital – analógico con la tensión de salida del mismo.
e) ¿Qué tensión de salida corresponderá con un valor digital en la entrada de 58
(3Ah)?
4 Adquisición y Procesado del Dato
En este apartado se debe crear un programa para adquirir el resultado de la conversión
analógico – digital y, procesarlo para obtener en una posición de memoria el valor de la
temperatura de la resistencia.
Para realizar este apartado, el interruptor de configuración número 7 tiene que estar
abierto (estado lógico “1”).
Programar la rutina de atención a la interrupción, que ha sido generada por un flanco
descendente en la línea CA1, para que lea del puerto A de la VIA los 8 bits del resultado
de la conversión analógico – digital.
Fuera de la interrupción, operar con el dato leído para obtener la temperatura de la
resistencia.
5 Control Digital
Programar un algoritmo de control que compare la temperatura obtenida con la
temperatura deseada y, actúe en consecuencia para que la temperatura de la resistencia
sea lo más similar posible a la temperatura deseada.
Se puede elegir uno de los siguientes algoritmos de control:
-
Todo / Nada
Todo / Nada con Histéresis
Proporcional (P)
Proporcional Integral (PI)
Proporcional, Integral y Derivativo (PID)
En la elección del tipo de control, se debe tener muy en cuenta la gran inercia que
presenta el sistema. Los procesos de calentamiento y enfriamiento de la resistencia de
potencia son lentos.
Razona el porqué de tu elección.
77
ANEXO 4: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
Anexo 4:
Práctica de Control de Temperatura con Lectura de
Diez Bits
1 Enunciado de la Práctica
El módulo de control de temperatura funciona como un horno eléctrico. Esta práctica
tiene como objetivo realizar un control de temperatura del horno con la ayuda del
microinstructor del 68000.
Para conseguir este propósito hemos dividido la práctica en tres partes. La primera
consiste en realizar un estudio previo estudiando la información técnica del módulo que
se va a usar, disponible en el siguiente capítulo y, responder las preguntas del
cuestionario. La segunda parte de la práctica consiste en realizar la adquisición de la
conversión analógico – digital de la salida del sensor de temperatura. Finalmente, la
tercera parte de la práctica consiste en programar un controlador digital para que la
temperatura del horno sea la que nosotros queremos.
2 Información Técnica
Este módulo está formado por un elemento sensor de temperatura cuya salida está
acondicionada por un circuito analógico. Posteriormente la salida acondicionada se
muestrea mediante el conversor analógico – digital disponible en el microcontrolador
PIC16F873. La señal muestreada se trata mediante un programa que se ejecuta en el
microcontrolador. Mediante uno de los puertos de entrada – salida de éste se envía el
valor de la conversión al puerto A de la VIA para su tratamiento en el programa de
control que se ejecuta en el microinstructor TM-683. Mediante otro puerto del
microcontrolador se visualiza la temperatura medida en un visualizador de siete
segmentos formado por tres módulos de cátodo común.
El programa de control genera una señal que es convertida mediante un conversor
digital – analógico que es el encargado de excitar un transistor de potencia, el cual
regula la corriente que pasa por la resistencia de calentamiento, y por consiguiente,
controla la potencia disipada por la resistencia cuya temperatura es la que se quiere
controlar. Para este motivo se pueden programar varios tipos de control: todo – nada,
todo – nada con histéresis, control proporcional e incluso un control PID.
El esquema eléctrico del módulo de control de temperatura se encuentra al final de este
documento.
79
ANEXO 4: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
En la Figura 1 se puede ver el diagrama de bloques del módulo de control de
temperatura.
Figura 1. Diagrama de Bloques del Módulo de Control de Temperatura
2.1 Medición de Temperatura
El elemento sensor de temperatura IC1, es un circuito integrado tipo LM35, el cual
dispone de tres terminales y proporciona una salida lineal de tensión de 10mV/ºC. El
rango de temperatura es de 0ºC a 100ºC, aproximadamente. Las características técnicas
de este circuito se pueden ver en la Tabla 1:
Factor de escala lineal
Precisión a 25ºC
Alimentación
No linealidad
Impedancia de salida baja
+10mV/ºC
0.5ºC
4 a 30V
±¼ ºC
0.1Ω para una carga de 1mA.
Tabla 1. Características técnicas del CI. LM35DZ
Tal y como muestra el esquema de bloques de la Figura 2, el sensor de temperatura
reacciona ante el calor emitido por la resistencia de potencia, produciendo una
diferencia de tensión, proporcional a la temperatura de la resistencia, entre su salida y el
nodo de referencia.
80
ANEXO 4: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
Figura 2. Esquema de la medición de temperatura
La salida del sensor de temperatura se introduce en el circuito de acondicionamiento de
señal por medio del integrado IC2, que es un amplificador operacional tipo OP07 en
configuración de seguidor de tensión. La salida de esta etapa seguidora se introduce en
IC3, que es un amplificador de ganancia 5, realizado también con un amplificador
operacional OP07, en configuración no inversora. Las resistencias utilizadas son de baja
tolerancia para respetar al máximo la señal del sensor.
Posteriormente, la salida del amplificador de tensión, se introduce en otra etapa
separadora IC4, formada también por un amplificador operacional tipo OP07 de la
misma forma que IC2. Por último, la señal de salida se introduce a uno de los canales
analógicos del microcontrolador, concretamente, a la entrada AN0.
2.2 Conversor Digital – Analógico
La conversión digital – analógico se realiza mediante el circuito integrado IC10 tipo
DAC08CN. Es un circuito integrado con tecnología CMOS en un encapsulado de 16
pins tipo DIL. Las características técnicas se encuentran en la Tabla 2:
Resolución
Datos
Tiempo de conversión
Alimentación
Error de ganancia
Canales
8 bits
Paralelo
1µs
18V (máx)
±1%
2
Tabla 2. Características del DAC08CN
El conversor DAC está polarizado con una corriente de 2mA, resultado de aplicar una
tensión de 10 voltios, procedente de un regulador lineal de tensión IC6 tipo 7810, a una
resistencia de polarización de 5kΩ. La salida analógica del conversor se introduce en
IC11 que es un amplificador operacional tipo OP07 realimentado con una resistencia de
5kΩ, para producir una tensión de salida entre 0V y 10V.
81
ANEXO 4: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
2.3 Conexión con el Microinstructor TM-683
En el microinstructor TM-683 están disponibles dos conectores de aplicación
(Aplicación 1 y Aplicación 2) con dos puertos de 8 bits cada uno (puerto A y puerto B).
En el microcontrolador disponemos de tres puertos de entrada-salida. De estos tres
puertos, sólo dos de ellos (puerto B y puerto C) disponen de ocho líneas de datos. El
puerto A del microcontrolador sólo dispone de cinco líneas de datos.
El microinstructor TM-683 se conecta al módulo de aplicación mediante el conector de
aplicación CN3. En este conector están disponibles las señales de la VIA. El puerto A
(PA0 – PA7) de la VIA está conectado al puerto B (RB0 – RB7) del microcontrolador;
mientras que el puerto B (PB0 – PB7) de la VIA está conectado a las entradas digitales
del conversor DAC. Por el puerto A de la VIA, el microcontrolador envía al
microinstructor el valor de la conversión analógico – digital de la temperatura.
La señal RA1 del microcontrolador está conectado a un interruptor de configuración. Si
el estado lógico del interruptor es “1”, el microcontrolador envía al microinstructor un
valor de 8 bits correspondientes a los ocho bits más significativos de la conversión.
Cuando el estado lógico del interruptor es “0”, el microcontrolador envía los 10 bits de
la conversión multiplexados en tiempo con el siguiente formato:
MSB
0
MSB
1
0
0
0
0
X
X
Byte Bajo
X
X
Byte Alto
X
X
X
LSB
X
X
LSB
X
En ambos casos, el microcontrolador provoca un flanco descendente en su línea RA3,
que está conectada a la línea CA1 del microinstructor, indicando que en el puerto A hay
un valor de conversión.
El valor de la conversión, se envía al puerto A de la VIA porque en el conector de
aplicación sólo están disponibles las señales de control del puerto A. Estas señales de
control son necesarias para realizar una petición de interrupción y para el
reconocimiento de la interrupción por parte del microcontrolador. Programando
debidamente el microinstructor, un flanco de bajada en la línea CA1 sería motivo de
interrupción externa.
La línea RA2 del microcontrolador está conectada a la línea CA2 de la VIA. El
programa de control del microinstructor debe programar los registros de la VIA para
que al leer el dato de la conversión del puerto A, la línea CA2 baje a nivel lógico “0”,
hecho que el microcontrolador interpreta como que se ha recibido el dato de la
conversión y puede enviar el siguiente.
En el Gráfico 1 se representa la variación de las líneas de datos y control (CA1 y CA2)
cuando el microcontrolador envía un dato a la VIA del microinstructor.
82
ANEXO 4: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
Grafico 1. Comportamiento de las líneas que intervienen en el envío de un dato a la VIA.
2.4 Módulo de Calor
La salida procedente del conversor DAC junto con el amplificador operacional, se
conectan a la base del transistor de potencia Q4 tipo DB139. El colector del transistor
está conectado a la tensión de alimentación de la fuente de +15V y, el emisor está
conectado a la resistencia de potencia R19 de 10Ω y 15W. Según pase más o menos
corriente por el transistor, el conjunto transistor – resistencia de potencia se calentará
más o menos. Esta corriente se controla con la tensión de salida del DAC.
83
ANEXO 4: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
3 Estudio Previo
Una vez leída y entendida la información técnica del apartado 2, responder a las
siguientes cuestiones, argumentando las respuestas.
a) Obtener la expresión que relaciona la temperatura de la resistencia con el valor
de la conversión analógico – digital, suponiendo que tenemos un conversor A /
D de 10 bits y que sus tensiones de referencia son: Vmax = 5V y Vmin = 0V para
un rango de temperaturas de 0ºC a 100ºC.
b) Si el resultado de la conversión analógico – digital es 136 (88h), ¿cuál es la
temperatura de la resistencia?
c) Según lo explicado en el Apartado 2.3, describe el proceso a seguir para obtener
en un registro de datos del 68000 (D0 – D7) el valor completo de la conversión
analógico-digital.
d) Calcula la expresión que relaciona el dato digital de la entrada del conversor
digital – analógico con la tensión de salida del mismo.
e) ¿Qué tensión de salida corresponderá con un valor digital en la entrada de 58
(3Ah)?
4 Adquisición y Procesado del Dato
En este apartado se debe crear un programa para adquirir el resultado de la conversión
analógico – digital y, procesarlo para obtener en una posición de memoria el valor de la
temperatura de la resistencia.
Para realizar este apartado, el interruptor de configuración número 7 tiene que estar
cerrado (estado lógico “0”).
Programar la rutina de atención a la interrupción generada por un flanco descendente en
la línea CA1, para que lea del puerto A de la VIA los 10 bits del resultado de la
conversión analógico – digital.
Fuera de la interrupción, operar con el dato leído para obtener la temperatura de la
resistencia.
84
ANEXO 4: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
5 Control Digital
Programar un algoritmo de control que compare la temperatura obtenida con la
temperatura deseada y, actúe en consecuencia para que la temperatura de la resistencia
sea lo más similar posible a la temperatura deseada.
Se puede elegir uno de los siguientes algoritmos de control:
-
Todo / Nada
Todo / Nada con Histéresis
Proporcional (P)
Proporcional Integral (PI)
Proporcional, Integral y Derivativo (PID)
En la elección del tipo de control, se debe tener muy en cuenta la gran inercia que
presenta el sistema. Los procesos de calentamiento y enfriamiento de la resistencia de
potencia son lentos.
Razona el porqué de tu elección.
85
ANEXO 5: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
Anexo 5:
Práctica de Conversión A/D y Visualización en Display
de Siete Segmentos
1 Enunciado de la Práctica
El módulo de control de temperatura funciona como un horno eléctrico. Esta práctica
tiene como objetivo realizar la medición de la temperatura de calentamiento del horno
mediante un conversor analógico – digital y visualizar en un display con tres dígitos de
siete segmentos dicha temperatura.
Para conseguir este propósito hemos dividido la práctica en tres partes. La primera
consiste en realizar un estudio previo estudiando la información técnica del módulo que
se va a usar, disponible en el siguiente capítulo y, responder las preguntas del
cuestionario. La segunda parte de la práctica consiste en programar el microcontrolador
PIC16F873 de la placa para que realice la conversión analógico – digital de la salida del
sensor de temperatura. Finalmente, la tercera parte de la práctica consiste en procesar el
dato obtenido de la conversión analógico – digital y visualizar el valor de la temperatura
en el display.
2 Información Técnica
Este módulo está formado por un elemento sensor de temperatura cuya salida está
acondicionada por un circuito analógico. Posteriormente la salida acondicionada se
muestrea mediante el conversor analógico – digital disponible en el microcontrolador
PIC16F873. La señal muestreada se trata mediante un programa que se ejecuta en el
microcontrolador. Mediante uno de los puertos de entrada – salida de éste se visualiza
la temperatura medida en un visualizador de siete segmentos formado por tres dígitos de
cátodo común.
El esquema eléctrico del módulo de control de temperatura se encuentra al final de este
documento.
87
ANEXO 5: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
En la Figura 1 se puede ver el diagrama de bloques del módulo de control de
temperatura.
Figura 1. Diagrama de Bloques del Módulo de Control de Temperatura
2.1 Medición de Temperatura
El elemento sensor de temperatura IC1, es un circuito integrado tipo LM35, el cual
dispone de tres terminales y proporciona una salida lineal de tensión de 10mV/ºC. El
rango de temperatura es de 0ºC a 100ºC, aproximadamente. Las características técnicas
de este circuito se pueden ver en la Tabla 1:
Factor de escala lineal
Precisión a 25ºC
Alimentación
No linealidad
Impedancia de salida baja
+10mV/ºC
0.5ºC
4 a 30V
±¼ ºC
0.1Ω para una carga de 1mA.
Tabla 1. Características técnicas del CI. LM35DZ
Tal y como muestra el esquema de bloques de la Figura 2, el sensor de temperatura
reacciona ante el calor emitido por la resistencia de potencia, produciendo una
diferencia de tensión, proporcional a la temperatura de la resistencia, entre su salida y el
nodo de referencia.
88
ANEXO 5: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
Figura 2. Esquema de la medición de temperatura
La salida del sensor de temperatura se introduce en el circuito de acondicionamiento de
señal por medio del integrado IC2, que es un amplificador operacional tipo OP07 en
configuración de seguidor de tensión. La salida de esta etapa seguidora se introduce en
IC3, que es un amplificador de ganancia 5, realizado también con un amplificador
operacional OP07, en configuración no inversora. Las resistencias utilizadas son de baja
tolerancia para respetar al máximo la señal del sensor.
Posteriormente, la salida del amplificador de tensión, se introduce en otra etapa
separadora IC4, formada también por un amplificador operacional tipo OP07 de la
misma forma que IC2. Por último, la señal de salida se introduce a uno de los canales
analógicos del microcontrolador, concretamente, a la entrada AN0.
2.2 Conversión Analógico – Digital
El microcontrolador utilizado en el módulo, dispone de un conversor analógico-digital
con una resolución de 10 bits. Este módulo se ha diseñado para medir temperaturas
dentro de un rango de 0 a 100 ºC. Tal y como se vio en el apartado anterior, el sensor
de temperatura proporciona una salida lineal de tensión de 10mV/ºC que es
proporcional a la temperatura a la que está sometido. Estos datos se representan en el
Gráfico 1, que relaciona la tensión de salida del sensor con la temperatura.
89
ANEXO 5: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
Gráfico 1. Tensión de salida del sensor Vs. Temperatura
La salida del sensor de temperatura se acondiciona por medio de un circuito analógico,
consistente en un amplificador de tensión con ganancia cinco. Por lo tanto, la relación
existente entre la tensión de entrada al conversor analógico-digital y la temperatura es la
que se muestra en el Grafico 2.
Grafico 2. Tensión de entrada al conversor A/D Vs. Temperatura
90
ANEXO 5: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
El conversor analógico-digital está configurado con unas tensiones de referencia de 0V
y 5V. Con esta configuración, para una entrada de 0V se obtiene el valor digital
00000000002 y, para una entrada de 5V se obtiene el valor digital 11111111112 (1023).
El Gráfico 3 muestra la relación entre el valor digital obtenido respecto a la
temperatura.
Grafico 3. Valor Digital Vs. Temperatura
Como se ha indicado previamente, la conversión analógico – digital de la señal se hace
mediante el microcontrolador IC8 del tipo PIC16F873 fabricado por MICROCHIP, el
cual dispone de un conversor analógico – digital (ADC) de 10 bits y cinco canales. Este
microcontrolador dispone, además, de 22 líneas de entrada – salida capaces de entregar
una corriente máxima de 25mA por línea, 7168 bytes de memoria FLASH, 192 bytes de
memoria RAM, 128 bytes de memoria EEPROM, dos módulos de modulación de
anchura de pulsos (PWM) con una precisión de 10 bits, un temporizador de 16 bits, dos
temporizadores de 8 bits, un temporizador de perro guardián (WDT), módulo universal
de transmisión / recepción síncrona / asíncrona de datos vía serie (USART), bus I²C
(Inter-Integrated Circuit Bus), interfase serie de periféricos (SPI), todo ello en un
encapsulado de 28 pins tipo SP (Lead Skinny PDIP).
El microcontrolador funciona con una señal de reloj de 4MHz procedente del cristal de
cuarzo Y1.
91
ANEXO 5: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
2.3 Visualizador de Siete Segmentos
La visualización de la temperatura se realiza mediante tres módulos de siete segmentos
LED de cátodo común tipo MAN74A de color rojo y frontal rojo. Los segmentos tienen
una altura de 7.62mm y están dispuestos en encapsulados de 10 pines. Estos displays
están diseñados para dar un óptimo contraste entre encendido / apagado. La versión de
cátodo común dispone de un punto decimal en el lado derecho. Las características
técnicas de estos módulos se pueden observar en la Tabla 2:
Tensión directa nominal
Corriente directa
Nominal
1.6V
10mA
Máxima
30mA
Intensidad luminosa nominal por dígito
2.5mcd
Tensión inversa máxima
6V
Ángulo de visión
±75º
Potencia máxima disipada por segmento
60mW
Temperatura de funcionamiento
De –40ºC a +85ºC
Tabla 2. Características técnicas del módulo de 7 segmentos.
Cada uno de los segmentos del display está conectado a una línea del puerto C del
microcontrolador mediante resistencia limitadoras de corriente. La relación entre los
segmentos del display y las líneas del puerto C del microcontrolador se encuentra en la
Tabla 3:
SEGMENTO
A
B
C
D
E
F
G
Punto decimal
PUERTO C
RC6
RC5
RC4
RC3
RC2
RC1
RC0
RC7
Tabla 3. Relación entre los segmentos y sus líneas de datos
92
ANEXO 5: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
En la Figura 3 se muestra la posición de cada segmento:
Figura 3. Posición de los segmentos
en el display
Como se ha indicado antes, los dígitos del display son de cátodo común. El cátodo de
cada dígito está conectado a una salida del decodificador IC9 del tipo 74LS139. El
circuito IC9 es un decodificador 2 a 4 cuyas entradas son las líneas RA4 y RA5 del PIC.
En la Tabla 4 se detallan los estados de cada una estas señales para activar los digitos.
RA4
0
0
1
1
RA5
0
1
0
1
DIGITO
DIG0
DIG1
DIG2
No utilizado
Tabla 4. Selección de los dígitos de 7 segmentos
2.4 Programador PIC16F873
Se conecta al puerto paralelo del PC mediante el conector CN2 y necesita, además, una
alimentación continua comprendida entre 15V y 30V. El consumo de corriente del
programador es inferior a 100mA.
Este montaje es capaz de leer, verificar, programar y comparar los PIC sin ninguna
restricción, lo mismo que puede leer y programar sus fusibles de configuración.
Los microcontroladores PIC de MICROCHIP están todos provistos de memoria de
acceso serie. Tres de las patillas del encapsulado cambian momentáneamente de función
durante la fase de programación para dar acceso a la memoria de programa interna; este
cambio se desencadena simplemente aplicando una tensión 13.8V (tensión alta de
programación) en la patilla VPP.
Aunque las memorias PIC se programan en serie, el programador se conecta al puerto
paralelo del PC. En efecto, por una parte este puerto se puede controlar muy fácilmente
por software y, por otra parte, suministra niveles TTL directamente utilizables. Además,
debemos disponer de algunas líneas de control para conmutar las diversas
alimentaciones del microcontrolador en el curso de la programación.
93
ANEXO 5: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
Las señales del puerto paralelo son señales TTL bastante deterioradas por el cable de
conexión. Por este motivo se restauran por medio de los inversores contenidos en el
circuito IC7 tipo 74LS06. Este circuito dispone de salidas de colector abierto, lo cual
permite controlar fácilmente los transistores Q1, Q2 y Q3. Q2 y Q3 permiten aplicar la
tensión alta de programación VPP a las patillas adecuadas. El transistor Q1 gobierna la
tensión normal de alimentación VDD y permite no alimentar el circuito a programar
más que cuando es verdaderamente necesario acceder a él.
Para indicar la aplicación o no de estas tensiones, se utilizan dos LED rojos, D4 y D5,
gobernados por las dos tensiones VPP. En cuanto al diodo D6, se enciende simplemente
cuando el programador está bajo tensión, con el fin de señalar el buen funcionamiento
de la alimentación.
Los datos a programar en el circuito transitan por la puerta IC7a, pasando por IC7b en
caso de una segunda lectura del circuito. En cuanto al reloj de programación pasa por
IC7c.
El programador se alimenta mediante la fuente de alimentación MM-600, común a
todos los módulos de aplicación del microinstructor TM-683. La salida de +15V pasa a
través del regulador lineal de tensión IC5 tipo 7812, el cual tiene en su patilla común
tres diodos (D1, D2, D3, tipo 1N4004) conectados en serie que elevan la tensión de
salida a 13.8V.
El programador dispone también de 5 microinterruptores disponibles en SW2 cuya
función es la de dejar las señales del programador en circuito abierto en caso de que no
se tenga que programar y se esté en fase de ejecución.
En la Figura 4 se puede ver la posición de los siete microinterruptores disponibles en
SW2 cuando se está en fase de grabación del PIC16F873 y cuando se está ejecutando el
programa.
Cuando se está en fase de programación (ver Figura 4a), cerramos los interruptores 1 a
5 de forma que por el primer microinterruptor se gobierna la tensión alta de
programación, por el tercer microinterruptor se gobierna la tensión de alimentación del
chip, por el cuarto transita el reloj de programación; y por el quinto transitan los datos a
programar. Los microinterruptores 6 y 7 deben estar abiertos ya que el 6 gobierna la
tensión del chip en la fase de ejecución y el microinterruptor 7 indica la longitud del
dato de conversión A / D que se envía al microinstructor TM-683.
Figura 4. Posición de los microinterruptores para (a) programación,
o (b) ejecución
94
ANEXO 5: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
2.4.1 Software de Programación del PIC16F873
Numerosos programas disponibles en internet pueden utilizarse con el programador que
incorpora el módulo de Control de Temperatura. Se ha elegido el programa P16Pro de
Bojan Dobaj. Este software se adapta perfectamente al montaje del programador.
Antes de ejecutar el programa se deben poner los interruptores de configuración tal y
como indica la Figura 4a. Con el módulo apagado, conectar el programador al puerto
paralelo del PC.
Una vez alimentado el módulo, comprobar que el led verde está encendido. Los leds
rojos pueden estar encendidos o apagados según el estado del puerto paralelo del PC.
Ejecutar entonces el programa P16PRO. Tratándose de un programa DOS se ejecuta
bajo MS-DOS, en modo MS-DOS si se trabaja con Windows 9x.
Cualquiera que sea el modo de ejecución se accede a una pantalla principal. En la parte
superior izquierda de la pantalla se encuentran accesibles dos menús desplegables
pulsando la tecla Alt. Estos menús dan acceso a todo lo concerniente a los ficheros
(menú FILE) y a la configuración hardware.
La primera operación a realizar consiste en configurar los parámetros del programador.
Para esto, vaya al menú Settings y sitúese en Other por medio de las teclas de
desplazamiento del cursor. Entonces puede seleccionar el puerto paralelo al cual se
encuentra conectado el módulo. Una vez hecho esto ir al menú Settings y situarse en
Hardware. Para que el programa funcione se debe configurar de la siguiente forma:
OutData D0 Neg
Clock
D1 Neg
Vdd
D2
Vpp
D3
Vpp1
D4
Data In ACK Neg
A continuación ir al menú Settings y situarse en Device. Aparece una pantalla en la que
debemos escribir el número 9 (PIC16F873) y pulsar ENTER.
Entonces se debe elegir el fichero con extensión .HEX a programar en el menú FILE>Open Program. Para programar el microcontrolador basta con pulsar la tecla F4.
95
ANEXO 5: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
3 Estudio Previo
Una vez leída y entendida la información técnica del apartado 2, responder a las
siguientes cuestiones, argumentando las respuestas.
a) Obtener la expresión que relaciona la temperatura de la resistencia con el valor
de la conversión analógico – digital, suponiendo que tenemos un conversor A /
D de 10 bits y que sus tensiones de referencia son: Vmax = 5V y Vmin = 0V para
un rango de temperaturas de 0ºC a 100ºC.
b) Si el resultado de la conversión analógico – digital es 136 (88h), ¿cuál es la
temperatura de la resistencia?
c) ¿Cuál es la resolución de la conversión en ºC / cuenta?
d) Indica el estado de las líneas RA4, RA5 y el valor a enviar por el puerto C para
visualizar en el dígito 1 el número 2 con punto decimal.
e) Completa la siguiente tabla:
Numero a
Visualizar
0
1
2
3
4
5
6
7
8
9
RC7
RC6
RC5
PUERTO C
RC4
RC3
96
RC2
RC1
RC0
ANEXO 5: MÓDULO DE CONTROL DE TEMPERATURA
INFORMACIÓN PARA EL ALUMNO
4 Conversión Analógico - Digital
En este apartado se debe programar el módulo A / D del microcontrolador para que
realice la conversión analógico – digital de la salida del sensor de temperatura y,
procesarlo para obtener en una posición de memoria el valor de la temperatura de la
resistencia.
Para realizar este apartado, se tienen que seguir los siguientes pasos:
-
-
Leer detenidamente el manual del microcontrolador PIC16F873.
Configurar el módulo A / D para que el canal analógico sea la línea AN0
(RA0) y todas las demás líneas sean digitales. Las tensiones de referencia
tienen que ser VDD y VSS.
Programar la velocidad de muestreo
Programar la rutina de atención a la interrupción provocada por la
finalización de una conversión.
Fuera de la rutina de atención a la interrupción, procesar el resultado de la
conversión para que en una posición de la memoria tengamos el valor real de
la temperatura.
5 Visualización en el Display de 7 Segmentos
Crear una función que dado un valor de temperatura guardado en una posición de
memoria determinado, visualice dicha temperatura en los dígitos del display de siete
segmentos con un decimal de precisión.
97
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
Anexo 6:
Módulo de Control de Temperatura
(Solución de las Prácticas)
En este documento se encuentran las soluciones de las prácticas descritas en los anexos
3, 4 y 5.
1 Práctica de Control de Temperatura con Lectura de Ocho Bits
1.1 Estudio Previo
a) Obtener la expresión que relaciona la temperatura de la resistencia con el valor
de la conversión analógico – digital, suponiendo que tenemos un conversor A /
D de 8 bits y que sus tensiones de referencia son: Vmax = 5V y Vmin = 0V para un
rango de temperaturas de 0ºC a 100ºC.
Los datos que se nos proporcionan son:
Rango de Temperatura: 0ºC a 100ºC
Tensión de Referencia: Vmax = 5V Vmin = 0V
De la documentación técnica del módulo sabemos que:
Sensor de temperatura:
Ganancia del amplificador:
10 mV / ºC
5
Para el rango de temperaturas especificado, el sensor tendrá un rango de salida de 0V a
1V. El amplificador aumentará esta tensión y tendremos un rango de tensión en la
entrada del conversor A / D de 0V a 5V.
Según el enunciado, el conversor es de 8 bits. Por lo tanto, tendremos 256 posibles
estados.
Tª (ºC)
0
100
Vo (Sensor)
0
1
Vin (A/D)
0
5
La expresión resultante es la siguiente:
(1)
N = a ⋅T
N 255
a= =
= 2,55 (2)
T 100
T=
N = 2,55 ⋅ T
99
N
2,55
N
0
255
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
b) Si el resultado de la conversión analógico – digital es 136 (88h), ¿cuál es la
temperatura de la resistencia?
Utilizando la expresión calculada en el apartado (a) se obtiene que el valor de la
temperatura de la resistencia es:
T=
136
= 53,3 º C
2,55
c) ¿Cuál es la precisión de la conversión en ºC / cuenta?
Para saber la precisión se calcula la temperatura que corresponde a una cuenta.
T=
1
= 0,392 º C
2,55
Precisión = 0,392 º C
cuenta
d) Calcula la expresión que relaciona el dato digital de la entrada del conversor
digital – analógico con la tensión de salida del mismo.
Como el conversor Digital – Analógico es de 8 bits, también tendrá 256 posibles
estados.
Calculamos la expresión que relaciona su entrada con su salida:
N Vo
0 0V
255 10V
Vo = b ⋅ N
10V = b ⋅ 255
10
b=
= 0,039 V
cuenta
255
Vo = 0,039 ⋅ N
e) ¿Qué tensión de salida corresponderá con un valor digital en la entrada de 58
(3Ah)?
Vo = 0,039 ⋅ 58 = 2,262V
100
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
1.2 Adquisición y Procesado del Dato
En este apartado se debe crear un programa para adquirir el resultado de la conversión
analógico – digital y, procesarlo para obtener en una posición de memoria el valor de la
temperatura de la resistencia.
Para realizar este apartado, el interruptor de configuración número 7 tiene que estar
abierto (estado lógico “1”).
Programar la rutina de atención a la interrupción generada por un flanco descendente en
la línea CA1, para que lea del puerto A de la VIA los 8 bits del resultado de la
conversión analógico – digital.
Fuera de la interrupción, operar con el dato leído para obtener la temperatura de la
resistencia.
La rutina de servicio a la interrupción provocada por un flanco descendente en la línea
CA1 es la siguiente:
INTERR:
MOVE.B
RTE
PORTA,ADRES ;Lee el valor de la conversion del ADC
;Fin de la Interrupción
Código 1. Rutina de Atención a la interrupción
A continuación se presenta la función DEC_ADRES que se encarga de procesar el dato
recibido para obtener la temperatura real de la resistencia.
DEC_ADRES:
CLR.L
MOVE.B
ASL
DIVU.W
MOVE.B
MOVE.B
RTS
D7
ADRES,D7
#1,D7
;Calcula el valor de la temperatura real
;(Multiplica por 2)
#5,D7
;Divide por 5
D7,TREAL
;Guarda el valor de la temperatura real
#$00,DECIMAL
Código 2. Cálculo de la Temperatura real de la resistencia
El valor de la conversión guardado en (ADRES) se divide por 2,5 para obtener la
temperatura real.
101
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
1.3 Controlador Digital
Programar un algoritmo de control que compare la temperatura obtenida con la
temperatura deseada y, actúe en consecuencia para que la temperatura de la resistencia
sea lo más similar posible a la temperatura deseada.
Se puede elegir uno de los siguientes algoritmos de control:
-
Todo / Nada
Todo / Nada con Histéresis
Proporcional (P)
Proporcional Integral (PI)
Proporcional, Integral y Derivativo (PID)
Razona el porqué de tu elección.
Este sistema presenta una gran inercia y el enfriamiento de la resistencia depende
mucho de la temperatura ambiental. Por este motivo cualquiera de los algoritmos de
control pueden ser válidos.
El algoritmo de control Todo – Nada es muy fácil de programar y su funcionamiento en
este sistema es correcto. Por lo tanto, la solución a este apartado se ha dado para el
algoritmo Todo – Nada:
CONTROL:
CLR.L
MOVE.B
CMP.B
BGT
MENOR:
MOVE.B
D7
CONSIGNA,D7
TREAL,D7
MAYOR
;Consigna > Temperatura real
#$00,PORTB
RTS
MAYOR:
MOVE.B
RTS
#$FF,PORTB
;Consigna <= Temperatura real
;Limpia el flag de CA1.
;Interrupcion servida
;Fin de la rutina de atencion a la
;interrupcion
;Limpia el flag de CA1.
;Interrupcion servida
;Fin de la rutina de atencion a la
;interrupcion
Código 3. Algoritmo de control Todo – Nada
102
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
1.4 Aplicación de Ejemplo
El código siguiente es un ejemplo de aplicación de control de temperatura del horno
cuando la recepción de la conversión analógico – digital es de ocho bits.
La aplicación presenta por pantalla el estado de la consigna de temperatura y el valor de
la temperatura real. El valor de consigna se puede aumentar o disminuir pulsando las
teclas ‘+’ y ‘-‘ respectivamente.
;*********************************************************************
;PFC: ELABORACION DE MODULOS DIDACTICOS PARA MICROPROCESADORES
;MODULO No. 2: Control de temperatura
;APLICACION: Programa de control V.1.0 (Recepcion ADC de 8 bits)
;
;Realizado por: ANTONIO MIGUEL ZAPLANA ALCARAZ
;Director: JOSE LUIS RAMIREZ FALO
;*********************************************************************
ABSOLUTE
ORG
$25000
;REGISTROS DE LA VIA
VIA
PORTB
PORTA
DDRB
DDRA
ACR
PCR
IFR
IER
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
$60021
VIA+0
VIA+2
VIA+4
VIA+6
VIA+22
VIA+24
VIA+26
VIA+28
;Direccion base de la VIA
;Output / Input Register B
;Output / Input Register A
;Data Direction Register B
;Data Direction Register A
;Auxiliary Control Register
;Peripheral Control Register
;Interrupt Flags Register
;Interrupt Enable Register
;REGISTROS DE LA DUART
DUART
MR1A
MR2A
SRA
CSRA
CRA
RBA
TBA
IPCR
ACRD
ISR
IMR
CUR
CTUR
CLR
CTLR
MR1B
MR2B
SRB
CSRB
CRB
RBB
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
$60041
DUART+0
DUART+0
DUART+2
DUART+4
DUART+4
DUART+6
DUART+6
DUART+8
DUART+8
DUART+10
DUART+10
DUART+12
DUART+12
DUART+14
DUART+14
DUART+16
DUART+16
DUART+18
DUART+20
DUART+20
DUART+22
;Direccion base la DUART
;Mode Register A
;Status Register A
;Clock Select Register A
;Command Register A
;Receiver Buffer A
;Transmitter Buffer A
;Input Port Change Register
;DUART Auxiliay Control Register
;Interrupt Status Register
;Interrupt Mask Register
;Current MSB of Counter
;Cunter / Timer Upper Register
;Current LSB of Counter
;Counter / Timer Lower Register
;Mode Register B
;Status register B
;Clock Select Register B
;Command Register B
;Receiver Buffer B
103
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
TBB
IVR
EQU
EQU
DUART+22
DUART+24
;Transmitter Buffer B
;Interrupt Vector Register
;VARIABLES DEL PROGRAMA
VARIABLES
EQU
$27000
CONSIGNA
EQU
VARIABLES+0
TREAL
EQU
VARIABLES+2
TEMP1
EQU
VARIABLES+8
TEMP2
EQU
VARIABLES+10
ADRES
EQU
VARIABLES+14
DECIMAL
EQU
VARIABLES+18
CADENA
EQU
VARIABLES+20
VECTOR_VIA
EQU
VECTOR_DUART
$2003E
EQU
;Direccion del Pseudo-vector para la
;interrupcion de la VIA
$20098 ;Direccion del Pseudo-vector para la
;interrupcion de la DUART
;INICIALIZACION DE VARIABLES
CLR.W
CLR.W
CLR.W
CLR.W
CLR.W
CLR.W
CLR.L
CONSIGNA
TREAL
TEMP1
TEMP2
ADRES
CADENA
D6
;Indica si el programa debe terminar
;INICIALIZACION DE LOS PUERTOS DE LA VIA
MOVE.B
MOVE.B
#$00,DDRA
#$FF,DDRB
;Puerto A como entrada
;Puerto B como salida
;CONFIGURACION DE LA INTERRUPCION DE LA DUART
MOVE.B IVR,TEMP1
;Salva el numero de intruccion
ANDI.B #$BF,MR1B
;Modo de interrupcion por llegada de
;caracter válido
MOVE.B
#$40,IVR
;Indica el numero de interrupcion
MOVE.L
#TECLADO,VECTOR_DUART
;Direccion de la rutina de
;atencion a la interrupcion del teclado
MOVE.B
#$20,IMR
;Activa la interrupcion del teclado
;CONFIGURACION DE LA INTERRUPCION DE LA VIA
MOVE.B
IER,TEMP2
;Guarda el estado de las interrupciones
;de la VIA
MOVE.B
#%01111111,IER
;Desactiva interrupciones
MOVE.L
#INTERR,VECTOR_VIA
;Direccion de la rutina de
;atencion a la interrupcion de la VIA
ANDI.B
#%11111110,PCR
;Linea CA1 activa por flanco
;descendente
CLR.B IFR
;Limpia los flags
MOVE.B
#%10000010,IER
;Activa la interrupcion de CA1
104
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
;***********
INICIO:
CMPI
BNE
JSR
JSR
INICIO DEL PROGRAMA PRINCIPAL
#0,D6
FINAL
DEC_ADRES
CONTROL
***********
;Se ha pulsado la tecla escape y el programa
;debe terminar
;Calcula la temperatura real
;Algoritmo de control
;PRESENTA POR PANTALLA EL ESTADO DE LAS VARIABLES
ESCRIBE:
LEA
JSR
TEXT,A1
PUTS
CLR.L
MOVE.B
JSR
D4
CONSIGNA,D4
ITOA
;Convierte la consigna a una cadena de
;caracteres ASCII
LEA
JSR
TEXT2,A1
PUTS
LEA
CADENA,A1
JSR
PUTS
LEA
JSR
TEXT1,A1
PUTS
CLR.L D4
MOVE.B
JSR
ITOA
LEA
JSR
LEA
JSR
;Borra la linea de la pantalla
;Carga la direccion de la cadena a
;visualizar
;Visualiza la consigna en la pantalla
TREAL,D4
;Convierte la Temperatura real a una cadena de
;caracteres ASCII
CADENA,A1
PUTS
;Carga la direccion de la cadena a visualizar
;Visualiza la Temperatura real en la pantalla
TEXT4,A1
PUTS
CLR.L D4
MOVE.B DECIMAL,D4
JSR
ITOA
;Convierte el decimal de la Temperatura real a
;una cadena de caracteres ASCII
LEA
JSR
LEA
JSR
JMP
CADENA,A1
PUTS
;Carga la direccion de la cadena a visualizar
;Visualiza el decimal de la Temperatura real en
;la pantalla
TEXT3,A1
PUTS
INICIO
FINAL:
MOVE.B TEMP2,IER
MOVE.B #$00,IMR
MOVE.B TEMP1,IVR
TRAP #5
;Vuelve al principio
;Restaura el estado anterior de la VIA
;Desactiva interrupciones de la DUART
;Restaura el vector de interrupcion
;Fin del programa de control
105
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
;**************
DEFINICION DE SUBRUTINAS
**********************
;Funcion ITOA: convierte un entero situado en el registro D4 a una
;cadena de caracteres ASCII cuya direccion de inicio es la variable
;CADENA
ITOA:
MOVE.L
MOVE.L
MOVE.L
MOVE.L
TRAP
ADDA.L
RTS
#10,-(A7)
;Base numerica de la conversion
#CADENA,-(A7)
;Direccion de inicio del String
D4,-(A7)
;Dato a convertir
#19,D0
;Funcion itoa() del programa monitor
#0
;Convierte un entero a ASCII
#12,A7
;Limpia la pila
;Fin de la subrutina
;Funcion PUTS: envia por el puerto serie una cadena de caracteres cuya
;direccion de inicio esta situada en el registro A1. El envio finaliza
;con el caracter $00
PUTS:
CMPI.B
#$00,(A1)
;Comprueba si es el final de la cadena
BEQ
FIN_CHAR
;Si. Finaliza el envio
BUSY:
BTST
BEQ
#2,SRB
BUSY
MOVE.B (A1)+,TBB
JMP
PUTS
FIN_CHAR:
RTS
;Comprueba si el transmisor está preparado
;No esta preparado
;Si. Envia el caracter al puerto serie
;Envia el caracter siguiente
;Finaliza el envio de caracteres
;Decodifica el valor de la conversión y calcula el valor de la
;Temperatura real
DEC_ADRES:
CLR.L D7
MOVE.B ADRES,D7
ASL
#1,D7
;Calcula el valor de la temperatura real
;(Multiplica por 2)
DIVU.W
#5,D7
;Divide por 5
MOVE.B
D7,TREAL
;Guarda el valor de la temperatura real
MOVE.B #$00,DECIMAL
RTS
;Algoritmo de
CONTROL:
CLR.L
MOVE.B
CMP.B
BGT
MENOR:
MOVE.B
RTS
control ON - OFF
D7
CONSIGNA,D7
TREAL,D7
MAYOR
#$00,PORTB
;Consigna > Temperatura real
;Consigna <= Temperatura real
;Limpia el flag de CA1.
;Interrupcion servida
;Fin de la rutina de atencion a la
;interrupcion
106
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
MAYOR:
MOVE.B
#$FF,PORTB
RTS
;********
;Limpia el flag de CA1. Interrupcion
;servida
;Fin de la rutina de atencion a la
;interrupcion
RUTINAS DE ATENCION A LAS INTERRUPCIONES
************
;Rutina INTERR: Rutina de atencion a la interrupcion provocada por un
;flanco descendente en la linea CA1 de la VIA
INTERR:
MOVE.B PORTA,ADRES
;Lee el valor de la conversion del ADC
RTE
;Fin de la Interrupción
;Rutina TECLADO: Rutina de atencion a la interrupcion provocada por la
;llegada de un caracter por el puerto serie
TECLADO:
CLR.L D3
MOVE.B
RBB,D3
;Lee el caracter recibido
CMPI.B
BEQ
#$1B,D3
ESCAPE
;¿Ha sido la tecla ESC?
CMPI.B
BEQ
#$2B,D3
MAS
;¿Ha sido la tecla '+'?
CMPI.B
BEQ
JMP
EOI
#$2D,D3
;¿Ha sido la tecla '-'?
MENOS
;Ha sido una tecla diferente de las anteriores
ESCAPE:
MOVE.B
RTE
#1,D6 ;Indicamos al programa principal que debe
;terminar
;Fin de la rutina de atencion a la interrupcion del teclado
MAS:
CMPI.B #100,CONSIGNA
BEQ
MAXIMO
;La consigna esta a su valor maximo
ADDQ.B #1,CONSIGNA
;No. Incrementa el valor de la consigna
RTE
;Fin de la rutina de atencion a la interrupcion del teclado
MAXIMO:
MOVE.B #100,CONSIGNA
;Consigna a su valor maximo
RTE
;Fin de la rutina de atencion a la interrupcion del teclado
MENOS:
CMPI.B
#0,CONSIGNA
BEQ
MINIMO
;La consigna esta a su valor minimo
SUBQ.B #1,CONSIGNA
;No. Decrementa el valor de la consigna
RTE
;Fin de la rutina de atencion a la interrupcion del teclado
MINIMO:
MOVE.B
#0,CONSIGNA ;Consigna a su valor minimo
EOI:
RTE
;Fin de la rutina de atencion a la interrupcion del teclado
107
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
TEXT
DB
$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$0
8,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$0
TEXT1
DB
' T. Real: ',$0
TEXT2
DB
' Consigna: ',$0
TEXT3
DB
' ',$0
TEXT4
DB
'.',$0
END
Código 4. Aplicación de ejemplo
108
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
2 Práctica de Control de Temperatura con Lectura de Diez Bits
2.1 Estudio Previo
a) Obtener la expresión que relaciona la temperatura de la resistencia con el valor
de la conversión analógico – digital, suponiendo que tenemos un conversor A /
D de 10 bits y que sus tensiones de referencia son: Vmax = 5V y Vmin = 0V para
un rango de temperaturas de 0ºC a 100ºC.
Los datos que se nos proporcionan son:
Rango de Temperatura: 0ºC a 100ºC
Tensión de Referencia: Vmax = 5V Vmin = 0V
De la documentación técnica del módulo sabemos que:
Sensor de temperatura:
Ganancia del amplificador:
10 mV / ºC
5
Para el rango de temperaturas especificado, el sensor tendrá un rango de salida de 0V a
1V. El amplificador aumentará esta tensión y tendremos un rango de tensión en la
entrada del conversor A / D de 0V a 5V.
Según el enunciado, el conversor es de 10 bits. Por lo tanto, tendremos 1024 posibles
estados.
Tª (ºC)
0
100
Vo (Sensor)
0
1
Vin (A/D)
0
5
La expresión resultante es la siguiente:
N = a ⋅T
N 1023
a= =
= 10,23
T
100
(1)
(2)
T=
N = 10,23 ⋅ T
109
N
10, 23
N
0
1023
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
b) Si el resultado de la conversión analógico – digital es 136 (88h), ¿cuál es la
temperatura de la resistencia?
Utilizando la expresión calculada en el apartado (a) se obtiene que el valor de la
temperatura de la resistencia es:
T=
136
= 13,29 º C
10,23
c) Según lo explicado en el Apartado 2.3, describe el proceso a seguir para
obtener en un registro de datos del 68000 (D0 – D7) el valor completo de la
conversión analógico-digital.
Para obtener el valor completo de la conversión analógico-digital, se deben seguir los
siguientes pasos:
1.- Programar la VIA del microinstructor para que interrumpa a la CPU cada vez
que detecta un flanco de bajada en la línea CA1.
2.- Programar la VIA del microinstructor para que cada vez que se produzca una
interrupción generada por un flanco de bajada en la línea CA1, la línea CA2 se ponga a
nivel lógico “1” y pase a nivel lógico “0”, automáticamente cuando se lea el contenido
del Puerto A de la VIA.
3.- Reservar una posición de memoria que nos indicará que byte de la
conversión es el que se desea leer en la próxima interrupción.
4.- En la rutina de atención a la interrupción, leer el dato de la puerta A.
5.- Examinar el bit MSB (bit 7) para averiguar de qué parte de la conversión se
trata.
6.- Si se corresponde con el byte que se deseaba leer, guardarlo en memoria.
Indicar también que cuál es el siguiente byte que se desea leer. Si el byte recibido no se
corresponde con el deseado, salir de la interrupción y esperar a que se reciba otra.
7.- Volver a los puntos 4, 5 y 6.
8.- Cuando se hayan recibido correctamente los dos bytes necesarios para
reconstruir el valor completo de la conversión, borrar el bit número 7 del byte alto.
9.- Guardar el byte bajo en un registro, por ejemplo el registro D2.
10.- Guardar el byte alto en un registro, por ejemplo el registro D1.
11.- Desplazar los bits del registro D1, cinco posiciones hacia la izquierda.
12.- Realizar una OR lógica entre los registros D2 y D1.
13.- El valor completo de la conversión se obtiene en el registro utilizado como
destino en la operación anterior.
110
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
d) Calcula la expresión que relaciona el dato digital de la entrada del conversor
digital – analógico con la tensión de salida del mismo.
Como el conversor Digital – Analógico es de 8 bits, también tendrá 256 posibles
estados.
Calculamos la expresión que relaciona su entrada con su salida:
N Vo
0 0V
255 10V
Vo = b ⋅ N
10V = b ⋅ 255
10
= 0,039 V
b=
cuenta
255
Vo = 0,039 ⋅ N
e) ¿Qué tensión de salida corresponderá con un valor digital en la entrada de 58
(3Ah)?
Vo = 0,039 ⋅ 58 = 2,262V
111
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
2.2 Adquisición y Procesado del Dato
En este apartado se debe crear un programa para adquirir el resultado de la conversión
analógico – digital y, procesarlo para obtener en una posición de memoria el valor de la
temperatura de la resistencia.
Para realizar este apartado, el interruptor de configuración número 7 tiene que estar
cerrado (estado lógico “0”).
Programar la rutina de atención a la interrupción generada por un flanco descendente en
la línea CA1, para que lea del puerto A de la VIA los 10 bits del resultado de la
conversión analógico – digital.
Fuera de la interrupción, operar con el dato leído para obtener la temperatura de la
resistencia.
La rutina de servicio a la interrupción provocada por un flanco descendente en la línea
CA1 es la siguiente:
INTERR:
CLR.L
MOVE.B
BEQ
MOVE.B
BTST
BNE
MOVE.B
MOVE.B
RTE
LEE_ALTO:
MOVE.B
BTST
BEQ
BCLR
MOVE.B
MOVE.B
EOI:
RTE
D5
BAJO,D5
LEE_ALTO
PORTA,D5
#7,D5
EOI
D5,ADRESL
#$00,BAJO
PORTA,D5
#7,D5
EOI
#7,D5
D5,ADRESH
#$FF,BAJO
;Lee los 5 LSB de la conversion
;Comprueba si es el byte bajo
;No es el correcto. Vuelve a leer
;Lee los 5 MSB de la conversion
;Comprueba si es el byte correcto
;No es el correcto. Vuelve a leer
;Borramos el bit indicador de byte alto
Código 5. Rutina de atención a la interrupción.
En el código anterior, la posición de memoria indicada por BAJO indica si se debe leer
el byte bajo de la conversión (BAJO = FFh) o el alto (BAJO = 00h).
112
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
A continuación se presenta la función DEC_ADRES que se encarga de procesar el dato
recibido para obtener la temperatura real de la resistencia.
DEC_ADRES:
MOVE.B
ANDI.B
ADRESL,DECIMAL
#%00000111,DECIMAL
;Reconstruimos el dato de 10 bits
MOVE.B
ADRESH,D1
MOVE.B
ADRESL,D2
ASL
OR
ANDI.L
DIVU.W
ANDI.L
CLR.W
MOVE.B
#5,D1
D2,D1
;El dato de 10 bits ya esta reconstruido
#$000003FF,D1
#10,D1
;Calcula el valor de la temperatura real
#$000000FF,D1
TREAL
D1,TREAL
;Guarda el valor de la temperatura real
RTS
Código 6. Cálculo de la temperatura real de la resistencia.
Como la precisión de la conversión es aproximadamente igual a 0,1 ºC / cuenta, los tres
bits menos significativos del resultado de la conversión nos proporcional directamente
el dígito decimal.
2.3 Controlador Digital
La solución de este apartado es la misma que la dada anteriormente en el apartado 1.3.
2.4 Aplicación de Ejemplo
El código siguiente es un ejemplo de aplicación de control de temperatura del horno
cuando la recepción de la conversión analógico – digital es de diez bits.
La aplicación presenta por pantalla el estado de la consigna de temperatura y el valor de
la temperatura real. El valor de consigna se puede aumentar o disminuir pulsando las
teclas ‘+’ y ‘-‘ respectivamente.
;*********************************************************************
;PFC: ELABORACION DE MODULOS DIDACTICOS PARA MICROPROCESADORES
;MODULO No. 2: Control de temperatura
;APLICACION: Programa de control V.2.0 (Recepcion ADC de 10 bits)
;
;Realizado por: ANTONIO MIGUEL ZAPLANA ALCARAZ
;Director: JOSE LUIS RAMIREZ FALO
;*********************************************************************
ABSOLUTE
ORG
$25000
;REGISTROS DE LA VIA
VIA
EQU
PORTB EQU
$60021
VIA+0
;Direccion base de la VIA
;Output / Input Register B
113
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
PORTA
DDRB
DDRA
ACR
PCR
IFR
IER
EQU
EQU
EQU
EQU
EQU
EQU
EQU
VIA+2
VIA+4
VIA+6
VIA+22
VIA+24
VIA+26
VIA+28
;Output / Input Register A
;Data Direction Register B
;Data Direction Register A
;Auxiliary Control Register
;Peripheral Control Register
;Interrupt Flags Register
;Interrupt Enable Register
;REGISTROS DE LA DUART
DUART
MR1A
MR2A
SRA
CSRA
CRA
RBA
TBA
IPCR
ACRD
ISR
IMR
CUR
CTUR
CLR
CTLR
MR1B
MR2B
SRB
CSRB
CRB
RBB
TBB
IVR
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
$60041
DUART+0
DUART+0
DUART+2
DUART+4
DUART+4
DUART+6
DUART+6
DUART+8
DUART+8
DUART+10
DUART+10
DUART+12
DUART+12
DUART+14
DUART+14
DUART+16
DUART+16
DUART+18
DUART+20
DUART+20
DUART+22
DUART+22
DUART+24
;Direccion base la DUART
;Mode Register A
;Status Register A
;Clock Select Register A
;Command Register A
;Receiver Buffer A
;Transmitter Buffer A
;Input Port Change Register
;DUART Auxiliay Control Register
;Interrupt Status Register
;Interrupt Mask Register
;Current MSB of Counter
;Cunter / Timer Upper Register
;Current LSB of Counter
;Counter / Timer Lower Register
;Mode Register B
;Status register B
;Clock Select Register B
;Command Register B
;Receiver Buffer B
;Transmitter Buffer B
;Interrupt Vector Register
;VARIABLES DEL PROGRAMA
VARIABLES
EQU
$27000
CONSIGNA
EQU
VARIABLES+0
TREAL
EQU
VARIABLES+2
BAJO
EQU
VARIABLES+4
TEMP1
EQU
VARIABLES+8
TEMP2
EQU
VARIABLES+10
ADRESH
EQU
VARIABLES+12
ADRESL
EQU
VARIABLES+14
DECIMAL
EQU
VARIABLES+16
CADENA
EQU
VARIABLES+18
VECTOR_VIA
EQU
VECTOR_DUART
$2003E
EQU
;Direccion del Pseudo-vector para la
;interrupcion de la VIA
$20098
;Direccion del Pseudo-vector para
;la interrupcion de la DUART
;INICIALIZACION DE VARIABLES
CLR.W
CLR.W
CLR.W
CLR.W
CLR.W
CLR.W
CONSIGNA
TREAL
TEMP2
TEMP1
ADRESH
ADRESL
114
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
CLR.W CADENA
CLR.L D6
;Indica si el programa debe terminar
MOVE.B
#$FF,BAJO
;INICIALIZACION DE LOS PUERTOS DE LA VIA
MOVE.B
MOVE.B
#$00,DDRA
#$FF,DDRB
;Puerto A como entrada
;Puerto B como salida
;CONFIGURACION DE LA INTERRUPCION DE LA DUART
MOVE.B IVR,TEMP1
;Salva el vector de interrupcion
;anterior
ANDI.B
#$BF,MR1B
;Modo de interrupcion por llegada de
;caracter válido
MOVE.B
#$40,IVR
;Indica el numero de interrupcion
MOVE.L
#TECLADO,VECTOR_DUART
;Direccion de la rutina de
;atencion a la interrupcion del teclado
MOVE.B
#$20,IMR
;Activa la interrupcion del teclado
;CONFIGURACION DE LA INTERRUPCION DE LA VIA
MOVE.B
IER,TEMP2
MOVE.B
MOVE.L
ANDI.B
ORI.B
CLR.B IFR
MOVE.B
;***********
INICIO:
CMPI
BNE
JSR
JSR
;Guarda el estado de las interrupciones
;de la VIA
#%01111111,IER
;Desactiva interrupciones
#INTERR,VECTOR_VIA
;Direccion de la rutina de
;atencion a la interrupcion de la VIA
#%11111000,PCR
;Linea CA1 activa por flanco
;descendente
#%00001000,PCR
;Limpia los flags
#%10000010,IER
;Activa la interrupcion de CA1
INICIO DEL PROGRAMA PRINCIPAL
#0,D6
FINAL
DEC_ADRES
CONTROL
***************
;Se ha pulsado la tecla escape y el programa
;debe terminar
;Calcula la temperatura real
;Algoritmo de control
;PRESENTA POR PANTALLA EL ESTADO DE LAS VARIABLES
ESCRIBE:
LEA
JSR
TEXT,A1
PUTS
CLR.L
MOVE.B
JSR
D4
CONSIGNA,D4
ITOA
LEA
JSR
TEXT2,A1
PUTS
LEA
CADENA,A1
JSR
LEA
PUTS
TEXT1,A1
;Borra la linea de la pantalla
;Convierte la consigna a una cadena de
;caracteres ASCII
;Carga la direccion de la cadena a
;visualizar
;Visualiza la consigna en la pantalla
115
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
JSR
PUTS
CLR.L D4
MOVE.B
JSR
ITOA
LEA
JSR
TREAL,D4
;Convierte la Temperatura real a una cadena de
;caracteres ASCII
CADENA,A1
PUTS
LEA
JSR
;Carga la direccion de la cadena a visualizar
;Visualiza la Temperatura real en la pantalla
TEXT4,A1
PUTS
CLR.L D4
MOVE.B DECIMAL,D4
JSR
ITOA
;Convierte el decimal de la Temperatura real a
;una cadena de caracteres ASCII
LEA
JSR
CADENA,A1
PUTS
LEA
JSR
JMP
;Carga la direccion de la cadena a visualizar
;Visualiza el decimal de la Temperatura real en
;la pantalla
TEXT3,A1
PUTS
INICIO
FINAL:
MOVE.B
MOVE.B
MOVE.B
TRAP
TEMP2,IER
#$00,IMR
TEMP1,IVR
#5
;**************
;Vuelve al principio
;Desactiva interrupciones de la VIA
;Desactiva interrupciones de la DUART
;Restaura el vector de interrupcion
;Fin del programa de control
DEFINICION DE SUBRUTINAS
**********************
;Funcion ITOA: convierte un entero situado en el registro D4 a una
;cadena de caracteres ASCII cuya direccion de inicio es la variable
;CADENA
ITOA:
MOVE.L
MOVE.L
MOVE.L
MOVE.L
TRAP #0
ADDA.L
RTS
#10,-(A7)
;Base numerica de la conversion
#CADENA,-(A7)
;Direccion de inicio del String
D4,-(A7)
;Dato a convertir
#19,D0
;Funcion itoa() del programa monitor
;Convierte un entero a ASCII
#12,A7
;Limpia la pila
;Fin de la subrutina
;Funcion PUTS: envia por el puerto serie una cadena de caracteres cuya
;direccion de inicio esta situada en el registro A1. El envio finaliza
;con el caracter $00
PUTS:
CMPI.B
#$00,(A1)
;Comprueba si es el final de la cadena
BEQ
FIN_CHAR
;Si. Finaliza el envio
BUSY:
BTST
BEQ
#2,SRB
BUSY
;Comprueba si el transmisor está preparado
;No esta preparado
116
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
MOVE.B
JMP
PUTS
FIN_CHAR:
RTS
;*******
(A1)+,TBB
;Si. Envia el caracter al puerto serie
;Envia el caracter siguiente
;Finaliza el envio de caracteres
RUTINAS DE ATENCION A LAS INTERRUPCIONES
*************
;Rutina INTERR: Rutina de atencion a la interrupcion provocada por un
;flanco descendente en la linea CA1 de la VIA
INTERR:
CLR.L
MOVE.B
BEQ
MOVE.B
BTST
BNE
MOVE.B
MOVE.B
RTE
D5
BAJO,D5
LEE_ALTO
PORTA,D5
#7,D5
EOI
D5,ADRESL
#$00,BAJO
LEE_ALTO:
MOVE.B
BTST
BEQ
BCLR
MOVE.B
MOVE.B
EOI:
RTE
DEC_ADRES:
MOVE.B
ANDI.B
PORTA,D5
#7,D5
EOI
#7,D5
D5,ADRESH
#$FF,BAJO
;Lee los 5 LSB de la conversion
;Comprueba si es el byte bajo
;No es el correcto. Vuelve a leer
;Lee los 5 MSB de la conversion
;Comprueba si es el byte correcto
;No es el correcto. Vuelve a leer
;Borramos el bit indicador de byte alto
ADRESL,DECIMAL
#%00000111,DECIMAL
;Reconstruimos el dato de 10 bits
MOVE.B
ADRESH,D1
MOVE.B
ADRESL,D2
ASL
OR
ANDI.L
DIVU.W
ANDI.L
CLR.W
MOVE.B
#5,D1
D2,D1
;El dato de 10 bits ya esta reconstruido
#$000003FF,D1
#10,D1
;Calcula el valor de la temperatura real
#$000000FF,D1
TREAL
D1,TREAL
;Guarda el valor de la temperatura real
RTS
CONTROL:
CLR.L
MOVE.B
CMP.B
BGT
MOVE.B
D7
CONSIGNA,D7
TREAL,D7
MAYOR
;Consigna > Temperatura real
;Consigna <= Temperatura real
#$00,PORTB
;Limpia el flag de CA1. Interrupcion
;servida
RTS
117
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
MAYOR:
MOVE.B
#$FF,PORTB
;Limpia el flag de CA1. Interrupcion
;servida
RTS
;Rutina TECLADO: Rutina de atencion a la interrupcion provocada por la
;llegada de un caracter por el puerto serie
TECLADO:
CLR.L D3
MOVE.B
RBB,D3
;Lee el caracter recibido
CMPI.B
#$1B,D3
BEQ
ESCAPE
;¿Ha sido la tecla ESC?
CMPI.B
BEQ
MAS
;¿Ha sido la tecla '+'?
#$2B,D3
CMPI.B
#$2D,D3
;¿Ha sido la tecla '-'?
BEQ
MENOS
RTE
;Ha sido una tecla diferente de las anteriores.
;Fin de la rutina de atencion a la interrupcion del teclado
ESCAPE:
MOVE.B
RTE
#1,D6 ;Indicamos al programa principal que debe
;terminar
;Fin de la rutina de atencion a la interrupcion
;del teclado
MAS:
CMPI.B #100,CONSIGNA
BEQ
MAXIMO
;La consigna esta a su valor maximo
ADDQ.B
#1,CONSIGNA ;No. Incrementa el valor de la consigna
RTE
;Fin de la rutina de atencion a la interrupcion del teclado
MAXIMO:
MOVE.B #100,CONSIGNA
;Consigna a su valor maximo
RTE
;Fin de la rutina de atencion a la interrupcion del teclado
MENOS:
CMPI.B
#0,CONSIGNA
BEQ
MINIMO
;La consigna esta a su valor minimo
SUBQ.B
#1,CONSIGNA ;No. Decrementa el valor de la consigna
RTE
;Fin de la rutina de atencion a la interrupcion del teclado
MINIMO:
MOVE.B
#0,CONSIGNA ;Consigna a su valor minimo
RTE
;Fin de la rutina de atencion a la interrupcion del teclado
TEXT
DB
$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$0
8,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$0
TEXT1
DB
' T. Real: ',$0
TEXT2
DB
' Consigna: ',$0
TEXT3
DB
' ',$0
TEXT4
DB
'.',$0
END
Código 7. Aplicación de ejemplo.
118
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
3 Práctica de Conversión A/D y Visualización en Display de Siete
Segmentos
3.1 Estudio Previo
a) Obtener la expresión que relaciona la temperatura de la resistencia con el valor
de la conversión analógico – digital, suponiendo que tenemos un conversor A /
D de 10 bits y que sus tensiones de referencia son: Vmax = 5V y Vmin = 0V para
un rango de temperaturas de 0ºC a 100ºC.
Los datos que se nos proporcionan son:
Rango de Temperatura: 0ºC a 100ºC
Tensión de Referencia: Vmax = 5V Vmin = 0V
De la documentación técnica del módulo sabemos que:
Sensor de temperatura:
Ganancia del amplificador:
10 mV / ºC
5
Para el rango de temperaturas especificado, el sensor tendrá un rango de salida de 0V a
1V. El amplificador aumentará esta tensión y tendremos un rango de tensión en la
entrada del conversor A / D de 0V a 5V.
Según el enunciado, el conversor es de 10 bits. Por lo tanto, tendremos 1024 posibles
estados.
Tª (ºC)
0
100
Vo (Sensor)
0
1
Vin (A/D)
0
5
N
0
1023
La expresión resultante es la siguiente:
N = a ⋅T
N 1023
a= =
= 10,23
T
100
(1)
(2)
N
10, 23
b) Si el resultado de la conversión analógico – digital es 136 (88h), ¿cuál es la
temperatura de la resistencia?
N = 10,23 ⋅ T
T=
Utilizando la expresión calculada en el apartado (a) se obtiene que el valor de la
temperatura de la resistencia es:
T=
136
= 13,29 º C
10,23
119
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
c) ¿Cuál es la resolución de la conversión en ºC / cuenta?
Para saber la resolución se calcula la temperatura que corresponde a una cuenta.
T=
1
= 0,09775 º C
10,23
Precisión = 0,09775 º C
cuenta
d) Indica el estado de las líneas RA4, RA5 y el valor a enviar por el puerto C para
visualizar en el dígito 1 el número 2 con punto decimal.
RA4 = 0
RA5 = 1
PORTC = 11101101 (Edh)
e) Completa la siguiente tabla:
Numero a
Visualizar
0
1
2
3
4
5
6
7
8
9
RC7
0
0
0
0
0
0
0
0
0
0
RC6
1
0
1
1
0
1
1
1
1
1
RC5
1
1
1
1
1
0
0
1
1
1
PUERTO C
RC4
RC3
1
1
1
0
0
1
1
1
1
0
1
1
1
1
1
0
1
1
1
1
RC2
1
0
1
0
0
0
1
0
1
0
RC1
1
0
0
0
1
1
1
0
1
1
RC0
0
0
1
1
1
1
1
0
1
1
3.2 Conversión Analógico – Digital
Para realizar la conversión analógico – digital de la salida del sensor de temperatura se
han creado tres funciones:
La primera de ellas (INI_ADC) se encarga de inicializar el módulo de conversor
analógico – digital del microcontrolador, configurándolo de manera que la entrada
analógica sea AN0, todas las demás líneas del puerto A sean digitales, las tensiones de
referencia son Vdd y Vss y la frecuencia de muestreo es FOSC/32, es decir, 125kHz.
La segunda función (INI_INTERRUP) configura las interrupciones del
microcontrolador para que éste sea interrumpido cuando el módulo ADC finalice la
conversión.
120
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
Finalmente, la tercera función (AD_INTERRUPT) es la rutina de atención a la
interrupción provocada por el módulo ADC. En ella se guarda en memoria el resultado
de la conversión.
INI_ADC:
BANK1
MOVLW B'10001110'
MOVWF ADCON1
;Vref=Vdd, RA0=Analog, RA1,2,3,4,5, Digital
BANK0
MOVLW B'10000001'
MOVWF ADCON0
;Fosc/32, Channel 0 Analog, AD on
RETURN
Código 8. Inicialización del módulo ADC del microcontrolador.
INI_INTERRUP:
MOVLW B'01000000'
MOVWF INTCON
BANK1
MOVLW B'01000000'
MOVWF PIE1
BANK0
BCF
PIR1,6
;Habilita Interrupciones Generales
;Habilita Interrupción del conversor A/D
;Limpia el Flag
RETURN
Código 9. Inicialización de las interrupciones.
AD_INTERRUPT:
INT_OFF
;Inhabilita interrupciones
;Salvamos Contexto
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
;Rutina de servicio a la interrupción
MOVF ADRESH,W
;Cargamos la parte alta del resultado de la
;conversion
MOVWF ADCH_TEMP
;Guardamos el resultado
BANK1
MOVF ADRESL,W
;Cargamos la parte baja del resultado de la
;conversion
BANK0
MOVWF ADCL_TEMP
;Guardamos el resultado
;Restauramos el contexto
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
AD_ON
BCF
PIR1,6
;Inicio de una nueva conversión.
;Interrupción servida
INT_ON
;Habilita interrupciones
RETFIE
Código 10. Rutina de atención a la interrupción del módulo ADC.
121
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
La siguiente función (DEC_ADRES) se encarga de procesar el resultado de la
conversión y calcular el valor de la temperatura real. El resultado se guarda en memoria.
Para realizar el cálculo de la temperatura, esta función divide el resultado de la
conversión por 10.
DEC_ADRES:
movf ADCH , W
movwf _code_tmp_0000
movf ADCL, W
movwf _code_tmp_0001
clrf _code_tmp_0002
movlw D'10'
movwf _code_tmp_0003
movlw D'16'
movwf _code_tmp_0004
clrf _code_tmp_0005
clrf _code_tmp_0006
label_0000
rlf _code_tmp_0000 , W
rlf _code_tmp_0006 , F
rlf _code_tmp_0005 , F
movf _code_tmp_0003 , W
subwf _code_tmp_0006 , F
movf _code_tmp_0002 , W
btfss STATUS, C
incfsz _code_tmp_0002 , W
subwf _code_tmp_0005 , F
btfsc STATUS, C
goto label_0001
movf _code_tmp_0003 , W
addwf _code_tmp_0006 , F
movf _code_tmp_0002 , W
btfsc STATUS, C
incfsz _code_tmp_0002 , W
addwf _code_tmp_0005 , F
bcf STATUS, C
label_0001
rlf _code_tmp_0001 , F
rlf _code_tmp_0000 , F
decfsz _code_tmp_0004 , F
goto label_0000
movf _code_tmp_0001 , W
movwf Temperatura
RETURN
Código 11. Cálculo de la temperatura real de la resistencia.
122
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
3.3 Visualización en el Display de 7 Segmentos
Para poder visualizar el resultado de la conversión analógico – digital en el visualizador
de siete segmentos se han creado las siguientes funciones:
-
BIN_TO_BCD: Convierte un valor binario a código BCD. Esta función da como
resultado tres dígitos que se guardan cada uno en una posición de memoria.
-
BCD_TO_7SEG: Convierte cada dígito BCD de la función anterior en dígitos
que se pueden visualizar en el display de siete segmentos. La conversión se
realiza mediante una tabla.
-
DISPLAY: Visualiza el valor de la temperatura de la resistencia en el display de
siete segmentos. El dígito de la derecha lo utiliza como decimal.
-
DELAY: Función de propósito general que realiza una espera de 5ms.
BIN_TO_BCD:
MOVF Temperatura,W
;Carga el valor binario inicial
CLRF Buffer_L
CLRF Buffer_H
;Inicia registros de trabajo
BIN_BCD_1:
ADDLW
BTFSS
GOTO
MOVWF
INCF
MOVF
XORLW
BTFSS
GOTO
CLRF
INCF
BIN_BCD_2:
MOVF
GOTO
BIN_BCD_3:
ADDLW
SWAPF
IORWF
0XF6
STATUS,C
BIN_BCD_3
Temp_1
Buffer_L,F
Buffer_L,W
B'00001010'
STATUS,2
BIN_BCD_2
Buffer_L
Buffer_H,F
;Resta 10 mediante suma de complemento a 2
;Hay Carry?
;NO
;SI. Guardar en registro Temporal
;Incrementa byte bajo.
;Copia al acumulador
;0AH xor W
;Buffer_L es igual a 10?
;NO
;SI. Poner Buffer_L a cero
;Incrementa Buffer_H
Temp_1,W
BIN_BCD_1
;Recuperar el dato
;Continuar la operacion
H'0A'
Buffer_L,F
Buffer_L,F
;Temporal + 0x0A
MOVF Buffer_L,W
ANDLW B'00001111'
MOVWF DIG1_BCD
;Guarda las unidades
SWAPF Buffer_L,W
ANDLW B'00001111'
MOVWF DIG2_BCD
;Guarda las decenas
MOVF ADCL,W
ANDLW B'00000111'
MOVWF DIG0_BCD
;Guarda los décimos
RETURN
Código 12. Función que convierte binario a BCD.
123
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
BCD_TO_7SEG:
MOVF DIG0_BCD,W
CALL Tabla_7seg
MOVWF DIGIT0
MOVF
CALL
MOVWF
BSF
DIG1_BCD,W
Tabla_7seg
DIGIT1
DIGIT1,7
;Activa el punto decimal del dígito 1
MOVF DIG2_BCD,W
CALL Tabla_7seg
MOVWF DIGIT2
RETURN
Código 13. Convierte BCD a siete segmentos.
Tabla_7seg:
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
PCL,F
0X7E
0X30
0X6D
0X79
0X33
0X5B
0X5F
0X70
0X7F
0X7B
;Calcula el desplazamiento
;0
;1
;2
;3
;4
;5
;6
;7
;8
;9
Código 14. Tabla de conversión.
DISPLAY:
BCF
BCF
PORTA,4
PORTA,5
;Selecciona el dígito 0
MOVF DIGIT0,W
MOVWF PORTC
;Visualiza en el dígito
CALL
;Espera
DELAY
BSF
PORTA,5
MOVF DIGIT1,W
MOVWF PORTC
;Selecciona el dígito 1
CALL
DELAY
;Espera
BCF
BSF
MOVF
MOVWF
PORTA,5
PORTA,4
DIGIT2,W
PORTC
CALL
DELAY
BCF
PORTA,4
BCF
PORTA,5
RETURN
;Visualización en el dígito
;Selecciona el dígito 2
;Visualización en el dígito
;Espera
;Selecciona el dígito 0
Código 15. Visualización en el display de la temperatura.
124
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
DELAY:
MOVLW .5
MOVWF CONTADOR
DELAY_0:
BCF
INTCON,T0IF
MOVLW 0Xf7
MOVWF TMR0
DELAY_1:
BTFSS INTCON,T0IF
GOTO DELAY_1
DECFSZ
CONTADOR,F
GOTO DELAY_0
RETURN
Código 16. Realiza una espera de 5 milisegundos.
3.4 Aplicación de Conversión A / D y Visualización en Siete Segmentos
A continuación se presenta el código completo del programa que realiza la conversión
analógico – digital de la temperatura de la resistencia y a visualiza en el display de siete
segmentos.
El código está dividido en dos archivos:
-
Fichero del código principal
Fichero de implementación de las funciones utilizadas.
;Programa de medición de temperatura mediante el conversor analogico –
;digital disponible en el PIC16F873. Tambien se realiza la
;visualizacion del resultado en un display de 7 segmentos y 3 digitos
;PFC: ELABORACION DE MODULOS DIDACTICOS PARA MICROPROCESADORES
;Por: Antonio Miguel Zaplana Alcaraz
;Ponente: Jose Luis Ramirez Falo
;---------------------- PROGRAMA PRINCIPAL --------------------------LIST P=16f873
INCLUDE "P16f873.INC"
;Tipo de Procesador
;Definiciones de registros internos
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC &
_WRT_ENABLE_OFF & _LVP_OFF
ORG
GOTO
0X00
INICIO
;Vector de Reset
ORG
GOTO
0X04
AD_INTERRUPT
ORG
0X05
INCLUDE "Temp.inc"
INICIO:
CALL
CALL
CALL
CALL
INI_VAR
INI_PORTS
INI_ADC
INI_INTERRUP
;Vector de interrupcion
;Definiciones de las funciones de
;libreria
;Inicializa Variables
;Configura puertos de E/S
;Configura Conversor A/D
;Inicializa la interrupción
125
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
MOVLW B'00000110'
BANK1
MOVWF OPTION_REG ;Preescaler de 128 para TMR0
BANK0
INT_ON
CALL DELAY
AD_ON
INICIO2:
MOVF
MOVWF
MOVF
MOVWF
ADCH_TEMP,W ;Copia del resultado de la conversión
ADCH
ADCL_TEMP,W
ADCL
CALL
CALL
CALL
CALL
DEC_ADRES
BIN_TO_BCD
BCD_TO_7SEG
DISPLAY
GOTO
INICIO2
NOP
END
;Decodifica el resultado de la conversion A/D
;Convierte el resultado binario a BCD
;Convierte BCD a 7 segmentos
;Visualiza el resultado en el display
;Vuelve al principio del programa
;Fin del programa
Código 17. Programa principal de la aplicación.
;Programa de medición de temperatura mediante el conversor analogico –
;digital disponible en el PIC16F73. Tambien se realiza la
;visualizacion del resultado en un display de 7 segmentos y 3 digitos
;PFC: ELABORACION DE MODULOS DIDACTICOS PARA MICROPROCESADORES
;Por: Antonio Miguel Zaplana Alcaraz
;Ponente: Jose Luis Ramirez Falo
;---------------------- LIBRERIA DE FUNCIONES ----------------------CBLOCK
0X20 ;Inicio de definicion de variables
DIGIT0
;Valor de 7 segmentos a visualizar en el display 0
DIGIT1
;Valor de 7 segmentos a visualizar en el display 1
DIGIT2
;Valor de 7 segmentos a visualizar en el display 2
DIG0_BCD
;Valor BCD del digito 0
DIG1_BCD
;Valor BCD del digito 1
DIG2_BCD
;Valor BCD del digito 2
Buffer_L
;Parte baja del resultado de conversion binario a BCD
Buffer_H
;Parte alta del resultado de conversion binario a BCD
Temp_1
;Registro temporal
TEMP1
TEMP2
CONTADOR
W_TEMP
;Registro temporal para guardar el acumulador
STATUS_TEMP ;Registro temporal para guardar el registro de estado
PCLATCH_TEMP;Registro temporal para guardar el PCLATCH
FSR_TEMP
;Registro temporal para guardar el FSR
ADCH_TEMP
ADCL_TEMP
ENDC
;Fin de definiciones de variables
126
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
_code_tmp_0000
_code_tmp_0001
_code_tmp_0002
_code_tmp_0003
_code_tmp_0004
_code_tmp_0005
_code_tmp_0006
__ret__lobyte
ADCH
ADCL
Temperatura
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
0x70
0x71
0x72
0x73
0x74
0x75
0x76
0x77
0x78
0x79
0x7a
;Cambio al banco de registros 1
#DEFINE
BANK1
BSF
;Cambio al banco de registros 0
#DEFINE
BANK0
BCF
;Inicio de una nueva conversion
#DEFINE AD_ON
BSF
;Habilita Interrupciones
#DEFINE INT_ON
BSF
;Inhabilita Interrupciones
#DEFINE INT_OFF
BCF
STATUS,RP0
STATUS,RP0
ADCON0,2
INTCON,7
INTCON,7
;--------------------------------------------------------------------;DEFINICION DE SUBRUTINAS
;--------------------------------------------------------------------;INI_VAR: Inicializa las variables
INI_VAR:
CLRF Temperatura
CLRF DIGIT0
CLRF DIGIT1
CLRF DIGIT2
CLRF DIG0_BCD
CLRF DIG1_BCD
CLRF DIG2_BCD
CLRF Buffer_L
CLRF Buffer_H
CLRF Temp_1
CLRF ADCH
CLRF ADCL
RETURN
;Realiza una temporización de 5 ms
DELAY:
MOVLW .5
MOVWF CONTADOR
DELAY_0:
BCF
INTCON,T0IF
MOVLW 0Xf7
MOVWF TMR0
DELAY_1:
BTFSS INTCON,T0IF
GOTO DELAY_1
DECFSZ
CONTADOR,F
GOTO DELAY_0
RETURN
127
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
;INI_PORTS: Inicializa los puertos de E/S
INI_PORTS:
BANK1
;Cambio de banco de registros
CLRF TRISB ;Puerto B como salidas
CLRF TRISC ;Puerto C como Salidas
MOVLW B'00000111'
MOVWF TRISA ;RA0, RA1 Y RA2 como entrada
BANK0
;Cambio de banco de registros
RETURN
;INI_ADC: Configura el conversor A/D
INI_ADC:
BANK1
MOVLW B'10001110'
MOVWF ADCON1
;Vref=Vdd, RA0=Analog, RA1,2,3,4,5, Digital
BANK0
MOVLW B'10000001'
MOVWF ADCON0
;Fosc/32, Channel 0 Analog, AD on
RETURN
;Rutina de inicialización de las interrupciones
INI_INTERRUP:
MOVLW B'01000000'
MOVWF INTCON
BANK1
MOVLW B'01000000'
MOVWF PIE1
BANK0
BCF
PIR1,6
;Habilita Interrupciones Generales
;Habilita Interrupción del conversor A/D
;Limpia el Flag
RETURN
;Rutina de servicio a la interrupcion provocada por la
;finalización de una conversión A/D
AD_INTERRUPT:
INT_OFF
;Salvamos Contexto
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
;Rutina de servicio a la interrupción
MOVF ADRESH,W
;Cargamos la parte alta del resultado de la
;conversion
MOVWF ADCH_TEMP
;Guardamos el resultado
BANK1
MOVF ADRESL,W
;Cargamos la parte baja del resultado de la
;conversion
BANK0
MOVWF ADCL_TEMP
;Guardamos el resultado
128
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
;Restauramos el contexto
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
AD_ON
BCF
PIR1,6
;Inicio de una nueva conversión.
;Interrupción servida
INT_ON
RETFIE
;DEC_ADRES: Decodifica el valor de la conversion A/D dando como
;resultado un binario de valor igual a la temperatura
DEC_ADRES:
movf ADCH , W
movwf _code_tmp_0000
movf ADCL, W
movwf _code_tmp_0001
clrf _code_tmp_0002
movlw D'10'
movwf _code_tmp_0003
movlw D'16'
movwf _code_tmp_0004
clrf _code_tmp_0005
clrf _code_tmp_0006
label_0000
rlf _code_tmp_0000 , W
rlf _code_tmp_0006 , F
rlf _code_tmp_0005 , F
movf _code_tmp_0003 , W
subwf _code_tmp_0006 , F
movf _code_tmp_0002 , W
btfss STATUS, C
incfsz _code_tmp_0002 , W
subwf _code_tmp_0005 , F
btfsc STATUS, C
goto label_0001
movf _code_tmp_0003 , W
addwf _code_tmp_0006 , F
movf _code_tmp_0002 , W
btfsc STATUS, C
incfsz _code_tmp_0002 , W
addwf _code_tmp_0005 , F
bcf STATUS, C
label_0001
rlf _code_tmp_0001 , F
rlf _code_tmp_0000 , F
decfsz _code_tmp_0004 , F
goto label_0000
movf _code_tmp_0001 , W
movwf Temperatura
RETURN
129
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
;BIN_TO_BCD: Convierte un valor binario a BCD. El resultado se
;almacena en las variables DIG0_BCD, DIG1_BCD y DIG2_BCD
BIN_TO_BCD:
MOVF Temperatura,W
;Carga el valor binario inicial
CLRF Buffer_L
CLRF Buffer_H
;Inicia registros de trabajo
BIN_BCD_1:
ADDLW
BTFSS
GOTO
MOVWF
INCF
MOVF
XORLW
BTFSS
GOTO
CLRF
INCF
BIN_BCD_2:
MOVF
GOTO
BIN_BCD_3:
ADDLW
SWAPF
IORWF
0XF6 ;Resta 10 mediante suma de complemento a 2
STATUS,C
;Hay Carry?
BIN_BCD_3
;NO
Temp_1
;SI. Guardar en registro Temporal
Buffer_L,F ;Incrementa byte bajo.
Buffer_L,W ;Copia al acumulador
B'00001010' ;0AH xor W
STATUS,2
;Buffer_L es igual a 10?
BIN_BCD_2
;NO
Buffer_L
;SI. Poner Buffer_L a cero
Buffer_H,F ;Incrementa Buffer_H
Temp_1,W
BIN_BCD_1
;Recuperar el dato
;Continuar la operacion
H'0A'
Buffer_L,F
Buffer_L,F
;Temporal + 0x0A
MOVF Buffer_L,W
ANDLW B'00001111'
MOVWF DIG1_BCD
;Guarda las unidades
SWAPF Buffer_L,W
ANDLW B'00001111'
MOVWF DIG2_BCD
;Guarda las decenas
MOVF ADCL,W
ANDLW B'00000111'
MOVWF DIG0_BCD
;Guarda los décimos
RETURN
;BCD_TO_7SEG: Convierte un valor BCD en otro de 7 segmentos para
;visualizarlo en el display
BCD_TO_7SEG:
MOVF DIG0_BCD,W
CALL Tabla_7seg
MOVWF DIGIT0
MOVF
CALL
MOVWF
BSF
DIG1_BCD,W
Tabla_7seg
DIGIT1
DIGIT1,7
;Activa el punto decimal del dígito 1
MOVF DIG2_BCD,W
CALL Tabla_7seg
MOVWF DIGIT2
RETURN
130
ANEXO 6: MÓDULO DE CONTROL DE TEMPERATURA
SOLUCIÓN DE LAS PRÁCTICAS
Tabla_7seg:
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
PCL,F
0X7E
0X30
0X6D
0X79
0X33
0X5B
0X5F
0X70
0X7F
0X7B
;Calcula el desplazamiento
;0
;1
;2
;3
;4
;5
;6
;7
;8
;9
;DISPLAY: Visualiza la temperatura en los tres digitos de
;7 segmentos. Digito 0(RA5=0;RA4=0), Digito 1(RA5=1;RA4=0), Digito
;2(RA5=0;RA4=1)
DISPLAY:
BCF
PORTA,4
BCF
PORTA,5
;Selecciona el dígito 0
MOVF DIGIT0,W
MOVWF PORTC
;Visualiza en el dígito
CALL
;Espera
DELAY
BSF
PORTA,5
MOVF DIGIT1,W
MOVWF PORTC
;Selecciona el dígito 1
CALL
DELAY
;Espera
BCF
BSF
MOVF
MOVWF
PORTA,5
PORTA,4
DIGIT2,W
PORTC
CALL
DELAY
;Espera
BCF
BCF
PORTA,4
PORTA,5
;Selecciona el dígito 0
;Visualización en el dígito
;Selecciona el dígito 2
;Visualización en el dígito
RETURN
Código 18. Implementación de funciones.
131
ANEXO 7: MÓDULO DE CONTROL DE TEMPERATURA
PROGRAMA RESIDENTE EN EL MICROCONTROLADOR
Anexo 7:
Módulo de Control de Temperatura
(Programa Residente en el Microcontrolador)
Para poder realizar las prácticas de la asignatura Sistemas Digitales – II, el
microcontrolador de la placa debe estar cargado con el programa siguiente.
El programa está dividido en dos archivos, tal y como se explicó en el apartado 5.2.4 del
capítulo Memoria Descriptiva.
;Programa de medición de temperatura mediante el conversor analogico –
;digitalc disponible en el PIC16F873. Tambien se realiza la
;visualizacion del resultado en un display de 7 segmentos y 3 digitos
;PFC: ELABORACION DE MODULOS DIDACTICOS PARA MICROPROCESADORES
;Por: Antonio Miguel Zaplana Alcaraz
;Ponente: Jose Luis Ramirez Falo
;---------------------- PROGRAMA PRINCIPAL --------------------------LIST P=16f873
;Tipo de Procesador
INCLUDE "P16f873.INC"
;Definiciones de registros internos
__CONFIG
_CP_OFF
&
_WRT_ENABLE_OFF & _LVP_OFF
ORG
GOTO
0X00
INICIO
ORG
GOTO
0X04
AD_INTERRUPT
INI_VAR
INI_PORTS
INI_ADC
INI_INTERRUP
MOVLW B'00000110'
BANK1
MOVWF OPTION_REG
BANK0
&
_PWRTE_ON
&
_XT_OSC
;Vector de interrupcion
;Definiciones de las funciones de
;libreria
;Inicializa Variables
;Configura puertos de E/S
;Configura Conversor A/D
;Inicializa la interrupción del conversor
;A/D
;Preescaler de 128 para TMR0
INT_ON
CALL DELAY
AD_ON
INICIO2:
MOVF
MOVWF
MOVF
MOVWF
ADCH_TEMP,W
ADCH
ADCL_TEMP,W
ADCL
CALL
DEC_ADRES
&
;Vector de Reset
ORG
0X05
INCLUDE "Temp.inc"
INICIO:
CALL
CALL
CALL
CALL
_WDT_OFF
;Decodifica el resultado de la conversion A/D
132
ANEXO 7: MÓDULO DE CONTROL DE TEMPERATURA
PROGRAMA RESIDENTE EN EL MICROCONTROLADOR
CALL
CALL
CALL
CALL
ADRES_VIA
BIN_TO_BCD
BCD_TO_7SEG
DISPLAY
;Envia el resultado a la VIA
;Convierte el resultado binario a BCD
;Convierte BCD a 7 segmentos
;Visualiza el resultado en el display
GOTO
INICIO2
;Vuelve al principio del programa
NOP
END
Código 1. Fichero TEMP.ASM. Programa principal
;Programa de medición de temperatura mediante el conversor analogico –
;digital disponible en el PIC16F73. Tambien se realiza la
;visualizacion del resultado en un display de 7 segmentos y 3 digitos
;PFC: ELABORACION DE MODULOS DIDACTICOS PARA MICROPROCESADORES
;Por: Antonio Miguel Zaplana Alcaraz
;Ponente: Jose Luis Ramirez Falo
;---------------------- LIBRERIA DE FUNCIONES ----------------------CBLOCK
0X20 ;Inicio de definicion de variables
DIGIT0
;Valor de 7 segmentos a visualizar en el display 0
DIGIT1
;Valor de 7 segmentos a visualizar en el display 1
DIGIT2
;Valor de 7 segmentos a visualizar en el display 2
DIG0_BCD
;Valor BCD del digito 0
DIG1_BCD
;Valor BCD del digito 1
DIG2_BCD
;Valor BCD del digito 2
Buffer_L
;Parte baja del resultado de conversion binario a BCD
Buffer_H
;Parte alta del resultado de conversion binario a BCD
Temp_1
;Registro temporal
TEMP1
TEMP2
CONTADOR
W_TEMP
;Registro temporal para guardar el acumulador
STATUS_TEMP ;Registro temporal para guardar el registro de estado
PCLATCH_TEMP;Registro temporal para guardar el PCLATCH
FSR_TEMP
;Registro temporal para guardar el FSR
ADCH_TEMP
ADCL_TEMP
ENDC
;Fin de definiciones de variables
_code_tmp_0000
_code_tmp_0001
_code_tmp_0002
_code_tmp_0003
_code_tmp_0004
_code_tmp_0005
_code_tmp_0006
__ret__lobyte
ADCH
ADCL
Temperatura
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
equ
0x70
0x71
0x72
0x73
0x74
0x75
0x76
0x77
0x78
0x79
0x7a
;Cambio al banco de registros 1
#DEFINE
BANK1
BSF
;Cambio al banco de registros 0
STATUS,RP0
133
ANEXO 7: MÓDULO DE CONTROL DE TEMPERATURA
PROGRAMA RESIDENTE EN EL MICROCONTROLADOR
#DEFINE
BANK0
BCF
;Inicio de una nueva conversion
#DEFINE AD_ON
BSF
;Habilita Interrupciones
#DEFINE INT_ON
BSF
;Inhabilita Interrupciones
#DEFINE INT_OFF
BCF
STATUS,RP0
ADCON0,2
INTCON,7
INTCON,7
;--------------------------------------------------------------------;DEFINICION DE SUBRUTINAS
;--------------------------------------------------------------------;INI_VAR: Inicializa las variables
INI_VAR:
CLRF Temperatura
CLRF DIGIT0
CLRF DIGIT1
CLRF DIGIT2
CLRF DIG0_BCD
CLRF DIG1_BCD
CLRF DIG2_BCD
CLRF Buffer_L
CLRF Buffer_H
CLRF Temp_1
CLRF ADCH
CLRF ADCL
RETURN
;Realiza una temporización de 5 ms
DELAY:
MOVLW .5
MOVWF CONTADOR
DELAY_0:
BCF
INTCON,T0IF
MOVLW 0Xf7
MOVWF TMR0
DELAY_1:
BTFSS INTCON,T0IF
GOTO DELAY_1
DECFSZ
CONTADOR,F
GOTO DELAY_0
RETURN
;INI_PORTS: Inicializa los puertos de E/S
INI_PORTS:
BANK1
;Cambio de banco de registros
CLRF TRISB ;Puerto B como salidas
CLRF TRISC ;Puerto C como Salidas
MOVLW B'00000111'
MOVWF TRISA ;RA0, RA1 Y RA2 como entrada
BANK0
;Cambio de banco de registros
RETURN
134
ANEXO 7: MÓDULO DE CONTROL DE TEMPERATURA
PROGRAMA RESIDENTE EN EL MICROCONTROLADOR
;INI_ADC: Configura el conversor A/D
INI_ADC:
BANK1
MOVLW B'10001110'
MOVWF ADCON1
;Vref=Vdd, RA0=Analog, RA1,2,3,4,5, Digital
BANK0
MOVLW B'10000001'
MOVWF ADCON0
;Fosc/32, Channel 0 Analog, AD on
RETURN
;Rutina de inicialización de las interrupciones
INI_INTERRUP:
MOVLW B'01000000'
MOVWF INTCON
;Habilita Interrupciones Generales
BANK1
MOVLW B'01000000'
MOVWF PIE1
BANK0
BCF
;Habilita Interrupción del conversor A/D
PIR1,6
;Limpia el Flag
RETURN
;Rutina de servicio a la interrupcion provocada por la
;finalización de una conversión A/D
AD_INTERRUPT:
INT_OFF
;Salvamos Contexto
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
;Rutina de servicio a la interrupción
MOVF ADRESH,W
;Cargamos la parte alta del resultado de la
;conversion
MOVWF ADCH_TEMP
;Guardamos el resultado
BANK1
MOVF ADRESL,W
;Cargamos la parte baja del resultado de la
;conversion
BANK0
MOVWF ADCL_TEMP
;Guardamos el resultado
;Restauramos el contexto
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
AD_ON
BCF
PIR1,6
;Inicio de una nueva conversión.
;Interrupción servida
INT_ON
RETFIE
135
ANEXO 7: MÓDULO DE CONTROL DE TEMPERATURA
PROGRAMA RESIDENTE EN EL MICROCONTROLADOR
;DEC_ADRES: Decodifica el valor de la conversion A/D dando como
;resultado un binario de valor igual a la temperatura
DEC_ADRES:
movf ADCH , W
movwf _code_tmp_0000
movf ADCL, W
movwf _code_tmp_0001
clrf _code_tmp_0002
movlw D'10'
movwf _code_tmp_0003
movlw D'16'
movwf _code_tmp_0004
clrf _code_tmp_0005
clrf _code_tmp_0006
label_0000
rlf _code_tmp_0000 , W
rlf _code_tmp_0006 , F
rlf _code_tmp_0005 , F
movf _code_tmp_0003 , W
subwf _code_tmp_0006 , F
movf _code_tmp_0002 , W
btfss STATUS, C
incfsz _code_tmp_0002 , W
subwf _code_tmp_0005 , F
btfsc STATUS, C
goto label_0001
movf _code_tmp_0003 , W
addwf _code_tmp_0006 , F
movf _code_tmp_0002 , W
btfsc STATUS, C
incfsz _code_tmp_0002 , W
addwf _code_tmp_0005 , F
bcf STATUS, C
label_0001
rlf _code_tmp_0001 , F
rlf _code_tmp_0000 , F
decfsz _code_tmp_0004 , F
goto label_0000
movf _code_tmp_0001 , W
movwf Temperatura
RETURN
;ADRES_VIA: Envia el resultado de la conversion a la VIA del
;microinstructor
ADRES_VIA:
BTFSS PORTA,1
;Miramos cual es la configuración de la
;placa: 8 bits o 10 bits (5+5)
GOTO ENVIA10
;Configuración de 10 bits
ENVIA8:
MOVF
MOVWF
SWAPF
RLF
RLF
ANDLW
MOVWF
;Configuración de 8 bits
ADCH,W
TEMP2
TEMP2,F
TEMP2,F
TEMP2,W
B'11000000'
TEMP2
MOVF ADCL,W
MOVWF TEMP1
136
ANEXO 7: MÓDULO DE CONTROL DE TEMPERATURA
PROGRAMA RESIDENTE EN EL MICROCONTROLADOR
RRF
TEMP1,F
RRF
TEMP1,W
ANDLW B'00111111'
IORWF TEMP2,F
MOVF TEMP2,W
MOVWF PORTB
CALL
INTERRUPCION
;GENERA UNA INTERRUPCION EN LA VIA
RETURN
ENVIA10:
MOVF
MOVWF
SWAPF
ANDLW
MOVWF
ADCL,W
TEMP1
TEMP1,W
B'00001110'
TEMP1
MOVF
MOVWF
SWAPF
ANDLW
ADCH,W
TEMP2
TEMP2,W
B'00110000'
IORWF
RRF
ANDLW
MOVWF
BSF
TEMP1,F
TEMP1,W
B'00011111'
TEMP1
TEMP1,7
MOVF ADCL,W
ANDLW B'00011111'
MOVWF TEMP2
MOVWF PORTB
CALL INTERRUPCION
TEST_CA2:
BTFSC PORTA,2
GOTO
TEST_CA2
MOVF TEMP1,W
MOVWF PORTB
CALL INTERRUPCION
TEST_CA2_2:
BTFSC PORTA,2
GOTO
TEST_CA2_2
;Se envia el byte bajo (5 últimos bits)
;Genera una interrupcion en la via
;Mira si el programa del TM-683 ha leido
;el dato
;NO. CA2=1
;SI. Vamos a enviar el byte alto.
;Se envia el byte alto (5 primeros bits)
;Genera una interrupcion en la via
;Mira si el programa del TM-683 ha leido
;el dato
;NO. CA2=1
;SI
RETURN
137
ANEXO 7: MÓDULO DE CONTROL DE TEMPERATURA
PROGRAMA RESIDENTE EN EL MICROCONTROLADOR
;Rutina que genera una interrupcion en la VIA produciendo un flanco
;descendente en la línea CA1 de la VIA
INTERRUPCION:
BCF
PORTA,3
;Desactiva la línea CA1 de la VIA
BSF
PORTA,3
;Activa la línea CA1
RETURN
;BIN_TO_BCD: Convierte un valor binario a BCD. El resultado se
;almacena en las variables DIG0_BCD, DIG1_BCD y DIG2_BCD
BIN_TO_BCD:
MOVF Temperatura,W
;Carga el valor binario inicial
CLRF Buffer_L
CLRF Buffer_H
;Inicia registros de trabajo
BIN_BCD_1:
ADDLW
BTFSS
GOTO
MOVWF
INCF
MOVF
XORLW
BTFSS
GOTO
CLRF
INCF
BIN_BCD_2:
MOVF
GOTO
BIN_BCD_3:
ADDLW
SWAPF
IORWF
0XF6 ;Resta 10 mediante suma de complemento a 2
STATUS,C
;Hay Carry?
BIN_BCD_3
;NO
Temp_1
;SI. Guardar en registro Temporal
Buffer_L,F ;Incrementa byte bajo.
Buffer_L,W ;Copia al acumulador
B'00001010' ;0AH xor W
STATUS,2
;Buffer_L es igual a 10?
BIN_BCD_2
;NO
Buffer_L
;SI. Poner Buffer_L a cero
Buffer_H,F ;Incrementa Buffer_H
Temp_1,W
BIN_BCD_1
;Recuperar el dato
;Continuar la operacion
H'0A'
Buffer_L,F
Buffer_L,F
;Temporal + 0x0A
MOVF Buffer_L,W
ANDLW B'00001111'
MOVWF DIG1_BCD
;Guarda las unidades
SWAPF Buffer_L,W
ANDLW B'00001111'
MOVWF DIG2_BCD
;Guarda las decenas
MOVF ADCL,W
ANDLW B'00000111'
MOVWF DIG0_BCD
;Guarda los décimos
RETURN
;BCD_TO_7SEG: Convierte un valor BCD en otro de 7 segmentos para
;visualizarlo en el display
BCD_TO_7SEG:
MOVF DIG0_BCD,W
CALL Tabla_7seg
MOVWF DIGIT0
MOVF
CALL
MOVWF
BSF
DIG1_BCD,W
Tabla_7seg
DIGIT1
DIGIT1,7
;Activa el punto decimal del dígito 1
138
ANEXO 7: MÓDULO DE CONTROL DE TEMPERATURA
PROGRAMA RESIDENTE EN EL MICROCONTROLADOR
MOVF DIG2_BCD,W
CALL Tabla_7seg
MOVWF DIGIT2
RETURN
Tabla_7seg:
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
PCL,F
0X7E
0X30
0X6D
0X79
0X33
0X5B
0X5F
0X70
0X7F
0X7B
;Calcula el desplazamiento
;0
;1
;2
;3
;4
;5
;6
;7
;8
;9
;DISPLAY: Visualiza la temperatura en los tres digitos de
;7 segmentos. Digito 0(RA5=0;RA4=0), Digito 1(RA5=1;RA4=0), Digito
;2(RA5=0;RA4=1)
DISPLAY:
BCF
PORTA,4
BCF
PORTA,5
;Selecciona el dígito 0
MOVF DIGIT0,W
MOVWF PORTC
;Visualiza en el dígito
CALL
;Espera
DELAY
BSF
PORTA,5
MOVF DIGIT1,W
MOVWF PORTC
;Selecciona el dígito 1
CALL
DELAY
;Espera
BCF
BSF
MOVF
MOVWF
PORTA,5
PORTA,4
DIGIT2,W
PORTC
CALL
DELAY
;Espera
BCF
BCF
PORTA,4
PORTA,5
;Selecciona el dígito 0
;Visualización en el dígito
;Selecciona el dígito 2
;Visualización en el dígito
RETURN
Código 2. Fichero TEMP.INC. Implementación de funciones.
139
ANEXO 8: CONTROLADOR DE TECLADO
INFORMACIÓN PARA EL ALUMNO
Anexo 8:
Práctica de Controlador de Teclado
(Información Para el Alumno)
1 Enunciado de la Práctica
El objetivo de esta práctica es realizar un controlador de un teclado de ordenador, de
forma que se decodifiquen los códigos de exploración de las teclas pulsadas y se
visualice el carácter de dicha tecla en la pantalla del ordenador.
Para realizar esta práctica, el alumno tiene que montar el circuito eléctrico que se
encuentra al final de este documento. Una vez montado y verificado el circuito, tendrá
que realizar la programación del controlador de teclado.
1.1 Material Necesario
-
1 CI MAX232
1 Conector hembra DIN 5 pins
1 Conector hembra DB25
4 Condensadores electrolíticos 1uF 63V
1 Protoboard
1 Microinstructor TM-683
Un teclado de ordenador con conector DIN-5
Fuente de Alimentación +5V
2 Estudio Previo
Estudia el esquema eléctrico del circuito y responde a las siguientes cuestiones:
a) ¿Cuantas líneas utiliza el teclado para enviar el código de exploración de las
teclas pulsadas?
b) ¿Cuál es la función principal del circuito integrado MAX232?
c) ¿Qué nivel de tensión tendremos en la salida del MAX232 si en la entrada
tenemos un nivel TTL de 5V?
d) ¿Cuáles son los niveles de tensión que define el protocolo RS232 para las líneas
de recepción y transmisión de datos?
e) ¿Cuáles son los códigos de exploración de un teclado?
140
ANEXO 8: CONTROLADOR DE TECLADO
INFORMACIÓN PARA EL ALUMNO
3 Trabajo Práctico
a) Monta el circuito de la práctica en la placa protoboard.
b) Verificación del circuito. Comprueba que para una entrada de +5V se obtiene
una salida entre –5V y –15V. Comprueba también que para una entrada de 0V se
obtiene una salida entre +5V y + 15V.
c) Conecta el teclado al conector DIN y conecta la línea de datos del teclado a una
entrada del analizador lógico. Alimenta el circuito y dibuja la trama de bits que
aparece cuando se pulsa una tecla. Señala cuáles son el bit de inicio, los bits de
datos, el bit de paridad y el bit de parada.
d) Conecta el circuito montado al conector del Canal A del microinstructor. Realiza
un programa que sea capaz de leer los códigos de exploración de las teclas
pulsadas y visualice los caracteres en la pantalla del ordenador.
4 Información Técnica
El esquema eléctrico del circuito que se encuentra al final de este documento. En él se
pueden observar las siguientes partes:
En primer lugar, un conector tipo DIN hembra de cinco contactos para la conexión del
teclado. En la Figura 1 se puede observar el aspecto de este conector.
Figura 1. Conector DIN – 5
En la Tabla 1 se explican las funciones de cada uno de los contactos del conector DIN
de cinco contactos.
Pin
Señal
1
Reloj
2
Datos
3
Reset
4
Masa
5 Vcc (+5V)
Tabla 1. Señales del conector
DIN – 5
Por los contactos 1 y 2 circulan las señales de reloj y datos respectivamente. Estas dos
líneas son bidireccionales de colector abierto y niveles TTL. En nuestro caso la
comunicación será asíncrona por lo que la línea de reloj no se conectará.
141
ANEXO 8: CONTROLADOR DE TECLADO
INFORMACIÓN PARA EL ALUMNO
Por la línea de datos, el teclado envía los códigos de exploración de las teclas pulsadas
con el siguiente formato:
-
Un bit de inicio
Ocho bits de datos correspondientes al código de exploración de la tecla pulsada
empezando por el bit menos significativo.
Un bit de paridad impar
Un bit de parada.
La línea número tres corresponde a la señal de RESET, la cual tampoco conectaremos.
Finalmente las líneas cuatro y cinco son para la conexión del nodo de referencia y
alimentación, respectivamente.
En segundo lugar, tenemos un conector hembra de 25 contactos tipo DB25 para la
conexión del circuito de adaptación al conector del Canal A del microinstructor.
El significado de cada uno de los contactos del conector se encuentra en la Tabla 2.
Pin Señal Canal A
1
GND
2
TxA
3
RxA
4
RTSA
5
CTSA
6
DSRA
7
GND
8
CDA
9 – 19 No conectadas
20
DTRA
21 – 25 No conectadas
Tabla 2. Señales del conector serie DB25
De los veinticinco contactos disponibles, sólo se utilizan dos; el contacto número tres
para la recepción de datos del teclado y, el contacto número siete para la conexión al
nodo de referencia.
Por último, tenemos un circuito integrado tipo MAX232 cuya función es la de adaptar la
señal de datos enviada por el teclado con niveles TTL, al nivel de tensión que define el
protocolo RS-232, que es el usado por el micoinstructor para comunicaciones serie. Este
protocolo define los niveles de tensiones descritos en la Tabla 3.
“0” Lógico +5V a +15V
“1” Lógico -5V a -15V
(a)
“0” Lógico
“1” Lógico
+3V a +25V
-3V a –25V
(b)
Tabla 3. Niveles lógicos RS-232, (a) para las salidas, (b) para las entradas
142
ANEXO 8: CONTROLADOR DE TECLADO
INFORMACIÓN PARA EL ALUMNO
El circuito integrado MAX232 se caracteriza por tener dos transmisores y dos
receptores, se alimenta con una tensión de +5V y necesita cuatro condensadores
electrolíticos de un microfaradio.
4.1. Funcionamiento del Teclado
A continuación se explica el funcionamiento del teclado utilizado para la realización de
este módulo. Los códigos generados por el teclado pueden variar en función de la clase
de teclado. Sólo se consideran para esta práctica la utilización de las teclas de caracteres
y números del teclado normal. No se ha considerado la pulsación de las teclas de
función, las teclas extendidas ni las teclas del teclado numérico.
Cuando se pulsa una tecla, el teclado envía un código que identifica la tecla pulsada,
estos códigos se conocen con el nombre de códigos de exploración del teclado. Al soltar
la tecla, el teclado envía dos códigos: el primer código, llamado código BREAK, es el
0xF0. El segundo código es el mismo código de exploración que envió al pulsar la tecla.
Por ejemplo, cuando se pulsa la tecla de la letra “R”, el teclado envía el código 0x2D.
Al soltar la tecla, envía los códigos 0xF0 seguido del código 0x2D.
4.1.1. Códigos de Rastreo del Teclado
En la Tabla 4 se presentan los códigos de rastreo de las teclas correspondientes al
teclado utilizado. Como se ha indicado anteriormente, estos códigos pueden variar
según el teclado utilizado.
Código
Tecla
Hex. Dec.
0D
13
TAB
15
21
Q
16
22
1
1A
26
Z
1B
27
S
1C
28
A
1D
29
W
1E
30
2
21
33
C
22
34
X
23
35
D
24
36
E
25
37
4
26
38
3
29
41 ESPACIO
2A
42
V
Código
Hex. Dec.
2B
43
2C
44
2D
45
2E
46
31
49
32
50
33
51
34
52
35
53
36
54
3ª
58
3B
59
3C
60
3D
61
3E
62
41
65
Tecla
F
T
R
5
N
B
H
G
Y
6
M
J
U
7
8
,;
Tabla 4. Códigos de Exploración del Teclado.
143
Código
Tecla
Hex. Dec.
42
66
K
43
67
I
44
68
O
45
69
0
46
70
9
49
73
.:
4A
74
-_
4B
75
L
4C
76
Ñ
4D
77
P
4E
78
‘?
5A
90
INTRO
5D
93
Ç
76
118 ESCAPE
ANEXO 8: CONTROLADOR DE TECLADO
INFORMACIÓN PARA EL ALUMNO
4.1.2 Programación de la DUART
En este apartado se explica como debe ser programado el chip de comunicaciones serie
que lleva incorporado el microinstructor, DUART (Dual Universal Asynchronous
Receiver Transmitter). De la misma forma que se indicó en el apartado anterior respecto
de los códigos de exploración del teclado, la programación de la DUART puede variar
según el teclado, ya que la velocidad de transmisión de los datos puede ser diferente.
Para que el microinstructor pueda recibir los códigos de exploración de las teclas
pulsadas, el canal A de la DUART debe ser programada de la siguiente forma:
-
Paridad Impar
Ocho bits por carácter
Un bit de parada
Control de RxRTS = NO
Selección de RxINT por RxRDY
Modo de error por carácter
Modo de canal normal
Control de RxRTS = NO
Control de Tx por CTS = NO
Modo y reloj del Timer = TIMER (X1/CLK)
Interrupciones generadas por cambio en IP3, IP2, IP1, IP0 = NO
Valor de inicio del Timer = 0x0009
Velocidad de recepción por Timer
Interrupciones habilitadas: RxRDYA
144
ANEXO 9: CONTROLADOR DE TECLADO
SOLUCIÓN DE LA PRÁCTICA
Anexo 9:
Práctica de Controlador de Teclado
(Solución de la Práctica)
1 Enunciado de la Práctica
El objetivo de esta práctica es realizar un controlador de un teclado de ordenador, de
forma que se decodifiquen los códigos de exploración de las teclas pulsadas y se
visualice el carácter de dicha tecla en la pantalla del ordenador.
Para realizar esta práctica, el alumno tiene que montar el circuito eléctrico que se
encuentra al final de este documento. Una vez montado y verificado el circuito, tendrá
que realizar la programación del controlador de teclado.
1.1 Material Necesario
-
1 CI MAX232
1 Conector hembra DIN 5 pins
1 Conector hembra DB25
4 Condensadores electrolíticos 1uF 63V
1 Protoboard
1 Microinstructor TM-683
Un teclado de ordenador con conector DIN-5
Fuente de Alimentación +5V
2 Estudio Previo
Estudia el esquema eléctrico del circuito y responde a las siguientes cuestiones:
a) ¿Cuantas líneas utiliza el teclado para enviar el código de exploración de las
teclas pulsadas?
El teclado utiliza una línea para enviar el código de exploración de las teclas pulsadas.
Además, utiliza otra línea para enviar una onda cuadrada para sincronizar los datos
enviados.
b) ¿Cuál es la función principal del circuito integrado MAX232?
La función principal del circuito integrado MAX232 es la de adaptar los niveles de
tensión de las señales TTL a los niveles de tensión establecidos por el protocolo RS232.
c) ¿Qué nivel de tensión tendremos en la salida del MAX232 si en la entrada
tenemos un nivel TTL de 5V?
En la salida del circuito MAX232 tendremos una tensión entre –5 y -10V.
146
ANEXO 9: CONTROLADOR DE TECLADO
SOLUCIÓN DE LA PRÁCTICA
d) ¿Cuáles son los niveles de tensión que define el protocolo RS232 para las líneas
de recepción y transmisión de datos?
Los niveles de tensión que define el protocolo RS232 son los siguientes:
“0” Lógico +5V a +15V
“1” Lógico -5V a -15V
(a) salidas
“0” Lógico
+3V a +25V
“1” Lógico
-3V a –25V
(b) entradas
e) ¿Cuáles son los códigos de exploración de un teclado?
Los códigos de exploración del teclado son los siguientes:
Código
Tecla
Hex. Dec.
0D
13
TAB
15
21
Q
16
22
1
1A
26
Z
1B
27
S
1C
28
A
1D
29
W
1E
30
2
21
33
C
22
34
X
23
35
D
24
36
E
25
37
4
26
38
3
29
41 ESPACIO
2A
42
V
Código
Hex. Dec.
2B
43
2C
44
2D
45
2E
46
31
49
32
50
33
51
34
52
35
53
36
54
3ª
58
3B
59
3C
60
3D
61
3E
62
41
65
147
Tecla
F
T
R
5
N
B
H
G
Y
6
M
J
U
7
8
,;
Código
Tecla
Hex. Dec.
42
66
K
43
67
I
44
68
O
45
69
0
46
70
9
49
73
.:
4A
74
-_
4B
75
L
4C
76
Ñ
4D
77
P
4E
78
‘?
5A
90
INTRO
5D
93
Ç
76
118 ESCAPE
ANEXO 9: CONTROLADOR DE TECLADO
SOLUCIÓN DE LA PRÁCTICA
Trabajo Práctico
a) Monta el circuito de la práctica en la placa protoboard.
b) Verificación del circuito. Comprueba que para una entrada de +5V se obtiene
una salida entre –5V y –15V. Comprueba también que para una entrada de 0V
se obtiene una salida entre +5V y + 15V.
Para una entrada de +5V, se obtiene una salida de aproximadamente –5V (-4,8V). Para
una entrada de 0V se obtiene una salida de aproximadamente 5V (4,95V). Los niveles
de tensión obtenidos son ligeramente inferiores a los marcados por el estándar RS232
pero son suficientes para un buen funcionamiento.
c) Conecta el teclado al conector DIN y conecta la línea de datos del teclado a una
entrada del analizador lógico. Alimenta el circuito y dibuja la trama de bits que
aparece cuando se pulsa una tecla. Señala cuáles son el bit de inicio, los bits de
datos, el bit de paridad y el bit de parada.
Al pulsar la tecla INTRO se visualiza en el analizador lógico la siguiente trama de bits,
correspondientes al código de exploración de teclado número 90 (0x5A).
d) Conecta el circuito montado al conector del Canal A del microinstructor.
Realiza un programa que sea capaz de leer los códigos de exploración de las
teclas pulsadas y visualice los caracteres en la pantalla del ordenador.
El código de programa de la solución de la práctica es el siguiente:
148
ANEXO 9: CONTROLADOR DE TECLADO
SOLUCIÓN DE LA PRÁCTICA
;*************************************************************
;PFC: ELABORACION DE MODULOS DIDACTICOS PARA MICROPROCESADORES
;PRACTICA DE CONTROLADOR DE TECLADO
;
; Realizado por: ANTONIO MIGUEL ZAPLANA ALCARAZ
; Director: JOSE LUIS RAMIREZ FALO
;*************************************************************
ABSOLUTE
ORG
DC.L
$20098 ;Direccion del pseudo-vector correspondiente
TECLADO ;al num. 64
;REGISTROS DE LA DUART
DUART EQU
MR1A EQU
MR2A EQU
SRA
EQU
CSRA EQU
CRA
EQU
RBA
EQU
TBA
EQU
IPCR EQU
ACR
EQU
ISR
EQU
IMR
EQU
CUR
EQU
CTUR EQU
CLR
EQU
CTLR EQU
MR1B EQU
MR2B EQU
SRB
EQU
CSRB EQU
CRB
EQU
RBB
EQU
TBB
EQU
IVR
EQU
OPRS
EQU
STRCONT EQU
STPCONT EQU
$60041
DUART+0
DUART+0
DUART+2
DUART+2
DUART+4
DUART+6
DUART+6
DUART+8
DUART+8
DUART+10
DUART+10
DUART+12
DUART+12
DUART+14
DUART+14
DUART+16
DUART+16
DUART+18
DUART+18
DUART+20
DUART+22
DUART+22
DUART+24
DUART+28
DUART+28
DUART+30
KEYB_STATUS EQU
EX
SHIFTD
SHIFTI
CLOCK
CTRL
ALT
REENVIO
ACK
OVERF
FALLO
BAT
ECO
ESC
SUELTA
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
$25500
$E0
$59
$12
$58
$14
$00
$FE
$FA
$00
$FD
$AA
$EE
$76
$F0
;Direccion base la DUART
;Mode Register A
;Status Register A
;Clock Select Register A
;Command Register A
;Receiver Buffer A
;Transmitter Buffer A
;Input Port Change Register
;DUART Auxiliay Control Register
;Interrupt Status Register
;Interrupt Mask Register
;Current MSB of Counter
;Cunter / Timer Upper Register
;Current LSB of Counter
;Counter / Timer Lower Register
;Mode Register B
;Status register B
;Clock Select Register B
;Command Register B
;Receiver Buffer B
;Transmitter Buffer B
;Interrupt Vector Register
;Start-Counter command
;Stop-Counter command
;Direccion del registro
;de estado del teclado
;Extended code
;Right Shift code
;Left Shift code
;Caps Lock code
;Control Code
;Alt code
;Comando de reenvio
;Dato aceptado
;Desbordamiento
;Fallo en teclado
;Inicio acabado
;Tecla de Escape
;Codigo Break
149
ANEXO 9: CONTROLADOR DE TECLADO
SOLUCIÓN DE LA PRÁCTICA
ORG
$25000
CLR.W KEYB_STATUS ;Inicializa el registro de estado
;CONFIGURA EL CANAL A DE LA DUART PARA RECIBIR
;CARACTERES DEL TECLADO
MOVE.B #%00100000,CRA
MOVE.B #%00010000,CRA ;Inicializa MR a MR1A
MOVE.B #%00000111,MR1A ;Paridad impar, 8 bits caracter
MOVE.B #%00000111,MR2A ;1 bit de parada
MOVE.B #%01100000,ACR ;Timer CLK
MOVE.B #$09,CTLR
;Velocidad 12500 bits/seg
MOVE.B #$00,CTUR
MOVE.B #%11011101,CSRA ;Muestreo por Timer
MOVE.B STRCONT,D4
;Arranca el temporizador
MOVE.B #%00000000,IMR ;Inhabilita interrupciones
MOVE.B #64,IVR
;Vector de interrupcion
MOVE.B #%00000010,IMR ;Habilita interrupcion RxRDYA
MOVE.B #%00000001,CRA ;Habilita Receptor del Canal A
LOOP:
BTST
BNE
#4,KEYB_STATUS
FINAL
;Mira si se ha pulsado ESC
BTST
#5,KEYB_STATUS
;Mira si tiene algun caracter
;para visualizar
BEQ
LOOP
;No hay ninguno. Sigue esperando
JSR
BCLR
JMP
PUTCHAR
#5,KEYB_STATUS
LOOP
;Visualiza el caracter
FINAL:
MOVE.B
TRAP #5
#$00,IMR
;Inhabilita las Interrupciones
;Salida al programa MONITOR
;*************************************************************
;
FIN DEL PROGRAMA PRINCIPAL
;*************************************************************
;ENVIA EL CARACTER SITUADO EN EL REGISTRO D0 POR EL CANAL B
;DEL PUERTO SERIE PARA QUE SE VISUALICE EN LA PANTALLA
PUTCHAR:
CMPI
#13,D0
;Comprueba si es ENTER
BEQ
ENTER
BTST
#2,SRB
BEQ
MOVE.B
RTS
PUTCHAR
D0,TBB
;Comprueba si el transmisor
;esta preparado
;NO esta preparado
;SI. Envia el caracter
150
ANEXO 9: CONTROLADOR DE TECLADO
SOLUCIÓN DE LA PRÁCTICA
;Si se pulsa la tecla INTRO, se deben enviar
;dos caracteres consecutivos: el retorno de carro (13)
;y el salto de linea (10)
ENTER:
BTST
#2,SRB
;Comprueba si el transmisor
;esta preparado
BEQ
ENTER
;NO esta preparado
MOVE.B D0,TBB
;SI. Envia el caracter
MOVE.B #$0A,D0
;Carga el salto de linea
JMP
PUTCHAR
;*************************************************************
;
RUTINA DE ATENCION A LA INTERRUPCION DEL TECLADO
;*************************************************************
TECLADO:
CLR.L
MOVE.L
MOVE.B
D1
#0,A1
RBA,D1
;Lee el codigo de exploracion
CMPI.B
BEQ
#SUELTA,D1
SOLTADA
;Mira si es codigo MAKE o BRAKE
;Salta si es BRAKE
CMPI.B
BEQ
#SHIFTD,D1
SHIFT
;Mira si es una tecla de mayuscula
CMPI.B
BEQ
#SHIFTI,D1
SHIFT
;Mira si es una tecla de mayuscula
CMPI.B
BEQ
#CLOCK,D1
SHIFT
;Mira si es una tecla de bloq. mayuscula
CMPI.B
BEQ
#CTRL,D1
CONTROL
;Mira se es una tecla de Control
CMPI.B
BEQ
#ALT,D1
ALT_KEY
;Mira se es una tecla de Alt
CMPI.B
BEQ
#ESC,D1
ESCAPE
;Mira se es una tecla de Escape
CMPI.B
BEQ
#OVERF,D1
EOI
BTST
BNE
#6,KEYB_STATUS
BRAKE
;Se ha soltado la tecla
BTST
BNE
#1,KEYB_STATUS
MAYUSCULA
;Esta mayusculas activado?
BTST
BNE
#3,KEYB_STATUS ;Esta control activado?
EOI
;Si. Fin de la interrupcion
BTST
BNE
#2,KEYB_STATUS ;Esta alt activado?
EOI
;Si. Fin de la interrupcion
BTST
BNE
#0,KEYB_STATUS
EX_OFF
MOVEA.L
#TABLA_MIN,A1
;Mira se es una tecla de Escape
;Esta ex activado?
;Si. Fin de la interrupcion
151
ANEXO 9: CONTROLADOR DE TECLADO
SOLUCIÓN DE LA PRÁCTICA
ADDA.L
D1,A1
MOVE.B
(A1),D0
BSET
;Calcula el indice de la tabla
;Busca el codigo ASCII
#5,KEYB_STATUS
;Visualizar Caracter
EOI:
RTE
EXTENDIDA:
BSET
RTE
#0,KEYB_STATUS
EX_OFF:
BCLR
RTE
#0,KEYB_STATUS
CONTROL:
BCHG
RTE
#3,KEYB_STATUS
ALT_KEY:
BCHG
RTE
#2,KEYB_STATUS
ESCAPE:
BSET
RTE
#4,KEYB_STATUS
MAYUSCULA:
BTST
BNE
#0,KEYB_STATUS
EX_OFF
;Esta ex activado?
;Si. Fin de la interrupcion
BTST
BNE
#3,KEYB_STATUS ;Esta control activado?
EOI
;Si. Fin de la interrupcion
BTST
BNE
#2,KEYB_STATUS ;Esta alt activado?
EOI
;Si. Fin de la interrupcion
MOVEA.L
ADDA.L
#TABLA_MAY,A1
D1,A1
;Calcula el indice de la tabla
MOVE.B
(A1),D0
BSET
#5,KEYB_STATUS
;Busca el codigo ASCII
;Visualizar Caracter
RTE
SHIFT:
BCHG #1,KEYB_STATUS
RTE
SOLTADA:
BSET
RTE
#6,KEYB_STATUS
152
ANEXO 9: CONTROLADOR DE TECLADO
SOLUCIÓN DE LA PRÁCTICA
BRAKE:
BCLR
#6,KEYB_STATUS
CMPI.B
BEQ
EOI
#REENVIO,D1 ;Mira se es un codigo de reenvio
CMPI.B
BEQ
EOI
#ACK,D1;Mira se es un codigo de reconocimiento
CMPI.B
BEQ
EOI
#FALLO,D1
;Mira se es un codigo de fallo
CMPI.B
BEQ
EOI
#BAT,D1
;Mira se es un codigo de BAT terminado
CMPI.B
BEQ
EOI
#ECO,D1
;Mira se es un codigo de eco
CMPI.B
#SHIFTD,D1
BEQ
SHIFT
;Mira si es una tecla de mayuscula
CMPI.B
#SHIFTI,D1
BEQ
SHIFT
;Mira si es una tecla de mayuscula
CMPI.B
#CTRL,D1
BEQ
CONTROL
;Mira se es una tecla de Control
CMPI.B
#ALT,D1
BEQ
ALT_KEY
BTST
BNE
BCLR
#0,KEYB_STATUS
EX_OFF
;Mira se es una tecla de Alt
;¿Esta ex activado?
;Si. Fin de la interrupcion
#5,KEYB_STATUS
RTE
;Tablas de codigos de caracteres
TABLA_MIN DB
nbhgy6
mju78
'
,kio09
',9,'
.-lñp',39,'
TABLA_MAY DB
NBHGY&
MJU/(
'
;KIO=)
:_LÑP?
',9,'
q1
zsaw2 cxde43
',13,' ç',$0
!
Q!
',13,'
ZSAW"
Ç',$0
CXDE$ú
vftr5
VFTR%
NOP
END
Código 1. Solución de la Práctica de Controlador de Teclado.
En el código anterior se utiliza una posición de memoria designada por la etiqueta
KEYB_STATUS que indica el estado de las teclas pulsadas del teclado. El significado
de cada uno de los bits es el siguiente:
7
X
6
5
BREAK VISUALIZAR
CARÁCTER
4
ESC
153
3
CONTROL
2
ALT
1
SHIFT
0
EX
ANEXO 9: CONTROLADOR DE TECLADO
SOLUCIÓN DE LA PRÁCTICA
EX = 1: El siguiente código que se recibirá a continuación pertenece a una tecla del
teclado extendido
SHIFT = 1: Indica que la tecla de mayúsculas está pulsada
ALT = 1: Indica que la tecla ALT está pulsada
CONTROL = 1: Indica que la tecla CONTROL está pulsada
ESC = 1: Indica que se ha pulsado la tecla escape
VISUALIZAR CARÁCTER = 1: Indica que hay un carácter en el registro D0 que se
tiene que visualizar en la pantalla del ordenador.
BREAK = 1: Indica que el código que se recibirá a continuación pertenece a una tecla
que se ha soltado.
154
Referencias
[1] HITACHI HD44780U
[2] PIC 16F873
[3] Funcionamiento del
Teclado
[4] MAX232
[5] DUART MC68HC681
[6] Software P16Pro
http://semiconductor.hitachi.com/hd44780.pdf 30-08-2002
http://www.microchip.com/download/lit/pline/picmicro/families/16f87x/30292c.pdf
30-08-2002
http://atc.ugr.es/docencia/udigital/index.html 30-08-2002
http://pdfserv.maxim-ic.com/arpdf/MAX220-MAX249.pdf 30-08-2002
http://e-www.motorola.com/brdata/PDFDB/docs/MC68681UM.pdf 30-08-2002
http://www.picallw.com/zip/p16pr364.zip 30-08-2002
155
Descargar