Tutorial

SISTEMAS MICROPROCESADOS 1 UPS UNIVERSIDAD POLITECNICA SALESIANA INTEGRANTES: OSCAR AYALA ANDRES VALDIVIESO CURSO: SEX

Views 192 Downloads 3 File size 787KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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 InterIntegrados). 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 esclavoreceptor 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 

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



UPS

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