Open hardware remote control with RFM119/CMT2119A in the 868MHz or 434MHz ISM bands
Here I present a design of a remote control based on the RFM119 module (Cmostek CMT2119A chip)
which is highly user-configurable: frequency and modulation is user-selectable via USART interface,
rolling code encryption is presently
Keeloq (for backward compatibility), but can be changed
to AES or whatever at the open source code level.
As the remote is powered from CR2032, I have selected MCU ATmega168p at low frequency, which can operate from
as low as 1.8V, matching the capability of CMT2119A. If more flash were needed, it could be replaced by the
ATmega328p, which is pin compatible.
The schematics is
remote868.pdf and open hardware Kicad design files are
remote868.zip.
Open source code is
remote868_soft.zip.
Partial reverse engineering of CMT2119 (CMT2119A) transmitter (RFM119 module) registers - how to set frequency and other modulation parameters from a MCU code at runtime
The Cmostek chip CMT2119A employed in the RFM119 HopeRF module suppports a user-setup of frequency, modulation and other paramters via
a TWI (not I2C!) interface. This, however, stores the setup RAM-only and has to be repeated after each powerup.
They provide also some (rather expensive) USB programmer to store the setup in the EEPROM of CMT2119A.
I have thus decided to do the RAM-only setup before each transmission via MCU, storing my own setup
permanently in the EEPROM of the MCU.
However, Cmostek provides only a windows program called RFPDK to generate the register contents
for a given setup, which is highly inconvenient. I could not find any register description of CMT2119A,
so I decided to do some basic reverse engineering to find a way how to setup frequency, FSK deviation
and OOK/FSK modulation switch. I did not analyze the GMSK setup.
I was able to uncover how to set the frequency, and how to set the FSK deviation.
There is a register storing the PLL multiple for each, and there are some bits switching
on prescalers for lower frequencies. The results of this analysis are best seen in form of the routine
void configure(uint32_t freq, uint32_t dev, uint8_t mod)
in the file remote868.c found in this archive
remote868_soft.zip.
This routine provides a convenient interface how to change the selected parameters of CMT2119A
from a program running in a MCU via the TWI interface, avoiding the need to employ the RFPDK program
and store register data for particular values of the parameters.
Here is a breadboard prototype of the remote, used to check the design, develop the software for the remote as well as for the matching receiver.
The production of final device took a longer time, since the transport of the PCB manufactured in China
was hampered by the current Covid-19 outbreak in Europe, but after it finally arrived, I built the
final remote control.
The open hardware/open source design of matching receivers interfaced via USB to a host computer, or via ethernet to any target IOT device
is described
here.
My LPC1xxx page
My Electronics page
My hobby page
My main page with e-mail contact
TOP of my family pages