|
Применение DS1820 и LCD44780 для начинающих, Подключение нескольких DS1820 на шину. |
|
|
|
Jan 22 2007, 12:50
|

Знающий
   
Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768

|
[quote name='GDI' date='Jan 22 2007, 11:48' post='199881'] [quote](GDI @ Jan 19 2007, 11:44) *
В CV в примерах есть подобный проект с использованием встроенных библиотек 1-wire и HD44780. А еще там есть встроенные функции задержки delay_ms(N) и delay_us(N) где N - это число милли- или микросекунд, соответственно, доступны при подключении delay.h.
В CV встроенные именно 1-wire и HD44780 - их исходный код не доступен, на Си, по крайней мере, а DS18B20 вполне на Си только расширение у файла .lib. Хорошо когда есть выбор использовать встроенные библиотеки или написанные отдельно... Вот только новичку трудно будет ее портировать на CV, а более искушенные разработчики уходят от CV на IAR или на другие компиляторы...
[quote]Но вот если нужно будет не 2 датчика, а например 16?[/quote]
Я делал проект на 8 датчиков на 8 ножках контроллера - все работало. [/quote] В CV все либы доступны именно на С,посмотрите внимательнее. И насчет портирования с IAR-делал много раз,никаких проблем не доставляет. Проект SasaVitebsk перегнать в СV-дел примерно на полчаса с перекуром.
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Jan 22 2007, 13:20
|
Профессионал
    
Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008

|
Цитата В CV все либы доступны именно на С,посмотрите внимательнее. Предлагаю посмотреть по-лучше вам и в доказательство приведите, пожалуйста исходный код встроенной функции w1_init(void) или w1_read(void) объявленных в 1wire.h У меня есть версия 1.24.8b Professional, может у вас Full и там это есть? Цитата И насчет портирования с IAR-делал много раз,никаких проблем не доставляет. Проект SasaVitebsk перегнать в СV-дел примерно на полчаса с перекуром. Ни сколько не сомневаюсь, но и вы, далеко, не начинающий...
--------------------
|
|
|
|
|
Jan 22 2007, 14:25
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(SasaVitebsk @ Jan 22 2007, 12:38)  7+CRC=8. "Близка к 0" это свойство моего характера - выражаться уклончиво. Я думаю если Вы начнёте экспериментировать, то не дождётесь данного события.  Хотя, можно не экспериментировать и записать все 7 байт на датчик, как это делаю я. Я больше чем уверен, что дождусь не только не успев состариться, но при 32 датчиках на шине возможно даже чаю попить не успею  . CRC - 8бит. Абсолютно независимо от входных данных, над которыми выполнялась свертка, возможно всего 256 вариантов CRC. Так что перебрав в среднем 256 датчиков я получу искомое совпадение. Ес-но могу и не получить, но есть вероятность с первого раза вытащить именно такую пару  Цитата Подожди, так в моём варианте это выглядит ещё проще. Подключите датчик улицы - спасибо - Подключите датчик комнаты - спасибо. Даже кнопку нажимать не надо. Я и так увижу. Да и вообще запрос можно не выдавать. Главное по два не подключать. Но можно и два и три. Просто в данном случае неизвестно как система их индентифицирует. Но это не главное. В этом тоже есть своё преимущество. Разъёмы у меня паралельны. Куда бы я не воткнул уличный датчик - он будет уличный. Но у меня сейчас по другому. Я просто предлагаю воткнуть нужное колличество датчиков и определить какой куда. Тоже интерактивное обучение.  А имя присвоить или картинку можно к любому любую. Так чем Вас не устраивает такая модель? В моем варианте кнопка то-же не обязательна. В отличие от запроса - он необходим для правильного обучения. А для определения, что на шине появилось устройство достаточно всего лишь выполнить сброс шины, искать ничего не надо. Разъемы в таком варианте тоже параллельны, отличие чисто софтовые, в алгоритме обучения. Тот что предлагаю я проще, меньше по объему кода и быстрее. Как идентифицировать датчики включаемые по два и три я так и не понял  Цитата Извини, но фраза "немного разгружает контроллер", - это для меня непереводимая игра слов.  Я считаю что программа написана правильно и конроллер под проект выбран правильно если проц загружен на 80% и более. И то в том случае если проект будет развиваться. Но был у меня проект с загрузкой 98% процессорного времени. Это нормально. Это говорит о том, что программист постарался "выжать из камня всё". Программа пишется один раз, а пользуются ей - длительное время. Поэтому нужно попробовать максимально использовать все возможности. Критерии загрузки бывают разные. Для меня например нормально когда память программ заполнена на 10% и большую часть времени контроллер спит. Просто задача требует 44в/в и младшие контроллеры не подходят. Можно конечно взять Мегу8 и кучку регистров внешних, но это выйдет дороже, надежность снизится а потребление вырастет. Так что я использую контроллер "неоптимально" и сплю спокойно  Цитата Решение есть всегда. Настоящий программист такого не напишет.  Да, это я погорячился. Надо было так - "К сожалению решение ПОКА не найдено"  Цитата(GDI @ Jan 22 2007, 11:48)  В CV встроенные именно 1-wire и HD44780 - их исходный код не доступен, на Си, по крайней мере, а DS18B20 вполне на Си только расширение у файла .lib. 1-wire встроенная, HD44780 - вполне открытая - lcd.h, lcd.lib
|
|
|
|
|
Jan 22 2007, 16:05
|
Частый гость
 
Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868

|
Поделюсь опытом развешивания по дому DS18B20 в количестве 10 штук (улица, чердак, погреб, по комнатам, к баку с водой, в общем куда токо можно). Естественно в параллель на шину из телефонного кабеля, ибо звезданутая топология по кабелю вышла бы намного хуже. Да и ног могло бы не хватить. Так вот, я просто сел и поочередно подключая их к устройству (мега8, выход на RS232) давал команду поиска, записывал в экселевскую табличку ID датчика и складывал датчики в рядочек. А потом табличку распечатал и порезал на ленточки, привязав каждую ленточку скотчем к датчику. И все, теперь можно прямо в ту же табличку на экселе вбить названия мест установки датчиков (что я и сделал) и затем пойти развесить их в соответствие с этой таблицей. То есть просто нужно пронумеровать датчики заранее (кстати на сами датчики можно наносить не ID, а только порядковые номера), а устанавливать их потом уже строго по таблице. И тогда после включения все само заработает.
|
|
|
|
|
Jan 22 2007, 17:08
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Я же уже говорил моя библиотека удобна если изделие сделано в одном месте, а используется совершенно в другом. Или например сразу поставили 3 датчика, потом добавили ещё 2. Я делаю идентификацию еще проще. Беру и просто их подключаю. Они у меня нумеруются (автоматически). Далее отображаю их значения и по одному беру в руку.  Температура начинает расти, и я вижу за какой я взялся. Поскольку данная операция используется только тогда, когда проводится установка новых датчиков, то она не вызывает никакой сложности. Впоследствии, даже если датчики воткнуты не в те разъёмы, нумерация датчиков не меняется.
|
|
|
|
|
Jan 23 2007, 14:15
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(GDI @ Jan 23 2007, 13:43)  2 WHALE именно это я и имел ввиду, что в Си ее нет, но и с асмом можно разобраться, а изменить куда сложнее - по сути надо заново переписать библиотеку на асмовых вставках, тогда уж лучше использовать сразу Си и представленную выше библиотеку. Библиотеки тоже разные бывают. Так например, моя библиотека для DS вполне стандартная, кроме наличия возможности работы с несколькими датчиками одновременно. Если нет необходимости в этом, то можно воспользоваться любой аналогичной библиотекой. Но в библиотеке для LCD есть несколько отличий (не знаю как это реализовано в CV). Подключив мою библиотеку Вы можете пользоваться стандартной ф-цией prinf. Таким образом вы можете вывести число с плавающей точкой не думая как бы его преобразовать. Но не только это. Вы можете вывести число в конкретную позицию экрана. Например таким способом printf("\CR_CURDIRECT\0x25",Cnt1820); выведем число в первую строку в пятую позицию. С одной стороны ничего в этом нет, но это на первый взгляд. Таким образом можно в текстовом выде закодировать экранное меню с положением полей вывода информации. То есть при многостраничном меню, - сами меню хранятся в текстовом виде как строки.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|