اطلاعیه

Collapse
No announcement yet.

کمک به راه اندازی ماژول +NRF24L01

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کمک به راه اندازی ماژول +NRF24L01

    با سلام .
    بنده دوتا ماژول +nrf24l01 گرفتم و با کتابخانه و برنامه ای ک دوستمون منطقه ازاد قرار داده بودند، اون رو برای دوتا 18f452 کامپایل کردم.
    اما کامل جواب نگرفتم.
    کامپایلر ccs 4.130 و میکرو هم 18f452 . برنامه رو هم قرار میدم.
    مشکل اینه ک اون مقداری ک قراره از یک طرف فرستاده بشه،توی سمت گیرنده ک با پورت سریال ب کامپیوتر وصله با علامت سوال جایگزین شده است.
    ممنون
    سمت فرستنده:
    کد:
    #include <18f452.h>
    #device PASS_STRINGS = IN_RAM 
    #use delay(xtal=20MHz)
    #include <stdio.h>
    #include <nrf2401.h>
    
    #FUSES NOWDT          //No Watch Dog Timer
    
    #use rs232(baud=4800, UART1, ERRORS)
    #define CE pin_d0
    
    
       
         
     
      
    void main()
    {
    int8 da=0; 
    setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
    init_NRF24L01();
    
    delay_ms(100); 
    
    mirf_config_rx_mod();
     
     
    
      while(TRUE) 
      {  
    
    mirf_Reads_PAYLOAD(mirf_PAYLOAD); 
    
     
    printf("=Reads_PAYLOAD=%s\n\r",read_bufer);
    
    
    da=mirf_read_reg(STATUS);
    printf("STATUS=%X \n\r",da);
    da=(da| 0x70);
    mirf_write_reg(STATUS,da); 
    
    da=mirf_read_reg(STATUS);
    printf("STATUS=%X \n\r",da);
    
    delay_ms(500);
      }
    
    }
    و سمت فرستنده :
    کد:
    #include <18f452.h>
    #device PASS_STRINGS = IN_RAM 
    #use delay(xtal=20MHz)
    #include <nrf2401.h>
    #include <stdio.h>
    
    #FUSES NOWDT,HS          //No Watch Dog Timer
    #define CE pin_d0
             
    void main()  
    {
    int8 da;
    setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
    init_NRF24L01();
    delay_ms(500);  
     
     
    mirf_config_tx_mod();
      
      while(TRUE) 
      {  
    
    mirf_send_data(mirf_PAYLOAD);
    da=mirf_status();
    da=(da| 0x70);
    mirf_write_reg(STATUS,da); 
    delay_ms(10);  
      }
     
    }

    و فایل کتابخانه ماژول :
    کد:
    #define mirf_CSN_hi  output_high(PIN_A5);
    #define mirf_CSN_lo  output_low(PIN_A5);
    
    #define mirf_CE_hi  output_high(PIN_D0);
    #define mirf_CE_lo  output_low(PIN_D0); 
      
    #define RADDR      (byte *)"HADI0"//addres Recive
    #define TADDR      (byte *)"HADI0"//adrres transfer
    
    /* Memory Map */
    #define CONFIG   0x00 
    #define EN_AA    0x01
    #define EN_RXADDR  0x02
    #define SETUP_AW  0x03
    #define SETUP_RETR 0x04
    #define RF_CH    0x05
    #define RF_SETUP  0x06
    #define STATUS   0x07
    #define OBSERVE_TX 0x08
    #define CD     0x09
    #define RX_ADDR_P0 0x0A
    #define RX_ADDR_P1 0x0B
    #define RX_ADDR_P2 0x0C
    #define RX_ADDR_P3 0x0D 
    #define RX_ADDR_P4 0x0E
    #define RX_ADDR_P5 0x0F
    #define TX_ADDR   0x10
    #define RX_PW_P0  0x11
    #define RX_PW_P1  0x12
    #define RX_PW_P2  0x13
    #define RX_PW_P3  0x14
    #define RX_PW_P4  0x15
    #define RX_PW_P5  0x16
    #define FIFO_STATUS 0x17
    
    /* Bit Mnemonics */
    #define MASK_RX_DR 6
    #define MASK_TX_DS 5
    #define MASK_MAX_RT 4
    #define EN_CRC   3
    #define CRCO    2
    #define PWR_UP   1
    #define PRIM_RX   0
    #define ENAA_P5   5
    #define ENAA_P4   4
    #define ENAA_P3   3
    #define ENAA_P2   2
    #define ENAA_P1   1
    #define ENAA_P0   0
    #define ERX_P5   5
    #define ERX_P4   4
    #define ERX_P3   3
    #define ERX_P2   2
    #define ERX_P1   1
    #define ERX_P0   0
    #define AW     0
    #define ARD     4
    #define ARC     0
    #define PLL_LOCK  4
    #define RF_DR    3
    #define RF_PWR   1
    #define LNA_HCURR  0    
    #define RX_DR    6
    #define TX_DS    5
    #define MAX_RT   4
    #define RX_P_NO   1
    #define TX_FULL   0
    #define PLOS_CNT  4
    #define ARC_CNT   0
    #define TX_REUSE  6
    #define FIFO_FULL  5
    #define TX_EMPTY  4
    #define RX_FULL   1
    #define RX_EMPTY  0
    
    /* Instruction Mnemonics */
    #define R_REGISTER  0x00
    #define W_REGISTER  0x20
    #define REGISTER_MASK 0x1F 
    #define R_RX_PAYLOAD 0x61
    #define W_TX_PAYLOAD 0xA0
    #define FLUSH_TX   0xE1
    #define FLUSH_RX   0xE2
    #define REUSE_TX_PL  0xE3
    #define NOP      0xFF
    
    #define mirf_CH      2
    #define mirf_PAYLOAD   16
    int8 bufer[40];
    int8 read_bufer[5];
    int8 send_buffer[mirf_PAYLOAD]={"Salam Bar Mahdi"}; 
    ///**************************************************************************************
    void mirf_config_tx_mod(void);
    void mirf_config_rx_mod(void);
    void init_NRF24L01(void);
    int8 mirf_read_reg(int8 reg);
    void mirf_write_reg(int8 reg,int8 value );
    void fu_FLUSH_TX_RX(void);
    void set_address_rx_tx(int8 reg,int8 *address,int8 WIDTH);
    void mirf_read_reg_array(int8 reg,int8 WIDTH);
    void mirf_Reads_PAYLOAD(int8 WIDTH); 
    void mirf_send_data(int8 WIDTH); 
    int8 mirf_status(void);
    int8 mirf_data_ready(void);
    int8 mirf_max_rt_reached(void);
     
    ///**************************************************************************************
    void mirf_config_rx_mod(void){
    
    mirf_write_reg(EN_AA, 0x01);
    mirf_write_reg(EN_RXADDR,0x01);
    mirf_write_reg(SETUP_AW,0x03);
    mirf_write_reg(SETUP_RETR, 0x18);
    mirf_write_reg(RF_CH, mirf_CH);
    mirf_write_reg(RF_SETUP, 0x07); 
    set_address_rx_tx(RX_ADDR_P0, TADDR, 5);
    set_address_rx_tx(TX_ADDR, TADDR, 5);
    mirf_write_reg(RX_PW_P0, mirf_PAYLOAD);
    mirf_write_reg(CONFIG, 0x0B); 
    
      
    }
    ///**************************************************************************************
    void mirf_config_tx_mod(void){
    
     
    mirf_write_reg(EN_AA, 0x01); 
    mirf_write_reg(EN_RXADDR,0x01);
    mirf_write_reg(SETUP_AW,0x03);
    mirf_write_reg(SETUP_RETR, 0x18);
    mirf_write_reg(RF_CH, mirf_CH);
    mirf_write_reg(RF_SETUP, 0x07); 
    set_address_rx_tx(RX_ADDR_P0, TADDR, 5); 
    set_address_rx_tx(TX_ADDR,TADDR, 5);
    mirf_write_reg(RX_PW_P0, mirf_PAYLOAD);
    mirf_write_reg(CONFIG, 0x0A); 
    
     
     
    }
    ///**************************************************************************************
    void init_NRF24L01(void){
    
    mirf_CE_lo;
    mirf_CSN_hi;
    }
    ///**************************************************************************************
    int8 mirf_status(void){
    int8 data,merge;
    
      merge=(R_REGISTER|(REGISTER_MASK & STATUS));
      mirf_CSN_lo;
      spi_write(merge);
      data =spi_read (NOP); 
      mirf_CSN_hi;
      return(data);
    }
    ///**************************************************************************************
    int8 mirf_data_ready(void){
    int8 data,merge;
    
      merge=(R_REGISTER|(REGISTER_MASK & STATUS));
      mirf_CSN_lo;
      spi_write(merge);
      data =spi_read (NOP); 
      mirf_CSN_hi;
      data=data & (1<<RX_DR);
      return(data);
    
    }
    ///**************************************************************************************
    int8 mirf_max_rt_reached(void){
    int8 data,merge;
    
      merge=(R_REGISTER|(REGISTER_MASK & STATUS));
      mirf_CSN_lo;
      spi_write(merge);
      data =spi_read (NOP); 
      mirf_CSN_hi;
      data=data & (1<<MAX_RT);
      return(data);
    
    }
    ///**************************************************************************************
    int8 mirf_read_reg(int8 reg) {
    int8 data,merge;
    
      merge=(R_REGISTER|(REGISTER_MASK & reg));
      mirf_CSN_lo;
      spi_write(merge);
      data =spi_read (NOP); 
      mirf_CSN_hi;
      return(data);
    }
    ///**************************************************************************************
    void mirf_write_reg(int8 reg,int8 value ){
    int8 merge;
    
      merge=(W_REGISTER|(REGISTER_MASK & reg));
      mirf_CSN_lo;
      spi_write(merge);
      spi_write (value); 
      mirf_CSN_hi;
      
    }
    ///**************************************************************************************
    void fu_FLUSH_TX_RX(void){
    mirf_CSN_lo;
    spi_write(FLUSH_TX); 
    mirf_CSN_hi;
    //
    mirf_CSN_lo;
    spi_write(FLUSH_TX); 
    mirf_CSN_hi;
    
    }
    ///**************************************************************************************
    void set_address_rx_tx(int8 reg,int8 *address,int8 WIDTH){
    int8 merge,i=0;
     
      merge=(W_REGISTER|(REGISTER_MASK & reg));
      mirf_CSN_lo;
      
      spi_write(merge);
      while(i<WIDTH){
             merge=address[i];
             spi_write(merge);
             i++;
             }
      mirf_CSN_hi;
    }
    
    ///**************************************************************************************
    void mirf_read_reg_array(int8 reg,int8 WIDTH){
    int8 i=0,merge;
    
      merge=(R_REGISTER|(REGISTER_MASK & reg));
      mirf_CSN_lo;
      
      spi_write(merge);
      while(i<WIDTH){
             bufer[i] =spi_read (NOP); 
             i++;
             }
      mirf_CSN_hi;
    }
    ///**************************************************************************************
    void mirf_Reads_PAYLOAD(int8 WIDTH){
    int8 i=0;
    mirf_CE_hi; 
    mirf_CSN_lo;
    spi_write(R_RX_PAYLOAD);
    while(i<WIDTH){
             read_bufer[i] =spi_read (NOP); 
             i++;
           }
    mirf_CSN_hi;
    
    mirf_CSN_lo;
    spi_write(FLUSH_RX); 
    mirf_CSN_hi;
     
    
    }
    ///**************************************************************************************
    void mirf_send_data(int8 WIDTH){
    int8 i=0,merge=0;
    
    mirf_CSN_lo;
    spi_write(FLUSH_TX); 
    mirf_CSN_hi;
    
    mirf_CE_hi; 
    mirf_CSN_lo;
    spi_write(W_TX_PAYLOAD);
    while(i<WIDTH){
             merge=send_buffer[i] ;
             spi_write(merge);
             i++;
           }
    mirf_CSN_hi;
    
    mirf_CE_hi; // Start transmission
    delay_us(50);
    mirf_CE_lo;
    
    }

    اینم از لینک عکس :
    http://www.4shared.com/photo/dTxGoXd_ba/noproblem.html
    :sad:

    اضافه شده در تاریخ :
    ایا اندازه بافر در قسمت گیرنده و فرستنده باید یکی باشد؟
    رو به خودت نسبت هستی مده!**دل به چنین مستی و پستی مده! //زانچه نداری ز چه افسردهآ‌ای*و زغم و اندوه دل آزردهآ‌ای؟!//گر ببرد ور بدهد دست دوست*ور بِبَرد ور بنهد مُلک اوست//ور بِکِشی یا بکُشی دیو غم **کج نشود دست قضا را قلم//آنچه خدا خواست همان میآ‌شود**وآنچه دلت خواست نه آن میآ‌شود.
    ....

    #2
    پاسخ : کمک به راه اندازی ماژول +NRF24L01

    با سلام خدمت دوستان و اشنایان و اساتید.
    بحمدلله و ثنائه.
    مدارم با برنامه نمونه ای ک در لینک زیر قرار دارد راه افتاد.
    با ccs v 5.012 تست شده با دو میکروی 16f877a و 18f452 هم کار میکند.
    من الله التوفیق
    ممنون از همه مخصوصا اقای عبدی بزرگوار.
    رو به خودت نسبت هستی مده!**دل به چنین مستی و پستی مده! //زانچه نداری ز چه افسردهآ‌ای*و زغم و اندوه دل آزردهآ‌ای؟!//گر ببرد ور بدهد دست دوست*ور بِبَرد ور بنهد مُلک اوست//ور بِکِشی یا بکُشی دیو غم **کج نشود دست قضا را قلم//آنچه خدا خواست همان میآ‌شود**وآنچه دلت خواست نه آن میآ‌شود.
    ....

    دیدگاه


      #3
      پاسخ : کمک به راه اندازی ماژول +NRF24L01

      کدوم لینک؟؟؟؟
      :question:

      دیدگاه


        #4
        پاسخ : کمک به راه اندازی ماژول +NRF24L01

        ببخشید:
        http://www.iranmicro.ir/forum/attachment.php?attachmentid=5971&d=1371241470
        رو به خودت نسبت هستی مده!**دل به چنین مستی و پستی مده! //زانچه نداری ز چه افسردهآ‌ای*و زغم و اندوه دل آزردهآ‌ای؟!//گر ببرد ور بدهد دست دوست*ور بِبَرد ور بنهد مُلک اوست//ور بِکِشی یا بکُشی دیو غم **کج نشود دست قضا را قلم//آنچه خدا خواست همان میآ‌شود**وآنچه دلت خواست نه آن میآ‌شود.
        ....

        دیدگاه


          #5
          پاسخ : کمک به راه اندازی ماژول +NRF24L01

          بازم نشد . . .
          :smile:

          دیدگاه


            #6
            پاسخ : کمک به راه اندازی ماژول +NRF24L01

            http://www.iranmicro.ir/forum/attach...p;d=1371241470
            رو به خودت نسبت هستی مده!**دل به چنین مستی و پستی مده! //زانچه نداری ز چه افسردهآ‌ای*و زغم و اندوه دل آزردهآ‌ای؟!//گر ببرد ور بدهد دست دوست*ور بِبَرد ور بنهد مُلک اوست//ور بِکِشی یا بکُشی دیو غم **کج نشود دست قضا را قلم//آنچه خدا خواست همان میآ‌شود**وآنچه دلت خواست نه آن میآ‌شود.
            ....

            دیدگاه


              #7
              پاسخ : کمک به راه اندازی ماژول +NRF24L01

              :mrgreen:
              من دیگه حرفی ندارم . . .
              :biggrin:

              دیدگاه


                #8
                پاسخ : کمک به راه اندازی ماژول +NRF24L01

                دوستان در مورد MPLAB نظری ندارید؟
                من با C18 و C30 کار میکنم...

                دیدگاه

                لطفا صبر کنید...
                X