This cheap and (fairly) reliable radio based remote control system, originating from ARC Technology in Taiwan, is widely available and sold under names such as Nexa and Proove. Here I show you the details of the protocol and how to adapt the system to your own applications.
As it is possible to buy a package of one transmitter and three receivers for under 20 euro, I became interested in adapting this RF remote control systems for my own projects. I also thought it could useful to be able to control more than one output, using the same receiver.
The result is a combined analyzer tool and 7 channel remote control receiver, compatible with all Nexa systems. All decoded data is output on the serial port, but only the configured receiver address will affect the outputs.
There are two different versions of the Nexa system:
Both has about the same performance and range (up to 30 meters), but LC is protected against interference if there are other Nexa systems in the vicinity.
Legacy CS transmitters may be used by the new LC receivers, but the opposite is not possible.
This was the first system to arrive on the market, and is also the simplest one. Each transmitter is identical, so there is a risk that you may experience interference if a neighbour close to you uses the same system (i e, neighbours turning on and off each others devices).
The CS system uses addresses (called house codes) to allow for multiple systems to work closely together without interfering with each other. The transmitter and receiver has a switch that allows the user to select an address that (hopefully) is not in use. Hence the name "Code Switch". Both the transmitter and receiver must obviously be set to the same address.
In theory, the CS system allows for up to 16 addresses, but in practice often only a few of them are made available to the user to select between, as a 16-mode switch is bigger and more expensive than, say for example, a 4-mode switch.
In the same way, a transmitter within the CS system may control up to 16 unique receivers, but again, not all transmitters has this many buttons. The most common one, included in a starter kit with one transmitter and three receivers, only supports three different receivers. It is possible to use more than 16 unique receivers if they are assigned different addresses.
Each receiver has a switch for selecting which channel to listen to. Setting two receivers to listen to the same channel makes it possible to control more than one receiver with a single button. Also, some transmitters has a "group" button, that can be used to turn off all receivers within the same address, with a single click.
The same ASIC, ARC M3D L2B, is used for both encoding and decoding. It seems to be custom made for ARC Technology, as no datasheet is available on the web.
The ASIC is designed by Mosdesign Semiconductor Corp. This fabless IC design house seems to have based the encoder / decoder circuits on some of their previous designs, which is probably the reason for why the protocol supports trinary symbols ('0', '1' and 'X'), while in fact only '0' and 'X' are used.
The low-voltage section of the receiver is powered directly from mains by a voltage divider. This saves the cost of a transformer, and is a nice and cheap solution in a finished product that needs no service. It is however less favorable in DIY projects, as we have a great risk of lethal shock and destroyed programming equipment. Never use a receiver powered directly by mains in your own applications unless you know exactly what you are doing (and preferably not even then)!
A much safer solution for home projects is to remove the AC wires and apply 3.3 V to J201 and 0V (ground) to J202. The decoded signal is available at pin 2 of the IC. Remember that the receiver needs to know which address to listen to, so either you use the switch, or if using a naked PCB, hard-wire an address by soldering a wire across the appropriate switch pads.
The CS receiver is capable of decoding also the newer LC system, which means that in DIY projects, a modified CS receiver is sufficient for both protocols.
As mentioned in the hardware section, the encoder / decoder circuits allows for trinary symbols, but as CS only uses '0' and 'X', we can think of them as the zeroes and ones we are used to.
The symbols below are available. In the rest of this section, I will use the words 'bit' and 'symbol' interchangeably, as it is more familiar to think of packets as a group of bits.
T equals 358 microseconds, which yields:
Each packet is sent at least 6 times on each keypress, with 8 ms silence in between, hence the minimum length above. If a key is pressed and hold, more packets are sent.
Data is sent LSB first, in packets consisting of 12 bits and 1 stop bit.
b0..b3 : address (house code), binary encoding
b4..b7 : unit, binary encoding
b8..b10 : unknown
b11 : action, X = ON, 0 = OFF
The LC system looks similar to CS at a first glance, but some things has changed under the hood. First of all, LC is virtually immune to interference from other Nexa systems, and second, it has the feature of dimming.
CS transmitters are compatible with LC receivers, but the opposite is not possible. Mixing the two systems should be avoided though, as we then don't take advantage of the LC system's protection against interference from neighbouring systems.
The LC system solves the interference problem found in the CS system, by using a fundamentally different approach. Here, each transmitter includes a unique address in the sent message, and the receivers are set up by the user once to only operate on commands from a certain transmitter. To allow multiple transmitters in a household to control the same device, each receiver may listen to up to six different transmitters.
The meaning of unique is a matter of definition, as there obviously is a finite number of bits (26) to hold the address, but with more than 67 million different addresses, we shouldn't expect to much trouble.
With LC, it is possible to send 16 levels of dimming information. Dimming is however not supported by all receivers.
The ASIC used in the LC transmitter is a closely guarded secret, an examination only reveals an 18-pin SOIC package with no label. Being the same package used in CS, and the many similarities in the two protocols, I guess we're dealing with an updated custom design from Mosdesign Semiconductor Corp.
The LC receiver is less enigmatic, although a special safety bit is required to open it. It uses a MDT10P55B 8-bit microcontroller from Yspring Technology in conjunction with a IS24C02B 2-kbit serial EEPROM from ISSI.
LC operates at the double bit rate compared to CS, but also uses more bits per symbol, so the baud rate is not doubled.
The symbols below are available. As opposed to the CS system, LC actually uses trinary bits, but only when a packet includes dim level information.
T equals 179 microseconds, which yields:
Each packet is sent at least 5 times on each keypress, with 10 ms silence in between, hence the minimum length above. If a key is pressed and hold, more packets are sent.
Data is sent MSB first, in packets consisting of 1 start bit followed by 32 or 36 bits. The longer packet is used when including dim level information.
b0..b25 : address
b26 : group bit
b27 : action bit, X = ON, 0 = OFF, 1 = DIM
b28..31 : button
b32..35 : dim level, only included if b27 = '1'