El circuito solo funciona cuando se conecta la sonda de oScope

1

Estoy trabajando en un circuito con un PIC Mcu y una pantalla LCD en una placa de pruebas. El PIC se comunica con la pantalla a través de I2C. Por alguna razón, solo puedo hacer que la comunicación funcione correctamente cuando mi sonda oScope está conectada a la línea SDA de la interfaz I2C. Sé que la comunicación está funcionando porque la pantalla muestra mi texto. Si quito la sonda y luego reinicio el firmware, la pantalla se queda en blanco. ¿Alguna idea de lo que está pasando aquí? Estoy usando resistores de extracción de 4.7k tanto en los datos como en las líneas de reloj del I2C según lo recomendado por el manual PIC. También intenté cambiar las resistencias con 1k y 10k, pero eso no pareció ayudar. Además, no importa si el clip de conexión a tierra de mi sonda está conectado a la conexión a tierra de la PCB (así que no creo que sea un problema de conexión a tierra). Alguna idea de lo que está pasando aquí? Sé que realmente debería hacer una PCB real, pero primero quería demostrar que el diseño era bueno en el tablero.

    
pregunta PICyourBrain

5 respuestas

6

No ha dicho qué PIC está utilizando, pero ha habido al menos dos errores confirmados en el modo IIC de algunos de los MSSP. Uno de ellos tuvo algo que ver con muestrear el bit ACK en el borde equivocado del reloj. Los errores que conozco fueron hace bastante tiempo, por lo que probablemente se han corregido en PIC más nuevos. Sin embargo, tiendo a usar toda la implementación de firmware de IIC en modo maestro. Necesita el hardware para implementar un esclavo, pero en el modo maestro posee el reloj, por lo que es fácil.

La sonda de alcance está agregando un poco de capacitancia a la línea SDA, lo que ralentiza y retrasa ligeramente los bordes. Es probable que algo no esté bien, ya que hay una condición de raza en algún lugar. El borde más lento o retrasado de SDA aparentemente lo hace funcionar. Intente poner un límite de 22-47pF en la línea y ver si eso parece hacer que siempre funcione. No quisiera enviarlo de esa manera sin conocer la causa y entender que es una solución confiable.

Otra posibilidad es que el ruido llegue a la línea desde otras partes del sistema. En ese caso, la tapa a tierra hace que la línea tenga una impedancia un poco menor, lo que atenúa el ruido un poco. Si es ruido, entonces agregar una tapa a SCL estará bien. Si hay una condición de carrera en algún lugar, agregar un límite a SCL probablemente lo empeorará.

A lo largo de los años he visto demasiados problemas con el IIC, por lo que ahora uso una implementación solo de firmware siempre que sea posible. En el firmware, puedo garantizar que nunca ocurran dos cosas en un solo borde.

    
respondido por el Olin Lathrop
2

Cada sonda de alcance tiene alguna capacitancia inherente a ella. I2C tiene una especificación para la capacidad de bus máxima permitida ( 400 pF ). La adición de la sonda de alcance (y su capacidad a GND) a su trazado puede hacer que su circuito caiga más cerca de un "punto dulce" que el IC está buscando dentro de la capacidad especificada. Lea la sonda de alcance, la mayoría de ellos usualmente enumeran su capacitancia. Luego, coloque un condensador a GND de la misma (lo más similar posible) en la línea SDA y encienda su circuito sin la sonda conectada, y vea si eso lo corrige.

    
respondido por el Joel B
0

Si no tiene una buena conexión a tierra entre la pantalla y su microcontrolador, la pinza de conexión a tierra de la sonda puede proporcionarle una conexión a tierra "suficientemente buena" para permitir que I2C funcione.

Descubrí que no se puede programar un PIC utilizando un PICkit 2 a menos que conecte la tierra y el Vdd al chip (¡yo era joven!) pero que cuando se conectó la tierra del alcance, se conectó a tierra al pin de tierra al que se conectó. el conector a tierra de mi computadora portátil, que pasó por una tapa clase Y para unir la conexión a tierra de la PSU, conectando la conexión a tierra de USB. Descubrí que incluso con esta configuración a menudo recibía errores de programación, porque era una ruta muy ruidosa. Pero solo funcionó, mucho mejor que nada.

    
respondido por el Thomas O
0

¿Qué carga es el alcance / sonda establecido para 1Mohm? 50ohm? asegúrese de que no esté en la configuración de ohmios bajos.

¿Eres el maestro i2c o esclavo? Una forma de depurarlo podría ser muestrear la entrada y repetirla con otro pin de E / S que no esté utilizando, luego sondearlo con el alcance. El controlador no es tan rápido, pero puede tener una idea de lo que realmente está viendo el núcleo del procesador cuando muestrea esa entrada.

    
respondido por el old_timer
0

Tuve un problema con UART a temperatura fría donde la sonda lo corrigió cuando tocaba la línea de control de flujo. En pocas palabras, fue porque el software no estaba configurando correctamente la configuración del pin en un BAJO, era básicamente un debilitamiento hacia abajo. A bajas temperaturas, la corriente de fuga se reduce y el debilitamiento débil se parece más a un circuito abierto. Esto es malo porque los tiempos de caída se verán afectados y también podrían captar todo tipo de ruidos y conversaciones cruzadas. No hay forma de ver lo que está pasando porque los instrumentos de medición afectan el resultado. Agregar una resistencia de 1 Mohm ayudó a tirar de la línea BAJA. Puede intentar el mismo método de solución de problemas soldando un 1M a GND, y ver si eso lo corrige, luego verifique el pin muxing en el software.

    
respondido por el Sajeev Ranasinghe

Lea otras preguntas en las etiquetas