Pages: [1]   Go Down
Author Topic: RTC DS1307 no "avanza en el tiempo"  (Read 818 times)
0 Members and 1 Guest are viewing this topic.
COM22
Offline Offline
God Member
*****
Karma: 6
Posts: 702
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Estoy probando unos DS1307 que compre por ebay (http://www.ebay.es/itm/a/140945671941) pero me estoy volviendo loco por que puedo añadir la fecha que quiera pero no "avanza en el tiempo", siempre me devuelve la misma hora.

Como código utilizo: http://bildr.org/2011/03/ds1307-arduino/

Tengo otro DS1307 en DIP-8 que funciona bien con la batería, el xtal,... pero cuando pongo el de eBay no funciona. Tocando la patilla X1 con el dedo consigo que avance algunos segundos así que pienso que tiene que ser algo relacionado con el xtal pero no encuentro ni se me ocurre nada

Un saludo!


* rtc-sch.jpg (61.38 KB, 844x578 - viewed 19 times.)
« Last Edit: June 30, 2013, 08:59:21 pm by JRodrigo » Logged


Malaga
Offline Offline
Sr. Member
****
Karma: 6
Posts: 319
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

¿y cómo es el PCB en el que lo tiene montado?

Aunque sea un cristal de baja frecuencia, sigue siendo sensible a la calidad de las conexiones que uses ...
Logged

Vinciduino rocks!

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 956
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Revisa soldaduras o conexiones.

¿La placa lleva las resistencias necesarias en la linea del i2c, o se las has puesto tu?

¿Has comprobado que cada pata llega a donde corresponde sda scl?

¿Has inicializado el reloj y luego puesto en hora?

« Last Edit: June 30, 2013, 03:42:03 pm by Heke » Logged

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

COM22
Offline Offline
God Member
*****
Karma: 6
Posts: 702
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pongo una imagen de la PCB, aunque creo que he intentado aislar bien el xtal aunque no bien bien como dice el datasheet.

El chip DIP me funciona perfectamente, pero los peques SOP nada...

@heke lo probé una vez con las resistencias en el bus i2c y nada, pero no las uso por que con la librería Wire usa las internas del ATmega.

Respecto a la hora puedo ponerlo en hora pero hay se queda.

En una de las muchas pruebas empieza el reloj con esta hora:

Code:
15/31/7 3:10:124
15/31/7 3:10:126
15/31/7 3:10:127
15/31/7 3:10:129
15/31/7 3:10:130
15/31/7 3:10:132

Pero cuando lo pongo en hora vuelve a quedarse parado.


* DS1307_pcb.jpg (85.22 KB, 556x572 - viewed 8 times.)

* 2013-07-01 04.03.20.jpg (200.17 KB, 648x486 - viewed 8 times.)

* 2013-07-01 03.57.10.jpg (241.67 KB, 608x521 - viewed 9 times.)
Logged


Malaga
Offline Offline
Sr. Member
****
Karma: 6
Posts: 319
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Podríamos decir que el cristal es un oscilador RLC.
El hecho de que al tocar tu el cristal, o cerca de él, este arranque a mi me da que pensar que, por la razón que sea, el cristal no termina de oscilar y al variar su capacidad con masa o cualquier otro parámetro, entonces consigue arrancar.

Con un osciloscopio podría husmear un poco en los pines X1 y X2, a ver si hay oscilación.

También podrías activar al salida del oscilador, para ver si hay o no reloj interno, pero por lo que cuentas, probablemente no lo haya.

En otros circuitos integrados existe algún registro EEPROM para indicar que tipo de drivers a usar con el cristal, pero en este parece que no.
O bien el cristal o bien el IC no se atienen a las especificaciones ... :-(
(Según el datasheet, el cristal tiene que tener un ESR de 45K y un capacitancia de 12.5pF ... idealmente )
Logged

Vinciduino rocks!

Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 956
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El que sea protoboard o placa realizada a mano da igual, yo he realizado con uno y otro y no le afecta.

El cuarzo a veces le he soldado a masa la carcasa y otras no, y funciona igual.

Lo que me da es que o tu cuarzo no esta bien.

De todas formas, me dices que las resistencias empleas las internas del arduino y las internas son de 100k, el valor maximo que figura en la mayoria de esquemas es de 10k, el valor que empleo yo son 4k7. quizas sea muy elevado 100k, podias probar a ver que tal, un valor mas pequeño, poniendolas en la placa del arduino en vez de la del reloj por si te es incomodo...

Una cosa, no sea que entre tanto lio se nos haya pasado... ¿tienes un sketch para cargar la hora y otro para leerla no?

No sea que sea el sketch que este continuamente cargando la hora....
« Last Edit: July 01, 2013, 02:15:56 am by Heke » Logged

CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

COM22
Offline Offline
God Member
*****
Karma: 6
Posts: 702
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

He comprado unos pocos más de "DS1307ZN" a otro vendedor haber si puede ser que por algún motivo los chips no funcionen.

Como comentas ADLC el fallo puede ser del oscilador o el integrado, he estado leyendo que el integrado tarda normalmente un segundo en empezar a oscilar el xtal, también en un foro ingles que puede que no haya la suficiente energía para producir el oscilamiento, así que por aquí tiene que andar el problema, haber si cuando me lleguen los nuevos se arregla.

@Heke la placa no cumple las especificaciones del datasheet, pero las que venden en muchas tiendas i/o ebay el diseño no cumple ni de lejos y funcionan sin problemas. Con el tema cristales, tengo dos modelos de cristales, los dos funcionan en el chip DIP sin problemas pero con los peques nada.

La comunicación del bus I2C funciona bien (igualmente he probado de poner ese valor de resistencias y nanai), pero puede afectarle el tipo las resistencias que pongas en el bus al funcionamiento interno del chip?

La programación que utilizo es esta http://bildr.org/2011/03/ds1307-arduino/, simplemente le añadido un par de lineas en el setup() que si un pin esta en HIGH lo ponga en hora y si esta en LOW no lo ponga en hora.

Code:
...
if ( digitalRead(6) == HIGH ) {
    setDateTime();
}
...

Un saludo y gracias por vuestra ayuda!  smiley
Logged


Pages: [1]   Go Up
Jump to: