Thứ Năm, 29 tháng 11, 2018

Giao tiếp với Joystick Analog

Giới thiệu

Analog Joystick được sử dụng như một thiết bị đầu vào để thay đổi vị trí của con trỏ tương ứng với chuyển động của cần điều khiển.
Nó cung cấp điện áp tương tự theo hướng X và Y tương ứng với vị trí của cần điều khiển.
Các điện áp này có thể được xử lý để tìm vị trí của con trỏ hoặc để di chuyển con trỏ theo vị trí của cần điều khiển.
Để xử lý tín hiệu tương tự, chúng ta cần sử dụng ADC trên vi điều khiển.
Để biết thông tin về ADC trong PIC18F4550 và cách sử dụng nó, hãy tham khảo ADC chủ đề trong PIC18F4550 trong phần bên trong PIC.

Analog Joystick Module                  
Analog Joystick Module

Sơ đồ

Tương tác mô-đun Analog Joystick với PIC18F4550

Thí dụ

Ở đây chúng ta sẽ giao diện Analog Joystick với PIC18F4550. Trong đó, chúng tôi sẽ hiển thị giá trị số cho chuyển động XY trên LCD16x2.
Trong khi giao tiếp Joystick với PIC18F4550, chúng ta phải kết nối pin đầu ra X và Y của một phím điều khiển với kênh ADC của vi điều khiển. Bằng cách lấy giá trị ADC của chân X và Y, chúng tôi có thể xác định vị trí của Cần điều khiển.
Ngoài ra, chúng tôi hiển thị chuyển động Joystick trên PC bằng Matlab. Trong Matlab, chúng tôi đọc Cổng nối tiếp chấp nhận giá trị gửi bởi vi điều khiển PIC18F4550 serially.
Chương trình
/*
    Analog Joystick Interfacing with PIC18f4550
 
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <p18f4550.h>
#include "Configuration_Header_File.h"          /* Header File for Configuration bits */
#include "LCD_16x2_8-bit_Header_File.h"         /* Header File for LCD Functions */
#include "PIC18F4550_ADC_Header_File.h"         /* Header File for ADC Functions */
#include "USART_Header_File.h"                  /* Header File for USART Functions */

void main()
{    
    char data[10],data1[10];    
    int x,y;  
    OSCCON=0x72;                /*Set internal Oscillator frequency to 8 MHz*/
    LCD_Init();                 /*Initialize 16x2 LCD*/
    ADC_Init();                 /*Initialize 10-bit ADC*/
    USART_Init(9600);


    while(1)
    {        
        x=ADC_Read(0);
        sprintf(data,"%d  ",x);                  /* it is used to convert integer value to ASCII string */
        LCD_String_xy(0,0,data);                 /* send string data for printing */
        USART_SendString(data);
        MSdelay(90);
        
        y=ADC_Read(1);
        sprintf(data1,"%d  ",y);                  /* it is used to convert integer value to ASCII string*/
        LCD_String_xy(0,6,data1);                 /* send string data for printing*/          
        USART_SendString(data1);
        MSdelay(90);

        USART_TxChar(0x0A);
        USART_TxChar(0x0D);

        memset(data,0,10);
        memset(data1,0,10);

    }
    
}

Video


Code



Không có nhận xét nào:

Đăng nhận xét