Professional Documents
Culture Documents
5
( 388 Votes )
Ni dung
1.
Gii thiu.
2.
Cng c.
AVR Studio.
3.
V d.
M phng vi Proteus.
4.
M phng.
Download v d
I. Gii thiu
AVR l mt h vi iu khin do hng Atmel sn xut (Atmel cng l nh sn
xut dng vi iu khin 89C51 m c th bn tng nghe n). AVR l chip vi
iu khin 8 bits vi cu trc tp lnh n gin ha-RISC(Reduced Instruction Set
Computer), mt kiu cu trc ang th hin u th trong cc b x l.
Ti sao AVR: so vi cc chip vi iu khin 8 bits khc, AVR c nhiu c tnh
hn hn, hn c trong tnh ng dng (d s dng) v c bit l v chc nng:
ATtiny22
ATtiny26
ATtiny28
ATmega8/8515/8535
ATmega16
ATmega161
ATmega162
ATmega163
ATmega169
ATmega32
ATmega323
ATmega103
ATmega64/128/2560/2561
AT86RF401.
....
Trong bi vit ny ti s dng chip ATmega8 lm v d, ti chn ATmega8
v y l loi chip thuc dng AVR mi nht, n c y cc tnh nng ca AVR
BascomAVR: lp trnh cho AVR bng basic, y l trnh bin dch kh hay
v d s dng, h tr rt nhiu th vin. Tuy nhin rt kh debug li v khng
thch hp cho vic tm hiu AVR. V vy ti khng bn khuyn khch bn s dng
trnh dch ny. Bn c th download bn demo (4K limit).
59
DEC R20
60
BRNE DELAY0
61 RET
Trc khi tm hiu ngha on code, hy nhn 1 lt qua on code. Trc ht
vic vit HOA hay vit thng l khng quan trng, bn c th vit on code vi
bt c hnh thc no min ng c php, t kha l c. Trong on code:
Phn 1 v phn 2:
.CSEG
Ch th .CSEG: Code Segment bo cho trnh bin dch rng phn code theo sau
l phn chng trnh thc thi, phn ny s c download vo b nh chng
trnh ca chip.
.INCLUDE "M8DEF.INC"
Ch th .INCLUDE bo cho trnh bin dch bt u c 1 file nh km, trong
trng hp trn l file M8DEF.INC, y l file cha cc khai bo cho chip
Atmega8 nh thanh ghi, ngtcho vic truy xut trong chng trnh ca bn, y
l dng bt buc, nu bn lp trnh cho chip khc bn hy i tn file nh km, v
d m32def.inc cho chip ATmega32 bn c th tm thy cc file ny trong th
mc C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes.
.ORG 0x000
Ch th .ORG: Set Program Origin, set v tr trong b nh s c tc ng n,
trong trng hp trn, .ORG 0x000 xc nh phn code theo ngay sau s nm a
ch 000, v tr u tin, trong b nh chng trnh. V dng lnh trong v tr u
tin l:
RJMP BATDAU
chn ca PORTB, DDRB l thanh ghi iu khin hng ( Input hoc Output). Vit
gi tr 1 vo mt bit trong thanh ghi DDRB th chn tng ng ca PORTB s l
chn xut (Output), ngc li gi tr 0 xc lp chn tng ng l ng nhp. Sau
khi vit gi tr iu khin vo DDRB, vic truy xut PORTB c thc hin thng
qua 2 thanh ghi PINB v PORTB.
Quay li vi 2 dng code ca chng ta, dng u: LDI R16, 0xFF, vi LDI
LoaD Immediately, dng lnh c ngha l load gi tr 0xFF vo thanh ghi R16,
R16 l tn 1 thanh ghi trong b nh ca AVR, 0xFF l 1 hng s c dng thp lc
phn, k hiu 0x ni ln iu , bn cng c th dng k hiu khc l $
ch 1 s thp lc phn, v d &FF, v 0xFF=255(thp phn)=0B11111111 (nh
phn). Nh th sau dng u thanh ghi R16 c gi tr l 11111111 (nh phn). Dng
th 2: OUT DDRB, R16 ngha l xut gi tr t thanh ghi R16 ra thanh ghi
DDRB, tm li sau 2 dng trn gi tr DDRB nh sau:
1
Sau khi kt thc 3 dng trn chn PB7 s ln 5V, kt thc 1 vng xoay. Cui
cng l quay v u chng trnh chnh bng dng RJMP MAIN
Hnh 2. M phng.
Bi 2 - Cu Trc AVR
5
( 581 Votes )
Ni dung
1.
Gii thiu.
2.
T chc AVR.
3.
Stack.
4.
5.
V d.
Download v d
I. Gii thiu.
Bi ny tip tc bi u tin trong lot bi gii thiu v AVR, nu sau bi "Lm
quen AVR" bn phn no bit cch lp trnh cho AVR bng AVRStudio th trong
bi ny, chng ta s tm hiu k hn v cu trc ca AVR. Sau bi ny, bn s:
Ci tin v d trong bi 1.
Hnh 4 biu din cu trong bn trong ca 1 AVR. Bn thy rng 32 thanh ghi
trong Register File c kt ni trc tip vi Arithmetic Logic Unit -ALU (ALU
cng c xem l CPU ca AVR) bng 2 line, v th ALU c th truy xut trc tip
cng lc 2 thanh ghi RF ch trong 1 chu k xung clock (vng c khoanh trn
mu trong hnh 4).
Hnh 5. Stack.
Khi nim v cch thc hot ng ca stack c th c p dng cho AVR,
bng cch khai bo mt vng nh trong SRAM l stack ta c th s dng vng nh
ny nh mt stack thc th.
khai bo mt vng SRAM lm stack chng ta cn xc lp a ch u ca
stack bng cch xc lp con tr stack-SP (Stack Pointer). SP l 1 con tr 16 bit bao
gm 2 thanh ghi 8 bit SPL v SPH (ch L l LOW ch thanh ghi mang gi tr byte
thp ca SP, v H = HIGH), SPL v SPH nm trong vng nh I/O. Gi tr gn cho
thanh ghi SP s l a ch khi ng ca stack. Quay li v d bi 1, phn khi
to cc iu kin u.
; KHOI TAO CC DIEU KIEN DAU
LDI R16, HIGH(RAMEND)
LDI R17, LOW(RAMEND)
OUT SPH, R16
OUT SPL, R17
Bn dng khai bo trn mc ch l gn gi tr ca RAMEND cho con tr SP,
RAMEND (tc End of Ram) l bin cha a ch ln nht ca RAM ni trong
AVR, bin ny c nh ngha trong file M8DEF.INC. Nh th sau 4 dng trn,
con tr SP cha gi tr cui cng ca SRAM hay ni cch khc vng stack bt u
t v tr cui cng ca b nh SRAM. Nhng ti sao l v tr cui cng m khng
l 1 gi tr khc. C th gii thch nh sau: stack trong AVR hot ng t trn
xung, sau khi d liu c y vo stack, SP s gim gi tr v th khi ng SP
v tr cui cng ca SRAM s trnh c vic mt d liu do ghi . Bn c th
1
5
8
Bit 7 I (Global Interrupt Enable) : Cho php ngt ton b): Bit ny phi
c set ln 1 nu trong chng trnh c s dng ngt. Sau khi set bit ny, bn
mun kch hot loi ngt no cn set cc bit ngt ring ca ngt . Hai instruction
dng ring Set v Clear bit I l SEI v CLI.
Ch : tt c cc bit trong thanh ghi SREG u c th c xa thng qua cc
instruction khng ton hng CLx v set bi SEx, trong x l tn ca Bit.V d
CLT l xa Bit T v SEI l set bit I.
Ti ch gii thch ngn gn chc nng ca cc bit trong thanh ghi SREG, c th
chc nng v cch s dng ca tng bit chng ta s tm hiu trong cc trng hp
c th sau ny, ngi c c th t tm hiu thm trong cc ti liu v
INSTRUCTION cho AVR.
Ti cung cp thm 1 bng tm tt s nh hng ca cc php ton i s, logic
ln cc Bit trong thanh ghi SREG.
on Macro trn c tn delay4 thc hin vic delay 4 chu k my bng 4 lnh
NOP, nu trong chng trnh bn cn dng Macro ny th ch cn gi delay4 bt
k dng no.
[] ; code ca bn
Delay4
[] ; code ca bn
Mi ln tn ca Macro c gi, trnh bin dch s tm n Macro v copy
ton b ni dung Macro vo v tr bn gi. Nh vy thc cht con tr chng trnh
khng nhy n Macro, Macro khng lm gim dung lng chong trnh m ch
lm cho vic lp trnh nh nhng hn. y chnh l khc bit ln nht ca Macro
v Subroutine (chng trnh con).
Chng trnh con cng l 1 on code thc hin 1 chc nng c bit no .
Tuy nhin khc vi Macro, mi khi gi chng trnh con, con tr chng trnh
nhy n chng trnh con thc thi chng trnh con v sau quay v chng
trnh chnh. Nh th chng trnh con ch c bin dch 1 ln v c th s dng
nhiu ln, n lm gim dung lng chong trnh. y l u im v cng l im
khc bit ln nht gia chng trnh con v Macro. Tuy nhin cn ch l vic
nhy n chng trnh con v nhy v chng trnh chnh cn vi chu k my, c
th lm chm chng trnh, y l nhc im ca chng trnh con so vi macro.
Chng trnh con cho AVR lun c bt u bng 1 Label, cng l tn v
a ch ca chng trnh con. Chng trnh con thng c kt thc vi cu lnh
RET (Return). Chng ta bit v chng trnh con qua v d ca bi 1, trong
DELAY l 1 chng trnh con.
gi chng trnh con t 1 v tr no trong chng trnh, chng ta c th
dng lnh CALL hoc RCALL(Relative CALL) (xem li v d bi 1 v cch s
dng RCALL). Mi khi cc lnh ny c gi, b m chng trnh c t ng
c PUSH vo stack v khi chng trnh con kt thc bng lnh RET, b m
chng trnh c POP tr ra v quay v chng trnh chnh. Lnh CALL c th
gi 1 chng trnh con bt k v tr no trong khi RCALL ch gi trong khong
b nh 4KB, nhng RCALL cn t chu k xung clock hn khi thc thi.
Hai instruction khc c th c dng gi chng trnh con l JMP
(Jump) v RJMP (Relative Jump). Khc vi cc lnh call, cc lnh jump khng cho
php quay li v khng t ng PUSH b m chng trnh vo Stack, s dng
cc lnh ny gi chng trnh con bn cn mt s lnh jump khc cui chng
trnh con.
Tm li bn nn vit 1 chng trnh con ng chun v dng CALL hoc
RCALL gi chng cc chng trnh ny, ch nhng trng hp c bit hoc
bn hiu rt r v chng th c th dng cc lnh jump.
V. V d minh ha.
Hnh 9. V d cho bi 2.
S dng AVRStudio to 1 project mi vi tn gi avr2 (xem li cch to
Project mi trong AVRStudio). Vit li phn code bn di vo vo file avr2.asm
List 1. V d cu trc AVR
1 .INCLUDE "M8DEF.INC"
2 .CSEG.
3 .ORG 0x0000
4
RJMP BATDAU
5 .ORG 0x0020
6 BATDAU:
7 ;KHOI DONG STACK POINTER
8
LDI R17, HIGH(RAMEND)
9
LDI R16, LOW(RAMEND)
10
OUT SPL, R16
11
OUT SPH,R17
12 ; KHOI DONG CAC PORT
13
CLR R16 ; XOA R16, R16=0
14
OUT DDRB, R16 ; DDRB=0, PORTB LA NGO NHAP
15
LDI R16, 0xFF ; SET TAT CA CAC BIT CUA R16 LEN 1
16
OUT PORTB,R16 ;DDRB=0, PORTB =0xFF, KEO LEN CAC CHAN PORTB
17
OUT DDRD, R16 ;DDRD=0xFF, PORTD LA NGO XUAT
18
CLR R25 ;XOA R25, R25 LA THANH GHI DUNG CHUA SO DEM
19
SER R20 ; R20 LA THANH GHI TAM CHUA GIA TRI TRUOC DO CUA PINB
20 MAIN:
21
IN R21,PINB ;DOC GIA TRI TU PINB, TUC TU CAC BUTTON
22
RCALL SOSANH ;GOI CHUONG TRINH CON SOSANH
23
OUT PORTD, R25 ;XUAT GIA TRI DEM RA PORTD
24
SBRS R21,0 ;NEU BIT 0 CUA R21 (TUC CHAN PB0) =1 THI BO QUA DONG ;TIEP T
25
RCALL TANG ;NHAY DEN CHUONG TRINH CON TANG GIA TRI DEM
26
SBRS R21,1 ;NEU BIT 1 CUA R21 (TUC CHAN PB1) =1 THI BO QUA DONG ;TIEP T
27
RCALL GIAM ;NHAY DEN CHUONG TRINH CON GIAM GIA TRI DEM
28
MOV R20,R21 ;LUU LAI TRANG THAI PINB
29
RJMP MAIN
30 ;**********************CHUONG TRINH CON************************
31 ; **************subroutine kiem tra gioi hang (tu 0 den 9) cua so dem
32 SOSANH:
33
CPI R25, 10
34
BREQ RESET0 ;NEU GIA TRI DEM=10 THI TRA VE 0
35
CPI R25, 255
36
BREQ RESET9 ;NEU GIA TRI DEM =255 THI TRA VE 9
37
RJMP QUAYVE ;NHAY DEN NHAN QUAYVE
38 RESET0:
39
LDI R25,$0 ;TRA GIA TRI DEM VE 0
40
RJMP QUAYVE
41 RESET9:
42
LDI R25,$9 ;GAN 9 CHO GIA TRI DEM
43 QUAYVE:
44
RET
45 ; ************************************************************
46 ; **************subroutine tang so dem 1 don vi neu dieu kien thoa
47 TANG:
48
SBRS R20,0
49
RET
50
INC R25
51
RET
52 ; **************subroutine giam so dem 1 don vi neu dieu kien thoa
53 GIAM:
54
SBRS R20,1
55
RET
56
DEC R25
57
RET
Trong v ny ny, chng ta s dng 2 PORT ca chip ATMega8, PORTD dng
xut d liu (s m) ra chip 7447 v sau hin th trn LED 7 on. PORTB
dng nh ng nhp, tn hiu t cc button s c chip ATMega8 nhn thng qua 2
chn
PB0
v
PB1
ca
PORTB.
Hot ng ca cac PORT v vic xc lp 1 PORT nh cc ng xut chng ta
kho st trong bi 1. y chng ta kho st thm v xc lp PORT nh 1 ng
RET
INC R25
RET
Dng u tin ca chng trnh con TANG l kim tra trng thi trc ca
chn PB0 (c lu bit 0 trong thanh ghi R20), nu trng thi ny bng 0, ngha
l khng c s chuyn t 1 xung 0 chn PB0, dng 2 (lnh RET) s c thc
thi quay v chng trnh chnh. Nhng nu PB0 trc bng 1, ngha l c s
thay i t 1->0 chn ny, gi tr m s c tng thm 1 nh INC R25, sau
quay
v
chng
trnh
chnh.
Tm li mun tng gi tr m thm 1 n v cn tha mn 2 iu kin: chn PB0
hin ti =0 (button ang c nhn) v trng thi trc ca PB0 phi l 1 (trnh
trng hp tng lin tc). Phng php ny c th p dng cho rt nhiu trng
hp
m
dng
m
xung.
Qu trnh gim gi tr m c hiu tng t, phn cn li ca v d ny bn
c hy t gii thch theo nhng gi trn.
Bi 3 - Ngt ngoi
5
( 138 Votes )
Ni dung
1.
Cu trc AVR.
2.
Ngt ngoi.
WinAVR.
3.
V d ngt ngoi vi C.
C cho AVR.
Download v d
M phng vi Proteus.
I. Ngt trn AVR.
Interrupts, thng c gi l ngt, l mt tn hiu khn cp gi n b x l,
yu cu b x l tm ngng tc khc cc hot ng hin ti nhy n mt ni
khc thc hin mt nhim v khn cp no , nhim v ny gi l trnh phc v
ngt isr (interrupt service routine ). Sau khi kt thc nhim v trong isr, b m
chng trnh s c tr v gi tr trc b x l quay v thc hin tip cc
nhim v cn dang d. Nh vy, ngt c mc u tin x l cao nht, ngt
thng c dng x l cc s kin bt ng nhng khng tn qu nhiu thi
gian. Cc tn hiu dn n ngt c th xut pht t cc thit b bn trong chip (ngt
bo b m timer/counter trn, ngt bo qu trnh gi d liu bng RS232 kt
thc) hay do cc tc nhn bn ngoi (ngt bo c 1 button c nhn, ngt bo
c 1 gi d liu c nhn).
Ngt l mt trong 2 k thut bt s kin c bn l hi vng (Polling) v ngt.
Hy tng tng bn cn thit k mt mch iu khin hon chnh thc hin rt
nhiu nhim v bao gm nhn thng tin t ngi dng qua cc button hay keypad
(hoc keyboard), nhn tn hiu t cm bin, x l thng tin, xut tn hiu iu
khin, hin th thng tin trng thi ln cc LCD(bn hon ton c th lm c
vi AVR), r rng trong cc nhim v ny vic nhn thng tin ngi dng (start,
stop, setup, change,) rt him xy ra (so vi cc nhim v khc) nhng li rt
khn cp, c u tin hng u. Nu dng Polling ngha l bn cn vit 1 on
chng trnh chuyn thm d trng thi ca cc button (ti tm gi on chng
trnh l Input()) v bn phi chn on chng trnh Input() ny vo rt nhiu v
tr trong chng trnh chnh trnh trng hp b st lnh t ngi dng, iu
ny tht lng ph thi gian thc thi. Gii php cho vn ny l s dng ngt, bng
cch kt ni cc button vi ng ngt ca chip v s dng chng trnh Input()
lm trnh phc v ngt - isr ca ngt , bn khng cn phi chn Input() trong lc
ang thc thi v v th khng tn thi gian cho n, Input() ch c gi khi ngi
dng nhn cc button. l tng s dng ngt.
Hnh 1 minh ha cch t chc ngt thng thng trong cc chip AVR. S lng
ngt trn mi dng chip l khc nhau, ng vi mi ngt s c vector ngt, vector
ngt l cc thanh ghi c a ch c nh c nh ngha trc nm trong phn u
ca b nh chng trnh. V d vector ngt ngoi 0 (external interrupt 0) ca chip
atmega8 c a ch l 0x001 (theo datasheet t Atmel). Trong lc chng trnh
chnh ang thc thi, nu c mt s thay i dn n ngt xy ra chn INT0 (chn
Hnh 1. Ngt.
Bng 1 tm tt cc vector ngt c trn chip atmega8, cho cc chip khc bn hy
tham kho datasheet bit thm.
Bng 1 cc vector ngt v Reset trn chip Atmega8.
1 trong 4 MODE trn cho cc ngt ngoi. Di y l cu trc thanh ghi MCUCR
c trch ra t datasheet ca chip atmega8.
Tht d dng hiu chc nng ca cc bit Sense Control, v d bn mun set
cho INT1 l ngt cnh xung (Falling Edge) trong khi INT0 l ngt cnh ln
(Rising Edge), hy t dng lnh MCUCR =0x0B (0x0B = 00001011 nh phn)
trong chng trnh ca bn.
Thanh ghi iu khin ngt chung GICR (General Interrupt Control Register)
(ch trn cc chip AVR c, nh cc chip AT90Sxxxx, thanh ghi ny c tn l
thanh ghi mt n ngt thng thng GIMSK, bn tham kho thm datasheet ca
cc chip ny nu cn s dng n). GICR cng l 1 thanh ghi 8 bit nhng ch c 2
bit cao (bit 6 v bit 7) l c s dng cho iu khin ngt, cu trc thanh ghi nh
bn di (trch datasheet).
Bit 7 INT1 gi l bit cho php ngt 1(Interrupt Enable), set bit ny bng 1
ngha bn cho php ngt INT1 hot ng, tng t, bit INT0 iu khin ngt INT0.
Thanh ghi c ngt chung GIFR (General Interrupt Flag Register) c 2 bit
INTF1 v INTF0 l cc bit trng thi (hay bit c - Flag) ca 2 ngt INT1 v INT0.
Nu c 1 s kin ngt ph hp xy ra trn chn INT1, bit INTF1 c t ng set
bng 1 (tng t cho trng hp ca INTF0), chng ta c th s dng cc bit ny
nhn ra cc ngt, tuy nhin iu ny l khng cn thit nu chng ta cho php
ngt t ng, v vy thanh ghi ny thng khng c quan tm khi lp trnh ngt
ngoi. Cu trc thanh ghi GIFR c trnh by trong hnh ngay bn di.
Sau khi xc lp cc bit sn sng cho cc ngt ngoi, vic sau cng chng ta
cn lm l set bit I, tc bit cho php ngt ton cc, trong thanh ghi trng thi
chung ca chip (thanh ghi SREG, xem li bi AVR2). Mt ch khc l v cc
chn PD2, PD3 l cc chn ngt nn bn phi set cc chn ny l Input (set
thanh ghi DDRD). Qu trnh thit lp ngt ngoi c trnh by trong hnh 10.
MAIN:
35 ;cc cng vic m chng trnh chnh cn thc hin
36 ;.
RJMP MAIN
37
38
;v y l nh ngha trnh phc v ngt INT0_ISR
39
INT0_ISR:
40
; cc cng vic cn thc hin khi c ngt
41
;.
42
RETI ; phi dng lnh RETI quay v chng trnh chnh
43
44 ;v y l nh ngha trnh phc v ngt INT1_ISR
45 INT1_ISR:
46 ; cc cng vic cn thc hin khi c ngt
47 ;.
RETI ; phi dng lnh RETI quay v chng trnh chnh
Bn thy cc cc ngt c nh v nm gia v tr 0x0000, khi mi khi ng,
ti v tr 0x000 l lnh RJMP BATDAU, nh th cc lnh RJMP ti cc vector
ngt v cc ISR u khng c thc hin, chng ch c thc hin mt cch t
ng khi c ngt.
Ngt ngoi vi C: Avr-libc h tr mt th vin hm cho ngt kh hon ho,
s dng ngt trong chng trnh vit bng C (avr-gcc) bn ch cn include file
interrupt.h nm trong th mc con avr l xong. file header interrupt.h cha
nh ngha cc hm v phng thc phc v cho vit trnh phc v ngt, cc vector
ngt khng c nh ngha trong file ny m trong file iom8.h (cho atmega8).
Nu bn v tnh tm thy 1 chng trnh ngt no khng include file interrupt.h
m include file signal.h th bn ng ngc nhin, l cch vit c trong avr-gcc,
tht ra bn hon ton c th s dng cch vit c v cc phin bn mi ca avr-libc
(i cng vi cc bn WinAVR mi) vn h tr cch vit ny nhng khng khuyn
khch bn dng.
Trong C, cc trnh phc v ngt c dng l ISR(vector_name). Trong cc
phin bn c trnh phc v ngt c tn SIGNAL(vector_name), nhng cng nh
file header signal.h, cch vit ny vn c h tr trong phin bn mi nhng
khng c khuyn khch.
List 2. Ngt vi C.
1 #include <avr/interrupt.h>
2
3
4
5
6
ISR (vector_name)
{
//user code here
}
Description
ADC_vect
SIG_ADC
ANA_COMP_vect
SIG_COMPARATOR
Analog Comparator
EE_RDY_vect
SIG_EEPROM_READY
EEPROM Ready
INT0_vect
SIG_INTERRUPT0
External Interrupt 0
INT1_vect
SIG_INTERRUPT1
SPI_STC_vect
SIG_SPI
SPM_RDY_vect
SIG_SPM_READY
TIMER0_OVF_vect
SIG_OVERFLOW0
Timer/Counter0 Overflow
TIMER1_CAPT_vect
SIG_INPUT_CAPTURE1
TIMER1_COMPA_vect
SIG_OUTPUT_COMPARE1A
Timer/Counter1 Compare M
TIMER1_COMPB_vect
SIG_OUTPUT_COMPARE1B
Timer/Counter1 Compare M
TIMER1_OVF_vect
SIG_OVERFLOW1
Timer/Counter1 Overflow
TIMER2_COMP_vect
SIG_OUTPUT_COMPARE2
Timer/Counter2 Compare M
TIMER2_OVF_vect
SIG_OVERFLOW2
Timer/Counter2 Overflow
TWI_vect
SIG_2WIRE_SERIAL
USART3_UDRE_vect
SIG_USART3_DATA
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
volatile int8_t val=0;
int main(void){
DDRD=0x00;
9
PORTD=0xFF; //s dng in tr ni ko ln.
10 DDRB=0xFF; //PORTB l Output xut LED 7 on
11
12 MCUCR|=(1<<ISC11)|(1<<ISC01); //c 2 ngt l ngt cnh xung
13 GICR |=(1<<INT1)|(1<<INT0); //cho php 2 ngt hot ng
14 sei();
//set bit I cho php ngt ton cc
15
16 DDRC=0xFF;
//PORTC l Output
17 while (1){
//vng lp v tn
18
PORTC++;
//qut PORTC
19
_delay_loop_2(60000);
20 }
21 return 0;
22 }
23
24 //Trnh phc v ngt ca INT0
25 ISR(INT0_vect){
26 val++;
//nu c ngt INT0 xy ra, tng val thm 1
27 if (val>9) val=0;
//gii hn khng vt qu 9
28 PORTB=val;
29 }
30
31 //Trnh phc v ngt ca INT1
32 ISR(INT1_vect){
33 val--;
//nu c ngt INT1 xy ra, gim val i 1
34 if (val<0) val=9;
//gii hn khng nh hn 0
35 PORTB=val;
36 }
C l on code ny kh d hiu nu cc bn theo di t u bi hc, ti ch
gii thch nhng nt c bn v mi. tng l chng ta s dng 1 bin tm 8
bit, c du lu gi tr m, tn bin val, mi khi c ngt trn chn INT0, tng
val 1 n v v ngc li khi c ngt trn INT1, gim val i 1, l ni dung ca 2
trnh phc v ngt. Trong chng trnh chnh, trc ht chng ta thc hin vic xc
lp hot ng cho 2 ngt, sau a chng trnh vo 1 vng lp v tn while(1),
PORTC c dng kim tra rng chng trnh trong vng lp v tn vn ang
hot ng. C l phn kh hiu nht trong on code l cch m ti dng khai
bo cho 2 thanh ghi iu khin ngt MCUCR v GICR.
7
6
5
4
3
2
1
0
Bi 4 - Timer - Counter
5
( 352 Votes )
Ni dung
1.
Gii thiu.
2.
3.
S dng Timer/Counter.
WinAVR.
1.
Timer/Counter0
C cho AVR.
2.
Timer/Counter1
M phng vi Proteus.
Download v d
I. Gii thiu.
Trong bi 3 ti gii thiu khi qut phng php lp trnh bng ngn ng C
cho AVR vi WinAVR v cch s dng ngt trong AVR. Bi 4 ny chng ta s
kho st cc ch hot ng ca phng php iu khin cc b nh thi, m
(Timer/Counter) trong AVR. Cng c phc v cho bi ny vn l b cng c
WinAVR v phn mm m phng Proteus. Ti vn dng chip Atmega8 lm v
d. Mt iu khng may mn l khng phi tt c cc b Timer/Counter trn tt c
cc dng chip AVR l nh nhau, v th nhng g ti trnh by trong bi ny c th
s khng ng vi cc dng AVR khc nh AT90STuy nhin ti cng s c gng
ch ra mt s im khc bit c bn cc bn c th t mnh iu khin cc chip
khc. Ni dung bi hc ny bao gm:
S dng cc Timer/Counter nh cc b m.
Cc bit CS00, CS01 v CS02 gi l cc bit chn ngun xung nhp cho T/C0
(Clock Select). Chc nng cc bit ny c m t trong bng 1.
Bng 1: chc nng cc bit CS0X
Khi bit TOIE0=1, v bit I trong thanh ghi trng thi c set (xem li bi 3 v
iu khin ngt), nu mt trn xy ra s dn n ngt trn.
CS00, CS01 v CS02 ca thanh ghi iu khin TCCR0, chng ta s quyt nh bao
lu th s kch T/C0 mt ln. V d mch ng dng ca bn c ngun dao ng clk
= 1MHz tc chu k 1 nhp l 1us (1 micro giy), bn t thanh ghi TCCR0=5 (tc
SC02=1, CS01=0, CS00=1). Cn c theo bng 1, tn hiu kch cho T/C0 s bng
clk/1024 ngha l sau 1024us th T/C0 mi c kch 1 ln, ni cch khc gi tr
ca TCNT0 tng thm 1 sau 1024us (ch l tn s c chia cho 1024 th chu k
s tng 1024 ln). Quan st 2 dng cui cng trong bng 1 bn s thy rng tn hiu
kch cho T/C0 c th ly t bn ngoi (External clock source), y chnh l tng
cho hot ng ca chc nng m s kin trn T/C0. Bng cch thay i trng thi
chn T0 (chn 6 trn chip Atmega8) chng ta s lm tng gi tr thanh ghi TCNT0
hay ni cch khc T/C0 c th dng m s kin xy ra trn chn T0. Di y
chng ta s xem xt c th cch iu khin T/C0 theo 1 ch nh thi gian v
m.
1.1 B nh thi gian.
Chng ta c th to ra 1 b nh th ci t mt khong thi gian no . V
d bn mun rng c sau chnh xc 1ms th chn PB0 thay i trng thi 1 ln
(nhp nhy), bn li khng mun dng cc lnh delay nh trc nay vn dng v
nhc im ca delay l CPU khng lm g c trong lc delay, v th trong nhiu
trng hp cc lnh delay rt hn ch c s dng. By gi chng ta dng T/C0
lm vic ny, tng l chng ta cho b m T/C0 hot ng, khi n m
1ms th n s t kch hot ngt trn, trong trnh phc v ngt trn chng tat hay i
trng thi chn PB0. Ti minh ha tng nh trong hnh 1.
7
PORTB=0x00;
8
9
TCCR0=(1<<CS01);// CS02=0, CS01=1, CS00=0: chon Prescaler = 8
10
TCNT0=131;
//gan gia tri khoi tao cho T/C0
11
TIMSK=(1<<TOIE0);//cho phep ngat khi co tran o T/C0
12
sei();
//set bit I cho phep ngat toan cuc
13
14
while (1){
//vng lp v tn
15
//do nothing
16
}
17
return 0;
18 }
19
20 //trinh phuc vu ngat tran T/C0
21 ISR (TIMER0_OVF_vect ){
22
TCNT0=131; //gan gia tri khoi tao cho T/C0
23
PORTB^=1; //doi trang thai Bit PB0
24 }
on code rt n gin, bn ch cn ch n 3 dng khai bo cho T/C0
(dng 9, 10, 11). Vi dng 9: TCCR0=(1<<CS01) l 1 cch set bit CS01 trong
thanh ghi iu khin TCCR0 ln 1, 2 bit CS02 v CS00 c gi tr 0 (bn xem
li bi 3 v cch set cc bit c bit trong cc thanh ghi), tm li dng ny tng
ng TCCR0=2, gi tr Prescaler c chn bng 8 (tham kho bng 1). Dng 10
chng ta gn gi tr khi to cho thanh ghi TCNT0. V dng 11 set bit TIOE0 ln 1
cho php ngt xy ra khi c trn T/C0. Trong trnh phc v ngt trn T/C0,
chng ta s thc hin i trng thi chn PB0 bng ton t XOR (^), ch n
ngha ca ton t XOR: nu XOR mt bit vi s 1 th bit ny s chuyn trng thi
(t 0 sang 1 v ngc li). Cui cng v quan trng l chng ta cn gn li gi tr
khi
to
cho
T/C0.
Bn c th v mt mch in m phng n gin dng 1 Oscilloscope nh
trong hnh 3 kim tra hot ng ca on code.
1 #include <avr/io.h>
2 #include <avr/interrupt.h>
3
4 int main(void){
5
DDRB=0xFF;
//PORTB la output PORT
6
PORTB=0x00;
7
DDRD=0x00; //khai bao PORTD la input de ket noi Button kich vao chan T0
8
PORTD=0xFF; //su dung dien tro keo len cho PORTD
9
10
TCCR0=(1<<CS02)|(1<<CS01);// CS02=1, CS01=1, CS00=0: xung nhip tu chan T0, do
11
TCNT0=0;
12
13
while (1){
//vng lp v tn
14
if (TCNT0==10) TCNT0=0;
15
PORTB=TCNT0; //xuat gia tri dem ra led 7 doan
16
if (bit_is_clear(PIND,7)) TCNT0=0; //Reset bo dem neu chan PD7=0
17
}
18
return 0;
19 }
Ni dung trong chng trnh chnh l khai bo cc hng giao tip cho cc
PORT, PORTB l ouput xut kt qu m ra led 7 on, PORTD c khi bo
input v cc button c ni vi PORT ny. T/C0 c khai bo s dng ngun
kch ngoi t T0, dng cnh xung thng qua dng TCCR0=(1<<CS02)|
(1<<CS01), bn cng c th khai bo tng ng l TCCR0=6 (tham kho bng
1). Gi tr ca b m s c xut ra PORTB kim tra. im ch trong on
chng trnh ny l macro bit_is_clear, y l mt macro c nh ngha trong
file sfr_defs.h dng kim tra 1 bit trong mt thanh ghi c bit c c xa
(bng 0) hay khng, trong trng hp ca on code trn:
if(bit_is_clear(PIND,7)) TCNT0=0; ngha l kim tra xem nu chn PD7 c
ko xung 0 (button 2 c nhn) th s reset b m v 0.
Nh vy vic s dng T/C0 l tng i n gin, bn ch cn khai bo cc
gi tr thch hp cho thanh ghi iu khin TCCR0 bng cch tham kho bng 1, sau
khi to gi tr cho TCNT0 (nu cn thit), khai bo c s dng ngt hay khng
bng cch set hay khng set bit TOIE0 trong thanh ghi TIMSK l hon tt.
2. Timer/Counter1:
Timer/Counter1 l b T/C 16 bits, a chc nng. y l b T/C rt l tng
cho lp trnh o lng v iu khin v c phn gii cao (16 bits) v c kh
nng to xung iu rng PWM (Pulse Width Modulation thng dng iu
khin ng c).
Thanh ghi: c kh nhiu thanh ghi lin quan n T/C1. V l T/C 16 bits trong
khi rng b nh d liu ca AVR l 8 bit (xem li bi 2) nn i khi cn dng
nhng cp thanh ghi 8 bits to thnh 1 thanh ghi 16 bit, 2 thanh ghi 8 bits s c tn
kt thc bng cc k t L v H trong L l thanh ghi cha 8 bits thp (LOW) v
H l thanh ghi cha 8 bits cao (High) ca gi tr 16 bits m chng to thnh.
Nhn chung thuc ht cch phi hp cc bit trong 2 thanh ghi TCCR1A
v TCCR1B l tng i phc tp v T/C1 c rt nhiu mode hot ng, chng ta
s kho st chng trong phn cc ch hot ng ca T/C1 bn di. y,
trong thanh ghi TCCR1B c 3 bit kh quen thuc l CS10, CS11 v CS12. y l
cc bit chn xung nhp cho T/C1 nh truong T/C0. Bng 2 s tm tt cc ch
xung nhp trong T/C1.
Bng 2: chc nng cc bit CS12, CS11 v CS10.
Bit 2 trong TIMSK l TOIE1, bit quy nh ngt trn cho thanh T/C1 (tng t
trng hp ca T/C0).
Bit 3, OCIE1B l bit cho php ngt khi c 1 Match xy ra trong vic so snh
TCNT1 vi OCR1B.
Bit 4, OCIE1A l bit cho php ngt khi c 1 Match xy ra trong vic so snh
TCNT1 vi OCR1A.
Bit 5, TICIE1 l bit cho php ngt trong trng hp Input Capture c dng.
Cng vi vic set cc bit trn, bit I trong thanh ghi trng thi phi c set nu
mun s dng ngt (xem libi 3 v iu khin ngt).
2.1
Normal
mode
(Ch
thng).
y l ch hot ng n gin nht ca T/C1. Trong ch ny, thanh ghi
m TCNT1 c tng gi tr t 0 (BOTTOM) n 65535 hay 0xFFFF (TOP) v
snh do ngi dng t), thanh ghi m TCNT1 tng t 0, khi TCNT1 bng gi tr
cha trong OCR1A th mt Compare Match xy ra. Khi , mt ngt c th xy
ra nu chng ta cho php ngt Compare Match (set bit OCF1A trong thanh ghi
TIMSK ln 1). Mode ny cng tng i n gin, mt ng dng c bn ca mode
ny l n gin ha vic m cc s kin bn ngoi. V d bn kt ni 1 sensor
m s ngi i vo 1 cn phng vi chn T1 (chn counter source ca T/C1), bn
mun rng c sau khi m 5 ngi th s thng bo 1 ln. List 4 l on code m t
v d ny:
List 4. Phi hp CTC vi m s kin.
1 #include <avr/io.h>
2 #include <avr/interrupt.h>
3 #include <util/delay.h>
4 volatile usigned char val=0; //khai bao 1 bien tam val va khoi tao =0
5 int main(void){
6
DDRB=0xFF;
//PORTB la output PORT
7
PORTB=0x00;
8
TCCR1B=(1<<WGM12)|(1<<CS12)|(1<<CS11); //xung nhip tu chan T1, canh xuong
9
OCR1A=4;
//gan gia tri can so sanh
10
TIMSK=(1<OCIE1A);//cho phep ngat khi gia tri dem bang 4
11
sei();
//set bit I cho phep ngat toan cuc
12
13
while (1){
//vng lp v tn
14
//do nothing
15
}
16
return 0;
17 }
18 //trinh phuc vu ngat compare match
19 ISR (TIMER1_COMPA_vect){
20
val++;
21
if (val==10) val=0; //gioi han bien val tu 0 den 9
22
PORTB =val;
//xuat gia tri ra PORTB
23 }
Ti ch gii thch nhng im mi trong List 4. Th nht l attribute volatile
dng trc khai bo bin val, bin val c khai bo l unsigned char (8 bit, khng
du) dng cha gi tr tm thi xut ra PORTB khi c ngt xy ra. iu c bit
l t kha volatile t trc n, volatile l mt thuc tnh (attribute) ca b bin
dch gcc-avr, n ni vi trnh dch rng bin val s c dng trong chng trnh
chnh v c trong cc trnh phc v ngt. Nu bn mun cp nhp gi tr 1 bin
ton cc trong cc trnh phc v ngt m bin khng c ch nh thuc tnh
volatile trc th qu trnh cp nht tht bi. Mt cch d hiu hn, bn xem trnh
ISR trong v d trn, c mi ln c ngt Compare Match xy ra, bin val c tng
thm 1 (dng 21) sau kim tra iu kin bng 10 hay khng v cui cng l gn
cho PORTB. Nu trong khai bo ca val (dng 4) chng ta khng ch nh volatile
th gi tr xut ra PORTB s lun l 1 khi c ngt. Ch l iu ny ch ng it
nht l vi phin bn WinAVR thng 12 nm 2007, cc phin bn sau c th khng
cn dng volatile (ti s cp nht sau).
Dng 8 set cc bit iu khin: TCCR1B=(1<<WGM12)|(1<<CS12)|
(1<<CS11); bn thy ti ch set bit WGM12 trong 4 bit WGM v ti mun chn
mode CTC 4 (xem bng 3). Hai bit CS12 v CS11 c set bng 1 trong khi CS10
c gi 0 chn xung clock l t bn ngoi, chn T1 (xem bng 2). Trong
dng 10, OCR1A=4; l gi tr cn so snh, chng ta bit rng TCNT1 tng ln t 0,
v th m 5 s kin th cn t gi tr so snh l 4 (0, 1, 2, 3, 4). Dng 11 set bit
cho php ngt khi c Compare match xy ra (dng cho channel A).
Mode 12 ca CTC (WGM13=1, WGM12=1, WGM11=0, WGM10=0) cng
tng t mode 4 nhng ci khc l gi tr cn so snh c cha trong thanh ghi
ICR1 (khng phi OCR1A hay OCR1B). Khi nu mun dng ngt th bn phi
dng ngt Input capture. C th dng 8 trong list 4 i thnh:
TCCR1B=(1<<WGM13)|( (1<<WGM12)|(1<<CS12)|(1<<CS11); dng 10:
ICR1=4 v dng 20: ISR (TIMER1_CAPT_vect ){
Mt kh nng khc ca CTC l xut tn hiu xung vung trn chn OC1A
(chn 15 trn Atmega8) bng cch set cc bit Compare Output Mode trong thanh
ghi TCCR1A. Tuy nhin vic to cc tn hiu output trong mode CTC khng tht
s th v. V vy chng ta s kho st cch to tn hiu output trong 1 ch
chuyn nghip v th v hn, ch PWM.
Trc khi bt u lm vic vi cc ch PWM ti ngh cn thit gii thiu
th no l PWM v nhc li cc khi nim gi tr m ca Timer1 (hay bt k timer
no khc) trn AVR. Trc ht, PWM hay Pulse Width Modulation c hiu theo
ngha ting Vit l xung iu rng l khi nim ch tn hiu xung m thng th
chu k (Time period) ca n c c nh, duty cycle (thi thi gian tn hiu
mc HIGH) ca n c th c thay i. Bn xem 1 v d v PWM trong hnh 5.
thi gian nhn = 150us, thi gian th 50us v trng hp thi gian nhn l 50us
cn thi gian th l 150us. Bn s d dng tm cu tr li, trong trng hp 1 ng
c s quay vi vn tc nhanh hn trng hp 2. l tng c bn s dng
PWM iu khin vn tc ng c (v iu khin nhiu th khc na). bin ci
khng tng trn (5000 ln/s) thnh hin thc, chng ta s thay th ci button c
kh kia bng 1 cng tc in t (electronics switch). Thng th cc chip MOSFET
c dng lm cc kha in t. MOSFET thng c 3 chn G (gate), D (drain) v
S (source). V d 1 MOSFET knh N trng thi thng thng 2 chn D v S ko
c dng in chy qua, nu in p chn G ln hn chn S khong 3V tr ln th
dng in c th chy t D sang S. hy xem cch m t tng ng 1 MOSFET
vi 1 button trong hnh 7.
Hnh 9: cc mc gi tr ca T/C1.
BOTTOM lun c c nh l 0 (gi tr nh nht), MAX lun l 0xFFFF
(65535). TOP l gi tr nh do ngi dng nh ngha, gi tr ca TOP c th c
c nh l 0xFF (255), 0x1FF (511), 0x3FF 91023) hoc nh ngha bi cc thanh
ghi ICR1 hoc OCR1A. thc cht i vi ng dng PWM th TOP chnh l Time
period ca PWM. Do mc ch s dng m c th chn TOP l cc gi tr c nh
hay cc thanh ghi, ring vi ti, cho mc ch to tn hiu PWM ti chn TOP nh
ngha bi thanh ghi ICR1. Ouput Compare l gi tr so snh ca b Timer. Trong
ch PWM th Output Compare quy nh Duty cycle. Vi T/C1, Output Comapre
l gi tr trong cc thanh ghi OCR1A v OCR1B. Do c 2 thanh ghi c lp A v
B, tng ng chng ta c th to ra 2 tn hiu PWM trn 2 chn OC1A v OC1B
bng T/C1. n lc chng ta tm hiu cch to PWM trn AVR.
2.3
Fast
PWM
(PWM
tn
s
cao).
Trong ch Fast PWM, 1 chu k c tnh trong 1 ln m t BOTTOM ln
2 #include <avr/interrupt.h>
3
4 int main(void){
5
DDRB=0xFF;
//PORTB la output PORT
6
PORTB=0x00;
7
8
MCUCR|=(1<<ISC11)|(1<<ISC01); //ngat canh xuong
9
GICR |=((1<<INT1)|(1<<INT0); //cho php 2 ngat hoat dong
10
11
TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
12
TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS10);
13
OCR1A=1000;
//Duty cycle servo1=1000us=1ms (0 degree)
14
OCR1B=1500;
//Duty cycle servo2=1500us=1.5ms (90 degree)
15
ICR1=20000;
//Time period = 20000us=20ms
16
17
sei();
//set bit I cho phep ngat toan cuc
18
while (1){
//vng lp v tn
19
//do nothing
20
}
21
return 0;
22 }
23
24 //trinh phuc vu ngat ngoai
25 ISR (INT0_vect ){
26
if (OCR1A==1000) OCR1A=1500; //thay doi goc xoay servo1 den 90 do
27
else OCR1A = 1000; // thay doi goc xoay servo1 den 0 do
28 }
29 ISR (INT1_vect ){
30
if (OCR1B==1000) OCR1B=1500; //thay doi goc xoay servo1 den 90 do
31
else OCR1B = 1000; // thay doi goc xoay servo1 den 0 do
32 }
Vi v d ny ti ch cn gii thch cc dng t 11 n 15 lin quan n vic
xc lp ch hot ng Fast PWM mode 14 inverse, phn cn li bn c t i
chiu vi cc bi trc. Dng 11 v 12 thc hin set cc bit iu khin Timer1,
trc ht l cc bit COM. Bn thy ti ch set 2 bit COM1A1 v COM1B1:
(1<<COM1A1)|(1<<COM1B1). Hai bit COM1A0 v COM1B0 khng set tc mc
nh bng 0. i chiu vi bng 4 bn thy chng ta s dng Clear OC1A/OC1B
on Compare Match, set OC1A/OC1B at TOP cho tt c 2 knh A v B. Chng ta
set 3 bit WGM13, WGM12 (thanh ghi TCCR1B, dng 12) v WGM11 (thanh ghi
TCCR1A, dng 11) nh th thu c t hp (WGM13=1, WGM12=1, WGM11=1,
5
( 139 Votes )
Ni dung
Cc bi cn tham kho t
1.
Gii thiu.
2.
Cu trc AVR
3.
WinAVR
1.
Thanh ghi.
C cho AVR.
2.
S dng UART.
M phng vi Prot
Download v d
I. Gii thiu.
Bi ny gip cc bn bit cch s dng cch truyn thng ni tip UART trn
AVR. Cng c chnh cng l 2 b phn mm quen thuc WinAVR v Proteus
nhng trong bi ny (v cc bi sau na) chng ta s s dng chip Atmega32 lm
chip minh ha. V c bn vic thay i chip minh ha khng nh hng ln n
tnh mch lc ca lot bi v s khc bit ca hai chip Atmega8 v Atmega32 l
khng ng k. Tuy nhin, nu c s khc bit ln phn no ti s k ra cho
bn tin so snh.
Sau bi ny, ti hy vng bn c th hiu v thc hin c:
UDR: hay thanh ghi d liu, l 1 thanh ghi 8 bit cha gi tr nhn c v
pht i ca USART. Thc cht thanh ghi ny c th coi nh 2 thanh ghi TXB
(Transmit data Buffer) v RXB (Reveive data Buffer) c chung a ch. c UDR
UCSRA (USART Control and Status Register A): l 1 trong 3 thanh ghi iu
khin hot ng ca module USART.
Thanh ghi UCSRA ch yu cha cc bit trng thi nh bit bo qu trnh nhn
kt thc (RXC), truyn kt thc (TXC), bo thanh ghi d liu trng (UDRE),
khung truyn c li (FE), d liu trn (DOR), kim tra parity c li (PE)Bn ch
mt s bit quan trng ca thanh ghi ny:
* UDRE (USART Data Register Empty) khi bit by bng 1 ngha l thanh ghi d
liu UDR ang trng v sn sng cho mt nhim v truyn hay nhn tip theo. V
th nu bn mun truyn d liu u tin bn phi kim tra xem bit UDRE c bng
1 hay khng, sau khi chc chn rng UDRE=1 hy vit d liu vo thanh ghi UDR
truyn i.
* U2X l bit ch nh gp i tc truyn, khi bit ny c set ln 1, tc
truyn so cao gp 2 ln so vi khi bit ny mang gi tr 0.
* MPCM l bit chn ch hot ng a x l (multi-processor).
UCSRB (USART Control and Status Register B): y l thanh ghi quan
trng iu khin USART. V th chng ta s kho st chi tit tng bit ca thanh ghi
ny.
* RXCIE (Receive Complete Interrupt Enable) l bit cho php ngt khi qu trnh
nhn kt thc. Vic nhn d liu truyn bng phng php ni tip khng ng b
thng c thc hin thng qua ngt, v th bit ny thng c set bng 1 khi
USART
c
dung
nhn
d
liu.
* TXCIE (Transmit Complete Interrupt Enable) bit cho php ngt khi qu trnh
truyn
kt
thc.
* UDRIE (USART Data Register Empty Interrupt Enable) l bit cho php ngt khi
thanh
ghi
d
liu
UDR
trng.
* RXEN (Receiver Enable) l mt bit quan trng iu khin b nhn ca USART,
kch hot chc nng nhn d liu bn phi set bit ny ln 1.
* TXEN (Transmitter Enable) l bit iu khin b pht. Set bit ny ln 1 bn s
khi
ng
b
pht
ca
USART.
* UCSZ2 (Chracter size) bit ny kt hp vi 2 bit khc trong thanh ghi UCSRC
quy nh di ca d liu truyn/nhn. Chng ta s kho st chi tit khi tm hiu
thanh
ghi
UCSRC.
* RXB8 (Receive Data Bit 8) gi l bit d liu 8. Bn nh li rng USART trong
AVR c h tr truyn d liu c di ti a 9 bit, trong khi thanh ghi d liu l
thanh ghi 8 bit. Do , khi c gi d liu 9 bit c nhn, 8 bit u s cha trong
thanh ghi UDR, cn c 1 bit khc ng vai tr bit th chn, RXD8 l bit th chn
ny. Bn ch l cc bit c nh s t 0, v th bit th chn s c ch s l 8, v
l m bit ny c tn l RXD8 (khng phi RXD9).
* TXB8 (Transmit Data Bit 8), tng t nh bit RXD8, bit TXB8 cng ng vai
tr bit th 9 truyn thng, nhng bit ny c dung trong lc truyn d liu.
* USBS (Stop bit Select), bit Stop trong khung truyn bng AVR USART c th l
1 hoc 2 bit, nu USBS=0 th Stop bit ch l 1 bit trong khi USBS=1 s c 2 Stop
bit c dng.
* Hai bit UCSZ1 v UCSZ2 (Character Size) kt hp vi bit UCSZ2 trong thanh
ghi UCSRB to thnh 3 bit quy nh di d liu truyn. Bng 2 tm tt cc gi
tr c th c ca t hp 3 bit ny v di d liu truyn tng ng.
Bng 2: di d liu truyn.
UBRRL v UBRRH (USART Baud Rate Register): 2 thanh ghi thp v cao
quy nh tc baud.
Nhc li l thanh ghi UBRRH dng chung a ch thanh ghi UCSRC, bn phi
set bit ny bng 0 nu mun s dng thanh ghi UBRRH. Nh bn quan st trong
hnh trn, ch c 4 bit thp ca UBRRH c dng, 4 bit ny kt hp vi 8 bit
trong thanh ghi UBRRL to thnh thanh ghi 12 bit quy nh tc baud. Ch l
nu bn vit gi tr vo thanh ghi UBRRL, tc baud s tc th c cp nht, v
th bn phi vit gi tr vo thanh ghi UBRRH trc khi vit vo thanh ghi
UBRRL.
Gi tr gn cho thanh ghi UBRR khng phi l tc baud, n ch c
USART dng tnh tc baud. Bng 3 hng dn cch tnh tc baud da
vo gi tr ca thanh ghi UBRR v ngc li, cch tnh gi tr cn thit gn cho
thanh ghi UBRR khi bit tc baud.
Bng 3: tnh tc baud.
2. S dng UART:.
Thng thng, s dng module USART trn AVR bn phi thc hin 3 vic
quan trng, l: ci t tc baud (thanh ghi UBRR), nh dng khung truyn
(UCSRB, UCSRC) v cui cng kch hot b truyn, b nhn, ngtNh
cp, trong ti liu ny ti ch yu cp n phng php truyn thng khng
ng b, vic xc lp cc thng s hot ng ch yu da trn ch ny. Trong
hu ht cc ng dng, tc baud v khung truyn thng khng i, trong trng
hp ny chng ta c th khi to trc tip USART phn u trong main v sau
ch cn truyn hoc nhn d liu m khng cn thay i cc ci t. Tuy nhin,
nu trng hp giao tip linh hot v d bn ang ch to mt thit b c kh
nng giao tip vi mt thit b u cui khc (nh my tnh chng hn), lc ny
bn nn cho php ngi dng thay i tc baud hoc cc thng s khc ph
hp vi thit b u cui. i vi nhng ng dng kiu ny bn nn vit 1 chng
trnh con khi ng USART v c th gi li nhiu ln khi cn thay i. Phn
tip theo chng ta s vit mt s chng trnh v d minh ha cch s dng module
truyn thng USART t n gin n phc tp. Cc v d s c thc hin cho
chip Atmega32 vi gi s ngun xung nhp h thng l 8MHz.
2.1 Truyn d liu.
Trc ht chng ta s thc hin mt v d rt n gin hiu cch khi ng
USART v truyn cc gi d liu 8 bit. Mch in m phng trong hnh 3. Gi s
chng ta mun nh dng cho khung truyn gm 1 bit start, 8 bit d liu, khng
kim tra parity v 1 bit stop. Tc baud 57600 (57.6k). D liu cn truyn l cc
gi tr lin tc ca bng m ASCII. on code trong list 1 trnh by cch thc hin
v d ny.
List 1. Khi ng v truyn d liu khng ng b bng USART
1 #include <avr/io.h>
2 #include <avr/delay.h>
3
4 //chuong trinh con phat du lieu
5 void uart_char_tx(unsigned char chr){
6
while (bit_is_clear(UCSRA,UDRE)) {}; //cho den khi bit UDRE=1
7
UDR=chr;
8 }
9
10 int main(void){
11 //set baud, 57.6k ung voi f=8Mhz, xem bang 70 trang 165, Atmega32 datasheet
12 UBRRH=0;
13 UBRRL=8;
14
15 //set khung truyen va kich hoat bo nhan du lieu
16 UCSRA=0x00;
17 UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
18 UCSRB=(1<<TXEN);
19
20 while(1){
21
for (char i=32; i<128; i++){
22
uart_char_tx(i); //phat du lieu
23
_delay_ms(100);
24
}
25 }
26 }
Trc ht ti s gii thch cch khi ng USART trong cc dng code t 12
n 18. Nu bn xem li bng 3 trong trang 9 ca ti liu ny (hoc bng 70, trang
165 datasheet ca chip atmega32), ng vi tn s xung nhp 8Hhz, khng s dng
ch nhn i tc (U2X=0), t c tc b baud 57600 th gi tr cn gn
cho thanh ghi UBRR l 8 (xem ct 2, bng 3). Hai dng 12 v 13 trong list 1 thc
hin gn 8 cho thanh ghi UBRR thng qua 2 thanh ghi UBRRH v UBRRL. Trong
dng 16, thanh ghi UCSRA c gn bng 0. Nu bn xem li phn gii thch bn
s thy thanh ghi UCSRA ch yu cha cc bit trng thi, ring 2 bit U2X v
MPCM l 2 bit iu khin, 2 bit ny bng 0 ngha l chng ta khng s dng ch
nhn i tc v khng s dng truyn thng a x l. Phn quan trng nht
chnh l t gi tr cho 2 thanh ghi USCRB v UCSRC. Vi thanh ghi UCSRC
(dng 17) trc ht chng ta phi set bit URSEL bo rng chng ta khng mun
truy cp thanh ghi UBRRH m l thanh ghi UCSRC (2 thanh ghi ny c cng a
ch), tip theo chng ta ch set 1 cho 2 bit UCSZ1 v UCSZ0, bn xem li bng 2
thy rng nu UCSZ1=1, UCSZ0=1 cng vi vic bit UCSZ2=0(nm trong
thanh ghi UCSRB) th di d liu truyn c chn l 8 bit. Cc bit trong thanh
ghi UCSRC khng c set s mc nh mang gi tr 0, bao gm UMSEL = 0 (ch
truyn thng khng ng b), UPM1:0=00 ( khng s dng kim tra parity,
xem bng 1), USBS=0 (1 bit stop) v UCPOL=0 (bit ny khng s dng khi
truyn khng ng b). Sau cng, trong dng 18, chng ta ch set bit TXEN =1
ngha l ch kch hot b pht d liu, cc thnh phn khc nh b nhn, cc
ngtkhng c s dng trong v d ny.
Trong cc bi trc ti gii thiu bn v trnh phc v ngt v trong phn
ny ti s trnh by cch vit mt chng trnh con bng ngn ng C trong
WinAVR, l on chng trnh uart_char_tx dng 5. Chng trnh con l 1
on code bao gm cc cu lnh cng thc hin mt nhim v chung c th no
. Trong trng hp ny l nhim v truyn 1 tham s 8 bit ra ng TxD ca
USART thng qua thanh ghi UDR. Nh trnh by trong phn m t bit UDRE ca
thanh ghi UCSRA, qu trnh truyn ch c bt u khi bit UDRE bng 1, v th
dng code 6 lm nhim v kim tra bit UDRE, cu
lnh while (bit_is_clear(UCSRA,UDRE)) {}; c hiu l qu trnh lp s ln
qun nu bit UDRE bng 0 (bit_is_clear). Khi bit UDRE bng 1 th dng code 7
s xut bin chr ra thanh ghi UDR cng l xut ra chn TxD ca module USART.
Trong ngn ng C c 2 cch c bn vit chng trnh con. Vi cch 1 chng
trnh con c khai bo v vit trc tip pha trc chng trnh chnh main nh
cch m ti thc hin trong v d 1 ny. Cch vit ny hiu v thch hp cho cc
on chng trnh con ngn nhng chng c th lm tng quan chng trnh ca
bn tr nn rc ri khi c qu nhiu chng trnh con vit trc main. Bn c th
khc phc nhc im ny bng cch t cc chng trnh con pha sau main nh
cch m chng ta lm vi cc trnh phc v ngt. Nu theo ng quy cch ca
ngn ng C, khi t chng trnh con sau main bn phi khai bo tn chng trnh
pha trc main, nu bn t chng trnh con uart_char_tx pha sau main th phn
trc main bn s t dng khai bo trc: void uart_char_tx(unsigned
char chr);. Tuy WinAVR cho php bn b qua khai bo trc ny nhng ti
khuyn bn nn vit ng cch to thi quen v cng nh d chuyn chng
trnh sang cc trnh bin dch C khc sau ny nu cn thit. Phn cui cng trong
Hnh 3. M phng v d 1.
1 #include <avr/io.h>
2 #include <avr/interrupt.h>
3 #include <util/delay.h>
4 //chuong trinh con phat du lieu
5 void uart_char_tx(unsigned char chr){
6
while (bit_is_clear(UCSRA,UDRE)) {}; //cho den khi bit UDRE=1
7
UDR=chr;
8 }
9 volatile unsigned char u_Data;
10
11 int main(void){
12 //set baud, 57.6k ung voi f=8Mhz, xem bang 70 trang 165, Atmega32 datasheet
13
UBRRH=0;
14
UBRRL=8;
15 //set khung truyen va kich hoat bo nhan du lieu
16
UCSRA=0x00;
17
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
18
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//cho phep ca 2 qua trinh nhan va//truyen
19 phep ngat sau khi nhan xong
20
sei(); //cho phep ngat toan cuc
21
22
while(1){
23
}
24 }
25 ISR(SIG_UART_RECV){ //trinh phuc vu ngat USART hoan tat nhan
26
u_Data=UDR;
27
uart_char_tx(u_Data);
28 }
5
( 30 Votes )
Ni dung
1.
WinAVR.
2.
S dng Multi-Processor.
Download v d
C cho AVR.
M phng vi Proteus.
Giao tip UART
Hnh 1. Gi a ch.
Khi tt c 9 bit c cc Slaves nhn, bit cao nht s c Slaves cha trong bit
RXB8. Nu bit ny bng 1 cc Slaves bit rng y l gi a ch, ngt RXCIE s
xy ra trn tt c cc Slaves. Qu trnh ny c chip thc hin mt cch hon ton
t ng. Trong trnh phc v ngt RXCIE (SIG_UART_RECV) ngi lp trnh s
thc hin so snh gi tr 8 bits a ch nhn v vi a ch ca tng Slave. Nu mt
Slave nhn thy a ch m Master gi khp vi a ch ca n, ngi lp trnh cn
reset bit MPCM v 0 tch Slave ny ra khi ch ch (ch a ch). Tip theo
Master s gi lin tip cc gi d liu trn ng truyn. Khc vi gi a ch,
bit cao nht (TXB8) trong gi d liu bng 0 ch khng bng 1. Trn chip Master,
ngi lp trnh cn vit 2 on chng trnh pht gi a ch v gi d liu ring
bit. i vi cc Slaves, do bit cao nht nhn v RXB8=0, ngt RXCIE ch duy
nht xy ra trn Slave c bit MPCM=0. Nh th, tt c cc Slaves khc s b qua
gi ny (ngt RXCIE khng xy ra, khng nh hng n cc vic khc) ch duy
nht Slave c a ch trng trc nhn d liu. Mt ch rt quan trng l sau
khi byte d liu cui cng c nhn, Slave (chip c chn) phi set li
bit MPCM ln 1 (do ngi lp trnh thc hin) a Slave tr li trng thi ch
cc
cuc
gi
tip
theo.
Nh vy, bng cch no Slave phi bit trc c s lng bytes d liu
m Master mun gi kp thi set bitMPCM ln 1 sau byte cui. C mt s cch
bit trc s lng bytes m Master s gi nh tha thun trc s bytes c
nh cho mi cuc gi; hoc n gin Master dng byte d liu u tin (sau byte
a ch) bo s lng bytes s gi tip theo; hoc hay hn c th ghp thng s
List
2.
Chng
trnh
cho
Slaves.
Bi 6 - Chuyn i ADC
( 95 Votes )
Ni dung
1.
Bn s i n u.
2.
3.
Download v d
Cc bi cn tham kho tr
Cu trc AVR
WinAVR
C cho AVR.
M phng vi Proteu
I. Bn s i n u.
Bi hc ny, nh tn ca n, s gii thiu cch s dng b chuyn i tng t
- s (analog to digital converter - ADC). Cng c chnh cng l 2 b phn mm
quen thuc WinAVR v Proteus.
Sau bi ny, ti hy vng bn c th hiu v thc hin c:
Nguyn l chuyn i AD.
Chuyn i ADC n knh trn AVR.
S dng chuyn i ADC n knh trn AVR, hin th s 4 digit bng LED
7 on.
II. Chuyn i d liu tng t (analog) sang d liu s (digital).
Trong cc ng dng o lng v iu khin bng vi iu khin b chuyn i
tng t-s (ADC) l mt thnh phn rt quan trng. D liu trong th gii ca
chng ta l cc d liu tng t (analog). V d nhit khng kh bui sng l
25oC v bui tra l 32oC, gia hai mc gi tr ny c v s cc gi tr lin tc m
nhit phi i qua c th t mc 32oC t 25oC, i lng nhit nh th
gi l mt i lng analog. Trong khi , r rng vi iu khin l mt thit b s
(digital), cc gi tr m mt vi iu khin c th thao tc l cc con s ri rc v
thc cht chng c to thnh t s kt hp ca hai mc 0 v 1. V d chng ta
mun dng mt thanh ghi 8 bit trong vi iu khin lu li cc gi tr nhit t
0oC n 255 oC, nh chng ta bit, mt thanh ghi 8 bit c th cha ti a 256
(28) gi tr nguyn t 0 n 255, nh th cc mc nhit khng nguyn nh
28.123 oC s khng c ghi li. Ni cch khc, chng ta s ha (digitalize)
mt d liu analog thnh mt d liu digital. Qu trnh s ha ny thng c
1. Thanh ghi.
C 4 thanh trong b ADC trn AVR trong c 2 thanh ghi data cha d liu
sau khi chuyn i, 2 thanh ghi iu khin v cha trng thi ca ADC.
- ADMUX (ADC Multiplexer Selection Register): l 1 thanh ghi 8 bit iu
khin vic chn in p tham chiu, knh v ch hot ng ca ADC. Chc
nng ca tng bit trn thanh ghi ny s c trnh by c th nh sau:
Bit 5-ADLAR (ADC Left Adjust Result): l bit cho php hiu chnh tri kt
qu chuyn i. S d c bit ny l v ADC trn AVR c phn gii 10 bit, ngha
l kt qu thu c sau chuyn i l 1 s c di 10 bit (ti a 1023), AVR b
tr 2 thanh ghi data 8 bit cha gi tr sau chuyn i. Nh th gi tr chuyn i
s khng lp y 2 thanh ghi data, trong mt s trng hp ngi dng mun 10
bit kt qu nm lch v pha tri trong khi cng c trng hp ngi dng mun
kt qu nm v pha phi. Bit ADLAR s quyt nh v tr ca 10 bit kt qu trong
16 bit ca 2 thanh ghi data. Nu ADLAR=0 kt qu s c hiu chnh v pha
phi (thanh ghi ADCL cha trn 8 bit thp v thanh ghi ADCH cha 2 bit cao
trong 10 bit kt qu), v nu ADLAR=1 th kt qu c hiu chnh tri (thanh ghi
ADCH cha trn 8 bit cao nht, cc bit t 9 n 2, v thanh ADCL cha 2 bit thp
nht trong 10 bit kt qu (bn xem hnh cch b tr 2 thanh ghi ADCL v ADCH
bn di hiu r hn).
Bits 4:0-MUX4:0 (Analog Channel and Gain Selection Bits): l 5 bit cho
php chn knh, ch v c h s khuych i cho ADC. Do b ADC trn AVR
c nhiu knh v cho php thc hin chuyn i ADC kiu so snh (so snh in
p gia 2 chn analog) nn trc khi thc hin chuyn i, chng ta cn set cc bit
MUX chn knh v ch cn s dng. Bng 3 tm tt cc ch hot ng
ca ADC thng qua cc gi tr ca cc bit MUX. Trong bng ny, ng vi cc gi
tr t 00000 n 00111 (nh phn), cc knh ADC c chn ch n knh
(tn hiu input ly trc tip t cc chn analog v so snh vi 0V), gi tr t 01000
n 11101 tng ng vi ch chuyn i so snh.
Bng 3: Chn ch chuyn i.
Bit 2:0 ADPS2:0(ADC Prescaler Select Bits): cc bit chn h s chia xung
nhp cho ADC. ADC, cng nh tt c cc module khc trn AVR, cn c gi
nhp bng mt ngun xung clock. Xung nhp ny c ly t ngun xung chnh
ca chip thng qua mt h s chia. Cc bit ADPS cho php ngi dng chn h s
chia t ngun clock chnh n ADC. Tham kho bng 4 bit cch chn h s
chia.
Bng 4: H s chia xung nhp cho ADC.
ADLAR=1:
5
( 76 Votes )
Ni dung
1.
Gii thiu.
AVRStudio.
2.
C cho AVR.
3.
M phng vi Proteus.
Download v d
Text LCD
I. Gii thiu.
Bi ny gip cc bn bit cch s dng cch truyn thng ni tip ng b SPI.
Cng c chnh cng l 2 b phn mm AVRStudio (+gcc-avr) v Proteus. Thc
cht ngn ng lp trnh vn l gcc-avr nhng ti khng dng Programmer Notepad
bit code nh thng thng, thay vo ti dng AVRStudio lm trnh bin tp,
bn tham kho thm phn Lp trnh C bng AVRStudio trong bi hng dn s
dng AVRStudio bit thm cch thc hin. Ti s dng chip ATmega32 lm
minh
ha.
Sau bi ny, ti hy vng bn c th hiu v thc hin c:
.
Hnh 1. Giao din SPI.
Hot ng: mi chip Master hay Slave c mt thanh ghi d liu 8 bits. C
mi xung nhp do Master to ra trn ng gi nhp SCK, mt bit trong thanh ghi
d liu ca Master c truyn qua Slave trn ng MOSI, ng thi mt bit
trong thanh ghi d liu ca chip Slave cng c truyn qua Master trn ng
MISO. Do 2 gi d liu trn 2 chip c gi qua li ng thi nn qu trnh truyn
Khi chip AVR c s dng lm Slave, bn cn set cc chn SCK input, MOSI
input, MISO output v SS input. Nu l Master th SCK output, MISO output,
MOSI input v khi ny chn SS khng quan trng, chng ta c th dng chn ny
iu khin SS ca Slaves hoc bt k chn PORT thng thng no.
Thanh ghi: SPI trn AVR c vn hnh bi 3 thanh ghi bao gm thanh ghi
iu khin SPCR , thanh ghi trng thi SPSR v thanh ghi d liu SPDR.
SPCR (SPI Control Register): l 1 thanh ghi 8 bit iu khin tt c hot ng
ca SPI.
* Bit 7- SPIE (SPI Interrupt Enable) bit cho php ngt SPI. Nu bit ny c
set bng 1 v bit I trong thanh ghi trng thi c set bng 1 (sei), 1 ngt s xy ra
sau khi mt gi d liu c truyn hoc nhn. Chng ta nn dng ngt (nht l
i vi chip Slave) khi truyn nhn d liu vi SPI.
* Bit 6 SPE (SPI Enable). set bit ny ln 1 cho php b SPI hot ng. Nu
SPIE=0 th module SPI dng hot ng.
* Bit 5 DORD (Data Order) bit ny ch nh th t d liu cc bit c
truyn v nhn trn cc ng MISO v MOSI, khi DORD=0 bit c trng s ln
nht ca d liu c truyn trc (MSB) ngc li khi DORD=1, bit LSB c
truyn trc. Tht ra khi giao tip gia 2 AVR vi nhau, th t ny khng quan
trng nhng phi m bo cc bit DORD ging nhau trn c Master v Slaves.
* Bit 4 MSTR (Master/Slave Select) nu MSTR =1 th chip c nhn din l
Master, ngc li MSTR=0 th chip l Slave..
* Bit 3 v 2 CPOL v CPHA y chnh l 2 bit xc lp cc ca xung gi nhp
v cnh sample d liu m chng ta kho st trong phn u. S kt hp 2 bit
ny to thnh 4 ch hot ng ca SPI. Mt ln na, chn ch no khng
quan trng nhng phi m bo Master v Slave cng ch hot ng. V th c
th 2 bit ny bng 0 trong tt c cc chip. Hnh 3 trnh by cch sample d liu
trong 4 ch ca SPI trn AVR.
CPHA=0
CPHA=1
SPSR (SPI Status Register): l 1 thanh ghi trng thi ca module SPI. Trong
thanh ghi ny ch c 3 bit c s dng. Bit 7 SPIF l c bo SPI, khi mt gi
d liu c truyn hoc nhn t SPI, bit SPIF s t ng c set len 1. Bit 6
WCOL l bt bo va chm d liu (Write Colision), bit ny c AVR set ln 1
nu chng ta c tnh vit 1 gi d liu mi vo thanh ghi d liu SPDR trong khi
qu trnh truyn nhn trc cha kt thc. Bit 0 SPI2X gi l bit nhn i tc
truyn, bit ny kt hp vi 2 bit SPR1:0 trong thanh ghi iu khin SPCR xc lp
tc cho SPI.
SPDR (SPI Data Register): l thanh ghi d liu ca SPI. Trn chip Master, ghi
gi tr vo thanh ghi SPDR s kch qu trnh tuyn thng SPI. Trn chip Slave, d
liu nhn c t Master s lu trong thanh ghi SPDR, d liu c lu sn trong
SPDR s c truyn cho Master.
S dng SPI trn AVR: SPI trn AVR hot ng khng khc nguyn l chung
ca chun SPI l my. Vn hnh SPI trn AVR c thc hin da trn vic ghi v
c 3 cc thanh ghi SPCR, SPSR v SPDR. Trc khi truyn nhn bng SPI chng
ta cn khi ng SPI, qu trnh khi ng thng bao gm chn hng giao tip
cho cc chn SPI, chn loi giao tip: Master hay Slave, chn ch SPI (SPOL,
SPHA) v chn tc giao tip. Truyn thng SPI lun c khi xng bi chip
Master, khi Master mun giao tip vi 1 Slave no , n s ko chn SS ca Slave
xung mc thp (gi l chn a ch) v sau vit d liu cn truyn vo thanh
ghi d liu SPDR, khi d liu va c vit vo SPDR xung gi nhp s c t
ng to ra trn SCK v qu trnh truyn nhn bt u. i vi cc chip Slave, khi
chn SS b ko xung n s sn sng cho qu trnh truyn nhn. Khi pht hin
xung gi nhp trn SCK, Slave s bt u sample d liu n trn ng MOSI v
gi d liu di trn MISO.
minh ha cho cch truyn v nhn d liu SPI trn AVR, ti s thc hin
mt v d truyn nhn 1 chiu vi 1 chip Master v 3 chip Slaves. Tt c cc chip
c dng l ATmega32, chip Master s iu khin cc chip Slaves thng qua 3
ng chn chip PB0, PD1 v PD2. Cng vic thc hin trong v d ny nh sau:
Master s ln lt chn 1 trong 3 chip Slaves v gi cc gi d liu tng ng n
chng, chip Slave0 s nhn c cc con s t 0 n 80, Slave1 nhn 80 n 160
v Slave2 nhn d liu t 160 n 240. Cc Slave s hin th gi tr m mnh nhn
c trn cc Text LCD kt ni vi PORTD mi Slave. S mch in v bng
Proteus cho v d ny c trnh by trong hnh 4.
Chng trnh chnh: chng trnh chnh cho chip Master SPI tng i n
gin, trc ht chng ta cn gi chng trnh con khi ng SPI dng 43. Trong
vng lp v tn while, ln lt gi cc gi tr n cc Slaves. Dng 46 gi chng
trnh con gi gi tr bin wData[0] n Slave0, dng 50 truyn bin wData[1] cho
Slave1 v dng 54 truyn bin wData[2] cho Slave2
List 2.on code cho Slave SPI.
5
( 41 Votes )
Ni dung
1.
Bn s i n u.
Cu trc AVR.
2.
WinAVR.
3.
4.
C cho AVR.
M phng vi Proteus.
Download v d
I. Bn s i n u.
Bi ny gii thiu cch giao tip bng truyn thng ni tip ng b Two-Wire
Serial (TWI) tng thch vi chun I2C. Trong bi ny chng ta s kho st 2 mode
truyn v nhn trn chip Master cng vi 2 mode truyn v nhn trn chip Slave.
Cng c chnh cng l 2 b phn mm WinAVR v Proteus. Vi iu khin
ATmega32 s c dng lm minh ha.
Sau bi ny, ti hy vng bn c th hiu v thc hin c:
Bit 6 TWEA (TWI Enable Acknowledge Bit): tm hiu l bit kch hot tn
hiu xc nhn. i vi chip Slave, nu bit ny c set th tn hiu xc ACK s
c gi trong cc trng hp sau: a ch do Master pht ra trng khp vi a
ch ca Slave; mt cuc gi chung ang xy ra v Slave ny cho php cuc gi
chung; d liu c Slave nhn t Master. Nh th, khi set mt chip ch
Slave, chng ta cn set bit ny n c th p ng li Master bt c khi no c
gi. i vi chip Master, tn hiu ACK ch c pht trong 1 trng hp duy nht
l khi Master nhn d liu t Slave, Master pht ACK bo cho Slave l mnh
nhn c v mun tip tc nhn t Slave.
Bit 4 TWSTO (TWI STOP Condition Bit): l bit to STOP condition cho
TWI. Khi Master mun kt thc mt cuc gi, n s pht STOP condition bng
cch vit gi tr 1 vo bit TWSTO. Slave cng c th tc ng vo bit ny, nu mt
cuc gi b li, vit 1 vo TWSTO trn Slave s reset ng truyn v trng thi
rnh ban u.
Bit 3 TWWC (TWI Write Collision Flag): khi c TWINT ang mc thp
tc TWI ang bn, nu chng ta vit d liu vo thanh ghi d liu (TWDR) th mt
li xy ra, khi bit TWWC t ng c set ln 1. V th, trong qu trnh truyn
d liu, bit TWINT cn c gi mc cao khi ghi d liu vo thanh ghi TWDR v
sau xa khi d liu sn sng.
Bit 2 TWEN (TWI Enable Bit): bit kch hot TWI trn AVR, khi TWEN
c set ln 1, TWI sn sng hot ng.
C rt nhiu bc, nhiu tnh hung xy ra khi giao tip bng TWI cho c
Master v Slave. ng vi mi trng hp TWI s to ra 1 code trong thanh ghi
TWSR . Lp trnh cho TWI cn xt code trong 5 bit cao ca thanh ghi TWSR v
a ra cc ng x hp l ng vi tng code.
- TWDR (TWI Data Register): l thanh ghi d liu chnh ca TWI. Trong
qu trnh nhn, d liu nhn v s c lu trong TWDR. Trong qu trnh gi, d
liu cha trong TWDR s c chuyn ra ng SDA.
- TWAR (TWI Address Register): l thanh ghi cha device address ca chip
Slave. Cu trc thanh ghi c trnh by trong hnh di.
ng ca thanh ghi TWSR. ngha cc code trong thanh ghi TWSR trong lc
Master truyn d liu c th tham kho thm datasheet ca chip.
K thut chnh dng cho Master khi truyn hay nhn cuc gi l hi vng v
ch (polling and waiting). ng vi mi code nhn v t thanh ghi TWSR (hay ng
vi mi trng thi ca cuc gi) m Master set cc bit tng ng trong thanh ghi
iu khin TWCR v sau ch bit TWINT c set (qu trnh kt thc) tip
tc c v xt code TWSR. Qu trnh ch v xt ny lp li cho n khi Master kt
thc cuc gi bng STOP condition. Tuy nhin Slave th khc, Slave khng ch
ng thc hin cuc gi m n phi ch yu cu t Master phc v. V th, nu
dng hi vng cho Slave th s tn thi gian ch v ch v i khi cn b l cc
cuc gi. i vi Slave, ngt l phng php bt cuc gi ti u nht. Trong bi
hc ny, vic truyn v nhn ca Slave s c thc hin trong cc trnh phc v
ngt TWI.
Ma trn LED
5
( 101 Votes )
Ni dung
1.
Ma trn LED.
WinAVR.
2.
C cho AVR.
Download v d
I. Ma trn LED.
M phng vi Proteus.
a)
b)
cc thao tc trn b nh chng trnh. Tip theo chng ta khai bo 1 mng tnh
c tn font7x5 vi kiu d liu l prog_char tc l kiu char nhng cha trong
b nh chng trnh (Program memory). Gi tr cha trong mng font7x5 chnh
l d liu ca bng font, thc cht mng font7x5 l mng 1 chiu lin tc, vic
tch ra trn nhiu dng c mc ch gip ngi c d hnh dung khi truy cp
cc gi tr ca mng xut ra sau ny. Bn hy hiu rng c mt t hp 5 s s
to thnh mt symbol hin th cho ma trn LED. D liu trong bng font c
sp xp theo trnh t ASCII v to iu kin thun li khi truy xut bng font
theo m ASCII ca k t cn hin th. Tuy nhin cn ch l bng font c bt
u cho symbol c m ASCII l 32 ch khng bt u t m ASCII 0, v th khi
truy cn bng font t m ASCII chng ta cn ly m ASCII tr i 32 c v
tr chnh xc trong bng.
Tip theo chng ta s tm hiu chng trnh chnh, dng 3 trong list 2
include file font.h s dng bng font trong chng trnh chnh. Cc dng t 5
n 9 nh ngha cc PORT kt ni vi ma trn LED, PORTD l Data bus trong
khi PORTC l control lines. Chng trnh con void DOTputChar75(uint8_t chr)
trong dng 11 l th tc c d liu t bng font v hin th trn ma trn LED.
Tham s chr ca chng trnh ny chnh l m ASCII ca k t cn hin th trn
ma trn LED. Dng 12 khai bo 2 bin ph, trong bin line cha tn hiu
iu khin cho cc ng Control. Dng 13 khai bo mt bin tm tchr dng
cha a ch d liu cn ly ra t bng font xut ra cc ng Data, v m
ASCII l mt s 8 bit trong khi s lng d liu trong bng font ln gp 5 ln s
lng k t, v th cn khai bo bin tchr c kiu d liu 16 bit. Ni dung chnh
ca on chng trnh ny nm trong vng lp for, bin i i din cho s th t
ca cc chn Control c cho chy t 0 n 4, trong dng 15
CTRL_PORT=line; xut tn hiu iu khin ra CTRL_PORT tc ra cc chn
C. Do bin line c khi to bng 1 nn ln lp u tin gi
trCTRL_PORT=0b00000001, tc chn C0 mc cao trong khi cc chn cn
li mc thp, ct u tin c chn. Sau khi 1 ct c chn, dng 16
DATA_PORT=~pgm_read_byte(&font7x5[((tchr - 32) * 5) + i]); c v
xut d liu t bng font ra cc chn Data. Trc ht l cch tnh a ch ca d
liu trong bng font. Nh trnh by trong phn gii thch cho bng font, bng
ny c chng ta bt u t k t c m 32 nn chng ta cn tr i 32 tham
chiu n v tr chnh xc trong bng font: tchr-32. V d mun hin th k t c
m chr = 48 (m ca k t 0), v tr ca t hp d liu to nn s 0 c
cha trong bng font v tr 16, gi tr ny c tnh 48-32=16. Tip theo, do
mi k t c to thnh t 5 s nn a ch thc cht ca s u tin trong t
hp s l (tchr-32)*5. di chuyn trong phm vi 5 d liu ng vi 6 ct ca
KeyPad
5
( 29 Votes )
Ni dung
1.
2.
Keypad 4x4.
ckeypad 4x4 bng AVR.
Download v d
WinAVR.
C cho AVR.
M phng vi Proteus.
Text LCD
I. Keypad 4x4.
Keypad l mt "thit b nhp" cha cc nt nhn cho php ngi dng nhp
cc ch s, ch ci hoc k hiu vo b iu khin. Keypad khng cha tt c
bng m ASCII nh keyboard v v th keypad thng c tm thy trong cc
thit b chuyn dng. Cc nt nhn trn cc my tnh in t cm tay l mt v d
v keypad. S lng nt nhn ca mt keypad thay i ph thuc vo yu cu ng
dng. Trong bi ny ti gii thiu cch iu khin ca mt loi keypad n gin,
keypad 4x4.
Gi l keypad 4x4 v keypad ny c 16 nt nhn c b tr dng ma trn 4
hng v 4 ct. Cch b tr ma trn hng v ct l cch chung m cc keypad s
dng. Cng ging nh cc ma trn LED, cc nt nhn cng hng v cng ct c
ni vi nhau, v th vi keypad 4x4 s c tng cng 8 ng ra (4 hng v 4 ct). M
hnh Keypad 4x4 c th hin trong hnh 1.
a)
b)
Hnh 1. Keypad 4x4.
01 ....
02 #define CTRL
03 #define DDR_CTRL
04
05 #define DATA_O
06 #define DATA_I
07 #define DDR_DATA
08 ....
PORTC
DDRC
PORTC
PINC
DDRC
C cho AVR
5
( 109 Votes )
Ni dung
1.
Lm quen AVR.
2.
Cu trc AVR.
3.
V d minh ha.
WinAVR.
dng nhanh chng v d dng hn, tuy nhin khng v th m bn qun ASM,
lp trnh bng C kt hp ASM l gii php hay nht. Mt ch l chng ta ch
s dng C n gin ha lp trnh tnh ton, cu trc iu khinlp trnh C
cho AVR khng c ngha l bn khng cn bit cu trc v cch thc hot ng
ca chip. Ti khng c nh ni v ngn ng C y nhng ch gii thiu
mt cch c bn nht v cch vit chng trnh cho AVR bng C, c th l C
trong avr-gcc. c th hiu v vit nhng chng trnh phc tp hn, bn cn
t trang b kin thc v C, ti liu ny s khng gip bn phn . Tuy nhin,
nu bn cha tng lp trnh bng C th bn cng yn tm c ti liu ny, v t ra
ti s gii thch nhng g ti vit.
I. Mt s khi nim C cho AVR.
}
If (iu kin ) statement1; else statement2; : nu iu kin ng th thc
hin statement1, ngc li thc thi statement2. Vic t cc statement v else..trn
cng 1 dng hay trn nhng dng khc nhau u khng nh hng n kt qu.
Tng t trng hp trn, nu c nhiu statements th cn t chng trong 1 khi.
If (iu kin) {
Statement1;
Statement2;
}else {
Statement1;
Statement2;
}
Ngoi ra, bn cng c th t nhiu cu trc ifelse lng vo nhau.
Cu trc switch: trong trng hp c nhiu kh nng c th xy ra cho 1 biu
thc (hay 1 bin), ng vi mi kh nng bn cn chng trnh thc hin mt vic
no , khi ny bn nn s dng cu trc switch. Cu trc ny c trnh by nh
bn di.
switch (biu thc) {
case hng_s_1:
cc statement1;
break;
case hng_s_2:
cc statement2;
break;
default:
cc statement khc;
}
Hy xt 1 v d bn kt ni 2 chip AVR vi nhau, 1 chip lm Master s ra cc
lnh iu khin chip Slave, chip Slave nhn m lnh t Master v thc hin cc
cng vic c tho hip trc. Gi s m lnh c lu trong bin Command,
di y l chng trnh v d cch x l ca chip Slave ng vi tng m lnh.
switch (Command) {
case 1:
PWM=255;
ON_Motor();
break;
case 2:
PWM=0;
OFF_Motor();;
break;
default:
Get_Cmd();
break;
}Ngoi ra, bn cng c th t nhiu cu trc ifelse lng vo nhau.
Nu Command=1, gn gi tr 255 cho bin PWM v gi chng trnh con
ON_Motor(). Trong trng hp ny, break c s dng, break ngha l thot khi
cu trc iu khin hin ti ngay lp tc, nh vy sau khi thc hin 2 lnh, switch
kt thc m khng cn xt n cc trng hp khc. By gi, nu Command=2,
gn gi tr 0 cho bin PWM v gi chng trnh con OFF_Motor(), trong tt c cc
trng hp cn li (default), thc hin chng trnh con Get_Cmd().
while (iu kin ) statement1;: l mt cu trc lp (Loop), ngha ca cu
trc while l khi iu kin cn ng th s thc hin statement1 (hoc cc
statements nu chng c t trong 1 khi {} nh trong trng hp ca if c
gii thiu trn). Cn thn, bn rt d ri vo mt vng lp khng li thot vi
while nu iu kin lun lun ng.
for (biu_thc_1; biu_thc_2; biu_thc_3) statement;: l mt cu trc
lp khc, trong cu trc for, biu_thc_1 thng c hiu l khi to,
biu_thc_2 l iu kin v biu_thc_3 l biu thc c thc hin sau. Cu trc
for ny tng ng vi cu trc while sau:
biu_thc_1;
while (biu_thc_2){
statement;
biu_thc_3;
}
Cc biu thc trong cu trc for c th vng mt trong cu trc nhung cc
du ; th khng c b. Nu bn vit for( ; ; ) tng ng vi vng lp v tn
while (1).
Cu trc for thng c dng thc hin 1 hay nhng cng vic no
trong s ln no , v d bn di thc hin xut cc gi tr t 0 n 200 ra
PORTB, sau mi ln xut s gi lnh delay trong 65000 chu k my.
for (uint8_t i=0; i<=200; i++){
PORTB=i;
_delay_loop_2(65000);
}
Ch , bn c th thc hin vic khai bo 1 bin (xem phn khai bo bin bn
di) ngay trong cu trc for nu bin ln u c s dng. V d trn c hiu
nh sau: khai bo 1 bin i kiu byte khng m, gn gi tr khi u cho i=0 (ch
thc hin 1 ln duy nht), kim tra iu kin i<=200 (nh hn hoc bng 200), nu
iu kin cn ng, thc hin 2 statements trong block {}, sau quay v thc
hin i++ (tng i thm 1) ri li kim tra iu kin i<=200 v qu trnh lp li. Nh
th on code trong {} c thc thi khong 201 ln trc khi bin i bng 201 v
iu kin i<=200 sai.
2.2 Hm (Functions).
Ngn ng C bao gm tp hp ca rt nhiu hm, mi hm thc hin mt chc
nng c th, cc hm trong C thng c thit kt rt nh gn, c cc hm
phc tp ngi dng cn t to ra. Hm C cho AVR c nh ngha trong th vin
avr-libc, ngoi cc hm C thng thng, avr-libc cn cha rt nhiu cc hm ring
dng ring cho chip AVR, cc hm ny c khai bo trong cc file header ring,
s dng hm no, bn cn #include file header tng ng (tham kho ti liu
avr-libc user manual bit thm chi tit, trong ti liu ny, khi cn s dng mt
hm no ti s ni r file header cn thit).
V d: _delay_loop_2(65000) l mt hm c nh ngha trong file delay.h
(trong th mc C:\WinAVR\avr\include\util), hm ny thc hin vic delay khong
65000 chu k my. C 4 hm delay bn c th s dng sau khi include file l:
14
15
}
return 0;
}
char
unsigned char
0 to 255
signed char
127 to 127
int
32,767 to 32,767
unsigned int
0 to 65,535
signed int
Nh kiu int
short int
Nh kiu int
0 to 65,535
long int
2,147,483,647 to 2,147,483,647
0 to 4,294,967,295
float
6 digits of precision
double
10 digits of precision
long double
12
10 digits of precision
Mt s kiu d liu thng dng nht l char (1 byte), int (2 byte) v float. T
kha unsigned c thm trc 1 kiu d liu nguyn ch nh cc s nguyn
dng, khi khong gi tr nguyn s c tng ln gn 2 ln. V d char ch cc
s nguyn t -127 n 127 thng c dng ch m ASCII ca cc k t trong
bng m ASCII, nhng unsigned char s bao gm cc s nguyn dng t 0 n
255 v thng c dng khi lm vic vi cc thanh ghi 8 bit.
Ngoi ra, avr-libc cn nh ngha mt s kiu d liu thay th, chng ta c th
dng cc kiu d liu ny thay cho cc kiu thng thng, xem tm tt nh bn
di.
Mt khai bo uint8_t val tng ng usigned char val, s dng kiu khai
bo no l do thi quen ca ngi s dng. Ch l theo mc nh, mt bin mi
c khai bo theo cch thng thng nh trn s c t trong SRAM, nh cc
bn bit SRAM trong AVR tng i nh v th nn khai bo v s dng hp l
bin, ng khai bo qu nhiu bin nu bn khng s dng ht, ng khai bo kiu
bin qu ln so vi gi tr tht s dng, tuy nhin cng khng c khai bo kiu
d liu c kch thc qu nh so vi gi tr m bin c th vn ti. S dng b
nh chng trnh (flash program memory) lu tr d liu khng i l mt k
thut khc tit kim b SRAM, ti s cp vn ny trong 1 bi khc.
Cui cng v vic khai bo bin, mt bin c th c gn gi tr khi to
ngay lc khai bo nh trong trng hp ca chng ta, bin val=1 lc c khai
bo.
- Dng 6 int main(void){ bt u chng trnh chnh.
- Dng 7: DDRB=0xFF gn gi tr hexadecimal 0xFF (11111111) cho thanh
thi iu khin ca Port B, DDRB, Port B khi s tr thnh Port xut
- Dng 8 while (1){: bt u 1 vng lp v tn.
Text LCD
( 100 Votes )
Ni dung
Cc bi cn tham kho tr
1.
Bn s i n u.
Cu trc AVR
2.
Text LCD.
WinAVR
3.
C cho AVR.
4.
M phng vi Proteu
Download v d
I. Bn s i n u.
Bi ny nm trong phn ng dng AVR thuc lot bi cng hc AVR. Trong
bi ng dng ny chng ta khng kho st nhiu cu trc AVR m ch yu l tm
hiu Text LCD cch iu khin bng AVR. Cng c chnh cng l 2 b phn mm
quen thuc WinAVR v Proteus.
Sau bi ny, ti hy vng bn c th hiu v thc hin c:
- Cu trc Text LCD.
- Nguyn l hot ng Text LCD
- Pht trin 1 th vin iu khin Text LCD bng AVR c 2 ch 8 bit v 4
bit.
- V d iu khin Text LCD bng AVR.
II. Text LCD.
Text LCD l cc loi mn hnh tinh th lng nh dng hin th cc dng ch
hoc s trong bng m ASCII. Khng ging cc loi LCD ln, Text LCD c chia
sn thnh tng v ng vi mi ch c th hin th mt k t ASCII. Cng v l
do ch hin th c k t ASCII nn loi LCD ny c gi l Text LCD ( phn
bit vi Graphic LCD c th hin th hnh nh). Mi ca Text LCD bao gm cc
chm tinh th lng, vic kt hp n v hin cc chm ny s to thnh mt
k t cn hin th. Trong cc Text LCD, cc mu k t c nh ngha sn. Kch
thc ca Text LCD c nh ngha bng s k t c th hin th trn 1 dng v
tng s dng m LCD c. V d LCD 16x2 l loi c 2 dng v mi dng c th
hin th ti a 16 k t. Mt s kch thc Text LCD thng thng gm 16x1,
16x2, 16x4, 20x2, 20x4Hnh 1 l mt v d Text LCD 16x2.
ang bn, nu BF=1 th chng ta phi ch cho LCD x l xong nhim v hin ti,
n khi no BF=0 mt thao tc mi s c gn cho LCD. V th, khi lm vic vi
Text LCD chng ta nht thit phi c mt chng trnh con tm gi l wait_LCD
ch cho n khi LCD rnh. C 2 cch vit chng trnh wait_LCD. Cch 1
l c bit BF v kim tra v ch BF=0, cch ny i hi lnh c t LCD v b
iu khin ngoi, do chn R/W cn c ni vi b iu khin ngoi. Cch 2 l
vit mt hm delay mt khong thi gian c nh no (tt nht l trn 1ms). u
im ca cch 2 l s n gin v khng cn c LCD, do chn R/W khng cn
s dng v lun c ni vi GND. Tuy nhin, nhc im ca cch 2 l khong
thi gian delay c nh nu qu ln s lm chm qu trnh thao tc LCD, nu qu
nh s gy ra li hin th. Trong bi ny ti hng dn bn cch tng qut l cch
1, s dng cch 2 bn ch cn mt thay i nh trong chng trnh wait_LCD
(s trnh by chi tit sau) v kt ni chn R/W ca LCD xung GND.
EN (chn s 5): Chn cho php LCD hot ng (Enable), chn ny cn c
kt ni vi b iu khin cho php thao tc LCD. c v ghi data t LCD
chng ta cn to mt xung cnh xung trn chn EN, ni theo cch khc, mun
ghi d liu vo LCD trc ht cn m bo rng chn EN=0, tip n xut d liu
n cc chn D0:7, sau set chn EN ln 1 v cui cng l xa EN v 0 to 1
xung cnh xung.
3.2 Tp lnh ca LCD.
Bng 2 tm tt cc lnh c th ghi vo LCD
iu khin ch cn xut hoc nhn d liu trn 1 PORT. Tuy nhin, phng php
ny c nhc im l tng s chn dnh cho giao tip LCD qu nhiu, nu tnh
lun c 3 chn iu khin th cn n 11 ng cho giao tip LCD.
- Mode 4 bit: LCD cho php giao tip vi b iu khin ngoi theo ch 4
bit. Trong ch ny, cc chn D0, D1, D2 v D3 ca LCD khng c s dng
( trng), ch c 4 chn t D4 n D7 c kt ni vi chip b iu khin ngoi.
Cc instruction v data 8 bit s c ghi v c bng cch chia thnh 2 phn, gi l
cc Nibbles, mi nibble gm 4 bit v c giao tip thng qua 4 chn D7:4, nibble
cao c x l trc v nibble thp sau. u im ln nht ca phng php ny ti
thiu s lines dng cho giao tip LCD. Tuy nhin, vic c v ghi tng nibble
tng i kh khn hn c v ghi d liu 8 bit. Trong bi hc ny, ti s trnh by
2 chng trnh con c vit ring ghi v c cc nibbles gi l Read2Nib v
Write2Nib.
III. AVR v Text LCD.
1. Trnh t giao tip Text LCD.
Trnh t giao tip vi LCD c trnh by trong flowchart hnh 6.
07 #define CTRL
08 #define DDR_CTRL
09
10 #define DATA_O
11 #define DATA_I
12 #define DDR_DATA
13 /*
14 #define LCD8BIT
15 #define DATA_O
16 #define DATA_I
17 #define DDR_DATA
18 */
PORTB
DDRB
PORTB
PINB
DDRB
PORTD
PIND
DDRD
06
07
08
09
10
11
12
13
14
15 }
DDR_DATA &=0x0F; //set 4 bits cao cua PORT DATA lam input
HNib=DATA_I & 0xF0;
cbi(CTRL,EN); //disable
sbi(CTRL,EN); //enable
LNib = DATA_I & 0xF0;
cbi(CTRL,EN); //disable
LNib>>=4;
return (HNib|LNib);
12
13
14
15 }
DATA_O =(LNib|temp_data);
sbi(CTRL,EN); //enable
cbi(CTRL,EN); //disable
Hm Write2Nib thc hin ghi mt bin 8 bit c tn chr vo LCD theo tng
nibble, hm ny c s dng rt nhiu ln trong mode 4 bit. Dng 2 nh ngha 3
bin tm l HNib, LNib v temp_data, khng ging nh khi c t LCD, vic ghi
vo LCD c th lm nh hng n cc chn ca PORT dng lm ng d liu
nht l khi cc ng iu khin v d liu dng chung 1 PORT (PORTB). Bin
temp_data dng trong gii thut mt n khng lm nh hng n cc bit khc
khi ghi LCD. Dng 3 c d liu t PORT DATA_O v che i cc bit cao, ch lu
li cc bit thp vo bin temp_data v cc bit thp ny khng c dng xut nhp
d liu (xem hnh 7, cc chn thp ca PORTB dng lm cc chn iu khin).
ghi 1 gi tr 8 bit c tn l chr theo cch ghi tng nibbles chng ta cn tch bin chr
thnh 2 nibbles. Dng 5 tch 4 bit cao ca chr v cha vo bin HNib. Dng 6 thc
hin thm vic di chuyn 4 bit thp ca chr qua tri ri gn cho bin LNib. Nh
vy sau 2 dng ny cc bin HNib v LNib c m t nh sau:
ghi v c LCD ph hp, phng php dng #ifdef LCD8BIT c p dng cho
tt c cc hm sau ny. Cc on code t dng 4 n 17 thc hin trong mode 8
bit. Trc khi c BF, chng ta cn gi 1 lnh c BF dng 9, sau dng 12
thc hin i hng cc chn data nhn gi tr v. Trong dng 10, kim tra bit
th 7 ca DATA_I, DATA_I chnh l gi tr c v v bit th 7 trong gi tr nhn v
chnh l c Busy Flag. Nu BF=0 (bit_is_clear(DATA_I,7)) th kt thc qu trnh
lp ch vi lnh break;. Trong trng hp mode 4 bit c s dng (#else), qu
trnh kim tra c BF cng tng t, im khc nhau duy nht l cch c d liu
v c khc, chng ta dng hm Read2Nib c vit trc nhn gi tr v
(xem dng 23). Nh trnh by, chng ta c th vit hm wait_LCD bng cch
dng hm delay mt khong thi gian c nh, trong dng 29 bn thy mt hm
_delay_ms(1) khng c s dng, nu mun bn c th xa ht cc dng lnh
trc trong hm wait_LCD v dng hm delay ny thay th, LCD vn s
hot ng tt.
List 6. Khi ng LCD.
01 void init_LCD(){
02
DDR_CTRL=0xFF;
03
DDR_DATA=0xFF;
04 //Function set-----------------------------------------------------------------------------05
cbi(CTRL,RS); // the following data is COMMAND
06
cbi(CTRL, RW); // AVR->LCD
07
cbi(CTRL, EN);
08
#ifdef LCD8BIT
09
Write8Bit(0x38);
10
wait_LCD();
11
#else
12
sbi(CTRL,EN); //enable
13
sbi(DATA_O, 5);
14
cbi(CTRL,EN); //disable
15
wait_LCD();
16
Write2Nib(0x28);//4 bit mode, 2 line, 5x8 font
17
wait_LCD();
18
#endif
19 //Display control------------------------------------------------------------------------20
cbi(CTRL,RS); // the following data is COMMAND
21
#ifdef LCD8BIT
22
Write8Bit(0x0E);
23
wait_LCD();
24
#else
25
Write2Nib(0x0E);
26
wait_LCD();
27
#endif
28 //Entry mode set-----------------------------------------------------------------------29
cbi(CTRL,RS); // the following data is COMMAND
30
#ifdef LCD8BIT
31
Write8Bit(0x06);
32
wait_LCD();
33
#else
34
Write2Nib(0x06);
35
wait_LCD();
36
#endif
37 }
Qu trnh khi ng gm 3 bc: function set, display control v entry mode
set.
Vi function set, ba dng 5,6 v 7 xc lp cc chn iu khin chun b gi
cc lnh. Hai dng 9 v 10 vit lnh function set vo LCD theo mode 8 bit. Gi tr
0x38, tc 00111000 l mt lnh xc lp mode 8 bit, LCD 2 dng v font 5x8. Nu
mode 4 bit c dng, chng ta cn vit hm function set khc i mt cht. Theo
mc nh, khi va khi ng LCD th mode 8 bit s c chn, v th nu mt hm
no c ghi vo LCD u tin, LCD s c gng c ht cc chn D0:7 ly
d liu, do trong mode 4 bit cc chn D0:3 khng c kt ni vi AVR nn vic
c ln u c th dn n sai s. V vy, vic u tin cn lm nu mun s dng
mode 4 bit l gi mt lnh function set vi tham s DL=0 (0010xxxx) n LCD
bo mode chng ta mun dng. Dng 13 lm vic ny, dng lnh ch n gin set
bit D5 nhng chnh l gi lnh dng 0010xxxx n LCD, v th LCD s vo
mode 4 bit sau lnh ny. Tip theo qu trnh thao tc vi LCD din ra bnh thng,
dng 16 ghi vo LCD m ca function set, trong trng hp ny l m 0x28,
tc00101000: mode 4 bit, LCD 2 dng v font 5x8.
Vi Display control, m lnh c dng l 0x0E, tc 00001110 trong
00001 l m ca lnh display control, 3 bit theo sau xc lp hin th LCD, hin
th cursor v khng blinking.
Vi Entry mode set, m lnh c dng l 0x06 tc hin th tng v khng
shift. Xem li phn gii thch tp lnh LCD hiu thm ngha ca m lnh
0x06.
List 7. Di chuyn cursor.
01 void home_LCD(){
02
cbi(CTRL,RS); // the following data is COMMAND
03
#ifdef LCD8BIT
04
Write8Bit(0x02);
05
wait_LCD();
06
#else
07
Write2Nib(0x02);
08
wait_LCD();
09
#endif
10 }
11 void move_LCD(uint8_t y,uint8_t x){
12
uint8_t Ad;
13
Ad=64*(y-1)+(x-1)+0x80; // tnh m lnh
14
cbi(CTRL,RS); // the following data is COMMAND
15
#ifdef LCD8BIT
16
Write8Bit(Ad);
17
wait_LCD();
18
#else
19
Write2Nib(Ad);
20
wait_LCD();
21
#endif
22 }
List 7 trnh by 2 hm di chuyn cursor v home (home_LCD) v di chuyn
n 1 v tr do ngi dng t. Hmhome_LCD tng i n gin v ch cn ghi
m lnh 0x02 vo LCD th cursor s t ng di chuyn v home (v tr u tin
trn LCD).
Hm move_LCD(uint8_t y,uint8_t x) cho php di chuyn cursor n v tr
dng y, ct x. im cn ch trong hm ny l cch tnh m lnh cn ghi vo
LCD. Thc cht y l lnh set DDRAM address. Xem li bng 2 ta thy m lnh
cho lnh ny c dng 1xxxxxxx trong xxxxxxx l mt s 7 bit cha a ch ca
DDRAM chng ta cn di chuyn n. V th trc khi thc hin ghi m lnh ny,
chng ta cn tnh tham s xxxxxxx theo dng y, ct x. Xem li t chc ca
DDRAM trong hnh 3, gi s mt nh dng y v ct x trn, do dng 2 bt u
vi a ch 64, 2 nh cng 1 ct trn 2 dng s cch nhau 64 v tr (64*(y-1)).
Mt khc do v tr nh c tnh t 0 trong khi chng ta mun gn ta x bt
u t 1, v th chng ta cn thm (x-1) vo cng thc tnh. Cui cng chng ta
cn phi thm m lnh set a ch DDRAM, m 0x80. Gi tr cui cng ca m
lnh l : Ad=64*(y-1)+(x-1)+0x80 (dng 13). Cc dng lnh tip theo trong hm
move_LCD thc hin ghi gi tr m lnh vo LCD.
Cui cng l phn code hin th LCD c trnh by trong list 8. Phn hin th
bao gm 1 chng trnh con: xa LCd, hin th 1 k t v hin th 1 chui cc k
t.
List 8. Hin th trn LCD.
01 void clr_LCD(){ //xa ton b LCD
02
cbi(CTRL,RS); //RS=0 mean the following data is COMMAND (not normal DATA)
03
#ifdef LCD8BIT
04
Write8Bit(0x01);
05
wait_LCD();
06
#else
07
Write2Nib(0x01);
08
wait_LCD();
09
#endif
10 }
11 void putChar_LCD(uint8_t chr){ //hin th 1 k t chr ln LCD
12
sbi(CTRL,RS); //this is a normal DATA
13
#ifdef LCD8BIT
14
Write8Bit(chr);
15
wait_LCD();
16
#else
17
Write2Nib(chr);
18
wait_LCD();
19
#endif
20 }
21 void print_LCD(char* str, unsigned char len){ //Hin th 1 chui k t
22
unsigned char i;
23
for (i=0; i<len; i++)
24
if(str[i] > 0) putChar_LCD(str[i]);
25
else putChar_LCD(' ');
26
}
27 }
xa ton b LCD chng ta cn gi 1 instruction c m 0x01 n LCD,
hm clr_LCD() thc hin vic ny. Lu m lnh xa LCD l 1 instruction, v
th cn xa chn RS xung 0 trc khi gi m ny xung LCD (dng 2 xa chn
RS). Hm putChar_LCD(uint8_t chr) hin th 1 k t ln LCD, gi tr tham s
ca hm ny l m ASCII ca k t cn hin th, chr. Ni dung ca hm hon ton
ging hm xa LCD, ch khc y khng phi l 1 instruction nn cn set chn RS
clr_LCD(); // xa to b LCD
putChar_LCD(' '); //ghi 1 khong trng
putChar_LCD(' '); //ghi 1 khong trng
putChar_LCD('D'); //Hin th kt 'D'
print_LCD("emo of the",10); //hin th 1 chui k t
move_LCD(2,1); //di chuyn cursor n dng 2, ct u tin
print_LCD("2x16 LCD Display",16); //hin th chui th 2
while(1){
};
}
s dng th vin myLCD, chng ta cn include file myLCD.h vo Project
nh trong dng 3, #include"myLCD.h". Hai dng 6 v 7 thc hin khi ng v
xa LCD. Sau , cc dng 9, 10 v 11 t 3 k t l cc khong trng v ch ci
D bng hm putChat_LCD. Dng 12 in chui emo of the ngay tip theo ch ci
D trc bng hm print_LCD. Dng 13 thc hin di chuyn cursor n v tr
dng th 2, ct u tin ca LCD trc khi tin hnh in chui th 2 2x16 LCD
Display dng code 14. Nu bn thc hin ng trnh t nh trn, kt qu thu
c s nh trong hnh 8.
Graphic LCD
5
( 23 Votes )
Ni dung
Cc bi cn tham kho t
1.
Bn s i n u.
Cu trc AVR
2.
Graphic LCD.
WinAVR
3.
C cho AVR.
4.
M phng vi Prote
Download v d
Download phn mm G.Edit
I. Bn s i n u.
Trong bi ng dng ny ti trnh by v cu trc v cch iu khin Graphic
LCD loi dot khng mu. Cng c chnh cng l 2 b phn mm quen thuc
WinAVR, Proteus v phn mm bin tp Graphic LCD, G.Edit.
Sau bi ny, ti hy vng bn c th hiu v thc hin c:
- Cu trc Graphic LCD 128x64 v chip iu khin KS0108.
- Nguyn l hot ng Graphic LCD.
- Pht trin 1 th vin iu khin Graphic LCD 128x64 cho AVR.
- V d iu khin Graphic LCD 128x64 bng AVR.
II. Graphic LCD.
Graphic LCD (gi tt l GLCD) loi chm khng mu l cc loi mn hnh tinh
th lng nh dng hin th ch, s hoc hnh nh. Khc vi Text LCD, GLCD
khng c chia thnh cc hin th cc m ASCII v GLCD khng c b nh
CGRAM (Character Generation RAM). GLCD 128x64 c 128 ct v 64 hng
tng ng c 128x64=8192 chm (dot). Mi chm tng ng vi 1 bit d liu, v
nh th cn 8192 bits hay 1024 bytes RAM cha d liu hin th y mi
128x64 GLCD. Ty theo loi chip iu khin, nguyn l hot ng ca GLCD c
th khc nhau, trong bi ny ti gii thiu loi GLCD c iu khin bi chip
KS0108 ca Samsung, c th ni GLCD vi KS0108 l ph bin nht trong cc
loi GLCD loi ny (chm, khng mu). Hnh 1 l hnh nh tht ca 1 GLCD
128x64 iu khin bi KS0108.
Hnh 2. Kt ni GLCD.
Chn VSS c ni trc tip vi GND, chn VDD ni vi ngun +5V, mt
bin tr khong 20K c dng chia in p gia Vdd v Vee cho chn Vo,
bng cch thay i gi tr bin tr chng ta c th iu chnh tng phn ca
GLCD. Cc chn iu khin RS, R/W, EN v cc ng d liu c ni trc tip
vi vi iu khin. Ring chn Reset (RST) c th ni trc tip vi ngun 5V.
EN (Enable): cho php mt qu trnh bt u, bnh thng chn EN c gi
mc thp, khi mt thc hin mt qu trnh no (c hoc ghi GLCD), cc
chn iu khin khc s c ci t sn sng, sau kch chn EN ln mc cao.
Khi EN c ko ln cao, GLCD bt u lm thc hin qu trnh c yu cu,
chng ta cn ch mt khong thi gian ngn cho GLCD c hoc gi d liu. Cui
cng l ko EN xung mc thp kt thc qu trnh v cng chun b chn EN
cho qu trnh sau ny.
RS (Register Select): l chn la chn gia d liu (Data) v lnh
(Instruction), v th m trong mt s ti liu bn c th thy chn RS c gi l
chn DI (Data/Instruction Select). Chn RS=1 bo rng tn hiu trn cc ng
DATA (D0:7) l d liu ghi hoc c t RAM ca GLCD. Khi RS=0, tn hiu trn
ng DATA l mt m lnh (Instruction).
- Set Page chn trang: lnh cho php chn page (hay a ch X) cn di
chuyn n, do GLCD ch c 8 pages nn ch cn 3 bit cha a ch page. M
lnh cho lnh ny c dng 0xB8+X. Trong bin X l ch s page cn di chuyn
n. Hai chn RS v RW c gi mc thp khi thc hin lnh ny.
- Display Start Line chn line u tin: hay cn gi l lnh cun, lnh ny
cho php di chuyn ton b hnh nh trn GLCD (hay RAM) ln pha trn mt s
dng no , chng ta gi l LOffset. S lng LOffset c th t 0 n 63 nn cn
6 bit cha gi tr ny. M lnh Display Start Line c dng 0xC0+LOffset. Hai chn
RS v RW c gi mc thp khi thc hin lnh ny. Khi di chuyn GLCD ln
pha trn, phn d liu pha trn b che khut s cun xung pha di. Hnh 5 l
mt v d cun GLCD ln 20 dng.
gian set li a ch ct Y. Sau khi thc hin ghi ct Y=63 (ct cui cng trong 1
page, i vi 1 chip KS0108), Ys v 0.
- Read Display Data c d liu hin th t GLCD (cng l d liu t RAM
ca KS0108): lnh c ny mi so vi Text LCD, n cho php chng ta c ngc
1 byte d liu t RAM ca KS0108 ti v tr hin hnh v AVR. Sau khi c
c gi tr ti v tr hin hnh, chng ta c th thc hin cc php Logic nh o
bit, or hay andlm tng kh nng thao tc hnh nh. Trc khi thc hin c
chng ta cn di chuyn n v tr mun c bng 2 lnh set a ch X v Y, sau khi
c gi tr a ch page X v ct Y khng thay i, do nu c tip m khng di
chuyn a ch th vn thu c gi tr c.
III. AVR v Graphic LCD.
1. Trnh t giao tip GLCD.
So vi Text LCD th vic giao tip vi GLCD d hn nhiu v GLCD c t
Instruction hn, GLCD ch c mt loi b nh l RAM tng ng trc tip vi
mn hnh hin th, GLCD khng c cursor nn khng cn set cursor, GLCD ch h
tr giao tip 8 bit nn khng cn bn tm chn mode, qu trnh khi ng cho
GLCD v th rt n gin bng cch gi lnh DISPLAY ON/OFF. Trong hnh 5 ti
trnh by qu trnh khi ng v s dng GLCD.
Side) dng 19 chn chip KS0108 tri hoc phi thao tc, trong Side=1 th
mt na GLCD bn phi c chn bng cch reset bit CS1=0 v CS2=1 (cc
dng 22, 23), ngc li na bn tri c kch hot, CS1=1, CS2=0 (dng 26 v
27).
List 3 trnh by phn code cho 4 hm truy cp Instruction GLCD c bn vit
li cho cc hm Status Read, Display On/Off, Set Address, Set page v Display
Start Line trch t bng 2.
List 3. Cc hm truy cp Instruction.
Hai hm trong list 4 thao tc d liu hin th trn GLCD nn chn RS phi
c set bng 1.
Hm GLCD_WriteDATA(uint8_t DATA) ghi mt byte vo RAM ca
KS0108, byte ny cng s c hin th ln GLCD, v tr ghi vo l v tr hin hnh
ca con tr X v Y (nh hng bi cc qu trnh ghi trc hoc do cc hm set
a ch), tham s DATA l byte cn ghi. Ni dung bn trong hm ny cng ging
5
( 159 Votes )
Ni dung
1.
Gii thiu
2.
Cu trc AVR.
3.
WinAVR.
4.
C cho AVR.
5.
M phng vi Proteus.
6.
Download v d
I. Gii thiu
iu khin ng c DC (DC Motor) l mt ng dng thuc dng c bn nht
ca iu khin t ng v DC Motor l c cu chp hnh (actuator) c dng
nhiu nht trong cc h thng t ng (v d robot). iu khin c DC Motor l
bn c th t xy dng c cho mnh rt nhiu h thng t ng. Khi nim
Servo m ti dng trong bi hc ny ch mt h thng hi tip. DC servo motor
l ng c DC c b iu khin hi tip.
Bi ny l mt bi tng hp nhiu vn ng dng AVR bao gm nhn d liu
PW
M
DIR
In1
In2
F=Kp*e + Kd*(de/dt)
+Ki*edt
(ch : edt l tch phn ca bin e theo t)
(3)
lin tip:
de/dt =(e(k) e(k-1))/h.
Trong e(k) l gi tr hin ti ca e, e(k-1) l gi tr ca e trong ln ly mu
trc v h l khong thi gian ly mu (h l hng s).
(4)
Tng hp cc xp x, cng thc ca b iu khin PID s c trnh by trong
(5)
(5)
Trong u l i lng output t b iu khin. n gin ha vic tnh
thnh phn tch phn, chng ta nn dng phng php cng dn (hay quy):
(6)
Vi I(k) l thnh phn tch phn hin ti v I(k-1) l thnh phn tch phn trc
.
c ngt trn timer2 mt ln v trong trnh phc v ngt trn ca timer2 chng ta
thc hin tnh ton PID. Dng 59 chng ta set cc bit CS chn b chia tn s, b
chia Prescaler=1024 c chn v 25 ms kh ln so vi thi gian 1 chu k xung
gi nhp (1/8 micro giy). Prescaler = 1024 ngha l sau 1024 nhp ca xung gi
nhp, tc sau 128 micro giy (1024 *1/8=128 us) th thanh ghi gi tr TCNT2 mi
tng 1 n v. Do chng ta mun to khong thi gian 25 ms tng ng
25000/128=195 n v m ca thanh ghi TCNT2, chng ta s gn gi tr khi to
cho TCNT2 l 255-195=60 (timer 2 s trn mt ln khi TCNT2 m n 255, xem
li bi Timer-Counter). iu ny thc hin dng 60 TCNT2=60. Dng 61 cho
php ngt trn timer2. Hai dng 64 v 65 khi ng Timer 1 dng nh mt b to
xung Fast PWM, mode 14, trong thanh ghi ICR1 cha chu k PWM v 2 thanh
ghi OCR1A, OCR1B cha duty cycle (khong ON) ca PWM. Cc dng t 68 n
70 ghi texts ln LCD. Cc dng t 80 n 83 khi ng PWM cho DC Motor v
cho php ngt ton cc sei();. Trong vng lp while ch yu l cng vic kim tra
v hin th, bin sample_count m s ln ngt trn timer2 xy ra, n c tng 1
n v khi c mt ngt trn (xem dng 106) tc sau 25ms. Dng 86, chng ta kim
tra bin sample_count, vic hin th ch cthc hin mi 250 ms mt ln
(sample_count=10) v vic ny tn kh nhiu thi gian. Trong dng 87 chng ta
kim tra cc swiches xem ngi dng cho mun thay i vn tc tham chiu
cho iu khin. Cc dng tip theo in bin rSpeed l s lng xung m c t
encoder trong vng 25 ms (cho ti hin ti) dong 1 ca LCD v in bin
Ctrl_Speed l s xung/25ms m ngi dng mong mun motor t c. Ni dung
quan trng nht ca list 1, tuy nhin, khng nm trong chng trnh chnh m nm
cc trnh phc v ngt v chng trnh con Motor_Speed_PID(long int
des_Speed).
Trc ht, trnh phc v ngt ISR(TIMER2_OVF_vect) c t ng gi sau
mi 25ms, trong trnh ny chng ta cn set li gi tr khi ng cho thanh ghi gi
tr TCNT2 (xem li bi Timer-counter) dng 105. Sau tng bin m
sample_count ln 1 (cng cho vic m thi gian hin th, ni trn). Cui
cng l gi chng trnh con tnh ton gii thut PID Motor_Speed_PID(long int
des_Speed). y l on chng trnh tnh ton gii thut PID v xut gi tr iu
khin Motor. Hy quay li dng 30 tm hiu chng trnh con ny. Do bin
Pulse cha tng s xung c t encode (trong ISR(INT2_vect) ), chng ta ly gi
tr ny tr i gi tr pre_Pulse, tc s lng xung thi im 25 ms trc ,
thu c tng s xung thu c trong 25 ms qua. y chnh l vn tc motor tnh
trn 25 ms:rSpeed=Pulse-pre_Pulse. Sau khi tnh c vn tc rSpeed chng ta
gn li gi tr Pulse cho pre_Pulse ln ly mu sau dng n (dng 32). Sai s
vn tc c t tn l Err, bin ny c tnh bng bng cch ly vn tc mong
mun tr vn tc hin ti: Err=des_Speed-abs(rSpeed) dng 33. Dng 34 tnh
thnh phn P ca b iu khinpPart=Kp*Err. Dng 35 tnh thnh phn D ca b
iu khin, nh chng ta tho lun trong cng thc (2) th thnh phn D c
tnh l: dPart=Kd*(Err-pre_Err)/Sampling_time, trong pre_Err l gi tr sai s
ln ly mu trc c lu li. Do 1/Sampling_time = inv_Sampling_time nn
chng ta c th thay dng tnh dPart bng cng thc trong dng
35: dPart=Kd*(Err-pre_Err)*inv_Sampling_time. Dng 36 tnh thnh phn I
(iPart), s dng phng php cng dn ( quy) chng ta thu c iPart bng
iPart trc cng vi din tch hnh ch nht sai s hin
ti:iPart+=Ki*Sampling_time*Err/1000. Chng ta phi chia iPart cho 1000 v
Sampling_time c tnh theo ms trong khi n v tnh ton chun trong l s. Cng
cc thnh phn ny li chng ta c gi tr Output tng hp trong dng 37. Tuy
nhin, theo l thng th cng thc dng 37 phi l Output=pPart+dPart+iPart
nhng y li l :Output+=pPart+dPart+iPart ( du + trc du =), ngha
l Output c cng dn thay v l tng tc thi nh chng ta tho lun trong
phn gii thut PID. Tht ra vic ny cng d hiu. Trong bi ton iu khin v tr,
khi sai s bng 0 chng ta c th dng b iu khin (u=0) nhng trong bi ton
iu khin vn tc, khi sai s bng 0 th gi tr u vn phi c gi l gi tr trc
.V vy, trong bi ton iu khin vn tc gi tr Output c cng dn thay v
gn trc tip, bn phi ghi nh iu ny trong cc ng dng iu khin ca mnh.
Hai dng 40 v 41 xt trng hp bo ha (saturation) khi Output vt qu gii
hn cho php ca PWM (xn 2 u). Cui cng l gn gi tr tnh ton c t PID
cho thanh ghi OCR1A tng hoc gim duty cycle ca PWM trn chn OC1A
(ni vi PWM ca Motor) v gn gi tr sai s Err cho bin pre_Err cho ln ly
mu sau dng n.
Chy m phng: ton b chng trnh v c mch in m phng c ti
to sn. Ngi c ch cn c hiu v chy m phng mch in. Ch khi chy
m phng hy thay i cc switches thay i vn tc cn iu khin. Gi tr vn
tc thc cht l s xung encoder trong 25 ms, ngi c hy t tnh ra s vng /s.
Do m hnh motor trong phn mm m phng khng hon ho lm nn p ng b
iu khin hi chm, bn c th phi ch mt khong thi gian thy vn tc
Motor t n vn tc yu cu. Hay thay gi tr Kd trong dng 23 thnh 1 hoc 0,
bin dch li chng trnh v m phng quan st v so snh ovetshot (s vt
qu) ca h thng.
5
( 103 Votes )
Ni dung
1.
Chip DS1307.
2.
AVR v DS1307.
Download v d
WinAVR.
C cho AVR.
Text LCD
Giao tip TWI-I2C
I. Chip DS1307.
DS1307 l chip ng h thi gian thc (RTC : Real-time clock), khi nim thi
gian thc y c dng vi ngha thi gian tuyt i m con ngi ang s
dng, tnh bng giy, pht, giDS1307 l mt sn phm ca Dallas
Semiconductor (mt cng ty thuc Maxim Integrated Products). Chip ny c 7
thanh ghi 8-bit cha thi gian l: giy, pht, gi, th (trong tun), ngy, thng,
nm. Ngoi ra DS1307 cn c 1 thanh ghi iu khin ng ra ph v 56 thanh ghi
trng c th dng nh RAM. DS1307 c c v ghi thng qua giao din ni tip
I2C (TWI ca AVR) nn cu to bn ngoi rt n gin. DS1307 xut hin 2 gi
SOIC v DIP c 8 chn nh trong hnh 1.
Hnh 5. S BCD.
Vi s 42, trc ht n c tch thnh 2 ch s (digit) 4 v 2. Mi ch s sau
c i sang m nh phn 4-bit. Ch s 4 c i sang m nh phn 4-bit l
0100 trong khi 2 c i thnh 0010. Ghp m nh phn ca 2 ch s li chng ta
thu c mt s 8 bit, l s BCD. Vi trng hp ny, s BCD thu c l
01000010 (nh phn) = 66. Nh vy, t s pht 42 cho DS1307 chng ta cn
ghi vo thanh ghi MINUTES gi tr 66 (m BCD ca 42). Tt c cc phn mm lp
trnh hay thanh ghi ca chip iu khin u s dng m nh phn thng thng,
khng phi m BCD, do chng ta cn vit cc chng trnh con quy i t s
thp nh phn (hoc thp phn thng) sang BCD, phn ny s c trnh by
trong lc lp trnh giao tip vi DS1307. Thot nhn, mi ngi u cho rng s
BCD ch lm vn n thm rc ri, tuy nhin s BCD rt c u im trong vic
hin th nht l khi hin th tng ch s nh hin th bng LED 7 on chng hn.
Quay li v d 42 pht, gi s chng ta dng 2 LED 7-on hin th 2 ch s
ca s pht. Khi c thanh ghi MINUTES chng ta thu c gi tr 66 (m BCD
ca 42), do 66=01000010 (nh phn), hin th chng ta ch cn dng phng
php tch bit thng thng tch s 01000010 thnh 2 nhm 0100 v 0010 (tch
bng ton t shift >> ca C hoc instruction LSL, LSR trong asm) v xut trc
tip 2 nhm ny ra LED v 0100 = 4 v 0010 =2, rt nhanh chng. Thm ch, nu
chng ta ni 2 LED 7-on trong cng 1 PORT, vic tch ra tng digit l khng
cn thit, hin th c s, ch cn xut trc tip ra PORT. Nh vy, vi s BCD,
vic tch v hin th digit c thc hin rt d dng, khng cn thc hin php
chia (rt tn thi gian thc thi) cho c s 10, 100, 1000nh trong trng hp s
thp phn.
Thanh ghi giy (SECONDS): thanh ghi ny l thanh ghi u tin trong b nh
ca DS1307, a ch ca n l 0x00. Bn bit thp ca thanh ghi ny cha m BCD
4-bit ca ch s hng n v ca gi tr giy. Do gi tr cao nht ca ch s hng
chc l 5 (khng c giy 60 !) nn ch cn 3 bit (cc bit SECONDS6:4) l c th
m ha c (s 5 =101, 3 bit). Bit cao nht, bit 7, trong thanh ghi ny l 1 iu
khin c tn CH (Clock halt treo ng h), nu bit ny c set bng 1 b dao
ng trong chip b v hiu ha, ng h khng hot ng. V vy, nht thit phi
reset bit ny xung 0 ngay t u.
Thanh ghi pht (MINUTES): c a ch 0x01, cha gi tr pht ca ng h.
Tng t thanh ghi SECONDS, ch c 7 bit ca thanh ghi ny c dng lu m
BCD ca pht, bit 7 lun lun bng 0.
Thanh ghi gi (HOURS): c th ni y l thanh ghi phc tp nht trong
DS1307. Thanh ghi ny c a ch 0x02. Trc ht 4-bits thp ca thanh ghi ny
c dng cho ch s hng n v ca gi. Do DS1307 h tr 2 loi h thng hin
th gi (gi l mode) l 12h (1h n 12h) v 24h (1h n 24h) gi, bit6
(mu green trong hnh 4) xc lp h thng gi. Nu bit6=0 th h thng 24h c
chn, khi 2 bit cao 5 v 4 dng m ha ch s hng chc ca gi tr gi. Do gi
tr ln nht ca ch s hng chc trong trng hp ny l 2 (=10, nh phn) nn 2
bit 5 v 4 l m ha. Nu bit6=1 th h thng 12h c chn, vi trng hp
ny ch c bit 4 dng m ha ch s hng chc ca gi, bit 5 (mu orangetrong
hnh 4) ch bui trong ngy, AM hoc PM. Bit5 =0 l AM v bit5=1 l PM. Bit 7
lun bng 0. (thit k ny hi d, nu di hn 2 bit mode v A-P sang 2 bit 7 v 6
th s n gin hn).
Thanh ghi th (DAY ngy trong tun): nm a ch 0x03. Thanh ghi DAY
ch mang gi tr t 1 n 7 tng ng t Ch nht n th 7 trong 1 tun. V th,
ch c 3 bit thp trong thanh ghi ny c ngha.
Cc thanh ghi cn li c cu trc tng t, DATE cha ngy trong thng (1 n
31), MONTH cha thng (1 n 12) v YEAR cha nm (00 n 99). Ch ,
DS1307 ch dng cho 100 nm, nn gi tr nm ch c 2 ch s, phn u ca nm
do ngi dng t thm vo (v d 20xx).
Ngoi cc thanh ghi trong b nh, DS1307 cn c mt thanh ghi khc nm
ring gi l con tr a ch hay thanh ghi a ch (Address Register). Gi tr ca
thanh ghi ny l a ch ca thanh ghi trong b nh m ngi dng mun truy cp.
Gi tr ca thanh ghi a ch (tc a ch ca b nh) c set trong lnh Write m
chng ta s kho st trong phn tip theo, AVR v DS1307. Thanh ghi a ch c
ti t trong hnh 6, cu trc DS1307.
List 1. myDS1307RTC.h.
(xem nh ngha dng 21), AVR ang bo cho DS1307 rng n mun c d liu
t DS1307. Qu trnh c c chia thnh 2 phn, trong phn 1 chng ta c len-1
bytes u tin (xem cc dng code t 88 n 92) v phn 2 c byte cui cng
(dng 94 n 96). Chng ta cn tch vic c byte cui ra v nu nhn li ch
c trnh by trong hnh 8, sau mi byte c c, Master phi gi 1 bit ACK n
DS1307, ring byte cui cng Master phi gi bit NOT ACK bo DS1307 rng
Master khng mun c thm (so snh 2 dng 89 v 94). Cui cng, Master gi
iu
kin
STOP
kt
thc
cuc
gi.
kim tra cc hm giao tip DS1307, hy to 1 Project bng WinAVR vi tn
gi DS1307RTC_Test, to file DS1307RTC_Test v vit code nh trong list 2.
List 2. DS1307RTC_Test.c.
5
( 23 Votes )
Ni dung
Cc bi cn tham kho t
1.
Gii thiu
C cho AVR.
2.
S lc v cng COM
UART
3.
4.
M phng vi Prot
Download v d
I. Gii thiu
Bi vit ny s ni v cch giao tip gia AVR v my tnh c nhn (PC) theo
mt cch n gin nhng kh ton din. N n gin v ti s dng mt giao din
kh c in giao tip gia AVR v PC, giao din RS232 thng qua cc cng
COM. Ton din v ti s hng dn cc bn t cch mc mch chuyn gia AVR
v PC, cch vit chng trnh giao tip theo chun RS232 trn my tnh v trn
AVR. C th bi ny bao gm:
- S lt s v chc nng cc chn cng COM trn my tnh.
- Mch chuyn kt ni AVR vi PC qua cng COM.
- To cng COM o trn PC cho mc ch m phng.
- S dng cc hm trong th vin xut nhp chun ca C nh printf, scanf
trong WinAVR.
- Vit chng trnh giao tip RS232 cho AVR.
- S dng Hyper Terminal ca Windows trong giao tip RS232.
- Vit chng trnh truy xut cng COM trn PC (Visual C++, Visual Basic)
II. S lc v cng COM
Cng COM hay cng ni tip (COM Port, Serial Port) l cng giao tip thuc
vo dng lo lng trn PC, c my tnh bn v Laptop. Ngy nay vi s xut
hin v bnh trng ca chun USB th cng COM (v c cng LPT hay cng
song song) ang dn bin mt. Giao tip thng qua cng COM l giao tip theo
chun ni tip RS232. Chun ny c tc kh chm nu em so snh vi USB.
Tuy nhin, vi dn robotics hay control th COM-RS232 li rt c a chung v
tnh n gin v cng vs chm chp ny. Cc cng COM trn cc my tnh
hin ti (nu c) a s l dng cng c 9 chn (male 9 pins). Tuy nhin, u
vn cn tn ti loi cng COM 25 chn, loi ny v hnh dng kh ging cng LPT
nhng l loi male trong khi cng LPT l female. Hnh 1 th hin 2 dng ca cng
COM v bng 1 tm tt chc nng cc chn ca cng ny.
Mun thc hin giao tip gia AVR v PC thng qua cng COM th hin nhin
bn cn c ci cng COM, ngoi ra bn cn t lm mt mch AVR v cu chuyn
Max232. Tht khng may l khng phi my tnh no cng c cng ny, nu bn
ch mun hc cch giao tip AVR-PC hoc ch mun kim tra mt gii thut no
th c l m phng l gii php c a thch hn. Cho mc ch m phng giao
tip RS232, Proteus li mt ln na hu ch khi cho php m phng truyn nhn
d liu vi cng COM. Nh th vn cn li l lm sao to cc cng COM o
trn my tnh v kt ni chng vi nhau thc hin m phng giao tip. Do tnh
cht ca cc cng COM l ch c m (open) 1 ln duy nht, ngha l 2 phn
mm khng th cng m 1 cng. tng ca chng ta l to ra 2 cng COM o
c ni cho sn vi nhau (v d COM2 v COM3). Trong phn mm Proteus
ng ra ca UART c ni vi COM2. Trong phn mm trn PC (v d Hyper
Terminal) chng ta kt ni vi COM3. Bng cch ny chng ta c th thc hin
giao tip gia AVR (m hnh Proteus) vi PC (phn mm Hyper Terminal).
C mt vi phn mm tt c kh nng to cng COM o v kt ni o gia
chng ng nh yu cu ca chng ta. Trong phn ny ti s gii thiu 2 phn
mm nh th, trong c 1 phn mm min ph (Virtual Serial Port Emulator) v 1
phn mm thu ph (Eltima Virtual Serial Port Driver).
Virtual Serial Port Emulator (VSPE): l mt phn mm to cng COM v kt
ni o tt ca Eterlogic. iu c bit l phin bn dnh cho Windows 32 bits hon
ton min ph, v vy y l phn mm u tin bn phi khi mun to dng
cho mc ch hc tp.
Trc tin bn hy download phn mm VSPE bn mi nht ti website chnh
thc ca Eterlogic:http://www.eterlogic.com/Products.VSPE.html (nhn vo nt
Download pha cui trang web). Gii nn file zip v chy file SetupVSPE.exe
ci t. Sau khi ci t hy tm v chy chng trnh VSPE. Giao din ca VSPE
nh trong hnh 4.
trong hnh 6. Sau nhn next, chn 2 cng COM o to lc trc v nhn vo
nt Finish.
mnh:
5
( 15 Votes )
Ni dung
Bi 1
Cc bi cn tham kho
C cho AVR.
1.
RS232 Terminal
UART
2.
TextLCD
Download v d
M phng vi Pro
OK. Trong hp thoi tip theo, Connect to, hy chn cng COM m bn mun
giao tip, v nhn OK. Cui cng l hp thoi COM Properties cho php bn thit
lp cc thng s giao tip nh Baudrate, Parity bit, Stop bit nh trong hnh 11, ch
hy chn Flow control l "none"v nhn OK.
cht l mt dng giao tip my tnh bng cng COM, dnh cho trng hp bn
cha c mch AVR tht. Mu cht nm thit b COMPIM trong Proteus.
COMPIM thc cht l m hnh cng COM tn ti trn my tnh ca bn. Trong
trng hp ny chng ta dng Eltima VSPE (hoc VSPD) to 2 cng COM o
trn my tnh l COM2 v COM3, chng c u cho vi nhau. Chng ta set
COMPIM trong Proteus l COM2 trong khi cng trn Hercules l COM3. Khi
chy m phng, AVR s gi d liu ra COMPIM (tc COM2), COM2 truyn n
COM3 v hin th trn Hercules. Chng ta c th t vit cc chng trnh trn
Windows nhn v gi gi tr qua COM thay cho Hercules. Trong phn tip theo
ti s hng dn bn to chng trnh nh th.
Vit code:
Mc ch ca v d ny nh sau: d liu nhn v t cng COM s hin th trn
textbox txtOutput, v khi ngi dng type 1 k t vo txtInput k t s c
truyn i qua cng COM.
Trc ht, hy doubleclick vo form chnh, vit on code sau vo s kin
Form_Load():
2. Vit chng trnh giao tip cng COM bng Visual C++ 6.0
Phn ny chng ta s thc hin mt v d truyn nhn qua cng COM tng t
nh v d phn trn nhng s dng Visual C++ (VC++) ca Microsoft. Mc ch
chnh l hng dn cch s dng MSComm trong VC++, v th ti s trnh by rt
s si nhng phn nh to Project trong VC++. Bn c cn t trang b thm kin
thc v lp trnh VC++. Mt trong nhng ti liu rt hay cho ngi mi hc lp
trnh VC l Teach Yourself Visual C++ 6 in 21 Days ca Sams Teach
Yourself, bn c th tm c nu thy cn thit.
T VC++ hy vo menu File/New to 1 Project mi. Chn loi Project l
MFC AppWizard (exe), trong Project Name t tn cho Project l AVR_PC,
nhn OK. Trong hp thoi th 2 hy chn Dialog based cho loi Project, v nhn
Finish to Project (cc bc khc mc nh).
Nm dng code trn tng ng vi 5 dng trong phn Form_Load() khi vit
Project bng VB m chng ta kho st trn, v th ti khng cn gii thch
thm cho cc dng code ny.
Tip theo chng ta s vit code cho s kin onComm (ngt nhn) ca control
MSComm, trc khi vit code hy nhnCtrl+W hin hp thoi ClassWizard v
thc hin 6 bc nh trong hnh 22 thm s kin onComm vo Project.
Khi ngi dng type 1 k t no vo Edit box, s kin onChange xy ra, khi
chng ta s trch k t cui cng trong ni dung ca Edit box bn di m i
din l bin m_txtInput bng dng lnh 11: tmpStr=m_txtInput.Right(1).Trong
tmpStr l mt bin tm khai bo dng 9. Ch rt quan trong khi mun c
ni dung ca Edit box chng ta cn gi hm UpdateData vi tham s TRUE trc
nh trong dng 10. Sau cng, gi phng phng thc SetOutput ca i tng
MSComm gi gi tr ra cng
COM: m_comm.SetOutput(COleVariant(tmpStr)). gi mt k t (hay chui
k t) ra cng COM trc ht chng ta cn p kiu k t v COleVariant v
nh trnh by, MSComm ch lm vic vi COleVaraint.
on COleVariant(tmpStr) thc hin vic p kiu ny.
Sau khi vit xong on code cho s kin onChange bn c th nhn t hp
phm Ctrl+F5 chy chng trnh. Dng mch
in AVR_STD_Terminal.DSN v chy m phng nh trong phn lp trnh vi
VB. Kt qu thu c s nh trong hnh 24.
C cho AVR
5
( 109 Votes )
Ni dung
1.
Lm quen AVR.
2.
Cu trc AVR.
3.
V d minh ha.
WinAVR.
khong duoc bien dich hoc ch thch block bng cch kp block cn ch thch vo
gia /* .*/ v d:
/*
Ban co the type bat ky chu thich nao trong block nay
Ngay ca khi ban xuong dong
Phan chu thich thuong co mau chu la green
*/
Tin x l (preprocessor): l mt tin ch ca ngn ng C, cc preprocessor
c trnh bin dch x l trc tt c cc phn khc, cc preprocessor c chc
nng tng t cc Directive trong ASM cho AVR.Cc preprocessor c bt u
bng du #, trong s cc preprocessors trong ngn ng C c hai preprocessors
c s dng ph bin nht l#include v #define. Preprocessor #include ch nh
1 file c nh km trong qu trnh bin dch (tng ng .INCLUDE trong
ASM) v #define nh ngha 1 chui thay th hoc 1 macro. Xem cc v d sau:
#include "avr/io.h" *nh km ni dung file io.h trong lc bin dch (file io.h
nm trong th mc con avr ca th mc include trong th mc ci t ca
WinAVR).*/
#define max (a,b) ((a)>(b)? (a): (b)) /*nh ngha mt macro tm s ln nht
trong 2 s a v b, trong chng trnh nu bn gi x=max(2,3) th kt qu thu
c x=3.*/
Biu thc (Expressions): l 1 phn ca cc cu lnh, biu thc c th bao
gm bin, ton t, gi hm, biu thc tr v 1 gi tr n. Biu thc khng phi
l 1 cu lnh hon chnh. V d: PORTB=val.
Cu lnh (Statement): thng l 1 dng lnh hon chnh, c th bao gm cc
keywords, biu thc v cc cu lnh khc v c kt thc bng du ;. V d:
unsigned char val=1; val*=2; l cc cu lnh.
Khi (Blocks): l s kt hp ca nhiu cu lnh thc hin chung 1 nhim
v no , khi c bao bi 2 du m khi { v ng khi }: v d 1 khi:
while(1){
PORTB=val;
_delay_loop_2(65000);
val*=2;
if (!val) val=1;
}
}else {
Statement1;
Statement2;
}
Ngoi ra, bn cng c th t nhiu cu trc ifelse lng vo nhau.
Cu trc switch: trong trng hp c nhiu kh nng c th xy ra cho 1 biu
thc (hay 1 bin), ng vi mi kh nng bn cn chng trnh thc hin mt vic
no , khi ny bn nn s dng cu trc switch. Cu trc ny c trnh by nh
bn di.
switch (biu thc) {
case hng_s_1:
cc statement1;
break;
case hng_s_2:
cc statement2;
break;
default:
cc statement khc;
}
Hy xt 1 v d bn kt ni 2 chip AVR vi nhau, 1 chip lm Master s ra cc
lnh iu khin chip Slave, chip Slave nhn m lnh t Master v thc hin cc
cng vic c tho hip trc. Gi s m lnh c lu trong bin Command,
di y l chng trnh v d cch x l ca chip Slave ng vi tng m lnh.
switch (Command) {
case 1:
PWM=255;
ON_Motor();
break;
case 2:
PWM=0;
OFF_Motor();;
break;
default:
Get_Cmd();
break;
}Ngoi ra, bn cng c th t nhiu cu trc ifelse lng vo nhau.
Nu Command=1, gn gi tr 255 cho bin PWM v gi chng trnh con
ON_Motor(). Trong trng hp ny, break c s dng, break ngha l thot khi
cu trc iu khin hin ti ngay lp tc, nh vy sau khi thc hin 2 lnh, switch
kt thc m khng cn xt n cc trng hp khc. By gi, nu Command=2,
gn gi tr 0 cho bin PWM v gi chng trnh con OFF_Motor(), trong tt c cc
trng hp cn li (default), thc hin chng trnh con Get_Cmd().
while (iu kin ) statement1;: l mt cu trc lp (Loop), ngha ca cu
trc while l khi iu kin cn ng th s thc hin statement1 (hoc cc
statements nu chng c t trong 1 khi {} nh trong trng hp ca if c
gii thiu trn). Cn thn, bn rt d ri vo mt vng lp khng li thot vi
while nu iu kin lun lun ng.
for (biu_thc_1; biu_thc_2; biu_thc_3) statement;: l mt cu trc
lp khc, trong cu trc for, biu_thc_1 thng c hiu l khi to,
biu_thc_2 l iu kin v biu_thc_3 l biu thc c thc hin sau. Cu trc
for ny tng ng vi cu trc while sau:
biu_thc_1;
while (biu_thc_2){
statement;
biu_thc_3;
}
Cc biu thc trong cu trc for c th vng mt trong cu trc nhung cc
du ; th khng c b. Nu bn vit for( ; ; ) tng ng vi vng lp v tn
while (1).
Cu trc for thng c dng thc hin 1 hay nhng cng vic no
trong s ln no , v d bn di thc hin xut cc gi tr t 0 n 200 ra
PORTB, sau mi ln xut s gi lnh delay trong 65000 chu k my.
for (uint8_t i=0; i<=200; i++){
PORTB=i;
_delay_loop_2(65000);
}
Ch , bn c th thc hin vic khai bo 1 bin (xem phn khai bo bin bn
di) ngay trong cu trc for nu bin ln u c s dng. V d trn c hiu
nh sau: khai bo 1 bin i kiu byte khng m, gn gi tr khi u cho i=0 (ch
thc hin 1 ln duy nht), kim tra iu kin i<=200 (nh hn hoc bng 200), nu
iu kin cn ng, thc hin 2 statements trong block {}, sau quay v thc
hin i++ (tng i thm 1) ri li kim tra iu kin i<=200 v qu trnh lp li. Nh
th on code trong {} c thc thi khong 201 ln trc khi bin i bng 201 v
iu kin i<=200 sai.
2.2 Hm (Functions).
Ngn ng C bao gm tp hp ca rt nhiu hm, mi hm thc hin mt chc
nng c th, cc hm trong C thng c thit kt rt nh gn, c cc hm
phc tp ngi dng cn t to ra. Hm C cho AVR c nh ngha trong th vin
avr-libc, ngoi cc hm C thng thng, avr-libc cn cha rt nhiu cc hm ring
dng ring cho chip AVR, cc hm ny c khai bo trong cc file header ring,
s dng hm no, bn cn #include file header tng ng (tham kho ti liu
avr-libc user manual bit thm chi tit, trong ti liu ny, khi cn s dng mt
hm no ti s ni r file header cn thit).
V d: _delay_loop_2(65000) l mt hm c nh ngha trong file delay.h
(trong th mc C:\WinAVR\avr\include\util), hm ny thc hin vic delay khong
65000 chu k my. C 4 hm delay bn c th s dng sau khi include file l:
//file: main.c
//Description: Cung hoc avr, www.hocavr.com
#include <avr/io.h>
#include <util/delay.h>
unsigned char val=1;
int main(void){
7
8
9
10
11
12
13
14
15 }
char
unsigned char
0 to 255
signed char
127 to 127
int
32,767 to 32,767
unsigned int
0 to 65,535
signed int
Nh kiu int
short int
Nh kiu int
0 to 65,535
long int
2,147,483,647 to 2,147,483,647
0 to 4,294,967,295
float
6 digits of precision
double
10 digits of precision
long double
12
10 digits of precision
Mt s kiu d liu thng dng nht l char (1 byte), int (2 byte) v float. T
kha unsigned c thm trc 1 kiu d liu nguyn ch nh cc s nguyn
dng, khi khong gi tr nguyn s c tng ln gn 2 ln. V d char ch cc
s nguyn t -127 n 127 thng c dng ch m ASCII ca cc k t trong
bng m ASCII, nhng unsigned char s bao gm cc s nguyn dng t 0 n
255 v thng c dng khi lm vic vi cc thanh ghi 8 bit.
Ngoi ra, avr-libc cn nh ngha mt s kiu d liu thay th, chng ta c th
dng cc kiu d liu ny thay cho cc kiu thng thng, xem tm tt nh bn
di.
Mt khai bo uint8_t val tng ng usigned char val, s dng kiu khai
bo no l do thi quen ca ngi s dng. Ch l theo mc nh, mt bin mi
c khai bo theo cch thng thng nh trn s c t trong SRAM, nh cc
bn bit SRAM trong AVR tng i nh v th nn khai bo v s dng hp l
bin, ng khai bo qu nhiu bin nu bn khng s dng ht, ng khai bo kiu
bin qu ln so vi gi tr tht s dng, tuy nhin cng khng c khai bo kiu
d liu c kch thc qu nh so vi gi tr m bin c th vn ti. S dng b
nh chng trnh (flash program memory) lu tr d liu khng i l mt k
thut khc tit kim b SRAM, ti s cp vn ny trong 1 bi khc.
5
( 31 Votes )
Ni dung
1.
2.
3.
4.
Cc bi cn tham kh
Lm quen AVR.
Cu trc AVR
WinAVR
K: hng s.
A: a ch I/O.
- MOV (MOVE).
C php: CLR Rd
C php: SER Rd
Chc nng: set tt c cc bit tronh thanh ghi Rd ln 1, sau lnh ny thanh ghi
Rd=0xFF.
V d:
SET ; set bit T ln 1
BLD R16, 4
Kt qu l bit 4 ca thanh ghi R16 c set ln 1 v gi tr ca bit T l 1.
- BST (Bit Storage from T Flag).
Chc nng: Copy bit th b trong thanh ghi Rd vo trong c T ca thanh ghi
SREG. y cng chnh l chc nng chnh ca c T.
V d:
LDI R16, 10
CPI R16, 10
Kt qu l c Z c set thnh 1 v lc ny R16 =10.
- ANDI (AND with Immediate).
Chc nng: thc hin php Logic AND gia thanh ghi Rd vi hng s K v
kt qu t li trong Rd.
Chc nng: thc hin php Logic AND gia 2 thanh ghi Rd v Rr , kt qu
t li trong Rd.
V d:
LDI R1, 0xFF ;(11111111)
LDI R17, 0xAA; (10101010)
AND R1, R17
Kt qu l R1=0xAA v 11111111 & 10101010 =10101010.
- ORI (Logical OR with Immediate).
Chc nng: thc hin php Logic OR gia thanh ghi Rd vi hng s K v
kt qu t li trong Rd.
C php: OR Rd, Rr
V d:
LDI R1, 0xFF ;(11111111)
LDI R17, 0xAA; (10101010)
OR R1, R17
Kt qu l R1=0xFF v 11111111 or 10101010 =11111111.
- LSL (Logical Shift Left).
C php: LSL Rd
Chc nng: dch tt thanh ghi Rd sang tri 1 v tr, Bit 7 (bit ln nht) ca
Rd s c cha trong c nh C, bit 0 ca Rd b xa thnh 0. Thc cht LSL tng
ng vi php nhn thanh ghi Rd vi 2. Bn xem hnh minh ha bn di.
V d:
LDI R1, 0B11000011 ; (dng nh phn ca 195)
LSL R1
Kt qu l R1=10000110 v c C =1 v thanh ghi R1 c dch sang tri 1 v tr,
trc khi dch bit 7 ca R1 l 1 nn sau khi dch bit ny c cha trong C, cho
nn C=1.
- LSR (Logical Shift Right).
C php: LSR Rd
Chc nng: dch tt thanh ghi Rd sang phi 1 v tr, Bit 0 (bit nh nht) ca
Rd s c cha trong c nh C, bit 7 ca Rd b xa thnh 0. Thc cht LSR
tng ng vi php chia thanh ghi Rd cho 2. Bn xem hnh minh ha bn di.
V d:
LDI R1, 0B11000110 ; (dng nh phn ca 195)
LSR R1
V d:
LDI R16, 30
LDI R17, 25
ADD R16, R17
Kt qu l R16=55.
- INC (INCrement).
C php: INC Rd
V d:
LDI R16, 30
LDI R17, 25
SUB R16, R17
Kt qu l R16=5.
- SUBI (SUBtract Immediate).
V d:
LDI R16, 30
SUBI R16, 20
Kt qu l R16=10.
- DEC (DECrement).
C php: DEC Rd
Chc nng: thc hin php nhn khng du 2 thanh ghi 8 bit Rd, Rr, kt qu
l 1 s 16 bit t trong 2 thanh ghi R1:R0. Ch nu Rd v Rr l cc thanh ghi R1
v R0 th kt qu sau khi tnh c s c vit ln. Xem hnh minh ha
instruction MUL bn di.
V d:
LDI R16, 30
LDI R17, 25
C php: OUT A, Rr
V d:
LDI R16, 0xFF
OUT 0x11, R16
Kt qu l thanh ghi c a ch 0x11 trong vng I/O, tc thanh ghi DDRD, c gi
tr bng 0xFF.
- IN (INPUT Data).
C php: IN Rr, A
V d:
IN R16, 0x10
Kt qu l thanh ghi R16 nhn c gi tr ca thanh ghi c a ch 0x11 trong
vng I/O, tc thanh ghi PIND, y chnh l v d c gi tr cc chn ca PORTD
vo R16.
- SBI (Set Bit in I/O Register).
C php: SBI A, b
Chc nng: Set bit th b trong thanh ghi c a ch A trong vng nh I/O.
Tuy nhin lnh ny khng c tc dng trn ton b vng I/O m ch c tc i vi
32 thanh ghi u (a ch t 0 n 31).
V d:
SBI 0x12, 2
Kt qu l bit 2 ca thanh ghi c a ch 0x12 trong vng I/O, tc thanh ghi
PORTD, c set ln 1. y chnh l v d set chn PD2 ca PORTD.
- CBI (Clear Bit in I/O Register).
C php: CBI A, b
V d:
CBI 0x12, 2
Kt qu l bit 2 ca thanh ghi c a ch 0x12 trong vng I/O, tc thanh ghi
PORTD, b xa thnh 0. y chnh l v d xa chn PB2 ca PORTD.
III. Cc con tr X, Y, Z v cch truy cp ton b khng gian b nh.
Trong Register File ca AVR, cc thanh ghi t R26 n R31ngoi cha nng
thanh ghi thng thng cn c chc nng l con tr (Pointer) trong vic truy cp
b nh (c b nh data v b nh Program). Nu c s dng nh cc Pointer,
cc thanh ghi trn c bit n vi tn gi X, Y, Z. nh ngha nh sau:
X=R27:R26, Y=R29:R28, Z=R31:R30. Chng l 3 thanh ghi 16 bit c nh
ngha trc cho tt c cc AVR. Ngoi ra trong cc file nh ngha cho chip chng
ta c thm 6 nh ngha khc l XL, XH, YL, YH, ZL, ZH cng chnh l tn gi
ca R26-> R31. Phn ny chng ta kho st mt s instruction dng truy cp ton
b khi nh ca AVR bng cch s dng a ch trc tip v bng cch s dng
Pointer.
- LDS (LoaD direct from data Space).
V d:
LDS R2, 0x0060
Kt qu l thanh ghi R2 cha gi tr ca thanh ghi c a ch 0x0060, y l thanh
ghi u tin trong khong SRAM (sau RF v vng I/O) ca AVR.
- STS (STorage direc to data Space).
C php: STS k, Rr
Chc nng: instruction ny hon ton ging LDS nhng dng xut d
liu t thanh ghi Rr ra RAM, ngi c c th tham kho phn gii thch cho LDS.
S dng a ch trc tip th cu lnh s n gin nhng rt kh nh phn a ch,
thng thng SRAM l vng chng ta hay s dng cha bin tm thi, trong
cc ngn ng cp cao ta ch cn nh tn bin nhng vi ASM chng ta phi nh
a ch ca chng. Mt cch tt trnh vic ny l dng ch th (DIRECTIVE,
bn xem li bi 1) . EQU gn tn bin cho 1 a ch, v d .EQU bientam =
0x0060 v sau s dng bientam thay cho 0x0060.
Mt cch khc c dng truy cp b nh m khng dng a ch tuyt i l
s dng s dng con tr. C 2 instruction h tr con tr l LD(LoaD indirec from
data Space), v ST (STorage indirec to data Space), LD c d liu t SRAM vo
thanh ghi cn ST lu d liu t thanh ghi vo SRAM. C 3 con tr X, Y v Z u
c th c dng nhng c mt s im lu : c 3 u dng c trong trng
hp truy xut thng thng nhng vi cch truy cp c offset, con tr X khng s
dng c. truy xut b nh chng trnh bng con tr th Z l gii php duy
nhtDi y l 1 s cch s dng LD, ST kt hp vi con tr, chng ta xt
thng qua cc v d.
V d 1:
V d:
LDI R16, 0xFF
LDI R17, 0xFF
CP R16, R17 ; so sanh 2 thanh ghi R16, R17
BREQ RENHANH
..
RENHANH:
; thc hin nhng vic khi r nhnh.
Kt qu l vic r nhnh xy ra v khi so snh bng CP, R17=R16 nn c Z t
ng c set bng 1, lnh BREQ c thc thi v nhy n nhn RENHANH. V
d ny tng ng cu trc if (R16=R17) {thc hin nhng vic khi r nhnh}.
- BRLO (BRanch if LOwer).
V d:
EOR R16, R16 ;XOR R16 vi chnh n, tng ng CLR R16
VONG LAP:
V d:
SUBI R16, 4 ;tr R16 i 4 n v
BRSH RENHANH ; nhy n RENHANH nu R16 4
.
RENHANH:
NOP
5
( 40 Votes )
Ni dung
1.
2.
Lm quen AVR.
Download AVRStudio
Trong bi ny ti hng dn cch s dng b cng c AVRStudio to cc
Project lp trnh bng ngn ng Assembly v C. Ti s dng v d chng trnh
qut LED bi 1 minh ha cho c 2 cch to mt Project Assembly v C.
I. Lp trnh Assembly bng AVRStudio.
Vic ci t AVRStudio tng i n gin. Bn hy download bn mi nht
ca phn mm ny t website Atmelhoc bn 4.623 ti y (hoc mt mirror
khc) v ci t vo my. Theo mc nh, chng trnh s c ci vo a C
ti: C:\Program Files\Atmel\AVR Tools.
Bt u vi AvrStudio4: bn chy AvrStudio t Start/ All Programs/ Atmel
AVR Tools/ AvrStudio 4. ln u chy AvrStudio, 1 dialog Welcome to
AvrStudio 4 xut hin, hy b check show dialog at Startup v nhn cancel.
Hnh 6. Ca s lp trnh.
Vic cn li l vit code vo ca s Editor sau dch chng trnh bng
phm F7.
II. Lp trnh C bng AVRStudio.
V bn cht AVRStudio khng h tr lp trnh ngn ng C v khng c trnh
dch C. Tuy nhin n cho php tch hp trnh dch C ca b cng c WinAVR. V
th, nu mun s dng AVRStudio lp trnh C cho AVR bn phi ci t trnh
dch v th vin avr-gcc t GNU hoc n gin l ci t WinAVR cng
AVRStudio. Bn tham kho thm bihng dn WinAVR bit cch download
ci t WinAVR. Cc hng dn bn di gi s rng bn ci t thnh cng
AVRStudio v WinAVR.
Vic to 1 Project lp trnh bng ngn ng C trong AVR Studio khng khc
my so vi vic to Project ASM. iu duy nht cn ch l bc chn trnh bin
dch. Xem li hnh 4 khi to Project ASM, chng ta chn Atmel AVR Assempler
lm trnh dch chnh, to Project C chng ta chn AVR GCC lm trnh bin dch
nh trong hnh 7. Cn lu l trnh dch AVR GCC ch xut hin trong danh sch
la chn ca AVR Studio khi bn ci WinAVR vo my trc .
tp (Editor) ca AVR Studio cng gip bn vit code thun tin hn Programmer
notepad.