TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jeremylf en 04 de Junio de 2007, 19:31:07

Título: Desilucion o mal funcionamiento con el DS1302
Publicado por: jeremylf en 04 de Junio de 2007, 19:31:07
Wenas a todos.
Lo q sucede esq probando con el DS1302 usando el ejemplo de Vzsener ((Y)) sucede q al dejarlo prendido dia y medio se ha retrasado 6 segundos!! 6!!  :shock:  Vamos q tanto se habla de este integrado para q alfinal solo sea tiempo real por unas horas ?? :? Bueno espero equivocarme y q el problema este en mi codigo (xq lo modifiq) o en las conexiones o en lo q sea. Espero puedan ayudarme...

Haber por partes, primero este es el codigo q llevo echo:
Código: [Seleccionar]
#include <18F2550.h>            //pic a utilizar         
#use delay(CLOCK=12000000)         //Fosc=4Mhz
#fuses HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT,NOVREGEN//,NOMCLR   //comandos para el programador
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //arg.1=velocidad, arg.2=trasmitir, arg.3=recibir.
#define RTC_SCLK PIN_C1            //A  definimos pin's...
#define RTC_IO   PIN_C2
#define RTC_RST  PIN_C0            //...de conexion de la rtc ds1302
#include <ds1302.c>               //libreria de rtc ds1302
#include <lcd_F2550.c>                //libreria de lcd

///VARIABLES GLOBALES
byte day,mth,year,dow,hour,min,sec;   //variabes para ds1302
byte menu=0,flag=0,var=2;         //variables para menu CONFigurar

///DEFINICION DE FUNCIONES   
void configurar(void);
void horas(void);               
void minutos(void);
void dia(void);
void mes(void);
void anio(void);
void beep(void);

///LLAMADA FUNCION INTERRUPCION
#INT_TIMER0
void interrupcion()
{output_high(pin_b5);
   if(flag>var){      //¿ya es 130ms aprox?
      var--;         //SI -> decremento var...
      if(var==0)
         var=2;      //...ajuste fino de 130ms aprox
      flag=0;         //reset flag para contar 130ms aprox
      rtc_get_date(day,mth,year,dow);      //coge dia,mes,año
         rtc_get_time(hour,min,sec );      //coge hora,minuto,segundo
      printf(lcd_putc,"\fFECHA: %02u/%02u/%02u\nHORA: %02u:%02u:%02u",day,mth,year,hour,min,sec);   //lcd
      printf("\fFECHA: %02u/%02u/%02u\nHORA: %02u:%02u:%02u",day,mth,year,hour,min,sec);   //rs232
      }
     
   set_timer0(0);      //reset TMR0
   flag++;            //incremento variable flag
}

///PROGRAMA
void main(void){
   enable_interrupts(INT_TIMER0);            //interrupcion TIMER0 activada
   setup_timer_0(RTCC_8_BIT|RTCC_INTERNAL|RTCC_DIV_256);
   //setup_counters(RTCC_INTERNAL,RTCC_DIV_256);   //CONFiguracion interrupcion TMR0
   set_timer0(0);                        //carga TMR0
   
   lcd_init();          //inicializa lcd
   rtc_init();          //inicializa rtc
   
   rtc_set_datetime(day,mth,year,dow,0,0);
   enable_interrupts(GLOBAL);               //activadas interrupciones
}

Si, lo modifiq bastante pero solo va directamente al timer0 sin ningun menu ni nada (disculpa Vzsener xP). AH! y cambie el cristal de 4mhz por uno de 12, no creo q eso sea el problema yaq el DS1302 tiene su propio cristal pero igual les informo x)

Ahora, si sirve de algo aqui les dejo una imagen d cmo tengo todo y las conexiones y eso:
(http://img79.imageshack.us/img79/484/image010ty4.th.jpg) (http://img79.imageshack.us/my.php?image=image010ty4.jpg)

Si necesitan algun tipo mas de info pueden pedirmelo. Porfavor esq esto si lo necesito urgente, pense q con el DS1302 ya se arreglaba mi problema del tiempo real pero como ven no es asi=(  Espero q alguien pueda ayudarme. Gracias d antemano  :D


salu2 8) 8)
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: jfh900 en 04 de Junio de 2007, 19:47:32
Una pregunta tonta. ¿Se supone que al DS1302 le has puesto un cristal de 32.768kHz?.


Un saludo.
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: jeremylf en 04 de Junio de 2007, 20:08:49
Una pregunta tonta. ¿Se supone que al DS1302 le has puesto un cristal de 32.768kHz?.
Claro claro, ahi en la imagen sale :D :D

¿Alguna hipotesis?   :(


salu2 8) 8)
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: Nocturno en 05 de Junio de 2007, 05:24:06
Yo no le echaría la culpa al integrado, que lo único que hace es contar pulsos y operar con ellos. Eso no puede fallar.
Creo que el problema estará en el cristal, o bien está defectuoso, o bien necesita de condensadores, buena masa y lo que diga la datasheet para oscilar adecuadamente.
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: RedPic en 05 de Junio de 2007, 05:53:12
La primera prueba que hice con el DS1307 tiré el cristal de 32.768Khz de cualquier forma sobre el PCB a mas de dos centímetros del integrado, el RTC era de todo menos un RTC. Adelantaba o atrasaba a su antojo, y si ponía el dedo sobre el cristal llegaba a detenerse ...

La segunda lo monté según las especificaciones del Datasheet, con su distancia mínima y sus planos de masa alrededor del cilindro y las patillas y de golpe se convirtió en un RTC de verdad. Pasan las semanas y ni un solo segundo de diferencia.

¿Por qué será?  :D :D :D
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: aitopes en 05 de Junio de 2007, 10:21:32
Coincido con RedPic. Si no se respetan las especificaciones de la datasheet, se pueden estar "perdiendo" pulsos de clock o oscilando "mal", por lo que contara el tiempo como la mona...:) :)

Saludos!
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: jeremylf en 05 de Junio de 2007, 15:21:35
Creo q tienes razon sobre eso RedPic pero esq no se mucho de ingles (nada) y lo unico q e sacado del datasheet son las conxeciones y eso, pero sobre distancias y moderaciones pues nada no e podido leer porq no entiendo.

Nose, podrias decirme q cosa importante sabes sobre esto? algo q tenga q hacer y no haya echo por no leer el datahseet ??  :?


salu2, gracias  8) 8)

.........Leyendo n lo q pueda el datasheet.... :-)
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: fastyx2 en 05 de Junio de 2007, 15:49:06
no compres cristales tipo perfil bajo , busca los cilindricos alargados tienen mas o menos 4 mm de diametro yy un centimetro de largo.

como guia practica, si vas a hacer un pcb lo primero que tenes que ubicar es el integrado y a no mas de 1 o 2 cm de las pata el cristal , colocalo acostado
y hacele una cama de masa como si lo fueras a acostar . lo que yo hice fue dejar 2 conexiones en el pcb y por encima le coloque un pedazo de chapita pegada al pertinax y conectada a masa.

Como consejo : no es buena idea montar un rtc en el protoboard con los cables yendo y viniendo por todos lados.

quedate tranquilo que el ds1302 es un fierrito!
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: RedPic en 05 de Junio de 2007, 15:59:16
Exacto, es tal como te ha dicho el amigo fastyx2:

Debes hacer un cudradito de masa mas o menos del tamaño del crital, mejor el cilíndrico y acostarlo sobre él dándole una puntada de soldadura entre el chasis del cristal y tu masa. Si no quieres ponerlo por la cara de componentes puedes ponerlo por la de las pistas, acostado y con los pines soldados en paralelo sobre las pistas. Los pines del cristal ponlos lo mas cerca posible de los pines del DS1302. Y ya verás como si es exacto.  :mrgreen:

Así es como te lo recomienda el datasheet:

(http://publi.garcia-cuervo.net/ds1307_Xtal.GIF)

El LOCAL GROUND PLANE es el plano de masa, el área delimitada por la linea discontínua, que como puedes ver rodea al cristal, se mete por debajo del DS y lo conecta al GND del mismo, dejando los dos pines del oscilador del DS dentro del plano de masa, como si fuesen dos islas conectadas a las patas del cristal.

La nota te dice que si no pones el plano de masa por debajo de la carcasa del DS conectando el GND con dicho plano NO pongas ninguna señal en el área rayada para evitar interferencias en el oscilador (traducción libre).



 
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: jeremylf en 05 de Junio de 2007, 18:45:12
Ahora entiendo como debe ir, gracias, pero no tengo una placa para hacer eso  :( y bueno con ayuda d un amigo e echo algo parecido por asi decirlo y quisiera saber si esto funcionara. Bien, 1ro le puse un socket al DS1302 y a las patas 2 y 3 de ese socket le puse el cristal de 32.768, luego a los 6 sobrantes pines de ese socket del puse otro socket, y ese va conectado al protoboar.

Una image vale mas q mil palabras:
(http://img409.imageshack.us/img409/4236/dibujoxa2.th.jpg) (http://img409.imageshack.us/my.php?image=dibujoxa2.jpg)

Espero se entienda y q funcione  :mrgreen: ya lo dejare probando.


salu2 y Gracias nuevamnt  8) 8)
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: jfh900 en 05 de Junio de 2007, 18:52:25
Puedes probar a soldar un cable a la carcasa metálica del cristal y masa, para aislar el cristal.

Un saludo
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: Nocturno en 06 de Junio de 2007, 01:40:10
Sí, lo ideal es lo que te decían antes; poner el cristal "acostado" sobre un plano de masa y soldarlo a la misma con un hilo que le rodee.

Si no te fuera bien con la electrónica, seguro que te podrías ganar la vida con el Paint; ¡menudo dibujo!
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: jeremylf en 07 de Junio de 2007, 18:28:47
Bueno ahora estoy probando tal y cmo lo hice en el dibujo y se a retrasado 3 segundos despues de 18 horas u.u'  Creo q el mayor problema es, como bien dicen, el trabajar esto en el protoboar. Asiq me despreocupare y supongo q en un PCB todo ira de maravilla  :mrgreen:

Aun asi esperare aver q tanto puede retrasarse en estas pruebas q voy haciendo.

Gracias a todos por su ayuda!  :-/  Ya les comentare cmo me fue  :lol:


salu2 8) 8) 8) 8)
Título: Re: Desilucion o mal funcionamiento con el DS1302
Publicado por: aitopes en 07 de Junio de 2007, 19:28:13
Felicitaciones! :)

3 segundos en 18 horas son 3 segundos en 18*60*60 segundos, o sea 3/64800 = 0.00004629.... solo un 0.004.6%.

Muy bueno!