Autor Tema: Problema al definir 2 UART peripherical pin select  (Leído 4962 veces)

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

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Problema al definir 2 UART peripherical pin select
« 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
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #1 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);
"Nada es imposible, no si puedes imaginarlo"

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #2 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
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #3 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
"Nada es imposible, no si puedes imaginarlo"

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #4 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?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #5 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.
 


"Nada es imposible, no si puedes imaginarlo"

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #6 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
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #7 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
"Nada es imposible, no si puedes imaginarlo"

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #8 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... ;-)
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #9 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
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema al definir 2 UART peripherical pin select (solucionado)
« Respuesta #10 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  ;-)
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #11 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)
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #12 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"
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #13 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
"Nada es imposible, no si puedes imaginarlo"

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Problema al definir 2 UART peripherical pin select
« Respuesta #14 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
« Última modificación: 02 de Mayo de 2014, 21:17:35 por MGLSOFT »
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.