Autor Tema: Alguien pilota de rs232 con control de flujo (rts y cts)??  (Leído 6074 veces)

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

Desconectado lypinss

  • PIC10
  • *
  • Mensajes: 10
Alguien pilota de rs232 con control de flujo (rts y cts)??
« en: 22 de Marzo de 2011, 15:37:33 »
Buenas a todos!!! tengo que controlar un grabador de camaras con un pic6f876a el problema es que el grabador utiliza rts y cts.No tengo ni idea de como configurar el pic para este sistema rs232, si algun alma caritativa pudiera colgar un pequeño ejemplo..... :(

Desconectado om@r

  • PIC12
  • **
  • Mensajes: 86
Re: Alguien pilota de rs232 con control de flujo (rts y cts)??
« Respuesta #1 en: 22 de Marzo de 2011, 16:30:58 »
Hola Iypinss ,nose si ya probaste con intentar comunicarte con el grabador sin control de flujo?  :shock:
puedes unir rts y cts del grabador y usar solo rx / tx y gnd contra el pic ,asi engañas al grabador para que
transmita y reciva sin esperar señales de control. :shock:
Saludos!

Desconectado lypinss

  • PIC10
  • *
  • Mensajes: 10
Re: Alguien pilota de rs232 con control de flujo (rts y cts)??
« Respuesta #2 en: 22 de Marzo de 2011, 19:46:01 »
Ya lo probé pero no funciona correctamente, cuando le mando un comando al grabador lo hace perfectamente pero cuando le mando uno para que me devuelva algo (el estado de alarma de movimiento)  el fgets, fgetc,get,getc..... ninguno es capaz de pillar el resultado y es curioso porque con el hiperterminal funciona correctamente. No tengo ni idea de por dnde tirar.

Sadudos y gracias

Desconectado om@r

  • PIC12
  • **
  • Mensajes: 86
Re: Alguien pilota de rs232 con control de flujo (rts y cts)??
« Respuesta #3 en: 22 de Marzo de 2011, 21:13:30 »
Hola ,que mala suerte  :shock: probaste tu rutina de recepcion? podrias hacerlo contra la pc y ver si funciona bien :shock:
si funciona con la pc sin control de flujo otra cosa que puede pasar es que la trama de datos que te llega desde el grabador sean tantos que el pic no los pueda 'trabajar' si no los guardas primero  :shock: luego de enviar el comando al grabador haces un buffer con los datos que recivis y luego entonces los trabajas o te quedas esperando una cadena de caracteres para recien hay seguir con el programa :shock:
me paso al querer leer los datos de salida nmea de un gps ,recien pude hacerlo despues de guardar primero los datos recividos  :shock:
Saludos!

Desconectado lypinss

  • PIC10
  • *
  • Mensajes: 10
Re: Alguien pilota de rs232 con control de flujo (rts y cts)??
« Respuesta #4 en: 23 de Marzo de 2011, 16:32:30 »
La verdad es que con el PC funciona bien, pero no tengo muy claro eso de crear un buffer. Como lo hago???

Muchas gracias por responder

Desconectado om@r

  • PIC12
  • **
  • Mensajes: 86
Re: Alguien pilota de rs232 con control de flujo (rts y cts)??
« Respuesta #5 en: 24 de Marzo de 2011, 00:28:45 »
Hola ,el buffer lo puedes hacer con la propia memoria del pic  :shock: nose cuantos datos tienes que guardar pero si no son muchos puedes reservar posiciones de uso general ,por ejemplo si recuerdo bien en un pic 16F873 tienes desde la posicion 20H a la 7FH ,si usas direccionamiento indirecto se simplifica mucho el tema ,al menos para mi que solo programo en assembler :shock:
Saludos!

Desconectado lypinss

  • PIC10
  • *
  • Mensajes: 10
Re: Alguien pilota de rs232 con control de flujo (rts y cts)??
« Respuesta #6 en: 24 de Marzo de 2011, 16:08:20 »
Muchas gracias Om@r!!! el problemita que tengo es que soy un novato  :oops:  y programo en c++, y no tengo muy claro que comandos usar para cargar un buffer.
Saludos

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Alguien pilota de rs232 con control de flujo (rts y cts)??
« Respuesta #7 en: 24 de Marzo de 2011, 16:46:12 »
Hola, vi que también en otro hilo escribiste sobre el control de flujo. Voy a tratar de explicarte como funciona pero sin ejemplos porque no uso Pics ni CCS.  En las comunicaciones se utiliza el control de flujo para detener arrancar el flujo de comunicaciones. Existen tres métodos:

  • XON-XOFF
  • RTS/CTS
  • DTR/DSR

La primera es llamada por soft, porque involucra el envió de dos caracteres especiales ( 0x11 y 0x13 ) Supone que tu PIC tiene que recibir muchos datos de una PC pero como es un micro de 8 bits lleva tiempo procesar esa info, vos de alguna manera deberías indicarle al PC que detenga el envió de datos, para eso es el control de flujos. Con el XON-XOFF vos le envías el caracter XOFF y el programa en la PC ( debe estar programado ) deja de enviar datos. Cuando vos estas listo para seguir procesando entonces envias XON. La idea es la misma para el otro lado ( desde el PC ). La ventaja de esta opción solo necesita tres cables ( TX/RX/GND ) la desventaja es solo sirve si los datos son ASCII imprimibles ( 0x20-0xFF ), porque si en los datos viene / envía uno de los dos se va todo al demonio. Las otras dos opciones son similares a la anterior pero utilizan dos lineas adicionales. Dependiendo de como este configurado el equipo ( DCE o DTE ) las lineas pueden ser entradas o salidas, aca no hay estándar cada fabricante lo hace como le plazca. Normalmente CTS y DSR son entradas y RTS / DTR son salidas.
Es decir supongamos que usamos DSR / DTR, la conexión se hace conectando DSR del PC con el DTR del PIC, y DTR del PC con DSR del PIC. Todos los micros de 8 bits que conozco estas lineas no están implementadas por hardware se realizan por puertos normales.
En este escenario el programa del PIC deberia colocar en estado bajo ( estado activo ) la linea DTR cuando esta listo para recibir datos, el PC lee este estado desde la linea DSR, cuando detecta estado activo comienza a transmitir, cuando el PIC necesita procesar estos datos o el buffer esta llenandose entonces debe cambiar el estado a desactivo, el PC leera este estado y detendra la transmición. De otro lado es similar, el PIC no debería enviar datos hasta no detectar que el DTR del PC esta activo ( ejemplo PC apagada ), del lado del PC este tipo de cosas no se hacen ya que la PC tienen memoria casi infinita y el poder de procesamiento es varios ordenes de magnitud superior a cualquier micro de 8 bits. La misma explicación cuenta con el RTS/CTS solamente que cambia el nombre de la lineas y se cable diferente en los DB25 o DB9.
Como último comentario, la implementación de UART es conveniente hacerla con colas o buffers circulares y que trabajen por interrupción. El cambio de estado de on-line a off-line no es recomendable hacerlo en el último momento, ya que desde que cambias el estado del DTR p RTS el PC ya puede enviar el dato, la mejor opción es que cuando el buffer de la UART llegue al 75 % de su capacidad se ponga en off-line, y cuando después de procesar los datos se ponga al 25 % de su capacidad se ponga de nuevo en on-line.

Se que el usario RedPIC es algún hilo hace una descripción completa de estas cosas y otras más con ejemplos y todos, te recomiendo su lectura, es más para mi sería casi obligatoria.

Saludos !

Desconectado om@r

  • PIC12
  • **
  • Mensajes: 86
Re: Alguien pilota de rs232 con control de flujo (rts y cts)??
« Respuesta #8 en: 24 de Marzo de 2011, 20:29:22 »
UHuh  :( no te puedo ayudar con c++ solo se un poco assembler  :shock: la idea seria algo
como esto ,primero cargas al puntero FSR con la direccion de adonde queres guardar el dato por
ejemplo 22H ,envias el comando al grabador luego se activara la interrupcion por RX ya que el
grabador te devolvera la respuesta ,atiendes la interrupcion y vuelcas el dato de RCREG al
registro INDF  ,bueno en assembler sin mucho detalle seria algo como esto...
;**************************************
INTER       BTFSS       PIR1,RCIF ;compruebas si hubo interrupcion?
                GOTO        SALE   ;sales si no hubo
                BCF          PIR1,RCIF   ;borras el flag
                MOVF        RCREG,W   ;carga el registro INDF con el dato recivido
                MOVWF     INDF
                INCF         FSR,F      ;incrementas el puntero para la proxima entrada
                MOVF        FSR,W      ;comparas si llegaste al maximo valor del puntero
                XORLW     36H      ;solo guardas 20 datos
                BTFSS      STATUS,Z   
                GOTO   SALE      ;si no es igual sales
                GOTO   VER      ;si son iguales es decir fin de toma de datos saltas a ver?
SALE        CLRF         RCREG
               RETFIE   
;****************************************
;fijate de actualizar el registro de interrupcion y de salvar el registro STATUS y demas     

VER    MOVLW   22H   ;cargas el puntero FSR       ;
                MOVWF   FSR   
                MOVF   INDF,W   ;en W tienes el dato que se guardo durante la captura
;asi sigues incrementando el valor del FSR hasta llegar al valor 36H
Lamento no saber mas que assembler ,si te das una vuelta por el Foro apartado Lenguaje en C
seguramente algun forero te pueda ayudar mucho mas :shock:
Saludos!

Desconectado lypinss

  • PIC10
  • *
  • Mensajes: 10
Re: Alguien pilota de rs232 con control de flujo (rts y cts)??
« Respuesta #9 en: 18 de Mayo de 2011, 13:14:34 »
MUCHAS GRACIAS A TODOS! al fin lo solucione

Desconectado Alejandro

  • PIC16
  • ***
  • Mensajes: 112
Re: Alguien pilota de rs232 con control de flujo (rts y cts)??
« Respuesta #10 en: 18 de Mayo de 2011, 13:41:43 »
 :shock: como?


 

anything