Autor Tema: Comunicar 2 pic via RF  (Leído 13129 veces)

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

Desconectado the_haven

  • PIC10
  • *
  • Mensajes: 3
Comunicar 2 pic via RF
« en: 31 de Agosto de 2007, 11:18:49 »
Como estan comunidad, soy nuevo en esto de los pic, y me estoy iniciando con pic basic ide, para programarlos, pero  cuando vi la pagina y el alcance que pueden tener los pic, me entusiasme a construir un bot, estoy desde hace 1 semana tratantando de comunicar 2 pics  con la sentencia serout y serin, sin tener exito, por el momento  quiciera ver si me pueden ayudar a manejar estas sentencias, mi primer objetivo, es mover 2 motores de cc, que son lo que tengo disponibles, luego los cambio por servo, ya tengo los modulos  TLP/RPL a 315Mhz, o me `podrian explicar como puedorealizar un enlace de este tipo... por cierto utilizo 2 pic 16f84a tanto para la Tx y la Rx
« Última modificación: 31 de Agosto de 2007, 11:22:38 por the_haven »

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Comunicar 2 pic via RF
« Respuesta #1 en: 31 de Agosto de 2007, 11:47:12 »
Usa el buscador del Foro ese tema ya ha sido resuelto con esas instrucciones. Por Veguepic, LordLafebre Dogflu y tu servidor.


PD: antes de hacerlo RF verifica con un cable entre ellos que realmente funcione el programa que has hecho.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Comunicar 2 pic via RF
« Respuesta #2 en: 31 de Agosto de 2007, 18:59:08 »
Como bien te recomienda navaismo, hay muchos proyectos de bot controlados por rf en el foro, en el índice de robótica puedes ojearlos.

Y también como te indica, primero es aconsejable comenzar  haciendo la comunicación por cable y una vez que esta funciona se pasa a transmitir los datos por rf.

Después tienes que tener en cuenta que las funciones serout y serin están muy limitadas para este tipo de control ya que son una simulación de la uart por soft con las que se desperdicias mucha potencia de proceso y memoria de programa del micro.
Pero de todas formas postea tu código y veremos de ver en que falla.

PD. En el índice de robótica hay una lectura recomendada para trabajar con RF antes de comenzar a mayores.
Saludos desde Granada, España.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Comunicar 2 pic via RF
« Respuesta #3 en: 31 de Agosto de 2007, 19:02:41 »
Que tal Navismo y the_haven:

Sin animos de ofender simplemente aportar lo que en mi caso a mi me ha sucedido. Hace un par de semanas estuve trabajando con los modulos de LAIPAC TLP434A y RLP434A. Lo primero que intente fue lo que proponen en algunos amigos foreros al usar simplemente una sentencia SEROUT  TX_PIN,N2400,[$6,$6,"OK",DATO_TX] para la transmision
y
SERIN  RX_PIN,N2400,["OK],DATO_RX

Esto en mi caso la verdad no me sirvio ya que el dato se recibia correctamente en forma aleatoria, es dceir 10 veces no 2 veces si, 10 vece si 10 veces no. Es decir fue muy inestable y esto fue debido a que el receptor no se sincroniza adecuadamente. Depues lo que hice fue utilizar codigo manchester, usando para la transmision lo siguiente:

DATO_RX = $25
GOSUB  CODIFICA_MANCHESTER
SEROUT    TX_PIN,N2400,[$55,$55,$5A,ENCODE_H,ENCODE_L]

y en la recepcion:

SERIN    RX_PIN,N2400,[$5A],DECODE_H,DECODE_L                  'Recibe el dato codificado en manchester
GOSUB   DECODIFICA_MANCHESTER                                            'Decodifica el dato recibido y colocalo en DATO_TX
SEROUT   TX_SERIAL,T9600,[DATO_TX]

Lo anterior me dio mejor respuesta, pero de igual manera el dato llegaba correctamente muy pocas veces. Entonces lo que hice fue que en la parte transmisora envia el dato 4 veces, y en el receptor recibir al menos 2 recepciones validas, si asi era, entonces comparaba los datos y si estos eran iguales entonces muestrro el dato en una terminal.

Esto mejoro muchisimo la comunicacion, pero aun sigo teniendo un porcentaje de error de 50% o mas, esto es 1 trecepcion correcta, otra no.

Ahora lo que estoy haciendo es usar codificacion PWM y bingo el porcentaje de error se redujo a solo el 1% (esto es solo 3 veces no recibi el dato correcto en 256 transmisiones hechas). Este es el mejor resultado que he obtenido hasta ahora. Pero de igual manera el dato el mismo dato se transmite 6 veces y en el receptor al menos se debe deben recibir 2 transmisiones validas, hago la comparacion y muestro.

Me gustaria mucho compartir el codigo, pero es para una aplicacion comercial y no me esta permitido.
Lo anterior es solo para describir mi experiencia y que el uso de modulos RF no es tan simple como a veces lo parece. Aunque para algunos companieros y amigos del foro les ha resultado y han tenido resultados muy buenos, en mi caso no es asi.

Sigo trabajando y en cuanto tenga la solucion con menos errores la comentare y vere si es posible colgar un fragmento del codigo, por lo menos la parte de transmision y recepcion.

Saludos.

Elreypic.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Comunicar 2 pic via RF
« Respuesta #4 en: 31 de Agosto de 2007, 19:20:13 »
Reconozco que no he tenido problemas con los módulos de Laipac,
ni con los de Aurel y menos con unos para uso profesional,
los DM70 de Maxon. Pero como indica usando unos pic 16f84
no creo que tenga mucho juego como para hacer las rutinas de
Tx o Rx muy extensas teniendo en cuenta que quiere controlar otros dispositivos.

Así que sigo haciendo hincapié en que nos postee el código y pase por
el índice de robótica donde están resueltos todos los problemas que se
generan al usar estos módulos... :wink:
Saludos desde Granada, España.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Comunicar 2 pic via RF
« Respuesta #5 en: 31 de Agosto de 2007, 19:43:58 »
En mi caso ElreyPIC tambien hice una aplicacion comercial y basto sentencias de SERIN y SEROUT con un F84 el codigo esta plasmado Aqui y la verdad es que fue sencillo y efectivo sobre todo por la distancia de casi 80 mts. Tambien debo señalar que lo que indica dogflu es muy cierto las rutinas por soft siempre te complican y consumen mas recursos. Pero en mi poca experiencia ese codigo basto y todavia mejoro cuando meti el dato que verifica lo que tu haces con $5A
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado the_haven

  • PIC10
  • *
  • Mensajes: 3
Re: Comunicar 2 pic via RF
« Respuesta #6 en: 02 de Septiembre de 2007, 16:01:56 »
Gracias amigos de todo pic, sus  respuestas fueron muy instructivas, lamento la demora en la respuesta, pero comence a modificar el codigo, comence con lago mas sencillo y lo simule en proteus, lo que hice fue mandar a prender una secuencia de diodos para empezar pero q su vez es la secuencia para controlar  un puente H, el codigo es el siguiente


'****************************************************************
'*  Name    : UNTITLED.BAS                                                                     *
'*  Author  : Jhon Lopez                                                                           *
'*  Notice  : Copyright (c) 2007 Todos los Rerechos Reservados                  *
'*          : All Rights Reserved                                                                   *
'*  Date    : 01/09/2007                                                                            *
'*  Version : 1.0                                                                                       *
'*  Notes   :                                                                                             *
'*          :                                                                                                *
'****************************************************************
'TX CODE:
device 16f84a

trisb = %10000101
trisa = %10000111
symbol var1 =porta.0
symbol var2 =porta.1
symbol var3 =porta.2 
var1 = 0
var2 = 0
var3 = 0


start:

while var1 = 0 : wend 
serout portb.7,9600, ["A"]  'izquierda

while var2 = 0 : wend
serout portb.7,9600, ["B"]  ' No mueve

while var3 = 0 : wend
serout portb.7,9600, ["C"]  ' Derecha

goto start
end


cuando mando el pin correspodiente a tierra manda una letra ;

por los momentos en proteus me funciona, pero quiciera saber si para un bot es mejor motores  paso a paso;  o servomotores?

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Comunicar 2 pic via RF
« Respuesta #7 en: 02 de Septiembre de 2007, 19:30:42 »
Es posible que como indica la simulación, trabajando con dos pic interconectados directamente por cable y siempre
que no sean hilos muy largos es posible que el programa se entienda bien con su opuesto (Rx).

Pero al usar radios de este tipo con un sistema de acople de los datos tan simple
se requiere hacer las tramas algo mas complejas para compensar las deficiencias de este tipo de radios.

El tema de los motores esta en la utilidad y la complejidad que quieras dar a tu bot, normalmente
se suelen usar servomotores trucados a DC ya que son muy compactos y faciles de obtener.
Saludos desde Granada, España.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Comunicar 2 pic via RF
« Respuesta #8 en: 03 de Septiembre de 2007, 16:06:22 »
Primero que nada, reciban un saludo.

Comentando con esto del RF, estuve realizando mas pruebas y recabando informacion de todos lados , pero principalmente de este maravilloso foro logre lo siguiente y tiene resultados excelentes.

Lo que hice fue enviar un pulso de 5 milisegundos y un espacio de 5 milisegundos, seguido por dos bytes de header (0x5A y 0xA5) y el dato codificado en manchester. Este pulso me ayudo a sincronizar el receptor de una manera simple y sencilla, pero los datos aun asi tuve que enviarlos codificando en manchester. ya que si lo enviaba tal cual (en forma transparente) ocasionalmente el dato no era recibido correctamente y simplemente no se recibia. El baud rate que uso es de 2400 bps y todo va de maravilla. Hice pruebas tanto para los modulos TLP434 y RLP434 asi como con los TLP434A y el RLP434A.

Estos son sol codigos:

El de transmision:

'****************************************************************
'*  Name    : MAN_TEST_TX.BAS                                   *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 9/03/2007                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
        Include "Modedefs.Bas"
DEFINE  OSC 4

@   __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_ON & _BODEN_ON & _DATA_CP_ON & _LVP_OFF

'********************************************************************
'                       DEFINICION DE PINES
'********************************************************************
TXRF_PIN    VAR PORTB.4
SWITCH      VAR PORTB.3

'********************************************************************
'                       DEFINICION DE VARIABLES
'********************************************************************
Counter      Var   Byte      
S_Byte      Var   Byte      
RC_ID      Var   Byte      
D           VAR BYTE
I           var byte
RCV_WORD    Var word
ENCODED     VAR WORD
ENCODED_LOW VAR ENCODED.LOWBYTE
ENCODED_H   VAR ENCODED.HIGHBYTE
DECODED     VAR  BYTE

RC_ID=21               ' Transmitter number is 21
        CMCON = 7
        OPTION_REG = 0
        TRISB = %11001111
        LOW     TXRF_PIN
        PAUSE  100
        COUNTER = 0
Main:   
        IF  SWITCH = 0 THEN
            S_byte = CUNTER
            GOSUB   MAN_ENCODING
                HIGH    TXRF_pin
                PAUSE   5
                LOW     TXRF_PIN
                PAUSE   5   
                Serout TXRF_PIN,N2400,[$5A,$A5,ENCODED_LOW,ENCODED_H]
            COUNTER = COUNTER + 1
        ENDIF   
        WHILE   SWITCH = 0
            PAUSE   50
        WEND
        PAUSE   100
        Goto Main
       
'******************************************************************************
'       Subrutina para codificar en manchester el dato a transmitir
'   ENTRADAS:   S_BYTE
'   SALIDAS:    ENCODED
'******************************************************************************
MAN_ENCODING:
        FOR D = 0 TO 7
            IF  S_BYTE.0[D] = 0 THEN
                ENCODED.0[D*2] = 0
                ENCODED.0[D*2+1] = 1
            ELSE
                ENCODED.0[D*2] = 1
                ENCODED.0[D*2+1] = 0
            ENDIF
        next    D
        return


Y este es el codigo de recepcion;

'****************************************************************
'*  Name    : RXRF_PWM.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 9/04/2007                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
        Include "Modedefs.Bas"
DEFINE  OSC 4

@   __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_ON & _BODEN_ON & _DATA_CP_ON & _LVP_OFF

'********************************************************************
'                       DEFINICION DE PINES
'********************************************************************
RXRF_PIN    VAR PORTB.4
LED         VAR PORTB.5
TX_PIN      VAR PORTB.3

'********************************************************************
'               DEFINICION DE VARIABLES
'********************************************************************
DECODED     VAR BYTE
D           VAR BYTE
RCV_WORD    VAR WORD
RCV_WORD_L  VAR RCV_WORD.LOWBYTE
RCV_WORD_H  VAR RCV_WORD.HIGHBYTE

'******************************************************************************
'               PROGRAMA PRINCIPAL
'******************************************************************************
        CMCON = 7       'Configura puerto A como digital
        LOW     LED     'Apaga el led
        TRISB = 255       
MAIN:   DECODED = 0
        SERIN   RXRF_PIN,N2400,[$5A,$A5],RCV_WORD_L,RCV_WORD_H
OK_REC: TOGGLE  LED
        GOSUB   MAN_DECODING
        SEROUT  TX_PIN,N9600,[DECODED]
        GOTO    MAIN
       
'******************************************************************************
'   Subrutina para decodificar el manchester word recibido
'   ENTRADAS:   RCV_WORD
'   SALIDAS:    DECODED
'******************************************************************************
MAN_DECODING:
    FOR D = 0 TO 7
        IF  (RCV_WORD.0 = 0) AND (RCV_WORD.1 = 1) THEN
            DECODED.7 = 0
        ELSE
            DECODED.7 = 1
        ENDIF
        if d < 7 then
            RCV_WORD = RCV_WORD >> 2
            DECODED = DECODED >> 1
        endif
    NEXT    D
    RETURN

Espero con esta informacion contribuir mas a este mundo de radiofrecuencia y hacer la vida mas facil a otros.

Saludos.

Elreypic.

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Comunicar 2 pic via RF
« Respuesta #9 en: 03 de Septiembre de 2007, 21:11:35 »
Hola amigos!
Les voy a recomendar que utilicen los XBee_Pro para el proyecto del robot que comenta el amigo estos modulos trabajan mejor que los de laipac, segun yo, respecto a que uno no tiene que estar ingeniandosela para codificar y decodificar los datos, les comento que en mis inicios utilice los modulos de laipac y despues de innumerables pruebas con ellos les puedo decir que los mejores resultados los obtuve utilizando el decoder y el encoder del mismo fabricante, lo malo es que estos envia señales en forma paralela y no serial  :mrgreen:

Luego encontre los modulos RF,  XBee_Pro http://www.maxstream.net/products/xbee/xbee-pro-oem-rf-module-zigbee.php

Estos modulos son super sencillos de utilizar y operan como si estuvieran los pic conectados via cable.

Por cierto los venden en digikey si les interesa!!!!

Saludos a todos!

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Comunicar 2 pic via RF
« Respuesta #10 en: 04 de Septiembre de 2007, 07:28:23 »
Hola pana Ralf2, deduzco que cada modulo son Tx y RX, a un que
seguramente no al mismo tiempo, ¿esoty en lo cierto?.
Saludos desde Granada, España.

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Comunicar 2 pic via RF
« Respuesta #11 en: 04 de Septiembre de 2007, 16:16:13 »
Que tal mi estimado amigo Dogflu!!

Mira los modulos en concreto son transceiver (lo maximo) esos bichitos trabajan de lo mejor!

No hay que estar, como coloque en el post anterior, enviando byte para sincronizar los modulos  solo envias los datos y ya. Como si tubieras los pic conectados por un cable serial!!!

Desgraciadamente no tengo de momento como tomar unas fotos o mejor un video para que lo vean en accion pero eso espero resolverlo pronto  :mrgreen:

Bajate el data sheet y si tienes alguna duda puedo postear un ejemplo  :mrgreen:

Saludos

Desconectado dieguez07

  • PIC10
  • *
  • Mensajes: 7
Comunicar 2 pic via RF
« Respuesta #12 en: 17 de Noviembre de 2009, 16:29:58 »
Hola a todos, soy nuevo en el tema de estos modulos y quisiera hacer una comunicacion confiable sin perder muchas veces los datos. estuve viendo el codigo manchester pero no entiendo esta subreutina ma la podrian explicar, por favor. Y en que Proton estan compilando estos ejemplos, porque en el mio me da error, el que tengo yo es Proton Ide 1.0.4.6  Compiler 3.2.5.5.

Desde ya muchas gracias.

 

S_BYTE.0[D] esa posicion de vector d no la entiendo alguien que me explique

MAN_ENCODING:
        FOR D = 0 TO 7
            IF  S_BYTE.0[D] = 0 THEN
                ENCODED.0[D*2] = 0
                ENCODED.0[D*2+1] = 1
            ELSE
                ENCODED.0[D*2] = 1
                ENCODED.0[D*2+1] = 0
            ENDIF
        next    D
        return