Vi điều khiển hiển thị nhiệt độ LCD
Trang 1
BAO CAO BAI TẬP LỚN
MON : THIET BI NGOAI VI &
CONG NGHE GHEP NOI
Nguyễn Thị Ngọc Hà Dương Tiến Phượng Giảng viên bộ môn:
Phan Trung Kiên
¬
Trang 2MUC LUC
Lap trinh Pic ding CCS PCWH v4.023
6 Tới đây ta đã đủ công cụ để làm mạch hoàn c
LỜI CẢM ƠN
Trang 3Sau một thời gian tìm hiểu nhóm I đã tìm hiểu, nghiên cứu và xây dựng VI
ĐIỀU KHIỂN HIỂN THỊ NHIỆT ĐỘ L.CD.Để hoàn thành tốt bài tập lớn
này chúng em xin chân thành cảm ơn thầy giáo Phan Trung Kiên trong thời
gian qua đã tận tình hướng dẫn chỉ bảo chúng em trong quá trình thực hiện bài tập lớn
Chúng em cũng xin chân thành cảm ơn thầy cô trong khoa Toán — Lý — Tin
trong thời gian qua đã dạy bảo, truyền thụ lại kiến thức cho chúng em
Chúng Em chân thành cảm ơn thầy cô!
LỜI NÓI ĐẦU
Trang 4Ngày nay,các bộ vi điều khiển đang có Ứng dụng ngày càng rong rai va tham 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 các thiết bị kĩ thuật từ phức tạp cho đến đơn giản như thiết bị
điều khiển tự động,thiết bị văn phòng cho đến các thiết bị trong gia đình đều
có dùng các bộ vi điều khiển.Và một số Ứng dụng ứng dụng cơ bản nhất là
sử dụng LCD trong các bảng mạch đo điện áp, đo nhiệt độ, quang báo
Với những kiến thức cơ bản nhất về vi điều khiển và kĩ thuật lập
trình,nhóm chúng em xin trình bày một trong những ứng dụng đơn giản của
bộ vi điều khiển.Đó là lập trình cho Pic 16F877A để đo điện áp xoay chiều
Sơ lược về cấu trúc Pic 16F877A và các linh kiện sử dụng
Sơ đồ nguyên lý, chương trình phần mềm và nguyên lý hoạt động
Kết quả, Ứng dụng và hƯớng phát triển
I Giới thiệu phần cứng
1.Trước hết nhóm đã lên mạng tìm hiểu tổng quan về PIC để xem mình
nên bắt đầu từ đâu
Chủ yếu học từ diễn đàn www.picvietnam.com, tiện thể nhóm xin gửi lời cám ơn tới diễn đàn này
Trang 5Nhom I đã tìm được 1 bài dẫn dắt về PIC của tác giả FALLEAE, và theo
đó thì để học PIC ta nên bắt đầu bằng việc tìm hiểu về các khái niệm và làm
Nhưng nếu search trên mạng với từ khoá PIC và các khái niệm này thì
có rất ít, thậm chí nhóm tìm không ra Lý do đơn giản vì các phần kiến thức
này đáng lễ phải được học trong các môn tiền đề cho PIC như kiến trúc máy
tính hay vi xử lý
Nhóm tìm tới hỏi các anh đi trước, và theo hướng dẫn của anh chị khóa trước thì nên tìm hiểu về vi điều khiển 8051 trước, và nên học lập trình bằng
ASM
Để tìm hiểu 8051, nhóm đã tìm đọc sách về 8051 của tác giả Tống Văn
On Chính trong sách này, nhóm đã hiểu được các khái niệm về thanh ghi,
định thời, và ngôn ngữ ASM (chỉ ở mức căn bản)
Nhóm I xin được nói về cách hiểu của mình về các khái niệm trên :
Thanh ghi
Trong một vi xử lý 8051 có rất nhiều thanh ghi (khoảng hơn trăm
thanh) mỗi thanh là một chuỗi các bit, mỗi bit có 2 giá trị là 1 hoặc 0 và có thể
được gán bởi người lập trình, Đa số thanh ghi có 8 bit, ngoài ra còn có các thanh 13 bit Mỗi thanh như thế có các chức năng riêng
Có thanh chỉ đơn thuần chỉ để nhớ một giá trị nào đó, thanh ghi 8 bit thì
chỉ nhớ được 2° =256 giá trị từ 0 tới 255
Có thanh dùng để điều khiển, ví dụ thanh ghi cho phép xuất hoặc nhập PORTB PORTB có 8 chân, mỗi chân được điều khiển là chân xuất hay nhập
bởi thanh ghi PORTB Nếu thanh ghi PORTB có giá trị 00000001b thì có nghĩa
là chân B0 là chân nhập dữ liệu, còn các chân B1-B7 là chân xuất dữ liệu
Gờ (flag)
Cờ cũng là 1bit, nhưng nó có chức năng đặc biệt hơn các bit khác nên người ta đặt tên cho nó Ta sẽ hiểu kỹ hơn về nó qua một ví dụ trong phần
timer
Trang 6Dinh thoi (Timer)
Định thời là một chức năng không thể thiếu của các vi điều khiển, nó cho phép vi điều khiển đếm thời gian Tuy nhiên không thể đếm một cách trực tiếp như con người được, timer đếm thời gian thông qua việc đếm xung dao động Một vi điều khiển có khoảng vài timer
Bộ định thời cũng là các thanh ghi, chúng được điều khiển bởi bit định
thời Khi ta set bit định thời bằng 1 thì thanh ghi định thời bắt đầu nhảy số 0,
1, 10 cho đến khi thanh ghi định thời có giá trị 11111111 Bit 7 của thanh
ghi định thời là một cỜ, bình thường thì bit này bằng 0, cho đến khi thanh ghi
đã đếm lên tới giá trị max thì bit này mới bằng 1, và sau đó thanh ghi timer lại
trả về giá trị 0 và bắt đầu đếm lại, , và nó chỉ dừng khi bit định thời được gán
bằng 0 trở lại CỜ này như một cách đánh dấu một chu kỳ đếm, giữa 2 lần cờ này bằng 1 là 256 giá trị đã được đếm
Cũng có timer nhiều hơn 8bit
Hợp ngữ ASM
Vi điều khiển muốn hoạt động được phải có các chỉ dẫn cho nó làm
việc, đó là các file hex Mở một file hex ta thấy toàn những 0 với 1 Con
người sẽ mất rất nhiều thời gian để viết nên 1 chương trình toàn 0 với 1, vì vậy người ta xây dựng các ngôn ngữ lập trình Thay vì viết 1 dòng lệnh toàn 0 với 1 thì ta viết một dòng lệnh khác tương đương nhưng gần gũi hơn với ngôn ngữ con người Ngôn ngữ càng gần với con người thì có cấp càng cao
ASM là ngôn ngữ gần với file hex nhất Làm việc với ASM ta chủ yếu làm việc với các bit, như việc set bit bằng 1 hay di chuyển giá trị từ thanh ghi
này sang thanh ghi khác,
Khối mạch của chúng ta gồm 3 phần:
+"IN":LM35-dùng để đo nhiệt đỘ và xuất ra giá trị điện áp tương Ứng
+"Xử Lý":PIC16F877A-dùng để chuyển đổi giá trị điện áp được xuất ra từ LM35 bằng cách dùng bộ ADC của PIC
+Hién thi:LCD
Để đo nhiệt độ ta dùng bộ ADC trong PIC16F877A,mình sẽ trình bày cụ thể dưới đây:
2 Sau khi tìm hiểu qua sách vở những khái niệm này từ xong, nhóm bắt
đầu chính thức tìm hiểu về PIC.
Trang 7Công cụ mô phỏng hữu hiệu là Proteus V7.7 SP2
Ngoài chương trình MPLAB IDE cũng được coi là phần mền lập trình biên dịch
khá mạnh cho Pic thì CCs cũng vậy
CCS là trình biên dịch lập trình ngôn ngữ C cho Vi điều khiển PIC của hãng
Microchip
Chương trình là sự tích hợp của 3 trình biên dich riêng biết cho 3 dòng PIC khác nhau đó
là:
_ PCB cho dòng PIC 12 -bit opcodes
_ PCM cho dòng PIC 14-bit opcodes
Trang 8PCH cho dong PIC 16 va 18-bit
Pee nz Pits dsded CilÐocum ldsdsd.c
overwrite (replace) existing } wemings | characters or are sorted
Trang 9Sơ đồ chân của PIC16F877A :
—Ÿ-PRA4/TOCKI/C1OUT RB1 [32—D [——|RA5/AN4/SS/C2OUT RBO/NT Oo C-—24 REO/RDIANS voo +34
Để PIC hoạt động ta cần cấp nguồn cho PIC Ngoài ra có thể thêm vào
bộ dao động thạch anh, và nút nhấn reset:
Trang 10R1
MCLR/VPP
RA0/AN0 RA1/AN1
RB7/PGD RB6/PGC $ RB5 RB4 RA2/AN2/VREF-/CVREF RB3/PGM RA3/AN3/VREF+
RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT
RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7
P RC2/CCP 1
P RC3/SCK/SCL RDO/PSPO RD1/PSP1
RB2 RB1 RBO/INT VDD GND RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4
RC7/RX/DT RCE6/TXICK 4 RC5/SDO RC4/SDI/SDA RD3/PSP3 RD2/PSP2
Trang 11%—FPRMITOCKIC IOUT RBI + X——|RA5/AMISSC20UT — RBOINT
Trang 12SƠ ĐỒ KHỐI ĐiỀU KHIỂN PIC16F877A
pred =m Hay Racianavearovner ANGNere
Trang 13
#use delay (clock=20000000)
void main()
{
//Thiet lap che do cho PORT B
Set_tris_b(0x00); //Tat ca PORT B deu la cong xuat du lieu
output_b(OxFF); //Mo het cac Led
While(TRUE) //Vong lap vo han
Trang 15Cau tric LCD
Polarizing filter (BO lọc phân cực) Điều khiển ánh sáng ởi vào và thoát ra
» Glass substrate (Hợp chất thuỷ tinh đặc biệt) Lọc chặn điện từ các điện
+ Liquid crystals ( Các tinh thể lỏng )
+ Spacer ( Khoảng trống ) Duy trì khoảng cách đều giữa các tấm kính
« Color filter ( BỘ lọc mầu ) Mầu được lọc và thể hiện khi dùng các bộ
lọc R, G và B
+ Backlighting ( Ánh sáng phía sau ) Ánh sáng được chiếu tỪ phía sau màn hình
xuyên qua các lớp trên, ở màn hình điện thoại, người ta sử dụng ánh sáng chiếu tỪ xung quanh sau đó dùng lớp phản xạ để hƯớng ánh sáng chiếu thẳng góc với màn hình từ sau về phía trước
Đây là LCD 2 hàng, mỗi hang 16 ký tự
Để sử dụng LCD, ta hãy đọc file “LCD.C” trong thư viện Driver
của CCS Ở đó CCS hướng dẫn cách ta đi dây cho các chân của
LCD, đồng thời CCS viết sẵn cho ta các hàm thao tác cho LCD:
Sơ đồ chân LCD :
Trang 16
Các điện cực X và Y sắp xếp thành hàng và dãy, mỗi điểm giao nhau có một
Transistor trường, chân S đấu vào điện cực Y, chân G đấu vào
điện cực X, khi Transistor dẫn thì chân D sẽ có điện áp bằng điện cực Y tạo
ra một điện áp chênh lệch với đế trên của LCD Mỗi Transistor sẽ điều khiển một điểm mầu, các tín hiệu ngắt mở được đưa đến điện cực X, tín hiệu Video được đưa đến điện cực Y, điện áp chênh lệch giữa điện cực X
và Y sẽ làm Transistor dẫn tạo ra một điểm mầu có cường đỘ sáng nhất định
aot Ejiiaren See acme Khen [ch ne
veur |*È te rommrw -L "reas
Trang 17II Chương trình chính
-_ PIC16E877 Driving LCD in 4-Bit Mode
CYỂ NEErI 06 NIET Bọ tUNG UEE giết 8i 182A
PIC16F877 driving LCD in 4-bit Mode
Labcenter | ssssar maesaeere
Fax: +0 1806250008 Tại: 04606088004 Electronics Emait_ngocchungcomputerdgmail WAM: http://w kASit net
Trang 18Các hàm thông dụng
Icd_initQ) : là hàm phải có để báo rằng sẽ sử dụng LCD
Icd_putc( char c) : hàm để xuất ký tự ra LCD
Icd_gotoxy( BYTE x, BYTE y) : hàm cho phép con trỏ nhảy tới vị trí
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG,
NOBROWNOUT, NOLVP, NOCPD, NOWRT
Trang 194 LM35
+
Đây là cảm biến nhiệt độ
LM35 có 3 chân : 2 chân cấp nguồn và 1 chân xuất điện áp ra tùy
Trang 20Features
Calibrated directly in ° Celsius (Centigrade)
Linear + 10.0 mV/’C scale factor
0.5°C accuracy guaranteeable (at +25°C)
Rated for full -55° to +150°C range
Suitable for remote applications
Low cost due to wafer-level trimming
Operates from 4 to 30 volts
Less than 60 pA current drain
Low self-heating, 0.08°C in still air
Nonlinearity only +¥%°C typical
Low impedance output, 0.1 Q for 1 mA load
Mô phỏng bằng Proteus:
Trang 21Nhiệt độ là 27C, điện áp xuất ra là V=0.27176 chứng tỏ sự tăng
10mV /C là khá chính xác
Khi mô phỏng Proteus, nếu khối LM35 không hoạt động, thì click chuột phải/ edit properties/ bỏ check exclude from Simulation di
5 Chức năng ADC của PIC16F877A
Chức năng ADC cho phép PIC nhận tín hiệu tương tự tỪ các chân có hỗ trợ ADC và chuyển tín hiệu đó sang tín hiệu số để xử lý
Các chân có hỗ trợ ADC của PIC16E877A là : A0 A1 A2 A3 A5 E0 E1 E2
Một số lệnh căn bản khi dùng ADC:
Muốn dùng ADC, ta phải khai báo #DEVICE cho biết dùng ADC may
bit, chẳng hạn #device*=16 ADC=8 cho biết dùng ADC 8 bit
.Value là ALL_ANALOGS : dùng tất cả các chân có hỗ trợ ADC
.Value là NO_LANALOG : khong ding ADC Value la ANi : dùng chân ANi là chân ADC Set_ADC_channel(channel) //chon chan dé doc gia tri analog bang 1€nh read_adc()
.Với PIC16F877A channel có 8 giá trị 0-7 tương ứng là các chân
A0-E2 như đã kể ở trên
.Để chính xác ta nên delay khoảng 10ms trước khi doc tín hiệu:
.Vd: set ADC_ channel(0);
delay_ms(10);
read = read_adc();
Sau đoạn code nay, read sẽ có giá trị bằng giá trị điện áp mà chân được
Trang 226 Tới đây ta đã đủ công cụ để làm mạch hoàn chỉnh
Mô phỏng bằng Proteus:
Kết quả :
Trang 23
PIC16F877 driving LCD in 4-bit Mode
GQDGG CÁO Cc==em son isis
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG,
NOBROWNOUT, NOLVP, NOCPD, NOWRT
Trang 25Khi dùng ADC 8bit, tín hiệu ADC đọc dugc tir chan ADC nhu sau:
Suy ra T = ADC*1000/10/51 = ADC * 1.960784314
Công thức này đã dùng ở đoạn code trên
TÀI LIỆU THAM KHẢO
Nguồn sách giáo trình và sách điện tử: