Giới thiệu vi điều khiển PIC16F877A

0
807

Bộ vi điều khiển PIC16F877A là một trong những bộ vi điều khiển nổi tiếng nhất trong giới kỹ thuật điện tử. Bộ vi điều khiển này có nhiều ưu điểm thuận tiện cho việc sử dụng, lập trình chương trình điều khiển cũng rất dễ dàng.

Một trong các ưu điểm nổi bật là có thể ghi xóa nhiều lần, vì có công nghệ bộ nhớ Flash. Nó có tất cả 40 chân trong đó có 33 chân là I/O. PIC 16F877A được sử dụng nhiều trong các dự án có dùng vi điều khiển PIC.

Giới thiệu vi điều khiển PIC16F877A

Bạn có thể tìm thấy PIC16F877A trên nhiều thiết bị điện tử. Được sử dụng cho các thiết bị điều khiển từ xa, thiết bị bảo mật và an ninh, các thiết bị tự động trong gia đình và một số các thiết bị trong công nghiệp.

Một EEPROM cũng được trang bị cho PIC16F877A giúp lưu trữ một số thông tin vĩnh viễn như mã bộ truyền, tần số bộ nhận và các dữ liệu liên quan khác. Chi phí cho bộ vi điều khiển này thấp.

PIC16F877A hoạt động linh hoạt được sử dụng trong nhiều lĩnh vực mà các vi điều khiển trước đây chưa được sử dụng, ví dụ trong các ứng dụng vi xử lý, chức năng hẹn giờ…

  • Có 35 bộ lệnh
  • Hoạt động với tần số lên đến 20Mhz
  • Điện áp hoạt động từ 4.2V đến 5V. Nếu cấp điện áp vượt quá 5V thì sẽ bị hư.
  • Không có bộ dao động bên trong giống như  PIC18F46K22, PIC18F4550.
  • Dòng điện tối đa trên mỗi PORT khoảng 100mA. Do vậy, dòng điện tối đa cho mỗi chân GPIO của PIC 16F877A là 10mA
  • Có 4 package: PDIP 40 chân, PLCC 44 chân, TQFP 44 chân, QFN 44 chân

Mô tả cấu hình chân vi điều khiển PIC16F877A

Như đã trình bày ở phần trên, PIC16F877A có 40 chân. Có 2 bộ định thời 8 bit và một bộ định thời 16 bit. Module capture và so sánh, cổng nối tiếp, cổng song song và năm cổng I/O cũng được tích hợp bên trong. Hình dưới đây là cấu hình chân của PIC 16F877A

Mô tả cấu hình chân vi điều khiển PIC16F877A

  • Chân 1: MCLR là chân clear của mạch này. Nó sẽ khởi động lại vi điều khiển và được kích hoạt bởi mức logic thấp, có nghĩa là chân này phải được cấp liên tục một điện áp 5V và nếu cấp điện áp 0V thì PIC16F877A sẽ bị đặt lại.

Mô tả cấu hình chân vi điều khiển PIC16F877A

  • Một nút nhấn và một điện trở được kết nối đến chân này. Chân MCLR này luôn được cấp điện áp 5V. Khi muốn khởi động lại mạch. Bạn chỉ cần nhấn vào nút nhấn thì chân MCLR sẽ được đưa về 0 và mạch được đặt lại.
  • Chân 2 RA0/AN0: PORT A có 6 chân, từ chân số 2 đến chân số 7. Tất cả đều là các chân xuất, nhập dữ liệu hai chiều. Chân số 2 là chân đầu tiên của PORT A. Chân này có thể được sử dụng như một chân tương tự (analog) chân AN0. Nó được tích hợp bộ chuyển đổi analog sang digital.
  • Chân 3 RA1/AN1: Đầu vào tín hiệu analog 1
  • Chân 4 RA2/AN2/Vref-: Có thể hoạt động như đầu vào analog thứ 2 hoặc chân điện áp tham chiếu âm.
  • Chân 5 RA3/AN3/Vref+: Có thể hoạt động như đầu vào analog thứ 3 hoặc chân điện áp tham chiếu dương.
  • Chân 6 RA0/T0CKI: Với timer 0, chân này hoạt động được như một đầu vào xung clock và đầu ra open drain.
  • Chân 7 RA5/SS/AN4: Có thể hoạt động như một đầu vào analog thứ 4. Có cổng nối tiếp đồng bộ và là chân SS cho cổng này.
  • Chân 8 RE0/RD/AN5: PORT E bắt đầu từ chân số 8 đến chân số 10 và là cổng I/O hai chiều. Nó còn là cổng analog thứ 5 hoặc là chân RD (tích cực mức logic thấp) cho cổng slave giao tiếp song song 
  • Chân 9 RE1/WR/AN6: Là đầu vào analog thứ 6 và là chân WR (tích cực mức logic thấp) cho cổng slave giao tiếp song song.
  • Chân 10 RE2/CS/A7: Là đầu vào analog 7 và là chân CS cho cổng slave song song.
  • Chân 11 và 32 VDD: Đây là hai chân cấp nguồn 5V.
  • Chân 12 và 31 VSS: Các chân tham chiếu nối đất cho I/O và các chân logic. Chúng nên được nối với 0V hoặc mắc GND.
  • Chân 13 OSC1/CLKIN: Là đầu vào bộ dao động hoặc chân đầu vào xung nhịp bên ngoài.
  • Chân 14 OSC2/CLKOUT: Đây là chân đầu ra của bộ dao động. Một bộ dao động thạch anh được nối vào giữa hai chân 13 và 14 để cấp xung nhịp bên ngoài cho bộ vi điều khiển. ¼ tần số của OSC1 được OSC2 xuất ra trong chế độ RC. Điều này xác định tốc độ chu kỳ xử lý lệnh.

Mô tả cấu hình chân vi điều khiển PIC16F877A hình 3

  • Chân 15 RC0/T1OCO/T1CKI: PORT C có 8 chân. Là cổng I/O hai chiều. Trong số đó, chân 15 là chân đầu tiên. Nó có thể là đầu vào xung nhịp của bộ định thời 1 hoặc đầu ra bộ dao động của bộ định thời 2.
  • Chân 16 RC11/T1OSI/CCP2: Là đầu vào dao động của bộ định thời 1 hoặc đầu vào capture 2 / đầu ra so sánh 2 / đầu ra PWM 2.
  • Chân 17 RC2/CCP1: Đầu vào capture 1/ đầu ra so sánh 1/ đầu ra PWM1
  • Chân 18 RC3/SCK/SCL: Đầu ra của chế độ SPI hoặc I2C và có thể là I/O cho bộ dao động nối tiếp đồng bộ.
  • Chân 23 RC4/SDI/SDA: Chân dữ liệu trong chế độ SPI hoặc là chân xuất nhập dữ liệu chế độ I2C.
  • Chân 24 RC5/SDO: Là chân xuất dữ liệu chế độ SPI.
  • Chân 25 RC6/TX/CK: Có thể là chân xung clock đồng bộ hoặc chân truyền không đồng bộ UART.
  • Chân 26 RC7/RX/DT: Là chân dữ liệu đồng bộ hoặc chân nhận tín hiệu UART.
  • Các chân 19, 20, 21, 22, 27, 28, 29, 30: Tất cả các chân này đều thuộc PORT D, đây là một cổng I/O hai chiều. Khi bus vi xử lý được kết nối, nó có thể hoạt động ncho cổng slave giao tiếp dữ liệu song song.
  • Chân 33-40 PORT B: Hai chân này đều thuộc PORTB. Trong đó RB0 có thể được sử dụng làm chân ngắt ngoài và RB6 và RB7 có thể được sử dụng làm chân debugger.

Lưu ý : Tất cả các chân có nhiều chức năng. Giống như các chân PORT C có thể được sử dụng làm chân I/O digital, cho giao tiếp UART, giao tiếp I2C. Tuy nhiên, chúng ta có thể sử dụng một chức năng của mỗi cổng tại một thời điểm hoặc bạn phải lập trình nó sao cho bạn có thể chuyển đổi giữa các chức năng khác nhau. Giống như một khi bạn cần một chân để đọc tín hiệu tương tự (analog), sau đó chuyển sang các chức năng khác như đầu ra digital, v.v. Đối với người mới bắt đầu, bạn nên sử dụng một chân cho một chức năng và có thể sử dụng chế độ đa chức năng, một khi bạn đã thành thạo trong lập trình.

Cách lập trình cổng I/O

  • Như đã biết về 5 cổng đầu vào và đầu ra là PORTA, PORTB, PORTC, PORTD và PORTE, chúng có thể là cổng tín hiệu digital hoặc analog.
  • Cấu hình chúng theo yêu cầu của bạn. Nhưng trong chế độ analog, các chân hoặc cổng chỉ có thể hoạt động ở đầu vào để làm bộ chuyển đổi analog sang digital. Các mạch ghép kênh cũng có thể được sử dụng.
  • Ở chế độ digital, sẽ không có hạn chế. Có thể cấu hình các cổng làm đầu ra hoặc đầu vào, thực hiện thông qua lập trình. Đối với PIC, trình biên dịch thích hợp nhất là mikro C pro, bạn có thể tải xuống từ trang web của hãng.
  • Có một thanh ghi gọi là ‘TRIS’ điều khiển hướng của các cổng. Đối với các cổng khác nhau có các thanh ghi khác nhau như TRISA, TRISB, v.v.
  • Nếu chúng ta đặt một bit của thanh ghi TRIS bằng 0, bit cổng tương ứng sẽ đóng vai trò là đầu ra digital.
  • Nếu chúng ta đặt một bit của thanh ghi TRIS thành 1, bit cổng tương ứng sẽ đóng vai trò là đầu vào digital.
  • Ví dụ để thiết lập toàn bộ port B là đầu ra, chúng ta có thể viết câu lệnh chương trình như sau:

TRISB=0;

  • Bây giờ cổng B sẽ hoạt động như cổng đầu ra và chúng ta có thể gửi bất kỳ giá trị nào ra đầu ra, chẳng hạn như:

PORTB=0XFF;

  • FF là giá trị hệ nhị phân là 11111111H, lúc này tất cả các chân của cổng B đều ở mức logic cao. Nếu chúng ta kết nối đèn LED ở tất cả các chân này thì tất cả sẽ phát sáng.
  • Nếu muốn đảo các giá trị của cổng B, chúng ta có thể sử dụng câu lệnh:

PORTB=~PORTB;

  • Bây giờ tất cả các chân của cổng B đều ở mức logic thấp.

Trình biên dịch cho vi điều khiển PIC16F877A

  • Ba trình biên dịch phổ biến được sử dụng để lập trình vi điều khiển pic là MPLAB XC8, Mikro C cho pic, trình biên dịch PIC CCS và trình biên dịch Hi-Tech.
  • Trình biên dịch chính thức là trình biên dịch MPLAB XC8 nó được phát triển bởi chính các nhà sản xuất PIC16F877A.
  • Bạn nên sử dụng trình biên dịch Mikro C cho pic khi mới bắt đầu và trình biên dịch MPLAB XC8 cho những ai muốn học lập trình vi điều khiển pic từ các khái niệm về cấu trúc phần cứng thanh ghi.
  • Bạn có thể xem qua bài viết danh sách các trình biên dịch vi điều khiển pic ở đây.

Các tính năng chính của vi điều khiển PIC16F877A

Giống như tất cả các vi điều khiển khác, PIC16F877A cũng cung cấp các tính năng hữu ích được tích hợp sẵn như được đề cập trong danh sách sau:

  • Module chuyển đổi analog sang digital:  Có module ADC 8 bit có 8 kênh. Chúng ta có thể sử dụng 8 cảm biến analog với bộ vi điều khiển này.
  • Timers : Có ba bộ định thời là timer0, timer1 và timer2. Tất cả các timer này có thể được sử dụng ở chế độ định thời hoặc ở chế độ đếm. Các bộ định thời được sử dụng để tạo độ trễ, điều chế độ rộng xung, đếm các sự kiện bên ngoài và ngắt bộ định thời. TIMER0 là bộ định thời 8 bit và có thể hoạt động với tần số xung nhịp bên trong hoặc bên ngoài. Khi sử dụng Timer0 ở chế độ định thời, chúng ta thường sử dụng tần số bên trong và ở chế độ bộ đếm, chúng ta nên sử dụng nguồn xung nhịp bên ngoài. Tương tự, TIMER1 là bộ định thời 16 bit và nó cũng có thể hoạt động ở cả hai chế độ. TIMER2 cũng là 8-bit. Nó còn được sử dụng với chế độ PWM làm cơ sở thời gian cho module CCP.
  • EEPROM:  Được tích hợp cho module với 256 x 8 byte có thể được sử dụng để lưu trữ dữ liệu ngay cả khi bộ vi điều khiển bị tắt, dữ liệu sẽ không mất đi. Nó thường được sử dụng với các dự án liên quan đến electronics lock.
  • Module PWM: Có 2 module CCP. CCP là viết tắt của cụm từ capture compare PWM. Có thể dễ dàng tạo ra hai tín hiệu PWM với bộ vi điều khiển này. Độ phân giải tối đa 10 bit. Có thể tham khảo hướng dẫn sử dụng PWM trong vi điều khiển PIC16F877A để biết thêm thông tin và lập trình.
  • Chân giao tiếp nối tiếp UART : Hỗ trợ một kênh UART. Chân UART được sử dụng để giao tiếp nối tiếp giữa các thiết bị digital. Chân RC7 (chân 26) là chân phát tín hiệu hoặc chân RX. RC6 (chân 25) là chân thu tín hiệu hoặc chân Tx. Để biết thêm chi tiết, hãy xem hướng dẫn về giao tiếp nối tiếp vi điều khiển pic16f877a .
  • Giao tiếp I2C : Có module giao tiếp I2C. Chân 18/RC3 và 230/RC4 lần lượt là chân SCL và SDA. SCL là đầu cấp xung nhịp và SDA là đường dữ liệu nối tiếp.  Hướng dẫn giao tiếp I2C sẽ giúp bạn hiểu sâu hơn.
  • Ngắt : Ngắt có nhiều ứng dụng tuyệt vời trong lĩnh vực hệ thống nhúng. Vi điều khiển PIC16F877A cung cấp 8 loại ngắt là: Ngắt ngoài, ngắt bộ định thời, ngắt thay đổi trạng thái PORT, ngắt UART, ngắt I2C, PWM. bạn có thể đọc hướng dẫn này về ngắt vi điều khiển pic để biết thêm thông tin.
  • Module so sánh: Có một module so sánh bao gồm hai trình so sánh. Được sử dụng để so sánh các tín hiệu analog giống như bộ so sánh trong các mạch điện tử. Các chân đầu vào cho các bộ so sánh này là RA0, RA1, RA2 và RA3 và đầu ra là RA4 và RA5.
  • Bộ định thời watchdog: WDT là một bộ dao động riêng trên chip chạy tự do. Nó là một bộ dao động riêng biệt từ chân OSC1/CLKI. WDT cũng sẽ hoạt động ngay cả khi thiết bị ở chế độ ngủ. Được sử dụng để khởi động thiết bị từ chế độ ngủ và thiết lập lại bộ đếm thời gian watchdog.
  • Chế độ ngủ: PIC16F877A có chế độ ngủ. Ở chế độ này, thiết bị hoạt động ở mức công suất rất thấp. Tất cả các thiết bị ngoại vi sử dụng một dòng điện tối thiểu. Khởi động từ chế độ ngủ trong ngắt như ngắt timer1, ngắt uart, khi hoàn thành ghi EEPROM và nhiều thao tác khác.
  • Phát hiện brownout: Có một mạch phát hiện sự sụt giảm điện áp cung cấp. Nếu điện áp cung cấp giảm từ một giới hạn nhất định, nó sẽ tạo ra tín hiệu ngắt. Bit cấu hình này (BODEN) được sử dụng để tắt hoặc bật tính năng này.
  • Reset brownout: Tùy chọn này đặt lại thiết bị khi phát hiện sụt áp từ tín hiệu BODEN. Nếu điện áp cung cấp thấp hơn ngưỡng hơn 100 micro giây, code bảo vệ có thể lập trình, thiết lập lại sụt áp sẽ xảy ra và thiết bị sẽ vẫn được đặt lại cho đến khi điện áp tăng đến giá trị định mức. Thiết bị kiểm tra điện áp sau mỗi 72ms.

Một số tính năng quan trọng khác:

  • Bật nguồn khởi động lại
  • Nhiều bộ dao động
  • Debugger trong mạch
  • Lập trình giao tiếp nối tiếp trong mạch
  • Lập trình ICSP điện áp thấp

Lập trình làm sáng/nhấp nháy led

Đây là hướng dẫn đơn giản về cách nhấp nháy đèn LED với vi điều khiển PIC16F877A. Sử dụng Mikro C làm trình biên dịch pic để viết code này. Nếu bạn mới bắt đầu lập trình vi điều khiển pic, bạn có thể xem hướng dẫn sau với Mikro C:

  • Viết chương trình đầu tiên với Mikro C cho trình biên dịch pic 
  • Lập trình c vi điều khiển Pic bằng Mikro c
void main()

 {

   TRISB.F0 = 0  // the direction of RB0 is set as output

              //or TRISB = 0xFE (0xFE = 11111110)

   do // setting the infinite loop

      {

        PORTB.F0 = 1; // setting the RB0 pin to high

        Delay_ms(500); // delay of 500 milli seconds

        PORTB.F0 = 0; // setting the RB0 pin to low

        Delay_ms(500); // again a delay of 500 milli seconds

     }while(1);

 }

 

Code này được sử dụng để gán chân 0 của PORT C với độ trễ 500ms. Bên trong chức năng chính, lệnh dưới đây khởi tạo RB0 là chân đầu ra digital.

TRISB.F0 = 0

Bên trong vòng lặp do while, dòng này làm cho giá trị của RB0 cao trong 500ms.

PORTB.F0 = 1; // setting the RB0 pin to high

Delay_ms(500); // delay of 500 milli seconds

Tương tự dòng này là tắt LED trong 500ms

PORTB.F0 = 0; // setting the RB0 pin to low

Delay_ms(500); // again a delay of 500 milli seconds

Sơ đồ kết nối mạch nhấp nháy LED dùng PIC 16F877A

Sơ đồ kết nối mạch nhấp nháy LED dùng PIC 16F877A

  • Thiết kế mạch này trong phần mềm proteus. Kết nối các chân với nguồn, đất và bộ dao động như đã giải thích ở các phần trên
  • Kết nối bộ dao động 8MHz với OSCI và OSC2 thông qua hai tụ điện 22 pF.
  • Câp nguồn 5V cho chân Reset thông qua điện trở 10k ohm. Điện trở không được hiển thị trong mô phỏng, nhưng bạn nên kết nối điện trở trong khi tạo mạch thực tế.
  • Một đèn LED được kết nối trên chân 33 RB0, một điện trở được sử dụng để hạn chế dòng điện và ngăn đèn LED không bị cháy. Viết và biên dịch chương trình trong mikro C pro.
  • Nạp chương trình vào bộ vi điều khiển với tệp hex bằng cách nhấp đúp vào bộ điều khiển trong proteus và chạy mạch thành công. Cách tốt nhất để học bất kỳ vi điều khiển nào là kiểm tra bảng dữ liệu.
  • Pic kit3 dùng để nạp chương trình cho mạch,  cách lập trình bằng Pic kit3 là một nguồn tốt để học.

>>> Mời anh em xem thêm

Tôi là một người làm việc trong lĩnh vực cơ khí, thiết bị công nghiệp....Blog là nơi tôi chia sẻ thông tin hữu ích đến các bạn đọc.
Subscribe
Notify of
0 Bình luận
Inline Feedbacks
View all comments