USB-индикатор со сторожевым устройством и кнопками для использования в Linux
ArticleCategory: [Choose a category, do not translate
this]
Hardware
AuthorImage:[Here we need a little image from you]
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]
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 витков тонкого провода.
Хочу обратить ваше внимание на потребляемую устройством от шины USB мощность. Потребляемый от шины USB ток не должен превышать 100 мА. Кроме того ваше устройство должно поддерживать режим пониженного потребления. Когда вывод "sleep" FT232BM перейдет в состояние "0" ваше устройство должно перейти в режим пониженного потребления и при этом оно должно потреблять не более 0.5 мА. Позже вы увидите, что это достаточно жесткие требования для нашего устройства. AVR поддерживает спящий режим ("idle mode"), в котором он потребляет менее 2 мА и режим пониженного потребления ("power down"), в котором он потребляет около 20 мкА. Гораздо проще вывести микроконтроллер из спящего режима ("idle mode"). Поэтому я и решил использовать именно его, несмотря на небольшое отступление от стандарта. Подсветка индикатора будет отключаться и тавким образом потребляемый устройством ток ограничится 3 мА. 3mA конечно больше 0.5mA, однако чувствительность измерительных цепей контроллера USB компьютера не позволит ему ощутить эту разницу. Так что это нам сойдет с рук.
После вышесказанного я должен отметить, что мой компьютер не поддерживает спящий режим. Поэтому работу в спящем режиме я не проверял. Если ваш компьютер, возможно современный ноутбук, поддерживает спящий режим, проверьте и сообщите о результатах.
Остальная часть схемы остается без изменений и соответствует схеме приведенной в майской статье 2002 года
. Так, что здесь я не буду вдаваться в детали.
Для увеличения схемы кликните по схеме. Чертежи в формате eagle находятся в архиве вместе с программами.
Все эти материалы вы можете загрузить по ссылкам приведенным в конце статьи.
Плат односторонняя, печатные проводники нарисованы синим цветом. Красным цветом прорисованы перемычки.
Распайка разъема USB Type-B использованного для нашего устройства:
Устанавливаем SMD-микросхему.
SMD-корпуса обладая прекрасными механическими и электрическими характеристиками, являются головной болью для любителей. Для монтажа SMD-корпуса вам неоходимо хорошо владеть паяльником и безупречно выполненная печатная плата. И если вы не уверенны в собственных силах вам стоит подумать об альтернативных вариантах приведенных ниже в этой статье.
SMD-микросхему необходимо установить перед установкой всех остальных компонент.
Предварительно покройте припоем контактные площадки. Затем нанесите тонкий слой паяльной пасты (некоторые называют ее паяльным медом потому, что внешне она напоминает мед). Компанией "Kontakt Chemie" производится лак "Lцtlack", который можно использовать в качестве альтернативы паяльной пасте.
Очистите паяльник. На жале паяльника не должно быть припоя. Потом установите точно FT232BM. Осторожно припаяйте каждую ножку микросхемы. Не пересердствуйте с припоем.
Эта последовательность дает хорошие результаты. Не обязательно использовать паяльник с тонким жалом. Пользуйтесь обычным, главное тщательно очищайте жало паяльника от припоя перед пайкой. Я не советую пользоваться советами вроде - использовать для пайки кухонный тостер. Вы легко можете испортить микросхему.
Проверка
Предлагаю провести проверку собранного устройства в два этапа. На первом этапе проверяем устройство без микроконтроллера подключив его к разъему 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 расположена на обратной стороне платы):
Альтернативные варианты
Несмотря на простоту конструкции, она все-таки достаточно сложна для изготовления в домашних условиях. Возможно вам стоит использовать готовые покупные устройства. Отрицательная сторона этого выбора - отсутствие сторожевого устройства типа "watch-dog", светодиодов и кнопок. Обычно такие устройства представляют собой только индикатор.
Суммарная стоимость комплектующих нашего USB-дисплея 30 EUR и она соизмерима с коммерческими устройствами.
К сожалению большинство коммерческих устройств используют собственные идентификаторы, даже если они иcпользуют микросхему от FTDI. Из-за этого устройство не распознается автоматически системой. Приходится изменять исходные программы ядра и перекомпилировать его. В более поздних версиях ядра возможна поддержка этих устройств, при условии, что кто-то другой позаботился об этом за вас.
- http://www.matrixorbital.com/ Они также используют ftdi 232bm, но с собственным идентификатором. Дисплей называется LK202-24-USB.
- http://www.usblcd.de/ Это устройство работает с собственным модулем. Он тем не менее является частью стандартного ядра Linux. Дисплей будет работать с системой основанной на ядре 2.4.x. Очень хороший вариант.
- http://crystalfontz.com/ Эти USB-дисплеи (632 and 634) также используют FT232AM с собственными идентификаторами.
- http://www.cwlinux.com/eng/products/products_lcd.php Этот вариант я обнаружил совсем недавно. Их дисплеи снабжены клавиатурами, но при этом они в два раза дороже дисплея описанного в этой статье.
Ссылки