• Lunes 13 de Mayo de 2024, 12:30

Autor Tema:  Trf-2.4g Desesperada  (Leído 1887 veces)

vane_ccs

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Trf-2.4g Desesperada
« en: Viernes 12 de Enero de 2007, 03:50 »
0
Hola a todos, como estan?

Estoy trabajando en mi proyecto de tesis y lo unico que me falta para terminarla es poner a funcionar los RF. (lo cual llevo tratando de hacer hace tiempo)

Esta parte es importante en mi proyecto y he aprendido bastante (aunque siempre se aprende algo nuevo)...Tuve que aprender como funcionaba el SPI, ya que vi que habia muchas personas que hacian la comunicacion entre el pic y el rf por ahi, y existia una libreria en mcc18 (lo estoy haciendo en c) que ya tenia todo asi que era mas rapido. (reusabilidad)

Mi programa de comunicacion funciona perfecto con el SPI entre dos pic(master/slave)....y he estado tratando de hacer la comunicacion entre el rf y pic asi, pero nada...hice mi codigo para un receptor y un transmisor y el rf receptor no recibe nada, DR1 nunca se pone en uno.

He estado pensando en cual podia ser la causa....y esta puede ser que el rf no se esta configurando bien. (por tiempo o por como envio la palabra de configuracion o porque el spi tenga algun problema..)

Aqui les coloco el codigo a ver si pueden detectar algun error...

Esta es la libreria spi que hice para enviar y recibir datos por SPI. (usando funciones de spi.h mcc18)

Código: Text
  1.  
  2.  
  3. #include <p18F4620.h>
  4. #include <spi.h>
  5.  
  6.  
  7. void config_SPI(void){
  8.  
  9.   OpenSPI( SPI_FOSC_16,
  10.             MODE_00,    
  11.           SMPEND);
  12.  
  13. }
  14.  
  15. void config_SPI1(void){
  16.  
  17.   OpenSPI( SLV_SSOFF,
  18.          MODE_00,    
  19.          SMPEND);
  20. }
  21.  
  22.  
  23. void trasmitiendo_datos(unsigned char data[],int tamano){
  24.  
  25.   signed char i;
  26.  
  27.   for(i=0;i<tamano;i++){                
  28.  
  29.     while(putcSPI(data[i])<0){
  30.       SSPCON1bits.WCOL = 0;
  31.       data[i] = getcSPI();
  32.       &#59;
  33.     }
  34.   }
  35. }
  36.  
  37.  
  38. signed char recibiendo_datos(unsigned char data[],int tamano){
  39.  
  40.     getsSPI(data,tamano);
  41.     return(-1);
  42. }
  43.  
  44.  
  45.  

Este es el codigo del transmisor

Código: Text
  1.  
  2.  
  3. #include <p18F4620.h>
  4. #include <delays.h>
  5. #include <spi.h>
  6. #include <sicc.h>  //creada por mi para la declaracion de las funciones de mi proyecto
  7.  
  8.  
  9. //definicion de los pines del RF
  10. #define TX_CE      PORTBbits.RB7
  11. #define TX_CS      PORTBbits.RB6
  12.  
  13. #define CONFIG_READY PORTBbits.RB0
  14.  
  15. //definicion para configuracion del RF
  16. #define PAYLOAD_SIZE   232
  17. #define ADDR1       11
  18. #define ADDR_CRC_SIZE   0b00100011
  19. #define CH_SHOCK_250_FP 0b01001111
  20. #define RF_CH2_RXEN   0b00010100   //2410MHz
  21.  
  22.  
  23. unsigned char data_TX[7] = "HELLO!";
  24.  
  25. void config_rf_tx(void){
  26.  
  27.   unsigned char config_wd[14];
  28.  
  29.   //valores a la configuration word en ShockBurst
  30.  
  31.   config_wd[0]= PAYLOAD_SIZE; //payload  29Bytes * 8 = 232bits de data
  32.   config_wd[1]= 0;
  33.   config_wd[2]= 0;
  34.   config_wd[3]= 0;
  35.   config_wd[4]= 0;
  36.   config_wd[5]= 0;
  37.   config_wd[6]= 0;
  38.   config_wd[7]= 0;
  39.   config_wd[8]= 0;
  40.   config_wd[9]= 0;
  41.   config_wd[10]= ADDR1; // direccion
  42.   config_wd[11]= ADDR_CRC_SIZE; // 8 bits direccion & 16 bits CRC habilitado
  43.   config_wd[12]= CH_SHOCK_250_FP; // 1 canal de recepcion & ShockBurst & 250kbps & full power
  44.   config_wd[13]= RF_CH2_RXEN; // RF_CH canal 2 RXEN de transmision
  45.  
  46.  
  47.   Delay1KTCYx(15);   // (tpd2stby) 5msec  
  48.  
  49.   TX_CE = 0; TX_CS = 1; CONFIG_READY = 0;
  50.    
  51.                 Delay10TCYx(40);   // (tcs2data) 10usec
  52.  
  53.   trasmitiendo_datos(config_wd,14);
  54.  
  55.   Delay100TCYx(100);
  56.  
  57.     TX_CE = 0; TX_CS = 0; CONFIG_READY = 1;
  58.    
  59.     Delay10TCYx(40);
  60. }
  61.  
  62.  
  63. void Transmision(unsigned char data[],unsigned char rf_address)
  64. {
  65.  
  66.   TX_CE = 1;
  67.    
  68.     Delay10TCYx(40);   // (tce2data) 10usec
  69.    
  70.      trasmitiendo_datos(rf_address,1);
  71.  
  72.     trasmitiendo_datos(data,7);
  73.  
  74.     TX_CE = 0; //Inicio de la transmision  
  75.    
  76.      
  77. }
  78.  
  79.  
  80. void inicio_TX(void)
  81. {    
  82.     config_rf_tx();
  83. }
  84.  
  85. void main(void){
  86.  
  87.   unsigned char rf_address = 10;
  88.  
  89.   TRISAbits.TRISA6 = 0;
  90.   TRISAbits.TRISA7 = 0;
  91.  
  92.   ADCON1 = 0b00001111;
  93.  
  94.   TX_CS = 0;
  95.   TX_CE = 0;
  96.   CONFIG_READY = 0;
  97.  
  98.   //configuro pines como salida CE y CS
  99.   TRISBbits.TRISB7 = 0;
  100.   TRISBbits.TRISB6 = 0;
  101.  
  102.   //configuro el pin RB0 como salida
  103.   //ente indica que la configuracion ha sido realizada
  104.   TRISBbits.TRISB0 = 0;
  105.  
  106.   config_SPI();
  107.  
  108.   inicio_TX();
  109.  
  110.  
  111.  
  112.   while(1){
  113.    
  114.     Transmision(data_TX,rf_address);
  115.     Delay1KTCYx(30);
  116.   }
  117. }
  118.  
  119.  
  120.  


y por ultimo el codigo del receptor


Código: Text
  1.  
  2.  
  3. #include <p18F4620.h>
  4. #include <xlcd.h>
  5. #include <delays.h>
  6. #include <spi.h>
  7. #include <sicc.h>
  8.  
  9.  
  10. //definicion de los pines del RF
  11. #define RX_CE      PORTBbits.RB7
  12. #define RX_CS      PORTBbits.RB6
  13. #define RX_DR1     PORTBbits.RB4
  14.  
  15. //definicion para configuracion del RF
  16. #define PAYLOAD_SIZE   232
  17. #define ADDR1       10
  18. #define ADDR_CRC_SIZE   0b00100011
  19. #define CH_SHOCK_250_FP 0b01001111
  20. #define RF_CH2_RXEN   0b00010101  //2410MHz
  21.  
  22. unsigned char data_RX[7];
  23.  
  24. void config_rf_rx(void){
  25.  
  26.   unsigned char buffer[17]="INICIANDO CONFIG";
  27.   unsigned char buffer1[17]="FIN CONFIG......";
  28.  
  29.   unsigned char config_wd[14];
  30.  
  31.   //valores a la configuration word en ShockBurst
  32.  
  33.   config_wd[0]= PAYLOAD_SIZE; //payload  29Bytes * 8 = 232bits de data
  34.   config_wd[1]= 0;
  35.   config_wd[2]= 0;
  36.   config_wd[3]= 0;
  37.   config_wd[4]= 0;
  38.   config_wd[5]= 0;
  39.   config_wd[6]= 0;
  40.   config_wd[7]= 0;
  41.   config_wd[8]= 0;
  42.   config_wd[9]= 0;
  43.   config_wd[10]= ADDR1; // direccion
  44.   config_wd[11]= ADDR_CRC_SIZE; // 8 bits direccion & 16 bits CRC habilitado
  45.   config_wd[12]= CH_SHOCK_250_FP; // 1 canal de recepcion & ShockBurst & 250kbps & full power
  46.   config_wd[13]= RF_CH2_RXEN; // RF_CH canal 2 RXEN de transmision
  47.  
  48.   Delay1KTCYx(15);    
  49.  
  50.  
  51.     RX_CE = 0; RX_CS = 1;
  52.  
  53.   Delay10TCYx(40);   // (tcs2data) 10usec
  54.  
  55.   trasmitiendo_datos(config_wd,14);
  56.  
  57.     Delay100TCYx(100);
  58.    
  59.     RX_CE = 1; RX_CS = 0;  //empiezo a monitoriar el aire
  60.    
  61.     Delay10TCYx(40);
  62.    
  63. }
  64.  
  65.  
  66. void Recepcion(int tamano)
  67. {  
  68.     RX_CE = 0;
  69.  
  70.   data_RX[0]='\0';
  71.   if(recibiendo_datos(data_RX,tamano)<0);
  72.    
  73.     RX_CE = 1; //Inicio de nuevo monitoreo del aire
  74. }
  75.  
  76.  
  77. void inicio_RX(void)
  78. {
  79.   unsigned char buffer[17]="RF_RX INICIADO.";
  80.  
  81.   config_SPI();
  82.     config_rf_rx();
  83.    
  84. }
  85.  
  86. void main(void){
  87.  
  88.   TRISAbits.TRISA6 = 0;
  89.   TRISAbits.TRISA7 = 0;
  90.  
  91.   ADCON1 = 0b00001111;
  92.  
  93.   //configuro pines como entrada DR1 y salida CE y CS
  94.   TRISBbits.TRISB7 = 0;
  95.   TRISBbits.TRISB6 = 0;
  96.   TRISBbits.TRISB4 = 1;
  97.  
  98.   OpenXLCD(FOUR_BIT & LINES_5X7);
  99.  
  100.   inicio_RX();
  101.  
  102.   while(1){
  103.    
  104.     if(RX_DR1==1){
  105.      
  106.       Recepcion(6);
  107.      
  108.       while(BusyXLCD());
  109.       SetDDRamAddr(0x00);
  110.       putsXLCD(data_RX);
  111.                    
  112.     }
  113.   }
  114. }
  115.  
  116.  

Se que el post esta bastante largo, disculpen :losiento: pero pienso que es la unica manera de que entiendan que estoy haciendo...

Si estoy cometiendo alguna burrada en alguna parte del codigo por favor diganme, escucho cualquier sugerencia.

Muchas gracias de antemano.

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Trf-2.4g Desesperada
« Respuesta #1 en: Martes 16 de Enero de 2007, 03:00 »
0
Bueno vane, segun tus comentarios creo que queda descartado que la rutina de comunicacion SPI sea la falla.

Citar
Mi programa de comunicacion funciona perfecto con el SPI entre dos pic(master/slave)

Me inclino en que la falla esta o bien en la configuracion del modulo de RF o con seguridad en el armado del circuito electronico. La radiofrecuencia es muy sensible a las impurezas del circuito realizado en la placa y mas todavia a la frecuencia que trabaja ese modulo, si eres tan amable me interesaria mucho ver el esquema que estas utilizando y saber tmb si la placa la tienes hecha en PCB o utilizas el protoboard para realizar las pruebas. Estoy buscando la manera de ayudarte y lograr manejar tmb el modulito, ya que he visto que es tema de consulta en varios post del foro. Saludos
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Yuliettte

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Trf-2.4g Desesperada
« Respuesta #2 en: Martes 16 de Enero de 2007, 04:27 »
0
Hola Jonathan:

He leido tus foros y se que sabes mucho de estos modulos, no los he empezado a manejar pero puedes darme algunos de tips referente a montajes y componentes para evitar ruidos y optimizar la comunicacion.

Gracias por tu ayuda

Aristides Alvarez

  • Miembro MUY activo
  • ***
  • Mensajes: 111
    • Ver Perfil
    • http://www.todomicrostamp.com/parallax_argentina
Re: Trf-2.4g Desesperada
« Respuesta #3 en: Domingo 21 de Enero de 2007, 18:28 »
0
Hola vane_ccs, en este PDF hay una aplicación que utiliza ese módulo, creo que podrás sacar alguna información:

http://courses.cs.tamu.edu/rgutier/cpsc483...rable-final.pdf
“La experiencia sólo puede comenzar..... cuando termine la experimentación"

Un saludo, Aristides Alvarez,
Consultor de Parallax Inc. http],
[url=http://www.microsparallax.com.ar]http] ,
info@microsparallax.com.ar ,
TE (0223) 474 5058, CEL 155 63 50 58
Mar del Plata, Argentina.