CHƯƠNG 1. ĐẶT VẤN ĐỀ VÀ NHIỆM VỤ THỬ 1.1. Đặt vấn đề Ngày nay ứng dụng vi điều khiển đã đi sâu vào đời sống, sinh hoạt, sản xuất của con người. Thực tế hiện nay hầu hết các thiết bị dân dụng đều có sự góp mặt của Vi Điều Khiển. Ứng dụng vi điều khiển trong thiết kế hệ thống làm giảm chi phí thiết kế và giảm giá thành sản phẩm đồng thời nâng cao tính ổn định của thiết bị cũng như hệ thống. Trên thị trường có rất nhiều họ vi điều khiển như 8051 của hãng Intell, PIC của hãng Microchip,... Việc phát triển ứng dụng các hệ thống vi điều khiển đòi hỏi sự hiểu biết về phần cứng lẫn phần mềm, cũng chính vì vậy hệ thống vi xử lý được sử dụng để giải quyết các bài toán khác nhau. Tính đa dạng của các ứng dụng phụ thuộc vào sự lựa chọn các hệ thống vi xử lý cụ thể cũng như vào kỹ thuật lập trình. Ngày nay các hệ thống vi xử lý đều có mặt trong các thiết bị điện tử hiện đại như máy ghi hình, dàn âm thanh, các bộ điều khiển cho lò sưởi, hệ thống điều hòa công nghiệp...chúng ta có thể sử dụng nhiều ngôn ngữ để lập trình như ngôn ngữ C, C++, Visual... 1.2. Nhiệm vụ thử Tìm tài liệu nghiên cứu, đưa ra các phương pháp tối ưu nhất để thiết kế sản phẩm thực tế. Thiết kế board mạch gồm các khối như : khối xử lý trung tâm dùng họ vi xử lý Pic16f877a, khối cảm biến siêu âm SRF05 để đo khoảng cách, khối hiện thị sử dụng LCD 16x2. Thiết kế khối nguồn cung cấp điện áp và dòng điện ổn định để board mạch hoạt động tốt. Viết chương trình và mô phỏng trên phần mềm proteus. CHƯƠNG 2. TỔNG QUAN VỀ PIC VÀ CÁC PHƯƠNG PHÁP ĐO KHOẢNG CÁCH VÀ CẢM BIẾN 2.1. Giới thiệu về PIC16F877A - Sơ lược về vi điều khiển PIC16F877A. - Khảo sát vi điều khiển PIC16F877A của hãng Microchip. + Sơ đồ, chân linh kiện. + Sơ đồ khối. + Các ứng dụng của PIC. 2.2. Sơ lược về vi điều khiển PIC16F877A PIC16F877A là dòng PIC phổ biến nhất hiện nay (đủ mạnh về tính năng, 40 chân, bộ nhớ đủ cho hầu hết các ứng dụng thông thường). Cấu trúc tổng quát của PIC16F877A như sau: - 8K Flash ROM. - 368 bytes RAM. - 257 bytes EEPROM. - 5 ports (A, B, C, D, E) vào ra với tính hiệu điều khiển độc lập. - 2 bộ nhớ định thời 8bits (Timer 0 và Timer 2). - Một bộ định thời 16bits (Timer 1) có thể hoạt động trong chế độ tiết kiệm năng lượng (SLEEP MODE) với nguồn xung Clock ngoài. - 2 bộ CCP( Capture/Compare/PWM). - 1 bộ biến đổi AD 10 bits, 8 ngõ vào. - 2 bộ so sánh tương tự (Compartor). - 1 bộ thời giám sát (WatchDog Timer). - 1 cổng song song 8bits với các tín hiệu điều khiển. - 1 cổng nối tiếp. - 15 nguồn ngắt. - Có chế độ tiết kiệm năng lượng. - Nạp chương trình bằng cổng nối tiếp ICSP(In-Circuit Serial Progamming). - Được chế tạo bằng Công nghệ CMOS. - 38 tập lệnh có độ dài 14bits. - Tần số hoạt động tối đa 20MHz. 2.2.1 Khảo sát vi điều khiển PIC16F877A của hãng Microchip
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HỒ CHÍ MINH
KHOA CÔNG NGHỆ CƠ KHÍ
-o0o -ĐỒ ÁN CHUYÊN NGÀNH CƠ ĐIỆN TỬ 1
THIẾT KẾ MÁY ĐO KHOẢNG CÁCH SỬ DỤNG CẢM
BIẾN SIÊU ÂM SRF05
GVHD : NGUYỄN LÊ THÁI SVTH : HỒ VĨNH NGUYÊN
Lớp : 07DHCDT1 MSSV : 2025160109
Tp Hồ Chí Minh, ngày 25 Tháng 11 năm 2018
Trang 2Nhận xét :
Điểm đánh giá:
Ngày tháng năm 2018 ( ký tên, ghi rõ họ và tên)
Trang 3Ngày nay kỹ thuật vi điều khiển đã trở nên quen thuộc trong các ngành kỹthuật và trong dân dụng Các bộ vi điều khiển có khả năng xử lý nhiều hoạt độngphức tạp mà chỉ cẩn một chíp vi mạch nhỏ, nó đã thay thế các tủ điều khiển lớn
và phức tạp bằng những mạch điện gọn nhẹ, dễ dàng thao tác thực hiện và sửdụng
Vi điều khiển không những góp phần vào kỹ thuật điều khiền mà còn gópphần to lớn vào việc phát triển thông tin Chính vì các lý do trên, việc tìm hiểu vàkhảo sát là điều mà các sinh viên cơ điện tử hết sức phải quan tâm Đó là mộtnhu cầu hết sức cần thiết của sinh viên chuyên ngành tự động hóa nói chung vàsinh viên cơ điện tử nói riêng Đề tài này nhằm đáp ứng việc tìm hiểu sâu về viđiều khiển hơn
Các bộ điều khiển sử dụng vi điều khiển tuy đơn giản nhưng để vận hành và
sử dụng lại được là một điều rất phức tạp Phần xử lý chính vẫn phụ thuộc vàocon người, đó chính là chương trình hay phần mềm Nếu không có sự tham giacủa con người thì hệ thống vi điều khiển cũng chỉ là mộ vật vô tri Do vậy khi nóiđến vi điều khiển cũng giống như máy tính đều có hai phần: thứ nhất là phầncứng và thứ hai là phần mềm
Như vậy nhằm hiểu rõ hơn về vi điều khiển em đã quyết định chọn đề tài cho
đồ án cơ điện tử một là “Thiết kế máy đo khoảng cách sử dụng cảm biến SRF05”
do thầy Nguyễn Lê Thái hướng dẫn
Trong quá trình thực hiện đề tài vẫn còn nhiều thiếu sót, mong được sự góp ý
từ quí thầy cô và các bạn Em xin chân thành cảm ơn!
Trang 4CHƯƠNG 1 ĐẶT VẤN ĐỀ VÀ NHIỆM VỤ THỬ 1
1.1 Đặt vấn đề 1
1.2 Nhiệm vụ thử 1
CHƯƠNG 2 TỔNG QUAN VỀ PIC VÀ CÁC PHƯƠNG PHÁP ĐO KHOẢNG CÁCH VÀ CẢM BIẾN 2
2.1 Giới thiệu về PIC16F877A 2
2.2 Sơ lược về vi điều khiển PIC16F877A 2
2.2.1 Khảo sát vi điều khiển PIC16F877A của hãng Microchip 2
2.2.2 Sơ đồ khối 4
2.2.3 Các ứng dụng của PIC16F877A 15
CHƯƠNG 3 CÁC PHƯƠNG PHÁP ĐO KHOẢNG CÁCH 17
3.1.Phương pháp đo khoảng cách bằng sóng siêu âm sử dụng cảm biến SRF05 17
3.2.Cảm biến SRF05 17
3.3.Tính toán khoảng cách 21
3.4 Hoạt động và nhận phản hồi sóng cơ bản SRF05 21
3.5 Một số đặc điểm khác của sóng siêu âm 22
3.6 Ứng dụng của ngôn ngữ lập trình Assembler, C điều khiển 23
3.6.1.Ngôn ngữ lập trình Assembler 23
3.6.2 Ngôn ngữ lập trình C 23
CHƯƠNG 4 THIẾT KẾ PHẦN CỨNG 24
4.1 Các linh kiện trong đề tài 24
4.1.1 Điện trở 24
4.1.2 Biến trở 24
4.1.3 Tụ điện 25
4.1.4 Thạch anh 25
Trang 54.1.6 Domino 26
4.2 Mạch nguyên lý SRF05 27
4.2.1 Các loại linh kiện chính 27
4.2.2 Sơ đồ nguyên lý và mạch in trên phần mềm proteus 27
4.3 Mạch nguồn 5V 7805 28
4.3.1 Các loại linh kiện sử dụng cho mạch nguồn 7805 28
4.3.2 Sơ đồ nguyên lý và mạch in của mạch nguồn 7805 thực hiện trên phần mềm proteus 28
CHƯƠNG 5 THIẾT KẾ PHẦN MỀM CHO MẠCH ĐO KHOẢNG CÁCH SRF0530 CHƯƠNG 6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 32
6.1 Kết luận: 32
6.2 Hướng phát triển: 32
TÀI LIỆU THAM KHẢO 32
Trang 6Hình 1.1 Sơ đồ chân PIC16F877A 3
Hình 2.1 Sơ đồ khối PIC16F877A 4
Hình 2.3 Bộ nhớ Stack 5
Hình 2.4 Bộ nhớ dữ liệu 6
Hình 2.4: Sơ đồ khối Timer0 10
Hình 2.5: Sơ đồ khối của Timer1 11
Hình 2.6: Sơ đồ khối Timer2 13
Hình 2.7: Sơ đồ khối bộ chuyển đổi ADC 15
Hình 2.8: Sơ đồ khối PIC16F877A giao tiếp với LED đơn 16
Hình 2.9: Sơ đồ khối PIC16F877A giao tiếp với LM35 & LCD 16
Hình 3.1: Cảm biến siêu âm SRF05 18
Hình 3.2: Chức năng chân của Mode1 19
Hình 3.3: nguyên lý hoạt động ở chế độ Mode1 19
Hình 3.4: Chức năng các chân ở chế độ Mode2 20
Hình 3.5: Nguyên lý hoạt động ở chế độ Mode2 20
Hình 3.6: Mô tả hoạt động nhận phản hồi của SRF05 21
Hình 3.7: Mô tả hình dạng kích thước của vật thể khi sóng siêu âm truyền 22
Hình 3.8: Mô tả đối tượng ở một góc cân đối 22
Hình 3.9: mô tả hai khu vực chồng chéo lên nhau 23
Hình 4.1: Kí hiệu điện trở 24
Hình 4.2: Ký hiệu biến trở 24
Hình 4.3: Ký hiệu tụ điện 25
Hình 4.4: Ký hiệu thạch anh 25
Hình 4.5: Ký hiệu LCD 26
Hình 4.6: Ký hiệu domino 26
Hình 4.7: Sơ đồ nguyên lý vi điều khiển PIC16F877A & cảm biến SRF05 27
Hình 4.8: Mạch in PIC16F877A & cảm biến siêu âm SRF05 28
Trang 7Hình 4.10: Mạch in nguồn 7805 29
Trang 8CHƯƠNG 1 ĐẶT VẤN ĐỀ VÀ NHIỆM VỤ THỬ
1.1 Đặt vấn đề
Ngày nay ứng dụng vi điều khiển đã đi sâu vào đời sống, sinh hoạt, sản xuất của conngười Thực tế hiện nay hầu hết các thiết bị dân dụng đều có sự góp mặt của Vi ĐiềuKhiển Ứng dụng vi điều khiển trong thiết kế hệ thống làm giảm chi phí thiết kế vàgiảm giá thành sản phẩm đồng thời nâng cao tính ổn định của thiết bị cũng như hệthống Trên thị trường có rất nhiều họ vi điều khiển như 8051 của hãng Intell, PIC củahãng Microchip,
Việc phát triển ứng dụng các hệ thống vi điều khiển đòi hỏi sự hiểu biết về phần cứnglẫn phần mềm, cũng chính vì vậy hệ thống vi xử lý được sử dụng để giải quyết các bàitoán khác nhau Tính đa dạng của các ứng dụng phụ thuộc vào sự lựa chọn các hệthống vi xử lý cụ thể cũng như vào kỹ thuật lập trình
Ngày nay các hệ thống vi xử lý đều có mặt trong các thiết bị điện tử hiện đại nhưmáy ghi hình, dàn âm thanh, các bộ điều khiển cho lò sưởi, hệ thống điều hòa côngnghiệp chúng ta có thể sử dụng nhiều ngôn ngữ để lập trình như ngôn ngữ C, C++,Visual
Thiết kế khối nguồn cung cấp điện áp và dòng điện ổn định để board mạch hoạt độngtốt
Viết chương trình và mô phỏng trên phần mềm proteus
Trang 9CHƯƠNG 2 TỔNG QUAN VỀ PIC VÀ CÁC PHƯƠNG PHÁP ĐO
KHOẢNG CÁCH VÀ CẢM BIẾN2.1 Giới thiệu về PIC16F877A
- Sơ lược về vi điều khiển PIC16F877A
- Khảo sát vi điều khiển PIC16F877A của hãng Microchip
+ Sơ đồ, chân linh kiện
+ Sơ đồ khối
+ Các ứng dụng của PIC
2.2 Sơ lược về vi điều khiển PIC16F877A
PIC16F877A là dòng PIC phổ biến nhất hiện nay (đủ mạnh về tính năng, 40 chân, bộnhớ đủ cho hầu hết các ứng dụng thông thường) Cấu trúc tổng quát của PIC16F877Anhư sau:
- 8K Flash ROM
- 368 bytes RAM
- 257 bytes EEPROM
- 5 ports (A, B, C, D, E) vào ra với tính hiệu điều khiển độc lập
- 2 bộ nhớ định thời 8bits (Timer 0 và Timer 2)
- Một bộ định thời 16bits (Timer 1) có thể hoạt động trong chế độ tiết kiệm nănglượng (SLEEP MODE) với nguồn xung Clock ngoài
- 2 bộ CCP( Capture/Compare/PWM)
- 1 bộ biến đổi AD 10 bits, 8 ngõ vào
- 2 bộ so sánh tương tự (Compartor)
- 1 bộ thời giám sát (WatchDog Timer)
- 1 cổng song song 8bits với các tín hiệu điều khiển
- 1 cổng nối tiếp
- 15 nguồn ngắt
- Có chế độ tiết kiệm năng lượng
- Nạp chương trình bằng cổng nối tiếp ICSP(In-Circuit Serial Progamming)
- Được chế tạo bằng Công nghệ CMOS
- 38 tập lệnh có độ dài 14bits
- Tần số hoạt động tối đa 20MHz.
2.2.1 Khảo sát vi điều khiển PIC16F877A của hãng Microchip
Trang 102.2.1.1 Sơ đồ chân của PIC16F877A
Hình 1.1 Sơ đồ chân PIC16F877A
2.2.1.2 Chức năng chân của vi điều khiển PIC16F877A
PORTA: (RA0-RA5) có số chân từ chân số 2 đến chân số 7
- PORTA bao gồm 6 I/O pin Đây là các chân “hai chiều” (bidirectional pin), nghĩa
là có thể xuất, nhập được Chức năng I/O này được điều khiển bởi thanh ghiTRISA
PORTB: (RB0-RB7) có số chân từ chân số 33 đến chân số 40
- PORTB là cổng I/O hai chiều PORTB có thể phần mềm được lập trình cho nội
bộ yếu pull-up trên tất cả đầu vào
PORTC: (RC0-RC7) có số chân từ số 15 đến chân số 18 và chân số 23 đến chân số26
- PORTC gồm 8 I/O Thanh ghi điều khiển xuất nhập tương ứng là TRISC Bêncạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộPWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART
Trang 11PORTD: (RD0-RD7) có số chân từ chân số 19 đến chân số 22 và chân số 27 đếnchân số 30.
- PORTD gồm 8 I/O hai chiều, Parallel Slave cổng giao tiếp với bộ vi xử lý Dữliệu cổng song song
PORTE: (RE0-RE2) có số chân từ chân số 8 đến chân số 10
- PORTE gồm 3 I/O hai chiều, đọc điều khiển cho cổng song song
Chân 11, 12, 31, 32 là các chân cấp nguồn cho vi điều khiển
Chân 13 14 là chân được đấu nối thạch anh với bộ dao động khích xung clock bênngoài cung cấp xung clock cho chip hoạt động
Chân 1 là chân RET: Là tín hiệu cho phép thiết lập lại trạng thái ban đầu cho hệthống, và là tín hiệu nhập là mức tích cực cao
Trang 12+ Bộ nhớ chương trình (Programmemory).
+ Bộ nhớ dữ liệu (Data memory)
a.Bộ nhớ chương trình (Programmemory).
Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash, dung lượng
bộ nhớ là 8k word ( word=14bit ) và được phân thành nhiều trang (từ page 0 đếnpage 3) Như vậy bộ nhớ chương trình có khả năng chứa được 8*1024=8192 lệnh(vì mỗi lệnh sau khi mã hóa có dung lượng là 1word=14bit [3]
Để mã hóa được địa chỉ của 8k bộ nhớ chương trình thì bộ đếm chương trình thì
bộ đếm chương trình có dung lượng là 13 bit (PC<12:0>)
Khi vi điều khiển được reset thì bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h(Reset vector) Khi có ngắt xảy ra thì bộ đếm chương trình sẽ chỉ đếm địa chỉ 0004h(Interrupt vector)
Bộ nhớ chương trình không bao gồm bộ nhớ Stack và không được địa chỉ hóa bởi
bộ đếm chương trình Bộ nhớ Stack được đề cập cụ thể trong phần sau
Trang 13Hình 2.3 Bộ nhớ Stack
b Bộ nhớ dữ liệu (Data memory)
Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia thành nhiều bank VớiPIC16F877A bộ nhớ dữ liệu được chia thành 4 bank Mỗi bank có dung lượng là128byte, bao gồm các thanh ghi có chức năng đặc biệt SFR (Special FunctionRigister) nằm ở vùng địa chỉ thấp và các thanh ghi có mục đích chungGPR( General Purpose Register) nằm ở vùng địa chỉ còn lại của bank Các thanhghi SFR thường xuyên sử dụng (ví dụ thanh ghi STATUS) sẽ được đặt ở tất cả cácbank trong bộ nhớ dữ liệu giúp thuận tiện cho qua quá trình truy xuất và giảm bớtlệnh chương trình Sơ đồ cụ thể của bộ nhớ dữ liệu của PIC16F877A
Trang 14Hình 2.4 Bộ nhớ dữ liệu 2.2.2.3 Các thanh ghi có chức năng đặc biệt SFR
Đây là các thanh ghi sử dụng bởi CPU hoặc được dùng để thiết lập và điều khiển cáckhối chức năng được tích hợp bên trong vi điều khiển Có thể phân thanh ghi SRFthành hai loại: thanh ghi SRF liên quan đến chức năng bên trong (CPU) và thanh ghidùng để thiết lập và điều khiển các khối chức năng bên ngoài (ví dụ như ADCPWM )
a Các thanh ghi liên quan đến bên trong:
- Thanh ghi OPTION_REG (81h, 181h): Thanh ghi này cho phép đọc và ghi, chophép điều khiển các chức năng pull-up của các chân PORTB, xác lập các thông
số về các xung dao động, cách tác động của ngắt ngoại vi và bộ đếm timer0
R/W-x
Trang 15- Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt của các khối chứcnăng ngoại vi.
E
U-0
R/W-0
Trang 16b Thanh ghi mục đích chung GPR
Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông qua thanhghi FSG ( File Select Rigister) Đây là các thanh ghi dữ liệu thông thường, người
sủ dụng có thể tùy theo mục đích chương trình mà có thể dùng các thanh ghi này đểchứa các biến số, hằng số, kết quả hoặc tham số phục vụ cho chương trình
2.2.2.4 Các cổng nhập xuất của PIC (I/O)
Cổng xuất nhập (i=I/O) chính là phương tiện mà vi điều khiển dùng để tương tácvới thế giới bên ngoài Sự tương tác này rất đa dạng và thông qua quá trình tươngtác đó, chức năng của vi điều khiển được thể hiện một cách rõ ràng
Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân I/O pin, tùy theo cách
bố trí và chức năng của vi điều khiển mà số lượng cổng xuất nhập và số lượngchân trong mỗi cổng có thể khác nhau Bên cạnh đó, do vi điều khiển được tích sẵnbên trong các đặc tính giao tiếp ngoại vi nên bên cạnh chức năng là cổng xuất nhậpthông thường thì một số chân xuất nhập có các chức năng khác để thực hiện sự tácdộng của các đặc tính ngoại vi nêu trên đối với thế giới bên ngoài Chức năng củatừng chân xuất nhập trong mỗi cổng hoàn toàn có thể được xác lập và điều khiểnthông qua thanh ghi SFR liên quan đến các chân xuất nhập đó
Vi điều khiển PIC16F877A có 5 cổng xuất nhập là PORTA, PORTB, PORTC,PORTD, PORTE
2.2.2.5 Các bộ định thời của PIC16F877A
Bộ điều khiển PIC16F877A có 3 bộ định thời gian là TIMER0, TIMER1,TIMER2
a Bộ TIMER0
TIMER0 là bộ đếm 8bit được kết nối với bộ chia tần (prescaler) Cấu trúc cảuTimer0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực của xung clock.Ngắt Timer0 sẽ xuất hiện khi Timer0 bị tràn Bit TMR0IE (INTCON<5>) là bitđiều khiển của Timer0 TMR0IE=1 cho phép ngắt Timer0 tác động, TMR0IE=0không cho phép Timer0 tác động Sơ đồ khối của Timer0 như sau:
Trang 17Hình 2.4: Sơ đồ khối Timer0
Muốn Timer0 hoạt động ở chế độ Timer ta clear bit TOSC (OPTION_REG<5>), khi
đó giá trị thanh TMR0 sẽ tăng theo chu kỳ xung đồng hồ ( tầng số vào timer0 bằng tần
số oscillator) Khi giá trị thanh ghi TMR0 từ FFh xuống 00h thì ngắt Timer0 sẽ xuấthiện 1 cách linh động
Muốn Timer0 hoạt động ở chế độ counter ta set bit TOSC (OPTION_REG<5>), khi
đó xung tác động lên bộ đếm sẽ được lấy từ chân RA4/TOCK1 Bit TOSE(OPTION_REG<4>) cho phép lựa chọn tác động vào bộ đếm Cạnh tác động sẽ làcạnh trên nếu TOSE=0 và cạnh tác động sẽ là cạnh xuống nếu TOSE=1 Khi thanh ghiTMR0 bị tràn bit TMR0IF (INCON<2>) sẽ được set Đây chính là cờ ngắt củaTimer0 Cờ ngắt này phải được xóa bằng chương trình trước khi bộ đếm bắt đầu thựchiện lại quá trình đếm Ngắt Timer0 không thể “đánh thức” vi điều khiển từ chế độsleep
Bộ chia tần số (presccaler) được chia sẽ giữa Timer0 và WDT (Watchdog Timer).Điều đó có nghĩa là nếu presccaler được sử dụng cho Timer0 thì WDT sẽ được hổ trợcủa presccaler và ngược lại Presccaler được điều khiển bởi thanh ghi OPTION_REG.Bit PSA(OPTION_REG<3>) xác định đối tượng tác động của presccaler Các bitPS2:PS0 (OPTION_REG<2:0>) xác định tỉ số chia tần số của prescaller Xem lạithanh ghi OPTION_REG để xác định lại một cách chi tiết về các bit điều khiển trên
Trang 18Các thanh ghi liên quan tới TIMER0 bao gồm:
TMR0 (địa chỉ 01h, 101h): chứa giá trị đếm của timer0
INCON( địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE)OPTION_REG( địa chỉ 81h, 181h): điều khiển prescaller
a Bộ TIMER1
Timer1 là bộ định thời 16bit, giá trị của Timer1 sẽ được lưu lại trong 2 thanh ghi ( TMR1H:TMR1L) Cờ ngắt của Timer1 là bit TMR1IF (PIR1<0>) Bit điều khiển của Timer1 là TMR1IE(PIE<0>)
Tương tự như Timer0, Timer1 cũng có 2 chế độ hoạt động: chế độ định thời (time) với xung kích
là xung clock của oscillator ( tần số Timer bằng ¼ tần số của oscillaor) và chế độ đếm (Counter) vớixung kích là xung phản ánh các sự kiện cần đếm lấy từ bên ngoài thông qua chânRC0/T1OSO/T1CKI (cạnh tác động là cạnh trên) Việc lựa chọn xung tác động ( tương ứng với việclựa chọn chế độ hoạt động hay Timer hoặc Counter) được điều khiển bởi TMR1CS ( T1CON<1>)
Hình 2.5: Sơ đồ khối của Timer1
Ngoài ra Timer1 còn có 2 chức năng reset input bên trong điều khiển bởi 1 trong 2khối CCP (Capture/compare/PWM)
Khi bit T1OSCEN (T1CON<3>) được set, Timer1 sẽ lấy xung clock từ hai chânRC1/T1OSI/CCP2 và RC0/T1OSO/T1CKI làm xung đếm Timer1 sẽ bắt đầu đếm saucạnh xuống đầu tiên của xung ngõ vào Khi đó PORTC sẽ bỏ qua sự tác động của 2 bitTRISC<1:0> và PORTC<2:1> được gán vào giá trị 0 Khi clear bit T1OSCEN Timer1
sẽ lấy xung từ oscillator hoặc từ chân RC0/T1OSO/T1CKI
Timer1 có 2 chế độ đếm là đồng bộ và bất đồng bộ Chế độ đếm được quyết định bởiPIC điều khiển T1SYNC (T1CON<2>)
Trang 19Khi T1SYNC=1 xung đếm vào Timer1 sẽ không được đồng bộ hóa với xung clockbên trong Timer1 sẽ tiếp tục quá trình đếm khi vi điều khiển đang ở chế độ sleep vàngắt do Timer1 tạo ra khi bị tràn có khả năng đánh thưc vi điều khiển.
Khi T1SYNC=0 xung đếm vào Timer1 sẽ được đồng bộ hóa với xung clock bêntrong Ở chế độ này Timer1 sẽ không hoạt động khi vi điều khiển đang ở chế độ sleep.Các thanh ghi liên quan đến Timer1 bao gồm:
INCON (0bh, 8bh, 10bh, 18bh): cho phép ngắt hoạt động (GIE và PEIE)
PIR1 (0ch): chứa cờ ngắt Timer1 (TMR1IF)
PIE1 (8ch): cho phép ngắt Timer1 (TMR1IE)
TMR1H (0Eh): chứa giá trị 8bit thấp của bộ đếm Timer1
TMR1L (0Eh): chứa giá trị 8bit cao của bộ đếm Timer1
T1CON (10h): xác lập các thông số cho Timer1
b Bộ TIMER2
Timer2 là bộ định thời 8bit và hổ trợ bởi 2 bộ chia tần preccaler và potscaler.Thanh ghi chứa giá trị đếm của Timer2 là TMR2 Bit cho phép ngắt Timer2 tácđộng là TMR2ON (T2CON<2>) Cờ ngắt của Timer2 là TMR2IF (PIR1<1>).Xung gõ vào tầng số bằng ¼ tần số oscillator) được đưa qua bộ chia tần prescaler 4bit (với các tỉ số chia tần là 1:1, 1:4, 1:16 và được điều khiển bởi các bitT2CKPS1:T2CKPS0 (T2CON<1:0>)
Trang 20Hình 2.6: Sơ đồ khối Timer2
Timer2 còn được hỗ trợ bởi thanh ghi PR2 Giá trị đếm trong thanh ghi TMR2 sẽtăng từ 00h đến giá trị chứa trong thanh ghi PR2, sau đó reset về 00h Khi reset thanhghi PR2 nhận giá trị mặc định FFh
Ngoài ra ngõ ra của Timer2 còn được kết nối với khối SSP do đó Timer2 còn đóngvai trò tạo ra xung clock đồng bộ cho khối gi-ao tiếp SSP
Các thanh ghi liên quan đến Timer2 bao gồm:
INTCON (0Bh, 8bh, 10bh, 18bh): cho phép hoạt động toàn bộ các ngắt (GIE vàPEIE)
PIR1 (0Ch): chứa cờ ngắt Timer 2( TMR2IF)
PIE1 (8Ch): chứa bit điều khiển Timer2(TMR2IE)
TMR2 (11H): chứa giá trị đếm Timer2
T2CON (12H): xác lập các thông số Timer2
PR2 (92H): thanh ghi hỗ trợ Timer2
c Bộ biến đổi ADC
ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu từ tương tự sang số.PIC16F877A có 8 ngõ vào analog (RA4:RA0, RE2:RE0) Hiệu điện thế chuẩnVREF có thể được lựa chọn và VDD, VSS hay hiệu điện thế chuẩn được xác lậptrên hai chân RA2, RA3 Kết quả chuyển đổi tín hiệu từ tương tự sang số là 10bit
số tương ứng và được lưu trong hai thanh ghi ADRESH, ADRESL Khi không sử
Trang 21dụng bộ chuyển đổi ADC các thanh ghi này có thể được sử dụng như các thanh ghithông thường khác Khi quá trình chuyển đổi hoàn tất, kết quả sẽ được lưu vào haithanh ghi ADRESH và ADRESL, bit ADCON0<2> được xóa về 0 và cờ ngắtADIF được set.
Quy trình chuyển đổi tín hiệu từ tương tự sang số bao gồm các bước sau:
- Thiết lập các thông số cho bộ chuyển đổi ADC
Chọn ngõ là ANALOG, chọn điện áp mẫu (dựa trên các thông số của thanh ghiADCON1)
Chọn kênh chuyển đổi AD (thanh ADCON0)
Chọn xung clock cho kênh chuyển đổi AD (thanh ghi ADCON0)
Cho phép bộ chuyển đổi AD hoạt động (thanh ghi ADCON0)
- Thiết lập cờ ngắt cho bộ AD:
Clear bit ADIF
Set bit ADIE
Set bit PEIE
Set bit GIE
- Đợi cho tới khi quá trình lấy mẫu hoàn tất
- Bắt đầu quá trình chuyển đổi (set bit GO/DONE)
- Đợi cho quá trình chuyển đổi hoàn tất bằng cách:
Kiểm tra bit GO/DONE, nếu GO/DONE=0 thì quá trình chuyển đổi hoàn tất