| Другое > 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мкс вёл речь? Может у тебя гранатылогик не той системы? |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |