• Sábado 21 de Diciembre de 2024, 10:57

Autor Tema:  Rs232 Con Rts/cts  (Leído 3220 veces)

jpaler

  • Miembro MUY activo
  • ***
  • Mensajes: 479
    • Ver Perfil
Rs232 Con Rts/cts
« en: Domingo 7 de Mayo de 2006, 01:58 »
0
Hola a todos !!!

Amigos, actualmente estoy comunicando un 16f877 con el pc a traves de
una aplicacion q hice en java, hasta ahora solo utilizo los pines Tx y Rx.

Algunas veces funciona bien y otras no.
Me he dado cuenta q todo es problema del sincronismo:

La aplicacion le envia un codigo y unos parametros para q el pic realize una
tarea y espera por la respuesta del pic.
La aplicacion no sabe cuando exactamente el pic ha terminado de procesar
o si sigue ocupado todavia.

Me he dado cuenta q necesito usar las banderas del puerto serial q indican
cuando el dispositivo esta listo para recibir/leer datos del puerto.
Creo q esas banderas se llaman algo asi como: RTS o CTS, no se exactamente.

Amigos, me gustaria q alguien me hechara una manito para poder sincronizar
el pic con el pc.

MUCHAS GRACIAS !!!

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Rs232 Con Rts/cts
« Respuesta #1 en: Domingo 7 de Mayo de 2006, 08:10 »
0
Hola Jpaler! No se exactamente como funciona la comunicación usando los protocolos, pero en una ocación me valí de dos líneas, una del PC al PIC y la otra en sentido contrario (no recuerdo cuales fueron, debería ver en el esquemático), desde el PC informaba al PIC que tipo de bloque de datos se le enviaba, y desde el PIC enviaba una señal para indicar que este estaba listo para recibir más datos.
Lo había hecho en VB y las líneas las controlaba por programa, no tube problemas.

Saludos

jpaler

  • Miembro MUY activo
  • ***
  • Mensajes: 479
    • Ver Perfil
Re: Rs232 Con Rts/cts
« Respuesta #2 en: Domingo 7 de Mayo de 2006, 17:52 »
0
gracias huguen... pero nose...

...,aun tengo muchas dudas de q es exactamente lo q tengo q hacer, mira esto:

Código: Text
  1.  
  2. //FUNCCION EN JAVA Q ENVIA DATOS AL PTO. SERIAL
  3. public synchronized void enviarCaracter( char c ) {
  4.  
  5.     this.puerto = ( SerialPort )this.idPuerto.open( this.usuario, 2000 );
  6.     this.flujoSalida = this.puerto.getOutputStream();
  7.     this.puerto.setSerialPortParams( this.transf, this.bitsDat, this.bitsPara, this.pari);
  8.  
  9.     this.flujoSalida.write( ( int )c );
  10.     this.flujoSalida.close();
  11.  
  12. }
  13.  
  14.  


como te puedes dar cuenta, asi saque un pin del pic y lo ponga en uno
para avisarle a la aplicacion q aun no es tiempo de leer los datos...
...,en la funcion enterior, no veo por ningun lado lo del RTS o CTS.
es mas, no se de donde pueda leerlos para saber si estan en 0 o en 1.

....

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Rs232 Con Rts/cts
« Respuesta #3 en: Domingo 7 de Mayo de 2006, 19:42 »
0
Mira yo siempre he usado solo RX Tx y los problemas de sincronismo los he resuelto potenciando el contenido de la trama de datos.

1.- Todos los comandos,parametros y datos numericos son en ascii.

2.-Huso el caracter espacio para separar comando, parametros y datos en el mismo string.

3.-Le agregro el caracter CR LF (0x0D,0x0A) al final para indicar el temino del string no importando su largo
 
4.-La creaccion de un Buffer de recepcion en ambos lados sincronisado con la llegada de los caracteres CR LF para recien entonces procesar los mensajes.

He usado por años esta tecnica de comunicacion entre microcontroladores(pic,Avr,Arm) y un Pc, ocupando solo los pines Rx Tx y me ha dado excelentes resultados.

jpaler

  • Miembro MUY activo
  • ***
  • Mensajes: 479
    • Ver Perfil
Re: Rs232 Con Rts/cts
« Respuesta #4 en: Lunes 8 de Mayo de 2006, 00:43 »
0
amigos, miren lo q he encontrado:
Código: Text
  1.  
  2.                 PTO. SERIE (DTE)
  3.         Pin   Nombre   Sentido   Significado
  4.         1   GND      0V
  5.         2   TxD   salida   Salida de datos
  6.         3   RxD   entrada   Entrada de datos
  7.         4   DTR   salida   Preparado para recibir
  8.         5   CTS   entrada   Vía libre para enviar
  9.         6   V      +12V
  10.  
  11.  
...,segun eso, creo q solo tengo q utilizar el pin de CTS y lo unico q tendria q
hacer es tirar otro cable desde el pic hasta el CTS del pc y ponerlo en
cero (0) cuando el pic este trabajando o ponerlo a uno (1) cuando el pic
ha dejado de realizar la operacion y esta listo para recibir mas datos.

...,y tambien he encontrado como revisar el pin de CTS en java, miren:
Código: Text
  1.  
  2. public abstract void setFlowControlMode(int flowcontrol)
  3.  
  4.     Sets the flow control mode.
  5.  
  6.     Parameters:
  7.         flow - control Can be a bitmask combination of
  8.  
  9.         * FLOWCONTROL_NONE: no flow control
  10.         * FLOWCONTROL_RTSCTS_IN: RTS/CTS (hardware) flow control for input
  11.         * FLOWCONTROL_RTSCTS_OUT: RTS/CTS (hardware) flow control for output
  12.         * FLOWCONTROL_XONXOFF_IN: XON/XOFF (software) flow control for input
  13.         * FLOWCONTROL_XONXOFF_OUT: XON/XOFF (software) flow control for output
  14.  
  15.  

...claro q no se como configurar el puerto, solo hay dos opciones para utilizar el CTS:
        * FLOWCONTROL_RTSCTS_IN: RTS/CTS (hardware) flow control for input
        * FLOWCONTROL_RTSCTS_OUT: RTS/CTS (hardware) flow control for output
¿como configuro el puerto, con la IN o con la OUT?

ademas, con configurarndo bien el puerto serial, estoy seguro q él mismo
esperara a q el pic le diga q se ha desocupado y q ya puede ir a leer los datos
q el pic le va a entregar.

....
amigos, regalenme su opinion y diganme si todo lo q dije del CTS tiene sentido o no.

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Rs232 Con Rts/cts
« Respuesta #5 en: Miércoles 10 de Mayo de 2006, 00:38 »
0
Hola amigo,
pues bueno... mi opinion es que no sigas por ese camino,
Todo conector RS-232 tiene las siguientes conexiones:

GND: tierra
TxD: linea de transmisión de datos.
RxD: linea de recepción de datos.
DTR: "Data Terminal Ready" indica al modem que se conecte a la línea
DSR: "Data Set Ready" respuesta a la anterior señal, el modem indica que está conectado a la línea.
RTS: "Request to send" indica que el modem pasa a modo transmisión. cuando está a 1 indica que le envien datos y cuando está a 0 que se detenga el envío.
CTS: "Clear to Send" respuesta a la anterior señal, el modem indica que está preparado para recivir datos y enviarlos.
RI: "Ring indicator" el modem indica que se ha producido una llamada de un modem remoto.
CD: "Carrier Detect" el modem indica que la línea ha sido activada en el extremo remoto, por lo que pueden llegar datos en cualquier momento.

Vale, un poco lioso, ahora bien, existen dos tipos de conexiones, tipo NULL MODEM y tipo  FULL MODEM.
En el tipo NULL MODEM tan sólo se conectan los Tx, Rx y GND, esta es la conexión básica, la otra usa todas las líneas y se usaba para la conexión a un modem (queda claro viendo el nombre).
La tipo NULL MODEM es la conexión que se usa normalmente y la que deberías usar.
Ahora bien, dado tu interés, te diré más o menos como funciona el sistema FULL MODEM:
-Antes de enviar un caracter, se pide permiso mediante un uno en la salida RTS.
- Se espera a recivir un 1 en CTS, en este momento se puede detener el flujo.  Sin más que enviar un 0 al CTS del PC para que se quede a la espera.
- La señal DTR indica que se está listo para recivir datos.
- La señal DSR indica que el otro está listo para recivir datos.

Si yo fuera tu, dejaría estas señales y programaría un protocolo de comunicaciones usando NULL MODEM.
Por ejemplo que el PC mande un caracter concreto indicando que le quiere enviar datos al PIC y que se quede a la espera hasta que el PIC le responda con un caracter de permiso.  En ese momento que el PIC se quede a la espera recibiendo datos hasta que reciba un caracter de finalización.
Con este sencillo mecanismo la cosa funcionaría, es una especie de polling.

Ya nos contarás como te va...
Un saludo  :lightsabre:
No hay tonto más molesto que el ingenioso.