TODOPIC
FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: dogflu66 en 12 de Enero de 2011, 14:15:39
-
Estoy pensando en como podría concentrar tres entradas de datos RS232 y posteriormente enviarlas por una única salida RS232. ¿Existe algo en el mercado que lo haga?.
-
¿Cabe en una única salida lo que llegue por las tres entradas?, ¿es que vas a triplicar los baudios a la salida?
-
Hola, no se si es correcto lo que te vaya a decir, en mi caso necesitaba manejar un GPS, un módulo GPRS o dos dispositivos adicionales series, como el micro no tenia tantas UARTs incorporadas no me quedo otra opción que colocar un 4052 ( Mux/Demux)
Eso si solo puede estar activa una sola comunicación al mismo tiempo.
Saludos !
-
Es algo parecido a lo que indica RICHI777, son tramas que se repiten 1 vez por segundo y son de unos 30bytes de media a 4800Baudios. Y si se pierde alguna no pasa nada, ya que repite tramas durante varios segundos. Tenía pensado crear 3 búfer con sendos micros, cada uno conectado (a un único micro maestro) a un bus común de salida y 1bit para cada uno de selección y BIT indicador de datos en búfer. Pero esto es mucho trabajo, era por si alguien había encontrado algún tipo chip que lo hiciera o en su defecto tres uart independientes con su búfer incluido.
-
Hola, tal vez algun micro con dos UART y agregar algun UART externo ( Maxim tiene uno con conexión SPI ), lo que si no conozco que tenga buffer de muchos bytes.
Saludos !
-
Para 30 bytes y 4800 baudios, creo que te podría servir perfectamente meterle las UART por software.
Si utilizas un micro que tenga 3 interrupciones externas, las combinas con un Timer para conocer los anchos de los pulsos y ya lo tienes.
-
Pero son tramas completas, no puedo mezclar los bytes recibidos. Las tramas tienen cabecera y fin de trama, si se mezclan los bytes ya no son operativas
-
Meditando un poco más lo que indica Manolo, seria crear una función que procesa las tres interrupciones. Cuando se produce una interrupción la función toma el valor del timer, lo asociado al Pin que provocó la interrupción y esperamos el siguiente cambio de estado, volvemos a tomar el valor del timer y, calculamos para ir obteniendo el BIT de cabecera, BIT que va conformando el byte de datos y BIT de parada. Que se irán almacenado los bytes en respectivos búfer tipo fifo, que otra función se encargara de ir vaciando de forma ordenada por tramas completas. Resumiendo; crear una función de Rx de tres entradas que maneja la capa de bajo nivel del Rs232. Esta función genera tres búfer internos que son vaciados de forma ordenada por una salida de Tx tipo Rs232, en este caso para simplificar software mejor mediante modulo uar. Y todo esto un solo “micro”. Necesitaría un micro con mucha memoria ram para alojar los búfer y posiblemente 40Mhz de reloj, tendría que ser seguramente de la familia 18....?.
-
Sí, pero no creo que necesites un micro tan cañero. Al fin y al cabo son 4800 baudios. Por mucho que las tramas no paren de llegar, cada bit dura 208us, tiempo en el que a cualquier micro le dará tiempo a muchas cosas.
-
Hay placas com multipuertos o mejor aun placas que se conectan a ethernet y tienen hasta 24 ports configurables con velocidades independientes cada uno.
-
Estoy pensando que si estás seguro que siempre serán 4800 baudios, no necesitarás interrupciones externas.
Tu hardware se limitaría a un Timer, programado para que interrumpa cada 208us. En esa interrupción miras los tres pines de entrada. En estado de reposo verás un "1". Cuando uno de ellos te enseñe un "0" sabes que comienza a recibir un byte; en las 8 interrupciones siguientes vas completando el byte y luego compruebas que ha llegado un "1" como bit de stop.
Da igual que el timer no se sincronice con el flanco de bajada o subida, porque como es asíncrono, la única precaución a tomar es que los 4800 baudios corran exactamente a ese ritmo.
-
Ese 4052 es un excelente opcion, no lo conocia, justamente necesita una solucion de ese tipo, muchas gracias!!
-
Hola, el comentario de Nocturno es super válido, lo que se estila es centrar la lectura del bit. Es recomendable cuando se implementa una UART por soft setear el pin de RX como interrupción por flanco descendente, para poder detectar el bit de start. Una vez ocurrido esto se espera por la mitad del bit, en tu caso 104 us que es la mitad de los 4800 baud y producir a partir de lecturas periodicas por 208 us, eso te asegura que siempre leas los 9 bits restantes en la mitad. Tecnicas mas complejas implementan mas lecturas por bits manejadas por una maquina de estados para poder eliminar ruidos.
Ese 4052 es un excelente opcion, no lo conocia, justamente necesita una solucion de ese tipo, muchas gracias!!
Si es una buena opción, en mi caso tuve que colocar resistencias de pull-up es las lineas TX ya que los canales que estan desactivados se leen como estados 0 y el receptor me los toma como bit de start o datos breaks.
Saludos !
-
Si es una buena opción, en mi caso tuve que colocar resistencias de pull-up es las lineas TX ya que los canales que estan desactivados se leen como estados 0 y el receptor me los toma como bit de start o datos breaks.
gracias por el tip ;-)
-
Ok, haré unas pruebas con tranquilidad porque tengo que terminar algunas cosas antes, pero prometo informar de la solución.
-
Podrias usar rs485
-
¿Como se ria con el RS485?.
-
Hola Dogflu66!
lo puede hacer, si te fija en el CANBUS,SNAP y MODBUS, son protocologo escrito para comunicarse entre si, pero es un trabajo muy jodido hacerlo, poner todos los pic que se comuniquen entre si. osea todos modulo MASTER/SLAVER, ya el DMX512 trabaja asi, no es que quiero que te meta ahora en el DMX512 :D :D, sino para que tenga una idea, y como dice Manolo, trabajando al mismo Baudrate no tendra ningun problema. esa es la historia de los protocologo, todos se comunicacion con su mismos Baudrate.
Saludos
-
En este caso el protocolo no me asusta.:mrgreen:
El problema lo veo en que tengo que leer los tres puertos al mismo tiempo, y con el RS485 hay que compartir el tiempo en el bus, o sea, no puedo hacer las tres cosas a la vez. Bueno, con el otro sistema tampoco, pero se aprovecha toda la potencia del micro, mientras que con el RS485 no se puede. A no ser que fuesen 3 uart con sus respectivos búfer trabajando bajo RS485 como salida de datos y la entrada de datos fuese independiente al RS485. O si no estoy en lo cierto, me lo tendrían que explicar científicamente.
-
Hola.
RS485 full duplex .... pero no se pueden leer las 3 tramas al mismo tiempo. Si hay que leer al mismo tiempo ... toca implementar las USART por soft como dice el maestro Noc.
Saludos
-
Da igual que el timer no se sincronice con el flanco de bajada o subida, porque como es asíncrono, la única precaución a tomar es que los 4800 baudios corran exactamente a ese ritmo.
No entendí bien eso. El bit de START del protocolo RS232 existe precisamente para poder sincronizar y mantener el error de tiempos entre las partes que se comunican lo mínimo posible. Si no sincronizas el bit START de cada entrada con el timer, seguramente vas a recibir datos erróneos cada cierto tiempo.
Una opcion sencilla seria, una vez obtenidas las señales TTL de entrada seriales, someterlas a una triple compuerta AND y el resultado a la entrada hardware de la USART del uC. Obviamente si mas de un dispositivo transmite a la vez, los daños van a ser probablemente destruidos. Fuera de eso, si puedes identificar a cada dispositivo por tan solo el contenido de sus mensajes, no lo veo inviable.
Saludos.
-
A lo que me refiero, es que si miras la señal justo a una frecuencia de 4800 baudios, dará igual si pillas el bit justo al principio, en medio, o justo al final, porque todos los bits los pillarás a la misma altura.
De todas formas, si se sincroniza con el flanco y se espera medio periodo, será mucho más fiable.
-
Por si te sirve :lol:.
http://ww1.microchip.com/downloads/en/DeviceDoc/DS-61156B.pdf
Saludos
-
A un que me sirviera, no tengo herramientas para poder trabajar con el. :8}
-
Por si te sirve :lol:.
http://ww1.microchip.com/downloads/en/DeviceDoc/DS-61156B.pdf
Saludos
:shock:
Que belleza!!!!!!
-
Hola compañeros
Estoy haciendo mi proyecto de tesis que consiste en tomar la lectura de los medidores de luz a travez de la red celular gsm, los medidores son electronicos y estos son los que se estan instalando actualmente en mi pais ecuador, pero a pesar de ser electronicos la lectura es analogica y se la toma de forma manual. Ya diseñe el circuito microcontrolado que cuenta los pulsos que envia este medidor y logro envir la lectura de los KWH por medio de sms, adicional puedo cortar y reconectar la energía sique no se ha pagado la mensualidad por consumo. Todo este proceso funciona perfecto pero para un medidor.
Ahora lo que quiero es poder tomar la lectura con un solo modem gsm de varios medidores por lo menos unos 5, enviando un comando via sms que distinga de cual medidor quiero tomar la lectura, cortar o reconectar el suministro. Pero no se como hacer para poder comunicarme con los otros pics que van a estar instalados en cada medidor y pasar sus lecturas al pic principal y este enviar via sms a traves del modem dicha lectura.
Espero sus sugerencias amigos, no me fallen
Gracias