nRF24L01+ BER app RX

Dependencies:   mbed nRF24L01P

Fork of nRF24L01P_Hello_World by Owen Edwards

Committer:
ttajmajer
Date:
Mon Nov 07 15:54:54 2016 +0000
Revision:
2:d2b92fbe58dd
nrf24l01 BER app RX

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ttajmajer 2:d2b92fbe58dd 1 #include "mbed.h"
ttajmajer 2:d2b92fbe58dd 2 #include "nRF24L01P.h"
ttajmajer 2:d2b92fbe58dd 3
ttajmajer 2:d2b92fbe58dd 4
ttajmajer 2:d2b92fbe58dd 5 //***************************************************************************//
ttajmajer 2:d2b92fbe58dd 6 // !!! SETTINGS !!!
ttajmajer 2:d2b92fbe58dd 7
ttajmajer 2:d2b92fbe58dd 8 #define DATA_RATE NRF24L01P_DATARATE_250_KBPS
ttajmajer 2:d2b92fbe58dd 9 //#define DATA_RATE NRF24L01P_DATARATE_1_MBPS
ttajmajer 2:d2b92fbe58dd 10 //#define DATA_RATE NRF24L01P_DATARATE_2_MBPS
ttajmajer 2:d2b92fbe58dd 11
ttajmajer 2:d2b92fbe58dd 12 #define POWER NRF24L01P_TX_PWR_ZERO_DB
ttajmajer 2:d2b92fbe58dd 13 //#define POWER NRF24L01P_TX_PWR_MINUS_6_DB
ttajmajer 2:d2b92fbe58dd 14 //#define POWER NRF24L01P_TX_PWR_MINUS_12_DB
ttajmajer 2:d2b92fbe58dd 15 //#define POWER NRF24L01P_TX_PWR_MINUS_18_DB
ttajmajer 2:d2b92fbe58dd 16
ttajmajer 2:d2b92fbe58dd 17 #define CHANNEL 0 // 0 - 30
ttajmajer 2:d2b92fbe58dd 18
ttajmajer 2:d2b92fbe58dd 19 //***************************************************************************//
ttajmajer 2:d2b92fbe58dd 20
ttajmajer 2:d2b92fbe58dd 21
ttajmajer 2:d2b92fbe58dd 22 Serial pc(USBTX, USBRX); // tx, rx
ttajmajer 2:d2b92fbe58dd 23 nRF24L01P radio(PB_15, PB_14, PB_13, PB_12, PB_1, PB_2); // mosi, miso, sck, csn, ce, irq
ttajmajer 2:d2b92fbe58dd 24 DigitalOut led(LED1);
ttajmajer 2:d2b92fbe58dd 25 InterruptIn button(USER_BUTTON);
ttajmajer 2:d2b92fbe58dd 26
ttajmajer 2:d2b92fbe58dd 27 bool stats_reset = false;
ttajmajer 2:d2b92fbe58dd 28 long rx_packet_counter = 0;
ttajmajer 2:d2b92fbe58dd 29 long rx_bit_counter = 0;
ttajmajer 2:d2b92fbe58dd 30 long rx_error_counter = 0;
ttajmajer 2:d2b92fbe58dd 31 bool status = false;
ttajmajer 2:d2b92fbe58dd 32
ttajmajer 2:d2b92fbe58dd 33
ttajmajer 2:d2b92fbe58dd 34 void tick_status(){
ttajmajer 2:d2b92fbe58dd 35 status = true;
ttajmajer 2:d2b92fbe58dd 36 }
ttajmajer 2:d2b92fbe58dd 37
ttajmajer 2:d2b92fbe58dd 38 void print_status(){
ttajmajer 2:d2b92fbe58dd 39 char buff[256];
ttajmajer 2:d2b92fbe58dd 40
ttajmajer 2:d2b92fbe58dd 41 sprintf(buff, "RX packets num: %ld\r\n"
ttajmajer 2:d2b92fbe58dd 42 "RX bits num: %ld\r\n"
ttajmajer 2:d2b92fbe58dd 43 "RX errors: %ld\r\n\r\n",
ttajmajer 2:d2b92fbe58dd 44 rx_packet_counter, rx_bit_counter, rx_error_counter);
ttajmajer 2:d2b92fbe58dd 45
ttajmajer 2:d2b92fbe58dd 46 pc.write((const uint8_t *)buff, strlen(buff), 0, 0);
ttajmajer 2:d2b92fbe58dd 47 }
ttajmajer 2:d2b92fbe58dd 48
ttajmajer 2:d2b92fbe58dd 49 void rst_stats(){
ttajmajer 2:d2b92fbe58dd 50 stats_reset = true;
ttajmajer 2:d2b92fbe58dd 51 }
ttajmajer 2:d2b92fbe58dd 52
ttajmajer 2:d2b92fbe58dd 53 int main() {
ttajmajer 2:d2b92fbe58dd 54 #define TRANSFER_SIZE 32
ttajmajer 2:d2b92fbe58dd 55 #define CODE 0xAA
ttajmajer 2:d2b92fbe58dd 56 char rxData[TRANSFER_SIZE];
ttajmajer 2:d2b92fbe58dd 57 Ticker status_ticker;
ttajmajer 2:d2b92fbe58dd 58
ttajmajer 2:d2b92fbe58dd 59 radio.powerDown();
ttajmajer 2:d2b92fbe58dd 60 radio.powerUp();
ttajmajer 2:d2b92fbe58dd 61
ttajmajer 2:d2b92fbe58dd 62 radio.setAirDataRate(DATA_RATE);
ttajmajer 2:d2b92fbe58dd 63 radio.setRfOutputPower(POWER);
ttajmajer 2:d2b92fbe58dd 64 radio.setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY + 4 * CHANNEL);
ttajmajer 2:d2b92fbe58dd 65
ttajmajer 2:d2b92fbe58dd 66 radio.setTransferSize(TRANSFER_SIZE);
ttajmajer 2:d2b92fbe58dd 67 radio.setCrcWidth(NRF24L01P_CRC_NONE);
ttajmajer 2:d2b92fbe58dd 68
ttajmajer 2:d2b92fbe58dd 69 pc.baud(115200);
ttajmajer 2:d2b92fbe58dd 70 status_ticker.attach(&tick_status, 1.0);
ttajmajer 2:d2b92fbe58dd 71 button.rise(&rst_stats);
ttajmajer 2:d2b92fbe58dd 72
ttajmajer 2:d2b92fbe58dd 73
ttajmajer 2:d2b92fbe58dd 74 pc.printf( "=======================================\r\n");
ttajmajer 2:d2b92fbe58dd 75 pc.printf( "CPU SystemCoreClock is : %d Hz\r\n", SystemCoreClock);
ttajmajer 2:d2b92fbe58dd 76 pc.printf( "=======================================\r\n");
ttajmajer 2:d2b92fbe58dd 77 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", radio.getRfFrequency() );
ttajmajer 2:d2b92fbe58dd 78 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", radio.getRfOutputPower() );
ttajmajer 2:d2b92fbe58dd 79 pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", radio.getAirDataRate() );
ttajmajer 2:d2b92fbe58dd 80 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", radio.getTxAddress() );
ttajmajer 2:d2b92fbe58dd 81 pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", radio.getRxAddress() );
ttajmajer 2:d2b92fbe58dd 82 pc.printf( "=======================================\r\n");
ttajmajer 2:d2b92fbe58dd 83
ttajmajer 2:d2b92fbe58dd 84 radio.setReceiveMode();
ttajmajer 2:d2b92fbe58dd 85 radio.enable();
ttajmajer 2:d2b92fbe58dd 86
ttajmajer 2:d2b92fbe58dd 87 while(1){
ttajmajer 2:d2b92fbe58dd 88
ttajmajer 2:d2b92fbe58dd 89 if(radio.readable()){
ttajmajer 2:d2b92fbe58dd 90 int rx_bytes;
ttajmajer 2:d2b92fbe58dd 91
ttajmajer 2:d2b92fbe58dd 92 rx_bytes = radio.read( NRF24L01P_PIPE_P0, rxData, sizeof(rxData));
ttajmajer 2:d2b92fbe58dd 93
ttajmajer 2:d2b92fbe58dd 94 if(rx_bytes < 0){
ttajmajer 2:d2b92fbe58dd 95 pc.printf("RX ERROR!\r\n");
ttajmajer 2:d2b92fbe58dd 96 } else{
ttajmajer 2:d2b92fbe58dd 97 rx_packet_counter += 1;
ttajmajer 2:d2b92fbe58dd 98 rx_bit_counter += rx_bytes * 8;
ttajmajer 2:d2b92fbe58dd 99
ttajmajer 2:d2b92fbe58dd 100 for(int i=0; i<rx_bytes; i++){
ttajmajer 2:d2b92fbe58dd 101 int err_bits;
ttajmajer 2:d2b92fbe58dd 102 if(rxData[i] != CODE){
ttajmajer 2:d2b92fbe58dd 103 err_bits = rxData[i] xor CODE;
ttajmajer 2:d2b92fbe58dd 104 rx_error_counter += __builtin_popcount(err_bits);
ttajmajer 2:d2b92fbe58dd 105 }
ttajmajer 2:d2b92fbe58dd 106 }
ttajmajer 2:d2b92fbe58dd 107 }
ttajmajer 2:d2b92fbe58dd 108 }
ttajmajer 2:d2b92fbe58dd 109
ttajmajer 2:d2b92fbe58dd 110 if(stats_reset){
ttajmajer 2:d2b92fbe58dd 111 pc.printf("=== RESETING COUNTERS ===\r\n");
ttajmajer 2:d2b92fbe58dd 112 rx_packet_counter = 0;
ttajmajer 2:d2b92fbe58dd 113 rx_bit_counter = 0;
ttajmajer 2:d2b92fbe58dd 114 rx_error_counter = 0;
ttajmajer 2:d2b92fbe58dd 115 stats_reset = false;
ttajmajer 2:d2b92fbe58dd 116 }
ttajmajer 2:d2b92fbe58dd 117
ttajmajer 2:d2b92fbe58dd 118 if(status){
ttajmajer 2:d2b92fbe58dd 119 print_status();
ttajmajer 2:d2b92fbe58dd 120 status = false;
ttajmajer 2:d2b92fbe58dd 121 }
ttajmajer 2:d2b92fbe58dd 122 }
ttajmajer 2:d2b92fbe58dd 123 }