mirror of
https://github.com/Kugelschieber/arduino-c.git
synced 2026-01-18 02:50:26 +00:00
Started rf24 with SPI.
This commit is contained in:
1
compile
1
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
|
||||
|
||||
24
main.c
24
main.c
@@ -1,7 +1,10 @@
|
||||
#include <util/delay.h>
|
||||
#include <stdio.h>
|
||||
#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);
|
||||
}
|
||||
|
||||
26
rf24/nRF24L01.h
Normal file
26
rf24/nRF24L01.h
Normal file
@@ -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
|
||||
91
rf24/rf24.c
Normal file
91
rf24/rf24.c
Normal file
@@ -0,0 +1,91 @@
|
||||
#include "rf24.h"
|
||||
#include "nRF24L01.h"
|
||||
#include "../ard/pins.h"
|
||||
|
||||
// FIXME for testing, remove later
|
||||
#include <util/delay.h>
|
||||
|
||||
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<<PWR_UP);
|
||||
break;
|
||||
case 3: // RF24_STANDBY_2
|
||||
break;
|
||||
case 4: // RF24_TX
|
||||
break;
|
||||
case 5: // RF24_RX
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void rf24_config_register(unsigned char reg, unsigned char value){
|
||||
rf24_serial_write(W_REGISTER|(reg®_MASK));
|
||||
rf24_serial_write(value);
|
||||
}
|
||||
|
||||
unsigned char rf24_read_register(unsigned char reg){
|
||||
return rf24_serial_write(R_REGISTER|(reg®_MASK));
|
||||
}
|
||||
|
||||
unsigned char rf24_serial_write(unsigned char data){
|
||||
digital_write(_sck, LOW);
|
||||
digital_write(_csn, LOW); // chip enable
|
||||
unsigned char i = 0, rx = 0;
|
||||
|
||||
for(i = 0; i < 8; i++){
|
||||
// write bit
|
||||
if(data&(1<<(7-i))){
|
||||
digital_write(_mo, HIGH);
|
||||
}
|
||||
else{
|
||||
digital_write(_mo, LOW);
|
||||
}
|
||||
|
||||
// read bit
|
||||
digital_write(_sck, HIGH); // clock
|
||||
rx <<= 1;
|
||||
|
||||
if(digital_read(_mi)){
|
||||
rx |= 0x01;
|
||||
}
|
||||
|
||||
digital_write(_sck, LOW); // clock
|
||||
}
|
||||
|
||||
digital_write(_csn, HIGH); // chip disable
|
||||
|
||||
return rx;
|
||||
}
|
||||
16
rf24/rf24.h
Normal file
16
rf24/rf24.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#ifndef RF24_H_
|
||||
#define RF24_H_
|
||||
|
||||
extern const unsigned char RF24_POWER_DOWN;
|
||||
extern const unsigned char RF24_STANDBY_1;
|
||||
extern const unsigned char RF24_STANDBY_2;
|
||||
extern const unsigned char RF24_TX;
|
||||
extern const unsigned char RF24_RX;
|
||||
|
||||
void rf24_init(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char);
|
||||
void rf24_mode(unsigned char);
|
||||
|
||||
void rf24_config_register(unsigned char, unsigned char);
|
||||
unsigned char rf24_read_register(unsigned char);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user