You are currently viewing Ghép nối phím bấm với cổng GPIO trên bo mạch FRDM-KL46Z

Ghép nối phím bấm với cổng GPIO trên bo mạch FRDM-KL46Z

1. Giới thiệu

Dòng vi điều khiển Kinetis của Freescale tích hợp sẵn trong mỗi chân cổng các điện trở kéo lên nguồn nuôi và điện trở kéo xuống đất để sử dụng khi chân được cấu hình làm đầu vào. Khi ghép nối vi điều khiển với các phím bấm thì tùy thuộc vào cách chúng ta kết nối phím bấm bên ngoài với chân của vi điều khiển, chúng ta cần kích hoạt điện trở kéo lên hoặc kéo xuống bên trong cho chân đó như chỉ ra trong Hình 3‑17.

FRDM-KL46Z pull-up register

(a)  Sử dụng điện trở kéo lên

FRDM-KL46Z pull-down register

(b)  Sử dụng điện trở kéo xuống

Hình 3‑17. Sơ đồ mạch điện ghép nối phím bấm với vi điều khiển.

Như đã được đề cập ở trên, thanh ghi PORTx_PCRn không chỉ được sử dụng để chọn chức năng I/O cho một chân nhất định mà còn được dùng để chọn cường độ tải và điện trở kéo lên hoặc kéo xuống bên trong của chân đó. Bit D1 cho phép điện trở kéo PE (pull enable) của thanh ghi PORTx_PCRn được sử dụng để bật tùy chọn điện trở kéo bên trong của vi điều khiển. Nếu PE = 1, thì bit chọn loại điện trở kéo PS (Pull Select) được sử dụng để bật tùy chọn điện trở kéo lên hoặc kéo xuống như chỉ ra trong Hình 3‑14 và được minh họa trong Ví dụ 3‑3.

FRDM-KL46Z Pin Configuration

Hình 3‑18. Vai trò của các bit PE và PS trong mạch điện lối vào của một chân vi điều khiển.

Ví dụ 33
Tìm giá trị của các thanh ghi PORTA_PCR1 để thiết lập chân PTA1 làm đầu vào dữ liệu với điện trở kéo lên để ghép nối với một phím bấm bên ngoài.
Đáp án:

MUX = 001, PE = 1, PS = 1

FRDM-KL46Z

2. Lập trình đọc trạng thái phím bấm

      Bo mạch FRDM-KL46Z có sẵn hai phím bấm ký hiệu là SW1 và SW3 dành cho người sử dụng lập trình. Sơ đồ nguyên lý mạch ghép nối các phím bấm tới vi điều khiển và sự sắp xếp các phím bấm trên bo mạch FRDM-KL46Z được chỉ ra trong Hình 3‑19. Trong đó, SW1 được kết nối tới chân PTC3 (tức chân số 3 của cổng PORTC) và SW3 được kết nối tới chân PTC12 (tức chân số 12 của cổng PORTC) như thể hiện trong Bảng 3‑6.

Bạn đọc có thể tìm mua bo mạch ở đây (Đang có chương trình khuyến mại giảm giá 15%).

FRDM-KL46Z Push Buttons FRDM-KL46Z SW1 SW3

Hình 3‑19. Sơ đồ mạch ghép nối các phím bấm trên bo mạch FRDM-KL46Z.

Bảng 3‑6: Ghép nối các chuyển mạch với các chân vi điều khiển [13].

Phím bấm (SWITCH) Chân vi điều khiển KL46Z
SW1 PTC3
SW3 PTC12

      Phần này phát triển thuật toán và chương trình thực hiện đọc trạng thái của phím bấm SW1 và hiển thị trạng thái đó trên LED màu xanh.

      Để đọc phím bấm SW1 trên chân PTC3 và hiển thị trạng thái của nó trên đèn LED màu xanh được kết nối với chân PTD5 chương trình điều khiển cần phải thực hiện theo các bước sau:

1) Cho phép cấp xung nhịp tới cổng PORTD;

2) Thiết lập cấu hình cho thanh ghi điều khiển chân PORTD_PCR[5] để chọn chức năng GPIO cho chân PTD5;

3) Đặt bit số 5 của thanh ghi hướng dữ liệu PDDR của PORTD để thiết lập chân PTD5 làm đầu ra;

4) Cho phép cấp xung nhịp tới cổng PORTC;

5) Thiết lập cấu hình cho thanh ghi điều khiển chân PORTC_PCR[3] để chọn chức năng GPIO cho chân PTC3,

6) Xóa bit số 3 của thanh ghi hướng dữ liệu PDDR của PORTC để thiết lập chân PTC3 làm đầu vào;

7) Đọc trạng thái phím bấm từ PTC3;

8) Nếu trạng thái chân PTC3 ở mức logic cao thì ghi giá trị “1” vào bit số 5 trong thanh ghi đầu ra dữ liệu GPIOD_PDOR để tắt LED;

9) Ngược lại nếu trạng thái chân PTC3 ở mức logic thấp thì ghi giá trị “0” vào bit số 5 trong thanh ghi đầu ra dữ liệu GPIOD_PDOR để tắt LED;

10) Lặp lại các bước từ 7 đến 9.

Chương trình 3‑7 chỉ ra cách thực hiện thuật toán trên bằng ngôn ngữ C.

Chương trình 37: Reading a switch and displaying it on the green LED

/* SW1_gLED.c Read a switch and write it to the LED.
* This program reads an external SW connected to PTC3
* of FRDM-KL46Z board and writes the value to the green LED connected to PTD5.
* When switch is pressed, it connects PTC3 to ground.
* PTC3 pin pull-up is enabled so that it is high when the switch is not pressed.
* LED is on when low.
*/
#include <MKL46Z4.H>
#define GREEN_LED_PIN          (1<<5)
#define SW1_PIN                (1<<3)

int main (void) {
SIM->SCGC5 |= SIM_SCGC5_PORTD_MASK; /* enable clock to Port D */
PORTD->PCR[5] = PORT_PCR_MUX(1); /* make PTD5 pin as GPIO */
PTD->PDDR |= GREEN_LED_PIN; /* make PTD5 as output pin */
SIM->SCGC5 |= SIM_SCGC5_PORTC_MASK; /* enable clock to Port C */
PORTC->PCR[3]= PORT_PCR_MUX(1) | PORT_PCR_PE_MASK | PORT_PCR_PS_MASK;; /* make PTC3 pin as GPIO and enable pull-up resistor */
FPTC->PDDR &= ~SW1_PIN; /* make PTA1 as input pin */
while (1) {
if (PTC->PDIR & SW1_PIN) /* check to see if SW1 is pressed */
    PTD->PSOR |= GREEN_LED_PIN; /* if not, turn off green LED */
else
   PTD->PCOR |= GREEN_LED_PIN; /* turn on green LED */
}
}

Nguyễn Kiêm Hùng

Hung K. Nguyen studied “Electronic Engineering” in both his bachelor’s and master’s degrees at the Vietnam National University, Hanoi, Vietnam. He received the bachelor’s degree in 2003. After receiving his bachelor’s degree, He worked as an internship in the Research Center of Electronics and Telecommunications. In 2006, He received the master’s degree in electronic engineering from VNU University of Engineering and Technology (VNU-UET). Before pursuing his Ph.D’s degree, He worked as a researcher at the Laboratory for Smart Integrated Systems in VNU University of Engineering and Technology for two years. In 2008, He went to Southeast University, Nanjing, China to get his Ph.D degree. He received the Ph.D. degree in Microelectronics and Solid State Electronics from Southeast University in 2013. After got his Ph.D’s degree, He returned to VNU University of Engineering and Technology to continue his research in VLSI design. He works currently as an assistant professor and senior researcher at VNU Key Laboratory for Smart Integrated Systems. His research interests mainly include multimedia processing, reconfigurable computing, and SoC designs.

Trả lời