51 Microcontroller Based Projects
51 Microcontroller Based Projects
$10
Microcontroller
Based Projects
Solar Charger For Dusk-to-Dawn Use
Arduino-Based RF Controlled Robot
GPS- And GSM-Based Vehicle Tracking System GSM-Based Borewell Water Level Monitor
www.efyindia.com
EFYGROUP
ely electronics
efy group started in 1969 with the launch of electronics for you magazine, the love and support we received from indian electronics fraternity motivated us to launch many more products and services, some of them have grown into leaders in their respective categories...
electronics for you
india's #1 electronics magazine, leader in whole of south asia. read by half-a-million techies with a keen interest in electronics.
electronicsforu.com
india's #1 website for electronics engineers. 60% of its traffic is from india, the rest from all across the globe.
electronics bazaar
india's #2 electronics magazine and #1 b2b magazine, read by decision makers who either manufacture, buy or sell electronics goods or components.
efy awards
india's leading awards for electronics brands and organisations-26 are decided by the readers of efy magazine, and 4 by a knowledgeable jury.
elcina-efy awards
a joint effort with india's leading electronics association (ELCINA), these awards are decided through selfnomination followed by a jury review.
efy expo
launched in 2011, it is india's fastest growing electronics expo, and the only one that gets the engineering, manufacturing and trading communities under a single roof.
facebook.com/designelectronics
world's #1 facebook community for electronics engineers! 100,000+ design engineers are friends of this page. 66% are from India, the rest from all across the globe.
FOR ENQUIRIES, CALL ATUL AT: +91-1140596600 (EXT 228) OR 8800094211 EMAIL: [email protected]
MICROCONTROLLER-BASED PROJECTS
2nd Edition
EFY Enterprises Pvt Ltd First Published in this Edition, October 2010 Second Edition, May 2013
All rights reserved. No part of this book may be reproduced in any form without the written permission of the publishers.
ISBN : 978-81-88152-25-4
Published by Ramesh Chopra for EFY Enterprises Pvt Ltd, D-87/1, Okhla Industrial Area, Phase 1, New Delhi 110020 Typeset at EFY Enterprises Pvt Ltd
MICROCONTROLLER-BASED PROJECTS
2nd Edition
EFVGROUP
Technology Drives Us
Additional Resources
All the source codes of the projects in this book are available on www.efymag.com website. EFY has forum and websites for interacting with experts for problems related to electronics projects including the projects published in EFY. One of the popular sites is EFY's Electronics Design Community on Facebook. For microcontroller related topic you can visit http://electronicsforu.com/newelectronics/microcontrollers/ For various other topics related to electronics you can visit EFY forum on http://forum.electronicsforu.com/
forum.php
Electronics For You, South Asia's most popular electronics magazine is one of the prod of EFY Group. The Group currently offers a bouquet of specialised publications which include Linux For You, BenefIT, Facts For You and Electronics Bazaaralso enjoy a huge readership, and have managed to attract non-technical readers with their simple language and easy-on-the-eye design.
The Group also publishes directories and books, and organises several leading technol ogy events. Its web-portals, which include electronicsforu.com, efytimes.com, bpotimes. com, linuxforu.com and eleb2b.com, have become leaders in their respective categories. The EFY Awards, Open Source India (LinuxAsia), and Edutech Expo are three annual events organised by the group.
Overview
Hie summary of each project covered in this book is given below.
A radio-frequency identification (RFID) based access-control system allows only authorised persons to enter authorised persons are provided with unique tags, using which they can
This project is based on AT89C52 Microcontroller and DS12887 Real-Time-Clock chips. It also includes Programmable Peripheral Interface chip to program the switching operation of 24 electrical appliances.
control. It has four stereo input channels with a single stereo output with attenuation control, 80-step control for volume and 15-step control for bass, midrange and treble. The processors in this system control various functions of each channel and output them to the audio amplifier.
This AT89C2051 microcontroller-based solar charge controller has built-in digital voltmeter for battery indication on the LCD with various battery protection controls. This controller is suitable for 10-40W
solar panels.
Controllable triggering circuits are often needed to control the output voltage of SCR-/triac-based convert firing angle of SCR is manually controlled through two pushbutton switches. The P1C16F84 microcontroller is programmed to detect the zero-crossing instants of the two halves of the mains input cycles as well as the signals received via pushbuttons switches.
It is an AT89C51 microcontroller-based project capable of controlling the direction of rotation of a 6V DC controlled by push-button switches and indicated by LED as well as in the LCD display. Time settings are possible for forward and reverse running of the motor.
This project can monitor the charge level, voltage run time and temperature of your battery bank. It is based PIC16F877A microcontroller and a 16x2 LCD module.
on a three-digit dual-colour display. The number of cars is shown in red colour and the space available in green colour.
This versatile programmable school timer can be used to display real time clock as well as school bell timings 7-segment LED displays. It can store about 20 bell timings and activates the bell through a relay at every predetermined period. The project is based on MC68HC705J1A microcontroller.
and difficult for the judge to announce the winner. Here is a circuit based on AT89C51 microcontroller that can resolve the time-difference ambiguity and indicate correct ranking of all the participants on a 16x2 LCD module. It is designed for a maximum of eight participants playing at a time.
graphics or text.
bulbs/tubes.
The circuit presented here uses 16 common-anode, single-digit, alphanumeric displays to show 16 characters using AT89C51 microcontroller.
Table of Contents
Security Systems
1. Access Control System
17
2.
3.
4.
33
47
51
5.
6.
57
62 70
7.
Domestic Applications
8.
9.
75
87
95
103
Ill
115
120
125
128
132
137
141 144
148
Industrial Applications
22. Triggering Circuit for SCR Phase Control
23. Phase-Angle Control of SCR using AT89C51
155
161
168
175
183
188
193
198
206
213
216
221
Measurement
34. Digital Thermometer-Cum-Controller 23 1 237
243
247
253
258 264
Display Systems
41. Rank Display System for Race and Quiz Competitions
277
283
296
304 316
324 329
Robotics
48. Cellphone-Operated Land Rover
335
340 344 348
49. Automated Line-Following Robot 50. Arduino-Based RF Controlled Robot 51. PC-based Wireless Control for Toy Car
Security Systems
VINAYCHADDHA
is a prime concern in our day-today life. Everyone wants to be as much secure as possible. An access-control
Security
area.
5V
12V
DC POWER
VOLTAGE
REGULATOR
system forms a vital link in a security chain. The microprocessor-based digital lock presented here is an access-control system that allows only authorised persons to access a restricted
J2C MEMORY
SUPPLY
DOOR STRIKE
MCU
RELAY DRIVER
BUZZER
System overview
The block diagram of the access-control sys tem is shown in Fig. l.The system comprises a small electronic unit with a numeric keypad, which is fixed outside the entry door to con trol a solenoid-operated lock. When an au-
0 00
Fig. 1: Block diagram of the access-control system
PARTS LIST
Semiconductors:
ICl(Ul)
- MC68HC705KJ1
microcontroller
- ST24C02 I2C EEPROM - MN1280 reset stabiliser - BC547 npn transistor - 1N4007 rectifier diode
- Red LED - 7805 +5V regulator
LED1
Resistors (all 'A-watt, 5% carbon, unless stated otherwise): R1-R6 - 10-kilo-ohm R7-R9 - 1-kilo-ohm
thorised person enters a predetermined number (password) via the keypad, the relay operates for a limited time to unlatch the solenoidoperated lock so the door can be pushed/pulled open. At the end of preset delay, the relay de-energises and the door gets locked again. If the entered password is correct the unit gives three small beeps, and if the entered password is wrong it gives a longer beep of one second. The system uses a compact circuitry built around Motorola's MC68HC705KJ1 microcontroller and a non-volatile I2C EEPROM (ST24C02) capable of retaining the password data for over ten years. The user can modify the password as well as relay-activation time duration for door entry. This version of software enables use of the unit even without the I2C EEPROM. (However, without EEPROM, the password and relay-activation time duration will be reset to default values on interruption of the power supply.)
- 4MHz quartz crystal - Ceramic piezo buzzer - Power-supply connector - 2-pin male/female Berg
connectors
Hardware details
access control circuit. Its main components are a microcontroller, PC memory, power supply, keypad, relay, and buzzer. Microcontroller. The 16-pin MC68HC705KJ1 microcontroller from Motorola has the following features: Eleven bidirectional input/output (I/O) pins 1240 bytes of OTPROM program memory
Microcontroller-Based Projects
17
FRONT VIEW
-AAAArR1
"V7*7*7"
MN1280
10K
GND1
m
1
Vcc
R2 10K
VCC
'RESET
Lvww R3
10K
V* 7*
SW2
MMMM ~z ~Z
SW9
SW5 SWfl
SW12
yi ht ~z
SW1 1
SCANO SCAN1
SCAN2 SCAN3
U1
1 IC3 3 MN1280
12
CCD
MC68HC
C5 /5 "-T
3V 10V
SENSE2
16
JJ
4
10m dm
705KJ1
CON2
RL1= 12V, 20012
1C/0 RELAY
PB3SDA
D1
1N4007
4MHz
U2 (IC2)
7
IC4 REG1
7805
3 ST24C02 2
1
I
PRESS '2'
I
NEW 4-DIGIT
PASSWORD
THREE
15-stage multiple-function timer Out of eleven I/O pins, seven lines have been used for the keyboard, one for the buzzer, one for relay operation, ENTER 4-DIGIT and two (SCL and SDA, i.e. serial clock and serial data PASSWORD lines) for communication with PC EEPROM. I2C memory. A two-wire serial EEPROM (ST24C02) is used in the circuit to retain the password PRESS '1' and the relay-activation time duration data. Data stored remains in the memory even after power failure, as the ENTER 2-DIGIT RELAY memory ensures reading of the latest saved settings by ACTIVATION TIME (SEC.) the microcontroller. This PC bus-compatible 2048-bit (2-kbit) EEPROM is organised as 256x8 bits. It can retain data for more than ten years. Using just two lines (SCL and SDA) of the memory, the microcontroller can read and write the THREE bytes corresponding to the data required to be stored. BEEPS (Note. For details of the microcontroller and pro ON CORRECT RECEPTION gramming of PC EEPROM, you may refer to the article 'Caller ID Unit Using Microcontroller' published in issue of EFY and the article 'Remote-controlled April'99 Fig. 4: Flow-chart for chang Audio Processor Using Microcontroller' published in Sep. ing the relay-activation duration '99 issue of EFY also in Electronics Projects Vol. 20. The
Access Control System
18
pil
Fig. 5: Actual-size, single-side PCB for the access-control system without keypad (Main PCB)
information pertaining to PC EEPROM is available on STMicroelectronics'Website.) Power supply. The power supply unit provides a constant 5V supply to the entire unit. This is a conventional circuit using external 12V DC adaptor and fixed 3-pin voltage regulator 7805. Diode D1 is used in series with 12V input to avoid damage to the unit in case reverse voltage is applied by mistake. Keypad. A 12-key numeric keypad for password entry is connected to the mi crocontroller. The keypad is also used for modifying the default password as well as relay-activation time period. To economise on the use of I/O pins, we use only seven pins for scanning and sensing twelve keys. The keypad is arranged in a 3x4 matrix.
o
Fig. 6: Actual-size, single-side PCB for the keypad
arnatU gvc&vm.
There are four scan lines/pins, which are set in output mode, and three sense keys, which are used as input lines to the microcontroller. At 5ms interval, the microcontroller sets one of the four scan lines as low and other three scan lines as high, and then checks for the status of sense lines one by one. If any of the sense lines is found low, it means that a key at the intersection of a specific scan line and sense line has been pressed. Similarly, after 5 ms, the next scan line is made low and remaining three scan lines are taken high, and again all three sense lines are checked for low level. This way the microcontroller can check whether any of the twelve keys is pressed. Due to the high speed of the microcontroller, status of different keys is checked in less than 100 ms and a key press is detected and identified. As the keys are pressed manually by the user, this delay of 100 ms is not noticeable. The net result is that we save on I/O pins of the microcontroller by sacrificing almost nothing. Relay. A single-pole double-throw (SPDT) relay is connected to pin 9 of the microcontroller through a driver transistor. Hie relay requires 12 volts at a current of around 50 mA, which cannot be provided by the microcon troller. So the driver transistor is added.The relay is used to operate the external solenoid forming part of a locking
Microcontroller-Based Projects
19
o
i
CO
ErVCON-l OCTCKBO
J&Bi
Q)
;u3
1
SCN0|
SCN1 SCN2
m u
10)
,
Isen;
Mg>
sua
U!
device or for operating any other electrical device. Normally, the relay remains off. As soon as pin 9 of the microcontroller goes high, the relay operates. Buzzer. The buzzer is connected to pin 8 of the microcon troller. It beeps to indicate key and password entry. The buzzer gives a small beep whenever a key is pressed. In the case of a wrong password entry the buzzer gives a long beep, and in the case of a right password entry it gives three short beeps. The buzzer also gives short beeps as long as the relay remains energised.
SW1Q
*JU)
SCll
Operation
The complete design is based on two parameters: the password and the relay-activation time duration. Both these parameters can be changed without making any change in the hardware.The user can change these parameters any number of times using the keypad. The flow-charts for changing the password and relay-
POWER ON
READ PREVIOUS SAVED PASSWORD & RELAY ACTIVATION TIME & SAVE IN RAM
MAIN LOOP
YES
IS NEW KEY
FOUND?
NO
NO
GOTO
WRONG ENTRY'
TIMEOUT
YES
NO
DECREMENT RELAY
ACTIVATION TIME
RELAY OFF
NO
Fig. 9(a): Flow-chart for the access-control system, continued in Figs 9(b) and 9(c)
20
IS Q' REQUIRED
Testing
Actual-size, singleside PCBs for the access control system (without keypad) and that of the keypad are shown in Figs 5 and 6, respectively, with their compo
nent
GO TO WRONG
ENTRY
IS 'Q' KEY
PRESSED ?
GOTO WRONG
ENTRY
layouts in Figs
TEMPORARILY
IS KEY POSITION = 4 ?
7 and 8, respectively. During assembly en sure proper mating of Con 3 (female) on main PCB with SIP7 (male) connector mounted on trackside of keypad PCB. After assembling the unit, check various points without inserting the
= VALID PASSWORD ?
OF MASTER
PASSWORD ?
ry ICs as follows: Connect the ex ternal power source (a DC adaptor capable of delivering 200 mA at 12V DC), ensuring
SET MASTER ENTRY MODE
correct polarity.
GOTO WRONG
ENTRY
Fig. 9(b): Flow-chart for the access-control system, continued from Fig. 9(a)
Check input and output voltages of regulator 7805. Ensure that the in put voltage is 8- 12V DC from an external source. The output at pin 3 of the 7805
should be 5 volts. Check 5 volts at pin 6 of the MCU (ICl) and pin 8 of the memory (IC2) with respect to ground pin 7 of ICl and pin 4 of IC2. Check relay operation by shorting pin 9 of the MCU socket to 5 volts using a small wire. Normally, the relay would remain off. However, when pin 9 of the MCU socket is connected to 5V, the relay should energise. Check buzzer operation by shorting pin 8 of the MCU socket to 5 volts using a small piece of wire. Nor mally, the buzzer would be off. As soon as you short pin 8 of the MCU socket to +5V, the buzzer will produce a continuous beep sound.
Microcontroller-Based Projects
21
POSITION'
IS KEY
POSITION = 4 ?
INCREMENT
KEY POSITION
IS KEY POSITION = 5 ?
IS IT MASTER
1
CHECK FOR
0 PCO DE ENTRY
ENTRY ?
INCREMENT KEY POSITION
NO
IS IT MASTER ENTRY?
GOTO
IS 2 DIGIT NEW RELAY ACTIVATION
WRONG ENTRY
TIME ENTERED?
IS IT
PASSWORD ENTRY
IN PRG. MODE?
He I UHN AND
(30
TO
MAIN LOOP
MASTER
PASSWORD ? GOTO
WRONG ENTRY
ACTIVATION TIME
RESET EEPROM TO
PASSWORD ENTERED?
CONFIRM NEW
PASSWORD ENTRY, ('O' KEY REQD. TO
BE PRESSED
SET PASSWORD
ENTRY MODE
WRONG
ENTRY
Fig. 9(c): Flow-chart for the access-control system, continued from Fig. 9(b)
Physically check that only the capacitors of 27 to 33 pF are connected to crystal pins 2 and 3 of the MCU. For a higher-value capacitor, the crystal will not work.
Operation
Switch off the supply and insert only the microcontroller. Ensure correct direction and correct insertion of all the pins. Switch on the unit. On entering 1111 (default password) through the keypad, the relay will operate for around 10 seconds (default time duration). Each key-press gives a short beep. The buzzer will also beep for 10 seconds when the relay is 'on . On entering some other code, say, 9999, the relay should not operate and the buzzer should give a long beep. Change the password and the relay time. Check the operation with new password and relay activation period. Since there is no memory, the new password and relay time entered will be lost as soon as you switch off the unit.
22
The next time you switch on the unit, the password is again set to 1111 and the relay time to 10 seconds as default
parameters. Now insert the memory IC and change the password and the relay-activation time duration. On changing the same, the new password and changed relay-activation time are saved in the memory, which will be recalled at the next power-on. {Note. In case you have forgotten the changed password, you cannot operate the unit unless you install a new/blank memory.) Caution. Take care while connecting and using the live 220V wires.
The software
For software development the author has taken the help of Understanding Small Microcontrollers, MC68HC705KJ1 Technical Data book, and In-Circuit Simulator User's Manual. The development tools used include WinlDE software for KJ1 (including editor, assembler, simulator and programmer), in-circuit simulator (referred to as JICS board), and IBM PC with Windows OS and CD drive. DOS-based programs can also be used for software development. So if you are comfortable with DOS or have an old computer with limited hard disk capacity, you will still face no difficulty. Program development steps. You can write the software by using the following steps: 1. Read and understand the microcontroller's operation and instructions as well as the operation ofWinlDE software. (The help option of the software will clear most of your doubts.) You should also have a clear knowledge of the logic sequence of the end-product operation. For this, you can make a flow-chart. (Flow-chart for this access control system is shown in Figs 9(a)-(c). The corresponding software source code is given at the end of this article.) 2. Convert the flow-charts to source program in Assembly language making use of the instruction set of the microcontroller and assembler directives. You can use any text editor for writing the same or use the text editor of the Integrated Development Environment (IDE), which also includes assembler, simulator, and programming software. The Assembly-level program is to be saved in a file with .asm extension. 3. Assemble the source code, i.e. convert the source code (file with extension .ASM) into object code (machine language) using assembler/compiler tab of environmental setting in WinlDE. The object code will be in S19 format, i.e. the object code file will have extension .S19. You can also choose options within the dialogue box to generate listing file with extension .LST and .MAP file for source-level debugging. Thus if your source program was titled 'main.asm',you will get main.sl9, main.lst, and main.map files after successful assembly. 4. Simulate your program using the WinlDE software, JICS board, and the target board (the PCB with key board, memory, buzzer, etc). JICS board is connected to the computer through serial port (9-pin/25-pin) of the computer. The target board is connected to JICS board through a 16-pin DIP header cable. During simulation you may find that the program is not behaving properly. Assuming that your hardware is okay, the most probable reason is an error in writing the software. So look for faults in your logic/code and rectify them. You should be able to simulate complete functions without using the actual microcontroller chip. 5. Now, program the microcontroller with the developed and tested software. After programming the micro controller, insert it into the circuit and check all functions again.
Possible modifications
The circuit can be modified to have more than one password, advanced functions like real-time clock, computer connectivity via serial/parallel port to log data, and interfacing to a bar code reader instead of keypad for opening the lock. These additions may entail using a different microcontroller with more memory and I/O pins, but using essentially the same hardware configuration while writing a fresh program. Note. The MN1280 is attached to reset pin 9 of the microcontroller. If the MN1280 is not available, you can use only the RC circuit. Download Source Code: http://efymag.com/Access_Control_System-Oct02.zip
Microcontroller-Based Projects
23
MAIN.ASM
**************
PROJECT : ACCESS CONTROL (GENERAL) VERSION : 01 09-10-2k day STARTING DATE monday IC KJl HARDWARE 12 KEYSULEDUHOOTER\ 1MEMORY REC. 06-10-2k FEATURES : ENTER PASSWORD TO OPEN DOOR
cmp JOffh is ff then ;; goto read def val beq inc e_add inc mem ptr Ida mem ptr cmp #max_iic_bytes bne read nxt val bra main_loop
read_defval
;; increment e_add ;; increment ptr ;; is all 3 bytes read
org
OcOh
read defval:
/ !
Ssetnot
$include $include $include
jsr
read_de f_val
**** * * **
main LOOP
*************
14h 28h 5h
;; after every one tick over call sense_kbd ;; after every half second over call chk_set_beep ;; after every second check kbd_timeout\entry_time_ out
7h
2
main_loop:
loop
brclr
bclr
jsr
org
$include
300h
chk_hs_over
"iic.asm"
"macro.asm" "readkbd2 asm"
sec
Sinclude
include
half_sec, tim_status
chk_set_beep
one_sec, tim_status# ret_act-
start :
rsp
chk_l_sec lsec
brclr
bclr
*******************.******
one_sec, tim_status
init_port
port a
ddra
porta
;; initialise
;; program comes here after every second over *** DECREMENT KBD TIMEOUT /
********
ddrb
portb
CLEAR MEMORY \ INITIALISE
init_port init_port
port b
;; initialise
init_port
tst als_tstkbd 0 then timeout beq tst_eto entry time dec kbd_timeout
kbd_timecut
; if
; else decrement
; again chk ; if
kbd time
tst
kbd_timeout
kbd
TIMER
clear mem
**********
;; clear Ram
init_timer
chk raem
;; initialise timer
# 0 goto
;; check EEPROM
decrement
ENTRY
TIME
if bad_mem flag = 1 then goto read_defval if bad_mem flag = 0 then read values from eeprom
brset
program comes here when bad mem flag = 00 at power on e add i mem ptr = 00
;; check for entry time 00 ; if tst entry_time_out tst_eto: timeout = 00 then ; ret actlsec beq ret_actlsec ; else decrement dec entry_time_out
timeout
tst
**************
read_mem_val
entry_time_out
ret actlsec
read 2 byte password/entry time from EEPROM clr mem_ptr e add clr jsr get_eeprom_info ;; read read_nxt_val: from eeprom ;; save read value in e_dat Ida e_dat ;; set index reg as pointer ldx mem ptr ;; save read value in sta password, x
time bne
zero goto
ret_actlsec
. ***********************
***********
****************************
24
cpx
#3
;; if yes then goto
goto
main_loop chkbd brclr new_key_found, status, ret_ chkbd ; if new key found then set ; flag bclr new_key_found, status ; call actjsr act_kbd
kbd
is_it_mode
is__it_
ret_chkbd
; else goto main loop
jmp
main_loop
.*****************************
actkbd
*************
;
;; increment pointer
;; is it 4th
digit to be
;; if no then return
act_kbd:
sta
;; set key press timeout to 10 seconds Ida #10t lOsecs set key press timeout
keys entered
kbd_timeout kbd_pos
Ida
; check for valid code ; if not valid code then give long beep and clear buf f_pointer\kbd_timeout ; and return ; else clear sys_arm flag and give accp beep jsr ; call pack buffer pack_buff ; check for 4 key press ; if it is equals to password then
;
return
; if it is not equals to password then goto wrong
act_kbdl:
bne kbd2 jsr
cmp
#k_pgm_ok
; if no goto
; is
act_kbd2
act_
entry
; goto ret_actkbd
;; program here checks for po_password\po_entry_time flag ;; if po password\po entry time flag = 1 and if some other key press ;; accept pgm_ok_key then goto wrong entry ;; else goto chk_pgm_key brclr po_password,entry_ act_kbd2 status, chk4poet wrong entry jmp
chk4master_kw
; PROGRAM COMES HERE WHEN 4 DIGIT CORRECT PASSWORD IS ENTERED brset pgm_mode, status, ret_actkbd ; bset led_arm, led_port off led arm ; set entry_time_out Ida entry_time
sta
entry_time_out
entry_cver
brclr
po_entry_time,entry_
imp
; call entry_over
jmp
wrong_entry
KEY
.***************************
PROGRAM
PRESSED
it****************************
; cmp ehk_pgm_key: #k_program is pgm_ok key press ; if no goto act_ bne act_kbd3 kbd3 ; if yes set flag bset pgm_mode, status of pgm_mode ; clear all pointers clr buff_pointer
; here program checks for master key word ; if key sequence entered is equals to first 4 mater key word then ; e_key_word flag is set ; else ; long beep is heard as wrong entry
entry_status
kbd_timeout ret_actkbd
chk4master kw: Ida kbd_buff cmp #key_wcrd bne wrong_entry Ida kbd_buff+l cmp #key_wordl
bne
;; 14
to CO
wrong_entry
.************************** A***************************
*****
bset bra
;; check for password code ;; first chk for buff pointer is buffer pointer > 3 if yes then goto is_it_mode ;; else take first digit pressed in kbd buff,second
&
fourth
digit
in
; program comes here when unit is in programming node and 4 digit password enters ; if 4 digit entered H password then goto wrong entry ; else return Ida xxxx: kbd_buf f
kbd_buf f+3
ldx digit password enters
act_kbd3
buf f_pointer
;; is all 4
Microcontroller-Based Projects
25
password+1 wrong_entry
bne jmp
wrongentry
masterreseteeprom
entry ret_ac L kbd jmp quick_beep give small beep after every
key press
ret_actkbdl :
return
rts
c4pl : 6 program comes here when buff_pointer check is it es_entry_time 1 if yes then store key press in last_key _val set flag of po_entry_time return if no then goto chk4es_pw brclr es_entry_time,entry_
status, chk4es_pw
#04
; is
Ida
sta
jmp
inc pointer
buff_pointer
es_entry_time
brclr es_key_word, entry_status, iiml
and
; program comes here when key word entry is checked ; check is 5th key press = 8 then return ; else ;
if flag set then save key press in kbd_buff else goto wrong entry more_parameters :
brclr
status, chk4es_pw
;;
es entrytime, entry
Ida cmp
next digit is 5
kbd_pos #second_last_kw
wrong_entry
bset Ida
sta tst bne
bne jmp
ret_actkbd
iiml : ;; key 1 is for entry time ;; key 2 for password change Ida kbd_pos cmp #01 chk2 bne
chk4es_pw:
status, wrong_entry
es_password, entry_
cmp
#02
; if
; is
# goto chk3
set_new_password bset es_password, entry_status ; else set flag of es_password ; return bra retactkbd
chk3 :
WRONG ENTRY
************
*****************************
wrong_entry give long beep
goto entry over
jsr
long_beep
entry over
; Ida buff_pointer subtract buff pointer with 5 #6 sub ; set subtracted val as pointer tax ; read kbd_pos Ida kbd_pos ; save in kbd_buff+ptr sta kbd_buff,x ; increment pointer inc buff_pointer ; if pointer = 10 Ida buff_pointer ; if #10t cmp no then return bne ret_actkbd bset po_password, entry_status ; else set po_password flag ; return bra ret actkbd
jmp
entry_table
5t,2,4,6, 8,10t,12t,14t,16t,18t
d b
;; program comes here when buffer pointer is > 4 chk4parameters : ; if buff_pointer > cpx #05 5 then ; goto more_parambne more_parameters eters ; else increment inc buff_pointer
pointer
brclr
status, c4pl
es_key_word, entry_
program comes here when pgm_ok key press chck is po_entry_time flag = 1 if yes then set last key press as pointer take corresponding entry time from entry table ;; and save in entrytime ;; goto com_po_ret brclr po_entry_time, entry_ chk_po_status : status, chk4popassword bclr po_entry_time, entry_status
jsr bra
pack_et_buff
com_po_ret
Ida cmp
kbd_pos
;
po_entry_time
= 0
26
sta
buzzer_time_out
buzzer, buzzerport delay
lb wait:
brclr
status, chk4more
po_password, entry_
;
.****************************
SHORT BEEP
**************************************
bclr
Ida
sta
password kbd_buf f +1
kbd_buff+l in
;; this routine is called from accp_beep and when entry time # 0 ;; and after every key press ;; beep for small time ;; set buzzer_time_out = beep_time ;; wait untill buzzer time out # 00
password+1
; password+1
quick beep:
short_beep
jsr store_memory com_po_ret save changed parameter in eeprom
jsr jsr beep
entry over
Ida
sta
bclr
acc beep
sb_wait :
bsr
bsr tst
jmp
retactkbdl
; return
bne bset
;
r
t
wrong_entry
rts
**************************
SUBROUTINES
;;
****************
toggle_buzzer _pin:
brset buzzer
bset bra bclr rts
ret_tbp
buzzer, buzzer_port
short_beep short_delay
reset_buzzer : ret_tbp:
short_delay
short beep
jsr jsr
jsr jmp
short_delay
short delay
for
half
msec
3hort_beep
entry
****************************
***************************
entry_over:
bclr clr clr clr
rts
;; this delay is approximately = 499usec ;; 2i4i [(5)4+3)83]- 10998cycles ;; 998/. 5 = 499usec 5msec delay: #83t Ida temp sta temp dec wait_0 :
-.
tst bne
rts
t
temp
wait_0
pack buff
*************************** **************************
short_delay
sd wait
SHORT DELAY
**********
Ida add
sta
kbd buff
lsla
ora
sta
delay_temp
delay temp running ticks
Ida cmp
bne
rts
sd_wait
*****************************
long entry
**********
lsla ora
sta rts
give this beep when wrong entry giva a long beep for around 1 sec stay here till 1 second is over ticks 1 sec long beep Ida
Microcontroller-Based Projects
27
;; store 2byte password in eeprom brset storememory: bad_mem, status, retsm ;; clear clr e_add
**************************
retcsb
ret_csb short_beep
e_add
clr
mem_ptr
;; clear
mem_ptr nxt_data :
;; read data from RAM location
;; and store it in memory ;; set index register as ptr mem ptr ldx ;; read upper byte of pass Ida password, x word ;; save in e_dat sta e_dat
;; master key word received ;; if key entered in following sequence then reset EEPROm to default settings /; Key word is 142587 ;; default setting is that password entry will change to 1111
master_reset_eeprom:
bsr jsr
give acceptance beep jsr bra
read def val clrx Ida sta
read_def_val acc_beep
entry over
tx to eeprom
bne ret_sm:
increment address increment pointer is all 3 bytes written ;; if not goto nxt_data ;; else return
store memory
rdv_loop:
def_table, x password, x
..************** rts
Ida
tscr
#max_iic_bytes
rdv loop time
from
et
timint :
set tscr = 14h
#def_timer
;;
sta
;; increment ticks ticks running ticks ;; if buzzer time out is not zero ;; then decrement buzzer timeout
rts here program pack entry et buff+1 ;; first byte is in et buff ;; second byte is in et__buf f+1 ;; output to entry_time var
;;
_buf f \
;; for decimal selection multiply first number by lOt and then add with next number
pack_et_buf f :
tst
beq dec
chk_half_sec buzzer_time_out
et buff
#10t
Ida ticks chk_half_sec: compare ticks with cmp Kticks in hsec ;; ticks in half sec ;; if # goto chkbne chk4secover 4secover bset half sec, tim status ;; set flag of half sec over
;; chk4secover Ida ticks compare ticks with ;; ticks in one cmp #ticks_l_sec
rts
..***************************
DEFAULT table
*******
r >
def_table
; password db llh change defult password from 1234 to 1111 ; password+1 db llh ; entry time lOt db
org
7cdh
start
jmp
org
second
bne
turn
7flh
20h
7f8h
ret_timint
db
half_sec, tim_status ;;
org fdb
timint
7fah dummy
7fch
dummy
one_sec,tim_status
;; set flag
org fdb
running_ticks
ticks
;,- clear ticks
ret_timint:
rti
7feh
start
;; start beep when entry or exit time is not zero chksetbeep tst entry_time_out
28
IIC.ASM
;;
;; function : transfer 5 bytes from
IICJTX
iic_buff to iic
on return sda is low and scl is low variables : iic_counter, iic_buff (six bytes)
restart_tx:
bus
input
output
: iic_buff : to iic
genstart
#0a0h
byte_iic
restart tx
iicont
,-
;; input in a register
byte_iic:
ldx
bset
sda, iicont
; count of 8 bits
bes
r
bit_iic:
low)
; if no carry (msb
bset carry set msb high bra bclr sda_low: bsr pulse_scl :
sda_hi-9h :
sda, iicport
fisrt sda is cleared the scl is set high then make sda high keeping scl high on return scl is high and sda is also high
pulse_scl
sda, iicport delay_sraall
scl, iicport
gen_stop:
;
;
bclr
sda, iicont
delay
bset
delay_small
bset jsr bset bsr bset sda and rts and output
gen_start : sda as o/p
delay_small
scl, iicport
; leave with
; scl high
; is count over decx ; no next bit bne bit_iic ; leave sda high by sda, iicont bclr making it input bsr delay_small bsr delay_small bset scl, iicport bsr delay_small ; normal - clear clc carry brclr sda, iicport, byte_over /error if ackn not revd ; error - set carry sec ; bclr scl, iicport byte_over : set scl low bsr delay_small bsr delay_small bclr sda, iicport ; leave with sda as rts
bset
sda, iicont
delay_small
bclr bsr
sda, iicport
bclr
rts
get_eeprom_info iic_rx
generate start byte
transfer address byte with bit 0 set to 1 if memory write e_add also
input
delay_small :
nop
nop
nop
read one byte and save in iic_status generate stop byte input : iicbuff (one byte- address of iic)
output :
iic_status
iicrx:
restart rx:
set_eeprom_info iic_tx :
;; generate start condition ;; first set sda then scl then make sda
bsr Ida
gen_start #0a0h
low while
scl is high
byte_iic
restart rx
Microcontroller-Based Projects
29
Ida
; second byte as
mei
e_add
jsr add
restart _rx
byte_iic
brset bit
; read data
iic_0
gen_start #0alh
iic_l read_iic
byte_iic
; delay
read_iic
jsr
; sda is input on return
delay_small
read iicbyte:
read_iicbit:
; set scl high
t
ldx bset
jsr
#8
bclr
scl, iicport
scl, iicport
delay_small
scl, iicport
read_iicbit
e dat
; delay
bclr
bra
gen_stop
STDJ1.ASM
porta
portb
pdrb
tscr tcr
equ equ
05h
lOh
iscr copr
equ equ
VARIABLE.ASM
last_key_val
entry status
00 00
beep_time
equ
lOt
1 2 3 4 5
00 00 00 00 00 00 00 00 00,00,00
00
2 00
00 00 00
e_add
e_dat
iic buff
db db db
db db db
db db db
db db db
equ
00 00 00
14h
kbd_buf f
status
oo
db
equ equ equ equ equ
00 7
one_min
mins
00 7 6
5 4
00 122t 61t 00
5
4 3
00,00
;; stored
sys_arm
pgra mode
ticks_l_sec
ticks in hsec
password in eeprom
db
ticks
max_iic_bytes
db
00
;; stored
db equ
entry_time
in eeprom
key_scan_cntr
00
db
00
buzzer_tirr.e_out db
READKBD2.ASM
scan table:
key_scan_port
db equ
sense line
Ida
key_port
#30h key_found #40h #70h
? read
key port
and bil ora cmp
kbd sense
30
key_found
no
/
no_key_ found
ldx key_scan_ cntr output scan table to scan port one by one Ida scan_table X ora key_scan_port
sta
key_scan_port
ret_sense_line
key found
sta
kbd_temp
;com-
kbs over
rts
max_keys
t
equ
12t
Sif testing
kbd_temp
max debcunce
equ
clrx
Selseif
maxdebounce
equ
3t
kbd table, x ;if equal goto key
try_nxt_code
beq
cmp key_matched
Sendif
codel
bit bit bit
matched incx
dex register cmpx #max key3 maximum keys
//
pin
paO pal pa2 pa 3
;/ scanO / / scanl
scan2 /;
;if not equal goto
16 15 14
bne
try_nxt_code
Ofh
;;sense2
; ; code 0
pa 4 pa 5
13 12 11
irq
(pa3-pa5) (pa0-pa4) (pa0-pa5)
t x a
; compare it with
;load accumulator with cmp kbd_pos kbd pos beq ret_kbs cmp last_key last key bne new key inc same_key & inc same samekey Ida load same key cmp #max_debounce bne ret_kbs ret kbs Ida upd_ke y ;load last key kbdpos sta cmp #0fh beq ret_kbs bset new_key_found, status found in bra ret kbs ret kbs
code 1 / / code 2
//
16-11
16-irq 15-12
15-11
it with
//
code 3
/if equal
;; code 4 / / code 5
//
(paO-irq) (pal-pa4)
(pal-paS)
code 6
15-irq
code 7 ;/ code 8
// /; //
14-12 14-11
14-irq 13-12
code 9 code 1 0
(pa2-irq)
(pa3-pa4 )
/
i
key pro-
gram
;/
store it at kbd pos ; is it key release /yes-do not set flag /set bit of new key
code 12
13-11
(pa3-irq)
key pro-
gram ok
kbd table 00
01
db db
db
057h
06eh
05eh
code for
code for
code for
new_key
sta
clr bra
02
db
03eh
code for
03
db
06dh
05dh
code for
code for code for
ret_kbs
;load kbd pos
cmp bne
kbd_pos
1
04
db
$
05
;
db
03dh
06
change sense
*
/
db
06bh
05bh
03bh
code for
code for
code for
07
db
08
/
db
AQ U iJ
csl:
Ida and
sta
key_scan_ port
OfOh
db
067h
pgm key
/
key_scan_port
db
037h
pgm ok key
Microcontroller-Based Projects
31
PORTS.ASM
k_program
k_pgm_ok
scl
sda iicport iicont
equ equ
lOt
lit
key_port
scanO
scanl sean2
scan3
porta
2
3
0
1 2 3
16
15 14 13
portb
ddrb
II 7
10
; hoot Ocfh led senl def ddra equ senO scan3 scan2 scanl scanO ;; active low hooter 080h equ de_porta and led ;; at power on system armed led ;; X Och def ddrb XXX equ sda scl x X equ 00 def_portb
4 5 irq
porta
12 11 ; irq
equ
equ
6 40h
porta
MACRO.ASM
$macro
chk mem
bne
next mm
bclr jsr Ida = OaOh jsr bcc then return bset then set flag
Smacroend
11 intialise timer
byte_iic
cm over
$macro
bad_mem, status
if carry set
cli
interrupt
II intialise porta , portb Smacro init_port
cm_over
bad mem Smacroend
;; clear memory from OcOh
Smacroend
port
Ida
sta
*def_%l
%1
Smacro
ldx #0c0h next mm
clear_mem
; clear memory
Smacroend
clr incx
,x
32
VIJAY KUMAR P.
Here's
a microcontroller-based code lock that can be used for preventing unau thorised access to devices or for solenoidoperated locks/electrical devices. This code lock is built around Microchip's PIC16F84 microcon troller. Different passwords are used to access/ operate different devices. So the code lock can be used as a multiuser code lock, where the users can access respective devices by entering the device number followed by the password. The password
can be changed by the user and no external back up supply is needed to retain the password. The password length for each device can be between 4
and 15 digits, as desired by the user. A buzzer has been added to provide suitable feedback with respect to the data entered via the Working model of PIC 16F84-based coded device switching system
keypad. The number of beeps indicates whether the data has been entered correctly or not. When anyone trying to access the device enters the incorrect password
three times, the circuit sounds an alarm.
BUZZER
KEY BOARD
RELAY1
PIC 16F84
SOLENOID OPERATED
RELAY2
LOCK/ELECTRICAL EQUIPMENT
BBS
RELAY3
The alarm can be configured to work in two modes: auto-reset and latch-up. In the auto-reset alarm mode, all the keys pressed are ignored and the buzzer keeps beeping continu ously for one minute, J ' and thereafter the code lock resets automatically. However, if you
want additional secu rity, you can enable the latch-up mode. In this mode the code lock never switches to the normal mode from the alarm mode and the only way to reset the code lock is to interrupt the power. When not in use, the code lock goes 'nto sleep mode, and it
RELAY4
5V REGULATOR
12V DC SUPPLY
Microcontroller-Based Projects
33
RA2
RA3
TU"
18
17 16
15
RA1
RAO
wakes up if any key is pressed.This feature reduces the power consumption by the microcontroller. The main features of PIC16F84 microcontroller
are:
RA4/T0CKI
MCLR
3> o
k
OSC1/CLKIN
OSC2/CLKOUT
00
01
>
14 13 12 11
10
PARTS LIST
Semiconductors:
1. Program and data memory are in separate blocks, with each having its own bus connecting to the CPU 2. Reduced instruction set controller (RISC) with only 35 instructions to learn 3. 1024 words (14-bit wide) of program memory RB4 4. 68 bytes of data RAM 5. 64 bytes of data EEPROM 6. 8-bit wide data bus 7. 15 special-function registers (SFRs) 8. 13 input/output (I/O) pins with individual direction control 9. Code protection 10. Built-in power-on-reset, power-up timer, oscillator start-up 11. Power-saving sleep mode
Circuit description
Fig. 1 shows the block diagram of the microcontroller-based code lock. Pin diagram of PIC16F84 microcontroller is shown in Fig. 2. - 220-ohm Basically, the circuit (shown in Fig. 3) comprises PIC16F84 micro - 2.2-kilo-ohm (IC2), 4x3 matrix keyboard, relays and buzzer. controller - 1-kilo-ohm PIC16F84 is an 8-bit CMOS microcontoller. microcontroller. The Its internal circuitry reduces the need for external components, thus 470|iF, 35V clcctrolytic reducing the cost and power consumption and enhancing the system - 0.1 ceramic disk C4, C5 - 33pF ceramic disk reliability. The microcontroller has two ports, namely, Port A and Port B. Out of the available 13 bidirectional I/O pins of Ports A and Miscellaneous: RL1- RL4 - 12V, 285-ohm, lc/o relay B, seven pins are used for keyboard interfacing, four pins are used to (OEN58 type 1C) drive the relays corresponding to the four devices and one pin is used - 4MHz crystal XTA, to read the jumper status for selecting the alarm mode. One can reset - Piezobuzzer PZ1 the microcontroller only by interrupting the power. S1-S12 - Push-to-on tactile switch The password is stored in the internal 64-byte EEPROM memory of the microcontroller at addresses 0x00 through 0x3F. The memory can be programmed and read by both the device programmer and the CPU when the device is not code protected. It is non-volatile and can retain data for more than 40 years. Four special-function registers are used to read and write the EEPROM. These registers are named as EECON1, EECON2, EEDATA and EEADR, respectively. Register EEDATA holds 8-bit data for read/write and register EEADR holds the address of the EEPROM location being accessed. Register EECON1contains the control bits, while register EECON2 is used to initiate the read/write operation. Oscillator. The internal oscillator circuitry of the microcontroller generates the device clock. The microcontroller can be configured to work in one of the four oscillator modes: 1. External resistor-capacitor 2. Low-power crystal (oscillation frequency up to 200 kHz) 3. Crystal/resonator (oscillation frequency up to 4 MHz) 4. High-speed crystal/resonator (oscillation frequency up to 10 MHz) In this circuit, the oscillator is configured to operate in crystal mode with a 4MHz crystal along with two 33pF capacitors.
R1 R2 R3-R5 R6-R10 R11-R14 Capacitors: CI C2,C3
- 10-kilo-ohm
- 4.7-kilo-ohm
34
In
2
QOOOO J
'WA-
-MflJ
Fig. 4: Actual-size, single-side PCB layout for PIC 16F84basedcoded device switching system
Reset circuit. The built-in power-on reset cir cuitry of the microcontroller eliminates the need for the external power-on reset circuit. In the
Microcontroller-Based Projects
35
POWER ON
O ZOm
l> CD
n ocd
gn
S*
j-v
203
W#
oo
CO ( 8) CJl
o ~e o o
-*
SO
x) :o : o ooo oO ( rr r c c l E M
s o
o
N)
o o
xp-n
I I
zct7
Zip
JD I 2
SHORT BEEP
Beep once
RST ALARM
3>3>U
NJ CJ -t (Q \)
dff <_k
lXjCH
LI
Call
KEY SCAN
u
Goto Lock/unlock
000000000
pi cl 6f 84
IC2
YES
LCK UNLCK
YES
CO ~
CHG PSWD
S08U1
D n CO CD
CJ
o n
NO
C)
CD
YES
RL1
RL2
RL3
PL 4
beep
U
I-d/0
B
Z-d/0
O
"
D
_TH
o'
\
ooo oo0 oo z z 5 ? s ? n r~ o n r~ o n
O
\ \
E-dx0
O
\
O 0
Z
II
b-d'O
Z
\
s Is<o
Goto
BEGIN
I!
circuit, MCLR pin is tied to VDD through resistor R1 ( 10 kilo-ohms) to enable power-on reset. The internal Fig. 6: Flow-chart of the main program power-up timer (PWRT) provides a nominal 72ms delay from power-on reset. This delay allows VDD to rise to an acceptable level when the microcontroller is powered
36
LCK_UNLCK
Lock/unlock
GETCH NO
Get Channel /
User No.
VERFY PSWD
Verify User
Password
BEEP THRICE
Beep three times
on verification
success
on. The oscillator start-up timer (OST) provides 1024-oscillator cycle delay after the power-up timer delay is over. This ensures that the crystal oscillator has started and is stable. Power supply. The 12V DC supply for the circuit is ob tained from a 12V adaptor with 500mA rating. Any other source such as a 12V lead-acid battery can also be used. This 12V DC is used for operation of the relays used in the circuit. The regulated +5V supply for the microcontroller is derived using regulator IC 7805 (ICl). Diode D1 protects the circuit from reverse supply connections. Capacitor Cl filters out the ripples present in the incoming DC voltage. Keyboard. Hie 12-key matrix keyboard comprises 12 tac tile pushbutton switches arranged in four rows and three col umns as shown in Fig. 3. Data is entered via this keyboard. Ports A and B of the microcontroller are bidirectional I/O ports. Three lines of Port A (RAO through RA2) are used as the output-scan lines and four lines of Port B (RB4
YES
through RB7) are used as the input-sense lines. Port B of IC2 has weak internal pull-ups, which can be enabled through the software. This eliminates the need for connect ing external pull-up resistors to pins 10 through 13. Resistors R2 through R4 protect Port A's output drivers from shorting together when two keys of the same row are inadvertantly
pressed simultaneously.
In the scanning routine, initially all the scan lines are made low and it is checked whether all the keys are in re leased state. If all the keys are in released state, the processor is put into sleep (power-down) mode. The interrupt-onYES change feature of Port-B pins RB4 through RB7 is used to Switch ON the corresponding wake up the processor from sleep. relay When any key is pressed, one of the sense lines becomes low. This change in the pin status causes an interrupt to wake BEEP TWICE up the microcontroller (IC2) from sleep. Now each scan line is made low while keeping the re maining scan lines in high state. After making a scan line Goto YES low, the status of the sense lines is read. If any of the sense BEGIN U lines is found low, it means that a key at the intersection of r 1 the current scan line and the low sense line has been pressed. Goto If no key is found to be pressed, the next scan line is made Wrong key entry Switch OFF the and again scan lines are checked for low state. This way low WRNG ENTRY | corresponding | relay all the twelve keys are checked for any pressed key by the microcontroller. Since mechanical tactile switch keys are used, pressing BEEP_TWICE of a single key may be considered by the microcontroller as pressing of many keys due to the bouncing of the keys. To avoid this, the processor is made to wait up to a debounce Goto delay of 20 ms during the pressing or releasing of a key. M BEGIN Within this debounce delay, all the bounces get settled out, Fig. 6(a): Flow-chart for locking/unlocking the code lock thus debouncing the key. In sleep (power-down) mode, the device oscillator is turned off and the microcontroller is placed in its lowest-current consumption state. Also note that the miX.
Microcontroller-Based Projects
37
Change password
CHGPSWD
password one by
User No.
crocontroller's I/O pin status remains unaltered during sleep mode. Relays. To turn on/off the equipment or to lock/unlock the
VERFY PSWD
Verify User
YES.
CONFRM PSD
Is confirmation
solenoid-operated
NO
CONFRM ERR
success ?
START_EE_WR
Password
provid
BEEP THRICE
Beep three times
on verification
success
BEEP TWICE
Goto
Call
KEY_SCAN
Goto
Is CHG pressed ?
password contains
YES
r
one
|WRNG
ENTRY
ed one for each channel. Since the current-driv ing capacity of the port pins of PIC16F84 (IC2) is not enough to drive the relays directly, transistors T2 through T5 are used to boost the current to drive re lays RL1 through RL4, respectively. The bases of transistors T2 through T5 are connected to PortB pins 6 through 9 (RBO through RB3) through base-current-
limiting resistors R7 through RIO, Fig. 6(b): Flow-chart for changing the password of the code lock respectively. The equipment or solenoid-operated locks can be connected to the normally open (N/O) contacts of these relays. Diodes D2 through DS are used as freewheel clamp diodes. The series combination of a red LED (LED1 through LED4) and a current-limiting resistor (Rll through R14) is connected across each relay coil. Buzzer. Pin 2 (RA3) of IC2 is connected via resistor R6 and transistor Tl to piezobuzzer PZl.The buzzer gives a short beep when any key is pressed. In the case of a wrong data entry, the buzzer gives a long beep to indicate the error. On successful password verification, it gives three short beeps, and after successful password change, it gives two short beeps. When a wrong password is entered consecutively for three times, the buzzer
sounds an alarm.
VRFY PSWD
Verify User
GET CH NO
COPYTO RAM
Copy password
corresponding to the
~r~
channel to
RAM_BUF1
Password Subroutine
Get Channel
number Subroutine
Subroutire
diagram. Then
connect the main PCB to the ma trix keyboard PCB using 7-pin SIP connectors and wires, ensur ing one-to-one connection be tween the two PCBs. Connect the external 12V DC supply with
Is
YES
r 1
Go to Wrong key entry WRNG ENTRY
Take password
NO
n SLEEP mode
by digit
ity, without in serting the PIC microcontroller into the socket, and follow these
steps:
YES
Any mismatch
YES
1r
u DEBOUNCE u
Decrement no of
Attempts
NO
1
s 3 attempts
over ?
>-
YES
Is
Goto
BEGIN
J
LATCH ALARM
called program
1. Check whether +5V is available at output pin 3 of regulator IC1 (7805). 2. Now check the availability of +5V at pins 4 and 14 of IC2 before placing IC2 into the socket. 3. To check the buzzer op
eration, connect
reached
Goto
RST ALARM
pin 2 of IC2 socket to +5V available at pin 3 of ICl. Now the buzzer should
beep continu ously. 4. Check the operation of the four relays by connecting pins 6 through 9 of IC2 socket one by one to +5V. 5. Before placing jumper JP1, check the voltage at pin 3 of IC2 using a multimeter. The meter should read +5V or logic 1. Now on placing jumper JP1, the meter should read 0V or logic 0 at pin 3. Now remove the supply and insert the programmed PIC16F84 microcontroller into the socket and switch on the supply. After power-on, the buzzer beeps once to indicate that the microcontroller is ready to take the user
Fig. 6(c): Flow-chart for password verification, device (channel) selection and key scanning
Microcontroller-Based Projects
39
data. Now you can lock/unlock or change the password as described below. Initially the four channels can be ac cessed using the default password '1234.'
Operating procedure
For unlocking/switching on the equipment. 1. Press the lock/unlock button (L/U) on the keypad.
2. Now enter the device number by pressing the button corresponding to the device number.The valid device numbers are 1to 4. For example, if you want to access device No. 1 (RL1), press button '1.' 3. Now enter your password digits one by one. Note that the default password is '1234.' 4. Hie buzzer gives three short beeps to indicate successful verification of the password. If the entered password is incorrect, the buzzer gives a long beep to indicate error. To try again, repeat the procedure from step 1. 5. If the entered password is correct, you can unlock or switch on device No. 1 by pressing button '1.' When you press the key, the relay corresponding to this device gets energised and it remains in this state until you lock/ switch it off again. For locking/switching off the equipment: Follow the aforesaid steps 1 through 4 and press button '0.' Now the relay corresponding to the device you want to turn off de-energises and it remains in this state until you unlock/switch it on again. For changing the password: 1. Press the password change button (CHG) on the keypad. 2. Now press the device number. 3. Enter your current password. 4. On successful verification of the password, the buzzer gives three short beeps. If the entered password is wrong, the buzzer will give a long beep. Now if you want to try again, repeat the procedure from step 1. 5. Enter your new password. The length of the password should be between 4 and 15 digits. 6. End the password entry by pressing again CHG button. 7. Again enter your new password for confirmation. On successful confirmation, your new password gets replaced by the old password and the buzzer beeps twice to indicate successful password change. In case the password entered for confirmation is wrong, the buzzer gives a long beep to indicate error and the old password remains unaltered. So whether you're locking, unlocking or changing the device, wrong password entry makes the buzzer to give a long error beep and the users are required to start afresh from step 1. In case you forget the password of the device, it can't be controlled until you reprogram the microcontroller. Mode of operation. When anyone fails to enter the correct password in three attempts, the code lock circuit switches to alarm mode and the buzzer starts beeping continuously. All the keys pressed (for further attempts) are ignored by the code lock during alarm mode. Placing the jumper between pin 3 (RA4) of IC2 and Ground enables the auto-reset alarm mode. Whereas removing the jumper enables the latch-up mode (see Fig. 3). If the auto-rest alarm mode is enabled, the code lock automatically resets after about one minute. If the latch-up alarm mode is enabled, the code lock never resets from the alarm mode until the user manually resets it by interrupting the power. Note that in the alarm mode the status of device-controlling relays remains unaltered.
Software
The software is written in Microchip's Assembly language. Fig. 6 shows the flow-chart for the program. In the flow-chart, important labels and subroutine names used in the program are also mentioned within the correspond ing process boxes to enable easy understanding of the program. For instructions, you may refer to the PIC16F84 datasheet. Hie code is compiled and hex file is generated using MPLAB IDE. You can generate the hex file by using the MPASM.exe assembler also. The hex file generated can be burnt into the microcontroller using any PIC programmer that supports PIC16F84. We've used here PICburner to program the PIC. It was published in EFY's Sept. 2002 issue. DownloadSource Code: http://www.efymag.com/admin/issuepdf/PIC16F84%20Device%20Switching.zip
40
PIC16F84-Based Coded Device Switching System
CODLOCK.LST
MPASM 03.20 Released
CODLOCK ASM
LINE
7-1-2004 16:25:54
PAGE
1
212F
0004
00049
ORG 0X212F
SOURCE TEXT
212F 0004
2130
00050 00051
00052
00001
00002
00003
CHANNEL CODE LOCK" / PROCESSOR PIC16F84 00005 ;Oscillator:XT 4MHz crystal Oscillator 00006 ; Default passward:1234 for chl ch4
00053
00004
00007 00008 ; Author: VIJAM KUMAR. P 00009 / EMAIL: vijay_kun p(? yahoo, co. in 00010
00011
00054
00055
00056
00057
00058
00012 00013
00014
00059
00060 00061
00015
INCLUDE
"?16f84.inc"
; Header file
inclusion directive.
00001
00002
/
00062
OOOOOOOC
variables
DEL_COUNTl EQU 0X0C /Counters used delay. DEL COUNT2 EQU 0X0 D DEL_COUNT3 EQU 0X0E KEY_IN ECU 0X0F /Holds the value of pressed key. KEYJO EQU 0X10 /Holds key no. SCAN_CODE EQU 0X11 /Holds scan
to obtain software
LIST
P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc. LIST
00063 00064
00136 00016 00017 00018 ; NOTE: This header file consists of deflations of all special function
00019
/
OOOOOOOD OOOOOOOE
OOOOOOOF
00065 00066
00067
00000010
00000011
00068
00069
code.
00020 00021
00022
00000012
00000013
00070
00071
00023
tings
**
00000014 00024
00025
LIST P=PIC16F84
/processor type
00072
00073
KB_TEMP ECU 0X12 /Temporary variable to hold key value RAMJUFIJW EQU 0X13 /Pointer reg to RAM_BUF1 RAM_BUF2_PNT EQU 0X14 /Pointer reg
to
RAM_BUF2
00000015
PIC16F84A
2007 0001
00026 00027
_ CON FIG
00000016
00074
00075
2100
_CP_ON & 00028 00029 ; SETTING : XT oscillator mode, power up timer ON, code protect on, watch dog 00030 / timer OFF 00031 00032 00033 ; Defining Default passward. First tine after programming 16f84 you need 00034 / to use default passward 1234 for all 4 channels. 00035 ; 00036 00037 ORG 0X2100 ;Starting adderss of chl's passward 00038 DE 1,2,3,4 /default passward for
_XT_OSC _WDT_OFF
&_PWRTE_ON
&
00000017
PSD_DIGIT EQU 0X15 /Holds passward digit N0_0F_attenpts EQU 0X17 * Holds no
of attenpts
00000018
00000019
00076
00077
00000020
00000021 00000022 00000023
00078
00079 00080 00081
---
00000024
00082
00083
TEN_SEC_CNT EQU 0X22 ONE HIN~CNT EQU 0X23 NO_OF_DlGITS EQU 0X24 /No of digits
in a passward
ch 1
00000030 00039
ORG 0X210F DE D'04* /Default passward length =
00084 00085
00086
00040
00041 00042
00000040
00087
00088 00089
4 digits
2110
ORG
ch2's passward
00043
00044 00045 00046 00047 00048
00090 00091
211F
0300
211F 0004
0D00
2823
digits
passward
DE 1,2,3,4 /Default passward for ch 3
you switch on the coce lock circuit. 00092 00093 ORG 0X0000 /Reset vector 00094 GOTO START 00095 00096 ; 00097 j: Interrupt service routine ISR for timerO starts from here. r This ISR is encountered for every 00098 ;
5Dms.
Microcontroller-Based Projects
41
00099
00100 00101
002A 2875
002B 3812
00157
00158 00159
0034 0034
upts
138B
00102
00103
ORG 0X0004 /Interrupt vector BCF INTCON,GIE ;Dissable all interBTFSS INTCON, T0IF ;Is T0IF 1? ;If No return form ISR RETFIE BCF INTCON, T0IF ;If YES clear it DE:FSZ TEN_SEC_CNT, F ;Decrement TEN_SEC_CNT and test if 0 GOTO LOADJTMRO ;If !0 goto
00160
00161
LCK_UNLCK KBJTEMP, W ;KBJTEMP >W >W XORLW OXOB /W XOR 03 BTFSC STATUS, 2 /Else Is CHG key is
MOVF
pressed ?
0035 1D0B
002F 2831
0030 2826
00162
00163
CHG_PSWD ;If yes goto CHG_PSWD GOTO WRNG_ENTRY /Give a long error beep on wrng key GOTO BEGIN /Else simply LOOP_HERE
GOTO
00164
LOADJTMRO, if 0,
00165
00166
003B 2810
003C 2825
003D 303F
00109
00110 00111
00112
DECFSZ ONE_MIN_:NT, F ;Decrement ONE_MIN_CNT and test if 0 ;If !0 goto GOTO LOAD_TEN_SEC ~
00113 00114
00115
RETFIE
00167 00168 00169 00170 00171 00172 00173 00174 00175 00176 00177
GOTO~BEGIN
LONG BEEP
00116
00117 00118 00119 00120 00121 00122 00123
; Count for
use.
INITIALISATION SUBROUTINE
00178
00179
This part of the program intialises the required ports and SFRs.
00180 00181
00182
0183
/Switch to bankO /Clear PORTA CLRF PORTB /Clear PORTE BSF STATUS, RP0 /Switch to bankl
INIT
CLRF STATUS
0585
CLRF
PORTA
0035
0036
0806
39F0 3A:0
1D03
00183
00184
MOVF PORTB, W
reg
ANDLW
0018 0086
0019 3010 001A 0085 001B 3007
MOVLW B ' 11110000 /Sets pins of portb as iiiioooo MOVWF TRISB /Where i=input & o=output MOVLW B' 00010000' ;Set3 pins of
nibble
0037
0038
0185
00186
XCRLW >W
001C 0081
001F 138B
0020 3003 0021 0097 0022 0008
porta as oooioooo MOVWF TRISA MOVLW 0X07 /Enable weak internal pull ups, MOVWF OPTICN_REG ?asigns prescalar to TMR0 with 1:256 ratio. BCF STATUS, RP0 /Switch to bank 0 BSF INTCON, RBIE /Enable portb int cn change BCF INTCON,GIE /Dissable all the
0039 2833
003A 205C 003B 0806
003C
00187
00188 00189 00190
KEY_RELEASE
CALL
DE30UIICE /If yes debounce the
00191
00192 00193 00194 00195
00196 00197 00198
00199
/Clear previous mismatch condition BCF INTCON, RBIF /Clear RBIF SLEEP /Put the processor in Sleep mode
ANY_KEY MOVLW B' OOOIOOOO' /Clearing PORTA pins but ANDWF PORTA, F /Retaining the RA4
status
MOVF PORTB, W
interrupts 3 MOVLW 0X03 /Max no of atempts MOVWF NO_OF_ATTEMPTS RETURN /Return from sub routine
003E
3010
003F 0585
0040
/PORTB -->W reg XORLW 0XFF /W XOR 0XFF >H reg BTFSC STATUS, Z /Is any key
0023 2013
/If no
goto
ANY_KEY
0024 216C
00147 00148
0044
00200
key
0025 1185
00149
/Switch off
00201
00202
MOVLW
MOVWF to 0
KEY_NO
0047 3010
0048 0585
0026 2033
0027 0092
00206 00207
00208 00209 00210
00155 00156
/Retaining the RA4 status CALL SCANJTABLE /Get the scan code MOVWF SCAN_CODE /Move SCAN_COD2 to W reg ANDLW B' 00000111 ' /Mask 5 MSB's IORWF PORTA, F /w > porta while Retaining the RA4 status
42
004D 0806
004E 39F0
00211 00212
00213
00214
004F 008F
0050 0811
MOVF PORTB, W ;Read PORTB to W reg B' 11110000' ;Mask the lower nibble of PORTB MOVWF KEY_IN ;Move the key value to
ANDLW
00264 00265
00266
DECFSZ
DEL COUNT2,F
key_in
MOVF SCAN_CODE,W /SCANCODE W reg
>
0075 20A1
ROUTINE FOR LOCKING /UNLOCKING When you pres3 L/U key the program
0051 39F0
0052 060F
00215
00216
ANDLW
B' 11110000' ;Mask lower nibble of scan code XORWF KEY_IN,W /compare read key
00217 00218
00219
with scan code BTFSC STATUS, Z ;Test for Z flaq GOTO RET ;If Z=1 goto RET else
0076 20B4
0077 0078 0079 007A
0398
00274
00275 00276 00277 00278
continue
0056 0810 0057 3C0C
0058 1D03 0059 2847
LCK_UNLCK CALL GET_CH_NO /Get channel /user no CALL VRFY_PASWD /Call verify password
subroutine DECF CH_NO,F /Decrement CH_NO MOVF CH_NO,W / CH_NO >W reg ADDWF CH_NC, F /CH_N0 x 2 ~>CH_N0 MOVLW 0X03 /Rese: no_of_attempts to 3 MOVWF NO_OF_ATTEM?TS CALL BEEP_THRICE /Now the buzzer will
00220 00221
00222
00223
IHCF KEY_NO,F /Increment key no MOVF KEY_N0,W ;KEY_NO >W REG SUBLW 0X0C ; W 12 >W BTFSS STAT'JS, Z ;Test whether key
005A 2833
00224
005B 216C
005C 0810
005D 0008
no=12th key GOTO FIND_KEY ;If no goto FIND_KEY GOTO KEY_SCAN ;If yes goto start new scan RET CALL SHORT_BEEP ;Now the buzzer will beep once MOVF KEY_N0, W /Pressed Key no>w RETURN /Return from key scan
00279 00280
00281
beep 3 times
00282
00283
SWITCH_RELAY CALL KEY_SCAN /Call Key scan subroutine MOVWF KB_TEMP /Store the key val in
KB_TEMP XORLW 0X01 BTFSC STATUS, Z /Is key 1 is pressed ? GOTO RLY_ON /If yes goto RLY_0N MOVF KB_TEMP,W XORLW 0X00 BTFSC STATUS, Z /Is key C is
pressed ? GOTO RLY_OFF /If yes goto RLY_OFF GOTO WRNG ENTRY /If no goto
LOOK UP TABLE FOR KEY CODE This look up table is used by the
keyboard
00284 00285
00286
00233
005E 0810
005F 0782
0060 34E6 0061 34E5
0062 34E3
SCAN_TABLE MOVF KEY_NO,W / KEY_NO >W reg ADDWF PCL, F /PCL+W ~>PCL reg
0088 2178
0089 2826
00293
00294
WRNG_ENTRY RLY_0N CALL RLY_ON_TBL /Call RLY_0N table CALL BEEP_TWICE /Now the buzzer will
beep twice
GOTO BEGIN
RETLW
B' 11100110'
/Goto BEGIN
00241
00242
008A 2097
0D8B 2178
00295 00296
00297 00298 00299 00300 00301 00302 00303 00304
00305
RLY~0FF
code for
0063 34D6
0064 34D5
00243
00244
RETLW key3
RETLW key4
008C 2826
RLY OFF CALL RLY OFF TBL /Call table CALL BEEP_TWICS ;Uow the buzzer will beep twice GOTO BEGIN /Goto BEGIN
code for
RELAY_ON_TABLE
0065 34D3
0066 34B6
00245
00246
008D 0818
0D8E 0782
key9
006B 3473
00251 00252
00253
RETLW B' 01110101' /Scan code for L/U key RETLW B' 01110011' /Scan code for CHG key
00310
00311 00312
00313
00314 00315
00316
00317
DELAY FOR DEBOUNCING THE KEY
RELAY_OFF_TABLE
RLY OFF TBL MOVF CH N0,W ADDWF PCL, F BCF PORTB, 0 /Switches OFF chl's relay RETURN BCF PORTB, 1 /Switches OFF ch2's relay
RETURN BCF PORTB, 2
00254 00255
00256 00257 00258 00259 00260 00261 00262 00263
0397 0818
0398 0782
0099 1006
2870
DEBOUNCE MOVLW 0X1C MOVWF DEL_:OUNT2 KB_DLOOPl MOVLW 0XF0 MOVWF DELJTOUHTl KB DLOOP DECFSZ DEL C0UNT1,F GOTO KB DLOOP
039D 1106
00325
relay
Microcontroller-Based Projects
43
RETURN
BCF PORTB, 3
relay RETURN
NOTE: the NO_OF_ATTEMPTS will not be decremenred if the jumper is placed between RA4 and Gnd and hence will not switch into the alarn mode.
OOB4 20EB
00380
OOB5 3030
OOB6 3E0F OOB7 0084
00381
00382
00383
VF.FY_PASWD CALL COPY_TO_RAN /Call COPY_TO_RAM sub routine MCVLW RAM_BUF1 ADDLW OXOF /Initialize FSR to MOVWF FSR / the end of RAM_BUF1
00333
00334
00384
00385
00386
GET CH NO CALL
00339
00340
00341
0818 3C04
1C03 2831
00AA 20AD
00AB 0099
OOAC 0008
/ [W] > CH_NO 0X00 BTFSC STATUS, Z ;Is entered key is 0 ? GOTO WRNG_ENTRY /If yes WRNG_ENTRY >W MOVF CH_NO,W ;If no CH_NO SUBLW 0X04 ;Is entered key > 4 ? STATUS, BTFSS C GOTO WRNG_ENTRY ;If YES goto WRNG_ENTRY CALL EEADDR_LOOKUP ;If no CALL EEADDR look up table MOVWF EEADDR_TEMP ; [W] >EEADDR_TEMP RETURN
co
1 1
A 36
MOVWF CH_NO
/Initialise FSR to
FSR
XORLW
00C1 2831
OOC2 0AE4
SCAN_NXT_BYTE CALL KEY_SCAN /Call scan key routine MOVWF INDF/ [W] >INDF SUBLW 0X09 BTFSS STATUS, C /Is L/J or CHG key pressed ? GOTO WRNG ENTRY /If yes goto
WRNG_ENTRY
00C3 0BS5
INCF FSR, F /Increment FSR by 1 DECFSZ DIGIT_COUNT, F /Decrement DIGIT COUNT by one, is it 0? GOTO SCAN_NXT_BYTE /If no go back to SCAN_NXT_BYTE
00C4 28BD
00C5 3030
LODK OP TABLE FDR EEADDRESS
This Lookup table returns the staring address of the ch's/user's password
in EEPROM data memory when the channel/ user number is passed into it.
OOC6 00S3 00C7 3040 OOC8 0094 OOC9 0824 OOCA 00S5
00402 00403
00404 00405
00406 00407
00353
00354 00355 00356 00357 00358 00359 00360 00361
COMPARE MOVLW RAM_B'JF1 /RAM BUF1 pointer initialisation MOVWF RAM_BUF1_PNT MOVLW RAM BUF2 MOVWF RAM_BUF2_PNT / RAM_BUF2 pointer initialisation MOVF NO_OF_DIGITS, W MOVWF DIGIT COUNT
/
[NO_OFJ)IGITS]
> DIGI?_COUNT
00B1 3410
00B2 3420
00B3 3430
00362
00363 00364
CH_NC,W ADDWF PCL, F RETURN RETLW 0X00 /Starting address of chl's Passward RETLW 0X10 /Starting address of ch2's Passward RETLW 0X20 /Starting address of ch3's Passward RETLW 0X30 /Starting address of ch4's Passward
EEADDR_LOOKUP MOVF
OOCB 0813
00CC 0084
OOCD 0800
OOCE 0096 OOCF 0814 OODO 0084 00D1 0816 OOD2 0600
OOD3 1D03 OOD4 28DA
COMP_CONT MOVF RAM_B'JF1_PNT, W >W / [RAM_BUF1_PNT] MOVWF FSR / [W] >FSR MOVF INDF,W /passward digit > w reg 1 by 1 MOVWF PSDJJIGIT / [W] >PSD_DIGIT MOVF RAM_BUF2_PNT,W
>W MOVF PSD_DIGIT,W /[PSD_DIGIT] XORWF INDF, W / (WJ xor RAN BUF2]
BTFSS STATUS, 2 /Is Z--1 ? GOTO WARN /If no goto WARN INCF RAM_BUF1_PNT, F /If yes incre-
>W
00D5 0A93
ment
00416 00417
This subroutine copies the passward saved in EEPROM into RAM_BUF1 then
OOD6 0A94
00418 00419
00420
00369
reads the passward digits entered fcy the user and stores into RAM_BUF2 then
compares
OOD7 0B95
OOD8 28CB
00370
00371
RAMJUF2
digit by
OOD9 0008
00372
00373
match occures for all the digits. Cn mismatch it gives an long error beep and decrements the NO_OF_ATTEMPTS by one.
If
OODA 2172
OODB 0B97
RAM_BUF1_PNT by 1 INCF RAM_BUF2_PNT, F RAM BUF2 PNT by 1 DECFSZ DIGIT_COUNT, F DIGIT_COUNT by 1, is GOTO COMP_CONT /If nxt digit RETURN/ If yes Return
/Increnent
/Decrement
it 0 ? no goto compare
back
WARN CALL
beep
DECFSZ NO_OF_ATTEMPTS, F/ Decrement NO_OF_ATTEMPTS, is it 0 ? GOTO "BEGIN /If no goto BEGIN ALARM B5F PORTA, 3 /Switch ON the
buzzer
BTFSC PORTA, 4 ;Is the jumper placed? GOTO LATCH_ALARM /If not goto
00374
after 1 minute.
latch_alarm
44
00430
00431 00432
00486
00433
00434
00435
00436
00437
00438
for 1 minute lnin luS(instuction cycle) x 256 (prescalar count) x(195)tmr0 counts x200 x6 (256 count to be loaded in TMR0 -195) +2 H'3F' 2 is added oecause after moving a value to TMR0 reg the actual incremetation of TMR0 delays by 2 TMR0 clock cycles.
00487
00488
00489
the entered information is correct, it takes the new passward. then again takes the new passward for confirmation, on confirmation on confirmation success old pasward will be replaced by the new passward. On confirmation error the old passward will not be altered.
00490
03FB 20A1
0DFC 20D4
00491
00492
CHG_ PSWD CALL GET_CH_N0 /Get the user/channel no CALL VRFY_PA5WD ?Veryfy the old
passward CALL BEEP_THRICE /Beep thrice on veriftcatin success MOVLW 0X03 /Rese: NO_OF_ATTEMPTS to 3 MOVWF NO_OF_ATTEM?TS MOVLW RAM_BUF2 /Initialise FSR to
OOEO HOB
00E1 168B 00E2 3006
00439
00440 00441
00442 00443
00444
OOE6 303F
OHE_NIN_DEL BCF INTCCN,TOIF /Clear TMR0 interrupt flag BSF INTCON, TO IE /Enable TMR0 interrupt feature MOVLW 0X06 /Count for one minute MOVWF ONE_MIN_CNT M0VLK 0XC8 /Count required to obtain 10s delay MOVWF TEN_SEC_CNT MOVLW 0X3F /Count required to obtain 50ms delay MOVWF TMR0
BSF INTCON, GIE
00493
the
MOVWF
FSR
/Starring address of
0102 01A4
0103 2033
OOE9 28E9
00504 00505
00506
WRNG_ENTRY
MOVF KB_TEMP,W /If no KE_TEMP- >W
OOEA 28EA
3A0B
1903 2910
0AA4
XORLW 0X0B BTFSC STATUS, Z /Is CKG key GOTO PROCEDE /If yes goto INCF NC_OF_DIGITS, F ;If no NO_OF_DIGITS by 1 INCF FSR, F /Increment FSR GOTO GET_NXT_BYTE /Goto
pressed ? PROCEDE
increment
by I
GET_NXT_BYTE
00459 00460
OOEB OOEB 3030
0110 0824
00514
00515 00516 00517
00461 00462
to
0111 0095
MOVWF
OOEC 0084
OOED 3010
00463
00464
FSR
/Staring address of
RAM_BUF1
MOVLW D'16'
DIGIT_COUNT / [W] >DIGIT_COUNT SUBLW 0X03 /Is new password BTFSC STATUS, C /contains < 4 digits
OOEE 0095
00465 00466
00467 00468 00469
MOVWF
OOEF 0819
OOFO 0089
/
0114 2831
00518 00519
00520
WRNG_ENTRY
[EEADDR_TEMP]
MOVWF
EEADR/ [W]
0115 0824
W >EEADR
0116 3C0F
>
0117 1C03
00521
BTFSS
OOF1 1683
1408 1283 0808 0080 0A84 OOF7 0A89 OOF8 0B95
OOF2 OOF3 OOF4 OOF5 OOF6
OOF9 28F1
>
>15
00522
00523
GOTO
WRNGJNTRY /If
yes goto
CALL~BEEP_TWICE /If no teep twice MDVLW RAMJ'JFl /Initialise FSR to the MOVWF FSR /starting address of
RAM_BUF1
WRNGJNTRY
GOTO
OOFA 0008
00478 00479
00480
one
2033
0121 0A84
The program control comes here when you press CHG key. First this
WRNGJNTRY
0122 0B95
00485
0123 291C
00535
INCF FSR, F /If no increment FSR by 1 DECFSZ DIC-ITJOUNT, F /Decrement DIGIT COUNT by 1, is it 0 ? GOTO GETJXTJYTE2 ;If yes goto
Microcontroller-Based Projects
45
GET_NXT_BYTE2
0124 3030
00536 00537
MOVLW
0156 0BS5
0157 2945
00591
00592
00538 00539
MOVWF RAM_BUF1_PNT
MOVLW
RAM~BUF2~; RAM_BUF2_PNT
00593 00594
00595
initialisation
00540 00541
00542
>w
00596 00597
00598 00599
00543
012A 0813 012B 0084 00544 00545
015E 2826
00600 00601
00602 00603
CCNFRM_ERR CALL LONG_BEEP /Give a lcng beep on confirm Error GOTO BEGIN /Goto BSGIN
RAM_BUF2_PNT/W
FSR; [W]
;[RAM_BUF2_PNT]
0130 0816
0135 0A94
0136 0B95
00555
00556
0084 0824
>W MOVF PSD_DIGIT,W ;[PSD_CIGIT] SUBWF INDF,W ;[W] [RAM BUF2 ] >W ;Is BTFSS STATUS, Z [ RAM_BUF1] [ RAM_BUF2 ] ? GOTO CONFRM_ERR ;If no goto CONFRM ERR INCF RAM_BUF1_PNT, F ;If yes increment RAM_BUF1_PNT by 1 INCF RAM_BUF2_PNT, F increment RAM BUF2 PNT by 1 DECFSZ DIGIT_COUNT, F ;Decrement DI3IT_COUNT by l,is it 0? GOTO ~CONFRM_PSD ;If no goto CONFRM PSD MOVLW RAM_BUF2 ;If yes point to the ADDLW OXOF ;end of RAM_EUF2 MOVWF FSR MOVF NO_CF_DIGITS,W ;Store the no cf
>W >FSR
-
0821
MOVWF
MOVWF
0163 30FE
DEL_COUNT2, F
*************************************
SUBROUTINES TO SOUND BUZZER
016C 30C1
00623
digits
013C 0080
MOVWF
INDF
end of
MOVWF
FSR~
00A1
1585 215F 1185 00C8
00627
00628 00629 00630
SHORT_BEEP MOVLW 0X01 /Subroutine tc produce a short beep MOVWF BUZ_DEL_CNT BSF PORTA, 3 CALL BUZ_DELAY BCF PORTA, 3 RETURN
;No of
0172 30CA
0173 00A1
0174 1585
00631
00632
BSF
00569
00570
0175 215F 0176 1185 0177 00C8 0178 0179 017A 017B
00571
0145 0800
0146 0088
00572 00573
00574 00575 00576 00577 00578
WR EEPROM MOVF
INDF,W ;[INDF] W MOVWF EEDATA ;W >EEDATA BSF STATUS, RP0 /Select fcankl BSF EEC0N1,WREN /Enable write node
>
017C 2982
BEEPJTWICE MOVLW 0X05 MOVWF BUZ_DEL_CNT CALL BUZ_DELAY MOVLW 0X02 /Subroutine to produce 2 short beep3 GOTO BEE?_NOW
MOVLW 0X05 BUZ_DEL_CNT CALL BUZ_DELAY MOVLW 0X03 /Subroutine to produce 3 short beeps GOTO BEE?_NOW
MOVLW
0X55
/H'55'
must be written
017D 30C5
017E 00A1
BEEPJTHRICE
MOVWF
MOVLW
0XAA /to start write sequence MOVWF EECON2 /followed by H'AA' BSF EEC0N1,WR /Set WR bit to start
writing
bit
0152 0153 0154 0155 2945 0A84 1283 0A89
BTFSC EECON1 WRERR /Is WRERR is set? GOTO WR_EEPROM /If set write again INCF FSR, F /Increment FSR by I BCF STATUS, RP0 /Select bankO INCF EEADR, F ;Increment EEADR by 1
00AO
00648 00649
30C4
00A1
00650
00651 00652 00653 00654 00655 00656 00657 00658
BEEP_AGAIN
RETURN
46
ASHAYMATHUR
Security
is a prime concern in our day-to-day life. And access control system forms a vital link in a security chain. The microcontroller-based digital lock presented here is an access control system that allows only authorised persons to access a restricted area. When someone tries to enter the restricted area by entering invalid passwords continuously, the system locks itself and can be unlocked only by the master user. The system comprises a small electronic unit with a numeric keypad, which is fixed outside the entry door to control a solenoid-operated lock. When an authorised person enters a predetermined number (password) via the keypad, the relay energises for a limited time to unlock the solenoid-operated lock, so door can be pushed/pulled open. At the end of the preset delay, the relay de-energises and the door gets locked again. A prompt message is displayed on the LCD module.
Circuit description
The system uses a compact circuitry built around AVR microcontroller ATmega8535.The ATmega8535 is a lowpower CMOS 8-bit microcontroller based on the AVR-enhanced RISC architecture. It provides the following features: 8 kB of in-system programmable Flash memory with read-while-write capabilities, 5 12-byte EEPROM,
X1
ON/OFF
SWITCH
D2
230V
IC1
1
D4
D5
OUT
AC
50Hz
7806 3
COM
D3
ON/OFF
N/O
LED1
D6
BC548
R5 1K
N/C
1000M
25V
SWITCH
4.8V J-" NiMH -=
BATT. r
RL1
C2
0.1m
4.7K'
IC3
10 30
PAO
PD7
MCT2E
V\MA
C4
22p
Xtal
8MHz
PD6
PD5
27
IC2 ATMEGA
8535
16
PD4
PD2
PD1
PC1 PC2
PC3
V0 D4 D5 D6 D7 RS RW EN
16
24
V/IS12 59
S4
o \
---3 <T
S6
>
R4
v/l
PDO
1 2KT
S5
4C
R1
COL1
COL2
COL3
S7 COL4
AAAA/
ROW1
TEXT
Microcontroller-Based Projects
47
512-byte SRAM, 32 general purpose I/O lines, 32 general-purpose working registers, EFYSUNI Lx ACCESSxOCT. -07 three flexible timer/counters with compare modes, and internal and external interrupts. The built-in power-on-reset circuitry of the microcontroller eliminates the need for ex ternal power-on-reset circuit. Switch S3 is used to reset the system, which is accessible only to the master user. Port D (PDO through PD7) is interfaced with the numeric keypad. Port C is inter faced with a 16-x2-line LCD. Four pins (PC4 through PC7) of Port C are used as data lines for the LCD module and three lines (PCO through PC2) are used for con trolling the LCD. Pin 40 (PAO) of port A is connected to the relay driver circuit through optocoupler MCT2E (IC3) and transistor Tl. When port pin PAO goes high, the internal transistor of IC3 drives transistor Tl into saturation and relay RL1 energises. Fig. 2:A single-side, actual-size PCB layout for secured room access system As the solenoid valve is connected through normally-closed (N/C) contact of the relay, the solenoid coil de-energises and the gate locked. An 8MHz crystal is used with is D1-D6=1N4007 R7 C3, C4=22p R5 two 300 22pF capacitors for providing clock. HOOE , C3 I Preset VR1 is used to adjust the contrast of 1615 1 2 3 11131211 6 5 4 JHCT2E BC548 |B|o|o|o|o|o|o|o|o lolofol TflT LCD. the la3)T1 LCD nODULE LLU RLllo m The 230V, 50Hz AC mains is stepped down by transformer XI to deliver a second IC2 ary output of 9V, 500 mA. The transformer ATMETGA8535 XTAL output is rectified by a full-wave bridge 8HHZ rectifier comprising diodes Dl through D4, 0900000009000 filtered by capacitor Cl and regulated by IC R2 o R1-R4=10K o 7806 (ICl). Use adequate heat-sink for 7806 as the solenoid draws a high current. LED1 glows when power is 'on and resistor R6 acts as the current limiter. A 16-key numeric keypad for password entry is connected to the microcontroller. The keypad is also used for password change lOOOu and application of master password when BnTT required. To economise the use of I/O pins, C@w we have used here only eight pins for scan 4. 8U ning and sensing 16 keys. The keypad is arranged in a 4x4 matrix. Fig. 3: Component layout for the PCB There are four scan lines/pins, which are set in output mode, and four sense keys, which are used as input lines to the microcontroller. At a small time interval, the microcontroller sets one of the four scan lines as low and the other three scan lines as high. Then it checks for the status of sense lines one by one at the intersection of a specific scan line and
\\m
(i q\
*eYs'-07O
uj
&
Q0 *I
p
48
the microcontroller by sacrificing almost nothing. When a person wants to enter the room, he enters the 6-digit password, say '123456.'If the password matches successfully, the gate is unlocked for 15 seconds. If you want to change the user password (123456) and enter the master password '291279,' the system will ask you to change the user password. On successfully entering the password, pin AO of port A becomes high for 15 seconds, because of which transistor Tl starts conducting through the emitter of the optocoupler and the relay ener gises. The connection between the solenoid lock and the power supply is broken and the door is unlocked for 15 seconds. An actual-size, single-side PCB for secured room access system (Fig. 1) is shown in Fig. 2 and its component layout in Fig. 3.
sense line to find out if any key has been pressed. PARTS LIST Similarly, after a small time interval, the next scan line is made low Semiconductor: and remaining three scan lines are taken high, and again all three sense IC1 - 7806 6V regulator - ATmega8535 AVR lines are checked for low level. This way the microcontroller checks IC2 microcontroller which of the 16 keys is pressed. IC3 - MCT2E optocoupler Due to the high speed of the microcontroller, the status of differ Tl - BC548 npn transistor - 1N4007 rectifier diode ent keys is checked in less than 100 ms and a key press is detected and D1-D6 - 5mm light-emitting diode identified. As the keys are pressed manually by the user, this delay of LED1 (all 'A-watt, 5% carbon): Resistors 100 ms is not noticeable. The net result is that you save on I/O pins of R1-R4 - 10-kilo-ohm
R5 R6
R7
VR1 Capacitors: CI C2
C3.C4
Miscellaneous:
XI
S1,S2 S3-S19
Xtal
RL1 Batt.
The software for the AVR microcontroller is written in 'C' language and compiled using Code Vision AVR 'C' compiler. Since this compiler does not have library functions for the keypad, place 'kbd.h' file in the INC folder of the installation folder and 'kbd.lib' in the LIB folder of 'cvavr' folder. This file is included in the program and the same can be used. Downloadsource code: http://www.efymag.com/admin/issuepdf7Access%20Control.zip
Software
500mA secondary transformer On/off switch push-to-on tactile switch 8 MHz crystal 6V, lC/O relay 4.8 volt rechargeable battery LCD module 16 X 2 line 6 volt operated solenoid lock
SOURCE PROGRAM
(asm
.equ _ lcd_port=0xl5
#endasm
eeprom long int pass_store= 123456, master_password= 291279; include <mega8535.h> include <lcd.h> include <stdio.h> include <delay.h> include <kbd.h> define relay PORTA. 0
delay_ms (100) ; pass_value=pass [ 5 ] + 10*pass[4]+ 100*pass[3] 1000*pass [2] + 10000*pass 1 1J + 100000*pass [0J ;
)
void pass_change ()
(
int i,j , k, fail=0; long int id_value, pass_value, pass [6] ; bit match=0; void password ()
{ i"0; do(
lcd_clear(); lcd_gotoxy (0, 0) ; lcd_putsf ("Enter New ") ; lcd_gotoxy (0, 1) ; lcd_putsf ("Password:") ; delay_ms (50) ; k=0;
do (
)()
<
k++;
lcd_gotoxy (9 + k, 1) ;
Microcontroller-Based Projects
49
lcd_putsf ("*");)
} while (k<6);
delay_ms (50) ;
password ( ) ; if (pass_value==pass_store) ( match=l; )
else if (pass_value==master_password) {
raatch=l;
void unlock ()
{ relay=~relay ;lcd_clear ( ) ; lcd_gotoxy (1,0);
I
match=0; fail-0;
lcd_putsf ("Door Unlocked") ; lcd_gotoxy (2f 1) ; lcd_putsf ("Please enter"); delayms (300) ; for (k=0;k<20; k++)
(lcd_clear() ;
delay_ras (50) ; lcd_gotoxy (1, 0) ; lcd_putsf ("Door Unlocked"); lcd_gotoxy (2, 1) ; lcd_putsf ("Please enter"); delay_ms (50) ; )
relay=~relay; return;
)
1
else
{
Password") ;
else {
goto labell;
) }
lcd_putsf ("Enter
Password:");
50
BIKRAMJEET WARAICH
radio-frequency identification (RFID) based access-control system allows only authorised persons to enter establishment. The authorised persons are provided with unique tags, using which they can access that area. Hie system is based on microcontroller AT89C52 and comprises an RFID module, an LCD module for displaying the status and a relay for opening the door. Fig. 1shows a user trying to open the door by placing an RFID tag near the RFID reader.
a particular area of an
Radio-frequency identification
You might be familiar with RFID systems as seen in access control, contactless payment systems, product tracking and inventory control, etc. Basically, an RFID system consists of three components: an antenna or coil, a transceiver (with decoder) and a transponder (RF tag) electroni cally programmed with unique information. Fig. 2 shows a typical RFID system. In every RFID system, the transponder tags contain unique identifying information.This informa tion can be as little as a single binary bit or a large array of bits repre senting such things as an identity code, personal medical information or literally any type of information that can be stored in digital binary format. The RFID transceiver communicates with a passive tag. Passive tags have no power source of their own and instead derive power from the incident electromagnetic field. Commonly, at the heart of each tag is a microchip. When the tag enters the generated RF field, it is able to draw enough power from the field to access its internal memory and Fig. 1:a user is trying to open the door by plac transmit its stored information. When the transponder tag draws power ing an RFID tag near the RFID reader in this way, the result ant interaction of the RF fields causes the voltage at TRANSCEIVERS RFID TRANSPONDER RFID READER the transceiver antenna to drop in value. This effect is utilised by the tag to com RECEIVED DATA PASSIVE TRANSCEIVER municate its information TAG to the reader. The tag is able to control the amount of power drawn from the field and by doing so it can modulate the voltage TAG MODULATES sensed at the transceiver RF FIELD WITH DATA
MODULATED RF FIELD
Microcontroller-Based Projects
51
typical RFID antenna. An RFID antenna consists of a coil with one or more windings and a matching network. It radiates the electromagnetic waves generated by the reader to activate the tag and read/write data from it. Antennae are the conduits between the tag and the transceiver which control the systems data acquisition and communication. These are available in a variety of shapes and sizes. Often, the antenna is packaged with the transceiver and decoder to become a reader, which can be configured either as a handheld or a fixed-mount device. The reader emits radio waves in ranges of anywhere from 2.54 cm (one inch) to 30 metres or more, depending upon its power output and the radio frequency used.When an RFID tag passes through the electromagnetic zone, it detects the reader's activation signal. The reader decodes the data encoded in the tag's integrated circuit (silicon chip) and the data is passed to the host computer for processing. Tags (transponders). Fig. 4 shows the internal structure of a typical RFID tag. An RFID tag comprises a micro chip containing identifying C'i information and an anten WIRE CHIP BONDING na that transmits this data PRIMER wirelessly to the reader. At its most basic, the chip will contain a serialised identifier, or licence plate ENCAPSULATION ENCAPSULATION SILICON ANTENNA MATERIAL number, that uniquely MATERIAL identifies that item, similar to the way many bar codes are used today. CHIP There are three types CHIP PAD of tags: active, passive and semi-passive. Fig. 3: Internal diagram of a typical RFID antenna Fig. 4: internalstructure of a typical RFID tag
r
D5=1N4007
1
RL1
12V.1C/0
7805
RELAY
O
O G>
O
R1
10K -/VSAr-
PIEZO-
DOOR-LOCK ACTUATOR
R3
LED2
IC1 AT89C52
P3.0(Rxo)
TX
IC4
RFID
LED+330Q
LED-
<3j
P3.1(Txd)
RX
LED3
D1-D4=
1N4007
FRONT VIEW
BC 547
X1
nr
2
15
D0 D1 D2 D3 7 8 9 10 11 12 13 14
11.0592MHz
LCD MODULE
3
5
VR1 , 10K
16
HtJH'
C5 22p C6
CB E
CB E
22p
R/W
52
their power from the electromagnetic field generated by the RFID reader and then the microchip can send back information on the same wave. The reading range is limited when using passive tags. Active transpond ers have their own transmitters and pow er source, usually in the form of a small battery. These remain Fig. 6:An actual-size, single-side PCB for the RFID-based security system in a low-power 'idle' state until they detect RFID BASED SECURITY SYSTEM LCD MODULE -O 16 the presence of the 121OB OOOOQOOOOOOOOO Q|B JUMPER UIRE Jl-J2= 33T R 6 RF field being sent DOOR URl 1OK N/C P N/O by the reader. When aaaaa a the tag leaves the area D1 -05=1N4007 RLl 12U, lCO of the reader, it again AT89C52 down its to XTAl powers 11. 0592MHz idle state to conserve 5 3335:03303333353333 o 10K o its battery. As a re sult, active tags can be 9U AC detected at a greater ~k1d2 C5,C6=22p range than passive
1!
HE
tags.
1 OOOu
Semi-passive
tags
have their own power OPS IK RESET SFID LEDl<H<|o source that powers r\ SI R2 330E POUER only the microchip. These have no trans Fig. 7: Component layout for the PCB mitter. They rely on altering the RF field from the transceiver to transmit their data. There are three ways for data encoding into tags: 1. Read-only tags contain data, which is pre-written onto them by the tag manufacturer or distributor. 2. Write-once tags enable a user to write data to the tag one time in production or distribution processes. 3. Full read-write tags allow new data to be written to the tag as needed and later other data can be rewritten over the original data. RF transceiver. The RF transceiver is the source of the RF energy used to activate and power the passive RFID tags. It may be enclosed in the same cabinet as the reader or it may be a separate piece of equipment. When provided as a separate piece of equipment, the transceiver is commonly referred to as an RF module. The RF transceiver controls and modulates the radio frequencies that the antenna transmits and receives. The transceiver filters and amplifies the back-scatter signal from a passive RFID tag.
Microcontroller-Based Projects
53
Circuit description
|
Semiconductors:
PARTS LIST
Fig. 5 shows the circuit of the RFID-based security system. The compact IC1 - AT89C52 microcontroller circuitry is built around Atmel AT89C52 microcontroller. The AT89C52 IC2 - 7812, 12V regulator is a low-power, high-performance CMOS 8-bit microcomputer with 8 1C3 - 7805, 5V regulator - RFID reader module kB of Flash programmable and erasable read-only memory (PEROM).It IC4 - BC558 pnp transistor has 256 bytes of RAM, 32 input/output (I/O) lines, three 16-bit timers/ T1 T2 - BC547 npn transistor counters, a six-vector two-level interrupt architecture, a full-duplex serial D1-D5 - 1N4007 rectifier diode port, an on-chip oscillator and clock circuitry. The system clock also plays LED1-LED3 - 5mm LED a significant role in operation of the microcontroller. LCD - 16-character, 2-line An 11.0592MHz quartz crystal connected to pins 18 and 19 pro Resistors (allVt-watt, 5% carbon unless vides basic clock to the microcontroller. Power-on reset is provided by stated otherwise): the combination of electrolytic capacitor C4 and resistor Rl. Switch Rl, R7 - 10-kilo-ohm Si is used for manual reset. Port pins P2.0 through P2.7 of the mi R2, R3 - 330-ohm - 1-kilo-ohm crocontroller are connected to data port pins DO through D7 of the R4, R5 - 33-ohm LCD, respectively. Port pins P3.7 and P3.6 of the microcontroller are R6 connected to register-select (RS) and enable (E) pins of the LCD, Capacitors: - lOOOE 25V electrolytic respectively. Read/write (R/W) pin of the LCD is grounded to enable CI
C2,C3 - O.lpF ceramic disk for write operation. C4 - lOpF, 16V electrolytic All the data is sent to the LCD in ASCII format for display. Only C4, C5 - 22pF ceramic disk the commands are sent in hex form. Register-select (RS) signal is used Miscellaneous: to distinguish between data (RS=1) and command (RS=0). Preset VR1 XI - 230V AC primary to 15V, is used to control the contrast of the LCD. Resistor R6 limits the cur 500mA secondary rent through the backlight of the LCD. Port pins P3.0 (R-,) and P3.1 transformer - Push-to-on switch (TXD) of the microcontroller are used to interface with the RFID reader. SI - 11.0592MHz crystal When an authorised person having the tag enters the RF field gen Xtal - 12V, lC/O relay erated by the RFID reader, RF signal is generated by the RFID reader RL1 PZ1 - Piezobuzzer to transmit energy to the tag and retrieve data from the tag. Then the RFID tag RFID reader communicates through RXD and TXD pins of the microcon - 12V DC door lock actuator troller for further processing. Thus on identifying the authorised person, port pin P3.2 goes high, transistor T2 drives into saturation, and relay RL1 energises to open the door for the person. Simultaneously, the LCD shows "access granted" message and port pin PI.7 drives piezobuzzer PZ1 via transistor T1 for aural indication. If the person is unauthorised, the LCD shows "access denied" and the door doesn't open. LED2 and LED3 show presence of the tag in the RFID reader's electromagnetic field. To derive the power supply, the 230V, 50Hz AC mains is stepped down by transformer XI to deliver a sec ondary output of 15V, 500 mA.The transformer output is rectified by a full-wave rectifier comprising diodes D1 through D4, filtered by capacitor CI and regulated by ICs 7812 (IC2) and 7805 (IC3). Capacitor C2 bypasses the ripples present in the regulated supply. LED1 acts as the power indicator and R2 limits the current through LED1. An actual-size, single-side PCB for RFID-based security system is shown in Fig. 6 and its component layout in Fig. 7. Assemble the circuit on a PCB as it minimises time and assembly errors. Carefully assemble the components and double-check for any overlooked error.
Software
The software for this project is given at the end of this article. It is written in 'C' language and compiled using Keil [iVision4 compiler. The finally obtained '.hex' code is burnt into the microcontroller using a suitable programmer. The program is easy to understand. Downloadsource code: http://www.efymag.com/admin/issuepdf7RFID-Based-Security-System.zip Note:'The. complete kit of this project is available with Kits'n'Spares.
54
RFID.C
#include<reg51 .h> sbit RS=P3"7; sbit EN=P3A6; sbit R=P3"2; // tor relay sbit bz=PlA7; // for piezo buzzer void Rxmsg(void); void lcdinit (void) ; void lcdData (unsigned char 1); void lcdcrad (unsigned char k) ; void DelayMs (unsigned int count); void sucessRx (void) ; void unknown (void) ; void display (unsigned char s, t) ; void welcome (void) ; void main ( )
( )
void sucessRx ()
(
unsigned int i=0; unsigned char c[]="ACCESS GRANTED lcdcmd (0x01) ; DelayMs (10) ; lcdcmd (Cx8D) ; DelayMs (10) ; while (c [i] !='\0' )
THl=0xFD; SCON=0X50;
TR1=1; R-0;
I
]); lcdData (c [ i
i++;
J
)
lcdinit () ; welcome ( ) ;
bz=l; while (1)
//command to
c [i]=0xFF;
}
while (RI
lcdData (c[i) ) ;
0);
i++;
//command
to
recv data
{ j=0; while (RI==0)
(
//
lcdcmd (Cx3B)
DelayMs (250) lcdcmd (OxOE) DelayMs (250)
c[i]=SBUF; RI=0; )
timeout:
for (i=0; i<15; i++)
(
if(c[i]=='l' SS c [i+1] E' 0' ss c [ i c [i+3] + 4 ] ==' T c [ i+7 ] ==' 0' SS C [ i+6] ==' A' C' ) c [i+ 9] // RFID code
'
SS SS SS
SS
SS
lcdcmd (0x01) DelayMs (250) lcdcmd (0x06) DelayMs (250) lcdcmd (0x80) DelayMs (250)
SS
DelayMs (1000) ;
// // Led command H
void lcdcmd (unsigned char k)
(
Microcontroller-Based Projects
55
P2=k; RS=0;
EN=1;
unsigned int i=0; unsigned char c [ ] ""WELCOME to RFZD"; unsigned char d [] -"SECURITY SYSTEM";
lcdcmd(OxOl) ; DelayMs (10) ; lcdcmd(0x80) ; DelayMs (10); while (c [ i] !='\0') { lcdData (c[i] ) ; i++; ) lcdcmd (OxcO) ;
// // Delay mS function // void DelayMs (unsigned int count) ( // msec Delay 11.0592 Mhz
unsigned int i; while (count) ( i = 115; value
// Keil v7.5a
//
115 exact
i=0;
count
while (i>0) i ;
> void
welcome (void)
56
Access
in Fig. 1.
control forms a vital link in a security chain. Here we describe a secure digital access system using iButton that allows only authorised persons to access a restricted area. The iButton is used here as a key to the access control system. Its unique identification (ID) number is used for authorisation. On detection of an authorised iButton, the system allows access. Thereafter, an automated lock key locks the system again. The system is permanently halted after five repeated false attempts. A service control unit built around an AVR microcontroller is interfaced to the iButton with 1-wire protocol for authentica tion of user validation of data.
iButton DS1990A
Here we have used the iButton DS1990A from Dallas Semiconductor (MAXIM). Its block diagram is shown
An iButton is a chip housed in a stainless-steel enclosure (refer Fig. 2). The electrical interface is reduced to the absolute minimum, i.e., a single data line plus a ground reference. The energy needed for operation is taken from the data line. The DS1990A serial number iButton is a rugged data carrier that acts as an electronic registration number for automatic identification. It contains a unique ROM code that is 64-bit long as shown in Fig. 3. The first eight bits are a 1-wire family code.The next 48 bits are a unique serial number.The last eight bits are a cyclic redundancy check (CRC) of the first 56 bits. Data is transferred serially via the 1-wire protocol, which requires only a single data lead and a ground return. The iButton DS1990A provides the additional 1-wire protocol capability that allows the search ROM command to be interpreted by the DS1990A.
Circuit description
Fig. 4 shows the circuit of the secure digital access system using iButton. The circuit is built around an ATmegal6 microcontroller. 1- WIRE The ATmegal6 is an 8-bit microcontroller J. based on the AVR en
CHIP
DATA IN
DC IU
ADDRESS
CONTROL
cc O
S-l*
>
UJ
hanced RISC architecture that executes powerful instructions in a single clock cycle. It has 16kB in-system programmable
-I
D
POWER
DATA OUT
Microcontroller-Based Projects
57
MSB
LSB
LSB MSB
LSB MSB
flash program memory with read-whilewrite capabilities, 512 bytes of EEPROM, lkB SRAM, 32 general-purpose input/ output (I/O) lines, 32 general-purpose working registers, three flexible timers/
compare modes, internal and external interrupts, a serial programmable USART, a byte-oriented two-wire se rial interface,
counters with
PZ1=PIEZO BUZZER
LED1
33012
) 1|i.16V|10
C1+
C7
POWER
c6+r
IC1 ATMEGA16
15
16
1 I
C8
1|J,16V
CONNECTOR
T1 OUT 2
16VT 9h
PD1
a programma ble watchdog timer with internal oscil lator, an SPI serial port and six software-
T1 IN
IC3
MAX232
GND
5
selectable
power-saving modes. Piezobuzzer PZ1 is used
as an audible
true,
C2+
C5+J
16V
J C2D7
15
TO COM
PORT
VD1-D7 1N4007
and system halt. It is con BC IC5 1m 548 LQfiMJ iBUTTON trolled from T+16V IC2 DS1990A RL1 PC817 pin PD6 port 6V.1C/0 C3 CWOOOOO RELAY of the micro 3.3m 16V CB E controller with 230V AC 50Hz the help of X1 = 230V AC PRIMARY TO 9V, 300mA SECONDARY TRANSFORMER transistor Tl. The iButton Fig. 4: Circuit of the secure digital access system using iButton socket is con nected to port pin PD2. Pull-up resistor R1 is used as required from the 1-wire protocol. Port pin PD4 controls the relay operation through optocoupler PC817 (IC2). The door locking mechanism, say, for a slide door, is connected to the contacts of relay RL1, which closes after some time automatically. Whenever someone attempts to gain access by touching the iButton (IC5) using his own iButton, the firmware inside the AVR reads its unique ID and matches with the ID in the firmware. If the ID matches, port pin PD4 goes high, the internal LED of the optocoupler (IC2) glows and relay RL1 energises for the predefined time. Simultaneously, the buzzer sounds to indicate grant of access. Thereafter, relay RL1 de-energises. Hie buzzer gets the PWM signal to produce sound from port pin PD6 of the microcontroller.The 1-wire communication is done through interrupt port pin PD2 (INTO), so the AVR does not have to poll the pin but respond when any change in signal is detected on the interrupt pin. Switch SI is used for manual reset. Port pin PD1 of the microcontroller is used to interface with the hyper terminal of the PC through RS-232 interface MAX232 IC (IC3) for iButton verification and checking. The microcontroller provides a transmit channel for serial data transfer. Transmit data pin (TXD) is specified at port pin PDl.The microcontroller is connected to Tl IN (pin 11) of MAX232.T1 OUT (pin 14) of IC3 is connected to pin 2 of the COM port
C4
58
signals OQCOOOCCC these pins are TTL-level and must be boosted and inverted through a MAX232 converter to comply with the RS-232 standard. The MAX232 has two internal charge pumps that convert +5V into +10V (un loaded) for RS-232 driver operation. The Fig. 5: An actual-size, single-side PCB for the secure digital access system using iButton first converter uses capacitor C6 to dou ble the +5V input to access control using button . flBBBBBBBBBBBBBBBBBBB ) NyC P SI xO +10V on capacitor C8 D1-D7=1N4007 mOB at pin 2. The second pfiTE ATMEGA16 converter uses capaci /O tor C5 to invert +10V to -10V on capacitor <> C1-L8=lu, I6U L3 L6 C4 at pin 6. 9U AC C6 C5 C4 C8 R1 5K The power sup DATA ply for this circuit is BBOOQBBB 1 OOOu derived from 230V, MAX232 ? 50Hz AC mains. 00000009 IC2 Transformer XI steps PC81 7 IC3 -\A-CZ PORT down 230V, 50Hz AC mains to deliver a secondary output Fig. 6: Component layout for the PCB of 9V, 300 mA. The transformer output is rectified by a full-wave rectifier comprising diodes D1through D4, filtered by capacitor CI and regulated by IC 7806 (IC4). Capacitor C2 bypasses the ripples present in the regulated supply. LED1 acts as the power indicator and R5 limits the current through LED1.
connector. The
provided
on
If
1
# -Dtsi
L4* 10000
... ..........
a~sV &&
Software
The software for this project is given at the end of this article. It is written in 'Basic' language and compiled using BASCOM-AVR compiler. The source program is well commented and easy to understand. Burn the finally obtained Intel hex code file into the AVR's flash memory using a suitable programmer. The microcontroller uses an 8MHz internally generated clock. To activate, program fuse bytes as follows: Fuse low byte = D4
Microcontroller-Based Projects
59
PARTS LIST Fuse high byte = 99 The source program is developed quickly with the help of the Semiconductors: lwread and lwwrite IC1 BASCOM-AVR library function. The lwrest, - ATMegal6 microcontroller ' - PC817 optocoupler functions are used for checking the presence of 1-wire device, reading IC2 - MAX232 RS-232 driver of the unique ID of iButton and writing to the 1-wire device, respec IC3 IC4 - 7806, 6V regulator tively. Sound function is used for generating the beep sound from the IC5 - DS1990A iButton buzzer. The iButton is connected to hardware interrupt pin INTO so T1 - BC548 npn transistor that any change on the pin can be detected and further processing for D1-D7 - 1N4007 rectifier diode 1-wire done. LED1 - 5mm LED The program execution starts by initialising the input/output Resistors (all 'A-viatt, *5% carbon): ports, the interrupt pin and its level of detection. Global interrupts R1 - 5-kilo-ohm are enabled and the interrupt service routine is ready to be executed R2 - 1-kilo-ohm when any interrupt is received. As soon as the normal program R3 - 220-ohm R4 - 10-kilo-ohm execution is interrupted, an interrupt is issued and the control of R5 - 330-ohm execution enters the interrupt service routine, where iButton is given reset command first and then the ROM command to fetch Capacitors: - lOOOpF, 25V electrolytic the unique ID of the iButton. This fetched ID is compared with CI 0.1pF ceramic disk C2 the unique ID programmed in the firmware. If there is a mismatch C3 - 3.3|jF, 16V electrolytic between the two IDs, a fake parameter counter is incremented and C4-C8 - lpF, 16V electrolytic the relay connected to port PD4 de-energises. If the two IDs match, Miscellaneous: the relay connected to port PD4 energises and simultaneously the XI - 230V AC primary to 9V, buzzer connected to port PD6 sounds. If the unique ID is wrong 300mA secondary sequentially five times, the system enters the major warning state transformer - 6V, lC/O relay where the buzzer sounds continuously and it can only be stopped by RL1 PZ1 - Piezobuzzer resetting the system. SI Push-to-on tactile switch Download source code: http://www.efymag.com/admin/issuepdf/ 9-pin D-type female Secure%20Digital%20Access%20System%20Using%20iButton.zip connector
J
1WIRERESET.BAS
"ml6def.dat" $regfile $baud 9600 $crystal = 8000000 $hwstack 32
1
--
$swstack = 64
default use 10 for the SW stack Sframesize = 20 1 default use 40 for the frame space
'
, , Parity None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config lwire = Portd.2 'use this pin Config Into = Low Level Dim Ar(8) As Byte , A As Word , IAs Byte , E As Byte , W As Word Dim Codel(B)as Byte Dim Flag As Bit 'flag for correctness "Code (8 Byte) = (4HC1 , SHOD , SK83 , SH07 , 4H13 ,
SHOO
Config Pcrtd Output Slib "mcsbyte . lbx" Config Coml = 9600 Synchrone = 0
SH13 Codel (5) &H00 Codel (6) Codel (7) = SHOO Codel (8) SH1E On IntO Int0_int Enable Interrupts Enable Into 'enable the interrupt 0 E 'flag for number of attempts W = 65000 Do Set Portd.4 'initially the relay is off
Loop
IntO_int :
Disable Interrupts Disable Into Flag = 0 Wait 1
lwreset 'reset the device Print "iButton Access Code:";
SHOO
SH1E)
SH01
SHOD
60
lwwrite 4H33 'present, read code 'read ROM command Ar (1) = lwread (8) For I= 1 To 8
Print Hex(ar(i)|; 'print output Next
Reset Portd.4 'access allowed Sound Portd.6 , 10 , 50000 'siren on port PD6 Print " Access Allowed";
Print
Wait 2 End If
Print
For I= 1 lo 8 If Ar(i) <> Codel(i) Then Set Portd.4 Flag = 0 'access not allowed 10 To 1000 For A Sound Portd.6 , 4
Next
Print
E = E
If Flag E = 0
1 Then
Print "Rejected"; Print If E = 5 Then '5 attempts of correctness Do 4 Sound Portd.6 'SOUND pin, duration, pulses w = w + 1 If W > 1000 Then w = io End If Loop End If End If 'End It Enable Into
Print Err;
Microcontroller-Based Projects
61
S. DAS GUPTA
PARTS LIST
IC1 IC2-IC4
ICS
- PIC16F72 microcontroller
switch
ploy point-to-point wireless links. CCTV is often used for surveillance in areas that need security, such as banks, casinos, shops, departmental stores and airports or military installations.
- CD4066 quad bilateral CMOS - UTC820 power amplifier - BC547 - 78S12 voltage regulator - 780S voltage regulator - 4MHz crystal - 1N4007 diode - LED, 5mm red - LED, 5mm green
-
Here is a remote-controlled CCTV switcher circuit to monitor six cameras on a single or dual monitor/TV. The salient features of this TA1.I D1-D4 switcher are: LED1-LED6 1. Cameras: Six cameras with one-way audio (audio incoming only)
2. Operation: Fully remote-controlled (infrared commander) 3. Front display: LCD to display the camera selected and all other
LED7 IRx
TSOP1738 IR receiver
functions/parameters
4. Camera selection: Manual (you can select any camera of your choice by pressing number keys or camera up/down keys on the remote) - 75-ohm and auto (the switcher selects the cameras one by one and holds videos R9, RIO R15 - 47-ohm, 1-watt of each camera till the preprogrammed time) Rll, R16 -47-ohm 5. Auto mode: You can change 'on' time of each camera (hold time) R12 - 1-ohm - 1-kilo-ohm individually through the remote. Time can be programmed from 0 to R14 - 1-kilo-ohm R17-R22 255 seconds. - 10-kilo-ohm VR1 6. Camera bypass: You can set any camera in bypass mode by enter VR2 - 10-kilo-ohm, log, ing 0-second 'on' time for cameras which you want to bypass or don't potmeter want to watch during auto mode. Capacitors: - 1000|iF, 35V electrolytic 7. Audio: One-way audio. In this model, you can hear the audio Cl - 220pF, 40V electrolytic C2 from the camera C3.C10.C13, selected by the C16 lOOpF, 25 V electrolytic MCLR/VPP 1 28 RB7/PGD 33pF ceramic C4.C5 switcher. C6, C8, C14, 27 RB6/PGC RA0/AN0 2 8. Video: Two C18 0.1pF mylar RA1/AN1 3 26 RB5 video-out RCA C7, C9 47pF, 16V electrolytic Cll 680pF ceramic 25 RB4 RA2/AN2 4 sockets with 75C12 22 pF, 25V electrolytic ohm impedance 24 RB3 RA3/AN3/VREF 5 C15 220|iF, 25 V electrolytic lVp-p are available 23 RB2 RA4/T0CK1 6 CM C17 lOpF, 25V electrolytic N U. at the rear panel 22 RB1 RA5/AN4 7 Miscellaneous: (0 of the master unit. 0-15V, 2A secondary XI 21 RBO/INT VSS 8 O transformer You can connect Q. 20 VDD OSC1/CLK1 9 SI DPDT rocker switch two monitors in SK1-SK6 19 VSS OSC2/CLKO 10 5-pin DIN socket these sockets. SK7, SK8 RCA socket 18 RC7 Rcomoso/ncKi 11 LCD 16x2 LCD with backlight 9. Other fea 17 RC6 RC1/TIOS1 12 Remote No. 6710V00079B (type LG TV) tures: Wide in LS 8-ohm, 6.4cm speaker 16 RC5/SDO RC2/CCP1 13 put voltage range, CON1 7-pin bergstrip connector 15 RC4/SDI/SDA RC3/SCK/SCL 14 (male/female) long-range infrared CON2-CON7 2-pin SIP connector remote command (male/female) er, microcontroller- Fig. 1:Pin configuration of PIC 16F72 microcontroller in CON8 12-pin bergstrip connector (male/female) based design sup- PDIPpackage
Resistors (all 'A-uiatt, *5% carbon unless stated otherwise): R1 - 10-kilo-ohm R2, R13 - 2.2-kilo-ohm R3-R8 - 470-ohm
62
HDh
c/)
PO
IC1
PIC16F72
o>
ro
<-c
O)
m"
tt
o ro
cn
ro
<0
o ,
(/)
>
cr
C/)>
32 a:
Microcontroller-Based Projects
63
ported with CMOS digital integrated circuits, liquid-crystal display to monitor the status and bilateral digital MOS switches for switching the analogue video/audio signals from cameras At the heart of the circuit is Microchip's PIC16F72 microcontroller, which controls all the functions described in the design. Its pin configuration is shown in Fig. 1.
TABLE I
Switch (IC)
Enable pins to microcontroller Port (RC7)-pin 18 Port (RC7)-pin 18 Port (RC6)-pin 17 Port (RC6)-pin 17 Port (RC5)-pin 16 Port (RC5)-pin 16 Port (RC4)-pin 15 Port (RC4)-pin 15 Port (RCI)-pin 12 Port (RC1)-pin 12 Port (RCO)-pin 11 Port (RCO)-pin 11
SK1 SK1
Camera-1 Camera-1
SK2
SK2 SK3
Camera-2
Camera-2 Camera-3 Camera-3 Camera-4 Camera-4 Camera-5 Camera-5 Camera-6
The circuit
Audio Fig. 2 shows the main control circuit of the SK3 this In camera switcher. circuit, PIC16F72 SK4 Video microcontroller controls all the functions such SK4 Audio as interfacing/initialising the LCD to dis SK5 Video play all the desired characters on the screen, SK5 Audio decoding the RC-5 command on pressing the Video SK6 required keys of the remote control and provid Audio Camera-6 ing high logic to enable corresponding bilateral SK6 CMOS analogue switches TABLE II to connect the video signal from cameras to the videoTruth Table for Port C output socket and audio RCO Camera-ON RC7 RC6 RC5 RC4 RC1 signals to the power ampli PORT fier of the corresponding PortC Camera-1 0 0 0 0 0 1 camera selected from the PortC 0 0 0 Camera-2 0 1 0 remote. Here we have used 0 1 Camera-3 0 0 0 0 PortC the remote control of an 1 0 0 0 PortC Camera-4 0 0 LG TV (remote code No. 0 1 Camera-5 0 0 0 0 6710V00079B). It is read PortC 1 0 0 0 0 PortC 0 Camera-6 ily available in the market. A remote sensor is connected to port RBO (pin 21), called interrupt port, of the controller and the software initialises interrupt rou tines along with timer-0 interrupt to decode the RC-5 command. The RC-5 protocol was described in March 2007 issue of EFY, so it is not discussed here. Any transmission from the remote consists of two start bits, one toggle bit, 5-bit address and 6-bit command. Here we have not used the 5-bit address. A biphase-modulated bit can be thought of as two separate bits that are always the inverse of each other. A logical zero is represented by a '10' pattern on the IR input,while a logical one is represented by a '01' pattern. That is basically used to decode the received message. Toggle bit is a particular property of the RC-5 protocol. This bit changes polarity every time you press a key and will remain unchanged as long as you hold the key. That enables the receiver to detect released keys, which helps to eliminate key bounces. We have also used this bit to detect so that if any key is kept pressed for a long time, the routine detects the command once, keeps the value in a general-purpose register called 'passdummy' (refer to '.asm' file), and does not process and store any further command till the remote key is released. The stored RC-5 command value in register 'passdummy' is used to perform the necessary function given in the source code. The LCD shows the camera number selected from the remote and mode of operation (auto/manual). For camera-hold time set for auto mode and other display text information, please see the LCD screenshot in Fig. 3. Use of the LCD makes the project more user-friendly. All the cameras are to be connected to SKI through SK6 (5-pin DIN connector) as shown in the circuit diagram. The extreme right and left pins are for 12V positive and negative supply (to be fed from the regulated
S2a (IC4) S2b (IC4) S3a (IC4) S3b (IC4) S4a (IC3) S4b (IC3) S5a (IC3) S5b (IC3) S6a (IC2) S6b (IC2) S7a (IC2) S7b (IC2)
64
PAGE 1
five seconds. After five seconds, the screen jumps to the next page (page-2).
After switching or the circuit using the main 'onVoff switch, page-1 appears on the LCD and welcome message is displayed for
6-CAMERA
CCTV SWITCHER
PAGE 3
Page-2 displays the product details, i.e., name of the product. This page also indicates that the switcher is in standby mode and all the cameras are 'off.'
power supply of the main switcher) for the built-in camera module. The 12V power supply is perma nently connected to all the cameras. Audio and video
cameras
the LCD, showing which camera is selected by the switcher, in which mode it is operating and the time set for the selected camera
for auto mode operation. Here the page shows that camera-1 is selected and the switcher is in manual mode. You can now select the desired camera manually from the remote. On pressing again the same Key on the remote the switcher jumps to page-1 and then page-2, and kept in standby mode
selected using switch pairs S2a-S2b through S7a-S7b (built inside IC2 through IC4) and fed to the audio power amplifier and video output sockets,
PAGE 4
On pressing the edit key on the remote, page-5 appears on the screen and allows you to edit the time of the cameras for auto mode operation. Select the camera first and then change or set the time. Once the setting is complete, press the same key again to go back to page-3.
for transmission or mul tiplexing of analogue or digital signals. It is pin to-pin compatible with IC CD4016, but has much lower 'on' resistance, which is relatively constant over the input signal range. Video and audio sig
nals from SKI (camera 1 o 1) are connected to S2a 3 and S2b, respectively, Si 2 2 ON/OFF ;<?ff 02 D1 and both the enable pins COM COM iTru C3 SWITCH : ioom (to switch on both the 25V CK O 230V AC o switches) are shorted out <o o MAINS o o o and connected to port + o o ; <z> C1 +12V 18) of the mi RC7 (pin 1000p 04 si', b D3 C2 X1 35V crocontroller. Similarly, 220p I 40V audio and video signals o from SK2 through SK6 X1 = 230V AC, PRIMARY TO 15V, 2A GND are connected to IC2 SECONDARY TRANSFORMER through IC4 and then to Fig. 4: Circuit for regulatedpower supply Port C of IC1 as shown in Table I. Enable pins of switch pairs S2a-S2b, S3a-S3b, S4a-S4b, S5a-S5b, S6a-S6b and S7a-S7b of IC2 through IC4 are shorted to each other and fed to the corresponding port of Port C as shown in Table I.The microcontroller provides high logic at Port-C pins to switch on a particular camera. The truth table for Port C is shown in Table II. Immediately after switching on the mains, the standby LED (LED7) connected to Port-C pin RC3 glows and the LCD shows the welcome page (refer to the LCD screenshot). On pressing the power key on the remote, the standby LED turns off and the LCD shows which camera is on,' in which mode it is now and default hold time for the corresponding camera in 'Auto'mode. As described above, pins of Port C (RC0, RC1, RC4-RC7) are connected to IC2 through IC4 for selecting the camera to be switched on. LED1 through LED6 are used to check the logic status of Port C. Pressing keys '1' through '6' on the remote makes the corresponding LEDs (LEDl through LED6) glow, indicating 'on condition of the cameras (CAM-1 through CAM-6).
n
1 \
D1-D4 = 1N4007
IN
IC6 1 78S12 3
OUT
IN
IC7 7805
OUT
+5V
Microcontroller-Based Projects
65
Here a 16-character, 2-line LCD is used in 4-bit mode. Data lines D4 through D7 of the LCD are connected to Port-B pins RB4 through RB7. Enable (EN) and reset (RS) pins are connected to RB2 and RB3 pins, respec tively, and the read/write (R/W) pin is connected to ground as we have used the LCD in writing mode only. Preset VRl (10-kiloohm) is used for setting the LCD character contrast.
VWV
Q_ 25V
C10
IC5 UTC820
r 25V
AUDIO IN
FROM CCTV SWITCHER CIRCUIT VOLUME
Power supply
A simple circuit for regu Fig. 5: Circuit diagram of power amplifier lated supply (shown in Fig. 4) is used here. The +12V regulated output is used to power all the six cameras, IC2 through IC4 and IC5 and fed to another 7805 voltage regulator (IC7) to get the regu lated +5V output for the microcontroller (IC1) and the LCD. The current rating of the transformer should be around 2A, de pending on the current consumption of the cameras. Use a good-quality heat-sink for both the regulators.
8 I ] RIPPLE
' STRAP
INPUT
BOOT
31
6H VCC
Power amplifier
5H OUTPUT
A simple power amplifier (see Fig. 5) is used to amplify the sound signal from the cameras and hear it on a small speaker. The audio power amplifier is built around IC UTC820 (IC5). Fig. 6: Pin diagram ofUTC820 audio power UTC820 is a monolithic integrated circuit audio amplifier delivering amplifier an output of 1.2 watts at 9V on an 8-ohm speaker load with 10 per cent total harmonic distortion (THD) and good ripple rejection. It is designed for audio-frequency class-B amplifier with a wide operating supply voltage range of 3V to 14V and minimum external components. The pin configuration of IC UTC820 is shown in Fig. 6. Components at pin 2 of the IC5 decide closed-loop voltage gain (dB) of the amplifier. Here a 47-ohm resistor (Rll) and a 22pF capacitor (C12) are used and, with these values, about 45dB closed-loop voltage gain is achieved. You can reduce the component values for more gain but it's not required here as maximum gain of 75 dB is possible. Capacitor C10 (lOOpF) connected between pins 5 and 7 of IC5 is used for bootstrap and improving the low-frequency signal. The amplifier output at pin 5 is connected to the speaker via C13.The audio signal from the cameras is fed to input pin 3 of the IC via volume control VR2 (10-kilo-ohm), capacitor C17 and resistor R13. Here the output power is limited to about 500 mW at 8-ohm load approximately, so use of a good-quality 6.4cm speaker is recommended.
standby mode and vice versa. (AC mains should be 'on in both the cases.) Camera selection key. Select any of the six cameras manually by pressing any of the numerical keys '1' through '6' once. For example, to select camera-3 press '3' on the remote, and to select camera-5 press '5' on the
remote.
Auto/manual. By default, the microcontroller sets the mode of selection to manual. (In that case, you have to select the cameras by pressing the number keys or the camera up/down keys.) To change to automatic selection (auto) mode, press 'Mute' key and the switcher selects the cameras one by one automatically. Pressing this key again will return the mode of selection to manual, and vice versa. Camera up key (PRA key). By pressing the camera-up key, the switcher selects the next camera. For example, if the LCD is showing camera-2, pressing this key once makes the switcher jump to camera-3. Each successive pressing of this key will make the switcher jump to the next camera. Camera down key (PRV key). By pressing the cameradown key, the switcher selects the preceding camera. For example, if the LCD is showing camera-4, pressing this key once makes the switcher jump back to camera-3. On each CAMERA successive pressing of this key, the switcher jumps back to SELECTION KEY (1-6) the previous camera. Time set up/down key (Vol+ZVol- key). In auto mode,
PSM
SSM
I
POWER
MENU MUTE
POWER ON/OFF
AUTO/MANUAL
- CAMERA UP KEY
TIME
SET-UP KEY
4sns oL
Q.
- CAMERA-DN KEY
-TIMESET-DN KEY
a
l/lI
ARC
SLEEP
EYE
CD CD
SOUND
TV/AV
EDIT KEY
PICTURE
TURBO
the switcher selects the cameras one by one and the picture of the selected camera is held up for a certain time. By de fault, the microcontroller sets this hold time as 5 seconds. You can change this time for each camera individually from 0 to 255 seconds. To change this time, press the edit key (TV/AV) once. The switcher goes to the edit mode. Select the camera (for which you want to change the time) by pressing the camera up/down key. On each successive pressing of the time set up key, the time increments up to 255 seconds maximum. On each successive pressing of the time set-down key, the time decrements up to zero. If you set 0-second time for any camera, the switcher bypasses this camera during selection in auto mode. For example, if you set the time as 0-second for camera-3, in auto mode, the switcher selects camera-1, camera-2, camera-4, camera-5 and camera-6. Here the switcher bypasses camera-3. This function is useful if you want to skip certain cameras. Edit key (TV/AV). To change the camera hold-up time for 'auto mode,' enter 'edit' mode first by pressing this key once and then set the desired time by pressing the time up/ down key as described above. To exit edit mode after setting the time, press the same key on the remote once again. Tie controller goes back to manual mode.
After assembling the circuit without microcontroller, apply the power using 'on/off' switch SI. Check the DC voltage at pin 3 of regulator IC7. It should be +5V. Check the same voltage at pins 1and 20 of the base of IC1. Now, switch off the power, insert the microcontroller in its base and recheck all the connections from the PCB to
67
Microcontroller-Based Projects
the LCD and IR sensor TSOP1738. On applying the power, page-1 and page-2 text should display on the LCD screen. Using the remote, switch on the switcher and change the functional status on the LCD by referring to CCTV switcher remote commander (shown in Fig. 7) and LCD screenshots (shown in Fig. 3). Adjust VR1 for maximum con trast on the LCD. Ifyou don't get any output on the LCD, troubleshoot as follows: 1. No output on the LCD. Switch off the power and check continuity between the LCD and various pins of IC1 and regulator IC as shown in the schematic diagram. If the con nections are Ok, switch on the power, vary VR1 and check the voltage at pin 3 of the LCD (OV to 5V). 2. No backlight on the LCD. Fig. 8:Actual-size, single-side PCB for the remote-controlled 6-camera CCTV switcher Check the voltage at pin 15 (+5V) CCTU SUII TCHER URl 1UK and pin 16 (OV) of the LCD. q 0 0710B 3. Page 1/page 2 is shown on the 1615M1312 II, :n "lUDULFfr 5 3 2 1 R17-R22=1K CON1 R9-R10=75E screen but the remote commander 2 R3-R8=470E: rq Ji3 doesn't ivork (nothing happens on Q OQaQQQQQQaQPQ o o S r .cr pressingfunctional keys of the remote). PIC16F72 vwO)6 Check the supply at pin 2 of the IR R, 00000999999090 IQK C5 rt sensor. It should be +5V. If +SV is O OOOl (O J16 33p 33p available at pin 2, check the voltage at o _ o R2cO-0 pin 3 of the IR sensor. If there is no O01 ad) 4/u wfy [w V a ' SEE voltage at pin 3, replace the IR sensor UN or check the PCB, etc for shorting. Once the LCD shows page-1 CDnQ6 LD4Q66 CD 40 and page-2 text properly and the re mote commander is working, switch LJ[-ri off the power and then switch it IPIO O 01 e o 1OOu D4=1N4D07/ I Qu on again using Si. Now the LCD booa should show page-1 and page-2 as 0+y <R12 78S1 2 jy UTC820 >ie shown in Fig. 3. At the same time, CI 5 220u 0900 pin 14 of the MCU should go high UR2 I UK CCTU SUITCHER (+5V) and the power standby LED should glow. Now press 'Power' key on the remote. Pin 14 of the MCU Fig.9: Component layout for the PCB should go low and the standby LED should turn off, and vice versa, on pressing the same key again. If this doesn't happen, replace the microcontroller. Connect LED1 through LED6 to connector CON1. Press 'Power' key on the remote to switch on the switcher. Page-3 text should appear on the LCD, showing camera-1 is 'on,' the switcher is in manual mode and the default time of camera hold for auto mode. At the same time, Port-C pin RC7 should go high and LED1 should glow. Select other cameras either by pressing keys 1through 6 or camera up/down keys of the remote
mi
i
57,
K8
DIOOO
--
ni
~?i
>
:-Pho
sal
68
and check whether the corresponding LEDs (LEDl through LED6) are glowing (refer to Port-C truth table). Simultaneously, page-3 should show the corresponding camera number accordingly. If the LEDs don't glow according to the truth table, replace the microcontroller. When camera- 1 is selected, the LCD should show camera- 1and LEDl should glow. If the monitor does not show the video of camera-1, or you hear no audio from the power amplifier, check 5V logic at pins 5 and 6 of IC4. If there is no voltage at these pins, check the availability of 0.6V at the base of transistor T5, +5V at its emitter and +12V at its collector. Follow the same procedure for all other cameras and their corresponding switching circuits.
Software
The source program is written in Assembly language and compiled using MPASM tool suite. The explanation of the Assembly source code is available on the link given below.
Construction
A single-side, solder-side PCB layout for the microcontroller-based remote-controlled six-camera CCTV switcher is shown in Fig. 8 and its component layout in Fig. 9. Connect CCTV cameras in the sockets provided (SKI through SK6). Also connect the LCD and remaining components (as shown in Fig. 2) and +SV and +12V from the power supply circuit. Now a welcome message will appear. Press 'Power' key on the remote to start the switcher.
Download source code: http://www.efymag.com/admin/issuepdf/Microcontroller%20Based%20CCTV%20
Switcher.zip
Microcontroller-Based Projects
69
ANSHUMAN BEZBORAH
we present
An
electronic lock allows activation of an electric appliance only on entering the correct password. Here such an electronic locking system in which a PIC16F877A microcontroller plays the role of ,the processing unit. Hie MCU is interfaced with a 4x4 matrix keypad and a 16x2 LCD to form the user interface. Using this circuit, you can make any electrical appliance password-protected. It can also be used as an
-O +5V
- 15012
R9
S1 I
-O O-
R10 4.7K
MCLR
32
R1
R2
R3
R4
17
RC2
RB3
RA1 RA2
36
35
SNIL
R5
RB2
RA3
RDO
uo O
CO
y
_K CO
N
34
<
-vwv
R7
R8
~VWV
R6
RB1
RBO
RB4
RD1
o
Q.
33 37
38 39
RD2 RD3
EN RW
RS
4
D4 D5 D6 D7
11 12 13 14
RB5
RB6
r~
2
3
1
15
16x2 LCD
13
40
RB7
16
HDh' Xtali
C5 -L22p
4MHz
R1-R8 = 4.7KSi
Xtal = 4MMz S1-S17 TACTILE SWITCH
I
IC3
7806 3
COM
OUT
-J- C4 22p
LO
C3 0.1(J
+6V
electri
D3
D4
230V AC 50Hz
D6
IC2 7805
OUT
+5V
D5
COM
cally actuated door lock. Hie system turns on the appliance on entering a four-digit password set by the user.
C1
NO
D1-D6 = 1N4007
1000m
C2 ~J~ 01p
Circuit description
GND
Fig. 1 shows the circuit of the PIC microcontrollerbased electronic lock. It can be divided into five
70
1
Semiconductors:
PARTS LIST
IC1 IC2 IC3 LED1
D1 D2-D6
modules, EEPROM and analogue comparators. Hie job of the MCU in this project is to receive signals from the input otherwise): device (keypad) and take corresponding actions. Whenever any key is R1-R8, RIO - 4.7-kilo-ohm pressed on the keypad, the software program in the MCU identifies the - 150-ohm R9 - 10-kilo-ohm Rll pressed key and accordingly turns on or turns off the appliance. Simulta - 470-ohm R12 neously, it also displays a message on the LCD screen. VR1 - 10-kilo-ohm preset 4x4 matrix keypad. A 4x4 matrix keypad is used to give commands Capacitors: and the password to the MCU. It consists of 16 keys (S2-S17) arranged CI - lOOOpF, 25V electrolytic in the form of a square matrix of four rows and four columns. Each C2, C3 - 0.1pF ceramic key in the matrix is labeled according to the operation assigned to it. C4, C5 - 22pF ceramic The connections from the pin-outs of the keypad to the MCU pins are Miscellaneous: shown in Fig. 1. Rows 1 through 4 are connected to pins RB3, RB2, - 4MHz crystal oscillator RBI and RBO of Port B of the MCU, respectively. Columns 1 through - 230V AC primary to 0-9V, XI 4 are connected to pins RB4 through RB7 of Port B, respectively. 500mA secondary 16x2 LCD. A Hitachi HD44780 16x2 LCD is used to display transformer - HD44780-hased 16x2 LCD various messages. It also displays an asterisk mark (*) for each digit RL1 - 6V, lC/O relay of the password entered. Control lines EN, RW and RS of the LCD - Push-to-on tactile switch S1-S17 module are connected to pins RA1, RA2 and RA3 of Port A of the MCU, respectively. Commands and the data to be displayed +6V O are sent to the LCD module in nibble mode from Port D of RL1 = 6V, the MCU. The higher four data bits of the LCD (D4 through 1C/0 RELAY RL1 D7) are connected to the lower nibble of Port D (RDO N/O O RD3) of the MCU. o through D2 S 1N4007 Relay driver. RC2 pin of Port C of the MCU is interfaced N/C with the relay driver circuit (shown in Fig. 3) to switch on or LOCK switch off the AC load (appliance). A relay driver circuit is D1 ACTUATOR RC2 1N4148 nothing but a simple electronic circuit that drives an electro T1 mechanical relay. In this project, a 6V, single-changeover relay R11 SL100 FROM 10K is used for switching the appliance 'on' or 'off.'Transistor SL100 IC1 POWER SUPPLY plays the role of the relay driver. Whenever the user enters the correct password, RC2 pin Fig. 3: Relay driver circuit goes high (RC2=1). Consequently, transistor SL100 is triggered to energise the relay and the appliance turns 'on.' When RC2 is low (RC2=0), the appliance turns 'off' Free-wheeling diode 1N4007 protects the relay driver circuit from the reverse voltage developed in the relay coil. You can also use optocoupler MCT2E to isolate the relay driver circuit from the microcontroller circuit. Whenever the user enters the correct password, RC2 pin goes high (RC2=1) and the internal LED of the MCT2E IC glows, which, in turn, triggers the internal transistor of MCT2E. Power supply. Fig. 2 shows the power supply circuit. The 230V AC mains supply is stepped down to 9V AC using step-down transformer XI. The output from the secondary of the transformer is rectified by a bridge rectifier comprising diodes D3 through D6 and filtered by capacitor Cl.The filtered output is regulated by ICs 7805 and 7806 connected in parallel to obtain the required 5V and 6V, respectively.
Resistors (all Vi-watt, 5% carbon unless stated
T1
- PIC16F877A microcontroller - 7805 voltage regulator - 7806 voltage regulator - 5mm Light-emitting diode - 1N4148 diode - 1N4007 diode - SL100 transistor
sections: input (4x4 matrix keypad), processing unit (PIC16F877A MCU), appliance controller (relay driver), display (16x2 LCD), and power supply. PIC16F877A MCU. The PIC16F877A is an 8-bit microcontroller based on reduced instruction set computer (RISC) architecture. It has 8kx 14-bit flash program memory, 368 bytes of RAM and many other internal peripherals like analogue-to-digital converter, USART, timers, synchronous serial port, compare captures and pulse-width modulation
i i
Microcontroller-Based Projects
71
Software
The software code is written in 'C' language and compiled using Hitech C compiler in MPLAB IDE. S.No. Row Column Label Operation/digit entry MPLAB IDE is a very powerful software develop Digit '1* 1 1 1 1 ment tool for Microchips MCUs. It can be downloaded Digit '2' 2 1 2 from www.microchip.com free of cost. It consists of 2 Digit '3' 3 1 3 tools like text editor, assembler, cross compliers and 3 4 No operation allotted 1 Nil simulator. Hitech C compiler is meant for Microchip's 4 PIC 10/12/16 series of MCUs. Its Lite edition comes for 5 Digit '4' 1 4 2 free with newer versions of MPLAB IDE like MPLAB 6 Digit '5' 5 2 2 v8.2 or v8.3, and it can also be downloaded for free from 7 Digit '6' 2 3 6 www.htsoft.com. 4 2 Lock Lock or turn off 8 The tasks performed by the software are: the appliance 1. Identify the key Digit '7' 3 9 1 7 2. Take the action allotted to the identified key Digit '8' 3 8 2 The key identification is done by identifying the row 10 Digit '9' 3 3 9 11 and the column to which the key belongs. Fig. 1shows Change the password 3 New 4 how the keypad is connected to Port B of the MCU.The 12 4 Clear or backspace 1 C lower nibble of Port B is declared as output pins (scan 13 lines) and the upper nibble is declared as input pins 14 Digit '0' 4 0 2 (return lines). The number OFh is written to Port B so 15 4 3 Go Should be pressed after entering the password that the lower four bits become high and the upper four bits become low. Open Open the lock (asks for 16 4 4 password when pressed) Whenever a key is pressed, the upper nibble pin (return line) of Port B, to which the column containing the key is connected, goes high.Thus the column is identified. Column identification is done using a switch-case block in the main program. On identifying the column, the rowfind(int) function is called, which does the job of row identification. To identify the row, scan lines are made low one by one in sequence and status of the return line corresponding to the key is checked. If it becomes low, the key belongs to that scan line or row. The row and column numbers are stored in two global variables 'row' and 'col.' A key debouncing delay of 20 ms is provided in the program by calling the DelayMs(20) function. After identifying the key, the action( ) function is called in the main program, to perform the action corre sponding to the identified key. The detailed procedure for developing the project using MPLAB IDE, compiling the same using Hitech C compiler and burning the executable hex file to the microcontroller was explained in 'Construction' section of EFY's May 2010 issue. The above description is available in a file named 'lock.c.' Functions lcd_init( ), lcd_goto(int), lcd_clear( ) and lcd_putch(char) are defined in a file named 'led.c' and the DelayMs(int) function is defined in the delay.c file. Add all the three 'C' fileslock.c, lcd.c and delay.c as source files to the MPLAB IDE project. Save the project file as 'Elock.mcp.' Set configuration bits properly before building the project. Select the oscillator as XT and disable all other features like watchdog timer, power-up timer and brownout detection. After success fully building the project, the Elock.hex file is generated. Burn it into the chip using a suitable programmer, e.g., MPLAB ICD2.
Testing
Once the program is burnt into the chip and the hardware setup is ready, the user can test the system. When the power supply is switched on, message "Welcome" is displayed on the LCD screen. The default password set in the program is 1234. To turn on the appliance, press 'Open' key. The system will ask for the password. Enter the password as 1234
72
PIC Microcontroller-Based Electronic Lock
and press 'Go.' The appliance should (RC2=1) and the message "Password Accepted" should be dis played for two seconds followed by the message "Lock Open." To turn off the appliance, press 'Lock.' The appliance should immedi ately turn off (RC2=0) and the message "Lock Closed" should be displayed on the LCD screen. To set a new password, press 'New' key. The system should ask for the cur rent and new passwords. Press 'Go' each time after you enter the four-digit pass word. The message "Password Saved" should appear for two seconds, followed by the message "Welcome." Now you can turn on the device by pressing 'Open' and then entering the new pass word that you have set. Key 'C'acts like 'Backspace' key in a PC's keyboard.
turn on
Fig. 4; Actual-size, single-side PCB for the PIC microcontroller-based electronic lock
Construction
A single-side, solder-side PCB layout for the PIC microcontroller-based electronic lock is shown in Fig. 4 and its component layout in Fig. 5. Connect the 4x4 matrix keypad and 16x2 LCD to PIC16F877A microcon troller as shown in Fig. 1. Complete the remaining connections also as shown in Fig. 1. Connect the appliance to be controlled to RC2 (pin 17) of Port C through the relay-driver circuit as shown in Fig. 3. Connect 6V power supply from the power supply circuit to the relay driver circuit. The 5V supply required by the microcontroller is ob tained from the 7805 regulator output.
Download source code: http://www.
.....
PIC MCU BASED ELECT LOCK
5M 1312 11
6 5 4 3 2 1
PIC16F877A
ti
SL100 D2-D6=1N4007
C0N1
o
j
o
7806
efymag.com/admin/issuepdf/Electronic%20Code%20Lock%20code%20
new.rar
X/ >
o:Y>"
061OB
Microcontroller-Based Projects
73
Domestic Applications
Many
a time we forget to switch off the motor pushing water into the overhead tank (OHT) in our households. As a result, water keeps overflowing until we notice the overflow and switch the pump off. As the OHT is usually kept on the topmost floor, it is cumbersome to go up frequently to check the water level in the OHT. Here's a microcontroller-based water-level controller-cum-motor protector to solve this problem. It controls 'on' and 'off' conditions of the motor depending upon the level of water in the tank. The status is displayed on an LCD module. The circuit also protects the motor from high voltages, low voltages, fluctuations of mains power and dry running. PARTS LIST
Semiconductors:
I/O lines), two 16-bit timers/counters, on-chip oscillator and clock cir cuitry. Eight pins of port-1 and three pins of port-3 are interfaced with data and control fines of the LCD module. Pins P3.0, P3.1 and P3.6 are connected to RS (pin 4), R/W (pin 5) and E (pin 6) of the LCD, respectively. Pin EA (pin 31) is strapped to Vcc for internal program executions. Switch S2 is used for backlight of the LCD module. Power-on-reset is achieved by connecting capacitor C8 and resistor R14 to pin 9 of the microcontroller. Switch SI is used for manual reset. The microcontroller is operated with a 12MHz crystal. Port pins P2.0 through P2.2 are used to sense the water level, while pins P2.3 and P2.4 are used to sense the under-voltage and over-voltage, respectively. Pin P3.4 is used to control relay RL1 with the help of optocoupler IC3 and transistor T5 in the case of under-voltage, over-voltage and differ ent water-level conditions. Relay RL1 operates off a 12V supply. Using switch S3, you can manually switch on the motor. The LM324 (ICl) is a quad operational amplifier (op-amp). Two of its op-amps are used as comparators to detect under- and over-voltage. In normal condition, output pin 7 of ICl is low, making pin P2.3 of IC2 high. When the voltage at pin 6 of N1 goes below the set reference voltage at pin 5 (say, 170 volts), output pin 7 of N1goes high.This high output makes pin P2.3 of IC2 low, which is sensed by the microcon troller and the LCD module shows 'low voltage.' In normal condition, pin 1 of N2 is high. When the voltage at pin 2 of N2 goes above the set voltage at pin 3, output pin 1 of N2 goes low. This low signal is sensed by the microcontroller and the LCD module shows 'high voltage.' Presets VRl and VR2 are used for calibrating the circuit for underMicrocontroller-Based Projects
ICl - LM324 quad op-amp Circuit description IC2 - AT89CS1 microcontroller IC3 - PC817 optocoupler the 1 the microcontroller-based of shows water-level circuit con Fig. IC4 - 7805, 5V regulator troller-cum-motor protector. It comprises operational amplifier LM324, T1-T4 - BC548 npn transistor microcontroller AT89C51, optocoupler PC817, regulator 7805, LCD T5 - SL100 npn transistor module and a few discreet components. D1-D14 - 1N4007 rectifier diode The AT89C51 (IC2) is an 8-bit microcontroller with four ports (32 Resistors (all '/i-watt, 5% carbon):
Rl, R2, R7,
R11.R12
R3,R9 R4,R5, R8 R6 RIO R13 R14 R15-R17 R18-R20 R21, R22 RNW1
-kilo-ohm 1
- 2.7-kilo-ohm
- 330-ohm
- 560-kilo-ohm
- 470-ohm
- 10-kilo-ohm preset
lOOOpF, 35 V electrolytic
Capacitors:
CI C3 C4 C5,C6 C7 C8
- 220|iF, 16V clcctrolvtic - 33pF ccramic disk - lOOpF, 35 V clcctrolvtic - lOpF, 16V electrolytic
Miscellaneous:
XI
RL1
- 230 AC primary to 12V, 500mA secondary transformer 12V, lC/O relay 12MHz crystal Push-to-on switch On/off switch LCD module (1x16)
*TAL
SI S2, S3
75
and over-voltage, respectively. Hie AC mains is stepped down by transformer XI to deliver a sec ondary output of 12V at 500 mA. The transformer
output is recti fied by a full-wave
31 VO'
O c
1
03
r>
1
O 3
bridge rectifier comprising diodes D5 through D8, filtered by capaci tor C2, and used for the under- and over-voltage de tection circuitry. The trans former output is also rectified by a full-wave bridge rectifier compris ing diodes D1 through D4, fil tered by capacitor CI and regulated by IC4 to deliver regulated 5V for the circuit. When wa ter in the tank
rises to come in
contact
o
o
2 3
5
w/\
*3
m -vwv
S3
JL
'VWv
vwv
vwv
transistor BC548 goes high. This high signal drives transistor BC548 into saturation and its collector goes low. The low signal is sensed by port pins of mi crocontroller IC2 to detect empty
R21 3312
the water-level controllercum-motor protector (Fig. 1) is shown in Fig. 2 and its component layout in Fig. 3.
Operation
When water in the tank is below sensor A, the motor will switch on to fill water in the tank. The LCD module will show 'motor on.' Hie controller is pro grammed for a 10-minute time interval to check the dry-run condition of the motor. If water reaches sensor B within 10 min utes, the microcontroller comes out of the dry-run condition and allows the
motor to
keep pushing
water
in the tank.
o
7
C4 220u
con
S2
ft b
nrm
StNSLW
33p
BACK LIGHT
EFY/FEB-07/SUNIL/UATER
C5\oZo]
R15
;33p( <33E
iips t>PoH)P ~
Xo-DTo
ci 1 OOOu
R13
_ 21_ o *OQE
R18-R20=2.2K
O
"n
>LJ
I J
O OO
lOOOu
IC2 AT89C51
RNUl 10K m
Oo
ao) i o o o o
g)
C8()
op 9 RESET
J3
: S: y.
0-X1OOu
lOOOu
C3V
S3
O
/
kL
R21K
@
30EO-wO
U1324
CI I
l wDq
0 0 0 0 0 0 fl560K
T1-T1=8C518 D1-D14=1N4007
T5SL100
R12 1K
The motor will remain 'on' until water reaches sensor C. Then it will stop automatically and the microcontroller will go into the standby mode. The LCD module will show 'tank full' followed by 'standby mode' after a few seconds. The 'standby mode' message is displayed until water in the tank goes below sensor A. In case water does not reach sensor B within 10 minutes, the microcon troller will go into the dryrunning mode and stop the motor for 5 minutes, allowing it to cool down. The LCD module will show 'dry-sumpl.' After five minutes, the microcontroller will again switch on the motor for 10 minutes and check the
Microcontroller-Based Projects
77
B. If water is still below sensor B, it will go into the dry-running mode and the LCD module will show 'dry-sump2.' The same procedure will repeat, and if the dry-run condition still persists, the display will show 'dry-sump3' and the microcontroller will not start the motor automatically. Now you have to check the line for water and manually reset the microcontroller to start operation. In the whole procedure, the microcontroller checks for high and low voltages. For example, when the voltage is high, it will scan for about two seconds to check whether it is a fluctuation. If the voltage remains high after two seconds, the microcontroller will halt running of the motor. Now it will wait for the voltage to settle down. After the voltage becomes normal, it will still check for 90 seconds whether the voltage is normal or not. After normal condition, it will go in the standby mode and start the aforementioned procedure.
status at sensor
Practical applications
This controller is useful for single-phase operated motor-pumps and the pumps that suck water from the ground water tank. A small push-to-off manual switch in series with sensor A can also make it useful for pumps that suck water from Jal Board's supply. Because of the particular timing of this water supply, the controller must be switched on within the timing of the water supply and switched off when water is not being supplied. When the controller is 'on during the supply timings, it will wait for the tank to get empty before starting the motor. However, you can also start the motor using the pushbutton. The motor will turn on ignoring the status of the water level and will go through the aforementioned procedure.
Calibration
Care must be taken when calibrating for under- and over-voltages. Always calibrate when the relay is in 'on posi tion. Ifyou calibrate in the standby mode, it will trip at a voltage nearly 10 volts lower than the set voltage due to
Software
The source code is written in Assembly language and assembled using 805 1cross-assembler. The generated Intel hex code is burnt into microcontroller AT89C51 using a suitable programmer. The software is well-commented and easy to understand. All the messages are displayed on the LCD module. Downloadsource code: http://www.efymag.com/admin/issuepdfAVaternew.zip
WATER. LST
PAGE 1
0031 1200A0
KR LCD
6
7
8
LCALL
MOV A,
1 2
$M0D51
0034 740F
#0FH 0036 1200A0
LJMP
LCALL
0000 02002F
M0V A,
9
10
MOV A,
LCALL
78
11
12
MOV A,
LCALL
MOV A,
WR_LCD 0043 7480 I80H 0045 1200A0 WR_LCD 0048 7453 53H 004A 120000 ;ie LCD_RAM 004D 7454 # 54 H 004F 1200C0 LCD_RAM 0052 7441 41H 0054 1200C0 LCD_RAM 0057 744E #4EH 0059 1200C0 LCD_RAM 005C 7444 #44H 005E 1200C0 LCD_RAM 0061 7442
13
14
LCALL
15
; WRITE DATA TO LCD 16 * STANDBY -MODE"
MOV A,
LCALL
MOV A,
..
17
18
19
20
LCALL
MOV A,
LCALL
MOV A,
/RETURN TO PROGRAMME 50 OOCO ORG 00C0H 51 OOCO 1200FO LCD_RAM: LCALL SETT /CHECK READY STATUS OF LCD OOC3 F590 52 MOV PI,A /MOVE CONTENS OF A TO PORT 53 OOC5 D2B0 SETB WRITE TO DISPLAY RAM OF LCD P3.0 54 CLR P3.1 OOC7 C2B1 55 SETB OOC9 D2B6 P3.6 56 OOCB C2B6 CLR P3.6 57 RET OOCD 22
/ GO TO PROGRAMME
21
22
LCALL
MOV A,
00F0 00F0H
58
ORG
23
24
WATERNEW PAGE 2
OOFO C2B6 59 SETT: 00F2 7590FF 60 OFFH /SET PORT1 FOR INPUT OOF5 00 61 / DELAY
CLR P3.6
MOV PI,
LCALL
MOV A,
25
NOP
26
27
LCALL
MOV A,
LCALL
OOF6 C2B0
00F8 D2B1 P3.1 OOFA C2B6 OOFC D2B6 P3.6 OOFE 2097F9 PI.7, LI 0101 C2B6 0103 22 /BACK TO PROGRAMME 010A
62
63
28
64 65
29
30
31
; JUMP TO 9TH POSITION
MOV A,
LCALL
MOV A,
32
;OR SECOND LINE
LCALL
MOV A,
69 70
71 72 73
ORG
WR_LCD 0075 744D #4DH 0077 1200C0 LCD_RAM 007A 744F 4FH
007C 1200C0 LCD_RAM 007F 7444 #44H
LCALL
MOV A,
LCALL
010AH 010A D276 /SET USER FLAGS 010C D277 010E D278
0110 7 5A0FF P2,#0FFH 0113 30A420 P2.4,L2
/SET PORT2 FOR INPUT 74 JNB L4 : /IF H/V THEN GOTO 0136
37 38
39
40
MOV A,
LCALL
MOV A,
75 JNB /IF L/V THEN GOTO 018B H 76 JNB /SCAN FOR TANK TO BE EMPTY
77
SJMP
LCALL
41
;GO TO 010AH
LJMP
ORG
42
43
44
/GOTO 0130 H 011E 120750 78 LOOP: LCALL TMR_10MIN /CALL 10 MIN. TIMER 0121 307867 79 JNB 78H, L3 /L/V THEN GOTO 018B H
0124 30770F 80
/
JNB
JB
WR_LCD: LCALL
MOV
77H, L2
0127 20765E
Microcontroller-Based Projects
79
012D 020260
83
LOOP1:LJMP
84 85
L130
;START MOTOR
CLR
117
MOV A,
118
LCALL
LJMP
NOP
LJMP
NOP
;DISPLAY MOTOR ON 86
119
; GOTO 04 90 H
120
87 0136 1201D8 LCALL L2 L2: : SECONDS DLY_2SEC /WAIT FOR 0139 20A4D7 88 JB P2.4,L4 /STILL H/V THEN GOTO 0113 H 013C D2B4 89 LOOP2 :SETB ;H/V THEN OFF MOTOR P3.4 90 013E 00 NOP 91 NOP 013F 00 0140 1202B3 92 LCALL /INITIALIZE LCD INI_LCD 0143 7448 93 MOV A, #48H .DISPLAY HIGH-VOLTAGE 0145 120000 94 LCALL LCD_RAM 0148 7449 95 MOV A, #4SH 014A 120000 96 LCALL LCD_RAM 014D 7447 97 MOV A, #47H 014F 120000 98 LCALL LCD_RAM 0152 7448 99 MOV A, #48H 0154 1200C0 100 LCALL
121
; GOTO 0226 H
L5 :
LJMP
DLY_2SEC
018E 20A382 P2.3,L4 0191 D2B4
; STOP MOTOR IF ON
122 L3: LCALL /WAIT FOR 2 SECONDS 123 JB /VOLTAGE OK THEN GOTO 0113 H 124 LOOP3 :SETB P3 4
0193 1202B3 INI_LCD 0196 744C #04CH 0198 1200C0 LCD_RAM 019B 744F
#04FH 019D 1200c0
125
LCALL
/INITIALIZE LCD
126 /DISPLAY LOW-VOLTAGE 127
128 129
MOV A,
LCALL
MOV A,
LCALL
130
131 132
MOV A,
LCALL
MOV A,
01A7 1200C0
133 134
135 136
LCALL
MOV A,
LCALL
MOV A,
LCD_RAM
101
102
103
MOV A,
LCALL
MOV A,
01AA 7456
#56H 01AC 1200c0
#04FH
104
105
106
LCALL
MOV A,
LCALL
MOV A,
137
138 139
LCALL
MOV A,
LCALL
MOV A,
107
140
108
109 .MOVE TO 9TH CHARACTER 110
111
LCALL
MOV A,
LCALL
LCD_RAM
016B 74C0 #OCOH 016D 120OAO WR_LCD 0170 7454 #54H 0172 120000 LCD_RAM 0175 7441 #41H 0177 120000 I.CD_RAM 017A 7447 47H 017C 120000 LCD_RAM
WATERNEW
141
142 /GOTO 9TH CHARACTER 143
144 /START DISPLAY AGAIN 145
14 6
LCALL
MOV A,
LCALL
MOV A,
MOV A,
112
113
114
LCALL
MOV A,
LCALL
LCALL
MOV A,
LCALL
LCD_RAM
01C8 7447 #47H 01CA 120000
147
115
MOV A,
LCALL
116
PAGE 3
LCD_RAM 01CD 7445 #45H 01CF 1200c0 LCD_RAM 01D2 0204BO CHK_LV 01D5 00
148 149
150 /GOTO 04B0 H 151
MOV A,
LCALL
LJMP
80
NOP
01D6 00
NOP
152
153
01D7 00
NOP
154 155
156 157 158 159 160 161
ORG
LCALL
L7 :
0262 00
0263 0264 0265 0266 0267 0268 0269
00
00 00 00 00 00 00 DDF8
L6 :
162
163 164
00
00
00 00
198
DJNZ
DJNZ
LCALL
165
166
167 168
DJNZ
RET
LCD_RAM
0271 7441 *41H 0273 120000 LCD_RAM
0226
ORG
LCALL
169
;STOP MOTOR
M STOP: SETB
LCALL
205 206
207
MOV A
LCALL
MOV A
022D 120OCO LCD RAM 0230 7452 # 52H 0232 1200C0 LCD_RAM
WATERNEW
LCALL
MOV A,
LCALL
173
174
PAGE 4
175
176
MOV A,
LCALL
MOV A,
*4BH 027D 1200c0 LCD RAM 0280 74B0 #0B0H 0282 1200c0 LCD_RAM 0285 7446 *46H 0287 120OCO LCD RAM 028A 7455
55H
208 209
210
LCALL
MOV A
LCALL
MOV A
211
212
LCALL
MOV A
LCALL
MOV A
213
214
215
LCD_RAM
023A 74B0 #0B0H 023C 120OCO LCD RAM
177
178
LCALL
MOV A,
216
LCALL
179 180
181
LCALL
MOV A,
*0C0H
0296 1200AO WR_LCD 0299 744C #4CH 029B 120000
LCD RAM
218
219
LCALL
MOV A
182
183
184
LCALL
MOV A,
LCALL
MOV A,
LCALL
LCALL
LJMP
221
/ DISPLAY IT FOR 2 SECONDS
185
186 187
LCALL
MOV A,
223
224
ORG
Microcontroller-Based Projects
81
225
226
LCALL
MOV A,
LCALL
261 262
263
227
228 229
230 231
MOV A,
LCALL
MOV A,
LCALL
264
L10:
L9 :
232
MOV A,
02C9 1200AO
233
LCALL
234
RET
NOP NOP NOP DIS_M_ON : LCALL
265 0329 00 266 032A 00 267 268 032B 00 032C DDFA 269 R5, L9 / 0328 032E DCF6 270 R4, LI0 / 0326 271 0330 DBF2 R3, Lll / 0324 272 0332 DAEE R2, L12 ,0322 0334 22 273 /BACK TO MAIN PROGRAMME
#0FFH 0328 00
DJNZ
DJNZ
DJNZ
RET
235 236
237 238
274
ORG
.
.
#04FH
02 DA 1200C0
L430 : JNB 275 /IF TANK FULL GOTO 04 3C H 276 JNB / H/V THEN GOTO 043F H L436 : JNB 277 ;L/V THEN GOTO 0448 H L439 : 278 SJMP /GOTO 0430 H 279 NOP
280
L43C:
LJMP
,-ACK TO MAIN PROGRAMME
242
243
244
245
MOV A,
LCALL
MOV A,
043F 1201D8 DLY 2SEC 0442 20A4F1 P2.4, L436 0445 02013C LOOP2 0448 1201D8
L43F: 281 LCALL /WAIT FOR 2 SECONDS 282 JB /IF NOT H/V THEN GOTO 0436 H
283
LJMP
/H/V
02E4 1200C0
LCD RAM
246
LCALL
MOV A,
LCALL
MOV A,
247
248
284 L448: LCALL /WAIT FOR 2 SECONDS 285 JB /IF NOT L/V THEN GOTO 0439 H
286
LJMP
249
250
LCALL
MOV A,
ORG
NOP NOP
CHK_HV:
L492:
LCALL
251
252
253
DLY_2MIN
WATERNEW PAGE 6
#04FH
02F3 1200c0 LCD_RAM 02F6 744E #04EH 02F8 1200c0
LCDRAM 02FB 02011E LOOP 02 FE 00 02FF 00 0300 120320 LCALL
MOV A,
254
LCALL
TMR_5MIN
0303 020550
MAIN
LJMP 255 3ACK TO MAIN PROGRAMME AT 011E H 256 NOP 257 NOP L300 : LCALL 258 /CALL 5 MINUTES TIMER
259
LJMP
ORG
04 95 30A4FA 291 P2.4,L4 92 /CHECK FOR H/V AGAIN 0498 020000 292 START /GOTO START AGAIN 293 04B0 04B0H 04B0 00 294 CHK_LV: NOP 04B1 00 295 296 04B2 120500 L4B2: DLY_2MIN /WAIT FOR 2 MINUTES 04B5 30A3FA 297 P2.3, L4B2 /CHECK FOR L/V AGAIN
JNB
LJMP
ORG
NOP LCALL
JNB LJMP
0320
260
04B8 020000
298
82
START
TMR_10MIN
ORG
0500
299
300 301
302
334
; LOW VOLTAGE
JNB
THEN GOTO
L502 :
L504 :
MOV
MOV
335
336
;IF TANK
00 00 00 00
L506: NOP
NOP NOP NOP
DJNZ
337
050A DCFA R4, L506 050C DBF6 R3, L504 050E DAF2
338
308
309
DJNZ DJNZ
339 L595: JNB ;LOW VOLTAGE THEN GOTO 05A3 H 340 L598 : SJMP /REPEAT FROM 058F H
310
RET
ORG
341
L59A: LCALL
JB
342
; IF NOT
H/V
THEN GO BACK TO
312 M_START: LJMP ;SUB BRANCH DUE TO SPACE PROBLEM SUB_BR 313 0550 30A447 MAIN: JNB P2.4, L59A /CHECK FOR HIGH VOLTAGE 0553 30A34D JNB 314 ; CHECK FOR LOW VOLTAGE P2.3, L5A3 315 0556 C2B4 CLR P3.4 f IF VOLTAGE OK THEN
START MOTOR
DLY_2SEC
05A6 20A3EF P2.3, L598 0598 H 05A9 020191 LOOP 3 05AC D2B4 P3.4 05AE 1202B3 INI_LCD
WATERNEW PAGE 7
34 3 LJMP C_HV : /STILL H/V THEN GOTO 013C H L5A3: LCALL 344 ;WAIT FOR 2 SECONDS 345 JB ; IF NOT L/V THEN GO BACK TO 34 6 LJMP C_LV: /STILL L/V THEN GOTO 0191 H DRY: 347 SETB ;STOP MOTOR 348 LCALL /INITIALIZE LCD
0558 1202B3
INI LCD
316
;INITIALIZE LCD
LCALL
MOV A,
055B 744D
#04DH LCD 055D 1200C0
317
318
LCALL
MOV A,
319
320
321 322
323
LCALL
MOV A,
LCALL
MOV A,
324
325
LCALL
MOV A,
326
LCALL
LCD_RAM 0574 74B0 #0B0H 0576 1200C0 LCD_RAM 0579 744F #4FH 057R 120000 LCD_RAM 057E 744E
327 328
329 330
MOV A,
LCALL
MOV A,
LCALL
LCD_RAM 05B6 7452 #52H 05B8 1200c0 LCD_RAM 05BB 7459 *59H 05BD 1200c0 LCD_RAM 05CO 74B0 *0B0H 05C2 120OCO LCD RAM 05C5 7453 53H 05C7 120000 LCD_RAM 05CA 7455
*55H
MOV A,
LCALL
353
MOV A,
354
355
LCALL
MOV A,
356
LCALL
357
358 359
MOV A,
LCALL
MOV A,
331
332
333
MOV A,
#4EH
0580 12D0C0 LCD_RAM 0583 120750
LCALL
LCALL
360 361
362
LCALL
MOV A,
LCALL
Microcontroller-Based Projects
83
363
364 365
; GOTO 9TH CHARACTER OF LCD
MOV A,
LCALL
MOV A,
366
LCALL
MOV A,
LCALL
367
;START WRITING AGAIN
368
LCD_RAM 05E3 120320 TMR_5MIN 05E6 30A447 P2.4,HV ; 0630H 05E9 30A34D P2 .3, LV ; 0639K
05EC C2B4
369
WAIT FOR 5 MINUTES
LCALL
JNB ; H/V THEN GOTO 0630 H
062B 30A30B P2.3, LV ;0639H 062E 80F5 L625 0630 1201D8 DLY_2SEC 0633 20A4F5 N_HV ;062BH 0636 02013C LOOP2 0639 1201D8 DLY_25EC 063C 20A3EF N_LV ;062EH 063F 020191
LOOP3
370 371
372
0642 D2B4
? STOP MOTOR
JNB N_HV : ;L/V THEN GOTO 0639 H 397 SJMP N_LV : ;REPEAT FROM 0625 H 398 LCALL HV: ; WAIT FOR 2 SECONDS 399 JB P2.4, ;IF NOT H/V THEN GOTO 062B H L636: 400 LJMP /STILL H/V THEN GOTO 013C H 401 LCALL LV: ;WAIT FOR 2 SECONDS 402 JB P2.3, ;IF NOT L/V THEN GOTO 062E H 403 L63F : LJMP /STILL L/V THEN GOTO 0191 H 404 SUB_BR: SETB P3 4
396
JNB
;L/V THEN GOTO 0639 H CLR P3.4
LCALL
05EE 1202B3
373
;INITILIZE LCD
405 LJMP /TANK FULL THEN GOTO 0260 H 406 L647 : SETB /STOP MOTOR
LCD
377
378
LCALL
MOV A,
LCALL
407 NOP NOP 408 409 LCALL /INITIALIZE LCD 410 MOV A, /START WRITING TO DISPLAY RAM OF
411
LCALL
MOV A,
379
412
380 381
382 383
MOV A,
413
LCALL
LCALL
MOV A,
414
415
MOV A,
LCALL
MOV A,
LCALL
416
LCD_RAM 060A 74B0 iOBOH 060C 1200C0 LCD_RAM 060F 744F I4FH 0611 1200C0 LCD_RAM 0614 744E *4EH 0616 1200C0 LCD_RAM 0619 120750
061C 307820
384 385
386 387
MOV A,
417
418 419
420
LCALL
LCALL
MOV A,
LCALL
MOV A,
LCALL
MOV A,
388 389
390
391 ; L/V THEN GOTO 063F H
MOV A,
LCALL
LCALL
421
422
423
424
LCALL
MOV A,
LCALL
MOV A,
JNB 78H,
392
;H/V THEN GOTO 0636
JNB 77H,
425
LCALL
393
JB 76H,
;STILL DRY SUMP THEN GOTO 0647 H 394 L625 : JNB ; C642H TANK FULL THEN GOTO
395
MOV A,
LCALL
84
430
431 432
SJMP $
ORG
CHK_HV CHK_LV
433 434
435
L754 :
L756:
C C C C C C C
ADDR
02D0H
0500H 01D8H
05ACH
C ADDR
00 00 00 00 00 DDF9
L758:
NOP NOP
NOP
HV
INI_LCD
LI L10 Lll L12 L130
L2 L3
C C C C C C C
0630H 02B3H
00FAH
0761 30A40C P2. 4,1,770 0764 30A311 P2.3, L778 0767 30A116 P2.1, L780 07 6A DBE8 R3, L754 076C DAE4 R2, 1,7 52 076E 22
07 6F 00 0770 1201D8
443
;H/V THEN GOTO 0670 H
/
/
C C C C C
C ADDR C ADDR
447
448
DJNZ
RET
C ADDR
C C C C C C C C C C C C C C C
DLY_2SEC 077B 30A30D P2.3, 078BH 077E 80E7 L767 0780 1201D8 DLY_2SEC
0783 30A108 P2.1, 078EH 078E H 0786 80E2 L7 6A
449 NOP 450 L770: LCALL ;WAIT FOR 2 SECONDS 451 JNB ;STILL H/V THEN GOTO 0788 H 452 SJMP / NOT H/V THEN GOTO 0764 H 453 L778: LCALL ; WAIT FOR 2 SECONDS 454 JNB ;STILL L/V THEN GOTO 078B H 455 SJMP ;NOT L/V THEN GOTO 0767 H L780 : 456 LCALL /WAIT FOR 2 SECONDS
L647 L7 L752
L754 L756 L758 L764
C C
C C
ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR ADDR
0448H 0492H 04B2H 0188H 0502H 0504H 0506H 058FH 0595H 0598H 059AH 05A3H
01DEH 0625H 0636H 063FH 0647H 01DCH 0752H 0754H 0756H 0758H 0764H
457
JNB
C ADDR
C ADDR C ADDR
458 /OTHERWISE GOTO 076A 459 0788 C277 /CLEAR FLAG 77H FOR H/V
078A 22 460 461 078B C278 /CLEAR FLAG 78H FOR L/V
C C C C
462 463
LOOP2
WATERNEW PAGE 11
C C C C
013CH
PAGE 9
END
LOOP3 LV MAIN
Microcontroller-Based Projects
85
C C C C C
PREDEFINED
SCAN SETT
START SUB BR TANK FULL TMR 10MIN TMR 5MIN WR LCD
c
c c
PI
PREDEFINED
D ADDR
P2 PREDEFINED P3
D ADDR D ADDR
00A0H
c c
ADDR ADDR
00B0H
86
This
project based on Atmel AT89C52 and Dallas real-time-clock (RTC) chip DS12887 can be used to control and remotely program the switching operation of 24 electrically operated devices.The devices can be switched on/off' at precise times repeatedly every day, every month. The microcontroller can be programmed for device control using a normal Philips TV remote control. Semiconductors: IC1 - AT89C52 microcontroller
RC5 coding
Since the circuit makes use of Philips TV remote for device-switching time parameters, you need to know the fundamentals of the coding format used in these IR remotes. The Philips IR format makes use of RC5 code, which is also known as 'bi-phase coding.'In RC5-coded signals (Fig. 2), each bit has a uni form duration. A transition in the middle of the time interval assigned to each bit encodes its logical value CO' or '1')- A high-to-low transition assigns the bit a logic value of '0,' and a low-to-high transition assigns the bit a logic value of '1.' We need additional transitions at the begin ning of each bit if a stream of equal bits is sent. However, there is no need of additional transitions if the next bit has a different logic value. Table II shows how all the commands of an RC5 remote control are encoded. The first two bits are 'start' bits, which are used to adjust and syn chronise the receiver. These bits are used to calculate and analvse the bit J length of the other bits. The third bit is a 'toggle' bit, which is toggled every time a button is pressed at the remote control. This bit is used to identify whether the button is really pressed or whether an obstacle came in between the IR path of the remote and the IR receiver. The five bits (A4 through AO) immediately following the toggle bit are used to identify the device (see Table III). So, a maximum of 32 devices can be identified to and respond individually to the same type of coding without any disturbance, i.e., one among the 64 devices can be identified uniquely. Addresses of some of the remotes are shown in Table III. The six bits (C5 through CO) immediately following the five ad dress bits are the control/command bits. Therefore a maximum of 64 commands can be equipped in an RCS-type remote. Some of the command codes (decimal equivalents), as used in this project, are
Microcontroller-Based Projects
IC2
-74LS573 octal D-type latch -DS12887 real-time clock -74LS138 decoder - 7400 NAND gate
- 82C55 programmable
peripheral interface
Darlington array
-TSOP1738 IR receiver module BR1 - 1A bridge rectifier T1 - BC547 npn transistor Resistors (all 'A-watt, *5% carbon): Rl, R6-R29 -4.7-kilo-ohm R2,R3 - 10-kilo-ohm R4 - 100-ohm R5 - 1-kilo-ohm VR1 - 10-kilo-ohm preset VR2 - 1-kilo-ohm preset Capacitors: Cl,C2 - 33pF ceramic disk C3 - 10pF, 16V electrolytic C4-C8, Cll - lOOnF ceramic disk C9 - l|iF, 16V electrolytic capacitor C10 - lOOOpF, 35V electrolytic capacitor Miscellaneous: -230V AC primary to 15V, XI 500mA secondary transformer RL1-RL24 - 12V,200-ohm, lC/O relay -Push-to-on switch SI - 16x2 LCD module - 11.09 MHz crystal Xtal
- 7805 5V regulator
87
P2.2 P2.1
P2.0
P2.f
IC2 74LS573
IC4 74LS138
MOT
IC3 DS12887
IC6
82C55
LCD MODULE
(16x2)
IC9
ULN 2803
IC8
ULN 2803
IC7
ULN 2803
N/O
N/O
N/C
N/O
N/C
N/C
Fig. 1:Circuit for remotely programmable RTC-interfaced microcontroller for multiple device control
shown in Table IV. When any of the command/control buttons on the remote is pressed, the coded signal is received by the IR receiver-demodulator TSOPl 738. The output of the IR demodulator circuit is normally high, but when any
88
1.8IT
2.BIT
3.BT
4-BIT
of the buttons in the remote TABLE III is pressed, a stream of lowRemote Address Codes going demodulated pulses will appear at its output. Address Device/Equipment These pulses are fed to the 0 TV1 external active-low inter 1 TV2 rupt input pin (INTO) of
2 3 4 5
6
1
+12V
7805
OUT.
+5V
C11 L- 100n
-i-
COM
7 8
Videotext Expansion for TV1 and TV2 Laser video player VCR1 VCR2 Reserved Sat1
,1000m
X1 = 230V AC PRIMARY TO 15V, 500mA SECONDARY TRANSFORMER
27-31
Reserved
GND
TABLE IV
outputs from the sub-routine are: Mute 1. Toggle bit, which toggles (either '0' or '1') each time the button AC in a remote is pressed. PWR 2. Address byte, whose value is zero for a normal Philips-type TV Timer remote control (see Table III). 3. Control byte, which has a unique value for each button in the Search CH+ remote control (see Table IV). CHRCL
89C52. On receipt of the first low-going pulse, the monitor program 0-9 of 89C52 will get interrupted and jump to the location '0003H,' where the execution is redirected to 'receive' sub-routine of the program. The 'sfx'
(
0-9
10 36
Number keys
10+ 20+
13 34 12
38
The hardware
30 32 33 15
14 Microcontroller AT89C52 is interfaced to DS12887 (RTC), a 16x2 PP 41 Store LCD module and an 8255 TABLE I programmable 1/0 Address Range of peripheral interface (PPI). The address-decoding circuitry Peripheral Devices comprises NAND gates 74LS00 and 3-to-8 line decoder Address range Used address range Device name 74LS138 as shown in Fig. 1. Hie interfacing circuitry for 0000 OOFF 0000 to 007F DS12887 (RTC chip) the external electrical appliances comprises Darlington 0100 01 FF 0100 LCD Module (16x2) array IC ULN2803. The addressing range of various pe ripheral devices is shown in Table I. 0200 02FF 0200 to 0203 8255 (PPI) In 89C52 (ICl), port P0 is used for outputing mul Note. Please refer device datasheets for more details. tiplexed address (lower 8-bit) and data. The address is latched into 74LS573 TABLE II (IC2) octal latch and RTC DS12887 (IC3) with the RC5 Coding Format (address A3 C4 AO A4 A2 A1 C5 C2 CI CO help of ALE latch-enable) output from
Chk existing tasks See next task See before task Turn on/off LCD back light Enter new task Enable/disable child lock
Microcontroller-Based Projects
89
& i
00 0 000
'
pin 30 of ICl. Only two address lines from IC2 (AO and Al) have been used for ad dressing the four registers of 8255 PPI (IC6) in conjunction with the chipselect signal at pin 6 (from IC4) and read/write signals from ICl. Higheraddress bits from port P2 of ICl (A8, A9 and A10 from output pins P2.0, P2.1 and P2.2) are used for generating the chip-select signals from 74LS138 (IC4) covering address ranges 000HOFFH, 100H-1FF and 200-2FF for RTC, LCD module and PPI chip,
respectively.
Quad NAND gate 7400 (IC5) in conjunction with read and write signals from ICl and chip-select signal from pin 14 of IC4 is used for selecting the LCD module both during read and write cycles of ICl. PPI chip 8255 is configured with port A, port B and port C as output ports for controlling up to 24 electri cal appliances via relays RL1 through RL24. Relays are energised through high-current octal Darlington arrays inside ULN2803 (IC7 through IC9) in accordance with programmed data stored in the non-volatile RAM (NV RAM) of RTC chip DS12887. There is no need of connecting external free wheeling diodes across relays as inbuilt diodes are provided in ULN2803 ICs. All the 24 devices/electrical appli ances are considered as 24 bits (three bytes at locations 200H, 201H and 202H) of the three ports (ports A, B and C) of 8255. The LCD is used for displaying real time (year, month, date, day and time in 24-hour mode) obtained from RTC DS12887 as also some other information during time setting, device programming, searching (device-switching programmed data), password entry, etc, as described later. RTC DS12887 is clock-cumcalendar chip with 128 NV RAM (14 Fig. 4: Actual-size, single-side PCB for remotelyprogrammable RTC-interfaced microcontroller for multiple device control bytes used for its control registers and 114 bytes as general-purpose RAM). It has an inbuilt lithium battery and can retain stored data for over ten years in the absence of external power.
IS
HHU
mrnm
IJJWJJ
IHIIIfl
90
TABLE V
Pointer
Memory used by Clock
Decimal
25 26
Pointer
0000
0001
0019 001A
2 3
4 5 6
7 8
9 10 11 12 13
0007 0008
0009 000A 000B
112 113
114 115 116
Month
Year Register A Register B Register C Register D
oooc
000D
117 118
14
15
16 17 18 19 20
000E 000F
0010 0011 0012 0013 0014
119 120
121
0077 0078
0079
Prog 1 data
122
007A
007B
123
124 125
21 22 23 24
126 127
Prog 20 data Month Date Hour Minute Device # (MSB indicates ON/OFF) Prog 21 data Month Date Hour Minute Device # (MSB indicates ON/OFF) Mem. Location not used Nil Used to store * the Password * *
*
Pointer value
Memory map of DS12887 is shown in Table V. Data stored in location 07FH (decimal 127) indicates the address of the last RAM location used. The relay-switching data that is output from ports A, B and C of the PPI is stored as consecutive bits at OOEH, OOFH and 010H locations of the RAM. The relay/device programming timing data is stored at five consecutive locations for each device. This data includes month, date, hour and minute in first four bytes, while the fifth byte contains 5-bit address of the device with MSB indicating 'on'/'off' status of the device. Bits 6 and 7 of this byte are 'don't care' bits. Address locations 123 through 126 are used for storing the 4-byte long password. Thus only 106 locations are available for storing the 5-byte long device data and as such the program for a maximum of only 21 devices out of 24 devices can be stored. The remaining three devices can be switched on/off through remote key operation as explained below. Bit Pl.l output of IC1 is fed to transistor BC547 (Tl) through R5. Transistor Tl acts like a switch for LCD backlight. So you can switch the backlight of LCD 'on'/'off ' just by setting/resetting the Pl.l bit of
89C52.
ton drivers lC7 through IC9 (ULN2803) are operated with unregulated 12V DC supply. A rated at 15V AC secondary voltage at 500 mA is used to supply 12V unregulated and 5V
Power supply (Fig. 3). While most of the circuit requires regulated 5V for its operation, the relays and Darling
step-down transformer regulated power to the circuit. The secondary output is rectified by 1A rated bridge rectifier BR1 and smoothed by 1000|aF, 35V capacitor C10. The output from the capacitor is directly fed to all the relays and ULN2803 ICs.The same output is used for
91
Microcontroller-Based Projects
Q
{OOOOOOOOIZ
ooooooo
ULM2803
s, ' 3#
O fN t-zt C H- Z Z3 C
iooooooo
ULN2803
oooooooo
regulation by 7805 (IC10). The ripple in the regulator output is filtered by capacitor Cll.
An actual-size, single-side PCB for the remotely-programmable RTCinterfaced microcontroller for multiple device control and power supply circuits (Figs 1and 3) is shown in Fig. 4 and its component layout inFig. 5.The connec tions for relays are to be extended from the 16-pin FRC connectors on the PCB. Each connector is meant for extending
connections to eight relays. The author's prototype is shown in
fiaW z Of- c
o o I
O \0
*oa z *u
(NUZT
I LJ 2 LJ
3
cq
c r
a a
Fig. 6.
fl
ft 5 S 0000
MoM
(N(N<N r\i (N CN CN
a o a c a a cr
m m
OOtrC
pleoooooo
Mi
ooooooo
...
O
D 0 0 0 0 0 0
/Zl 97.
EBSHW
2 0 0 0 0 0 0JJ 0J oooooooo
uOQl O
previous state. Button ' is used as '10+' button. When it is pressed, the system waits for around three seconds before the next button (which should be between '0' and '9' to determine the device between '10' and '19') is pressed. Similarly, 'sfx' is used as '20+' key. The button follow ing the 'sfx' button should be between '0' and '3' (as the project supports only 24 electrical appliances numbering '0' through '23'). RCL. Turns the LCD backlight
'onVoff.'
PWR. Used to change the 4-digit
0090000000000000000Q
oZo
0t3E
password (initial value '0000'). When you press this button, the system will ask for the existing password. If the correct password is entered, it will ask for the new password. If a wrong pass
word is entered, 'invalid' message will flash on the LCD. Note that the password can be any 4-digit value, which need not be the numbers from '0000' to '9999.' Other buttons representing various codes are also accepted.
Fig. 5:Component layout for the PCB shown in Fig. 4
92
'Hr:Mn:ScWkDyMnYr.'
You need to enter the valid data as follows: Hr: 00 to 23 (24-hour mode) Mn: 00 to 59 minutes Sc: 00 to 59 seconds Wk: 01 to 07 (01 is
Fig. 6: Author's prototype
Example
mpmnrv in n1?RR7 Prnnram l/j iluo/ riuyiaiii iiicniuiy hi
\
Task 1 Task 1
Task 2 Task 3
LCD. Store. Enables/disables the child lock function. You can lock the remote keypad by enabling the child lock. When you press this button, the system will prompt the message 'Lock?' or 'UnLock?' depending on the present status of the child lock. If1* is pressed, the child lock feature is enabled/disabled. Any button other than Twill be treated as zero. PP. Takes you to programming of a task. If the NV RAM is full in DS12887, the message 'prog memory full' will flash on the LCD. If the memory is not full, a new device program is accepted by displaying a message in the first line of the LCD as 'Mn Dt Hr:Mn Dv S' and a blinking cursor will appear on the second line to take the data. 'Mn' indicates 'month' ('01' to '12'), 'Dt' indicates 'date' ('01' to '31'), 'Hr' indicates 'hours' ('00' to '23'), 'Mn' indicates 'minutes' ('00' to '59'), 'Dv' indicates 'device number' ('00' to '23') and 'S' stands for 'programmed status' ('1' for 'on' or '0' for 'off'). Enter the desired data in this format, which will get stored in the NV RAM of the RTC. If month (Mn) is entered as '00,' the same task will repeat every month on the same date and time. If date (Dt) is entered as '00,' the same task will repeat every day on the same time. Search. Shows the existing device programs that are stored in the memory starting from location 011H onwards one by one. Each time, you need to press CH+/CH- button to move forward/backward. In this mode, you may delete the displayed device program data entry simply by pressing 'Mute' button.Then the program that is residing next to this task moves to the location of the deleted task and the whole memory is refreshed. See the example shown above for clarity. The pointer value in memory location 007FH of DS12887 changes
Task 3 Task 'n-1' When Task 2 is deleted, the whole memory is refreshed as: Task 'n-1' replaces Task 'n' replaces task 'n-2' task 'n-1'
Task 'n'
Empty
Sunday) Dy: 01 to 31 dates Mn: 01 to 12 (01 is January) Yr: 00 to 99 (year) Any value out of the range will not be accepted and message 'invalid value' will be displayed on the
accordingly.
AC. Deletes the entire programmed data in one stroke. So use this key very cautiously.
Microcontroller-Based Projects
93
RTC initialisation
When DS12887 is shipped from the factory, the oscillator is in disabled state. The following program will make DS12887 work and also reset the password to '0000' and make the program pointer to point to the location 0011H, i.e., it clears the existing tasks by making the program memory empty:
SMOD52 ORG 00H JMP MAIN ORG 20H MOV MAIN: MOVX ANL MOVX MOV MOV MOVX MOV MOV MOVX INC MOVX INC MOVX INC
MOVX
DPTR.
A, A,
#000AH
@DPTR #0A0H
@DPTR,
DPTR,
A
#007FH #001 IH A #00H
#007BH A
A,
@DPTR,
A, DPTR,
DPTR
@DPTR,
DPTR @DPTR,
A
A
JMP
END
Before getting started, you need to make this program run for the first time after all the components and ICs inserted into the circuit. That is, to make DS12887 work, burn the program shown above in microcontroller 89C52, put the programmed microcontroller in the circuit, switch on the circuit for five seconds and then turn it off. By doing so, the internal oscillator of DS12887 starts oscillating and IC DS12887 is now ready for use. Now, remove 89C52 from the circuit and load into it the main program to make the circuit work with all the features. (For more details on DS12887 RTC, refer to the datasheets.) The monitor program in 89C52 gets the relevant time data (time, date, day, year, etc) from DS12887 RTC and displays it on the LCD. The data is also compared against the user-entered data (programmed timing data for multiple devices), which had been stored in the NV RAM of DS12887. When the timing data that was stored in the NV RAM equals the real-time data fetched from the DS12887, it sets/resets the MSB of the fifth byte of the stored program for that device. Before burning the code for main program 'proj.asm' into AT89C52, erase the initialisation program 'rtcint. asm' that is programmed initially into it.
are
94
KULAJIT SARMA
days most audio systems come with remote controllers. PARTS LIST However, no such facility is provided for normal audio ampli Semiconductors: - AT89C51 microcontroller fiers. Such audio controllers are not available even in kit form. IC1 CD4543 7-segment decoder/driver IC2.IC3 -- TDA7439 This article presents an infrared (IR) remote-controlled digital audio IC4 audio processor MC24C02 PC EEPROM IC5 processor. It is based on a microcontroller and can be used with any IC6 - KA2281 2-channel level NEC-compatible full-function IR remote control. meter driver - TSOP1238 IR receiver module This audio processor has enhanced features and can be easily IC7 1C8 - 7809 9V regulator customised to meet individual requirements as it is programmable. IC9 - 7805 5V regulator IC10 - LM317 variable regulator Its main features are: T1 - BC558 pnp transistor 1. Full remote control using any NEC-compatible IR remote T2,T3,T5 - BC547 npn transistor T4 - BD139 pnp transistor control handset BR1 - W04M bridge rectifier 2. Provision for four stereo input channels and one stereo output D1-D6 - IN4004 rectifier diode DIS2 display - LTS543 7-segmentdisplay 3. Individual gain control for each input channel to handle dif DIS1, DIS3 - 10-LED bareraph LED1-LED8 - Red LED ferent sources LED9 - Green LED 4. Bass, midrange, treble, mute and attenuation control (all J '4watt, 5% carbon): 5. 80-step control for volume and 15-step control for bass, mid- Resistors R1 - 8.2-kilo-ohm R2-R24, range and treble R40-K49 - 1-kilo-ohm 6. Settings displayed on two 7-segment light-emitting diode R25, R28, R50, R53 (LED) displays and eight individual LEDs - 10-kilo-ohm R26, R29, R30, R34 - 2.7-kilo-ohm R27 - 100-ohm KEYPAD
PO
These
P2
LED PORT
R36-R39
R51 RS2
MICROCONTROLLER (AT89C51)
INTO,
P3.2
Capacitors: Cl,C2
CD4543B
LED DISPLAY
IR SENSOR
C4-C6, C39-C41 C7
C3.C10
C8.C9 C11.C20
C12,C19
C21-C28
C13.C18 C14.C17
C29-C32 C33, C34 C35 C36
EEPROM
24C02
MONITOR
VU LEVEL KA2281
C42
XI
C37.C38
Miscellaneous:
GAIN, BASS, VOICE, TREBLE VOLUME ADJUST, 4 STEREO IN 1 STEREO OUT, MONITOR OUT
STEREO POWER
AMPLIFIER
RLl
S8 Remote
sfe's7
compatible format)
Microcontroller-Based Projects
95
O O
rrxm
V/vVVAV
iu O < 2
a z
uj
m
si?
WvV
"8
s?;nn
NN(N(MNN(MC1
St,
rNnimtor-.ooT-
So
iic* O
io k
-h
d idrra
03y 31S 01
0-fM
SoS
8 8 cx
"
(Dinofl
co
8 &
'
N
fc 3
a
y-
Minos
:b)Nig
.
,
9io
o>
iZIO
i 610
(l)inow
1>NII\
to
11BHJ
,5
1
o>
8
O)
(M)inow, 1 8io
:u)niw
"8
}
Ib)BUl
1 010
dNI
60
o E
IT
nanoxnw
Csj
; 2 ;O
[H)inoxnw
<D
o E 5
66600006
oianv
en q
indNi
1
.Ol
96
X1
230V
MONITOR
O
D1
1N4004
D5 1N4004
SWITCH
WD4M
| 50Hz
i
I
N O-
230V AC
IC8 7809T
COM
OUT
-L- C39 " 100n
+9V O TO PIN 3 OF
0.33m ~r
C38 -L-
IC4
! 470m
25V
C42
D4
1N4004
AGND
N O-
N/O
IC9
7805T
COM
OUT
Vcc +5V O
-J- C40 t_L C35
off
N/C
230V AC
N/O
D6
1N4004
:2.2K
R52
C37 -L-
0.33m
"
10On
N/C RL1
L O-
T4 BD139'
a
EC B
D3
X
t*-
1000 25V
DGND
1N4004
R53
60547_
FRONT VIEW
IC10
LM317T
ADJ
OUT
R51 -1- C41 I 2200 ~T~ 100n
FRONT VIEW
+3V
O
FRONT VIEW
4.7K
VR1
-\rR50. 10K
12 3 12 3
BC547
T3
PGND
STANDBY
7. Stereo VTJ level indication on 10-LED bar display 8. Full-function keys on-board for audio amplifier control 9. All settings stored on the EEPROM 10. Standby mode for amplifier power control
Circuit description
Fig. 1shows the block diagram of the remote-controlled digital audio processor. The system comprises Atmel's AT89C51 microcontroller (ICl),TDA7439 audio processor from SGS-Thomson (IC4) and I2C bus compatible MC24C02 EEPROM (IC5). The microcontroller chip is programmed to control all the digital processes of the system. The audio processor controls all the audio amplifier functions and is compatible with I2C bus. All the commands from the remote control are received through the IR sensor. The audio amplifier can also be controlled using the on-board keys. Microcontroller. The function of the microcontroller is to receive commands (through port P3.2) from the remote handset, program audio controls as per the commands and update the EEPROM. A delay in updating the EEPROM is deliberately provided because normally the listener will change the value of a parameter continu ously until he is satisfied. The 40-pin AT89C51 microcontroller has four 8-bit input/output (I/O) ports. Port 0 is used for indicating through LEDs the various functions selected via the remote/on-board keys. Port 1drives the 7-segment display using 7-segment latch/decoder/driver IC CD4543. Port 2 is pulled up via resistor network RNWl and used for manual key control. Pins P3.0 and P3.1 of the microcontroller are used as serial data (SDA) and serial clock (SCL) lines for the I2C bus for communicating with the audio processor (TDA7439) and EEPROM (MC24C02). These two lines are connected to pull-up resistors, which are required for I2C bus devices. P3.2 receives the remote commands through the IR receiver module. Pin P3.4 is used for flashing LED9 whenever a remote command is received or
Microcontroller-Based Projects
97
any key is pressed. The microcontroller also checks the func tioning of the mem ory (MC24C02) and the audio processor (TDA7439). If it is not communicating with
&
these two ICs on the I2C bus, it flashes the volume level on the
mm
\<>\x<V <K1 J> />{-*
ww.
SLJi
MC24C02 is an DCbus compatible 2k-bit EEPROM organised as 256x8-bit that can retain data for more than ten years. Vari ous parameters can be stored in it. To obviate the loss of latest settings in the case of power failure, the microcontroller stores all the audio set tings of the user in the EEPROM. The mem ory ensures that the microcontroller will read the last saved settings from the EEPROM when power resumes. Using SCL and SDA lines, the microcon
K
(
98
For more details on I2C bus and memory interface, please refer to the MC24C02 data sheet. Audio parameters can be set using the remote control handset or the on-board keys as per the details given un der the 'remote control'
section. Audio processor. IC TDA7439 is a singlechip I2C-bus compat-
IBASS
MID
audio amplifier. The output from any (up to four) stereo preampli fier is fed to the audio
processor (TDA7439).
rRBLE
(ATTN
Iflflfl
03331 1
The microcontroller can control volume, treble, bass, attenu ation, gain and oth er functions of each channel separately. All these parameters are programmed by the microcontroller using SCL and SDA lines, which it shares with the memory IC and the audio processor. Data transmis sion from the mi crocontroller to the audio processor (IC TDA7439) and the
memory (MC24C02) versa takes place through the two-
TDA7439
and vice
+ 5JJ-
SfflOGMB
.oi
8
5
BRIDGE I <>70U RECT. A
1000U
<
consisting of SDA and SCL, which are con nected to P3.0 (RXD) and P3.1 (TXD) of the microcontroller, respectively. Here, the microcontroller unit acts as the master and the audio processor and the memory act as slave devices. Any of these three devices can act as the transmitter or the receiver
4700U
| tions
are:
communicate
iS
Microcontroller-Based Projects
99
line must be stable during the high period of the clock.The high and low states of the data line can change only when the clock signal on the SCL line is low. 2. Start and Stop: A start condition is a high-to-low transition of the SDA line while SCL is high. The stop condition is a low-to-high transition of the SDA line while SCL is high. 3. Byte format: Every byte transferred on the SDA line must contain eight bits.The most significant bit (MSB) is transferred first. 4. Acknowledge: Each byte must be followed by an acknowledgement bit. The acknowledge clock pulse is generated by the master. The transmitter releases the SDA line (high) during the acknowledge clock pulse. The receiver must pull down the SDA line during the acknowledge clock pulse so that it remains low during the high period of this clock pulse. To program any of the parameters, the following interface protocol is used for sending the data from the microcontroller to TDA7439. The interface protocol comprises: 1. A start condition (S) 2. A chip address byte containing the TDA7439 address (88H) followed by an acknowledgement bit (ACK) 3. A sub-address byte followed by an ACK. The first four bits (LSB) of this byte indicate the function selected (e.g., input select, bass, treble and volume). The fifth bit indicates incremental/non-incremental bus (1/0) and the sixth, seventh and eighth bits are 'don't care'bits. 4. A sequence of data followed by an ACK. The data pertains to the value for the selected function.
5. A stop condition (P) In the case of non-incremental bus, the data bytes correspond only to the function selected. If the fifth bit is high, the sub-address is automatically incremented with each data byte. This mode is useful for initialising the device. For actual values of data bytes for each function, refer to the datasheet of TDA7439. Similar protocol is followed for sending data to/from the microcontroller to MC24C02 EEPROM by using its chip address as AOH'. Power supply. Fig. 3 shows the power supply circuit for the remote-controlled digital audio processor. The AC mains is stepped down by transformer XI to deliver a secondary output of 9V AC at lA.The transformer output is rectified by full-wave bridge rectifier BR1 and filtered by capacitor C42. Regulators IC8 and IC9 provide regulated 5V and 9V power supplies, respectively. IC10 acts as the variable power supply regulator. It is set to provide 3V regulated supply by adjusting preset VR1. Capacitors C39, C40 and C41 bypass any ripple in the regulated outputs. This supply is not used in the circuit. However, the readers can use the same for powering devices like a Walkman. As capacitors above 10 |_iF are connected to the outputs of regulator ICs, diodes D3 through D5 provide protection to the regulator ICs, respectively, in case their inputs short to ground. Relay RL1 is normally energised to provide mains to the power amplifier. In standby mode, it is de-energised. Switch S2 is the 'on'/'off ' switch.
Software
The software was assembled using Metalink's ASM51 assembler, which is freely available for download.The source code has been extensively commented for easier understanding. It can be divided into the following segments in the order of listing: 1. Variable and constant definitions 2. Delay routines 3. IR decoding routines
4. Keyboard routines 5.TDA7439 communication 6. MC24C02 communication 7. 12C bus routines 8. Display routines 9. IR and key command processing 10.Timer 1 interrupt handler 11. Main program On reset, the microcontroller executes the main program as follows: 1. Initialise the microcontroller's registers and random-access memory (RAM) locations.
100
2. Read Standby and Mute status from the EEPROM and initialise TDA7439 accordingly. 3. Read various audio parameters from the EEPROM and initialise the audio processor. 4. Initialise the display and LED port. 5. Loop infinitely as follows, waiting for events: Enable the interrupts. Check the monitor input for AC power-off. If the power goes off, jump to the power-off sequence routine. Else, if a new key is pressed, call the DO KEY routine to process the key. For this, check whether the NEW_KEY bit is set. This bit is cleared after the command is processed. Else, if a new IR command is received, call the DO_COM routine to process the remote command. For this, check whether the NEW_COM (new IR command available) bit is set. This bit is cleared after the command is
processed. Jump to the beginning of the loop. 6. Power-off sequence. Save all the settings to the EEPROM, and turn off the display and standby relay.
Since the output of the IR sensor is connected to pin 12 (INTO) of the microcontroller, an external interrupt occurs whenever a code is received.The algorithm for decoding the IR stream is completely implemented in the 'external interrupt 0' handler routine. This routine sets NEW_COM (02H in bit memory) if a new command is available. The decoded command byte is stored in 'Command' (location 021H in the internal RAM). The main routine checks for NEW_COM bit continuously in a loop. Timer 0 is exclusively used by this routine to determine the pulse timings. Decoding the IR stream involves the following steps: 1. Since every code is transmitted twice, reject the first by introducing a delay of 85 milliseconds (ms) and start timer 0. The second transmission is detected by checking for no-overflow timer 0. In all other cases, timer 0 will overflow. 2. For second transmission, check the timer 0 count to determine the length of the leader pulse (9 ms). If the pulse length is between 8.1 ms and 9.7 ms, it will be recognised as valid. Skip the following 4.5ms silence. 3. To detect the incoming bits, timer 0 is configured to use the strobe signal such that the counter runs between the interval periods of bits. The value of the counter is then used to determine whether the incoming bit is '0', '1' or 'Stop.'This is implemented in the RECEIVE_BIT routine. 4. If the first bit received is 'Stop,' repeat the last command by setting the NEW_COM bit. 5. Else, receive the rest seven bits. Compare the received byte with the custom code (C_Code). If these don't match, return error. 6. Receive the next byte and compare with the custom code. If these don't match, return error. 7. Receive the next byte and store in 'Command.' 8. Receive the next byte and check whether it is complement value of 'Command.' Else, return error. 9. Receive 'Stop' bit. 10. Set NEW_COM and return from interrupt. Other parts of the source code are relatively straightforward and self-explanatory. Remotecontrol. The micro-controller can accept commands from any IR remote that uses NEC transmission format. These remote controllers are readily available in the market and use pPD6121, PT2221 or a compatible IC. Here, we've used Creative's remote handset. All the functions of the system can be controlled fully using the remote or the on-board keys. By default, the display shows the volume setting and LEDs indicate the channel selected. LED9 glows momentarily whenever a command from the remote is received or any key is pressed. Function adjustments are detailed below: 1. Volume: Use Vol+ZVol- key to increase/decrease the volume. The volume settings are shown on the two-digit, 7-segment display. Steps can be varied between T' and '80.' 2. Mute and Standby: Using 'Mute'and 'Standby' buttons, you can toggle the mute and standby status, respec tively. If 'Mute' is pressed, the display will show '00.' In 'Standby' mode, the relay de-energises to switch off the main amplifier. All the LEDs and displays, except LED9, turn off to indicate the standby status. 3. Input Select: To select the audio input source, press 'Channel' key until the desired channel is selected.The LED corresponding to the selected channel turns on and the input gain setting for that channel is displayed for
Microcontroller-Based Projects
101
five seconds. Thereafter, the volume level is displayed on the 7-segment display. 4. Input Gain set: Press 'Gain' key. The LED corresponding to the channel will start blinking and the gain value is displayed. Use V0I+/V0I- key to increase/decrease the gain for that channel. Note that the gain can be varied from '1' to '15.' Ifyou press 'Gain' key once more, and no key is pressed for five seconds, it will exit the gain setting mode and the volume level is displayed. 5. Audio: Press 'Audio Set' (Menu) key to adjust bass, middle, treble and attenuation one by one. Each time 'Audio Set' key is pressed, the LED corresponding to the selected function turns on and the function value is displayed. Once the required function is selected, use Vol+ and Vol- to adjust the setting. Bass, middle and treble can be varied from '07' to '7.' Values '0' through '7' indicate 'Boost' and '00' through '07' indicate 'Cut.' Attenuation can be varied from '0' to '40.'
Construction
The circuit can be easily assembled on any PCB with IC base. Before you install the microcontroller, memory and audio processor in their sockets and solder the IR receiver module, make sure that the supply voltage is correct. All parts, except the audio processor (TDA7439), require 5V DC supply. The audio processor is powered by 9V DC. Downloadsource code: http://www.efymag.com/admin/issuepdf/Audio%20Processor.zip
102
As Solar-powered
the sources of conventional energy deplete day by day, resorting to alternative sources of energy like solar and wind energy has become need of the hour. lighting systems are already available in rural as well as urban areas. These include solar lanterns, solar home lighting systems, solar streetlights, solar garden lights and solar power packs. All of them consist of four components: solar photovoltaic module, rechargeable battery, solar charge controller and load. In the solar-powered lighting system, the solar charge controller plays an important role as the systems overall
D4, 1N4007
6A4
IC4 7805
OUT
2 Vcc
T PANEL
BS170
-- SOLAR
02
1N4007
COM
C3
LCD
0.1m
D3 w
1N4007
12V "
BATT.
8.2K-
C4 10m 16V
D7
WR
GND
10A
R11
RST P1.2 PI .3
RESET
20K
10K
RIO
IC3
R12
P1.4
10K
IC1 AT89C2051
P3.5
P3.4
P1.5 P1.I
P1.7
ne
R8
1 0K
T3
P3.0 P3.1
P3.2
10K
CLK
Do
2D1
7.5V
T3
= IRF540N
10K
R9
BC547
IC3 = MCT2E
RL1 = 12V, 1C/0 RELAY
HDh'
C5
d 33 WP
R4 ; 10K
10K
IC2 ADC0831
Vin.
+5VO
10K"
<h-
C9t~
16V
C7 0.1p
Vi-
GND
C8
0.01m
depends mainly on it. It is considered as an indispensable link between the solar panel, battery and load. The microcontroller-based solar charge controller described here has the follow ing features: 1. Automatic dusk-to-dawn operation of the load 2. Built-in digital voltmeter (0V-20V range) 3. Parallel- or shunt-type regulation 4. Overcharge protection 5. System status display on LCD
success
BC 547
BS 170
IRF
540
O CD CO 33 > O
Microcontroller-Based Projects
103
PARTS LIST
Semiconductors:
IC1 IC2
m
Fig. 3:A single-side, actual-size PCB layout for microcontroller-basedsolar charger
Capacitors: CI C2
C3,C7
C4.C9 C5.C6
C8
Miscellaneous:
O
SI
aa
F1
10A
oo
D%l
LOAD
f 540
T3
RLl-P
EFV/SUNIL/SOLAK 'SEPT-09
'
0
SI S2
RL1
Xtal
- 12MHz crystal
- 10-40W
11=10K
add 6 D S
Rll
46 5 13 2 1 1112 [TIIIIIII01
.CD
0 0
H |'t1CT2E
IC3
LCD
Solar panel
0
0 fl I
I
osoasoaooo
XTAL 12M
R12 330E
6. Deep-discharge protection
S G D
C8 12
9. Low current consumption Fig. 4: Component layout for the PCB 10. Highly efficient design based on
microcontroller 11. Suitable for 10-40W solar panels for 10A load The circuit of the solar charge controller is shown in Fig. 1. It comprises microcontroller AT89C2051, serial analogue-to-digital converter ADC0831, optocoupler MCT2E, regulator 7805, MOSFETs BS170 and IRF540N, transistor BC547, LCD and a few discrete components. Component description is given below. Microcontroller. Microcontroller AT89C205 1is the heart of the circuit. It is a low-voltage, high-performance, 8-bit microcontroller that features 2 kB of Flash, 128 bytes of RAM, 15 input/output (I/O) lines, two 16-bit timers/counters, a five-vector two-level interrupt architecture, a full-duplex serial port, a precision analogue com parator, on-chip oscillator and clock circuitry. A 12MHz crystal is used for providing the basic clock frequency. All I/O pins are reset to '1' as soon as RST pin goes high. Holding RST pin high for two machine cycles, while the oscillator is running, resets the device. Power-on reset is derived from resistor R1 and capacitor C4. Switch S2 is used for manual reset. Serial ADC. The microcontroller monitors the battery voltage with the help of an analogue-to-digital converter. The ADC0831 is an 8-bit successive approximation analogue-to-digital converter with a serial I/O and very low conversion time of typically 32 (js. The differential analogue voltage input allows increase of the
104
common-mode rejection and offsetting of the ana logue zero input voltage. In addition, the voltage refer ence input can be adjusted to allow encoding of any smaller analogue voltage span to the full eight bits of resolution. It is available in an 8-pin PDIP package and can be interfaced to the microcontroller with only
three wires.
LCD module. The sys
tem status
INITIALISE
DAWN
IS DUSK OR DAWN
DUSK
IS LOW mode of interfacing with V. HIGH OR LOW a microcontroller requires eleven pins, but in 4-bit mode the LCD can be S5MINS w GET ADC VALUE DISPLAY BATTERY interfaced to the micro controller using only seven pins. GET ADC VALUE DISPLAY BATTERY Solar panel. The solar panel used here is meant to charge a 12V battery and Fig. 5: Flow-chart of the source program the wattage can range from 10 to 40 watts. The peak unloaded voltage output of the solar panel will be around 19 volts. Higher-wattage panels can be used with some modifications to the controller unit. Rechargeable battery. The solar energy is converted into electrical energy and stored in a 12V lead-acid bat tery. The ampere-hour capacity ranges from 5 Ah to 100 Ah. Dusk-to-dwwn sensor. Normally, in a solar-photovoltaic-based installation for example, solar home lighting system, solar lantern or solar streetlight the load (the light) is switched on at dusk (evening) and switched off at dawn (morning). During daytime, the load is disconnected from the battery and the battery is recharged with current from the solar panel. The microcontroller needs to know the presence of the solar panel voltage to decide whether the load is to be connected to or disconnected from the battery, or whether the battery should be in charg ing mode or discharging mode. A simple sensor circuit is built using a potential divider formed around resistors R8 and R9, zener diode ZD1 and transistor Tl for the presence of panel voltage. Charge control. Relay RL1 connects the solar panel to the battery through diode Dl. Under normal condi tions, it allows the charging current from the panel to flow into the battery. When the battery is at full charge (14.0V), the charging current becomes 'pulsed.' To keep the overall current consumption of the solar controller low, normally-closed (N/C) contacts of the relay are used and the relay is normally in de-energised state. Loadcontrol. One terminal of the load is connected to the battery through fuse F1 and another terminal of
and battery volt age are displayed on an LCD based on HD44780 controller. The backlight feature of the LCD makes it readable even in low light conditions. The LCD is used here in 4-bit mode to save the microcontroller's port pins. Usually the 8-bit
YES
IS BATTERY DISCHARGE
Microcontroller-Based Projects
105
the load to an n-channel power MOSFET T3. MOFETs are voltage-driven devices that require virtually no drive current. The load current should be limited to 10A. One additional MOSFET is connected in parallel for more than 10A load current.
Circuit description
Basically, there are two methods of controlling the charging current: series regulation and parallel (shunt) regula tion. A series regulator is inserted between the solar panel and the battery. The series type of regulation 'wastes' a lot of energy while charging the battery as the control circuitry is always active and series regulator requires the input voltage to be 3-4 volts higher than the output voltage. The current and voltage output of a solar panel is
governed by the angle of incidence of light, which keeps varying. Parallel regulation is preferred in solar field. In parallel regulation, the control circuitry allows the charging current (even in mA) to flow into the battery and stop charging once the battery is fully charged. At this stage, the charging current is wasted by converting into heat (current is passed through low-value, high-wattage resistor); this part of the regulation dissipates a lot of heat. In this project, we have used parallel regulation technique but instead of wasting the charging current as heat, we have made it pulsed and applied to the battery to keep the battery topped-up. After power-on, the microcontroller reads the battery voltage with the help of the ADC and displays the values on the LCD. It monitors the input signal from the dusk-to-dawn sensor and activates the load or charging relay RL1 accordingly. The digital voltmeter works up to 20V. As Vref of the ADC is connected to VCC (5V), the input voltage to the ADC cannot exceed +5V. A potential divider is used at pin 2 of the ADC (IC2) using resistors R5, R6 and R7 to scale down the voltage from 0V-20V to 0V-05V.The ADC output is multiplied four times and displayed on the LCD as battery voltage. When the solar panel voltage is present, the dusk-to-dawn sensor provides a signal to the microcontroller, which then displays 'charging' message on the LCD. During charging, the battery voltage is continuously moni tored. When the voltage reaches 14.0V, the microcontroller interrupts the charging current by energising the relay,
which is connected to MOSFET BS170 (T2), and starts a 5-minute timer. During this stage, the LCD shows "battery full." After five minutes, the relay reconnects the panel to the battery. This way, the charging current is pulsed at the intervals of five minutes and the cycle repeats until the panel voltage is present. When the panel voltage falls below the zener diode (ZD1) voltage of the dusk-to-dawn sensor, the micro controller senses this and activates the load by switching on MOSFET T3 via optocoupler IC3 and "load on" message is displayed. In this mode, the microcontroller monitors for low battery. When the battery voltage drops below 10 volts, the microcontroller turns off the load by switching off MOSFET T3 and "battery lowload off" message is displayed. Normally, when the load is switched off, the battery voltage tends to rise back and the load oscillates between 'on' and 'off' states. To avoid this, the microcontroller employs a hysteresis control by entering into a 'lock' mode during low-battery state and comes out of the lock mode when the dusk-to-dawn sensor receives the panel volt age (the next morning). During lock mode, the microcontroller keeps converting the ADC value and displays the battery voltage on the LCD.
106
message is displayed irrespective of the battery voltage. The display changes to "charging" as soon as the panel is connected. 2. There will be slight variation in the voltage displayed bccausc of the tolcrancc levels of potential-divider resistors in the ADC section and Vref of the ADC being directly connected to VCC (the output of 7805 has an accuracy of 2-5 per cent) instead of dedicated temperature-compensated voltage reference.
Software
The source program for the project is written in Assembly language and assembled using Metalink's ASM5 1 as sembler, which is freely available on the Internet for download. It is well commented for easy understanding and works as per the flow-chart shown in Fig. 5. The hex file 'solar.hex' is to be burnt into the microcontroller. Download source code: http://www.efymag.com/admin/issuepdf/Microcontroller%20Based%20Solar%20 Charger.zip
SOLAR.ASM
SM0D51
; LCD 4-BIT MODE CONNECTIONS ;L C D RS REGISTER PI. 7 EQ'J
LINE EN EQU PI. 6 ;LCD ENABLE LINE DB4 EQU PI. 5 ;
JMP COUNTDOWN
MAIN:
MOV SP, #50H MOV P3,#0FFH
SELECT
MOV P1,#0FFH
DB5 EQU PI. 4 ; DB6 EQU PI. 3 ; DB7 EQU PI.2 ; ; ADC0831 CONNECTIONS CS EQU P3.0 CLK EQU P3.1 DO EQU P3.2
;INPUT & OUTPUT
DYI
SENSOR
EQU
P3
.4
SOLAR
PANEL
VOLTAGE
SETB CLK SETB DO SETB CS SETB DYI MOV VAL1 ,#00H MOV VAL2 ,#00H MOV VAL3, #00H MOV FLAGS, #00H LOADCHAK: MOV BUF, #40H
LCALL CMD
MOV DPTR, #RCHAR
CHG_RL
RELAY
EQU
P3.5
CHARGING
CONTROL
REP:
CLR A
MOVC A, @Af DPTR
JZ SCREEN1
MOV BUF, A
S JMP REP
SCREEN 1: MOV BUF, #80H
LCALL CMD
VAL1 : DS 1
VAL2: DG 1 VAL3: DS 1
HERE:
JZ NEXT
MOV BUF, A
CLR A
ADC_VAL: DS 1
BUF: DS 1
MOVC A, 0A+DPTR
CNT1 : DS 1
CNT2 : DS 1
IMG: DS 1
FLAGS: DS 1
0CF BIT FLAGS. 0 ; OVER CHARGE FLAG LBF BIT FLAGS. 1 ; LOW BATT FLAG CSEG
ORG OOOOH
JMP MAIN
NEXT:
HERE1:
CLR A
ORG OOOBH
LCALL DAT
Microcontroller-Based Projects
107
INC DPTR
_RL
;DISCONNECT
BATT. FROM
PANEL MOV
HERE
THO, #03CH
;START
MIN
TIMER
MOV
TLO, #0B0H
.-DISCONNECT
BATT
FROM
HERE2 :
JZ CONVERT MOV BUF, A LCALL DAT INC DPTR SJMP HERE2 CONVERT :LCALL DDELAY CLR CS ; INITIATE CONVERSION SETB CLK CLR CLK ; FIRST CLOCK
SETB CLK
CLR CLK ; SECOND CLOCK
PANEL MOV CNT1 ,#200D MOV CN?2, #30D SETB ETO SETB TRO SETB EA DPTR, #MSG5 MOV
MSG
MOV IMG, #01H
DISPLAY
BATT. FULL
LCALL SENDSTAT2LCD
LJMP CONVERT
NIGHT:
TO PANEL
CLR
NING
CLR
CHG_RL
RECONNECT
BATT.
AGAIN:
RLC A
MOV C, DO
TRU
STOP
TIMERU
INCASE
ITS
RUN
SETB CS
MOV ADC_VAL, A MOV B, *7 9D
XRL A, #00H
MUL AB ; PRODUCT IN AB
MOV R1,B ; HIGH BYTE IN B MOV R2,A ; LOW BYTE IN A
JZ LOWBAT
MOV DPTR, #MSG3 ; DISPLAY LOAD ON MSG MOV IMG, #02H
LCALL HEX2BCD
MOV VAL1 ,R7
LCALL SENDSTAT2LCD
LJMP CONVERT
LOWBAT: SETB LBF
MOV VAL3.R5 LCALL SENDVAL2LCD JNB LBF, CHECK2 ; SEE IF ANY FLAGS ARE CHECK: SET ,i,e LOW BATT FLAG OR BATT FULL FLAG JB DY I, CONVERT
CLR
MOV
L D_R L
DISCONNECT
;
LOAD
BAT OW
DPTR, #MSG6
DISPLAY
FROM BATT.
AND
CHECK2:
SJMP CONVERT
PROCEED:
JB DYI, NIGHT
CLR LD_RL ; OFF LOAD CLR LBF ; CLEAR LOW BATT FLAG MOV A, VAL2 ; SEE IF BATT. IS FULL
XRL A, #04H JZ FULLCHG CLR CHG RL PANEL
MOV
CONNECT
BATT.
TO
LJMP CONVERT SENDVAL2LCD : MOV BUF, 0C7H LCALL CMD MOV A, VAL1 ORL A, #3 OH MOV BUF, A LCALL DAT MOV A, VAL2 ORL A, #3 OH
MOV BUF, A
DPTR, #MSG4
DISPLAY
CHARGING
LCALL DAT
MOV BUF, #'
.'
MSG
MOV IMG, #00H
LCALL SENDSTAT2LCD
LJMP CONVERT
FULLCHG: SETB
OCF
; SET
LCALL DAT
108
MOV B, # 10
CLR A
MOVC A, 0A+DPTR
SJMP HERE3
PICT:
MOV BUF, I0CEH
MOV R6,A DJNZ R1,HIGH_BYTE MOV B, #10D MOV A, R6 DIV AB MOV R6, B MOV R7, A ENDD: RET ONE SEC DELAY: MOV R0,#10D CONTINUE:
One
second
********************************
COUNTDOWN:
CLR TRO
MOV TH0,#03CH MOV TLO, itOBOH
SETB TRO
delay routine RZ3 : MOV Rl, #100D RZ1 : MOV R2, #250D
RZ2: NOP
NOP
DJNZ CNTI, BACK2 MOV CNTI, #200D DJNZ CNT2, BACK2 CLR TRO ; OFF 5 MIN TIMER CLR ETO
CLR OCF ; CLEAR OVER CHARGE FLAG CLR CHG RL
BATT
TO
MOV R4,#100D
BACK2 :
RET
.******LCD
SUBROUTINES********
SETB EN
CLR RS ; SELECT SEND COMMAND
MOV A, BUF ; PUT DATA BYTE IN ACC
ACALL H2B
RET
C,
ACC. 4
LOAD
HIGH
NIBBLE
ON
H2B:
MOV A,R2
DIV AB
MOV
ING. .
DB 4
,C
ONE
BIT
AT
TI ME
US
CJNE
BYTE R1 j # 0 0 H , HIGH
CHECK
FOR
HIGH BYTE:
MOV A, #6 ADD A, R3 MOV B, #10 DIV AB MOV ADD ADD MOV DIV
NOP
MOV
LOAD
LOW
R3, B
A, #5 A, R4 B, #10 AB
NIBBLE
MOV DB4 ,C
MOV R4,B
ADD A, #2 ADD A, R5
MOV C, ACC. 3
MOV DB7 ,C
Microcontroller-Based Projects
109
CLR EN
DATA
LINES, FONTS
BITS,
MOV
BUF, # 3 0 H
FUNCTION
SET
DATA
MOV A, BUF ; PUT DATA BYTE IN ACC ; ACC. 4 LOAD HIGH MOV C,
DATA BUS
MOV
NIB3LE
ON
BITS, LINES, FONTS LCALL CMD ACALL DDELAY ;INITIAL DELAY 4 1MSEC ;2 LINES MOV 5X7, BUF, # 2 8 H
4-BIT
MODE
DB4
,C
ONE
BIT
AT
TIME
ING.
..
MOV C, ACC. 5 ; BIT MOVE OPERATOINS
US
LCALL CMD MOV BUF, #0CH ; DISPLAY ON LCALL CMD ; CLEAR BUF, # 0 1H MOV
DISPLAY,
HOME
CURSOR LCALL CMD MOV BUF, #06H ; SET ENTRY MODE ; INCREMENT CMD LCALL
SHIFT
RET
LOAD LOW
CURSOR
RIGHT,
CLR EN
NOP
NO
C,
ACC.O
SIMILARLY,
ORG 0320H
NIBBLE
MOV DB4,C MOV C, ACC.l
MSG1
DB
DB
'
*
MSG2
MSG3 MSG4
DB DB
MOV DB5,C
MOV C, ACC. 2 MOV DB6,C MOV C, ACC. 3 MOV DB7,C
' '
CHARGINC
\ OOH \OOH
' ,OOH
CLR EN
DB
NOP
0 4 D, 31 D, 17 D , 3 1D , 17 D, 3 ID, 17 D , 3 1D
CHARGING
DB
DB
SUBROUTINES******* DDELAY : MOV R5,#41D ; 4.1 mS DELAY MOV R6,#50D QT2 : DJNZ R6,QT1 QT1 : DJNZ R5,QT2 RET ;*****LCD SUBROUTINES******* MS DELAY : MOV R5,#26D MOV R6, #50D QT22: DJNZ R6,QT11 QT11: DJNZ R5,QT22 RET ;*****LCD SUBROUTINES******* INIT : MOV BUF, #30H ; FUNCTION SET - DATA BITS, LINES, FONTS
LCALL CMD
.* *** * *LCD
31 D
3 1 D, 31 D, 3 1 D, 3 1 D , 3 1 D 31D, 31D
DB
DB
DB
110
K.S. SANKAR
a
In
manual flush systems, the user presses button, which opens a flush valve al lowing mains-pressure water to flow into the bowl, or sometimes the user presses directly a flush lever (a handle connected to a flushometer). The valve contains a pneumatic mechanism that closes it after
a preset time.
Today, manual flush system has been replaced with a sensor-operated system that automatically flushes the fixture when the user departs.
The microcontroller-based automatic flush system presented here uses an infra red sensor to detect a user approaching the fixture, then it waits until the user departs.
PARTS LIST
Semiconductor:
AT89C2051 microcontroller IC3 CD4050 hex noninverting buffer - BC548 npn transistor T1 - TSOP1738 I R receiver IRX1 module D1-D5 - 1N4007 rectifier diode LED1-LED5 - 5mm LED
IRLED1, IR LED2
IC1 IC2
- 7805, 5V regulator
- IR LED
- 330-ohm
- 1.2-kilo-ohm
150-ohm
A solenoid is used to actuate the flush from a 6V power supply with battery backup inside the unit that also powers the sensor circuit. This flush system is fully controlled by a microcontroller. It also flushes before the person departs if the person is present for more than the preset time (5 minutes). Installation of this microcontroller-based automatic flush system is shown in Fig. l.The IR transmitter LED and the IR receiver mod ules are mounted side by side such that when the user approaches the mechanism, the IR receiver module receives the IR signal re flected off the person. A solenoid-operated water valve is used in the
system.
Circuit description
Fig. 2 shows the circuit of the microcontroller-based flush control
system. It is built around Atmel 89C2051 microcontroller that controls the process of automatically flushing the toilet. The AT89C2051 is an 8-bit microcontroller with 2 kB of flash-based program memory, 128 bytes of RAM, 15 input/ output lines, two 16-bit timers/counters, on-chip oscillator and clock circuitry. A 6MHz crystal is used for providing clock. Port pins Pl.O through Pi.4 of the microcontroller are connected to buff ers N1 through N5 of CD4050 via 10-kilo-ohm pull-up resistors,
XI
RL1
S1.S2
S3 BATT.
Microcontroller-Based Projects
111
SWITCH
ON/OFF
I o
D1
02
'1' as soon as RST (pin 7805 3 50Hz 04 R1 9) goes high on pressing 6V COM 33012 SOLENOID switch S3. Holding the RL1 = 6V, BATT. LED1 _f_\\ 1C/0 RELAY 6V XI = 230V AC RST pin high for two PRIMARY TO 7.5V. 300mA RL1 SECONDARY TRANSFORMER machine cycles while the N/O F S3 = PUSH-TO-ON SWITCH oscillator is running resets 1N4007* N/C the device. Power-on-reset R4 R9 R5 R8 R15 10K 0K 1.2K is achieved by capacitor PST and R9. resistor C2 N6 P1.4 Pin 12 (P1.0) of IRX1 INTO TSOP1 microcontroller IC2 1738 P1.3 IC2 provides the 38kHz clock C3 AT89C2051 :iou T16V frequency, which is buff P1.2 R10 N3 ered by N1 to drive the 15012 P1 o Pi.i AWV two parallel lR-LEDs. N2 These IR-LEDs act as the R11 R13 33012 33012 R9 infrared signal transmit 4.7K C4 C5 22p 22p 6 MHz LED1 LEDS ter. Resistor RIO limits LED2[ LED3T LED4] LED5 the current through the LEDs. Port pins Pl.l, Fig. 2: Circuit of microcontroller-based flush controlsystem PI.2, Pi.3 and PI.4 are used for indication of standby, alert, active and flush, respectively. Port pin PI.4 also drives relay RL1 through transistor Tl. Diode D5 acts as a free-wheeling diode. The solenoid coil operated off 6V is connected to the contacts of relay RL1. External interrupt 0 (INTO) is used to receive the reflected IR signal. INTO (pin 6) of the microcontroller is pulled up with resistor R3 and connected to pin 3 ofTSOP1738 IR receiver module. Pin 2 of TSOP1738 is pulled high with resistor R2, while pin 1 is grounded. In the IR receiver module TSOP1738, the PIN diode and the preamplifier are assembled on the lead frame, and the epoxy package is de R filter. The demodulated output signed as an I from the receiver module can be directly de coded by the microcontroller. The IR-LEDs continuously transmit the IR signal and standby LED2 is always 'on.'When any person comes near the IR-LEDs, the IR receiver module receives the reflected IR signal and alert LED3 lights up. If the alert LED glows for 5 seconds, the active LED (LED4) lights up, indicating that the circuit is now ready to flush. This 5-second time allows for validation of the pot use by the person. When the person goes away, the flush is activated for 10 seconds, which is indicated by LED5. If the person is there for more than 5 minutes, the system flushes once and the software goes back EFY/DEC-06/SUNIL/FLUSH SYSTEM to waiting for the object to move away. The 5V regulated power supply for the cir cuit is provided by a conventional circuit. The Fig. 3:Actual-size, single-side PCB of microcontroller-based flush control AC mains is stepped down by transformer XI system
1
112
to deliver a secondary output of 7.5V, 300mA, which is rectified by a full-wave rectifier com prising diodes Dl through D4, filtered by capacitor Cl to eliminate ripples and regulated by IC 7805 (ICl) to provide regulated 5V power supply for the circuit. LED1 acts as the power indicator. Relay coil and solenoid coil are powered by 6V unregulated power supply. A 6V rechargeable battery is used for power
O j o 7805 I , , I R1 330E
P0UER.LED1
611,100
aa
N/ty" o
N/C
0/E/N
57
6I1Hz
CN (XI
XTAL
backup.
An actual-size, single-side PCB for the microcontroller-based automatic flush system (Fig. 2) is shown in Fig. 3 and its component layout in Fig. 4.
lOOOu
TSOP
1738
o
BhTT.
7K
C4 C5 2p 22p
The software
DL-05=1N400?R3-R8=10K
R11-R14=330E
EFYDEC-06/'SUNII 'FLUSH SYSTEM The software for flush system is written in 'Basic' language and compiled using Bascom-8051 version. The demo version of Fig. 4: Component layout for the PCB Bascom-8051 is available on website 'www.mcselec.com/index.php?option=com_docman&task =doc_
coo
150E
12 PI 3 Rlt
download&gid=166&Itemid=54.' First, instruct the compiler to use 89C2051.dat for microcontroller AT89C2051 by statement 'Sregfile.' After this, instruct the compiler to override the crystal frequency options setting by statement '$crystal."Ihen declare the (Port-3 acts as the input port.) Enable variables as bits, bytes and words. Initialise port-1 to '0' and port-3 to the interrupt after initialisation. Now write the subroutine 'Fn38K6' to generate 38kHz frequency for transmis sion of the IR signal. Standby LED glows when external interrupt 'INTO' is high, i.e., there is no interruption of IR transmission. When 'INTO' goes low, i.e., the transmission is interrupted, alert LED glows. After 5 seconds, active LED lights up. When the person moves away (no interrupt) within 5 minutes, the system flushes for 10 seconds. Otherwise, it flushes every 5 minutes if the person is there. 'Wait' and 'waitms' statements provide the delay in seconds and milliseconds, respectively. Delay time basically depends on the crystal frequency. Download Source Code: http://www.efymag.com/admin/issuepdf/Flush%20System.zip
FLUSH.BAS
$regfile = "89c2051 .dat" * the micro controller's include lile
$crystal = 6000000
x
on interrupt
On Into
Int0_int
Set Tcon.O
'6 mhz crystal used * define variables below Dim J As Byte Dim Irrecd As Bit , IAs Byte Dim K As Byte Dim L As Bit Declare Sub Fn38k6 (period As Byte) Dim Period As Word Irrecd = 0 * another name for port pl.O Irport Alias Pl.O * make all ports 0 PI = 0
* int enabled Enable Interrupts Begl : * show standby mode on port-1 (yellow led on) Pl.l = 1 x enable the intO to work now Enable IntO Call Fn38k6 100 * call the subroutine to send out a beam * of IR at 38khz freq * int would have taken place if ir reed Disable IntO * disable the int now
Microcontroller-Based Projects
113
no int occured so go back to standby mode Pl.l = 0 * flash standby led Waitms 100 * wait for ( l/10th of a second) Goto Begl
1
End If
'
waitms 100
Next J Next I
'
*
End If
-1
* * *
here int reed wait for about 5 sees to get into alert mode ir beam should be reflected for this period of
sees
r reed = 0 I
PI.2 = 1
Wait 5 Wait 5 PI = 0 * all leds off x get back to start Waitms 100
Goto Begl
'
Nothing :
x
Irrecd = 0
Enable IntO
Call Fn38k6 100
PI = 0 Waitms 100
Goto Begl
x
38khz freq ' int would have taken place if ir reed Disable IntO * check if int occured If Irrecd = 0 Then * no int occured * so out of loop - reflective object gone Goto Nothing End If Waitms 100
Next J
Kk As Byte
PI.3 = 1
For 1=1 To 35
* active
For J
Irrecd = 0
led on
1 To 60
Irport
NOP NOP
Enable IntO Call Fn38k6 100 ' call the subroutine to send out a beam of IR at 38khz freq ' int would have taken place if ir reed Disable IntO
Wend Wend
Wend
End Sub
Rem The Interrupt Handler For The IntO Interrupt
If Irrecd
'
0 Then
Int0_int : * program
x
Irrecd = 1
Exit For
'
'
114
Ihe ambient temperature must be within certain limits for instruments to work properly. Therefore tem
DIS2, DIS3
BR1
Resistors (all Vi-watt, 5 per cent carbon): R1 - 680-ohm - 47-ohm R2 R3 - 1-kilo-ohm R4-R18 - 680-ohm R19, R20 - 470-ohm
4. Low power consumption 5. Development tools are easily available. This temperature indicator and controller uses minimal components. It is to so simple that even a hobbyist can build it without much effort.
No special tools are needed to build this project. All the ICs used here are available in DIP packages. So no special placement tools are needed. The cost of components is minimal and parts are commonly accessible.
Capacitors: CI C2 C3 Miscellaneous:
XI
SI RL1
- 1000|iF, 35 V electrolytic - 0.1pF ceramic disk - lOpF, 16V electrolytic - 230V AC primary to 12V, 250mA secondary transformer
-
Circuit description
Fig. 1 shows the block diagram of the temperature indicator and controller using MSP430G2231 microcontroller, 7-segment displays, CD45 11display drivers, power supply, relay and relay driver.The circuit is shown in Fig. 2. MSP430G2231 microcontroller. The heart of the circuit is a 14-pin MSP430G2231 micro DIS3 DIS2 DISH controller. Texas Instruments' MSP430 family of ultra-low-power microcontrollers consists of sev aQ eral devices featuring different sets of peripherals targeted for various applications. The architecture, combined with five low-power modes, is opti mised to achieve extended battery life in portable measurement applications. The device features a CD4511 CD4511 powerful 16-bit RISC CPU, 16-bit registers and
Push-to-on switch
DC REGULATED 6V
SUPPLY
3.3V
o u. o u u.
1
1r
RELAY AND RELAY
DRIVER
MSP430G2231 MICROCONTROLLER
constant generators
Fig. 1:Block diagram of low-power temperature indicator and controller using MSP430G2231 microcontroller
code efficiency. The digitally controlled oscillator (DCO) allows wake-up from low-power modes
to
Microcontroller-Based Projects
115
X1
230V
DIS2
DIS1
-BR1+
230V AC
q
IC4 7806
OUT
3.8
50H2
COM.
C2_
0.1>i
LED1"
BR1 = 1A BRIDGE RECTIFIER
R4 R5 R6 R7 R8 R9 R10
R11 R12
P2.7
KJ
P2.6
Vcc
IC2
CD4511
IC3
CD4511
PI.5
PI .4
C3
16V
10M
RST
IC1
P1.2
P1.1
MSP430G2231 P1.3
ZD1 3.3V
D1
1N4007
NCNC-
P1.0
P1 6
GND
R20. 470ft
l6 6n
SL100
230V AC
The MSP430G2x21/G2x31series is an altra-low-power mixed-signal microcontroller with a built-in 16-bit timer and ten input/output (I/O) pins. The MSP430G2x31 family members have a 10-bit analogue-to-digital con verter (ADC) and built-in communication capability using synchronous protocols (SPI or PC). For configuration details you may refer to the datasheet. Typical applications include low-cost sensor systems that capture analogue signals, convert them into digital values and then process the data for display or transmission to a host system. Power supply. The circuit requires a 12V DC supply. For this, a 230V AC primary to 12V, 250mA secondary transformer is used.The bridge rectifier rectifies the AC signal and the capacitor further filters it before feeding to 7806 regulator IC.The 12V supply is directly given to the relay for switching on/off the device. The 6V output from 7806 voltage regulator is used to drive the display section. This 6V is also reduced to 3.3V using zener diode ZD1 to drive the MSP430G2231. LED1 indicates the presence of power supply in the circuit. Relay. As the I/O pin of the MCU cannot drive a relay, a transistor is used for this purpose. LED2 provides a visual indication of the relay status. Electrical appliances such as coolers or fans can be switched on/off through the relay. Glowing of LED2 will indicate the 'on' status of the electrical device connected across relay RL1. Inputswitch. Here reset switch SI is the only input switch. Press it momentarily whenever there is incorrect data display. Note that there is no control input switches for the temperature setting. The program code is fixed at 29C. That is, if the temperature reaches 30 degrees, your electrical appliance (cooler, fan or AC) connected to this circuit will turn on automatically. Ifyou want to change the temperature setting, you need to change the code as explained below in the software section. Display. DIS2 and DIS3 display the temperature in digits from 00 to +99.Temperature is commonly measured either in degree centigrade or Fahrenheit. This project displays temperature in degree centigrade. DIS1 is wired for displaying the degree centigrade symbol (C). CD4511 is a BCD-to-7-segment display driver. IC2 and IC3 drive DIS3 and DIS2, respectively.
Software program
The code for the microcontroller is written in 'C' language in Code Composer Studio version 5 (CCS v5) inte grated development environment (IDE). CCS is a complete, Eclipse-based IDE that supports all the MSP430
116
MSP430G2231-Based Temperature Indicator and Controller
microcontroller devices. Code Composer Studio. When using CCS with an MSP430 MCU, a unique and powerful set of plug-ins and tools are made available to fully leverage the MSP430 microcontroller. Free and paid versions are available for download from Texas Instruments' website www.ti.com/ tool/ccstudio-msp430. There are two op tions in the free version, each of which has
some limitation: 1. 16kB code-limited version. It has no time limit but supports firmware up
to 16kB size only. All the MSP430 de vices are supported. 2. 180-day time-limited version. It has no code-size limit but is available
only for 180 days (with registration). All the MSP430 devices are supported. The code for this project is 3kB only,
so you can use any of the above free ver sions. Fig. 3:An actual-size, single-side PCB for the MSP430G2231-based temperature Operation of CCS. 1. Start Code indicator and controller Composer Studio (CCS) by double clicking the icon on the desktop or TEMPERRTURE INDICATOR AND CONTROLLER D1S3 DIS2 DIS1 selecting it from the Windows Start menu. When CCS loads, a dialogue OOOOO ooooo OOOOO box will prompt you for the location of a workspace folder. Browse to "C:\ MSP430_LaunchPad\WorkSpace" and 12V INPUT ooooo ooooo OOOOO do not tick the "Use this as the default ..."checkbox. Click 'OK.'The workspace sags SSs DISl LTS542 ss s is saved automatically when CCS is DIS2-DIS3 LTS543
closed. R4-R17 688E 'New Click 2. Project' option. A oooooooo project contains all the files you will O need to develop an executable output file O ooooooo in ooooooo (.out) which can be run on the MSP430 flu R2 47E hardware. To create a new project, click 12V, 1C/0 DEV. ON O-OhE "File>New>CCS Project." In 'Project RESET SL100 7806 m SI 1N4007 Name' field, type 'Temperature_Indicaj=Ol O ] tor.'Uncheck "Use default location" box. 3. Next, select the appropriate device a-czzi-o family, variant and connection type from R19 470E 1212E the pull-down list. This will select the appropriate linker command file and Fig. 4: Component layout for the PCB runtime support library. Set the basic build options for the linker and com piler, and set up the target configuration. 4. Click 'Finish.' A new project has now been created. The 'C/C++ Projects' window contains Temperature_Indicator.The project is set as 'Active' and the output files are located in 'Debug' folder. At this point, the project does
- -
:*n
T1
Microcontroller-Based Projects
117
file. The next step is to add the source files to the project. 5. To add a source file to the project, right-click 'Temperature Indicator' in 'C/C++ Projects' window and select NewSource File. Name the source file as main.c and click 'Finish' button. An empty window will open for the main.c code. You can enter the code here. We have used the original source code that is designed for the MSP430G2231 and included in the link given below. 6. Click Tile>Open File' and navigate to 'C:\MSP430\EFY\Files.' Open the 'Temperature_Indicator.txt' file. Copy and paste its contents into main.c. Save main.c by clicking 'Save' button in the upper left side of the CCS window. 7. Click 'Build' and watch the tools run in 'Console' window. Make sure that no errors are listed in 'Problems' window. Hie program output with '.out' extension will be generated in 'Debug' folder. Programming hardware tool setup. In this step, you flash/program the MCU. You need a pro grammer for that. Either use the TI LaunchPad or the TI EZ430 dongle as a programmer. The Web link to LaunchPad is: http://processors.wiki.ti.com/index.php/MSP430_LaunchPad_ %28MSP-EXP430G2%29?DCMP=launch
pad&HQS=Other+PR+launchpadwiki-pr
The link to EZ430 is:
http://focus.ti.com/docs/toolsw/folders/print/ez430-f2013.html Burning the code into MSP430 is straightforward with MSP430 LaunchPad and CCSvS as explained below. MSP430 LaunchPadsetup. The LaunchPad board includes a preprogrammed MSP430G2231 device that is already located in the target socket. When the LaunchPad is connected to your PC via USB, the demo starts with an LED toggle sequence. The on-board emulator generates the supply voltage and all of the signals necessary to start the demo. The driver installation starts automatically. If prompted, allow Windows to install the software automatically. At this point, the on-board red and green LEDs should be in a toggle sequence. This lets you know that the hardware is working and has been setup correctly. Now, copy and paste the temperature_Indicator.txt file as ex plained above in Step 6 under operation of CCS section. Note that CCS can automatically save the modified source files. Once the code is compiled successfully as mentioned in the step above, you can load the code into the MCU using the LaunchPad board. Open 'Debug' from 'Run menu, connect the board and download the code to the target (flash device). Click 'Debug' button (green bug).The 'Debug' icon in the upper right-hand corner indicates that you are now in 'Debug Perspective' view Ifdownload is successfid, carefully pull up the chip with forceps from the boardand place it in your circuit. Temperature conversion. The conversion and calculation are mainly based on the ADC resolution and refer ence voltage. The microcontroller used here has a 10-bit ADC, which means there are total 1024 divisions for
the entire span. The MSP430G2231 contains a temperature-sensitive resistor (thermistor) connected to the ADC. The ther mistor changes resistance with temperature, changing the voltage input to the ADC. The ADC compares the variable voltage with the reference voltage. The 10-bit ADC on the MSP430G2231 returns a number between 0 and 1023. For example, with an analogue input of 1volt and the LaunchPad's reference voltage of 1.5 volts, the ADC returns 682 because 1/1.5 = 0.666 = 682/1024. The same method is applied in the project.
<
P20UT = (BIT7) ;
PIOUT |- BIT4 ;
118
if (InCelsius>29)
PIOUT |= BIT6;
[ else
(
For example, if you want the cooler to turn on at 25 degrees, change the value in the code to '24.' Compile it and burn the code into the MCU using the LaunchPad. Next time, your appliance will turn on when the tem perature reaches 25 degrees.
Download source code: http://www.efymag.com/admin/issuepdf/MSP430%20Temperature%20Indicator-
Controller.zip
Microcontroller-Based Projects
119
The
ing rest of the day, they get only partial sunlight. To address this problem, here is a sun tracker device that allows the solar panel to track the sun's position, ensuring maximum power generation.
Circuit description
The block diagram of the sun tracker with position display is shown in Fig. l.The circuit (shown in Fig. 2) is built around ATmegal6 microcontroller, common-cathode 7-segment displays to indicate the position of the panel, ULN2003 high-voltage and high-current Darlington array IC,bipolar stepper motor and CD4511 display driver. The circuit requires a 12V battery or 12V DC power supply. The working of the circuit is simple. A sensor is used to receive the sun rays and the signal is processed through a microcontroller to rotate the solar panel towards the maximum sunlight using a stepper motor. A light-detecting resistor (LDR) acts as the sensor. The resistance of the LDR varies from zero to a few mega-ohms depending upon the sunlight intensity falling on it. In absolute darkness, it offers the highest resistance, while the resistance dramatically drops when the LDR is exposed to a light source such as sunlight. Using this feature, the microcontroller has been programmed to control the stepper motor such that the solar panel rotates towards the maximum availability of the sun rays. The main controlling device is the ATmegal6 microcontroller. It is used to process the signal received from the sensor. It has an in-built analogue-to-digital-converter (ADC) available through port A. LDR1 is connected to port PAO as shown in Fig. 2. The in-built ADC converts an analogue input voltage received from LDRl into a 10-bit digital value through successive approximations. The conversion starts by writing a logical '1' to the ADC start conversion bit. This bit stays high as long as the conversion is in progress and will be cleared by the hardware when the conversion completes. The digital values can be anywhere between 0 and 1023 depending upon the analogue input received from the sensor. A threshold value is set by the user using DC REGULATED LDR POWER SUPPLY hit-and-trial method such SENSOR that the stepper motor is stationary when the sun is directly facing towards PD4-PD7 DIS2 DIS1 CD4511 the panel.This is the point ULN2003 MOTOR where the solar panel gets DRIVER ATmega16 maximum energy from the MICROCON PC0-PC3 CD4511 sun. The analogue input TROLLER is detected from time to PC4-PC7 time. Whenever it reaches CD4511 below a threshold level, the program instructs the step L1-L4 = STEPPER MOTOR COIL per motor to advance by STEPPER MOTOR one step so that the panel Fig. 1:Block diagram of sun tracker with position display gets a much broader view
120
Sun Tracker with Position Display
12V INPUT
O-
T T_
C1
470|i
IC2
5V
LED1
K3-K5 = 10K
7805
2
_L C2
R1.6300
-r 01p
33 30 10
LDR1 L
R3 R4
25V
16
15
PAO
R2. 100K
PB2
PB3
go
wO L3_
L4
29
28
14
13
IC3
ULN2003
PC6
CD4511 12
VWV
PB4
: iok
22pl
C4,22p
.R35
Xtal 16MHz
27 PC4 26
PC5
VV- c
d
e
IC1 ATMEGA16
PC3
5V
o
16 3
4
R15-R21=470Q
15
-VWVR23
8
2
PC1
PCO
psj
ioP XZ 16V
C5
PD6
Ri R8
PBO
14
'
TO DIS2
R22-R28 = 470Q
4
-mR13 mLvwR11-R14 = 10K R12
-o
R7-R10 = 10K
+5V
VM/ 3300
R37,
A/WVrCD4511
o o u. U.
3
R29-R35 = 470Q
DIS1
DIS2
DIS3
of the sun. As the sun moves from east to west, so does /v. rV axis of / ROTATION the panel. But after nine hours, on the next day, the panel will return to the same position facing towards east, waiting for the sun. w In this project we have N S\y used a stepper motor with step angle of 7.5 degrees per step. The torque of the motor depends on the size AZIMUTH-v. of the solar panel you are E going to use. High torque is used for heavy load. IC Fig. 3. Polar-typesingle-axis system ULN2003 is used to drive the stepper motor. As the motor advances, the position angle of the panel that is being displayed on the 7-segment displays is also incremented. IC CD4511 acts as a BCD (binary-coded-decimal) to 7-segment decoder.To display the digit properly, you need to have at least nine pins. But using a CD4511, we required just four pins of the MCU.
SUMMER
WINTER
Microcontroller-Based Projects
121
PARTS LIST
The panel is mounted on a single-axis system. It is called a single-axis IC1 - ATmegal6 microcontroller - 7805, 5V regulator tracker as the mechanism rotates in only one plane around a single IC2 - ULN2003 high-current axis. The axis can be oriented such that the panels stand up at a tilt IC3 Darlington transistor array (called a polar axis) or lie flat (called a horizontal axis). Horizontal axis - CD4511 BCD-to-7-scgment IC4-IC6 is more suitable for small latitudes (locations in the tropics and closer driver to the equator, i.e., southern India), whilst polar axis is more suitable LDR1 - 5mm light-dependent resistor - 5mm light-emitting diode for larger latitudes (locations far from the equator, i.e., northern India). LED1 - H103 common-cathode This system tracks the sun from east to west during the day. Hie project DIS1-DIS3 7-segment display described is a polar-type single-axis tracking system as shown in Fig. 3. , The solar panel is tilted upward toward the south, at an angle ap Resistors (all'/4-watt 5per cent carbon): - 680-ohm R1 proximately equal to the latitude of the location, to capture more energy R2 - 100-kilo-ohm from the sun. The correct tilt angle varies with the time of the year when R3-R14, R36 - 10-kilo-ohm the system is being used, and the latitude of the site (refer Fig. 4). R15-R35 - 470-ohm - 330-ohm Latitude can be found in a standard map or from the Internet.But R37 how will you know at which angle you will get the maximum output? Capacitors: - 470|jF, 25V electrolytic There are free software available on the Internet to determine the tilt CI C2 - 0.1[iF ceramic angle for your site. One such software is PVWatts available on www. C3-C4 - 22pF ceramic nrel.gov/rredc/pvwatts/site_specific.html. It allows installers to easily C5 - lOpF, 16V electrolytic develop estimates of the performance of panel installations. It allows Miscellaneous: you to select a location and choose your own system parameters like SI - Tactile switch size, electric cost, array type, Xta,. - 16MHz crystal oscillator - 7.5-degree bipolar stepper tilt angle and azimuth angle. motor The panel can be mount - Contraption for LDR1 ed on a diagonal support - Solar module pipe along with a television - Solar module mounting system antenna rotator using U12V battery bolts (refer Fig. 5). Antenna rotors are usually powered by DC stepper motors. The stepper motor is a special type of motor de signed to move slowly and precisely. The motor has a gear-shaped metal disk in the middle surrounding the rotor and several electromagnets surrounding the rotor. The LDR sensor is mounted on the panel itself. You need to make a contraption to hold the LDR and fix it on the panel (refer Fig. 6). For this, you can use a pen cap or any hollow opaque object of suitable size Fig.5. Solar module (without LDR) mounted on the to hold and cover the LDR. You can also use a marker pen for the same. support system (courtesy:www.livingonsolar.com) Remove the felt inside it and insert the LDR. Make sure that both ends of the marker pen are LDR CONTRAPTION open. Insert the LDR into die pen from one end TRANSPARENT and cover the other end with a transparent mate LDR SOLAR PANEL rial. Mount the contraption firmly on the solar SUPPORT panel \ using glue such that the LDR receives the PEN (OPAQUE) sun rays through the transparent material. Note that proper contraption is required to protect the LDR from rain and also allow the sun rays to fall (a) LDR CONTRAPTION the LDR from top only. This ensures proper on GROUND BASE of the tracking system. working (b) MOUNTING LDR CONTRAPTION ON THE PANEL An actual-size, single-side PCB layout of Fig. 6: LDR sensor is mounted on the panel by making a contraption to the sun tracker with position display is shown holdthe LDR
ST
122
shielded wires from the PCB to the contraption for the LDR.
Software program
The 'C' code is written using AVR Studio and the hex code is burnt into the MCU using PonyProg2000. The 'C' code is designed with the reference angle set to 30 degrees with respect to the di agonal support axis. That means the
Fig. 7:An actual-size, single-side PCB for the sun tracker with position display
IC1
U12E
~W
OOOOOOODl
U.N2803
C IC3
Q-CIZK) R361K
oooooooo
C0NN2
o
o
o
SI
L0
| (Sr
Ql
when the sun is just above the horizon. As the sun moves from east to west, the panel rotates from east to west in sync with
sun movement.
at
iP
lO
lP
TO STEPPER
R15-R21 478E
XTflL
16MHz
LED1
J IK
IC4
R12 1
|R13
R7K-R1K
7885
""W o o o
a-(ZZ>- R29
IC2
The panel stops C0NN1 o Rll IK 3-C=H o 150 degrees when o o the sun is at dusk. R14 IK o o Thereafter, the panel 12V BATTERY remains at this posi tion for nine hours. After nine hours, the Fig. 8: Component layout for the PCB
o
o
a-czzj-o R30
oooo o
ooo o e
o o o o
R34
0 HZZI-OR33 0 H-C=}-R35
R29 R35- 47BE
ooo o o
DIS1
ooo o o
DIS2
o ooo o
o
123
Microcontroller-Based Projects
program instructs the motor to return to 30 degrees position facing east. When sun rises in the morning, the system begins to receive signal through the sensor again, the motor rotates and the same process repeats. Note that the angle displayed is just to let you know the position of the panel. For example, at 5 pm, the panel should be at an angle of about 140 degrees, but if the display shows 60 degrees, there is something wrong in the tracking mechanism and the panel is not facing the sun. This will alert you to check the problem and correct it. On cloudy days, the solar panel still produces energy as there is still light, although its performance is obviously reduced. In such situations, the solar tracker will orient itself optimally to pick up the most reflected ambient light. Once the sun starts shining again, it will re-orient itself to face it. The project can be further modified to use two stepper motors. The first motor will drive the panel.The second motor should be mounted with the sensor on the shaft rather than on the panel as in this case. The motor with the sensor can be made to rotate continuously and track the sun. Hie advantage is that there will be automatic tracking of the sun in a more precise way within few seconds on a cloudy day. Download source code: http://www.efymag.com/admin/issuepdf/Sun%20Tracker%20With%20Position%20 Display.rar
124
SANJIB BHUIYA
Many
a times we forget to switch off appliances like lights, fans RX1 TX1 and air-conditioner before MCU ENTRANCE ENTRANCE This leads considerable home. a to leaving AT89C51 DOOR DOOR wastage of electricity apart from reducing RX2 the life of the appliances. ROOM Here is a circuit that solves this prob lem by sensing the absence of occupants in a room and automatically shutting the Fi* Block diagram of presence sensing lights controller power 'off.' It turns on the power again when someone enters the room. The same circuit can be used for a particular appliance also, say, air-conditioner. The circuit presented here is a micro controller-based automatic room light con troller. The microcontroller along with opamp LM324 is wired with two IR sensor units to count the number of persons going inside the room and the number of persons coming out. When the number of persons inside the room is zero, it automatically dis connects the power. When someone enters the room, the counter increments and the power to the room is restored. The number IC3 of persons inside the room is displayed on AT89C51
POWER SUPPLY
a seven-segment display.
Circuit description
The block diagram of the presence sensing lights controller is shown in Fig. 1 and the circuit in Fig. 2. To derive the power supply for the circuit, the 230V, 501 Iz AC mains is stepped down by transformer XI to deliver a secondary output of 12V, 500 mA. The transformer output is rectified by a full-wave rectifier comprising diodes D1 through D4, filtered by capacitor CI and regulated by IC 7805 (ICl). Capaci tor C2 bypasses the ripples present in the regulated supply. Regulated 5V is used to power the circuit, except relay RL1. Infrared transmitter-receiver pairs
Microcontroller-Based Projects
100Q
Xtal= 12MHz
3|| N/C
/ 11
RESET SWITCH
S1=
RL1
D5= 1N4007
12V, 1C/0 RELAY
230V AC PRIMARY TO
12V, 500mA
X1 =
SECONDARY
TRANSFORMER
230V AC
50Hz
125
TX1-RX1 and TX2-RX2 are mounted on the sides of the entrance doorone pair inside and the other pair outside the room. The transmitters and the receivers are to be mounted on the opposite frames of the door such that light from the infrared transmitter falls direcdy on the infrared detector on the other side (refer Fig. 1).Cover the infrared receivers with a mask to protect these from ambient light. Infrared signals from IR TX1 and IR TX2 continuously fall on IR RX1 and IR RX2, respectively. The signals detected by RX1 and RX2 are fed to inverting input pins 2 and 6 of comparators N1 and N2, respectively. Normally, the comparator outputs at pins 1and 7 are high, which are given to microcontroller port pins P2.0 and P2.1, respec tively. When someone passes through the door, the infrared beams are interrupted and the comparator outputs go low. Microcontroller AT89C51 increments/decrements the count depending on the direction of movement. Microcontroller AT89C51 is the heart of the automatic room light controller. It is an 8-bit microcontroller with 4 kB of flash programmable and erasable read-only memory (PEROM), 128 bytes of RAM, 32 input/output (I/O) lines, two 16-bit timers/counters, a five-vector two-level interrupt architecture, a full-duplex serial port, onchip oscillator and clock circuitry. Power-on-reset is provided by the combination of resistor R6 and capacitor C3. Switch Si is used for manual reset. A 12MHz crystal along with two 33pF capacitors provides the basic clock frequency to sT' microcontroller AT89C51. Three seven-segment displays (DIS1 through DIS3) are interfaced 7805 with the microcontroller through Port 0, Port 1 and Port 3, which are used to display the 1 2 | IN IOUT C B E number of persons inside the room. Port 0 is pulled high with resistor network RNW1. Port COM. pin P2.7 drives relay RL1 to control the power. When somebody enters the room, the comparator outputs go low and port pin P2.7 Fig. 3: Pin details of 7805 and BC548 goes high. Transistor Tl drives into saturation to energise relay RL1. Diode D5 acts as a
tin
DEI
R9-R32
C4 33p
P28X
R21R20
R18
RIB R15
OXtall
oooooooooooooooooooo
IK
J1-J6"JUMPER WIRE
R7 IK
IDIO 0 O O O 0 0 Ol
1
O
uJh
|0|
ifi -i R2 68E
5?
-
*
C1
S
q-KF
xi
LEDl
[1
o|
TTT
Kt
7885
}l ~
<HZZH3
RS IK
VR2 IK
C2 Uu
Fig. 4: An actual-size, single-side PCB for the presence sensing lights controller
126
free-wheeling diode. Resistors R9 through R32 are used to limit the current through segments of the 7-segment display. Presets VR1 and VR2 are used to set the threshold voltage of comparators N1 and N2, respectively.
PARTS LIST
Semiconductors: IC1 IC2
IC3 T1 Dl-DS DIS1-DIS3
- 7805, 5V regulator - LM324 quad operational - AT89C51 microcontroller - BCS48 npn transistor - 1N4007 rectifier diode - LTS 542 common-anode - 5mm LED
amplifier
Construction
An actual-size, single-side PCB for the automatic room light control ler is shown in Fig. 4 and its component layout in Fig. 5. Assemble the circuit on the PCB to save time and minimise assembly errors. Carefully assemble the components and double-check for any over looked error. Use IC bases for microcontroller AT89C51 and op-amp LM324. Before inserting the ICs, check the supply voltage. Both the IR transmitter-receiver pairs should be placed approxi mately 50 cm apart. Align the IR transmitter and IR receiver such that these directly face each other.
7-segment display IRTX1, IRTX2 - Infrared transmitter IR RX1, IK RX2 - Infrared detector
LED1.LED2
Resistors (all 'A-watt, 5% carbon): R1 - 470-ohm - 100-ohm R2.R3 R4, R5 - 10-kilo-ohm R6 - 8.2-kilo-ohm R7 - 1-kilo-ohm R8 - 680-ohm R9-R32 220-ohm VR1, VR2 - 10-kilo-ohm preset RNW1 - 10-kilo-ohm resistor network
Software
The software for the automatic room light controller is written in 'C' language and compiled using the Keil pVision4 compiler. Burn the generated hex code into the microcontroller by using a suitable pro grammer. It is well commented and easy to understand. Download source code: http://www.efymag.com/admin/issuepdf/ Auto%20Room%20Light%20Controller.rar
Capacitors:
CI C2 C3
C4, C5
Miscellaneous:
- lOOOpF, 35V electrolytic - 0.1|jF ceramic disk - lOpF, 16V electrolytic - 33pF ceramic disk
XI
SI
Xtau
RL1
LIGHT.C
#include <REGX51.H> void display (unsigned int.) ; 3bit control-P2A7; sbit in=P2A0; sbit out=P2"l; void main (void) { unsigned int z=0; //set counter at zero P1=0XC0; //display zero in
while(in==l) ; while (in--0) ;
//decrease the
counter
//repeat forever
}
<
if(in==0)
// is anybody going
inside
<
while (out==l ) ;
while (out==0) ;
z++;
//increase the
counter
unsigned int digit [10]- (0XC0,0XF9, 0XA4, OXBO, 0X99 ,0x92, 0x82, 0XF8, 0X80,0X90); unsigned int i,j,k; i=m%10;
j=m/10;
k=m/100; j=j-k*10; Pl-digit [ij ; P3=digit [ j ] ; P0=digit [ k ] ;
)
Microcontroller-Based Projects
127
SACHIDANANDA SAHU
wheelchair is a chair with wheels, designed to be a replacement for walking. The device comes in variations where it is propelled by motors or by the seated occupant turning the rear wheels by hand. Wheelchairs are used by people for whom walking is difficult or impossible due to illness, injury or disability. Here we describe a microcontroller-based wheelchair the speed and direction of which can be controlled from a touchscreen. The wheel chair moves by means of a TOUCHSCREEN geared motor. Fig. 1shows WHEEL M1 M2 the block diagram of the CHAIR
MCU ATMega16
MOTOR DRIVER
touchscreen-controlled
wheelchair. The system includes a resistive touch screen, microcontroller and motor driver circuit.
POWER SUPPLY
Fig. 1: Block diagram for the touchscreen control for wheelchair
The touchscreen
The touchscreen is an electronic visual display that can detect the presence and location of a touch within the display area. It is sensitive to the touch of a human finger, hand and passive objects like stylus (refer Fig. 2). It is a two-di mensional sensing device which is made of two sheets of material separated by small spacers. There are three main touchscreen technolo gies: resistive, capacitive and surface acoustic
wave.
POLYETHYLENE FILM
SPACER DOT
ITO CONDUCTIVE
COATING
BOTTOM CIRCUIT I AYFR
GLASS OR ACRYLIC
BACKING PANEL
Resistive touchscreen. The resistive touch screen consists of a flexible top layer made of polyethylene and a rigid bottom layer made of glass. Both the layers are coated with a conduct
TOUCH CREATES CONTACT BETWEEN RESISTIVE CIRCUIT LAYERS, CLOSING A SWITCH
CONTROLLER DETERMINES
TOUCH COORDINATES
ing compound of indium-tin oxide (ITO) and then spaced with spacers. When the monitor is operational, an electric current flows between the two layers. When a touch is made, the flexible screen presses down to touch the bottom layer. A change in electrical current is hence detected and the coordinates of the touch point are calculated by the controller and parsed into readable signals for the operating system to
react
128
LED1
PB3
R2 10K
TOUCHSCREEN
YR
XR
OUT
0.1|J
PB2
40
PAO
PA1
IC3 7805
COM
IC2 L293D
PB1
IC1 ATMega16
38
PA2
PA3
XL
S2
D1n
R3:
10K
D1-D4 = 1N4148
PBO
10K
SI
BATT.
7Ah
T
S2 = ONraFF SWITCH
Iq
RNW1 10k
both the layers to calculate the axes information of the touch. Touch measurement is a two-step process.The x-coordinate of the touch point is calculated by creating a voltage gradient on the flexible layer. The y-coordinate is determined by creating a voltage gradient along the bottom layer. Capacitive touchscreen. Capacitive touchscreen is the most popular and durable touchscreen technology used all over the world. It consists of a glass panel coated with indium-tin oxidea capacitive (conductive) material. Capacitive systems transmit almost 90 per cent of light from the monitor. In surface-capacitive screens, only one side of the insulator is coated with a conducting layer. When the monitor is operational, a uniform electrostatic field is formed over the conductive layer. Whenever the user touches the screen with a finger, conduction of electric charges over the uncoated layer results in the formation of a dynamic capacitor. The computer or the controller then detects the Fig. 4: An actual-size, single-side PCB for the touchscreen position of touch by measuring the change in capacitance at control for wheelchair the four corners of the screen. Surface acoustic ivave touchscreen. Surface acoustic wave touchscreen contains two transducers (transmitting and receiving) placed along the X-axis and Y-axis of the monitors glass plate along with some reflectors.The waves propagate across the glass and reflect back to the sensors. When the screen is touched, the waves are absorbed and a touch is detected at that point. These reflectors reflect all the electrical signals sent from one transducer to another. This technology provides excellent throughput and image clarity.
Circuit description
Fig. 3 shows the circuit for the touchscreen control for wheelchair. It comprises microcontroller ATMegal6 (ICl), motor driver L293D (IC2), regulator 7805 (IC3), resistive touchscreen and a few discrete components. The ATmegal6 is a low-power CMOS 8-bit microcontroller based on the AVR enhanced RISC architecture. The AVR core combines a rich instruction set with 32 general-purpose working registers. All the 32 registers are direcdy connected to the arithmetic logic unit, allowing two independent registers to be accessed in one single instruction executed in one clock cycle. This architecture is more code-efficient.
Microcontroller-Based Projects
129
Di-D4=1N4148
IC1
0000000 G
L293C
Cr
0 0 0 0 0 0 0 0,
12U BATT. SI
m rm
+ UIN. lu
RESET ON/OFT SWITCH
PARTS LIST
Semiconductors:
- ATMegal6 microcontroller - L293D motor driver - 7805, 5V regulator 1N4148 switching diode - 5 mm LED - Touchscreen module - 470-ohm - 10-kilo-ohm - 10-kilo-ohm - 0.1(jF ceramic disk - Push-to-on tactilc switch - On/off switch - 50-rpm geared DC motor
R1 R2-R4 RNW1
The ATmegal6 has the following features: 16 kB of inprogrammable Flash program memory, 512 bytes of EEPROM, lkB SRAM, 32 general-purpose input/ output (I/O) lines, 32 general-purpose working registers, three flexible timers/counters with compare modes, internal and external interrupts, a serial programmable USART, a 071 2B byte-oriented two-wire serial interface, an 8-channel 10-bit analogue-to-digital converter (ADC), an SPI serial port, and six software-selectable power-saving modes. The microcontroller has an 8-channel ADC. Port A of the microcontroller is multiplexed with the 8-channel ADC. Port pins PAO through PA3 of microcontroller are interfaced with 170E pins 1 through 4 of touchscreen. The touchscreen uses four channels (ADCO through ADC3). The resistive-type touchscreen used here is quite cheaper than capacitive touchscreens and also easy to use. When the touchscreen is touched, its resistance changes depending on the position of the touch. The touch input is in the form of analogue values of the voltage relative to the point of touch. This is processed in microcontroller ATMegal6 using the ADC. The ADC converts the analogue values of the touchscreen into 10bit digital equivalent form. This digital data is then processed to find the exact position of the touch and perform the corresponding action like left turn, right turn, forward movement and reverse movement with the help of motor driver L293D. Switch SI is used for manual reset. Motor driver L293D is interfaced with the microcontroller's port B. Port pins PB0 and PB1, and PB2 and PB3 of the microcontroller control motors Ml and M2, respectively. Motor drivers are enabled in pairs. When enable input pins 1 and 9 of IC2 are high, the associated drivers are enabled and their output pins 3 and 6 and pins 11 and 14, respectively, are active and in phase with the inputs. With the proper data inputs, each pair of drivers forms an H-bridge reversible drive, suitable for motor applications. Motors Ml and M2 rotate in forward direction (clockwise) when port pins PBl and PB3 are high. Motors Ml and M2 rotate in reverse direction (anti-clockwise) when port pins PBO and PB2 are high. A 12V DC battery is used to power the circuit. IC 7805 provides regulated 5V supply to the circuit. Capacitor CI bypasses ripple from the regulated supply. LED1 acts as the power-'on indicator and resistor R1 limits the current through LED1.
system
Capacitors:
CI
assemble the components and double-check for any overlooked error. Use IC bases for IC1 and IC2.Before putting the microcontroller and other ICs on the PCB, check the correct supply voltage. Suitable con nectors are provided on the PCB to connect geared motors Ml and M2. Connect the motors and power the circuit with 12V battery. Now the circuit is ready for use. For instance,
BATT.
Miscellaneous: SI S2 Ml, M2
130
when you touch the forward arrow on the touchscreen, both the motors rotate in forward (clock-wise) direction simultaneously. Fit the motors properly with the wheels and the touchscreen near the hand to control the move ment of the wheelchair.
Software
The source program is written in 'C' language and compiled using AVR Studio to generate the Intel hex code. The generated hex code is programmed into the chip using a suitable programmer. The code is well commented
and easy to understand. The device is shipped with CKSEL="0001"and SUT="10".The default clock source setting is therefore lMIIz internal RC oscillator with longest startup time. To activate the internal oscillator, program the fuse bytes of the microcontroller as follows: Fuse low byte = D4 Fuse high byte = 99
Downloadsource code: http://www.efymag.com/admin/issuepdf/Touchscreen%20Controlled%20Wheelchair.zip
TOUCH.C
#include<avr/io.h> //header file #include<util/delay .h> //header file void DriveMotor (unsigned char LEFT, unsigned char RGHT) //For MOTOR
{
ADMUX=(1REFS0)
<1<<ADLAR) |channel;
_delay_ms (10);
return (ADCH) ;
will stop
{
<
ordinate
while (1)
<
x-read_adc_channel (3) ;
_delay_ms (20) ;
); PORTB | =_BV ( 1
PORTB&=~_BV (0) ;
}
will stop
{
y=read_adc_channel (2) ; _delay_ms (20) ; if(x>57 && x<140 && y>150) //forward
{
PORTB&-_BV(2) ;
PORTB4*s~_BV (3) ;
}
~ 1 then
left motor
PORTB&=~_BV(3) ;
} }
el3e//stop
(
Microcontroller-Based Projects
131
ere we describe how to control electrical and electronic gadgets from a remote location using radio fre quency (RF) transmission. An RF interface is used instead of infrared (IR) to avoid the drawbacks of an IR interface. Besides, RF has a w ANT.
an RF receiver to switch on or switch off the desired device. This system can be used to control up to fifteen devices.
Fig. 1 shows the block diagram for RF-based multiple device control using microcontroller. Signals from the keypad are fed to microcontroller
AT89C2051, which, in turn, is inter faced to the RF transmitter through encoder HT12E. The microcontroller continuously reads the status of the keys on the keypad. When any key is pressed, data is passed to the encoder and then to the RF transmitter from where it is trans mitted. The RF receiver receives this data and gives it to the RF decoder. The
TRANSMITTER
MCU AT89C2051
=3
RELAY
ENCODER
POWER SUPPLY
RECEIVER
J
MCU
AT89C51
DECODER
POWER SUPPLY
=>
15 DEVICES
Fig. 1: Block diagram for RF-based multiple device control using microcontroller
BATT.
+i
S18 DIP
SWITCH
18 15
SM TX-433
. -1I mS17
R3. OK
Lb
02, 33p
C3, 33p
12MH2
LED1J Lv
IC1 HT12E
13 IC2 AT89C2051
3$$
22
13
OFF 4
ON
D1-D5 = 1N4148
132
may lie between 1.5 kHz and 7 kHz depending on the resistor value used
between oscillator pins 15 and 16. The internal oscillator frequen cy of decoder HT12D is 50 times the oscillator frequency of encoder HTl2E.The values of timing resis tors connected between pins 15 and 16 of HT12E and HT12D, for the given supply voltages, can be determined from the graphs given in the datasheet of the respective chips. The resistor values used in the circuit here are chosen for ap proximately 3kHz frequency for encoder HT12E and 150 kHz for
l
firis
decoder HT12D at a VDD of 5V. Decoder HT12D receives data from HT12E on its D[N pin serially. If the transmitted address matches the address of the decod er four times in succession, valid transmission pin (VT) becomes high. The data from pins AD 8 through AD 11 of the HT12E appears on pins D8 through Dll of the HT12D.
Fig. 6:An actual-size, single-side PCB for the receiver circuit (Fig. 3)
ant.
JNB B Bhuii
C7 1l
IC5
lOOOu
LlD3
..
Li5fol|a
a
RL4
:nidq7
R7
IC4
QESET S20
C6 lu
AT89C51
HT12E
Transmitter unit
Fig. 2 shows the transmitter circuit with SM TX-433 RF module (TX1). TX1 is an AM/ ASK transmitter module operat ing at 433 MHz. AT89C2051 is a low-voltage, high-performance
looalMM
RNUI2
BBB0BBB00
1OK
9 9 9 9 9 999
99999999 SWITCH
DIP
SI 9
DRI ?
IC6
CMOS 8-bit microcontroller. It Fig. 7: Component layout for the PCB in Fig. 6 has 2 kB of Flash, 128 bytes of RAM, 15 input/output (I/O) lines, two 16-bit timers/counters, a five-vector two-level interrupt architecture, a full-duplex serial port, a precision analogue comparator, on-chip oscillator and clock circuitry. Power-on reset is provided by the combination of resistor R3 and capacitor CI. Switch S17 is used for manual reset. A 12MHz crystal along with two 33pF capacitors provides the basic clock frequency for operation. The receiver address to be transmitted can be set with the help of 8-way DIP switch S18. Port pins P1.0 through P1.7 of the microcontroller are interfaced with the keypad. Pins P3.0 and P3.2 through P3.5 are inter faced with TE pin and data inputs AD8 through AD11 of encoder HT12E. When all switches (Si through S16) are opened on the keypad, the microcontroller pulls the TE pin as well as data input pins AD 8 through AD 11 to logic 1. If any switch is closed, the microcontroller pulls the corresponding data pin along with TE pin to logic 0. When switch SI is closed, the microcontroller makes pin 10 (AD8) and pin 14 (TE) of encoder HT12E low, and logic 0 is transmitted through TXl.The other data pins of encoder HT12E will be in logic 1state in this case. LED1 glows to indicate transmission enabled.
134
HI
O
RL8
o o
Z
\
m III DDI
LOADS
l 0AD1 n
i oftmi
L0AD12
u N z
III
0"
RL12
o v z
o s z
RL9
o a
0 0
oo
RL11
m III ill
i oaoi 3
LOAOl 4
L0AD15
a u \ s z z
o o
o o
pfjjJuqQ poiJuqQ
RL10
0ooojox0
RL13
0't v ~q
T
'
o
Fig. 9: Component layout for the PCB in Fig. 8
nsrB|
9308000
RLH
RL15
Receiver unit
Fig. 3 shows the receiver circuit with SM RX-433 RF module. AT89C51 is a low-power, high-performance CMOS 8-bit microcontroller. It has 4
kB of Flash, 128 bytes of RAM,32 I/O lines, two 16-bit timers/counters, five-vector two-level interrupt architecture, a full-duplex serial port, onchip oscillator and clock circuitry. Power-on reset is provided by the combination of resistor R5 and capacitor C6. Switch S20 is used for manual reset. A 12MHz crystal along with two 33pF capacitors provides the basic clock frequency to microcontroller AT89C51. Address lines of the encoder (ICl) and the decoder (IC4) should be identical for data reception in the receiver. Here addresses are made identi cal through switches S18 and S19. When any of the keys on the keypad is closed, the corresponding data pin of the decoder goes low.When any data is received, valid transmission pin (V.,.) goes high as indicated by LED2. Data outputs D8 through Dll of HT12D are connected to port pins PO.O through P0.3 of the microcontroller. The microcontroller receives the decoded data and controls the corresponding relay through relay drivers ULN2003 and ULN2803.The device to be controlled is connected to the relay contacts. Unregulated power supply is used for relays.
Port pin
P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 P1.0
Device number
1 2 3
4
S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
S11
0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000
5 6
7 8 9
10
11
Microcontroller-Based Projects
135
Power supply
Semiconductors:
PARTS LIST
The 230V AC mains is stepped down by transformer XI to deliver a IC1 secondary output of 6V, 500 mA.The transformer output is rectified by a IC2 IC4 full-wave rectifier comprising diodes D6 through D9,filtered by capacitor IC5 C8 and regulated by IC 7805 (IC8). Capacitor C7 bypasses the ripples IC6 IC7 present in the regulated supply. LED3 acts as the power indicator and R6 IC3.IC8 limits the current through LED3. D1-D5
- AT89C51 microcontroller
- ULN2803 relay driver
- ULN2003 relay driver - 7805, 5 V regulator - 1N414R switching diode - 1N4007 rectifier diode 5mm LED
Software
Programs for the microcontrollers are written in BASIC and compiled using BASCOM Basic compiler for 8051 family.These are supported by Windows OS. The microcontrollers of the transmitter and receiver units R7 - 51-kilo-ohm are programmed with source programs 'Remote.bas' and 'Receiver.bas,' RNW1, RNW2 - 10-kilo-ohm network resistor respectively. The bas codes are converted into hex codes using the above Capacitors: - lpF, 16V electrolytic compiler. The hex codes are burnt into the respective microcontrollers C1.C6 C2 C5 33pF ceramic disk C7 using a suitable programmer. - 0.1[iF ceramic disk C8 - 1000nF, 25V electrolytic
-
D6-D9 LED1-LED3 Resistors (all 'A-viatt, 5% carbon): R1 - 1.1-mega-ohm R2 - 330-ohm - 10-kilo-ohm R3.R5 R4,R6 - 470-ohm
Miscellaneous:
XI
An actual-size, single-side PCB for the transmitter circuit (Fig. 2) is RL1-RL15 shown in Fig. 4 and its component layout in Fig. 5. The PCB for the S1-S17, S20 receiver circuit excluding relay section (Fig. 3) is shown in Fig. 6 and its S18.S19 component layout in Fig. 7.The PCB for relays RL8 through RL15 con S21 TAL2 nected to load 8 through load 15 is shown in Fig. 8 and its component TALI TX1 ' layout in Fig. 9. You can use another PCB for relays RL1 through RL7 to connect load 1through load 7. Suitable connectors are provided on the RX1 PCB. The receiver PCB is interfaced with the relay PCB by connecting
CONl to CON5, and CON2 to CON6. After assembling the transmitter, receiver and relay sections on the respective PCBs, pull pin 1of both HT12E and HT12D to ground. LED2 connected to VT pin of the decoder should glow, indicating that a valid signal has been received. 255 sets of transmitter-receiver pairs can be used within the same area, each with a unique address. Alternately, we can also control 255 receivers with a remote control by changing the address. Now your RF-based multiple device control system is ready for use. Download source code: http://www.efymag.com/admin/issuepdf/RF%20Based%20Multi%20Device%20
Control.zip
136
GURUNATH REDDY
POWER RELAY walk all the MOTOR RELAY SUPPLY DRIVER way to their fields at night just to switch the pump motor 'off' Besides, he may never get to PIPE SENSOR know the problem. DRIVER This problem can be solved by using this AT89C51 GSM-based system that will automatically MCU OOO GSM ooo give the user a call on his mobile phone when OOO MODEM ANT. the water level in the borewell drops below or CELLPHONE GND rises to the threshold level for pumping. The BOREWELL user can also remotely switch on or switch off the pump motor by sending an SMS from Fig- 1:Block diagram of GSM-based borewell water-level monitoring system
If
the water level in a borewell drops below the or even burn out due to dry running. It is
to
threshold level for pumping, its pump motor may get air-locked
INPUT O
220V AC
50Hz
<5* g
- BR1 +
IC3 7805
+
p.
C1
COM
1000m
25V
BR1 = 1A BRIDGE
-LED1
RECTIFIER
C3
GND
M1 = MOTOR RL1 = 12V, IC/O RELAY
S2 = TACTILE SWITCH
R5
100k
R4
10k
40
10p
16V
S2
1N4007
31
P3.2
R3
BC548
PIPE
Xtal
=11 0592MHz
10k
1 16
C5
=L_
0.1M
f VNAV C6 T
47005, 1 LED2
R6 470Q
Ml
R2
BC548
220V AC
0.1m
IC2
MAX232
T1QUT
50HZ
DB9
2 (RX)
3 (TX)|
Xtal
-Or
C8
22p
BOREWELL
R1IN
GSM
MODULE
ANTENNA
Microcontroller-Based Projects
137
his mobile phone. The system is simple, reliable, portable and affordable.
Circuit description
Fig. 1 shows the block diagram of the GSMbased borewell water-level monitoring system. Fig. 2 shows the complete circuit. It comprises the power supply section, water-level sensor circuit, microcontroller, MAX232 driver, relay driver and GSM modem. The GSM board has a valid SIM card with sufficient recharge amount to make outgoing calls. Hie circuit is powered by regulated 5V DC. The 220V, 50Hz AC mains is stepped down by transformer XI to deliver a secondary output of 12V, 250 mA. The trans
TABLE 1
Mobile
Remarks
Full
Empty
Above point A
Below point A
On
Off
On
Off
SMS operation to turn on/off the motor SMS operation not allowed
by bridge rectifier BR1, filtered by capacitor CI and regulated by IC 7805 (IC3). Capacitor C2 by passes ripples from the regulated supply. LED1 acts as the power-'on' in
dicator. Resistor R1 lim its the current through
TABLE II
SMS
SIM interface
Single supply voltage of 3.4V-4.5V Typical power consumption in SLEEP mode: 2.5 mA > SIM300 tri-band (EGSM 900, DCS 1800, PCS 1900). The band can be set by AT COMMAND, and default band is EGSM 900 and DCS 1800 > Compliant to GSM Phase 2/2+ > MT, M0, CB, text and PDU mode > SMS storage: SIM card > Supports transmission of SMS alternatively over CSD or GPRS. User can choose the preferred mode Supported SIM card: 1.8V, 3V Connected via a 50-ohm antenna connector or antenna pad > Serial port 1: Seven lines on the serial port interface > Serial port 1 can be used for CSD FAX, GPRS and sending AT command of controlling module > Serial port 1 can use multiplexing function, but you cannot use serial port 2 at the same time > Autobauding supports baud rate of 1200 to 115,200 bps > Serial port 2: Two lines on serial port interface, /TXD and /RXD > Serial port 2 used only for transmitting AT command
138
When water in the borewell fills to the threshold level, it is sensed by sen sor A and you get a call on your mobile phone. Now you can turn the motor 'on' by sending the SMS "motorll on" from your mobile phone to the SIM number in the GSM modem. You can also turn the motor 'off' by sending the SMS "mo torll off". Sensor A is connected to the base of transistor T1 (BC548). When there is a high voltage at the base,Tl conducts and a low voltage is available at its collector. This low signal is fed to pin 12 (port pin p3.2) of the MCU. Similarly, for a low voltage input at the base, T1 stops conducting and a high voltage signal is available at its collector. So pin 12 of the Fig' 4:An ocfua/"s'ze' Reside PCB for the GSM-based borewellwater-level MCU gets a high signal input. The high mnnitnrirn cv/cfpm . . . or low voltage signal at pin 12 is moni tored and processed by the program in X T AL = 11.0592MHz SENS0 ! the MCU, and decision to turn the mo 1=1 BD B /X\ C9 22p tor 'off' taken when the water level dips below sensor A. CI Pin 3 (port pin pi.2) of the MCU is lOOOu the output pin. It is connected to relaydriver transistor T2 (BC548) and LED2. T2 drives relay RL1, which, in turn, acti vates the motor. LED2 glows to indicate T10UT B|(?X Z O rx riin the motor-'on status. u|gGND When water level in the borewell from gsm dips below sensor A, the conducting path between sensors A and B breaks. Hence a signal is received by the mi crocontroller. The microcontroller turns the running motor 'off' and makes a call to the user's cell phone through a GSM modem to indicate that the water level Fig.5: Component layout for the PCB is too low to pump the water and the motor has been switched off. In this way, the motor is protected from airlocks and burnouts due to dry running. The status of motor, water level and LED2 are shown in Table I. The GSM mo dem used in this project is SIM300 V7.03 (refer Fig. 3). Its key features are Fig. 6:Author's prototype listed in Table II.
Microcontroller-Based Projects
139
TABLE III
List of Commands
Command
AT
ATEO
AT+CNMI
The GSM module is a specialised type of modem which accepts a SIM card and operates on a subscriber's mobile number over a network,just Check whether the serial interface like a cellular phone. Basically, it is a cellphone without display. Mo dem SIM300 is a triband GSM/GPRS engine that works on EGSM and GSM modem are working Turn echo 'off' when there is less 900MHz, DCS 1800MHz and PCS 1900MHz frequencies. GSM modem is RS232-logic-level compatible, i.e., it takes -3V to -15V traffic on serial line as logic 'high' and +3V to +15V as logic 'low'. MAX 232 is used to convert Display the new incoming SMS TTL RS232 logic level and vice versa. I Ience MAX232 is a voltage-level into Select SMS memory converter used between the microcontroller and the GSM board. SMS string format how they are Hie signal at pin 11 of the microcontroller is sent to the GSM mo compressed dem through pin 11 of MAX232. Ibis signal is received at Pin 2 (RX) Read the new message from a of the GSM modem. The GSM modem transmits the signal from Pin given memory location 3 (TX) to the microcontroller through MAX232, which is received at Send message to a given recipient pin 10 of 1C1.
Description
Delete message
PARTS LIST
Semiconductors: IC1 IC2 IC3 BR1
Software program
The software program is written in 'C' language and compiled using Keil software. The AT commands listed in Table III are used in the code to receive the mobile signal. The hex code of the program is burnt into the MCU using Flash Magic software.
- AT89C51 microcontroller
- MAX232 driver - 7805, 5V regulator 1A bridge rectifier - BC548 npn transistor - 5mm light-emitting diode - 1N4007 rectifier diode
ij
T1.T2
LED1, LED2 D1
An actual-size, single-side PCB layout of the GSM-based borewell waterlevel monitoring system is shown in Fig.4 and its component layout in Fig. 5. For testing the circuit, proceed as follows: 1. After assembling all the components on the PCB, connect TX and RX pins of the GSM modem to pins 13 and 14 of MAX232, re Capacitors: - 1000|iF, 25V electrolytic CI spectively. Insert a valid SIM in the card holder of the GSM modem. - 0.1|iF ceramic C2, C4-C7 2. Connect ground pin of the GSM modem to the ground rail of C3 - lOpF, 16V electrolytic the circuit. - 22pF ceramic C8, C9 3. Use two single-strand (hook-up) wires as sensor A and sensor B. (In Miscellaneous the actual application, use of steel rods as sensors is recommended.) Hang - 220V AC primary to 12V, XI the sensors into a bucket or mug such that sensor A is above sensor B. 250mA secondary transformer 4. Pour water into the bucket until the water level reaches sensor A. - 12V, lC/O relay RL1 5. Now switch on the circuit. You should get a call on your mobile SI - Tactile switch This indicates that you can turn the motor 'on.' phone. - 11.0592MHz crystal Send SMS "motorll on" from any mobile phone to the SIM in 6. - SIM300 V7.03 modem GSM modem the Two water-level steel to turn the motor 'on'. You can also turn the motor 'off' by sensor modem rods sending "motorl 1 off" message from any mobile phone. 7. Now remove water from the bucket until the water level in the bucket dips below sensor A. The motor should automatically switch off and you should receive a call from the modem simultaneously alerting you that the borewell (bucket in this case) is empty and the motor has been switched off. After testing the above steps, you can install the system in the borewell by inserting sensors A and B into the pipe with sensor B placed at the bottom of the borewell as shown in the circuit. Your borewell monitoring system is now ready for use. The author's prototype is shown in Fig. 6.
Download source code: http://www.efymag.com/admin/issuepdf/GSM%20Based%20Borewell%20Water%20 Level%20Monitor_Mayl2.zip
Resistors (all '//-watt, per cent carbon): R1 - 1-kilo-ohm R2, R6 - 470-ohm R3, R4 - 10-kilo-ohm - 100-kilo-ohm R5
140
ROBIN CHALANA
Using
5V DC
POWER
VR1
10K
level of an overhead tank that is placed up to 30 me tres away The system fea tures an RF transmitterreceiver pair, doing away with the need to run wires from the roof to ground. The transmitter is placed near the tank with sensors inside the tank to moni tor the level of water. The sensed level is streamed wirelessly through the RF transmitter. This is received by the receiver unit placed
SUPPLY
PORT 1
o PORTO
o
o
P1.0-P1 7
P0.0-P0.7
o
LU
o o
MAX232
o
RST
CONNECTOR
o o o o o o
PORT 3
P89V51RD2
o o
P2 0-P2.7
16x2 LCD
P3.0-P3.7
PORT 2
remotely and decoded to indicate the water level on an LCD. It also has a buzzer that beeps when the water level drops be low one-fourth level or when the tank is about to overflow. When the tank is quarter-, half- or threequarters-full, the percent age of the water level is flashed on the LCD. The system is developed using an EFY-KnS 8051 devel opment board which is available from EFY asso
ciates
Xtali
11.0592MHz
_T33p
Fig. 1: Block diagram of EFY-KnS 8051 development board
C3
5V
18
C = 50% D = 25%
B = 75%
= 100%
13
15
0SC1
.
16
17
R5 750K
ANTENNA
BC547
1?
IC1 HT12E
11
EC57
OSC2
Vcc
Dm
Dtxr
433MHz1
3
GND
TX1
Kits'n'Spares (KnS)
10
for Rs 500.
[COWL
R1 ? R2
10K "> 10K
14
X=5V
OVERHEAD TANK (OHT)
TE
GND
Microcontroller-Based Projects
141
ANTENNA
gram of EFY-KnS 8051 development board. It consists of a 40-pin IC socket, four 8-pin bergstrip male connectors, 9-pin serial COM port
connector, MAX232 driver, 16-pin connector for
RX1 433MHz
1
6
HT12D
R6, 33K
EFY-KnS 8051
DEVELOPMENT BOARD
0
Fig. 3:Testing of receiver circuit using development board
the LCD and 5 V regulator. Some other features of the board include: 1. Power LED with an on/off switch 2. Reset LED with a reset switch. This LED is also used as a programming-status indicator. 3. A 5 -pin male connector (not shown here) for 5V DC supply. The voltage is regulated to 5V using voltage regulator IC 7805. 4. Eleven jumper wires (16cm each) for con necting the LCD Data and control pins of the LCD are not permanently connected to the microcontroller. So you can use any of the controller ports to connect the LCD using jumper wires.
Circuit description
erates
Fig. 2 shows the circuit of the transmitter. It op off 5V DC and consists of a sensor assem bly, encoder HT12E (ICl) and RF transmitter module (TX1). The sensor assembly consists of
four BC547 npn transis tors (Tl through T4), each connected to a water-level-sensor metal strip cor responding to one of the four water levels25 per cent, 50 per cent, 75 per cent and 100 per cent. The
sensors are non-corrosive
4-bit Code, Message and Buzzer Status for Different Water Levels
Water level
Less than 25 per cent 25 per cent 50 per cent 75 per cent 100 per cent
Message displayed
Buzzer status
Buzzer rings for two minutes
on the LCD
Water level low Water level 25 per cent Water level 50 per cent Water level 75 per cent Water level 100 per cent
stainless-steel metal strips. 1110 The receiver circuit too Buzzer rings for two minutes 1111 operates off 5V DC. It is assembled and tested on EFY-KnS 8051 development board as shown in Fig. 3. Mount the buzzer (PZ1), HT12D and RX1 on a generalpurpose PCB or breadboard. Connect decoder HT12D (IC2), piezobuzzer (PZ1) and LCD1 to the development board. The output of the RF receiver (RX1) is fed to data input D (pin 14) of decoder HT12D. A red LED (LED1) is connected to VT pin (pin 17) of the decoder through R7. Data is processed by P89V51RD2 microcontroller mounted on the development board.The program is writ ten in Assembly language and assembled using ASM51 cross-assembler. Burn the code into the microcontroller using the on-board RS-232 serial COM port.
1100
How it works?
The water level in the tank is sensed by the sensor assembly, which is connected to 4-bit data lines (AD8 through AD11) of encoder HT12E (ICl) through transistors. Depending on the water level in the tank, BC547 transistors (Tl through T4) conduct to generate a 4-bit code (refer the table). The 4-bit code so generated is encoded by en142
Wireless Water-Level Indicator
coder HT12E.The encoded data is fed to pin 2 of RF transmitter TX1, which transmits it serially at 433 MHz through the antenna connected to its pin l.The transmission range ofTXl module is about 30 metres. The 4-bit signal from the transmitter is received by the antenna of the RF receiver (RX1). LED1 glows to indicate that a valid signal is received. The 4-bit output from decoder HT12D is processed by the microcontroller to generate an 8-bit code. The microcontroller's output is fed to data input lines of LCD1, which, in turn, shows the water level in percentage. At an intermediate water level, say, 25 per cent of the tank capacity, LCD1 shows the message "Water level 25 per cent. When the tank is full, the buzzer rings for two minutes, while LCD1 shows "Water level 100 per cent. The 4-bit code, message and buzzer status for different water levels are shown in the table.
PARTS LIST
Semiconductors:
-I ICl IT12E encoder IC2 - HT12D decodcr T1-T5 - BC547 npn transistor - 5mm light-emitting diode LED1 LCDl - 16x2 line LCD module TX1, RX1 - 433MHz RF module Resistors (all 'A-vMtt, 5per cent carbon): R1-R4, R8 - 10-kilo-ohm - 750-kilo-ohm R5 R6 - 33-kilo-ohm - 330-ohm R7
R9 VR1
Capacitors:
CI
C2.C3
Software
reset, read-write and enable pins of LCDl.Then LCDl shows 'EFY'in
Miscellaneous:
TAI.l
SI
11.0592MHz crystal
In the program, first LCDl and buzzer are initialised followed by the PZ1
- Push-to-on switch
- Piezobuzzer - EFY-KnS 8051 development board
Board
the first line and 'Water Level' in the second line. The program further enters a loop to check which of the five values is trueless than 25 per cent, 25 per cent, 50 per cent, 75 per cent or 100 per cent. The percentage is displayed in the second line after 'Water Level.'The piezobuzzer is timed to sound for two minutes for the 100 per cent full condition and less than 25 per cent full condition. This circuit can also be modified to work as a water-level controller system. When the water level is low, the microcontroller can be programmed to start the motor pump. When the tank is full, the same can be made to stop the motor. Downloadsource code: http://www.efymag.com/admin/issuepdf/Wireless%20Water%20Level%201ndicator.zip
Microcontroller-Based Projects
143
ATISH GUPTA
Time
an
management is very important in today's fast-paced life. An alarm clock helps you manage your time effectively by alerting you of appointments or other important tasks. Here we have described a microcontroller-based digital alarm clock.The time and alarm can be cus tomised by the user, and are shown on the liquid crystal display (LCD) of the system.
Circuit description
Fig. 1 shows the circuit of the microcontroller-based digital alarm clock. It comprises microcontroller AT89C51, LCD module, regulator 7805 and a few discrete components. Microcontroller AT89C51 is a low-power, high-performance CMOS 8-bit microcomputer with 4 kB of Flash programmable and erasable read-only memory (PEROM). It has the following standard features: 4 kB of Flash, 128 bytes of RAM, 32 I/O lines, two 16-bit timers/counters, five-vector two-level interrupt architecture, a full-duplex serial port, and on-chip oscillator and clock circuitry. In addition, the AT89C51 is designed with static logic for operation down to zero frequency and supports two software-selectable power-saving modes.The idle mode stops the CPU while allowing the RAM, timers/counters, serial port and interrupt system to continue functioning. The power-down mode saves the RAM contents but freezes the oscillator, disabling all other chip
functions until the next hardware reset. The system clock also plays a significant role in operation of the microcontroller. An 11.0592MHz quartz
|out
IC2 7805
P1.7
C6 _L
RNW1=10K
R7 R6
0.1M -p
AO
LED1
P1.6
28
RST P2.7
P2.6
R4
10K
10K
10K
10K
PZ1
P1EZ0
BUZZER
D7
D5
P1.4
D6
IC1
VC4 1000m
35V
AT89C51
P1.1
P2.5
P1.0
P3.5
P2.4
2.2K
D4
D3
P3.6
P3.3
P3.7
D2
AWvBC547
RS
DO D1 D2 D3 D4 D5 D6 D7
VR1 10K
LCD MODULE
XTAL
11 0592MHz
10K
S2
S3
S5
144
START
INITIALISE TIMER
DIGITAL CLOCK
RUNNING
NO
ALARM
SWITCH PRESSED
YES
ENTER ALARM TIME
ACTIVATE ALARM
MICROCONTROLLER
MATCHES CURRENT AND ALARM TIME
NO
TIME
MATCH
YES
BUZZER ON
NO
ALARM
SWITCH
PRESSED
YES
STOP
Fig.2: Flowchart
crystal is connected to pins 18 and 19, to provide basic clock to the mi crocontroller. Power-on reset is provided by electrolytic capacitor C3 and resistor Rl. Switch SI is used for manual reset. The clock time is shown on the LCD. Port pins P1.0 through PI.7 of the microcontroller are connected to data pins DO through D7 of the LCD, respectively. Port pins P3.7, P3.6 and P3.5 are connected to register-select RS, read-write R/W and enable E of the LCD, respectively. Port pins P1.0 through PI.7 are pulled high by resistor network RNW1, while port pins P3.5 through P3.7 are pulled high by resistors R6 through R8, respectively. All the data is sent to the LCD in ASCII format for display. Only the commands are sent in hex form to the LCD. Register-select RS signal is used to distinguish between data (RS=1) and command (RS=0). Using preset VR1 you can control the contrast of the LCD. Switch on the power to the system and enter the current time with the help of switches S2 through S4. 'Up,' 'down' and 'enter' switches are connected to pins P2.7, P2.6 and P2.5 of microcontroller AT89C51, re spectively. Using 'up' switch, you can increase the numeral values of hours, minutes and seconds, respectively, for time or alarm setting, while 'Down' switch can be used to decrease the values. Hie current time or alarm time set using up/down switches is accepted on pressing 'enter'switch. The time is set and displayed in 12-hour (a.m./p.m. format). Using 'alarm' switch connected to pin P2.4 of the microcontroller you can activate or deactivate the alarm function. When the PARTS LIST alarm is activated, enter the Semiconductors: new alarm time in the same - AT89C51 microcontroller IC1 - 7805, 5V regulator 1C2 way as the current time. The - BC547 npn transistor Tl message "Alarm Active" is D1-D7 - 1N4007 rectifier diode displayed on the second line of - 5mm LED LED1 the LCD with current running Resistors (all '/4-watt, 5% carbon, unless time on first line of the LCD. specified): Every second, current time is R1-R8 - 10-kilo-ohm with the alarm time. compared R9 - 2.2-kilo-ohm When time matches 330-ohm R10 current - 15-ohrn, 3-watt Rll with alarm time, pin P3.3 of RNW1 - 10-kilo-ohm resistor the microcontroller goes high network drive the transistor into to VR1 - 10-kilo-ohm preset saturation. Piezobuzzer PZ1 Capacitors: sounds until you press the C1,C2 - 33pF ceramic switch (S5) to deactivate alarm C3 - lOpF, 16V electrolytic C4 - lOOOpF, 35V electrolytic the alarm. C5 - 330|jF, 25V electrolytic The 230V, 50Hz AC mains C6 - 0.1pF ceramic is stepped down by transformer Miscellaneous: XI to deliver secondary output XI - 230V AC primary to 12V, of 12V, 500 mA. The trans 500mA secondary former output is rectified by transformer a full-wave rectifier compris S1-S5 - Push-to-on tacktile switch 11.0592MHz crystal ing diodes D1 through D4, X. PZ1 - Piezo-electric buzzer filtered by capacitor C4 and LCD module - 16x2 line LCD regulated by IC 7805 (IC2). A
145
Microcontroller-Based Projects
9V rechargeable battery is used for battery backup. The battery is charged through diode D6. Diode D7 is reverse-biased when the supply is present. The battery powers regulator 7805 to provide regulated 5V sup ply for the circuit in absence of mains supply. Capacitor C6 bypasses the ripples, if any, in the regulated supply. LED1 acts as the power indicator and resistor RIO limits the current through LED1.
a
Fig. 3: An actual-size, single-side PCB for the microcontroller-based digital alarm clock
Software
The software program is written in Assembly language and as sembled using cross-assembler ASM51. Burn the generated Intel hex code into the micro controller using a suitable pro grammer. The software works
as
C910B
O
Oj LEDlO-IOOwO POUeT
D1-D7=1N4007
R2-R7=10K
330E:
R10.R3O
R5 Owv:;2 OO
''Mm' o o<
,o>
_Rr
BflBBBBBBBBOBflBBflflBBfl
Fig. 2.
When the microcontroller 9U AC BBBBOSBOBBBBOBBBOOBB XTAL l)fe0 starts on pressing reset switch sYVNAXK 3 V J 6 cu lOu 0910B Si, it initialises the stack point UP! 10*= ~ 2. 2K +\ + \ PI 1 Of slLO er and the LCD to display the RESET-lOOOu ) O O RNU1 10K message. The stack pointer, as a part of the RAM, stores 102 the return address of the main MODULE LCD niO BATT. 96 a 1 1DK nil BCb-t/ l0K PZl DIGITAL ALARM CLOCK from subroutines. program To initialise the LCD, the microcontroller sends a set of Fig. 4: Component layout for the PCB commands to the LCD. The lcd_initialize subroutine in the software is used to initialise the LCD. The delays for the LCD are provided by nested loops instead of the timer. These delays are used to provide timing delays at various locations of the soft ware. The values for the loops are calculated according to the crystal frequency and the machine cycles taken by the respective instructions. Initially, set the current time using switches.The internal timers of the microcontroller are used to provide onesecond delay for the digital clock. The hex values fed to timer- 1registers TH1 and TL1 make timer- 1provide a delay of 10ms according to 11.0592MHz crystal. With some internal software logic, one-second delay is formed using 10ms delay of timer- 1.Timer- 1is configured in 16-bit mode for the desired operations through TMOD register. Thus current time is updated every second. The software of the digital clock is interrupt-based. Whenever timer- 1overflows, an interrupt is generated by the microcontroller. This interrupt is provided by the interrupt service routine at vector 001BH. The jump com mand written at this vector initiates the intr_service routine. All the functioning of the digital clock with alarm is controlled by this service routine. By default, all the ports act as output. The software makes port pins P2.4 through P2.7 of the microcontroller
___
raai
146
act as input. The software also handles the functioning of all the switchesup, down, enter and alarm. Pooling and identification of switches and limits for up and down too are provided by the software.
Microcontroller-Based Projects
147
ere is a microcontroller-based wireless equipment controller that can switch on or switch off up to four devices at a desired time interval set by the user in the transmitter. The devices can be controlled remotely from a distance of up to 30 metres from the transmitter. In the transmitter, an LCD mod ule is used to show the device numbers and preset control time for RF Module Specifications the devices (00 to 99 seconds). Concepts of wireless RF communica tion and automation with AT89C51 microcontroller are used here. Value Parameter The system is small, simple, cost-effective and good for wireless Frequency of operation 434 MHz control of home appliances or industrial instrumentation.
Block diagram
HT12E ENCODER
AT89C51 MICROCONTROLER
The system comprises a transmitter and a receiver as described below. Transmitter section. Fig. 1 shows the block dia gram of the transmitter section. Four pushbutton switches (Si through S4) are used as inputs to select the devices and set the time out in the transmitter section. These are designated as TRX-434 up, down, enter and run keys, respectively. The time RF out data is transferred over the RF wireless link to the TRANSMITTER
MODULE
RF OUT
receiver section.
S3
The 8-bit AT89C51 microcontroller is the main controlling part of the transmitter section. It is connected to the LCD module, input switches and encoder IC (HT12E). The device control program is stored in the memory of the microcontroller to control the devices as per the time-out settings done through input switches Si through S4.
A two-line, 16-character LCD module shows the of the main program that is running inside the microcontroller. The HT12E is an 18-pin DIP package encoder IC that encodes 4-bit data and sends it to TRX-434 RF transmitter module. The TRX-434 RF transmitter module uses a digital modulation technique called amplitude-shift keying (ASK) or on-off keying. In this technique, whenever logic '1' is to be sent, it is modulated with carrier signal (434MHz).This modulated signal is then transmitted through the antenna. The waveforms in Fig. 2 depict the ASK concept. The main specifications of the RF module are shown in the table. Receiver section. Fig. 3 shows the block diagram
status
SIGNAL
1
ON
OFF
yy
Fig. 2:ASK concept for the RF transmitter module
ON DIGITAL DATA
OFF
ON
\n
148
of the receiver section. The 12V DC supply, used along with a 5V regulator, can be provided by a 12V battery or power adaptor. The RX-434 radio receiver module receives the ASK signal from TRX-434.The HT12D decoder demodulates the received address and data bits. IC CD4519 is a quadruple two-input multiplexer that selects the appropriate data bits to control the devices. The ULN 2003 relay driver consists of seven npn Darlington pairs that feature high-voltage outputs with common-cathode clamp diodes for switching the inductive loads. The collector-current rating of a single Dar lington pair is 500 mA.
7805 5V DC REGULATOR
12V DC
POWER
Circuit description
Transmitter circuit. Fig. 4 shows the transmitter circuit. The microcon troller reads the input data from switches SI through S4 at its port-2 pins 21 through 24 and displays it on the LCD. Port 3 provides read data to the encoder IC HT12E at pins 10 through 13. The microcontroller is pro grammed to control input
5
SUPPLY
RX-434
RF
RECEIVER RF IN MODULE
HT12D w DECODER
CD4519
MULTIPLEXER
RELAY-4 (DEVICE-4)
RELAY-3
(DEVICE-3)
RELAY-2 (DEVICE-2)
RELAY-1 (DEVICE-1)
LED2k
Vcc
TRX-434
< z
,1K
-O
TE
GND
R3
14
680K
DATA Vcc_
ANT
+5 Vcc
17
Vcc
18
1
15
|
I D3
R8 R9
R11
r
D7
D5 C
R4
R5 R6 R7
P0.1
POP
Vcc
EA/Vpp
P0.5
A2
iLEDt
_A3 4 5 _A 6 _Ag_ 7
IC1 13 HT12E12
11
AD11
AD10
i
10
9
D1-D9 = 1N4148
P0.7
R4-ni1=10K=RNW1 S1-S5=TACTILE SWITCH
GND
PI .5 PI .4 PI .3
P1.2 P1.1
CM
O
P2.0
P2.1 P2.2
isa
a
SI
S2
S5
P1.0
0221
Ea <
S3
S4
P3.4
P3.3 P3 7
P2.3
RST
C1 10p. 16V
D7
14
D6 D5 D4
13
12
D3 02 D1
10 9 8
DO
RyW
RS
19
20
GND
R12-R15=4.7K
Vcc
VR1
11
1.2K
1
R16
LCD1
D9
R12 R13
47K
16x2
16
eeh
C2
27p
C3
27p
1
149
Microcontroller-Based Projects
LED3 -C
<
*-
<4mR17
1K
5V
+12V
RX-434
C\J CO Tt
in CD N CO
[15
Vcc
_A0
18
14
T C5
OUT
IC3 7805
IN
tl_
-X
IC4 16 HT12D/ 15
17 VT R18, 47K
D10 1N4148
-1-
0.1M
GND
-p 1000M 25V
C4
C6
_A1 A2 A3 A4
_A5 _A6 A7
Hs.
B3
9
X
'
470n
-f
JS
JUMPER
R20-R24=1K
COM
WW|
D10 D9
8
SM5172 13 D11
12
B2
B1
14 16
Vcc
16
1j
-w
R21
R20
11
10
WW
Fig. 5: Receiver circuit
R19, 47K
B0 A2 A1 AO A3
03 13 IC5 02 CD4519 12 01 11
2 3
IC6
10
OO
4 5
ULN2003h
13
12
-AWV-f"
DOi
R22
'
/
LED4
WaHIRL1
GND
RL4
LED8
d_START
1r INITIALISE LCD
and output data. When the pushbutton switches (Si through S4) are open, logic '0'is constantly fed to the respective port pins of the microcontroller.When any of the buttons is pressed, logic '1' is fed to the respective port pin of
the microcontroller.
Hie device control program stored in the memory of the microcon troller activates and executes as per the functions defined in the program * STARTUP MESSAGE for respective input switches. THE FOR SYSTEM Data inputs AD8 through AD11 (pins 10 through 13) of HT12E are connected to the microcontroller. Pins 1 through 8 (AO through A7) of the IC are address inputs. Shorting the address pins using switches MESSAGE to either Vcc or Gnd enables different address selections for data trans TIME-OUT? mission. Here we have connected them to 5V. Since address pins are connected to 5V, the address is set to 255d (in decimal). If you were to connect all the address pins to ground, the address would be OOOd. Thus there are 256 possible addresses available. So you can set up switches to WAIT FOR KEY PRESS TO one or more of the encoder address pins. control TRANSMIT DATA Pin 14 is a transmit-enable (TE) input pin. The encoder will send data only when pin 14 is connected to ground. Whenever a button is pressed, logic '0' is sent to this pin through the microcontroller, thus TRANSMIT activating it and enabling transmission. DATA? Pin 17 is the data-out (D ,u[) pin that sends a serial stream of pulses containing the address and data. It is connected to the data input pin of the TRX RF module. STOP The time-out control is set using input keys SI through S4 to turn on/off the devices at predetermined time. The default time for all the Fig. 6: Software flow-chart devices is '00' seconds. So using 'up' key you can increment time by one second, and using 'down' key you can decrement time by one second down. At the same time, the LCD module shows the current status of increments and decrements.
r
150
nniiiiii! y||St
r
081OB
Fig. 7: An actual-size, single-side PCB layout of transmitter circuit for wireless equipment control
When the time-out for a device is set, press 'ent' key so that the program control transfers to the next device for time-out settings. In the same way, the remaining three time-out settings must be done before pressing 'run' key. When 'run' key is pressed, it executes the device control program subroutine in the microcontroller and the program automatically collects the time out information entered by the user and sends the processed data to encoder IC HT12E. The encoder IC sends the data to Dh (pin 2) of the RF transmitter module.The data is transmitted by the TRX-434 module to the receiver section through the antenna. Receiver circuit. Fig. 5 shows the receiver circuit. The RF receiver (RX-434) module can receive the signal transmitted by the transmitter from a distance of up to 9 metres (30 feet). The range can be increased up to 30 metres using a
C2
27p
C3
H. 0592MHz
loooooooooooooooH
D1 -D9=l N4148
C 1 6X2)
_ 1_;
/
AT89C51
BOOOOOOOOOOOBOOOOOOO
Ri4R12-R:5=1.7KLE;D2 QfiTfl
SI UP
SI RUN
good antenna. D pin of RX-434 RF module is connected * to Dhi pin of decoder IC HT12D (IC4). D. pin of IC4 receives address and data bits serially from the RF module. Decoder IC4 separates data and address from the received informa tion. It accepts data only if the received address matches with the address assigned to encoder ICl (HT12E). We have used '1111' as the per
out
manent
on the encoder and decoder ICs must match for the data to be valid. HT12E p The HT12D decoder receives serial addresses J2 0 2 D0UN and data from the encoder that are transmitted S3 ENT TRX-UIRELESS EQPT CONTROL by a carrier signal over RF medium. The decoder compares the serial input data three times con Fig. 8: Component layout for the PCB in Fig. 7 tinuously with its local addresses. If no error or unmatched codes are found, the input data codes are decoded and transferred to the output pins. VT pin (valid transmission) goes high to indicate a valid transmis sion. The HT12D provides four latch-type data pins whose data remains unchanged until new data is received. Data pins D8 through Dll (pins 10 through 13) of the decoder send 4-bit data to CD4519 multiplexer IC5. CD4519 multiplexer. This IC provides four multiplexing circuits with common select inputs (SA and SB); each circuit contains two inputs (An, Bn) and one output (On). It may be used to select 4-bit information from one of the two sources. There are eight input lines (AO through A3 and B0 through B3), of which four (AO through A3) are per manently connected to Vcc through resistor R19, while the rest four (B0 through B3) are connected to the data output lines of the decoder (IC4). The select inputs can be connected to either Vcc or VT pin (pin 17) for latch or momentary mode-selection section. Jumper switch (JS) is used to select between latch and momentary operation. When latch mode is selected,
IC0NT.
'.W daaaaaaaa
02O
..
UR1 47K
DlO-KI-
mo
LEOl
through 8 of IC4 are address pins and therefore 256 possible addresses are available. The address
Microcontroller-Based Projects
151
data present at the output pins is latched, i.e., they remain the same and the respective relay energises until the next change is made in the mode selection. When momentary mode is selected, data present at the output pins is available as long as VT pin remains active-high. As soon as VT pin becomes active-low, the respective relay de-energises. The latched output data from multiplexer CD4519 is fed to relay driver IC ULN2003, to control up to four devices through the relays (RL1 through RL4). VT pin is connected to LED4 through IC6 to indicate the status of VT signal when it is active-high.
Software program
The software flowchart programmed in the microcontroller of the transmitter section is shown in Fig. 6. It is writ ten in Assembly language and compiled using ASM51 software to generate the hex code. The hex program can be burnt into the AT89C51 microcontroller by using any standard programmer available in the market.We have used TopView programmer from Frontline Electronics to program the microcontroller. The software program is designed to accept the input from the user as well as control the devices. It identifies the key pressed and displays PARTS LIST the key code on the LCD module. Sem iconiluctors. In the program, the LCD module is initialised first. As soon as the IC1 - HT12E encoder time-out is set, all the four devices turn on initially, then a particular IC2 AT89C51 microcontroller - 7805 5V regulator IC3 device turns off at preset time. In this project, the time-out range is 00 - HT12D/SM5172 decoder IC4 to 99 seconds, which can be easily modified to extend the time duration
IC5 IC6 TRX-434
- CD4519 multiplexer - ULN2003 relay driver - 434MHz RF transmitter module - 434MHz RF receiver
RX-434
module
LED1-LED8 D1-D10
- 5mm light-emitting diode - 1N4148 signal diode
OS
0810B
RX-434
B 470n
R12-R15 R16
- 1.2-kilo-ohm
R18.R19
VR1
Fig. 9: An actual-size, single-side PCB layout of receiver circuit for wireless eguipment control
Capacitors:
CI
C2.C3
C4 C5 C6
- lOOOpF, 25V electrolytic - 0.1pF ceramic - 470nF ceramic - 16*2 line LCD display - Tactile switches
o
>ik
C0N2
ANT. ooo
->i-Opouer
/'0C5
oooo
R20-R24=1K
IC4
1N4
& LED3
JUMPED
R2l0v-0
R2
5U
12U
RL4|
R18
JS
- 11.0592MHz crystal - Jumper switch - Antenna - 4x2-pin berg strip male and
female connectors - 12V DC supply - 5V DC supply
47K
RL3inioi
R,
?|P|Q|
o y. cs -St-C4,
lOOOu
iu
ai.
iMIOl
R19
47K
.
oIC5
RX-UIIRELESS EQP
CONTROL
IC6
152
in the delay subroutine of Assembly code. Port 0 is configured as output port and interfaced with the RF module through encoder IC1. Port 1is used for LCD interface and port 2 is used for the input from push-to-on switches.
Circuit operation
When the system is switched on, the startup message "press any key" appears on the LCD screen. When any key is pressed by the user, the LCD displays the message "to set time out press ent!". Pressing'ent'key displays the following messages on the LCD with a cursor blinking near the first device 'D1_T':
D1_T= D3_T= D2_T= D4_T=
Use 'up' and 'down' keys to set the time for controlling the devices.The set time for each device on the LCD
screen looks like this:
Dl_T=10 D2_T=20 D4_T=40 D3_T=30 Now press 'ent' key followed by 'run key. A device control subroutine executes and sends the data to the RF module, which transmits the data through ANT antenna. You can set maximum of 99 seconds as the control time for the device. If you set it to 00, a particular device is turned on for infinite time.
Construction
An actual-size, single-side PCB layout of the transmitter for wireless equipment control using microcontroller is shown in Fig. 7 and its component layout in Fig. 8. The actual-size, single-side PCB layout for the receiver circuit is shown in Fig. 9 and its component layout in Fig. 10.
Downloadsource code: http://www.efymag.com/admin/issuepdfAVireless%20Equipment%20Control.zip
Microcontroller-Based Projects
153
Industrial Applications
C
supply.
ontrollable triggering circuits are often needed to control the output voltage of SCR-/triac-based convert ers. An SCR-/triac-based converter can handle DC voltages as high as 300V, which can be obtained by direct rectification of the mains AC voltage. LOAD | The output voltage of such
a converter can
be con
SCR-BASED CONVERTER
TRIGPULSE 2
TRiGPULSE 1
ISOLATION CIRCUIT
firing/triggering voltage to the SCRs during each half cycle of the input mains
In the present circuit, the firing angle of SCRs is manually controllable
+VE
HALF
.
MICRCONTROLLER
LED DISPLAY
VE
HALF
'
AC through two pushbut 230 V FIRING ANGLE CONTROL ton switches, however the same could be changed to programmable con- Fig. 1:Functionalblock diagram ofthe microcontroller-based singletrol by making use of phase SCR-based trigger controller the feedback obtained by sampling the output voltage across the load. This would need addition of a sampling-cum-feedback circuit and corresponding changes in the software.
The principle
The phase control of the firing angle is referenced to zero-crossing point of each half of the input 50Hz AC mains waveform. A pulse is generated at zero-crossing instant of each half cycle. The duration of half cycle for 50Hz mains is 10 ms (corresponding to 180 traverse time). By delaying the triggering/firing instant of each of the two SCRs by a maximum duration of 10 ms with respect to the zero-crossing pulses, we can control the output of the converter as desired.
Circuit description
Fig. 1shows the functional block diagram of the microcontroller-based single-phase SCR-based trigger controller. Single-phase AC mains supply is connected to the SCR-based converter and zero-crossing detector blocks. The output pulses corresponding to zero-crossing points of both the positive and negative half cycles of mains 50Hz supply from the zero-crossing detector block are fed to the microcontroller. The delayed triggers from the micro controller after isolation via the isolation block are provided to the converter block for phase control of SCRs. The
Microcontroller-Based Projects
155
-W/VR31
33012
52
2P4N
CB E
BY127
- BY 127
230V AC MAINS
D8
2P4M
_i_SCR1 \2P4M
IC5 MQC3021
<>
T3
R29 2.2K
D1
O
R41
'
1 1tR37
p-|
<=a
10K
o
O
IC4 MQC3021
On
T4
2.2K <
3-R28
0+5V
X1 = 230V AC
PRIMARY TO
7.5V-0-7.5V. 500mA
SECONDARY
C6 0.1p
* 33012
R30
TRANSFORMER
D1-D7 = 1N4007
2.2K *
R32 ;
T1-T8 = BC548
R1
R10-R27 = 22012
>2.2KS2.2K 522K
05,
R5
>
R2
> R3
0.1pC8
20K"
:
14
PB5
24
LED1
11
10
WW*
8
PB2
PB1
WW WW WW
AO
A1 A2
A3
17
PAO
PA1 PA2
PA3
23
22
WW WW
|C3
IC1 NE556
PBO
IC2 PIC16F84 1
2
18
WW
WW
10
21 74LS154 9
20
19
PB3 13
PB7
PB6
eT
E0
WW
WW'
-WW- >
WW-"
ci : ioutL02 iou
12
18
16V
16V
2.2K<
Xtal
R8
>
R9
> 2.2K
A/VW>
-r-10M
C10 -L0.01u r
4MHz
C4 1 33P-
-ro.oiM
HH
i-WW
C5 33P
T2
BC548
& LED18
RNW2
output of the converter block is fed to the load. The firing-angle-control block increases or decreases the delay in generation of the triggering levels with respect to a preset (middle) position. The microcontroller additionally provides the information relating to trigger delay for display purposes. The complete schematic of the microcontroller-based triggering circuit for SCR phase control is shown in Fig. 2. The triggering waveforms for SCR1 and SCR2 are shown in Fig. 5. The complete circuit can be divided into zero-crossing detector, microcon-troller, trigger isolation, AC-to-DC converter and power supply sections. Zero-crossing detector section. This section comprises step-down transformer XI, diodes Dl through D4,
156
IN
OUT. 7805 3
2
COM
IC6
D6 1N4007
o
C12 0.1y
+5V
1000m
35V
C9 l
transistors T5 through PARTS LIST T8 and a few other Semiconductors: - NE556 dual timer passive components. IC1 - PIC 16F84 microcontroller While top halfof this IC2
circuit detects the
IC3
*L
GND
D7 1N4007
INPUT AT P1 AND P3
OUTPUT AT P2 AND P4
TRIGGER' * PULSE 1
zero-crossing point of half of the input signal, the bottom half section detects the zero-crossing point of the other half cycle. When the top side of XI secondary goes positive, tran sistor T8 conducts and its collector volt age falls. Capacitor C7 charges up to wards this low volt age almost instantly via diode D4 and hence no change is noticed at the base/ collector of
one
IC4.IC5
IC6 T1-T8 SCR1, SCR2
- MOC3021 opto-isolator
rectifier Dl- D7 - 1N4007 rectifier diode D8,D9 - BY127 rectifier diode LED1-LED18 - 5mm red LED
Resistors (all '/t-watt, 51 6 carbon):
R1,R2, R8,R9, R28, R29, R32, R33, R40, R41 - 2.2-kilo-ohm R3, R4, R6, R7 - 22-kilo-ohm R5 - 20-kilo-ohm RNW1 (R10-R18) RNW2
(R19-R27)
R30.R31
R34, R35 R36, R37 R38, R39 Capacitors: C1-C3 C4,C5 C6-C8, C12 C9
cio.cn
Miscellaneous:
transistor - 4MHz crystal Xtal T6. - 230V AC primary to 7.5VXI Towards 0-7.5V, 500mA secondary transformer the end of -S3 Push-to-on switch SI the half cy LOAD cle, the col lector voltage of transistor T8 rises towards the positive supply rail. Now diode D4 acts as almost open and the Fig. 5: Triggering waveforms for SCR 1 and SCR2 capacitor charges via resistor R37.Thus C7-R37 com bination acts as a differentiating network to produce about 1ms pulse at the collector ofT6 towards the end of the half cycle. Similar pulse is produced at the collector of transistor T5 towards the end of the next half cycle. The positive-going differentiated pulse at the base of transistors T6 and negative-going square-wave at their collectors are shown in Fig. 4. These zero-crossing pulses are used as reference for generation of delayed triggers by the microcontroller. Note that the step-down transformer is common to the zero-crossing detector section and the power supply
TRIGGERS PULSE 2
section. Microcontroller section. The microcontroller used here is PIC16F84 from Microchip. The 4MHz crystal con nected across its pins 15 and 16 provides the clock. The pins are used for input/output as follows: 1. PBO, PB3 (input): Used for sensing the output from increase and decrease pushbuttons. 2. PB1, PB2 (output): Used for triggering pulses for SCR1 and SCR2 (via the isolating section). 3. PB4, PB5 (input): From the zero-crossing section. 4. PB6, PB7 (output): Inhibit/enable signal for the 4:16 decoder and enable/inhibit signal for the phase-angleindicating LEDs (LED17 and LED18).
Microcontroller-Based Projects
157
mining
c
i:
Fig. 6:Actual-size, single-side PCB of the microcontroller-based single-phase SCR-based trigger controller
5. PAO, PAl, PA2, PA3 (all output): Used for the 4:16 decoder for phaseangle-indicating LEDs (LEDl to LED16). The microcontroller is programmed to detect the zero-crossing instants of the two halves of the mains input cycles as well as the signals received via pushbuttons labeled as 'Inc Angle' and 'Dec Angle.' After detect ing these signals, the microcontroller outputs properly delayed trigger levels to control the triggering/firing angle of the SCRs via the isolation section. These delayed trigger levels will trigger SCR1 during the first half cycle and SCR2 during the second half cycle to provide the desired phase control. The 'Inc Angle' and 'Dec Angle' buttons make use of NE556 dual timer configured as dual monostable. Each of the two buttons, when depressed momentarily, triggers the re spective monostable multivibrator associated with the depressed button to provide a pulse of 1ms duration. The monostables take care of the switch debouncing problems. The output of one of the monostables is connected to PBO line of the PIC. Similarly, the output of the other mono is connected to PB3 line of the PIC. If the PIC senses logic '1' at PBO, the 'incfir' function (as shown in the source code of the program) is made to the 'decfir' function is called run. Similarly, J when PB1 senses logic '1.' After completing either of these routines, the microcontroller does the job of indicating the firing angle via LEDs connected at the output of 4:16 decoder IC3 as explained in the succeeding
as inputs
1
paragraph. A 4-bit BCD value is passed through lines PAO through PA3, which is decoded using the 4:16 bit decoder. Since the output of the decoder is active-low, the output pins of the decoder are connected to the cathodes of the respective LEDs via current-limiting resistors, while the anodes are all strapped to Vcc (5V) to light up the LED connected to the active
As the firing angle difference between the LEDs is ten degrees, we require 18 LEDs to represent firing angle from 0 to 180.The output of the 4:16 decoder is connected to 16 LEDs and the rest two LEDs are connected to lines PB6 and PB7 of the PIC. When the latter LEDs (LED17 or LED 18) glow, the 4:16 decoder is inhibited (disabled) to avoid glowing of multiple LEDs at the same time for the same angle. Hence E0 and El of the 4:16 decoder are controlled by PB6 and PB7 lines. So when any of these two port lines is high, it deactivates the de coder. Transistor is used to augment the signal from PB6 and PB7 lines to light up the additional LEDs (LED17
158
2. 2K
9U-0-9U
Lp n ej
o
o
n CD oTJ
LJ U_>
N 73
__22Kd_
NE556 1 OBOOQOO
OOOCOOD ici 1
8VG08*
and LED18). Trigger- isolation section. The AC-to-DC converter section comprising the SCRs and diodes employs mains 230V AC supply, while the maximum permissible voltage levels for the microcontroller pins are limited to only a few volts. Hence the lines carrying trigger pulses from the microcontroller to the converter section must be isolated to avoid high voltages reaching the microcontroller in the event of SCRs' failure. As a simple and effective isolating device, opto-SCR driver MOC3021 is used here, whose output can direcdy drive an SCR. Two such isolators are used for the two triggering signals (one for each SCR).
AC-to-DC converter section. This section employs two diodes (BY127) and two SCRs (2P4M) arranged as a rectifier bridge. At any given time (after firing angle is reached), only
one SCR and one diode (in cross formation) will conduct to provide the rectified output across the load. Power supply section. The regulated 5V supply for the circuit is provided by the conventional regulator circuit shown in Fig.
R3i 330E_
R2$2i<;l
IC
00000006 Boo
PI Cl 6F o-!
OlO'Ji
30O
xz z
000000000000
3. As stated earlier, step-down transformer XI is common for zero-crossing and power supply sections. It steps down AC mains to deliver the secondary output of 7.5V-0-7.5V
6C6666Q66IOOOOOOOOOD
rn riFrnnmnn nnnnnnnnn goaaooooo oooooooaa l\) U) -fc Ul 0\ NJ 00 CD
|"r"1
iff
N) (a)
Ol h M 00
AC. The transformer output is rectified by the full-wave rectifier, filtered by capacitor C9 and regulated to 5V by regulator 7805. Capacitor C12 bypasses any ripple in regu lated output. A single-side, actual-size PCB layout of the main circuit, including its power supply, is shown in Fig. 6 and its component layout in Fig. 7.
Software
The source code for the program (Firing.asm) is appended at the end of article. The configuration word that determines the device configuration is set to select the low-power (LP) mode for the crystal oscillator, power-up timer is enabled (_PWRTE_ON) to provide a 72ms delay at power-on, code-protect bits are enabled (_CP_ON) and watch-dog timer is disabled (_WDT_OFF) since its application is not required in this project. Ports are initialised to be input or output ports as indicated in the description of the microcontroller section. All the port lines (except PA4, pin 3) are fully utilised for different purposes as described under the microcontroller section. The program performs the functions of sensing the zero-crossing instances at PB4 and PB5 lines and delaying
Microcontroller-Based Projects
159
the control signals at PB1 and PB2 for firing of SCR1 and SCR2. It also checks lines PBO and PB3 for depres
sion for incrementing and decrementing the firing angle and takes action for incrementing or decrementing the stored value by a value that corresponds to 10 step-size. The program displays the current firing angle through lines PAO through PA3, PB6 and PB7 via 18 LEDs to accommodate 180. Download Source Code: http://www.efymag.com/admin/issuepdf/Firing%20circuit.zip
FIRING.ASM
Include <pl6f84A.INC>
LIST P=picl6f84A ; Processor type PIC16F84A
_ CONFIG _LP_OSC
cblock 0x10 temp
store
str
&
btfsc goto
return
store, 0
bel
PORTB, 6 ; DISABLING THE 4:16 DECODER AND INDICATIONG 180th DEGREE
stk
delayl :
PROGRAM FOR FIRING
;DELAY
ANGLE
movlw
movwf store
0x04
movf
incfsz
decfsz
; ALL PORTA
MADE
; TO CHECK
movlw
0x39
;PORTB
LINES ARE CONFIGURED AS DESCRIBED IN THE ARICLE movwf TRISB bcf STATUS, RPO bcf PORTB, 1 bcf PORTB, 2 bcf PORTB, 6 bcf PORTB, 7 up: nop ;ZERO CROSSING PORTB, 4 upl : btfsc DETECTION OF AC
HALF CYCLE
back: 0 55mSEC
movwf movlw
stk Oxbb
;DELAY OF
decfsz
temp, 1
stk, 1
return
inctime: incf
movlw
movwf str
0x13
store, 0
str, 1 str, 1
;FIRING ANGLE DELAY ;SIGNAL TO OPTCOUPLER ; PORTB, 5 btfsc ZERO CROSSING DETEC TION OF ANOTHER AC HALF CYCLE goto up2 bsf PORTB, 1
movf
subwf
decfsz
goto next
movlw
0x11
call delayl
bcf PORTB, 2 btfsc
PORTB, 0 ;CHECKING THE
movwf store
next :
LOGIC HIGH FOR INCREMRNTING ANGLE call inctime btfsc CHECKING THE PORTB, 3 ; LOGIC HIGH FOR DECREMRNTING ANGLE call dec time store, 0 movf bcf PORTB, 6 bcf PORTB, 7 store, 4 btfsc call conv
movwf PORTA
dectime:
movf
store, 0
str
DECREASED
goto bb yotu decs bb: decf goto dwn
str,0
goto
up
0x00
movwf
bsf
end
160
S
are
ilicon-controlled rectifiers (SCR) are solidstate semiconductor devices that are usually used in power switch ing circuits. SCR controls the output signal by switching it 'on' or 'off,' thereby controlling the power to the load in context. The two primary modes of SCR control
phase-angle
230V AC
firedwhere a
LEDS [33502
D1-D8 = 1N4007
TO 9V, 500mA
SECONDARY TRANSFORMER
complete wave-
DEC. INC.
LOAD ON/OFF
R6 10K
VR1
10K
C6"
Vcc
S3
S2
D9 P1.0
40
16V
10m
R/W
D1 D2 D3
D5 D6 D7
RST
P2.6 P2.5 P2.7 PO.O P0.1 P0.2
D10 PI .1
D11 P1.2
D9-D14=1N4007
D14 D13
D12
INT1
C P3.3
INT0/P3.2
P2.4
P2.3 P2.2 23
20
R8 3301
P2.1
P2.I
D2
IC2
MCT2E
<
230V
SCR1
TYN604
AC
Xtal 12MHz
LED4
AM/V
R12
10K
GND
Microcontroller-Based Projects
161
forms is passed to regulate the power. In the phase-angle controller, the firing pulse is AT 'A' to turn on the SCR in the middle of every delayed 10ms 5V half cycle. This means that every time a part of an WAVEFORM AC cycle is cut, the power to the load also gets cut. AT'B' To deliver more or less power to the load, the phase 5V WAVEFORM angle is increased or decreased, thereby controlling AT'C1 the throughput power. /4ms DELAY There are several ways to control the firing an PULSES AT D' gle of SCR. This article describes a microcontroller SCR FIRING AT89C51-based phase-angle controller. A microcon PULSES AT'E' troller can be programmed to fire SCR over the full range of half cycles from 0 to 180 to get a good OUTPUT WAVEFORM linear relationship between the phase angle and the delivered output power. Some of the features of this microcontrollerPULSES based phase-angle controller for SCR are: AT 'D' 1. Utilises the zero-crossing detector circuit SCR FIRING Controls the phase angle from 0-162 2. PULSES AT'E' 3. Displays the phase angle on an LCD panel OUTPUT 4. LED indicators are used for displaying the WAVEFORM status of SCR 5. Increases or decreases the phase angle with intervals of 18 Basically, the zero-crossing detector circuit in Fig. 3: Waveforms observed at various points in Fig. 1 and Fig. 2 and SCR output waveforms terrupts the microcontroller after every 10 ms. This interrupt commands the microcontroller to generate (in the range of 1 ms to 9 ms). The user can increase or some delay TABLE I decrease the delay in intervals of 1ms using switches. The SCR is then fired through the opto-coupler. This repeats after every 10 ms. Role of
4.6V
WAVEFORM
Different Switches
Switch
Function
Circuit description
The complete circuit is divided into two sections: l.The zero-cross detector section S2 2. The control section S3 7he zero-cross detector section. Fig. 1 shows the circuit diagram of the zero-crossing detector and the power supply. The main sections of the circuit are a rectifier, regulated power supply and zero-crossing detector. The 230V AC mains is stepped down by transformer XI to deliver the second ary output of 9V, 500 mA. The transformer output is rectified by a full-wave bridge rectifier comprising diodes D1 through D4 and then regulated by IC 7805 (IC3). Capacitors C2 and C3 are used for bypassing the ripples present in the regulated 5V power supply. A capacitor above lOpF is connected across the output of the regulator IC,while diode D6 protects the regulator IC in case their input is short to ground. LED5 acts as the power-on indicator and resistor R5 limits the current through LED5. This regulated 5V is also used as biasing voltage for both transistors (Tl and T2) and the control section. A pulsating DC voltage is applied to the base of transistor Tl through diode D5 and resistors R1 and R2. When the pulsating voltage goes to zero, the collector of transistor Tl goes high. This is used for detecting the pulse when the voltage is zero. Finally, the detected pulse from 'C'is fed to the microcontroller of the control section. The controlsection. Fig. 2 shows the circuit diagram of the control section for the phase-angle control of SCR. It comprises a microcontroller AT89C51, opto-coupler MCT2E, LCD module and a few discrete components. Port 0 (PO.O through P0.7) of AT89C51 is used for interfacing data input pins DO through D7 of the LCD
S1
To switch SCR on/off Increase delay by 1 sec Decrease delay by 1 sec
162
EFY/SUNIL/PHASE/NOU. -D9
Fig. 4: Actual-size, single-side PCB for the phase angle control of SCR using AT89C5 1
T2
LEDI.
LEDZ.
LED3
'<_>
BC54?
aa
lcdi
D1-DM=1N4007
module. Port pins P2.6, P2.5 and P2.7 of the mi crocontroller control the registers select (RS), read/ write (R/W) and enable (E) input pin of the LCD module, respectively. Preset VR1 is used for control ling the contrast of the LCD module. Push-to on switches SI, S2 and S3 are connected with the pins Pl.O, Pl.l and PI.2 through diodes D9, D10 and Dll,respectively. External interrupt pin INTO (P3.2) of the mi crocontroller is connected to Si, S2 and S3 through D12, D13 and D14, respectively. The role of different switches is shown in Table I. The output of the ze ro-crossing detector from 'C' is fed to the external interrupt pin INTl (P3.3) of the microcontroller. Port pin P2.0 is con nected with pin 2 of the
opto-coupler (MCT2E).
The output pin 5 of MCT2E is used for trig gering the gate of SCR TYN604. The anode of SCR is connected to the ft Q b'7'"5 (bulb) with the 230V OVsO Q load C0N2 AC supply. A 12MHz crystal 1=JUMPER along with capacitors C5 and C4 are connected to the microcontroller pins Fig. 5: Component layout for the PCB 18 and 19 to provide the basic clock to the microcontroller. Power on reset is derived by using capacitor C6 and resistor R6. Switch S4 is used for a manual reset.
The operation
The complete operation can be well understood with the help of waveforms in Fig. 3. 1. The waveform at point A' is a fully rectified wave that is fed to the base of Tl. 2. When the base voltage falls below 0.7V, transistor Tl is switched off, pulling the output higher. This
Microcontroller-Based Projects
163
PARTS LIST
Semiconductors: IC1 - AT89C51 microcontroller IC2 - MCT2E opto-coupler IC3 - 7805, 5V regulator T1,T2 - BC547 npn transistor SCR1 - TYN604 SCR D1-D14 - 1N4007 rectifier diode LED1-LED5 - 5mm LED
R1.R4
R5.R7-R11
R6, R12
- 10-kilo-ohm
- 330-ohm
VR1
- 10-kilo-ohm preset
Capacitors:
CI C2
C3 C4,C5 C6
Miscellaneous: XI
- lpF, 25 V electrolytic - 470|jF, 16V electrolytic - 0.1)jF ceramic disk - 33pF ceramic disk lOpF, 16V clcctrolytic - 230V AC primary to 9V,
500mA secondary transformer - push-to-on switch - 12MHz crystal - 16x2 line LCD
S1-S4
Xtal
LCD Module
TABLE II
Indication
SCR on SCR off Blinks when delay is increased Blinks when delay is decreased
results in a very short positive pulse, which is available at the collec shown in the second waveform. 3. As this positive pulse is inverted by transistor T2, it produces one negative pulse of the same width at 'C.'This is shown as the third waveform. 4. This negative pulse is fed to the interrupt pin (INT1) of the microcontroller, which acts as an interrupt for the microcontroller. The microcontroller then generates a positive pulse on P2.0 (at point 'D') after some delay. This turns 'off' the internal LED of the optocoupler (MCT2E) and a positive pulse is produced at output 'E'. This is used for triggering (fire) SCR1. 5. Depending on the time delay in between the interrupt and the pulse on port pin P2.0 of the microcontroller, the SCR is fired in the middle of the half-wave cycle. 6. Two different waveformsone for 4 ms delay and the other for 8 ms delayare shown in Fig. 3. In the case of 4ms delay, the output positive cycle of the AC wave is 60 per cent of the input. Therefore, nearly 60 per cent of the power is delivered to the load (the dotted line shows part of waveform that has been cut). In the second case of 8 ms delay, the output cycle is 20 per cent of the input cycle, so only 20 per cent of the power is delivered to the load. This change in delay is done using switches SI and S2. Different LEDs are used for indicating different functions as shown in Table II. The diodes D12 through D14 are connected in such a manner that whenever any of the three push-to-on switches are pressed, it generates an external interrupt INTO. When switch SI is pressed for the first time, it enables external interrupt INTl and displays the message 'SCR on.' So after every 10 ms, external interrupt INTl is generated which starts the entire operation. Pressing switch SI again disables external interrupt 0 and the message 'SCR off is displayed. The complete SCR opera tion gets shut off. On pressing S2, the delay increases by 1ms (firing angle will shift by 18) and firing of SCR is delayed by 1 ms.The power delivered to the load is also decreased by 10 per cent. The maximum delay that can be applied is 9 ms which will delay firing by an angle of 162. When the limit is reached, it is indicated by LED3 and a message 'Max. phase angle' is displayed on the LCD. The glowing of the bulb goes
tor, (at point 'B') as
off.
Similarly, when S3 is pressed, the delay is decreased by 1 ms and the load current increases by 10 per minimum delay is 0 ms, which means a full positive cycle is applied. However, when the limit is reached, it is indicated by LED4 and a message 'Min. phase angle' is displayed. An actual-size, single-side PCB for phase-angle control using SCR is shown in Fig. 4 and its component layout in Fig. 5.
cent. The
Software program
The software code for this project is written in 'C' programming language and compiled using the Keil [iVision3 compiler. After compilation, the final .hex code is downloaded to the microcontroller using a suitable programmer. The source program is well commented and easy to understand. The main function initialises the timer, ports and LCD. Finally, after enabling the external interrupt 0, it enters
164
into a continuous loop. IntOfunction is an interrupt function and is automatically called when any of the three switches Si through S3 is pressed. 1. If switch Si is pressed, it checks if it is pressed for an even/odd number of times. Accordingly, it either switches 'on' or switches 'off' the SCR. Basically, it enables/disables external interrupt 1. The state of the SCR is displayed by a message on the LCD and an indication comes on LED1 and LED2 also. 2. If switch S2 is pressed, the delay is increased by 1ms and the angle is increased by 18.The light intensity of the bulb also increases. If the limit is reached, the message is displayed on the LCD. 3. For switch S3, the operation remains the same as with S2, but the delay is decreased by 1ms and the angle is decreased by 18. Intlfunction is also an interrupt function and is automatically called when the zero-crossing detector gives the pulse after every 10 ms. It feeds one pulse to the gate of the SCR after the desired delay (set by switch S2 and S3). The pulse applied is indicated on LED1. writecmdfunction sends the command byte to the LCD. It takes one argument byte and sends it to port Pi writedatafunction sends data bytes to be displayed on the LCD. It also takes one argument byte and sends it
to port
PI.
writestrfunction writes a whole string (message) on the LCD. It takes the pointer as an argument that points the address of the first character of the string. Then through the pointer, it sends all the characters, one by one, to port P0. busyfunction checks the status of the busy flag of the LCD. If the flag is set, it means the LCD is not ready and the programs remain within the loop. When the flag is reset, it means the LCD is ready and the program
comes out of the loop.
keydlyfunction, used for key debouncing, is the fix delay by approximately 100 ms. delayfunction is a variable delay generated by timer 0. The basic delay is of 1ms, which is rotated in the loop from 1to 9 times to generate a minimum of 1ms and a maximum of 9 ms delay. displayfunction separates each digit of the angle and converts them into an equivalent ASCII number, before sending it to the LCD, one by one, for display. Download Source Code: http://www.efymag.com/admin/issuepdf7Phase%20Angle%20Control%20Using%20 AT89C51.zip
SCR.C
finclude<reg5L.h> include <string.h> sbit rs = P2A6; sbit en P2A7; sbit rw = P2A5; P0A7; sbit b sbit ledl = P2A1; sbit led2 = P2A2; sbit ledJ = P2A3; sbit led4 = P2A4; sbit pulse = P2A0;
void decangleO
EX1-0; led3=l;
writecmd (0x~0) ;
if (dl>0)
dl ;
// decrease delay d2-=18; // decrease display angle by 18 writestr ("angle: ") ; II show it on LCD display (d2) ;
}
void writecmd(unsigred char a); void writedata (unsigned char b); void busy (void); void writestr (unsigned char *s) ; void dely(vnid); void incangle(void) ; void decangle(void) ; void delay (int d) ; void display (unsigned int z); void keydly (void)
{
// function initializations
OFF
void incangleO
{
led4=l;
if (dl<9)
I
unsigned int x,y;
dl++;
Microcontroller-Based Projects
165
d2+=18;
while (z>=10)
{
zl=z%10;
ASCII {aJ=zl+Gx30;
I
else if(dla=9) writestr ("Max phase angle *);
led4-0; EX1-1;
else
TRO
{
for (k=0;k<d;k++)
1;
II start timer
//
count overflows of timer 0 till
THO = OxFC;
TRO = 0;
0x17;
1
void writecmd (unsigned char a)
{
switch (PI)
i {
II send command to LCD II check busy flag II select ccmmand register II write enable II send byte to LCD II apply strobe pulse
case OxFE:
busy() rs 0 rw 0 PO = a en 1 en = 0
II after
II increase
if ( (c%2 ) =1)
II send data
to LCD
// switch on
rw = 0 PO = b
1
SCR
en 0
en
// check busy flag II select data register II write enable // write enable II send byte to LCD // apply strobe
// check busy flag of LCD
II display
current angle
*);
pulse
t i
EX1 = 1;
void busyO
i l
else i t
en = 0
PO
rs rw
OxFF; 0;
writecmd (0x01) ;
II for
even tines
II SCR is off
led2=l;
// read enable
while (b==l)
{
// if busy bit is i
II led2 is
on
EX1
0;
// disable external
en=0;
) en=0;
)
interrupt 1
i
break;
// for second key case CxFD: keydly ( ) ; // after key debounce incangle() ; // increase phase angle
<
to LCD
break;
writedata (*s) ;
I
}
void display (unsigned int z)
to ASCII
I
[3] ; int zl, a, ASCI I
if (z>=100)
pulse=0; ledl = 0;
II ledl off
void main()
166
{
TMOD = 0x01;
// display message
writestr ("Control") ;
led2=l; IE-0x81;
while(l);
// of LCD
vritecmd(OxOE) ; writecmd(OxOl) ;
Microcontroller-Based Projects
167
VINAYCHADDHA
Beverage
and even in companies. Press a switch and the machine delivers a hot cup of your favourite drink. This looks quite a simple operation but has a very complex logic behind it: It involves use of twelve pre cision timers and four counters apart from physical devices like display, solenoid and motor to deliver water and premixed tea/coffee/soup powder in exact quantity for better taste and in exact sequence. This has become possible because of the use of microcontrollers, which allow compact size, higher reli The prototype of beverage vending machine controller developed by the author ability, lower cost and multiple functionalities. This tea/coffee/soup vending machine controller
uses
Freescale's
POWER SUPPLY
15V, 1*
latest
microcontroller chip. The con troller is pro grammable and
MC908JL16
7812
7005
TRANSFORMER
RECTIFIER
REGULATOR
REGULATOR
user-friendly. You can set the quantity of the bever ages through a button switch provided on the front panel of the control
RELAY1
MC9G8JL16C
MEMORY)
16x1
LCD DISPLAY ALPHANUMERIC)
MICROCONTROLLER
RELAY2 RELAY3
RCLAY4
c? to
ler as per your Fig. 1:Block diagram of the beverage vending machine controller requirements. Thus, cups of any size can ON/OFF I be filled at any SWITCH g time.
The hardware
Fig. 1 shows
the block dia gram of the
168
X1 = 230V AC PRIMARY TO 15V, 1A SECONDARY TRANSFORMER
C2
O.lp
C3
25V
iom
o.i p
|
C4
-L- C5
-0.1p
GND
,,<-io
|q/"S|-
fi o
5 njW W oajy
8 </>
j
OU.SO
arUrr 5 Eli I 8 f
<o
in
cr
J!
CM
Fffft T VW* -
TT3:ij:
z*
a
o-
to JLTMMU ii#
(O
n cm
--
vending machine controller. It comprises the follow ing sections: power sup ply, micro controller, relays, relay driver, al phanumeric display, keyboard and mem ory. The
Hi"
z z z z
power sup
ujOOO
hOlfll
ii ii ii ii
333
CNJ 3.
II
<o
CM
CO
>
1NOO
Sd
Md
o
w
$
>
9m oc
o
<i
|8 s>
?z5
in ,1 CC 9J
-J <>
p< oo
'"O
to O
(O
N-
5>oS> a
i
o
CM
CO
control
section has
in
S8
cc
S 2
cu
-V/vV-
-vwwffO
<M
required are
OS
i Hi"
I
o eo s m n
-o
cv
to
co a>
J5
cm
in
m w
n i
O oo
(N
-3
n T io
s
-V/A <*> p cc
HOF<
ily available. However, o a low-cost 5 c thermostat "5 c used in wa ter heaters S) 2 can be used I! in the unit.
-c
8
<u
.c
Qj
-O
Power
-vwv-
3i al
1(1-
ssfg
microcon-
Microcontroller-Based Projects
169
PARTS LIST
Semiconductor:
Resistors (alt 'A-watt, 5% carbon): R1 - 4.7-kilo-ohm R2,R3,R5,R6, R7, R8, Rll - 10-kilo-ohm R4 - 10-mega ohm R9 - 10-ohm R10 - 1-kilo-ohm
R12-R18 Capacitors: CI C2, C4, C5, C7,C11,C12 C3,C6, C8 C9,C10 C13-C19 Miscellaneous:
XI
- 100-ohm
SI S2-S5
RL1-RL7
(4-pin)
TAI.
F1 F2 SOL1-SOL7 LCD
12V, 1/CO relay 4.1943MHz crystal oscillator 0.5A fuse 1.5A fuse Solenoid valve 16x1 liquid-crystal
display
Screenshot 2: The PR0GQ8SZ programming environment
trailer and memory need 5V DC for operation. Bridge rectifier, capacitive filter and regulator ICs 7812 and 7805 are the standard parts used in the power supply. Microcontroller. We need individually settable timings for the seven relays and multiple time delays between the operation of these relays, i.e., the water inlet relay should operate only when water has to be dispensed. All these functions, though possible using discrete components, are best handled by Freescale's MC908JL16 micro controller. Relays. Selection of each beverage requires two solenoid valves, one for premix powder and another for water outlet. The solenoid valves are operated through relays. That is, for three beverages, we need six solenoids and six relays to operate them. The water heater tank is not connected to the source of water as this may increase the power consumption. The water inlet is opened for some time after one cup is filled to allow small quantity of water to be filled again in the tank. This requires one more solenoid. So a total of seven solenoids are required. To activate these high-current solenoids, sugar-cube type relays are used.These are cheap and used in low-cost UPS for PCs. The relays need around 100mA, 12V supply to operate. Relay driver ULN2003. The microcontroller cannot drive 12V, 100mA relays direcdy and needs a buffer. This can be easily achieved using BC547 transistors and a few resistors. However IC ULN2003 has been used to drive
170
the relays.
Alphanumeric display. The operator needs a vi sual interface for setting the various parameters and the status of the input switches pressed. LED displays will not be visible in brightly-lit places, so LCDs are the best choice. Character size is not a constraint as the machine is to be operated from a close distance. A standard-size, 16-character, single-line al phanumeric LCD has been used here. It is readily avail able and commonly used in industrial applications and PCO monitors. Keyboard. We need at least four keys: two for bev erages (one each for tea and coffee), one for half or full cup, and one for hot water. Tactile key switches have been used here. These are low-cost and readily available. Memory. The control unit doesn't have a battery backup system and will lose the set data when power fails. So a provision has to be made to ensure that the unit recalls the set parameters when power resumes. This is achieved by using a small-size 24C02 memory, which is commonly used in electronic goods like TV sets.
Circuit description
Fig. 3 shows the circuit of the vending machine controller. Poiver supply. The power supply circuit comprises a 15V, 1A step-down transformer, filters, 12V DC regu lator 7812 (ICl) for relays
Fig. 4: An actual-size, single-side PCB layout for the beverage vending machine controller
and 5V DC regulator 7805 (IC2) for microcontrollers (see Fig. 2). Fuse F1 protects against surge current in the event of short circuit.
Microcontroller-Based Projects
171
o lOOR
-J
SOL 4
o
LOJaRj O Oq
-
100R
LOOR
JLgJern-|C-l2U
5O
M0U2
N0U4
BCR-1C-12U '
Lm
N0U6
O
SCR-1C-12IJ
MAMMI#
TO- SOL 3
TO- S0L7
ro-soL
,W100R
P10U1
A -
"
O W
**100R
10 CO
LxJ U
CO
| r-pj*yj[
5 >*SCB-1C-12U
O [1
M0U3
SCR-1C-1 2U
sCR-lC-1 2U
oo
M0U7
2lj
Microcontroller. The MC908JL16 microcontroller (also called the MC68HC908JL16) from Freescale Semiconductor, Inc. (for merly Motorola) has 28 pins with 23 general-purpose I/O lines, 16 kB of flash memory to store program and 512 bytes of RAM. It utilises an HC08 CPU core and provides a cost-effective re programmable flash memory. It also has two 16-bit timers and other standard function alities, making it an all-inone control IC.
SCR
MWMtf
OS/r,QOZZ
The device is a part of the growing JL Family that includes multiple clock op tions, keyboard interrupts, low-voltage inhibit and a watchdog timer. In particu lar, the MC908JL16 has a built-in serial communica tions interface module, mas
ter
eoo?Nin
inter-integrated circuit
analogue-to-digital converter
(not used in this program).
The MC908JL16 is low-cost, high-perforo O mance, 8-bit microcontroller unit. It uses the enhanced o M68HC08 central pro cessing unit (CPU08) and is available with a vari ety of modules, memory E1N4148 sizes, package types, etc. Its datasheet is available on Freescale's website 'www. freescale.com.' Relays. The 12V, 1/CO relays are capable of switch ing up to 7A, 220V AC loads. Across each relay con tact, metal-oxide varistor (MOV) and resistor-capac Fig. 5:Comporenf layout for the PCB itor (RC) snubber circuit have been added to reduce noise generated by sparking at relay contacts at the time of switching. Fuse F2 used for protection against surge current can be replaced with another higher-current fuse as per the requirement of
'
172
the solenoid used. Relay driver. The relay driver ULN2003 with seven outputs is capable of sinking 500mA on each output. Inputs are TTL CMOS-compatible and outputs are fed to relay coils directly. With this driver, no free-wheeling diode is required across the relay coils. Datasheets are included in the CD. Display. The display GDM1601A used here is a 16x1 alphanumeric LCD based on Hitachi HD44780 LCD controller. It is interfaced to the microcontroller using four data lines (D7 through D4) and two control signals (RS and E). Complete details of HD44780 are available on the Internet. Keyboard. It has four push-to-on switches (S2 through S5) connected to the microcontroller using five lines, of which four are shared with LCD data lines as shown in Fig. 3. Memory. EEPROM 24C02 permanently stores information like different timings, options for switches and count of cups filled. It is connected to the microcontroller using two lines, namely, serial data (SDA) and serial clock (SCL). Technical details of I2C bus and the memory have been covered earlier in EFY. (Refer to articles 'Access Control' in EFY Sept. 2002, 'Set-Top Converter' in EFY June '97, 'Caller ID' in EFY April '99 and 'Remote-Controlled Audio Processor Using Microcontroller' in EFY Sept. '99). An actual-size, single-side PCB layout for the beverage vending machine controller is shown in Fig. 4 and its component layout in Fig. 5.
The software
The software has been developed in 'C' language using Metrowerks' Code Warrior 'C' compiler. A 16kB free version of the compiler is available on the website 'www.metrowerks.com' The program in 'C' is written on the MC68HC908JL8, which is equivalent to the MC68HC908JL16, except that the MC68HC908JL8 has only 8kB flash memory and 256 bytes of RAM. A specially developed programmer board along with PROGO8SZ software (www.pemicro.com) has been used for programming the microcontroller chip. Seven program modules have been used for this project: 'disp.c,"iic.c,"main.c,"initlcd.c,"sense_kbd.c,"timer.c'
and 'utils.c.' The software is developed in two stages: First, basic common input/output (I/O) routines are developed to display information on the LCD, read or write data from a specific memory location, scan the keyboard input (check which key has been pressed) and switch on the relays. Next, logic/program specific for this function is developed. This is more or less a translation job where you convert the end-product requirement in 'C' language so that it performs as expected. CodeWarrior. The CodeWarrior 5.2 integrated development environment (IDE) includes compilers, linkers, source-code browser, debugger, editor and rapid application development tool set (see Screenshot 1).You can use it to edit, navigate, examine, compile and link code throughout your software development process. You can also configure options for code generation, project navigation and other operations. If you have this IDE tool, just copy the relevant files from the EFY-CD into your PC. Open the project file 'tea_coffee.mcp.'When the source code is compiled, a '.sl9'file is generated in 'bin folder of the directory where the original source code is located. This file is equivalent to the hex code in other programming tools. Programmer. The PROGO8SZ version 2.12 is a programmer for EEPROM/EPROM modules internal to a Motorola HC08 processor. It communicates to the processor's monitor mode (MONO8) via one of P&E Microcomputer Systems' hardware interfaces that is designed to work with the monitor mode. Alternatively, the MONO8 circuitry can be built direcdy into the end user's hardware.The PROGO8SZ programming environment is shown in Screenshot 2. The connection dialogue appears initially. We have used 'class-3 direct serial-to-target W/Mon08 serial port circuitry' option for the programmer board used for programming. Next, select the serial port, tick the box corre sponding to the 'ignore security failure and enter monitor mode' and then click 'contact target with this setting. The 'power cycle dialogue' box appears. Now switch off the programmer board. Switch on the programmer board again and press 'ok.' Select the device and open '.sl9' file under 'File' menu to program into the chip.
Microcontroller-Based Projects
173
S2
S3 S4
S5
Reset
Increment Decrement Setting/next/OK
Setting mode. Normally, this mode is used only once to set various parameters as per the specific require of the cup. This can be done by following a simple procedure. Switch off the controller unit. Press switch S5 (marked as 'hot water') for the settings mode and switch on the unit. Follow the instructions on the LCD. Message Displayed on Pressing Press switch S5 again for the desired option. Pressing switches Switches S2 through S5 S3 and S4 will increment or decrement the value (in seconds), Message displayed Switch pressed respectively. The program has an option for a half or full cup S2 for dispensing tea Serving tea of the beverage. S4 can be used for either 'soup' or S3 for dispensing coffee Serving coffee 'half/full' option in the setting mode. When 'OPT3'is selected, S4 for dispensing soup Soup or half/full depending S4 will function as a switch for dispensing the soup. When on the setting 'half/full' option is selected, S4 will function as a switch for S5 for dispensing hot water Hot water filling up the cup to half or full. For dispensing tea and coffee, two time settings are required, i.e., premix-dispensing time and water-dispensing time. These can be adjusted as per specific requirements, say, quantity and strength (flavour) of the beverage. Dispensing of tea has an extra function of brewing (optional). In this mode, water is dispensed for a second, then stopped to allow mixing of the powder with water, and dispensed again after some time. This timing can be set through the 'brew time' option. Common settingfor tea/coffee/soup. The time for activation of the water solenoid valves can be set to allow hot water to be dispensed through the common outlet. After dispensing, some water remaining in the pipes cools off. In the next dispensing, this water is dispensed along with hot water from the water heater. So a provision is made to automatically flush the cold water out from the pipes at regular intervals.The time interval to flush out the cold water can be set by the user. For example, if you set 'Flush To' as '010 m,' i.e., 10 minutes as the time duration for which nobody uses the machine, message "flush required" will be displayed. The user will have to press switch S5 to flush the water out. Apart from this, there are time settings for delay, refill, etc. The delay time is the time interval between the consecutive dispensing of water and premix powder. Refill time is the time for refilling water into the water heater. Relay RL7 energises through pin 10 of IC5 to refill water in the heater. After you are done with settings, switch off the power supply for about 30 seconds to allow complete discharge of the filtering capacitor used in the power supply section. Switch on the unit again and it is now ready for use. The display will show "have a nice day." Download Source Code: http://www.efymag.com/admin/issuepdf/Vending%20Machine.zip
ment, say, the size
174
. Mi
"otion control plays a vital role in industrial automation. Manufacturing plants in industries like chemical, pharmaceutical,plastic and textile, all require motion control. And it may be a flat-belt application, flowcontrol application or mixing of substances. Different types of motorsAC, DC, servo or stepper are used depending upon the application. Of these, DC motors are widely used because controlling a DC motor is somewhat easier than other kinds of motors. The motion of a DC motor is controlled using a DC drive. DC | 1 PARTS LIST drive changes the speed and direction of motion of the motor. Some Semiconductors: of the DC drives are just a rectifier with a series resistor that converts IC1 - AT89C51 microcontroller standard AC supply into DC and gives it to the motor through a switch IC2 - 74LS04 hex inverter and a series resistor to change the speed and direction of rotation of IC3 - NE5SS timer - L293D motor driver the motor. But many of the DC drives have an inbuilt microcontroller IC4 - 7805, 5V regulator that provides programmable facilities, message display on LCD, precise IC5 IC6 - 7806, 6V regulator control and also protection for motors. Using the DC drive you can T1.T2 - BC548 npn transistor program the motion of the motor, i.e., how it should rotate. D1-D6 - 1N4007 rectifier diode LED1-LED5 - 5mm LED Here are some of the features of this DC motor controller: Resistors (all V4-watt, 5% carbon): 1. Controlled through microcontroller AT89C51 Rl - 10-kilo-ohm 2. Message displayed on the LCD module - 2-kilo-ohm 3. Start, stop and change of direction of the motor controlled by R2-R5 R6-R10, pushbutton switches and indicated by LED - 220-ohm R12.R13 4. Changes the running mode of the motor to continuous, revers Rll - 1-kilo-ohm - 10-kilo-ohm preset ible or jogging VR1.VR2 5. Changes the speed of the motor Capacitors: - 10|jF, 16V electrolytic 6. Time settings are possible for forward and reverse running of CI 33pF ceramic disk C2.C3 the motor C4.C7, C8 - 0.1fiF ceramic disk C5 - O.OlpF ceramic disk
Circuit description
C6
Miscellaneous: XI
- 1000|iF,25 V electrolytic
- 230V AC primary to 9V, Fig. 1shows the circuit of the microcontroller-based DC motor con 500mA secondary troller. At the heart of the DC motor controller is microcontroller transformer AT89C51. Port pins PO.O through P0.7 of the microcontroller are - 12MHz crystal interfaced with data pins DO through D7 of the LCD module, re *tal RL1 - 6V, lC/O relay spectively. Port pins P3.0, P3.1 and P3.2 control the LCD operation RL2 - 6V, 2C/0 relay - 6V DC motor through enable (E), register-select (RS) and read/write (R/W) pins, M - Push-to-on switch S1-S9 the Port Contrast of LCD P1.0 is set VR1. respectively. by preset pins LCD module - 16x2 line through P1.7 are connected to switches Si through S8 for performing the various operations. Power-on reset signal for the microcontroller is generated by the combination of capacitor CI and resistor Rl. Switch S9 provides manual reset to the microcontroller. A 12MHz crystal provides the basic clock frequency to the microcontroller. Capacitors C2 and C3 provide stability to the oscillator. EA pin (pin 31) of the microcontroller is connected to 5V to enable internal access. Port pins P2.0 through P2.3 of the microcontroller are used for LED indication of run, stop, clockwise and anti-clockwise rotation. Port pins P2.4 through P2.6 are connected to the inputs of inverters N3, N2 and N1 of 74LS04 (IC2).The output of inverter N3 is used to trigger pin 2 of NE555
timer.
Microcontroller-Based Projects
175
o
CO
D
<0
oo
Q <T>
CM
CO
o
CD
Hi*
OP
10
\
/Mm
>
LL.
[2 _ LLl OIO
CO
io
r- cc
V*
>h
-j _j
<<
cc
HI UJ
>- >-
VVr* cc
CO
a;
Timer NE555 is configured as a monostable and its time period is de cided by pre set VR2 and capacitor C4. When pin 2 of NE555 goes low, output pin 3 becomes high for the pre determined
PP
period.
The out put of NE555 is connected to pole P of relay RL1.
r- CM -1 -I
d CC
ti-
co
za
9a 9a
*a
-1
LU
CM
T
tr
o s
o
o
CT>
CO
A/WV-
ea za
la
a LL
AMA<
tr
CM
>r
O
0-
lu
* u
1
CM
Normallycontacts
II
-1
N.
oa
su
m/u
co
N I HJ
in
hVWVCC
g
T CO
CO
t-
LAAM<_
"ri
rn Q. U CO
21
cc
CC
open (N/O) of relay RL1 are connected to N/Ol and N/ C2 contacts of relay RL2. N/Cl and N/ 02 contacts of RL2 are
OCMr-OlcONtOiflnw '-'-'pinnonrtpjn
r-
:r
x2
1
C o
VJ w.
<1>
nrx
HH
Q 13 Qj
VI
s o s u
a
-p
CO
Hyygjjy
Ow
s
-c
z <=>
E 4)
0<o
Tif176
cc S
-A/WVil
connected to ground. The outputs of inverters N2 and Nl drive relays RL1 and RL2 with the help of transistors Tl and T2, re spectively. D1 and D2 act as free-wheeling diodes. Poles PI and P2 of RL2 are con nected to IN1 and IN2 pins
D3-D6 = 1N4007
Function
o
SPEED
o
LCD PANEL
o
MOTOR
DC MOTOR CONTROLLER
LED INDICATIONS
INCREASE DECREASE
TIME
INCREASE DECREASE
DIRECTION
of motor driver L293D. OUTl and OUT2 of L293D drive motor M. Fig. 2 shows the power supply circuit. The 230V AC mains is stepped down by trans former XI to deliver the secondary output of 9V, 500 mA.The transformer output is recti fied by a full-wave bridge rectifier comprising diodes D3 through D6, filtered by capacitor C6 and then regulated by ICs 7805 (IC5) and 7806 (IC6). Capacitors C7 and C8 bypass the ripples present in the regulated 5V and 6V power supplies. LED5 acts as a power-'on'
SI S2 S3 S4 S5 S6 S7 S8
To start motor To stop the motor Change the direction Change the mode Increase speed Decrease speed Increase time
Decrease time
indicator and resistor R10 limits the current through LED5. The proposed panel arrangement for the microcontroller-based DC motor controller is shown in Fig. 3. An actual-size, single-side PCB for the microcontroller-based DC motor controller is shown in Fig. 4 and its component layout in Fig. 5.
Operation
The eight pushbutton switches are connected for eight different functions as shown in the table. When Si is pressed, the microcontroller sends low logic to port pin P2.5. The high output of inverter N2 drives transistor Tl into saturation and relay RL1 energises. So the output of NE555 is fed to inputs INl and IN2 of L293D through both the contacts of relay RL2. Now at the same time, after RL1 energises, the microcontroller starts generating PWM signal on port pin P2.4, which is fed to trigger pin 2 of NE555 through inverter N3.The base frequency of the generated PWM signal is 500 Hz,which means the time period is 2 ms (2000|is). The output pulse width varies from 500 |is to 1500 ps. The R-C time constant of the monostable multivibrator is kept slightly less then 500 ps to generate exactly the same inverted PWM as is generated by the microcontroller. When switch S2 is pressed, port-pin P2.5 goes high and RL1 de-energises to stop the motor. When switch S3 is pressed, relay RL2 energises. Pin IN1 of motor driver L293D receives the PWM signal and pin IN2 connects to ground. As a result, the motor rotates in one direction (say, clockwise). When switch S4 is pressed, relay RL2 de-energises. Pin IN2 of motor driver L293D receives the PWM signal and pin IN1connects to ground. The motor now rotates in opposite direction (anti-clockwise). When switch S3 is pressed, different modes are selected in cyclic manner as given below: 1. Continuous mode. The motor rotates continuously with the set speed in either direction 2. Reversible mode. The motor reverses automatically after the set time 3. Jogging mode. The motor rotates for the set time in either direction and then stops for a few seconds and again rotates for the set time. It is also called 'pulse rotation'
Microcontroller-Based Projects
177
Switches S5 and S6 are used the speed of the motor, either in increasing order or decreasing order, in continuous mode only. Switches S7 and S8 are used to set the time either in increas ing order or decreasing order.
to set
Software
The program is written in 'C' language and compiled using Keil |iVision3 compiler. It is well commented and easv to J understand. The program has three major sections: initialisa tion and key press, display and motor control. Initialisation and key press. It consists of the main function that initialises timers, ports, LCD module and LED indi cation and then waits for key press. When any key is pressed, the program calls that particular function. Fig. 4: A single-side, actual-size PCB layout for the microcontroller-based DC motor controller In the main function, first the ports are initialised as in put/output, then the LCD is initialised and cleared. At power-on reset or manual reset, message "DC motor controller" is displayed on the LCD and LED1 through LED4 turn off. When start switch SI is pressed, mes sage "Motor Start" is displayed for a second, and then the mode and current speed are displayed. Run LED and clockwise-direction LED are 'on.'Now the program waits for key press. When any key is pressed, the program jumps to one of the functions (start, direction, mode, etc). Display. It uses the following functions: 1. 'writecmd' function sends command byte to the LCD. It takes one argument byte and sends it to PO. 2. 'writedata' function sends data byte to be displayed on the LCD. It also takes one argument byte and sends it to PO. 3. 'writestr' function writes the whole string (message) on the LCD. It takes pointer as an argument that points address of the first character of the string, then through the pointer it sends all the characters one by one to PO. 4. 'busy' function checks the status of the busy flag of the LCD. Ifthe flag is set, the LCD is not ready and the program remains within the loop. When the flag is reset, the LCD is ready and the program comes out of the loop. Motor control. It uses the following functions: 1. 'start' function starts motor rotation in one of the modes (continuous, reversible or jogging). The mode is selected by mode-selection flag 'm.' As explained earlier, in continuous mode the motor keeps rotating with the set speed. In reversible mode, the motor changes direction automatically after the set time. Injogging mode, the motor rotates for the set time, stops for a few seconds and then rotates. 2. 'stop' function stops rotating the motor and displays the message on the LCD module.This is indicated by glowing of the stop LED. 3. 'direction' function increments the counter by '1' every time and checks whether the count is even or odd. If the count is even, it selects clock-wise direction, and if the count is odd, it selects anticlockwise direction.This is
178
AT89C51-Based DC Motor Controller
also indicated on direction CLK and LEDs. ACLK a 0 4. 'mode' function changes 0 modes in cyclic manner. It increases B OB Q a M N/Cl sa a O mode-selection flag 'm' every time. N/C2P2 a If m=0 it selects continuous mode, ODD a if m=l it selects reversible mode and oHIUo N if m=2 it selects jogging mode. If 0090 SSS3 T1,T2=BC548 m=3 it is reset to '0' again and selects Nibbb B B 0 B g Q B 9 9? continuous mode and likewise. 5. 'incspeed' function increases 9 0 0 Q 9 0 0 R918R7RS '1 RL3 width the of the pulse by 100 ps. The 220E R6-R9-220E ; generated PWM is of 500 Hz.That LCD1 means total time is 2 ms=2000 ps. D3-D6=1N4007 BSSOQBQSQ flBBBBQQQBQ The width of the pulse is varied from o ol> CONl1 500 ps to 1500 ps in steps of 100 ps. To display the speed, the variable is first converted into speed factor 'l'to 9U AC SOOBQ 9000 9 B 009000900 '9' and then into ASCII. XTAL 6. 'decspeed' function is the same S3 35 _ S? as 'incspeed' but here the width of 12nHz C2, C3=33p the pulse is decreased by 100 ps. IOOOu P50-VW* P2-R5=2K 7. 'inctime' function increases the o o RlOvw reversible time of the motor by one R30~"NwO poueq RIO 220Z R 7&~k/\/\s-6 second. It increases the variable in multiples of 20. To display it on the LCD module, it is first divided by Fig. 5: Component layout for the PCB 20 and then converted into ASCII. 8. 'dectime' function is the same as 'inctime' but it decreases reversible time by one second. Delay. It uses the following functions: 1. 'keydly' function generates a fix delay of around 50 ms for key debouncing. 2. 'delay' function generates a variable delay by timer O.The basic delay is of 100 ps. It is rotated in loop from five to 15 times to generate minimum 500ps and maximum 1500ps delay. 3. 'time' function again generates a variable delay by timer 1. The basic delay is of 50 ms. It is rotated in mul tiples of 20 from 20 to 180 to generate minimum 1-second and maximum 9-second delay. Download source code: http://www.efymag.com/admin/issuepdf/Microcontroller%20Based%20DC%20 Motor%20Controller.zip
EFY/SUNIL/DC HOTOR/ JUNE -03
IC4
CM
t fO
DCMC.C
ft include<reg51 .h> include <string.h> sbit rs = P3A1; sbit en = P3A0; P3A2; sbit rw sbit b = P0A7; sbit ledl=P2A0; sbit led2=P2Al; sbit led3=P2~2; indicator sbit led4=P2A3;
unsigned int y=10; unsigned int m=0; unsigned int d=0; unsigned int t=100; unsigned int r-0; void start (void) ;
// of f time
// mode // direction
// time // run flag
// function initilization
// anticlockwise direc-
indicator PWM=P2A4;
RL1=P2A5; RL2=P2A6;
/ / PWM output
// relay 1 pin // relay 2 pin
// ontime
Microcontroller-Based Projects
179
// send command
// for
<
busy ()
r-1;
rs
ter
//
Pl=0xFF;
II send
rw = 0 P0 = a en 1 en = 0
// run LED=1
II send data
to
RL2=1;
en = 0
)
// check busy flag // select data register // write enable // write enable // send byte to LCD // apply strobe pulse
// switch on RL1 time (t ; // wait for desired time RL1-1; // switch off RL1 ledl=0 // run LED=0; time(20);// wait for 1 sec
RL1=0;
void busyO
<
// check busy
flag of LCD
en = 0 OxFF; P0 rs = 0
// disable display // P0 as input // select command regis// read enable // if busy bit is 1
ter
rw = 1 while(b==l)
i
ledl=l II again run LED=1 led3=0 led4=l RL2=0; // select other direction RL1=0; II switch on RL1 time (t ; // wait for desire time RL1=1; II switch off RL1 ledl=0 // run LED=0 time(20);// wait for 1 sec }
PWM=0;
en=0; en=l;
) en=0 ;
Pl=0xFF;
while (PI -OxFF)
// till no
key is pressed
ledl=l;
PWM=1;
// send high on
writedata (*s) ;
s++ ?
PWM pin
RL1=0;
// switch on RL1
time (t) ;
void start ( )
<
//
PWM=0;
ledl=0;
time (20) ;
}
)
void direction ()
(
keydlyO;
ledl-1;
d+ + ; if((d%2)--0)
<
)
// on time delay
II indicate on LEDs
// switch ON / OFF RL2
//
else
led3=0; led4-l; RL2=0;
delay (y) ;
180
}
void mode ( )
{
t+=20;
// increase it by 1 sec
p=t/20;
p-p+0x30; // convert it in to ASCII writestr ("time : "); // display it writedata (p) ; ") ; writestr (" sec
keydlyO; // key debounce delay writecmd (0x80) ; II display message on first line first column
m++;
// increment count
if(m==3) m=0; II if it is 3 reset it if (m==0) ( writestr I"mode: continuous "); // otherwise display mode time (15); ) else if(m==l)
(writestr ("mcde: reversible ") ;
else if(t==180) writestr ("max time: 9 sec"); // if max time display message
)
>
void dectimeO
<
int q;
keydlyO; writecmd (OxCO) ;
if(t>20) (
time (15) ;
)
else if(m==2)
(writestr ("mode: jogging
*>;
//
decrease
it
time (15);
)
q=t/20; q=q+0x30;
void decspeedO {
int z; keydlyO;
II increase speed
II key debounce II select second line on
// do same as above
writestr ("time : "); writedata (q) ; ") ; writestr (" sec
)
writecmd (OxCO) ;
LCD
if (y< 14)
width
II if
not
max
pulse
else if(t==20l writestr ("min time: 1 sec"); // if min time display message
)
x ; y++;
void keydlyO
// increase it
z=y-5+0x30;
convert
it in to
int a,b;
for (a-0;a<50;a++) for (b=0;b<1000;b++) ;
// 1
writestr ("speed: "); II diaplay speed on LCD writedata(z) ; "); writestr ("
)
void incspeed()
// increase speed
k; = OxAF; = 0x3C;
= 1;
<
int w;
keydlyO; writecmd (OxCO) ;
II key dcbcunce
if (y>6)
while (?F1==0) ;
till
the
timer overflow
TF1 = 0;
// if
I
x++;
flag
y
w=y-5+0x3Q;
II decrease it
// reload it //
stop timer
II do same as above
>
writestr ("
)
");
<
else if(y==6) writestr ("max speed: 1 ") ; // if min speed display message
)
int a; TH0=0x9B;
TLO=Ox9B;
// select timer 0
// to generate 100 micro
// start timer
void inctimeO
int p; keydly () ; writecmd (OxCO) ;
II increase time
for (a=0;a<cl ;a++)
to 15
if ( t < 18 0 )
{
TF0=0;
Microcontroller-Based Projects
181
TR0=0;
)
//
stop timer
OFF
led4=0;
void main()
(
tion OFF
PWM=0; RL1=1;
// relayl off
break;
//
LEDs
off,
output
case OxFB:
mode ( ) ;
II P0, P3
ports
P3=0x00;
// jump to start
break;
writecmd (0x3C) ;
writecmd (OxOEl ; writecmd (0x01) ;
II initilize
LCD
//
for
fourth
key
writecmd (0x84) ;
sage
II display mesdirection () ;
II change direction
writestr ("DC Motor"); II DC motor controller in writecmd (0xC3) ; // center of LCD writestr ("Controller" ) ; agin :Pl=0xFF; // pi as input port while (Pl==0xFF) ; II wait until any key press loop: switch (PI )
II jump
case OxEF:
incspeedO ;
flag is set
// for fifth
key
< case
II increase speed
to start if
run
II key debounce writecmd (0x01) ; writestr ("motor start") * time (50) ; II wait for 2 5 sec writecmd (0x80) ; writestr ("mode: continuous " ;// display current mode and speed writec.mil (OxCO) ; ") ; writestr ("speed 5 ledl-1; // Run LED ON led2=0; // stop LED OFF led3=l; // clockwise direction ON led4=0; // anticlockwise direction OFF start () ; // sart rotating
OxFE: keydly ( ) ;
break;
case OxDF:
decspeed ( ) ;
if(r==l) start ();
speed
case OxBF:
//
for
seventh
key
inctime 0 ;
if(r==l) start ();
// increase time
// jump to start if run
flag is set
break;
case 0x7F:
dectime ( ) ;
//
for
eigth
key
motor
// decrease time
break;
r=0; n run flag reset writecmd (0x01) ; writestr ("motor stop // display message ledl=0; // Run OFF led2=l ; // stop LED ON led3=0; II clockwise direction
II for
second key
flag is set
//
II key debounce
// if run flag is
not jump to again
// if
182
Iresented here is a microcontroller-based project for tracking a vehicle using global positioning system (GPS) and global system for mobile communication (GSM). This is a cheaper solution than a two-way GPS communication system wherein communication is done in both ways with GPS satellites. This project uses only one GPS device and two-way communication is achieved using a GSM modem. GSM modem with a SIM card used here implements the same communication technique as in a regular cellphone. The system can be mounted or fitted in your vehicle in a hidden or suitable compartment. After this installa tion, you can easily track your vehicle using your mobile phone by dialling the mobile number of the SIM attached to the GSM modem.You will automatically get the location of the vehicle in the form of an SMS (short message) on your mobile phone. 1 1 This system allows you to track your vehicle anytime and anywhere. PARTS LIST Whether you own a company with a fleet of hundreds of vehicles or Semiconductors: - 7805, 5V regulator you have expensive piece of equipment and you want to keep an eye on IC1 - ATMegal6 microcontroller IC2 them, this tracking system can inform you of the status without you - MAX232 converter IC3 having to be actually present on the site. LED1 - 5mm light-emitting diode Fig. 1 shows the block diagram of the GPS- and GSM-based ve Resistors (all 'A-iuatt, 5% carbon): hicle tracking system.
R1 R2
- 680-ohm - 10-kilo-ohm
Capacitors:
CI
C2, C3 C4-C8
Miscellaneous: SI
- 22pF ceramic
1. You can locate your stolen vehicle easily using your mobile without any extra cost. 2. It can be used for EFY note. Since we have started us
ing gEDA Open Source software to draw circuit diagrams and PCB pat terns, the diagrams may look slightly different.
ANT
I
CELLPHONE
(GSM)
ATMEGA16 MICROCONTROLLER
MAX232 CONVERTER
GPS MODULE
Fig. 1:Block diagram of the GPS- and GSM-based vehicle tracking system
trucks carrying valuable to keep track of the status of delivery and location of the truck at all times. 3. The device en sures vehicle security and smooth fleet management. 4. You can easily install it in any vehicle such as cars, boats and motorbikes. An SMS will inform you whether the vehicle is stationary or on the move. 5. You can also use it to keep tab on your driver. It reduces vehicle abuse and ultimately results in significant cost-savings for
goods,
Microcontroller-Based Projects
183
,N
IC1 7805
OUT.i.
GND
CI
L
. PBO (XCK/TO)
(ADO) PAO
0.1u
.PB1 (Tl)
.PB2 (INT2/AN0)
P83 (OCO/AIN1)
. (AD2) PA2 .
(AD1) PA1 (A03) PA3 (AD4) PA4 (AD5) PA5 (AD6) PA6
LED1
POWER
. .
.
-I
C4
10U.16V
SI-TACTILE SWITCH
.
.
.PB7 (SCK)
(A07) PA7
-r
RESET
, RESET
ATmegatS
AREF
.
.
C6 +
10u.16V
J CI*
V*
vccl
GND .
81 J.
G"D
AVCC
J CI
ICS
MAX232
TkI Oul.
Rxl in
GPS MODULE
1 0n. 16V
|j
.GND
XTAL2
(TOSC2) PC7
.
.
.
lc2C5
lOu 16V
.C2*
Rxl Out
TkI In l
,XTAJ.1
(TOSCI) PC6 .
Tx2ln.
R*2Cul.
(IU4) PCS
(TOO) PC4
(TMS) PC3
(TCK) PC2
(SOA) PCI
.
.
PI1 l
C3
12MHz
. P04 (OC1B)
.PD5 (OC1A)
. PD6 (ICP)
(SCL)PCO
(OC2) P07
individuals, fleet owners and the like. Before delving into the detailed working of the project, let's discuss some basics of GPS and GSM technolo
gies.
GPS
GPS is a space-based satellite navigation system. It provides location and time information in all weather condi tions, anywhere on or near the Earth. GPS receivers are popularly used for navigation, positioning, time dissemi nation and other research purposes.
The GPS consists of satellites that orbit the earth. These satellites are geosynchronous with an orbital period that is the same as the Earth's rotation period. So they maintain exactly the same position with respect to the earth below them. All the GPS satellites transmit radio signals, which are then captured by a GPS receiver and used to calculate its geographical position. A minimum of four satellites may be required to compute the four dimensions ofX, Y, Z (latitude, longitude and elevation) and time. GPS receiver converts the received signals into position and estimates time and some other useful information depending on the application and requirements. GPS determines the distance between a GPS satellite and a GPS receiver by measuring the amount of time taken by a radio signal (the GPS signal) to travel from the satellite to the receiver. To obtain accurate information, the satellites and the receiver use very accurate clocks, which are synchronised so that they generate the same code at exactly the same time. If accuracy is important, you need GPS with a wide-area augmentation system (WAAS) capability. This is a satellite service providing additional correction information to the GPS receiver in order to increase its accuracy. Before purchasing a GPS receiver, it's good to know the protocols supported by it. Some popular protocols for GPS receivers are: NMEA 0183. An industry-standard protocol common to marine applications defined by National Marine Electronics Association (NMEA), USA. NMEA provides direct compatibility with other NMEA-capable devices such as chart plotters and radars.
184
GPS- and GSM-Based Vehicle Tracking System
I'SIP (trimble standard interfaceprotocol). A binary packet protocol that allows the designer to configure and control the GPS receiver for optimal performance in any number of applica
tions. TAIP (trimble ASCII
Designed specifically for vehicle tracking ap plications. It is a bidirectional protocol using simple ASCII commands with the associated
ASCII responses.
interface protocol).
GSM modem
GSM is a standard set developed by the Euro pean Telecommunications Standards Institute (ETSI) to describe technologies for secondgeneration (2G) digital cellular networks. A GSM modem is a specialised type of
modem that accepts a SIM card and operates over a subscription to a mobile operator just like a mobile phone. GSM modems are a cost-effective solution for receiving SMS messages because the sender is paying for the message delivery. To perform these tasks, a GSM modem must support an extended AT command set for sending and re ceiving SMS messages, as defined in the ETSI GSM 07.05 and 3GPP TS 27.005 specifica
tions.
support this
It should also be noted that not all phones modem interface for sending and Fi9-4:SIM300GSM modem receiving SMS messages, particularly most smartphones like the Blackberry, iPhone and Windows mobile devices.
Circuit description
Fig. 2 shows the circuit of a GPS- and GSM-based vehicle tracking system. It consists of a microcontroller, GPS module, GSM modem and 9V DC power supply. GPS module gets the location information from satellites in the form of latitude and longitude. The microcontroller processes this information and sends it to the GSM modem. The GSM modem then sends the information to the owner's mobile phone. ATmegal6 microcontroller. ATmegal6 microcontroller (IC2) is the heart of die project that is used for interfac ing to various hardware peripherals. It is a low-power CMOS 8-bit microcontroller based on the AVR enhanced RISC architecture. ATmegal6 microcontroller is interfaced serially to a GPS module and GSM modem.The GPS module outputs many data but in this project only the NMEA data is read and processed by the microcontroller. The processed data is sent to the user's mobile through a GSM modem. This project design implements RS-232 protocol for serial communication between the microcontroller, GPS and GSM modem. A serial driver IC MAX232 (IC3) is used for converting RS-232 voltage levels into TTL voltage levels. The user's mobile number should be included in the source code written for the microcontroller. Thus the user's
mobile number resides in the internal memory of the MCU. iWave GPS module. In this project, we have used the iWave GPS module (refer Fig. 3). GPS always transMicrocontroller-Based Projects
185
Fig. 5:An actual-size, single-side PCB for the GPS- and GSM-based vehicle tracking circuit
m
680E
POUER
o
IC2
LED1
0912A
C4
(O
oj
IC3
o
G-GND
T-TXD R-RXD
mits the data to the microcontroller.Transmit pin TXD of GPS is connected to the micro controller via MAX232. NMEA defined an RS-232 communication standard for devices that include GPS receivers. The iWave GPS module supports the NMEA-0183 standard that is a subset of the NMEA protocol. It operates in the LI frequency (1575.42 MHz) and provides information with accuracy of up to 10 metres in open sky. Antenna should be placed in the open space and there should be at least 50 per cent space visibility. GSM modem. In this project, we have used SIM300 GSM modem (refer Fig. 4). GSM modem transmits and receives the data. Mo dem SIM300 is a tri-band GSM/GPRS engine that works on frequencies EGSM 900 MHz, DCS 1800 MHz and PCS 1900 MHz. Transmit pin TXD and receive pin RXD of GSM modem are connected to the micro controller (IC2) via MAX232 (IC3). Port pin PD0 (RXD) and port pin PD1 (TXD) of the microcontroller are connected to pins 12 and 10 of MAX232, respectively Poiuer supply. The circuit is powered off a 9V battery. 7805 regulator (IC1) is used to convert 9V into 5V. The microcontroller and MAX232 are powered by 5V. LED1 indicates the presence of power supply.
The program for the microcontroller is writ ten in 'C' language and compiled using AVR a CE <tx Studio. The user's mobile number should ICN Xbe included in the source code in order to o I0u*4RESET receive the call from the SIM card used in the GSM modem. The hex code of the ATI1E6fll6 BASED is burnt into the MCU using Poprogram UEHICLE TRACKING SYSTEM nyProg2000 software. You can use any other suitable tool for the same. GPS module with 9600 baud rate is used Fig. 6: Componenf layout for the PCB to receive the data from the satellites, which is defined in the software. The software is devel oped to decode the NMEA protocol. This protocol includes a set of messages that use ASCII character set and have a defined format that are continuously sent by the GPS module to the interfacing device. The GPS module or receiver provides data in the form of ASCII comma-delimited message strings. Each message starts with a dollar sign (hex 0x24) and ends with <CR><LF> (hex OxOD OxOA). The software output protocol message includes global positioning system fixed data (GGA) and geo graphic position latitude/longitude (GLL). In this project, we will use GGA only. Note that the latitude and longitude information are both represented in the 'degrees, minutes and decimal
vDca
TJ
m
SI
<b
CP
E
&
;s
Software program
I3u
C7(ft)
186
minutes' format as ddmm.mmmm. However, most mapping applications require longitude and latitude to be ex pressed in decimal, degrees, in 'dd.dddddd' format with a corresponding sign (negative for south latitude and west longitude). So some kind of conversion is required in the software if you want a particular format. The NMEA standard explains how each message string is formed with a dollar sign ($) leading each new GPS
message. For example: SGPGGA,002153.000,3342.6618,N,11751.3858,W where SGPGGA is the GGA protocol header, 002153.000 is UTC time in hhmmss.ss format, 3342.6618 is the latitude of the GPS position fixed data in ddmm.mmmm format, 11751.3858 is the longitude of the GPS position fixed data in dddmm.mmmm format, and 'N' stands for North and 'W'for West. With this data you can find out the exact location using a map or you can use freely available software to check the location.
Testing
1. Connect the circuit to GPS and GSM modem as shown in Fig. 2. 2. Switch on the circuit and you will see LED1 glow. 3. Switch on the GPS module and wait for 10-15 minutes for initialisation. 4. Switch on the GSM modem. 5. Dial the mobile number in the GSM modem. After two rings, the ringing stops automatically. Wait for a few seconds. You will get an SMS alert in your mobile. 6. Check your SMS inbox.You will see the latitude and longitude data in the form of SMS text. 7. Open a standard map and locate the point on the map. You can also enter latitude and longitude values in a software such as on http://www.latlong.net/Show-Latitude-Longitude.html or any other suitable software.
Further applications
This system can also be used where the information is not needed so frequently and the subject has to be tracked at irregular time periods, such as monitoring of adolescents by parents, in research to track animals in the jungle, coordinating search and rescue efforts, and mapping trails and exploring new terrains. Downloadsource code: http://www.efymag.com/admin/issuepdf/GPS%20and%20GSM%20Vehicle%20Tracking%20System.rar
Microcontroller-Based Projects
187
The
prime function of a battery management system is to provide the necessary monitoring and control to protect the battery bank from out-of-tolerance ambient or operating conditions, saving the user from the
consequences of battery failures. The microcontroller-based battery bank protection system described here can monitor the charge level, volt age, run time and temperature of your battery bank. It is designed around PIC16F877A microcontroller and also provides battery protection against high temperature and dry-run. The system is very useful for IT firms, computer laboratories, colleges and schools.
Circuit description
The block diagram for microcontroller-based battery bank protector is shown in Fig. 1. The microcontroller senses the signals from three battery sensing units, temperature sensor and AC mains sensing unit. It controls the supply to the appliances and displays corresponding information on the LCD.Hie power supply section powers the com plete circuit. The keyboard is used for time setting and can also mute the buzzer. Real-time clock (RTC) provides the timing inputs. Microcontroller. PIC16F877A is a low-power, high-performance, CMOS 8-bit microcontroller. Its main features are 8kB flash, 256 bytes of EEPROM, 368 bytes of RAM, 33 input/output (I/O) pins, 10-bit 8-channel analogue-to-digital converter (ADC), three tim ers, watchdog timer with its own on-chip R-C oscillator for reliable operation and synchronous PC interface. RTC DS 1307. Timing inputs are generated by RTC DS1307. It is a low-power, real-time, full binary-coded decimal clock/calendar having 56 bytes of non-volatile static random-access memory (RAM). Address and data are transferred serially via a two-wire, bidirectional bus. The clock/calendar provides seconds, minutes, hours, day, date, month and year information. Battery (BATT) is connected at pin 3 to
PARTS LIST
Semiconductors: IC1 IC2 IC3 IC4 LEDl D1-D20 T1-T3
- LM35 temperature sensor - PIC 16F877A microcontroller - DS1307 RTC - 7805, SV regulator - 5mm red LED
- 1N4007 rectifier diode - BC547 npn transistor
Resistors (all 'A-ivatt, 596 carbon): R1,R3,R5,R7 - 33-kilo-ohm R2, R4, R6, R8,
R15-R21, R25 R9, RIO, Rll, R12,R13 R14 R22, R23, R24
10-kilo-ohm
R26 VR1
Capacitors:
Cl-CS.Cll
C6, C9
C7.C8
16x2 LCD
PIEZO
BUZZER
C10
Miscellaneous:
lOpF, 16V electrolytic - O.lpF polyester 22p ceramic - lOOOpF, 35V electrolytic
MCU PIC16F877A
S1-S5
RTC
SWITCH
RL1.RL2
*tau
XI
TAU
POWER SUPPLY
Fig. 1:Block diagram for microcontroller-based battery bank protector
LCD
BATT. PZ1
188
li si
'
m o IS itvsjsr
'
roooooi
cq
rn
-vwv
-vwv
wo f/)
cc
W 10
CM
S o?S
g 8||
+l(
g+SI
-55C to 150C. Its other important features include linear +10.0mV/C scale factor and current drain of less than 60 (iA. Power supply. The S 230V, 50Hz AC mains is 8 stepped down by trans CL ie e former XI to deliver a sec Q -O ondary output of 12V, 500 mA. The transformer out o put is rectified by a bridge -o "O rectifier comprising diodes S Q D14 through D17, filtered O
*L
0J
1 c
nii WW
KOHzl
230V AC
s o
o
E
12 3
CB E
<N
U_
. and BC547
Microcontroller-Based Projects
189
by capacitor C10 and regulated by IC 7805 (IC4). Diode D18 is used to isolate the filtered voltage from the mains sensing voltage. Diodes Dll,D12 and D13 prevent unregulated sup ply from passing to the batteries when AC mains is 'on'. Capaci tor C9 bypasses the ripples, if any, in the regulated power supply. LED1 acts as the power-on indica tor. Resistor R26 limits current through LED1. Relays RL1 and RL2. Relays RL1 and RL2 are operated through 12V unregulated Fig. 4: An actual-size, single-side PCB for the microcontroller-based battery bank protector supply. These are driven by transis tors T2 and T3, respectively. Port pins RCO and RCl of microcontroller PIC16F877A drive transistors T2 and T3 into saturation to energise relays RL1 and RL2, respectively, to operate the appliances either on AC mains or battery backup. Buzzer. Port pin RC2 of microcontroller PIC16F877A drives transistor Tl into saturation to ring the piezobuzzer (PZ1). Battery and mains voltage sensing circuitry. The battery sensing circuit for BANK1 is a voltage divider circuit made by resistors R1 and R9. The output of the voltage divider is filtered by the combination of resistor R2 and capacitor C2.This signal is fed to ADC channel RA1 of microcontroller PIC16F877A. Diodes D1 and D2 protect the microcontroller ports from voltage spikes. Similarly, outputs of the sensing circuits of BANK2 and BANK3, and mains voltage, are fed to ADC channels RA2, RA3 and RA4 of the microcontroller, respectively. Display. A two-line, 16-character alpha-numeric liquid crystal display (LCD) is used to show the messages. Data lines DO through D7 of the LCD are connected to port B of PIC 16F877A. Register select (RS), control (R/W) and enable (E) lines are connected to port pins RDO, RD1 and RD2 of the microcontroller, respectively. Preset (VRl) is used to set the contrast of the LCD for proper display. Switches. Switches Si (SCRL), S2 (Inc), S3 (Dec), S4 (Set) and S5 (Mute) are interfaced to port pins RC5, RD7, RD6, RD5 and RD4 of microcontroller PIC16F877A to set the real-time clock and mute the buzzer.To set the time and date, press 'Scroll' switch SI. The display will show 'Hour.' Press 'Set' (S4) switch and change the hours value using increment switch S2 or decrement switch S3. Again, press 'Set' switch (S4).The display will show 'minute.' Change the minutes value by using the increment and decrement keys and then again press 'Set' switch. The display shows AM/PM. Select either AM or PM using increment/decrement switch and press 'Set' (S4). Now
fm
190
displayed on the
RL1-R.2-12V,1C'0 RELAY
D1-D20-1N4007
J1-J3" JUMPER
O
o
Cll 10U
o
o o o
o
o
1 IK
o o
BC547 22p
R7 33K R12
Dll D12 D13
C518u
o o o
Pifl
LCD. Port pins RC5, RD7, RD6, RD5 and RD4 of microcontroller PIC16F877A are pulled high with resistors R15 through R19, respectively, and RD3 is pulled down by resis
tor
Po
R19 18K
return.
R1510K B-CIX3
R21 10K
loop
VR1
BAT1.
DRY RUNNING
Fig. 9: Indication for battery power below 60
percent
An actual-size, single-side PCB for microcon troller-based bat tery bank pro tection is shown in Fig. 4 and its component layout in Fig. 5. Assemble BAT-3 POWER: 099% the circuit on a PCB as it minimises time MAINS VOLT :206 V and assembly errors. Carefully assemble the components and double-check for Fig. 8: Power indication of overlooked error. Use proper IC battery bank 3 and mains any base for the microcontroller and RTC. voltage Before inserting the ICs, check all the
S5
S*
S2
S3
supply voltages.
When power is switched on, the "microcontroller-based bat tery bank protection" message is displayed on the LCD along with a short beep from piezobuzzer PZl.The battery temperature is sensed by LM35 and displayed on LCD (refer
w> kiu rt
M<Mq
lUfl MM
II
nr
NMM4
nil- tMt
llir miu
iMlt %kl W 4|Mla4 Iiwit-Mfii M u .#._ fa. M Mlc! ! h ll* mi pt mwtm > W| > Him PkaM Mli mi fa<
'MM
f c*
Crnmrn ytMMIMa XI
Fig. 6). Simultaneously, the real time is read from RTC IC DS1307 and displaved on LCD (refer Fig. 6). When the battery temperature rises above 50C, the piezobuzzer sounds an alarm continu ously and both the relays de-energise to cut off the power to appliances. The display can be scrolled down to check the power of batteries 1 and 2. Powers of batteries 1
191
Microcontroller-Based Projects
and 2 are sensed by the ADC of the microcontroller.The ana logue input is converted into 8-bit digital data by the ADC. Header Files Used in the Program The sensed battery power is displayed on the LCD in terms Files and subroutines Functionality of percentage (refer Fig. 7). Generate a time delay The display can be scrolled down again to check the volt #include "delay.c" Configure master/slave port #include "i2c_bat.h" ages of battery-3 and mains. The analogue input is converted Contains the display subroutine into 8-bit digital data by the ADC. The mains voltage is #include "lcd_bat.h" sensed from the unfiltered output of the bridge rectifier. The #include "adc_bat.h" Contains the analogue-to-digital conversion data sensed battery-3 and mains voltages are displayed on the LCD (refer Fig. 8). If any battery bank (say Battery Bank 1) void control(void) Control real-time monitoring process down the below 60 is on as it LCD displayed goes per cent, indicated in Fig. 9. Piezobuzzer PZ1 sounds continuously if void key(void) Check the status of the pushbutton and set the real time all batter)' banks go below 60 per cent. When the mains fail, the microcontroller shifts the appli ances from mains to battery supply through relay RL2. The display scrolls down further to show the changeover time real time at which the supply changes from mains to battery supply (refer Fig. 10).
Software
The program is written in 'C' language and compiled using HI-TECH PICC compiler to generate hex code. The generated hex code is burnt into the microcontroller using a suitable programmer with configuration bit setting. The set configuration bit is shown in Fig. 11. When the system is switched on, the main program initiates the LCD. The display scans every five seconds, showing all the parameters. The control subroutine monitors all the parameters at the background without interrup tions. CLRWDT( ) is used to reset the watchdog timer. If the microcontroller cannot reset the watchdog timer to the particular time period, an internal reset can be generated to reset the microcontroller to avoid malfunction.The header files used in this program are shown in the table. Download source code: http://www.efymag.com/admin/issuepdf/Microcontroller%20Based%20Battery%20
Bank%20Protection.rar
192
Ti
traffic light intervals are fixed independent of the traffic movement. So sometimes large red-light delays
XI
>0
MCU P89V51RD2
16x2 LCD
POWER SUPPLY
S1-S4 XI RL1-RL3
IR RX2 1 IR RX1 I
B1 B2 B3
~r
KEYPAD
Microcontroller-Based Projects
193
LED1
4701i
R1 POWER
R15, 100S2
16x2 LCD
\\\\\
IC2
P89V51RD2
1N4007
S4
ENTER
O O
S3 Ma DOWN
BOMB
230V AC
0 O
R11
AAAA
S2
o o
UP
l50Hzfl
T4 T5
05
1 6V
S1
B RESET R2-R7 = 10K
R8-R12 = 1K
WMth
33p
IC 7805 (ICl), five BC337 transistors (Tl through T5), two L14F1 phototransistors (T6 and T7), an LCD module, and a few discrete components. Pin configurations of IC 7805 and transistor BC337 are shown in Fig. 3. The 230V, 50Hz AC mains is stepped down by transformer XI to deliver a secondary output of 6V, 500mA. The transformer output is rectified by a full-wave rectifier comprising diodes D1 through D4, filtered by capacitor CI and regulated by IC 7805. Capacitor C2 CBE bypasses the ripples, if any, in the regulated supply. LED1 acts as the power-on indicator. Fig. 3:Pin details of Resistor R1 limits the current through LED1. 7805 and BC337 The microcontroller is the heart of the system. It is an 8-bit, 40-pin, low-power, high-performance device with in-system programming (ISP) and in-application pro gramming (IAP) features. It has 64 kB of Flash, 1024 bytes of internal RAM, 32 input/output lines, three 16-bit timers/counters, eight interrupt sources with four priority levels, serial peripheral interface (SPI) and enhanced UART, programmable counter array with pulse-width modulation and capture/compare functions, programmable watchdog timer, on-chip oscillator and clock circuitry. In addition, it supports two softwareselectable power-saving modes idle mode and power-down mode. The system clock plays a significant role in the microcontroller's operation. A 11.0592MHz quartz crystal is connected across pins 18 and 19 of the microcontroller to provide it basic clock frequency. Capacitors C3 and C4 connected to the crystal maintain the resonance. Power-on reset at pin 9 is provided by the combination of capacitor C5 and resistor R2. Switch Si is used for manual reset. Port pins P3.0 and P3.1 of the microcontroller control IR transmitting LEDs TX1 and TX2 through transistors T5 and T4, respectively. Port pins P3.2 and P3.3 receive the detected signal from the collector of
194
Microcontroller-Based Intelligent Traffic Light System
phototransistors T7 and T6, respectively. Phototransistors T6 and T7 conduct on receiving IR signals from TX2 and TX1 and provide a low output at pins P3.3 and P3.2 of the microcontroller, respectively. Whenever any vehicle comes in between the IR transmitters and Fig. 4: Display on the LCD receivers, T6 and T7 stop conduct ing to provide a high signal to port CRESTART)pins P3.3 and P3.2 of the microcon JL INITIALISE STACK troller, respectively, indicating the POINTER AND LCD of a vehicle between the IR presence X DISPLAY Hie microcontroller counts modules. WELCOME MESSAGE the number of vehicles between INITIALISE TIMER IR transmitting LEDs and photo transistors by detecting the number READ TRAFFIC PROFILE. VEHICAL COUNT, DELAYS of high signals at its pins P3.2 and AND CONTROL INTERVAL FROM FLASH MEMORY P3.3. Traffic profile is computed by START SYSTEM. the microcontroller in a predefined MAKE P3.0 AND P3.1 HIGH FOR IR LED delay (controller interval) according to the vehicle count. VEHICLE COUNT=0 INITIALISE CONTROLLING The microcontroller controls INTERVAL red, yellow and green lights (con UPDATE PROFILE UPDATE CONTROLLING VEHICLE COUNT AND APPLY TRAFFIC LIGHT nected to its pins P3.6, P3.5 and INTERVAL TRAFFIC DELAYS DELAYS FOR RED. YELLOW & GREEN P3.4, respectively) according to the traffic profile. The traffic lights are CHECK PHOTO UPDATE TRANSISTOR connected to the microcontroller's PROFILE PROFILE OUTPUT AT P3.2 CONTROL DELAYS EHICLE COUNT AN NTERVAL through relays. Transis pins output TRAFFIC DELAYS OR CONTROLLING T3 drives tor relay RL3 for the red INTERVAL INCREASE VEHICLE light. Similarly, yellow and green COUNT BY HIGH ONE lights are controlled by pins P3.5 DEACTIVATE and P3.4 through relays RL2 and TIMER ANDIR LED RL1 driven by transistors T2 and ENTEF CONFIGURATION Tl, respectively. D5, D6 and D7 act iodeH as free-wheeling diodes for protec tion of respective relays. INCREASE TIME The system information is dis BY ONE SECOND played on the LCD. Port pins P1.0 UPDAIfc DISPLAY through PI.7 of the microcontroller are connected to data port pins DO through D7 of the LCD. Control CONTROLLING INTERVAL register-select (RS), read /write pins COMPLETED ? (RAV) and enable (E) are connected to port pins P2.7, P2.6 and P2.5, CALCULATE TRAFFIC PROFILE BASED respectively. All the data is sent to ON VEHICLE COUNT the LCD in ASCII format and the 1 r 1 commands in hex format. Preset LOW MEDIUM HIGH TRAFFIC PROFILE TRAFFIC PROFILE TRAFFIC PROFILE VR1 connected to pin 3 of the LCD 1 allows contrast control. READ LOW READ HIGH READ MEDIUM PROFILE PROFILE TRAFFIC PROFILE TRAFFIC Fig. 4 shows a traffic profile dis TRAFFIC LIGHT LIGHT DELAYS LIGHT DELAYS DELAYS FROM FROM MEMORY FROM MEMORY on the LCD. LI in the first played MEMORY the LCD indicates the lane of line F or location where this system has Fig. 5: Software flow-chart been installed.The next character (R,
Microcontroller-Based Projects
195
Y or G for red, yellow or green) in dicates red as the currently-running traffic light. The next three digits indicate the remaining time (in seconds) of the current traffic light. The next three characters (LOW, MED and HIG for low, medium and high) show the current traffic Q0000060 profile based on the number of vehicles that passed through the IR transmitter-receiver pairs in the last controlling interval. The second line of the LCD starts with the system running time in hours, minutes and sec onds. Next is the number of ve hicles that have passed through Fig. 6:An actual-size, single-side PCB for the microcontroller-based intelligent traffic light the traffic light's IR sensor system. system Based on this vehicle count and traffic profile, the system applies ENTER JJ_ 00UN /|LD1 traffic delays for the next control LR6 ICKfc /v~0 O interval. ling R5 10K 1CUOu 01128 The IR sensor system is in stalled before the traffic light, say, 500 metres away from the traffic P89U5IR02 > light. Applying the traffic profile R7 and respective traffic delays based 1OK 6U AC on the previous controlling interval C3,C4=33p helps the system to manage traffic R3.R4=lOK Rl3,RH=47E congestion to some extent. Ol-DINIOO? I* Tl -T5=BC337 Switches 'Up,' 'Down' and 'En LCD J 2 ter' connected to pins P2.0, P2.1 pmriilooooooooooooooo Tl LOK HL Z and P2.2 of the microcontroller, re NTELLIGENT TRAFFIC LIGHT SY! spectively, allow the user to change 7=Lltn Jl-Ji=JUMPER WIRE the traffic profile, vehicle count, traffic delays in respective profiles Fig. 7:Component layout for the PCB and controlling interval. 'Up' switch is for increasing and 'Down' switch is for decreasing the default values of system parameters. The default parameter and II,respectively. The value set by values for different traffic profiles and parameter ranges are shown in Tables I the user using 'Up' and 'Down' switches is accepted only after pressing 'Enter' switch.The system can be made to enter configuration state by pressing 'Enter' key while running.
fl
o o
mm
dm;
Software
The source program for the microcontroller-based intelligent traffic light system is written in Assembly language and assembled using A5 1 assembler. The generated hex code is burnt into the microcontroller using a suitable programmer. Flash Magic programmer can also be used to burn the hex code through a serial cable.The program works as per the flow-chart shown in Fig. 5. The default values of system parameters like traffic profile, vehicle count and traffic delays for respective profile are stored at memory location 2000H. The two-digit controlling interval is stored at memory location 2080H. Storing the traffic vehicle count/traffic delays and controlling interval in two separate blocks allows separate
196
Microcontroller-Based Intelligent Traffic Light System
updation of the required parameter. Whenever the configu ration parameters are changed through switches and LCD interaction, different memory blocks are erased and updated
parameters written to the same.
TABLE I
Sub-routine 'erase_config' erases memory blocks 2000H through 207FH, which are used for storing the traffic profiles,
vehicle
counts
20FFH, which are used for storing the controlling interval. Sub-routine 'write_fiash' handles writing any byte stored in the accumulator to any memory location. Timer TO of the microcontroller is configured to roll over at a delay of 10 milliseconds. The roll-over is handled by 'intr_service' interrupt service routine. One-second delay formed by 10-milliseconds delay of timer TO is used to man age the functionality of the entire system.
Vehicle count for low profile Vehicle count for medium profile Vehicle count for high profile Red light delay for low profile Yellow light delay for low profile Green light delay for low profile Red light delay for medium profile Yellow light delay for medium profile Green light delay for medium profile Red light delay for high profile Yellow light delay for high profile Green light delay for high profile Control interval
05 vehicles 10 vehicles
15 vehicles 01 1 seconds
006 seconds 009 seconds 010 seconds 006 seconds 011 seconds 008 seconds 005 seconds 013 seconds 01 minute
An actual-size, single-side PCB for the microcontrollerbased intelligent traffic light system is shown in Fig. 6 and its component layout in Fig. 7. Assemble the circuit on a PCB as it minimises time and assembly errors. Carefully assemble the compo nents and double-check for any overlooked error. Use proper IC base for the microcontroller. Before inserting the ICs, check the supply voltage. Align infrared LEDs and photo-transistors such that these directly face each other. Cover the photo-transistor with a mask to protect it from light. Using preset VR1, set the LCD contrast for proper display.
TABLE II
Parameter Ranges
Parameter
Range
Control interval
Microcontroller-Based Projects
197
BIKRAMJEET WARAICH
R:
adio-frequency identification (RFID) is an automatic identification method wherein the data stored on RFID tags or transponders is remotely retrieved. The RFID tag is a device that can be attached to or inorporated into a product, animal or person for identification and tracking using radio waves. Some tags can be read from several metres away, beyond the line of sight of the reader. RFID technology is used in vehicle parking sys Car Parking System tems of malls and buildings (refer Fig. 1). The system normally consists of a vehicle counter, sensors, display board, gate controller, RFID tags and RFID reader. Presented here is an automatic vehicle parking system using AT89S52 microcontroller.
CHIP
ENCAPSULATION MATERIAL
ENCAPSULATION MATERIAL
SILICON
CHIP
CHIP PAD
PRIMER
traffic passing by on a freeway. The electromagnetic field produced by the antenna can be constantly present when multiple tags are expected continually. If constant interrogation is not required, a sensor device can acti vate the field. Often the antenna is packaged with a transceiver and decoder to act as a reader (interrogator), which can be configured either as a handheld or a fixed-mount device. The reader emits radio waves in the range of 2.5 cm to 30 metres or more, depending upon its
RFID-Based Automatic Vehicle Parking System
198
s. <=
MOTOR DRIVER
MCU AT89S52
K>0
when they move through the supply chain. Any update to the information has to be maintained Fig. 4: Block diagram of RFID-based automatic vehicle parking system in the application software that tracks the stock-keeping unit's movement and activity. 2. Write-once tags enable the user to write data once in the production or distribution process. The data may include a serial number or lot or batch number. 3. Full read-write tags allow new data to be written to the tageven over the original datawhen needed. Ex amples include the time and date of ownership transfer or updating the repair history of a fixed asset. While these are the most costly of the three tag types and impractical for tracking inexpensive items, future standards for electronic product codes (EPCs) appear to be headed in this direction. Other features of the tag include: Data capacity. The capacity of data storage on a tag can vary from 16 bits to several thousand bits. Of course, the greater the storage capacity, the higher the price of the tag. Formfactor. Hie tag and antenna structure can come in a variety of physical form factors and can either be self-contained or embedded as part of a traditional label structure (termed as 'smart label,' it has the tag inside what looks like a regular bar code label). Passive and active. Passive tags have no battery and broadcast their data only when energised by a reader. It means these must be actively polled to send information. Active tags broadcast data using their battery power. This means their read range is greater than passive tagsaround 30 metres or more, versus 5 metres or less for most passive tags. The extra capability and read range of active tags, however, come at a cost. These are several times more ex pensive than passive tags. Today, active tags are much more likely to be used for high-value items or fixed assets such as trailers, where the cost is minimal compared to item value and very long read ranges are required. Most traditional supply chain applications, such as the RFID-based tracking and compliance programmes emerging in the consumer goods retail chain, use the less expensive passive tags.
Microcontroller-Based Projects
POWER SUPPLY
power output and the radio frequency used.When an RFID tag passes through the electromagnetic zone, it detects the reader's activation sig nal. The reader decodes the data encoded in the tag's integrated circuit (silicon chip) and communicates to the host computer for processing. Tags (transponders). Fig. 3 shows the internal structure of a typical RFID tag. It comprises a microchip containing identifying informa tion about the item and an antenna that transmits this data wirelessly to the reader. At its most basic, the chip contains a serialised identifier or licence plate number that uniquely identifies that item (similar to bar codes). A key difference, however, is that RFID tags have a higher data capacity than their bar code counterparts. This increases the op tions for the type of information that can be encoded on the tag; it may include the manufacturer's name, batch or lot number, weight, owner ship, destination and history (such as the temperature range to which an item has been exposed). In fact, an unlimited list of other types of information can be stored on RFID tags, depending on the application's requirements. RFID tag can be placed on individual items, cases or pallets for identification 16x2 LCD purposes, as well as fixed assets such as trail ers, containers and totes. There are different RFID READER types of tags with varying capabilities: MODULE 1. Read-only tags contain such data as a serialised tracking number,which is pre-written INFRARED onto these by the tag manufacturer or distribu MODULE tor. These are generally the least expensive tags as no additional information can be included
199
15
LEDIS.
I-VWV
4701!
R1 POWER
R3.100i2
16
3
4
-"VWV
VR2.100K
31
P2.7
D7 D6 D5 D4 D3 D2 D1 DO RS
R/W
'
P2.6
P2.5
P2.4
P2.3
IC4(A.B)=LM358
P2.2
IC3 AT89S52
B 1 9 16
P2.1
P2.0
P3.7
P3.6
IC5 L293D
6 14
P1.2
P1.1
RST.
S3 i
-O O-
S2
-o oR2
10K
P1.7
R8
mm
MM5
230V AC
19
220(2
READER
:iok
C4
22p
: R9
10m 1
16V
C2
9B RESET
h si
R10
220il
LED2
Xtal
C3
22p
T1
J-L
BC547
Xtal = 11.0592MHz
PZ1
o
7805 7812
rsri i
Frequency range. Like all wireless communications, there are a variety of frequencies or spectra through which RFID tags communicate with readers. Again, there are trade-offs among cost, performance and application requirements. For instance, low-frequency tags are cheaper than ultra-high-frequency (UHF) tags, use less power and are better able to pen
etrate non-metallic
substances. These are ideal for scanning objects with high water content, such as fruit, at close ranges. OUT CBE UHFs typically offer longer range and can transfer data faster. But these use more power COM and are less likely to be effective with some materials. Fig. 6: Pin details of Electronicproduct code (EPC) tags. EPC is an emerging specification for RFID tags, readers 7805,7812 and BC547 and business applications. It represents a specific approach to item identification, including an emerging standard for the tagswith both the data content of the tag and open wireless communication protocols. RFtransceiver. RF transceiver is the source of RF energy used to activate and power the passive RFID tags. It may be enclosed in the same cabinet as the reader or it may be a separate piece of equipment. When provided as a separate piece of equipment, the transceiver is commonly referred to as an RF module. RF transceiver controls and modulates the radio frequencies that the antenna transmits and receives. The transceiver filters and amplifies the backscatter signal from a passive RFID tag.
i:
1/
ft
v
LCD1
Fig. 7: An actual-size, single-side PCB for the RFID-based automatic vehicle parking system
RFID BASED PARKING SYSTEfl 0112B
220E< D2K|(;i:-i=lN',0020E:-
UR3 CONT.
LED2
MMMMMMMNMMMMIIMMMMAMM
C3, C4 = 33
o..i
JS
loop
AT89S52
I
(oo)
v
I1.05S2
'
15U AC
lm/y
D BBOOBBODOBOOO DBOBBB
COM3
.E9
L793D
I S2
9QG00
2%, M;
aI
f\
(~ )
1000lJ
I|o Ol"
S3
D 00000 Q
OmO]
LED!
J:
POWER
CON2
_____
R7
UB2 100K
ft*
in 220E
RFID READER
C0N4
J1-J5=JUMPER WIRE
R2 1OK
in
=i f trr J2 uriiookrO
the vehicle with the parking owner and get the RFID tag. When the car has to be parked, the RFID tag is placed near the RFID reader, which is installed near the entry gate of the parking lot. As soon as the RFID tag is read by the reader, the system automatically deducts the specified amount from the RFID tag and the entry gate boomer opens to allow the car inside the parking area. At the same time, the parking counter increments by one. Similarly, the door is opened at the exit gate and the parking counter decremented. The system also offers the facility to recharge the amount for each RFID tag. No manual processing is involved. In addition, the system provides security.
Circuit description
Fig. 5 shows the circuit of the RFID-based automatic vehicle parking system. The circuit can be divided into different sections: Power supply. Connector CON1 (refer Fig. 8), diodes D1 through D4, capacitor CI, and voltage regulator ICs 7805 (IC1) and 7812 (IC2) form the power supply section of the automatic vehicle parking system. CON1 is a three-pin connector that provides 15V AC or DC power supply to the circuit. In case of 15V AC, diodes D1
Microcontroller-Based Projects
201
through D4 form a bridge rectifier to rectify the AC supply. Capacitor PARTS LIST Cl filters out the ripples from the rectified output. ICs 7805 and 7812 Semiconductors: provide regulated +5V and +12V, respectively, to the circuit. +5V is used IC1 - 7805, 5V regulator to operate the microcontroller, LCD, RFID and IR sensor circuit and IC2 - 7812, 12V regulator IC3 AT89S52 microcontroller +12V operates the motor. LM358 dual-operational IC4 AT89S52 microcontroller. AT89S52 is a low-power, highamplifier performance CMOS 8-bit microcontroller with 8kB Flash memory. RFID reader - 9-pin 125kHz RFID reader It is compatible with the industry-standard 80C51 instruction set LED1, LED2 - 5mm light-emitting diode and pin-out. The on-chip Flash allows the program memory to be IR LED1, IR LED2 - 5mm infrared transmitter reprogrammed in-system or by a conventional non-volatile memory diode programmer. Other features include 256 bytes of RAM, 32 input/ IRD1, IRD2 - 5mm infrared receiver diode - 1N4007 rectifier diode output lines, watchdog timer, two data pointers, three 16-bit timers/ D1-D4 T1 - BC547 transistor counters, a six-vector two-level interrupt architecture, a full-duplex (all '/i-watt, 5% carbon): Resistors serial port, on-chip oscillator and clock circuitry. R1 - 470-ohm Connectors CON2 through CON4. CON2 and CON3 are two-pin R4, R6, R8, R10 - 220-ohm connectors that connect the 12V DC motors to the circuit for control R2,R9 - 10-kilo-ohm - 100-ohm ling the entry and exit gate boomers. CON4 is a ten-pin dual-in-line R3 R5,R7 - 1-mega-ohm female connector that connects the RFID reader module to the circuit. VR1, VR2 - 100-kilo-ohm preset L293D motor driver. H-bridge DC motor driver L293D (IC5) VR3 - 10-kilo-ohm preset operates the DC motors to open the door or barrier for entry into and Capacitors: - lOOOpF, 35V electrolytic exit from the parking lot.Two high-current motor drivers can be used Cl C2 lOpF, 16V electrolytic in place of L293D and 12V DC motors to control the entry and exit C3, C4 - 22pF ceramic gates, respectively. C5 - 0.1pF ccramic LM358 op-amp. Dual-operational amplifier LM358 (IC4) is used Miscellaneous: as a voltage comparator to compare the output of the IR sensors with a LCD1 - 16x2 LCD display module - DC connector fixed threshold voltage in order to know whether the IR beam is inter CON1 CON2, CON3 - Tvvo-pin berg strip male or not. rupted connector IR transmitter and receiver. Two IR transmitter- receiver pairs are CON4 - 9-pin berg strip female used.The IR LEDs are connected in forward-biased condition to the connector - Piezobuzzer +5V power supply through 220-ohm resistors. These emit IR light, PZ1 - 11.0592MHz crystal which is interrupted when an object comes into its way to the IR re TALI S1-S3 - Tactile switch ceiver. The IR receiving photodiodes are connected in reverse-biased M1,M2 - DC motor - 230V AC primary to 15V, condition to +5V power supply through 1-mega-ohm resistors. When XI 500mA secondary transformer the IR light falls on the photodiodes, their resistance changes and so does their output. This output is compared with a fixed voltage to give a digital output to the microcontroller in order to judge the entry and exit of the vehicles. LCD display. LCD1 is a two-line, 16-character, alpha-numeric liquid crystal display. Data lines DO through D7 of the LCD are connected to port 2 of AT89S52 (IC3). Reset (RS) and enable (E) control lines are connected to port pins P3.6 and P3.7, respectively. Control lines control data flow from the microcontroller to LCD1. When power is switched on, LED1 glows to indicate the presence of power in the circuit and LED2 glows to indicate the presence of RFID reader. Simultaneously, the Automatic RFID Car Parking' message is displayed on LCD1 along with a short beep from piezobuzzer PZ1. Transistor BC547 drives the buzzer. Pin details of 7805, 7812 and BC547 are shown in Fig. 6. When a car crosses the IR LED1-D1 pair installed at the entry gate, the gate boomer does not open until an RFID tag is placed near the RFID reader. After the tag is placed near the reader, the gate boomer opens for three seconds and closes automatically. If the initial recharge amount was Rs 900, the LCD display shows ' Vehicle 1 Amount' in the first line and 'Deducted 100'in the second line, followed by 'Balance Amount' in the first line and '800' in the second line. It is then followed by display of 'Number of Cars' in the first line and '001' in the second line. If the parking lot is full, the message "Parking is Full, Sorry for Inconvenience" is displayed on LCD1. When a car leaves the parking area and crosses the IR beam between IR LED2 and D2 at the exit gate, the vehicle count decreases by one. The LCD shows the number of cars in the parking lot along with "Thanks for Visiting" message.
202
RFID-Based Automatic Vehicle Parking System
Software
The program (parking.c) for the microcontroller is written in C and compiled using Keil software to generate the hex code. The program coding starts with '#include<reg51.h>'and '#include<string.h>' header files. The microcon troller port pins are defined using 'sbit' function for interfacing with the surrounding peripherals. The entry gate
motor
is controlled using 'sbit START_POINT=PlA3;'code. The LCD is initialised using the following code:
<
lcdcmd (0x38) ;
DelayMs (250) ;
lcdcmd(OxOE) ;
DelayMs (250) ;
lcdcmd (0x01) ;
DelayMs (250) ;
lcdcmd(0x06) ;
DelayMs (250) ;
lcdcmd (0x80) ;
DelayMs (250) ;
>
Vehicle%20Parking%20System.zip
PARKING.C
//Automatic RFID Based vehicle Parking System
#include<reg51 h> #include<string.h>
sbit START_POINT=Pl "3; sbit TERMINATE_POINT-Pl * 4 ;
void lcdData (unsigned char 1); void lcdcmd (unsigned char k) ; void buzzer (unsigned int time); void DelayMs (unsigned int count); void display (unsigned char s,t,u); void Welcome (unsigned char c[], unsigned char d[]); void ConvertAndDisplay (unsigned int valuel, unsigned char c[ ) ) ;
void dcMotor();
void main ( )
{
Microcontroller-Based Projects
203
TMOD-Ox2C);
I
ledinit () ;
Welcome ("VEHICAL1 DelayMs (1000) ;
Amojnt
TR1-1;
Sl=l; S2=l;
amount2-100;
if (amount2>0)
BUZZPORT=0;
<
START_POINT=0; TERMINATE_POINT-0;
ledinit () ; Welcome ("AUTOMATIC RFID","CAR PARKING");
DelayMs (1000) ;
else
<
while (1)
I
known : while (SI
araount2=0; Welcome ("VEHICAL1 Amount "."BALANCE NIL"); buz2er (500) ; Welcome ("Recharge Your", "Card Please"); while (rcl==lssrc2==l ) ; if(rcl==0) (
1 SS S2
I
1);
if ( S2==0 )
(
Welcome ("Card is
amount 900") ;
recharged", "with
if (rc20)
1
count
while (rc2==0) ;
amount2=500; Welcome ("Card
500") ; ) ) ) if (amount2==400)
is
recharged" , "with
amount
DelayMs (1000) ;
goto known;
(
<
else
I
count-0; ConvertAndDisplay (count, "Thanks
for Visit");
)
DelayMs (1000) ;
count+t;
DelayMs (1000) ;
goto known;
)
else
{
if (S1==0)
I
while (S1==0) ;
for (i=0;i<12; i++)
(
buzzer (500) ;
DelayMs (1000) ; goto known;
)
c[i]=0xFF;
)
while (RI==0) ;
//command to
void Welcome (unsigned char c[], unsigned char d[]) f
unsigned int i-0;
lcdcmd(OxOl) ; DelayMs (10) ; lcdcmd(0x80) ; DelayMs (10) ;
j-0;
while (RI==0)
if ( j>=1000)
goto timeout; DelayMs (1) ;
<
j++;
)
c [i] =SBUF;
RI=0; )
f
lcdData (c [i] ) ; i++;
)
timeout:
i=strncmp (c, d, 10) ;
if(result==0
ss
countclO)
lcdcmd(OxcO) ;
204
DelayMs (10) ;
i-0;
while(d[i)
!='\0' )
DelayMs (1) ;
EN=0 ;
return;
void
int
valuel, unsigned
unsigned int i,a=0,j; unsigned char dl,d2,d3; for (i-0; icvaluel; i++)
a=a+l;
// // Delay mS function //
void DelayMs (unsigned int count) ( // mSec Delay 11.0592 Mhz unsigned int i; // Keil v7.5a
lcdcmd (0x01) ;
while (count)
i = 115;
whi le ( i>0)
// 115
i ;
exact
j-0;
while (c [ j
(
count
1 !=' NO'
lcdData (c [ j ] ) ;
i
void dcMotorO
:++;
)
f
//digits before desible point
dl=a%10;
START_P01NT=1; TERMINATE_POINT=0;
DelayMs (400) ;
START_PC)INT=0; TERMINATE_POINT=0;
DelayMs (2000) ;
lcdcmd (OxcO) ;
DelayMs (10) ; display (dl, d2, d3) ;
)
START_POINT=0 ;
TERKI NATE_PO I NT- 1; DelayMs (400) ;
START_POINT=0;
TERKINATE_POINT=0;
<
//convert
each
digit
to
;
;
;
;
//Display
the
H
// Led data display / I void lcdData (unsigned char 1)
( P2-1;
RS-1; EN=1;
DelayMs (1) ;
EN=0;
return; )
DelayMs ( time) ;
BUZZPORT=0;
n
// Led command II
Microcontroller-Based Projects
205
BODHIBRATA MUKHOPADHYAY
scientific calculator gives you quick access to certain mathemati 1 PARTS LIST cal functions. Basically, it's an electronic calculator designed to Semiconductors: solve problems in science, engineering and mathematics. IC1 - PIC18F4580 microcontroller - 7805 5V regulator Here we present a microcontroller-based scientific calculator. Its IC2 Resistors (all 'A-watt, 5% carbon): main features are: - 10-kilo-ohm 1. Out of the 20 switches on the 5x4 matrix keypad, seven are for R1 - 1-kilo-ohm R2-R5 mathematical operations, performing 17 mathematical functions. That R6 - 100-ohm is, one switch can perform more than one mathematical function; for VR1 - 10-kilo-ohm preset example, a single switch for sine, cosine and tangent functions, and a Capacitors: - 22pF ceramic disk single switch for log and In functions. C1.C2 C3 - 0.1pF ceramic disk 2. It performs operations on signed numbers. - 2.2|jF, 16V electrolytic 3. Hie calculator accepts four digits for integer place and two digits C4 Miscellaneous: for decimal place. The output has a total of eight digits for integer and S1-S21 - Push-to-on tactile switch decimal places but the maximum number of digits in decimal place is S22 - On/off switch limited to four. - 16*2 line LCD module LCD - 20MHz crystal 4. The program is written such that inputting wrong data is made XrAL - 9V battery BATT. difficult. For example, while inputting an integer, it will not accept any
C3 _L
0.1M
RESET
R1 i 10K<
O
32
7805
1 2 3
11
5
4
RA3
OUT
3
IC2 COM 7805'
S21 -O O-
RA2 RA1
RAO
IN I I IOUT COM.
MCLR RC1
RCO
RC5
1 IN
' 2.2m,16V
1
C4
16
2
IC1 PIC18F4580
37
S22
ON/OFF
15
RB4
SVp
S13
c,-7'orJ '
S14
S20
SWITCH
24
27
T BATT.
9V
RD4
RD5
RD6
36
RB3
28
29
35
34
RB2
RB1
s>vr
cr S15 ,0_
S16 5
V' suo_
S8
R6
RD7
1000<
RS
D4 D5 D6
30
33
12
13
14
RBO
J'"R2 \
S4
15
11
12
D7 13 14
31
r
VR1 10K
16X2 LCD
1
HDH
XTAL 20MHz
C1 22p
C2
1K1
R3:
1K<
R4
1K
Rt>:
1K
16
22p
206
operator function even if you press the operator switches. Error will of course occur if the answer is out of range.
Circuit description
Fig. 2:An actual-size, single-side PCB for the microcontrollerbased scientific calculator
Fig. 1 shows the circuit of the microcontroller-based sci entific calculator. Microcontroller PIC18F4580 is at the heart of this calculator. It has 32 kB of enhanced Flash programmable memory, five bidirectional input/output ports, four timers, 11-bit analogue-to-digital converter, two comparators and is also capable of serial communication. It offers different oscillator options to provide the basic clock frequency. Power-on reset is provided by the combination of resis tor R1 and capacitor C4. Switch S21 is used for manual reset. A 20MHz crystal connected to pins 13 and 14 pro vides the basic clock to the microcontroller. Port pins RD4 through RD7 of the microcontroller are connected to data port pins D4 through D7 of the LCD module, respectively. The microcontroller drives the LCD in 4-bit mode and sends the data in two nibbles (4-bit parts) for display on the LCD. Port_gins RCO, RC1 and RC5 are connected to read/write (R/W), register-select (RS) and enable (E) of the LCD, respectively, to control the LCD operation. Preset VR1 is used for contrast control of the LCD. The 5x4-matrix keypad is interfaced to microcontroller
ooo loo<
iiTf&(E
31211 Jl-J4 = J'JMPER
OOOO 6 (1 O13 2 l
o"b1
UR1
1OK
QQ JJQ JQ JJ J JJJJJ J J J JQ
ICl
Keypad Details
Switch
S1 S2
Function
1 2
PIC1SF 4580
S3 S4
0000000090000000000
CI C2-
S17
s,rw>if
R5 IK
_ XTAL 20HHZR2 R3 R4
ocio
SI 3
S20
Sl6
S5 S6 S7 S8 S9 S10
3 4 5 6 7
8 9 0
PIC18F45 80 through its port pins. Its five rows are connected to five pins of Port B (RBO through RB4) and four
columns to four pins of Port A (RAO through RA3). Key debounce tech nique is used
eliminate false key-press detection. The microcontroller scans the key pad continu ously to detect and identify the
to
0C20 C4 2. 2uw
C3
-V
.2|o~ol
RllOK,
O0O poj
si
S2
SI 2
+/AC
ADD/SUB
MUL/DIV POW/SQR/SQRT INV./EXP EXC
o
S3
S8
S15
S16 S17 S18 S19 S20
O'gS w
SI|K o
S4
key pressed by the user. Eight out of 20 keys (Si through S20
207
Microcontroller-Based Projects
0000
switches) can perform more than one function at a time. IC 7805 (IC2) provides regulated 5V to the circuit. Capacitor C3 bypasses ripples, if any, in the regulated supply. An actual-size, single-side PCB for the microcontroller-based scientific calculator is shown in Fig. 2 and its component layout in Fig. 3. Assembling the circuit on a PCB minimises time and assem bly errors. Carefully assemble the components and double-check for any overlooked error. Use bases to avoid damage to ICs due to direct
'+' sign
+1234.56 OPERATOR
(c) After the first operand is inputted the word 'operator' shows up
S0000
+1234.56
(e) -23 is the second operand data. The letter 'E' indicates the user to press the
Functions assigned to different switches on the keypad are shown in the table. Fig. 4 shows the user manual of the calculator for division of two numbers. The key is used to give sign to the number. It works only when the cursor is below letter 'S' displayed on the LCD. If it is pressed once V sign is displayed, and if it is pressed twice sign is displayed. Digits 0 through 9 on the keypad have the same functions as in a normal calculator. You can enter digits only when the cursor is below digit '0' displayed in the LCD. When you press a number key, '0' dis played on the LCD changes to the number pressed. After the first data is inputted, the calculator shows word 'operator' in the second line of the LCD.There are seven operator keys. When an operator key is pressed once, its first operator value is displayed. When it is pressed again, the second operator value is displayed. Pressing the key for the third time displays the third operator (if it is present) or again the first operator. So by repeatedly pressing a key, the mathematical operator on the LCD can be changed. The user can enter an operator by pressing the respective key as many times as needed and then leave the keypad for a finite time gap. After that time, the calculator will ac cept only the operator shown on the LCD and reject any other operator from the keypad. If the mathematical operator requires only one operand, wait for some time after setting the operator. An 'E' will be displayed in the second row of the LCD. Press the execution key to see the result. If the mathematical operator requires two numbers, you will need to enter the second operand after setting the operator. After inputting the second operand, wait for some time until letter 'E' is displayed in the second row of the LCD. Press the execution key to see the result. If the answer to any mathematical operation goes out of range, the LCD shows 'Error' message. The AC' key can be pressed at any time to clear the display and reset the whole system.
Software
(f) The result displayed
The source program of this scientific calculator is written in 'C'language and compiled using MPLAB IDE.The program is well commented and
easy to understand. MPLAB IDE and MPLAB C18 must be installed before compilation of the program. Fig. 5 shows the configuration
Microcontroller-based Scientific Calculator
208
*a "i
XI >->!
e.tt
M-i
friti
I .** Mllrli< aarifiM* it M(-| ri*MiT
bits setting of microcon troller PIC18F4580. Set the configuration bits be fore compiling the source program and check before burning the code into the microcontroller. A software called
rtraiH
'Microchip Application
Maestro' is used to gener ate the xlcd.h and xlcd.c files to interface the LCD. In the main program, only library routines have been called for writing to the LCD. The Micro chip Application Maestro Modules is available on website 'http://wvvl.microchip.com/downloads/
IMIiM M- imt HI *
nw
<im
en/DeviceDoc/mpammodulesvl03.zip'. Af
HSS&J*
*J -irer
IfrU
ter
select 'XLCD for C Lan guage' (refer Fig. 6). Configure the LCD by selecting different pa rameters like interfacing mode, data port and con trol pins (RS, R/W, E). After the configuration is done, click 'Generate Code' icon. Save the gen erated files in the same di rectory as the source pro gram MPLAB. Both the xlcd.c and xlcd.h files are added in the workspace Fig. 6: Microchip Application Maestro screenshot of MPLAB. 'XLCDc. readme'and 'XLCD.DEF' are also generated. 'XLCDc.readme' contains names of all the library routines. Before compiling the program, some delay subroutines need to be written in the xlcd.c files in order to add delays required for the working of the LCD. The program works as per the flow-chart shown in Fig. 7. In the program, header files for 'timers,"delays,"led' and 'math' have been used. First, configure Port A pins as digital input. The LCD is initialised for 4-bit mode, display on, cursor on, blink off, etc. The first operand is displayed in the first line of the LCD with the help of the function 'input_number.'The word 'operator' displayed in the second line of the LCD means that the program is waiting for an operator from the user. Pressing an operator switch displays the operator on the LCD. At this time, no switch other than the operator switch will work.
Microcontroller-Based Projects
209
Operator swatches are time-multiplexed. That means an operator switch allows you to perform more than one function. When an operator switch is pressed once, it displays the first operator function. Pressing it again soon after displays another operator at the same position of the LCD. A switch can have two-three operators. After you select the desired operator, leave the keypad. After a small period of time, the program will understand which operator has been selected. Flag variable 'f' is used to find out the number of times a switch is pressed. Its initial value is 0. When an operator key is pressed, the flag variable's value changes from 0 to 1. If the same switch is pressed again, the pro gram comes to know through the flag variable that the same switch MAKE PORT A AS INPUT is pressed for the second time and changes the flag variable value w 4 from 1to 2, depending on the number of operators related to that \f MAKE ALL switch. Now the LCD shows the second operator function of the ROWS HIGH switch. A number is given to each operator to understand which operation READ is selected or which operation has to be performed. This number is COLUMN stored in variable ope.' For example, V has 'ope' value of 1, has 'ope' value of 2, 'log' has 'ope' value of 10 and so on. When the program ac ARE cepts the operator, the word 'operator' in the second line of the LCD ALL KEYS OPEN is erased. 9 Now the program checks whether the given mathematical opera tor requires another operand or not. If it requires another operand, the above process repeats. The only difference is that now the second line IS TIMER 0 YES . RETURNED of the LCD, not the first TO MAIN COUNTING PROGRAM OVER line, is used for inputting the data. NO/ NOT COUNTING After the operand and READ INPUT FIRST COLUMN the operator are entered, OPERAND the program takes some time to read the data from INPUT the LCD and then perform OPERATOR mathematical operation on it. It checks the value of 'ope' to know which math WAIT FOR OPERATOR\ NO DEBOUNCE ematical operation has to REQUIRE SECOND \ VARIABLE / be performed. After per READ forming the mathematical COLUMN YES operation, it shows letter 'E' INPUT SECOND on the right side of the sec OPERAND ond line of the LCD. Now if you press the execution DETECTS key, the result is shown in OPERATOR the second line of the LCD. AND | READ ROW PERFORM Pressing the execution key MATHEMATICAL OPERATION before letter 'E' is displayed RETURN ON in the LCD will not give VALUE OF ROW any result. DISPLAY AND RESULT If 'AC' key is pressed COLUMN while executing the code, the LCD gets cleared and END the program starts executing Fig. 7:Flow-chart of working ofscientific Fig. 8: Flow-chart of keyboard subroutine calculator from the beginning.
210
After letter 'E' is shown on the LCD, only 'EXC' and 'AC' keys work. SQR< -22.219) Keyboard subroutine. This subroutine uses the keys debounce 493.7283 technique and works as per the flow-chart shown in Fig. 8. When the keyboard function is called, the program waits for any key to be pressed and returns to its position (column and row values). The value of the row and the column matches with the value of the 5x4 matrix of the matrix (a) Square of a number array 'key_pad [5][4]' declared in the program. Row reading. 1. Starting with the top row, the microcontroller makes each row LN< 23.67> high at a time and then reads the columns. If the data read is all zeros, 3.1642 no key in that row is activated and the program moves to the next row. 2. It makes the next row high, reads the columns and checks for any high. (b) Ln of a number 3. This process continues until the row having a key pressed is iden tified, i.e., reading of the column returns a non-zero value. 4. After identification of the row in which the key has been pressed, the program finds out which column the pressed key belongs to. RTflN<56. 119) 98.9791 Column reading. The microcontroller reads the data at Port A and masks its lower bit. Variables 'row' and 'column' are global, and they can be used from anywhere in the program. For reading a switch which has more than (c) Tan inverse of a number one operation, timerl is started before entering the function 'keyboard( ).'The program goes on reading the keyboard until timerl stops count Fig. 9: User manual of the calculator for square, When timerl finishes counting, it returns from the function. ing. natural log (Ln) and tan inverse Key multiplexing is done with the help of the timer. At first, the timer is initialised to 16 bits and 'TMROIF' is set to 0. The timer starts counting only when a value is written to it. After it finishes counting, 'TMROIF' becomes l.This timer is used only for those keys which perform math ematical operation. For keys other than operator keys, it does not start counting. But at the press of any operator key, 'WriteTimer0(5000())' is used to write value to the timer and the timer starts counting. If the same key is pressed again before the timer completes counting, the second value of the key gets accepted and the timer value is again set to 50000. The process goes on. This way, key multiplexing is done and a single key can perform more than one operation. Readfrom LCD'subroutine. This subroutine reads numbers from the LCD and returns them as signed, double-data type. The cursor goes to the LCD location (given by the user) from where the data is to be read. The program reads the number, sign and decimal point from the LCD one by one, and stores them in string array 'ch[i].'Then it converts the string array into signed, double-data type 'ans' using function 'atof( )' and returns the value of 'ans.' Now the microcontroller has the number that was typed into the LCD and any mathematical operation can be performed on it. Write result to LCD'subroutine. This subroutine writes the result to the LCD. It receives the LCD location where the data is to be written, the signed floating point number and the number of places to be displayed after the decimal point. This function also displays word 'Error' on the LCD if the result of any mathematical operation is out of range or mathematically incorrect. Input numbersubroutine. This function takes operand inputs for mathematical calculations. For mathematical operations requiring two operands (like addition and subtraction), it is executed twice. For mathematical opera tions requiring a single operand (like log), it is executed only once. It first takes the input of the sign bit, then the integer part followed by the decimal part. The function uses time multiplexing of the sign (+/-) switch with the help of timerO. When '+/-' switch is pressed once, the LCD shows '+'. When it is pressed again within a short period of time, the LCD shows Pressing it further shows '+'.
Microcontroller-Based Projects
211
Initially, the
After reset, 'SOOOO' is shown on the LCD. cursor is at 'S.' At this time, no switch other than works. This switch is time-multiplexed, and either '+' or can be displayed at the same location of the LCD. As you input '+' or from the keypad, the cursor moves to the next position. The four zeros (0000) allow you to input the 4-digit number from the keypad. The digits are taken one by one. Then '.00' is displayed on the LCD, allow ing you to input digits in decimal places as well. Pressing the AC' key while executing the code clears the LCD and the program starts execut ing from the beginning. Fig. 9 shows the user manual of the cal culator. Fig. 10 shows the author's working
prototype.
com/admin/issuepdf/Microcontroller%20
Based%20Scientific%20Calculator.rar
Download source code: http://www.efymag. Fig. 10: Working prototype ofscientific calculator
212
VINAY CHADDHA
RELAY 1
This
vehicle counter the number of cars and the vacant space available in a parking lot and shows the values on a three-digit dual-colour display. The number of cars is shown in red colour and the space avail able in green colour. The circuit design is the same as for the 'Traffic Light Count-Down Timer with Dual-Colour Display' project described under Measurement Section. So if you already have this project, you don't have to buy or assemble a new Arduino board.Just by burning the parking_counter code given in this article into the ATmega328 microcontroller, the functioning of the board can be changed to a vehicle parking counter. For
counts
RELAY 2
WIRE LOOP
S1 -O OS2
VEHICLE
DETECTOR
-O O-
DIS3
DIS2
DIS1
PC817
CO CM
0
LU
P1 P2
<
S <t
TD62783
o o u. u.
U.
TLC5916
EXIT LOOP
RESET LOOP
Almost all parking lots in buildings or malls use loop detectors buried inside the road to detect the movement of vehicles crossing the gates. They detect the vehicles but ignore the gate crossing by humans, bicycles, etc. Usually, these detectors are part of electronic oscillator circuits. The loop detector circuitry and its description are not included here. However, its basic concepts are described here to give you some idea about how the loop detector works along with the vehicle
parking counter. A typical two-way gate system with boom barriers is shown in Fig. 2. When you approach a vehicle parking boom gate, you may notice a rectangular scar where the road surface has been cut with a saw and then re-sealed. This is the sensor loop. The loop consists of one or more turns of wire buried in the roadway and connected to an
electronic circuit which can detect a vehicle passing over it.
Microcontroller-Based Projects
213
The boom barrier is raised by pressing a switch to allow vehicles cross the Display Jumper P1 Jumper P2 Display functions gate. The boom barrier Setting the parking lot capacity Open Close Red automatically lowers down Red Showing the number of vehicles inside the parking after the vehicle crosses Open Open Showing the space available in the parking lot Open Green Close the gate.
c.iioo,DrncTwi
99
4
vehicle counter. Fig. 4 shows a typical dual-channel loop detector. It has two relays. One relay energises when the vehicle enters the parking area and the other energises when the vehicle exits the parking lot. The normallyopen (N/O) terminals of these relays are connected to the parking
counter.
L" j
n I
Circuit operation
In case you do not have access to loop detectors, the circuit can be tested using switches Si and S2 in place of the relays (see Fig. 1). There are three modes of operation, which can be selected using jumpers PI and P2 as shown in the table. When jumper PI is kept open and P2 is closed to ground, the mode of operation is 'setting.' Set the parking lot capacity (say, 999) using switches Si and S2, wait for ten seconds and switch off the circuit. The parking space capacity is now stored in the internal Fig. 4:A typical dual-channel loop detector EEPROM of ATmega328. Setting mode is required only once dur ing installation in a new parking lot. When jumpers PI and P2 are kept open, the circuit operates in vehicle counting mode. Here the display shows the number of vehicles inside the parking lot. When the vehicle count reaches 90 per cent of the maxi mum capacity of the parking lot, the display will start blinking. So if the maximum count is set at 60, as soon as the vehicle count is 54 or more the display starts blinking. This feature can be used to put 'parking full' sign and stop entry of vehicles except the priority vehicles. When jumper PI is closed and jumper P2 is opened, the circuit operates in vacancy counting mode.The display turns green to shows the total number of vacant spaces available in the parking lot.
214
Every time a vehicle crosses the entry gate, the count increments by 1, and when a vehicle crosses the exit gate the count decrements by 1. During normal operation,jumpers PI and P2 should be kept open. These may be replaced with suitable pushto-on switches during installation. The operator can use jumpers PI and P2 as per the modes listed in the table to check the capacity and space available in the parking lot. Downloadsource code: http://www.efymag.com/admin/issuepdf/Arduino%20Based%20Parking%20Counter.rar
Microcontroller-Based Projects
215
DEVESH SAMAIYA
environments like factories, power plants and transformers in electricity substations, controlling temperature safe value is important. Supervisory and control systems are used to monitor the temperature and other physical parameters on a centralised machine whereby one can monitor and control the remote devices. The AVR microcontroller-based system described here does the same job of acquiring the analogue data and sending it to a remote terminal for monitoring. Fig. 1shows the block diagram of the eight-channel data acquisition and logging system using AVR micro controller and Fig. 2 shows the author's prototype. The key features of this system are:
In
to a
1. The software is user-friendly and written in VB 6.0. 2. Data is acquired through serial port of the PC and displayed on the screen of the PC monitor. 3. Precise analogue signal conversion using AVR analogue-to-digital converter with 10-bit resolution. 4. All data acquired by the system is logged into a database for future reference with date and time of sampling. 5. The internal analogue-to-digital conversion (ADC) channels of the AVR are used to acquire real-time data in the form of analogue signal. The data is sent to the PC via UART channel.
Circuit description
Fig. 3 shows the circuit of the eight-channel data acquisition and logging system using AVR. At the heart of the circuit is ATMega32 AVR microcontroller from Atmel. The ATMega32 microcontroller has 32 kB of flash program memory, 2 kB of SRAM, internal analogue-to-
digital converter (ADC) with 10-bit resolution, internal EEPROM and full-duplex UART channel. This data
logger uses ADC channels of the AVR to acquire real-time data in the form of analogue signal and sends this data to the PC via UART
channel. Vcc (pin 10) and SENSORS TEMPERATURE DATA WITH TIMINGS AVcc (pin 30) of the AVR are connected Fig. 1:Block diagram of eight-channel data acquisition and logging system to +5V for operation. By default, this AVR works with the internal RC oscillator at 1 MHz. Here, fuse bits of the AVR are set to operate an external oscillator. We have used an external stable crystal oscillator to run at a frequency of 16 MHz. Hie AVR has internal power-on reset facility. Resistor R2 (10-kilo-ohm), capacitor C5 (IOiF) and switch Si make up the external reset circuitry. Switch SI allows you to reset the system at run
TEMPERATURE
CALIBRATION OF VOLTAGE TO
UART
time.
Analogue reference voltage pin VRFF (pin 32) is connected to the variable terminal of the 10-kiloohm preset. Using this preset, you can adjust the ADC reference voltage. We have used all the eight channels of the 10bit ADC for acquiring the analogue voltage proporEight-Channel Data Acquisition & Logging System
216
BATT.-
9V
IC2 7805
2
GND
OUT *5V
'VMA'
R1
470Q
LED1
CON1
R3 R4 R5 R6 R7 R8 R9
R10
C3
+I I
C1 10p 16V
10p
GND RX
oooo
J?
Vcc
10
TX
16V-
CH
C1C2+ C2-
VDD VCC
CM CO
INO IN1
IN2
IN3
IC4
ADJ
> VR2
LM335
PA4_(ADC4)
+ 1 C2
10p
IC1
MAX
232
T20UT
R2IN
PDOJRXD)
16V
coo O
PD1JTXD)
<
<
Ui
T2IN
R20UT
33
GND
10K
14
1b
GND
VEE
C4
16V
1M rr
sH 9-
r+ HDf
16V
30
A Vcc
32
AREF
VR1
10K
11
31
'
-y
C6 33p C7
33p
GND
GND
R3-R10=1K
OUTPUT 10mWK
LM > 335
tional to the environmental temperature of temperature sensors. The in-built UART channel of ATMega32 is used to send the current data to the host PC. UART works on 9600 bauds per second.The length of RS-232 serial cable is tested for operation up to 10 metres but it should work up to 15
metres.
._
tors
m
1 2/KW2O10 4:07=06 PM
c
3
0 0 0 0 0 0 0 0
has been used in this project. Its pin details are shown in Fig. 4. LM335 has a breakdown
to
*c
0
0 0 0 0
r Sensor
5-
r Sensor
UJ
0 0 0
impedance. The device operates range of 400 |iA to 5 mA with virtually no change in performance. LM335 can be
over a current
0 0
c
V
Total Rccords -
Sensor
3 Channel V '
f luf
rFfj
wJHIf FPrCF f
ChannptJ
Delete All
used in any kind of temperature sensing application over the tem perature range of-55C to 150C. r Sensor Low impedance and linear output make it easier to interface with the readout and control circuitry. It is not internally calibrated for degree Celsius (C), so you need * some external circuitry in the form of a 10-kilo-ohm preset and
Microcontroller-Based Projects
217
a 1-kilo-ohm
pull-up resis
tor as
shown
S
Fig. 7:A single-side, actual-size PCB layout for eight-channel data acquisition and logging system
degree Celsius. Cali bration proce dure is simple. Voltage values are measured
ture in
for different
(3
C0N1
INO
1N2
'
_1N
Wv
IN5< IK6
IN7
multi
lQklo ol
IC1
InTol
RIO
o"
I i<S),Ou,
C2
c1 Ou ,
i
CO
(J
ATMEGA32
a
D
BBBBBBBBBBO BBBBBBBBB
I0k
R2 o
j.
rfzi
BftTT
IC2
JlwV
-> PI
So
si
O
RESET
o
22p_,
ODD
--Opouer
LEDl
+9U-
linear output. The voltage across the output terminal of LM335 is 2.982V at 25C. This microcontroller works with TTL digital logic,while the RS-232 standard specifies different voltage levels of the digital logic. So you need a signal-level converter tor communication between the microcontroller and the PC over RS-232 port. Signal-level conversion. MAX232 is used as the signal-level converter. For voltage-level conversion, four electrolytic capacitors (10|iF, 16V) are used with MAX232. There are eight input lines (INO through IN7) through which analogue inputs are fed into the circuit. The analogue input is converted into digital level by the AVR and transmitted to the PC through the 9-pin, D-type serial com port connector. Here,we have used only three pins of the connector (Rx, Tx and Gnd) for communica tion with the PC.
PC GUI software
The graphic user interface (GUI) displays on the dashboard the stored data with date and time of logging. This
218
PARTS LIST
Semiconductors: IC1 IC2 IC3
can be useful to analyse the trend of change in temperature. The soft ware dashboard has eight blocks for displaying data of eight different
IC4 LED1
- LM335 temperature sensor - 5mm light-emitting diode - 10-kilo-ohm - 1-kilo-ohm - 10-kilo-ohm preset - lOpF, 16V electrolytic - 33pF ceramic
R2 R3-R10
VR1.VR2
Capacitors:
C1-C5 C6,C7
analogue channels. The GUI software is written in Visual Basic and has MSComm ActiveX controls for communication with the serial port of the PC. It is programmed to scan real-time incoming data from the external hardware. The entire working logic is asynchronous; it doesn't matter which channel has what data. The software can capture the data from a particular channel and put it into an appropriate location in the da tabase. A special protocol is used to synchronise the software with the hardware in order to make the program identify the data and channel number currently active on the serial port. The microcontroller first sends the channel number followed by the current captured data on
the channel. The software is calibrated such that it shows the temperature directly in degree Celsius by multiplying a calibration constant with Miscellaneous: the incoming analogue voltage. - 16MHz crystal oscillator CON1 - 9-pin D-type female The software is configured to work with fixed values such as connector 'coml'for the serial port and '9600* for the baud rate by default. But BATT. - 9V PP3 battery you can easily configure it to work with different serial ports (like SI - Push-to-on switch com2, com3 or com4) and baud rates. The software can save data of the different input channels into a 'daq.mdb' database with time and date of each channel input data. Start/ stop buttons are provided to start or stop the logging activity any time by the user. The GUI program output is shown in Fig. 6.
Construction
A single-side, solder-side PCB layout of the circuit for eight-channel data acquisition and logging is shown in Fig. 7 and its component layout in Fig. 8. A 9V PP3 battery is used to power the circuit. 9V is converted into 5V using a 7805 regulator. The glowing of LED1 indicates the presence of 5V supply in the circuit. The circuit acquires analogue data from the eight channels through INO through IN7 inputs. The analogue temperature data at INO channel is acquired from LM335 temperature sensor (IC4). Temperature calibration for IC4 is done using a 10-kilo-ohm preset (VR2).The remaining inputs can be fed from external temperature sources. Assemble the temperature sensor along with preset separately on a small general-purpose PCB for each channel. Extend two wires from each of the general-purpose PCBs to the respective input points (IN1 through IN7) in the main PCB.Two-pin SIL male and female pair connector may be used for connecting the PCB to the general-purpose PCB for each channel input. As shown in Fig. 5, a 10-kilo-ohm preset is used for calibration of each temperature sensor. Calibrate each temperature sensor (LM335) before connecting the circuit to the PC.After calibration is done, install the sensors at appropriate locations or on the device whose temperature is to be monitored. (All the relevant files of the GUI software are stored in 'EFYproject/VB Project' folder of 'D' drive.) Now, run the datalogger8chnl. exe GUI software and click 'start' button to start the data acquisition and logging process. If data display on the dashboard is not proper,press reset switch SI momentarily, or switch off the power supply and then switch it on. Using preset VR1, adjust ADC reference voltage such that it is exactly 5V across pin 32 of IC3.
Microcontroller firmware
The main.c source code for ATMega32 (given at the end of this article) is written in 'C.' It is compiled using avrgcc cross-compiler to generate hex code. Avrdude is used to burn hex code into the ATMega32 microcontroller. WinAVR is a free software development tool for AVR series microcontrollers hosted on the Windows platMicrocontroller-Based Projects
219
form. It has avr-gec, avr-liboc, avr-binutils and avr-dude within one package. Linux users have to install these components separately. For details of AVR programming hardware and software, visit 'www.electroons.com' Downloadsource code: http://www.efymag.com/admin/issuepdf/Datalogger%208-channel.zip
MAIN.C
#include<avr/io.h> includecut il /delay .h>
void UART_transmit (unsigned char data)
while (! (UCSRA
UDR=dota;
&
// Sending temperature
_delay_ms
(1000) ;
1
<1<<UDRE)));
DDRA=OxOO; PORTA=OxOO;
UCSRA=0;
UCSRB-1TXEN;
ADMUX=OxOO+ch; ADCSRA=0xE7;
bit, a stop, none parity UBRRH=0; UBRRL=103; // for 9600 baud at 16MHz
adc_getdata () ;
return 0;
220
n most of the modern manufacturing and processing industries, there is complete industrial automation through sophisticated hardware and software like programmable logic controller (PLC), distributed control
system (DCS), and supervisory control and data acquisition (SCADA). Microcontroller-based embedded systems play major role in industrial automation. One such widely used system is the programmable timer. The major applications of programmable timer are as follows: 1. Initiating the process after desired time 2. Switching on/off the process after predetermined time
3. Providingdelay in between processes 4. Applying input to on/off type open-loop control system Depending upon the requirement of process, one can set the time of timer. As the time period expires, the timer will either programmable PARTS LIST shut the or trigger process. Earlier there were mechanical timers that Semiconductors: used gear assembly (same as wall clock) and mechanical contacts. But IC1 - AT89C51 microcontroller the problem with these was that due to mechanical parts and move IC2 - HT12D decoder IC3 - 74LS21 four input AND ments, they were not durable. Electronic timers have become very gate popular as these have more functionalities and long operating life. IC4 - 7805, 5V regulator A simple electronic timer can be made using a single IC 555 in IC5 - HT12E encoder monostable mode that can switch on/off the process after desired time. T1 - BC337 npn transistor T2 Also, in chain process (where the end of first process starts second - BC547 npn transistor D1-D5 - 1N4007 rectifier diode process and so on), one can use a number of such monostable blocks D6-D13 - 1N4148 switching diode to make a sequential timer. But these circuits do not include additional LED1-LED3 - 5mm LED LCD - 2-line and 16-character LCD features like digital display, system failure indication, remote operation and alarms. Since the precision and accuracy of these timer circuits - 433MHz ASK transmitterreceiver module depend upon the value of the resistor-capacitor components that may Resistors (all '/i-iuatt, 5% carbon): deviate, we might not get the exact and precise timing. To enhance the R1 - 10-kilo-ohm programmable timer for generating precise timing and additional fea R2, R3, R7 - 1-kilo-ohm tures, microcontrollers (embedded controllers) are used with peripheral R4 - 3.9-kilo-ohm devices. R5 - 47-kilo-ohm Some of the features of programmable industrial on/off timer pre - 330-ohm R6.R8 VR1 - 10-kilo-ohm preset sented here include: l.Time set from 1 to 60 seconds (can be extended) Capacitors: CI, C2 - 33pF ceramic disk 2. 'On time and 'off' time can be programmed (from 1 to 60 sec C3 - l|iF, 16V electrolytic onds) C4 - 1000|iF, 25V electrolytic 3. Repeat (continuous) and single operation CS - 0.1(jF ceramic disk 4. Fully remote-controlled within 100-metre range Miscellaneous: 5. User-friendly front-panel controls and display panel with LCD XI - 230V AC primary to 12V, 500mA secondary 6. Emergency stop buttons (on control panel as well as on remote) transformer 7. Provision of potential-free relay contacts for connecting any XTA, - 12MHicrystal at 10A or 28V DC at 10A device/application 230VAC S1-S5, S10-S14 - Push-to-on tactile switch S6, S7 - SPDT switch S8 - 4PDT toggle Switch Circuit description S9 - SPST toggle switch RL1 - 12V, 1C/O relay The complete hardware circuit is divided into two sectionsprogramMicrocontroller-Based Projects
221
C3
o
CS
vwv /vvv
X/fr
6e>u
i/l
10
su
or
eg
[q>. 5 J <"lQ<
o
2
A/WV
QN9
'I
ino '9ia
(AS)30A
a:*
X
ino NH
(as)oda
>N
LU
LJ CO
MMhJ * >"
CO
QN9 QN9
LL
a:
1NV
q.
Q-
wr
'z
yh"
<
IA
y
2S H <
a>
(vi
t-
"X
to CM to CM
(0
<M
CM
CM
-X
CO
"r"
II
8s
;S
CO
CJ
O
X
CM
CO
-1
CO
-f Is
3
CO
cr <
FVW
CJ
CD
.c
<0
LO
05 K<
50
>
E E 5 S
o
uu
111 0C(/)5
<0 ~
E
a
Ol
5lS ?1 s>-<
Cn
mable timer main circuit and remote control transmitter and receiver units. Hie main circuit is a fully-functional standalone unit with front-panel con trol switch and LCD display. Remote control transmitter and receiver are add-on units. The receiver outputs are con nected with respective control input pins of main circuit. Receiver output facilitates user to program and control timer operation using remote within 100-metre range. Main circuit. Fig. 1shows the circuit diagram of in dustrial on/off timer. The circuit comprises microcon troller AT89C51 (ICl), LCD, transistors and a few discret components. The data pins DO through D7 of LCD are connected with port pins P2.0 through P2.7 of microcon troller AT89C5 1. The control pins register select (RS), read/ write (R/W) and enable (E) are connected with port P3 pins P3.0, P3.1 and P3.2, respectively. Preset VR1 is connected with pin 3 of LCD for contrast control. Switches Si through S4 are connected to port pins P1.0 through Pi.3 by 4PDT toggle switch S8. Two single-pole double-throw (SPDT) switches S6 and S7 are connected at P3.5 and P3.6. Switch S6 selects for ei ther remote or keypad control, and switch S7 selects control for either repeat or single mode operation. Port pin P3.7 drives relay through transistors Tl. Diode D5 acts as free wheeling diode for relay RL1. Power-on reset is provided by the combination of resistor R1 and capacitor C3. Switch S5 is used for manual reset or
222
crystal along with two 33pF capacitors pro vides clock pulse to
the microcontroller AT89C51. The 230V, 50Hz AC mains is stepped down by transformer XI to deliver a sec ondary output of 12V, 500mA. The trans former output is rec tified by a full-wave Fig. 2: An actual-size, single-side PCB for the industrial timer circuit rectifier comprising diodes D1 through D4, filtered by capacitor C4 LCD MODULE 0911B ON/OFF TIMER lOOOOOOOOOOOOQim D1-05=1NM007 and regulated by IC 14131211 10 9 8 7 6 5 t 3 2 1 S! START 7805 (IC4). Capacitor C5 bypasses the ripples present in the regulat ed supply. LED1 acts as the power indicator 'JI.I iiL and R7 limits the cur IC" rent through LED1. An actual-size, 74LS21 single-side PCB for the programmable in dustrial on/off timer is shown in Fig. 2 and its RF RECEIUER component layout in Fig. 3: Component layout for the PCB in Fig. 2 Fig. 3. Assemble the circuit on a PCB as it minimises assembly time and errors. Carefully assemble the components and double-check for any overlooked
'
error.
Operation. The functions of all keys are given in Table I.The mode selection switch S7 selects either repeat or single mode. Single mode allows user to run the timer operation in 'on' time and off' time sequence once. In repeat mode of operation, the timer repeats on time and off' time sequence continuously. During this cycle if this switch is changed to single-mode, the timer stops as the cycle completes. Also, if the emergency stop (ES) button
is pressed during any mode of operation the timer operation will stop. The step-by-step operation when the main circuit is powered is as follows: 1. The 'enter on time' message is displayed on LCD 2. User has to enter the desired time by incrementing/decrementing time using 'Inc.' (S2)/'Dec.' (S3) keys 3. After pressing the 'Enter' (S4) key the user will be prompted to enter 'off' time 4. Using the same S2 and S3 keys, the 'off' time may be entered and the 'Enter' key pressed 5. 'Press Start' message is displayed as the user enters the time
6. After pressing 'Start' (SI) key the operation starts 7. The relay is energised and the device remains on till the 'on' time counts down to 0. After that the relay is de-energised and the device turns off. It remains in this state till 'off' time counts down to 0 8. If the timer is operating in the repeat mode the cycle will repeat continuously and device will be switched
Microcontroller-Based Projects
223
on and off after required time intervals. In this mode if the operation has to be stopped then either switch S7 has to be toggled or ES button
has to be pressed 9. If the timer is operating in single mode then as one on-off time cycle completes, the timer stops working. One has to enter 'on' time and 'off' time again to re-start operation COM. 10. For remote control operation, port pins P1.0 through PI.3 of Fig.4:Pinconfigurations of BC337, BC547and 7805 microcontroller AT89C51 are changed to Dll through D8 of HT12D, respectively, using four-pole double-throw (4PDT) switch S8. Also, switch S6 connected TX1= RF NJ/ 433MHz TRANS to port pin P3.5 is changed to remote position MITTER 330! > to set remote operation mode. 12 3 4
RATT
AO
A1
18
Remote control transmitter and receiver cir cuit. Remote control transmitter and receiver are
ES/ RESET
A2
A3
A4
17 14
Dout
D13 D12D11
a"
AD10
S14 i
IC5 HT12E
13
A5
A6
12
11
D8
y
a
ysis
-O
S12
HEEfi
ma
AD9
AD8
D7
D6
S11 1
S10
A7
10
D6-D13 = 1N4148
TABLE 1
Function
S1 S2 S3
S4
S5
S6
S7
Starts timer operation Increments time set by 1 sec. max limit is 60 decrements time set by 1 sec. min limit is 1 Used to enter time set value Emergency stop or system reset. Selection of either remote or keypad control Selection of either repeat or single control
TABLE II
D1
1
1
DO
Code
o
1 1 1 1
1 0 1 1 1
1
1 1 0 1
0 1
1
7 B D E F
made using readily available encoder (HT12E) and decoder (HT12D) chips. Transmitter circuit. Fig. 5 shows the cir cuit diagram of transmitter consisting of two main components encoder HT12E (IC5) and radio frequency transmitter module 433MHz (TX1). All the address pins AO through A7 are tied to ground to set address '00h.' A one mega-ohm resistor is connected between oscillator pins 15 and 16 of HT12E. Dout pinl7 of HT12E is connected with input of ASK transmitter (TX1). Switches S10 through S13 are connected with data input pins AD8 through AD11 of HT12E in such a way that when you press any key, TE pin is automatically grounded. Key S14 is directly connected between TE pin and ground as shown Fig. 5. LED3 is connected for indication of pressing the switch. An actual-size, single-side PCB for RF trans mitter is shown in Fig. 6 and its component layout in Fig. 7. Operation. When you set the address and data inputs on HT12E and pull downTE pin low, that address and data are serially trans mitted through D0(JT pin 17 of HT12E. Here the address is already set to '00h.' Now as any key is pressed, respective data pin goes low and TE pin is grounded. Status of data along with 8-bit address is serially transmitted through ASK transmitter. ASK transmitter modulates these data signal with 433MHz carrier and transmits it through antenna. Table II shows the status of data input pins and the codes transmitted for a particular switch. Receiver circuit. Receiver circuit is included in Fig. 1. All the address pins of decoder
224
u
Fig. 6:An actual-size, single-side PCB for RF transmitter
O BrANT0 SuTcSlO
TRANSMIT FED
ENT
<i -
BEES
BosD O
O013
-ConY
LED?
C5 BAT. CON. I
ES/RESET
-9U
0
IEnter ON Time: 0 is loo_
I Start I
'
kaypad
HT12D (IC2) are connected to ground to set same address '00h' as on the transmitter. Data output pins D8 through Dll are connected to mi crocontroller (IC1) through contacts of 4PDT switch S8. Also, all four outputs are given as input to 4-input AND gate. The output of AND gate is connected to reset input pin 9 of microcontroller AT89C51 of main circuit. VT pin of HT12D drives LED2 through transistor Tl for indication of data reception. A 51-kilo-ohm resistor is connected between oscillator pins 15 and 16 of decoder HT12D. Output signal of ASK receiver (RX1) is connected with D|N pin 14 of HT12D. Operation. ASK receiver receives 433MIIz carrier signal and de modulates the address and data before giving it to decoder HT12D. HT12D receives these bits serially through D,x pin 14 and compares the address. If received address and set address match, the data will be latched on pins D8 through Dll of decoder HT12D. The VT pin 17 becomes high momentarily as data is latched. This is indicated by LED2. If AD11 pin goes low by pressing start switch (SI) of the trans mitter side, only Dll pin 13 at the receiver side becomes low and all other pins become high. Since Dll pin is connected to port pin Pl.O of microcontroller AT89C51, it gives the start signal. Data is received similarly for D8, D9 and D10. When ES key is pressed all data pins D8 through Dll are high. So at the receiver side all the pins become high. That makes the output of AND gate high, which is given to the reset pin 9 of microcontroller. Because there is a latch action at D8 through Dll outputs, all A through D inputs to AND gate remain high till any other key is pressed at the transmitter. This will continuously apply reset signal to microcontroller AT89C51.To remove reset condition, one SPST (S9) is used in between to make and break the direct connection. Open switch S9 will break the connection and reset pin will not get high logic from the AND gate. Now, after starting the operation, to activate ES from remote, press the switch again to make the connection. Fig. 8 shows the proposed arrangement for front panel and remote control for industrial on/off timer.
Software
SW
Tlm>
QI
|
(ail repeal
no raptat
Ikntaf
MMRmmii
f1
MC CMO
keypad
Fig.8: Proposedarrangement for remote con trol and front panel for industrialon/off timer
The program is written in 'C' language and compiled through Keil |iVision4 compiler. The program is well-commented and easy to under stand. Complete program is divided in twelve different functions. Out of these twelve functions, four functions are for LCD handling, four for timer operation, two delay functions, one interrupt function and the last one is the main function. LCD handlingfunctions. The various functions are as follows: 'writecmd'function. It sends command byte to LCD by taking one argument byte that is sent to port PO 'writedata function. It sends data byte to be displayed on LCD. It also takes one argument byte and sends it to PO 'writestr'function. It writes the whole string (message) on LCD tak ing pointer as an argument that points address of first character of string. Through the pointer it sends all the characters one by one to port PO 'busy'function. It checks the status of busy flag of LCD. If the flag is
225
Microcontroller-Based Projects
set
Interruptfunction. 'takeinput'function. This interrupt function handles external interruptl. It just saves the status of port PI whenever external interruptl occurs Timer operationfunctions. 'Start function. It starts the timer operation by sending high logic to port pin P3.7 and energising the relay. The countdown time is displayed on LCD as 'Device ON.'Then it sends low logic to port pin P3.7 and de-energises the relay. Again countdown time is displayed as 'Device OFF.'lt then checks the status of port pin P3.6. If it is high the cycle repeats continuously and if it is low the operation stops
that means LCD is not ready and program remains within loop. When flag is reset that means LCD is ready and program comes out of loop Delayfunctions. 'keydly function. It generates key debounce delay of around 0.1 second using 'for loop' statement twice 'd/ylsec'function. It generates approximately one second delay using 'for loop'
variable till minimum limit (1 second) is reached 'Enter'function. It changes the messages on LCD as 'Enter OFF time:,"Press Start,' etc. It is also used to enter 'ontime' and 'offtime' variables, alternatively. Mainfunction. It first initialises LCD and then displays message 'Enter ON time:.' It then checks the status of port pin P3.5 of microcontroller. If port pin P3.5 is high, it means timer operation is controlled through key pad and if it is low the timer operation is controlled through remote. It waits in continuous loop till any key is pressed from keypad or remote. As the key is pressed, the function is detected and it calls the particular function corresponding to that key like 'Start,"Inctime,"Dectime' or 'Enter.' Download source code: http://www.efymag.com/admin/issuepdf/Programmable%20Industrial%20on-off%20 Timer%20With%20RF%20 Remote.zip
display the variable on LCD the value must be in ASCII format. So first two digits are separated and then con verted into equivalent ASCII values using array named 'ascii.'Ihis array includes ASCII values of all 0 to 9 digits 'Dectime'function. It is similar to 'Inctime' function. The difference is that it will decrement 'ontime' or 'offtime'
'Inctime'function. It increments 'ontime' or 'offtime' variables till maximum limit (60 second) is reached. To
TIMER.C
tinciude <regbl.h> include <string.h> sbit rs = P3A0; // declare P3.0 as rs pin sbit en = P3A2; // declare p3.2 as enable pin sbit rw = P3A1; // declare p2.6 as read/write pin sbit b = P2A7; // busy flag sbit op=P3A7; // output pin sbit pin=P3A6; // input pin for repeat no repeat mode sbit rmt=P3A5; II input pin for remote or keypad operation unsigned char ascii[10] = (0x30,0x31,0x32,0x33,0x34 ,0x35, 0x36, 0x37, 0x38, 0x39) ; unsigned char data byte; unsigned int i=0; j=C ,k=0,ontime=0, of ftime=0, tl=0, t2 =0, tmpl, tmp2,flag, sflag; void writecmd (unsigned char a) // function to send corrmand to LCD void writedat (unsigned char b) // function to send data to LCD void busy () ; II function to check LCD is busy or not void writestr (unsigned char *s); // function to write string on LCD void keydly () II
function for key debounce delay
<
)
busy () ; check for LCD is busy or not 0; rs clear rs pin for command rw = 0; clear rw pin to write P2 = a; send command character en = If strob LCD en = 0;
//
//
//
//
//
1
void writedat (unsigned char b) { busy ( ) ; check for LCD is busy or not
rs
set rs pin for data
//
//
//
1,-
//
226
TIMER.C
send data character en - 1; strob LCD en = 0; } void busyO
{
//
writecmd (OxCO) ;
// same as above
writestr ("60-
max limit
");
tl-1;
)
en
disable display
0;
//
i-ontime/10; j=ontime%10?
P2
= OxFF;
II
//
{
t
2==0 ) if ( (tl==0) && ( 1 limit is not reached
configure PO as input rs = 0; clear rs pin for command rw = 1; set rw pin to read while (b==l)
>
// if max
//
II
print ontime/offtime sec
ter:")
writecmd (OxCO) ;
writestr ("press en
i
en=0;
//
writedat (ascii [ i] ) ;
//as one
by one digit
unsigned char 1, i; 1 = strlen(s); get the length of string for (i=0; i<l;i++)
II
f
writedat ( *s) ; write every char one by one s++; ) } void inctimeO
{
tl=0; if (k==l)
//
writecmc (OxCO) ;
writestr ("01-
u
II check
to
min limit
");
t2=l ;
//
else
(
j=off time%10;
writecmd (OxCO) ;
max limit
") ;
writecmc (OxCO) ;
t2-l;
i=offtime/10;
separate upper and
//
i=ontime/10;
j=of ftime%10;
// lower dig
// if
j=ontime%10;
if ( (tl==0) S& (t2==0) )
(
its
}
//
ter:") ;
<
Microcontroller-Based Projects
227
writestr ("
}
");
II on LCD after
delaylsecf) ;
II
&
II every sec
)
offtime and
f
display message k++; increase count to enter off time
if(k==l) (
// //
// first time
//
II
writecmd (0x80) ; writestr ("Set OFF time and"); // display message and
writecmd (OxCO) ;
<
i=b/10;
j =b% 1 0;
writecmd (0x8B) ; writedat (ascii [i] ) ;
//
show value 00
// 1 sec delay
)
else if(k==2)
// second time I
writecmd (0x01) ;
clear LCD screen and writestr ("Press start"); // display message sflag=l; set start flag k=0; // reset counter
)
)
//
//
else
II otherwise
<
II
// set flag
clear ontime and offtime
flag- 1;
ontime=0;
of ftime=0;
II
II
II for remote
int x;
TL1 = OxBF; TH1 0x3C; TR1 = 1;
for (x=0,-x<-20;x++)
(
//
ma i n() {
TMOD=OxlO;
P3=0x68;
set keypad operation and repeat mode P2=0x00; as output writecmd (0x3C) ; Initialize LCD writecmd (OxOE) ; bgin: writecmd (0x01) ;
//
// P2
//
) TR1 = 0;
)
void start!)
(
int a,b; tmpl-ontime; save ontime and offtime values tmp2=of ftime; back :writecmd (3x80) ; writestr ("Device ON: ") ; display message op=l; // switch ON relay for (a=tmpl;a>0; a ) II start countdown
//
II
II
//
//
i=a/10; j=a%10;
enable ext interrupt 1 flag=0; // clear flag for entering values sflag=0;
//
228
start flag cleard agin :Pl=OxFF; // PI as input byte=OxFF; // initialize byte variable if(rmt==l) while (Pl==OxFF) ; // for keypad mode check status of PI else while (byte==0xFF) ; // for remote mode check byte content if(rmt==l) byte=Pl; // if keypad mode save input in byte switch (byte) // compare the content of byte
{
flag=l ;
break;
case OxFD:
inctime ( ) ;
case OxFB:
dectime ( ) ;
decrease time
break;
case OxFE:
case 0xF7 :
enter ( ) ;
enter values
break;
)
else
keydly () ;
II operation else
<
writecmd (OxCO) ;
II till
II display message
//
Microcontroller-Based Projects
229
Measurement
DIGITAL THERMOMETERCUM-CONTROLLER
K.S. SANKAR
This
standalone digital thermom- eter controls the temperature of a device according to its requirement. It also displays the temperature on four 7-segment displays in the range of-55C to +125C. At the heart of the circuit is the microcontroller AT89S8252, which controls all its functions. IC DS1821 is used as
temperature sensor.
IC DS1821
Dallas Semiconductor's IC DS1821 is one-degree precision temperature sensor in a 3-pin pack like a transistor with single-wire communication protocol. It can operate as a standalone thermostat with user-programmable trip-points (set-points) or as an 8-bit temperature sensor with a single-wire digital interface. The open-drain DQ_ pin functions as the output for thermostat operation and as the data input/output (I/O) pin for single-wire com munication. The single-wire interface lets user access the non-volatile memory (EEPROM) thermostat trip-point registers (TH and TL), status/configuration register and temperature register. When configured as standalone thermostat, temperature conversions start immediately when power is switched on. In this mode, the DQ_pin becomes active when the temperature of PARTS LIST IC DS1821 exceeds the limit already programmed in theTH register, and remains active until the temperature drops below the limit pro Semiconductors: IC1 - AT89S8252 grammed in the TL register. microcontroller The DS1821 uses Dallas' exclusive single-wire bus proto - CD45 117-segment driver IC2.IC3 col that implements bus communication with one control signal. IC4 - CD4050 non-inverting
LED1.LED2
-7805,5V regulator - 2N2222 npn transistor - 1N4007 rectifier diode - Common-cathode, 7-segment display -5mm light-emitting diode
Resistors (all 'U-watt, 5% carbon): R1-R4 - 10-kilo-ohm R5-R23, - 330-ohm R25-R28 R24 - 5-kilo-ohm R29 -1-kilo-ohm
Capacitors: CI C2 C3 C4, C5
Miscellaneous: XI
- 1000(iF, 25V electrolytic -O.lpF ceramic disk - 10[iF, 16V electrolytic -22pF ceramic disk
- 230V primary to 7.5V,
S1-S4 SS RL1
300mA secondary transformer - Push-to-on switch -On/off switch -6V, 150-ohm, lC/O relay
Microcontroller-Based Projects
231
-from";
-vww
-w=
c
O </>
w co
counter, counting down '0,' and incrementing the temperature register is repeated until the counter takes less time to reach '0' than the duration of the gate period of the hightemperature-coefficient oscilla tor. When this iterative process is complete, the value in the temperature register will indi cate the centigrade temperature of the device.
to
the
The DS1821 has two operating modes: single-wire mode and thermostat mode. The power'on' operating mode is deter mined by_the user-program IC3 o> mable T/R bit in the status/ configuration register: if T/R co n = 0 the device works in singlewire mode, and if T/R = 1the ? device works in thermostat CM mode. The T/R bit is stored in eg a 2 moon yg the non-volatile memory 00 J(EEPROM), so it will re < 3a l/> tain its value when the o> device is powered down. Single-wire mode. The DS1821 is supplied by the oo manufacturer in single-wire EC g (T/R=0). In this mode, mode -m 15 the DQ_pin of the DS1821 DC g 14 -vwvis configured as a single-wire port for communication with a control unit (microcontroller) using the protocols described -J\AAAr rr* in the single-wire bus system tr 2 section of the datasheet. These El otl-vww communications can include bSS reading and writing the high oc j EH23 3S -AMVand low thermostat trip-point CXJ* tr 2 (TH and TL) and the registers -wvs I.V'jEMM configuration register, and read El ing the temperature, counter and slope accumulator registers. Fig. 1:Circuit of digital thermometer-cum-controller Also in this mode, the micro controller can initiate and stop temperature measurements as described in the operation-measuring temperature section of the datasheet. The TH and TL registers and certain bits (THF, TLF,T/R, POL and 1SHOT) in the status/configuration
o
CJ CM
-AMA/-
;S*
Operating modes
in
CD451
CM
CM
CO
(O
in
t <0
N.
CO
in
i-
in
CM
id
CO
*-
CN
CO
232
Digital Hiermonieter-Cum-Controller
register are stored in the non-volatile EEPROM memory, so these will retain data when the device is powered down. This allows the registers to be preprogrammed when the DS1821 is to be used as stan
D1-D5 = 1N4007
6V UNREGULATED
S5
ON/OFF SWITCH
230V
AC
D5
+5V REGULATED
IC6
1
7805 3
OUT
dalone thermostat. Writing to these non-volatile regis ters can take up to 10 ms. To avoid data corruption, no write action to the non
50Hz
D4
X1
= 230V AC
D3
COM
ioootj~;
25V
C2 -L
0.1M -t-
LED1
-O GND
volatile memory should be initiated while a write to the non-volatile memory is in Fig.2: Power supply circuit progress. Non-volatile write status can be monitored by reading the NVB bit in the status/configuration register: If NVB=1, a write to EEPROM memory is in progress. If NVB=0, the non-volatile memory is in idle state.
SECONDARY TRANSFORMER
Circuit description
Fig. 1shows the circuit of the temperature controller using Dallas DS1821 temperature sensor. Microcontroller AT89S8252 is interfaced to DS1821 temperature sensor, three 7-segment displays and relay RL1. Port PI of IC1 is used to output the data on the segment display. Port pins P1.0 through PI.3 and port pins PI.4 through PI.7 are connected to IC3 and IC2, respectively. ICs CD4511 (IC3 and IC2) receive the BCD data and provide the compatible code for 7-segment displays DIS2 and DIS3. Port pins P3.4 and P3.5 are used for 'b,"c' and 'g' segments of DIS4 through buffers Nl, N2 and N3, respectively. Segments 'b'and 'c' become active when temperature exceeds 99C. Segment 'g' becomes active when temperature goes below 0C. This indicates '-'sign for negative temperature. DISl is used in reverse direction for indication of C. Segments 'a,"b,"g' and 'dp' (decimal point) are made permanently high with resistors R19 through R22 to indicate C. Port pins P3.1 through P3.3 of IC1 are connected to S2, S3 and S4 switches for 'up,' 'down' and 'dis
r,
35
play' respectively. These pins are pulled high through a 10-kilo-ohm resistor. Switches Si through S3 are used for setting/changing the temperature. When the set temperature is exceeded, the relay connected to port pin 3.7 through a transistor is latched on. Switch SI is used as a reset switch. Power-'on' reset is achieved by capacitor C3 and resistor R4. Port pin P3.0 of IC1 receives the data Fig. 3:Actual-size, single-side PCB layout for digital thermometer-cum-controller
units)
)
233
Microcontroller-Based Projects
s a o 9 a fl BOBS imi
DIS3
DIS1-0IS4=LTS543
DIS2
DISl
I I i:
LD
buffer N4. The signal from port pin P3.7 drives relay RL1. Di OS 1821 D1 is used as a ode IC5 a a a o a a a o diode BQQQOBQS free-wheeling 1 -D5=1N4007 OOO IC2 IC3 R_l 11 **D5 and used for is LED2 CD4511 CD451 1 9 9 9 9 9 9 9 9 99999999 ,0K relay-'on' indication. O The device is connect J3 OnSrF Jt ed through contacts XTAL 12MHz of RL1. Resistors R5 O O o~o J2 ~ DISP. through R22 and R26 through R28 limit the QOO 3QflQDfl QBQ Q a 3 ABO 0 B, R1 /yl current through the 0 0 10K C310u P 5? 04 in ICl 7-segment display. A DOUN UP AT89S8252 IO Ol O O 12MHz crystal is used microcontroller for 9 9 999399990999999999 tT~0 OO () clock. THERMOMETER CONTROLLER /EFV0CT-06/SUNIL Fig. 2 shows the circuit of power sup Fig. 4: Component layout for the PCB in Fig. 3 ply. The AC mains is stepped down by transformer XI to deliver a secondary output of 7.5V at 300 mA. The transformer output is rectified by a full-wave bridge rectifier comprising diodes D2 through D5, filtered by capacitor CI and regulated by IC6. Capacitor C2 bypasses any ripple present in the regulated output. Regulated 5V is used for circuit operation and unregulated 6V is used for the relay. An actual-size, single-side PCB for temperature controller (Fig. 1) including its power supply (Fig. 2) is shown in Fig. 3 and its component layout in Fig. 4.
ZN2222
o->pb&
O O
The software
The software for the temperature controller is compiled using Bascom5 1version. The demo version of Bascom-8051 is available on website 'www.mcselec.com/download_8051. htm.' First, define the crystal speed and include the header file for microcontroller. Initialise all ports to '0.' Timer-0 is used as an internal counter and increments by a second. This is used here for timing delays. Pin P3.0 of the microcontroller is configured for single-wire communication. Normally, DQ_pin (single-wire bus) of DS1821 is high. Through DQ the device gets its power to perform tasks. When the microcontroller waits for the event through single-wire bus, it issues a reset command. Then DQ_ goes low for some time. This resets the device and it acknowledges a pulse and then follows the microcontroller. The communication on the single-wire bus is initiated by the microcontroller, and issued by low time slots on a normally-high DQJinc, issued by the device. Declare the variables as bits, bytes and words. Define the various port pins as per the connections. Set the maximum temperature to '40' as default. Subroutines 'dispset' and 'disptemp' are used for display preset and real temperature, respectively. The source program is well commented for easy understanding.
Downloadsource code: http://www.efymag.com/admin/issuepdf7Temp-contr%20code.zip
TEMPR.BAS
tempr.bas 22-fi-06
234
DigitalHiermonieter-Cum-Controller
land
1
'
As Byte Dim Settemp As Byte Dim Setmode As Bit Dim Ans As Byte
Comp_set As Byte
'
Relay_out Alias P3.7 Sw_set_up Alias P3.1 Sw_set_down Alias P3.2 Sw_set_disp Alias P3.3 Sw_in_port Alias P3 Display_port Alias PI
---------- -0+++++++++++++
0 12 3 .125 0 12 3 ...125
..
' set default max temperature for relay to activate Settemp = 40 Set_mode = 0
Begin :
lwreset
' =
port pl-yellow two 7seg display thru two 4511 bcd-7decoder ics
'
port-p3 blue p3.0= 1 wire interface p3.1= increase set value p3.2= decrease set value
p3.3= display
set value
lwwrite SHOC ' write status lwwrite &B01000010 ' continue convertion
lwreset lwwrite &HEE ' start conversion lwreset lwwrite &HAA
'
* define
Gosub Disptemp
'
'
pressed if pressed stay in set loop for 3 seconds after inactivity and display will be in flicker mode
'
' declare function used Declare Sub Fn7seg(_i As Byte) Dim _i As Byte
Config TimerO
Ans = SB01001110 And Sw_in_port If Ans <> 4B01001110 Then ' some input key pressed Start TimerO Sec_count = 0 Set_mode = 1
Begin2 :
Timer
Gate = Internal
Mode
> 3
Then
' set to internal interrupt 4000 times a sec with 12mhz xtal On TimerO Timer_0_overflow_int Load TimerO , 250 Priority Set TimerO Enable Interrupts
Enable TimerO ' do not start tlmerO here
+ 1
-0+++++++++++++ 0 12 3 .125
0 12 3
'201 202
' '
-55 -54 -3
-2 -1
.. ..
.125
plus range If Settemp <= 200 Then If Settemp >= 125 Then Settemp = 125 ' limit + reached
End If End If
Disp_temp
Microcontroller-Based Projects
235
End If
\
End If
If Sw_set_down Sec_count = 0
Settemp
C Then
Settemp
Tempdegree
_o+++++++++++++
'
0 12 3 .125 0 1 2 3 ...125
..
'
limt exceeded
Dispset: Rem display preset temperature Set disp temp = Settemp P3.4 = 0 P3.5 0
1
End If
*
End If
If Sw_set_disp 0 Sec_count
C Then
_ _ _ _
_ _
0 12 3 ...125 -54 -3 -2-1 '201 202 253 254 255 0 12 3 ...125 If Settemp >= 100 Then If Settemp <= 125 Then Set disp temp Settemp - 100 P3.4 = 1 * switch on hundred segment b/c End If
' -55
_o+++++++++++++ ----------
End If
Wend
-0+++++++++++++ ' -55 -54 -3 -2-1 0 1 2 3 .125 >201 202 253 254 255 0 12 3 ...125
----------
..
End If
'
Set_mode
Return
= 1
' add 55 to both sides to avoid negative errors for comparison ' byte variable does not support (-) values Comp_temp = Tempdegree + 55 Comp_set = Settemp + 55
"''If Tempdegree >= Settemp Then If Comp_temp >= Comp_set Then
Relay_out
'relay on
Else
If Set mode 1 Then 1 if in set mode make display flicker Display_port = 255 1 blankout the display Waitms 10 ' turn it on again
Goto Begin
Disptemp:
Disp_temp
Tempdegree
'
<
Timer_0_overflow_int : 1 program comes here 4000 times a sec 1 with a 12mhz xtal Incr Clock_word
If Clock_word > 4 000 Then Clock_word = 0 Incr Sec count End If
'
interrupt subroutine
_55 _54
'201 202
0 12 3 ...125 0 12 3 ...125
End If
Disp temp = Tempdegree - 100 P3.4 1 ' switch on hundred segment b/c
236
Industrial
timers can be con-structed using discrete compo-nents including up/down counters and timers. However, to incorporate various facilities like setting the count, start, stop, reset and display, these circuits would require too many ICs and discrete components. A microcontroller-based industrial timer can be programmed and used as a timer, counter and time totaliser. Here is a simple design based on 40-pin Atmel AT89S52 microcontroller that performs count-down operation up to 9999 minutes/second with four 7-segment displays showing the actual time left. The relay energises as you press the start switch and remains on till the countdown reaches *0000.' Four tactile, push-to-on switches are used to start/stop, select either minutes or seconds, and set the initial value for countdown operation (using 'up' and 'down' keys).
Circuit description
Fig. 1 shows the circuit of the microcontroller-based industrial timer. The microcontroller is Atmel AT89SS2 (IC1), which is a 40-pin device with 8 kB of program flash memory, 256 bytes of RAM, 32 I/O lines, Watchdog timer, two data pointers,
three 16-bit timer/coun ters, a six-vector two-level interrupt architecture, a full-duplex serial port, onchip oscillator and clock circuitry. The power-down
UNREGULATED
D1
1N4007
RL1
COM
3.8
COM. 3,8
6V. 1C/0
RELAY
mode saves the RANI con but freezes the oscilla tor, disabling all other chip functions until the next interrupt or hardware reset
tents
is activated.
R2-R9 = 270n
Port P0 of microcon troller AT89S52 is config ured for segments of the 7-segment display. Port 0 is an 8-bit open-drain bidi rectional I/O port. Port 0 is pulled up with 10-kilo-ohm resistor network RNW1. Port pins PO.O through P0.6 are connected to pins of segments 'a' through 'g' via resistors R2 through R8, respectively. Port P0.7 is connected to decimal via resistor R9. Resistors R2 through R9 are used as cur rent limiter for various seg-
E=!
AT89S52
O
R10 R13
470'.}
R14 - R18 = 8.2K Xtai = 20MHz T 1-T4 = BC557 DIS1-DIS4 = SP5501 OR LTS542
Microcontroller-Based Projects
237
O-Sok
S6
ON/OFF SWITCH
230V AC
'
1000p~
O
UNREGULATED
I
Semiconductor: IC1
PARTS LIST
IC2 T1-T4 TS BR1 D1 DIS1-DIS4
7805 5V regulator - BC557 pnp transistor npn transistor - BC547 1A bridge rectifier
50Hz
' 7805
o
-
+5V
XI = 230V AC
PRIMARY TO 7.5V, 350mA
QND
SECONDARY TRANSFORMER
control DISl through DIS4. Port 2 is an 8-bit bidirectional I/O port with internal pull-ups. When port-2 pin is low, the transistor con
to
AT89S52 micrcontroller
ducts and provides supply to the common pin of 7-segment display. Port pins P2.5 through P2.2 control DISl through DIS4 with the help of transistors Tl through T4, respectively. The microcontroller drives the 7-segment displays in multiplex mode. This helps in reducing current consumption while maintaining the brightness of the display For driving the displays, timer 2 inside the microcontroller is used. It enables display of each digit every two
milliseconds. For driving the displays, the microcontroller uses port-0 to send the segment outputs. It selects the corresponding unit's, ten's, hundred's and thousand's displays through P2.5, P2.4, P2.3 and P2.2, respectively. Four pins of port 1 are used for various switches like select, up, down and start/stop. Port 1 is an 8-bit bidirectional I/O port with internal pull-ups. Switches SI through S4 are connected to pins 5
R2-R9 R10-R13
RNW1
Capacitors:
CI
C4, C6 C5
XI
C2.C3
Miscellaneous:
Xtal
RLl S1-S5 S6
*>
20MHz crystal
Fig. 3: An actual-size, single-side PCB layout for the microcontroller-based industrial timer including power supply
through 8 of the microcontroller and used for select, up, down and start/stop functions, respectively. Pin P3.7 controls relay RL1.When pin P3.7 goes high, transistor T5 is driven into saturation and relay RLl energises. Diode D1 serves as a free wheeling diode. Any appliance can be connected with contacts of relay RLl. Power-on-reset is achieved by con necting resistor R1 and capacitor CI to pin 9 of the microcontroller. Other ends of the capacitor and resistor are con nected to Vcc and ground, respectively. Switch S5 is used for manual reset. The microcontroller is operated with the clock derived from a 20MHz crystal oscillator. Power supply. Fig. 2 shows the cir cuit of the power supply. The AC mains is stepped down by transformer XI to deliver a secondary output of 7.5 V at 350 mA. The transformer output is rectified by a full-wave bridge rectifier BR1, filtered by capacitor C5 and regu lated by IC2. Capacitor C6 bypasses any ripple present in the regulated
AT89S52-Based IndustrialTimer
238
output. Unregulated power supply is used for relay RL1. An actual-size, single-side PCB layout for the microcontroller-based industrial timer (Fig. 1) including power supply (Fig. 2) is shown in Fig. 3 and its components layout in Fig.4.
DIS1-DIS4= LTS5t2
EFY.SUNIL.IND.TIMER.JUNE-D7
19 AO 0 9 9 9 0 9A069 0 899 9
o
6U, 1C/0
0
1.9
DO
9 9 9 9 9 9 9 9 9 99999 9 9 9 9 9
T2
BC557
BC557 BC557
RELAY
R2-R9=270E
D4 D*
Operation
Switch on the circuit using using ON/ OFF switch S6. The microcontroller is reset by power-on-reset and then timer is in seconds mode. The 'select' key selects the mode between 'seconds' and 'minutes.' This is displayed as '0' for seconds and '1* for minutes on the hundred's digit display (DIS3),
o o o o o o o
BC548
T5
7. 5U
1Oj
CI
8 5 3 5 3 3 3 3 8 8 8 8 8 3 3 3 15 0 3
ICl AT89S52
BR1
0 0 9 0 9 9 0 9 0 9 0 fi 9 0 Q~3 6 9 0 CT
SELT.
ST OWN
START,
C2 I
Vot7 lOOOu
set
STOP
utO d 0
ting in seconds and minutes. 8. 2K 'Down' key decrements the time 33p 33p 4 setting in seconds and minutes. lu H14 R16 R15 R17R18 RH-R18=8.2K After setting the desired time with the help of 'up' and 'down' keys, press Fig. 4: Components layout for the PCB 'start' key. This energises the relay. The timer counts down for the set time and once the display becomes zero, the relay de-energises. The timer will stop before preset time by pressing 'start' key again.
Software
The source program is written in 'C'language and compiled with Keil Microvision 3 IDE. It is well commented and easy to understand. Download C51V808A.EXE from 'www.keil.com/demo/eval/c51.htm."Ihis file is a freely available and self-extracting setup program for Keil Microvision 3 IDE. Normally, when there is no interrupt, the microcontroller executes 'while' loop in the main function. Here it scans the keys and acts according to the key pressed. Two interrupts are enabled in the software, namely, timer 0 and timer 2. Timer 0 counts milliseconds, which are then accumulated to seconds or minutes according to the user selection. Timer 2 drives the displays in multiplex mode. For time counting, timer 0 is initialised by the void TimerO_init(unsigned char TimerOh,unsigned char TimerOl) function. Timer 0 interrupts the microcontroller every millisecond. When interrupted by timer 0, the microcontroller executes the void isr_t0(void) function wherein it in crements two counter variables, namely, TimerOCounter and LedCounter. TimerOCounter is responsible for counting the number of milliseconds elapsed and increments the minutes/seconds counter according to the mode selected ('seconds' or 'minutes' count). Once the set value is reached, the timer-0 interrupt is disabled and time counting stops. The LED counter makes the dot LED of the unit's digit flash every second once. Display-driving process is taken care of by the built-in timer 2. Timer 2 is initialised by the void Timer2_ init(unsigned char Timer2h,unsigned charTimer21) function. Timer 2 gives an interrupt to the microcontroller to switch on the common pin of each 7-segment display for every two milliseconds. When an interrupt occurs, the void isr_t2(void) function is executed and the mi crocontroller returns to 'while'loop in the main function.
Download Source Code: http://www.efymag.com/admin/issuepdf/Industrial%20Timer.zip Microcontroller-Based Projects
239
SOURCE PROGRAM
include
/*** RENAMING OF PORTS ***/ Idefine SegPort P0 Idefine DigPort P2 /* CODE FOR LIGHTING EACH SEGMENT OF THE SEVEN SEG */ Idefine seg_a Oxfe Idefine seg b Oxfd Idefine seg_c Oxfb Idefine seg_d 0xf7 Idefine seg e Oxef Idefine seg_f Oxdf Idefine seg_g Oxbf Idefine seg_dot 0x7 f /* SEVEN SEGMENT CODE FOR EACH NUMBER FROM 0 TO 9
AND SPACE */ Idefine NUM_0 (seg a & seg b & seg_c & seg d & seg_e
unsigned
char Units; char Tens; char Hunds; char Ths; int Timer0Counter=0; char DisplayCour,ter=0; int LedCounter=0; char TimeDig; int OneSecCount=0; int SetSec=0; char OneMinCount; char key; char KeyCount; char Mode;
,DOT
/* FUNCTION PROTOTYPES */
void TimerO_init (unsigned char TimerOh, unsigned char
TimerOl) ;
seg_f) Idefine NUM_1 Idefine NUM_2 Idefine NUM_3 Idefine NUM_4 Idefine num_5 Idefine NUM_6 & seg_g ) Idefine NUM_7
6
sec_c) seg_b & & seg_b & 4 seg_c S s seg_c & s seg_c &
&
Timer21) ;
void Display (unsigned char Digit); void IntToSevSeg (unsigned int TimeTemp) ; void KeyDebounce (unsigned char dly) ; void Keyscan (void) ; /' RENAMING PORT PINS FOR EASY USAGE */ sbic RELAY = P3~7;
sbit SEL
Pl*5; sbit UP P1A6; sbit DN Pl"7; sbit STRT
&
seg_b s seg_c)
Idefine NUM 8
S
seg_f
Pl"4;
&
seg_g)
Idefine NUM_9 (seg_a & ocg_b & scg_c seg_d & seg_f & seg g) Idefine NUM_DOT (seg_dot) Idefine NUM_SPACE OXff;
const unsigned char hex_table[] = (
/* MAIN FUNCTION /
void main (void)
{
RELAY
NUM_0, NUM_1,NUM_2, NUM_3, NUM_4 , NUM_5, NUM_6, NUM_7, NUM_8 ,NUM_9, NUM_DOT
);
0;
/* ADDRESS FOR SELECTING THE COMMON PIN OF THE DIS PLAY FOR EACH DIGIT */
Idefine UNITS Oxdf
Idefine TENS Oxef Idefine HUNDS 0xf7 Idefine THS Oxfb /* RELOAD VALUE FOR TIMER2 FOR INTERRUPT DURATION OF 2 MILLISECONDS */ Idefine TIMER2H_2MS 0xf2 Idefine TIMER2L_2MS Oxfb /* RELOAD VALUE FOR TIMERO FOR INTERRUPT DURATION OF
1 MILLISECOND */
Keyscan ( ) ;
switch ( key)
(
case 4 :
if (SetSec>0)
if (TRO==0)
{
/* VECTOR VALUE FOR TIMER INTERRUPT */ Idefine TIMEROVECTOR 1 Idefine TIMER2 VECTOR 5 /* MINUTES AND SECONDS CONSTANTS */
OneSecCount = SetSec;
240
AT89S52-Based IndustrialTimer
TLO = TimerOl;
RELAY = 1;
ET0=1;
TR0=1;
TR0=1 ;
)
else
(
TR0=0;
}
i
key=0;
break;
{ T2CON = 0x04; T2MOD = 0x00; TH2 = Timer2h; RCAP2H=Timer2h; TL2 = Timer21; RCAP2L=Timer21; ET2=1; TR2-1;
)
case 3:
SetSec-;
*/
key=0;
break;
case 2:
SetSec++;
if <(UP==0)
{
II
(DN==0)
KeyCount;
if (Set5ec>9999)
SetSec=0;
key-O;
if (KeyCount<l) KeyCount-1;
KeyDebounce (KeyCount) ;
break;
case 1:
Nbde++;
else
KeyCount=10;
if (Mode>l)Mode=0;
Hunds=hex_table [Mode] ;
Tens =
NUM_SPACE;
Units
= NUM_SPACE;
dly;
key=0;
KeyDe-
bounce (10);
break;
)
i
/* TIMER INITIALISATION FUNCTIONS */ void TimerO_init (unsigned char TimerOh, unsigned char
TimerOl)
case 0:
DigPort = UNITS;
SegPort = Units; break;
{
TMOD &= OxfO; TMOD |= 0x01;
case 1:
DigPort = TENS;
THO = TimerOh;
Microcontroller-Based Projects
241
SegPort = Tens;
break;
case 2:
DigPort = H'JNDS;
SegPort
break;
case 3:
Hunds ;
/*
DigPort = THS;
SegPort
Counts Seconds
*/
break;
)
Ths;
1;
/*
INTEGER VALUE TO SEVEN SEGMENT CONVERSION FUNC
TION */
<
TimeDig = TimeTemp/1000; TimeTemp -= (TimeTemp/1000) *1000;
)
if (TimeDig==0)
(
Ths=NUM_SPACE;
)
if (Mode==0)
else
(
1
if (TimerOCounter>SEC)
Timer0Counter=0 ;
OneSecCount
<
;
{
if (OneSecCount==0)
//OneSecCount=0;
TRO=0;
RELAY
Hunds=NUM_SPACE;
)
else
{
t
J
}
0;
else if(Mode==l)
{
Tens=NUM_SPACE;
}
if (TimerOCounf er>MTN)
t
I
else
{
Timer0Counter=0;
OneSecCount
;
I
1
if (OneSecCount>MIN)
0neseccount=0 ;
TRO=0;
RELAY = 0; }
(
/* Interrupt Routines */
}
***************** *
end *****************/
242
AT89S52-Based IndustrialTimer
K.S. SANKAR
Frequency
meters have always been ex pensive tools for the average hobbyists. Now,with microcontrollers and liquidcrystal displays (LCDs) having become very economical and popular, it is possible to build a compact and low-cost LCD-based frequen cy meter that can measure up to 250 kHz. A sample photo of the LCD module is shown in Fig. 1.These modules are available in 14- and 16-pin configurations. The 16pin module has a backlight option. Popular
1. CONFIG LCDPIN. This instruction stores the pin usage in your program: Syntax: CONFIG LCDPIN = PIN,
E-P1.5, RS-P1.6
Note. LCD-module pin names are as used in Fig. 3. 2. CONFIG LCD. This instruction is used for configuring the LCD display type:
Syntax:
CONFIG LCD = LCD type LCD type can be one of the following:
40x4, 40x2, 16x1, 16x2, 16x4, 20x2 or 20x4 or 16xla or 40x4a. Note. Default 16x2 is assumed. The 16xla LCD display is a special one. It is intended for the display that has the memory organised as two lines of eight characters. "The 40x4a LCD display is also a special one. It has two ENABLE lines.
Example:
CONFIG LCD = 40x4 LCD "Hello" instruction is used for displaying 'Hello' on the LCD screen. FOURTHLINE instruction selects line No. 4 of the screen for subsequent
instruction.
Fig. 1:A Typical LCD module
LCD "4" displays '4' on the screen END 3. CONFIG TIMER0, TIMER1. This instruction is used for configuring
timer-0 or timer-1.
TABLE 1
Syntax:
CONFIG TIMERx = COUNTER/TIMER, GATE=1NTERNAL/EXTERNAL, MODE=0/3 Remarks: TIMERxTIMERO orTIMERl. COUNTER will configure TIMERx as a COUNTER and TIMER will configure
Pin no.
Description
1 2
3 4
Gnd Vcc
Vo RS
5 6 7 to 14 15 & 16
R/W E
DBO to DB7 LED BLA&K
vss
VDD VO RS
LCD
TIMERx as a TIMER. A TIMER has built-in clock input and a COUNTER has external clockinput. GATE INTERNAL or EXTERNAL. Specify EXTERNAL to enable gate controlwith the INT input. MODE Specify timer/counter mode 0-3. See the datasheet for more details.
Example:
CONFIG TIMERO=COUNTER, MODE=l, GATE=INTERNAL COUNTERO = 0 instruction resets counter 0 START COUNTERO enables the counter to start counting DELAY 'wait a while PRINT COUNTERO instruction prints the counterO count.
END
DBOTO DB7
BACKLIGHTING
Microcontroller-Based Projects
243
ON/OFF
230V
81
SWITCH AC 50Hz
nI
X1
C5 CD
D1-D4 = 1N4007
CD
o o
7805 3
o
CD
OV
r\\LED1 1 122223
R6 R9 = 10K
+Vcc
20
PI.7
S2
C6
19
10m '16V
RST
P1.6 P1.5
P1.4
18
R3 4 7K<
C7
0.1m
17
16
14
P1.2
P1.3
IC2 AT89C2051
8
4
5
TO
:10K
R4
15
GND
10
p!'
Xtal2
D7 D6
14
> VR1
XtalI
R2
10K
-:
D5
1N4148
D5
D4
11
RS EN R/W
4
GND
1 16
C4 22p
HOH
Xtal
24 MHz
13
12
Q
A
T1
BC547
16*2 LCD
L_
-L C5
- 22p
brands are Lampex and Hantronix. Note the pin numbers before sol PARTS LIST dering to the circuit. In this project, the LCD module used is Lampex LM16200 with 16 Semiconductors: - 7805 5V regulator IC1 alphanumeric characters and two lines with backlight option. Pin details 1C2 - AT89C2051 microcontroller - CD4050 hex buffer of this module are given 1C3 Tl - BC547 npn transistor in Table I. A functional D1-D4 - 1N4007 rectifier diode TABLE II - 1N4148 switching diode of the module is D5 diagram LCD Connections Used for LED1 - 5mm LED shown in Fig. 2. Resistors (all Vi-watt, i.5% carbon): 4-Bit Data Mode However, you may use Rl - 1-kilo-ohm R4, R2, R6-R9 - 10-kUo-ohm Port LCD display Pin branded unbranded or any R3 - 4.7-kilo-ohm 2-line, 16-character LCD R5 14 P1.7 DB7 - 150-ohm module for this project. The Capacitors: 13 DB6 P1.6 - IOOOliF, 25V electrolytic 10k potentiometer, which Cf DB5 P1.5 12 - 0.1pF ceramic disk C2,C3, C7 controls the contrast of the C4.C5 - 22pF ceramic disk DB4 11 P1.4 C6 - IOuF, 16V electrolytic works best LCD module, P1.3 6 E Miscellaneous: when its wiper contact is XI - 230V AC primary to 9V, 4 RS P1.2
RW Vss Vdd Vo
Ground Ground
5 1
2
3
Circuit description
Fig. 3 shows the circuit of the frequency counter
XrAL
SI S2
250mA secondary transformer On/OfF switch Push-to-on switch 24 MHz 16x2 LCD
244
INITIALISE PORTS
CONFIGURE LCD
CONNECTIONS
CONFIGURE TIMERO
AS A COUNTER
controller used is AT89C2051, which features 2 kB of Flash, 128 bytes of RAM, 15 input/out put (I/O) lines, two 16-bit timers/coun
ters, a five-vector
<<
SUBROUTINE
ENABLE
INTERRUPTS
chip oscillator and clock circuitry. R6-R9=10K ONE SECOND ACCURATE EFY/SUNIL/gEQ/'FEB06 DELAV LOOP Port-1 is used Q C6 IC1 to drive the LCD p out iNh GET COUNTER VALUE in 4-bit mode with AFTER ONE SECOND 10-kilo-ohm pullDISPLAY THE COUNT ON up resistors. The o LCD AS FREQUENCY 24MHz crystal used gives a processing speed of 2 million instructions per sec Fig. 4: Flow-chart of the frequency0000000D c ond (MIPS). counting program lOOOu ado Timer-0 is used H OK as an external counter to count the input pulses. EFYSUNI L/FRE Transistor Tl amplifies the input signal, while noninverting gate N1 (1/6 CD4050) serves as a buffer for Fig. 6: Component layout for the PCB coupling the amplified pulses to input pin 8 (P2.4) of timer-0. A software gate of one-second duration is used to count the number of pulses corresponding to the frequency of the input signal source. The count value is read and displayed on the 2-line, 16-character LCD module.The flow-chart of the frequency-counting routine is shown in Fig. 4. A conventional power supply circuit comprising a step-down transformer followed by a bridge rectifier, smoothing capacitor and 5V regulator is used to power the circuit. Capacitor C2 (O.lpF) filters ripples in the output of the regulator and LED1 shows the supply status. To test the circuit, connect any pulse generator output to the probe and check the frequency displayed on the LCD screen. The LCD module is used in the 4-bit data interface mode, wherein only data pins DB4 through DB7 are used for data transfer. The configuration used is shown in Table II. An actual-size, single-side PCB for the LCD frequency meter (Fig. 3) is shown in Fig. 5 and its component layout in Fig. 6.
c_>
"403" S?
The software
The software is compiled using the demo version of BASCOM-8051, which can be downloaded from website 'www.mcselec. com.' Syntax of some of the important instructions used in the program is shown in the box along with examples. The BASCOM compiler provides special instructions for use and display of data on the LCD module. For use of BASCOM, you may refer to the article 'Real-Time Clock' published in Jan. 2005 issue of EFY.
Microcontroller-Based Projects
245
The source code file EFY80FM24.BAS for this LCD frequency meter in BASCOM-S1 is given at the end of this article. The same may be modified to meet your specific requirements. Download Source Code: http://www.efymag.com/admin/issuepdf/Frequency%20Meter.zip
EFY80FM24
1
3-12-05
* ok with word variable 45440 * Frequency Meter Program using AT89c2051 micro
from www.mcselec.com holland an embedded visual basic compiler for 8051 micro controllers * by K.S.Sankar Web: www.mostek.biz
1
' interrupt will be generated on every 65536 count Priority Set TimerO Enable Interrupts Enable TimerO
CounterO = 0 'clear counter Start CounterO 'enable the counter to count
erator
'
'
define crystal speed and include file Sregfile = "89C2051.dat" Scrystal = 24000000
'
' define variables used Dim A As Byte Dim C As Long D A3 Long Dim Count As Word Dim Onceasec As Bit Dim TOic As Long Dim Green As Byte Dim Delayword As Word
Disable Interrupts
C = CounterO 'get counter value D TOic * 65536
--
0
0
Lowerline C = C + D TOic 0 Led " Lowerline ' show the frequency Led "f-" ; C ; " Hz" Waitms 255 Waitms 255
II
PI P3
1
'
initialize ports
0 255
CounterO = 0
Start CounterO
configure led display Config Led = 16 * 2 Config Lcdpin = Pin , Db4 = PI.4 , Db5 = PI. 5 PI. 6 , Db7 = PI.") , E = PI.3 , Rs = PI. 2
Cls
Db6 =
interrupt
conies
here
' define timerO Config TimerO = Counter , Gate = Internal , Mode = 1 'TimerO = counter : timerO operates as a counter 'Gate = Internal : no external gate control ' exte/internal makes no difference
program memory
246
T:
1
he basic requirements of a realtime programmable timer generally used in schools and colleges for sound I
ing the bell on time are: Precise time base for time keeping. Read/write memory for storing the bell timings. LCD or LED display for displaying real time as well as other data to make the instrument user-friendly. Keys for data entry. Electromechanical relay to operate the bell. PARTS LIST We are describing here a sophisticated, yet economical, school timer Semiconductors: based on Motorola's 20-pin MC68HC705J1A microcontroller.
IC1
Description
The pin assignments and main features of the microcontroller are shown in Fig. 1 and the Box, respectively. The complete system is divided into four sections, namely, the time keeping section, the input section (keyboard), the output (display, indicators, and relay driving) section, and power supply and bat
tery backup.
i In
n nn
68HC705JIACP Microcon troller CD4532 8-bit priority En IC2 coder IC3 74LS138 3-line to 8-line decoder IC4 74LS47 BCD-to-7-segment decoder/driver T1-T3 BC547/BC147 npn transistor 2N2907 pnp transistor T4-T7 1N4007 diode D1-D7 5.6V, 0.5 watt zener ZD1 Resistors (1/4-watt, 5% carbon, unless
other-wise)
R1 R2 R3,R12-R14, R24-R-27 R4-R8
stated\
MC6BHC70SJ1A
ing depends on the accu ldbJldbJLdbsJldlJHL2J racy of time base used for the microcontroller. driving In this project, the microcontroller is driven by Fig. 1: MC68HC705J1A pin assignment
10-kilo-ohm 47-ohm
10-mega-ohm
10 mA sink capability on four I/O pins (PA0-PA3). 1,240 bytes of OTPROM, including eight bytes for user vectors.
64 bytes of user RAM.
Memory-mapped I/O registers. Fully static operation with no minimum clock speed. Power-saving stop, halt, wait, and data-retention modes. Illegal address reset. A wide supply voltage range from-0.3 to 7 volts. Up to 4.0 MHz internal operating frequency at 5 volts. 15-stagc multifunction timer, consisting of an 8-bit timer with 7-bit prc-scalcr. On-chip oscillator connections for crystal, ceramic resonator, and external clock.
C6 Miscellaneous: Push-to-on switch (key) S1-S5 S6 On/off switch Piezo buzzer PZ1 RL1 Relay 12V, 300-ohm, lC/O 3.2768MHz crystal XTAL 230V AC primary to 12VXI 0-12V, 500mA secondary transforer DIS.1-DIS.4 - LTS542 common-anode dis-
350|iF, 25 V electrolytic ljiF, 16V electrolytic 27pF ceramic disk 0.1pF ceramic disk
play
* 4 x 1.2V Ni-Cd cells
Microcontroller-Based Projects
247
AT-cut parallel resonant crystal oscillator that is expected to provide a very stable clock. A 3.2768MHz crystal provides a time base to the controller. The frequency (fosc) of the oscil lator is internally divided by 2 to get the operating frequency (fop). This high-frequency clock
source is used to control the se quencing of CPU instructions. Timer. The basic function of a timer is the measurement or generation of time-dependant events. Timers usually measure time relative to the internal clock of the microcontroller.
The MC68HC705J1A has a 15-stage ripple counter preceeded by a pre-scaler that divides the internal clock signal by 4. This provides the timing references for timer functions. The programmable timer
status and control register (TSCR) is used for deciding the interrupt rate. It can be programmed to give interrupts after every 16,384, 3,2768, 65,536, or 131,072 clock cycles. In Table I, the control word is set to provide the interrupts after every 16,384 cycles. For a 32,768MHz crystal, the inter rupt period will be 10ms. Thus, timer interrupts will be gener ated after every 10 ms (100 Hz).That is, 100 interrupts will make 1second. Now time-keeping becomes very simple. As we are having -second time count, a precise 1 a real-time clock can be easily built. A has The MC68HC705J1 a 64 byte RAM that is used for data storage, Real time (in terms of seconds, minutes, hours, days of a month, and months) is stored in this RAM. Thus an accurate real-time clock is generated.
3a s
VITW0HB90W
lOlH
:\i
O
T
o VAV
si zS
O O
248
The input section. For setting the real-time clock and storing operating times, the timer requires to be pro grammed externally. Data is fed using the keyboard. Press-to-on type keys are interfaced to the microcontroller using an 8-bit priority encoder CD 4532. This en coder detects the key-press operation and gen 12V DC erates the equivalent 3-bit binary data. Its truth O table is shown in Table II.The priority encoder 5V(b) 06 Vcc is interfaced to port A of the microcontroller. 1N4007 Various keys used in the timer, along with V5V(a)
?30V AC SUPPtV
D1 12V 1N40Q7
R1
2ion
12V
Wlr
05Wmv
C1
R2
D3 1N40Q7
D5 Voo 1N4007
1.2V X 4 NiCd
27C1
S6V ZENER
CM 1N4007
BATTERIES
"Sfo
% >3,
their functions, are described below: Time (4): For setting real time in minutes and hours. Bell (5): For setting the bell's operating timings. Digit Advance (6): Data setting is done digitwise (hour's digit followed by minute's digit). The Digit Advance key shifts the deci mal point to the right. Store (7): For storing the data (real time or bell time). Delete (3): For deleting a particular bell timing. Here, the figures within parentheses indi cate the decimal equivalents of 3-bit binary data from the keyboard. Set and run modes. Data setting is possible only in set mode. Set mode or run mode can be selected by toggle switch S6. By using a lock switch for S6, the timer can be protected from unauthorized data entry/storage. In run mode if you press 'Bell' key once, the display shows the bell's various operating timings one after the other, in the same order in which these had been previously stored. In case you want to discontinue seeing all the bell timings, you may press 'Time' key at any stage to revert back to the display of real time. The output section. Seven-segment displays are used for data display. As LEDs are brighter, these have been used in the system. There are two techniques for driving the displays: (i) driving each display using a separate driver (like 74LS47 or CD4511) and (ii) using multiplexed displays. The first technique works well, but practi cally it has two problems: it uses a large number of IC packages and consumes a fairly large amount of current. By using multiplexed display both the problems can be solved. In multiplex ing only one input is displayed at any given instant. But if you chop or alter inputs fast enough, your eyes see the result as a continuous display. With LEDs, only one digit is lighted
249
Microcontroller-Based Projects
.....
DIS4
up at a time. This saves a lot of power and also components, making the system economical.
op
aa
a i o0 o o o o o a o o o a B o a0 00
displays. In multiplexed display, the current through J7 the segments is doubled to increase the display's =271 oaooooooQaooBooQ brightness. 74LS47 is rated for sinking a current BC147 " B C lj IC4 IC3 of up to 24 mA. As the current persists for a very T3|SBa Vt?E 7447 74138 f . small time in multiplexed display, it is peaky and D 0 0 0 0 0 0 o' or *23 R can be as high as 40 mA per segment. QiIiJ3.2768MHO O The decimal point is controlled indi U1N4007 vidually by transistor BC547, as 74LS47 1C68HC705Jlfl { ill f6U BC1470 | | o does not support the decimal point. PA0 000 and PA1 bits of port A are used for control BC147. R29 ling the electro-mechanical relay and buzzer, respectively. BUZZEF SIP6C100KX5) USED Power supply and battery backup. The mi INPLACE OF R4-R3 0 and the associated IC packages crocontroller 0 IC2 require a 5V DC supply, while the relay and the 4532 >*V buzzer require 12V DC supply. A simple rectifi 0 0 0 00 0 0 6 6U 27E er along with zener diode-regulated power sup 100KX5 SIP6 O oL IB o oo al nl R9| /-\ZD* Q ply is used. The microcontroller is fed through 10 UP C1 o) O (o a battery-backed power supply, so that in the [alo 0 0 ! QS6o| V. |0_0_0j o2 case of power supply, so that in the case of <BD C_y MOTOROLA 3UCUBnSED SCHOOL IMER power failure the functioning of the control ler's timer section is not affected. During power Fig. 5:Component layout for the PCB failure the timer is taken to 'low power' mode (called 'wait' mode). In this mode the controller draws a very small current. So small Ni-Cd batteries can provide a good backup. A simple diode-resistance (27-ohm, Vi-watt) charger maintains the charge of the battery at proper charging
V X X'
R27
0 0 0 -T7=2N2907
iiTEKff*
__
026
Generally, displays are refreshed at a fre quency of 50 to 150 Hz. Here, displays are refreshed at a frequency of 100 Hz (after every 10 ms). The display-refreshing program is an interrupt service routine program. BCD-to7-segment decoder/driver 74LS47, along with transistor 2N2907, and 3-line-to-8-line decoder 74LS138 are used for driving common-anode
_ _ .....
.
ol
Ts2f5
12U-0-12lABflT
rate.
Software
Freescale offers Integrated Development Environment (IDE) software for programming its microcontroller and complete development of the system. The development board comes with Editor, Assembler, and Programmer
software to support Freescale's device programmer and software simulator. The ICS05 in-circuit simulator and non-real-time I/O emulator for simulating, programming, and debugging code for a MC68HC705J1A/KJ1 family device. When you connect the pod to your host computer and target hardware, you can use the actual inputs and out puts of the target system during simulation of the code. You can also use the ISC05 software to edit and assemble the code in standalone mode, without input/output to/from pod. The pod (MC68HC705J1CS) can be interfaced to any Windows 3.x-or Windows 95-based IBM computer using serial port. The software for the timer has been so developed that the system becomes as user-friendly as possible. The main constraint is read/write memory (RAM) space. As mentioned earlier, the microcontroller has only 64 byte
250
RAM. About twenty bell operating timings are required to the stored. So the efficient use of RAM becomes essential. Basically, the follow ing functions are per formed by the software program: 1. Initialisation of
ports and the timer.
RTIE
0
TOFR
0
RTIFR
1
RTI
1
RTO
RT1E: Real-time interrupt enable RTI and RTO: Real-time interrupt select bit
For 3.2768 MHz crystal Frequency of operation (fop) = 3.7268x106/2 = 1.638x106MHz
For RTI=RTO=Q
2. Reading of keypressed data. 3. Storing of real time and bell timings. 4. Comparison of real time and bell time. If the Keys two match, the bell rings. Store 5. Display of data.
El D7 1 IX
1 1 1 1
01
D6
DS
X
X 1 0 0
X
X X
D4 X
X X X 1
D3
X
X X X
D2 X
X X X
D1 X
X X X X
6. Time-keeping. 00 For a user-friendly Bell 1 Time 00 system, the associated 00 0 1 X X software is required to Delete perform many data ma nipulation tricks and internal branching. The operation and logic can be understood from the Assembly language listings. The software is mainly divided into the following modules: Keyboard. When a key is pressed, CD4532 sends the corresponding data. After reading the data, the controller decides on the action. 'Set/ Run key (S6) is connected to port PA4. Bell. This part of the program is used for displaying the bell operating timings stored in the RAM.The operat ing timings are displayed one by one with a delay of 5 seconds between tow consecutive timings. Set. The real time and bell timings are stored using this part of the software. Data is entered digitwise; for example, 08:30 a.m. will be stored a 0, followed by 8, followed by 3, and finally 0. Data is stored in 24-hour format. Data fed from the keyboard is converted into equivalent hex and stored in RAM. Any particular operating timing can be deleted from the memory using 'Delete' key, provided the timing is already stored in the memory. Run. Here the real time is compared with bell operating time. If the two match, the relay is operated. DataCon. This part of the software is used for finding out the decimal equivalent of hex data. The microcon troller manipulates the hex data and converts it into BCD format for display. Timer. The timer of the microcontroller is initialized to give an interrupt after every 10 ms. A real-time clock is generated using the interrupt. Also the display is refreshed during the interrupt service routine. For real-time systems battery backup is very essential, because power failure affects the time keeping. In interrupt service routine, the availability of power supply is checked. If the power is available, displays are refreshed and the timer operates normally. However, during the power-failure period, displays are off and system is taken to 'low power' mode. In this mode only the timer part of the microcontroller remains activated while operations of all other peripherals are suspended. This considerably reduces the power consumption. When the supply gets restored, the controller starts operating in normal fashion.
Digit Adv.
DO 1 1 1 1 0
Q2
1 1 0 0 1
Q?
l 0 1 0
OP
l 0 1 0 1
Operating procedure
When the power is switched on, the display shows 12.00.Two settings are required in the timer: (a) setting of real time and (b) setting of bell operating timings. For setting real-time clock 'Time' key is used. Storing of realtime. To store real time, say, 05:35 p.m., flip 'Run'/'Set' key (S6) to set mode.The display will
Microcontroller-Based Projects
251
show '0.000'. Press 'Time' key. Further pressing of 'Time' key will increment the data, like 0.000, 1.000, 2.000, and thereafter it will repeat 0.000, etc. To select the digit, press 'Digit Advance'. This stores the present digit and the next digit is selected as indicated by the decimal pointer. Data is stored in 24-hour format. The time to be stored is 17.35, of which the first digit will be 1.000.The second, third, and fourth digits can be stored in similar fashion. After the fourthdigit, press 'Digit Advance' key once more. The display will show 1735 (with no decimal). Now press 'Store' to store the data. Storing ofbell timings. The procedure to store bell operating timings is similar to that of setting real time. The only difference is that here data is changed by 'Bell' key in place of 'Time' key. Any number of bell timings (<20) can be stored in the same fashion. If the number of bell operating timings exceeds 20, the timer will not accept any new bell timings until one of the previously stored timings is deleted. Deletion ofbelloperating timings. For deleting a particular timing, first store this timing using the steps given above. Then press 'Delete' key to delete the specific data from the memory. Display of realtime. If 'Run'/'Set' key is taken to run mode, real time will be displayed. Checking ofhelloperating times. For checking the bell operating times, press bell key in 'Run' mode only. The stored bell operating timings will be displayed one by one with a delay of 5 seconds between two consecutive timings.
Programming
There are two ways to program the EPROM/OTPROM (one-time programmable ROM): 1. Manipulate the control bits in the EPROM programming register to program the EPROM/OTPROM on a byte-by-byte basis. 2. Program the EPROM/OTPROM with Motorola's MC68HC705J in-circuit simulator. The author has used the second method for programming the OTPROM. An actual-size, single-sided PCB for the circuits in Figs 2 and 3 is shown in Fig. 4, with its component layout shown in Fig. 5. Downloadsource code: http://www.efymag.com/admin/issuepdf/Schooltimer.zip
252
A.M. BHATT
Counting
the revolutions per minute (RPM) of motorsdetermining the motor speedis essential in the of field industrial automation. It is useful especially for closed-loop control systems where proper action can be taken in case the actual RPM deviates from the set RPM. Here is a project based on microcontroller AT89C4051 that measures and shows on an LCD the RPM of a running motor. Using a proper transducer, first the rotations of the motor arc converted into pulses. The generated pulses are counted by the microcontroller for a fixed time (say, one second). The count is multiplied by a factor to get the exact RPM and then displayed; if time is one second, the factor is 60.
ft
MOTOR
1
Circuit description
-SLOT
SHAFT
'
WHEEL
X-L
PULSE GENE
LCD
RATOR
LASER SOURCE
LDR
Fig. 1shows the block diagram of the RPM counter based on AT89C4051 microcontroller that generates pulses for every rotation of the motor, counts them and shows on the LCD. On a fixed base, there is a laser source on one side and the combination of a light-dependent resistor (LDR), pulse generator, microcontroller and LCD on the other side. Both the arrangements are housed in separate wooden cabinets such that the laser beam falls directly on the LDR.The motor is placed on top of the laser source. A slotted wheel is attached to the motor shaft. The wheel is so big that it can interrupt the laser beam falling on the LDR. As the motor rotates, the slotted wheel also rotates.
R6, 22012
1]
R5
> 15012
SI
ON/OFF
SWITCH
C1H AT89C4051
3
NE555
2
3
14
13
12
11
10
16x2 LCD
16
1
Xtal
12MHZ
VR1 10K
15
LED1J
Microcontroller-Based Projects
253
The laser beam falls on the LDR whenever the slot aligns with the laser beam and LDR, producing one pulse. Thus the rotations of the motor are converted into pulses that can be counted by the program in the microcontroller. Pulses are counted for one second. The pulse count is multiplied by 60 (because 1 RPM = 60 RPS) and finally shown on the LCD. Fig. 2 shows the circuit of the RPM meter. It comprises microcontroller AT89C4051, timer NE555, LCD module (16x2 line) and a few discrete components. Timer NE555 is configured as a monostable multivibrator whose time period depends upon the combination of resistor R1 and capacitor CI. Trigger pin 2 of NE555 is pulled high via resistor R2. The LDR is connected along with resistor R2 to pin 2 of NE555 such that when the laser light falls on the LDR, pin 2 goes low to trigger NE555. The output from pin 3 of NE555 is inverted by transistor Tl and fed to port pins P3.3 and P3.4 of the microcontroller. LED2 is connected to port pin P3.0 (pin 2) of the micro controller. Data pins DO through D7 of the LCD are con nected to port pins P1.0 through PI.7 of the microcontroller, respectively. Control pins E, RS and R/W of the LCD are connected to port pins P3.2, P3.5 and P3.7, respectively. A 12MHz crystal connected between pins 4 and 5 of the microcontroller, along with two 22pF capacitors C4 and C5, generates the basic clock frequency. Power-on reset is derived with the combination of resistor R7 and capacitor C6. Switch S2 is used for manual 1 PARTS LIST
Sem iconJuctors:
m
/
Fig. 3:Actual-size, single-side PCB for the RPM counter using microcontroller AT89C405 1
o
si
looooooooooooo o oTa)
1N4007 C0N2
LCD
16151-11312 11 10 9 8 7 6 5 t 3 21
o
a)
G I
0 0 0 0 0 0 0 0 3 0
f
HRTT.
RESET L
AT89Ct051
|Q J
QE
a
\
(J
reset.
- AT89C4051 microcontroller
NE555 timer - 2N2222 npn transistor - 1N4007 rectifier diode - 5 mm LED - 16x2 line
-
An actualsize, single-side PCB for the RPM counter is shown in fig. 3 and its compo nent layout in
Resistors (all 'A-watt, 5% carbon): R1-R4 - 1-kilo-ohm R5 - ISO-ohm R6 220-ohm R7 - 10-kilo-ohm R8 - 470-ohm VR1 - 10-kilo-ohm preset
fig. 4.
Operation
1. As the motor starts rotating, the laser light falls on the LDR when the slot aligns with the laser beam and LDR 2. Every time the motor completes one rotation, the monostable (NE555) triggers to generate one pulse, which is indicated by LED1. So LED1 blinks at the rate of motor speed 3. As the first pulse arrives, it generates an interrupt for the mi crocontroller and immediately the microcontroller starts counting the pulses. This is indicated by LED2. The LCD shows the message "Counting RPM..." 4. Hie microcontroller counts the pulses for a period of one second. Thereafter, LED2 shows the message "Counting finished... "and goes off. The microcontroller stores the count and multiplies it by 60 to give
Capacitors:
CI C2 C3,C7 C4, C5 C6
C8
- l|iF, 16V electrolytic - O.OlpF ceramic disk - 0.1pF ceramic disk - 22pF ceramic disk - lOpF, 16V electrolytic
Miscellaneous: SI S2
- On/off switch
Xtal
BATT.
- LDR
254
the final RPM count 5. Hie count is in hex format, so you have to convert it into decimal first. As the LCD accepts only ASCII values, the decimal values are converted into ASCII and shown on the LCD one by one 6. Now if you press RST switch, the process repeats
Software
The software for the RPM countcr is written in 4C' language and compiled using Kcil |iVision3 compiler. Burn the generated '.hex' file into the microcontroller using a suitable programmer. The source program is well commented and easy to understand. The various functions are detailed below: 1. Main function initialises the timer, LCD, ports, etc, displays the message "RPM counter," clears the timer content and enables the external interrupt. It remains in the loop till 'rpm flag' (flag) is not set. When the RPM counting completes, it displays the RPM value if it is within the range. 2. Intl is an interrupt-based function that is called automatically when there is a negative edge on external interrupt 1 pin (P3.3). As soon as the first negative edge arrives, the counter starts counting the external pulses for one second. After one second, the content of TLO is compared with A6h (166d). For any number greater than 166, multiplication with 60 will yield a number that is longer than four digits, which is out of the display range. This means RPM of max. 9960 (166x60) can be displayed. Otherwise, the LCD will show the message "RPM Out of Range". 3. Display function performs three tasks one by one: (i) Converts hex number in TLO into decimal and multiplies it by 60 (ii) Converts the final decimal number into equivalent ASCII characters one by one (iii) Displays all the ASCII characters one by one on the LCD 4. writecmd function sends command byte to the LCD. It takes one argument byte and sends it to Pi 5. writedata function sends the data byte to be displayed on the LCD. It also takes one argument byte and sends it to port PI 6. writestr function writes the entire string (message) on the LCD. It takes the pointer as an argument that points the address of the first character of the string. Then through the pointer, it sends all the charactcrs one by one to PI 7. busy function checks the status of the busy flag of the LCD. If the flag is set, that means the LCD is not ready and the program remains within the loop. When the flag is reset, the LCD is ready and the program comes out of the loop 8. delay function generates a fixed delay of one second using timer 0. The basic delay is of 50 milliseconds, which is rotated in the loop for 20 times to generate total delay of 20x50 ms=1000 ms =1 second Download Source Code: http://www.efymag.com/admin/issuepdf/RPM%20counter.zip
RPM.C
Here is the program code with necessary comments
TH0 TR0
for(k=0;k<20;k++)
1; // start timer
sbit rs = P3A5; // rs pin of LCD sbit en =: P3A2; // en pin of LCD sbit rw - P3A7; // rw pin of LCD sbit b = P1A7; // busy flag sbit led = P3A0; // led indication unsigned int flag=0 ; // rpm flag
TH0
0x3C;
void delay () //I sec delay { int k; TLO = OxAF; // use timer 0
>
>
a)
II
Microcontroller-Based Projects
255
busy ()
rs = C rw = C PI = a
en en
}
1 C
// check busy flag // select command register // write enable // send byte to LCD II apply strobe pulse
")
II display
ledl;
if (TL0>0xA6)
void writedata (unsigned char b) data to LCD { busy () II check busy flag rs = 1 // select data register rw = 0 // write enable PI = b // write enable en = 1 // send byte to LCD en = C // apply strobe pulse
}
// send
value more then 166 writecmd (OxCO ) ; writestr ("RPM out send message
)
<
// if
of
range");//
// if
//
en = C // disable display PI = CxFF; // PO as input rs = C // select command register rw = 1 // read enable while (b==l) // if busy bit is 1
{
decimal to ascii unsigned int tmpl, tmp2, t, tl, i,j ; unsigned char asci[4]; tmpl = (TLO & OxOF) ; // get lower nibble of TLO tmp2 = TLO 4; II get upper nibble of TLO
tmp2 = tmp2*16;
// //
en-0; en-1;
I ;
t-t*60;
multiply it with 0
5 =J 1 1
en=0;
,
/
// 9erri
while (t>10)
{
tl=t%10;
<
unsigned char l,i; 1 = strlen (s) ;
convert them one by one
asci [il=tl+0x30;
t=t/10;
/ /
//
// into ASCII
)
i ;
writedata (*s) ;
asci[0]=t+0x30;
)
// till the
length of string
s++;
else
// otherwise
(
convert
>
while (t>10)
// external in-
1
tl=t%10;
asci [i]=tl+0x30;
EA=0;
//
// firs:
disable interrupts
led=0;
//
i ;
give indication
writecmd(OxOl) ;
>
asci[l]=t+0x30;
// display
asci[0]=0x30;
>
writecmd (OxCO) ; writestr ("currentRPM: ") ;
II stop timer
II display
256
initialize LCD
//
// ini
void main ()
{
TMOD=Oxl5;
// clear TO // // //
TL0=0x00;
// timer 0
// PI as output port
rs=0;
II clear all
en=0; rw-0;
writecmd(0x3C) ;
IE 0x84 ; enable external interrupt 1 while (flag==0) ; remain within loop till rpm flag is clear display (); when flag is set display current RPM value while (1) ; // continuous loop
//
Microcontroller-Based Projects
257
Normally,
CON1 ON/OFF
digital speedometers are found only in luxury cars and high-end motorbikes. Even if your mo torbike has a mechanical speedometer, what will you do when it gets damaged? First,you need to replace
the mechanical worm gear and then the cable. Anyway, we describe here how to build a digital speedometer-cum-odometer for your motorbike.The circuit uses a microcontroller, an LCD display and some commonly available components. It is a better alternative to the mechanical speedometer and even a beginner with minimal skill level can assemble it. The features of the digital speedo-meter-cum-odometer are:
IC1 7805
OUT
3
SWITCH
1N4007
-r- C1
GND
1000pF
25V
C3 0.1pF
' LED1
VR1
4.7K
CONTRAST
C4
HZ 10K
R3
10K
S2
33p
_l_
I
-pC6 10m
16V
C5 33p
I CRYSTAL
12MHz
,
XTAL1
~T
g
CM
P1.0 P1.1 PI 2
ON/OFF
SWITCH
RST
0&
P1.3
PI.4
15
R9
47Q
D1.5
P3.2/INT0
P3.3/INT1
P3.4/T0
P1.6 P1.7
P3.5/T1 P3.7
P3.0/RXD P3.1/TXD
R4
10K 10K
SCK SDA
WP
AO A1 3 A2
IC4
24C02C
R6
10K-
OPTO COUPLER
IC3 4N35
SWITCH
S3 REED
258
1. Digital readout
2. Speed displayed in km/hour 3. Distance traveled displayed in kilometres 4. Readings saved in non-volatile memory (EE PROM)
START
INITIALIZE LCD
5. Reliability due to use of the microcontroller 6. No mechanical wear and tear 7. Home-brewed speed transducer/sensor 8. Self reset to zero after completion of 99,999.9 km 9. Easy to build and fix onto the bike
READ EEPROM
Calculations
You first need
to know the radius of the bikes front wheel.The calculations here are based on Hero Hondas Splendor model. The radius of the front wheel is 30 cm.
CONFIGURE 2 TIMES AS 8 BIT COUNTERS & ENABLE TIMER OVER FLOW INTERUPT
DISTANCE
COUNTER
SPEED COUNTER
(This can vary with the brand or model.) Circumference of the wheel= 2jir (where Vis in cm) = 2x3.14x30 = 188.4 cm or 1.884 metres Speed. Lets assume that in 1 second the wheel completes one revolution. In other words, in one second, the bike has covered 1.88 metres. Therefore the speed in km/hour: Nx 1.88x3600/1000
= Nx6.784 orNx6.8 where 'N' is the number of revolutions per second. '6.8' is a constant and only 'N' varies; for example, if 'N' is 5, the speed equals 5x6.8= 34 km/hour. Distance. The odometer is updated every 100 metres. To cover 100 metres, the wheel is required to make ap proximately 53 revolutions (100/1.88). The microcon troller takes care of the tasks of revolutions counting, speed calculation, conversion and display of results.
UPDATE
DISTANCE
YES
VARIABLES
100 METERS
NO
ONE
SECOND
DELAY
FLAG IS SET
YES
SPEED = 00
NO
TO EEPROM
DISPLAY ALL
VALUES ON LCD
Circuit description
The circuit of the microcontroller-based digital speedCUT THE 3.2CM DIA PVC PIPE (HALF) CIRCULAR MAGNET PIPE HERE ometer-cum-odometer is shown in Fig. l.The functions PLASTIC of various components used in the circuit are described HANDLE CENTRAL DRUM Of below. Ht FHON1 Microcontroller. A 20-pin AT89C2051 microcon SWITCH troller from Atmel is used here because of its low pin count, affordability and compatibility with CISC-based 8051 family. All the available pins of the microcontroller are utilised in the project. This microcontroller features 2 WIRES TO kB of Flash, 128 bytes of RAM, 15 input/output (I/O) MAIN UNIT lines, two 16-bit timers/counters, a five-vector two-level interrupt architecture, a full-duplex serial port, a preci sion analogue comparator, on-chip oscillator and clock circuitry. Fig. 3: Arrangement of reedswitch and magnet on the front LCD module. To display the speed and distance wheel of motor bike
I
Microcontroller-Based Projects
259
PARTS LIST
Semiconductors: - 7805 5V regulator IC1 - AT89C2051 microcontroller IC2 IC3 - 4N35 optocoupler
IC4 D1 LED1
Resistors (all Vd-watt, 5% carbon): - 8.2-kilo-ohm R1 R2-R6 - 10-kilo-ohm R7 - 330-ohm R8 - 1-kilo-ohm - 47-ohm R9 VR1 - 4.7-kilo-ohm preset
Capacitors:
CI C2 C3 C4,C5 C6
Miscellaneous:
*tali
traveled, we have used a 16x2 alphanu meric LCD based on HD44780 control ler. The backlight feature of the LCD allows data to be visible even at night. The pin configuration and features of this LCD have earlier been published in several issues of EFY. Serial EEPROM. The readings of the distance traveled arc saved in an ex- __ ternal serial EEPROM. Here, a 24C02 Fig. 5: Reed switch andmagnet fixed on the front wheel of motor bike serial EEPROM based on Philips I2C protocol is used. PC busprotocol. The PC bus consists of two active wires and a ground connection. The active wires, serial data line (SDA) and serial clock line (SCL) are bidirectional. Every device hooked up to the bus has its own unique address, no matter whether it is an MCU, LCD driver, memory or ASIC. Each of these chips can act as a receiver and/or transmitter, depending on the functionality. Obviously, an LCD driver is only a receiver, while a memory or I/O chip can be both transmitter and receiver. The PC bus is a multi-master bus. This means that more than one IC capable of initiating a data transfer can be connected to it.The I2C protocol specification states that the IC that initiates a data transfer on the bus is considered the bus master. Bus masters are generally microcontrollers. Consequently, all the other ICs are regarded as bus slaves at that instant. Let's assume that the MCU wants to send data to one of its slaves. First, the MCU will issue a START condi tion. This acts as an 'attention' signal to all of the connected devices. All ICs on the bus will listen to the bus for incoming data. Then the MCU sends the address of the device it wants to access, along with an indication whether the access is a 'read' or 'write' operation. Having received the address, all ICs will compare it with their own ad260
dress. If it doesn't match, they simply wait until the bus is released by the stop
condition. If the address matches, the chip will produce a response called 'acknowledge' signal. We have used write operation in this project. Once the MCU re ceives the acknowledge signal, it can start trans mitting or receiving data. In our case, the MCU will transmit data. When all is done, the MCU will issue the stop condition. This
signals that the bus has been released and that the connected ICs may expect another transmission to start any moment. We have several states Fig. 6: Speedometer-cum-odometer unit on a bike's handle bar on the bus: start, address, acknowledge, data and stop. These are all unique conditions on the bus. In our project, the microcontroller is the master and the serial EEPROM is the slave. The readings are periodically stored in the EEPROM and the previous reading is retrieved from the EEPROM each time the bike is started. Speed sensor. For this project, we make use of a simple home-made speed transducer, 'ihe rotation of the wheel is sensed by the combined action of a reed switch and a magnet fixed on the wheel. The sensor sends a pulse to the microcontroller each time a revolution is made. Optocoupler. An optocoupler is used to counter the effects of bouncing when the contact of reed switch is closed. Power supply. The power supply for various parts of the circuit is drawn from the vehicle's 12V battery after reducing it to 5V using a three-terminal voltage.
Software
The 'Init_EEPROM' and 'Speedo' source codes of this project are written in Assembly language. These are com piled using an open-source ASEM-51 assembler to generate the Init_EEPROM.hex and Speedo.hex files. The hex files are burnt into the microcontroller chip. Two internal timers of the microcontroller are configured as 8-bit counters to count the number of pulses generated by the speed sensor. One timer is used to measure the distance and the other for speed calculation. A software delay of one second is generated after the speed counter is triggered. The speed count value is ob tained from the counter registers. To speed up the process, a look-up data table is stored in the ROM that helps the microcontroller to convert the number of pulses into the corresponding speed values. The program flow-chart is shown in Fig. 2. The 'distance' counter is incremented every 100 metres. The wheel has to make 53 revolutions to achieve this. The distance counter is loaded with an initialvalue of 203 (255-53+1) and is incremented on each revolution. After 53 counts, the timer overflows and generates an interrupt to notify the microcontroller that 100 metres are covered. In the interrupt service routine, the microcontroller updates the corresponding 'DS1' distance variable. In stead of saving distance variables after each cycle, the microcontroller saves these readings when the vehicle is at
Microcontroller-Based Projects
261
halt (speed is 00.0 km/hour). In other words, when the vehicle is stopped at traffic signals or before the ignition key is turned off, the last reading is saved to the EEPROM. The same reading is again retrieved from the EEPROM when the bike is turned on next time and the readings are updated for each trip.
fixed on the front wheel of the motor bike (Hero Honda's Splendor). A small circular magnet (about 2 cm in diametre), normally used in speakers of small toys, can be used. Fix the magnet to the central drum of the wheel just below the spokes connected to the drum. Secure the magnet using hot glue or Araldite. For fixing the reed switch, a PVC pipe contraption needs to be made so that the magnet and reed switch are aligned as shown in Fig. 3. The materials required to build the Fig. 7:Actual-size, single-side PCB for the microcontroller-based digital speedometer-cum-odometer contraption are shown in Fig. 4. Cut a 3.2cm diameter PVC pipe measuring 15.2 cm in length perpendicularly into two halves. Use EFY/SANI/N0U08/SPEED0NETER CUH ODOMETER only one half of the PVC pipe. Mount and aauBB S2 secure the reed switch using Araldite and cable Rb Ri ON/OFF [o al ties on the plastic handle (normally used in 0. lu BACKLIGHT emergency lights). Once it dries up, solder two J2 net wires to the two opposite end leads of the reed switch. Fix the plastic handle on the half cut C2\0J PVC pipe using screws. Now, place the pipe lOOu IC2 lOOOu on the front shock-absorber fork such that 8. 2K reed switch faces towards the magnet. Connect a multimeter, set in continu ity mode, to the two wires coming from the reed switch. Rotate the wheel slowly and ONxOFF see whether the reed switch closes when the 10K J1 magnet passes across it. If it does, the multi S3 [ol will give a continuity beep. When the meter C0N1 URl REEDEJ [olal m moves away from the reed switch, magnet SUITCH + "C the will stop, indicating that the reed beep 12U FROM R7 BIKE'S BATTERY A-WV o a do is switch Make a few trials to find the open. 330E optimal position for mounting and fixing the CONTRAST PVC pipe such that the reed switch works smoothly. Mark the location on the front Fig. 8:Component layout for the PCB shock-absorber fork. Now you can fix the PVC pipe contraption to the shock-absorber fork using hot glue as shown in Fig. 5. Use liberal amount of hot glue to secure it to the pipe. Carefully route the two wires up to the bike's handle bar using cable ties to secure the wire. This completes the sensor mounting part.
Construction
The reed switch and a magnet need to be
262
The main circuit and the LCD module can be housed in suitable plastic enclosures, which are readily available in electronic projects shops. These enclosures should have precut slot for easy mounting of the LCD panel. Ifsuch boxes are not available, you can use the plastic boxes of electronic chokes by suitably removing some portions for
the LCD panel. Power supply can be taken either directly from the bike's 12V battery or tapped from the console which houses horn, headlight and indicator light switches. For this, you need to remove the switch console and identify posi tive wire and ground wire using a multimeter.When carrying out this step, remember to turn the ignition key to 'on' position. Solder a 60cm two-core wire to the positive and negative terminals inside the switch console. The advantage of taking supply from the switch console is that the ignition key controls the power supply to the main unit without having a separate on-off switch. An actual-size, single-side PCB layout of the microcontroller-based speedometer-cum-odometer is shown in Fig. 7 and its component layout in Fig. 8.
Testing
After all the components are soldered on the PCB, program the microcontroller with Init_EEPROM.hex file and place the microcontroller in a 20-pin IC base and switch on the circuit. In the first line of the LCD,'INIT_EEPROM' appears. After five seconds, '00000.0' is displayed in the second line. This process erases any previous data and sets the initial readings in the EEPROM to zero. Now switch off the supply and program the microcontroller with 'speedo.hex' main file. After programming, place the microcontroller back in the circuit and switch on the supply. The LCD will show 'Kms: 00000.0' in the first line and 'Speed-Kms/ Hr: 00.0' in the second line. Now, the unit is ready to mount on your bike. Connect the two wires coming from the reed switch and the power supply wires to the main unit. Mount the unit at the centre of the bike's handle bar on top of the 'U' clamps that secure the handle bar to the chassis. You can use cable ties to accomplish this. Mounting arrangement of the unit is shown in Fig. 6. Now start the bike, take a test ride and if connections are correct, the speed and the distance will be displayed on the LCD. A protective cover like polythene can be used for the main unit on rainy days.
Downloadsource code: http://www.efymag.com/admin/issuepdf/SPEED0%20CUM%200D0METER.zip
Microcontroller-Based Projects
263
VINAY CHADDHA
Normally,
count-down timers of traffic lights display the count-down time only in red colour. The drawback here is that the drivers may get confused when the signal light is green but the timer display is in red. Here we describe a dual-colour traffic count-down timer that displays count-down time in either red or green colour matching with the signal light. It is a 3-digit timer based on AVR Atmega328 microcontroller. The timer board can retrofit into existing signal lights. Other key features of this timer are constant display intensity despite voltage variation, low power consump tion (which makes it suitable for battery-powered systems), and an optional feature for intensity variation with time of the day (high intensity in daytime, medium intensity during dusk and dawn, and low intensity at night).
on
1N4007
PC817
1
R5
IC2
7805
3
OUT
CON2
P1 P2
C8 1p
R6
CI
0.1p
COM
RED
D2
CON1
+T 63V
-i-
PC817
1N4007
R4,1.5k
LED3
R7 4.7k
LED4
R2
PB5
PD6
PD7
18
UNIT
REDJN
CO
UNIT_RED
UNIT_GREEN
TEN_RED
10k
PB4
PB3
UNIT_GREEN_IN
TEN_RED_IN
TEN_GREEN_IN
Hi I
RESET
PB2 PB1
TEN.GREEN
HUND_RED
Vcc
HUND_RED_IN
BC847
_
PBO
Aref
HUNDGREENIN
GND I Vdo
HUND_GREEN
D3
1N4148
AVcc
SDA
CLKO
Vdo
8
20
IC1 'ATMEGA328
PCO
24
SDI CLK
LE
OE
SDO
16 12 OUT7
PC4 PCS
28
PC1
PC2
PC3
SDO
IC7 6 PCF8563
Vss
SCL
D4
1N4148
Xtal2
"
22
OUTO
CON3
BATT.1 3.3V
32768KHZ
IDI
22p
R9 1.2k
C9
30p
C3:
GND
GROUND GROUND
SIGNAL
CIRCUIT
264
dp 60666 2 4 6 8 10 12 14 16
---CON4
1 3 5
DIS3
7 9 11 13 15
o o o u. u. u.
10 9 8
7
J
2
dP
JdP It 10 9 8
1 2
DIS2
5 c-g
DIS1-DIS3=SBC18-11SURKCGKWA
44.5mm COMMON CATHODE 7-SEGMENT DISPLAY
process of the count-down timer is explained below. At power-'on', the software pro gram starts looking for the 9] t dp 10 9 8 7 e 7 6 red signal. As soon as the red signal is 'on', it starts counting the time in seconds until the DIS1 signal goes off. At that mo ment, the count in seconds is 1 2 3 4 5 4 S saved as 'learn time.' c-r <r The software program again keeps waiting for the red signal. As soon as the red signal is sensed second time, it starts counting time again until the red light goes off. At that moment, the count in seconds is saved as 'verify time.' Now if 'learn time' and Verify time' are same, this is treated as 'on time.' Next time, as soon as the red signal is sensed, the software program knows that the red signal will remain 'on for 'on time' based on the experience of past two readings. The count-down starts during this 'on time. The same process is applicable to the green traffic signal as well. The working of the count-down timer is detailed in the next section.
Circuit description
Fig. 1 shows the circuit of the AVR-based traffic light count-down timer with dual-colour display. It consists of the microcontroller, voltage regulator, optocoupler (PC817), red and green light input section, real-time clock and display driver section. Microcontroller section. This section is built around ATMEL ATmega328 microcontroller, which is a 28-pin DIP IC. The microcontroller IC can be programmed embedded software using a standard programmer. with Fig. 3:An actual-size, single-side PCB for the AVR-based traffic light count-down timer A 16MHz oscillator is used to supply a timing reference. Out of 28 pins, only 20 are available for input/output (I/O). We have used following I/O lines for different purposes: 1. Gridssix lines 2. Red/green input two lines 3. Interface to the segment driverfive lines 4. 12C interfacetwo lines PD7 is connected to ground through a shorting jumper at CONl. Voltage regulator section. This is a standard circuit which converts the 15V-35V DC input into 5V. Minimum and maximum DC inputs to the circuit are 15V and 35V, respectively. The regulated 5V DC provided by IC
Microcontroller-Based Projects
265
O 0-wR6
01,02=1N4007 q.
J8
used to isolate the input and output circuits. Red and green signal inputs are external signals coming from the IC _Jppc8i7 c? traffic light control circuitry. ,-lu >LJn IO OJC8 PC817 Redand green light inputs section. The input signals v 'I" IC3 for the red and green lights varying from 15V to 30V are fed to the timer control circuit through diodeC0N3 optocoupler combinations D1-IC3 and D2-IC4, re 200000000 16 o o o o o o q"|o 15 spectively. When the red or green traffic light is 'on, the 1 J 12 optocoupler conducts and the corresponding pin of the lOOu MCU goes low. When the red or green light is 'off', the corresponding pin of the MCU is high. RTC section. IC PCF8563 used in the RTC section TAO 6NHz 051 IB is an I2C interface that uses SCL and SDA pins. Both these pins are available on the microcontroller too. RTC I IC1 J9 J10 IC5 needs a Li-ion battery backup so that time is maintained LEDl p22p 6 Jll Sf TRAFFIC LIGH TIrtER CONTROL even after power failure. The battery may need replace ment once in three years. Fig. 4: Component layout for the PCB in Fig. 3 CLKOUT signal of IC PCF8563 drives BC847. As a result, LED4, connected to the collector of transistor BC847, flashes at a frequency of 1Hz to indicate proper working of RTC IC PCF8563. Note that the RTC sec tion was not used when testing this project at EFY Lab. Display driver. We have used three dual-colour, common-anode, seven-segment LED displays. Each display has eight segment pins and two grid points (C-r and C-g). For three-digit display, we have used eight segments and six grid outputs. As the 15V and up to 100mA current required to drive the display cannot be supplied by the microcontroller, we have used a segment driver and a grid driver (TD62783).The six outputs ofTD62783 are used to drive the six grids (three for red colour and three for green colour). TLC5916 is used as the seven-segment display driver. It can drive up to eight segments. The unique feature of this IC is that it sinks constant current and is not dependent on the supply voltage. So in traffic signals, where the battery voltage varies, the intensity of the display still remains the same.
LEff2<
IK --n51K
o<_
O frvCvICS ~LED3
JJ9 1.2K
7805 is used to operate the microcontroller and other digital ICs. Optocoupler section. Two PC817 optocouplers are
--
Software program
The program is written in 'C'language and compiled using Open Source ARDUINO 0022 IDE. It runs smoothly on Linux (Ubuntu), Windows XP as well as MAC OSX, but you may face problems on Fedora and Windows 7. The source code can be divided into the following parts: 1. Hardware definitions. To make the programming easy, we have defined each pin by its actual function in the circuit along with arbitrary number. For example, the green light signal received at pin 6 of the MCU is named
as GREEN_SENSE as
define
follows:
GREEN_SENSE 4
2. Subroutinesfor display driver TLC5916. The segment data is transferred toTLC5916 between subroutines like Active_output_5916, Inactive_output_5916, Send_byte_5916, Switch2special_5916, Pulse_le, Pulse_clock and Delay_small. Write these subroutines after going through the 5916 datasheet. 3. Timer. We have used timer_ms2 library from Arduino website. It can be set to call a subroutine after a preset time. Here this library calls Set_time every 5 ms. The following commands are used to implement this function:
MsTimer2 ::set (5, Set time) ; MsTimer2 ::start () ;
266
O
DIS1-DIS3 sbci8 connoN cathode DUAL COLOUR DISPLAY J1-JM=JUMPER WIRE
COM4
16
o o 15
oooooooo
01 S3
DIS2
01SI
3 3 33
g]o
0 O
JH
DISPLAY SECTICN
*
B 39 03
33333
o
Fig. 6: Component layout for the PCB in Fig. 5
Of these two commands, the first sets the time period to 5 ms and declares the subroutine name as 'Set_time\ The second command starts the timer function. 4. Set_time. Within the Set_time that repeats every 5 ms, the display is refreshed automatically to show the next digit. Set the Half_sec_over flag when half second is over, i.e., when Set_time is called 100th time. Also, set the One_sec_over flag when one second is over, i.e., when Set_time is called 200th time. At this time, reset the count to zero so as to set Half_sec_over and One_sec_over flags again. 5. Refresh_grid. This function refreshes the display automatically to show only one digit at a time. 6. Setup. This function is called only once at power-on. It sets all the port pins as I/O pins, initialises the timer and sets the mode as read/scan.
Microcontroller-Based Projects
267
PARTS LIST
Semiconductors:
IC1 IC2
IC3.IC4
IC5 IC6
LED1-LED4 Dl, D2
- ATmega328 microcontroller - 7805, 5V regulator - PC817 optocoupler - TD62783 grid display driver - TLC5916 segment display
driver - 5mm light-emitting diode - 1N4007 rectifier diode - 1N4148 signal diode
D3
Resistors (alt 'A-watt, 5% carbon): - 680-ohm R1 - 10-kilo-ohm R2.R10 - 1.5-kilo-ohm R3.R4 -kilo-ohm -1 RS.R6 R7 - 4.7- kilo-ohm R8 - 330-ohm
Capacitors:
C1,C2,C5, C6, C10 C3, C4 C7,C8
Miscellaneous:
- 0.1[iF ceramic - 22pF ceramic - liF, 63 V electrolytic - 8-pin dual-line herg strip
male connector
Fig. 7: Author's prototype of traffic light count-down timer with dual-colour display
Xtal,
DIS1-DIS3
the PCB. Make sure that all the components are mounted and wiring done as per the schematic diagrams. At poweron', the timer unit reads the red and green traffic signals. It learns the time after two cycles of red-green signaling and the next cycle onwards, the count-down time is displayed in the same colour as the traffic signal light. That is, when the traffic light is green the count-down time too is displayed in green colour, and when the traffic light is red the timer display is in red. Before connecting the traffic light signals into the circuit, manually test the circuit for proper working as follows: Set the red-colour timer display by keeping switch SI pressed until the desired time, say, 10 counts, is reached. Release SI and then press it again until the display shows 10 counts. Similarly, for the green-colour timer display, press switch S2 until the desired time, say, 7 counts. Release it and then press again until the display shows 7 counts. Now if you press Si again and hold it in this position, you will see the count-down in red colour from 10 to 0. Next, if you press S2 and hold it in this position, you will see the count-down in green colour from 7 to 0. This means that the system is working well. Now you can connect the red and green signal lines to respective points of CON2 as shown in Fig. 1. The steps to connect your Arduino board to the computer and upload the code in the MCU follow: I. Get a USB cable. Arduino is a simple board to start working with electronics and microcontroller program ming. You need a standard USB cable (A plug to B plug)like the one you connect to a USB printerto connect the board to the PC. 2. Downloadthe Arduino environment. To program the Arduino board, you need the Arduino environment. Download the latest version from the Internet. When the download completes, there would be a few files and sub-folders inside a folder named Arduino. Unzip the downloaded files retaining the folder structure. Note that you should have JavaJDK pre-installed in your system. 3. Locate the USB drivers. If you are using a USB-based Arduino, you need to install drivers for the FTDI chip on the board. These can be found in the drivers/FTDI USB drivers directory of the Arduino distribution. The latest version of the drivers can be found on the FTDI website. 4. Connect the hoard. When you connect the board to the PC using the USB cable, Add New Hardware'wizard pops up on the screen. Select 'Install from a list or specified location (Advanced)' option and click 'Next.' Browse to the location of USB drivers in your PC. The 'New Hardware'wizard pops up. Repeat step 4 to install 'USB Serial Port.' Open the Windows Device Manager from 'Control Panel.' If you find 'USB Serial Port' listed under its 'Ports' section, the Arduino board is installed in your PC.After successful installation, the green power LED (PWR) on the Arduino/Freeduino board should glow. 5. Run theArduino environment. Open the Arduino folder and double-click the Arduino application. 6. Upload a program. Open the LED blink sample file as follows: File>Sketchbook>Examples'DigitalBlink Select the serial port of the Arduino board from the ToolsSerial Port menu. On Windows, this should be COM1 or COM2 for a serial board, or COM3, COM4 or COM5 for a USB board. Now select the entry from the Tools>Board menu that corresponds to your Arduino board. We have used Freeduino 1.15 board for programming the microcontroller. Select the board as 'Arduino BT w/Atmega328' in Arduino environment to upload the code in the ATmega328 MCU. Click 'Upload' button in the Arduino environment. After a few seconds, you will see the RX and TX LEDs on the board flashing. If the upload is successful, the message 'Done uploading' appears in the status bar. 7. Lookfor the blinking LED. A few seconds after the upload, the LED on pin 13 of the MCU on the board
should start blinking. If it does, congratulations! You've got Arduino up-and-running. 8. Upload the traffic light dualcolour timer program. Run the Arduino IDE, click FileOpen (browse the location where you have saved the source code). Compile the code from Sketch Very/Compile option. Con nect Freeduino board with ATmega328 MCU and upload the program. Remove the programmed MCU from the Freeduino board and put it in the PCB of the dual-colour timer. Perform manual testing of the timer as explained earlier. Downloadsource code: http://www.efymag.com/admin/issuepdf/Traffic_timer_source-code.zip
Microcontroller-Based Projects
269
TRAFFIC_TIMER.CPP
/* Traffic_timer cpp */
include "WProgram.h"
Pulse_le (void) ; Switch2special_5916 (void); void Switch2normal_5916 (void) ; void Send_byte_5916 (unsigned char Display_byte) ;
void Active_output_5916 (void) ; void Inactive_output_5916 (void) ; void Refresh_grid (void) ; void Set_pins_dir (void) ; void init_timer (void) ; void Sense_input (void) ; void Set_time (void) ; void Binary2segment (unsigned int val); void 3etup(); void loopO; void Reset_serial_packet (void) ; void Act_one_tick_over (); void Act_one_sec_over (); void Act_half_sec_over (void) ; void Send_packet (unsigned int x); void Blankout_display () ; void Act_setup(); unsigned char Grid_no, Seg_unit, Seg_ten, Seg_hun; unsigned char I,J,K; unsigned char Bit_5S16, Small_tick_over, One_tick_ over, Half_sec_over, One_sec_over, One_min_over; unsigned char Red_ir.put, Green_input, Current red, Current_green, New_red_found, New_green_found; unsigned char Ticks, Sees, Mins,New_red_count,New green_count, Color ; unsigned char Numeric_table[10] = {0x7b, 0x11, 0xe3, 0xb3, 0x99, Oxba, 0xf8, 0x13, Oxfb, 0x9b}; 3 6 10 4 2 5 /* Bit7 B */ G E D F A dp C define FND_BLANK OxCO define DP_ON 0x04 //unsigned char Numeric_table[10] = (OxcO, Cxf9, 0xa4, OxbO, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98); 3 5 6 10 2 4 /*Bit7 e c d b g f dp a*/ define UNIT_G1 12 define UNIT_F1 13 define TEN_G 10 define TEN_R 11 define HUN_G 8
define HUN_R 9 define SCL 19 define SDA 18
define OE define LE
define CLK
INACTIVE_INPUT 1 COLOR_RED 1 define COLOR_GREEN 2 define COLOR ORANGE 3 define COLOR_OFF 0 define MAX_GRID_NO 2 /This file is sepcific to TLC5916
define
define
f
for (J=0;J<2; J++)
{
J++;
J
(
1
void Fulse_clock ( void)
(
Sraall_delay () ;
1
void Pul3e_le ( void)
(
digitalWrite (LE, LOW) ; Small_delay () ; digitalWrite (LE, HIGH) ; Small_delay 0 ; digitalWrite (LE, LOW) ; Small_delay () ;
digitalWrite (OE, HIGH) ; Small_delay () ; digitalWrite (LE, LOW) ; Small_delay ( ) ; Pulse_clock() ; Small_delay () ; digitalWrite (OE, LOW) ; Small_delay 0 ; Pulse_clock ( ) ; digitalWrite (OE, HIGH) ; Small_delay ( ) ; Pulse_clock ( ) ; digitalWrite (LE, HIGH) ; Small_delay () ; Pulse_clock() ; digitalWrite (LE, LOW) ;
17 16 15 14
Small_delay() ; Pulseclock ( ) ;
)
define
define
P2
6
5
4 3 2 1
define SDO
GREEN SENSE
void Switch2normal_5916 (void) ( digitalWrite (OE, HIGH) ; Small_delay () ; digitalWrite (LE, LOW) ; Small_delay () ;
Pulse_clock ( )
INPUT 0
270
if ( (Color==C0L0R_SED) I I (Color
ANGE) )
==
COLOR_OR-
1
void Send_byte_5916 (unsiqned char Display_byte)
(
}
if (Grid_no==2)
Sraall_delay() ;
digitalWrite (LE, LOW) ;
Small_delay ( ) ,for
(1=0; I<8;I++)
if
ANGE) )
(Color==COLOR_GREEN)
II
(Color ==
COLOS_OR-
<
digitalWrite (HUN_G,ACTIVE_GRID) ;
)
Display_byte
Display_bytel;
((include
<MsTimer2.h>
//All
Small_delay() ; Pulse_le() ;
f
void Active_output_5916 (void)
1
Small_delay ( ) ;
digitalWrire (OE, LOW) ; Small_delay() ;
1
void Inactive_output_5916 (void)
I
Small_delay ( ) ;
digitalWrite (OE, HIGH) ; Small_delay() ;
Output Pins set here pinMode (UNIT_G, OUTPUT) ; pinMode (UNIT_R, OUTPUT) ; pinMode (TEN_G, OUTPUT) ; pinMode (TEN_R, OUTPUT) ; pinMode (HUN_G, OUTPUT); pinMode (HUN_R, OUTPUT); pinMode (SCL, OUTPUT); pinMode (SDA, OUTPUT); pinMode (OE, OUTPUT); pinMode (LE, OUTPUT); pinMode (CLK, OUTPUT); pinMode (SDI, OUTPUT); pinMode (RE_DE, OUTPUT); pinMode (TXD, OUTPUT);
I
digitalWrite (UNIT_G, INACTIVE_GRID) ; digitalWrite (UNIT_R, INACTIVE_GRTD) ; digitalWrite (TEN G, INACTIVEGRID) ; digitalWrite (TEN_R, INACTIVE_GRID) ; digitalWrite (HUN G, INACTIVE GRID) ; digitalWrite (HUN_R, INACTIVE_GRID) ;
pinMode (SDO, INPUT) ; pinMode (PI, INPUT); pinMode (P2, INPUT) ; pinMode (GREEN_SENSE, INPUT); pinMode (REDSENSE, INPUT) ; pinMode (RXD, INPUT) ;
)
Grid_no++; if (Grid_no > MAXGRIDNO) 0; Grid_no if (Grid_no == 0) Send_byte_5916 (Seg_unit) ; 1) if (Grid_no Send_byte_5916 (Seg_ten) ; if (Grid_no == 2) Send_byte_5916 (Seg_hun) ; Active_output_5916 () ; if (Grid_no0)
// set timer int at 5 msec MsTimcr2 : :set (5, Set_time) ; // 5ms period MsTimer2 ::start ( ) ;
>
void Sense_input (void)
(
if ( (Color==COLOR_RED)
ANGE))
II
(Color
if (Current_red != Red_input)
COLOR_OR-
f
if (New_red_count<10)
(
digitalWrite (UNIT_R,ACTIVE_GRID) ;
if ( (Color==COLOR_GREEN)
ANGE) )
I I (Color == COLCR_OR-
New_red_count++; if (New_red_count
{
10)
if (Grid_no==l)
Red_input=Current_red; New_red_found = 1;
Microcontroller-Based Projects
271
//initialize Timer
)
}
init_timer ( )
else
New_red_count=0 ;
if (Current_green != Green_input)
// step 2 done
<
if (New_green_count<10)
{
void loopO
(
if (Onetickover)
if (New_green_count == 10)
{
<
}
0ne_tick_over=0;
Act_one_tick_over
()
>
if
(
(Half_sec_over)
else New_green_count=0;
Half_see_over=0;
Acthalfsecover () ;
)
>
void Set_time (void)
{
if (One_sec_over 1)
<
)
0ne_sec_over=0;
Act one sec over ( ) ;
Onetickover Ticks++;
1;
Refresh_grid( ) ; sense_input ( ) ;
if
(Ticks
}
100)
//500 ms
Half_sec_over = 1;
>
if (Ticks == 200)
{
unsigned char Mode, Learn_red, Verify_ red,Time4ir,put_active, Phase [2] ,z=0, Input_ color [2] ,j ; unsigned int Remaining_time [2] ,Learn_ time [2] Verify_time [2] ,Display_time [2] ;
//1000 ms
Ticks = 0;
Secs++;
One_sec_over = 1;
)
if (Sees == 60)
t
Mins++;
One_min_over
Sees
)
1;
0;
/'general purpose routines are here.do not use any hardware specific functions*/
void Binary2segment (unsigned int val)
(
unsigned char Serial_timeout, Serial_count, Serial data, Slave_phase, Master_display, Packet_count; unsigned char Master_learn_time; unsigned int Slave_time=0; unsigned char Count_learn_time,Wait4_ inactive [2 ] ,Wait4_active [2 ] ,TEST_M0DE, Display_ on, SELF_TEST_MODE,MS_MODE; // flags # define MASTER_MODE 1 define SLAVE_MODE 0 #define START_BYTE 85 # define DISPLA_BLANK 1000 # define DP_BLINK 1001 define ERROR_CODE 1002 define P0WER_0N 0 define LEARN 1 define VERIFY 2 define DISPLAY_REMAINING_TIME 3 define TOLERANCE 2 void Reset_serial_packet (void)
(
Serial count
= 0;
Seg_hun = Numeric_table[val/100] ; val = val% 100; Seg_ten = Numeric_table[val/10] ; Seg_unit = Numeric_table [val%10] ;
void Act_one_tick_over ()
(
if
(MS_MODE
==
MASTER_MODE)
void setup ()
(
if (SELF_TEST_MODE)
return;
&&
(Green_input
272
if (Display_on==0)
Time4input_active=0; Count_learn_time = 0 ;
for (j=0;j<2;++j)
{
if ( (Time4input_active-Learn
t ime [ z ] ) >TOLERANCE ) Phase [z)=LEARN;
)
if (Count_learn_time==l)
{
if <Input_color [z]
<
INACTIVE_INPUT)
;
Count_learn_time = 0
f
if (Wait4_inactive [ j ]==1)
{
Wait4_active [ z] =1;
if (Phase [z]
LEARN)
{
if (Input_color [ j ] == INACTIVE_INPUT)
(
)
}
//if wait4red_inactive
Blankout_display () ; Send_packet (DISPLAY_BLANK) ; Verify_time [ z] =Time4 input_active; if (Verif y_time [ z] > Learn_time [z] )
(
if (Wait4_active[ j ) ==1)
{
if <Input_color [ j ]
{
~ ACTIVE_INPUT)
z=j;
Wait4_active[ j ] -0;
if (j==0)
)
<
)
)
Phase [z]=VERXFY;
Learn_time [ z ] =Verify_time[z] ;
<
)
)
DISPLAY_REMAINING_TIME)
Remainingtime [ j ] =Learn_time [ j ] ;
Display_on=l;
)// if wait4red_active
else if (Verify_time (z) < Learn_time[z] ) ( if ( (Learn_time [z] -Verify_ time [z] )<TOLERANCE) ( Learn_time (z)=Verify_time(z) ; Phase Izj =DISPLAY_REMAINING_TIME;
)
if (Display_on
1)
f
if (Input_color [z ] == INACTIVE_INPUT)
{
Learn_time [ z ] =Verify_time[z] ;
1
else Phase [z] - DI S PLAY_REMA I NI NG_T IME; ) //verify phase
}
if (Phase [z]
(
S PLAY_REMA I DI NI ME ) NG_T I
I
if ( (Display_time [z] -Learn_ t ime [ z ] ) <TOLERANCE )
Microcontroller-Based Projects
273
VERIFY;
if (Slave_phase == LEARN) Seg_hun |= D?_0N; if (Slave_phase == verify) Seg_ten I- DP_ON; if (Slave_phase == DISPLAY_REMAINING_TIME) Seg_unit 1= DP_ON;
)
I
Seg_hun
|=
DP_ON;
Seg_ten |= DP_ON;
// display_remaining_time phase
)
Seg_unit I- DP_ON;
else if (Slave_time !=768)
Binary2segment (Slave_time) :
)
else if (MS_MODE==SLAVE_MODE)
(
) //Act_one_tick_over ( )
if (Serial_timeout > 0)
(
void Act_one_sec_over
{
()
if (MS_MODE == MASTER_MODE)
1
if (Serial .available () > 0)
{
<
f
SELF_TEST_MODE=0; Blankout_display 0 ; Send_packet (DISPLAY_BLANK) ; for ( j=0; j<2; j++)
[
if (Serial_data == START_BYTE)
Serial_count++;
else Reset_serial_packet () ;
)
if (Input_color [ j J == ACTIVE_INPUT)
(
else if (Serial_count == 1)
(
if (Serial_data = START_BYTE)
Serial_count++;
else Reset_serial_packet <) ;
)
>
II time for
ac
(
Phasetj] = LEARN;
1
Slave_time=Serial_data
Serial_count++;
)
*
3)
256;
else
else if (Serial_count
time
(
--
II remaining
<
)
)
else
else if (Serial_count == 4)
(
// phase (z)
Slave_phase=Serial_data; Serial_count++;
)
&&
(In-
else if (Serial_count == 5)
{
// color
Color=Serial_data; Reset_serial_packet () ;
Color=COLOR_RED + COLOR_GREEN; Seg_hun 1= DP_ON; Seg_ten I = DP_ON; Seg_unit |= DP_ON; Ser.d_packet (ERROR_CODE) ;
return;
)
>
274
if (Count_learn_time==l)
(
Color=C0L0R_GRSEN;
if (Phase [z] == LEARN) Seg_hun |= DP_0N; if ( Phase [z] == VERIFY) Seg_ten | DP_ON; NI ME ) S PLAY_REMA I if ( Phase [z] == DI NG_T I Seg_unit 1= DP_ON;
if (TEST_MODE 1)
(
else
f
Blankout_display ()
}
//step 4 done
Send_packet (Time4input_active) ;
)
else {
>
Blan<out_display () ;
Send_packet ( DIS PLAY_BLANK ) ;
)
Serial. print (START_3YTE,BYTE) ; delayMicroseconds (100) ; Serial. print (START_3YTE,BYTE) ; delayMicroseconds (100) ; Serial. print (x/256,BYTE) ;
delayMicroseconds (100) ; Serial print (x%256, BYTE) ; delayMicroseconds (100) ; Serial. print (Phase [ z ] BYTE) ; // 1 learn, 2 veri fy, 3 display remaining time delayMicroseconds (100) ; Serial print (Color, BYTE) ; // z= 0 for red, 1 for green delay (2); // addd delay of 1 character before
if (Display_on==l)
{
else
(
void Blankout_display ( )
{
Seg_hun=FND_BLANK; Seg_ten=FND_BLANK;
Seg_unit=FND_BLANK;
;1
>
>
void Act_setup()
(
000;
Blankout_display ( ) ;
digitalWrite (PI, HIGH) ; digitalWrite (P2, HIGH) ; TEST_MODE = !digi talRead (PI ) ; digitalRcad (P2) ; MS_MODE
SELF TEST MODE=l;
if ( (Red_input =- ACTIVE_INPUT)
4&
(Green_input
ACTIVE_IN?UT) )
(
if ( (Count_learn_time
(
0)
(TEST_MODE
1) )
Microcontroller-Based Projects
275
Display Systems
There
are so many games where the winner is the one who takes the least time in successfully completing the task given. Take for instance the 'fastest finger first' in Kaun Banega Crorepati quiz show on TV or the 'fastest crossing first' in any type of race. In these competitions, sometimes there may be two or more who players appear to complete the task in equal time. In such cases, it becomes difficult for the judge to announce the winner, though there may be time difference of a few milliseconds between the individuals in accomplishing the task. Here is a circuit based on Atmel microcontroller AT89C51 that can resolve the time-difference ambiguity and indicate correct ranking of all the participants on a liquid-crystal display (LCD) module. It has been designed for a maximum of eight participants playing at a time, denoted by alphabets 'A' through 'H,' and can be used both for a 'fastest finger first' quiz and 'fastest crossing first' race.
Circuit description
Fig. 1shows the circuit of the microcontroller-based rank display system. It comprises microcontroller AT89C51, transistor array IC ULN2803, LCD module (16x2), regulator IC 7805 and a few
discrete components. IC AT89C5 1 is a low-power, high-performance, 8-bit micro computer with 4 kB of Flash programmable and erasable read-only memory (PEROM), 128 bytes of RAM, 32 input/output (I/O) lines, two 16-bit timers/counters, a five-vector two-level interrupt architecture, a full-duplex serial port, on-chip oscillator and clock circuitry. Port-0 pins of the microcontroller (IC1) are pulled high via 4.7-kilo-ohm resistor network RNW1 and interfaced with switches SI through S8 (corresponding to players 'A' through 'H'), respectively. Port-0 pins PO.O through P0.7 are also connected to pins 11 through 18 of ULN2803. Port-2 pins P2.0 through P2.7 are connected to inputs 1through 8 of IC2. Each time a switch is pressed, a feedback is sent from port 2 through port 0 via ULN2803 (IC2).The purpose of this feedback is to make a given pin of port-0 'low,' independent of the condition of the corresponding switch (Si through S8) just after it has been
|
Semiconductor:
PARTS LIST
IC1 IC2
IC3 D1-D4 LED1
-
AT89CS1 microcontroller
- 5mm LED
Resistors (all '/4-watt, 5% carbon): R1-R8, R12 - 4.7-kilo-ohm R9 100-ohm RIO - 10-kilo-ohm - 330-ohm Rll VRl - 10-kilo-ohm preset - 4.7-kilo-ohm resistor RNW1
network
Capacitors:
Cl,C2 C3 C4 C5 C6-C9
Miscellaneous:
pressed once.
One more input switch Sll is provided to reset the circuit for starting the next round. Switch Sll is connected to P3.0 pin 10 of the microcontroller. Pressing of switch Sll starts the next round of questions. Thus, it acts as a latch. R1 through R8 are current-
XI
limiting resistors. Port-1 pins Pl.O through P1.7 and port-3 pins P3.1 through P3.3 of the microcontroller are interfaced with data line pins 7 through 14 and pins 4 through 6 of the LCD module for display ing the various rankings. Contrast pin 3 of the LCD module can be controlled using preset VRl. Pin 3.4 of the microcontroller is
Microcontroller-Based Projects
500mA secondary transformer S1-S8, S10, Sll - Push-to-on switch S9 - Slide switch S12 - On/Off switch - 11.0592MHz crystal Xtal PZl - Piezobuzzer - LCD module (16x2) line
277
_a JS9- Qnga
PZ1
PIEZO-
C6 lOOn
EnQ5
- P3.6 |
RNW1
BUZZER
40
R12
4.7K
POO
38 37 36
4.7Kx8
P3.4
J-S1
P1.0
P1.1
P 12
P0.1 P0.2
PO 3
P0.4 P0.5
-*
S4 D o o
P1.3
P1.4
PI.5
33
32
P0.6
J- E
F
o o
o o
S5
S6
G o
H
PI.6
P0.7
S7 oS8
P1.7
C7
100n
VR1
10K
15
IC1 AT89C51
P2.7
P2.8 P2.5
25
+Vcc
C8
100n' R8
P2.4
P2.3
P3.0
24
23
P2.2
P2.1
P2-0
22
S12
ON/OFF
SWITCH
D1-D4 = 1N4001
Xtal
11.0592 MHz
C2
33p
R10
D2
GND
10K
230V
AC 50Hz S10
D4
D3
IC3
X1 = 230V AC PRIMARY TO 12VAC. 500mA SECONDARY
TRANSFORMER
COM
C3
25V
+_
lOOOp-r-
10(J
C4 t
16V
p 100n
VLED1
*S11
= SEE TEXT
Fig. 1:Circuit of the microcontroller-basedrank display system for race and quiz competitions
used to control piezobuzzer PZ1. When P3.4 goes low, piezobuzzer PZ1 sounds. Pin 3.6 of IC1 is connected to slide switch S9 for selection between race and quiz. Switch S10 is used to manually reset the microcontroller, while the power-on reset signal for the microcon troller is derived from the combination of capacitor C5 and resistor RIO. A 11.0592MHz crystal generates the basic clock frequency for the microcontroller. 230V AC mains is stepped down by transformer XI to deliver the secondary output of 12V, 500mA. The transformer output is rectified by a full-wave bridge rectifier comprising diodes D1 through D4, filtered by capaci tor C3 and then regulated by IC 7805 (IC3). Capacitors C4 and C9 bypass any ripple present in the regulated power supply.
278
Rank Display System For Race And Quiz Competitions
How it works?
First of all, select the mode by using switch S9. For example, when you slide switch S9 towards 'quiz' op tion, the given circuit can be used as 'fastest finger first' quiz system. At the resump tion of power, a message "Welcome to all the players" is displayed on the LCD. After some time, it displays
EFY/SUNI L/ RANK /JUNE
players'
names
'A' through
'H' in the first line and the message 'First Question' in the second line. Now the quizmaster can ask the first question. The monitor pro gram continuously checks the status of port 0. If any input switch SI through S8 is found low (by the controller
program), it means that the corresponding switch has been pressed. As soon as any of competitors 'A' through 'H' presses his switch first, his rank is stored as '1' immediately in the rank table at the corresponding RAM location. The buzzer sounds a beep and the timer starts recording. The status of the rank table is updated repeatedly at intervals into the rank table and this status is maintained (due to latching at port 0, offered by feedback from IC2) until the next key is pressed.
Now the second case arises: 1. If the remaining seven players press their switches within 30 seconds, the LCD displays the message "Done in Time" and the buzzer sounds a beep.Thereafter, the LCD displays the ranks ('1' through '8') of all players below their names. 2. If the remaining seven players don't press their switches within 30 seconds, at the end of this period the LCD displays the message "Time Out" and the buzzer sounds a beep. After that, the ranks of those who have pressed their switches within time are displayed below their names, while is displayed below the names of the remaining players. The display stays in this position and the monitoring program checks the status of pin P3.0. If P3.0 (pin 10) of IC1goes low on pressing switch Sll for about 2 ms, all the things are initialised for the next question and the LCD shows the message 'Next Question ('Next Round' for race). For race competitions, the circuit works in a similar manner but you need to replace switch Sll with a foot switch or LDR-laser light combination. The message "Welcome to all the players" is replaced with "Welcome to all the racers.'"Next Question' is replaced with 'Next Round.'"Done in Time" is replaced with "Covered inTime." An actual-size, single-side PCB for the microcontroller-based rank display system is shown in Fig. 2 and its component layout in Fig. 3. This PCB is designed for demo purpose only. In actual application, where contestants are seated in different locations, you can extend input switches SI through S8 to the players. For this, connect a pair of wires to the con necting terminals of each of these switches on the PCB to extend these to players. In this case, tactile switches Sl through S8 are not required on the PCB.
Software
The software is written in Assembly language and assembled using ASM51 cross-assemblcr. Intel hex code is
Microcontroller-Based Projects
279
generated and burnt into the microcontroller chip using a suitable programmer. The software is well commented and easy to understand. Timer 0 is used to introduce time-out after 30 seconds from the instant when any key is pressed first. RAM lo cations '3111' through '3811' store the ranks of players A' through 'H,' respectively.
Download Source Code:
EFY/SUNIL/'PhNK/ JUNE-08
M>br
DNLllH OOP
9U AC
C3_.
IC3
OO
ULN2803
0 0 0 0 BUZZER O
7k
D3 C6[
,
X8,Q
<U<U<UU BBBBBBBBBBBBBBBBBBB
H S8 OOOl
Rl-B8=
QUIZ
\7
O
mr:
r
X)
ss
RACE
lOOOu
>
ill
C9[p~c1
100E
o o
XTflL 1 1 .0592MH7
Q.lCu?l
R9
R)0>
NEXT Sll
10KC RESET
I
$mod51
RANK.ASM
vice routine
equ p2
equ pD equ pi
|
setb ea
latch
keys
dline
rs rw
en
equ p3.3 equ p3.2 equ p3.1 equ p3.4 equ p3.6
equ p3.5
;port for providing feedback / input stage port ;8-bit databus for LCD ;flag for next question/ round ;register select for LCD ;read/write for LCD ;LCD enable pin
timerO configured in
or 'time out'
org OOOOh
sjmp main
orq OOObh
dress
clr trO
mov tlO, #D0h
mov r6,#3 mov r5,#20 mov latch, #0 mov keys,#0ffh acall lcdly acall lcd_int mov dptr, #welcome acall read
mov a, #0c0h
stage
mov th0,#00h
count
al: djnz r7, return mov r7,#136 djnz r6, return mov r6,#3 mov r5,#2D ;make buzzer on clr buzzer mov a, #0cDh acall command mov dptr, Ittimeout /display 'timeout' acall read acall dispdly ;keep on displaying for sometime setb buzzer /stop buzzer setb flag return: reti /return from interrupt ser
sjmp fffl : mov dptr, #welcome2 racel: fffl: acall read acall dispdly mov a, #80h acall command mov dptr, #plrname acall read mov a, KOcOh acall command
jnb mode,race2
mov dptr, tfirstqtn
sjmp fff2
race2; :
280
here:
clr flag
mov latch, JO
mov keys,#0ffh acall lcdly mov 04h,#48
loaded into r4
blankrank: mov r0,#31h of rank table
jnb mode,race4 mov dptr, #intime sjmp fff4 race4 : mov dptr , #intimel fff4: acall read acall dispdly
setb buzzer resultl : clr trO mov r0,#31h table pointer mov a, #0c0h acall command show: mov a,@r0 acall display below name mov a , ' ' acall display tween ranks inc rO cjne rO, #39h,show upto the rank of 'H'
/reinitialize rank
by
inc rO cjne rO, #39h, again
/mov status
of input into
sound buzzer
/keep on displying
here unless
/recheck if p3.0 is
mov dptr, #nxtqtn scan: jb acc.O, store ;now start scanning for the pressed switch from here inc rO /point to next address in rank
table (32H) jb acc. 1,store /point to next address in rank inc rO table (33H) jb acc.2,store inc rO /point to next address in rank table (34H) jb acc.3,store /point to next address in rank inc rO table (35H)
jb acc.4,store /point to next address in rank inc rO
table (36H) jb acc. 5, store
sjmp fff3
race3: mov dptr,#nxtrnd fff3: acall read
(or round)
jmp here
quest ion/ round
'
next
read:
inc rO /point to next address in rank table (37H) jb acc. 6, store inc rO /point to next address in rank table (38H) jb acc. 7, store
store: mov @r0,04h
/move ASCII code of
lcd_int: mov a,#38h ch, 5x7 matrix acall command mand register mov a, #0ch acall command
mov a, #01h
8bits/
/clr screen
/
current
acall command
ret
56 is ASCII code
for >8'
sjmp result
result: clr trO mov tl0,#00h
mov th0,#00h
initial count
,-stop buzzer
command: mov dline,a clr rs ter of LCD nop nop clr rw LCD nop nop setb en acall lcdlyl
Microcontroller-Based Projects
281
clr rw
LCD
dispdly : mov rl,#255 dls mov r2, #255 d2 : mov r3, #30 djnz r3,$ djnz r2,d2 djnz rl,dl ret
;Look up table starts fron here
pir name :
;now write into data
db
1
C
>
, ,0
TO ALL
register
acall lcdly ret
lcdly : mov rl,#0ah Ipl ; mov r2, #0f fh djnz r2,$ djnz rl,lpl ret lcdlyl mov rl,#3fh 1P2 mov r2,#0ffh
we 1 ',0 THE PLAYERS cornel : db welcome 2 : db ' THE RACERS ',0 firstqtn : db ' FIRST QUESTION \0 firstrnd: db ' FIRST ROUND ',0 db 1 NEXT QUESTION ',0 nxtqtn: nxtrnd: db 1 NEXT ROUND * ,0 DONE IN TIME intime : db \0 IN TIME \0 intimel : db timeout : db 1 TIME OUT \C
end
282
his project shows as to how you can use the Atmel microcontroller AT89C51 to drive an LCD display module and in turn use it as a handheld device to set the parameters of a control unit through RS-232 serial link.
The circuit
Figs 1and 2 show the circuits of a microcontroller-driven control unit and microcontroller-driven remote handheld device comprising LCD module, respectively. The circuit around IC1 (IC AT89C51) is configured as a R1-R8 = 1K +5V EA/VPP Vcc control unit, while the circuit around IC2 (another IC C1-C5 = 1|i,10V 31 40 AT89C51) is configured as the LCD driver unit. The L. two units are connected via an RS-232 serial link. The ;cs combination of an 8.2k resistor (R) and a 10|iF capacitor (C) provides hardware power-on-reset to ICl and IC2 at their pin 9. A 11.059MHz crystal is connected between pins 18 and 19 of microcontrollers ICl and IC2 each to CON-2 generate the required clock and baud rate of 9600. 9-PIN D' CONNECTOR (MALE) Eight LEDs are connected to pins 39 (P0.0) through 6 9 32 (P0.7) of ICl, so we can see the status of each pin of /oooo\ port O.Txd (pin 11) and Rxd (pin 10) are used to trans sjoooooji mit and receive serial data through IC MAX232. IC3 and IC4 (MAX232) serve the purpose of linking the R8 LED8 microcontrollers. Pin 14 (Tl OUT) of IC3 is connected 14 13 to pin 13 (R1 IN) of IC4 and vice versa. The control unit C1+ +]_ 89C51 contains the program 'contr.asm' to send and receive data C3 C1I to the handheld device (LCD module). TXD (P3.1) T1-IN IC3 11 C2+ IC2 contains the program 'module.asm' to drive the MAX232 RXD (P3-0) R1-QUT 12 LCD. A 16-character x 4-row LCD display is used to C4 C2I display the day-month-year. The LCD module is inter 6 15 faced through 8-bit data bus of IC2 on its port 2 (pins 21 through 28). These pins are pulled high through the 10k Zl C2 resistor network. Internal registers of the LCD module X1 19 are selected by pin 1 (P1.0) of IC2.The Write and ChipC6 Enable signals of LCD module are connected to pins 2 22P nn (Pl.l) and 3 (P1.2) of IC2, respectively. XtalI C7 22P ~[~ 11.059 MHz Backlight current (intensity) is controlled through 18 X2 series resistor R12 at pin 16 of the LCD module. The +5V RESET 9 o contrast and viewing angle are controlled through preset '+ ' C8 VR1 at pin 3 of the LCD module. 20 10m 1M .8R2K 10V GND GND Four pins of port 1 (pins 4 through 7) are used to o sense which key has been pressed. The keys are Esc, Ok, Up, and Down. Usually, pins 4 through 7 are held high through 4.7k resistors, but any of the pins can be pulled Fig. 1:Control unit
1
Microcontroller-Based Projects
283
down using the corresponding switches SI through S4. RS-232 link between the two circuits serves the purpose of Semiconductors: transferring serial data from one microcontroller to the other. IC1.IC2
IC3.IC4
PARTS LIST
-
Functioning
It is assumed that the control unit has some basic data, say, some one's birthday, stored in it. The day, month, and the year data are stored at 30H, 31H, and 32H RAM locations, respectively.
AT89C51 microcontroller MAX232, RS-232 level converter 16-characterx4-line type Red LED
When the remote handheld device (LCD module) is con nected to the control unit through RS-232 link (IC MAX232), IC2 is reset to start functioning. The data stored in the control unit - 18-ohm is displayed on the LCD screen. The user can then select the data R16 10-kilo-ohmx8 *S1L9 RNW1 (day, month or year). To change the data, increment or decrement it using Up or Down key, and then transfer the data back to the resistor network control unit. - 4.7-kilo-ohmx4 SIL5 RNW2
Resistors (all'/i-iuatt, 1 5% carbon, unless stated otherwise): R1-R8 - 1-kilo-ohm R9, RIO - 8.2-kilo-ohm R11-R14 - 4.7-kilo-ohm - 5-kilo-ohm R15
Software
In the beginning section of the assembly file (refer Fig. 3 and the module.lst file), RAM locations are reserved for saving various variables such as the day's units and tens digits. Capacitors: One location (45H) has been defined for sensing the flag to C1-C5, - lpF, 10V electrolytic find whether serial port has been interrupted or not. Port pins C9-C13 connected to pins 4 through 6 of the LCD module are defined as C6, C7, - 22pF ceramic disk 'rs','rw', and 'en'. Keys Esc, Ok, Up, and Down are defined as Port C14, CIS - 10|jF, 10V electrolytic C8.C16 1,which are connected to pins 4 through 7 of IC2, respectively. The main program starts at location 0000H, while a jump Miscellaneous: instruction has been set at location 0023H for the serial port inter V l/U.l' Y IAL2 - 11.059MHz - Push-to-on tactile switch rupt service routine (ISR). Whenever the serial port is interrupted, S1-S4 Con-1 - 9-pin 'D' female connector the program is automatically branched to location 0023 H. Con-2 - 9-pin 'D' male connector Start. The main program starts at location 0030H. Initially the stack pointer is initialised to some safe location where it will not get disturbed by normal routines of the program. Timer 1 is set as a NOT-gated timer for 8-bit auto-reload function mode. The reload value of timer 1 is set for generating a baud rate of 9600 bits per second. The SCON register is set for Mode 1 operation and is kept ready for reception. Start timer 1and set the required interrupt request bits as enabled. The interrupt flag is kept cleared to start. Now proceed as per the flowchart shown in Fig. 3. A few steps after the 'clr intflg' instructions and before stepl are for initialising the LCD module. Step 1. Screen 1, screen 2, etc to be displayed on the LCD module are predefined as scrl, scr2, etc at respective locations.As the program enters step 1, it first sets the data pointer to point at the first screen to be displayed. Hie setup subroutine displays the screen. The first screen displayed is a welcome massage. The program waits for the user to press Ok key to come out from the welcome screen display. When the user presses Ok key, the program control passes to Step 2. Step 2. The program now displays the birthday screen, indicating day, month, and year. A small arrow pointer (>) indicator gets added at LCD location COH, so the arrow points at 'day', indicating that the parameter 'day' is being selected. The first character of each line on the LCD module has a unique address: The first character of first, second, third, and fourth lines has address as 80H, COH, 90H, and DOH, respectively. As the program executes the add_day, add_month, and add_year subroutines, the day, month, and year data is retrieved from the master IC 89C51 (ICl), converted into proper ASCII format, and saved at LCD locations.
284
AT89C51-Driven Data Display
resistornetwork VR1 - 5-kilo-ohm preset [Note. *Serial-in -line 9-pin resistor, wherepin 1is a common pin.)
+5V
1: K-r
EA/VPP
Vcc
40
Vdo
C9
16
cn
31
:1812
R12
The display now shows the day, month, and year also
LCD screen. If the user wishes to select month or year, he needs to press Down key and shift the arrow pointer to the required selection place. On pressing Down key, the arrow pointer shifts down. Similarly, on pressing Up key, the arrow pointer shifts up. This way the user can select the parameter he wishes to change. In case no parameter is to be selected, by simply press ing Esc key, the user can go back to Step 1, which is the welcome screen. Once the user has selected the parameter, pressing Ok key takes the program to the
next step.
on the
cio;
v+
c-_r
IC4
MAX232
C2+
ci2;
C13~
P2.1 P2.2
P2.3
ZT-C11 =
C2-
P2.5
P2.6
V14 13
T1-IN
(i,10V C9-13 = 1
R1-0UT
T1-OUT
R1-IN
TXD RXD
P1 0 P1 1 P1 2
RS
r/w
l| O 6 6 O O I 5 oooy
6
CON-1
9-PIN 'D' CONNECTOR
9*5V
RNW2 4.7Kx4
IC2
89C51
(FEMALE)
C16
+5V
O
--I (
R10
10p 10V
P1.4
RESET
PI.5 PI.6
ESC
8.2K
J- C14
S1"
I1-22P
-L- C15
Step 3. Here the screen displays all the birthday S4 characters, except the ar row has been shifted to S1-S4= PUSH-TOON SWITCH 20 indicate month. GND Step 4. Here also the o screen displays all the birthday characters, except the arrow has been shifted Handheld module unit LCD Fig. 2: comprising to indicate year. Step 5. Depending upon the users selection of day or month or year, the program branches to Step 5 or Step 6 or Step 7, where the screen displays 'set day' or 'set month' or 'set year', respectively. On screen 5, the LCD displays 'set day'. The day then gets added on the screen. At key5 label, the program checks, which key is pressed. As long as no key is pressed, the program keeps looping back to key5 label. When the user presses Up key, the parameter increments, as the 'advance day' and'display day' subroutines are called in. Similarly, by pressing Down key, the parameter decrements. During the 'advance day' subroutine, the program first checks whether the day is already 31. If so, it resets the day to 01, and doesn't allow it to increment to 32. Similarly, the month doesn't go beyond 12 and the year doesn't go beyond 99. However, if the user is decrementing the day parameter, the program first checks whether the day is already 01. If so, it resets the day to 31, the month to 12, and the year to 99. Whenever the desired value of the day is seen on the screen, pressing Ok key takes the program to transfer the day data to the master IC 89C51 (ICl).The trfr_day subroutine transfers the value to the appropriate RAM location in the control unit and returns to the step2 screen. Steps 6 and 7 are similar to Step 5. As soon as the control unit of IC1 sends some data to the serial port, the serial interrupt at location 0023H gets activated and the program control is passed to the serial port by the spint ISR (serial port interrupt program).
~p 22P
Xtal2 059 MHz
19
OK
S2*
S3"
18
DOWN
Microcontroller-Based Projects
285
STEP1
WELCOME TO
OK
STEP2
BIRTHDAY
STEP5
OK
SET
UP
INCREMENT DAY
DECREMENT DAY
ESC
DAY
ESC
DN
44
OK
TRANSFER DAY TO CU
STEP3
UP
STEP6
BIRTHDAY
OK
SET
UP
INCREMENT MONTH
ESC
DN
MONTH
44
DECREMENT MONTH
ESC
OK
TRANSFER DAY TO CU
STEP4
BIRTHDAY
ESC
UP
OK
STEP7
SET INCREMENT YEAR
DN
DAY
MONTH > YEAR
DECREMENT YEAR
44
ESC
YEAR
44
OK
TRANSFER DAY TO CU
spirit subroutine. First, all the interrupts are disabled, since we do not want any interrupt while serving this subroutine. Pushing the program status word (psw) on the stack saves any useful information on the psw and accumulator. The sbuf register is then read and the same is stored at register B. 'ri' bit is then cleared for receiv ing the next character; flag is set to indicate the interrupt had occurred, and finally the program returns from the subroutine. sendsubroutine. The program first disables all the interrupts and clears the transmission completion flag. Then it loads the buffer register to start the transmission from IC2 to the control unit (IC1). As long as 'ti'bit remains low, we need to wait. When the transmission is over, 'ti'bit goes high.The program then enables the interrupt and returns to the main control. setup subroutine. The program first sets the address pointer (register r2) to the first-line, first-column position (80H) of the LCD. It writes this address to the LCD using the wi subroutine. The program then gets the character from the screen data library and writes data to the LCD using the wd subroutine. The setup subroutine displays the character on the LCD screen. Both the data pointer and the address pointer (register r2) are then incremented. The program checks whether the first line of LCD has been written. If so, it modifies the address pointer to the second line, which is COH. Similarly, when the second line is over, the third-line, first-character address is set, and then fourth-line, firstcharacter address is set as address pointer. wi subroutine. This subroutine is used for transferring control instructions to the LCD. It first sets up the LCD for writing instructions (rw=0, en=0, rs=0) and then moves the data to Port 2 (P2.0 through P2.7) from the accumulator. It then reads the busy bit at the rdbusy subroutine and waits until the writing process is completed, and finally returns to the main program. wdsubroutine. This subroutine is used for transferring data to the LCD. It first sets the LCD for writing data (rw=0, en=0, rs=l) and moves data to Port 2 from the accumulator. It then reads the busy bit by the rdbusy subroutine and waits until the writing process is completed, and finally returns to the main program. rdbusy subroutine. This subroutine is used for testing the busy bit during the writing operation to the LCD. It first selects the read set-up for the LCD (rw=l, en=0, rs=0). Then it sets Port 2-bit 7 (P2.7) and waits until this
286
AT89C51-Driven Data Display
H
(Fj.
1KH31!
tine returns as if no key was pressed. But if the key is sensed low for the second time also, the program accepts the key and waits for the user to release the key in about 300 miliseconds. After 300 miliseconds, even if the user does not release the key, the program repeats the action as if the key is being pressed again and again. The program control returns with a code in the accumulator. Codes for the keys are:
Fig. 4: Actual-size, single-side PCB layout for the handheld unit comprising LCD module (above) and the control unit (below)
bit becomes low after successfully writing to the LCD. Finally, it returns to the main program. dellm to del100m subroutines. These are just time delay subroutines. add day subroutine. The accumulator is set as a pointer for the control unit where the day information is stored. The send_con subrou-tine gets the data from the address pointer of the control unit. This data is now directly available in the two-digit ASCII format for the tens and units digits of day. The tens and units digits of the day are stored and then displayed at LCD locations C7H and C8H, resp-ectively.The add_ month and add_year subroutines are similar to the add_day subroutine. kcyprsf subroutine. This subroutine checks which key (Esc, Ok, Up, or Down) has been pressed. If no key is pressed, the subroutine re turns with the accumulator containing FFH. Key switches are connected to Port 1(PI.3 through Pi.6). Pins Pi.3 through PI.6 usually remain high until a key is pressed. If any key is sensed low, the program jumps to confirm whether it was an unintentional low or it really happ-ened by keypress. For confirm ing so, the program waits for the bounce period of 10 milliseconds and then checks for the low again on the same key. If the key is not sensed low now, it is as sumed to be an accidental low and the subrou
'01' for pressing Esc key '02' for wpressing Ok key '03' for pressing Up key '04' for pressing Down key trfr_day subroutine. This subroutine transfers the day data to the appropriate location in the control unit. When this subroutine is called, the data is available as two digits (tens and units) in the ASCII format. As the data needs to be stored at one RAM location in the hex format, the program has to convert the two ASCII digits into a single hex digit by the asci_hex subroutine. At the end of the asci_hex subroutine, an equivalent hex number is available as hex variable. The program now starts sending the characters. First, start code 02H is sent to the control unit, signaling it to get ready as the data is coming. Second, the address 30H is sent, where the day data is to be stored. Finally, the hex variable is sent, which is the current day data. The trfr_month and trfr_year are similar subroutines. Only the address where the data is to be stored is different in each case. hex_asci subroutine. First the units and tens digits are reset to ASCII zero. Then check whether the hex number is already zero. Ifyes, simply return. Else, advance the units. If the units digit has crossed ASCII 9, we need to reset
Microcontroller-Based Projects
287
the units digit to zero and advance the tens digit. REMOTE MESSAGE DISPLAY USING 89C51 Simultaneously, the hex number has to be dec remented. The process keeps repeating until hex (512 number becomes zero. The accumulated tens and >18K units are equivalent to the hex number originally LCD MODULE loaded. DISPLAY II I lil li il l l'Il Ii asci_hex subroutine. Here the process is al J2 most opposite to what we did while converting ftLL POLARISED CAPACITORS RNU1 10K X 8 RATED FOR 25 UOC hex into ASCII. First, the hex number is reset J1 to zero. Tlien we check whether both the units coaaaaaaaaaaaaaoBeo and tens digits are zero. If so, we simply return. IC2 Otherwise, we have to advance the hex number. 89C51 Simultaneously, the units and tens digits are to be decremented. The process keeps repeating ooo ooo o oooaoo OTTT 0a0flr -K x -ORNISH! itself until units and tens digits become zero. adv_day subroutine. This subroutine ad vances the day data, but ensures that it does not go beyond 31. The first part checks whether the RS232 I/O-l day's units digit is 1(decimal) and tens digit is 3 IE (decimal). If so, the program sets the units digit PBOQQQ ic3 r MAX232 i to 1and the tens digit to 0 before returning. f The second part of the subroutine advances D0000000 the day's units digit until it crosses 9 (ASCII 39). After 9, the day's units digit is reset to 0 and BB8BQ the tens digit is advanced. Similarly, if the tens digit crosses 9, the program sets it to 0. decjiay subroutine. This subrou-tine dec rements the day value. The first part checks 0 9000000090900000000 EFY/KCB/CQN2xJUN03 whether the day's units digit is 1 (decimal) and the tens digit is 0 (decimal). If so, the program sets the tens digit to 3 before returning. Fig. 5: Component layout for the PCB shown in Fig. 4 In the second part, as the day's units digit is decremented, the program tests whether it has gone below zero. (When ASCII 30h decrements, it will become ASCII 2fh.) The program sets the units digit to 9 (ASCII 39h) and decrements the tens digit. As the tens digit is decremented, the program tests whether it has gone below zero. If so, the program sets the tens digit to 9. The adv_month and adv_year subroutines are similar to the adv_day subroutine, and the dec_month and dec_year subroutines are similar to the dec_day subroutine. send con subroutine. This subroutine first sends the address to the control unit and waits for the interrupt flag to go high. This means the data from the control unit is to be received at the specified address. After receiving the data, the interrupt flag gets cleared for the next in struction. The data is received from register B, saved as the hex variable, and converted into the ASCII code that is required for the LCD module. The actual-size, single-side PCB layout for the handheld unit comprising LCD module and control unit is shown in Fig. 4 and its component layout in Fig. 5. The combined PCB can be cut along the dotted lines to separate the control unit and handheld unit compris ing LCD module. Download Source Code: http://efymag.com/Microcontroller_Driven_Data_Display-July03.zip
#O
n:
o
288
0370 740C
3mod5 1
.'program
69
1 2 3 4 5
6
nov lcall
mov
a, fOOOOllCOb
wi
a, #01h
0077 1201F5 72
007A 7406
73
lcall
mov
wi
a, #06h
8
9
/-modifications included.
;1.incrementing/decrementing
(not
in single step)
of
day/month/year
in continuous
step
wi mov
setup
10 11
;2.while advancing, limiting day/month/year tc 30,12 and 99. w resetting the day to 30, month to 12, year
0088 B402FA 78
008B 8000 79
008D 900505 80
cjne sjmp
step2
12
13
, -RESERVED
14 15 16 17
;file name
- module.asm
LOCATIONS
0090 1201C3 81
.-keep waitng till 'ok* key pressed ;if ok key-go to step 2 dptr, #scr2 ;set pointer
.display "Birthday/day/month/y
year"
0030
cay_t
equ
30h
31h
32h 33h
0031 0032
0033
cay_u
mon_t roon_u
yer_t
equ equ
equ equ
0034
0035 0036
0037 0038
18 19 20
21 22
34h
35h 36h
37h 38h
;day tens ;day units ; month tens ; month units ;year tens
mov lcall
mov lcall
a, fOcOh wi a, I3eh
wd
yer_u units
tens
equ equ
equ
;year units
;temp storage of units ;temp storage of tens ;temp storage of hex byte ;LIST OF I/O
00A3 1202A2 88
00A6 00A 9 00AC 00AE
1202C5 89 B40102 90 80D1 91
add_day addjnonth
add_year
keyprs? lcall a, #01h,_022?
hex
equ
0045
0090
23 24
25 26
intflg
rs rw
bit
equ
45h
pl.O
.interrupt flag
;FOR LCD MODULE
B40202 92
93
_022?:
sjmp
stepl cjne
step5 cjne
;add day ;add month ;add year ;key pressed? ; ;if escape key-go back to step 1
a, #02h, 042
;if ok key-go to step 5 a, J04h,key2;if nore-go back to key2 ;if down key-go to step 3
00B1 8060
0091 0092
27
28
29
equ
en
equ
pl.l pi.2
30
0093
0094
0095
31 32
33
esc
OK up
equ equ
equ
P1*3
pl.4 pi.5 pi.6
;0instructions, 1-data ;0write, lread ;0disabled, 1 -enabled ;p2 port for data fron cpu to LCD module ;F0R KEYBOARD .Escape key ;Ok key
;Plus key
_042?:
sjmp step3: lcall
mov
step3 mov
setup
a, #90h
1201F5 99 74 3E 100
120208 101 12025C 102
lcall mov
lcall
wi a, #3eh
wd
arrow pointer
0096 0000
0000 B02E
34 35 36 37
cn
org
sjmp org ajmp
equ
OOOOh
start
addday
addjno.uh add_year
lcall <eyprs?
a,
main program
38 39 40
41
0023h
spint
org
start: ntov
0030h
mov
sp, I60h
rnov roov
mov nov
;junp to serial port int.program .initialization of registers ;set stack pointer ; initialise SFRs ;smod=0
;timerl(ga:e=0,c/t=0,mode=8 bit
auto reload)
00D4 B40102 106 00D7 80A6 107 00D9 B40202 108 00DC 8064 109 00DE B40302 110 111 00E1 80AA 00E3 B404EB 112
00E6 8000
113
cjne sjmp
I01h,_023?
a, #02h,_ 033? ;
;if ok key-go to stepS a, #03h, _043?; ;if up key-go to step2 a, *04h,key3 ;if ncne-go back to key3 ;i do*n key-go back .o step4 dptr, #scr2 ;set pointer .display "Birthday/day/month/ year"
_023?:
sjmp
stepl cjne
step6 cjne
_033?:
sjmp
_043?:
sjmp step4: lcall
step2 cjne
step4 mov
setup
0042 D28E
0044 D2AF 0046 D2AC
48
49
setb
setb setb
00EE 74D0
116
mov
lcall
mov
a, #0d0h
wi
a, *3eh
50
51
52 53 54
setb
setb setb
ip.4
rxd txd intflg
lcall
lcall
lcall
lcall key4:
wd
004E C245
clr lcall
lcall mov
55
0050 120245 56 0053 120245 57 0056 7430 58 0058 1201F5 59 005B 120238 60
005E 7430 0060 201F5 61 62
dellOm
dellOm
a, #30h
cjne ajmp
_024?:
sjmp
lcall lcall
mov
wi del4m
a, #30h
.write instruction
;
_034?:
sjmp stepS:
80A5
900545 1201C3 12025C 1202C5 018D
129
130 131
wi
.-add day add_day addjnonth .-add month ;add year add_year ;key pressed? keyprs? lcall a, I01h,_024? ;if escape key-go back to step 1 stepl cjne a, #02h, _034 ? , ;if ok key-go to step7 step7 a, #03h, key4 ;if ncne-go back to key4 cjne ;if up key-go back to step3 step3 mov dptr, Iscr5 ;set pointer
del4m a, #30h
wi
a, #38h
132 133
135
setup
.display "set/day*
;add day
add_day
.write instruction
.select 8-bit operation, ;nurber of lines 2, font 5x7 dots
B40102 134
67 006D 1201F5 68
lcall
wi
_025?:
lcall
;key pressed? keyprs? lcall a, #01h,_025? ;if escape key-go to step2 step2 a, #02h, 035? ; cjne ;if ok key-transfer day value trfr_day
Microcontroller-Based Projects
289
138
a]mp
139
140 141 142
035?:
lcall
lcall
sjmp
143
144 145 146
_045? : lcall
lcall
sjmp
147
148
step6: lcall
149
150 151
lcall
key6: cjne ajmp
.back to display a, I03h, 045? ; ;if up key-advance day value ; display new day /back cjre a, #04h,key5 ;none-back to key5 ;if down key-decrenent day value dec_day /display new day disp_day key5 /beck dptr. tscr6 ;set pointer mov setup /display "set/month" ado_month ;add month /key p:essed? lcall keyprs?
8tep2
_2ndln: cjne
rov nov lcall
sjmp
01DE 7A90
r2, #090h a, r2 wi
; display cjner2. #0a0h, _4thln ; r2, lOdOh ; a, r2 wi ; display cjne r2. #0e0h, display ;
_3rdln:
nov nov lcall sjmp
01EF 80D8
223
_4thln:
ret wi: clr
a, f01h,_026?
152 153
154
026?: lcall
ajmp
;if escape key-go to step3 step3 a, #02h,_036? ; cjre /if ok key-transfer month value trfr_month
step2 cjre
;back to display
a,
cli en
rw
clr nov
setb
rs p2, a en
dellm
en
select instruction
set data to port transfer disabled
155 156
lcall
clr
157
158
159 160
#03h,_046?
advmonth disp_mnth
key6 cjr.e
lcall
ret wd:
rdbusy
clr en
rw
161
162 163
_046?: lcall
clr
transfer disabled
dec month
value
lcall disp_mnth key6 sjmp step"? rmo/dptr, #scr7
/display new month /back ;set pointer /display "set/year" ;add year ;key pressed?
237 238
setb nov
setb
lcall
164 165
166
167
rs p2, a en
dellm
select data
set data to port
lcall
setup
lcall
key7: cjne
add_year
keyprs? lcall a, I01h,_027?
clr lcall
ret rdbusy:
en rdbusy
clr
en;
transfer disabled
return
ajmp
_027?:
lcall ajmp
172
173
_037?:
174
175
lcall
lcall
;if escape key-go to step4 step4 a, I02h,_037? ; cjre ;if ok key-transfer year value tifr_year ;back to display step2 cjre a, #03h,_047? / ;if up key-advance year value adv_year /display new year disp_year
245 246 247 0223 D292 248 0225 20A7FD 249 0228 C292 250 022A 22 251
022B 755004 252
clr
setb
setb setb
wt:
rs
rw
P2.7
en jb en
mov mov
P2.7
clr
ret dellm: loopa:
wt
176
sjrrp
177 178
179 180
_047? :
lcall
lcall sjmp
;back a, #04h,key7 ;none-back to key? ;if down key-decrement year value dec_year ; display new year disp_year key7 /back
key7 cjre
loopb: djnz
ret
. 51hi
delay of 1 milisec.
loopb
del4m:
dellm
delay of 4 milisec.
181 182
183
184
185
clr
mov out: pop pop setb
186
187
188
ea
lcall
ret
ri
;
/
delay of 10 milisec.
50h, loopc
189 190
191
192
193
setb reti
send:
intflg
clr
dellOOm:
194
195 196
197 198
clr raov
vaitt:
clr
setb
ret setup: mov lcall
ti sbuf, a jnb ti ea
ti, waitt
199 200
201
202
mov
a, r2
r2, #80h
;return from interrupt .disable all interrupts ;pull ti flag low ;load sbuf ;wait till ti flag goes high ;pull ti flag low .enable all interrupts / return .line 1-column 0 position
;
nov looph:
ret
56h, lOah
lcall
djnz56h, looph
025B 22
271
025C
025C 025F 0261 0264 0267 02 6A
272
120245 273 7430 274 1204B5 275 853730 276 853631 277
278 279
add_day:
lcall
dellOm
nov lcall
a. #30h
send_con
30h in CU
wi
.write instruction
;
026A 74C7
203 204
205 206
a a, ga+dptr/
wd
lcall
nov lcall nov
wi
a, tens
wd
print tens
set address in LCD nodule
/write data
/
i
dfc>tr
r2
r2. #090h,_2ndln
r2, #0c0h ; a, r2
lcall nov
a, tOcBh wi a, units
print units
;
I
wi display
0282 7431
290
mov
a, #31h
lcall
mov
send_con
028D
028D 7497
294 295
367
trfr_day lcall asci_hex dellOm lcall nov a, 02h lcall send lcall dellOm a, I30h nov
lcall
send
line3/col8)
wi
a, tens wd a, #98h
wi
print tens
set address in LCD nodule
0342 E538
373
lcall nov
lcall
ret
dellOm a, hex
send
/convert ascii characters to hex ;wait for stabilisation ,-load start character <STX> ;send to CU ;wait for stabilisation /address in CO where to store the data ;send address ;wait for stabilisation ;get day value-hex format ;send day value .return
; convert ascii characters to hex ;wait for stabilisation /load start character <STX> ;scnd to CU
a, units wd
print units
0348
376
add_year:
lcall
dellOrr,
a, #02h
send
lcall
mov
a, #32h
lcall
0356 7431
382
nov
lcall
dellOm a, #31h
send
lcall
mov
send_con
02AD 853635 309 310 02BO 02BO 74D7 311 02B2 1201F5 312
the d data
0358 1201B5 383
,-send address
;wait for stabilisation
(line4/col8)
wi a, tens wd
d,
print tens
set address in LCD nodule
035B 120245 384 035E E538 385 0360 1201B5 386 0363 22 387 0364 388 0364 1203A8 389
I0c8h
wi
lcall
a, 02h send
mov
lcall
ret
a, units wd
print units
lcall nov
lcall
dellOm a, 32h
send
319
02C5
320
keyprs?:
321
322
323 324
setb
setb setb
setb
esc ok up
dn
set escape pin high set ok pin high set up pin high set down pin high
lcall nov
lcall
ret
dellOm a, hex
send
; convert ascii characters to hex ;wait for stabilisation ;load start character <STX> ;send to CU ;wait for stabilisation ; address in CO where to store the data ;send address ;wait for stabilisation ;get year value in hex format ;send year value
; return
02CD 30930C 325 02DO 3094 ID 326 02D3 30952E 327 02D6 30963F 328 329 02D9 74FF 02 DB 22 330 331 02DC 02DC 120245 332 02DF 309302 333 02E2 80F5 334 02E4 120252 335 02E7 120252 336 02EA 120252 337
0380 0380 C3
0381 E4
400 401
402
a units, #30h
tens, 430h
mov
a, lOffh
con_esc:
lcall jnb sjmp accesc:
lcall
lcall
dellOCm
dellOOm
escape key low-accept escape otherwise return empty wait for 300 milisec
lcall
mov ret
dellOOm
a,
#01h
0385 753"730 404 0388 E538 405 038A B40001 406 038D 22 407 038E 408 038E 0536 409 E536 410 0390 0392 B43A0F 411 0395 753630 412 413 0398 0537 039A E537 414 039C B43A05 415
039F 753730 416 03A2 BOFE 417
carry
mov
a,
a, hex
accu. zero ir. units zero ir. tens ;get hex value
#00h,adv_units
;if hex value is zero-return
advjinits:
inc
nov cjne
units
a, units
a,
#3ah,dcr_hex
units, #30h
tens
zero in units
.advance tens
;get new tens ;if tens exceeding ascii 39 ;set zero in tens ;this is illegal stage-so hang up
; decrement hex value /check is it 2ero yet? ;this subroutine converts ascii
342
343
344
345
accok: lcall
lcall
mov
dellOOm
418 419
420 421
dcrjiex:
dec
sjmp
hex
zero?
346
ret
characters
con_up: lcall
jnb 3jmp
accup:
dellOm
up, accup
retmt
422
03A8
03A8 C3
;to
423 424
lcall lcall
mov
dellOOm
427
set accu. to 03
ascii zero30h
03AD E536
428
;gets units
ret
return
con_dn: lcall
jnb sjmp
accdn:
dellOm
dn, accdn
retmt
03AF B43006 429 03B2 E537 430 03B4 B43001 431 03B7 22 432
03B8
nov cjne
ret
a, tens a, I30h,adv_hex
lcall
dellOOrr
433
adv hex:
dellOCm dellOCm
a, #04h
set
434
435
inc nov
cjne sjmp
hex a, hex
a, #00)i,dcr_asc
$
Microcontroller-Based Projects
291
438
439 440
441
442
units
044E E532
511
a, # 3 Ih,cont md
a, mon t
units, I39h
units
to
443 444
445
dec
BOV
ter.s
a, tens
a, #2fh,alizro
cjne
mov
ret
I31h
cjne
a, dayu a, #31h,cont_ad
451
452
453 454
nov
cjne
BOV
a, day_t
a, #33h,cont_ad units, #31b tens, *30h
; yes-get current day tens, nocontinue advnacinc day ; test-is it ascii three? ; yes-set units-ascii one
0465 14
522
nov
455 456
457 458
ret
0466 B42FDD 523 0469 753739 524 525 046C 22 046D 526
contjnd; a, monjj mov a dec a, I2fh,save_urits cjne units, f39h mov a, non_t mov dec a a, I2fh,save_tens cjne tens, #39h mov
ret
? t
t
a, #39h, cont ay
units, I30h
tens,
!30h
ten3-ascii zero
a, #3ah,save_tens
ter.s, #30h
; ;
;
;get current day units ; test-is it ascii one?
ret
return
467
468
469 470
I30h,cont_dd
471
472 473
nov
nov
ret
units, #31h
ters, *33h
;yes-get current cay tens, nocontinue decrementing day ;test-is it ascii zero? ;yes-set units-ascii one, no-continue decrementing day;;;; ;set tens-ascii three
;return
0487 E534
539
mov inc
cjne
mov
ret
dec_year
mov
a, yerji
474
475
476
cont_dd:
nov
dec
cjne
nov nov
dec cjne nov
ret
cjne mov
cjne
; ;
;
mov mov
ret
tens, #39h
482 483
484
485 486
1 ;
;get current month units
adv_nonth:
nov
cjne
487 488
489
490
nov
cjne
nov nov
cont_yd: a, yerji mov dec a a, 12 fh, save_ur.it s cjne units, I39h mov a, yer_t ; mov a dec
cjne mov
ret
a, J2fh, save_tens
tens, I39h
491 492
493 494 495
ret
;return
a, a
04B5
cont_am:
nov inc cjne
send_con
lcall wait: cir send jnb
intflg lntflg, wait
mon_u
send request to CU wait till serial data comes in clear indicator flag
496
497 498
nov
nov inc cjne
566
;
; ;
567
568
storec in
register b
04BD E5F0
499 500
501
502
nov
ret
; ;
04BF F538
;
units, a
; ;
; ;
mov
mov
lcall
ret scrl:
db
a, b hex, a
;get
what has been received save hex value LCD module needs acsii input
save_uni:3:
nov ret
hex_asci
503
504
505
506
save_tens:
nov
ret
ter.s, a
573 574
575 576
return
db
'W
04C6 45
507 508
04C7 4C
509
04C8 43 04C9 4F
577 578
db db
'L'
db
579
580 581
582
db
db db
db
'M'
'E'
i
db
i i i i i i i
db db
db
,r
db db db
db
t
051D 20
662
051E 20
051F 20
0520 20
663
664
665
db db
i i
i i
i i
db
db
04D2 20 04D3 20
04D4 20
04D5 45
587
588
589 590
db db db
db
db db db
db
i i i i i i
04D6 46 04D7 59
04D8 20 04D9 20 04 DA 20 04DB 20 04DC 20 04DD 20 04DE 20
591
db
db
db db
lyt
i
592
593 594
670 671
672 673
db
db db
db
i i
'M'
i i i
t
i
595
596
db
db
0529 54
052A 48
674
675
db
db
597
598 599
db
db db
I t
i i
052B 20
052C 20 052D 20
676
677 678
db
db
t
i
i
db
04DF 20 04EO 20
04E1 20 04E2 20
600
601
602 603
db db
db
052E 20
679
052F 20
0530 20 0531 20
680
681 682
db db
db
db
i i i
i
04E3 20 04E4 20
04E5 41
604
605
606
db db db
db
0532 20
i
683
684
0533 20
0534 20
db db
db
i i i
i
'A'
607 608
db
db
'R'
.T.
609
610
db
db
db db db
db
Y*
04EA 4C 04EB 45
04EC 20 04ED 20
db db
db
db
i i
db
db db
db
i i i i i
i
04EE 20 04EF 20 04 F0 20
04F1 20 04F2 20
db db
db db
053D 20 053E 20
053F 20 0540 20
694 695
696 697
db
db
db db
i
i
* *
i
i i
04F3 20
04 F4 20
620 621
622
04F520
04F6 20 04F7 20
04F8 20
623 624
625
db db db db db
0541 20 0542 20
1
9
698 699
700 701
db
db
db
0543 20
0544 20
db
db
db db
t
0545 53 0546 45
0547 54
702 703
704
scr5:
db
db
db
,r
i i
04 F9 20
626
0548 20
1
705
db
04FA20 04 FB 20
04FC 20
627 628
629
db db
db
0549 20 054A 20
054B 20 054C 20 054D 20
706
db
707
708
db
db
i i
04FD 20 04 FE 20
630
04FF 20
0500 20 0501 20
db db db
db
db
709 710
db db
i i
i i i i
054E 20 054F 20
0550 20
711 712
713 714 715
716 717
db
db
db
i i
i i
i
0502 20 0503 20
0504 20 0505 42
635
636 637
638
db
1
1 1
0551 20
0552 20
0553 20 0554 20
db
db
db
db
db
db
i i i i i
0506 49 0507 52
0508 54 0509 48
639 640
641
642
scr2: db
db
db db
db
'I*
'T*
0555 20 0556 44
0557 41
0558 59
718 719
720 721
db db
db db
lyi
i
050A 44 050B 41
050C 59 050D 20
643 644
645
646
db db
db
'A'
i
0559 20 055A 20
055B 20 055C 20
722 723
724 725 726
db db
db db
I t
i
db
i
1
050E 20 050F 20
0510 20 0511 20
647 648
649 650
db
db db
dh
t
055D 20 055E 20
055F 20 0560 20
db
db
db
727
728 729
I 1
i
db
1 1 1 i
db db
db db
t
0561 20 0562 20
0563 20 0564 20
730 731
732 733
db db db
1
i
0516 44 0517 41
0518 59
655 656
657
db
db
db
'Y*
0565 20 0566 20
0567 20
734 735
736
db
db
db
1 1
Microcontroller-Based Projects
293
0568 20
0569 20 056A 20
056B 20
737
738 739
740
db
db db
db
i
05B8 20
05B9 20 05BA 20
i
db
db db
db
i i
05BB 20
20 20 20 20
0570 20 0571 20
0572 20 0573 20
db db db db db db db
db
05BC 20
821
05BD 20
05BE 20
05BF 20
i
822
823
624
db db
db
db
i i
<
825
826 827
828
db db db
db
i i
i
0574 20
749
0575 20
0576 20 0577 20
750
751 752
db db
db
t t
829 830
831 832
db
scr7:
db
db
db 'E'
'S'
db
iTi
i
0578 20 0579 20
753 754
db
db
i
057A 20
057B 20 057C 20
755
756 757
db
db db
i
057D 20
758
057E 20
057F 20 0580 20
759
760 761
db db
db
t
833
834
db
db
835
836 837
db db db
i
i
05CE 20
838 839
840
db db
db
0581 20
762
0582 20
0503 20
763
764
db db db
db
05CF 20 05D0 20
a
l
841
db
05D1 20
842
05D2 20
05D3 20
843
844
db db
db
1
l
1
l
db
scr6: db
db
db
pi
i i i
db
db db
db
0588 20 0589 20
058A 20 058B 20
db db db
db
db
db db
db
1
1
I
l
058C 20 058D 20
058E 20 058F 20
773 774
775 776
db
db
db
05DC 20 05DD 20
05DE 20
853 854
855 856
db db
db db
db
05DF 20
777 778
779 780
db db
db
05E0 20 05E1 20
05E2 20 05E3 20 05E4 20
857 858
859 860
db
db
db
0594 20 0595 20
0596 20
781 782
783
db db db
0)
9
t
05E5 20
05E6 20
I 1
1
861 862
863
db db db
db
I l
(
db db db
db
05E7 20
864
05E8 20
I I
05E9 20
05EA 20
059B 20 059C 20
788
059D 20
059E 20
059F 20
789 790
791
792
db db
I 1
1
05EB 20 05EC 20
db
db
db
I
05ED 20 05EE 20
;
db db
1
1
db
db db db
I
I
I
I
1
l
db
db
db
05EF 20
05A0 20 05A1 20
05A2 20 05A3 20
793 794
795 796
db
db
db db
I I
1
05F0 20 05F1 20
05F2 20
/
873 874
875
876
db db
db
db
1
l
I
I
1
1
05F3 20
I l
05A4 20 05A5 20
05A6 4D 05A7 4F 05A8 4E
797 798
799
800
db db
db
db
05F4 20
05F5 20
05F6 59
05F7 45
877 878
879
880
db
db
db db
,y.
05A9 54
05AA 48 05AB 20
801 802
803 804
db db
db
'N'
05F8 41
881
db
05F9 52
05FA 20 05FB 20 05FC 20 05FD 20 05FE 20 05FF 20
882
883
884
db
db db
*R'
05AC 20 05AD 20
05AE 20 05AF 20
805
806
807
808
db db db
db db
i
885 886
887 888
db
db
db
i i
db
05B0 20 05B1 20
05B2 20
809 810
811 812
db db
db db
i
0600 20 0601 20
0602 20 0603 20
889 890
891 892
db
db db
db
i
i
05B3 20
05B4 20 05B5 20
05B6 20
813 814
815
db
db
db
0604 20
893 894
db
end
05B7 20
816
db
294
0067 B40202 58
CNTRNEW PAGE 2
cjne
a, #C2h
transmit
received,
if character is 02 <STX>
$mod51
2 3
4
5 6 7
8 9
;this is a small test program for CONTROL UNIT (CU) ; sending/receiving data to/from the "LCD" module ;article written for EFY .programmer -AR Karka re ;date vritten-14 April 2002 ;uses 89c51 micro-controller with 11.059 mhz crystal
.RESERVED LOCATIONS
006A 800A
59
60
sjrrp
receive
address
00 6C 61 00 6C 1200BC 62
006F F8 0070 E6
stabilisation delay
set address
63
64
r0, a
a, @r0
retrieve data
10 0045
11
12
13
intflg bit
45h
lcall
sjrrp
receive:
send waitl
wait2: jnb
14
15 16 17
18
org sjrap
org sjmp
OOOOh
start 0023h spint
69
70 71 72
clr
mov
mov mov
intflg a, b
clear flag
get received character show on port pO LEDs save address at rO ;wait for serial port intflg, wait3
org start:
mov
007F F8
flag
0083 C245 0085 E5F0
0080 3045FD 73
74
; snod=0
0036 758920 23
24
0039 758BFD 25
rate
mov
tnod, 12Oh
;timerl ;g a t e
0 , c/t0,mode-8
mov
til, lOfdh
75 76 77 78
clr mov
clear flag
get received character
pO, a 9r0, a
waitl character
show on port pi LEDs save whatever data received back to wait for next
79
mov
mov
003C 758DFD 26
003F 759350 27
28
29
30
setb
trl
clr
setb
ea
es
31
setb
ip.4
enabled ; start tiner ; global int. off ; serial int. on .high priority to serial port
; float pin
; float pin
80 81
send:
clr mov
waitt:
clr setb ret
ea
ti, waitt
int.
004A D2B0
004C D2B1 004E C245
0099 22
32
33
34
setb
setb
rxd txd
intflg
86 87
88
disable all interrupts pull ti flag low load sbuf wait till ti flag goes high pull ti flag low enable all interrupts return
0050 7580FF 35 36
37
clr mov
pO, IDffh
;;;; 00 9A C2AF
;save
mov mov
mov
C0D0 C0E0
89 90
C3 91 8599F0 92
C298
D0E0
93 94
95 96
00AC D245
97
spint: clr push psw acc push clz c b, sbuf mov clr ri pop acc pop psw ea setb intflg setb
ea
disable all interrupts ;save status ;save accu. clear carry save received character in B clear RI bit
get back accu. get back status enable all interrupts
42
high
43 44
00AE 32
; ; ; ;
98 99
reti
received
45 46
47
48
49
50h, <04 delay of 1 nilisec. dellm: mov 51h, 183 locpa: mov 51h, loopb locpb: djnz 50h, loopa djnz
ret
755153 106
D551FD 107 D550F7 108
50h, 140 delay of 10 milisec. dellOm: mov ; 51h, 183 locpc: mov locpd: djnz 51h, lOOpd 50h, loopc djnz
ret
address
50
51
dellOOir : nov
locpe: djnz ret
lising
52
address
53 005C D2AF 005E 3045FD 54 flag
ea setb waitl : jnb
00 D2 22
delay of 1 sec.
00 DC 22
0061 C245
0063 E5F0 0065 F580
55
56 57
clr mov
mov
intflg a, b p0, a
117 113
end
Microcontroller-Based Projects
295
A.R. KARKARE
most of the electronics devices come with a liquid crystal display (LCD). Even new fridges have it. It is interesting as well as useful to know how to use LCDs with any device. Mere is how to interface a graphics LCD module with a microcontroller.
Today,
display rows. The text information is sent by the micro Fig. 1:Text Information Display controller byte by byte to the LCD module. The first byte is displayed in the left corner on the top as shown 1st BYTE 2'" BYTE | 1| in Fig. 1. The second byte is displayed to the right of the first DO D1 D2 D3 D4 05 D6 D7 DO D1 byte and so on. The last byte is the 30th byte in the row. The Line 1 PIXELS 31st byte is displayed in the second row. "Lire 2 PIXELS The graphics image is also sent by the microcontroller 1 I 31 St BYTE byte by byte to the LCD module. If a bit is set as '1' it will be displayed in dark, and a '0' bit will be displayed as a clear EXAMPLE- DATA F8H SENT ON FIRST BYTE The the the first left is corner on in byte displayed pixel. top as shown in Fig. 2. The second byte is displayed to the right of Fig. 2: Graphic Information Display
296
the first byte and so on. The last byte is the 30th byte in the line.Thus the 31st byte is displayed in the second line of pixels.
012
29
1
0-
For example, sending data 'OFH' and '03H' and command '21H' will set the cursor position to 15th column in the third line (refer Fig. 3). (Remember the computer starts counting columns from '0' to '29' and rows from 'O'to'15.') Offset register set. The lower five bits of the first data byte should be set to the upper five bits of the start ad dress for the character-generator RAM (CG-RAM) area. The second data byte should be set to '0.'
First argument
Second argument must be Offset register command
CG-RAM Address
(00H) (22H)
Address pointer set. The 'address pointer set' command is used to specify the starting address for writing data
- ADDRESS IN VRAM
CONTENTS OF VRAM
OOOOh
0001 h
area
writecommand 40H
;set text area writedata 1Eh writedata OOH
OtOOh 0101h
writecommand 41 H
0f02h
EIGHTH LINE
VRAM LOHAL
DISPLAY SCFEEN
columnl
128th LINE
Microcontroller-Based Projects
297
Internal CG-ROM
i MSB
Isb ->
3
#
4
$
5
%
7
<
9
)
a
*
c
1
0
1
2
Blank
!
1
A
Q
&
+
K
/
>
N
A
0
@
2
B
3
C
4
D
5
E
6
F
7
G
W
9
9
I
<
J
?
0
H
X
h
X
3
4
5
6
R
b
H
$
S
c
T
d
U
e
V
f
V
Y
i
y
6
Z
j
I
k
{
i'
\
1
1
m
\
P
a
q
u
h
w
Q
u
z
6
u
~
A
blank
C
E
a
6
a
0
A
/
to the
VRAM or for reading data from the VRAM. The address should be set to a location in the actual display RAM area specified by the memory map.
First argument Second argument
For example, sending data '00H' and '00H' and command '24H' sets the address pointer to start location '0000H' (shaded area in Fig. 4) in the VRAM. Text home address set (TH). This command defines the starting address in the VRAM for text display data.The data is stored in the text home (TH). It is displayed at the top left-hand character position (the home position).
First argument Second argument 'Text home address' command
Text home address (TH lower) Text home address (TH upper) (40H)
For example, sending data '00H' and 'OFH' and command '40H' sets the text home address as '0F00H' (shadedarea address location) in the VRAM area. This is shown in Fig. 4. Text area set (TA). This command defines the number of columns of text for the text area of VRAM. The
(TA) may be set independently from the number of characters per line set by hardware settings on the T6963C controller chip. Connecting the FS pin to supply ground means you have selected 8x8 font size, which will allow up to 30 characters per line. However,TA can be programmed for even less than 30, but usually it is set to the same number of characters per line as the LCD module will display.
text area
For example, for 240x128 LCD with 8x8 font size selected, setTA=lEH. Graphic home address set (GH). This command defines the starting address in the VRAM for graphics display area of VRAM (refer Fig. 4). The data stored in the graphics home (GH) address will be displayed in the first six or eight bits (without shaded area in Fig. 4) of the top line in the left-hand side of the LCD screen, depending on the font size selected. When using the attribute function, the GH address indicates the starting address for the attribute RAM area.
298
Graphic home address (GH lower) Graphic home address (GH upper)
(42H)
Graphic area set (GA). This command defines the number of columns of graphics data for the graphics area of VRAM. The graphics area (GA) may be set independently from the number of characters per line set by hardware settings onT6963C controller chip. It is usual to set the GA to the same number of characters per line as the LCD module will display.
First argument
Sccond argument 'Text area' command
Logically 'OR' of text with graphics Logically 'EXOR' of text with graphics Logically 'AND' of text with graphics Text only (with attribute data in graphics area)
(90H)
D0-
'0' means graphic 'off,' '1' means graphics 'on' '0' means text 'off,' '1' means text 'on' '0' means cursor 'off,' '1' means cursor 'on' '0' means cursor blinking 'off,' '1' means cursor blinking 'on'
299
PARTS LIST
Sem iconductors: IC1 IC2 D1-D4
This command does not require any data byte. The higher four bits (D7 through D4) of this command are always '1010,' while the lower four bits (D3 through DO) decide cursor pattern. D5
1line cursor 2 line cursor
UUKUUUMUU
- AT89S8252 microcontroller
-
- 7805 5V regulator
(AOH) (AlH)
UU<<UU<<UU<<
(A6H) (A7H)
Resistors (all V*-watt, 5% carbon): 330-ohm R1,R2 R3 - 10-kilo-ohm VR1 - 20-kilo-ohm RNW1 - 10-kilo-ohm resistor network
Capacitors:
CI C2,C3 C4 C5,C6
- lOOOpF, 25 V electrolytic
- 0.1pF ceramic disk - lOpF, 16V electrolytic - 22pF ceramic disk
This command does not require any data byte. The higher six bits (D7 through D2) of this command are always Miscellaneous: XI - 230V AC primary to 9V, '101100,' while the lower two bits (D1 and DO) decide auto advance 500mA secondary mode. transformer These single-byte commands are very useful when transferring xIAL - 12MHz crystal SI blocks of data to/from the VRAM. - On/off switch After sending a 'data auto write' (BOH) command, it is not necessary to send the data-write instruction for each data byte being written to the VRAM. The 'data auto-write' command should be sent after the 'address pointer set' command. The address pointer will automatically increment by '1' for each data written. After sending all data, the 'auto mode-reset'command (B2H or B3H) should be sent to resume normal operation. When in the 'data auto-write' mode, no commands can be accepted, as all the following bytes are assumed to be display data bytes. After sending a 'data auto-read' (B1H) command, it is not necessary to send the data-read instruction for each data byte being read from the VRAM. The 'data auto-read' command should be sent after the 'address pointer set' command. The address pointer will automatically increment by '1' for each data read. After reading all data, the 'auto mode reset'command (B2H or B3H) should be sent to resume normal operation. When in the 'data autoread' mode, no commands can be accepted.
Data Auto Write Set Data Auto Read Set Auto Mode Reset
(BOH) (B1H) (B2H or B3H)
you need not send a write or read command between each data-write or data-read. But in the case of COH and ClH commands, after every data write or data read you need to send COH or ClH for advancing the pointer.
Address Pointer Auto Incremented (ClH) Address Pointer Auto Decremented (C2H)
Screen Peeking
(EOH)
Bit Set
(F8H-FFH)
Circuit description
After having understood the basic operation of the LCD module, it is fairly simple to interface it with any microMicrocontroller-Based Projects
301
controller. Fig. 5 shows the circuit for interfac SI = ON/OFF SWITCH ing the graphics LCD D1 2 9V with the microcontroller. IC1 OUT AC 1 Atmel's AT89S8252 mi 230V 7805 3 50Hz crocontroller (IC2) is 4/ -wh 03 COM X dTK C1 used to interface the C2 1000M o.ipT LCD module. Port PO 25V D1-D4 1N4007 (Pins 39 through 32) of X1=230V AC PRIMARY TO 9V, C3 -L500mA SECONDARY TRANSFORMER 1.0m -tthe microcontroller is connected to data lines D5 RNW1 = 10KX8 DO through D7 of the 1N4148 t-L C4 v EAA/pp Vcc 10u LCD module. Port PO PO.O 16V LED2 pins are pulled high with P0.1 RST P0.2 the 10-kilo-ohm resistor P0.3 P0.4 network. This data port is PO.S used to send and receive P0.6 P0.7 R3 the data between the 1 *TAL I 10K !=! 12MHz P3.3 microcontroller and the P3.4 P3.5 LCD module. The con P3.6 20 trol lines W, R, CE, C/D C6 GND P3.7 22p and RES pins should Vcc DO D2 D3 D4 D5 D6 D7 C5 L 22p be connected to port LCD MODULE pins P3.3 through P3.7 FS of the microcontroller, -L VO VR1 = 20K Vee JvWvrespectively. EA/Vpp pin of the microcontroller is con Fig. 5:LCD interface with microcontroller nected to 5 volts to use the internal flash program memory. The power-on-reset for microcontroller IC2 is achieved through capacitor C4 and resistor R3. Diode D5 connected across capacitor C4 allows short power supply failures. A 12MHz crystal is used for internal oscillator clocks. An LED (LED2) is connected at pin PI of the microcontroller and acts as the program-running indicator. Font-select pin 19 (FS) of the LCD module is grounded to generate 8x8-character font size. Preset VR1 is used for contrast variation of the LCD. Normally 7.8V will give good contrast. VEE is a negative supply voltage output from the LCD module that outputs around -14 volts. The LCD modules have an inbuilt fluorescent tube as backlight source. This needs a special inverter that comes with the LCD module as optional. It works off 5V supply and generates 100-200V AC, which is connected to A' and 'K' terminals of the LCD module. Ifyou opted for the LED backlight module, you may not need this inverter. The 230V, 50Hz AC mains is stepped down by transformer XI to deliver a secondary output of 9V, 500 mA. Hie transformer output is rectified by a full-wave bridge rectifier comprising diodes D1 through D4, filtered by capacitor Cl and regulated by IC 7805 (ICl). Provide adequate heat-sink for 7805 as the LCD backlight draws a significant current. Capacitor C2 bypasses the ripples present in the output. LED1 acts as the power indicator. Resistors R1 and R2 act as the current limiters for LED1 and LED2, respectively. An actual-size, single-side PCB for interfacing the graphics LCD with the microcontroller is shown in Fig. 6 and its component layout in Fig. 7.
--
-i-
Software program
The software program presented here (EFY-CD) for the operation of LCD module is just an example and you have to re-develop it for your application. The software is written in ANSI C language and compiled using KEIL
302
ZOP.O
IN CD
LJ (J)
2
Q r\Q
vh?
u
Fig. 6:A single-side, actual-size PCB layout for interfacing the graphics LCD with the microcontroller
compiler. The program has enough remarks inserted on the lines so you can easily understand what the program instructions are really doing. Starting from the main line, first the ports are initialised, and then the LED blinks four times to indicate that the program and the hardware are working. Basically, the LCD module is first reset and initialised. After initialisation, the LCD module is loaded with graphics data and then with text data. The graphics data contains a scene of the Sun in the background of a tree and hills.The text inserted is 'The SUN.' A blinking cursor is also shown as an example. At the end, the 'graphic and text on' command is inserted before ending the program with an infinite wait loop. Note that no data or command should be written to the LCD module if the module is busy doing its own internal operation. As such a subroutine is inserted before every write operation to check whether the LCD module is busy or free. This is done in the 'check status' subroutine where both DO and D1bits are checked before proceeding any further.
Also note that:
l.The LCD module has a built-in CG-ROM with 128 characters possible. You can use this address to insert any text character. For example, '21H'will mean A.' 2. You can make a graphics '.bmp' file of your choice in 'paint' software on a 240xl28-pixel paper size and use FONTGEN software to convert the '.bmp' image into graphics data file as required by the LCD module. Copy the graphics data code (generated by FONTGEN software) and paste in the source program at the indicated place. For downloading the FONTGEN, visit '8052.com' . Downloadsource code: http://www.efymag.com/admin/issuepdf/Graphic%20Display.zip
Microcontroller-Based Projects
303
JUNUMON ABRAHAM
Most
of the display circuits avail-able in the market are not programmable. Here's a versatile star display that provides digital control of all the functions interactively and can be programmed for any desired display sequence. It is built around Atmel's Flash-based powerful microcontroller 89C2051.
The circuit
Fig. 1shows the circuit of programmable star display. Microcontroller 89C2051. This microcontroller is compatible with the MCS-51 family. Its pin configuration is shown in Fig. 2. The main features of the microcontroller are: 2 kB of reprogrammable Flash memory (endurance: 1000 write/erase cycles) 128 x 8-bit internal RAM Two 16-bit timers/counters
Six interrupt sources
VlN
+9V
IC1 7805
GND
Vqut_ +5V
A2
C1-
TO +12V
0.1"
C2
-y 4.7(j
10V
RST
P3 4
R6 10K
230V AC
5ohz
oM
P3.1
R5 10K
P3.0
P1.7
150C2
LED1
P1.6
10K
R2 10K
R3
10K
R4 10K
, | |_12MHz_
C3 22p
oj
P1.5
PI .4
BT136
oo
C4 22p
P1.3
P3.5
P37
B11 LAMP A2
P1.2 P1.1
+5V
INTO
|
TRIAC1 1 BT136
INT1
S2
230V AC 50Hz
Ow
P1.0
R16 10K
?N
Oo
I T11
llj
BC547
,500
LED11
304
Programmable serial UART 15 programmable I/O lines Hie microcontroller 89C2051 here uses clock frequency of 11.059 MHz. (You can also use a 12MHz or nearer-value crystal instead.) The power-on reset function is achieved by the combi nation of capacitor C2 and resistor R5. Out of the 15 I/O lines, four lines (P3.2/ INTO, P3.3/ INT1, P3.5, and P3.7) are used as input lines. Hence, only eleven lines are available as outputs lines. A 10-kilo-ohm pull-up resistor is used at each input/output pin. Each output is connected to a transistor driver circuit for driving the corresponding triac, which, in turn, switches the mains supply to the light load (up to 400 watt load can be safely switched through triac BT136). Four external controls have been provided via pushbutton switches Si through S4. These switches are labeled as Increment (+), Decrement (-), Effects, and Page, respectively. INT1 and INTO respond to Increment (+) and Decrement (-) switches respectively, while input pins P3.7 and P3.5 respond to Effects and Page switches, respectively.
PDIP/SOIC
RSTA/PP
20
(RXD) P3.0
(TXD) P3.1
XTAL2
XTAL1
(INTO) P3.2
(INT 1) P3.3
(TO) P3.4
C C C C C
C E C
2
3
4
to Q
19
18
17
5
6
7
8
CM
16
<
15
14
13
(T1) P3.5
GND
9
10
12
11
H vcc H P1.7 1P1.6 H P1.5 H P1.4 H P1.3 "2 P1.2 H P1.1 (AIN1) H P1.0 (AIN0) H P3.7
Construction
An actual-size, single-side PCB for the circuit is shown in Fig. 3 with its component layout in Fig. 4. However, this programmable star display circuit can also be assembled on any general-purpose PCB. The microcontroller should be fixed in an IC socket and the regulator IC should be provided with a heat-sink. For triacs a heat-sink is necessary when the connected load per triac exceeds 60 watt. Caution. Since switching is accomplished by triacs, don't touch the circuit parts while AC supply is plugged in. Further ensure that Live and Neutral lines are not interchanged
Operating procedure
1. Pushswitches Si (+) and S2 (-) are used for incrementing and dec rementing, respectively, the speed of the display (while pushswitches S3 and S4 are held in open condition). 2. Different display sequences that are stored in different pages of the memory beforehand are accessed by holding Page button down and using (+) and (-) buttons for incrementing and decrementing the page numbers. 3. Different lighting effects are invoked by holding Effects button down and using (+) or (-) buttons for changing the effects. The avail able effects are blink and reverse. Reverse complements the current output states, i.e. 'on' state bulbs will be off, and vice versa. 4. For interrupting (stopping) the output sequence, hold both Ef fects and Page buttons down and use (+) or (-) buttons.
PARTS LIST
conductors: Sem i
- 7805 5V regulator IC1 - AT89C2051 microcontroller IC2 Tl-Tll - BC547 npn transistors LED1-LED11 - LED TR1-TR11 - BT136 triac
Resistors (all 'A-watt, 5% carbon, unless stated otherwise): R1-R16 - 10-kilo-ohm - 150-ohm R17-R27
Capacitors:
CI C2
0.1|iF ceramic disk 4. 7pF, 10V electrolytic - 22pF ceramic disk
The firmware
The source code for the programmable star display circuit, along with suitable comments, is given at the end of this article. The output sequences are obtained from a look-up table (LUT). Each entry is output one by one with some specified delay in between the consecuMicrocontroller-Based Projects
C3.C4
Miscellaneous: Bl-Bll
S1-S4
J1
XTAL
60W bulb/lamp Tactile switch 20-pin ZIF socket - 11,059MHz crystal oscillator
305
tive outputs. This delay can be externally controlled by pushbuttons (+) and (-) or by the commands in the look up table. Pushbuttons (+) and (-) invoke the interrupt service subroutines corresponding to INTl and INTO,
respectively. The commands for display sequences are stored in different pages of the memory. Each page can be accessed by holding Page button down and using either (+) or (-) button. The look-up table for setting up a versatile display is prepared as follows: A total of nine commands are used. All commands are 16-bit wide. Thus two memory locations are needed per command. Out of 16 bits, the three most significant bits (MSBs) are used for Opcode and the remaining 13 bits are used for storing the variables for that Opcode. The general format of commands is shown in Table I,while the bit mapping of each command, along with a brief explanation, is shown in Table II.For understanding their usage you may keep one of the four
TABLE I
D14
C2
D13
D12
011
VII
D10 V10
D9 V9
D8 V8
D7
V7
D6 V6
D5 V5
D4 V4
D3
V3
-i
D2 D1
V2
DO VO
C3
ci
CO
V1
TABLE II
Output States
D15
D14
D13
D12
D11
D10
Q10
D9
D8
D7
D6
D5
D4
Q4
D3
D2
D1
DO
Q9
CD CO
Q7
Q6
Q5
Q3
02
Q1
QO
Blink
D15
D14
0
D13
D12
1
D11
010
D9
D8
X
D7
X
D6
X
D5
X
TD4
X
D3
X
D2
X
D1
X
DO
B
0
X"
Speed
D15
0
D14
0
D13
1
D12
0
D11
D10
D9
D8
X
D7
S7
D6
S6
05
S5
D4
S4
D3
S3
D2
S2
D1
SI
DO
SO
Delay
D15
0
D14
0
D13
1
D12
1
D11
D10
D9
D8
X
D7
W7
D6 W6
D5
W5
D4
W4
D3
W3
D2
W2
D1
W1
DO
WO
W7 - WO=De!ay units
Label
D15
0
D14
1
D13
0
D12
0
D11
X
010
X
D9
X
Ooo
X
D7
17
D6
L6
D5
L5
D4
L4
D3
L3
D2
L2
01
L1
DO
LO
L 7 - L0=Label
306
TABLE III
Loop
015
014
D13
D12
011
D10
D9
08
D7
D6
D5
04
D3
02
D1
DO
N3
N2
N1
NO
L7
16
L5
L4
L3
L2
LI
LO
N3 - NO- The number oftimes the loop should execute L7 - LO=Labelindicating the end ofthe block
Call
D15
D14 1
D13
1
012
D11
D10
X
D9
D8
X
D7
D6
D5
D4
D3
D2
01
DO
L7
L6
L5
L4
L3
L2
LI
LO
Return
015
0
D14
1
D13
1
012
1
011
D10
X
09
X
D8
X
D7
X
D6
X
D5
X
D4
X
D3
X
D2
X
01
X
DO
X
Reset
D15
1 D14
1
D13
1
D12
1
D11
X
D10
X
D9
X
D8
X
D7
X
D6
X
05
X
D4
X
D3
X
D2
X
01
X
DO
X
pages of the look-up tables (towards the end of Assembly level program) in front of you. Output states. This command specifies the states at the eleven outputs. Bits indicated in this command corre spond to the outputs indicated in the schematic diagram of Fig. 2. For any output to be active, the corresponding bits in the output should be logic 1. Each output state is to be listed one by one. Blink. Using this command the blinking effect can be enabled or disabled. Speed. Using this command it is possible to change the speed in the sequence coding itself. Delay. It inserts a specified delay between consecutive output states. (Here the delay per unit is 100 ms.) Label. This command specifies a label for Loop command. It doesn't make any changes to the outputs, but
command for Loop. This command is used to execute a block of display (output) states for a specified number of times. The Loop. end of the loop is specified by the label (L7-L0). When Loop command is executed, the statements following this command are executed up to the label specified in the command, for N (N3-N0) times. This command reduces the burden of writing repeated commands. Call. This command calls a subroutine. Return. This command returns the control to the main program from where it was called. Reset. This command resets the execution point to the beginning of the page. The coding of commands to get a display sequence is shown as a look-up table in the Assembly listing itself. This Assembly program allows a maximum of five nestings for Loop and Call commands. Here, four pages of display are listed. One can go up to ten pages by specifying the total number of pages against NOOFPAGE in the constant declarations in the Assembly language listing (NOOFPAGE EQU; the total number of pages you have).
acts as an associated
307
The program listing starts with SMOD52, which is an assembler control that recognises predefined special function register symbols in the source program. This saves the user from having to define all the registers in the source program. SNOMOD disables the recognising function. This control accesses files of the same name that are included with the MetaLink 805 1cross-assembler distribution diskette.When a $MOD control is used in a source program, it is important that the specific $MOD file be available to the cross-assembler. (Note. This file, along with cross-assembler and its manual, will be included in the next month's EFY-CD.) The source program STAR.ASM has been compiled using ASM5 1 cross-assembler. On running the ASM51.EXE, you are asked to enter the source drive where the .ASM file is located and also the name of the source file. After giving the names of the appropriate drive and the source file, press 'enter' to start compilation. The result of the compiled program is shown as Assembly Complete, 0 Errors Found' after all errors are successfully resolved. Now, close this screen and go to the directory of the source file. You will observe that two new files are created: STAR.HEX and STAR.LST. The file STAR.HEX is generated by the assembler program and contains the program code in Intel's hex format. Similarly, the file STAR.LST is generated by the assembler program for documenta tion purposes. It contains memory locations, hex code, mnemonics, and
comments
(descriptions).
{Note. The program can be simulated by run ning a suitable software simulator program, for example, SIM31 by SPJ Systems, Pune.) The programming of AT89C205 1 was done at EFY using the Topview programmer from Front line Electronics, Salem, Tamil Nadu. This device programmer is reason ably priced and can be used to program all the Atmel's 89CXXX family devices using the stand ard PC. The program ming starts by loading the Intel hex/binary files into the device program
mer interactively.
t
i
Once the instal lation is done, select Atmel Flash program mer' and then click on 'ok'. Select 'load file/ F1as h buffer' fr om 'file' menu. Load the STAR.HEX file into
308
13>OOS
(VI 01
s+
jj
it. Once the file is load ed, follow the instruc tions given in the user's manual or 'help' menu. From 'device' menu, se lect Selection/89C2051/
J~) ss
:
O <L
PC.)
LO
_d
(NJ
Q <n
cn
Before programming, check and verify the loaded program with the help of STAR.LST file to ensure that the correct hex code has been loaded into the buffer. After verification, choose the auto-programming mode from 'settings' menu to program the microcon troller chip.
Download Source Code: http://efymag.com/
<1. Lu
9 ffti dw
DB dy JMB'"na
DOB
o
$Mod52
f
sai
vai
_c9i_
gai
bMm3
o o
,-juyi
Versatile_Star_DisplayNov02.zip
iai
o
12h 13h
14h
STAR.ASM
Star.Asm: Assembly Level Listing TIMES
TEMP_SP
.******** CONSTANT
EQU EQU EQU
PAGE
DECLARATIONS***"****
TEMP_P1 TEMP_P3
STATUS
15h
20h
08h
E0U
BIT BIT BIT
OBh
OCh ODh OEh
EQU LABELREG EQU STA_DPH EQU STA_DPL EQU END DPH EQU END DPL EQU
OBh OCh
ODh OEh
Microcontroller-Based Projects
309
lOh BLINKREG BIT 04h NOOFPAGE EQU /number of pages using, this may change as your wish 03h EQU SP_MIN
SP, #24h
;ini-
SP_MAX
EQU
40h
FOLLOW41 :SETB
JNB LCALL JNB LJMP
PLUS
KEY_READ
MINUS:
DEBOUNCE P3 3, FOLLOW42
. .
PLUS
JNB LJMP
/selecting the page address R0, PAGE MOV R0, #01 , NEXTPG1 CJNE MOV DPTR, # PAGE 1 SJMP NEXT1 NEXTPG1 : CJNE R0, #02 NEXTPG2 DPTR, # PAGE2 MOV SJMP NEXT1 R0, #03 NEXTPG3 NEXTPG2 : CJNE MOV DPTR,# PAGE 3 SJMP NEXT1 NEXTPG3 : CJNE R0, #04 NEXTPG4 MOV DPTR,# PAGE 4 SJMP NEXT1 NEXTPG4 : CJNE R0, #05 NEXTPG5 DPTR, # PAGE 5 MOV SJMP NEXT1 NEXTPG5 : CJNE R0, #06 , NEXTPG6 MOV DPTR,# PAGE 6 NEXT1 SJMP NEXTPG6 : CJNE R0, #07 NEXTPG7 DPTR,# PAGE 7 MOV NEXT1 SJMP R0, #08 NEXTPG8 NEXTPG7 : CJNE DPTR,# PAGE 8 MOV NEXT1 SJMP NEXTPG8 : CJNE R0, #09 ,NEXTPG9 DPTR, # PAGE 9 MOV NEXT1 SJMP NEXTPG9 : MOV DPTR, # PAGE 10 /execute the commands in the page
NEXT1 :
KEY_READ
CONTACT DEBOUNCE DELAY**** ** * *
.********SWITCH
DEBOUNCE : MOV LOOPP2 : MOV
DJNZ DJNZ
;********F0R LOOP1
********
FORLOOP1
PUSH PUSH PUSH PUSH
PUSH
RET
HERE********
LCALL
/initialisations
SPEEDREG, #11 SPEED1, #11 TEMP_SP, #00 P3,#0FFh
REVERSE
JNB
default speed
SJMP
EXIT1
LOOPING
POP
FOLLOW2O : LCALL
EXIT1 :
TIMES
initially
no
POP POP
STA_DPH
edge trigger-
INT1
LOOPING:
MAIN:
CLR CLR
BLINKREG STOP
UP1 :
310
INC
MOV CJNE
MOV
DPTR A, DPH
A,END_DPH,UP1
A, DPL A, END_DPL, UP1
TIMES, LOOPING
DPTR
DPH
DPL
RET
;********FINDING XHE label******** /returns loop count (number of times the loop should execute) in TIMES
;returns starting
PUSH
PUSH
PUSH
STA_DPL
;returns ending address of
PUSH PUSH
CLR MOVC
TEMP_SP
STATUS
A
END_DPL ; ERROR bit will set on error ;LOOP COUNT equals zero (obtained from the command)
;and zero loop size are considered to be error
MOV
A, 0A+DPTR LABELREG, A
FINDLABL :DEC
DPL
/finding the subroutine block DPTR, #PAGE1 MOV ERROR CLR LCALL CALL_LB ERROR, FOLLOW27 JNB SJMP EXIT2
CJNE SJMP
UP1A:
DCWN3 : MOV TIMES, A ting the loop count (number of /times the loop should execute) INC DPTR
CLR
; get
MOVC
ANL CJNE SJMP
A A, 0A+DPTR LABELREG, A DPTR MOV STA_DPH, DPH ting the starting address of the loop MOV STA_DPL, DPL SETB ERROR AGAIN2 : A CALL_LB : CLR
CLR MOVC MOV INC
MOVC ANL
COMMON
DPTR UP1A
;get-
STATUS TEMP_SP
TIMES
CJNE
MOV
END_DPH, DPH
ting the ending address of the loop MOV END_DPL, DPL INC DPTR A CLR MOVC A, 0A+DPTR A, LABELREG, DOWN2 A CJNE
RET
POP MOV
ADD MOV
RET
DCWN2 : DOWN2 A :
INC
DPTR
;********DELAY ROUTINE*******'
INC
DPTR
CLR MOV
CJNE
ERROR1 :
RET
SETB
states ac cording to the speed ;set either by command or external control ;if Blink effect is active (either by commands or
.********CALL
external control) do blinking ;if stop action is done by external control wait in this routine itself
SUBROUTINE********
/execute the commands in the subroutine ;first it has to save the current informations that are all
DELAY1SE:
CLR MOV STATE COUNT2
, S PEE DREG
Microcontroller-Based Projects
311
FOLLOW26: MOV
L00P2 :
MOV MOV
C, ACC 0
ORL
P3 0, C C, ACC 1 P3.1,C
. C, ACC .2
P3.4,C
DPTR
A
TEMP_P3, A
CLR
MOVC
P3.1 P3.4
LOO PI
PI TEMP_ Pi C, TEMP3_0 P3 0, C
A PI, A
TEMP_P1, A
DELAY 1SE
. .
C,TEMP3_1
P3 .1,C C, TEMP3_2 P3 4, C
MOV
MOV
MOV MOV
LOOPI :
0F7h DJNZ DJNZ
DPTR
COUNT 1, $
COUNT, LOOP1
MOV
; re
. .
A, #10h, NEXT11
MOV MOV
JB RET
RET
NEXT11:
CLR
. ********COMMON
CJNE
A
A, #30h, NEXT12
IF
A, 0A+DPTR; GETTING
THE
EVEN POSITION LOOKUP DATA A,#CF0h ANL CJNE A, #00, DECIDE THE FIRST 4 BITS ARE NOT ZERO, THEN IT ;INDICATES A SPECIAL COMMAND
CLR MOVC
A
RET MOV
COUNT1,#1SO
COUNT, #0FFh COUNT, $
; IF
A, 0A+DPTR ;OUTPUT
THE
NF.XT12:
LJMP
TO THE PORTS
; IF THE REVERSE IS ENABLED (BY THE EXTERNAL /CONTROL)
LCALL RET
FORLOOP1
NEXT14A: CJNE
REVERSE, FOLLOW2 6 A
JNB CPL
312
RET
DEC
RET
MOV CLR CLR
R0
@R0,DPL
NEXT14 :
IE0 IE1
;******* *READING KEY DATA******** ;this routine read the state of 'Effect* & 'Page' button /accordingly activate/deactivate different effects ;and change sorre parameters (such as speed, page
etc ) ;in response to the strocks of Increment and Decre
RETI
NEXT4A :
JB CPL
SJMP
PLUS, ALT5
STOP
RELEASE
ALT5 :
RELEASE : RETI
CPL
STOP
ment button ;if both 'Effect' & ' Page ' buttons are open ,then speed will change in response to (+)&(-) button ;if only 'Page' button is pressed down then, page changes in response to (+)&(-) buttons ;if only 'Effect' button is pressed down then, dif ferent effects (Blink&Reverse) can be activate/deac tivate by ( + )&(-) buttons ;if both ' Effect '&' Page ' buttons are pressed down then, you can interrupt (stop) the display output se
L00KUP TABLE******** lookup table following points should be noted ;you can have maximum of 10 pages (the size of the pages are limited by the memory capacity (2KB) of
.******
89C2051)
;you have to specify the total number of pages that you are using ? in the initial constant declaration, ie NOOFPAGE ?? (number of pages you are using) EQU /maximum of 5 nesting is allowed for CALL & LOOP commands ;you can have any number of CALL& LOOP commands in a page ;all commands are 16-bit long ;the labels for CALL & LOOP commands should not be same ;don't use same labels multiple times (even in dif ferent pages also) ;output status (speed&blink) will be automatically preserved when using a CALL command ;before proceeding you have to reffer the syntax of all the commands
quence
KEY READ:
MOV ANL
A, P3 A, #0A0h A, #0A0h, NEXT3
CJNE
SPEED1
MOV
A, TEMP_SP
T0P5 :
CJNE JC
RELEASE
A NORMAL PAGE
01010C11B, 00000001B
UP TO LABEL 1
00000100b, 00000000b
OOOOOCIOB, 00000000b
OOOOOCOIB, OOOOOOOOB OOOOOCOOB, 1000000CB OOOOOCOOb, 01000000b OOOOOCOOb, 00100000b OOOOOCOOb, 00010000b OOOOOCOOb, 00001000b
;DIS-
SPEEDl
TOP5
A, #20h, NEXT4 PLUS, ALT 1
GBLBLINK
PLAY DATA DB DB
DB DB DB
DB
CJNE
JB CPL SJMP
RELEASE
ALT1 :
SJMP
CPL
REVERSE
RELEASE
A, #8 Oh, NEXT 4 A A, PAGE PLUS, ALT2 A, #01, ALT3
NEXT4 :
CJNE
MOV JB CJNE
DB DB DB DB DB
1
; LABEL
;LOOP
SJMP
ALT3 :
SJMP
DEC
DB
DB DB DB
DB
DB
ALT2:
A, #NOOFPAGE, ALT 4 SJMP
CJNE
RELEASE
DB
ALT4 : DCWN40 :
INC
MOV MOV MOV
PAGE
R0,SP
DPTR, #MAIN 0RO, DPH
DB DB DB DB
OOOOOCOOb, 00000001b OOOOOCOOb, 00000010b OOOOOCOOB, 0000010CB OOOOOCOOB, 0000100CB OOOOOCOOB, 0001000CB OOOOOCOOb, 00100000b OOOOOCOOb, 01000000b OOOOOCOOb, 10000000b
Microcontroller-Based Projects
313
DB
OlOOOOOOB, 00000010B
;IABEL
; LOOP
DB
DB DE
2
01010100B, 00000011B DB 4 TIMES THE BLOCK UP TO LABEL 3 00000100b, OOOOOOOOb DB PLAY DATA 00000110B, OOOOOOOOB DB 00000111B, OOOOOOOOB DB 00000111B, 10000000B DB 00000111b, 11000000b DB 00000111b, 11100000b DB 00000111b, 11110000b DB 00000111b, 11111000b DB 00000111b, 11111100b DB 00000111b, 11111110b DB 00000111b, 11111111b DB OlOOOOOOB, 0000001IB DB 3
01010010B, 00000100B 2 TIMES THE BLOCK UP TO LABEL 4
DB
/LABEL
5
;DIS-
/LOOP
/SEEED
/
00100000B, 0001010 OB
00010000b, OOOOOOOOB
N 0
DB
00000100b, 00000001b
/DIS-
PLAY DATA
DB
DB
;IABEL
DB DB
DB
DB
00000010B, 0000001OB OOOOOOOIB, OOOOOIOOB OOOOOOOOB, 10001000B OOOOOOOOb, 01010000b OOOOOOOOb, 00100000b OlOOOOOOB, 00000110B
/ LABEL
; LOOP
DB PLAY DATA
DB
DB
00000100b, 00000001b
00000010B, 00000010B OOOOOOOIB, OOOOOIOOB OOOOOOOOB, 10001000B
; DIS-
/ RE-
******* * PAGE-3
DISPLAY DATA********
DB
DB DB DB
DB
;IABEL
00100000B, OOOOOOOOB
00010000b, OOOOOOOOB
;SEEED
IS 0
4
DB 11110000b, OOOOOOOOb SET, STARTS FROM 3EGINNING
; RE
DB
;N 0
/ LOOP
BLINK
***..**pAGE_2
; SPEED ;N 0
;DIS-
01010011B,00000111B DB 3 TIMES THE BLOCK UP TO LABEL 7 01010010B, 0000100 OB DB 2 TIMES THE BLOCK UP TO LABEL 8 00000100b, OOOOOOOOb DB DB 00000110B, OOOOOOOOB DB 00000111B, OOOOOOOOB 00000111B, 10000000B DB DB 00000111B, 11000000B 00000111B, 11100000B DB 00000111B, 1111000OB DB
/LOOP
DB
DB DB DB DB
DB
00000111B,11111000B
00000111B, 11111100B 00000111B, 1111111OB 00000111B, 11111111B 00000111b, 11111111B 00000111B, 1111111OB 00000111B,11111100B 0 00 00111B, 1111100OB 00000111B, 11110000B 00000111B, 1110000 OB 00000111B, 11000000B 00000111B, 10000000B 00000111B, OOOOOOOOB 00000110B, OOOOOOOOB OOOOOIOOB, OOOOOOOOB OOOOOOOOB, OOOOOOOOB OlOOOOOOB, 00001000B
00010000b, OOOOOOOIB OlOOOOOOB, 00000111B
DB PLAY DATA DB
DB
DB DB DB DB DB DB
DB
DB DB DB DB DB
DB DB DB
DB
DB
DB
PLAY DATA
DB DB DB
; BLINK ; DIS-
DB DB DB
8
DB DB
/LABEL
/BLINK
; LABEL
DB
DB DB DB DB
;RESET, STARTS
314
DB PLAY DATA DB
00000100b, 00000000b
00000110B, OOOOOOOOB 00000111B, OOOOOOOOB 00000111B, 10000000B 00000111b, 11000000b 00000111b, 11100000b 00000111b, 11110000b
;DIS-
PAGE 4 :
DB
00100000B, OOOOOOOOB
; SPEED
; Ca 1 1
DB
IS 0
01100000B, 00001001B subroutine with label 9 00100000B, 00110000B DB IS 48 01100000B, 00001010B DB D subroutine with label 10 00100000B,00010000B SPEED IS 16 DB 00110000B, 01100000B (96D [ 01100000B] xlOOASec = 9. 6Sec) 00010000b, 00000001B DB 01100000B, 00001001B DB subroutine with label 9 11110000b, 00000000b DB STARTS FROM BEGINNING
DB
DB DB
; SPEED ;Call
B
; DELAY
DB DB DB DB
DB DB
DB
11
; BLINK ; Cal 1
/
DB
01110000B, OOOOOOOOB
DISPLAY DATA ********
;Itetum
********* PAGE- 5
;RESET,
PAGE5:
WARDS
;Sub-
01000000B, 00001001B DB routine with label 9 00000100b, 00000001b DB PLAY DATA 00000010B, 00000010B DB 00000001B, 00000100B DB OOOOOOOOB, 10001000B DB DB 00000000b, 01010000b DB 00000000b, 00100000b 01110000B, OOOOOOOOB DB 01000000B, 00001010B DB routine with Label 10 DB 01010100B, 00001011B
4 TIMES THE BLOCK UP TO LABEL11
;DIS-
********* PAGE- 6
PAGE 6:
DISPLAY DATA
PAGE8 :
;LOOP
END
Microcontroller-Based Projects
315
Li
ICl
- AT89C5 1 microcontroller
IC2.IC3
IC4 T1-T16 D1-D4 DIS1-DIS16
Circuit description
Fig. 1 shows the circuit of the microcontroller-based movingmessage display. It comprises microcontroller AT89C51, threeto-eight decoder 74LS138, common anode alphanumeric displays, regulator 7805 and a few discrete components. At the heart of the moving-message display is Atmel AT89C51 microcontroller (ICl). It is a low-power, high-perfor mance, 8-bit microcontroller with 4 kB of flash programmable and erasable read-only memory (PEROM) used as on-chip program memory, 128 bytes of RAM used as internal data memory, 32 individually programmable input/output (I/O) lines divided into four 8-bit ports, two 16-bit programmable timers/counters, a five-vector two-level interrupt architecture, on-chip oscillator and clock circuitry. Ports P0 and P2 of the microcontroller have been configured to act as a common data bus for all the 16 alphanumeric displays whose corresponding data pins have been tied together to make a common 16-bit data bus. Port-2 provides the higher byte of data, while port-0 provides the lower one to light up a character on the display. Port pins P1.2-P1.4 and P1.5-P1.7 of the microcon troller have been used as address inputs for decoder IC3 and IC4 (74LS138) to enable one of the fourteen alphanumeric displays (DIS3 through DIS16) at a time, respectively. However, displays
AT89C51-Based Moving-Message Display
LED1
- 5mm LED
Resistors (all 'A-walt, 5% carbon): R1-R16 - 2.2-kilo-ohm R17-R32 120-ohm R33-R37 - 10-kilo-ohm
R38
- 220-ohm
Capacitors:
C1.C2
C3 C4 C5 C6
Miscellaneous:
- 33pF ceramic disk - 2200|iF, 25V electrolytic - lpF, 16V electrolytic - lOpF, 16V electrolytic - O.ljiF ceramic disk
XI
X.
S0-S3 S4
316
d5
lj
afloi*
ggi _
1 kil
ijtf
c E _ c
re re
1 II 1 II
S UOIQC
I\wv(M
r-
.9 C
o
<0
5 O
l
O
-vwvf-
S5ooo9ije_c E
__
qj
m m
IV/VV
-1
*dsia oi
sdsia oi
9dsia oi nw cm
: : I
t ! i t
s : :
i i
c E_
-Z%
-yHr I
AWr
zdsia oi
8dsia oi
vwv- -
ilgi
o5uoido_c E _ r:
re
i idsia oi
zidsiaoi
CO
CM
CO
co
'<I5|
o5 u ctq Due _cE _
c
e idsia oi
re re
CM
e idsia oi
o<2 *T
J~
h- n
Wvv
|il>i
85uoo_c E
COiniAClANf
eciiai
co r.
Qr
Iv2vs
MJ
isrooooro
(*30i-orvtoin*rcr)CM
SSS
gNCiT'jnN'-wngiflUNmoi cMNCvcvjcMPJCMCoricocococortc*)
tiHh
8S
y2 CO
..O
tt)
lO
'f
<
-vwv9ea
-VWW-
9L'b
-vww
-WAV-
w:a
W/v
v
eca
S a
ic
II B 5 11 N l II CO ?fS;9
<=
noon
i i i i
ii
Q.
OC OC OC H O
fc
3 5: a
>
Hi"
317
Microcontroller-Based Projects
1 | I
I
a1
32
i
h
f
All the corresponding data pins Disl through DIS16 of alphanu meric displays have been tied together, while the common anode of each c I display is separately powered via a BC5S8 transistor which switches 'on' I 171 dp | or off' as required, through outputs of 74LS138 ICs and pins P1.0 and 1 " Pl.l of ICl.The higher nibble of port P3 (P3.4 through P3.7) is used as com | 1 e selection bus to select one of the 16 previously stored messages using a 62 | 10 1 d1 9 the 4-bit binary value present on these pins.This value can be changed through a 4-pin DIP switch (SO through S3). of 2: Pin display configuration alphanumeric Fig. Selection pins P3.4 through P3.7 are pulled high via resistors R36 through R33, respectively. When the switch connected to a given pin is open the value is high (1), and when it is closed the pin is held low and the value becomes '0.' In this way, by using a 4-bit number you can select any of the 16 messages shown in the Table. Capacitor C5 and resistor R37 form the power-'on' reset circuit, while a push-to-connect switch has been used for manual reset. An 11.0592MHz crystal generates the basic clock frequency for the microcontroller. To change the message being displayed while the circuit is working, first change the number present at the selection
Iwf : f/lSf
i
I
I 92 |
I
DIS1 and DIS2 are enabled or disabled directly by port pins P1.0 and Pl.l. Pins 4 and 5 are grounded and pin 6 is made high to enable de coder 74LS138. Fig. 2 shows the pin configuration of the common-anode alphanu
meric display.
bus, then press 'reset' key. The 220V AC mains is stepped down by transformer XI to deliver the secondary output of 9V, 500 mA.The output of the transformer is rectified by a full-wave bridge rectifier comprising diodes D1 through D4, filtered by capacitor C3 and then regulated by IC 7805 (IC4). Capacitor C4 bypasses any ripple present in the regulated power supply. LED1 acts as the power-'on' indicator.
Construction
Fig. 3 shows an actual-size, single-side PCB layout for the microcontroller-based moving-message display circuit, except displays DIS1 through DIS16, transistors Tl through T16 and resistors R17 through R32. Component layout for this PCB is shown in Fig. 4. Fig. 5 shows the PCB for displays DIS1 through DIS8, transistors Tl through T8 and resistors R17 through R24. Component layout for this PCB is shown in Fig. 6. You need to use an additional PCB as shown in Fig. 5 for DIS9 through DIS16, so as to configure 16 alphanumeric displays. For this PCB, the corresponding components will be transistors T9 through T16 and resistors R25 through R32 in addition to displays DIS9 through DIS16. Corresponding connector are provided to make a proper connection. Connectors CON2, CON4 and CON6 of Fig. 3 are connected to CON2, CON4 and CON6 of Fig. 5, respectively, through external wires to interface DISl through DIS9. Connectors CON3, CON5 and CON7 of Fig. 3 are connected to CON2, CON4 and CON6 of Fig. 5, respectively, through external cable to interface DIS9 through DIS16.
Message selected
0000
000 1 001 0
001 1 0100
0101
0 110
Merry Christmas
"Happy Holi*
*Eid Mubarak*
Happy Dashehra
0111
1 000
Happy Wedding
Happy Janmashtmi
*Happy Rakhi*
1 001
1010
1011
"Happy Pongal*
Happy Mothers Day
1100
1101
1110
*Happy Ramjan*
1111
Welcome to All
318
for the switching gap between two consecutive displays. Thus, each display is enabled for 1 ms while displaying a message. The length of this cycle depends upon the length of the message string. The cycle repeats after a '0' is encountered at the end of each message stored in the look-up table at the end of the program. Each time, to display a character at a given display, first two bytes (16 bits) of data are sent to Port-2 and Port-0, then the desired display is enabled by sending its address to Port1. Thereafter, a delay of 1 ms (slighdy more than that) is gen erated by timer 1. Upon timer overflow, the entire display Fig. 3:Actual-size, single-side PCB for the microcontroller-based moving-message display circuit, panel is refreshed by passing except alphanumeric display andassociated components 'FFFFH' to the data bus. Then the next character at the next display is passed in the similar manner. The cycle frequency is variable (depending upon C0N4 C0N6 the length of the message) but always high enough so that the message appears continuous to the human eye. Timer 0, with its interrupt a9 3303 3 3900000000033 < enabled, is used to change the XTALR3' starting address of the message (o o)' J1-J3 = JUMPER UIRE in cyclic manner so that the 11. 0592MHz characters scroll from left to right with a proper gap between each shift. Meanwhile, the in 74LS138 74LS138 terrupt service sub-routine also R1 -R16=2. 2K for the starting address checks R33-R36=10K T1-T16=BC558 of DIS16 (right-most display). POWER R38 220E As the first character as soon D1-C4=1N4007 reaches DIS16, the message C0N2 stays for a longer time so that EFV/SUNIL/-M_M_0ISP.'APRIL-09 the entire message (message Fig. 4: Component layout for the PCB shown in Fig. 3 length not longer than 16 characters) can be easily read. Thereafter, characters again start scrolling rightwards, so the entire message goes out and disappears after a while to reappear from left side. All the messages are stored in the form of a look-up table in the program memory (ROM) itself. When the circuit is switched 'on (or reset), the monitoring program first checks for the binary number present at the selection
Microcontroller-Based Projects
319
o
.
r2
~
s
OOOOOOCOE
0 0 0
1
-
H23
0 0 0
oao
R22.
3 8
088
o o 8 8 8
w
>
I I
*6
I
NjO
R2l
3
0 8 8
<_
8 8 8
OvwO
020
8 8 8
8 8 8
"a M
E rs
&
O U1
N>
R19
C 8 8
0 8 8
R18
i
c
C5
c a
.o.
c
<-.
3
O
088
o a. <b "9
O)
n
73
7J
0 8 8
R?7_
8 8 8
.N
p.
0 88 000 8 00
g
G U
OS
o*
'!!' ? 5 ? ? z O
O
U)
0\ OINI
a:
cn
bus and according to that, the ROM address of the starting character of the selected message is loaded into the data-pointer. Thereafter, on-chip ROM reading is used to read the entire message over there. Note that each character is represented in the look-up table of the source code by two bytes. For example, 'S'is represented by 'Sh' and 'SI' separated by a comma. In addition to the alphabets, Arabic numerals and a few special characters have been defined in the program. For instance, a blank space is represented by 'bsh, bsl.'Thus, it is very easy to modify the program. Suppose you want to display "HOUSE NO 401-H" in place of message '0.' First, open the source code in the
320
AT89C51-Based Moving-Message Display
editor. Delete the old string and write the new string as below:
msgO: db Hh, HI, Oh, Ol, Uh, Ul, Sh,
Future enhancements
Many more messages would be possible if complete Port-3 is used for message selection. Pins RxD,TxD, INTO and INTl have been kept free, so that these can be used for interfacing with the serial port of the PC. Also, in terrupt pins can be used to display some message and sound an alarm in the case of an emergency. For example, a fire sensor can be connected to 'INTO' and a vibration detector to 'INTl.'These pins can also be used to send signals to synchronise a similar system that displays another related message at the same time, so a 16-character, two-line display is made possible. Download Source Code: http://www.efymag.com/admin/issuepdf/Microcontroller-Based%20Message%20 Display%20System.zip
MOVMSG.ASM
$mod51
equ p2 ; Higher byte of DBH Data Bus DBL equ pO ; Lower byte of Data Bus adb equ pi ; Address Bus input equ p3 ; message select
nir.eh ninel
equ 03h
equ 0f8h
for
input
;** codes for decimal digits are given below: ; ( 'h' refers to higher byte, '1' to lower one)
zeroh zerol
equ 17h equ 0e8h equ Od7h equ Offh
oneh onel
twoh twol
fourh fourl
fiveh fivel
G1 equ 0e8h
Hh equ 0c3h HI equ Oebh
sixh sixl
equ Oe8h
XI equ 77h
Microcontroller-Based Projects
321
shift
Yh equ 0e3h Y1 equ Obbh
mov r6,#10
,-
mov r0,#60h blank mov @r0,#0ffh /initialize the pointed lccation by null address dec rO cjne rO , #2fh, blank mov rl,#41h /load address-pointer with
initial address
strh
strl
pish plsl
equ 17h
equ Oebh ;for '+' sign equ 9fh equ Oebh ;minus sign equ Of fh
equ 3fh ;underscore sign equ Of fh
mov (rightmost)
50h,#0dfh
/address
for
16th Display
mnsh mnsl
h
_1
bsh bsl
equ Of fh ;blank space equ Of fh equ Oeah ;for pie equ 7fh
mov 4eh,#9fh mov 4dh, J7fh mov 4ch, #5fh mov 4bh, #3fh mov 4ah,llfh mov 49h,#0fbh mov 48h,H0f7h mov 47h,#0f3h mov 46h,#0efh
mov 45h,#0ebh mov 44h, #0e7h
/address for 9th Display /address for 8th Display /address for 7th Display
Display Display Display Display
pieh piel
raueh muel
/address for 6th /address for 5th /address for 4th mov 43h,#0e3h /address for 3rd mov 42h, #0 f dh /address for 2nd mov 41h,#0feh /address for
(leftmost)
chk:
at P3
mov a, input
dress
mov tlO , #C0h mov th0,#D0h
count
get se-
clr trO
cjne a,#0ffh,chk0 mov dptr, #default /load dptr with starting address of defalt message sjmp read / now start reading
djnz rl,al mov r7 ,#46 cjne rl,#60h, a5 .check to again start entering from left-side sjmp a 4 a5: cjne rl,#50h,a2 ;check for display to stay on
reaching display-16 sjmp a: a2 : inc rl sjmp al a3: djnz r6 ial
chkO: cjne a,#0fh,chkl mov dptr,#msg0 /load dptr with starting address of msgO
sjmp read
chkl : cjne a, flfh, chk2 mov dptr,#msgl sjmp read
; now start reading
inc rl sjmp al a4: mov r6, 10 mov rl,#41h al: setb trO reti clear tfO main: mov ie,#00h setb ea setb etc
mov tmod, #01h
mode 1
OOOOH
mov r7, #46
/provides gap between each
322
66h mov til, I setb trl j nb tfl,$ /wait until timerl overflows clr trl
clr tfl mov DBH,#0ffh mov DBL, lOffh ret
sjrap read
chk9: cjne a, K9fh,chkl0 mov dptr,#msg9
sjmp read
/** look-up table starts from here: rasgO : db Hh, HI, Ah, Al, Ph, PI, Ph, PI, Yh, Yl, bsh, bsl
,Bh, Bl,Ih,II,Rh, Rlw, Th, Tl, Hh, HI,bsh,bsl,Dh, Dl,Ah, Al Yh, Yl, 0 msgl : db Hh, HI ,Ah, Al ,Ph, PI ,Ph, PI ,Yh, Yl, bsh, bsl,
Nh,Nl,Eh, El ,Wh, Wl, bsh, bsl, Yh, Yl, Eh, El,Ah, Al ,Rh, Rlw, 0 msg2 : db strh, strl,bsh,bsl,Hh, HI,Ah, Al, Ph, PI, Ph ,PI, Yh, Yl ,bsh, bsl, Dh, Dl ,Ih,II,Wh, Wl ,Ah, Al, Lh, LI, Ih,I l,bsh,bsl,strh, strl, 0 msg3 : db Mh,Ml,Eh, El,Rh, Rlw,Rh, Rlw,Yh, Yl, bsh,b sl,Ch, CI , Hh, HI ,Rh, Rlw, Ih, II,Sh, SI, Th, Tl, Mh,Ml, Ah, Al
,Sh, Si, 0 db strh, strl, bsh, bsl, Hh, HI ,Ah, Al, Ph, PI, P msg4 : ,bsh, bsl , h, PI,Yh, Yl, bsh, bsl ,Hh,HI, Oh, 01, Lh, LI, Ih, II
chkl4: mov dptr,#msgi4 sjmp read read: mov r3,dph mov r2,dpl setb trO
rdl : mov rO, Olh
rd2: clr a move a, @a+dptr jz down mov CBH ,a clr a inc dptr
move a, a+dptr
mov DBL ,a
mov ADB,@rO acall timer
strh, strl, 0 db strh, strl, bsh, bsl,Eh, El, Ih,II,Dh, Dl,bs msg5: h, bsl ,Mh, Ml, Uh,Ul,Bh, B1,Ah, Al, Rh, Rlw, Ah, Al, Kh, Kl,bsh ,bsl,strh, strl, 0 db Hh, HI, Ah, Al, Ph, PI, Ph, PI,Yh, Yl, bsh, bsl msg6: ,Dh, Dl,Ah, Al, Sh, SI, Hh, HI ,Eh, El,Hh, HI,Rh, Rlw,Ah, Al, 0 msgl: db Hh, HI,Ah, Al, Ph, El, ?h, PI,Yh, Yl, bsh,bsl,W h, Wl ,Eh,El,Dh, Dl,Dh, Dl, Ih, II,Nh,Nl, Gh, Gl, 0 msg8: db Hh, HI,Ah, Al, Ph, PI, Ph, PI,Yh, Yl, bsh, bsl ,Jh, J1,Ah, Al ,Nh, Nl ,Mh,Ml,Ah, Al ,Sh, SI, Hh, HI ,Th, Tl ,Mh ,Ml, Ih,II,0 db strh, strl,bsh, bsl,Hh, HI, Ah, Al, Ph, PI, Ph msg9: ,PI, Yh, Yl,bsh,bsl,Rh,Rlw,Ah,Al,Kh,Kl,Hh,Hl,Ih,Il,bsh ,bsl,strh, strl, 0 db strh, strl,bsh, bsl,Hh, HI, Ah, Al, Ph, PI, Ph msglO: ,PI,Yh,Yl,bsh,bsl, Ph, PI,Oh, 01, Nh, Nl, Gh,Gl, Ah, Al, Lh, L 1, bsh, bsl,strh, strl, 0 msgll: db Hh, HI, Ah, Al, Ph, PI, Ph, PI, Yh, Yl, bsh, bsl ,Mh, Ml ,Oh, 01, Th, Tl, Hh,Hl, Eh, El,Rh, Rlw, Sh, SI, Dh, Dl,A h, Al, Yh,Yl, 0 msgl2: db strh, strl,bsh, bsl, Hh, HI, Ah, Al, Ph, PI, Ph ,Pl,Yh,Yl,bsh,bsl,Rh, Rlw, Ah, Al, Mh,Ml, Jh, Jl, Ah, Al, Nh, Nl,bsh, bsl, strh, strl, 0 msgl3: db strh, strl, bsh, bsl,Hh, HI, Ah, Al, Ph, PI, Ph ,PI,Yh, Yl,bsh,bsl,Lh, LI,Oh, 01, Hh, HI ,Rh,Rlw, Ih,Il,bsh ,bsl,strh, strl, 0 db strh, strl, bsh,bsl,Hh, HI,Ah, Al, Ph, PI, Ph msgl4:
,Pl,Yh,Yl,b3h,bsl,Eh,El,Ah,Al,Sh,Sl,Th,Tl,Eh,El,Rh,R lw, bsh, bslf strh, strl, 0 default: db Wh, Wl ,Eh, El,Lh, LI,Ch, CI, Oh, 01, Mh,Ml, Eh El,bsh, bsl Th, Tl, Oh, 01, bsh, bsl,Ah, Al, Lh, LI,Lh, LI, 0
timer: mov tmod,#10h /set mode 1 for timerl mov thl,#0fch / FC66H will generate a delay of 1ms with 11.0592MHz Xtal
end
Microcontroller-Based Projects
323
A.M. BHATT
to attract
chaser circuits can be used to create lighting animation sequences. These have been used in the past attention for advertising, event promotion (such as the marquees at the local movie theatres) and decoration. These can also be used to produce pleasing effects for entertainment. The technology has now reached the point where everyone can afford to build light chasers, which may be just what you need for your next gathering or party. Most of them have some preprogrammed sequences which change automatically according to your choice, while others are programmed to generate particular patterns like pictures and graphical designs. Here is one such application based on AT89C51 microcontroller that generates five different lighting effects using 120 LEDs connected to 24 input/output (I/O) lines of the microcontroller. The salient features of this
Light
circuit are:
1. Each of the 24 I/O lines having fives LEDs connected to it in series 2. Changeable time delay to increase or decrease the speed of effect 3. Eight pushbutton switches for different operations like selection of light effect, stop and change of delay 4. Reprogrammable because of AT89C51 microcontroller 5. Software can be extended for many different effects
Circuit description
Light chasers consist of several lighting circuits (usually three or four) strung together. Every first light in the string is turned on and then off, followed by the next light turning on and then off, and so on. There are 24 strings of lights consisting of five LEDs each, and 24 output lines from IC1for controlling these lights, to create different lighting effects. Fig. 1shows the circuit diagram of the microcontroller-based LED chasing effect generator. At the heart of this circuit is microcontroller AT89C51.The AT89C51 is a low-power, high-performance 8-bit microcontroller with 4kB flash programmable and erasable read-only memory. The on-chip flash allows the program memory to be reprogrammed in-system. It is a powerful microcontroller used in many embedded control applications. It has 128 bytes of RAM, 32 I/O lines, two 16-bit timers/counters, a five-vector two-level interrupt architecture, a full-duplex serial port, on-chip oscillator and clock circuitry. The power-down mode saves the RAM contents but freezes the oscillator disabling all other chip functions until the next hardware reset. Port 1is an 8-bit, bidirectional I/O port with internal pullups. Port pins P1.0 through PI.7 are connected to push-to-on switches Si through S8, respectively. Switches Si through S5 are used for five different light effects, while switches S6, S7 and S8 are used to stop all the light effects, decrement the speed of the current effect and increase the speed of the current effect, respectively. Port 0 is an 8-bit, open-drain, bidirectional I/O port. It is pulled up through 10-kilo-ohm resistor network RNW1. Port-0 pins PO.O through P0.7 are connected to pins 1 through 8 ofULN2803 (IC2), respectively. When any of the port-0 pins goes high, the respective output of ULN2803 goes low to drive the connected LEDs. The ULN2803 consists of eight npn Darlington-connected transistors, which are ideally suited for interfacing between the low-logic-level digital circuitry and the higher current/voltage requirement circuits of lamps, relays or other similar loads for a broad range of computer, industrial and consumer applications. It features open-collector outputs with free-wheeling clamp diodes for transient suppression. Similarly, when any of port-2 or port-3 pins goes high, the respective output of ULN2803 goes low to drive the connected LEDs. Resistors R2 through R25 limit the current through the LED lines. As mentioned before, a total of five LEDs are connected in series to each output line of ULN2803.
324
LED Light Chaser For Five Lighting Effects
SO
& EN
LVi
ooh-toms-cocM*-
CO h. to
CO
If)
]\\> * 2
roZg
CN
*-CMcomcor*co
>
o
co
*z, O
c
T~
CO CM
CO
3 Csl
in
00
T-
CM
co r-
CO C7>
1 1
vvw-
vwv' VWv1
<
vwv-
'
' Wr WA'V/WV-
nnnwnnnn
0)OON(OU)3COW
CONlDlflfCOCMrcnjcmcmcmosjcsjcnjcvi
co
o
1A
I
CM
*~
CO
qo
<
oi
T-
OIt-CMCOWCONCO
C\J
rr-
mains is stepped
down by trans former XI to de liver the secondary output of 18V, 1A. The transformer
output is recti
9i
O
lip
ar-ll
00 o co u
C\J CL
p
CL
co C/>
in
5a
fied by a full-wave bridge rectifier comprising diodes D2 through D4, filtered by capaci tor C4 and then
CO
CO
03
CL
to
0)
r-*
W
O
oo
.o
z Q
G-
h CL
h CL
h
CL
h
Q.
t-
LU
Microcontroller-Based Projects
325
IC6 7815
0/P
+15V
D2
230V AC
D3
COM
c3
C3
IC5
1
50Hz
g
D4
C4
7805
O/P
+5V
TO
89C51
COM
1000
C6
50V
0.1m
V*, LED121
POWER
D2-D5 = 1N4007
regulated by IC 7805 (IC5) and 7815 (IC6). Regulator ICs 7805 and 7815 provide regulated 5V and 15V, re spectively. Capacitors C5 and C6 bypass the ripples present in the regulated power supply. LED121 acts as the power-'on' indicator and resistor R26 limits the current through LED121. An actual-size, single-side PCB for the microcontroller-based LED chaser is shown in Fig. 3 and its compo nent layout in Fig. 4.
Operation
The complete operation depends upon the eight pushbuttons. Refer
every pushbutton.
to
to
Initially, after power-'on' reset or manual reset, all the LEDs blink for five times and then turn off. Now, if you press any of switches SI through S5, that effect restarts. This will PARTS LIST continue until you press any other key. One can change the effect in between by pressing a button other than SI through S5. During the Semiconductors: - AT89C51 microcontroller IC1 effect, if you press switch S7, the speed will decrement, while pressing IC2-IC4 - ULN2803 eight Darlington switch S8 will increment the speed. The speed can be decreased/ in array creased in five steps. Pressing switch S6 will make all the LEDs blink ICS - 7805, 5V regulator again for five times and then turn them off. This operation is totally - 7815, 15V regulator IC6 based on the software embedded in 89C51 chip. 1N4001 rectifier diode D1
D2-D5 - 1N4007 rectifier diode LED1-LED 121 - 5mm LED
Resistors (all 'A-watt, 5% carbon): - 10-kilo-ohm R1 R2-R25 - 150-ohm R26 - 330-ohm RNW1 - 10-kilo-ohm
Software
The software is written in 'C' language and compiled using Keil pVision 3. The step-by-step procedure to build a project using Keil pVision 3 IDE is as follows: 1. Open Keil program from 'start' menu or from the desktop icon. Three windows, namely, project workspace, editing window and output window, appear. The project workspace window shows all the relevant files for your project. Editing window is the place where you can edit the code. The output window shows the output when you compile, build or run your project. 2. Now open 'project' option and select 'new project.' Here, first create a new folder named 'chaser' and give a project name 'led-chaser.' 3. Now select the target device '8051' from 'generic' option and
click 'ok'button. 4. A message asking whether
to
Capacitors:
C1,C2 C3 C4 C5,C6
Miscellaneous:
XI
S1-S9
not
ap-
326
mn\ mi
lllllll!
(Ci
II1 1 It
III
5. Now from 'file' menu, se lect 'new file.'Hie editor window opens, where you can start writ ing your 'C' code. 6. Right-click the source file in workspace window and click 'add files' in the pop-up menu. Then add file 'reg51.h.' There upon, all the special-function registers are initialised. 7. After writing the program, save the file as '.c' extension. Now in project workspace window, right-click source group 1.' Select 'add files to source group 1' from pop-up menu. Next, select '.c' file and click 'add'. Now you can see your 'c' file added in the source group. 8. To compile the project,
Fig. 3:A single-side, actual-size PCB layout for LED light chaser
click 'project' menu and select 'build target.' You can see the
con6|q|o o o o o o el c]ni|b|o e e e o o olv_y
R2-R25=150E RlflORJCWRZWRZ-O
R20 R4OR6OR8
[
o
78*15
"P
ULN2803
Gp
ULN2803
09999999999999999999
AT83C51
rn\n V l
progress in output window. If there is any compilation error, your target will not be created. So rectify all the errors and then build the target again until you get '0 - Errors, 0 - warnings' message and '.hex' code is gener ated for burning into the micro controller. In initialisation part, the program initialises all the ports as either input or output, then it blinks all the LEDs for five times to check whether all the LEDs
are
18U AC
PT2
okay
or not. Thereafter,
the
1ODOu
B1B
S3 PT3 S5 PT5 S7 DEC. S8 INC.
S+ PT4 S6 STOP
RESET
XT AL ( 12MHz
CI
1N1001
V_y
P0UEHR2633C 330E SI
loop (while), to check whether any key is pressed or not. In key detection part, the switch statement is used to find out which of the eight keys is pressed. Depending upon the key pressed, a particular case is
executed. Pattern generation is the main part of the whole program. One pattern is assigned with first five keys and for each pattern there is one func tion. So whenever the key (out of SI through S5) is pressed, that particular function is called. Then that function is executed until any other key is pressed.
327
Microcontroller-Based Projects
The functions used in this program are: Functions Assigned to Effectl( ): Rotates bit 'O'on all port pins. It starts from PO.O to Pushbutton Switches P0.7, then from P2.0 to P2.7 and then from P3.0 to P3.7. Next, it Switch Function reverses from P3.7 to PO.O. So all the LEDs are 'on,' but at a time one line is low. Start chasing effect 1 S1 Effect2( ): Same as above, except that here bit '1' is rotated. That Start chasing effect 2 S2 means all the LEDs are 'off' but at a time one line is high. S3 Start chasing effect 3 Effect3( ): The simplest function. It makes all the LEDs blink alternatively. That means first all the odd lines are high and even S4 Start chasing effect 4 lines are low, then even lines are high and odd lines are low. S5 Start chasing effect 5 Effect4( ): Rotates bit '0' forward and backward simultaneously on all three ports. That is, at a time bit '0' is rotated from PO.O, P2.0, Stop all effects S6 P3.0 to P0.7, P2.7, P3.7 and then from P0.7, P2.7, P3.7 to PO.O, S7 Decrease the speed of current effect P2.0, P3.0. Increase the speed of current effect S8 Effect5( ): Rotates bit '1' from both the ends to the centre and then from the centre to both the ends. Means starting from PO.O and P3.7 to P2.3 and P2.4.Then in reverse manner from P2.3 and P2.4 to PO.O and P3.7. Delay( ): Generates delay of approximately 0.1 second and is used for key debounce. Dly(int d): The only function with one argument. It generates variable delay according to the value passed to it.This is used to increase or decrease the speed of effect. Incdly( ): Increases the value of variable 'd'that is passed to dly(int d) function. So delay increases and speed decreases. Decdly( ): Decreases the value of variable 'd' that is passed to dly(int d) function. So delay decreases and speed
increases. Download Source Code: http://www.efymag.com/admin/issuepdf/Light%20Chaser.zip
328
Adding
an elegant-looking colour LCD to a project is a dream for robotics enthusiasts. Usually, colour LCDs are costly and it's difficult to find the technical information for their interfacing. Using the colour LCD of your old mobile phone could be a solution. Here we describe how to use the colour LCD of a Nokia handset (model 6100, 7210, 6610, 7250 or 6220) with Philips PCF8833 chipset through ATmega2560 ATMEL AVR microcontroller. These LCDs are readily available and inexpensive even if you buy a new one. The author's prototype is shown in Fig. 1. With this project, you can easily load a colour picture of 132x132 pixels, in 12-bit RGB (red-green-blue) format, to the colour LCD through your PC's serial port.
ATmega2560 microcontroller
The ATmega2560 is a low-power CMOS 8-bit microcontroller based on the AVR enhanced RISC architecture. The AVR core combines a rich in struction set with 32 general-purpose working registers. All the 32 registers are directly connected to the arithmetic logic unit, allowing two independent registers to be accessed in one single inOUT
IC1
3 7805 2 COM
IN
CON3
"+1
-r-
C5
16V
C6
1(J
1M
Vcci
AVcc
VCC2
VCC3
31
Vcc
PEO
100
61
o, RX
TX
Tioin
R1IN
80 99 81
62 32
GND
C2
0.1m
14
13
6
GND
IC3 MAX232 5
12
T -
5]
10
16V
R10UT
o~~
C9,10m 16V
C8
16V
15
11 T1 IN
2 PE1 3
SCK 20
MOSI 21 MISO 22
IC2 ATMEGA2560
PaO
-Tit
ISP6PIN
GND
78
PAO
30 RST
33
34 75 76 77
PA1
R2 I 4700VR1
MISO
SCK
tVCC
MOSI
HUH 5
XTAL1 16MHZ
10K PRESET
LED1
RST
CON4
GND
S1
C3
Nnwm
S1=TACTILE SWITCH
CON1= DC CONNECTOR = 10-PIN BERG STRIP FEMALE CONNECTOR
22p
C4
22p
y_
10
CON2
CON2
CON3 = 9-PIN D' TYPE FEMALE CONNECTOR CON4 = ISP6 MALE CONNECTOR
Fig. 2: Circuit for interfacing the Nokia colour LCD with avr microcontroller
Microcontroller-Based Projects
329
struction executed in one clock cycle. The resulting architecture is more code-efficient while achieving throughputs up to ten times faster than conventional CISC microcontrollers. The microcontroller has 256 kB of in-system programmable Flash with read-while-write capabilities, 4kB EEPROM, 8kB SRAM, 86 general-purpose input/output (I/O) lines, real-time counter, six flex ible timers/counters with compare modes and pulse-width modulation (PWM), four USARTs, a byte-oriented two-wire serial interface, a 16-channel, 10-bit analogue-to-digital converter (ADC) with op tional differential input stage with programmable gain, programmable watchdog timer with internal oscillator, a serial peripheral interface (SPI) port, IEEE standard 1149.1 compliant JTAG test interface (also used for accessing the on-chip debug system and programming) and six software-selectable power-saving modes.
Fig. 3: Front view of Nokia LCD with pin details of the connector
CON6
VCC FIST
SDA
LED+
C0N5
10
LEDC3ND
9
8
CLK CS
NC
D
R3-R5=1K R6-R8=2.2K
Vcc
6
5
4
GND
CON5 = 10-PIN BERG STRIP MALE CONNECTOR CON6 = NOKIA LCD CONNECTOR PIN DETAIL
R B
G
H B G
0 R
B
R
B
G R
B
2 R
B
RED AND GREEN FOR 1ST PIXEL BLUE FOR 1ST AND RED FOR 2ND PIXEL GREEN AND BLUE FOR 2ND PIXEL
Circuit description
Fig. 6: GUI created using VB.net for image trans fer from the PC
Fig. 2 shows the circuit for interfacing the Nokia colour LCD with Atmega2560 microcontroller. The circuit is powered from a standard 9V DC source. Hie 9V DC is converted into 5V DC using a 7805 regulator (ICl). The glowing of LED1 shows the presence of power in the circuit. The regulated 5V supply powers the circuit including the Atmega2560, MAX232, LCD connector (CON2) and ISP6 connector (CON4). CON3 is a 9-pin, D-type COM port connector used to interface with the PC for picture file transfer to the LCD through the microcontroller (IC2). ISP6 connector is used for programming the microcontroller using STK500 board. Whenever the program doesn't function properly, you can reset the microcontroller by momentarily pressing reset switch Si.
Interfacing Nokia Colour LCD With AVR Microcontroller
330
Pin details of Nokia's 10-pin LCD shown in Fig. 3. A manual implementation of the SPI with the mi crocontroller is done through SDA, CLK. and CS pins on the LCD connector. First, the clock pin is cleared, then the data pin is set or cleared depending on the data bit and the clock pin set. SDA and CLK pins of the LCD connector are connected to pins 77 (PA1) and 76 (PA2) of the micro controller, respectively. The 8 -bit data is transferred through the SPI in eight clock cycles. CS pin of the LCD chip is permanently made low. Fig. 7: An actual-size, single-side PCB for interfacing the Nokia colour LCD with Backlight LED pin for the LCD may be the AVR microcontroller circuit connected to a PWM pin to have a dim ming effect depending on the duty cycle R2170 PCUiLK M0 K I A COLOR LCD UITH 21 1 B C0N2 LCD of PWM. C0N3 10 3 8 75 5 1 The LED and Reset pins of the LCD are connected to pins 75 (PA3) and 78 (PAO) of the microcontroller, respectively. CONl When PAO is made low, it resets the LCD. HTffFGn2560 All the lines PAO to PA3 is made an output pin by setting the data direction register C3, (DDRA) bits high. 22P XTAL. ... I5P6 1 6m RESET This connector is too small to handle OOP C5-CB and solder using a normal soldering iron. con PORT C0N4 You can extend the connections to a stand C2, 0. lu ard-size berg strip male connector as shown in Fig. 4. The LCD connector extension may Fig. 8: Component layout for the PCB in Fig. 7 be developed with resistors R3 through R5 LCD EXTENSION C0N6 (1 kilo-ohm each) and R6 through R8 (2.2 kilo-ohms each) forming the voltage divider circuits to obtain 3.3V signals (acceptable by the colour LCD) from 5.5V TTL R3-R5-1K signals. R6-R8=2. 2K Note that this connector extension is made for use with a colour LCD as well as standard character LCD. The LCD receives 3.3V supply through preset VR1. 021 1B VR1 is also used to adjust the brightness of the colour LCD.Contrast is adjusted through software program. Make a PCB layout and glue the board on the back side of the LCD module. Now you can easily fit the LCD onto the 10-pin berg strip socket in your nlOOOCOOOOOl ATmega2560 application board.
connector are
liliS 11.= !
is
Software program
The software for the microcontroller is written in 'C' language using the IAR Embedded Workbench integrated development environment. IAR EmbeddedWorkbench is being developed by IAR Systems and ATMEL developers in parallel and hence it generates the optimised code which uses full 'C' coding capabilities of AVR devices. AVR development tools for embedded systems can
Microcontroller-Based Projects
331
be downloaded for free from IAR website www.iar.com. For details of IAR Embedded Workbench, you may refer to 'A Beginners' Guide to Semiconductors: AVR Development' article published in January issue of EFY. ATMEL IC1 - 7805, 5V regulator To the application, click 'IAR Embedded Workbench' icon start IC2 - ATmega2560 microcontroller IC3 - MAX232 RS-232 driver in All Programs' menu of Windows. From the main menu, select LED1 - 5rnm light-emitting diode Project>Create New Project and start an AVR Studio compat Resistors (all 'A-watt, 5% carbon): ible C project. Generate the Intel hex file for burning the code into R1 - 10-kilo-ohm Atmega2560 microcontroller as follows: ProjectOptionsLinker R2 - 470-ohm (under Category)Extra OutputGenerate Extra Output (to R3-R5 - 1-kilo-ohm Override Default (to click)Type Project Name, hexOutput click) R6-R8 - 2.2-kilo-ohm VR1 Format*intel-standard (to select). - 10-kilo-ohm preset Press 'ok' after all these settings are done.The source code for LCD Capacitors: CI - 100|jF, 25V electrolytic interfacing (main.c) along with comments for instructions is included C2 - 0.1|iF ceramic in this month's EFY-CD. Import the main.c file from the CD into the C.3, C4 - 22pF ceramic editor screen by clicking Add Files...' option in Project menu. Click C5-C8 - lF, 16V electrolytic 'Compile' option from Project menu to compile and generate main. C9 - 10(iF, 16V electrolytic hex code. Miscellaneous: To send a command, a low bit is sent first before sending an 8-bit CON1 - DC connector CON2 - 10-pin berg strip female command, forming a 9-bit SPI command signal. Similarly, before connector sending an 8-bit data, a high bit is sent forming a 9-bit SPI data. You CON3 - 9-pin D-type female may refer to the datasheet of PCF8833 for various instructions used connector in the LCD driver chip. The code for this project (main.c) has been male ISP connector CON4 6-pin programmed as per these instructions. CON5 - 10-pin berg strip male connector If you can draw a point with a colour at any given location on the CON6 - 10-pin connector for LCD screen, you can implement various graphics algorithms to draw a Nokia LCD circle, line, filled rectangle, etc. You can have the AVR microcontroller SI - Tactile switch fitted with a 16.00MHz external crystal oscillator, a serial RS-232 - Nokia 6100 colour LCD driver connecting a serial port and a reset arrangement to run the code. module Downloading the code into Atmega2560. To program the Atmega2560, connect the 6-wire cable between ISP connectors of the STK500 board (marked as ISP6) and the target board (marked as ISP con). Connect a serial cable from 'RS232 CTRL' connector on the STK500 board to a COM port on the PC. Now start AVR Studio 4.0 without opening any project file. Optionally, you may proceed as follows: Main Menu>ToolsProgram AVRSelect AVR Programmer. Press 'Connect...' after selecting STK500 or AVRISP in the platform window and COM port (say, COMl) in the port window. Next, select Atmega2560 as 'Device,'ISP as 'Programming Mode'and browse your project hex file from Project>DebugExe folder. Press 'Program' button on the STK500 dialogue box to burn the hex file into your microcontroller. Converting the imagefile. You may convert any image file into a .raw file of 132x132 size, in 12-bit RGB colour, using Adobe Photoshop. A standard 12-bit image encodes the two pixels in three bytes of data (24 bits) as shown in Fig. 5. In a 12-bit image, each pixel has three colour components of 4-bit value (0 to 15). So each of red, green and blue can vary from 0 to 15. Now, as a single COM port communication or any serial communication has 8-bit data and 12 bits are one-and-a-half byte, the two pixels are transferred so that 12x2 = 24-bit value is sent in three successive transfers of 8-bit value. Same is the case when storing these pixels in a file or a memory which stores a byte value only. The two pixels having 24 bits can be stored in three bytes of data. A front-end (user-interface) program for transferring a picture file to the AVR microcontroller may be de signed using a suitable software. Using GUIto transfer the image. The user-interface program for transferring the picture file (.raw) from your PC to the Nokia LCD is designed in Visual Basic.NET platform. The send_picture.exe file is already included in the EFY-CD of this issue. When you click this file, you will see a GUI window as shown in Fig. 6.
PARTS LIST
332
In the first drop-down menu, select the appropriate com port.The image to be transferred should be saved in *.raw format. Select that image using 'Browse' option in the second pane and press 'Send' button to transfer the image to the graphical LCD. Now the image is displayed on the LCD. Writing a text to the screen is similar to drawing a bitmap with predefined height, width and colour of characters.
Construction
An actual-size, single-side PCB for interfacing the Nokia colour LCD with the AVR microcontroller circuit (Fig. 2) is shown in Fig. 7 and its component layout in Fig. 8. An actual-size, single-side PCB for the LCD extension circuit (Fig. 4) is shown in Fig. 9 and its component layout in Fig. 10. Mount all the components as shown in the PCB layouts. The Atmega2560 used in the prototype comes in a 100-pin, surface-mount TQFP package. By using surface-mount devices (SMDs) in your project, you don't have to drill holes in the PCB and the board size will be much smaller. But it may be difficult to handle and solder SMDs without an SMD soldering station. However, with a normal soldering iron, tweezers and some basic knowledge, you can solder SMD components without much problem. You need good eyes, a steady hand and a soldering iron with a small, clean tip. Make sure that the PCB is clean. You may use copper polish material to remove all kinds of oxidation and acetone (nail polish remover) to remove all kinds of contaminations on the PCB. On the PCB, figure out the correct location for placing the SMDs. Fixate the SMD at the top right corner and the bottom left corner. Carefully solder SMD pins one by one. SMD components are very sensitive to heat, so allow your SMD to cool down after every step. For more tips on soldering SMD components, you may refer to http://hem. passagen.se/communication/pcbsmd.html and www.engadget.com/2006/03/07/how-to-make-a-surface-mountsoldering-iron/ websites. After soldering the components on the PCBs, insert the LCD connector extension board in the main interfacing PCB using the connector marked 'C0N2.' With the LCD screen facing towards you, the leftmost pin of the berg strip is pin 1. Make sure that the orientation of the LCD connector is correct. Now connect 9V DC source to the circuit and switch on the power supply. LED1 should glow to indicate the presence of power in the circuit. At this point, you will see a test colour band drawn by itself on the LCD screen and then waits for serial port to get 12-bit RGB image from PC at 115.2 kbps baud rate. Now run the send_picture.exe file and send the picture file (.raw) to the LCD from your computer. Downloadsource code: http://www.efymag.com/admin/issuepdf/NOKIA-Color-LCD-Interfacing.zip
Microcontroller-Based Projects
333
Robotics
Conventionally,
wireless-controlled robots use RF circuits, which have the drawbacks of limited working range, limited frequency range and limited control. Use of a mobile phone for robotic control can overcome these limitations. It provides the advantages of robust control, working range as large as the coverage area of the service provider, no interference with other controllers and up to twelve controls. Although the appearance and capabilities of robots vary vastly, all robots share the features of a mechanical, movable structure under some form of control. The control of robot involves three distinct phases: preception, processing and action. Generally, the preceptors are sensors mounted on the robot, processing is done by the on-board microcontroller or processor, and the task (action) is performed using motors or with some other actuators.
IC1
IC2
IC3 IC4
D1
R1,R2 R3 R4-R8
Capacitors:
CI
Project overview
In this project, the robot is controlled by a mobile phone that makes a 3.57MHz crystal call to the mobile phone attached to the robot. In the course of a call, 12MHz crystal if any button is pressed, a tone corresponding to the button pressed Push-to-on switch is heard at the other end of the call. This tone is called 'dual-tone 6V, 50-rpm geared M1.M2 multiple-frequency' (DTMF) tone. Hie robot perceives this DTMF DC motor tone with the help of the phone stacked in the robot. Batt. 6V, 4.5Ah battery The received tone is processed by the ATmegal6 microcontroller with the help of DTMF decoder MT8870.The decoder decodes the DTMF tone into its equivalent binary digit and this binary number is sent to the microcontroller.The microcon troller is preprogrammed to take a decision for any given input and outputs its decision to motor drivers in order to drive the motors for forward or backward motion
or a turn.
The mobile that makes a call to the mobile phone stacked in the robot acts as a remote. So this simple robotic project does not require the construction of MOBILE USED AS REMOTE receiver and transmitter units. DTMF signaling is used for telephone signaling CL RIGHT HI the line in the voice-frequency band to the call over MOTOR > DTMF cc DECODER o centre. The version of DTMF used for tel switching , CL MICROCONTROLLER o tone dialing is known as 'Touch-Tone.' ephone hLEFT o DTMF assigns a specific frequency (consisting 5 MOTOR of two separate tones) to each key so that it can eas ily be identified by the electronic circuit. The signal Fig. 1:Block diagram of cellphone-operated land rover generated by the DTMF encoder is a direct algebraic summation, in real time, of the amplitudes of two sine (cosine) waves of different frequencies, i.e., pressing '5' will send a tone made by adding 1336 Hz and 770 Hz to
Microcontroller-Based Projects
335
C4
___
30
1N4007
EN1
JIP
0.47p
100K
IN-
0.1p St/GT,
R3
OUT 1
R2
100K
I
,N+
PD7 PD3
EN2
IN3
330K
ESt
RST
PA3
IC1
Vref
04
PA2
37
CM O OUJ
Ml
IN2 IN1
IC3 L293D
OUT2
OUT3
MT8870
03
OSC1
Xtali
PA1
M2
C2
22p
=!=Xtal1 LJ 3.57
Q2
r MHz
PAO
OUT4
6V
C3
22p
0SC2
BATT.
C5
22p
C6
22p
TABLE I
TABLE II
1477 Hz
1633 Hz
Digit
1
0E
H
H
D3
L L
D2
L L
D1
DO
H
697 Hz 770 Hz
1
4
A
B
L
H
5
8
0
697
852 Hz
941 Hz
7
*
9
#
C
D
697
770
1477
1209
3
4
H
H
L
L
L
H
L L
770
1336
1477
the other end of the line. The tones and assign ments in a DTMF system are shown in Table I.
5
6
7
H
H
H
H
L
L
L
H
H
H H
L
770 852
1209
Circuit description
Fig. 1 shows the block diagram of the micro controller-based mobile phone-operated land rover. The important components of this rover
are a DTMF decoder, microcontroller and mo
tor
852
1336
1477
1336
852
941 941
H
H
H
H H
L
L
L L
1209
# H H H 941 1477 driver. An MT8870 series DTMF decoder is used A H H H 1633 697 here. All types of the MT8870 series use digital B H H H 1633 770 counting techniques to detect and decode all the 16 DTMF tone pairs into a 4-bit code output. H 1633 852 C H H The built-in dial tone rejection circuit eliminates L 1633 941 L D H the need for pre-filtering. When the input signal ANY Z Z L given at pin 2 (IN-) in single-ended input con figuration is recognised to be effective, the correct 4-bit decode signal of the DTMF tone is transferred to Q1 (pin 11) through Q4 (pin 14) outputs.
L
L
L
H
336
Software description
The software is written in 'C' language and compiled using CodeVision AVR 'C' compiler. The source program is converted into hex code by the compiler. Burn this hex code into ATmegal6 AVR microcontroller. The source program is well commented and easy to understand. First include the register name defined spe cifically for ATmegal6 and also TABLE III declare the variable. Set port A as the input and port D as the Actions Performed Corresponding to the Keys Pressed output. The program will run Number Action performed Input to the Output of Output from forever by using 'while' loop. pressed by HT9170 DTMF microcontroller microcontroller 'while' loop, read port Under decoder user A and test the received input OxFD 0x02 0x89 Forward motion 2 using 'switch' statement. The 00000010 11111101 10001001 corresponding data will output Left turn at port D after testing of the 0XFB 0x04 0x85 Right motor forwarded 4 11111011 00000100 10000101 received data. Left motor backwarded
6
0x06 00000110
0XF9 11111001
0XF7 11110111
0x8A 10001010
Working
In order
to
8
5
0x08 00001000
0x86 10000110
0x05 00000101
OXFA 11111010
0x00 00000000
you need to make a call to the cell phone attached to the robot (through head phone) from any phone, which sends DTMF
Microcontroller-Based Projects
337
tunes on
pressing the numeric buttons. The cell phone in the robot is kept in 'auto answer' mode.
(If the mobile does
not
have the
auto
answering
facility, receive the call by 'OK' key on the roverconnected mobile and then made it in hands-free mode.) So after a ring, the cellphone accepts the call. Now you may press any button on your mobile to perforin actions as listed in Table III.Hie DTMF tones thus produced are received by the cellphone in the robot. These tones are fed to the circuit by the headset of the cellphone. The MT8870 decodes the received tone and sends the equivalent binary num ber to the microcontroller. According to the program in the microcontroller, the robot starts moving. When you press key '2' (binary equivalent 00000010) on your mobile phone, the microcon troller outputs '10001001' binary equivalent. Port pins PD0, PD3 and PD7 are high.The high output at PD7 of the microcontroller drives the motor driver (L293D). Port pins PD0 and PD3 drive mo tors Ml and M2 in forward direction (as per Table III). Similarly, motors Ml and M2 move for left turn, right turn, backward motion and stop condi tion as per Table III.
EFY/SUNIL/R0B0T/JULY-08
3 J I
o
FM-R8=10K
1C2
74LS04
330K
fl 9 0 0 9 0 0 RCOCT
(1T8870
Construction
When constructing any robot, one major me chanical constraint is the number of motors being used. You can have either a two-wheel drive or a four-wheel drive. Though four-wheel drive is more complex than two-wheel drive, it provides more torque and good control. Two-wheel drive, on the other hand, is very easy to construct. Top view of a four-wheel-driven land rover is shown in Fig. 3. The chassis used in this model is a 10* 18cm2 sheet made up of parax. Motors are fixed to the bottom of this sheet and the circuit is affixed firmly on top of the sheet. A cellphone is also mounted on the sheet as shown in the picture.
BAT L
BQQQB000Q
R
IP
, 10C6
out:
jQrii0|ouTi|o II
RING
C2,C3,C5,C6=22p!
121Hz"
TAL2"
.
JULY-08
In the four-wheel drive system, the two motors controlled in parallel. So a single L293D driver IC can drive the rover. For this robot, beads affixed with glue act as support wheels.
Further applications
This land rover can be further improved to serve specific purposes. It requires four controls to roam around. The remaining eight controls can be configured to serve other purposes, with some modifications in the source program of the microcontroller. Downloadsource code: http://www.efymag.com/admin/issuepdf/Microcontroller%20Based%20Land%20Rover.zip
338
ROBOT.C
Source program:
Robit.c
include
/
<raegal6.h>
unsigned int k, h;
DDRA=OxOO; DDRD=0XFF; while (1)
i
/
PORTD=Ox85;
// Left turn
break; )
case 0xC6:
1 PORTD=Ox8A;
j
k =~PINA;
// Right
turn
h-k
switch (h)
{
& OxOF;
//
Stop
0x08
Microcontroller-Based Projects
339
Line-following
PARTS LIST
are commonly used in manufacturing plants. These move on a specified path to pick the components from specified locations and place them on desired locations. Basically, a line-following robot is a self-operating robot that detects and follows a line drawn on the floor. The path to be taken is indicated by a white line on a black surface. The control system used must sense the line and manoeuvre the robot to stay on course while constantly correcting the wrong moves using feedback mechanism, thus forming a simple yet effective closed-loop system.
IC1
IC2 IC3 Tl,T2
D1
Circuit description
Fig. 1 show the block diagram of the automated line-following robot. It consists of mainly four parts: two sensors, two comparators, one decision-making device and two motor drivers.The robot is built us ing microcontroller AT89C51 (used as the decision-making device), motor driver L293D, operational amplifier LM324 (comparator), phototransistor (sensor) and a few discrete components. In the circuit, the sensors (phototransistors) are used to detect the white strip on a black background. The sensor output is fed to the microcontroller, which takes the decision and gives appropriate command to motor driver L293D so as to move the motor accord ingly.
Sensor. The sensor senses the light reflected from the surface and feeds the output to the comparator. When the sensor is above the white background the light falling on it from the source reflects to the sensor, and when the sensor is above the black background the light from the source doesn't reflect to it. The sensor senses the reflected light to give an output, which is fed to the comparator. Comparator. The comparator compares the analogue inputs from
SENSOR 1
10|jF, 16V electrolytic 33pF ceramic disk 47pF, 16V electrolytic 0.1pF ceramic disk
On/off switch Push-to-on switch 12MHz crystal 20 rpm, 6V DC geared motor 6V, 4.5AH battery Two side brackets for mounting motors One castor wheel (for front wheel) Two wheels for the rear Chassis
ANALOGUE SIGNAL
COMPARATOR
MOTOR1
MICRO
MOTOR
CONTROLLER
DRIVER
SENSOR 2
COMPARATOR
voltage, and if it is smaller the comparator generates a high voltage that acts as input for the decision-making device
(microcontroller). Microcontroller. The mi crocontroller is programmed
ANALOGUE SIGNAL
340
R3 5.6K
R4 5.6K
C5
0.1p
C4
t_L
1N4007
-t_ [_
ON/OFF SWITCH
RST
A2
P2.3
P3.0
LEFT
M1
P2.2
RESET LED1
LED2 WHITE
IC2 AT89C51
P3.1
I I Xtal
20
A1
L14F1
22
P2.1
IC3 L293D
BATT.
6V"7
P2.0
L14F1 LEFT
SENSOR
VR1
10K
R5
10K
R6
33052
RIGHT
VR2 10K
C2, C3 = 33p
XTAL = 12MHz
make the robot move forward, right or turn left based on the input coming from the comparator. The outputs of the microcontroller are fed to the motor driver. Motor driver. The current supplied by the microcontroller to drive the motor is small. Therefore a motor-driver IC is used. It provides sufficient current to drive the motor. Fig. 2 shows the circuit of the
to turn
When light falls on the phototransistor (say,Tl), it goes into saturation and starts conducting. Fig. 3: Actual-size, single-side PCB for the automated line-following robot When no light falls on the phototransistor, it is cut-off. A white LED (LED2) Action Corresponding to the has been used to illuminate the white path on a Microcontroller Outputs black background. Phototransistors Tl and T2 are used for detecting the white path on the Outputs black background. P2.2 P3.0 P3.1 P2.3 P2.0 P2.1 Collectors of phototransistors Tl and T2 1 0 Forward 0 0 1 0 are connected to the inverting inputs of oper ational amplifiers A2 and Al.The signal volt Left 0 0 0 0 1 1 age at the inverting input of the operational 1 Right 0 0 0 0 i amplifier is compared with the fixed reference Stop 1 0 0 0 0 1 voltage, which is formed by a potential divider circuit of 5.6-kilo-ohm resistor and 10-kiloohm preset. This reference voltage can be adjusted by changing the value of the 10-kilo-ohm preset. When sensor T2 is above the black surface, it remains cut-off as the black surface absorbs virtually all the
Microcontroller-Based Projects
341
L14F1
AT89C51
IC2
light falling from LED2 and no light is reflected back. The voltage at the inverting input (pin 2) of operational amplifier Al is higher than the reference voltage at its non-inverting input (pin 3) and therefore the amplifier output at pin 1
becomes zero. When sensor T2 is above the white line, the light gets XTAL from the white surface reflected LE02 WHITE to fall on phototransistor T2. L11F1 Phototransistor T2 goes into UR1 1OK 12MHz saturation and conducts. The Fig. 4: Comporenr layout for the PCB inverting input (pin 2) of op erational amplifier Al goes below the reference voltage at its non-inverting input (pin 3) of operational amplifier Al and therefore output pin 1 goes high. This way, the comparator outputs logic '0' for black surface and logic 'l'for white surface. Similarly, comparator A2 compares the input voltage from phototransistor Tl with a fixed reference voltage. The outputs of operational amplifiers Al and A2 are fed to microcontroller AT89C51. The AT89C51 is an 8-bit microcontroller having 4 kB of Flash, 128 bytes of RAM, 32 I/O lines, two 16-bit timers/ Fig. 5:Path of automated line-following robot counters, a five-vector two-level interrupt architecture, on-chip oscillator and clock circuitry. A 12MHz crystal is used for providing the basic clock fre START quency. All I/O pins are reset to '1' as soon as RST pin goes high. Holding RST pin high for two machine cycles while the oscillator is running BOTH WHEEL MOVE FORWARD resets the device. Power-on reset is derived from resistor R5 and capacitor CI. Switch S2 is used for manual reset. The microcontroller, based on YES RECEIVE LEFT the inputs from sensor Tl (say, left) and sensor SENSOR OUTPUT f T2 (say, right), controls the motor to make the STOP LEFT WHEEL & robot turn left, turn right or move forward. MOVE RIGHT WHEEL Port pins P2.0, P2.1, P2.2 and P2.3 are con nected to pins 15, 10, 7 and 2 of motor driver YES RECEIVE RIGHT SENSOR L293D. Port pins P2.0 and P2.1 are used for OUTPUT 1f the right motor, while port pins P2.2 controlling STOP RIGHT WHEEL & MOVE RIGHT WHEEL and P2.3 are used for controlling the left motor. Three wheels can be used for this robot one on BOTH SENSOR RECEIVE the front and two at the rear. Front wheel can ro OUTPUT tate in any direction as specified by the rear wheel. To make the robot turn left, the left-side motor STOP should stop and the right-side motor should ro tate in the clockwise direction. Similarly, to make Fig. 6: Program flow<hart for automated line-following robot the robot turn right, the right-side motor should
342
Automated Line-Following Robot
stop
rotate in clockwise
and the left-side motor should rotate in clockwise direction. For forward motion, both the motors should direction.
Working
An actual-size, single-side PCB for the automated line-following robot is shown in Fig. 3 and its component lay out in Fig. 4. Fig. 5 shows the path of the line-follower robot, where 'L' is the left sensor and 'R' is the right sensor. At the start, when the robot is at point A,' sensors Tl and T2 are above the black surface and port pins P3.0 and P3.1 of the microcontroller receive logic '0.' As a result, die robot moves forward in straight direction. At point 'B,' a left turn is encountered, and the left sensor comes above the white surface, whereas the right sensor remains above the black surface. Port pin P3.0 of the microcontroller receives logic 'l'from the left sensor and port pin P3.1 receives logic '0' from the right sensor. As a result, the left motor stops and the right motor rotates, to make the robot turn left. This process continues until the left sensor comes above the black background. Similarly, at point 'C,' where a right turn is encountered, the same procedure for right turn is executed.When both the sensors are at the white surface, the robot should stop. The output of the microcontroller (IC2) depends on the inputs received at its port pins P3.0 and P3.1 as shown in table.
Software
The source program for the project is written in Assembly language and assembled using Metalink's ASM51 as sembler, which is freely available on the Internet for download. It is well commented for easy understanding and works as per the flow-chart shown in Fig. 6. The hex file 'robot.hex' is to be burnt into the microcontroller. Download source code: http://www.efymag.com/admin/issuepdf/Automated%20Line%20Following% 20Robot.zip
R0B0T.ASM
5MOD51
ORG OOOOH LJMP MAIN ORG 0030H SETB P3.0 ;Input for left sensor SETB P3.1 ;Input for right sensor JB P3 0 ,NEXT
NEXT:
MAIN:
AGAIN:
JB P3.1.G0
CLR P2.0
GOl :
GO:
HERE:
JB P3.1,G01 CLR P2.0 CLR P2.1 CLR P2.2 SETB P2.3 SJMP AGAIN CLR P2.0 CLR P2.1 CLR P2.2 CLR P2.3 SJMP AGAIN SJMP HERE
END
Microcontroller-Based Projects
343
ere we present a simple Arduino-board based robot that can be driven remotely using an RF remote control. This robot can be built very quickly in a small budget. The RF remote control provides the advan tage of a good controlling range (up to 100 metres with proper antennae) besides being omnidirectional.
Circuit description
The block diagram of the robot is shown in Fig. 1. It has two major sections: (a) transmitter and (b) receiver and motor driver. The transmitter circuit (Fig. 2) is built around encoder IC HT12E (IC1), 433MHz RF transmit ter module (TX1) and a few discrete components. The receiver and motor driver circuit (Fig. 3) is built around Arduino UNO board (BOARDl), decoder IC HT12D (IC2), 433MHz RF receiver module (RX1), motor driver IC L293D (IC3), regulator IC 7805 (IC4) and a few discrete components. Arduino UNO board. The heart of the robot is Arduino UNO board. Arduino is an Open Source electronics prototyping platform based on flexible, easy-to-use hardware and software. It is intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments. The Arduino Uno board is based on the ATmega328 microcontroller. It consists of 14 digital input/ output pins, six analogue inputs, a V USB connection for programming the on-board microcontroller, a RECEIVER ENCODER ARDUINO power jack, an ICSP header and a MOTOR UNO reset button. It is operated with a DRIVER to BOARD z 16MHz crystal oscillator. It con DECODER Zj> < SWITCH a. tains everything needed to support
<>'
IE
TX1
R1
NJ/
7 BATT1
9V
RF TRANS MITTER 12 3 4
Specifications
ATmega328
Microcontroller
Operating voltage Input voltage recommended
AO
18
16
-r
17
5V
A1
A2
Dout
TE
7-12V
6-20V 14 (of which six provide PWM output)
A3
A4
IC1 HT12E
14
13
AD11
AD10
A5
W3ai
u u
6
40 mA 50 mA 32 kB (ATmega328), of which 0.5 kB is used by bootloader 2 kB (ATmega328) 1 kB (ATmega328)
12
11
Q
A6
A7
AD9
AD8
[
EHB
10
[1 T
iavj]
DC current per I/O pin DC current for 3.3V pin Flash memory
16 MHz
344
Ml , M2 = 12V, 100RPM
GEARED MOTOR
M2i
0UT3
OUT4 OUT2
14
OUT1 3 4
5
13
IC3 L293D
HT12D
ANT.
V
BOARD1 ARDUINO UNO BOARD
7805
IN I
7805
BATT2 T 12V
OUT
12 3
COM.
I IOUT
RF RECEIVER
the microcontroller. It is very user-friendly; simply connect it to a computer with a USB cable to get started. The microcontroller on the board is pro grammed using the Arduino programming language and the Arduino development environment. Remote control. For controlling the robot remotely, Holteks'encoder-decoder pair (HT12E and HT12D) together with a 433MHz transmitter-receiver pair is used. HT12E and HT12D are CMOS ICs with working voltage ranging from 2.4V to 12V. Encoder HT12E has eight address and another four address/ data lines. The data set on these twelve lines (address fig. 4: An actual-size, single-side Fig. 5: Component layout for the and address/data lines) is serially transmitted when transmit-enable pin TE is taken low.The data output PCB for the RF transmitter PCB in Fig.4 appears serially on D(nr|, pin. The data is transmitted four times in succession. It consists of differing lengths of positive-going pulses for '1' and '0,' the pulse-width for '0' being twice the pulse-width for 'l.'The frequency of these pulses may lie between 1.5 and 7 kHz depending on the resistor value between OSCl and OSC2 pins. The internal oscillation frequency of decoder HT12D is 50 times the oscillation frequency of encoder HTl2E.1he HT12D receives the data from the HT12E on its D]N pin serially. If the address part of the data received matches the
|c|o o
ol
Microcontroller-Based Projects
345
levels on AO through A7 pins four times in succession, the valid transmission (VT) pin is taken high. The data on pins AD8 through AD11 of the HT12E appears on pins D8 through Dll of the HT12D. Thus the device acts as a re ceiver of 4-bit data (16 possi ble codes) with 8-bit address ing (256 possible channels).
Transmitter circuit.
Switches Si, S2, S3 and S4 are interfaced with AD8 through AD11 of encoder HT12E for forward (FWD), reverse (REV), Fig. 7: Component layout for the PCB in Fig. 6 left (LEFT) and right (RIGHT) motions, respec is R1 connected Resistor between oscillator tively. pins 15 and 16 to set the transmitter frequency. HT12E is permanendy enabled for transmission by connecting its TE pin to ground. When any switch, say, Si, is pressed, the corresponding data is serially trans mitted from Dqut pin through the RF ASK transmitter module. A 9V battery is used to power the circuit.
Receiver and motor driver circuit. Assuming that address pins on the encoder and the decoder are identical, when any of the switches on the trans mitter (marked as FWD, REV, RIGHT, LEFT) is
pressed, the corresponding data pin of the decoder goes low. The data outputs from D8 through Dll of HT12D (IC2) are fed to pins 2 through 5 of Arduino UNO board to generate appropriate logic outputs 8; from Fig. Author's prototype pins 8 through 11 of Arduino UNO board. Outputs from pins 8 through 11 of Arduino Uno board are fed to IN1through IN4 of L293D (IC3) to drive both the motors Ml and M2 as shown in Fig. 3. Outputs OUTl and OUT2 drive motor Ml, and outputs OUT3 and OUT4 drive motor M2. Enable pins EN1 (pin 1) and EN2 (pin 9) are connected to Vcc for always enabled output. Regulator 7805 (IC4) provides regulated 5V to the receiver.
Construction
An actual-size, single-side PCB for the RF transmitter (Fig. 2) is shown in Fig. 4 and its component layout in Fig. 5. The PCB for the receiver (Fig. 3) is shown in Fig. 6 and its component layout in Fig. 7. A suitable connector arrangement has been made on the RF receiver PCB in order to extend connections to the drive motors and the battery mounted on the chassis of the RF robot.
Software
The
code file (RFROBOT.INO) for this project is listed at the end of this article. The Arduino Uno is programmed with Arduino IDE software. The ATmega328 on Arduino Uno comes pre-burned with a bootloader
source
346
that allows you to upload new code to it without using an external hardware programmer. It communicates using the original STK500 protocol. You can also bypass the bootloader and program the microcontroller through the ICSP (in-circuit serial programming) header but using the bootloader makes the programming quick and easy. Select Arduino Uno from the ToolsBoard menu (according to the microcontroller on your board) in the Arduino IDE and burn the program through the standard USB port in the computer. Downloadsource code: http://www.efymag.com/admin/issuepdf/ArduinoRobot.zip
RFROBOT.INO
//RF Robot int swl =2; int sw2 =3;
int sw3 =4; int sw4 =5; int outl-8;
J
else if ( (digitalRead (swl) ==HIGH) && (digitalRead (sw2) ==HIGH) && (digitalRead (sw3) = =HIGH) &&
(digitalRead (sw4) ==LOW) ) { rgt ( ) ; )
pinMode (swl, INPUT) ; pinMode (sw2, INPUT) ; pinMode (sw3, INPUT) ; pinMode (sw4, INPUT) ; pinMode (outl ,OUTPUT) pinMode (out2, OUTPUT) pinMode (out3, OUTPUT) pinMode (out4 ,OUTPUT)
}
void fwd() { digitalWrite (outl, HIGH) ; digitalWrite (out2, LOW) ; digitalWrite (out3, HIGH) ; digitalWrite (out4, LOW) ;
}
void loopO
{
if ( (digitalRead(swl) ==LOW) && (digitalRead (sw2) ==HIGH) && (digitalRead (sw3> ==HIGH) &&
else if { (digitalRead (swl ) ==HIGH) && (digitalRead (sw2) ==LOW) && (digitalRead(sw3) ==HIGH) && (digitalRead (sw4 ) ==HIGH) )
(
bwk () ;
}
Microcontroller-Based Projects
347
Here
are:
Circuit description
Fig. 1 shows the block diagram for PC-based wireless control of a toy car. The different stages for wireless control
1. Transmission of the control signals from a PC's serial port 2. RF transmitter and receiver 3. Decoding of the received signals using the microcontroller 4. Motor drivers Asynchronous serial communication is established between the computer and P89V51RD2 microcontroller
through wireless RF link.The microcontroller and computer are both synchronised with each other. The baud rate of data transfer is 1200. Transmission of the controlsignalthrough PC's serialport. The first part of the project is transmission of control signals through the serial port of the PC. The control signals are W, S, D,A, Qj E, C, Z and U to control the toy car in forward, backward, right drift, left drift, sharp forward left turn, sharp forward right turn, sharp backward left turn, sharp backward right turn and stop, respectively. Each of the control signals is fed from the keyboard and sent through the serial com port. The signal is then transmitted wirelessly by the ASK transmitter module. PC's serial com port. There are many ports available at the base of your PC in order to send data to the con nected peripherals. Serial port, parallel port and USB port are some of the ports for connecting to the peripherals. The serial port transmits or receives the data serially (1-bit data perTX or RX clock pulse). It is based on IEEE RS-232 standard, which defines voltages and baud rates for serial communication between devices connected to it. Most desktop computers have an RS-232 serial port as it has a very simple circuitry and is cheap and easy to handle. Windows-based 9-pin serial port DB9 connector has the configuration as shown in Table I. The RS-232 standard serial port has nine pins having different functions for transmitting and receiving data. Of these, only three pins (pins 2, 3 and 5) are mostly used for sending and receiving data. Only pins 3 and 5 are used in this project. The RS-232 standard has specific voltage levels for data logic 0 and logic 1(-3 to -15V for logic 1,and +3 to +15V for logic 0). But the microcontroller defines logic 0 and logic 1by voltage TABLE 1 levels 0-0.5V and 4.5-5V, respectively. So you have to convert the RS-232 standard signal level Serial Port into the microcontroller signal level.For that purpose, we have used a MAX232 converter.
Pin
Functions
COMPUTER
TERMINAL
SERIAL PORT
AND CABLE
MAX232 CIRCUIT
TRANSMITTER BLOCK
RF TRANSMITTER
MODULE (434)
RFOUT
1 2 3 4
Data-carrier detect
Received data Transmitted data Data-terminal ready Signal ground Data-set ready Request to send Clear to send Ring indicator
5
RELAYS(RL1-RL4) DC MOTORS(M1-M4)
P89V51RD2 MICROCONTROLLER
RECEIVER BLOCK
RFIN
6 7 8
348
ON/OFF SWITCH S1
BATT 1 -t-
IN
IC2 7805
OUT
R 1,470!1
TRX-434
pni i UED1
2 COM
Vcc
-r-wwHi 1
-r-
o.im sran]
C2
C1
9V
10y,16V
o
TX
FIX
cc
hif"3. GND
15
C5
16
10M.16V
14
IC1
2 l-
2 ,o
S> Q.
8 s
O
IN 11MAX232 i
OUT
.<&
C4_
10p, 16V
t~
V V
{
\f\f\f\f\f\f\f\f\f\l .
i
SIGNAL
0
1
ON
1
ON DIGITAL
DATA
1
ON
t
OFF
OFF
\\ 1/\\ 11
V
\ A !
\ 1
\ 1
\\ 1 A 1/ V
\
For signal-level conversion, MAX232 re quires four capacitors (10|iF) and a SV supply. Since we are using 9V supply, a single voltage source voltage regulator IC 7805 is required to supply power to MAX232. Now, the serial port signal, which is at RS-232 logic, can be converted into 5 V TTL-level signal. The transmitter section built around MAX232 is shown in Fig. 2. RF transmission. Hie 5V supply from 7805 voltage regulator IC powers the RF ASK trans mitter module through its pin 3. This module actually collects the binary signal from the data pin (which is connected to the MAX232) and modulates this binary signal with amplitudeshift keying (ASK) digital modulation scheme by a carrier frequency of 434 MHz and transmits the data through the antenna. The concept of the ASK signal is shown in Fig. 3. RF reception. Hie ASK receiver module (Fig. 4) receives the 434MHz signal and demodulates it. The baseband signal is a 10-bit digital signal with the first bit as start bit, the following eight bits as data bits and the last bit as stop bit. The received data is sent to the microcontroller. The RXD pin (p3.0) of P89V51RD2 microcontroller is connected to the data pin of the 434MHz ASK module receiver. So the P89V51RD2 detects the transmitted data at its pin 10 (RXD). Decodingof the receivedsignal with P89V51RD2. The P89V51RD2 is an 80C51 microcontroller with 64kB flash, 1024 bytes of data RAM, 32 input/outT1-T4=SL100 D1-D4=1N4007
BATT,2 12V
S2
ON/OF
IC4 7805
2
OUT C6
0.1p.
J_
C7
10p 16V
SWITCH
COM >M
j
CD
emu S3
EAr 31
R4-R7 = 470Q
"t:
D1
N/O
N/C
Vcc
40
2
R5
D2
<
RX-434
T-CMCiTt
cm
:
IT)
N CO
< <
RST
R2
470Q
RXD 10 P3.0
cr CO T" D oI
Q.
CO
OJ
3 P1.2
I
O
~tr
N/O
p
N/C
RL2
-> o
T3
N/C=NORMALLY
CONNECT
&LED2
XTAL1
18
;8.2K
R3
11.0592MHz
C8L
33p
r p-j- 33py
HOI
C9
19
20
GND
D3~ T D4"
O
N/O
N/C
RL3
N/O
N/C
RL4
Microcontroller-Based Projects
349
BATT.2 12V
.
RL3
RL1
N/O
OEF ( MOTORS
V FRONT/
N/O
sML
N/C
Q1
p"
N/C
Q3
LE MOTOR
N/O
RL2
1,
N/C
RL4
pins for serial data transmission and reception. Timer 1 is used for serial communication. It is operated with an 11.0592MHz crystal. A key feature of the P89V51RD2 is its X2 mode option. You can choose to run the application with the conventional 80C51 clock rate (12 clocks per machine cycle) or select the X2 mode (six clocks per machine cycle) to achieve twice the throughput at the same clock
lel programming and in serial in-system programming (ISP). It is also in-application programmable (IAP), Q2 Q4 allowing the Flash program memory to be reconfigured M1-M4 = 12V, 50-RPM DC MOTOR even when the application is running. Fig. 5:Relay connections to motors In this project, timer 1 (TH1) is used in mode 2 (8bit auto-reload). It is used to set the baud rate. Here it is loaded with a value of E8 hex (or -24) and so the baud rate is set at START 1200. The SCON register is loaded with a hex value of 50, indicating serial mode 1, where 8-bit data is framed with a start bit and a stop bit. INITIALIZE After timer TH1 is set, it starts running until the P89V51RD2 SERIAL PORT microcontroller is made off. The P89V51RD2 waits until it receives a start bit. After receiving the start bit, it receives the 8-bit data and places the data in SBUF register. Then the framing error is checked. If there yr SERIAL " _ DATA is framing error, the byte received is discarded. Otherwise, the content NO \RECEIVED of SBUF is compared with the ASCII code of alphabets W, S, D, A, Qi E, C, Z and U.When a match is found, the operation related to each YES alphabet is executed. Then the toy car stops or moves in a particular STORE RECEIVED direction as per this value. DATA IN VARIABLE 'a' Driving the DC motors. Port pins pl.l through pi.4 of the micro controller drive four relays through a relay-driver circuitry comprising transistors Tl through T4. The four relays, in turn, control four motors of ASCII VALUE= the toy car (Fig. 5). Two relays control the forward and reverse rotations A/S/DA/V/Q/ NO \ E/C/Z/U / of a motor. The left two motors are connected in parallel and so are the YES two motors of the right. So two motors are controlled simultaneously using two relays. EXECUTE THE CODE CORRESPONDING TO Each of the four relays is 12V, single-changeover electromagnetic type MATCHED ASCII VALUE to control the PMDC motor (12V, 50-rpm).Thc relays play an important role in isolating the controlling circuit and PMDC motors to protect the microcontroller and other low-current devices from the relatively Fig. 6: Flow-chart of the program high-current-driven motors. Basically, these are switches that connect or disconnect the motors from the 12V supply. Control signals from the microcontroller energise or de-energise the relays. That is, when a control signal makes a pin of P89V51RD2 high, the transistor connected to it conducts to energise the corresponding relay. Here +12V terminal of the battery is connected to normally-open (N/O) contacts of all the relays and the ground terminal is connected to normally-closed (N/C) contacts of the relays. This means when all the relays are not energised, positive and negative terminal ends of all the motors connect to the ground terminal of the battery, so the motors will not rotate. If all the relays energise, ends of the motors connect to +12V and the motors don't rotate. If any of the relays energises, one end of the respective motor con nects to +12V and the other end to the ground. This makes the motor rotate. Energisation of the relay decides clockwise or anticlockwise movement of the motor.
N/C
BACK
350
Ql output from the microcontroller is fed to the base of transistor Tl. When Ql is high, transistor Tl conducts and relay RL1 energises to make the pole (P) shift towards (53 N/O contact. This connects +12V to the positive terminal = Cafe Amt of motor Ml on the front left of the toy car (refer Fig. 5). M When Q2 output is high, transistor T2 conducts and relay RL2 energises to make P shift towards N/O contact. This connects +12V to the positive terminal of motor M2 on the left back of the car. r h When Q3 output is high, transistor T3 conducts and Mar M r CMlnri relay RL3 energises to make P shift toward N/O contact. **i [ !*! ; This connects +12V to the positive terminal of motor M3 on the right front. 3 When Q4 output is high, transistor T4 conducts and ' window Fig. 7: Screenshot of 'Options for Target I relay RL4 energises to make P shift toward N/O contact. This connects +12V to the positive terminal of motor M4 'rugae i' Build linklag. . the back. on tit rigl c<*e-29$ Feo9TM Sixes data-il.D
iyinw !< Uipfi
'*<
iart r
|imcw! utm: u
m I
Mi
'I I I'
forward when all the motors move clockwise. To achieve this, the out put logic at Ql, Q2, Q3 and Q4 should be high (1), low (0), high (1) and low (0), respectively. Character 'W' is defined in the code to give obi m> 1010 bits in the output. That is, when you type 'W' character from the * j to rn fci EiMiBBIW i keyboard, the microcontroller generates 1010 bits at its port pins pl.l through pl.4.This signal is sent to relay-driver section Tl through T4. 'S' backward movement (Ql-0, Q2=l, Q3-0, Q4=l). Backward movement takes place when all the motors move anticlockwise. So signal 0101 is sent to relay-driver section Tl through T4. Character 'S' is defined in the code to give 0101 bits in the output. 'D' right drift (Qt=l, Q2=0, Q3=l, Q4-0 (for 54 msj and Ql=l, r Q2=0, Q3=0, Q4=0 (for 108 ms)). Right drift is possible by rotating the r ri Gintouck left motors at a high speed and the right motors at a low speed. This is r NV'W N possible with the pulse-width-modulated (PWM) pulse given to the right motors. The right motors are given a pulse train of 33 per cent duty cycle so that these rotate at one-third the speed of the left motors. Fig. 9: Screenshot of 'Flash Magic'window The car takes a right turn in forward direction resulting in a drift. So signal 1010 is sent for 54 ms and a signal of 1000 for the next 108 ms to transistors Tl through T4. Character 'D'is defined in the code to generate the 1010 and 1000 signals with 54 ms and 108 ms delays, respectively. A' left drift (Ql=l, Q2=0, Q3=l, Q4=0 (for 54 ms) and Ql-0, Q2-0, Q3=l, Q4=0 (for 108 ms)). Left drift is possible by rotating the right motors at a high speed and the left motors at a low speed. This is possible with the PWM pulse given to the left motors. The left motors are given a pulse train of 33 per cent duty cycle so that these rotate at one-third the speed of the right motors.The car takes a left turn in forward direction, resulting in a drift. So signal 1010 is sent for 54 ms and signal 0010 for the next 108 ms to transistors Tl through T4. Character 'A' is defined in the code to generate 1010 and 0010 signals with 54ms and 108ms delays, respectively. Q sharp-forward left turn (Q1=0, Q2=0, Q3=l, Q4=0). The toy car moves to the left sharply in the forward direction when the left motors are static and the right motors move clockwise. So signal 0010 is sent to transistors Tl through T4. Character 'Qjs defined in the code to generate 0010 bits in the output. E'sharp-forward right turn (Ql=l, Q2=0, Q3=0, Q4=0). The car moves to the right sharply in the forward direction
Microcontroller-Based Projects
ling the toy car Controll 'Wforward movement (Ql=l, Q2=0, Q3=l, Q4=0). The toy car moves
351
s_a
Fig. 10:An actual-size, single-side PCB of the transmitter circuit
o
o
q:
BflTT. 1
9UI
SI
ON/OFF
7805
oe
C3
a dd
O
IcP
oici
O R1
when the left motors move clockwise and the right motors are static. So signal 1000 is sent to transistors Tl through T4. Char acter 'E'is defined in the code to generate 1000 bits in the output. 'C'sharp-backward left turn (Ql=0, Q2=0, Q3=0, Q4=l). Sharp left turn takes place when the left motors are static and the right motors move anticlockwise. The car moves to the left sharply in the backward direction. So signal 0001 is sent to transistors Tl through T4. Character 'C' is defined in the code to generate 0001 bits in the output. 'Z' sharp-backward right turn (Ql=0, Q2=l, Q3=0, Q4=0). The car moves to the right sharply in the backward direction when the left motors move anticlockwise and the right motors are static. So signal 0100 is sent to transistors Tl through T4. Character 'Z' is defined in the code to generate 0100 bits in the output. 'U' stop (Q1=0, Q2=0, Q3=0, Q4=0). To stop the car, all the motors should be static. This is achieved by sending signal 0000 to the output of the microcontroller at its port pins pl.l through pi.4. Character 'U' is defined in the code to generate 0000 bits in the output to stop the toy car.
CJ
2= O
10U'
a a
i
C2l 10
U
10U
Ct,
CI I
Software program
Fig. 6 shows flow-chart of the program.The program is written in 'C' and compiled using Keil C software. The hex code gener ated using Keil software is burnt into the chip using Flash Mag ic programming software from NXP (Philips) Semiconductors. Keil C fiVision3 operations. 1. Run Keil pVision3 ap plication from the desktop. From 'Project' menu, select 'New Project' option. Name the project as 'efytoy.uv2' and save it.
2. Select microcontroller P89V51RD2 from the database under NXP (Philips) option. 3. Right-click 'Source Group 1' option in 'Project Workspace' window on the left-hand side of the screen. Click 'Add Files to Source Group 1' option to add the toycar.c file. 4. Right-click 'Target 1'option from 'Project Workspace' and select 'Options for Target l.'The window appears as shown in Fig. 7. 5. Change the Xj.AL (MHz) value to 11.0592 as used in the project. Click 'Output' menu and tick the button against 'Create HEX File' option. 6. Now close the window and go to the main window. Compile the project by clicking 'BuildTarget' option. The program will be com piled with the message as shown in Fig. 8.
POUER/701"
LEIIlf _I LJ
CD
352
RX-43-1
oooo
-
VoeOwvO
JJE2fl
J1
091OB
O
C9
BflBBflBBBBBflBBBBflBBBB
D83U51 DD?
33p <e\Km
333,
11.0592MHz
Now, the efytoy.hex code will be generated in the directory where the project file efytoy.uv2 is located. This hex code is used for programming the chip.
XTAL1
(370- 0 L100
R4-R7=470E T4
lo.iu
BBOOOBOBOBOOBBOOBBOB
SJ SL100
R3
o o
qH)P o 4)Po
jjJD
0-PP
SL100
O v -T2RL1
SL100
L
i loinoi
09100
CON:
lOlGOl
N/OPN/C
C0N3IQIBIQI
P89V51RD2 and 'Erase all Flash' option as shown in Fig. 9. 2. In the 'Advanced Option,' uncheck 'Use DTR to control RST and 'Assert DTR and RST while COM port open' options. 3. Browse the efytoy.hex file from your PC and load it onto the main screen. Press 'Start' button to , ,. program the chip.
1
Semiconductors: IC1
PARTS LIST
An actual-size, single-side PCB of the transmitter circuit is shown in Fig. 10 and its component layout in Fig. 11.An actual-size, single-side PCB of the receiver circuit is shown in Fig. 12 and its component layout in Fig. 13. T1-T4 - SL100 npn transistor TX-434 - 434MHz RF transmitter Burn the code into P89V51RD2 and mount the components on module the receiver PCB. RX-434 - 434MHz RF receiver module Mount the populated PCB, 12V battery and four motors on a suit D1-D4 - 1N4007 rectifier diode LED1, LED2 - 5mm light-emitting diode able chassis, preferably a 20x15cm2 metal chassis. Use proper nuts and bolts to fix them firmly on the chassis. Four wheels, each of 7cm dia., Resistors (all 'A-watt, 5% carbon): Rl, R2, R4-R7 - 470-ohm are attached to shafts of respective motors. R3 - 8.2-kilo-ohm After mounting the components on the transmitter PCB, connect Capacitors: the circuit to the serial port of the computer using a serial cable. Ifyour C1,C6 - 0. 1(jF ceramic PC has a USB port only, you may use a USB-to-serial converter. Now C2-C5, C7 - lOpF electrolytic C8,C9 - 33pF ceramic switch on the 9V power supply using switch SI. Miscellaneous: Before sending the data from your computer, check which com port is oscillator connected to the circuit. Set the baud rate of the com - 11.0592MHz crystal port to 1200, stop bit ' - 9V PP3 battery bAVt.i 1 and Go from your desktop to data bits 'Device 8. to to to Manager' option BA'rr.2 - 12V, 4.5Ah, rechargeable do diese settings. Now run a serial communication software such as Termi SMF battery SI, S2 - On/off toggle switch nal vl.9b, select the com port and make the afore-mentioned settings. After S3 - Tactile switch completing all the settings and component assembly, switch on the power - 12V, single-changeover relay RL1-RL4 supply to the transmitter and receiver circuits. Run Terminal vl.9b software M1,M2 - 12V, 50-rpm DC motor - Whip antenna and activate the connection by pressing 'Connect' button followed by W, S, - 9-pin D-type female D,A, QiE, C, Z or U key on the keyboard.The ASCII code corresponding connector to that key will be transmitted serially in a 10-bit (1 start bit+8 data bits for - Metal chassis ASCII code+1 stop bits) binary datastream.The toy car will move as per the - Nuts and bolts input from the keyboard. Downloadsource code: http://www.efymag.com/admin/issuepdf/PC-Based_Wireless_Control_for_Toy_car.zip
converter
Microcontroller-Based Projects
353
TOYCAR.C
2(Q2) 3<Q3) 4 IQ4) char) /unsigned char RX (void) ; void RXDATA (unsigned void void AO; void SO;void DO;void MSDELAY (unsigned char) ; W(); void Z();void CO; void U();void E();void QO;
#include<reg51 h> sbit mla = PIA1 ;//output sbit mlb = P1A2; //output sbit m2a = P1A3; //output P1A4 ;//output sbit n*i2b
I
1(Q1)
P1=0; mlb-1;
m2b-l;
}
void AO
//Left drift
unsigned char i;
Pl-0; m2a=l; for (i=0; i<=9; i++) //PWM for 1/3 duty cycle { mla-1; MSDELAY (15) ; rnla=0; MSDELAY (30) ;
) P1=0; )
void main (
{
unsigned char a;
SCON"OX5();
TMOD=0X20; THl=-24;
TR1-1;
PC()N=0X40; P1=OXOO;
while (1)
{
void W ( )
//Forward movement
Pl-0;
mla=l; m2al ; )
<
void U ( )
{ P1=0; }
//Stop
switch (a)
{
case( *A' ) A( );
:
void E()
{
break;
case ( %S' ) :
S( ); break;
P1=0;
mla-1; }
case ( %D' ) :
D( ); break;
void Q( )
case ( *W'
)
W( );
break;
P1=0; m2a=l; }
case ( XQ*
Q( );
) i
break;
case ( *E' ) :
E( );
break;
case ( %U' ) :
U( ); break;
void C()
case ( %C' ) :
{ P1=0; mlb-1; }
C( );
break;
case ( XZ' ) :
Z ();
unsigned char
{
break;
}
EMERGENCY :
RI=D;
D( )
void
{
//Right drifts
unsigned char i;
P1=0;
i
ra2a=l; MSDELAY (15) ; ra2a=0; MSDELAY (30) ;
)
//Delay of 3.6Ms
P1=0;
)
void
//Backward movement
354
An
GROUP
Monthly Statistics
Page Impressions:
750,000+
hii Piwsr
BETA
electronicsforu.com
If it's electronics, it's here
For any queries, please contact our team at [email protected] OR +91-11-26810601
EFYGROUP
Technology Drives Us
EFY Enterprises Pvt. Ltd, D-87/1, Okhla Industrial Area, Phase 1, New Delhi 110020 Ph: 011-26810601/2/3; E-mail: [email protected] Website: www.efyindia.com