Giao tiếp PS2 với bàn phím

Một phần của tài liệu HƯỚNG DẪN SỬ DỤNG KIT 8051 (Trang 85 - 90)

Mục đích:

Nắm vững giao tiếp PS2 với bàn phím.

Yêu cầu:

Hiện thực chương trình giao tiếp với bàn phím, hiển thị kí tự được nhấn ra ma trận led .

13.1 Nguyên lý giao tiếp PS2

Dữ liệu trong giao tiếp PS2 cũng được truyền nối tiếp từng bit như uart. Khi 1 phím được nhấn, 11 bit bao gồm Start bit, 8 bit dữ liệu (bit trọng số thấp truyền trước), 1 bit parity và 1 stop bit sẽ được gửi đi :

Ta sẽ lấy dữ liệu tại cạnh xuống của clock, chân của clock được nối vào chân ngắt ngoài 1 của vi điều khiển (P3.3) như sau:

P3.4 kb_Data kb_Clock R3 22K R4 22K VCC P3.3 kb_Clock VCC J3 PS/2 CIR 7-R 1 2 3 4 5 6 7 kb_Vcc VCC kb_Ground kb_Shield kb_Data

Khi 1 phím được nhấn xuống, mã make_code sẽ được gửi lên. Trong khoảng thời gian phím đó được đè xuống thì mã make_code vẫn được định kì gửi lên. Khi thả phím ra thì bàn phím gửi lên mã break_code và make_code.

Dễ dàng nhận ra mã break_code của 1 phím gồm 0xF0 và mã make_code của phím đó.

13.2 Kết nối phần cứng

Chân clock của bàn phím nối với P3.3. Chân data từ bàn phím nới với P3.4.

BKIT HARDWARE CLUB www.bkit4u.com 87

13.3 Viết chương trình

Phần chính của bài thực hành này là lấy cho được dữ liệu truyền lên từ bàn phím. Q trình dịch từng bit để lấy data 8 bit trong chuỗi 10 bit được hiện thực trong hàm phục vụ ngắt ngồi 1. DATA chính là chân P3^4

void ext1_isr() interrupt 2 {

count_bit_input++;

if(count_bit_input == 1) //start to get data scan_code = 0x00;

// getting data when the key pressed // ignore start bit, parity bit and stop bit // just getting 8 data bits

if(count_bit_input > 1 && count_bit_input < 10) { scan_code >>= 1; if(DATA) scan_code |= 0x80; } if(count_bit_input > 10) {

//Add your code here

count_bit_input = 0; //reset }

}

Biến count_bit_input dùng để đếm số bit gửi về, khi count_bit_input = 11 ta sẽ

có được dữ liệu scan_code từ bàn phím truyền lên. Bạn sẽ phải xử lý để phân loại đây là mã make_code hay break_code, có được nhấn kèm với phím shift hay caps lock hay

không để chuyển sang mã ascii cho kí tự được nhấn. Chi tiết code bạn xem thêm trong

Bài 14 : PWM điều khiển motor

Mục đích:

Nắm vững kĩ thuật điều xung PWM.

Yêu cầu:

Viết ứng dụng điều khiển motor chạy ở nhiều tốc độ khác nhau.

14.1 Khái niệm PWM

PWM viết tắt của từ Pulse Width Modulation. PWM được sử dụng nhiều trong hệ thống điều khiển tự động ngày nay. Nó được ứng dụng trong điều khiển tốc độ động cơ, độ sáng tối của led, màn hình LCD, pha màu cho bang quang báo, sử dụng trong các thuật toán điều khiển vận tốc cho Robot như PI, PD, PID …

Hiểu đơn giản PWM hoạt động như một cơng tác đóng mở rất nhiều lần trong 1 giây. Nếu tần số đóng mở càng nhanh thì điện áp cấp trung bình càng lớn.

Một số khái niệm cơ bản của PWM :

v Tần số (Hz, Khz…).

v Chu kỳ T, thời gian xung mức cao TH + thời gian xung mức thấp TL.

v Duty Cycle: tỉ lệ thời gian xung mức và thời gian xung mức thấp. Như hình trên ta có Duty Cycle lần lượt là 0%, 25%, 50%, 75%, 100%. Một số công thức :

BKIT HARDWARE CLUB www.bkit4u.com 89

Chu kì : TTotal = TOn + TOff Duty Cycle : D = TOn/TOff Volt Output : V = Vinput x D

Khi đó nếu TOn = 0 thì VoltOutput = 0 (V) cịn TOn = TTotal thì VoltOutput = VoltInput . Trong thực tế ta có IC chuyên dụng để dùng cho việc điều xung và có các vi điều khiển có tích hợp sẵn PWM bên trong. Vi điều khiển 89V51 hỗ 5 kênh điều xung (P1.3 – P1.7) được sử dụng khá linh hoạt cho việc điều xung, người dùng chỉ cần ghi giá trị thích hợp vào các thanh ghi để có được tín hiện PWM mong muốn.

14.2 Lập trình PWM trên 89V51

Khởi tạo 5 kênh điều xung như sau:

void initPWM() {

CCAPM0 = 0x42; //set P1.3 pwm mode CCAPM1 = 0x42; //set P1.4 pwm mode CCAPM2 = 0x42; //set P1.5 pwm mode CCAPM3 = 0x42; //set P1.6 pwm mode CCAPM4 = 0x42; //set P1.7 pwm mode

CMOD = 0x00; // setup to devide frequency by 6 CCAP0H = 0xff;

CCAP1H = 0xff; CCAP2H = 0xff; CCAP3H = 0xff; CCAP4H = 0xff;

CCON |= (1<<6); // set registry PCA }

Sau khi khởi tạo, mức điện áp ở 5 chân điều xung là 0V. Muốn thay đối giá trị điện áp ta chỉ cần thay đối nội dung trong thanh ghi CCAPnH, 0x00 tương ứng với 100% duty cycle, 0xFF tương ứng với 0% duty cycle. Motor được nối với P1.3 tương ứng với kênh điều xung 0. Motor được tích cực mức 0 nên giá trị trong thanh ghi CCAP0H càng lớn thì motor quay càng chậm (duty cycle nhỏ thì motor quay nhanh).

Một phần của tài liệu HƯỚNG DẪN SỬ DỤNG KIT 8051 (Trang 85 - 90)

Tải bản đầy đủ (PDF)

(110 trang)