Autor Tema: Real Time Clock o el DS1307 desatado  (Leído 180852 veces)

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

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Real Time Clock o el DS1307 desatado
« Respuesta #90 en: 24 de Mayo de 2009, 13:14:22 »
hola amigo Crym

no se que le sucede pero llevo unos dias dandole vueltas, y no se porque no me coincide el dia de la semana "lunes", y el mes del año, "mayo".
con la fecha 04/05/2009
Se que los vectores, su primera posición es la 0, pero teóricamente deberia de funcionar.

-------------------------
solucionado era problema del sacar pantalla y del seteo de dow.

Es posible evitar setear dow?, que te lo coja o lo deduzca de la fecha?.

un saludo

« Última modificación: 24 de Mayo de 2009, 13:53:51 por pajaro »

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Real Time Clock o el DS1307 desatado
« Respuesta #91 en: 24 de Mayo de 2009, 14:29:25 »
Es posible evitar setear dow?, que te lo coja o lo deduzca de la fecha?.

un saludo
mm me parece que no, en ds1307 no es capaz de eso. pero si deben existir algunos relojes que hagan eso, creo que son los RTCC (Real Time Clock Calendar) si no me equivoco hay algunos en nxp.com la familia de los PCFxx
.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Real Time Clock o el DS1307 desatado
« Respuesta #92 en: 24 de Mayo de 2009, 17:10:06 »
Hola Crym

y si lo imprementara por la cuenta la "vieja", si el dia DD/MM/YY es DOW=1 para dia DD/MM/YY dow sera X
 que te parece la idea, es por ni ir mirando en que dia de la semana cae.

Un saludo. 

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Real Time Clock o el DS1307 desatado
« Respuesta #93 en: 24 de Mayo de 2009, 18:48:27 »
 :shock: no te entendí la idea
.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Real Time Clock o el DS1307 desatado
« Respuesta #94 en: 24 de Mayo de 2009, 21:39:06 »
Regla de 3?  :shock:

Creo que lo mas sencillo seria implementar el contador de año bisciesto, normalmente para averiguar un dia de los años posteriores hay que ir corriendo uno o dos dias en funcion del año no?
El papel lo aguanta todo

Desconectado Tigretony

  • PIC10
  • *
  • Mensajes: 4
Re: Real Time Clock o el DS1307 desatado
« Respuesta #95 en: 14 de Octubre de 2009, 12:01:35 »
Hola, RedPic.

Yo estoy empezando a utilizar el PIC24F... y bueno necesito agregarle un RTC adicional con bateria para no perder la hora cuando se desenergize el PIC. Y revisando tus aportes me encontre con una libreria para usar un DDS1307 con un pic 18F. Bueno yo estoy empezando a usar el explorer 16 poro que no tengo mucho conocimieto, se que posee un rtcc y hasta con el cristal de 2^15 que se necesita para hacer un segundo completo, pero el problema es si se pierde la energia del PIC.

Mi pregunta: esa libreria se podria utilizar para el PIC24F (claro con sus modificaciones) o si sabes si es posible agregarle una bateria al PIC para que de alguna forma se pueda utilizar el RTC interno?

Muchas gracias




Circuito auxiliar de Reloj en Tiempo Real mediante un DS1307
...  
« Última modificación: 14 de Octubre de 2009, 16:33:02 por un Moderador »

Desconectado Tigretony

  • PIC10
  • *
  • Mensajes: 4
Re: Real Time Clock o el DS1307 desatado
« Respuesta #96 en: 14 de Octubre de 2009, 23:24:15 »
Hola, RedPic.

Yo estoy empezando a utilizar el PIC24F... y bueno necesito agregarle un RTC adicional con bateria para no perder la hora cuando se desenergize el PIC. Y revisando tus aportes me encontre con una libreria para usar un DDS1307 con un pic 18F. Bueno yo estoy empezando a usar el explorer 16 poro que no tengo mucho conocimieto, se que posee un rtcc y hasta con el cristal de 2^15 que se necesita para hacer un segundo completo, pero el problema es si se pierde la energia del PIC.

Mi pregunta: esa libreria se podria utilizar para el PIC24F (claro con sus modificaciones) o si sabes si es posible agregarle una bateria al PIC para que de alguna forma se pueda utilizar el RTC interno?

Muchas gracias



Circuito auxiliar de Reloj en Tiempo Real mediante un DS1307
 
Descripción:

Nuestros PIC's no saben en qué día y hora viven. Perdidos en el no-tiempo, la realidad analógica o digital es un continuo donde las fracciones de tiempo superior a algunos milisegundos son entes abstractos e inasibles. Anclados en patrones de frecuencia decimales que no son divisibles por sus primos binarios, esclavos del redondeo, siempre les sobran o les faltan unos microsegundos para dar el Segundo Perfecto. Como Reloj en Tiempo Real un PIC abandonado a su cuarzo y a sus divisores, preescalers y postescalers, simplemente no da la talla.
 
Y ahí es donde entran los amables señores de Dallas Maxim y su cucaracha octópoda clockeadora: el DS1307, intitulada por ellos mismos como un "64 x 8, Serial, I2C Real-Time Clock" O sea un corazón de reloj con alguna RAM adicional (no volátil ya que es asistida por una batería de Litio que la mantiene a flote mientras no le falte el fuelle de los voltios).
 
Este proyecto consiste esencialmente en poner en santa compaña a nuestro PIC con su Reloj colgando del BUS RRBOARD2 (compatible), aprovechando que ambos hablan en I2C, por lo que es de esperar que no tengamos grandes problemas para llevarlo a buen puerto.
 
Para este proyecto he tirado, además de la información pertinente ofrecida por los amables señores de Dallas Maxim de las siguientes fuentes de información:

El buscador del Foro Todopic poniendo DS1307 en la casilla de búsqueda oportuna. (Algunos cientos de referencias pacientemente leídas y digeridas).

El artículo Another DS1307 Driver publicado en el Foro oficial de CCS C, cuya paternidad corresponde a  un tal Phil, basado según dice él mismo en el trabajo de un tal Tullos.

El articulo DS1307 RTC and 24LC256 EEPROM on the same i2c bus problem publicado en el mismo foro que el anterior pero esta vez realizado por unos tales Birumher y Highwind en un mano a mano digno de un buen par de toreros.

Y por último el artículo DS1307 routines que para no ser menos también procede del Foro CCS C y de donde he sacado la idea de habilitar y/o deshabilitar las interrupciones.

Todo esto adobado por supuesto con San Google Bendito donde escribiendo PIC y DS1307 aparece mas información de la que estoy dispuesto a digerir.
 
Entre esta información y mi propio jugo de cerebro, destilado en estos últimos días, tengo el gusto de presentaros completo este pequeño ejercicio de integración temporal de un PIC y sus circunstancias.
 
Implementación:
 
La implementación consiste en posibilitar la comunicación I2C entre la RRBOARD2 y el DS1307 y explicar lo fundamental de este chip, mostrándoos a continuación qué podemos hacer con él y qué no (visto desde el punto de vista de dentro de un PIC claro está, ya que es de cajón y no pienso comentar por ejemplo que tragarse un DS1307 sin quitarle las puntiagudas patillas puede ser incompatible con la vida, tal y como la conocemos).
 
No pienso repetir palabra por palabra, como un vulgar loro de bar portuario, lo que ya dice de forma meridianamente clara el Datasheet del DS1307, así que tras poneros el Diagrama de Bloques del mismo (extraído de dicho datasheet) paso a comentar algunas circunstancias interesantes a tener en cuenta.
 

 
1º.- El cristal de cuarzo ha de ser de 32.768 Khz Arcano designio que tiene que ver con que 2^15 = 32.768 por lo que esa frecuencia es divisible de forma exacta binariamente para generar 1000, o sea nuestro segundo perfecto.
 
2º.- La alimentación es doble. Por un lado el VCC de nuestro circuito normal, el del PIC, y por otro una Batería de Litio que va a permitir que el reloj siga su normal funcionamiento aún cuando apaguemos el PIC. (Esta batería sirve también para mantener viva la NVRAM adicional de que disponemos) El mismo DS1307 se encarga de realizar la conmutación entre una y otra por lo que no tenemos que tener en cuenta esta circunstancia y podemos olvidarnos de ella (salvo la de cambiar la pila cuando se agote)
 

 
3º.- El DS1307 tiene un pin de salida que debidamente habilitado nos ofrece una onda cuadrada con las frecuencias que puedes ver en la tabla superior. Esta salida es a colector abierto por lo que es necesario, si la queremos utilizar para inyectarla en cualquier otro circuito, colocarle una resistencia pull-up de unos 10 Kohm a VCC.

Ten en cuenta que si nuestro DS1307 va a pasar grandes periodos de tiempo alimentándose solo de la batería el tener esta opción de salida habilitada consume cientos de veces mas intensidad que sin ella por lo que podemos dejar la batería tiesa en muy poco tiempo. Si no es necesario es preferible deshabilitar esta opción (mas adelante veremos cómo hacerlo).
 

 
4º.- En la tabla superior podéis ver la estructura de la NVRAM, donde se mezclan tanto los registros de configuración, como los de salvaguarda de la fecha y hora del dispositivo, como asimismo los bancos de RAM de libre disposición para el usuario.

En esta tabla tener en cuenta que el Bit 7 de la dirección 0x00 hay que colocarla a 0 para que todo funcione. Es el Enable general del dispositivo.
 

 
5º.- El byte alojado en la dirección 0x07 es el Control Register que nos permite configurar la función del pin de salida según los siguientes condicionantes:

El bit 4, SQWE, habilita o deshabilita la función de salida externa del pin Out.

El bit 7, OUT, establece el estado del pin de salida cuando SQWE está deshabilitado. Si OUT es 1 y SQWE es 0 entonces el pin de salida está en alto indefinidamente, si OUT es 0 y SQWE es 0 entonces el pin de salida está por el contrario en bajo indefinidamente.

Los bits 0 y 1 sirven para seleccionar la frecuencia de salida cuando SQWE está en alto según la tabla expuesta en 2º.

Esquema: 

Este el circuito propuesto por el fabricante como típico para su buen funcionamiento. Es el que vamos a implementar exactamente hasta el último detalle.
 

 
Del pinout nada que añadir:


 
Y este es el esquema definitivo que vamos a construir, en el que podemos destacar algunos detalles:
 
1º.- La comunicación con la RRBOARD2 la realizamos mediante nuestro buen amigo el conector CON-ML10 para cable plano de 10 hilos (alimentación y un puerto completo de 8 bits)
 
2º.- JP1-PB y JP3-PC permiten seleccionar la conexión de los SDA y SCL del I2C a los pines 0..1 ó 3..4 del puerto al que estén conectados (recordad de la RRBOARD2 está diseñada para las familias 18F4550 y 16F877 y el I2C lo implementa la primera en los pines RB0 y RB1 y la segunda en los RC3 y RC4) 
 
3º.- JP2-OUT Permite conectar o desconectar el pin Out del DS1307 al pin Rx3 del puerto de la RRBOARD2 (Muy útil para usarlo con la Interrupción Externa 2 del 18F4550)
 
4º.- Dependiendo de dónde conectemos nuestro circuito en la RRBOARD2 podemos necesitar o no las resistencias Pull-Up imprescindibles para el bus I2C. Si lo conectamos al PORTB tenemos disponibles la internas del PIC, en cualquier otro caso podemos hacer uso del jumper JP3-PU para conectar dichas resistencias Pull-Up a VCC.
 
5º.- Añadimos ademas el jumper OUT para poder utilizar externamente la señal de onda cuadrada del pin Out del DS1307.
 
 

Circuito impreso:
 


Fotografías:
 
Y aquí el muchacho en plenitud de facultades:
 
 



Funcionando con el software de Test:
 
 

Recursos:
 
Descargar Datasheet del

DS1307 (PDF 875 Kb)
 
Descargar Librería Driver para CCS C DS1307
 
Descargar Programa de Test rtc.c
 
Descargar Esquema y PCB para Eagle

 :mrgreen:  :-/  :mrgreen:



Desconectado PICPOWER

  • PIC10
  • *
  • Mensajes: 17
Re: Real Time Clock o el DS1307 desatado
« Respuesta #97 en: 16 de Noviembre de 2009, 16:42:01 »
Saludos PICmaniacos. Antes que nada, agradecer el posteo de esta librería. Luego, comentarles que tengo problemas con la misma. No la he modificado y he seguido el diagrama de conexión. Todo perfecto en apariencia, PROTEUS muestra que no hay ningún problema en el circuito, como lo de todos ustedes la simulación perfecta. Pero ya en la realidad, tengo problemas al reiniciar el sistema. Pues resulta que cuando configuro por primera vez, todo es perfecto, la fecha va como debe de ir. Pero al momento de apagar el micro, para quitarle la línea de programar al RTC, cuando lee la fecha, marca 00/11/09, es decir, el día del mes no lo muestra correctamente. Cuando lo prendí por primera vez, mostraba la fecha correctemente y es la que sacaba del DS1307, un instante después de haberla configurado, pues deduzco que el circuito pierde la fecha cuando lo apago o bien, que ésta es mal leída después de reiniciar el circuito.

El circuito lo tiene mi cliente, le comenté que el problema era que el DS1307 se había quemado y que por eso no le iba a mostrar la fecha de momento, pero siendo franco, dudo que se haya quemado. ¿A alguien le ha pasado este problema? El DS1307 funciona con su pila de respaldo, nunca pierde la hora ni la fecha (salvo el día que les comento). Uso un cristal de 20 MHz (he estado pensando que éste podría ser mi problema, o bien cambiar la velocidad del I2c a fast=10000). De ahí en fuera, la librería es tal cual está posteada y uso las funciones tal cual son descritas, para mostrar cada dato en el LCD uso %02u.

Agradecería cualquier ayuda o comentario al respecto, especialmente si es acerca de la velocidad, que no la veo declarada en la librería posteada. En cuanto tenga el circuito en mi mano, mi primer idea es probar con fast=10000, es decir, manejar una velocidad de bus I2c lenta.

Bytes...

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Real Time Clock o el DS1307 desatado
« Respuesta #98 en: 17 de Noviembre de 2009, 15:29:52 »
No, Picpower, no he tenido ese problema.

Hemos montado 600 placas con él y hasta ahora solo he tenido problemas dos o tres veces en que me ha costado ponerlo en hora la primera vez, he necesitado mandarle la fecha dos o tres veces seguidas hasta que la pilla, pero a partir de ahí siempre han funcionado correctamente.

No se qué puede pasarle al tuyo. Lo siento.  :shock:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Real Time Clock o el DS1307 desatado
« Respuesta #99 en: 19 de Noviembre de 2009, 00:04:07 »
 :shock: :shock:

2 o 3 veces?  :? a mi no me ha dado lio alguno ... si que esta raro  :shock:

Y por que no pruebas asignar la funcion de configuracion del reloj con un pulsador?

Código: [Seleccionar]
if(state(PULSADOR))
// configuro el reloj
else
// no pasa nada

De esa manera no tienes que estar sacando el PIC para volver a programar etc.

Saludos
El papel lo aguanta todo

Desconectado Drod

  • PIC16
  • ***
  • Mensajes: 136
Re: Real Time Clock o el DS1307 desatado
« Respuesta #100 en: 20 de Noviembre de 2009, 14:23:51 »
Hola foreros!

Este es el codigo em PICBASIC PRO, no es necesário drivers, etc
Para quien tiene dificultad con el C, el PIC BASIC PRO es una buena solución, porque é MUY, pero MUUUUY facil   :lol:

Código: [Seleccionar]
' Programa PICBASIC PRO Relógio LCD usando Dallas DS1307 I2C RTC 
' Define LOADER_USED para usar Boot Loader

Define LOADER_USED 1   
INCLUDE  "modedefs.bas"



trisc = %00000000
Define OSC 20      

Define  LCD_DREG        PORTB   'Define conexões LCD
Define  LCD_DBIT        4
Define  LCD_RSREG       PORTB
Define  LCD_RSBIT       0
Define  LCD_EREG        PORTB
Define  LCD_EBIT        1

'Pinos:
'SDA Var PORTC.4
'SCL Var PORTC.3

' Define Variáveis
RTCYear Var Byte
RTCMonth Var Byte
RTCDate Var Byte
RTCDay Var Byte
RTCHour Var Byte
RTCMin Var Byte
RTCSec Var Byte
RTCCtrl Var Byte

DIA var WORD


Pause 100

'Aqui configura-se os dados iniciais, por exemplo: 20/11/09   14:27:00   

        RTCYear = $09
RTCMonth = $11
RTCDate = $20
RTCDay = $05
RTCHour = $14
RTCMin = $27
RTCSec = 0
RTCCtrl = 0

Gosub settime ' Set the time
   
    goto loop ' Skip over subroutines


' Subrotina para escrever dados no RTC
settime:

    I2CWrite PORTC.4, PORTC.3, $D0, $00, [RTCSec, RTCMin, RTCHour, RTCDay, RTCDate, RTCMonth, RTCYear, RTCCtrl]
Return

' Subrotina para escrever ler dados do RTC
gettime:

    I2CRead  PORTC.4, PORTC.3, $D0, $00, [RTCSec, RTCMin, RTCHour, RTCDay, RTCDate, RTCMonth, RTCYear, RTCCtrl]
Return

' Loop Principal
loop:

    Gosub gettime ' Lê os dados do RTC

    ' Mostra no LCD       
                                 
    select case RTCDay
   
    case $01     
       
Lcdout $fe, 1, hex2 RTCDate, "/", hex2 RTCMonth, "/" , hex2 RTCYear, " ", " Lunes"

case $02

lcdout $fe, 1, hex2 RTCDate, "/", hex2 RTCMonth, "/" , hex2 RTCYear, " ", " Martes"

case $03

lcdout $fe, 1, hex2 RTCDate, "/", hex2 RTCMonth, "/" , hex2 RTCYear, " ", "Miercoles"

case $04

Lcdout $fe, 1, hex2 RTCDate, "/", hex2 RTCMonth, "/" , hex2 RTCYear, " ", "Jueves"

case $05

Lcdout $fe, 1, hex2 RTCDate, "/", hex2 RTCMonth, "/" , hex2 RTCYear, " ", "Viernes"

case $06

Lcdout $fe, 1, hex2 RTCDate, "/", hex2 RTCMonth, "/" , hex2 RTCYear, " ", "Sabado"

case $07

Lcdout $fe, 1, hex2 RTCDate, "/", hex2 RTCMonth, "/" , hex2 RTCYear, " ", " Domingo"

End select

        LCDOUT $FE,$C0,hex2 RTCHour, ":", hex2 RTCMin, ":", hex2 RTCSec

Pause 500 ' O faz 2 vezes por segundo

Goto loop ' Loop Infinito

        End


Desconectado jdem

  • PIC10
  • *
  • Mensajes: 1
Re: Real Time Clock o el DS1307 desatado
« Respuesta #101 en: 28 de Noviembre de 2009, 14:48:23 »
Soy nuevo en el foro, recién me registré así que les pido disculpas si cometo alguna imprudencia. Escribo porque quieisera saber si hay alguna manera de comparar las fechas y horas obtenidas del RTC, es decir si hago un get_time hoy y otro get_time mañana poder distinguir cuál de los dos es menor, e incluso saber el tiempo transcurrido entre uno y otro. Gracias.

PD: Trabajo con PIC C

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Real Time Clock o el DS1307 desatado
« Respuesta #102 en: 28 de Noviembre de 2009, 15:06:07 »
claro que hay forma, tendrás que programar esas funciones que te den esos esos datos que necesitas
.

Desconectado JOJOJORGE5

  • PIC16
  • ***
  • Mensajes: 167
Re: Real Time Clock o el DS1307 desatado
« Respuesta #103 en: 06 de Diciembre de 2009, 12:25:32 »
Hola

Hoy acabo de matar mi primer RTC. Al parecer se movió un cable del protoboard y fue a parar donde no debía :5] y creo que el que me compre era el ultimo.
Ahora falta saber si se quemaron las patas del PIC o el RTC.
Pero antes de morir funciono de maravilla.

Yo lo programe en ASM para el 16f877a basándome en rutinas dejadas en este mismo foro.
así que a tener cuidado con los cables sobre todo con los de clk ysda.


salu2:)

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Real Time Clock o el DS1307 desatado
« Respuesta #104 en: 06 de Diciembre de 2009, 13:22:02 »
uuf que mala noticia JOJOJORGE5, esperemos que no le haya pasado nada al RTC que son un poco difíciles de conseguir, al menos por acá
.


 

anything