From 781deb73f651e910e7427c0943008fe2787463f4 Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Sun, 16 Apr 2017 02:31:02 +0200 Subject: [PATCH] Started rf24 with SPI. --- compile | 1 + main.c | 24 +++++-------- rf24/nRF24L01.h | 26 ++++++++++++++ rf24/rf24.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++ rf24/rf24.h | 16 +++++++++ 5 files changed, 142 insertions(+), 16 deletions(-) create mode 100644 rf24/nRF24L01.h create mode 100644 rf24/rf24.c create mode 100644 rf24/rf24.h diff --git a/compile b/compile index 4ab5a2e..8064098 100755 --- a/compile +++ b/compile @@ -4,6 +4,7 @@ mkdir build avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o build/util.o -Wall ard/util.c avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o build/serial.o -Wall ard/serial.c avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o build/pins.o -Wall ard/pins.c +avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o build/rf24.o -Wall rf24/rf24.c avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o build/main.o -Wall main.c avr-gcc -mmcu=atmega328p build/*.o -o build/main avr-objcopy -O ihex -R .eeprom build/main build/main.hex diff --git a/main.c b/main.c index 0616d88..390b900 100644 --- a/main.c +++ b/main.c @@ -1,7 +1,10 @@ +#include #include #include "ard/serial.h" #include "ard/pins.h" #include "ard/util.h" +#include "rf24/rf24.h" +#include "rf24/nRF24L01.h" void prepare(); void loop(); @@ -19,23 +22,12 @@ void prepare(){ pins_init(); serial_init(9600); - pin_mode(A1, INPUT); - pin_mode(6, OUTPUT); - pin_mode(11, OUTPUT); + _delay_ms(50); + rf24_init(7, 6, 5, 4, 3, 2); + _delay_ms(200); } void loop(){ - int analog = map(analog_read(A1), 0, 1023, 0, 255); - analog_write(11, analog); - - if(analog < 128){ - digital_write(6, HIGH); - } - else{ - digital_write(6, LOW); - } - - char out[15]; - sprintf(out, "%d", analog); - serial_write(out, 15); + rf24_read_register(STATUS); + _delay_ms(5); } diff --git a/rf24/nRF24L01.h b/rf24/nRF24L01.h new file mode 100644 index 0000000..bb5e445 --- /dev/null +++ b/rf24/nRF24L01.h @@ -0,0 +1,26 @@ +#ifndef NRF24L01_H_ +#define NRF24L01_H_ + +#define CONFIG 0x00 +#define MASK_RX_DR 6 +#define MASK_TX_DS 5 +#define MASK_MAX_RT 4 +#define EN_CRC 3 +#define CRCO 2 +#define PWR_UP 1 +#define PRIM_RX 0 + +#define STATUS 0x07 +#define RX_DR 6 +#define TX_DS 5 +#define MAX_RT 4 +#define RX_P_NO 3 // 3 bits +#define TX_FULL 0 + +#define R_REGISTER 0x00 +#define W_REGISTER 0x20 +#define REG_MASK 0x1f + +// TODO + +#endif diff --git a/rf24/rf24.c b/rf24/rf24.c new file mode 100644 index 0000000..53ae2b4 --- /dev/null +++ b/rf24/rf24.c @@ -0,0 +1,91 @@ +#include "rf24.h" +#include "nRF24L01.h" +#include "../ard/pins.h" + +// FIXME for testing, remove later +#include + +const unsigned char RF24_POWER_DOWN = 1; +const unsigned char RF24_STANDBY_1 = 2; +const unsigned char RF24_STANDBY_2 = 3; +const unsigned char RF24_TX = 4; +const unsigned char RF24_RX = 5; + +unsigned char _ce, _csn, _sck, _mo, _mi, _irq; + +unsigned char rf24_serial_write(unsigned char); + +void rf24_init(unsigned char ce, unsigned char csn, unsigned char sck, unsigned char mo, unsigned char mi, unsigned char irq){ + pin_mode(ce, OUTPUT); + pin_mode(csn, OUTPUT); + digital_write(csn, HIGH); // disable + pin_mode(sck, OUTPUT); + pin_mode(mo, OUTPUT); + pin_mode(mi, INPUT); + pin_mode(irq, OUTPUT); + + _ce = ce; + _csn = csn; + _sck = sck; + _mo = mo; + _mi = mi; + _irq = irq; + + rf24_mode(RF24_POWER_DOWN); +} + +void rf24_mode(unsigned char mode){ + switch(mode){ + case 1: // RF24_POWER_DOWN + rf24_config_register(CONFIG, 0x00); + break; + case 2: // RF24_STANDBY_1 + //rf24_config_register(CONFIG, 1<