From bee284f9c5478880a78c019dd1f565e4fc1ffd2c Mon Sep 17 00:00:00 2001 From: maniacbug Date: Wed, 25 May 2011 22:22:21 -0700 Subject: [PATCH] Added carrier detect and auto-ack disable, and an example to use it --- RF24.cpp | 19 +- RF24.h | 21 ++ examples/scanner/makefile | 305 ++++++++++++++++++++++++++ examples/scanner/output/core.a | Bin 0 -> 187630 bytes examples/scanner/output/scanner.cpp | 128 +++++++++++ examples/scanner/output/scanner.elf | Bin 0 -> 100436 bytes examples/scanner/output/scanner.hex | 325 ++++++++++++++++++++++++++++ examples/scanner/printf.h | 33 +++ examples/scanner/scanner.pde | 125 +++++++++++ 9 files changed, 955 insertions(+), 1 deletion(-) create mode 100644 examples/scanner/makefile create mode 100644 examples/scanner/output/core.a create mode 100644 examples/scanner/output/scanner.cpp create mode 100755 examples/scanner/output/scanner.elf create mode 100644 examples/scanner/output/scanner.hex create mode 100644 examples/scanner/printf.h create mode 100644 examples/scanner/scanner.pde diff --git a/RF24.cpp b/RF24.cpp index db39bea..e0fe3c0 100644 --- a/RF24.cpp +++ b/RF24.cpp @@ -331,7 +331,7 @@ void RF24::startListening(void) ce(HIGH); // wait for the radio to come up (130us actually only needed) - delay(1); + delayMicroseconds(130); } /******************************************************************/ @@ -591,5 +591,22 @@ boolean RF24::isAckPayloadAvailable(void) return result; } +/******************************************************************/ + +void RF24::setAutoAck(bool enable) +{ + if ( enable ) + write_register(EN_AA, B111111); + else + write_register(EN_AA, 0); +} + +/******************************************************************/ + +boolean RF24::testCarrier(void) +{ + return ( read_register(CD) & 1 ); +} + // vim:ai:cin:sts=2 sw=2 ft=cpp diff --git a/RF24.h b/RF24.h index 2bc97c3..6c8fffd 100644 --- a/RF24.h +++ b/RF24.h @@ -399,6 +399,27 @@ public: * @return True if an ack payload is available. */ boolean isAckPayloadAvailable(void); + + /** + * Enable or disable auto-acknowlede packets + * + * This is enabled by default, so it's only needed if you want to turn + * it off for some reason. + * + * @param enable Whether to enable (true) or disable (false) auto-acks + */ + void setAutoAck(bool enable); + + /** + * Test whether there was a carrier on the line for the + * previous listening period. + * + * Useful to check for interference on the current channel. + * + * @return true if was carrier, false if not + */ + + boolean testCarrier(void); /**@}*/ }; diff --git a/examples/scanner/makefile b/examples/scanner/makefile new file mode 100644 index 0000000..15cb43b --- /dev/null +++ b/examples/scanner/makefile @@ -0,0 +1,305 @@ +# Arduino Makefile +# Arduino adaptation by mellis, eighthave, oli.keller +# Modified by Kerry Wong to support NetBeans +# Modified by Rob Gray (Graynomad) for use with Windows and no IDE +# This works in my environment and I use it to program two different +# 328-based boards and a Mega2560. It's not necessarily robust and +# I may have broken something in the original file that I don't use. +# +# This makefile allows you to build sketches from the command line +# without the Arduino environment. +# +# Instructions for using the makefile: +# +# 1. Copy this file into the folder with your sketch. The project code file +# should have a .c extension however the file gets copied to a .cpp before +# compilation so you still write in C++. +# +# 2. Modify the lines between the double ### rows to set the paths +# comm ports etc for your system. EG. c:/progra~1/arduino/arduino-00 +# for the Arduino IDE, Note the use of short folder name, don't use +# "Program files" because spaces will break the build. +# +# Set the line containing "MCU" to match your board's processor. +# Typically ATmega328 or ATmega2560. If you're using a LilyPad Arduino, +# change F_CPU to 8000000. +# +# 3. At the command line, change to the directory containing your +# program's file and the makefile. +# +# 4. Type "make" and press enter to compile/verify your program. +# The default make target will also perform the uplode using avrdude. +# +# The first time this is done all required libraries will be built +# and a core.a file will be created in the output folder. +# +# NOTES: +# All output goes into a folder called "output" underneath the working folder. +# The default all: target creates symbol (.sym) and expanded assembly +# (.lss) files and uploads the program. +# +# +########################################################## +########################################################## +# Select processor here +MCU = atmega328p +#MCU = atmega2560 + +ifeq ($(MCU),atmega2560) +UPLOAD_RATE = 115200 +AVRDUDE_PROTOCOL = stk500v2 +COM = 39 +endif + +ifeq ($(MCU),atmega328p) +UPLOAD_RATE = 57600 +AVRDUDE_PROTOCOL = stk500v1 +COM = 33 +endif + +UNAME := $(shell uname) + +ifeq ($(UNAME),Darwin) +ARDUINO_VERSION = 21 +ARDUINO_DIR = /opt/arduino-00$(ARDUINO_VERSION) +AVR_TOOLS_PATH = $(ARDUINO_DIR)/hardware/tools/avr/bin +AVRDUDECONFIG_PATH = $(ARDUINO_DIR)/hardware/tools/avr/etc +PORT = /dev/tty.usbserial-A600eHIs +PORT2 = /dev/tty.usbserial-A9007LmI +PORT3 = /dev/tty.usbserial-A40081RP +else +ARDUINO_VERSION = 22 +ARDUINO_DIR = /opt/arduino-00$(ARDUINO_VERSION) +AVR_TOOLS_PATH = /usr/bin +AVRDUDECONFIG_PATH = $(ARDUINO_DIR)/hardware/tools +PORT = /dev/ttyUSB0 +PORT2 = /dev/ttyUSB1 +endif + +# Temporary testing of github Arduino environment +OLD_DIR = /opt/arduino-00$(ARDUINO_VERSION) +AVR_TOOLS_PATH = $(OLD_DIR)/hardware/tools/avr/bin +AVRDUDECONFIG_PATH = $(OLD_DIR)/hardware/tools/avr/etc +ARDUINO_DIR = /opt/Arduino + +PROJECT_NAME = $(notdir $(PWD)) +PROJECT_DIR = . +ARDUINO_CORE = $(ARDUINO_DIR)/hardware/arduino/cores/arduino +ARDUINO_AVR = $(ARDUINO_DIR)/hardware/tools/avr/avr/include/avr +ARDUINO_LIB = $(ARDUINO_DIR)/libraries +F_CPU = 16000000 + +########################################################## +########################################################## + +# Note that if your program has dependencies other than those +# already listed below, you will need to add them accordingly. +C_MODULES = \ +$(ARDUINO_CORE)/wiring_pulse.c \ +$(ARDUINO_CORE)/wiring_analog.c \ +$(ARDUINO_CORE)/pins_arduino.c \ +$(ARDUINO_CORE)/wiring.c \ +$(ARDUINO_CORE)/wiring_digital.c \ +$(ARDUINO_CORE)/WInterrupts.c \ +$(ARDUINO_CORE)/wiring_shift.c \ + +CXX_MODULES = \ +$(ARDUINO_CORE)/Tone.cpp \ +$(ARDUINO_CORE)/main.cpp \ +$(ARDUINO_CORE)/WMath.cpp \ +$(ARDUINO_CORE)/Print.cpp \ +$(ARDUINO_CORE)/HardwareSerial.cpp \ +$(ARDUINO_LIB)/SPI/SPI.cpp \ +$(ARDUINO_LIB)/EEPROM/EEPROM.cpp \ +../../RF24.cpp + +CXX_APP = output/$(PROJECT_NAME).cpp +MODULES = $(C_MODULES) $(CXX_MODULES) +SRC = $(C_MODULES) +CXXSRC = $(CXX_MODULES) $(CXX_APP) +FORMAT = ihex + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + +# Debugging format. +# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. +# AVR (extended) COFF requires stabs, plus an avr-objcopy run. +#DEBUG = stabs +DEBUG = + +OPT = s + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU)L -DARDUINO=$(ARDUINO_VERSION) +CXXDEFS = -DF_CPU=$(F_CPU)L -DARDUINO=$(ARDUINO_VERSION) + +# Place -I options here +CINCS = -I$(ARDUINO_LIB)/EEPROM -I$(ARDUINO_CORE) -I$(ARDUINO_LIB) -I$(PROJECT_DIR) -I$(ARDUINO_AVR) -I$(ARDUINO_LIB)/SPI -I../.. + +CXXINCS = -I$(ARDUINO_CORE) -I$(ARDUINO_LIB) + +# Compiler flag to set the C Standard level. +# c89 - "ANSI" C +# gnu89 - c89 plus GCC extensions +# c99 - ISO C99 standard (not yet fully implemented) +# gnu99 - c99 plus GCC extensions +#CSTANDARD = -std=gnu99 +CDEBUG = -g$(DEBUG) +#CWARN = -Wall -Wstrict-prototypes +CWARN = -Wall # show all warnings +#CWARN = -w # suppress all warnings +CMAP = -Wl,-Map,output.map +####CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +CTUNING = -ffunction-sections -fdata-sections +CXXTUNING = -fno-exceptions -ffunction-sections -fdata-sections +#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) +MMCU = -mmcu=$(MCU) + +CFLAGS = $(CDEBUG) -O$(OPT) $(CMAP) $(CWARN) $(CTUNING) $(MMCU) $(CDEFS) $(CINCS) $(CSTANDARD) $(CEXTRA) +CXXFLAGS = $(CDEBUG) -O$(OPT) $(CWARN) $(CXXTUNING) $(CDEFS) $(CINCS) +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs +LDFLAGS = -O$(OPT) -lm -Wl,--gc-sections +#LDFLAGS = -O$(OPT) -lm -Wl,-Map,output/$(PROJECT_NAME).map + +# Programming support using avrdude. Settings and variables. +AVRDUDE_PORT = $(PORT) +AVRDUDE_WRITE_FLASH = -U flash:w:output/$(PROJECT_NAME).hex:i + +AVRDUDE_FLAGS = -V -F -D -C $(AVRDUDECONFIG_PATH)/avrdude.conf \ +-p $(MCU) -c $(AVRDUDE_PROTOCOL) -b $(UPLOAD_RATE) + +# Program settings +CC = $(AVR_TOOLS_PATH)/avr-gcc +CXX = $(AVR_TOOLS_PATH)/avr-g++ +LD = $(AVR_TOOLS_PATH)/avr-gcc +OBJCOPY = $(AVR_TOOLS_PATH)/avr-objcopy +OBJDUMP = $(AVR_TOOLS_PATH)/avr-objdump +AR = $(AVR_TOOLS_PATH)/avr-ar +SIZE = $(AVR_TOOLS_PATH)/avr-size +NM = $(AVR_TOOLS_PATH)/avr-nm +AVRDUDE = $(AVR_TOOLS_PATH)/avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) +OBJ_MODULES = $(C_MODULES:.c=.o) $(CXX_MODULES:.cpp=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = $(CFLAGS) -mmcu=$(MCU) +ALL_CXXFLAGS = $(CXXFLAGS) -mmcu=$(MCU) +ALL_ASFLAGS = -x assembler-with-cpp $(ASFLAGS) -mmcu=$(MCU) +ALL_LDFLAGS = $(LDFLAGS) -mmcu=$(MCU) + +# Default target. +# This is th etarget that gets executed with a make command +# that has no parameters, ie "make". +all: applet_files build sym lss size upload + +build: elf hex + +output/$(PROJECT_NAME).cpp: $(PROJECT_NAME).pde + test -d output || mkdir output + echo "#include " > $@ + echo "#line 1 \"$<\"" >> $@ + cat $< >> $@ + +elf: output/$(PROJECT_NAME).elf +hex: output/$(PROJECT_NAME).hex +eep: output/$(PROJECT_NAME).eep +lss: output/$(PROJECT_NAME).lss +#sym: output/$(PROJECT_NAME).sym + +# Upload HEX file to Arduino +upload: upload1 upload2 + +upload1: output/$(PROJECT_NAME).hex + $(AVRDUDE) $(AVRDUDE_FLAGS) -P $(PORT) $(AVRDUDE_WRITE_FLASH) + +upload2: output/$(PROJECT_NAME).hex + $(AVRDUDE) $(AVRDUDE_FLAGS) -P $(PORT2) $(AVRDUDE_WRITE_FLASH) + +upload3: output/$(PROJECT_NAME).hex + $(AVRDUDE) $(AVRDUDE_FLAGS) -P $(PORT3) $(AVRDUDE_WRITE_FLASH) + +sym: + $(NM) -n -C --format=posix output/$(PROJECT_NAME).elf > output/$(PROJECT_NAME).sym + +# Display size of file. +size: + $(SIZE) output/$(PROJECT_NAME).elf + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + +coff: output/$(PROJECT_NAME).elf + $(COFFCONVERT) -O coff-avr output/$(PROJECT_NAME).elf $(PROJECT_NAME).cof + + extcoff: $(PROJECT_NAME).elf + $(COFFCONVERT) -O coff-ext-avr output/$(PROJECT_NAME).elf $(PROJECT_NAME).cof + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + $(OBJCOPY) -O $(FORMAT) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --no-change-warnings \ + --change-section-lma .eeprom=0 $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Link: create ELF output file from library. +#output/$(PROJECT_NAME).elf: $(PROJECT_NAME).c output/core.a +output/$(PROJECT_NAME).elf: output/$(PROJECT_NAME).o output/core.a + $(LD) $(ALL_LDFLAGS) -o $@ output/$(PROJECT_NAME).o output/core.a + +output/core.a: $(OBJ_MODULES) + @for i in $(OBJ_MODULES); do echo $(AR) rcs output/core.a $$i; $(AR) rcs output/core.a $$i; done + +# Compile: create object files from C++ source files. +.cpp.o: + $(CXX) -c $(ALL_CXXFLAGS) $< -o $@ + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + +# Automatic dependencies +%.d: %.c + $(CC) -M $(ALL_CFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@ + +%.d: %.cpp + $(CXX) -M $(ALL_CXXFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@ + +# Target: clean project. +clean: + $(REMOVE) output/$(PROJECT_NAME).hex output/$(PROJECT_NAME).eep output/$(PROJECT_NAME).cof output/$(PROJECT_NAME).elf \ + output/$(PROJECT_NAME).map output/$(PROJECT_NAME).sym output/$(PROJECT_NAME).lss output/core.a \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) + +#.PHONY: all build elf hex eep lss sym program coff extcoff clean applet_files sizebefore sizeafter +.PHONY: all build elf hex eep lss sym program coff extcoff applet_files sizebefore sizeafter + +#include $(SRC:.c=.d) +#include $(CXXSRC:.cpp=.d) diff --git a/examples/scanner/output/core.a b/examples/scanner/output/core.a new file mode 100644 index 0000000000000000000000000000000000000000..6ae105d90023b9ce818bcb755ee9245f24c98185 GIT binary patch literal 187630 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 NkD<2iO@I%8{}ZTDOPT-x literal 0 HcmV?d00001 diff --git a/examples/scanner/output/scanner.cpp b/examples/scanner/output/scanner.cpp new file mode 100644 index 0000000..5eb1627 --- /dev/null +++ b/examples/scanner/output/scanner.cpp @@ -0,0 +1,128 @@ +#include +#line 1 "scanner.pde" + +/* + Copyright (C) 2011 James Coliz, Jr. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + */ + +/** + * Channel scanner + * + * Example to detect interference on the various channels available. + * This is a good diagnostic tool to check whether you're picking a + * good channel for your application. + * + * Inspired by cpixip. + * See http://arduino.cc/forum/index.php/topic,54795.0.html + */ + +#include +#include "nRF24L01.h" +#include "RF24.h" +#include "printf.h" + +// +// Hardware configuration +// + +// Set up nRF24L01 radio on SPI bus plus pins 8 & 9 + +RF24 radio(8,9); + +// +// Channel info +// + +const short num_channels = 128; +short values[num_channels]; + +// +// Setup +// + +void setup(void) +{ + // + // Print preamble + // + + Serial.begin(57600); + printf_begin(); + printf("\n\rRF24/examples/scanner/\n\r"); + + // + // Setup and configure rf radio + // + + radio.begin(); + radio.setAutoAck(false); + + // Get into standby mode + radio.startListening(); + radio.stopListening(); + + // Print out header, high then low digit + int i = 0; + while ( i < num_channels ) + { + printf("%x",i>>4); + ++i; + } + printf("\n\r"); + i = 0; + while ( i < num_channels ) + { + printf("%x",i&0xf); + ++i; + } + printf("\n\r"); +} + +// +// Loop +// + +const short num_reps = 100; + +void loop(void) +{ + // Clear measurement values + memset(values,0,num_channels); + + // Scan all channels num_reps times + int rep_counter = num_reps; + while (rep_counter--) + { + int i = num_channels; + while (i--) + { + // Select this channel + radio.setChannel(i); + + // Listen for a little + radio.startListening(); + delayMicroseconds(128); + radio.stopListening(); + + // Did we get a carrier? + if ( radio.testCarrier() ) + ++values[i]; + } + } + + // Print out channel measurements, clamped to a single hex digit + int i = 0; + while ( i < num_channels ) + { + printf("%x",min(0xf,values[i]&0xf)); + ++i; + } + printf("\n\r"); +} + + +// vim:ai:cin:sts=2 sw=2 ft=cpp diff --git a/examples/scanner/output/scanner.elf b/examples/scanner/output/scanner.elf new file mode 100755 index 0000000000000000000000000000000000000000..5e0f4b153bcd3684fc9008dac0bf38d4a5fbfd97 GIT binary patch literal 100436 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 ZC5_yqj3YXVcR0Mu?yd|2_9q0v{|C_~feiov literal 0 HcmV?d00001 diff --git a/examples/scanner/output/scanner.hex b/examples/scanner/output/scanner.hex new file mode 100644 index 0000000..00a3175 --- /dev/null +++ b/examples/scanner/output/scanner.hex @@ -0,0 +1,325 @@ +:100000000C9463000C948B000C948B000C948B006C +:100010000C948B000C948B000C948B000C948B0034 +:100020000C948B000C948B000C948B000C948B0024 +:100030000C948B000C948B000C948B000C948B0014 +:100040000C948F050C948B000C9423060C948B005D +:100050000C948B000C948B000C948B000C948B00F4 +:100060000C948B000C948B000000000024002700EF +:100070002A0000000000250028002B0000000000DE +:1000800023002600290004040404040404040202DA +:100090000202020203030303030301020408102007 +:1000A0004080010204081020010204081020000012 +:1000B0000007000201000003040600000000000029 +:1000C000000090043B0711241FBECFEFD8E0DEBF35 +:1000D000CDBF11E0A0E0B1E0E6EFF3E102C0059092 +:1000E0000D92AA33B107D9F712E0AAE3B1E001C03B +:1000F0001D92A13FB107E1F710E0C6ECD0E004C0CB +:100100002297FE010E94F509C23CD107C9F70E945F +:100110001C060C94F9090C9400000F931F93CF93C5 +:10012000DF938C01EB01009731F46115710519F42F +:1001300020E030E038C081E090E06EE070E00E94A6 +:10014000CB02FC019C01009771F180E8838320972A +:1001500071F0D387C28781E883838091E702909111 +:10016000E802892B21F4F093E802E093E7020115FD +:100170001105C9F011870087838182608383809194 +:10018000E9029091EA02892B71F4F093EA02E0937C +:10019000E9028091EB029091EC02892B21F4F0931B +:1001A000EC02E093EB02C901DF91CF911F910F9117 +:1001B0000895A0E0B0E0EFEDF0E00C94CC09FE0172 +:1001C0003596619171918091E9029091EA02AF01B7 +:1001D0000E94EE002096E2E00C94E809ABE0B0E06B +:1001E000E4EFF0E00C94BC093C012B015A01FC0146 +:1001F00017821682838181FD03C06FEF7FEFC6C136 +:100200009AE0892E1E010894211C311CF3012381E0 +:10021000F20123FD859123FF81912F01882309F4A9 +:10022000B2C1853239F423FD859123FF81912F01DD +:10023000853229F490E0B3010E940604E7CF982F9D +:10024000FF24EE249924FFE1FF15D0F09B3269F0E2 +:100250009C3228F4903259F0933291F40EC09D32C2 +:1002600049F0903369F441E024C052E0F52A84E07B +:10027000F82A28C098E0F92A25C0E0E1FE2A22C029 +:10028000F7FC29C0892F80538A3070F4F6FE05C030 +:10029000989C902C1124980E15C0E89CE02C1124F9 +:1002A000E80EF0E2FF2A0EC09E3229F4F6FC6BC184 +:1002B00040E4F42A07C09C3619F450E8F52A02C03D +:1002C000983649F4F20123FD959123FF91912F0176 +:1002D000992309F0B8CF892F8554833018F08052C4 +:1002E000833038F444E050E0A40EB51E5FE3598338 +:1002F0000FC0933631F0933779F0933509F056C03B +:1003000020C0F5018081898342E050E0A40EB51E33 +:10031000610101E010E012C0F501C080D180F6FC5F +:1003200003C06FEF7FEF02C0692D70E042E050E044 +:10033000A40EB51EC6010E94FB038C015FE7F522E7 +:1003400014C0F501C080D180F6FC03C06FEF7FEFD1 +:1003500002C0692D70E042E050E0A40EB51EC60157 +:100360000E94E9038C0150E8F52AF3FE07C01AC089 +:1003700080E290E0B3010E940604EA948E2D90E0A2 +:1003800008171907A8F30EC0F601F7FC8591F7FED0 +:1003900081916F0190E0B3010E940604E110EA949C +:1003A000015010400115110579F7EAC0943611F09B +:1003B000993669F5F7FE08C0F50120813181428147 +:1003C000538184E090E00AC0F501808191819C0115 +:1003D000442737FD4095542F82E090E0A80EB91EC7 +:1003E0009FE6F92257FF09C0509540953095219519 +:1003F0003F4F4F4F5F4FE0E8FE2ACA01B901A1010C +:100400002AE030E00E943204D82ED21840C095373E +:1004100029F41F2D1F7E2AE030E01DC01F2D197FFB +:100420009F3661F0903720F4983509F0ACC00FC0CA +:10043000903739F0983709F0A6C004C028E030E0C2 +:100440000AC0106114FD146020E130E004C014FD06 +:10045000166020E132E017FF08C0F501608171816C +:100460008281938144E050E008C0F5018081918150 +:10047000BC0180E090E042E050E0A40EB51EA10176 +:100480000E943204D82ED2188FE7F82EF122F6FE01 +:100490000BC05EEFF522D91438F4F4FE07C0F2FC6D +:1004A00005C08FEEF82202C01D2D01C0192DF4FEEB +:1004B0000DC0FE01ED0DF11D8081803319F499EE20 +:1004C000F92208C01F5FF2FE05C003C08F2D867899 +:1004D00009F01F5F0F2DF3FC14C0F0FE0FC01E15B6 +:1004E00010F09D2C0BC09D2C9E0C911A1E2D06C049 +:1004F00080E290E0B3010E9406041F5F1E15C0F366 +:1005000004C01E1510F4E11A01C0EE2404FF0FC050 +:1005100080E390E0B3010E94060402FF1DC001FDCC +:1005200003C088E790E00EC088E590E00BC0802F04 +:10053000867891F001FF02C08BE201C080E2F7FCF7 +:100540008DE290E0B3010E94060406C080E390E0D3 +:10055000B3010E9406049A94D914C0F3DA94F1010D +:10056000ED0DF11D808190E0B3010E940604DD20B5 +:10057000A9F706C080E290E0B3010E940604EA9465 +:10058000EE20C1F743CEF30166817781CB012B9634 +:10059000E2E10C94D8090F931F93CF93DF93689FE8 +:1005A0008001699F100D789F100D1124C8010E94D1 +:1005B000E702EC01009729F060E070E0A8010E94DA +:1005C000F403CE01DF91CF911F910F910895CF9346 +:1005D000DF93BC018230910510F462E070E0A091DD +:1005E000EF02B091F002ED01E0E0F0E040E050E019 +:1005F00021C0888199818617970769F48A819B8138 +:10060000309719F09383828304C09093F002809313 +:10061000EF02FE0134C06817790738F4411551051F +:1006200019F08417950708F4AC01FE018A819B81BB +:100630009C01E9012097E9F641155105A9F1CA018C +:10064000861B970B049708F4BA01E0E0F0E02AC09B +:100650008D919C91119784179507F9F4641775078C +:1006600081F412968D919C911397309719F0938392 +:10067000828304C09093F0028093EF02FD013296D2 +:100680004CC0CA01861B970BFD01E80FF91F61934F +:10069000719302978D939C9340C0FD018281938159 +:1006A0009C01D9011097A1F68091ED029091EE0284 +:1006B000892B41F480912301909124019093EE02C3 +:1006C0008093ED024091250150912601411551057D +:1006D00041F44DB75EB78091210190912201481BF2 +:1006E000590B2091ED023091EE02CA01821B930B4F +:1006F0008617970780F0AB014E5F5F4F8417950711 +:1007000050F0420F531F5093EE024093ED02F90157 +:100710006193719302C0E0E0F0E0CF01DF91CF91EF +:100720000895CF93DF93009709F450C0EC0122970E +:100730001B821A82A091EF02B091F002109709F18A +:1007400040E050E0AC17BD0708F1BB83AA83FE016F +:1007500021913191E20FF31FAE17BF0779F48D910C +:100760009C911197280F391F2E5F3F4F39832883A3 +:1007700012968D919C9113979B838A834115510505 +:1007800071F4D093F002C093EF0220C012968D91C5 +:100790009C911397AD01009711F0DC01D3CFFA01C2 +:1007A000D383C28321913191E20FF31FCE17DF076C +:1007B00069F488819981280F391F2E5F3F4FFA0114 +:1007C000318320838A819B8193838283DF91CF91C0 +:1007D0000895FC010590615070400110D8F7809594 +:1007E00090958E0F9F1F0895DC0101C06D934150BD +:1007F0005040E0F70895FC016150704001900110F5 +:10080000D8F7809590958E0F9F1F08950F931F9393 +:10081000CF93DF938C01EB018B8181FF1BC082FFA3 +:100820000DC02E813F818C819D812817390764F48A +:10083000E881F9810193F983E88306C0E885F985A9 +:10084000802F0995892B31F48E819F8101969F839A +:100850008E8302C00FEF1FEFC801DF91CF911F9170 +:100860000F910895FA01AA27283051F1203181F122 +:10087000E8946F936E7F6E5F7F4F8F4F9F4FAF4FA8 +:10088000B1E03ED0B4E03CD0670F781F891F9A1FBB +:10089000A11D680F791F8A1F911DA11D6A0F711D6F +:1008A000811D911DA11D20D009F468943F912AE07B +:1008B000269F11243019305D3193DEF6CF01089563 +:1008C000462F4770405D4193B3E00FD0C9F7F6CF94 +:1008D000462F4F70405D4A3318F0495D31FD40525C +:1008E000419302D0A9F7EACFB4E0A69597958795F2 +:1008F00077956795BA95C9F70097610571050895D1 +:100900009B01AC010A2E069457954795379527957C +:10091000BA95C9F7620F731F841F951FA01D089514 +:100920008AE391E068E049E00E9475070895FF922C +:100930000F931F93CF93DF9380E8E7E4F1E0DF01AB +:100940001D928A95E9F704E610E021C08AE391E060 +:100950006F2D0E94F2078AE391E00E94840880E8EC +:1009600090E00E94D7058AE391E00E947C078AE329 +:1009700091E00E944608882329F088819981019698 +:10098000998388832297FA94BFEFFB16F9F60150FA +:100990001040EFEF0F3F1E0729F0C5E4D2E08FE7CC +:1009A000F82ED4CFC7E4D1E000E011E000D000D0B1 +:1009B000ADB7BEB712961C930E931197899199917A +:1009C0008F70907014969C938E9313970E94D90009 +:1009D0000F900F900F900F90B2E0C734DB0731F704 +:1009E00000D083E091E0EDB7FEB7928381830E944F +:1009F000D9000F900F90DF91CF911F910F91FF9031 +:100A0000089580E895E060E070E00E948D00089510 +:100A10000F931F93CF93DF9384ED92E040E051EE6C +:100A200060E070E00E9454060E94010500D086E05C +:100A300091E0EDB7FEB7928381830E94D9000F90B9 +:100A40000F908AE391E00E944B088AE391E060E016 +:100A50000E94E8078AE391E00E9484088AE391E01B +:100A60000E947C07C0E0D0E000E011E000D000D0A0 +:100A7000EDB7FEB712830183CE0124E095958795EB +:100A80002A95E1F7948383830E94D90021960F90E1 +:100A90000F900F900F90C038D10541F700D083E040 +:100AA00091E0EDB7FEB7928381830E94D900C0E048 +:100AB000D0E00F900F9000D000D0EDB7FEB70183CB +:100AC0001283CE018F709070948383830E94D9002B +:100AD00021960F900F900F900F90C038D10559F7C5 +:100AE00000D083E091E0EDB7FEB7928381830E944E +:100AF000D9000F900F90DF91CF911F910F91089522 +:100B00000F931F93082F84ED92E0602F0E94280717 +:100B1000112707FD1095C8011F910F9108951F928D +:100B20000F920FB60F9211242F933F938F939F93A1 +:100B3000AF93BF9380914B0290914C02A0914D02D4 +:100B4000B0914E0230914F020196A11DB11D232F8D +:100B50002D5F2D3720F02D570196A11DB11D20933B +:100B60004F0280934B0290934C02A0934D02B0939E +:100B70004E028091470290914802A0914902B091A3 +:100B80004A020196A11DB11D80934702909348022D +:100B9000A0934902B0934A02BF91AF919F918F9168 +:100BA0003F912F910F900FBE0F901F9018950197B6 +:100BB00039F0880F991F880F991F02970197F1F755 +:100BC0000895789484B5826084BD84B5816084BDC5 +:100BD00085B5826085BD85B5816085BDEEE6F0E0B6 +:100BE000808181608083E1E8F0E010828081826012 +:100BF0008083808181608083E0E8F0E08081816093 +:100C00008083E1EBF0E0808184608083E0EBF0E0C2 +:100C1000808181608083EAE7F0E080818460808366 +:100C20008081826080838081816080838081806810 +:100C300080831092C10008950E94E1050E9408057A +:100C40000E949704FDCF1F920F920FB60F921124AE +:100C50002F933F934F938F939F93EF93FF934091E5 +:100C6000C600E091D002F091D10231969F012F771A +:100C7000307031978091D2029091D30228173907B2 +:100C800039F0E05BFD4F40833093D1022093D002D6 +:100C9000FF91EF919F918F914F913F912F910F90E5 +:100CA0000FBE0F901F901895AF92BF92DF92EF92F8 +:100CB000FF920F931F93CF93DF93EC017A018B0187 +:100CC000DD24403081EE580780E0680780E0780737 +:100CD00011F0DD24D39491E0A92EB12CE885F9859B +:100CE000DD2069F0C5010A8802C0880F991F0A94A7 +:100CF000E2F7808360E079E08DE390E005C0108248 +:100D000060E874E88EE190E0A80197010E949A09DA +:100D10002150304040405040569547953795279593 +:100D200080E12030380720F0DD2011F0DD24D6CF1F +:100D3000EC81FD813083EE81FF812083EA85FB8594 +:100D4000208141E050E0CA010E8402C0880F991F43 +:100D50000A94E2F7282B2083EA85FB852081CA01CB +:100D60000F8402C0880F991F0A94E2F7282B208372 +:100D7000EA85FB858081088802C0440F551F0A94CC +:100D8000E2F7842B8083DF91CF911F910F91FF9029 +:100D9000EF90DF90BF90AF900895DC011296ED9137 +:100DA000FC911397E058FF4F2191319180819181FF +:100DB000281B390B2F773070C9010895DC0112967A +:100DC000ED91FC911397EE57FF4F20813181929165 +:100DD0008291E058F0408217930719F42FEF3FEF0C +:100DE00005C0E20FF31F8081282F30E0C90108956C +:100DF000DC011296ED91FC911397DF01AE57BF4FC6 +:100E00002D913C911197E058FF4F80819181E058DE +:100E1000F0408217930719F42FEF3FEF0BC0E20F5A +:100E2000F31F80812F5F3F4F2F7730702D933C93BE +:100E3000282F30E0C9010895DC011296ED91FC9154 +:100E40001397EE57FF4F808191819293829308957B +:100E5000FC01A085B18521898C9190E0022E02C011 +:100E6000959587950A94E2F780FFF6CF0484F5857F +:100E7000E02D608308958BE291E09093D5028093FA +:100E8000D40280E592E09093D7028093D60285EC5D +:100E900090E09093D9028093D80284EC90E09093F4 +:100EA000DB028093DA0280EC90E09093DD02809385 +:100EB000DC0281EC90E09093DF028093DE0286EC0E +:100EC00090E09093E1028093E00284E08093E2025C +:100ED00083E08093E30287E08093E40285E08093DF +:100EE000E50281E08093E6020895FC01608341837E +:100EF00080E2828313820895FC01808160E00E9479 +:100F0000CD080895FF920F931F938C01F62E80E079 +:100F10000E94650985E00E946A09F80181816F2DB0 +:100F20000E94CD081F910F91FF9008951F93CF93BA +:100F3000DF93EC0160E070E00E94820781EE8EBDDD +:100F40000DB407FEFDCF1EB5CE0161E070E00E943A +:100F50008207812FDF91CF911F9108951F93CF9327 +:100F6000DF93EC0160E070E00E94820782EE8EBDAC +:100F70000DB407FEFDCF1EB5CE0161E070E00E940A +:100F80008207812FDF91CF911F9108950F931F93B7 +:100F9000CF93DF93EC01162F042F60E070E00E94E6 +:100FA00082071F7110621EBD0DB407FEFDCF1EB576 +:100FB0000EBD0DB407FEFDCF8EB5CE0161E070E031 +:100FC0000E948207812FDF91CF911F910F91089589 +:100FD000662319F061E04FE302C061E040E00E9447 +:100FE000C6070895462F603808F04FE765E00E9475 +:100FF000C6070895EF92FF920F931F93CF93DF934D +:101000007C01162FEA01022F60E070E00E94820747 +:101010001F7110621EBD0DB407FEFDCF1EB508C0C6 +:1010200088818EBD0DB407FEFDCF21968EB501508F +:101030000023B1F7C70161E070E00E948207812FB1 +:10104000DF91CF911F910F91FF90EF9008951F9323 +:10105000CF93DF93EC01162F60E070E00E948207CF +:101060001F711EBD0DB407FEFDCF8EB58FEF8EBD77 +:101070000DB407FEFDCF1EB5CE0161E070E00E9409 +:101080008207812FDF91CF911F91089569E00E941F +:101090002708817008950F931F938C01FC018081B4 +:1010A00061E00E94A708F801818161E00E94A70821 +:1010B000F801808160E00E94CD08C80161E070E025 +:1010C0000E9482070E947B0981E00E945C0980E007 +:1010D0000E94650985E00E946A09C80164E04FEF3B +:1010E0000E94C607C80167E040E70E94C607C80122 +:1010F0000E94AE07C8010E949607C80161E00E94E5 +:10110000F2071F910F9108950F931F938C0160E0D8 +:101110004BE00E94C607C80167E040E70E94C6078F +:10112000A8014B5F5F4FC8016AE025E00E94FA0703 +:10113000C8010E94AE07F801808161E00E94CD08DD +:1011400082E890E00E94D7051F910F910895482FE3 +:1011500050E0CA0186569F4FFC0124914A575F4FC9 +:10116000FA0184918823C1F0E82FF0E0EE0FFF1F11 +:10117000E859FF4FA591B491662341F49FB7F894C5 +:101180008C91209582238C939FBF08959FB7F894EC +:101190008C91822B8C939FBF0895482F50E0CA01F9 +:1011A00082559F4FFC012491CA0186569F4FFC0136 +:1011B00034914A575F4FFA019491992309F444C03E +:1011C000222351F1233071F0243028F42130A1F092 +:1011D000223011F514C02630B1F02730C1F0243090 +:1011E000D9F404C0809180008F7703C08091800083 +:1011F0008F7D8093800010C084B58F7702C084B546 +:101200008F7D84BD09C08091B0008F7703C080912D +:10121000B0008F7D8093B000E92FF0E0EE0FFF1F4C +:10122000EE58FF4FA591B491662341F49FB7F8940F +:101230008C91309583238C939FBF08959FB7F8942A +:101240008C91832B8C939FBF08950F931F93CF9303 +:10125000DF938C01EB0109C02196D801ED91FC913F +:101260000190F081E02DC801099568816623A1F7FE +:10127000DF91CF911F910F910895EF92FF920F93FD +:101280001F93CF93DF938C017B01EA010CC0D70140 +:101290006D917D01D801ED91FC910190F081E02DDF +:1012A000C80109952197209791F7DF91CF911F9160 +:1012B0000F91FF90EF900895882319F48CB5806208 +:1012C00002C08CB58F7D8CBD08959CB5937F982B03 +:1012D0009CBD08952CB5382F33702C7F322B3CBD2C +:1012E0002DB590E0959587959595879581702E7F82 +:1012F000822B8DBD08958DE061E00E94A7088BE0F0 +:1013000061E00E94A7088AE061E00E94A7088DE0E2 +:1013100060E00E94CD088BE060E00E94CD088AE08A +:1013200061E00E94CD088CB580618CBD8CB5806475 +:101330008CBD0895A1E21A2EAA1BBB1BFD010DC096 +:10134000AA1FBB1FEE1FFF1FA217B307E407F50775 +:1013500020F0A21BB30BE40BF50B661F771F881F51 +:10136000991F1A9469F760957095809590959B01E7 +:10137000AC01BD01CF0108952F923F924F925F9231 +:101380006F927F928F929F92AF92BF92CF92DF9295 +:10139000EF92FF920F931F93CF93DF93CDB7DEB7FA +:1013A000CA1BDB0B0FB6F894DEBF0FBECDBF09948E +:1013B0002A88398848885F846E847D848C849B84E5 +:1013C000AA84B984C884DF80EE80FD800C811B81F3 +:1013D000AA81B981CE0FD11D0FB6F894DEBF0FBE22 +:1013E000CDBFED010895EE0FFF1F0590F491E02DA4 +:0613F0000994F894FFCF00 +:1013F6002578000A0D000A0D524632342F657861B1 +:101406006D706C65732F7363616E6E65722F0A0D56 +:10141600002000F102000000000000280725093D19 +:0A14260009CD06F806DE061C0700DB +:00000001FF diff --git a/examples/scanner/printf.h b/examples/scanner/printf.h new file mode 100644 index 0000000..63501e4 --- /dev/null +++ b/examples/scanner/printf.h @@ -0,0 +1,33 @@ +/* + Copyright (C) 2011 James Coliz, Jr. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + */ + +/** + * @file printf.h + * + * Setup necessary to direct stdout to the Arduino Serial library, which + * enables 'printf' + */ + +#ifndef __PRINTF_H__ +#define __PRINTF_H__ + +#include "WProgram.h" + +int serial_putc( char c, FILE *t ) +{ + Serial.write( c ); + + return c; +} + +void printf_begin(void) +{ + fdevopen( &serial_putc, 0 ); +} + +#endif // __PRINTF_H__ diff --git a/examples/scanner/scanner.pde b/examples/scanner/scanner.pde new file mode 100644 index 0000000..efefa17 --- /dev/null +++ b/examples/scanner/scanner.pde @@ -0,0 +1,125 @@ + +/* + Copyright (C) 2011 James Coliz, Jr. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + */ + +/** + * Channel scanner + * + * Example to detect interference on the various channels available. + * This is a good diagnostic tool to check whether you're picking a + * good channel for your application. + * + * Inspired by cpixip. + * See http://arduino.cc/forum/index.php/topic,54795.0.html + */ + +#include +#include "nRF24L01.h" +#include "RF24.h" +#include "printf.h" + +// +// Hardware configuration +// + +// Set up nRF24L01 radio on SPI bus plus pins 8 & 9 + +RF24 radio(8,9); + +// +// Channel info +// + +const short num_channels = 128; +short values[num_channels]; + +// +// Setup +// + +void setup(void) +{ + // + // Print preamble + // + + Serial.begin(57600); + printf_begin(); + printf("\n\rRF24/examples/scanner/\n\r"); + + // + // Setup and configure rf radio + // + + radio.begin(); + radio.setAutoAck(false); + + // Get into standby mode + radio.startListening(); + radio.stopListening(); + + // Print out header, high then low digit + int i = 0; + while ( i < num_channels ) + { + printf("%x",i>>4); + ++i; + } + printf("\n\r"); + i = 0; + while ( i < num_channels ) + { + printf("%x",i&0xf); + ++i; + } + printf("\n\r"); +} + +// +// Loop +// + +const short num_reps = 100; + +void loop(void) +{ + // Clear measurement values + memset(values,0,num_channels); + + // Scan all channels num_reps times + int rep_counter = num_reps; + while (rep_counter--) + { + int i = num_channels; + while (i--) + { + // Select this channel + radio.setChannel(i); + + // Listen for a little + radio.startListening(); + delayMicroseconds(128); + radio.stopListening(); + + // Did we get a carrier? + if ( radio.testCarrier() ) + ++values[i]; + } + } + + // Print out channel measurements, clamped to a single hex digit + int i = 0; + while ( i < num_channels ) + { + printf("%x",min(0xf,values[i]&0xf)); + ++i; + } + printf("\n\r"); +} + +// vim:ai:cin:sts=2 sw=2 ft=cpp