Autor Tema: Caracteres extraños en modulo USART [SOLUCIONADO]  (Leído 6369 veces)

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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Caracteres extraños en modulo USART [SOLUCIONADO]
« en: 07 de Marzo de 2018, 18:56:52 »
Hola alguien puede ayudarme con este código:
Código: C
  1. #define _XTAL_FREQ 8000000
  2. #include <xc.h>
  3. #include "config_bits.h"
  4.  
  5. void setupClock(void);
  6. void configurarUSART(void);
  7. void envia_caracter(unsigned char);   // función para la transmisión de caracteres
  8. void envia_cadena(const char*); // función para la transmisión de cadenas de caracteres
  9.  
  10. void main(void) {
  11.    
  12.     setupClock();   // Internal Clock to 8MHz
  13.     configurarUSART();  // Configuramos modulo USART
  14.    
  15.     while(1){
  16.         envia_cadena("PRUEBA MODULO USART");    // mensaje a enviar
  17.         envia_caracter(13); // usado para salto de linea
  18.     }
  19. }
  20.  
  21. void setupClock()
  22. {
  23.     OSCCONbits.IRCF0 = 1;
  24.     OSCCONbits.IRCF1 = 1;
  25.     OSCCONbits.IRCF2 = 1;
  26. }
  27.  
  28. void configurarUSART()
  29. {
  30.     TRISCbits.RC6 = 0;  // configuramos TX como salida
  31.     TRISCbits.RC7 = 1;  // configuramos RX como entrada
  32.     TXSTAbits.SYNC = 0; // habilitamos modo asincrono
  33.     TXSTAbits.BRGH = 1;
  34.     BAUDCONbits.BRG16 = 0;  // configuramos para alta velocidad
  35.     SPBRGH = 51;    // 9600 baud
  36.     RCSTAbits.SPEN = 1;     // habilitamos el puerto serie
  37.     TXSTAbits.TX9 = 0;  // seleccionamos tx a 8 bits
  38.     TXSTAbits.TXEN = 1; // habilitamos transmision
  39. }
  40.  
  41. void envia_caracter(unsigned char caracter){
  42.     while(TXSTAbits.TRMT==0);   // mientras el registro TSR esté lleno espera
  43.         TXREG = caracter;   // cuando el el registro TSR está vacio se envia el caracter
  44. }
  45.  
  46. void envia_cadena(const char *cadena){ // cadena de caracteres de tipo char
  47.     while(*cadena != 0x00){ // mientras el ultimo valor de la cadena
  48.                             // sea distinto al caracter nulo
  49.         envia_caracter(*cadena);
  50.         cadena++;   // incrementa la ubicación de los caracteres en cadena
  51.                     // para enviar el siguiente caracter de cadena
  52.     }
  53. }

al parecer esta bien ya que compila sin errores pero al visualizarlo en consola me aparecen caracteres extraños.
PD: La configuración en la consola es correcta aunque en un principio pensé si seria una mala configuración en la velocidad en baudios.

Gracias.
« Última modificación: 11 de Marzo de 2018, 05:20:23 por Miquel_S »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Caracteres extraños en modulo USART
« Respuesta #1 en: 07 de Marzo de 2018, 20:06:09 »
Asegurate que la cadena tenga la terminación 0x00
Código: C
  1. envia_cadena("PRUEBA MODULO USART\0");

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re:Caracteres extraños en modulo USART
« Respuesta #2 en: 08 de Marzo de 2018, 18:40:33 »
Gracias tsk he probado de añadir el \0 al final de la cadena pero sigo con el mismo problema.

Saludos!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Caracteres extraños en modulo USART
« Respuesta #3 en: 08 de Marzo de 2018, 19:23:15 »
Que tal Miguel_S,

Dependiendo del microcontrolador, algunos necesitan que declares el pin del TX como entrada (tal es el caso del PIC16F628A). En otros no es necesario definir los puertos de TX y RX, una vez confogurado el USART estos pines son confogurados automáticamente.
En caso de que necesites declararlo como salida (mediante el registro TRISx) asegurate que el estado inicial sea "alto".

Saludos,

elreypic.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re:Caracteres extraños en modulo USART
« Respuesta #4 en: 08 de Marzo de 2018, 19:42:37 »
Hola elreypic2 ya probe anteriormente de añadir al principio del main el
Código: C
  1. TRISC = 0x00;
pero con el mismo resultado.

Gracias.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Caracteres extraños en modulo USART
« Respuesta #5 en: 08 de Marzo de 2018, 22:23:41 »
Yo no veo nada malo en el codigo, ya calcule los valores de los registros y esta correcto, los unicos problemas que se me ocurren son:

- La frecuencia no es la declarada
- Error de configuracion en el extremo receptor
- Algun problema en el hardware que une estos 2 dispositivos.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Caracteres extraños en modulo USART
« Respuesta #6 en: 08 de Marzo de 2018, 23:36:54 »
Hola elreypic2 ya probe anteriormente de añadir al principio del main el
Código: C
  1. TRISC = 0x00;
pero con el mismo resultado.

Gracias.

Que tal Miguel_S;

A lo que me refiero es que el estado del puerto de salida este en un nivel alto. En tu caso es el puerto RC6. No uso XC compiler, pero puedo asumir que seria algo así (KILLERJC, por favor corrigeme en caso de ser necesario, jejeje):

PORTCbits.RC6 = 1;   //Asegura que el puerto de RC6 generará un nivel alto cuando este se defina como salida
TRISCbits.RC6 = 0;   //Configura puerto RC6 como salida

Espero que esto te sirva.

elreypic.


Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re:Caracteres extraños en modulo USART
« Respuesta #7 en: 09 de Marzo de 2018, 05:31:00 »
Hola elreypic2 ya probe anteriormente de añadir al principio del main el
Código: C
  1. TRISC = 0x00;
pero con el mismo resultado.

Gracias.

Que tal Miguel_S;

A lo que me refiero es que el estado del puerto de salida este en un nivel alto. En tu caso es el puerto RC6. No uso XC compiler, pero puedo asumir que seria algo así (KILLERJC, por favor corrigeme en caso de ser necesario, jejeje):

PORTCbits.RC6 = 1;   //Asegura que el puerto de RC6 generará un nivel alto cuando este se defina como salida
TRISCbits.RC6 = 0;   //Configura puerto RC6 como salida

Espero que esto te sirva.

elreypic.

Hola elreypic2 he probado lo que comentas y el error no viene por ahí, tendré que seguir investigando aunque no tengo muy claro que probar.

Gracias a los dos por vuestra ayuda
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re:Caracteres extraños en modulo USART
« Respuesta #8 en: 09 de Marzo de 2018, 16:07:48 »
Nada no doy con el error, he cambiado de terminal, de ordenador y nada sigo igual toca seguir investigando.

Saludos!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Caracteres extraños en modulo USART
« Respuesta #9 en: 09 de Marzo de 2018, 16:45:08 »
Los caracteres extraños en que consisten?? ¿En que parte de la cadena aparecen, principio, final, a la mitad, o en cualquier sitio???

¿Afecta tambien a los caracteres de uno en uno individuales??

   Puedes probar con un cristal exterior multiplo de rs232.

  ¿Que % de error tiene tu configuracion brgh, brg a 8 Mhz??


Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re:Caracteres extraños en modulo USART
« Respuesta #10 en: 10 de Marzo de 2018, 12:12:50 »
Los caracteres extraños en que consisten?? ¿En que parte de la cadena aparecen, principio, final, a la mitad, o en cualquier sitio???

¿Afecta tambien a los caracteres de uno en uno individuales??

   Puedes probar con un cristal exterior multiplo de rs232.

  ¿Que % de error tiene tu configuracion brgh, brg a 8 Mhz??
Hola remi04 el error en la configuración de brgh es de -0.16 y los caracteres aparecen siempre,adjunto imagen:


Saludos!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re:Caracteres extraños en modulo USART
« Respuesta #11 en: 10 de Marzo de 2018, 14:02:33 »
Creo que estás recibiendo los caracteres invertidos.
Qué usas para conectar el pic a la pc?

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Caracteres extraños en modulo USART
« Respuesta #12 en: 10 de Marzo de 2018, 14:23:53 »
Podrías usar una analizador lógico para comprobar que el PIC si esté enviando de forma correcta la información.

Si el pic lo hace bien, entonces prueba cambiando el adaptador RS232-USB

Si no cuentas con un analizador lógico pon la salida en Hex, y trata de comparar con lo que estás enviando, a ver si con eso encuentras cual podría ser el problema. Envía cadenas con las que puedas visualizar cualquier desplazamiento, errores de muestreo o incluso como ya mencionó pablomanieri caracteres invertidos, 0xAA -> 10101010

Código: [Seleccionar]
1 0 10101010 1 1 0 10101010 1 1
   i     8bits      s    i   8bits       s

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re:Caracteres extraños en modulo USART
« Respuesta #13 en: 10 de Marzo de 2018, 16:08:34 »
Gracias de nuevo a los dos, voy a hacer las pruebas que comentáis, probare con el analizador lógico si consigo que me funcione, aunque al no tener claro lo que instalar lo veo difícil, lo que tengo es uno compatible con Saleae pero del software de la pagina https://sigrok.org/wiki/Downloads no se que instalar, si alguien lo sabe agradecería la ayuda.
Saludos y os iré contando.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Caracteres extraños en modulo USART
« Respuesta #14 en: 10 de Marzo de 2018, 16:16:25 »
Si es compatible puedes probar con el software original

https://www.saleae.com/downloads