TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Robert91 en 24 de Junio de 2012, 19:19:57

Título: Ayuda con PIC16F877
Publicado por: Robert91 en 24 de Junio de 2012, 19:19:57
Buenas tardes,

Estoy haciendo un proyecto en el que tengo un PIC (PIC18F6722) que se le podria decir Maestro, y varios PIC (PIC16F877) esclavos comunicandose por medio de puerto serial (solo los pines Tx y Rx). Cuando mando informacion del maestro a los esclavos la informacion se recibe bien, pero al mandar informacion de un esclavo al Maestro marca corto circuito (la simulacion la estoy haciendo en PROTEUS). Destaco que todos los pines Tx de los esclavos estan conectados al mismo Rx del Maestro. Para resolver esto me habian dado la recomendacion de poner en alta impedancia los puertos Tx hasta que les toque el turno de transmitir, pero al hacerlo con la sentencia set_tris_c(0b11111111) (todo el puerto C como entrada), funciona para todos, menos para el pin Tx, de igual manera con la sentencia output_float().

Utilizo el compilado CCS, agradeceria mucho que alguien me pudiera guiar en esto, diciendome como poner en alta impedancia los puertos que no se usen, o alguna otra solucion.

Muchas gracias de antemano, Robert.
Título: Re: Ayuda con PIC16F877
Publicado por: rivale en 24 de Junio de 2012, 20:27:46
puedes poner diodos en cada pin TX de tus esclavos para evitar que se pongan en corto al enviar informacion.

Pero por otro lado, no es muy recomendable usar el rs232 para comunicar mas de 2 dispositivos, te recomiendo que uses otro protocolo, como el I2C o el SPI que ademas son mas rapidos que el rs232
Título: Re: Ayuda con PIC16F877
Publicado por: Robert91 en 24 de Junio de 2012, 20:36:50
Ya habia intentado poner Diodos, funciona para los cortos pero la informacion sigue sin llegar bien. Necesito que solo se habiliten al momento de enviar informacion, porque aunque los pines no esten transmitiendo siempre estan a 5V.

Sii habia pensado usar otro protocolo, pero por el momento me es necesario utilizar RS232, muchas gracias por tu recomendacion, pero si necesito una solucion que involucre el RS232.
Título: Re: Ayuda con PIC16F877
Publicado por: rivale en 24 de Junio de 2012, 20:56:38
podrias poner tu diagrama de conexion para poder darte mas ideas o ver donde esta el error
Título: Re: Ayuda con PIC16F877
Publicado por: Robert91 en 24 de Junio de 2012, 21:11:43
(http://img217.imageshack.us/img217/3141/dudaa.jpg)
Es un diagrama sencillo, ahi no se encuentra conectado el Tx del maestro, pero lo que esta conectado es basicamente con lo que tengo problemas.
Título: Re: Ayuda con PIC16F877
Publicado por: todopic en 24 de Junio de 2012, 21:37:30
Hola, para lo que quieres, tienes que implementar comunicacion RS485 ... hay info aqui en el foro, puedes usar el integrado sn75176  :mrgreen:
Y empleas tu comunicación 232, pero empleando estos integrados..
Saludos!

Norberto
Título: Re: Ayuda con PIC16F877
Publicado por: Robert91 en 24 de Junio de 2012, 22:24:36
Todopic, muchas gracias, creo que me podria ayudar, lei un poco pero sigue sin quedarme claro el como podria implementarlo. Tambien decir que el PIC maestro se va a estar expandiendo a cada vez mas PIC's, ¿si me podrias instruir un poco sobre como usarlo?, o un tema del foro donde pueda obtener las referencias.

Muchas gracias de nuevo todopic.
Título: Re: Ayuda con PIC16F877
Publicado por: diguito_69 en 24 de Junio de 2012, 22:38:09
En el esquema ese tendrías que invertir los diodos y poner una resistencia pull-up en el pin RX del maestro.

Saludos.
Título: Re: Ayuda con PIC16F877
Publicado por: Robert91 en 26 de Junio de 2012, 02:05:27
diguito_69, realce el diagrama como lo hiciste pero sigue resultando lo mismo. Sigo sin poder resolver el problema, ¿mas recomendaciones?
Título: Re: Ayuda con PIC16F877
Publicado por: diguito_69 en 26 de Junio de 2012, 03:19:04
Hola, probaste que la comunicación con solo un pic se realice correctamente.

Acá te pongo un diagrama de como yo te decía que lo hagas por si no me entendiste bien.

(http://diguito69.nixiweb.com/rs232.png)

Lo hice con terminales virtuales ya que no tengo tu código para probarlo y funciono bien. Pero tendría que funcionar igual con los pics.

La primer terminal representa al maestro y el resto a los esclavos.

Los diodos van de esa forma ya que en el estado de reposo en el pin tx siempre hay un "1", por lo tanto el diodo no conduce y la linea queda en alta impedancia, dejándola libre para los otros pics.

Saludos.
Título: Re: Ayuda con PIC16F877
Publicado por: Robert91 en 26 de Junio de 2012, 04:23:13
diguito_69, rivale y todopic, muchas gracias por sus respuestas acabo de solucionar el problema. Mi solucion es desactivar el uart completamente hasta que tenga que recibir o enviar datos con la funcion setup_uart(true/false), con esto ya puedo poner en alta impedancia los puertos y que ningune interfiera con otro.

Agradezco a todos por ayudarme y espero poder serles de ayuda en alguna ocasion   :-/ .
Título: Re: Ayuda con PIC16F877
Publicado por: diguito_69 en 26 de Junio de 2012, 05:01:02
Que bueno que solucionaste el problema. Igual te recomendaría que no conectes directamente los pines tx entre si.

Tendrías que ponerle una resistencia de protección a cada pin tx, por si llega a haber un error en algún pic y se hace un cortocircuito.

Saludos.