Autor Tema: cristal RTC DS1307  (Leído 3866 veces)

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

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
cristal RTC DS1307
« en: 21 de Julio de 2005, 16:35:00 »
Tengo una duda, en mi proyecto para el bot, usaré este reloj/calendario, he escuchado y no se si correctamente, que en el cristal que este usa (32.768khz) se colora un condensador de 10pF en paralelo, es decir, cada pata del único condensador de que hablamos a cada pata del oscilador, nada que ver como en un pic, ¿es esto cierto? ¿se puede omitir?

Tengo el fotolito hecho y me urge que me respondais para poder "cortar" esa parte o no.

Gracias a todos!!
Si juegas contra el mejor, pierdes como los demás.

Desconectado ma-tec

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 76
    • www.matec.es.tl
RE: cristal RTC DS1307
« Respuesta #1 en: 22 de Julio de 2005, 17:20:00 »
yo lo he usado sin condensador
el XT solo y funciona sin problemas.
LA CLAVE DEL EXITO ES SABER
PARA DONDE VA LA GENTE Y
LLEGAR PRIMERO.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: cristal RTC DS1307
« Respuesta #2 en: 22 de Julio de 2005, 21:19:00 »
Ok, muchas gracias ... ya aprobecho Sonrisa Gigante ¿hay alguna libreria para este en C? ¿O lo usas con los comandos de i2c "normales"?
Si juegas contra el mejor, pierdes como los demás.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: cristal RTC DS1307
« Respuesta #3 en: 23 de Julio de 2005, 00:33:00 »
hola:
yo tambien lo he utilizado sin condensador y funciona ok, de C no se nada, pero si te sirve en PBP solamente se hace lo siguiente para leer y escribir:


CPIN var Portb.7
DPIN var Portb.6

segu var byte

I2CWRITE DPIN,CPIN,%11010000,0,[$00] "setear segundos
I2CREAD DPIN,CPIN,%11010000,0,[segu] "leer datos de mem.0

Suerte...

Un abrazo... Sonrisa Gigante

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: cristal RTC DS1307
« Respuesta #4 en: 23 de Julio de 2005, 14:26:00 »
Escrito originalmente por radon
Ok, muchas gracias ... ya aprobecho :] ¿hay alguna libreria para este en C? ¿O lo usas con los comandos de i2c "normales"?


No necesitas cristal para el reloj.

Te dejo código que hice para el ds1307, espero que te sirva. Según sé, CCS no trae librería, pero puedes usar I2C normalmente para trabajarlo.

--------------
//Programa que usa protocolo I2C para
//escribir y leer tiempo del DS1307
//saca tiempo en LCD

//migsantiago

// Conexiones de la LCD:
//     D0  enable
//     D1  rs
//     D2  rw
//     D4  D4
//     D5  D5
//     D6  D6
//     D7  D7
//
//   LCD pins D0-D3 are not used and PIC D3 is not used.

#include <16f877a.h>
#fuses xt,nowdt,noput,nobrownout,nolvp,noprotect
#use delay(clock=4000000)

#include "lcd.c"
#use standard_io (D)


#use fast_io (b)

#use i2c(MASTER, SDA=PIN_b1, SCL=PIN_b0,slow)

//Registros DS1307
#define ds_seconds 0x00
#define ds_minutes 0x01
#define ds_hours 0x02
#define ds_day 0x03
#define ds_date 0x04
#define ds_month 0x05
#define ds_year 0x06
#define ds_control 0x07

//DS1307
//Vbat a tierra

void main(void)
{

int16 retardo; //Cada cuando actualiza lectura en LCD

//Dato en registro ds, a mandar o leer
int seconds,minutes,hours,day,date,month,year,control;

retardo=250; //ms a tardar entre lectura y lectura

//Justo cuando prende circuito, la fecha que establece es la siguiente
seconds= 0x00;
minutes= 0x38;
hours  = 0x15; //modo 24 hrs
day    = 0x05; //1 es domingo
date   = 0x13;
month  = 0x01;
year   = 0x05;
control= 0x00; //OUT=0 SQWE=0 RS0-1=0 no hay onda cuadrada


//Establece fecha y hora
i2c_start(); //Inicia I2C
i2c_write(0xd0); //Direcciona DS1307 write
i2c_write(ds_seconds); //Indica que empiece en registro ds_seconds
//Aquí establece fecha y hora respecto a la puesta arriba
i2c_write(seconds);
i2c_write(minutes);
i2c_write(hours);
i2c_write(day);
i2c_write(date);
i2c_write(month);
i2c_write(year);
i2c_write(control);
i2c_stop(); //Ya puso la hora y fecha
//El RTC ya está marcando el tiempo y fecha

//Rutina LCD
lcd_init(); //Inicia LCD
lcd_putc("f"); //Limpia LCD
lcd_putc("Real Time Clock
"); //rtc
lcd_putc("     DS1307");
delay_ms(3000);

while(1)
   {

   delay_ms(retardo); //Usuario lee


   //Obtiene datos de DS1307
   i2c_start(); //Inicia I2C
   i2c_write(0xd0); //Direcciona DS1307 write
   i2c_write(ds_seconds); //Indica que ponga registro en ds_seconds
   i2c_stop();

   i2c_start();
   i2c_write(0xd1); //Lee DS1307
   seconds = i2c_read();
   minutes = i2c_read();
   hours = i2c_read();
   day = i2c_read();
   date = i2c_read();
   month = i2c_read();
   year = i2c_read(0); //no ack
   i2c_stop();

   //Representa datos en la LCD
   printf(lcd_putc,"f%2x-%2x-20%2x
",date,month,year); //dd-mm-year
   printf(lcd_putc,"%2x:%2x:%2x",hours,minutes,seconds); //23:59:59
   }
}



-------------------

Desconectado pendexgabo

  • PIC16
  • ***
  • Mensajes: 222
    • www.SosaGabriel.com.ar
RE: cristal RTC DS1307
« Respuesta #5 en: 23 de Julio de 2005, 16:18:00 »
creo que el ccs trae una libreria para el ds1302 , el cual salvanod ciertas diferencias puede servir.. de todas formas no es muy complicado solo debes leer y escribir el I2C y siempre acordarte que los valores que te devuelve son el BCD.

saludos

gabriel

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: cristal RTC DS1307
« Respuesta #6 en: 23 de Julio de 2005, 17:51:00 »
Muchas gracias a todos por contestar tan rapido, por cierto ... ¿que es el BCD?
Si juegas contra el mejor, pierdes como los demás.

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: cristal RTC DS1307
« Respuesta #7 en: 24 de Julio de 2005, 15:00:00 »
Binary Converted to Decimal (creo), se trata de expresar numeros binarios en grupos de 4 bits de tal forma q el valor de cada grupo no sea mayor a 9, por ejemplo:

15d = 00001111b en BCD tendriamos: 0001 0101, como ves se trata de un 1 y un 5.

En binario, el numero maximo q podemos representar esta dado por la formula (2^n) - 1, dond n es la cantidad de bits, en BCD el numero maximo representable es (10^g) - 1, dond g es el numero de nibbles (grupos de 4 bits) q estan disponibles.

El sistema BCD es muy util sobretodo para enviar informacion q no rekiera descomposicion, como por ejemplo a displays (como el 7447 [driver de display]), pero posee como desventaja que consume mas espacio, por ejemplo:

125d = 11111101b, en BCD tndriamos: 000100100101, descompuesto seria:
0001 (1) 0010 (2) 0101 (5).

Como puedes ver, el ekivalente binario de 125d solo ocupa 8 bits pero el BCD ocupa 12 bits, algunos encontraran esto como una desventaja, pero eso keda a gusto de cada kien.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: cristal RTC DS1307
« Respuesta #8 en: 25 de Julio de 2005, 05:40:00 »
Muchas gracias Muchas risas por la explicacion. Ya pronto trabajare sobre el RTC en el bot, agradezco tb mucho a migsantiago por el codigo. Rebotado
Si juegas contra el mejor, pierdes como los demás.


 

anything