Давно у меня родилась идея сделать 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 сек.
Вроде бы все сказал... ах вот, это устройство я преподнес в виде подарка на день рождения тому самому другу, у которого схалявил дохлую флешку. Вот несколько фото готового устройства.
Сайт Пан-Ас, сайт самоделок - на сайте есть все, что можно сделать своими руками: поделки, самоделки, украшения, детские поделки. Сделай их сам, своими руками и получи от этого настоящее удовольствие.