You are on page 1of 120

UNIVERSIDAD AUTNOMA DE

ZACATECAS
UNIDAD ACADMICA DE INGENIERIA
ELCTRICA
BSCULA ELECTRNICA CONTROLADA CON
PIC16F873
TESIS PROFESIONAL
QUE PARA OBTENER EL TITULO DE:
INGENIERO EN COMUNICACIONES Y ELECTRNICA
PRESENTAN:
CARLOS ALBERTO MERCADO GALVN
1OS ESPARZA CISNEROS
VICTOR ROMERO CARRILLO
ASESORES:
M. P. R. H. ANTONIO ARELLANO NERI
M. I. ERNESTO GARCIA DOMINGUEZ
ZACATECAS ZAC., OCTUBRE DE 2006
UNIVERSIDAD AUTNOMA DE
ZACATECAS


UNIDAD ACADMICA DE INGENIERA
ELCTRICA


BSCULA ELECTRNICA CONTROLADA CON
PIC16F873

TESIS PROFESIONAL

QUE PARA OBTENER EL TTULO DE:
INGENIERO EN COMUNICACIONES Y ELECTRNICA


PRESENTAN:
CARLOS ALBERTO MERCADO GALVN
JOS ESPARZA CISNEROS
VCTOR ROMERO CARRILLO


ASESORES:
M. P. R. H. ANTONIO ARELLANO NERI
M. I. ERNESTO GARCA DOMNGUEZ


ZACATECAS ZAC., OCTUBRE DE 2006






Dedicatorias Dedicatorias Dedicatorias Dedicatorias































A mis padres Alberto Mercado Alvarado y Ma. A mis padres Alberto Mercado Alvarado y Ma. A mis padres Alberto Mercado Alvarado y Ma. A mis padres Alberto Mercado Alvarado y Ma. Del Rosario Del Rosario Del Rosario Del Rosario
Galvn Caldern por su apoyo y confianza en todos estos aos ya Galvn Caldern por su apoyo y confianza en todos estos aos ya Galvn Caldern por su apoyo y confianza en todos estos aos ya Galvn Caldern por su apoyo y confianza en todos estos aos ya
que sin ellos no hubiera sido posible el estar donde ahora me que sin ellos no hubiera sido posible el estar donde ahora me que sin ellos no hubiera sido posible el estar donde ahora me que sin ellos no hubiera sido posible el estar donde ahora me
encuentro, gracias por todo el amor, cario, compresin, paciencia, encuentro, gracias por todo el amor, cario, compresin, paciencia, encuentro, gracias por todo el amor, cario, compresin, paciencia, encuentro, gracias por todo el amor, cario, compresin, paciencia,
sacrificio y fe que depositaron en mi. sacrificio y fe que depositaron en mi. sacrificio y fe que depositaron en mi. sacrificio y fe que depositaron en mi.

A mis her A mis her A mis her A mis hermanos por estar a mi lado y animarme cuando hacia manos por estar a mi lado y animarme cuando hacia manos por estar a mi lado y animarme cuando hacia manos por estar a mi lado y animarme cuando hacia
falta, ya que me ensearon lecciones valiosas para la vida. falta, ya que me ensearon lecciones valiosas para la vida. falta, ya que me ensearon lecciones valiosas para la vida. falta, ya que me ensearon lecciones valiosas para la vida.

A mis abuelos, abuelas, tos, tas, primos, primas y a toda mi A mis abuelos, abuelas, tos, tas, primos, primas y a toda mi A mis abuelos, abuelas, tos, tas, primos, primas y a toda mi A mis abuelos, abuelas, tos, tas, primos, primas y a toda mi
familia por ser como son y por el apoyo que me brindaron. familia por ser como son y por el apoyo que me brindaron. familia por ser como son y por el apoyo que me brindaron. familia por ser como son y por el apoyo que me brindaron.

A Lorena por ser una A Lorena por ser una A Lorena por ser una A Lorena por ser una persona tan especial en mi vida. persona tan especial en mi vida. persona tan especial en mi vida. persona tan especial en mi vida.

A mis compaeros y amigos por su verdadera amistad en las A mis compaeros y amigos por su verdadera amistad en las A mis compaeros y amigos por su verdadera amistad en las A mis compaeros y amigos por su verdadera amistad en las
buenas y en las malas. buenas y en las malas. buenas y en las malas. buenas y en las malas.




Carlos Alberto Mercado Galvn Carlos Alberto Mercado Galvn Carlos Alberto Mercado Galvn Carlos Alberto Mercado Galvn















Este trabajo lo quiero dedicar especialmente a mis padres que Este trabajo lo quiero dedicar especialmente a mis padres que Este trabajo lo quiero dedicar especialmente a mis padres que Este trabajo lo quiero dedicar especialmente a mis padres que
siempre estuvieron apo siempre estuvieron apo siempre estuvieron apo siempre estuvieron apoyndome en todo momento, por su paciencia yndome en todo momento, por su paciencia yndome en todo momento, por su paciencia yndome en todo momento, por su paciencia
y por haber credo en m. y por haber credo en m. y por haber credo en m. y por haber credo en m.

A mi esposa Rosa del Carmen por todo su apoyo y confianza, A mi esposa Rosa del Carmen por todo su apoyo y confianza, A mi esposa Rosa del Carmen por todo su apoyo y confianza, A mi esposa Rosa del Carmen por todo su apoyo y confianza,
por sus consejos que me fortalecieron en los momentos de desanimo, por sus consejos que me fortalecieron en los momentos de desanimo, por sus consejos que me fortalecieron en los momentos de desanimo, por sus consejos que me fortalecieron en los momentos de desanimo,
quiero agradecer tambin su paciencia y comprensin. quiero agradecer tambin su paciencia y comprensin. quiero agradecer tambin su paciencia y comprensin. quiero agradecer tambin su paciencia y comprensin.

A mi A mi A mi A mi hermano Carlos y mi hermano Miguel por ayudarme a hermano Carlos y mi hermano Miguel por ayudarme a hermano Carlos y mi hermano Miguel por ayudarme a hermano Carlos y mi hermano Miguel por ayudarme a
realizar este sueo. realizar este sueo. realizar este sueo. realizar este sueo.

A mis hermanas Amada, Yola y Silvia que tambin se A mis hermanas Amada, Yola y Silvia que tambin se A mis hermanas Amada, Yola y Silvia que tambin se A mis hermanas Amada, Yola y Silvia que tambin se
preocuparon y estuvieron al pendiente de mi durante toda mi preocuparon y estuvieron al pendiente de mi durante toda mi preocuparon y estuvieron al pendiente de mi durante toda mi preocuparon y estuvieron al pendiente de mi durante toda mi
carrera. carrera. carrera. carrera.




Jos Esparza Cisneros Jos Esparza Cisneros Jos Esparza Cisneros Jos Esparza Cisneros











A mis padres por A mis padres por A mis padres por A mis padres por darme la vida y oportunidad de seguir darme la vida y oportunidad de seguir darme la vida y oportunidad de seguir darme la vida y oportunidad de seguir
estudiando para superarme y por todo su apoyo incondicional. estudiando para superarme y por todo su apoyo incondicional. estudiando para superarme y por todo su apoyo incondicional. estudiando para superarme y por todo su apoyo incondicional.

A mis hermanos por estar siempre a mi lado confiando en mi y A mis hermanos por estar siempre a mi lado confiando en mi y A mis hermanos por estar siempre a mi lado confiando en mi y A mis hermanos por estar siempre a mi lado confiando en mi y
por apoyarme en todo momento, en quienes confo por siempre. por apoyarme en todo momento, en quienes confo por siempre. por apoyarme en todo momento, en quienes confo por siempre. por apoyarme en todo momento, en quienes confo por siempre.

A mis amigos y compaeros por s A mis amigos y compaeros por s A mis amigos y compaeros por s A mis amigos y compaeros por su amistad y apoyo en todos u amistad y apoyo en todos u amistad y apoyo en todos u amistad y apoyo en todos
los momentos ms difciles, por sus consejos y por su confianza. Y a los momentos ms difciles, por sus consejos y por su confianza. Y a los momentos ms difciles, por sus consejos y por su confianza. Y a los momentos ms difciles, por sus consejos y por su confianza. Y a
nuestro grupo con quienes he compartido momentos tan excelentes e nuestro grupo con quienes he compartido momentos tan excelentes e nuestro grupo con quienes he compartido momentos tan excelentes e nuestro grupo con quienes he compartido momentos tan excelentes e
inolvidables en estos aos. inolvidables en estos aos. inolvidables en estos aos. inolvidables en estos aos.

A mis maestros, a todos pero especialmente a nuestros asesores A mis maestros, a todos pero especialmente a nuestros asesores A mis maestros, a todos pero especialmente a nuestros asesores A mis maestros, a todos pero especialmente a nuestros asesores
p pp porque gracias a sus conocimientos y enseanzas he logrado concluir orque gracias a sus conocimientos y enseanzas he logrado concluir orque gracias a sus conocimientos y enseanzas he logrado concluir orque gracias a sus conocimientos y enseanzas he logrado concluir
mi trabajo y esta meta. mi trabajo y esta meta. mi trabajo y esta meta. mi trabajo y esta meta.




Vctor Romero Carrillo Vctor Romero Carrillo Vctor Romero Carrillo Vctor Romero Carrillo



































Agradecimientos Agradecimientos Agradecimientos Agradecimientos




























A Dios, por darnos la oportunidad de vivir y experime A Dios, por darnos la oportunidad de vivir y experime A Dios, por darnos la oportunidad de vivir y experime A Dios, por darnos la oportunidad de vivir y experimentar la ntar la ntar la ntar la
aventura de la vida, tambin por rodearnos de personas de las aventura de la vida, tambin por rodearnos de personas de las aventura de la vida, tambin por rodearnos de personas de las aventura de la vida, tambin por rodearnos de personas de las
cuales hemos aprendido lecciones importantes para continuar cuales hemos aprendido lecciones importantes para continuar cuales hemos aprendido lecciones importantes para continuar cuales hemos aprendido lecciones importantes para continuar
siempre adelante. siempre adelante. siempre adelante. siempre adelante.

A todas las personas que nos ayudaron e impulsaron y que A todas las personas que nos ayudaron e impulsaron y que A todas las personas que nos ayudaron e impulsaron y que A todas las personas que nos ayudaron e impulsaron y que
fueron parte importante en el desarrollo de nuest fueron parte importante en el desarrollo de nuest fueron parte importante en el desarrollo de nuest fueron parte importante en el desarrollo de nuestra carrera pero ra carrera pero ra carrera pero ra carrera pero
sobre todo gracias a: sobre todo gracias a: sobre todo gracias a: sobre todo gracias a:

A nuestras familias por la confianza depositada desde el A nuestras familias por la confianza depositada desde el A nuestras familias por la confianza depositada desde el A nuestras familias por la confianza depositada desde el
principio de la carrera hasta el da de hoy. principio de la carrera hasta el da de hoy. principio de la carrera hasta el da de hoy. principio de la carrera hasta el da de hoy.

A la Universidad Autnoma de Zacatecas por abrirnos las A la Universidad Autnoma de Zacatecas por abrirnos las A la Universidad Autnoma de Zacatecas por abrirnos las A la Universidad Autnoma de Zacatecas por abrirnos las
puertas para lograr nuestra formacin profesional. puertas para lograr nuestra formacin profesional. puertas para lograr nuestra formacin profesional. puertas para lograr nuestra formacin profesional.


A l A l A l A los maestros por su apoyo incondicional cuando los os maestros por su apoyo incondicional cuando los os maestros por su apoyo incondicional cuando los os maestros por su apoyo incondicional cuando los
necesitamos. Por todos sus conocimientos y por lo que nos ensearon necesitamos. Por todos sus conocimientos y por lo que nos ensearon necesitamos. Por todos sus conocimientos y por lo que nos ensearon necesitamos. Por todos sus conocimientos y por lo que nos ensearon
a lo largo de la carrera. a lo largo de la carrera. a lo largo de la carrera. a lo largo de la carrera.

A nuestros asesores, al M.P.R.H. Antonio Arellano Neri y al A nuestros asesores, al M.P.R.H. Antonio Arellano Neri y al A nuestros asesores, al M.P.R.H. Antonio Arellano Neri y al A nuestros asesores, al M.P.R.H. Antonio Arellano Neri y al
M.I. Ernesto Garca Domnguez, por prestarnos su t M.I. Ernesto Garca Domnguez, por prestarnos su t M.I. Ernesto Garca Domnguez, por prestarnos su t M.I. Ernesto Garca Domnguez, por prestarnos su tiempo y iempo y iempo y iempo y
ayudarnos todo lo posible en la elaboracin de este proyecto. ayudarnos todo lo posible en la elaboracin de este proyecto. ayudarnos todo lo posible en la elaboracin de este proyecto. ayudarnos todo lo posible en la elaboracin de este proyecto.

Carlos Alberto Mercado Galvn Carlos Alberto Mercado Galvn Carlos Alberto Mercado Galvn Carlos Alberto Mercado Galvn
Jos Esparza Cisneros Jos Esparza Cisneros Jos Esparza Cisneros Jos Esparza Cisneros
Vctor Romero Carrillo Vctor Romero Carrillo Vctor Romero Carrillo Vctor Romero Carrillo




N D I C E GENERAL


CAPTULO I. CONCEPTOS BSICOS

1.1 Introduccin......1
1.2 Descripcin general.....2
1.3 Objetivos..3

CAPTULO II. GALGAS EXTENSIOMTRICAS

2.1 Introduccin.....4

2.2 Descripcin constructiva..........5
2.3 Puente utilizado............6
2.4 Celdas de carga....7
2.5 Tipos de celdas de carga......8

CAPTULO III. CARACTERISTICAS DEL MICROCONTROLADOR PIC16F873
Y OTROS ELEMENTOS FUNDAMENTALES

3.1 Introduccin....12
3.2 Arquitectura de un microcontrolador.....12
3.3 Microcontroladores PIC (circuito integrado programable)....13
3.4 Recursos auxiliares.14
3.5 Familias de los PIC.....15
3.6 Microcontrolador PIC16F873....17
3.6.1 Caractersticas........17
3.6.2 Dispositivos perifricos.18
3.6.3 Terminales de propsito general....19
3.6.4 Puerto A.19
3.6.5 Puerto B.20
3.6.6 Puerto C.20
3.6.7 Conversor A/D..21
3.6.8 Comunicacin serie en modo I
2
C......24
3.7 Pantalla de cristal lquido.......26
3.8 Reloj de tiempo real DS1307....31

CAPTULO IV. DISEO DE PROTOTIPO BSCULA ELECTRNICA

4.1 Introduccin.......34
4.2 Desarrollo...35
4.3 Fuentes de alimentacin.35
4.3.1 Fuente de 5 V
dc
......35

4.3.2 Fuente de 10 V
dc
....36
4.4 Sensor y etapa de amplificacin.....37
4.5 Etapa digital41
4.5.1 Circuito de reset.........43
4.5.2 Circuito del oscilador....43
4.5.3 Reloj de tiempo real.......44
4.5.4 Botones para configurar el reloj de tiempo real...45
4.5.5 Conectores para los conversores A/D....46
4.5.6 Pantalla de cristal lquido...47
4.6 Programacin.....48
4.6.1 Diagrama de flujo del funcionamiento general de la bscula..48
4.6.2 Diagrama de flujo de operacin del conversor A/D....49
4.6.3 Diagrama de flujo de operacin escritura para el RTC...50
4.6.4 Diagrama de flujo de operacin lectura para el RTC..51
4.6.5 Cdigo del programa.......52



CAPTULO V. ANLISIS EXPERIMENTAL

5.1 Estructura del prototipo..88
5.1.1 Estructura mecnica......................................................................88
5.1.2 Sensor de peso...91
5.1.3 Mdulo de control.91
5.1.4 Pantalla visual92
5.2 Funcionamiento del prototipo.....92
5.3 Anlisis de pruebas.....93

CONCLUSIONES......97

TRABAJO A FUTURO.............97


ANEXOS......98

Anexo A Manual de ajuste del RTC DS1307 para el usuario.
Anexo B Conjunto de instrucciones PIC16F873.
Anexo C DS1307 Reloj de tiempo real.
Anexo D LM324 Amplificador operacional.

BIBLIOGRAFA








NDICE DE FIGURAS


Figura 2.1 Circuito Puente de Wheatstone................6
Figura 2.2 Galga extensiomtrica.........7
Figura 2.3 Celda de carga de punto sencillo..........9
Figura 2.4 Celda de carga de tipo S..........10
Figura 2.5 Celdas de carga de Compresin..11
Figura 3.1 Arquitectura Harvard......14
Figura 3.2 Arquitectura Von Newmann.......14
Figura 3.3 Encapsulado del PIC16F873.......17
Figura 3.4 Memoria RAM del LCD.27
Figura 3.5 Manejo del bus en la comunicacin I
2
C.....32

Figura 4.1 Fotografa de la bscula electrnica.......34
Figura 4.2 Fuente de 5 V
dc
........36
Figura 4.3 Fuente de 10 V
dc
......37
Figura 4.4 Etapa de amplificacin........41
Figura 4.5 Etapa digital....42
Figura 4.6 Circuito de reset..........43
Figura 4.7 Circuito del oscilador......44
Figura 4.8 Circuito del reloj de tiempo real.....45
Figura 4.9 Botones para configurar el RTC.....46
Figura 4.10 Entradas de conversores A/D....46
Figura 4.11 Conexin del LCD con el microcontrolador.........47
Figura 4.12 Diagrama de flujo del funcionamiento de la bscula........................48
Figura 4.13 Diagrama de flujo del Conversor A/D..49
Figura 4.14. Diagrama de flujo de modo escritura para el RTC......50
Figura 4.15 Diagrama de flujo de modo lectura para el RTC.51
Figura 5.1 Estructura metlica..88
Figura 5.2 Cruz de soporte...89
Figura 5.3 Charola89
Figura 5.4 Canaleta y base...90
Figura 5.5 Sensor de peso.91
Figura 5.6 Mdulo de control...91
Figura 5.7 Pantalla visual.....92
Figura 5.8 Clculo de matriz...95


























NDICE DE TABLAS Y GRFICAS


Tabla 3.1 Terminales de propsito general.....19
Tabla 3.2. Terminales de puerto A...19
Tabla 3.3 Terminales de puerto B...20
Tabla 3.4 Terminales de puerto C.......20
Tabla 3.5 Registros ADCON0 y ADCON1........22
Tabla 3.6 Seleccin de canal para introducir la seal a convertir.. 22
Tabla 3.7 Registro SSPCON..26
Tabla 3.8 Distribucin de las lneas del LCD..28
Tabla 3.9 Mandos de control del LCD.....29
Tabla 3.10 Puertos y seales RTC....32

Tabla 3.11 Mapeo de memoria del RTC......33
Tabla 4.1 Tabla de correspondencia mV/kgs.......................................40
Tabla 5.1 Relacin Peso/Voltaje..93
Tabla 5.2 Valores para mtodo de mnimos cuadrados....94
Grafica 5.1 Anlisis grfico......96















CAPTULO I
CONCEPTOS BSICOS


1.1. INTRODUCCIN

Los sistemas digitales han logrado alcanzar importantes avances en la tecnologa
moderna, de tal forma que ahora se pueden realizar diferentes tareas complejas en pocos
segundos y sin la intervencin del hombre ms que en el diseo y en el mantenimiento de
los equipos electrnicos que se emplean en el hogar, en la industria y casi en todo lugar.

En el medio ambiente ocurren fenmenos fsicos que en un momento dado se desea
saber su magnitud, por ejemplo: la temperatura del medio ambiente, la presin del agua que
fluye a travs de una tubera, la velocidad del viento, el peso de alguna persona o de un
objeto, etc. Estos fenmenos fsicos se pueden convertir, por medio de transductores, en

seales elctricas que luego pueden ser digitalizadas y enviadas a un microcontrolador para
manipulacin y poder as mostrar un resultado comprensible, rpido, preciso y confiable.

Con la llegada de los microcontroladores se redujo el nmero de perifricos o
elementos discretos que se requeran en otros sistemas de control tradicionales, adems de
otras ventajas inherentes como: su gran versatilidad, costo reducido y fcil manejo.
















1.2. DESCRIPCIN GENERAL

La idea fundamental de este proyecto de tesis es el desarrollo de una bscula
electrnica capaz de medir pesos. El diseo est basado en un microcontrolador
PIC16F873, con encapsulado de 28 patitas, que es el cerebro principal de toda operacin.
Otros perifricos que forman parte del sistema son: un sensor de presin (una celda de
carga compuesta de una galga extensiomtrica), un reloj de tiempo real (RTC), capaz de
almacenar la hora y fecha. Por ltimo se utiliza una pantalla de cristal lquido o LCD para
mostrar todos los datos que se quieren visualizar.

El sensor utilizado, comnmente llamado celda de carga, tiene un rango de
operacin de 0 40 kg, sin embargo, se podra extender dicho intervalo haciendo el cambio
por un sensor de mayor rango de operacin en el prototipo.


Ya que el sensor entrega una seal elctrica muy pequea, del orden de los
milivolts, es necesario utilizar un amplificador para aumentar el voltaje. Para esta etapa se
utiliza un amplificador operacional LM324 que aumentar la seal a niveles ms fcilmente
manipulables para el microcontrolador.

Una vez que se ha hecho la lectura del peso, lo ideal es que se pueda mostrar de una
manera clara y rpida en una pantalla LCD. Este tipo de dispositivos son muy verstiles y
de uso comn en la vida diaria, por ejemplo en relojes, hornos de microondas, estreos,
dvds, etc.

Para complementar el trabajo se suma un dispositivo denominado reloj de tiempo
real (RTC) para mostrar informacin adicional al peso, como la hora y la fecha. Este
circuito provee todos estos datos, incluyendo correccin de aos bisiestos. El RTC no es
muy conocido, por lo que es una buena opcin, para adentrarse en su programacin, para su
aplicacin en trabajos futuros.


1.3. OBJETIVOS

El presente trabajo inicia con la inquietud de experimentar con galgas
extensiomtricas, muy usadas en la vida cotidiana. En este caso se emplea una celda de
carga modelo LPS (Single Point Loadcells) de 40 kg que parte de este principio.

Otros de los objetivos que se planean es el de ampliar los conocimientos en el
manejo de los microcontroladores PIC y otros dispositivos perifricos que son muy
importantes como la pantalla de cristal lquido y el RTC, de tal forma que el dominio
eficaz de stos nos permita el desarrollo de proyectos futuros.

La eleccin del microcontrolador se hace en base a las innumerables prestaciones
que ofrece, entre las cuales pueden citarse: su rapidez, bajo costo, el bajo consumo de
energa, la facilidad para programarse, reducida circuitera logrando as mdulos

compactos. Otro aspecto importante es que se cuenta con las herramientas y programas
necesarios para su programacin, tales como:

a) El MPLAB que es donde se edita y crea el programa en ensamblador.
b) El PIC SIMILATOR IDE que es un simulador que ofrece las herramientas
necesarias para una buena simulacin virtual.
c) El IC PROG y el programador QUARK-PRO 2 que en conjunto permiten la
introduccin del cdigo al microcontrolador PIC.











CAPTULO II
GALGAS EXTENSIOMTRICAS


2.1. INTRODUCCIN

Los transductores se definen como dispositivos que convierten energa o
informacin de una forma en otra. Se emplean extensamente en el trabajo de medicin
porque no todas las cantidades que se necesitan medir se pueden manipular con facilidad.
Se puede efectuar una mejor medicin de una cantidad si esta se puede convertir a otra
forma que se pueda mostrar con facilidad y exactitud. Un ejemplo muy claro de esto es el
termmetro que muy comnmente utilizamos para saber a que temperatura est el medio
ambiente. Este transductor convierte los cambios de temperatura en cambios de longitud de
una columna de mercurio. Los transductores elctricos convierten cantidades fsicas en
seales elctricas y constituyen la vasta mayora de los transductores que se emplean hoy

en da; la razn es que las seales elctricas poseen muchas cualidades deseables para la
medicin.

Hay tres elementos principales comunes a la mayora de los sistemas de medicin:

1. Elemento de deteccin (sensor): El objetivo del elemento de deteccin es responder a
la magnitud (cambios en la magnitud) de la cantidad que se est midiendo. La respuesta del
sensor toma la forma de una seal de salida cuya magnitud es proporcional a la magnitud
de la cantidad que se est mencionando.

2. El modificador de seal: Este elemento recibe la seal de salida del elemento de
deteccin y la modifica mediante la amplificacin o por conformacin adecuada de su
onda. Cuando la seal sale del modificador de seal, debe de estar en forma adecuada para
su despliegue o registro.

3. El dispositivo de despliegue o de registro: En sistemas elctricos las pantallas o los
registradores pueden ser medidores, tubos de rayos catdicos, registradores de carta,
grabadoras de cinta, registradoras X-Y y computadoras digitales.

Cuando se intenta hacer una medicin de una cantidad no elctrica convirtiendo la
cantidad a una forma elctrica, se debe seleccionar el transductor adecuado (o combinacin
de transductores) para llevar a cabo la conversin. El primer paso en el procedimiento de
seleccin es definir con claridad la naturaleza de la cantidad que se ha de medir.
Esto debe comprender el conocimiento del rango de magnitudes y frecuencias que
se espera que exhiba la cantidad. Cuando se ha establecido el problema, se deben examinar
los principios del transductor disponible para medir la cantidad deseada. Si uno o ms
principios del transductor son capaces de producir una seal satisfactoria se debe decidir si
usar un transductor comercial o intentar construir el transductor.


2.2. DESCRIPCIN CONSTRUCTIVA


Existen dos tipos de galgas bsicos:

1. De hilo conductor o lmina conductora. El sensor est constituido bsicamente por
una base muy delgada no conductora y muy flexible, sobre la cual va adherido un hilo
metlico muy fino. Las terminaciones del hilo acaban en dos terminales a los cuales se
conecta el transductor.

2. Semiconductor. Las galgas semiconductoras son similares a las anteriores. En este tipo
de galgas se sustituye el hilo metlico por un material semiconductor. La principal
diferencia constructiva de estas galgas respecto a las anteriores se encuentra en el tamao;
las galgas semiconductoras tienen un tamao ms reducido.




2.3. PUENTE UTILIZADO

El montaje ms comn utilizado para medir deformaciones mediante galgas es el
puente de Wheatstone. Existen tres tipos de montajes bsicos: con una, dos y cuatro galgas.
La medida se suele realizar por deflexin, es decir, midiendo la diferencia de tensin
existente entre las terminales de salida del sensor.

Las principales diferencias de estos montajes se encuentran en la sensibilidad y la
capacidad de compensacin del efecto de temperatura. Esta compensacin consiste en
suprimir los efectos de la temperatura en el valor de la resistencia de la galga; cuando en un
puente de medida coinciden dos o cuatro galgas de iguales caractersticas, los efectos de la
temperatura se anulan ya que sta les afecta por igual.


Suministrando un voltaje de excitacin, se puede generar un voltaje de salida
(Formula No.1) a travs del puente y entonces determinar la resistencia de la galga
extensiomtrica, como se muestra en la figura 2.1.
EX o
V
R R
R
R R
R
V
(

+
=
2 1
2
4 3
3
...( 1 )


Figura 2.1. Circuito Puente de Wheatstone.



2.4. CELDAS DE CARGA

Una vez que la galga extensiomtrica es diseada, tiene que ser incorporada al
sistema para su funcionamiento, haciendo que la variable bajo estudio se convierta en una
deformacin mecnica, es decir, la galga es montada en un elemento elstico dentro del
transductor, sometido a una fuerza proporcional a la variable medida, como se muestra en
la figura 2.2.



Figura 2.2. Galga extensiomtrica.
La celda de carga utilizada como el sensor de peso, es un transductor que mide
fuerza mecnica y cambia linealmente su salida en un voltaje proporcional a esta fuerza
aplicada. Es acondicionada en unidad de peso, gramos, kilogramos y toneladas ( libras en el
caso de ser hechas en Estados Unidos de Amrica), y estar midiendo desde cero hasta la
capacidad a la que fue hecha.
El cuerpo de la celda de carga (usualmente acero, acero inoxidable o aluminio) es
forjado para asegurar que la seccin donde la galga extensiomtrica es montada est puesta
bajo el mayor estiramiento mecnico, teniendo en cuenta la informacin bsica que a
continuacin se incluye:

a) Capacidad: Es la capacidad total de la celda de carga.

b) Sobrecarga: El mximo porcentaje de carga completa que la celda de carga puede
soportar antes de que sufra de daos irreparables. (Este es tpicamente de 150%).

c) Precisin: Puede ser expresada en trminos de linealidad, repeticin, deslizamiento y
rapidez. Estas condiciones son todas expresadas como un porcentaje de la capacidad total
de la celda de carga. Por ejemplo, una celda de carga de 100 kg. Tiene una precisin total
figurada en un 0.03%. Esto significa que la celda de carga medir cargas entre 0 y 100 kg
con 30 gramos de precisin, pero si la carga comienza en 5 kg. y termina en 95 kg.


d) Sensibilidad: La sensibilidad de una celda de carga se determina con el voltaje
actualizado de salida que se obtendra cuando se pone la carga completa. Estos valores son
expresados todos en mV/V. Por ejemplo, si tiene 3 mV/V de salida y el voltaje de
excitacin es de 10 Vdc, entonces la salida con carga completa ser de 30 mV.

e) Sensibilidad Trmica: Indica que tanto la salida cambiar con la temperatura, y es
comnmente expresada en porcentaje de carga completa/ C.

f) Tamao de la plataforma: Para celdas de carga de punto sencillo (single point),
algunas veces llamado centro de gravedad de la celda; esto nos dice el mximo tamao de
la plataforma que puede ser fijada sobre la celda de carga.

2.5. TIPOS DE CELDAS DE CARGA

Hay una gran variedad de transductores que se pueden utilizar ya sea para medir
variables fsicas como torsin, presin, presin diferencial, compresin. La utilizada en este
proyecto es el transductor de compresin comnmente llamado celda de carga, y dentro de
estas se encuentran diferentes tipos. La ms utilizada es la de punto sencillo (single point),
que es la que se aplic en la bscula. A continuacin se describen algunas de ellas:

I. Celdas de carga de punto sencillo (single point): Probablemente cuentan con el ms
grande porcentaje de todas las celdas existentes en todo el mundo; son el corazn de la
mayora de las pequeas bsculas escalables y son usadas tambin en un alto rango de
aplicaciones. Punto sencillo es un nombre malo para estas celdas y debera de ser usado el
nombre de plataforma el cual es mucho ms aplicable.

Lo que hace que este tipo sea diferente de todas, es que la carga no necesita ser
aplicada en el punto donde la celda es montada, puede aceptar una plataforma de
dimensiones especificadas que puede ser sobrepuesta. Por tal motivo, el peso entonces es
aplicado en algn punto en la plataforma y la celda medir de un modo preciso. La

capacidad viene desde 600 gr. hasta 2,000 kg. En la figura 2.3 se ilustra una celda de este
tipo.


Figura 2.3. Celda de carga de punto sencillo.












II. Celda de carga tipo S: Es ms comnmente utilizada en tensin (tambin puede ser
usada en compresin). Puede ser fijada de modo que la fuerza aplicada pase
perpendicularmente hasta el centro de la celda de carga. Para asegurar que esto pase,
muchos de los usuarios colocan tornillos para el movimiento de la celda, lo cual coopera
con fuerzas de expansin y otras prdidas de alineamiento. Son usadas para peso de Vessel,
probadores de extensin, dominio de torque y otras aplicaciones. Pueden conseguirse para
capacidades desde 20 kg. hasta 10,000 kg. Su estructura se muestra en la figura 2.4



Figura 2.4. Celda de Carga tipo S.

III. Celdas de carga de Compresin: Vienen en gran variedad de diseos y uno de ellos
se ilustra en la figura 2.5. Generalmente el bajo perfil del tipo de gato hidrulico ofrece una
baja precisin, por lo que vale la pena utilizar el tipo cilndrico o de botella que ofrece alta
precisin. Estas son, generalmente usadas o acondicionadas con una armazn, fondo
redondeado donde la carga es aplicada. Frecuentemente son utilizadas en equipos de
prueba.



Figura 2.5. Celdas de carga de Compresin.




















CAPTULO III
CARACTERSTICAS DEL MICROCONTROLADOR
PIC16F873 Y OTROS ELEMENTOS FUNDAMENTALES

3.1. INTRODUCCIN

El microcontrolador comienza a fabricarse cuando las tcnicas de integracin se
vieron mejor desarrolladas; y ms an cuando se tuvo la necesidad de sistemas
programables casi inteligentes tanto en la industria como en aplicaciones domsticas que
requieren de controlar varios elementos con instrucciones bien definidas y precisas. Un
ejemplo podra ser una fotocopiadora que debe controlar gran cantidad de elementos y
funciones a la vez. Este dispositivo adems de ser un circuito integrado programable que
contiene todos los componentes de un computador vino a reducir las dimensiones en gran
cantidad de los equipos electrnicos de trabajo donde se encuentra insertado.
Texas Instruments fue quien fabric el TSM1000 que es el primer microcontrolador
que integraba un reloj, procesador, memoria ROM, memoria RAM y soportes de entrada y
salida en un solo mdulo.

3.2. ARQUITECTURA DE UN MICROCONTROLADOR

Los elementos indispensables para el funcionamiento de un microcontrolador son
los siguientes:
CPU
La memoria ROM
La memoria RAM
Puertos

El CPU es el cerebro del sistema y su funcin consiste en procesar todos los datos
que viajan a travs del bus.

La memoria ROM es una memoria no voltil y es donde se almacenan los
programas.
Para poder trabajar correctamente, el microprocesador necesita, a menudo,
almacenar datos temporales en alguna parte, y aqu es donde interviene la memoria RAM
Los puertos pueden ser unidireccionales (entrada o salida) o bidireccionales (entrada
y salida); estn encargados de la comunicacin del microprocesador con dispositivos
perifricos.

3.3. MICROCONTROLADORES PIC (Circuito Integrado Programable)

Los microcontroladores PIC han logrado una compactacin de cdigo ptima y una
velocidad alta, integrando en su procesador tres de las caractersticas ms avanzadas en los
grandes computadores:

Procesador tipo RISC.
Ejecucin segmentada.
Arquitectura HARVARD.

Usan el conjunto de instrucciones de tipo RISC (Cdigo de instrucciones
Reducido), ejecutando la mayora de las instrucciones en un solo pulso de reloj, a diferencia
de la arquitectura CISC con la cual se logran instrucciones ms poderosas pero a costo de
varios ciclos de reloj en su ejecucin.
Con la arquitectura HARVARD mostrada en la fig. 3.1, se puede acceder de forma
simultnea e independiente a la memoria de datos y a la de programa. El aislamiento y la
diferenciacin de los dos tipos de memoria permiten que cada uno tenga la longitud y el
tamao ms adecuado, a diferencia de la arquitectura Von Neumann, de la figura 3.2, en la
cual la memoria de datos y de programa se encuentran juntos, accediendo a ellas por el
mismo bus.


Figura 3.1. Arquitectura Harvard.


Figura 3.2 Arquitectura Von Newmann.

Otra caracterstica relevante de los PIC es el manejo intensivo del Banco de
Registros, los cuales participan de manera muy activa en la ejecucin de las instrucciones.
De igual forma, la memoria RAM complementa los registros internos
implementando en sus posiciones registros de propsito especfico y de propsito general.


3.4. RECURSOS AUXILIARES

PERRO GUARDIN. Se trata de un contador interno de 8 bits que origina un
Reset cuando se desborda.
TEMPORIZADOR. En los programas de control de dispositivos suelen usarse para
determinar intervalos concretos de tiempo.
CONVERSORES A/D Y D/A. Encargados de la conversin de seales ya sea de
analgica a digital o viceversa.

PROTECCIN ANTE FALLOS DE ALIMENTACIN. Utilizado para ocasionar
una inicializacin al microcontrolador cuando la tensin de alimentacin cae por debajo de
cierto lmite.
ESTADO DE REPOSO O DE BAJO CONSUMO. Recomendado para aquellos
procesos en los que hay periodos largos de espera sin actividad del microcontrolador.
CONTROL DE INTERRUPCIONES. Utilizadas para atender sucesos que se
encuentran fuera de la secuencia del programa.

3.5. LA FAMILIA DE LOS PIC

Una de las labores ms importantes del ingeniero de diseo es la eleccin del
modelo de microcontrolador que mejor satisfaga las necesidades del proyecto con el
mnimo presupuesto.
En 1997 el fabricante de los PIC dispone de 52 versiones diferentes y cada ao
aumenta considerablemente su lista.
Microchip dispone de cuatro familias de microcontroladores de 8 bits para
adaptarse a las necesidades de la mayora de los clientes potenciales.

Gama enana: PIC12C(F)XXX

Se trata de un grupo de PIC de reciente aparicin que ha acaparado la atencin del
mercado. Su principal caracterstica es su reducido tamao, al disponer todos sus
componentes de 8 terminales. Se alimentan con un voltaje de corriente continua
comprendido entre 2.5 V y 5.5 V, y consumen menos de 2 mA cuando trabajan a 5 V y 4
MHz. Aunque los PIC enanos slo tienen 8 terminales, pueden destinar hasta 6 como
lneas de E/S para los perifricos porque dispone de un oscilador interno R-C.
Los modelos 12C5xx pertenecen a la gama baja, siendo el tamao de las
instrucciones de 12 bits; mientras que los 12C6xx son de la gama media y sus
instrucciones tienen 14 bits. Los modelos 12F6xx poseen memoria Flash para el programa
y EEPROM para los datos.


Gama baja o bsica: PIC16C5X con instrucciones de 12 bits

Se trata de una serie de PIC de recursos limitados, pero con una de las mejores
relaciones costo/prestaciones. Sus versiones estn encapsuladas con 18 y 28 patitas y
pueden alimentarse a partir de una tensin de 2.5 V, lo que les hace ideales en las
aplicaciones que funcionan con pilas. Tienen un repertorio de 33 instrucciones cuyo
formato consta de 12 bits. No admiten ningn tipo de interrupcin y la pila slo dispone de
dos niveles.

Gama media. PIC16CXXX con instrucciones de 14 bits

Es la gama ms variada y completa de los PIC. Abarca modelos con encapsulados
desde 18 patitas hasta 68, cubriendo varias opciones que integran abundantes perifricos;
dentro de esta gama se halla el PIC16X84 y sus variantes.
El repertorio de instrucciones es de 35 de 14 bits cada una y es compatible con el de
la gama baja. Sus distintos modelos contienen todos los recursos que se precisan en las
aplicaciones de los microcontroladores de 8 bits. Tambin dispone de interrupciones y una
pila de 8 niveles que permite el anidamiento de subrutinas.
Dentro de la gama media tambin se halla la versin PIC14C000, que soporta el
diseo de controladores inteligentes para cargadores de bateras, pilas pequeas, fuentes de
alimentacin ininterrumpibles y cualquier sistema de adquisicin y procesamiento de
seales que requiera gestin de la energa de alimentacin. Los PC14C000 admiten
cualquier tecnologa de las bateras como Li Ion, NiMH, NiCd, Pb y Zinc.

Gama alta: PIC17CXXX con instrucciones de 16 bits

Se alcanzan las 58 instrucciones de 16 bits en el repertorio y sus modelos disponen
de un sistema de gestin de interrupciones vectorizadas muy potente. Tambin incluye
variados controladores de perifricos, puertos de comunicacin serie y paralelo con
elementos externos y un multiplicador hardware de gran velocidad.
Quizs la caracterstica ms destacable de los componentes de esta gama es su
arquitectura abierta, que consiste en la posibilidad de amplificacin del microcontrolador

con elementos externos. Para este fin, las terminales sacan al exterior las lneas de los buses
de datos, direcciones y control a las que se conectan memorias o controladores de
perifricos. Esta filosofa de construccin del sistema es la que se empleaba en los
microcontroladores?? y no suele ser una prctica habitual cuando se emplean
microcontroladores.

3.6. MICROCONTROLADOR PIC16F873

El PIC 16F873 est incluido en la gama media de la familia de controladores de
microchip; se identifica por tener memoria de programa de tipo flash con encapsulado de
28 patitas. Por otra parte, tiene 3 puertos bidireccionales y hasta 5 canales que conectan al
conversor A/D.


Figura 3.3. Encapsulado del PIC16F873.

3.6.1. CARACTERSTICAS

Procesador de arquitectura RISC avanzada.
Juego de 35 instrucciones con 14 bits de longitud. Todas ellas se ejecutan en
un ciclo de instruccin, excepto las de salto que tardan 2.
Frecuencia mxima de 20 Mhz.
Hasta 8 K palabras de 14 bits para la memoria de cdigo, tipo Flash.

Hasta 368 bytes de memoria de datos RAM.
Hasta 256 bytes de memoria de datos EEPROM.
Encapsulados compatibles con los PIC16C73/74/76/77.
Hasta 14 fuentes de interrupcin internas y externas.
Pila con 8 niveles.
Modos de direccionamiento directo, indirecto y relativo.
Perro guardin (WDT).
Cdigo de proteccin programable.
Modo SLEEP de bajo consumo.
Programacin serie en circuito con dos patitas.
Voltaje de alimentacin comprendido entre 2 y 5.5 volts.
Bajo consumo (menos de 2 mA a 5 V y 5 MHz).

3.6.2. DISPOSITIVOS PERIFRICOS

Temporizador 0: temporizador-contador de 8 bits con predivisor de 8 bits.
Temporizador 1: temporizador-contador de 16 bits con predivisor.
Temporizador 2: temporizador-contador de 8 bits con predivisor y
postdivisor.
Dos mdulos de captura-comparacin-PWM.
Conversor A/D de 10 bits.
Puerto serie sncrono (SSP) con SPI e I
2
C.
USART (transmisor receptor universal sncrono-asncrono) con 9 bits.








3.6.3. TERMINALES DE PROPSITO GENERAL


Tabla 3.1. Terminales de propsito general.
# de pin Nombre Funcin
1 MCLR#/VPP/THV Entrada de RESET entrada del voltaje de
programacin voltaje alto en el modo TEST.
8 VSS Conexin a tierra.
9 OSC1/CLKIN Entrada de cristal de cuarzo del oscilador externo.
10 OSC2/CLKOUT Salida del cristal de cuarzo, en modo RC la patita OSC2
saca la cuarta parte de la frecuencia que se introduce por
OSC1, que determina el ciclo de instruccin.
19 VSS Conexin a tierra.
20 VDD Entrada de la alimentacin positiva.


3.6.4. PUERTO A

Tabla 3.2. Terminales de puerto A.
# de pin Nombre Funcin
2 RA0/AN0 Puede actuar como lnea digital de E/S como entrada
analgica al conversor A/D (canal 0).
3 RA1/AN1 Igual que el RA0/AN0.
4 RA2/AN2/VREF- Puede ser lnea digital de E/S, entrada analgica o
entrada de voltaje negativo de referencia.
5 RA3/AN3/VREF+ Lnea digital de E/S, entrada analgica o entrada de
voltaje positivo de referencia.
6 RA4/T0CKI Lnea digital de E/S o entrada del reloj del timer0. Salida
con colector abierto.
7 RA5/SS#/AN4 Lnea digital de E/S, entrada analgica o seleccin como
esclavo de la puerta serie sincrona.








3.6.5. PUERTO B


Tabla 3.3. Terminales de puerto B.
# de pin Nombre Funcin
21 RB0/INT Lnea digital de E/S o entrada de peticin de
interrupcin externa.
22 RB1 Lnea de E/S digital.
23 RB2 Lnea de E/S digital.
24 RB3/PGM Lnea digital de E/S o entrada del voltaje bajo para
programacin.
25 RB4 Lnea de E/S digital.
26 RB5 Lnea de E/S digital.
27 RB6/PGC Lnea digital de E/S. En la programacin serie recibe las
seales de reloj.
28 RB7/PGD Lnea digital de E/S. En la programacin serie acta
como entrada de datos.


3.6.6. PUERTO C


Tabla 3.4. Terminales de puerto C.
# de pin Nombre Funcin
11 RCC0/T1OS0/T1CK1 Lnea digital de E/S o salida del oscilador del Timer1 o
como entrada de reloj del Timer1.
12 RC1/T1OS1/CCP2 Lnea digital de E/S o entrada del oscilador del Timer1
o entrada al modulo Captura 2/salida Comparador
2/salida de PWM2.
13 RC2/CCP1 E/S digital. Tambin puede actuar como entrada
Captura1/salida Comparador 1/salida del PWM1.
14 RC3/SCK/SCL E/S digital o entrada de reloj serie sincrona / salida de
los modos SPI e I
2
C.
15 RC4/SDI/SDA E/S digital o entrada de datos en modo SPI o I/O datos
en modo I
2
C.
16 RC5/SDO E/S digital o salida de datos en modo SPI.
17 RC6/TX/CK E/S digital o patita del transmisor del USART
asncrono o como reloj del zirconio.
18 RC7/RX/DT E/S digital o receptor del USART asncrono o como
datos en el sncrono.


3.6.7. CONVERSOR ANALGICO/DIGITAL

Los microcontroladores PIC16F87x poseen un conversor A/D de 10 bits de
resolucin y 5 canales de entrada. La resolucin que tiene cada bit procedente de la
conversin tiene un valor que es funcin de la tensin de referencia Vref, de acuerdo con la
frmula siguiente:

( ) ( )
1024 1024
ref ref ref
V V V
resolucion =
+
= . . . . . . . . . ( 2 )

Si el Vref+ = 5 VDC y el Vref- es tierra, la resolucin es de 4.8 mV/bit. La entrada
analgica de 0 V corresponde a una salida digital de 00 0000 0000 y cuando es 5 V
tenemos 11 1111 1111. Los lmites mximo y mnimo de la tensin analgica que se puede
convertir son determinados por el voltaje de referencia. El voltaje diferencial mnimo es de
2 V.
Una vez seleccionado el canal, se introduce la seal analgica a un condensador de
captura y mantenimiento (sample and hold) y luego se introduce al convertidor,
proporcionando un resultado digital de 10 bits, mediante la tcnica de aproximaciones
sucesivas.

REGISTROS DE TRABAJO

El funcionamiento del conversor A/D requiere la manipulacin de cuatro registros:

1. ADRESH: parte alta del resultado de la conversin.
2. ADRESL: parte baja del resultado de la conversin.
3. ADCON0: registro de control 0.
4. ADCON1: registro de control 1.

En la pareja de registros ADRESH: ADRESL se deposita el resultado de la
conversin, que al estar compuesta por 10 bits, slo son significativos 10 de los bits de

dicha pareja. En el bit ADFM del registro ADCON1 se selecciona cmo funciona el
formato del resultado; si ADFM=1 el resultado se tendr el los 2 bits menos significativos
del ADRESH y en los 8 del ADRESL; mientras que si ADFM=0, el resultado se acomoda
en los 8 bits del ADRESH y los 2 restantes en los ms significativos de ADRESL.
El registro ADCON0, mostrado en la figura 3.4, controla la operacin del C A/D,
mientras que el ADCON1 sirve para configurar las terminales del Puerto A como entradas
analgicas o E/S digitales.


Tabla 3.5. Registros ADCON0 y ADCON1.
7 0
ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE# - ADON
Registro ADCON0

7 0
ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0
Registro ADCON1

Los bits ADCON0<7:6> sirven para seleccionar la frecuencia de reloj que se
emplea en la conversin. Los bits CHS2-0 seleccionan el canal por el que se introduce la
seal analgica a convertir, de acuerdo con la tabla 3.6:

Tabla 3.6. Seleccin de canal para introducir la seal a convertir.
CHS2-0 Canal
0 0 0
Canal 0 (RA0/AN0)

0 0 1
Canal 1 (RA1/AN1)

0 1 0
Canal 2 (RA2/AN2)

0 1 1
Canal 3 (RA3/AN3)

1 0 0
Canal 4 (RA5/AN4)






A continuacin, se indican los pasos que hay que efectuar para realizar una
conversin A/D:

1. Configuracin del mdulo C A/D.
Configurar las terminales que actuarn como entradas analgicas, las que
trabajan como E/S digitales y las usadas para la tensin de referencia
(ADCON1).
Seleccionar el reloj de la conversin (ADCON0).
Seleccionar el canal de entrada A/D (ADCON0).
Activar el mdulo A/D (ADCON0).

2. Activar, si se desea, la interrupcin escribiendo sobre PIE1 y PIR1.
Borrar el sealizador ADIF.
Poner a 1 el bit ADIE.
Poner a 1 los bits habilitadores GIE y PEIE.

3. Tiempo de espera para que transcurra el tiempo de adquisicin.

4. Inicio de la conversin.
Poner a 1 el bit GO/DONE# (ADCON0).

5. Tiempo de espera para completar la conversin A/D, la cual puede detectarse:

a). Por la exploracin del bit GO/DONE#, que al completarse la conversin pasa a
0.
b). Esperando a que se produzca la interrupcin si se ha programado, al finalizar la
conversin.
c). Auque no se permita interrupcin, el sealizador ADIF se pondr a 1 al finalizar
la conversin.


6. Leer el resultado de los 10 bits vlidos de ADRESH:L y borrar la bandera ADIF.

7. Para una nueva conversin regresar al paso 1 o al 2.

El tiempo de conversin por bit est definido por T
AD
. Se exige esperar un mnimo
de 2*T
AD
para reiniciar una nueva conversin. Si se elige como reloj para la conversin al
oscilador RC interno del conversor A/D, ste puede seguir funcionando cuando se
introduce el microcontrolador al modo de reposo o SLEEP. En los restantes modos, se
aborta la conversin y se desactiva el conversor A/D.


3.6.8. COMUNICACIN SERIE EN MODO I
2
C


La comunicacin serie es una forma muy apreciada de transferir datos digitales
entre sistemas y circuitos integrados, dada la reducida cantidad de lneas que requiere.

En los PIC16F87x, Microchip ha implantado el mdulo MSSP (Master
Synchronous Serial Port), que proporciona una interfaz de comunicacin de los
microcontroladores con otros microcontroladores y diversos perifricos. El mdulo MSSP
admite dos de las alternativas ms usadas en la comunicacin serie sncrona:

1). SPI (Serial Peripheral Interface).
2). I
2
C (Integer-Integrated Circuit).

En el caso de este proyecto se va utilizar la segunda alternativa que es I
2
C, el cual
fue desarrollado por Philips. El protocolo I
2
C utiliza nicamente dos lneas para la
transferencia de informacin entre los elementos que se acoplan al bus. Una de dichas
lneas se dedica a soportar los datos, es bidireccional y se llama SDA ( serial data ). La otra
lleva los impulsos de reloj para la sincronizacin, es unidireccional y recibe el nombre de
SCL ( serial clock ).


Este tipo de bus alcanza velocidades parecidas a las conseguidas con una del bus
paralelo, pero se necesita menos cableado y el hardware es ms sencillo.

Las lneas, SDA (datos) y SCL (reloj), transportan la informacin entre los
diferentes dispositivos conectados al bus. Cada dispositivo se identifica por una nica
direccin y puede transmitir o recibir dependiendo de la operacin que se va a realizar. Los
dispositivos se clasifican en Amo (master) o esclavo (slave). El Amo es el que inicia la
transferencia de datos y genera la seal de reloj.

El bus I
2
C es un bus multi-Amo, ya que puede tener ms de un Amo conectado y
controlando el bus. En nuestro caso el PIC16F873 es el dispositivo en modo Amo y es el
que inicia y finaliza la transferencia y genera los pulsos de reloj. Tambin selecciona el
esclavo al que se destina la informacin.

Cada transferencia comienza con la condicin de inicio (start) y termina con la
condicin de parada (stop). Ambas condiciones las genera el Amo, y la primera consiste en
un flanco descendente en SDA mientras SCL tiene nivel alto. La condicin de parada es un
flanco ascendente mientras SCL tiene nivel alto.

Los datos que se colocan sobre la lnea SDA son de 8 bits, que comienzan con el bit
ms significativo (MSB) y terminan con el bit de menos peso (LSB), al cual sigue en el
noveno bit la condicin de Reconocimiento (ACK). Para este caso, el transmisor pone
SDA = 1, mientras que el receptor pone SDA = 0 en dicho impulso de reloj, prevaleciendo
sobre la lnea el nivel bajo.

El primer byte que enva el Amo, tras la condicin de inicio, contiene la direccin
del esclavo con el que se desea realizar la comunicacin. El cdigo 0 se usa para realizar
una llamada general sobre todos los esclavos. La direccin en realidad consta de 7 bits,
estando destinado el octavo a indicar la operacin a realizar (R/W#: lectura/escritura#).
Tras este byte inicial de direccionamiento se manda otro byte que especifica las
caractersticas de la operacin a realizar.

Para activar el bus I
2
C hay que poner el bit SSPEN = 1 que es el bit 5 del registro
SSPCON (SSPCON<5>) que se ilustra en la tabla 3.7. A partir de ese momento las
terminales SDA y SCL quedan configuradas para soportar el protocolo I
2
C. Previamente
dichas terminales del Puerto C (RC3/SCL) y (RC4/SDA) han de estar configuradas como
entradas, efectuando los siguientes pasos: poner un uno y un cero en los bits RP0 y RP1
del registro STATUS respectivamente para acceder al banco 1, luego introducir 00011000
al registro TRISC.

Tabla 3.7 Registro SSPCON.
7 0
WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0



El bit WCOL es un detector de colisiones en escritura y cuando vale 1 significa que
se ha intentado escribir en SSPBUF en condiciones no vlidas para el protocolo. Si el bit
SSPOV vale uno indica desbordamiento, o sea, que llega un bit a SSPBUF sin haberse
ledo el anterior. Si SSPEN = 1 el puerto serie queda configurado con las funciones propias
de SCL y SDA. Si SSPEN = 0 las patitas RC3/SCL y RC4/SDA funcionan como lneas
de E/S digitales. El bit CKP sirve para activar el reloj en el modo esclavo, no usndose en
el modo amo. Mediante los 4 bits de menos peso de SSPCON se selecciona la frecuencia
de reloj.


3.7. PANTALLA DE CRISTAL LQUIDO


La pantalla de cristal lquido o LCD es un dispositivo de visualizacin grfico para
la presentacin de caracteres, smbolos o incluso dibujos (en algunos modelos). En este
caso se utiliza uno de 2 filas de 16 caracteres cada una y cada caracter dispone de una
matriz de 5x7 puntos (pixeles), aunque los hay de otro nmero de filas y caracteres
La pantalla de cristal lquido LCD, es un perifrico de salida visualizador muy
potente, reflexible, eficaz y econmico, siendo los microcontroladores los dispositivos ms

adecuados para optimizar sus prestaciones y control. En realidad, el mdulo LCD tiene
incrustado un microcontrolador especfico para regular su funcionamiento y una memoria
RAM.
En la memoria RAM se guardan los caracteres que se van escribiendo, y el
microcontrolador se encarga de mostrar en el display la informacin contenida en esta
RAM. La organizacin lgica de la memoria RAM es como sigue:

Apuntador
$00 $01 $02 $03 $04 $05 $0E $0F $3F
H O L A A _

$40 $41 $42 $43 $44 $45 $4E $4F $7F

Figura 3.4. Memoria RAM del LCD.

La flecha mostrada simboliza un apuntador de memorias de datos que coinciden con
la posicin del cursor. El display slo muestra una pequea rea de la memoria RAM; por
esta razn es necesario que al llegar al final de una lnea se reposicione el cursor al
principio de la otra, de no ser as, los caracteres que se sigan enviando no se visualizarn
hasta que se llegue al final del rengln-RAM y el cursor brinque automticamente a la otra
lnea (arreglo de pila circular).

La instruccin SET DDRAM ADDRESS modifica el valor del APUNTADOR
mediante el operando ADD (bits 0 a 6 de la palabra-instruccin), por lo tanto, se puede
utilizar esta instruccin para posicionar el cursor en cualquier lugar de la pantalla.

Esta instruccin tiene el BIT 7 en 1, por lo que suele referenciar las direcciones de
la pantalla incluyendo a este BIT, es decir:
Lnea 1: $80 $8F
Lnea 2: $C0 $CF



Para poder utilizar el mdulo LCD correctamente es necesario enviar los siguientes
parmetros de inicializacin:
1. $38: Interfase de 8 bits, 2 lneas en display y caracteres de 5x7.
2. $0F: Para encender el display, cursor encendido, mostrarlo parpadeando.
3. $01: Borrar display.
4. $06: Modo de incrementar memoria sin corrimiento.
5. $80: Primer caracter en primera lnea, posicin cero.

Las pantallas LCD ms comunes presentan un nmero variable de caracteres
formados por una matriz de 5x7 pixeles en una o varias lneas. Nos referimos al mdulo
LCD con microcontrolador incrustado, que tiene la posibilidad de visualizar dos lneas de
16 caracteres cada una. Dispone de 14 terminales, que se especifican en la tabla 3.8.

Tabla 3.8. Distribucin de las lneas del LCD.


Ocho de sus terminales (D0-D7) reciben los caracteres ASCII a representar, as
como ciertos cdigos de control que regulan los efectos de visualizacin. Tambin por
ellos, el mdulo LCD enva informacin sobre su estado interno.

Por las terminales Vdd y Vss se aplica la alimentacin de 5 volts de corriente directa
y tierra respectivamente.


La Terminal Vo regula el contraste de la pantalla de cristal lquido al aplicarle,
mediante un potencimetro, una tensin variable comprendida entre 0 y 5 V.

Las terminales restantes controlan las funciones principales del mdulo:

E: Seal de activacin. Si E=0, el mdulo est desactivado, y no funcionan
las seales restantes.
R/W#: Lectura / escritura. Si R/W=0, se escribe el mdulo y si R/W=1, es
ledo.
RS: Seleccin de registro de control RS = 0 o de datos RS = 1. Por D0-D7 se
transfiere informacin de control-comandos o datos de caracter a escribir.


En la tabla 3.9 se muestran los mandos que controlan al mdulo LCD, y ms
adelante se describen detalladamente.

Tabla 3.9. Mandos de control del LCD.


1. CLEAR DISPLAY: Borra la pantalla del mdulo LCD y coloca al cursor en la primera
posicin, que es la direccin 0. Por defecto, pone el bit I /D =1 para autoincremento de la
posicin del cursor.

2. CURSOR HOME: Pone el cursor en la direccin 0. No varia el contenido de la
memoria DDRAM que guarda los datos y que queda diseccionada desde la posicin 0.

3. ENTRY MODE SET: Establece la direccin del movimiento del cursor (I /D); si pone
a 1 el bit S, desplaza la visualizacin cada vez que se escribe un dato. Si S = 0, la
presentacin es la normal.

4. DISPLAY ON/OFF CONTROL: Activa o desactiva al display (D) y al cursor (C) y
determina si ste parpadea o no.

5. CURSOR DISPLAY SHIFT: Mueve el cursor y desplaza la visualizacin sin cambiar
el contenido de la memoria DDRAM.

6. FUNCTION SET: Establece el nmero de lneas de la interfase con el bus de datos,
siendo habitual que sea de 8 bits, con lo que DL = 1. Especifica el nmero de lneas de
caracteres, para que sean 2 se deben poner N = 1, y el formato del caracter, que es de 5x7
pixeles, si F = 0.

7. SET CGRAM ADDRESS: El mdulo LCD tiene definido los caracteres ASCII, pero
adems permite que el usuario pueda definir un mximo de 9 caracteres nuevos. Estos se
guardan en la memoria CGRAM de 64 bits. Cada caracter est especificado con un nmero
de bits comprendido entre 6 y 16 bits, segn su complejidad. Dichos bits se almacenan en
las sucesivas posiciones de la CGRAM. Con este mando se indica la direccin de CGRAM
a partir de la cual se irn almacenando los bits que definen el nuevo caracter. Tras ejecutar
este mando, todos los datos que se lean o escriban posteriormente lo hacen desde esa
posicin de la CGRAM.


8. SET DDRAM ADDRESS: Establece la direccin de la DDRAM a partir de la cual
todos los datos que se lean o escriban posteriormente lo harn desde esa posicin. Los 16
caracteres del primer rengln ocupan la direccin 80h-8Fh, y los del segundo desde la C0h
a la CFh.

9. READ BUSY FLAG ADDRESS: Se trata de un mando para la lectura de la bandera
BUSY que indica si todava se est ejecutando un mando previo en el mdulo LCD.
Adems, proporciona la direccin de la CGRAM o DDRAM que se haya utilizado la
ltima vez.

10. WRITE DATA TO CGRAM o DDRAM: Se escribe en la DDRAM los datos
(Caracteres ASCII ) que se quieren visualizar. Tambin se escriben en la CGRAM los bits
de los nuevos caracteres creados por el usuario. Se usa una memoria u otra segn haya sido
la instruccin de direccionamiento previa, que har que se refiera a la CGRAM o a la
DDRAM.

11. READ DATA TO CGRAM o DDRAM: Igual que en el mando anterior, pero en esta
ocasin en modo de lectura.


3.8. RELOJ DE TIEMPO REAL DS1307


El DS1307 es un reloj calendario de tiempo real con 64 bytes de NV SRAM. Los
datos y las direcciones se envan serialmente por dos lneas bidireccionales.

Trabaja con un cristal de 32.768 Khz conectado en x1 y x2
Este RTC suministra informacin de segundos, minutos, horas, das, fecha, meses y
aos.
Los meses son automticamente ajustados incluyendo la correccin si el ao es
bisiesto.
El reloj trabaja a 24 o 12 horas de acuerdo a como se configure.

El ao se configura de 00 a 99.
Posee 56 bytes de memoria libres para guardar informacin y 8 bytes del sistema.
El DS1307 est censando la fuente de alimentacin y si sta es desconectada, l
conmuta automticamente a una batera adicional de 3 Vdc que se conectara en la
terminal 3 del mismo RTC (cuando sucede esto el RTC no puede ser direccionado,
por lo tanto no puede ser consultado ni configurado en esta condicin).

La programacin y lectura de datos del RTC, se encuentra implementada con el
protocolo I
2
C, a travs de 2 lneas I/O del microcontrolador. Los puertos y seales del RTC
que permiten la implementacin del protocolo I
2
C se muestra a continuacin:

Tabla 3.10. Puertos y seales RTC.
PUERTO FUNCION
PORTC3 SCL (Serial Clock Input)
PORTC4 SDA (Serial Data Imput/Output)



En la implementacin de la comunicacin I
2
C se configura el microcontrolador
como dispositivo Amo y el RTC como esclavo. Esta configuracin se puede apreciar en la
figura 3.5

Figura 3.5. Manejo del bus en la comunicacin I
2
C.

El microcontrolador como Amo es el encargado de generar el comienzo de
transmisin y recepcin de datos. En un principio la transmisin (escritura) de datos con el

RTC, consiste en la actualizacin o iniciacin de los registros de la hora y la fecha para que
comience a contar y el de control, encargado de generar una la seal externa cuadrada.

La informacin de tiempo y calendario es obtenida al leer los registros apropiados
(con longitud de 1 byte), los cuales estn localizados en las direcciones de memoria del
RTC desde la 00H hasta 07H como se muestra en la tabla 3.11.

Tabla 3.11. Mapeo de memoria del RTC.


De igual manera, si se desea configurar el tiempo o el calendario del RTC se deben
modificar los respectivos bytes de los registros de la anterior tabla. La batera de respaldo
permite que el reloj contine en funcionamiento manteniendo la hora actualizada; sin
embargo, el usuario puede consultar y programar la hora despus de un tiempo transcurrido
cuando lo estime conveniente.










CAPTULO IV
DISEO DE PROTOTIPO BSCULA ELECTRNICA

4.1. INTRODUCCIN

Este proyecto es un prototipo diseado para la medicin de peso, mediante un
sistema de sensores (galga extensiomtrica), sin pesas o cualquier otro tipo de palanca que
provoque prdida de tiempo, mediciones confusas ya sea por mala visibilidad o inexactitud
del aparato. Por lo tanto este prototipo permite tener una mejor automatizacin y mayor
rapidez para poderlo utilizar y aplicar en los hogares, comercios, hospitales, escuelas etc.
En la figura 4.1 se muestra una fotografa del proyecto.


Figura 4.1. Fotografa de la bscula electrnica.


4.2. DESARROLLO

La bscula electrnica consta de cuatro partes principales: Fuentes de alimentacin,
sensor y etapa de amplificacin, etapa digital y programacion. A continuacin se hace una
descripcin ms detallada de cada etapa.

4.3. FUENTES DE ALIMENTACIN

Para proveer al sistema con los voltajes de alimentacin necesarios, se disearon
dos fuentes:
a) La primera, trabaja con la etapa digital que requiere una tensin de 5 V
dc
; con esta
fuente se alimenta el PIC16F873, la pantalla de cristal lquido, el reloj de tiempo
real y tambin el amplificador operacional LM324.
b) La segunda, es la encargada de aplicar un voltaje de excitacin de 10 V
dc
que
requiere el sensor.

4.3.1. FUENTE DE 5 V
dc


La figura 4.2 muestra el diagrama esquemtico del circuito de fuente para 5 V
dc
. En
esta, se emplea un transformador de 125 V
ac
a 9 V
ac
. Para la rectificacin de este voltaje se
emplea un puente de 2 A. Los capacitores C
1
y C
2
se usan para filtrar, adems de aminorar
el ruido del voltaje que sale del puente. El circuito incluye el arreglo de resistencia R
1
y el
led D
2
, para indicar cuando la fuente est encendida.



0
0
0
0
U3
LM7805C/TO
1 3
2
IN OUT
G
N
D
C1
470uf
D2
led
R1
470 ohms
C2
.1uf
JP1
9 Vac entrada
1
2
JP6
5 Vdc salida
1 2
0
C3
.O1uf
JP7
5 Vdc salida
1 2
0
amp.op.
- +
D3
puente rect.
2
1
3
4

Figura 4.2. Fuente de 5 V
dc
.

El LM7805 se usa para regular el voltaje de entrada de 9 V
dc
a un voltaje de 5 V
dc
.
En la salida del regulador se encuentra el capacitor C
3
de 0.01 uf para atenuar el nivel de
ruido en la etapa digital, evitando la posibilidad de lecturas errneas a causa de este factor.
La fuente tiene disponibles los conectores JP6 y JP7, que son salidas de 5 V
dc
, para la
conexin con el circuito digital; sin embargo, slo uno de ellos es usado, teniendo una
salida disponible por si se necesitara ms adelante. El conector JP1 es la entrada de 9 V
ac

que proviene del transformador.

4.3.2. FUENTE DE 10 V
dc


En el diagrama esquemtico de la figura 4.3 se puede ver el diseo de la fuente de
10 V
dc
.

Esta fuente utiliza un transformador que reduce el voltaje de 127 a 18 V
ac
. Para
rectificar la seal se utiliza un puente de 2 A que provoca una cada de voltaje
aproximadamente de 2 V por el efecto de conduccin de los diodos rectificadores dando as
un voltaje aproximado de 16 V.

El LM7810 est regulando el voltaje a 10 V
dc
. Los capacitores C
4
y C
2,
de la misma
manera que en la fuente anterior, son utilizados para filtrar la seal y reducir el ruido. La
resistencia R
1
de 1 k y el led conforman el arreglo para indicar el funcionamiento de la

fuente. Por ltimo se coloca el capacitor C
3
en la salida del regulador como supresor de
ruido.
C3
22uf
U18
LM7810
1 3
2
IN OUT
G
N
D
JP1
salida 10 Vdc
1 2
P1
4
3
2
1
-
F
N
+
Led
0
C2
.01uf
C4
1000uf
Entrada 18 Vac
1
2
R1
1k

Figura 4.3. Fuente de 10 V
dc
.

4.4. SENSOR Y ETAPA DE AMPLIFICACIN

La salida de voltaje de la galga extensiomtrica es de 0.5 mV/kg. Esto implica que
para el intervalo de 0 40 kg., el voltaje mximo sera de 20 mv. Ya que el voltaje de
referencia del convertidor es de 5 V, se tiene un intervalo dinmico de voltaje muy
pequeo, por lo que se emplea una etapa de amplificacin, que extienda este intervalo de
voltaje a un valor cercano al mximo permisible. Para este caso, se fija su valor en V
max
=
3.92 V
dc,
(dejando un margen de tolerancia de 1 V, respecto al voltaje de referencia).

En la etapa de amplificacin se utiliza uno de los cuatro amplificadores
operacionales que contiene el circuito integrado LM324, en la forma de amplificador no
inversor, ya que la configuracin tiene una mejor estabilidad en la frecuencia.

La ganancia requerida en esta configuracin est dada en funcin del voltaje
mximo que se desea aplicar al conversor A/D. Para este caso, se fija su valor en V
max
=
3.92 V
dc
. De esta forma, la ganancia est dada por:

1 . 196
20
922 . 3
max
= = =
mV
V
V
V
G
dc
sensor
( 3 )


Con este valor de ganancia y fijando uno de los valores de las resistencias se disea
la configuracin no inversora:

La ganancia (G) en el amplificador se determina por:

|

\
|
+ =
Ri
Rf
G 1 ( 4 )

Por lo tanto, si R
i
toma el valor de 1 k, R
f
se obtiene de la siguiente expresin:

|

\
|
+ =
1000
1 1 . 196
Rf
.. ( 5 )
Despejando, queda:

= k Rf 1 . 195

Dado que este valor no existe comercialmente, se implementa mediante una
resistencia fija de 100 k, en serie con un potencimetro de 100 k (ajustado a 95 k
aproximadamente).

El voltaje de salida del amplificador es aplicada al canal 0 del convertidor
(RA0/AN0).

Para el conversor A/D se tiene:

Si de los 10 bits del conversor solo se toman en cuenta 8 bits, del resultado
de la conversin, la resolucin es de:


mV
on cuantizaci de nivel
referencia de Voltaje
Vesc 61 . 19
255
5
_ _
_ _
= = = .. ( 6 )

La cuenta digital que arrojo el conversor para un voltaje de entrada amplificado
Vamp queda dado por la siguiente ecuacin:

mV
Vamp
Vesc
Vamp
Nb
61 . 19
= = ...... ( 7 )

Nb = Cuenta digital.
Vesc = Voltaje de escaln (mV).
Vamp = Voltaje de entrada amplificado.

Para determinar el peso equivalente a esta cuanta digital (Nb) se tiene lo siguiente:

kg
mV
Vsensor 5 . 0 = . ( 8 )

G
kg
mV
Vamp = 5 . 0 . ( 9 )

( )
kg
mV
kg
mV
Vamp 05 . 98 1 . 196 5 . 0 = = ( 10 )

Para este voltaje de entrada amplificado
kg
mV
Vamp 05 . 98 = corresponde una
cuenta 101 = Nb de aqu en este caso:

K
kg

001
1 101


Por lo tanto la resolucin de la bscula en kilogramos es:


kg K 200 . 0
5
1
101
001
= = = ... ( 11 )

Finalmente la ecuacin que permite determinar el peso en funcin de la cuenta
digital Nb es:

Nb K Peso = .. ( 12 )

En la tabla 4.1 se muestran algunos voltajes de entrada y sus equivalencias
calculadas a cuenta digital y peso.

Tabla 4.1 Tabla de correspondencia mV/kgs.
Voltaje de entrada
amplificado (mV)
Vamp
Cuenta digital (Nb) Peso ( kg )
0.00 0000 0000 0
19.61 0000 0001 .2
39.22 0000 0010 .4
58.83 0000 0011 .6
78.44 0000 0100 .8
98.05 0000 0101 1.0
117.66 0000 0110 1.2
490.25 0001 1001 5.0
980.50 0011 0010 10
1961.00 0110 0100 20
2941.50 1001 0110 30
3922.00 1100 1000 40

En la figura 4.4 se ilustra la conexin entre el sensor y el amplificador. La seal
proveniente de la celda de carga llega al conector JP3 (terminal 6). En el conector JH1 se
tiene disponible la salida ya amplificada por un factor G = 196.




















Figura 4.4 Etapa de amplificacin.

4.5. ETAPA DIGITAL

El elemento principal de esta etapa es el PIC16F873, debido a que manipula todos
los dispositivos como: reloj de tiempo real, botones para configuracin de la hora, pantalla
de cristal lquido e internamente su conversor A/D. En la figura 4.5 se muestra
conjuntamente todas estas partes.






JH1
Salida amplif icada
1
1
Rf
199k
JP3
Galga ext.
1
2
3
4
5
6
7
Ri
1k
0
0
JP2
Entrada 10 Vdc
1 2
0
5 Vdc
U1A
LM324
3
2
4
1
1
1
+
-
V
+
V
-
OUT


Figura 4.5. Etapa digital.
R5
2.2k
0
0
0
Y1
XM/SM
U8
DS1307
7
5 1
2
6
3
8
SQW/OUT
SDA X1
X2
SCLK
VBAT
VCC
Y2
XM/SM_0
SW4
RESET
SW3
Incremento
SW2
Modo
VCC
R7
2.2k
BATERIA
1
2
VCC
R1
330
VCC
JP3
LCD
1 2
3 4
5 6
7 8
9 10
11 12
13 14
VCC
VCC
R2
2.2K
SW1
Ajuste
R6
2.2k
0
0
0
JP1
INSENS
1
2
3
4
5
D2
LED
U2
PIC16F873
1
9
10
20
2
3
4
5
6
7
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
MCLR/VPP
OSC1/CLK
OSC2/CLKOUT
VDD
RA0/AN0
RA1/AN1
RA2/AN2
RA3/AN3/REF
RA4/T0CLK
RA5/AN4/SS
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RC0/T1OSO/T1CLK
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
R3
4.7k
C3
10pf
0
VCC
<Doc> <RevCode>
<Title>
A
1 1 Tuesday, June 13, 2006
Title
Size Document Number Rev
Date: Sheet of
R4
4.7k
<Doc> <RevCode>
<Title>
A
1 1 Tuesday, June 13, 2006
Title
Size Document Number Rev
Date: Sheet of
GND
PARLANTE
1
2
5 Vcd
1
2
VCC
C1
22pf
R9
100
R8
10k
C2
22pf

4.5.1. CIRCUITO DE RESET

Esta etapa permite reinicializar el microcontrolador, mediante el uso de un pulsador
normalmente abierto (NA) y el arreglo de resistencias que se muestran en la figura 4.6.

VCC
SW4
RESET
1 2
R9 100
0
R8
10k
MCLR/VDD

Figura 4.6. Circuito de Reset.

La terminal de entrada del PIC, indicada con MCLR# es bajo activa, es decir, al
aplicarle una entrada de 0 V (cero lgico) el sistema se reinicia automticamente,
colocando el apuntador del programa en la direccin cero de la memoria, donde deber
estar situada la primer instruccin del programa.

Adems, la mayora de los registros de estado y de control del procesador toman un
estado conocido y determinado como condicin inicial o valor de reset del registro. Para
operacin normal del microcontrolador, debe haber un 1 lgico (5 V) en esta terminal,
para lo cual se coloca R
8
directamente a V
cc
.

Cuando el interruptor est abierto, se tiene una tensin positiva en la terminal
MCLR#. En caso contrario, es decir, cuado se cierra el interruptor, la terminal MCLR# se
aterriza a travs de la resistencia R
9
.

4.5.2. CIRCUITO DEL OSCILADOR

Es el encargado de generar los impulsos que sincronizan el funcionamiento de todo
el sistema. Se utiliza un cristal de 4 MHz para aprovechar la velocidad mxima de trabajo

del microcontrolador haciendo con esto ms eficiente el sistema. Con dicha frecuencia del
cristal, el microcontrolador tiene un ciclo de ejecucin de instruccin de aproximadamente
1 seg. Todas las instrucciones requieren este tiempo a excepcin de las de salto, que duran
el doble.
Los capacitores C1 y C2 son utilizados para evitar ruido en el cristal, de esta forma
se asegura una oscilacin estable (ver figura 4.7).

OSC1/CLKIN OSC2/CLKOUT
0
C2
22pf
Y1
XM/SM
C1
22pf

Figura 4.7. Circuito del oscilador.


4.5.3. RELOJ DE TIEMPO REAL

En la figura 4.8 se muestran las conexiones de este circuito. Las resistencias R
3
y R
4,

as como la R
2
que se conectan a 5 V
dc
se agregan debido a que las lneas SDA, SCL y
SQW/OUT son salidas de drenador abierto, por lo que requieren resistencias externas de
PULL-UP. Estas lneas son conectadas a las lneas del PIC para entablar la comunicacin
requerida.

La red formada por la resistencia R
1
y el led D
2
, permite visualizar las pulsaciones
que cada segundo entrega la lnea SQW/OUT, de acuerdo al periodo programado en el
reloj. En otras palabras esta red sirve como testigo del correcto funcionamiento de RTC.
El conector denominado BATERA es utilizado para proporcionar la entrada de
voltaje externo o pila para una condicin de falla de energa del sistema. El RTC cuenta con

deteccin de falla, conmutando inmediatamente a la alimentacin de la pila para no perder
la informacin programada anteriormente. Por ltimo el cristal Y
2
tiene un valor de 32.768
Khz que permite utilizar un divisor exacto para la generacin de una tasa de tiempo de un
seg.
LINEA SDA del
PIC (15)
R1
330
BATERIA
1
2
R3
4.7k
VCC
R2 2.2k
0
VCC
R4
4.7k
U1
DS1307
7
5 1
2
6
3
8
SQW/OUT
SDA X1
X2
SCLK
VBAT
VCC
LINEA SCL del
PIC (14)
D2 LED
Y2
XM/SM
C3
10pf

Figura 4.8. Circuito del reloj de tiempo real.

4.5.4. BOTONES PARA CONFIGURAR EL RELOJ DE TIEMPO REAL

Otra parte importante del circuito principal es el arreglo mostrado en la figura 4.9
que consiste en una serie de botones (Normalmente abiertos), que tienen la funcin de
programar el reloj de tiempo real.

Los tres botones, conectados al puerto C del microcontrolador, tienen las siguientes
funciones:

a) SW1 funciona como AJUSTE.
b) SW2 como MODO y por ltimo.
c) el SW3 como INCREMENTO.

Con el botn de AJUSTE se inicia la configuracin; por lo que despus de haberlo
presionado se utilizan los botones de MODO e INCREMENTO para modificar los
segundos, minutos, horas, da, fecha, mes y ao.
Una vez que se ha configurado el tiempo y la fecha deseada, el SW2 funciona como
modo de 24 horas, y el SW3 en formato de 12 horas (AM/PM).

0
SW2
Modo
R7
2.2k
RC7(18)
R6
2.2k
RC5(16)
RC6(17)
R5
2.2k
SW1
Ajuste
SW3
Incremento

Figura 4.9. Botones para configurar el RTC.

4.5.5. CONECTORES PARA LOS CONVERSORES A/D

Su principal funcin es la de conectar la seal externa que proviene del sensor hacia
la entrada RA0 (Canal 0) del conversor A/D del microcontrolador. Se emplea un conector
de 5 terminales, dejando disponibles los 4 canales restantes del conversor A/D para la
eventual conexin de otras seales, como se muestra en la figura 4.10.

RA0/AN0(2)
RA2/AN2(4)
RA3/AN3/REF(5)
JP1
INSENS
1
2
3
4
5
RA1/AN1(3)
RA5/AN4/SS(7)


Figura 4.10. Entradas de conversores A/D.

4.5.6. PANTALLA DE CRISTAL LQUIDO

La pantalla LCD, como se describi en el captulo anterior, es un perifrico de 14
terminales, de las cuales tres estn conectadas a tierra, y una a 5 V para la polarizacin.
Tambin se tiene la opcin para que Vo se conecte a un potencimetro para variar la
intensidad de los caracteres mostrados en la pantalla. Como es opcional, en este caso, se
conect a tierra.
La terminal R/W# se conecta a tierra para poder escribir en la memoria RAM y no
leerla ya que no se tiene ningn dato guardado ah. Las lneas RS y E estn conectadas a
RC0 y RC1 respectivamente; estas dos patitas son para saber que se va a mandar: datos o
comandos. Las ltimas ocho lneas (D
0
-D
7
) estn conectadas al puerto B del
microcontrolador para enviar instrucciones o datos que se desean mostrar en la pantalla.
La figura 4.11 muestra las conexiones de la pantalla LCD con el microcontrolador.

Figura 4.11. Conexin del LCD con el microcontrolador.


4.6. PROGRAMACIN
4.6.1. DIAGRAMA DE FLUJO DEL FUNCIONAMIENTO GENERAL DE LA
BSCULA
Inicio
Configuracin de puertos
Puerto A Entradas
Puerto B Salidas
Puerto C C0 - C4 Salidas
C5, C6 y C7 Entradas
Configuracin de pantalla
Mensaje de Bienvenida
Inicializacin del RTC
Parmetros para activacin del
conv. A/D y config. Puerto A
entradas analgicas
ADRESH >= 0001?
Si
No
Muestra peso en
pantalla
Apunta a la
localidad 0 del
RTC para recibir o
enviar datos
Boton AJUSTE = 1?
Si
Configura pic en
modo recepcin
No
Muestra tiempo y
fecha en pantalla
Permite al usuario
modificar datos del
RTC con botones:
MODO e
INCREMENTO
Boton AJUSTE= 1?
Si No
H.MILIT=1?
H.AM/PM=1?
No
Si
Cambia a modo
24 hrs.
Cambia a modo
12 hrs.
No
Si

Figura 4.12. Diagrama de flujo del funcionamiento de la bscula.

4.6.2. DIAGRAMA DE FLUJO DE OPERACIN DEL CONVERSOR A/D


Configuracin Conversor A/D
- ADCON0 = 11000001
- Tipo osc., canal de entrada
analgica, activar conversor.
ADON = 1 ?
Adquisicin canal
seleccionado.
ADCON1 = 00001110
GO/DONE# = 1 ?
Conversin en
proceso.
GO/DONE# = 0 ?
Fin de conversin.
Peso = ADRESH
Resta peso de
charola a ADRESH
(calibracin).
Regla de tres
( Convierte resultado
digital a Kg ).
Mandar peso en
Kg a pantalla.
Fin
No
Si
Si
No
No
Si


Figura 4.13. Diagrama de flujo del Conversor A/D.


4.6.3. DIAGRAMA DE FLUJO DE OPERACIN ESCRITURA PARA EL RTC

Ajuste= 1
Modo= 1?
Ajuste= 1?
Incremento= 1?
Incrementa
minutos en 1
Min+1Min
Min > 59?
Limpia Min
Min= 00
No
Si
Si
Si
Si
No
No
No
Config. RC3/SCL y
RC4/SDA como
entradas
Config. Velocidad std . Con nivel
I2C (80h SSPSTAT < SMP >)
Config. Velocidad del
bus I2C= 100 Khz
(09hSSPAD)
Activar bus I 2C y
escoger
frecuencia de reloj
(28hSSPCON)
Limpiar
PIR1<SSPIF=0>
Generar condicin de inicio
SSPCON2 <SEN=1>
PIR1<SSPIF=1>?
No
Carga direccin del
esclavo D0W
(Modo escritura)
Limpiar PIR1<SSPIF=0>
WSSPBUF RTC
PIR1<SSPIF=1>?
Cargar direccin
puntero (0007) en W
Limpiar
PIR1<SSPIF=0>
WSSPBUF RTC
PIR1<SSPIF=1>?
Carga el nuevo valor del dato a
modificar (min, seg, hor,etc.)
Limpiar PIR1<SSPIF=0>
Manda el byte a SSPBUF
PIR1<SSPIF=1>?
Carga valor 10h en W para configurar
lnea SQW/OUT del RTC para dar
pulsos de 1Seg.
Si
Si
No
No
Si
Si No
Cambia los dems
datos del reloj
(horas, aos, das,
etc.)
Limpiar PIR1<SSPIF=0>
PIR1<SSPIF=1>?
Manda datos a SSPBUF
Limpiar PIR1<SSPIF=0>
No
Si
Activa condicin de paro
SSPCON2<PEN=1>
PIR1<SSPIF=1>?
Fin
Si
No

Figura 4.14. Diagrama de flujo de modo escritura para el RTC.

4.6.4. DIAGRAMA DE FLUJO DE OPERACIN LECTURA PARA EL RTC

Limpiar PIR1<SSPIF=0>
D1 SSPBUF
PIR1<SSPIF=1>?
Limpiar PIR1<SSPIF=0>
Activar modo recepcin
SSPCON2<RSEN=1>
PIR1<SSPIF=1>?
Limpiar PIR1<SSPIF=0>
SSPCON2<ACKDT=0>?
Activar condicin de reconocimiento
SSPCON2 <ACKEN=1>
Leer byte
SSPBUFW
Si No
No
Si
Si
No
Generar condicin de inicio
SSPCON2 <SEN=1>
PIR1<SSPIF=1>?
No
Carga direccin del
esclavo D1W
modo lectura
Si
Limpiar PIR1<SSPIF=0>
Activa condicin de paro
SSPCON2<PEN=1>
PIR1<SSPIF=1>?
Fin
Si
No
Cargar direccin
puntero (0007) en W
Config. RC3/SCL y
RC4/SDA como
entradas
Config. Velocidad std. Con nivel
I2C (80h SSPSTAT < SMP >)
Config. Velocidad del
bus I2C= 100 Khz
(09hSSPAD)
Activar bus I2C y
escoger
frecuencia de reloj
(28hSSPCON)
Limpiar
PIR1<SSPIF=0>

Figura 4.15. Diagrama de flujo de modo lectura para el RTC.

4.6.5. CDIGO DEL PROGRAMA


LIST P=16F873 ; Tipo de procesador
#include p16f873.inc ; Definiciones de registros internos

__config _XT_OSC & _WDT_OFF & _PWRTE_ON &_LVP_OFF


PCL equ 0x02
DATO_H equ 0x20 ; Localidad para almacenamiento de la conversin los 8 bits ms altos
(ADRESH)
DATO_L equ 0x21 ; Almacenamiento de la conversin de los 2 bits MSB de la parte baja
(ADRESL)
CONT1 equ 0x22 ; Retardos para la adquisicin de la conversin analgica a digital.
CONT2 equ 0x23
cuenta equ 0x24
J equ 0x26 ; Contadores para retardos de mandos y datos del LCD.
K equ 0x27
J1 equ 0x28
CONT16 equ 0x32 ; contador para TMR0 con retardo de 1seg.
PESO_HEX equ 0x38 ; se almacena dato de la conversin en hex.
Multiplicando equ 0x39 ; Variable para el multiplicando.
Multiplicador equ 0x3A ; Variable para el multiplicador.
Resultado_H equ 0x3B ; Parte alta del resultado.
Resultado_L equ 0x3C ; Parte baja del resultado.
Estatus_Temp equ 0x3D ; Reg. de estado temporal.
Contador equ 0x3E ; Variable con nmero de veces a operar.
Residuo equ 0x3F ; Variable para guardar residuo de la resta la reg. de tres.
Minuendo equ 0x40 ; Minuendo de la resta para regla de tres.
Sustraendo equ 0x41 ; Variable para guardar el sustraendo de la resta de la reg. de tres.
Resultado2 equ 0x42 ; variable para guardar el resultado de la multiplicacin.
Decimal equ 0x43 ; Variable para guardar los decimales del peso.
PESOC equ 0x4C ; localidad para las centenas del peso
PESOD equ 0x4D ; localidad para las decenas del paso
PESOU equ 0x4E ; localidad para las unidades del peso
BCD_2 equ 0x4F ; Localidades para almacenamiento del resultado de conversin de bin a
; bcd
BCD_1 equ 0x50
BCD_0 equ 0x51
CONT equ 0x52 ; contador para el proceso de la conversin de BIN a BCD
TEMPESO equ 0x53 ; localidad para datos temporales de la conversin del peso
AOS equ 0x54 ; localidades para guardar datos de fecha y tiempo.
conta equ 0x55
DIAS equ 0x56
FECHAS equ 0x57
HORA equ 0x58
MINUTO equ 0x59
MESES equ 0x60
SEGUNDO equ 0x61
TEMP equ 0x62 ; Localidades para guardar datos temporales.
TEMP1 equ 0x63
contg equ 0x64 ; Contador para checar las variables del RTC.

DIREJ equ 0x65 ; Localidad de memoria para direccionar puntero en RTC.
DATEMP equ 0x66 ; Localidad para almacenar un dato temporal que luego va a fecha y
; tiempo.
MAX equ 0x67 ; Localidad de memoria donde se almaceno el valor de 7 das como valor
; mximo.
CIETE7 equ 0x68
DOSE12 equ 0x69
MESE12 equ 0x70
VEITE24 equ 0x71
TREINTA31 equ 0x72
CINCUNTAY9 equ 0x73
NOVENTAY9 equ 0x74
HORA1 equ 0x75

org 0x00 ; Vector de Reset.
goto INICIO ; Brinca a la etiqueta inicio.
org 0x05 ; Salva el vector de interrupcin.

;*******************************************************************
; INICIO DEL PROGRAMA.
;*******************************************************************
INICIO

;*******************************************************************
; CONFIGURACIN DE PUERTOS.
;*******************************************************************
bsf STATUS,5 ; Seleccin del banco 1.
movlw 0x00
movwf PORTB ; Configura puerto B como salida.
Movlw 0xF8
movwf PORTC ; Configura Pines C3 y C4 como entradas para el RTC y C5, C6 Y C7 para
los botones.
Bcf STATUS,5 ; Regresa al banco 0.

;*******************************************************************
; LLAMA RUTINAS DE CONFIGURACIN DE PANTALLA.
;*******************************************************************
call INIT_DISP
call LIMPIA_DISP
call DUAL_LINE
call LIMPIA_DISP
call CLC_CONV ; Configuracin del REG. ADCON1 (config. de las lneas del conv. A/D).
call MENSAJE ; Llama al mensaje Hola Bienvenido.

;*******************************************************************
; MANDA MENSAJE DE BIENVENIDA A LA PANTALLA.
;*******************************************************************
MENSAJE:
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '

call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw 'H'
call DATO
movlw 'O'
call DATO
movlw 'L'
call DATO
movlw 'A'
call DATO
call LINEA2 ; Llama rutina para brincar a la segunda lnea.
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw 'B'
call DATO
movlw 'I'
call DATO
movlw 'E'
call DATO
movlw 'N'
call DATO
movlw 'V'
call DATO
movlw 'E'
call DATO
movlw 'N'
call DATO
movlw 'I'
call DATO
movlw 'D'
call DATO
movlw 'O'
call DATO
call RET100
call RET100
call RET100
call RET100
call RET100
call RET100
call RET100
call RET100
call CONFI ; Llama rutina de parmetros para inicializacin del RTC.

;*******************************************************************
; RUTINA DE FUNCIONAMIENTO GENERAL.
;*******************************************************************

BUCLE


call LEE_SENSOR ; No, Se va a leer el sensor.
movlw 0x08 ; Carga el numero 5-9 que es el valor que representa 1Kg.
subwf ADRESH,W ; Resta/compara con ADRESH.
btfsc STATUS,Z ; Son iguales (Z=1)??.
goto NEWPESO ; Si.
btfsc STATUS,C ; No. ADRESH > 5 (C=1)?.
goto NEWPESO ; Si.
call REIREL ; No.
btfsc PORTC,5 ; Checa si el bit 5 = 1 del puerto C.
goto MINUTOS ; Si, se va a modificar datos del reloj.
call MODREC ; Configura PIC en modo de recepcin.
LIM
;CALL CPARO
movlw 00h
call LCDIR ; Direcciona cursor de la pantalla en la posicin h80.
call MOSTRAR ; Muestra en pantalla tiempo y fecha.
btfsc PORTC,6
call CHECA
btfsc PORTC,7
call CHECA1
CHB5
btfsc PORTC,5 ; Checa si el bit 5 = 1 del puerto C.
goto MINUTOS ; Si, se va a modificar datos del reloj.
goto BUCLE ; No, Se va a leer el sensor.

;*******************************************************************
; RUTINA PARA CONFIGURAR AL PIC EN MODO DE RECEPCIN.
;*******************************************************************
MODREC
call CINI ; Llama la rutina para enviar la condicin de inicio de transmisin.
movlw 0xD1 ; Carga la direccin del esclavo (D0 para CI DS1307).
call ENVDATO ; Llama a la rutina para envo de un byte de datos.
LEEOTR
bcf PIR1,3 ; Apaga bit 3 del registro PIR1.
bsf STATUS,5 ; Cambio al banco1.
bcf STATUS,
bsf SSPCON2,3 ; Activacin del modo receptor (RCEN=1).
bcf STATUS,5 ; Regreso al banco 0.
CICLO
btfss PIR1,3 ; Espera que haya terminado la recepcin del dato del RTC.
goto CICLO2
bcf PIR1,3 ; Apaga bit 3 del registro PIR1.
bsf STATUS,5 ; Cambio al banco 1.
bcf STATUS,6
bcf SSPCON2,5 ; Limpia el bit ACKDT para transmisin del bit de
reconocimiento.
bsf SSPCON2,4 ; Pone en alto el bit ACKEN para iniciar la secuencia de
generacin de reconocimiento.
bcf STATUS,5 ; Regreso al banco 0.
CICLO3
btfss PIR1,3 ; Checa si el dato que mando el RTC ya fue recibido por el pic.
goto CICLO3 ; Esta checando hasta que se reactiva el dato.
movf SSPBUF,0 ; SSPBUF recibe el dato y lo pasa al registro W.
movwf TEMP ; Guarda el dato en TEMP.

decfsz conta,1
call GUARDAR ; Guarda los cambios en su respectiva variable.
bcf PIR1,3
bsf STATUS,5 ; Cambio al banco 1.
bcf STATUS,6
bsf SSPCON2,3 ; Activacin del modo receptor (RCEN=1).
Bcf STATUS,5 ; Regreso al banco 0.
CICLO4
btfss PIR1,3 ; Espera que Haya terminado la operacin.
goto CICLO4
bcf PIR1,3
bsf STATUS,5 ; Cambio al banco 1.
bcf STATUS,
bsf SSPCON2,5 ; Pone en el alto el bit ACKDT para transmisin del bit de
reconocimiento.
bsf SSPCON2,4 ; Pone en alto el bit ACKEN para iniciar la secuencia de generacin de
reconocimiento.
bcf STATUS,5 ; Regreso al banco 0.
CICLO5
btfss PIR1,3 ; Espera que Haya terminado la operacin.
goto CICLO5
movf SSPBUF,0 ; Leer el registro SSPBUF y pasar le dato al registro W.
call CPARO ; Fin de la transmisin.
goto LIM ; Se va a mostrar los nuevos datos.

;*******************************************************************
; RUTINA PARA ENVIO DE DATOS AL RTC.
;*******************************************************************
GRAVARTC
call CINI ; Llama a la rutina para enviar la condicin de inicio de transmisin.
movlw 0xD0 ; Carga la direccin del esclavo (D0 pra CI DS1307).
call ENVDATO ; Llama a la rutina para envo de un byte de datos.
movlw 0x00 ; Carga la direccin de memoria o donde se va a escribir el dato.
call ENVDATO
movf SEGUNDO,0 ; Carga el dato para inicio de reloj (SEGUNDO).
call ENVDATO
movf MINUTO,0 ; Carga el dato para inicio de reloj (MINUTO).
call ENVDATO
movf HORA,0 ; Carga horas (HORAS).
call ENVDATO
movf DIAS,0 ; Carga da de la semana.
call ENVDATO
movf FECHAS,0 ; Manda da del mes.
call ENVDATO
movf MESES,0 ; Manda mes.
call E NVDATO
movf AOS,0 ; Manda ao.
call ENVDATO
movlw 0x10 ; Configura la lnea de salida (SQW/OUT) de reloj para dar pulso de 1 seg.
call ENVDATO
call CPARO ; Llama a la rutina para enviar la condicin de PARO.
return

;*******************************************************************
; RUTINA PARA ENVO DE CONDICIN DE PARO.

;*******************************************************************
CPARO
bcf PIR1,3
bsf STATUS,5 ; Cambio al banco 1.
bcf STATUS,6
bsf SSPCON2,2 ; Pone en alto el bit PEN para la condicin de paro.
bcf STATUS,5 ; Cambia al banco 0.
ESPER2
btfss PIR1,SSPIF ; Espera que halla finalizado la operacin.
goto ESPER2
return

;*******************************************************************
; RUTINA PARA EL ENVIO DE LA CONDICION DE INICIO DE TRANSMISION.
;*******************************************************************
CINI
bcf PIR1,3 ; Limpia la bandera de fin de transmisin de dato (SSPIF).
bsf STATUS,5 ; Cambio al banco 1.
bcf STATUS,6
bsf SSPCON2,0 ; Coloca en alto el bit SEN para dar la transicin de inicio.
bcf STATUS,5 ; Regreso al banco 0.
ciclo
btfss PIR1,SSPIF ; Espera que halla terminado la operacin.
goto ciclo
return

;*******************************************************************
; RUTINA PARA ENVIAR DATOS AL RELOJ.
;*******************************************************************

ENVDATO
bcf PIR1,3 ; Limpia la bandera de fin de transmisin.
movwf SSPBUF ; Manda el byte al buffer de salida.
ESPER1
btfss PIR1,3 ; Espera que halla terminado la transmisin del byte.
goto ESPER1
return

;*******************************************************************
; RUTINA PARA MANDAR LOS PARAMETROS DE INICIALIZACIN DEL RTC.
;*******************************************************************
CONFI
bsf STATUS,5 ; Cambio al banco 1.
bcf STATUS,6
movlw 0x80
movwf SSPSTAT ; Configuracin de velocidad estndar con nivel I
2
C.
movlw 0x09
movwf SSPADD ; Velocidad del bus I
2
C = 100 KHZ.
bcf STATUS,5 ; Regresa al banco 0.
movlw 0x28 ; configuracin del PIC en modo amo.
movwf SSPCON ; Configura las lneas del puerto c, C3 y C4 como SCL Y SDA
respectivamente.
return

;*******************************************************************

; RUTINA PARA APUNTAR A LA LOCALIDAD 0 DEL RELOJ.
;*******************************************************************
REIREL
movlw 0x08
movwf conta ; Guarda en la localidad conta el valor 7 (para leer 7 localidades de reloj).
movlw 0x00
movwf contg ; Carga con 0 el contador para guardar los datos ledos mediante PCL.
call CINI ; Llama a la rutina para enviar la condicin de inicio de transmisin.
movlw 0xD0 ; Carga la direccin del esclavo (D0 PARA CI DS1307).
call ENVDATO ; Llama a la rutina para envo de un byte de datos.
movlw 0x00 ; Carga la direccin de memoria o donde se va escribir el dato.
call ENVDATO
call CPARO
return

;*******************************************************************
; RUTINA PARA GUARDAR LOS DATOS DEL RTC A VARIABLES EN EL PIC.
;*******************************************************************
GUARDAR
movf contg,0 ; Carga w con el valor del contador contg.
addwf PCL,f ; Suma al PCL lo que contiene w.
movf TEMP,0 ; Mueve el contenido de la variable TEMP a W.
movwf SEGUNDO ; Guarda nuevo dato ajustado en SEGUNDO.
movlw 0x05
movwf contg
goto LEEOTR
movf TEMP,0
movwf MINUTO ; Guarda nuevo dato ajustado en MINUTO.
movlw 0x0A
movwf contg
goto LEEOTR
movf TEMP,0
movwf HORA ; Guarda nuevo dato ajustado en HORA.
movlw 0x0F
movwf contg
goto LEEOTR
movf TEMP,0
movwf DIAS ; Guarda nuevo dato ajustado en DIAS.
movlw 0x14
movwf contg
goto LEEOTR
movf TEMP,0
movwf FECHAS ; Guarda nuevo dato ajustado en FECHAS.
movlw 0x19
movwf contg
goto LEEOTR
movf TEMP,0
movwf MESES ; Guarda nuevo dato ajustado en MESES.
movlw 0x1E
movwf contg
goto LEEOTR
movf TEMP,0
movwf AOS ; Guarda nuevo dato ajustado en AOS.
goto LEEOTR


;************************************************************************
; RUTINA PARA MOSTRAR DIA, DIA DEL MES Y EL MES EN LA LCD EN 1erLINEA.
;************************************************************************
MOSTRAR
call DESPDIA ; llamamos rutina para desplegar el da de la semana.
movlw 0x00
addlw 0x8A ; direcciona el cursor en la lnea 1 direccin 10 de la LCD.
call MANDA
movf FECHAS,0 ; movemos lo que hay en fechas a W.
movwf TEMP1 ; movemos W a TEMP1.
call UNOX1 ; llamamos la rutina para enviar el dato de fecha digito x digito.
call DESPMES ; llamamos la rutina para desplegar el mes.
call LINEA2 ; rutina para pasar a la segunda lnea de la LCD.
call LCDIR2 ; rutina para que ponga en la lnea 2 posicin 0.
movlw '2'
call DATO
movlw '0'
call DATO
movf AOS,0 ; movemos lo que hay en aos a W.
movwf TEMP1 ; movemos W a TEMP1.
call UNOX1 ; llamamos la rutina para enviar el dato del ao digito x digito.
movlw ' '
call DATO
movf HORA,0 ; movemos lo que hay en hora a W.


movwf DATEMP
btfsc HORA,6
bcf DATEMP,5
bcf DATEMP,6
movf DATEMP,0


movwf TEMP1 ; movemos W a TEMP1.
call UNOX1 ; llamamos la rutina para enviar el dato de la hora digito x digito.
movlw ':'
call DATO
movf MINUTO,0 ; movemos lo que hay en minuto a W.
movwf TEMP1 ; movemos W a TEMP1.
call UNOX1 ; llamamos la rutina para enviar el dato de los minutos digito x digito.
movlw ':'
call DATO
movf SEGUNDO,0 ; movemos lo que hay en segundos a W.
movwf TEMP1 ; movemos W a TEMP1.
call UNOX1 ; llamamos la rutina para enviar el dato de los segundos digito x digito.



btfsc HORA,6
goto MODO12
goto MODO24
MODO12
movlw ' '
call DATO
btfsc HORA,5

goto PM
goto AM
FUERA
return

;*******************************************************************
; RUTINA PARA DESPLEGUE DEL DA DE LA SEMANA.
;*******************************************************************
DESPDIA
movf DIAS,0 ; Pasa el contenido de DIAS a W.
xorlw 0x01 ; Compara si W = 1.
btfsc STATUS,2
call LUNES ; Si, manada mensaje LUNES al LCD.
movf DIAS,0 ; No, sigue comparando para mostrar da correspondiente.
xorlw 0x02
btfsc STATUS,2
call MARTES
movf DIAS,0
xorlw 0x03
btfsc STATUS,2
call MIERCOLES
movf DIAS,0
xorlw 0x04
btfsc STATUS,2
call JUEVES
movf DIAS,0
xorlw 0x05
btfsc STATUS,2
call VIERNES
movf DIAS,0
xorlw 0x06
btfsc STATUS,2
call SABADO
movf DIAS,0
xorlw 0x07
btfsc STATUS,2
call DOMINGO
return

;*******************************************************************
; RUTINAS DE MENSAJES PARA LOS DIAS DE LA SEMANA.
;*******************************************************************
LUNES
movlw 'L'
call DATO
movlw 'U'
call DATO
movlw 'N'
call DATO
movlw 'E'
call DATO
movlw 'S'
call DATO
movlw ' '
call DATO

movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
return
MARTES
movlw 'M'
call DATO
movlw 'A'
call DATO
movlw 'R'
call DATO
movlw 'T'
call DATO
movlw 'E'
call DATO
movlw 'S'
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
return
MIERCOLES
movlw 'M'
call DATO
movlw 'I'
call DATO
movlw 'E'
call DATO
movlw 'R'
call DATO
movlw 'C'
call DATO
movlw 'O'
call DATO
movlw 'L'
call DATO
movlw 'E'
call DATO
movlw 'S'
call DATO
movlw ' '
call DATO
return
JUEVES
movlw 'J'

call DATO
movlw 'U'
call DATO
movlw 'E'
call DATO
movlw 'V'
call DATO
movlw 'E'
call DATO
movlw 'S'
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
return
VIERNES
movlw 'V'
call DATO
movlw 'I'
call DATO
movlw 'E'
call DATO
movlw 'R'
call DATO
movlw 'N'
call DATO
movlw 'E'
call DATO
movlw 'S'
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
return
SABADO
movlw 'S'
call DATO
movlw 'A'
call DATO
movlw 'B'
call DATO
movlw 'A'
call DATO
movlw 'D'
call DATO
movlw 'O'
call DATO

movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
return
DOMINGO
movlw 'D'
call DATO
movlw 'O'
call DATO
movlw 'M'
call DATO
movlw 'I'
call DATO
movlw N'
call DATO
movlw 'G'
call DATO
movlw 'O'
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
return

;***********************************************************************
; RUTINA QUE ENVIAR MENSAJE AO, FECHA, HORA, MINUTOS Y SEGUNDOS
; AL LCD.
;***********************************************************************
UNOX1
swapf TEMP1,0 ; Se cambia el nibble(medio byte = 4bits) el de la derecha.
andlw 0x0F ; a la izquieda y el de la izquierda a la derecha.
addlw 0x30 ; Conversion de BCD a ASCCI para mostrar datos en pantalla.
call DATO ; enva el dato a la LCD
movf TEMP1,0
andlw 0x0F
addlw 0x30
call DATO
return

;*******************************************************************
; RUTINA PARA DESPLEGAR EL MES.
;*******************************************************************
DESPMES
movf MESES,0 ; Manda contenido de MESES a W.
xorlw 0x01 ; Compara para ver si el contenido de W = 1.
btfsc STATUS,2
call ENERO ; Si, manda el mensaje ENERO al LCD.

movf MESES,0 ; No, sigue comparando.
xorlw 0x02
btfsc STATUS,2
call EBRERO
movf MESES,0
xorlw 0x03
btfsc STATUS,2
call MARZO
movf MESES,0
xorlw 0x04
btfsc STATUS,2
call ABRIL
movf MESES,0
xorlw 0x05
btfsc STATUS,2
call MAYO
movf MESES,0
xorlw 0x06
btfsc STATUS,2
call JUNIO
movf MESES,0
xorlw 0x07
btfsc STATUS,2
call JULIO
movf MESES,0
xorlw 0x08
btfsc STATUS,2
call AGOSTO
movf MESES,0
xorlw 0x09
btfsc STATUS,2
call SEPTIEMBRE
movf MESES,0
xorlw 0x10
btfsc STATUS,2
call OCTUBRE
movf MESES,0
xorlw 0x11
btfsc STATUS,2
call NOVIEMBRE
movf MESES,0
xorlw 0x12
btfsc STATUS,2
call DICIEMBRE
return

;*******************************************************************
; RUTINAS DE MENSAJES PARA LOS DIAS DE LA SEMANA.
;*******************************************************************
ENERO
movlw ' '
call DATO
movlw 'E'
call DATO
movlw 'N'

call DATO
movlw 'E'
call DATO
return
FEBRERO
movlw ' '
call DATO
movlw 'F'
call DATO
movlw 'E'
call DATO
movlw 'B'
call DATO
return
MARZO
movlw ' '
call DATO
movlw 'M'
call DATO
movlw 'A'
call DATO
movlw 'R'
call DATO
return
ABRIL
movlw ' '
call DATO
movlw 'A'
call DATO
movlw 'B'
call DATO
movlw 'R'
call DATO
return
MAYO
movlw ' '
call DATO
movlw 'M'
call DATO
movlw 'A'
call DATO
movlw 'Y'
call DATO
return
JUNIO
movlw ' '
call DATO
movlw 'J'
call DATO
movlw 'U'
call DATO
movlw 'N'
call DATO
return
JULIO

movlw ' '
call DATO
movlw 'J'
call DATO
movlw 'U'
call DATO
movlw 'L'
call DATO
return
AGOSTO
movlw ' '
call DATO
movlw 'A'
call DATO
movlw 'G'
call DATO
movlw 'O'
call DATO
return
SEPTIEMBRE
movlw ' '
call DATO
movlw 'S'
call DATO
movlw 'E'
call DATO
movlw 'P'
call DATO
return
OCTUBRE
movlw ' '
call DATO
movlw 'O'
call DATO
movlw 'C'
call DATO
movlw 'T'
call DATO
return
NOVIEMBRE
movlw ' '
call DATO
movlw 'N'
call DATO
movlw 'O'
call DATO
movlw 'V'
call DATO
return
DICIEMBRE
movlw ' '
call DATO
movlw 'D'
call DATO
movlw 'I'

call DATO
movlw 'C'
call DATO
return

;*******************************************************************
; BRINCA A LA LNEA DOS DEL LCD
;*******************************************************************
LINEA2:
movlw 0XC1
call MANDO
return

;*******************************************************************
; RUTINA DE INSTRUCCIONES PARA LCD
;*******************************************************************
MANDO:
bcf PORTC,0
movwf PORTB
bsf PORTC,1
call RETARDO
bcf PORTC,1
call RETARDO
return

;*******************************************************************
; RUTINA PARA DEPLIEGAR DATOS EN LCD
;*******************************************************************
DATO:
bsf PORTC,0
movwf PORTB
bsf PORTC,1
nop
bcf PORTC,1
call RETARDA
return
INIT_DISP
movlw 0X0C;
call MANDO
return
LIMPIA_DISP
movlw 0X01
call MANDO
return
DUAL_LINE ;Configura bus de datos de 8 bits.
movlw 0x38
call MANDO
return

;*******************************************************************
; POSICIN DE LA OPANTALLA: DDRAM DIRECCION.
;*******************************************************************
LCDIR
addlw 80h
call MANDO

return

;*******************************************************************
; POSICIN DE LA PANTALLA: DDRAM DIRECCION.
;*******************************************************************
LCDIR2
addlw 0xC0
call MANDO
return

;*******************************************************************
; MUEVE TEXTO HACIA LA DERECHA
;*******************************************************************
MOVER:
movlw d'16';
movwf J1
VER:
movlw 0X1F
call MANDO
decfsz J1,f
goto VER
return

;*******************************************************************
; MUEVE TEXTO HACIA LA IZQUIERDA
;*******************************************************************
MOVER1:
movlw d'16';
movwf J1
VER1:
movlw 0X1B
call MANDO
decfsz J1,f
goto VER1
return

;*******************************************************************
; RUTINAS DE AJUSTE DE FECHA Y TIEMPO CON BOTONES.
;*******************************************************************
MINUTOS
call RET100
goto RETMIN
RETMIN
movlw 0x00
addlw 0xC8
call MANDA
call PRENDER
btfsc PORTC,7
call INCREMIN
btfsc PORTC,6
goto HORASSS
btfsc PORTC,5
goto RELL
goto RETMIN
INCREMIN

movlw 0x59
movwf CINCUNTAY9
call RETARDO
call RETARDO
call APAGAR
movf MINUTO,0
subwf CINCUNTAY9,1
btfss STATUS,C
movlw 0x00
movwf DATEMP
incf DATEMP,1
movfw DATEMP
xorlw 0x0A
btfsc STATUS,2
goto DIEZ
goto DOS
DOS
movf DATEMP,0
xorlw 0x1A
btfsc STATUS,2
goto VEINTE
goto TRES
TRES
movf DATEMP,0
xorlw 0x2A
btfsc STATUS,2
goto TREINTA
goto CUATRO
CUATRO
movf DATEMP,0
xorlw 0x3A
btfsc STATUS,2
goto CUARENTA
goto CINCO
CINCO
movf DATEMP,0
xorlw 0x4A
btfsc STATUS,2
goto CINCUENTA
goto SEIS
SEIS
movf DATEMP,0
xorlw 0x5A
btfsc STATUS,2
goto SECENTA
goto SIGUE
DIEZ
movlw 0x10
movwf DATEMP
goto SIGUE
VEINTE
movlw 0x20
movwf DATEMP
goto SIGUE
TREINTA

movlw 0x30
movwf DATEMP
goto SIGUE
CUARENTA
movlw 0x40
movwf DATEMP
goto SIGUE
CINCUENTA
movlw 0x50
movwf DATEMP
goto SIGUE
SECENTA
movlw 0x00
movwf DATEMP
goto SIGUE
SIGUE
movf DATEMP,0
movwf MINUTO
movlw 00h
call LCDIR
call MOSTRAR
return
HORAS
call RET100
goto RETHORA
RETHORA
btfss HORA,6
goto HORA2
movlw 0x00
addlw 0xC5
call MANDA
call PRENDER
btfsc PORTC,7
call INCREHORA
btfsc PORTC,6
goto DIA
btfsc PORTC,5
goto RELL
goto RETHORA
INCREHORA
call RET100
call APAGAR
bsf HORA,6
movf HORA,0
movwf DATEMP
movwf DATEMP
bcf DATEMP,5
bcf DATEMP,6
incf DATEMP,1
movf DATEMP,0
xorlw 0x0A
btfsc STATUS,2
goto DIEZ1
goto DOSCE1
DOSCE1

movf DATEMP,0
xorlw 0x13
btfsc STATUS,2
goto TRECE1
goto SIGUE1
DIEZ1
movlw 0x10
movwf DATEMP
goto SIGUE1
TRECE1
movlw 0x01
movwf DATEMP
goto SIGUE1
SIGUE1
btfsc HORA,5
bsf DATEMP,5
movf DATEMP,0
movwf HORA
bsf HORA,6
movlw 00h
call LCDIR
call MOSTRAR
return
HORA2
call RET100
goto RETHORA2
RETHORA2
btfsc HORA,6
goto HORAS
movlw 0x00
addlw 0xC5
call MANDA
call PRENDER
btfsc PORTC,7
call INCREHORA2
btfsc PORTC,6
goto DIA
btfsc PORTC,5
goto RELL
goto RETHORA2
INCREHORA2
movlw 0x24
movwf VEITE24
call RETARDO
call RETARDO
call APAGAR
bcf HORA,6
movf HORA,0
subwf VEITE24,1
btfss STATUS,C
movlw 0x00
movwf DATEMP
incf DATEMP,1
movf DATEMP,0
xorlw 0x0A

btfsc STATUS,2
goto DIEZ10
goto DOS10
DOS10
movf DATEMP,0
xorlw 0x1A
btfsc STATUS,2
goto VEINTEX
goto TRES10
TRES10
movf DATEMP,0
xorlw 0x24
btfsc STATUS,2
goto VCUATRO
goto SIGUE10
DIEZ10
movlw 0x10
movwf DATEMP
goto SIGUE10
VEINTEX
movlw 0x20
movwf DATEMP
goto SIGUE10
VCUATRO
movlw 0x00
movwf DATEMP
goto SIGUE10
SIGUE10
movf DATEMP,0
movwf HORA
bcf HORA,6
movlw 00h
call LCDIR
call MOSTRAR
return
DIA
call RET100
goto RETDIA
RETDIA
movlw 0x00
addlw 0x80
call MANDA
call PRENDER
btfsc PORTC,7
call INCREDIA
btfsc PORTC,6
goto FECHA
btfsc PORTC,5
goto RELL
goto RETDIA
INCREDIA
movlw 0x07
movwf CIETE7
call RET100
call APAGAR

movf DIAS,0
subwf CIETE7,1
btfss STATUS,C
movlw 0x00
movwf DATEMP
incf DATEMP,1
movf DATEMP,0
movwf DIAS
movlw 00h
call LCDIR
call MOSTRAR
movlw d'7'
movwf MAX
movf DATEMP,W
subwf MAX,F
btfsc STATUS,Z
clrf DIAS
return
FECHA
call RET100
goto RETFECHA
RETFECHA
movlw 0x00
addlw 0x8A
call MANDA
call PRENDER
btfsc PORTC,7
call INCREFECHA
btfsc PORTC,6
goto MES
btfsc PORTC,5
goto RELL
goto RETFECHA
INCREFECHA
movlw 0x31
movwf TREINTA31
call RETARDO
call RETARDO
call APAGAR
movf FECHAS,0
subwf TREINTA31,1
btfsc STATUS,C
movlw 0x00
movwf DATEMP
incf DATEMP,1
movf DATEMP,0
xorlw 0x0A
btfsc STATUS,2
goto DIEZ2
goto DOS2
DOS2
movf DATEMP,0
xorlw 0x1A
btfsc STATUS,2
goto VEINTE2

goto TRES2
TRES2
movf DATEMP,0
xorlw 0x2A
btfsc STATUS,2
goto TREINTA2
goto TRE32
TRE32
movf DATEMP,0
xorlw 0x32
btfsc STATUS,2
goto TREINTAY2
goto SIGUE2
DIEZ2
movlw 0x10
movwf DATEMP
goto SIGUE2
VEINTE2
movlw 0x20
movwf DATEMP
goto SIGUE2
TREINTA2
movlw 0x30
movwf DATEMP
goto SIGUE2
TREINTAY2
movlw 0x01
movwf DATEMP
goto SIGUE2
SIGUE2
movf DATEMP,0
movwf FECHAS
movlw 00h
call LCDIR
call MOSTRAR
return
MES
call RET100
goto RETMES
RETMES
movlw 0x00
addlw 0x8D
call MANDA
call PRENDER
btfsc PORTC,7
call INCREMES
btfsc PORTC,6
goto AO
btfsc PORTC,5
goto RELL
goto RETMES
INCREMES
movlw 0x12
movwf MESE12
call RET100

call APAGAR
movf MESES,0
subwf MESE12,1
btfss STATUS,C
movlw 0x00
movwf DATEMP
incf DATEMP,1
movf DATEMP,0
xorlw 0x0A
btfsc STATUS,2
goto DIEZ4
goto DOSCE
DOSCE
movf DATEMP,0
xorlw 0x13
btfsc STATUS,2
goto TRECE
goto SIGUE4
DIEZ4
movlw 0x10
movwf DATEMP
goto SIGUE4
TRECE
movlw 0x01
movwf DATEMP
goto SIGUE4
SIGUE4
movf DATEMP,0
movwf MESES
call MOSTRAR
return
AO
call RET100
goto RETAO
RETAO
movlw 0x00
addlw 0xC0
call MANDA
call PRENDER
btfsc PORTC,7
call INCREAO
btfss HORA,6
goto MINUTOS
btfsc PORTC,6
goto AMPM
btfsc PORTC,5
goto RELL
goto RETAO
INCREAO
call RETARDO
call RETARDO
call APAGAR
movf AOS,0
movwf DATEMP
incf DATEMP,1

movf DATEMP,0
xorlw 0x0A
btfsc STATUS,2
goto DIEZ3
goto DOS3
DOS3
movf DATEMP,0
xorlw 0x1A
btfsc STATUS,2
goto VEINTE3
goto TRES3
TRES3
movf DATEMP,0
xorlw 0x2A
btfsc STATUS,2
goto TREINTA3
goto CUATRO3
CUATRO3
movf DATEMP,0
xorlw 0x3A
btfsc STATUS,2
goto CUARENTA3
goto CINCO3
CINCO3
movf DATEMP,0
xorlw 0x4A
btfsc STATUS,2
goto CINCUENTA3
goto SEIS3
SEIS3
movf DATEMP,0
xorlw 0x5A
btfsc STATUS,2
goto SECENTA3
goto SIETE
SIETE
movf DATEMP,0
xorlw 0x6A
btfsc STATUS,2
goto SETENTA
goto OCHO
OCHO
movf DATEMP,0
xorlw 0x7A
btfsc STATUS,2
goto OCHENTA
goto NUEVE
NUEVE
movf DATEMP,0
xorlw 0x8A
btfsc STATUS,2
goto NOVENTA
goto CERO
CERO
movf DATEMP,0

xorlw 0x9A
btfsc STATUS,2
goto CIEN
goto SIGUE3
DIEZ3
movlw 0x10
movwf DATEMP
goto SIGUE3
VEINTE3
movlw 0x20
movwf DATEMP
goto SIGUE3
TREINTA3
movlw 0x30
movwf DATEMP
goto SIGUE3
CUARENTA3
movlw 0x40
movwf DATEMP
goto SIGUE3
CINCUENTA3
movlw 0x50
movwf DATEMP
goto SIGUE3
SECENTA3
movlw 0x60
movwf DATEMP
goto SIGUE3
SETENTA
movlw 0x70
movwf DATEMP
goto SIGUE3
OCHENTA
movlw 0x80
movwf DATEMP
goto SIGUE3
NOVENTA
movlw 0x90
movwf DATEMP
goto SIGUE3
CIEN
movlw 0x00
movwf DATEMP
goto SIGUE3
SIGUE3
movf DATEMP,0
movwf AOS
movlw 00h
call LCDIR
call MOSTRAR
return
AMPM
call RET100
goto RETAMPM
RETAMPM

movlw 0x00
addlw 0xCE
call MANDO
call PRENDER
btfsc PORTC,7
call INCREAMPM
btfsc PORTC,6
goto MINUTOS
btfsc PORTC,5
goto RELL
goto RETAMPM
INCREAMPM
call APAGAR
call RET100
bsf HORA,6
movf HORA,0
movwf DATEMP
btfsc DATEMP,5
goto APAGE
goto PRENDA
SIGUEAMPM
call MOSTRAR
return
;*******************************************************************
; RUTINA PARA CAMBIAR EL FORMATO DE HORA (AM/PM)
;*******************************************************************
PRENDA
bsf HORA,5 ; Activa el bit 5 (1=PM) del registro HORA del RTC
movf HORA,
movwf DATEMP
goto SIGUEAMPM
APAGE
bcf HORA,5 ; Desactiva el bit 5 (0=AM) del registro HORA del RTC
movf HORA,0
movwf DATEMP
goto SIGUEAMPM
;*******************************************************************
; MENSAJES AM, PM Y HRS
;*******************************************************************
AM
movlw 'A'
call DATO
movlw 'M'
call DATO
goto FUERA
PM
movlw 'P'
call DATO
movlw 'M'
call DATO
goto FUERA
MODO24
movlw 'H'
call DATO
movlw 'R'

call DATO
movlw 'S'
call DATO
goto FUERA
;*******************************************************************
; RUTINAS QUE CHECAN EL BIT 6 DEL REGISTRO HORA DEL RTC PARA
; CAMBIAR A MODO 24 O 12 HRS.
;*******************************************************************
CHECA
btfsc HORA,6
goto LIMPIA
return
CHECA1
btfsc HORA,6
return
call PRENDE
LIMPIA
mvf HORA,0
movwf HORA1
bcf HORA,5
movlw 0x12
btfsc HORA1,5
addwf HORA,1
bcf HORA,6
movlw 0x1A
xorwf HORA,0
movlw 0x20
btfsc STATUS,2
mvwf HORA
movlw 0x1B
xorwf HORA,0
movlw 0x21
btfsc STATUS,2
movwf HORA
movlw 0x24
xorwf HORA,0
movlw 0x12
btfsc STATUS,2
movwf HORA
call GRAVARTC
goto CHB5
PRENDE
movf HORA,0
movwf DATEMP
movlw 0x12
subwf DATEMP,1
btfsc STATUS,2
goto PREN_D1
btfsc STATUS,C
goto PREN_D2
goto PREN_D3
PREN_D1
bsf HORA,5
bsf HORA,6
call GRAVARTC

goto CHB5
PREN_D2
movf DATEMP,0
movwf HORA
movlw 0x0E
xorwf HORA,0
movlw 0x08
btfsc STATUS,2
movwf HORA
movlw 0x0F
xorwf HORA,0
movlw 0x09
btfsc STATUS,2
movwf HORA
bsf HORA,5
bsf HORA,6
call GRAVARTC
goto CHB5
PREN_D3
movlw 0x00
xorwf HORA,0
movlw 0x12
btfsc STATUS,2
movwf HORA
bsf HORA,6
call GRAVARTC
goto CHB5
;*******************************************************************
; RUTINA PARA INCREMENTAR HASTA 23 O HASTA 12 HRS
;*******************************************************************
HORASSS
btfsc HORA,6
goto HORAS
goto HORA2

;*******************************************************************
; RUTINA DE INSTRUCCIONES PARA LCD
;*******************************************************************
MANDA
bcf PORTC,0
movwf PORTB
bsf PORTC,1
call RETARDA
bcf PORTC,1
call RETARDA
return
RETARDA
movlw d'4'
movwf J
jloo:
movwf K
kloo:
decfsz K,f
goto kloo
decfsz J,f

goto jloo
return

;*******************************************************************
; RUTINAS PARA PRENDER Y APAGAR EL CURSOR.
;*******************************************************************
PRENDER
movlw 0x0F ; Puede ser dependiendo de la posicin 0F o 0D.
call MANDA
return
APAGAR
movlw 0X0C
call MANDA
return

;*******************************************************************
; RETARDO DE 100ms PARA EVITAR REBOTES EN LOS INTERRUPTORES.
;*******************************************************************
RET100
movlw 0X64
movwf CONT1
RET1
movlw 0XC8
movwf CONT2
decf CONT1
RET2
decf CONT2
nop
nop
nop
nop
nop
nop
movf CONT2,1
btfss STATUS,2
goto RET2
movf CONT1,1
btfss STATUS,2
goto RET1
return

;*******************************************************************
; RETARDO
;*******************************************************************
RETARDO:
movlw d'80'
movwf J
jloop:
movwf K
kloop:
decfsz K,f
goto kloop
decfsz J,f
goto jloop
return

RELL
call APAGAR
call RET100
call GRAVARTC
goto BUCLE

;*******************************************************************
; MENSAJE: TU PESO ES:
;*******************************************************************
NEWPESO:
call LIMPIA_DISP
movlw ' '
call DATO
movlw 'T'
call DATO
movlw 'U'
call DATO
movlw ' '
call DATO
movlw 'P'
call DATO
movlw 'E'
call DATO
movlw 'S'
call DATO
movlw 'O'
call DATO
movlw ' '
call DATO
movlw 'E'
call DATO
movlw 'S'
call DATO
movlw ':'
call DATO

;*******************************************************************
; RUTINA PARA SENSAR PESO Y MOSTRARLO, SI NO HAY PESO MUESTRA
; TIEMPO FECHA.
;*******************************************************************
REE:
call LEE_SENSOR ; Sensa el peso.
call REGLAD3 ; Llama rutina REGLAD3.
call BIN_BCD ; Llama rutina para la conversin de binario a BCD.
call LINEA2 ; Llama rutina para brincar a lnea 2.
call RETARDO
movlw 46h ; Direcciona el cursor.
call LCDIR
call DESPESO ; Llama rutina para desplegar peso.
call EXDEC ; Llama rutina para mostrar decimales.
call EXKG ; Llama rutina para mostrar mensaje Kg.
movlw 0x05 ; Carga el numero 5 que es el valor que representa 1Kg.
subwf ADRESH,W ; Resta/compara con ADRESH.
btfsc STATUS,Z ; Son iguales (Z=1)??.
goto REE ; Si.

btfsc STATUS,C ; No, DATO_H mayor que 5 (C=1)??.
goto REE ; Si.
goto BUCLE

;********************************************************************
; CONFIGURACION DEL REG. ADCON1 (CONFIG DE LAS LINEAS DEL CONV.
A/D)
;********************************************************************
CLC_CONV
bsf STATUS,RP0 ; Selecciona banco 1.
bcf STATUS,RP1
movlw B'00000001' ; Configura RA0 como entada.
movwf TRISA
movlw B'00001110' ; Configura lnea RA0 como entrada analgica.
movwf ADCON1 ; y RA1--> RA5 como E/S digitales.
bcf STATUS,RP0 ; Regresa el banco 0.
return

;*******************************************************************
; RUTINA DE LECTURA DEL SENSOR.
;*******************************************************************
;*******************************************************************
; CONFIGURACION DEL REG. ADCON0 (OPERACION DEL CONV. A/D).
; FRECUENCIA DE RELOJ : FRC => tAD=OSCLIDAOR INTERNO RC DEL C A/D.

; CANAL: 0.
;*******************************************************************
LEE_SENSOR:
clrf DATO_H
clrf DATO_L
clrf PORTA
bsf STATUS,RP0 ; Selecciona banco 1.
bcf STATUS,RP1
clrf ADCON1
bcf STATUS,RP0
movlw B'11000001' ; 0XC1 : osc interno, canal 0, conv A/D activado (ADON=1).
movwf ADCON0
call RETADQ
bsf ADCON0,GO ; Arranca el conv. A/D (GO/DONE#=1).
ESP_ADC:
btfsc ADCON0,GO ; Espera hasta que la conversin fue realizada.
goto ESP_ADC
movlw b'00000011' ; Resta 3 al resultado de la conversin para quitar
subwf ADRESH,W ; el peso de la charola
return

;*******************************************************************
; RUTINA QUE HACE UNA REGLA DE TRES.
; FF---------50Kg
; ADRESH-----x Kg
;*******************************************************************

REGLAD3
movwf Multiplicador
clrf Resultado_H

clrf Resultado_L ; Pone a 0000 el resultado inicial
movlw 0x08
movwf Contador ; Inicia el contador con 8
movlw 0x32
movwf Multiplicando
bcf STATUS,C ; Borra el carry
Bucle
movf Multiplicando,W ; Carga el multiplicando
btfsc Multiplicador,0 ; Es 1 el bit de menos peso del multiplicador ??
addwf Resultado_H,F ; Si, se suma el multiplicando
rrf Resultado_H,F
rrf Resultado_L,F ; Desplazamiento a la derecha del resultado
Rota_sin_Carry
movf STATUS,W
movwf Estatus_Temp ; Salva temporalmente el carry
rrf Multiplicador,F ; Desplaza a la derecha el multiplicador
movf Estatus_Temp,W
movwf STATUS ; Recupera el carry original
decfsz Contador,F ; Repite el bucle 8 veces
goto Bucle
movfw Resultado_H ; Mueve lo que hay en Resultado_H a W
addwf Resultado_L,W ; Suma el Resultado_L (+) W=Resultado_H
movwf Residuo ; El resultado de la suma que en Residuo
movlw 0xFF ; Carga W con 255
subwf Residuo,0 ; Se le resta al resultado alto+el bajo el valor W=255 y resultado=W
btfss STATUS,Z ; checa si Z=1, si si salta goto Rutina
goto Rutina
movwf Residuo ; El resultado de la resta queda en Residuo=0
movf Resultado_H,W
movwf Resultado2 ; Copea lo que esta Resultado_H en Resultado2
incf Resultado2,1 ; Si la resta=0 se incrementa lo que esta en Resultado2 una vez
goto sigue
Rutina
movf Resultado_H,W
movwf Resultado2
movf Residuo,W ; Lo que sobro de la divisin se graba en W
movwf Minuendo ; Minuendo se carga con este valor = W
movlw 0x1A ; Se carga Sustraendo con el valor de 26 para as poder sacar el Decimal
movwf Sustraendo ; que va ha ser el resultado de Minuendo (-) Sustraendo
clrf Decimal ; Se limpia lo que hay en Decimal "por si hay algo"
bcf STATUS,C ; Se limpia el carry = 0 "por si estaba en 1"
Otra
subwf Minuendo,1 ; Se empieza la resta entre el minuendo y el sustraendo=(26)
btfsc STATUS,C ; Checa si el resultado de la resta fue negativa si si salta a sigue
goto In ; Si el resultado fue positivo va a incrementar el contador que va
ha dar el decimal
goto sigue ; Salto a la rutina de sigue que continua con la conversin de
binario a BCD luego a ASSCI
In
incf Decimal,1 ; Incrementa Decimal en 1 indicando que Sustraendo cupo otra
vez en Minuendo
goto Otra ; Se realiza otra vez la resta por si cabe otra vez
sigue
movf Resultado2,w
DECIMALES

movwf DATO_H ; Manda el peso a DATO_H y PESO_HEX
movwf PESO_HEX
bsf STATUS,RP0
movf ADRESL,W
bcf STATUS,RP0
movwf DATO_L
return

;*******************************************************************
; RUTINA PARA DESPLEGAR EN PANTALLA EL PESO
;*******************************************************************
DESPESO
btfsc BCD_1,W
goto DESPC
goto DESPD
DESPC
movf BCD_1,W
addlw 0x30
movwf PESOC
movf PESOC,W
call DATO
DESPD
swapf BCD_2,W
andlw 0x0F
xorwf 0x00
btfss STATUS,2
goto DESPD1
goto DESPU
DESPD1
swapf BCD_2,W
andlw 0x0F
addlw 0x30
movwf PESOD
movf PESOD,W
call DATO
DESPU
movf BCD_2,W
andlw 0x0F
addlw 0x30
movwf PESOU
movf PESOU,W
call DATO
return

;*******************************************************************
; RUTINA PARA EXHIBIR DECIMALES
;*******************************************************************
EXDEC
movlw '.'
call DATO
movlw 0x05
subwf Decimal,1
btfss STATUS,C
clrf Decimal
movf Decimal,W

call DECIMALES
call BIN_BCD
call DESPESO
return

;*******************************************************************
; RUTINA PARA DESPLEGAR EL MENSAJE Kg
;*******************************************************************
EXKG
movlw 0x4B
call DATO
movlw 0x67
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
movlw ' '
call DATO
return

;*******************************************************************
;RUTINA DE CONVERSION DE DATOS BINARIOS A BCD
;*******************************************************************
BIN_BCD
clrf DATO_L
bcf STATUS,0
movlw 0X10
movwf CONT
clrf BCD_0
clrf BCD_1
clrf BCD_2
CIC
rlf DATO_H,F
rlf DATO_L,F
rlf BCD_2,F
rlf BCD_1,F
rlf BCD_0,F
decfsz CONT,F
goto ADJDEC
retlw 0
ADJDEC
movlw BCD_2
movwf FSR
call ADJBCD
movlw BCD_1
movwf FSR
call ADJBCD
movlw BCD_0
movwf FSR
call ADJBCD
goto CIC
ADJBCD

movlw 3
addwf 0,W
movwf TEMPESO
btfsc TEMPESO,3 ;pregunta si el resultado es mayor que 7
movwf 0
movlw 30
addwf 0,W
movwf TEMPESO
btfsc TEMPESO,7 ;pregunta si el resultado es mayor que 7
movwf 0
retlw 0
return

;*******************************************************************
; RETARDO DE 100mS
;*******************************************************************
RETADQ
movlw 0X01 ; debe ser 0X01 Retardo para la adquisicin de la conversin A/D
ret3
movlw 0x04
movwf CONT2
decf CONT1
ret4
decf CONT2
nop
nop
nop
nop
nop
nop
movf CONT2,1
btfss STATUS,2
goto ret4
movf CONT1,1
btfss STATUS,2
goto ret3
return

RETARDO1:
movlw d'250';
movwf J
jloop1:
movwf K
kloop1:
decfsz K,f
goto kloop1
decfsz J,f
goto jloop1
return
end ; Fin de programa.



CAPTULO V
ANLISIS EXPERIMENTAL


5.1. ESTRUCTURA DEL PROTOTIPO
Este prototipo est compuesto por 4 elementos principales que son: estructura
mecnica, sensor de peso, tarjetas de control y pantalla visual.

5.1.1. Estructura mecnica: Est conformada por las siguientes partes.

- Estructura metlica: Es una estructura en forma de trapecio formada con ngulo
de hierro de 1.9 cm. de ancho. La estructura tiene una altura de 9 cm., mientras que la base
inferior tiene 34 cm. de largo por 24 cm. de ancho.
La base tiene un tramo de solera unida para sujetar el sensor de peso. Tambin se
aadi en uno de sus extremos, una base de sujecin en forma de L para sostener la
canaleta. La base superior tiene 30 cm. de largo por 20 cm. de ancho. Todo esto se muestra
en la figura 5.1.


Figura 5.1. Estructura metlica.

- Cruz de soporte: Esta pieza de aluminio vaciado, mostrada en la figura 5.2, tiene
dos orificios en el centro que le permiten atornillarla al sensor. En cada uno de sus
extremos tiene tambin orificios para atornillar la charola contenedora.


Figura 5.2. Cruz de soporte.

-Charola: La charola que se aprecia en la figura 5.3, est hecha de plstico. Tiene
dimensiones de 29 cm. de ancho por 35 cm. de largo y es la encargada de sostener a la
persona u objeto a pesar.


Figura 5.3. Charola.

-Canaleta y base: La canaleta tiene una longitud de 80 cm.; en su interior van los
cables de alimentacin y el de la seal del sensor. El objetivo principal es tener una mejor
visibilidad de la lectura en la pantalla. La base forma parte del mdulo de control y
visualizacin y est hecha de acrlico ( figura 5.4).


Figura 5.4. Canaleta y base.












5.1.2. Sensor de peso: Es el encargado de convertir el peso en una seal elctrica,
mediante el sistema de galgas en su interior. Este sensor est montado en una pieza de
aluminio, como se observa en la figura 5.5.


Figura 5.5. Sensor de peso.

5.1.3. Mdulo de control: Su funcin es la de controlar y verificar los procesos
que se llevan a cabo y est soportado por la canaleta para que el usuario pueda manipularla
con facilidad (figura 5.6).


Figura 5.6. Mdulo de control.

5.1.4. Pantalla Visual: Tiene como finalidad mostrar los datos de salida como:
fecha, hora, peso y mensajes; sta va unida al mdulo de control como puede apreciarse en
la fotografa de la figura 5.7.


Figura 5.7. Pantalla visual.

5.2. FUNCIONAMIENTO DEL PROTOTIPO

La operacin del prototipo es sencilla, lo primero que se debe hacer despus de
activa el interruptor de encendido de la bscula, es ajustar fecha y hora con los botones
ajuste, modo e incremento exactamente como se explica en el manual del usuario en el
apndice A.
Para pesar personas u objetos slo tienen que colocarse sobre la charola y esperar
unos segundos para que en la pantalla se despliegue el peso. Al momento en que se retira la
persona o el objeto, el dato dejar de visualizarse y entonces se mostrar la hora y fecha
nuevamente.
Ya que se trata de un prototipo, slo se puede medir hasta una carga mxima de 40
kg. debido a las especificaciones mximas que marca el sensor. Si se desea obtener rangos
mayores, se tendr que utilizar otro sensor de mayor capacidad.





5.3. ANLISIS DE PRUEBAS

Hay 3 clases de pesos que es capaz de medir la bscula prototipo y son pesos
humanos, muertos y lquidos; en todos se obtuvo la conversin del cambio fsico en
cambio elctrico como lo muestra la tabla 5.1.
Tabla 5.1. Relacin Peso/Voltaje.
kilogramos milivolts
x y
0 0.8
1 1.3
2 1.8
3 2.3
4 2.8
5 3.3
6 3.8
7 4.3
8 4.8
9 5.3
10 5.8
11 6.4
12 6.9
13 7.4
14 7.9
15 8.4
16 8.9
17 9.4
18 9.9
19 10.4
20 10.9
21 11.5
22 12
23 12.5
24 13
25 13.5
26 14
27 14.5
28 15
29 15.5
30 16
31 16.5
32 17
33 17.6
34 18.1
35 18.6
36 19.1
37 19.6
38 20.1
39 20.6
40 21.1

La ecuacin de funcionamiento del sensor de peso se obtuvo por el mtodo de
mnimos cuadrados, para conocer el comportamiento del sensor al estar aplicando
diferentes pesos. En la tabla 5.2 se observan los datos usados para aplicar este mtodo.








Tabla 5.2. Valores para mtodo de mnimos cuadrados.
kilogramos milivolts (kilogramos) (milivolts) (kilogramos*milivolts) (milivolts)
x y x y x*y y'
0 0.8 0 0.64 0 0.8442
1 1.3 1 1.69 1.3 1.3501
2 1.8 4 3.24 3.6 1.856
3 2.3 9 5.29 6.9 2.3619
4 2.8 16 7.84 11.2 2.8678
5 3.3 25 10.89 16.5 3.3737
6 3.8 36 14.44 22.8 3.8796
7 4.3 49 18.49 30.1 4.3855
8 4.8 64 23.04 38.4 4.8914
9 5.3 81 28.09 47.7 5.3973
10 5.8 100 33.64 58 5.9032
11 6.4 121 40.96 70.4 6.4091
12 6.9 144 47.61 82.8 6.915
13 7.4 169 54.76 96.2 7.4209
14 7.9 196 62.41 110.6 7.9268
15 8.4 225 70.56 126 8.4327
16 8.9 256 79.21 142.4 8.9386
17 9.4 289 88.36 159.8 9.4445
18 9.9 324 98.01 178.2 9.9504
19 10.4 361 108.16 197.6 10.4563
20 10.9 400 118.81 218 10.9622
21 11.5 441 132.25 241.5 11.4681
22 12 484 144 264 11.974
23 12.5 529 156.25 287.5 12.4799
24 13 576 169 312 12.9858
25 13.5 625 182.25 337.5 13.4917
26 14 676 196 364 13.9976
27 14.5 729 210.25 391.5 14.5035
28 15 784 225 420 15.0094
29 15.5 841 240.25 449.5 15.5153
30 16 900 256 480 16.0212
31 16.5 961 272.25 511.5 16.5271
32 17 1024 289 544 17.033
33 17.6 1089 309.76 580.8 17.5389
34 18.1 1156 327.61 615.4 18.0448
35 18.6 1225 345.96 651 18.5507
36 19.1 1296 364.81 687.6 19.0566
37 19.6 1369 384.16 725.2 19.5625
38 20.1 1444 404.01 763.8 20.0684
39 20.6 1521 424.36 803.4 20.5743
40 21.1 1600 445.21 844 21.0802
820 448.6 22140 11892.7




Una vez que se obtuvieron los valores necesarios en la tabla anterior, estos se
analizaron con MATLAB. En la figura 5.8 se observa como se efectu tal operacin:


Figura 5.8. Clculo de matriz.

Dando como resultado una ecuacin que es la siguiente:

( ) Kg mV + = 5059 . 0 8442 . 0 .( 7 )




Para un anlisis grfico se emple Excel, en donde se obtiene la ecuacin y la
correlacin que existe. En este caso R = 1, lo que significa que la ecuacin es bastante
exacta y confiable. En la grfica 5.9 se muestran las lneas de tendencia experimentada y
calculada junto con la ecuacin.


nalisis grfico
y = 0.5059x + 0.8442
R
2
= 1
0
5
10
15
20
25
0 5 10 15 20 25 30 35 40 45
Kilogramos
m
i
l
i
v
o
l
t
s
Experimental
Calculada
Lineal (Calculada)


Grfica 5.1. Anlisis grfico.














CONCLUSIONES


El PIC16F873 es un dispositivo que controla de manera eficiente varias tareas, casi
de una manera simultnea, que es un punto muy importante en la automatizacin; adems
ofrece una alta seguridad y confiabilidad, facilitando el manejo de los diferentes procesos
que se pueden controlar; como: conversiones analgicas a digital para diferentes sensores,
manejo de pantalla LCD para el despliegue de datos, manejo de dispositivos que ocupan
una comunicacin va serial, ofreciendo una gran comodidad al utilizar el mdulo del
protocolo I
2
C, y otras muchas funciones.

Refirindose a las mediciones de la bscula electrnica, es importante mencionar
que la celda de carga entrega voltajes muy pequeos para pesos menores a 1 kg, por lo
tanto necesita fuentes de alimentacin con porcentajes de rizo cerca del 100% y circuitos de
amplificacin muy exactos; as como dispositivos que reduzcan las emanaciones de ruido,
todo esto para tratar de llevara a cabo la medicin lo mas exacta posible.


TRABAJO A FUTURO

Las propuestas para el trabajo a futuro se pueden resumir en los siguientes puntos:
Cambio de sensor para incrementar la capacidad de la bscula.
Incorporar un conversor A/D externo para mejorar la resolucin.
Incorporar sensor de proximidad para determinacin de la altura de una
persona.



















ANEXOS















ANEXO A







MANUAL DE AJUSTE DEL RTC DS1307 PARA EL
USUARIO



1. Una vez encendida la bscula, si se desea ajustar o cambiar los datos (minuto, hora,
da de la semana, da del mes, mes y ao) se debe presionar el botn AJUSTE.

2. Despus de haber presionado este botn se ingresa a un estado en el cual se pueden
modificar los valores que se muestran en la pantalla, en donde el primer dato a
cambiar es MINUTOS. En los minutos se visualizar parpadeando el cursor en la
posicin en la que comience este valor, dando lugar a incrementarlo; pero si se
desea cambiar ya sea la hora, da de la semana, da del mes, etc. se debe presionar el
botn MODO las veces necesarias hasta llegar a el valor que se quiere alterar.

3. Una vez seleccionado el dato a cambiar se deber presionar el botn de
INCREMENTAR, el cual estar aumentando en uno el valor del dato hasta llegar
as al valor deseado.

4. Despus de haber modificado los valores mostrados en la pantalla, se procede a
presionar nuevamente el botn AJUSTE el cual nos sacara del estado modificar,
empezando a funcionar nuevamente el reloj incluido en la bscula electrnica.

5. Por ltimo, al estarse visualizando la hora; si sta aparece en formato militar o de 12
horas, se podr cambiar con los botones H. MILIT y/o H. AM/PM.

H. MILIT. cambiar el formato en horario uso militar.

H. AM/PM cambiar el formato en horario 12 horas (AM/PM).
















ANEXO B






























ANEXO C





























ANEXO D


















BIBLIOGRAFA


1. Apuntes de la materia Metrologa
M. en C. N. Andrs Ramrez Rodrguez.


2. Microcontroladores PIC Diseo prctico de aplicaciones
Jos Mara Angulo Usategui
Ignacio Angulo Martnez
Editorial McGraw-Hill


3. Microcontroladores PIC Diseo prctico de aplicaciones
Segunda parte PIC16F87x
Jos M. Angulo Usategui
Susana Romero Yesa
Ignacio Angulo Martnez
Editorial McGraw-Hill


4. Apuntes de clase
Amplificadores Operacionales
Electrnica III
Ingeniero Aurelio Beltrn Tllez


5. Apuntes de clase
Diseo de circuitos en ORCAD
M. P. R. H. Antonio Arellano Neri


6. Apuntes de clase
Microcontroladores PIC
M. C. Jos Manuel Cervantes Viramontes


7. Manual del microcontrolador PIC 16F873
http://www.microchip.com


8. Manual de celdas de carga
http://www.proweigh.co.nz/index.html




9. Hojas de datos del Reloj de tiempo real DS1307
http://www.maxim-ic.com

You might also like