Professional Documents
Culture Documents
16 F84
PIC
777
ICC1166FF887
PPI
jjtafoya@hotmail.com
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.
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.
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.
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.
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.
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
Cuestionario:
OPERACION DE MPLAB
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
Operación MPLAB(3) _________________________________
File > New
_________________________________
Captura Código Fuente
_________________________________
Project > New Project _________________________________
_________________________________
_________________________________
_________________________________
_________________________________
1
_________________________________
2
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
Operación MPLAB (5)
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
Operación MPLAB (6)
_________________________________
Project > Build All
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
Simulación MPLAB
Debug - Simulator Stimulus Asynchronous Stimulus
(8) _________________________________
Simulación del Programa
_________________________________
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
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
_________________________________
Cuestionario
COMIENZO
50SEG
NEXT8
1230
0xFF
arriba
INCF
_INCF
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:
DATO3x3
GOTO1
0xFF
6 Ing.J.Jesús Tafoya Sánchez
MPLAB
ARRIBA
El programador de PICs
El sistema de evaluación de PICs
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
Mó
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
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
CONSIDERACIONES:
Para realizar las siguientes prácticas se debe tener en cuenta el manejo de las
instrucciones de movimiento de datos:
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
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
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.
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.
ORG ORG XX
Leer el dato de la
localidad 0CH y
MOVF f,d
dejarlo en el
acumulador
Leer el dato de la
localidad 0DH y
MOVF f,d
dejarlo en el
acumulador
Leer el dato de la
localidad 0EH y
MOVF f,d
dejarlo en el
acumulador
FIN END
Práctica 3
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
ORG ORG XX
BSF f,b
MOVLW k
Configurar los MOVWF f
puertos MOVLW k
MOVWF f
BCF f,b
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
Práctica 4
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
Práctica 5
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
Práctica 6
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
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
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.
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).
Práctica 7
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
8 RB2 RB5 11
9 RB3 RB4 10
Práctica 8
GND
J3 TRA
J4
GND
Práctica 9
J2 TRA
LEDS PB
GND
J3 TRA
J4
GND
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
Práctica 10
LEDS PB
GND
J3 TRA
J4
GND
OBJETIVO
CONSIDERACIONES
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.
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.
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.
Práctica 11
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
Práctica 12
Realizar un programa que controle el semáforo vehicular, de acuerdo al siguiente
patrón en el crucero vehicular.
PORTB
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
R
R A V A
E/O V
ROJO AMARILLO VERDE ROJO AMARILLO VERDE
N/S
ORG
CONFIGURAR
PUERTOS
INICIALIZAR
PUERTOS
5 SEG.
1 SEG.
5 SEG.
1 SEG.
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.
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.
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
OBJETIVO
CONSIDERACIONES
Práctica 14
LEDS PB
GND
J3 TRA
J4
GND
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
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
Práctica 16
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
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 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.
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
RB7
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
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
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
MODULO J3
DE MOTORES A PASO Y C.D.
PORTB 1 S1
HMOTOR
2
SELECC. SELEEC.
MOTOR_DC MOTOR
A PASOS
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.
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
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.
Práctica 17
LEDS PB
GND
J3 TRA
36 12 36 12 36 12 36 12
J4
GND
24 24 24 24
36 12 36 12 36 12 36 12
24 24 24 24
36 12 36 12 36 12 36 12
24 24 24 24
36 12 36 12 36 12 36 12
24 24 24 24
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
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
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.
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
Práctica 21
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 dato del ejemplo anterior indica dar 116 pasos en dirección CW.
Práctica 22
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
Práctica 23
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
OBJETIVO
CONSIDERACIONES
g f cc a b Anodo Común
f b
g
e c Cátodo Común
d
dp
e d cc c dp
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
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).
Práctica 24
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
Práctica 25
J2 TRA
a
LEDS PB
GND
f b J3 TRA
J4
GND
g
e c
Práctica 26
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
PRACTICA: Interrupciones
OBJETIVO
CONSIDERACIONES
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.
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.
INTE
INTF
RBIE
RBIF
TOIE
INTERRUPCION
TOIF
GIE
EEIE
EEIF
Registro INTCON
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.
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
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
Utilizar RB0 como Interrupción Externa Utilizar RB0 como salida para LED
Práctica 27
J2 TRA
PB0
LEDS PB
GND
J3 TRA
INTE
J4
GND
Práctica 28
GND
J3 TRA
INTE
J4
GND
Práctica 29
J2 TRA
LEDS PB
GND
J3 TRA
J4
GND
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.
Registro ADCON0
Registro ADCON1
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‟.
4. Inicie la conversión:
Ponga „1‟ en el bit GO/DONE del registro ADCON0
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
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
Para conversiones correctas de A/D, el reloj debe ser seleccionado para asegurar
un tiempo mínimo TAD de 1.6s.
La siguiente tabla muestra el tiempo TAD resultante derivado de la frecuencia de
operación del dispositivo y de la fuente de reloj seleccionada.
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
Conversiones A/D
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
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
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.
Potenciometro LM35
DZ
AN3
AN2
AN1
AN0
Fig. Señales analógicas en el Sistema de Evaluación de PICs
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.
LEDS PB
GND
J3 TRA
J4
GND
Práctica 31
J2 TRA
LEDS PB
GND
J3 TRA
J4
GND
OBJETIVO
CONSIDERACIONES
14 13 A
* * * * E L EC TR ON I CA * * * * *
J . J . TAFOY A S .
2 1 K
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.
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.
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
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).
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
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 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
Fin de la
Inicialización
A continuación se muestra una tabla de comandos que se deben usar para poder
realizar la programación del 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
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
Diagrama de Tiempo para ejecutar una Instrucción Diagrama de Tiempo para Escribir un dato
RS
140ns
450 ns
R/W
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
Práctica 32
Utilice el Pic 16F877 para que controle un display de cristal líquido (LCD),
o un LED.
Práctica 33
Utilice el Pic 16F877 para que controle un display de cristal líquido (LCD),
OBJETIVO
Práctica 34
Esquema Básico
Práctica 35
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
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.
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