Давно у меня родилась идея сделать , однако нужды не было, и идея покоилась. Както у друга в гостях заметил пару USB флешек. Одна была дохлая и досталась мне нахаляву. С недавнего времени постоянно за ними охочусь, т.к. в большинстве случаев сгорает контроллер, а NAND flash живая + SMD кварц. А такое на дороге не валяется. Так вот, с этой флешки я поимел: SMD кварц на 12 МГц, 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 сек.
Вроде бы все сказал… ах вот, это устройство я преподнес в виде подарка на день рождения тому самому другу, у которого схалявил дохлую флешку. Вот несколько фото готового устройства.
Доп материалы, файлы к устройству (схеме):