|
Применение DS1820 и LCD44780 для начинающих, Подключение нескольких DS1820 на шину. |
|
|
|
Nov 20 2006, 23:11
|
Гуру
     
Группа: Свой
Сообщений: 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-ёх строчных дисплеев, но я не проверял.
|
|
|
|
|
 |
Ответов
|
Jan 20 2007, 14:02
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(SasaVitebsk @ Jan 20 2007, 05:20)  Использование нескольких датчиков одновременно? Дело в том что не нашёл нигде. А в общем встроенные библиотеки конечно хороши. Но если они не на Си, то это не облегчает работу (для неначинающих). В CV они на C. Но вот сама возможность подключения нескольких датчиков, с использованием в дальнейшем их поиска на шине, кмк вещь бесполезная. Как их отличать? Простейший пример - один датчик на улице, другой в квартире. Хочется не просто получить две температуры, но и знать, какая из них на улице, а какая в доме. Или есть способ? Подключение по очереди с запоминанием серийного номера - простейший, но это не требует поиска на шине, то есть не совсем то.
|
|
|
|
|
Jan 21 2007, 19:06
|
Знающий
   
Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057

|
Цитата(Qwertty @ Jan 20 2007, 14:02)  Простейший пример - один датчик на улице, другой в квартире. Хочется не просто получить две температуры, но и знать, какая из них на улице, а какая в доме. Или есть способ? Подключение по очереди с запоминанием серийного номера - простейший, но это не требует поиска на шине, то есть не совсем то. Я рассматривал вариант задействования для этого верхнего/нижнего предела для аларма. Они сохраняются при выключении. Правда, пока не дошел ход, не проверял. Да и все равно, надо делать начальное сканирование, сохранять адреса... Лучше для этого (в моем случае) EEPROM использовать.
|
|
|
|
|
Jan 21 2007, 19:20
|
Гуру
     
Группа: Свой
Сообщений: 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)  Простейший пример - один датчик на улице, другой в квартире. Хочется не просто получить две температуры, но и знать, какая из них на улице, а какая в доме. Или есть способ? Подключение по очереди с запоминанием серийного номера - простейший, но это не требует поиска на шине, то есть не совсем то. Подключение по очереди ИМЕННО ТРЕБУЕТ поиска на шине и запоминание уже подключенных. Вообще поиск применяют там, где устройство сделано в одном месте, а датчик / датчики - подключат в другом.
|
|
|
|
|
Jan 21 2007, 23:35
|
Местный
  
Группа: Свой
Сообщений: 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 не получится. Данные в них еще надо занести, а для этого придется решать, в какой датчик что писать. И выйдет заколдованный круг.
|
|
|
|
|
Jan 22 2007, 02:50
|
Гуру
     
Группа: Свой
Сообщений: 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 записывать будете? Цитата Использовать Th, TL не получится. Данные в них еще надо занести, а для этого придется решать, в какой датчик что писать. И выйдет заколдованный круг.  Ну это решение необходимо принимать так или иначе. Я не использую такой режим и в библиотеках его нет. Подытоживая скажу. Безусловно не существует универсальных решений. Я делал эту библиотеку, конечно не для баловства, а она у меня применена в проекте. Попутно выложил. Я её не навязываю. Это бессмысленно. Если Вам она не подходит, то за уши притаскивать глупо. В тоже время там есть, к примеру чтение одиночных датчиков с помощью команды skip rom. IAR, к примеру, не использованные п/п не подключит. Поэтому вы можете использовать удобные для Вас. Кроме того они выложены в исходниках и Вы можете кроить их на своё усмотрение. Можете задавать вопросы. Буду отвечать.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|