Mi tablero funciona de manera intermitente ... cuando corto algunos pines

0

Estoy tratando de hacer funcionar un bus I2C. Estoy usando un micro PIC24FJ32GA002. Por el momento no está conectado a ningún otro dispositivo. No funciona Luego corro un destornillador a lo largo de los pines de la MCU y comienza a funcionar. Apaga y no funciona, sigue el mismo truco con el destornillador y comienza a funcionar. Lo más confuso es que no necesito sostener el destornillador allí; simplemente pasarlo por los pines una o dos veces es suficiente para que funcione.

El software es básico, solo un bucle infinito que envía datos I2C. ¿Qué podría estar mal? Está en un tablero. Estoy empezando a sospechar que hay una conexión defectuosa, pero ¿qué pasa con una placa de pruebas que haría que dejara de funcionar después de reiniciar la alimentación?

    
pregunta Thomas O

5 respuestas

4

¡Ah! Creo que lo arreglé!

Y aprendí algunas cosas sobre mi MCU en el proceso.

I2C no funciona correctamente debido a una chip errata . Punto 10.

Module: I2C™ (I2C1, SDA Line State)

When using I2C1, the SDA1 line state may not be
detected properly unless it is first held low for
150 ns after enabling the I2C module.

In Master mode, this error may cause a bus collision
to occur instead of a Start bit transmission.
Transmissions after the SDA1 pin has been held
low will occur correctly.

In Slave mode, the device may not Acknowledge
the first packet sent after enabling the I2C module.
In this case, it will return a NACK instead of an
ACK. The device will correctly respond to packets
after detecting a low level on the line for 150 ns.

The I2C2 module operates as expected and does
not exhibit this issue.

Esto explica por qué funciona el truco del destornillador. Estaba cortocircuitando SDA a Vss cuando pasé el destornillador a lo largo de los pines, lo que permitió que el módulo se iniciara correctamente. Solo afecta al silicio A3 / A4.

    
respondido por el Thomas O
3

Aquí hay una lista de verificación: útil para cualquier persona con este tipo de problema.

  • ¿Tienes pullups en tus dos líneas I2C?

En un bus I2C, tanto el reloj como las líneas de datos flotan, por lo que pueden ser manejados por cualquier dispositivo en la cadena. Un bus I2C necesita 2 resistencias pullup.

  • ¿Ha revisado sus señales de I2C en un osciloscopio?

¿Están limpios los bordes? ¿Son correctos los tiempos?

  • ¿Está conectado correctamente tu microcontrolador?

¿El reinicio está vinculado? ¿Están todos los pines de alimentación y tierra conectados?

  • ¿Tiene suficientes tapas de bypass?

¿Está limpia su fuente de alimentación?

  • ¿Su I2C se está ejecutando a una velocidad razonable?

Breadboards y señales de alta velocidad no se mezclan.

    
respondido por el Toby Jaffey
2

Es posible que PIC24 no funcione correctamente en una placa de pruebas. El buen desacoplamiento de todos los pines de suministro es esencial con los PIC de 16 bits, lo que sería difícil de lograr.

    
respondido por el Leon Heller
2
  

A continuación, paso un destornillador a lo largo de los pines de la MCU y comienza a funcionar.

¿Quiere decir que la parte I2C comienza a funcionar, o la MCU? Encienda un LED durante el inicio para mostrar si el microcontrolador está funcionando o no.

Suponiendo que no esté cortocircuitando las clavijas adyacentes, entonces el destornillador probablemente esté introduciendo una pequeña capacitancia cuando toque las clavijas. Esto puede estar estabilizando la fuente del oscilador lo suficiente para permitir que la MCU se inicie.

Si está usando un oscilador de cristal externo, asegúrese de tener conectados los capacitores de carga apropiados (generalmente en el orden de 20pF). A veces funcionará sin las tapas (especialmente en placas de pruebas que introducen una pequeña capacitancia), pero no lo recomendaría.

    
respondido por el Peter Gibson
1

¿Todos los pines VDD y VSS están correctamente conectados, incluido VDDCORE? ENVREG atado alto o bajo? MCLR se detuvo?

    
respondido por el tcrosley

Lea otras preguntas en las etiquetas