입력 장치는 모든 전자 프로젝트에서 중요한 역할을합니다. 이러한 입력 장치는 사용자가 디지털 세계와 상호 작용할 수 있도록 도와줍니다. 입력 장치는 누름 버튼처럼 간단 할 수도 있고 터치 스크린처럼 복잡 할 수도 있습니다. 프로젝트의 요구 사항에 따라 다릅니다. 이 튜토리얼에서는 조이스틱을 PIC 마이크로 컨트롤러와 인터페이스하는 방법 을 배우고, 조이스틱은 디지털 세계와 상호 작용하는 멋진 방법이며 거의 모든 사람들이 청소년기에 비디오 게임을 할 때 사용했을 것입니다.
조이스틱은 정교한 장치처럼 보이지만 실제로는 두 개의 전위차계와 푸시 버튼의 조합 일뿐입니다. 따라서 MCU의 ADC 기능을 사용하는 방법을 알고 있다면 모든 MCU와의 인터페이스도 매우 쉽습니다. 우리는 이미 ADC를 PIC와 함께 사용하는 방법을 배웠으므로 조이스틱 인터페이스를위한 해결 방법 일뿐입니다. pickit을 처음 사용하는 사람들은 프로젝트를 더 쉽게 이해할 수 있도록 위의 ADC 프로젝트와 LED 깜박임 시퀀스 프로젝트를 배우는 것이 좋습니다.
필요한 재료
- 프로그래밍을위한 PicKit 3
- 조이스틱 모듈
- PIC16F877A IC
- 40-핀 IC 홀더
- 성능 보드
- 20MHz 크리스탈 OSC
- Bergstik 핀
- 220ohm 저항기
- 모든 색상의 5-LED
- 1 납땜 키트
- IC 7805
- 12V 어댑터
- 전선 연결
- 브레드 보드
조이스틱 모듈 이해:
조이스틱은 다양한 모양과 크기로 제공됩니다. 일반적인 조이스틱 모듈 은 아래 그림과 같습니다. 조이스틱은 두 개의 전위차계와 스마트 기계 배열 위에 장착 된 푸시 버튼에 불과합니다. 전위차계는 조이스틱의 X 및 Y 움직임을 추적하는 데 사용되며 버튼은 조이스틱을 눌렀는지 감지하는 데 사용됩니다. 두 전위차계는 조이스틱의 위치에 따라 아날로그 전압을 출력합니다. 그리고 마이크로 컨트롤러를 사용하여 이러한 전압 변화를 해석함으로써 움직임의 방향을 알 수 있습니다. 이전에 우리는 조이스틱과 AVR, 조이스틱과 Arduino 및 Raspberry Pi를 인터페이스했습니다.
센서 또는 모듈을 마이크로 컨트롤러와 인터페이스하기 전에 작동 방식을 아는 것이 중요합니다. 여기에 조이스틱에는 5 개의 출력 핀이 있으며, 그중 2 개는 전원용이고 3 개는 데이터 용입니다. 모듈은 + 5V로 전원이 공급되어야합니다. 데이터 핀의 이름은 VRX, VRY 및 SW로 지정됩니다.
"VRX" 라는 용어 는 X 축의 가변 전압을 의미하고 "VRY"라는 용어는 Y 축의 가변 전압을 의미하고 "SW"는 스위치를 의미합니다.
따라서 조이스틱을 왼쪽이나 오른쪽으로 움직일 때 VRX의 전압 값이 달라지며 위아래로 변경하면 VRY가 달라집니다. 마찬가지로 대각선으로 이동하면 VRX와 VRY가 모두 달라집니다. 스위치를 누르면 SW 핀이 접지에 연결됩니다. 아래 그림은 출력 값을 훨씬 더 잘 이해하는 데 도움이됩니다.
회로도:
이제 조이스틱이 어떻게 작동하는지 알았으므로 조이스틱 모듈의 세 데이터 핀을 모두 읽으려면 ADC 핀 2 개와 디지털 입력 핀 1 개가 필요하다는 결론에 도달 할 수 있습니다. 전체 회로도가 아래 그림에 나와 있습니다.
회로도에서 볼 수 있듯이 조이스틱 대신 두 개의 전위차계 RV1 및 RV3을 아날로그 전압 입력으로 사용하고 스위치를위한 논리 입력을 사용했습니다. 보라색으로 쓰여진 라벨을 따라 핀 이름을 일치시키고 그에 따라 연결할 수 있습니다.
아날로그 핀은 채널 A0 및 A1에 연결되고 디지털 스위치는 RB0에 연결됩니다. 또한 5 개의 LED 조명이 출력으로 연결되어 조이스틱이 움직이는 방향에 따라 하나의 빛을 발할 수 있습니다. 따라서 이러한 출력 핀은 RC0에서 RC4까지 PORT C에 연결됩니다. 회로도를 패닝하면 프로그래밍을 진행하고이 회로에서 프로그램을 시뮬레이션 한 다음 브레드 보드에 회로를 구축 한 다음 프로그램을 하드웨어에 업로드 할 수 있습니다. 위의 연결을 한 후 내 하드웨어에 대한 아이디어를 제공하기 위해 아래에 나와 있습니다.
조이스틱 인터페이스 프로그래밍:
조이스틱과 PIC를 연결 하는 프로그램 은 간단하고 간단합니다. 조이스틱이 어떤 핀에 연결되어 있고 그 기능이 무엇인지 이미 알고 있으므로 핀에서 아날로그 전압을 읽고 그에 따라 출력 LED를 제어하면됩니다.
이 작업을 수행하는 전체 프로그램은이 문서의 끝 부분에 나와 있지만 설명을 위해 코드를 아래에 작은 의미있는 스 니펫으로 나누었습니다.
프로그램은 항상 구성 비트를 설정하여 시작하므로 LED Blinking 프로젝트에서 이미 배웠고이 프로젝트에서도 동일하므로 구성 비트 설정에 대해 많이 논의하지 않을 것입니다. 구성 비트가 설정되면 PIC에서 ADC 모듈을 사용하기위한 ADC 기능을 정의해야합니다. 이 기능은 PIC 튜토리얼과 함께 ADC를 사용하는 방법에서도 배웠습니다. 그 후 어떤 핀이 입력이고 어떤 핀이 출력 핀인지 선언해야합니다. 여기서 LED는 PORTC에 연결되어 출력 핀이고 Joystick의 Switch 핀은 디지털 입력 핀입니다. 따라서 다음 줄을 사용하여 동일하게 선언합니다.
// ***** I / O 구성 **** // TRISC = 0X00; // PORT C는 출력 포트로 사용됩니다 . PORTC = 0X00; // 모든 핀을 낮게 만듭니다. TRISB0 = 1; // RB0은 입력으로 사용됩니다. // *** I / O 구성 끝 ** ///
ADC 핀은 입력으로 정의 될 필요 가 입력 핀으로 할당 될 ADC 함수를 사용하기 때문에 그들 핀. 핀이 정의되면 앞에서 정의한 ADC_initialize 함수 를 호출 할 수 있습니다. 이 기능은 필요한 ADC 레지스터를 설정하고 ADC 모듈을 준비합니다.
ADC_Initialize (); // ADC 모듈 구성
이제 무한 while 루프로 들어갑니다. 이 루프 내에서 우리는 VRX, VRY 및 SW의 값 을 모니터링하고 값을 기반으로 led의 출력 을 제어 해야합니다. 아래 라인을 사용하여 VRX 및 VRY의 아날로그 전압을 읽어 모니터링 프로세스를 시작할 수 있습니다.
int joy_X = (ADC_Read (0)); // 조이스틱의 X 축 읽기 int joy_Y = (ADC_Read (1)); // 조이스틱의 Y 축 읽기
이 줄은 변수 joy_X 및 joy_Y 에 VRX 및 VRY 값을 각각 저장합니다. ADC_Read (0) 함수 는 핀 A0 인 채널 0에서 ADC 값을 읽고 있음을 의미합니다. VRX와 VRY를 핀 A0과 A1에 연결 했으므로 0과 1에서 읽습니다.
ADC 튜토리얼에서 기억할 수 있다면 아날로그 전압을 읽었다는 것을 알고 있습니다. 디지털 장치 인 PIC는 0에서 1023까지 읽습니다.이 값은 조이스틱 모듈의 위치에 따라 다릅니다. 위의 레이블 다이어그램을 사용하여 조이스틱의 모든 위치에 대해 기대할 수있는 값을 알 수 있습니다.
여기에서는 한계 값 200을 하한값으로, 800 값을 상한값으로 사용했습니다. 원하는 것은 무엇이든 사용할 수 있습니다. 따라서이 값을 사용하고 그에 따라 LED를 비추기 시작합니다. 이를 위해 IF 루프를 사용하여 joy_X 의 값을 사전 정의 된 값과 비교하고 아래와 같이 LED 핀을 높거나 낮게 만들어야합니다. 주석 줄은 더 잘 이해하는 데 도움이됩니다.
if (joy_X <200) // Joy가 올라감 {RC0 = 0; RC1 = 1;} // 상단 LED 켜짐 else if (joy_X> 800) // Joy가 아래로 이동 {RC0 = 1; RC1 = 0;} // 낮은 LED 켜짐 else // 움직이지 않으면 {RC0 = 0; RC1 = 0;} // 두 LED 모두 끄기
Y 축 값에 대해서도 비슷하게 할 수 있습니다. 변수 joy_X 를 joy_Y 로 바꾸고 다음 두 개의 LED 핀도 아래와 같이 제어하면됩니다. 조이스틱을 움직이지 않으면 두 LED 조명이 모두 꺼집니다.
if (joy_Y <200) // Joy가 왼쪽으로 이동 {RC2 = 0; RC3 = 1;} // 왼쪽 LED 점등 else if (joy_Y> 800) // Joy가 오른쪽으로 이동 {RC2 = 1; RC3 = 0;} // 오른쪽 LED 켜짐 else // 이동하지 않은 경우 {RC2 = 0; RC3 = 0;} // 두 LED 모두 끄기
이제 마지막으로해야 할 일이 하나 더 있습니다. 스위치가 눌 렸는지 확인해야합니다. 스위치 핀은 RB0에 연결되어 있으므로 if 루프를 다시 사용하고 켜져 있는지 확인할 수 있습니다. 이 버튼을 누르면 LED가 켜지면서 스위치가 눌려 졌음을 나타냅니다.
if (RB0 == 1) // Joy를 누르면 RC4 = 1; // 중간 LED 켜짐 else RC4 = 0; // OFF 중간 LED
시뮬레이션보기:
전체 프로젝트는 Proteus 소프트웨어를 사용하여 시뮬레이션 할 수 있습니다. 프로그램을 작성했으면 코드를 컴파일하고 시뮬레이션의 16 진 코드를 회로에 연결합니다. 그러면 전위차계의 위치에 따라 LED 조명이 켜집니다. 시뮬레이션은 다음과 같습니다.
하드웨어 및 작업:
시뮬레이션을 사용하여 코드를 확인한 후 브레드 보드에 회로를 구축 할 수 있습니다. PIC 튜토리얼을 따라왔다면 PIC와 7805 회로가 납땜 된 동일한 성능 보드를 사용하고 있다는 것을 알 수있을 것입니다. 모든 PIC 프로젝트에서 사용할 수 있도록 하나를 만드는 데 관심이 있다면 회로를 성능 기판에 납땜하십시오. 또는 브레드 보드에 완전한 회로를 구축 할 수도 있습니다. 하드웨어가 완료되면 아래와 같이됩니다.
이제 PICkit3을 사용하여 코드를 PIC 마이크로 컨트롤러에 업로드합니다. 지침은 LED Blink 프로젝트를 참조 할 수 있습니다. 프로그램이 업로드 되 자마자 노란색 표시등이 높아집니다. 이제 조이스틱을 사용하고 노브를 변경하면 조이스틱의 각 방향에 대해 각 LED가 높아지는 것을 알 수 있습니다. 중간에있는 스위치를 누르면 중간에있는 LED가 꺼집니다.
이 작업은 단지 예일 뿐이며 그 위에 흥미로운 프로젝트를 많이 만들 수 있습니다. 프로젝트의 전체 작업 은이 페이지 끝에 있는 비디오 에서도 확인할 수 있습니다.
프로젝트를 이해하고 구축하는 것을 즐겼기를 바랍니다. 문제가 있으면 아래 댓글 섹션에 자유롭게 게시하거나 포럼에 작성하여 도움을 받으세요.