Autor Tema: Recomendaciones para transmision inalambrica  (Leído 2262 veces)

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

Desconectado kaneda

  • PIC12
  • **
  • Mensajes: 52
Recomendaciones para transmision inalambrica
« en: 02 de Julio de 2013, 18:57:29 »
Hola Foro :)
Estoy trabajando en un proyecto en el que necesito transmitir comandos (teclas pulsadas) de forma inalambrica a una distancia maxima de unos 70m.
Mi pregunta es: ¿Que modulos me recomiendan? Una opcion es usar modulos XBEE, pero estos son mas complejos y eso los hace mas costosos teniendo en cuenta que no usaria todo su potencial. Mi idea es simplemente trasmitir una señal que indique que tecla se ha pulsado. Por ejemplo, a traves de protocolos rs-232 o algun otro mas sencillo como ppm.

Acepto todo tipo de sugerencias y recomendaciones.

Muchas Gracias!! :)

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Recomendaciones para transmision inalambrica
« Respuesta #1 en: 02 de Julio de 2013, 19:36:54 »



Módulos Bluetooth Clase 1, te alcanza hasta 100 metros, y son muy fáciles de gestionar.
Módulos FSK-GFSK a 2.4Ghz, te los venden los chinos por Ebay, muy baratitos.



Desconectado kaneda

  • PIC12
  • **
  • Mensajes: 52
Re: Recomendaciones para transmision inalambrica
« Respuesta #2 en: 02 de Julio de 2013, 20:02:33 »
Gracias por la rapida respuesta :)

Respecto al modulo Bluetooth, para tener ese alcance, deberia comprar un modulo que cuesta casi lo mismo que los XBEE.
Los modulos FSK no los he probado, realmente tienen buen alcance?

Estuve viendo el modulo nRF24L01, y parece ser una buena opcion. Alguien lo ha probado?

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2059
Re: Recomendaciones para transmision inalambrica
« Respuesta #3 en: 02 de Julio de 2013, 20:18:00 »
Para mi los mejores son los Xbee  :mrgreen:
si compras lo de la serie 1, que no sean pro son mas economicos, si el precio es aun costoso para voz, entonces puedes comprar por ejemplo estos mas un ht12E y un ht12D para manejarlos facilmente  ;-)

Saludos

Desconectado kaneda

  • PIC12
  • **
  • Mensajes: 52
Re: Recomendaciones para transmision inalambrica
« Respuesta #4 en: 02 de Julio de 2013, 20:27:44 »
Siempre termino en los XBEE jeje ((:-))... son muy confiables, los XBEE PRO me han funcionado muy bien para 70m. Nunca probe con los XBEE comunes. Pero para este proyecto, que consiste en un tablero de anotaciones para basquet, queria usar algo mas economico... los modulitos con los ht12 los probé y no tenian casi nada de alcance  :?

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2059
Re: Recomendaciones para transmision inalambrica
« Respuesta #5 en: 02 de Julio de 2013, 20:42:00 »
Bueno Kaneda
El tema del alcance es problematico con esos modulos todo depende del tamaño del a antena que estes utilizando quedebe ser de 17.3cm aproximandamente si usas modulos de 434MHz te presente tambien eso pero con los ht12E y ht12D es la unica forma que he logrado que me funcionen pero la distancia no la probe solo hasta unos 10Mts  :?
De todas formas te dejo mas informacion aqui

Saludos

Desconectado kaneda

  • PIC12
  • **
  • Mensajes: 52
Re: Recomendaciones para transmision inalambrica
« Respuesta #6 en: 02 de Julio de 2013, 21:47:09 »
Gracias por la informacion Ralf, esos módulos no tienen el alcance que necesito, voy a ver si sigo buscando mas opciones, o si sigo usando los Xbee que nunca fallan.  Voy a ver si consigo un par de nRF24L01 para probar que alcance tienen. Alguien lo usó en alguna ocasión?

Desconectado oktubre

  • PIC10
  • *
  • Mensajes: 30
Re: Recomendaciones para transmision inalambrica
« Respuesta #7 en: 03 de Julio de 2013, 14:33:47 »
La gente de CTM tiene varias opciones a muy buen precio. Son los mismos q anuncian aquí en el foro. Los módulos q les compré funcionan de maravillas. Podés consultarlo a Marcos Tagliani.
http://www.ctmelectronica.com.ar/
"La palabra elefante ha matado muchos más animales de esa especie que cualquier otra arma" (alguno lo dijo)

Desconectado kaneda

  • PIC12
  • **
  • Mensajes: 52
Re: Recomendaciones para transmision inalambrica
« Respuesta #8 en: 03 de Julio de 2013, 20:06:59 »
Oktube esos modulos estan muy buenos, creo que son mas acordes a lo que necesito, voy a investigar un poco para ver si me servirian y pedir algun presupuesto. Muchas Gracias por la informacion  ((:-)) :)

Desconectado miquel

  • PIC12
  • **
  • Mensajes: 69
Re: Recomendaciones para transmision inalambrica
« Respuesta #9 en: 05 de Julio de 2013, 20:55:08 »
Los modulos NRF905 cuestan 15€ la pareja, incluido el transporte desde China. Los he probado y funcionan a 100m. perfectamente. El inconveniente es que se comunican por SPI. Si te interesa tengo una libreria en CCS.

Saludos

Miquel

Desconectado kaneda

  • PIC12
  • **
  • Mensajes: 52
Re: Recomendaciones para transmision inalambrica
« Respuesta #10 en: 09 de Julio de 2013, 14:09:00 »
Muchas gracias miquel, la libreria me vendria muy bien. Compre una pareja de NRF905 y otra de NRF24L01 para hacer pruebas. Ahora a esperar que lleguen:)

Desconectado miquel

  • PIC12
  • **
  • Mensajes: 69
Re: Recomendaciones para transmision inalambrica
« Respuesta #11 en: 12 de Julio de 2013, 16:30:05 »
Disculpa por la tardanza, pero estaba de viaje. Los modulos NRF24L01 tienen poca potencia y solo sirven para pequeñas distancias, el NRF905 tiene +10dBm .

Esta es la libreria que hize para el NRF905, no contempla todas las posibilidades del modulo. Espero que te sirva.


Código: [Seleccionar]
/*******************************************************************************

CONNECTOR NRF905
---------------

Cable 3 fils:
Vermell      PIN_A0   CARR_DETECT
Groc         PIN_A1   ADDR_MATCH
Groc         PIN_A2   DATA_READY

Cable 3 fils:
Vermell      PIN_C0   TX_EN
Verd         PIN_C1   PWR_UP
Verd         PIN_C2   TRX_CE

Cable 4 fils:
Vermell      PIN_B0   SPI_CS
Blau         PIN_B1   SPI_CLK
Blau         PIN_B2   SPI_OUT    MOSI
Blau         PIN_B3   SPI_IN     MISO



Definició de PIN´S per utilitzar el cable de prova
---------------------------------------------------------
#define SPI_CS        PIN_B0
#define SPI_CLK       PIN_B1
#define SPI_OUT       PIN_B2         //  MOSI
#define SPI_IN        PIN_B3         //  MISO
#define TX_EN         PIN_C0
#define PWR_UP        PIN_C1
#define TRX_CE        PIN_C2
#define CARR_DETECT   PIN_A0
#define ADDR_MATCH    PIN_A1
#define DATA_READY    PIN_A2



///////////////////////////////////////////////////////////////////////////////






----------------------------
CABLE NOU DE PROVA NRF905
----------------------------

Cable 8 fils:

Blanc             PIN_B0   SPI_CS
                  PIN_B1   SPI_CLK
                  PIN_B2   SPI_OUT        MOSI
                  PIN_B3   SPI_IN         MISO
                  PIN_B4   DATA READY
                  PIN_B5   PWR_UP
                  PIN_B6   TRX_CE
Blau              PIN_B7   TX_EN

Cable 3 fils:

Blau              PIN_C0   CD
Blanc             PIN_C1   AM
Groc              PIN_C2   UCK

*******************************************************************************/









#ifndef SPI_CS
   #define SPI_CS        PIN_B0
#endif

#ifndef SPI_CLK
   #define SPI_CLK       PIN_B1
#endif

#ifndef SPI_OUT
   #define SPI_OUT       PIN_B2         //  MOSI
#endif

#ifndef SPI_IN
   #define SPI_IN        PIN_B3         //  MISO
#endif

#ifndef DATA_READY
   #define DATA_READY    PIN_B4
#endif

#ifndef PWR_UP
   #define PWR_UP        PIN_B5
#endif

#ifndef TRX_CE
   #define TRX_CE        PIN_B6
#endif

#ifndef TX_EN
   #define TX_EN         PIN_B7
#endif

#ifndef CARR_DETECT
   #define CARR_DETECT   PIN_C0         // Si s'utilitza el "Carrier Detect"
#endif

#ifndef ADDR_MATCH
   #define ADDR_MATCH    PIN_C1         // Si s'utilitza el "Address Match"
#endif

#ifndef REG_CFG_0
   #define REG_CFG_0     0x01           //0x6C   0x01 = Canal nº 1
#endif

#ifndef REG_CFG_1
   #define REG_CFG_1     0x0C           //0x00   0x0C = +10dbm   0x08 = +6dbm  0x04 = -2dbm  0x00 = -10dbm   [7:6]no utilitzat, [5]AUTO_RETRAN, [4]RX_RED_PWR, [3:2]PA_PWR, [1]HFREQ_PLL, [0]Bit8 CH_NO 
#endif

#ifndef REG_CFG_2
   #define REG_CFG_2     0x44           //0b01000100   4 bytes RX_ADDRESS y TX_ADDRESS  [7]no utilitzat, [6:4]TX_AFW, [3]no utilitzat, [2:0]RX_AFW
#endif

#ifndef REG_CFG_3
   #define REG_CFG_3     0x06           //0x20   PAYLOAD de 32 bytes
#endif

#ifndef REG_CFG_4
   #define REG_CFG_4     0x06           //0x20   PAYLOAD de 32 bytes
#endif

#ifndef RX_ADDRESS_1
   #define RX_ADDRESS_1  0xE7
#endif   

#ifndef RX_ADDRESS_2
   #define RX_ADDRESS_2  0xE7
#endif 

#ifndef RX_ADDRESS_3
   #define RX_ADDRESS_3  0xE7
#endif   

#ifndef RX_ADDRESS_4
   #define RX_ADDRESS_4  0xE7
#endif

#ifndef REG_CFG_9
   #define REG_CFG_9     0x58           // 0b01011000  CRC de 8 bits activat y 16MHz XOF   [7]CRC_MODE, [6]CRC_EN, [5:3]XOF, [2]UP_CLK_EN, [1:0]UP_CLK_FREQ
#endif

#ifndef BUFF_RX_PL
   #define BUFF_RX_PL    REG_CFG_3 + 1  // Registre 3 + 1 byte
#endif

#ifndef BUFF_TX_PL
   #define BUFF_TX_PL    REG_CFG_4 + 1  // Registre 4 + 1 byte
#endif

#define WRITE_CFG        0x00
#define READ_CFG         0x10
#define WRITE_TX_PL      0x20
#define WRITE_TX_AD      0x22
#define READ_RX_PL       0x24












Byte SpiRead(void);
void SpiWrite(byte  Data);
void SetConfig();
void TestConfig(void);
void TxPacket(void);
void RxPacket(void);
void SetRxMode(void);










Byte TxBuf[BUFF_TX_PL];
Byte RxBuf[BUFF_RX_PL];















void TestConfig(void)
{
int8 i;
byte tmp[10];
printf("Llegint registres...\r");
delay_ms(50);
printf(" \r");
delay_ms(50);
output_high(PWR_UP);
output_low(TRX_CE);
output_low(SPI_CS);
SpiWrite(READ_CFG);
for (i=0; i<10; i++) Tmp[i]=SpiRead();
output_high(SPI_CS);
for (i=0; i<10; i++)
   {
   printf("Registre %d = %X\r",(i),tmp[i]);
   delay_ms(50);
   }
printf(" \r");
delay_ms(50);
}

void SetConfig()
{
output_high(PWR_UP);
output_low(TRX_CE);
output_low(TX_EN);
output_low(SPI_CS);
SpiWrite(WRITE_CFG);
SpiWrite(REG_CFG_0);           
SpiWrite(REG_CFG_1);             
SpiWrite(REG_CFG_2);             
SpiWrite(REG_CFG_3);             
SpiWrite(REG_CFG_4);               
SpiWrite(RX_ADDRESS_1);
SpiWrite(RX_ADDRESS_2);
SpiWrite(RX_ADDRESS_3);
SpiWrite(RX_ADDRESS_4);
SpiWrite(REG_CFG_9); 
output_high(SPI_CS);
printf("Gravats els registres...\r");
delay_ms(50);
printf(" \r");
delay_ms(50);
}

void SpiWrite(byte  Data)
{
int8 i;   
byte D;
D=Data;
output_bit(SPI_OUT,bit_test(D,7));
for(i=0; i<8; i++)
   {   
   output_high(SPI_CLK); 
   D=D << 1;
   output_low(SPI_CLK);
   output_bit(SPI_OUT,bit_test(D,7));
   }
output_low(SPI_OUT);
}

byte SpiRead(void)
{
int8 i;
byte D=0;
for (i=0; i<8; i++)
   {   
   D=D << 1;
   output_high(SPI_CLK);
   if(input(SPI_IN)) bit_set(D,0);
   output_low(SPI_CLK);
   }
return D;
}

void TxPacket(void)
{
int8 i;
output_high(PWR_UP);
output_high(TX_EN);
output_low(TRX_CE);
output_low(SPI_CS);
SpiWrite(WRITE_TX_AD); 
SpiWrite(RX_ADDRESS_1);
SpiWrite(RX_ADDRESS_2);
SpiWrite(RX_ADDRESS_3);
SpiWrite(RX_ADDRESS_4);
output_high(SPI_CS);
delay_us(100);
output_low(SPI_CS);
SpiWrite(WRITE_TX_PL);
for (i=0; i<BUFF_TX_PL; i++) SpiWrite(TxBuf[i]); 
output_high(SPI_CS);
output_high(TRX_CE);
delay_us(20);     
output_low(TRX_CE);
}

void RxPacket(void)
{
int8 i;
output_high(PWR_UP);
output_low(TX_EN);
output_low(TRX_CE);
output_low(SPI_CS);
SpiWrite(READ_RX_PL);                                         
for(i=0; i<BUFF_RX_PL; i++) RxBuf[i] = SpiRead();
output_high(SPI_CS);
}

void SetRxMode(void)
{
output_high(PWR_UP);
output_low(TX_EN);
output_high(TRX_CE);
delay_us(650);
}



Para utilizarla solo tienes que cambiar los pines de los defines de acuerdo con el PIC utilizado  y

1    llamar a la funcion void SetConfig(); para grabar los registros.
2    si quieres comprobar los registros grabados, llama a la funcion void TestConfig(void);
3    llama a la funcion void SetRxMode(void); para colocar al modulo en modo recepcion
4    para transmitir coloca los datos a transmitir en Byte TxBuf[BUFF_TX_PL];  llama a la funcion void TxPacket(void); y despues llama a la funcion void SetRxMode(void);
      para colocar al modulo en modo recepcion.       
5    para recibir comprueba el estado de DATA_READY y si esta en alto llama a la funcion void RxPacket(void); los datos se cargaran en el bufer Byte RxBuf[BUFF_RX_PL]; y
      llama a la funcion void SetRxMode(void); para colocar al modulo en modo recepcion.

Este modulo tienes muchas posibilidades en la hoja de datos lo tienes muy bien detallado.

Saludos,

Miquel