1-Wire по Ethernet

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

1-Wire по Ethernet

Сообщение THK » 26 мар 2012, 08:11

Чтобы не захламлять тему "Умный дом по Ethernet" решил создать новую.

Выкладываю, то, что есть на данный момент:
Слегка подправленная схема проекта "LAN Control"
CPU_800x600.GIF
CPU_800x600.GIF (22.85 КБ) 56036 просмотров
(USB, TSOP1740 и M24C64 использоваться не будут).
Схема в хорошем качестве, печатка, список элементов, фьюзы:
CPU.rar
Архив обновлен 29.03.2012
(184.3 КБ) 2372 скачивания

Схема источника питания:
Power.rar
Добавлено 10.04.2012
(11.71 КБ) 1849 скачиваний
Ссылка на AN AVR318 на русском языке.
И проект типа "HelloWorld":
Hello World, по русски!.rar
(34.35 КБ) 1846 скачиваний
Надеюсь кому нибудь это будет интересно и пригодится.

Добавлено 19.04.2012

Закончена работа над первой версией прошивки.
В первую очередь, ставилась задача создать устройство, поддерживающее температуру на объекте, легко управляемое с сервера и в тоже время, не зависимое от него.
В качестве бонуса (не пропадать же ресурсам меги :) ) реализован опрос датчиков DS18B20, управление выходами и опрос входов (опросом это можно назвать с натяжкой, устройство само сообщает серверу о сработавшем входе). Большое внимание уделил обработке ошибок, особенно при обработке команд с сервера.
Вот вроде и все, позже напишу более полный обзор возможностей и подробно опишу каждый пункт интерфейса управления устройством.
Добавлено Описание девайса 27.04.2012

Кратко поясню, как общаться с устройством (Замучался писать "устройство" название "1-Wire - Ethernet мост" или по простому "мост" подойдет?)

Команды для обмена с сервером.

Код: Выделить всё

_http://IP/sec/?th=all					Показания всех датчиков 			(28.D40264020000_26.56)
_http://IP/sec/?th=28.D40264020000	Показания датчика 28.D40264020000	(26.56 или Error)

_http://IP/sec/?get=in3					Состояние входа 3					(0, 1 или Error)
_http://IP/sec/?get=out5					Состояние выхода 5					(0, 1 или Error)
_http://IP/sec/?set=out5&val=1			Установить выход 5 в 1				(OK, Error или Auto)
_http://IP/sec/?set=ts1&val=51.3		Установить SP термостата 1 = 51.3	(OK или Error)
												Значение SP от -55 до 99.99
												(Без записи в ЕЕПРОМ)
Запрос устройства к серверу.

Код: Выделить всё

_http://Server_IP/test-http.php?in=3	Сработал вход 3
IP-адрес по умолчанию: 192.168.3.14
Пароль умолчанию: sec
Скрипт умолчанию: test-http.php
Все настраивается через WEB-интерфейс
ip_1-Wire v0.0.1.rar
Исходные коды
(63.82 КБ) 1608 скачиваний
ip_1-Wire HEX v0.0.1.rar
Собранная прошивка
(22.66 КБ) 1451 скачивание
Добавлено 12.05.2012
Обновленная схема устройства:
viewtopic.php?p=4290#p4290
download/file.php?id=327

Новая прошивка. Версия 0.0.3:
Исходник: download/file.php?id=328
HEX-файл: download/file.php?id=329

Добавлено 31.05.2012
Обновленная схема устройства:
viewtopic.php?p=4550#p4550
download/file.php?id=343

Новая прошивка. Версия 0.0.5:
Для автономной работы устройства, добавлена работа с индикатором на HD44780 (2 строки по 8 символов) и 4 кнопки для выбора канала термостата и изменения уставки, выбранного канала.
На индикаторе отображается:
В первой строке - номер текущего канала термостата (только сконфигурированые каналы, выбираются кнопками вверх, вниз) и текущая уставка (можно менять кнопками +,- с шагом 0,5 градуса).
Во второй строке - текущее состояние канала (0/1) и текущая температура с датчика, который назначен для управления этим каналом.
Исходник: download/file.php?id=340
HEX-файл: download/file.php?id=341

Добавлено 06.06.2012
Обновленная схема устройства, для удобства разводки платы, поменяно подключение клавиатуры:
viewtopic.php?p=4590#p4590
download/file.php?id=348

Новая прошивка. Версия 0.0.6:
Добавлена возможность просмотра состояния I/O на экране LCD.
Теперь при удержании кнопки "-" (около 1 секунды) на индикаторе отображается состояние входов/выходов:
В первой строке - символ "i" и номера активных входов, если вход неактивен вместо его номера выводится символ "_".
Во второй строке - символ "о" и номера активных выходов или символ "_".
Возврат в режим управления термостатами происходит при повторном нажатии и удержании кнопки "-".
Исходник: download/file.php?id=346
HEX-файл: download/file.php?id=347

alexsis_76

Re: 1-Wire по Ethernet

Сообщение alexsis_76 » 26 мар 2012, 12:55

Видели знаем 8-) схема обычная стандартная девайс только для тупого копирования, нет исходников :( посему проще собрать с нуля, например приспособив сдешнюю сжему

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: 1-Wire по Ethernet

Сообщение THK » 26 мар 2012, 14:34

Вот я и скопировал. :) Думал, если заработает как написано, то и неважно что исходников нет.
В результате обнаружил, что при добавлении на шину нового датчика, "номера" датчиков спутываются в клубок. После недолгой переписки с автором стало понятно, что исправлять что-либо он не собирается...

Вот я и взялся за написание своей прошивки. Естественно на том железе, что уже спаяно.
А портировать проект с ATMega32 на ATMega328 особого труда не составит.
alexsis_76 писал(а): схема обычная стандартная
Что Вы имеете в виду? Обычно на пин вешается подтяжка 4.7к и все остальное делается программно (задержки, режим пина I/O и т.д.). Недостаток такого подхода - невозможность работы на длинных линиях.
Здесь для генерации и передачи сигналов используется UART.
посему проще собрать с нуля
Вот я и предлагаю объединить усилия. Пока у меня не получается заставить работать далосовский код. :( Затык уже на функции "OWI_DetectPresence", пока ясно, что что-то с задержками, т.к. при установке другого битрейта наличие датчика на линии определяется.

alexsis_76

Re: 1-Wire по Ethernet

Сообщение alexsis_76 » 26 мар 2012, 15:00

сейчас буду делать плату для очередного ETHERNET термометра разведу дополнительные ноги юарта попробуем, а на счет резистора 4,7 у меня вс ним вообще ничего не заработало сидел два дня прежде чем допер поставил 330 Ом метров тридцать шнура подцепил все работало

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: 1-Wire по Ethernet

Сообщение THK » 26 мар 2012, 17:18

Ну вот, единомышленник нашелся.
Жаль у меня завтра скорее всего не получиться с прошивкой позаниматься. :(
Для информации: Надо разбираться с инициализацией UART'а, т.к. в процедура "OWI_DetectPresence" начинает видеть есть датчик или нет только если поставить OWI_UBRR_115200.

alexsis_76

Re: 1-Wire по Ethernet

Сообщение alexsis_76 » 28 мар 2012, 14:08

Добрый день к сожалению с платой пока не получилось весь фоторезист оказался засвечен , пока занимаюсь программой думаю добавить простейшую диагностику линии и разгрызь алгоритм поиска 1 WARE

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: 1-Wire по Ethernet

Сообщение THK » 28 мар 2012, 17:37

alexsis_76 писал(а):Добрый день к сожалению с платой пока не получилось весь фоторезист оказался засвечен
А я пользуюсь ЛУТ'ом, печатаю на фотобумаге (можно на старых фото).
alexsis_76 писал(а):пока занимаюсь программой думаю добавить простейшую диагностику линии и разгрызь алгоритм поиска 1 WARE
Сегодня сидел целый день, решил попробовать вариант эмуляции 1-wire / uart, работающий по прерываниям.
В плане диагностики посложнее, но понял одно, весь затык у меня с инициализацией UART'а, а возможно дело во фьюзах (остались от старого проекта), пока не проверил (поздно дошло :( ).
По поводу диагностики линии в апликухе AVR318 (вариант, работающий по прерываниям) есть структура OWIState.error так-что с этим можно не заморачиваться.
Завтра либо задам кучу вопросов, либо выложу работающий пример.

PS В сторону алгоритма поиска 1-wire устройств тоже поглядываю... Посмотрите AN187 от даласа.

alexsis_76

Re: 1-Wire по Ethernet

Сообщение alexsis_76 » 29 мар 2012, 01:25

Во всем этом деле самое интнресное как раз этот алгоритм , апликуху эту видел как раз по ней и работаю, есть правда и другой вариант , считать серийники на компе и вбить в EEPROM тогда искать ничего не надо но утрачивается гибкость устройства

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: 1-Wire по Ethernet

Сообщение THK » 29 мар 2012, 07:02

alexsis_76 писал(а): есть правда и другой вариант , считать серийники на компе и вбить в EEPROM тогда искать ничего не надо но утрачивается гибкость устройства
Ну этот вариант, совсем не вариант...

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: 1-Wire по Ethernet

Сообщение THK » 29 мар 2012, 13:36

Ну вот, вроде опрос DS18b20 заработал.
Правда остался один косяк, без устранения которого дальше продвигаться не стоит. Пришлось установить предделитель для USART'а (регистр UBRR) "1" для скорости 115200 и 12 для скорости 9600, хотя по даташиту на ATmega32 (стр. 166) должно быть 16 и 207, соответственно (задается в файле OWIInterruptDriven.h).
Бьюсь с этим уже третий день, не могу понять в чем дело. С USART'ами раньше дел не имел, так-что ошибка наверняка "детская".
ip_1-Wire_interrupt.rar
(71.55 КБ) 1462 скачивания
Архив исправлен и перезалит! 29.03.2012
Буду рад любой критике, особенно от Andrey_B и alexsis_76.
PS Для портирования проекта, надо в файле OWIDeviceSpecific.h исправить (или добавить) тип процессора, например для ATmega32 пришлось заменить "__ATmega32__" на "__AVR_ATmega32__".

Вообще, мне понравилось как работает 1-Wire по прерываниям. Никаких задержек на ожидание преобразования, WEB отвечает мгновенно. Это будет очень хорошим плюсом при работе с большим количеством датчиков, единственный минус, это 2 байта ОЗУ на каждый датчик. :)

Да, забыл указать, инициализация USART'а в файле OWIIntFunctions.c функция OWI_Init(), дальше только переключение скорости (это я чтобы не пришлось рыскать по коду).
И еще, изначально эта библиотека была под IAR, может я накосячил, адаптируя ее под WinAVR?

PS Фьюзы LOW=0x3F, HIGH=0xDA
PPS Правильные фьюзы LOW=0x3F, HIGH=0xDF

alexsis_76

Re: 1-Wire по Ethernet

Сообщение alexsis_76 » 29 мар 2012, 14:38

возможно дело в следующем у вас в Makefile определено

Код: Выделить всё

         F_CPU =  1000000
#         F_CPU =  1843200
#         F_CPU =  2000000
#         F_CPU =  3686400
#         F_CPU =  4000000
#         F_CPU =  7372800
#         F_CPU =  8000000
#         F_CPU = 11059200
#         F_CPU = 14745600
#         F_CPU = 16000000
#         F_CPU = 18432000
#         F_CPU = 20000000
F_CPU = 16000000
а мега тактируется от сетевого контроллера по дефолту 6,5 мгц
и еще я так и не понял как установлены фьюзы если не затруднит напишите в человеческом виде ;)
P.S сегодны сел за написание алгоритма поиска 1 WARE ежели не буду сильно занят через пару тройку дней будет готов c резистом вроде определился завтра должны подвести

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: 1-Wire по Ethernet

Сообщение THK » 29 мар 2012, 15:12

alexsis_76 писал(а):а мега тактируется от сетевого контроллера по дефолту 6,5 мгц
У меня мега тактируется от внешнего кварца 16 мГц. Схема в первом посте download/file.php?id=232
alexsis_76 писал(а):и еще я так и не понял как установлены фьюзы если не затруднит напишите в человеческом виде ;)
Вы гений! Начал писать, и только тут, заметил свою ошибку!
Вот правильные фьюзы (LOW=0x3F, HIGH=0xDF)
Безымянный.JPG
Безымянный.JPG (57.96 КБ) 55853 просмотра
с ними все работает как надо!
Предыдущий пост отредактирован, залит новый архив.

Вот хороший калькулятор фьюзов: http://avr.roboforum.ru/calc.html

alexsis_76

Re: 1-Wire по Ethernet

Сообщение alexsis_76 » 29 мар 2012, 15:51

Очень рад за Вас :)

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: 1-Wire по Ethernet

Сообщение THK » 29 мар 2012, 16:11

Очень рад за Вас :)
Я тоже. :D

По поводу диагностики линии: Если на команду Reset, не ответило ни одно устройство на линии, то OWIStatus.presenceDetected будет равно False, а если линия в порядке, то OWIStatus.presenceDetected = True.

alexsis_76

Re: 1-Wire по Ethernet

Сообщение alexsis_76 » 30 мар 2012, 01:32

Еще можно сделать так до начала всех манипудяций щупаем линию если 1 то двигаемся дальще если 0 то стоп тк при замыкании на землю в ответ на RESETвсегдабудет возвращаться PRESENSE

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: 1-Wire по Ethernet

Сообщение THK » 30 мар 2012, 07:08

При замыкании на землю OWIStatus.busy будет равно True, а OWIStatus.presenceDetected, как и при обрыве, будет равен False. Т.е. можно сделать простейшую диагностику - обрыв/замыкание.
Другими словами, если OWIStatus.presenceDetected != True, значит линия не в порядке, а уточнить что именно можно по флагу OWIStatus.busy

PS Сегодня попробую разгрызть алгоритм поиска всех устройств на линии. ;)

alexsis_76

Re: 1-Wire по Ethernet

Сообщение alexsis_76 » 30 мар 2012, 08:17

Попробуйте :)ежели что обращайтесь

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: 1-Wire по Ethernet

Сообщение THK » 30 мар 2012, 17:14

Как ни странно, разгрыз! :D
А у Вас готовый кусок кода есть? Заточен под UART или под отдельный пин? Если под UART, интересно взглянуть.
Долго думал, как лучше организовать поиск, пришлось делать с опросом состояния UART'а, а не с прерываниями, иначе (при ошибках на линии) уход в бесконечный цикл гарантирован. Хотя, надо еще подумать...

На сегодня, наверное, уже хватит, а завтра надо все это безобразие причесать и немного оптимизировать.

vovaf
Сообщения: 10
Зарегистрирован: 29 сен 2011, 23:22
Откуда: Украина, Луганск

Re: 1-Wire по Ethernet

Сообщение vovaf » 30 мар 2012, 23:30

По ссылке http://kibermaster.net/rabota-s-shinoy- ... b20-k-avr/ дан пример работы с 1-Wire как программный, так и через UART. Также есть реализация поиска устройств на шине. Посмотрите, может пригодится.

Segador
Сообщения: 20
Зарегистрирован: 26 окт 2011, 12:58

Re: 1-Wire по Ethernet

Сообщение Segador » 30 мар 2012, 23:58

vovaf писал(а):По ссылке http://kibermaster.net/rabota-s-shinoy- ... b20-k-avr/ дан пример работы с 1-Wire как программный, так и через UART. Также есть реализация поиска устройств на шине. Посмотрите, может пригодится.
Это уже предлагалось к рассмотрению, правда, в другой ветке. ;)
viewtopic.php?f=1&t=6&start=520#p2749

Ответить