• Viernes 8 de Noviembre de 2024, 15:39

Autor Tema:  Ds1307  (Leído 4210 veces)

gbd

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Ds1307
« en: Viernes 13 de Junio de 2008, 04:24 »
0
Hola, en mi proyecto final, uno de los bloque es mostrar en un lcd inteligente la fecha y hora actualizada, controlado con un JK3. El control del display ya lo logre, pero compre un DS1307 (reloj de tiempo real) y no entiendo como realizo la comunicacion entre este y el micro (envio y recepcion de datos). Lei que debe utilarce el protocolo I2C, pero en este micro no esta, y debo configurar uno.  :(
Desearia que alguien me explique como lograr esta comunicacion... gracias!

LordHagen

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Ds1307
« Respuesta #1 en: Sábado 14 de Junio de 2008, 05:55 »
0
Hola,

leí tu inquietud y es fácil de trabajar con este RTC. El emplea el bus I2C para comunicarse con un dispositivo

"maestro", que en este caso es el microcontrolador. el bus I2C usa dos líneas, una de reloj: SCL y una de datos: SDA. La comunicación siempre la inicia un dispositivo con algo de inteligencia, en este caso el micro, y funciona como un "maestro". El periférico que quieres controlar actúa como "esclavo" y responde al llamado del maestro.

Las líneas SCL es controlada por el micro pues el manda los pulsos de sincronía, y el flujo de informacion en la lína SDA es determinado por el dispositivo que solicita o envia informacion.

Este tipo de bus no hace uso de un "chip Select" puesto que el primer byte que uno transmite es la dirección del periférico a controlar. Se transmiten octetos o grupo de 8 bits acompañados de la señal de reloj, que tambien son 8 pulsos mas uno de ACK; en total serían 9 pulsos de reloj para 8 bits de data mas uno de ACK.
Se transfiere el bit mas significativo primero.

La comunicación inicia con un BIT de START, que es un cambio de nivel en las lineas SCL y SDA; su estado inicial es HI (ambas) y la primera línea que va a LO es SDA, seguida de SCL. Seguido de esto, se transmite el primer byte de forma sincronica con los pulsos de reloj, donde hay dos condiciones: de CAMBIO PERMITIDO y de DATO VALIDO, establecidas por el cambio de la lína SCL (clock).
Cuando SCL es HI (1) el valor de la línea SDA (bit) será un bit válido, es decir, que si SDA = 0, ese bit tendrá un valor de 0. Cuando SCL es LO (0), el valor de SDA puede cambiar, solo en ese momento. De esta manera, a partir del bit de START, se deben generar 8 pulsos de reloj para transmitir el primer byte, y generar un 9° pulso de reloj para que el micro revise el estado de la línea SDA, es decir, debe mirar si hay un ACK o no por parte de un dispositivo esclavo; en este noveno pulso el micro debe cambiar el estado del pin SDA de salida a entrada para chequear si alguien en el bus recibió el byte de manera correcta.

            bit START
SCL          1 ------       -----         -----         -----      
                         \     /       \      /       \      /
                0        -----         -----         -----
SDA          1 ----          -----                     -----
                        \        /      \                    /
                0       -------        ---------------
                            BIT_VALIDO        CAMBIO

El primer byte que se transmite es la dirección del dispositivo esclavo. Para el RTC, el DS1307, este byte es 0xD0 (0b1101000x). El último bit especifíca que operación se quiere hacer, Escritura o Lectura (Read = 1, /Write = 0).

El segundo byte que se transmite es la dirección interna del dispositivo, que hace referencia a algún registro o a un mapa de memoria (si fuera una SE2PROM). Dependiendo del dispositivo, se transmiten tantas "palabras" o bytes de dirección interna como lo requiera este (algunas SE2PROM usan dos bytes - hi_addr y lo_addr -). PAra el RTC, basta un solo byte, que indica el registro al que se tendrá acceso (p.9, DS1307 64 x 8, Serial, I2C Real-Time Clock, Dallas-MAxim).

Despúes de enviar la dirección interna del dispositivo, el micro debe seguir transmitiendo información o recibir la data que debe esperar del dispositivo I2C (la hora o fecha para el RTC).

Para liberar el bus, el micro debe restablecer las líneas SCL y SDA a nivel HI(1) con un bit de STOP. Dicha condición se cumple después de revisar el último bit ACK; SCL debe llegar primero a nivel HI, y se hace válido cuando SDA hace la transición de LO a HI.


La secuencia de comunicacion con cualquier dispositivo I2C sería así:

ESCRITURA

BIT_START + DEVICE_ADDRESS(ultimo bit R/W = 0)
bitACK
WORD_ADDRESS_HI + bitACK
WORD_ADDRESS_LO + bitACK (si aplica)
DATA_1 + bitACK
DATA_2 + bitACK ....
DATA_n + bitACK
BIT_STOP

LECTURA
BIT_START + DEVICE_ADDRESS(ultimo bit R/W = 0) WRITE
bitACK
WORD_ADDRESS_HI + bitACK
WORD_ADDRESS_LO + bitACK (si aplica)
BIT_START + DEVICE_ADDRESS(ultimo bit R/W = 1) READ
bitACK(de disp. esclavo)
-- aqui el micro debe leer a través de la línea SDA
DATA_1_rx + bitACK=0 (generado por micro)
DATA_2_rx + bitACK=0 (generado por micro) ...
DATA_n_rx + bitNACK=1 (generado por micro)
BIT_STOP


Las dos líneas, SDA y SCL, deben estar conectadas con resistencias de pull-up, es decir, conectadas al mismo voltaje de alimentación del micro (para el JK3 sería 5V, el mismo que usaría el RTC).

Espero haya sido de ayuda este resumen. Recomiendo que busques la nota de aplicacion AN2509 y AN1820 de freescale, y este link de Phillips (NXP) que es el autor de este tipo de conexión, buscalo por google como "I2C specification" ( no me dejan poner links, que chafa  <_< ).

Mucha suerte y cualquier inquietud a jedi_hyoga@hotmail.com

Giovanni G.

gjfuentes

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Ds1307
« Respuesta #2 en: Viernes 27 de Junio de 2008, 13:40 »
0
ya solucionaste es tema? yo tengo un programita armado en donde trabajo con el protocolo i2c para el ds1307 y puede servir para cualquier micro (y funciona perfecto). ademas lo uso para guardar variables en la ram del ds1307. Avisame si te puedo ayudar y te lo mando. saludos......

Gustavo

viti7

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:Ds1307
« Respuesta #3 en: Jueves 5 de Enero de 2012, 15:24 »
0
buen dia quiero utilizar la comunicacion IIC del micro AW60 para comunicarme con un ds1307 podrian enviarme tu programa?