PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch là “máy tính thông minh khả trình” do hãng Genenral Instrument đặt tên cho vi điều khiển đầu tiên của họ: PIC1650 được thiết kế để dùng làm các thiết bị ngoại vi cho vi điều khiển CP1600. Vi điều khiển này sau đó được nghiên cứu phát triển thêm và từ đó hình thành nên dòng vi điều khiển PIC ngày nay.dụng PIC18F4520 có nhiều ưu điểm hơn các loại VĐK khác như: ADC 10 bit, PWM 10 bit, EEPROM 256 byte, COMPARATER … ngoài ra nó còn được các trường đại học trên thế giới đặc biệt là ở các nước Châu Âu hầu hết xem PIC là 1 môn học trong bộ môn vi điều khiển.
Trang 1CHƯƠNG 2: TỔNG QUAN VỀ VI ĐIỀU KHIỂN
2.1 Vi điều khiển là gì?
2.1.1 Giới thiệu chung
Vi điều khiển (VĐK) là một máy tính được tích hợp trên một chíp, nó thường được sử dụng để điều khiển các thiết bị điện tử Vi điều khiển, thực chất, là một hệ thống bao gồm một vi xử lý có hiệu suất đủ dùng và giá thành thấp (khác với các
bộ vi xử lý đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các mô đun vào/ra, các mô đun biến đổi số sang tương tự và tương tự sang số Ở máy tính thì các module thường được xây dựng bởi các chíp và mạch ngoài
VĐK có khả năng như một máy tính, nhưng có ưu điểm đặc biệt về kích thước rất nhỏ (rộng cỡ 2cm, dài từ 3÷8 cm, với số chân từ 18, 28, 40, 48, 64), nên
đã xâm nhập sâu hơn nữa vào các thiết bị đo lường, điều khiển tự động hóa và đặc biệt vào các thiết bị của đời sống hàng ngày như đồng hồ thời gian, đồng hồ báo giờ, đầu máy ghi và phát âm hay phát hình (video, VCD,DVD…) Đỉnh cao của việc dùng vi điều khiển là dùng trong người máy (ROBOT) và thiết bị PLC để điều khiển logic chương trình hóa dây chuyền sản xuất tự động
VĐK thường được dùng để xây dựng các hệ thống nhúng Nó xuất hiện khá nhiều trong các dụng cụ điện tử, thiết bị điện, máy giặt, lò vi sóng, điện thoại, đầu đọc DVD, thiết bị đa phương tiện, dây chuyền tự động…
2.1.2 Phân loại
Độ dài thanh ghi
Trang 2Dựa vào độ dài của các thanh ghi và các lệnh của VĐK mà người ta chia ra các loại vi điều khiển 8 bit, 16 bit hay 32 bit …
Các loại VĐK 16 bit do có độ dài lệnh lớn hơn nên các tập lệnh cũng nhiều hơn, phong phú hơn Tuy nhiên bất cứ chương trình nào viết bằng VĐK 16 bit chúng ta đều có thể viết trên vi điều khiển 8 bit với chương trình thích hợp
Kiến trúc CISC và RISC
Vi điều khiển CISC là vi điều khiển có tập lệnh phức tạp Các VĐK này có một số lượng lớn các lệnh nên giúp cho người lập trình có thể linh hoạt và dễ dàng hơn khi viết chương trình Vi điều khiển RISC là vi điều khiển có tập lệnh đơn giản Chúng có một số lượng nhỏ các lệnh đơn giản Do đó, chúng đòi hỏi phần cứng ít hơn, giá thành thấp hơn, và nhanh hơn so với CISC Tuy nhiên nó đòi hỏi người lập trình phải viết các chương trình phức tạp hơn, nhiều lệnh hơn
Kiến trúc Harvard và kiến trúc Von-Neumann
Kiến trúc Harvard sử dụng bộ nhớ riêng biệt cho chương trình và dữ liệu Bus địa chỉ và bus dữ liệu độc lập với nhau nên quá trình truyền nhận dữ liệu đơn giản hơn Kiến trúc Von-Neumann sử dụng chung bộ nhớ cho chương trình và dữ liệu Điều này làm cho VĐK gọn nhẹ hơn, giá thành rẻ hơn
2.1.3 Cấu trúc tổng quan của vi điều khiển
CPU:
Là trái tim của hệ thống Là nơi quản lý tất cả các hoạt động của VĐK Bên trong CPU gồm:
- ALU là bộ phận thao tác trên các dữ liệu
- Bộ giải mã lệnh và điều khiển, xác định các thao tác mà CPU cần thực hiện
Trang 3- Thanh ghi lệnh IR, lưu trữ opcode của lệnh được thực thi.
- Thanh ghi PC, lưu giữ lại địa chỉ của lệnh kế tiếp cần thực thi
- Một tập các thanh ghi dùng để lưu thông tin tạm thời
ROM:
ROM là bộ nhớ dùng để lưu giữ chương trình ROM còn dùng để chứa số liệu các bảng, các tham số hệ thống, các số liệu cố định của hệ thống Trong quá trình hoạt động nội dung ROM là cố định, không thể thay đổi, nội dung ROM chỉ thay đổi khi ROM ở chế độ xóa hoặc nạp chương trình
RAM:
RAM là bộ nhớ dữ liệu Bộ nhớ RAM dùng làm môi trường xử lý thông tin, lưu trữ các kết quả trung gian và kết quả cuối cùng của các phép toán, xủa lí thông tin Nó cũng dùng để tổ chức các vùng đệm dữ liệu, trong các thao tác thu phát, chuyển đổi dữ liệu
BUS:
BUS là các đường dẫn dùng để di chuyển dữ liệu Bao gồm: bus địa chỉ, bus
dữ liệu, và bus điều khiển
Bộ định thời: Được sử dụng cho các mục đích chung về thời gian.
Watchdog: Bộ phận dùng để reset lại hệ thống khi hệ thống gặp “bất
thường”
ADC: Bộ phận chuyển tín hiệu analog sang tín hiệu digital Các tín hiệu bên
ngoài đi vào vi điều khiển thường ở dạng analog ADC sẽ chuyển tín hiệu này về dạng tín hiệu digital mà vi điều khiển có thể hiểu được
Các họ vi điều khiển hiện nay:
Trang 4Họ vi điều khiển AMCC (do tập đoàn "Applied Micro Circuits Corporation" sản xuất) Từ tháng 5 năm 2004, họ vi điều khiển này được phát triển và tung ra thị trường bởi IBM
+ 403 PowerPC CPU
+ PPC 403GCX
Họ vi điều khiển Atmel
+ Dòng 8051 (8031, 8051, 8751, 8951, 8032, 8052, 8752, 8952)
+ Dòng Atmel AT91 (Kiến trúc ARM THUMB)
Họ vi điều khiển Cypress MicroSystems
+ CY8C2xxxx (PSoC)
Họ vi điều khiển Freescale Semiconductor Từ năm 2004, những vi điều
khiển này được phát triển và tung ra thị trường bởi Motorola
+ Dòng 8-bit
Họ vi điều khiển Fujitsu
+ F²MC Family (8/16 bit)
+ FR Family (32 bit)
+ FR-V Family (32 bit RISC)
Họ vi điều khiển Intel
+ Dòng 8-bit
Trang 5+ Dòng 16-bit
+ Dòng 32-bit
Họ vi điều khiển Microchip
+ PIC 8-bit (xử lý dữ liệu 8-bit, 8-bit data bus)
+ PIC 16-bit (xử lý dữ liệu 16-bit)
+ PIC 32-bit (xử lý dữ liệu 32-bit): PIC32MX
Trong đó họ vi điều khiển Microchip được ứng dụng phổ biến nhất
2.2 Họ vi điều khiển Microchip (PIC)
PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch là
“máy tính thông minh khả trình” do hãng Genenral Instrument đặt tên cho vi điều khiển đầu tiên của họ: PIC1650 được thiết kế để dung làm các thiết bị ngoại vi cho
vi điều khiển CP1600 Vi điều khiển này sau đó được nghiên cứu phát triển thêm
và từ đó hình thành nên dòng vi điều khiển PIC ngày nay
Hiện nay trên thị trường có rất nhiều họ vi điều khiển như 8051, Motorola 68HC, AVR, ARM… Ngoài họ 8051 được hướng dẫn một cách căn bản ở môi trường đại học, bản thân người viết đã chọn họ vi điều khiển PIC để mở rộng vốn kiến thức và phát triển các ứng dụng trên công cụ này vì các nguyên nhân sau: + Họ vi điều khiển này có thể tìm mua dễ dàng tại thị trường Việt Nam Giá thành không quá đắt
+ Có đầy đủ các tính năng của một vi điều khiển khi hoạt động độc lập
Trang 6+ Là một sự bổ sung rất tốt về kiến thức cũng như về ứng dụng cho họ vi điều khiển mang tính truyền thống: họ vi điều khiển 8051
+ Số lượng người sử dụng họ vi điều khiển PIC Hiện nay tại Việt Nam cũng như trên thế giới, họ vi điều khiển này được sử dụng khá rộng rãi Điều này tạo nhiều thuận lợi trong quá trình tìm hiểu và phát triển các ứng dụng như: số lượng tài liệu, số lượng các ứng dụng mở đã được phát triển thành công, dễ dàng trao đổi, học tập, dễ dàng tìm được sự chỉ dẫn khi gặp khó khăn …
+ Sự hỗ trợ của nhà sản xuất về trình biên dịch, các công cụ lập trình, nạp chương trình từ đươn giản đến phức tạp
+ Các tính năng đa dạng của vi điều khiển PIC, và các tính năng này không ngừng phát triển
2.2.1 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 Von-Neumann và kiến trúc Harvard
Hình 2.1: Kiến trúc Havard và kiến trúc Von-Neuman
Trang 7Tổ 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-Neumann 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-Neumann, 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-Neumann 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-Neumann, độ 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)
RISC và CISC
Như trên, kiến trúc Harvard là khái niệm mới hơn so với kiến trúc Von-Neumann Khái niệm này được cải thiện nhằm cải tiến tốc độ thực thi của 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ủa lí dữ liệu 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 VĐK Và để tiếp tục cải tiến tốc độ thực thi lệnh,
Trang 8tậ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ụ với họ 18Fxxxx chiều dài mã lệnh luôn là 16 bit), và cho phép thực thi trong một chu kỳ 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 xung đồng hồ) Điều này có nghĩa là tập lệnh của VĐK thuộc cấu trúc Harvard sẽ ít lệnh hơn, ngắn hơn, đơn giản hơn để đáp ứng yêu cầu mã hóa lệnh bằng một số lượng bit nhất định
VĐK được tổ chức theo kiến trúc Harvard còn được gọi là vi điều khiển RISC (Reducer Intruction Set Computer) hay là VĐK có tập lệnh rút gọn VĐK được thiết kế theo kiểu kiến trúc Von – Neumann còn được gọi là vi điều khiển CISC (Complex Instruction Set Computer) hay VĐK có tập lệnh phức tạp vì 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)
PIPELINING (xử lý song song)
Đây chính là cơ chế xử lí lệnh của các vi điều khiển PIC Đây là một kỹ thuật làm cho các giai đoạn khác nhau của nhiều lệnh được thi hành cùng một lúc Một chu kỳ lệnh của vi điều khiển sẽ bao gồm 4 xung clock Ví dụ ta sử dụng oscillator có tần số 4MHz thì xung lệnh có tần số là 1 MHz (chu kỳ lệnh là 1ns) Giả sử ta có một đoạn chương trình như sau:
1.MOVLW 55h
2.MOVWF PORTB
3.CALL SUB_1
4.BSF PORTA,BIT3
5.instruction @ address SUB_1
Trang 9Ở đây ta chỉ bàn đến quy trình VĐK xử lí đoạn chương trình trên thông qua từng chu kỳ lệnh quá trình sẽ được thực thi như sau:
Hình 2.2: Cơ chế Pipelining
TCY0: đọc lệnh 1
TCY1: thực thi lệnh 1, đọc lệnh 2
TCY2: thực thi lệnh 2, đọc lệnh 3
TCY3: thực thi lệnh 3, đọc lệnh 4
TCY4: vì lệnh không phải là lệnh sẽ được thực thi theo quy trình thực thi của chương trình (lệnh tiếp theo được thực thi phải là lệnh đầu tiên tại label SUB_1) nên chu trình thực thi của lệnh này chỉ được dùng để đọc lệnh đầu tiên tại label SUB_1 Như vậy có thể xem lệnh 3 cần 2 chu kỳ xung clock để thực thi
TCY5: thực thi lệnh đầu tiên của SUB_1 và đọc lệnh tiếp theo của SUB_1 Quá trình này được thực hiện tương tự cho các lệnh tiếp theo của chương trình
Thông thường để thực thi một lệnh, ta cần một chu kỳ lệnh để gọi lệnh đó, và một chu kỳ xung clock nữa để giải mã và thực thi lệnh Với cơ chế pipelining đưuọc
Trang 10trình bày ở trên, mỗi lệnh xem như chỉ được thực thi trong một chu kỳ lệnh Đối với các lệnh mà quá trình thực thi làm thay đổi giá trị thanh PC (Program Counter) cần hai chu kỳ lệnh để thực thi vì phải thực hiện việc gọi lệnh ở địa chỉ thanh PC chỉ tới Sau khi đã xác định đúng vị trí lệnh trong thanh ghi PC, mỗi lệnh chỉ cần một chu kỳ lệnh
để thực thi xong
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ớ falsh 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:
Trang 11Trướ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
2.2.2 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 …
2.2.3 Mạch nạp
Đâ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 các 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
Trang 12Ngoà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 dung 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ày
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 VĐK 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à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
2.2.4 Vi điều khiển PIC18F4520
Trang 13Bộ điều khiển ghi tắt là Micro-controller là mạch tích hợp trên một chip có thể lập trình được, dùng để điều khiển hoạt động của hệ thống Theo các tập lệnh của người lập trình, bộ vi điều khiển tiến hành đọc, lưu trữ thông tin, đo thời gian
và tiến hành đóng mở một cơ cấu nào đó
Trong các thiết bị điện và điện tử các bộ vi điều khiển điều khiển hoạt động của ti vi, máy giặt, đầu đọc lase, lò vi ba, điện thoại… Trong hệ thống sản xuất tự động, bộ vi điều khiển sử dụng trong robot, các hệ thống đo lường giám sát Các hệ thống càng thông minh thì vai trò của VĐK ngày càng quan trọng Hiện nay trên thị trường có rất nhiều họ VĐK như: 6811 của Motorola, 8051 của Intel, Z8 của Zilog, PIC của Microchip Technology…
Hình 2.3 là vi điều khiển PIC18F4520
Hình 2.3: Vi điều khiển PIC18F4520 (40 chân)
Trong đề tài này em sử dụng PIC18F4520 vì nó có nhiều ưu điểm hơn các loại VĐK khác như: ADC 10 bit, PWM 10 bit, EEPROM 256 byte, COMPARATER … ngoài ra nó còn được các trường đại học trên thế giới đặc biệt