Download as pdf or txt
Download as pdf or txt
You are on page 1of 60

TRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA CƠ KHÍ
BỘ MÔN CƠ ĐIỆN TỬ

KỸ THUẬT
VI ĐIỀU KHIỂN PIC
Firma convenzione
Politecnico di Milano e Veneranda Fabbrica
TS. Đặng
del Duomo Phước Vinh
di Milano
Aula Magna – Rettorato
Mercoledì 27 maggio 2015
Email: dangphuocvinh@gmail.com
Phone: 0908 217 415
2
Nội dung (30 tiết)
1. Giới thiệu chung
2. Cấu trúc phần cứng
3. Tập lệnh, chỉ thị tiền xử lý
4. Bộ định thời
5. Hoạt động ngắt
6. Bộ chuyển đổi ADC
7. Giao tiếp nối tiếp
TS. Đặng Phước Vinh Khoa Cơ khí
CHƯƠNG 4
BỘ ĐỊNH THỜI
Firma convenzione
Politecnico di Milano e Veneranda Fabbrica
del Duomo di Milano
Aula Magna – Rettorato
Mercoledì 27 maggio 2015
4
Đặc điểm của bộ định thời
Có 3 bộ định thời
▪ Timer 0: timer/counter 8 bit, có bộ chia trước
(prescaler)

▪ Timer 1: timer/counter 16 bit, có bộ chia trước, có


thể đếm khi CPU ở chế độ sleep với nguồn xung từ
thạch anh hoặc nguồn xung bên ngoài

▪ Timer 2: timer/counter 8 bit, có bộ chia trước và bộ


chia sau (postscale)
TS. Đặng Phước Vinh Khoa Cơ khí
BỘ ĐỊNH THỜI
TIMER 0
Firma convenzione
Politecnico di Milano e Veneranda Fabbrica
del Duomo di Milano
Aula Magna – Rettorato
Mercoledì 27 maggio 2015
6
Timer 0 – Đặc điểm
✓ Là timer/counter 8 bit
✓ Có thể đọc và ghi
✓ Có bộ chia trước 8 bit có thể lập trình bằng phần mềm
✓ Cho phép lựa chọn nguồn xung clock bên trong hoặc
bên ngoài
✓ Phát sinh ngắt khi bị tràn từ FFh đến 00h
✓ Cho phép lựa chọn tác động cạnh cho xung clock bên
ngoài

TS. Đặng Phước Vinh Khoa Cơ khí


7
Các thanh ghi liên quan
✓TMR0: chứa giá trị đếm của Timer0

✓INTCON: cho phép ngắt hoạt động


GIE PEIE TMR0IE INTE RBIE TMR0IF INTF RBIF

✓OPTION_REG: xác định các tham số về xung tác động,


cạnh tác động và tỉ lệ bộ chia
RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

TS. Đặng Phước Vinh Khoa Cơ khí


8
Thanh ghi OPTION_REG

RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

TOCS (Timer0 Clock Source Select bit): bit lựa chọn


nguồn xung cho TMR0. Lựa chọn chế độ Timer hay
Counter
▪ TOCS = 1: Counter → clock lấy từ chân RA4/TOCKI
▪ TOCS = 0: Timer → xung clock bên trong (nguồn xung
để thực thi lệnh)
TS. Đặng Phước Vinh Khoa Cơ khí
9
Chế độ Timer – TOCS = 0
▪ Giá trị thanh ghi TMR0 sẽ tăng theo từng chu kỳ xung
đồng hồ
✓ Tần số vào của Timer0 = ¼ tần số thạch anh

▪ Giá trị TMR0: FFh → 00h → TMR0IF (INTCON<2>) = 1


→ Ngắt Timer0 xuất hiện
✓ Bit TMR0IF phải được xóa bằng phần mềm
✓ Ngắt Timer0 không thể đánh thức VĐK từ chế độ
sleep

▪ Thanh ghi TMR0 có thể ghi hoặc xóa → dể dàng ấn


định thời điểm ngắt
TS. Đặng Phước Vinh Khoa Cơ khí
10
Thanh ghi OPTION_REG

RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

TOSE (Timer0 Source Edge Select bit): bit lựa chọn cạnh
tích cực

▪ TOSE = 1: xung chuyển đổi từ thấp → cao ở chân


TOCKI
▪ TOSE = 0: xung chuyển đổi từ cao → thấp ở chân
TOCKI
TS. Đặng Phước Vinh Khoa Cơ khí
11
Thanh ghi OPTION_REG

RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

PSA (Prescaler Assignment Select bit): bit gán bộ chia


trước
▪ PSA = 1: bộ chia tần số được dùng cho WDT
▪ PSA = 0: bộ chia tần số được dùng cho Timer0
TS. Đặng Phước Vinh Khoa Cơ khí
12
Thanh ghi OPTION_REG

RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

PS2-PS0 (Prescaler Rate Select bit): lựa chọn tỉ lệ bộ


chia trước
▪ Khi gán bộ chia trước cho Timer0 → không có bộ chia cho WDT
▪ Khi gán bộ chia trước cho WDT → không có bộ chia cho Timer0

TS. Đặng Phước Vinh Khoa Cơ khí


13
Chọn tỉ lệ bộ chia trước
PS2-PS0: Prescaler Rate Select bit
Bit lựa chọn
Tỉ lệ TMR0 Tỉ lệ WDT
PS2-PS1-PS0
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111
TS. Đặng Phước Vinh
1:256 1:128
Khoa Cơ khí
14
Sơ đồ khối Timer 0

TS. Đặng Phước Vinh Khoa Cơ khí


15
Giá trị định thời
T = 4 × (1/Fosc) * Prescaler
▪ Fosc : tần số dao động thạch anh
▪ Prescaler: giá trị bộ chia trước

Trong CCS
setup_timer_0(int8 mode)
set_timer0(int8 value)
Ví dụ: setup_timer_0(T0_INTERNAL|T0_DIV_64);
set_timer0(1);
TS. Đặng Phước Vinh Khoa Cơ khí
16
Ví dụ
Viết chương trình nhấp nháy LED với chu kỳ 1s dùng Timer0

TS. Đặng Phước Vinh Khoa Cơ khí


BỘ ĐỊNH THỜI
TIMER 1
Firma convenzione
Politecnico di Milano e Veneranda Fabbrica
del Duomo di Milano
Aula Magna – Rettorato
Mercoledì 27 maggio 2015
18
Đặc điểm
✓Là timer/counter 16 bit gồm 2 thanh ghi (TMR1H &
TMR1L)
▪ Có thể đọc và ghi
▪ Giá trị tăng từ 0000h đến FFFFh

✓Cờ ngắt của Timer1 là TMR1IF (PIR<0>)

✓Bit điều khiển của ngắt Timer1 là TMR1IE (PIE<0>)

✓Có thể hoạt động ở 2 chế độ (Timer hoặc Counter) dựa


vào bit TMR1CS (T1CON<1>)

TS. Đặng Phước Vinh Khoa Cơ khí


19
Các thanh ghi liên quan
✓TMR1L & TMR1H: chứa giá trị đếm của Timer1

✓INTCON: cho phép ngắt hoạt động


GIE PEIE TMR0IE INTE RBIE TMR0IF INTF RBIF

✓PIR1: chứa cờ ngắt Timer1 (TMR1IF)


PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

TS. Đặng Phước Vinh Khoa Cơ khí


20
Các thanh ghi liên quan
✓PIE1: cho phép ngắt Timer1 (TMR1IE)
PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

✓T1CON: xác lập các thông số cho Timer1


- - T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

TS. Đặng Phước Vinh Khoa Cơ khí


21
Thanh ghi T1CON – T1CKPS0 & 1
- - T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

✓ T1CKPS1 – T1CKPS0 (Timer1 Input Clock Prescaler Select bit):


Các bit lựa chọn bộ chia

T1CKPS1 - T1CKPS0 Giá trị chia


00 1:1
01 1:2
10 1:4
11 1:8
TS. Đặng Phước Vinh Khoa Cơ khí
22
Thanh ghi T1CON – T1OSCEN
- - T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

✓T1OSCEN (Timer1 Oscillator Enable Control bit) bit


điều khiển cho phép bộ dao động Timer1

▪ 0: Timer1 lấy xung clock từ thạch anh nội (Timer)


hoặc từ chân RC0/T1OSO/T1CKI (Counter)
▪ 1: Timer1 lấy xung clock từ 2 chân
RC1/T1OSI/CCP2 và RC0/T1OSO/T1CKI làm xung
đếm

TS. Đặng Phước Vinh Khoa Cơ khí


23
Thanh ghi T1CON – TMR1CS
- - T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

✓TMR1CS (Timer1 Clock Source Select bit): bit lựa


chọn nguồn xung clock của Timer1
▪ 1: counter: nguồn xung clock từ bên ngoài ở
chân RC0/T1OSO/T1CKI

▪ 0: timer: nguồn xung clock bên trong (FOSC/4)

TS. Đặng Phước Vinh Khoa Cơ khí


24
Thanh ghi T1CON – TMR1ON
- - T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

✓TMR1ON (Timer1 On bit): bit điều khiển Timer1


▪ 1: cho phép Timer1 hoạt động
▪ 0: không cho phép Timer1 hoạt động

TS. Đặng Phước Vinh Khoa Cơ khí


25
Thanh ghi T1CON – T1SYNC
- - T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

✓T1SYNC (Timer1 Internal Clock Input Synchronization


Control bit): bit điều khiển đồng bộ ngõ vào xung clock
bên ngoài của Timer1
✓Khi TMR1CS = 1
▪ 0: đồng bộ xung clock ngoại vi đưa vào Timer1
▪ 1: không đồng bộ xung clock ngoại vi đưa vào
Timer1
✓Khi TMR1CS = 0: không quan tâm
TS. Đặng Phước Vinh Khoa Cơ khí
26
Timer1 ở chế độ Counter – TMR1CS = 1

✓Timer1 tăng lên 1 khi có cạnh lên của xung bên ngoài
✓Counter phải nhận 1 xung cạnh xuống trước khi có xung
đếm

TS. Đặng Phước Vinh Khoa Cơ khí


27
Timer1 ở chế độ Counter đồng bộ

✓Khi bit T1SYNC = 0

✓Ngõ vào xung clock bên ngoài sẽ đồng bộ với xung clock
bên trong

✓Sự đồng bộ được thực hiện sau tầng chia trước

✓Timer1 không tăng giá trị khi có xung đếm trong chế độ
SLEEP do mạch đồng bộ ngừng hoạt động → không thể
đánh thức VĐK ở chế độ SLEEP

TS. Đặng Phước Vinh Khoa Cơ khí


28
Timer1 ở chế độ Counter bất đồng bộ

✓Khi bit T1SYNC = 1

✓Bộ đếm tiếp tục tăng bất đồng bộ với xung clock bên
trong

✓Bộ đếm hoạt động ở chế độ SLEEP → có thể phát sinh


ngắt để khởi động lại vi điều khiển

✓Trong chế độ này, Timer1 không thể được sử dụng để


làm nguồn xung clock cho khối CCP
(Capture/Compare/PWM)

TS. Đặng Phước Vinh Khoa Cơ khí


29
Bộ dao động Timer1
✓ Mạch dao động thạch anh được thiết kế và tích hợp bên trong
giữa chân T1OSI (ngõ vào) và T1OSO (ngõ ra có khuyếch đại)

✓ Bộ dao động này được phép hoạt động khi T1OSCEN = 1

✓ Bộ dao động vẫn hoạt động khi ở chế độ SLEEP

TS. Đặng Phước Vinh Khoa Cơ khí


30
Sơ đồ khối Timer1

TS. Đặng Phước Vinh Khoa Cơ khí


31
Giá trị định thời
T = 4 × (1/Fosc) * Prescaler
▪ Fosc : tần số dao động thạch anh
▪ Prescaler: giá trị bộ chia trước

Trong CCS
setup_timer_1(int16 mode)
set_timer1(int16 value)
Ví dụ: setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
set_timer1(55536);
TS. Đặng Phước Vinh Khoa Cơ khí
BỘ ĐỊNH THỜI
TIMER 2
Firma convenzione
Politecnico di Milano e Veneranda Fabbrica
del Duomo di Milano
Aula Magna – Rettorato
Mercoledì 27 maggio 2015
33
Đặc điểm
✓ Là timer/counter 8 bit có prescaler và postscaler
✓ Có thể sử dụng như bộ tạo xung PWM của khối CCP
✓ Thanh ghi TMR2 có thể đọc và ghi và có thể xóa khi bị reset
✓ Tùy chọn bộ chia trước dựa vào bit T2CKPS1 & T2CKPS0
✓ Có 1 thanh ghi chu kỳ 8 bit PR2 → thanh ghi đỉnh.
▪ Là thanh ghi có thể đọc và ghi
▪ Khi reset → PR2 = FFh
✓ TMR2 tăng giá trị từ 00h đến giá trị bằng PR2 và reset về 00h ở
chu kỳ kế tiếp
✓ Ngõ ra TMR2 đi qua postscaler 4 bit để tạo ra yêu cầu ngắt
TS. Đặng Phước Vinh Khoa Cơ khí
34
Các thanh ghi liên quan
✓TMR2: chứa giá trị đếm của Timer2

✓INTCON: cho phép ngắt hoạt động


GIE PEIE TMR0IE INTE RBIE TMR0IF INTF RBIF

✓PIR1: chứa cờ ngắt Timer2 (TMR2IF)


PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

TS. Đặng Phước Vinh Khoa Cơ khí


35
Các thanh ghi liên quan
✓PIE1: cho phép ngắt Timer2 (TMR2IE)
PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

✓T2CON: xác lập các thông số cho Timer2


- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

TS. Đặng Phước Vinh Khoa Cơ khí


36
Thanh ghi T2CON – TOUTPS3 : 0

- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

✓ TOUTPS3 – TOUTPS0: Các bit lựa chọn ngõ ra của Postscaler


của Timer2
TOUTPS3 – TOUTPS0 Giá trị chia
0000 1:1
0001 1:2
0010 1:3
… …
1111 1:16
TS. Đặng Phước Vinh Khoa Cơ khí
37
Thanh ghi T2CON – TMR2ON
- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

✓TMR2ON (Timer2 On bit): bit điều khiển Timer2


▪ 1: cho phép Timer2 hoạt động
▪ 0: không cho phép Timer2 hoạt động

TS. Đặng Phước Vinh Khoa Cơ khí


38
Thanh ghi T2CON – T2CKPS1 & 2

- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

✓ T2CKPS1 – T2CKPS0 (Timer2 Input Clock Prescaler Select bit):


Các bit lựa chọn bộ chia

Bit lựa chọn


Giá trị chia
PS1-PS0
00 1:1
01 1:4
1x 1:16

TS. Đặng Phước Vinh Khoa Cơ khí


39
Lưu ý
✓Bộ đếm chia trước và postscaler sẽ bị xóa khi:
▪ Thực hiện ghi dữ liệu vào TMR2
▪ Ghi vào thanh ghi T2CON
▪ Bất kỳ sự reset nào của linh kiện

✓TMR2 không bị xóa khi ghi dữ liệu vào thanh ghi


T2CON

TS. Đặng Phước Vinh Khoa Cơ khí


40
Sơ đồ khối Timer2

TS. Đặng Phước Vinh Khoa Cơ khí


41
Giá trị định thời
Trong CCS
Prescaler Giá trị đỉnh Bao nhiêu lần đếm
tràn thì xảy ra ngắt

setup_timer_2(int8 mode, int8 period, int8 postscale)


set_timer2(int8 value)
Ví dụ: setup_timer_2(T2_DIV_BY_4,250,10);
set_timer2(1);

TS. Đặng Phước Vinh Khoa Cơ khí


42
Tổng kết về Timer
TIMER 0 TIMER 1 TIMER 2
16 bit
Kích thước thanh ghi 8 bit (TMR0) 8 bit (TMR2)
(TMR1H-TMR1L)
Nguồn clock
FOSC/4 FOSC/4 FOSC/4
(bên trong)
▪ Chân T1CKI
Nguồn clock
Chân T0CKI ▪ Bộ dao động None
(bên ngoài)
Timer1 (T1OSC )
▪ Prescaler
8 bit 3 bit (1:1, 1:4, 1:8)
Bộ chia
(1:2 → 1:256) (1, 2, 4, 8) ▪ Postscaler
(1:1 → 1:16)
Sự kiện ngắt và cờ FFh → 00h FFFFh → 0000h TMR2 = PR2
ngắt TMR0IF (INTCON) TMR1IF (PIR1) TMR2IF (PIR2)
Đánh thức PIC từ chế
NO YES NO
độ SLEEP

TS. Đặng Phước Vinh Khoa Cơ khí


43
Ví dụ
Viết chương trình nhấp nháy LED với chu kỳ 0.5s dùng Timer2

TS. Đặng Phước Vinh Khoa Cơ khí


44
Ví dụ
Viết chương trình khi nhấn nút SW1 thì LED 7 đoạn thực hiện vòng lặp
đếm lên từ 0 đến 9. Thời gian delay mỗi lần đếm là 2.5s. Dùng Timer2 để
thực hiện delay

U5 R6 Q4
13 33 NPN
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1 330
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37 LED_7_DOAN
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
6 40 R7

SW1
RA4/T0CKI/C1OUT RB7/PGD
7 10k
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19

LED_7_DOAN
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
TS. Đặng Phước Vinh RD5/PSP5
RD6/PSP6
29 Khoa Cơ khí
30
RD7/PSP7
45
CCP: Capture/Compare/PWM
✓ PIC16F877A có 2 modul CCP(Capture/Compare/PWM ) giống
hệt nhau về hoạt động

✓ Các module này có nguồn là các Timer

TS. Đặng Phước Vinh Khoa Cơ khí


46
Chế độ Capture
✓ Khi có một “hiện tượng” xảy ra
tại chân RC2/CCP1 hoặc
RC1/CCP2
→ TMR1 đưa vào CCPR1,2

✓ Các hiện tượng được định


nghĩa bởi bit CCPxM3:CCPxM0
(CCPxCON<3:0>)
▪ Mỗi khi có cạnh xuống tại chân CCP → 0100
▪ Mỗi khi có cạnh lên → 0101
▪ Mỗi khi có cạnh lên thứ 4 → 0110
▪ Mỗi khi có cạnh lên thứ 16 →0111

TS. Đặng
- Phước -Vinh CCPxX CCPxY CCPxM3 Khoa Cơ
CCPxM2 khí
CCPxM1 CCPxM0
47
Chế độ Capture
✓ Khi giá trị TMR1 đưa vào
CCPRx → cờ ngắt CCPxIF
được set

✓ Các chân dùng cho khối


CCP phải là input

✓ Timer1 phải hoạt động ở


chế độ Timer hoặc Counter
đồng bộ

✓ Bit ngắt: CCPxIE (PIE1)

✓ Cờ ngắt: CCPxIF

TS. Đặng Phước Vinh Khoa Cơ khí


48
Chế độ Compare
✓ Giá trị trong thanh ghi CCPRx sẽ thường xuyên được so sánh với
TMR1
✓ Khi CCPRx = TMR1
▪ Các chân CCP sẽ thay đổi trạng thái: tùy thuộc vào các bit
CCPxM3:CCPxM0 (CCPxCON<3:0>)
▪ Cờ ngắt CCPxIF được set

✓ Timer1 phải hoạt động ở chế độ Timer hoặc Counter đồng bộ

✓ Có khả năng tạo ra hiện tượng đặc biệt (Special Event Trigger)
làm reset giá trị thanh ghi TMR1 và khởi động bộ ADC

TS. Đặng Phước Vinh Khoa Cơ khí


49
Chế độ Compare

TS. Đặng Phước Vinh Khoa Cơ khí


50
Chế độ PWM
✓ Là khối điều chế độ rộng xung (Pulse Width Modulation)
✓ Tín hiệu sau khi được điều chế → chân CCP1,2 (chân RC1 , RC2)
✓ Cần set các chân này là output

TS. Đặng Phước Vinh Khoa Cơ khí


51
Thanh ghi CCPxCON (x = 1, 2)

- - CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0

✓ CCPxX, CCPxY: 2 bit thấp nhất chứa giá trị tính độ rộng xung
(duty cycle) của khối PWM

✓ CCPxM3:CCPxM0: Xác lập chế độ hoạt động của khối CCPx


→ 11xx : CCPx hoạt động ở chế độ PWM

TS. Đặng Phước Vinh Khoa Cơ khí


52
Chế độ PWM – Các bước cài đặt
1. Thiết lập thời gian của 1 chu kỳ của xung cần điều chế (period)
→ đưa giá trị thích hợp vào PR2

2. Thiết lập độ rộng xung cần điều chế (duty cycle)


→ đưa giá trị vào thanh ghi CCPRxL và 2 bit CCPxCON<5:4>

3. Set các chân CCP1,2 là output

4. Thiết lập các thông số cho Timer2


→ setup_timer_2(T2_DIV_BY_1,99,1);

5. Cho phép CCP hoạt động ở chế độ PWM


→ setup_ccp2(CCP_PWM);
TS. Đặng Phước Vinh Khoa Cơ khí
53
1. Chu kỳ 1 xung
✓ Chu kỳ (period) của xung điều chế (tính bằng “s”):

TPWM =  PR2 + 1  4  TOSC  TMR2 Prescale Value

✓ Giá trị PR2:


1
PR2 = −1
f PWM  4  TOSC  Pre

Ví dụ: Tạo ra xung có tần số 10kHz, dùng OSC = 4Mhz, Prescale = 1


1
PR2 = − 1 = 99
1
10  103  4  1
4  10 6

TS. Đặng Phước Vinh Khoa Cơ khí


54
2. Độ rộng xung cần điều chế
✓ Độ rộng xung cần điều chế (duty cyle):

PWM duty cyle = ( CCPRxL:CCPxCON<5:4> )  TOSC  Prescale

✓ CCPRxL: 8 bit thấp của khối CCP


7 6 5 4 3 2 1 0

✓ CCPxCON: thanh ghi điều khiển khối CCP


- - CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0

7 6 5 4 3 2 1 0 CCPxX CCPxY

TS. Đặng Phước Vinh Khoa Cơ khí


55
Sơ đồ khối chế độ PWM
Khi TMR2 = PR2:
▪ TMR2 được xóa
▪ Pin của CCP được set
▪ CCPR1L → CCPR1H

Khi TMR2 = CCPR1H


&
CCP1CON<5:4> = T2CKPS<1:0>
▪ Pin của CCP được clear

TS. Đặng Phước Vinh Khoa Cơ khí


56
Lưu ý trong chế độ PWM
▪ Chỉ Timer2 được sử dụng cho khối PWM
▪ Timer2 có 2 bộ chia tần số: prescaler và postscaler. Nhưng bộ
postscaler không được dùng trong khối PWM
▪ Nếu PWM duty cycle > PWM period: ngõ ra tiếp tục ở mức cao
sau khi PR2 = TMR2

TS. Đặng Phước Vinh Khoa Cơ khí


57
Ví dụ
Tạo ra xung có chu kỳ 10kHz, duty = 25%, dùng OSC = 4Mhz, Pre = 1

𝑓𝑃𝑊𝑀 = 10kHz → 𝑇𝑃𝑊𝑀 = 10−4 s

PWM duty cyle = ( CCPRxL:CCPxCON<5:4> )  TOSC  Pre

−4 1
0.25  10 = Value  1
4  10 6

Value = 100 CCPRxL:CCPxCON<5:4> = 0001 1001 . 00

TS. Đặng Phước Vinh Khoa Cơ khí


58
Ví dụ
Tạo ra xung có chu kỳ 10kHz, duty = 25%, dùng OSC = 4Mhz, Pre = 1

PR2 = 99; // tạo xung có chu kỳ 10kHz (T = 10−4 s)

T2CKPS0:1 = 00; // prescaler = 1

CCPR2L = 00011001;

CCP2CON = 00001100;

TMR2ON = 1; // cho phép Timer2 hoạt động

- - CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0

TS. Đặng Phước Vinh Khoa Cơ khí


59
Trong CCS
Tạo ra xung có chu kỳ 10kHz, duty = 25%, dùng OSC = 4Mhz, Pre = 1

setup_timer_2(T2_DIV_BY_1,99,1);
setup_ccp2(CCP_PWM);
set_pwm2_duty(0);
set_pwm2_duty(value);

value
duty_cycle = value = 0.25   4  ( 99 + 1)  = 100
4  ( PR2 + 1)

TS. Đặng Phước Vinh Khoa Cơ khí


the END !
Firma convenzione
Politecnico di Milano e Veneranda Fabbrica
del Duomo di Milano
Aula Magna – Rettorato
Mercoledì 27 maggio 2015

You might also like