1. Trang chủ
  2. » Giáo án - Bài giảng

Giao trinh PIC18F4550 v1 0

108 280 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 108
Dung lượng 2,92 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Những bộ vi điều khiển mới hiện nay của các hãng như: ATMEL, MOTOROLA, MICROCHIP… Bên trong đã tích hợp nhiều thiết bị ngoại vi như khối ADC, khố PWM, các loại bộ nhớ, bộ đệm, c

Trang 1

CHƯƠNG 1: KHÁI QUÁT VỀ VI ĐIỀU KHIỂN

1.1 SƠ LƯỢC VỀ CẤU TRÚC CỦA VI ĐIỀU KHIỂN

Năm 1971 bộ vi xử lý đầu tiên ra đời đã mở ra một thời đại mới trong công nghệ điện tử và tin học, nó đã ảnh hưởng sâu sắc đến mọi lĩnh vực khoa học công nghệ Các hệ thống được thiết kế dựa trên nền tảng của bộ vi xử lý (điển hình như PC) có khả năng mà các hệ thống điện tử thông thường không thể thực hiện được

Các hãng chế tạo bán dẫn đã tích hợp các mạch ngoại vi và bộ vi xử lý lên một chíp duy nhất (on chíp) để tạo ra các bộ vi điều khiển, để nhằm hạn chế tối đa các linh kiện mắc ngoài khi xây dựng hệ thống có sử dụng vi xử lý, vi điều khiển

Những bộ vi điều khiển mới hiện nay của các hãng như: ATMEL, MOTOROLA, MICROCHIP… Bên trong đã tích hợp nhiều thiết bị ngoại vi như khối ADC, khố PWM, các loại bộ nhớ, bộ đệm, các cổng truyền thông như: 12C, UART, CAN, PSP, USB, khối điều khiển LCD, thậm chí cả các khối thu phát không dây RF Điều này khiến cho việc thực hiện các ứng dụng với vi điều khiển trở nên dễ dàng, giảm được kích thước mạch điện và chi phí

Việc thiết kế và chế tạo ra các bộ xử lý (microprocessor) hiện nay phát triển theo hai hướng chính Hướng thứ nhất là phát triển các bộ xử lý mạnh tốc độ cao thực hiện hàng tỷ lệnh mỗi giây, độ dài từ dữ liệu lớn 32 hoặc 64 bit, truy nhập không gian bộ nhớ đến hàng trăm Mbyte hiện nay đã lên hàng Gbyte Các bộ xử lý này được dùng trong các hệ thống cần có công suất tính toán cao như ở máy tính cá nhân PC (Personal Computer) Các hệ điều khiển trong công nghiệp Hướng thứ hai đó là thiết kế, chế tạo các vi điều khiển (microcontroller), đó là một vi mạch đơn bên trong gồm bộ xử lý 8, 12, 14 hoặc 16 bit và các khối chức năng như bộ nhớ, bộ đệm, bộ biến đổi A/D, cổng nối tiếp… Các vi điều khiển điển hình là intel 8051, ATMEL, AVR, MOTOROLA 68HC11, Microchip Pic… Điều thúc đẩy việc nghiên cứu chế tạo vi điều khiển đó là tính đa dụng, dễ dàng lập trình và giá thành thấp Vi điều khiển tỏ ra rất hấp dẫn trong các ứng dụng điều khiển điện

Trang 2

tử vì có kích thước nhỏ, tuy nhỏ nhưng chức năng cũng rất đa dạng, dễ dàng tích hợp vào trong hệ thống để điều khiển toàn hệ thống

Các thành phần của vi điều khỉên là: CPU, RAM, ROM, các bộ đếm, bộ định thời, các cổng vào ra, giao diện truyền thông nối tiếp, các khối chuyển đổi tương tự số A/D và ngược lại số tương tự D/A Khối xử lý trung tâm CPU thực hiện các chỉ thị được lưu trong bộ nhớ chương trình ROM để điều khiển tất cả các thành phần còn lại Bộ nhớ truy cập ngẫu nhiên RAM được dùng để lưu các thiết lập và các biến sử dụng trong chương trình Chương trình và các số liệu cố định được lưu trong ROM Bộ nhớ ROM của vi điều khiển sẽ trở thành phần sụn (firmware) sau khi được nạp trình Bộ nhớ ROM này có thể là loại ROM mặt nạ (masked ROM), với loại này chương trình được đưa vào ngay trong quá trình chế tạo vi mạch Hay có thể là loại OTP ROM chỉ cho phép nạp chương trình một lần, loại EFROM có thể ghi và xoá nhiều lần bằng tia cực tím, ngoài ra còn loại bộ nhớ nữa là EEFROM là loại bộ nhớ không tự bay hơi có thể được thay đổi dễ dàng bởi người lập trình

Vi điều khiển được sử dụng rộng rãi trong các thiết bị điện tử: chúng có trong các thiết bị viễn thông, máy văn phòng, đồ điện tử gia dụng, đồ chơi trẻ em, thiết bị giải trí Các thiết bị đó nói chung đều cần một cơ cấu điều khiển thông minh, có khả năng tương tác với người sử dụng

Chương trình cho vi điều khiển là một tập các lệnh đã được dịch thành mã máy thường được nạp trực tiếp vào bộ nhớ ROM của vi điều khiển từ máy tính thông qua một

bộ nạp trình Một phía của bộ nạp được nối với cổng máy tính (COM, USB, LPT) để nhận dữ liệu từ máy tính, phía kia đưa dữ liệu tới vi điều khiển thông qua các chân nạp trình của vi điều khiển Các chân này lại là các chân vào ra thông thường sau khi vi đièu khiển đã được nạp chương trình

Các cổng vào ra số cho các dữ liệu nhị phân di chuyển vào ra qua các chân của vi điều khiển Các chân này được dùng để ghép nối vi điều khiển với các thiết bị vào ra số hay ghép nối với các bộ vi điều khiển khác để thực hiện các chức năng nào đó

Trang 3

Cổng truyền thông dữ liệu nối tiếp tạo khả năng giao tiếp của hệ thống với các hệ thống khác qua các chuẩn giao tiếp như: URAT, CAN, 12C, SPI…

Các bộ đếm dùng để tạo ra các nhịp thời gian chính xác hoặc để đếm xung

Khối chuyển đổi A/D cho phép vi điều khiển giao tiếp với các thiết bị điện tử tương

tự như cảm biến tương tự nhờ đó nó có thể đưa các dữ liệu tương tự vào để xử lý và lưu trữ Khối A/D cho phép vi điều khiển điều khiển các thiết bị không tương thích điều khiển

mã lệnh của nó khó nhỏ gọn Những vi điều khiển PIC đầu tiên có điểm yếu là chế tạo theo công nghệ n-MOS nên tiêu thụ nhiều năng lượng, bộ nhớ chương trình là loại ROM mặt nạ chỉ nạp được một lần, do đó chương trình điều khiển được nạp ngay khi chế tạo vi mạch nên chỉ thích hợp với các khách hàng đặt mua với số lượng lớn, để lắp ráp trong sản xuất những sản phẩm cụ thể

Những năm đầu thập kỉ 80 Genneral Instrument gặp khó khăn trong thương mại và

tổ chức lại Hãng tập trung vào chế tạo linh kiện bán dẫn công suát lớn là thế mạnh cho tới hiện nay của hãng Genneral Instrument đã chuyển nhượng Ban vi điện tử và nhà máy tại Chandle, bang Anizona cho các nhà đầu tư Họ lập ra một công ty mới, đặt tên là Arizona Microchip technology hiện nay là Microchip technology Inc

Trang 4

Chiến lược của các nhà đầu tư là tập trung vào vi điều khiển và các bộ nhớ bán dẫn Các vi mạch PIC n-MOS được cải tiến, chế tạo dựa trên nền tảng công nghệ mới CMOS Các sản phẩm đầu tiên của Microchip được biết tới và bán ra với số lượng lớn là các vi điều khiển PIC thuộc họ PIC16C5x Họ này có hai biến thể với bộ nhớ chương trình là OTP và UV EPROM Loại OTP có thể nạp trình một lần dùng cho sản xuất loại lớn Loại

UV EPROM có thể xóa được bằng tia cực tím (tia UV) dùng khi phát triển, thử nghiệm phần mềm

Năm 1983 Microchip là hãng đầu tiên đã tích hợp được bộ nhớ chương trình flash EEPROM vào những vi điều khiển mới, trong đó được biết đến nhiều nhất là PIC 16C84

và PIC16F84 Bộ nhớ chương trình flash đã loại bỏ vai trò của vi điều khiển có bộ nhớ xoá bằng tia cực tím, có vỏ bằng gốm đắt tiền và các đèn chiếu tia cực tím

1.2.2 Phân loại

Tiêu chuẩn để phân nhóm dựa trên sự khác nhau về kiến trúc bộ xử lý bên trong vi điều khiển

 Số các thanh ghi có thể truy cập được

 Có hay không có ngắt, số lượng ngắt

 Số lượng các phần cứng có chức năng đặc biệt

 Độ dài từ lệnh

 Dựa vào những đặc điểm đó vi điều khiển PIC được chia làm 4 họ:

1.2.2.1 Họ cấp thấp (low-end)

Gồm các loại được ký hiệu 12C5xx, 16C5x, 16C505, 16HV540

 Độ dài từ lệnh 12 bit

 Bố chí các thanh ghi: có 32 thanh ghi trên một bank, tối đa có 4 bank

Đặc điểm chung:

 Rất thích hợp trong các ứng dụng giao diện đơn giản với ngoại vi

Trang 5

 Bộ nhớ chương trình kiểu OTP hoặc EPROM xoá được bằng tia cực tím

 Tốc độ cao, thực hiện được 5 triệu chỉ thị/s với tần số xung nhịp 20MHz

 Chỉ có một bộ đếm timer

 Không có các ngắt cứng

 Không có các lối ra tăng cường

 Nạp trình song song, trừ PIC12C5xx và PIC16C505 được nạp trình nối tiếp theo giao thực ICSP

1.2.2.2 Họ cấp trung (Mid-range)

Bao gồm 12C6xx, 14C000, 16C55x, 16C6x, 16C62x, 16F62x, 16C67x, 16C8x, 16F87x và 16C9xx

 Độ dài từ lệnh 14 bit

 Là họ vi điều khiển PIC thông dụng nhất hiện nay

 Bố chí các thanh ghi: 128 byte trên một bank, tối đa 4 bank

 Là vi điều khiển vạn năng tinh năng mạnh

 Có rất nhiều biến thể khắc nhau, với các kiểu đóng vỏ đa dạng: DIP, PLCC, SSOP…

 Đặc điểm:

 Tốc độ cao, thực hiện được 5 triệu chỉ thị /s ở xung nhịp 20MHz

 Có các ngắt phần cứng

 Có từ 1 đến 3 bộ đếm – timer

 Có rất nhiều kiểu khác nhau về chân vào/ra tăng cường bao gồm các vào/ra tương

tự, giao diện truyền thông nối tiếp: đồng bộ, không đồng bộ, 12C, SPI, CAN, USB…, bộ điều khiển LCD

 Bộ nhớ chương trình flash ở hầu hết các vi mạch

Trang 6

 Khả năng nạp trình nối tiếp ICSP

 Có khả năng tự ghi vào bộ nhớ chương trình (self-programming)

 Có phần cứng gỡ rối chương trình ICD ở một số loại

1.2.2.3 Họ cấp cao (High-end) 17Cxxx

 Gồm các loại 17Cxxx

 Độ dài từ lệnh 16 bit

 Bố trí các thanh ghi: 224 byte trên một bank, tối đa 8 bank, 48 thanh ghi chức năng đặc biệt (SFR)

Đặc điểm chung

 Kiến trúc khác so với họ PIC cấp chung, cấp thấp

 Có các lệnh tăng cường và nhiều khả năng định địa chỉ

 Vi điều khiển giao tiếp bus, truy nhập cac thiết bị song song trực tiếp

 Có một số lối vào/ra tăng cường

 Bộ nhớ chương trình OTP

 Nạp trình kiểu song song

1.2.2.4 Họ cấp cao (High- performance)

Gồm những loại có ký hiệu 18Cxxx và 18Fxx2

 Độ dài từ lệnh 16 bit

 Bố trí các thanh ghi 256 byte trên một bank, tối đa có 16 bank

 Đặc điểm chung:

 Kiển trúc nâng cao, dựa trên nền tảng của họ cấp trung, theo xu hướng thừa kế những tính năng của các loại cấp trung đồng thời bổ xung các tính năng mới Do

đó dần dần có khả năng thay thế toàn bộ PIC cấp trung

 Có các lệnh tăng cường và nhiều khả năng định địa chỉ

Trang 7

 Có khả năng truy nhập tới 2Mbyte bộ nhớ chương trình, 4Kbyte bộ nhớ RAM

 Véctơ ngắt đơn, có thể lập trình được mức độ ưu tiên các nguồn ngắt

 Khả năng vào/ra tương tự họ cấp trung

 Tần số hoạt động tối đa 40MHz, có bộ nhân tần số PLL

 Có bộ nhớ chương trình flash

 Nạp trình nối tiếp, có khả năng tự ghi vào bộ nhớ chương trình

Hiện nay mới nhất là DSPIC với nhiều tính năng vượt trội:

Kiến trúc Harvard sửa đổi, 83 lệnh đơn, với chế độ địa chỉ mềm dẻo…

1.2.3 Một số ưu điểm microchip PIC

Bộ nạp trình cho PIC có thể tự lắp ráp một các dễ dàng với chi phí thấp do PIC chủ yếu nạp trình theo chuẩn ICSP (In-Circuit Siral Programming) là phương thức nạp trình nối tiếp: các dữ liệu được nạp vào bộ nhớ chương trình thông qua 2 chân vào/ra được gán

là cổng truy nhập đến bộ nhớ chương trình trong quá trình nạp trình Do đó nhờ có bộ nhớ flash và nạp trình theo chuẩn ICSP mà những người nghiên cứư và sử dụng PICđã tiết kiệm được đáng kể chi phí mua các công cụ nạp Với bộ nhớ flash thì thời gian nạp trình cũng được cải thiện đáng kể (chỉ khoảng vài chục giây) so với UV EPROM (cỡ hơn chục phút)

Microchip cung cấp rất đầy đủ và chi tiết các tài liệu kỹ thuật về tất cả các loại vi điều khiển PIC Ngoài ra còn cung cấp phần mềm công cụ miễn phí MPLAB-IDE được đánh giá là tốt nhất so với các công cụ phát triển tương tự của các hãng sản xuất vi điều khiển khác (các tài liệu công cụ này được cung cấp miễn phí trên www.microchip.com) Ngoài ra còn có rất nhiều sách viết về PIC và các trang web nói về vi điều khiển này Tài liệu hỗ trợ cho vi điều khiển PIC chỉ dùng sau máy tính cá nhân PC và về doanh số bán ra thi trường hiện nay Microchip đã đứng đầu về doanh số bán PIC 8 bit, vượt lên trên cả các vi điều khiển của motorola

1.2.4 Vi điều khiển pic 18f4550

Trang 8

PIC18F4550 là một vi xử lý cơ bản đa chức năng và rẻ Nó là sản phẩm của họ vi xử

lý PIC thông dụng của công ty Microchip của Mỹ có trụ sở đặt tại Chandler, Arizona (Mỹ)

Hình 1.1: PIC18F4550 Điểm riêng biệt của vi xử lý PIC18F4550 là nó là một trong những PIC hỗ trợ toàn thể cho USB, nghĩa là có USB gắn trong có sẵn các chân đầu ra để nối trực tiếp với máy tính mà không cần mạch kéo hay bất cứ mạch gắn ngoài nào khác

Trang 9

Hình 1.2: Giao Tiếp USB

Hỗ trợ tinh thể và dao động ký nhiều tần số như đầu vào và bộ cân bằng nên bộ xử

lý có thể hoạt động với tần số 48 MHz của dao động ký độc lập khi kết nối Khi kết thúc hoạt động thì chỉnh dao động ký được kết nối (thông qua các bit cấu hình) Làm việc với tốc độ 48 MHz là điều kiện tiên quyết để chuyển sang chế độ toàn tốc nhờ cổng USB Vì vậy, driver USB chuyển sang chế độ toàn tốc (1.5 Mbyte/giây) qua USB và tương thích với chuẩn USB 2.0 Nó cũng có 35 chân vào/ra số chung (xem sơ đồ chân ở phần dưới)

và có sẵn vỏ bọc gồm DIP-40 nên rất thuận tiện cho nhà phát triển và những người nghiệp

dư quan tâm

Với bộ nhớ, có 32kb Flash lưu trữ chương trình, 2kb bộ nhớ SRAM bay hơi và 256 byte EEPROM (bộ nhớ không bay hơi) để lưu trữ dài hạn dữ liệu như cấu hình …

Các chỉ thị dài 1 byte với một số ngoại lệ dài 2 byte (CALL, MOVFF, GOTO LSFR) Sử dụng cơ chế đường ống để thực thi mã bằng việc khiến các chỉ thị liên tiếp hoạt động trong 4 xung (độ dài xung) và có 4 lần nhảy xung được thêm vào

Các đặc tính đáng chú ý khác là có đồng hồ, ngắt (đồng hồ gắn trong và gắn ngoài) với hai mức ưu tiên và dùng cả hai mức như bộ so sánh tương tự kèm theo với bộ phát điện thế chuẩn có 16 mức (hữu ích khi dùng trigger ở mức phần cứng)

Trang 10

Cuối cùng, CIP cũng có một bộ chuyển đổi tương tự 10 bit nhưng dao động ký không đủ yêu cầu về tốc độ cao cần thiết Vì vậy, máy phát dao động có tốc độ 48 MHz giữa thời gian trễ do truyền tải và các ngắt khác (vòng lặp …) Không thể đạt được tốc độ lớn hơn 200 kHz

1.2.4.1 Sơ đồ chân

Sau đây là sơ đồ chân của PIC18F4550 trong hộp DIP-40

Đặc biệt, có thể nhận ra chân D- và D+ từ kết nối USB (chân 23 và 24)

Hình 1.3: Sơ đồ chân của PIC18F4550 trong hộp DIP-40

Trang 11

Hình 1.4: TQFP

Hình 1.5: QFN

Trang 12

Bảng 1: Bảng mô tả các chức năng từng chân của PIC18F4550

Trang 13

(tham khảo thêm datasheet)

Trang 14

1.3 HƯỚNG DẪN VDK PIC18F4550 – PHẦN 1: CCS

CCS là phần mềm biên dịch trên nền C CCS có những đặc điểm rất quý giá cho người mới làm quen với lập trình vi điều khiển và những người chuyên về ứng dụng, không cần quan tâm sâu đến cấu trúc, nguyên lý hoạt động của vi điều khiển:

Ngôn ngữ lập trình cấp cao C: dễ học, thân thiện với người dùng

Thư viện có sẵn: CCS có một thư viện rất lớn về các loại PIC, các thiết bị ngoại vi như LCD, EPPROM, USB… Rất dễ dàng sử dụng mà không đòi hỏi khả năng lập trình cao

Các ví dụ mẫu: CCS cũng có một kho ví dụ mẫu rất lớn, đầy đủ Các bạn hoàn toàn

có thể tự học những vấn đề cơ bản đến nâng cao từ những ví dụ này của CCS

Bắt đầu một chương trình với CCS

Phiên bản CCS tôi dùng là 4.106 Những phiên bản khác nhau có thể có những tính năng khác nhau, và một số lệnh sẽ không hoạt động ở phiên bản cũ hơn

Mở chương trình CCS C Compiler ta sẽ thấy giao diện như sau:

Hình 1.6: giao diện chương trình ccs A: Thanh menu và công cụ

B: Chứa các project đã thực hiện

Trang 15

C: Chứa các tệp của project hiện tại

D: Phần chứa code

Để bắt đầu viết một chương trình mới:

Hình 1.7: chọn project mới Trên thanh menu, chọn Project, chọn tab PIC Wizard trên thanh công cụ

Hình 1.8: đặt tên cho project Chương trình sẽ hỏi chọn nơi lưu và yêu cầu đặt tên cho project mới

Ta đặt tên “main” Sau khi chọn save, một form mới sẽ hiện ra:

Trang 16

Hình 1.9: những chức năng chính của chương trình Tab bên trái để chọn cấu hình những chức năng chính

Bên phải là phần tùy chỉnh Sau khi chỉnh xong, ta có thể click vào tab ‘Code’ để xem code của những cấu hình mới vừa cài đặt

Tab General: Tùy chọn những thông số hoạt động chính của PIC

Hình 1.10: chọn loại pic và tần số phù hợp

Trong phần ‘Device’ ta chọn PIC18F4550 và trong phần Freq chọn tần số 48Mhz

Trang 17

Hình 1.11: chọn loại thạch anh phù hợp

Ý nghĩa như sau:

High Speed Crystal/Resonator with PLL enabled: Sử dụng thạch anh tần số cao và

Dùng tùy chỉnh những thông số về giao tiếp của PIC

Trong phần này ta sử dụng giao tiếp RS232

Các thông số thiết lập như hình sau:

Trang 18

Hình 1.12: chọn cổng giao tiếp Hai PIN C6 và C7 thiết lập như hình là các chân giao tiếp RS232 phần cứng của PIC, ngoài ra ta có thể thiết lập thêm các giao tiếp RS232 phần mềm Phần này sẽ đề cập trong phần sau

Tab Timer: Tùy chỉnh về bộ định thời

PIC18F4550 có 3 Timer độc lập nhau là Timer 0, Timer 1, Timer 2

Trong VD này, tôi chọn cấu hình cho Timer 0 và Timer 1 như trên hình:

Hình 1.13: chọn cấu hình timer

Trang 19

Ý nghĩa:

Timer 0 sử dụng nguồn dao động trong của PIC (Lấy từ thạch anh) Thời gian để Timer 0 đếm 1 đơn vị là 0.1us và thời gian để Timer 0 tràn là 5.4ms

Timer 1 sử dùng nguồn dao động trong Thời gian để Timer 1 đếm 1 đơn vị là 0.7us

và thời gian để Timer 1 tràn là 43.6ms

Chú ý: Trong thực tế, độ phân giải t của timer tính như sau: t = 1/(fosc:4)

Với fosc là tần số PIC hoạt động (48Mhz), ta có t=0.083us gần bằng 0.1us

Tuy nhiên với t = 0.1 us, với Timer 16 bit thì thời gian tràn là 0.083us*216=5.4ms Thời gian này là ngắn và không linh hoạt để sử dụng

Do vậy nhà sản xuất đưa vào khái niệm chia tần số Tùy Timer mà sẽ có các mức chia :1, 2, 4, 8, 16 (trên hình được biểu diển là các giá trị tăng dần theo thứ tự 0.1us, 0.2us, 0.3us, 0.7us … Các giá trị này đã được làm tròn)

Với mức chia tần số X lần, thì cứ X xung dao động thì Timer mới đếm lên 1 đơn vị

Ví dụ với bộ chia 4, thì cứ 4 xung lệnh, Timer mới đến thêm 1 đơn vị, nghĩa là thời gian tràn của Timer được tăng lên 4 lần

Tab Analog: Tùy chỉnh về bô ADC

ADC là bộ biến đổi từ tín hiệu điện áp dạng liên tục (Analog – hay tương tự) sang tín hiệu số (rời rạc) bằng cách lấy mẫu

Tầm điện áp hoạt động tối đa của bộ ADC là Vdd (điện áp nuôi PIC hoạt động) Thông thường chọn 0-5V Trong một số trường hơp ta có thể chọn điện áp tối đa nhỏ hơn bằng cách dùng điện áp tham khảo (Vref, thường bằng 3V) để tăng độ phân giải của bộ ADC

Độ phân giải: Bộ ADC của PIC có 2 chế độ hoạt động: 8 bit và 10 bit

Ứng với ADC 10 bit, giá trị nhỏ nhất PIC ghi nhận được là 5000mv/210=5mV

Ta thiết lập các thông số như hình sau:

Trang 20

Hình 1.14: analog pin

Ý nghĩa:

Sử dụng 1 chân ADC là PIN A0

Tầm hoạt động: 0-Vdd (Tương ứng 0-5V)

Sử dụng bộ ADC 10 bit (có 1024 mức lượng tử)

Thời gian lấy mẫu: Từ 2 đến 6 us

Tab Other:

Cho phép tùy chỉnh các thiết lập của bộ CCP (Capture/Compare/PWM)

Phần này sẽ đề cập ở phần sau

Hình 1.15: thiết lập của bộ ccp

Trang 21

Tab Interrupts: Cho phép tùy chỉnh các thiết lập liên quan đến các loại ngắt của PIC

Hình 1.16: các loại ngắt trong interrupts

Gồm:

Các ngắt liên quan đến tràn Timer 0, 1, 2, 3

Ngắt ngoài (External), ngắt thay đổi trên port B

Ngắt khi thực hiện ADC xong

Ngắt liên quan đến truyền nhận dữ liệu (RS232, I2C, SPI…) và một số loại ngắt khác

Trên đây là một số thiết lập cơ bản Ta nhấn Ok

Trong phần Files: ta thấy chỉ có 1 tệp tên là main, và phía bên phải ta thấy phần code hiện ra Tuy nhiên đây không phải là phần code chứa những thông số vừa cài đặt ở những bước trên

Để thấy được file chứa thông số cài đặt này, ta chọn menu ‘Compile’ và chọn công

cụ ‘Build All’ Sau khi Buil, ta được file ‘main.h’ Click mở file này để xem code bên trong

Trang 22

File có đuôi *.h – header: là file chứa các đoạn code có nhiệm vụ cài đặt thông số cho PIC hoạt động File này luôn luôn được #include vào file *.c của project ở dòng đầu tiên

Nếu không muốn sử dụng file h, bạn cần copy toàn bộ các thiết lập trong file *.h và paste vào phần đầu tiên của file *.c

Các bước tôi vừa trình bày ở trên là những bước cơ bản để tạo ra một project mới, và sẽ được áp dụng cho các ví dụ ở sau

Do đó, các phần sau tôi sẽ không trình bày lại những bước này

CẤU TRÚC MỘT CHƯƠNG TRÌNH MẪU:

Mã:

#include “filename.h” //File header

#INT_EXT //Khai báo chương trình ngắt

void isr_EXT() //Chương trình ngắt

{

//Code }

Void ChuongTrinhCon() //Chương trình con

{

//Code }

Void main() //Chương trình chính

{

//Code }

Trang 23

3: Các chương trình con

4: Chương trình chính

1.4 HƯỚNG DẪN VĐK PIC18F4550 – PHẦN 2: NHẤP NHÁY LED ĐƠN

 Mạch hoạt động cơ bản của pic:

Hình 1.17: sơ đồ kết nối cơ bản của pic 18F4550 PIC cần cấp nguồn 5V qua hai chân 11, 32 và nối mass qua hai chân 12, 31 Chân số

1 (Reset) được nối nguồn qua trở 10K, nối mass qua một nút bấm (có thể mắc tụ 104 song song với nút bấm) Chân 13,14 được nối với thạch anh như hình vẽ

Đây là cấu hình cơ bản nhất để PIC có thể hoạt động được Trong các sơ đồ mạch sau, tôi sẽ không thể hiện phần nguồn, thạch anh trên sơ đồ mạch để đơn giản

Chương trình 1: viết chương trình đầu tiên cho pic 18f4550

Chương trình kinh điển mà người mới học vi điều khiển nên thực hiện là làm sáng, tắt 1 con led

Về mặt lý thuyết, điều khiển sáng tắt 1 led, ta có thể điều khiển bật tắt hầu hết mọi thứ

Trang 24

Yêu cầu: Làm sáng, tắt 1 led được kết nối với PIN B0 qua 1 điện trở 220Ω đến 1kΩ

Ta mở file ‘project 1.c’ và viết đoạn code sau vào:

output_high(PIN_D0); //Chân D0 xuất ra mức 1: 5V

delay_ms(1000); //Tạo thời gian chờ 1000ms

output_low(PIN_D0); //Chân D0 xuất mức 0: 5V

Trang 25

while(TRUE){ //code// }: đây là vòng lặp luôn đúng VĐK sẽ chạy các dòng code

từ { đến }, sau đó quay lại từ đầu {

output_high(PIN_Xn) và output_low: Xuất mức 1 hoặc 0 ra một chân nào nó của VĐK, với X là tên port và n là số thứ tự PIN ta muốn xuất ra trong port đó (n=0,1,2, ,7)

Lưu ý: Chỉ những chân có chức năng I/O (Input/Output) thì hai lện trên mới có tác

dụng; nghĩa là những pin đang hoạt động với chức năng khác (VD: RE3-chân reset; RA6,RA7: chân nối thạch anh; RC3,RC4,RC5: các chân chức năng USB của 18F4550 sẽ không có chức năng I/O)

delay_ms(số nguyên): Tạo thời gian chờ VĐK sẽ chỉ chạy tại chỗ đến hết thời gian

chờ đã cài đặt, trong lúc này, VĐK sẽ không thực hiện bất kỳ lệnh nào khác Hàm

“delay_ms” chỉ chạy được khi ta đã khai báo #use delay trước đó Khai báo tần số hoạt

động sai sẽ dẫn đến hàm delay_ms chạy sai

Ngoài delay_ms, còn có các hàm: delay_us (Tạo thời gian chờ micro giây) và delay_cycles (tạo thời gian chờ ứng với số xung lệnh của VĐK)

 Sơ đồ mạch:

Hình 1.18: sơ đồ mạch pic 18F4550 Sau khi nạp và chạy, ta sẽ thấy led nhấp nháy với tần số 0.5hz

Bài tập thực hành:

Trang 26

1 Viết chương trình và chạy: làm led nhấp nháy với tần số 2hz trên Pin B0

2 Viết chương trình và chạy: làm led nhấp nháy nhanh dần rồi chậm dần

1.5 HƯỚNG DẪN VĐK PIC18F4550 – PHẦN 3: NHẤP NHÁY LED TRÊN

PORT D

 Sơ đồ mạch:

Hình 1.19: sơ đồ led kết nối port D của pic

1 Trong CCS ta chọn “Source File”:

Trang 27

Hình 1.20: chọn source file trong ccs Sau đó nhập vào đoạn code dưới đây Theo cách này, ta chỉ cần một header file duy nhất, tiết kiệm thời gian và đảm bảo các cấu hình của các ví dụ đều giống nhau

Trang 29

Ta thấy xuất hiện hàm “output_d(X)” với X là một số 8 bit

Thay vì phải dùng hàm output_high và output_low cho cả 8 pin của port D, ta chỉ cần dùng 1 hàm có thể tác động lên cả 8 pin đó

Ta xét lệnh đầu tiên: output_d(0b00000001); Lệnh này làm PinD0 xuất mức 1 (5V),

các pin còn lại đều là mức 0 Định dạng 0b00000001 là định dạng số nhị phân (00000001,

tương đương số 1 trong hệ thập phân) Số 8 bit này có bit trọng số cao MSB tương ứng PIN D7, trong số thấp LSB tương ứng PIN D0 Ứng với số 1, Pin đó sẽ xuất mức 1, ứng với số 0, pin sẽ xuất mức 0

Ngoài kiểu định dạng là số nhị phân, ta hoàn toàn có thể dùng các định dạng khác: Output_d(0x01); //Số hex

Output_d(1); //Số thập phân

Các cách biểu diễn trên đều có chung một kết quả

Ta có 5 port trên VĐK, nên tương ứng sẽ có:

Cũng tương tự output_high và output_low, hàm này chỉ có tác dụng với những pin

có chức năng I/O

Bài tập thực hành:

1 Viết chương trình và chạy: xuất led sáng dần (từ pin B0 đến pin B7) và tắt dần (B7 đến B0)

2 Viết chương trình và chạy: xuất led sáng xen kẽ chẵn lẻ trên port D

1.6 HƯỚNG DẪN VĐK PIC18F4550 – PHẦN 4:LỆNH INPUT VÀ ĐỌC NÚT NHẤN

 Sơ đồ mạch:

Trang 30

Hình 1.21: sơ đồ kết nối nút nhấn và pic

Ta tạo file c mới tên “bai 3.c” và đưa đoạn code sau vào:

Trang 31

Int1 flag_LED=0; Khai báo biến flag_LED là số số nguyên 1 bit (có giá trị 0 đến 1-

Cần phân biệt với định dạng nhị phân - biểu diễn số qua hai chữ số 0 và 1)

Tương tự, ta sẽ có các kiểu khai báo khác nhau, dùng cho trường hợp biểu diễn số có giá trị lớn hơn:

Int8 //Số nguyên không dấu 8 bit

Trang 32

Signed int32 ////Số nguyên có dấu 32 bit

Set_tris_b(X) với X là số nguyên không dấu 8 bit Hàm này thiết lập các pin trong

port B có chức năng xuất hay nhập Chức năng xuất ta đã khảo sát qua hai chương trình trên Chức năng nhập: kiểm tra mức logic ở một pin nào đó là 0 (0V) hay 1(5V)

Trong đoạn code trên: 0xff =0b11111111

0 =0b00000000

Vị trí Pin nào ứng với số 0 thì có chức năng output, ứng với 1 thì có chức năng input Như vậy trong đoạn code trên, tất cả portB đều có chức năng input, và tất cả portD

có chức năng output

Trong sơ đồ mạch trên, khi không nhấn nút bấm, pin B0 được nối nguồn 5V qua R 10k, do đó giá trị pin B0 lúc này là 1 Khi ấn nút bấm, dòng điện đi từ nguồn qua trở xuống mass, do đó tại pin B0 lúc này có giá trị 0 (0v) Với cách mắc này, ta chỉ cần đọc giá trị pin B0, nếu giá trị này bằng 0 thì phím được nhấn

if(input(PIN_B0)==0): Lệnh so sánh Nếu giá trị pin B0 đọc và bằng 0 thì thực hiện đoạn code trong vòng if{} Ở đây, “a==b” là so sánh bằng, khác với “a=b” là phép gán giá trị b cho a

delay_ms(300): tạo thời gian chờ Thời gian này phải lớn hơn thời gian quá độ của nút bấm

Hình 1.22: hoạt động nút bấm trong sơ đồ

Như hình vẽ, khi ấn nút, điện áp tại B0 sẽ không lập tức chuyển về 0V ngay mà có một khoảng dao động kéo dài trên dưới 100ms Nếu không bỏ qua khoảng thời gian này, VĐK sẽ bị lầm nút bấm được ấn nhiều lần, dẫn đến thực hiện đoạn mã bấm nút nhiều lần

Trang 33

Hiện tượng này gọi là rung phím (dội phím, bật phím ) Thực tế các loại nút bấm bán tại Nhật Tảo đòi hỏi thời gian delay nhiều hơn

Về giải thuật: Khi phím được ấn, biến flag_LED được đảo (lệnh !flag_LED: 0 thành

1 và ngược lại) Biến này có tác dụng báo led đang sáng hay tắt Nếu flag_LED=1, VĐK

sẽ làm sáng led, ngược lại led sẽ được tắt

Đây là một ví dụ cơ bản trong việc dùng cờ báo để viết chương trình

Bài tập thực hành:

1 Viết chương trình và chạy: Nút 1 và 2 được nối vào pin B0 và B1, led 1 và 2 nối vào pin D0 và D1 Nút 1 điều khiển led 1, nút 2 điều khiển led 2 Ấn nút một lần thì led sáng, ấn lần nữa thì led tắt

2 Viết chương trình và chạy: Nút 1 và 2 được nối vào pin B0 và B1, led 1 và 2 nối vào pin D2 và D3 Nút 1 điều khiển led 1, nút 2 điều khiển led 2 Ấn nút

một lần thì led sáng, ấn lần nữa thì led tắt (tương tự bài tập 1)

3 Viết chương trình và chạy: Nút 1 nối vào pin B0; 8 led nối vào port D như chương trình 2 Mỗi lần ấn nút sẽ thay đổi một chế độ sáng led Viết ít nhất 4 chế độ sáng led

4 Viết chương trình và chạy: Nút 1 nối vào pin B0, pin D0 nối với relay như sơ đồ sau Bấm phím để mở đèn, bấm lần nữa để tắt đèn

Hình 1.23: liên kết port và relay

1.7 HƯỚNG DẪN VĐK PIC18F4550 – PHẦN 5: GIAO TIẾP LED 7 THANH

 Sơ đồ mạch:

Trang 34

Hình 1.24: giao tiếp led 7 thanh

2 Trong CCS ta chọn “Source File”:

Hình 1.25: chương trình ccs Sau đó nhập vào đoạn code dưới đây Theo cách này, ta chỉ cần một header file duy nhất, tiết kiệm thời gian và đảm bảo các cấu hình của các ví dụ đều giống nhau

Mã:

#include "main.h"

Trang 35

/*phan cung 3 led 7 thanh*/

#define AK1 PIN_E0

#define AK2 PIN_E1

#define AK3 PIN_E2

int8 dvi,chuc,tram;

int32 a,i,n;

byte const dig[10]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19};

/*chuong trinh giai ma tram - chuc - donvi*/

Trang 37

}

}

}

Đoạn code trên sẽ làm cho 3 led 7 thanh đếm từ 000 đến 999

- Giải thuật của chương trình như sau:

…các hàm for(…), while(…) tôi không giải thích lại nữa

Chương trình trên xuất hiện đoạn code như sau:

// chương trình giải mã đơn vị, chục, trăm void chuyenhex()

{ tram=a/100; // lấy hàng trăm chuc=(a%100)/10; // lấy hàng chục dvi=(a%100)%10; // lấy hàng đơn vị }

Quá trình hiển thị sẽ thực hiện bởi đoạn chương trình:

// chương trình hiển thị kết quả ra 3 led 7 thanh dùng phương pháp quét void hienthi()

{

… } Như vậy muốn hiển thị một số ra led 7 thanh thì công việc đầu tiên ta phải xuất dữ liệu cần hiển thị ra ngõ ra của chip vi điều khiển bằng lệnh output_d(dig[…]);sau đó là cho phép 74ls47 mở xuất dữ liệu giải mã từ 4 (A0 đến A3) thành 7 đường dữ liệu (a\ đến g\) bằng lệnh output_high(CS); công việc cuối cùng là bạn muốn kết quả của mình hiển ra led nào (đơn vị, chục hay trăm) thì cho phép transistor tương ứng dẫn (AK1, AK2, AK3) bằng lệnh output_e(0bXXXXXXXX);

- Một điểm mới trong chương trình này năm ở đoạn code sau:

byte const dig[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};

Trang 38

đây là kiểu khai báo biến cho một mảng hằng số gồm 10 phần tử, một mảng hằng số có kích thước tối đa tùy thuộc từng loại vi điều khiển, riêng đối với dòng PIC18 bạn có thể khai báo thoải mái không giới hạn kích thước

Ví dụ: byte const dig[10]; với byte const là kiểu mảng, dig là tên mảng, 10 số phần

tử mảng

Ý nghĩa: Khai báo một mảng số nguyên gồm 10 phần tử, mỗi phần tử có kiểu byte

Sau khi mảng được khai báo, mỗi phần tử trong mảng đều có chỉ số để tham chiếu Chỉ số bắt đầu từ 0 đến n-1 (với n là kích thước mảng) Trong ví dụ trên, ta khai báo mảng

6 Viết chương trình và chạy: chương trình hiển thị trên 2 led 7 thanh đếm tăng dần từ 00 đến 99 với phần cứng cho như trên

7 Viết chương trình và chạy: chương trình hiển thị trên 3 led 7 thanh đếm giảm dần từ 999 đến 000 với phần cứng cho như trên

1.8 HƯỚNG DẪN VĐK PIC18F4550 – PHẦN 6: GIAO TIẾP MÁY TÍNH QUA CHUẨN RS232

 Sơ đồ mạch:

Trang 39

Hình 1.26: giao tiếp máy tính với pic Tạo file “bai 5.c” và đưa vào đoạn code sau:

Trang 40

Hàm printf() chỉ sử dụng được khi đã có khai báo #use rs232 trước đó Trong header

file main.h ta đã khai báo:

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

Ý nghĩa: Tốc độ truyền: 9600 bps Kiểm tra chẳn lẽ: không Pin truyền: C6, Pin nhận

C7 Đây là các chân ứng với bộ UART cứng của PIC (PIC18F4550) Khuyến khích nên

sử dụng đúng các chân này Ta sẽ nói rõ hơn ở phần ngắt

%u : đây là định dạng để đưa một số int8 lên máy tính (%u: Số nguyên hex không dấu) Nếu có hai biến cần đưa lên máy tính, ta làm như sau:

Printf(“Gia tri = %u %u \n\r”,x,y) //Với x, y là int8 %u thứ nhất tương ứng x, thứ hai tương ứng y Nếu có nhiều hơn hai biến thì vẫn làm tương tự

Ngày đăng: 11/07/2016, 08:57

HÌNH ẢNH LIÊN QUAN

Hình 1.1: PIC18F4550 - Giao trinh PIC18F4550 v1 0
Hình 1.1 PIC18F4550 (Trang 8)
Hình 1.2: Giao Tiếp USB - Giao trinh PIC18F4550 v1 0
Hình 1.2 Giao Tiếp USB (Trang 9)
1.2.4.1. Sơ đồ chân. - Giao trinh PIC18F4550 v1 0
1.2.4.1. Sơ đồ chân (Trang 10)
Hình 1.4: TQFP - Giao trinh PIC18F4550 v1 0
Hình 1.4 TQFP (Trang 11)
Hình 1.17: sơ đồ kết nối cơ bản của pic 18F4550   PIC cần cấp nguồn 5V qua hai chân 11, 32 và nối mass qua hai chân 12, 31 - Giao trinh PIC18F4550 v1 0
Hình 1.17 sơ đồ kết nối cơ bản của pic 18F4550 PIC cần cấp nguồn 5V qua hai chân 11, 32 và nối mass qua hai chân 12, 31 (Trang 23)
Hình 1.19: sơ đồ led kết nối port D của pic - Giao trinh PIC18F4550 v1 0
Hình 1.19 sơ đồ led kết nối port D của pic (Trang 26)
Hình 1.21: sơ đồ kết nối nút nhấn và pic - Giao trinh PIC18F4550 v1 0
Hình 1.21 sơ đồ kết nối nút nhấn và pic (Trang 30)
Hình 1.29: kết nối pic và màng hình  1.9. HƯỚNG DẪN VĐK PIC18F4550 – PHẦN 7: HIỂN THỊ LCD KÍ TỰ 16X2 - Giao trinh PIC18F4550 v1 0
Hình 1.29 kết nối pic và màng hình 1.9. HƯỚNG DẪN VĐK PIC18F4550 – PHẦN 7: HIỂN THỊ LCD KÍ TỰ 16X2 (Trang 43)
Hình 1.31: LCD chế độ 4 bit  Tạo một file tên “lcd_driver.c”, đưa đoạn code sau vào: - Giao trinh PIC18F4550 v1 0
Hình 1.31 LCD chế độ 4 bit Tạo một file tên “lcd_driver.c”, đưa đoạn code sau vào: (Trang 48)
Hình 1.37: pic và LCD  Cũng như LCD ký tự, GLCD cần thư viện điều khiển. Thư viện này CCS đã hỗ trợ  sẵn và sử dụng rất tốt - Giao trinh PIC18F4550 v1 0
Hình 1.37 pic và LCD Cũng như LCD ký tự, GLCD cần thư viện điều khiển. Thư viện này CCS đã hỗ trợ sẵn và sử dụng rất tốt (Trang 68)
Hình 1.44: Mạch sử dụng IC đệm 74HC574 - Giao trinh PIC18F4550 v1 0
Hình 1.44 Mạch sử dụng IC đệm 74HC574 (Trang 89)
Bảng 2: Chế độ điều khiển 1 pha - Giao trinh PIC18F4550 v1 0
Bảng 2 Chế độ điều khiển 1 pha (Trang 91)
Hình 1.47: Mạch sử dụng IC khuếch đại darlington đệm ULN2803 - Giao trinh PIC18F4550 v1 0
Hình 1.47 Mạch sử dụng IC khuếch đại darlington đệm ULN2803 (Trang 95)
Hình 1.49: kết nối mạch nạp với pic - Giao trinh PIC18F4550 v1 0
Hình 1.49 kết nối mạch nạp với pic (Trang 101)
Hình 1.52: Chức năng của jumper trên mạch nạp - Giao trinh PIC18F4550 v1 0
Hình 1.52 Chức năng của jumper trên mạch nạp (Trang 105)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN