Documente Academic
Documente Profesional
Documente Cultură
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>