Professional Documents
Culture Documents
Giao Trinh Avr Hay
Giao Trinh Avr Hay
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
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.
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.
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.
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:
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:
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:
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.
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)
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.
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 16: S dng in th 5V cng sut nh iu khin Mo-t 12V cng sut ln
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:
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.
22
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.
24
25
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.
26
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.
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:
set chn
VDK
28
while (1)
{
PORTB.5 = 1;
delay_ms(500);
PORTB.5 = 0;
delay_ms(500);
}
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:
30
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.
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:
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.
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:
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.
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.
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.
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
1
= 64.106 ( s )
4.106
2
= 31250
Khi xc nh c chu k 2s th s ln phi lm: n1 =
64.106
0,5
= 7812,5
64.106
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.
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;
};
}
40
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.
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.
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.
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.
1
= 500
2.103
= 1F 4
4
= 2000
2.103
= 7D0
45
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.
R1
R2
v V1 = Vo
R1 + R2
R1 + R2
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 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.
48
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.
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
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.
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
1
0
0
0
1
1
0
0
0
0
1
1
0
0
0
0
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.
54
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
63
Tr li phn mm CodeVision, vit thm mt dng code vo trong vng lp while chnh
nh hnh di.
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
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.
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.