Autor Tema: Reloj de Tiempo Real  (Leído 3461 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
Reloj de Tiempo Real
« en: 27 de Agosto de 2004, 16:21:00 »
Estimados Foreros:

Estoy realizando una aplicacion donde tengo que utilizar un reloj de tiempo real con calendario por disponibilidad a mano tengo el DS1302 <<< http://pdfserv.maxim-ic.com/en/ds/DS1302.pdf >>>. Este se comunica por un puerto serie de ida y vuelta por una linea mas la señal de sincronia de un clock pero segun veo, en el datasheet, no utiliza el estandar I2C que es muy simple de ocupar en los PIC y usa un solo pin de comunicacion mas la señal de clock.

La otra manera de configurar el puerto serie en los PIC es SPI pero utiliza  3 lineas una de datos de salida otra de datos de entrada y el clock.

¿Alguien me podria orientar en algun modelo de reloj a utilizar? que sea del tipo serial

Salud2




Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Reloj de Tiempo Real
« Respuesta #1 en: 27 de Agosto de 2004, 17:09:00 »
Hola Kruskal, pues por i2c tienes dos opciones (las que conozco yo, que seguro existen muchos más).

El DS1307 también de maxim y el PCF8583 de Philips:

http://pdfserv.maxim-ic.com/en/ds/DS1307.pdf

http://www.amresearch.com/datasheets/pcf8583.pdf

A mi personalmente me parece mejor el de Philips porque trae alarmas configurables y el de maxim no, pero cualquiera de las dos son buenas opciones.

Saludos.

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Reloj de Tiempo Real
« Respuesta #2 en: 28 de Agosto de 2004, 08:30:00 »
Ambos son perfectos para mi proyecto aunque prefiero el DS1307 por precio. Muchas Gracias por el dato.

Me queda una duda, no te entiendo eso de que el I2C tiene dos opciones. Segun todos mis apuntes el I2C es un estandar perfectamente definido, no estaras confundido.

Salud2

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Reloj de Tiempo Real
« Respuesta #3 en: 28 de Agosto de 2004, 08:39:00 »
No, no, no es que esté confundido, seguramente me he expresado mal, cuando me refiero a dos opciones, quiero decir que hay dos opciones en los modelos, uno de maxim y otro de Philips, no quiero decir que "haya 2 tipos de i2c", que como tú bien comentas es un protocolo estándar y único.

En cuanto a los precios no sé cual será más económico, sí sé que el de Philips anda sobre los 3 euros, aunque del de maxim se pueden pedir samples y no hay nada más económico que eso.


Saludos.

Desconectado pendexgabo

  • PIC16
  • ***
  • Mensajes: 222
    • www.SosaGabriel.com.ar
RE: Reloj de Tiempo Real
« Respuesta #4 en: 28 de Agosto de 2004, 13:43:00 »
por lo que tengo entendido, no estoy muy seguro, todo lo que es de maxim que trabaja con dos hilos, utiliza el protoclo I2C, creo (dije creo) que no deben poner el nombre del protocolo por una cuestion de no querer pagar ciertos derechos de marcas.

de todas formas si queres estar seguro, podes ir a la pagina de phillips y bajar las hojas del I2C, y fijarte que coincidan con, los tiempos de satr y stop de los dispocitivos de maxim

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Reloj de Tiempo Real
« Respuesta #5 en: 31 de Agosto de 2004, 02:36:00 »
Increible que en mi pais no pueda comprar algun RTC con las caracteristica que me acomodaba de ser I2C. No importa porque he decidido fabricar uno con un economico 16F84 y con una interface 232.

Segun estuve tirando lineas no es muy complicado la unica dificultad se encuentra en el mes de febrero en los años bisiestos. Al investigar me tope con lo siguiente:
Los años bisiestos son divisibles por 4 y son cada 4 años pero no cada 100 aunque si cada 400.

Seria muy util si alguien tuviera algun codigo de reloj con calendario. Aunque ire publicando los avances que vaya obteniendo para obtener ayuda de los amigos foreros.

Salud2

Desconectado chamuergas

  • PIC10
  • *
  • Mensajes: 7
RE: Reloj de Tiempo Real
« Respuesta #6 en: 03 de Septiembre de 2004, 11:28:00 »
yo trabaje con el de philips varias veces, va bien tiene i2c y muy importante es que tiene un consumo muy bajo si usas baterias.
No obstante te  recomiendo que te olvides de estos componentes y que integres el reloj en los pic 18 ya que van como dios, si empleas baterias son los ideales.

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Reloj de Tiempo Real
« Respuesta #7 en: 04 de Septiembre de 2004, 09:25:00 »
Estaba perdiendo el tiempo programando un reloj, CCS tiene una libreria para trabajar con un DS1302 y funciona muy bien.

//////////////////////////////////////////////////////////////////////////
////                               DS1302.C                           ////
////                     Driver for Real Time Clock                   ////
////                                                                  ////
////  rtc_init()                                   Call after power up////
////                                                                  ////
////  rtc_set_datetime(day,mth,year,dow,hour,min)  Set the date/time  ////
////                                                                  ////
////  rtc_get_date(day,mth,year,dow)               Get the date       ////
////                                                                  ////
////  rtc_get_time(hr,min,sec)                     Get the time       ////
////                                                                  ////
////  rtc_write_nvr(address,data)                  Write to NVR       ////
////                                                                  ////
////  data = rtc_read_nvr(address)                 Read from NVR      ////
////                                                                  ////
//////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services          ////
//// This source code may only be used by licensed users of the CCS C ////
//// compiler.  This source code may only be distributed to other     ////
//// licensed users of the CCS C compiler.  No other use, reproduction////
//// or distribution is permitted without written permission.         ////
//// Derivative programs created using this software in object code   ////
//// form are not restricted in any way.                              ////
//////////////////////////////////////////////////////////////////////////

#ifndef RTC_SCLK

#define RTC_SCLK PIN_B1
#define RTC_IO   PIN_B3
#define RTC_RST  PIN_B2

#endif


void write_ds1302_byte(BYTE cmd) {
   BYTE i;

   for(i=0;i<=7;++i) {
      output_bit(RTC_IO, shift_right(&cmd,1,0) );
      output_high(RTC_SCLK);
      output_low(RTC_SCLK);
   }
}

void write_ds1302(BYTE cmd, BYTE data) {

   output_high(RTC_RST);
   write_ds1302_byte(cmd);
   write_ds1302_byte(data);
   output_low(RTC_RST);
}

BYTE read_ds1302(BYTE cmd) {
   BYTE i,data;

   output_high(RTC_RST);
   write_ds1302_byte(cmd);

   for(i=0;i<=7;++i) {
      shift_right(&data,1,input(RTC_IO));
      output_high(RTC_SCLK);
      delay_us(2);
      output_low(RTC_SCLK);
      delay_us(2);
   }
   output_low(RTC_RST);
   return(data);
}

void rtc_init() {
   BYTE x;
   output_low(RTC_RST);
   delay_us(2);
   output_low(RTC_SCLK);
   write_ds1302(0x8e,0);
   write_ds1302(0x90,0xa6);
   x=read_ds1302(0x81);
   if((x & 0x80)!=0)
     write_ds1302(0x80,0);
}

void rtc_set_datetime(BYTE day, BYTE mth, BYTE year, BYTE dow, BYTE hr, BYTE min) {
   write_ds1302(0x86,day);
   write_ds1302(0x88,mth);
   write_ds1302(0x8c,year);
   write_ds1302(0x8a,dow);
   write_ds1302(0x84,hr);
   write_ds1302(0x82,min);
   write_ds1302(0x80,0);
}

void rtc_get_date(BYTE& day, BYTE& mth, BYTE& year, BYTE& dow) {
   day = read_ds1302(0x87);
   mth = read_ds1302(0x89);
   year = read_ds1302(0x8d);
   dow = read_ds1302(0x8b);
}


void rtc_get_time(BYTE& hr, BYTE& min, BYTE& sec) {
   hr = read_ds1302(0x85);
   min = read_ds1302(0x83);
   sec = read_ds1302(0x81);
}

void rtc_write_nvr(BYTE address, BYTE data) {
   write_ds1302(address|0xc0,data);
}

BYTE rtc_read_nvr(BYTE address) {
    return(read_ds1302(address|0xc1));
}