Компьютерный USB-термометр для цифровых видов связи, APRS и
EchoLink.
Появление IgorPlug-USB (приемник инфракрасного ДУ с USB-подключением к
компьютеру) [1] показало, что во многих случаях для периферийных
USB-устройств необязательно использовать специализированные чипы -
микроконтроллер семейства AVR способен программно выполнять обмен
данными по интерфейсу USB. Кроме основной функции (прием сигнала от
пульта ДУ для управления WinAmp-ом и другими программами), IgorPlug-USB
позволяет компьютеру управлять выходами одного из параллельных портов
микроконтроллера, а также вводить данные с этого порта в компьютер.
Казалось бы: дорога открыта, пора переводить все любительские
разработки, которые для этого использовали COM- и LPT-порты компьютера
(программаторы ПЗУ, переключатели антенн радиостанции, выключатели
света в комнате и т.п.) на "рельсы" USB.
Не тут-то было. А дело даже не в низкой пропускной способности (всего
несколько килобайт в секунду) шины USB в режиме Low Speed [7], в
котором и работает микроконтроллер AVR. Главная проблема, с которой
сталкивался разработчик - необходимость создания драйвера устройства
для операционной системы Windows, а это дело исключительно сложное и
кропотливое, а главное - требующее опыта и больших затрат времени. И
если не заниматься этим профессионально, ничего хорошего не выйдет...
Один из выходов из этой ситуации - использование спецификации HID
(Human Interface Device) [7]. Таким же образом, к примеру, работают
USB-клавиатуры и мышки. Разработчик соблюдает спецификацию, а Windows
(Linux, MacOS и т.д.) использует стандартные (готовые) драйвера, когда
устройство оказывается подключенным к компьютеру. Далее, управляющую
программу для этого устройства можно написать даже на Бейсике...
Джойстик MJoy [2] - это разработка, которая иллюстрирует работу
контроллера AVR с шиной USB, используя спецификацию HID.
Созданный на базе MJoy цифровой термометр имеет следующие отличительные
особенности:
- Дешевый микроконтроллер AVR (вместо спец-чипов USB) плюс цифровой
датчик температуры.
- Спецификация HID позволяет обойтись без написания драйвера для
Windows.
- Управляющая программа, кроме отображения температуры на экране
компьютера, передает ее другим программам (для передачи в эфир в
цифровых видах связи, например).
Схема
"Сердце" прибора - микроконтроллер AT90S2313-10 (или ATTINY2313-12 или
-16). Стандартным кабелем (GND - черный провод, +5V - красный, DATA+ -
зеленый, DATA- - белый) он подключается к USB-порту компьютера. Важно,
чтобы сопротивление резистора R1 было именно 1.5 кОм (а не 2.2,
например), иначе компьютер может "не опознать" устройство. Питание
(+5В) - от шины USB. Микросхема термометра DS18B20 (или DS18S20)
включена по обычной
схеме с применением "подтягивающего" резистора R2.
Firmware (программа микроконтроллера)
Программа "перекроена" из MJoy [2] - убраны процедуры опроса АЦП
и кнопок джойстика, добавлены подпрограммы работы с микросхемой
термометра (спасибо Виктору Голутвину, UT1WPR [3], за помощь в освоении
этого чипа термометра).
HID report [7], то есть формат передаваемых в компьютер данных, описан
следующим образом:
USAGE_PAGE
(Generic Desktop) 06 01 00
USAGE (Vendor Usage
1) 09 01
COLLECTION
(Application) A1 01
USAGE_PAGE (Generic
Desktop) 05 01
USAGE
(Vno)
09 46
LOGICAL_MINIMUM
(0) 15 00
LOGICAL_MAXIMUM
(1000) 26 E8 03
UNIT (SI
Lin:Temperature) 67 01 00 01 00
UNIT_EXPONENT
(0)
55 00
REPORT_COUNT
(1)
95 01
REPORT_SIZE
(16)
75 10
INPUT
(Data,Var,Abs) 81
02
END_COLLECTION
C0
В компьютер передается 16-битное число - текущая температура в
Кельвинах (в отличие от джойстика или мыши, где передаются координаты X
и Y, а также состояния кнопок ). Конечно, HID report для этого
термометра можно было описать как "просто число", но спецификация HID
содержит, в числе прочих, такую сущность как "температура", для того
чтобы программное обеспечение компьютера при необходимости смогло
просмотреть список всех подключенных устройств и выбрать из них только
те, которые измеряют температуру.
Сейчас эта возможность не используется, и программа в компьютере
"распознает" этот термометр по идентификаторам VID (=0000) и PID
(=0003) [7].
Для компиляции программы используется ассемблер AVRA [4].
Запрограммировать микроконтроллер (то есть, занести в его память
содержимое готового hex-файла) можно, например, используя
программу AVREAL [5] с несколькими проводами, подключенными к
LPT-порту компьютера.
Для чипов термометра DS18B20 и DS18S20 подготовлены соответствующие
hex-файлы: usbthermb.hex и usbtherms.hex, а в исходном тексте firmware
присутствует строка ".define DS18B20", которая определяет тип
используемого чипа.
Программа для компьютера
Программа работает под операционными системами Windows 98/ME/2000/XP.
Написана для компилятора Visual C++ 6 с использованием HID-библиотек
Windows DDK [8]. Основой послужила аналогичная программа Cypress USB
Thermometer (HIDTHERM) [6].
В окне отображается температура в градусах Цельсия, а при
сворачивании в system tray температура появляется при наведении курсора
мыши на иконку. Цвет иконки красный, если температура положительная,
синий - если нулевая или отрицательная, серый - термометр не подключен
к USB-порту.
Использование термометра для цифровых видов связи, APRS и EchoLink
При работе программы в ее директории создаются следующие текстовые
файлы:
- celsius.txt - температура
в градусах Цельсия
- fahrenheit.txt -
температура в градусах Фаренгейта
- temperature.txt - обе
температуры, например "Temperature: 26C (78F)"
В программе MixW можно создать
следующий клавиатурный марос, который при его вызове передаст
корреспонденту текущую температуру:
<TEXTFILE:C:\WORK\USBTHERM\temperature.txt>
Это будет работать с MixW, начиная с версии 2.16. При запуске
программы в ее командной строке можно указать
формат, в котором фраза появится в файле temperature.txt (первое и
второе "%d" соответствуют температуре по Цельсию и Фаренгейту),
например:
usbtherm.exe
За окном холодно, %d°C (%d°F).
(При запуске из *.bat-файла вместо "%d"
нужно писать "%%d".)
Такие хитрости с файлом temperature.txt нужны для того, чтобы если
программа не запущена (или термометр не подключен к компьютеру), в эфир
ничего не передавалось.
- ui-view.txt - файл в
формате WX data file для программы UI-VIEW:
Oct 14 2005 22:06
000/000t078
Это позволяет передавать текущую
температуру в APRS-сеть.
Пользователи программы EchoLink
могут вывести значение температуры на экран соединенного с ними
корреспондента следующим образом:
usbtherm.exe
Station UU9JDR\n\nop. Denis\n\nTemp is %d°C (%d°F).
(Здесь "\n" означает перевод строки).
При этом нужно указать путь к файлу temperature.txt
в настройке Station Information file (меню Tools - Preferences,
закладка Connections) программы EchoLink..
Ссылки
- Приемник ДУ IgorPlug-USB (Igor Cesko) - www.cesko.host.sk
- USB-джойстик MJoy (Mindaugas Milasauskas) - www.mindaugas.com
- USB - это просто! (Виктор Голутвин, UT1WPR) - www.qsl.net/ut1wpr/
- Ассемблер AVRA - avra.sourceforge.net
- Программатор AVREAL (Александр Редчук) - ln.com.ua/~real/
- Cypress USB Thermometer Example - www.cypress.com
- Спецификации USB и HID - usb.org
- Windows DDK - Microsoft Corporation - microsoft.com
Файлы
usbtherm1.zip
- схема, firmware, Windows-программа, описание.
usbtherm2.zip - схема, firmware, Windows-программа, описание (вторая версия с
поддержкой EchoLink).
Денис Нечитайлов, UU9JDR
www.mixw.net
uu9jdr(at)qsl.net
|
Глас народа |
02.02.2012 14:02 Можно и 2-3 диода кремниевых последовательно, чтобы снизить питан... -- Serg
31.01.2011 00:36 Подал питание на контроллер через резистор 470 Ом и заработало.... -- shadowlamer...
23.12.2010 05:43 Не Руки автору отрывать не надо. Он в коде внес несколько правок,... -- QuickWitted...
07.11.2010 23:22 У меня у-во, зароботало, после того, как питание на схему подал ч... -- assket_мixxа...
23.10.2010 19:55 Собрал устройство ... проблема та же что у Дениса и Дмитрия :(... -- Алекс
28.03.2010 04:02 Если собирать софт рекомендованным компилятором (вроде MSVC6) с с... -- Eugen_
19.08.2009 06:35 >К htscooter< Это поясняется очень просто. Первая версия USB в "Д... -- QuickWitted...
09.08.2009 17:22 Есть за этим термометром небольшой "глючок" - если он и ДУ от Иго... -- htscooter
02.06.2009 14:12 К Jerry. А ты мне на почту напиши (почта внизу страницы проекта I... -- QuickWitted...
23.05.2009 23:37 Перепробовал все методы и стабилитроны в цеепи d+ и d- и делал пи... -- Jerry
15.05.2009 14:26 >При попытке подключить данное изделие к компутеру - выдается соо... -- QuickWitted...
30.04.2009 17:46 Подскажи пожалуйста как правильно выставить фьюзы(для PonyProg) п... -- Jerry
31.03.2009 10:34 Помогу всем желающим в отладке и модернизации устройства. В тем... -- sergej romanets...
30.03.2009 23:58 У данной программы, "usbtherm.cpp" есть тоже ошибка! Не очень сер... -- sergej romanets...
24.01.2009 21:48 Очень интересно. Вот моя задача: Измерить температуру в 5 помещен... -- Алекандр
16.01.2009 10:08 Идея интересная, на почемуто не повторяемая. При попытке подключи... -- Дмитрий
22.12.2008 09:37 Плиз дайте номальную рабочую схему, а то спаял, а нихрена не рабо... -- Евген
13.12.2008 14:21 У данной схемы есть серьезная ошибка! На новых компах шина USB от... -- sergej
25.07.2008 08:30 Вопрос: в предлагаемом микроконтроллере 2К памяти а прошивка прил... -- Al
07.02.2008 14:39 2Денис: У тебя контролер не запустился. Попробуй "ресетнуть" его ... -- MiD
14.01.2008 03:06 Здравствуйте. Сегодня собрал данную схему, но при подключении к к... -- Денис
09.01.2008 14:02 Спаял, стал прошивать PoniProg, задумался, приведенные прошивки з... -- Oleg
10.11.2007 23:21 Хорошо-бы измерять температуру в двух точках, для этого надо пере... -- dem
26.08.2007 10:41 Теперь можно ипользовать термометр для измерения температуры сало... -- пиря
09.10.2006 01:35 Подскажите вот такой термометр или аналогичный может есть где
в ... -- Николай RA9DA...
22.04.2006 17:17 Спасибо, Олег!
Я скорее всего вскоре буду делать еще одно устрой... -- Денис, UU9JDR...
16.04.2006 15:27 Рекомендую обратить внимание на USB драйвер от Objective Developm... -- OS, ex-2:460/60...
16.11.2005 17:55 To Neo:
В устройстве Дениса "смастерено" не датчик, а система, с... -- ut1wpr
06.11.2005 23:44 Это просто офигенно!!!! Большое СПАСИБО.
В продолжении темы: мож... -- Neo
27.10.2005 15:32 Интересная информация, спасибо Денис!... -- UA6HJQ
23.10.2005 00:49 Замечательная разработка, прочитал с огромным интересом и задумал... -- RW3DKB
|