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:
- dsPIC30F Family Reference Manual
- dsPIC30F4011 / 4012 Hoja de datos
- 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;
}