- Chuẩn bị sẵn sàng cho việc lập trình:
- Tạo một dự án mới bằng MPLAB-X:
- Tìm hiểu về Thanh ghi Cấu hình:
- Đặt các bit cấu hình trong MPLAB-X:
- Lập trình PIC để nhấp nháy đèn LED:
- Sơ đồ mạch và mô phỏng Proteus:
Đây là hướng dẫn thứ hai trong Chuỗi Hướng dẫn PIC của chúng tôi. Trong hướng dẫn trước đây của chúng tôi Bắt đầu với Vi điều khiển PIC: Giới thiệu về PIC và MPLABX, chúng tôi đã học những thứ cơ bản về vi điều khiển PIC của mình, chúng tôi cũng đã cài đặt phần mềm cần thiết và mua một bộ lập trình PicKit 3 mới mà chúng tôi sẽ sớm sử dụng. Bây giờ chúng tôi đã sẵn sàng để bắt đầu với Chương trình nhấp nháy đèn LED đầu tiên của chúng tôi bằng cách sử dụng PIC16F877A. Chúng ta cũng sẽ tìm hiểu về Thanh ghi cấu hình trong hướng dẫn này.
Hướng dẫn này hy vọng rằng bạn đã cài đặt phần mềm cần thiết trên Máy tính của mình và bạn biết một số kiến thức cơ bản về PIC MCU. Nếu không, vui lòng quay lại hướng dẫn trước đó và bắt đầu từ đó.
Chuẩn bị sẵn sàng cho việc lập trình:
Vì chúng tôi đã quyết định sử dụng PIC16F877A, với trình biên dịch XC8, hãy để chúng tôi bắt đầu với biểu dữ liệu của họ. Tôi khuyên mọi người nên tải xuống Biểu dữ liệu PIC16F877A và hướng dẫn sử dụng Trình biên dịch XC8, vì chúng tôi sẽ đề cập đến những điều này thường xuyên khi chúng tôi thực hiện qua hướng dẫn của mình. Luôn luôn là một phương pháp hay để đọc toàn bộ Datasheet của bất kỳ MCU nào trước khi chúng ta thực sự bắt đầu lập trình với nó.
Bây giờ, trước khi chúng tôi mở MPLAB-X và bắt đầu lập trình, có một số điều cơ bản mà người ta phải biết. Dù sao, vì đây là chương trình đầu tiên của chúng tôi, tôi không muốn làm các bạn cảm thấy nhàm chán với quá nhiều lý thuyết nhưng chúng tôi sẽ dừng lại ở đây và ở đó khi chúng tôi lập trình và tôi sẽ giải thích cho bạn những điều như vậy. Nếu bạn không có đủ thời gian để đọc hết những thứ này thì chỉ cần nhìn thoáng qua và xem video ở cuối trang.
Tạo một dự án mới bằng MPLAB-X:
Bước 1: Khởi chạy MPLAB-X IDE mà chúng ta đã cài đặt ở lớp trước, sau khi tải xong, nó sẽ trông giống như thế này.
Bước 2: Nhấp vào Tệp -> Dự án mới hoặc sử dụng phím nóng Ctrl + Shift + N. Bạn sẽ nhận được POP-UP sau, từ đó bạn phải chọn Dự án độc lập và nhấp vào Tiếp theo.
Bước 3: Bây giờ chúng ta phải chọn Thiết bị của chúng ta cho dự án. Vì vậy, hãy nhập PIC16F877A qua phần Chọn thiết bị thả xuống. Sau khi hoàn thành, nó sẽ như thế này và sau đó nhấp vào Tiếp theo.
Bước 4: Trang tiếp theo sẽ cho phép chúng ta chọn công cụ cho dự án của mình. Đây sẽ là PicKit 3 cho dự án của chúng tôi. Chọn PicKit 3 và nhấp vào tiếp theo
Bước 5: Trang tiếp theo sẽ yêu cầu chọn trình biên dịch, bạn chọn Trình biên dịch XC8 và bấm tiếp theo.
Bước 6: Trong trang này, chúng ta phải đặt tên cho dự án của mình và chọn vị trí mà dự án đã được lưu. Tôi đã đặt tên Dự án này là Blink và lưu nó trên màn hình của tôi. Bạn có thể đặt tên và lưu nó theo cách bạn thích. Dự án của chúng tôi sẽ được lưu dưới dạng một thư mục với Phần mở rộng .X, có thể được khởi chạy trực tiếp bởi MAPLB-X. Nhấp vào Hoàn tất sau khi hoàn tất.
Bước 7: Vậy là xong !!! Dự án của chúng tôi đã được tạo ra. Cửa sổ bên trái nhất sẽ hiển thị tên dự án (Here Blink), bấm vào đó để chúng ta có thể xem tất cả các thư mục bên trong nó.
Để bắt đầu lập trình, chúng ta cần thêm một tệp C Main, bên trong thư mục tệp Nguồn. Để thực hiện việc này, bạn chỉ cần nhấp chuột phải vào tệp nguồn và chọn New -> C Main File, như thể hiện trong hình dưới đây.
Bước 8: Hộp thoại sau sẽ xuất hiện trong đó tên của tệp C phải được đề cập. Tôi đã đặt tên trong Blink một lần nữa, nhưng sự lựa chọn là do bạn. Đặt tên nó trong cột Tên tệp và nhấp vào kết thúc.
Bước 9: Sau khi C main File được tạo, IDE sẽ mở nó cho chúng ta với một số mã mặc định trong đó, như hình dưới đây.
Bước 10: Vậy là xong, bây giờ chúng ta có thể bắt đầu lập trình mã của mình trong C-main File. Mã mặc định sẽ không được sử dụng trong hướng dẫn của chúng tôi. Vì vậy, hãy xóa chúng hoàn toàn.
Tìm hiểu về Thanh ghi Cấu hình:
Trước khi bắt đầu lập trình bất kỳ Vi điều khiển nào, chúng ta phải biết về các thanh ghi cấu hình của nó.
Vậy các thanh ghi Cấu hình này là gì, làm thế nào và tại sao chúng ta nên đặt chúng?
Các thiết bị PIC có một số vị trí chứa các bit hoặc cầu chì cấu hình. Các bit này chỉ định hoạt động cơ bản của thiết bị, chẳng hạn như chế độ dao động, bộ định thời cơ quan giám sát, chế độ lập trình và bảo vệ mã. Các bit này phải được đặt chính xác để chạy mã nếu không chúng ta có thiết bị không chạy . Vì vậy, điều rất quan trọng là phải biết về các Đăng ký cấu hình này trước khi chúng tôi bắt đầu với Chương trình Blink của mình.
Để sử dụng các thanh ghi Cấu hình này, chúng ta phải đọc qua Biểu dữ liệu và hiểu các loại bit Cấu hình khác nhau có sẵn và chức năng của chúng. Các bit này có thể được đặt hoặc đặt lại dựa trên các yêu cầu lập trình của chúng tôi bằng cách sử dụng một pragma cấu hình.
Pragma có các dạng sau.
#pragma config setting = state-value #pragma config register = value
trong đó cài đặt là bộ mô tả cài đặt cấu hình, ví dụ, WDT, và trạng thái là mô tả dạng văn bản về trạng thái mong muốn, ví dụ: TẮT. Hãy xem xét các ví dụ sau đây.
#pragma config WDT = ON // bật watchdog timer #pragma config WDTPS = 0x1A // chỉ định giá trị postcale của bộ hẹn giờ
THƯ GIÃN!!….. THƯ GIÃN !!…. THƯ GIÃN !!…...
Tôi biết nó đã đi quá nhiều vào đầu của chúng tôi và việc thiết lập các bit Cấu hình này có vẻ hơi khó khăn đối với một người mới !! Nhưng, nó không phải là với MPLAB-X của chúng tôi.
Đặt các bit cấu hình trong MPLAB-X:
Microchip đã làm cho quá trình mệt mỏi này trở nên dễ dàng hơn rất nhiều bằng cách sử dụng các biểu diễn đồ họa của các loại bit Cấu hình khác nhau. Vì vậy, bây giờ để thiết lập chúng, chúng ta chỉ cần làm theo các bước dưới đây.
Bước 1: Nhấp vào Window -> PIC Memory View -> Configuration Bits. Như hình bên dưới.
Bước 2: Thao tác này sẽ mở cửa sổ Configuration Bits ở cuối IDE của chúng tôi như hình dưới đây. Đây là nơi mà chúng ta có thể thiết lập từng bit cấu hình theo nhu cầu của mình. Tôi sẽ giải thích từng bit và mục đích của nó khi chúng ta tiến hành các bước.
Bước 3: Bit đầu tiên là bit chọn dao động.
PIC16F87XA có thể hoạt động ở bốn chế độ dao động khác nhau. Bốn chế độ này có thể được chọn bằng cách lập trình hai bit cấu hình (FOSC1 và FOSC0):
- Tinh thể LP công suất thấp
- XT Crystal / Resonator
- Bộ cộng hưởng / pha lê tốc độ cao HS
- RC Điện trở / Tụ điện
Đối với các dự án của chúng tôi, chúng tôi đang sử dụng Osc 20Mhz do đó chúng tôi phải chọn HS từ hộp thả xuống.
Bước 4: Bit tiếp theo sẽ là Bit Enable Bit hẹn giờ của cơ quan giám sát của chúng ta.
Watchdog Timer là một bộ tạo dao động RC chạy trên chip miễn phí không yêu cầu bất kỳ thành phần bên ngoài nào. Bộ dao động RC này tách biệt với bộ dao động RC của chân OSC1 / CLKI. Điều đó có nghĩa là WDT sẽ chạy ngay cả khi đồng hồ trên các chân OSC1 / CLKI và OSC2 / CLKO của thiết bị đã bị dừng. Trong quá trình hoạt động bình thường, thời gian chờ của WDT sẽ tạo ra Thiết lập lại thiết bị (Thiết lập lại bộ định thời cơ quan giám sát). Bit TO trong thanh ghi Trạng thái sẽ bị xóa khi hết thời gian chờ của Watchdog Timer. Nếu bộ đếm thời gian không được xóa trong mã hóa phần mềm của chúng tôi thì toàn bộ MCU sẽ đặt lại sau mỗi lần tràn bộ hẹn giờ WDT. WDT có thể bị vô hiệu hóa vĩnh viễn bằng cách xóa bit cấu hình.
Chúng tôi không sử dụng WDT trong chương trình của mình, vì vậy hãy xóa nó bằng cách chọn TẮT từ hộp thả xuống.
Bước 5: Bit tiếp theo sẽ là Bit hẹn giờ Power-up.
Bộ hẹn giờ bật nguồn cung cấp thời gian tắt nguồn danh định cố định 72 ms chỉ khi bật nguồn từ POR. Bộ hẹn giờ Powerup hoạt động trên bộ dao động RC bên trong. Chip được giữ ở trạng thái Reset miễn là PWRT còn hoạt động. Độ trễ thời gian của PWRT cho phép VDD tăng lên mức có thể chấp nhận được. Một bit cấu hình được cung cấp để bật hoặc tắt PWRT.
Chúng tôi sẽ không cần sự chậm trễ như vậy trong chương trình của mình, vì vậy hãy TẮT điều đó đi.
Bước 6: Bit tiếp theo sẽ là Lập trình điện áp thấp.
Bit LVP của từ cấu hình cho phép lập trình ICSP điện áp thấp. Chế độ này cho phép lập trình vi điều khiển thông qua ICSP sử dụng nguồn VDD trong dải điện áp hoạt động. Điều này chỉ có nghĩa là VPP không phải được đưa đến VIHH mà có thể để ở điện áp hoạt động bình thường. Trong chế độ này, chân RB3 / PGM được dành riêng cho chức năng lập trình và không còn là chân I / O mục đích chung. Trong quá trình lập trình, VDD được áp dụng cho chân MCLR. Để vào chế độ Lập trình, VDD phải được áp dụng cho RB3 / PGM với điều kiện đặt bit LVP.
Chúng ta hãy tắt LVP để chúng ta có thể sử dụng RB3 làm chân I / O. Để làm điều này, chỉ cần TẮT tính năng này bằng cách sử dụng hộp thả xuống.
Bước 7: Các bit tiếp theo sẽ là EEPROM và các bit Bảo vệ bộ nhớ chương trình. Nếu bit này được bật, khi MCU được lập trình sẽ không có ai truy xuất chương trình của chúng tôi từ phần cứng. Nhưng bây giờ chúng ta hãy để cả ba đều TẮT.
Sau khi cài đặt được thực hiện như hướng dẫn, Hộp thoại sẽ trông giống như thế này.
Bước 8: Bây giờ nhấp vào Generate Source Code to Output, mã của chúng ta sẽ được tạo ngay bây giờ, chỉ cần sao chép nó cùng với tệp tiêu đề và dán vào Blink.c C-File của chúng tôi, như hình dưới đây.
Như vậy là công việc Cấu hình của chúng ta đã xong. Chúng tôi có thể có cấu hình này cho tất cả các dự án của chúng tôi. Nhưng nếu bạn quan tâm, bạn có thể gây rối với chúng sau.
Lập trình PIC để nhấp nháy đèn LED:
Trong chương trình này, chúng ta sẽ sử dụng vi điều khiển PIC để nhấp nháy đèn LED được kết nối với chân I / O. Chúng ta hãy xem xét các chân I / O khác nhau có trên PIC16F877A của chúng tôi.
Như hình trên PIC16F877 có 5 cổng vào / ra cơ bản. Chúng thường được ký hiệu là PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) và PORT E (RE). Các cổng này được sử dụng để giao tiếp đầu vào / đầu ra. Trong bộ điều khiển này, “PORT A” chỉ rộng 6 bit (RA-0 đến RA-5), “PORT B”, “PORT C”, “PORT D” chỉ rộng 8 bit (RB-0 đến RB-7, RC-0 đến RC-7, RD-0 đến RD-7), ”PORT E” chỉ có 3 bit rộng (RE-0 đến RE-2).
Tất cả các cổng này là hai hướng. Hướng của cổng được điều khiển bằng cách sử dụng các thanh ghi TRIS (X) (TRIS A được sử dụng để đặt hướng của PORT-A, TRIS B được sử dụng để đặt hướng cho PORT-B, v.v.). Đặt bit TRIS (X) '1' sẽ đặt bit PORT (X) tương ứng làm đầu vào. Xóa bit TRIS (X) '0' sẽ đặt bit PORT (X) tương ứng làm đầu ra.
Đối với dự án của chúng tôi, chúng tôi phải tạo chân RB3 của PORT B làm đầu ra để đèn LED của chúng tôi có thể được kết nối với nó. Đây là mã cho đèn LED nhấp nháy với vi điều khiển PIC:
#include
Đầu tiên, chúng tôi đã chỉ định tần số Crystal bên ngoài bằng cách sử dụng #define _XTAL_FREQ 20000000. Sau đó, trong hàm void main () , chúng tôi hướng dẫn MCU của mình rằng chúng tôi sẽ sử dụng chân RB3 làm đầu ra (TRISB = 0X00;) . Sau đó, cuối cùng là một vô hạn trong khi vòng lặp được sử dụng để các đèn LED nhấp nháy đi mãi mãi. Để nhấp nháy đèn LED, chúng ta chỉ cần BẬT và TẮT nó với độ trễ đáng kể.
Sau khi mã hóa xong, hãy xây dựng Dự án bằng lệnh Run -> Build Main Project. Điều này sẽ biên dịch chương trình của bạn. Nếu mọi thứ đều ổn (Đúng như bình thường), một Bảng điều khiển đầu ra ở cuối màn hình sẽ hiển thị thông báo XÂY DỰNG THÀNH CÔNG, như trong hình bên dưới.
Sơ đồ mạch và mô phỏng Proteus:
Khi chúng tôi xây dựng Dự án và nếu Xây dựng thành công, tệp HEX sẽ được tạo ở nền IDE của chúng tôi. Tệp HEX này có thể được tìm thấy bên trong thư mục bên dưới
Nó có thể khác nhau đối với bạn nếu bạn đã lưu ở một số vị trí khác.
Bây giờ, chúng ta hãy nhanh chóng mở Proteus mà chúng ta đã cài đặt trước đó và tạo sơ đồ cho dự án này. Chúng tôi sẽ không giải thích về cách thực hiện điều này vì nó nằm ngoài phạm vi của dự án này. Nhưng đừng lo lắng, nó được giải thích trong video dưới đây. Sau khi bạn làm theo hướng dẫn và xây dựng các sơ đồ, nó sẽ trông giống như thế này
Để mô phỏng đầu ra, nhấp vào nút phát ở góc dưới cùng bên trái của màn hình sau khi tải tệp Hex. Nó sẽ nhấp nháy đèn LED được kết nối với RB3 của MCU. Nếu bạn gặp vấn đề gì trong đó hãy xem video, nếu vẫn chưa giải quyết được hãy dùng phần bình luận để được trợ giúp.
Bây giờ chúng tôi đã thực hiện dự án đầu tiên của mình với vi điều khiển PIC và xác minh đầu ra bằng phần mềm mô phỏng. Đi và điều chỉnh xung quanh với chương trình và quan sát kết quả. Cho đến khi chúng ta gặp nhau trong dự án tiếp theo của chúng ta.
Ohh đợi đã !!
Trong dự án tiếp theo của chúng tôi, chúng tôi sẽ học cách làm cho điều này hoạt động trên một phần cứng thực tế. Để làm được điều đó, chúng tôi sẽ cần các công cụ sau để giữ chúng sẵn sàng. Cho đến lúc đó VUI VẺ HỌC TẬP !!
- PicKit 3
- IC PIC16F877A
- 40 - giá đỡ IC
- Bảng Perf
- Tinh thể OSC 20Mhz
- Ghim Bergstick nữ và nam
- Tụ điện 33pf - 2Nos
- Điện trở 680 ohm
- LED của bất kỳ màu nào
- Bộ hàn.