Adaptarle a mi programacion con time real DS12887 a ds1307.

Hola amigos, estuve haciendo un programa para semáforo,en proton, y lo hize con pic 16f877a y con rtc: DS12887, y me funciona de lo mejor, el problema es que ahora quiero hacer funcionar a mi mismo programa pero con tiempo real rtc: DS1307, mi pregunta es como lo adapto? cual son los fuses, haber si me dan una manito amigos. les agradeceré por su respuestas. adjunto mi programación. ...
 

Adjuntos

  • programa.rar
    3.9 KB · Visitas: 41
Última edición:
Hola, he revisado el código, y dijiste que este era para el DS12887, y estaba buscando justamente el protocolo de comunicaciones de este integrado, y por lo que ley en tu código, están diseñados para acceder a cualquier dirección, y me pregunto porque no aprobechaste la memoria NVRAM del RTC, ya que si se apaga el sistema por algún error, y la energía vuelve, los datos estarán guardados en la NVRAM y no se borraran, aunque tu usaste la memoria EEPROM interna del PIC para esto, pero debes considerar que esta tiene un límite de veces que puede ser grabada, además, creo que el PIC16F877 es un PIC muy grande para esta aplicación, opino que podrías haber usado un PIC menor, más barato, aunque tenga menos pines, para evadir ese inconveniente y considerando que todos los pines que necesitas, a parte de los pulsadores, son de salida, puedes controlarlos usando un 74HC374, pero es elección de cada uno. para generar mis programas, uso el Basic del PIC SIMULATOR IDE, y como acotación, debo decirte que este trae soporte nativo para el DS1307, y como separaste los protocolos de comunicación del RTC con el PIC, solo debes reemplazar las llamadas a los protocolos de comunicación por esta instrucción y tu programa estará listo, claro que el resto del lenguaje debes traducirlo, aunque si no quieres usarlo, simplemente has que el PIC SIMULATOR IDE compile las instrucciones nativas del protocolo de comunicaciones y copias el código ASM en las funciones de escritura y lectura de tu código, suponiendo claro está que el lenguaje que uses soporte instrucciones en ASM que seguro que lo hace.

Espero que te sirvan las ideas que te he dado, así como aprovechare el protocolo de comunicaciones que has facilitado, gracias.

Aclaracion: cuando digo soporte nativo del DS1307, me refiero que el PIC SIMULATOR IDE trae instrucciones especiales para el control del protocolo I2C, que es el que usa el RTC que quieres usar.

---------- Actualizado después de 2 horas ----------

mientras adaptaba el codigo al que uso yo, me fije que no configuras nunca el pin CS, por lo que supongo que en tu diseño siempre esta bajo, por lo que el chip esta siempre seleccionado. pero yo necesito controlarlo, por lo que necesito que me indiques donde hay que colocar la instruccion, aqui te dejo el codigo que he adaptado, lo deje todo en 1 sola funcion (asi es mas fasil para mi), tambien necesito saver el tipo de protocolo que es, motorola o intel, porque el DS12887 posee los 2, pero analizando el codigo y comparandolo con los diagramas de tiempo de ambos protocolos, creo que es el motorola, pero aun asi, necesito tu confirmacion...


Código:
Function ds12887(leesescribir12887 As Bit, direccion12887 As Byte, dato12887 As Byte)
'AD_12887=nombre del bus de datos
'DS_12887
'AS_12887
'RW_12887

ds_12887 = 0  'DS=0
as_12887 = 1  'AS=1
Config ad_12887 = Output
ad_12887 = direccion12887  'DIRECCION Q SE VA HA LEER
WaitUs 1
as_12887 = 0  'AS=0

If leerescribir12887 = 1 Then
    Config ad_12887 = Input
    rw_12887 = 1  'RW=1
    ds_12887 = 1  'DS=1
    WaitUs 1
    ds12887 = ad_12887
    ds_12887 = 0  'DS=0
    rw_12887 = 1  'RW=1
Else
    rw_12887 = 0  'RW=0
    ds_12887 = 1  'DS=1
    as_12887 = dato12887  'SE CARGA EL DATO
    ds_12887 = 0  'DS=0
    rw_12887 = 1  'RW=1
   ds12887 = 255  'es solo para devolver algo cuando se lee
Endif

WaitMs 10
End Function
 
Última edición por un moderador:
hola Gonzalocg, estuve viendo tu comentario, y la verdad con tus escritos me da la impresion que puedes darme una manito sobre como empezar traduciendo mi codigo hecho para tiempo real ds12887 a tiempo real ds 1307. Lo que pasa es que en mi lugar aqui Jaen - Peru no hay ese chip ds12887. Har si te animas y me das una manito , te lo agradeceria de antemano .
 
Marvin, yo programo en C, de basic sé poco y nada.

Ahora, si te sirve de ayuda (al menos moral), te digo que lo único que vas a tener que cambiar es el tema de la comunicación entre integrados.

No sé que protocolo usabas para el DS12887, pero me imagino que es distinto al DS1307, que es el I2C.
Una vez que le agarres la mano al I2C (que no es la gran cosa que digamos, hay librerías que simplifican todo en 3 o 4 comandos), ya tenés todo resuelto.
 
Buenas.

Tengo un DS1307 que funciona lento. Lo tengo conectado un cristal de 4MHz a X1 y X2

Una consulta. ¿El DS1307 funciona en tiempo real solo con un cristal de 31.7 MHz? ¿No tiene reloj interno y no funciona correctamente con otras frecuencias de cristal (4MHz,8MHz,20MHz, etc) ???

Gracias
 
Última edición:
El DS1307 funciona con cristal estándar 32.768kHz tiempo real, de donde sacaste Mhz? y no tiene reloj interno...

Para que quieres frecuencias de Mhz si el DS1307, ya no funcionaria en tiempo real... y si está lento es porque no soporta el cristal que pusiste de Mhz cuando vasta con uno de kHz.

Saludos.
 
Es cierto ByAxel, me equivoque y escribí 32.768 MHz. Son KHz..

Le cambie el tamaño del crystal para uno de 32.768 KHz y funciono perfectamente.

Muchas gracias
 
Atrás
Arriba