Autor Tema: RTC en Proteus funciona, en la vida real no...ayuda  (Leído 5068 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Francirius

  • PIC10
  • *
  • Mensajes: 32
RTC en Proteus funciona, en la vida real no...ayuda
« en: 05 de Agosto de 2011, 17:14:51 »
Hola amigos, he estado practicando con el DS1307 y varios micros (f877, f628, f84), pero ahora que lo kiero llevar a la vida real no pasa nada.
Inicialmente me compre un ds1307 SOIC, y le hice una pcb muy buena, pero no paso nada. Ahora lo estoy armando en una proto con un integrado DIP, pero tampoco nada
le lei las señales al micro a ver sie estaba mandando las señales y si las manda. El programa es resimple, configura el RTC para que quede generando la onda de 1 Hz, y como
les digo, en proteus me funciona impeque.
Ya le he cambiado como 5 cristales y ya llevo probados 3 integrados
Espero su ayuda, muchas gracias

Desconectado korpaztk

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 202
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #1 en: 05 de Agosto de 2011, 20:02:13 »
lo has hecho en proteus?, podrías subir tu código??, aquí en el foro hay muchos temas que están relacionados con ese integrado... si mal no me equivoco entre las lineas de scl y sda iban 2 resistencias de pull-up...

Saludos.-
Korpaz.
Técnico Electronico.

El Papel Es Mi Mejor Psicologo

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #2 en: 05 de Agosto de 2011, 22:06:13 »
como tienes armado tu circuito, hay cosas que en proteus no son necesarias, pero en la vida real si
"Nada es imposible, no si puedes imaginarlo"

Desconectado Francirius

  • PIC10
  • *
  • Mensajes: 32
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #3 en: 10 de Agosto de 2011, 18:45:06 »
Aqui estan los archivos con los que estoy trabajando, tambien la simulacion de proteus.
Este es el codigo, en los adjuntos esta la libreria que uso para comunicarme con el rtc
Código: C++
  1. #include <16F628.h>
  2.  #fuses INTRC,NOMCLR,NOWDT,NOPUT,NOPROTECT
  3.  #use delay(clock=4000000)
  4.  #use standard_io(A)
  5.  #use i2c(Master,sda=PIN_A1,scl=PIN_A2)
  6.  #include <RTC_DS1307.C>
  7.  
  8.  //Programa para configurar el registro de opcion del rtc, y que comience a parpaderar cada 1 sg.
  9.  //La escritura del RTC es como sigue:
  10. //* Primero el uC envia la condicion de START.
  11. //* Luego envia la direccion del rtc en modo escritura (b'11010000' o 0xD0).
  12. //* A continuacion el maestro envia un puntero con la primera direccion del registro a escribir.
  13. //* Despues se transmiten los datos a escribir. La direccion del registro se incrementa automaticamente.
  14. //* Cuando se termina de escribir el uC maestro envia la condicion de STOP.
  15.  void main(){
  16.             delay_ms(500);             //Se comienza con un retardo para ver el efecto de la configuracion.
  17.             i2c_start();
  18.             i2c_write(0xD0);
  19.             i2c_write(0x07);           //Registro de control.
  20.             i2c_write(0b00010000);     //Palabra para configurar la señal de salida de 1 Hz (SQWE=1, RS1=RS2=0).
  21.             i2c_stop();
  22.  }
Espero puedan ayudarme, saludos!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #4 en: 10 de Agosto de 2011, 19:16:28 »
Debe existir un bucle infinito, sino el microcontrolador al terminar las instrucciones que corresponden a i2c_stop() se resetea. Con un while(1); después de esa función alcanza.


Saludos!
« Última modificación: 10 de Agosto de 2011, 19:18:34 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado Francirius

  • PIC10
  • *
  • Mensajes: 32
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #5 en: 11 de Agosto de 2011, 16:40:52 »
mmm pero como lo entiendo yo eso no es necesario, por que el micro configura el rtc y de ahi son independientes, la configuracion deja la onda cuadrada a la salida.
De hecho esta es la idea para que con esa onda actualice los registros del pic cuando se hace el reloj.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #6 en: 11 de Agosto de 2011, 17:21:00 »
Pero si se resetea a cada instante se re-configura y nunca lo dejas en "paz" al RTC  :D
No contesto mensajes privados, las consultas en el foro

Desconectado Francirius

  • PIC10
  • *
  • Mensajes: 32
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #7 en: 12 de Agosto de 2011, 03:01:48 »
pero la instruccion "i2c_stop()" no resetea el rtc, solamente termina la comunicacion entre master y slave.
mira este es un codigo de otro programa que me ha funcionado en proteus, y la configuracion no va dentro de un loop:
Código: C++
  1. void main() {
  2.    port_b_pullups(TRUE);   //Pull-up para RB0
  3.    configura();
  4.    enable_interrupts(int_ext);          //Habilita int. RB0…
  5.    ext_int_edge(L_TO_H);              //por flanco de subida
  6.    enable_interrupts(GLOBAL);    //Habilita int. general
  7.    lcd_init();
  8.  
  9. while (1){            //Bucle infinito de espera
  10.       lcd_gotoxy(5,1);
  11.       printf(lcd_putc,"%02u:%02u:%02u\n%s %02u-%02u-20%u",hr,min,sec,dia_txt,dia,mes,ano);   //Visualiza la hora, se actualiza segun los reg del pic
  12.             }
  13.       }
  14. }
la instruccion "configura()" es que configura el ds1307.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #8 en: 12 de Agosto de 2011, 03:14:14 »
Pero te falta "capturar", "decirle" al rtc que de esos datos, simplemente estas poniendo variables que nunca se actualizan.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #9 en: 12 de Agosto de 2011, 12:06:49 »
pero la instruccion "i2c_stop()" no resetea el rtc, solamente termina la comunicacion entre master y slave.

Si, eso está clarisimo. Utiliza el buscador, hay varios ejemplos para que puedas aprender a programar con CCS  ;-) Una vez más te comento, debes colocar un while(TRUE) al primer código que mostraste  :)
No contesto mensajes privados, las consultas en el foro

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #10 en: 12 de Agosto de 2011, 12:29:17 »
jeje, creo que no os está entendiendo lo que le quereis decir.... de todos modos también puede poner un "asm sleep" (no se como es la intruccion en ccs para poner asm) despues del i2c_stop();

Saludos
« Última modificación: 12 de Agosto de 2011, 12:46:46 por tannke »

Desconectado Francirius

  • PIC10
  • *
  • Mensajes: 32
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #11 en: 12 de Agosto de 2011, 16:21:08 »
Pero te falta "capturar", "decirle" al rtc que de esos datos, simplemente estas poniendo variables que nunca se actualizan.
Las variables se actualizan cada 1 sg, ya que primero se configuro el ds1307 para generar la señal de 1 Hz, esta va conectada a RB0, y al habilitar la interrupcion
actualiza los registros, y el programa principal solo se encarga de desplegar los datos.
jeje, creo que no os está entendiendo lo que le quereis decir.... de todos modos también puede poner un "asm sleep" (no se como es la intruccion en ccs para poner asm) despues del i2c_stop();

Saludos
Voy a intentar lo que me comentan, pero no me convence mucho, por que en la simulacion en Proteus me funciono excelente.
Saludos y gracias!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #12 en: 12 de Agosto de 2011, 16:54:38 »
...por que en la simulacion en Proteus me funciono excelente.

Ese es el problema, es una simulación  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Francirius

  • PIC10
  • *
  • Mensajes: 32
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #13 en: 23 de Agosto de 2011, 17:09:36 »
...por que en la simulacion en Proteus me funciono excelente.

Ese es el problema, es una simulación  ;-)
Saludos!
Primero que todo gracias por darse el tiempo de ayudarme, finalmente resolvi el problema.
En esta ocasion fui terco y seguro de lo que habia programado le hice unas modificaciones, para asegurar que el el bit CH (clock halt) estuviera activado,
pero lo que yo creo que sucedio fue la protoboard, lo arme en una placa con los componentes soldados, y voila! funciono de maravilla.
Les adjunto el codigo modificado, para el que lo quiera:
Código: [Seleccionar]
#include <16F628.h>
 #fuses INTRC,NOMCLR,NOWDT,NOPUT,NOPROTECT
 #use delay(clock=4000000)
 #use standard_io(A)
 #use i2c(Master,sda=PIN_A1,scl=PIN_A2)
//#include <RTC_DS1307.C>
//Programa para configurar el registro de opcion del rtc, y que comience a parpaderar cada 1 sg.
//La escritura del RTC es como sigue:
//* Primero el uC envia la condicion de START.
//* Luego envia la direccion del rtc en modo escritura (b'11010000' o 0xD0).
//* A continuacion el maestro envia un puntero con la primera direccion del registro a escribir.
//* Despues se transmiten los datos a escribir. La direccion del registro se incrementa automaticamente.
//* Cuando se termina de escribir el uC maestro envia la condicion de STOP.
 void main(){
            //delay_ms(1000);            //Se comienza con un retardo para ver el efecto de la configuracion.
            i2c_start();
            i2c_write(0xD0);                      //Direccion del RTC en modo escritura.
            i2c_write(0x00);                      //Registro de de los segundos, bit 7 es CH.
            i2c_write(0b00000000);           //Se resetea, si CH=0, se activa el reloj.
            i2c_stop();
            i2c_start();
            i2c_write(0xD0);
            i2c_write(0x07);                 //Registro de control.
            i2c_write(0b00010000);     //Palabra para configurar la señal de salida de 1 Hz (SQWE=1, RS1=RS2=0).
            i2c_stop();
 }
Creo que era problema con el reloj...

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: RTC en Proteus funciona, en la vida real no...ayuda
« Respuesta #14 en: 23 de Agosto de 2011, 17:43:10 »
Y seguís sin colocar un while(1); al final  :undecided: Al no colocarlo el micro se resetea, puede que no afecte pero hay que entenderlo  ;-)


Saludos!

No contesto mensajes privados, las consultas en el foro


 

anything