5:Các hàm hay dùng trong CCStôi sẽ trình bày theo mức độ quan trọng giảm dầnNếu a có giá trị =1 thì chương trình trên b=0; Nếu a có giá trị =7 thì chương trình trên b=10; -Hàm forvòng l
Trang 1TÀI LIỆU HỌC VI ĐIỀU KHIỂN PIC
Trang 2Chương I:
ÔN TẬP LẠI NGÔN NGỮ LẬP TRÌNH
C++
I:Tón tắt về ngôn ngữ c.
Ngôn ngữ lập trình C là một ngôn ngữ mệnh lệnh được phát triển từ
đầu thập niên 1970 bởi Ken Thompson và Dennis Ritchie để dùng trong hệđiều hành UNIX Từ dó, ngôn ngữ này đã lan rộng ra nhiều hệ điều hành khác và trở thành một những ngôn ngữ phổ dụng nhất C là ngôn ngữ rất
có hiệu quả và được ưa chuộng nhất để viết các phần mềm hệ thống, mặc
dù nó cũng được dùng cho việc viết các ứng dụng Ngoài ra, C cũng
thường được dùng làm phương tiện giảng dạy trong khoa học máy
tính mặc dù ngôn ngữ này không được thiết kế dành cho người nhập môn
II:Cá cấu trúc lệnh biến,hằng, hàm, mảng, chương trình con trong c++(cụ thể là phần mềm CCS).
2:Các kiểu biến sử dụng trong CCS
-Int1 kiểu logic 1 or 0
- Int8,Int,short,byte số nguyên 8 bit (-127 đến 127)
-Int16 số nguyên 16bit
-Int32 số nguyên 32 bit
-char ký tự 8 bit
-float số thực 32 bit
Trang 3-long số nguyên 16 bit
-double số thực có độ chính xác cao
3:Định nghĩa biến và sử dụng
-Ví dụ sau sẽ giúp bạn hiểu về biến
Int8 a; //khai báo biến a 8 bit
Int b=5; //Khai báo biến b 8 bit và gán giá trị bằng 5
Int c; //khai báo biến a 8 bit
a=10; //Gán giá trị cho a=10
a=a+2; // a=10+2=12 biến a mang giá trị mới bằng 12
c=a+b; // c=12+5=17 biến c mang giá trị mới =17
Tóm lại là biến sau khi đưa vào tính toán thì nó bị thay đổi giá trị đi
-Ví dụ khai báo mảng-Mảng là một tập hợp các biến cùng tên cùng kiểu
dữ liệu nhưng khác chỉ số
Int8 abc[10]; //mảng abc có 10 phần tử từ abc[0] đến abc[9]
abc[0]=5; //Gán giá trị cho phần tử thứ 1 trong mảng abc =5
abc[1]=7; //Gán giá trị cho phần tử thứ 2 trong mảng abc =7
c=abc[0]+abc[1]; //Biến c có giá trị =5+7=12
c=a+b; // Biến c có giá trị là 2+2=4
Nếu dùng như sau là không được vì hằng số không thể thay đổi giá trị a=b+3;
Trang 45:Các hàm hay dùng trong CCS(tôi sẽ trình bày theo mức độ quan trọng giảm dần)
Nếu a có giá trị =1 thì chương trình trên b=0;
Nếu a có giá trị =7 thì chương trình trên b=10;
-Hàm for(vòng lặp)
for(biến chạy;điều kiện;thay đổi biến){chương trình A }
Giải thích, hàm này sẽ tạo ra một vòng lặp với một số lần quy ước của người sử dụng
VD:
Trang 5Sau chương trình này biến b sẽ mang giá trị bằng 0.
6:Các hàm xử lý toán số , toán học trong CCS.
gán giá trị của biến a bằng giá trị đang chứa trong biến b Chú ý rằng
chúng ta chỉ gán giá trị của b cho a và sự thay đổi của b sau đó sẽ không ảnh hưởng đến giá trị của a
Một thuộc tính của toán tử gán trong C++ góp phần giúp nó vượt lên các ngôn ngữ lập trình khác là việc cho phép vế phải có thể chứa các phép gánkhác Ví dụ:
Trang 6Thứ tự thực hiện các toán tử này cũng giống như chúng được thực hiện trong toán học Điều duy nhất có vẻ hơi lạ đối với bạn là phép lấy phần dư,
ký hiệu bằng dấu phần trăm (%) Đây chính là phép toán lấy phần dư trongphép chia hai số nguyên với nhau Ví dụ, nếu a = 11 % 3, biến a sẽ mang giá trị 2 vì 11 = 3*3 +2
Các toán tử gán phức hợp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
Một đặc tính của ngôn ngữ C++ làm cho nó nổi tiếng là một ngôn ngữ súc tích chính là các toán tử gán phức hợp cho phép chỉnh sửa giá trị của một biến với một trong những toán tử cơ bản sau:
value += increase; tương đương với value = value + increase;
a -= 5; tương đương với a = a - 5;
a /= b; tương đương với a = a / b;
price *= units + 1; tương đương với price = price * (units + 1);
và tương tự cho tất cả các toán tử khác
Tăng và giảm
Một ví dụ khác của việc tiết kiệm khi viết mã lệnh là toán tử tăng (++) và giảm ( ) Chúng tăng hoặc giảm giá trị chứa trong một biến đi 1 Chúng tương đương với +=1 hoặc -=1 Vì vậy, các dòng sau là tương đương:a++;
a+=1;
a=a+1;
Một tính chất của toán tử này là nó có thể là tiền tố hoặc hậu tố, có nghĩa
là có thể viết trước tên biến (++a) hoặc sau (a++) và mặc dù trong hai biểu thức rất đơn giản đó nó có cùng ý nghĩa nhưng trong các thao tác khác khi
mà kết quả của việc tăng hay giảm được sử dụng trong một biểu thức thì chúng có thể có một khác biệt quan trọng về ý nghĩa: Trong trường hợp toán tử được sử dụng như là một tiền tố (++a) giá trị được tăng trước khi biểu thức được tính và giá trị đã tăng được sử dụng trong biểu thức; trong trường hợp ngược lại (a++) giá trị trong biến a được tăng sau khi đã tính toán Hãy chú ý sự khác biệt:
Để có thể so sánh hai biểu thức với nhau chúng ta có thể sử dụng các toán
tử quan hệ Theo chuẩn ANSI-C++ thì giá trị của thao tác quan hệ chỉ có thể là giá trị logic - chúng chỉ có thể có giá trị true hoặc false, tuỳ theo biểu thức kết quả là đúng hay sai
Sau đây là các toán tử quan hệ bạn có thể sử dụng trong C++
Trang 7(a*b >= c) sẽ trả giá trị true.
(b+4 < a*c) sẽ trả giá trị false
Cần chú ý rằng = (một dấu bằng) lf hoàn toàn khác với == (hai dấu bằng) Dấu đầu tiên là một toán tử gán (gán giá trị của biểu thức bên phải cho biến ở bên trái) và dấu còn lại (==) là một toán tử quan hệ nhằm so sánh xem hai biểu thức có bằng nhau hay không
Trong nhiều trình dịch có trước chuẩn ANSI-C++ cũng như trong ngôn ngữ
C, các toán tử quan hệ không trả về giá trị logic true hoặc false mà trả về giá trị int với 0tương ứng với false còn giá trị khác 0 (thường là 1) thì tươngứng với true
Các toán tử logic (!, &&, ||)
Toán tử ! tương đương với toán tử logic NOT, nó chỉ có một đối số ở phía bên phải và việc duy nhất mà nó làm là đổi ngược giá trị của đối số từ true sang false hoặc ngược lại Ví dụ:
Đối số thứ nhất
a
Đối số thứ haib
Kết quả
a && b
Kết quả
a || b
Trang 8false False false false
Ví dụ:
( (5 == 5) && (3 > 6) ) trả về false ( true && false )
( (5 == 5) || (3 > 6)) trả về true ( true || false )
Toán tử điều kiện ( ? )
Toán tử điều kiện tính toán một biểu thức và trả về một giá trị khác tuỳ thuộc vào biểu thức đó là đúng hay sai Cấu trúc của nó như sau:
condition ? result1 : result2
Nếu condition là true thì giá trị trả về sẽ là result1, nếu không giá trị trả về
là result2
7==5 ? 4 : 3 trả về 3 vì 7 không bằng 5
7==5+2 ? 4 : 3 trả về 4 vì 7 bằng 5+2
5>3 ? a : b trả về a, vì 5 lớn hơn 3
a>b ? a : b trả về giá trị lớn hơn, a hoặc b
Các toán tử thao tác bit (&, |, ^, ~, <<, >>)
Các toán tử thao tác bit thay đổi các bit biểu diễn một biến, có nghĩa là thayđổi biểu diễn nhị phân của chúng:
Toán tử asm Mô tả
& AND Logical AND
<< SHL Dịch bit sang trái
SHR Dịch bit sang phảiCác toán tử chuyển đổi kiểu
Các toán tử chuyển đổi kiểu cho phép bạn chuyển đổi dữ liệu từ kiểu này sang kiểu khác Có vài cách để làm việc này trong C++, cách cơ bản nhất được thừa kế từ ngôn ngữ C là đặt trước biểu thức cần chuyển đổi tên kiểu dữ liệu được bọc trong cặp ngoặc đơn (), ví dụ:
là sử dụng các constructors (ở một số sách thuật ngữ này được dịch là cấu
tử nhưng tôi thấy nó có vẻ không xuôi tai lắm) thay vì dùng các toán tử: Đặt trước biểu thức cần chuyển đổi kiểu tên kiểu mới và bao bọc biểu thứcgiữa một cặp ngoặc đơn
Trang 9i = int ( f );
Cả hai cách chuyển đổi kiểu đều hợp lệ trong C++ Thêm vào đó ANSI-C++ còn có những toán tử chuyển đổi kiểu mới đặc trưng cho lập trình hướngđối tượng
sizeof()
Toán tử này có một tham số, đó có thể là một kiểu dữ liệu hay là một biến
và trả về kích cỡ bằng byte của kiểu hay đối tượng đó
a = sizeof (char);
a sẽ mang giá trị 1 vì kiểu char luôn có kích cỡ 1 byte trên mọi hệ thống Giá trị trả về của sizeof là một hằng số vì vậy nó luôn luôn được tính trước khi chương trình thực hiện
6:Viết một chương trình con (Cái này sử dụng nhiều và quan trong).
Nếu ta gọi hàm con
c=tinhtoan(5); thì c se mang giá trị là 10
-Kiểu không trả về kết quả
Void tenchuongtrinhcon(cac bien truyen vao)
Trang 10Bài 1:Viết một chương trình vòng lặp for biến i chạy từ 20 về 0.
Bài 2:Viết một chương trình sử dụng if-else kiểm tra biến a nếu a>0 thì thực hiện vòng lặp for biến i chạy từ 0 đến 10 ,nếu a<0 thì biến i chạy từ 10
về 0
Bài 3: Viết một chương trình sử dụng If-else
Nếu 5<=a<=10 thì b=10
Nếu 11<=a<=15 thì b=15
Nếu a<5 hoặc a>15 thì b=0
III:Làm quen với CCS
-CCs là một môi trường lập trình phổ biến cho dòng PIC sử dụng cả ngôn ngữ c và asm
-Ở tài liệu này,ta lập trình trên ngôn ngữ C
-Ngôn ngữ C giúp người dùng tiếp cận và học PIC nhanh hơn, ta không cần quan tâm tới cấu trúc của Pc như thế nào, hay các thanh gi và địa chỉ các thanh gi như nào.với C ta chỉ cần quan tâm duy nhất tới một thứ đó là
Cú pháp câu lệnh, để ta sử dụng nó lập trình cho PIC
Trang 11-Một điều nữa mà C mang lại là ta có thế dễ dàng viết ra ý tưởng hay thuậttoán trong đầu trên ngôn ngữ C một cách đơn giản.gần như là nghĩ được
IV:Ôn lại một số linh kiện điện tử cơ bản,
-Tụ điệu, điện trở, tranzito
-Xem lại trong quấn điện tử cơ bản đính kèm file.
Trang 12Chương II:
HỌC PIC CƠ BẢN CÁC DỰ ÁN CƠ ĐƠN GIẢN CHO
NGƯỜI MỚI BẮT ĐẦU
Bài 1:CƠ BẢN VỀ VDK PIC
1)Giới thiệu về VDK PIC.
- VDK PIC là một họ vi điều khiển có khả năng lập trình để xử lý tính toán
số liệu hay điều khiển các modul thết bị ngoại vi
-Là một dòng VDK mạnh giải quyết được nhiều bài toán ,ứng dụng trongthực tế
- PIC hỗ trợ lập trình trên ngôn ngữ C
-PIC hỗ trợ nhiều modul phần cứng nhưng ADC, PWM, RS232, USB,SPI, I2C
-PIC mình nghiên cứu ở trong tài liệu này là PIC 16F887.Gồm có 34 chân
in out dữ liệu, 14 chân ADC, 3 timer, 8k byte rom, 256 byte EEPROM , 368byte RAM
- Phần mềm lập trình CCS bản 4.104
Trang 14Tạo trể +delay_ms(value); tạo trễ một khoảng thời gian ms.
+delay_us(value); tạo trễ một khoảng thời gian us
+delay_cycles (count): tạo trễ theo chu kỳ lệnh
Tất cả các lệnh của CCS các bạn có thể xem trong phần trợ giúp của phầnmềm
Bài 2:XUẤT DỮ LIỆU
1)Các lệnh cơ bản xuất dữ liệu
-Lệnh output_high(PIN_X?);
Lệnh này xuất dữ liệu mức 1 ra một chân của vi điều khiển
VD: Ta xuất ra chân A1 của vi điều khiển mức 1bằng lệnh này
Output_high(PIN_A1);
-Lệnh output_low(PIN_X?);
Lệnh này xuất dữ liệu mức 0 ra một chân của vi điều khiển
VD: Ta xuất ra chân B2 của vi điều khiển mức 1bằng lệnh này
Output_low(PIN_B2);
-Lệnh output_bit (pin, value);
Lệnh này xuất dữ liệu value ra một chân của vi điều khiển.dữ liệu ở đây có giá trị là 0 hoặc 1, các số khác số 0 đều có giá trị bằng 1
VD:Ta xuất ra chân C1 của vi điều khiển một mức nào đấy
Trang 15Những câu lệnh trên đều có tác dụng làm cho chân B0 xuống mức thấp.
-Lệnh output_X ( value);
Lệnh này xuất dữ liệu ra một cổng của VDK với giá trị là value
VD: output_B(0x00) xuất ra cổng b tất cả các chân đều ở mức thấp(mức 0)
output_B(0xff) xuất ra cổng b tất cả các chân đều ở mức cao(mức 1) output_B(0x0f) các chân B0->B3 mức cao.Các chân B4-B7 mức thấp
2)Thực hành xuất dữ liệu trên PIC.
+ Lập trình nhấp nháy 1 bóng led -8 bóng led,hoặc 8 chữ cái gồm nhiều led,relay on off thiết bị
Trang 16+Chương trình on off một re lay nối vào chân B1, thời gian đóng cắt 2 giây.
#include <On off.h>
Bài 2: Viết một chương trình nháy 16 led đơn với 5 hiệu ứng nháy, trong đó
có 1 kiểu chạy từ phải sang trái
Bài 3 : Viết một chương trình nháy 8 led đơn từ phải sang trái (trên xuống dưới) sử dụng vòng lặp for và phép dịch bit
Bài 4 : Thiết kế một biển led quảng cáo nháy chữ “DAM ME CONG
NGHE”, Mỗi chữ cái gồm 50 led đơn nói song song với nhau.Lập trình với trên 10 kiểu nháy đẹp mắt
Trang 17Thiết kế mạch nguyên lý chi tiết trên giấy khổ A4, mô phỏng trên phẩn mềm Proteus và code lập trình.(Buổi tới đi học mang đi để kiểm tra và sửa lỗi).
Bài 3:LED 7 THANH
1)Tìm hiểu về led 7 thanh
Khái niệm cơ bản
Led 7 thanh có cấu tạo bao gồm 7 led đơn có dạng thanh xếp theo Hình 1.1 dưới và có thêm một led đơn hình tròn nhỏ thể hiện dấu chấm tròn ở góc dưới, bên phải của led 7 thanh 8 led đơn trên led 7 đoạn có Aode(cực +) hoặc Cathode(cực -) được nối chung với nhau vào một điểm, được đưa chân ra ngoài để kết nối với mạch điện
8 cực còn lại trên mỗi led đơn được đưa thành 8 chân riêng:
Nếu led 7 đoạn có Anode(cực +) chung, đầu chung này được nối với +Vcc,các chân còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 0
Nếu led 7 đoạn có Cathode (cực -) chung, đầu chung này được nối xuống Ground (hay Mass), các chân còn lại dùng để điều khiển trạng thái sáng tắtcủa các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 1
Hình 1.1
Bảng giá trị tín hiệu
Trang 18-Chung A
=>
-Chung K
=>
2)Thực hành hiển thị led 7 thanh.
a Led 7 thanh đơn
Ví dụ:sơ đồ mô phỏng như sau
Chương trình hiển thị số 1 lên led 7 thanh
b.Led 7 thanh kép và phương pháp quét led
-Hiệu ứng lưu ảnh của mắt: hiểu đơn giản như thế này, có 1 bóng led tắt rồi bật, lúc đầu cứ 1s sáng thì lại tắt 1s nghĩa là chu kỳ 2 s, rồi giảm chu kỳ
ấy xuống 1s ta vẫn thấy bóng led đấy nháy, khi ta giảm chu kỳ xuống 1ms thì lúc đó mắt ta nhìn thấy gì? Trả lời được câu hỏi thì bạn cũng đã hiểu về hiệu ứng lưu ảnh của mắt
Trang 19- Phương pháp quét led: Ta có mạch nguyên lý như dưới đây.
Gồm 2 led loại chung A được mắc chung chân dữ liệu
bây giờ bạn hãy thử đoạn chương trình sau,và thay đổi tham số chuky nhỏdần từ 1s đến nhỏ hơn 1/24/a s xem nhé.(a là số led 7 thanh)
Trang 20c.Hiển thị một số có 2 chữ số trên led
Bài 1) Lập trình hiển thị led 7 thanh chạy từ 0->9 chu kỳ 500ms
Bài 2) Lập trình hiển thị led 7 thanh chạy từ 000->150 chu ky 200ms
Bài 3) Lập trình hiển thị led 7 thanh chạy từ 0->50 rồi nhảy lên 60->100
Bài 4) Có 7 biến giờ phút giây thư ngày tháng năm được lưu trong các biếnhour,min,sec,day,date,month,year Hãy mô phỏng trên proteus và viết
chương trình hiển thị các biến trên bằng phương pháp quét led, triển khai
sơ đồ nguyên lý chi tiết ,cụ thể trên giấy A4.Buổi sau đi học mang bài đến nộp
Bài 4:ĐỌC DỮ LIỆU-INPUT
1)Các lệnh cơ bản đọc vào dữ liệu.
a=input(PIN_X); //đọc giá trị logic ở một chân của vdk
VD:
a=input(PIN_A1) ;
Trang 21Nếu chân A1 ở mức cao thì biến a mang giá trị là 1 còn chân A1 ở mức thấp thì biến a mang giá trị là 0.
Sơ đồ mô phỏng dưới đây.
-Viết chương trình khi nhấn nút trên thì động cơ quay và nhấn nút dưới thì động cơ ngừng quay, tức là đưa ra chân D0 mức cao sẽ làm mở Tip41 đóng re lay relay tác động thì tiếp điểm thường mở sẽ thành thường đóng, mạch kín động cơ quay, và ngược lại
-Code
#include <nut nhan.h>
#define Relay_on output_high(PIN_D0)
#define Relay_off output_low(PIN_D0)
Trang 22-Lập trình đọc dữ liệu vào từ cổng C và xuất ra led cổng D.
#include <nut nhan.h>
-Giới thiệu về modul thu phát RF
-Modul thu và sơ đồ chân
Trang 23Có 2 loại modul thu RF là loại giữ mức và loại không giữ mức.
-Modul phát 4 kênh và hình ảnh thực tế
-Kết nối bộ RF 4 kênh vào 4 chân input của vi điều khiển ta lập trình đọc
dữ liệu tương tự như nút nhấn
-Bộ RF ở trong bài học này là loại giữ mức nên ta sẽ dùng để điều khiển 4relay đóng cắt cho 4 thiết bị điện trong nhà
d.Cảm biến chuyển động
-Hình ảnh cảm biến
Trang 24Sơ đồ chân.
Cách sử dụng rất đơn giản: Khi có người trong vùng cảm biến có thể phát hiện ra được thì chân Out của cảm biến sẽ out ra mức cao nhưng ở dạng xung , ta đưa vào một chân VDk để đọc tín hiệu đó vào và xử lý bật và tắt một relay để đóng mở một thiết bị nào đấy
Trang 252) Lập trình và mô phỏng chương trình một nút nhấn nối vào cổng B0 nếu nút nhấn thì giá trị trên led 7 thanh tăng lên 1 sử dụng 2 led 7 thanh hiển thị bằng phương pháp quét led.
3) Đọc dữ liệu 1 cổng từ Dipswhich và hiển thị giá trị 8 bit của cổng đó lên led 7 thanh VD: giá trị cổng B=0x12=18 thì led 7 thanh phải hiển thị số 018
4) Lập trình và mô phỏng nhận dữ liệu từ 4 đầu vào nếu ở mức cao thì bật một relay nối ở bất kỳ 1 cổng nào đấy.còn mức thấp thì tắt relay tương ứng
5) Lập trình đầu vào dữ liệu cho 4 nút nhấn, cứ mỗi lần nhấn thì thay đổi mức logic cho một chân ra của vdk để đóng cắt một relay
6) BÀI TẬP TỔNG HỢP
-Thiết kế một dự án điều khiển 4 thiết bị điện từ xa bằng modul RF 4 kênh (modul không giữ mức) 3 kênh A B C điều khiển 3 thiết bị điện,nhấn một lần mở, nhấn thêm lần nữa tắt Còn kênh D để mở một bóng điện kết hợp với cảm biến chuyển động, khi mở bóng mà người còn trong phòng thì bóng sáng, người ra khỏi phỏng một thời gian thì bóng tắt
(Bao gồm code lập trình, mô phỏng và mạch nguyên lý chi tiết)
Bài 5:CHUYỂN ĐỔI ADC
-VD ta có một tín hiệu điện áp thay đổi trong dải từ 0V-5V ta chọn điện áp
so sánh là 0-5V ,và độ phân giải ADC là 8 bit , tại một thời điểm điện áp là 2,5V thì tín hiệu tương tự này sau khi chuyển đổi có giá trị là 127.
2)Cách cấu hình và sử dụng ADC trong PIC.
-PIC 16f887 hỗ trợ 2 độ phân giải chuyển đổi ADC là 8 bit và 10 bit Sau đây là một chương trình đơn giản về chuyển đổi ADC và hiển thị giá trị ADC chuyển đổi được lên LED 7 thanh
Trang 26int8 const Led[6]={0x00,0x01,0x02,0x04,0x08};
//Chương trình quét led
Void Quetled(int i,int j){
setup_adc_ports(sAN0); //Thiết lập chân chuyển đổi ADC
setup_adc(ADC_CLOCK_DIV_2); //Thiết lập tần số lấy mẫu
while(TRUE)
{
set_adc_channel(0); // Chọn kênh cần lấy mẫu
delay_us(10); // Trễ chờ chuyển đổi
Trang 27value = read_adc(); // Hàm đọc về giá trị ADC
Quetled(value/1000,1); //Đoạn chương trình hiển thị led 7
Cụ thể cách cài đặt và ý nghĩa sẽ được hướng dẫn chi tiết trên lớp.
3)Cảm biến tương tự và cách đo, đọc kết quả để xử lý.
-Cảm biến tương tự là các loại cảm biến tín hiệu đo được , được trả về
bằng tín hiệu tương tự.
-Khi có trong tay một cảm biến ta phải xác định xem nó trả về kết quả dưới dạng gì,số hay tương tự.Cách nhanh nhất là tra Datasheet của nhà sản xuất để biết được thông số và dạng tín hiệu trả về.
VD: ta có một cảm biến đo áp suất tương tự tín hiệu là tuyến tính,theo thông số của nhà sản xuất thì dải tín hiệu từ 0-5v tương ứng với áp suất là
0 atm tới 250 atm thì ta làm sao để có thể đọc được kết quả giá trị áp suất tại một thời điểm.Giả sử ta chuyển đổi ADC 10 bit của VDK để đo áp suất, tại thời điểm t ta đọc được giá trị ADC=756,bằng công thức sau ta suy ra được kết quả áp suất tại thời điểm đó tính bằng atm.
Giá trị vật lý=( kết quả ADC/độ phân giải)*Thang đo.
(Công thức này chỉ dùng với cảm biến trên này thôi, mỗi cảm biến một công thức khác nhau)
Giá trị áp suất =(756/1023)*250=184.75 atm.
4)Thực hành và làm ứng dụng với cảm biến nhiệt độ
Trang 28K=307/150°C = 2.046
Trang 29Bây giờ ta dùng PIC để đọc giá trị ADC từ cảm biến về được kế quả ta sẽtính toán bằng phép tính sau sẽ ra được kết quả nhiệt độ hiện tại.
Trang 30int8 const Led[6]={0x00,0x01,0x02,0x04,0x08};
Void Quetled(int i,int j){
Trang 31-LED thu hồng ngoại: Cũng tương tự quang trở là điện trở suất của nó giảm xuống rất nhanh khi có tia hồng ngoại chiếu vào.
-Cả hai đều có thể coi là những biến trở, giá trị điện trở sẽ thay đổi khi có những điều kiện ảnh hướng tới điện trở suất thay đổi,Vì thế phương pháp
sử dụng 2 loại cảm biến này trong thực tế là mắc nối tiếp nó với một điện trở khác để tạo thành mạch phân áp
-Mắc nguyên lý
Trang 32Từ mạch trên ta thấy, điện áp tại điểm Out sẽ bằng
Vout=Vcc/(Rp+R)*R
-Rp là điện trở của Phôt Diode , là quang trở hay là led hồng ngoại
-Trong biểu thức ta thấy Vcc và R không đổi còn Rp sẽ thay đổi theo
cường độ ánh sáng hay cường độ tia hồng ngoại chiếu vào nó nên => Vcc
sẽ thay đổi theo, từ đấy ta đọc ADC và được kết quả để xử lý
Bài tập:
Bài 1) Đọc giá trị nhiệt độ cảm biến LM35 hiển thì nhiệt độ lên LED 7
thanh và điều khiển tốc độ quạt.Quạt có 3 số khoảng nhiệt độ từ 27-30 số
1 từ 30-33 số 2, từ 33 trở lên là số 3, nhỏ hơn 27 độ là số 0
Trang 33HD:dùng re lay để đóng cắt tiếp điểm của quạt.(xem lại phần relay).
Bài 2) Thiết kế một đồng hồ vạn năng, đo điện áp một chiều DC đo được điện áp <= 50v Hiển thị kết quả đo trên led 7 thanh
Bài 3) Lập trình hệ thống phát hiện trời tối để bật tắt bong điện chiếu sáng đường
Bài 4) Lập trình hệ thống chống trộm bằng hồng ngoại,hoặc laze khi có trộm thì đóng chuống kêu.(Chuông 12V-DC)
Bài 5) Thiết kế bao gồm( Sơ đồ nguyên lý chi tiết+mô phỏng+lập trình) Hệ thống gia nhiệt lò ấp trứng Lò ấp bao gồm điều khiển
+ 1 quạt 220V AC trao đổi khí lò ấp với môi trường ngoài,hoạt động theo chu kỳ cứ 1 phút mở một lần 5s
+ Nhiệt độ trong lò đặt được bằng nút nhấn
(Trình bày bài 3 sơ đồ nguyên lý trên giấy A4 vẽ sạch sẽ cẩn thận, buổi sau
đi học mang theo để kiểm tra và sửa lỗi)
Bài 6:HIỂN THỊ LCD
1)Giới thiệu về LCD.
-Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, LCD16x2 là một loại LCD thông dụng
Hình dáng của loại LCD thông dụng
- Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780)
bên trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết Các chân này được đánh số thứ tự và đặt tên như hình 2 :
Trang 34Sơ đồ chân của LCD
- Chức năng các chân :
1 Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND của mạch điều khiển
2 VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với VCC=5V của mạch điều khiển
3 VEE Điều chỉnh độ tương phản của LCD
Chân chọn thanh ghi (Register select) Nối chân RS với logic
“0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD
Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/W với logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1”
để LCD ở chế độ đọc
6 E Chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được
Trang 35LCD giữ ở bus đến khi nào chân E xuống mức thấp.
Còn khi ở chế độ “ghi”, nghĩa là MPU xuất thông tin điều khiển cho LCD
thông qua các chân DBx
2)Ghép nối LCD với VDK PIC.
-Giao tiếp LCD 16x2 với vi điều khiển PIC16F887 ở chế độ 4 bit.
-Sơ đồ ghép nối chân
-Biến trở RV1 để điều chỉnh độ tương phản cho LCD.