Sunteți pe pagina 1din 10

ING. ELECTRNICA.

SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 1


Prctica N1: Manejo de interrupciones.
Manuel Sagbay Asitimbay
Universidad Politcnica Salesiana
Cuenca - Ecuador
msagbaya@est.ups.edu.ec
AbstractIn this paper study the control of interrupts TMR0,
TMR1, TMR2 and the INT external interrupt pin, which will
serve to make this practice of designing an alarm clock, multi-
plexing displays, stopwatch and up/down counter.
Index TermsTMR0, TMR1, TMR2.
I. OBJETIVOS.
Multiplexar 6 displays con el timer 0.
Realizar un reloj con el timer 1 y oscilador externo de
32.768Khz.
Realizar el cronmetro con una base de 10ms con el
timer2.
Realizar un contador de eventos ascendente y descendente
con la interrupcin por la patita int, y mediante sensores.
Implementar tambin una alarma.
II. INTRODUCCIN.
La programacin en los microcontroladores independiente-
mente del programa que se utilice para compilar el cdigo
se puede hacer de tres maneras, nicamente por polling, que
signica crear una actividad sin el uso de interrupciones, por
medio de interrupciones, o el uso de los dos mtodos a la vez.
El mtodo ms eciente es mediante el uso de las inter-
rupciones, sobre todo cuando se trabaja con uno o varios
perifricos de entrada, y algunos de salida. Esto se debe a
que el programa puede realizar varios asuntos mientras espera
recibir informacin, y nicamente al momento de recibir datos
el programa se interrumpe para atender el evento que se est
dando, y luego inmediatamente regresa al lugar donde se
encontraba al momento de ser interrumpido.[1], [4], [3]
III. MARCO TERICO.
A. Interrupciones.
La interrupcin tiene la caracterstica de la inmediatez, y
constituyen el mecanismo ms importante para la conexin del
microcontrolador con el exterior ya que sincroniza la ejecucin
de programas con los acontecimientos externos requieren de
una atencin inmediata, entre estos se pueden tener:
Deteccin de pulsos externos,
Recepcin de datos,
Activacin de pulsadores, etc.
El funcionamiento de las interrupciones es similar al de las
subrutinas, de las cuales se diferencian, principalmente, en
los procedimientos que las ponen en marcha. As como las
.
subrutinas se ejecutan cada vez que en el programa aparece
una instruccin CALL, las interrupciones se ponen en marcha
al aparecer en cualquier instante un evento externo o interno
al programa, por lo tanto.[5]
1) Interrupciones en la familia Pic16F87x: Tiene 13
fuentes de interrupciones los de 28 pines y 15 los de 40
pines. Al aceptarse una interrupcin se salva el valor del PC
(contador de programa) en la pila y se carga aquel con el valor
0004h, que es el Vector de Interrupcin. El programador puede
modicar y controlar varias de estas interrupciones accediendo
a su registro correspondiente. A continuacin se enlista las
interrupciones que tienen esta familia de microcontroladores:
Desbordamiento del TMR0
Activacin de la patita de interrupcin RB0/INT
Cambio de estado de una de las cuatro patitas de ms
peso del puerto B
Finalizacin de la escritura de un byte en la EEPROM
Desbordamiento del Timer1
Desbordamiento del Timer2
Captura o comparacin en el mdulo CCP1
Captura o comparacin en el mdulo CCP2
Transferencia en la puerta serie Sncrona
Colisin de bus en la puerta serie Sncrona
Fin de la transmisin en el USART
Fin de la recepcin en el USART
Fin de la conversin en el conversor A/D
Transferencia en la puerta paralela esclava (Esta causa de
interrupcin no est disponible en los Pic16F87x de 28
patitas)
En la gura 1 se muestra la lgica de las interrupciones.
Figure 1. Lgica de las interrupciones.
Ya que para sta prctica se har uso de 4 de las inter-
rupciones, solo los registros para dichas interrupciones sern
estudiados a continuacin.
ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 2
B. Registro INTCON (Direccin 0Bh, 8Bh, l0Bh, 18Bh).
Controlar las interrupciones provocadas por el TMR0, cam-
bio de estado de B4 a B7 y activacin de la patita RB0/INT.
El bit PEIE acta como una segunda llave parcial de permiso
o prohibicin de las causas de interrupcin que nos estn
contenidas en INTCON.
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
bit 7 bit 0
bit 7: GIE: Habilitacin global de interrupciones:
1= Habilita.
0= Deshabilita.
bit 6: PEIE: Habilita interrupciones de los perifricos que
no se controla con el registro INTCON:
1= Habilita interrupciones de los perifricos.
0= Deshabilita interrupciones de los perifricos.
bit 5: T0IE: bit de habilitacin de la interrupcin por
desbordamiento del TMR0:
1= Habilita la interrupcin.
0= Inhabilita la interrupcin.
bit 4: INTE: bit de habilitacin de la interrupcin externa
por el pin RB0/INT:
1= Habilita la interrupcin.
0= Inhabilita la interrupcin.
bit 3: RBIE: bit de habilitacin de interrupcin por cambio
de nivel en el PORTB:
1= Habilita la interrupcin.
0= Inhabilita la interrupcin.
bit 2: T0IF: Flag de indicacin de desbordamiento de
TMR0:
1= El TMR0 se ha desbordado. Se borra por software.
0= El TMR0 no se ha desbordado.
bit 1: INTF: Flag de estado de la interrupcin externa INT:
1= La interrupcin externa se ha producido. Se borra
por software.
0= La interrupcin externa no se ha producido.
bit 0: RBIF: Flag de indicacin de interrupcin por cambio
de nivel en PORTB:
1= Se ha producido un cambio de nivel en los pines
RB7:RB4. Se borra por software.
0= No se ha producido un cambio de nivel en los pines
RB7:RB4.
C. REGISTRO OPTION u OPTION_REG (Direccin
81h,181h).
El Registro de OPTION_REG es un registro que puede
ser ledo o escrito y que contiene varios bits de control para
congurar la asignacin del preescaler al TMR0 o al WDT,
la interrupcin externa, el TMR0 y las resistencias de pull-up
del PORTB.
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
RBPU INTED T0CS T0SE PSA PS2 PS1 PS0
bit 7 bit 0
Bit 7: RBPU: Resistencia de Pull-up en, el PORTB:
1= Resistencia de Pull-up desactivada.
0= Resistencia de Pull-up activada.
bit6 1: INTEDG: Flanco, de control de interrupciones:
1: Interrupcin por anco ascendente en el pin
RB0/INT.
0: Interrupcin por anco: descendente en el pin
RB0/INT.
bit 5: T0SC. Seleccin del tipo de Reloj para TMRO:
1 = Los pulsos se introducen a travs del, pin
RA4/TOCK1.
0 = Los Pulsos de reloj internos- Fosc/4.
bit 4: T0SE: Tipo de anco para TMR0:
1 = Incremento de TMR0 en cada anco, descendente
por el pin RA4/TOCKI.
0 = Incremento de TMR0 en cada anco ascendente:
por el pin RA4/TOCKI.
bit 3: PSA: Asignacin del preescaler:
1 = El preescaler se le asigna al WDT.
0 = El preescaler se le asigna al TMR0.
bit 2-0:PS2:PS0: Rango de actuacin del preescaler (g 2):
.
Figure 2. Rango del preescaler.
D. REGISTRO PIE1 (Direccin 8Ch).
Este registro contiene los bits individuales de habilitacin de
interrupciones de los perifricos Nota.- El bit PEIE (INTCON
<6>) debe estar a uno para habilitar las interrupciones de
cualquiera de los perifricos.
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
PSPIE(1) ADIE RCIE TXIE SSPIE CCPIE TMR2IE TMR1IE
bit 7 bit 0
bit 7: PSPIE: bit de habilitacin de interrupcin por lectura
/ escritura en el Puerto Paralelo Esclavo. Para los modelos de
40 pines.:
1= Habilita la interrupcin por lectura/escritura en el
PSP.
0= inhabilita la interrupcin por lectura/escritura en el
PSP.
bit 6: ADIF: bit de habilitacin de interrupcin por nal-
izacin de la conversin A/D:
l= Habilita la interrupcin del convertidor A/D.
0= Inhabilita la interrupcin del convertidor A/D.
ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 3
bit 5: RCIE: bit de habilitacin de interrupcin en recepcin
por el USAR, cuando se llena el buffer:
1= Habilita interrupcin por recepcin en el USAR.
0= Inhabilita interrupcin por recepcin en el USAR.
bit 4: TXIE: bit de interrupcin al transmitir por el USAR,
cuando se vaca el buffer.:
1= Habilita la interrupcin de transmisin por el USAR.
0= Inhabilita la interrupcin de transmisin por el
USAR.
bit 3: SSPIE: bit de habilitacin de interrupcin por el
Puerto Serie Sncrono (SSP):
1= Habilita la interrupcin del SSP.
0= Inhabilita la- interrupcin del SSP.
bit 2: CCP1IE: bit de habilitacin de interrupcin del m-
dulo CCPI cuando se produce una captura o una comparacin:
1= Habilita la interrupcin del CCPI.
0= Inhabilita la interrupcin del CCPI.
bit 1: TMR2IE: bit de habilitacin de interrupcin por
desbordamiento de TMR2 que est emparejado con el registro
PR2 (92h):
1= Habilita la interrupcin por desbordamiento de
TMR2 emparejado a PR2.
0= Inhabilita la interrupcin de TMR2 emparejado a
PR2.
bit 0: TMR1IE: bit de habilitacin de interrupcin por
desbordamiento del TMRI:
1= Habilita la interrupcin por desbordamiento de
TMR1.
0= Inhabilita la interrupcin por desbordamiento de
TMR1.
E. REGISTRO PIR1 (Direccin 0Ch).
El registro de PIRI contiene los ags individuales que
indican las interrupciones provocadas por los perifricos.
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x
PSPIF ADIF RCIF TXIF SSPIF CCPIF TMR2IF TMR1F
bit 7 bit 0
bit 7: PSPIF: Flag de Lectura/Escritura por el Puerto Par-
alelo esclavo:
1= Concedido el permiso de interrupcin para la puerta
paralela esclava al realizar una operacin de Lec-
tura/Escritura. En los modelos de 40 pines
0= No est permitida la interrupcin
bit 6: ADIF: Flag de nal de conversin del convertidor
A/D:
1= El convertidor A/D ha nalizado la conversin
0= El convertidor A/D no ha nalizado la conversin
bit 5 RCIF: Flag de recepcin por el USAR:
1= El buffer de datos recibidos por el USAR est lleno
0= El buffer de datos recibidos por el USAR no est
lleno.
bit 4: TXIF: Flag de transmisin el USAR:
1= El buffer de datos a transmitir no est lleno.
0= El buffer de daos a transmitir est lleno.
bit 3: SSPIF: Flag de interrupcin del Puerto Serie Sncrono
(SSP):
1= La condicin del SSP ha ocurrido, debe ponerse
a cero por software antes de volver del programa
de atencin a la interrupcin. Las condiciones que
soporta este bit son:
SPI Ha tenido lugar una Transmisin / Recep-
cin.
I2C Slave Ha tenido lugar una Transmisin /
Recepcin.
I2C Master.
Ha tenido lugar una Transmisin / Recepcin.
La condicin de salida iniciada se complet por
el mdulo de SSP.
La condicin de parada inicio se complet por
el mdulo de SSP.
La condicin de reinicializacin se complet por
el mdulo SSP.
Una condicin de la salida se ha realizado mien-
tras el mdulo de SSP estaba en estado de espera
(sistema de Multimaster).
0= no ha ocurrido ninguna condicin de interrupcin del
mdulo SSP.
bit 2: CCP1IF: Flag de interrupcin de CCPI Modo Captura:
1= Ocurri una captura de TMR1 (debe ponerse a cero
por software).
0= No ocurri ninguna captura de TMR1.
Modo Comparacin:
1= Se ha realizado una comparacin de TMR1 Con
el registro emparejado /debe ponerse a cero por
Software).
0= No se ha realizado comparacin Modo PWM Este
modo no se utiliza.
bit 1: TMR2IF: Flag de interrupcin de TMR2 emparejado
con PR2:
1= TMR2 emparejado con PR2 ocurri (debe ponerse a
cero por software).
0= No ha ocurrido el emparejamiento de TMR2 con
PR2.
bit 0: TMR1IF: Flag de desbordamiento de TMRI:
1= El registro se desbordo (debe ponerse a cero por
software).
0= El registro de TMRI no se desbord.
F. REGISTRO T1CON: Registro de control del TIMER1 (di-
reccin 10h).
U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x
T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
bit 7 bit 0
bit 7-6:No implementados: Se lee como 0.:
ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 4
bit 5-4:TlCKPS1:T1CKPS0: bit de seleccin del preescaler
de la seal de reloj del TIME1:
11= valor del preescaler 1:8.
10= valor del preescaler 1:4.
01= valor del preescaler 1:2.
00= valor del preescaler 1:1.
bit 3 : T1OSCEN: bit de habilitacin del oscilador del
TIMER1. Cuando se emplea un oscilador externo, hay que
poner este bit a 1. El TMR1 puede trabajar a una frecuencia
totalmente independiente de la del sistema:
1= Habilita el oscilador.
0= Deshabilita el oscilador.
Nota.- El oscilador y la resistencia de desconectan para reducir
el consumo.
bit 2: #TlSYNC: bit de control de sincronizacin de la seal
de entrada. Con TMR1CS=1.:
1 No sincroniza la entrada de reloj externa.
0= Sincroniza la entrada de reloj externa.
Con TMR1CS = 0.
En esta condicin se ignora. El TIMER1 utiliza el reloj
interno cuando TMRICS=0.
bit 1 TMR1CS: bit de seleccin de la fuente de reloj del
TIMER1.:
1= Reloj externo por el pin RC0/T1OSO/T1CK1 (anco
ascendente).
0= Reloj interno (FOSC/4).
bit 0: TMR1ON: TIMER1 activo. Hace entrar o no en
funcionamiento el TIMER1.:
1= Habilita el TIMER1.
0= Deshabilita el TIMER1.
G. REGISTRO T2CON: REGISTRO DE CONTROL DEL
TIMER2 (direccin 12h).
U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
bit 7 bit 0
bit 7: No implementado: Se lee como 0:
bit 6-3: TOUTPS3-TOUTPS0: bit de seleccin del rango
del divisor del Postescaler para el TIMER2:
0000 = Divisor del postescaler 1:1.
0001 = Divisor del postescaler 1:2.
0010 = Divisor del postescaler 1:3.
0011 = Divisor del postescaler 1:4.
0100 = Divisor del postescaler 1:5.
0101 = Divisor del postescaler 1:6.
0110 = Divisor del postescaler 1:7.
0111 = Divisor del postescaler 1:8.
1000 = Divisor del postescaler 1:9.
1001 = Divisor del postescaler 1:10.
1010 = Divisor del postescaler 1:11.
1011 = Divisor del postescaler 1:12.
1100 = Divisor del postescaler 1:13.
1101 = Divisor del postescaler 1:14.
1110 = Divisor del postescaler 1:15.
1111 = Divisor del postescaler 1:16.
bit 2: TMR2ON: bit de activacin del TIMER2:
1= habilita el funcionamiento del TIMER2.
0= Inhibe el funcionamiento del TIMER2.
bit 1-0: T2CKPS1-T2CKPS0 Seleccin del rango de divisor
del Preescaler del TIMER2:
00= Divisor del Preescaler 1:1.
01= Divisor del Preescaler 1:4.
Ix= Divisor del Preescaler 1:16.
H. Display 7 segmentos.
El display 7 segmentos es muy utilizado para sealizacin
numrica, sin embargo existen algunas letras que tambin
pueden ser visualizadas en sus 7 segmentos. Este puede ser
de nodo comn o ctodo comn tal como indica la g 3.[7]
Figure 3. Display de 7 segmentos.
stos displays tambin existen de forma multiplexada, lo
cual involucra que sus segmentos son comunes para todos
los displays, y la forma de encenderlos se realiza con un pin
(Enable) para cada dgito, tal como se muestra en la g 4.
Figure 4. Display multiplexado HS-5461AS2.
Entre las caractersticas ms importantes tenemos.
Solidez: excelente
Visibilidad: 150 grados
Consumo: 50 mW por digito
Vida: aprox. 100000 horas:
Luminosidad: buena
Vcc general 1.5V.
La Vcc depende del color del LED.
Para un color rojo: Vcc=1.7V.
Debido a esto la corriente media que se debe aplicar es de
15mA.
ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 5
I. Buzzer.
Conocido tambin como zumbador, es un dispositivo muy
utilizado en circuitos elctricos para proporcionar avisos.
Su construccin consta de dos elementos, un electroimn
y una lmina metlica de acero. El zumbador puede ser
conectado a circuitos integrados especiales para as lograr
distintos tonos.
Cuando se acciona, la corriente pasa por la bobina del
electroimn y produce un campo magntico variable que hace
vibrar la lmina de acero sobre la armadura.[8]
La corriente mxima que soporta este dispositivo es de
30mA a 5V.[9]
J. Lenguaje C.
El lenguaje C dispone de todas las ventajas de un lenguaje
de programacin de alto nivel (anteriormente descritas) y le
permite realizar algunas operaciones tanto sobre los bytes
como sobre los bits (operaciones lgicas, desplazamiento etc.).
Las caractersticas de C pueden ser muy tiles al programar los
microcontroladores. Adems, C est estandarizado (el estndar
ANSI), es muy portable, as que el mismo cdigo se puede
utilizar muchas veces en diferentes proyectos. Lo que lo
hace accesible para cualquiera que conozca este lenguaje sin
reparar en el propsito de uso del microcontrolador. C es un
lenguaje compilado, lo que signica que los archivos fuentes
que contienen el cdigo C se traducen a lenguaje mquina por
el compilador. Todas estas caractersticas hicieron al C uno de
los lenguajes de programacin ms populares.[2]
Figure 5. Programacin en lenguaje C.
IV. HERRAMIENTAS Y MATERIALES UTILIZADOS.
Lyx (Software).
MikroC PRO for PIC v6.0.0.
Visio 2013.
PIC16F877A.
1 Cristal Osc. de 4MHz
1 Cristal Osc. de 32.768KHz.
6 Transistores 2N3906.
3 Transistores 2N3904.
1 Buzzer.
1 Display Multiplexado de 4 dgitos.
1 Display multiplexado de 2 dgitos.
8 Resistencias de 270Ohm.
6 Resistencias de 1KOhm.
2 Resistencias de 180Ohm.
2 Resistencias de 220Ohm.
2 Leds infrarrojo.
2 Fototransistores ST-1KL3B.
4 Cap. de 22pF.
1 Cap. de 1uF.
1 Dip switch de 4.
3 Pulsantes.
V. DESARROLLO.
A. Consideraciones de diseo generales.
Para sta prctica se ha establecido los siguientes parmet-
ros:
1) La conguracin inicial del PIC16F877A:
a) Oscillator selection XT: 4MHz
b) Watchdog Timer: Disable.
c) Power-up Timer: Disable.
d) Brown-out Reset: Enable.
e) Low-Voltage (single-supply) In-Circuit serial pro-
gram: Disable.
f) Data EEPROM Memory Code Proteccion: Disable.
g) Flash program memory write: Disable.
h) In-Circuit Debugger mode: Disable.
i) Flash Program memory code protection: Disable.
2) Para la multiplexacin se utiliza el timer0.
3) Para el reloj se utiliza el timer1.
4) Para el cronmetro se utiliza el timer2.
5) El contador se controla mediante la interrupcin externa
por la patita INT.
6) Se han habilitado las resistencias de pull-up para el con-
trol del dips-witch, los pulsantes y los fototransistores.
Esto con el objetivo de minimizar la circuitera.
7) Los nodo comn de los displays se le han asignado a
los pines 2,3,4...7 del puerto C.
8) Los segmentos de los displays (a,b,c,d,e,f,g,dp) se han
asignado todo a los pines (0,1,2..7) del puerto D respec-
tivamente.
9) El puerto A se congura como puerto digital para
controlar el buzzer con el pin 0.
Clculos Bsicos:
Fosc = 4MHz
Tosc =
1
4MHz
= 25us
Tcy = 4 Tosc = 4 25us = 1us
Conguracin inicial de registro/s:
option_reg.rbpu=0: (Habilitacin de resistencias de Pull-
up).
option_reg.intedg=0: (Interrupcin externa por anco de-
scendente).
ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 6
intcon.inte=1: (Habilitacin de la interrupcin externa por
el pin INT).
B. Consideraciones y diseo de la multiplexacin de los
displays.
Para realizar la multiplexacin de los displays, se hace
uso del TIMER0 del pic, el cual se ha considerado con un
encendido cada 2ms para evitar parpadeos en los displays.
abcde
f
gp
12345678
1
6
1
5
1
4
1
3
1
2
1
1
1
09
RN2
270
Q1
2N3906
Q2
2N3906
Q3
2N3906
Q4
2N3906
Q5
2N3906
Q6
2N3906
R3
1k
R4
1k
R5
1k
R6
1k
R7
1k
R8
1k
R
C
7
R
C
6
R
C
5
R
C
4
R
C
3
R
C
2
654321
654321
Figure 6. Diseo del circuito para la multiplexacin.
1) Clculos:
Datos:
t = 2ms.
PS = 1 : 8
n = 8(bits)
V
CC
= 5V
V
L pic
= 0.2V
I
RN2
= 18mA c/u
G = 4
Clculo para el timer:
x = 2
n

t Fosc
4 PS
= 2
8

2ms 4MHz
4 8
= 6
timer0 = 2
n
x = 250
Clculo para los displays:
R
N2
=
V cc V
L pic
I
RN2
=
5V 0.2V
18mA
= 266.67
R
N2
270
I
RN2 Real
=
V cc V
L pic
R
N2
=
5V 0.2
270
= 17.8mA
Ic
Q1Q6
I
RN2 Real
8 = 17.8mA 8 = 142.4mA
Rb
Q1Q6
=
V cc V
L pic
V
D
Ic/hfe G
=
5 0.2 0.7
142.4/150 4
= 1.0797K
Rb
Q1Q6 Real
1K
Conguracin inicial de registro/s:
option_reg.t0sc=0: (Reloj interno para el timer0).
option_reg.psa=0: (Asignacin de presscaler al tmr0).
option_reg.(ps2,ps1,ps0)=0,1,0: (Cong. de preescaler a
1:8).
C. Consideraciones y diseo del reloj.
Para realizar el reloj se utiliza el TIMER1 con cristal
oscilador externo de 32.768KHz.
Clculos para congurar el timer0:
Datos:
t = 1s
PS = 1 : 1
n = 16(bits)
Clculos:
1 = 2
n

t Fosc
PS
= 2
16

1s 32.768KHz
1
= 32768
timer1 = 2
n
x = 2
16
32768 = 32768
Conguracin inicial de registro/s:
t1con.(tlckps1,t1ckps0)=00: (Cong. de preescaler a 1:1
para el timer1).
t1con.t1oscen=1: (Habilita el oscilador para el timer1).
t1con.t1sync=0: (Sincroniza la entrada de reloj externa
para el timer1).
ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 7
t1con.tmr1cs=1: (Reloj externo por el pin
RC0/T1OSO/T1CK1 (anco ascendente) para el
timer1).
tmr1l=0x00 y tmr1h=0x80: Inicializa el timer1 en 32768.
t1con.tmr1on=1: (Permite el funcionamiento del timer1).
pie1.tmr1ie=1: (Habilita el timer 1).
pir1.tmr1if=0: (El registro del timer1 no se desbord).
intcon.peie=1: (Habilita el permiso de interrupciones de
los perifricos).
D. Consideraciones y diseo del cronmetro.
Para realizar conteo del cronmetro se utiliza el timer2, y la
base de tiempo es de 10ms para cada incremento, sin embargo
est deber ser habilitado en el programa, ya que la cuenta del
cronmetro empezar al presionar uno de los pulsantes que
indica la inicializacin del cronmetro.
Ademas considerando el error que tiene el cronmetro,
haciendo las pruebas hemos determinado que da un error de
aproximadamente 1.5 segundos cada minuto, por lo que cada
40 milisegundos aumentamos 1 al valor del milisegundo. lo
que me deja al error en aproximadamente 0.5 seg por minuto.
Clculos para congurar el timer0:
Datos:
t = 10ms
Preescaler PS = 1 : 4
Postescaler PO = 1 : 10
n = 8(bits)
Clculos:
1 = 2
n

t Fosc
4 PS PO
= 2
8

10ms 4MHz
4 4 10
= 6
timer2 = 2
n
x = 2
8
6 = 250
Conguracin inicial de registro/s:
t2con.(toutps3:toutps0)=1001: (Cong. de postescaler a
1:10 para el timer2).
t1con.tmr2on=1: (Permite el funcionamiento del timer2).
t1con.(t2ckps1:t2ckps0)=01: (Cong. de preescaler a 1:4
para el timer2).
tmr2=6: (Inicializa el timer2 en 6)
pie1.tmr2ie=0: (Deshabilita el timer 2).
pir1.tmr2if=0: (El registro del timer2 no se desbord).
intcon.peie=1: (Habilita el permiso de interrupciones de
los perifricos).
E. Consideraciones y diseo del control del dipswitch, pul-
santes.
Para evitar que la circuitera de la prctica sea muy larga,
se han activado las resistencias de pull-up del puerto B, para
ubicar los distintos dispositivos de la siguiente manera:
1) Dipswitch: Se lo coloca en los bits ms altos, a con-
tinuacin se indican las combinaciones que controlarn las
distintas opciones de la prctica.
SW2/RB7 SW1/RB6 SW0/RB5 OPCIN
0 0 X Muestra opcin
0 1
1 Contador ascendente
0 Contador descendente
1 0 0 Rreloj
1 0 1 Alarma
1 1 X Cronmetro
Table I
COMBINACIONES LGICA PARA EL DIPSWITCH.
2) Pulsantes: Para el caso de los pulsantes se ha decidido
las siguientes acciones.
PULSATE PIN PULSO OPCIN ACCIN
Pulsante 0 RB2
x Reloj
Incr. min
x Alarma
1
Cronmetro
Inicia
2 Pausa el #
Pulsante 1 RB1
x Reloj
Incr. hora
x Alarma
1
Cronmetro
Detiene
2 Encera
Table II
COMBINACIONES LGICA PARA LOS PULSANTES.
F. Consideraciones y diseo para la alarma.
La alarma se ha diseado de manera que emita una alerta
mediante un buzzer el cual sonar durante un minuto en
intervalos de 1seg. Adems esta ser congurable y en el
tiempo 0horas y 0min esta estar desactivada.
Tal como indica el datasheet, la corriente mxima que
soporta el buzzer es de 30mA, por lo que le daremos con
25mA
BUZ1
BUZZER
Q7
2N3904
R1
4.7k
RA0
Figure 7. Diseo del circuito para la alarma.
ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 8
1) Clculos:
Datos:
V cc = 5V
Ic = I
buzzer
= 25mA
hfe = 150
G = 5
Clculos para el transistor:
R
1
=
V
CC
V
D
I
C
hfe
G
=
5V 0.7
25mA
150
5
= 5160
R
1 aprox
= 4.7K
I
C Real
=
hfe (V
CC
V
D
)
R
1
G
=
150 (5 0.7)
4700 5
= 27.4mA
G. Consideraciones y diseo para el circuito de reset.
Tal como recomienda el docente, se ha diseado el circuito
de reset de la siguiente manera.
C5
22uF
R13
4.7k
D3
1N4007
MCLR
Figure 8. Diseo del circuito para el reset.
1) Clculos:
Datos:
I
ingreso
= 1mA
C5 = 22uF
Clculos para el transistor:
R
13
=
V
CC
I
ingreso
=
5V
1mA
= 5K
R
13 aprox
= 4.7K
I
ingreso Real
=
V
CC
R
13 real
=
5V
4700
= 1.06mA
H. Consideraciones y diseo para el contador.
Para el caso del contador ascendente y descendente, se han
diseado dos circuitos, que son:
1) Por interrupcin de la patita INT.: Para este caso se har
uso de un pulsante en la patita INT/RB0 del microcontrolador,
y para controlar el tipo de conteo ascendente/descendente, se
hace uso del pin SW0/RB5 del dipswitch.
2) Conteo mediante sensores.: Para realizar el contador
de eventos ascendente y descendente se ha utilizado dos
fototransistores con sus respectivos leds infrarrojos a una
distancia de aproximadamente 1cm. Para el conteo ascendente
se deber cruzar un objeto entre los leds y los fototransistores
de izquierda a derecha, y para el conteo descendente en sentido
contrario.
El circuito del diseo se muestra a continuacin:
D1
LED
D2
LED
R2
220
R9
220
C
E
4
3
U9
PHOTOTRANSISTOR
C
E
4
3
U10
PHOTOTRANSISTOR
R10
10k
R11
10k
f1
f2
Figure 9. Diseo del circuito para el contador.
Tal como se observa, el circuito dispone de dos salidas
f1 y f2, stas irn conectadas a los pines RB3 y RB4
ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 9
del micrcocontrolador respectivamente para realizar la lectura
de los fototransistores y determinar el conteo ascendente o
descendente.
3) Clculos:
Datos:
I
D1,D2
= 25mA
V cc = 5V
Rc
U9,U10
= 10K
Clculos para leds:
R
2,9
=
5V
25mA
= 200
R
2,9 aprox
= 220
I
D1,D2 Real
=
5V
220
= 22.7mA
VI. FUNCIONAMIENTO DEL PROGRAMA.
A. Descripcin de las variables globales del programa.
1) unsigned char num[10]: Contiene los cdigos en dec-
imal que representan el nmero del 0 al 9 en el display 7
segmentos.
2) unsigned char dis[6]: contiene el cdigo en decimal
para encender cada uno de los displays.
3) unsigned char matriz[5][6]: En cada vector se almacena
el cdigo para mostrar las palabras: Conteo., Reloj., Cronom,
Alarma, Opcin, en los displays (ya que la letra m no se
puede visualizar se muestra n. en el display).
4) unsigned char fcont=0: Bandera para realizar el conteo.
5) unsigned char fasc=0: Bandera para realizar el conteo
ascendente.
6) unsigned char fdsc=0: Bandera para realizar el conteo
descendente.
7) unsigned char t_max_cont=0: Variable que almacena el
tiempo mximo de espera antes de validar el conteo.
8) long int ncontador=0: Almacena el nmero del contador
que se va a visualizar.
9) unsigned char amin=0: Variable que almacena el valor
de los minutos de la alarma.
10) unsigned char ahor=0: Variable que almacena el valor
de las horas de la alarma.
11) unsigned char ba=0: Bandera para la alarma indica
que esta activada o desactivada, 1/0 respectivamente.
12) unsigned char falarm=0: Bandera para visualizar la
palabra si o no en los dos ltimos displays de la derecha
mientras el programa se encuentre dentro de la funcin de la
alarma.
13) unsigned char mseg=0: Almacena el valor de los
milisegundos del cronmetro.
14) unsigned char cseg=0: Almacena el valor de los se-
gundos del cronmetro.
15) unsigned char cmin=0: Almacena el valor de los
minutos del cronmetro llega hasta un valor de 99min.
16) unsigned char pb1=1: Bandera para el pulso del botn
1 cuando el programa se encuentra dentro de la funcin
cronometro.
17) unsigned char pb2=1: Bandera para el pulso del botn
2 cuando el programa se encuentra dentro de la funcin
cronometro.
18) unsigned char min=0: ALmacena el valor de los min-
utos del reloj.
19) unsigned char seg=0: ALmacena el valor de los se-
gundos del reloj.
20) unsigned char hor=12: ALmacena el valor de la hora
del reloj, inicializa en 12 horas.
21) unsigned char n[6]: Almacenar los 6 nmeros que se
visualizarn en los displays.
22) unsigned char y=0: Bandera para visualizar las pal-
abras Conteo., Reloj., Cronon., Alarn.a, Opcin en los displays
cuando el dipswitch se mueva de posicin. (ya que la letra m
no se puede visualizar se muestra n. en el display).
23) unsigned char display=0: Almacena la posicin del
display que se va a visualizar en la multiplexacin.
Ahora se detallar el funcionamiento de las funciones del
programa.
B. Descripcin de las funciones del programa.
1) void cong(void): Aqu se encuentra la conguracin
inicial de los puertos, y de las interrupciones que se utilizan
en la prctica.
2) void interrupt(void): Aqu se encuentran las sentencias
para comprobar el tipo de interrupcin que se ha dado en
el microcontrolador, para nuestro caso puede ser por: des-
bordamiento del timer0, desbordamiento del timer1, desbor-
damiento del timer2 o interrupcin por la patita int.
3) void subtimer0(void): Aqu se ejecuta el cdigo de
programa de la multiplexacin, es decir enciende cada display
con la informacin correspondiente, en nuestro caso puede ser
una letra o un nmero.
4) void subtimer1(void): Dentro de esta funcin se suma
uno al segundo, se comprueba los lmites de las variables del
reloj y se enciende la alarma en caso de estar activada.
5) void subtimer2(void): Dentro de esta funcin se suma
uno al milisegundo del cronmetro y se hace la comprobacin
de los lmites de las variables.
6) void opcion(unsigned char opc): Dentro de esta funcin
se cargan los cdigos en el vector n[] que generan la palabra
Conteo., Reloj., Cronon., Alarn.a, Opcin en los displays.
7) void contador(void): Dentro de esta funcin se cargan
los dgitos de la variable contador en el vector n[] para ser
visualizados en los displays.
8) void reloj(void): Dentro de esta funcin se cargan los
dgitos de las variables seg, min, hor en el vector n[]
para ser visualizados en los displays, adems se comprueba
el estado del pin RB5 con el cual ingresamos o salimos de la
opcin para congurar la alarma. Dentro de la opcin alarma
ING. ELECTRNICA. SISTEMAS MICROPROCESADOS I MANUEL SAGBAY 10
tambin se cargan los dgitos de las variables amin, ahor
y la palabra si o no en el vector n[] para ser visualizados
en los displays.
Para los dos casos, reloj/alarma, se comprueba el estado
de los pulsantes 1 y 2 que modican la hora y los minutos,
respectivamente.
9) void cronometro(void): Dentro de esta funcin se cargan
los dgitos de las variables mseg, cseg, smin en el vector
n[] para ser visualizados en los displays, y se comprueba el
estado de los pulsantes 1 y 2 que realizan las acciones que se
muestran en la tabla 2.
10) void rebote(void): Dentro de esta funcin se realiza el
cdigo que evita que el rebote en los pulsantes me d una
mala lectura de las acciones de cada pulsante.
11) void conteo(void): Dentro de esta funcin se com-
prueba el estado de los pines RB3 y Rb4 en donde se en-
cuentra conectados los fototransistores para realizar el conteo
ascendente o descendente, adems contiene el cdigo que me
valida el conteo en el caso de realizarlo mediante el pulsante
en RB0 (interrupcin externa).
12) main(): Dentro de esta funcin se realiza el salto a
la funcin de cong y luego el programa se encierra en
un bucle innito while(1) y comprueba el estado de los pines
RB5, RB6, RB7 en donde se encuentra conectado el dipswitch
para ingresar a cada opcin del programa: Reloj, alarma,
cronmetro o contador.
VII. CONCLUSIONES Y RECOMENDACIONES.
Para realizar la multiplexacin de los displays, si bien
es cierto que se el consumo mximo puede llegar a ser
aproximadamente 140mA en el caso en el que todos los
segmentos estn encendidos, este puede ser realizado sin
los transistores, teniendo en cuenta que la multiplexacin
es bastante rpida.
En cuanto al uso del cristal oscilador externo para el timer
1 que se realiza en los pines RC0 y RC1, se debe tener
en cuenta el uso de los condensadores que recomienda
el fabricante del microcontrolador, ya que sin stos, el
oscilador no trabaja bien.
Se debe tambin asegurar que el pin 1, MCLR/Vpp, est
en estado lgico alto para que el pic trabaje sin inconve-
nientes, ya que el master clear del microcontrolador no es
congurable por software, usar el circuito recomendado
por el fabricante.
En el caso del cronmetro se debe calcular el error que
tiene, ya que al hacer el incremento del milisegundo tan
rpido, el tiempo que se pierde en las interrupciones en un
tiempo largo es bastante considerable, por lo que debemos
tratar de optimizarle lo ms posible, tal como indica el
docente, con un error del ms/menos 0.5 segundos por
cada minuto.
De igual manera se debe colocar un condensador de
1uF tan cerca de los pines de alimentacin del micro-
controlador como sea posible, esto para evitar que las
cadas de tensin de la fuente provoquen un reset al
microcontrolador.
Considerar la cantidad de cdigo que se utiliza en las
interrupciones, ya que mientras el programa se encuentre
dentro de esta funcin y se d otra interrupcin, sta no
podrn ser atendida sino hasta cuando el programa salga
de dicha funcin.
Para este caso, debido a que el microcontrolador no tiene
prioridades altas o bajas en el caso de las interrupciones,
esto se deber solucionar por software, ubicando a las
interrupciones que se considere ms importante al inicio
de esta funcin.
Se recomienda que las resistencias de colector de los
fototransistores sean mayores a 4.7KOhm para que el fo-
totransistor trabaje en corte/saturacin sin inconvenientes
y la lectura en los pines del microcontrolador no sea
errnea.
REFERENCES
[1] Tutoriales PIC, Antonio [Madrid-Espaa], viernes 22 de junio del
2012, en lnea, <http://picfernalia.blogspot.com/2012/06/interrupciones-
conceptos-basicos.html>.
[2] Programacin de los microcontroladores, MikroElectrnika, en lnea,
<http://www.mikroe.com/chapters/view/80/capitulo-2-programacion-de-
los-microcontroladores/>
[3] Polling, Wikipedia, 8 mar 2013, a las 19:35, en lnea,
<http://es.wikipedia.org/wiki/Polling>
[4] Microprocesadores, Gua de Laboratorio, Universidad
Nacional de San Antonio Abad del Cusco, en lnea,
<http://in.unsaac.edu.pe/ecarrasco/microproc/guias/guia09-
interrupciones/guia09-interrupciones.pdf>.
[5] Prctica 9: Interrupciones (I), Sistemas Electrnicos y Automticos, en
lnea, <http://isa.umh.es/asignaturas/sea/practicas2C/P9/practica9.pdf>.
[6] Manual del pic 16F87X v1.0, Microchip (Firtec-
Capacitacin en tecnologa de alto nivel), en lnea,
<http://proton.ucting.udg.mx/tutorial/Manual_PIC16F87X/Manual_PIC16F87X.pdf>
[7] Leds y display de 7 segmentos, Monografas.com, Enviado por: Vios31,
en lnea, <http://www.monograas.com/trabajos11/leds/leds2.shtml>
[8] Zumbador, Wikipedia, 24 ene 2014, a las 03:45, en lnea,
<http://es.wikipedia.org/wiki/Zumbador>
[9] Buzzer/AI-1223-TWT-5V-R, Elcodis, en lnea,
<http://elcodis.com/parts/307/AI-1223-TWT-5V-R.html#datasheet>.
[10] PIC16F87XA datasheet 28/40/44-Pin, Microchip, en lnea,
<http://akizukidenshi.com/download/PIC16F877A.pdf>

S-ar putea să vă placă și