You are on page 1of 66

1

Mc lc
M u .......................................................................................................................................................... 2
1 Gii thiu vi x l AVR ............................................................................................................................ 3
2 Mt s phn mm, thit b h tr cho vic lp trnh AVR..................................................................... 5
2.1 Phn mm CodeVision ...................................................................................................................... 5
2.2 Phn mm m phng Proteus ........................................................................................................... 5
2.3 Mch np v phn mm np ............................................................................................................ 6
3 ng dng ca vi x l ATmega16 ............................................................................................................ 7
3.1 iu khin I/O (In/Out)..................................................................................................................... 7
3.2 Ngt ngoi (Interrupt) ....................................................................................................................... 8
3.3 Timer/Counter ................................................................................................................................... 9
3.4 iu khin rng xung PWM ................................................................................................... 11
3.4.1 Khi nim rng xung ............................................................................................................ 11
3.4.2 To PWM bng ATmega16 ....................................................................................................... 11
3.5 Chuyn i ADC .............................................................................................................................. 14
3.6 Giao tip USART ............................................................................................................................. 16
3.6.1 Cc thut ng c dng trong giao tip USART ..................................................................... 16
3.6.2 Giao tip USART trn ATmega16 ............................................................................................ 17
4 Cc bi tp v d ...................................................................................................................................... 19
4.1 Lp trnh iu khin thit b ngoi (Led, ng c) ................................................................... 19
4.1.1 Phn tch mch in ................................................................................................................... 19
4.1.2 Xy dng nguyn l iu khin ................................................................................................. 19
4.1.3 M phng trn Proteus............................................................................................................... 21
4.1.4 Lp trnh cho vi x l ................................................................................................................ 22
4.1.5 Chy th trn mch m phng ................................................................................................... 29
4.2 Lp trnh ngt ngoi (INT) ............................................................................................................. 31
4.2.1 Phn tch mch in ................................................................................................................... 31
4.2.2 Nguyn l iu khin v xy dng mch m phng trn Proteus.............................................. 31
4.2.3 Lp trnh cho vi x l ................................................................................................................ 32
4.3 Lp trnh Timer/Counter................................................................................................................ 35
4.3.1 Phn tch, xy dng nguyn l iu khin v mch m phng .................................................. 35
4.3.2 Lp trnh cho vi x l ................................................................................................................ 35
4.4 iu khin rng xung PWM ...................................................................................................... 42
4.4.1 Phn tch mch in ................................................................................................................... 42
4.4.2 Nguyn l iu khin ................................................................................................................. 42
4.4.3 Xy dng mch m phng trn Proteus ..................................................................................... 43
4.4.4 Lp trnh cho vi x l ................................................................................................................ 43
4.5 Chuyn i ADC .............................................................................................................................. 46
4.5.1 Phn tch mch in ................................................................................................................... 46
4.5.2 Nguyn l iu khin v mch m phng trn Proteus ............................................................. 47
4.5.3 Lp trnh cho vi x l ................................................................................................................ 49
4.6 Truyn nhn d liu vi my tnh.................................................................................................. 58
4.6.1 Phn tch mch in ................................................................................................................... 58
4.6.2 Nguyn l iu khin v mch m phng ................................................................................. 58
4.6.3 Lp trnh cho vi x l ................................................................................................................ 59
Ph lc ......................................................................................................................................................... 64

2
M u
Hin nay cc vi x l, hay vi iu khin (MCU Micro Controller Unit) ang c s
dng rng ri trong nhiu knh vc nh: iu khin, t ng ha, o c, truyn thng So
vi cc phng php iu khin, o c truyn thng (c kh, in t tng t), th s
dng vi x l c cc u im nh: nh gn, t tn nng lng, thi gian p ng nhanh, c
th lp trnh c
Vi x l h AVR ca hng ATMEL hin ang c s dng tng i ph bin. Vi x
l h AVR l cc vi x l lp trnh c. Sau khi c lp trnh, vi x l s hot ng theo
thut ton c vit trong lp trnh ca ngi dng. Nh vy ngi dng c th lp trnh cho
vi iu khin hot ng theo ca mnh gii quyt mt cc bi ton (iu khin, o
c).
Trong lp trnh cho vi iu khin, thng s dng ngn ng lp trnh C v c lin quan
ti cu trc ca vi x l, ngi c cha c hc v ngn ng lp trnh C hoc cu trc
vi x l c th d dng theo di, nhng phn s c din gii theo cch cng n gin
cng tt. Nh vy ngi c c th theo di ti liu m khng thy qu kh hiu, tuy nhin
cng v th nn cc kin thc c trnh by khng y v ch mc c bn nht,
ngi c c th nhanh chng t lp trnh c mt s ng dng c bn vi vi iu khin
AVR.

3
1 Gii thiu vi x l AVR
AVR l tn gi chung cc vi x l ca hng ATMEL. Hng ATMEL sn xut cc vi x
l vi cc chc nng, kh nng tnh ton khc nhau, c t tn khc nhau: ATtiny25,
ATtiny48,ATmega8, ATmega16, ATmega128
Cc vi x l khc nhau th khc nhau v dung lng b nh ROM, RAM, cc khi chc
nng, s lng chn Trong ti liu ny, cc hng dn v v d c vit cho vi x l
ATmega16. S chn, cc khi chc nng v cch s dng, c tnh lm vic ca vi l
c nh sn xut ghi trong file datasheet km theo, c th tm trn internet.

Hnh 1: Vi x l ATmega16

Cc vi x l c lp trnh bng ngn ng lp trnh (trong ti liu ny s dng ngn ng


lp trnh C) nh cc phn mm (AVRStudio, CodeVision).
Cc vi x l u c chung mt s c tnh in khi lm vic nh sau:
in p lm vic l +5V.
Dng in qua cc chn ca vi x l nh (c vi chc mA), nn khng th u
trc tip vi iu khin vi cc thit b cng sut ln (ng c).
Vi x l Atmega 16 c 2 kiu ng gi khc nhau, loi ng gi nh hnh sau l loi
thng, ph bin nht, 40 chn theo s :

Hnh 2:S chn ca Atmega16

Tt c cc chn ca ATmega16 c nh s th t t 1 n 40 nh hnh v, chiu ca


vi x l c ly theo u lm hoc chm trn trn vi x l.
Khi lm vic, cc chn ca vi iu khin c hai mc trng thi l 0 v 1. Trng thi 0
ng vi mc in p 0 V cn trng thi 1 ng vi mc in p +5V.

4
Chc nng ca cc chn trn vi x l ATmega16 nh sau:
Chn 10 VCC: L chn cp ngun +5V cho vi x l.
Chn 11 v 31 GND: L hai chn ni vi ngun m. Khi thit k mch, phi
ni c hai chn 11 v 31 vi ngun m.
Chn 9 RESET: Bnh thng chn 9 trng thi 0, khi cp in +5V vo chn
RESET, trng thi ca n t 0 ln 1, v reset li ton b hot ng ca vi x l,
tng ng vi vic ngt ngun nui vi x l ri cp ngun li.
Chn 12 XTAL1 v 13 XTAL2: L hai chn ni vi thch anh. Thch anh l
mt linh kin c tc dng to dao ng in, vi x l s hot ng theo cc dao
ng ny (v d 4Mhz, 12 Mhz). Trong mt s trng hp c th dng thch
anh c gn sn trong vi x l, hai chn XTAL1 v XTAL2 c b trng.
Chn 30 AVCC: L chn cp ngun cho khi chuyn i ADC (Analog to
Digital Converter). ACD l mt chc nng ca vi x l, cho php o in p t
ti chn 33, 34, , 40 ca vi x l. Xem thm mc Chuyn i ADC.
Chn 32 AREF: in p tham chiu. Chn AREF c s dng khi cn dng
chc nng ADC ca vi iu khin. Khi cn dng chc nng ADC, ngi dng
cn t vo chn AREF mt in p, gi l in p tham chiu. Xem thm mc
S dng ADC.
Cc chn 1 8: c nhm chung thnh mt cng, gi l PORT B, tng chn
trong Port B c k hiu PB0, PB1, , PB7 ng vi cc chn t 1 n 8. Cc
chn ny c th m nhim cc chc nng khc nhau, ty vo thit lp ca ngi
dng khi lp trnh.
Cc chn 14 21: c nhm chung thnh mt cng, gi l PORT D, tng
chn trong Port D c k hiu PD0, PD1, , PD7 ng vi cc chn t 14 n
21. Cc chn ny c th m nhim cc chc nng khc nhau, ty vo thit lp
ca ngi dng khi lp trnh.
Cc chn 22 29: c nhm chung thnh mt cng, gi l PORT C, tng
chn trong Port C c k hiu PC0, PC1, , PC7 ng vi cc chn t 22 n
29. Cc chn ny c th m nhim cc chc nng khc nhau, ty vo thit lp
ca ngi dng khi lp trnh.
Cc chn 33 40: c nhm chung thnh mt cng, gi l PORT A, tng
chn trong Port A c k hiu PA0, PA1, , PA7 ng vi cc chn t 1 n 8.
Cc chn ny c th m nhim cc chc nng khc nhau, ty vo thit lp ca
ngi dng khi lp trnh.
Tm tt 1
Vi x l ATmega16:
L vi x l lp trnh c.
in p lm vic +5V, dng nh.
C 4 port l Port A, Port B, Port C, Port D. Mi port c 8 chn, c th m
nhim cc chc nng khc nhau.

5
2 Mt s phn mm, thit b h tr cho vic lp trnh AVR
2.1 Phn mm CodeVision
Phn mm CodeVision l phn mm h tr lp trnh cho vi x l AVR bng ngn ng
C. Cch s dng c th CodeVision c vit trong cc v d trong ti liu.

Hnh 3: Giao din CodeVision

2.2 Phn mm m phng Proteus

Hnh 4: Giao din Proteus

Proteus l phn mm m phng mch in trn my tnh, c giao din trc quan, vi cc
linh kin in t c sp xp trn mn hnh v c ni dy, t cc thng s c th chy
th mch in trn my tnh.
Proteus c sn rt nhiu cc linh kin in t c th tm thy trn th trng, bao gm c
cc vi x l AVR. Cc lnh theo ngn ng C sau khi c vit bng CodeVision c th c
a vo Proteus chy vi x l AVR tng ng. Dng Proteus ta c th kim tra xem lp
trnh vit trong CodeVision ng hay cha, nh vy khng cn thit phi th trn mch
tht, tit kim thi gian, tin bc.
Tuy nhin do l m phng trn my tnh, nn mt s phn quan trng trong mch thc
(ngun in, s tng thch v cng sut gia cc phn t) khng c tnh n, dn ti
mch in m phng ch c gi tr tham kho, kim tra nguyn l hot ng trc khi tin
hnh lm mch tht.

6
2.3 Mch np v phn mm np
Sau khi th trn Proteus, v lm mt mch in tht bn ngoi c vi x l AVR, cho
vi x l AVR chy c nhng g lp trnh, phi np chng trnh cho n (gn ging nh
ci phn mm cho my tnh), mun lm iu chng ta cn mch np v phn mm np.
Mch np l mt mch in ni gia vi x l v my tnh, cn phm mm np c ci
trn my tnh iu khin mch np. Sau khi np, chng trnh chng ta vit bng
AVRStudio s c nh trong b nh ca vi x l, v vi x l s hot ng theo nh chng
trnh .
Tm tt 2
Lp trnh bng ngn ng C cho vi iu khin AVR bng phn mm
CodeVision hoc AVRStudio.
Chy m phng vi x l trn my tnh kim tra bng phn mm Proteus.
Np chng trnh cho vi x l bng mch np v phn mm Khazama.

7
3 ng dng ca vi x l ATmega16
Cc chc nng c bn ca vi x l ATmega16 s c trnh by trong ti liu gm c:
Chc nng I/O (In/Out).
Ngt ngoi (INT INTerrupt).
m thi gian (Timer/Counter).
iu khin rng xung (PWM Pulse Width Module).
Chuyn i ADC (Analog to Digital Converter).
Truyn nhn d liu vi my tnh (USART Universal Synchronous and
Asynchronous serial Receiver and Transmitter).
Cn cc chc nng khc ca ATmega16 nh SPI, s khng c trnh by y.
3.1 iu khin I/O (In/Out)
iu khin I/O, hay cn gi l iu khin Vo/Ra, l mt chc nng c bn nht ca vi
x l. Chc nng I/O cho php ngi lp trnh gn trng thi 0 hoc 1 (ng vi mc in p
0V v +5V tng ng) cho mt hoc nhiu chn trong cc Port A, B, C hoc D. Ni cch
khc, ngi lp trnh c th iu khin in p ti mt chn bt k trong s 4 port mc 0V
hoc +5V.
Vi chc nng In/Out, vi x l c th iu khin bt/tt trc tip hoc gin tip cc thit
b ngoi nh n Led, ng c in
Nu mun s dng mt chn no trong s cc port A, B, C hoc D (chng hn nh
chn PB6), khi lp trnh ngi dng phi thit lp chc nng I/O cho chn PB6. Cch thit
lp s c trnh by trong v d Lp trnh iu khin thit b ngoi.
Tm tt 3.1
Dng chc nng I/O iu khin trng thi cc chn vi x l.

8
3.2 Ngt ngoi (Interrupt)
Ngt (Interrupt) trong AVR, bao gm c ngt ngoi, l mt tn hiu khn cp gi n b
x l, yu cu b x l dng cc cng vic hin ti (A) thc hin mt vic no (B). Sau
khi khi kt thc B, b x l s quay v lm tip vic A ang dang d. Tn hiu khn cp
c th n t bn trong vi x l (t b Timer, USART) hoc t bn ngoi (nhn mt nt
bm).
Ngt ngoi l loi ngt duy nht c lp vi cc thit b ca vi x l, v tn hiu ngt n
t bn ngoi, v d nh khi ngi dng bm mt nt bm bn ngoi
Trn Atmega16 c ba b ngt ngoi, ng vi cc chn 16 (PD2), 17 (PD3) v chn 3
(PB2), k hiu ln lt l INT0, INT1 v INT2.
Hnh sau th hin mt tn hiu ngt to ra bng mt button (nt bm) ti ngt INT0.

Hnh 5: Tn hiu ngt

Vi mch in button nh hnh trn, khi cha nhn nt, in p t trn chn INT0 gn
bng +5V. Khi nhn nt, chn INT0 c ni vi GND nn in p chn INT0 lc ny l 0V.
Sau khi nh nt, in p chn INT0 li tr v +5V.
Qu trnh in p chn INT0 gim nhanh t gn +5V xung 0V gi l Falling Edge
(cnh xung), cn qu trnh in p tng t 0V ln +5V gi l Rising Edge (cnh ln). Ngi
dng c th lp trnh cho ngt INT0 hot ng khi xy ra Falling Edge, Rising Edge hoc c
hai.
Nu chn Falling Edge, ngt xy ra khi va nhn xong nt.
Nu chn Rising Edge, ngt xy ra khi nh xong nt.
Nu chn c Falling Edge v Rising Edge, ngt s xy ra 2 ln khi va nhn xong
nt v sau kh nh xong nt.
Cch kch hot chc nng ngt ngoi INT0, INT1 hoc INT2 v cch la chn cnh
xung/cnh ln c hng dn trong v d Lp trnh ngt ngoi.
Ngt ngoi thng dng thc hin giao tip gia ngi v vi x l (thng qua thao
tc nhn nt), hoc c th dng m s kin bn ngoi (v d nh s sn phm i qua cm
bin)
Tm tt 3.2
ATmega16 c 3 ngt.
Ngt theo cnh xung, cnh ln hoc c hai.

9
3.3 Timer/Counter
Timer/Counter, hay cn gi l b m thi gian, b nh thi c chc nng m, hoc
nh ra mt khong thi gian v c m s kin. Trn mt s vi x l, timer/counter cn c
thm chc nng iu chnh rng xung (PWM). Trn ATmega16 c 3 b timer/counter,
gi tt l T/C0, T/C1,T/C2.
Cc b T/C hot ng bng cch m s xung dao ng ca thch anh nui vi x l theo
t l (Prescale) 1:1 hoc 1:8,... Thch anh, nh ni phn 1, to ra dao ng vi x l
hot ng. Mi linh kin thch anh c mt tn s dao ng nht nh (v d 4 Mhz,
12Mhz). Mi chu k dao ng ng vi mt khong thi gian t nh, bng cch m cc
dao ng ny, cc b T/C c th nh ra cc khong thi gian khc nhau. V d vi thch anh
1Mhz, th chu k dao ng l:
1
t =
= 106 ( s) = 1( s)
6
1.10
Nu mun xc nh mt khong thi gian 1ms = 1000 s , b T/C s phi dng mt bin
m m 1000 ln. Cc bin m c t tn l TCNT0, TCNT1 hoc TCNT2 ty
theo b T/C0, T/C1, T/C2 tng ng.
Cc bin m TCNT c lu trong vi x l bng 8 hoc 16 bit (bit l cc nh trong vi
x l v ch c hai trng thi 0 hoc 1, t hp ca cc bit ny s tng ng vi gi tr ca
bin TCNT theo h nh phn). Thng dng tn gi T/C 8 bit hoc T/C 16 bit chnh l ni ti
s bit dng lu gi tr ca bin TCNT.
V s bit b gii hn, nn kh nng m ca bin TCNT b gii hn (vi 8 bit, c th m
ti a t 0 n 255), dn ti khong thi gian xc nh c nu m trc tip s dao dng
ca thnh anh cng b gii hn.
Gii php a ra l m theo t l (prescale) ni trn. Thay v m mi dao ng
mt ln, nu m theo t l, v d 1:8, th c 8 dao ng ca thnh anh, T/C mi m mt ln,
tc l gi tr TCNT tng thm 1.

Hnh 6: m theo t l 1:1 v 1:8

Nh vy vi v d trn, nh c khong thi gian 1ms, b T/C ch cn m:


1000
= 125 (ln)
8
Lc ny bin m TCNT ch phi chy, v d nh t gi tr ban u 131 ti gi tr ti a
255 ( 125 ln m). Khi bin TCNT ti gi tr 255, th s c reset v gi tr ban u
m tip, ng thi xy ra ngt. Do vy tn hiu ngt ca T/C l khi bin TCNT ti gi tr cc
i, v ngt c T/C to ra gi l ngt trong.

10
Cch chn t l, gi tr ban u, gi tr ti a v cc thit lp lin quan khc ca T/C s
c trnh by trong v d Lp trnh Timer/Counter.
Tm tt 3.3
Timer/Counter (T/C) to ngt trong theo cc qung thi gian nh trc.
ATmega16 c 2 T/C 8 bit v 1 T/C 16 bit.
Bin m TCNT v t l Prescale.

11
3.4 iu khin rng xung PWM
3.4.1 Khi nim rng xung
hiu khi nim rng xung, ta xt mch in n gin sau y:

Hnh 7: Mch in v d rng xung

Mt ng c c mc ni tip vi mt nt bm nh hnh v. Nu ta bm nt, ng c


s chy, nh nt, ng c s dng. in p gia hai u ng c c dng xung nh trn hnh
7. Nu nhn, nh nt bm theo chu k, th in p hai u ng c cng thay i theo chu k,
lc ny s c khi nim Time Period v Duty Cycle. Duty Cycle l thi gian in p mc
+5V, cn Time Period l chu k ca xung, bao gm Duty Cycle v thi gian in p bng 0V
cn li.
Nu gim Duty Cycle, th ng c chy chm li. Ngc li, nu tng Duty Cycle th
ng c chy nhanh ln. Duty Cycle gim ti thiu bng 0 v tng ti a bng Time Period.
iu chnh rng xung chnh l iu chnh Duty Cycle, v i khi l c Time Period.
3.4.2 To PWM bng ATmega16
V iu chnh rng xung l iu chnh thi gian Time Period v thi gian Duty Cycle,
v vy c th dng T/C to PWM.
Vi x l ATmega16 c th to cng lc 4 tn hiu PWM, gi l 4 knh PWM ti cc
chn nh hnh sau:

Hnh 8: V tr cc chn c th dng to tn hiu PWM

Trong PWM0 do T/C0 to ra, PWM1A v PWM1B d T/C1 to ra, PWM2 do T/C2
to ra. Mun to PWM no th ta cn phi thit lp T/C tng ng.

12
d hiu hy ly v d mun to tn hiu PWM ti chn PD4 (PWM1B), ta phi dng
T/C1 v thit lp cho T/C1 ch to PWM. T/C1 l timer/counter 16 bit, do bin
TCNT1 c th m ti gi tr MAX l 65535.
tng y l bin TCNT1 chy t 0 ti gi tr OCR1B, sau chy tip ti gi tr
ICR1. Trong OCR1B l mt gi tr do ngi dng t trc ng vi khong thi gian
Duty Cycle. Gi tr ICR1 cng l mt gi tr do ngi dng t trc nhng ng vi Time
Period. Nh vy khi bin TCNT1 chy t 0 qua OCR1B ti ICR1, in p trn chn OC1B s
thay i theo Duty Cycle v Time Period tng ng.
T/C1 c 3 ch hot ng to PWM l:
Fast PWM (PWM tn s cao).
Phase correct PWM (PWM vi pha chnh xc).
Phase correct and frequency correct PWM (PWM vi pha v tn s chnh xc).
Ba ch trn khc nhau cch tnh Duty Cycle v sai s iu khin. Trong ti liu ny
s gii thiu hai ch thng dng nht l Fast PWM.
Fast PWM:
Hot ng ca T/C1 ch to Fast PWM c th c biu din qua th di:

Hnh 9: Ch Fast PWM

Max l gi tr cc i m bin TCNT1 c th m c, vi T/C1 l Timer/Counter 16


bit nn Max = 65535. Khi thit lp cc gi tr cho OCR1B v ICR1 khng c vt qu gi
tr Max ny.
ch Fast PWM bin TCNT1 m xung thch anh theo t l Prescale nh trc,
chy t 0 ti OCR1B, lc ny in p trn chn OC1B l +5V. Khi TCNT1 chy t OCR1B
ti ICR1, in p chn OC1B l 0V. ng thi khi TCNT1 chm mc ICR1, bin TCNT1
c reset v 0 tip tc m cho chu k tip theo.
Nh vy thi gian bin TCNT1 chy t 0 ti OCR1B ng vi Duty Cycle, thi gian bin
TCNT1 chy t 0 ti ICR1 ng vi Time Period.

13
Chng hn mun to mt xung PWM c Time Period l 2ms, Duty Cycle l 1 ms vi
thch anh 4 Mhz, t l Prescale = 8, ta c:
Mi dao ng thch anh ng vi khong thi gian l:
1
=
= 0, 25.106 ( s ) = 0, 25.10 3 (ms)
6
4.10
Mi ln m ca bin TCNT1 ng vi khong thi gian l:

= 8. = 8.0, 25.103 = 2.103 (ms)


Suy ra to c Time Period (chu k) ca PWM l 2 ms, ta phi cho bin
TCNT1 m 1000 ln, t 0 ti 1000, tc l gi tr ICR1 = 1000.
Tng t, to c Duty Cycle ca PWM l 1 ms, th gi tr OCR1B = 500.
Thng thng khi lp trnh, ngi ta c nh gi tr ICR1 ngay t u (Time Period c
nh), cn gi tr OCR1B c thay i khi vi x l hot ng, nhm to ra PWM c Duty
Cycle thay i.
Cch kch hot ch Fast PWM, chn cc gi tr OCR1B, ICR1 v cc thng s khc
s c trnh by trong v d iu khin rng xung PWM.
Tm tt 3.4
PWM to ra do b T/C, ATmega16 c 4 knh PWM (ti chn OC0;
OC1A; OC1B; OC2).
PWM dng iu chnh tc ng c, ng c bc v ng c servo.
To PWM nh bin TCNT v cc gi tr OCR v ICR. iu chnh rng
xung bng cch iu chnh gi tr OCR.

14
3.5 Chuyn i ADC
Trong cc ng dng o lng v iu khin bng vi x l, b chuyn i tng t-s
(ADC) l mt thnh phn rt quan trng. Cc i lng vt l nh nhit , p sut, dng
in, u c th dng cm bin v cc mch x l chuyn v dng tn hiu in p. Trn
vi x l ATmega16, c th o 8 in p khc nhau t trn cc 8 chn thuc PORT A, gi l
8 knh ADC, c k hiu l ADC0, , ADC7. in p cp cho b chuyn i ADC l +5V
v c cp qua chn AVCC.

Hnh 10: 8 knh ADC ca ATmega16

in p t ti mt trong s cc knh ADC, v d ADC0, s c b chuyn i ADC


ca ATmega16 o v tr li mt gi tr tng ng. hiu r hn v hot ng ca ADC ta
cn hiu mt s khi nim sau:
in p tham chiu - Vref: L gi tr ln nht m b ADC c th o c. Trong o c
truyn thng, vi cc thit b o, chng ta cng gp khi nim gi tr ln nht m thit b c
th o c. V d nh mt ng h o p sut c th o c ti a 70 bar, c ngha l
ng h ny ch dng o p sut nh hn 70 bar.
Vi ADC trn ATmega16, Vref (in p tham chiu) c ngi lp trnh t trc khi
kch hot chc nng ADC. C 3 cch chn in p tham chiu nh sau:
Chn in p so snh bng in p trn chn VREF.
Chn in p so snh bng +5V, ni chn VREF vi chn AVCC.
Chn in p tham chiu ni Vref = 2,56 V. in p tham chiu ni ny c
to ra bn trong vi x l, ngi dng khng cn cp in p qua chn VREF.
phn gii: Cho bit mc chnh xc ca php o bng chuyn i ADC, cng l s
bit dng cha gi tr u ra ca b chuyn i ADC. Chuyn i ADC trn ATmega16 l
b ADC 10 bit, gi tr b ADC tr v sau khi o c gi tr t 0 n 1023, ng vi 1023
khong chia.
Hot ng ca ADC c th gii thch n gin nh sau, u tin vi x l chia nh in
p tham chiu Vref lm 1023 khong, sau so snh gi tr in p t ti chn u vo ADC
xem in p cn o nm khong bao nhiu. Gi tr ADC o c chnh l s th t ca
khong in p tng ng.

Hnh 11: Hot ng ca ADC

15
Nh hnh trn, Vref c chia lm 1023 khong, t 0 n 1023. in p cn o Vin t
vo chn ADC0, sau khi o, b ADC s tr v gi tr i, l khong in p ng vi Vin. Nh
vy gi tr in p Vin cn o l:
i
Vin =
Vref
1023
Vi phn gii khng i, ta thy nu cng gim Vref th cc khong in p cng thu
nh, tc l ta o c in p Vin cng chnh xc. Tuy nhin Vref khng c nh hn gi tr
ln nht ca Vin.
Cc cch kch hot b chuyn i ADC, chn knh o, in p tham chiu v o bng
ADC s c trnh by trong v d Chuyn i ADC.
Tm tt 3.5
Dng ADC o in p ti cc knh ADC. ATmega16 c 8 knh ADC
vi phn gii 10 bit.
Chn Vref khng qu ln php o c chnh xc.
in p cn o:

16
3.6 Giao tip USART
USART c trnh by trong ti liu ny l mt chun truyn thng ni tip khng ng
b gia cc thit b digital. Chc nng USART trn vi x l ATmega16 l mt trong s cc
chc nng vi x l dng truyn/nhn d liu vi cc thit b khc (my tnh, vi x l
khc).
3.6.1 Cc thut ng c dng trong giao tip USART
Truyn thng ni tip khng ng b: Trong nhiu bi ton cn s dng vi x l v
my tnh kt ni vi nhau. Trong qu trnh lm vic vi x l cn trao i d liu vi my
tnh, v d nh vi x l gi gi tr o c bng ADC v my tnh v my tnh gi tn hiu iu
khin xung vi x l
Gi s d liu cn trao i l cc m c chiu di 8 bit, cch n gin nht l kt ni 1
PORT (8 bit) ca vi iu khin vi my tnh, mi dy ni s chu trch nhim truyn/nhn 1
bit d liu. y gi l cch giao tip song song, cch ny l cch n gin nht, nhng nhc
im ca cch truyn ny l s ng truyn qu nhiu, gi tr cng ln th s ng truyn
cng s nhiu thm.
Trong truyn thng ni tip d liu c truyn tng bit trn 1 (hoc mt t) ng
truyn, v th tit kim ng truyn d liu. Hnh sau m t s so snh gia 2 cch truyn
song song v ni tip trong vic truyn con s 187 thp phn (tc 10111011 nh phn).

Hnh 12: Phng php truyn song song (a) v ni tip (b)

V d liu cn c chia nh thnh tng bit khi truyn/nhn, tc truyn ni tip s


b gim. Mt khc, m bo tnh chnh xc ca d liu, b truyn v b nhn cn c nhng
tha hip hay nhng tiu chun nht nh.
Khi nim ng b ch s bo trc trong qu trnh truyn. Ly v d thit b 1
(tb1) kt vi vi thit b 2 (tb2) bi 2 ng, mt ng d liu v 1 ng xung nhp. C
mi ln tb1 mun gi 1 bit d liu, tb1 iu khin ng xung nhp chuyn t mc thp ln
mc cao bo cho tb2 sn sng nhn mt bit. Bng cch bo trc ny tt c cc bit d liu
c th truyn/nhn d dng vi t ri ro trong qu trnh truyn. Tuy nhin, cch truyn ny
i hi t nht 2 ng truyn cho 1 qu trnh (gi hoc nhn d liu).
Khc vi cch truyn ng b, truyn thng khng ng b ch cn mt ng truyn
cho mt qu trnh. Khung d liu c chun ha bi cc thit b nn khng cn ng
xung nhp bo trc d liu n. V d 2 thit b ang giao tip vi nhau theo phng php
ny, chng c tha thun vi nhau rng c 1ms th s c 1 bit d liu truyn n, nh
th thit b nhn ch cn kim tra v c ng truyn mi mili-giy c cc bit d liu v
sau kt hp chng li thnh d liu c ngha. Truyn thng ni tip khng ng b v
th hiu qu hn truyn thng ng b (khng cn nhiu ng truyn). Tuy nhin, qu
trnh truyn thnh cng th vic tun th cc tiu chun truyn l ht sc quan trng.
Baud rate (tc Baud): nh trong v d trn v vic truyn 1 bit trong 1ms, bn thy
rng vic truyn v nhn khng ng b xy ra thnh cng th cc thit b tham gia phi
thng nht nhau v khong thi dnh cho 1 bit truyn, hay ni cch khc tc truyn phi

17
c ci t nh nhau trc, tc ny gi l tc Baud. Theo nh ngha, tc baud l
s bit truyn trong 1 giy. V d nu tc baud c t l 19200 th thi gian dnh cho 1
bit truyn l 1/19200 ~ 52.083us.
Frame (khung truyn): Khung truyn bao gm cc quy nh v s bit trong mi ln
truyn, cc bit bo nh bit Start v bit Stop, cc bit kim tra nh Parity, ngoi ra s lng
cc bit trong mt data cng c quy nh bi khung truyn. Hnh di l mt v d ca mt
khung truyn theo UART, khung truyn ny c bt u bng mt start bit, tip theo l 8
bit data, sau l 1 bit parity dng kim tra d liu v cui cng l 1 bits stop.

Hnh 13: Khung truyn theo USART

Start: start l bit u tin c truyn trong mt frame truyn, bit ny c chc nng bo
cho thit b nhn bit rng c mt gi d liu sp c truyn ti. Start l bit bt buc phi c
trong khung truyn.
Data: data hay d liu cn truyn l thng tin chnh m chng ta cn gi v nhn.
Thng data gm 8 bit.
Parity bit: parity l bit dng kim tra d liu truyn ng khng (mt cch tng i).
Parity bit khng phi l bit bt buc v v th chng ta c th loi bit ny khi khung truyn
(cc v d trong ti liu ny khng dng bit parity).
Stop bits: stop bits l mt hoc cc bit bo cho thit b nhn rng mt gi d liu
c gi xong. Stop bits l cc bits bt buc xut hin trong khung truyn.
3.6.2 Giao tip USART trn ATmega16
Vi iu khin Atmega16 c 1 module truyn thng ni tip USART. Vi ch truyn
ni tip khng ng b (c th trong ti liu ny l giao tip vi my tnh), chng ta s dng
2 chn ca Atmega16 phc v cho truyn nhn d liu l: chn truyn d liu TxD
(Transmitted Data) v chn nhn d liu RxD (Reveived Data).

Hnh 14: Hai chn RXD v TXD dng trong giao tip vi my tnh

M-un USART trn chip Atmega16 hot ng theo ch qu trnh truyn v nhn d
liu c th xy ra ng thi.
Khi s dng USART giao tip vi my tnh, phi thit lp cc thng s hot ng vi
x l v trn my tnh ging nhau, bao gm:

18

Baud rate: Baud rate cng cao, tc truyn cng nhanh, tuy nhin xc sut xy
ra li trong qu trnh truyn/nhn cng ln hn. Thng chn Baud rate = 9600
vi cc ng dng khng i hi tc cao.
Frame: Khung truyn bao gm start bit, data, parity bit v stop bit, trong start
bit l c nh v khng thay i. V d trong ti liu ny s ly khung truyn c 8
bit data, khng dng parity bit v 1 bit stop.
USART ca ATmega16 cng c tnh nng ngt. Ngt ca USART xy ra khi hon tt
gi xong mt d liu, hoc nhn xong mt d liu. Tnh nng ngt khi nhn xong mt d liu
s c dng trong ng dng truyn d liu t vi x l v my tnh.
Cch kch hot m-un USART, thit lp cc thng s Baud rate, Frame v cch s
dng USART s c trnh by trong v d Giao tip USART.
Tm tt 3.6
Kt ni vi my tnh dng chc nng USART.
Baud rate = 9600; khung truyn c 8 bit data, 1 bit stop, khng dng
parity.
Ngt khi truyn/nhn d liu hon tt.

19
4 Cc bi tp v d
Tt c cc mch in s dng vi x l lp trnh c u c thit k theo trnh t:
Phn tch mch: Yu cu, c im lm vic,
Xy dng nguyn l iu khin.
V mch m phng.
Lp trnh cho vi x l.
Kim tra lp trnh trn mch m phng, sa li lp trnh hoc mch nguyn l
nu pht hin li.
Lm mch tht. Kim tra li trn mch tht v tin hnh sa hoc lm li mch
nu cn thit.
Cc bi tp v d trong ti liu ny s hng dn ngi c chy m phng trn phn
mm Proteus. Phn chy th trn mch tht c thc hin trn mch c lm sn, s c
s nguyn l v s i dy km theo.
4.1 Lp trnh iu khin thit b ngoi (Led, ng c)
y l v d u tin v n gin nht trong cc v d ng dng vi x l, v vy s c
vit k tng bc v gii thch tht n gin.
Bi v d Lp trnh iu khin thit b ngoi ang ni ti thc ra l iu khin ngngt cc thit b ngoi (n Led, ng c) thay cho cng-tc in, v l dng iu khin
n gin nht trong cc ng dng ca vi iu khin.
Mch in trong v d ny s lm vic nh sau: iu khin n Led sng/tt theo chu k
0,5 giy.
4.1.1 Phn tch mch in
Vi bt c mt d n (Project) thit k mch in no, cng vic u tin cng u l
phn tch mch in cn thit k. Da vo yu cu v c im lm vic, chng ta c th xy
dng c nguyn l lm vic ca cc khi c bn ca mch (khi iu khin, khi cng
sut) v lp trnh cho vi x l.
Vi v d iu khin Led nh trn, yu cu v c im lm vic nh sau:
Led sng ri tt theo chu k 0,5 giy.
Gia cc ln sng/tt ca Led, khng iu khin thm thit b no khc.
Led c cng sut b (c 0,1 W).
4.1.2 Xy dng nguyn l iu khin
Nh phn 1 ni, ngi dng c th lp trnh iu khin in p ti mt hay mt
s chn ca vi iu khin. C hai mc in p l 0V v +5V, v c gn vi trng thi 0 v
1 tng ng. V d chn s 6 (PB5) ca vi iu khin trng thi 1, tc l ti chn c in
p +5V, cn nu trng thi 0, tc l ti chn c in p bng 0 (ni t GND).
tng a ra l ta c th dng in p ny chy mt thit b no ni trc tip vi
chn ca vi iu khin. Tuy nhin vi in p +5V, ng thi dng in cho php nh (vi
chc mA), nn ta ch c th ni trc tip vo vi iu khin nhng thit b c cng sut rt
nh, v d nh: n LED.

20

Hnh 15: Ni trc tip vi x l vi thit b c cng sut nh

Thc t, c th iu khin nhng thit b c cng sut ln hn (hoc lm cho Led


sng hn), ngi ta khng ni trc tip vi iu khin vi thit b, m qua mt mch cng
sut. C th hiu mch cng sut nh mt r-le trong mch in dn dng.

Hnh 16: S dng in th 5V cng sut nh iu khin Mo-t 12V cng sut ln

C nhiu linh kin in t c th thay th cho mt r-le, in hnh l cc transistor. Hnh


sau th hin nguyn l hot ng ca mch:

Hnh 17: Vi x l iu khin ng/m transistor iu khin ti

Mt mch tng t nh mch transistor trnh by trn c gi l mch cng sut, cn


khi vi x l c gi l mch iu khin.
Bnh thng khi chn 6 ca vi iu khin (ni vi chn B ca transistor) trng thi 0
(0V), th transistor ng, tc l E v C khng thng nhau.
Khi vi iu khin chuyn trng thi chn 6 sang 1 (+5V), transistor m, tc l dng in
t ngun c th chy t E sang C, qua ti ri v m.
Nh vy thay i trng thi chn 6 s iu khin bt/tt c Led.

21
4.1.3 M phng trn Proteus
M phng trn Proteus tc l xy dng mch nguyn l v chy th nghim trn my
tnh bng phn mm Proteus.
Trnh t tin hnh m phng mch nguyn l ng/m transistor bng Proteus nh sau:

Hnh 18: M th vin Proteus

M phn mm Proteus, click vo cc biu tng 1 v 2 chn lnh kin. Sau khi
click vo 2, mt ca s mi s hin ra, cho php chn linh kin.

Hnh 19: Th vin Proteus

G tn linh kin vo Keywords, v d mega16, cc linh kin tm c s hin bn


Result, click chut chn linh kin ATMEGA16 nh trn hnh 2.
G tip npn tm linh kin transistor loi PNP, g led tm linh kin LED. Sau
sp xp v ni dy cho cc linh kin nh trong hnh 3.

22

Hnh 20: Mch m phng v d iu khin thit b ngoi

4.1.4 Lp trnh cho vi x l


Lp trnh chi vi x l AVR, cng nh vi cc vi x l khc, nn tin hnh theo cc bc
nh sau, to thun li trong vic xy dng thut ton, kim tra v sa li lp trnh.
Xc nh yu cu lm vic ca vi x l.
Xy dng thut ton iu khin.
Chun b lp trnh v vit chng trnh iu khin.
Kim tra v sa li.
a) Xc nh yu cu lm vic ca vi x l
Trong v d ny, vi x l ch cn iu khin trng thi ca chn s 6 ca vi x l (c k
hiu PB5/MOSI trn Proteus) thay i gi mc 0 (0V) v 1 (+5V) theo chu k 0,5 giy.
b) Xy dng thut ton iu khin.
Thut ton iu khin trong bi v d ny kh n gin, theo s sau:

Hnh 21: S thut ton iu khin vi x l

S c gii thch nh sau:


Khi c cp in, vi x l chun b cho bc Bt u, bao gm thit lp chn
PB5 (ng vi chn s 6 ca vi x l) l chn iu khin, c trng thi ban u l
0 (Led tt).
Sau vi x l lm vic theo chiu cc mi tn. u tin l t trng thi chn
PB5 = 1 Led sng.
i 0,5 s.
t trng thi PB5 = 0 Led tt.
i 0,5 s.
Quay li bc th 2 (PB5 = 1).
.
Vic vi x l lp i lp li cc bc nh trn c gi l lp. C nhiu cch to
vng lp v iu khin vng lp, s c trnh by trong cc v d.

23
c) Chun b lp trnh bng phn mm CodeVision.
M phn mm CodeVision, nhn Ctrl+N to Project (d n) mi, trong hp thoi
Create New File chn Project ri nhn OK Yes.

Hnh 22: To project mi

Hnh 23: S dng CodeWizardAVR

Hp thoi CodeWizardAVR hin ra, chn tn chip l ATmega16, v chn tn s hot


ng ca chip (v d 4000000 Hz = 4Mhz).

Hnh 24: Chn vi x l v tn s hot ng

Hp thoi CodeWizardAVR cn c nhiu mc khc, ng vi cc chc nng ca vi x


l nh USART, ADC, External IRQ (ngt) ni trong phn gii thiu. Nhng nu ch cn
iu khin trng thi cc chn ca vi x l, ta ch cn vo mc Ports quy nh chc nng
vo/ra ca chn vi x l.

24

Hnh 25: Thit lp cc Port

Trn Proteus chng ta mun dng chn s 6 ca vi x l, c k hiu PB5, tc l chn


ng vi Bit 5 ca Port B, v vy chng ta set Bit 5 thnh Out nh trn hnh.
Sau khi thit lp ban u cho Atmega16 xong, click File Generate, Save and Exit.

Hnh 26: To v lu project

Sau s c 3 hp thoi hin ra lu cc file cn thit. t tn v lu cc file vo


cng mt th mc nh trong hnh.

25

Hnh 27: Chn th mc lu project

Sau khi lu xong ta s thy mt vit cc lnh lp trnh theo ngn ng C. Cc dng
lnh chng ta vit s c lu trong file bai1.c.

Hnh 28: Ni vit cc dng lnh

d) Vit chng trnh iu khin.


Khi mi to ra file bai1.c c ghi rt nhiu dng lnh, do phn mm t to ra theo
cc thit lp phn CodeWizardAVR chng ta va lm. Tuy nhin vi bi ny, chng ta
ch cn theo tc mt vi v tr trong file bai1.c. Trnh t tin hnh c trnh by nh sau:
Include cc file header: Vit thm dng lnh #include <delay.h> vo v tr nh
trong hnh di. File delay.h l mt file c sn ca phn mm Codevision, dng khi mun
delay (tr hon, tm dng) qu trnh lm vic ca vi x l trong mt khong thi gian nh
trc, trong v d ta dng tm dng 0,5 s.

26

Hnh 29: Include cc file *.h cn thit

CodeVision c nhiu file *.h khc nhau (h l vit tt ca header), mi file *.h c
to sn cho cc ng dng ca vi x l. Tn mt s file *.h v chc nng ca cc file c
cho nh bng.
Tn file
Chc nng lin quan
delay.h
Tm dng vi x l.
stdio.h
Giao tip vi my tnh.
LCD.h
Ghi cc k t ra LCD
Mt s file *.h v chc nng lin quan.
Khi mun s dng tnh nng no c lin quan, th ta thm dng lnh
#include <*.h>
vo v tr ni trn.
Vng lp while chnh: Trong file bai1.c va to ra cng c sn mt vng lp while
lin tc (vng lp while chnh), y l ni vit cc dng lnh (code) cho bi tp iu khin
thit b ngoi.

Hnh 30: Vng lp while lin tc c to sn

Cc dng ch sau k hiu // ch c ngha ch thch, khng nh hng ti lp trnh.


Vng lp while c c php:
while (x)
{
Cc dng lnh
}
Trong x gi bin logic (ch nhn gi tr ng hoc sai tng ng vi 1 hoc 0), vng
lp while c ngha l chng no bin x c gi tr ng, vi x l s thc hin lp i lp li cc
dng lnh vit trong vng lp.

27
Nh trn hnh ta thy while (1), c ngha l x lun bng 1, v vng lp ny xy ra
mi trong sut qu trnh hot ng c vi x l.
Nhc li thut ton iu khin n gin c trnh by trn:

Hnh 31: Thut ton iu khin n gin cho v d

Qu trnh lp i lp li cc bc trn hnh c th c thc hin bng mt vng lp


while, y ta dng vng lp while m phn mm Code vision to sn.
Nh vy c th hnh dung cc lnh trong vng lp while chnh nh sau:
while (1)
{
a trng thi chn PB5 = 1 (bt Led);
i 0,5 s;
a trng thi chn PB5 = 0 (tt Led);
i 0,5 s;
}
Cc lnh trong vng lp while: c th ha cc bc trong vng lp while trn, ta
phi vit cc bc thnh cc lnh (code) theo ngn nga lp trnh.
- a trng thi (set trng thi) chn PB5 v 1 hoc 0:
Vi phn mm CodeVision, c th set trng thi cho cc chn bng lnh:
PORTx.y = z;
Trong : x l tn PORT tng ng, v d chn PB5 th x l B.
Y l th t chn (t 0 n 7), v chn PB5 th y l 5.
Z l trng thi mun set, v d 0 hoc 1.
Nh vy set trng thi chn PB5 ln 1, ta dng lnh:
PORTB.5 = 1;
Cn mun st trng thi chn PB5 xung 0, ta dng lnh
PORTB.5 = 0;
- i 0,5 s:
i (tm dng chng trnh) trong mt khong thi gian (tnh bng ms hoc
s), ta phi include file delay.h v dng lnh sau:
Tnh bng ms: delay_ms(x);
Tnh bng s: delay_us(x);
Trong x l s ms hoc s tng ng ta mun chng trnh i. Trong v d
ta mun dng chng trnh trong khong thi gian l 0,5 s = 500 ms = 500 000 s,
th dng lnh sau:
delay_ms(500);
hoc
delay_us(500000);
Nh vy cu trc v cc lnh trong vng lp while cho v d s l:

set chn
VDK

28
while (1)
{
PORTB.5 = 1;
delay_ms(500);
PORTB.5 = 0;
delay_ms(500);
}

Hnh 32: on code trong vng lp while

e) Kim tra li c php v complie.


Sau khi vit ht cc code, nhn CTRL+F9 tin hnh complie (bin dch t ngn ng
C sang ngn ng my), phn mm CodeVision s tin hnh kim tra cc li c php, cng
nh cc th tc khc c vit trong file bai1.c. Nu khng c sai st, phn mm s to ra
file bai1.hex lu trong th mc /bai1/exe/. File ny s dng chy m phng trn
Proteus v np cho vi x l khi lm mch tht.
Nu c li c php hoc cc th tc khc trong qu trnh lp trnh, CodeVision s thng
bo c li v c ghi ch li ngi lp trnh c th tm ra v sa li.

Hnh 33: V d v li thiu du ; cu lnh

Ch dn bo li tm thy sau khi check n dng 120, v li thc s th nm dng 119


Qu trnh kim tra v sa li c php lp i lp li ti khi CodeVision thng bo khng
cn li v to file *.hex thnh cng.

29
4.1.5 Chy th trn mch m phng
Sau khi lp trnh v c c file bai1.hex, ta tin hnh chy th trn mch m phng.
Tr li mch m phng bng phn mm Proteus:

Hnh 34: Mch nguyn l xy dng trn Proteus ca v d

Click p vo biu tng vi x l ATmega16 trn mch m phng, hp thoi Edit


Component ca ATmega 16 s m ra:

Hnh 35: Hp thoi Edit Component

Trong hp thoi Edit Component, Program File, click chn ng dn ti file


bai1.hex va to ra bng phn mm CodeVision. CKSEL Fuses, chn tn s cho thch
anh l 4Mhz.
Sau khi thit lp xong, nhn nt Start gc di bn tri mn hnh chy mch m
phng, nu cc bc trn lm chnh xc, th kt qu trn mn hnh s thy n Led sng nhp
nhy theo chu k 0,5s. Nu mun dng m phng, nhn nt Stop.

30

Hnh 36: Nt Start v Stop

Quan st trn mn hnh, s thy mu ca chn PB5 nhp nhy xanh theo chu k 0,5s.
Mu ng vi mc in p +5V, mu xanh ng vi mc in p 0v. Khi chn PB5 mu
th Led sng, khi chn PB5 mu xanh th n tt ng nh nguyn l iu khin trnh by.
Nh vy sau bi tp iu khin thit b ngoi, ngi c c th t m rng thm, v d
nh nhy nhanh ri nhy chm theo chu k, iu khin 2 hay nhiu n Led cng lc v cho
chng phi hp sng/tt vi nhau theo mun, hin th trn led 7 thanh, iu khin bt/tt
ng c...
Tm tt 4.1
iu khin thit b ngoi qua mch cng sut.
Cc theo tc trn cc phn mm Proteus v CodeVision.
Khi nim delay, lp
Cc file header, set trng thi cc chn ca vi x l.
Cu hi m rng:
iu khin nhiu led bng nhiu chn ca vi iu khin.
Hin th s trn led 7 thanh (cu to v nguyn l hot ng ca led 7
thanh xem phn ph lc).

31
4.2 Lp trnh ngt ngoi (INT)
Ngt ngoi l mt tnh nng ca vi x l ATmega16 cho php vi x l giao tip vi
ngi dng (qua thao tc bm nt) hoc nhn bit s kin bn ngoi (m s kin).
Bi v d lp trnh ngt ngoi s trnh by trong ti liu ny nh sau: iu khin tc
nhp nhy ca n led (0,5s hoc 2s) qua thao tc nhn nt iu khin.
4.2.1 Phn tch mch in
Ban u khi cp in, vi x l iu khin sng/tt n led theo chu k 0,5s.
Khi ngi dng nhn nt iu khin, chu k sng/tt n led c iu chnh thnh 2s.
Khi ngi dng nhn nt iu khin ln na, chu k sng/tt n led li c iu chnh
v 0,5s.

Nh vy ta thy v c bn, phn lp trnh iu khin sng/tt led tng t nh v d iu


khin thit b ngoi, ch khc ch chu k sng/tt (trong hm delay_ms()) c thay i
theo tc ng bm nt ca ngi dng nh tnh nng ngt ngoi.
4.2.2 Nguyn l iu khin v xy dng mch m phng trn Proteus
Nguyn l iu khin ging nh trong bi v d iu khin thit b ngoi.
Mch m phng trn Proteus cng tng t v d iu khin thit b ngoi, tr vic c
thm mt nt bm a vo chn PD2/INT0 iu khin ngt INT0.

Hnh 37: Mch m phng v d Lp trnh s dng ngt

32
4.2.3 Lp trnh cho vi x l
a) Xc nh yu cu lm vic ca vi x l
Vi x l iu khin bt/tt n Led theo chu k 0,5s v 2s theo tc ng bm nt ca
ngi dng.
b) Xy dng thut ton iu khin
Thut ton cho v d c th hin trn s sau:

Hnh 38: S thut ton v d Lp trnh s dng ngt ngoi


tng ca thut ton ny nh sau
Chu k nhy c t bng mt bin x, trong chng trnh, x hoc c gi tr 500 (0,5s)
hoc 2000 (2s).
Khi ngt ngoi c kch hot, chng trnh ngt gn gi tr x = 2000 (nu gi tr hin
thi ca x = 500), hoc gn gi tr x = 500 (nu gi tr hin thi ca x = 2000).
Chng trnh chnh s thc hin iu khin nhy led vi chu k x.
Nh vy khi ngi dng nhn nt, s kch hot ngt ngoi, i gi tr bin x, n led s
c iu khin nhp nhy theo gi tr bin x tng ng.
c) Chun b lp trnh bng phn mm CodeVision.
Cc bc chn vi x l, tn s thch anh, chc nng I/O cho chn PB5 c thc hin
ging nh v d iu khin thit b ngoi.
kch hot tnh nng INT0, trong ca s CodeWizardAVR, chn th External IRQ
(ngt ngoi) v thit lp nh hnh sau.

Hnh 39: Kch hot INT0

Trong Mode, click chn Falling Edge chn ch kch hot ngt cnh ln.
d) Vit chng trnh iu khin.
Trong v d ny c s dng bin x c trng cho ch lm vic ca mch. Bin l
mt khi nim trong lp trnh, ch cc gi tr s, gi tr logic, chui k t, matrn Bin
c th c gi tr khng i hoc thay i trong lp trnh ty thuc vo cch s dng.

33
Mi kiu bin c c trng khc nhau ( ch gi tr s, gi tr logic), mun s dng
bin trong lp trnh cn phi c bc khai bo. Bao gm khai bo tn bin (x, y, bien1,
bien2,) v kiu d liu(char, str, ). Cc kiu v thuc tnh ca kiu d liu c cho
trong bn phn ph lc.
Trong v d ny ta khai bo bin x l bin kiu int (gi tr s nguyn t -32768 ~
+32767).
Include thm file header sau: delay.h.
Khai bo bin bng dng lnh: char x=500; y chng ta gn cho x gi tr
x=500 ngay t u, khi cp in, n led nhp nhy ngay vi chu k 0,5s.

Hnh 40: Khai bo bin v ni vit chng trnh ngt

Vit chng trnh phc v ngt ngoi: Trnh phc v ngt ngoi c vit ti v tr nh
trong hnh trn. Cu trc chng trnh ngt c th c hnh dung nh sau:
interrupt [EXT_INT0] void ext_int0_isr(void)
{
Nu x=500, gn gi tr x=2000;
Nu x khng bng 500, gn gi tr x=500;
}
Php so snh iu kin nu trn trong lp trnh c gi l php so snh if, cu trc
ca lnh if nh sau:
if (biu thc so snh)
{
Cc dng lnh A;
}
else
{
Cc dng lnh B;
}
Trong biu thc so snh l mt biu thc logic, gi tr tr v l 0 hoc 1. V d khi
mun so snh gi tr ca x (c gi tr hin thi l 2000) xem c bng 500 hay khng, ta vit:
x == 500;
K hiu hai du bng == l k hiu ca php so snh, nh dng lnh trn, gi tr tr v
s bng 0, v gi tr hin thi ca x l 2000 khc 500
x == 500 = 0;
Nu biu thc so snh tr v gi tr 1, cc dng lnh a s c thc hin, nu gi tr biu
thc so snh tr v bng khng, cc dng lnh B s c thc hin.

34
Nh vy on code ca chng trnh ngt nh sau:
if (x==500)
{
x=2000;
}
else
{
x=500;
}
Lc ny ton b code c vit nh sau:

Hnh 41: Code chng trnh ngt

Chng trnh trong vng lp while chnh tng t nh trong v d iu khin thit b
ngoi, ch khc ch gi tr 500 ms chu k nhy c thay bng bin x.

Hnh 42: on code trong vng lp while chnh

Sau khi vit code, kim tra, sa li v complie thnh cng, dng mch m mng va to
trn phn mm Proteus chy m phng.
Tm tt
Cch hot ng ca ngt ngoi.
Bin v kiu d liu ca bin.
So snh if.
Cu hi m rng
iu khin led 7 thanh hin cc s t tng t 0 n 9 theo thao tc nhn nt
ca ngi dng.

35
4.3 Lp trnh Timer/Counter
Cc b T/C trn ATmega16 c th m nhim cc vai tr khc nhau vi cch thc hot
ng v thit lp khc nhau, nn cu trc v cch s dng tng i phc tp. V vy v d
cho lp trnh T/C c trnh by sau y l chc nng n gin nht ca b T/C, chc nng
nh thi. ng thi, v d cng n gin hn vi ngi c, hot ng ca mch trong v
d ny ging nh hot ng ca mch bi v d Lp trnh ngt ngoi INT.
bi: Dng b T/C iu khin bt/tt n led theo chu k 0,5s hoc 2s theo tc ng
ca ngi dng.
4.3.1 Phn tch, xy dng nguyn l iu khin v mch m phng
Do yu cu hot ng ca mch ging vi mch v d Lp trnh ngt ngoi INT, nn cc
bc phn tch mch, xy dng nguyn l iu khin v mch m phng trn Proteus c
tin hnh ging nh trong v d Lp trnh ngt ngoi.
4.3.2 Lp trnh cho vi x l
a) Xc nh yu cu lm vic ca vi x l
Vi x l iu khin thay i mc trng thi 0 v 1 ca chn PB5 theo chu k 0,5s hoc
2s theo tc ng ngoi. Chu k thay i c to ra nh b T/C.
b) Xy dng thut ton iu khin
Ngi c sau khi c phn gii thiu ch nng IN/OUT, ngt ngoi, T/C v lm v d
Lp trnh ngt ngoi s thy rng vi bi tp ny ch cn dng hm delay_ms() n gin
to chu k thay i trng thi chn iu khin (PB5). Tuy nhin chc nng nh thi ca
b T/C khc vi hm delay_ms() ch T/C to khong thi gian theo cc ngt trong, cn
hm delay_ms() to cc khong thi gian bng cch dng chng trnh chnh trong vng
lp while chnh. Vi cc bi ton s dng nhiu chc nng ca vi x l hn, tnh dng
chng trnh ca hm delay_ms() c th nh hng xu v lm sai lch hot ng ca vi
x l so vi lp trnh ban u.
d hiu, ta ly v d so snh hot ng ca vi x l vi mt trng hp ngoi thc t
hay gp trong gia nh nh sau:
C hai m con, m i lm, con nh hc bi. Ti 10h m gi in dn con n
10h30 nu cm (nu cm sau 30).
- Vic hc bi ca con ng vi chng trnh c vit trong vng lp while chnh.
Vic m gi in dn nu cm ng vi ngt ngoi.
- Khong thi gian t 10h ti 10h30 ng vi khong thi gian xc nh nh hm
delay hoc T/C.

Hnh 43:V d so snh hot ng ca vi x l

36
a con c 2 cch thc hin vic m dn nh sau:
- ng ti ni cm m khng lm bt c hnh ng no khc trong vng 30, sau
mi nu cm, ri quay li hc tip. Cch ny ng vi hm delay, v hm delay
dng chng trnh trong vng lp while chnh, tc l vic hc ca a con.
- Tip tc hc v hn ng h 30, khi ng h bo, a con mi i nu cm, sau khi
nu xong th quay li hc tip. Cch ny ng vi phng php dng T/C, vic ng
h bo 30 ng vi ngt xy ra trong b T/C.

Hnh 44: Hot ng ca a con ng vi hm delay v T/C

Nh vy c th thy nu dng T/C, th chng trnh trong vng lp while chnh vn


c tip tc thc hin khi vi x l ang m khong thi gian. iu ny rt quan trng khi
lp trnh s dng cng lc nhiu chc nng khc nhau ca vi x l, v vic xc nh khong
thi gian khng lm gin on ti cc tin trnh hot ng khc.
Sau khi hiu s khc nhau c bn gia vic nh thi gian bng T/C v hm delay, chng
ta i xy dng thut ton iu khin. Nh trong phn gii thiu chc nng T/C ca
ATmega16, b T/C1, thay i qung thi gian xy ra ngt ca b T/C1, chng ta cn thay
i gi tr ban u ca bin TCNT1 ng vi cc khong thi gian 0,5s v 2s. Kt hp vi cc
v d trn, ta c th a ra s lm vic ca b Int0 v T/C1 nh sau:

Hnh 45: S lm vic b INT0 v T/C1

Vic thay i gi tr ca bin TCNT1 ng vi chu k 0,5s v 2s c thc hin trong


chng trnh ngt ngoi INT0 tng t nh thay i bin x trong v d Lp trnh ngt ngoi
INT.
B T/C1 s lin tc nh ra cc khong thi gian da theo bin TCNT1.
Khi m c khong thi gian tng ng, chng trnh ngt ca b T/C1 s chuyn
trng thi chn PB5 iu khin bt/tt led.

37
Vic xc nh gi tr cn gn cho bin TCNT1 ng vi cc chu k 0,5s v 2s cho vi x l
ATmega16, tn s thch anh 4Mhz nh sau:
1
= 0, 25.106 ( s )
Chu k dao ng thch anh: to =
4.106
Nu Prescale =1, xc nh c khong thi gian 2s, cn phi m:

no =

2
= 8.106 > TCNT 1max = 65535
0, 25.106

Gi tr no ln hn gi tr TCNT 1max khong 122 ln, tra datasheet ca vi x l


ATmega16 (bng 48 trang 113) ta thy ATmega16 cho php chn Prescale bng 1; 8; 64;
256; 1024. Vy ta chn Prescale = 256.

1
= 64.106 ( s )
4.106
2
= 31250
Khi xc nh c chu k 2s th s ln phi lm: n1 =
64.106

Vi Prescale = 256, chu k m ca bin TCNT1 l: t = 256

Gi tr ban u ca bin TCNT1 ng vi chu k 2s l:

TCNT12s = 65535 31250 = 34285


Nu vit trong h c s 16: TCNT 12s = 85ED
Tng t xc nh c chu k 0,5s th s ln phi m l: n2 =

0,5
= 7812,5
64.106

V n2 phi l s nguyn dng, nn ta chn n2 = 7813


Sai s y l = 0,5.64.106 = 32.106 (s )
Gi tr ban u ca bin TCNT1 ng vi chu k 0,5s l:

TCNT 10,5s = 65535 7813 = 57772


Nu vit trong h c s 16: TCNT 10,5s = E1AC

Sau khi xc nh c cc gi tr TCNT ban u, ta tin hnh lp trnh cho vi iu khin.


c) Chun b lp trnh bng phn mm CodeVisionAVR
Cc bc chn vi x l, tn s thch anh, thit lp In/Out chn PB5, thit lp ngt ngoi
INT0 ging nh trong v d Lp trnh ngt ngoi. Ngoi ra v v d ny s dng b T/C1 nn
chng ta phi thit lp cc thng s ban u cho T/C1.

Hnh 46: Thit lp ban u cho b T/C1

38
kch hot b T/C1, trong ca s CodeWizardAVR, ta vo mc Timers Timer1.
Ch mc nh ca T/C1 l chc nng nh thi: Normal top=0xFFFF (ch nh thi
bnh thng, gi tr TOP = FFFF theo h c s 16, tc l bng 65535 trong h s s thp
phn). chn Prescale, kch hot ngt ca T/C1, gi tr ban u ca bin TCNT1, ta lm
qua 3 bc nh trn hnh 46.
Bc 1 Chn Prescale: Ta chn tn s thch anh l 4Mhz = 4000 Khz,
4000
Prescale = 256, tc l tn s lm vic ca b T/C1 l
= 15.625Khz . Trong
256
mc Clock value, ta click chn tn s lm vic ca b T/C1 l 15,625 Khz.
Bc 2 Kch hot ngt T/C1: kch hot ngt T/C1 khi m c khong
thi gian mong mun (0,5s hoc 2s ng vi thi im bin TCNT1 m ti
65535), ta click chn Timer1 Overflow trong mc Interrupt on.
Bc 3 Chn gi tr ban u cho bin TCNT1 vit theo h s s thp phn
trong Value. Ta chn gi tr e1ac ng vi 0,5s. Trong chng trnh, ta c
th thay i gi tr ny thnh 85ed tng ng vi chu k 2s.
d) Vit chng trnh iu khin
Nh phn xy dng thut ton iu khin, ta thy rng qu trnh iu khin trng thi
chn PB5 khng nm trong vng lp while chnh. Vic chn gi tr TCNT1 ban u c
thc hin trong chng trnh ngt ngoi INT0 v thay i trng thi chn PB5 c thc hin
trong chng trnh ngt ca T/C1.
Do khng s dng hm delay_ms()cng nh cc tnh nng no khc cn c file
header, nn ta khng cn include thm file header no khc.
Khai bo bin x kiu unsigned int gn gi tr bin TCNT1 ban u. Nh ni
kiu int c gi tr t -32768 ti +32767, cn kiu unsigned int c gi tr t 0 ti
+65535, v vy ta chn kiu d liu unsigned int.

Hnh 47: Chng trnh ngt ngoi v ngt ca T/C1

Nh trn hnh 48, chng ta ch thao tc trong chng trnh ngt ngoi v chng trnh
ngt ca T/C1.

39
Chng trnh ngt ngoi INT0
Tng t nh trong v d lp trnh ngt ngoi, chng trnh ngt ngoi trong v d ny
cng c chc nng thay i gi tr ca bin x. Nh trnh by trn, ng vi chu k 0,5s
hoc 2s ta c gi tr ca bin x l x = 0xE1AC v x = 0x85ED.
Hai k t 0x trn l hai k t dng thng bo cho vi x l bit rng gi tr vit ng
sau theo h c s 16. Nu mun vit theo h c s 2, th hai k t tng ng s l 0b. Cn
nu vit theo h s s 10 th khng cn chn 2 k t vo trc gi tr.
V d s 214 trong h thp phn ng vi 11010110 trong h c s 2 v D6 trong h
c s 16. Khi vit vo chng trnh, cho vi x l hiu th ta phi vit
214 hoc 0b11010110 hoc 0xD6

Sau khi lm v d Lp trnh ngt ngoi, ta thy chng trnh con trong v d ny cng
tng t nh sau:
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if (x == 0xE1AC)
{
x = 0x85ED;
}
else
{
x = 0xE1AC;
};
}

Hnh 49: Chng trnh ngt ngoi INT0

Chng trnh ngt ca T/C1


Chng trnh ngt ca T/C1 xy ra khi bin TCNT1 m ti gi tr TOP ( y l
65535). Theo nh thut ton xy dng, ngt ca T/C1 s nghch o trng thi ca chn
PB5 v gn li gi tr ca bin TCNT1 bng gi tr ca bin x.
Khi to project, cu trc trong chng trnh ngt ca T/C1 c sn nh sau.

40

Hnh 50: Ngt ca T/C1

Nh hnh trn, phn gn li gi tr cho bin TCNT1 c vit sn, v lun lun gn
li gi tr E1AC thit lp trong phn chun b T/C1. V vy phi sa li on code ny
gn gi tr x cho bin TCNT1 thay v gi tr E1AC. Ngi c c th d dng thy rng ch
cn thay gi tr E1AC on code trn bng gi tr x nh sau:
TCNT1H=x >> 8;
TCNT1L=x & 0xff;
hiu r on code trn, ngi c cn phi c kin thc v cu trc cc thanh ghi,
cng nh cc php dch bit, cc php ton logic trong lp trnh C. n gin hn, c th
dng ch mt lnh duy nht sau y thay cho on code trn.
TCNT1=x;
Nh vy on code dng gn li gi tr cho bin TCNT1 sau khi sa li nh sau.

Hnh 51: Chng trnh ngt ca T/C1 sau khi sa

Tip theo ta cn vit on code iu khin trng thi ca chn PB5 vo trong chng
trnh ngt ca T/C1. Trong cc v d trc, ngi c bit cch gn trng thi cho chn
PB5 trc tip bng 0 hoc 1. Tuy nhin c mt cch ngn hn thc hin vic nghch o
trng thi chn PB5 bng dng lnh sau:
PORTB.5 = ~PORTB.5;
K hiu ~ trn l k hiu ca php nghch o, dng trong cc php ton logic. Cu
lnh trn c ngha l gi tr trng thi chn PB5 s c gn bng nghch o ca gi tr trng
thi chn PB5 hin ti. Nu trng thi chn PB5 ang l 1, th sau khi qua cu lnh ny, trng
thi chn PB5 s c gn bng 0 v ngc li.
Nh vy chng trnh ngt ca T/C1 s l.

Hnh 52: Chng trnh ngt caT/C1 sau khi hon thin

41
Sau khi vit xong, ton b code vit thm trong v d ny s nh sau.

Hnh 53: Code ca v d Timer/Counter

Sau khi vit code, kim tra v complie thnh cng, chy th trn mch m phng
Proteus, ngi c s thy mch hot ng nh trong v d Lp trnh ngt ngoi. Ban u led
s nhy theo chu k 0,5s, khi nhn nt, chu k nhy l 2s, nhn nt ln na, chu k nhy s
tr v 0,5s
Tm tt
Hot ng ca T/C1, phi hp hot ng ca T/C1 v INT0.
Php ton nghch o.
M rng
1. o s ln nhn nt trong vng 1 giy v hin th trn cc led 7 thanh.

42
4.4 iu khin rng xung PWM
PWM l mt ch hot ng ca cc b Timer trn vi x l ATmega16. hiu r
hn cch to ra xung PWM, hy c k li phn gii thiu chc nng PWM ca vi x l
ATmega16.
bi v d iu khin rng xung PWM nh sau: dng b T/C1 to xung vung,
Time Period 5ms, Duty Cycle c thay i bng 1ms hoc 4 ms theo tc ng nhn nt ca
ngi dng. Xung ny dng iu khin ng c DC v hin th trn thit b Oscilloscope.
4.4.1 Phn tch mch in
y l mch nguyn l iu khin ng c DC bng PWM. Da theo bi v cc hc
nng ca ATmega16 c gii thiu, ta phn tch hot ng ca mch nh sau:
Vi x l ATmega16 to xung PWM ti chn OC1A (chn PD5), iu khin ng
c DC qua mch cng sut.
Mch ngt ngoi c kt ni vi vi x l qua chn INT2 (PB2), ng vi khi
ngt ngoi INT2, thay i Duty Cycle.
Chn OC1A cng c ni vi thit b Oscilloscope hin th dng xung vung.
4.4.2 Nguyn l iu khin
Nguyn l iu khin ca mch cng tng t nh nguyn l iu khin thit b ngoi
ni chung. l vi x l iu khin mch cng sut, mch cng sut iu khin thit b
ngoi theo tn hiu t vi x l. Tuy nhin trong cc mch cng sut c chu k ng/ngt
nhanh (c ms), thay v s dng transistor thng th ngi ta thng s dng cc transistor
cng sut (IRF 540, 740). Cc transistor cng sut hot ng cng tng t nh cc
transistor thng, ch khc cc thng s nh dng m hoc in p m, cng sut ph ti
ti a

Hnh 54: Nguyn l mch cng sut dng IRF540N trn Proteus

Nh phn gii thiu PWM, nu gi nguyn chu k, tng/gim Duty Cycle ca xung
PWM th thi gian ng/ngt ca IRF cng thay i, nh vy thi gian ng/ngt mch in
qua ng c cng thay i tng ng, lm thay i tc ng c DC.

43
4.4.3 Xy dng mch m phng trn Proteus
T mc phn tch mch in, ta thy mch in m phng gm c vi x l ATmega16,
mch ca khi ngt ngoi, mch cng sut IRF540, ng c DC v Oscilloscope.

Hnh 55: Mch nguyn l iu khin ng c DC bng PWM

Sau khi chn cc linh kin t th vin v thit b Oscilloscope, chng ta sp xp v ni


dy cho cc linh kin nh hnh 55. Ch cc chn u vo ca INT2 v u ra xung PWM
OC1A s tng ng vi qu trnh chun b lp trnh sau ny.
4.4.4 Lp trnh cho vi x l
a) Xc nh yu cu lm vic ca vi x l
Yu cu lm vic ca vi x l trong bi v d ny l: To xung PWM ti chn OC1A,
chu k (Time Period) 20ms, Duty Cycle hoc 1 ms hoc 2ms theo s kin ngt ngoi INT2.
b) Xy dng thut ton iu khin
Trc khi xy dng thut ton iu khin PWM ngi c cn nm r nguyn l hot
ng ca b PWM c gii thiu phn u ti liu.
Sau khi nm r c bn nguyn l hot ng ch PWM ca T/C1 trong ATmega16,
chng ta thy rng Time Period v Duty Cycle ph thuc ln lt vo gi tr hai bin ICR v
OCR. Nh vy trong v d ny, vi chu k 20ms khng i, Duty Cycle 1 ms hoc 2ms th ta
ch cn thay i gi tr bin OCR trong chng trnh ngt ngoi.

Hnh 56: S lm vic ca ngt ngoi v T/C1 ch to PWM

Thut ton cng tng t nh v d Timer/Counter, ch khc ch chng trnh ngt


ngoi dng thay i bin OCR1A thay v gi tr x, v b T/C1 lm vic ch to xung
PWM.

44
B T/C1 c nhiu cch to ra xung PWM (xem li phn gii thiu chc nng to
PWM phn trc), trong bi v d s trnh by ch Fast PWM.

Hnh 57: Ch Fast PWM

Nhc li ch Fast PWM nh hnh 57, ta thy rng cc gi tr ICR1, OCR1A cn


c tnh tng t nh khi tnh gi tr bin TCNT1 ban u v d Timer/Counter.
1
= 0, 25.106 ( s )
Chu k dao ng thch anh: to =
6
4.10
Chn Prescale = 8, suy ra chu k lm vic b T/C1:

t = 0, 25.106.8 = 2.106 (s) = 2.103 (ms)


5
= 2500
2.103
Nu vit trong h c s 16: ICR1 = 9C4

Gi tr ICR1 ng vi 5ms l: ICR1 =

1
= 500
2.103
= 1F 4

Gi tr OCR1A ng vi Duty Cycle 1ms l: OCR1A1ms =


Nu vit trong h c s 16: OCR1A1ms

4
= 2000
2.103
= 7D0

Gi tr OCR1A ng vi Duty Cycle 2ms l: OCR1A1,5 ms =


Nu vit trong h c s 16: OCR1A1,5 ms

Sau khi xc nh cc gi tr ICR1, OCR1A ta tin hnh lp trnh cho vi x l ATmega16.


c) Chun b lp trnh bng phn mm CodeVision
Thit lp cc thng s v chc nng ca vi x l ban u nh sau.
Vi x l ATmega16, thch anh 4 Mhz.
Thit lp In/Out cho chn OC1A.
Kch hot ngt ngoi INT2.

45

Hnh 58: Thit lp T/C1 to PWM

Thit lp T/C1 ch Fast PWM nh sau.


1. Prescale = 8.
2. Ch : Fast PWM top = ICR1.
3. Out. A: Non-Inv.
4. Gi tr ICR1 = 9C4.
5. Gi tr OCR1A ban u = 1F4.
d) Vit chng trnh iu khin
Cng tng t nh v d Timer/Counter, ta thy rng qu trnh ngt ngoi cng nh to
PWM khng lin quan ti vng lp while chnh. Ta ch cn thao tc phn khai bo bin
v chng trnh ngt ngoi, cn b T/C1 s lun hot ng to PWM theo gi tr OCR1A
mong mun.
Phn chng trnh ngt ngoi ngi c hy th t vit, tng t nh phn khai bo
bin v chng trnh ngt ngoi ca v d Timer/Counter, ri so snh vi mu sau.

Hnh 59: Chng trnh ngt ngoi

Sau khi vit xong, kim tra v complie thnh cng, kim tra trn mch m phng, nhn
nt quan st tc ng c thay i xung PWM trn Oscilloscope.
Tm tt
Ch PWM cuat T/C.
Cch iu khin PWM.
M rng
Tm hiu v iu khin gc quay ng c servo.

46
4.5 Chuyn i ADC
V d ny s hng dn ngi c s dng chc nng chuyn i ADC trn vi x l
Atmega16.
bi: Dng vi x l o in p u ra mch phn p (dng bin tr, t 0~+5V) v
hin th trn led 7 thanh ti mc 0,1V.
Ngi c cn xem li phn gii thiu chc nng chuyn i ADC hiu cch hot
ng ca b chuyn i ADC
c th hin th kt qu o trn led 7 thanh th ngi c cn phi bit cch iu khin
led 7 thanh.
4.5.1 Phn tch mch in
Theo nh bi, ta thy mch in gm c 3 khi: Vi x l, mch phn p v hin th
bng led 7 thanh.
a) Mch phn p
Mch phn p l mch in hot ng theo nguyn l n gin sau.

Hnh 60: Nguyn l phn p

Xt mt mch in nh hnh v, R1 v R2 mc ni tip, c cp in p Vo . Cc in p


ri trn tr R1 v R2 l:
V1 = Vo

R1
R2
v V1 = Vo
R1 + R2
R1 + R2

Nu thay i gi tr ca R1 hoc R2 , in p V1 v V2 cng thay i theo. Nh vy t mt


in p Vo = 8V , ta c th thu c in p V1 hoc V2 theo yu cu (chng hn nh

V1 = +5V a vo chn vi x l chng hn).


c th thay i R1 v R2 trong qu trnh s dng, ngi ta dng bin tr, nguyn tc
hot ng ca bin tr nh sau.

Hnh 61: Nguyn l hot ng bin tr

Bin tr l mt linh kin in, thng c 3 chn (1), (2), (3), vi in tr hai chn 1-2
bng R1 v in tr hai chn 3-2 bng R2 , trong R1 + R2 = Ro khng i. Khi iu chnh
ly in p Vout chn (2), ngi ta thay i in p R1 v R2 . Cng thc tnh in p ra l.
Vout = Vin

R2
Ro

47
b) Hin th led 7 thanh
in p a vo vi x l thay i t 0 ti +5V, v yu cu chnh xc ti mc in p
0,1V, nh vy chng ta cn 2 led 7 thanh cho bi v d ny.
n gin hn vi ngi c, trong bi v d ny s khng trnh by cch hin th led
7 thanh bng phng php quet led, m 2 led 7 thanh hot ng c lp.

Hnh 62: Led 7 thanh Ant chung

Hnh 62 gii thiu cu trc ca 1 led 7 thanh ant chung. Mun cho on led no sng
(v d on b v on c hin th s 1), ta phi cp in p dng vo chn COM v
mc trng thi cc u b v c l 0, cc chn cn li c mc trng thi l 1. Nh vy ni ton
b 8 chn a, b,, dp ca led 7 thanh vo vi x l, ta c th dng chc nng In/Out hin th
s trn led 7 thanh.
4.5.2 Nguyn l iu khin v mch m phng trn Proteus
T cc bc phn tch trn, ta a ra nguyn l iu khin nh sau.

Hnh 63: Nguyn l iu khin

in p thay i t 0 ti +5V t mch phn p s c a vo vi iu khin (qua cc


chn ADC). Khi chuyn i ADC s chuyn tn hiu in p thnh gi tr s tng ng vi
iu khin iu khin cc led 7 thanh hin th gi tr in p o c.
T nguyn l iu khin v phn tch mch in, ta tin hnh xy dng mch nguyn l
m phng trn Proteus vi cc linh kin.
Vi x l Atmega16.
Bin tr 10k.
2 led 7 thanh loi Ant chung.

48

Hnh 64: Mch mp hng trn Proteus

Do in p t vo knh ADC c gi tr t 0 ti +5V nn ta s chn in p tham chiu


AREF bng in p t vo chn VACC, trn hnh 64, chn AREF c ni vi chn AVCC.
in p ra t mch phn p c a vo chn PA0 (ADC0). B chuyn i ADC s o
in p ti knh ADC0 ny v vi iu khin s hin th gi tr o c trn 2 led 7 thanh. 2
led 7 thanh s c iu khin bng 2 cng l PORT C v PORT D. Led 7 thanh (I) hin th
ch s hng n v, led 7 thanh (II) hin th ch s sau du phy.

49
4.5.3 Lp trnh cho vi x l
a) Xc nh yu cu lm vic ca vi x l
Theo nh cc bc phn tch yu cu lm vic ca mch, ta thy vi x l trong v d
Chuyn i ADC cn phi s dng cc khi l: khi chuyn i 1 knh ADC, chc nng
In/Out ca 2 PORT C v PORT D.
Do in p t vo knh ADC c gi tr t 0 ti +5V nn ta s chn in p tham chiu
AREF bng in p t vo chn VACC, tc bng +5V.
gim nh yu cu tnh ton, ng thi cng ph hp vi kh nng quan st ca
mt ngi, ta yu cu vi x l tin hnh o in p v hin th ln led 7 thanh theo chu k
0,25s.
b) Xy dng thut ton iu khin
Thut ton iu khin ca v d Chuyn i ADC c th ly nh trong hnh sau.

Hnh 65: Thut ton iu khin

in p t ti chn PA0 s c b chuyn i ADC o v tr v gi tr s tng ng


(t 0 ti 1023 ng vi gi tr in p t 0 n +5V). T gi tr s ny s phi qua bc quy
i, tnh ra in p, cng nh ch s hng n v v ch s hng chc ca gi tr in p.
Hai ch s ny s c hin th trn led 7 thanh qua cc cng PORT C v PORT D. Cc
bc trn s lp li vi chu k 0,5s.
Nh vy ngi c c th thy rng cc bc trn s c thc hin trong vng lp
while chnh. Trong bi vit ny s gii thiu khi nim v chng trnh con. y l cch
thc hay c dng trong lp trnh, nht l lp trnh cc d n phc tp.
Tnh gi tr hng n v v 1 ch s sau du phy
Nh gii thiu, sau khi o in p, b chuyn i s tr v gi tr s nguyn (t l
ADC_val) t 0 ti 1023 ng vi khong in p o c. Cng thc in p t vo knh
ADC l:
ADC_val
Vin = 5.
1023
Gi tr Vin thu c c th l s l, chng hn 2,28V. Nu vy th qu trnh xc nh
ch s sau du phy (ch s 2) s phi dng cc thut ton phc tp. n gin ta tm
cch a 1 ch s sau du phy sang bn tri du phy. lm iu chng ta nhn gi tr
thc ca in p cn o Vin vi 10, c gi tr in p tnh ton Vtt.
ADC_val
.10
1023
Nu ban u chng ta t kiu bin cho bin Vtt l gi tr nguyn dng (char, int,
), th vi gi tr v d ca Vin=2,28V, ta s thu c gi tr ca Vtt l: 22,8 lm trn
Vtt = 5.

50
thnh 23, tc l Vtt=23. xc nh c ch s 2, ta li tin hnh chia Vtt cho 10 v gn
cho mt bin nguyn dng, t l dvi (n v).
dvi = Vtt /10 = 23/10 = 2,3 lm trn thnh dvi = 2
xc nh c ch s 3, ta vn chia Vtt cho 10, nhng ly phn d v gn cho bin
nguyn sdp (sau du phy).
sdp = Vtt-10*dvi = 23-10*2 = 3
Hin th ra led 7 thanh
Nh trnh by, vic hin th cc ch s ln led 7 thanh c quyt nh bi t hp
trng thi cc chn trong PORT iu khin. cc v d trc, ngi c bit cch iu
khin trng thi ca mt chn trong PORT bng lnh (PORTx.y = z;). Tuy nhin nu phi
iu khin cng lc c 8 chn trong mt cng (trong trng hp ny l iu khin led 7
thanh), ngi ta s dng lnh
PORTx = z;
Trong : x l tn Port cn gn trng thi (c 8 chn).
z l gi tr gn.
Gi tr trng thi ca mi chn hoc bng 0 hoc bng 1, dng lnh trn, ngi ta xp
trng thi cn gn ca 8 chn trong Port ln lt cnh nhau, lm thnh mt s nh phn.
Chn s
Trng thi
S z

7
1
1

6
1
1

5
1
1

4
1
1

3
1
1

2
0
0

1
0
0

0
1
1

Bng trng thi cc chn ca PORTC hin th s 1 trn


led 7 thanh.
Nh trn mch m phng, PORT C iu khin led 7 thanh hin th s 1, th hai on
led b v c sng, ng vi hai chn PC1 v PC2 trng thi 0, cn cc chn khc trng thi 1.
T bng trn suy ra s z bng 11111001 trong h nh phn. Nu chuyn sang h c s 16 th z
bng F9. Nh vy nu mun gn trng thi PORTC hin th s 1 nh trn, th ta vit:
PORTD = 0b11111001;
hoc
PORTD = 0xF9;
Vi s ni dy nh mch m phng, ta c m hex (c s 16) ca cc ch s trn led 7
thanh nh sau.

Hnh 66: Bng m hex ca bi v d

51
c) Chun b lp trnh bng phn mm CodeVision
Thit lp ban u vi cc thng s: vi x l Atmega16, thch anh 4Mhz, tt c cc chn
ca PORT C v PORT D l out, kch hot ADC.
Cc bc thit lp chc nng In/Out cho cc PORT C v PORT D lm tng t nh cc
v d trc, vic kch hot chc nng ADC theo nh hnh sau.

Hnh 67: Kch hot chc nng ADC

Trong hp thoi CodeWizardAVR chn ADC, nh u vo mc ADC Enabled.


Trong Volt. Ref: chn AVCC pin chn in p tham chiu cho khi ADC l in p
+5V ti chn AVCC.
Trong hp thoi Clock:, click chn tn s lm vic ca b ADC. Tn s lm vic cng
cao, tc chuyn i cng nhanh, nhng sai s cng sao. Trong v d chn ny chn gi tr
tn s lm vic cu b ADC l 250 kHz.
d) Vit chng trnh iu khin
Trong v d ny c dng hm delay, nn trc tin hy include file delay.h (nu chng
trnh cha include file delay.h sn).
Khai bo cc bin sau.
Vtt kiu char cha gi tr in p tnh ton.
dvi v sdp kiu char cha gi tr ch s hng n v v ch s sau du phy.
Chng trnh ADC v tnh cc ch s
Trong chng trnh, sau khi kch hot b ADC phn chun b, vic yu cu vi x l
tin hnh c gi tr ADC c thc hin bng dng lnh.
read_adc(0);
Trong read_adc(0) l chng trnh c phn mm to sn cho chc nng ADC,
trong du ngoc () l s th t knh ADC cn o. Trong v d ta a in p vo knh
ADC0, nn s th t knh ADC cn o l 0. Khi qua lnh ny, vi x l s o in p ti knh
ADC0 v tr v gi tr s tng ng.
Chng trnh tnh gi tr in p v cc ch s cn tm nh sau.
Vtt=5*10*read_adc(0)/1023;
dvi=Vtt/10;
sdp=Vtt-dvi*10;

52
Ton t V (&)
Theo nh yu cu hot ng ca mch, 2 led 7 thanh dng hin th in p o c
vi 1 ch s sau du phy, nh vy led 7 thanh (I) phi lun sng du chm (dp) hin th
du phy. C hai cch lm cho du chm trn led 7 thanh (I) lun sng l.
Vit m hex li cho led 7 thanh (I) vi trng thi chn PC7 lun bng 0 v
iu khin trng thi PORT C bng m hex ny.
S dng php ton logic a m hex hnh 65 thnh m hex mi vi
trng thi chn PC7 lun bng 0.
Qu trnh vit li m hex hin th du phy (dp) tng t nh vit m hex trnh by
trn, ngi c hy t lm c th t mnh vit c cc m hex cho led 7 thanh. Trong
bi v d ny s trnh by cc s dng php ton logic, ngi c c tip cn vi cch
vit code khc so vi cc v d t u ti liu.
Nh trnh by, hin th ch s sau du phy led (II), ta dng lnh.
PORTD = z;
Trong z l m hex trong bng 65 ng vi s cn hin th (gi tr ca bin sdp), v d
nh hin th s 2, ta vit.
PORTD = 0xA4;
iu khin led 7 thanh (I) hin th ch s vi du phy (dp) lun sng (v d nh
hin th ch s 2., ta dng ton t logic V & nh sau.
PORTC = 0xA4 & 0x7F;
Trong A4 l m hex ca ch s 2 khng du chm (trong bng 65), cn 7F trong h
c s 16 chnh l 01111111 trong h nh phn. gii thch r hn, hy xem bn di.
Th t chn
Z = 0xA4
0x7F
0xA4 & 0x7F
PORTC

7
1
0
0
0

6
0
1
0
0

5
1
1
1
1

4
0
1
0
0

3
0
1
0
0

2
1
1
1
1

1
0
1
0
0

0
0
1
0
0

Bng trng PORTC sau php ton V (&).


Nu coi trng thi 1 ng vi ng (), cn trng thi 0 ng vi sai (S), theo suy lun
logic thng thng ta s c.
Chn 7: v S s thnh S.
Chn 6, 4, 3, 1, 0: S v s thnh S.
Chn 5, 2: v s thnh .
So snh trng thi PORTD hin th ch s 2 v trng thi PORTC hin th ch s 2.
theo bng sau.
PORTD (2)
PORTC (2.)

1
0

0
0

1
1

0
0

0
0

1
1

0
0

0
0

So snh trng thi PORT D v PORTC khi cng hin th s 2.


Ta thy sau khi dng php ton V (&), t trng thi nh ca PORTD (0xA4) s chuyn
thnh trng thi nh ca PORTC (0xA4 & 0x7F), ch khc nhau bit s 7 (iu khin on
led dp). Bit s 7 ca PORTC lun c gi tr 0, v vy on led dp ca led 7 thanh (I) lun
sng.

53
Chng trnh hin th led
V c bn, sau khi bit v php so snh if cc v d trn, ngi c s nhn ra rng c
th dng nhiu php so snh if iu khin trng thi cc PORT iu khin led, v d
iu khin led (II).
Nu sdp = 0, gn trng thi PORTD = 0xC0;
Nu sdp = 1, gn trng thi PORTD = 0xF9;

Nh vy iu khin mt led 7 thanh hin th 10 ch s t 0 ti 9, cn phi c 10 php
so snh if, 2 led 7 thanh th s phi dng 20 php so snh if. gim bt khi lng dng
lnh (nhm tit kim b nh v gim ti cho vi x l), ngi ta gp nhiu lnh if thnh lnh
swichcase.
Ly v d iu khin hin th led 7 thanh (II) hin th 10 s t 0 n 9, cu trc lnh
swichcase nh sau.

Hnh 68: Lnh switch...case iu khin PORTD

ngha ca cu trc swichcase trn nh sau. Vi x l s so snh gi tr ca bin


sdp, nu sdp = 0 th thc hin cc lnh 0, nu sdp = 1 th s thc hin cc lnh 1,
Cc lnh 0, 1, 2, s gn trng thi cho PORTD bng gi tr m hex tng ng.
Cu trc iu khin PORTC cng tng t, ch khc ch gia tr gn cho PORT c
thay i hin th du phy (dp).

54

Hnh 69: Cu trc switch...case iu khin PORTC

Chng trnh con


Hai on chng trnh iu khin hin th led trn c th t trc tip vo vng lp
while, khi vng lp while chnh s c dng.

Hnh 70: Cu trc vng lp while

Ngi c hy vit thm vo trong vng lp while trn v th chy m phng trn
Proteus. Tuy nhin qu trnh lp trnh r rng, d theo di, vi cc tp lnh c th c
nhm li nh cc lnh swichcase trn, ngi ta thng dng chng trnh con.

55

Hnh 71: Hnh dung v chng trnh con

Nh hnh 70, nhm cc lnh 1,2,,n thay v c vit trong vng lp while chnh,
c th c nhm li trong chng trnh con x. Khi mun thc hin cc lnh 1,2,,n ny,
ta ch vic a tn chng trnh con x vo vng lp while chnh.
Nh vy, vic tch mt hoc nhiu nhm lnh ra thnh chng trnh con s gip ngi
lp trnh d nm bt c qu trnh lp trnh, ng thi gim s lng dng code trong vng
lp while chnh trong trng hp cn phi dng nhiu ln cc tp lnh ging nhau.
Trong chng trnh CodeVision, cc chng trnh con c vit bn ngoi trc chng
trnh chnh void main(void), trong trng hp bi v d ny, hai chng trnh con iu
khin led (I) v (II) c vit sau khi khai bo bin nh trong hnh.

Hnh 72: Hai chng trnh con

Trn hnh 71 l hai chng trnh con. Chng trnh con led1 iu khin hin th trn
led 7 thanh (I), chng trnh con led2 iu khin hin th trn led (II). Sau y s trnh by
cch vit chng trnh con led2.
Mt chng trnh con c khai bo trong CodeVisionAVR theo c php sau.
void tn chng trnh con (khai bo bin)
{
Tp lnh trong chng trnh con;
}
Trong tn chng trnh con l tn ty theo ngi lp trnh, vi iu khin khng
c du cch, khng c ch s ng u, khng dng k hiu c bit. Trong lp trnh khng
uwc t hai chng trnh con c tn ging nhau. Trong v d trn, ta t tn chng trnh
con iu khin hin th led 7 thanh (II) l led2.
Phn khai bo bin trong du ngoc ()l ni khai bo cc bin ch dng trong chng
trnh con, gi l bin cc b (chng trnh con vn c th s dng bin c khai bo u

56
chng trnh, gi l bin ton cc, v d nh bin dvi v sdp). Trong chng trnh con
led2 ta thy khng c bin cc b (ch c cu lnh switch...case vi bin dvi hoc
sdp), trong trng hp ny trong du ngoc s c vit l (void).
Nh vy b cc ca chng trnh con led2 s nh sau.
void led1(void)
{
switch...case iu khin led II;
}
Sau khi a ton b cu trc switch...case iu khin led (II), ta c ton b
chng trnh con led2 nh sau.

Hnh 73: Chng trnh con led2

Tng t, chng trnh con led1 c vit nh sau.

Hnh 74: Chng trnh con led1

Nu hiu s b v chng trnh con, ngi c cng s thy rng hm read_adc(0)


trnh by trn cng l mt chng trnh con c phn mm to sn s dng.

57
Vng lp while chnh
Sau khi khai bo bin v vit chng trnh con nh cc bc trn, vng lp while chnh
iu khin o v hin th in p nh sau.

Hnh 75: Vng lp while chnh

Ngi c hy t vit cc phn trnh by trn vo phn mm CodeVisionAVR,


kim tra v chy th trn Proteus.

Hnh 76: Chy m phng trn Proteus

Nu lm ng nh cc bc trn, in p u ra mch phn p s c o v hin th


trn led 7 thanh nh hnh trn. Dng chut thay i gi tr bin tr thay i hin th trn
led 7 thanh.
Tm tt
Mch phn p, led 7 thanh Ant chung.
S dng chc nng ADC, tnh in p cn o v cc ch s cn thit.
iu khin trng thi ca cc PORT.
Chng trnh con.
M rng
Hin th 2 led 7 thanh bi v d bng phng php qut led (chung mt
PORT iu khin, mi led 7 thanh sng ri tt lun phin trong 5ms).

58
4.6 Truyn nhn d liu vi my tnh
V d trong ti liu ny s hng dn ngi c thit lp v s dng chc nng truyn
nhn d liu vi my tnh bng USART mc n gin.
bi: Lp trnh s dng chc nng USART ca Atmega16, o in p t mch phn p
(0~+5V) v gi v my tnh.
4.6.1 Phn tch mch in
T bi, ta thy mch in ca v d c cc khi sau.
Vi x l.
Mch phn p.
Thit b nhn d liu t vi x l.
Vi x l trong v d vn dng Atmega16, mch phn p v ngt ngoi ging nh cc v
d trnh by. Thit b nhn d liu truyn v t vi x l c th l my vi tnh (qua cng
COM) hoc thit b VIRTUAL TERMINAL khi m phng trn Proteus.
Mch in hot ng nh sau: vi x l tin hnh o in p t mch phn p t trn
knh ADC v gi gi tr o v v hin th trn thit b Terminal.
4.6.2 Nguyn l iu khin v mch m phng
Nguyn l iu khin ca bi v d ny c cho nh hnh di.

Hnh 77: Nguyn l iu khin bi v d

in p t u ra mch phn p c a vo knh ADC ca vi x l Atmega16. Khi c


tn hiu bn phm t trnh Terminal, vi x l s o in p t vo knh ADC v gi gi tr o
c ti trnh Terminal.
T nguyn l iu khin, ta xy dng mch m phng nh sau.

Hnh 78: Mch m phng trn Proteus

Ch : chn RXD ca vi x l phi ni vi chn TXD ca trnh Terminal v ngc li.

59
4.6.3 Lp trnh cho vi x l
a) Xc nh yu cu lm vic ca vi x l
T bi v nguyn l iu khin, cc chc nng ca Atmega16 cn dng trong v d
ny l:
Chc nng ADC.
Chc nng USART.
Chc nng ngt ngoi s nhn bit tc ng nhn nt ca ngi dng. Cc bc trong
chng trnh iu khin nh sau.
B ADC s o v vi x l tnh ton gi tr in p.
Vi x l li dng chc nng USART truyn gi tr o c v trnh
Terminal.
Gi tr in p o c sau khi tnh ton c th l gi tr thp phn vi nhiu ch s sau
du phy, trong khi gi tr cn o x l (x l v v th trn my tnh) ch cn khong
2 ch s sau du phy. V vy ch cn gi gi tr in p sau khi c lm trn.
ng thi trong lp trnh vi x l, qu trnh x l cc bin c gi tr thp phn (c du
phy) tng i phc tp, phi s dng kiu bin tn b nh hn, cng nh nhiu cu lnh
cc php ton v chui, v vy trong v d ny s khng hin th du phy (v d gi tr
3,25 s c hin thanh thnh 325).
Trong o c thc t, gi tr 325 trn sau khi gi v my tnh, s c phn mm x
l trn my tnh quy i v gi tr thc (325 chuyn v 3,25 bng cch chia cho 100 chng
hn). Cch lm ny khin cho vic lp trnh trn vi x l n gin hn nhiu.
b) Xy dng thut ton iu khin
T yu cu lm vic ca vi x l, ta xy dng thut ton iu khin nh sau.

Hnh 79: Thut ton ca bi v d

B ADC tin hnh o gi tr in p, sau gi tr sau khi chuyn v dng k t s c


b USART truyn ti trnh Terminal. Qu trnh ny lp i lp li lin tc o v gi gi tr
in p, nh vy ton b chng trnh nm trong vng lp while chnh. Vic dng chng
trnh trong 0,25s vi mc ch mt ngi c th theo di kt qu m phng trn proteus.
Trong thc t o c, chu k o-chuyn-truyn trn ch mt khong 10ms.
L do phi chuyn gi tr s sang dng k t l v b USART ch truyn/nhn d liu
dng cc k t ring l, v d nh k t a, b, c, k t 1, 2, 3. Chng hn mun truyn gi
tr in p 12V v my tnh, trc tin phi chuyn v dng k t 12(gi l mt chui,
bao gm k t 1 v k t 2), sau b USART s truyn ln lt k t 1 v k t

60
2 ny v my tnh. Phn mm x l trn my tnh s ghp hai k t trn thnh mt chui,
sau chuyn li thnh dng s.

Hnh 80: Qu trnh gi d liu t vi x l v my tnh

c) Chun b lp trnh bng phn mm CodeVision


Trong bi v d ny ch s dng chc nng ADC v USART ca Atmega16, v vy trong
bc chun b chng ta s kch hot v thit lp ban u cho hai chc nng ny.
Vi chc nng ADC, vic kch hot v thit lp ban u c tin hnh ging nh trong
v d Chuyn i ADC, ngi c hy xem li v t tin hnh bc ny.
kch hot v thit lp chc nng USART, lm nh hnh sau.

Hnh 81: Kch hot USART

Trong hp thoi CodeWizardAVR, chn mc USART v lm cc bc.


1. kch hot chc nng truyn d liu, click chnvo Transmitter.
2. chn tc Baud Rate, click v chn tc Baud Rate trong Baud
Rate.
3. chn kiu khung truyn (Frame), chn trong Communication
Parameters.
Nh trn hnh 80, ta thy trong bi v d kch ch s dng chc nng truyn d liu ca
b USART.
Ging nh trong phn gii thiu tnh nng USART, tc Baud Rate = 9600 v khung
truyn 8 Data, 1 Stop, khng Parity c chn nh trn hnh 80.

61
d) Vit chng trnh iu khin
Khai bo bin v include cc file header
Trong chng trnh ny dng cc bin sau.
Bin V kiu unsigned int, bin ny dng cha gi tr in p
khng c du phy ( nhn vi 100).
Bin chuoi dng chui 10 k t.
Khai bo bin chuoi theo c php sau.
char chuoi[10];
Include cc file header sau (nu phn mm CodeVision include sn th khng cn vit
thm vo na).
delay.h dng cho chc nng ngng chng trnh.
stdlib.h dng cho chc nng chuyn gi tr s thnh dng chui k t.
stdio.h dng cho chc nng USART.
T phn xy dng thut ton iu khin, ta thy rng ton b chng trnh nm trong
vng lp while chnh c cu trc nh sau.

Hnh 82: Cu trc vng lp while chnh

o gi tr in p
Sau khi xem bi v d Chuyn i ADC, ngi c c th t vit on code o gi tr
in p trn hnh 81. Sau khi vit, hy so snh vi mu tham kho sau.
V = 5*read_adc(0)/10.23;
Chuyn gi tr s thnh chui k t
Mc ch ca on code ny l chuyn gi tr s trong bin V thnh chui k t v cha
trong bin chuoi. chuyn mt gi tr nguyn (int) ca bin V thnh chui k t ca bin
chuoi, s dng dng lnh sau.
itoa(V, chuoi);
Truyn chui k t qua b USART
truyn mt chui nhiu k t (bin chuoi) qua b USART, ta dng hm puts() sau.
puts(chuoi);
Khi gp lnh puts(chuoi); vi x l s gi ln lt cc k t trong bin chuoi qua
b USART nh trnh by.
Cn lnh dng chng trnh 0,25s ngi c hy t vit v t kim tra.

62
Sau khi vit xong, ton b code trong vng lp while chnh nh sau.

Hnh 83: Vng lp while chnh

Khi vit xong, kim tra v complie thnh cng, tin hnh chy trn ch m phng. Trn
mch m phng. Ngi c hy nh li rng trong truyn/nhn USART, thit b truyn v
nhn phi c thit lp ging nhau. T u v d chng ta mi ch thit lp USART trn vi
x l, thit lp USART trn trnh Terminal, m hp thoi Edit Component ca trnh
Terminal v chn cc thng s ging vi USART trn vi x l.

Hnh 84: Thit lp cc thng s USART ca trnh Terminal ging vi trn vi x l

Sau khi thit lp trong, chy mch m phng, lc ny ngi c s thy trnh Terminal
hin th kt qu gi v lin tip nhau nh sau.

Hnh 85: Trnh Terminal hin th kt qu lin tip nhau

Nu nh hnh 84 th chng ta khng th theo di c kt qu, d theo di, hy lp


trnh hin th xung dng sau mi ln gi mt chui k t nh sau.

63
Tr li phn mm CodeVision, vit thm mt dng code vo trong vng lp while chnh
nh hnh di.

Hnh 86: Vng lp wlhie chnh sau khi sa

ngha c dng code: putchar(13); l gi mt k t th 13 trong bng m ASCII


qua b USART. Trong bng m ASCII, k t th 13 l \r. Khi gp k t ny, trnh
Terminal s xung dng.
Sau khi sa xong, hy chy li mch m phng trn Proteus, thay i gi tr bin tr v
quan st d liu gi v trn trnh Terminal, nu lm ng, cc gi tr gi v s c hin th
nh hnh sau.

Hnh 87: Trnh Terminal hin th kt qu o theo cc dng

Tm tt
Cc kch hot v thit lp USART.
Cch gi d liu qua USART.
Cc khi nim v chui v hm s dng cho chui.
M rng
Tm hiu cch nhn d liu qua USART.

64
Ph lc
Tn v t kha cc linh kin hay dng trong th vin Proteus
Tn
T kha
Vi x l AVR
tiny2313, mega16
n Led
led
Led 7 thanh
7seg
in tr
resistor
T in
capacitor
Transistor
transistor
IRF540

IRF540

Bin tr
i-t
Nt bm

pot-hg
diode
button

Cng tc

switch

n
ng c SERVO
ng c bc

lamp
servo
step

Mt s phn t hay dng khc trn thanh cng c ca Proteus

65
Mt s cu trc lp, so snh trong C hay dng
Lnh If :
- C php : If ( biu thc) < lnh> ;
- Din gii : nu biu thc ng ( # 0 ) thc hin <lnh>
ngc li nu biu thc sai ( = 0 ) thc hin lnh ng sau cu lnh if.
- Hoc : If ( biu thc) <lnhA>;
else < lnh B);
Biu thc : # 0 ( ng) < lnh A>
=0 ( sai ) < lnh B>.

Lnh For :
- C php : for ( bt1; bt2 ; bt3) lnh;
- Gii thch :
+ bt1 : l ton t gn to gi tr ban u cho bin iu khin.
+ bt2 : biu thc iu kin thc hin vng lp.
+ bt3 : biu thc tng gi tr ca bin iu khin ca vng lp.
- V d: For (i=0; i<=100;i=i+2);
{
Cc dng lnh A;
}
Khi i = 0, thc hin cc lnh A, sau gi tr i c tng thm 2 thnh i=2.
Khi i = 2, thc hin cc lnh A, sau gi tr i c tng thm 2 thnh i=4.

Khi i = 100, thc hin cc lnh A, sau gi tr i c tng thm 2 thnh


i=102.
Khi i khng cn nh hn hoc bng 100 na, b qua khng thc hin cc lnh A.
- C ch hot ng :
a/Tnh gi tr ca biu thc bt1 .
b/Tnh gi tr ca bt2
c/ + Nu gi tr ca bt2(=0) l sai my s ra khi lnh for.
+ Nu gi tr ca bt2(!=0) l ng th my s thc hin lnh.
Lnh while :
- C php : while ( biu thc)
{
Cc lnh A;
}
- Nguyn tc thc hin :
+b1. Tnh gi tr ca biu thc.
+b2. Nu gi tr ca biu thc sai ( = 0 ) th chng trnh ra khi vng while
+b3. Nu gi tr ca biu thc ng (# 0) th thc hin cc lnh A v quay li
bc 1 (b1).

66
Lnh switch
- C php : switch (biu thc nguyn).
{
case N1 : lnh 1;
break;
case N2 : lnh 2;
break;
.....
default : lnh;
}
- Biu thc nguyn l gi tr nguyn : Ni (i=1,2...) l cc s nguyn.
- Vi biu thc khc vi mi Ni => thc hin lnh sau default.

You might also like