Восстановление механической клавиатуры.

kkk9
Offline
Зарегистрирован: 10.12.2018

Доброго времени суток.

Имеется 87 клавишная механическая клавиатура, у которой вышел из строя контроллер (HT32F1755).

Захотелось эту клавиатуру восстановить. По дорожкам на плате восстановил схему матрицы - используется 22 ножки микросхемы (грубо говоря, 8 горизонтальных линий и 14 вертикальных).

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

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

Но вот беда, у всех arduino платформ (кроме nano) количество выходов меньше 22. У nano их 22, но, как я понял, 2 из них не полноценные (?), да и сама nano не умеет притворяться HID устройством без программного эмулирования.

Я находил еще некую Teensy 2.0 ++, у которой выходов довольно много, но я опять же не до конца понимаю, получится ли их использовать так, как это требуется для релизации контроллера клавиатуры.

Могу описать примерный алгоритм переключения состояний портов, если это нужно.

Мне, честно, не хватает знаний и опыта, чтобы понять, как починить клавиатурку: можно ли это реализовать при помощи "простеньких" платформ типа arduino или нужно смотреть в сторону более сложных вещей (типа STM 32); если можно, то с помощью какой модели; алгоритмы для решения подобных задач на ардуино я находил, но делать новую матрицу, травить плату под нее, по возможности, не хотелось бы.

Резюмируя выше сказанное: при помощи какой платформы проще всего (без использования сторонних програторов) заставить работать сущесвующую плату клавиатуры с нанесенной на ней матрицей 8х14 ?

b707
Offline
Зарегистрирован: 26.05.2017

kkk9 пишет:

Резюмируя выше сказанное: при помощи какой платформы проще всего (без использования сторонних програторов) заставить работать сущесвующую плату клавиатуры с нанесенной на ней матрицей 8х14 ?

новая клавиатура целиком в магазине стоит от 250 до 500 рублей, то есть даже дешевле, чем многие платы ардуино. И поверьте, с вашими знаниями это самый лучший способ "отремонтировать клавиатуру"

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

+100500

mixail844
Offline
Зарегистрирован: 30.04.2012

с механическими кнопками ? в этом же весь цимес )

судя по даташиту HT32F1755 это полноценный Cortex M3 контроллер , клавиатура наверное иммет всякие рюшечки ,типа информации на экран на клавиатуре ? программируемые кнопки ? RGB подсветка ? 

вам же хочеться заставить ее работать как базовое устройство ввода ,так ? без  всяких там плюшек

kkk9
Offline
Зарегистрирован: 10.12.2018

b707 пишет:

kkk9 пишет:

Резюмируя выше сказанное: при помощи какой платформы проще всего (без использования сторонних програторов) заставить работать сущесвующую плату клавиатуры с нанесенной на ней матрицей 8х14 ?

новая клавиатура целиком в магазине стоит от 250 до 500 рублей, то есть даже дешевле, чем многие платы ардуино. И поверьте, с вашими знаниями это самый лучший способ "отремонтировать клавиатуру"

Новая мехническая клавиатура (особенно со свичами, которые были в старой) обойдется значительно дороже.

Ну и вопрос тут не про деньги, а про спортивный интерес. Я не зря написал, что мне "захотелось" отремонтировать старую клавиатуру. Мне было бы интересно это сделать. Подобные проекты другими людьми на AVR платформах успешно реализовывались. Для меня сейчас самым сложным видется подобрать платформу с необходимым количеством портов, которые могут работать в требуемых для алгоритма режимах.

mixail844 пишет:

с механическими кнопками ? в этом же весь цимес )

судя по даташиту HT32F1755 это полноценный Cortex M3 контроллер , клавиатура наверное иммет всякие рюшечки ,типа информации на экран на клавиатуре ? программируемые кнопки ? RGB подсветка ? 

вам же хочеться заставить ее работать как базовое устройство ввода ,так ? без  всяких там плюшек

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

mixail844
Offline
Зарегистрирован: 30.04.2012

кмк ,самый простой способ  : найти плату на платформе ардуино с аппаратной потдержкой usb ,например как вы и сказали на контроллере 32u4 например (Arduino Leonardo),

насколько я могу судить на платах типа Arduino Uno R3,на контроллере 328p ,стоит конвертер (PC)usb <-> uart(MCU) (который выполняет роль программатора в связке с бутлоадером вшитым в 328p контроллер) и в такой конфигурации без лишних танцев сделать из ардуины  HID устройство,ну такое себе извращение.

еще есть платы Uno на которых в качестве конвертера usb<->uart стоит еще один контроллер прошитый под это дело , и поидее его можно перепрошить на HID устройство..но нужен будет программатор

в любом случае,в платы на основе контроллеров с апаратным usb надо будет прошивать программу которая сделает из контроллера HID устройство с одной стороны и с другой стороны опрашивать выводы кнопкок на клавиатуре и в зависимости от того какие контакты замкнуты отправлять ту или иную кнопку на PC(HID) .для обоих случаев есть масса примеров в сети

если вы выберете вариант платы с нехваткой пинов для скана кнопок, можно добавить расширитель выводов типа 74ls165 ,для которого тоже есть примеры .

b707
Offline
Зарегистрирован: 26.05.2017

kkk9 пишет:

Новая мехническая клавиатура (особенно со свичами, которые были в старой) обойдется значительно дороже.

Ну и вопрос тут не про деньги, а про спортивный интерес. Я не зря написал, что мне "захотелось" отремонтировать старую клавиатуру.

ну против спортивного интереса возразить трудно, а что касается денег - то даже если ваша мезаническая клавиатура новой стоила 20 тыс рублей, восстановление ее С ВАШИМИ ЗНАНИЯМИ выйдет дороже, чем купить такую же новую

kkk9
Offline
Зарегистрирован: 10.12.2018

mixail844 пишет:

кмк ,самый простой способ  : найти плату на платформе ардуино с аппаратной потдержкой usb ,например как вы и сказали на контроллере 32u4 например (Arduino Leonardo),

Как раз для этого и создал данную тему, чтобы знающие люди помогли с выбором платформы для реализации. Из того, что я нашел, вроде, подходит Teensy ++ на AT90USB1286. Но после чтения датащита, я не смог удостовериться - можно ли конфигурировать его без программатора, как 32u4.

mixail844 пишет:

если вы выберете вариант платы с нехваткой пинов для скана кнопок, можно добавить расширитель выводов типа 74ls165 ,для которого тоже есть примеры .

Боюсь, что не понимаю, как в этом случае потребуется изменить алгоритм. Если матрица подключена напрямую к платформе: пины горизонтальных линий матрицы я переключаю с INPUT на OUTPUT (LOW) и обратно, а пины вертикальных линий матрицы с INPUT на INPUT_PULLUP и обратно, для снятия значений с каждой кнопки в цикле. А используя 74ls165, подключив на каждый пин 74ls165 по резистору, я получу все 8 портов всегда в положении INPUT_PULLUP, что вроде как не должно мне помешать ? Вот этот момент не очень понятен.

А то так можно было бы приобрести какую-нибудь arduino micro (она тоже на 32u4 и все же хотелось бы разместить платформу в корпусе клавиатуры, а леонардо слишком большая для этого), повесить к ней 74ls165 и начинать работы по восстановлению.

b707 пишет:

kkk9 пишет:

Новая мехническая клавиатура (особенно со свичами, которые были в старой) обойдется значительно дороже.

Ну и вопрос тут не про деньги, а про спортивный интерес. Я не зря написал, что мне "захотелось" отремонтировать старую клавиатуру.

ну против спортивного интереса возразить трудно, а что касается денег - то даже если ваша мезаническая клавиатура новой стоила 20 тыс рублей, восстановление ее С ВАШИМИ ЗНАНИЯМИ выйдет дороже, чем купить такую же новую

А каким образом Вы оценили мои знания ? Я просто указал, что их недостаточно для самостоятельного решения проблемы.

sadman41
Offline
Зарегистрирован: 19.10.2016

Тут еще может быть проблема в скорости. Все-таки специализированный контроллер был... 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Мне кажется, единственный подходящий вариант, если Вы хотите USB-клавиатуру - это stm32duino на stm32f103. 

Правда, "без программатора" - вряд ли получится. Дело в том, что контроллер может представиться компьютеру либо как Ардуино, и тогда его можно запрограммировать, либо как клавиатура. Как только Вы запрограммируете контроллер как клавиатуру, в дальнейшем для его перепрограммирования, даже отладки, нужна будет внешняя плата: ST-Link, USB-UART либо еще что подобное.

b707
Offline
Зарегистрирован: 26.05.2017

andriano пишет:

Мне кажется, единственный подходящий вариант, если Вы хотите USB-клавиатуру - это stm32duino на stm32f103. 

 

а разве stm32f103 может притворятся HID-устройством?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Если у него родной USB - почему нет?

kkk9
Offline
Зарегистрирован: 10.12.2018

sadman41 пишет:

Тут еще может быть проблема в скорости. Все-таки специализированный контроллер был... 

И да, и нет. Я понимаю, что скорость опроса у AVR платформы выйдет меньше, чем была у полноценного Cortex M3 контроллера. Однако, в случае успеха, клавиатура будет использоваться для простейших "офисных" задач, для которых частота опроса должна быть приемлимой.

andriano пишет:

Мне кажется, единственный подходящий вариант, если Вы хотите USB-клавиатуру - это stm32duino на stm32f103. 

Правда, "без программатора" - вряд ли получится. Дело в том, что контроллер может представиться компьютеру либо как Ардуино, и тогда его можно запрограммировать, либо как клавиатура. Как только Вы запрограммируете контроллер как клавиатуру, в дальнейшем для его перепрограммирования, даже отладки, нужна будет внешняя плата: ST-Link, USB-UART либо еще что подобное.

Да, я тоже думал об использовании STM 32 платформы, но отпугивает необходимость использования переходника с USB на UART. Еще видел информацию: ардуинки на 32u4 можно запрограммировать таким образом, что нажатие на кнопку будет возвращать девайс в "программируемое" состояние из состояния "притвориться клавиатурой". Жаль тогда не обратил должного внимания на эту информацию, теперь вот не могу найти - может быть я не так понял автора ?

b707
Offline
Зарегистрирован: 26.05.2017

andriano пишет:

Если у него родной USB - почему нет?

я не спорю, но что ни разу об этом не слышал.

b707
Offline
Зарегистрирован: 26.05.2017

kkk9 пишет:

Да, я тоже думал об использовании STM 32 платформы, но отпугивает необходимость использования переходника с USB на UART.

такой переходник стоит 100 рублей, о чем разговор...

Вообще, если вы действительно решили самостоятельно разобраться с клавиатурой - то не надейтесь решить вопрос с наскока. По уму для начала надо попробовать силы на паре-тройке простых проектов. Это вопрос погружения в тему на полгода-год. И без паяльника и программаиторов вы все равно не обойдетесь.

kost82
Offline
Зарегистрирован: 30.11.2015

kkk9 пишет:

Имеется 87 клавишная механическая клавиатура, у которой вышел из строя контроллер (HT32F1755).

Захотелось эту клавиатуру восстановить. По дорожкам на плате восстановил схему матрицы - используется 22 ножки микросхемы (грубо говоря, 8 горизонтальных линий и 14 вертикальных).

Но вот беда, у всех arduino платформ (кроме nano) количество выходов меньше 22. У nano их 22, но, как я понял, 2 из них не полноценные (?), да и сама nano не умеет притворяться HID устройством без программного эмулирования.

Если посчитать, то 8х14=112, возможно не все дорожки задействованы и ардуиновских ножек Вам вполне хватит. Мне кажется, что Вы зря пытаетесь решить сразу две проблемы: нехватку ног и превращение ардуинки в HID-устройство. ИМХО - решите сначала одну: научитесь передавать сигналы от клавиатуры, а потом будете решать вторую (если она все-таки возникнет). 

А пока занимаетесь решением - можно заказать в Китае программатор, или еще какие нужные детальки.

kkk9
Offline
Зарегистрирован: 10.12.2018

b707 пишет:

kkk9 пишет:

Да, я тоже думал об использовании STM 32 платформы, но отпугивает необходимость использования переходника с USB на UART.

такой переходник стоит 100 рублей, о чем разговор...

Вообще, если вы действительно решили самостоятельно разобраться с клавиатурой - то не надейтесь решить вопрос с наскока. По уму для начала надо попробовать силы на паре-тройке простых проектов. Это вопрос погружения в тему на полгода-год. И без паяльника и программаиторов вы все равно не обойдетесь.

Нет, если при помощи arduino micro + 74ls165 нельзя реализовать алгоритм опроса матрицы, то никаких проблем с использованием программатора (равно как и паяльника) нет. Хотелось бы без него, но если другие варианты не подойдут - проблем с покупкой и использованием не возникнет.

 

kost82 пишет:

Если посчитать, то 8х14=112, возможно не все дорожки задействованы и ардуиновских ножек Вам вполне хватит. Мне кажется, что Вы зря пытаетесь решить сразу две проблемы: нехватку ног и превращение ардуинки в HID-устройство. ИМХО - решите сначала одну: научитесь передавать сигналы от клавиатуры, а потом будете решать вторую (если она все-таки возникнет). 

А пока занимаетесь решением - можно заказать в Китае программатор, или еще какие нужные детальки.

Вы правы в своих вычислениях, но я восстанавливал матрицу по дорожкам на имеющейся плате - там действительно 8х14 - просто не все линии пересекаются между собой.

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

mixail844
Offline
Зарегистрирован: 30.04.2012

kkk9 пишет:

Eще видел информацию: ардуинки на 32u4 можно запрограммировать таким образом, что нажатие на кнопку будет возвращать девайс в "программируемое" состояние из состояния "притвориться клавиатурой"

не знаю насчет в Atmel32u4 но в STM32 такая вещь точно есть,называеться IAP(Internal Application Programmer ) как раз предназначена для прошивки без программатора,На некоторых(не на всех) контроллерах семейства STM32f1xx, IAP умеет ввводить встроенный в контроллер интерфейс USB в DFU (Download Firmware Update) Контроллер вводиться в этот режим(IAP) при помощи пинов Boot1 и Boot0. насколько я понял из диагонального чтения статьи : https://medium.com/@paramaggarwal/programming-an-stm32f103-board-using-usb-port-blue-pill-953cec0dbc8

они как раз и используют (по USART , возможно так как встроенный в контроллер bootloader(в System Memory) не потдерживает работу по USB) режим и Python Script для того что бы прошить дуиновский bootloader который позволит прошивать STM32 через встроенный USB порт.А не (только) через UART .

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kkk9 пишет:

Доброго времени суток.

Имеется 87 клавишная механическая клавиатура, у которой вышел из строя контроллер (HT32F1755).

А по каким признакам вы решили, что он вышел из строя?

kkk9
Offline
Зарегистрирован: 10.12.2018

mixail844 пишет:

не знаю насчет в Atmel32u4 но в STM32 такая вещь точно есть,называеться IAP(Internal Application Programmer ) как раз предназначена для прошивки без программатора,На некоторых(не на всех) контроллерах семейства STM32f1xx, IAP умеет ввводить встроенный в контроллер интерфейс USB в DFU (Download Firmware Update) Контроллер вводиться в этот режим(IAP) при помощи пинов Boot1 и Boot0. насколько я понял из диагонального чтения статьи : https://medium.com/@paramaggarwal/programming-an-stm32f103-board-using-usb-port-blue-pill-953cec0dbc86

они как раз и используют (по USART , возможно так как встроенный в контроллер bootloader(в System Memory) не потдерживает работу по USB) режим и Python Script для того что бы прошить дуиновский bootloader который позволит прошивать STM32 через встроенный USB порт.А не (только) через UART .

Да, я читал уже подобную статью. Что ж, видимо, остановлюсь на варианте с STM32. А можно поподробнее про "на некоторых(не на всех) контроллерах семейства STM32f1xx, IAP умеет ввводить встроенный в контроллер интерфейс USB в DFU" ? Где бы почитать, какие умеют, какие не умеют.

PS: у Вас ссылка с ошибкой вставлена - не хватает цифры "6" в конце.

dimax пишет:

А по каким признакам вы решили, что он вышел из строя?

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

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kkk9 пишет:

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

Вот поменяете вы мк, подключите, и опять получите "большое кол-во символов" и  что тогда? :) На мой взгляд из вашего описания  как раз можно сделать вывод о исправности МК .

mixail844
Offline
Зарегистрирован: 30.04.2012

kkk9 пишет:

Да, я читал уже подобную статью. Что ж, видимо, остановлюсь на варианте с STM32. А можно поподробнее про "на некоторых(не на всех) контроллерах семейства STM32f1xx, IAP умеет ввводить встроенный в контроллер интерфейс USB в DFU" ? Где бы почитать, какие умеют, какие не умеют.

для начала вот здесь : https://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf

стр 60 - 62 .судя по описаному там ,из корообки возможность перепрошиваться по USB без программатора умеют т.н. connectivity line .т.е. : 

https://www.st.com/en/microcontrollers/stm32f107vc.html

линейка stm32f103 умеет шиться через usart .

о процессе/возможностях прошивки без программатора,можно почитать тут : 

https://www.st.com/content/ccc/resource/technical/document/application_n...

 

kkk9
Offline
Зарегистрирован: 10.12.2018

dimax пишет:

Вот поменяете вы мк, подключите, и опять получите "большое кол-во символов" и  что тогда? :) На мой взгляд из вашего описания  как раз можно сделать вывод о исправности МК .

Предложите свои причины данной неисправности ? Проблема точно не в кнопках: во-первых, вероятность того, что все 87 кнопок одновременно начали работать не так, как задуманно - мала; во-вторых, я выпаял все кнопки и замыкал контакты непосредственно на плате - результат такой же. Печатается большое кол-во символов, соответсвующих замкнутым контактам, их количество пропорционально времени контакта.

mixail844 пишет:

для начала вот здесь : https://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf

стр 60 - 62 .судя по описаному там ,из корообки возможность перепрошиваться по USB без программатора умеют т.н. connectivity line .т.е. : 

https://www.st.com/en/microcontrollers/stm32f107vc.html

линейка stm32f103 умеет шиться через usart .

о процессе/возможностях прошивки без программатора,можно почитать тут : 

https://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf

Тут нужно вдумчиво почитать, вечером займусь.

И все же меня не отпускает вопрос использования arduino micro + 74ls165. Используя сдвиговый резистор я теряю возможность менять режим порта с INPUT на INPUT_PULLUP. Но сам по себе INPUT_PULLUP это ведь тот же INPUT, но с подтянутым резистором, замкнутым на землю, что позволяет инвертировать логический ноль, который будет на пине в момент считывания нажатия кнопки в логическую единицу ? Получается, что все используемые пины 74ls165 я могу соединить с внешним резистором, замкнутым на землю и всегда считывать инвертированный сигнал с этих пинов или вообще использовать инверсный вывод 74ls165 без резисторов ? Правда, я не знаю, какого номинала нужен резистор и есть ли какие-нибудь отрицательные моменты у такой схемы подключения.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kkk9 пишет:

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

Ну и что, это всё не указывает прямо, что МК неисправен.  Я бы сначала всё досканально проверил, -питание на напряжение и пульсации. тактовую частоту на стабильность, весь путь от клавиатуры до МК  тщательно проверить на непропаи и микротрещины, посмотреть осциллографом какой сигнал поступает на МК в момент нажатия и после отжатия кнопки.  Поискать в интернете, возможно есть прошивка для этого МК, перешить. Это то, что сходу пришло в голову не видя платы. После осмотра может ещё какие нибудь идеи появились. Но дело конечно ваше, просто починить всяко проще чем делать с нуля свой контроллер клавиатуры.

kkk9
Offline
Зарегистрирован: 10.12.2018

dimax пишет:

Ну и что, это всё не указывает прямо, что МК неисправен.  Я бы сначала всё досканально проверил, -питание на напряжение и пульсации. тактовую частоту на стабильность, весь путь от клавиатуры до МК  тщательно проверить на непропаи и микротрещины, посмотреть осциллографом какой сигнал поступает на МК в момент нажатия и после отжатия кнопки.  Поискать в интернете, возможно есть прошивка для этого МК, перешить. Это то, что сходу пришло в голову не видя платы. После осмотра может ещё какие нибудь идеи появились. Но дело конечно ваше, просто починить всяко проще чем делать с нуля свой контроллер клавиатуры.

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

mixail844
Offline
Зарегистрирован: 30.04.2012

я 74ls165 привел как пример, под который есть готовый код.

но так же можно попорбывать поискать более "направленные " решения, например http://sprintek.com/products/sk5100.aspx

или http://www.ti.com/lit/ds/symlink/tca8418.pdf

или http://www.ti.com/lit/ds/symlink/lm8330.pdf

https://toshiba.semicon-storage.com/info/docget.jsp?did=30199&prodName=TC35894FG

то есть,для того же 74ls165 кода дофига ..а с другой стороны а получиться ли потом эмулировать сочетания типа "Ctrl-C"

а под "целенаправленные" далеко не факт что будут драйвера(хотя периферия не самая сложная, можно и самому осилить) и готовая платка(что бы припаять лече было)

если не подойдет/не найдете решения конкретно под ваш случай,стоит искать что то вроде "GPIO Expander" ,еще можно сделать на демультиплексерах типа 74ls138 (этот 8 -> 1 , но так же можно поискать 16 -> 1 и т.д.) тоже надо "подсчитать сколько пинов будет надо.

kkk9
Offline
Зарегистрирован: 10.12.2018

mixail844 пишет:

я 74ls165 привел как пример, под который есть готовый код.

но так же можно попорбывать поискать более "направленные " решения, например http://sprintek.com/products/sk5100.aspx

или http://www.ti.com/lit/ds/symlink/tca8418.pdf

или http://www.ti.com/lit/ds/symlink/lm8330.pdf

https://toshiba.semicon-storage.com/info/docget.jsp?did=30199&prodName=TC35894FG

то есть,для того же 74ls165 кода дофига ..а с другой стороны а получиться ли потом эмулировать сочетания типа "Ctrl-C"

а под "целенаправленные" далеко не факт что будут драйвера(хотя периферия не самая сложная, можно и самому осилить) и готовая платка(что бы припаять лече было)

если не подойдет/не найдете решения конкретно под ваш случай,стоит искать что то вроде "GPIO Expander" ,еще можно сделать на демультиплексерах типа 74ls138 (этот 8 -> 1 , но так же можно поискать 16 -> 1 и т.д.) тоже надо "подсчитать сколько пинов будет надо.

Ох, боюсь, в "целенаправленных" нужно будет капитально разбираться, тут сходу понятно, что ничего не понятно. А вот "GPIO Expander" выглядит очень многообещающе, спасибо !

MaksVV
Offline
Зарегистрирован: 06.08.2015

 

kkk9 пишет:
Но сам по себе INPUT_PULLUP это ведь тот же INPUT, но с подтянутым резистором, замкнутым на землю

Эмм, замкнутым на питание!

kkk9
Offline
Зарегистрирован: 10.12.2018

MaksVV пишет:

 

kkk9 пишет:
Но сам по себе INPUT_PULLUP это ведь тот же INPUT, но с подтянутым резистором, замкнутым на землю

Эмм, замкнутым на питание!

Да, Вы правы. Перепутал. UP - питание, DOWN - земля.

MaksVV
Offline
Зарегистрирован: 06.08.2015

kkk9 пишет:

mixail844 пишет:

если вы выберете вариант платы с нехваткой пинов для скана кнопок, можно добавить расширитель выводов типа 74ls165 ,для которого тоже есть примеры .

Боюсь, что не понимаю, как в этом случае потребуется изменить алгоритм. Если матрица подключена напрямую к платформе: пины горизонтальных линий матрицы я переключаю с INPUT на OUTPUT (LOW) и обратно, а пины вертикальных линий матрицы с INPUT на INPUT_PULLUP и обратно, для снятия значений с каждой кнопки в цикле. А используя 74ls165, подключив на каждый пин 74ls165 по резистору, я получу все 8 портов всегда в положении INPUT_PULLUP, что вроде как не должно мне помешать ? Вот этот момент не очень понятен.

может использовать MCP23017? у неё есть внутренняя подтяжка к питанию 100K, активируемая программно. Вот примерно так в библиотеке к ней 

  mcp.begin();      // use default address 0
  mcp.pinMode(9, INPUT);
  mcp.pullUp(9, HIGH);  // turn on a 100K pullup internally

 

kkk9
Offline
Зарегистрирован: 10.12.2018

MaksVV пишет:

может использовать MCP23017? у неё есть внутренняя подтяжка к питанию 100K, активируемая программно. Вот примерно так в библиотеке к ней 

  mcp.begin();      // use default address 0
  mcp.pinMode(9, INPUT);
  mcp.pullUp(9, HIGH);  // turn on a 100K pullup internally

 

Спасибо за наводку! Посмотрел - можно даже в городе моем купить. Думаю, на выходных приобрету arduino micro, этот чип и буду уже пробовать с программной частью экспериментировать.

kkk9
Offline
Зарегистрирован: 10.12.2018

К сожалению, не было времени на этот "проектик" - только сейчас руки дошли.

Не нашел в продаже у себя в городе MCP23017 или аналог, но нашел плату на STM32F103. Взял ее. Прошил через UART ардуиновский лоадер - шьется через USB и Arduino IDE без проблем. Подключил матрицу с платы клавиатуры. Запустил простенький скрипт, который сканирует эту матрицу и посылает на комп через виртуальный COM порт. Можно сказать, что нажатия кнопок регистрируются.

Но вот создать прошивку для STM32 не через Arduino IDE оказалось для меня сложноватой задачкой.

Поэтому ищу людей, у которых есть возможность и желание помочь мне с созданием контроллера для клавиатуры из STM32.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kkk9 пишет:

Но вот создать прошивку для STM32 не через Arduino IDE оказалось для меня сложноватой задачкой.

А нах зачем? :) Наоборот ардуина ide  даёт массу удобств, хотя бы в виде готовой библиотеки usbcomposite. Собссно подцепить егойный  *.h  и дописать эмуляцию кажой кнопки через keyboard.press() и дело в шляпе.

kkk9
Offline
Зарегистрирован: 10.12.2018

dimax пишет:

kkk9 пишет:

Но вот создать прошивку для STM32 не через Arduino IDE оказалось для меня сложноватой задачкой.

А нах зачем? :) Наоборот ардуина ide  даёт массу удобств, хотя бы в виде готовой библиотеки usbcomposite. Собссно подцепить егойный  *.h  и дописать эмуляцию кажой кнопки через keyboard.press() и дело в шляпе.

Я решил начать с подключения STM32, как HID устройство. И у меня сразу же возникли проблемы с "ST's mouse example". Создал в кубе проект, открыл его в uVision. Так как я пытаюсь повторить инструкцию другого человека из интернета, то далее я должен добавить в код изменение координат указателя мыши. Однако, почему-то Vision начинает ругаться на &hUsbDeviceFS, говоря, что он не объявлен. Хотя он действительно (по крайней мере явно) ни в main.c, ни в main.h не объявлен, он объявляется в usb_device.c, и найти где-то методы исправления этой ошибки мне не удалось.

UPD: все-таки смог завести "ST's mouse example"! Плата успешно прошилась hex файлом через UART, определилась системой как HID и курсор на экране начал двигаться.

kkk9
Offline
Зарегистрирован: 10.12.2018

dimax пишет:

kkk9 пишет:

Но вот создать прошивку для STM32 не через Arduino IDE оказалось для меня сложноватой задачкой.

готовой библиотеки usbcomposite. Собссно подцепить егойный  *.h  и дописать эмуляцию кажой кнопки через keyboard.press() и дело в шляпе.

Не знаю, возможно, когда-то она была готовой. Но теперь ее использование не видится возможным. Попытался запустить готовые примеры из этой библиотеки, сперва сыпет ошибками в файлах библиотеки - поправил. Начало сыпать ошибками в файлах ядра Roger'a (которое позволяет компилить скетчи для stm32). На гитхабе автора usbcomposite есть темка о соответствующей проблеме, созданная месяц назад.

UPD: обновил ядро (аж 2 раза на всякий), проблема решилась. Возможно, что-то криво скопировалось изначально.

kkk9
Offline
Зарегистрирован: 10.12.2018

Получилось! Основные функции клавиатуры успешно восстановлены. После "доработки напильником" библиотеки usbcomposite (там не хватает кнопок print screen, scroll lock и pause break, а так же надо было придумать какое-то применение для кнопки Fn - повесил туда комбинацию win+L) удалось заставить работать все кнопки. Тестирую уже второй день, сейчас пишу с нее - вроде, работает. Каких-то багов пока не заметил.

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

Для тех, кто, возможно, столкнется с подобной проблемой и попадет на этот форум, оставляю своих действий:

1. Я начал с того, что полностью восстановил по дорожкам на имеющейся плате матрицу клавиатуры - выяснил каким пересечениям какие кнопки соответствуют и сколько минимум мне нужно пинов на платформе, которая заменит контроллер (в моем случае - 22).

2. Исходя из количества пинов выбрал платформу - STM32F103C8T6.

3. При помощи USB -> UART переходника прошил стмке ардуиновский лоадер, чтобы у меня была возможность прошивать платформу по USB через arduino IDE. Репозиторий автора этого проекта (там же есть инструкция по установке): https://github.com/rogerclarkmelbourne/Arduino_STM32

4. Модифицировал простенький код для просмотра и последующей печати состояния матрицы с помощью библиотеки usbcomposite (после какой-то версии стала распространяться вместе с ардуиновским лоадером для стмки) - вместо простой печати состояния через serial port, начал отправлять через usb командами keyboard.press() + keyboard.release(). Код взял тут: https://www.baldengineer.com/arduino-keyboard-matrix-tutorial.html

5. В библиотеке usbcomposite (равно как и в библиотеке для arduino - keyboard) есть существенный недостаток - отсутствуют кнопки print screen, scroll lock, pause break и menu/application key. В файле keywords.txt в корне библиотеки находится список переменных, используемых в библиотеке, там же можно посмотреть имена переменных для служебных клавиш типа win, ctrl, alt и тд (кстати клавиша win там называется GUI). Сами же переменные объявляются в USBHID.h

Но ардуиновская библиотка использует не HID коды клавиш, поэтому для добавления своих кнопок можно воспользоваться простым правилом (тут все цифры указаны в десятичной системе, но в USBHID.h нужно будет записать число в шестнадцатеричной): <ардуиновский код клавиши> = <HID code> + 136 Сумма не должна превышать 255.

Вот собственно и все. Еще хотелось бы сказать, что stm32 в режимах  0; 0 на boot0; boot1, соответственно, в первые мгновения после запуска работает в режиме DFU и может быть прошита через arduino ide - достаточно нажать "upload" и дождаться, пока программа скомпилит код и начнет ожидать устройство - нажимаем ресет на стмке - процесс перепрошивки начнется. А то я по незнанию сперва после каждой попытки перешивал его через USB -> UART ух и намучался. :D

MaksVV
Offline
Зарегистрирован: 06.08.2015

да, стм рулит однако.