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
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Ω
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
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