TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: alperez en 12 de Noviembre de 2012, 09:11:27

Título: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: alperez en 12 de Noviembre de 2012, 09:11:27
Hola a todos, tengo un problema con la uart1 de un pic24f, resulta que el pic transmite bien (a traves de un max487) y para recibir utilizo la interrupcion y hasta aqui todo bien. Pero lo que recibo es basura.

A ver si alguien me puede dar una pista de por donde puedo buscar el error,  llevo un buen rato buscando y no encuentro nada.
Pro cierto, al pin enable:¿deberia ponerle una pull-down? Esto ya funciona perfectamente en dos pic con CCS, pero en c30 se me atraganta

Esta es la interrupcion:

Código: [Seleccionar]
/* Interrupción por recepcion de uart1 */
 void __attribute__((interrupt,no_auto_psv)) _U1RXInterrupt(void)
 {
    
    IFS0bits.U1RXIF = 0;        //Ponemos a 0 el flag de la interrupcion de recepcion
    rcvchar=0x00;               // Inicializo carácter recibido
    if(DataRdyUART1()){         // Si hay algo pendiente de recibir ...
        rcvchar=ReadUART1();    // lo descargo y ...
        putsUSBUSART(rcvchar); //para ver que recibimos
        CDCTxService();      
        addcbuff(rcvchar);      // lo añado al buffer
    }
    if(U1STAbits.OERR) U1STAbits.OERR=0;//si hay error de overflow es borrado
 }

La configuracion de la interrupcion y del periferico:

Código: [Seleccionar]
AD1PCFGL = 0xffff;          // todos los puertos digitales
    TRISFbits.TRISF3 = 0;       // RF3 configurado como salida
    TRISCbits.TRISC14 = 0;      // RC14 configurado como salida    
    TRISDbits.TRISD1 = 0;       // PIN TX como salida
    TRISDbits.TRISD2 = 1;       // PIN RX como entrada

// Asignacion de pines remapeables para el uso de la uart

    iPPSInput(IN_FN_PPS_U1RX,IN_PIN_PPS_RP23);      // Asignamos el pin remapeable RP23 a UART1RX
    iPPSOutput(OUT_PIN_PPS_RP24,OUT_FN_PPS_U1TX);   // Asignamos el pin remapeable RP24 a UART1TX

/*Activamos la interrupcion por recepcion prioridad 7 UART1. */
    ConfigIntUART1(UART_RX_INT_EN & UART_RX_INT_PR7 & UART_TX_INT_DIS);

 OpenUART1(UART_EN & UART_IDLE_CON & UART_DIS_WAKE & UART_DIS_LOOPBACK &
            UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT &
            UART_IrDA_DISABLE & UART_MODE_SIMPLEX & UART_UEN_00 &
            UART_UXRX_IDLE_ZERO & UART_BRGH_FOUR , UART_IrDA_POL_INV_ZERO &
            UART_SYNC_BREAK_DISABLED & UART_TX_ENABLE & UART_INT_RX_CHAR &
            UART_ADR_DETECT_DIS , BRGVAL);




Título: Re: Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: alperez en 14 de Noviembre de 2012, 07:46:31
No entiendo como una cosa en principio tan sencilla se puede complicar tanto. He buscado y rebuscado y no hay respuestas válidas, he probado todo los ejemplos que he visto y nada. La única diferencia que tiene éste es que es un PIC 3v3 comunicandose con un PIC 5v, pero los pines son 5v tolerantes.
Lo único que me cabe pensar es un problema de impedancias o yo que sé.
Tenía ambos comunicándose con un max487 y lo he quitado, ya están directos y nada. Tengo a Tx funcionando perfecto pero Rx nada. Luego pondré una pulldown a ver si es que no "sabe" ditinguir entre +5v y +3v3
¿Alguien sabe como puedo localizar las erratas de este PIC (24fj256gb106)?
Título: Re: Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: josemyzm en 15 de Noviembre de 2012, 01:52:17
En la pagina de microchip con toda la informacion del PIC
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en531081

vas a la parte inferior a Documentation & Software y tienes el Dasheet Errata
http://ww1.microchip.com/downloads/en/DeviceDoc/80369n.pdf
Título: Re: Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: alperez en 15 de Noviembre de 2012, 05:32:24
En la pagina de microchip con toda la informacion del PIC
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en531081

vas a la parte inferior a Documentation & Software y tienes el Dasheet Errata
http://ww1.microchip.com/downloads/en/DeviceDoc/80369n.pdf

Gracias
Título: Re: Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: alperez en 17 de Noviembre de 2012, 16:30:01
Bien, el problema está aquí:

Código: [Seleccionar]
putsUSBUSART(rcvchar); //para ver que recibimos
        CDCTxService();
Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: musttork en 21 de Agosto de 2013, 17:10:40
Se que hace ya casi un año de tu ultimo post, pero te voy a comentar lo que estoy haciendo y haber si puedes echarme una manilla.

Tengo el mismo micro que tu, y quiero mandarle cosas por el PC y que haga lo que yo quiero el micro, en principio me vale con una aplicacion en VB de pinchar a un boton y que mande el caracter L, y si el micro ve que es la L que encienda un LED. con eso ya me apaária por que lo que me está constando es realizar la conexion...:S

podrias ayudarme? un saludo
Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: alperez en 22 de Agosto de 2013, 14:38:57
Se que hace ya casi un año de tu ultimo post, pero te voy a comentar lo que estoy haciendo y haber si puedes echarme una manilla.

Tengo el mismo micro que tu, y quiero mandarle cosas por el PC y que haga lo que yo quiero el micro, en principio me vale con una aplicacion en VB de pinchar a un boton y que mande el caracter L, y si el micro ve que es la L que encienda un LED. con eso ya me apaária por que lo que me está constando es realizar la conexion...:S

podrias ayudarme? un saludo

Conexion hard o soft?
Pon mas datos, que tienes hecho y como quieres realizar la comunicación. Yo utilizo la uart2 con el pickit 2 clone para hacer debug y funciona muy bien
Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: musttork en 22 de Agosto de 2013, 15:49:35
Conexion hardware. en vez de tener un rs232 y un max232, tengo un conversor de USB-RS232 que me hace ese trabao entrgandome las tensiones TTL para el micro, tengo toda la placa (fisica) desarrollada pero ahora tengo que empezar a programar la apliccion VB (muy sencillita) y el micro. pero a la hora de programar el micro me encuentro con problemas de como comenzar, que librerias incrluir y que sentecias debo de poner xke no tengo ninguna guia buena en la que guiarme.

Programo el micro con el pickit 2. si deseas te mando el esquema para que lo puedas ver.

Saludos

Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: alperez en 22 de Agosto de 2013, 17:27:43
tienes que tener en cuenta que NO todos los pines  del pic son 5v tolerantes, teniendo en cuenta eso, tienes que configurar los pines como entrada o salida según proceda, configurar los pines remapeables, NO todos los pines son remapeables, algunos tienen funciones especificas, y desde luego configurar la UART. Mas arriba tienes como lo tengo yo.

Para calcular la velocidad de transmision debes tener en cuenta la velocidad de FOSC.

Estoy asumiendo que lo vas a programar en XC16, por que en CCS es distinto.

¿Por cierto, por que no lo comunicas a través del USB y te ahorras ese conversor de USB-RS232?
Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: musttork en 23 de Agosto de 2013, 14:14:43
Pues tenia pensado programarlo con el C30 pero si me aconsejas que el X16 es mejor lo haré con ese.

En cuanto a los pines, si se que tengo que configurarlo y si te das cuenta segun mi esquema tengo dos pines remapeables que asignar a la UART.

He intentado programarlo en USB pero me da muchisimos problemas, no consigo que cuando conecto la placa al ordenador, me aparece continuamente el mensaje de "dispositivo USB no encontrado" he modificado miles de archivos y nada. por eso lo he dado por imposible y he decidido pasarme al RS232.

Empezaré de la manera que lo tienes tu arriba y si me van surgiendo problemas te los postearé.

Mi cristal es de 12MHz y tengo otro de 8 por si no fuera bien con el de 12Mhz. Que me aconsejas?
Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: alperez en 24 de Agosto de 2013, 05:48:18
C30 y XC16 son prácticamente lo mismo, pero XC16 es mas nuevo. En la página 200 del datasheet tienes la forma de calcular el baud rate y en este (http://ww1.microchip.com/downloads/en/DeviceDoc/en026583.pdf) documento tienes mas información incluyendo el porcentaje de error sobre diferentes frecuencias FCY con los dos BRG posibles.

Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: musttork en 24 de Agosto de 2013, 07:05:55
Estoy calculado lo que me has estado comentado, y no entiedno muy bien lo del BRGH = 0 o igual a 1, que diferencias hay entre los dos?

Un saludo
Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: alperez en 24 de Agosto de 2013, 07:21:02
mira a ver si te sirve, yo tampoco lo entendía

http://www.todopic.com.ar/foros/index.php?topic=39579.0
Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: musttork en 24 de Agosto de 2013, 07:41:29
Pues tampoco me ha aclarado mucho jajaja,

yo es que tengo dos cristales, uno de 12Mhz, y otro de 8mHZ, si que es verdad que me he fijado en la pagina con el eerror y tal, que aparecen los baud rate para 1,4,8,12 y 16 FCY , pero claro si pongo mi cristal de 12MHZ serian FCY=6 no?

puede funcionar con el? o tendria que poner mejor el de 8Mhz?

Al utilizar las 2 formulas dependiendo del BRGH, me da el mismo error en ambas, como tu decias en tu post 0,16% entonces es indiferente cual utilice? asesorame pofavor

uN SALUDO y gracias por todo ;)
Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: alperez en 24 de Agosto de 2013, 08:12:36
FCY es FOSC/2 (en tu caso 6MHz) pero según creo lo puedes cambiar para los periféricos (BIT's DOZE).

Yo actualmente tengo este micro a 55536 bps con un cristal de 4Mhz, quiero decirte que a mi entender las tablas son orientativas, el por qué de esta velocidad tan "rara" es otra historia.

Creo que es indiferente cuál utilices si el error es el mismo, 0.16% es despreciable.

Yo tuve una historia con esto por que además queria utilizar el USB y hay que elegir el xtal cuidadosamente para que cuadre todo, el PLL el BRG, etc...
Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: musttork en 24 de Agosto de 2013, 08:39:32
Te acuerdas que te dije que el USB no me funcionaba? Pues bien, he modificado ciertas cosillas, y ahora parece que he conseguido que me funcione...tengo que hacer pruebas, pero he podido instalar el driver que antes ni eso me permitia...es un paso grandote...

No tendrás tu algo de información por ahi, de como mandar cosas por el usb, que me dijiste que era más facil que el rs232???

Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: alperez en 24 de Agosto de 2013, 12:09:13
No es más fácil, es que te ahorras el usb-rs232
Para enviar debes tener el driver usb-cdc y windows se encargará de crear el puerto serie virtual
Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: musttork en 25 de Agosto de 2013, 06:54:48
Si ya lo tengo instalado!, ayer ya estuve haciendo pruebas con una interfaz del Visual Basic, y encendiendo un LED desde el ordenador, la verdad es que me alegré mucho cuando lo consegui!

Muchas gracias por todo lo que me has contado y ayudado!

Saludos
Título: Re: [Solucionado]Problema UART pic24f con XC16. Transmite bien, recibe mal
Publicado por: alperez en 25 de Agosto de 2013, 11:36:45
Me alegro que te funcione, ahora dale un poco más de caña a ese PIC, por que con lo que haces lo tienes aburrido  :)
Mira mi proyecto: https://www.facebook.com/rsietu yo con este pic no me aburro seguro jajajaja