PIC24FJ128GA202 algunos pines del PortB de E / S no se comportan correctamente

2

Estoy trabajando en un pequeño proyecto usando un PIC24FJ128GA202, y noté que mi UART no funcionaba con todos los pines RP. Corrí el siguiente código:

#include "xc.h"
int main(void) {
    ANSB = 0 ;
    TRISB = 0 ;
    LATB = 0xFFFF ;

    while(1) {} ;
    return 0;
}

Resulta que no todos los pines se colocan en Vdd como se esperaba. Los pines RB4,8,9 y 10 permanecen en Gnd, mientras que el pin 11 está a 2 V (probado sin nada conectado a los pines). Esos eran los mismos pines con los que mi uart no funcionaba como entrada o salida.

Intenté usarlos como drenaje abierto, y estos pines tampoco pueden tirar de la línea hacia Gnd. Reemplazando el microcontrolador logró los mismos resultados.

Supongo que algunos dispositivos periféricos los controlan de forma predeterminada, pero no pude encontrarlo en la documentación. ¿Alguna recomendación?

    
pregunta Dtty

2 respuestas

1

En primer lugar, no veo los bits de configuración establecidos. Puede hacer que MPLAB genere el código requerido: enlace

Sospecho que RB4 no está funcionando porque el oscilador secundario no está apagado a través de los bits de configuración. De manera similar, RB8, RB9 y RB10 también son TCK, TDO y TDI respectivamente para JTAG. Deshabilitar JTAG a través de los bits de configuración también debería arreglar esos pines.

    
respondido por el Tahmid
1

RB4 es estrictamente un pin de entrada, vea la tabla 1-3 en la página 18 de la hoja de datos

Nota: los microcontroladores avanzados de microchip (es decir, pic24fj y pic30 / 33 series tienen puertos extraíbles) Por lo tanto, no todos los pines se asignan estrictamente al inicio. por ejemplo, en el dspic33EP, tuve que asignar UART Rx a un pin RP100 en particular asignando el siguiente código

RPINR18 = 0x0064;      // UART Rx PPS -> RP100 

o asigne UART Tx a RP101 mediante el siguiente código

RPOR9BITS.RP101R = 1;

Así que aquí hay algunas cosas que sugiero hacer o seguir.

  1. Asegúrese de incluir el archivo de encabezado de su microcontrolador. Sin embargo, si este código se compila, puede significar que se incluye automáticamente.
  2. Configure los bits de configuración para evitar comportamientos no deseados. Deshabilitaría el watchdog y restablecería el pin por el momento. Pueden hacer que su microcontrolador se reinicie constantemente, por lo que no le permiten ejecutar su programa. Usando XC.h, toma algunas macros simples.

    _FWDT (WDT_OFF); // Temporizador de vigilancia desactivado

    _FBORPOR (MCLR_DIS); // Desactivar el pin de reinicio

  3. Configura un oscilador interno por el momento (aunque eventualmente se mueve a externo para una mejor precisión, si es un requisito necesario)

  4. Debe asegurarse de que no se esté configurando el gpio de interés RBx para un modo que no sea I / O (es decir, el RB4 se puede configurar para un oscilador secundario externo: SOSCI). nota: Algunos pines son removibles, RPx significa que pueden ser ingresados o emitidos, y RPIx significa que son estrictamente ingresados (lo que parece ser el caso de RB4).

respondido por el Iancovici

Lea otras preguntas en las etiquetas