Autor Tema: CCS pic nrf24l01  (Leído 24257 veces)

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

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
CCS pic nrf24l01
« en: 29 de Mayo de 2010, 07:58:00 »
Hola compañeros:

Hace poco que he adquirido un módulo nrf24l01 para conectarlo con algún PIC. Después de 2 días peleando ni siquiera soy capaz de leer y escribir en sus registros intenos a través de spi. Estoy desesperadito de verdad.

Por si alguno pudiese ayudarme, aquí les dejo el código.

Código: [Seleccionar]
#include <18F44K20.h>
#include <stdlibm.h>
#include <string.h>

#fuses HS, NOPROTECT, NOLVP

#rom int8 0x300001 = {0x06} //Es igual que poner 00000110 FOSC<3:0>=0110=HS PLL Enable
#use delay(clock=64M)
#use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7)

#define nRF24L01_CE PIN_C0
#define nRF24L01_CSN PIN_C1
#define nRF24L01_IRQ PIN_C2

//Variables de USART
int const lenbuff=13; // Tamaño del buffer de recepción
int xbuff=0; // Índice: siguiente char en cbuff
int8 string_buffer[lenbuff]; // Buffer
int1 flagcommand=0; // Flag para indicar comando disponible
char dd;
//Fin variables de USART

//Declaración de funciones
void inicbuff(void); // Borra buffer
void addcbuff(char c); // añade caracter recibido al buffer
//Fin declaración de funciones

void SPI_Write_Reg_JVR(BYTE reg, BYTE value);
unsigned char SPI_Read_Reg_JVR(BYTE reg);

#int_rda
void serial_isr()
{ // Interrupción USART
   dd=0;
   dd=getchar();
   addcbuff(dd);
}

void inicbuff(void)
{ // Inicia a \0 cbuff -------------------
   int j;
   for(j=0;j<lenbuff;j++)
   { // Bucle que pone a 0 todos los
      string_buffer[j]=0; // caracteres en el buffer
   }
   xbuff=0; // Inicializo el indice de siguiente caracter
   }

void addcbuff(char c)
{
   switch(c)
   {
      case 13://CR
      flagcommand=1;
      //disable_interrupts(int_rda);
      break;
      default:
      string_buffer[xbuff++]=c;
      if(xbuff>lenbuff)
      xbuff=lenbuff;
   }
}


void main(void) {

unsigned char value=255;

SSPCON1 = 0x3E;//0b00111110;

   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_XMIT_L_TO_H|SPI_CLK_DIV_64);             // Setup hardware spi
enable_interrupts(int_rda); // Habilita Interrupción RDA
   enable_interrupts(global);// Habilita interrupciones
  
printf("Welcome nRF24L01 example");
delay_ms(1000);

   while (TRUE)
   {
if (flagcommand==1)
        {
flagcommand=0;
printf("%s",string_buffer);
if (string_buffer[0]=='s')
{
value = SPI_Read_Reg_JVR(0x00);
printf("A: %i\n",value);
SPI_Write_Reg_JVR(0x00, 0x01);
printf("B: %i\n",value);

value=255;
}
inicbuff();
}
}
}

void SPI_Write_Reg_JVR(BYTE reg, BYTE value)  
{
        
     output_low(nRF24L01_CSN); //CSN low                  
     spi_write(reg); //Seleccionamos el registro
     spi_write(value); //y escribimos el valor en el registro

     output_high(nRF24L01_CSN); //CSN arriba
}

unsigned char SPI_Read_Reg_JVR(BYTE reg)  
{
char status;
char value;
        
    output_low(nRF24L01_CSN); //CSN low                  

status = reg;
value = spi_read(status);

    output_high(nRF24L01_CSN); //CSN arriba

return value;
}

Fijense sólo en la parte final de código, el principio es la función de interrupción para la UART. En este caso cada vez que escribo una s en el hyperterminal, recibo un sA:14B:14 , es como si no hiciese nada...please help me!!!  :( :( :(

Un saludete compañeros.

Lo olvidaba, la configuración HW es como sigue:

RC0 -> CE
RC1 -> CSN
RC2 -> IRQ
RC3 -> SCK //Propio del SPI HW
RC4 -> MISO//Propio del SPI HW
RC5 -> MOSI//Propio del SPI HW
RC6 -> TX
RC7 -> RX

El módulo está correctamente alimentado a 3v3 y es este nRF24l01
« Última modificación: 29 de Mayo de 2010, 08:05:06 por c4_esp_VR »

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: CCS pic nrf24l01
« Respuesta #1 en: 29 de Mayo de 2010, 11:49:55 »
Hola compañeros:

Sigo intentándolo, la salida por el osciloscopio al realizar,

Código: [Seleccionar]
   output_low(nRF24L01_CE);      
    output_low(nRF24L01_CSN); //CSN low
    delay_us(10);
    spi_write(0x20);
    spi_write(0x1);
    output_high(nRF24L01_CSN); //CSN arriba

es la siguiente,



¿Lo que hace está bien...?, más que nada me parece raro que el esclavo esté enviando datos al maestro sin saber que hacer aún, como se ve, la línea azul es lo que envia el maestro que es el 0x20=00100000 y 0x01 = 00000001, la línea roja es el reloj, la amarilla es lo que envia el esclavo al maestro que es 0x0E = 00001110 y la verde es el CSN del nRF24l01 para habilitar la lectura de registros...La verdad no sé que puede estar pasando...¿puede que el módulo de radioesté roto...?

Luego si queremos leer el registro, hacemos lo siguiente,

Código: [Seleccionar]
char value;
output_low(nRF24L01_CE);       
        output_low(nRF24L01_CSN); //CSN low
delay_us(10);
value = spi_read(0x20);
        output_high(nRF24L01_CSN); //CSN arriba

Saliendo por el osciloscopio la siguiente secuencia,



¿Alguno entiende que es lo que está pasado aquí?, cada vez entiendo menos el protocolo spi...

Help me please!!!
« Última modificación: 29 de Mayo de 2010, 12:08:13 por c4_esp_VR »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18271
    • MicroPIC
Re: CCS pic nrf24l01
« Respuesta #2 en: 29 de Mayo de 2010, 12:57:19 »
Yo estuve intentándolo durante bastante tiempo y al final abandoné sin éxito con estos módulos.
Sin embargo, sí que conseguí hablar por SPI con ellos; lo que no logré es que hubiera comunicación por radio.

Este es mi nRF24L02.C:

Código: C
  1. /**************** Preprocessor Constants ***************************************/
  2. #define CONFIG             0x20
  3. #define EN_AA              0x21
  4. #define EN_RXADDR          0x22
  5. #define SETUP_AW           0x23
  6. #define SETUP_RETR         0x24
  7. #define RF_CH              0x25
  8. #define RF_SETUP           0x26
  9. #define STATUS             0x27
  10. #define RX_ADDR_P0         0x2A
  11. #define TX_ADDR            0x30
  12. #define RX_PW_P0           0x31
  13. #define FLUSH_TX           0xE1
  14. #define FLUSH_RX           0xE2
  15. #define TX_PAYLOAD         0xA0
  16. #define RX_PAYLOAD         0x61
  17. #define NO_OP              0xFF
  18. #define ZERO               0x00
  19. #define EOT                0x04
  20. #define PAYLOAD_SIZE       0x20
  21. #define start_transmit    {output_high(rf_CE);delay_ms(10);output_low(rf_CE);}  //Pulse NRF24L01 CE pin for 20us
  22.  
  23. int1 rf_interrupt=false;                                                        // Declare interrupt flag default is false
  24. static int16 rf_CE,rf_CSN;                                                      // Declare NRF24L01 SPI CE & CSN pins
  25.  
  26. /**************** Gets The Length Of A Data Packet *****************************/
  27. unsigned int* length(unsigned char *data)
  28. {
  29.    int *cnt;                                                                    // Declare a pointer
  30.    for (cnt = data; *cnt != 0; cnt++);                                          // Loop
  31.    return(cnt - data);                                                          // Return the length of the data                              
  32. }
  33.  
  34. /**************** Write To NRF24L01 Configuration Register *********************/
  35. void set_register(unsigned int command,unsigned char data)
  36. {
  37.    output_low(rf_CSN);                                                          // Engage SPI chip select
  38.       delay_us(5);
  39.    spi_write(command);                                                          // Write to register
  40.    if(data!=NO_OP){spi_write(data);}                                            // Write data to register
  41.    output_high(rf_CSN);                                                         // Dis-engage SPI chip select
  42.    delay_us(10);
  43. }
  44.  
  45. /**************** Write To NRF24L01 Configuration Register *********************/
  46. void set_register(unsigned int command,unsigned char* data)
  47. {
  48.    int i,len;
  49.    len=length(data);                                                            // Get the length of the data
  50.    output_low(rf_CSN);                                                          // Engage SPI chip select
  51.    delay_us(5);
  52.    spi_write(command);                                                          // Write to register
  53.    for(i=0;i<len;i++){spi_write(data[i]);}                                      // Write data to register
  54.    output_high(rf_CSN);                                                         // Dis-engage SPI chip select
  55.    delay_us(10);
  56. }
  57.  
  58. /**************** Enables NRF24L01 Transmit/Receive Mode ***********************/
  59. void transmit_mode(unsigned int1 enable)
  60. {
  61.    output_low(rf_CE);                                                           // Disable receiver
  62.    set_register(STATUS,0x7E);                                                   // Clear all interrupts
  63.    if(enable)
  64.    {
  65.       set_register(FLUSH_TX,NO_OP);                                             // Flush TX FIFO buffer
  66.       set_register(CONFIG,0x52);                                                // Power up in transmit mode
  67.    }
  68.    else
  69.    {
  70.       set_register(FLUSH_RX,NO_OP);                                             // Flush RX FIFO buffer
  71.       set_register(CONFIG,0x33);                                                // Power up in receive mode
  72.       output_high(rf_CE);                                                       // Enable receiver
  73.       delay_us(130);                                                            // Delay 130us
  74.    }
  75. }
  76.  
  77. /**************** Transmits A Single Byte **************************************/
  78. void rf_transmit(unsigned char data)
  79. {
  80.    transmit_mode(true);                                                         // Enable transmit mode
  81.    output_low(rf_CSN);                                                          // Engage SPI chip select
  82.    spi_write(TX_PAYLOAD);                                                       // Select tx payload register
  83.    spi_write(data);                                                             // Write data to tx payload register
  84.    spi_write(EOT);                                                              // End of transmission
  85.    output_high(rf_CSN);                                                         // Dis-engage SPI chip select
  86.    start_transmit;                                                              // Start transmission
  87.    transmit_mode(false);                                                        // Enable receive mode
  88.    delay_ms(50);                                                                // Delay 50ms
  89. }
  90.  
  91. /**************** Transmits A String Of Data ***********************************/
  92. void rf_transmit(unsigned char *string)
  93. {
  94.    int i,len=0;
  95.    char c;
  96.    len=length(string);                                                          // Get the length of the data to transmit
  97.    transmit_mode(true);                                                         // Enable transmit mode
  98.    output_low(rf_CSN);                                                          // Engage SPI chip select
  99.    spi_write(TX_PAYLOAD);                                                       // Select tx payload register
  100.    for(i=0;i<len;i++){
  101.          c=string[i];
  102.          spi_write(c);}                                    // Write data to tx payload register
  103.    spi_write(EOT);                                                              // End of transmission
  104.    output_high(rf_CSN);                                                         // Dis-engage SPI chip select
  105.    start_transmit;                                                              // Start transmission
  106.    transmit_mode(false);                                                        // Enable receive mode
  107.    delay_ms(50);                                                                // Delay 50ms
  108. }
  109.  
  110. /**************** Receive RF Data **********************************************/
  111. unsigned char* rf_receive()
  112. {
  113.       int i;
  114.       static int rf_rx_buffer[PAYLOAD_SIZE]={0};                                // Declare a receive buffer
  115.       rf_interrupt = false;                                                     // Clear interrupt flag
  116.       output_low(rf_CE);                                                        // Disable receiver
  117.       output_low(rf_CSN);                                                       // Engage SPI chip select
  118.       spi_write(RX_PAYLOAD);                                                    // Initialize RX payload register
  119.       for(i=0;i<=PAYLOAD_SIZE;i++)                                        
  120.       {
  121.          rf_rx_buffer[i]=spi_read(RX_PAYLOAD);                                  // Copy data from NRF24L01 to buffer
  122.          if(rf_rx_buffer[i]==EOT){rf_rx_buffer[i]=ZERO;break;}                  // Stop when EOT found
  123.       }
  124.       output_high(rf_CSN);                                                      // Dis-engage SPI chip select
  125.       transmit_mode(false);                                                     // Enable receive mode
  126.       return rf_rx_buffer;                                                      // Return received payload
  127. }
  128.  
  129. /**************** Checks The Status Register ***********************************/
  130. void check_interrupt()
  131. {
  132.    int i,reg;
  133.    output_low(rf_CSN);                                                          // Engage SPI chip select
  134.    for(i=0;i<5;i++){reg=spi_read(0x07)&0xFF;}                                   // Read 5 chars of data from NRF24L01 RX register
  135.    output_high(rf_CSN);                                                         // Dis-engage SPI chip select
  136.    if(reg>>6){rf_interrupt = true;}                                             // If RX_DR set,set data ready flag
  137.    else{set_register(STATUS,0x7E);}                                             // Clear all interrupts
  138. }
  139.  
  140.  
  141. char read_register(unsigned int command)
  142. {
  143.    char dato;
  144.    
  145.    output_low(rf_CSN);                                                          // Engage SPI chip select
  146.    //spi_write(command&0x3F);                                                          // Write to register
  147.    dato=spi_read(command&0x1F);                                            // Write data to register
  148.    dato=spi_read(0xFF);                                            // Write data to register
  149.    output_high(rf_CSN);                                                         // Dis-engage SPI chip select
  150.    delay_us(10);
  151.    return(dato);
  152. }
  153.  
  154. /**************** Initialize NRF24L01 Chip *************************************/
  155. void setup_rf(unsigned int16 CE,unsigned int16 CSN,unsigned int* address,unsigned int CH,unsigned boolean Mbps,unsigned int dBm)
  156. {
  157.    rf_CE=CE;                                                                    // Define CE pin
  158.    rf_CSN=CSN;                                                                  // Define CSN pin
  159.    //setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_XMIT_L_TO_H|SPI_CLK_DIV_64);             // Setup hardware spi
  160.    setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_64| SPI_XMIT_L_TO_H | SPI_SAMPLE_AT_END);  // Configura la comunicación SPI
  161.    output_low(rf_CE);                                                           // Disable receiver
  162.    set_register(CONFIG,0x31);                                                   // Power down chip  
  163.    set_register(RF_CH,CH);                                                      // Set RF channel
  164.    set_register(RF_SETUP,(Mbps<<3)|(dBm<<1)|0x01);                              // Set data rate and power level
  165.    //set_register(RF_SETUP,0b00010001);//(Mbps<<3)|(dBm<<1)|0x01);                              // Set data rate and power level
  166.    set_register(SETUP_AW,0x03);                                                 // Set address width to 5 bytes
  167.    set_register(EN_AA,0x0);    //0                                                   // Disable auto acknowledgement
  168.    set_register(SETUP_RETR,0x05);                                             // Set auto retransmission for 5 tries
  169.    set_register(TX_ADDR,address);                                               // Set transmit address
  170.    set_register(RX_ADDR_P0,address);                                            // Set receive address
  171.    set_register(EN_RXADDR,0x00);                                                // Enable RX address 0
  172.    set_register(RX_PW_P0,PAYLOAD_SIZE);                                         // Set RX payload to receive up to 32 characters
  173.    
  174.    
  175.    transmit_mode(false);                                                        // Enable receive mode
  176. }
  177.  
  178. void Lee_registros() {
  179.  
  180.       printf (usb_cdc_putc,"Config %X\n\r",read_register(CONFIG));
  181.       printf (usb_cdc_putc,"RF_CH %X\n\r",read_register(RF_CH));
  182.       printf (usb_cdc_putc,"RF_SETUP %X\n\r",read_register(RF_SETUP));
  183.       printf (usb_cdc_putc,"SETUP_AW %X\n\r",read_register(SETUP_AW));
  184.       printf (usb_cdc_putc,"EN_AA %X\n\r",read_register(EN_AA));
  185.       printf (usb_cdc_putc,"SETUP_RETR %X\n\r",read_register(SETUP_RETR));
  186.       printf (usb_cdc_putc,"TX_ADDR %X\n\r",read_register(TX_ADDR));
  187.       printf (usb_cdc_putc,"RX_ADDR_P0 %X\n\r",read_register(RX_ADDR_P0));
  188.       printf (usb_cdc_putc,"EN_RXADDR %X\n\r",read_register(EN_RXADDR));
  189.       printf (usb_cdc_putc,"RX_PW_P0 %X\n\r",read_register(RX_PW_P0));
  190.  
  191. }

Así es como inicializo el módulo desde el programa principal:
setup_rf(PIN_C1,PIN_C2,address,2,0,3);


Así transmito:
packet[0]='M';
packet[1]='a';
packet[2]='n';
packet[3]='o';
packet[4]='l';
packet[5]='o';
packet[6]=0;
rf_transmit(packet);   

Y así recibo:
check_interrupt();
if(rf_interrupt){
      process_packet(rf_receive());}

Aunque como te digo, la transmisión nunca funcionó.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: CCS pic nrf24l01
« Respuesta #3 en: 29 de Mayo de 2010, 13:45:56 »
Hola Nocturno,

Primero gracias por el driver, voy a probarlo a ver si a mi me funciona, ya que yo ni siquiera soy capaz de leer y escribir los registros del chip.

Lo digo voy a probarlo y te comento, a ver si dos cabezas pueden mejor que una  ;-)

Un saludete.
« Última modificación: 29 de Mayo de 2010, 13:53:30 por c4_esp_VR »

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: CCS pic nrf24l01
« Respuesta #4 en: 29 de Mayo de 2010, 14:27:22 »
Sigo sin hacerlo funcionar...me cago en t...¿las patillas de MOSIpic y MOSIRF se ponen juntas al igual que los MISO y el SCK entre ellos, no?. Si esto es así estoy convencido de que es el módulo que no funciona. Lea el registro que lea, siempre me devuelve 0x02...algo estoy haciendo mal, ¿qué podría ser?.

Por otro lado, en algunos códigos he visto que ponen máscaras a la hora de pasarle la dirección del registro, te lo muesto a modo de ejemplo, más que nada a lo mejor era eso lo que no te funcionaba.

Código: [Seleccionar]
void configRegister(unsigned int reg, unsigned int value)
{
    output_low(nRF24L01_CSN);
    spi_write(W_REGISTER | (REGISTER_MASK & reg)); //METEN UNA MÁSCARA
    spi_write(value);
    output_high(nRF24L01_CSN);
}

unsigned int readRegister(unsigned int reg)
{
    int val;
    output_low(nRF24L01_CSN);
    val = spi_read(R_REGISTER | (REGISTER_MASK & reg)); //METEN UNA MÁSCARA
    output_high(nRF24L01_CSN);

    return val;
}

Por otro lado, ¿cuando escribias un dato en el registro luego lo leias y se te había modificado con dicho dato?.

Un saludete y gracias.
« Última modificación: 29 de Mayo de 2010, 14:34:07 por c4_esp_VR »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18271
    • MicroPIC
Re: CCS pic nrf24l01
« Respuesta #5 en: 29 de Mayo de 2010, 15:17:06 »
¿Juntas?, yo no uní ningún par de señales. Cada una de las señales de control del RF iba a un pin del micro.

Y sí, escribía y leía los cambios sin problemas.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: CCS pic nrf24l01
« Respuesta #6 en: 29 de Mayo de 2010, 15:39:04 »
¿Me refiero si el pin del micro SDO va al MOSI del chip, el pin SDI va al MISO del chip?.

Pues si a ti te leia bien los registros imagino que o bien el módulo está mal o hay algo mál en la velocidad de transmisión. ¿Puedes pasarme el proyecto completo Nocturno?, es decir que tenga los defines del micro el clock, etc...Así al menos podré saber si tengo que matar a algún chino por hacerme perder 3 dias con esto  :5] :5] :5] o tengo que seguir matándome a mi mismo por cansino y no pegarme un tiro  :D

Un saludete y mil gracias compañero.
« Última modificación: 29 de Mayo de 2010, 15:54:43 por c4_esp_VR »

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: CCS pic nrf24l01
« Respuesta #7 en: 29 de Mayo de 2010, 17:04:36 »
Me cago en to lo que se mene...ayudenmeeee...necesito ayuda...esto es increible...ahora mismo me voy a emborrachar para ver si se me renuevan las neuronas...aaaaaaarrrrrrggggghhhhhhhh...ya sé que estaba mal...

Creia que al ser SPI por HW no hacía falta definir el #use_spi..., ya que al definirse en setup_spi(...) no hacia falta y....!!!HAY QUE DEFINIRLO!!! me cago en to...Si se ven perfectamente las señales en el osciloscopio sin definir el use_spi a que viene este error...esto es más raro que un perro verde...¿qué podría haber pasado si las señales estaban ahí?.

Estas cosas me llevan a la desesperación, tardas más en ver estas tonterias que en hacer un programa...!!!que rabia!!!.

Bueno ahora toca otra parte aún más difícil, que es la comunicación, ya que si Nocturno no ha podido con ello, seguramente no pueda...pero lo intentaré, !!!allá vaaaaaaaaaaaaaaaammmmmooooooooooooooooooooossssssssssssss!!!.

Iré posteando los avances que vaya consiguiendo.

Un saludete.
« Última modificación: 29 de Mayo de 2010, 17:07:59 por c4_esp_VR »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18271
    • MicroPIC
Re: CCS pic nrf24l01
« Respuesta #8 en: 29 de Mayo de 2010, 17:09:07 »
Lo siento, no te puedo pasar el proyecto completo.

Estos son los defines iniciales:
#include <18F2550.h>
#device PASS_STRINGS=IN_RAM
#FUSES HS
#use delay(clock=4M)

El MISO del RF va al SDI del PIC, y el MOSI del RF al SDO del PIC.

Edito tras leer tu último post: ¿ya escribes y lees los registros del RF?

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: CCS pic nrf24l01
« Respuesta #9 en: 29 de Mayo de 2010, 17:12:29 »
Citar
Edito tras leer tu último post: ¿ya escribes y lees los registros del RF?

Si amigo Nocturno, ya leo y edito los registros, pero no sé a que se debe esto de poner el use_spi, ya que podía ver las señales perfectamente en un osciloscopio físico sin la definición del use_spi...

Muchas gracias por la ayuda Nocturno.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: CCS pic nrf24l01
« Respuesta #10 en: 30 de Mayo de 2010, 09:38:09 »
Hola Nocturno.

Estoy con esto y no veo más que registros por todos lados  :D :D :D, una pregunta rápida, ¿cómo hicestes para comprobar que no te funcionaba?, ¿pusistes 2 transceivers?.

Un saludete y gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18271
    • MicroPIC
Re: CCS pic nrf24l01
« Respuesta #11 en: 30 de Mayo de 2010, 12:57:01 »
Yes, my friend.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: CCS pic nrf24l01
« Respuesta #12 en: 30 de Mayo de 2010, 14:10:12 »
Yo sólo tengo un transceiver y un transmisor nRF2402G y este último tiene un protocolo distinto del transceiver...ya bastante tengo con uno como para liarme con los dos...

Por cierto Nocturno, que error tenias para que no te funcionase, es decir, ¿hicistes algunas pruebas como chequear el registro STATUS?, ahora mismo parece ser que el transceiver está enviando, ya que al enviar un dato el bit TX_DS del registro STATUS está a cero y cuando termina de enviar los datos, TX_DS se pone a uno, parace que al menos anvia...ahora el qué no lo puedo saber ya que no tengo un analizar de espectros...

¿Podrías decirme si acotaste algo el error que tenias?, es decir sabias que transmitia pero no recibia, chequebas algunos registros, etc...de esta forma sabria donde tengo que centrarme más.

Un saludete y gracias compañero.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18271
    • MicroPIC
Re: CCS pic nrf24l01
« Respuesta #13 en: 30 de Mayo de 2010, 14:16:46 »
Mi prueba se limitó a poner uno a enviar continuamente y a intentar recibir la información en el otro.
Efectivamente chequeaba el registro Status y veía lo mismo que tú.
En el receptor, me quedaba a la espera que el pin de Interrupción cambiase de estado, avisando de que había recibido algo, y aquello no se movía nunca.
Recuerdo que jugando con el pin de interrupción, forzándolo a un valor, o ignorando su valor, en alguna ocasión conseguí recibir lo que enviaba el emisor, pero nunca más fui capaz de reproducir aquel éxito.
En fin, los plazos de entrega me comían, y tuve que optar por montar Xbee.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: CCS pic nrf24l01
« Respuesta #14 en: 30 de Mayo de 2010, 14:22:47 »
Citar
Mi prueba se limitó a poner uno a enviar continuamente y a intentar recibir la información en el otro.
Efectivamente chequeaba el registro Status y veía lo mismo que tú.
En el receptor, me quedaba a la espera que el pin de Interrupción cambiase de estado, avisando de que había recibido algo, y aquello no se movía nunca.
Recuerdo que jugando con el pin de interrupción, forzándolo a un valor, o ignorando su valor, en alguna ocasión conseguí recibir lo que enviaba el emisor, pero nunca más fui capaz de reproducir aquel éxito.
En fin, los plazos de entrega me comían, y tuve que optar por montar Xbee.

Gracias por la info. la verdad es que viendo lo que me comentas cada vez tengo menos esperanzas de hacerlo funcionar, voy a luchar todo lo que pueda...!!!Sin dolor no hay éxito!!!...voy a ver si me flajelo un ratico  :D :D :D


 

anything