Professional Documents
Culture Documents
Idoc - VN Do An Lap Trinh Pic16f877a Dieu Khien Toc Do Dong Co DC
Idoc - VN Do An Lap Trinh Pic16f877a Dieu Khien Toc Do Dong Co DC
TI
Lp trnh PIC16F877A
iu khin tc
ng c DC
n 2
MC LC
n 2
2/ S nguyn l mch:
VCC
LCD1
R1
R2
R3
R4
5k
5k
5k
5k
FW(16)
RV(15)
STOP (14)
7
8
9
10
a4 11
a5 12
a6 13
a7 14
b0 4
b1 5
b2 6
RV1
1
2
3
0 (10)
CLEAR (11)
D0
D1
D2
D3
D4
D5
D6
D7
RS
RW
E
VSS
VDD
VEE
16_X_2_LCD
13
p0
p1
p2
p3
1K
set (12)
C1
+12V
+12V
30pF
VCC
2
3
4
5
6
7
8
9
10
R5
R9
2k2
10k
RESET
OSC1/CLKIN
OSC2/CLKOUT
RB0/INT
RB1
RB2
RA0/AN0
RB3/PGM
RA1/AN1
RB4
RA2/AN2/VREF-/CVREF
RB5
RA3/AN3/VREF+
RB6/PGC
RA4/T0CKI/C1OUT
RB7/PGD
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RC1/T1OSI/CCP2
RE1/AN6/WR
RC2/CCP1
RE2/AN7/CS
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
C3
10uF
PIC16F877A
15
16
17
18
23
24
25
26
CLK
9
J3
CCP1
CCP2
5
7
10
12
6
11
CCP2
CCP1
5
4
3
2
1
CLK
SIL-100-05
19 b2
20 b0
21 b1
22
27 a4
28 a5
29 a6
30 a7
1
15
VS
OUT1
OUT2
OUT3
SENSA
SENSB GND
R1
R2
0.5
0.5
U1
IN1 VCC
IN2
IN3
IN4
ENA
ENB
OUT4
M1
CLK
M1
13
M2
M2
14
+88.8
L298
U2
+12V
D21N4007
p0
p1
p2
p3
D31N4007
CRYSTAL
D11N4007
X1
33
34
35
36
37
38
39
40
D41N4007
C2
U1
13
14
+5V
7805
J1
JACK
3
2
1
VI
VO
R26
C5
100uF
100nF
J2
1k
GND
C4
30pF
C6
C7
100uF
100nF
D8
LED
2
1
TERMINAL2
n 2
4/ Khuyt im ca mch:
-Do khng p dng cc phng php iu khin (v d nh: PID, iu khin m,)
nn tc ng c cha c n nh.
-Mch cu H s dng IC L298 ch iu khin c ng c DC c cng sut nh.
-i vi khi hin th, do tnh cht ca mn hnh LCD nn b hn ch quan st gi tr
hin th khong cch xa.
n 2
CHNG II:
GII THIU V CC LINH KIN PHN T S DNG TRONG MCH
n 2
n 2
n 2
n 2
S nguyn l
c/Nhn xt:
T s chn v s nguyn l trn, ta rt ra cc nhn xt ban u nh sau :
-
PIC16F877A c tt c 40 chn
n 2
+ PORT E: 3 chn
2. T chc b nh:
Cu trc b nh ca vi iu khin PIC16F877A bao gm b nh chng trnh
(Program memory) v b nh d liu (Data Memory).
2.1. B nh chng trnh:
B nh chng trnh ca vi iu khin PIC16F877A l b nh flash, dung lng b
nh 8K word (1 word = 14 bit) v c phn thnh nhiu trang (t page0 n page 3) .
Nh vy b nh chng trnh c kh nng cha c 8*1024 = 8192 lnh (v mt lnh
sau khi m ha s c dung lng 1 word (14 bit). m ha c a ch ca 8K word
b nh chng trnh, b m chng trnh c dung lng 13 bit (PC<12:0>).
Khi vi iu khin c reset, b m chng trnh s ch n a ch 0000h (Reset
vector).Khi c ngt xy ra, b m chng trnh s ch n a ch 0004h (Interrupt
vector). B nh chng trnh khng
bao gm b nh stack v khng c
a ch ha bi b m chng trnh.
2.2. B nh d liu:
-
B nh d liu ca PIC16F877A
Nu nh 2 bank b nh d liu
ca 8051 phn chia ring bit :
128 byte u tin thuc bank1 l
vng Ram ni ch cha d
liu, 128 byte cn li thuc bank
2 l cng cc thanh ghi c chc
nng c bit SFR m ngi
dng khng c cha d liu
khc, cn 4 bank b nh d liu
ca PIC16F877A c t chc
theo cch khc.
10
n 2
11
n 2
2.2a/ Thanh ghi chc nng c bit SFR: (Special Function Register)
-
12
n 2
Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh): thanh ghi cho php c v
,cha cc bt iu khin v cc c hiu khi timer0 b trn, ngt ngoi vi
RB0/INT v ngt interrput-on-change ti cc chn ca PORTB.
Thanh ghi PIE1 (8Ch): cha cc bit iu khin chi tit cc ngt ca cc khi
chc nang ngoai vi.
Thanh ghi PIR1 (0Ch) cha c ngt ca cc khi chc nng ngoi vi, cc ngt
ny c cho php bi cc bit iu khin cha trong thanh ghi PIE1.
Thanh ghi PIE2 (8Dh): cha cc bit iu khin cc ngt ca cc khi chc
nng CCP2, SSP bus, ngt ca b so snh v ngt ghi vo b nh EEPROM.
Thanh ghi PCON (8Eh): cha cc c hiu cho bit trng thi cc ch reset
ca vi iu khin.
2.2b/ Thanh ghi muc ch chung GPR: (General Purpose Register)
Cc thanh ghi ny c th c truy xut trc tip hoc gin tip thng qua thanh ghi
FSG (File Select Register).y l cc thanh ghi d liu thng thng, ngi s dng
c th ty theo mc ch chng trnh m c th dng cc thanh ghi ny cha cc
bin s, hng s, kt qu hoc cc tham s phc v cho chng trnh.
nh c bit khng cho php c hay ghi. Khi lnh CALL c thc hin hay khi mt
ngt xy ra lm chng trnh b r nhnh, gi tr ca b m chng trnh PC t ng
c vi iu khin ct vo trong stack. Khi mt trong cc lnh RETURN, RETLW hat
RETFIE c thc thi, gi tr PC s t ng c ly ra t trong stack, vi iu khin
s thc hin tip chng trnh theo ng qui trnh nh trc.
-
13
n 2
c khi no stack trn. Bn cnh tp lnh ca vi iu khin dng PIC cng khng
c lnh POP hay PUSH, cc thao tc vi b nh stack s hon ton c iu khin
bi CPU.
3. Khi qut v chc nng ca cc port trong vi iu khin PIC16F877A
a/ PORTA:
-PORTA (RPA) bao gm 6 I/O pin.y l cc chn hai chiu (bidirectional
pin), ngha l c th xut v nhp c.Chc nng I/O ny c iu khin bi thanh
ghi TRISA (a ch 85h). Mun xc lp chc nng ca mt chn trong PORTA l
input, ta set bit iu khin tng ng vi chn trong thanh ghi TRISA v ngc
li, mun xc lp chc nng ca mt chn trong PORTA l output, ta clear bit iu
khin tng ng vi chn trong thanh ghi TRISA. Thao tc ny hon ton tng t
i vi cc PORT v cc thanh ghi iu khin tng ng TRIS (i vi PORTA l
TRISA, i vi PORTB l TRISB, i vi PORTC l TRISC, i vi PORTD l
TRISD vi vi PORTE l TRISE).
-Ngoi ra, PORTA cn c cc chc nng quan trng sau :
Ng vo Analog ca b ADC : thc hin chc nng chuyn t Analog
sang Digital
Ng vo in th so snh
Ng vo xung Clock ca Timer0 trong kin trc phn cng : thc hin
cc nhim v m xung thng qua Timer0
Ng vo ca b giao tip MSSP (Master Synchronous Serial Port)
- Cc thanh ghi SFR lin quan n PORTA bao gm:
PORTA (a ch 05h)
TRISA (a ch 85h)
CMCON (a ch 9Ch)
CVRCON (a ch 9Dh)
ADCON1 (a ch 9Fh)
14
n 2
b/PORTB:
-
PORTB (RPB) gm 8 pin I/O. Thanh ghi iu khin xut nhp tng ng l
TRISB.
15
n 2
4. Cc vn v Timer
PIC16F877A c tt c 3 timer : timer0 (8 bit), timer1 (16 bit) v timer2 (8 bit).
4.1. Timer0
a/ L b nh thi hoc b m c nhng u im sau:
8 bit cho b nh thi hoc b m.
C kh nng c v vit.
C th dng ng bn trong hoc bn ngoi.
C th chn cnh xung ca xung ng h.
C th chn h s chia u vo (lp trnh bng phn mn).
Ngt trn.
b/ Hot ng ca Timer 0:
Timer 0 c th hot ng nh mt b nh thi hoc mt b m.Vic chn b
nh thi hoc b m c th c xc lp bng vic xo hoc t bt TOCS
ca thanh ghi OPTION_REG<5>.
Nu dng h s chia xung u vo th xo bit PSA ca thanh ghi
OPTION_REG<3>.
Trong ch b nh thi c la chn bi vic xo bit T0CS (OPTION
REG<5>), n s c tng gi tr sau mt chu k lnh nu khng chn h s
chia xung u vo.V gi tr ca n c vit ti thanh ghi TMR0.
Khi dng xung clock bn ngoi cho b nh thi Timer0 v khng dng h s
chia clock u vo Timer0 th phi p ng cc iu kin cn thit c th
hot ng l phi bo m xung clock bn ngoi c th ng b vi xung
clock bn trong (TOSC).
H s chia dng cho Timer 0 hoc b WDT. Cc h s nay khng c kh nng
c v kh nng vit. chn h s chia xung cho b tin nh ca Timer0
16
n 2
c/ Ngt ca b Timer0
Ngt ca b Timer 0 c pht sinh ra khi thanh ghi TMR0 b trn tc t
FFh quay v 00h.Khi bt T0IF ca thanh ghi INTCON<2> s c t.
Bt ny phi c xa bng phn mm nu cho php ngt bit T0IE ca
thanh ghi INTCON<5> c set.Timer0 b dng hot ch SLEEP
ngt Timer 0 khng nh thc b x l ch SLEEP.
d/ Cc thanh ghi lin quan n Timer0 bao gm:
-
17
n 2
Timer0
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
WDT
1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128
18
n 2
19
n 2
20
n 2
21
n 2
b/ Hot ng ca b Timer2
-
1111=1:16
- bit 2 TMR2ON bit bt tt hot ng Timer 2
1= enable
0= disable
- bit 1- 0 T2CKPS1:T2CKPS0 chn h chia u vo
00 = 1:1
01 = 1:4
1x=1:16
5. NGT (INTERRUPT):
- PIC16F877A c n 14 ngun to ra hot ng ngt c iu khin bi thanh ghi
INTCON (bit GIE). Bn cnh mi ngt cn c mt bit iu khin v c ngt
SVTH: Trn Tng Bng
V Vn Chnh
22
n 2
trnh c ct vo trong Stack, trong khi mt s thanh ghi quan trng s khng c
ct v c th b thay i gi tr trong qu trnh thc thi chng trnh ngt.iu ny nn
c x l bng chng trnh trnh hin tng trn xy ra.
-
23
n 2
24
n 2
ngt c th l cnh ln hay cnh xung v c iu khin bi bit INTEDG (thanh ghi
OPTION_ REG <6>). Khi c cnh tc ng thch hp xut hin ti pin RB0/INT, c
ngt INTF c set bt chp trng thi cc bit iu khin GIE v PEIE. Ngt ny c
kh nng nh thc vi iu khin t ch sleep nu bit cho php ngt c set trc
khi lnh SLEEP c thc thi.
-
Thanh ghi ny cho php iu khin chc nng pull-up ca cc pin trong PORTB, xc
lp cc tham s v xung tc ng, cnh tc ng ca ngt ngoi vi RB0 (External
Interrupt) v b m Timer0.
25
n 2
26
n 2
T1CKPS1:T1CKPS0
00
01
10
11
t l chia u vo
1:1
1:2
1:4
1:8
6.1. iu ch PWM l g?
Phng php iu ch rng xung PWM (Pulse Width Modulation) l phng php
iu chnh in p ra ti hay ni cch khc l phng php iu ch da trn s thay
i rng ca chui xung kch iu khin linh kin ng ngt (SCR hay
Transistor) dn n s thay i in p ra ti.
27
n 2
NGUON
Q1
Q1(B)
NPN
TAI
28
n 2
V d: in p ngun l 12V.
Nu h s iu chnh l 20% => Ud = 12.20% = 2.4 V
Nu h s iu chnh l 50% => Ud = 12.50% = 6 V
V vy, trong ti: iu khin tc ng c DC chng em s dng phng php
iu ch rng xung PWM thay i in p DC cp cho ng c t thay i
tc ca ng c DC. i vi PIC16F877A s dng phng php ny ta c th
s dng b iu ch rng xung (PWM) tch hp sn bn trong PIC vi 2 ng ra
xung ti hai chn CCP1 (17) v CCP2 (16).Ti cc chn ny khi hot ng s xut
chui xung vung vi rng iu chnh c d dng.Xung ra ny dng to tn
hiu ng ngt Trasistor trong mch ng lc, vi rng xc nh s to ra mt in
p trung bnh xc nh.
6.3. Cch thit lp ch PWM cho PIC16F877A
-
Thit lp thi gian ca 1 chu k ca xung iu ch cho PWM (period) bng cch
a gi tr thch hp vo thanh ghi PR2.
29
n 2
n 2
Khi gia tr thanh ghi PR2 bang vi gia tr thanh ghi TMR2 th
qua trnh sau xay ra:
Thanh ghi TMR2 t ng c xa.
Pin ca khi CCP c set.
Gi tr thanh ghi CCPR1L (cha gi tr n nh rng xung iu ch duty
cycle) c a vo thanh ghi CCPRxH.
31
n 2
32
n 2
2/ Mch cu H L298D:
L298D l mt chip toch1 hp 2 mch trong gi 15 chn. L298D c in p danh
ngha cao (ln hn 50V) v dng in danh ngha ln hn 2A nn rt thch hp cho
cc ng dng cng sut nh nh cc ng c DC loi va v nh.
33
n 2
III/LCD
1/Chc nng v hnh dng LCD.
Ngy nay, thit b hin th LCD (Liquid Crystal Display) c s dng trong rt nhiu
cc ng dng ca vi iu khin.LCD c rt nhiu u im so vi cc dng hin th
khc: n c kh nng hin th k t a dng, trc quan (ch, s v k t ha), d
dng a vo mch ng dng theo nhiu giao thc giao tip khc nhau, tn rt t ti
nguyn h thng v gi thnh r
34
n 2
Tn
Chc nng
VSS
VDD
Vee
35
n 2
Min:-0.3V , Max+7V
Cc chn ng vo (DBx, E, )
Min:-0.3V , Max:
Nhit hot ng
(Vcc+0.3V)
Min:-30C , Max:+75C
Nhit bo qun
Min:-55C , Max:+125C
4/ Tp lnh ca LCD:
Cc lnh ca LCD c th chia thnh 3 nhm nh sau:
Cc lnh v kiu hin th.
VD: Kiu hin th (1 hng / 2 hng), chiu di d liu (8 bit / 4 bit),
Ch nh a ch RAM ni.
Nhm lnh truyn d liu trong RAM ni.
Vi mi lnh, LCD cn mt khong thi gian hon tt, thi gian ny c th kh lu
i vi tc ca MPU, nn ta cn kim tra c BF hoc i (delay) cho LCD thc thi
xong lnh hin hnh mi c th ra lnh tip theo.
Tn lnh
Clear
Texe
Hot ng
(max)
Display
DB0
DBx = 0
Lnh Clear Display (x a hin th) s ghi mt khong trngblank (m hin k t 20H) vo tt c nh trong DDRAM, sau
tr b m a AC=0, tr li kiu hin th gc nu n b thay
i. Ngha l : Tt hin th, con tr di v g c tri (hng u
Return
home
1.52
ms
36
n 2
DBx = 0
Entry
mode set
37 us
DB0
DBx = 0
1 [I/D] [S]
vng CGRAM.
M lnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
37 us
DB0
control
DBx = 0
1 [D]
[C] [B]
250kHz
M lnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
37 us
DB0
shift
DBx = 0
1 [S/C] [R/L] *
37
n 2
37 us
DB0
DBx = 0
1 [DL] [N]
[F]
DL: Khi DL=1, LCD giao tip vi MPU bng giao thc 8 bit
(t bit DB7 n DB0).
Ngc li, giao thc giao tip l 4 bit (t bit DB7 n bit
DB0). Khi chn giao thc 4 bit, d liu c truyn/nhn
2 ln lin tip. vi 4 bit cao gi/nhn trc,
4 bit thp gi/nhn sau.
N: Thit lp s hng hin th. Khi N=0: hin th 1 hng, N=1:
hin th 2 hng.
F: Thit lp kiu k t. Khi F=0: kiu k t 5x8 im nh, F=1:
kiu k t 5x10 im
* Ch :
Ch thc hin thay i Function set u chng trnh.
V sau khi c thc
thi 1 ln, lnh thay i Function set khng c LCD
chp nhn na ngoi tr thit lp chuyn i giao thc
giao tip.
Khng th hin th kiu k t 5x10 im nh kiu hin
Set
CGRAM
th 2 hng
M lnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1
37 us
DB0
address
SVTH: Trn Tng Bng
V Vn Chnh
DBx = 0
1 [ACG][ACG][ACG][ACG]
38
n 2
[ACG][ACG]
Lnh ny ghi vo AC a ch ca CGRAM. K hiu [ACG] ch
1 bit ca chui d liu
6 bit. Ngay sau lnh ny l lnh c/ghi d liu t CGRAM ti
a ch c ch nh
Set
DDRAM
37 us
DB0
address
Read BF
and
0 us
DB0
address
(RS=0, R/W=1)
37 us
39
n 2
data to
DB0
CG or
DDRAM
DBx =
[Write data]
(RS=1, R/W=0)
Khi thit lp RS=1, R/W=0, d liu cn ghi c a vo
cc chn DBx t mch
ngoi s c LCD chuyn vo trong LCD ti a ch c
xc nh t lnh ghi a ch trc (lnh ghi a ch cng xc
nh lun vng RAM cn ghi)
Sau khi ghi, b m a ch AC t ng tng/gim 1 ty
theo thit lp Entry mode.
Lu l thi gian cp nht AC khng tnh vo thi gian thc
thi lnh.
Read
data from
DB0
CG
DBx =
[Read data]
(RS=1, R/W=1)
40
n 2
Cc thng s ca ng c nh sau:
+ in p DC cp cho ng c: 12VDC
+ Tc ti a 2000 vng/pht
+ S xung ca encoder 60xung/vng
+ in cm L=102mH
ng c c tt c 5 dy ra:
+ 2 dy cung cp ngun 12 V cho ng c
+ 2 dy ngun 5V cung cp ngun cho encoder
+ 1 dy tn hiu a xung encoder ra ngoi
M hnh th 1
41
n 2
a khc
vch
B thu
pht quang
42
n 2
M hnh th 2
Hnh 27: th xung ca encoder c 2 vng vch lnh pha nhau 900
Hai xung a ra t 2 vng lch nhau 90 , nu vng ngoi nhanh pha hn vng
trong th chc chn ng c quay t tri sang phi v ngc li.
43
n 2
CHNG 3:
THIT K MCH PHN CNG
CODE CHNG TRNH V LU GII THUT
I/ THIT K MCH PHN CNG:
SVTH: Trn Tng Bng
V Vn Chnh
44
n 2
Mch c thit k gm c cc khi nh sau: khi ngun, khi bn phm, khi hin
th, khi mch cng sut, khi iu khin.
1/Khi ngun:
Mch ly ngun xoay chiu qua adapter AC/DC 220VAC/12VDC, v c n p nh
IC 7805.S nguyn l mch:
U2
+12V
+5V
7805
3
2
1
VI
VO
R26
1k
GND
JACK
C4
C5
100uF
100nF
J1
C6
C7
D8
100uF
100nF
LED
J2
2
1
TERMINAL2
ng R2
ra.
R1
10k
PHIM 1
10k
R3
R4
10k
10k
SIL-100-03
PHIM 2
PHIM 3
BUTTON
BUTTON
PHIM 10
BUTTON
4
PHIM bn
5
PHIM 6
2/ PHIM
Khi
mch
phm:
1
2
3
2
FW
PHIM 11
BUTTON
PHIM 7
1
PHIM 8
2
BUTTON
PHIM 12
2
BUTTON
PHIM 15
2
RV
PHIM 9
2
BUTTON
PHIM 16
1
BUTTON
STOP
PHIM 14
2
SAVE
PHIM 13
2
CLEAR
J1
2
2
ENTER
B4 1
B5 2
B6 3
B7 4
A0 5
A1 6
A2 7
A3 8
45
SIL-100-08
n 2
Ngun VCC
trong s mch bn phm l 5V, c cp t khi mch n p trn.V
RT1602C
mch bn phm truyn nhn d liu trc tip vi PIC nn cn in p n nh.
3/Khi mch hin th:
A
K
D0
D1
D2
D3
D4
D5
D6
D7
RS
RW
E
VSS
VDD
VEE
RV1
Mch
hin th bao gm mn hnh LCD giao tip vi PIC qua Port D vi giao thc 4
15
16
7
8
9
10
11
12
13
14
4
5
6
1
2
3
48%
D4
D5
D6
D7
D0
D1
D2
tc dng text chng trnh,cc khi khc v cng c dng bo hiu o chiu
trong ch c
J5 ci t thi gian.
1
2
3
4
5
6
7
8
SIL-100-08
R2
330
R3
330
R4
330
R5
330
R6
330
R7
330
R8
330
R9
330
D2
D3
D4
D5
D6
LED
D7
LED
D9
LED
D10
LED
LED Trn
LEDTng
LED Bng
LED
SVTH:
V Vn Chnh
46
n 2
CLK
SIL-100-05
1
15
R1
R2
0.5
0.5
+12V
IN1 VCC
IN2
IN3
IN4
ENA
ENB
SENSA
SENSB
VS
OUT1
OUT2
OUT3
OUT4
M1
M1
Motor
14
GND
8
1
2
Motor
2
1
M2
J2
M2
M1
J4
3
13
D2 1N4007
U1
M2
+88.8
D3 1N4007
5
4
3
2
1
5
7
10
12
6
11
D4 1N4007
9
J3
D1 1N4007
+12V
J1
CLK
1
2
3
Encoder
L298
47
n 2
J4
C1
8
7
6
5
4
3
2
1
R1
R2
R3
R4
C1
C2
C3
C4
X1
20M
C2
U1
13
14
SIL-100-08
J10
C1
C2
C3
C4
SIL-100-06
D1
R1
1N4148
10k
SW1
BUTTON
J9
33
6
5
4
3
2
1
2
3
4
5
6
7
3
2
1
8
9
10
SIL-100-03
R10
33
OSC1/CLKIN
OSC2/CLKOUT
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RC1/T1OSI/CCP2
RE1/AN6/WR
RC2/CCP1
RE2/AN7/CS
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
C3
10uF
10k
J8
33
34
35
36
37
38
39
40
1
2
3
4
5
6
7
8
15
16
17
18
23
24
25
26
1
2
3
4
5
6
7
8
19
20
21
22
27
28
29
30
1
2
3
4
5
6
7
8
PIC16F877A
R1
R2
R3
R4
J3
SIL-100-08
5
4
3
2
1
J7
J6
SIL-100-05
SIL-100-08
E
RS
RW
D4
D5
D6
D7
SIL-100-08
48
n 2
Cc khai bo bin.
Cc hm con.
Cc hm phc v ngt theo sau bi 1 ch th tin x l cho bit dng ngt no.
// khai bo them nu c
//------khai bo bin------Int a,b;
Int16 x,y;
..
//----------cc chng trnh con------SVTH: Trn Tng Bng
V Vn Chnh
49
n 2
Void xu_ly_ADC ()
{
}
Int cai_dat_PWM ()
{.
Return(bin);}
//------hm ngt------#INT_TIMER1
Void xu_ly_ngt()
{
}
//-------chng trnh chnh-------Void main()
{
..}
III/ Lu gii thut:
Lu gii thut gm: lu chng trnh chnh, chng trnh qut phm, chng
trnh ngt ca timer1.
Chng trnh chnh l 1 vng lp v hn c nhng chng trnh con nh:
qut phm, check phm, chn ch , tnh PWM, nhp d liu tc , nhp
d liu thi gian, save vo epprom.
Chng trnh qut phm th hin gii thut nhn phm nhn v nhn bit gi
tr ca phm (phm nhn l phm no) .
Chng trnh ngt timer 1 c tc dng cp nht gi tr tc , tnh ton gi
tr PWM, v xut tnh hiu n khi hin th.
50
n 2
55
n 2
{delay_ms(200);
return (sttphim);}
output_b(0x70);// B6=0
a=0;
b=4;
checkphim(b);
if (a!=0)
{delay_ms(200);
return (sttphim);}}
//============chuong trinh check phim=============
int checkphim(b)
{
switch (b)
{
case 1:
if(!input(pin_a0))
{sttphim=1;
a=1;}
else if(!input(pin_a1))
{sttphim=2;
a=1;}
else if(!input(pin_a2))
{sttphim=3;
a=1;}
else if(!input(pin_a3))
{ sttphim=10;//thuan
a=1;}
else {}
break;
case 2:
if(!input(pin_a0))
{sttphim=4;
a=1;}
else if(!input(pin_a1))
{sttphim=5;
a=1;}
else if(!input(pin_a2))
{sttphim=6;
a=1;}
else if(!input(pin_a3))
{sttphim=11;//nghich
a=1;}
else {}
break;
SVTH: Trn Tng Bng
V Vn Chnh
56
n 2
case 3:
if(!input(pin_a0))
{sttphim=7;
a=1;}
else if(!input(pin_a1))
{sttphim=8;
a=1;}
else if(!input(pin_a2))
{sttphim=9;
a=1;}
else if(!input(pin_a3))
{sttphim=12;//stop
a=1;}
else {}
break;
case 4:
if(!input(pin_a0))
{sttphim=0;//0
a=1;}
else if(!input(pin_a1))
{sttphim=15;//save
a=1;}
else if(!input(pin_a2))
{sttphim=14;//clear
a=1;}
else if(!input(pin_a3))
{sttphim=13;//set
a=1;}
else {}
break;}
return (sttphim);
}
// chuong trinh nhan xung tu encoder
//ngat ngoai, nhan xung tu encoder
#int_ext
void RB0_isr()
{
s_xung++;//dem so xung o chan RB0
}
//ngat timer1, tinh toan pwm va hien thi
#int_timer1
void timer1_isr()
{
set_timer1(-62500);
if (t==5){
SVTH: Trn Tng Bng
V Vn Chnh
57
n 2
58
n 2
{d=1;}
else{}
set_timer0(-235);
}
else {
dem++;
set_timer0(-235);}
}
//chuong trinh chinh
void main()
{
i=0;
sttphim=0;
setpoint=0;tg=0;
duty=0;
c=0;
d=0;
ct=0;l=0;m=0;
e0=0;e1=0;e2=0;e3=0;e=0;k=0;
//================================================
============
//1:ngo vao;0: la ngo ra
set_tris_b(0b00001111);//4 chan RB4-RB7 xuat du lieu ra ban phim
set_tris_a(0b00001111);//4 chan RA0-RA3 nhan du lieu tu ban phim
set_tris_c(0b00000000);//2 chan RC0 va RC1 xuat PWM
set_tris_D(0b00000000);//port D la port xuat du lieu ra LCD
//================================================
============
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
/* timer1 la bo dinh thoi su dung xung noi,bo chia 1:8 thay doi moi
1600ns
Dung timer1 de ngat moi 0.1s do vay ta dat gia tri cho timer1 la :
0.1s/1600ns=62500(D)=F424(H) =>gia tri nap la FFFF-F424=BDB*/
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
enable_interrupts(int_ext);//khoi dong ngat ngoai
ext_int_edge(H_TO_L); // xung tu cao xuong thap
enable_interrupts(global);// khoi dong bit ngat GIE
setup_timer_2(T2_DIV_BY_4,249,1);
/*timer2 dung dinh thoi cho bo PWM
mode: bo chia thoi gian (prescale) cua timer2 1:4
period: gia tri nap chi thanh ghi PR2
postscale : bo chi ra,chon 1:1 PWM khong dung
Thach anh 20MHz, PWM fre: 10000Hz, thay doi duty cycle(%) de
thay doi toc do*/
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
SVTH: Trn Tng Bng
V Vn Chnh
59
n 2
set_pwm1_duty(0);
set_pwm2_duty(0);
//================================================
===========
lcd_init()
lcd_send_byte(0,0x01);
lcd_gotoxy(1,1);
printf(lcd_putc,"CHUONG TRINH DK ");
lcd_gotoxy(1,2);
printf(lcd_putc," TD DONG CO DC ");
delay_ms(1000);
lcd_gotoxy(1,1);
printf(lcd_putc,"
");
lcd_gotoxy(1,2);
printf(lcd_putc,"
");
read_rom();
lcd_gotoxy(1,1);
printf(lcd_putc,"CHON CHE DO :_ ");
while (true)
{
while (c==0)
{
quetphim();
if (a!=0)
{
if (sttphim==1)
{ ct=1;
c=1;
lcd_gotoxy(1,1);
printf(lcd_putc,"CHON CHE DO :_%u",ct);}
if (sttphim==2)
{ ct=2;
c=1;
lcd_gotoxy(1,1);
printf(lcd_putc,"CHON CHE DO :_%u",ct);}
}
}
if (ct==1)
{lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=_ v/p");
lcd_gotoxy(1,2);
printf(lcd_putc,"TD_luu=%lu v/p",e);}
else {
lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=_ v/p");
lcd_gotoxy(1,2);
SVTH: Trn Tng Bng
V Vn Chnh
60
n 2
printf(lcd_putc,"TG_dat=_
While (c==1)
{
quetphim();
s");}
if (a!=0)
{
if (sttphim>=0 && sttphim<=9)//ban phim tu 0--->9
{
if (m==0)
{ghi_tocdo();}
if((ct==2)&&(m==1))
{ghi_thoigian();}
}
if (sttphim==14)
{clear();}
if ((sttphim==13)&&(i==0)&&(e==0))
{
lcd_gotoxy(1,1);
printf(lcd_putc,"
");
lcd_gotoxy(1,1);
printf(lcd_putc,"Phai nhap TD_dat");
delay_ms(1000);
lcd_gotoxy(1,1);
printf(lcd_putc,"
");
lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=_");
}
if ((sttphim==15)&&(i!=0)) //luu vao eeprom
{
write_eeprom(0,e0);
delay_ms(100);
write_eeprom(1,e1);
delay_ms(100);
write_eeprom(2,e2);
delay_ms(100);
write_eeprom(3,e3);
delay_ms(100);
write_eeprom(4,i);
delay_ms(100);
lcd_gotoxy(1,2);
printf(lcd_putc,"
");
lcd_gotoxy(1,2);
printf(lcd_putc," LUU THANH CONG ");
}
if ((sttphim==13)&&((i!=0)||(e!=0)))
SVTH: Trn Tng Bng
V Vn Chnh
61
n 2
{
if (ct==1)
{
c=2;
if (e!=0 && i==0)
luu=e;}
if ((ct==2)&&(l>=2))
{
c=2;}
m=1;
}}}
while (c==2)
{
quetphim();
if(a!=0)
{
if(sttphim==10)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"
");
lcd_gotoxy(1,2);
printf(lcd_putc," QUAY THUAN ");
if (ct==2)
{enable_interrupts(int_timer0);
set_timer1(-235);}
enable_interrupts(int_timer1);
enable_interrupts(global);
set_timer1(-62500);
set_pwm1_duty(duty);
d=1;
}
if (sttphim==11)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"
");
lcd_gotoxy(1,2);
printf(lcd_putc," QUAY NGHICH ");
if (ct==2)
{enable_interrupts(int_timer0);
set_timer1(-235);}
enable_interrupts(int_timer1);
enable_interrupts(global);
set_timer1(-62500);
set_pwm2_duty(duty);
d=2;
}
SVTH: Trn Tng Bng
V Vn Chnh
62
n 2
if (sttphim==12)//stop
{
disable_interrupts(int_timer0);
set_timer0(0);
disable_interrupts(int_timer1);
set_pwm1_duty(0);
set_pwm2_duty(0);
lcd_gotoxy(1,2);
printf(lcd_putc,"
");
lcd_gotoxy(1,2);
printf(lcd_putc," STOP ");
duty=0;
d=0;
}
if (sttphim==14)
{
clear();
c=0;
lcd_gotoxy(1,1);
printf(lcd_putc,"
");
lcd_gotoxy(1,2);
printf(lcd_putc,"
");
lcd_gotoxy(1,1);
printf(lcd_putc,"CHON CHE DO :_ ");
}}}}}
void pwm()
{
if ((luu>s_vong)&& duty<250)
{error=luu-s_vong;
if (error>1000)
duty=duty+50;
else if (error>100)
duty=duty+20;
else if (error>30)
{duty=duty+5;}
else if (error>20)
duty=duty+1.5;
else if (error>10)
duty=duty+(0.05*error);
else {duty=duty+(0.025*error);}
}
if (luu<(s_vong-2)&& (duty>0))
{error=s_vong-luu;
if (error>=10)
SVTH: Trn Tng Bng
V Vn Chnh
63
n 2
duty=duty-(0.05*error);
else (duty=duty-(0.02*error));
}
if(luu==s_vong)
duty=duty;
if((duty>=250)&&(luu>s_vong))
{ lcd_gotoxy(1,1);
printf(lcd_putc,"
");
lcd_gotoxy(1,1);
printf(lcd_putc," TD_tt=MAX ");}
if (d==0)
{set_pwm1_duty(0);
set_pwm2_duty(0);}
else if (d==1)
{set_pwm1_duty(duty);
set_pwm2_duty(0);}
else
{set_pwm1_duty(0);
set_pwm2_duty(duty);}
}
//========chuong trinh con nhap toc do=======
void ghi_tocdo()
{
if(i>=0&&i<=3)
{
// giai thuat luu eeprom
if (i==0)
e0=sttphim;
else if (i==1)
e1=sttphim;
else if (i==2)
e2=sttphim;
else {e3=sttphim;}
//===============================
setpoint*=10;
setpoint+=sttphim;
i++;
lcd_gotoxy(1,1);
printf(lcd_putc,"
");
lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=%lu v/p",setpoint);
luu=setpoint;
}
else {
lcd_gotoxy(1,1);
printf(lcd_putc,"
");
SVTH: Trn Tng Bng
V Vn Chnh
64
n 2
lcd_gotoxy(1,1);
printf(lcd_putc,"0<TD_dat<=9999");
delay_ms(1000);
lcd_gotoxy(1,1);
printf(lcd_putc,"
");
lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=%lu s",setpoint);
}}
//=========chuong trnh con nhap thoi gian=========
void ghi_thoigian()
{
if(l>=0&&l<=3)
{
tg*=10;
tg+=sttphim;
l++;
lcd_gotoxy(1,2);
printf(lcd_putc,"
");
lcd_gotoxy(1,2);
printf(lcd_putc,"TG_dat=%lu s",tg);
tg1=tg/0.12;
}
else {
lcd_gotoxy(1,2);
printf(lcd_putc,"
");
lcd_gotoxy(1,2);
printf(lcd_putc," 0<TG_dat<=999 ");
delay_ms(1000);
lcd_gotoxy(1,2);
printf(lcd_putc,"
");
lcd_gotoxy(1,2);
printf(lcd_putc,"TG_dat=%lu s",tg);
}}
//============chuong trinh con clear=========
void clear()
{
setpoint=0;
tg=0;
i=0;l=0;m=0;
e0=0;e1=0;e2=0;e3=0;
lcd_gotoxy(1,1);
printf(lcd_putc,"
");
lcd_gotoxy(1,1);
printf(lcd_putc,"TD_dat=_");
lcd_gotoxy(1,2);
printf(lcd_putc,"
");
SVTH: Trn Tng Bng
V Vn Chnh
65
n 2
lcd_gotoxy(1,2);
printf(lcd_putc,"TG_dat=_");
}
//=======chuong trinh con luu toc do vao epprom======
void read_rom()
{
k=read_eeprom(4);
for (j=0;j<k;j++)
{
e=e*10;
e=e+read_eeprom(j);
}}
//==========THE END========
66
n 2
67