Skip to content
/ avrrfm Public

Experimental project around RFM radio modules using an AVR MCU

License

Notifications You must be signed in to change notification settings

gitdode/avrrfm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

avrrfm

make

About

Experimental project around RFM radio modules using an ATmega328P MCU and librfm69 (FSK)/librfm95 (FSK + LoRa).

To do something really extraordinary, the temperature reading of an MCP9808 sensor is periodically transmitted to the receiver.
To save battery power, the controller, radio module and temperature sensor are put to power down/sleep mode in between transmissions. The idle current is ~75µA, which is still quite a lot, but already better than 8mA 🙂
MCU, radio and temp sensor take about 5µA, so the TC1262 3.3V regulator seems to account for ~70µA.
There is basic SD card support that might be useful for something like a data logger.

IMG_20250413_184140

The receiver currently converts the raw temperature reading to °C and displays it with the RSSI value, CRC result and transmitter output power on a nice IPS TFT display. It responds to the transmitter as kind of ack with the RSSI, which is used for some very basic power management in the transmitter, significantly reducing the supply current by reducing the output power i.e. on short distance. The transmitter waits for this response with a timeout so it won't be blocked and consumes a lot of power just because there is no response coming back.

IMG_20250413_190306

Fun Stuff

Looking at the payload in the FSK modulated signal from the transmitter in URH (with an RTL-SDR Blog V4):

urh

The four selected payload bytes are:

  • 0b00000011 Payload length (address byte + 2 byte temperature value)
  • 0b01000010 Address (0x42)
  • 0b11000001 Upper byte of raw temperature value from MCP9808
  • 0b01010011 Lower byte of raw temperature value from MCP9808

Calculating the temperature (assuming >= 0°C):

jshell> (0b11000001 & 0x1f) * 16 + 0b01010011 / 16f
$1 ==> 21.1875

So, 21.2 °C 🙂

The first 15 0b10101010 bytes are the preamble, then there are 4 sync word bytes. After the 4 payload bytes, there are 2 CRC bytes as described in the datasheet of the RFM69HCW:

PackageFormat

LoRa

With LoRa, the signal of course looks a bit different:

urhLoRa

And it doesn't look like URH can decode LoRa for the time being.

About

Experimental project around RFM radio modules using an AVR MCU

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published