Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

04/01/2013 #1

Avatar de masterk

Recibir datos simultaneamente de multiples RS232 con PIC
Hola que tal amigos del foro, me gustaria que me ayuden con este problemita que tengo, aqui va.

Me encuentro realizando un proyecto en el cual tengo que recibir datos por 3 puertos RS232, el problema yace en que en algun momento 2 o 3 puertos enviaran sus datos al mismo tiempo o simultaneamente, en caso de presentarse este problema me gustaria recibir todos los datos sin perder ninguno, adjunto una imagen para que me comprendan mejor.

Estube pensando en estos 2 diagramas, pero cada uno tiene problemas.
Usart por harware:
1º - colision de datos

Usart por software:
1º - en cuanto estoy recibiendo 1 dato, pierdo el otro.


Espero q me puedan ayudar, de antemano muchas gracias
04/01/2013 #2

Avatar de Scooter

Olvida la usart por software, es absolutamente inútil para cosas serias

Puedes apñliar cuantas usart quieras externamente. Hay dispositivos SPI con buffer FIFO
04/01/2013 #3

Avatar de Daniel Meza

¿Implementando por software y utilizando TDM (Multiplexión por división de tiempo)?, obviamente a una velocidad mayor que la de transmisión
05/01/2013 #4

Avatar de Scooter

En serio; las uart software solo sirven para jugar, sus dos características fundamentales son:
Velocidad ridícula y 100% de cpu ocupada
Con esas dos premisas, sobre todo la segunda, ya no puedes hacer absolutamente NADA mas, el sistema está totalmente MUERTO mientras esperas datos.

Uart software de salida para tráfico muy muy ligero, aún se puede plantear: Como tu sabes cuando emites decides si hacerlo o no. Si estás esperando datos y no sabes exáctamente cuando entran no puedes hacer nada mas que esperar...
05/01/2013 #5

Avatar de masterk

ok, ya me quedo claro, utilizar un multiple UART por hardware , me recomiendan alguno que sea barato y facil de conseguir??
05/01/2013 #6

Avatar de chrisck87

La idea de usar un spi es muy buena, particularmente no conozco ningun dispositivo de ese tipo para comunicación serial, si he trabajado con seriales/paralelo, pero para comunicación rs232 no, en caso no consigas ese dispositivo, puedes usar un pic para recibir cada dato, pics baratos como el 16f88, serian 3, y estos se comunicaria con un pic principal, que podria ser un 16f88 también u otro el que gustes, y la comunicación entre ellos lo puedes hacer por i2c teniendo al princial como maestro i2c y a los otros 3 como esclavos, de esa maner también puedes determinar exactatmente quien envia que dato y podrias organizarlo mucho mejor.
05/01/2013 #7

Avatar de Scooter

Busca en la web de maxim, me suena que hay varios.
06/01/2013 #8

Avatar de chrisck87

Scooter dijo: Ver Mensaje
Busca en la web de maxim, me suena que hay varios.
Sabes si el proteus tiene alguno de esos dispositivos disponibles en simulación?
06/01/2013 #9

Avatar de Scooter

No lo se, no me gusta simular.
07/01/2013 #10

Avatar de lpnavy

Puedes usar el protocolo RS485 si es que quieres tener una comunicacion serial multipunto.
08/03/2013 #11


Conexión de 3 Pic por RS232 entre ellos
Hola:

Estoy tratando de conectar 3 Pic entre sí usando la usart. El sistema se compone de una placa con un PIC que hará de "maestro" y será el que reciba y envíe datos al pc, y a la vez envía ciertos datos recibidos del PC a otros 2 PIC en otras placas. Esto me funciona bien, los otros 2 Pic reciben los datos correctamente. Lo que no me funciona nada bien es cuando alguno de estos dos "esclavos" mandan algo al maestro, muchas veces no llegan estos datos, seguramente por problemas de colisiones o no se.

Las placas están bastante cerca y no utilizo max232, va conectado directamente uno a otro. ¿Cómo puedo controlar que no está enviando ninguno para poder utilizar el bus?

Un saludo y gracias
08/03/2013 #12

Avatar de Scooter

El 232 no es multipunto así que mejor usa el RS485 que si que lo es.
Eso o tener dos uart en el maestro.,

Bueno, si están tan cerca que es conexión directa, pon una linea de "enable" a cada esclavo para darle permiso para hablar, eso o usa un I²C o SPI que si que son buses multipunto
08/03/2013 #13


I2C ya lo probé otra vez y me daba problemas con no muy buenos cables y a cierta distancia. 20 cm no llegaba ya. La librería de RS485 de CCS no la entiendo, y con las pruebas que hice no logré sacar nada en claro.
¿La línea de "enable" vale definirla en el "#use rs232.......enable=..." o te refieres a que la programe yo?
Había pensado en utilizar un pin para ponerlo a nivel alto justo antes del "putc()" y a nivel bajo después, pero no sé si en la usart hay otro tráfico después de estas instrucciones que hable entre ellos.
08/03/2013 #14


lo mas practico para no usar otro cable ademas de los de transmision y recepcion es usar un enable mediante firme, lo que harias es que a cada pic esclavo le daras un nombre y que el maestro este constantemente preguntando a cada pic su status, por ejemplo al primer esclavo le llamas A y al segundo le llamas B.
cuando los esclavos reciban el caracter responderan ya sea activando una salida o enviando su status al maestro.

Algo asi como lo que haria un escaner CAN, deberias rebizar las librerias CAN son bastante buenas.
08/03/2013 #15


Voy a simular esto último con el proteus, que ahora no me encuentro en casa. He probado en proteus tambien lo de una linea de enable, y no se porque, uno de ellos no envia si el otro está conectado. El programa está bien, porque por separado funciona, pero juntos, siempre es el mismo el que no envía

---------- Actualizado después de 4 minutos ----------

Lo estoy simulando y llamando a los Pic "A" (maestro) "B" y "C", el C no responde si está conectado el TX del B. ¿Será un fallo del proteus? En cuanto suelto la linea TX del B, el C empieza a enviar. (O a recibir el maestro)
08/03/2013 #16

Avatar de Scooter

¿Estás usando uarts software?

Lo del enable me refería a usar un pin cualquiera y antes de empezar a transmitir comprobar ese pin a ver como está.
08/03/2013 #17

Avatar de chclau

Que quiere decir que un UART no transmita? Hasta donde yo se un UART no puede entrar en estado de alta impedancia. Para mi lo mas logico es que cada esclavo se conecte al master por lineas separadas, un Tx y Rx dedicado por cada eslavo, y no hay necesidad de lineas enable.
08/03/2013 #18


Lo uso por hardware, y ya he probado que poniendo la opción "enable=..." en el #use rs232 hace eso, pone el pin a 1 cuando va a transmitir y lo pone a 0 al terminar. Probaré mañana en casa con el circuito real a ver si funciona, porque con el proteus no, hace cosas raras. Y si no funciona en el circuito, tendré que plantearme el i2c.
Saludos
08/03/2013 #19

Avatar de chclau

Exactamente, eso es hacer disable en 232, poner la linea a 1. No podes hacer bus con 232, para mi le tenes que dar a cada uno su conexion dedicada.
08/03/2013 #20

Avatar de Scooter

Puedes poner unos buffer triestado en los tx de los emisores. Cuando el maestro habla habla para todos y cada uno sabe si le interesa o no, para contestar los esclavos que solo contesten cuando se les pregunte y entonces se activan su buffer triestado para hablar. Eso o algún juego con resistencias para que no choquen las líneas.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.