Аналоговый  джойстик:  подключение к PIC18

Аналоговый джойстик

Аналоговый джойстик используется как устройство ввода для изменения положения курсора в соответствии с движением джойстика.

Он выдает аналоговые напряжения в направлениях X и Y, соответствующих положению джойстика.

Эти напряжения могут быть обработаны для определения положения курсора или для перемещения курсора в соответствии с положением джойстика.

Для получения дополнительной информации об аналоговом джойстике и о том, как его использовать, обратитесь к статье «Аналоговый джойстик» в разделе «Датчики и модули».

Для обработки аналоговых сигналов нам нужно использовать АЦП на микроконтроллере. Для получения информации об АЦП в PIC18 и о том, как его использовать, обратитесь к статье АЦП в PIC18.

Схема подключения аналогового джойстика

Рисунок 1. Схема подключения джойстика к микроконтроллеру PIC

Для примера работы аналогового джойстика подключим его к PIC18F4550. На LCD16x2 будем отображать цифровое значение для XY во время движения.

Что бы было взаимодействие между джойстиком и PIC18F4550 нам  необходимо подключить выходные контакты X и Y джойстика к каналам АЦП микроконтроллера. Прочитав значение АЦП контактов X и Y, мы можем определить положение джойстика.

Кроме того, мы показываем движение джойстика на ПК с помощью Matlab. В Matlab мы читаем Serial Port, который принимает значение, отправляемое микроконтроллером PIC18F4550 последовательно.

Архив проекта подключения джойстика к PIC

Пример кода

/* 
   Аналоговый джойстик с PIC18f4550 
   www.rxtx.su 
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <p18f4550.h>
#include "Configuration_Header_File.h"          
#include "LCD_16x2_8-bit_Header_File.h"         
#include "PIC18F4550_ADC_Header_File.h"         
#include "USART_Header_File.h"   
               
void main()
{    
    char data[10],data1[10];    
    int x,y;  
    OSCCON=0x72;                /*Установим частоту на 8 Мгц*/
    LCD_Init();                 /*инициализация  16x2 LCD*/
    ADC_Init();                 /*Инициализация АЦП 10-бит*/
    USART_Init(9600);
    while(1)
    {        
        x=ADC_Read(0);
        sprintf(data,"%d  ",x);     /* конвертируем считанное значение  АЦП первого канала в строку  */
        LCD_String_xy(0,0,data);    /* выводим строку на экран */
        USART_SendString(data);
        MSdelay(90);
  
        y=ADC_Read(1);
        sprintf(data1,"%d  ",y);    /* конвертируем считанное значение  АЦП второго канала  в строку  */
        LCD_String_xy(0,6,data1);   /* выводим строку на экран */
        USART_SendString(data1);
        MSdelay(90);
        USART_TxChar(0x0A);
        USART_TxChar(0x0D);
        memset(data,0,10);
        memset(data1,0,10);
    } 
}
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии