چند وقتی هست دارم رو nrf کار میکنم اما هر کاری میکنم نمیتونم فرستنده رو راه بندازم :cry:
میتونم رجیستراشو بخونم یا بنویسم اما تو لحظه فرستادن بیت TX_DS که نشون دهنده درست فرستاده شدن payload هست رو از رجیستر STATUS هست یک نمیشه و این یعنی اینکه اطلاعات فرستاده نمیشه.
این main برنامس
[code=c][int main(void)
{
BYTE x,data[3]={0x31,0x45,0x66};
DDRC=0xFF;
Setup();
TXMode();
while(1)
{
for(x=0;x<=255;x++)
{
WritePayload(3,data);
while(!(ReadRegister(STATUS) & (1<<5)));
PORTC=x;
delay_ms(500);
FlushTXRX();
}
}
}]
//--------------------------------------------------------------------------------------------][/code]
یه تابع برا تنظیمات اولیه نوشتم .
[code=c][void Setup(void)
{
Spi_Init(); // Initialize the SPI:
delay_ms(101); //Power on reset 100ms
SetBit(DDRB,2);//CE Data direction OUT PUT
SetBit(DDRB,4);//CSN Data direction OUT PUT
/********* Initialize the CSN and CE pins:********/
CEPin_Low;
CSNPin_High;
//************************************************
WriteAddress(TX_ADDR, 5,RXTX_ADDRESS); // Transmit address. Used for a PTX device only.for this module is 5 byte like as RX_ADDR_P0
WriteRegister(EN_RXADDR, 0x01); // Enabled RX Addresses-Enable data pipe 0
WriteRegister(SETUP_AW, 0x03); // 5 BYTE address
//WriteRegister(NRF_CONFIG, 0x0E); // 2 BYTE CRC, POWER UP, PTX
WriteRegister(EN_AA, 0x01); // Enable/Disable ‘Auto Acknowledgment’ Function Disable
WriteRegister(SETUP_RETR, 0x1A); // 500us + 86us, 10 returns...
WriteRegister(RF_CH,RF_CHANNEL); // Total canal in this module is 125-Use canal 5 for this connection
WriteRegister(RF_SETUP,0b00000110); // 1Mbps, 0dBm-Max Power(max distance transmit)
WriteRegister(RX_PW_P0,Number_Bytes); // RX payload = 16 BYTE.Number of bytes in RX payload in data pipe 0 (1 to 32 bytes)
WriteAddress(RX_ADDR_P0,Address_Width,RXTX_ADDRESS ); // Receive address data pipe 0. 5 Bytes maximum length.for this module is 3 byte
WriteAddress(TX_ADDR,Address_Width,RXTX_ADDRESS); //Transmit Address
WriteRegister(DYNPD,0x01);
WriteRegister(FEATURE,0x07);
FlushTXRX(); // Flush TX/RX FIFO, used in TX mode.Empty TX/RX FIFO
}
//--------------------------------------------------------------------------------------------][/code]
اینم تابع فرستادن اطلاعات
[code=c][void WritePayload(BYTE num, BYTE *Data)
{
BYTE x;
CSNPin_Low;
Spi_Transfer(TX_PAYLOAD);
for (x=0;x<num;x++)Spi_Transfer(Data[x]);
delay_ms(10);
CSNPin_High;
CEPin_High;
delay_us(12); //Minimum 10µs high pulse + a bit (2us)
CEPin_Low;//cePin = 0;//wake up from Stand By
}][/code]
میتونم رجیستراشو بخونم یا بنویسم اما تو لحظه فرستادن بیت TX_DS که نشون دهنده درست فرستاده شدن payload هست رو از رجیستر STATUS هست یک نمیشه و این یعنی اینکه اطلاعات فرستاده نمیشه.
این main برنامس
[code=c][int main(void)
{
BYTE x,data[3]={0x31,0x45,0x66};
DDRC=0xFF;
Setup();
TXMode();
while(1)
{
for(x=0;x<=255;x++)
{
WritePayload(3,data);
while(!(ReadRegister(STATUS) & (1<<5)));
PORTC=x;
delay_ms(500);
FlushTXRX();
}
}
}]
//--------------------------------------------------------------------------------------------][/code]
یه تابع برا تنظیمات اولیه نوشتم .
[code=c][void Setup(void)
{
Spi_Init(); // Initialize the SPI:
delay_ms(101); //Power on reset 100ms
SetBit(DDRB,2);//CE Data direction OUT PUT
SetBit(DDRB,4);//CSN Data direction OUT PUT
/********* Initialize the CSN and CE pins:********/
CEPin_Low;
CSNPin_High;
//************************************************
WriteAddress(TX_ADDR, 5,RXTX_ADDRESS); // Transmit address. Used for a PTX device only.for this module is 5 byte like as RX_ADDR_P0
WriteRegister(EN_RXADDR, 0x01); // Enabled RX Addresses-Enable data pipe 0
WriteRegister(SETUP_AW, 0x03); // 5 BYTE address
//WriteRegister(NRF_CONFIG, 0x0E); // 2 BYTE CRC, POWER UP, PTX
WriteRegister(EN_AA, 0x01); // Enable/Disable ‘Auto Acknowledgment’ Function Disable
WriteRegister(SETUP_RETR, 0x1A); // 500us + 86us, 10 returns...
WriteRegister(RF_CH,RF_CHANNEL); // Total canal in this module is 125-Use canal 5 for this connection
WriteRegister(RF_SETUP,0b00000110); // 1Mbps, 0dBm-Max Power(max distance transmit)
WriteRegister(RX_PW_P0,Number_Bytes); // RX payload = 16 BYTE.Number of bytes in RX payload in data pipe 0 (1 to 32 bytes)
WriteAddress(RX_ADDR_P0,Address_Width,RXTX_ADDRESS ); // Receive address data pipe 0. 5 Bytes maximum length.for this module is 3 byte
WriteAddress(TX_ADDR,Address_Width,RXTX_ADDRESS); //Transmit Address
WriteRegister(DYNPD,0x01);
WriteRegister(FEATURE,0x07);
FlushTXRX(); // Flush TX/RX FIFO, used in TX mode.Empty TX/RX FIFO
}
//--------------------------------------------------------------------------------------------][/code]
اینم تابع فرستادن اطلاعات
[code=c][void WritePayload(BYTE num, BYTE *Data)
{
BYTE x;
CSNPin_Low;
Spi_Transfer(TX_PAYLOAD);
for (x=0;x<num;x++)Spi_Transfer(Data[x]);
delay_ms(10);
CSNPin_High;
CEPin_High;
delay_us(12); //Minimum 10µs high pulse + a bit (2us)
CEPin_Low;//cePin = 0;//wake up from Stand By
}][/code]
دیدگاه