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