صفحه 1 از 3 123 آخرینآخرین
نمایش نتایج: از 1 به 20 از 57

موضوع: راه اندازی nrf24l01 با lpc1768

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2012
    نوشته ها
    22
    تشکر
    22
    تشکر شده 4 بار در 3 پست

    پیش فرض راه اندازی nrf24l01 با lpc1768

    با عرض سلام و خسته نباشید.....

    از دوستان اگر کسی ماژول nRF24L01 رو تونسته راه اندازی کنه ممنون میشم اگه نحوه راه اندازی و سورس کدی رو در این تاپیک قرار بده...

    ممنون......

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    عضو جدید
    تاریخ عضویت
    Mar 2010
    نوشته ها
    11
    تشکر
    1
    تشکر شده 29 بار در 8 پست

    پیش فرض

    نقل قول نوشته اصلی توسط hopo نمایش پست ها
    با عرض سلام و خسته نباشید.....

    از دوستان اگر کسی ماژول nrf24l01 رو تونسته راه اندازی کنه ممنون میشم اگه نحوه راه اندازی و سورس کدی رو در این تاپیک قرار بده...

    ممنون......
    من دارم با lpc2148 راه اندازیش میکنم، اما یه مشکل اساسی که وجود داره اینه که هر چی بهش میفرستم، عدد یک رو بهم برمیگردونه! و این خیلی بده. نمیدونم مشکل از کجاست... ولی ایشالا راش میندازم... منتظر باشید...

  4. کاربران : 2 تشکر کرده اند از شما alibme87 برای ارسال این پست سودمند:


  5. #3
    عضو جدید
    تاریخ عضویت
    Mar 2010
    نوشته ها
    11
    تشکر
    1
    تشکر شده 29 بار در 8 پست

    پیش فرض

    خدارو شکر با راهنمایی دوستان (استاد!) تونستتم ماژول رو راه بندازم... اینم فایل های Receiver و Transmitter برای میکروکنترلر LPC2148
    فايل هاي پيوست شده فايل هاي پيوست شده

  6. کاربران : 17 تشکر کرده اند از شما alibme87 برای ارسال این پست سودمند:


  7. #4
    مدیر انجمن Aghaeifar آواتار ها
    تاریخ عضویت
    Feb 2010
    نام
    علی آقائی فر
    نوشته ها
    712
    تشکر
    505
    تشکر شده 885 بار در 409 پست

    پیش فرض

    نقل قول نوشته اصلی توسط alibme87 نمایش پست ها
    خدارو شکر با راهنمایی دوستان (استاد!) تونستتم ماژول رو راه بندازم... اینم فایل های receiver و transmitter برای میکروکنترلر lpc2148
    سلام
    خدا قوت
    اگه ممکن بود قسمت رپورت این بخشش برام بفرستی در اختیار بچه ها بذارم البته با کپی رایت
    ما در انتظار رویت خورشیدیم ...

    اللهم عجل لولیک الفرج

  8. #5
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    مزارعی
    نوشته ها
    1,197
    تشکر
    129
    تشکر شده 2,070 بار در 818 پست

    پیش فرض

    خدارو شکر با راهنمایی دوستان (استاد!) تونستتم ماژول رو راه بندازم... اینم فایل های receiver و transmitter برای میکروکنترلر lpc2148
    دست شما درد نکنه که دوست گرامی که روح بزرگی داری و نتیجه کارت رو در اختیار بچه ها قرار دادی !

  9. #6
    کاربر دائمی mj3747 آواتار ها
    تاریخ عضویت
    Sep 2007
    نام
    مجید
    نوشته ها
    414
    تشکر
    530
    تشکر شده 552 بار در 235 پست

    پیش فرض

    دوستان برد (مسافت) این ماژول چقدره؟

  10. #7
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2012
    نوشته ها
    22
    تشکر
    22
    تشکر شده 4 بار در 3 پست

    پیش فرض

    دو نوع ماژول هست... معمولی هاش 40 متره....
    یه دونه هم نوع تقویت شدش هست که 70 متر میره

  11. #8
    کاربر دائمی mj3747 آواتار ها
    تاریخ عضویت
    Sep 2007
    نام
    مجید
    نوشته ها
    414
    تشکر
    530
    تشکر شده 552 بار در 235 پست

    پیش فرض

    هم ردیف همین ماژول توی فرکانس کاری 2.4g ماژول دیگه ای میشناسید که بشه برا ساخت ریموت کنترل ربات یا ساخت واکی تاکی ازش استفاده کرد؟

  12. #9
    عضو جدید
    تاریخ عضویت
    Mar 2010
    نوشته ها
    11
    تشکر
    1
    تشکر شده 29 بار در 8 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mj3747 نمایش پست ها
    دوستان برد (مسافت) این ماژول چقدره؟
    این بردی که من (از جوان الکترونیک) خریدم، آنتن زیگراگ سرخود داره. با همین آنتن تا 130 الی 140 متر رو راحت جواب داد... تازه فکر میکنم بیشتر هم باشه...

  13. تشکرها از این نوشته :


  14. #10
    کاربر دائمی mj3747 آواتار ها
    تاریخ عضویت
    Sep 2007
    نام
    مجید
    نوشته ها
    414
    تشکر
    530
    تشکر شده 552 بار در 235 پست

    پیش فرض

    نقل قول نوشته اصلی توسط alibme87 نمایش پست ها
    این بردی که من (از جوان الکترونیک) خریدم، آنتن زیگراگ سرخود داره. با همین آنتن تا 130 الی 140 متر رو راحت جواب داد... تازه فکر میکنم بیشتر هم باشه...
    چه قیمت؟
    میشه یه عکس ازش بذازی؟
    ممنون.

  15. #11
    عضو جدید
    تاریخ عضویت
    Mar 2010
    نوشته ها
    11
    تشکر
    1
    تشکر شده 29 بار در 8 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mj3747 نمایش پست ها
    چه قیمت؟
    میشه یه عکس ازش بذازی؟
    ممنون.
    قیمتش 10 تومنه. من دو تاشو خریدم 19 تومن.
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست nRF24L01.jpg  

  16. تشکرها از این نوشته :


  17. #12
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,360
    تشکر
    1,095
    تشکر شده 5,221 بار در 1,658 پست

    پیش فرض

    سلام
    توی فروشگاه کویرالکترونیک هم سرچ بزنید
    کوبی برد رو با لینوکس تجربه کنید!
    اگر خودمان نساختیم ولی راه را برای ساخت دیگران هموار کردیم...

  18. تشکرها از این نوشته :


  19. #13
    تازه وارد
    تاریخ عضویت
    Aug 2011
    نوشته ها
    1
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    با سلام
    من هم از nrf24l01 استفاده می کنم و آن مدلی که آنتن زیگزاگ (میکرو استریپ) روی بردش دارد
    من تا 15 متر بیشتر نتونستم جواب بگیرم . به تنظیمات پیش فرض هم دست نزدم.کسی می دونه مشکل چیه ؟

  20. #14
    عضو جدید
    تاریخ عضویت
    Jan 2012
    نام
    محمدرضا سربندی فراهانی
    نوشته ها
    14
    تشکر
    16
    تشکر شده 1 بار در 1 پست

    پیش فرض

    سلام
    من با nRF24l01plus کار کردم و بردش تا 130 اینا بدون انتن تقویت کننده بود
    ولی خیلی حساس به محیط هستش
    به طوری که زمانی که جلوی فرستنده یا گیرنده می ایستادم،بعضی از اطلاعاتم از بین میرفت...

  21. تشکرها از این نوشته :


  22. #15
    عضو جدید kasra711 آواتار ها
    تاریخ عضویت
    Dec 2011
    نام
    کسری افشاری
    نوشته ها
    10
    تشکر
    16
    تشکر شده 5 بار در 4 پست

    پیش فرض

    طراحی pcbاین مازول واقعا عالی بود ولی باید برای انتنش هم فکر بهتری کرد

  23. #16
    کاربر فعال shahrivar88 آواتار ها
    تاریخ عضویت
    Jul 2011
    نام
    امیر عزیزی
    نوشته ها
    231
    تشکر
    157
    تشکر شده 183 بار در 100 پست

    پیش فرض

    [PHP]
    // Target : LPC2148
    // Crystal: 12.000Mhz
    // Author: ALI_BME87
    #include <lpc214x.h>
    #include "lcd.h"
    /*-----------------------------------------------------------------------------
    Global Defines
    ------------------------------------------------------------------------------*/
    unsigned char Buffer[] = {'S', 'A', 'L', 'A', 'M'}, data_r[];
    #define TX_ADR_WIDTH 5 // 5 bytes TX(RX) address width
    #define TX_PLOAD_WIDTH 5 // 2 bytes TX payload
    unsigned char TX_ADDRESS[TX_ADR_WIDTH] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7}; // Define a static TX address

    void init_CPU (void);
    void RX_MODE(void);
    void TX_MODE(void);
    void delay_main(void);
    void delayms(unsigned int dly);
    void spi_init(void);
    void int_en(void);
    void spi_int(void);
    void EINT0_int(void) __irq;
    void SPI0_int(void) __irq;
    unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);
    unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);
    unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value);
    unsigned char SPI_Read(unsigned char reg);
    unsigned char SPI_RW(unsigned char byte);

    //************************************************** **************//
    // SPI(nRF24L01) commands
    #define READ_REG 0x00 // Define read command to register
    #define WRITE_REG 0x20 // Define write command to register
    #define RD_RX_PLOAD 0x61 // Define RX payload register address
    #define WR_TX_PLOAD 0xA0 // Define TX payload register address
    #define FLUSH_TX 0xE1 // Define flush TX register command
    #define FLUSH_RX 0xE2 // Define flush RX register command
    #define REUSE_TX_PL 0xE3 // Define reuse TX payload register command
    //#define NOP 0xFF // Define No Operation, might be used to read status register
    //************************************************** *//
    // SPI(nRF24L01) registers(addresses)
    #define CONFIG 0x00 // 'Config' register address
    #define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address
    #define EN_RXADDR 0x02 // 'Enabled RX addresses' register address
    #define SETUP_AW 0x03 // 'Setup address width' register address
    #define SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address
    #define RF_CH 0x05 // 'RF channel' register address
    #define RF_SETUP 0x06 // 'RF setup' register address
    #define STATUS 0x07 // 'Status' register address
    #define OBSERVE_TX 0x08 // 'Observe TX' register address
    #define CD 0x09 // 'Carrier Detect' register address
    #define RX_ADDR_P0 0x0A // 'RX address pipe0' register address
    #define RX_ADDR_P1 0x0B // 'RX address pipe1' register address
    #define RX_ADDR_P2 0x0C // 'RX address pipe2' register address
    #define RX_ADDR_P3 0x0D // 'RX address pipe3' register address
    #define RX_ADDR_P4 0x0E // 'RX address pipe4' register address
    #define RX_ADDR_P5 0x0F // 'RX address pipe5' register address
    #define TX_ADDR 0x10 // 'TX address' register address
    #define RX_PW_P0 0x11 // 'RX payload width, pipe0' register address
    #define RX_PW_P1 0x12 // 'RX payload width, pipe1' register address
    #define RX_PW_P2 0x13 // 'RX payload width, pipe2' register address
    #define RX_PW_P3 0x14 // 'RX payload width, pipe3' register address
    #define RX_PW_P4 0x15 // 'RX payload width, pipe4' register address
    #define RX_PW_P5 0x16 // 'RX payload width, pipe5' register address
    #define FIFO_STATUS 0x17 // 'FIFO Status Register' register address
    #define MAX_RT 0x10 // Max #of TX retrans interrupt
    #define TX_DS 0x20 // TX data sent interrupt
    #define RX_DR 0x40 // RX data received
    //-----------------------------------------------------------------------------
    //------------------------------------------------------
    #define CEL IO0CLR = 1<<30 //Chip Enable OFF
    #define CEH IO0SET = 1<<30 //Chip Enable ON
    #define CSNL IO0CLR = 1<<31 // Chip Select ON (Active Low)
    #define CSNH IO0SET = 1<<31 // Chip Select OFF (Active Low)


    int main(void){
    unsigned char sure_tx, i;
    lcd_init();
    lcd_clear();

    init_CPU ();

    spi_init();

    int_en(); // module interrupt Initializing
    // spi_int(); // SPI Interrupt

    RX_MODE();
    delayms(5);
    // lcd_print (" READ");

    sure_rx = SPI_Read(CONFIG); // read the CONFIG register
    if ( (sure_tx == 0x0F)){ // make sure that the module is in RX mode
    lcd_gotoxy(0,0);
    lcd_print("R_MODE_OK");
    }

    SPI_Read_Buf (RD_RX_PLOAD, TX_ADDRESS, TX_ADR_WIDTH); // Read the register which data is in

    lcd_gotoxy(1,0);

    for(i=0; i<TX_ADR_WIDTH; i++){ // Display data

    lcd_putchar(data_r[i]);
    }

    while (1){

    }

    }


    void TX_MODE(void)
    {

    delay_main();

    CEL;
    SPI_RW_Reg(WRITE_REG + CONFIG, 0x0E); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. Interrupts enabled.. Module is in TX mode
    SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
    SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x03); // Enable 5 Byte Payload
    SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
    SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x01); // 250us + 86us, 1 retransmit...
    SPI_RW_Reg(WRITE_REG + RF_CH, 40); // F0= 2400 + RF_CH [MHz], F0 = 2440 [MHz]
    SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0F); // TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURR

    // SPI_RW_Reg(WRITE_REG + STATUS, 0x70); /* Clear RX_DR, TX_DS, MAX_RT Interrupt Sourse */
    SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // Writes TX_Address to nRF24L01
    SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
    SPI_Write_Buf(WR_TX_PLOAD, Buffer, TX_PLOAD_WIDTH); // Writes data to TX payload

    CEH;
    delay_main();

    }


    /**************************************************
    Function: RX_Mode();

    Description:
    This function initializes one nRF24L01 device to
    RX Mode, set RX address, writes RX payload width,
    select RF channel, datarate & LNA HCURR.
    After init, CE is toggled high, which means that
    this device is now ready to receive a datapacket. */
    /**************************************************/

    void RX_MODE(void)
    {

    CEL;
    SPI_RW_Reg(WRITE_REG + CONFIG, 0x0F); // Set PWR_UP bit, Module is in Standby-I mode
    SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
    SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
    SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x03);
    SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device
    SPI_RW_Reg(WRITE_REG + RF_CH, 40); // F0= 2400 + RF_CH [MHz], F0 = 2440 [MHz]
    SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // Select same RX payload width as TX Payload width (One Byte)
    SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0F); // TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURR
    // SPI_RW_Reg(WRITE_REG + CONFIG, 0x7F); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. Interrupt disabled.., Module is in RX mode
    CEH;

    delay_main();
    // This device is now ready to receive one packet of 1 byte payload from a TX device sending to address
    // '7878787878', with auto acknowledgment, retransmit count of 10, RF channel 40 and datarate = 1Mbps.

    }



    void SPI0_int(void) __irq {

    S0SPINT |= 1;
    //SPI_RW_Reg(WRITE_REG + STATUS, 0x70); /* Clear RX_DR, TX_DS, MAX_RT Interrupt Sourse */
    VICVectAddr = 0; /* Acknowledge Interrupt */
    delayms(5);
    }


    void EINT0_int(void) __irq {
    unsigned char i;
    IO0CLR = 1<<21; // Beep if data received
    delayms(50);
    IO0SET = 1<<21; // Buzzer OFF

    lcd_clear();
    lcd_print("DATA RECEIVED:");

    SPI_RW_Reg(WRITE_REG + STATUS, 0x70); /* Clear RX_DR, TX_DS, MAX_RT Interrupt Sourse */
    EXTINT = 1; /* Clear EINT0 interrupt flag */
    VICVectAddr = 0; /* Acknowledge Interrupt */
    delayms(5);
    }

    /*-----------------------------------------------------------------------------
    Module: init_CPU
    Function: Initialization of CPU
    ------------------------------------------------------------------------------*/
    void init_CPU (void){

    IO0DIR = 1<<30 | 1<<31 | 1<<21; // (P0.30:CE, P0.31:CSN) as output + Buzzer
    IO0SET = 1<<21;
    CEL; // Disable the module at first, CE=OFF
    CSNH; // CSN = 1 (CSN is a active low signal)
    }


    // SPI Initialazing
    void spi_init(){

    PINSEL0 = 1<<8 | 1<<10 | 1<<12; // Enable MOSI, MISO, SCK For SPI
    S0SPCCR = 15; // PCLK = 15MHz, SPCCR0 = 15 => SCK = 1MHz

    // 11:8-BITS 7-SPIE 6-LSBF 5-MSTR 4-CPOL 3-CPHA 2-BitEnable
    S0SPCR = 0xA0; // 0000 1 0 1 0 0 0(8-bit transfer)
    }

    void int_en (){

    EXTMODE=0x00; /* EINT0 is level sensitive. */
    EXTPOLAR=0x00; /* EINT0 is low-active sensitive */
    PINSEL0 |= 1<<2 | 1<<3; /* EINT0(P0.1) Selected */
    VICVectAddr0 = (unsigned int) EINT0_int; /* set interrupt vector 0 */
    VICVectCntl0 = ( 0x20 | 14 ); /* enable slot & use it for EINT0 Interrupt */
    VICIntEnable |= (unsigned int) 1<<14; /* Enable EINT0 Interrupt */
    }

    void spi_int (){

    VICVectAddr0 = (unsigned int) SPI0_int; /* set interrupt vector 0 */
    VICVectCntl0 = ( 0x20 | 10 ); /* enable slot & use it for SPI0 Interrupt */
    VICIntEnable |= (unsigned int) 1<<10; /* Enable SPI0 Interrupt */
    }

    unsigned char SPI_RW(unsigned char byte)
    {

    S0SPDR = byte;
    while((S0SPSR & 0x80) == 0); // Wait for completion of Transmit
    delay_main();
    return(S0SPDR); // return data received from Slave
    }
    /**************************************************
    Function: SPI_RW_Reg();

    Description:
    Writes value 'value' to register 'reg' */
    /**************************************************/
    unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value)
    {
    unsigned char status;
    CSNL;
    delay_main();
    SPI_RW(reg); // select register
    delay_main();
    SPI_RW(value); // ..and write value to it..
    delay_main();
    CSNH;
    return(status); // return nRF24L01 status byte
    }

    unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
    {
    unsigned char status,byte_ctr;
    // *data_r = *pBuf;
    CSNL;
    delay_main();
    status = SPI_RW(reg); // Select register to write to and read status byte
    for(byte_ctr=0;byte_ctr<bytes;byte_ctr++){
    pBuf[byte_ctr] = SPI_RW(0); // Perform SPI_RW to read byte from nRF24L01
    data_r[byte_ctr] = pBuf[byte_ctr];
    }
    delay_main();
    CSNH;
    return(status); // return nRF24L01 status byte
    }

    unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
    {
    unsigned char status,byte_ctr;
    CSNL;
    delay_main();
    status = SPI_RW(reg); // Select register to write to and read status byte
    for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // then write all byte in buffer(*pBuf)
    status = SPI_RW(*pBuf++);
    delay_main();
    CSNH;
    return(status); // return nRF24L01 status byte

    }




    /**************************************************
    Function: SPI_Read();

    Description:
    Read one byte from nRF24L01 register, 'reg' */
    /**************************************************/
    unsigned char SPI_Read(unsigned char reg)
    {
    unsigned char reg_val;
    CSNL;
    delay_main();
    SPI_RW(READ_REG + reg); // Select register to read from..
    reg_val = SPI_RW(0);
    //lcd_putchar(0x21);
    CSNH;
    delay_main();
    return(reg_val); // return register value
    }

    void delay_main(void){
    __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    }

    void delayms(unsigned int dly){
    unsigned int del;
    del = dly*15000;
    for(; del>0; del--);
    }




    [/PHP]ممنون میشم اگه کسی به من بگه جریان چیه؟؟؟
    یعنی دیتا چطوری توی آرایه قرار میگیره؟ درحالی که در هیچ کجای برنامه داده رو توی data_r قرار ندادن. اما وقتی data_r را برای نمایش روی ال سی دی ارسال میکنه داده را درست نمایش میده.
    خلاصه بگم در کدام خط از برنامه داده دریافتی از ماژول توی آرایه
    data_r قرار میگیره؟؟؟؟
    ویرایش توسط shahrivar88 : 20-05-2013 در ساعت 17:10
    سرزمین من\r

    دانلود کتاب آموزش پورت سریال در c#

    http://www.iranmicro.ir/forum/showthread.php?t=9629

  24. #17
    کاربر فعال shahrivar88 آواتار ها
    تاریخ عضویت
    Jul 2011
    نام
    امیر عزیزی
    نوشته ها
    231
    تشکر
    157
    تشکر شده 183 بار در 100 پست

    پیش فرض

    // Target : LPC2148
    // Crystal: 12.000Mhz
    // Author: ALI_BME87
    #include <lpc214x.h>
    #include "lcd.h"
    /*-----------------------------------------------------------------------------
    Global Defines
    ------------------------------------------------------------------------------*/
    unsigned char Buffer[] = {'S', 'A', 'L', 'A', 'M'},data_r[];
    #define TX_ADR_WIDTH 5 // 5 bytes TX(RX) address width
    #define TX_PLOAD_WIDTH 5 // 2 bytes TX payload
    unsigned char TX_ADDRESS[TX_ADR_WIDTH] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7}; // Define a static TX address

    void init_CPU (void);
    void RX_MODE(void);
    void TX_MODE(void);
    void delay_main(void);
    void delayms(unsigned int dly);
    void spi_init(void);
    void int_en(void);
    void spi_int(void);
    void EINT0_int(void) __irq;
    void SPI0_int(void) __irq;
    unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);
    unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);
    unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value);
    unsigned char SPI_Read(unsigned char reg);
    unsigned char SPI_RW(unsigned char byte);

    //************************************************** **************//
    // SPI(nRF24L01) commands
    #define READ_REG 0x00 // Define read command to register
    #define WRITE_REG 0x20 // Define write command to register
    #define RD_RX_PLOAD 0x61 // Define RX payload register address
    #define WR_TX_PLOAD 0xA0 // Define TX payload register address
    #define FLUSH_TX 0xE1 // Define flush TX register command
    #define FLUSH_RX 0xE2 // Define flush RX register command
    #define REUSE_TX_PL 0xE3 // Define reuse TX payload register command
    //#define NOP 0xFF // Define No Operation, might be used to read status register
    //************************************************** *//
    // SPI(nRF24L01) registers(addresses)
    #define CONFIG 0x00 // 'Config' register address
    #define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address
    #define EN_RXADDR 0x02 // 'Enabled RX addresses' register address
    #define SETUP_AW 0x03 // 'Setup address width' register address
    #define SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address
    #define RF_CH 0x05 // 'RF channel' register address
    #define RF_SETUP 0x06 // 'RF setup' register address
    #define STATUS 0x07 // 'Status' register address
    #define OBSERVE_TX 0x08 // 'Observe TX' register address
    #define CD 0x09 // 'Carrier Detect' register address
    #define RX_ADDR_P0 0x0A // 'RX address pipe0' register address
    #define RX_ADDR_P1 0x0B // 'RX address pipe1' register address
    #define RX_ADDR_P2 0x0C // 'RX address pipe2' register address
    #define RX_ADDR_P3 0x0D // 'RX address pipe3' register address
    #define RX_ADDR_P4 0x0E // 'RX address pipe4' register address
    #define RX_ADDR_P5 0x0F // 'RX address pipe5' register address
    #define TX_ADDR 0x10 // 'TX address' register address
    #define RX_PW_P0 0x11 // 'RX payload width, pipe0' register address
    #define RX_PW_P1 0x12 // 'RX payload width, pipe1' register address
    #define RX_PW_P2 0x13 // 'RX payload width, pipe2' register address
    #define RX_PW_P3 0x14 // 'RX payload width, pipe3' register address
    #define RX_PW_P4 0x15 // 'RX payload width, pipe4' register address
    #define RX_PW_P5 0x16 // 'RX payload width, pipe5' register address
    #define FIFO_STATUS 0x17 // 'FIFO Status Register' register address
    #define MAX_RT 0x10 // Max #of TX retrans interrupt
    #define TX_DS 0x20 // TX data sent interrupt
    #define RX_DR 0x40 // RX data received
    //-----------------------------------------------------------------------------
    //------------------------------------------------------
    #define CEL IO0CLR = 1<<30 //Chip Enable OFF
    #define CEH IO0SET = 1<<30 //Chip Enable ON
    #define CSNL IO0CLR = 1<<31 // Chip Select ON (Active Low)
    #define CSNH IO0SET = 1<<31 // Chip Select OFF (Active Low)


    int main(void){
    unsigned char sure_tx, i;
    lcd_init();
    lcd_clear();

    init_CPU ();

    spi_init();

    int_en(); // module interrupt Initializing
    // spi_int(); // SPI Interrupt

    RX_MODE();
    delayms(5);
    // lcd_print (" READ");

    sure_rx = SPI_Read(CONFIG); // read the CONFIG register
    if ( (sure_tx == 0x0F)){ // make sure that the module is in RX mode
    lcd_gotoxy(0,0);
    lcd_print("R_MODE_OK");
    }

    SPI_Read_Buf (RD_RX_PLOAD, TX_ADDRESS, TX_ADR_WIDTH); // Read the register which data is in

    lcd_gotoxy(1,0);

    for(
    i=0; i<TX_ADR_WIDTH; i++){ // Display data

    lcd_putchar(data_r[i]);
    }

    while (
    1){





    ممنون میشم اگه کسی به من بگه جریان چیه؟؟؟
    یعنی دیتا چطوری توی آرایه قرار میگیره؟ درحالی که در هیچ کجای برنامه داده رو توی data_r قرار ندادن. اما وقتی data_r را برای نمایش روی ال سی دی ارسال میکنه داده را درست نمایش میده.
    خلاصه بگم در کدام خط از برنامه داده دریافتی از ماژول توی آرایه
    data_r قرار میگیره؟؟؟؟
    __________________
    سرزمین من\r

    دانلود کتاب آموزش پورت سریال در c#

    http://www.iranmicro.ir/forum/showthread.php?t=9629

  25. #18
    عضو جدید
    تاریخ عضویت
    Mar 2010
    نوشته ها
    11
    تشکر
    1
    تشکر شده 29 بار در 8 پست

    پیش فرض

    نقل قول نوشته اصلی توسط shahrivar88 نمایش پست ها
    [PHP]
    // Target : LPC2148
    // Crystal: 12.000Mhz
    // Author: ALI_BME87
    #include <lpc214x.h>
    #include "lcd.h"
    /*-----------------------------------------------------------------------------
    Global Defines
    ------------------------------------------------------------------------------*/
    unsigned char Buffer[] = {'S', 'A', 'L', 'A', 'M'}, data_r[];
    #define TX_ADR_WIDTH 5 // 5 bytes TX(RX) address width
    #define TX_PLOAD_WIDTH 5 // 2 bytes TX payload
    unsigned char TX_ADDRESS[TX_ADR_WIDTH] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7}; // Define a static TX address

    void init_CPU (void);
    void RX_MODE(void);
    void TX_MODE(void);
    void delay_main(void);
    void delayms(unsigned int dly);
    void spi_init(void);
    void int_en(void);
    void spi_int(void);
    void EINT0_int(void) __irq;
    void SPI0_int(void) __irq;
    unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);
    unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);
    unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value);
    unsigned char SPI_Read(unsigned char reg);
    unsigned char SPI_RW(unsigned char byte);

    //************************************************** **************//
    // SPI(nRF24L01) commands
    #define READ_REG 0x00 // Define read command to register
    #define WRITE_REG 0x20 // Define write command to register
    #define RD_RX_PLOAD 0x61 // Define RX payload register address
    #define WR_TX_PLOAD 0xA0 // Define TX payload register address
    #define FLUSH_TX 0xE1 // Define flush TX register command
    #define FLUSH_RX 0xE2 // Define flush RX register command
    #define REUSE_TX_PL 0xE3 // Define reuse TX payload register command
    //#define NOP 0xFF // Define No Operation, might be used to read status register
    //************************************************** *//
    // SPI(nRF24L01) registers(addresses)
    #define CONFIG 0x00 // 'Config' register address
    #define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address
    #define EN_RXADDR 0x02 // 'Enabled RX addresses' register address
    #define SETUP_AW 0x03 // 'Setup address width' register address
    #define SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address
    #define RF_CH 0x05 // 'RF channel' register address
    #define RF_SETUP 0x06 // 'RF setup' register address
    #define STATUS 0x07 // 'Status' register address
    #define OBSERVE_TX 0x08 // 'Observe TX' register address
    #define CD 0x09 // 'Carrier Detect' register address
    #define RX_ADDR_P0 0x0A // 'RX address pipe0' register address
    #define RX_ADDR_P1 0x0B // 'RX address pipe1' register address
    #define RX_ADDR_P2 0x0C // 'RX address pipe2' register address
    #define RX_ADDR_P3 0x0D // 'RX address pipe3' register address
    #define RX_ADDR_P4 0x0E // 'RX address pipe4' register address
    #define RX_ADDR_P5 0x0F // 'RX address pipe5' register address
    #define TX_ADDR 0x10 // 'TX address' register address
    #define RX_PW_P0 0x11 // 'RX payload width, pipe0' register address
    #define RX_PW_P1 0x12 // 'RX payload width, pipe1' register address
    #define RX_PW_P2 0x13 // 'RX payload width, pipe2' register address
    #define RX_PW_P3 0x14 // 'RX payload width, pipe3' register address
    #define RX_PW_P4 0x15 // 'RX payload width, pipe4' register address
    #define RX_PW_P5 0x16 // 'RX payload width, pipe5' register address
    #define FIFO_STATUS 0x17 // 'FIFO Status Register' register address
    #define MAX_RT 0x10 // Max #of TX retrans interrupt
    #define TX_DS 0x20 // TX data sent interrupt
    #define RX_DR 0x40 // RX data received
    //-----------------------------------------------------------------------------
    //------------------------------------------------------
    #define CEL IO0CLR = 1<<30 //Chip Enable OFF
    #define CEH IO0SET = 1<<30 //Chip Enable ON
    #define CSNL IO0CLR = 1<<31 // Chip Select ON (Active Low)
    #define CSNH IO0SET = 1<<31 // Chip Select OFF (Active Low)


    int main(void){
    unsigned char sure_tx, i;
    lcd_init();
    lcd_clear();

    init_CPU ();

    spi_init();

    int_en(); // module interrupt Initializing
    // spi_int(); // SPI Interrupt

    RX_MODE();
    delayms(5);
    // lcd_print (" READ");

    sure_rx = SPI_Read(CONFIG); // read the CONFIG register
    if ( (sure_tx == 0x0F)){ // make sure that the module is in RX mode
    lcd_gotoxy(0,0);
    lcd_print("R_MODE_OK");
    }

    SPI_Read_Buf (RD_RX_PLOAD, TX_ADDRESS, TX_ADR_WIDTH); // Read the register which data is in

    lcd_gotoxy(1,0);

    for(i=0; i<TX_ADR_WIDTH; i++){ // Display data

    lcd_putchar(data_r[i]);
    }

    while (1){

    }

    }


    void TX_MODE(void)
    {

    delay_main();

    CEL;
    SPI_RW_Reg(WRITE_REG + CONFIG, 0x0E); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. Interrupts enabled.. Module is in TX mode
    SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
    SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x03); // Enable 5 Byte Payload
    SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
    SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x01); // 250us + 86us, 1 retransmit...
    SPI_RW_Reg(WRITE_REG + RF_CH, 40); // F0= 2400 + RF_CH [MHz], F0 = 2440 [MHz]
    SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0F); // TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURR

    // SPI_RW_Reg(WRITE_REG + STATUS, 0x70); /* Clear RX_DR, TX_DS, MAX_RT Interrupt Sourse */
    SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // Writes TX_Address to nRF24L01
    SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
    SPI_Write_Buf(WR_TX_PLOAD, Buffer, TX_PLOAD_WIDTH); // Writes data to TX payload

    CEH;
    delay_main();

    }


    /**************************************************
    Function: RX_Mode();

    Description:
    This function initializes one nRF24L01 device to
    RX Mode, set RX address, writes RX payload width,
    select RF channel, datarate & LNA HCURR.
    After init, CE is toggled high, which means that
    this device is now ready to receive a datapacket. */
    /**************************************************/

    void RX_MODE(void)
    {

    CEL;
    SPI_RW_Reg(WRITE_REG + CONFIG, 0x0F); // Set PWR_UP bit, Module is in Standby-I mode
    SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
    SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
    SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x03);
    SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device
    SPI_RW_Reg(WRITE_REG + RF_CH, 40); // F0= 2400 + RF_CH [MHz], F0 = 2440 [MHz]
    SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // Select same RX payload width as TX Payload width (One Byte)
    SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0F); // TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURR
    // SPI_RW_Reg(WRITE_REG + CONFIG, 0x7F); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. Interrupt disabled.., Module is in RX mode
    CEH;

    delay_main();
    // This device is now ready to receive one packet of 1 byte payload from a TX device sending to address
    // '7878787878', with auto acknowledgment, retransmit count of 10, RF channel 40 and datarate = 1Mbps.

    }



    void SPI0_int(void) __irq {

    S0SPINT |= 1;
    //SPI_RW_Reg(WRITE_REG + STATUS, 0x70); /* Clear RX_DR, TX_DS, MAX_RT Interrupt Sourse */
    VICVectAddr = 0; /* Acknowledge Interrupt */
    delayms(5);
    }


    void EINT0_int(void) __irq {
    unsigned char i;
    IO0CLR = 1<<21; // Beep if data received
    delayms(50);
    IO0SET = 1<<21; // Buzzer OFF

    lcd_clear();
    lcd_print("DATA RECEIVED:");

    SPI_RW_Reg(WRITE_REG + STATUS, 0x70); /* Clear RX_DR, TX_DS, MAX_RT Interrupt Sourse */
    EXTINT = 1; /* Clear EINT0 interrupt flag */
    VICVectAddr = 0; /* Acknowledge Interrupt */
    delayms(5);
    }

    /*-----------------------------------------------------------------------------
    Module: init_CPU
    Function: Initialization of CPU
    ------------------------------------------------------------------------------*/
    void init_CPU (void){

    IO0DIR = 1<<30 | 1<<31 | 1<<21; // (P0.30:CE, P0.31:CSN) as output + Buzzer
    IO0SET = 1<<21;
    CEL; // Disable the module at first, CE=OFF
    CSNH; // CSN = 1 (CSN is a active low signal)
    }


    // SPI Initialazing
    void spi_init(){

    PINSEL0 = 1<<8 | 1<<10 | 1<<12; // Enable MOSI, MISO, SCK For SPI
    S0SPCCR = 15; // PCLK = 15MHz, SPCCR0 = 15 => SCK = 1MHz

    // 11:8-BITS 7-SPIE 6-LSBF 5-MSTR 4-CPOL 3-CPHA 2-BitEnable
    S0SPCR = 0xA0; // 0000 1 0 1 0 0 0(8-bit transfer)
    }

    void int_en (){

    EXTMODE=0x00; /* EINT0 is level sensitive. */
    EXTPOLAR=0x00; /* EINT0 is low-active sensitive */
    PINSEL0 |= 1<<2 | 1<<3; /* EINT0(P0.1) Selected */
    VICVectAddr0 = (unsigned int) EINT0_int; /* set interrupt vector 0 */
    VICVectCntl0 = ( 0x20 | 14 ); /* enable slot & use it for EINT0 Interrupt */
    VICIntEnable |= (unsigned int) 1<<14; /* Enable EINT0 Interrupt */
    }

    void spi_int (){

    VICVectAddr0 = (unsigned int) SPI0_int; /* set interrupt vector 0 */
    VICVectCntl0 = ( 0x20 | 10 ); /* enable slot & use it for SPI0 Interrupt */
    VICIntEnable |= (unsigned int) 1<<10; /* Enable SPI0 Interrupt */
    }

    unsigned char SPI_RW(unsigned char byte)
    {

    S0SPDR = byte;
    while((S0SPSR & 0x80) == 0); // Wait for completion of Transmit
    delay_main();
    return(S0SPDR); // return data received from Slave
    }
    /**************************************************
    Function: SPI_RW_Reg();

    Description:
    Writes value 'value' to register 'reg' */
    /**************************************************/
    unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value)
    {
    unsigned char status;
    CSNL;
    delay_main();
    SPI_RW(reg); // select register
    delay_main();
    SPI_RW(value); // ..and write value to it..
    delay_main();
    CSNH;
    return(status); // return nRF24L01 status byte
    }

    unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
    {
    unsigned char status,byte_ctr;
    // *data_r = *pBuf;
    CSNL;
    delay_main();
    status = SPI_RW(reg); // Select register to write to and read status byte
    for(byte_ctr=0;byte_ctr<bytes;byte_ctr++){
    pBuf[byte_ctr] = SPI_RW(0); // Perform SPI_RW to read byte from nRF24L01
    data_r[byte_ctr] = pBuf[byte_ctr];
    }
    delay_main();
    CSNH;
    return(status); // return nRF24L01 status byte
    }

    unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
    {
    unsigned char status,byte_ctr;
    CSNL;
    delay_main();
    status = SPI_RW(reg); // Select register to write to and read status byte
    for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // then write all byte in buffer(*pBuf)
    status = SPI_RW(*pBuf++);
    delay_main();
    CSNH;
    return(status); // return nRF24L01 status byte

    }




    /**************************************************
    Function: SPI_Read();

    Description:
    Read one byte from nRF24L01 register, 'reg' */
    /**************************************************/
    unsigned char SPI_Read(unsigned char reg)
    {
    unsigned char reg_val;
    CSNL;
    delay_main();
    SPI_RW(READ_REG + reg); // Select register to read from..
    reg_val = SPI_RW(0);
    //lcd_putchar(0x21);
    CSNH;
    delay_main();
    return(reg_val); // return register value
    }

    void delay_main(void){
    __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    __asm("NOP");
    }

    void delayms(unsigned int dly){
    unsigned int del;
    del = dly*15000;
    for(; del>0; del--);
    }




    [/PHP]ممنون میشم اگه کسی به من بگه جریان چیه؟؟؟
    یعنی دیتا چطوری توی آرایه قرار میگیره؟ درحالی که در هیچ کجای برنامه داده رو توی data_r قرار ندادن. اما وقتی data_r را برای نمایش روی ال سی دی ارسال میکنه داده را درست نمایش میده.
    خلاصه بگم در کدام خط از برنامه داده دریافتی از ماژول توی آرایه
    data_r قرار میگیره؟؟؟؟
    با سلام
    متغیر data_r در تابع SPI_Read_Buf مقدار می‌گیره. خط 274 از برنامه‌ای که گذاشتید.

  26. #19
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2007
    نوشته ها
    26
    تشکر
    34
    تشکر شده 6 بار در 5 پست

    پیش فرض

    سلام
    کسی از دوستان این ماژول رو تونسته راه بندازه!
    بردش چه قدر بوده؟؟
    تو پست های بالاتر گفتن راه افتاده اما تو برد اختلاف دارن!
    من برای یه کار نیمه صنعتی تو محیط پرگردو خاک می خوام راه بندازم البته باید حداقل 200 متر جواب بده
    به نظر دوستان میشه روی این ماژول حساب باز کرد و یا دنبال فرستنده/گیرنده بهتری باشم.

  27. #20
    کاربر علاقه مند
    تاریخ عضویت
    Jan 2013
    نوشته ها
    92
    تشکر
    59
    تشکر شده 67 بار در 41 پست

    پیش فرض

    دوستانی که این چیپ ست را راه اندازی کردن خواهشن جواب بدن .
    برد این ماژول چقدره؟ و ایا تو محیط صنعتی جواب میده یا نه؟
    من میخوام یه دیتا را تا فاصله 80 متری ارسال کنم البته 50 متر تا 80 متر حداکثر
    جواب میده ؟

صفحه 1 از 3 123 آخرینآخرین

موضوعات مشابه

  1. کمک برای راه اندازی ماژول nRF24L01 بدون هدر
    توسط payameashena در انجمن ماژول ها و دستگاه های مخابراتی
    پاسخ: 1
    آخرين نوشته: 07-04-2014, 21:30
  2. راه اندازی ماژول nrf24l01
    توسط hassan shojai در انجمن PIC
    پاسخ: 49
    آخرين نوشته: 15-03-2014, 23:09
  3. nRF24L01 و RFM70 راه اندازی شد
    توسط beroz در انجمن AT91 series (ATMEL)
    پاسخ: 41
    آخرين نوشته: 30-11-2013, 14:47
  4. راه اندازی nrf24l01+pa+lna
    توسط Reza30ir در انجمن سایر موارد مرتبط با میکرو کنترلرها
    پاسخ: 5
    آخرين نوشته: 16-10-2013, 18:53
  5. راه اندازی lcd گرافیکی با lpc1768
    توسط archer1367 در انجمن LPC series (NXP)
    پاسخ: 2
    آخرين نوشته: 27-11-2012, 01:12

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •