реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> вопрос по 1-Wire, работа с двумя устройствами с одним неизвестным серийным номером
timex
сообщение Sep 10 2008, 07:53
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 27-04-05
Из: Воронеж
Пользователь №: 4 541



Всем привет! Прошу помочь в одном вопросе.


Есть контроллер RS232>1-Wire DS2480B, подключённый к микроконтроллеру AVR. Компилятор - WinAVR (это к тому, что у него нет библиотеки для работы с 1-Wire).
К нему подключён термодатчик (в принципе не важно какой) DS18B20 с уже известным серийным номером (который 8 байт).

Сейчас понадобилось подключать к этой шине таблетку DS1990A для охранных функций.

Но для её идентификации нужно сначала её запомнить в микроконтроллере для последующих сравнений. Но таблетка эта - не единственная. Т.е. серийный номер заранее не известен.

Термодатчик для программирования таблетки отключать не предполагается.

Алгоритм нужен примерно такой: периодически опрашивается термодатчик. Тут прикладывают таблетку. Микроконтроллер считывает её номер и что-то делает в зависимости от того, совпал он с уже хранящим е ЕЕПРОМ или нет, при этом возобновляется опрос термодатчика.

В другом случае, когда нужно запомнить новую таблетку, предполагается так: периодически опрашивается термодатчик. Тут нажимают кнопку программирования и в течении 5 секунд микроконтроллер ждёт прикладывания новой таблетки. После того как её приложили и считали её номер или по прошествии 5 секунд возобновляется опрос термодатчика.

Искал в документации на DS2480B и в описаниях стандартов 1-Wire команду для "временного отключения от шины с последующим включением", не нашёл. А она в данном случае очень пригодилась бы.

Единственный вариант, который придётся использовать - поиск устройств на шине. Но как раз им не хочется заморачиваться, ибо plug&play на шине 1-Wire ещё не освоил и кажется будет много возни с ним.

Вопрос: есть ли ещё варианты такой совместной работы кроме того, в котором придётся реализовывать поиск устройсв на шине? Например, может сущствует какия-то команда временного отключения известного устройства от шины?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 10 2008, 08:04
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(timex @ Sep 10 2008, 10:53) *
Вопрос: есть ли ещё варианты такой совместной работы кроме того, в котором придётся реализовывать поиск устройсв на шине?
Переключить термодатчик на любой свободный вывод порта и опрашивать его программно. На входе для таблетки оставить только таблетку. Готовой библиотеки в компиляторе конечно нет, но ее написать - на полдня работы с даташитом перед глазами. В самом крайнем случае - в форуме по AVR есть ветка "исходники программ и библиотек" - там выложено штук 5 примеров реализации 1-wire.

Цитата(timex @ Sep 10 2008, 10:53) *
Например, может сущствует какия-то команда временного отключения известного устройства от шины?
Все известные команды описаны в даташите. Предлагаете кому-то прочитать его за вас?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
revolution
сообщение Sep 10 2008, 08:47
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 94
Регистрация: 21-06-06
Из: Рига, Латвия
Пользователь №: 18 255



Цитата(timex @ Sep 10 2008, 10:53) *
Искал в документации на DS2480B и в описаниях стандартов 1-Wire команду для "временного отключения от шины с последующим включением", не нашёл. А она в данном случае очень пригодилась бы.

Это не подойдёт?
COMMUNICATION COMMANDS
Reset
The Reset command must be used to begin all 1-Wire communication. The speed selection included in
the command code immediately takes effect. The response byte includes a code for the reaction on the
1-Wire bus (bits 0 and 1) and a code for the chip revision (bits 2 to 4).
Go to the top of the page
 
+Quote Post
Ledmaster
сообщение Sep 10 2008, 09:16
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 18-02-08
Из: Челябинск
Пользователь №: 35 141



Цитата(timex @ Sep 10 2008, 13:53) *
Искал в документации на DS2480B и в описаниях стандартов 1-Wire команду для "временного отключения от шины с последующим включением", не нашёл. А она в данном случае очень пригодилась бы.
Существуют, конечно, специальные девайсы, типа DS2409, но в Вашем случае это явный перебор. Вам достаточно подключить датчик температуры не напрямик к шине, а через аналоговый ключ, например, на полевом транзисторе. Вы же точно знаете, когда он Вам не нужен, чтобы просто оторвать от шины, закрыв полевик.
Go to the top of the page
 
+Quote Post
Warlockwolf
сообщение Sep 10 2008, 10:00
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 17-06-08
Пользователь №: 38 358



Цитата(timex @ Sep 10 2008, 11:53) *
Единственный вариант, который придётся использовать - поиск устройств на шине. Но как раз им не хочется заморачиваться, ибо plug&play на шине 1-Wire ещё не освоил и кажется будет много возни с ним.


Не так там все и сложно. исходники есть на самом максиме.
Уж лучше подумать над программой, чем городить ключи и отключения от шины.

http://www.maxim-ic.com/products/ibutton/s...ire/wirekit.cfm

Сообщение отредактировал Warlockwolf - Sep 10 2008, 10:11
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 10 2008, 10:35
Сообщение #6



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(timex @ Sep 10 2008, 11:53) *
Всем привет! Прошу помочь в одном вопросе.
Есть контроллер RS232>1-Wire DS2480B, подключённый к микроконтроллеру AVR. Компилятор - WinAVR (это к тому, что у него нет библиотеки для работы с 1-Wire).
К нему подключён термодатчик (в принципе не важно какой) DS18B20 с уже известным серийным номером (который 8 байт).

Сейчас понадобилось подключать к этой шине таблетку DS1990A для охранных функций.

Но для её идентификации нужно сначала её запомнить в микроконтроллере для последующих сравнений. Но таблетка эта - не единственная. Т.е. серийный номер заранее не известен.
...
Единственный вариант, который придётся использовать - поиск устройств на шине. Но как раз им не хочется заморачиваться, ибо plug&play на шине 1-Wire ещё не освоил и кажется будет много возни с ним.

Без SearchROM с несколькими устройствами на шине не справиться. У производителя где-то в аппнотах были и С-шные сорцы для SearchROM.
А дальше просто. Сначала придумываете процедуру обучения, в которой через SearchROM запоминаете ROM ID всех нужных ванварных устройств.
Потом с устройствами, которые отвечают на MatchROM (н-р, DS18B20), работаете через MatchROM по известным ROM ID, а с неотвечающими (DS1990A) - через ту же SearchROM с последующим сравнением полученных ROM ID с известными (здесь алгоритм поиска можно сразу заворачивать только в сторону семейства 0x01).
Go to the top of the page
 
+Quote Post
Harbour
сообщение Sep 11 2008, 10:25
Сообщение #7


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



был когда-то у далласа an187.pdf, где усе описано - для ленивых выкладываю свой древний код, который был написан по их исходникам. нужная ф-ия называется u64 w1_search_devices()
Прикрепленные файлы
Прикрепленный файл  w1.h.txt ( 1.7 килобайт ) Кол-во скачиваний: 186
Прикрепленный файл  w1.c.txt ( 10.12 килобайт ) Кол-во скачиваний: 275
 
Go to the top of the page
 
+Quote Post
timex
сообщение Sep 11 2008, 12:45
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 27-04-05
Из: Воронеж
Пользователь №: 4 541



xemul, спасиб, нашёл кое-что у maxim, читаю...

Harbour, тож спасиб, разберёмся.

щас нашёл - оказывается, у DS24B08 есть команда для автоматизиции поиска. видимо эту команду и заюзаю...
Go to the top of the page
 
+Quote Post
Guest_Цыкетчик_*
сообщение Sep 23 2008, 18:31
Сообщение #9





Guests






Цитата(Harbour @ Sep 11 2008, 14:25) *
был когда-то у далласа an187.pdf, где усе описано - для ленивых выкладываю свой древний код, который был написан по их исходникам. нужная ф-ия называется u64 w1_search_devices()

А не могли бы в кратце рассказать на каком принципе там усё работает? А то я в СИ (так же как и в английском) не очень силЁн.

Просто я сейчас работаю на похожей темой вот тут
Go to the top of the page
 
+Quote Post
Harbour
сообщение Sep 24 2008, 01:39
Сообщение #10


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



binary tree leafs discovery - читайте pdf там английским по белому все расписано
Go to the top of the page
 
+Quote Post
Ledmaster
сообщение Sep 24 2008, 03:55
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 18-02-08
Из: Челябинск
Пользователь №: 35 141



Цитата(Цыкетчик @ Sep 24 2008, 00:31) *
А не могли бы в кратце рассказать на каком принципе там усё работает? А то я в СИ (так же как и в английском) не очень силЁн.

Просто я сейчас работаю на похожей темой вот тут

Вкратце, среди устройств на шине устраивается "соцопрос": - У кого в серийнике ноль в 63 разряде, поднимите руку (вернее, опустите ногу)! smile.gif А теперь, у кого в 62-м, и т.д. Поскольку на шине монтажное "или", ноль в заданном разряде может быть одновременно у нескольких устройств, поэтому, в общем случае, за один проход вычисляется только один серийный номер.
Go to the top of the page
 
+Quote Post
Guest_Цыкетчик_*
сообщение Sep 24 2008, 08:03
Сообщение #12





Guests






Спасибо. Вы очень доходчиво объяснили (сразу видно, что Вы действительно разбираетесь).

Цитата(Ledmaster @ Sep 24 2008, 07:55) *
поэтому, в общем случае, за один проход вычисляется только один серийный номер.

А после того, как MAC очередного девайса определён ему даётся команда "отключится от опроса"?


А можно определять MAC не как в 1-Wire последовательно, по одному адресу, а сразу несколько адресов последовательно увеличивая кол-во распознанных бит?

Сообщение отредактировал Цыкетчик - Sep 24 2008, 08:22
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 24 2008, 08:42
Сообщение #13



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Цыкетчик @ Sep 24 2008, 12:03) *
А после того, как MAC очередного девайса определён ему даётся команда "отключится от опроса"?

Направлением поиска рулит мастер, который не будет повторять дважды один и тот же маршрут.
Ванварный алгоритм поиска:
1) мастер выдает команду поиска
2) (оставшиеся в поиске) слейвы выдают на шину младший (очередной) бит своих серийных номеров
3) (оставшиеся в поиске) слейвы выдают на шину инверсию младшего (очередного) бита своих серийных номеров
4) по комбинации из 2) и 3) мастер определяет направление дальнейшего поиска, выдавая на шину 0 или 1; устройства, у которых направление поиска не совпало с текущим битом серийного номера, в дальнейшем поиске не участвуют
5) while(++SN_Bit_Cnt < SN_LENGTH) goto 2)
6) получили SN очередного устройства
7) если в дереве поиска остались неоднозначности, goto 1)

Посмотрите все-таки на досуге app187.pdf
Go to the top of the page
 
+Quote Post
Guest_Цыкетчик_*
сообщение Sep 24 2008, 09:53
Сообщение #14





Guests






Цитата(xemul @ Sep 24 2008, 12:42) *
получили SN очередного устройства

А можно ли определять SN сразу всех устройств? Т.е. сначала 1-й бит SN всех устройств. Потом первые 2 бита. Потом первые 3 бита сразу ВСЕХ устройств. Потом все биты ВСЕХ устройств.

Т.е. можно ли сканирование организовать таким образом?
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 24 2008, 10:20
Сообщение #15



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Цыкетчик @ Sep 24 2008, 13:53) *
А можно ли определять SN сразу всех устройств?

Конечно можно. Н-р, подписываете SN'ы на крышках устройств, читаете картинку каким-нить глазом, распознаете SN'ы - ву а ля.
Цитата
Т.е. сначала 1-й бит SN всех устройств. Потом первые 2 бита. Потом первые 3 бита сразу ВСЕХ устройств. Потом все биты ВСЕХ устройств.

Т.е. можно ли сканирование организовать таким образом?

Конечно можно. Меняете в приведенном выше ванварном алгоритме внутренний и внешний циклы местами - ву а ля. Только при таком подходе и при неизвестном количестве устройств требуемая разрядность дерева поиска также неизвестна.

Всякоразные алгоритмы поиска очень хорошо разобраны, по-моему, в 3-м томе "Искусства программирования" Кнута. Рекомендую.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01476 секунд с 7
ELECTRONIX ©2004-2016