Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Вопросы по коду #2

Open
VadimVolynkin opened this issue Dec 9, 2018 · 20 comments
Open

Вопросы по коду #2

VadimVolynkin opened this issue Dec 9, 2018 · 20 comments

Comments

@VadimVolynkin
Copy link

  1. Как подключить TLE5010?
  2. Как и где колибруется ось?
@vostrenkov
Copy link
Owner

Magnetic resistors and axis calibration are not supported by the software now. Maybe this project will be helpful for you https://opensimhardware.wordpress.com/diy-контроллер-для-педалей-и-кнопок/

@AsuRaHan
Copy link

как это собрать под PlatfomIO?

@vostrenkov
Copy link
Owner

Код в этом репозитории собирается в IDE Keil uVusion v5 с компилятором MDK ARM v5. Сборка в других средах и с другими компиляторами потребует установления зависимостей и, вероятно, правок кода

@AsuRaHan
Copy link

спасибо за ответ. я тут поковырялся. вобщем собирается все просто.
SRC закидываем в SRC
inc в Include
далее с мидлевар закидываем папку STM32_USB_Device_Library в папку lib
в самой папке STM32_USB_Device_Library создаем JSON фаил library.json с таким содержанием
{
"name": "STM32_USB_Device_Library",
"version": "0.0.0",
"build": {
"flags": [
"-I $PROJECT_DIR/include",
"-I Core/Inc",

        "-I Class/HID/Inc"
    ]
}

}
вот и все танцы с бубном. :)
у меня вылезли ошибки с необявленными директивами. просто подинклюдил фаил main.h там где компилятор ругался. и все заработало проект собрался и даже залился. и даже определился. вот сижу балуюсь:)
https://pp.userapi.com/c857420/v857420686/2165b/skTok_Y-WAU.jpg

только с кнопками чет пока не разобрался. мне на пины кнопок + питания подавать или -??
или там еще как то примудро? примерную схему кнопок можеш показать?

@vostrenkov
Copy link
Owner

Кнопки подтянуты к питанию на контроллере, для нажатия надо соединить с землёй. Не работает возможно потому что в стандартной конфигурации кнопки выключены. Для включения надо в файле main.h задать параметр BUTTONS_NUM больше нуля

@AsuRaHan
Copy link

все 12 кнопок включил.
#define THROTTLE_ENABLED 1 // 1 for enabled, 0 for disabled
#define RUDDER_ENABLED 1 // 1 for enabled, 0 for disabled
#define JOYSTICK_AXIS_NUM 2
#define SECONDARY_AXIS_NUM 0

#define BUTTONS_NUM 12
#define LEDS_NUM 0

замыкаю на - и ничего не происходит. в чем дело пока не понял

@vostrenkov
Copy link
Owner

А аналоговые оси работают?

@AsuRaHan
Copy link

аналоговые оси незнаю как проверить. не разобрался пока. начал с кнопок. если подскажеш как проверить то проверю.

вот смотри, в коде есть uint8_t data_ready = 0;
и далее в главном цикле if (data_ready != 0).......

но у нас изначалоно установлено 0 то мы в обработку кнопок то не попадем получается и ни какие данные не отправим. или я ошибаюсь?
data_ready где заполняется то кроме как в главном цикле?

@vostrenkov
Copy link
Owner

Флаг опроса выставляется в прерывании, в файле stm32f1xx_it.h. Попробую собрать в этой IDE и проверить, когда будет доступ к железу. Если у вас получится разобраться раньше, пожалуйста, отпишитесь

@AsuRaHan
Copy link

для проверки сделал так перед if (data_ready != 0).......

GPIO_Poll(&buttons_state);
if (buttons_state != 0){
data_ready = 1;
}

кнопки стали реагировать на соединение с -
но оси самопроизвольно дергаются. и сами кнопки время от времени моргают.
я предположил что прерывания от кнопок не срабатывают так и оказалось. тоесть прерывания не работают. либо чето с настройками.

вобщем buttons_state не менялась если тыкать на кнопки. тупо проводком на минус контачу.

оси так пока и не проверил.

интересный проект. буду дальше курить его. если что отпишусь

@AsuRaHan
Copy link

https://youtu.be/5f3dsfdOFYA вот что хочу запилить. начало положено. и кстате да проблема в прерываниях была. как доделаю проект с сеговскими джостиками выложу сюда. еще раз спасибо за исходники. я хоть понял как делать ждостики на STM

@vostrenkov
Copy link
Owner

Для геймпада аналоговые оси можно просто выключить за ненадобностью, а дергаются они потому что в воздухе висят.
Почему не работают прерывания разобрались или мне попробовать воспроизвести и найти причину?

@vostrenkov
Copy link
Owner

Кстати, для вашей задачи (если это не спортивный интерес) есть красивое покупное решение. У меня два таких от NES есть, отлично работают

@AsuRaHan
Copy link

да оси я вырубил. с прерываниями так и не разобрался.

вопрос?
USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t*) &report_data, (AXIS_NUM + BUTTONS_ENABLED)*sizeof(uint16_t));

интересует подробности что отправляют в report_data для кнопок осей и прочего.

и кстате если работают прерывания. для чего в главном цикле идет проверка есть или нет прерывание. не проще ли отправку делать сразу в прерываниях? а цикл пусть в холостую крутится.

хотелось бы узнать подробнее про джостики и как там что отправляется.

@AsuRaHan
Copy link

Кстати, для вашей задачи (если это не спортивный интерес) есть красивое покупное решение. У меня два таких от NES есть, отлично работают

да у меня как раз таки спортивный интерес

@vostrenkov
Copy link
Owner

vostrenkov commented Jul 22, 2019

Отправка данных происходит в основном цикле чтобы не держать контроллер в прерывании лишнее время. В данном проекте это пока не критично, но в общем случае так делать правильнее. Кроме того, если не знать точно, что делает функция отправки внутри прерывания, то могут возникнуть проблемы с атомарностью операций.

В репорт записываются данные исходя из структуры дескриптора HID (он описывается в файле usbd_hid.c). Про дескрипторы и в принципе про HID можно подробнее почитать например здесь. В нашем случае дескриптор как раз меняется в зависимости от того, что выбрано в main.h

@vostrenkov
Copy link
Owner

vostrenkov commented Jul 22, 2019

Попробуйте в начале файла main.c добавить две строки:

/* Includes ------------------------------------------------------------------*/

#define USE_HAL_LIBRARY
#define STM32F103xB

#include "main.h"
#include "stm32f1xx_hal.h"
#include "adc.h"
#include "dma.h"
#include "tim.h"
#include "usb_device.h"
#include "gpio.h"

Либо прописать USE_HAL_DRIVER, STM32F103xB в директивы препроцессора в настройках проекта

Еще переменную data_ready желательно обозвать volatile:
volatile uint8_t data_ready = 0;

Возможно это решит проблему с прерываниями

@AsuRaHan
Copy link

да точно volatile uint8_t data_ready = 0;
все работает теперь как надо. одно слово добавил и все заработало. volatile!!!!
компилятор видать оптимизировал;)

@vostrenkov
Copy link
Owner

vostrenkov commented Jul 23, 2019

Интересно, что мой оптимизатор не убивал эту переменную) в любом случае, спасибо, что помогли найти косяк.
Тему могу закрывать?

@AsuRaHan
Copy link

да можно закрывать

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants