Edit by Felix: For completeness sake,
this excellent guide to RFM69 power options should also be considered.
See also:
https://lowpowerlab.com/forum/low-power-techniques/using-an-rfm69hw-in-low-power-mode-as-rfm69w/msg16410/#msg16410https://lowpowerlab.com/forum/moteino/standardize-on-rfm69hw-radio/msg6466/#msg6466Mixing RFM69W and RFM69HW transceivers in a single network makes the mote hardware / software configuration cumbersome.
So for a few extra cents the idea is to standardise the usage of RFM69HW hardware for all motes. However some motes may have less power than the one required by RFM69HW transceivers, typically because they are running on battery in a low power mode, it is therefore important to understand how to set RFM69HW to be power equivalent to RFM69W.
Notes:1. The following considerations are true for a static configuration (no ATC)
2. RFM69CW is equivalent to RFM69W but with another pin-out that fits to the footprint of a RFM12B (compatible with Moteino R4/5)
3. RFM12B is depreciated and is not considered
4. RFM69HCW is equivalent to RFM69HW but with another pin-out than the RFM69CW or RFM12B, so it can’t be used on a Moteino R4/5 (see MoteinoLR).4. RFM69HCW is equivalent to RFM69HW but with another pin-out than the RFM69CW or RFM12B, so it can’t be used on a Moteino R4 (see MoteinoR5/6).
The difference between the RFM69W and RFM69HW resides in the transmission power by usage of a power amplifier and a power boost mode (see Table 10 of the RFM69HW data sheets):
The difference between the RFM69W (RFM69CW) and RFM69HW (RFM69HCW) resides in the transmission power by usage of a power amplifier and a power boost mode (see Table 10 of the RFM69HW(RFMHCW) data sheets):
For RFM69HW (RFM69HCW) power; only one mode is foreseen: from -18dBm to +13dBm (or max 45mA) or mode 0
For RFM69HW (RFM69HCW) power four modes are foreseen from -18dBm to +13dBm (or max 45mA) - RFM69HW(HCW) mode 0
from -2dBm to +13dBm (or max 45mA) - RFM69HW(HCW) Boost mode 1
from +2dBm to +17dBm (or max 95mA) - RFM69HW(HCW) Boost mode 2
from +5dBm to +20dBm (or max 130mA - RFM69HW(HCW) Boost mode 3
Notes:1. There is no software way to detect if the transceiver is a RFM69W(CW) or RFM69HW(HCW).
Only visual inspections shows 2 extra chips
2. The voltage required for a RFM69HW(HCW) is:
2.4V for 17dBm (mode 2) and 3.6V for 20dBm (mode 3)
Actually 4 registers are driving the transmitter power configuration.Transmit amplifiers - RegPaLevel address 0x11
Overload protection - RegOcp address 0x13
Power Amplifier Boost PA1 - RegTestPa1 address 0x5A (only for RFM69HW(HCW))
Power Amplifier Boost PA2 - RegTestPa2 address 0x5C (only for RFM69HW(HCW))
The power amplifier activation is function of the PA0,PA1 and PA2 bits of the RegPaLevel, respectively bits 7,6 and 5.
The power level itself is function of the 5 lower bits of the RegPaLevel (bits 0 to 4).
RFM69W uses only PA0, while RFM69HW uses PA0, PA1 and PA2.
See Table 10 of the RFM69HW data sheet for bit settings.
However with the implementation of the RF69 chip on the RFM69HW(HCW) hardware, activation PA0 is not possible, making the straight forward configuration of an RFM69HW(HCW) as an RFM69W(CW) impossible.
Also the RFM69Library simplifies the RFM69 configuration to only two modes, normal (0) or high-power (3).
The normal or default mode configures the RF69 registers as for an RFM69W(CW), while the high-power mode configures the transceiver as an RFM69HW(HCW) in Boost mode 3 ONLY.
It is important to note that there are 2 ways to configure an RFM69HW(HCW):1. Using the instance declaration: RFM69(uint8_t slaveSelectPin=RF69_SPI_CS, uint8_t interruptPin=RF69_IRQ_PIN, bool isRFM69HW=false, uint8_t interruptNum=RF69_IRQ_NUM)
With:
RF69_SPI_CS = SPI Slave Select pin
RF69_IRQ_PIN = Interrupt pin
isRFM69HW = true for a RFM69HW transceiver
RF69_IRQ_NUM = interrupt number corresponding to the interrupt pin
2. Using the function RFM69::setHighPower(true)Both are mutually exclusive so setting “isRFM69HW true †in the declaration and setHighPower(false) will set the transceiver as a RFM69W transceiver! which of course will not work with a RFM69HW.
Through the library the register configuration are the following: Address RFM69W(CW) RFM69HW(HCW)
RegPaLevel 0x11 0x9F 0x7F (mode 3 +20dBm)
RegOcp 0x13 0x1A 0x0F (no overload protection)
RegTestPa1 0x5A 0x55 0x55 (Receive) 0x5D (Transmit)
RegTestPa2 0x5C 0x70 0x70 (Receive) 0x7C (Transmit)
One way to adapt the power of the RFM69HW(HCW) to be compatible with the RFM69W(CW) is to adjust the power level RFM69::setPowerLevel(uint8_t powerLevel) to be in the range of the power of the RFM69W(CW).
The actual power used is determined by the values of RegPaLevel bits 0-4.
For RFM69W the 4 bits are used, giving 32 possibilities, while for the RFM69HW, only 3 bits are uses giving only 16 possibilities.For RFM69W the 5 bits are used, giving 32 possibilities, while for the RFM69HW, only 4 bits are uses giving only 16 possibilities.
So with the present library, the compatible range between an RFM69W(CW) and RFM69HW(HCW) is between +5 and +13dBm or 9 possibilities
Also the power level defined for a RFM69HW(HCW) module is DIVIDED BY 2 through the library function, so the actual values for an RFM69HW(HCW) module are from 0 to 15 but programmed by steps of 2 values (e.g, 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30).
Obviously setting the value to 0 and 1 gives 0, 2 and 3 gives 1, etc…
Only the first 9 values are compatibles with the RFM69W(CW), actual values 0 to 8. Practically to take account of the division by 2, from 0 to 16 (+5dBm to +13dBm) by steps of 2 (0,2,4,6,8,10,12,14,16)
For default value, a RFM69HW(HCW) power value of 16 correspond to a +13dBm, the maximum power o a RFM69W(CW)
IMPORTANT to note the set power level should be done AFTER the High-power setting.
However even with this configuration, the RegTesPa1 and RegTestPa2 are still modified in transmit through library functions, and the over current protection is disabled (as recommend by HopeRf for power > 17dBm). This as an unknown effect to the actual power consumption (I do not have the equipment to actually measure the power consumption with this setting and for power > 17dBm). Therefore the configuration above should not be recommended.
There are two solutions:1. Modify the library to offer a compatible mode; this solution is probably too cumbersome
2. Script some extra steps to configure the appropriate registers.
Here are the proposed settings:The most appropriate power mode that is compatible with the RFM69W is the mode 1.
To achieve this configuration, the following register should be set as:
RFM69HW(HCW)
RegPaLevel 0x11 0x5F (+13dBm)
RegOcp 0x13 0x1A (95mA overload protection)
RegTestPa1 0x5A 0x55 (no 20dBm PA_BOOST on PA1)
RegTestPa2 0x5C 0x70 (no 20bBm PA_BOOST on PA2)
Note that the power may be adjusted by the set RFM69::setPowerLevel(uint8_t powerLevel), no division by 2 is done (because the transceiver is not declared as RFM69HW(HCW)) leaving the possible values from 0 to 16 (-2 to +13dBm). The following example gives a practical configuration:
RFM DEFINITIONS
#define RFM69HW