no puedo entender por qué la entrada digital dsPIC no está funcionando

0

Tiene problemas para que una entrada digital básica funcione correctamente. Solo trato de usarlo como una condición adicional para que funcione un intermitente LED. Ahora mismo, su código de ejemplo funciona bien, pero cuando intento agregar mi condición adicional en PORTA pin RA1 , siempre se lee como 0, sin importar qué entrada aplique al pin. Noob total a microcontroladores, así que estoy seguro de que el error es básico, pero aquí está el código:

int main ( void )
{


    /*  Initialize ports */
    //LATAbits.LATA0  = 0;          // set latch levels

    TRISA = 0x0002;                 // set pin RA1 as an input
    LATB  = 0x0000;                 // set latch levels
    TRISB = 0x0000;                 // set IO as outputs
    InitTimer1();                   // start the timer


    /*  endless loop*/
    while (FOREVER)
    {

        if (timer_expired && Counter == FLASH_RATE && (PORTAbits.RA1 == 0))
        {
            LATAbits.LATA0 = ~LATAbits.LATA0;
            LATBbits.LATB0 = ~LATBbits.LATB0;
            Counter = 0;
            timer_expired = 0;
        }

        // or do something else
        Nop();
        Nop();
        Nop();

    }

}

No incluí el código del temporizador porque todo está funcionando bien. El problema es tratar de leer el pin RA1 usando ... PORTAbits.RA1. Sé que tengo correcta la inicialización del registro de tres estados porque puse una resistencia de pull-up en el pin, inicialicé todo el LATA a 0 y luego cambié TRISA de 0x0000 a 0x0002 ; en el primer caso, el pin fue bajado, en el segundo caso, fue levantado por la resistencia. Miré la documentación de dsPIC aquí y no pude encontrar nada que explicara por qué no puedo parecer. para leer un valor de ella.

    
pregunta ChateauDu

1 respuesta

1

Finalmente me di cuenta del problema. El DSPIC tiene algo que se llama el registro AD1PCFGL que, de forma predeterminada, desactiva el búfer cuya entrada es la tensión del pin y la salida va al hardware del "puerto de lectura". Debe habilitarse explícitamente en el software para todos los pines cuyo voltaje desee leer.

Roger Rowland tenías razón!

Gracias

    
respondido por el ChateauDu

Lea otras preguntas en las etiquetas