Вы находитесь на странице: 1из 11

SISTEMAS MICROPROCESADOS 1 UPS

UNIVERSIDAD POLITECNICA
SALESIANA
INTEGRANTES:

OSCAR AYALA

ANDRES VALDIVIESO
CURSO:
SEXTO ELECTRONICA
TEMA:
RELOJ EN TIEMPO REAL

1
SISTEMAS MICROPROCESADOS 1 UPS

1. INTRODUCCION:

Un reloj en tiempo real (en inglés, real-time clock, RTC), es un reloj de un ordenador, incluido en
un circuito integrado, que mantiene la hora actual. Aunque el término normalmente se refiere a
dispositivos en ordenadores personales, servidores y sistemas embebidos, los RTCs están
presentes en la mayoría de los aparatos electrónicos que necesitan guardar el tiempo exacto.

Terminología

El término se usa para evitar la confusión con el reloj hardware ordinario, que sólo son señales
que dirigen circuitos digitales, y no cuentan el tiempo en unidades reales.

Propósito

 Bajo consumo de energía (importante cuando está funcionando con una pila)
 Libera de trabajo al sistema principal para que pueda dedicarse a tareas más críticas
 Algunas veces más preciso que otros métodos

Fuente de alimentación

Los RTCs a menudo tienen una fuente de alimentación alternativa, por lo que pueden seguir
midiendo el tiempo mientras la fuente de alimentación principal está apagada o no está
disponible. Esta fuente de alimentación alternativa es normalmente una batería de litio en los
sistemas antiguos, pero algunos sistemas nuevos usan un supercapacitor , porque son recargables
y pueden ser soldados. La fuente de alimentación alternativa también puede suministrar energía a
una memoria no volátil.

Medición del tiempo

La mayoría de los RTCs usan un oscilador de cristal , pero algunos usan la frecuencia de la fuente
de alimentación . En muchos casos la frecuencia del oscilador es 32.768 kHz. Ésta es la misma
frecuencia usada en los relojes de cuarzo, y por las mismas razones, que la frecuencia es
exactamente 215 ciclos por segundo, que es un ratio muy práctico para usar con circuitos de
contadores binarios simples.

2. MARCO TEORICO

Es un bus de comunicaciones en serie. Su nombre viene de Inter-Integrated Circuit (Circuitos Inter-


Integrados). La versión 1.0 data del año 1992 y la versión 2.1 del año 2000, su diseñador es Philips.
La velocidad es de 100Kbits por segundo en el modo estándar, aunque también permite
velocidades de 3.4 Mbit/s. Es un bus muy usado en la industria, principalmente para comunicar
microntroladores y sus periféricos en sistemas integrados (Embedded Systems) y generalizando
más para comunicar circuitos integrados entre si que normalmente residen en un mismo circuito
impreso.

La principal característica de I²C es que utiliza dos líneas para transmitir la información: una para
los datos y por otra la señal de reloj. También es necesaria una tercera línea, pero esta sólo es la

2
SISTEMAS MICROPROCESADOS 1 UPS

referencia (masa). Como suelen comunicarse circuitos en una misma placa que comparten una
misma masa esta tercera línea no suele ser necesaria.

Las líneas se llaman:

 SDA: datos
 SCL: reloj
 GND: masa

Las dos primeras líneas son drenador abierto, por lo que necesitan resistencias de pull-up.

Los dispositivos conectados al bus I²C tienen una dirección única para cada uno. También pueden
ser maestros o esclavos. El dispositivo maestro inicia la transferencia de datos y además genera la
señal de reloj, pero no es necesario que el maestro sea siempre el mismo dispositivo, esta
característica se la pueden ir pasando los dispositivos que tengan esa capacidad. Esta
característica hace que al bus I²C se le denomine bus multimaestro.

Las transacciones en el bus I2C tienen este formato:

| start | A7 A6 A5 A4 A3 A2 A1 | R/W | ACK | ... DATA ... | ACK | stop | idle |

 El bus esta libre cuando SDA y SCL están en estado lógico alto.
 En estado bus libre, cualquier dispositivo puede ocupar el bus I²C como maestro.
 El maestro comienza la comunicación enviando un patrón llamado "start condition". Esto
alerta a los dispositivos esclavos, poniéndolos a la espera de una transacción.
 El maestro se dirige al dispositivo con el que quiere hablar, enviando un byte que contiene
los siete bits (A7-A1) que componen la dirección del dispositivo esclavo con el que se
quiere comunicar, y el octavo bit (A0) de menor peso se corresponde con la operación
deseada (L/E), lectura=1 (recibir del esclavo) y escritura=0 (enviar al esclavo).
 La dirección enviada es comparada por cada esclavo del bus con su propia dirección, si
ambas coinciden, el esclavo se considera direccionado como esclavo-transmisor o esclavo-
receptor dependiendo del bit R/W.
 El esclavo responde enviando un bit de ACK que le indica al dispositivo maestro que el
esclavo reconoce la solicitud y está en condiciones de comunicarse.
 Seguidamente comienza el intercambio de información entre los dispositivos.
 El maestro envía la dirección del registro interno del dispositivo que se desea leer o
escribir.
 El esclavo responde con otro bit de ACK
 Ahora el maestro puede empezar a leer o escribir bytes de datos. Todos los bytes de datos
deben constar de 8 bits, el número máximo de bytes que pueden ser enviados en una
transmisión no está restringido, siendo el esclavo quien fija esta cantidad de acuerdo a sus
características.
 Cada byte leido/escrito por el maestro debe ser obligatoriamente reconocido por un bit de
ACK por el dispositivo maestro/esclavo.
 Se repiten los 2 pasos anteriores hasta finalizar la comunicación entre maestro y esclavo.
 Aun cuando el maestro siempre controla el estado de la línea del reloj, un esclavo de baja
velocidad o que deba detener la transferencia de datos mientras efectúa otra función,

3
SISTEMAS MICROPROCESADOS 1 UPS

puede forzar la línea SCL a nivel bajo. Esto hace que el maestro entre en un estado de
espera, durante el cual, no transmite información esperando a que el esclavo esté listo
para continuar la transferencia en el punto donde había sido detenida.
 Cuando la comunicación finaliza, el maestro transmite una "stop condition" para dejar
libre el bus.
 Después de la "stop condition", es obligatorio para el bus estar idle durante unos
microsegundos.

El código del kernel de Linux para el soporte I2C está separado en varias piezas lógicas:

 I2C chip driver (maneja uno de los chips conectados al bus I2C, tanto si se comporta como
maestro o como esclavo)
 I2C bus driver
 I2C algorithm driver
 I2C core (la parte genérica del subsistema de I2C)

Ventajas del BUS I2C

• Definido inicialmente a mediados de los 80 para trabajar a 100kbit/s y en 1995 se definió un


modo rápido de funcionamiento que permitía transferencias de hasta 400kbit/s (algunos
dispositivos gráficos llegan a 3,4MHz).
• Presenta una transferencia “lenta” en comparación con el modo SPI y mucho más con la
lectura/escritura directa de los puertos de un microcontrolador.
• Es útil y se emplea en muchas aplicaciones en las que la velocidad de transferencia es mucho
mayor de lo que el caso requiere (p.e. Medida de temperaturas con constantes de tiempo de
segundos)
• Su principal ventaja, es que una vez disponible el microcontrolador con sus funciones de
interface con bus I2C, la inclusión de un dispositivo I2C adicional sólo necesitaría su conexión a
las dos líneas del bus (SDA y SCL que son las mismas para todos) y asignarle una dirección. Los
intercambios se realizarían utilizando los mismos subprogramas para todos
• La tensión de funcionamiento va de 2,5V a 5,5V y no es necesaria la presencia de “drivers”
de adaptación de tensión externos (integración en los propios dispositivos)

4
SISTEMAS MICROPROCESADOS 1 UPS

Operaciones de Escritura
1.- Escribir un byte:
• El Maestro del bus generará un START, luego colocará la dirección asignada en el bus al
dispositivo EEPROM (7bits) y el bit R/W=0 para indicar que el Maestro va a grabar un dato en la
EEPROM Esclava. Tras el ACK que coloca la EEPROM al detectar coincidencia con su dirección, el
Maestro debe enviar la dirección de la posición que se desea grabar. Esto se hace en dos bytes, se
envía primero un byte con tres ceros y los 5 bits de la parte alta del puntero interno y luego los
otros 8 bits.
• Tras los correspondientes ACK de la memoria (tras cada byte), el Maestro enviará el byte a
escribir en la referida posición, la EEPROM responderá con un nuevo ACK y el Maestro finalizará
enviando una condición de STOP.
• Tras esta secuencia, la memoria inicia el ciclo interno de escritura que dura entorno a 2ms.
Durante ese tiempo, la EEPROM no generará bits ACK de reconocimiento si se intenta una
transferencia

3. OBJETIVOS:

 Utilizar un PIC 16F877A y el Circuito integrado DS1307 para obtener un reloj de


tiempo real.

 Utilizar las herramientas de programación que nos brinda el software MikroBasic


para configurar e inicializar al DS1307.

 Configurar la comunicación I2C para sincronizar los datos del PIC 16F877A y el
Circuito integrado DS1307 y desplegarlos en un Display LCD 16x2.

4. MATERIALES

 1 PIC 16F877A

5
SISTEMAS MICROPROCESADOS 1 UPS

 1 LCD 16*2

 1 C.I DS 1307

 1 cristal de 4Mhz

 1 cristal de 32.768kHz

 Resistencias
-2 de 4.7kΩ
-1 de 5.1kΩ
 Capacitores
-2 de 22pf
-1 de 0.1uf

6
SISTEMAS MICROPROCESADOS 1 UPS

5. PROCEDIMIENTO

program RELOJ_DE_TIEMPO_REAL
dim g_horas, g_minutos, g_segundos as byte
dim g_anio, g_mes, g_dia, g_fecha, dato as byte

'Inicilizar DS1307
sub procedure DS1307_Init() 'Inicio del DS1307
I2C_start 'Señal de inicio para nla comunicación I2C
I2C_wr($D0) 'Direccion escritura en el C.I. DS1307
I2C_wr($00) 'Escribir en direccion 0
delay_ms(10) 'Retardo de 10 milisegundos
I2C_Repeated_Start 'Repetir señal de inicio dentro de la comunicación I2C
I2C_wr($D0) 'Direccion escritura en el C.I. DS1307
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($00) 'Escribir en direccion 0
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($00) ' Configurar los Segundos
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($02) 'Configurar los Minutos
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($20) 'Configurar las Horas
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($02) 'Configurar el Dia (lun-dom)
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($09) 'Configurar la fecha
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($07) 'Configurar el Mes
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($10) 'Configurar el Año
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($0) 'Habilitar la salida I2C del cristal de 32.768kHz
delay_ms(10) 'Retardo de 10 milisegundos
I2C_stop 'Finalizamos la comunicación I2C
end sub 'Fin de subprocedimiento

sub procedure DS1307_GetTime() 'Obtener la hora


I2C_start 'Señal de inicio en I2C
I2C_wr($D0) 'Direccion escritura en DS1307
I2C_wr(0) 'Escribir en direccion 0
I2C_Repeated_Start 'Señal de inicio en I2C
I2C_wr($D1) 'Direccion lectura en DS1307
g_segundos = Bcd2Dec(I2C_rd(1)) 'Leer segundos
g_minutos = Bcd2Dec(I2C_rd(1)) 'Leer minutos

7
SISTEMAS MICROPROCESADOS 1 UPS

g_horas = Bcd2Dec(I2C_rd(1)) 'Leer horas


g_dia = bcd2Dec(I2C_rd(1)) 'Leer dia (lun-dom)
g_fecha = bcd2Dec(I2C_rd(1)) 'Leer fecha
g_mes = Bcd2Dec(I2C_rd(1)) 'Leer mes
g_anio = Bcd2Dec(I2C_rd(0)) 'Leer año
I2C_stop 'Señal de fin en I2C
end sub 'Fin de subprocedimiento
'Algoritmo que nos permite convertir un número de 2 cifras a cadena
'si la cifra es menos de 10 se añade un 0 a la izquierda
sub procedure ByteToString(dim data as byte, dim byref text as char[2])
dim strData as char[3]
ByteToStr(data, strData)
text[0] = strData[1]
text[1] = strData[2]
text[2] = 0 'Fin cadena
if text[0] = 32 then text[0] = "0" end if 'condiciona la cantidad de dias en el mes
end sub
sub procedure DisplayData(dim row as byte, dim col as byte, dim data as byte)
dim text as char[2]
ByteToString(data, text) 'convierte de byte a string
Lcd_out(row, col, text) 'muestra los datos como text en fila y coloumna
end sub
'Mostrar en el LCD la fecha y la hora
sub procedure DisplayDateTime()
'Hora
DisplayData(1, 9, g_hours) ' desplegamos horas en la LCD
DisplayData(1,12, g_minutes) ' desplegamos minutos en la LCD
DisplayData(1,15, g_seconds)' desplegamos segundos en la LCD
'Fecha
DisplayData(2, 7, g_day)' desplegamos dia en la LCD
DisplayData(2,10, g_month)' desplegamos mes en la LCD
DisplayData(2,15, g_year)' desplegamos año en la LCD
end sub
main:
'Inicializar LCD
trisd=0
dato=0
Lcd_Config(PORTD,3,2,1,0,PORTD,4,6,5) 'organiza porque puertos va a trbajar la LCD
Lcd_Cmd(LCD_CLEAR)
Lcd_Cmd(LCD_CURSOR_OFF) 'apaga el cursor en la LCD
Lcd_out(1, 1, "Hora: 00:00:00")'despliega los datos en la LCD
Lcd_out(2, 1, "Fecha:00/00/2000") 'despliega los datos en la LCD
dato=Eeprom_Read(0) 'lee los datos de la memoria eeprom
'Inicializar I2C

8
SISTEMAS MICROPROCESADOS 1 UPS

I2C_Init(100000) 'configura el registro


if dato=1 then 'condiciona la lectura para el arreglo de datos
dato=1
Eeprom_Write(0,dato) 'condiciona la lectura para el arreglo de datos
ELSE
dato=1
DS1307_Init
end if
'Inicializar DS1307
while true
DS1307_GetTime
DisplayDateTime
Delay_ms(1000)
wend
end.

6. ESQUEMATICO

9
SISTEMAS MICROPROCESADOS 1 UPS

7. RESULTADOS

8. CONCLUSIONES

 Es de vital importancia utilizar la batería de tres voltios para la alimentación


del C.I DS1307 y para el correcto funcionamiento de la memoria Eeprom en el
reloj en tiempo real.

 Hay que tener cuidado en sincronizar correctamente la frecuencia de trabajo


con la comunicación I2C para el correcto funcionamiento del reloj a 32.768kHz

 Es importante utilizar los cristales adecuados para la frecuencia en la que


trabajamos utilizando un cristal de 32.768khz para el C.I DS1307 y de 4Mhz
para la frecuencia de operación del microcontrolador.

10
SISTEMAS MICROPROCESADOS 1 UPS

9. BIBLIOGRAFIA

 Creado el 18 ene 2010, a las 02:08. El texto está disponible bajo la Licencia
Creative Commons Reconocimiento. http://es.wikipedia.org/wiki/RTC

 © 2007, 2009 Robots Argentina


Actualizado el 18 de mayo de 2009
http://robots-argentina.com.ar/Comunicacion_busI2C.htm

 Colaboración exclusiva para Comunidad Electrónicos de Eduardo Coquet,


docente y capacitador de CeCaT, Centro de Capacitación Técnica de Buenos
Aires, Argentina.
Actualizado el 20 de febrero de 2008
http://www.comunidadelectronicos.com/articulos/i2c.htm

11

Вам также может понравиться