Programación Específica > Programación en C
Rs232 Con Rts/cts
jpaler:
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:
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:
gracias huguen... pero nose...
...,aun tengo muchas dudas de q es exactamente lo q tengo q hacer, mira esto:
--- Código: Text --- //FUNCCION EN JAVA Q ENVIA DATOS AL PTO. SERIALpublic synchronized void enviarCaracter( char c ) { this.puerto = ( SerialPort )this.idPuerto.open( this.usuario, 2000 ); this.flujoSalida = this.puerto.getOutputStream(); this.puerto.setSerialPortParams( this.transf, this.bitsDat, this.bitsPara, this.pari); this.flujoSalida.write( ( int )c ); this.flujoSalida.close(); }
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:
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:
amigos, miren lo q he encontrado:
--- Código: Text --- PTO. SERIE (DTE) Pin Nombre Sentido Significado 1 GND 0V 2 TxD salida Salida de datos 3 RxD entrada Entrada de datos 4 DTR salida Preparado para recibir 5 CTS entrada Vía libre para enviar 6 V +12V ...,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 --- public abstract void setFlowControlMode(int flowcontrol) Sets the flow control mode. Parameters: flow - control Can be a bitmask combination of * FLOWCONTROL_NONE: no flow control * FLOWCONTROL_RTSCTS_IN: RTS/CTS (hardware) flow control for input * FLOWCONTROL_RTSCTS_OUT: RTS/CTS (hardware) flow control for output * FLOWCONTROL_XONXOFF_IN: XON/XOFF (software) flow control for input * FLOWCONTROL_XONXOFF_OUT: XON/XOFF (software) flow control for output
...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.
Navegación
[#] Página Siguiente
Ir a la versión completa