TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jhozate en 02 de Mayo de 2014, 18:16:56

Título: Problema al definir 2 UART peripherical pin select
Publicado por: jhozate en 02 de Mayo de 2014, 18:16:56
Hola
Estoy probando un codigo en un PIC24FJ64GA002, quiero definir las UART y lo hago de la siguiente manera:
Código: [Seleccionar]
#INCLUDE <24FJ64GA002.h>
#FUSES ICSP1, NOWDT, NODEBUG, NOPROTECT, NOJTAG, FRC, NOWINDIS, NOPR, IOL1WAY, OSCIO, NOCKSFSM, NOIESO
#USE DELAY(CLOCK=8000000)

//UART1 --> GPS
//UART2 --> M95
//*********DEFINICION PINES UART1 Y UART2   

#DEFINE     TX1 PIN_B5               
#DEFINE     RX1 PIN_B4
#PIN_SELECT U1TX=TX1
#PIN_SELECT U1RX=RX1

#DEFINE     TX2 PIN_B14               
#DEFINE     RX2 PIN_B15
#PIN_SELECT U2TX=TX2
#PIN_SELECT U2RX=RX2
 
#use rs232( baud=9600, Xmit=TX1, rcv=RX1,STREAM=S1)
//#use rs232( baud=9600, Xmit=TX2, rcv=RX2,STREAM=S2)

para enviar
Código: [Seleccionar]
PUTS("HOLA MUNDO",S1);
DELAY_MS(1000);

cuando solo pongo el primer #USE rs232 funciona bien un codigo simple de enviar "HOLA MUNDO".
Al poner el otro #USE rs232 no funciona.

He intentado poner los pines directamente sin hacer uso de los DEFINE, pero sucede lo mismo, asi:
Código: [Seleccionar]
#PIN_SELECT U1TX=PIN_B5
#PIN_SELECT U1RX=PIN_B4
 
#PIN_SELECT U2TX=PIN_B14
#PIN_SELECT U2RX=PIN_B15
 
#use rs232( baud=9600, Xmit=PIN_B5, rcv=PIN_B4,STREAM=S1)
#use rs232( baud=9600, Xmit=PIN_B14, rcv=PIN_B15,STREAM=S2)


Que podria estar pasando?
Lo pruebo en circuito real, CCS 5.025
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: rivale en 02 de Mayo de 2014, 18:24:02
Hola jhozate, creo que el problema es al usar la función puts, para usar los stream, las funciones inician con una f, entonces para enviar como quieres la función sería

Código: C
  1. fputs("algo",S1);
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: jhozate en 02 de Mayo de 2014, 18:31:50
gracias, claro se me pasó ese detalle, lo acabo de poner pero sigue igual
pongo el codigo completo:
Código: C++
  1. #INCLUDE <24FJ64GA002.h>
  2. #FUSES ICSP1, NOWDT, NODEBUG, NOPROTECT, NOJTAG, FRC, NOWINDIS, NOPR, IOL1WAY, OSCIO, NOCKSFSM, NOIESO
  3. #USE DELAY(CLOCK=8000000)
  4.  
  5. //UART1 --> GPS
  6. //UART2 --> M95
  7. //*********DEFINICION PINES UART1 Y UART2  
  8.  
  9. #DEFINE     TX1 PIN_B5                
  10. #DEFINE     RX1 PIN_B4
  11. #PIN_SELECT U1TX=TX1
  12. #PIN_SELECT U1RX=RX1
  13.  
  14. #DEFINE     TX2 PIN_B14                
  15. #DEFINE     RX2 PIN_B15
  16. #PIN_SELECT U2TX=TX2
  17. #PIN_SELECT U2RX=RX2
  18.  
  19. #use rs232( baud=9600, Xmit=TX1, rcv=RX1,STREAM=S1)
  20. #use rs232( baud=9600, Xmit=TX2, rcv=RX2 ,STREAM=S2)
  21.  
  22. /*
  23. #INT_RDA
  24. VOID ISR_RDA1()
  25. {
  26. FPUTC(FGETC(UART1),UART2) ;
  27. }
  28.  
  29. #INT_RDA2
  30. VOID ISR_RDA2()
  31. {
  32. FPUTC(FGETC(UART2),UART1) ;
  33. }
  34. */
  35.  
  36.  
  37. //*************DEFINICION DE FUNCIONES
  38.  
  39. VOID MAIN()
  40. {
  41.  
  42. ENABLE_INTERRUPTS(INT_RDA);
  43. ENABLE_INTERRUPTS(INT_RDA2);
  44. ENABLE_INTERRUPTS(INTR_GLOBAL);
  45.  
  46.  
  47.  
  48.     OUTPUT_LOW(PIN_B12);
  49. //INICIO();
  50.  
  51.  
  52. WHILE(TRUE)
  53. {
  54.  
  55. FPUTS("HOLA MUNDO",S1);
  56. DELAY_MS(1000);
  57.  
  58. }//FIN WHILE
  59. }//FIN VOID
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: rivale en 02 de Mayo de 2014, 18:44:10
tal vez no te los esta configurando por hardware, porque no intentas usar UART1 y UART2 dentro del #use rs232 en lugar de asignar tu los pines
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: jhozate en 02 de Mayo de 2014, 18:50:07
sin usar #PIN_SELECT  ?
creo que debo definirlos porque las UARTs inicialmente no se asignan a ningún pin?

o como es tu idea?
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: rivale en 02 de Mayo de 2014, 18:56:34
puedes usar la instrucción:

Código: C
  1. #use rs232( baud=9600,UART1,STREAM=S1)
  2. #use rs232( baud=9600, UART2,STREAM=S2)

y según la documentación

Citar
UART1
 Sets the XMIT= and RCV= to the chips first hardware UART.
 
UART2
 Sets the XMIT= and RCV= to the chips second hardware UART.
 


Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: jhozate en 02 de Mayo de 2014, 19:04:13
sigue igual, habia mirado la ayuda de ccs, lo entendi como que esa opción seria para micros con las UART definidas y fijas.
Voy a revisar el asm a ver que pasa
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: rivale en 02 de Mayo de 2014, 19:10:17
Voy a revisar el asm a ver que pasa

si, porque es raro, en micros de 8 bits funciona bien, puede que sea un bug para los de 16 bits
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: MGLSOFT en 02 de Mayo de 2014, 19:44:04
Elimina los defines para los pines y ponlos directamente en las sentencias pin select.
Creo que es eso lo que no digiere... ;-)
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: jhozate en 02 de Mayo de 2014, 20:07:40
gracias marcos, hago el cambio asi:
Código: [Seleccionar]
#PIN_SELECT U1TX= PIN_B5
#PIN_SELECT U1RX=PIN_B4
 
#PIN_SELECT U2TX=PIN_B14
#PIN_SELECT U2RX=PIN_B15
 
#use rs232( baud=9600, Xmit=PIN_B5, rcv=PIN_B4,STREAM=S1)
#use rs232( baud=9600, Xmit=PIN_B14, rcv=PIN_B15 ,STREAM=S2)

sigue sin funcionar, la tarjeta la conecto al pc vía modulo usb-serial el módulo funcionar perfecto. Tiene led indicadores de actividad de RX y TX . Acabo de mirar el programa con el que monitorea el puerto y veo que se esta enviando masivamente " ! " y led de rx no apaga , los baudrate estan correctos en micro y pc,  apenas abrí el programa se puso la pantalla azul de Güindos  :D

Problemas a nivel hard creo que se pueden descartar
Título: Re: Problema al definir 2 UART peripherical pin select (solucionado)
Publicado por: jhozate en 02 de Mayo de 2014, 20:29:18
por esas cosas que uno dice "pues probemos estos a ver que pasa" he hecho lo siguiente:

Código: [Seleccionar]
#use rs232( baud=9600, Xmit=PIN_B5, rcv=PIN_B4,STREAM=S1)
#use rs232( baud=9600, Xmit=PIN_B14, rcv=PIN_B15 ,STREAM=S2)
 
#DEFINE     TX1 PIN_B5               
#DEFINE     RX1 PIN_B4
#PIN_SELECT U1TX=TX1
#PIN_SELECT U1RX=RX1
 
#DEFINE     TX2 PIN_B14               
#DEFINE     RX2 PIN_B15
#PIN_SELECT U2TX=TX2
#PIN_SELECT U2RX=RX2

y funciona  :mrgreen:

gracias marcos y rivale  ;-)
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: MGLSOFT en 02 de Mayo de 2014, 20:36:02
Creo que esta en como defines los puertos.

Prueba asi:

Código: C
  1. #use rs232(UART1,baud=9600,parity=N,bits=8)
  2. #use rs232(UART2,baud=9600,parity=N,bits=8)
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: jhozate en 02 de Mayo de 2014, 20:44:41
gracias marcos lo puse asi y va Ok
Código: [Seleccionar]
#use rs232( baud=9600, Xmit=PIN_B5, rcv=PIN_B4,STREAM=S1)
#use rs232( baud=9600, Xmit=PIN_B14, rcv=PIN_B15 ,STREAM=S2)
#PIN_SELECT U1TX=PIN_B5
#PIN_SELECT U1RX=PIN_B4
#PIN_SELECT U2TX=PIN_B14
#PIN_SELECT U2RX=PIN_B15

se solucionó cambiando el orden de las sentencias, quería usar los defines porque eventualmente en el desarrollo del soft puede que deba prescindir de una posición de las uart para enviarla hacia otros pines y no tener que modificar casi nada, estaba pensando en pode hacer uso del preprocesador algo con #IF DEFINE "modo" para que al inicio se compile por donde estaran las UART segun lo indique en "modo"
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: rivale en 02 de Mayo de 2014, 20:50:04
 :o

que bueno que funcionó.

gracias por compartir la solución, quien diría que ccs se confundió con el orden
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: MGLSOFT en 02 de Mayo de 2014, 21:10:53
yo uso PIC24 y el orden es el delay, pin select y después las declaraciones de puertos como las pase yo, ya que directamente se definen con esos pines.

Aqui un ejemplo.

Código: C
  1. #use delay(crystal=10 MHZ,clock=10000000) // Cristal de 10 Mhz, oscilador igual
  2.  
  3. //Seleccion de pines a usar en UART1
  4. #pin_select U1TX=PIN_C8    //configura Pin C8 para UART TX
  5. #pin_select U1RX=PIN_C6    //configura Pin C6 para UART RX
  6.  
  7. #use rs232(baud=9600,xmit=PIN_C8,rcv=PIN_C6,parity=N,bits=8,stream=UART1) //UART1
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: jhozate en 03 de Mayo de 2014, 16:27:10
Bueno, si bien ha funcionado en real con el cambio del orden, en proteus no funciona, cuando hago el cambio de orden de las sentencias funciona en uno pero en otro no

Asi funciona en real, pero en proteus No:
Código: C++
  1. #INCLUDE <24FJ64GA002.h>
  2. #FUSES ICSP1, NOWDT, NODEBUG, NOPROTECT, NOJTAG, FRC, NOWINDIS, NOPR, IOL1WAY, OSCIO, NOCKSFSM, NOIESO
  3. #USE DELAY(clock=8000000)
  4. #use rs232(baud=9600, Xmit=pin_b5, rcv=pin_b4,   STREAM=UART1)
  5. #use rs232(baud=9600, Xmit=pin_b14, rcv=pin_b15,   STREAM=UART2)
  6. #PIN_SELECT U2TX=pin_b14
  7. #PIN_SELECT U2RX=pin_b15
  8. #PIN_SELECT U1TX=pin_b5
  9. #PIN_SELECT U1RX=pin_b4

Asi No funciona en real, pero en proteus Si:
Código: C++
  1. #INCLUDE <24FJ64GA002.h>
  2. #FUSES ICSP1, NOWDT, NODEBUG, NOPROTECT, NOJTAG, FRC, NOWINDIS, NOPR, IOL1WAY, OSCIO, NOCKSFSM, NOIESO
  3. #USE DELAY(clock=8000000)
  4. #PIN_SELECT U2TX=pin_b14
  5. #PIN_SELECT U2RX=pin_b15
  6. #PIN_SELECT U1TX=pin_b5
  7. #PIN_SELECT U1RX=pin_b4
  8. #use rs232(baud=9600, Xmit=pin_b5, rcv=pin_b4,   STREAM=UART1)
  9. #use rs232(baud=9600, Xmit=pin_b14, rcv=pin_b15,   STREAM=UART2)

Cuando no funciona en proteus, el pin de TX se queda gris
Cuando funciona en real, hay actividad masiva en la recepción del pc, aun cuando en el codigo estoy enviando un "hola" cada 1segundo

Edito: Compilé con un version de ccs 4.xxx , simulé con proteus 7.8 y el resultado es el mismo,  el tema es de compilador
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: RALF2 en 11 de Julio de 2014, 15:02:52
Dogflux, no podrias probar solo el usart 2 que te da problemas sin utilizar le usart 1, a ver si no es problema de hardware?
Título: Re: Problema al definir 2 UART peripherical pin select
Publicado por: stk500 en 12 de Julio de 2014, 04:57:33
Dogflux, no podrias probar solo el usart 2 que te da problemas sin utilizar le usart 1, a ver si no es problema de hardware?
El beber ron da muchas Resaca  ;-)
Cuando beba guarda la botella  :D