You are on page 1of 82

Microcontrolador PIC

16 F84
PIC

777
ICC1166FF887
PPI

jjtafoya@hotmail.com

MEXICO D.F 2004


i Ing.J.Jesús Tafoya Sánchez
Microcontrolador PIC

INTRODUCCION
En el presente trabajo se desarrolla una serie de prácticas, que tienen como
propósito llevar al alumno desde el nivel 1 hasta el nivel 10, para lograrlo se
proponen prácticas que llevan en si mismas un fundamento o característica del
microcontrolador PIC, por lo que se sugiere se realicen las prácticas de manera
secuencial con el fin de ir cubriendo no sólo las características del PIC si no de ir
formando una base de programación que le permitan al alumno en las
aplicaciones propias desarrollar la mejor estrategia de solución de programación.

Las prácticas por sí mismas están lo suficientemente claras para que cualquiera
las pueda resolver, sin embargo para algunas de ellas se requiere que el instructor
anticipe una explicación de los recursos que necesitarán emplear en cuanto a
instrucciones y en cuanto a fundamento de algún tipo de característica.

El orden secuencial de las prácticas permitirá a aquellos alumnos que ya cuentan


con experiencia puedan por si mismos ir avanzando de acuerdo a su capacidad.

Las primeras prácticas tienen como propósito que se vaya adquiriendo los
principios de las instrucciones de transferencia de datos basados en la
arquitectura del PIC, posteriormente se va incrementando el nivel de dificultad y se
muestran prácticas donde se requiere calcular subrutinas de tiempo que serán
empleadas en las siguientes prácticas, así que las siguientes tendrán como
dificultad manejar instrucciones que permiten que el programa bifurque de acuerdo
a las condiciones de señales de entrada por los puertos, de esta forma en las
practicas que continúan se podrá controlar la velocidad, el sentido de giro y la
posición de los motores a paso de acuerdo a las condiciones de entrada que se
presentan en el puerto A del PIC. Por último para conocer más características de
los PIC se desarrollan prácticas que permiten manejar señales de control de
manera dinámica en los displays de 7 segmentos, así como verificar el uso del
convertidor analógico/digital, las interrupciones, el control de una pantalla de cristal
líquido (LCD), el control de motores de corriente directa y servomotores de radio
control.

Para concluir el trabajo completo se recomienda realizar un proyecto que amerite


la aplicación de los conocimientos sobre el microcontrolador PIC.

ii Ing.J.Jesús Tafoya Sánchez


Microcontrolador PIC

FUNDAMENTACION

La electrónica como tal siempre esta evolucionando día a día, una de sus
tendencias es hacia el manejo de circuitos programables. Los microcontroladores
nacieron con la idea de realizar aplicaciones más compactas y más eficientes, uno
de los primeros microcontroladores desarrollados fue el i8048 de intel,
denominado entonces como procesadores “OneChip”, es decir un chip con lo
necesario para poder ejecutar un programa. Además de intel, hay otros fabricantes
como Motorola, National Semiconductor, Zilog, etc y el fabricante del popular
microcontrolador PIC es Microchip, motivo de esta serie de prácticas que se
presentan.

La necesidad de utilizar microcontroladores en el mercado es con el propósito de


realizar equipos más económicos, compactos y más inteligentes a través de la
programación. Hoy en día podemos ver que los microcontroladores se encuentran
en nuestra vida diaria, por ejemplo en los equipos de audio y video,
electrodomésticos, equipos de entretenimiento y en equipos para el uso industrial.

Los modelos de PIC de Microchip son de una gran diversidad, los hay desde los
pequeños de 8 pines hasta los de 40 pines, o si lo vemos por familia de bits, de
12, 14 y 16 bits en el formato de las instrucciones, cuando se desarrolla una
aplicación se consideran las necesidades de señales de entrada y salida que se
requieren, las capacidad de memoria y si alguna característica adicional se desea
en temporizadores, convertidor ADC etc. La mejor respuesta al PIC a utilizar se
puede buscar en el catalogo del fabricante en internet en la dirección
www.microchip.com.

El costo y la accesibilidad de información para trabajar con este microcontrolador


PIC lo han hecho uno de los microcontroladores más populares en el mundo, el
compilador que se utiliza para el PIC es gratis, la información es abundante, caso
contrario de sus competidores de los otros fabricantes de microcontroladores, los
cuales venden el compilador y la información que hay es limitada.

Por estas razones es que se decidió utilizar este microcontrolador PIC de


microchip, y las prácticas que se desarrollan son con el objetivo de conocer sus
principales características y obtener una base de programación para resolver los
problemas de control automatizado.

iii Ing.J.Jesús Tafoya Sánchez


Microcontrolador PIC

OBJETIVO

Realizar una serie de prácticas que permitan al alumno adquirir los conocimientos
fundamentales del microcontrolador PIC para programarlo y aplicarlo en sistemas
de control automatizado.

iv Ing.J.Jesús Tafoya Sánchez


Arquitectura PIC

ARQUITECTURA DEL PIC

El PIC es un Circuito Integrado que posee CPU, Memoria, Temporizadores y


Periféricos, capaz de ejecutar un serie de instrucciones de manera lógica.

El PIC 16F84 es un modelo de microcontrolador de Microchip de medio rango.

DIP,SOIC
°
RA2 18 RA1
1
RA3 2 17 RA0
RA4/T0CKl 3 16 OSC1/CLKIN
PIC 16CR8X
PIC 16F8X
MCLR 4 15 OSC2/CLKOUT
Vss 5 14 Vdd
RB0/INT 6 13 RB7
RB1 7 12 RB6
RB2 8 11 RB5
RB3 9 10 RB4

Fig 1. Microcontrolador PIC16F84

El microcontrolador PIC 16F84 tiene las siguientes características:

Tipo de Memoria Capacidad


Memoria de Programa EEPROM 1K x 14 Bits
Memoria de Datos RAM 68 Bytes
Memoria de Datos EEPROM 64 Bytes

1 Ing.J.Jesús Tafoya Sánchez


Arquitectura PIC

Cuestionario:

1- Nombre las diferencias entre microprocesador y microcontrolador.

2- ¿Qué característica de la arquitectura Harvard confiere al procesador que la


incorpora más velocidad en la ejecución de instrucciones que al que incorpora
la arquitectura Von Neuman?

3- ¿Cuál es el primer microcontrolador que se considera se comercializó en el


mundo y quién fue su fabricante?

4- Los microcontrolador PIC de Microchip? a qué arquitectura responden: CISC,


RISC o SISC?

5- La mayor parte de los microcontroladores de 8 bits que se venden en el mundo


¿A qué aplicación se destinan?

6- ¿Qué misión tiene el Watchdog o Perro Guardián en un microcontrolador?

7- ¿Qué utilidad tiene el SLEEP o estado de bajo consumo?

8- Indicar las ventajas de la memoria EEPROM.

9- ¿Qué utilidad tiene la inclusión en los microcontroladores de una memoria de


programa OTP?

10-En un microcontrolador: la memoria de datos (RAM) es mucho más grande que


la memoria de programa (ROM). ¿O es al revés?

11-Que entiende por arquitectura abierta y por arquitectura cerrada.

12-¿Cuáles son los recursos comunes a todos los microcontroladores?

13-¿Qué entiende por recursos especiales? Nombre alguno de ellos.

14- ¿Qué diferencias hay entre memoria RAM y EEPROM?

2 Ing.J.Jesús Tafoya Sánchez


MPLAB

OPERACION DE MPLAB

Operación MPLAB NOTAS:


1
(2)
_________________________________
Options Development Mode
_________________________________

_________________________________

_________________________________

MPLAB Simulador _________________________________

_________________________________

Operación MPLAB(3) _________________________________

File > New _________________________________


Captura Código Fuente
_________________________________
File > Save As
Ejemplo. LED.asm
_________________________________

Project > New Project


_________________________________

_________________________________

_________________________________

_________________________________
Operación MPLAB(3) _________________________________
File > New
_________________________________
Captura Código Fuente

File > Save As


_________________________________
Ejemplo. LED.asm

_________________________________
Project > New Project _________________________________

_________________________________

_________________________________

3 Ing.J.Jesús Tafoya Sánchez


MPLAB

Operación MPLAB (4) _________________________________

_________________________________

_________________________________

1
_________________________________
2

_________________________________

_________________________________

_________________________________

_________________________________

_________________________________
Operación MPLAB (5)
_________________________________

_________________________________

_________________________________

_________________________________

_________________________________

_________________________________

_________________________________

_________________________________

_________________________________
Operación MPLAB (6)
_________________________________
Project > Build All

Si no hay errores, generó un


archivo con el mismo nombre
_________________________________
que empezó, pero con extensión
.HEX
_________________________________

_________________________________

_________________________________

4 Ing.J.Jesús Tafoya Sánchez


MPLAB

Operación MPLAB (7)

_________________________________

_________________________________

_________________________________

_________________________________

_________________________________

_________________________________

_________________________________

_________________________________
Simulación MPLAB
Debug - Simulator Stimulus  Asynchronous Stimulus
(8) _________________________________
Simulación del Programa

_________________________________

Clik al boton derecho


del mouse
_________________________________

Asignamos
Mediante el Boton
_________________________________
el Bit de
entrada del derecho del Mouse
sobre cada Estimulo
puerto
(Stim
deseado y
el tipo de
_________________________________
Estimulo
(Toggle) Seleccionamos Assign Pin
_________________________________

_________________________________

_________________________________
Simulación MPLAB (9)
_________________________________
Debug  Run - Animate

_________________________________

_________________________________

_________________________________

_________________________________

_________________________________

_________________________________

5 Ing.J.Jesús Tafoya Sánchez


MPLAB

Cuestionario

1. ¿Cuál de las siguientes son etiquetas válidas?

 COMIENZO
 50SEG
 NEXT8
 1230
 0xFF
 arriba
 INCF
 _INCF

2. ¿Cuáles de los siguientes números hexadecimales están correctamente


escritos, para que lo entienda el compilador MPLAB?

 35F
 0FFH
 BDEH
 0h22
 0x9D

3. ¿Cuál de los siguientes números binarios está correctamente escrito, para que
lo entienda el compilador MPLAB?

 100011B
 10100100
 B‟01110010‟
 0x101100

4. Verdadero o falso:

a) El lenguaje assembler resuelve todos los problemas de programación, por


tener instrucciones de alto nivel y extremadamente complejas.

b) Todos los microprocesadores de diferentes fabricantes poseen un set de


instrucciones compatible entre ellos.

c) El campo de etiqueta o comentario en un programa en assembler es


obligatorio en cada línea de instrucción.

5. ¿Cuál de las siguientes etiquetas NO está correctamente escrita?

 DATO3x3
 GOTO1
 0xFF
6 Ing.J.Jesús Tafoya Sánchez
MPLAB

 ARRIBA

6. ¿Para que se utiliza la directiva EQU ?

 Permite especificar la posición de memoria donde programas, subrutinas


o datos residirán, luego de compilado el programa.
 Le permite al programador ingresar datos fijos en la memoria de
programa como parte permanente del mismo.
 Es una pseudo-operación que permite al programador igualar nombres a
datos o direcciones.
 Indica la finalización del código fuente.

7. ¿Para que se utiliza la directiva INCLUDE ?

 Permite asignar un nombre a un programa para realizar una MACRO.


 Permite incluir código fuente desde otro archivo.
 Indica el comienzo del programa.
 Se utiliza para el ensamblado condicional.

7 Ing.J.Jesús Tafoya Sánchez


Sistema de Evaluación de PICs

SISTEMA DE EVALUACION DE MICROCONTROLADORES PIC

Para comenzar a trabajar con cualquier microcontrolador se requieren tres


elementos:

a) Software de edición, compilación y simulación.


b) Un programador o quemador de PICs.
c) Un sistema de evalaución donde se puedan verificar los programas que
se realizan.

Para desarrollar lo más rápido posible en algún tipo de microcontrolador se


requieren esos tres elementos, más aun cuando se es principiante.

Para la edición, compilación y simulación se utilizará el software del fabricante,


que en este caso es de distribución gratuito denominado MPLAB.

El quemador de PICs que se usará es uno compatible con el software EPICWIN


de microEngineering Labs. Este software utiliza el puerto paralelo para realizar la
programación del PIC.

El Sistema de evaluación de microcontroladores evalúa los PICs más populares,


PIC16F84 y 16F877, también es posible evaluar los PICs compatibles en PIN, tal
como los 16F628, 16F874,18F452 etc.

El sistema se compone de dos partes:

 El programador de PICs
 El sistema de evaluación de PICs

El Programador puede utilizar el EPICWIN como software para descargar los


programas a los PICs, además de poder programar estos modelos mencionados,
puede programar aproximadamente unos 90 modelos de PIC, siendo desde luego
los más populares los ya mencionados.

El Sistema de Evaluación se puede conectar con el programador para realizar


la programación en línea, lo cual facilita la rapidez de prueba de programas sin
tener que cambiar el microcontrolador del Programador hacia el Sistema de
evaluación.

Los componentes y características generales del Sistema de Evaluación son las


siguientes:

 Pantalla de Cristal Líquido de 20 caracteres por 2 líneas (LCD).


 2 Displays de Siete Segmentos

8 Ing.J.Jesús Tafoya Sánchez


Sistema de Evaluación de PICs

 Dos líneas de LEDs de 8 bits (Dos Puertos)


 8 micro-interruptores para datos de entrada (Un puerto).
 Micro-Interruptor de RESET
 Micro-Interruptor para interrupción externa (RB0/INT)
 Sensor de Temperatura LM35DZ (Entrada Analógica)
 Fotorresistencia (Entrada Analógica)
 Fototransistor Infrarrojo (Para señales de control remoto).
 Buzer Piezoeléctrico.
 Programación en línea de los PICs 16F84, 16F877.
 Conector de expansión del Puerto B para manejar aplicaciones externas.

Fig. Quemador y Sistema de Evaluación

9 Ing.J.Jesús Tafoya Sánchez


Sistema de Evaluación de PICs

Ing.J.Jesús Tafoya Sánchez


SISTEMA DE ENTRENAMIENTO PARA MICROCONTROLADORES PIC
Puerto Paralelo
(Impresora)
I
O
Computadora Personal 12VCA
3Amp.
120 V.C.A

R8
120TRN

FF
RAS1210
Sistema de Evaluación Para PICs 120VCA 12TRN

/O

R7
ON
SUN

R6
se

Y2
PUENTE

Fu
HOLD

R5
T RAS1210

LA
3)
1 1 T

Q8
RC7 A I TI

(RB
RE
4 3

Q2
RC5 I
P P

10
RC3 * * * * ED UT R ON I CA * * * * * P SUN

Y1
1 1

Q4
RC1 LM 1 HOLD

Q6

2)
LA
RE1 J . T A F O YA S .
T 22
J . 25 2
T

R D (RB
RE2

RE
2 1 76 TI 5
VCC K I 5 I 0

C
P

3 SELE
Q1

)
P

C
P

MO RB1
R A TO
Q7
1

Q5
1 1

SO
MO
PB0

C.
J5 Q1 Q2 2

TO
0
INFR L + 2 2

(RB
PA
5

R4 R1
M 5 0
+
MODULO MOTOR
+ A PASOS

S
BUZZER BC547

MHZ
5

4.00
39 BC557

CC. E

R2
0
RA2/SAN2
0

SEL
.D
3 BUZZER

CC LE

TX
T

T
DIS7SEGH
LM

A
DIS7SEGl

R3
235

yC
CON1 TI

MO
0 +

(-)
4 YS A
SE
I 0

.MO
V
PAS
I

.
OR
DB9F CON1
RA1/SAN1

D REL
+

2 E
RA0/SAN0
P

(+)
aso
RA3/SAN3
O

X
- P
48

XT
48

T
PIC16F877 1
BC557

aP
1

V1
Q
Q1

F.E
5 5
2

1
T

sos MS
0 0 TR TR 2

2
res
TI

MO CC.
HECHO EN MEXICO

A A
6 5

_D TOR
2 2
42 42 I 6

M
D
J2 J3 0
P

to

GN

X a 7 CO
L
LDR
P

Mo

SE
5 1

C
PIC16F8 GND GND

R
UL
1

Q
0
0
ZIF DE 40
TERMINALES EN BASE
JP1 SOLO CON Uc DE 18

Pa
de
RA5/SAN4

1
T 2

B
N2
4

D
03 0

1
03
RESET2 CCW CW

1
2

Mo RB6 R
CCW TI

N2
CW

3
INT/RB0

ulo
I 5
0

UL
JP P

LEDS_PB

d
GND VCC P

tor

1 RB1
1
BC557

RB0

B5
1

Q
RB3
RB2
36 12 36
Q2

1
18 EN 40 RB0 RB4 RB5
T 2 12

1
0

4R
D
RB6 RB7
TI 2

0
J1 J4
16F8XX
I 5

2
EDUTRONICA
0

A
JPORTB

RB
P
P

NIC
JJTSA INTE
1

R
JPOWER
1
PROG_LINEA

_JJ TRO
2

N
9

1
ON 2

ME HO E
VCC 74HC540 COM 7 6 5COM 3 2

®
eee TS
16F84
CON3

U
0

O
30

ED
54

J9
30

J1
10

XIC
GND
18

J
18

C
M
G

HE
M
O
2

T2
N

O
T1
D
V
C 24 PORTB 24
JP1 SWD
C SPR RD7 RD6 RD5 RD4/RA4 RD3/RA3 RD2/RA2 RD1/RA1 RD0/RA0
BITS 7 - 4 BITS 3 - 0
EDUTRONICA
eee
Programador de PICs Módulo de Motores a Paso
Sistema de Evaluación de PICs
(Quemador)
EPICWIN

GRABADO DEL PIC

Siguiendo de manera secuencial el proceso de trabajo con el PIC, ahora


continuamos con el grabado, para lo cual se podrá utilizar cualquier software, esto
dependerá del programador que se use. Así que utilice el programador de su
preferencia y finalice el experimento verificando el funcionamiento del programa en
el PIC de manera real.

Para observar su funcionamiento en la Tarjeta de Evaluación de


Microcontroladores PIC, es necesario que se utilice el programa EPICWIN para
bajar el programa al chip. Para realizar el proceso de grabado se siguen los
siguientes pasos:

1.Ejecute el programa EPICWIN.

2. Abra el programa a grabar en el chip (File – Open).

11 Ing.J.Jesús Tafoya Sánchez


EPICWIN

3. Del menú general, en la opción de “View” optamos por “Configuration”, para


poder configurar los bits de trabajo del PIC.

4. De la nueva ventana que aparece de “Configuration”, establecemos los bits de


trabajo del PIC: tipo de Oscilador en este caso y en su mayoría XT, Codigo de
Protección Off, Watchdog Timer deshabilitado, Low Voltaje Program
deshabilitado(PIC16F877), en el pic 16F84 Low Voltaje Program no aparece
como opción.

12 Ing.J.Jesús Tafoya Sánchez


EPICWIN

5. Una vez establecidos los bits de configuración del PIC, se procede primero a
borrar el contenido que tenga el PIC y finalmente se programa con el nuevo
programa.
2. Icono Para 1. Icono Para Borrar
Programar

Posición del Interruptor en el sistema de


Evaluación de PICs

SDA SPR SDA SPR

Programar y Ejecutar programa


Borrar PICs de PICs

13 Ing.J.Jesús Tafoya Sánchez


Transferencia de datos

PRACTICA: Transferencia de datos


OBJETIVO: Realizar transferencia de datos entre registros de la memoria de
datos RAM para el manejo de las instrucciones MOV (Mover).

CONSIDERACIONES:

Para realizar las siguientes prácticas se debe tener en cuenta el manejo de las
instrucciones de movimiento de datos:

MOVLW k Move Literal Acumulador (W).


00 ≤ k ≤ 0FFH
Cargar al acumulador W con un dato.

MOVWF f Move W File


00 ≤ f ≤ 4FH (Para el PIC 16F84)
Mueve (Copia) el contenido del acumulador a un registro (f).

MOVF f,d Move File destino


Mueve el contenido del registro f al destino
Si d=0 El contenido de f se carga en W.
Si d=1 El contenido de f se carga en si mismo f.

RAM
00h INDF INDF 80h
TMR0 01h TMR0 OPTION 81h
02h PCL PCL 82h
03h STATUS STATUS 83h
04h FSR FSR 84h
PORTA 05h PORTA TRISA 85h
06h PORTB TRISB 86h
07h 87h
PORTB
08h EEDATA EECON1 88h
09h EEADR EECON2 89h
0Ah PCLATH PCLATH 8Ah
0Bh INTCON INTCON 8Bh
0Ch 68 Bytes
Registros de Propósito
General (del Usuario)
4Fh CFh
50h
NO EXISTE
EN EL PIC 16F84

7F FF
BANK0 BANK1

Fig. 2 Memoria de datos RAM en 16F84

14 Ing.J.Jesús Tafoya Sánchez


Transferencia de datos

Práctica 1

Realizar el programa y el circuito que permita encender los bits 0,1,3,5 y 7 del
puerto B del PIC 16F84.

J2 TRA

LEDS PB
GND
J3 TRA

RA2 RA1 J4
GND

RA3 RA0
Vcc RA4/TOCKIOSC1 4 MHZ 22p
/MCLR OSC2 F
Vss Vdd Vcc
RB0/INT RB7
RB1 RB6
PIC 16F84

RB2 RB5
RB3 RB4

15 Ing.J.Jesús Tafoya Sánchez


Transferencia de datos

Práctica 2
Realice un programa que permita guardar el dato 3AH en la dirección de
memoria de datos 0CH y el dato 5BH en la dirección 0DH, después realice
un intercambio de datos entre 0CH y 0DH.

Realice el diagrama de flujo y después haga programa. Observe la secuencia de


pasos en la figura siguiente. 1,2,3….

RAM Datos
00h INDF INDF 80h
01h TMR0 OPTION 81h
02h PCL PCL 82h
03h STATUS STATUS 83h
04h FSR FSR 84h
05h PORTA TRISA 85h
06h PORTB TRISB 86h
07h STATUS 87h
08h EEDATA EECON1 88h
3A W 09h EEADR EECON2 89h
0Ah PCLATH PCLATH 8Ah
1 2
0Bh INTCON 6 INTCON 8Bh 0Bh INTCON INTCON 8Bh
0Ch 3A 0Ch 5B
5B W 0Dh 5B
FIN 0Dh 3A
0Eh 0Eh 3A

3 4 7 5
El resultado finalmente se
logra, quedando
CFh intercambiados los datos
4Fh D0h de las localidades (0CH) y
50h No exixte en el PIC
(0DH), la localidad (0E) se
16F84 queda con el dato 3AH ya
7F FF que esta localidad se
BANK 0 BANK 1 utilizó como auxiliar.

16 Ing.J.Jesús Tafoya Sánchez


Transferencia de datos

Programa: Manejo de Datos y MOVXX Fecha: Programador: J. Jesús Tafoya Sánchez


DIAGRAMA DE FLUJO SINTAXIS LISTADO DEL PROGRAMA

* Definición del Procesador. ETIQUETAS INSTRUCCION OPERANDO COMENTARIOS


LIST P=16F84
* Inclusión de archivo de
#INCLUDE P16F84.INC
definiciones.

ORG ORG XX

Cargar el dato 3AH


en el Acumulador MOVLW k
(W)

Escribir el dato del


acumulador (W) en la MOVWF f
localidad (0CH)

Cargar el dato 5BH


en el Acumulador MOVLW k
(W)

Escribir el dato del


acumulador (W) en MOVWF f
la localidad (0DH)

Leer el dato de la
localidad 0CH y
MOVF f,d
dejarlo en el
acumulador

Escribir el dato leído


en la localidad 0EH, MOVWF f
para salvarlo

Leer el dato de la
localidad 0DH y
MOVF f,d
dejarlo en el
acumulador

Escribir el dato leído


MOVWF f
en la localidad 0CH

Leer el dato de la
localidad 0EH y
MOVF f,d
dejarlo en el
acumulador

Escribir el dato leído


MOVWF f
en la localidad 0DH

FIN END

17 Ing.J.Jesús Tafoya Sánchez


Transferencia de datos

Práctica 3

Continuando del ejercicio número 2, sabiendo que datos existen en las


localidades de memoria 0CH y 0DH, agregue las instrucciones que permitan
sacar el dato de la localidad de memoria 0CH al puerto B y el de la localidad
0Dh en el puerto A.

Observe la secuencia de números en la figura siguiente.


RAM Datos
00h INDF INDF 80h
01h TMR0 OPTION 81h

f = cualquier 02h PCL PCL 82h


dirección de 03h STATUS STATUS 83h Configuración En los registros TRISA y TRISB
memoria RAM 1
04h FSR FSR 84h 2 de Puertos se ponen en uno o cero cada
00 como Entrada bit.
05h 85h
PORTA TRISA y/o Salida. En
MOVWF f W MOVLW k
06h PORTB TRISB 86h MOVWF f este caso al Si es 0, el bit será de SALIDA
12 10 00 poner 0, todos
07h STATUS 87h
4 3 los bits serán Si es 1, el bit será de
08h EEDATA EECON1 88h de salida. ENTRADA
W
09h EEADR EECON2 89h
0Ah PCLATH PCLATH 8Ah 5
6
9 0Bh INTCON INTCON 8Bh 5B
11
0Ch 5B 8Ch
MOVF f,d MOVWF f W MOVLW k
0Dh 3A 8Dh
d = 0 si se desea 0Eh 8Eh 3A
8 7
dejar el dato leído
en el acumulador

d = 1 si se desea CFh
dejar el dato 4Fh D0h
50h No existe en el PIC
leído en el propio
registro f. 16F84
7F FF

BANK 0 BANK 1

18 Ing.J.Jesús Tafoya Sánchez


Transferencia de datos

Programa: Configuración de puertos y MOVXX Fecha: Programador: J. Jesús Tafoya Sánchez


DIAGRAMA DE FLUJO SINTAXIS LISTADO DEL PROGRAMA

* Definición del Procesador. ETIQUETAS INSTRUCCION OPERANDO COMENTARIOS


* Inclusión de archivo de LIST P=16F84
definiciones. #INCLUDE P16F84.INC

ORG ORG XX

BSF f,b
MOVLW k
Configurar los MOVWF f
puertos MOVLW k
MOVWF f
BCF f,b

Cargar el dato 3AH


en el Acumulador MOVLW k
(W)

Escribir el dato del


acumulador (W) en la MOVWF f
localidad (0CH)

Cargar el dato 5BH


en el Acumulador MOVLW k
(W)

Escribir el dato del


acumulador (W) en MOVWF f
la localidad (0DH)

Escribir el dato leído


MOVWF f
en la localidad 0DH

Leer el dato de la
localidad (0CH) y
dejarlo en el MOVF f,d
acumulador

Escribir el dato
MOVWF f
leído al Puerto
B

Leer el dato de la
localidad (0DH) y MOVF f,d
dejarlo en el
acumulador

Escribir el dato
MOVWF f
leído al Puerto
A

FIN END

19 Ing.J.Jesús Tafoya Sánchez


Transferencia de datos

Práctica 4

Realizar un programa que permita monitorear el estado del puerto A

(entrada) en el puerto B (salida).

J2 TRA
LEDS PB

GND
J3 TRA

J4
GND

RAM Datos
00h INDF INDF 80h 5 Vcd
01h TMR0 OPTION 81h
02h PCL PCL 82h
03h STATUS STATUS 83h
04h FSR FSR 84h
MOVF f,d 05h 85h 5 X 10 KΩ
W PORTA TRISA
06h PORTB TRISB 86h PIC 16F84
MOVWF f
07h STATUS 87h PORTA B7
0 0 0 RA4 RA3 RA2 RA1 RA0
08h EEDATA EECON1 88h
09h EEADR EECON2 89h
0Ah PCLATH PCLATH 8Ah W B7
W7 W6 W5 W4 W3 W2 W1 W0
0Bh INTCON INTCON 8Bh ACUMULADOR
0Ch 8Ch (Working
0Dh Register)
0Eh PORTB RB7
B7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

CFh 8 X330Ω
4Fh D0h
50h No existe en el PIC
16F84
7F FF

20 Ing.J.Jesús Tafoya Sánchez


Transferencia de datos

Práctica 5

Realizar un programa que permita hacer la operación de suma del puerto A

(entrada) con el dato 05H y el resultado mostrarlo en el puerto B.

Haga que el programa quede en un ciclo infinito de tal forma que permita cambiar
elPORTB
dato del=puerto
PORTA A. + 05H TRA
J2

LEDS PB
GND
J3 TRA

J4
GND
5 Vcd

PIC 16F84
PORTA B7
0 0 0 RA4 RA3 RA2 RA1 RA0

W
+
ACUMULADOR B7
0 0 0 0 0 1 0 1
(Working
Register)

PORTB RB7
B7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

21 Ing.J.Jesús Tafoya Sánchez


Transferencia de datos

Práctica 6

Realizar un programa que permita hacer la función espejo en el puerto B, el


nible menos significativo del puerto será de entrada y el nible mas significativo
será de salida, permitiendo de esta manera monitorear el estado del nible de
entrada en el nible de salida.

J2 TRA

LEDS PB
GND
J3 TRA

5Vcd J4
GND
1 º RA2 RA1 18
2 RA3 RA0 17
3 RA4/TOCKI OSC1 16
PIC 16F84

4 MCLR OSC2 15 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
+5VCD
5 Vss Vdd 14
6 RB0/INT RB7 13
7 RB1 RB6 12
8 RB2 RB5 11
SWAPF f,d
9 RB3 RB4 10

Recordar que el operando f puede ser cualquier


dirección de la memoria RAM y que d puede valer 0
si se desea dejar en el acumulador (W) el resultado de
la operación ó d puede valer 1 en el caso que se
5Vcd desee que el resultado de la operación se deje en el
mismo registro f.

22 Ing.J.Jesús Tafoya Sánchez


Instrucciones Lógicas y Bandera Z

PRACTICA: Instrucciones lógicas y Bandera Z

OBJETIVO

Aplicar las instrucciones lógicas AND, IOR, XOR y la bandera Z del registro
Status en la solución de problemas de control.

CONSIDERACIONES

La solución de problemas de control en algunas ocasiones al manejar las


instrucciones lógicas AND, IOR y XOR facilita la solución y la eficiencia de un
programa.

La sintaxis de las instrucciones es:

ANDLW k And Literal W , k


Realiza operación lógica AND del acumulador W con un dato k.
00 ≤ k ≤ 0FFH

ANDWF f,d Realiza operación lógica AND del acumulador W con f y el resultado
lo deja en W o en f.
Si d=0 El resultado de la operación se queda en el acumulador W.
Si d=1 El resultado de la operación se queda en el registro f.

IORLW k Realiza la operación OR Inclusiva de W con k.

IORWF f,d Realiza operación OR Inclusiva de W con un registro f.

XORLW k Realiza operación XOR Exclusiva de W con k.

XORWF f,d Realiza operación XOR Exclusiva de W con f.

IRP RP1 RP0 TO PD Z DC C


REGISTRO STATUS

BTFSS f,b Prueba(Test) el Bit “b” del registro(F) “f” y escapa(Skip) si vale 1(Set).
BTFSC f,b Preuba el Bit “b” del registro “f” y escapa si vale 0 (Clear).

23 Ing.J.Jesús Tafoya Sánchez


Instrucciones Lógicas y Bandera Z

Práctica 7

Resulrva el problema de una alarma que funciona como sigue:


- Se activa el buzer conectado en RB0 mientras el sensor en RA2 se
activa. (si RA2=Activo RB0=Activo, si RA2=Desactivo RB0=Desactivo)
-
Utilice
- la instrucción de BTFSS f,b ó BTFSC f,b J2 TRA

LEDS PB
GND
J3 TRA

J4
GND

PIC 16F84
Vcc Vcc
º1 RA2 RA1 18
Vcc
2 RA3 RA0 17

3 RA4/TKI OSC1 16
Vcc
4 MCLR OSC2 15

5 Vss Vdd 14

6 RB0/INT RB7 13

Vcc 7 RB1 RB6 12

8 RB2 RB5 11
9 RB3 RB4 10

Práctica 8

Resuelva el problema de la misma alarma, solo que activará el buzer


conectado al bit RB0 cuando cualquiera de los 5 (RA0, RA1, RA2, RA3,RA4)
sensores se active. (Activar=ON=1 Lógico)

Utilice la bandera Z del registro STATUS para resolver este ejercicio y la


instrucción MOVF f,d TRA
J2
LEDS PB

GND
J3 TRA

J4
GND

24 Ing.J.Jesús Tafoya Sánchez


Instrucciones Lógicas y Bandera Z

Práctica 9

Resuelva el problema de la misma alarma utilizando todas las instrucciones


lógicas, solo que activará el buzer conectado al bit RB0 cuando cualquiera de
los 5 (RA0, RA1, RA2, RA3,RA4) sensores se active. (Activar=ON=1 Lógico)

J2 TRA

LEDS PB
GND
J3 TRA

J4
GND

Utilice la bandera Z del registro STATUS.


Las instrucciones son: ANDLW k ANDWF f,d IORLW k IORWF f,d
XORLW k XORWF f,d COMF f,d
Utilice las siguientes funciones.

0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0

AND OR XOR
1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
IN1 IN2 OUT IN1 IN2 OUT IN1 IN2 OUT
0 0 0 0 0 0 0 0 0
0 1 0 0 1 1 0 1 1
1 0 0 1 0 1 1 0 1
1 1 1 1 1 1 1 1 0
0 0 0 0 1 0 1 0 1 1 1 1 1 0 1 0 1 0 0 1 1 0 1 0

0 1 1 0 1 0 1 0

NOT
1 0 0 1 0 1 0 1

25 Ing.J.Jesús Tafoya Sánchez


Instrucciones Lógicas y Bandera Z

Práctica 10

Continuando con la misma alarma, esta vez se activará el buzer conectado al


bit RB0 cuando los dos sensores conectados en RA0 y RA2 se activen
(Activar=ON=1 Lógico). Solo cuando los dos se activen.

Los bits RA1, RA3 y RA4 no deben influir en la activación de la alarma.


J2 TRA

LEDS PB
GND
J3 TRA

J4
GND

26 Ing.J.Jesús Tafoya Sánchez


Subrutinas de Tiempo

PRACTICA: Subrutinas de Tiempo

OBJETIVO

Calcular y realizar subrutinas en ensamblador que permitan controlar el tiempo de


ejecución de los programas de control.

CONSIDERACIONES

En la mayoría de las aplicaciones por no decir en todas, se requiere controlar el


tiempo de ejecución del programa, y esto debido a que la velocidad de
procesamiento del microcontrolador es mucho más rápido que la respuesta de los
actuadores o sensores; por esta razón requerimos generar rutinas de tiempo
donde el microcontrolador simplemente ejecuta instrucciones para consumir
tiempo.

El ciclo de instrucción es igual a 4 veces el ciclo de reloj con el que trabaja el PIC.
Por ejemplo si el oscilador conectado al PIC genera una frecuencia de 4 Mhz,
internamente el PIC trabajará F/4=4/4= 1Mhz - T=1µS ciclo de instrucción.

Todas las instrucciones en general se ejecutan en 1 ciclo de instrucción y sólo las


que o cuando saltan se llevan 2 ciclos. Considerando esto, podemos calcular
cuantos ciclos se requieren ejecutar para consumir cierto tiempo.

Por ejemplo si deseo que el PIC consuma 10mS cuantos ciclos se requieren si
Fosc=4Mhz?.

1 ciclo - 1 µS
x=?  10ms Por lo tanto x= 10 000 ciclos de instrucción son los que debe
ejecutar el PIC para consumir el tiempo de 10ms.

27 Ing.J.Jesús Tafoya Sánchez


Subrutinas de Tiempo

De la siguiente subrutina de programa podemos obtener una ecuación que permita


calcular de manera simple los datos requeridos para calcular el tiempo.

DELAY MOVLW x1 ;1 ciclo


MOVWF CONTA1 ;1 ciclo
LOOP1 MOVLW x2 ;1 ciclo
MOVWF CONTA2 ;1 ciclo
LOOP DECFSZ CONTA2,F ;1 ciclo, cuando CONTA2=0 2ciclos
GOTO LOOP ;2 ciclos
DECFSZ CONTA1,F ;1 ciclo, cuando CONTA2=0 2ciclos
GOTO LOOP1 ;2 ciclos
RETURN ;2 ciclos

Tciclos = { 1+ 1+ { 1+ 1 +(1 +2)CONTA2 – 1+ 1+ 2 }CONTA1 -1 +2 }

Simplificando y despreciando algunos ciclos de la ecuación anterior podemos


utilizar la ecuación que sigue.

Tciclos= 3 CONTA2*CONTA1
De la subrutina anterior el valor de x1 y x2 dependerá del valor que se desea en
los registros de CONTA1 y CONTA2. Para poder usar la ecuación anterior se
sugiere que se de a x2 el valor de 0FFH es decir el valor de CONTA2, y se
despeje a CONTA1.

Por ejemplo si se desea que esta subrutina consuma un tiempo de 10ms se


requieren entonces 10000 ciclos, por lo tanto si CONTA2=255 entonces cuanto
debe ser CONTA1?.

CONTA1= T/(3*CONTA2) = 10000 /(3*255) =13.07 ≈13

Por lo tanto en x1=13 la notación para no cambiar a hexadecimal se antecede con


un punto el número para que entienda el compilador que esta en sistema decimal.
.
Es decir x1= 13 y x2=0FFH Con estos datos obtenemos una subrutina de 10ms.

28 Ing.J.Jesús Tafoya Sánchez


Subrutinas de Tiempo

Práctica 11

Realizar un programa que permita obtener un señal cuadrada simétrica de


50 HZ en el bit 5 del puerto B.

Las instrucciones de atención son: DECFSZ f,d y CALL k


Calcule la subrutina de tiempo que permita realizar el retardo necesario.

1 º RA2 RA1 18
T=0.02S =20mS
2 RA3 RA0 17 (2) 22µf
3 RA4/TOCKI OSC1 16
V
PIC 16F84

4 MCLR OSC2 15
+5VCD
5 Vss Vdd 14
6 RB0/INT RB7 13
t
7 RB1 RB6 12
10 mS 10 mS
8 RB2 RB5 11
9 RB3 RB4 10 Time
f =50 Hz
x y

ORG DELAY

CONFIGURAR
PUERTOS E/S CARGAR CONT1
CON 0DH

INICIALIZAR
PUERTOS
CARGAR CONT2
CON FFH

ENCENDER BIT 5 NO
NO
DEL PUERTO B

DECREMENTAR
DELAY CONT2
ES CERO?

APAGAR BIT 5 SI
DEL PUERTO B

DECREMENTAR
DELAY CONT1
ES CERO?

SI

RETURN

29 Ing.J.Jesús Tafoya Sánchez


Subrutinas de Tiempo

Práctica 12
Realizar un programa que controle el semáforo vehicular, de acuerdo al siguiente
patrón en el crucero vehicular.

Tiempo 5 Seg 1 Seg. 5 Seg. 1 Seg. 5 Seg 1 Seg.


Lámpara sur/norte Verde Amarillo Rojo Verde Amarillo
Lámpara este/oeste Rojo Verde Amarillo Rojo

PORTB
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

R
R A V A
E/O V
ROJO AMARILLO VERDE ROJO AMARILLO VERDE

SEMAFORO NORTE/SUR SEMAFORO ESTE/OESTE

N/S

ORG

CONFIGURAR
PUERTOS

INICIALIZAR
PUERTOS

B´00100100´ ; Verde N/S y Rojo E/O

5 SEG.

B´01000100´ ; Amarillo N/S y Rojo E/O

1 SEG.

B´10000001´ ; Rojo N/S y Verde E/O

5 SEG.

B´10000010´ ; Rojo N/S y Amarillo E/O

1 SEG.

30 Ing.J.Jesús Tafoya Sánchez


Subrutinas de Tiempo

Práctica 13

Haga un programa para controlar el crucero de un peatón en una calle. Haga que
la señal del peatón este constantemente en rojo y la señal para los vehículos este
constantemente en verde.

Cuando presionen el “push boton”, la señal del vehículo cambia a amarillo, y


después de 1 segundo, la señal del vehículo cambia a rojo, y la señal del peatón
cambia a verde en el mismo tiempo.

Después de 5 segundos la señal del peatón que ha estado en verde cambia a rojo,
y después de 1 segundo, la señal de los vehículos regresa a la condición previa de
presionar el “push boton”, y espera nuevamente para ser presionado.

Tiempo 1 Seg. 5 Seg. 1 Seg.


Señal del vehículo Verde Amarilla Roja Verde
Seañal del peatón Rojo Verde Rojo

J2 TRA
ROJO
SEMAFORO PEATONAL

LEDS PB
VERDE GND
J3 TRA

J4
GND

ROJO
AMARILLO
VERDE

SEMAFORO VEHICULAR

BOTON DE PASO

Distribuir las lámparas en los bits del puerto B y el boton de paso en el puerto A.

PORTB PORTA
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 RA4 RA3 RA2 RA1 RA0

ROJO VERDE ROJO AMARILLO VERDE


BOTON
DE
SEMAFORO DE PASO
SEMAFORO VEHICULAR
PEATON

31 Ing.J.Jesús Tafoya Sánchez


Rotación de Datos

PRACTICA: Rotación de Datos

OBJETIVO

Utilizar instrucciones de rotación de bits enfocadas al control de datos de 8 bits


para el control de motores a paso.

CONSIDERACIONES

El manejo instrucciones de rotación en las aplicaciones muchas veces representa


dar una solución más simple, por ejemplo esta rotación se utiliza directamente en
el control de motores a paso, en la transmisión serial de datos o simplemente una
rotación de bits a la izquierda significa multiplicar por 2 ese dato rotado o si se rota
a la derecha significa dividir el dato por 2; por esta razón realizaremos una serie
de prácticas donde se pueda tener el control de la rotación de bits.

Las instrucciones de rotación que posee el PIC son:

RLF f,d Rotate Left File f,d


Rotar a la izquierda el registro “f” y dejar el resultado de la operación
según el valor de “d” (0 en W ó 1 en f) como se ha mencionado
antes.

RRF f,d Rotate Right File f,d


Rotar a la derecha el registro “f” y dejar el resultado de la operación
según el valor de “d” (0 en W ó 1 en f) como se ha mencionado
antes.

32 Ing.J.Jesús Tafoya Sánchez


Rotación de Datos

Práctica 14

Realice un programa que permita rotar el dato 01H en el puerto B de manera


infinita. Controle la rotación para que el bit se rote de la posición de Bit 0 al Bit
7.
La instrucción de rotación es a través del “carry” (C ), por lo que hay que
considerarlo al momento de programar. RLF f,d
J2 TRA

LEDS PB
GND
J3 TRA

J4
GND

STATUS (03h, 83h) PORTB (06h)


IRP RP1 RP0 TO PD Z DC C RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

Lo que se desea en esta práctica es que no se pierda ningún tiempo dentro del
carry, cuando el “1” llegue al bit 7 después continué en el bit 0 y así
sucesivamente.

STATUS PORTB

0 0 0 0 0 0 0 0 1
C

33 Ing.J.Jesús Tafoya Sánchez


Rotación de Datos

Práctica 15
Realice un programa que permita rotar el dato 01H en el puerto B a la
izquierda y cuando llegue al bit 7 se realice la rotación a la derecha, de la
posición de bit 7 a la posición bit 0. Repita el proceso de rotación izquierda –
derecha en forma cíclica.

TRA
PORTB (06h) J2

LEDS PB
GND
J3 TRA
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 J4
GND

0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0

1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0

0 0 0 0 0 0 0 1

34 Ing.J.Jesús Tafoya Sánchez


Rotación de Datos

Práctica 16

Realice un programa que permita llenar el puerto B de bits, es decir que


ponga unos de manera secuencial desde el bit 0 hasta el bit 7, y después
realice el vaciado o apagado de LEDs desde el bit 7 hasta el bit 0, haga que
se repita esto de manera cíclica.

J2 TRA
PORTB (06h)

LEDS PB
GND
J3 TRA
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
J4
GND
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 1

1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1

0 0 0 0 0 0 0 0

35 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

PRACTICA: Motores a Paso

OBJETIVO

Aplicar las técnicas de rotación de datos al control de motores a paso para su uso
en los robots móviles.

CONSIDERACIONES

El control de motores en la práctica resulta inevitable, a nuestro alrededor existen


innumerables equipos que trabajan por medio de la acción de los motores de C.D.,
C.A., Motores a Paso o Servomotores R/C.

El control de los motores a paso resulta bastante fácil a través del uso de
microcontroladores, ya que el microcontrolador puede dar fácilmente las
secuencias de alimentación en las bobinas del motor a través de un acoplamiento
de potencia. La secuencia depende del tipo de motor a pasos, los hay del tipo
Unipolar y del tipo Bipolar, el más simple de controlar es el Unipolar. En la figura
siguiente se muestra el símbolo del motor a pasos.

Común

B B

El modo de alimentar las bobinas del motor pueden ser de tres formas: excitación
a 1 fase, excitación a 2 fases y excitación a 1-2 fases. A continuación se muestran
las tablas de los modos de excitación.

36 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

Excitación a 1 Fase Excitación a 2 Fases Excitación a 1-2 Fases


CK CK CK
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
O O O
A A A
B B B
A A A
B B B

Una forma muy simple pero muy efectiva de conectar un motor con un
microcontrolador es como se muestra a continuación. Observe que los diodos se
utilizan como dispositivos de protección para drenar y diluir la fuerza
contraelectromotriz que se genera en las bobinas del motor cuando estas son
desenergizadas y así evitar que se dañen los transistores.

+Vmotor

1N4001 1N4001 1N4001 1N4001


RB0
P RB1
I A B A B
C RB2 2K2 Ω 2K2 Ω 2K2 Ω 2K2 Ω
RB3
1 TIP120 TIP120 TIP120 TIP120
6 RB4
F
RB5
8
4 RB6

RB7

Para los ejercicios de control de motores a pasos se dispone de un modulo, el


cual tiene dos motores que pueden ser controlados de manera directa, es decir
alimentado las bobinas directamente por medio de un transistor desde el
microcontrolador. A continuación se ejemplifica la conexión de los motores con los
bits del puerto B del PIC.

RB0

P RB1
I BITS RB0 - RB3 RB0 - RB3 MOTOR
C RB2

RB3
DRIVER DE
1 POTENCIA
6 RB4
F BITS RB4 - RB7 RB4 - RB7 MOTOR
RB5
8
4 RB6

RB7

37 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

12VCA
3Amp.

Y2
I

LA
3)
O

RE
B
(R
Y1
1210
RAS
A )
EL 2
R RB
8 (

C
R

D
AY
FF REL 1)

R
7

TO
R
1210
/O B
6 R
RAS
N

O
O R 0

M
5 4 B
(R
RN
R Q
TIP
A 12T
TI
C P5

TX
120V AY

Q6
12
N T REL

O
RN PUE
TIP
TI
120T
8

M
P5
12
Q

T.
(-)
E

EX
2

)
(+
Q

F.
Fu

S A
3 SO OR C.

OS
TIP
Q PA OT EC
TI
s

Q5

S
P5
e

PAS 48
12 M EL

M
XT
6 7
LM257 TIP
TI
S

M
Q s

VE
P5

LE YS
1

CO
12 so
RA

.
CC
Q

SE ELA
Pa

7
2

OTO
12

RB
Q V1 a
X
4

6
or 42
D

RB
R 4
1 D ot
O
C.

R
L

5
M
6

RB
2

DU
R TIP
y

3 TI 11

MO

4
R P5
12
3
so

RB
Q
CCW
+
D
Pa

12 TIP
TI

O
+ R P5 10 48 CW

IC
12
+ 36
CC A
a

SE OT OS

EX
LE OR

Q
.

2
M AS
es

D
+

M
42
P

11

EN
TIP
or

R TI

JT
P5
12 12

ee ECHO
6
ot

_J

®
9
Q

UL
M

A
10 1

IC

e
D

N2
CCW

H
R

N
de

00
D _D TIP

O
TI

3
N R

TR
G TO C. P5
12

J1 T1
o

O CW 30

U
M ELC

S
36
ul

ED
MO
321
S 9

0
ód

COM
R
18
M

12 Q
Puerto B 4 Q 11 24
765 T2
10
-0
COM O
S 3
BIT
M 9
2V
J
30
J1
18 TB
24 POR
-4
S 7
BIT

eee

Fig. Módulo de Motores a Paso

En la figura anterior y siguiente se observa que el módulo tiene dos motores a


paso de 7.5º /P a 12VCD, estos se encuentran controlados mediante el uso del
puerto B del microcontrolador PIC; el conector que se observa del puerto B en el
módulo, se conecta directamente hacia el módulo del Sistema de Evaluación.

Fig. Módulo de Motores a Paso

38 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

CONEXIÓN DEL MODULO Y SISTEMA DE EVALUACION

SISTEMA DE EVALUACION DE PICs

BUZZER

PB0

* * * *
DIS7SEGH

J2

J5
GND
RD1/RA1 RD0/RA0

BC547
TRA

Q1

*
J3
GND
RB6
RB4
RB2
RB0

Q2
GND

BC557
TRA
JPORTB

A
K
DIS7SEGl
VCC
RB7
RB5
RB3
RB1

Lado del Cable Rojo


del Cable Plano

MODULO J3
DE MOTORES A PASO Y C.D.
PORTB 1 S1
HMOTOR
2
SELECC. SELEEC.
MOTOR_DC MOTOR
A PASOS

MODULO DE MOTORES A PASO

39 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

CARGAS EXTERNAS ADICIONALES POSIBLES

S1 (RB0,RB1)
HMOTOR
S2 (RB2,RB3)
SELEEC. RELAYS
SELECC.
MOTOR_DC MOTOR
A PASOS SELECC. SELECC.
RELAYS MOTOR
J4 A PASOS
V12 F.EXT.

J678 J5 J2 J11 J12

RB4 RB5 RB6 RB7 COMNS (+) (-) (RBO RB1) (RB2) (RB3)
MOTX A PASOS F.EXT.MOTX MOTOR DC RELAY1 RELAY2

PITTMAN
MOTOR AC
12VCD
5.9:1

VEXTA
1.8º/P

MOTOR A MOTOR DE CD CARGAS


PASOS RESISTIVAS

Para hacer que funcionen o que se puedan controlar estas cargas adicionales, se
debe colocar en la posición correcta los interruptores para seleccionar si se opera
el motor a pasos del módulo que se controla con el nible de menor peso del puerto
B (RB3,RB2,RB1,RB0) o si se controlan los relevadores (RB3 y RB2) o el motor
de CD (RB0,RB1). El motor a pasos que se observa en la figura anterior esta
conectado al nible de mayor peso del puerto B (RB7,RB6,RB5,RB4), este se
controla directamente, es decir no se multiplexa con ninguna otra carga.

40 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

Práctica 17

Realice un programa que permita controlar la rotación de los motores del


Modulo. Realice un programa de control para cada una de las secuencias
que se muestran en las figuras siguientes.

Motor a Pasos Motor a Pasos


J2 TRA
0 0 0 0
48 48 48 48

LEDS PB
GND
J3 TRA
36 12 36 12 36 12 36 12
J4
GND
24 24 24 24

7-4 3-0 7-4 3-0


PORTB

Motor a Pasos Motor a Pasos


0 0 0 0
48 48 48 48

36 12 36 12 36 12 36 12

24 24 24 24

7-4 3-0 7-4 3-0

Motor a Pasos Motor a Pasos


0 0 0 0
48 48 48 48

36 12 36 12 36 12 36 12

24 24 24 24

7-4 3-0 7-4 3-0

Motor a Pasos Motor a Pasos


0 0 0 0
48 48 48 48

36 12 36 12 36 12 36 12

24 24 24 24

7-4 3-0 7-4 3-0

Nota: De acuerdo al hardware del


modulo:
- Rotar a la derecha (RRF f,d) implica
rotar el motor en CW.
- Rotar a la izquierda (RLF f,d)
implica rotar el motor en CCW.

41 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

Práctica 18

Realice un programa que permita controlar la rotación del motor a pasos (3-0) de 4
fases en sentido CCW. Inicia la rotación cuando se presiona el bit 0 del puerto A y
si se presiona cuando esta rotando este deberá parar, es decir el bit será de
arranque y paro. (PIC16F84)

J2 TRA

LEDS PB
PORTA GND
J3 TRA
0
48
7 6 5 4 3 2 1 0 Bit J4
GND

XX X 0 0 0 0 0 36 12

24
START/STOP
PORTB 3-0

42 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

Práctica 19

Realice un programa que permita controlar el sentido de giro del motor a pasos
(3-0) de 4 fases conectado al puerto B, de acuerdo al estado del puerto A: el bit
0 controla el arranque/paro del motor, el bit 1 controla el sentido CW, el bit 2
controla el sentido CCW. (PIC16F84)

J2 TRA
PORTA

LEDS PB
GND
0 J3 TRA
48
7 6 5 4 3 2 1 0 Bit J4
GND

XX X 0 0 0 0 0 36 12

24
START/STOP
CW PORTB 3-0

CCW

43 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

Práctica 20
Realizar un programa que permita controlar la velocidad del motor a pasos
(PORTB 3-0) que gira en CCW, controlado mediante el puerto A: el bit 0
incrementa la velocidad, el bit 1 decrementa la velocidad.

Nota: Cuando llegue a sus límites, máximo y mínimo de velocidad, no permitir su


desbordamiento.

J2 TRA

LEDS PB
PORTA GND
TRA
J3
0 J4
48 GND

7 6 5 4 3 2 1 0 Bit
XX X 0 0 0 0 0 36 12

24
PORTB (3-0)
Incrementa Veloc.

Decrementa Velocidad

44 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

Práctica 21

Realizar un programa que permita controlar el número de pasos que dará el


motor a pasos (PORTB 3-0) y el sentido de giro mediante el puerto D del
PIC16F877.

TRA
PORTD J2

LEDS PB
GND
J3 TRA

7 6 5 4 3 2 1 0 Bit J4
GND

1 1 1 1 0 1 0 0

El número de pasos (1 a 128)


0…….. Dirección CCW
1…….. Dirección CW

El dato del ejemplo anterior indica dar 116 pasos en dirección CW.

45 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

Práctica 22

Realizar un programa que permita controlar los dos motores a pasos


mediante las señales de entrada del puerto D del PIC16F877.

PORTD J2 TRA

LEDS PB
GND
J3 TRA
7 6 5 4 3 2 1 0 Bit J4
1 0 0 1 1 0 1 0 GND

El número de pasos
0…….. Dirección CCW
1…….. Dirección CW
0…….. Motor (3-0)
1…….. Motor (7-4)

El dato del ejemplo anterior indica rotar el motor (7-4) en CW, 26 pasos

46 Ing.J.Jesús Tafoya Sánchez


Motores a Paso

Práctica 23

Realizar un programa que permita controlar los dos motores a pasos,


mediante las señales de entrada del puerto A del PIC16F84..

J2 TRA

LEDS PB
GND
J3 TRA

J4
GND

PORTA PORTB

0 0
48 48
7 6 5 4 3 2 1 0 Bit
XX X 1 1 0 1 0 36 12 36 12

Dirección Rotación 24 24

0 0 Rota Motor (3-0) CW 7-4 3-0


0 1 Rota Motor (7-4) CCW PORTB
1 0 Rota Motor (3-0) CCW
1 1 Rota Motores (7-4) y (3-0 CW

47 Ing.J.Jesús Tafoya Sánchez


Control Dinámico de Displays

PRACTICA: Control Dinámico de Displays de 7 segmentos.

OBJETIVO

Mediante el uso de la técnica de control dinámico realizar control de dos o más


displays de 7 segmentos.

CONSIDERACIONES

El uso de displays de 7 segmentos es común en aplicaciones donde se requiere


observar información que se desea controlar o monitorear. Existen dos tipos de
display, los de cátodo común y ánodo común. En el sistema de evaluación se
utilizan dos de cátodo común, controlados por el puerto B del PIC (16F84 ó
16F877).

La distribución de pines en el display de 7 segmentos utilizado es como sigue.

g f cc a b Anodo Común

f b
g

e c Cátodo Común
d
dp

e d cc c dp

En el sistema de evaluación se cuenta con dos displays, estos se pueden


configurar por medio de “jumpers“(J2,J3) para que se activen de manera directa a
tierra (0 Volts), o para que se conecte a través de transistor la conexión a tierra, o
simplemente para que no se conecten al sistema y no representen carga al
microcontrolador.
En la figura siguiente se muestra la forma de conexión.

48 Ing.J.Jesús Tafoya Sánchez


Control Dinámico de Displays

RB7

RB0- RB6
CC CC

RB0- RB6 a a
b b
c c
d d
e e
f f
g g

CC CC
J2 TRA J3 TRA

GND GND

Esta configuración de los Jumpers J2 y J3 , no representa carga para el PIC.

Para manejar los dos display como si fueran independientes se configuran los
jumpers J2 y J3 habilitados por transistor y se utilizará la técnica de control
dinámico o de multiplexaje, mediante el bit 7 del puerto B y a través de transistores
se realizará el encendido y apagado de cada display. En la figura anterior se
aprecian dos transistores uno tipo NPN y otro PNP, como se sabe para saturar un
transistor NPN se utiliza voltaje positivo (1 Lógico) y para un tipo PNP se utiliza
cero volts o voltaje negativo (0 Lógico), cuando trabaja un display el otro no lo
hará, ya que ambos transistores dependen del mismo bit (RB7).

49 Ing.J.Jesús Tafoya Sánchez


Control Dinámico de Displays

Práctica 24

Realice un programa que permita controlar un display de 7 segmentos

conectado al puerto B, de tal forma que podamos visualizar en el display un

contador del 0 al 9. Solo utilice un display, habilitándolo directamente a tierra,


Obtenga el código de representación de cada número en binario y hexadecimal.
ponga e l”jumper” J3 como se muestra en el circuito siguiente.
a a a a a a a a a a

f b f b f b f b f b f b f b f b f b f b
g g g g g g g g g g

e c e c e c e c e c e c e c e c e c e c
d d d d d d d d d d

Por ejemplo para obtener el código del número “0” se realiza como sigue:
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
cc g f e d c b a J2 TRA

0 0 1 1 1 1 1 1

LEDS PB
GND
3 F h J3 TRA

J4
GND

RB7

CC
RB0- RB6
CC

RB0- RB6 a a
b b
c c
d d
e e
f f
g g
CC CC
J2 TRA J3 TRA

GND GND

Habilitación del display por J3.

50 Ing.J.Jesús Tafoya Sánchez


Control Dinámico de Displays

Práctica 25

Realice un programa que permita crear un dado electrónico, cuando se


presione el interruptor RA2 se deberá generar un número aleatorio entre 1 y 6,
el cual se deberá observar en un display de 7 segmentos. Active el “Jumper”
J3 para visualizar el dado electrónico.

J2 TRA
a

LEDS PB
GND
f b J3 TRA

J4
GND
g

e c

51 Ing.J.Jesús Tafoya Sánchez


Control Dinámico de Displays

Práctica 26

Realice un programa que permita controlar dos displays de 7 segmentos


conectados al puerto B para realizar un contador de 00 a 99. El control debe
ser multiplexado mediante el bit 7 del puerto B. Habilite los dos displays por
medio de los transistores, ponga los Jumpers J2 y J3 como se muestra en la
figura siguiente.

RB7

CC
RB0- RB6
CC
J2 TRA
RB0- RB6 a a
LEDS PB

b b
GND c c
J3 TRA
d d
e e
J4 f f
GND
g g

CC CC
J2 TRA J3 TRA

GND GND

52 Ing.J.Jesús Tafoya Sánchez


Interrupciones

PRACTICA: Interrupciones

OBJETIVO

Aplicar las interrupciones en el proceso de control de eventos externos y por el


temporizador interno del PIC.

CONSIDERACIONES

En cualquier sistema a base de microcontrolador o microprocesador es común


encontrar la forma de generar interrupciones, existen dos formas de interrupción:
interrupciones mascarables y no mascarables.

Las interrupciones mascarables son aquellas que por software se pueden anular u
omitir, es decir, basta con deshabilitar algún bit de algún registro para que no
ocurran las interrupciones, y de la misma manera se pueden habilitar con el bit
que las controla.

Las interrupciones no mascarables son aquellas que no se pueden omitir, y


cuando suceden, el contador de programa salta al vector de interrupción (en el
PIC no existen este tipo).

En el PIC16F84, las interrupciones son del tipo mascarable y son 4 fuentes


posibles, el vector de interrupción de estas esta en la localidad 4 de la memoria de
programa.

a) Interrupción Externa, cuando se genera en el bit RB0/INT.


b) Interrupción por cambio de Estado en los bits RB4, RB5, RB6, RB7.
c) Interrupción por Desbordamiento de Temporizador del TMR0.
d) Interrupción por Terminación de Escritura en memoria EEPROM de datos.

Para que ocurra una interrupción se debe habilitar el bit GIE primero y después los
bits de habilitación de las cuatro fuentes (INTE, RBIE, TOIE, EEIE) y asegurarse
de que las banderas (INTF, RBIF,TOIF, EEIF) están en cero antes de habilitarlas,
ya que cuando suceda la interrupción la bandera habilitará la interrupción. A
continuación en la figura se ejemplifica esta idea mediante un circuito lógico, el
cual es más fácil de entender.

53 Ing.J.Jesús Tafoya Sánchez


Interrupciones

INTE
INTF
RBIE
RBIF

TOIE
INTERRUPCION
TOIF
GIE
EEIE
EEIF

Registro INTCON

El registro INTCON es un registro de lectura y escritura, el cual contiene varios bits


habilitaciones y banderas para el desbordamiento del registro TMR0, cambios
para el puerto RB e interrupciones externas para el pin RB0/INT.

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x


GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
bit7 bit0
R= bit de lectura, W=bit de escritura, -n=valor en el reset POR

bit 7: GIE: bit para habilitar la interrupción global


1= habilita todas las interrupciones no enmascaradas
0= deshabilita todas las interrupciones

bit 6: EEIE: bit para habilitar la interrupción por terminación de escritura en


EEPROM de datos.
1= habilita todas la interrupción por escritura completa en EEPROM
0= deshabilita la interrupción

bit 5: T0IE: bit para habilitar interrupciones de desbordamiento del TMR0


1= habilita interrupciones en el TMR0
0= deshabilita interrupciones en el TMR0

bit 4: INTE: bit para habilitar interrupciones externas en RB0/INT


1= habilita interrupciones externas en el RB0/INT
0= deshabilita interrupciones externas en el RB0/INT

bit 3: RBIE: bit para habilitar interrupciones de cambio en Port RB


1= habilita interrupciones de cambio en el Port RB
0= deshabilita interrupciones de cambio en el Port RB

54 Ing.J.Jesús Tafoya Sánchez


Interrupciones

bit 2: T0IF: bit bandera de interrupción para el desbordamiento de TMR0


1= cuando el registro TMR0 tiene un desbordamiento (debe limpiarse por
software)
0= cuando el registro TMR0 no tiene un desbordamiento
bit 1: INTF: bit bandera de interrupción externa para el RB0/INT
1= cuando ocurre una interrupción externa en RB0/INT (debe limpiarse por
software)
0= cuando no ocurre un interrupción externa en RB0/INT
bit 0: RBIF: bit bandera de interrupción para cambios en el Port RB
1= cuando cambia de estado alguno de los pins RB7:RB4 (debe ser
limpiado por software)
0= cuando ninguno de los pins RB7:RB4 ha cambiado de estado

Nota: Los bits de bandera de interrupción se ponen en uno cuando ocurre una condición de interrupción a
pesar del estado de su correspondiente bit habilitador o del bit habilitador global GIE(INTCON<7>). El
software del usuario deberá asegurar que los bits bandera de interrupción son limpiados antes de habilitar una interrupción.

En el Sistema de Evaluación para PICs se puede generar fácilmente la


interrupción externa en el bit RB0/INT mediante la habilitación del “Jumper” que se
encuentra con las etiquetas “PB0 e INTE”. En la figura siguiente se muestra la
forma de activar el “Jumper”.

Vcc 1 18 1 18
º RA2 RA1 º RA2 RA1
2 17 2 17
RA3 RA0 RA3 RA0
3 16 3 16
RA4/TOCKI OSC1 RA4/TOCKI OSC1
R 4 15 4 15
16F84
16F84

OSC2 MCLR OSC2


PIC
MCLR
PIC

INT/RB0 5 14 5 14
Vss Vdd Vss Vdd
6 6
RB0/INT RB7 R RB0/INT RB7
7 7
RB1 RB6 RB1 RB6

RB2
LB0 RB2 RB5
RB5
RB3 RB3 RB4
RB4

PB0 PB0

Adecuar Jumper de acuerdo a


las necesidades
INTE INTE

Utilizar RB0 como Interrupción Externa Utilizar RB0 como salida para LED

55 Ing.J.Jesús Tafoya Sánchez


Interrupciones

Práctica 27

Realice un programa que utilice la interrupción externa (RB0/INT) del PIC .


Cuando suceda la interrupción hacer rotar el dato 01H del puerto A, y así por
cada interrupción que suceda hacer rotar el dato del puerto A.
La rotación a la izquierda contrólela para que sea del Bit 0 al Bit 3 del puerto A.

J2 TRA
PB0

LEDS PB
GND
J3 TRA
INTE
J4
GND

Práctica 28

Realice un programa que permita obtener en el bit 3 del puerto B una


señal cuadrada simétrica de 50 Hz, mediante el uso del temporizador
interno del PIC. Utilice interrupcion por desbordamiento de
Temporizador (TOIE/TOIF).
J2 TRA
PB0
LEDS PB

GND
J3 TRA
INTE
J4
GND

56 Ing.J.Jesús Tafoya Sánchez


Interrupciones

Práctica 29

Realice un programa que permita escribir y leer en la memoria de datos


EEPROM. Realice primero el proceso de escritura de algunos datos que
usted proponga y después lea los datos de la misma memoria y envielos al
puerto B para visualizar si los datos son los esperados

J2 TRA

LEDS PB
GND
J3 TRA

J4
GND

57 Ing.J.Jesús Tafoya Sánchez


Convertidor Analógico Digital

PRACTICA: Convertidor Analógico Digital

OBJETIVO

Mediante el uso del convertidor analógico digital que tiene el PIC16F877 realizar la
lectura de señales analógicas para el control de actuadores externos.

CONSIDERACIONES

El módulo del convertidor Analógico a Digital (A/D) del PIC16F877 tiene ocho
canales.

La entrada analógica carga una muestra y la sostiene mediante un capacitor. La


salida de la muestra y el capacitor que la retiene son la entrada para el
convertidor. El convertidor genera un resultado digital de este valor análogo a
través de aproximaciones sucesivas. La conversión A/D de la señal de entrada
analógica resulta en un número digital correspondiente de 10 bits. El módulo A/D
tiene entrada de referencia de voltaje alto y bajo seleccionable por software con
alguna combinación de VDD, VSS, RA2 o RA3.

El convertidor A/D tiene la característica única de ser capaz de operar mientras el


dispositivo está en modo SLEEP. Para operar en sleep, el reloj A/D debe ser
derivado del oscilador RC interno del A/D.

El módulo A/D tiene cuatro registros que son:

 Registro de Resultado Alto A/D (ADRESH)


 Registro de Resultado Bajo A/D (ADRESL)
 Registro 0 de Control A/D (ADCON0)
 Registro 1 de Control A/D (ADCON1)

El registro ADCON0 controla la operación del módulo. El registro ADCON1


configura las funciones de los pines de los puertos (RA y RE). Los pines del puerto
pueden ser configurados como entradas analógicas (RA3 también puede ser
referencia de voltaje) o como entrada/salida (I/O) digital.

Registros del A/D en los Bancos de Memoria.


REGISTRO DIRECCION REGISTRO DIRECCION
ADRESH 1Eh ADRESL 9Eh
ADCON0 1Fh ADCON1 9Fh
BANK0 BANK1

58 Ing.J.Jesús Tafoya Sánchez


Convertidor Analógico Digital

Registro ADCON0

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0


ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE — ADON
bit7 bit0
R= bit de lectura, W=bit de escritura, U= bit no implemntado, leído como „0‟, -
n=valor en reset POR

bit 7-6: ADCS1:ADCS0: bits selectores del reloj de conversión A/D


00 = FOSC/2
01 = FOSC/8
10 = FOSC/32
11 = FRC (reloj derivado del oscilador RC)

bit 5-3: CHS2:CHS0: bits selectores del canal analógico


000 = canal 0, (RA0/AN0)
001 = canal 1, (RA1/AN1)
010 = canal 2, (RA2/AN2)
011 = canal 3, (RA3/AN3)
100 = canal 4, (RA5/AN4)
101 = canal 5, (RE0/AN5)(1)
110 = canal 6, (RE1/AN6)(1)
111 = canal 7, (RE2/AN7)(1)

bit 2: GO/DONE: bit de estado de conversión A/D


Si ADON = 1
1= conversión A/D en progreso (poniendo 1 en este bit inicia la conversión A/D)
0= la conversión A/D no está en progreso (este bit es limpiado automáticamente
por hardware cuando se completa la conversión A/D)

bit 1: No implementado: leído como „0‟

bit 0: ADON: bit para habilitar A/D (On)


1= el módulo convertidor A/D está en operación
0= el módulo convertidor A/D está apagado y consume corriente de no
operación

Nota: estos canales no están disponibles en dispositivos de 28 pines.

59 Ing.J.Jesús Tafoya Sánchez


Convertidor Analógico Digital

Registro ADCON1

U-0 U-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0


ADFM — — — PCFG3 PCFG2 PCFG1 PCFG0
bit7 bit0
R= bit de lectura, W=bit de escritura, U= bit no implemntado, leído como „0‟, -
n=valor en reset POR

bit 7: ADFM: bit selector del formato de resultado A/D


1= justificado a la derecha. Los 6 bits más significativos de ADRESH son
leídos como „0‟
0= justificado a la izquierda. Los 6 bits menos significativos de ADRESL
leídos como „0‟

bit 6-4: No implementado: leído como „0‟

bit 3-0: PCFG3:PCFG0: bits de control de configuración del Puerto A/D

PCFG3: AN7(1) AN6(1) AN5(1) AN4 AN3 AN2 AN1 AN0 CHAN/
PCFG0 RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0 VREF+ VREF- Refs(2)
0000 A A A A A A A A VDD VSS 8/0
0001 A A A A VREF+ A A A RA3 VSS 7/1
0010 D D D A A A A A VDD VSS 5/0
0011 D D D A VREF+ A A A RA3 VSS 4/1
0100 D D D D A D A A VDD VSS 3/0
0101 D D D D VREF+ D A A RA3 VSS 2/1
011x D D D D D D D D VDD VSS 0/0
1000 A A A A VREF+ VREF- A A RA3 RA2 6/2
1001 D D A A A A A A VDD VSS 6/0
1010 D D A A VREF+ A A A RA3 VSS 5/1
1011 D D A A VREF+ VREF- A A RA3 RA2 4/2
1100 D D D A VREF+ VREF- A A RA3 RA2 3/2
1101 D D D D VREF+ VREF- A A RA3 RA2 2/2
1110 D D D D D D D A VDD VSS 1/0
1111 D D D D VREF+ VREF- D A RA3 RA2 1/2
A = Entrada Analógica
D = I/O Digital
Nota 1: Estos canales no están disponibles en dispositivos de 28 pines.
2: Esta columna indica el número de canales analógicos disponibles como
entradas A/D y el número de canales analógicos usados como entradas de
referencia de voltaje.
Los registros DRESH:ADRESL contienen 10 bits del resultado de la conversión
A/D. Cuando termina la conversión A/D, el resultado es cargado en este par de
registros de resultado, el bit GO/DONE (ADCON0<2>) es limpiado y el bit bandera
de interrupción ADIF se pone en „1‟.

60 Ing.J.Jesús Tafoya Sánchez


Convertidor Analógico Digital

Después que el módulo A/D ha sido configurado como se desea, el canal


seleccionado debe ser adquirido antes de que inicie la conversión. Los canales de
entrada analógica deben tener sus correspondientes bits TRIS seleccionados
como entradas. Después que ha pasado este tiempo de prueba puede iniciar la
conversión A/D. deberán seguirse los siguientes pasos para hacer la conversión
A/D.

1. Configure el módulo A/D:


 Configure los pines analógicos, la referencia de voltaje y las I/O
digitales (ADCON1)
 Seleccione el canal de entrada A/D (ADCON0)
 Seleccione el reloj de conversión A/D (ADCON0)
 Active (Turn on) el módulo A/D (ADCON0)

2. Si lo desea, configure las interrupciones A/D:


 Limpie (ponga „0‟) el bit ADIF
 Active (ponga „1‟) el bit ADIE
 Active (ponga „1‟) el bit GIE

3. Espere el tiempo requerido de adquisición.

4. Inicie la conversión:
 Ponga „1‟ en el bit GO/DONE del registro ADCON0

5. Espere a que termine la conversión A/D, lo podrá verificar de dos formas:


 Monitoreando el bit GO/DONE hasta que esté limpio (tenga „0‟).
 Esperar la interrupción A/D

6. Leer el par de registros de resultados (ADRESH:ADRESL), limpiar el bit


ADIF si se requiere.

7. Para una siguiente conversión, vaya al paso 1 o al paso 2 según se


requiera. El tiempo de conversión A/D por bit es definido como TAD. Se
requiere una espera mínima de 2TADFig. Diagrama a Bloques del
Módulo Convertidor A/D

61 Ing.J.Jesús Tafoya Sánchez


Convertidor Analógico Digital

CHS2:CHS0

111
RE2/AN7(1)

110
RE1/AN6(1)

101
RE0/AN5(1)

100
RA5/AN4
VAIN
(Voltaje de Entrada) 011
RA3/AN3/VREF+

010
RA2/AN2/VREF-

CONVERTIDOR 001
A/D RA1/AN1

000
VDD RA0/AN0

VREF+

(Voltaje de
Referencia)

VREF-
(Voltaje de
Referencia)

VSS

PCFG3:PCFG0

NOTA 1: No disponible en dispositivos de 28


pines

Fig. Esquema del Convertidor Analógico Digital

Selección del Reloj de conversión A/D.

El tiempo de conversión A/D por bit es definido como TAD. La conversión A/D
requiere un mínimo de 12 TAD por 10 bits de conversión. La fuente del reloj de
conversión es seleccionada por software. Las cuatro posibles opciones para TAD
son:
 2TOSC
 8TOSC
 32TOSC
 Oscilador RC interno

62 Ing.J.Jesús Tafoya Sánchez


Convertidor Analógico Digital

Para conversiones correctas de A/D, el reloj debe ser seleccionado para asegurar
un tiempo mínimo TAD de 1.6s.
La siguiente tabla muestra el tiempo TAD resultante derivado de la frecuencia de
operación del dispositivo y de la fuente de reloj seleccionada.

Fuente de Reloj AD (TAD) Frecuencia del


Dispositivo
Operación ADCS1:ADCS0 Máxima
2TOSC 00 1.25 MHz
8TOSC 01 5 MHz
32TOSC 10 20 MHz
RC(1,2,3) 11 Nota 1

Nota 1: La fuente RC tiene un tiempo típico TAD de 4s pero puede


variar de 2-6 s.
2:Cuando la frecuencia del dispositivo es más grande que 1 MHz, la
fuente RC del reloj de conversión A/D es recomendada sólo para la
operación de sleep.
3: Para dispositivos de voltaje extendido (LC), refiérase a la sección de
Especificaciones Eléctricas.

Configuración de los pins del Puerto Analógico

Los registros ADCON1 y TRIS controlan la operación de los pines del Puerto A/D.
Los pines del puerto que se desea sean entradas analógicas deben tener su
correspondiente bit TRIS puesto en „1‟ (configurado como entrada). Si el bit TRIS
es puesto en „0‟ (configurado como salida), el nivel de salida digital (VOH o VOL)
será convertido.

La operación A/D es independiente del estado de los bits CHS2:CHS1 y de los bits
TRIS.

Nota 1: Cuando se lee el registro del puerto, algún pin configurado como
canal de entrada analógica leerá como „0‟ (un nivel bajo). Los pins
configurados como entradas digitales convertirán una entrada
analógica. Los niveles analógicos en una entrada configurada
digitalmente no afectarán la precisión de la conversión.
2: Los niveles analógicos en cualquier pin que es definido como entrada
digital (incluyendo los pines de AN7:AN0) pueden causar que el
buffer de entada consuma corriente que está fuera de las
especificaciones del dispositivo

63 Ing.J.Jesús Tafoya Sánchez


Convertidor Analógico Digital

Conversiones A/D

Limpiar el bit GO/DONE durante la conversión abortará la conversión en proceso.


El par de registros de resultado A/D NO deben se actualizados con la conversión
parcialmente completada. Esto es, los registros ADRESH:ADRESL continuarán
conteniendo el valor de la última conversión completada (o el último valor escrito
en ellos). Después de que una conversión es abortada se requiere una espera de
2TAD antes de que inicie la siguiente adquisición. Después de esta espera de
2TAD, la adquisición en el canal seleccionado inicia automáticamente.

Después de que el bit GO de pone en „1‟, el primer segmento de tiempo tiene un


mínimo de TCY (tiempo de ciclo de reloj) y un máximo de TAD.

Nota: El bit GO/DONE no debe ser puesto en „1‟ en la misma instrucción que
activa a A/D.

TCY a TAD TAD1 TAD2 TAD3 TAD4 TAD5 TAD6 TAD7 TAD8 TAD9 TAD10 TAD11

b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

Inicia la Conversión
El capacitor de sostenimiento se desconecta de la entrada analógica (generalmente
100 ns)
Poner en '1' el bit GO

se carga ADRES
el bit GO se limpia
se pone en '1' el bit ADIF
el capacitor de sostenimiento se
conecta a la entrada analógica

Fig. Ciclo de conversión Analógico – Digital.

Registros de Resultados A/D

El par de registros (ADRESH:ADRESL) son la localidad donde se carga el


resultado de 10 bits. Entre estos registros se tiene un ancho de 16 bits. El módulo
A/D da la posibilidad de justificar a la derecha o a la izquierda los 10 bits de
resultado en los 16 bits del registro de resultados. El bit selector de formato A/D
(ADFM) controla esta justificación. La siguiente figura muestra la operación de
justificación. Los bits extra son cargados con ceros. Cuando no está habilitado el
módulo A/D, estos registros pueden ser usados como dos registros de propósito
general de 8 bits.

64 Ing.J.Jesús Tafoya Sánchez


Convertidor Analógico Digital

Resultado de 10 bits
ADFM = 1 ADFM = 0

7 2 1 0 7 0 7 0 7 6 5 0
0 0 0 0 0 0 0 0 0 0 0 0

ADRESH ADRESL ADRESH ADRESL

Resultado de 10 bits Resultado de 10 bits

Justificado a la Derecha Justificado a la Izquierda

Fig. Justificación de los Resultados de una Conversión A/D

Operación A/D durante un Sleep

El módulo A/D puede operar durante el modo SLEEP. Esto requiere que la fuente
de reloj A/D sea puesta en uno para RC (ADCS1:ADCS0 = 11). Cuando se
selecciona la fuente de reloj RC, el módulo A/D espera un ciclo de instrucción
antes de iniciar la conversión. Esto permite que la instrucción SLEEP sea
ejecutada, lo cual elimina todos los ruidos digitales de la conversión. Cuando la
conversión termina se limpia (pone en „0‟) el bit GO/DONE y el resultado se carga
en los registros de dirección. Si se habilita la interrupción A/D, el dispositivo
“despertará” de sep, si no está habilitada el módulo A/D se desactivará, aunque el
bit ADON permanezca en „1‟.

Cuando la fuente de reloj A/D sea otra opción (no RC), la instrucción SLEEP
causará que la conversión en ejecución sea abortada y el módulo A/D desactivado
aunque el bit ADON permanezca en „1‟.
Desactivando los lugares de A/D, el módulo A/D estará en su estado de consumo
de corriente más bajo.

Nota: Para que el módulo A/D opere en SLEEP, la fuente de reloj debe ser puesta
en „1‟ en RC (ADCS1:ADCS0 = 11). Para permitir que la conversión ocurra
durante SLEEP, asegúrese de que la instrucción SLEEP siga
inmediatamente después de la instrucción que pone en „1‟ al bit GO/DONE.

Efectos de un Reset

Un Reset forza a todos los registros a cambiar a su estado de Reset. Esto obliga
al módulo A/D a desactivarse y cualquier conversión en proceso se aborta.
El valor que está en los registros ADRESH:ADRESL no se modifica por un Power-
on Reset. Estos registros contendrán un valor desconocido después de un Reset.

65 Ing.J.Jesús Tafoya Sánchez


Convertidor Analógico Digital

Para las prácticas con el manejo de señales analógicas el sistema de evaluación


de PICs cuenta con cinco dispositivos que pueden proporcionar esas señales, en
la figura siguiente se muestra la tabla de conexiones. El potenciometro para la
señal AN3 permite que se pueda variar el valor de referencia positivo del
convertidor.

DISPOSITIVO CANAL BIT PUERTO A PIN 16F877


Potenciometro CH0 - AN0 RA0 2
LM35 (Temperatura) CH1 – AN1 RA1 3
Fototransistor Infrarrojo CH2 – AN2 RA2 4
Potenciometro CH3 – AN3 RA3 5
Fotorresistencia-Potenciometro CH4 – AN4 RA5 7
22 21
25 24 23
27 26
28
30 29
32 31 77
33 6F8
36
35 34 RA5
R P
6 F 8717
IC
A /AN IC1
38 37 RARA2 3/A P4/S
40 39 RA 1 /A N
0/A /AN N2/ 3/Vr S
N0 1 Vr e f e f+
-
19 20
16 17 18
15
13 14
10 11 12
9
7 8
5 6
2 3 4
1
Fotoresistencia LDR (Light Dependence Resistence) y Potenciometro
Potenciometro
Fototransistor Infrarrojo
Sensor de Temperatura
LM35 AN4
C E

Potenciometro LM35
DZ
AN3
AN2
AN1
AN0
Fig. Señales analógicas en el Sistema de Evaluación de PICs

66 Ing.J.Jesús Tafoya Sánchez


Convertidor Analógico Digital

Práctica 30
Utilice el convertidor Analógico Digital del PIC 16F877,realice un programa
que permita leer una señal analógica y mostrar sus valor en digital a través
del puerto B.

Utilice señales analógicas desde un : Potenciometro o trimpot, un sensor de


temperatura (LM35), una fotoresistencia (LDR).

Pruebe cada señal en el programa de manera independiente, primero pruebe un


canal en el programa y después modifique el programa para leer otro canal y así
de manera sucesiva.
J2 TRA

LEDS PB
GND
J3 TRA

J4
GND

67 Ing.J.Jesús Tafoya Sánchez


Convertidor Analógico Digital

Práctica 31

Mediante el convertidor Analógico Digital del PIC 16F877, realice un programa


que permita leer el potenciómetro del canal 3 (AN3) y que se muestre en un
display de siete segmentos el voltaje leído.

J2 TRA

LEDS PB
GND
J3 TRA

J4
GND

68 Ing.J.Jesús Tafoya Sánchez


Display de Cristal Líquido (LCD)

PRACTICA: Control del Display de Cristal Líquido (LCD)

OBJETIVO

Mediante las técnicas de programación del lenguaje ensamblador y considerando


las características de funcionamiento del Display de Cristal Líquido, realizar
programas que muestren información a través del display.

CONSIDERACIONES

Además del uso del display de 7 segmentos para la visualización de datos,


también es muy común el uso del display de LCD (Liquid Cristal Display), estos
displays poseen un microcontrolador ya integrado el cual se encarga de manejar
los datos que le llegan en código ASCII y manejarlos en pantalla a través de una
serie de comandos propios.

14 13 A

* * * * E L EC TR ON I CA * * * * *
J . J . TAFOY A S .
2 1 K

Su principal ventaja es que se pueden manejar datos alfanuméricos, todo el


código ASCII, incluyendo el silabario Japonés katakana, lo cual mediante otro tipo
de display podría resultar más complicado manejar.

Tabla de caracteres ASCII

0 1 2 3 4 5 6 7 8 9 A B C D E F
0 NUL BEL HT LF FF CR SO SI

1 ESC

2 ESP ! “ # $ % & „ ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~

Los códigos ASCII menores a 3210 (0016 a 1F16) son los llamados
caracteres de control. No se pueden representar gráficamente, se utilizan
como comandos en los dispositivos series y paralelos (terminales,
impresoras, etc.) efectuando operaciones como: avance de papel, retorno
de carro, fin de transmisión, fin del archivo, etc.

69 Ing.J.Jesús Tafoya Sánchez


Display de Cristal Líquido (LCD)

Para el manejo del display se requiere una inicialización que se le debe dar antes
de mandar datos, la inicialización incluye: el tipo de interface del bus de datos de
8 bits o 4 bits, el número de líneas a usar del display, el encendido de la pantalla,
la posición de home del cursor, estos datos se deben recopilar de la hoja de datos
del fabricante de la pantalla que se usa.

La distribución de pines del display es como sigue.

14 13 14 13 A
DB7 DB6
DB5 DB4
DB3 DB2 * * * * E DU T RO N I CS * * * * * *
DB1 DB0
E R/W J . J . T A FOYA S .
RS Vcontraste 2 1 K
Vcc GND
2 1

Display LCD 20x2 (20 Caracteres x 2 Líneas)

Los pines DB0 a DB7 son el bus por donde se recibirán los datos a desplegar y
por donde también se puede recibir un dato del LCD, el pin RS representa la señal
de control que le permite al LCD saber si el dato presente en el bus es un
comando ó un carácter a desplegar, el pin E es la señal que permite al LCD
procesar o validar el dato presente en el bus, el pin R/W es la señal que permite
indicarle al LCD si se desea leer o escribir un dato, también tiene sus pines de
alimentación (GND y +Vcc 5 V), por último tiene un pin por el que se puede regular
el contraste de la pantalla (Vcontraste).

70 Ing.J.Jesús Tafoya Sánchez


Display de Cristal Líquido (LCD)

La secuencia de datos de inicialización del LCD se muestra a continuación en el


diagrama de flujo.

INICIALIZACION PARA 8 BITS INICIALIZACION PARA 8 BITS

Encendido Encendido

Esperar más de
Esperar más de 15 ms
15 ms para que
para que Vdd suba a 4.5 V
Vdd sube a 4.5 V

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 RS R/W DB7 DB6 DB5 DB4
0 0 0 0 1 1 X X X X 0 0 0 0 1 1

Esperar más de 4.1 ms Esperar más de 4.1 ms

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 RS R/W DB7 DB6 DB5 DB4
0 0 0 0 1 1 X X X X 0 0 0 0 1 1

Esperar más de 100 us Esperar más de 100 us

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 RS R/W DB7 DB6 DB5 DB4
0 0 0 0 1 1 X X X X 0 0 0 0 1 1

RS R/W DB7 DB6 DB5 DB4


RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 0
0 0 0 0 1 1 N F X X 0 0 0 0 1 0
0 0 0 0 0 0 1 0 0 0 Configuración
0 0 N F X X
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 I/D S Apagar Display
0 0 1 0 0 0
0 0 0 0 0 0
Encender Display 0 0 0 0 0 1
Fin de la Inicialización Modo de 0 0 0 0 0 0
0 0 0 1 D/S S
Desplazamiento

Fin de la
Inicialización

Dependiendo del tipo de interfaz con el microcontrolador es decir si se usarán 8


bits o 4 bits, los datos de inicialización cambian, si se cuenta con suficientes líneas
de entrada y salida en el PIC, lo más fácil es utilizar la interfaz a 8 bits, si se hace
a 4 bits la programación debe ser un poco más cuidadosa.

71 Ing.J.Jesús Tafoya Sánchez


Display de Cristal Líquido (LCD)

A continuación se muestra una tabla de comandos que se deben usar para poder
realizar la programación del LCD.

Conjunto de Instrucciones básicas del módulo LCD:

R Clock-
Instruction RS D7 D6 D5 D4 D3 D2 D1 D0 Description Cycles
W
NOP 0 0 0 0 0 0 0 0 0 0 No Operation 0

Clear Display 0 0 0 0 0 0 0 0 0 1 Clear display & set address counter to zero 165
Set adress counter to zero, return shifted display
Cursor Home 0 0 0 0 0 0 0 0 1 x to original position. 3
DD RAM contents remains unchanged.
Set cursor move direction (I/D) and specify
Entry Mode Set 0 0 0 0 0 0 0 1 I/D S automatic display shift (S).
3

Turn display (D), cursor on/off (C), and cursor


Display Control 0 0 0 0 0 0 1 D C B blinking (B).
3

Cursor / Display Shift display or move cursor (S/C) and specify


0 0 0 0 0 1 S/C R/L x x direction (R/L).
3
shift
Set interface data width (DL), number of display
Function Set 0 0 0 0 1 DL N F x x lines (N) and character font (F).
3

Set CGRAM Set CGRAM address. CGRAM data is sent


0 0 0 1 CGRAM Address afterwards.
3
Ardes
Set DDRAM Set DDRAM address. DDRAM data is sent
0 0 1 DDRAM Address afterwards.
3
Ardes
Busy Flag &
0 1 BF Address Counter Read busy flag (BF) and address counter 0
Address
Write Data 1 0 Data Write data into DDRAM or CGRAM 3

Read Data 1 1 Data Read data from DDRAM or CGRAM 3

x : Don't care 1 Increment 1 Shift to the right


I/D R/L
0 Decrement 0 Shift to the left
1 Automatic display shift 1 8 bit interface
S DL
0 0 4 bit interface
1 Display ON 1 2 lines
D N
0 Display OFF 0 1 line
1 Cursor ON 1 5x10 dots
C F
0 Cursor OFF 0 5x7 dots
1 Cursor blinking
B
0 DDRAM : Display Data RAM
1 Display shift CGRAM : Character Generator RAM
S/C
0 Cursor move

72 Ing.J.Jesús Tafoya Sánchez


Display de Cristal Líquido (LCD)

En el LCD se pueden escribir y leer datos, existen dos tipos de datos que se
pueden escribir:
- Un dato a desplegar en la pantalla por ejemplo: A ,*.+,5,?,{, etc.
- Un comando o instrucción, por ejemplo: rotar los datos del
display, apagar el cursor, encender la pantalla, etc.

La otra tarea es poder leer algún dato de la memoria RAM del LCD.

Para poder realizar estas tareas de escritura y lectura se debe tener los niveles de
voltaje en tiempo mínimo para las señales: E, R/W y RS. A continuación se
muestran los diagramas de tiempo.

140ns

RS RS
140ns
450 ns 450 ns
R/W R/W

E E

BUS DE DATOS ACEPTADO BUS DE DATOS ACEPTADO

Diagrama de Tiempo para ejecutar una Instrucción Diagrama de Tiempo para Escribir un dato

RS
140ns
450 ns
R/W

BUS DE DATOS ACEPTADO

Diagrama de Tiempo para Leer un dato

De acuerdo a los diagramas anteriores ahora se pueden realizar rutinas de control


para el LCD, sólo falta saber en que pines estará cada señal del LCD con el PIC,
para nuestro Sistema de evaluación se realizaron las conexiones tal como se
muestra en la tabla siguiente.

73 Ing.J.Jesús Tafoya Sánchez


Display de Cristal Líquido (LCD)

Tabla: Conexión del LCD en el sistema de evaluación de PICs.


PIN-LCD SEÑAL-LCD PIC16F877
1 GND GND
2 Vcc Vcc
3 Voltaje de Contraste GND
4 RS RE2
5 R/W‟ RE0
6 E RE1
7 DB0 RC0
8 DB1 RC1
9 DB2 RC2
10 DB3 RC3
11 DB4 RC4
12 DB5 RC5
13 DB6 RC6
14 DB7 RC7

Conector LCD - PIC16F877

14 13
RC7 DB7 DB6 RC6
RC5 DB5 DB4 RC4
RC3 DB3 DB2 RC2
RC1 DB1 DB0 RC0
RE1 E R/W RE0
RE2 RS Vcontraste GND
Vcc Vcc GND GND
2 1

PIC LCD PIC

74 Ing.J.Jesús Tafoya Sánchez


Display de Cristal Líquido (LCD)

Práctica 32

Utilice el Pic 16F877 para que controle un display de cristal líquido (LCD),

despliegue un mensaje y después de 3 segundos muestre otro mensaje donde

le indique al usuario que interruptores puede presionar para controlar un motor

o un LED.

Práctica 33

Utilice el Pic 16F877 para que controle un display de cristal líquido (LCD),

despliegue un contador del 00 al 99.

75 Ing.J.Jesús Tafoya Sánchez


Aplicaciones Varias

PRACTICA: Aplicaciones del Microcontrolador

OBJETIVO

Utilizar las características de los PIC en el control de actuadores mediante el uso


de programación en ensamblador.

Práctica 34

Utilice un control remoto infrarrojo comercial (SONY, SHARP etc.) y el PIC


16F877 para controlar un motor a pasos conectado al PuertoB. Utilice el
fototransistor del Sistema de Evaluación de PICs para recibir la señal infrarroja
en el bit RA2 del PIC16F877.

Los botones tienen la siguiente función:

- Power : Enciende-Apaga, energiza el motor en una bobina.


- Chanel ↑: Gira el motor en CW.
- Chanel ↓: Gira el motor en CCW.
- Vol ↑: Incrementa la Velocidad del motor
- Vol ↓: Decrementa la Velocidad del motor

Esquema Básico

76 Ing.J.Jesús Tafoya Sánchez


Aplicaciones Varias

Práctica 35

Controle la velocidad de un motor de C.D. conectado al bit RB5 del puerto B. El


bit RA2 incrementa la velocidad, el bit RA3 decrementa la velocidad. Este no
tiene nada que ver con el módulo de motor a Pasos.
Mediante un transistor de potencia conecte el motor al PIC.
Utilice la técnica de PWM para el control de la velocidad.

Motor CD

1 18
5Vcd º RA2 RA1 Vmotor
2 17
RA3 RA0
3 16
RA4/TOCKI OSC1
4 15 Motor
PIC 16F84

MCLR OSC2
5 14 C.D
Vss Vdd
6 13
RB0/INT RB7
7 12
RB1 RB6
8 11
RB2 RB5
9 10
RB3 RB4

Circuito Básico de Conexión

77 Ing.J.Jesús Tafoya Sánchez


Aplicaciones Varias

Práctica 36
Controle la posición de un Servomotor de Radio Control (R/C) conectado al bit
RB0 del PIC, mediante el uso de los bits del puerto A.

- El bit RA0 Posiciona el motor en 0º.


- El bit RA1 Posiciona el motor en 180º.

Servomotor.

1 18
5Vcd º RA2 RA1
2 17
RA3 RA0
3 16
RA4/TOCKI OSC1 GND
4 15
PIC 16F84

MCLR OSC2
5 14 Vcc
Vss Vdd
6 13
RB0/INT RB7
7 12
RB1 RB6
8 11
RB2 RB5
9 10
RB3 RB4

Linea de Control

Circuito Básico de Conexión.

78 Ing.J.Jesús Tafoya Sánchez

You might also like