Problema en lectura de registros con PCF8583

Vereis, tengo un pequeño problema al intentar leer los registros del RTC PCF8583. En mi proyecto uso el PIC16f876, y logro comunicar con el esclavo, pero no logro nada como respuesta. Intento visualizar el registro (y aun que ya sé que solo unos cuantos bits me serán útiles para información) entiendo que el valor del registro deberia ir cambiando, y cada vez que lo leo, me da el mismo valor...incluso si previamente he escrito en él.
Pienso que debe tratarse de un problema de configuración del registro de control del RTC, pero no lo hallo. Si alguien pudiera hecharme un cable, le estaria inmensamente agradecido. Adjunto programación y esquematico.

Kalamarus
 

Adjuntos

  • I2C.txt
    4.8 KB · Visitas: 21
  • Despertador.pdf
    22.2 KB · Visitas: 42
Hola, No he mirado el codigo, pero no has probado de subir el valor de las R1 y R2 a 10k o a 4k7
 
bueno ricber, he probado lo que me has comentado, pero sigue sin funcionar. La verdad es que estoy casi convencido que es un problema de configuración, pero no logro saber donde...he seguido todos los pasos de configuración según el datasheet, tanto del RTC como del PIC...así que no sé que puede ser. He visto en algun otro foro, que asignan valores aleatorios a los registros de configuración del PCF8583 desde el 0x00 hasta el 0x07, justo al iniciarlo, detienen el contador del reloj, cargan estos valores, y luego reinician el contador. No he logrado entender para que, pues no dice nada de ellos en el datasheet (de los valores), aunque entiendo, que esos bits, que configuran en estos registros deben ser los bits de configuración del contador...tales como 12/24H, dias de la semana, etc etc...etc...

Bueno no sé...lo que entiendo al leer el datasheet, es que en teoria, configurando el registro 0x00 del pcf...con el byte 0x00 (todo reseteado), el contador deberia contar, con lo que los demas registros (configurados o no) deberian variar....cosa que a mi no me sucede....entonces, no sé si el problema, es de mala configuración del PIC (I2C) o del Timer. A mi parecer, esta todo bien...(aunque esta claro que no) y no logro vislumbrar donde esta fallando. Es la primera vez que uso el protocolo I2C, y por eso solicito ayuda al foro, por si alguien con experiencia en este protocolo pudiera hecharme un cable.


Eternamente Agradecido
 
Disculpa mi pregunta...pero he leído acerca del acknowledgement y de su bit de control y su flag de estado...pero...como se hace el no-acknowledgement? enviando directamente la condicion stop??
Uso Hi-tech C para MPLAB.

Muchas gracias por ambas respuestas :)
 
como se hace el no-acknowledgement? enviando directamente la condicion stop??
Uso Hi-tech C para MPLAB.

Muchas gracias por ambas respuestas :)

Hola, la condicion de no-acknowledgement es lo que le indica al esclavo que se recibio correctamente un dato, y no se genera con la condicion de stop, tendras que buscar como funciona dicha condicion para el compilador que usas, te sugiero que busques ejemplos.
 
Hola, en la imagen te muestra como es el formato de comunicacion, creo que te falta esperar la respuesta del esclavo antes de mandar un stop.
 

Adjuntos

  • i2c.bmp
    26.3 KB · Visitas: 25
Buenas a todos. Después de unas semanas algo duras, por fin he podido dedicarme de nuevo a mi proyecto, y he logrado entender algunos conceptos gracias a las informaciones de ricber y 1024, aún así, sigo sin lograr leer los registros del PCF8583.

Cuando realizo los pasos del procedimiento que me ha enviado ricber, me he fijado que al llamar al RCT, no recibo acknowledgement del esclavo, por que puede ser?

En el datasheet del PCF8583 hay otro procedimiento de lectura, que es el que uso, que permite llamar a un determinado registro y leerlo siguiendo los siguientes pasos:
1º, condicion start
2º, llamo al esclavo en escritura
3º, envio la posición de memoria que quiero leer
4º, envio repeated start
5º, llamo al esclavo en lectura
6º, activo el bit RCEN (Convierto al PIC en maestro receptor)
7º, espero a que el flag BF se ponga a 1
8º, Leo el buffer en una variable
9º, envio NoACK
10º condición Stop

En teoria, es eso lo que me dice el datasheet, sin embargo, lea la posición de memoria que lea, solo recibo un 0 como respuesta, y no importa cuantas veces lo haga o durante cuanto tiempo.
y no me permite hacerlo con más de un registro a la vez, pues al hacerlo asi y simularlo en proteus, es como si se "colgase" el puerto I2C que queda en IDLE.

El esquema es el mismo que tengo colgado en el primer post. Adjunto programa modificado a ver si alguien puede hecharme un cable.

Agradecido de antemano!!
 

Adjuntos

  • I2C.txt
    7.6 KB · Visitas: 6
Hola, has comprobado que el oscilador esta trabajando, veo que en el circuito pones un cap de 22nf a Vss desde el pin 1, cuando segun he visto lleva un capacitor de 33pf o un ajustable de alrededor de esos valores conectado al Vdd.
 
Atrás
Arriba