PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : راه اندازی nrf24l01 با lpc1768



hopo
04-08-2012, 17:38
با عرض سلام و خسته نباشید.....

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

ممنون......

alibme87
13-08-2012, 18:28
با عرض سلام و خسته نباشید.....

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

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

alibme87
20-08-2012, 18:00
خدارو شکر با راهنمایی دوستان (استاد!) تونستتم ماژول رو راه بندازم... اینم فایل های Receiver و Transmitter برای میکروکنترلر LPC2148

Aghaeifar
20-08-2012, 18:25
خدارو شکر با راهنمایی دوستان (استاد!) تونستتم ماژول رو راه بندازم... اینم فایل های receiver و transmitter برای میکروکنترلر lpc2148

سلام
خدا قوت
اگه ممکن بود قسمت رپورت این بخشش برام بفرستی در اختیار بچه ها بذارم البته با کپی رایت :018:

agape
20-08-2012, 20:06
خدارو شکر با راهنمایی دوستان (استاد!) تونستتم ماژول رو راه بندازم... اینم فایل های receiver و transmitter برای میکروکنترلر lpc2148
دست شما درد نکنه که دوست گرامی که روح بزرگی داری و نتیجه کارت رو در اختیار بچه ها قرار دادی !

mj3747
20-08-2012, 21:03
دوستان برد (مسافت) این ماژول چقدره؟

hopo
21-08-2012, 00:24
دو نوع ماژول هست... معمولی هاش 40 متره....
یه دونه هم نوع تقویت شدش هست که 70 متر میره

mj3747
21-08-2012, 00:38
هم ردیف همین ماژول توی فرکانس کاری 2.4g ماژول دیگه ای میشناسید که بشه برا ساخت ریموت کنترل ربات یا ساخت واکی تاکی ازش استفاده کرد؟

alibme87
21-08-2012, 01:17
دوستان برد (مسافت) این ماژول چقدره؟
این بردی که من (از جوان الکترونیک) خریدم، آنتن زیگراگ سرخود داره. با همین آنتن تا 130 الی 140 متر رو راحت جواب داد... تازه فکر میکنم بیشتر هم باشه...

mj3747
21-08-2012, 01:26
این بردی که من (از جوان الکترونیک) خریدم، آنتن زیگراگ سرخود داره. با همین آنتن تا 130 الی 140 متر رو راحت جواب داد... تازه فکر میکنم بیشتر هم باشه...
چه قیمت؟
میشه یه عکس ازش بذازی؟
ممنون.

alibme87
21-08-2012, 01:55
چه قیمت؟
میشه یه عکس ازش بذازی؟
ممنون.
قیمتش 10 تومنه. من دو تاشو خریدم 19 تومن.

kavir
21-08-2012, 03:56
سلام
توی فروشگاه کویرالکترونیک هم سرچ بزنید

aod
31-10-2012, 12:58
با سلام
من هم از nrf24l01 استفاده می کنم و آن مدلی که آنتن زیگزاگ (میکرو استریپ) روی بردش دارد
من تا 15 متر بیشتر نتونستم جواب بگیرم . به تنظیمات پیش فرض هم دست نزدم.کسی می دونه مشکل چیه ؟

sarbandi70
31-10-2012, 15:42
سلام
من با nRF24l01plus کار کردم و بردش تا 130 اینا بدون انتن تقویت کننده بود
ولی خیلی حساس به محیط هستش
به طوری که زمانی که جلوی فرستنده یا گیرنده می ایستادم،بعضی از اطلاعاتم از بین میرفت...

kasra711
24-12-2012, 20:18
طراحی pcbاین مازول واقعا عالی بود ولی باید برای انتنش هم فکر بهتری کرد

shahrivar88
20-05-2013, 18:07
// 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 = SPI_RW(0); // Perform SPI_RW to read byte from nRF24L01
data_r = pBuf;
}
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--);
}




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

shahrivar88
20-05-2013, 18:12
// 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 قرار میگیره؟؟؟؟
__________________

alibme87
22-05-2013, 14:11
// 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 = SPI_RW(0); // Perform SPI_RW to read byte from nRF24L01
data_r = pBuf;
}
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--);
}




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

با سلام
متغیر data_r در تابع SPI_Read_Buf مقدار می‌گیره. خط 274 از برنامه‌ای که گذاشتید.

dostajn
28-05-2013, 14:37
سلام
کسی از دوستان این ماژول رو تونسته راه بندازه!
بردش چه قدر بوده؟؟
تو پست های بالاتر گفتن راه افتاده اما تو برد اختلاف دارن!
من برای یه کار نیمه صنعتی تو محیط پرگردو خاک می خوام راه بندازم البته باید حداقل 200 متر جواب بده
به نظر دوستان میشه روی این ماژول حساب باز کرد و یا دنبال فرستنده/گیرنده بهتری باشم.

CINAPA
31-05-2013, 10:24
دوستانی که این چیپ ست را راه اندازی کردن خواهشن جواب بدن .
برد این ماژول چقدره؟ و ایا تو محیط صنعتی جواب میده یا نه؟
من میخوام یه دیتا را تا فاصله 80 متری ارسال کنم البته 50 متر تا 80 متر حداکثر
جواب میده ؟

alibme87
01-06-2013, 12:56
دوستانی که این چیپ ست را راه اندازی کردن خواهشن جواب بدن .
برد این ماژول چقدره؟ و ایا تو محیط صنعتی جواب میده یا نه؟
من میخوام یه دیتا را تا فاصله 80 متری ارسال کنم البته 50 متر تا 80 متر حداکثر
جواب میده ؟
همان‌طور که در پست‌های قبلی هم اشاره شد، برد ماژول تا 100، 110 متر خیلی خوب هست. مسلماً نیاز شما رد جواب میده. البته بهتره محیط تا حد امکان غیر نویزی باشه.

CINAPA
01-06-2013, 14:04
همان‌طور که در پست‌های قبلی هم اشاره شد، برد ماژول تا 100، 110 متر خیلی خوب هست. مسلماً نیاز شما رد جواب میده. البته بهتره محیط تا حد امکان غیر نویزی باشه.

درسته ولی بعضی از دوستان تا 30 متر هم مشکل ارسال داشتن . محیطی که گفتم دستگاه های جوش کاری بکار میره ایا تو این محیط جواب میده ؟
ایا شما خودتون این ماژول را راه اندازی کردیت . ؟

dostajn
01-06-2013, 20:06
همان‌طور که در پست‌های قبلی هم اشاره شد، برد ماژول تا 100، 110 متر خیلی خوب هست. مسلماً نیاز شما رد جواب میده. البته بهتره محیط تا حد امکان غیر نویزی باشه.
سلام
بالاخره کسی جواب داد
برد ماژول معمولی منظورتون هست، پس برای فاصله 200 متر من باید نوع تقویت شده رو انتخاب کنم؟
در ضمن اگه ارسال یک طرفه باشه میشه فرستنده پرقدرت باشه و گیرنده همین معمولی؟

alibme87
02-06-2013, 10:22
درسته ولی بعضی از دوستان تا 30 متر هم مشکل ارسال داشتن . محیطی که گفتم دستگاه های جوش کاری بکار میره ایا تو این محیط جواب میده ؟
ایا شما خودتون این ماژول را راه اندازی کردیت . ؟
بله، این 110 متری که گفتم، خودم راه‌اندازی و اندازه‌گیری کردم. من تو محیط معمولی و بدون مانع تست کردم و در مورد محیط‌های دیگه نمی‌دونم چجوری کار میکنه.

CINAPA
02-06-2013, 15:48
بله، این 110 متری که گفتم، خودم راه‌اندازی و اندازه‌گیری کردم. من تو محیط معمولی و بدون مانع تست کردم و در مورد محیط‌های دیگه نمی‌دونم چجوری کار میکنه.

قربونت اگه راش انداختی و جواب داده یه کمکی هم به ما ضعفا بکن جای دوری نمیره ما هم راه بیفتیم . سورسی . مداری . شماتیکی . چیزی بزار
ممنونت میشیم lov:lov:lov:

alibme87
03-06-2013, 10:57
قربونت اگه راش انداختی و جواب داده یه کمکی هم به ما ضعفا بکن جای دوری نمیره ما هم راه بیفتیم . سورسی . مداری . شماتیکی . چیزی بزار
ممنونت میشیم lov:lov:lov:
سورس کد برای فرستنده و گیرنده، در صفحه‌ی اول همین پست موجود هست. استفاده کنید :)

shahrivar88
10-08-2013, 15:37
با سلام
متغیر data_r در تابع SPI_Read_Buf مقدار می‌گیره. خط 274 از برنامه‌ای که گذاشتید.



به هر حال ممنون تعجب کردم پس چرا من متوجه نشدم!!
البته تو فابل هایی که برا avr نوشتم این خط حرف شده ولی بازم کار مبکنه. فرصت کنم برد رو ببندم بررسی میکنم.
از شما هم ممنون.

alim1369
04-09-2013, 14:34
درود
آیا امکانش هست که بیشتر از 40 تا ماژول به صورت غیر همزمان از طریق این ماژول ارتباط برقرار کنند؟

یعنی در هر لحظه فقط یکی یا دوتا از ماژول ها ارسال کنند و بقیه دریافت کنند؟

adibsp
04-09-2013, 15:14
سلام.
اگر درست تو خاطرم مونده باشه این ماژول می تونه همزمان با شش ماژول دیگه ارتباط داشته باشه.

alim1369
04-09-2013, 15:35
درسته به صورت همزمان!
ولی اگر همزمان نباشه! آیا امکانی داره که بتونه این قضیه رو هندل کنه؟

javidjava
06-10-2013, 00:53
دوستان عزیز سلام
سوالی از حضورتون داشتم
میخوام بپرسم آیا میشه ماژول وایرلس nrf24l01 که بردش نزدیک 1000 متر هستش رو با مودم وای فای مچ کردو برد وای فای رو نزدیک یک کیلومتر کرد؟

zakariya moradi
06-10-2013, 01:14
سلام
شما در نهایت قراره چه کاری انجام بدید ؟
اگر نیاز دارید که برد وای فای زیاد بشه ، مودم هایی وجود داره که بردهای بالایی داره .
در مدل نقطه به نقطه من مسافت 35 کیلومتر رو لینک زدم .

هر سوالی در مورد مسایل شبکه و تجهیزات داشتید بپرسید .

javidjava
07-10-2013, 13:46
35 ک ی ل و متررر؟!!!
ایول، این فاصله میتونه یک رکورد جهانی باشه!!
من مودم وودافون با برد 300 متر خریدم که خیلی کمه ،اگر بتونم این ماژول رو روی این مودم سوار کنم دیگه نیازی نیست مودمی با برد یک کیلومتر بخرم.
اگرم بخوام بخرم مگه هستش؟!
مودم آلفا شنیده بودم بردش زیاده اما لا موجوده!
اما جواب سوالتون،در نهایت میخوام وصل بشم به مودم wi-fi معمولی رفیقم که تو یک شهرک دیگست و تقریبا یک کیلومتری با من فاصله داره.
با این برد میخوام از اینترنت رایگانی که در سطح شهر هم هست استفاده کنم : )

mansoory
07-10-2013, 15:02
سلام
شما در نهایت قراره چه کاری انجام بدید ؟
اگر نیاز دارید که برد وای فای زیاد بشه ، مودم هایی وجود داره که بردهای بالایی داره .
در مدل نقطه به نقطه من مسافت 35 کیلومتر رو لینک زدم .

هر سوالی در مورد مسایل شبکه و تجهیزات داشتید بپرسید .

سلام.
برای من سوال شده که آیا امکانش هست که دو جفت ماژول فرستنده و گیرنده هم فرکانس، دریک محیط داشته باشیم و بتونند بدون مشکل کار کنند؟ منظورم اینه که آیا امواجشون باهم تداخل نمیکنه؟ مثلا تبادل اطلاعات یک زوج فرستنده و گیرنده باعث بشه که زوج دوم نتونند کار کنند؟

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

rezasede
27-10-2013, 22:42
سلام
کسی با lpc1768 اینو راه انداخته؟
ممنون میشم کسی بهم کمک کنه!

omid_544
09-11-2013, 09:28
سلام این ماژول امکان ارتباط دوطرفه رو داره؟(مثلا از اولی به دومی دیتا بفرستیم و برعکس در یک زمان)

mansoory
09-11-2013, 10:08
سلام این ماژول امکان ارتباط دوطرفه رو داره؟(مثلا از اولی به دومی دیتا بفرستیم و برعکس در یک زمان)

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

omid_544
09-11-2013, 14:57
بسیار سپاس گذارم باید این ماژولا رو بخرم روشون کار کنم ببینم میتونم این کار رو انجام بدم یا نه.

mansoory
09-11-2013, 16:51
بسیار سپاس گذارم باید این ماژولا رو بخرم روشون کار کنم ببینم میتونم این کار رو انجام بدم یا نه.

نتیجه رو به ما هم اطلاع بدین
متشکرم

KHM
09-11-2013, 16:58
همزمان که دو طرفه نمیشه...و باید با برنامه کنترل بشه که عوض بشه...ولی دردسر های زیادی داره....
مثلآ آدرس ارسال و دریافت باید فرق کنه...من یکم رو همزمانی کار کردم و مشکلاتشو دیدم...ولی چون وقت تحویل پروژه کم بود،ترجیح دادم 2تا میکرو با 2تا nrf بذارم که یکی گیرنده شه و یکی فرستنده و بینشون با سریال ارتباط برقرار کردم...

mansoory
01-02-2014, 15:55
سلام
من با nRF24l01plus کار کردم و بردش تا 130 اینا بدون انتن تقویت کننده بود
ولی خیلی حساس به محیط هستش
به طوری که زمانی که جلوی فرستنده یا گیرنده می ایستادم،بعضی از اطلاعاتم از بین میرفت...
من هم همین مساله رو دارم. من گیرنده رو عوض کردم و از ماژول آنتن دار استفاده کردم. الان دیگه مشکلی نیست.

amani
12-03-2014, 11:06
سلام
تو دیتاشیت نوشته که اطلاعات ارسالی باید به صورت packet شده باشه، یعنی در هر بار ارسال حداکثر میشه 32 بایت رو ارسال کرد( صفحه 27 دیتاشیت). آیا من درست متوجه شدم؟ اگر بله راه حل این مشکل چیست؟
این نکته شاید کمک کنه که من در هر بار ارسال نمیدونم حجم اطلاعات چند بایت است. ممکنه 20 بایت باشه، ممکن هم هست که حدود 400 بایت باشه برای همین تکه کردن اطلاعات و ارسال چند بار خیلی مشکله.

mansoory
13-03-2014, 09:32
سلام
تو دیتاشیت نوشته که اطلاعات ارسالی باید به صورت packet شده باشه، یعنی در هر بار ارسال حداکثر میشه 32 بایت رو ارسال کرد( صفحه 27 دیتاشیت). آیا من درست متوجه شدم؟ اگر بله راه حل این مشکل چیست؟
این نکته شاید کمک کنه که من در هر بار ارسال نمیدونم حجم اطلاعات چند بایت است. ممکنه 20 بایت باشه، ممکن هم هست که حدود 400 بایت باشه برای همین تکه کردن اطلاعات و ارسال چند بار خیلی مشکله.
راهی نداره. باید داده رو به قسمتهای 32 بایتی تقسیم کنید. البته میتونید از packet با طول متغیر استفاده کنید ولی اون هم حداکثرش 32 بایته

amani
13-03-2014, 11:34
راهی نداره. باید داده رو به قسمتهای 32 بایتی تقسیم کنید. البته میتونید از packet با طول متغیر استفاده کنید ولی اون هم حداکثرش 32 بایته
ممنون از پاسختون جناب منصوری، آیا ماژول دیگری رو میتونید معرفی کنید که هم در دسترس باشه و هم این مشکل رو نداشته باشه؟

mansoory
15-03-2014, 09:38
ممنون از پاسختون جناب منصوری، آیا ماژول دیگری رو میتونید معرفی کنید که هم در دسترس باشه و هم این مشکل رو نداشته باشه؟
من فقط با این ماژول کار کردم
یه مشکل دیگه هم درباره این ماژول هست. درصورتیکه تغذیه نویز داشته باشه برد دستگاه به 2 یا 3متر کاهش پیدا میکنه

hamedfhamedf
07-04-2014, 22:41
سلام دوستان
من یه ماژولی دارم اگه دوستان تهران بودن خوشحال میشم بهشون بدم یه تستی بکنن و نظرشون را بدونم. عکس هم اینجاست
You can see links before reply
7525

mansoory
08-04-2014, 09:35
سلام دوستان
من یه ماژولی دارم اگه دوستان تهران بودن خوشحال میشم بهشون بدم یه تستی بکنن و نظرشون را بدونم. عکس هم اینجاست
You can see links before reply

7525
ظاهرا که یکی است. از کجا اینو تهیه کردین و قیمتش چند بوده؟

hamedfhamedf
08-04-2014, 13:49
این ماژول را طراحی و ساخته شده توی ایران هست. بنده طراحی کردم و همینجا pcb را زدم. تست طیف سنجی و عملیاتی هم ازش گرفتم و عملکردش را تونستم طبق تقویت کننده به حداکثر ممکن که بالای 20dbm هست برسونم.
امیدوارم دوستان کمک کنن و بتونیم تست میدانی بیشتر ازش بگیریم و بتونیم تولید کنیم. قیمت فروش تک برای مشتری را 30هزار تومان برآورد کردیم. اگه دوستان تمایل داشتن خیلی خوشحال میشم در اختیارشون بزارم و نظرشون را بدونم. سعی داریم تا دو هفته آینده تعداد قابل قبولی بزنیم و توی مجموعه ها پخش کنیم. البته من خودم 10تا از اون را در یک پروژه شبکه توی یک کارخونه دارم استفاده میکنم.
اگه تهران باشین که راحت میتونم در اختیارتون بزارم وگرنه باید پست کنم.

mansoory
09-04-2014, 10:12
این ماژول را طراحی و ساخته شده توی ایران هست. بنده طراحی کردم و همینجا pcb را زدم. تست طیف سنجی و عملیاتی هم ازش گرفتم و عملکردش را تونستم طبق تقویت کننده به حداکثر ممکن که بالای 20dbm هست برسونم.
امیدوارم دوستان کمک کنن و بتونیم تست میدانی بیشتر ازش بگیریم و بتونیم تولید کنیم. قیمت فروش تک برای مشتری را 30هزار تومان برآورد کردیم. اگه دوستان تمایل داشتن خیلی خوشحال میشم در اختیارشون بزارم و نظرشون را بدونم. سعی داریم تا دو هفته آینده تعداد قابل قبولی بزنیم و توی مجموعه ها پخش کنیم. البته من خودم 10تا از اون را در یک پروژه شبکه توی یک کارخونه دارم استفاده میکنم.
اگه تهران باشین که راحت میتونم در اختیارتون بزارم وگرنه باید پست کنم.
اگه ممکنه مصرف جریانش رو در حالت گیرنده و فرستنده مجزا اندازه گیری کنید و اطلاع بدین. مساله مهمیه مخصوصا وقتی بعوان ریموت استفاده بشه.
درحالت ارسال و بیکاری و خواب جداگانه اندازه گیری کنید
مرسی

hamedfhamedf
09-04-2014, 16:16
اگه ممکنه مصرف جریانش رو در حالت گیرنده و فرستنده مجزا اندازه گیری کنید و اطلاع بدین. مساله مهمیه مخصوصا وقتی بعوان ریموت استفاده بشه.
درحالت ارسال و بیکاری و خواب جداگانه اندازه گیری کنید
مرسی
چشم حتما، الان ماژولهایی که شما دارین مصرفشان توی عملکردی دارین که بتونم مقایسه کنم؟ یا کدی داری که حتی یکسان باشه نحوه تست

hamedfhamedf
09-04-2014, 16:53
اگه ممکنه مصرف جریانش رو در حالت گیرنده و فرستنده مجزا اندازه گیری کنید و اطلاع بدین. مساله مهمیه مخصوصا وقتی بعوان ریموت استفاده بشه.
درحالت ارسال و بیکاری و خواب جداگانه اندازه گیری کنید
مرسی
این فایل پی دی اف را میشه ببینید، جدول 8 را ببینید، نظرتون چیه؟
You can see links before reply %20RFX2401_App_Note.pdf

hamedfhamedf
10-04-2014, 22:26
دوستان کسی هست ماژول در سایت را تست طیف سنجی کرده باشه و جریان مصرفیش را اندازه گیری کرده باشه؟

mansoory
15-04-2014, 10:03
دوستان کسی هست ماژول در سایت را تست طیف سنجی کرده باشه و جریان مصرفیش را اندازه گیری کرده باشه؟
متاسفانه الان دسترسی به سورس برنامه ام ندارم. در اولین فرصت براتون میفرستمش

hossein1387
18-04-2014, 12:12
سلام به همه دوستان
خیلی وقت هست که از این ماژول دارم استفاده میکنم. الان دارم روی یک پروژه کار میکنم که تعداد چند تا از این ماژول ها باید دیتا رو به یک BaseStation بفرستن. برای تفکیک هر Node، من از یک کانال دارم استفاده میکنم. شماره هرکانال مختص یک نود هست و BaseStation با انتخاب کانال، نود مورد نظر رو عوض میکنه. اوایل کار من نرخ ارسال رو روی 2Mbps گذاشته بودم. یک مشکل عجیی که برخوردم این بود که توی بعضی ازکانال هایی که حتی توشون هیچ فرستنده ای نبود دیتا دریافت میکردم You can see links before reply !!!!!! متوجه شدم که سرعت تعویض کانال خیلی تاثر داره و با کم کردن اون وضع بهتر شد ولی باز هم مشکل پابرجا بود. مثلا اوایل هر 3-4 بار یک بار این اتفاق میافتاد ولی بعدش هر 10-15 بار. بعد متوجه شدم که نرخ ارسال زیاد هست و با کم کردن اون) تونستم این خطا رو خیلی کم کنم. ولی مشکل این هست که هنوز این اتفاق میفته! مثلا از هر 40-50 تا ارسال یک بار روی کانالی که هیچ فرستنده ایی قرار نداره دیتا دریافت میکنم! کسی تاحالا به همچین مشکلی برخورده؟؟؟ الان من بین تعویض هر کانال 500 میلی ثانیه تاخیر گذاشتم. توجه کنید اگر مثلا این تاخیر رو به 5 ثانیه برسونم تقریبا مشکل حل میشه ولی از اونجا که ممکنه 100 تا فرستنده داشته باشم برای دریافت دیتا کل شبکه چیزی حدود 500 ثانیه طول میکشه! که اصلا درست نیست! همین 500 میلی ثانیه هم زیاده! اگر کسی تجربه ای داره دریغ نکنه. برای اینکه مشکل رو بهتر درک کنید من یک لاگ از خروجی BaseStation گرفتم:




================================================== ====
ThreadInit:
================================================== ====
Device Configuration............................passed
nRF24L01+ Configuration ...................in Progress
nRF24L01+ Configuration.........................passed
Initial RF Channel..............................2402Mhz
Number of Nodes in Network......................5
Node[1] RF Channel..............................2410Mhz
Node[2] RF Channel..............................2420Mhz
Node[3] RF Channel..............................2430Mhz
Node[4] RF Channel..............................2440Mhz
Node[5] RF Channel..............................2450Mhz


Starting ThreadSleep...
Starting ReCThread ...
Starting BLThread...
Waiting to receive data from Node[1] on Channel[10]
Data from Node[1] did not received.
Waiting to receive data from Node[2] on Channel[20]
Data from Node[2] did not received.
Waiting to receive data from Node[3] on Channel[30]
Data from Node[3] did not received.
Waiting to receive data from Node[4] on Channel[40]
RF_CH[40]-Data Received from Node[4]: 30509
Waiting to receive data from Node[5] on Channel[50]
RF_CH[50]-Data Received from Node[5]: 11565
ReCThread Finished...


الان از 5 تا نود فقط یک دونه رو روشن گذاشتم. که توی فرکانس 2440Mhz داره کار میکنه. همونظور که میبینید، نود شماره 5 هم دیتا دریافت کرده!!!!!!!!!!!!!!!!!!!!! با اینکه اصلا همچین نودی ندارم. به دلایلی تا حد امکان نمیخوام از Acknowledge استفاده کنم.
واقعا برام عجیب هست. با اینکه فاصله هر کانال 10MHZ هست باز هم مشکل پیش میاد. فاصله کانال ها رو هم بیشتر کردم باز هم همین مشکل هست. برای اظمینان، بین هر تعویض کانال من بافر RX رو هم خالی میکنم. بدون خالی کردن هم امتحان کردم. همشون همون مشکلی که گفتم رو دارن.

در ضمن من دارم از بردهایی استفاده میکنم که خودم برای NRF زدم. کدم رو با ماژول های آماده هم امتحان کردم ولی مشکل پابرجاست. این تصویری از نود هام هست:


7575



این نودها با یک باتری سکه ای 3.3V کار میکنن. جالبیش این هست که بردی که خودم زدم مصرف توانش کمتر از برد های آمادست. مثلا وقتی که باتریها آخر عمرشون هستن، با برد من دیتا هنوز ارسال میشه ولی اگر از ماژول آماده استفاده کنم، دیگه چیزی ارسال نمیشه! نمیدونم شاید مشکل چیز دیگه ای هست، باید مصرفش رو اندازه بگیرم

hamedfhamedf
18-04-2014, 19:01
سلام به همه دوستان

در ضمن من دارم از بردهایی استفاده میکنم که خودم برای NRF زدم. کدم رو با ماژول های آماده هم امتحان کردم ولی مشکل پابرجاست. این تصویری از نود هام هست:


7575



این نودها با یک باتری سکه ای 3.3V کار میکنن. جالبیش این هست که بردی که خودم زدم مصرف توانش کمتر از برد های آمادست. مثلا وقتی که باتریها آخر عمرشون هستن، با برد من دیتا هنوز ارسال میشه ولی اگر از ماژول آماده استفاده کنم، دیگه چیزی ارسال نمیشه! نمیدونم شاید مشکل چیز دیگه ای هست، باید مصرفش رو اندازه بگیرم

ببین مصرف توان طبق دیتاشیت یه استاندارد داره، اگه کمتر از اون باشه شبکه matching مشکل داره، حتما طیف فرکانسی را با اسپکتروم آنالایزر چک کن و اونجوری در مورد مصرف توان تصمیم بگیر. اگه مصرف توان هم بیشتر از حد مجاز باشه وارد اشباع P1db ممکنه شده باشین. دو تا سوال؟
1) شما قبلا PCB مخابراتی زدین؟
2) کریستال SMD را از کجا تهیه کردین با چه قیمتی؟ (بنده لازم دارم)

hossein1387
19-04-2014, 01:37
ببین مصرف توان طبق دیتاشیت یه استاندارد داره، اگه کمتر از اون باشه شبکه matching مشکل داره، حتما طیف فرکانسی را با اسپکتروم آنالایزر چک کن و اونجوری در مورد مصرف توان تصمیم بگیر. اگه مصرف توان هم بیشتر از حد مجاز باشه وارد اشباع P1db ممکنه شده باشین. دو تا سوال؟
1) شما قبلا PCB مخابراتی زدین؟
2) کریستال SMD را از کجا تهیه کردین با چه قیمتی؟ (بنده لازم دارم)

پس باید برم یک تستی بزنم!
1- نه این اولین باری بود که به قول شما PCB مخابراتی میزنم. قبلا یک دو تا برد برای SIM908 زده بودم
2- من چند وقتی هست که ایران نیستم. ولی همین الان هم یک سزی قطعه از جوان دارم که توشون اسیلاتور SMD هست (نه کریستال) بنابراین فکر میکنم بشه کریستال هم گیر آورد.

مشکلی که من دارم با این بردها اینس هست که اگر توی مود گیرنده ازشون استفاده کنم خیلی بد عمل میکنن. تا جایی که یادم هست، طرف گیرنده باید SNR بهتری داشته باشه.
1-چه جوری میتونم بفهمم که امپدانس واقعی Track آنتن چقدر هست؟
2- آیا سایز قطعات استفاده شده قطعات مهم هست؟ توی دیتا شیت گفته 403 استفاده کنید ولی تمام این ماژول هایی که من دیدم 603 استفاده کردن.

hamedfhamedf
19-04-2014, 10:20
پس باید برم یک تستی بزنم!
1- نه این اولین باری بود که به قول شما PCB مخابراتی میزنم. قبلا یک دو تا برد برای SIM908 زده بودم
2- من چند وقتی هست که ایران نیستم. ولی همین الان هم یک سزی قطعه از جوان دارم که توشون اسیلاتور SMD هست (نه کریستال) بنابراین فکر میکنم بشه کریستال هم گیر آورد.

مشکلی که من دارم با این بردها اینس هست که اگر توی مود گیرنده ازشون استفاده کنم خیلی بد عمل میکنن. تا جایی که یادم هست، طرف گیرنده باید SNR بهتری داشته باشه.
1-چه جوری میتونم بفهمم که امپدانس واقعی Track آنتن چقدر هست؟
2- آیا سایز قطعات استفاده شده قطعات مهم هست؟ توی دیتا شیت گفته 403 استفاده کنید ولی تمام این ماژول هایی که من دیدم 603 استفاده کردن.

توی فرکانس 2.4ghz ملاحظات را باید در نظر بگیرید. این که بد عمل میکنه ممکنه مشکل طراحی PCB وانتخاب المانها باشه. 0603 هم جواب میده برای این فرکانس.
این سایت را ببین : Impedance Calculators - Mantaro Product Development Services (You can see links before reply)

چیپ آنتن را جدا کن بعد از خروجی به اسپکتروم آنالایزر وصل کن تا توان خروجی را ببینی. ماژول را روی مد continues wave تنظیم کن و sweep فرکانسی انجام بده. و جریان هم اندازه گیری کن. اینجوری تست تقریبا کامل هست البته یسری موارد دیگه هم هست مثل هارمونیک....

KHM
13-05-2014, 01:55
سلام دوستان عزيز
چند وقت پيش در مورد ماژولي که تيم ما در داخل طراحي کرده بود و ساخته بود صحبت کردم. بالاخره اون را به ECA تحويل داديم و اميدوارم به زودي اطلاعاتش قرار بگيره.
فعلا عکسش را داشته باشيد.


دوست عزیز طبق قوانین سایت لطفآ فقط در یک جا پست خودتونو بزنین و از زدن پست های تکراری خودداری کنین..

hamedfhamedf
14-05-2014, 22:23
سلام دوستان ديروز يک ماژول سايت ECA قرار داد که ميخوام يسري تست اسپکتروم آنالايزر براتون از اون و از ماژول ديگه سايت که گفته شده تایوانی هست بزارم
ماژول nRF24L01+ يک مد داره که خروجي سينوسي پيوسته توليد ميکنه (Continues Wave) و ميشه با اون طيف فرکانسي خروجي ماژول را ديد. و در شکلهاي زير فرکانس را سوييپ کرديم.

همونطور که در شکلهاي زير مشاهده ميکنيد، ماژول جديد توان خروجي بيشتر از 20dbm داره (محدوديت نمايش به خاطر آن است که اسپکتروم تا 20dbm را نشان ميداد) اما ماژول قبلي در بهترين حالت حدود 17.4dbm توان داره. اين يعني تواني بيش از 3dbm از ماژول قبلي و يعني تواني بيش از دو برابر.

ماژول جدید
You can see links before reply

ماژول قدیمی
You can see links before reply

Amirkhan_0o0
27-05-2014, 02:21
دوستان می شه دیتا شیت این ماژول رو بگذارید؟؟
ممنون

Doloop
27-05-2014, 16:10
سلام

بنده هم خوشبختانه یا متاسفانه کارم به این ماژول ها افتاده و بسته به شرایطم برام چندتا سوال بوجود اومده !!!

من نیاز دارم بین دوتا PC در دو ساختمان مجزا از هم به فاصله حدود 500 متر ارتباط برقرار کنم و خوب مشخصه که دوست دارم ارتباط بدون خطا و قطعی باشه :wink:
برخی شرایط خیلی به نفعمه برخی هم برام شاید کمی مشکل ساز باشه
1) محیط تقریبا بدون نویز هست (خارج از شهر و منطقه تقریبا سوت و کوره)
2) هر دو ساختمون در دید هم قرار دارند
3) بارندگی در منطقه کمی زیاد است

حالا نمیدونم این ماژول کار منو راه میندازه یا نه؟
شاید نیاز باشه آنتن ها از ماژول جدا بشن و جایی مثل جلوی پنجره یا پشت بام نصب بشن و از آنتن تا ماژول کابل (حدودا 5 متر) کشیده بشه (آیا این امکان پذیره ؟؟؟)
یا ماژول هارو اگه جلوی پنجره یا پشت بام نصب کنم و تا PC کابل بکشم (حدودا 5 متر) آیا این کار امکان پذیر هست ؟؟!!!
آیا آنتن قویتری برای این ماژول هست که بشه ازش استفاده کرد ؟!!!
ممنون میشم اگر کسی در این زمینه کار کرده بنده رو راهنمائی کنه :0013:

- - - Updated - - -

سلام
توی فروشگاه تو تب دانلود فکرکنم دیتاشیت هست

You can see links before reply

alibme87
28-05-2014, 10:27
سلام.
راستش من با ماژولی که آنتن میکرواستریپ داره کار کردم. تو فضای آزاد (بدون مانع)، تا 100 متر هم به راحتی جواب میده. اما قطعاً با این نوع آنتن تا 500 متر جواب نخواهید گرفت. بنابراین باید از نوع دیگۀ این ماژول که داراری آنتن مجزا هست، استفاده کنید. در مورد اینکه بارندگی و کشیدن سیم از آنتن‌ها چقدر روی این ماژول تأثیر میذاره، واقعاً هیچ اطلاعاتی ندارم.
موفق باشید.


سلام

بنده هم خوشبختانه یا متاسفانه کارم به این ماژول ها افتاده و بسته به شرایطم برام چندتا سوال بوجود اومده !!!

من نیاز دارم بین دوتا PC در دو ساختمان مجزا از هم به فاصله حدود 500 متر ارتباط برقرار کنم و خوب مشخصه که دوست دارم ارتباط بدون خطا و قطعی باشه :wink:
برخی شرایط خیلی به نفعمه برخی هم برام شاید کمی مشکل ساز باشه
1) محیط تقریبا بدون نویز هست (خارج از شهر و منطقه تقریبا سوت و کوره)
2) هر دو ساختمون در دید هم قرار دارند
3) بارندگی در منطقه کمی زیاد است

حالا نمیدونم این ماژول کار منو راه میندازه یا نه؟
شاید نیاز باشه آنتن ها از ماژول جدا بشن و جایی مثل جلوی پنجره یا پشت بام نصب بشن و از آنتن تا ماژول کابل (حدودا 5 متر) کشیده بشه (آیا این امکان پذیره ؟؟؟)
یا ماژول هارو اگه جلوی پنجره یا پشت بام نصب کنم و تا PC کابل بکشم (حدودا 5 متر) آیا این کار امکان پذیر هست ؟؟!!!
آیا آنتن قویتری برای این ماژول هست که بشه ازش استفاده کرد ؟!!!
ممنون میشم اگر کسی در این زمینه کار کرده بنده رو راهنمائی کنه :0013:

- - - Updated - - -

سلام
توی فروشگاه تو تب دانلود فکرکنم دیتاشیت هست

You can see links before reply

barid
25-07-2014, 16:38
سلام
من دیتاشیت ماژول nrf رو کامل خوندم و برای avr بدون کد هدر راه اندازیش کردم.اما وقتی با arm کار میکنم و مثلا میخوام یک رجیستر رو به طور متوالی از ماژول بخونم مشکل ایجاد میشه.مثلا برای خوندن رجیستر SETUP_RETR باید 04 رو به ماژول فرستاد و مقدار اولیه که 03 هست رو دریافت کرد.اما وقتی اینکار رو میکنم اول 1c و بعد از چند تا 0E بهم 03 میده و بعد دیگه تا آخر 0E میده.یعنی فقط یک بار کد رو درست میفرسته و بقیه اشتباه.دو سر تغذیه خازن هم گذاشتم.به نظرتون مشکل از کجاست ؟

sinavd
10-06-2015, 23:33
دوستان من می خوام برد این ماژول رو به ۱ متر محدود کنم امکانش هست؟نمی خوام داده ای رو باهاش انتقال بدم فقط اسمش تو گوشی پیدا بشه طلفا راهنمایی کنید

0121takpa
17-11-2015, 17:32
دوستان من می خوام برد این ماژول رو به ۱ متر محدود کنم امکانش هست؟نمی خوام داده ای رو باهاش انتقال بدم فقط اسمش تو گوشی پیدا بشه طلفا راهنمایی کنید
.
می تونی مسیر سیگنال به تقویت کننده رو کم کم با کاتر نازک کنی

sravakhah
22-11-2015, 15:13
دوستانی که این چیپ ست را راه اندازی کردن خواهشن جواب بدن .
برد این ماژول چقدره؟ و ایا تو محیط صنعتی جواب میده یا نه؟
من میخوام یه دیتا را تا فاصله 80 متری ارسال کنم البته 50 متر تا 80 متر حداکثر
جواب میده ؟
سلام
من میخواستم از این ماژول استفاده کنم که بعد از تحقیقات متوجه شدم به دما خیلی حساسه و تو محیطه صنعتی نمیشه ازش استفاده کرد(جون فرکانس نوسانگرش با تغییر دما عوض میشه) من ماژول DRF7020d20 راپیشنهاد میکنم.

mansoory
23-11-2015, 11:52
سلام
من میخواستم از این ماژول استفاده کنم که بعد از تحقیقات متوجه شدم به دما خیلی حساسه و تو محیطه صنعتی نمیشه ازش استفاده کرد(جون فرکانس نوسانگرش با تغییر دما عوض میشه) من ماژول DRF7020d20 راپیشنهاد میکنم.
خیلی ممنون