Autor Tema: Problema en UART con pic32  (Leído 3671 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Abathur

  • PIC10
  • *
  • Mensajes: 3
Problema en UART con pic32
« en: 21 de Octubre de 2014, 02:32:30 »
Buenas tardes me gustaría hacer una consulta a ver si alguien da con el problema, debe de ser una tontería que no veo.

Estoy programando una UART entre dos dispositivos, dispongo de un analizador lógico, y desde el PIC32MX mando el mensaje y el dispositivo responde correctamente, lo se por que lo veo en el analizador lógico el problema es que el PIC32MX no detecta que tiene datos para leer, y por lo tanto no me entero de lo que llega del dispositivo.

la configuracion de la UART es :

    UARTConfigure(UART_MODULE_ID, UART_ENABLE_PINS_TX_RX_ONLY);
    UARTSetFifoMode(UART_MODULE_ID, UART_INTERRUPT_ON_TX_NOT_FULL | UART_INTERRUPT_ON_RX_NOT_EMPTY);
    UARTSetLineControl(UART_MODULE_ID, UART_DATA_SIZE_8_BITS | UART_PARITY_NONE | UART_STOP_BITS_1);
    UARTSetDataRate(UART_MODULE_ID, GetPeripheralClock(), 4800);
    UARTEnable(UART_MODULE_ID, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_TX | UART_RX));

y esta es la función la cual llamo directamente despues de enviar para leer la respuesta a mi mensaje:

UINT32 GetDataBuffer(char *buffer, UINT32 max_size)
{
    UINT32 num_char;

    num_char = 0;

    while(num_char < max_size)
    {
        UINT8 character;

        while(!UARTReceivedDataIsAvailable(UART_MODULE_ID));


        character = UARTGetDataByte(UART_MODULE_ID);

        if(character == '\r')
            break;

        *buffer = character;

        buffer++;
        num_char++;
    }

    return num_char;
}


el programa se queda esperando en while(!UARTReceivedDataIsAvailable(UART_MODULE_ID)); no tengo ni idea de porque, ya que como he dicho en el analizador logico veo que el dispositivo responde y ademas correctamente, sin embargo el PIC se queda perpetuamente esperando.

muchas gracias y un saludo.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re: Problema en UART con pic32
« Respuesta #1 en: 24 de Octubre de 2014, 13:55:25 »
Aparentemente está todo bien configurado, nunca he ocupado la función UARTGetDataByte, siempre uso interrupciones, tal vez sea un problema de hardware.

Te sugiero que coloques unos leds en TX y RX para determinar si el PIC trasnmite y/o recibe información así:

                         3.3V
                         |
                         |
                       ___
                        \/    LED
                        ---
                         |
                        __
                       |    |   Resistencia
                       |    |
                        ----
                         |
                         |                      
        Rx ----------------------------------------- Tx  

 Pic                                                                Otro dispositivo


Los leds parpadean cuando llegan o salen datos desde PIC
« Última modificación: 24 de Octubre de 2014, 13:58:20 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re: Problema en UART con pic32
« Respuesta #2 en: 24 de Octubre de 2014, 14:02:52 »
También estaba pensando que hasta que tu llames a tu función GetDataBuffer, el dato ya esta llegando a RX del PIC32 o ya se fue, cuando tu quieres ejecutar UARTGetDataByte, es decir se te fué el tren (el tren de pulsos)   :lol:
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re: Problema en UART con pic32
« Respuesta #3 en: 24 de Octubre de 2014, 14:12:15 »
Acaba de darme cuenta que estás habilitando las interrupciones:

UART_INTERRUPT_ON_TX_NOT_FULL | UART_INTERRUPT_ON_RX_NOT_EMPTY

Y tú estás hacienda un ‘pollin’ de los datos. Ese pueda que sea tu problema
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Abathur

  • PIC10
  • *
  • Mensajes: 3
Re: Problema en UART con pic32
« Respuesta #4 en: 07 de Noviembre de 2014, 08:06:45 »
Muchas gracias Dominus he encontrado por fin el fallo, no he hecho lo de los led por que lo estaba viendo en el analizador lógico, y lo de las interrupciones lo abre copiado así debido a que ya estaba probando ya tantas cosas a ver si asi funcionaba que no me habre dado cuenta.

el problema estaba en que al configurar las patas del microcontrolador no basta solo con poner los bit de configuracion que permiten configurar las funciones de los pines si no que en la hoja de datos, en la seccion del oscilador,(no me preguntes por que una parte de la configuracion de pines esta en la seccion del oscilador) te indica que para configurar los pines primero debes desbloquearlos.

por lo tanto con esta funcion de MPLAB X se desbloquean y configuran si necesidad de tocar los registros de configuracion:

PPSInput(3,U1RX,RPC1);          //Remapear los pines de UART atendiendo al desbloqueo
PPSOutput(1,RPC0,U1TX);

de esta manera ya puedo enviar y recibir por la UART en estos dos pines.

ahora mi problema es otro, estoy trabajando con un MCP39F501 que es un monitor de frecuencia, puedo comunicarme con él y calibrarlo pero luego no mide de ninguna manera siempre me ofrece la misma salida sea la carga que sea. ¿has trabajado con él alguna vez?

muchas gracias por tu ayuda :)

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re: Problema en UART con pic32
« Respuesta #5 en: 07 de Noviembre de 2014, 12:40:41 »
No viejo, para nada con ese IC, tocaría hacer un análisis más profundo de tu firmware y hardware. El foro en inglés de mCHP es mucho más efectivo.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32


 

anything