70
TRƯỜNG CAO ĐẲNG K Ỹ THUẬT CAO THẮNG ----o0o---- KHOA ĐIỆN TỬ-TIN HỌC ĐỒ ÁN TỐT NGHIỆP THÀNH PHỐ HỒ CHÍ MINH

ĐỒ ÁN TỐT NGHIỆP - dulieu.tailieuhoctap.vndulieu.tailieuhoctap.vn/books/luan-van-de-tai/luan-van-de-tai-cd-dh/file_goc_780054.pdf · Tuần 1: Nhận đề tài và lập

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

TRƯỜNG CAO ĐẲNG K Ỹ THUẬT CAO THẮNG

----o0o----

KHOA ĐIỆN TỬ-TIN HỌC

ĐỒ ÁN TỐT NGHIỆP

THÀNH PHỐ HỒ CHÍ MINH

Với sự phát triển không ngừng của khoa học công nghệ, cuộc sống con người

ngày càng trở nên tiện nghi và hiện đại hơn. Điều đó đem lại cho chúng ta nhiều giải

pháp tốt hơn, đa dạng hơn trong việc xử lý những vấn đề tưởng chừng như rất phức tạp

gặp phải trong cuộc sống. Việc ứng dụng các thành tựu khoa học kỹ thuật hiện đại

trong tất cả các lĩnh vực đã và đang rất phổ biến trên toàn thế giới, thay thế dần những

phương thức thủ công , lạc hậu và ngày càng được cải tiến hiện đại hơn, hoàn mỹ hơn.

Cùng với sự phát triển chung đó, nước ta cũng đang mạnh mẽ tiến hành công

cuộc công nghiệp hóa và hiện đại hóa đất nước để theo kịp sự phát triển của các nước

trong khu vực và trên thế giới. Trong đó lĩnh vực điện tử đang ngày càng đóng vai trò

quan trọng trong việc phát triển kinh tế và đời sống con người. Sự phổ biến của nó

đóng góp không nhỏ tới sự phát triển của tất cả các ngành sản xuất, giải trí, ...trong

những năm gần đây đặc biệt trong lĩnh vực giải trí, quảng cáo đã có sự phát triển mạnh

mẽ với nhiều hình thức, phương pháp tiếp cận, quảng bá và chia sẻ thông tin hiện đại

và toàn diện hơn.

Với lòng đam mê, yêu thích của mình trong lĩnh vực này, nhóm đã quyết định

chọn đề tài “Quang Báo Hiển Thị Bằng Led Ma Trận” làm đề tài tốt nghiệp.

Trong thời gian ngắn thực hiện đề tài cộng với kiến thức còn nhiều hạn chế, nên

trong tập đồ án này không tránh khỏi thiếu sót, nhóm thực hiện rất mong được sự đóng

góp ý kiến của thầy cô và các bạn sinh viên.

Nhóm sinh viên thực hiện đề tài

LỜI CẢM ƠN

Trong suốt khóa học (2006-2009) tại Trường Cao Đẳng Kỹ Thuật Cao Thắng, với sự giúp đỡ của quý thầy cô và giáo viên hướng dẫn về mọi mặt từ nhiều phía và nhất là trong thời gian thực hiện đề tài, nên đề tài đã được hoàn thành đúng thời gian qui định. Nhóm thực hiện xin chân thành cảm ơn đến :

Quí thầy cô trong khoa Điện tử -Tin học đã giảng dạy những kiến thức chuyên môn làm cơ sở để thực hiện tốt luận văn tốt nghiệp và đã tạo điều kiện thuận lợi cho những người thực hiện hoàn tất khóa học.

Đặc biệt, cô NGUYỄN THỊ HỒNG ÁNH– giáo viên hướng dẫn đề tài đã nhiệt tình giúp đỡ và cho nhóm thực hiện những lời chỉ dạy quý báu, giúp nhóm thực hiện định hướng tốt trong khi thực hiện luận văn.

Tất cả bạn bè đã giúp đỡ và động viên trong suốt quá trình làm đồ án tốt nghiệp.

TP.HCM _ Tháng 7 năm 2009 Nhóm sinh viên thực hiện.

MỤC LỤC

Trang

Phiếu đăng ký đồ án tốt nghiệp………………………………………………………………….. Nhận xét của giáo viên hướng dẫn……………………………………………………………… Nhận xét của giáo viên phản biện……………………………………………………………….. Lời nói đầu……………………………………………………………………………………………… Lời cảm ơn……………………………………………………………………………………………… PHẦN I: NỘI DUNG Chương 1: Dẫn nhập …………………………………………...……………….........................5 1.1: Đặt vấn đề……………………………………………………………………………...5 1.2: Nội dung đề tài………………..……………………………………………………...5 1.3: Mục đích đề tài………………..………………………….………………………… 6 1.4: Đối tượng nghiên cứu……………...……………………………………………….6 1.5: Lập kế hoạch nghiên cứu…………….…………………………………………...6 Chương 2: Giới thiệu về bảng quang báo……………………………………...……………….7

2.1: Một số bảng quang báo thông dụng ……………………………………...……7 2.2: Giới thiệu về bảng quang báo hiển thị led ma trận …………………...… 8

Chương 3: Khảo sát linh kiện.……………….…………………… …………………………..…9 3.1: Vi điều khiển PIC 16F877A ……………… ……………………...………...9 3.2: Linh kiện khác trong mạch quang báo………..…………………...…………32 Chương 4: Các phương pháp hiển thị led ma trận………...……………………………….37 4.1: Phương pháp hiển thị bằng IC chốt………………………………………..….37 4.2: Phương pháp sử dụng thanh ghi dịch…………………………..…………….39 Chương 5: Sơ đồ khối và chức năng từng khối ………………………..…………………..44 5.1: Sơ đồ khối hệ thống ……………..…………………………………………….…44 5.2: Ý nghĩa từng khối………………………………………………………………......44 Chương 6: Tính toán ………………….…………………………………………………………....48 6.1: Nguồn điều khiển……………….………………………………………………..…48 6.2: Mạch nguồn Reset……………………………………………………………….....48 6.3: Mạch kéo dòng. ……………….…………………………………………………....50 Chương 7:Sơ đồ mạch và nguyên lý hoạt động………….………………………… ..……. 52 7.1: Sơ đồ nguyên lý mạch……………..………………………………………….. …52 7.2: Nguyên lý hoạt động……………...……………………………………………….53 Chương 8: Lưu đồ giải thuật và chương trình hoạt động ……….…………………….…54 8.1: Lưu đồ giải thuật………………. …………………………………………………..54 8.2: Chương trình hoạt động…………….…………………………………………….57 Chương 9: Tổng Kết………………….………………………………………………………..….....62 PHẦN II: PHỤ LỤC

CHƯƠNG 1

DẪN NHẬP

1.1 ĐẶT VẤN ĐỀ:

Thông tin liên lạc là vấn đề được quan tâm trong xã hội. Ngay từ ngày xưa, con người đã biết vận dụng những gì đã có sẵn để truyền tin như lửa, âm thanh, các dấu hiệu…

Ngày nay, với sự phát triển của xã hội thì ngày càng có nhiều cách tiếp cận với những thông tin mới. Ta có thể biết được thông tin qua báo chí, truyền hình, mạng internet, qua các pano, áp phích… Thông tin cần phải được truyền đi nhanh chóng, kịp thời và phổ biến rộng rãi trong toàn xã hội. Và việc thu thập thông tin kịp thời, chính xác là yếu tố hết sức quan trọng trong sự thành công của mọi lĩnh vực. Các thiết bị tự động được điều khiển từ xa qua một thiết bị chủ hoặc được điều khiển trực tiếp qua hệ thống máy tính.

Việc sử dụng vi điều khiển để điều khiển hiển thị có rất nhiều ưu điểm mà các phương pháp truyền thống như panô, áp phích không có được như việc điều chỉnh thông tin một cách nhanh chóng bằng cách thay đổi phần mềm. Với những lý do trên, nhóm thực hiện đề tài đưa ra một cách thức nữa phục vụ thông tin là dùng quang báo. Nội dung nghiên cứu của đề tài chính là tạo ra một bảng quang báo ứng dụng trong việc hiển thị truyền thông ở các nơi công cộng như công ty, nhà xưởng, các ngã tư báo hiệu…

Thế giới ngày càng phát triển thì lĩnh vực điều khiển cần phải được mở rộng hơn. Việc ứng dụng mạng truyền thông công nghiệp vào sản xuất mang lại nhiều thuận lợi cho xã hội loài người, thông tin được cập nhật nhanh chóng và được điều khiển một cách chính xác .

1.2 NỘI DUNG ĐỀ TÀI:

Với khoảng thời gian thực hiện đề tài 4 tuần, nhóm đã thảo luận và chọn nội dung của đề tài như sau:

- Nghiên cứu và tìm phương án điều khiển và xử lý dữ liệu cho bảng led ma trận hiển thị.

- Thi công bảng quang báo hiển thị kích thước 8×48 điểm ảnh.

- Viết chương trình tạo hiệu ứng và xử lý dữ liệu.

1.3 MỤC ĐÍCH ĐỀ TÀI:

Trong quá trình nghiên cứu và thực hiện đề tài này nhằm giúp người học:

- Tăng khả năng tự nghiên cứu cũng như tự học.

- Bước đầu tiếp xúc với thực tế .

- Vận dụng những kiến thức đã có đồng thời tìm tòi những kiến thức mới để hiểu sâu sắc hơn trong lĩnh vực này.

Để thiết kế được một hệ thống như đã nêu ở trên thì người nghiên cứu phải

nắm vững kiến thức chuyên ngành điện tử, tìm hiểu, nghiên cứu qua sách vở, tài liệu

nước ngoài và dạng mạch thực tế để thi công phần cứng.

1.4 ĐỐI TƯỢNG NGHIÊN CỨU:

- Các phương án điều khiển và xử lý dữ liệu cho bảng led ma trận.

- Tìm hiểu vi điều khiển PIC 16F877A.

- Tìm hiểu phương pháp lập trình C.

- Bảng quang báo led ma trận kích thước 8×48 điểm ảnh.

1.5 LẬP KẾ HOẠCH NGHIÊN CỨU:

Để thực hiện đề tài này nhóm sinh viên đã kết hợp sử dụng nhiều phương

pháp và phương tiện hỗ trợ gồm có:

Tham khảo tài liệu: kỹ thuật xung số, điện tử căn bản, vi điều khiển….

Quan sát.

Thực nghiệm.

Tổng kết kinh nghiệm.

Phương tiện: máy vi tính, Internet, thư viện…..

Kế hoạch nghiên cứu:

Tuần 1: Nhận đề tài và lập đề cương tổng quát.

Thu thập tài liệu và lập đề cương chi tiết.

Tuần 2, 3, 4: Thiết kế thi công và viết đồ án.

CHƯƠNG 2

GIỚI THIỆU VỀ BẢNG QUANG BÁO Ngày nay, các bảng quang báo ngày càng trở nên phổ biến và rất đa dạng về chủng loại và công nghệ thay thế dần cho các hình thức truyền thống như pano, áp phích,….bởi những tiện lợi và linh hoạt mà nó đem lại. Dưới đây, nhóm xin giới thiệu một số kiểu bảng quang báo thường được sử dụng:

2.1 MỘT SỐ BẢNG QUANG BÁO THÔNG DỤNG:

2.1.1. Mẫu một dòng chữ (16 X 240 điểm ảnh):

Các thông số kỹ thuật:

Kích thước hiển thị: chiều cao 122mm, chiều dài tuỳ ý (thường là bội của 305mm)

Độ phân giải (số điểm ảnh): 16 x 40 x (chiều dài hiển thị/305) Kết nối chuẩn (Máy tính, cổng COM) tuỳ chọn (RJ45, Bàn phím) Bảng này có thể hiển thị một dòng chữ cao 122mm (16 điểm ảnh - như hình

trên) hoặc hai dòng chữ cao 61mm (8 điểm ảnh) nhưng không dấu Tiếng Việt Kết nối chuẩn (Máy tính, cổng COM) tuỳ chọn ( RJ45)

2.1.2. Mẫu hai dòng chữ (32 X 240 điểm ảnh)

Các thông số kỹ thuật

Kích thước hiển thị: chiều cao 244mm, chiều dài tuỳ ý (thường là bội của 305mm)

Độ phân giải (số điểm ảnh): 32 x 40 x (chiều dài hiển thị/305) Kết nối chuẩn (Máy tính, cổng COM) tuỳ chọn ( RJ45) Bảng này có thể hiển thị hai dòng chữ cao 122mm (16 điểm ảnh – như hình

trên) hoặc một dòng chữ cao 244mm (32 điểm ảnh - như hình dưới)

Kết nối chuẩn (Máy tính, cổng COM) tuỳ chọn ( RJ45)

2.2. GIỚI THIỆU VỀ BẢNG QUANG BÁO HIỂN THỊ LED MA TRẬN

TRONG ĐỒ ÁN:

2.2.1. Phần cứng: - Kích thước hiển thị: chiều cao 6cm,chiều dài 36cm - Độ phân giải (số điểm ảnh):8 x 48. - Hiển thị:

o Một màu. o Nội dung hiển thị được cho chạy theo nhiều hướng khác nhau như : cuốn từ dưới lên, cuốn từ trên xuống, sang trái, sang phải.

2.2.2. Phần mềm: - Dùng ngôn ngữ C lập trình cho vi điều khiển 16F877A - Phần mềm để viết chương trình CCS

CHƯƠNG 3

KHẢO SÁT LINH KIỆN 3.1. VI ĐIỀU KHIỂN 16F877A: 1 SÔ ÑOÀ CHAÂN VI ÑIEÀU KHIEÅN PIC16F877A

2 MOÄT VAØI THOÂNG SOÁ VEÀ VI ÑIEÀU KHIEÅN PIC16F877A

Ñaây laø vi ñieàu khieån thuoäc hoï PIC16Fxxx vôùi taäp leänh goàm 35 leänh

coù ñoä daøi 14 bit. Moãi leänh ñeàu ñöôïc thöïc thi trong moät chu kì xung clock. Toác ñoä

hoaït ñoäng toái ña cho pheùp laø 20 MHz vôùi moät chu kì lệnh là 200ns. Bộ nhớ

chương trình 8Kx14 bit, bộ nhớ dữ liệu 368x8

byte RAM vào bộ nhớ dữ liệu EEPROM với dung lượng 256x8 byte. Số PORT I/O

là 5 với 33 pin I/O.

Caùc ñaëc tính ngoaïi vi bao goàmcaùc khoái chöùc naêng sau:

Timer0: boä ñeám 8 bit vôùi boä chia taàn soá 8 bit.

Timer1: boä ñeám 16 bit vôùi boä chia taàn soá, coù theå thöïc hieän chöùc naêng ñeám

döïa vaøo xung clock ngoaïi vi ngay khi vi ñieàu khieån hoaït ñoäng ôû cheá ñoä

sleep.

Timer2: boä ñeám 8 bit vôùi boä chia taàn soá, boä postcaler.

Hai boä Capture/so saùnh/ñieàu cheá ñoä roâng xung.

Caùc chuaån giao tieáp noái tieáp SSP (Synchronous Serial Port), SPI vaø I2C.

Chuaån giao tieáp noái tieáp USART vôùi 9 bit ñòa chæ.

Coång giao tieáp song song PSP (Parallel Slave Port) vôùi caùc chaân ñieàu

khieån RD, WR,

CS ôû beân ngoaøi.

Caùc ñaëc tính Analog:

8 keânh chuyeån ñoåi ADC 10 bit.

Hai boä so saùnh.

Beân caïnh ñoù laø moät vaøi ñaëc tính khaùc cuûa vi ñieàu khieån nhö:

Boä nhôù flash vôùi khaû naêng ghi xoùa ñöôïc 100.000 laàn.

Boä nhôù EEPROM vôùi khaû naêng ghi xoùa ñöôïc 1.000.000 laàn.

Döõ lieäu boä nhôù EEPROM coù theå löu tröõ treân 40 naêm.

Khaû naêng töï naïp chöông trình vôùi söï ñieàu khieån cuûa phaàn meàm. Naïp ñöôïc

chöông trình ngay treân maïch ñieän ICSP (In Circuit Serial Programming)

thoâng qua 2 chaân. Watchdog Timer vôùi boä dao ñoäng trong.

Chöùc naêng baûo maät maõ chöông trình.

Cheá ñoä Sleep.

Coù theå hoaït ñoäng vôùi nhieàu daïng Oscillator khaùc nhau.

3 SÔ ÑOÀ KHOÁI VI ÑIEÀU KHIEÅN PIC16F877A

4 TOÅ CHÖÙC BOÄ NHÔÙ

Caáu truùc boä nhôù cuûa vi ñieàu khieån PIC16F877A bao goàm boä nhôù chöông trình

(Program memory) vaø boä nhôù döõ lieäu (Data Memory).

5 BOÄ NHÔÙ CHÖÔNG TRÌNH

Boä nhôù chöông trình cuûa vi ñieàu khieån PIC16F877A laø boä nhôù flash, dung löôïng

boä

nhôù 8K word (1 word = 14 bit) vaø ñöôïc phaân thaønh nhieàu trang (töø page0 ñeán

page 3) .

Nhö vaäy boä nhôù chöông trình coù khaû naêng chöùa ñöôïc 8*1024 = 8192 leänh (vì

moät leänh sau khi maõ hoùa seõ coù dung löôïng 1 word (14 bit).

Ñeå maõ hoùa ñöôïc ñòa chæ cuûa 8K word boä nhôù chöông trình, boä ñeám chöông

trình coù dung löôïng 13 bit (PC<12:0>).

1. Khi vi ñieàu khieån ñöôïc reset,

boä ñeám chöông trình seõ chæ ñeán ñòa chæ 0000h (Reset vector). Khi coù ngaét xaûy ra,

boä ñeám chöông trình seõ chæ ñeán ñòa chæ 0004h (Interrupt vector).

Boä nhôù chöông trình khoâng bao goàm:

Boä nhôù stack vaø khoâng ñöôïc ñòa chæ hoùa bôûi boä ñeám chöông trình. Boä

nhôù stack seõ ñöôïc ñeà caäp cuï theå trong phaàn sau.

6 BOÄ NHÔÙ DÖÕ LIEÄU

Boä nhôù döõ lieäu cuûa PIC laø boä nhôù EEPROM ñöôïc chia ra laøm nhieàu

bank. Ñoái vôùi PIC16F877A boä nhôù döõ lieäu ñöôïc chia ra laøm 4 bank. Moãi bank coù

dung löôïng 128 byte, bao goàm caùc thanh ghi coù chöùc naêng ñaëc bieät SFG (Special

Function Register) naèm ôû caùc vuøng ñòa chæ thaáp vaø caùc thanh ghi muïc ñích chung

GPR (General Purpose Register) naèm ôû vuøng ñòa chæ coøn laïi trong bank. Caùc

thanh ghi SFR thöôøng xuyeân ñöôïc söû duïng (ví duï nhö thanh ghi STATUS) seõ

ñöôïc ñaët ôû taát caø caùc bank cuûa boä nhôù döõ lieäu giuùp thuaän tieän trong quaù trình truy

xuaát vaø laøm giaûm bôùt leänh cuûa chöông trình. Sô ñoà cuï theå cuûa boä nhôù döõ lieäu

PIC16F877A nhö sau:

6.1 THANH GHI CHÖÙC NAÊNG ÑAËC BIEÄT SFR

Ñaây laø caùc thanh ghi ñöôïc söû duïng bôûi CPU hoaëc ñöôïc duøng ñeå thieát laäp vaø

ñieàu khieån caùc khoái chöùc naêng ñöôïc tích hôïp beân trong vi ñieàu khieån. Coù theå

phaân thanh ghi SFR laøm hai loïai: thanh ghi SFR lieân quan ñeán caùc chöùc naêng beân

trong (CPU) vaø thanh ghi SRF duøng ñeå thieát laäp vaø ñieàu khieån caùc khoái chöùc

naêng beân ngoaøi (ví duï nhö ADC, PWM, …). Phaàn naøy seõ ñeà caäp ñeán caùc thanh ghi

lieân quan ñeán caùc chöùc naêng beân trong. Caùc thanh ghi duøng ñeå thieát laäp vaø ñieàu

khieån caùc khoái chöùc naêng seõ ñöôïc nhaéc ñeán khi ta ñeà caäp ñeán caùc khoái chöùc naêng

ñoù.

Thanh ghi STATUS (03h, 83h, 103h, 183h):thanh ghi chöùa keát quaû thöïc

hieän pheùp toaùn cuûa khoái ALU, traïng thaùi reset vaø caùc bit choïn bank caàn truy xuaát

trong boä nhôù döõ lieäu. Thanh ghi OPTION_REG (81h, 181h): thanh ghi naøy cho

pheùp ñoïc vaø ghi, cho pheùp ñieàu khieån chöùc naêng pull-up cuûa caùc chaân trong

PORTB, xaùc laäp caùc tham soá veà xung taùc ñoäng, caïnh taùc ñoäng cuûa ngaét ngoaïi vi

vaø boä ñeám Timer0.

Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh):thanh ghi cho pheùp ñoïc vaø ghi,

chöùa caùc bit ñieàu khieån vaø caùc bit côø hieäu khi timer0 bò traøn, ngaét ngoaïi vi

RB0/INT vaø ngaét interrput-on-change taïi caùc chaân cuûa PORTB.

Thanh ghi PIE1 (8Ch): chöùa caùc bit ñieàu khieån chi tieát caùc ngaét cuûa caùc

khoái chöùc naêng ngoaïi vi.

Thanh ghi PIR1 (0Ch) chöùa côø ngaét cuûa caùc khoái chöùc naêng ngoaïi vi, caùc

ngaét naøy ñöôïc cho pheùp bôûi caùc bit ñieàu khieån chöùa trong thanh ghi PIE1.

Thanh ghi PIE2 (8Dh): chöùa caùc bit ñieàu khieån caùc ngaét cuûa caùc khoái

chöùc naêng

CCP2, SSP bus, ngaét cuûa boä so saùnh vaø ngaét ghi vaøo boä nhôù EEPROM.

Thanh ghi PIR2 (0Dh): chöùa caùc côø ngaét cuûa caùc khoái chöùc naêng ngoaïi vi,

caùc ngaét naøy ñöôïc cho pheùp bôûi caùc bit ñieàu khieån chöùa trong thanh ghi PIE2.

Thanh ghi PCON (8Eh): chöùa caùc côø hieäu cho bieát traïng thaùi caùc cheá ñoä

reset cuûa vi ñieàu khieån.

6.2 THANH GHI MUÏC ÑÍCH CHUNG GPR

Caùc thanh ghi naøy coù theå ñöôïc truy xuaát tröïc tieáp hoaëc giaùn tieáp thoâng qua

thanh ghi FSG (File Select Register). Ñaây laø caùc thanh ghi döõ lieäu thoâng thöôøng,

ngöôøi söû duïng coù theå tuøy theo muïc ñích chöông trình maø coù theå duøng caùc thanh

ghi naøy ñeå chöùa caùc bieán soá, haèng soá, keát quaû hoaëc caùc tham soá phuïc vuï cho

chöông trình.

7 STACK

Stack khoâng naèm trong boä nhôù chöông trình hay boä nhôù döõ lieäu maø laø moät

vuøng nhôù ñaëc bieät khoâng cho pheùp ñoïc hay ghi. Khi leänh CALL ñöôïc thöïc hieän

hay khi moät ngaét xaûy ra laøm chöông trình bò reõ nhaùnh, giaù trò cuûa boä ñeám chöông

trình PC töï ñoäng ñöôïc vi ñieàu khieån caát vaøo trong stack. Khi moät trong caùc leänh

RETURN, RETLW hat RETFIE ñöôïc thöïc thi, giaù trò PC seõ töï ñoäng ñöôïc laáy ra

töø trong stack, vi ñieàu khieån seõ thöïc hieän tieáp chöông trình theo ñuùng qui trình

ñònh tröôùc.

Boä nhôù Stack trong vi ñieàu khieån PIC hoï 16F87xA coù khaû naêng chöùa ñöôïc 8 ñòa

chæ vaø hoaït ñoäng theo cô cheá xoay voøng. Nghóa laø giaù trò caát vaøo boä nhôù Stack laàn

thöù 9 seõ ghi ñeø leân giaù trò caát vaøo Stack laàn ñaàu tieân vaø giaù trò caát vaøo boä nhôù

Stack laàn thöù 10 seõ ghi ñeø leân giaù tri6 caát vaøo Stack laàn thöù 2.

Caàn chuù yù laø khoâng coù côø hieäu naøo cho bieát traïng thaùi stack, do ñoù ta

khoâng bieát ñöôïc khi naøo stack traøn. Beân caïnh ñoù taäp leänh cuûa vi ñieàu khieån doøng

PIC cuõng khoâng coù leänh POP hay PUSH, caùc thao taùc vôùi boä nhôù stack seõ hoaøn

toaøn ñöôïc ñieàu khieån bôûi CPU.

8 CAÙC COÅNG XUAÁT NHAÄP CUÛA PIC16F877A

Coång xuaát nhaäp (I/O port) chính laø phöông tieän maø vi ñieàu khieån duøng ñeå

töông taùc vôùi theá giôùi beân ngoaøi. Söï töông taùc naøy raát ña daïng vaø thoâng qua quaù

trình töông taùc ñoù, chöùc naêng cuûa vi ñieàu khieån ñöôïc theå hieän moät caùch roõ raøng.

Moät coång xuaát nhaäp cuûa vi ñieàu khieån bao goàm nhieàu chaân (I/O pin), tuøy

theo caùch boá trí vaø chöùc naêng cuûa vi ñieàu khieån maø soá löôïng coång xuaát nhaäp vaø

soá löôïng chaân trong moãi coång coù theå khaùc nhau. Beân caïnh ñoù, do vi ñieàu khieån

ñöôïc tích hôïp saün beân trong caùc ñaëc tính giao tieáp ngoaïi vi neân beân caïnh chöùc

naêng laø coång xuaát nhaäp thoâng thöôøng, moät soá chaân xuaát nhaäp coøn coù theâm caùc

chöùc naêng khaùc ñeå theå hieän söï taùc ñoäng cuûa caùc ñaëc tính ngoaïi vi neâu treân ñoái vôùi

theá giôùi beân ngoaøi. Chöùc naêng cuûa töøng chaân xuaát nhaäp trong moãi coång hoaøn toaøn

coù theå ñöôïc xaùc laäp vaø ñieàu khieån ñöôïc thoâng qua caùc thanh ghi SFR lieân quan

ñeán chaân xuaát nhaäp ñoù.

Vi ñieàu khieån PIC16F877A coù 5 coång xuaát nhaäp, bao goàm PORTA,

PORTB, PORTC, PORTD vaø PORTE. Caáu truùc vaø chöùc naêng cuûa töøng coång xuaát

nhaäp seõ ñöôïc ñeà caäp cuï theå trong phaàn sau.

8.1 PORTA

PORTA (RPA) bao goàm 6 I/O pin. Ñaây laø caùc chaân “hai chieàu”

(bidirectional pin), nghóa laø coù theå xuaát vaø nhaäp ñöôïc. Chöùc naêng I/O naøy ñöôïc

ñieàu khieån bôûi thanh ghi TRISA (ñòa chæ 85h). Muoán xaùc laäp chöùc naêng cuûa moät

chaân trong PORTA laø input, ta “set” bit ñieàu khieån töông öùng vôùi chaân ñoù trong

thanh ghi TRISA vaø ngöôïc laïi, muoán xaùc laäp chöùc naêng cuûa moät chaân trong

PORTA laø output, ta “clear” bit ñieàu khieån töông öùng vôùi chaân ñoù trong thanh ghi

TRISA. Thao taùc naøy hoaøn toaøn töông töï ñoái vôùi caùc PORT vaø caùc thanh ghi ñieàu

khieån töông öùng TRIS (ñoái vôùi PORTA laø TRISA, ñoái vôùi PORTB laø TRISB, ñoái

vôùi PORTC laø TRISC, ñoái vôùi PORTD laø TRISD vaøñoái vôùi PORTE laø TRISE).

Beân caïnh ñoù PORTA coøn laø ngoõ ra cuûa boä ADC, boä so saùnh, ngoõ vaøo analog ngoõ

vaøo xung clock cuûa Timer0 vaø ngoõ vaøo cuûa boä giao tieáp MSSP (Master

Synchronous Serial Port). Ñaëc tính naøy seõ ñöôïc trình baøy cuï theå trong phaàn sau.

Caáu truùc beân trong vaø chöùc naêng cuï theå cuûa töøng chaân trong PORTA seõ

ñöôïc trình baøy cuï theå trong Phuï luïc 1.

Caùc thanh ghi SFR lieân quan ñeán PORTA bao goàm:

PORTA (ñòa chæ 05h) : chöùa giaù trò caùc pin trong PORTA.

TRISA (ñòa chæ 85h) : ñieàu khieån xuaát nhaäp.

CMCON (ñòa chæ 9Ch) : thanh ghi ñieàu khieån boä so saùnh.

CVRCON (ñòa chæ 9Dh) : thanh ghi ñieàu khieån boä so saùnh ñieän aùp. ADCON1

(ñòa chæ 9Fh) : thanh ghi ñieàu khieån boä ADC.

Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.

8.2 PORTB

PORTB (RPB) goàm 8 pin I/O. Thanh ghi ñieàu khieån xuaát nhaäp töông öùng

laø TRISB. Beân caïnh ñoù moät soá chaân cuûa PORTB coøn ñöôïc söû duïng trong quaù

trình naïp chöông trình cho vi ñieàu khieån vôùi caùc cheá ñoä naïp khaùc nhau. PORTB

coøn lieân quan ñeán ngaét ngoaïi vi vaø boä Timer0. PORTB coøn ñöôïc tích hôïp chöùc

naêng ñieän trôû keùo leân ñöôïc ñieàu khieån bôûi chöông trình.

Caáu truùc beân trong vaø chöùc naêng cuï theå cuûa töøng chaân trong PORTB seõ

ñöôïc trình baøy cuï theå trong Phuï luïc 1.

Caùc thanh ghi SFR lieân quan ñeán PORTB bao goàm:

PORTB (ñòa chæ 06h,106h) : chöùa giaù trò caùc pin trong PORTB

TRISB (ñòa chæ 86h,186h) : ñieàu khieån xuaát nhaäp

OPTION_REG (ñòa chæ 81h,181h) : ñieàu khieån ngaét ngoaïi vi vaø boä Timer0.

Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.

8.3 PORTC

PORTC (RPC) goàm 8 pin I/O. Thanh ghi ñieàu khieån xuaát nhaäp töông öùng laø

TRISC. Beân caïnh ñoù PORTC coøn chöùa caùc chaân chöùc naêng cuûa boä so saùnh, boä

Timer1, boä PWM vaø caùc chuaån giao tieáp noái tieáp I2C, SPI, SSP, USART.

Caáu truùc beân trong vaø chöùc naêng cuï theå cuûa töøng chaân trong PORTC seõ

ñöôïc trình baøy cuï theå trong Phuï luïc 1.

Caùc thanh ghi ñieàu khieån lieân quan ñeán PORTC:

PORTC (ñòa chæ 07h) : chöùa giaù trò caùc pin trong PORTC

TRISC (ñòa chæ 87h) : ñieàu khieån xuaát nhaäp.

Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.

8.4 PORTD

PORTD (RPD) goàm 8 chaân I/O, thanh ghi ñieàu khieån xuaát nhaäp töông öùng

laø TRISD. PORTD coøn laø coång xuaát döõ lieäu cuûa chuaån giao tieáp PSP (Parallel

Slave Port). Caáu truùc beân trong vaø chöùc naêng cuï theå cuûa töøng chaân trong PORTD

seõ ñöôïc trình baøy cuï theå trong Phuï luïc 1.

Caùc thanh ghi lieân quan ñeán PORTD bao goàm:

Thanh ghi PORTD : chöùa giaù trò caùc pin trong PORTD.

Thanh ghi TRISD : ñieàu khieån xuaát nhaäp.

Thanh ghi TRISE : ñieàu khieån xuaát nhaäp PORTE vaø chuaån giao tieáp PSP.

Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.

8.5 PORTE

PORTE (RPE) goàm 3 chaân I/O. Thanh ghi ñieàu khieån xuaát nhaäp töông öùng laø

TRISE. Caùc chaân cuûa PORTE coù ngoõ vaøo analog. Beân caïnh ñoù PORTE coøn laø caùc

chaân ñieàu khieån cuûa chuaån giao tieáp PSP.

Caáu truùc beân trong vaø chöùc naêng cuï theå cuûa töøng chaân trong PORTE seõ

ñöôïc trình baøy cuï theå trong Phuï luïc 1.

Caùc thanh ghi lieân quan ñeán PORTE bao goàm:

PORTE : chöùa giaù trò caùc chaân trong PORTE.

TRISE : ñieàu khieån xuaát nhaäp vaø xaùc laäp caùc thoâng soá cho chuaån giao tieáp

PSP.

ADCON1 : thanh ghi ñieàu khieån khoái ADC.

Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.

9 TIMER_0

Ñaây laø moät trong ba boä ñeám hoaëc boä ñònh thôøi cuûa vi ñieàu khieån

PIC16F877A. Timer0 laø boä ñeám 8 bit ñöôïc keát noái vôùi boä chia taàn soá (prescaler)

8 bit. Caáu truùc cuûa Timer0 cho pheùp ta löïa choïn xung clock taùc ñoäng vaø caïnh tích

cöïc cuûa xung clock. Ngaét Timer0 seõ xuaát hieän khi Timer0 bò traøn. Bit TMR0IE

(INTCON<5>) laø bit ñieàu khieån cuûa Timer0. TMR0IE=1 cho pheùp ngaét Timer0

taùc ñoäng, TMR0IF= 0 khoâng cho pheùp ngaét Timer0 taùc ñoäng.

Muoán Timer0 hoaït ñoäng ôû cheá ñoä Timer ta clear bit TOSC (OPTION_REG<5>),

khi ñoù giaù trò thanh ghi TMR0 seõ taêng theo töøng chu kì xung ñoàng hoà (taàn soá vaøo

Timer0 baèng ¼ taàn soá oscillator). Khi giaù trò thanh ghi TMR0 töø FFh trôû veà 00h,

ngaét Timer0 seõ xuaát hieän. Thanh ghi TMR0 cho pheùp ghi vaø xoùa ñöôïc giuùp ta aán

ñònh thôøi ñieåm ngaét Timer0 xuaát hieän moät caùch linh ñoäng.

Muoán Timer0 hoaït ñoäng ôû cheá ñoä counter ta set bit TOSC

(OPTION_REG<5>). Khi ñoù xung taùc ñoäng leân boä ñeám ñöôïc laáy töø chaân

RA4/TOCK1. Bit TOSE (OPTION_REG<4>) cho pheùp löïa choïn caïnh taùc ñoäng

vaøo boät ñeám. Caïnh taùc ñoäng seõ laø caïnh leân neáu TOSE=0 vaø caïnh taùc ñoäng seõ laø

caïnh xuoáng neáu TOSE=1.

Khi thanh ghi TMR0 bò traøn, bit TMR0IF (INTCON<2>) seõ ñöôïc set.

Ñaây chính laø côø ngaét cuûa Timer0. Côø ngaét naøy phaûi ñöôïc xoùa baèng chöông trình

tröôùc khi boä ñeám baét ñaàu thöïc hieän laïi quaù trình ñeám. Ngaét Timer0 khoâng theå

“ñaùnh thöùc” vi ñieàu khieån töø cheá ñoä sleep.

Boä chia taàn soá (prescaler) ñöôïc chia seû giöõa Timer0 vaø WDT

(Watchdog Timer). Ñieàu ñoù coù nghóa laø neáu prescaler ñöôïc söû duïng cho Timer0

thì WDT seõ khoâng coù ñöôïc hoã trôï cuûa prescaler vaø ngöôïc laïi. Prescaler ñöôïc ñieàu

khieån bôûi thanh ghi OPTION_REG. Bit PSA (OPTION_REG<3>) xaùc ñònh ñoái

töôïng taùc ñoäng cuûa prescaler. Caùc bit PS2:PS0 (OPTION_REG<2:0>) xaùc ñònh tæ

soá chia taàn soá cuûa prescaler. Xem laïi thanh ghi OPTION_REG ñeå xaùc ñònh laïi

moät caùch chi tieát veà caùc bit ñieàu khieån treân. Caùc leänh taùc ñoäng leân giaù trò thanh

ghi TMR0 seõ xoùa cheá ñoä hoaït ñoäng cuûa prescaler. Khi ñoái töôïng taùc ñoäng laø

Timer0, taùc ñoäng leân giaù trò thanh ghi TMR0 seõ xoùa prescaler nhöng khoâng laøm

thay ñoåi ñoái töôïng taùc ñoäng cuûa prescaler. Khi ñoái töôïng taùc ñoäng laø WDT, leänh

CLRWDT seõ xoùa prescaler, ñoàng thôøi prescaler seõ ngöng taùc vuï hoã trôï cho

WDT.

Caùc thanh ghi ñieàu khieån lieân quan ñeán Timer0 bao goàm:

TMR0 (ñòa chæ 01h, 101h) : chöùa giaù trò ñeám cuûa Timer0.

INTCON (ñòa chæ 0Bh, 8Bh, 10Bh, 18Bh): cho pheùp ngaét hoaït ñoäng (GIE vaø

PEIE).

OPTION_REG (ñòa chæ 81h, 181h): ñieàu khieån prescaler.

Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.

10 TIMER_1

Timer1 laø boä ñònh thôøi 16 bit, giaù trò cuûa Timer1 seõ ñöôïc löu trong

hai thanh ghi (TMR1H:TMR1L). Côø ngaét cuûa Timer1 laø bit TMR1IF (PIR1<0>).

Bit ñieàu khieån cuûa Timer1 seõ laø TMR1IE (PIE<0>). Töông töï nhö Timer0,

Timer1 cuõng coù hai cheá ñoä hoaït ñoäng: cheá ñoä ñònh thôøi (timer) vôùi xung kích laø

xung clock cuûa oscillator (taàn soá cuûa timer baèng ¼ taàn soá cuûa oscillator) vaø cheá

ñoä ñeám (counter) vôùi xung kích laø xung phaûn aùnh caùc söï kieän caàn ñeám laáy töø beân

ngoaøi thoâng qua chaân RC0/T1OSO/T1CKI (caïnh taùc ñoäng laø caïnh leân). Vieäc löïa

choïn xung taùc ñoäng (töông öùng vôùi vieäc löïa choïn cheá ñoä hoaït ñoäng laø timer hay

counter) ñöôïc ñieàu khieån bôûi bit TMR1CS (T1CON<1>). Sau ñaây laø sô ñoà khoái

cuûa Timer1:

Ngoaøi ra Timer1 coøn coù chöùc naêng reset input beân trong ñöôïc ñieàu

khieån bôûi moät trong hai khoái CCP (Capture/Compare/PWM). Khi bit T1OSCEN

(T1CON<3>) ñöôïc set, Timer1 seõ laáy xung clock töø hai chaân RC1/T1OSI/CCP2

vaø RC0/T1OSO/T1CKI laøm xung ñeám. Timer1 seõ baét ñaàu ñeám sau caïnh xuoáng

ñaàu tieân cuûa xung ngoõ vaøo. Khi ñoù PORTC seõ boû qua söï taùc ñoäng cuûa hai bit

TRISC<1:0> vaø PORTC<2:1> ñöôïc gaùn giaù trò 0. Khi clear bit T1OSCEN Timer1

seõ laáy xung ñeám töø oscillator hoaëc töø chaân RC0/T1OSO/T1CKI. Timer1 coù hai

cheá ñoä ñeám laø ñoàng boä (Synchronous) vaø baát ñoàng boä (Asynchronous). Cheá ñoä

ñeám ñöôïc quyeát ñònh bôûi bit ñieàu khieån (T1CON<2>). Khi =1 xung ñeám laáy töø

beân ngoaøi seõ khoâng ñöôïc ñoàng boä hoùa vôùi xung clock beân trong, Timer1 seõ tieáp

tuïc quaù trình ñeám khi vi ñieàu khieån ñang ôû cheá ñoä sleep vaø ngaét do Timer1 taïo ra

khi bò traøn coù khaû naêng “ñaùnh thöùc” vi ñieàu khieån. ÔÛ cheá ñoä ñeám baát ñoàng boä,

Timer1 khoâng theå ñöôïc söû duïng ñeå laøm nguoàn xung clock cho khoái CCP

(Capture/Compare/Pulse width modulation). Khi =0 xung ñeám vaøo Timer1 seõ

ñöôïc ñoàng boä hoùa vôùi xung clock beân trong. ÔÛ cheá ñoä naøy Timer1 seõ khoâng hoaït

ñoäng khi vi ñieàu khieån ñang ôû cheá ñoä sleep.

Caùc thanh ghi lieân quan ñeán Timer1 bao goàm:

INTCON (ñòa chæ 0Bh, 8Bh, 10Bh, 18Bh): cho pheùp ngaét hoaït ñoäng (GIE vaø

PEIE).

PIR1 (ñòa chæ 0Ch): chöùa côø ngaét Timer1 (TMR1IF).

PIE1( ñòa chæ 8Ch): cho pheùp ngaét Timer1 (TMR1IE).

TMR1L (ñòa chæ 0Eh): chöùa giaù trò 8 bit thaáp cuûa boä ñeám Timer1.

TMR1H (ñòa chæ 0Eh): chöùa giaù trò 8 bit cao cuûa boä ñeám Timer1.

T1CON (ñòa chæ 10h): xaùc laäp caùc thoâng soá cho Timer1.

11.TIMER_2

Timer2 laø boä ñònh thôøi 8 bit vaø ñöôïc hoã trôï bôûi hai boä chia taàn soá

prescaler va postscaler. Thanh ghi chöùa giaù trò ñeám cuûa Timer2 laø TMR2. Bit

cho pheùp ngaét Timer2 taùc ñoäng laø TMR2ON (T2CON<2>). Côø ngaét cuûa Timer2

laø bit TMR2IF (PIR1<1>). Xung ngoõ vaøo (taàn soá baèng ¼ taàn soá oscillator) ñöôïc

ñöa qua boä chia taàn soá prescaler 4 bit (vôùi caùc tæ soá chia taàn soá laø 1:1, 1:4 hoaëc

1:16 vaø ñöôïc ñieàu khieån bôûi caùc bit T2CKPS1:T2CKPS0 (T2CON<1:0>)).

Timer2 coøn ñöôïc hoã trôï bôûi thanh ghi PR2. Giaù trò ñeám trong thanh

ghi TMR2 seõ taêng töø 00h ñeán giaù trò chöùa trong thanh ghi PR2, sau ñoù ñöôïc reset

veà 00h. Kh I reset thanh ghi PR2 ñöôïc nhaän giaù trò maëc ñònh FFh. Ngoõ ra cuûa

Timer2 ñöôïc ñöa qua boä chia taàn soá postscaler vôùi caùc möùc chia töø 1:1 ñeán 1:16.

Postscaler ñöôïc ñieàu khieån bôûi 4 bit T2OUTPS3:T2OUTPS0. Ngoõ ra cuûa

postscaler ñoùng vai troø quyeát ñònh trong vieäc ñieàu khieån côø ngaét.

Ngoaøi ra ngoõ ra cuûa Timer2 coøn ñöôïc keát noái vôùi khoái SSP, do ñoù

Timer2 coøn ñoùng vai troø taïo ra xung clock ñoàng boä cho khoái giao tieáp SSP.

Caùc thanh ghi lieân quan ñeán Timer2 bao goàm:

INTCON (ñòa chæ 0Bh, 8Bh, 10Bh, 18Bh): cho pheùp toaøn boä caùc ngaét (GIE vaø

PEIE).

PIR1 (ñòa chæ 0Ch): chöùa côø ngaét Timer2 (TMR2IF).

PIE1 (ñòa chò 8Ch): chöùa bit ñieàu khieån Timer2 (TMR2IE).

TMR2 (ñòa chæ 11h): chöùa giaù trò ñeám cuûa Timer2.

T2CON (ñòa chæ 12h): xaùc laäp caùc thoâng soá cho Timer2. PR2 (ñòa chæ 92h):

thanh ghi hoã trôï cho Timer2.

Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.

Ta coù moät vaøi nhaän xeùt veà Timer0, Timer1 vaø Timer2 nhö sau:

Timer0 vaø Timer2 laø boä ñeám 8 bit (giaù trò ñeám toái ña laø FFh), trong

khi Timer1 laø boä ñeám 16 bit (giaù trò ñeám toái ña laø FFFFh). Timer0, Timer1 vaø

Timer2 ñeàu coù hai cheá ñoä hoaït ñoäng laø timer vaø counter. Xung clock coù taàn soá

baèng ¼ taàn soá cuûa oscillator. Xung taùc ñoäng leân Timer0 ñöôïc hoã trôï bôûi prescaler

vaø coù theå ñöôïc thieát laäp ôû nhieàu cheá ñoä khaùc nhau (taàn soá taùc ñoäng, caïnh taùc

ñoäng) trong khi caùc thoâng soá cuûa xung taùc ñoäng leân Timer1 laø coá ñònh. Timer2

ñöôïc hoã trôï bôûi hai boä chia taàn soá prescaler vaø postcaler ñoäc laäp, tuy nhieân caïnh

taùc ñoäng vaãn ñöôïc coá ñònh laø caïnh leân. Timer1 coù quan heä vôùi khoái CCP, trong

khi Timer2 ñöôïc keát noái vôùi khoái SSP. Moät vaøi so saùnh seõ giuùp ta deã daøng löïa

choïn ñöôïc Timer thích hôïp cho öùng duïng.

12 ADC

ADC (Analog to Digital Converter) laø boä chuyeån ñoåi tín hieäu giöõa hai

daïng töông töï vaø soá. PIC16F877A coù 8 ngoõ vaøo analog (RA4:RA0 vaø RE2:RE0).

Hieäu ñieän theá chuaån VREF coù theå ñöôïc löïa choïn laø VDD, VSS hay hieäu ñieän theå

chuaån ñöôïc xaùc laäp treân hai chaân RA2 vaø RA3. Keát quaû chuyeån ñoåi töø tín tieäu

töông töï sang tín hieäu soá laø 10 bit soá töông öùng vaø ñöôïc löu trong hai thanh ghi

ADRESH:ADRESL. Khi khoâng söû duïng boä chuyeån ñoåi ADC, caùc thanh ghi naøy

coù theå ñöôïc söû duïng nhö caùc thanh ghi thoâng thöôøng khaùc. Khi quaù trình chuyeån

ñoåi hoaøn taát, keát quaû seõ ñöôïc löu vaøo hai thanh ghi ADRESH:ADRESL, bit

(ADCON0<2>) ñöôïc xoùa veà 0 vaø côø ngaét ADIF ñöôïc set.

Qui trình chuyeån ñoåi töø töông töï sang soá bao goàm caùc böôùc sau:

1. Thieát laäp caùc thoâng soá cho boä chuyeån ñoåi ADC:

Choïn ngoõ vaøo analog, choïn ñieän aùp maãu (döïa treân caùc thoâng soá cuûa thanh ghi

ADCON1)

Choïnh keânh chuyeån ñoåi AD (thanh ghi ADCON0).

Choïnh xung clock cho keânh chuyeån ñoåi AD (thanh ghi ADCON0).

Cho pheùp boä chuyeån ñoåi AD hoaït ñoäng (thanh ghi ADCON0).

2. Thieát laäp caùc côø ngaét cho boä AD

Clear bit ADIF.

Set bit ADIE.

Set bit PEIE.

Set bit GIE.

3. Ñôïi cho tôùi khi quaù trình laáy maãu hoaøn taát.

4. Baét ñaàu quaù trình chuyeån ñoåi (set bit ).

5. Ñôïi cho tôùi khi quaù trình chuyeån ñoåi hoaøn taát baèng caùch:

Kieåm tra bit . Neáu =0, quaù trình chuyeån ñoåi ñaõ hoaøn taát.

Kieåm tra côø ngaét.

6. Ñoïc keát quaû chuyeån ñoåi vaø xoùa côø ngaét, set bit (neáu caàn tieáp tuïc chuyeån ñoåi).

7. Tiếp tục thực hiện các bước 1 & 2 cho quá trình chuyển đổi tiếp theo

Caàn chuù yù laø coù hai caùch löu keát quaû chuyeån ñoåi AD, vieäc löïa choïn

caùch löu ñöôïc ñieàu khieån bôûi bit ADFM vaø ñöôïc minh hoïa cuï theå trong hình sau:

Caùc thanh ghi lieân quan ñeán boä chuyeån ñoåi ADC bao goàm:

INTCON (ñòa chæ 0Bh, 8Bh, 10Bh, 18Bh): cho pheùp caùc ngaét (caùc bit GIE, PEIE).

PIR1 (ñòa chæ 0Ch): chöùa côø ngaét AD (bit ADIF).

PIE1 (ñòa chæ 8Ch): chöùa bit ñieàu khieån AD (ADIE).

ADRESH (ñòa chæ 1Eh) vaø ADRESL (ñòa chæ 9Eh): caùc thanh ghi chöùa keát quaû

chuyeån ñoåi AD.

ADCON0 (ñòa chæ 1Fh) vaø ADCON1 (ñòa chæ 9Fh): xaùc laäp caùc thoâng soá cho boä

chuyeån ñoåi AD.

PORTA (ñòa chæ 05h) vaø TRISA (ñòa chæ 85h): lieân quan ñeán caùc ngoõ vaøo analog

ôû PORTA. PORTE (ñòa chæ 09h) vaø TRISE (ñòa chæ 89h): lieân quan ñeán caùc ngoõ

vaøo analog ôû PORTE.

13 COMPARATOR

Boä so saùnh bao goàm hai boä so so saùnh tín hieäu analog vaø ñöôïc ñaët ôû

PORTA. goõ vaøo boä so saùnh laø caùc chaân RA3:RA0, ngoõ ra laø hai chaân RA4 vaø

RA5. Thanh ghi ñieàu khieån boä so saùnh laø CMCON. Caùc bit CM2:CM0 trong

thanh ghi CMCON ñoùng vai troø choïn löïa caùc cheá ñoä hoaït ñoäng cho boä

Comparator (hình 2.10).

Cô cheá hoaït ñoäng cuûa boä

Comparator nhö sau:

Tín hieäu analog ôû chaân

VIN + seõ ñöôïc soù saùnh vôùi ñieän aùp

chuaån ôû chaân VIN- vaø tín hieäu ôû ngoõ ra

boä so saùnh seõ thay ñoåi töông öùng nhö

hình veõ. Khi ñieän aùp ôû chaân VIN+ lôùn

hôn ñieän aùp ôû chaân VIN+ ngoõ ra seõ ôû

möùc 1 vaø ngöôïc laïi.

Döïa vaøo hình veõ ta thaáy

ñaùp öùng taïi ngoõ ra khoâng phaûi laø töùc thôøi

so vôùi thay ñoåi taïi ngoõ vaøo maø caàn coù

moät khoaûng thôøi gian nhaát ñònh ñeå ngoõ ra thay ñoåi traïng thaùi (toái ña laø 10us). Caàn

chuù yù ñeán khoaûng thôøi gian ñaùp öùng naøy khi söû duïng boä so saùnh.

Cöïc tính cuûa caùc boä so saùnh coù theå thay ñoåi döïa vaøo caùc giaù trò ñaët

vaøo caùc bit C2INV vaø C1INV (CMCON<4:5>).

Caùc cheá ñoä hoaït ñoäng cuûa boä comparator.

Caùc bit C2OUT vaø C1OUT (CMCON<7:6>) ñoùng vai troø ghi nhaän söï thay ñoåi tín

hieäu analog so vôùi ñieän aùp ñaët tröôùc. Caùc bit naøy caàn ñöôïc xöû lí thích hôïp baèng

chöông trình ñeå ghi nhaän söï thay ñoåi cuûa tín hieäu ngoõ vaøo. Côø ngaét cuûa boä so

saùnh laø bit CMIF (thanh ghi PIR1). Côø ngaét naøy phaûi ñöôïc reset veà 0. Bit ñieàu

khieån boä so saùnh laø bit CMIE (Tranh ghi PIE).

Caùc thanh ghi lieân quan ñeán boä so saùnh bao goàm:

CMCON (ñòa chæ 9Ch) vaø CVRCON (ñòa chæ 9Dh): xaùc laäp caùc thoâng soá cho boä

so saùnh.

Thanh ghi INTCON (ñòa chæ 0Bh, 8Bh, 10Bh, 18Bh): chöùa caùc bit cho pheùp caùc

ngaét

(GIE vaø PEIE).

Thanh ghi PIR2 (ñòa chæ 0Dh): chöùa côø ngaét cuûa boä so saùnh (CMIF).

Thanh ghi PIE2 (ñòa chæ 8Dh): chöùa bit cho pheùp boä so saùnh (CNIE).

Thanh ghi PORTA (ñòa chæ 05h) vaø TRISA (ñòa chæ 85h): caùc thanh ghi ñieàu

khieån PORTA. Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå trong phuï luïc 2.

14 BOÄ TAÏO ÑIEÄN AÙP SO SAÙNH

Boä so saùnh naøy chæ hoaït ñoäng khi boä Comparator ñöïôc ñònh daïng hoaït

ñoäng ôû cheá ñoä ‘110’. Khi ñoù caùc pin RA0/AN0 vaø RA1/AN1 (khi CIS = 0) hoaëc

pin RA3/AN3 vaø RA2/AN2 (khi CIS = 1) seõ laø ngoõ vaøo analog cuûa ñieän aùp caàn so

saùnh ñöa vaøo ngoõ VIN- cuûa 2 boä so saùnh C1 vaø C2 (xem chi tieát ôû hình 2.10).

Trong khi ñoù ñieän aùp ñöa vaøo ngoõ VIN+ seõ ñöôïc laáy töø moät boä taïo ñieän aùp so

saùnh.

Sô ñoà khoái cuûa boä taïo ñieän aùp so saùnh ñöïôc trình baøy trong hình veõ sau:

Boä taïo ñieän aùp so saùnh naøy bao goàm moät thang ñieän trôû 16 möùc

ñoùng vai troø laø caàu phaân aùp chia nhoû ñieän aùp VDD thaønh nhieàu möùc khaùc nhau

(16 möùc). Moãi möùc coù giaù trò ñieän aùp khaùc nhau tuøy thuoäc vaøo bit ñieàu khieån

CVRR (CVRCON<5>). Neáu CVRR ôû möùc logic 1, ñieän trôû 8R seõ khoâng coù taùc

duïng nhö moät thaønh phaàn cuûa caàu phaân aùp (BJT daãn maïnh vaø doøng ñieän khoâng ñi

qua ñieän trôû 8R), khi ñoù 1 möùc ñieän aùp coù giaù trò VDD/24. Ngöôïc laïi khi CVRR ôû

möùc logic 0, doøng ñieän seõ qua ñieän trôû 8R vaø1 möùc ñieän aùp coù giaù trò VDD/32.

Caùc möùc ñieän aùp naøy ñöôïc ñöa qua boä MUX cho pheùp ta choïn ñöôïc ñieän aùp ñöa

ra pin RA2/AN2/VREF-/CVREF ñeå ñöa vaøo ngoõ VIN+ cuûa boä so saùnh baèng caùch

ñöa caùc giaù trò thích hôïp vaøo caùc bit CVR3:CVR0.

Boä taïo ñieän aùp so saùnh naøy coù theå xem nhö moät boä chuyeån ñoåi D/A

ñôn giaûn. Giaù trò ñieän aùp caàn so saùnh ôû ngoõ vaøo Analog seõ ñöôïc so saùnh vôùi caùc

möùc ñieän aùp do boä taïo ñieän aùp taïo ra cho tôùi khi hai ñieän aùp naøy ñaït ñöôïc giaù trò

xaáp xæ baèng nhau. Khi ñoù keát quaû chuyeån ñoåi xem nhö ñöôïc chöùa trong caùc bit

CVR3:CVR0.

Caùc thanh ghi lieân quan ñeán boä taïo ñieän aùp so saùnh naøy bao goàm:

Thanh ghi CVRCON (ñòa chæ 9Dh): thanh ghi tröïc tieáp ñieàu khieån boä so saùnh

ñieän aùp.

Thanh ghi CMCON (ñòa chæ 9Ch): thanh ghi ñieàu khieån boä Comparator.

Chi tieát veà caùc thanh ghi seõ ñöôïc trình baøy cuï theå ôû phuï luïc 2.

3.2. CÁC LINH KIỆN KHÁC TRONG MẠCH QUANG BÁO

IC 74HC573: 74HC573 là mạch chốt tín hiệu tốc độ cao được chế tạo theo công nghệ

CMOS. IC 74HC573 sử dụng để giải mã khi kết nối vi xử lý với bộ nhớ ngoài. IC

74HC573 gồm 8 mạch chốt là các Flip-Flop cùng với 8 bộ đệm ngõ ra 3 trạng thái.

IC này có hai chân điều khiển: chân cho phép nhập dữ liệu (LE) vào IC, chân còn

lại (/OE) quyết định việc xuất dữ liệu của IC, cả hai chân này làm việc độc lập với

nhau.

16

1 2 3 4 5 6 7 8

15 14 13 12 11

9 10

VCC

GND /OE D2 D1

O1 O2 O3

D3

O8

D8 D7

O7 O6

D6 D5

74573

20 19 17 18

D4

O4 O5 LE

Chức năng các chân của IC như sau:

VCC, GND: hai chân này dùng để cấp nguồn nuôi cho IC, VCC nối

với +5V, GND được nối mass.

LE: Latch Enable, chân cho phép chốt dữ liệu. Khi chân này ở mức

logic cao thì dữ liệu mới được phép nhập vào IC, khi nó ở mức logic thấp thì dữ

liệu mới không được phép nhập vào và dữ liệu cũ (đã được đưa vào trước đó) vẫn

còn ở ngõ ra của nó.

/OE: Output Enable, chân cho phép xuất dữ liệu. Khi chân này ở

mức logic thấp thì dữ liệu ở ngõ ra của Flip-Flop (bên trong IC) được đưa ra

ngoài. Ngược lại, khi chân này ở mức logic cao thì dữ liệu không được phép đưa

ra ngoài và tất cả cá ngõ ra đều ở trạng thái tổng trở cao.

D1 – D8: Data Inputs, các ngõ vào của IC. Dữ liệu được đưa vào IC

thông qua các ngõ này.

O1 – O8: Out Puts, các ngõ ra tương ứng với các ngõ vào trên. Cụ

thể là ngõ ra O1 tương ứng với ngõ vào D1, O2 tương ứng với D2,… O8 tương

ứng với D8.

Sơ đồ khối:

Hình 3.6: Sơ đồ khối 74HC573

LATCH ENABLE

LE

D

G

D

D1

D

G GO O O

D2 D8

O1 O2 O8

OUTPUT ENABLE

OE

Đặc điểm của vi mạch:

Tốc độ truyền tín hiệu từ đầu vào sang đầu ra chỉ có 18ns.

Phạm vi điện áp hoạt động: 2 – 5.5V.

Dòng điện đầu vào thấp nhất: 1uA.

Nguyên tắc hoạt động của IC 74573:

Dựa vào bảng trạng thái ta nhận thấy dữ liệu mới chỉ được phép truyền qua

IC khi cả hai chân điều khiển (LE và OE) ở mức logic thích hợp: LE ở mức logic

cao, OE ở mức logic thấp. Khi cả hai chân điều khiển ở trạng thái này thì dữ liệu ở

ngõ vào sẽ được đưa vào bên trong IC (truyền qua các Flip-Flop) và đưa thẳng ra

ngoài thông qua các cổng đệm ngõ ra 3 trạng thái.

Khi chân OE ở mức logic thấp (cho phép) mà chân LE cũng ở mức logic

thấp (cấm) thì dữ liệu ở ngõ ra của IC là dữ liệu cũ (vừa mới được truyền qua IC).

Lúc này dữ liệu mới ở ngõ vào sẽ không được phép nhập vào IC.

Ngược lại, khi chân OE ở mức logic cao thì ngõ ra của IC sẽ ở trạng thái

tổng trở cao, bất chấp trạng thái logic của các ngõ vào còn lại. Mặc dù ngõ ra ở

trạng thái tổng trở cao nhưng dữ liệu ở ngõ vào (nếu có) vẫn được phép đưa vào

IC (đưa đến ngõ ra của các Flip-Flop ở bên trong IC). Dữ liệu này sẽ được phép

truyền đến ngõ ra khi chân OE về lại mức logic thấp.

Khi cả hai chân điều khiển đều ở trạng thái cấm (chân OE ở mức logic cao,

chân LE ở mức logic thấp) thì ngõ ra sẽ ở trạng thái tổng trở cao và ngõ vào sẽ

không được phép nhập dữ liệu mớivào. Như vậy, ở trạng thái này thì IC hoàn toàn

không giao tiếp với bất kỳ linh kiện nào khác ở cả ngõ vào và ngõ ra.

Output Enable (OE)

Latch Enable (LE)

D

Output Q

L L L

H H L

H L X

H L

Q0

H X X Z

Bảng 3.13:Trạng thái hoạt động74HC573

L:Trạng thái thấp Z: Trở kháng mức cao H:Trạng thái cao Q0: Điều kiện trước

LED MA TRẬN:

Led ma trận dùng để chỉ thị, hiển thị, làm nguồn sáng trong các máy in

lazer, ngoài ra còn được sử dụng trong các hệ thống thông tin dựa vào quang sợi.

Led ma trận được coi là một trong nguồn quang điện phổ biến nhất.

Về cấu tạo led ma trận gồm nhiều led đơn ghép lại. Có hai loại: Anode

chung ( cột Anode, hàng Catode) và Catode chung (cột Catode, hàng Anode), đa

dạng về màu sắc…..

Hình 3.17 : Hình dạng thực tế

Hình 3.18: Cấu trúc bên trong của led ma trận 8x8

Dòng làm việc khoảng 10mA, và Điện áp làm việc khoảng 2,6V.

Điều quan trọng khi sử dụng led là luôn mắc nối tiếp với một điện trở.

RT = V VI

B D

F

VB : Điện thế nguồn

VD : Điện thế ngưỡng của led

IF : Dòng điện qua led

Điện áp ngưỡng của led có các trị số sau :

đỏ 1,6 ... 2V

cam 2,2 ... 3V

xanh lá cây 2,7 ... 3,2V

vàng 2,4 ... 3,2V

xang da trời 3,0 ... 5V

CHƯƠNG 4

CÁC PHƯƠNG PHÁP HIỂN THỊ LED MA TRẬN

Led ma trận được coi là một trong các nguồn quang điện tử phổ biến nhất. Nó không đắt, tiêu thụ ít công suất, và dễ dàng thích hợp cho các mạch điện tử.

Led ma trận hiển thị bao gồm nhiều led ma trận nhỏ kết hợp lại tạo thành một ma trận gồm m cột và n hàng (led ma trận m×n). Led ma trận 8×8 là led ma trận gồm có 8 cột và 8 hàng. Led ma trận này có hai loại: loại thứ nhất là cathode chung (cột cathode, hàng anode), loại thứ hai là anode chung (cột anode, hàng cathode). Sau đây là các phương pháp hiển thị ma trận led.

4.1 PHƯƠNG PHÁP HIỂN THỊ SỬ DỤNG IC CHỐT:

Hiển thị led ma trận bằng phương pháp chốt giúp cho người lập trình thay đổi cách thức quét và hiển thị một cách linh hoạt và nhanh chóng.

matrix_3mau

12 9 6 3 13 16 19 2211852141720231074115182124

c1 c2 c3 c4 c5 c6 c7 c8hx

1hx

2hx

3hx

4hx

5hx

6hx

7hx

8

hd1

hd2

hd3

hd4

hd5

hd6

hd7

hd8

DM74LS573

2 3 4 5 6 7 8 9 11 1

19 18 17 16 15 14 13 12

D0

D1

D2

D3

D4

D5

D6

D7

LE OE

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

DM74LS573

23456789

111

1918171615141312

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

U7

DM74LS573

23456789111

1918171615141312

D0

D1

D2

D3

D4

D5

D6

D7

LEOE

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

Hình 4.1: Giao tiếp led ma trận dùng phương pháp chốt.

4.1.1. CHỐT HÀNG:

Chốt hàng là phương pháp trong một khoảng thời gian xác định chỉ có một cột

được tích cực, dữ liệu được đưa ra 8 hàng rồi chốt lại, dữ liệu được hiển thị trên màn

hình led ma trận. Sau đó dữ liệu kế tiếp được đưa ra 8 hàng và được chốt lại bởi một

IC chốt khác, trong khi đó dữ liệu trước đó vẫn hiện diện tại ngõ ra của IC chốt. Như

vậy dữ liệu của hàng nào được đưa ra đúng địa chỉ của hàng đó trong khi các dữ liệu

của các hàng khác vẫn hiện diện trên hàng mà không bị mất đi. Việc thực hiện chốt

hàng được thể hiện ở lưu đồ như sau:

Hình 4.2: Qui trình hiển thị chốt hàng.

4.1.2 CHỐT CỘT:

Chốt cột là phương pháp trong một khoảng thời gian xác định chỉ có một hàng

được tích cực, dữ liệu được đưa ra 8 cột rồi chốt lại, dữ liệu được hiển thị trên màn

hình led ma trận. Sau đó dữ liệu được đưa ra 8 cột kế tiếp và được chốt lại bởi một IC

chốt khác, trong khi đó dữ liệu trước đó vẫn hiện diện tại ngõ ra của IC chốt (dữ liệu

vẫn hiện diện tại các cột). Như vậy dữ liệu của cột nào được đưa ra đúng địa chỉ của

cột đó trong khi các dữ liệu của các cột khác vẫn hiện diện trên cột mà không bị mất

đi. Việc thực hiện chốt cột được thể hiện ở lưu đồ như sau:

Hình 4.3: Qui trình hiển thị chốt cột..

Ưu, nhược điểm của phương pháp hiền thị led ma trận sử dụng IC chốt:

Ưu điểm:

Mở rộng số hàng, số cột của bảng quang báo.

Dữ liệu được truyền đi nhanh.

Chuyển đổi cách quét hàng, cột một cách linh hoạt.

Nhược điểm:

Tạo bảng mã khó khăn.

Khó khăn trong việc lập trình xuất dữ liệu ra.

4.2 PHƯƠNG PHÁP HIỂN THỊ SỬ DỤNG THANH GHI DỊCH:

4.2.1 QUÉT HÀNG:

a) Giới thiệu chung về phương pháp quét hàng.

Quét hàng là phương pháp mà trong một khoảng thời gian xác định chỉ cho một

hàng được tích cực hiển thị trong khi các hàng khác đều tắt, các hàng được quét (tích

cực) tuần tự ở các khoảng thời gian kế tiếp nhau được lặp lại nhiều lần với tốc độ >

24hình /1s sẽ cho ta một hình ảnh liên tục cần hiển thị lên trên màn hình led ma trận.

Vcc

Vcc

H7

R26

27

H8

Vcc

R42 3K3

R16

1K

R2

27

R15

3K3

Q8

TIP42

CTRL_B15

R35

27Q7C1815

R28

1K

R7

1K

R41

27

R1

1K

H5

Q28

TIP42

CTRL_B7

R47

27

R19

1KH15

R44

27

R27 3K3

Q23C1815

R24 3K3

Q18

TIP42

H4

R20

27

R22

1K

H6

H3

CTRL_B8

R18 3K3R17

27

H6

H2

Q21C1815

R63K3

Q32

TIP42

R21 3K3

CTRL_B12

CTRL_B14

CTRL_B9

Q10

TIP42

Vcc

U7

matrix_3mau

12 9 6 3 13 16 19 2211852141720231074115182124

c1 c2 c3 c4 c5 c6 c7 c8hx

1hx

2hx

3hx

4hx

5hx

6hx

7hx

8

hd1

hd2

hd3

hd4

hd5

hd6

hd7

hd8

Q17C1815

R46

1K

U1

TPIC6B595/SO

318

121398

456714151617

SD

IS

DO

RC

LKS

RC

LK

GSR

CLR

DR

AIN

0D

RA

IN1

DR

AIN

2D

RA

IN3

DR

AIN

4D

RA

IN5

DR

AIN

6D

RA

IN7

R13

1K

R34

1K

CTRL_B3

H9

H3

Q31C1815

Q11C1815

CTRL_B13

Q26

TIP42

H14

Q4

TIP42

Vcc

Vcc

Vcc

Q9C1815

R93K3

H1

Q16

TIP42

Q27C1815

H10

Q25C1815

Q22

TIP42

R23

27

R14

27

R45 3K3

Vcc

R11

27

Q29C1815

H1

Q5C1815

Vcc

CTRL_B6

R30 3K3

Vcc

R36 3K3

Vcc

Q13C1815

Q6

TIP42

R32

27

R37

1K

R8

27

U2TPIC6B595/SO

318

12 13 9 8

4 5 6 7 14 15 16 17

SD

IS

DO

RC

LKS

RC

LK

G SR

CLR

DR

AIN

0D

RA

IN1

DR

AIN

2D

RA

IN3

DR

AIN

4D

RA

IN5

DR

AIN

6D

RA

IN7

Q15C1815

R33 3K3

Vcc

H2

Q30

TIP42

R39 3K3

H7

Q20

TIP42

CTRL_B11

R29

27

R123K3

R38

27

R31

1K

Vcc

Q19C1815

H16

H13

Q1C1815

CTRL_B2

H5

R4

1K

Q24

TIP42

R48 3K3

Q2

TIP42

R40

1K

CTRL_B5

R5

27

Vcc

H4

H12

R33K3

Q14

TIP42

Vcc

Q3C1815

R25

1K

CTRL_B4

CTRL_B1

Vcc

R10

1K

Q12

TIP42

H11

R43

1K

CTRL_B10

CTRL_B16

Hình 4.4: Sơ đồ mạch thanh ghi.

b) Quá trình thực hiện quét hàng:

Quét hàng sử dụng thanh ghi dịch là tương đối phức tạp cho người lập trình

trong việc đưa dữ liệu ra cột. Dữ liệu lần lượt được đưa vào chân Datain của thanh ghi

dịch sau đó tác động xung clock dữ liệu đươc dịch đi.

VD: Đưa dữ liệu ra 8 cột được diễn ra như sau:

Hình 4.5: Qui trình đưa dữ liệu ra 8 cột cho led ma trận.

Dữ liệu của hàng thứ nhất được đưa ra cột sau đó tích cực hàng thứ nhất như vây dữ liệu của hàng thứ nhất được hiển thị trên màn hình led ma trận, tiếp tục dữ liệu của hàng thứ hai được đưa ra cột sau đó tích cực hàng thứ hai lúc này dữ liệu của hàng thứ hai được hiển thị trên màn hình led ma trận, cứ như vậy cho đến dữ liệu của hàng cuối cùng được đưa ra cột sau đó tích cực hàng cuối cùng. Cứ như thế quá trình trên được lặp đi lặp lại > 24lần/1s, đến đây chúng ta quan sát được một hình ảnh liên tục hiển thị trên màn hình led ma trận.

Ví dụ:

Hiển thị chữ B lên màn hình led ma trận (hàng được tích cực ở mức 1, cột được tích cực ở mức 0).

Hình 4.6: Hiển thị chữ B trên led ma trận dùng phương pháp quét hàng.

Hàng 1

Hàng 8 Cột 8

Cột 1

Dữ liệu thứ nhất có giá trị: 11111111 được đưa ra cột tích cực hàng thứ nhất (điều khiển hàng thứ nhất cho ra giá trị là 1); dữ liệu thứ hai có giá trị: 00001111 đưa ra cột, tích cực hàng thứ hai; dữ liệu thứ 3 có giá trị: 01110111 đưa ra cột, tích cực hàng thứ 3; dữ liệu thứ 4 có giá trị: 01110111 đưa ra cột, tích cực hàng thứ 4; tiếp tục đữ liệu hàng thứ 5 có giá trị: 00001111 đưa ra cột, tích cực hàng thứ 5; kế tiếp là dữ liệu của hàng thứ 6 có giá trị: 01110111 được đưa ra cột, tích cực hàng thứ 6 ; dữ liệu của hàng thứ 7 có giá trị: 01110111 đưa ra cột, tích cực hàng thứ 7; dữ liệu thứ 8 có giá trị: 00001111 đưa ra cột, tích cực hàng thứ 8. Như vậy toàn bộ dữ liệu của chữ B đã được đưa ra hiển thị trên màn hình led ma trận. Quá trình trên được diễn ra rất nhanh > 24lần/ 1s nên chúng ta có cảm giác nó diễn ra một cách đồng thời nhờ đó mà chúng ta quan sát được trên màn hình led ma trậnlà một chữ B liên tục.

4.2.2 Quét cột:

a) Giới thiệu chung về phương pháp quét cột.

Phương pháp quét cột là phương pháp mà trong một khoảng thời gian xác định chỉ cho một cột được tích cực hiển thị trong khi các cột khác đều tắt, các cột được quét (tích cực) tuần tự ở các khoảng thời gian kế tiếp nhau được lặp lại nhiều lần với tốc độ > 24 hình/1s sẽ cho ta một hình ảnh liên tục cần hiển thị lên trên màn hình led ma trận.

b) Quá trình thực hiện quét cột.

Dữ liệu của cột thứ nhất được đưa ra hàng sau đó tích cực cột thứ nhất như vây dữ liệu của cột thứ nhất được hiển thị trên màn hình led ma trận, tiếp tục dữ liệu của cột thứ hai được đưa ra hàng sau đó tích cực cột thứ hai lúc này dữ liệu của hàng thứ hai được hiển thị trên man hình led ma trận, cứ như vậy cho đến dữ liệu của cột cuối cùng được đưa ra hàng sau đó tích cực cột cuối cùng. Cứ như thế quá trình trên được lặp đi lặp lại > 24lần/1s, đến đây chúng ta quan sát được một hình ảnh liên tục hiển thị trên màn hình led ma trận.

Ví dụ:

Hiển thị chữ B lên màn hình led ma trận (hàng được tích cực ở mức1, cột được tích cực ở mức 0).

Hình 4.7: Hiển thị chữ B trên led ma trận dùng phương pháp quét cột.

Hàng 1

Hàng 8

Cột 8

Cột 1

Dữ liệu thứ nhất có gía trị: 11111110 được đưa ra hàng, tích cực cột thứ nhất

(điều khiển cột thứ nhất cho ra giá trị là 0); dữ liệu thứ hai có giá trị: 10010010 đưa ra

hàng, tích cực cột thứ hai; dữ liệu thứ 3 có giá trị:10010010 đưa ra hàng, tích cực cột

thứ 3; dữ liệu thứ 4 có giá trị: 10010010 đưa ra hàng, tích cực cột thứ 4; tiếp tục đữ

liệu hàng thứ 5 có giá trị: 01101100 đưa ra hàng, tích cực cột thứ 5; kế tiếp là dữ liệu

của cột thứ 6 có giá trị: 00000000 được đưa ra hang, tích cực côt thứ 6 ; dữ liệu của cột

thứ 7 có giá trị: 00000000 đưa ra hàng, tích cực cột thứ 7; dữ liệu thứ 8 có giá trị:

00000000 đưa ra hàng, tích cực cột thứ 8. Như vậy toàn bộ dữ liệu của chữ B đã được

đưa ra hiển thị trên màn hình led ma trận. Quá trình trên được diễn ra rất nhanh >

24lần/ 1s nên chúng ta có cảm giác nó diễn ra một cách đồng thời, nhờ đó chúng ta

quan sát được trên màn hình led ma trận là một chữ B liên tục.

Ưu, nhược điểm của phương pháp hiền thị led ma trận sử dụng thanh ghi dịch:

Ưu điểm: Tiết kiệm đường truyền, hiệu quả kinh tế.

Tiết kiệm chân PORT.

Truyền dữ liệu đi xa hơn.

Mở rộng bảng ma trận lên một cách dễ dàng.

Lập trình dễ dàng trong phương pháp quét cột.

Nhược điểm:

Tốn thời gian để thực hiện việc truyền dữ liệu đến các cột.

Chuyển đổi không linh hoạt bằng sử dụng phương pháp chốt.

Lập trình khó khăn hơn khi sử dụng phương pháp quét hàng.

CHƯƠNG 5

SƠ ĐỒ KHỐI VÀ CHỨC NĂNG TỪNG KHỐI

5.1 SƠ ĐỒ KHỐI HỆ THỐNG:

Hình 5.1: Sơ đồ khối của hệ thống.

5.2 Ý NGHĨA TỪNG KHỐI:

5.2.1 Khối điều khiển:

Khối điều khiển: Được thiết kế bởi PIC 16F877A có nhiệm vụ xử lý tất cả các dữ liệu của chương trình. Điều khiển dữ liệu hiển thị. Điều khiển xuất nhập dữ liệu. Điều khiển truy xuất dữ liệu và xử lý sau đó truyền đến các khối: công suất, chốt và đệm để hiển thị trên Led ma trận.

VCC

b6

D8

DIODE

SW1

SW_PB_SPST

b8

P1594837261

R3R

C14

33P

Y112MHz

RXV

b1

RXMAX

VCC

C12

CAPRXMAX

0

TXMAX

0

b5

C13

33P

b3

R10

1k

TXV

C8

CAP

b7

0

J13

CON9

123456789

C5CAP

b4

RXV

TXV

VCC

U14

MAX232

1

34

5

1615

26

129

1110

138

147

C1+

C1-C2+

C2-

VCC

GN

DV+V-

R1OUTR2OUT

T1INT2IN

R1INR2IN

T1OUTT2OUT

b2

C7

CAP

VCC

C6CAP

C4104

TXMAX

U13

PIC16F877A

1112

14

32

13

31

23

1

4567

3334353637383940

1516171823242526

1920212227282930

8

910

Vdd

GN

DOSC2/CLKOUT

MC

LR/V

PP

OSC1/CLK

GND

RA0/ANORA1/AN1

VDD/MCLR

RA2/AN2RA3/AN3RA4/TOCK/C1OUTRA5/AN4

RB0/INTRB1RB2RB3RB4RB5

RB6/BGCRB7/BGD

RC0/T1OSO/RC1/T1OSIRC2/CCP1

RC3/SCK/SCLRC4/SDA/SDI

RC5/SD0RC6/TX/CKRC7/RX/DT

RD0/PSP0RD1/PSP1RD2/PSP2RD3/PSP3RD4/PSP4RD5/PSP5RD6/PSP6RD7/PSP7

RE0/RD/AN5

RE1/WR/AN6RE2/CS/AN7

Hình 5.3: Sơ đồ kết nối mạch VĐK.

5.2.2 Khối công suất:

Nâng công suất đủ lớn để cung cấp cho khối hiển thị. Nếu ta dùng các IC để thúc công suất thì ta sẽ có dòng ngõ ra cố định, khi muốn

dùng tải công suất lớn hơn thì ta khó có thể sửa đổi lại mạch công suất được. Và một điều nữa là theo tính toán, dòng điện ở mỗi hàng có thể lên tới vài trăm mA , giá trị này cao hơn nhiều so với dòng ngõ cực đại của IC .Do đó cần phải thiết kế mạch để thúc công suất cho tải.

Còn nhiều cách khác nữa để thúc tải như dùng SCR, Triac, Opto, Relay...Các cách này thường được dùng cho các tải có công suất lớn ở ngoài trời.

Do tải ở đây là bảng công suất không lớn lắm nên ta chỉ cần dùng Transistor công suất trung bình.

Về phương diện công suất chính là việc nâng dòng cho dữ liệu hàng và cột nhằm đảm bảo yêu cầu về dòng qua led ma trận, vì phần cứng bao gồm 6 led ma trận, mỗi led ma trận là một khối bao gồm 64 led đơn nên ta chỉ sử dụng C1815, đảm bảo tính ổn định và cung cấp đủ dòng cho tải.

Như vậy, cứ mỗi cột ta phải dung một mạch đệm dòng.

D1

LED

Q11R1001

R3R

VCC

R4

R

Hình 5.4: Sơ đồ nguyên lý mạch đệm dòng.

5.2.3 Khối hiển thị:

Có nhiệm vụ dịch chuyển dữ liệu ra các cột, đệm tăng dòng đủ lớn để điều khiển hiển thị các yêu cầu của người sử dụng.

Khối hiển thị làm nhiệm vụ dịch dữ liệu từ vi điều khiển, chốt dữ liệu, đệm dữ liệu đủ dòng và hiển thị trên Led ma trận .

b8

p5

p21

U9

74HC573

23456789

111

1918171615141312

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

p6

p18

p3

LED 5

b8

b6

b6

U7

74HC573

23456789

111

1918171615141312

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

p17

p2

p22

p20

LED 2

b7b6

p13

p10

b1

p7

p14

p1

RN3

R-PACK

1 162 153 144 135 126 117 108 9

RN1

R-PACK

1 162 153 144 135 126 117 108 9

b3b4

b3 p11

p8

p24

RN2

R-PACK

1 162 153 144 135 126 117 108 9

p12

U8

74HC573

23456789

111

1918171615141312

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

p16p15

b5

b7

b2

LED 3

p19

b1

b8

b4

b3

b1

b7

b4

LED 6

b2

b2

b5

p9

p4 LED 1

LED 4

p23

b5

Hình 5.5: Sơ đồ mạch các IC chốt và hiển thị.

Do nhóm thực hiện đồ án quyết định chọn phương pháp hiển thị bằng IC chốt và quét hàng nên trong khoảng thời gian xác định một cột chỉ phải chịu dòng của một điểm ảnh, dòng ra cực đại tại một ngõ ra là 500mA, với những tính năng trên nhóm

thực hiện quyết định chọn IC 74HC573 để làm thanh ghi dịch và dung BJT C1815 đệm dòng ở cột

5.2.4 Khối nguồn:

Trong một mạch điện tử thì bộ nguồn có vai trò rất quan trọng, nó quyết định sự hoạt động hay ngưng hoạt động của mạch. Một bộ nguồn không tốt sẽ làm cho mạch hoạt động kém ổn định và dể làm hỏng linh kiện. Vì vậy bộ nguồn ổn áp tốt sẽ rất cần thiết cho các mạch điện tử ( mạch dùng các IC số).

Chức năng của mọi ổn áp DC là biến đổi điện áp vào DC chưa ổn định thành điện áp ra DC ổn định và giá trị điện áp này phải đúng với giá trị khi tính toán lý thuyết. Điện áp này phải được duy trì liên tục và không thay đổi khi điện áp ngõ vào hoặc dòng tải thay đổi (ở một giới hạn cho phép của mạch). Để thực hiện điều này thì một nguồn ổn áp thường gồm các phần sau:

Hình 5.6: Sơ đồ khối của khối nguồn.

Khối chỉnh lưu và lọc: có nhiệm vụ đổi điện áp xoay chiều thành điện áp một

chiều và lọc.

Khối công suất: cung cấp dòng chính cho tải.

Khối lấy mẫu: lấy một điện áp từ ngõ ra đưa về so sánh với Vref để điều khiển ổn

định điện áp.

CHƯƠNG 6

TÍNH TOÁN

6.1 NGUỒN ĐIỀU KHIỂN:

Sơ đồ mạch:

C410uf /25V

VCC

C210uF/25V

VCC

D2

C3104

C1

1000uf /25V

J5

CON2

12

R21K

- +

D1

RS403L2

1

3

4

U1 LM7805

1 3

2

IN OUT

GN

D

Hình 6.1: Sơ đồ mạch nguồn ổn áp 5V

Thiết kế:

Để an toàn IC 7805 cung cấp dòng cho tải là: 100mA - 1A

Điện áp ngõ vào tối thiểu phải cao hơn điện áp ngõ ra 2V để mạch hoạt động tốt. Trong đó C1, C2 dùng để lọc (nguồn DC chưa ổn định) để ổn định điện áp ngõ vào, C3 dùng để lọc nhiễu cao tần, C4 làm cho áp được phẳng hơn.

6.2. MẠCH NGUỒN RESET:

Mạch dùng để thiết lập lại trạng thái ban đầu cho hệ thống, gọi tắt là reset hệ

thống. 16f877A được reset bằng cách giữ chân MCLR ở mức thấp. MCLR có thể được

tác động bằng tay hoặc được tác động khi cấp nguồn (reset máy). Dưới đây là 2 dạng

mạch reset:

Sơ đồ mạch:

R2

R

MCLR

R1R

VCC

C2C

SW1

D1

DIODER2

R

MCLR

R1R

VCC

C2C

Hình 6.2: mach reset tự động -- mạch reset bằng tay

Giải thích mạch: Khi vừa cấp nguồn, điện áp trên tụ là 0V ngõ ra đưa đến chân

reset ở mức cao, PIC bắt đầu hoạt động ở chế độ này. Sau đó tụ nạp điện do đó chân

reset của PIC luôn ở mức cao, PIC được phép hoạt động. Hoặc khi mạch đang hoạt

động mà nhấn nút SW làm IC ngưng hoạt động (do tụ phóng điện), PIC chỉ hoạt động

trở lại khi nút nhấn SW được thả ra và tụ nạp đến một giá trị nào đó. để chân reset của

PIC không còn bị tác động.

Tính toán: nguồn cung cấp cho mạch là 5V nên các IC thuộc họ CMOS sẽ hiểu

mức logic cao khi điện áp các chân ngõ vào là 3.5V, mức thấp là 1V. Do đó, để IC

thoát khỏi trạng thái reset (mức thấp) thì điện áp ở chân reset (điện áp trên R2) phải ≤

1V

Ta có: VCC = 5V mà Vcc= VC + VR = VC + 1V

VC = 4V ; ( chọn VR=1V khi IC thoát khỏi trạng thái Reset )

Giả sử lúc chưa có điện áp cung cấp, Vcc = 0V, Vc = 0V.

Khi có điện áp Vcc =5V, tụ được nạp điện với phương trình nạp:

)1( RCt

CCC eVV

với: = RC: thời hằng nạp của tụ.

t: thời gian tụ nạp đầy.

)1(54 RCt

e

eRCt

= 1 - 54 = 0.2

RCt = 1,6

Chọn t = 0.13 s RC = 0.0812 s

Chọn C = 10 uF R = C = 8.12 K

Vậy, ta chọn R2 = 8.2 K .

Tính R1: Nhấn nút SW , tụ bắt đầu xã điện: VCC = 5V, (3V>VRESET =VR2)

Ta có: VRESET = (VCC /(R1 + R2) x R1 R1 = (VCC .R2 – VRESET .R2)/VRESET = 10K

6.3. MẠCH ĐỆM DÒNG:

Sơ đồ mạch:

R1R

R2

R

VCC

Q1C1815

5V

D1

LED

Hình 6.3: Mạch đệm dòng

Về phương diện công suất chính là việc nâng dòng cho dữ liệu hàng và cột

nhằm đảm bảo yêu cầu về dòng qua led ma trận.

Đồ án dùng quang báo 8x48 ( tức 8 hàng, 48 cột), nguồn dương đưa vào cột nên

có 48 mạch kéo dòng.

Tính toán:

Tính R2

Khi Q1 dẫn bão hòa ta có: Ib = k min

1I c ;( mà Ic1 Ib2)

Vì mach đệm dòng được thiết kế trên cột và quét theo hàng nên khi quét mỗi

cột chỉ sang một led.

Để mỗi led đơn của led ma trận sáng bình thường trong quá trình quét led ta

phân cực như sau:

Ic = 20mA

VLed = 2V

Trong đó: IR: dòng qua led ma trận

VLed : áp định mức đặt lên mỗi led

Ib = 3x(20/80) = 0.75(mA)

R2 = (Vcc – Vbe –Vled)/Ib= (5 – 0,8 – 2 )/0.75 =3 kΩ

Tính R1:

Khi Transistor C1815 dẫn bão hòa thì:

R1 = (Vcc – Vce – Vled )/Ic

= (5 – 0,2 – 2)/20

= 140 Ω

Chọn: R1 = 220 Ω, R2 = 3,3kΩ

CHƯƠNG 7

SƠ ĐỒ MẠCH VÀ NGUYÊN LÝ HOẠT ĐỘNG

7.1 SƠ ĐỒ NGUYÊN LÝ

7.2 NGUYÊN LÝ HOẠT ĐỘNG

Khi khởi động nguồn quang báo, đầu tiên vi điều khiển sẽ cập nhật cấu hình của quang báo trong đó có font chữ, dữ liệu phông hình, dữ liệu hiển thị trạng thái điều khiển, trạng thái của phần lưu giữ liệu, cấu hình chạy chữ

Do khởi động mặc định là chữ chạy trước nên sau khi cập nhật cấu hình quang báo xong, chương trình sẽ dựa vào cấu hình chạy chữ mà thực hiện.

Nếu không có sự kiện nào phát sinh thì quang báo sẽ chạy vòng lặp hiển thị là vô tận.

Việc hiển thị trên bảng led là động. Tức là trong một thời điểm chỉ có một hàng được sáng. Nhưng khi quét nhanh ở tần số 50Hz trở lên thì mắt thường coi như là sáng liên tục trên toàn bảng.

Kỹ thuật quét led :

Là cấp tín hiệu điều khiển theo dạng xung theo kiểu quét cho các hàng cần

hiển thị tần số quét nhỏ nhất cho mỗi chu kỳ cần khoảng 25Hz (40ms) nhằm bảo đảm

cho mắt thấy các led sáng đều không nhấp nháy.

Dữ liệu phông chữ, hình được đổ qua cột.

Khi quét hết 48 cột thì được một hình.

Khi chạy chữ chỉ cần hiển thị một hình khác đã được dịch đi một cột (hoặc

hàng).

CHƯƠNG 8

LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH HOẠT ĐỘNG

Ý TƯỞNG THIẾT KẾ PHẦN MỀM:

Bảng quang báo chạy text với font tiếng Việt và tiếng Anh, chạy từ trái sang phải, từ phải sang trái, chạy từ trên xuống dưới, từ dưới lên trên.

Tạo font chữ và giải mã.

Vi điều khiển lưu vào vùng nhớ trong ROM sau đó vi điều khiển lấy dữ liệu điều khiển hiển thị ra màn hình led ma trận thông qua mạch công suất và mạch hiển thị.

8.1. LƯU ĐỒ GIẢI THUẬT.

1 .Quy trình hoạt động của hệ thống:

Hình 8.1 Quy trình hoạt động của hệ thống

2.Lưu đồ chương trình chính:

Hình 8.2: Lưu đồ chương trình chính.

3. Lưu đồ chương trình: chạy_chữ.

Hình 8.5: Lưu đồ chương trình chạy_chữ.

8.2. CHƯƠNG TRÌNH HOẠT ĐỘNG.

#include <16f877a.h>

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

#use delay(clock=12000000)

//khai bao mang

int const quet[]=0b11111110,0b11111101,0b11111011,0b11110111,0b11101111,0b11011111,0b10111111,0b01111111;

int const mang0[]=0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,

0,0,0,0,128,190,72,72,72,72,136,

0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,156,162,130,186,34,28,

0,0,0,0,0,145,83,85,89,81,145,

0,0,0,0,0,145,81,95,81,81,145,

0,0,0,0,152,164,132,152,160,36,24,

0,0,0,0,0,2,2,2,2,2,94,

0,0,0,0,0,145,83,85,89,81,145,

0,0,0,0,0,0,0,0

;

int const mang1[]=0,0,0,0,0,0,0,0,

0,128,142,82,87,82,82,142,

0,0,0,17,10,251,36,36,36,36,35,

0,0,0,0,206,81,65,225,65,81,206,

0,0,0,0,0,40,40,232,40,37,34,

0,0,0,0,0,147,148,144,151,148,99,

0,0,0,0,0,147,180,212,148,148,147,

0,0,0,0,232,136,136,136,136,133,130,

0,0,0,0,0,145,83,85,89,81,145,

0,0,0,0,0,195,36,32,39,36,203,

0,0,0,0,0,0,0,0

;

int const mang2[]=0,0,0,0,0,0,0,0,

5,10,131,68,68,196,68,67,

0,0,0,0,0,68,76,84,100,68,68,

0,0,0,0,243,20,20,125,20,20,243,

0,0,0,0,0,122,138,139,138,138,122,

0,0,0,0,0,162,162,156,136,136,136,

0,0,0,0,0,28,34,2,58,34,28,

0,0,0,0,139,136,136,248,136,136,136,

0,0,0,0,0,227,20,16,23,20,227,

0,0,0,0,0,137,138,248,136,138,137,

0,0,0,0,0,0,0,0

;

int const mang3[]=0,0,0,0,0,0,0,0,

4,2,137,154,170,203,138,138,

0,0,0,0,0,78,81,193,89,81,78,

0,0,0,0,62,9,9,9,9,9,8,

0,0,0,0,0,0,2,0,0,2,0 ,

0,0,0,0,0,151,176,211,144,144,151,

0,0,0,0,0,78,209,81,95,81,81,

0,0,0,0,0,4,0,0,0,4,0,

0,0,0,0,0,56,69,5,5,69,56,

0,0,0,0,0,242,66,66,66,66,66,

0,0,0,0,0,0,0,0

;

int const mang4[]=0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,

0,0,0,64,160,234,42,235,42,42,234,64,

0,0,0,28,162,162,162,162,162,28,

0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,124,16,16,16,16,16,

0,0,0,0,0,20,20,245,22,20,20,

0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,34,162,190,162,162,162,

0,0,0,0,0,157,162,162,190,162,162,

0,0,0,0,0,0,0,0

;

int const mang5[]=0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,

0,0,0,0,0,29,36,36,28,4,5,

0,0,0,0,7,8,0,7,8,8,7,

0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,81,81,95,81,81,81,

0,0,0,0,0,1,1,1,1,1,1 ,

0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,147,180,212,151,148,148 ,

0,0,0,0,0,8,13,10,8,8,8 ,

0,0,0,0,0,0,0,0

;

void chot0()

output_high(pin_c0);

output_low(pin_c0);

void chot1()

output_high(pin_c1);

output_low(pin_c1);

void chot2()

output_high(pin_c2);

output_low(pin_c2);

void chot3()

output_high(pin_c3);

output_low(pin_c3);

void chot4()

output_high(pin_c4);

output_low(pin_c4);

void chot5()

output_high(pin_c5);

output_low(pin_c5);

void main(void)

int m,i,a;

set_tris_b(0x00);

set_tris_c(0x00);

set_tris_d(0x00);

output_b(0x00);

output_c(0x00);

output_d(0x00);

while(1)

for(m=0;m<=20;m++)

for(i=0;i<=7;i++)

output_b(mang0[a+i]);

chot0();

output_b(mang1[a+i]);

chot1();

output_b(mang2[a+i]);

chot2();

output_b(mang3[a+i]);

chot3();

output_b(mang4[a+i]);

chot4();

output_b(mang5[a+i]);

chot5();

output_d(quet[i]);

delay_ms(2);

output_b(0x00);

chot0();

chot1();

chot2();

chot3();

chot4();

chot5();

output_d(0xff);

delay_us(2);

a++;

if(a==104)

a=0;

CHƯƠNG 9

TỔNG KẾT

Sau 4 tuần nghiên cứu và thực hiện với nhiều nỗ lực và cố gắng của nhóm thực hiện đề tài cùng với sự hướng dẫn tận tình của cô Bùi Thị Kim Chi, quyển đồ án này đã hoàn thành với những nội dung như sau: 9.1. CÁC VẤN ĐỀ ĐÃ ĐƯỢC GIẢI QUYẾT TRONG ĐỒ ÁN:

Các vấn đề đã nghiên cứu: Nghiên cứu vi điều khiển PIC 16F877A Nghiên cứu cách quét led ma trận. Thiết kế và thi công mô hình một bảng quang báo. Nghiên cứu ngôn ngữ lập trình C.

Các vấn đề đã thực hiện: Lập trình điều khiển vi điều khiển PIC 16F877A bằng ngôn ngữ C. Lập trình điều khiển led ma trận theo cách quét hàng.

Kết quả thực nghiệm và đánh giá mô hình:

Thời gian nghiên cứu và thi công không nhiều nên phần thiết kế vẫn chưa tối ưu

về tính thẩm mỹ và hiệu quả kinh tế nhưng vẫn đảm bảo mô hình họat động tốt. Độ

sáng của quang báo là có thể chấp nhận được, nội dung cần hiển thị và có khả năng

thay đổi được .

Hình 9.8: Bảng quang báo 8x48 điểm ảnh.

8.2. ƯU VÀ NHƯỢC ĐIỂM CỦA THI CÔNG MẠCH: Ưu Điểm:

Chữ hiển thị rõ ràng, tốc độ di chuyển vừa phải. Mạch hoạt động ổn định trong thời gian dài.

Nhược Điểm: Khi muốn thay đổi kiểu hiển thị cần phải nạp lại chương trình tức tác

động trực tiếp trên board.

Các phương hướng phát triển đề tài: Tăng kích thước của mạch quang báo cho phù hợp với thực tế sử dụng. Sử dụng nhiều font chữ để làm phong phú hơn bảng quang báo. Giao tiếp với máy tính . Tạo bảng led ma trận bằng led out door để đáp ứng nhu cầu sử dụng.

KẾT LUẬN: Đề tài: “QUANG BÁO HIỂN THỊ LED MA TRẬN”. Đề tài đã trình bày được

nguyên tắc hoạt động cơ bản của một mạch quang báo, giới thiệu về cách sử dụng

cũng như sơ đồ chân, sơ đồ nội bộ của các IC số dùng trong mạch.

Nhóm thực hiện đề tài xin chân thành cảm ơn quý thầy cô cùng các bạn sinh

viên, đã đóng góp rất nhiều ý kiến, công sức quý báu trong quá trình nhóm thực hiện

đề tài này.

Đặc biệt là cô NGUYỄN THỊ HỒNG ÁNH, đã nhiệt tình hướng dẫn, chỉ bảo

những kinh nghiệm, kiến thức thực tế để đề tài được hoàn thành nhanh chóng.

Tuy nhiên, do còn hạn chế về thời gian và trình độ nên đề tài không tránh khỏi

nhiều sai sót, nhóm rất mong nhận được sự đóng góp ý kiến chân tình của quý thầy cô

và các bạn để đề tài được hoàn chỉnh hơn.

PHẦN II

PHỤ LỤC GIỚI THIỆU VỀ LẬP TRÌNH C CHO PIC 16F877A I.Giới thiệu

C là một ngôn ngữ khá mạnh và rất nhiều ngưòi dùng.C là một ngôn ngữ lập trình đa dụng,cấp cao có những khả năng thực hiện những thao tác khá sâu như hợp ngữ (Assembly language).Chính nhờ tính tổng quát và linh hoạt đó mà C được xem là ngôn ngữ lập trình chuỵên nghiệp rất hiệu quả và tiện lợi,lập trình C cho vxl chúng ta chỉ cần biết số lượng lệnh không nhiều . Đầu tiên bạn phải làm quen với Các kiểu toán tử ở C Các kiểu dữ liệu Cẩu trúc cơ bản của một chương trình Các cấu trúc điều khiển (chính các tập lệnh ) Cấu trúc điều kiện : if và else Các cấu trúc lặp Vòng lặp while Vòng lặp do while Vòng lặp for Lệnh break. Cấu trúc lựa chọn: switch. case Biết sử dụng các hàm và chương trình con .

II.Cơ bản C

1. Các chỉ thị trước xử lý của C // chu thich /********** chu thich****************** *************************************** */ Đây là dòng chú thích. Tất cả các dòng bắt đầu bằng hai dấu sổ (//) được coi là chú thích chúng không có bất kì một ảnh hưởng nào đến hoạt động của chương trình. Chúng có thể được các lập trình viên dùng để giải thích hay bình phẩm bên trong mã nguồn của chương trình. Trong trường hợp này, dòng chú thích là một giải thích ngắn gọn những gì mà chương trình chúng ta làm. Còn trong dấu (/* */) bạn có thể chú thích bao nhiêu dòng tuỳ thích

#include <16F877A.H> hoặc #include "16F877A.H" trình biên dịch sẽ gọi file thư viện của 16F877A ra #include <math.h> ;// khai báo cho toán học

#include <intrins.h>;// khai báo cho chương trình dịch hỗ trợ cho PIC #include <stdio.h> ;// khai báo cổng ra,vào #define bien_thay_the bien

2. Các toán tử :

->Toán tử gán (=).

Ex: b = 5; a = 2 + b; a = 2 + (b = 5); a = b = c = 5;

->Các toán tử số học ( +, -, *, /, % )

+ cộng - trừ * nhân / chia % lấy phần dư (trong phép chia)

->Các toán tử gán phức hợp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)

value += increase; tương đương với value = value + increase; a -= 5; tương đương với a = a - 5; a /= b; tương đương với a = a / b; price *= units + 1; tương đương với price = price * (units + 1);

Tăng và giảm ++ - -

a++; <=> a+=1; <=> a=a+1; tính chất tiền tố hoặc hậu tố (++a) # (a++) Ex: B=3; B=3;A=++B; // A is 4, B is 4 B=3; A=B++; // A is 3, B is 4

-> Các toán tử quan hệ ( ==, !=, >, <, >=, <= )

== Bằng != Khác > Lớn hơn < Nhỏ hơn > = Lớn hơn hoặc bằng < = Nhỏ hơn hoặc bằng

3. Các kiểu dữ liệu

Các kiểu biến.chuẩn

type bits byte phạm vi char 8 1 -127 to 128

unsigned char 8 1 0 to 255 int 16 2 -32,768 to 32,767 unsigned int 16 2 0 to 65,535

Kiểu dữ liệu trong Keil C

type bits byte phạm vi bit 1 0 0 to1 sbit 1 0 0 to1 sfr 8 1 0 to 255

sf16 16 2 0 to 65,535 4. Cấu trúc cơ bản của 1 chương trình C Cac cấu trúc lệnh

_while (expr) stmt : xét điều kiện trước rồi thực thi biểu thức sau . _ do stmt while (expr) : thực thi biểu thức trước rồi xét điều kiện sau . _Return : dùng cho hàm có trả về trị, hoặc không trả về trị cũng được, khi đó chỉ cần dùng : return ; ( nghĩa là thoát khỏi hàm tại đó). _Break : ngắt ngang (thoát khỏi) vòng lặp while. _Continue : quay trở về đầu vòng lặp while . Các chỉ thị tiền định #include <16f877a.h> //Gọi thư viện có sẵn cách viết khác "*.h" #define led1 PORTA.0 //dùng định nghĩa các biến char bien1,bien2; //cac bien can dung

int a,b; void chuongtrinhcon(unsigned int b) // chuong trinh con … int ham(void) // chuong trinh con dang ham …. Return(a);

int a; // khai bao bien dang so nguyen chuongtrinhcon(); a = ham();

Khai báo ngắt

void main // chuong trinh chinh ... while(1) //vong lap vo tan sau khi thuc hien xong cong viec void ngat0(void) interrupt 0 // chuong trinh ngat Khai báo Timer

void delay(unsigned char time)

while(time--)

TMOD=0x01;

TR0=0;

TH0 = 0xFF;// nạp giá trị cho timer

TL0 = 0xFF; nạp giá trị cho timer

TF0=0;

TR0 = 1; // Chạy bộ định thời

while(!TF0); // chờ khi nào cờ TF0 =1

TÀI LIỆU THAM KHẢO

[1] Hồ Trung Mỹ – Giáo trình Quang điện tử.Đại học Bách khoa Tp.Hồ Chí Minh.

[2] Ngô Diên Tập – Vi điều khiển với lập trình - Nhà xuất bản Khoa học và Kỹ thuật Hà Nội

[3] W.Buchanan – C for Electronic Engineering

[4] Tài liệu PIC 16F877A_Nguyễn Văn Xuân

[5] Báo Cáo PIC 16F877A_Nguyễn Chí Linh

[6] www.Microchip.com

[7] www.diendandientu.net

[8] www.datasheet.com

[9] www.picvietnam.com

q45

d4

Q27

Q47

VCC

VCC

q17

d1

VCC

p24

d7

Q5

VCC

p17

R9

VCC

d2

b1

VCC

q4 q22

q40

b7

q41

d4

b7

d3

VCC

p4

q3

d5

d4

d3

q6

p20

Q12

VCC

d5

R16

Q50

VCCq33

p31

b5

R23

VCC

p48

p30

d2

d6

SO DO NGUYEN LI

p35

p13

q13

q24

VCC

p11

p35

d1

p27

q6

q34

q9

U11

74HC573

23456789

111

1918171615141312

1020

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

GN

DVC

C

D8

DIODE

VCC

p34

p5

b8

Q45

VCC

p48

q27

d2

b6

C3104

VCC

VCC

q36

q45

d1

VCC

VCC

p3

q19

b3

p15

b2

b3

Q16

R27

b3

p41

q39

q29

q42

U15 LM7805

1 3

2

IN OUT

GN

D

p42d1

b6

d1

b8

b8

U12

74HC573

23456789

111

1918171615141312

1020

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

GN

DVC

C

p38

p11

q28

Q49

q9

d2

R44

VCC

VCC

p44

d1

Q39

R18

p9

d6

Q38

KHOI CONG SUAT

VCC

q7

d4

SW1

SW_PB_SPST

q30

q10

q14

d6d7

VCC

d6

p29

VCC

p23p26

R8

R15

VCC

p14

p3

q14

q36

d7

d1

R19

U3

Matrix

1215

28

11

105

1 6 1316

4

93

147

1215

28

11

105

1 6 1316

4

93

147

RN2

R-PACK

1 162 153 144 135 126 117 108 9

q20

q21b4

Q34

q39

b4

b7

b2

Q19

p12

U1

Matrix

1215

28

11

105

1 6 1316

4

93

147

1215

28

11

105

1 6 1316

4

93

147

p13

d4

Q4

U5

Matrix

1215

28

11

105

1 6 1316

4

93

147

1215

28

11

105

1 6 1316

4

93

147

R4

470

VCC

VCC

p15

q44

b6

Q3C1815

R34

VCC

p22

q20

q33

b7

Q8

R42

R36

VCC

q37

d7 d8 d2d6

R37

U13

PIC16F877A

1112

14

32

13

31

23

1

4567

3334353637383940

1516171823242526

1920212227282930

8

910

Vdd

GN

DOSC2/CLKOUT

MC

LR/V

PP

OSC1/CLK

GND

RA0/ANORA1/AN1

VDD/MCLR

RA2/AN2RA3/AN3RA4/TOCK/C1OUTRA5/AN4

RB0/INTRB1RB2RB3RB4RB5

RB6/BGCRB7/BGD

RC0/T1OSO/RC1/T1OSIRC2/CCP1

RC3/SCK/SCLRC4/SDA/SDI

RC5/SD0RC6/TX/CKRC7/RX/DT

RD0/PSP0RD1/PSP1RD2/PSP2RD3/PSP3RD4/PSP4RD5/PSP5RD6/PSP6RD7/PSP7

RE0/RD/AN5

RE1/WR/AN6RE2/CS/AN7

q11

p22

p16

p39

q21

d5

b7

b4

b8

Q15

VCC

q28

q18

q16

d7

R17

Q35

KHOI NGUON

p21

p9

q37

R10

Y112MHz

RXV

R51

RN3

R-PACK

1 162 153 144 135 126 117 108 9

VCC

VCC

q23

d4

Q17

U2

Matrix

1215

28

11

105

1 6 1316

4

93

147

1215

28

11

105

1 6 1316

4

93

147

Q42

p33

q32

q32

d6

R39

RN6

R-PACK

1 162 153 144 135 126 117 108 9

VCC

VCC

q29

b4

d3

p40

p45

p45

q44

R29

VCC

p21

p26

d7

Q41

VCC

q30

b3

b2

d5

R25

R43

p40

p18

VCC

q15

d5

Q31

U9

74HC573

23456789

111

1918171615141312

1020

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

GN

DV

CC

q2

q1

TXV

D2

b6

d8

b5

b6

VCC

b1

d3

R10

1k

q42p10

d3

b4

R21

C13

33P

R45

VCC

p32

b6

C4104

KHOI DIEU KHIEN

p43

p44

q41

R20

R38

VCC

Q28

U6

Matrix

1215

28

11

105

1 6 1316

4

93

147

1215

28

11

105

1 6 1316

4

93

147

p42

d5d8

R7

q26b2

b6

Q37

U7

74HC573

23456789

111

1918171615141312

1020

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

GN

DVC

C

R6

VCC

p28

q5

R33

R3R

VCC

q25

d3

q12

b2

Q36

KHOI HIEN THI

p36

q12

U8

74HC573

23456789

111

1918171615141312

1020

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

GN

DVC

C

Q11

R50

R46

p1p2

d3

d8

R49

R28

VCC

p18

b8

d4

R30

VCC

q4

p4

p19

Q21

Q26

Q48

q47

q8

p6

b8

b3

Q24

VCC

q5 q27

Q30

R13

R14

p7

p12

p36

q2

b5

Q25

q3

d5

p17

p31

p37

q23

d3

R12

p33

q47

d8

b1

R40

Q44

q46

q13

q35

d7

b5

b5

p29

d1

p28

p7

q10

d4

U4

Matrix

1215

28

11

105

1 6 1316

4

93

147

1215

28

11

105

1 6 1316

4

93

147

p37

p32

b3

d2

J15

CON2

12

C14

33P

U10

74HC573

23456789

111

1918171615141312

1020

D0D1D2D3D4D5D6D7

LEOE

Q0Q1Q2Q3Q4Q5Q6Q7

GN

DV

CC

q31

q1

R5

RN5

R-PACK

1 162 153 144 135 126 117 108 9

VCC

q16

p47

d8

Q7

VCC

p8

q48

b5

b4

b4

b8

Q18

p19

q26

VCC

p38

R41

q25

p47

q11

d8

b2

d6

R26

R22

q46

d5

R47

b1

d7

Q43

Q10 R35q48

p1

p27

q31

p10

p46

q35

Q33

RN1

R-PACK

1 162 153 144 135 126 117 108 9

Q14 Q22

p8

q18

b1

Q23

- +

D1

RS403L

2

1

3

4

VCC

q8

R31

R48

p43

p23

b7

C410uf /25V

VCC

p5

p20

q17

Q13

VCC

p46

b1

VCC

p2

q38

R11

Q46

C1

1000uf /25V

VCC

p24

q40

p39

d8

RN4

R-PACK

1 162 153 144 135 126 117 108 9

q34

d2

Q6

R24

p41

p6

q15

d2

Q20

C210uF/25V

Q40

Q9

p30

q19

q43

b2

VCC

b3

b1

R32

VCC

p16

p25

b7 q43

q38

p34

b5

Q29

q22

p25q7

p14

q24

d6

R31K