Está en la página 1de 18

INTRODUCCIN

Cada vez es mayor el nmero de medicamentos que tratan de paliar las distintas enfer-
medades que padecen los humanos. En algunos casos, como sucede con la enfermedad
VIH, es tal la cantidad de medicamentos y los distintos horarios a los que se deben tomar
que resulta imprescindible algn sistema que recuerde e indique cules son las pastillas
a tomar, las dosis y el momento preciso de la ingesta.
Con este fin surgen en el mercado los pastilleros electrnicos. Dotados de una
cierta electrnica para ser programados y avisar de la toma necesaria, as como de unos
compartimentos para el almacenamiento de las dosis necesarias, estos aparatos pueden
resultar de gran utilidad.
A continuacin, se presenta el desarrollo completo de un proyecto para la implemen-
tacin de un pastillero electrnico. Su autor es el alumno Alexander Cuesta, de la Univer-
sidad de Deusto, y destaca por su sencillez, flexibilidad y potencia de los mensajes.
23
Figura C.1. Fotografa de un pastillero electrnico.
Proyecto de un pastillero
APNDICE
C
24 MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES
Figura C.2. Organigrama de funcionamiento del pastillero electrnico.
PROYECTO DE UN PASTILLERO 25
DESCRIPCIN
Para la implementacin de este proyecto se har uso del PIC12F508. Resulta de inters
utilizar el menor nmero de dispositivos para simplificar su manejo, reducir el volumen
y abaratar costes. Es por eso por lo que el pastillero estar dotado de una pantalla LCD,
varios leds, un zumbador y slo dos pulsadores para realizar la funcin encomendada.
Con un pulsador se navegar por el men. Pulsando consecutivamente se acceder
de la pantalla 1 (presentacin de los tiempos de cada pastilla) a la pantalla 2 (configu-
racin del tiempo de la pastilla 1). Si se volviera a accionar el pulsador 1, se accedera
a la pantalla 3 (configuracin del tiempo de la pastilla 2), y as sucesivamente. Si en
cualquiera de las dos pantallas de configuracin se activa el pulsador 2, se incrementar
la cuenta atrs de la pastilla 1 o 2 dependiendo de la pantalla en la que se encuentre el
usuario. La limitacin de este proyecto radica en que la mxima de temporizacin dispo-
nible es de noventa y nueve minutos.
Una vez configurados los tiempos de cada pastilla, se pueden dar dos situaciones:
Que el tiempo de la pastilla 1 llegue a su fin, en cuyo caso se encender el led rojo
y el zumbador emitir un sonido durante cinco segundos.
Que el tiempo de la pastilla 2 llegue a su fin. En este caso, se encender el led
verde y el zumbador emitir un sonido durante cinco segundos.
En ambos casos, tras haber acabado la cuenta, se reiniciar la temporizacin vol-
viendo sta a empezar.
La Figura C.2 muestra el organigrama de funcionamiento del mismo.
En el CD tambin se puede encontrar tanto el cdigo fuente del proyecto como un
vdeo demostrativo del funcionamiento del mismo.
MATERIALES UTILIZADOS PARA EL PASTILLERO ELECTRNICO
PIC 12F508
Controlador para LCD SYM20AA
Una pantalla LCD
Dos pulsadores
Dos leds
Un zumbador
dos resistencias 300
Tres resistencias 1 K
Una resistencia 10 K
Cables de conexin
DIAGRAMA DE CONEXIN
Los elementos del pastillero deben conectarse siguiendo el esquema presentado en la
Figura C.3.
26 MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES
Ntese como para poder hacer uso de la pantalla LCD con slo una patita del
PIC12F508 se hace uso del controlador serie a LCD SYM20 AA. El resto de dispositivos
empleados son perifricos comnes: leds, pulsadores y un zumbador.
IMPLEMENTACIN DEL PROGRAMA
A continuacin, se describen las distintas partes del cdigo fuente del proyecto divididas
en distintos apartados.
Inicializacin del programa y constantes de comunicacin LCD
Para hacer uso del controlador serie a LCD SYM20AA se hace uso de las siguientes
constantes:
Figura C.3. Diagrama de conexionado del pastillero.
PROYECTO DE UN PASTILLERO 27
list P=12F508
include P12F508.INC
__config _CP_OFF&_WDT_OFF&_MCLRE_OFF&_IntRC_OSC
;Constantes necesarias para la comunicacin entre PIC y SYM20AA
CLKIN equ .4000000 ;Frecuencia del oscilador expresada en ciclos/segundo
BAUDIOS equ .9600 ;Velocidad de transferencia
T_MODO equ 1 ;Transmite 1 el bit LSB (a 0 transmite 1 el bit MSB)
R_MODO equ 1 ;Recibe 1 el bit LSB (a 0 recibe 1 el bit MSB)
T_Nbit equ .8 ;N de bits a transmitir (7 u 8)
R_Nbit equ .8 ;N de bits a recibir (7 u 8)
Sbit equ .1 ;N de bits de stop (1 o 2)
Transmisin serie
La comunicacin con el LCDS YM20AA se hace a travs del protocolo RS-232. Para
ello, se hace uso de dos patitas del pic y de ciertas variables.
Figura C.4. Implementacin fsica del pastillero sobre una protoboard.
28 MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES
;Lneas del micro
#define Txd_pin GPIO,4 ;Lnea de transmisin
#define Rxd_pin GPIO,6 ;Lnea de recepcin
;Variables para RS232
RS232VAR equ 0x07 ;Inicio de las variables (5) empleadas
;por las rutinas de Transmisin/Recepcin
Variables de programa
Las variables utilizadas a lo largo del programa se describen a continuacin.
;Variables del programa
Temp_0 equ 0x0C
Temp_1 equ 0x0D
Temp_2 equ 0x0E ;Variables temporales de propsito general
minPas1_2 equ 0x0F ;Minutos Pastilla 1 Decenas
minPas1_1 equ 0x10 ;Minutos Pastilla 1 Unidades
segPas1_2 equ 0x11 ;Segundos Pastilla 1 Decenas
segPas1_1 equ 0x12 ;Segundos Pastilla 1 Unidades
minPas2_2 equ 0x13 ;Minutos Pastilla 2 Decenas
minPas2_1 equ 0x14 ;Minutos Pastilla 2 Unidades
segPas2_2 equ 0x15 ;Segundos Pastilla 2 Decenas
segPas2_1 equ 0x16 ;Segundos Pastilla 2 Unidades
minPas1_1G equ 0x17 ;Minutos Pastilla 1 Decenas Guardadas para que cuando
;acabe vuelva a empezar
minPas1_2G equ 0x18 ;Minutos Pastilla 1 Decenas Guardadas
para que cuando
;acabe vuelva a empezar
minPas2_1G equ 0x19 ;Minutos Pastilla 1 Decenas Guardadas
para que cuando
;acabe vuelva a empezar
minPas2_2G equ 0x1A ;Minutos Pastilla 1 Decenas Guardadas
para que cuando
;acabe vuelva a empezar
milPas1 equ 0x1B ;Minutos Pastilla 1 Milsimas
milPas2 equ 0x1C ;Minutos Pastilla 2 Milsimas
estado equ 0x1D ;Variable de estado donde se guardan n.
o
pantalla, Led
;ON/OFF, Activada cuenta
;atrs Pas1/Pas2
milLed1 equ 0x1E ;Milsimas Led1 para mantenerlo 5 segundos
milLed2 equ 0x1F ;Milsimas Led2 para mantenerlo 5 segundos
PROYECTO DE UN PASTILLERO 29
La variable estado responde a los bits representados en la Figura C-5.
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
On Led 2 On Led 1 On Past2 On Past1 N. Pantalla
Figura C-5. Descripcin de los bits de la variable estado.
Vector de reset
ORG 0
goto inicio
ORG 5
Tablas para el manejo de mensajes
Para mostrar mensajes sobre el LCD, stos se definen previamente en distintas tablas.
;Tabla con los nmeros para el LCD PCL apunta a la siguiente instruccin
;a ejecutar
Tabla_Num addwf PCL,F
retlw 0
retlw 1
retlw 2
retlw 3
retlw 4
retlw 5
retlw 6
retlw 7
retlw 8
retlw 9
;Tabla de mensajes
Tabla_Mens movwf PCL ;Calcula el desplazamiento sobre la tabla
Mens_0 equ $ ;Mens_0 apunta primer carcter de mensaje0
dt PASTILLERO ,0xFF ;dt coleccin de retlw
;(es ms bonito)
Mens_1 equ $ ;Mens_1 apunta primer carcter de mensaje1
dt PASTI.1 PASTI.2,0xFF
Mens_2 equ $ ;Mens_2 apunta primer character mensaje2
dt CONFIG PAST1:,0x0D,0xFF
Mens_3 equ $ ;Mens_3 apunta primer carcter mensaje 3
dt CONFIG PAST2:,0x0D,0xFF
Mens_4 equ $ ;Mens_4 apunta primer carcter mensaje 4
dt MINUTOS,0xFF
30 MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES
Envo de mensajes al LCD
Para el envo de mensajes a la pantalla LCD se hace uso de la siguiente rutina.
;******************************************************************
;Mensaje: Esta rutina enva va serie RS232 el mensaje cuyo inicio est
;indicado en el acumulador. El fin de un mensaje se determina mediante
;el cdigo 0xFF
;******************************************************************
Mostr_Mens movwf Temp_1 ;Salva posicin de la tabla
Mensa_1 movf Temp_1,W ;Recupera posicin de la tabla
call Tabla_Mens ;Busca carcter de salida
movwf Temp_2 ;Guarda el carcter
movlw 0xFF
subwf Temp_2,W
btfss STATUS,Z ;Mira si es el ltimo
goto No_ult ;No
return ;S
No_ult movf Temp_2,W ;Recupera carcter a transmitir
movwf Txdreg
call TxD ;Transmite el carcter
incf Temp_1,F ;Siguiente carcter
goto Mensa_1
include RS232LOW.INC ;Incluir rutinas de Transmisin/
;Recepcin
Rutina de retardo
El cdigo fuente del programa tambin hace uso de la siguiente rutina cuya funcin es
la de conseguir un retardo.
delay movwf Temp_0 ;El bucle externo se repite x veces
delay_0 movlw ~.156
movwf TMR0 ;El TMR0 se carga con 195
delay_1 movf TMR0,W
btfss STATUS,Z ;Desborda al de 50 mS
goto delay_1
decfsz Temp_0,F
goto delay_0 ;Se esperan 10 desbordamientos para conseguir 0.5
return
Inicio
A continuacin, se presenta el cdigo donde comienza la ejecucin del programa princi-
pal con la configuracin de las puertas de E/S.
PROYECTO DE UN PASTILLERO 31
inicio movwf OSCCAL
movlw b11000110 ;Preescaler 1:128 asignado al TMR0
option ;Pin GP2/T0CKI=GP2
movlw b11001100
tris GPIO ;GP0-GP1 como salidas para LED
;GP2-GP3 como entradas para pulsadores
;GP4 como salida para LCD
;GP5 como salida para zumbador
movlw .5
call delay ;Temporiza 100 mS para el Power Up del LCD
bcf GPIO,0 ;Salidas a 0
bcf GPIO,1
bcf GPIO,5
Mensaje de inicio
Al comenzar el programa, ste muestra el mensaje de inicio, como puede observarse en
la Figura C-6.
;Inicializacin de LCD con Mensaje de Inicio
movlw 0x0C
movwf Txdreg
call TxD ;Comando Form_Feed, borra pantalla
movlw .1 ;Temporiza 50 ms para que termine
call delay ;el comando anterior
movlw 0x83
movwf Txdreg ;Comando Cursor_OFF
call TxD
movlw .1 ;Temporiza 50 ms para que termine
call delay ;el comando anterior
movlw Mens_0
call Mostr_Mens
movlw .100
call delay
Figura C-6. Mensaje de inicio.
32 MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES
Inicializacin de las variables
A continuacin, se inicializan las variables del programa
;Inicializaciones de las variables del programa
clrf minPas1_1
clrf minPas1_2
clrf segPas1_1
clrf segPas1_2
clrf minPas2_1
clrf minPas2_2
clrf segPas2_1
clrf segPas2_2
clrf minPas1_1G
clrf minPas1_2G
clrf minPas2_1G
clrf minPas2_2G
clrf milPas1
clrf milPas2
movlw 0x01
movwf estado
Pantalla 1
Tras inicializar las variables, el programa muestra la pantalla 1.
;Muestra la pantalla 1
movlw 0x0C
movwf Txdreg
call TxD ;Comando Form_Feed, borra pantalla
movlw .1 ;Temporiza 50 ms para que termine
call delay ;el comando anterior
goto mostPant1
Figura C-7. Pantalla 1.
PROYECTO DE UN PASTILLERO 33
Bucle principal
El programa entra en su bucle principal.
;Bucle principal del programa
loop btfss GPIO,3
goto pulsar2
btfss GPIO,2
goto pulsar3
movlw .1
call delay ;Espera de 20 ms para cuenta de 1 sg
btfsc estado,5 ;Si el Led1 esta encendido(lo indica el bit 5 del
;registro estado)
goto ctrLed1
btfsc estado,6 ;Si el Led2 esta encendido(lo indica el bit 5 del
;registro estado)
goto ctrLed2
loopSeguir btfsc estado,2 ;Si la cuenta de la pasti1 est activa lo
;indica el bit 2 del registrop estado
goto decPas1
loop2 btfsc estado,3 ;Si la cuenta de la pasti2 est activa lo
;indica el bit 2 del registrop estado
goto decPas2
goto loop
Aviso de toma
Las siguientes rutinas controlan cundo se debe avisar la ingesta de cada toma.
;Controla el encendido del Led1
ctrLed1 decfsz milLed1,F
goto loopSeguir
bcf estado,5 ;Se apaga todo
bcf GPIO,0
bcf GPIO,5
goto loopSeguir
;Controla el encendido del Led2
ctrLed2 decfsz milLed2,F
goto loopSeguir
bcf estado,6
bcf GPIO,1
bcf GPIO,5
goto loopSeguir
34 MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES
Control del tiempo
Rutinas para el control del tiempo del pastillero.
;Decrementa el contador de la pastilla2
;Incrementa primero las milsimas hasta que sean 50 (lo cual es 1 sg)
;Se incrementan las unidades de segundos: hasta 9 (10) pasan a ser 0
;y se incrementa una decena hasta 5 (6)
;Lo mismo con los minutos
;Se actualiza el LCD
decPas2 incf milPas2,F
movlw .50
subwf milPas2,W
btfss STATUS,Z
goto loop
clrf milPas2
decf segPas2_1,F
movlw 0xFF
subwf segPas2_1,W
btfss STATUS,Z
goto most_temp1
movlw .9
movwf segPas2_1
decf segPas2_2,F
movlw 0xFF
subwf segPas2_2,W
btfss STATUS,Z
goto most_temp1
movlw .5
movwf segPas2_2
decf minPas2_1,F
movlw 0xFF
subwf minPas2_1,W
btfss STATUS,Z
goto most_temp1
movlw .9
movwf minPas2_1
decf minPas2_2,F
movlw 0xFF
subwf minPas2_2,W
btfss STATUS,Z
goto most_temp1
;Si todo es 0 (minutos), segundos se enciende el Led y el zumbador
;suena durante 5 segundos. Se inicializa la cuenta con lo que tenemos
guardado
movf minPas2_1G,W
movwf minPas2_1
movf minPas2_2G,W
movwf minPas2_2
clrf segPas2_1
clrf segPas2_2
bsf estado,6
PROYECTO DE UN PASTILLERO 35
bsf GPIO,1
bsf GPIO,5
movlw .250
movwf milLed2
goto most_temp1
decPas1 incf milPas1,F
movlw .50
subwf milPas1,W
btfss STATUS,Z
goto loop2
bsf estado,4
clrf milPas1
decf segPas1_1,F
movlw 0xFF
subwf segPas1_1,W
btfss STATUS,Z
goto most_temp1
movlw .9
movwf segPas1_1
decf segPas1_2,F
movlw 0xFF
subwf segPas1_2,W
btfss STATUS,Z
goto most_temp1
movlw .5
movwf segPas1_2
decf minPas1_1,F
movlw 0xFF
subwf minPas1_1,W
btfss STATUS,Z
goto most_temp1
movlw .9
movwf minPas1_1
decf minPas1_2,F
movlw 0xFF
subwf minPas1_2,W
btfss STATUS,Z
goto most_temp1
movf minPas1_1G,W
movwf minPas1_1
movf minPas1_2G,W
movwf minPas1_2
clrf segPas1_1
clrf segPas1_2
bsf estado,5
bsf GPIO,0
bsf GPIO,5
movlw .250
movwf milLed1
goto most_temp1
36 MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES
Cambio de una pantalla a otra
Al accionar el primer pulsador se puede cambiar de una pantalla a otra.
;Cambia de pantalla en el men principal del LCD
pulsar2 movlw .1
call delay ;espera de 20 ms para evitar rebotes del pulsador
btfss GPIO,3
goto loop
movlw 0x0C
movwf Txdreg
call TxD ;Comando Form_Feed, borra pantalla
movlw .1 ;Temporiza 20 ms para que termine
call delay ;el comando anterior
btfss estado,1 ;Comprobando los bit del nmero de pantalla/
;/registro
;estado bit1 y bit0
goto mostPant2 ;se muestra la siguiente pantalla
btfss estado,0
goto mostPant3
goto mostPant1
pulsar3 btfss estado,1
goto loop
movlw .1
call delay
btfss GPIO,2
goto loop
movlw 0x8A
movwf Txdreg
call TxD
movlw .2 ;Mover cursor hasta donde queremos escribir en el LCD
;posicin 1 y 2 de la segunda lnea
Figura C-8. Cuenta atrs de cada toma.
PROYECTO DE UN PASTILLERO 37
movwf Txdreg
call TxD
movlw .1
movwf Txdreg
call TxD
btfss estado,0
goto modif1
Configuracin del tiempo de cada toma
;Incrementa las unidades de minutos guardadas, si es 9 (10); pasa a
;incrementar las decenas; si llega a 99 (100), se ponen a 00 y
;visualizan el nuevo valor por el LCD
modif2 incf minPas2_1G,F
movlw .10
subwf minPas2_1G,W
btfss STATUS,Z
goto preMost_temp4
clrf minPas2_1G
incf minPas2_2G,F
movlw .10
subwf minPas2_2G,W
btfss STATUS,Z
goto preMost_temp4
clrf minPas2_2G
goto preMost_temp4
;Comprueba si el valor a contar es 00; en ese caso; desactiva la cuenta
;con el bit 3 del registro estado
preMost_temp4
movlw 0x00
subwf minPas2_1G
btfss STATUS,Z
goto habPas2
movlw 0x00
subwf minPas2_2G
btfss STATUS,Z
goto habPas2
bcf estado,3
goto most_temp4
habPas2 bsf estado,3
movf minPas2_1G,W
movwf minPas2_1
movf minPas2_2G,W
movwf minPas2_2
clrf segPas2_1
clrf segPas2_2
clrf milPas2
goto most_temp4
38 MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES
modif1 incf minPas1_1G,F
movlw .10
subwf minPas1_1G,W
btfss STATUS,Z
goto preMost_temp3
clrf minPas1_1G
incf minPas1_2G,F
movlw .10
subwf minPas1_2G,W
btfss STATUS,Z
goto preMost_temp3
clrf minPas1_2G
goto preMost_temp3
preMost_temp3
movlw 0x00
subwf minPas1_1G
btfss STATUS,Z
goto habPas1
movlw 0x00
subwf minPas1_2G
btfss STATUS,Z
goto habPas1
bcf estado,2
goto most_temp3
habPas1 bsf estado,2
movf minPas1_1G,W
movwf minPas1_1
movf minPas1_2G,W
movwf minPas1_2
clrf segPas1_1
clrf segPas1_2
clrf milPas1
goto most_temp3
;Muestra la primera pantalla: Past1 - Past2
mostPant1 bsf estado,0
bcf estado,1
movlw Mens_1
call Mostr_Mens ;muestra la lnea 1 del LCD
;Muestra la segunda lnea de la pantalla 1 del LCD
most_temp1 btfsc estado,1
goto loop
movlw 0x8A ;coloca el curso en la posicin .2 .2
movwf Txdreg
call TxD
movlw .2
movwf Txdreg
call TxD
movlw .2
movwf Txdreg
call TxD
PROYECTO DE UN PASTILLERO 39
Encendido del led, pulsador
movf minPas1_2,W
call Tabla_Num
movwf Txdreg
call TxD
movf minPas1_1,W
call Tabla_Num
movwf Txdreg
call TxD
movlw :
movwf Txdreg
call TxD
movf segPas1_2,W
call Tabla_Num
movwf Txdreg
call TxD
movf segPas1_1,W
call Tabla_Num
movwf Txdreg
call TxD
movlw
movwf Txdreg
call TxD
movlw
movwf Txdreg
call TxD
movlw
movwf Txdreg
call TxD
movlw
movwf Txdreg
call TxD
movf minPas2_2,W
call Tabla_Num
movwf Txdreg
call TxD
movf minPas2_1,W
call Tabla_Num
movwf Txdreg
call TxD
movlw :
movwf Txdreg
call TxD
movf segPas2_2,W
call Tabla_Num
movwf Txdreg
call TxD
movf segPas2_1,W
call Tabla_Num
movwf Txdreg
call TxD
40 MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES
;Comprobamos el bit 4 del registro estado. que indica si hay que
;actualizar el tiempo de la pastilla 2 (el loop2)
btfss estado,4
goto loop
bcf estado,4
goto loop2
;Muestra la segunda pantalla: Configurar pastilla1
mostPant2 bcf estado,0
bsf estado,1
movlw Mens_2
call Mostr_Mens
most_temp3 movf minPas1_2G,W
call Tabla_Num
movwf Txdreg
call TxD
movf minPas1_1G,W
call Tabla_Num
movwf Txdreg
call TxD
movlw
movlw Mens_4
call Mostr_Mens
goto loop
;Muestra la tercera pantalla: Configurar pastilla 2
mostPant3 bsf estado,0
bsf estado,1
movlw Mens_3
call Mostr_Mens
most_temp4 movf minPas2_2G,W
call Tabla_Num
movwf Txdreg
call TxD
movf minPas2_1G,W
call Tabla_Num
movwf Txdreg
call TxD
movlw
movlw Mens_4
call Mostr_Mens
goto loop
END

También podría gustarte