Still not working.

This commit is contained in:
Marvin Blum
2017-04-16 18:49:25 +02:00
parent cad7631894
commit 55a584bffb
4 changed files with 64 additions and 51 deletions

47
main.c
View File

@@ -6,7 +6,7 @@
#include "rf24/rf24.h" #include "rf24/rf24.h"
#include "rf24/nRF24L01.h" #include "rf24/nRF24L01.h"
#define TX //#define TX 1
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};
@@ -26,8 +26,8 @@ void prepare(){
pins_init(); pins_init();
serial_init(9600); serial_init(9600);
pin_mode(A1, OUTPUT); pin_mode(A1, OUTPUT); // ok
pin_mode(A2, OUTPUT); pin_mode(A2, OUTPUT); // error
rf24_init(7, 6, 5, 4, 3, 2); rf24_init(7, 6, 5, 4, 3, 2);
rf24_config(2, 4); rf24_config(2, 4);
@@ -44,33 +44,36 @@ void prepare(){
} }
void loop(){ void loop(){
digital_write(A1, HIGH); _delay_ms(1000);
digital_write(A1, LOW);
digital_write(A2, LOW); digital_write(A2, LOW);
_delay_ms(1000);
#ifdef TX #ifdef TX
unsigned char data[4] = {'t', 'e', 's', 't'}; unsigned char data[4] = {1, 2, 3, 4};
rf24_send(data); rf24_send(data);
while(rf24_is_sending()); while(rf24_is_sending());
/*unsigned char status = rf24_status();
unsigned char status = rf24_status();
if(status&(1<<TX_DS)){ if(status&(1<<TX_DS)){
digital_write(A2, HIGH); digital_write(A1, HIGH);
} }
#else else{
while(!rf24_data_ready());
unsigned char data[4];
rf24_get_data(data);
char out[10];
sprintf(out, "%d", data[0]);
serial_write(out, 10);
digital_write(A2, HIGH); digital_write(A2, HIGH);
#endif }*/
digital_write(A1, LOW); digital_write(A1, HIGH);
_delay_ms(1000); #else
if(rf24_data_ready()){
unsigned char data[4] = {0, 0, 0, 0};
rf24_get_data(data);
digital_write(A1, HIGH);
char out[20];
sprintf(out, "%d %d %d %d", data[0], data[1], data[2], data[3]);
serial_write(out, 20);
}
#endif
} }

View File

@@ -42,7 +42,7 @@
#define RF_DR_LOW 5 #define RF_DR_LOW 5
#define PLL_LOCK 4 #define PLL_LOCK 4
#define RF_DR_HIGH 3 #define RF_DR_HIGH 3
#define RF_PWR 0 // 2 bits #define RF_PWR 1 // 2 bits
#define STATUS 0x07 #define STATUS 0x07
#define RX_DR 6 #define RX_DR 6

View File

@@ -47,19 +47,22 @@ void rf24_config(unsigned char channel, unsigned char payload_len){
rf24_config_register(RX_PW_P5, 0x00); rf24_config_register(RX_PW_P5, 0x00);
// low transmission rate, 0dBm // low transmission rate, 0dBm
rf24_config_register(RF_SETUP, (1<<RF_DR_LOW)|(0x03<<RF_PWR)); rf24_config_register(RF_SETUP, (0<<RF_DR_LOW)|(0x03<<RF_PWR));
// CRC // CRC
rf24_config_register(CONFIG, CONFIG_CRC); rf24_config_register(CONFIG, CONFIG_CRC);
// auto ACK for pipe 0 and 1 // auto ACK for pipe 0 and 1 (disable the rest of them)
//rf24_config_register(EN_AA, 0x03); rf24_config_register(EN_AA, (1<<ENAA_P0)|(1<<ENAA_P1)|(0<<ENAA_P2)|(0<<ENAA_P3)|(0<<ENAA_P4)|(0<<ENAA_P5));
// rx address // rx address
//rf24_config_register(EN_RXADDR, (1<<ERX_P0)|(1<<ERX_P1)); rf24_config_register(EN_RXADDR, (1<<ERX_P0)|(1<<ERX_P1)|(0<<ERX_P2)|(0<<ERX_P3)|(0<<ERX_P4)|(0<<ERX_P5));
// auto retransmit, 1000us, 15 retransmits // auto retransmit, 1000us, 15 retransmits
rf24_config_register(SETUP_RETR, (0x03<<ARD)|(0x0F<<ARC)); rf24_config_register(SETUP_RETR, (0x04<<ARD)|(0x0F<<ARC));
// fixed package length
rf24_config_register(DYNPD, 0x00);
rf24_rx(); rf24_rx();
} }
@@ -76,6 +79,25 @@ void rf24_tx_addr(unsigned char* addr){
rf24_serial_transmit(addr, 5); rf24_serial_transmit(addr, 5);
} }
void rf24_rx(){
rf24_serial_write(FLUSH_RX);
rf24_config_register(STATUS, (1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT));
rf24_config_register(CONFIG, CONFIG_CRC|(1<<PWR_UP)|(1<<PRIM_RX));
digital_write(_ce, HIGH);
}
void rf24_tx(){
rf24_serial_write(FLUSH_TX);
rf24_config_register(STATUS, (1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT));
rf24_config_register(CONFIG, CONFIG_CRC|(1<<PWR_UP)|(0<<PRIM_RX));
digital_write(_ce, LOW);
}
void rf24_power_down(){
digital_write(_ce, LOW);
rf24_config_register(CONFIG, CONFIG_CRC);
}
void rf24_send(unsigned char* data){ void rf24_send(unsigned char* data){
rf24_tx(); rf24_tx();
rf24_serial_write(W_TX_PAYLOAD); rf24_serial_write(W_TX_PAYLOAD);
@@ -85,12 +107,7 @@ void rf24_send(unsigned char* data){
unsigned char rf24_is_sending(){ unsigned char rf24_is_sending(){
unsigned char status = rf24_status(); unsigned char status = rf24_status();
return !(status&((1<<TX_DS)|(1<<MAX_RT)));
if(status&((1<<TX_DS)|(1<<MAX_RT))){
return 0;
}
return 1;
} }
unsigned char rf24_data_ready(){ unsigned char rf24_data_ready(){
@@ -108,10 +125,11 @@ void rf24_get_data(unsigned char* data){
unsigned char i = 0; unsigned char i = 0;
for(i = 0; i < 4; i++){ for(i = 0; i < 4; i++){
data[3-i] = rf24_serial_write(NOP); data[i] = rf24_serial_write(NOP);
} }
rf24_config_register(STATUS, 1<<RX_DR); rf24_config_register(STATUS, 1<<RX_DR);
rf24_serial_write(FLUSH_RX);
} }
unsigned char rf24_status(){ unsigned char rf24_status(){
@@ -124,20 +142,8 @@ void rf24_config_register(unsigned char reg, unsigned char value){
} }
unsigned char rf24_read_register(unsigned char reg){ unsigned char rf24_read_register(unsigned char reg){
return rf24_serial_write(R_REGISTER|(reg&REG_MASK)); rf24_serial_write(R_REGISTER|(reg&REG_MASK));
} return rf24_serial_write(NOP);
void rf24_rx(){
digital_write(_ce, HIGH);
rf24_config_register(CONFIG, CONFIG_CRC|(1<<PWR_UP)|(1<<PRIM_RX));
rf24_config_register(STATUS, (1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT));
}
void rf24_tx(){
digital_write(_ce, LOW);
rf24_config_register(CONFIG, CONFIG_CRC|(1<<PWR_UP)|(0<<PRIM_RX));
rf24_config_register(STATUS, (1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT));
rf24_serial_write(FLUSH_TX);
} }
unsigned char rf24_fifo_empty(){ unsigned char rf24_fifo_empty(){
@@ -149,16 +155,17 @@ void rf24_serial_transmit(unsigned char* data, unsigned char len){
unsigned char i = 0; unsigned char i = 0;
for(i = 0; i < len; i++){ for(i = 0; i < len; i++){
rf24_serial_write(data[(len-1-i)]); rf24_serial_write(data[i]);
} }
} }
unsigned char rf24_serial_write(unsigned char data){ unsigned char rf24_serial_write(unsigned char data){
digital_write(_sck, LOW);
digital_write(_csn, LOW); // chip enable digital_write(_csn, LOW); // chip enable
unsigned char i = 0, rx = 0; unsigned char i = 0, rx = 0;
for(i = 0; i < 8; i++){ for(i = 0; i < 8; i++){
digital_write(_sck, LOW); // clock
// write bit // write bit
if(data&(1<<(7-i))){ if(data&(1<<(7-i))){
digital_write(_mo, HIGH); digital_write(_mo, HIGH);
@@ -174,10 +181,9 @@ unsigned char rf24_serial_write(unsigned char data){
if(digital_read(_mi)){ if(digital_read(_mi)){
rx |= 0x01; rx |= 0x01;
} }
digital_write(_sck, LOW); // clock
} }
digital_write(_sck, LOW);
digital_write(_csn, HIGH); // chip disable digital_write(_csn, HIGH); // chip disable
digital_write(_mo, LOW); digital_write(_mo, LOW);

View File

@@ -6,6 +6,10 @@ void rf24_config(unsigned char, unsigned char);
void rf24_rx_addr(unsigned char*); void rf24_rx_addr(unsigned char*);
void rf24_tx_addr(unsigned char*); void rf24_tx_addr(unsigned char*);
void rf24_rx();
void rf24_tx();
void rf24_power_down();
void rf24_send(unsigned char*); void rf24_send(unsigned char*);
unsigned char rf24_is_sending(); unsigned char rf24_is_sending();