Другое > Hard'n'Soft
Грязный железный хак [прототип] слабонервным - не нервничать
<< < (4/6) > >>
megavolt85:

--- Цитата: s_s от 26 Ноябрь 2019, 20:10:35 ---а узел управления на чем-то надо делать
--- Конец цитаты ---

ещё три бакса


--- Цитата: s_s от 26 Ноябрь 2019, 20:10:35 ---+ монтажные платы или на чем-то надо это собрать.
--- Конец цитаты ---

итог по цене будет близок, но останется аутентичность и не будет колхоза и приколов в виде

--- Цитата: xpk2k от 26 Ноябрь 2019, 10:16:50 ---при инициализации успевает произвольно нажать старт несколько раз
--- Конец цитаты ---
s_s:

--- Цитата: megavolt85 от 26 Ноябрь 2019, 20:37:02 ---ещё три бакса
--- Конец цитаты ---
Забыли про пульт, сколь там баксов?
И так 2 бакса, а вернее копейки + 3 бакса, а копейки это сколько?, на верное то же пару баксов.
Так глядишь и догоним до готового
megavolt85:

--- Цитата: s_s от 26 Ноябрь 2019, 21:09:00 ---Так глядишь и догоним до готового
--- Конец цитаты ---

ну по функционалу до такого готового точно не дотянем  :lol:
ссылка ведёт на эмуль с беспроводным джоем, это совсем не то
s_s:
Ну хорошо, посмотрим тогда в сторону ESP-12E,
1 - позволяет ли она соединяться с такой же ESP-12E?
2 - позволяет ли она соединяться с двумя ESP-12E?
megavolt85:
да хоть с десятью
xpk2k:

--- Цитата: s_s от 26 Ноябрь 2019, 17:19:12 ---xpk2k, исходный код выложи, и какой компилятор, не можешь с spi разобраться, поможем.
Абсолютно правДа, 2 бакса, еще и джойстик такой нужно приобрести.

--- Конец цитаты ---
Вы все правы, спора нет.
Надо расширять бюджет!
Инструкции как компилить https://retro.moe/unijoysticle2/ расписывать не буду.
У кого получится скомпилить - нужно заменить в исходниках 4 файла.
Первая попытка засунуть spi не удалась.
s_s:

--- Цитата: xpk2k от 27 Ноябрь 2019, 07:58:46 ---Первая попытка засунуть spi не удалась.
--- Конец цитаты ---
А что так? Что делали, что изменяли?
xpk2k:
Сначала кодил.
Потом ещё кодил.
И ещё покодил spi.
А потом понял что все не работает и надо сначала начинать.
s_s:
Покажите что меняли на что меняли, как подключали?
Компилятор какой?
xpk2k:
К чему эти праздные вопросы.
Лучше пишите скорее реализацию spi.
Компилятор:
~/esp$ ./xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc --version
xtensa-esp32-elf-gcc (crosstool-NG crosstool-ng-1.22.0-80-g6c4433a) 5.2.0
Copyright (C) 2015 Free Software Foundation, Inc.
s_s:
Оооо Linux. Ну если только на виртуалку поставить.

Ладно. Х с ним.
У меня проводной джойстик на STM32F030F4P6 3,3В, используется аппаратный spi.

Вот код самого spi, может чем поможет
--- Код: --- SPI_StructInit(&hspi1);
    hspi1.SPI_Mode=SPI_Mode_Slave; // Slave режим
    hspi1.SPI_Direction=SPI_Direction_1Line_Tx;         // 1Line_Tx
    hspi1.SPI_DataSize=SPI_DataSize_8b; // 8 бит
    hspi1.SPI_CPOL=SPI_CPOL_High; // полярность сигнала SCK
    hspi1.SPI_CPHA=SPI_CPHA_1Edge; // фаза сигнала SCK
    hspi1.SPI_NSS=SPI_NSS_Hard;         // NSS_Hard
    hspi1.SPI_FirstBit=SPI_FirstBit_MSB;          // порядок передачи бит
    hspi1.SPI_CRCPolynomial=7; // без понятия, но во всех примерах 7

SPI_Init(SPI1,&hspi1); // нициализируем SPI

    /* Configure slave pins */
    GPIO_StructInit(&gpio_init);
    gpio_init.GPIO_Mode = GPIO_Mode_AF; // альтернативное использование
    gpio_init.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6; //NSS-4 SCK-5 MISO-6
    gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &gpio_init);

    SPI_Cmd(SPI1, ENABLE);

    NVIC_EnableIRQ(SPI1_IRQn);

    SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_TXE,ENABLE); //включаем соответствующее прерывание


void SPI1_IRQHandler(void) { // прерывание по окончанию передачи байта
SPI_SendData8(SPI1,last_read_controller_bytes); // в прерывании загрузка байта в регистр SPI
}
--- Конец кода ---
Напрямую не подключал SPI к плате Dendy, через преобразователь уровня 5*3,3.
Перепробовал почти все варианты, и на резисторах и на диодах, во всех нарушалась осциллограмма сигналов со стороны 5В.
Только подошел стандартный преобразователь 5*3,3В, это который на полевых транзисторах.
xpk2k:
код под спойлером оценил.
после отправки байта spi прерывание кладет в свой регистр последнее считанное с контроллера значение...
как бы это намек на то, что пока будет идти новый пинок от master-spi устройства на чтение... последнее считанное с контроллера значение уже устареет и борцы за минимальный лаг будут этим недовольны.
в регистр spi на отправку байта этот самый байт нужно вписывать сразу по прерыванию от считывания контроллера. пусть в 100500 раз чаще чем тот байт будет заюзан и отправлен по пинку от master-spi устрйоства. он будет забыт, забит, перезаписан великое число раз, но такова жертва в борьбе за лаг, минимальный лаг.
s_s:

--- Цитата: xpk2k от 29 Ноябрь 2019, 12:16:48 ---борцы за минимальный лаг будут этим недовольны
--- Конец цитаты ---
Частота опроса джойстика - 50Гц.  20 милли секунд.
xpk2k:

--- Цитата: s_s от 29 Ноябрь 2019, 16:23:35 ---20 милли секунд
--- Конец цитаты ---
Это PAL или NTSC ?
https://www.psdevwiki.com/ps4/DS4-BT#Maximum_theoretical_update_frequency_per_second_.28Minimum_theoretical_latency.29
s_s:
PAL, я осциллографом смотрел, все измерения как бы соответствует этой темы
Даже картинку свою рисовал
megavolt85:

--- Цитата: xpk2k от 29 Ноябрь 2019, 17:08:23 ---Это PAL или NTSC ?
--- Конец цитаты ---

как правило джойстик опрашивается в кадровом прерывании, то есть для PAL 50 считываний в секунду, а для NTSC 60
у PS1 к примеру, вообще не рекомендуется делать опрос чаще
s_s:

--- Цитата: xpk2k от 29 Ноябрь 2019, 12:16:48 ---в регистр spi на отправку байта этот самый байт нужно вписывать сразу по прерыванию от считывания контроллера. пусть в 100500 раз чаще чем тот байт будет заюзан и отправлен по пинку от master-spi устрйоства. он будет забыт, забит, перезаписан великое число раз, но такова жертва в борьбе за лаг, минимальный лаг.
--- Конец цитаты ---
В данном случае есть два варианта:
1 как у меня сделано.
2 загрузить байт в spi и ждать пока мастер его не заберет, а это 20мс. Возможно за 20мс вы уже три раза кнопку нажмете. (он будет забыт, забит, перезаписан великое число раз,)
В противном случае конфликт возникает, мастер еще не забрал весь пакет 8 бит, только 4 бита забрать успел, а вы в регистр spi продолжаете пихать байты.

Теперь возьмите обычный джойстик, там вроде 4021 стоит, сдвиговый регистр, те же самые 20мс, не так ли?

И если быть точным, то не 20мс а ~10мс, мастер за 20мс запрашивает 2 пакета.
HardWareMan:
xpk2k, А кто тебе мешает измерять частоту следования этих INTов (таймеров предостаточно, можно даже каптуру использовать для этого) и на основе этой информации сделать ещё один таймер, который будет срабатывать за, например, 1мс до предполагаемого следующего INTа, и внутри прерывания которого ты опросишь джой, а уже через 1мс сразу же отдашь новое значение? В принципе, опрашивать можно во второй половине этого цикла INTов и ни один ярый борец за инпут лаг не сможет его распознать, если ты ему про это не расскажешь. Они же как аудиофилы, все сплошь верующие.

PS В принципе, даже измерять не надо. Если взять NTSC с его 16мс и сразу настроить этот таймер на сработку через 14мс, то джой будет опрашиваться на NTSC системе за -2мс а на PAL системе -6мс. Естественно, что запускать таймер надо в коде INTа.
PPS Если быть корректным, то SPI.DAT надо прогружать на прерывании от STB. Причём прямым доступом в регистр, чтобы успеть, ведь там ещё есть задержка на вход в прерывание. Не у верен, что у обсуждающих тут есть подобный скилл.
s_s:

--- Цитата: HardWareMan от 30 Ноябрь 2019, 06:08:45 ---то SPI.DAT надо прогружать на прерывании от STB
--- Конец цитаты ---
Нет, STB прижал линию и clk сразу выставляется (там 2мкс всего), и казус на линии SPI получается, отладчик это показывает. Пробовал pll разгонять, на успевает он байт загрузить.
HardWareMan:

--- Цитата: s_s от 30 Ноябрь 2019, 07:27:16 ---Нет
--- Конец цитаты ---
Да, по логике работы джойстика именно STB должен быть сигналом к загрузке актуальных данных в сдвиг. А то, что:

--- Цитата: s_s от 30 Ноябрь 2019, 07:27:16 ---на успевает он байт загрузить.
--- Конец цитаты ---
то это проблема не шерифа, верно? Среднестатистический опрос джойстика начинается вот так:

--- Код: ---LDA #$01
STA $4016
ASL
STA $4016
LDA $4016
--- Конец кода ---
Отсчёт времени возьмём от первого STA, который по факту повлияет на STB:
#1 - 8D 16 40 STA $4016 / 4 цикла шины (3 байта опкода + запись), активация STB произойдёт на 4 цикле
#2 - 1E             ASL          / 2 цикла шины (1 байт опкода + исполнение)
#3 - 8D 16 40 STA $4016 / 4 цикла шины (3 байта опкода + запись), деактивация STB произойдёт на 4 цикле
#4 - AD 00 16 LDA $4016 / 4 цикла шины (3 байта опкода + чтение), данные считаются на 4 цикле
Таким образом, между активацией STB и фактическим чтением данных проходит 2+4+3=9 циклов шины (алгоритм может не содержать ASL, может содержать там LDA # тогда будет 4+3=7 циклов, содержать STA $4016 обязан, ибо это режим регистра в джойстике). Цикл шины у PAL машины 26МГц/16, у Денди 26МГц/15, у NTSC 21/12. Т.е. 615нс, 576нс и 571нс соответственно. Посчитаем по самому короткому ради совместимости: 9 * 571 = 5139 нс или 5,1мкс (7 * 571 = 3997нс или 3,99мкс). Так о каких ты там 2мкс вёл речь? Может у тебя гранатылогик не той системы?
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии