MỤC LỤC
LỜI CẢM ƠN
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
DANH MỤC CÁC HÌNH VẼ BẲNG BIỂU
DANH MỤC CÁC THUẬT NGỮ VIẾT TẮT
MỤC LỤC 7
PHẦN I: LÝ LUẬN CHUNG 14
CHƯƠNG I: MỞ ĐẦU 14
1.1 Yêu cầu của đề tài 14
1.2 Mục đích nghiên cứu 14
1.3 Lý do chọn đề tài 14
1.4 Chọn phương án thiết kế 14
1.5 Ý nghĩa khoa học và ý nghĩa thực tiễn 14
CHƯƠNG II: LÝ THUYẾT LIÊN QUAN 16
2.1 Môi trường truyền dữ liệu 16
2.1.1 Các khái niệm cơ bản 16
2.1.2 Sự suy giảm và biến dạng tín hiệu 16
2.1.3 Môi trường truyền dẫn hữu tuyến 17
2.2 Các chế độ thông tin 24
2.3 Chế độ truyền 24
2.3.1 Chế độ truyền bất đồng bộ 25
2.3.2 Chế độ truyền đồng bộ 26
2.4 Xử lý số liệu truyền 27
2.4.1 Phương pháp kiểm tra bit chẵn lẻ 28
2.4.2 Phương pháp kiểm tra tổng BSC 29
2.4.3 Phương pháp kiểm tra CRC 34
2.5 Điều khiển luồng 31
2.6 Giao thức điều khiển liên kết dữ liệu thiên hướng bit 32
CHƯƠNG III: LINH KIỆN ỨNG DỤNG 37
3.1 Bộ vi điều khiển 8 bits PIC16F877A 37
3.1.1 Giới thiệu bộ vi điều khiển 8 bits 37
3.1.2 Kiến trúc PIC 38
3.1.3 RISC và CISC 38
3.1.4 Các dòng PIC và cách lựa chọn vi điều khiển PIC 38
3.1.5 Ngôn ngữ lập trình cho PIC 39
3.1.6 Mạch nạp PIC 39
3.1.7 Sơ đồ chân vi điều khiển PIC 40
3.1.8 Một vài thông số vi điều khiển PIC 16f877A 41
3.1.9 Sơ đồ khối vi điều khiển PIC 42
3.1.10 Tổ chức bộ nhớ 43
3.1.11 Bộ chuyển đổi tương tự sang số ADC 44
3.1.12 Giao tiếp nối tiếp I2C 46
3.2 IC chuyển đổi số sang tương tự DAC0808 47
3.2.1 Cấu tạo 47
3.2.2 Sơ đồ khối và sơ đồ kết nối 47
3.2.3 Đặc điểm 49
3.2.4 Nguyên tắc chuyển đổi và các tham số 49
3.3 Keypad 3x4 51
3.4 Màn hình tinh thể lỏng LCD 54
3.5. IC khuếch đại thuật toán LF351 57
PHẦN II: THIẾT KẾ VÀ CHẾ TẠO 59
CHƯƠNG I: SƠ ĐỒ KHỐI TỔNG QUÁT 59
1.1 Sơ đồ khối tổng quát 59
1.2 Hoạt động của các khối 60
CHƯƠNG II: THIẾT KẾ CHI TIẾT 61
2.1 Khối Pre_Amplifier 61
2.2 Khối xử lý bên phát 58
2.3 Khối xử lý bên thu 60
2.4 Khối DAC 61
2.5 Khối nguồn 66
CHƯƠNG III: LƯU ĐỒ THUẬT TOÁN 67
3.1 Master 67
3.2 Slave 68
3.3 Keypad 69
3.4 Send packet 70
CHƯƠNG IV: MÔ HÌNH SẢN PHẨM VÀ HƯỚNG DẪN SỬ DỤNG 68
4.1.MODUL mã hóa dữ liệu và tạo CRC 68
4.1.1Mô hình 68
4.1.2. Hướng dẫn sử dụng 68
4.2.MODUL giải mã dữ liệu và phát hiện lỗi 69
4.2.1.Mô hình 69
4.2.2.Hướng dẫn sử dụng 70
PHẦN III: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 74
3.1 Kết luận 74
3.1.1 Ưu nhược điểm 74
3.1.2 Mở rộng 75
3.2 Các đề xuất và kiến nghị 75
PHỤ LỤC CÁC BÀI THÍ NGHIỆM 73
TÀI LIỆU THAM KHẢO: 83
85 trang |
Chia sẻ: netpro | Lượt xem: 3164 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đồ án Thiết kế và chế tạo bộ thí nghiệm mã hóa và giải mã dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
o đó chúng ta phải dùng một phương pháp điều khiển luồng dữ liệu để đảm bảo máy thu không bỏ qua bất kỳ phần dữ liệu nào do không đủ tài nguyên để lưu trữ. Điều này là quan trọng khi hai thiết bị đang truyền tin thông qua mạng số liệu, khi mà rất nhiều mạng sẽ đệm số liệu trong các bộ đệm có kích thước giới hạn. Nếu hai thiết bị hoạt động với tốc độ khác nhau, chúng ta thường phải điều khiển số liệu ngõ ra của thiết bị tốc độ cao hơn để ngăn chặn trường hợp tắc nghẽn trên mạng. Điều khiển luồng thông tin giữa hai thiết bị truyền thường được gọi vắn tắt là điều khiển luồng.
2.6 Giao thức điều khiển liên kết dữ liệu thiên hướng bit HDLC
Tất cả các giao thức liên kết số liệu mới đều là giao thức thiên hướng bit. Lưu ý rằng các giao thức như vậy được sử dụng các mẫu bit đã được định nghĩa thay cho các ký tự điều khiển truyền để đánh dấu mở đầu hay kết thúc một frame. Máy thu duyệt luồng bit thu theo từng bit một để tìm mẫu bit đầu và cuối frame. Ba phương pháp báo hiệu bắt đầu và kết thúc một frame được gọi là phân định ranh giới frame (delimiting) được trình bày trên hình 4.11, gồm có:
- Mẫu bit duy nhất không trùng với mẫu nào bắt đầu và kết thúc một frame được gọi là cờ (01111110) , kết hợp với kỹ thuật nhồi các bit 0.
- Một mẫu bit duy nhất được đánh dấu frame, được gọi là ranh giới đầu frame (10101011) và một byte chỉ chiều dài (đơn vị là byte) trong phần header của frame.
- Mẫu xác định ranh giới đầu và cuối frame duy nhất gồm các bit được tạo ra do cưỡng bức mã hóa.
Nhìn chung, phương pháp đầu tiên được dùng với giao thức điều khiển liên kết số liệu mức cao (HDLC), trong khi đó hai phương pháp còn lại được dùng với giao thức LLC. Trong thực tế hầu hết các giao thức thiên hướng bit đều là dẫn xuất từ giao thức HDLC, do đó chúng ta sẽ bàn đến giao thức.
Giới thiệu về giao thức HDLC
Giao thức DHLC là một giao thức chuẩn hoá quốc tế đã được định nghĩa bởi ISO để dùng cho cả liên kết điểm - nối - điểm và đa điểm. Nó hỗ trợ hoạt động ở chế độ trong suốt, song công hoàn toàn và ngày nay được dùng một cách rộng dãi trong các mạng đa điểm và trong các mạng máy tính.
Cơ chế hoạt động của giao thức HDLC
1. Chế độ đáp ứng thông thường NRM (nomal response Mode): chế độ này được dùng trong cấu hình không cân bằng. Trong chế độ này trạm thứ cấp chỉ có thể truyền khi nhận được chỉ thị đặc biệt của trạm sơ cấp. Liên kết này có thể là điểm - nối-điểm hay đa điểm trường hợp đa điểm chỉ cho phép một trạm sơ cấp.
2. Chế độ đáp ứng bất đồng bộ ARM ( Asynchronous response mode ) chế độ này được dùng trong cấu hình không cân bằng Nó cho phép một trạm thứ cấp xúc tiến một hoạt động truyền mà không cần sự cho phép từ trạm sơ cấp > Chế độ này thường được dùng trong các cấu hình điểm - nối - điểm và các liên kết song công và cho phép thứ cấp truyền các frame một cách bất đồng bộ với sơ cấp .
3. Chế độ cân bằng bất đồng bộ ABM ( Asynchronous Balanced mode ) ; chế độ này được dùng chủ yếu trên các liên kết song công điểm - nối - điểm cho các ứng dụng truyền số liệu máy tính - đến - máy tính và cho các kết nối giữa máy tính và mạng số liệu công cộng( PSD ). Trong chế độ này mỗi trạm có trạng thái như nhau và thực hiện cả hai chức năng sơ cấp và thứ cấp . Nó là chế độ được dùng trong giao thức nổi tiếng X.25.
- Khuôn dạng frame
Hình1.2.13: Dạng frame HDLC
Khuôn dạng frame trên được dùng nhiều cho các liên kết điểm - nối - điểm. Bắt đầu và kết thúc một frame bằng một cờ 8 bits 01111110. Dùng thuật ngữ “thiên hướng bit” vì luồng bit thu được dò theo từng bit. Do đó về nguyên lý nội dung của frame không nhất thiết phải là bội số của 8 bits.
Để cho phép máy thu tiếp cận và duy trì cơ cấu đồng bộ bit, máy phát phải gửi một chuỗi các byte idle 01111111 đứng trước cờ bắt đầu frame. Với NRZI mã hóa bit 0 trong byte idle cho phép DPLL tại máy thu tiếp cận và duy trì sự đồng bộ đồng hồ. Khi nhận được cờ khởi đầu frame, nội dung cảu frame được đọc và dịch thao các khoảng 8 bits cho đến khi gặp cờ kết thúc frame.
Để đạt được tính trong suốt dữ liệu, cần đảm bảo cờ không được nhận nhầm trong phần nội dung. Vì lý do này người ta dùng kỹ thuật chèn bit 0 hay còn gọi là kỹ thuật nhồi bit. Mạch này chỉ hoạt động trong quá trình truyền nội dung cảu frame. Khi có một tuần tự 5 bits 1 liên tiếp nó sẽ tự động chèn vào một bit 0. Bằng cách này sẽ không bao giờ có cờ trong phần nội dung truyền đi. Một mạch tương tự bên thu thực hiện chức năng gỡ bỏ bit 0 theo hướng ngược lại.
CHƯƠNG III: LINH KIỆN ỨNG DỤNG
3.1 Bộ vi điều khiển 8 bits PIC16F877A
3.1.1 Giới thiệu bộ vi điều khiển 8 bits
Ngày nay các bộ vi điều khiển đang có ứng dụng ngày càng rộng rãi trong các lĩnh vực kỹ thuật và đời sống xã hội, đặc biệt là trong kỹ thuật tự động hóa và điều khiển từ xa. Giờ đây với nhu cầu chuyên dụng hóa, tối ưu (thời gian, không gian giá thành), bảo mật, tính chủ động trong công việc…ngày càng đòi hỏi khắt khe. Việc đưa ra công nghệ mới trong lĩnh vực chế tạo mạch điện tử để đáp ứng những yêu cầu trên là hoàn toàn cấp thiết mang tính thực tế cao.
3.1.2 Kiến trúc PIC
Cấu trúc phần cứng của một vi điều khiển được thiết kế theo hai dạng kiến trúc: kiến trúc
Tổ chức phần cứng của PIC được thiết kế theo kiến trúc Havard. Điểm khác biệt giữa kiến trúc Havard và kiến trúc Von-Neuman là cấu trúc bộ nhớ dữ liệu và bộ nhớ chương trình. Đối với kiến trúc Von-Neuman, bộ nhớ dữ liệu và bộ nhớ chương trình nằm chung trong một bộ nhớ, do đó ta có thể tổ chức, cân đối một cách linh hoạt bộ nhớ chương trình và bộ nhớ dữ liệu. Tuy nhiên điều này chỉ có ý nghĩa khi tốc độ xử lí của CPU phải rất cao, vì với cấu trúc đó, trong cùng một thời điểm CPU chỉ có thể tương tác với bộ nhớ dữ liệu hoặc bộ nhớ chương trình. Như vậy có thể nói kiến trúc Von-Neuman không thích hợp với cấu trúc của một vi điều khiển.
Đối với kiến trúc Havard, bộ nhớ dữ liệu và bộ nhớ chương trình tách ra thành hai bộ nhớ riêng biệt. Do đó trong cùng một thời điểm CPU có thể tương tác với cả hai bộ nhớ, như vậy tốc độ xử lí của vi điều khiển được cải thiện đáng kể.
Một điểm cần chú ý nữa là tập lệnh trong kiến trúc Havard có thể được tối ưu tùy theo yêu cầu kiến trúc của vi điều khiển mà không phụ thuộc vào cấu trúc dữ liệu. Ví dụ, đối với vi điều khiển dòng 16F, độ dài lệnh luôn là 14 bit (trong khi dữ liệu được tổ chức thành từng byte), còn đối với kiến trúc Von-Neuman, độ dài lệnh luôn là bội số của 1 byte (do dữ liệu được tổ chức thành từng byte). Đặc điểm này được minh họa cụ thể trong hình dưới đây.
Hình 1.3.1: Kiến trúc PIC
3.1.3 RISC và CISC
Như đã trình bày ở trên, kiến trúc Havard là khái niệm mới hơn so với kiến trúc Von- Neuman. Khái niệm này được hình thành nhằm cải tiến tốc độ thực thi của một vi điều khiển. Qua việc tách rời bộ nhớ chương trình và bộ nhớ dữ liệu, bus chương trình và bus dữ liệu, CPU có thể cùng một lúc truy xuất cả bộ nhớ chương trình và bộ nhớ dữ liệu, giúp tăng tốc độ xử lí của vi điều khiển lên gấp đôi. Đồng thời cấu trúc lệnh không còn phụ thuộc vào cấu trúc dữ liệu nữa mà có thể linh động điều chỉnh tùy theo khả năng và tốc độ của từng vi điều khiển. Và để tiếp tục cải tiến tốc độ thực thi lệnh, tập lệnh của họ vi điều khiển PIC được thiết kế sao cho chiều dài mã lệnh luôn cố định (ví dụ đối với họ 16Fxxxx chiều dài mã lệnh luôn là 14 bit) và cho phép thực thi lệnh trong một chu kì của xung clock ( ngoại trừ một số trường hợp đặc biệt như lệnh nhảy, lệnh gọi chương trình con … cần hai chu kì xung đồng hồ). Điều này có nghĩa tập lệnh của vi điều khiển thuộc cấu trúc Havard sẽ ít lệnh hơn, ngắn hơn, đơn giản hơn để đáp ứng yêu cầu mã hóa lệnh bằng một số lượng bit nhất định.
Vi điều khiển được tổ chức theo kiến trúc Havard còn được gọi là vi điều khiển RISC (Reduced Instruction Set Computer) hay vi điều khiển có tập lệnh rút gọn. Vi điều khiển được thiết kế theo kiến trúc Von-Neuman còn được gọi là vi điều khiển CISC (Complex Instruction Set Computer) hay vi điều khiển có tập lệnh phức tạp vì mã lệnh của nó không phải là một số cố định mà luôn là bội số của 8 bit (1 byte).
3.1.4 Các dòng PIC và cách lựa chọn vi điều khiển PIC
Các kí hiệu của vi điều khiển PIC:
PIC12xxxx: độ dài lệnh 12 bit
PIC16xxxx: độ dài lệnh 14 bit
PIC18xxxx: độ dài lệnh 16 bit
C: PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM)
F: PIC có bộ nhớ flash
LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp
LV: tương tự như LF, đây là kí hiệu cũ
Bên cạnh đó một số vi điệu khiển có kí hiệu xxFxxx là EEPROM, nếu có thêm chữ A ở cuối là flash (ví dụ PIC16F877 là EEPROM, còn PIC16F877A là flash).
Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC. Ở Việt Nam phổ biến nhất là các họ vi điều khiển PIC do hãng Microchip sản xuất. Cách lựa chọn một vi điều khiển PIC phù hợp:
Trước hết cần chú ý đến số chân của vi điều khiển cần thiết cho ứng dụng. Có nhiều vi điều khiển PIC với số lượng chân khác nhau, thậm chí có vi điều khiển chỉ có 8 chân, ngoài ra còn có các vi điều khiển 28, 40, 44, … chân.
Cần chọn vi điều khiển PIC có bộ nhớ flash để có thể nạp xóa chương trình được nhiều lần hơn.
Tiếp theo cần chú ý đến các khối chức năng được tích hợp sẵn trong vi điều khiển, các chuẩn giao tiếp bên trong. Sau cùng cần chú ý đến bộ nhớ chương trình mà vi điều khiển cho phép.
Ngoài ra mọi thông tin về cách lựa chọn vi điều khiển PIC có thể được tìm thấy trong cuốn sách “Select PIC guide” do nhà sản xuất Microchip cung cấp.
3.1.5 Ngôn ngữ lập trình cho PIC
Ngôn ngữ lập trình cho PIC rất đa dạng. Ngôn ngữ lập trình cấp thấp có MPLAB (được cung cấp miễn phí bởi nhà sản xuất Microchip), các ngôn ngữ lập trình cấp cao hơn bao gồm C, Basic, Pascal, … Ngoài ra còn có một số ngôn ngữ lập trình được phát triển dành riêng cho PIC như PICBasic, MikroBasic,…
3.1.6 Mạch nạp PIC
Đây cũng là một dòng sản phẩm rất đa dạng dành cho vi điều khiển PIC. Có thể sử dụng các mạch nạp được cung cấp bởi nhà sản xuất là hãng Microchip như: PICSTART plus, MPLAB ICD 2, MPLAB PM 3, PRO MATE II. Có thể dùng các sản phẩm này để nạp cho vi điều khiển khác thông qua chương trình MPLAB. Dòng sản phẩm chính thống này có ưu thế là nạp được cho tất cả các vi điều khiển PIC, tuy nhiên giá thành rất cao và thường gặp rất nhiều khó khăn trong quá trình mua sản phẩm.
Ngoài ra do tính năng cho phép nhiều chế độ nạp khác nhau, còn có rất nhiều mạch nạp được thiết kế dành cho vi điều khiển PIC. Có thể sơ lược một số mạch nạp cho PIC như sau:
JDM programmer: mạch nạp này dùng chương trình nạp Icprog cho phép nạp các vi điều khiển PIC có hỗ trợ tính năng nạp chương trình điện áp thấp ICSP (In Circuit Serial Programming). Hầu hết các mạch nạp đều hỗ trợ tính năng nạp chương trình này.
Hình 1.3.2: Mạch nạp PIC (ICSP)
WARP-13A và MCP-USB: hai mạch nạp này giống với mạch nạp PICSTART PLUS do nhà sản xuất Microchip cung cấp, tương thích với trình biên dịch MPLAB, nghĩa là ta có thể trực tiếp dùng chương trình MPLAB để nạp cho vi điều khiển PIC mà không cần sử dụng một chương trình nạp khác, chẳng hạn như Icprog.
P16PRO40: mạch nạp này do Nigel thiết kế và cũng khá nổi tiếng. Ông còn thiết kế cả chương trình nạp, tuy nhiên ta cũng có thể sử dụng chương trình nạp Icprog.
Mạch nạp Universal của Williem: đây không phải là mạch nạp chuyên dụng dành cho PIC như P16PRO40.
Các mạch nạp kể trên có ưu điểm rất lớn là đơn giản, rẻ tiền, hoàn toàn có thể tự lắp ráp một cách dễ dàng, và mọi thông tin về sơ đồ mạch nạp, cách thiết kế, thi công, kiểm tra và chương trình nạp đều dễ dàng tìm được và download miễn phí thông qua mạng Internet. Tuy nhiên các mạch nạp trên có nhược điểm là hạn chế về số vi điều khiển được hỗ trợ, bên cạnh đó mỗi mạch nạp cần được sử dụng với một chương trình nạp thích hợp.
3.1.7 Sơ đồ chân vi điều khiển PIC (Hình 1.3.3)
3.1.8 Một vài thông số vi điều khiển PIC 16f877A
Đây là vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14 bit. Mỗi lệnh đều được thực thi trong một chu kì xung clock. Tốc độ hoạt động tối đa cho phép là 20 MHz với một chu kì lệnh là 200ns. Bộ nhớ chương trình 8Kx14 bit, bộ nhớ dữ liệu 368x8 byte RAM và 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.
Hình 1.3.3. Sơ đồ chân VDK PIC
Các đặc tính ngoại vi bao gồm các khối chức năng sau:
Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit.
Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep.
Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler.
Hai bộ Capture/so sánh/điều chế độ rông xung.
Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C. Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ.
Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD, WR, CS ở bên ngoài.
Các đặc tính Analog:
8 kênh chuyển đổi ADC 10 bit.
Hai bộ so sánh.
Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:
Bộ nhớ flash với khả năng ghi xóa được 100.000 lần.
Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần.
Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm.
Khả năng tự nạp chương trình với sự điều khiển của phần mềm.
Nạp được chương trình ngay trên mạch điện ICSP (In Circuit Serial Programming) thông qua 2 chân.
Watchdog Timer với bộ dao động trong.
Chức năng bảo mật mã chương trình.
Chế độ Sleep.
Có thể hoạt động với nhiều dạng Oscillator khác nhau.
3.1.9 Sơ đồ khối vi điều khiển PIC
3.1.10 Tổ chức bộ nhớ
Cấu trúc bộ nhớ của vi điều khiển PIC16F877A bao gồm bộ nhớ chương trình (Program memory) và bộ nhớ dữ liệu (Data Memory).
3.1.10.1 Bộ nhớ chương trình
Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ flash, dung lượng bộ nhớ 8K word (1 word = 14 bit) và được phân thành nhiều trang (từ page0 đến page 3) . Như vậy bộ nhớ chương trình có khả năng chứa được 8*1024 = 8192 lệnh (vì một lệnh sau khi mã hóa sẽ có dung lượng 1 word (14 bit).
Để mã hóa được địa chỉ của 8K word bộ nhớ chương trình, bộ đếm chương trình có dung lượng 13 bit (PC).
Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (Reset vector). Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interrupt vector).
Bộ nhớ chương trình không bao gồm bộ nhớ stack và không được địa chỉ hóa bởi bộ đếm chương trình. Bộ nhớ stack sẽ được đề cập cụ thể trong phần sau.
Hình 1.3.4: Sơ đồ khối vi điều khiển PIC
Hình 1.3.5: Bộ nhớ chương trình
3.1.10.2 Bộ nhớ dữ liệu
Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank. Đối với PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank. Mỗi bank có dung lượng 128 byte, bao gồm các thanh ghi có chức năng đặc biệt SFG (Special Function Register) nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chung GPR (General Purpose Register) nằm ở vùng địa chỉ còn lại trong bank. Các thanh ghi SFR thường xuyên được sử dụng (ví dụ như thanh ghi STATUS) sẽ được đặt ở tất cà các bank của bộ nhớ dữ liệu giúp thuận tiện trong quá trình truy xuất và làm giảm bớt lệnh của chương trình. Sơ đồ cụ thể của bộ nhớ dữ liệu PIC16F877A như sau:
Hình 1.3.6 Sơ đồ bộ nhớ dữ liệu PIC16F877A
3.1.11 Bộ chuyển đổi tương tự sang số ADC
Sơ đồ khối bộ chuyển đổi ADC trong PIC (hình 1.3.8)
ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu giữa hai dạng tương tự và số. PIC16F877A có 8 ngõ vào analog (RA4:RA0 và RE2:RE0). Hiệu điện thế chuẩn VREF có thể được lựa chọn là VDD, VSS hay hiệu điện thể chuẩn được xác lập trên hai chân RA2 và RA3. Kết quả chuyển đổi từ tín tiệu tương tự sang tín hiệu số là 10 bit số tương ứng và được lưu trong hai thanh ghi ADRESH:ADRESL. Khi không sử dụng bộ chuyển đổi ADC, các thanh ghi này có thể được sử dụng như các thanh ghi thông thường khác. Khi quá trình chuyển đổi hoàn tất, kết quả sẽ được lưu vào hai thanh ghi ADRESH:ADRESL,bit (ADCON0) được xóa về 0 và cờ ngắt ADIF được set.
Qui trình chuyển đổi từ tương tự sang số bao gồm các bước sau:
1. Thiết lập các thông số cho bộ chuyển đổi ADC:
- Chọn ngõ vào analog, chọn điện áp mẫu (dựa trên các thông số của thanh ghi
ADCON1).
Chọnh kênh chuyển đổi AD (thanh ghi ADCON0).
Chọn xung clock cho kênh chuyển đổi AD (thanh ghi ADCON0).
- Cho phép bộ chuyển đổi AD hoạt động (thanh ghi ADCON0).
2. Thiết lập các cờ ngắt cho bộ AD Clear bit ADIF.
- Set bit ADIE.
- Set bit PEIE.
- Set bit GIE.
3. Đợi cho tới khi quá trình lấy mẫu hoàn tất.
4. Bắt đầu quá trình chuyển đổi (set bit ).
5. Đợi cho tới khi quá trình chuyển đổi hoàn tất bằng cách:
- Kiểm tra bit GO/DONE . Nếu GO/DONE =0, quá trình chuyển đổi đã hoàn tất.
- Kiểm tra cờ ngắt.
6. Đọc kết quả chuyển đổi và xóa cờ ngắt, set bit (nếu cần tiếp tục chuyển đổi).
7. Tiếp tục thực hiện các bước 1 và 2 cho quá trình chuyển đổi tiếp theo.
Cần chú ý là có hai cách lưu kết quả chuyển đổi AD, việc lựa chọn cách lưu được điều khiển bởi bit ADFM và được minh họa cụ thể trong hình 3.7 sau:
Hình 1.3.7 Các cách lưu kết quả chuyển đổi AD.
Hình 1.3.8 Sơ đồ khối bộ chuyển đổi ADC.
Các thanh ghi liên quan đến bộ chuyển đổi ADC bao gồm:
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép các ngắt (các bit GIE, PEIE).
PIR1 (địa chỉ 0Ch): chứa cờ ngắt AD (bit ADIF).
PIE1 (địa chỉ 8Ch): chứa bit điều khiển AD (ADIE).
ADRESH (địa chỉ 1Eh) và ADRESL (địa chỉ 9Eh): các thanh ghi chứa kết quả chuyển đổi AD.
ADCON0 (địa chỉ 1Fh) và ADCON1 (địa chỉ 9Fh): xác lập các thông số cho bộ chuyển đổi AD.
PORTA (địa chỉ 05h) và TRISA (địa chỉ 85h): liên quan đến các ngõ vào analog ở PORTA.
PORTE (địa chỉ 09h) và TRISE (địa chỉ 89h): liên quan đến các ngõ vào analog ở PORTE.
3.1.12 Giao tiếp nối tiếp I2C
Đây là một dạng khác của MSSP. Chuẩn giao tiếp I2C cũng có hai chế độ Master, Slave và cũng được kết nối với ngắt. I2C sẽ sử dụng 2 pin để truyền nhận dữ liệu:
RC3/SCK/SCL:chân truyền dẫn xung clock.
RC4/SDI/SDA: chân truyền dẫn dữ liệu.
Hình 1.3.9: Sơ đồ khối MSSP (I2C slave mode)
Các khối cơ bản trong sơ đồ khối của I2C không có nhiều khác biệt so với SPI. Tuy nhiên I2C còn có thêm khối phát hiện bit Start và bit Stop của dữ liệu (Start and Stop bit detect) và khối xác định địa chỉ (Match detect).
Các thanh ghi liên quan đến I2C bao gồm:
Thanh ghi SSPCON và SSPCON2: điều khiển MSSP.
Thanh ghi SSPSTAT: thanh ghi chứa các trạng thái hoạt động của MSSP.
Thanh ghi SSPBUF: buffer truyền nhận nối tiếp.
Thanh ghi SSPSR: thanh ghi dịch dùng để truyền nhận dữ liệu. Thanh ghi SSPADD: thanh ghi chứa địa chỉ của giao diện MSSP.
Các thanh ghi SSPCON, SSPCON2 cho phép đọc và ghi.
Thanh ghi SSPSTAT chỉ cho phép đọc và ghi ở 2 bit đầu, 6 bit còn lại chỉ cho phép đọc.
Thanh ghi SSPBUF chứa dữ liệu sẽ được truyền đi hoặc nhận được và đóng vai trò như một thanh ghi đệm cho thanh ghi dịch dữ liệu SSPSR.
Thanh ghi SSPADD chứa địa chỉ của thiết bị ngoại vi cần truy xuất dữ liệu của I2C khi hoạt động ở Slave mode. Khi hoạt động ở Master mode, thanh ghi SSPADD chứa giá trị tạo ra tốc độ baud cho xung clock dùng để truyền nhận dữ liệu.
Trong quá trình nhận dữ liệu, sau khi nhận được 1 byte dữ liệu hoàn chỉnh, thanh ghi SSPSR sẽ chuyển dữ liệu vào thanh ghi SSPBUF. Thanh ghi SSPSR không đọc và ghi được, quá trình truy xuất thanh ghi này phải thông qua thanh ghi SSPBUF.
Trong quá trình truyền dữ liệu, dữ liệu cần truyền khi được đưa vào thanh ghi SSPBUF cũng sẽ đồng thời đưa vào thanh ghi SSPSR.
I2C có nhiều chế độ hoạt động và được điều khiển bởi các bit SSPCON, bao gồm:
I2C Master mode, xung clock = fosc/4*(SSPADD+1).
I2C Slave mode, 7 bit địa chỉ.
I2C Slave mode, 10 bit địa chỉ.
I2C Slvae mode, 7 bit địa chỉ, cho phép ngắt khi phát hiện bit Start và bit Stop.
I2C Slave mode, 10 bit địa chỉ, cho phép ngắt khi phát hiện bit Start và bit Stop.
I2C Firmware Control Master mode.
Địa chỉ truyền đi sẽ bao gồm các bit địa chỉ và một bit để xác định thao tác (đọc hay ghi dữ liệu) với đối tượng cần truy xuất dữ liệu.
Khi lựa chọn giao diện I2C và khi set bit SSPEN, các pin SCL và SDA sẽ ở trạng thái cực thu hở. Do đó trong trường hợp cần thiết ta phải sử dụng điện trở kéo lên ở bên ngoài vi điều khiển, bên cạnh đó cần ấn định các giá trị phù hợp cho các bit TRISC (bit điều khiển xuất nhập các chân SCL và SDA).
3.2 IC chuyển đổi số sang tương tự DAC0808
3.2.1 Cấu tạo
DAC0808 là một bộ chuyển đổi 8bits nối tiếp số sang tương tự, có đặc tính thời gian đúng bằng kích thước của tín hiệu vào trong khoảng 150ns với công suất tiêu thụ là 33mW khi điện áp cung cấp là ±5V. Không cần phải điều chỉnh dòng điện IREF cho tất cả các ứng dụng, từ đó đầu ra hiện tại là ±1LSB của 255 (IREF/256). Nguồn cung cấp của DAC0808 độc lập với “bit code” và đưa ra đặc tính nổi bật của thiết bị phụ thuộc vào mức điện áp vào.
DAC0808 giao tiếp trực tiếp với TTL, DTL hay CMOS ở mức logic và dùng thay thế cho MC1580/MC1408.
3.2.2 Sơ đồ khối và sơ đồ kết nối
- Sơ đồ khối
Hình 1.3.10 : Sơ đồ khối DAC0808
- Sơ đồ chân
Hình 1.3.11 : Sơ đồ chân DAC0808
3.2.3 Đặc điểm
- Nguồn cung cấp:
Vcc=+18V ; VEE= -18V
Đầu vào số:
V5-V12: -10VDC đến +18VDC
Đầu ra khuếch đại:
V0: -11VDC đến +18VDC
Dòng hiệu chỉnh:
I14: 5mA
Đầu vào khuếch đại hiệu chỉnh:
V14 V15: VCC, VEE
Năng lượng tiêu thụ: 1000mW
Độ cảm ứng ESD: TBD
- Dải nhiệt độ chịu đựng:
-650C đến +1500C
- Dải hoạt động:
Dải nhiệt độ :
TMIN ≤ TA≤ TMAX
DAC0808 00C ≤ TA≤ +750C
- Đặc trưng điện:
VCC=5V, VEE=-15VDC, VREF/R14=2mA
3.2.4 Nguyên tắc chuyển đổi và các tham số
3.2.4.1. Hoạt động của bộ chuyển đổi DAC
Mục đích của bộ chuyển đổi số- tương tự là biến đổi tín hiệu nhị phân n bits thành dòng hay áp tương ứng. Về nguyên tắc bộ chuyển đổi DAC trực tiếp nhận một mã số n bit song song hoặc nối tiếp ở lối vào và biến đổi ra dòng điện hoặc điện áp tương ứng ở lối ra. Dòng điện hay điện áp ở lối ra là hàm biến thiên phù hợp theo mã số ở lối vào.
Một bộ DAC hoàn chỉnh bao gồm 3 phần tử cơ bản:
Điện áp quy chiếu ổn định bên ngoài (Vref)
DAC cơ sở
Khuếch đại thuật toán
Điện áp đầu ra bộ DAC V0 sẽ phụ thuộc vào mã nhị phân đầu vào theo công thức:
V0=Vref (B020 + B121 +…+Bn2n)
Trong đó B0 là bit có trọng số thấp nhất và Bn là bit có trọng số cao nhất của mã nhị phân đầu vào, Vref là điện áp quy chiếu.
DAC cơ sở cấu tạo bằng những chuyển mạch tương tự được điều khiển bởi mã số đầu vào và các điện trở chính xác. Các chuyển mạch tương tự điều chỉnh dòng điện hay điện áp trích ra từ điện áp quy chiếu và tạo nên dòng điện hay điện áp ở đầu ra tương ứng với mã số đầu vào.
Mạch khuếch đại thuật toán dùng để chuyển đổi dòng thành áp đồng thời có chức năng tầng đệm.
Bộ biến đổi DAC có đặc điểm là đại lượng ra tương tự không liên tục, độ rời rạc của đầu ra phụ thuộc vào số bit của bộ biến đổi, những DAC có số bit đầu vào lớn thì tổng số nấc điện áp ra càng lớn và khoảng cách giữa các nấc càng nhỏ.
3.2.4.2. Các tham số của bộ chuyển đổi DAC
- Ðộ phân giải (Solution): Liên quan đến số bít của một DAC. Nếu số bít là n thì số trạng thái của tín hiệu nhị phân là 2n nghĩa là sẽ có 2n mức điện thế (hoặc dòng điện) khác nhau, do đó có độ phân giải là 1/2n. Ðộ phân giải càng bé thì điện thế (hoặc dòng điện đầu ra) càng có dạng liên tục, càng gần với thực tế và ngược lại.
- Ðộ chính xác (Accuracy): Có thể đánh giá chất lượng của một DAC bằng sai số của nó. Ðại lượng biểu diễn sai số là độ lệch tối đa giữa đại lượng ra và một đường thẳng nối điểm 0 với điểm FS (Full Scale) trên đặc tuyến chuyển đổi DA.
- Ðộ tuyến tính (Linearity): Ðộ tuyến tính của DAC cho biết độ lệch điện áp so với một đường thẳng đi qua những điểm nút của đặc tuyến chuyển đổi. Ðó là đặc tính thường gặp nhất với DAC. Ðường cong đặc tuyến là đơn điệu nếu sự thay đổi độ lệch trên là không đổi dấu. Ðể có một DAC đơn điệu, độ lệch này phải lớn hơn 0 cho mỗi nấc thang. Ngoài ra mức độ tuyến tính của DAC phải nhỏ hơn hoặc bằng 1/2 LSB để nó trở nên đơn điệu. Như vậy 1/2 LSB là đặc trưng về giới hạn đơn điệu của một DAC.
- Phi tuyến vi sai: là đại lượng cho biết độ lệch giữa giá trị thực tế và lý tưởng cho một nấc điện áp ra ứng với mỗi thay đổi của mã số vào. Ðại lượng này cho biết về độ nhẵn của đường cong đặc tuyến đối với DAC.
- Thời gian thiết lập: đối với một DAC là thời gian cần thiết để điện áp ra đạt tới giá trị tới hạn sai số xung quanh giá trị ổn định. Giới hạn này thường là 1/2 LSB hoặc biểu diễn bằng giá trị % FS.
Thời gian thiết lập trước hết phụ thuộc vào kiểu chuyển mạch, kiểu điện trở và kiểu khuếch đại dùng để xây dựng bộ DAC. Thông thường nó được định nghĩa bằng thời gian từ khi điện áp bắt đầu thay đổi cho tới khi đạt tới vùng giới hạn sai số cho trước. Nó không bao gồm thời gian trễ tính từ khi có sự thay đổi mã số ở đầu vào cho tới khi điện áp ra bắt đầu đáp ứng.
3.3 Keypad 3x4
a. Cấu tạo của ma trận phím 3x4
Ma trận phím này được cấu tạo bởi : 3 hàng và 4 cột. các hàng và cột được nối với các chân cổng vào ra của vi điều khiển. Khi một phím được bấm, nó sẽ nối một hàng và một cột tương ứng. Khi nút 0 được nhấn thì nó nối giữa cột 1 hàng 1. Còn nút 1 được nhấn thì cột 2 và hàng 1 được nối hay nút 2 được nhấn thì nối giữa cột 3 và hàng 1… cứ như vậy đến nút thứ 12.
Hình 1.3.12: Cấu tạo bàn phím 3x4
Đối với kết cấu của ma trận này chưa được chống nhiễu phím. Nếu muỗn chống nhiễu