I2C: no se puede leer la temperatura de TC74 con PIC16F887

la pregunta era:

I want to read temperature from TC74 using I2C module of PIC16F887, however, in Proteus
simulation, I see noises in I2C Debugger Tool's output.

Me dijo que tenía una "transición SCL espuria". Cualquier otra información sobre la pregunta, como esquemas, código y captura de pantalla, se puede encontrar en las revisiones anteriores .

El problema se soluciona después de agregar un retraso de 4us después de una condición de reinicio, como se indica en la hoja de datos como:

Tiempo de espera de la condición de ARRANQUE - Min: 4us

Tiempo de configuración de la condición de INICIO (para la condición de INICIO repetida) - Min: 4us

Tiempo de configuración de la condición de PARADA - Min: 4us

Eso significa que siempre debemos leer la hoja de datos detenidamente primero. Supongo que la razón por la que las personas en Internet no tienen ningún error cuando no obedecen esos tiempos de espera es que la velocidad de su reloj es baja y no necesitan retrasar el uC.

El código de trabajo y cualquier otra información de esta publicación se pueden encontrar en las revisiones anteriores . Para ver la versión final de la pregunta antes de esta reducción, simplemente vaya a esta página .

He convertido todo a imágenes incrustadas, probablemente deberías haberlas recortado para nosotros. Acerca de su pregunta, no ha dicho qué ha intentado hacer para solucionarlo. Puede ser de gran ayuda incluir esa información.
No pude hacer nada, hice muchas búsquedas en Google, pero fue inútil, luego volví a verificar mi código con la hoja de datos de PIC, pero tampoco obtuve ningún resultado. Esta es la primera vez que interactúo a través de I2C, por lo que deseo la ayuda de los experimentados aquí.
No hay necesidad de imágenes tan ridículamente grandes. Podrías haberlos recortado y reducido fácilmente antes de publicarlos.
Lo siento por eso, traté de ser lo más abierto posible.
Las imágenes están bien, chicos. Sin embargo, los he recortado. Recuerde: ¡Es mucho mejor que obtengamos mucha información que muy poca! Respondería una docena de preguntas con capturas de pantalla que necesitaban un recorte más ajustado en lugar de una "No funciona, ¿puedes publicar un código que funcione?" pregunta.
@Kevin Vermeer, el código de la publicación parece no tener etiquetas de código
@abdullah - ¡Vaya! Dejé un espacio en mi edición. El código debe tener una sangría de cuatro espacios; tres no funcionarán. ¡Lo lamento!
@Kevin Vermeer - Gracias por su atención en la pregunta :)
El problema puede estar en el modo de recepción. De acuerdo con la hoja de datos, "la recepción del modo maestro se habilita programando el bit de habilitación de recepción, RCEN (registro SSPCON2). El generador de velocidad en baudios comienza a contar, y en cada transferencia, el estado del pin SCL cambia (alto a bajo/bajo- a alto) y los datos se desplazan al SSPSR. Después del flanco descendente del octavo reloj, el bit RCEN se borra automáticamente, el contenido del SSPSR se carga en el SSPBUF, el bit BF se establece, el bit indicador SSPIF se se establece y el generador de velocidad en baudios se suspende del conteo, manteniendo SCL bajo".
Verifiqué, después de esos ocho relojes, RCEN se borra y SCL es bajo y no cuenta, el bit BF está configurado, sin embargo, SSPBUF es 0x00.
Hola de nuevo, recientemente me comuniqué con DS1621 simplemente cambiando las direcciones y los comandos (por supuesto, se introdujeron más comandos debido al cambio en IC). Eso significa que hay un problema al interactuar con TC74, sin embargo, lo que hago es lo mismo que en Internet. Comienzo, envío la dirección con escritura, envío el comando (es decir, 0x00), luego reinicio, luego envío la dirección con lectura, luego leo y luego paro.
@abdullahKahraman, ¿ha intentado construir esto? Siempre existe la posibilidad de que una simulación tenga la culpa.
@Kortuk, no tengo un TC74 IC en la vida real :)
@AbdullahKahraman, parece que los tiempos están cambiando, es hora de uno, a menos que esto sea solo un proyecto o tarea divertido en la escuela. : )
@Kortuk, estoy tratando de crear una biblioteca I2C para uso futuro en mi trabajo. Lo necesitaré ya que mi graduación es nueva :)
¿Alguien tiene chip TC74 y PIC16F887? ¿Aquí está el archivo .hex para que lo pruebes por mí? mediafire.com/file/va31qmjd0p07d5n/I2C.zip
Quiero incluir mi biblioteca final para el compilador "MikroC Pro for PIC". Esta biblioteca es en tiempo real (multitarea). mediafire.com/?twqa31j8aoa29

Respuestas (2)

No sé a qué te refieres con "simulación de Proteus". En cualquier caso, hay algunos problemas obvios en el esquema. En primer lugar, claramente le faltan un montón de conexiones, por lo que no podemos saber qué está realmente conectado. Estás moviendo los pines, por lo que debe haber energía, que no se muestra. Eso deja la pregunta de qué más no se muestra. Y no, no digas que todo está bien conectado y no importa. En una inspección más cercana, el PIC ni siquiera tiene pines de alimentación y tierra en el esquema. Arregle todas estas cosas obvias antes de continuar.

¿Por qué los pullups de 10 kΩ? Esos pueden estar bien para IIC, pero limitarán la velocidad del autobús. ¿Cuál es la frecuencia del reloj IIC?

¿Qué voltaje es Vcc? ¿Cómo se registra el PIC? Si esto es una simulación, ¿qué hace el hardware real? ¿Qué es el bloque "I2C" en la esquina superior derecha del esquema? Si tiene un problema entre un PIC y otro dispositivo, elimine todo lo demás del bus durante la depuración.

Me doy cuenta de que esto probablemente debería haber sido un comentario, pero había demasiado que pedir para caber en un comentario.

Hola, Proteus es un programa de simulación de Labcenter Electronics. Las conexiones que faltan (como MCLR y OSC1) no son necesarias en Proteus, hice muchas simulaciones sin ellas y funcionaron bien. TC74 funciona a 100kHz y mi PIC funciona a 20MHz. He cambiado el valor de las resistencias pull-up y no funcionaba. Ese bloque I2C es una herramienta de depuración en el programa de simulación. No tengo hardware real por ahora, porque no tengo TC74 IC. Gracias por tu respuesta :)
@AbdullahKahraman, ¡agregue información interesante como esta a la pregunta!
@Kortuk, no te preocupes, no lo olvidaré la próxima vez :)

El problema en la pregunta está resuelto y los detalles se pueden encontrar en la publicación misma o en la última publicación antes de la actual. Esta respuesta es solo para marcar esta pregunta como respondida para que no complete la lista de preguntas sin respuesta por nada.