X-10 is a communication protocol designed for sending
signals over 120 VAC wiring. X-10 uses 120 kHz bursts
timed with the power line zero-crossings to represent
digital information. Plug-in modules available from various vendors enable users to create home automation
systems by using the AC wiring already installed within
a home. Readers who would like an overview of the
X-10 signal format may refer to Appendix A.
®
PICmicro
conjunction with X-10 technology to create home
automation applications. The specific PICmicro
microcontroller (MCU) used should be selected based
on RAM, ROM, operating frequency, peripheral, and
cost requirements of the particular application. The
PIC16F877A was selected for this application because
of its versatility as a general purpose microcontroller,
its FLASH program memory (for ease of development),
data EEPROM, and ample I/O.
This application note discusses the implementation of
X-10 on a PICmicro MCU to create a home controller
that can both send and receive X-10 signals. The
reader may implement the home controller as is, or
adapt the circuits and firmware to other applications. A
library of X-10 functions is provided to facilitate development of other X-10 applications using PICmicro
MCUs (see Appendix E).
Operating instructions for the home controller are
included in Appendix B.
microcontrollers can easily be used in
HARDWARE OVERVIEW
The home controller application described in this application note allows the user to program on and off times
for up to sixteen devices, using a 2 x 16 liquid crystal
display and five push buttons. A built-in light sensor can
be used to turn on lights at dusk, and turn them off at
dawn.
The home controller is designed to facilitate experimentation with home automation using the
PIC16F877A. In addition to the PIC16F877A, the board
will accept any other PICmicro MCU that shares the
same pinout, such as the PIC18F452. Therefore,
experimenters may expand on the application using the
higher performance of the PIC18 family of parts without
changing the hardware.
With care, engineers and home control enthusiasts can
experiment with home automation using the
MPLAB
or in-circuit emulator. However, proper circuit isolation
precautions must be taken to avoid damage to your
computer or development tools. See Figure 1 and the
warning note!
®
ICD and MPLAB®ICD 2 development tools
WARNING: VSS or ground on the application circuit is
tied to neutral of the 120 VAC. To safely connect your
development tools or computer to the home controller, you must power it through an isolation transformer
and leave wall ground (the green wire in most cases)
disconnected. Any test instruments (such as an oscilloscope) that you hook up to the application circuit,
should be powered through the isolation transformer
as well, with wall ground disconnected. In addition,
the entire circuit should be enclosed within a suitable
case to prevent unintentional contact with the mains
voltage!
FIGURE 1:TEST SETUP WHEN USING DEVELOPMENT TOOLS
X-10
Isolation
Transformer
Computer,
development tools,
and the isolation
transformer should
be plugged into
the wall outlet.
2002 Microchip Technology Inc.DS00236A-page 1
Board
X-10
Lamp
Module
Oscillo-
scope
X-10
Lamp
Module
X-10 modules and
any test
instruments should
be plugged into
the isolation
transformer.
To m a i nt a in
isolation, leave
ground
disconnected.
AN236
HARDWARE DESCRIPTION
An overview of the home controller application
hardware is shown in Figure 2.
The hardware functionality of X-10 circuitry can be
divided into four functional blocks:
• Zero-crossing detector
• 120 kHz carrier detector
• 120 kHz signal generator
• Transformerless power supply
FIGURE 2:APPLICATION BLOCK DIAGRAM
X-10 FUNCTIONS
Zero-crossing Detector
120 kHz Carrier Detector
120 kHz Carrier Generator
There are several application functions that are not
directly associated with the X-10 interface. User
interface functions are accomplished with an LCD
display and five push buttons. A real-time clock is
created using Timer1 and an external 32 kHz oscillator.
User modified control data, such as unit on and off
times, are stored in the PICmicro MCU’s built-in
EEPROM. A light sensor and load switch are also used
in this application.
APPLICATION SPECIFIC FUNCTIONS
Light
Sensor
Real-time ClockControl Data
Load
Switch
Storage
USER INTERFACE
LCDKey Switches
TRANSFORMERLESS POWER
SUPPLY
DS00236A-page 2 2002 Microchip Technology Inc.
AN236
A summary of resource use can be seen in Table 1.
Details of the functional sections are discussed below.
TABLE 1:SUMMARY OF MICROCONTROLLER RESOURCE USE
ResourceFunctionDescription
External interrupt on RB0Zero-crossing DetectGenerates one interrupt every zero-crossing.
CCP1/Timer2 in PWM
mode
Timer2 interrupt through
postscaler
Timer1 interruptReal-time ClockUsed as time keeping clock and key scan clock.
Timer0 interrupt120 kHz Envelope TimingTimes duration of 1 ms bursts and onset of second
ADCLight SensorUsed to detect dawn and dusk.
PORTB<1:5>Key Press InputsFive push buttons are used for menu navigation.
PORTB<6:7>Reserved for ICDIsolation precautions required. See warning note!
PORTD<0:7>LCD Data pins8 data lines for LCD.
PORTE<0:2>LCD Control pins3 control lines for LCD.
DATA EEPROMNon-volatile Control Data StorageStores on and off times and other user
120 kHz ModulationTRISC is used to enable/disable 120 kHz output.
Main oscillator is 7.680 MHz.
Triac Dimmer TimingGenerates dimmer timing increments for controlling
Triac.
One interrupt/25 ms, 40 interrupts/1 sec.
and third phase bursts.
programmable information.
Zero-Crossing Detector
In X-10, information is timed with the zero-crossings of
the AC power. A zero-crossing detector is easily created by using the external interrupt on the RB0 pin and
just one external component, a resistor, to limit the
current into the PICmicro MCU (see Figure 3).
In the United States, Vrms = 117 VAC, and the peak
line voltage is 165V. If we select a resistor of 5 MΩ,
Ipeak = 165V/5 MΩ =33µA, which is well within the
current capacity of a PICmicro MCU I/O pin.
Input protection diodes (designed into the PICmicro
MCU I/O pins) clamp any voltage higher than V
lower than V
the negative half of its cycle, the RB0 pin will be
clamped to V
logic zero. When the AC voltage rises above the input
threshold, the logical value will become a ‘1’.
In this application, RB0 is configured for external interrupts, and the input buffer is a Schmitt trigger. This
makes the input threshold 0.8 V
edge and 0.2 V
SS. Therefore, when the AC voltage is in
SS - 0.6V. This will be interpreted as a
DD = 4V on a rising
DD = 1V on a falling edge.
DD or
Upon each interrupt, the Interrupt Edge Select bit within
the OPTION_REG register is toggled, so that an interrupt occurs on every zero-crossing. Using the following
equation, it is possible to calculate when the pin state
will change relative to the zero-crossing:
V = Vpk*sin(2*π*f*t), where Vpk = 165V and f = 60 Hz
On a rising edge, RB0 will go high about 64 µs after the
zero-crossing, and on a falling edge, it will go low about
16 µs before the zero-crossing.
More information on interfacing PICmicro MCUs to AC
power lines can be found in the application note
AN521, “Interfacing to AC Power Lines”, which is
available for download from the Microchip web site.
FIGURE 3:ZERO-CROSSING DETECTOR
PIC16F87XA
120 VAC
R = 5 M
Ω
RB0/INT
2002 Microchip Technology Inc.DS00236A-page 3
AN236
120 kHz Carrier Detector
To receive X-10 signals, it is necessary to detect the
presence of the 120 kHz signal on the AC power line.
This is accomplished with a decoupling capacitor, a
high-pass filter, a tuned amplifier, and an envelope
detector. The components of the carrier detector are
illustrated in Figure 4.
Because the impedance of a capacitor is:
Zc = 1/(2*π*f*C), a 0.1 µF capacitor presents a low
impedance (13Ω) to the 120 kHz carrier frequency, but
a high impedance (26.5 kΩ) to the 60 Hz power line frequency. This high-pass filter allows the 120 kHz signal
to be safely coupled to the 60 Hz power line, and it doubles as the coupling stage of the 120 kHz carrier
generator described in the next section.
Since the 120 kHz carrier frequency is much higher
than the 60 Hz power line frequency, it is
straightforward to design an RC filter that will pass the
120 kHz signal and completely attenuate the 60 Hz. A
high-pass filter forms the first stage of the High-Pass
Filter and Tuned Amplifier Block, shown on sheet 5 of
the schematics in Appendix C.
FIGURE 4:120 kHz CARRIER DETECTOR
For a simple high-pass filter, the -3 db breakpoint is:
ƒ3 db = 1/(2*π*R*C). For C = 150 pF and R = 33 kΩ,
ƒ3 db = 1/(2*π*150 pF *33 kΩ)=32kHz.
This ƒ3 db point assures that the 60 Hz signal is completely attenuated, while the 120 kHz signal is passed
through to the amplifier stages. Next, the 120 kHz signal is amplified using a series of inverters configured as
high gain amplifiers. The first two stages are tuned
amplifiers with peak response at 120 kHz. The next two
stages provide additional amplification. The amplified
120 kHz signal is passed through an envelope detector, formed with a diode, capacitor, and resistor. The
envelope detector output is buffered through an
inverter and presented to an input pin (RC3) of the
PIC16F877A.
Upon each zero-crossing interrupt, RC3 is simply
checked within the 1 ms transmission envelope to see
whether or not the carrier is present. The presence or
absence of the carrier represents the stream of ‘1’s and
‘0’s that form the X-10 messages described in
Appendix A.
Decoupling
Capacitor
0.1
µF
X2 Rated
1 M
Ω
Note 1: See schematic in Appendix C.
High-Pass
Filter & Tuned
Amplifier
(1)
+5 VDC
10K
Envelope Detector
10 nF
PIC16F87XA
RC3
DS00236A-page 4 2002 Microchip Technology Inc.
AN236
120 kHz Carrier Generator
X-10 uses 120 kHz modulation to transmit information
over 60 Hz power lines. It is possible to generate the
120 kHz carrier with an external oscillator circuit. A single I/O pin would be used to enable or disable the oscillator circuit output. However, an external oscillator
circuit can be avoided by using one of the PICmicro
MCU’s CCP modules.
The CCP1 module is used in PWM mode to produce a
120 kHz square-wave with a duty cycle of 50%.
Because X-10 specifies the carrier frequency at
120 kHz (+/- 2 kHz), the system oscillator is chosen to
be 7.680 MHz, in order for the CCP to generate precisely 120 kHz. Calculations for setting the PWM
period and duty cycle are shown in the code listing
comments for the function InitPWM.
After initialization, CCP1 is continuously enabled, and
the TRISC bit for the pin is used to gate the PWM output. When the TRISC bit is set, the pin is an input and
the 120 kHz signal is not presented to the pin. When
the TRISC bit is clear, the pin becomes an output and
the 120 kHz signal is coupled to the AC power line
through a transistor amplifier and capacitor, as
depicted in Figure 5.
Since the impedance of a capacitor is Zc = 1/(2*π*f*C),
a 0.1 µF capacitor presents a low impedance to the
120 kHz carrier frequency, but a high impedance to the
60 Hz power line frequency. This high-pass filter allows
the 120 kHz signal to be safely coupled to the 60 Hz
power line, and it doubles as the first stage of the
120 kHz carrier detector, described in the previous
section.
To be compatible with other X-10 receivers, the maximum delay from the zero-crossing to the beginning of
the X-10 envelope should be about 300 µs. Since the
zero-crossing detector has a maximum delay of
approximately 64 µs, the firmware must take less than
236 µs after detection of the zero-crossing to begin
transmission of the 120 kHz envelope.
Transformerless Power Supply
The PIC16F877A and other board circuits require a 5V
supply. In this application, the X-10 controller must also
transmit and receive its data over the AC line. Since
X-10 components are intended to be plugged into a
wall outlet and have a small form factor, a transformerless power supply is used. Two characteristics of transformerless supplies that should be kept in mind are
limited current capacity, and lack of isolation from the
AC mains (see the warning note)!
WARNING: This circuit is not isolated from 120 VAC.
Act with caution when constructing or using such a
circuit, and ensure that it is contained within a suitable
insulated enclosure. Follow isolation precautions to
avoid personal injury or damage to test equipment
and development tools.
Figure 6 illustrates the transformerless power supply
used in this application. To protect the circuit from
spikes on the AC power line, a 130V VDR (voltage
dependent resistor) is connected between Line and
Neutral. A Positive Temperature Coefficient (PTC)
device acts as a resettable fuse, which limits current
between Ground and Neutral. The 47Ω resistor limits
current into the circuit, and the 1 MΩ resistor provides
a discharge path for the voltage left on the capacitor
when the circuit is unplugged from the wall. Two diodes
rectify the voltage across the 1000 µF capacitor and
5.1V Zener diode to produce a 5V supply.
The reader may wish to refer to the technical brief
TB008, “Transformerless Power Supply”, available for
download from the Microchip web site, for additional
information on transformerless power supply design.
FIGURE 5:120 kHz CARRIER GENERATOR
+5 VDC
PIC16F87XA
7.680 MHz
2002 Microchip Technology Inc.DS00236A-page 5
OSC2
RC3/CCP
OSC1
200Ω
50Ω
High-Pass Filter
0.1 µF
X2 Rated
Ω
1 M
120 VAC
AN236
FIGURE 6:TRANSFORMERLESS POWER SUPPLY
VDR
LN
PTC
G
Load Switch
A load switch is included on the home controller so that
it may act as a lamp module, with its own house and
unit address. A Triac was selected as the load switch,
because its medium power switching capacity and
rapid switching capability make it well-suited for lamp
control and dimming.
A Triac is an inexpensive, three-terminal device that
basically acts as a high speed, bi-directional AC switch.
Two terminals, MT1 and MT2, are wired in series with
the load. A small trigger current between the gate and
MT1 allow conduction to occur between MT1 and MT2.
Current continues to flow after the gate current is
removed, as long as the load current exceeds the latching value. Because of this, the Triac will automatically
switch off near each zero-crossing as the AC voltage
falls below the latching voltage.
1N4005
A Teccor
1N4005
1000 µF
®
L4008L6 Triac was selected because it has
+5 VDC
5.1V Zener
2.25 µF
2.25 µF
1.1M
a sensitive gate that can be directly controlled from the
logic level output of the PICmicro MCU I/O pin. The
sensitive gate Triac can control AC current in both
directions through the device, even though the
PICmicro MCU can provide only positive voltages to
the gate.
A variable dimmer is created by including a delay
between the time of each zero-crossing and the time
that the trigger current is provided to the Triac from the
PICmicro MCU.
The design and control of a lamp dimmer using a
PICmicro MCU is discussed in detail in PICREF-4
Reference Design, “PICDIM Lamp Dimmer for thePIC12C508”.
FIGURE 7:LOAD SWITCH/DIMMER (TRIAC)
PIC16F87XA
1N4148470Ω
RA5
VSS
L4008L6
Gate
ReturnHot
MT1
MT2
120 VAC In
120 VAC Out
DS00236A-page 6 2002 Microchip Technology Inc.
AN236
LCD Module
The 2-line x 16-character display uses the HD44780U
Display Controller. Eight data lines and three control
lines are used to interface to the PICmicro MCU. If
fewer I/O pins are available, the LCD can be operated
in Nibble mode using only four data lines, with some
additional software overhead. A basic LCD library is
included in this application, which provides the
necessary functions for controlling this type of LCD.
Real-Time Clock
A real-time clock is implemented using Timer1. The
real-time clock keeps track of the present time using a
routine called UpdateClock. It also determines the
rate that the buttons are read by a routine called
ScanKeys.
Timer1 is set to cause an interrupt each time it
overflows. By adding a specific offset to Timer1 each
time it overflows, the time before the next overflow can
be precisely controlled. The button reading routine,
ScanKeys, is called each time a Timer1 interrupt
occurs. Since ScanKeys performs debouncing of the
button presses, a suitable rate to check the buttons is
once every 25 ms.
With a 32 kHz crystal, the counter increments once
every 31.25 µs when the prescaler is set to 1:1. In order
for Timer1 to generate an interrupt once every 25 ms,
TMR1H:TMR1L are pre-loaded with 0xFCE0h.
The Timer1 interrupt interval, or tick, can be seen in the
following equation:
(FFFFh – FCE0h)*1/32 kHz = .025 s = 1 tick
Each time ScanKeys is called (every 25 ms), it calls
UpdateClock. UpdateClock keeps track of the time
unit variables: ticks, seconds, minutes, and hours.
Since every 25 ms equals one tick, seconds are incremented every 40 ticks. Minutes and hours are
incremented in a similar fashion.
development tool, without taking first isolating the
entire application from wall power (see the previous
warning notes)!
Control Data Storage
Certain control data that is programmable by the user
must be stored in non-volatile memory. The PICmicro
MCU’s built-in EEPROM is well-suited to this task.
To use EEPROM memory space most efficiently (by
avoiding wasted bits), on/off times and light sensor
control flags are stored using the format shown in
Figure 8. Figure 9 shows the location of on/off times
and other information within the data EEPROM. Using
this data organization, only 48 bytes of EEPROM are
required to store the on/off times and light sensor
control flags for 16 units.
FIGURE 8:ON/OFF TIME STORAGE
4 bits4 bits
EEHours
EEOnMinutes
EEOffMinutes
On Hour Off Hour
11
A
11
C D
6 bits
BOnMin
6 bits
Off Min
FIGURE 9:EEPROM DATA
Address Unit
0x001
0x002
0x010
0x011
0x012
0x020
0x021
0x022
System
System
Unit 1
Unit 2
Unit 3
Unit 1
Unit 2
Unit 3
A = AM/PM bit for On Hour
B = Control bit for On at Dusk
C = AM/PM bit for Off Hour
D = Control bit for Off at Dawn
Data
House Address
Unit Address
OnHour OffHour
OnHour OffHour
OnHour OffHour
BOnMinA
BOnMinA
BOnMinA
Push Buttons
Five push buttons, connected to RB1-RB5, are used for
user interaction with the application. Each normally open
push button will pull a port pin low when it is pressed.
0x030
0x031
0x032
Unit 1
Unit 2
Unit 3
BOffMinA
BOffMinA
BOffMinA
Light Sensor
To detect the ambient light level, a CdS photoresistor is
used in conjunction with an 820Ω resistor to create a
voltage divider. The voltage on the divider varies with
the intensity of ambient light and is connected to an
analog channel (AN0) of the microcontroller.
In-Circuit Debugger
RB6 and RB7 have been reserved for In-Circuit Serial
Programming
(ICD). However, do not connect the ICD or any other
2002 Microchip Technology Inc.DS00236A-page 7
TM
(ICSPTM) and the in-circuit debugger
Each time that minutes are incremented within the
UpdateClock routine, a flag is set that enables a routine called CheckOnOffTimes to be called from the
main loop. CheckOnOffTimes compares the present
time with the unit on and off times stored in EEPROM
memory. If there is a match, then a flag is set to either
turn the unit on or off, by sending it the appropriate X-10
command when the routine ControlX10Units is
called.
AN236
APPLICATION FIRMWARE
OVERVIEW
The firmware is divided into several different files to
facilitate adaptation of the code to other applications.
Following is a summary of the files associated with this
application note:
• x10lib.asmDefines X-10 functions.
• x10lib.incDefines X-10 constants and
macros.
• x10hc.asmMain application code for the
home controller.
• x10demo.asmExample code that shows how
to use the X-10 library macros.
• lcd.asmDefines the routines necessary
for driving the LCD.
• p16f877A.lkr Standard linker file for
PIC16F877A parts.
• p16f877A.inc Standard include file for
PIC16F877A parts.
Detailed descriptions of operation can be found in the
comments within the code listing. The X-10 library
functions and macros are described in the next section.
X-10 LIBRARY
A simple library of commands was developed and used
for the home controller. It can be used with little or no
modification in a user’s application. The library consists
of two files: x10lib.asm and x10lib.inc.
To use the library, a user need only understand the
function of the macros defined in x10lib.inc. The
macros greatly simplify the use of the library by eliminating the need for the user to understand every X-10
function in x10lib.asm. Examples of how the macros
are used are included in the file x10demo.asm.
The macros are explained below:
InitX10
This macro is used to initialize the peripherals that provide X-10 functionality. It must be called in the application program before any of the below macros will work.
It is used as follows:
InitX10
SkipIfTxReady
Before sending an X-10 message, it is necessary to
make sure that another message is not already being
sent, which is signified by the X10TxFlag being set.
This macro simply checks that flag and skips the next
instruction if it is okay to begin a new transmission.
Otherwise, there is a chance that a new transmission
will interrupt an ongoing transmission.
It is used as follows:
SkipIfTxDone
GOTO$-1 ;loop until ready to
;transmit next message
SendX10Address (House, Unit)
This macro is used to send an X-10 address for a particular unit. It requires two arguments, a house address
and unit address. The definitions for all house and unit
addresses are defined in x10lib.inc. To use this
macro to send the address for unit 16 at house P, one
simply types:
SendX10Address HouseP, Unit16
SendX10AddressVar
This macro is used to send an X-10 address, defined
by variables rather than constants. To send an address
contained in the user variables MyHouse and MyUnit,
the following sequence would be applied:
MOVFMyHouse, W ;contains a value
;from 0-16
MOVWF TxHouse
MOVFMyUnit, W;contains a value
;from 0-16
MOVWF TxUnit
SendX10AddressVar
DS00236A-page 8 2002 Microchip Technology Inc.
Loading...
+ 18 hidden pages
You need points to download manuals.
1 point = 1 manual.
You can buy points or you can get point for every manual you upload.