Autor Tema: CONTROL DEL PUERTO RS232  (Leído 3156 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado norte

  • PIC10
  • *
  • Mensajes: 14
CONTROL DEL PUERTO RS232
« en: 18 de Marzo de 2009, 18:29:03 »
Hola a todos. Estoy empezando a manejar el puerto RS232 con el PIC16f876 y el  Hiperterminal de Windos., y de momento todo bien. Pero la felicidad no es total. Me explico. Que sucede si el PC comienza a enviar informacion continuamente al PIC y este no puede leerla porque esta ocupado haciendo otra cosa..... La información que envio el PC  se pierde ? Como le digo al que envia información que deje de enviarla, por el momento hasta que el receptor este en condiciones de poderla recivir?

 Se que en el conector DB9 hay unos pins que me parecen que se tienen que utilizar para decir al que envia que "ahora no puedo recivir informacion".  En fin si alguien puede hecharme un capote, pues será de agradecer, saludos.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: CONTROL DEL PUERTO RS232
« Respuesta #1 en: 19 de Marzo de 2009, 03:03:36 »
Hola.

Se podria gestionar la recepcion en el micro por medio de interrupciones (de hecho esa es la manera de hacerlo). Lo que habria que tener en cuenta es el largo del string enviado desde el PC para asignar el tamaño del bufer de recepcion en el micro.
El papel lo aguanta todo

Desconectado norte

  • PIC10
  • *
  • Mensajes: 14
Re: CONTROL DEL PUERTO RS232
« Respuesta #2 en: 19 de Marzo de 2009, 06:10:48 »
Hola MLO_,  el tema de las interrupciones ya lo tengo listo, vamos que es una de las soluciones que le he dado al tema. Pero a mi lo que en verdad me interesa es,  que el que emite se espere o no  en funcion de una señal. Estas señales estan en el conector DB9 del COM1. Y creo que son RTS y CTS. Pero preferiria si alguien sabe algo me aconsejara por que voy a ciegas un poco con el tema, ya que por enjemplo en el Hiperterminal de WIndos, hay una opcion en control de flujo que hace referencia a esto  y no se muy bien como funciona : Xon/Xoff, Hardware o Ninguno. Saludos y gracias.

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Re: CONTROL DEL PUERTO RS232
« Respuesta #3 en: 19 de Marzo de 2009, 07:30:43 »
Creo que el pic no cuenta con esas señales, una opcion seria estudiar como funcionan y generarlas por software.

Si no, puedes enviar de forma continua, pero en tramas de por ejemplo 32 bytes que vas guardando en la ram y cada 32 el pic manda un bit al Pc que le indica si puede seguir enviando o debe esperar. Una especie de protocolo sencillo
Saludos desde Córdoba, españa

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: CONTROL DEL PUERTO RS232
« Respuesta #4 en: 19 de Marzo de 2009, 08:04:05 »
Buenos dias, Otra opcion seria hacer tu mismo la aplicacion del pc que va a estar enviando la informacion y hacer tu propio protocolo y la aplicacion no envie hasta que el pic este listo para recibir nuevamente.

Saludos y es solo una opinions noise el fin de tu proyecto o si es solo educativo.
Atten.
Alexander Santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado norte

  • PIC10
  • *
  • Mensajes: 14
Re: CONTROL DEL PUERTO RS232
« Respuesta #5 en: 19 de Marzo de 2009, 08:37:37 »
Hola la finalidad del proyecto no es otra que hacerlo. No tiene mas secreto. Veran las condiciones RTS Y CTS en el pic esta mas claro que el agua que las tengo que implementar por software pero en el PC estas dos condiciones ya estan en los pins. En fin mirare a ver que encuentro con San Google.com, saludos y gracias a todos.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: CONTROL DEL PUERTO RS232
« Respuesta #6 en: 19 de Marzo de 2009, 13:18:09 »
Hola.

Pues si estas usando las interrupciones para la recepcion serial, no debes preocuparte por que lleguen datos al PIC mientras éste esta haciendo otras cosas, ya que para eso es justamente la interrupcion. La comunicacion al hyperterminal del window$ la puedes configurar tu mismo, tan solo define primero como quieres la comunicacion, normalmente yo pongo el hyperterminal sin control de flujo (OFF), sin paridad, 8 bits de datos.

El control de envio de datos desde el PC al PIC lo puedes controlar tu mismo mediante un string especial (como \r \n) y de esa manera no generar conflictos en el envio y recepcion de informacion.

Si quieres usar el CTS y el RTS del PC averigua sobre los tipos de handshake que hay.

Saludos
El papel lo aguanta todo

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: CONTROL DEL PUERTO RS232
« Respuesta #7 en: 19 de Marzo de 2009, 13:54:28 »
Hola Norte, es correcto lo que decis, del lado PC y haciendolo en el entorno que mas te guste tenes la posibilidad de seleccionar el protocolo que quieras de estos:

  • Sin protocolo, a veces llamado NULL modem
  • Protocolo por soft o XON-XOFF
  • Protocolo por hard usando RTS/CTS
  • Protocolo por hard usando DTR/DSR

El protocolo por soft no utliliza ninguna linea de mas, solmante TX/RX/SG y el envio de información es detenido/liberado por estos dos caracters ( XON y XOFF ) desde el punto de vista de hard es el mas facil, solo que tenes tener cuidado que esos mismos caracteres no sean parte de tus datos.

Los protocolos DTR/DSR y RTS/CTS se establecen por este doble par de lineas, un par es entrada ( CTS/DSR ) y el otro salida ( DTR/RTS ) y del lado PC funcionan asi:[Explico para DTR/DSR, lo mismo se aplica para el otro]

Una vez que el puerto esta seteado la PC coloca la linea DTR en nivel activo ( nivel 0 ), desde el lado del micro vos lees esto y determinas que el PC esta listo para recibir datos, si la linea DTR pasa a inactivo ( nivel 1 ) consideras que la PC no puede recibir mas datos. De tu lado es exactamente los mismo pero intercambiando las lineas. Como en la PC tenes siempre muchisimos mas recursos que en un micro conviene setear los buffers lo mas grande posible de esta manera garantizas que la aplicación PC nunca coloque la linea DTR en inactiva.
De lado del micro no solo basta con leer/escribir por INTs, para una buena perfomance es necesario trabajar con colas circulares tambien llamados ring buffers ( detalles de implementacion hay cientos en la WEB ) la idea es asi, vos tenes un buffer en el micro de un determinado tamaño, cuando se produce la interrupcion de RX, colocas el dato recibido en ese buffer y actualizas indices, si el verificas que ese buffer esta digamos a un 80% de su tamaño final entoces bajas la linea DTR del micro, de esta manera le avisas a la PC que no envie mas datos. Ahora desde tu aplicación en algun momento lees estos datos del buffer, ahi se libera el buffer de recepcion, digamos que cuando el buffer ahora llege a un 30% de su valor volves a activar la linea DTR.

Las ventajas de este metodo es que por mas que la PC sea varias ordenes de magnitud mas rapido que el micro las cosas estan sincronizadas, la desventaja es que consumis mas RAM ( la de los buffers )

Espero haber sido claro. Saludos !