TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: _CMaGNo_ en 11 de Junio de 2006, 14:14:46

Título: Comunicacion Serial PIC16F877A
Publicado por: _CMaGNo_ en 11 de Junio de 2006, 14:14:46
Saludos!.

No si si este sea el lugar indiicado para publicar mi inquietud, si no lo es, disculpas de antemano. Mi problema es el siguiente:

Estoy tratando de establecer una comunicación serial entre el PIC y el PC pero aun no lo consigo. Estoy usando un PIC16F877A y un MAX232. El esquema de conexion que uso es el que se muestra en la figura http://www.iearobotics.com/proyectos/cuadernos/ct1/images/max232-conex.jpg

El micro lo he programado en CCS C. La configuracion para la comunicacion RS232 es la siguiente

Código: [Seleccionar]
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
Mi PC tiene un conector DB15 asi que uso un cable conversor DB15 a DB9 para realizar la conexion con el PIC segun lo indicado en la figura que les indique anteriormente. Cuando configuro el hyperterminal lo hago con COM1 a 9600 bps, 8 bits de datos, sin paridad, 1 bit de parada y control de flujo ninguno (tambien he intentado con control de flujo por hardware y tampoco funciona). Finalmente establezco la comunicacion.

En alguna parte de mi programa hago algo como puts("prueba") o printf("prueba") y se supone que en la ventana del hyperterminal deberia aparecer estas cadenas, pero no pasa nada .... Alguien puede decirme que estoy haciendo mal o que me falta?

Gracias de antemano!.

PD: El codigo de mi programa es algo como ...

Código: [Seleccionar]
#include <16F877A.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

void main()
{
   puts("prueba);

  // Aqui va el resto del codigo del programa ...
}
Título: Re: Comunicacion Serial PIC16F877A
Publicado por: RedPic en 11 de Junio de 2006, 14:21:58
Amigo _CMaGNo_

Dale un vistazo a Lo mínimo para comunicarnos vía RS232 Hardware y Software (http://www.todopic.com.ar/foros/index.php?topic=4620.0) para comparar lo que has realizado con lo que hice yo mismo para ver si encuentras donde puede estar el error.

Un saludo.
Título: Re: Comunicacion Serial PIC16F877A
Publicado por: _CMaGNo_ en 11 de Junio de 2006, 14:24:07
Se me olvidaba decir que hice una simulacion en el Proteus y en la Virtual Terminal aparecen las cadenas que envio. Asi que supongo que el problema no es de programacion del micro.

PD: En la simulacion no uso el MAX232, simplemente conecto los pines del micro RC6/TX y RC7/RX a RXD y TXD de la virtual terminal respectivamente.
Título: Re: Comunicacion Serial PIC16F877A
Publicado por: _CMaGNo_ en 11 de Junio de 2006, 14:27:48
Ok RedPic muchas gracias lo voy a revisar y te cuento.
Título: Re: Comunicacion Serial PIC16F877A
Publicado por: _CMaGNo_ en 11 de Junio de 2006, 18:42:54
Pues ya verifique mi circuito y todo esta segun lo explicas en el post que me pasaste redpic ... resultado ... no funciona. No se si sea un problema con mi puerto o quiza sea el hecho que mi puerto es DB15 y estoy usando un cable DB15 a DB9 ...  :(

Una cosa mas ... uso Win XP SP2 y como he leido que el XP bloquea puertos a ciertas aplicaciones, estoy usando el PortTalk para darle acceso al Hyperterminal a todos los puertos de mi PC y ... tampoco funciana  :(


Alguna sugerencia?

Gracias
Título: Re: Comunicacion Serial PIC16F877A
Publicado por: maunix en 12 de Junio de 2006, 00:06:35
Pues ya verifique mi circuito y todo esta segun lo explicas en el post que me pasaste redpic ... resultado ... no funciona. No se si sea un problema con mi puerto o quiza sea el hecho que mi puerto es DB15 y estoy usando un cable DB15 a DB9 ...  :(

Yo revisaría no haber puesto algún capacitor al revés (error muy común por cierto) en el MAX232.

Puedes probar tu hardware,  poniendo
1) una tensión de 0V en el extremo TTL y esperando obtener +12V en el extremo RS232. 
2) una tensión de 5V en el extremo TTL y esperando obtener -12V en el extremo del RS232

Esto no falla.

Podrías incluso hacer lo mismo con el extremo RS232.  Obviamente las señales varían rápido cuando transmites por TX y RX, pero podrías ingeniartelas haciendo un cable diferente y que ponga el RTS o DTR de la PC en donde iría ubicado el TX.  Esta señal la puedes variar a gusto con casi cualquier soft que maneje el puerto serie.


Una cosa mas ... uso Win XP SP2 y como he leido que el XP bloquea puertos a ciertas aplicaciones, estoy usando el PortTalk para darle acceso al Hyperterminal a todos los puertos de mi PC y ... tampoco funciana  :(

Es así (lo mismo con NT3.5, NT4.0, Windows 2000, Linux y los unix en gral) pero esto es para accesos directos al hardware. 

Si tu software accede al puerto serie no debieras tener problemas, estos traen algún controlador o driver que se comunica directamente el API de windows para acceder al puerto serie.

Saludos