|
Применение 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, к примеру, не использованные п/п не подключит. Поэтому вы можете использовать удобные для Вас. Кроме того они выложены в исходниках и Вы можете кроить их на своё усмотрение. Можете задавать вопросы. Буду отвечать.
|
|
|
|
|
Jan 22 2007, 04:03
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(SasaVitebsk @ Jan 22 2007, 02:50)  ... Для данной формулы CRC примерно 128 байт. читаем же мы всего 7. Если учитывать такой фактор, что 1-2 байта будут повторятся (семейство/партия), то вероятность совпадения близка к нулю. Почему читаем 7? Всегда думал что идентификатор 64 бита, т.е. 8 байт. Близка к нулю и равна 0 - не одно и то-же.  Цитата(SasaVitebsk @ Jan 22 2007, 02:50)  Ну это уже совсем из области фантазии. Совсем не представляю область применения датчиков таким образом. Я ещё понимаю подключение по одному. Подключил один - привязал (комната). Потом подключил второй - привязал (улица). А если используешь SKIP ROM, то что Вы тогда в EEPROM записывать будете?  Не вижу причин так не сделать. Режим обучения - "Подключите датчик улицы и нажмите кнопку...", "Отключите уличный, подключите комнатный и нажмите кнопку". Вполне реализуемо. А после SKIP ROM никто не мешает выполнить READ ROM, что я выше и написал. Другое дело, что SKIP ROM в этом случае и не нужен  В ЕЕПРОМ писать то, что вернет датчик на READ ROM. Без CRC. Цитата(SasaVitebsk @ Jan 22 2007, 02:50)  Подытоживая скажу. Безусловно не существует универсальных решений. Я делал эту библиотеку, конечно не для баловства, а она у меня применена в проекте. Попутно выложил. Я её не навязываю. Это бессмысленно. Если Вам она не подходит, то за уши притаскивать глупо. В тоже время там есть, к примеру чтение одиночных датчиков с помощью команды skip rom. IAR, к примеру, не использованные п/п не подключит. Поэтому вы можете использовать удобные для Вас. Кроме того они выложены в исходниках и Вы можете кроить их на своё усмотрение. Можете задавать вопросы. Буду отвечать.  Неиспользуемые п.п. не подключают все компиляторы C. В свое время мне потребовалось в одном устройстве применить два DS18S20. И вот тогда встала проблема отличать их друг от друга. Задача была решена путем пожертвования "лишней" ножки контроллера так как я не нашел приемлемых путей ввести режим обучения. В устройстве не было ни индикатора, ни кнопок - вообще никакого интерфейса кроме светодиода. Изобретать азбуку Морзе не хотелось.  Но зато датчики читаются параллельно, что немного разгружает контроллер. Но вот если нужно будет не 2 датчика, а например 16? Вот отсюда и был мой вопрос о привязке идентификатора к положению датчика в пространстве  К сожалению видимо решения нет.
|
|
|
|
|
Jan 22 2007, 12:38
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Qwertty @ Jan 22 2007, 05:03)  Почему читаем 7? Всегда думал что идентификатор 64 бита, т.е. 8 байт. Близка к нулю и равна 0 - не одно и то-же.  7+CRC=8. "Близка к 0" это свойство моего характера - выражаться уклончиво. Я думаю если Вы начнёте экспериментировать, то не дождётесь данного события.  Хотя, можно не экспериментировать и записать все 7 байт на датчик, как это делаю я. Цитата Не вижу причин так не сделать. Режим обучения - "Подключите датчик улицы и нажмите кнопку...", "Отключите уличный, подключите комнатный и нажмите кнопку". Вполне реализуемо. А после SKIP ROM никто не мешает выполнить READ ROM, что я выше и написал. Другое дело, что SKIP ROM в этом случае и не нужен  В ЕЕПРОМ писать то, что вернет датчик на READ ROM. Без CRC. Подожди, так в моём варианте это выглядит ещё проще. Подключите датчик улицы - спасибо - Подключите датчик комнаты - спасибо. Даже кнопку нажимать не надо. Я и так увижу. Да и вообще запрос можно не выдавать. Главное по два не подключать. Но можно и два и три. Просто в данном случае неизвестно как система их индентифицирует. Но это не главное. В этом тоже есть своё преимущество. Разъёмы у меня паралельны. Куда бы я не воткнул уличный датчик - он будет уличный. Но у меня сейчас по другому. Я просто предлагаю воткнуть нужное колличество датчиков и определить какой куда. Тоже интерактивное обучение.  А имя присвоить или картинку можно к любому любую. Так чем Вас не устраивает такая модель? Цитата Но зато датчики читаются параллельно, что немного разгружает контроллер. Но вот если нужно будет не 2 датчика, а например 16? Вот отсюда и был мой вопрос о привязке идентификатора к положению датчика в пространстве  К сожалению видимо решения нет.  Извини, но фраза "немного разгружает контроллер", - это для меня непереводимая игра слов.  Я считаю что программа написана правильно и конроллер под проект выбран правильно если проц загружен на 80% и более. И то в том случае если проект будет развиваться. Но был у меня проект с загрузкой 98% процессорного времени. Это нормально. Это говорит о том, что программист постарался "выжать из камня всё". Программа пишется один раз, а пользуются ей - длительное время. Поэтому нужно попробовать максимально использовать все возможности. Решение есть всегда. Настоящий программист такого не напишет.  Он ставит на ночь два стакана (как известно) Один полный другой - пустой. Полный на случай если захочется пить, ну а пустой на случай если пить не захочется. Если меня спросит начальство можно ли сделать робота, который не отличается от человека (или другое аналогичное устр-во), то я отвечаю - "Да, но нецелесообразно"
|
|
|
|
Сообщений в этой теме
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, 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
|
|
|