Los puertos de entrada digital del dsPIC30F4011 / 4013 no funcionan en la placa de desarrollo dsPICDEM 2

3

Tengo un Microchip dsPICDEM 2 Development Board con dos microcontroladores en él: un dsPIC30F4011 (familia de control de motor) y un dsPIC30F4013 (familia de propósito general). Estoy programando en C usando el IDE de MPLAB.

Lo que quiero hacer es leer una señal de entrada digital con niveles TTL (0-5 V), pero la lectura de los puertos siempre es 0.

Si configuro el puerto para que sea una salida utilizando el registro TRIS correspondiente y luego escribo en el registro LAT correspondiente, funciona bien. Por ejemplo:

TRISBbits.TRISB0 = 0; // set RB0 to be an output
LATBbits.LATB0 = 1;

funciona perfectamente.

Sin embargo, cuando configuro el puerto para que sea una entrada, sigo leyendo 0 tanto en el registro LAT como en el registro PORT. Por lo tanto, ninguno de los siguientes extractos de código funciona:

// This doesn't work:

TRISBbits.TRISB0 = 1; // set RB0 to be an input
value = LATBbits.LATB0;

// This doesn't work either:

TRISBbits.TRISB0 = 1; // set RB0 to be an input
value = PORTBbits.RB0;

Mi programa es tan simple como esto:

int main(void)
{
    TRISBbits.TRISB0 = 1;
    TRISBbits.TRISB1 = 0;

    while (1)
    {
        int rb0 = LATBbits.LATB0;
        LATBbits.LATB1 = rb0;
    }

    return 0;
}

por lo que no hay otra posible fuente de error en el programa.

Estos son los documentos que he usado como referencia:

  1. dsPIC30F Family Reference Manual
  2. dsPIC30F4011 / 4012 Hoja de datos
  3. hoja de datos dsPIC30F3014 / 4013

¿Qué estoy haciendo mal?

EDITAR: Después de las correcciones señaladas por Tut (ver respuesta aceptada), el código del programa se ve así:

int main(void)
{
    TRISBbits.TRISB0 = 1; // set RB1 as input
    TRISBbits.TRISB1 = 0; // set RB1 as output
    ADPCFGbits.PCFG0 = 1; // set RB0 as digital input (i.e. disable analog input)

    while (1)
    {
        LATBbits.LATB1 = PORTBbits.RB0;
    }

    return 0;
}
    
pregunta Genba

1 respuesta

1

Los pines PORTB tienen funciones alternativas como entradas analógicas. Debe configurar el registro ADPCFG para pines digitales (bits establecidos en 1) ya que el valor de restablecimiento es todo ceros (pines analógicos). Consulte el dsPIC30F Family Reference Manual página 18-9.

Tenga en cuenta también que para usar los pines como entradas digitales, configure los TRISBbits deseados en 1 (entradas). Luego, debe leer desde PORTBbits, no desde LATBbits, que es un cierre para las operaciones de salida.

    
respondido por el Tut

Lea otras preguntas en las etiquetas