Problema adaptador usb/serie

Hola, soy nuevo en la comunidad y quisiera ver si pueden ayudarme con un temita que me tiene medio preocupado hace un tiempo.

Actualmente estoy terminando mi proyecto final de ingenieria, el cual consta de un adquisidor de datos de 64 canales, los cuales envía a una terminal(computadora), respetando el estándar RS232(9600,8,N,1). Debido a que no tengo PC de escritorio y a que la notebook que estoy utilizando para programar y probar el equipo no cuenta con un puerto serie, me compré un adaptador usb/serie para poder llevar a cabo las pruebas vinculadas con la transmisión de datos.

El problema esta en que, al parecer, éste no me esta funcionando muy bien. Básicamente, el equipo que construí(un sistema embebido cuyo CPU es un pic18), esta programado para que al encenderse, envié un mensaje a la terminal. Si mediante el hiperteminal(hp de aquí en adelante) me conecto al puerto antes de encender el equipo, al encenderlo no recibo dicha información. Sólo la recibo, si con el hp me desconecto y conecto nuevamente. Lo mismo me pasa con otros datos que envía el circuito.
Muchas veces pasa que cuando me desconecto y conecto, lo que recibo es el ultimo byte enviado por el circuito de manera repetida. La cuestión es que a veces anda mal y a veces anda muy mal. El adaptador es uno chino (verde transparente con cable) que dice tener un prolific PL203 como engine.

A primera vista parece ser un tema de buffers o algo así, la cuestión es que le toque todas las configuraciones que tiene (buffer E/S, velocidad, etc.) y no logre ningún resultado favorable o distinguible.

Desde ya estoy agradecido por haber encontrado un espacio en dónde compartir mi situación. Espero alguien pueda darme una manito.

Muchas gracias de ante mano.

Atte. Lucas
 
Hola, puedes hacer la siguiente prueba, une los pines 2 y 3 del adapatador usb-serie, para ver su funcionamiento
 
Hola 1024. Muchas gracias desde ya por tu aporte. Respecto al loopback que me propones, te cuento que ya lo he hecho y me ha pasado que funciona bien (recibo los datos que envío), salvo que si le saco el punte por unos minutos y luego vuelvo a intentar transmitir datos, no recibo respuesta alguna. En ese caso sólo responde nuevamente si conecto y desconecto el adaptador.

Espero te sirva esta información y puedas así seguir ayudándome.

Gracias nuevamente.
 
Ya he probado con el HP private edition, con el nativo de windows, con el realterm y con un programa echo por mi en C#, por lo que dudo que el problema este en el software.

Igual, gracias por el aporte.
 
Hola, al parecer es problema fisico del adaptador, puedo sugerir lo siguiente, alimenta el adaptador con una fuente de energia distinta a la del puerto usb
 
Yo pienso que el problema debe estar en el controlador del adaptador. Para hacer lo que me sugeris tendría que cortar el cable del mismo, por eso antes de hacerlo, quisiera preguntarte a que conclusión pensas que podemos llegar teniendo en cuenta el resultado de la prueba.
 
Pienso que como tu dices es problema del controlador, no es necesario que cortes el cable podrias conseguir un conector usb tipo a hembra
 
Voy a intentar de hacerlo. Por ahora voy a investigar un poco más acerca de los drivers y demás, ya que el trabajo me dificulta poder hacer compras "electrónicas". Igual me gustaría seguir recibiendo tus aportes y desde ya te agradezco por los que me has echo.
 
Hola 1024. Creo que finalmente voy a comprar otro adaptador con otro chip y ver que pasa. Estoy bastante ajustado de tiempo y tengo que hacer varias pruebas. Igual, te agradezco mucho por los aportes que hiciste. Espero poder ayudarte en algún momento.

Muchas gracias de nuevo.

Atte. Lucas
 
Amigo Lucas, según puedo percibir, el problema es una falla en el protocolo de conexión entre los dos terminales RX y TX. Te lo describo brevemente pues, en el momento no tengo un programa para generarte un diagrama de flujo apropiado:

1.- Tu equipo DAC envía una señal (Request To Send) a la terminal (PC) pero, según parece, no espera confirmación desde la PC para comenzar a transmitir los datos (DTR).
2.- Si el DAC no recibe DTR en un tiempo determinado, debe re-enviarse (RTS) hasta recibir la confirmación (DTR).
3.- Recibido (DTR), debe enviarse (Data Set Ready) a la terminal (PC) y esta
4.- iniciaría la transmisión enviando Clear To Send).

Si tu DAC no cuenta con la previsión de un protocolo similar, solo enviará el primer RTS y, al no recibir respuesta detendrá el proceso.

También deberás prevenir un corte en la comunicación y el reinicio del proceso una vez re-establecida ésta.

Deberás establecer varios loops a propósito, para mantener la comunicación.

Saludos y éxito:
 
Hola mcrven. Muchas gracias desde ya por el aporte. Antes de implementar tu solución, quisiera aclararte, que la interfaz que tengo con la PC desde el DAC, esta compuesta sólo por las líneas RX y TX. No contemplé las restantes lineas de control de comunicación para simplificar el diseño.

Cualquier cosa que necesites saber y que no haya aclarado en mis mensajes, por favor no dudes en consultarme.

¡Muchas gracias!
 
Te recuerdo que, via USB solo tienes dos líneas: RX y TX, los controles para la conexión y comunicación son emulados, enviados y recibidos a través de esas dos líneas, pero no significa que no existan o que no se deban implementar. Las máquinas no saben qué es lo que nosotros queremos que hagan, se lo tenemos que pedir con un lenguaje que ellas puedan entender: ordenes directas y tajantes, sin lugar a dudas ni interpretaciones.
No puede pensarse que, al encender tu PC, ésta pueda sospechar que el DAC podría haberle enviado un RTS (hardware, software o como sea), solo se quedará ahí, encendida y con el puerto esperando que haya algo entrando e interpretarlo. Este es el motivo por el cual, una vez que enciendes la PC, debes apagar y encender el DAC de nuevo: Así enviará el RTS, el único que envía, que será recibido por el puerto ya listo y escuchando. Faltando el resto del protocolo de conexión, posiblemente, el DAC enviará datos en cualquier momento y serán igualmente recibidos en cualquier momento y, por eso es que recibes solo partes de la info enviada.
Nosotros somos quienes debemos prever qué cosas pueden ocurrir y cómo queremos que ocurran.

Espero haberte podido ayudar. Saludos:
 
Última edición:
Hola mcrven. Gracias de nuevo por la información. Te pediría que me ayudes dándome un poco más de detalle acerca de la implementación de la solución, ya que no termino de comprender el problema. De ante mano te agradezco.

Hola h22. Gracias desde ya por unirte a la discusión. Voy a buscar un poco, que información hay en la web acerca de la marca que mencionas. Cualquier cosa te aviso.

Muchas gracias de nuevo.

Atte. Lucas.
 
Sinceramente, en mi personalmente uso la marca MANHATTAN y nunca eh tenido problema con ellos. Si eh usado otros genéricos y me han dado algún que otro dolor de cabeza.
Recomendación Manhattan, son algo caros pero el precio vale en su tiempo...
Salu2
 
Hola mcrven. Gracias de nuevo por la información. Te pediría que me ayudes dándome un poco más de detalle acerca de la implementación de la solución, ya que no termino de comprender el problema. De ante mano te agradezco.

Hola h22. Gracias desde ya por unirte a la discusión. Voy a buscar un poco, que información hay en la web acerca de la marca que mencionas. Cualquier cosa te aviso.

Muchas gracias de nuevo.

Atte. Lucas.

Insisto en que nada tiene que ver el convertidor.
Sube el diagrama del DAC y el código que cargaste en el PIC. Este último debería estar bien comentado para poder entender qué fue lo que inventaste.
Trataré de darte una mano. Y posiblemente se nos una alguien más.

Saludos:
 
Hola mcrven. Te adjunto el circuito del puerto serie de la placa. Las lineas TX y RX van directamente a los pines de la UART del micro:

im54851.png

(http://imageshack.us/photo/my-images/710/im54851.png)

Respecto al código, el sistema me funciona mal, aún haciendo una operación muy simple como es:

Código:
puts("PROYECTO FINAL");

Respecto a la configuración, utilizo la siguiente(compilador: CCS):

Código:
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

Si llegás a necesitar más información, pedímela que en cuanto puedo te la adjunto.

Muchas gracias por tu insistencia. Tengo el presentimiento que lograremos buenos resultados. ¡Por eso ya te voy dando las gracias!

Saludos cordiales.
 
Bien Lucas, me enviaste la imagen del circuito correspondiente al interfaz RS232. Yo me refería al diagrama completo: DAC + PIC + MAX232.
El código al cual me refiero es al que tú hiciste para el PIC y te pedí que lo envíes documentado. Me refiero a que le coloques los comentarios necesarios que describan lo que pretendes que el PIC haga en cada paso. Esto se puede incluir solo en el código fuente, en el compilado este no aparece.

Por otro lado, en tu primer post, indicas exactamente lo que te está ocurriendo:
... El problema esta en que, al parecer, éste no me esta funcionando muy bien. Básicamente, el equipo que construí(un sistema embebido cuyo CPU es un pic18), esta programado para que al encenderse, envié un mensaje a la terminal. Si mediante el hiperteminal(hp de aquí en adelante) me conecto al puerto antes de encender el equipo, al encenderlo no recibo dicha información.

Fíjate, dices claramente "...envíe un mensaje...", es uno solo ¿y después qué?
¿En qué consiste el "mensaje"?
¿Como sabe el PIC que el mensaje ha llegado a la PC?
¿Es acaso el mensaje un código RTS?

Cuando el puerto de la PC recibe el RTS y está listo, debe devolver al puerto de origen el código DTR. El PIC debe esperar ese código, luego de recibido debe enviar a la terminal (PC) el código DSR y cuando la PC lo recibe, devuelve CTS al PIC y es en ese instante cuando el PIC debe permitir que, el flujo de datos del DAC se inicie.

Como puedes ver, falta establecer un protocolo de conexión que indique a las dos terminales que ésta está establecida. A partir de aquí, el flujo de datos es transferido a la otra terminal mediante otro tipo de protocolo. El de mayor uso para esto es el protocolo Intel.

Ahora, cuando el PIC "...envíe un mensaje..." debe programarse para que espere recibir la confirmación de la terminal destino y, ésta espera se debe temporizar. Si, al cabo de un tiempo establecido, la señal de confirmación no es recibida, se debe re-enviar el mensaje de demanda (RTS). Esto debe repetirse hasta que la confirmación es recibida. Así no importaría si enciendes primero el DAC o la PC.

En las librerías de Microchip deberías poder encontrar módulos de software para estas funciones y éstos los podrías insertar en tu código.

Puede parecerte latoso y lento, pero te recuerdo que, en las computadoras, todo suceso o acción es parte de una secuencia. Una cosa sigue a la otra.

Voy a tratar de encontrar un pequeño libro que bajé un tiempo atrás, que trata sobre los protocolos de la comunicación. Si lo encuentro te paso el link.

De momento saludos y vamos paso a paso pues, si otros lo hacen nosotros no nos quedaremos atrás.
 
Última edición:
Atrás
Arriba