Jump to content

    

Eddy_Em

Участник
  • Content Count

    1389
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Eddy_Em

  • Rank
    Профессионал
  • Birthday 11/25/1980

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

6632 profile views
  1. Потому что это — полноценный преобразователь USB-serial, а стандартный CDC идет еще и как модем (но мне подсказали, что в дескрипторах писать, чтобы modemd не захватывал устройство, в "семипортовом" я так и сделал; но все равно мне больше нравится /dev/ttyUSBx, чем /dev/ttyACMx ☺). Я "смотрел в книгу и видел фигу": не нашел вообще в стандарте, что должно по interrupt передаваться, поэтому и в реализации CDC я просто игнорирую эту точку (хоть в дескрипторе она и есть — но ведь все равно она IN, так что компьютер по ней ничего не пришлет). Так в том-то и дело, что никто не парится реализацией преобразователей USB-serial, их же как грязи! Другое дело — как в вашем случае, когда можно добавить "виртуальные интерфейсы" для каких-либо целей (типа настройки и управления). Я как-то на коленке сниффер RS-232 делал, вот, как раз такую штуку очень даже удобно будет использовать: Rx одного USART будет слушать Rx, а Rx другого — слушать Tx. Но здесь уже надо будет внутри устройства это дело объединять, чтобы в один CDC всю информацию засылать... Вот это, кстати, — одна из причин, по которой эмулировать PL2303 может быть выгодно: во-первых, нет проблем с VID/PID; во-вторых, "из коробки" работает почти на всех дистрибутивах (ну, в генте или слаке нужно будет модуль ядра собрать, но это — дело пары минут). Можно, конечно, сделать "классический CDC" и использовать какие-нибудь незанятые VID/PID, но где гарантия, что через N лет их не займут? И в этом случае получится конфликт: udev создаст на чужую железку в вашей системе симлинк на /dev/ttyACMx, но фактически это будет какая-нибудь 3D-видеокамера…
  2. В моих поделках CDC используются исключительно для общения МК с компьютером. Я не делаю физических преобразователей с 232/485 на USB. В общем, мне и уведомления никакие не нужны. Кстати, при разработке эмулятора PL2303 я, чтобы не реверсить китайские подделки, взял всю необходимую информацию из модуля ядра. Понятно, что его делали по реверсу (иначе там бы не было комментариев вроде "ХЗ, зачем это нужно, но без этого не работает). Но вот конечная точка Interrupt там используется только номинально! Во многих других CDC она вообще не используется…
  3. Я уже в подобном споре участвовал. И прикола ради написал СЕМЬ CDC на одном STM32F103 (понятно, что без аппаратного коннекта с UART)!!! И протестировал их работу. Все ОК.
  4. В порядке бреда (а точней - ради разрешения спора) сделал 7 USB-CDC на одном STM32F103. Понятно, что из-за его малюсенького буфера USB, пришлось сильно ограничить буферы CDC. Но оно работало в простых тестах. Другое дело - что не нужно обычно так много. Вот два CDC на одном МК вполне можно запилить: скажем, один для коммуникации с МК, второй — для каких-либо настроек или отладки. Вот, кстати, подумал, что в моем переходничке CAN-USB можно было бы именно так разделить собственно работу с шиной и команды (при обильном потоке данных приходится набирать команды вслепую - по крайней мере, команду паузы).
  5. Какие именно? Я вот несколько раз брал на али по десятку STM32F103CBT6 и STM32F072CBT6. Первые - около 9 баксов за десяток, вторые - 10. 20-ногие F030 вообще урвал как-то по тридцатке, когда доллар был еще 70. Что до "али - это ж помойка", у меня есть небольшой самодельный стендик, на котором без пайки я могу проверить МК. Сразу же из партии беру несколько штук и проверяю. Пока что на брак ни разу не нарывался. Разве что покупал я эти МК обычно с маркировкой "C8", а приходили — "CB" (т.е. на них тоже написано 8, но флеша в реальности 128кБ, а не 64).
  6. У старых "малин" была же проблема: ethernet сидит на USB, поэтому при интенсивном обмене с какой-нибудь железякой по USB подвисает сеть. И наоборот. В общем, может - это ваш случай?
  7. Никто не мешает вам написать для него модуль ядра: udev при подключении создаст /dev/i2c, а модуль ядра будет обрабатывать запросы. Но на мой взгляд, проще таки CDC сделать и в юзерспейсе работать.
  8. С чего же "ужос", если он 25 рублей стоит? Или у вас на примете есть STM32 с USB за 25 рублей? Вот у меня, например, реально есть куча задач, где нужен дешевый маленький микроконтроллер с USB и несколькими ногами. А здесь есть аппаратный ШИМ, поддержка сенсорных кнопок… В общем, как соберусь с духом, перепишу прошивалку с питона на кошерный С и буду осваивать ch55x.
  9. Вот картинка. Жаль, конечно, что ST так сделали, что считать внешние импульсы или обрабатывать энкодер можно лишь на каналах 1 и 2… А еще всякие TIM14 и т.д. не умеют считать! В вышеприведенной железяке сам на это напоролся, разведя плату так, чтобы частоту вращения второго кулера считать первым каналом TIM14, пришлось делать это на EXTI.
  10. Вот здесь у меня STM32F072 считает импульсы от вентилятора первым каналом таймера 3. Так настраиваю: RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; TIM3->SMCR = TIM_SMCR_TS_2 | TIM_SMCR_TS_0 | TIM_SMCR_SMS; // TS=101, SMS=111 - external trigger on input1 TIM3->CCMR1 = TIM_CCMR1_CC1S_0; // CC1 is input mapped on channel TI1 TIM3->CR1 = TIM_CR1_CE Так считаю: void sys_tick_handler(void){ static uint32_t actr = 0; ++Tms; if(++actr == 1000){ // RPM counter Coolerspeed[0] = TIM3->CNT/2; TIM3->CNT = 0; actr = 0; } }
  11. Я вчера вечером ковырялся с ch552g. Нашел на гитхабе несколько примеров (правда, писанных в "макаронном стиле", но работающих). Среди них был посредник I2C<>USB, представляющийся как раз CDC-ACM устройством. Его не проверял, но их реализацию CDC-ACM проверил: работает. В принципе, если не нужно это переделывать, то можно такой "макаронный" код и оставить без переделки. Я же хочу сначала все в порядок привести, чтобы глаза не вытекали, когда на это смотришь. Так что, подумайте насчет того, чтобы взять на али с пяток-десяток ch552g (вчера брал десяток: 225р отдал вместе с пересылкой), заказать на JLCPCB платы и наваять свой адаптер. А при необходимости и протокол можно будет под себя переделать (там достаточно сыро все: частота только 100 кГц и посылки по 16 бит).
  12. Классная штука, наверняка детям интересно будет. А еще можно на двух фотоэлементах и дискретной рассыпухе сделать простенькую тележку-робота, которая будет по контрастной полосе ехать (белой на черном фоне или черной на белом). Заодно дети поймут принцип работы фоторезистора и операционного усилителя. Можно пошукать по старым подборкам журналов "радио", "юный техник" и "моделист-конструктор" подобные несложные электрические игрушки. Еще рекомендую почитать подборку из разряда "555 схем на 555". На этом генераторе можно много интересных штук сделать: скажем, если резистором изменять заполнение ШИМ, можно эдакий сельсин на сервомоторчике собрать; а если резистором менять частоту меандра — управлялку шаговым двигателем (на каком-нибудь недорогом модуле с алиэкспресса, вроде DRV8825). Добавляем сдвиговый регистр - получаем "бегущий огонь" на линейке светодиодов. Тем же способом можно автоматический светофор сделать (когда я был маленький, мне приходилось делать из жести контактор, сажать его на вал двигателя и таким образом "автоматизировать" переключение лампочек игрушечного светофора; а сейчас все так просто). Дальше с игрушками: берем на алиэкспрессе радиоуправляемый блок релюшек, встраиваем его в готовую игрушку без радиоуправления (машинку, танк и т.п.) и получаем возможность дистанционно ее гонять. В общем, без программирования легко увлечь детей радиоэлектроникой. И ну ее нафиг, эту ардуину: тупая копипаста "скетчей" ничего хорошего не даст, дети таким образом не поймут принцип работы того, что "сделали"!
  13. А ведь за 3 дня можно было взять любую девборду с совершенно любым МК (лишь бы там были I2C и USB), да написать преобразователь самостоятельно. Заодно не пришлось бы изучать чужие даташиты на протокол: какой придумаешь сам, такой и будет!
  14. Если что, самый легкий язык - ассемблер. На втором месте — С. Чуть сложней С — бейсик, далее идет паскаль. После паскаля — фортран. Думаю, за фортраном можно javascript поместить. С++ уже, наверное, позиций через 10 после жабоскрипта (до него идут D и некоторые другие не популярные ЯП, вроде брейнфака). Еще позиций через 10 после С++ (в этом промежутке: C#, rust, go и т.п.) идет python. Ну и как назвать питон легким языком? А если детям захочется архитектуру операционных систем изучать, можно им дать код линукса 0.1 — там совсем немного, зато познавательно. А потом можно что-нибудь посложней — вроде RTOS — почитать.