LINUX.ORG.RU

Где взять USB-GPIO контроллер с edge-triggered прерываниями?

 ,


0

1

Приветствую.

Поскольку я (ввиду своего рукожопия) уже отчаялся собрать хотя бы простейшую плату на каком-нибудь ATTiny, а задача никуда не делась, имеем вопрос: где можно найти (уже собранный) модуль, у которого с одной стороны USB, а с другой хотя бы пара ног и земля?

При этом:

  • требуется только получение данных;
  • частоты порядка нескольких килогерц (небольшие);
  • входной сигнал цифровой, 5V;
  • хочу избежать периодического активного опроса устройства (как в FT232), т. е. чтобы оно имело некий внутренний таймер, само отслеживало фронты на входах и пинало хост, передавая новое состояние входа и timestamp.

Вообще говоря, исходная задача звучит так: нужно принимать команды по протоколу Onkyo RI (там внизу страницы есть графическое представление сигнала) и скармливать их LIRC'у.

Такое можно найти в дефолт-сити за небольшие деньги?

★★★★★

Последнее исправление: intelfx (всего исправлений: 5)

Ответ на: комментарий от aiqu6Ait

ATmega168

ATmega328

Мне не нужна ATmega за 1000 рублей. Для этой задачи хватит ATtiny45 или вообще какой-нибудь непрограммируемой IC, если такие существуют в природе.

К тому же там опять FTDI. Эта микросхема мне не подходит, она будет висеть мёртвым грузом.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 3)

Проекты V-USB уже все просмотрел? Может не на одной, но уж на двух ATTiny даже при запущенном рукожопии получится.

ilovewindows ★★★★★
()
Ответ на: комментарий от ilovewindows

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

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

А чего именно не можешь, микросхема в 20 ног, кварц, резистор и два стабилитрона это на usb-uart преобразователь, еще кварц и ATTiny на обработку прерываний и выплюнуть байты в uart. Смета 300-400 руб, пару тройку вечеров провозишься с железкой. Программу один фик писать.

ilovewindows ★★★★★
()

Если ничего не найдешь, а паять влом, купи на ибее макетку STM32F103-minimal. Там есть USB и минимальная обвязка. Через таймер с DMA реализуешь работу с этим протоколом. По прерыванию DMA выставишь ключ и в основном цикле можно будет понять, что пора обрабатывать данные.

anonymous
()
Ответ на: комментарий от ilovewindows

За 400р покупается девборда уже с USB. И не надо лепить горбатого, присовокупляя туда еще и USB<->UART.

anonymous
()
  • частоты порядка нескольких килогерц (небольшие);
  • хочу избежать периодического активного опроса устройства (как в FT232), т. е. чтобы оно имело некий внутренний таймер, само отслеживало фронты на входах и пинало хост, передавая новое состояние входа и timestamp.

Хотеть можно, но USB так спроектировали, что он всё равно может только polling. Для FS: 1 кГц, для HS: 8 кГц.

Так что можно:

  • вызывать ftdi_read() с частотой в несколько кГц и сразу получать свежие данные, ведь частота их генерации заранее известна;
  • вызывать libusb_read(), которая хоть и будет блокироваться, но на самом деле запускать активный поллинг с таймаутом. И вызываться она будет в цикле в итоге так же часто как и ftdi_read(). А также дополнительно разрабатывать логику для прошивки микроконтроллера.

Неужели 1-ый пункт настолько непривлекателен по сравнению со 2-ым?

А с какой точностью нужны timestamp?

gag ★★★★★
()
Ответ на: комментарий от anonymous

USB<->UART придется присовокупить в качестве программатора этой чуды или ST-link и что там с толерантностью к 5 вольтам. Прочем не настаиваю, хозяин барин.

ilovewindows ★★★★★
()
Ответ на: комментарий от intelfx

Там FTDI для связи с ATMEGA (у которой нет аппаратного USB-порта) с компьютером по UART. Никакого поллинга не нужно. Просто пишешь код, который будет выдавать на UART эти твои таймстампы. А в коде на хосте тупо делаешь read из последовательного порта.

Мне не нужна ATmega за 1000 рублей. Для этой задачи хватит ATtiny45 или вообще какой-нибудь непрограммируемой IC, если такие существуют в природе.

Во-первых, man AliExpress. Arduino Nano там стоит чуть больше 100 рублей, если поискать. Разумеется, не оригинал и вместо дорогой FT232 там CH340, но для твоей задачи это не имеет никакого значения (всё равно фронты будет определять ATMEGA, а CH340 используется по прямому назначению - преобразовать UART в USB, с чем она отлично справляется).

Во-вторых, стоимость написания кода для микроконтроллера за тебя явно превысит стоимость Arduino. Или у тебя там планы по производству 100500 устройств, что затраты на кодинг окупятся?

Если тебе нужно решить несложную задачу и нет желания долго с чем-то разбираться, то Arduino отличный вариант. Писать более низкоуровневый и оптимальный код - для серьёзных задач, либо если ты реально хочешь во всём разобраться (потребуется время, но результат того стоит). Судя по твоему посту, разбираться у тебя желания нет.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от gag

Хотеть можно, но USB так спроектировали, что он всё равно может только polling.

Пусть лучше этот поллинг делает хост-контроллер, а не CPU, у которого и так LA >= 2.

А с какой точностью нужны timestamp?

С точностью до сотен микросекунд, например.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от gag

Я точно не помню, но вроде у FTDI можно задать baudrate для режима bitbang. В таком случае данные будут писаться в буфер внутри FTDI с фиксированной частотой (и она может быть сильно больше нескольких килогерц). А программа на ПК уже будет их неспешно забирать (главное, чтобы буфер не переполнился). В результате можно получить частоту замеров состояния ножки гораздо выше 1 или 8 кГц. А затем уже искать моменты, когда ножка изменила своё состояние.

KivApple ★★★★★
()

а USB обязательно, UART не сойдёт?

Harald ★★★★★
()
Ответ на: комментарий от KivApple

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

Если тебе нужно решить несложную задачу и нет желания долго с чем-то разбираться, то Arduino отличный вариант. Писать более низкоуровневый и оптимальный код - для серьёзных задач, либо если ты реально хочешь во всём разобраться (потребуется время, но результат того стоит). Судя по твоему посту, разбираться у тебя желания нет.

Упырьте мел, пожалуйста. Я умею писать код, всё уже написано для V-USB и отлажено в протеусе. Мне нужно где-то найти уже собранное устройство, в которое можно залить прошивку, потому что на изготовление оного своими руками я потрачу (уже потратил) слишком много попыток, денег и времени.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от ilovewindows

У всех STM32 обычно больше половины ножек толерантны к 5 вольтам. Так что 2 ножки ТС точно найдёт. USB<->UART на некоторых девбордах встроенный. В крайнем случае никто не заставляет покупать дорогую FT232, можно взять ультрабюджетную CH340. А если брать более крутую серию, типа STM32F4xx, то там заводской бутлоадер умеет USB, так что переходник не нужен.

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

KivApple ★★★★★
()
Ответ на: комментарий от intelfx

Окей. Чем тебя не устраивает китайская Arduino Nano за 100 рублей (никто не заставляет использовать Arduino IDE, можно писать на обычном Си и работать с регистрами)? Дешевле только девборды на STM8, но там нет ни встроенного переходника USB<->UART, ни V-USB.

Хотя в принципе есть такое:

http://ru.aliexpress.com/item/1pcs-Digispark-kickstarter-development-board-AT...

Только вот разница 20 рублей, а ресурсов куда меньше. А ещё тебе потребуется покупать программатор.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 2)
Ответ на: комментарий от intelfx

всё уже написано для V-USB и отлажено в протеусе

Ну бери на али Digispark ATTINY85 за рупь двадцать
P.S. Хотя nano лучше

arson ★★★★★
()
Последнее исправление: arson (всего исправлений: 1)
Ответ на: комментарий от KivApple

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

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

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

зы.И что V-USB работает одновременно с прерываниями? Мельком смотрел, они вроде опрашивают тот же uart, usb программный с точностью до такта инструкции подбирают.

ilovewindows ★★★★★
()
Ответ на: комментарий от ilovewindows

V-USB использует одно внешнее прерывание. На ATtiny25/45/85 их два (одно полноценное и одно «pin change»).

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Пусть лучше этот поллинг делает хост-контроллер, а не CPU, у которого и так LA >= 2.

В общем случае, конечно. Но в данном случае ведь известна частота, которая и для ftdi_read() и для libusb_read() окажется всё равно одинаковая... Ага, в заголовке хотя и есть условия, но не сказано, что сигнал поступает не непрерывно, а время от времени. Вот это меняет дело - сразу бы так.

С точностью до сотен микросекунд, например.

А частота вроде как очень фиксированная: период 2 мс ==> частота 500 Гц. Т.е. сэмплить в МК на 1500 Гц было бы достаточно, а значит ресурсов наверняка хватит сразу декодировать этот простенький протокол в МК и отсылать уже готовый код вместо того, чтобы отправлять кучу данных с отпечатками и напрасно нагружать

CPU, у которого и так LA >= 2.

gag ★★★★★
()
Ответ на: комментарий от KivApple

Я точно не помню, но вроде у FTDI можно задать baudrate для режима bitbang. В таком случае данные будут писаться в буфер внутри FTDI с фиксированной частотой (и она может быть сильно больше нескольких килогерц).

И правда: до 3 МГц и до 12 МГц для H вариантов.

Но вот как же не хватает настраиваемого триггера в ftdi. И ведь не сложно было бы его им туда запихнуть, не? Бывает же просто незаменимо.

gag ★★★★★
()
Ответ на: комментарий от gag

ресурсов наверняка хватит сразу декодировать этот простенький протокол в МК и отсылать уже готовый код вместо того, чтобы отправлять кучу данных с отпечатками и напрасно нагружать CPU, у которого и так LA >= 2

Если lirc'у можно скармливать готовые коды команд вместо кучи импульсов (я хостовой частью ещё не занимался) — то да, ты определённо прав.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

В смысле? Не понял вопроса.

Отличить CH340 от FT232 - легко. У них разные USB VID:PID, USB строки описания и т. д. Я лично обычно работаю с портами через QSerialPort. И он возвращает всю эту информацию при перечислении портов. Можно сделать то же самое и вручную. Также можно пошаманить с правилами udev, чтобы создавать симлинк для интересующего устройства (опять же на основе VID:PID и прочих USB атрибутов).

Отличить две платы с CH340 сложнее. Во-первых, можно это делать по USB-порту, в который они вставлены (вроде как информацию об этом можно получить через libusb). Во-вторых, у CH340 может быть какой-то способ (у FT232 точно есть) менять некоторые параметры (сменить VID:PID, задать серийный номер и т. д.) через спецсофт. В таком случае можно использовать те же алгоритмы, что и в прошлом случае. По идее это наиболее правильный вариант.

Или ты имеешь ввиду отличить ATMEGA от CH340? Ну как бы если ты запилишь USB-устройство на базе ATMEGA, то можешь задать произвольные VID:PID, серийный номер и т. д. Плюс вообще реализовать не USB CDC, а иной интерфейс (тем более, что USB CDC не очень хорошо через V-USB делается, насколько я помню, используются нарушения стандарта USB и это работает не со всеми ОС и не на всех ядрах Linux). С этим проблем нет.

Если же ты просто будет работать с ATMEGA через UART, то с точки зрения компьютера не будет никакой ATMEGA. Будет лишь виртуальный COM-порт на базе CH340, в который можно слать байтики и из которого можно получать байтики. Микроконтроллер в свою очередь ничего не будет знать про компьютер, ему просто кто-то будет присылать байтики на его UART. Так что тут всё совершенно прозрачно и никакого различения не нужно.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от intelfx

Обычный сигнал ИК-пульта точно легко декодируется на AVR'ках. Под Arduino даже есть готовые библиотеки, если лень разбираться.

KivApple ★★★★★
()
Ответ на: комментарий от intelfx

Нет, не известны. Открыл даташит. Про смену VID:PID ни слова. Возможно, получится определять только по номеру порта. Но последнее точно реально. Зато прочитал про то, что CH340 умеет протокол инфракрасной передачи данных (надо просто приделать к ней ИК-приёмник). Так что, возможно, микроконтроллер не обязателен. Хватит платки за 40 рублей.

In infrared mode, add infrared transceiver to CH340 can compose USB infrared adapter, realize SIR infrared communication.

Supports IrDA criterion SIR infrared communication, supports baud rate varies from 2400bps to 115200bps.

The following USB infrared adapter image is composed with USB convert IrDA infrared chip CH340R and infrared transceiver U14 (ZHX1810/HSDL3000 etc).

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от KivApple

Я знаю, только мне нужно не декодировать сигнал ИК-пульта, а забрать с ресивера по проводу уже декодированный сигнал и переправить его на основную систему. Вопрос в том, можно ли lirc'у скормить не последовательность импульсов, а сразу код кнопки.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Что за ресивер ты используешь? Если под «декодировать» ты подразумеваешь демодуляцию из несущей частоты в битики, то вполне возможно, что это и есть то, что нужно подавать на вход CH340. Хотя не уверен. Но думаю, что для экономии времени тебе стоит поискать готовое решение.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

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

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Если lirc'у можно скармливать готовые коды команд вместо кучи импульсов (я хостовой частью ещё не занимался) — то да, ты определённо прав.

Т.е. таймстемпы нужны, хотя формат данных, который требует lirc ещё не прояснил? Я клоню к тому, что зная формат можно оптимизировать передачу от МК к загруженному ПК.

Кстати, вот тут решают похожую задачу, но с ftdi. И как раз интересная свежая заметка:

26 may 2016
- removed manual patching of LIRC sources because FTDI stuff is included in LIRC now

gag ★★★★★
()

ТС, покупай простецкую девборду на STM32F103 за ~400р; бери мой шаблон CDC, к нему — libopencm3 (качать с гитхаба ее нельзя, т.к. новая версия поломала обратную совместимость). Ставь opencm3, запускай make, да прошивай. Я шью через баксовый переходник USB<->UART при помощи встроенного бутлодыря; если у тебя есть st-link, можешь им шить. Утилиты stm32flash и st-link найдешь на гитхабе.

anonymous
()
Ответ на: комментарий от anonymous

Да, вместо CDC можно сделать HID, но там ограничения еще хуже: частота поллинга не выше 1кГц, размер посылки не больше 64 байт.

anonymous
()

графическое представление сигнала

Ух ты. А я тут для одной убивалки человечишек как раз такой же протокол сам придумал. Круто, можно будет на ладить свой пульт управления, а взять «лентяйку» от телека.

Насчет рукожопия. Предлагаю все таки взять FT232 (http://tixer.ru/catalog/modules/interfaces-modules/modul_usb_to_ttl_ft232rl/) и не парить людям моск. Это все элементарно делается, нужно просто аккуратно все запрогать и больше ничего. Если уж рукожопие в терминальной стадии, могу прислать прогу для ftdi которая управляет 4*60 lcd индикатором в режиме bit-bang. По аналогии сделаете свой велосипед.

yax123 ★★★★★
()
Последнее исправление: yax123 (всего исправлений: 2)
Ответ на: комментарий от yax123

Да есть у меня прога. Моё рукожопие относится к пайке, а FT232 не хочу, потому что не хочу поллить. На самом деле всё уже решено: KivApple показал, что требуемое железо можно купить на AliExpress.

intelfx ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.