Давно у меня родилась идея сделать USB термометр, однако нужды не
было, и идея покоилась. Както у друга в гостях заметил пару USB флешек. Одна
была дохлая и досталась мне нахаляву. С недавнего времени постоянно за ними
охочусь, т.к. в большинстве случаев сгорает контроллер, а NAND flash живая + SMD
кварц. А такое на дороге не валяется.
Так вот, с этой флешки я поимел: SMD
кварц на 12 МГц, USB штекер на плату и маленький корпус, а также развитие идеи
USB термометра.
В течении недели были разработаны:
1. Схема устройства;
2. Разводка
печатной платы под имеющийся корпус;
3. Программа для МК ATtiny45;
4.
Программа-хост (даллее просто хост) для приема данных от МК.
Как видно из схемы, основа устроуства - МК ATtiny45. Его выбор обуславливается
необходимостью минимизировать размеры печатной платы и наличием у него 4 Кбайт
флеш памяти, нужных для реализации USB и работы с DS18B20.
Датчик (DS18B20)
работает в режиме паразитного питания, т.е. не требует отдельного подвода
питания, а подключается к устройству 2 проводами. Входная цепь USB -
стандартная, рекомендованная разработчиками avrusb, за исключением того, что
подтягивающие резисторы в моем варианте включены после защитных на 68 Ом.
Программа для МК разработана в среде AVR Studio с использованием
GCC на основе библиотеки avrusb и исходников некоего Martin'a Thomas'a для
DS18B20 (времени не было самому писать). Спопсоб взаимодействия хоста с
устройством реализован в виде отправки устройству условного кода (в соответствии
с которым устройство будет выполнять требуемые операции), а также запроса пакета
данных со значением текущей температуры. Так как размер отправляемых и
принимаемых данных мал, то был выбран future репорт (тип пакета данных) ввиду
простоты работы с ним.
Если вы захотите исправить программу для МК,
пожалуйста, перед этим внимательно прочтите документ USBID-License.txt,
находящийся в папке usbdrv.
Там содержится ряд правил и ограничений по
использованию библиотеки avrusb.
Программа-хост написана в Borland Delphi 7
с использованием библиотеки компонентов JEDI-VCL, в состав которой входит
компонент TJvHidDeviceController, реализующий просой доступ к HID совместимым
USB устройствам. Чтобы сделать использование устройства максимально удобным было
решено реализовать хост в виде значка со значением температуры в ситемном трее
(возле часов) без какого-либо графического интерфейса, за исключением
контекстрого меню по нажатию правой кнопки мыши по значку в трее.
У меня
WinXP SP3, на других ОС программу не пробывал.
В общем, хост работет по следующему алгоритму:
1. По таймеру
(раз в 2 секунды) запускаем поиск нашего девайса. Критерии поиска - текстовые
имена производителя (vendor) и устройства (product);
2. Принимаем информацию
от устройства с многочисленными проверками на ошибки. Если таковые возникают -
ставим значек "NA" - no access;
3. Отдаем команду чтения температуры из
датчика. Ждем;
4. Отдаем команду начала измерения температуры;
5. Возврат
к пункту 1 через 2 сек.
Вроде бы все сказал... ах вот, это устройство я
преподнес в виде подарка на день рождения тому самому другу, у которого схалявил
дохлую флешку.
Вот несколько фото готового устройства.
Автор устройства (схемы): Петр Елисеев
Связь с автором: Нет данных
Веб сайт автора: Нет данных
Источник: http://radiokot.ru
Доп материалы, файлы к устройству (схеме):
Прошивка МК с исходниками
Программа-хост для компостера, тоже с исходниками
Печатная плата в формате SL 5.0.