Extraño comportamiento del PIC18F14K50 EUSART. solo funciona cuando la sonda del analizador lógico está conectada

Estoy usando un PIC18F14K50 y un transceptor de bus RS485 ( ADM3485 ) para comunicarme con una red de sensores Modbus RTU. la PCB no está diseñada por mí (y tiene un diseño muy tonto/compacto, por lo que es muy difícil de depurar o sondear) y parece problemático. aparte de eso, el PIC18F14K50 no tiene capacidad de depuración por sí solo.

El problema es que mientras el analizador lógico está conectado para monitorear las señales RS485, el dispositivo funciona bien, pero cuando desconecto las sondas, no lo hace.

Algunas pistas:

  • el paquete UART, cuando las sondas están conectadas, es correcto. todo funciona como se esperaba.ingrese la descripción de la imagen aquí
  • dejar la tierra del analizador lógico o desconectarlo (después de desconectar las sondas) no cambiará nada. así que supongo que las sondas mismas hacen que el sistema funcione de alguna manera.
  • las simulaciones en software, funcionan perfectamente.
  • los otros dispositivos de la red funcionan bien y se encuentran solos. también son de la familia PIC18.
  • la longitud del cable trenzado es inferior a 1 m (estoy trabajando en mi banco) y hay resistencias de terminación de 120R y 150R en ambos extremos. hay resistencias pull-up/pull-down de 1K para las líneas RS485.
  • los microcontroladores en el bus, usan la misma biblioteca de software uart. sin embargo, la única diferencia para el DUT (el problemático PIC18F14K50 del que estoy hablando) es que el pin RX del EUSART está multiplexado con ADC. Antes tuve problemas con los pines analógicos del PIC18, cuando se usaban como entradas.

La parte del esquema proporcionada por el diseñador:

ingrese la descripción de la imagen aquí

La biblioteca uart establece el IO de esta manera:

ANSELHbits.ANS11  = 0; //disable the analog input on RX
void uart_init(uint32_t sysCLK, uint32_t baudRate)
{
  uint16_t baudTemp = (sysCLK/(64*baudRate))-1;
  SPBRGH1_REG  = (uint8_t)(baudTemp>>8);
  SPBRG1_REG   = (uint8_t)(baudTemp);
  TXSTA1bits.SYNC    = 0;
  RX1_INPUT;

  DISABLE_ANSEL_RX1;

  TXSTA1bits.TXEN      = 1;
  RCSTA1bits.CREN      = 1;
  RCSTA1bits.SPEN      = 1;
}
¿Dónde exactamente está conectado el analizador lógico cuando funciona? ¿En el lado PIC del transceptor o en el lado RS485? ¿No es un problema cuando el PIC usa 3.3V y el transceptor usa 5V?
No diré que este es el problema, pero una circunstancia muy sospechosa es que U2 es una parte de 3.3V que sale de un riel de 5V. No está clasificado para funcionar con 5 V, por lo que hay muy pocas posibilidades de que tenga entradas diseñadas para funcionar con un dispositivo alimentado por 3,3 V. Probablemente apenas no funcione sin el analizador lógico conectado, y apenas se aferre a la funcionalidad. Si puede modificar la placa, le sugiero que encienda U2 desde 3,3 V e informe cómo funcionan las cosas.
¿Por qué está ejecutando su ADM3485 en un riel de 5V? ¡Solo está clasificado para una operación máxima de 3.6 V, e incluso tiene un riel de 3.3 V que está usando para el PIC!
@brhans sí, parece que es el problema. a pesar de que la hoja de datos menciona una calificación máxima absoluta de 7v.
@TimWescott ¿Puedo cambiarlo a una versión de 5V, por ejemplo, MAX485? el MAX485V es una versión de 5V, y el voltaje de entrada mínimo HI del chip es de 2V. entonces funcionaría con un nivel de 3.3V del PIC. pero no sé si el RX (que es de 5V debido al suministro MAX)
¡Las 'Calificaciones máximas absolutas' de cualquier parámetro en la hoja de datos de cualquier IC no es una especificación operativa ! Lea el párrafo de texto justo al lado de esas clasificaciones y encontrará "Esta es solo una clasificación de estrés; la operación funcional del dispositivo en estas o cualquier otra condición por encima de las indicadas en la sección operativa de esta especificación no está implícita". Lo que esas clasificaciones le dicen es que el IC probablemente no morirá y dejará que toda su magia se escape si está expuesto a esas condiciones, no es que realmente funcione.
Parece que el PIC no tolera voltajes superiores a VDD. Así que... no.

Respuestas (1)

Suena como un problema de voltaje de modo común, a menos que algo haya salido mal con la terminación.
Cablee las conexiones a tierra de los nodos conectados, luego intente sin 120R y 150R, a menos de 1 m de distancia.