Fixed payload length.

This commit is contained in:
Marvin Blum
2017-04-18 15:28:55 +02:00
parent 77efdbc17a
commit f2cd5ab0f1
2 changed files with 19 additions and 21 deletions

11
main.c
View File

@@ -7,6 +7,7 @@
#include "rf24/nRF24L01.h" #include "rf24/nRF24L01.h"
//#define TX //#define TX
#define PAYLOAD 32 // byte
unsigned char rx_addr[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7}; unsigned char rx_addr[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7};
unsigned char tx_addr[5] = {0xD7, 0xD7, 0xD7, 0xD7, 0xD7}; unsigned char tx_addr[5] = {0xD7, 0xD7, 0xD7, 0xD7, 0xD7};
@@ -32,7 +33,7 @@ void prepare(){
pin_mode(A2, OUTPUT); // red pin_mode(A2, OUTPUT); // red
rf24_init(7, 6, 5, 4, 3, 2); rf24_init(7, 6, 5, 4, 3, 2);
rf24_config(2, 13); rf24_config(2, PAYLOAD);
#ifdef TX #ifdef TX
rf24_rx_addr(rx_addr); rf24_rx_addr(rx_addr);
@@ -59,7 +60,7 @@ void tx(){
_delay_ms(10); _delay_ms(10);
digital_write(A1, LOW); digital_write(A1, LOW);
digital_write(A2, LOW); digital_write(A2, LOW);
unsigned char data[13] = "World!"; unsigned char data[PAYLOAD] = "Hello, World! What's going on?";
rf24_send(data); rf24_send(data);
while(rf24_is_sending()); while(rf24_is_sending());
@@ -78,12 +79,12 @@ void rx(){
digital_write(A2, LOW); digital_write(A2, LOW);
if(rf24_data_ready()){ if(rf24_data_ready()){
unsigned char data[13]; unsigned char data[PAYLOAD];
rf24_get_data(data); rf24_get_data(data);
digital_write(A1, HIGH); digital_write(A1, HIGH);
serial_write((char*)data, 13); serial_write((char*)data, PAYLOAD);
_delay_ms(1000); _delay_ms(100);
} }
} }

View File

@@ -38,13 +38,7 @@ void rf24_config(unsigned char channel, unsigned char payload_len){
_payload_len = payload_len; _payload_len = payload_len;
rf24_config_register(RF_CH, channel&RF_CH_MASK); // 2.4Ghz + channel*1Mhz rf24_config_register(RF_CH, channel&RF_CH_MASK); // 2.4Ghz + channel*1Mhz
rf24_config_register(RX_PW_P1, payload_len&RX_PW_MASK); // data, pipe 0 for ACK
rf24_config_register(RX_PW_P0, 0x00); // auto ACK
rf24_config_register(RX_PW_P1, payload_len&RX_PW_MASK); // data
rf24_config_register(RX_PW_P2, 0x00); // unused...
rf24_config_register(RX_PW_P3, 0x00);
rf24_config_register(RX_PW_P4, 0x00);
rf24_config_register(RX_PW_P5, 0x00);
// low transmission rate, 0dBm // low transmission rate, 0dBm
rf24_config_register(RF_SETUP, (0<<RF_DR_HIGH)|(0x03<<RF_PWR)); rf24_config_register(RF_SETUP, (0<<RF_DR_HIGH)|(0x03<<RF_PWR));
@@ -53,17 +47,14 @@ void rf24_config(unsigned char channel, unsigned char payload_len){
rf24_config_register(CONFIG, CONFIG_CRC); rf24_config_register(CONFIG, CONFIG_CRC);
// auto ACK for pipe 0 and 1 (disable the rest of them) // auto ACK for pipe 0 and 1 (disable the rest of them)
rf24_config_register(EN_AA, (1<<ENAA_P0)|(1<<ENAA_P1)|(0<<ENAA_P2)|(0<<ENAA_P3)|(0<<ENAA_P4)|(0<<ENAA_P5)); rf24_config_register(EN_AA, (1<<ENAA_P0)|(1<<ENAA_P1));
// rx address // rx address
rf24_config_register(EN_RXADDR, (1<<ERX_P0)|(1<<ERX_P1)|(0<<ERX_P2)|(0<<ERX_P3)|(0<<ERX_P4)|(0<<ERX_P5)); rf24_config_register(EN_RXADDR, (1<<ERX_P0)|(1<<ERX_P1));
// auto retransmit, 1000us, 15 retransmits // auto retransmit, 1000us, 15 retransmits
rf24_config_register(SETUP_RETR, (0x04<<ARD)|(0x0F<<ARC)); rf24_config_register(SETUP_RETR, (0x04<<ARD)|(0x0F<<ARC));
// fixed package length
rf24_config_register(DYNPD, 0x00);
rf24_rx(); rf24_rx();
} }
@@ -140,7 +131,7 @@ void rf24_get_data(unsigned char* data){
rf24_serial_write(R_RX_PAYLOAD); rf24_serial_write(R_RX_PAYLOAD);
unsigned char i = 0; unsigned char i = 0;
for(i = 0; i < 4; i++){ for(i = 0; i < _payload_len; i++){
data[i] = rf24_serial_write(NOP); data[i] = rf24_serial_write(NOP);
} }
@@ -187,10 +178,14 @@ unsigned char rf24_serial_write(unsigned char data){
digital_write(_sck, LOW); // clock digital_write(_sck, LOW); // clock
unsigned char i = 0, rx = 0; unsigned char i = 0, rx = 0;
_delay_ms(40); // FIXME remove #ifdef DEBUG
_delay_ms(40);
#endif
for(i = 0; i < 8; i++){ for(i = 0; i < 8; i++){
_delay_ms(5); // FIXME remove #ifdef DEBUG
_delay_ms(5);
#endif
// write bit // write bit
if(data&(1<<(7-i))){ if(data&(1<<(7-i))){
@@ -211,7 +206,9 @@ unsigned char rf24_serial_write(unsigned char data){
digital_write(_sck, LOW); digital_write(_sck, LOW);
} }
_delay_ms(5); // FIXME remove #ifdef DEBUG
_delay_ms(5);
#endif
digital_write(_mo, LOW); digital_write(_mo, LOW);
return rx; return rx;