Error de entrada y UART en PIC32

2

Tengo un PIC32 starter kit y estoy haciendo un programa tal que cuando aplico la entrada 1, MCU enviará estos datos a mi PC usando UART y se mostrará INPUT 1 ON en el terminal, lo mismo ocurre con la entrada 2 & 3. Estas entradas provienen de acopladores ópticos y son básicamente de 3.1v. Entonces, cuando aplico estas entradas, el pin de MCU se vuelve alto, los datos se envían a la PC usando UART y se muestra INPUT 1 ON o INPUT 2 ON .

Pero el problema es, digamos, he aplicado la entrada 1 y el terminal muestra INPUT 1 ON y al mismo tiempo, si aplico la entrada 2, INPUT 1 ON se apaga y INPUT 2 ON comenzó a mostrarse. Quiero que se muestre tanto INPUT 1 ON INPUT 2 ON y si aplico la entrada 3 al mismo tiempo, también se muestre INPUT 3 ON junto con INPUT 1 ON INPUT 2 ON . No sé cómo hacer lógica para esto. ¿Alguien puede simplemente ayudarme con esto? Gracias

CÓDIGO:

    if(PORTAbits.RA6 == 0)
    {
        putsUART2(">>Input: 1 ON\r\n");

    }
    if(PORTAbits.RA6 == 1)
    {
        putsUART2(">>Input: 1 OFF\r\n");

    }
    if(PORTAbits.RA7 == 0)
    {
        putsUART2(">>Input: 2 ON\r\n");

    }
    if(PORTAbits.RA7 == 1)
    {
        putsUART2(">>Input: 2 OFF\r\n");

    }
    if(PORTGbits.RG13 == 0)
    {
        putsUART2(">>Input: 3 ON\r\n");

    }
    if(PORTGbits.RG13 == 1)
    {
        putsUART2(">>Input: 3 OFF\r\n");

    }

EDIT

En este momento, lo que estoy tratando de hacer es if(PORTAbits.RA6 == 0) , debería mostrar Input: 1 ON y si if(PORTAbits.RA6 == 1) debería mostrar Input: 1 OFF e igual para otras entradas. Pero lo que sucede es que cuando no hay entrada Input: 1 OFF Input: 2 OFF Input: 3 OFF se muestra pero cuando if(PORTAbits.RA6 == 0) aparece, muestra Input: 1 ON solo una vez y luego muestra continuamente Input: 1 OFF Input: 2 OFF Input: 3 OFF . No sé por qué se comporta así.

    
pregunta Aircraft

2 respuestas

1

Su código actual muestra (a lo sumo) un mensaje, porque la segunda y la tercera parte están en las declaraciones else. Alguien ha eliminado J.A. La respuesta, pero fue totalmente correcto en esta parte. (¿Qué 'propietario' hizo esto eliminando un por qué? ¡Es la mitad de la solución!)

El segundo problema es probablemente que (cuando elimina las palabras clave 'else') cada mensaje sobrescribe el anterior o se escribe en una línea separada. Debería escribir \ r \ n solo una vez, por ejemplo de esta manera:

char newline = 0;
if(PORTAbits.RA6 == 0){
   putsUART2("Input: 1 ON ");
   newline = 1;
}

if(PORTAbits.RA7 == 0){
   putsUART2("Input: 2 ON ");
   newline = 1;
}

if(PORTGbits.RG13 == 0){
   putsUART2("Input: 3 ON ");
   newline = 1;
}

if( newline ){
   putsUART2("\r\n");
}
    
respondido por el Wouter van Ooijen
0

UART es un protocolo serie, por lo que no puede transmitir datos paralelos como quiere a través de un puerto UART al mismo tiempo, está "matando" su puerto serie con esto. Lea este artículo de Wikipedia sobre UART

Intente con esta idea: verifique todos los pines y, de acuerdo con los estados de entrada, establezca los indicadores, forme una cadena de acuerdo con los indicadores y envíela a su salida UART2 que envía datos a su terminal PC.

    
respondido por el Junior

Lea otras preguntas en las etiquetas