BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRUỜNG ĐẠI HỌC SƯ PHẠM THÀNH PHỐ HỒ CHÍ MINH

KHOA VẬT LÝ

NGUYỄN HUỲNH DUY KHANG

ỨNG DỤNG VI ĐIỀU KHIỂN PIC 16F877A TRONG THÍ NGHIỆM VẬT LÍ PHỔ THÔNG

Ngành: SƯ PHẠM VẬT LÝ

Mã số: 102

GV. TRẦN ĐẶNG BẢO ÂN NGƯỜI HƯỚNG DẪN KHOA HỌC

Tp. Hồ Chí Minh, 2013

LỜI CẢM ƠN

ể hoàn thành luận văn tốt nghiệp Đại học này, trước hết, em xin gửi

lời cảm ơn sâu sắc nhất đến GV. Trần Đặng Bảo Ân – Bộ môn Vật lý

Ứng dụng – Trường Đại Học Sư Phạm Thành Phố Hồ Chí Minh, người đã tận

tình hướng dẫn, chỉ bảo em trong suốt quá trình nghiên cứu, thực hiện luận văn

và đã giành hết tâm huyết, thời gian quí báu của mình để cho em điều kiện tốt

Đ

nhất hoàn thành luận văn này.

Em xin chân thành cảm ơn Ban chủ nhiệm Khoa Vật lý, các thầy cô Khoa

Vật lý Trường Đại Học Sư Phạm Thành Phố Hồ Chí Minh – những người đã

trang bị cho em những kiến thức hữu ích giúp em hoàn thành luận văn này.

Cuối cùng, xin gửi lời cảm ơn đến gia đình, bạn bè đã động viên, chia sẻ,

giúp đỡ nhiệt tình và đóng góp nhiều ý kiến quí báu giúp em hoàn thành luận

văn.

3 MỤC LỤC

MỤC LỤC ............................................................................................................................................... 3 DANH MỤC CÁC HÌNH VẼ ............................................................................................................. 5 DANH MỤC CÁC BẢNG ................................................................................................................. 11 MỞ ĐẦU .............................................................................................................................................. 14

Giới thiệu chung ........................................................................................................ 14

Mục đích đề tài........................................................................................................... 15

Nội dung nghiên cứu ............................................................................................... 15

1. 2. 3. 4.

......................................................................

Đối tượng nghiên cứu và phạm vi nghiên cứu ............................................ 15

Phương pháp nghiên cứu ..................................................................................... 16 5.

TỔNG QUAN VI ĐIỀU KHIỂN PIC 17

GIỚI THIỆU CHUNG ................................................................................................. 17

KIẾN TRÚC PIC .......................................................................................................... 18

RISC VÀ CISC ............................................................................................................... 19

PIPELINING ................................................................................................................. 20

CHƯƠNG 1: 1.1. 1.2. 1.3. 1.4. 1.5.

.............................................................................

NGÔN NGỮ LẬP TRÌNH CHO PIC ...................................................................... 22

MẠCH NẠP PIC .......................................................................................................... 23

VI ĐIỀU KHIỂN PIC 16F877A 25

SƠ ĐỒ CHÂN ............................................................................................................... 25

............................................................

CÁC THÔNG SỐ CỦA PIC 16F877A ................................................................... 25 1.6. CHƯƠNG 2: 2.1. 2.2.

CÁC MODUL VI ĐIỀU KHIỂN PIC 16F877A ................................................... 27

CÁC LINH KIỆN ĐIỆN TỬ LIÊN QUAN 40

HIỂN THỊ LCD ............................................................................................................ 40

MA TRẬN BÀN PHÍM .............................................................................................. 44

IC MAX – 232 .............................................................................................................. 45

IC LM – 324 ................................................................................................................. 46 2.3. CHƯƠNG 3: 3.1. 3.2. 3.3. 3.4.

4.1.

THẠCH ANH ĐIỆN TỬ ............................................................................................ 47 3.5. CHƯƠNG 4:ỨNG DỤNG VI ĐIỀU KHIỂN PIC 16F877A TRONG THÍ NGHIỆM VẬT LÍ PHỔ TH

TỔNG QUAN ................................................................................................................ 49

4.2. DỤNG CỤ ĐO VÀ XỬ LÍ THỜI GIAN SỬ DỤNG PIC 16F877A ................ 50

4.3.

4

...........................................................

KHỐI XỬ LÍ TRUNG TÂM PIC 16F877A .......................................................... 50

ĐÁNH GIÁ SAI SỐ ..................................................................................................... 61

KẾT QUẢ NGHIÊN CỨU VÀ KẾT LUẬN 66

XÁC ĐỊNH CHU KÌ CON LẮC ĐƠN ..................................................................... 66

XÁC ĐỊNH GIA TỐC RƠI TỰ DO .......................................................................... 68

XÁC ĐỊNH HỆ SỐ MA SÁT TRƯỢT .................................................................... 71

XÁC ĐỊNH VẬN TỐC TRUNG BÌNH, VẬN TỐC TỨC THỜI ....................... 75

4.4. CHƯƠNG 5: 5.1. 5.2. 5.3. 5.4. 5.5. KẾT LUẬN .................................................................................................................... 79

5.6. HƯỚNG PHÁT TRIỂN ............................................................................................. 79

TÀI LIỆU THAM KHẢO ................................................................................................................. 81 PHỤ LỤC ............................................................................................................................................. 83

5

DANH MỤC CÁC HÌNH VẼ

1.1 Kiến trúc Von – Neuman

.................................................................................................................................. 1

1

1.2 Kiến trúc Harvard

.................................................................................................................................. 1

2

2.1 Vi điều khiển PIC 16F877A

.................................................................................................................................. 1

7

2.2 Sơ đồ chân PIC 16F877A

.................................................................................................................................. 1

7

2.3 Các modul PIC 16F877A được sử dụng.

.................................................................................................................................. 1

9

2.4 Sơ đồ logic các ngắt trong vi điều khiển PIC 16F877A

.................................................................................................................................. 2

5

2.5 Sơ đồ khối truyền dữ liệu USART

.................................................................................................................................. 2

6

2.6 Sơ đồ khối nhận dữ liệu USART

.................................................................................................................................. 2 × 9

3.1 LCD 20 4

.................................................................................................................................. 3

1

6

×

20 4 3.2 Sơ đồ chân LCD

.................................................................................................................................. 3 × 1

3.3 Ma trận bàn phím 4 4

.................................................................................................................................. 3 × 4

3.4 Sơ đồ ma trận bàn phím 4 4

.................................................................................................................................. 3

4

3.5 Max – 232 IC

.................................................................................................................................. 3

6

3.6 Sơ đồ chân IC LM – 324

.................................................................................................................................. 3

6

3.7 LM – 324 IC

.................................................................................................................................. 3

6

3.8 Sơ đồ chân IC LM – 324

.................................................................................................................................. 3

6

4.1 Kiểm tra các bộ phận trên testboard và Proteus

.................................................................................................................................. 3

9

4.2 Quá trình thực hiện

.................................................................................................................................. 4

0

7

4.3 Sơ đồ khối dụng cụ đo và xử lý thời gian

.................................................................................................................................. 4

1

4.4 Lưu đồ chương trình chính

.................................................................................................................................. 4

2

4.5 Lưu đồ chương trình con: (a) con lắc đơn; (b) rơi tự do

.................................................................................................................................. 4

2

4.6 Lưu đồ chương trình con: (a) Hệ số ma sát; (b) Chuyển động

thẳng đều

.................................................................................................................................. 4

3

4.7 Code bẫy lỗi cho vi điều khiển PIC 16F877A

.................................................................................................................................. 4

4

4.8 Cạnh tác động TMR1H:TMR1L

.................................................................................................................................. 4

4

4.9 Bộ định thời cho PIC 16F877A

.................................................................................................................................. 4

5

4.10 Giao tiếp RS232 qua IC Max – 232

.................................................................................................................................. 4

5

4.11 Giao diện giao tiếp với máy tính cho PIC 16F877A

.................................................................................................................................. 4

6

8

4.12 Thí nghiệm con lắc đơn dùng giao tiếp máy tính

.................................................................................................................................. 4

6

điện 4.13 Cổng quang

.................................................................................................................................. 4

7

châm 4.14 Ngắt nam

.................................................................................................................................. 4 × 8

4.15 Ma trận bàn phím 4 4

.................................................................................................................................. 4

8

4.16 Hiển thị LCD

.................................................................................................................................. 4

8

4.17 Cấu trúc dữ liệu kiểu số thực 32 bits

.................................................................................................................................. 4

9

4.18 Sai số do code lập trình

.................................................................................................................................. 5

0

4.19 Kết quả đo của máy MC – 964 sau: (a) 1 chu kì; (b) 8 chu kì

.................................................................................................................................. 5

1

4.20 Đồ thị so sánh sai số tỉ đối giữa máy đo thời gian hiện số MC –

964 và máy đo và xử lí thời gian sử dụng PIC 16F877A

.................................................................................................................................. 5

2

9

5.1 Đo chu kì con lắc đơn

.................................................................................................................................. 5

5

5.2 Sự rơi tự do

.................................................................................................................................. 5

6

5.3 Đo gia tốc rơi tự do

.................................................................................................................................. 5

7

5.4 Đồ thị so sánh gia tốc rơi tự do giữa máy đo thời gian hiện số

MC – 964 và máy đo và xử lí thời gian sử dụng PIC 16F877A

.................................................................................................................................. 5

8

5.5 Chuyển động của vật trên mặt phẳng nghiêng

.................................................................................................................................. 5

9

5.6 Xác định hệ số ma sát trượt

.................................................................................................................................. 6

0

5.7 Đồ thị so sánh hệ số ma sát giữa máy đo thời gian hiện số MC –

964 và máy đo sử dụng PIC 16F877A

.................................................................................................................................. 6

2

5.8 Xác định vận tốc trung bình, vận tốc tức thời

.................................................................................................................................. 6

3

5.9 Đồ thị so sánh vận tốc tức thời (hình 5.9a) và vận tốc trung bình

(hình 5.9b) giữa máy đo thời gian hiện số MC – 964 và máy đo và

10

xử lí thời gian sử dụng PIC 16F877A

.................................................................................................................................. 6

5

11

DANH MỤC CÁC BẢNG

1.1 Cơ chế xử lí lệnh vi điều khiển

................................................................................................................................ 1

3

2.1 Các đặc tính nổi bật vi điều khiển PIC 16F877A

................................................................................................................................ 1

8

2.2 I/O vi điều khiển PIC 16F877A

................................................................................................................................ 2

0

2.3 Timer vi điều khiển PIC 16F877A

................................................................................................................................ 2

1

2.4 Ngắt vi điều khiển PIC 16F877A

................................................................................................................................ 2

4

2.5 USART bất đồng bộ

................................................................................................................................ 2

6

3.1 đồ chân LCD Sơ

................................................................................................................................ 3

1

3.2 Các lệnh LCD

................................................................................................................................ 3

2

12

3.3 Các đặc điểm chuẩn RS232

................................................................................................................................ 3

5

3.4 Các điểm nổi bật IC LM – 324

................................................................................................................................ 3

7

4.1 Đánh giá sai số hệ thống máy đo và xử lí thời gian dùng PIC

16F877A

................................................................................................................................ 5

1

4.2 Kết quả đo tần số 2 Hz của MC – 964

................................................................................................................................ 5

2

kì 5.1 Chu con lắc đơn

................................................................................................................................ 5

5

kì 5.2 Chu con lắc đơn

................................................................................................................................ 5

6

5.3 Xác định gia tốc rơi tự do

................................................................................................................................ 5

7

5.4 Xác định gia tốc rơi tự do

................................................................................................................................ 5

8

5.5 Xác định hệ số ma sát trượt

................................................................................................................................ 6

1

13

5.6 Xác định hệ số ma sát trượt

................................................................................................................................ 6

1

5.7 Xác định vận tốc tức thời và vận tốc trung bình

................................................................................................................................ 6

4

5.8 Xác định vận tốc tức thời và vận tốc trung bình

................................................................................................................................ 6

4

14 MỞ ĐẦU

1. Giới thiệu chung

Thí nghiệm dạy học vật lý trong trường phổ thông là một phương tiện

quan trọng có tác dụng to lớn giúp học sinh chiếm lĩnh các tri thức và kĩ năng.

Tuy nhiên, do điều kiện cơ sở vật chất còn thiếu thốn, việc lồng ghép các thí

nghiệm vật lý là rất khó khăn. Những giờ thực hành trên lớp đúng ra phải theo

phân phối chương trình nhưng thực tế lại được tổ chức thực hành qua loa hoặc

chuyển sang giờ luyện tập, ôn thi [3]. Và vấn đề đang được đặt ra: Làm sao có

thể tự tay tạo ra những thiết bị phục vụ cho việc dạy học được tốt hơn, hiệu quả

hơn?

Nói đến sự phát triển của kỹ thuật hiện đại, đa số chúng ta đều hình dung

ngay là sự tăng tốc thần kỳ của lĩnh vực điện tử và vi tính. Thật khó diễn giải

hết ý nghĩa, khó mà nghiên cứu sao cho trọn vẹn để mong đạt được sự thành

công như ý muốn đối với các bạn yêu thích và say mê khoa học. Mới ngày nào,

kết cấu của những mạch điện cồng kềnh, thì bây giờ tất cả đều được tích hợp

thành những mảng chuyên dụng mang nhiều chức năng ngày càng thông minh,

độc đáo [2]. Vi điều khiển cũng nằm trong số đó, từ họ vi điều khiển truyền

thống 8051 hiện nay đã phát triển thành với các họ vi điều khiển 8 bit [4], 16

bit [5], [6] hay thậm chí 24 bit [5] với các họ vi điều khiển xử lý tốc độ cao. Với

các tính năng ngày càng được mở rộng, vi điều khiển ngày càng được ứng dụng

rộng rãi từ các thiết bị cầm tay như: điện thoại, máy nghe nhạc,... hay cho đến

các thiết bị công nghiệp trong các dây chuyền sản xuất tự động, hệ thống đo

lường, giám sát,...nơi nào chúng ta cũng đều thấy sự có mặt của vi điều khiển.

Xuất phát từ những lí do trên, tôi quyết định sử dụng vi điều khiển vào

thiết kế bộ dụng cụ phụ vụ các bài thí nghiệm chứng minh vật lí phổ thông qua

đề tài: “Ứng dụng vi điều khiển PIC 16F877A trong thí nghiệm vật lí phổ thông”.

15

2. Mục đích đề tài

-

Thiết kế và tạo ra được dụng cụ đo đạc thời gian và xử lí dữ liệu dùng

trong các bài thí nghiệm cơ học trong chương trình vật lí trung học phổ thông

- bằng cách sử dụng vi điều khiển PIC 16F877A.

Trên cơ sở với thiết bị đã tạo được, so sánh với các thiết bị thí nghiệm

hiện có như đồng hồ đếm và hiển thị thời gian hiện số MC-964 nhằm rút ra ưu

3. Nội dung nghiên cứu nhược điểm và có hướng cải tiến thích hợp.

-

- Nghiên cứu kiến thức điện – điện tử, các loại linh kiện điện tử căn bản.

Nghiên cứu kiến thức vi điều khiển nói chung và vi điều khiển PIC

16F877A nói riêng: cấu trúc phần cứng, cách hoạt động của vi điều khiển, cách

- lập trình viết code cho vi điều khiển, các ứng dụng,...

Trên cơ sở các kiến thức đó, thiết kế và tạo ra được dụng cụ đo đạc thời

gian và xử lí dữ liệu dùng trong khảo sát các thí nghiệm cơ học thuộc chương

- trình vật lí trung học phổ thông.

So sánh với các thiết bị thí nghiệm hiện đang được sử dụng trong các

trường học phổ thông nhằm rút ra được ưu, nhược điểm bộ thí nghiệm và đề

4. Đối tượng nghiên cứu và phạm vi nghiên cứu xuất hướng cải tiến phù hợp.

- Đối tượng nghiên cứu:

Kiến thức điện – điện tử, vi điều khiển; thiết kế

và chế tạo mạch điện tử; lí thuyết các bài thí nghiệm cơ học thuộc chương trình

- Phạm vi nghiên cứu: thí nghiệm vật lí phổ thông.

Các thí nghiệm cơ học thuộc chương trình vật lí

trung học phổ thông có liên quan đến đo đạc thời gian và tính toán các đại

lượng có liên quan.

16

5. Phương pháp nghiên cứu

- Phương pháp nghiên cứu lí thuyết:

Đọc, nghiên cứu tài liệu về điện –

điện tử, vi điều khiển; quá trình thiết kế mạch điện tử; lí thuyết các bài thí

- Phương pháp lấy ý kiến chuyên gia nghiệm cơ học thuộc chương trình thí nghiệm vật lí phổ thông.

: Nhờ giảng viên hướng dẫn và bạn

- Phương pháp thực nghiệm bè góp ý để xây dựng sơ đồ và cấu tạo của thiết bị thí nghiệm.

: Kiểm tra cấu tạo và hoạt động ở từng bộ

phận của bộ thí nghiệm trên test – board, rút ra ưu – nhược điểm, từ đó vẽ và

- Phương pháp mô phỏng: thiết kế mạch in.

Mô phỏng mạch thiết kế nhằm rút ra ưu

- Các phương pháp đánh giá: nhược điểm mạch dự tính thiết kế, tối ưu hóa mạch điện tử.

Đánh giá ưu, nhược của thiết bị tạo ra với

các thiết bị hiện có nhằm rút ra các kết luận sư phạm.

17

TỔNG QUAN VI ĐIỀU KHIỂN PIC

CHƯƠNG 1:

GIỚI THIỆU CHUNG 1.1.

1.1.1. Vi điều khiển PIC

Vi điều khiển – Microcontroller là mạch tích hợp trên một chíp có thể lập

trình được, dùng để điều khiển hoạt động hệ thống theo tập lệnh của người lập

trình.

PIC là viết tắt của “Programable Interlligent Computer” hay “Máy tính

thông minh khả trình” do hãng General Instrument đặt tên cho vi điều khiển

đầu tiên của họ PIC1650. Lúc này PIC dùng để giao tiếp với các thiết bị ngoại vi

cho máy chủ 16 bit CP1600, vì vậy người ta gọi PIC với tên là bộ điều khiển giao

tiếp ngoại vi - Peripheral Interface Controller.

Năm 1985, General Instrument bán bộ phận vi điện tử của họ cho hãng

Microchip Technology, PIC được bổ sung EEPROM để tạo thành một bộ điều

khiển vào ra khả trình. Ngày nay có rất nhiều dòng PIC được sản xuất với hàng

loạt các modul ngoại vi được tích hợp sẵn (USART, PWM, ADC…) với bộ nhớ

1.1.2. Các dòng vi điều khiển PIC chương trình từ 512 word đến 32k word [1, tr.1-4].

Các kí hiệu của vi điều khiển PIC:

PIC12xxxx: độ dài lệnh 12 bit;

PIC16xxxx: độ dài lệnh 14 bit;

PIC18xxxx: độ dài lệnh 16 bit;

PIC24xxxx: độ dài lệnh 16 bit;

PIC32xxxx: độ dài lệnh 16 bit;

C: PIC có bộ nhớ EPROM;

F: PIC có bộ nhớ flash;

LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp;

LV: tương tự như LF - PIC có bộ nhớ flash hoạt động ở điện áp thấp;

18

Bên cạnh đó một số vi điều khiển có kí hiệu xxFxxx là EEPROM, nếu có

thêm chữ A ở cuối là flash.

Ví dụ: PIC16F877 là EEPROM.

PIC16F877A là flash.

Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC, dsPIC

giống như PIC24, là các vi điều khiển 16 bit.

Ở Việt Nam phổ biến nhất là các họ vi điều khiển PIC do hãng Microchip

KIẾN TRÚC PIC 1.2. sản xuất.

Cấu trúc phần cứng của một vi điều khiển được thiết kế theo hai dạng kiến

BỘ XỬ LÍ TRUNG TÂM

1.2.1. Kiến trúc Von – Neuman trúc: kiến trúc Von – Neuman và kiến trúc Havard [1, tr.3-4].

Kiến trúc Von – Neuman. Hình 1.1: Bộ nhớ chươn g trình và bộ nhớ dữ liệu

Kiến trúc Von – Neuman (hình 1.1) là cấu trúc mà bộ nhớ dữ liệu và bộ

nhớ chương trình nằm chung trong một bộ nhớ. Trong một thời điểm CPU chỉ

có thể tương tác với bộ nhớ dữ liệu hay bộ nhớ chương trình. Do đó, kiến trúc

Von – Neuman, ta có thể tổ chức, cân đối một cách linh hoạt bộ nhớ chương

trình và bộ nhớ dữ liệu. Tuy nhiên điều này chỉ có ý nghĩa khi tốc độ xử lí của

CPU phải rất cao, với với cấu trúc đó, trong cùng một thời điểm CPU chỉ có thể

tương tác với bộ nhớ dữ liệu hoặc bộ nhớ chương trình.

Như vậy có thể nói kiến trúc Von – Neuman không thích hợp với cấu trúc

của một vi điều khiển.

19

1.2.2. Kiến trúc Havard

Kiến trúc Havard là khái niệm mới hơn so với kiến trúc Von – Neuman

(hình 1.2). Khái niệm này được hình thành nhằm cải tiến tốc độ thực thi của

BỘ XỬ LÍ TRUNG TÂM

Bộ nh ớ dữ liệ u

Bộ nh ớ ch ươ ng trì

một vi điều khiển. Qua việc tách rời bộ nhớ chương trình và bộ nhớ dữ liệu, bus

chương trình và bus dữ liệu, CPU có thể cùng một lúc truy xuất cả bộ nhớ

chương trình và bộ nhớ dữ liệu, giúp tăng tốc xử lí của vi điều khiển lên gấp

Kiến trúc Harvard. Hình 1.2: đôi.

Một điểm cần chú ý nữa là tập lệnh trong kiến trúc Havard có thể được tối

ưu tùy theo yêu cầu kiến trúc của vi điều khiển mà không phụ thuộc vào cấu

trúc dữ liệu. Ví dụ, đối với vi điều khiển dòng 16Fxx, độ dài lệnh luôn là 14 bit

(trong khi dữ liệu được tổ chức thành từng byte), còn đối với kiến trúc Von –

Neuman, độ dài lệnh luôn là bội số của 1 byte (do dữ liệu được tổ chức thành

từng byte). Chính vì vậy, hầu hết các vi điều khiển ngày nay đều được xây dựng

RISC VÀ CISC 1.3. theo kiến trúc Harvad.

Dựa vào tập lệnh, vi điều khiển được chia thành vi điều khiển CISC và vi

điều khiển RISC.

20

1.3.1. CISC

Vi điều khiển CISC – Complex Instruction Set Computer hay vi điều khiển

có tập lệnh phức tạp với mã lệnh của không phải là một số cố định mà luôn là

bội số của 8 bit.

Các vi điều khiển có kiến trúc Von – Neuman đều là những vi đều khiển

1.3.2. RISC CISC do sự không cố định của bộ nhớ chương trình.

RISC – Reduced Instruction Computer hay vi điều khiển có tập lệnh rút

gọn. Tập lệnh của các vi điều khiển được thiết kế sao cho chiều dài mã lệnh

luôn cố định và cho phép thực thi lệnh trong một chu kì xung clock (ngoại trừ

lệnh nhảy, lệnh gọi chương trình con, ... cần hai chu kì xung clock). Điều này có

nghĩa tập lệnh của vi điều khiển thuộc cấu trúc Harvard sẽ ít lệnh hơn, ngắn

hơn, đơn giản hơn để đáp ứng yêu cầu mã hóa lệnh bằng một số lượng bít nhất

định.

Các vi điều khiển được tổ chức theo kiến trúc Harvard còn được gọi là vi

điều khiển RISC.

PIC sử dụng tập lệnh RISC, với dòng PIC low – end (độ dài mã lệnh 12 Bit

ví dụ PIC12Cxxx) và mid – range (độ dài mã lệnh 14 bit, ví dụ PIC16Fxxx), tập

lệnh bao gồm khoảng 35 lệnh, và 70 lệnh đối với dòng PIC high – end (có độ dài

mã lệnh 16 bit PIC18Fxxxx). Tập lệnh RISC bao gồm các lệnh tính toán trên các

thanh ghi, và các hằng số, hoặc các vị trí ô nhớ, cũng như có các lệnh điều kiện,

nhảy, gọi hàm và các lệnh quay trở về, cùng các chức năng khác như ngắt hoặc

PIPELINING sleep. 1.4.

Pipelining chính là cơ chế xử lí lệnh của các vi điều khiển PIC. Một chu kì

lệnh của vi điều khiển sẽ bao gồm 4 xung clock [6, tr.30-32].

f1 f2 Ví dụ:

Sử dụng oscillator có tần số = 4 MHz, xung lệnh sẽ có tần số = 1 MHz.

21

Giả sử ta có một đoạn chương trình như sau:

1. MOVLW 55h

2. MOVWF PORT B

3. CALL SUB_1

4. BSF PORT A, BIT 3

Cơ chế xử lí lệnh vi điều khiển. Bảng 1.1: Quá trình trên sẽ được thực thi như sau:

STT Lệnh\ Chu kì xung Clock CK0 CK1 CK2 CK3 CK4 CK5

1 MOVLW 55h F 1 E 1

2 MOVWF PORT B F 2 E 2

CALL SUB_1 F 3 E 3 3

BSF PORT A, BIT 3 F 4 4

 Ghi chú: F 4 E 4 5

F*:

E*: vi điều khiển đọc lệnh *.

vi điều khiển thực thi lệnh *.

CK0: Đọc lệnh 1.

CK1: Thực thi lệnh 1, đọc lệnh 2.

CK2: Thực thi lệnh 2, đọc lệnh 3.

CK3: Thực thi lênh 3, đọc lệnh 4.

CK4: Do chu kì 3 đang thực thi lệnh CALL SUB_1 là lệnh gọi chương trình

con SUB_1, phải truy xuất địa chỉ thanh ghi Program Counter lưu vào bộ nhớ

Stack nên trong chu kì 4, vi điều khiển tiếp tục thực thi lệnh CALL SUB_1.

CK5: Thực thi lệnh 4.

Quá trình này được thực hiện tương tự cho các lệnh tiếp theo của chương

trình. Thông thường, để thực thi một lệnh, ta cần một chu kì lệnh để gọi lệnh

đó, và một chu kì xung clock để giải mã và thực thi lệnh. Với cơ chế pipelining

22

được trình bày ở trên, mỗi lệnh xem như chỉ được thực thi trong một chu kì

lệnh. Đối với các lệnh mà quá trình thực thi nó làm thay đổi giá trị thanh ghi PC

(Program Counter) cần hai chu kì lệnh để thực thi vì phải thực hiện việc gọi

lệnh ở địa chỉ thanh ghi PC chỉ tới. Sau khi đã xác định đúng vị trí lệnh trong

NGÔN NGỮ LẬP TRÌNH CHO PIC 1.5. thanh ghi PC, mỗi lệnh chỉ cần một chu kì lệnh để thực thi xong.

- Ngôn ngữ lập trình cho PIC rất đa dạng, có hai loại:

Ngôn ngữ lập trình cấp thấp – hợp ngữ: MPLAB (được cung cấp miễn phí

- bởi nhà sản xuất Microchip).

Ngôn ngữ lập trình bậc cao:có nhiều loại, được phát triển trên ngôn ngữ

C: CCS, HTPIC, PICBasic, MikroBasic, …

Ưu điểm hợp ngữ là giúp người

học và lập trình hiểu rõ hơn về cấu

trúc bên trong của vi điều khiển PIC,

cũng như khả năng tối ưu hóa bộ

nhớ chương trình. Tuy nhiên, tiếp

cận hợp ngữ và khả năng phát triển

là hạn chế, mất thời gian. Do đó,

trong nội dung của đề tài, tôi tập

trung vào sử dụng ngôn ngữ lập Ngôn ngữ lập trình bậc cao CCS. Hình 1.3: trình bậc cao CCS (hình 1.3) để

nghiên cứu và phát triển ứng dụng PIC. Ưu điểm CCS:

- Kế thừa tất cả đặc điểm của ngôn ngữ C – là ngôn ngữ cơ bản, quen

thuộc mà sinh viên đã được đào tạo.

- Xây dựng sẵn các hàm phục vụ cho việc sử dụng dễ dàng các khối chức

năng đặc biệt của vi điều khiển PIC như khối ADC, PWM, RS232, SPI.

23

- Có khả năng kết hợp với ngôn ngữ hợp ngữ, tạo sự mềm dẻo trong phát

triển ứng dụng.

- Khả năng phát triển, nâng cấp ứng dụng là dễ dàng.

MẠCH NẠP PIC 1.6. - Ngày càng được cập nhật với nhiều tính năng ưu việt và hiệu quả hơn.

Mạch nạp PIC là một dòng sản phẩm rất đa dạng dành cho vi điều khiển

PIC. Có thể sử dụng các mạch nạp được cung cấp bởi nhà sản xuất là hãng

Microchip như: PICSTART plus [16], MPLAB ICD 2, MPLAB PM 3 [17], PRO

MATE II [18]. Có thể dùng các sản phẩm này để nạp cho vi điều khiển khác

thông qua chương trình MPLAB. Dòng sản phẩm chính thống này có ưu thế là

nạp được cho tất cả các vi điều khiển PIC, tuy nhiên giá thành rất cao và thường

gặp rất nhiều khó khăn trong quá trình mua sản phẩm.

Ngoài ra do tính năng cho phép nhiều chế độ nạp khác nhau, còn có rất

nhiều mạch nạp được thiết kế dành cho vi điều khiển PIC. Có thể sơ lược một

số mạch nạp cho PIC như sau:

JDM programmer [12]: mạch nạp này dùng chương trình nạp Icprog cho

phép nạp các vi điều khiển PIC có hỗ trợ tính năng nạp chương trình điện áp

thấp ICSP (In Circuit Serial Programming). Hầu hết các mạch nạp đều hỗ trợ

tính năng nạp chương trình này.

WARP-13A [13] và MCP-USB [14]: hai mạch nạp này giống với mạch nạp

PICSTART PLUS do nhà sản xuất Microchip cung cấp, tương thích với trình biên

dịch MPLAB, nghĩa là ta có thể trực tiếp dùng chương trình MPLAB để nạp cho

vi điều khiển PIC mà không cần sử dụng một chương trình nạp khác, chẳng hạn

như ICprog.

P16PRO40 [15]: mạch nạp này do Nigel thiết kế và cũng khá nổi tiếng. Ông

còn thiết kế cả chương trình nạp, tuy nhiên ta cũng có thể sử dụng chương

trình nạp Icprog.

24

Các mạch nạp kể trên có ưu điểm rất lớn là đơn giản, rẻ tiền, hoàn toàn có

thể tự lắp ráp một cách dễ dàng, và mọi thông tin về sơ đồ mạch nạp, cách thiết

kế, thi công, kiểm tra và chương trình nạp đều dễ dàng tìm được và tải miễn phí

thông qua mạng Internet. Tuy nhiên các mạch nạp trên có nhược điểm là hạn

chế về số vi điều khiển được hỗ trợ, bên cạnh đó mỗi mạch nạp cần được sử

dụng với một chương trình nạp thích hợp.

25

VI ĐIỀU KHIỂN PIC 16F877A

CHƯƠNG 2:

SƠ ĐỒ CHÂN 2.1.

Sơ đồ chân PIC 16F877A. Vi điều khiển PIC 16F877A . Hình 2.2: Hình 2.1:

Sơ sơ đồ chân của vi điều khiển PIC 16F877A (hình 2.1) được thể hiện

trên hình 2.2. Trong đó, chân 11, 32 được nối với nguồn DC 5V; chân 12, 31 nối

đất; chân 13, 14 nhận xung clock từ mạch dao động thạch anh hay mạch dao

động RC; tín hiệu reset sẽ được truyền đến PIC 16F877A qua chân số 1; 33

chân còn lại dùng kết nối với các modul của vi điểu khiển, tùy theo yêu cầu sử

CÁC THÔNG SỐ CỦA PIC 16F877A 2.2. dụng mà chúng sẽ đảm nhiệm những chức năng khác nhau [6, tr.2-3].

Đây là vi điều khiển thuộc họ PIC16Fxxx với tập lệnh RISC gồm 35 lệnh có

độ dài 14 bit. Mỗi lệnh đều được thực thi trong một chu kì xung clock. Tốc độ

× hoạt động tối đa cho phép là 20 MHz với một chu kì lệnh là 200 ns. Bộ nhớ

chương trình 8k 14 bits, bộ nhớ dữ liệu 368 bytes RAM và bộ nhớ dữ liệu

26

Các đặc tính nổi bật vi điều khiển PIC 16F877A. EEPROM với dung lượng 256 bytes. Số PORT I/O là 5 với 33 chân I/O (bảng 2.1) [6, tr.5-20]. Bảng 2.1:

SST Đặc điểm

Điệp áp hoạt động

1 2 3 4

Bộ nhớ chương trình và bộ nhớ dữ liệu Công nghệ CMOS FLASH /EEPROM nguồn mức thấp, tốc độ cao. Dải điện thế hoạt động rộng : 2,0V đến 5,5V. Nguồn sử dụng hiện tại 25 mA. Công suất tiêu thụ thấp. 1

2

3

4

5 6

7

8 9

Bộ định thời và CCP Bộ nhớ flash với khả năng ghi xóa được 100.000 lần. Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần, dữ liệu lưu trữ trên 40 năm. Bộ nhớ dữ liệu 368 bytes, 4 banks. Tất cả các câu lệnh thực hiện trong một chu kì lệnh ngoại trừ một số câu lệnh rẽ nhánh thực hiện trong 2 chu kì lệnh. Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp. Khả năng tự nạp chương trình với sự điều khiển của phần mềm. 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. Chức năng bảo mật mã chương trình. Chế độ Sleep. 1

2

3 4 5

Analoge Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit. Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep. Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler. Watchdog Timer với bộ dao động trong. Hai bộ Capture/so sánh/điều chế độ rộng xung.

1 2

Chuẩn giao tiếp 8 kênh chuyển đổi ADC 10 bit. Hai bộ so sánh. 1

Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và

27

2

3

CÁC MODUL VI ĐIỀU KHIỂN PIC 16F877A 2.3. I2C. Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ. Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD, WR, CS ở bên ngoài.

Trong nội dung của đề tài này, tôi không tập trung vào chi tiết từng chức

năng khác nhau của vi điều khiển PIC 16F877A mà sẽ tập trung vào những đặc

điểm quan trọng, thiết yếu, có liên quan trực tiếp đến quá trình chế tạo bộ dụng

cụ ứng dụng PIC 16F877A. Các nội dung này bao gồm: Cổng nhập xuất I/O,

I/O

Timer, ngắt, giao tiếp USART (hình 2.3). Bộ nhớ dữ liệu

CPU

Timer

Bộ nhớ chương trình

Ngắt

USART

Các modul PIC 16F877A được sử dụng. Hình 2.3:

2.3.1. Cổng xuất nhập I/O

Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng để

tương tác vớ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ương tá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) (bảng 2.2),

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ượng chân trong mỗi cổng có thể khác nhau. Bên cạnh đó, do vi điều

khiển được tích hợp sẵn bê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ập thông thường, một số chân xuất nhập còn có thêm

28

các chức năng khác để thể hiện sự tác động của các đặc tính ngoại vi nêu trên

với bên ngoài. Chức năng của từ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ển được thông qua các thanh ghi SFR liên quan đến

I/O vi điều khiển PIC 16F877A. chân xuất nhập đó [6, tr.40-43]. Bảng 2.2:

CỔNG SỐ CHÂN THANH GHI SFR

STT 1 2 3 4 5

Cổng A Cổng B Cổng C Cổng D Cổng E 6 chân: RA0, RA1.. RA5 8 chân: RB0, RB1,..RB7 8 chân: RC0, RC1, ..RC7 8 chân: RD0, RD1,..RD7 3 chân: RE0, RE1, RE2 PORTA, TRISA PORTB, TRISB PORTC, TRISC PORTD, TRISD PORTE, TRISE

Thanh ghi ghi TRISA phản ánh chức năng chân cổng A, nghĩa là muốn xác

lập chức năng chân cổng A như thế nào (input hay output) ta đưa giá trị vào các

bít tương ứng trên thanh ghi TRISA.

Ví dụ:

Muốn RA0, RA2, RA4, RA5 là input và RA1, RA3 là output, ta gán giá trị

000110101 cho thanh ghi TRISA.

X X  Ghi chú 1 RA5 1 RA4 0 RA3 1 RA2 0 RA1 1 RA0

:

X: Không quan tâm, trạng thái trong ô nhớ này không ảnh hướng đến chân

của vi điều khiển.

Thanh ghi TRISB, TRISC, TRISD tương tự.

Thanh ghi PORTA phản ánh trạng thái của các chân cổng A, nghĩa là muốn

tín hiệu đầu ra của các chân cổng A như thế nào ta đưa giá trị vào các bit tương

ứng trên thanh ghi PORTA. Cũng như khi đọc giá trị của thanh ghi PORTA ta sẽ

biết được trạng thái của các chân cổng A.

Ví dụ:

Muốn RA0, RA2, RA4, RA5 ở mức logic 1 (mức 5V), RA1, RA3 ở mức logic

0 (mức 0V), ta gán giá trị 000110101 cho thanh ghi PORTA.

29

X X  Ghi chú: 1 RA5 1 RA4 0 RA3 1 RA2 0 RA1 1 RA0

X: Không quan tâm, trạng thái trong ô nhớ này không ảnh hướng đến chân

của vi điều khiển.

Thanh ghi PORTC, PORTD tương tự.

Thanh ghi PORTB còn được tích hợp chức năng điện trở kéo lên được điều

2.3.2. Timer khiển bởi chương trình.

Trong mục này, ta sẽ đi vào tìm hiểu các bộ Timer. Một chế độ quan trọng

nữa của Timer là khi nó hoạt động như bộ đếm (Counter). Trong ứng dụng

này, Timer hoạt động như một bộ đếm, có nhiệm vụ đếm số các xung đi vào

một chân cụ thể trên vi điều khiển [6, tr.53-63]. Chế độ bộ đếm này có nhiều

ứng dụng trong thực tế như đếm số vòng quay của động cơ (phản hồi từ bộ đo

Timer vi điều khiển PIC 16F877A. Bảng 2.3:

Thanh ghi SFR Đặc điểm Chức năng

tốc độ động cơ), đếm số sản phẩm trên một dây chuyền, ... STT 1 Timer0

TMR0 (01h, 101h) Chứa giá trị đếm của Timer0

Cho phép ngắt hoạt động (GIE và PEIE) INTCON (0Bh, 8Bh, 10Bh, 18Bh)

Điều khiển Prescaler 8 bit (số đếm tối đa của nó là 255), hoạt động ở 2 chế độ định thời và độ đếm Timer1 2 OPTION_REG (81h, 181h)

Cho phép ngắt hoạt động (GIE và PEIE) INTCON (0Bh, 8Bh, 10Bh, 18Bh)

PIR1 (0Ch) Chứa cờ ngắt Timer1 (TMR1IF)

16 bit (số đếm tối đa của nó là 65535), hoạt động ở 2 chế độ định Cho phép ngắt Timer1 (TMR1IE) PIE1 (8Ch)

30

TMR1L (0Eh) thời và độ đếm Chứa giá trị 8 bit thấp của bộ đếm Timer1

TMR1H (0Eh) Chứa giá trị 8 bit cao của bộ đếm Timer1

Xác lập các thông số cho Timer1 3 Timer2 T1CON (10h)

Cho phép toàn bộ các ngắt (GIE và PEIE) INTCON (0Bh, Bh, 10Bh, 18Bh)

Chứa cờ ngắt Timer2 (TMR2IF) PIR1 (0Ch)

PIE1 (8Ch) Chứa bit điều khiển Timer2 (TMR2IE)

TMR2 (11h) Chứa giá trị đếm của Timer2 8 bit, hoạt động phục vụ chức năng PWM - Pulse Width Modulation

Xác lập các thông số cho Timer2 2.3.2.1. Chế độ định thời T2CON (12h)

2

1n −

n Mỗi bộ timer có một hoặc nhiều thanh ghi chứa giá trị đếm của nó (tùy

thuộc vào độ dài của timer), ta giả sử tên thanh ghi là TMR có độ dài là byte,

. Khi giá trị của TMR đạt đến giá trị này, vi điều hay giá trị đếm tối đa là

khiển sẽ đặt bit cờ của bộ timer đó lên mức 1. Người dùng sẽ biết được thời

điểm này bằng cách kiểm tra bit cờ. Đồng thời TMR sẽ tự động xóa về giá trị 0.

Khi được cài đặt hoạt động trong chế độ định thời, giá trị của thanh ghi

TMR sẽ tự động tăng lên 1 đơn vị sau mỗi chu kì lệnh của vi điều khiển. Khi giá

trị của TMR đạt đến giá trị tối đa, bit cờ của Timer sẽ được đưa lên mức 1 và

TMR bị xóa, TMR trở về 0. Giả sử vi điều khiển dùng thạch anh tần số 4 MHz.

n

2

1n − −

x

x Như vậy, một chu kì lệnh ứng với 4 chu kì thạch anh hay 1 µs. TMR sẽ tự động

tăng lên 1 đơn vị sau 1µs. Nếu ban đầu ta cho TMR có giá trị . Thì sau khoảng

µs giá trị TMR sẽ đạt giá trị tối đa 2 . Thời điểm này được xác thời gian

định thông qua trạng thái của bit cờ.

Ngược lại, để thực hiện định thời với khoảng thời gian t sau một sự kiện:

1. Sự kiện 1;

31

t

2. Tạo khoảng thời gian trễ ;

3. Sự kiện 2.

2

1n − −

t

Ta làm các bước:

Sự kiện 1;

Gán giá trị ban đầu cho TMR;

1. 2. 3. Kiểm tra bit cờ;

Khi bit cờ bằng 1, thực hiện sự kiện 2.

n

n

− −

2

1 (2

− − = t

1

)

t

4. 2n – 1 – t Thật vậy, sau 1 µs TMR tăng lên 1 đơn vị, thời gian để tăng giá trị cho TMR

(2.1) đến giá trị tối đa (khi bit cờ được đưa lên 1) sẽ là: từ

µs.

t Vậy khoảng thời gian từ sau sự kiện 1 (khi TMR bắt đầu được gán) đến sự

kiện 2 (ngay sau khi bit cờ được ở trạng thái cao) là đúng như yêu cầu của ta.

Ví dụ:

Để định thời 200 µs dùng Timer0 (8 bit với giá trị tối đa là 255), TMR0 sẽ

(2.2)

được gán giá trị: TMR0 = 255 - 200 = 55. 2.3.2.2. Chế độ đếm

Ở chế độ đếm, một chân chức năng trên vi điều khiển sẽ trở thành chân

đầu vào xung của bộ đếm. Ví dụ: chân RA4 đối với Timer0 và RC0 đối với

Timer1. Hoạt động của nó có nét giống với chế độ định thời. Giá trị của thanh

ghi TMR sẽ tự động tăng lên 1 đơn vị khi có một xung đến chân đầu vào xung

của Timer đó. Khi giá trị của TMR0 đạt đến giá trị tối đa, bit cờ của Timer sẽ

được đưa lên mức 1 và TMR bị xóa, TMR trở về 0.

Như vậy, về cách hoạt động trong chế độ này chỉ khác với chế độ định thời

ở chỗ, thay vì TMR tự động tăng lên sau mỗi chu kì lệnh, thì TMR tăng lên khi có

một xung đi vào chân đầu vào xung của Timer đó. Dạng xung được xác định là

sườn âm hay sườn dương phụ thuộc vào việc cài đặt bit chọn dạng xung tương

ứng trên thanh ghi của vi điều khiển.

32

Nguyên lý hoạt động định thời và bộ đếm này cũng đúng với các bộ vi điều

2.3.3. Ngắt khiển, vi xử lý khác.

2.3.3.1. Tổng quan về ngắt

Ngắt hiểu theo nghĩa đơn giản là các sự kiện ngẫu nhiên làm gián đoạn

quá trình của một sự kiện đang xảy ra [6, tr.5-24].

Cụ thể hoạt động của vi điều khiển khi có sự kiện ngắt xảy ra và ngắt đó đã được cho phép sẽ được diễn ra theo trình tự:

Thực hiện hết lệnh đang thực hiện; 1.

Dừng chương trình đang thực hiện; 2.

Lưu lại địa chỉ của lệnh kế tiếp trong chương trình đang thực hiện vào

× 3. bộ nhớ stack;

Nhảy tới địa chỉ 0 04 trong bộ nhớ chương trình; 4.

5. Tại đây, vi điều khiển sẽ thực hiện chương trình con phục vụ ngắt do

người lập trình đã lập trình từ trước;

6. Sau khi thực hiện xong chương trình con phục vụ ngắt, vi điều khiển lấy

lại địa chỉ của lệnh kế tiếp đã được lưu và thực hiện tiếp chương trình

2.3.3.2. Các ngắt trong vi điều khiển PIC 16F877A đang thực hiện dở lúc chưa có ngắt.

Ngắt vi điều khiển PIC 16F877A. Bảng 2.4:

Bit điều khiển Tên ngắt

GIE, INTF, INTE GIE, RBIF, RBIE GIE, TMR0IF, TMR0IE GIE, TMR1IF, TMR1IE, PEIE GIE, TMR2IF, TMR2IE, PEIE

STT 1 2 3 4 5 6 7 8

9

Ngắt ngoài Ngắt trạng thái Ngắt tràn Timer0 Ngắt tràn Timer1 Ngắt tràn Timer2 Ngắt chuyển đổi analoge - digital GIE, ADIF, ADIE, PEIE GIE, TXIF, TXIE, PEIE Bộ đệm chuyển RS232 trống GIE, RCIF, RCIE, PEIE Dữ liệu nhập từ RS232 sẵn sàng GIE, CCP1F, CCP1IE, PEIE Có capture hay compare trên CCP1

33

10

GIE, CCP2F, CCP2IE, PEIE

11 12 13 14 15

Có capture hay compare trên CCP2 Có dữ liệu vào cổng parallel salve GIE, PSPIF, PSPIE, PEIE GIE, SSPIF, SSPIE, PEIE Có hoạt động SPI hay I2C GIE, BCLIF, BCLIE, PEIE Xung đột bus GIE, EEIF, EEIE, PEIE Ghi vào eeprom hoàn tất GIE, CMIF, CMIE, PEIE Kiểm tra bằng nhau comparator

PIC16F877A có đến 15 nguồn tạo ra hoạt động ngắt (bảng 2.4) được điều

khiển bởi thanh ghi INTCON (bit GIE). Bên cạnh đó mỗi ngắt còn có một bit

điều khiển và cờ ngắt riêng. Các cờ ngắt tràn ở mức cao khi thỏa mãn điều kiện

ngắt xảy ra bất chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ

thuôc vào bit GIE và các bit điều khiển khác.

Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương

trình ngắt được kết thúc bằng lệnh RETFIE. Khi chương trình ngắt được thực

thi, bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính

được cất vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ

0004h. Lệnh RETFIE được dùng để thoát khỏi chương trình ngắt và quay trở về

chương trình chính, đồng thời bit GIE cũng sẽ được gán để cho phép các ngắt

hoạt động trở lại. Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và

phải được xóa bằng chương trình trước khi cho phép ngắt tiếp tục hoạt động

trở lại để ta có thể phát hiện được thời điểm tiếp theo mà ngắt xảy ra.

34

Sơ đồ logic các ngắt trong vi điều khiển PIC 16F877A. Hình 2.4:

Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi

trạng thái các pin của PORTB, việc xác định ngắt nào xảy ra cần 3 hoặc 4 chu kì

lệnh tùy thuộc vào thời điểm xảy ra ngắt (hình 2.4).

Cần chú ý là trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm

chương trình được cất vào trong Stack, trong khi một số thanh ghi quan trọng

sẽ không được cất và có thể bị thay đổi giá trị trong quá trình thực thi chương

trình ngắt. Điều này nên được xử lí bằng chương trình để tránh hiện tượng trên

xảy ra. 2.3.4. Giao tiếp USART

USART - Universal Synchronous Asynchronous Receiver Transmitter là

một trong hai chuẩn giao tiếp nối tiếp (SCI - Serial Communication Interface và

MSSP - Master Synchronous Serial Port). Có thể sử dụng giao diện này cho các

giao tiếp với các thiết bị ngọai vi, với các vi điều khiển khác hay với máy tính.

- Các dạng của giao diện USART ngọai vi bao gồm:

- Bất động bộ (Asynchronous);

- Đồng bộ (Master mode);

Đồng bộ (Slave mode).

Hai pin dùng cho giao diện này là RC6/TX/CK và RC7/RX/DT. Ở chế độ

bất đồng bộ, RC6 đóng vai trò là chân truyền dữ liệu và RC7 là chân nhận dữ

liệu. Ở chế độ đồng bộ, RC6 đóng vai trò là chân truyền xung clock đồng bộ tín

hiệu và RC7 là chân truyền dữ liệu [6, tr.111-193].

Với mục đích đề tài thực hiện giao tiếp giữa máy tính và vi đều khiển

trong khoảng cách gần, khoảng 1 m nên trong mục này chúng tôi không đi sâu

vào chuẩn giao tiếp USART đồng bộ mà sẽ tập trung vào giao tiếp USART bất

USART bất đồng bộ.

Bảng 2.5: đồng bộ với các đặc điểm thanh ghi được thể hiện ở bảng 2.5. Chức năng STT Thanh ghi liên quan Truyền dữ liệu

35

1

Cho phép tất cả các ngắt

2 3

4 INTCON (0Bh, 8Bh, 10Bh, 18Bh) PIR1 (0Ch) PIE1 (8Ch)

RCSTA (18h) 5

6 TXREG (19h) Chứa cờ hiệu TXIF Chứa bit cho phép ngắt truyền TXIE Chứa bit cho phép cổng truyền dữ liệu (hai pin RC6/TX/CK và RC7/RX/DT) Thanh ghi chứa dữ liệu cần truyền

TXSTA (98h) Xác lập các thông số cho giao diện 7 SPBRG (99h) Nhận dữ liệu Quyết định tốc độ baud 1

2 3

4 INTCON (0Bh, 8Bh, 10Bh, 18Bh) PIR1 (0Ch) PIE1 (8Ch)

RCSTA (18h)

5 6 7

Chứa các bit cho phép toàn bộ các ngắt (bit GIER và PEIE) Chứa cờ hiệu RCIE Chứa bit cho phép ngắt RCIE Xác định các trang thái trong quá trình nhận dữ liệu Chứa dữ liệu nhận được Chứa các bit điều khiển SYNC và BRGH 2.3.4.1. Truyền dữ liệu qua chuẩn giao tiếp USART bất đồng bộ Điều khiển tốc độ baud RCREG (1Ah) TXSTA (98h) SPBRG (99h)

Sơ đồ khối truyền dữ liệu USART. Hình 2.5:

Ở chế độ truyền dữ liệu (hình 2.5), USART hoạt động theo chuẩn NRZ

(None – Return – to – Zero), nghĩa là các bit truyền đi sẽ bao gồm 1 bit Start, 8

hay 9 bit dữ liệu (thông thường là 8 bit) và 1 bit Stop. Bit LSB sẽ được truyền đi

trước. Các khối truyền và nhận dữ liệu độc lập với nhau sẽ dùng chung tần số

36

tương ứng với tốc độ baud cho quá trình dịch dữ liệu (tốc độ baud gấp 16 hay

64 lần tốc độ dịch dữ liệu tùy theo giá trị của bit BRGH) và để đảm bảo tính

hiệu quả của dữ liệu thì hai khối truyền và nhận phải dùng chung một định

dạng dữ liệu.

Thành phần quan trọng nhất của khối truyền dữ liệu là thanh ghi dịch dữ

liệu TSR (Transmit Shift Register). Thanh ghi TSR sẽ lấy dữ liệu từ thanh ghi

đệm dùng cho quá trình truyền dữ liệu TXREG. Dữ liệu cần truyền phải được

đưa trước vào thanh ghi TXREG. Ngay sau khi bit Stop của dữ liệu cần truyền

trước đó được truyền xong, dữ liệu từ thanh ghi TXREG sẽ được đưa vào thanh

ghi TSR, thanh ghi TXREG bị rỗng, ngắt xảy ra và cờ hiệu TXIF (PIR1<4>) ở mức

cao. Ngắt này được điều khiển bởi bit TXIE (PIE1<4>). Cờ hiệu TXIF vẫn được

gán bất chấp trạng thái của bit TXIE hay tác động của chương trình (không thể

xóa TXIF bằng chương trình) mà chỉ reset về 0 khi có dữ liệu mới được đưa vào

thanh ghi TXREG.

Trong khi cờ hiệu TXIF đóng vai trò chỉ thị trạng thái thanh ghi TXREG thì

cờ hiệu TRMT (TXSTA<1>) có nhiệm vụ thể hiện trạng thái thanh ghi TSR. Khi

thanh ghi TSR rỗng, bit TRMT sẽ ở mức cao. Bit này chỉ đọc và không có ngắt

nào được gắn với trạng thái của nó. Một điểm cần chú ý nữa là thanh ghi TSR

không có trong bộ nhớ dữ liệu và chỉ được điều khiển bởi CPU.

Khối truyền dữ liệu được cho phép hoạt động khi bit TXEN (TXSTA<5>) ở

mức cao. Quá trình truyền dữ liệu chỉ thực sự bắt đầu khi đã có dữ liệu trong

thanh ghi TXREG và xung truyền baud được tạo ra. Khi khối truyền dữ liệu

được khởi động lần đầu tiên, thanh ghi TSR rỗng. Tại thời điểm đó, dữ liệu đưa

vào thanh ghi TXREG ngay lập tức được chuyển đến thanh ghi TSR và thanh ghi

TXREG bị rỗng. Lúc này ta có thể hình thành một chuỗi dữ liệu liên tục cho quá

trình truyền dữ liệu. Trong quá trình truyền dữ liệu nếu bit TXEN bị reset về 0,

quá trình truyền kết thúc.

37

Trong trường hợp dữ liệu cần truyền là 9 bit, bit TX9 (TXSTA<6>) được ở

mức cao và bit dữ liệu thứ 9 sẽ được lưu trong bit TX9D (TXSTA<0>). Nên ghi

bit dữ liệu thứ 9 vào trước, vì khi ghi 8 bit dữ liệu vào thanh ghi TXREG trước

có thể xảy ra trường hợp nội dung thanh ghi TXREG sẽ được load vào thanh ghi

TSG trước, như vậy dữ liệu truyền đi sẽ bị sai khác so với yêu cầu.

Tóm lại, để truyền dữ liệu theo giao diện USART bất đồng bộ, ta cần thực hiện tuần tự các bước sau:

Tạo xung truyền baud bằng cách đưa các giá trị cần thiết vào thanh ghi

1. RSBRG và bit điều khiển mức tốc độ baud BRGH;

Cho phép cổng giao diện nối tiếp nối tiếp bất đồng bộ bằng cách clear

2. bit SYNC và bit PSEN ở mức cao;

Bit TXIE sẽ ở mức cao nếu cần sử dụng ngắt truyền;

Bit TX9 ở mức cao nếu định dạng dữ liệu cần truyền là 9 bit; 3. 4.

Bit TXEN ở mức cao để cho phép truyền dữ liệu (lúc này bit TXIF ở mức

5. cao);

Nếu định dạng dữ liệu là 9 bit, đưa bit dữ liệu thứ 9 vào bit TX9D;

Đưa 8 bit dữ liệu cần truyền vào thanh ghi TXREG; 6. 7.

8. Nếu sử dụng ngắt truyền, cần kiểm tra lại các bit GIE và PEIE (thanh ghi

2.3.4.2. Nhận dữ liệu qua chuẩn giao tiếp USART bất đồng bộ INTCON).

Dữ liệu được đưa vào từ chân RC7/RX/DT sẽ kích hoạt khối phục hồi dữ

liệu. Khối phục hồi dữ liệu thực chất là một bộ dịch dữ liệu tốc độ cao và có tần

số hoạt động gấp 16 lần hoặc 64 lần tần số baud. Trong khi đó tốc độ dịch của

thanh ghi nhận dữ liệu sẽ bằng với tần số baud hoặc tần số của oscillator (hình

2.6).

38

Sơ đồ khối nhận dữ liệu USART. Hình 2.6:

Bit điều khiển cho phép khối nhận dữ liệu là bit RCEN (RCSTA<4>). Thành

phần quan trọng nhất của khối nhận dữ liệu là thanh ghi nhận dữ liệu RSR

(Receive Shift Register). Sau khi nhận diện bit Stop của dữ liệu truyền tới, dữ

liệu nhận được trong thanh ghi RSR sẽ được đưa vào thanh ghi RCGER, sau đó

cờ hiệu RCIF (PIR1<5>) sẽ ở mức cao và ngắt nhận được kích hoạt. Ngắt này

được điều khiển bởi bit RCIE (PIE1<5>). Bit cờ hiệu RCIF là bit chỉ đọc và

không thể được tác động bởi chương trình. RCIF chỉ reset về 0 khi dữ liệu nhận

vào ở thanh ghi RCREG đã được đọc và khi đó thanh ghi RCREG rỗng. Nếu sau

khi nhận được bit Stop của byte dữ liệu thứ 3 mà thanh ghi RCREG vẫn còn đầy,

cờ hiệu báo tràn dữ liệu (Overrun Error bit) OERR (RCSTA<1>) sẽ ở mức cao,

dữ liệu trong thanh ghi RSR sẽ bị mất đi và quá trình đưa dữ liệu từ thanh ghi

RSR vào thanh ghi RCREG sẽ bị gián đoạn. Trong trường hợp này cần lấy hết dữ

liệu ở thanh ghi RSREG vào trước khi tiếp tục nhận byte dữ liệu tiếp theo. Bit

OERR phải được xóa bằng phần mềm và thực hiện bằng cách clear bit RCEN rồi

đưa lên mức cao. Bit FERR (RCSTA<2>) sẽ được đưa lên mức cao khi phát hiện

bit Stop của dữ liệu được nhận vào. Bit dữ liệu thứ 9 sẽ được đưa vào bit RX9D

(RCSTA<0>). Khi đọc dữ liệu từ thanh ghi RCREG, hai bit FERR và RX9D sẽ

nhận các giá trị mới. Do đó cần đọc dữ liệu từ thanh ghi RCSTA trước khi đọc

dữ liệu từ thanh ghi RCREG để tránh bị mất dữ liệu. Tóm lại, khi sử dụng giao

diện nhận dữ liệu USART bất đồng bộ cần tiến hành tuần tự các bước sau:

39

Thiết lập tốc độ baud (đưa giá trị thích hợp vào thanh ghi SPBRG và bit

1. BRGH;

Cho phép cổng giao tiếp USART bất đồng bộ (bit SYNC ở mức thấp và

2. bit SPEN ở mức cao);

Nếu cần sử dụng ngắt nhận dữ liệu, bit RCIE sẽ ở mức cao;

Nếu dữ liệu truyền nhận có định dạng là 9 bit, bit RX9 sẽ ở mức cao;

3. 4. 5. Cho phép nhận dữ liệu bằng cách đưa bit CREN lên mức cao;

Sau khi dữ liệu được nhận, bit RCIF sẽ ở mức cao và ngắt được kích

6. hoạt (nếu bit RCIE ở mức cao);

Đọc giá trị thanh ghi RCSTA để đọc bit dữ liệu thứ 9 và kiểm tra xem

7. quá trình;

Nhận dữ liệu có bị lỗi không;

Đọc 8 bit dữ liệu từ thanh ghi RCREG;

2. 1. 2. Nếu quá trình truyền nhận có lỗi xảy ra, xóa lỗi bằng cách xóa bit CREN;

3. Nếu sử dụng ngắt nhận cần đưa bit GIE và PEIE lên mức cao (thanh ghi

INTCON).

40

CÁC LINH KIỆN ĐIỆN TỬ LIÊN QUAN

CHƯƠNG 3:

HIỂN THỊ LCD 3.1.

Ngày nay, thiết bị hiển thị LCD - Liquid Crystal Display được sử dụng

trong rất nhiều các ứng dụng của vi điều khiển. LCD có rất nhiều ưu điểm so với

các dạng hiển thị khác: Khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí

tự đồ họa), dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác

3.1.1. Các chân cơ bản của LCD nhau, tốn rất ít tài nguyên hệ thống [8, tr.1-5].

Sơ đồ chân LCD 20×4. LCD 20×4. Hình 3.2: Hình 3.1:

Sơ đồ chân LCD. Bảng 3.1:

CHÂN KÝ HIỆU I/O MÔ TẢ

1

2 VSS Nối đất -

3 VCC Nguồn 5V -

4 VEE Độ tương phản -

5 RS I RS = 0: ghi dữ dữ liệu, RS = 1: ghi lệnh

R/W I 6 R/W = 1: đọc dữ liệu, R/W = 0: ghi dữ liệu

7 E I/O Cho phép

DB0 I/O Các bit dữ liệu

41

8

9 Các bit dữ liệu I/O DB1

10 Các bit dữ liệu I/O DB2

11 Các bit dữ liệu I/O DB3

12 Các bit dữ liệu I/O DB4

13 Các bit dữ liệu I/O DB5

14 Các bit dữ liệu I/O DB6

15 Các bit dữ liệu I/O DB7

16 Cực dương đèn LED - A

 Ghi chú Cực âm đèn LED - K

I : :

O : chức năng Input.

- : chức năng Output.

3.1.2. Nguyên lí hoạt động không có chức năng I/O.

Bảng 3.2:

STT MÃ HEX LỆNH ĐẾN THANH GHI LCD Các lệnh LCD.

1

2 Xóa màn hình hiển thị 1

3 Trở về đầu dòng 2

4 Dịch con trỏ sang trái 1 ô 3

5 Dịch con trỏ sang phải 1 ô 4

6 Dịch hiển thị sang phải 5

7 Dịch hiển thị sang trái 7

8 Tắt con trỏ, tắt hiển thị 8

9 Tắt hiển thị, bật hiển thị A

10 Bật hiển thị, tắt con trỏ C

11 E Bật hiển thị, nhấp nháy con trỏ

12 F Tắt hiển thị, nhấp nháy con trỏ

13 10 Dịch vị trí con trỏ sang trái

14 Dịch vị trí con trỏ sang phải

42

14

15 18 Dịch toàn bộ hiển thị sang trái

16 1C Dịch toàn bộ hiển thị sang phải

17 80 Đưa con trỏ về đầu dòng thứ nhất

18 C0 Đưa con trỏ về đầu dòng thứ hai

19 94 Đưa con trỏ về đầu dòng thứ ba

20 D4 Đưa con trỏ về đầu dòng thứ tư

38 Xác lập chức năng cho LCD

Các chân 1,2,3 ứng với các chân VSS , VDD, VEE trong đó VSS chân nối đất

,VEE chân chọn độ tương phản, chân này được điều chỉnh qua một biến trở.

Chân VDD nối dương nguồn.

Chân chọn thanh ghi RS - Register Select: Có hai thanh ghi trong LCD, chân

- RS - Register Select được dùng để chọn thanh ghi, như sau:

- RS = 0: LCD ở chế độ ghi lệnh như xóa màn hình, bật tắt con trỏ.

RS = 1: LCD ở chế độ ghi dữ liệu như hiển thị ký tự, chữ số lên màn hình.

Chân đọc/ghi (R/W): Đầu vào đọc/ghi cho phép người dùng ghi thông tin

lên LCD khi R/W = 0 hoặc đọc thông tin LCD khi R/W = 1.

Chân cho phép E (Enable): Chân cho phép E được sử dụng bởi LCD để chốt

dữ liệu của nó. Khi dữ liệu được đến chân dữ liệu thì cần có 1 xung từ mức cao

xuống mức thấp ở chân này để LCD chốt dữ liệu, xung này phải có độ rộng tối

thiểu 450 ns.

Chân D0 – D7: Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin lên

LCD hoặc đọc nội dung của các thanh ghi trong LCD. Để hiển thị các chữ cái và

các con số chúng ta gửi các mã ASCII của các chữ cái và các con số tương ứng

3.1.3. Khởi tạo LCD đến các chân này khi bật RS = 1.

Trước khi bắt đầu quá trình hiển thị một chuỗi kí tự nào đó, ta cần quá

trình khởi tạo để cài đặt các chế độ này. Vi điều khiển thực hiện quá trình khởi

tạo này bằng cách đưa đến LCD một chuỗi các lệnh.

43

Căn cứ vào chức năng của các chân vi điều khiển được giới thiệu ở trên, ta đưa ra qui trình của việc gửi một lệnh từ vi điều khiển đến LCD:

1. Cho chân R/W = 0 để xác định LCD ở chế độ ghi dữ liệu (thông thường

chân này được nối đất, nên mặc định chân này ởmức 0, ta không cần

quan tâm đến nữa);

Cho chân RS = 0 để xác định đây là lệnh mà vi điều khiển gửi xuống LCD

2. (phân biệt với RS = 1, gửi kí tự hiển thị);

Gửi mã lệnh xuống LCD theo các đường dữ liệu (RD0-RD7 nếu dùng

3. chế độ 8 bit, R4 – R7 nếu dùng chế độ 4 bit);

Đưa chân E (chân cho phép – Enable) lên mức cao, mức 1;

Tạo trễ vài chu kì lệnh; 4. 5.

6. 3.1.4. Ghi kí tự lên LCD Đưa chân E xuống mức thấp, mức 0.

Sau khi thực hiện quá trình khởi tạo để gửi các lệnh cài đặt chế độ làm

việc của LCD, kí tự sẽ được hiển thị lên LCD bất kì khi nào vi điều khiển muốn

gửi.

Quá trình gửi kí tự gồm các bước sau: 1.

2. Cho chân R/W = 0 để xác định LCD ở chế độ ghi dữ liệu (thông

thường chân này được nối đất, nên mặc định chân này ở mức 0, ta

không cần quan tâm đến nữa);

Cho chân RS = 1 đểxác định đây là kí tự mà vi điều khiển gửi xuống

3. LCD (phân biệt với RS = 0 ở chế độ gửi lệnh);

4. Gửi mã ASCII của kí tự cần hiển thị xuống LCD theo các đường dữ

liệu (RD0 – RD7 nếu dùng chế độ 8 bit, R4 – R7 nếu dùng chế độ 4

bit);

Đưa chân E (chân cho phép – Enable) lên mức cao, mức 1;

5. 6. Tạo trễ vài chu kì lệnh;

7. Đưa chân E xuống mức thấp, mức 0.

Hang 1

44

1

4

7

*

Hang 2

2

5

8

0

Hang 3

3

6

9

#

Hang 4

A

B

C

D

4 t o C

3 t o C

2 t o C

1 t o C

MA TRẬN BÀN PHÍM 3.2.

Ma trận bàn phím 4×4. Sơ đồ ma trận bàn phím 4×4. Hình 3.4: Hình 3.3:

Ma trận bàn phím (hình 3.3) là thành phần quan trọng phục vụ quá trình

m×n giao tiếp giữa người sử dụng và vi điều khiển. Một ma trận m hàng và n cột có

phím chức năng. Như hình 3.2 và hình thể ghép với nhau tạo thành tối đa

3.3 là ma trận bàn phím có 4 hàng và 4 cột, như vậy, sẽ có tối đa 16 nút nhấn và

được nối với 8 chân của vi điều khiển.

Để đọc giá trị của phím ta sử dụng thuật toán “quét phím” (hình 3.4).

Thuật toán “quét phím” được sử dụng là lần lượt tìm hàng và tìm cột (hoặc

ngược lại). Khi tìm hàng, các hàng sẽ được đặt làm đầu vào và được đặt ở cùng

mức logic, các cột được đặt làm đầu ra. Sau đó, lần lượt từng hàng một sẽ được

đưa xuống mức logic khác các hàng còn lại. Ban đầu, chưa có phím nhấn, tín

hiệu thu được ở các cột là như nhau. Khi có phím được nhấn, tín hiệu thu được

45

ở cột tương ứng sẽ có cùng mức logic với hàng được quét. Bằng cách này tay sẽ

IC MAX – 232 3.3. xác định được vị trí hàng và cột hay xác định được vị trí phím được nhấn.

3.3.1. Chuẩn RS232

RS232 là chuẩn giao tiếp nối tiếp dùng định dạng không đồng bộ, kết nối

nhiều nhất là 2 thiết bị , chiều dài kết nối lớn nhất cho phép để đảm bảo dữ liệu

là 12,5 m đến 25,4 m với tốc độ từ 20 kbit/s đến 115 kbit/s [7, tr.1-5].

Các đặc điểm chuẩn RS232. Bảng 3.3:

STT Đặc điểm Nội dung 

1 logic 0 +12V  Mức điện áp đường truyền  : +3V -3V 2 3V

3 4 5 7000

Tốc độ truyền nhận dữ liệu cực đại Điện dung ngõ vào Trở kháng tải Độ dài của cáp nối 6

Các giá trị tốc độ truyền dữ liệu chuẩn (bit/s) Mức Mức logic 1 : -12V Trạng thái chuyển tuyến: -3V 115 kbit/s  Ω < 2500 pF 3000 < 15 m 50, 75, 110, 750, 300, 600, 1200, 2400, 4800, 9600, 19200, 28800, 38400…. 56600, 15200

Ngoài các đặc điểm trên, chuẩn giao tiếp RS232 có Parity bit hay bit kiểm

tra lỗi trên đường truyền. Một bit chẵn lẻ được bổ sung vào dữ liệu được

truyền để cho thấy số lượng các bit “1” được gửi trong một khung truyền là

chẵn hay lẻ. Kỹ thuật mã hóa lỗi này không được sử dụng trong trường hợp có

3.3.2. IC Max – 232 khả năng một vài bit bị mắc lỗi.

IC Max – 232 của hãng MAXIM là một vi mạch chuyên

dùng trong giao diện nối tiếp với máy tính thông qua chuẩn giao tiếp RS232. Chúng (hình 3.5, hình 3.6)

46

có nhiệm vụ bộ đệm trung gian chuyển đổi mức điện áp chuẩn TTL sang chuẩn RS

– 232 và ngược lại.

IC Max – 232. Sơ đồ chân Max – 232. Hình 3.5: Hình 3.6:

Max 232 là IC chạy ổn định và được sử dụng phổ biến trong các mạch

giao tiếp chuẩn RS232, tích hợp trong đó hai kênh truyền cho chuẩn RS232.

Dòng tín hiệu được thiết kế cho chuẩn RS232 . Mỗi đầu truyền ra và cổng nhận

tín hiệu đều được bảo vệ chống lại sự phóng tĩnh điện. Ngoài ra Max232 còn

IC LM – 324 3.4. được thiết kế với nguồn +5V cung cấp nguồn công suất nhỏ.

IC LM – 324. Hình 3.7: Hình 3.8: Sơ đồ chân IC LM – 324.

IC LM – 324 (hình 3.7, hình 3.8) vi mạch được tích hợp 4 mạch khuếch đại

thuật toán giống nhau, hoạt động dộc lập. Đây là IC rất thông dụng trong các

mạch khuếch đại thuật toán [9, tr.1-5].

Thông thường một bộ khuếch đại thuật toán (Op-Amp) thì cần phải có

nguồn đôi (nguồn dương và nguồn âm). Chẳng hạn như Opamp 741. Tuy nhiên

các Opamp trong LM324 được thiết kế đặc biệt để sử dụng với nguồn đơn. Tức

47

là chỉ cần Vcc và GND là đủ. Một điều đặc biệt nữa là nguồn cung cấp của

LM324 có thể hoạt động độc lập với nguồn tín hiệu. Ví dụ nguồn cung cấp của

LM324 là 5V nhưng nó có thể làm việc bình thường với nguồn tín hiệu ở ngõ vào V+ và V- là 15V. Bảng 3.4: Các điểm nổi bật IC LM – 324.

STT Đặc điểm Giá trị  1  2 Điện áp cung cấp

 32V Điện áp tối đa ngõ vào 15V

CC

3 4 5 -1,5V 6

32V 5V Nguồn đơn: 0V Nguồn đôi: -15V  1 W V 0V 1 MHz 100 dB THẠCH ANH ĐIỆN TỬ 3.5. Công suất Điện áp ngõ ra Tần số hoạt động Độ lợi khuếch đại điện áp

Mạch dao động thạch anh. Hình 3.9: Thạch anh. Hình 3.10:

Thạch anh điện tử là linh kiện làm bằng tinh thể thạch anh được mài nhẵn

với độ chính xác cao. Do chịu hiệu ứng áp điện khi đặt hiệu điện thế có tần số

xác định vào thạch anh điện tử nên linh kiện này tương đương với mạch dao

động LC cộng hưởng khi dòng điện xoay chiều có tần số thích hợp đặt vào tinh

thể thạch anh.

Hoạt động ở tần số cộng hưởng ổn định, tiêu hao điện áp thấp, mạch dao

động sử dụng thạch anh được sử dụng nhiều trong các đồng hồ điện tử, thiết bị

tin học hay các nhạc cụ điện tử đòi hỏi cần xung chuẩn và độ chính xác cao.

48

49

CHƯƠNG 4: ỨNG DỤNG VI ĐIỀU KHIỂN PIC 16F877A TRONG

THÍ NGHIỆM VẬT LÍ PHỔ THÔNG

TỔNG QUAN 4.1.

Với lý thuyết điện – điện tử và vi điều khiển, chúng tôi tập trung tìm hiểu

và chế tạo ra máy đo và xử lý thời gian trên cơ sở đồng hồ đếm và hiển thị thời

gian hiện số MC – 964 hiện đang sử dụng ở các trường phổ thông. Để tạo ra

được dụng cụ này, đòi hỏi phải xây dựng từng bước các thành phần của điện tử

khác nhau và kiểm tra hoạt động của chúng trên testboard, cũng như xây dựng

chương trình cho vi điều khiển PIC 16F877A. Đây là những bước quan trọng

nhất và quyết định đến độ ổn định, tính khả thi của bộ thí nghiệm.

Kiểm tra các bộ phận trên testboard và Proteus. Hình 4.1:

Từ việc thử nghiệm trên testboard và mô phỏng trên Proteus, tôi đi đến

thiết kế sơ đồ mạch trên Orcard và xây dựng chương trình giao tiếp cho PIC

16F877A với máy tính. Mạch in sau khi được gia công, các linh kiện sẽ được

hàn và kiểm tra hoạt động lần lượt từng bộ phận như trên hình 4.1.

Quá trình thực hiện có thể tóm tắt theo sơ đồ sau:

1. Nghiên cứu lý thuyết

6. Hoàn thành dụng cụ

50

2. Viết chương trình và giao diện giao tiếp cho PIC

5. Làm mạch in hàn và kiểm tra hoạt động từng

Quá trình thực hiện. 4. Vẽ sơ đồ mạch trên Orcard

3. Kiểm tra hoạt động trên Hình 4.2: EasyPIC, testboard và DỤNG CỤ ĐO VÀ XỬ LÍ THỜI GIAN SỬ DỤNG PIC 16F877A 4.2.

×

Cảm biến & nam châm điện

Bàn phím 4

4

Vi điều khiển PIC 16F877A

Bộ định thời

Hiển thị LCD 20x4

4.2.1. Sơ đồ khối

Sơ đồ khối dụng cụ đo và xử lý thời gian.

Giao tiếp máy tính Hình 4.3:

Sơ đồ khối dụng cụ đo và xử lý thời gian được thể hiện trên hình 4.3. Dụng

cụ bao gồm 6 khối chính, trong đó vi điều khiển PIC 16F877A là khối xử lý

trung tâm, 5 khối còn lại đóng vai trò là các bộ phận ngoại vi truyền tín hiệu

KHỐI XỬ LÍ TRUNG TÂM PIC 16F877A 4.3. thông qua vi điều khiển PIC 16F877A.

Đây là khối đóng vai trò quyết định cho máy đo và xử lý thời gian. Khối xử

lý trung tâm hay PIC 16F877A có nhiệm vụ nhận thông tin từ các thiết bị ngoại

vi và điều khiển chúng.

Hoạt động PIC 16F877A chịu sự điều khiển của người lập trình qua

chương trình được viết sẵn và nạp cho PIC 16F877A

51

(Code_for_PIC_16f877a.ccs). Lưu đồ thuật toán PIC 16F877A được thể hiện

trên hình 4.4.

Trong chương trình chính code_for_PIC_16f877a.ccs, PIC 16F877A khởi

tạo chế độ I/O cho các chân, thiết lập hiển thị LCD và giao tiếp RS232 qua cổng

COM cho vi điều khiển. Sau đó, PIC 16F877A sẽ hiển thị các bài thí nghiệm

trong chương trình vật lý trung học phổ thông. Tùy vào mục đích sử dụng,

người dùng sẽ lựa chọn bài thí nghiệm và ứng với mỗi bài thí nghiệm sẽ có

những chương trình con tương ứng. Các chương trình con này được thể hiện

trong các lưu đồ thuật toán hình 4.5 và 4.6.

CHƯƠNG TRÌNH CHÍNH

Thiết lập chức năng I/O các Port

Thiết lập LCD và giao tiếp RS232

RA0 = 1 Hiển thị tiêu đề trên LCD

Không

Nhấn phím?

Chọn bài thí nghiệm

1: Con lắc đơn 2: Rơi tự do 3: Hệ số ma sát 4: Chuyển động thẳng đều

#1,2,3,4

Nhấm phím?

1,2,3,4

Chương trình con:

Subprocess 1: con_lac_don

Subprocess 2: roi_tu_do

Subprocess 3: He_so_ma_sat

Subprocess 4: chuyen_dong_tha ng_deu

52

Subprocess 1: con_lac_don

Subprocess 2: roi_tu_do

Nhập quãng đường rơi

Nhập chiều dài dây Nhập chu kì đo

Bật bộ định thời

Bật bộ định thời

Không

Không

Ngắt nam châm?

Vật chắn cổng lần 1?

Đếm

Đếm

Không

Hình 4.4: Lưu đồ chương trình chính.

53

b) a)

Subprocess 4: chuyen_dong_thang_deu

Subprocess 3: he_so_ma_sat

Bật bộ định thời

Không

Nhâp quãng đường trượt Nhập góc nghiêng

Ngắt nam châm?

Không bằng

Đếm

Bật bộ định thời

Không

Không

Vật chắn 2 cổng quang điện

Ngắt nam châm?

Tắt bộ định thời Xuất kết quả chắn 2 cổng quang điện

Thời gian chắn 2 bằng

nhau

Đếm

Hình 4.5: Lưu đồ chương trình con: (a) con lắc đơn; (b) rơi tự do.

54

b) a)

Hình 4.6: Lưu đồ chương trình con: (a) Hệ số ma sát; (b) Chuyển động thẳng

đều.

Tùy vào độ phức tạp của các bài thí nghiệm trong chương trình vật lí

trung học phổ thông mà lưu đồ thể hiện trong hình 4.5 và hình 4.6 có sự phức

tạp khác nhau. Tuy nhiên, tất cả các lưu đồ đều có chung đặc điểm là yêu cầu dữ

liệu đầu vào, tính toán thời gian giữa các xung tín hiệu và xuất dữ liệu đầu ra. Ví

55

dụ: Trong lưu đồ con_lac_don (hình 4.5a), vi điều khiển sẽ yêu cầu người sử

t dụng nhập dữ liệu qua ma trận bàn phím hay máy tính cá nhân, bằng cách sử

dung bộ định thời PIC 16F877A sẽ xác định chính xác giá trị thời gian đo , qua

quá trình xữ lí PIC 16F877A sẽ xuất kết quả qua LCD và máy tính cá nhân thông

qua chuẩn giao tiếp RS232.

Khi hoạt động, do ảnh hưởng đều kiện bên ngoài, khi có tín hiệu từ cổng

quang điện và ngắt nam châm đưa đến vi điều khiển, nhiễu tín hiệu sẽ xuất

hiện, gây ảnh hưởng không nhỏ đến chế độ làm việc của máy đo.

Code bẫy lỗi cho vi điều khiển PIC 16F877A Hình 4.7:

Thông qua ngôn ngữ lập trình bậc cao CCS, hệ thống code bẫy lỗi sẽ được

thiết kế cho vi điều khiển. Bằng cách xác định tín hiệu đếm và thời gian lấy tín

hiệu, nhiễu tín hiệu sẽ được vi điều khiển loại bỏ, tạo độ tin cậy cao cho người

dùng. 4.3.1. Bộ định thời

Xung đếm được tạo ra nhờ thạch anh điện tử có tần số 20 MHz. Thạch anh

tần số 20 MHz sẽ tạo cho vi điều khiển chu kì lệnh có tần số 5 MHz (1 chu kì

lệnh bằng 4 lần chu kì dao động).

Sử dụng TIMER 1 ở chế độ định thời 16 bit, xung đếm 5 MHz được đưa

đến bộ Prescaler (chia 8) cho ra xung có tần số 0.625 MHz. Hai thanh ghi

TMR1H:TMR1L sẽ ghi nhận giá trị xung 0.625 MHz ngay sau cạnh xuống đầu

tiên và giá trị TMR1H:TMR1L tiếp tục tăng sau mỗi cạnh lên của xung ngõ vào

(hình 4.8).

56

: vị trí giá trị thanh ghi TMR1H:TMR1L tăng thêm 1 Cạnh tác động TMR1H:TMR1L. Hình 4.8:

Thanh ghi TMR1H:TMR1L có độ dài 16 bit cho phép đếm tối đa đến giá trị

65535. Nếu vượt quá giá trị này, TMR1H:TMR1L sẽ được trả về 0. Bằng cách

×

×

+

m t ghi nhận thời điểm xảy ra tràn số đếm thông qua ngắt tràn Timer1 và lưu tổng

s

6

1 : × 0.625 10

PIC 16F877A

PS1:PS0

0,625MHz

5MHz

Thạch anh 20M

Chia 8

m×65536+TMR1H:TMR1L

TMR1H:TMR1L

m++

số lần tràn qua biến = t m ( ta xác định được thời gian TMR H TMR L 1 ) 1 : 65536 (5.1)

Bộ định thời cho PIC 16F877A. Hình 4.9:

Như vậy, sử dụng thạch anh điện tử, chức năng TIMER 1 và ngắt báo tràn

4.3.2. Giao tiếp máy tính TIMER1 ta đã tạo ra được bộ định thời cho PIC 16F877A.

Giao tiếp vi điều khiển với máy tính đóng vai trò quan trọng trong việc

thực hiện tương tác giữa người dùng và PIC 16F877A. Công việc này thực hiện

nhờ sự hỗ trợ IC Max – 232 thông qua chuẩn RS232 và được thể hiện trên sơ

đồ nguyên lí hình 4.10.

57

Giao tiếp giữa RS232 và PIC 16F877A phải thông qua chương trình nhằm

nhận biết được dữ liệu truyền lên và nhận xuống như thế nào. Để thực hiện

công việc này, người sử dụng có thể sử dụng các phần mềm như Hyper

Terminal, Flash Magic,....

Hình 4.10: Giao tiếp RS232 qua IC Max – 232.

Đây là những chương trình có sẵn không thể tùy chỉnh nên dùng giao tiếp

tạm thời giữa vi điều khiển và người sử dụng. Phục vụ cho quá trình đo đạc và

xử lý số liệu trực tiếp, tiết kiệm thời gian cũng như công sức cho các bài thí

nghiệm vật lý phổ thông minh họa tại lớp, người dùng cần tạo ra một giao diện

1

3

2

4

Hình 4.12: Thí nghiệm con lắc đơn Hình 4.11: Giao diện giao tiếp

dùng giao tiếp máy tính. với máy tính cho PIC 16F877A.

58

cho riêng mình. Visualbasic, C++ hay Matlab,... là những công cụ hỗ trợ hữu

hiệu. Trên nền tảng ngôn ngữ lập trình, người dùng có thể tạo ra giao diện giao

tiếp giữa vi điều khiển và máy tính sao cho tối ưu và đạt hiệu quả nhất.

Hình 4.11 là giao diện giao tiếp giữa vi điều khiển và máy tính được viết

trên nền Visual basic. Ngoài chức năng nhập các thông tin bên ngoài (1), (2)

thay thế cho ma trận bàn phím, kết quả thu được sau sau khi tính toán và đo

đạc (3) có thể được lưu dưới dạng file word (4).

Giao tiếp giữa vi điều khiển và máy tính qua chuẩn RS232 không đòi hỏi

sự phức tạp hoá công việc. Ngược lại, chính nhờ sự hỗ trợ của giao tiếp mà

người dùng có thể giải quyết được nhiều việc hơn và là công cụ trực quan, sinh

4.3.3. Cổng quang điện và ngắt nam châm động cho các bài thí nghiệm vật lý minh họa ngay tại lớp (hình 4.12).

Cổng quang điện và ngắt nam châm là những bộ phận không thể thiếu,

chúng đảm nhiệm chức năng ghi nhận tín hiệu: lúc thả vật, khi vật chắn cổng,

nhờ đó PIC 16F877A xác định chính xác thời điểm bắt đầu và dừng hoạt động

4.3.3.1. Cổng quang điện đếm của bộ định thời.

Cổng quang quang điện hay bộ phận cảm biến cấu tạo gồm phần phát tia Ω hồng ngoại gồm một LED phát được nối với nguồn 5V qua điện trở hạn dòng

100 và phần thu là một phototransistor nhận tín hiệu hồng ngoại từ LED

phát qua cực baser của photortransistor.

Tín hiệu thu được từ cực baser sẽ được khuyếch đại và đưa đến đầu vào

không đảo của Opamp IC LM 324. Opamp này đóng vai trò như mạch khuếch

đại thuật toán dùng khuếch đại tín hiệu với tín hiệu đầu vào và tín hiệu đầu ra

cùng pha (khuếch đại không đảo).

15VDC

5VDC

5VDC

15VDC

5VDC

C28

C27

C26

R18

C24

104

U5A

104

C25

R7 10K

JP1

104

15M

104

4

104

4

3

4

1

+

1

3

+

RA4

C12

2

U6A 1

-

LM324

2

2

3

-

102

LM324

R3 1M

1 1

CIRDIN_4-P

R4

1 1

R8 3.3K

R11 100

10K

59

=

Hình 4.13: Cổng quang điện.

V ào v

V ra

 + 1 

  

(5.2) Độ khuếch đại đảo được xác định qua công thức: R 3 R 4

 Với:

à

V

Vra v o : điện áp tín hiệu vào so với đất.

: điện áp tín hiệu sau khi khuếch đại so với đất.

Tín hiệu sao khi khuếch đại được đưa đến Opamp thứ hai hoạt động ở chế

độ so sánh không đảo, so sánh điện áp tín hiệu sau khi khuếch đại với điện áp

chuẩn: Nếu điện áp cao tín hiệu cao hơn điện áp chuẩn tín hiệu thu được ở mức

cao; ngược lại, nếu điện áp cao tín hiệu thấp hơn điện áp chuẩn tín hiệu thu

được ở mức thấp. Tín hiệu thu được được sẽ đưa đến vi điều khiển PIC

4.3.3.2. Ngắt nam châm 16F877A xử lí (hình 4.13).

Ban đầu, khi nút BUTTON chưa ở trạng thái nhấn. Chưa có tín hiệu gửi đến

chân RB0. Đây là vị trí ngắt ngoài của vi điều khiển, hoạt động khi có sườn lên

hay sườn xuống của tín hiệu. Ngắt ngoài chưa hoạt động, chân RA1 ở mức cao,

transistor NPN ở trạng thái dẫn, nam chân điện hút trọng vật (hình 4.14).

60

Hoạt động ngắt nam châm xảy ra khi nút BUTTON ở trạng thái nhấn. Tín

5VDC

15VDC

JP3

C33

C30

1

4

104

104

SW2 BUTTON

2

3

R17 10K

RB0

CIRDIN_4-P

RA1

R15 10K

Q1 NPN C5200

R21 1K

hiệu gửi tới chân RB0, ngay vị trí cạnh lên của tín hiệu đến PIC 16F877A kích

Hình 4.14: Ngắt nam châm. ngắt ngoài.

Ngắt ngoài cho phép chân RA1 ở mức thấp, transistor NPN ngừng dẫn,

nam châm điện ngừng hút, trọng vật được thả.

Do nam châm hút trọng vật cần dòng lớn nên ở đây transistor NPN C5200

4.3.4. Ma trận bàn phím và hiển thị LCD công suất lớn được sử dụng.

Hình 4.16: Hiển thị LCD. Hình 4.15: Ma trận bàn phím 4×4.

Ma trận bàn phím và hiển thị LCD là khối nhập (ma trận bàn phím) và xuất

dữ liệu (hiển thị LCD).

61

Ma trận bàn phím được nối với PIC 16F877A qua 7 chân Port B (từ RB1

đến RB7) và 1 chân ở PortA (RA0). Dùng thuật toán quét hàng ta sẽ tìm được vị

trí các phím trên tương ứng.

Ma trận bàn phím khi chưa kết nối với với PIC 16F877A hay khi lắp vào

mạch in nhưng các mối tiếp chưa tốt sẽ gây ra nhiễu trên thiết bị, ảnh hưởng

trực tiếp đến kết quả thu được. Vì vậy, cần chú ý đến hoạt động của ma trận

bàn phím để đảm bảo tính ổn định của thiết bị.

Khối hiển thị là LCD 20x4 được nối với PIC 16F877A qua Port D và 3 chân

× Port C (RC3, RC4 và RC5) hình 4.16.

Trong quá trình hiển thị trên LCD 20 4 cần chú ý chân VEE nhằm điều

chỉnh tương phản của LCD: Nếu VEE = 5V sẽ cho độ tương phản kém nhất, VEE

ĐÁNH GIÁ SAI SỐ 4.4. = 0V độ tương phản thu được là lớn nhất.

Trong quá trình xử lý tín hiệu có liên quan đến bộ định thời, vi điều khiển

hoạt động sẽ mắc sai số. Các sai số này bao gồm sai số do bộ nhớ dữ liệu và sai

4.4.1. Sai số do bộ nhớ dữ liệu số hệ thống.

Exponent Sign Mantissa

eeee eeee s mmm mmmm mmmm mmmm mmmm mmmm

Hình 4.17: Cấu trúc dữ liệu kiểu số thực 32 bits. 8 bits 1 bit 23 bit

Trong quá trình xử lí, vi điều khiển lưu biến thời gian t dưới dạng số thực,

đây là kiểu số thực có độ dài dữ liệu 32 bits. Cấu trúc kiểu số thực (hình 4.17)

0

gồm có 8 bits cao lưu giá trị số mũ, 1 bit lưu dấu của dữ liệu và 23 bits thấp lưu

− 7 10 s

1 phần định trị. Với số mũ là 2 23 2

= 1, giá trị nhỏ nhất của phần định trị là

710−

. Như vậy, với giá trị thời gian đo đạc là 1s thì sai số do bộ nhớ dữ liệu

là s. Trong các bài thí nghiệm cơ học thuộc chương trình vật lí trung học

610−

62

phổ thông thời gian đo không vượt quá 100 s, sai số do bộ nhớ dữ liệu có giá trị

s. là

4.4.2. Sai số hệ thống

m, CCP1

RA4, RC2

Tín hiệu quang điện

Thoát ngắt

Kích ngắt

∆𝒕𝟏

a. Sai số do code lập trình

Hình 4.18: Sai số do code lập trình.

m Khi có tín hiệu đưa đến vi điều khiển, PIC 16F877A sẽ kích ngắt để lấy giá

trị biến là biến xảy ra số lần tràn và thanh ghi TMR1H:TMR1L xác định giá trị

đếm hiện tại của Timer1 (hình 4.18). Hai giá trị này sẽ phục vụ cho công việc

m xác định thời gian cần đo đạc. Như vậy sai số sẽ xuất hiện trong khoảng thời

gian khi kích ngắt và trong thời gian PIC 16F877A lấy giá trị hai biến và

b. Sai số do tín hiệu hồng ngoại là ngắt nam châm điện TMR1H:TMR1L.

Khi có tín hiệu từ cảm biến hồng ngoại hay ngắt nam châm điện, bộ định

thời sẽ bắt đầu hoạt động bằng cách tăng giá trị TMR1H:TMR1L sau mỗi lần có

cạnh tác động xảy ra. Sai số ở đây mắc phải do tín hiệu đưa đến và cạnh tác

động cho TMR1H:TMR1L chưa đồng bộ: tín hiệu đến không đúng thời điểm mà

0 1

1

0

0

0

0

∆t2

xung đếm ở cạnh lên (hình 4.19).

Hình 4.20: Kiểm tra sai số. Hình 4.19: Đánh giá sai số lý thuyết.

63

Bảng 4.1: Đánh giá sai số hệ thống máy đo và xử lí thời gian dùng

PIC 16F877A.

STT Tần số Sai số

-6

-6

1 1KHz 6,4.10 s

-6

2 2KHz 6,9.10 s

-6

3 4KHz 6,8.10 s

-6

4 5KHz 6,4.10 s

-6

5 8KHz 6,6.10 s

-6

6 10KHz 6,5.10 s

-6

7 15KHz 6,8.10 s

-6

8 20KHz 6,8.10 s

-6

9 25KHz 6,4.10 s

30KHz

10 ∆t ∆t s 6,1.10 -6 ����= 6,6.10 s

Sai số hệ thống gây cho vi điều khiển độ trễ làm việc và độ trễ này sẽ

không thay đổi khi đo các giá trị thời gian khác nhau. Bằng cách sử dụng máy

-6

phát dao động cấp cho vi điều khiển PIC 16F877A, sai số hệ thống có thể được

-3

s (bảng 4.1). xác định vào khoảng 6,6 10

s. Như vậy, Trong các bài thí nghiệm vật lý phổ thông, sai số yêu cầu 10

4.4.3. Sai số máy đo thời gian hiện số MC – 964 bộ định thời trên là chấp nhận được.

64

b) a)

Hình 4.21: Kết quả đo của máy MC – 964 sau: (a) 1 chu kì; (b) 8 chu kì.

So sánh kết quả với máy đo thời gian gian hiện số MC – 964, chúng tôi sử

dụng tạo ra xung tần số 2 Hz từ máy phát dao động đưa vào máy MC – 964 ở Bảng 4.2: Kết quả đo tần số 2 Hz của MC – 964. chế độ đo chu kì (hình 4.21) ta được kết quả thể hiện ở bảng 4.2 và hình 4.22.

Chu kì chuẩn T = 1s

STT Số chu kì (n) t (s)

1 1 T(s) ∆T(s) 0,990 0,010 0,99

2 8 7,98 0,998 0,002

3 16 15,97 0,998 0,002

4 24 23,96 0,998 0,002

5 32 31,95 0,998 0,002

Chu kì đo: T = 0,9964 ± 0,0036 s Sai số tỉ đối: ε = 0,36%

65 Hình 4.22: Đồ thị so sánh sai số tỉ đối giữa máy đo thời gian hiện số MC –

964 và máy đo và xử lí thời gian sử dụng PIC 16F877A.

n Máy đo thời gian hiện số MC – 964 mắc sai số lớn (1%) với số chu kì đo

nhỏ ( < 8) và cho giá trị càng chính xác khi lấy số chu kì đo càng lớn. Như vậy,

với các bài thí nghiệm như đo thời gian vật chắn cổng quang điện hay đo gia tốc

rơi tự do, do thời gian lấy tính hiệu ngắn, chỉ trong một xung đến nên MC - 964

sẽ mắc sai số lớn, kết quả đo kém chính xác.

ε Với dụng cụ đo và xử lí thời gian sử dụng PIC 16F877A, sai số tỉ đối khi đo

tần số 2 Hz là = 0,01%. So với máy đo thời gian hiện số MC – 964, dụng cụ đo

và xử lí thời gian sử dụng PIC 16F877A cho kết quả với độ chính xác cao.

CHƯƠNG 5:

66 KẾT QUẢ NGHIÊN CỨU VÀ KẾT LUẬN

Áp dụng thí nghiệm này để khảo sát: chu kì con lắc đơn, hệ số ma sát trượt

trên mặt phẳng nghiêng giữa máng nghiêng bằng nhôm – vật thép, gia tốc rơi

tự do và vận tốc tức thời, vận tốc trung bình chuyển động thẳng đều của bi

thép. Đây là các thí nghiệm được tiến hành theo nội dung thí nghiệm thuộc

XÁC ĐỊNH CHU KÌ CON LẮC ĐƠN 5.1. chương trình vật lí trung học phổ thông.

5.1.1. Mục đích

-

Khảo sát ảnh hưởng của biên độ, khối lượng của quả nặng và độ dài của

g - dây treo đối với chu kì dao động của con lắc đơn.

5.1.2. Cơ sở lí thuyết Xác định gia tốc trọng trường tại nơi làm thí nghiệm bằng con lắc.

m

l Con lắc đơn gồm một vật nặng có kích thước nhỏ, khối lượng , được treo

ở đầu một sợi dây mềm không dãn có độ dài và có khối lượng không đáng kể.

.

T

π= 2

l g

Với các dao động nhỏ thì con lắc đơn dao động với chu kỳ: (6.1)

Tại các vị trí khác nhau trên Trái Đất, gia tốc trọng trường có giá trị khác

nhau. Việc xác định gia tốc trọng trường tại nơi làm thí nghiệm có ý nghĩa quan

trọng. Trong khoa học và đời sống có nhiều phương pháp khác nhau để xác

g định gia tốc trọng trường.

l

Trong thí nghiệm này, ta xác định gia tốc trọng trường bằng con lắc đơn

=

g

.

2 π 4 2 T

theo công thức: (6.1)

5.1.3. Dụng cụ thí nghiệm

-

- Đế ba chân bằng sắt, có hệ vít chỉnh cân bằng.

- Giá đỡ bằng nhôm, cao 75 cm, có thanh ngang treo con lắc.

Thước thẳng dài 700 mm gắn trên giá đỡ.

67 D -

- Ròng rọc bằng nhựa, đường kính = 5 cm, có khung đỡ trục quay.

- Dây làm bằng sợi tổng hợp, mảnh, không dãn, dài 70 cm., quả nặng 50g.

- Cổng quang điện hồng ngoại, dây nố, jack cắm.

5.1.4. Lắp ráp thí nghiệm Máy đo và xử lí thời gian sử dụng PIC 16F877A.

1. Nối cổng quang điện hồng ngoại vào

cổng A của máy đo, đưa nguồn điện

từ bộ nguồn DC 19V vào máy đo, bật

công tắc và chọn bài thí nghiệm con m lắc đơn.

2. Treo trọng vật có = 50 g vào đầu

dưới sợi dây. Vặn các vít đế ba chân,

đều chỉnh cho giá đỡ thẳng đứng. Hình 5.1: Đo chu kì con lắc đơn.

Quay ròng rọc và đều chỉnh chiều dài

dây có độ dài khoảng 400 mm đến 500

mm, dịch chuyển cổng hồng ngoại sao cho cửa sổ của nó nằm trên mặt

phẳng ngang với vị trí tâm trong vật và cách tâm trọng vật một khoảng 3

cm. 5.1.5. Tiến hành thí nghiệm

l

Đo chiều dày dây treo, nhập giá trị và số chu kì cần đo vào máy qua ma

0 , ghi nhận giá trị cỡ 5

T α0 1.

và trận bàn phím hay máy tính cá nhân. g Cho con lắc dao động với góc lệnh ban đầu

2. nhận được.

3.

Thay đổi chiều dài dây treo, lặp lại phép đo và hoàn thành bảng số liệu Bảng 5.1: Chu kì con lắc đơn. 5.1.

± l nT

2 (m/s

t ∆g T = ... ... mm, g =... chu kì

) (s) )

2 (m/s

(s) Lần 1

68

± g = 2 3 4 5.1.6. Kết quả thí nghiệm đo bằng máy đo và xử lí thời gian sử dụng 2 ... m/s Gia tốc trọng trường: ... PIC16F77A

Bảng 5.2: Chu kì con lắc đơn.

l nT

t ∆g ± 1 mm,

) )

2 (m/s 0,024 0,006 0,006 0,012

2

g T = 410 (s) 1,290 1,288 1,288 1,288 g =5 chu kì 2 (m/s 9,727 9,757 9,757 ± 9,763 (s) 6,450 6,440 6,440 6,438 XÁC ĐỊNH GIA TỐC RƠI TỰ DO Lần 1 2 3 4 5.2. Gia tốc trọng trường: = 9,751 0,010 m/s 5.2.1. Mục đích

t s

Đo được thời gian của một vật trên những quãng đường đi được khác

nhau để rút ra kết luận về tính chất của chuyển động rơi tự do và xác định được

5.2.2. Cơ sở lý thuyết gia tốc rơi tự do.

Thả một vật (trụ bằng sắt, hòn bi,…) từ độ cao s trên g mặt đất, vật sẽ rơi rất nhanh theo phương thẳng đứng.

�⃗ Trong trường hợp này ảnh hưởng của không khí không

(s, t)

đáng kể, vật chỉ chuyển động dưới tác dụng của trọng lực a nên có thể coi vật rơi tự do. Khi một vật có vận tốc ban đầu

s t bằng không, chuyển động thẳng nhanh dần đều với gia tốc ,

2

Hình 5.2: Sự rơi tự do. thì quãng đường đi được sau khoảng thời gian được xác

=

s

at

.

1 2

định bởi công thức: (6.3)

=

.

g

2 s 2 t

Đối với chuyển động rơi tự do: (6.4)

69

5.2.3. Dụng cụ thí nghiệm

-

- Giá đỡ thẳng đứng có dây dọi và ba chân có vít chỉnh thăng bằng.

- Nam châm điện để giữ và thả rơi vật.

- Cổng quang điện, hộp đỡ vật rơi.

Trụ bằng sắt làm vật rơi tự do có thước thẳng 800 mm gắn chặt vào giá

đỡ. -

5.2.4. Lắp ráp thí nghiệm Máy đo và xử lí thời gian sử dụng PIC 16F877A.

1. Nam châm điện lắp trên đỉnh giá đỡ,

được nối vào cổng nam châm C c ủa

máy đo. Nối cổng quang điện hồng

ngoại vào cổng A (hoặc B) của máy

đo.

2. Điều chỉnh vị trí thẳng đứng cho giá

đỡ bằng cách quan sát quả dọi phối

hợp vặn các vít ở đế ba chân. Hộp đỡ Hình 5.3: Đo gia tốc rơi tự do vật rơi được đặt ở dưới chân giá đỡ.

3. Bật công tắc cung cấp điện cho máy

đo. Chọn bài thí nghiệm rơi tự do, cho nam châm hút giữ vật rơi, dịch

chuyển vị trí của nam châm điện sao cho vị trí ban đầu của vật trùng với

s 5.2.5. Tiến hành thí nghiệm vạch 0 trên thước đo.

Đo đoạn đường rơi và nhập giá trị vào máy đo qua ma trận bàn phím

1. hay máy tính cá nhân.

Ấn nút START để thả vật rơi. Ghi thời gian rơi, gia tốc thu được vào

2.

s 3. bảng 5.3. Lặp lại phép đo thêm. s = Nới lỏng vít và dịch chuyển cổng quang điện về phía dưới một khoảng

550 mm; 600 mm. Ứng với mỗi khoảng cách , thả vật rơi và ghi thời

gian tương ứng.

70

Bảng 5.3: Xác định gia tốc rơi tự do.

2

t

S

Lần đo

(mm) 500

gi = ti Thời gian rơi (s) � ti� 2si 2 ti � � 1 2 3 4 5

550

g 600 ±

2 … m/s

5.2.6. Kết quả thí nghiệm đo bằng máy đo và xử lí thời gian sử dụng Gia tốc rơi tự do: = … PIC16F77A

Bảng 5.4: Xác định gia tốc rơi tự do.

=

g

i

2 it

it

s 2 i 2 t i

t

Thời gian rơi (s)

1 2 3 4 5 Lần S đo (mm)

500 0,320 0.320 0,320 0,321 0,320 0,320 0,103 9,753

550 0,336 0,335 0,336 0,335 0,336 0,336 0,113 9,767

± g 600 0,351 0,350 0,350 0,351 0,351 0,351 0,123 9,762

2 0,005 m/s

Gia tốc rơi tự do: = 9,761

71

TN1: Thí nghiệm đo gia tốc rơi tự do. Hình 5.4: Đồ thị so sánh gia tốc rơi tự do giữa máy đo thời gian hiện số MC TN2: Thí nghiệm đo chu kì con lắc đơn.

o

– 964 và máy đo và xử lí thời gian sử dụng PIC 16F877A.

2 . Như vậy, dựa vào kết quả thu được hình 5.4, máy đo thời gian trị 9,787m/s

8’B) có giá Giá trị đo gia tốc rơi tự do ở thành phố Hồ Chí Minh (vĩ độ 10

hiện số MC – 964 cho kết quả kém chính xác hơn máy đo và xử lí thời gian sử

XÁC ĐỊNH HỆ SỐ MA SÁT TRƯỢT 5.3. dụng PIC 16F877A.

5.3.1. Mục đích

Vận dụng phương pháp động lực học để nghiên cứu lực ma sát tác dụng

vào một vật chuyển động trên mặt phẳng nghiêng. Xác định hệ số ma sát trượt

5.3.2. Cơ sở lý thuyết giữa vật bằng thép và mặt phẳng nghiêng bằng nhôm.

72

M

M α Cho một vật nằm trên mặt phẳng ( ) N��⃗ Fmst �������⃗ α nghiêng , với góc nghiêng so với mặt

M nằm ngang. Khi nhỏ, vật vẫn nằm yên

α trên , không chuyển động. Tăng dần độ

0α α>

P��⃗ Hình 5.5: Chuyển động của vật trên

mặt phẳng nghiêng. a nghiêng, , vật chuyển động

trượt xuống với gia tốc . Vật chuyển

μt α hệ số ma sát trượt động chịu tác dụng của ba lực: trọng lực, lực ma sát giữa vật – mặt phẳng a nghiêng và phản lực của mặt phẳng nghiêng tác dụng lên vật. Do đó độ lớn của

a = g(sinα – μt .cosα). chỉ phụ thuộc vào góc nghiêng và hệ số – gọi là (6.5) :

a α μt

= tana -

.

µ t

α

a , ta xác định được hệ số ma sát trượt g.cos

Bằng cách đo và : (6.6)

a

=

a

.

s 2 2 t

Gia tốc xác định theo công thức: (6.7)

t

Trong đó quãng đường đi được đo bằng thước milimét, thời gian đo

α bằng máy đo và xử lí thời gian dùng PIC 16F877A, điều khiển bằng công tắc và

cổng quang điện. Góc nghiêng có thể đọc ngay trên thước đo góc có quả dọi,

5.3.3. Dụng cụ thí nghiệm gắn vào mặt phẳng nghiêng.

-

- Mặt phẳng nghiêng có gắn thước đo góc và quả dọi.

- Nam châm điện gắn ở đỉnh mặt phẳng nghiêng.

- Giá đỡ mặt phẳng nghiêng.

- Trụ thép kim loại (thép) đường kính 3 cm, cao 3 cm dùng làm vật trượt.

- Máy đo và xử lí thời gian sử dụng PIC 16F877A.

Thước thẳng 800 mm.

73

5.3.4. Lắp ráp thí nghiệm

1. Đặt máng nghiêng có lắp nam châm điện và cổng quang điện lên giá đỡ.

Nam châm điện được lắp vào cổng C của máy đo nhờ jack cắm có 5

α chân. Cổng quang điện nối vào cổng A (hoặc B) của máy đo.

2. Dịch chuyển khớp nối để thay đổi góc nghiêng , sao cho khi đặt mặt

đáy trụ thép lên máng, trụ có thể trượt xuống. Điều chỉnh thăng bằng

cho máng nghiêng nhờ các chân vít của giá đỡ, sao cho dây dọi song

5.3.5. Trình tự thí nghiệm song với mặt phẳng của thước đo góc.

1. Bật công tắc nguồn, chon bài

thí nghiệm xác định hệ số ma

sát trượt.

s 2. Cố định vị trí khớp nối. Nhập

α giá trị đoạn đường trượt và

góc nghiêng vào máy đo qua

ma trận bàn phím hay máy Hình 5.6: Xác định hệ số ma sát trượt.

tính cá nhân.

3. Xác định vị trí ban đầu của

trụ thép: đặt trụ thép lên đỉnh mặt phẳng nghiêng, sát với nam châm,

mặt đáy tiếp xúc với mặt phẳng nghiêng. Nới lỏng vít của nam châm điện

để vị trí đầu của trụ thép tương ứng với giá trị 0 trên thước đo.

Nới lỏng vít để dịch chuyển cổng quang điện đến vị trí s = 500 mm, rồi α s 4. vặn vít hãm cố định vị trí của cổng quang điện trên máng nghiêng.

Cố định vị trí khớp nối. Nhập giá trị đoạn đường trượt và góc nghiệng

5.

µt 6. vào máy đo qua ma trận bàn phím hay máy tính cá nhân. t Ấn nút START trên máy đo để thả cho vật trượt. Đọc, ghi thời gian trượt

t và hệ số ma sát trượt vào bảng 5.5. Đặt lại trụ thép vào vị trí sát cổng

quang điện và lặp lại thêm 4 lần phép đo thời gian .

74

Bảng 5.5: Xác định hệ số ma sát trượt.

α ± s

= a = …

µ = … t

α

a 0 = tana - … g.cos

n t (s) ∆µt ± 2s (m/s2) … (mm), 2 t

Lần ( )

t

µ

1 2 3 4 5 Giá trị TB 5.3.6. Kết quả thí nghiệm đo bằng bộ thí nghiệm tự chế tạo Hệ số ma sát trượt: ± … = … Bảng 5.6: Xác định hệ số ma sát trượt.

0 0 1 = tana -

± α ± s

α

a g.cos

2s = 400 = a 2 t

1 mm, (m/s2) = 20 µ t n t (s) ∆µt

Lần ( )

µt 1,453 1,446 1,453 1,446 1,453 0,206 0,205 0,206 0,205 ± 0,206 0,0004 0,0006 0,0004 0,0006 0,0004 1 2 3 4 5 0,742 0,740 0,742 0,740 0,742

Hệ số ma sát trượt: = 0,2056 0,0005

So sánh kết quả thu được với kết quả đo bằng máy MC – 964 ta được đồ

thị hình 5.7.

75

Hình 5.7: Đồ thị so sánh hệ số ma sát giữa máy đo thời gian hiện số MC –

964 và máy đo sử dụng PIC 16F877A.

Do sự phụ thuộc của hệ số ma sát vào tính chất mặt tiếp xúc giữa vật và

mặt nghiêng (bụi, độ ẩm, độ trầy xước cả vật và mặt nghiêng,...) nên độ chệnh

lệch hệ số ma sát (khoảng 0,010) có thể chấp nhận được, các kết quả xem như

XÁC ĐỊNH VẬN TỐC TRUNG BÌNH, VẬN TỐC TỨC THỜI 5.4. tương đương.

5.4.1. Mục đích

-

Xác định vận tốc tức thời của viên bi tại các điểm trên mặt phẳng ngang

- có ma sát rất nhỏ.

So với với vận tốc trung bình trên một đoạn đường bất kì. Từ đó nghiệm

5.4.2. Cơ sở lí thuyết lại định luật I Niuton.

Thả viên bi từ một điểm trên một máng nghiêng cho lăn xuống mặt phẳng

ngang với ma sát rất nhỏ. Trên mặt phẳng ngang, do phản lực cân bằng với

trọng lực cân bằng với trọng lực nên theo định luật I Niuton, viên bi sẽ chuyển

động thẳng đều. Vận tốc tức thời tại mọi điểm bằng nhau và bằng vận tốc trung

bình trên một đoạn đường bất kì.

76

5.4.3. Dụng cụ thí nghiệm

-

Đế 3 chân, giá đỡ có gắn sẵn hai cổng quang và nam châm điện phía trên

- máng nghiêng nhỏ.

- Công tắc nam châm.

- Thước đo góc có gắn quả dọi, bi thép, khớp nối.

5.4.4. Lắp ráp dụng cụ thí nghiệm Máy đo và xử lí thời gian sử dụng PIC 16F877A.

1. Nam châm điện lắp trên

đỉnh máng nghiêng của

giá đỡ, được nối qua

công tắc vào ổ cắm C

của máy đo.

2. Cổng quang điện 1 và 2

Hình 5.8: Xác định vận tốc trung bình, vận tốc

tức thời. lắp ờ hai vị trí nhất định s trên mặt phẳng ngang,

cách nhau một đoạn .

Hai cổng quang này được cắm vào ổ A và B của B của máy đo.

3. Lưu ý phải điều chỉnh để giá đỡ nằm ngang. Điều này được kiểm tra

5.4.5. Trình tự thí nghiệm nhờ quả dọi treo ở góc thước đo.  Đo vận tốc tức thời của bi thép tại các điểm khác nhau trên quĩ

đạo

1. Mở công tắc máy đo, chọn bài thí nghiệm chuyển động thẳng đều. Cho

s nam châm hút giữa bi thép. Dịch chuyển hai cổng quang đến các vị trí

cách nhau một khoảng = 30 cm – 50 cm.

1

2. Nhấn nút công tắc cho nam châm nhả bi thép. Khi đi qua cổng quang 1,

t2 t1 = t2 là thời gian viên bi chắn chắn cổng hồng ngoại. Tiếp tục máy đo chỉ t

t2 t1 chuyển động, bi qua cổng quang 2 trong thời gian . Nếu thì

, . chuyển động của bi là thẳng đều. Ghi lại các giá trị

77 d d

3. Dùng thước kẹp đo đường kính của viên bi, nhập giá trị

=

=

,

.

v 1

v 2

2

d t 1

qua ma trận bàn phím hay máy tính cá nhân, từ đó tính được vận tốc (6.8) vào máy đo d t

tức thời của bi tại nơi đặt hai cổng quang điện là:  Đo vận tốc trung bình của viên bi trên các quãng đường khác

nhau

s = Cho nam châm hút giữ bi thép. Dịch chuyển hai cổng quang đến các vị

s 1. trí cách nhau một khoảng 30 cm.

Đo đoạn đường chuyển động, nhập giá trị vào máy đo qua ma trận bàn

2. phím hay máy tính cá nhân.

3. Nhấn nút công tắc cho nam châm nhả bi thép. Khi bi đi đến cổng quang

1, máy đo bắt đầu đếm. Tiếp tục chuyển động, bi đến cổng quang 2 thì

đồng hồ ngừng đếm. Đồng hồ chỉ t là thời gian viên bi đi ngãng đường s

t vtb từ cổng quang 1 đến 2.

, điền các số liệu thu được vào bảng 5.7. 4. Ghi nhận giá trị thời gian và

Giữa nguyên cổng quang 1, dịch chuyển cổng quang 2 ra xa cổng quang

5. 1 mỗi lần 5 cm. Lặp lại các động tác như trên.

Bảng 5.7: Xác định vận tốc tức thời và vận tốc trung bình. 6. Hoàn thành bảng số liệu 5.7.

=

v tt

=

± d

v tb

d t 1

d t

∆vtt ∆vtb t ... mm s = ...

Lần (s) (cm) 𝑡 (s) (m/s) (m/s)

1 2 3 (m/s) (m/s) vtb ± Vận tốc trung bình:

± vtt Vận tốc tức thời: ... m/s = ... = ... ... m/s

78

5.4.6. Kết quả thí nghiệm đo bằng bộ thí nghiệm tự chế tạo Bảng 5.8: Xác định vận tốc tức thời và vận tốc trung bình.

=

v tt

=

± d

v tb

d t 1

d t

0,02 mm ∆vtb t s = 20,70 ∆vtt

Lần (s) (cm) 𝑡 (s) (m/s) (m/s)

1 2 3 4 5 0,034 0,034 0,033 0,034 0,033 0,007 0,007 0,011 0,007 0,011 30 30 50 30 50 0,520 0,520 0,869 0,521 0,869 (m/s) 0,577 0,577 0,575 0,577 0,575 0,001 0,001 0,001 0,001 0,001

(m/s) 0,609 0,609 0,627 0,609 0,627 vtt = 0,616± 0,009 m/s Vận tốc tức thời: vtb = 0,576± 0,001 m/s Vận tốc trung bình:

So sánh kết quả thu được với kết quả đo bằng máy MC – 964 ta được đồ

thị hình 5.9.

b) a)

Hình 5.9: Đồ thị so sánh vận tốc tức thời (hình 5.9a) và vận tốc trung bình

(hình 5.9b) giữa máy đo thời gian hiện số MC – 964 và máy đo và xử lí thời gian

sử dụng PIC 16F877A.

79

Máy MC-964 mắc sai số lớn khi đo thời gian ngắn (thời gian viên chắn

cổng quang điện) và độ chính xác càng cao khi đo thời gian càng lớn nên giá trị

vận tốc tức thời đo được ở hai máy có sự chênh lệch khá rõ ở đồ thị hình 5.9a.

Trong khi đó, do đó vận tốc trung bình trong thời gian tương đối lớn nên kết

KẾT LUẬN 5.5. quả hai máy thu được là như nhau (đồ thị hình 5.9b).

Từ việc nghiên cứu những kiến thức cơ bản về điện – điện tử và vi điều

- khiển, chúng tôi đã:

Thiết kế được dụng cụ đo và xử lý thời gian dùng vi điểu khiển PIC

- 16F877A.

Các thông tin được đo gián tiếp bên ngoài và các kết quả trong quá trình

- xử lý có thể nhập xuất dễ dàng, làm tăng tính mềm dẻo, cơ động cho thiết bị.

Máy đo và xử lý thời gian dùng vi điểu khiển PIC 16F877A có khả năng

làm việc và xử lý kết quả thu được dựa vào nguồn code nạp sẵn do đó làm tăng

tính tự động cho thiết bị. Đây là dụng cụ giúp tối ưu hóa các bài thí nghiệm

- minh họa trên lớp.

So với đồng hồ đếm và hiển thị thời gian hiện số MC – 964, thiết bị tỏ ra

vượt trội về khả năng đo thời gian với độ chính xác cao hơn, xử lý được các kết

quả trung gian (tính gia tốc, hệ số ma sát, chu kì,...), giao tiếp linh hoạt với

- người dùng.

Máy đo và xử lý thời gian dùng vi điểu khiển PIC 16F877A có khả năng

loại nhiễu tốt nhờ vào hệ thống code bẫy lỗi, tạo độ tin cậy cao trong quá trình

HƯỚNG PHÁT TRIỂN 5.6. đo đạc và tính toán.

Tuy có những lợi thế trên, dụng cụ đo và xử lý thời gian dùng vi điểu khiển

PIC 16F877A vẫn chưa thể tự nạp chương trình trực tiếp qua máy tính cá nhân

và chỉ dừng lại trong đo đạc các bài thí nghiệm cơ học đơn giản dùng đến cổng

hồng ngoại và nam châm điện. Vì vậy, đề tài có thể phát triển theo hướng mở

80

rộng cho các thí nghiệm quang học, điện học cùng nhiều thí nghiệm khác trong

chương trình vật lý trung học phổ thông.

81 TÀI LIỆU THAM KHẢO

Tiếng Việt

[1] Trần Đặng Bảo Ân (2011), Xây dựng bộ thí nghiệm khảo sát chuyển

động của vật dưới tác dụng của trọng trường.

[2] KS.Đỗ Thanh Hải, KS.Ngô Thanh Hải (2003), Nguyên lý căn bản và ứng

dụng mạch điện tử, Nhà xuất bản thanh niên.

[3] ThS.Dương Xuân Quý (2010), Vấn đề sử dụng thiết bị thí nghiệm vật lý

trong trường phổ thông thực trạng và giải pháp, Tạp chí thiết bị giáo

Tiếng Anh dục số 61.

[4] Martin P.Bates (2007), Programming 8-Bit PIC Microcontroller in C

with interactive Hardware Simulation, www.newnespress.com.

[5] Lucio Di Jasio (2007), Programming 16-Bit PIC Microcontroller in C

Learning to Fly the PIC24, www.elsevier.com.

[6] Microchip Technology (2003), Microchip PIC16F877A Data sheet

28/40/44-Pin enhanced flash Microcontrollers.

[7] http://www.alldatasheet.com/datasheet-

pdf/pdf/81905/ETC/RS232.html.

[8] http://pdf1.alldatasheet.com/datasheet-

pdf/view/251985/VISHAY/LCD-020M004B.html.

[9] http://pdf1.alldatasheet.com/datasheet-pdf/view/17871/PHILIPS/

LM324.html.

[10] http://pdf1.alldatasheet.com/datasheet-pdf/view/25385/

STMICROELECTRONICS/TL084.html.

[11] http://pdf1.alldatasheet.com/datasheet-pdf/view/398144/

QUARTZCOM/SMX-415.html.

[12] http://www.instructables.com/id/Simple-JDM-PIC-Programmer.

[13] http://www.junun.org/MarkIII/Warp13a.jsp.

82

[14] https://www.olimex.com/Products/PIC/Programmers/PIC-MCP-

USB.

[15] http://www.oz1bxm.dk/PIC/P16PRO40.htm.

[16]

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE

&nodeId=1406&dDocName=en010020.

[17]

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE

& nodeId=1406&dDocName=en019469&part=SW007002.

[18]

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE

& nodeId=1406&dDocName=en010019&part=DV007003.

83 PHỤ LỤC

float l,d,T,g,tg,tg2,tg3,goc,hs,vt,a;

#include "16f877a.h"

float const PI2=6.283185;

#fuses hs,nowdt,put

int16 x,m,s;

#use delay(clock=20M)

#priority

#include "math.h"

int_Timer0,int_Ext,int_CCP1,int_Timer1,int_R

#include "lcd_lib_8bit.c"

da

#use rs232 (baud=9600,

#int_Ext

xmit=PIN_C6,rcv=PIN_C7,bits=8)

void ngat_B0()

#use fast_io(A)

{

#use fast_io(B)

while(B0!=1){};

#use fast_io(C)

Set_Timer1(0);

#use fast_io(D)

A1=0;m=0;y=0;z=1;

#byte porta =0x05

Disable_Interrupts(Int_Ext);

#byte portb =0x06

Enable_Interrupts(Int_Ccp1);

#byte portc =0x07

Clear_Interrupt(Int_Ccp1);

#byte portd =0x08

Enable_Interrupts(Int_Timer0);

#byte porte =0x09

Set_Timer0(255);

#bit A0 =porta.0

Clear_Interrupt(Int_Timer0);

#bit A1 =porta.1

}

#bit E0 =porte.0

#int_CCP1

#bit B0 =portb.0

void ngat_CCP1()

#bit B1 =portb.1

{

#bit B2 =portb.2

if (get_timer1()<6250&&m==0&&z==1)

#bit B3 =portb.3

{

#bit B4 =portb.4

Set_Timer0(255);

#bit B5 =portb.5

goto nhieu_ngat_CCP1;

#bit B6 =portb.6

}

#bit B7 =portb.7

else

#bit TMR1IF = 0x0c.0

{

int1 y,z;

if (k==4)

int8 k,so,so_1,so_2;

{

int8 nghin,tram,chuc,don_vi;

Set_timer1(0);m=0;

int8 n,lan,nT;

Phụ lục 1: Code_for_PIC_16F877A.ccs

Setup_CCP1(Ccp_Capture_Fe);

Setup_Timer_0(Rtcc_Div_1|Rtcc_Ext_H_To_L);

}

Set_Timer0(255);

Setup_Timer_1(T1_DISABLED);

}

s=m+TMR1IF;

z=0;

}

Setup_Timer_1(T1_INTERNAL|T1_Div_By_8);

nhieu_ngat_timer0: ;

k++;

}

z=0;

#int_Timer1

}

void ngat_Timer1()

nhieu_ngat_CCP1: ;

{

}

m++;

#int_Timer0

}

void ngat_Timer0()

#int_Rda

{

void nhan_data()

if (get_timer1()<6250&&m==0&&z==1)

{

{

CCP_2=getchar();

Set_Timer0(255);

}

goto nhieu_ngat_timer0;

void quet_phim();

}

void nhap_so();

else

void tao_so();

{

void con_lac_don();

Setup_Timer_1(T1_DISABLED);

void roi_tu_do();

CCP_1=get_timer1();

void he_so_ma_sat();

s=m+TMR1IF;

void chuyen_dong_thang_deu();

Setup_Timer_1(T1_INTERNAL|T1_Div_By_8);

void kich_ngat();

n++;

void nhap_so()

if (n==1)

{

{

so_1=so-0x30;

Set_Timer0(256-nT*2);

so_2++;

Set_timer1(0);m=0;

if(so_2==4)

}

{nghin=tram;tram=chuc; chuc=don_vi;

don_vi=so_1;}

if (n==4)

if(so_2==3)

{

{tram=chuc; chuc=don_vi; don_vi=so_1;}

Set_timer1(0);m=0;

if(so_2==2)

84

if (!B2)

{chuc=don_vi; don_vi=so_1;}

{so=0x39; delay_ms(50); while(!B2){};}

if(so_2==1)

if (!B5)

{don_vi=so_1;}

{so=0x43; delay_ms(50); while(!B5){};}

}

B3=1;B6=1;A0=1;B7=0;

void quet_phim()

if (!B1)

{

{so=0x2A; delay_ms(50);

so=0;

while(!B1){};}

while(so==0)

if (!B4)

{

{so=0x30; delay_ms(50); while(!B4){};}

if (CCP_2>=48&&CCP_2<=57)

if (!B2)

{

{so=0x23; delay_ms(50); while(!B2){};}

so=CCP_2;CCP_2=0;break;

if (!B5)

}

{so=0x44; delay_ms(50); while(!B5){};}

B3=0;B6=1;A0=1;B7=1;

}

if (!B1)

}

{so=0x31; delay_ms(50); while(!B1){};}

void tao_so(int z)

if (!B4)

{

{so=0x32; delay_ms(50); while(!B4){};}

Enable_Interrupts(Int_Rda);

if (!B2)

Enable_Interrupts(Global);

{so=0x33; delay_ms(50); while(!B2){};}

so_1=so_2=CCP_2=0;E0=1;

if (!B5)

nghin=tram=chuc=don_vi=0;

{so=0x41; delay_ms(50); while(!B5){};}

do

B3=1;B6=0;A0=1;B7=1;

{

if (!B1)

quet_phim();

{so=0x34; delay_ms(50); while(!B1){};}

if(z!=1)

if (!B4)

{

{so=0x35; delay_ms(50); while(!B4){};}

LCD_Putchar(so);

if (!B2)

}

{so=0x36; delay_ms(50); while(!B2){};}

if((so>=0x30)&&(so<=0x39))nhap_so();

if (!B5)

} while

{so=0x42; delay_ms(50); while(!B5){};}

((so>=0x30)&&(so<=0x39)&&so_2!=z);

B3=1;B6=1;A0=0;B7=1;

if (!B1)

x=nghin*1000+(int16)tram*100+chuc*10+d

{so=0x37; delay_ms(50); while(!B1){};}

on_vi;

if (!B4)

E0=0;

{so=0x38; delay_ms(50); while(!B4){};}

85

...

}

}

void kich_ngat()

void chuyen_dong_thang_deu()

{

{

A1=1;CCP_1=0;y=1;k=0;m=0;n=1;z=0;

...

Setup_Timer_0(Rtcc_Div_1|Rtcc_Ext_L_To_H);

}

void main()

Setup_Timer_1(T1_INTERNAL|T1_Div_By_8);

{

Setup_CCP1(Ccp_Capture_Re);

set_tris_A(0x10);

Ext_Int_Edge(L_To_H);

set_tris_B(0x37);

Clear_Interrupt(Int_Ext);

set_tris_C(0x87);

Enable_Interrupts(Int_Ext);

set_tris_D(0x00);

Clear_Interrupt(Int_Timer1);

set_tris_E(0x00);

Enable_Interrupts(Int_Timer1);

while(1)

Disable_Interrupts(Int_Ccp1);

{

Disable_Interrupts(Int_Timer0);

LCD_Init();

Enable_Interrupts(Global);

putc(254);putc(01);putc(00);

}

A1=0;

float dinh_thoi()

LCD_PutCmd(0x01);

{

LCD_Gotoxy(1,1);

Get_Timer1()*0.0000016+m*0.1048576;

printf(LCD_Putchar,"THI NGHIEM VAT LI

}

PT");

void thoi_gian()

LCD_Gotoxy(2,1);

{

printf(LCD_Putchar," DHSP TP.HCM");

tg=CCP_1*0.0000016+s*0.1048576;

LCD_Gotoxy(3,1);

}

printf(LCD_Putchar," ****//****");

void con_lac_don()

tao_so(1);

{

LCD_PutCmd(0x01);

...

printf(LCD_Putchar," CON_LD ROI_TD");

}

LCD_Gotoxy(2,1);

void roi_tu_do()

printf(LCD_Putchar," 1 2");

{

LCD_Gotoxy(3,1);

...

printf(LCD_Putchar," HS_MS CD_TD");

}

LCD_Gotoxy(4,1);

void he_so_ma_sat()

printf(LCD_Putchar," 3 4");

{

chon_tn:A1=1;z=0;tao_so(1);

86

case 4: chuyen_dong_thang_deu();goto

switch(x)

chon_tn;

{

}

case 1: con_lac_don();goto chon_tn;

}

case 2: roi_tu_do();goto chon_tn;

87

case 3: he_so_ma_sat();goto chon_tn;

lan=(255-Get_timer0())/2+1;

void con_lac_don()

lan=nT-lan;

{

LCD_Gotoxy(4,5);

LCD_PutCmd(0x01);

Printf(LCD_Putchar," CON LAC DON");

Printf(LCD_Putchar,"%6.3gs",dinh_thoi());

LCD_Gotoxy(2,1);

LCD_Gotoxy(4,18);

Printf(LCD_Putchar,"CHIEU DAI DAY:");

Printf(LCD_Putchar,"%2u",lan);

LCD_Gotoxy(2,15);

}

tao_so(4);

if(n==2)

l=x*0.001;delay_ms(500);

{

LCD_Gotoxy(3,1);

Disable_Interrupts(Global);

Printf(LCD_Putchar,"SO CHU KI CAN DO:");

thoi_gian();

LCD_Gotoxy(3,18);

break;

tao_so(2);delay_ms(500);

}

nT=(int8)x;n=0;m=0;lan=0;

}

LCD_Gotoxy(4,1);

T=tg/nT;

Printf(LCD_Putchar,"TG: 0.000s nT: 0");

g=l/((T/(PI2))*(T/PI2));

LCD_PutCmd(0x01);

Setup_Timer_1(T1_INTERNAL|T1_Div_By_8);

Printf(LCD_Putchar," CON LAC DON");

Setup_Timer_0(Rtcc_Div_1|Rtcc_Ext_L_To_H);

LCD_Gotoxy(2,1);

Set_Timer0(255);

Printf(LCD_Putchar,"THOI GIAN:

%6.3gs",tg);

Clear_Interrupt(Int_Timer0);

LCD_Gotoxy(3,1);

Enable_Interrupts(Int_Timer0);

Printf(LCD_Putchar,"CHU KI: %6.3gs",T);

Clear_Interrupt(Int_Timer1);

LCD_Gotoxy(4,1);

Enable_Interrupts(Int_Timer1);

while(1)

Printf(LCD_Putchar,"GIA

TOC:%6.3gm/s^2",g);

{

if(n==1)

{

Phụ lục 2: Subprocess: Con_lac_don }

l,nT,tg,T,g);

Printf("x%6.3gy%2uz%6.3gk%6.3gl%6.3ga",

}

88

Printf(LCD_Putchar,"%6.3gs",dinh_thoi());

void roi_tu_do()

}

{

if(n==2||k==1)

LCD_PutCmd(0x01);

{

Printf(LCD_Putchar," ROI TU DO");

Disable_Interrupts(Global);

LCD_Gotoxy(2,1);

thoi_gian();

Printf(LCD_Putchar,"DOAN DUONG ROI:");

break;

LCD_Gotoxy(2,16);

}

tao_so(4);delay_ms(500);

}

l=x*0.001;

g=2*l/(tg*tg);

kich_ngat();

LCD_Gotoxy(3,9);

LCD_Gotoxy(3,1);

Printf(LCD_Putchar,"%6.3gs",tg);

Printf(LCD_Putchar,"TG ROI: 0.000s");

LCD_Gotoxy(4,1);

while(1)

Printf(LCD_Putchar,"GIA

{

TOC:%6.3gm/s^2",g);

if(y==0)

Printf("x%6.3gy%6.3gz%6.3g2b",l,tg,g);

{

}

Phụ lục 3: Subprocess: Roi_tu_do

LCD_Gotoxy(3,9);

tao_so(2);delay_ms(500);

void he_so_ma_sat()

goc=x*PI2/360;

{

kich_ngat();

LCD_PutCmd(0x01);

LCD_PutCmd(0x01);

Printf(LCD_Putchar," HS MA SAT");

Printf(LCD_Putchar," HS MA SAT");

LCD_Gotoxy(2,1);

LCD_Gotoxy(2,1);

Printf(LCD_Putchar,"D_DUONG TRUOT:");

Printf(LCD_Putchar,"L=%6.3gm

LCD_Gotoxy(2,15);

GOC=%3.0Luo",l,x);

tao_so(4);delay_ms(500);

LCD_Gotoxy(3,1);

l=x*0.001;

Printf(LCD_Putchar,"TG TRUOT: 0.000s");

LCD_Gotoxy(3,1);

while(1)

Printf(LCD_Putchar,"GOC NGHIENG:");

{

LCD_Gotoxy(3,13);

Phụ lục 4: Subprocess: He_so_ma_sat

}

if(y==0)

LCD_Gotoxy(3,11);

{

Printf(LCD_Putchar,"%6.3gs",tg);

LCD_Gotoxy(3,11);

a=2*l/(tg*tg);

Printf(LCD_Putchar,"%6.3gs",dinh_thoi());

hs=tan(goc)-a/(9.8*cos(goc));

}

LCD_Gotoxy(4,1);

if(n==2||k==1)

Printf(LCD_Putchar,"HS MA

{

SAT:%5.3g",hs);

Disable_Interrupts(Global);

thoi_gian();

Printf("x%6.3gy%Luz%6.3gk%6.3gc",l,x,tg,h

break;

s);

}

}

89

thoi_gian();

void chuyen_dong_thang_deu()

tg3=tg;

{

LCD_Gotoxy(3,13);

TN4: LCD_PutCmd(0x01);

Printf(LCD_Putchar,"%6.3gs",tg);

Printf(LCD_Putchar," CD_THANG_DEU");

nT++;n++;

LCD_Gotoxy(2,1);

Disable_Interrupts(Int_Timer0);

Printf(LCD_Putchar,"THOI GIAN 1:");

}

LCD_Gotoxy(3,1);

if(nT==2)

Printf(LCD_Putchar,"THOI GIAN 2:");

{

kich_ngat();n=3;k=4;nT=0;

break;

while(1)

}

{

}

if (k==6)

tg2=(floor((tg2+0.0005)*1000))/1000;

{

tg3=(floor((tg3+0.0005)*1000))/1000;

thoi_gian();

if(tg2==tg3)

tg2=tg;

{

LCD_Gotoxy(2,13);

LCD_PutCmd(0x01);

Printf(LCD_Putchar,"%6.3g",tg);

Printf(LCD_Putchar," CD THANG DEU");

nT++;k++;

LCD_Gotoxy(2,1);

Disable_Interrupts(Int_Ccp1);

Printf(LCD_Putchar,"THOI GIAN

}

CD:%6.3gs",tg);

if (n==5)

LCD_Gotoxy(3,1);

{

Phụ lục 5: Subprocess: Chuyen_dong_thang_deu

thoi_gian();

Printf(LCD_Putchar,"DUONG KINH BI:");

break;

LCD_Gotoxy(3,15);

}

tao_so(2);

}

d=x*0.001;

vt=l/tg;

LCD_Putchar(".");

LCD_Gotoxy(3,14);

tao_so(2);delay_ms(500);

Printf(LCD_Putchar,"%6.3gs",tg);

d=d+x*0.00001;

LCD_Gotoxy(4,1);

vt=d/tg;

Printf(LCD_Putchar,"VAN TOC

LCD_Gotoxy(4,1);

TB:%6.3gm/s",vt);

Printf(LCD_Putchar,"V TUC

}

THOI:%6.3gm/s",vt);

else

Printf("x%0.6gy%6.3gz%6.3gd",d,tg,vt);

{

tao_so(1);

LCD_Gotoxy(4,1);

LCD_PutCmd(0x01);

Printf(LCD_Putchar," CD BIEN DOI

DEU");

Printf(LCD_Putchar," CD THANG DEU");

tao_so(1);

LCD_Gotoxy(2,1);

Goto TN4;

Printf(LCD_Putchar,"D_DUONG CD:");

}

LCD_Gotoxy(2,12);

Printf("x%6.3gy%6.3gz%6.3ge",l,tg,vt);

tao_so(4);delay_ms(500);

l=x*0.001;

}

kich_ngat();n=0;

LCD_Gotoxy(3,1);

Printf(LCD_Putchar,"THOI GIAN

CD:0.000s");

while(1)

{

if(n==1)

{

LCD_Gotoxy(3,14);

Printf(LCD_Putchar,"%6.3gs",dinh_thoi());

}

if(k==1)

{

Disable_Interrupts(Global);

90

1

v e R

8 3 C

4 0 1

1

4 C

u 0 1

R L C M

2 C R

1 R

K 0 1

+

f o

C D V 5

7

8 1 C

4 0 1

4 2 3 M L

1

11

B 6 U 4

C D V 5

-+

1 W S

T E S E R

91

T E S E R

5 6

A 7 7 8 F 6 1 c i P

RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 RC5 RC4 RC3

t e e h S

1 2 C

4 0 1

4 x 0 2

g n u d

5VDC

9 R

K 0 1

0 1 R

K 3 . 3

I

LED- LED+ D7 D6 D5 D4 D3 D2 D1 D0 E R/W RS Vee Vdd Vss

C D V 5 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

4 X 0 2 D C L Y A L P S D

2 J

D C L

u s

C D V 5 1

C D V 5

5 R

M 1

4 B R

5 B R

6 B R

7 B R

5 3 C

4 0 1

g n o h t

g n a h K y u D

o h p

0 67891

I

h n y u H

x i r t a M

6 R

K 0 1

7

r e b m u N

2 1 0 2 , 4 1 r e b m e c e D

1 J

y e K

i l t a v m e i

4 2 3 M L

1 2 3 4 5

n e y u g N

h g n

0 2 R

K 0 1

B 5 U 4

11

, y a d i r F

i

N P N

2 Q

X R T A M Y E K

C D V 5 1

-+

t n e m u c o D

1

h T

C D V 5

D E L W O L L E Y

1 B R

2 B R

3 B R

0 A R

6 1 C

4 0 1

1 R O S N E S

5 6

: r e n g

2 D

4 A

i

e l t i

i s e D

T

e z S

: e t a D

6 1 R

M 5 1

C D V 5

0 E R

3 1 C

2 0 1

C D V 5

C D V 5

9 1 C

4 0 1

4 3 C

4 0 1

4

3

C D V 5

3

4

2 3 C

4 0 1

2 P J

P - 4 _ N

I

0 E R

0 B R

1 B R

2 B R

3 B R

4 B R

5 B R

6 B R

7 B R

0 D R

1 D R

2 D R

3 D R

4 D R

5 D R

6 D R

7 D R

D R

3 P J

I

P - 4 _ N

I

C

3 3

4 3

5 3

6 3

7 3

8 3

9 3

0 4

9 1

0 2

1 2

2 2

7 2

8 2

9 2

0 3

2 3

1 1

8

9

0 1

D R

I

C

1

2

T N

0 0 2 5 C

1 B R

2 B R

4 B R

5 B R

7 N A

5 N A

6 N A

D D V

D D V

1

2

1 Q

N P N

I / 0 B R

M G P / 3 B R

C G P / 6 B R

D G P / 7 B R

C D V 5

0 P S P / 0 D R

1 P S P / 1 D R

2 P S P / 2 D R

3 P S P / 3 D R

4 P S P / 4 D R

5 P S P / 5 D R

6 P S P / 6 D R

7 P S P / 7 D R

3 1 R

0 0 1

3 2 C

4 0 1

C D V 5 1

/ * S C / 2 E R

/ * D R / 0 E R

/ * R W / 1 E R

3 3 C

4 0 1

I

F E R V C

T U O 2 C

/

2 P C C

T U O 1 C

I

/ I

K 1

/ I

/

A D S

/ I

/

P P V

/

A 7 7 8 F 6 1 U C M

1 2 R

K C 1 T O S O 1 T

S O 1 T

K C X T

K C 0 T

0 B R

1 A R

0 N A / 0 A R

1 N A / 1 A R

/ - F E R V / 2 N A / 2 A R

+ F E R V / 3 N A / 3 A R

/ * S S / 4 N A / 5 A R

/ 4 A R

/ 0 C R

/ 1 C R

1 P C C / 2 C R

L C S K C S / 3 C R

D S / 4 C R

O D S / 5 C R

/ 6 C R

T D X R / 7 C R

N K L C / 1 C S O

T U O K L C / 2 C S O

S S V

S S V

/ * R L C M

1 N V P

K 0 1

2

3

4

5

6

7

1

5 1

6 1

7 1

8 1

3 2

4 2

5 2

6 2

3 1

4 1

1 3

2 1

4 A R

T E N G A M O R T C E L E

1 Y

2 W S

N O T T U B

z H M 0 2

5 1 R

K 0 1

7 1 R

4 A R

R L C M

0 A R

1 A R

2 C R

3 C R

4 C R

5 C R

6 C R

7 C R

C D V 5

A 6 U

1

5 2 C

4 0 1

p 5 1

p 5 1

4 2 3 M L

0 3 C

4 0 1

4

11

1 C

3 C

C D V 5

-+

3 2

6 2 C

4 0 1

1 P

2 3 2 S R

C D V 5 1

8 R

K 3 . 3

5 1 C

4 0 1

5 9 4 8 3 7 2 6 1

C D V 5

C D V 5 1

+

3 R

M 1

K 0 1

7 R

I

C D V 5 1

3

1 1 C

u 0 0 1

1 F

E S U F

I

T U O

1

7 2 C

4 0 1

4 R

K 0 1

9 2 C

4 0 1

GND

2

4 1 C

4 0 1

4 2 3 M L

C D V 5

7 C

N

8 C

u 0 1

5 0 8 7

2 U

I

+

4

11

2 3 2 S R N O T A C N U M M O C

C D V 5 1

+

-+

u 0 1

A 5 U

1

+

9 C

u 0 0 1

+ C D V 5 R E W O P

u 0 0 1

0 1 C

3 2

3

+

8 2 C

4 0 1

3 1

8

2

6

4 1

7

6 1

2 R O S N E S

T U O

-

2 1 C

2 0 1

V

I

I

+ V

C D V 5

GND

3

C C V

N 1 R

N 2 R

2

0 3 3

8 1 R

M 5 1

T U O 1 T

T U O 2 T

N

4

3

5 1 8 7

3 U

I

9 1 R

T U O

T S P S

6 3 C

4 0 1

GND

1

-

15

GND

P - 4 _ N

I

D E L

+

2

1 P J

D R

N

2

I

9 0 8 7

4 U

I

D E R

Y E K W S

7 3 C

u 0 7 4

C

1 U

2 3 2 X A M

N I 1 T

N I 2 T

+ 1 C

- 1 C

+ 2 C

- 2 C

T U O 1 R

T U O 2 R

9 3 C

1

1 D

1

3

4

5

9

1

2

1 1

0 1

2 1

4 0 1

1

3 W S

C D V 5

+

+

6 C R

7 C R

C D V 5

4 2 C

4 0 1

1

1 1 R

0 0 1

k c a J

C D

4 J

2

5 C

6 C

u 0 1

u 0 1