1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Đo và điều khiển nhiệt độ phòng

129 151 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 129
Dung lượng 2,55 MB

Nội dung

5 - Một bộ định thời 16 bits Timer 1 có thể hoạt động trong chế độ tiếtkiệm năng lượng SLEEP MODE với nguồn xung Clock ngoài.. Khi đónếu được cho phép hoạt động, bộ đếm của WDT sẽ bị xóa

Trang 1

Đo Và Điều Khiển Nhiệt Độ Phòng GVHD: Tô Hoàng Lộc

11.1 Sơ lược về vi điều khiển PIC16F877A:

PIC 16F877A là dòng PIC phổ biến nhất hiện nay (đủ mạnh về tínhnăng, 40 chân, bộ nhớ đủ cho hầu hết các ứng dụng thông thường) Cấu trúctổng quát của PIC 16F877A như sau:

0 - 8 K Flash ROM

1 - 368 Bytes RAM

2 - 256 Bytes EEPROM

3 - 5 ports (A, B, C, D, E) vào ra với tín hiệu điều khiển độc lập

4 - 2 bộ định thời 8 bits (Timer 0 và Timer 2)

5 - Một bộ định thời 16 bits (Timer 1) có thể hoạt động trong chế độ tiếtkiệm năng lượng (SLEEP MODE) với nguồn xung Clock ngoài

6 - 2 bô CCP( Capture / Compare / PWM)

7 - 1 bộ biến đổi AD 10 bits, 8 ngõ vào

8 - 2 bộ so sánh tương tự (Compartor)

9 - 1 bộ định thời giám sát (WatchDog Timer)

10 - Một cổng song song 8 bits với các tín hiệu điều khiển

11 - Một cổng nối tiếp

12 - 15 nguồn ngắt

13 - Có chế độ tiết kiệm năng lượng

14 - Nạp chương trình bằng cổng nối tiếp ICSP(In-Circuit Serial

Trang 2

Đo Và Điều Khiển Nhiệt Độ Phòng GVHD: Tô Hoàng Lộc

18

Sơ đồ chân PIC 16f877A

Trang 3

Đo Và Điều Khiển Nhiệt Độ Phòng GVHD: Tô Hoàng Lộc

PIC16F877A là họ vi điều khiển có 40 chân, mỗi chân có một chứcnăng khác nhau.Trong đó có một số chân đa công dụng: mỗi chân có thể hoạtđộng như một đường xuất nhập hoặc là một chân chức năng đặc biệt dùng đểgiao tiếp với các thiết bị ngoại vi

Sơ Đồ Khối PIC

Trang 4

Đo Và Điều Khiển Nhiệt Độ Phòng GVHD: Tô Hoàng Lộc

1.2 Một số điểm đặc biệt của CPU:

1.2.1 Dao động:

PIC16F877A có thể hoạt động trong bốn chế độ dao động khác nhau:

Trong các chế độ LP, XT và

HS chúng ta sửdụng thạch anh dao động nốivào các chân OSC1 và OSC2

để tạo dao động

Việc lựa chọn tụ trong dao động thạch anh dựa vào bảng sau:

Lưu ý: Tụ có giá trị lớn sẽtăng tính ổn định của daođộng nhưng cũng làm tăngthời gian khởi động

Chế độ dao động RC được sửdụng như một giải pháp tiết kiệmtrong các ứng dụng không cần sựchính xác về thời gian

* Cách tính chu kì máy:

Ví dụ ta sử dụng thạch anh 10Mhz Khi đó:

Trang 5

Đo Và Điều Khiển Nhiệt Độ Phòng GVHD: Tô Hoàng Lộc

Tần số dao động của thạch anh là Fosc = 10Mhz

PIC16F877A có một bộ lọc nhiễu ở phần Bộ lọc nhiễu này sẽ phát hiện và

bỏ qua các tín hiệu nhiễu

Ngõ vào trên chân 4 của PIC16F877A Khi đưa chân này xuống thấp thìcác thanh ghi bên trong VĐK sẽ được tải những giá trị thích hợp để khởi độnglại hệ thống

(Lưu ý: Reset do WDT không làm chân xuống mức thấp)

Trang 6

Đo Và Điều Khiển Nhiệt Độ Phòng GVHD: Tô Hoàng Lộc

Trang 8

1.2.4 Chế độ nguồn thấp Sleep (Power down Mode) :

Đây là chế độ hoạt động của VĐK khi lệnh sleep được thực thi Khi đónếu được cho phép hoạt động, bộ đếm của WDT sẽ bị xóa nhưng WDT vẫntiếp tục hoạt động bit PD (STATUS <3>) được reset về không, bit TO được set,oscillator ngưng hoạt động và các PORT giữ nguyên trạng thái như trước khilệnh sleep được thực thi

Do khi chế độ sleep dòng cung cấp cho VĐK là rất nhỏ nên ta cần thựchiện các bước sau trước khi VĐK thực thi lệnh sleep

1• Đưa tất cả các chân về trạng thái VDD hoặc VSS

2• Cần đảm bảo rằng không có mạch ngoại vi nào được điều khiển bởidòng điện của VĐK vì dòng điện nhỏ không đủ khả năng cung cấpcho các mạch ngoại vi hoạt động

3• Tạm ngưng hoạt động của khối A/D và không cho phép các xungclock bên ngoài tác dụng vào VĐK

4• Để ý chức năng điện trở kéo lên của PORTB

5• Pin phải ở mức logic cao

Trang 9

1.2.5 Bộ định thời giám sát (Watch Dog Timer -WDT):

Giả sử bạn viết một chương trình, bạn mong đợi chương trình này sẽ chạynếu không có gì trục trặc xảy ra thì nó sẽ không bao giờ dừng lại, như vậy bạnphải làm một vòng lặp để khi chương trình chạy đến điểm cuối thì nó lại quaytrở về điểm bắt đầu Nhưng mà hãy xem một trường hợp: Giả sử chương trìnhkiểm tra một chân input, nếu nó lên mức cao thì con Pic sẽ tiếp tục kiểm tramột chân input thứ hai có lên mức cao hay không, nếu chân input thứ haikhông lên mức cao, con Pic sẽ ngồi đó chờ và nó sẽ chỉ thoát ra khỏi chỗ ngồicủa nó nếu chân input thứ hai lên mức cao

Bây giờ hãy xem một trường hợp khác, giả sử như bạn viết một chươngtrình, bạn compiled nó thành công, và ngay cả bạn đã cho chạy mô phỏng từngbước, từng bước một trên máy tính, bằng MPLAB chẳng hạn, có vẻ như mọichuyện đều tốt, bạn đem nạp vào con Pic Sau một thời gian chạy thử, con Picthình lình bị kẹt vào nơi nào đó trong chương trình mà không thể thoát ra đượctrạng thái hiện tại Điều gì là cần thiết để giải quyết hai trường hợp trên, resetlại hay vẫn để cho nó bị kẹt không thoát ra được, đó là mục đích của mạchWatchdog

Mạch Watchdog thì không phải là mới mẽ gì, có rất nhiềumicroprocessors và microcontrollers đã có mạch Watchdog, nhưng mà nó làmviệc ra sao ?

Bên trong con Pic có một mạch RC, mạch này cung cấp 1 xung Clock độclập với bất kỳ xung Clock nào cung cấp cho Pic Khi Watchdog Timer (viết tắt

là WDT) được cho phép (enabled), nó sẽ đếm bắt đầu từ 00 và tăng lên 1 chođến FFh, khi nó tăng từ FFh đến 00 ( FFh+1) thì con Pic sẽ bị Reset bất kểđang làm gì, chỉ có 1 cách là ngăn không cho WDT đếm tới 00

Khi con Pic bị kẹt không thể thoát ra khỏi tình trạng hiện tại thì WDT vẫntiếp tục đếm mà không bị bất kỳ điều gì ngăn cấm nó đếm tới FF và đến FF+1,

vì vậy nó sẽ reset con Pic làm cho chương trình phải khởi động lại từ đầu

Để sử dụng WDT chúng ta cần làm 3 việc

Trang 10

1• Thứ nhất, cần thời gian bao lâu để reset WDT ?

2• Thứ hai, làm sao xoá WDT ?

3• Cuối cùng, chúng ta phải nói cho con Pic biết chương trình cho phépWDT hoạt động

trình dài 13 bits có thể định địa chỉ cho

khoảng không gian nhớ 8K x 14bits

Không gian bộ nhớ này được chia làm 8

trang, có địa chỉ từ 0005h đến 1FFFh

Mọi sự truy cập ngoài vùng không

gian nhớ này sẽ không có tác dụng

Ngoài ra, bộ nhớ chương trình còn

bao gồm một ngăn xếp (Stack) 8 mức

Vector Reset được đặt tại địa chỉ 0000h

và vector ngắt được đặt tại địa chỉ 0004h

Trang 12

Các Bank này được lựa chọn bằng 2 bit ở thanh ghi STATUS làRP0(Status<5>) và RP1(Status<6>)

1.2.6.3 Vùng Ram đa mục đích:

Vùng RAM đa mục đích có chiều rộng 8 bit và có thể được truy nhập trựctiếp hoặc gián tiếp thông qua thanh ghi FSR Vùng RAM đa mục đích đượcphân phối ở các Bank như sau:

1- Bank 0: 96 Bytes từ địa chỉ 20h đến địa chỉ 7Fh

2- Bank 1: 80 Bytes từ địa chỉ A0h đến địa chỉ EFh

3- Bank 2: 96 Bytes từ địa chỉ 110h đến địa chỉ 16Fh

4- Bank 3: 96 Bytes từ địa chỉ 190h đến địa chỉ 1EFh

1.2.6.4 Vùng thanh ghi chức năng đặc biệt:

Các thanh ghi chức năng đặc biệt được sử dụng bởi bộ xử lý trung tâmCPU hoặc các module ngoại vi để điều khiển hoạt động của VĐK Các thanhghi chức năng đặc biệt này được chia làm 2 loại: loại thứ nhất dùng cho cácchức năng của CPU, loại thứ 2 dùng cho các chức năng ngoại vi

1.2.6.4.1 Thanh ghi trạng thái ( Status Register):

Thanh ghi trạng thái chứa các trạng thái số học của bộ ALU, trạng tháiReset và các bit chọn Bank của bộ nhớ dữ liệu

Bit 7 IRP: Bit lựa chọn bank thanh ghi (Sử dụng cho định địa chỉ gián

Each bank is 128 bytes

Bit 4 TO: Bit báo hiệu hoạt động của WDT

1: Lệnh xóa WDT hoặc Sleep xảy ra

0: WDT hoạt động

Trang 13

Bit 3 PD: Bit báo công suất thấp ( Power down bit)

1: Sau khi nguồn tăng hoặc có lệnh xóa WDT

0: Thực thi lệnh Sleep

Bit 2 Z: bit Zero

1: Khi kết quả của một phép toán bằng 0

0: Khi kết quả của một phép toán khác 0

Bit 1 DC: Digit Carry

1: Có một số nhớ được sinh ra bởi phép cộng hoặc phép trừ 4 bit thấp

0: Không có số nhớ sinh ra

Bit 0 C: cờ nhớ (Carry Flag)

1: Có một số nhớ sinh ra bởi phép cộng hoặc phép trừ

0: Không có số nhớ sinh ra

1 2.6.4.2 Thanh ghi tùy chọn (Option _Reg Register):

Thanh ghi tùy chọn chứa các bit điều khiển để cấu hình cho các chứa năngnhư: ngắt ngoài, Timer 0 chức năng kéo lên Vdd của các chân Port B, và thờigian chờ của WDT

Bit 7 : Bit cho phép PORTB được kéo lên nguồn

1: Không cho phép PORTB kéo lên nguồn

0:ChophépPORTBkéolênnguồn

Bit 6 INTEDG: Bit lựa chọn cạnh tác động ngắt (INTERRUPT EDGE)

1: Ngắt sẽ được tác động bởi cạnh lên của chân RB0/INT

0: Ngắt sẽ được tác động bởi cạnh xuống của chân RB0/INT

Bit 5 T0CS: Bit lựa chọn nguồn xung Clock cho Timer 0

1: Xung Clock cung cấp bởi nguồn ngoài qua chân RA4/T0CKI

0: Xung Clock cung cấp bởi nguồn dao động nội

Bit 4 T0SE: Bit lựa chọn cạnh nào của xung clock tác động lên timer 0

1: Cạnh xuống

0: Cạnh lên

Bit 3 PSA: Bit quyết định tốc độ đếm PS2:PS0 sẽ tác động lên Timer 0 hay

WDT 1: Tốc độ đếm PS2:PS0 sẽ tác động lên WDT

0: Tốc độ đếm PS2:PS0 sẽ tác động lên Timer 0

Trang 14

Bit 2-0 PS2:PS0: Dùng để lựa chọn tốc độ đếm của timer hay WDT

1.2.6.4.3 Thanh ghi điều khiển ngắt INTCON (Interrupt Control Register):

Bit 7 GIE: Bit cho phép ngắt toàn cục

1: Cho phép ngắt toàn cục

0: Không cho phép ngắt

Bit 6 PEIE: Bit cho phép ngắt khi ghi vào EEPROM hoàn tất

1: Cho phép ngắt ghi vào EEPROM hoạt động

0:KhôngchophépngắtghivàoEEPROMhoạtđộng

Bit 5 TMR0IE: Bit cho phép ngắt khi timer 0 tràn

1: Cho phép ngắt khi timer 0 tràn

0: Không cho phép ngắt khi timer 0 tràn

Bit 4 INTE: Bit cho phép ngắt ngoại vi trên chân RB0/INT

1: Cho phép ngắt ngoại vi

0: Không cho phép ngắt ngoại vi

Bit 3 RBIE: Cho phép ngắt khi trạng thái PORTB thay đổi

Trang 15

Bit 1 INTF: Cờ báo ngắt ngoài RB0/INT

1: Có ngắt

0: Không xảy ra ngắt

Bit 0 RBIF: Cờ báo ngắt khi có thay đổi trạng thái PORTB

1: Có thay đổi

0: Không có thay đổi xảy ra trên PORTB

1.2.6.4.4 Thanh ghi cho phép ngắt ngoại vi 1(PIE1 Register):

Chú ý: Bit PEIE (INTCON<6>) phải được set để cho phép bất kì ngắt

ngọai vi nào xảy ra

Bit 7 PSPIE: Bit cho phép ngắt đọc/ ghi Port song song

Trang 16

1: Cho phép

0: Không cho phép

1.2.6.4.5 Thanh ghi cờ của các ngắt ngoại vi 1:

Bit 7 PSPIF: Cờ ngắt đọc/ ghi của Port song song

1: Một hoạt động đọc/ghi đã diễn ra (phải xóa bằng phần mềm)

0: Không có hoạt động đọc/ghi

Bit 6 ADIF: Cờ báo ngắt chuyển đổi A/D

1: Một quá trình chuyển đổi A/D đã hoàn thành

0: Chuyển đổi A/D chưa hoàn tất

Bit 5 RCIF: Cờ báo ngắt nhận USART

1: Buffer nhận USART đầy

0: Buffer nhận USART trống

Bit 4 TXIF: Cờ báo ngắt phát USART

1: Buffer truyền USART trống

0: Buffer truyền USART đầy

Bit 3 SSPIF: Cờ báo ngắt port nối tiếp đồng bộ (ngắt SSP)

1: Ngắt SSP xảy ra và phải được xóa bằng phần mềm trước khi trở lại chươngtrình chính từ chương trình phục vụ ngắt

0: Khi các giá trị so sánh trong thanh ghi TMR1 không được thỏa

Chế độ PWM: Không sử dụng trong chế độ này

Bit 1 TMR2IF: Cờ báo ngắt xảy ra khi giá trị trong thanh ghi TMR2 bằng

trong thanh ghi PR2 1: Giá trị trong thanh ghi TMR2 bằng thanh ghi PR2 (phải được xóa bằng phầnmềm)

0: Giá trị trong thanh ghi TMR2 chưa bằng thanh ghi PR2

Bit 0 TMR1IF: Cờ báo tràn thanh ghi TMR1

Trang 17

1: Thanh ghi TMR1 tràn (phải được xóa bắng phần mềm)

0: Thanh ghi TMR1 chưa tràn

1.2.6.4.6 Thanh ghi cho phép ngắt ngoại vi 2:

Chú ý: Bit PEIE (INTCON<6>) phải được set để cho phép bất kì ngắt ngọai vinào xảy ra

Bit 7,5,2,1 Unimplemented : read as ‘0’

Bit 6 CMIE: Bit cho phép ngắt do bộ so sánh điện thế

1.2.6.4.7 Thanh ghi cờ của các ngắt ngoại vi 2:

Bit 7,5,2,1 Unimplemented : read as ‘0’

Bit 6 CMIF: Cờ báo ngắt do bộ so sánh

1: Ngõ vào bộ so sánh đã thay đổi (phải được xóa bằng phần mềm)

0: Ngõ vào bộ so sánh không thay đổi

Bit 4 EEIF: Cờ báo ngắt ghi EEPROM

1: Ghi EEPROM hoàn tất (phải được xóa bằng phần mềm)

0: Ghi EEPROM chưa hoàn tất

Trang 18

Bit 3 BCLIF: Cờ báo ngắt do xung đột bus

1: Xung đột bus đã xuất hiện trong chế độ SSP

0: Không có xung đột bus xảy ra

Bit 0 CCP2IF: Cờ báo ngắt CPP2

Bộ đếm chương trình PC (program counter) có độ dài 13 bit, được dùng

để chứa địa chỉ của lệnh được thực thi

kế tiếp Byte thấp chứa trong thanh ghi

PCL có thể đọc/ghi một cách trực tiếp

Các bit cao (bit 12:8) chứa trong thanh

ghi PCLATH, không thể đọc nhưng có

thể ghi gián tiếp bằng cách sử dụng

thanh ghi PCLATH Khi có bất kỳ sự

Reset nào xảy ra, các bit cao của bộ

1.5 Địa chỉ trực tiếp và địa chỉ gián tiếp, thanh ghi INF và thanh ghi FSR:

Thanh ghi INF không phải là một thanh ghi vật lí Nó chứa giá trị củathanh ghi có địa chỉ nằm ở thanh ghi FSR

Ví dụ:

Thanh ghi tại địa chỉ 10h có giá trị 5Ah

Trang 19

Nếu ta đưa 10h vào thanh ghi FSR thì khi đọc thanh ghi INF ta sẽ có giátrị 5Ah

Data EEPROM và Flash Program Memory:

EEPROM là bộ nhớ có khả năng đọc và ghi trong điều kiện làm việc bìnhthường (khi nguồn Vdd không đổi) Bộ nhớ này không được định địa chỉ trựctiếp trong bản đồ bộ nhớ mà được định địa chỉ gián tiếp thông qua các thanhghi chức năng đặc biệt:

Trang 20

Riêng chân RA4 được tích hợp chứcnăng là chân cung cấp xung clock ngoài choTimer 0 (RA4/T0CKI) Những chân kháccủa Port A được đa hợp với các chân ngõvào Analog của ADC và chân ngõ vào điệnthế so sánh của bộ so sánh Comparator Hoạtđộng của những chân này được quy địnhbằng những bit tương ứng trong các thanhghi ADCCON1 và CMCON1 Khi các châncủa Port A được sử dụng làm ngõ vàoAnalog thì các bit trong thanh ghi TRISAphải được set bằng 1

ChứcnăngcủacácchânPortA

Bảng tóm tắt các thanh ghi liên quan đếnPort A

Trang 22

1.6.2 Port B và thanh ghi TRISB:

Port B gồm 8 chân từ chân RB0-RB7 Việc ghi giá trị vào thanh ghiTRISB sẽ quy định các chân của Port B là input hay output (1: input, 0:output) Việc đọc thanh ghi Port B sẽ đọc trạng thái của các chân ở Port B Việcghi giá trị vào thanh ghi Port B sẽ thay đổi trạng thái của các chân Port B

Ba chân của Port B được đa hợp với chức năng In-Circuit Debugger vàLow Voltage Programming function: RB3/PGM, RB6/PGC, RB7/PGD

Mỗi chân Port B có một transistor kéo lên Vdd Chức năng này hoạt động khibit RBPU (Option <7>) được xóa Chức năng này sẽ tự động được xóa khi Port

B được quy định là input

Bốn chân của Port B từ RB7 đến RB4 có chức năng ngắt khi trạng tháichân Port B thay đổi (Khi Port B được quy định là output thì chức năng nàykhông hoạt động Giá trị chân của Port được so sánh với giá trị đã được lưutrước đó, khi có sự sai lệch giữa 2 giá trị này ngắt sẽ xảy ra với cờ ngắt RBIF(INTCON<0) sẽ bật lên Ngắt có thể làm cho VĐK thoát khỏi trạng tháiSLEEP

Bất cứ sự truy xuất nào trên PortB sẽ xóa trạng thái sai lệch, kết thúc ngắt

và cho phép xóa cờ ngắt RBIF

Trang 23

Bảng chức năng PortB :

Bảng tóm tắt các thanh ghi liên quan đến Port B :

Trang 24

1.6.3 Port C và thanh ghi TRISC:

Port C gồm 8 chân từ chân RC0-RC7 Việc ghi giá trị vào thanh ghiTRISC sẽ quy định các chân của Port C là input hay output (1: input, 0:output) Việc đọc thanh ghi Port C sẽ đọc trạng thái của các chân ở Port C Việcghi giá trị vào thanh ghi Port C sẽ thay đổi trạng thái của các chân Port C Các chân của Port C được đa hợp với các chức năng ngoại vi

Khi các chức năng ngoại vi được cho phép ta cần quan tâm chặt chẽ tớigiá trị các bit của thanh ghi TRISC Một số chức năng ngoại vi sẽ ghi đè giá trị

0 lên các bit của thanh ghi TRISC và mặc định các chân này là output, ngoài ramột số chức năng ngoại vi khác sẽ tự động mặc định một số chân là ngõ vào

Do đó cần xem xét kĩ các tính năng của các hàm ngoại vi để thiết lập giá trị cácbit trong thanh ghi TRISC cho thích hợp

Bảng chức năng Port C :

Trang 25

Bảng tóm tắt các thanh ghi lien quan đến PortC

1.6.4 Port D và thanh ghi TRISD

Port D gồm 8 chân từ chân RD0-RD7 Bên cạnh chức năng là port xuấtnhập, Port D còn có thể hoạt động như một cổng song song bằng cách set bitPSPMODE (TRISE<4>), trong chế độ này buffer ngõ vào là TTL

Bảng chức năng Port D :

Trang 26

Bảng tóm tắt các thanh ghi liên quan đến Port D :

1.6.5 Port E và thanh ghi TRISE:

Port E có 3 chân RE0 /RD/AN5, RE1/WR /AN6, RE2 /CS/AN7, có thểđược cấu hình như các chân xuất nhập thông thường

Các chân của Port E có thể trở thành các chân điều khiển cho cổng songsong của VĐK khi bit PSPMODE (TRISE<4>) được set bằng 1 Trong chế độnày, người sử dụng phải đảm bảo các chân của PortE là ngõ vào

Ngoài ra các chân Port E còn có thể được cấu hình như các ngõ vàoAnalog, tại chế độ này, khi đọc giá trị của các chân này sẽ cho ta giá trị là 0 Thanh ghi TRISE quy định chức năng xuất nhập của Port E ngay cả khi

nó được sử dụng như các ngõ vào Analog Phải đảm bảo các chân này đượcquy định là ngõ vào trong chế độ này

Trang 27

Bảng chức năng các chân Port E :

Bảng tóm tắt các thanh ghi liên quan đến Port E :

Thanh ghi TRISE :

Các bit điều khiển trạng thái của Port song song

Bit 7 IBF : Bit trạng thái báo buffer ngõ vào đầy

1 : Một từ (word -16bit) được nhận vào và đang được đọc bởi CPU

0 : Không có từ nào được nhận vào

Bit 6 OBF: Bit trạng thái báo buffer ngõ ra đầy

1 : Buffer ngõ ra vẫn còn giữ một từ đã được đọc trước đó

0 : Buffer ngõ ra đã được đọc

Bit 5 IBOV: Bit báo trạng thái buffer ngõ vào tràn ( trong chế độ Vi xử lí)

1 : Chu kì ghi mới đã bắt đầu nhưng giá trị cũ vẫn còn trang buffer ( phải

được xóa bằng phần mềm)

0:Khôn tràn xảy ra

Bit 4 PSPMODE: Bit chọn chế độ cổng song song cho Port D

1 : Port D được cấu hình như cổng song song

0 : Port D cấu hình như ngõ xuất nhập thông thường

Trang 28

Bit 3 Không sử dụng, đọc là ‘0’

Các bit xác định xuất nhập của Port E:

Bit 2 Bit 2: Xác định chiều xuất nhập cho chân RE2/CS/AN7

Trang 29

1.7.1.2 Hoạt động của bộ định thời

Chế độ định thời được chọn bằng cách xóa bit T0CS (OPTION_REG

<5>) Trong chế độ này thanh ghi TMR0 sẽ tăng lên sau mỗi chu kì (prescalerkhông có tác dụng hoặc tỉ lệ 1 :1) Nếu thanh ghi TMR0 được ghi một giá trịmới, giá trị trong thanh ghi này sẽ không tăng trong 2 chu kỳ lệnh kế tiếp.Vìvậy để khắc phục hiện tượng này chúng ta có thể hiệu chỉnh giá trị nhập vàothanh ghi TMR0

Chế độ đếm được lựa chọn bằng cách set bit T0CS (OPTION_REG <5>).Trong chế độ đếm, thanh ghi TMR0 sẽ tăng lên khi có cạnh lên hoặc cạnhxuống xuất hiện trên chân T0CKL ( cạnh lên hoặc cạnh xuống được lựa chọnbởi bit T0SE (OPTION_REG <4>, xóa bit T0SE sẽ lựa chọn cạnh lên)

1.7.1.3 Ngắt Timer 0

Ngắt Timer 0 được tạo ra khi thanh ghi TMR0 tràn từ 0FFh đến 00h Khixảy ra tràn, cờ T0IF(INTCON<2>) được bật lên Ngắt có thể được ngăn chặnbằng cách xóa bit T0IE (INTCON<5>) Cờ ngắt T0IF phải được xóa bằng phầnmềm truớc khi thoát khỏi chương trình ngắt trở về chương trình chính

Lưu ý : Ngắt Timer 0 không làm VĐK thoát khỏi trạng thái ngủ

1.7.1.4 Sử dụng Timer 0 với nguồn xung clock ngoài

Khi bộ tiền định tỉ lệ không được sử dụng, ngõ vào xung clock ngoại cũnggiống như ngõ ra bộ tiền định tỉ lệ Nguồn xung clock ngoại sẽ được đồng bộvới xung clock nội bằng cách: nó sẽ được lấy mẫu tại chu kỳ Q2 và Q4 củaxung clock nội Do đó, T0CKI phải ở mức cao ít nhất 2 Tosc và ở mức thấp ítnhất cũng là 2 Tosc

1.7.1.5 Bộ tiền định tỉ lệ 8 bit của Timer 0

Bộ đếm 8 bit được sử dụng như bộ tiền định tỉ lệ cho Timer 0 hoặc bộ hậuđịnh tỉ lệ cho WDT Bit PSA (OPTION_REG<3>) sẽ lựa chọn bộ đếm này sẽ

sử dụng cho Timer 0 hay WDT, các bit PS2, PS1, PS0 sẽ xác định tỉ lệ của bộđếm

Trang 30

1.7.2 Bộ định thời Timer 1

1.7.2.1 Giới Thiệu

Timer 1 là một bộ định thời/ đếm 16 bit bao gồm hai thanh ghi 8 bit(TMR1H và TMR1L), có khả năng đọc được và ghi được Cặp thanh ghiTMR1H và TMR1L sẽ tăng từ 0000h lên FFFFh rồi sau đó tràn về 0000h Nếuđược cho phép (bit TMR1IE được set), ngắt sẽ xảy ra khi giá trị TMR1 tràn từFFFFh về 0000h, lúc đó cờ ngắt TMR1IF sẽ bật lên

Trang 31

Bit 2 T1SYNC : Bit lựa chọn đồng bộ hóa xung clock ngoài của Timer 1

(Chú ý: Bit này chỉ có tác dụng khi bit TMR1CS = 1)

1: Không đồng bộ hóa xung clock ngoại

0: Đồng bộ hóa xung clock ngoại

Bit 1 TMR1CS : Bit chọn nguồn xung clock cho Timer 1

1: Chọn xung clock ngoài qua chân T1OSC/T1CKI ( tác động cạnh lên) 0: Chọn xung clock nội (Fosc/4)

Bit 0 TMR1ON: Bit cho phép ngoặc ngưng Timer 1

1: Cho phép

0: Không cho phép

1.7.2.3 Chế độ định thời trong hoạt động của Timer 1 :

Chế độ định thời được lựa chọn bằng cách xóa bit TMR1CS(T1CON<1>) Trong chế độ này, xung clock cung cấp cho Timer 1 là Fosc/4,bit đồng bộ T1SYNC (T1CON<2>) không có tác dụng vì xung clock nội đãluôn luôn được đồng bộ

Xung clock ngoại sẽ được đồng bộ với xung clock nội, hoạt động đồng bộđược thực hiện ngay sau bộ tiền định tỉ lệ xung (prescaler) Trong chế độ ngủhoạt động đồng bộ sẽ bị tắt cho dù có xung clock ngoài thì Timer 1 cũng khôngtăng Điều này có nghĩa là chế độ đếm đồng bộ sẽ không hoạt động được trongchế độ ngủ (SLEEP)

Khi chế độ sử dụng xung clock ngoài được lựa chọn cho Timer 1 ở chế độđếm đồng bộ, chúng ta phải đảm bảo xung clock ngoài đã được đồng bộ vớixung clock nội

Trang 32

Đếm bất đồng bộ :

Nếu bit T1SYNC được set, xung clock ngoài sẽ không được đồng bộhóa Bộ định thời sẽ tiếp tục đếm trong suốt quá trình Sleep của VĐK và có khảnăng tạo ra một ngắt khi bộ định thời tràn và làm VĐK thoát khỏi trạng tháingủ

* Một số đặc điềm lưu ý khi đọc ghi vào Timer :

- Việc đọc thanh ghi TMR1H hoặc TMR1L trong khi bộ định thời đang chạy từmột nguồn xung clock ngoài không đồng bộ sẽ cho giá trị tức thời (không phảingưng Timer lại) Tuy nhiên, phải chú ý rằng việc đọc Timer 1 sẽ phải bao gồm

2 lần đọc giá trị 8 bit, do đó có thể phát sinh vấn đề là Timer có thể bị tràn giữa

2 lần đọc

- Để ghi vào Timer tốt nhất chúng ta nên dừng Timer lại và ghi giá trịchúng ta mong muốn Chúng ta có thể ghi giá trị váo khi Timer đang chạynhưng việc đó có thể tạo ra một giá trị không như ta mong muốn

1.7.2.5 Dao động riêng của Timer 1 :

Chúng ta có thể tạo một bộ dao động độc lập cho Timer 1 bằng cách sửdụng thạch anh có tần số tối đa 200Khz.Với bộ dao động này Timer có thể đếmngay cả khi VĐK rơi vào trạng thái ngủ

1.7.2.6 Ngắt Timer 1 :

Khi ngắt được cho phép, nó sẽ xảy ra khi Timer tràn từ giá trị FFFFhxuống 0000h Khi xảy ra tràn, cờ báo ngắt TMR1IF sẽ bật lên Ngắt có thểngăn chặn bằng cách xóa bit TMR1IE, cờ TMR1IF phải được xóa bằng phầnmềm trước khi thoát khỏi chương trình phục vụ ngắt trở về chương trình chính.Lưu ý : Ngắt của Timer 1 ở chế độ định thời và chế độ đếm đồng bộkhông làm cho VĐK thoát khỏi trạng thái ngủ, chỉ có ngắt ở chế độ đếm bấtđồng bộ mới làm cho VĐK thoát khỏi trạng thái ngủ

Các thanh ghi liên quan đến Timer 1 :

Trang 33

1.7.3 Bộ định thời Timer 2 :

1.7.3.1 Giới thiệu :

Timer 2 là một bộ định thời 8 bit bao

gồm một bộ tiền định tỉ lệ và một bộ hậu

định tỉ lệ, Timer 2 cung cấp thời gian hoạt

động cho chế độ PWM nếu module CCP

được chọn.Thanh ghiTMR2 là một thanh ghi

có thể đọc và ghi được, nó bị xóa bởi bất cứ tác đông reset nào

Xung clock ngõ vào (Fosc/4) có các tùy chọn tỉ lệ là 1:1, 1:4, 1:16, đượclựa chọn bằng các bit điều khiển T2CKPS1 : T2CKPS0 (T2CON<1 :0>) Timer 2 có một thanh ghi khoảng thời gian 8 bit PR2, đây là một thanhghi có khả năng đọc được và ghi được Timer 2 sẽ tăng từ 00h đến khi bằng giátrị ở thanh ghi PR2 nó sẽ reset về 00h ở chu kỳ tăng tiếp theo

1.7.3.2 Thanh ghi điều khiển T2CON

Trang 34

1- Ghi một giá trị vào thanh ghi TMR2

2- Ghi một giá trị vào thanh ghi TCON2

3- Bất cứ một reset thiết bị nào

Thanh ghi TMR2 không bị xóa khi thanh ghi TCON2 được ghi

1.7.3.4 Nguồn xung clock cho Timer 2

Timer 2 có một nguồn xung clock đó là xung clock của VĐK Một bộ tiềnđịnh tỉ lệ được lựa chọn bởi các bit T2CKPS1:T2CKPS0

1.7.3.5 Thanh ghi TMR2 và PR2

Thanh ghi TMR2 và PR2 là 2 thanh ghi đọc được và ghi được Timer 2 sẽtăng từ giá trị 00h lên tới giá trị nằm trong thanh ghi PR2, sau đó nó sẽ reset về00h cho đến chu kỳ đếm kế tiếp

1.7.3.6Tín hiệu báo trạng thái cân bằng

Khi giá trị trong thanh ghi TMR2 bằng với giá trị trong PR2, bộ so sánh

sẽ tạo ra một xung báo hiệu, xung này có thể được dùng cho bộ hậu định tỉ lệhoặc được dùng làm xung clock cho module truyền nối tiếp Ngoài ra nó cònđược dùng làm tín hiệu Reset cho Timer 2

Trang 35

1.8 MODULE CCP

11.8.1 Giới thiệu :

Module CCP được xây dựng để hỗ trợ

cho việc đo lường và điều khiển thời gian

hoạt động của các tín hiệu, đo chu kỳ hoạt

động của tín hiệu, tạo ra các tín hiệu có tần

số khác nhau, điều khiển tốc độ động cơ DC…

Mỗi module CCP có môt thanh ghi 16 bit có thể hoạt động như:

0 - Một thanh ghi Capture 16 bit

1 - Một thanh ghi Compare 16 bit

2 - Một thanh ghi điểu khiển chu kỳ nhiệm vụ của bộ PWM PIC16F877A có 2 module CCP là CCP1 và CCP2:

Trang 36

Module CCP1:

Thanh ghi CCPR1 bao gồm 2 thanh ghi 8 bit: CCPR1L và CCPR1H.Thanh ghi CCP1CON điều khiển hoạt động cùa module CCP1 Các xung đặcbiệt xảy ra bằng các thuật toán so sánh và sẽ reset Timer 1

Module CCP2:

Thanh ghi CCPR2 bao gồm 2 thanh ghi 8 bit: CCPR2L và CCPR2H.Thanh ghi CCP2CON điều khiển hoạt động cùa module CCP2 Các xung đặcbiệt xảy ra bằng các thuật toán so sánh sẽ reset Timer 1 và bắt đầu chuyển đổiADC (nếu chuyển đổi ADC được cho phép)

1.8.2 Thanh ghi điều khiển module CCP:

Bit 3:0 CCPxM3:CCPxM0: Các bit chọn chế độ cho module CCPx

0000: Tắt tất cả các chức năng CCP

0100: Chế độ Capture, hoạt động ở mỗi xung cạnh xuống

0101: Chế độ Capture, hoạt động ở mỗi xung cạnh lên

Trang 37

0110: Chế độ Capture, hoạt động ở mỗi 4 xung cạnh lên

0111: Chế độ Capture, hoạt động ở mỗi 16 xung cạnh lên

1000: Chế độ Compare, ban đầu ngõ ra CCP ở mức thấp, khi điều kiện cânbằng xuất hiện nó lên mức cao (cờ CCPIF được set)

1001: Chế độ Compare, ban đầu ngõ ra CCP ở mức cao, khi điều kiện cân bằngxuất hiện nó xuống mức thấp (cờ CCPIF được set)

1010: Chế độ Compare, tạo ra một ngắt phần mềm khi điều kiện cân bằng xuấthiện (cờ CCPIF được set, chân CCP không đổi)

1011: Chế độ Compare , sự kiện đặc biệt xảy ra (cờ CCPIF được set, chân CCPkhông đổi), CCP1 reset TMR1, CCP2 reset TMR1, bắt đầu chuyển đổi A/D( nếu module ADC được cho phép)

11xx: Chế độ PWM

1.8.3 Chế độ Capture

Để module CCP hoạt động trong

chế độ Capture thì Timer 1 phải thiết

lập ở chế độ định thời hoặc chế độ đếm

đồng bộ, nếu không chế độ Capture sẽ

không làm việc Khi chế độ Capture

được sử dụng, chân CCP phải được

mặc định là ngõ vào

Trong chế độ Capture, hai thanh ghi CCPRxH và CCPRxL sẽ ghi lại giátrị 16 bit của Timer 1 khi có môt sự kiện xuất hiện trên chân CCPx (giá trịtrong Timer 1 không bị reset) Một sự kiện được định nghĩa bởi:

Trang 38

và cờ CCPxIF được bật lên, cờ này phải được xóa bằng phần mềm trước khimột sự kiện khác xảy ra nếu không giá trị lưu trước đó sẽ bị xóa

Khi thay đổi hoạt động chế độ Capture sẽ tạo ra một ngắt nên khi muốnthay đổi hoạt động chế độ Capture trước hết phải vô hiệu hóa các ngắt và xóacác cờ ngắt

1.8.3.1 Bộ định tỉ lệ của CCP:

Bộ định tỉ lệ prescaler có 4 giá trị tỉ lệ được lựa chọn bởi các bitCCPxM3:CCPxM0 Bất cứ khi nào module CCP ngừng hoạt động hoặc khônghoạt động trong chế độ Capture thì giá trị tỉ lệ sẽ bị xóa Bất cứ reset nào cũngxóa giá trị tỉ lệ

Trang 39

Khi thay đổi giá trị prescaler có thể gây ra một ngắt Giá trị đếm prescaler

sẽ không bị xóa nên sự Capture đầu tiên có thể không xuất phát từ giá trị 0 của

bộ prescaler

1.8.4 Chế độ Compare:

Để module CCP hoạt động trong

chế độ Compare thì Timer 1 phải thiết

lập ở chế độ định thời hoặc chế độ đếm

đồng bộ, nếu không chế độ Compare sẽ

không làm việc Khi chế độ Compare

được sử dụng, chân CCP phải được mặc

định là ngõ vào

Trong chế độ Compare giá trị trong thanh ghi TMR1 sẽ được so sánh vớimột giá trị đã được lưu sẵn trong thanh ghi 16 bit CCPRx, khi hai giá trị nàybằng nhau, một ngắt sẽ xảy ra nếu được cho phép.Chân CCPx sẽ:

1- Lên mức cao

2- Xuống mức thấp

3- Hay giữ nguyên trạng thái

Trạng thái của chân CCP sẽ phụ thộc vào các bit CCPxM3:CCPxM0 Việc xóa thanh ghi CCPxCON sẽ đẩy trạng thái của chân CCP xuống mứcthấp

Đặc biệt trong chế độ này, khi giá trị trong 2 thanh ghi TMR1 và CCPRxbằng nhau thì một xung tín hiệu sẽ được tạo ra Xung này sẽ reset cặp thanh ghiTMR1H và TMR1L Điều này cho phép thanh ghi CCPRx hoạt động giốngnhư một thanh ghi khoảng thời gian cho Timer 1

Trang 40

1.8.5 Chế độ điều biến xung PWM:

Trong chế độ điều chế độ rộng xung

PWM, chân CCP tạo ra một tín hiệu có độ

phân giải 10 bit Chân CCP phải được mặc

1Thanh ghi TMR2 bị xóa

2- Chân CCPx được set lên mức 1

3- Giá trị Duty cycle ( Chu kỳ nhiệm vụ) từ thanh ghi CCPRxL sẽ chuyểnsang thanh ghi CCPRxH

Lưu ý: Bộ postcaler của Timer 2 không có tác dụng trong việc quyết định tần

số PWM Bộ prescaler được kết hợp với thanh ghi TMR2 để tạo ra bộ đếm 10bit tương ứng

1.8.5.2 Chu kỳ nhiệm vụ của PWM:

Giá trị chu kỳ nhiệm vụ của PWM được quy định bằng 10 bit : 8 bit trongthanh ghi CCPRxL và 2 bit trong thanh ghi CCPxCON (DCxB1, DCxB0) Chu

kỳ nhiệm vụ PWM có thể được tính theo công thức sau:

Ton PWM = ( Giá trị của DCxB9:DcxB0) * Tosc * giá trị tỉ lệ tiền định TMR2 Giá trị DCxB9:DcxB0 có thể thay đổi tùy ý nhưng giá trị này sẽ khôngđược tải vào trong thanh ghi CCPRxH cho đến khi trạng thái cân bằng xảy ragiữa 2 thanh ghi PR2 và TMR2 Trong chế độ PWM thanh ghi CCPRxH làthanh ghi chỉ đọc

Độ phân giải PWM có thể tính theo công thức sau:

Ngày đăng: 07/09/2017, 11:03

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w