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.