Autor Tema: Comunicacion Serial RS232  (Leído 9976 veces)

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

Desconectado javalenciab90

  • PIC10
  • *
  • Mensajes: 11
Comunicacion Serial RS232
« en: 16 de Junio de 2019, 17:57:59 »
Hola buenas un saludo a todos. Estoy aprendiendo como realizar la comunicacion serial RS232 con PIC C Compiler, Conexión mediante un modulo RS232 que me transforma a señales TTL y un cable serie-USB. Comprobe que dicho modulo estuviera transmitiendo y recibiendo datos de manera correcta utilizando la herramienta de Comunicacion serial que tiene el PIC C Compiler y otro software llamado Hercules y esta bien el módulo.
Ahora cuando intento hacer la comunicacion con el PIC (de manera física) no logro hacerlo, la idea es enviar desde el PC un caracter y que lo reciba y muestre mediante un LCD, ademas de responder desde el PIC al PC ese mismo caracter (Hacer como un eco).
En el LCD Sale bien el mensaje, pero el caracter, aparece un simbolo raro.

Código: [Seleccionar]
#include <16f877A.h>
#FUSES XT,NOWDT
#USE delay (clock = 4M)
#USE RS232(UART1,baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#BYTE TRISB = 0x86
#BYTE PORTB = 0x06

#define LCD_ENABLE_PIN  PIN_B0
#define LCD_RS_PIN      PIN_B1
#define LCD_RW_PIN      PIN_B2
#define LCD_DATA4       PIN_B4
#define LCD_DATA5       PIN_B5
#define LCD_DATA6       PIN_B6
#define LCD_DATA7       PIN_B7

#include <lcd.c>

char ch;

#int_rda       // Interrupción por dato recibido por rs232
void serial_isr(){
   ch = getc();
   putchar(ch);
}

void main(){
   // Habilito las interrupciones
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RDA);
   
   lcd_init();
   lcd_gotoxy(1,1);
   lcd_putc ("Prueba RS232");
   
   while(true){
      lcd_gotoxy(1,2);
      printf(lcd_putc, "ch = %c", ch);   
   }
}

Si alguien me puede indicar si estoy pasando algo por alto algo o estoy configurando algo de mala manera lo agradecería.
Saludos. :-)

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Comunicacion Serial RS232
« Respuesta #1 en: 16 de Junio de 2019, 19:25:19 »
Con el cristal que estás usando ponle mejor HS y no XT en el fuse y prueba.

 

Desconectado javalenciab90

  • PIC10
  • *
  • Mensajes: 11
Re:Comunicacion Serial RS232
« Respuesta #2 en: 16 de Junio de 2019, 19:52:39 »
Con el cristal que estás usando ponle mejor HS y no XT en el fuse y prueba.

Hola, recien acabo de probar lo que me indicaste. Sigue igual, como muestro en la foto.

PD: El XT no se debe usar si el reloj es <=4M?

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Comunicacion Serial RS232
« Respuesta #3 en: 17 de Junio de 2019, 18:30:42 »
Más bien menos a 4 Mhz es cuando hay que usar XT.  Para 4 Mhz puedes usar cualquiera, yo prefiero HS.

  Otra prueba que puedes hacer es eliminar las dos resistencias pullup que has puesto a los pines tx y rx del micro. La usart no los necesita y puede darte error.

Desconectado javalenciab90

  • PIC10
  • *
  • Mensajes: 11
Re:Comunicacion Serial RS232
« Respuesta #4 en: 17 de Junio de 2019, 20:46:26 »
Más bien menos a 4 Mhz es cuando hay que usar XT.  Para 4 Mhz puedes usar cualquiera, yo prefiero HS.

  Otra prueba que puedes hacer es eliminar las dos resistencias pullup que has puesto a los pines tx y rx del micro. La usart no los necesita y puede darte error.

Vale gracias por la aclaración, Bien respecto a lo otro ya intenté quitando dichas resistencias y aún no da. Me entro la curiosidad por saber si era el microcontrolador, pero lo cambie por uno recien comprado y sigue con el mismo resultado.
No se que puede estar mal...  :x

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Comunicacion Serial RS232
« Respuesta #5 en: 18 de Junio de 2019, 02:53:54 »
Cuando recibas un byte inmediatamente lee el registro RCSTA

 Mira si uno de los bits 1 y 2 se ha puesto a 1.   Especialmente el bit 2 (Frame error)

Si es así, puede que el macro #use rs232 esté configurando SPBRG para modo BRGH = 0

 Es que así el error es casi un 7%. Muchísimo.

 Si puedes poner manualmente en tu main un valor al bit TXSTA.BRGH = 1 y al registro SPBRG = 129

 Prueba con esa configuración.  De ese modo el error sería un 0,16

Todo esto entiendo que debería hacerlo bien el compilador mediante el macro #use rs232 pero ante la duda.

Quita lo de UART1 de La macro , no es necesario ponerlo en un micro que solo tiene una uart.  Es por ir descartando.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Comunicacion Serial RS232
« Respuesta #6 en: 19 de Junio de 2019, 07:14:42 »
Que tal javalenciab90,

He probado tu código tal como lo tienes y funciona perfectamente en mi caso. He realizado la simulación en proteus sin ningún problema. Es probable que lo que tengas es un error en el hardware. Asegúrate que tus conexiones estén correctas. Que tu conversor USB a serial funcione correctamente.

Saludos,

elreypic.

Desconectado javalenciab90

  • PIC10
  • *
  • Mensajes: 11
Re:Comunicacion Serial RS232
« Respuesta #7 en: 20 de Junio de 2019, 17:53:10 »
Cuando recibas un byte inmediatamente lee el registro RCSTA

 Mira si uno de los bits 1 y 2 se ha puesto a 1.   Especialmente el bit 2 (Frame error)

Si es así, puede que el macro #use rs232 esté configurando SPBRG para modo BRGH = 0

 Es que así el error es casi un 7%. Muchísimo.

 Si puedes poner manualmente en tu main un valor al bit TXSTA.BRGH = 1 y al registro SPBRG = 129

 Prueba con esa configuración.  De ese modo el error sería un 0,16

Todo esto entiendo que debería hacerlo bien el compilador mediante el macro #use rs232 pero ante la duda.

Quita lo de UART1 de La macro , no es necesario ponerlo en un micro que solo tiene una uart.  Es por ir descartando.

Hola remi04,
Vale probaré de esta forma entonces. y Comentaré si pude solucionar

Desconectado javalenciab90

  • PIC10
  • *
  • Mensajes: 11
Re:Comunicacion Serial RS232
« Respuesta #8 en: 20 de Junio de 2019, 17:56:32 »
Que tal javalenciab90,

He probado tu código tal como lo tienes y funciona perfectamente en mi caso. He realizado la simulación en proteus sin ningún problema. Es probable que lo que tengas es un error en el hardware. Asegúrate que tus conexiones estén correctas. Que tu conversor USB a serial funcione correctamente.

Saludos,

elreypic.

Hola elreypic2,
Al igual que vos lo simule, y funciona perfectamente, el tema va en el montaje físico. Ya he probado el módulo en otros PC's, probé uno nuevo con mi PC y comprobé que no es el problema. Ahora el pic lo cambie por uno nuevo, cambie de protoboard para estar seguro que no fuera eso también y sigue sin andar. Voy a probar como me indicaron arriba y les comentaré.

Gracias por su colaboración.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Comunicacion Serial RS232
« Respuesta #9 en: 20 de Junio de 2019, 19:27:24 »
¿Qué software estás usando para enviar el dato serial desde la computadora? ¿Hyperterminal?
¿Cuál es la configuración que estás usando para ese software?

elreypic

Desconectado javalenciab90

  • PIC10
  • *
  • Mensajes: 11
Re:Comunicacion Serial RS232
« Respuesta #10 en: 23 de Junio de 2019, 15:18:33 »
remi04, ya probé lo que me indicaste y sigue igual, no muestra nada.

¿Qué software estás usando para enviar el dato serial desde la computadora? ¿Hyperterminal?
¿Cuál es la configuración que estás usando para ese software?

elreypic

Estoy usando el monitor serial de mismo PIC C compiler y otro llamado Hercules. Las configuraciones son iguales -> bits=8, baud=9600, parity=N.

Sigo sin obtener resultados.  :?

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Comunicacion Serial RS232
« Respuesta #11 en: 23 de Junio de 2019, 18:42:10 »
Lo único que sé me ocurre ya entonces es que el interface rs232 que estás usando esté enviando el dato invertido.

Prueba al cambiarlo en la configuración del terminal que estás usando a ver si puedes activar dato invertido y prueba.

Desconectado javalenciab90

  • PIC10
  • *
  • Mensajes: 11
Re:Comunicacion Serial RS232
« Respuesta #12 en: 24 de Junio de 2019, 16:35:54 »
Hola, retomé todo desde cero a ver que tal, y sigo sin obtener el resultado que quiero.

Código: [Seleccionar]
#include <16f877A.h>
#FUSES XT,NOWDT
#USE delay (clock = 4M)
#USE RS232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#BYTE TRISB = 0x86
#BYTE PORTB = 0x06

#define LCD_ENABLE_PIN  PIN_B0
#define LCD_RS_PIN      PIN_B1
#define LCD_RW_PIN      PIN_B2
#define LCD_DATA4       PIN_B4
#define LCD_DATA5       PIN_B5
#define LCD_DATA6       PIN_B6
#define LCD_DATA7       PIN_B7

#include <lcd.c>

char valor;

#int_rda       // Interrupción por dato recibido por rs232
void serial_isr(){
   valor = getc();
   putc(valor);
}

void main(){
   TRISB = 0x00;
   // Habilito las interrupciones
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RDA);
   
   lcd_init();
   lcd_gotoxy(1,1);
   lcd_putc ("Prueba RS232");
   
   while(true){
      lcd_gotoxy(1,2);
      printf(lcd_putc, "ch = %c", valor);
      delay_ms(2000);
   }
}

- El código anterior me funciona perfecto en la simulación, pero no en la realidad. Aca dejo las imágenes.
En la simulación envio el caracter ´a´ y como se ve en el LCD se muestra el caracter que envié. Cuando lo hago de manera fisica en la protoboard sale un simbolo que no es el que envié.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Comunicacion Serial RS232
« Respuesta #13 en: 24 de Junio de 2019, 17:56:54 »
Yo es que los simuladores no los he usado jamás por que no. Prefiero siempre usar tarjetas de desarrollo, ni siquiera protoboard.

  Veo que en la interrupción tal y como recibes un carácter lo reenvías de vuelta a la terminal.  La pregunta es, ¿ la terminal recibe bien ese eco?? 


Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Comunicacion Serial RS232
« Respuesta #14 en: 24 de Junio de 2019, 21:49:07 »
Yo es que los simuladores no los he usado jamás por que no. Prefiero siempre usar tarjetas de desarrollo, ni siquiera protoboard.

Yo también detesto los simuladores, no los he utilizado en mi vida, donde se ponga la placa real con tu Debug, no hay nada mejor.

En mi caso, no uso protoboards, pero tampoco me gustan las tarjetas de desarrollo, salvo el Teensy que lo he usado en algunos casos.

Prefiero diseñar la placa y enviar a fabricar el PCB a los chinos, por unos pocos dólares tienes la placa en tu casa en una semana. Muchas veces, por comodidad, he pedido placas que solo iban a servir para pruebas, aunque luego vayan al cajón de los recuerdos o a la basura. No vale la pena liarse con una protoboard con mil cablecitos o con una tarjeta de desarrollo que también lleva su curro.

« Última modificación: 24 de Junio de 2019, 21:52:35 por planeta9999 »