A simple 1 Channel  remote control Receiver at 433,92 MHz

By on January 14, 2015
Pin It


Here we present a small, low cost single channel receiver,  encoding MM53200 and HT-12, with code self-learning function. Decoding is achieved by means of a PIC microcontroller by Microchip, that deals even to the memorization of 5 codes and governs the relay output as well.




– Number of outputs: 1

– Output: Monostable, Bistable

– Power Source: 12Vdc

– Absorption: 40 mA max.

– Memory: 10 remote controls

– Encoding: MM53200/HT12


The MM53200 encoding, that owes its name to the integrated encoder/decoder from the then National Semiconductors, is probably the oldest to be used in radio and infrared transmissions  that are implemented in remote controls; and precisely the diffusion and the success obtained drove other builders, such as UMC, to develop “clones” like UM3750 and (at a later stage) UM86409 (capable of operating even at 5÷6 volt). Despite the limited number of combinations (only 4096) the MM53200 encoding offers many qualities, one of them being the possibility of controlling the encoding pins with binary logic levels or simple binary dip-switches, and the fact that both the encoding function and the decoding function are carried out by a single integrated circuit: depending on the settings of a dedicated pin (no. 15), the MM53200 and its clones may operate as encoders or decoders (two pins are there to receive or transmit the codes).

As much as it can be considered limited and unsafe today (in comparison to the rolling-code systems or to the more dated Motorola MC14502x encoding), since it has only 4.096 combinations, the MM53200 encoding is still much used, and particularly for door/gate openers; thus, a product from Holtek, named HT-12, was added to the traditional encoders/decoders, and it is fully compatible.

To meet the requests of those who have to maintain remote controls based on type encoding, and specially for those who have different transmitters but can’t find anymore the receivers of a gate opener control unit, we thought to create e single channel receiver with a relay output, capable of identifying the standard MM53200 codes and to be coupled, by means of a simple procedure, to a maximum of five transmitters.

Our circuit stands as a candidate to substitute the existing receivers, decoding MM53200; and the availaility of the self-learning function allows to couple the existing transmitters with great ease, without having to worry about the clock frequency of the encoder.

We have in fact to remember that the MM53200 transmits data strings that are timed by the clock generated by an internal oscillator, whose work frequency depends on the R/C network connected between the pin 13, the power source positive and the ground; in a traditional system with a receiver depending on MM53200, UM86409 or UM3750, the clock network has to determine a frequency that is the same of the one placed on the transmitter encoder, otherwise, even if setting the coding inputs in the same way (that is to say, the code dip-switches) the decoder will not be able to identify the incoming strings.

In our receiver, decoding and code coupling (as regards the five transmitters) are entrusted to a microcontroller, whose firmware is capable of adapting itself to the clock frequency of the encoder placed on the transmitter (provided that it works at 1,7 KHz), to synchronize with it and then to extract the code to memorize it, that is to say, to analyze it so to command the relay output.


Electric Diagram


The electric circuit of our receiver is really essential, thanks to the microcontroller, that alone carries out the task of the decoder (but has a case that is half as big as the one of MM53200) and of code memory, in addition to not needing dip-switch and clock network.

In the RF section we use a receiving module by Aurel, at 433,92 MHz, capable of receiving transmissions in OOK (On Off Key) amplitude modulation. In particular, we use AC-RX2(U3), an hybrid and very cheap module that at the same time is reliable, adequately selective and sensitive enough. The U2 module contains the radio part of the circuit and is a specific Aurel receiver, fitted with an antenna signal amplifier (granting as much as -106 dB), super regenerative stage tuning, tuned at 433,92 MHz by means of a compensator that has been calibrated by the manufacturer and equipped with a RF filter (the filter is needed to improve the selectivity, that is not high in the super regenerative units) and amplitude demodulator. The module package is completed with a comparator square of the digital signal (at TTL level) coming from pin 14 and with a LF amplifier of the signal coming from the AM demodulator.

1111_TopSilk FT1111_1

Both the receiver and the microcontroller have to be powered at 5V, a voltage obtained by means of the U1 regulator, a 78L05 in TO-92 format that obtains its 5 volts by starting from a 12V input voltage (applied to the PWR platform and needed to power the relay) at well stabilized 5V. The C1-C2 filter, placed at the stabiliser intake, removes possible inconveniences; the C3-C4 filter (at the stabiliser outlet), on the other hand, removes possible residual noises. The D1 diode, always present in our projects, protects the circuit from possible accidental inversions in the power supply voltage. As already hinted, this project has been created with a PIC12F675, a microcontroller in 8 pin DIL format, by Microchip. This integrated circuit has the availability of 6 I/O ports, but only 5 of these have been used. Let’s start from the GP0 line (pin 7), to which the LD1 LED  is connected; the latter communicates with the different operating states of the system, such as the identification of MM53200 codes, their memorization and erasure, and much more. The SW1 microswitch is connected to the GP1 line, and it starts the call for the memorization and erasure routines of the codes; on such line an internal pull-up resistance is active, thus forcing GP1 to the high state when SW1 is not pressed. The GP2 line represents the input for the serial data string, obtained from the demodulation operated by the RF module (U3). The PIC doesn’t require quartz to synchronize the clock, since we’re using the internal oscillator at 4MHz, calibrated by the same manufacturer, and having a 1% accuracy. The usage of the internal oscillator, in addition to further reducing the circuit encumbrance, frees GP5 and GP4, the two output lines here employed for the creation of the bistable (GP5) and monostable (GP4) outputs.

To decide which type of command has to receive the output relay, a jumper to be weld has been designed, to be realized on the printed circuit board. To activate the bistable mode the central contact on B has to be closed, while to obtain the monostable operation (“impulsive”) the central contact has to be closed on M. The thus selected output drives, by means of the R1 resistance, the base of a BC547 mounted as a common emitter, whose collector supplies the coil of the RL1 miniature relay. In parallel to the coil the classic diode is found, and it is needed, at the transistor’s interdiction, to turn off the peak of reverse voltage that the same coil tends to generate as a reaction to the interruption of the current, following the well known Lenz’s law.

Please notice that in monostable mode the output is not timed as one would expect, thus it returns to sleep state once the button is released.


The firmware

The source code has been compiled in PIC BASIC PRO language.



Test and operation

The circuit, therefore, will immediately work once powered. For the test we’re gonna take one or more transmitters encoding MM53200 at 433 MHz. By powering, the device emits 5 flashes to indicate a correct start.


Learning procedure

Let’s see how to learn codes.

  1. Press the SW1 button and keep it pressed.
  2. The green LED (LD2) will turn on to indicate that we are in self-learning state and that from this moment we may transmit the code we wish to memorize.
  3. Press the remote control button that we wish to learn, and wait for the LED to flash quickly for three times; this is a sign that learning came to a positive ending and that the procedure (at least if you pressed and released SW1) is complete.


If the LED remains fixed, the memory is full or the transmitted code is invalid. Please notice that as for firmware’s operation, it is not admitted an encoding combination having all TX programmer’s lines at low level (you may not keep all dips switched ON).

Moreover, please notice that from the pressure of the SW1 button, you have 5 seconds at your disposal for the transmission and memorization of the code; by keeping SW1 pressed, instead of pressing and releasing it immediately, we may memorize up to 5 codes in sequence).


Memory Erasing Procedure

It is only possible to erase the whole memory and not just the remote control.

  1. Remove the device powering.
  2. Press the SW1 button and keep it pressed.
  3. Supply powering.
  4. The green LED will remain lit fixedly for 2 seconds, to indicate that the memory erasure happened.
  5. The green LED will emit 5 flashes to indicate that the erasure procedure is exiting and that the receiver is normally starting.


From the store

1 ch receiver



About Boris Landoni

Boris Landoni is the technical manager of Open-Electronics.org. Skilled in the GSM field, embraces the Open Source philosophy and its projects are available to the community.
  • Zelino

    Muito Legal.

  • Gonzalo30

    Dear. I got an error when compiling your program : “unable to varying fit” . It is the first time I use the compiler used . I need if you can help me understand what my error. From already thank you very much.

    • BorisLandoni

      The code is witten in PicBasic Pro

  • danilo

    salve, e possibile avere gentilmente il file .hex compilato ?

  • Seregka Sa

    Here esche have been common control, or can have someone nebut emulator UMC UM3750, MM53200

  • Dex

    I get a few errors trying to compile tih code
    One of them is : unable to fit variable TRENO
    Pleas could someone post a working code or .hex


    • Daniel Lebrero

      I have the same problem, seems that TRENO [25] is too big, I decrease is to 12 (which is the amount of codes and the compiler did not complain, I could not test it yet

  • TalkionCZ

    Hi, we managed to do in PICBASIC HEX for circuits that allow us to PIC12F683 and auditioned and Boužel work.

  • Danny Lam

    Hi there, Any one has the hex file? Please send it to SouthCaliMan@yahoo.com.
    Thanks. Dan

  • Daniel Lebrero

    The code posted above is full of errors and the compiler cannot compile it, example the line IF TRENO[I]<=20 or TRENO[I]>=85 THEN ERRORE=1
    I think it should be
    Also the definition of the Treno array as word with 25 elements
    TRENO VAR WORD[25] throws an error that says that the compiler cannot fit it.

    Does anyone have the code corrected without errors?

  • Daniel Lebrero

    on the Variable Definition, the TRENO VAR WORD[25] seems to be too big, the compiles complains that there is no space to fit TRENO, if I decrease that value to 12, then the compiler works fine, what could be wrong?