TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Ranculche en 02 de Diciembre de 2014, 18:29:39

Título: SOLUCIONADO: Comunicacion RS232 CCS
Publicado por: Ranculche en 02 de Diciembre de 2014, 18:29:39
Hola a todos, estoy tratando de hacer funcionar una comunicación RS232 (para enviar datos a una PC) por software, de CCS. La cual debajo de los fuses declaro de la siguiente manera

Código: C
  1. #use rs232(BAUD=9600,XMIT=PIN_C3,RCV=PIN_C2,STREAM=Serie)

El problema que tenia en primer lugar, era que no recibía, supuse que era la placa, y cuando revise la pata 2 del conector DB9 con el osciloscopio, me encontré que el tiempo que duraba un bit era 1.04 mseg cuando en realidad debería ser 104 useg (todo esto hablando de 9600 baudios). Se me ocurrió agregarle un 0 mas y poner 96000. A partir de ahí empeze a recibir, pero no recibía lo que mandaba, cuando revise la trama, me di cuenta que era mucho las larga que lo que debería ser. La verdad no se que puede ser, pensé que podría ser el oscilador, pero igualmente no se porque es tan larga la trama, probé la uart por defecto del pic, y tambien funciona asi, por favor ayuda. A continuación dejo el simple programa que uso para probar la comunicación.


Código: C
  1. #include <18f4620.h>                    //PIC A UTILIZAR
  2.  
  3. #fuses xt,MCLR NOWDT, NOPUT, NOBROWNOUT, NOCPD, NOPROTECT                              //CRISTAL
  4.  
  5. #use delay(clock=10000000)               //A 10MHZ
  6.  
  7.  
  8. #use rs232(BAUD=96000,XMIT=PIN_C3,RCV=PIN_C2,STREAM=Serie)  
  9.  
  10. #USE FAST_IO (D)
  11. #USE FAST_IO (c)
  12. #USE FAST_IO (b)                    
  13.  
  14.  
  15.  
  16. main() {
  17. SET_TRIS_A( 0x02 );
  18. SET_TRIS_D( 0x00 );
  19. SET_TRIS_C( 0x88 );
  20. SET_TRIS_B( 0x00 );
  21.    
  22. char a='B';
  23.  
  24. while(1)
  25.         {
  26.         delay_ms(100);
  27.         fprintf(Serie,'B');
  28.         }
  29. }

PD: El cable usb-serie que uso lo probe puenteando la pata 2 con la 3 y verifique que funciona, y tambien lo use para compar las tramas, tanto la frec como la longitud

MUCHAS GRACIAS!

Saludos.-
Título: Re: Comunicacion RS232 CCS
Publicado por: MGLSOFT en 02 de Diciembre de 2014, 18:40:05
Cambia el fuse XT por HS.

Pruebalo...


Comenta todas las sentencias Set_Tris
Y tambien las Use_Fast_io

Pruebalo...
Título: Re: Comunicacion RS232 CCS
Publicado por: thegame en 02 de Diciembre de 2014, 18:49:13
Me parece que te falta la instrucción para trabajar por software, FORCE_SW, asi:

#use rs232(BAUD=96000,XMIT=PIN_C3,RCV=PIN_C2,FORCE_SW,STREAM=Serie)   
Título: Re: Comunicacion RS232 CCS
Publicado por: Ranculche en 02 de Diciembre de 2014, 18:56:54
Gracias por responder tan rapidoooooo!! Pude solucionar lo de la velocidad con el fuse HS, pero sigo con el problema de el largo de la trama, Quiero manda una 'B' pero me manda como 60 bits!! ñññññññññññ, me parece muy raro
Título: Re: Comunicacion RS232 CCS
Publicado por: MGLSOFT en 02 de Diciembre de 2014, 19:09:59
Vuelve a poner tu código, a ver como quedo...

Usa Geshi y elige C
Título: Re: Comunicacion RS232 CCS
Publicado por: Ranculche en 02 de Diciembre de 2014, 19:18:30
Hola! este es el codigo que quedo. Les cuento que probe poner la uart por defecto (rc6 y rc7) y usar la funcion putc, y anda bien. pero en esta funcion no puedo especificar la UART QUE ESTOY UTILIZANDO, ya que necesito mas de una. Asique supongo que no me esta funcionando la funcion fprintf o la estoy utilizando mal.

#include <18f4620.h>                    //PIC A UTILIZAR

#fuses HS,MCLR NOWDT, NOPUT, NOBROWNOUT, NOCPD, NOPROTECT                              //CRISTAL

#use delay(clock=10000000)               //A 10MHZ

#use rs232(BAUD=9600,XMIT=PIN_C2,RCV=PIN_C3,FORCE_SW,STREAM=Serie)  

#USE FAST_IO (D)
#USE FAST_IO (c)
#USE FAST_IO (b)                    



main() {
SET_TRIS_A( 0x02 );
SET_TRIS_D( 0x00 );
SET_TRIS_C( 0x88 );
SET_TRIS_B( 0x00 );
  
char a='B';

while(1)
   {
   delay_ms(100);
   fprintf(Serie,'B');
   }
}
Título: Re: Comunicacion RS232 CCS
Publicado por: KILLERJC en 02 de Diciembre de 2014, 20:15:07
es correcto usar comillas simples ?

Aca en esto:
#use rs232(BAUD=9600,XMIT=PIN_C2,RCV=PIN_C3,FORCE_SW,STREAM=Serie)

En algunos veo que incluyen la paridad y los bits. Ejemplo sacado del foro:

#use rs232(baud=9600,parity=N,xmit=PIN_C5,rcv=PIN_C4,bits=8,stream=Dispositivo)
Título: Re: Comunicacion RS232 CCS
Publicado por: Ranculche en 02 de Diciembre de 2014, 20:25:51
Si, Tambien probe eso  :(. Y cada vez me manda mas basura. Es una trama muy larga, no entiendo porque. Con comillas simple usando la UART fisica, y la funcion putc me funciona bien. En cuanto a las comillas tambien use:


char a='B';
fprintf(Serie,a)

y manda lo mismo.  :?
Título: Re: Comunicacion RS232 CCS
Publicado por: Ranculche en 02 de Diciembre de 2014, 20:33:07
KILLERJC!!! Perdon, Retiro lo dicho!! Puse lo siguiente:

fprintf(Serie,"HOLa");

Y anduvo bien...
El Problema eran las comillas simples, que se usaría con funciones como putc.
Muchas Gracias a todos!!

Saludos!
Título: Re: Comunicacion RS232 CCS
Publicado por: MGLSOFT en 04 de Diciembre de 2014, 11:33:04
Si esta solucionado, por favor edita el titulo del tema y agrégale (Solucionado) así se enteran y no siguen contestando sobre el tema.
Título: Re: SOLUCIONADO: Comunicacion RS232 CCS
Publicado por: Ranculche en 04 de Diciembre de 2014, 14:57:21
OK!! Gracias por avisar.

Saludos.-