433 MHz Wireless Remote Control Using Only Digital Logic Circuits (DLC) (No Microcontroller!)
by Shahed Islam in Circuits > Wireless
74 Views, 0 Favorites, 0 Comments
433 MHz Wireless Remote Control Using Only Digital Logic Circuits (DLC) (No Microcontroller!)
Most "wireless switch" projects you see online use a microcontroller (Arduino, ESP32, etc.) on both ends. This project does the same job, turning four loads on and off from a distance, using nothing but combinational and sequential logic ICs. There's no code anywhere in this build, so it's a great way to actually see how a remote control works underneath.
The whole system has two halves:
- Transmitter (remote control): 5 push buttons -> HT12E encoder -> 433 MHz TX module
- Receiver (the box next to your loads): 433 MHz RX module -> HT12D decoder -> CD4027 JK flip-flops (in toggle mode) -> LEDs (standing in for real loads).
Press one button on the transmitter, and the matching LED on the receiver flips from off to on (or on to off) - wirelessly, with no need to hold the button down to keep it lit. That flip-and-hold behavior is done with a JK flip-flop: a chip most people only ever meet in a textbook.
Supplies
Transmitter Board:
- HT12E Encoder IC
- 433 MHz ASK transmitter module
- LM7805 5V Regulator
- Momentary push button
- 1 MΩ resistor
- 104 Ceramic Capacitor (0.1µF)
- 9V Battery + Clip
- Breadboard
- Jumper Wires
Receiver Board:
- HT12D decoder IC
- 433 MHz ASK receiver module
- CD4027BE dual JK flip-flop IC
- LM7805 5V regulator
- 47kΩ resistor
- 220Ω resistor
- Blue LED
- Red LED
- 104 Ceramic Capacitor (0.1µF)
- 9V Battery + Clip
- Breadboard
- Jumper Wires
How the Whole System Works
Think of it as a game of "Simon Says," played over the radio:
- On the transmitter, you hold down SW5. This is the "I have something to say" button - it enables the encoder chip.
- While SW5 is held, the encoder (HT12E) constantly repeats a coded message out of its data pin. The message always contains a fixed address (so your remote currently talks to your receiver, not your neighbor's) plus whatever data bits are currently active.
- That coded message is fed into the 433 MHz transmitter module, which just turns the radio wave on and off in step with the encoder's serial output (this is called ASK/OOK - Amplitude Shift Keying / On-Off Keying, the simplest possible way to send digital data over radio).
- On the receiver side, a matching 433 MHz receiver module picks up that on/off radio pattern and hands it back out as a digital signal.
- The decoder (HT12D) checks the address bits against its own hard-wired address. If - and only if - they match, it does two things:
- Raises its VT (Valid Transmission) pin high, which lights a blue "link OK" LED.
- Produces a short output pulse on the data pin that corresponds to whichever button was pressed on the transmitter.
- Those short pulses don't drive the LEDs directly. Instead, each one clocks a JK flip-flop wired in toggle mode. Every time a pulse arrives, the flip-flop's output flips states: off -> on, or on -> off. That's what makes this a proper remote switch rather than a "press and hold: remote - press once to turn a load on, press again (any time later) to turn it off.
- Each flip-flop output drives a red LED (standing in for a relay/MOSFET driving a real appliance in a finished project).
Every time downstream, if "SW5 is pressed" is 100% analog/digital hardware behavior, there is no software running anywhere in this circuit.
Meet the Encoder - HT12E
The HT12E is an 18-pin CMOS chip made specifically for remote control encoding. Its job: watch some input pins and continuously shift out a serial code describing their state.
- A0–A7 ---- 8 address bits ---- Hard-wired to a fixed pattern of VCC/GND — this is the "password" that must match the decoder.
- D8–D11 ---- 4 data bits ---- Each wired to one push button (SW1–SW4), normally pulled high internally, pulled low when pressed.
- OSC1, OSC2 ---- Oscillator pins ---- External resistor sets the internal clock rate
- TE (EN) ---- Transmit enable, active low ---- Wired to SW5 — while held, the chip repeatedly transmits its code word.
- DOUT ---- Serial data output ---- Feeds the DATA pin of the 433 MHz TX module
Why the address bits matter: HT12E/HT12D pair support up to 2⁸ = 256 different address combinations across 8 address pins. As long as your transmitter's A0-A7 pattern matches your receiver's A0-A7 pattern, they'll talk to each other, and they'll ignore every other HT12E-based remote on the same frequency (like a garage door or car key using the same chips) that doesn't share your exact address code. This is the entire "security" mechanism of this style of remote - pick an address pattern and wire both boards identically.
Meet the Decoder - HT12D
The HT12D is the mirror image of the HT12E. It continuously samples whatever serial data arrives on its DIN pin (fed from the RX module's data output), looking for a valid frame:
- A0–A7 ---- 8 address bits ---- Hard-wired identically to the encoder's address pattern.
- D8–D11 ---- 4 data bits ---- Each pulses high momentarily when the matching transmitter button is pressed.
- OSC1, OSC2 ---- Oscillator pins ---- External resistor sets the internal clock rate
- VT ---- Valid Transmission Output ---- Goes high while a matching, error-free frame is being received.
- DOUT ---- Serial data input ---- Comes from the RX module's data output.
Picking the Oscillator Resistor for HT12E
This is the part most tutorials skip - so let's do it properly.
Both the HT12E and HT12D need an external resistor between OSC1 and OSC2 to set their internal clock. Rather than a formula, Holtek gives you a graph in each datasheet, titled "Operational Frequency vs Supply Voltage."
Reading the graph: The resistor isn't on either axis. The axes are fosc (vertical) and VDD (horizontal); each curve represents one standard resistor value. So the method is: find where your target frequency crosses your supply voltage, then read off which curve passes through that point - that curve's label is your resistor.
Selecting R1 (HT12E, encoder):
- Fix your supply voltage first - here it's a regulated 5V; draw a vertical line straight up from VDD = 5 on the X-axis.
- Pick a target oscillator frequency. A few kHz is the sweet spot for this kind of remote - fast enough that a button press feels instant, slow enough for a basic 433MHz module to keep up. We'll target 3kHz.
- Draw a horizontal line across from 3kHz on the Y-axis.
- Where the two lines cross, look at which curve passes through that point - on the HT12E graph, that's the curve labeled 1.0MΩ.
- So, R1=1MΩ, wired between OSC1 and OSC2 on the HT12E.
Selecting R2 (HT12D, decoder)
The decoder's clock isn't independent. Holtek specifies a fixed ratio for reliable decoding:
f_OSCD (decoder) = 50 × f_OSCE (encoder)
The decoder needs to run 50 times faster than the encoder so it can oversample each incoming bit enough times to reliably tell a 0 from a 1. With the encoder set to 3kHz, that means the decoder's oscillator must run at 3kHz × 50 = 150kHz.
- On the HT12D graph, draw a vertical line at VDD = 5V and a horizontal line at 150kHz.
- Where they cross, the nearest curve is 51kΩ. Since 47kΩ is a far more common standard value, we substitute the nearest standard resistor: R2 = 47kΩ.
Rule of thumb to take away: always pick the encoder's resistor first (using the graph, for your target bit rate), then pick the decoder's resistor from the required ratio - never pick them independently.
Turning Momentary Pulses Into an On/off Switch
This is the cleverest piece of the whole design, so let's slow down here.
The HT12D's D8-D11 outputs are momentary - they pulse high only for the instant a valid frame carrying that button's "pressed" bit is decoded, then drop back low. If you wired an LED directly to one of those pins, it would only glow for a flash each time you pressed the button - not what you want for a light switch.
What you actually want is: press once ----> the load turns on and stays on; press again, any time later ----> it turns off. That's a toggle, and the way to get a toggle out of a JK flip-flop is to tie both J and K permanently high.
Rather than a simplified textbook table, above in the figure is the CD4027's actual Device Functional Models table from the datasheet, so you can see exactly how the chip is specified to behave.
Notice row1 (J=1, K=Don't Care, Q was 0 ----> Q becomes 1 on a rising clock edge) and row4 (K=1, J=Don't Care, Q was 1 ----> Q becomes 0 on a rising clock edge). Since K in row 1 is "don't care," it already covers the case K=1; since J in row 4 is "don't care," it already exactly the two situations you'll ever be in - output was low, or output was high - and between them, every rising clock edge flips the output to whatever it wasn't. That's the toggle.
Testing It
- Power up the receiver first, then the transmitter.
- Press and hold SW5 on the transmitter - the blue LED on the receiver should light up immediately and stay lit for as long as you hold the button.
- While holding SW5, tap SW1 - the first red LED should flip on. Release everything, then hold SW5 and tap SW2 again - that same LED should flip back off.
- Repeat for SW3/SW4/SW5 against their respective LEDs.
- If nothing responds:
- Double-check the address pattern (A0-A7) is identical on the both boards.
- Re-check both oscillator resistors are seated correctly and haven't shifted position on the breadboard.
- Confirm the RF modules are getting a clean 5V.
Where to Go From Here
- Swap each red LED + 220Ω resistor for a small NPN transistor (or MOSFET) driving a relay coil, and you've turned this into a real wireless appliance switch.
- Add a status LED per channel on the transmitter side too, by tapping each flip-flop's Q output back...
- Move from a breadboard to a small PCB - everything here is through-hole and breadboard-friendly, but a permanent board will be far more reliable for daily use than jumper wires.
The PCB Design file can be found here: https://oshwlab.com/shahed_islam/project_mbpxswnh