TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: DarkVect en 03 de Abril de 2009, 09:41:18

Título: Problema con RS-232 a más de 9600 baudios - SOLUCIONADO
Publicado por: DarkVect en 03 de Abril de 2009, 09:41:18
Hola amigos,

He estado buscando por el foro y no he encontrado nada respecto al problema que tengo:

Comunico un 16F819 a 4MHz con un PC a través de un MAX232. El PIC responde a ciertas teclas del PC enviado unos ciertos bytes de configuración interna. Todo funciona perfectamente hasta 9600 baudios. Si pongo 19200 empiezo a recibir bytes incorrectos y además hay algunos que no llegan.

A qué puede deberse?

El cable que uso es de calidad y mide 1,5 metros así que por ahí no creo que haya problema.

Gracias y un saludo!
Título: Re: Problema con RS-232 a más de 9600 baudios
Publicado por: MLO__ en 03 de Abril de 2009, 11:27:03
Hola.

Pues debe ser porque la USART es software ... intenta subirle al cristal del oscilador.

Saludos
Título: Re: Problema con RS-232 a más de 9600 baudios
Publicado por: DarkVect en 03 de Abril de 2009, 13:28:45
La UART es por software, estoy usando simultáneamente SPI para comunicarme con otro dispositivo y eso va bien. El cristal no puedo tocarlo, crees que sólo puede ser eso?
Título: Re: Problema con RS-232 a más de 9600 baudios
Publicado por: DarkVect en 14 de Abril de 2009, 13:41:57
He estado provando y sigo con el mismo problema, no hay forma de que envíe bien a 19200 bauds.

La única interrupción que utilizo es la el Timer2 a 20ms y comunico por SPI cada 0,5s. Como los puertos de la UART coinciden con los usados en SPI la comunicación RS-232 la emulo por software con el comando de CCS #use rs232(baud=19200, xmit=PIN_B1, rcv=PIN_B2).

Como digo, el cristal es de 4Mhz y creo que debería ir de sobras con él, no?
Título: Re: Problema con RS-232 a más de 9600 baudios
Publicado por: MLO__ en 14 de Abril de 2009, 15:25:44
Hola.

Coloca tambien FORCE_SW

Saludos
Título: Re: Problema con RS-232 a más de 9600 baudios
Publicado por: jeremylf en 14 de Abril de 2009, 20:43:13
Puede ser por el cristal, prueba con 20.


salu2.
Título: Re: Problema con RS-232 a más de 9600 baudios - SOLUCIONADO
Publicado por: DarkVect en 15 de Abril de 2009, 06:07:11
He añadido la instrucción DISABLE_INTS y ya funciona!!

#use rs232(baud=19200, xmit=PIN_B6, rcv=PIN_B7, BITS=8, PARITY=N, DISABLE_INTS)

Saludos!
Título: Re: Problema con RS-232 a más de 9600 baudios - SOLUCIONADO
Publicado por: Cryn en 15 de Abril de 2009, 11:40:26
DISABLE_INTS significa que deshabilitará las interrupciones cuando se ejecute rutinas de I/O en la UART?

te quedaste con 4MHz verdad?

un saludo
Título: Re: Problema con RS-232 a más de 9600 baudios - SOLUCIONADO
Publicado por: DarkVect en 15 de Abril de 2009, 15:19:01
Me he quedado con 4Mhz y 19200 que es lo máximo posible en este caso.

La instrucción DISABLE_INTS desahabilita las interrupciones durante el envío de UN caracter. Es decir durante 10 bits en una configuración 8N1 típica. A 19200 bps significa que como mucho, una interrupción se retarda 521us.

En mi caso ese retraso es totalmente permisble, así que todo ok.

Resumiendo:

El problema estaba en que a 9600 bps el tiempo de bit es suficientmente grande como para que salte la interrupción en medio, se sirva y al volver estemos todavía en el mismo bit. A 19200 eso ya no pasa y por lo tanto, la cagamos...

PD: la solución me la ha dado un gurú del foro de CCS.
Título: Re: Problema con RS-232 a más de 9600 baudios - SOLUCIONADO
Publicado por: Azicuetano en 15 de Abril de 2009, 17:12:17
Esas son las cosas que no se aprenden en los libros.

Gracias por el dato DarkVect!


Un saludo desde Alicante.
Título: Re: Problema con RS-232 a más de 9600 baudios - SOLUCIONADO
Publicado por: DarkVect en 16 de Abril de 2009, 06:34:38
De nada, para eso entramos todos al foro: para ayudar cuando podemos y ser ayudados cuando nos falla algo  :)