CONTADOR DE EVENTOS
Este circuito cuenta desde 0000 hasta 9999 en
forma ascendente o descendente todo tipo de
eventos. Aprenderemos a manejar técnicas de
multiplexado para la presentacién de datos nu-
méricos en visualizadores de siete segmentos y a
utilizar macros en nuestros programas.
Caracteristicas
* Cuenta en un rango entre 0 y 9999.
* Limite de cuenta programable, tanto en modo
ascendente como descendente.
* Generacién automatica de una sefial de alarma
cuando la cuenta llega a su limite prefijado.
* Conexién externa para un dispositivo dealarma.
ars pct sot mcnconrasaons MBC.eontador de eventos
En muchos procesos industriales resulta muy
itil un dispositivo que Hleve la cuenta de algin
evento fisico que ocurra con cierta frecuencia,
por ejemplo, la cantidad de objetos que pasan
por una banda transportadoras y genere al mis-
‘mo tiempo una sefial de control cuando esa cuen-
tallegue [Link] valor limite, Nuestro proyecto res-
ponde a esta necesidad. El mismo, identificado
con la referencia K-325 de CEKIT, cuenta las
veces que se produce un evento extemno, detecta-
do mediante un pulsador u otro tipo de disposi-
tivo de entrada, y presenta el resultado en cuatro
visualizadores (displays) de siete segmentos.
Adicionalmente, genera una sefial de con-
trol o alarma cuando esa cuenta llega a un valor
mite, previamente programado por ¢l usuario.
La direccién de la cuenta, ascendente o descen-
dente, es también programable por el usuario.
Funcionamiento
En la figura 6.1 se muestra el diagrama esque-
mitico del contador de eventos CEKIT K-325.
El corazén del sistema es un controlador
PICI6F84 (IC1), el cual controla cuatro displays
de siete segmentos de cétodo comun (DISP1-
DISP4) a través de un decodificador BCD (IC2).
El primer display (DISP1) representa el digito més
significativo de la cuenta y el tiltimo (DISP4) el
menos significativo. Los cétodos de los displays
se conectan y desconectan de tierra mediante
cuatro transistores NPN (QI-Q4), controlados
a su vez por las lineas 4, 5, 6 y7 del puerto B. Las
lineas 0, 1, 2 y 3 del puerto A, por su parte, pro-
porcionan secuencialmente el dato que serd vi-
sualizado en los displays.
Para cada digito de la cuenta se utiliza un
cédigo BCD de cuatro bits, donde el MSB (bir
de mayor peso) es el RA3 (D) y el LSB (bit de
menos peso) es el RAO (A). Las cuatro lineas
anteriores alimentan un circuito integrado 7448
(12), el cual hace la conversién de BCD a siete
segmentos. Las resistencias RI a R7 tienen por
objeto limitar la corriente que fluye a través de
los segmentos de cada display a un valor seguro.
El microcontrolador recibe tres sefiales de
entrada: una por el bi¢ 2 del puerto B (pin 8),
proveniente de un pulsador ($1), y dos por los
bits 0 y 1 del mismo puerto (pines 6 y 7), pro-
venientes de dos puentes o jumpers (J1 y J2). La
salida de alarma o fin de cuenta del sistema se
hace a través del ie 3 del puerto B (pin 9). Ini-
cialmente, es necesario programar el valor Iimi-
teen el cual se genera esta sefial de control. Para
que esto sea posible, debe estar puesto el juum-
‘per Jl, lo cual obliga al sistema a entrar en el
modo de programacién
Después de instalado J1, el contador sitvia
todos los displays en cero (0000) y queda listo
para leer el dato que se va a programar como Ii-
mite. Para fijar este iltimo, el usuario simple-
mente debe oprimir el pulsador $1 hasta que la
cuenta observada en el display llegue al valor de-
seado, por ejemplo 2345.
Una vez se llega a este punto, debe especitfi-
carse la direccién de la cuenta, Para ello se utiliza
el jumper J2. Si este tiltimo esté conectado, la
cuenta se efectia en sentido descendente a partir
del valor fijado, mientras que si esta desconecta-
do, se hace en sentido ascendente a partir del
mismo valor. Las funciones de los jumpers Jl y
J2se resumen en la tabla anexa a la figura 6.1.
En el modo ascendente, Ia cuenta en los dis-
‘plays se inicia con el valor 0000 y se incrementa en
una unidad con cada pulso de entrada externo,
hasta llegar al valor programado, Cuando esto su-
cede, a sefial de control disponible en la nea RB3
(pin 9) se activa en alto y permanece asf por algu-
nos segundos. Hecho esto, a cuenta retorna a 0000
para iniciar una nueva cuenta ascendente.
En el modo descendente, por su parte, la
cuenta en los displays se inicia con el valor pro-
gramado previamente y se decrementa en una
tunidad con cada pulso de entrada externo hasta
llegar a cero. Cuando esto sucede, nuevamente
se dispara, durante algunos segundos, la salida
de control de alarma, Hecho esto, la cuenta re-
2 Mice: cons nse erst5
Figs ap os! sp? _pspys spa
1 Re
eng
ae ES OF ORORO
Me) rele eee 0. 7
ae ‘ls i oO oO. oO. o.
w7]_ te] i] 2} hia yo at ho
op RAD AA AAD RAS AG? ABS ABS
+
1
ras [16
Ae ci osery a
7 PICteFe4 me 1
eee a
Figura 6.1 Diagrara esquemético del proyecto
torna al valor programado para iniciar una nue-
va cuenta descendente.
deducir que cuando se tiene un nivel légico
alto en la base de cualquier transistor, éste en-
tra en estado de conduccién y conecta dind-
Manejo de los displays de siete segmentos — micamente a tierra la linea de habilitacién del
Por la configuracién del circuito, es muy ficil display correspondiente. Si ninguno de los tra
:
curs pritico sobre Mioconroliores CERCA: ®Contador de eventos
sistores tiene un nivel I6gico alto aplicado en
sus bases, no se encendera segmento alguno.
Asi, por ejemplo, si se quiere mostrar el ni-
mero tres (3) en el segundo display menos signi-
ficativo (DISP3), se deben seguir estos pasos:
1, Deshabilitar todos los segmentos para evitar
visualizaciones indeseadas
2. Colocar el ntimero binario 0010 en el puerto
que controla los transistores (RB7...4)
3. Enviar el cédigo binatio 0011 por el puerto
que controla los segmentos (RA3...0)
Para visualizar simulténeamente los datos en
los cuatros displays, es necesario conectar los tran-
sistores en forma secuencial mientras se envian,
porel puerto que controla los segmentos, los da-
tos correspondientes a cada digito. Este proceso
debe ser efectuado a una velocidad tal que engafie
la retina y parezca que se realiza simulténeamente
sobre todos los displays.
El tiempo necesario para sostener el dato en
cada display y producir esta sensacién varfa depen-
diendo, entre otros factores, del valor de las re
tencias limitadoras, del niimero de digitos que se
rengan que mostrar y de las caracteristicas propias
del display. este proceso se le conoce como mul
plexaje o multiplexacién y es muy utilizado en los
ircuitos con microcontroladores
Descripcién del programa
Concepto de macro
Una de las principales metas de todo programa-
dor en lenguaje ensamblador es elaborar progra-
on
‘Figura 6.2 Esquema de habiltacén de un cisplay determinado
mas bien estructurados, modulares, éptimos y en
lo posible “bonitos”, es decir que respondan aun
criterio estético, Una de las técni
das para lograr este propésito son los “macros”.
Un macro es una secuencia de instrucciones que
pueden insertarse dentro del cédigo de ensambla-
dor en cualquier momento simplemente llaman-
dolas a través de una instruccién CALL.
-as més conoci-
El macro debe definirse primero antes de
ser invocado. Dentro de un macro puede in-
vocarse otro macro o invocarse a él mismo de
manera recursiva.
En d programa de este proyecto se han clabora-
do algunos macros que cumplen con funciones es-
pecificas. Por ejemplo, se han creado macros para
HABLOISPL — MACRO
GCF PORTB,4; OESHABILITO DISPS
Cr PORTB!S; DESHABILITO DISP3
BCE PORTS 6; DESHABILITO OISP2
BSF PORTB,7; HABILETO OZSPL
xo
HABr_DIsP2 —wacRo
ECF PORTS,4; DESHABILITO DIPS
BCE PORTS!S; DESHABILITO OISP3
BCE PORTS7; DESHABTLITO OTSPL
BSF PORTB,6; HARILITO OTSP2
eNom
HABIOISP3AcRO
rad DESHABILITO OISP4
Br DESHABILITO DISP1
Ber DESHABILITO DISP2
BSF HABILITO OSP3
vow
HABI_OISPs Macro
BF DeSHABILITO OISP1
BF DDESHABILITO DISP3
Ber DESHABILITO DISP2
BSF NABILTTO DISPA
xm
‘Figura 6.3 Macros de habiltacién de cada uno de los displays
© cexsr: Curso practico sobre Microcontroladoresae
en
Figura 6.4 Dieorama de fujo de
visuaizacign en os apis
producir la seftal de habilitacién
decada uno de los display. Cuan-
do se pretende visualizar un dato
en algiin display determinado, se
debe habilitar ese display y desha-
biltar los demas, figura 6.2. Los
‘macros de la figura 6.3 hacen esa
tarea, de manera, que invocando
sove 0rGi.W
SOvWF_ PoRTA
HABT_OTSP3
CALL RETARDTTO
Move 01G2.W
Move poRTA
HaBI_oIsP2
CALL” RETARDITO
Move 0163,"
Move poRTA
HaBT_pIse3
CALL RETAROITO
Move oIGt.W
MovNF PORTA
HABI_OISPa
CALL RETAROITO
RETIN 0
el macro HABI_DISP1 dentro
del programa principal, se ejecutan
Jas instrucciones contenidas en
Para visualizar los datos
adecuados en cada uno de los
PRINCIPAL
A ocean
au
oro,
STFSS
coro
ostRAR
GUARDAR
PORTE,
PRINCEPAL
saLIR
waco
co
: Loa
incReveiran.P STFS
ern
B ou
wuevo
‘000_RUN
PORTS,2
°
RETARDD
aut
arrsc
coro
aut
cau
MosTRAR
RETIN ©
MosTRAR
Porra,2
MOSTRAR
cau
GUAROAR MOVE
Novae
Nove
Movne
Move
Nowe
Move
Movne
coro.
orce,W
prcs'P
DrG3,H
ores’?
Drce,W
orez’P
orGiW
ore’
SALA
SE PONE EL CONTEXIDO
DEL DIGITO 1 EN ELPTO A.
HABILITO EL DISPLAY 2
AAGUAROAR UN MOMENTO
SE PONE EL CONTENIDO
DEL DYGITO 2 EN EL PTO A
HABILITO EL DISPLAY 2
[AGUARDAR. UN MOMENTO
5 SE PONE EL cowTENTD0
} DEL DIGITO 3 EN EL PTO A
HABILITO EL DISPLAY 3
AAGUARDAR UN MOMENTO
+ SE PONE EL conTENTDO
DEL DIGITO 4 EN EL PTO A
HABILITO EL DISPLAY 4
AAGUARDAR. UN MOMENTO
5 RETORNO DE LA SUBRUTINA
Figura 6.5 Cédigo de a ruta MOSTRAR
segmentos se utiliza una subru-
tina denominada MOSTRAR.
En la figura 6.4 podemos ver el
diagrama de flujo de esta rusi-
na, Su cédigo fuente se presen-
tacn la figura 6.5.
{ RUTINA DE VISUALTZACTON
JINCREMENTAR_P ;TNVOCO RUTINA DE
HINCRENENTO DEL NUMERO A
+ VISUALIZO DE. NUEVO
# GUMRDO EL NIMERO
CHEQUED EL JUMPER 32
} ST-NO Se HA QUITADO
REGRESO PARA SEGUIR. AUMENTANOO
+ CHEQUEO EL PULSADOR DE
# enrpapa
# RETRO SI_NO ESTA PULSADO
$ AGUARDO UN MOMENTO,
VASUALIZD Y CHEQUED DE
PARA EVITAR
} REBOTES INDESEADOS.
INCREMENTAR_P } SIESTA PULSADO
} IWVREVENTO LOS prcrTos
$Y VISUALIZ0 DE NUEVO.
CALCULARLING! ESTA ES LA
# RUTINA DE cALCULO EXACTO OE
} CADA UNO DE LOS DIGITOS.
‘AQUI_ALMACENO CADA UNO
} DE Los OIGITOS EN
# REGISTROS AUKILIARES,
} UBICADOS EN OTRAS
} POSECEONES EW Re
Figura 6.6 Suorutina de programacién del valor limite
*
corsoprdteo sabe Merncroroaioes AMICI:Contador de eventos
ia
Figura 6.7 Dagrama de fujo de ia subrtina de programacién
La rutina anterior es en realidad muy sen-
cilla, Su funcién consiste en tomar el conteni-
do de los registros DIG1, DIG2, DIG3 y DIGS,
los cuales contienen el dato completo que se
debe entregar a cada uno de los displays, y en-
viar el cédigo de cada digito, uno a la vez, al
puerto A mientras habilita el display correspon-
diente. Para ello recurre al macro asociado a ese
display. En la figura 6.6 observamos la subrut
na con la cual se programa el valor limite del
contador y en la figura 6.7 se muestra su res-
pectivo diagrama de flujo.
En esta subrutina se lee el pulsador de entrada
conectado al bit2 del puerto B (bloque B del eéd
{g0). En caso de confirmarse una entrada externa, se
invoca la subrutina CALCULAR_ING, la cual se
cencarga de asignar a cada uno de los registros DIGL
hasta DIG4, su valor exacto.
Hecho esto, mediante la subrutina GUAR-
DAR, los valores de los digitos se almacenan en
Ascpes Macro $5 MACRO QUE DETECTA
# EL SENTIDO EL
C GOTO ASCEND CONTEO MEDIANTE EL
vescen BSF BANDERA,@ } CHEQUEO DE EL
REST_DIGITOS " BIT’ DEL PUERTO 8
GOTO our”? Sean E80 Los oIGrTOS
AsceNo CF BANOERA,@ {INICTAN EN 0 0 CON
‘TNECTAR_DIGITOS. } EL VALOR PROGRAMADO
our nor
ENO
LOE a
Sono RUN ASC_DES SE HMOATA ONDE
BTFSS BANDERA,O | ASCENDENTE 0 DESCEN.
D GOTO INRBANTAR'; SEGUN EL BIT @ DE
BANDERA, SALTO A
GOTO _DECREMENTAR INCREM.” 0 DECREM.
i -BLOQUE E —
JINCREMENTAR BTFSC PORTB,2 ; CHEQUEO DE EL
GoTo Norma,
RETARD
CALL RETARD} EVITAR LECTURA DE
E CALL wosTRAR } REBOTES DEL PULSAOMR
BTFSC PORTB,2 ST SE CORROBORA LA
Leu, = DOO Lt
GoTo ewe | SUBRUTINA QUE HACE
CALL MOSTRAR” | UN INCREMENTO DE UNA
UL CALGULALINC } UNIOAD EN LOS.
VALORES DE LOS ISLAY
‘CALL wosTRAR SE FINALIZA MOSTRANDO
‘coro Nommal. + Los oaTos.
DECREMENTAR BTFSC PORTE,2 | SE_LEE EL FPuLsAnoR oF
2 BvTRADA,
GOTO NORMAL SE_AGUAROA UN RETARDD
‘CALL RETARDO— PARA EVITAR LECTURA DE
‘CALL MOSTRAR }REBOTES DEL PULSADOR
TESC PORT. SSE CUREDIRA UA LC
Figura 6.8 Cicigo dela subrutina que ejecuta ol funcionamiento
‘normal dol sistema
registros auxiliares para ser utilizados mas adelante
con el fin de verificar cuando debe generarse la se-
fal de contol, En el bloque A del cddigo se efectia
un ciclo continuo, Mediante este ciclo se muestran
los datos programados actualmente, se determina
si hay entrada externa y se guardan los datos nue-
vos. Dicho ciclo se repite indefinidamente mien-
tras el jumper J1 no sea removido. Cuando se retira
& oT aFigura 6.9 Diggrama de fyjo de la operacén en mado RUN
JI el programa entra al modo RUN o de ejecucién
normal del sistema, Las acciones efectuadas por esta
parte del programa podemos apreciarlas en el cédi-
godela figura 6.8 y en el diagrama dela figura 6.9.
En el bloque D se lee el estado de J2 para
determinat sila cuenta va.a ser efectuada en For-
maascendente o descendente. En el bloque C se
hace un macro el cual, segtin el estado de J2, hace
que los valores de los registros DIGI a DIG4
adopten el valor 0000 en caso de cuenta en modo
ascendente, o el valor programado previamente
si se ha scleccionado el modo descendente.
Enel bloque E del programa se monitorea per-
manentemente el estado de la entrada externa para
hacer la cuenta, Si, en un momento dado, se lee
tuna entrada valida por este pin, se invoca la subru-
tina CALCULAR_INC 0 CALCULAR_DEC
para calcular el nuevo valor de los registros que guar-
dan el valor de cada digito. A partir de este punto se
centra en un nucvo ciclo, en el cual se incrementan
1 decrementan los valores de los digitos, se mues-
tran en los displays y se verifica si han llegado al
valor limite para disparar la alarma o sefial de con-
trol, bloque F del programa.
PARA SABER MAS
Qué es un macro?
Por definicién, un “macro” se refiere a un ele-
mento que se compone de varias partes mas
pequefias, Esta misma definicién se aplica alos
macros del ensamblador, los cuales son con-
juntos de directivas e instrucciones definidas por
elusuario y que pueden ser incluidos dentro det
Ccédigo al invocar el macro.
Losmacros pueden escribirse de tal forma que acep-
tenargumentos,haciéndolos uy flexbes. Enreoras,
eluso de mares ene as Suites ventas:
‘ Proporcionan un atto nivel de abstraccién, ha-
ciendo los programas mas comprensibles
* Ofrecen soluciones consistentes a funciones
que se realizan con cierta frecuencia
‘© Simplifican los cambios
© Facilitan la prueba y depuracién de! programa
Lasaplicaciones més frecuentes de las macros son:
* Construccién de tablas complejas
* Creaccién de cédigos usados con frecuencia
* Realizacién de operaciones complejas
Definicién de un macro
La definicién de un macro se divide en tres
partes: la cabecera, el cuerpo y la terminacién.
La cabecera de un macro posee la siguiente
sintaxis:
MACRO [ [, ] ]
donde es el nombre del macro y
son los parémetros que se le entregan
al macro desde el punto donde se invoca. EI
cuerpo del macro empieza inmediatamente des-
pués de la cabecera y continiia hasta que se le
da la terminacion. El cuerpo del macro se com-
pone de una serie de lineas de cédigo que cum-
plen con una determinada labor.
La directiva ENDM termina la definicion de! ma-
cro, Ela debe existir antes de que se encuentre
otro nuevo macro.
corm prici sore contains CMIICIT.: &Contador de eventos
Ensamblaje
Foura 6.10 1 Fils eee aaah ha
Conjunto de ig ove cia os ae AW
‘componentes etal teraiacs
pee ree 2 oye Cadre ramet Fs
‘accesorios que se +. oer ‘ore secon or 00mg 290
‘requieren para sitet Snarabe sno ena
ensamblare om, getemann
pose man fesawewer 300 Ve
3 Blvsyme SSNS tl
ho it rear
Pata ' SS eeaaeezie
‘natal y vote los : Sie arto ot Ss
uentes marcadas en el 1 ‘rcs sen pe
‘ircuitoimpreso,
1
Fura. ae paso
Insta os cuatro
condensers cercos
0, 02, c4y6
Paso2 Figura 6.16
Lego insta suede
fas esistoncias (16) aso7
diese Intl X7 ys
Figura 6.12 -condensadores electro-
ins Cy C5
cbservando su postin
Figura 6.17
Paso 3 i =
Paso 8
Pea rae ea Installs terminates
Her denelok paras poentes Jy 2,
ss conector Je
puisador Sy el conector
de alimentacion
Figura 6.18
Paso 4
Instale y suede los cinco Paso 9
transistores NPA Instale os
‘bservando su posicion Curt integrados en
correcta sus bases ys puentes
tye
Figura 6.14 pile
Paso 5
Insta y suede fs cuatro
cisplays, ol EDI, of
regulador [3 y of pete
rectifcador BR.
Figura 6.15
Paso 10, Prueba final
‘Almente ecircuto con una fuente regula 0 o, hasta de 12 voltos. Conect los puentes Jt para activar el mado de programacién y
2 para estblecer el modo de fa cuenta. Con el pulsador St seleccione el nimero que se va a contac Retire ol pente 1 y presione
1 repetidameni, an ese momento se debe incrementar o decrementar el nimero segin el modo seleccionado. SI noes 2s, revise
"muy bien las conexiones y verique que el programa est bin grabado en e! micracontrolador.
se RICIM: cv 90000 ercentsers