Показаны сообщения с ярлыком DS18B20. Показать все сообщения
Показаны сообщения с ярлыком DS18B20. Показать все сообщения

2 февраля 2014 г.

Owfs - установка из исходников

Начнем с лирического отступления. Проанализировав показания термометра DS18B20 я понял, что он немного завышает показания.   Погуглив я нашел две причины: либо самонагрев датчика от частого опроса, либо неоткаллиброванный датчик. Решил получше изучить логи owfs.

1. Включаем логи: /etc/owfs.conf

error_print = 1 
error_level = 3 

Перезапускаем owserver и смотрим что у нас в логах. (Обратите внимание, что я рассказываю про версию из deb пакета в init.d скрипте которого уже указан путь к конфигу). А в логах у нас пусто. Помните, как мы устанавливали систему? Позже мы поставили rsyslod.

Ищем # whereis owserver , чтобы запустить его не в режиме сервиса , а в консоли.

#/usr/bin/owserver --debug  --error_level=9 --error_print=2 --foreground -c /etc/owfs.conf --pid-file /var/run/owfs/owserver.pid
DEBUG MODE
libow version:
        2.8p15


И снова пусто. Но не только у нас. Похоже, что в deb пакете owfs логирование выключено.

Посему удаляем owfs (сохраним init.d скрипты и owfs.conf - хотя они удалиться не должны). Качаем версию посвежее. Распаковываем tar -xvzf... Устанавливаем необходимое для компиляции и сборки.

#apt-get install autoconf libtool libusb-dev libfuse-dev make ed
#cd /usr/src/owfs-2.9p1
#./configure --help
#/owfs-2.9p1# autoreconf -i

Я сконфигурировал следующим образом (также можно добавить опцию --enable-owtraffic Enable bus traffic reports (default false) - очень интересная опция, дающая возможность отслеживать трафик в самой 1-wire сети):

#./configure --enable-debian --disable-owftpd --disable-owperl --disable-owphp --disable-parport --disable-owpython
# make -j4
# make install

По умолчанию все устанавливается в директорию /opt/owfs/ . Сделаем линк в /usr/bin , что бы было проще использовать и не переписывать скрипты запуска.

# for p in owfs owserver owhttpd owftpd owread owwrite owdir ; do ln -sf /opt/owfs/bin/$p /usr/bin/$p ; done

Пробуем запускать:

/usr/bin/owserver --debug  --error_level 9 --error_print 2 --foreground -c /etc/owfs.conf --pid-file /var/run/owfs/owserver.pid

Если все хорошо, перезапускаем сервер с помощью init скрипта и смотрим syslog. Отлично! Теперь укажем всем клиентским приложениям использовать tcp сервер (owserver) для работы, ибо usb устройство уже занято им (то есть все приложения пакета owfs должны работать через owserver - если он запущен, либо по одиночке). Пропишем в конфиг (он должен автоматически подхватываться (ключ -c) всеми init.d скриптами пакета owfs, которые у нас остались после установки deb пакета из репозитория):

# With this setup, any client (but owserver) uses owserver on the
# local machine...
! server: server = localhost:4304

В конфиге программы с репозитория эта строчка уже указана.

Но скрипта для приложения (не пакет) owfs в init.d нет (вообще странный пакет в репозитории дебиана - логов нет, управление не понятно, такое ощущение, что делал человек, плохо знакомый с owfs). Можем сделать на основе скрипта owhttpd и запускаем:

# /etc/init.d/owfs start
[ ok ] Starting 1-Wire owfs Daemon: owfs.
root@debtruck:/etc/init.d# ps -A | grep ow
 2478 ?        00:00:01 owserver
 3262 ?        00:00:00 owfs

Смотрим работающие логи.

2 января 2014 г.

Создание термометра в сети 1-wire

Итак, мы научились подключать устройство 1-wire к контроллеру.

Оффтопик. Давайте-ка я все-таки расскажу что и где покупал.
1. Cubietruck - здесь.
2. Контроллер DS9490R, термометр DS18B20 - здесь.
3. Прототипные платы - здесь.
4. Проводочки :) - 30 ft Kynar wire wrap wire 30 awg 4 modding 10 color.
5. 100 штук RJ11\12 - 100× Modular Lan Network Connector Plug RJ11 6P6C CAT5
6. Остальное в местном радио магазине (включая внешние телефонные розетки и некоторые разъемы по питанию).

Для создания термометра используем схему с сайта Бенукс (сайт вообще отличный, самое лучшее и доступное описание 1-wire сети и устройств).

Травить плату я не умею (хотя в инете полно видео технологии ЛУТ - может быть в скором времени и попробую), поэтому решил делать на прототипных платах - схема в принципе не такая сложная:



По схеме: в принципе ничего сложного даже для такого новичка, как я. 78L05 - стабилизатор, преобразует 12 вольт на нашей шине в 5 вольт для датчика. Кстати! Мы приведем сеть 1-wire в порядок и пустим по ней 12 вольт, не будем использовать паразитное питание. Остальные элементы описаны разработчиком схемы (обсуждение немного другой платы, поэтому 5 пункт можно не читать и обозначения не все совпадают - но я думаю догадаться можно о чем речь):

1. Диод D6 - для каких целей он служит и почему выбран именно КД521?
Этот диод уменьшает влияние "просадок" по общей шине питания на данный модуль. Здесь допускается применение любого маломощного выпрямительного диода. КД521 взят только потому, что был под рукой.

2. Конденсатор C2 - для каких целей он служит? Ведь в datasheet к 7805 указаны только 2 конденсатора, по 0,33 и 0,1 соответственно.
Во время "просадок" питания по общей шине этот конденсатор поддерживает питание данного модуля.

3. Сопротивление R2 - почему именно 100 Ом?
Оптимальный номинал, который с одной стороны является элементом защиты, а с другой стороны не оказывает большого влияния на полезные сигналы 1-wire.

4. Стабилитрон D3 - почему выбран именно КС156?
Этот элемент совместно с резистором R2 является цепочкой защиты модуля от импульсных помех по микросети. Выбран с несколько большим напряжением, чтобы не влиять на полезный сигнал 1-Wire и Pullup, а "срезать" случайные импульсные помехи превышающие 5,6 В.

5. Действительно ли так нужна опторазвязка на схеме между DS2413 и реле, или можно обойтись транзистором + реле?

Можете исключить опторазвязку, но тогда при работе через USB-адаптер может быть подвисание порта.

Приступили к пайке схемы, предварительно разрезав плату ножницами по металу под внешнюю телефонную розетку и пролудив ее. Получили нечто вроде этого (микросхему пока не паяем, сначала хочу проверить вольтаж).



Теперь надо сделать саму шину. Для этого я купил 6 контактные телефонные разъемы (RJ12 в простонародии - почитайте вики, чтобы не купить что-нибудь не то) по цене примерно 200 рублей за 100 штук (см. пункт 5 в закупках). Я решил обжимать по схеме B в RJ45 (без оранжевого и светло-оранжевого) ибо уже привык к ней :) , запишем распиновку. Теперь обжимаю все шесть проводов, а не как в прошлом посте, так обжимка получается качественнее.



У меня вид с обратной стороны по B (то есть контакты от 8 до 3 включительно)



1. Светло-зелёный - не используется.
2. Синий - черный в розетку - +12 вольт.
3. Светло-синий - красный в розетке - Data.
4. Зелёный - зелёный в розетке - земля.
5. Светло-коричневый - жёлтый в розетке - +18 вольт.
6. Коричневый - свободный.

"Организатор" шины

Теперь я подумал как же мы будем подключать 18 и 12 вольт? Ну и решил взять еще одну розетку и сделать из нее некий переходник-организатор (дурацкое название, что-то сейчас лучше в голову не пришло :) ).



Смотрим распиновку. Нам нужны только 3 и 4 контакты. Обжимаем как хотим один конец (советую выщипать лишние контакты), а второй оставляем - его будем впаивать в макетплату.

Разбираем розетку, паяем. У меня получилось вот так вот



Обжимаем еще один провод. Мультиметром проверяем работу схемы и правильность соединений. Проверяем 12 вольт на шине. 18 вольт у меня пока нет. Чтобы было удобнее пользоваться мультиметром - подключаем по розетке на оба конца:



Пробуем вставлять наш термометр, пока без DS18B20. Проверим напряжение 5 вольт.



Последний шаг - впаиваем DS18B20 в плату под термометр. Распиновка:



У меня заработало не сразу. :) Вышла небольшая заминка по проводам. Поэтому прежде чем обжимать коннектор в DS9490R выщипайте лишние контакты в коннекторе, оставьте два посередине и только после этого обжимайте.
В итоге, у нас есть первое устройство в "нормальной" сети 1 wire, которую можно расширять не боясь. Еще я понял, что лучше все-таки травить плату, это наверное быстрее (если конечно есть работающий макет), чем использовать такие вот прототипные платы (хотя может их надо как-то по другому использовать, я честно говоря не знаю. :) ) и качественее.

Кусочек информации с моего термометра:

power YES (1)
r_address 710000041E821A28
r_id 0000041E821A
r_locator FFFFFFFFFFFFFFFF
temperature  26.3125
temperature10  26.25
temperature11  26.375
temperature12  26.3125
temperature9  26.5


Система в сборе



ps. Кстати, неплохо бы в наш дебиан еще поставить системные логи:
#apt-get install rsyslog