Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ELECTRÓNICOS
D I G I TA L E S
SEGUNDA PRÁCTICA
C U E N TA R R E V O L U C I O N E S D I G I TA L
Curso 2010-2011
Profesor: Jaime Gómez Gil
E.T.S. Ing. Telecomunicación
Universidad de Valladolid
Introducción
La asignatura SISTEMAS ELECTRÓNICOS DIGITALES estudia el diseño y la programación de los sistemas
electrónicos digitales por excelencia, que son los microprocesadores. En cuanto a la parte de programación, en
esta asignatura se opta por el trabajo con el microcontrolador PIC16F84A. En esta práctica se realizan una serie
de pruebas para comprobar de forma real todos los conocimientos adquiridos en la clase de teoría, sobre el
microcontrolador PIC16F84A.
Objetivo
El objetivo de esta segunda práctica es afianzar los conocimientos adquiridos en clase de teoría sobre el
microcontrolador Microchip PIC16F84A, realizando varias versiones de un cuentarrevoluciones digital.
Enunciado
Disponemos de un eje al que pretendemos medir la velocidad, que gira con velocidades comprendidas entre 0 y
200 vueltas por segundo.
Figura 1: Detector de corte H21A1, conexión recomendada para este detector de corte, geometría de la rueda dentada y disposición del
detector de corte y rueda dentada en nuestra implementación
A dicho eje le acoplamos una rueda con cuatro dientes, que los haremos pasar a través de un detector de corte.
Pretendemos que un microcontrolador esté continuamente midiendo la velocidad a la que gira ese eje, y que
presente la información medida de tres formas diferentes:
Versión VISUAL
El microcontrolador ofrece información de la velocidad de giro mediante una barra de leds. Si todos los
leds están apagados, es que el eje está parado. Cuando el eje gira con velocidades pequeñas se
encenderán unos pocos leds, y cuando el eje gira con velocidades elevadas, se encenderán muchos leds.
Versión PRECISA
El microcontrolador ofrece información numérica de la velocidad de giro mediante displays de 7
segmentos.
Versión CLÁSICA
El microcontrolador ofrece información similar a la de un cuentarrevoluciones de aguja analógico de un
coche.
Un posible algoritmo mediría el número de pulsos detectados durante 1 segundo y, posteriormente, dividiendo
ese número entre 4, se obtendrían las revoluciones por segundo. Pero esto plantearía el siguiente problema; el
número de pulsos detectados en un segundo sería un número entre 0 y 800 (200×4) y ese número no se puede
almacenar en un único registro de 8 bits como los que posee el PIC16F84A. Por ello, se muestrearán los pulsos
entrantes durante la cuarta parte de un segundo y, como el número de dientes de la rueda es 4, ese número serán
las revoluciones por segundo.
Tanto para facilitar como para hacer más ameno y gratificante el trabajo al alumno, esta práctica se divide en
pequeñas y sencillas pruebas, hasta llegar a los diseños definitivos del cuentarrevoluciones digital.
Figura 2
Figura 3
Girando despacio el eje, comprobar que el diodo conectado a RB4 se enciende y se apaga según la rueda dentada
corta el haz infrarrojo en el detector de corte.
PRUEBA, copiar RA4 en RB0
Dado el circuito de la Figura 3, realizar el organigrama y un programa en ensamblador MPASM que copie el
contenido de la entrada RA4 en RB0, y mantenga apagados los leds RB1 hasta RB7.
Girando despacio el eje, comprobar que el diodo conectado a RB0 se enciende y se apaga según la rueda dentada
corta el haz infrarrojo en el detector de corte.
Figura 4.
Realizar el organigrama y un programa en ensamblador MPASM para que los diodos led se iluminen según la
siguiente secuencia, a cada paso de un diente de la rueda.
00000000
00000001
00000011
00000111
00001111
00011111
00111111
01111111
11111111
11111110
11111100
11111000
11110000
11100000
11000000
10000000
vuelta al primer estado
Es decir, inicialmente los ocho leds están apagados hasta que el primer diente atraviesa el detector de corte,
momento en el que se enciende el led menos significativo. Cuando un segundo diente atraviesa el haz, se
deberán encender los led conectados a RB0 y RB1 y así sucesivamente.
Esta prueba se realizará sin utilizar las funciones de rotación del PIC (rlf y rrf), y se deberá copiar 16 veces
un conjunto de varias líneas en las que lo único que cambia es el valor de salida por la puerta B.
PRUEBA, secuencias de bytes en PORTB con subrutina
Resolver el mismo problema que en la prueba anterior, pero ahora utilizando una tabla de 32 columnas, es decir,
un conjunto de 32 instrucciones en una subrutina del tipo retlw ‘00001111’, precedidas por una
instrucción del tipo addwf PCL,1. Evidentemente, a la subrutina se la llamará con una instrucción call
subrutina Anotar en la memoria tanto el organigrama como el programa realizado.
PRUEBA, secuencia lenta de bytes en PORTB
En la prueba anterior es necesario girar el mando muy despacio para poder percibir el movimiento de las luces en
los leds. Modificar ligeramente el organigrama y programa anterior para que los cambios de estado se realicen
con el paso de 5 dientes en vez de con uno.
Figura 5
Realizar el organigrama y un programa en ensamblador MPASM que inicialmente configure como entrada al
TIMER los impulsos recibidos por la patita RA4 sin ningún tipo de preescalado, y que posteriormente se
mantenga en un bucle infinito copiando el contenido de TMR0 en PORB. ¿Qué se observa? ¿Por qué?
PRUEBA, TIMER contando impulsos con prescaler
En la prueba anterior es necesario girar el mando muy despacio para poder percibir el movimiento de las luces en
los leds. Modificar el organigrama y programa anterior, asignando a TMR0 el prescaler con una división de
frecuencia de 16:1. ¿Qué se observa? ¿Por qué?
PRUEBA, temporizando 0’25 segundos sin TIMER
Se dispone del circuito mostrado en la Figura 6.
PIC16F84A
5
Vdd RB0
Vss
10K
MCLR
reset 100
33pF
OSC1
4Mhz
33pF
OSC2
500
Figura 6
Realizar el organigrama y un programa en ensamblador MPASM que haga encenderse y apagarse el led cada
0’25 segundos (se permite un error del 1%). La temporización se hará mediante la llamada a una subrutina que
contendrá bucles anidados, es decir, no se realizará con ayuda del TIMER.
Figura 7
Realizar el organigrama y un programa en ensamblador MPASM que realice un encendido de estos leds con la
animación del coche fantástico, realizando la siguiente secuencia:
00000001
00000011
00000111
00001110
00011100
00111000
01110000
11000000
10000000
11000000
01110000
00111000
00011100
00001110
00000111
00000011
vuelta al primer estado
El retardo en la secuencia de luces del programa anterior (0’25segundos). Comprobar que la luz tarda en
desplazarse de un extremo a otro dos segundos (para ello, los extremos deben encenderse dos veces, es decir, se
deben completar cada ciclo en dieciseis fases de 0’25 segundos). Se repetirá el ciclo 20 veces y se comprobará
con un cronómetro si el tiempo que ha tardado es de 80 segundos, o si ha habido algún desfase.
PRUEBA, coche fantástico sin TIMER
Realizar la prueba anterior, pero ahora ayudándonos en la temporización por el registro TIMER.
Figura 8
Figura 9
Realizar el organigrama y un programa en ensamblador MPASM que presente un 123 en los displays. Para
conseguirlo se entra en un bucle en el que:
1. Se saca 1 en el dígito más significativo.
2. Retardo de 1ms.
3. Se saca 2 en el dígito central.
4. Retardo de 1ms.
5. Se saca 3 en el dígito menos significativo.
6. Retardo de 1 ms.
7. Vuelta al paso 1.
Figura 12
5 PIC16F84A Motor
Vdd RA0 DC 12
Vss RA1
RA2 12
10K 10K I0
MCLR RB0 10K I1
reset 100 RB1 10K I2
RB2 10K I3
RB3
33pF
OSC1
4Mhz 10K I4
OSC2 RB4 10K I5
33pF RB5 10K I6
RB6
RB7
10K I7
Figura 13
Motor PaP
de 48 pasos
012 3
L293B 5
5 PIC16F84A
Vdd
RB2
Vss RB4
RB0
RB1
10K 5
RB3
MCLR
reset 100
10K I0
33pF RA0 10K I1
4Mhz
OSC1 RA1 10K I2
33pF
OSC2 RA2 10K I3
RA3
Figura 14
5 5 36 144 256 48 12
34 14
0123
detector de corte
sección de la H21A1 32 16 Motor
PaP
rueda dentada 30 18 48
28 96
20 pasos
270 10K 26 24 22
5 PIC16F84A
Vdd
Vss RA4
L293B 5
10K
MCLR
reset 100
RB2
RB4
33pF RB0
OSC1
4Mhz RB1
OSC2 12
33pF RB3
Figura 15
Se pide diseñar el organigrama y realizar el programa en ensamblador MPASM, para obtener sobre la escala
numerada las revoluciones por segundo a las que gira el eje. Antes de empezar a ejecutar el programa se deberá
llevar manualmente la aguja a la posición 0. Cuando la aguja se mueva para mostrar un nuevo valor, lo hará a
una velocidad de 1 vuelta por segundo.
eje giratorio
5 5
19
64
2
270 10K
5 PIC16F84A vueltas
Vdd RA4 por segundo
Vss
255
0
10K
MCLR MOTOR
reset 100
Futaba Futaba S3003 actuando
como servo de
33pF S3003
OSC1 posición
4Mhz
33pF
OSC2
RA0
Figura 16
Para poder ir cumpliendo estos objetivos semana a semana, el alumno debe realizar en casa los programas,
simularlos con MPLAB SIM, y utilizar las horas de laboratorio para probar las pruebas y depurar los errores. Si
el alumno sólo dedica las horas de laboratorio, no tendrá tiempo suficiente para realizar todas las pruebas.
Se debe dibujar el organigrama cada una de las pruebas antes de comenzar a editar el código. Los
alumnos muchas veces no dan importancia a realizar el organigrama, pero el profesor insiste en que es
de vital importancia que se realice siempre el organigrama antes de realizar el código en ensamblador,
dadas las características de este tipo de lenguaje. Además, en el examen se tendrá que presentar el
organigrama.
El profesor insiste en que los alumnos deben superar las dificultades que surjan en las prácticas ellos
mismos. Se aconsejan no ver la solución de las pruebas de otros alumnos de este u otros años, para
tener experiencia en resolver dificultades el día de la realización del examen final de la asignatura.
En la medida de lo posible, se recomienda en el laboratorio usar principalmente el PIC16F84A Data
Sheet para realizar la programación. Se pueden usar también los apuntes teóricos de la asignatura, pero
se debe dar prioridad al uso del Data Sheet.