Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 01.12.2007, 16:37  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Да подождь ты,там еще стока ошибок было,исправил,еще немного код подкоректирую и выложу.
MVI-это макрос,он прописан почти в самом начале.
Реклама:
CERGEI1982 вне форума  
Непрочитано 01.12.2007, 17:26  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Вот держи рабочий,правда немного намудрил там,целый день делал,аж голова опухла ,осталось собаку включить и подкоректировать лишнее и в железе собрать.
Да и светодиодик загорается когда минусовое значение,надо там дописать сбросить его вначале следущего считывания температуры.Если не поймеш покажу.

Прикрепленный файл: 1286078.rar
CERGEI1982 вне форума  
Непрочитано 01.12.2007, 17:37  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Да еще такой вопрос для спецов,которые с такой шиной работали.Например если у меня будет два датчика DS18B20,то как опросить их,чтоб получить их серийные номера? Ведь при подачи команды SEARCH ROM(0xF0),то они начнут одновременно выдавать серийники.Просто в даташивфте ничего толком про это не написано.
CERGEI1982 вне форума  
Непрочитано 01.12.2007, 19:59  
Zemlyanov
Гражданин KAZUS.RU
 
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
Zemlyanov на пути к лучшему
По умолчанию

Более простой с точки зрения программирования способ такой. Составляется небольшая вспомогательная программа, которая используется в микроконтроллере только в процессе определения номеров датчиков. При этом к сигнальной шине поочередно присоединяется по одному датчику и контроллер каждый раз выдает на шину последовательность из 2-х команд: Reset, Read ROM. После приема этих команд датчик выдает на шину свой 64-х разрядный номер. Найденные таким путем индивидуальные номера вписываются затем в основную программу микроконтроллера. Замена датчиков в этом случае должна сопровождаться перепрограммированием контроллера.

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

Для реализации второго способа используется последовательность команд Reset, Search ROM. Последняя команда запускает процедуру, состоящую из 64 циклов – по числу битов в индивидуальных номерах датчиков. Каждый из циклов состоит из 3-х шагов. Вначале все датчики выдают на линию один бит своего индивидуального номера, затем, во втором шаге, выставляют на шину инверсное значение этого бита. Таким образом, микроконтроллер получает для анализа слово, состоящее из 2-х бит. Если это слово 01, то следовательно у всех датчиков в данном бите записана цифра 0. Если слово имеет вид 10, то, значит, все датчики имеют 1 в данном бите. Если слово содержит 2 единицы 11, то это означает, что датчиков на линии нет. И наконец, если слово состоит из двух нулей 00, то это означает, что на шине был конфликт, т.е. на шине имеются как датчики, которые в данном бите имеют значение 1, так и датчики, имеющие 0 в данном бите. В заключение, на третьем шаге данного цикла, микроконтроллер выставляет на линию одно из двух значений: 0 или 1. Соответственно этому в следующем цикле участвуют только те датчики, которые в данном бите имеют выставленное микроконтроллером значение.

В результате однократного выполнения процедуры выявляется номер одного из датчиков. Затем снова микроконтроллер посылает на датчики последовательность команд Reset, Search ROM. И теперь после выявления одного из конфликтов микроконтроллер выставляет на шину значение бита, отличное от того, что было установлено при реализации предыдущей процедуры поиска. После второй реализации процедуры микроконтроллер получает информацию о номере второго датчика. Тогда, когда все варианты установки битов после конфликтов будут исчерпаны, процесс чтения индивидуальных номеров датчиков заканчивается.

Если, известно, что к шине присоединено только 2 датчика, то при проведении процесса чтения номеров следует ожидать только одного конфликта. Номера датчиков при этом устанавливаются за 2 прохода, в одном из которых микроконтроллер после конфликта устанавливает на шине логический нуль, а в другом – логическую единицу.

Если количество датчиков на шине неизвестно, то можно использовать следующий алгоритм. При первом проходе после каждого конфликта контроллер выставляет на шину нуль. Число, составленное из этих нулей, будем называть контрольным числом. Далее контрольное число модифицируется и используется для управления значениями, выставляемыми контроллером на шине при последующих реализациях операции поиска. Во время этих последующих проходов выполняются перечисленные ниже действия.

- Перед началом очередной процедуры контрольное число изменяется следующим образом. Если в младшем разряд присутствует нуль, то он заменяется на единицу и на этом модификация заканчивается., Если до модификации в младшем разряде присутствует единица, то число сдвигается на разряд вправо, так что эта единица теряется и количество битов в контрольном числе становится на один меньше. Если и после этого в младшем разряде оказывается единица, то она тоже отбрасывается, и так до тех пор, пока в младшем разряде не окажется нуль. Этот нуль заменяется на единицу и на этом модификация контрольного числа заканчивается.

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

- Если количество битов в контрольном числе при его модификации уменьшилось до нуля (это означает, что до модификации во всех битах были единицы), то процедура поиска датчиков на линии заканчивается - все датчики уже выявлены
Zemlyanov вне форума  
Непрочитано 01.12.2007, 21:58  
sem_sam
Временная регистрация
 
Регистрация: 03.10.2006
Сообщений: 75
Сказал спасибо: 51
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
sem_sam на пути к лучшему
По умолчанию

[quote="CERGEI1982"]Да еще такой вопрос для спецов,которые с такой шиной работали.Например если у меня будет два датчика DS18B20,то как опросить их,чтоб получить их серийные номера? Ведь при подачи команды SEARCH ROM(0xF0),то они начнут одновременно выдавать серийники.Просто в даташивфте ничего толком про это не написано.[/quote
Терпи до понедельньника. На работе есть код в асм. для двух датчиков. Помоему Досикус делился.
sem_sam вне форума  
Непрочитано 03.12.2007, 12:42  
sem_sam
Временная регистрация
 
Регистрация: 03.10.2006
Сообщений: 75
Сказал спасибо: 51
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
sem_sam на пути к лучшему
По умолчанию

Сообщение от CERGEI1982
Да еще такой вопрос для спецов,которые с такой шиной работали.Например если у меня будет два датчика DS18B20,то как опросить их,чтоб получить их серийные номера? Ведь при подачи команды SEARCH ROM(0xF0),то они начнут одновременно выдавать серийники.Просто в даташивфте ничего толком про это не написано.
2 датчика на одной линии.

Прикрепленный файл: 2118079.rar
sem_sam вне форума  
Непрочитано 03.12.2007, 12:46  
sem_sam
Временная регистрация
 
Регистрация: 03.10.2006
Сообщений: 75
Сказал спасибо: 51
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
sem_sam на пути к лучшему
По умолчанию

Сообщение от CERGEI1982
Да еще такой вопрос для спецов,которые с такой шиной работали.Например если у меня будет два датчика DS18B20,то как опросить их,чтоб получить их серийные номера? Ведь при подачи команды SEARCH ROM(0xF0),то они начнут одновременно выдавать серийники.Просто в даташивфте ничего толком про это не написано.
2 датчика на одной линии.

Прикрепленный файл: 1643039.rar
sem_sam вне форума  
Непрочитано 03.12.2007, 16:37  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Благодарю,время свободное выберу разберу ее.
CERGEI1982 вне форума  
Непрочитано 03.12.2007, 17:30  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Сообщение от Zemlyanov

Если это слово 01, то следовательно у всех датчиков в данном бите записана цифра 0. Если слово имеет вид 10, то, значит, все датчики имеют 1 в данном бите. Если слово содержит 2 единицы 11, то это означает, что датчиков на линии нет. И наконец, если слово состоит из двух нулей 00, то это означает, что на шине был конфликт, т.е. на шине имеются как датчики, которые в данном бите имеют значение 1, так и датчики, имеющие 0 в данном бите. В заключение, на третьем шаге данного цикла, микроконтроллер выставляет на линию одно из двух значений: 0 или 1. Соответственно этому в следующем цикле участвуют только те датчики, которые в данном бите имеют выставленное микроконтроллером значение.
Я не понял третьй шаг.
Во первый что должен выставлять микроконтролер 0 или 1 ? наверно в зависимости от чего то.
Во вторых он выставит например 1 и что дальше? что при этом делает датчик? выставляет ноль или как?
Вот это для меня непонятно.
CERGEI1982 вне форума  
Непрочитано 06.12.2007, 14:45  
rremix
Временная регистрация
 
Регистрация: 01.11.2006
Сообщений: 66
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
rremix на пути к лучшему
По умолчанию

Древрвидная схема поиска, Сергей.
После получения очередного конфликта, конотроллер выбирает, какую ветку отсечь.
Например, 3 датчика, (1)101, (2)001, (3)010
Смотрим сеарч ром для первого бита: 00,
Выбираем 0. Датчик (1) после этого отдыхает и не участвует в обмене до сброса.
Смотрим второй: 00
выбираем 0, и датчик 3 отдыхает.
смотрим третий : 10, остался один датчик (2) который и выдал бесконфликтный бит.
Если надо, на пиковском асме есть процедуры DS.FindFirst и DS.FindNext. Названия говорят за себя (для любого количества датчиков). Если надо, пиши - выложу, когда со своего компа зайду. Правда оперативки едят немеряно (что-то около 26 байт), но работают, и универсальны.
rremix вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Термометр на ds18b20 Peshevbis Микроконтроллеры, АЦП, память и т.д 83 31.12.2010 20:22
ds18b20 отключение от шины EKuzmich Микроконтроллеры, АЦП, память и т.д 24 29.08.2009 11:01
CD4051+DS18B20 gena1959 TTL и CMOS логика 5 03.09.2007 01:04
Модель DS18B20 Cap63 Микроконтроллеры, АЦП, память и т.д 3 22.01.2007 21:51
о датчиках ds18b20 Peshevbis Микроконтроллеры, АЦП, память и т.д 3 17.10.2006 17:17


Часовой пояс GMT +4, время: 07:18.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot