5 PORT của PIC16F877A gồm: Mỗi chân của PIC16F877A có chức nă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ứ
Trang 12
NHẬN XÉT CỦA GIÁO VIÊN
………
………
………
………
………
………
………
………
………
………
………
………
………
Tp.HCM, Ngày… tháng năm 2013
Giáo viên hướng dẫn
Trang 23
MỤC LỤC
CHƯƠNG I MỞ ĐẦU
1.1 Lời mở đầu 5
1.2 Nhiệm vụ đề tài 6
CHƯƠNG II VI ĐIỀU KHIỂN PIC16F877A 2.1 GIỚI THIỆU VỀ PIC 7
2.2 SƠ LƯỢC VỀ VI ĐIỀU KHIỂN PIC 16F877A 2.2.1 Sơ đồ chân và chức năng các chân của PIC16F877A 7
2.2.2 Nhận xét 9
2.3 CẤU TRÚC PHẦN CỨNG CỦA PIC16F877A 2.3.1 Cấu trúc tổng quát 9
2.3.2 Sơ đồ khối 10
2.4 TỔ CHỨC BỘ NHỚ 2.4.1 Bộ nhớ chương trình 11
2.4.2 Bộ nhớ dữ liệu 11
2.5 CÁC CỔNG XUẤT NHẬP CỦA PIC16F877A 2.5.1 Port A 12
2.5.2 Port B 12
2.5.3 Port C 12
2.5.4 Port D 13
2.5.5 Port E 13
2.6 BỘ ĐỊNH THỜI CỦA PIC16F877A 13
2.7 MODULE ADC 14
2.8 MODULE CCP 15
Trang 34
2.9 CÁC CHẾ ĐỘ RESET 15
2.10 NGẮT (INTERRUPT) 16
2.11 NGẮT INT 16
CHƯƠNG III LIQUID CRYSTAL DISPLAY (LCD) 3.1 GIỚI THIỆU VỀ LCD 16x2: 3.1.1 Sơ đồ chân và sơ đồ nguyên lý của LCD 17
3.1.2 Chức năng của các chân LCD 18
3.2 HIỂN THỊ KÝ TỰ TRÊN LCD 3.2.1 Nguyên tắc hiển thị 19
3.2.2 Mã lệnh của LCD 20
3.2.3 Một số mã lệnh cơ bản 21
CHƯƠNG IV THIẾT KẾ VÀ THI CÔNG 4.1 Kit phát triển pic16f877a 4.1.1 Mạch nguồn 22
4.1.2 Main Pic và modul phát triển 23
4.2 Mạch đo điện áp DC từ 0-10v 4.2.1 Mạch nguyên lí 24
4.2.2 Code 25
PHẦN V: ĐÁNH GIÁ SẢN PHẨM VÀ MỞ RỘNG ĐỀ TÀI 29
TÀI LIỆU THAM KHẢO 30
Trang 45
Lời mở đầu
Ngày nay cùng với sự tiến bộ của khoa học kỹ thuật, đặc biệt là ngành Kỹ thuật Điện tử Đời sống xã hội ngày càng phát triển cao dựa trên những ứng dụng của khoa học vào đời sống Vì vậy mà những công nghệ điện tử mang tính tự động ngày càng được ứng dụng rộng rãi Trong đó có sự đóng góp không nhỏ của kỹ thuật vi điều khiển Các bộ vi điều khiển đang đựơc ứng dụng rộng rãi và thâm nhập ngày càng nhiều trong các lĩnh vực kỹ thuật và đời sống xã hội Hầu hết là các thiết bị được điều khiển tự động từ các thiết bị văn phòng cho đến các thiết bị trong gia đình đều dùng các bộ vi điều khiển nhằm đem lại sự tiện ghi cho con người trong thời đại công nghiệp hoá, hiện đại hoá
Điện áp là một đại lượng rất quan trọng trong kĩ thuật điện–điện tử, mốn điều khiển một thiết bị hay một linh kiện điện tử nào đó ta phải quan tâm đến điện áp để điều khiển nó đầu tiên Thị trường đã sản xuất ra loại đồng hồ cơ ,tuy có thể đo điện
áp nhưng ko thực sự chính xác, do vậy việc chế tạo ra một loại thiết bị đo có độ chính xác cao là rất cần thiết
Sau thời gian học tập rèn luyện tại trường Đại học Bách Khoa Hồ Chí Minh, chuyên ngành Điện tử - Viễn thông, được sự đồng ý của GVHD Võ Thị Thu Hồng em tiến hành thực hiện đồ án 1: “ THIẾT KẾ VÀ THI CÔNG KIT PHÁT TRIỂN PIC 16F877A, MẠCH ĐO ĐIỆN ÁP MỘT CHIỀU TỪ 0-10V HIỂN THỊ LCD ”
Với mong muốn đáp ứng được yêu cầu đặt ra trong việc nghiên cứu, đo lường về điện áp một chiều Từ đó có thể điều khiển và sử lý điện một cách chính xác hơn
Trang 56
1.2 NHIỆM VỤ CỦA ĐỀ TÀI
TÊN ĐỀ TÀI: “THIẾT KẾ VÀ THI CÔNG KIT PHÁT TRIỂN PIC 16F877A, MẠCH ĐO ĐIỆN ÁP MỘT CHIỀU TỪ 0- 10V HIỂN THỊ LCD”
1 Dữ liệu cho trước
Các tài liệu tham khảo, tài liệu chuyên môn
Chip vi điều khiển 16f877a
2 Nội dung cần hoàn thành
- Phần lí thuyết:
1 Tính cấp thiết của đề tài
2 Giới thiệu chung về vi điều khiển
3 Thiết kế mạch điều khiển
4 Lập lưu đồ thuật toán và viết chương trình điều khiển
5 Quyển thuyết minh và các bản vẽ mô tả đầy đủ nội dung của đề tài
- Sản phẩm:
- Hoạt động chính xác và ổn định
- Đạt yêu cầu kĩ thuật và mỹ thuật
-Mục đích: tạo được thiết bị đo điện áp có độ chính xác cao
Trang 67
CHƯƠNG II: VI ĐIỀU KHIỂN PIC16F877A
2.1 GIỚI THIỆU VỀ PIC
PIC là tên viết tắt của “Programmable Intelligent computer” do hãng General
Instrument đặt tên cho vi điều khiển đầu tiên của họ Hãng Microchip tiếp tục
phát triển sản phẩm này và cho đến ngày nay đã tạo ra gần 100 loại sản phẩm
khác nhau
PIC16F877A là dòng PIC khá phổ biến, đầy đủ tính năng phục vụ cho hầu hết các ứng dụng thực tế Đây là dòng PIC khá dễ cho người mới làm quen với PIC
để phục vụ cho việc học tập và tạo nền tảng cho họ vi điều khiển PIC của mình
2.2 SƠ LƯỢC VỀ VI ĐIỀU KHIỂN PIC 16F877A
2.2.1 Sơ đồ chân và chức năng các chân của PIC16F877A
Chân / (1): Có 2 chức năng
o : ngõ vào reset tích cực ở mức thấp
o Vpp: ngõ vào nhận điện áp lập trình khi lập trình cho PIC
Chân RA0/AN0(2), RA1/AN1(3), RA2/AN2(4): có 2 chức năng
o RA0, RA1, RA2: xuất/ nhập số
o AN0, AN1, AN2: ngõ vào tương tự của kênh thứ 0,1,2
Trang 7 Chân RE0/ /AN5(8): xuất nhập số/ điều khiển port song song/ ngõ vào tương tự 5
Chân RE1/ /AN6(9): xuất nhập số/ điều khiển ghi port song song/ ngõ vào tương tự kênh thứ 6
Chân RE2/ /AN7(10): xuất nhấp số/ Chân chọn lụa điều khiển port song song/ ngõ vào tương tự kênh thứ 7
Chân OSC1/CLK1(13): ngõ vào kết nối với dao động thạch anh hoặc ngõ ào nhận xung clock từ bên ngoài
Chân OSC2/CLK2(14): ngõ ra dao động thạch anh hoặc ngõ ra cấp xung clock
Chân RC0/T1OCO/T1CKI(15): xuất nhập số/ ngõ vào bộ giao động Timer1/ ngõ vào xung clock bên ngoài Timer1
Chân RC1/T1OSI/CCP2(16) : xuất nhập số/ ngõ vào bộ dao động Timer1/ ngõ vào Capture2, ngõ ra compare2, ngõ ra PWM2
Chân RC2/CCP1(17): xuất nhập số/ ngõ vào Capture1, ngõ ra compare1, ngõ
ra PWM1
Chân RC3/SCK/SCL(18): xuất nhập số/ ngõ vào xung clock nối tiếp đồng
bộ, ngõ ra chế độ SPI./ ngõ vào xung clock nối tiếp đồng bộ, ngõ ra của chế
độ I2C
Chân RD0-7/PSP0-7(19-30): xuất nhập số/ dữ liệu port song song
Chân RC4/SDI/SDA(23): xuất nhập số/ dữ liệu vào SPI/ xuất nhập dữ liệu I2C
Chân RC5/SDO(24): xuất nhập số/ dữ liệu ra SPI
Chân RC6/TX/CK(25): xuất nhập số/ truyền bất đồng bộ USART/ xung đồng bộ USART
Chân RC7/RX/DT(26): xuất nhập số/ nhận bất đồng bộ USART
Chân RB0/INT (33): xuất nhập số/ ngõ vào tín hiệu ngắt ngoài
Chân RB1(34), RB2(35): xuất nhập số
Trang 89
Chân RB3/PGM(36): xuất nhập số/ cho phép lập trình điện áp thấp ICSP
Chân RB4(37), RB5(38): xuất nhập số
Chân RB6/PGC(39): xuất nhấp số/ mạch gỡ rối và xung clock lập trình ICSP
Chân RB7/PGD(40): xuất nhập số/ mạch gỡ rối và dữ liệu lập trình ICSP
2.2.2 Nhận xét
PIC16F877A có 40 chân
40 chân chia thành 5 PORT, 2 chân cấp nguồn, 2 chân GND, 2 chân thạch anh
và 1 chân dùng để RESET vi điều khiển
5 PORT của PIC16F877A gồm:
Mỗi chân của PIC16F877A có chức nă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
2.3 CẤU TRÚC PHẦN CỨNG CỦA PIC16F877A
2.3.1 Cấu trúc tổng quát
8K Flash Rom
368x8 bytes Ram
256 bytes EFPROM
5 PORT vào ra với tín hiệu điều khiển độc lập
2 bộ định thời Timer0 và Timer2 8 bit
1 bộ định thời Timer1 16 bit có thể hoạt động ở chế độ tiết kiệm năng lượng với nguồn xung clock ngoài
2bộ Capture/Compare/PWM
1 bộ ADC
2 bộ so sánh tương tự
1 bộ định thời giám sát (Watch Dog Timer)
1 cổng song song 8 bit với tín hiệu điều khiển
1 cổng nối tiếp
Trang 910
Nguồn ngắt
Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:
o Bộ nhớ flash với khả năng ghi xóa được 100.000 lần
o Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần
o Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm
o Khả năng tự nạp chương trình với sự điều khiển của phần mềm
o Nạp được chương trình ngay trên mạch điện ICSP (In Circuit Serial Programming) thông qua 2 chân
o Watchdog Timer với bộ dao động trong
o Chức năng bảo mật mã chương trình
o Chế độ Sleep
o Có thể hoạt động với nhiều dạng Oscillator khác nhau
2.3.2 Sơ đồ khối
Trang 1011
Khối ALU–Arithmetic Logic Unit
Khối bộ nhớ chứa chương trình–Flash Program Memory
Khối bộ nhớ chứa dữ liệu EPROM–Data EPROM
Khối bộ nhớ file thanh ghi RAM–RAM file Register
Khối giải mã lệnh và điều khiển–Instruction Decode Control
Khối thanh ghi đặc biệt
Khối ngoại vi Timer
Khối giao tiếp nối tiếp
Khối chuyển đổi tín hiệu tương tự sang số–ADC
Khối các port xuất nhập
2.4 TỔ CHỨC BỘ NHỚ
2.4.1 Bộ nhớ chương trình
Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash, dung lượng bộ nhớ 8K word (1 word = 14 bit) và được phân thành nhiều trang (từ page 0 đến page 3) Như vậy bộ nhớ chương trình có khả năng chứa được
8*1024 = 8192 lệnh (vì một lệnh sau khi mã hóa sẽ có dung lượng 1 word Để
mã hóa được địa chỉ của 8K word bộ nhớ chương trình, bộ đếm chương trình có dung lượng 13 bit (PC<12:0>)
2.4.2 Bộ nhớ dữ liệu
Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank Đối với PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank Mỗi bank có dung lượng 128 byte, bao gồm các thanh ghi có chức năng đặc biệt SFG (Special
Function Register) nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chung GPR (General Purpose Register) nằm ở vùng địa chỉ còn lại trong bank Các thanh ghi SFR thường xuyên được sử dụng (ví dụ như thanh ghi STATUS) sẽ được đặt ở tất cà các bank của bộ nhớ dữ liệu giúp thuận tiện trong quá trình truy xuất và làm giảm bớt lệnh của chương trình
Vi điều khiển PIC16F877A có 5 cổng xuất nhập, bao gồm PORTA, PORTB, PORTC, PORTD và PORTE Cấu trúc và chức năng của từng cổng xuất nhập sẽđược đề cập cụ thể trong phần sau
Trang 1112
2.5.1 Port A
PORTA (RPA) 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 và nhập được Chức năng I/O này được điều khiển bởi thanh ghi TRISA (địa chỉ 85h) Muốn xác lập chức năng của một chân trong PORTA là input, ta “set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược lại, muốn xác lập chức năng của một chân trong PORTA là output, ta “clear” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA Thao tác này hoàn toàn tương tự đối với các PORT và các thanh ghi điều khiển tương ứng TRIS (đối với PORTA là TRISA, đối với PORTB là TRISB, đối với PORTC là TRISC, đối với PORTD là TRISD và đối với PORTE là TRISE)
Bên cạnh đó PORTA còn là ngõ ra của bộ ADC, bộ so sánh, ngõ vào analog ngõ vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port) Đặc tính này sẽ được trình bày
cụ thể trong phần sau
Các thanh ghi SFR liên quan đến PORTA bao gồm:
o PORTA (địa chỉ 05h) : chứa giá trị các pin trong PORTA
o TRISA (địa chỉ 85h) : chứa giá trị các pin trong PORTA
o CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh
o CVRCON (địa chỉ 9Dh) : thanh ghi điều khiển bộ so sánh điện áp
o ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC
2.5.2 Port B
PORTB (RPB) gồm 8 pin I/O Thanh ghi điều khiển xuất nhập tương ứng
là TRISB Bên cạnh đó một số chân của PORTB còn được sử dụng trong quá trình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau PORTB còn liên quan đến ngắt ngoại vi và bộ Timer0 PORTB còn được tích hợp chức năng điện trở kéo lên được điều khiển bởi chương trình
TRISB (địa chỉ 86h,186h) : điều khiển xuất nhập
OPTION_REG (địa chỉ 81h, 181h) : điều khiển ngắt ngoại vi và bộ Timer0
2.5.3 Port C
PORTC (RPC) gồm 8 pin I/O Thanh ghi điều khiển xuất nhập tương ứng
là TRISC Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so
Trang 1213
sánh, bộ Timer1, bộPWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART
Các thanh ghi điều khiển liên quan đến PORTC:
o PORTC (địa chỉ 07h) : chứa giá trị các pin trong PORTC
o TRISC (địa chỉ 87h) : điều khiển xuất nhập
2.5.4 Port D
PORTD (RPD) gồm 8 chân I/O, thanh ghi điều khiển xuất nhập tương ứng là TRISD PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port)
Các thanh ghi liên quan đến PORTD bao gồm:
o Thanh ghi PORTD : chứa giá trị các pin trong PORTD
o Thanh ghi TRISD : điều khiển xuất nhập
2.5.5 Port E
PORTE (RPE) gồm 3 chân I/O Thanh ghi điều khiển xuất nhập tương ứng là TRISE Các chân của PORTE có ngõ vào analog Bên cạnh
đó PORTE còn là các chân điều khiển của chuẩn giao tiếp PSP
Các thanh ghi liên quan đến PORTE bao gồm:
o PORTE : chứa giá trị các chân trong PORTE
o TRISE : điều khiển xuất nhập và xác lập các thông số cho chuẩn giao tiếp PSP
o ADCON1 : thanh ghi điều khiển khối ADC
2.6 BỘ ĐỊNH THỜI CỦA PIC16F877A
PIC16F877A có tất cả 3 Timer: Timer0 (8 bit), Timer1 (16 bit), Timer2 (8 bit)
Timer0 và Timer2 là bộ đếm 8 bit (giá trị đếm tối đa là FFh), trong khi Timer1 là bộ đếm 16 bit (giá trị đếm tối đa là FFFFh)
Timer0, Timer1 và Timer2 đều có hai chế độ hoạt động là timer và counter Xung clock có tần số bằng ¼ tần số của oscillator Xung tác động lên Timer0 được hỗ trợ bởi prescaler và có thể được thiết lập ở nhiều chế độ khác nhau (tần số tác động, cạnh tác động) trong khi các thông số của xung tác động lên Timer1 là cố định Timer2 được hỗ trợ bởi hai bộ chia tần số
Trang 132.7 MODULE ADC
ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu giữa hai dạng tương tự và số PIC16F877A có 8 ngõ vào analog (RA4:RA0 và RE2:RE0) Hiệu điện thế chuẩn VREF có thể được lựa chọn là VDD, VSS hay hiệu điện thể chuẩn được xác lập trên hai chân RA2 và RA3 Kết quả chuyển đổi
từ tín tiệu tương tự sang tín hiệu số là 10 bit số tương ứng và được lưu trong hai thanh ghi ADRESH:ADRESL Khi không sử dụng bộ chuyển đổi ADC, các thanh ghi này có thể được sử dụng như các thanh ghi thô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 hai thanh ghi ADRESH:ADRESL, bit (ADCON0<2>) được xóa về 0 và cờ ngắt ADIF được set
Module ADC bao gồm 4 thanh ghi:
o Thanh ghi chứa byte cao của kết quả ADRESH
o Thanh ghi chứa byte thấp của kết quả ADRESL
o Thanh ghi chứa các bit điều khiển ASCON0
Quy trình chuyển đổi từ tương tự sang số bao gồm các bước sau:
1 Thiết lập các thông số cho bộ chuyển đổi ADC:
o Chọn ngõ vào analog, chọn điện áp mẫu (dựa trên các thông số của thanh ghi ADCON1)
o Chọn kênh chuyển đổi AD (thanh ghi ADCON0)
o Chọn xung clock cho kênh chuyển đổi AD (thanh ghi ADCON0)
o Cho phép bộ chuyển đổi AD hoạt động (thanh ghi ADCON0)
2 Thiết lập các cờ ngắt cho bộ AD
o Clear bit ADIF
o Set bit ADIE
o Set bit PEIE
o Set bit GIE
3 Đợi cho tới khi quá trình lấy mẫu hoàn tất
4 Bắt đầu quá trình chuyển đổi: Set bit / (ADCON0)
5 Đợi cho tới khi quá trình chuyển đổi hoàn tất:
o Kiểm tra bit Nếu / =0, quá trình chuyển đổi đã hoàn tất
Trang 1415
o Kiểm tra cờ ngắt
6 Đọc kết quả chuyển đổi và xóa cờ ngắt, set bit / (nếu cần tiếp tục chuyển đổi)
7 Tiếp tục thực hiện các bước 1 và 2 cho quá trình chuyển đổi tiếp theo
Cần chú ý là có hai cách lưu kết quả chuyển đổi AD, việc lựa chọn cách lưu được điều khiển bởi bit ADFM
Các thanh ghi liên quan đến bộ chuyển đổi ADC bao gồm:
o INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép các ngắt (các bit GIE, PEIE)
o PIR1 (địa chỉ 0Ch): chứa cờ ngắt AD (bit ADIF)
o PIE1 (địa chỉ 8Ch): chứa bit điều khiển AD (ADIE) ADRESH (địa chỉ 1Eh) và ADRESL (địa chỉ 9Eh): các thanh ghi chứa kết quả chuyển đổi AD
o ADCON0 (địa chỉ 1Fh) và ADCON1 (địa chỉ 9Fh): xác lập các thông
số cho bộ chuyển đổi AD
o PORTA (địa chỉ 05h) và TRISA (địa chỉ 85h): liên quan đến các ngõ vào analog ở PORTA
o PORTE (địa chỉ 09h) và TRISE (địa chỉ 89h): liên quan đến các ngõ vào analog ở PORTE
2.8 MODULE CCP
(Capture/Compare/PWM) bao gồm các thao tác trên các xung đếm cung cấp bởi các bộ đếm Timer1 và Timer2 PIC16F877A được tích hợp sẵn hai khối CCP : CCP1 và CCP2 Mỗi CCP có một thanh ghi 16 bit
(CCPR1H:CCPR1L và CCPR2H:CCPR2L), pin điều khiển dung cho khối CCPx là RC2/CCP1 và RC1/T1OSI/CCP2 Các chức năng của CCP bao gồm:
o Capture
o So sánh (Compare)
o Điều chế độ rộng xung PWM (Pulse Width Modulation)
2.9 CÁC CHẾ ĐỘ RESET