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

 
 
> Применение DS1820 и LCD44780 для начинающих, Подключение нескольких DS1820 на шину.
SasaVitebsk
сообщение Nov 20 2006, 23:11
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Исследовал работу нескольких DS18B20/DS1820 "сидящих" на одной шине, а также возможность динамического подключения/замены данных датчиков на шине. Не нашёл. Некоторые библиотеки, в том числе выложенные на этом форуме являются нерабочими. Написал библиотеки, проверил и выложил их в виде библиотек в соответствующем разделе форума.

А здесь предлагаю для начинающих полный учебный проект использования данных библиотек. Написаны и проверены на стенде Nix-06 для начинающих который обсуждался в топике "getting started ..." и расположен по nix-06.nm.ru. Проект написан на IAR C и закончен, а то многие писали, что хотелось бы понять как применять те или иные библиотеки. Мои или другие.

Подключается несколько датчиков DS1820/ds18b20/ds18s20 в любом сочетании. На LCD дисплей выводится их количество и температура каждого. Допустимо подключения датчиков по двух-проводной схеме включения. Используется динамическое выделение памяти под ROM датчиков.

Библиотека LCD написана таким образом что допускает использование стандартных функций вывода outs и printf с элементами форматирования. Что и пременено в проекте. Имеется прямая индексация курсора и прочие вещи, которые облегчают написание меню и многоуровневых меню. В принципе должно работать для 4-ёх строчных дисплеев, но я не проверял.
Прикрепленные файлы
Прикрепленный файл  ds18b20.zip ( 17.94 килобайт ) Кол-во скачиваний: 522
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GDI
сообщение Jan 19 2007, 10:44
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



В CV в примерах есть подобный проект с использованием встроенных библиотек 1-wire и HD44780. А еще там есть встроенные функции задержки delay_ms(N) и delay_us(N) где N - это число милли- или микросекунд, соответственно, доступны при подключении delay.h.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 20 2007, 05:20
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(GDI @ Jan 19 2007, 11:44) *
В CV в примерах есть подобный проект с использованием встроенных библиотек 1-wire и HD44780. А еще там есть встроенные функции задержки delay_ms(N) и delay_us(N) где N - это число милли- или микросекунд, соответственно, доступны при подключении delay.h.


Использование нескольких датчиков одновременно? Дело в том что не нашёл нигде.

А в общем встроенные библиотеки конечно хороши. Но если они не на Си, то это не облегчает работу (для неначинающих). Дело в том что редко какая-нибудь аппаратная хрень используется точно так как прописано. Обычно надо "почти так, но вот тут чуть чуть подправить". smile.gif И в этом смысле Си-шные библиотеки это позволяют делать.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jan 20 2007, 14:02
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(SasaVitebsk @ Jan 20 2007, 05:20) *
Использование нескольких датчиков одновременно? Дело в том что не нашёл нигде.
А в общем встроенные библиотеки конечно хороши. Но если они не на Си, то это не облегчает работу (для неначинающих).

В CV они на C. Но вот сама возможность подключения нескольких датчиков, с использованием в дальнейшем их поиска на шине, кмк вещь бесполезная. Как их отличать? Простейший пример - один датчик на улице, другой в квартире. Хочется не просто получить две температуры, но и знать, какая из них на улице, а какая в доме. Или есть способ? Подключение по очереди с запоминанием серийного номера - простейший, но это не требует поиска на шине, то есть не совсем то.
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Jan 21 2007, 19:06
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



Цитата(Qwertty @ Jan 20 2007, 14:02) *
Простейший пример - один датчик на улице, другой в квартире. Хочется не просто получить две температуры, но и знать, какая из них на улице, а какая в доме. Или есть способ? Подключение по очереди с запоминанием серийного номера - простейший, но это не требует поиска на шине, то есть не совсем то.

Я рассматривал вариант задействования для этого верхнего/нижнего предела для аларма. Они сохраняются при выключении. Правда, пока не дошел ход, не проверял. Да и все равно, надо делать начальное сканирование, сохранять адреса... Лучше для этого (в моем случае) EEPROM использовать.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 21 2007, 19:20
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Andy Great @ Jan 21 2007, 20:06) *
Я рассматривал вариант задействования для этого верхнего/нижнего предела для аларма. Они сохраняются при выключении. Правда, пока не дошел ход, не проверял. Да и все равно, надо делать начальное сканирование, сохранять адреса... Лучше для этого (в моем случае) EEPROM использовать.


Если рассматривать подключение по очереди, то это можно сделать и с помощью моей библиотеки. К тому же, если хочется не тратить память, то можно запоминать лишь метку датчика. Этой меткой является CRC. То есть для хранения необходим лишь один байт. Но это всё равно не сработает если подключить сразу два. Из этого нет выхода, кроме как каждое гнездо на свой вход.

Цитата(Qwertty @ Jan 20 2007, 14:02) *
Простейший пример - один датчик на улице, другой в квартире. Хочется не просто получить две температуры, но и знать, какая из них на улице, а какая в доме. Или есть способ? Подключение по очереди с запоминанием серийного номера - простейший, но это не требует поиска на шине, то есть не совсем то.


Подключение по очереди ИМЕННО ТРЕБУЕТ поиска на шине и запоминание уже подключенных. Вообще поиск применяют там, где устройство сделано в одном месте, а датчик / датчики - подключат в другом.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jan 21 2007, 23:35
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(SasaVitebsk @ Jan 21 2007, 19:20) *
Если рассматривать подключение по очереди, то это можно сделать и с помощью моей библиотеки. К тому же, если хочется не тратить память, то можно запоминать лишь метку датчика. Этой меткой является CRC. То есть для хранения необходим лишь один байт. Но это всё равно не сработает если подключить сразу два. Из этого нет выхода, кроме как каждое гнездо на свой вход.

По аналогии с базами данных, точнее первичным ключом - идентификатор не должен повторяться. А CRC вполне может.

Цитата(SasaVitebsk @ Jan 21 2007, 19:20) *
Подключение по очереди ИМЕННО ТРЕБУЕТ поиска на шине и запоминание уже подключенных. Вообще поиск применяют там, где устройство сделано в одном месте, а датчик / датчики - подключат в другом.

Я наверно неправильно выразился. Имелся в виду режим обучения, когда датчики подключаются-отключаются по очереди. Одновременно на шине только один датчик. Тогда поиск не нужен и возможно четко провести идентификацию - SKIP ROM- READ ROM. И сохранить считанное в ЕЕПРОМ.

Использовать Th, TL не получится. Данные в них еще надо занести, а для этого придется решать, в какой датчик что писать. И выйдет заколдованный круг. smile.gif
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 22 2007, 02:50
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Qwertty @ Jan 22 2007, 00:35) *
По аналогии с базами данных, точнее первичным ключом - идентификатор не должен повторяться. А CRC вполне может.


В данном случае не совсем так. Поясню. CRC является свёрткой. Это математическая ф-ция. Высчитывается её "мощность" - то есть колличество неповторяющихся данных при непрерывной генерации. Для данной формулы CRC примерно 128 байт. читаем же мы всего 7. Если учитывать такой фактор, что 1-2 байта будут повторятся (семейство/партия), то вероятность совпадения близка к нулю.

Цитата
Я наверно неправильно выразился. Имелся в виду режим обучения, когда датчики подключаются-отключаются по очереди. Одновременно на шине только один датчик. Тогда поиск не нужен и возможно четко провести идентификацию - SKIP ROM- READ ROM. И сохранить считанное в ЕЕПРОМ.


Ну это уже совсем из области фантазии. Совсем не представляю область применения датчиков таким образом. Я ещё понимаю подключение по одному. Подключил один - привязал (комната). Потом подключил второй - привязал (улица). А если используешь SKIP ROM, то что Вы тогда в EEPROM записывать будете? smile.gif

Цитата
Использовать Th, TL не получится. Данные в них еще надо занести, а для этого придется решать, в какой датчик что писать. И выйдет заколдованный круг. smile.gif


Ну это решение необходимо принимать так или иначе. Я не использую такой режим и в библиотеках его нет.


Подытоживая скажу. Безусловно не существует универсальных решений. Я делал эту библиотеку, конечно не для баловства, а она у меня применена в проекте. Попутно выложил. Я её не навязываю. Это бессмысленно. Если Вам она не подходит, то за уши притаскивать глупо. В тоже время там есть, к примеру чтение одиночных датчиков с помощью команды skip rom. IAR, к примеру, не использованные п/п не подключит. Поэтому вы можете использовать удобные для Вас. Кроме того они выложены в исходниках и Вы можете кроить их на своё усмотрение.
Можете задавать вопросы. Буду отвечать. smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SasaVitebsk   Применение DS1820 и LCD44780 для начинающих   Nov 20 2006, 23:11
- - SasaVitebsk   Несколько человек обращалось по поводу сложности п...   Jan 19 2007, 01:31
- - bodja74   Саша ,сделай что то типа этого (проверка BUSY),и н...   Jan 19 2007, 01:58
- - SasaVitebsk   Я использую BUSY. А задержки всё равно нужны. 1) д...   Jan 19 2007, 02:54
|- - SasaVitebsk   Цитата(Qwertty @ Jan 20 2007, 15:02) В CV...   Jan 20 2007, 15:31
|- - Qwertty   Цитата(SasaVitebsk @ Jan 22 2007, 02:50) ...   Jan 22 2007, 04:03
|- - SasaVitebsk   Цитата(Qwertty @ Jan 22 2007, 05:03) Поче...   Jan 22 2007, 12:38
|- - Qwertty   Цитата(SasaVitebsk @ Jan 22 2007, 12:38) ...   Jan 22 2007, 14:25
- - GDI   Цитата(GDI @ Jan 19 2007, 11:44) * В CV в примера...   Jan 22 2007, 11:48
|- - WHALE   [quote name='GDI' date='Jan 22 2007, 1...   Jan 22 2007, 12:50
- - GDI   ЦитатаВ CV все либы доступны именно на С,посмотрит...   Jan 22 2007, 13:20
- - GDI   Признаю, что с HD44780 я ошибся   Jan 22 2007, 14:37
- - boez   Поделюсь опытом развешивания по дому DS18B20 в кол...   Jan 22 2007, 16:05
- - SasaVitebsk   Я же уже говорил моя библиотека удобна если издели...   Jan 22 2007, 17:08
- - WHALE   ЗвиняюсЬ,1-wire в CV действительно встроенная функ...   Jan 22 2007, 21:22
- - GDI   2 WHALE именно это я и имел ввиду, что в Си ее нет...   Jan 23 2007, 12:43
- - SasaVitebsk   Цитата(GDI @ Jan 23 2007, 13:43) 2 WHALE ...   Jan 23 2007, 14:15


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 07:47
Рейтинг@Mail.ru


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