- Vật liệu cần thiết
- Hiểu về mô-đun cần điều khiển:
- Sơ đồ mạch:
- Lập trình giao diện các phím điều khiển:
- Chế độ xem mô phỏng:
- Phần cứng và Làm việc:
Thiết bị đầu vào đóng một vai trò quan trọng trong bất kỳ dự án điện tử nào. Thiết bị đầu vào này giúp người dùng tương tác với thế giới kỹ thuật số. Một thiết bị đầu vào có thể đơn giản như một nút nhấn hoặc phức tạp như một màn hình cảm ứng; nó thay đổi dựa trên yêu cầu của dự án. Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách giao diện cần điều khiển với bộ vi điều khiển PIC của chúng ta, cần điều khiển là một cách thú vị để tương tác với thế giới kỹ thuật số và hầu như mọi người đều đã sử dụng cần điều khiển để chơi trò chơi điện tử ở độ tuổi thanh thiếu niên.
Cần điều khiển có vẻ là một thiết bị tinh vi, nhưng thực chất nó chỉ là sự kết hợp của hai chiết áp và một nút nhấn. Do đó, cũng rất dễ dàng giao tiếp với bất kỳ MCU nào miễn là chúng ta biết cách sử dụng tính năng ADC của MCU đó. Chúng tôi đã học cách sử dụng ADC với PIC, do đó nó sẽ chỉ là một công việc xoay quanh việc giao tiếp với Cần điều khiển. Đối với những người mới làm quen với pickit, nên tìm hiểu dự án ADC ở trên cũng như Dự án trình tự nhấp nháy đèn LED để dễ hiểu hơn về dự án.
Vật liệu cần thiết
- PicKit 3 để lập trình
- Mô-đun Joy Stick
- IC PIC16F877A
- 40 - Giá đỡ IC chân
- Bảng Perf
- OSC tinh thể 20 MHz
- Ghim Bergstik
- Điện trở 220ohm
- 5 đèn LED màu bất kỳ
- 1 bộ hàn
- IC 7805
- Bộ chuyển đổi 12V
- Kết nối dây
- Breadboard
Hiểu về mô-đun cần điều khiển:
Cần điều khiển có nhiều hình dạng và kích cỡ khác nhau. Một mô-đun Joystick điển hình được hiển thị trong hình bên dưới. Cần điều khiển không gì khác hơn là một vài chiết áp và nút nhấn được gắn trên một hệ thống cơ khí thông minh. Chiết áp được sử dụng để theo dõi chuyển động X và Y của cần điều khiển và nút được sử dụng để cảm nhận nếu cần điều khiển được nhấn. Cả hai chiết áp đều tạo ra điện áp tương tự phụ thuộc vào vị trí của cần điều khiển. Và chúng ta có thể nhận được hướng di chuyển bằng cách diễn giải những thay đổi điện áp này bằng cách sử dụng một số vi điều khiển. Trước đây chúng tôi đã giao tiếp Joystick với AVR, Joystick với Arduino và Raspberry Pi.
Trước khi giao tiếp bất kỳ cảm biến hoặc mô-đun nào với bộ vi điều khiển, điều quan trọng là phải biết cách thức hoạt động của nó. Ở đây cần điều khiển của chúng tôi có 5 chân đầu ra, trong đó hai chân dành cho nguồn và ba chân dành cho dữ liệu. Mô-đun phải được cấp nguồn + 5V. Các chân dữ liệu được đặt tên là VRX, VRY và SW.
Thuật ngữ “VRX” là viết tắt của Điện áp thay đổi trên trục X và thuật ngữ “VRY” là viết tắt của Điện áp thay đổi theo trục Y và “SW” là viết tắt của công tắc.
Vì vậy, khi chúng ta di chuyển cần điều khiển sang trái hoặc phải, giá trị điện áp trên VRX sẽ thay đổi và khi chúng ta thay đổi nó lên hoặc xuống thì VRY sẽ thay đổi. Tương tự như vậy khi chúng ta di chuyển nó theo đường chéo, cả VRX và VRY sẽ khác nhau. Khi chúng ta nhấn công tắc, chân SW sẽ được kết nối với đất. Hình dưới đây sẽ giúp bạn hiểu rõ hơn các giá trị Đầu ra
Sơ đồ mạch:
Bây giờ chúng ta đã biết cách Joy stick hoạt động, chúng ta có thể đi đến kết luận rằng chúng ta sẽ cần hai chân ADC và một chân đầu vào kỹ thuật số để đọc tất cả ba chân dữ liệu của mô-đun Joystick. Sơ đồ mạch hoàn chỉnh được hiển thị trong hình dưới đây
Như bạn có thể thấy trong sơ đồ mạch, thay vì cần điều khiển, chúng tôi đã sử dụng hai chiết áp RV1 và RV3 làm đầu vào điện áp tương tự và đầu vào logic cho công tắc. Bạn có thể làm theo các nhãn được viết bằng màu tím để khớp với tên các chân và tạo kết nối cho phù hợp.
Lưu ý rằng các chân Analog được kết nối với các kênh A0 và A1 và công tắc kỹ thuật số được kết nối với RB0. Chúng tôi cũng sẽ có 5 đèn LED được kết nối làm đầu ra, để chúng tôi có thể phát sáng một đèn dựa trên hướng di chuyển của cần điều khiển. Vì vậy các chân đầu ra này được kết nối với PORT C từ RC0 đến RC4. Khi chúng ta đã xoay sơ đồ mạch, chúng ta có thể tiến hành lập trình, sau đó mô phỏng chương trình trên mạch này, sau đó xây dựng mạch trên một breadboard và sau đó tải chương trình lên phần cứng. Để cung cấp cho bạn một ý tưởng phần cứng của tôi sau khi thực hiện các kết nối trên được hiển thị bên dưới
Lập trình giao diện các phím điều khiển:
Các chương trình giao diện điều khiển với PIC là đơn giản và thẳng về phía trước. Chúng ta đã biết Joystick được kết nối với chân nào và chức năng của chúng là gì, vì vậy chúng ta chỉ cần đọc điện áp tương tự từ các chân và điều khiển đèn LED đầu ra cho phù hợp.
Chương trình hoàn chỉnh để thực hiện việc này được đưa ra ở cuối tài liệu này, nhưng để giải thích những điều, tôi đang phá vỡ mã trong các đoạn mã nhỏ có ý nghĩa bên dưới.
Như mọi khi chương trình được bắt đầu bằng cách thiết lập các bit cấu hình, chúng ta sẽ không thảo luận nhiều về việc thiết lập các bit cấu hình vì chúng ta đã học nó trong dự án LED Blinking và dự án này cũng vậy. Khi các bit cấu hình được thiết lập, chúng tôi phải xác định các chức năng ADC để sử dụng mô-đun ADC trong PIC của chúng tôi. Chức năng này cũng đã được học trong hướng dẫn cách sử dụng ADC với PIC. Sau đó, chúng ta phải khai báo chân nào là đầu vào và chân nào là chân đầu ra. Ở đây đèn LED được kết nối với PORTC nên chúng là chân đầu ra và chân Switch của Joystick là chân đầu vào kỹ thuật số. Vì vậy, chúng tôi sử dụng các dòng sau để khai báo tương tự:
// ***** Cấu hình I / O **** // TRISC = 0X00; // PORT C được sử dụng làm các cổng xuất PORTC = 0X00; // MAke tất cả các chân ở mức thấp TRISB0 = 1; // RB0 được sử dụng làm đầu vào // *** Kết thúc cấu hình I / O ** ///
Các chân ADC không cần được xác định là chân đầu vào vì chúng khi sử dụng chức năng ADC nó sẽ được gán làm chân đầu vào. Khi các chân được xác định, chúng ta có thể gọi hàm ADC_initialize mà chúng ta đã xác định trước đó. Chức năng này sẽ thiết lập các thanh ghi ADC cần thiết và chuẩn bị mô-đun ADC.
ADC_Initialize (); // Định cấu hình mô-đun ADC
Bây giờ, chúng ta bước vào vô hạn của chúng tôi trong khi vòng lặp. Bên trong vòng lặp này, chúng ta phải theo dõi các giá trị của VRX, VRY và SW và dựa trên các giá trị mà chúng ta có để điều khiển đầu ra của đèn led. Chúng tôi có thể bắt đầu quá trình giám sát bằng cách đọc điện áp tương tự của VRX và VRY bằng cách sử dụng các dòng dưới đây
int joy_X = (ADC_Read (0)); // Đọc Trục X của cần điều khiển int joy_Y = (ADC_Read (1)); // Đọc Trục Y của Cần điều khiển
Dòng này sẽ lưu giá trị của VRX và VRY trong biến joy_X và joy_Y tương ứng. Hàm ADC_Read (0) có nghĩa là chúng ta đang đọc giá trị ADC từ kênh 0 là chân A0. Chúng tôi đã kết nối VRX và VRY với chân A0 và A1 và vì vậy chúng tôi đọc từ 0 và 1.
Nếu bạn có thể nhớ lại từ hướng dẫn ADC của chúng tôi, chúng tôi biết rằng chúng tôi đọc Điện áp tương tự PIC là thiết bị kỹ thuật số sẽ đọc nó từ 0 đến 1023. Giá trị này phụ thuộc vào vị trí của mô-đun cần điều khiển. Bạn có thể sử dụng sơ đồ nhãn ở trên để biết bạn có thể mong đợi giá trị nào cho mọi vị trí của cần điều khiển.
Ở đây tôi đã sử dụng giá trị giới hạn 200 làm giới hạn dưới và giá trị 800 làm giới hạn trên. Bạn có thể sử dụng bất cứ thứ gì bạn muốn. Vì vậy, hãy sử dụng các giá trị này và bắt đầu phát sáng các đèn LED tương ứng. Để làm điều này, chúng ta phải so sánh giá trị của joy_X với các giá trị được xác định trước bằng cách sử dụng vòng lặp IF và làm cho các chân LED cao hoặc thấp như hình dưới đây. Các dòng bình luận sẽ giúp bạn hiểu rõ hơn
if (joy_X <200) // Joy tăng lên {RC0 = 0; RC1 = 1;} // Phát sáng LED phía trên else if (joy_X> 800) // Joy di chuyển xuống {RC0 = 1; RC1 = 0;} // Phát sáng LED dưới khác // Nếu không di chuyển {RC0 = 0; RC1 = 0;} // Tắt cả hai led
Tương tự, chúng ta cũng có thể làm điều tương tự đối với giá trị của trục Y. Chúng ta chỉ cần thay thế biến joy_X bằng joy_Y và điều khiển hai chân LED tiếp theo như hình bên dưới. Lưu ý rằng khi phím điều khiển không được di chuyển, chúng ta sẽ tắt cả hai đèn LED.
if (joy_Y <200) // Joy di chuyển sang trái {RC2 = 0; RC3 = 1;} // Đèn LED bên trái phát sáng else if (joy_Y> 800) // Niềm vui di chuyển sang phải {RC2 = 1; RC3 = 0;} // Phát sáng LED bên phải else // Nếu không di chuyển {RC2 = 0; RC3 = 0;} // Tắt cả hai đèn LED
Bây giờ chúng ta còn một việc cuối cùng cần làm, chúng ta phải kiểm tra công tắc nếu được nhấn. Chân công tắc được kết nối với RB0 để chúng ta có thể sử dụng lại vòng lặp if và kiểm tra xem nó có được bật hay không. Nếu nó được nhấn, chúng tôi sẽ bật đèn LED để cho biết rằng công tắc đã được nhấn.
if (RB0 == 1) // Nếu Joy được nhấn RC4 = 1; // Phát sáng LED giữa else RC4 = 0; // TẮT LED giữa
Chế độ xem mô phỏng:
Dự án hoàn chỉnh có thể được mô phỏng bằng phần mềm Proteus. Khi bạn đã viết chương trình, hãy biên dịch mã và liên kết mã hex của mô phỏng với mạch. Sau đó, bạn sẽ thấy đèn LED phát sáng theo vị trí của chiết áp. Mô phỏng được hiển thị bên dưới:
Phần cứng và Làm việc:
Sau khi xác minh mã bằng Mô phỏng, chúng ta có thể xây dựng mạch trên bảng mạch bánh mì. Nếu bạn đã làm theo các hướng dẫn PIC, bạn sẽ nhận thấy rằng chúng tôi sử dụng cùng một bảng mạch hoàn hảo có mạch PIC và 7805 được hàn vào nó. Nếu bạn cũng quan tâm đến việc chế tạo một cái để bạn sử dụng nó với tất cả các dự án PIC của mình thì hãy hàn mạch trên bảng mạch hoàn thiện. Hoặc bạn cũng có thể xây dựng mạch hoàn chỉnh trên breadboard. Sau khi phần cứng được thực hiện, nó sẽ giống như sau.
Bây giờ tải mã lên bộ vi điều khiển PIC bằng PICkit3. Bạn có thể tham khảo dự án LED Blink để được hướng dẫn. Bạn sẽ thấy đèn vàng sáng cao ngay sau khi chương trình được tải lên. Bây giờ sử dụng cần điều khiển và thay đổi núm, đối với mỗi hướng của cần điều khiển, bạn sẽ nhận thấy đèn LED tương ứng tăng cao. Khi nhấn công tắc ở giữa, nó sẽ tắt đèn LED ở giữa.
Hoạt động này chỉ là một ví dụ, bạn có thể xây dựng rất nhiều dự án thú vị trên đó. Hoạt động hoàn chỉnh của dự án cũng có thể được tìm thấy tại video ở cuối trang này.
Hy vọng bạn đã hiểu dự án và thích xây dựng nó, nếu bạn có bất kỳ vấn đề gì trong quá trình thực hiện, hãy đăng nó vào phần bình luận bên dưới hoặc viết nó trên diễn đàn để nhận được sự giúp đỡ.