USB-индикатор со сторожевым устройством и кнопками для использования в Linux

ArticleCategory: [Choose a category, do not translate this]

Hardware

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Guido Socher

en to ru Пухляков Дмитрий

AboutTheAuthor:[A small biography about the author]

Гвидо любит Linux потому, что считает его раем для тех кто хочет создавать собственное программное и аппаратное обеспечение.

Abstract:[Here you write a little summary]

Настоящая статья являет собой результат положительной обратной связи с читателями по моим предыдущим публикациям . Читатели LinuxFocus потрясающая аудитория! Некоторых из вас интересует вопрос интерфейса с шиной USB. Предлагаю вам прекрасное решение. Воспользуемся ЖКИ-индикатором построенным в майской статье 2002 года и теперь заставим его работать с USB. Питание нашего индикатора возьмем прямо с шины USB. Таким образом избавимся от необходимости во внешнем источнике питания.

Для начала вам необходимо установить средства разработки для AVR под Linux. Как это сделать описано в моей статье: Программирование микроконтроллеров AVR с использованием GCC.

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

Введение

Преимуществом использования USB является то, что это современный широкоиспользуемый интерфейс и он предоставляет возможность получить питание для ваших устройств непосредственно от шины. Малогабаритный разъем и большая пропускная способность позволяют прогонять огромное количество информации через небольшой кабель. Это положительные стороны USB. С другой стороны разработка аппаратной части усложняется высокими рабочими частотами шины и достаточно непростым протоколом. Только взгляните на спецификации USB (http://www.usb.org/developers/, вам нужна спецификация 1.1) и вы прийдете в ужас. Сложный для изучения описание в 327 страниц. Немудрено, что так много USB устройств с отклонением от стандарта. Более доходчивое описание можно найти на http://www.beyondlogic.org/, но и оно достаточно сложное.

Что же делать? Как подключить наш микроконтроллер к шине USB? У шотландской компании FTDI есть на это ответ (http://www.ftdichip.com). Они предлагают микросхему реализующую мост rs232-USB. С одной стороны у микросхемы FT232BM интерфейс rs232 с другой USB. Другими словами выбрасываем MAX232 использовавшийся нами для связи по rs232, устанавливаем FT232BM и вперед.

Драйвер

FT232BM кроссплатформенное решение. Драйверы поставляются для множества операционных систем. Модуль ядра Linux называется ftdi-sio и распространяется как open source. Он является частью стандартного ядра Linux. FT232BM предоставляет больше чем просто интерфейс USB-rs232 и модуль ядра Linux до сх пор находится в стадии разработки предоставляя все больше и больше возможностей. Тем не менее интерфейс USB-rs232 уже функционален и я использовал стандартное ядро Redhat 7.3 (2.4.18) без каких бы то ни было перекомпилирований и модификаций. Просто подключился и все.

ftdi_sio разрабатывался здесь http://ftdi-usb-sio.sourceforge.net/.

На моем Redhat 7.3 все модули загружаются автоматически при подключении устройства к разъему USB. Если у вас этого не происходит, убедитесь, что у вас установлены следующие модули (для USB-UHCI):

/sbin/lsmod usb-uhci
/sbin/lsmod usbcore
/sbin/lsmod usbserial
/sbin/lsmod ftdi_sio

Для работы с устройством используйте /dev/ttyUSB0

Разработчики ftdi_sio рекомендуют использовать ядро 2.4.20, но как видите 2.4.18 так же работает (по крайней мере с набором необходимых нам функций).

Схема

Схема перед вами. Вам необходимо установить FT232BM между линиями Rx/Tx микроконтроллера и разъемом USB. Кварц 6 МГц и другие компоненты установлены согласно рекомендованной схеме включения от FTDI. Ферритовое кольцо ( на схеме слева) - небольшая катушка выступающая в качестве ВЧ фильтра (рабочая частота шины USB - 48МГц). Можно в качестве катушки использовать резистор номиналом 1 кОм, на котором намотать 10 витков тонкого провода.

schematic
Хочу обратить ваше внимание на потребляемую устройством от шины USB мощность. Потребляемый от шины USB ток не должен превышать 100 мА. Кроме того ваше устройство должно поддерживать режим пониженного потребления. Когда вывод "sleep" FT232BM перейдет в состояние "0" ваше устройство должно перейти в режим пониженного потребления и при этом оно должно потреблять не более 0.5 мА. Позже вы увидите, что это достаточно жесткие требования для нашего устройства. AVR поддерживает спящий режим ("idle mode"), в котором он потребляет менее 2 мА и режим пониженного потребления ("power down"), в котором он потребляет около 20 мкА. Гораздо проще вывести микроконтроллер из спящего режима ("idle mode"). Поэтому я и решил использовать именно его, несмотря на небольшое отступление от стандарта. Подсветка индикатора будет отключаться и тавким образом потребляемый устройством ток ограничится 3 мА. 3mA конечно больше 0.5mA, однако чувствительность измерительных цепей контроллера USB компьютера не позволит ему ощутить эту разницу. Так что это нам сойдет с рук.

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

Остальная часть схемы остается без изменений и соответствует схеме приведенной в майской статье 2002 года . Так, что здесь я не буду вдаваться в детали.
Для увеличения схемы кликните по схеме. Чертежи в формате eagle находятся в архиве вместе с программами. Все эти материалы вы можете загрузить по ссылкам приведенным в конце статьи.
board
Плат односторонняя, печатные проводники нарисованы синим цветом. Красным цветом прорисованы перемычки.

Распайка разъема USB Type-B использованного для нашего устройства:
type B Receptacle

Устанавливаем SMD-микросхему.

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

SMD-микросхему необходимо установить перед установкой всех остальных компонент.
Предварительно покройте припоем контактные площадки. Затем нанесите тонкий слой паяльной пасты (некоторые называют ее паяльным медом потому, что внешне она напоминает мед). Компанией "Kontakt Chemie" производится лак "Lцtlack", который можно использовать в качестве альтернативы паяльной пасте.

Очистите паяльник. На жале паяльника не должно быть припоя. Потом установите точно FT232BM. Осторожно припаяйте каждую ножку микросхемы. Не пересердствуйте с припоем. ft232SMD

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

Проверка

Предлагаю провести проверку собранного устройства в два этапа. На первом этапе проверяем устройство без микроконтроллера подключив его к разъему USB. Linux распознает микросхему FTDI и в /proc/bus/usb/devices появится запись :

T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0403 ProdID=6001 Rev= 2.00
S: Manufacturer=FTDI
S: Product=USB <-> Serial
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 90mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=serial
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms

Затем установим микроконтроллер и загрузим тестовую программу, которая заставит моргать светодиод. Распакуйте архив linuxusblcd (см. ссылку в конце статьи) и наберите:

make testload0

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

Загружаем рабочую программу в микроконтроллер:

make load

Теперь можно использовать "ttydevinit /dev/ttyUSB0" для инициализации USB-соединения и с помощью команды "cat > /dev/ttyUSB0" вы можете "общаться" с устройством.

ttydevinit /dev/ttyUSB0
cat > /dev/ttyUSB0
D=hello world

В результате на индикаторе появится "hello world". Подробности в майском выпуске 2002 года. В архиве этого выпуска программа llp.pl, которая реализует интерфейс с компьютером посредством двух кнопок и ЖКИ-индикатора. Можете попробовать ее работу с модернизированным устройством.

... а вот и работающее устройство (на фотографии кнопки не подключены, а FT232BM расположена на обратной стороне платы):
usb lcd

Альтернативные варианты

Несмотря на простоту конструкции, она все-таки достаточно сложна для изготовления в домашних условиях. Возможно вам стоит использовать готовые покупные устройства. Отрицательная сторона этого выбора - отсутствие сторожевого устройства типа "watch-dog", светодиодов и кнопок. Обычно такие устройства представляют собой только индикатор. Суммарная стоимость комплектующих нашего USB-дисплея 30 EUR и она соизмерима с коммерческими устройствами.

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

Ссылки