TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: juanelete en 04 de Marzo de 2006, 07:49:00

Título: Maldito DS1307
Publicado por: juanelete en 04 de Marzo de 2006, 07:49:00
Hola a tod@s:

Estoy intentando hacer funcionar un RTC, concretamente el DS1307 de Dallas Semiconductor. He seguido las instrucciones del Data Sheet y algunos ejemplos y consejos que he visto por aqui en los foros, pero.... Llorica

He conseguido grabar y leer la fecha y la hora correctamente, pero parece que no marcha, aunque realmente lo que sucede es que va muy lento, tarda mas de 40 seg. en pasar de un segundo a otro.

He configurado el pin sqw/out para que genere una onda cuadrada de 1Hz, pero la he conectado a un led, y este permanece siempre encendido.

Alguien podria hecharme una mano... (o las dos).  Giño

Saludos y muchas cervezas.  Sonrisa Gigante
Título: RE: Maldito DS1307
Publicado por: EARC en 04 de Marzo de 2006, 10:03:00
tRANQUILO NO PASA NADA, LO MAS IMPORTANTE ES QUE TENGAS EL CIRCUITO BIEN CONECTADO, ESEGURATE DE TENER LAS PULL-UP EN LAS LINEAS scL Y sda,

Estas funciones las he creado yo porque la que trae el compilador CCS no funciona.

tienes que declarar las variables seg,min,hor,dia_s,date,mes,ano,control

void escribe_ds1307 (seg,min,hor,dia_s,date,mes,ano,control)
{
i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_write(seg);
i2c_write(min);
i2c_write(hor);
i2c_write(dia_s);
i2c_write(date);
i2c_write(mes);
i2c_write(ano);
i2c_write(control);
i2c_stop();
}

void lee_ds1307(){
i2c_start();
i2c_write(0xd0);
i2c_write(0);
i2c_stop();
i2c_start();
i2c_write(0xd1);
seg=i2c_read();
min=i2c_read();
hor=i2c_read();
dia_s=i2c_read();
date=i2c_read();
mes=i2c_read();
ano=i2c_read();
control=i2c_read(0);
i2c_stop();
}
Título: RE: Maldito DS1307
Publicado por: juanelete en 04 de Marzo de 2006, 10:33:00
Hola EARC

El tema I2C me funciona bien, consigo grabar una fecha y hora determinada y luego la puedo leer y mostrarla en en LCD.

El problema es que el reloj va muy lento, tarda casi 40 segundos en contar un solo segundo.

He puesto un led (ya me funciona) en la salida de la onda cuadrada ajustada a 1Hz (1 ciclo por segundo) y efectivamente parpadea cada 40 segundos.

Como curiosidad deciros que cuando toco el cristal y lo apreto un poco, va mas rapido mientras lo mantengo apretado, volviendo al ritmo lento en cuanto lo suelto.

He probado con varios cristales, con dos DS1307 y he montado varias placas, y todas las veces hace lo mismo.

Saludos Sonrisa Gigante
Título: RE: Maldito DS1307
Publicado por: juanelete en 04 de Marzo de 2006, 15:25:00
Hola de nuevo:

Segun el DataSheet tengo que ponerle al DS1307 un cristal se 32.768 Hz.

En los cristales que estoy utilizando pone 3.2768 Mhz, ... Creo que es lo mismo ¿o no...?.

Perdonar por lo simple de la cuestion, pero es que estoy paranoico con el dichoso relojito.  loco

Hay alguien que sepa como poner esto en marcha... ?

Saludos Sonrisa Gigante
Título: RE: Maldito DS1307
Publicado por: migsantiago en 04 de Marzo de 2006, 16:02:00
Nooo...

el que te pide es de 32.768kHz... (32.768 Hz en español de España)

Tú le estás poniendo uno de MegaHertz!
Título: RE: Maldito DS1307
Publicado por: juanelete en 04 de Marzo de 2006, 18:36:00
Hola

Ya pero... si

1000 Hz = 1 KHz

10 KHz = 1 MHz
 
entonces mi cristal que pone 3.2768 Mhz sera igual a 32.768 KHz (entendiendo el "." como separador de decimales).

Por lo tanto si es la frecuencia correcta. eso creo...

Otra cosa:

He vuelto a leer el DtaSheet y he visto el siguiente parrafo:

"X1,X2 - Connections for a standard 32.768 KHz quartz crystal. The internal oscillator circuitry is designed for operation with a crystal having a specified load capacitance (CL) of 12.5 pF."

Mi ingles no es muy bueno pero dice algo asi como que el cristal tiene que tener una capacitancia de 12.5 pF.

Que significa esto realmente?

Saludos
Título: RE: Maldito DS1307
Publicado por: migsantiago en 04 de Marzo de 2006, 19:19:00
Yo siempre supe y basé todos mis conocimientos en que 1000kHz = 1MHz.

¿Porqué dices que 10kHz son 1MHz? ¿Es alguna nomenclatura de marcado para el número de serie de cristales o algo así?

Y estás en lo correcto sobre la capacitancia del cristal, aunque dudo que ese sea el problema de tu aplicación.
Título: RE: Maldito DS1307
Publicado por: juanelete en 05 de Marzo de 2006, 05:54:00
Hola

Esta mañana leo mi anterior post y tu contestacion y pienso...

Como es posible que yo anoche escribiera ese disparate,...  Flash Payaso

Tiene que ser la falta de dormir, los nervios, la paranoia, la desesperacion, la estupidez... que se yo... un poco de todo.  loco loco

Pues tienes razon 1000 KHz = 1 MHz  Por lo tanto mi cristal es de 3.276,8 KHz. y no vale.  Llorica


Pero ahora me asalta otra duda:

En el DataSheet pone 32.768 KHz y en otra documentacion, y en el libro "Microcontrolador PIC16F84" pone 32.768 Hz.

Yo entiendo que en el DataSheet se refieren a 32,768 KHz (notese la ","  ).

Osea que el cristal tiene que ser de 32.768 Hz (Treinta y dos mil setecientos sesenta y ocho Hz).

Es esto correcto ?   loco


Saludos  Sonrisa Gigante
Título: RE: Maldito DS1307
Publicado por: jfh900 en 05 de Marzo de 2006, 07:24:00
Si, es correcto, los americanos utilizan el punto para separar los decimales, y la coma para separar los miles.

Un saludo.
Título: RE: Maldito DS1307
Publicado por: lovando en 05 de Marzo de 2006, 12:13:00
Escrito originalmente por jfh900
Si, es correcto, los americanos utilizan el punto para separar los decimales, y la coma para separar los miles.

Un saludo.



Disculpa, a qué americanos te refieres???
Título: RE: Maldito DS1307
Publicado por: migsantiago en 05 de Marzo de 2006, 19:24:00
Jaja los americanos.

Y sí, estás en lo correcto. Treinta y dos mil setecientos sesenta y ocho Hertz.

Sí, en América usamos esa notación.

América
una décima - 0.1
una centésima - 0.01
una milésima - 0.001
mil - 1,000
un millón - 1,000,000
un billón - México: 1,000,000,000,000 EUA: 1,000,000,000
mil quinientos pesos con 15 centavos - $1,500.15

Europa
una décima - 0,1
una centésima - 0,01
una milésima - 0,001
mil - 1.000
un millón - 1.000.000
un billón - ???
mil quinientos pesos con 15 centavos - $1.500,15