Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
01.12.2007, 16:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Да подождь ты,там еще стока ошибок было,исправил,еще немного код подкоректирую и выложу.
MVI-это макрос,он прописан почти в самом начале.
|
|
|
|
01.12.2007, 17:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Вот держи рабочий,правда немного намудрил там,целый день делал,аж голова опухла ,осталось собаку включить и подкоректировать лишнее и в железе собрать.
Да и светодиодик загорается когда минусовое значение,надо там дописать сбросить его вначале следущего считывания температуры.Если не поймеш покажу.
Прикрепленный файл: 1286078.rar
|
|
|
|
01.12.2007, 17:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Да еще такой вопрос для спецов,которые с такой шиной работали.Например если у меня будет два датчика DS18B20,то как опросить их,чтоб получить их серийные номера? Ведь при подачи команды SEARCH ROM(0xF0),то они начнут одновременно выдавать серийники.Просто в даташивфте ничего толком про это не написано.
|
|
|
|
01.12.2007, 19:59
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Более простой с точки зрения программирования способ такой. Составляется небольшая вспомогательная программа, которая используется в микроконтроллере только в процессе определения номеров датчиков. При этом к сигнальной шине поочередно присоединяется по одному датчику и контроллер каждый раз выдает на шину последовательность из 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 прохода, в одном из которых микроконтроллер после конфликта устанавливает на шине логический нуль, а в другом – логическую единицу.
Если количество датчиков на шине неизвестно, то можно использовать следующий алгоритм. При первом проходе после каждого конфликта контроллер выставляет на шину нуль. Число, составленное из этих нулей, будем называть контрольным числом. Далее контрольное число модифицируется и используется для управления значениями, выставляемыми контроллером на шине при последующих реализациях операции поиска. Во время этих последующих проходов выполняются перечисленные ниже действия.
- Перед началом очередной процедуры контрольное число изменяется следующим образом. Если в младшем разряд присутствует нуль, то он заменяется на единицу и на этом модификация заканчивается., Если до модификации в младшем разряде присутствует единица, то число сдвигается на разряд вправо, так что эта единица теряется и количество битов в контрольном числе становится на один меньше. Если и после этого в младшем разряде оказывается единица, то она тоже отбрасывается, и так до тех пор, пока в младшем разряде не окажется нуль. Этот нуль заменяется на единицу и на этом модификация контрольного числа заканчивается.
- При проведении процедуры поиска контроллер после каждого очередного конфликта выставляет на шине значение, равное значению очередного бита контрольного числа, начиная со старшего. Если количество конфликтов окажется меньше, чем число битов контрольного числа, то контрольное число укорачивается на количество неиспользованных битов, т.е. младшие неиспользованные биты удаляются из контрольного числа. Если же конфликтов окажется больше, чем число битов в контрольном числе, то контрольное число дополняется нулями со стороны младших разрядов. Таким образом, после каждого прохода количество битов в контрольном числе равно количеству конфликтов, которое было выявлено в данном проходе.
- Если количество битов в контрольном числе при его модификации уменьшилось до нуля (это означает, что до модификации во всех битах были единицы), то процедура поиска датчиков на линии заканчивается - все датчики уже выявлены
|
|
|
|
01.12.2007, 21:58
|
|
Временная регистрация
Регистрация: 03.10.2006
Сообщений: 75
Сказал спасибо: 51
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
|
[quote="CERGEI1982"]Да еще такой вопрос для спецов,которые с такой шиной работали.Например если у меня будет два датчика DS18B20,то как опросить их,чтоб получить их серийные номера? Ведь при подачи команды SEARCH ROM(0xF0),то они начнут одновременно выдавать серийники.Просто в даташивфте ничего толком про это не написано.[/quote
Терпи до понедельньника. На работе есть код в асм. для двух датчиков. Помоему Досикус делился.
|
|
|
|
03.12.2007, 12:42
|
|
Временная регистрация
Регистрация: 03.10.2006
Сообщений: 75
Сказал спасибо: 51
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
|
Сообщение от CERGEI1982
|
Да еще такой вопрос для спецов,которые с такой шиной работали.Например если у меня будет два датчика DS18B20,то как опросить их,чтоб получить их серийные номера? Ведь при подачи команды SEARCH ROM(0xF0),то они начнут одновременно выдавать серийники.Просто в даташивфте ничего толком про это не написано.
|
2 датчика на одной линии.
Прикрепленный файл: 2118079.rar
|
|
|
|
03.12.2007, 12:46
|
|
Временная регистрация
Регистрация: 03.10.2006
Сообщений: 75
Сказал спасибо: 51
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
|
Сообщение от CERGEI1982
|
Да еще такой вопрос для спецов,которые с такой шиной работали.Например если у меня будет два датчика DS18B20,то как опросить их,чтоб получить их серийные номера? Ведь при подачи команды SEARCH ROM(0xF0),то они начнут одновременно выдавать серийники.Просто в даташивфте ничего толком про это не написано.
|
2 датчика на одной линии.
Прикрепленный файл: 1643039.rar
|
|
|
|
03.12.2007, 16:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Благодарю,время свободное выберу разберу ее.
|
|
|
|
03.12.2007, 17:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Сообщение от Zemlyanov
|
Если это слово 01, то следовательно у всех датчиков в данном бите записана цифра 0. Если слово имеет вид 10, то, значит, все датчики имеют 1 в данном бите. Если слово содержит 2 единицы 11, то это означает, что датчиков на линии нет. И наконец, если слово состоит из двух нулей 00, то это означает, что на шине был конфликт, т.е. на шине имеются как датчики, которые в данном бите имеют значение 1, так и датчики, имеющие 0 в данном бите. В заключение, на третьем шаге данного цикла, микроконтроллер выставляет на линию одно из двух значений: 0 или 1. Соответственно этому в следующем цикле участвуют только те датчики, которые в данном бите имеют выставленное микроконтроллером значение.
|
Я не понял третьй шаг.
Во первый что должен выставлять микроконтролер 0 или 1 ? наверно в зависимости от чего то.
Во вторых он выставит например 1 и что дальше? что при этом делает датчик? выставляет ноль или как?
Вот это для меня непонятно.
|
|
|
|
06.12.2007, 14:45
|
|
Временная регистрация
Регистрация: 01.11.2006
Сообщений: 66
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Древрвидная схема поиска, Сергей.
После получения очередного конфликта, конотроллер выбирает, какую ветку отсечь.
Например, 3 датчика, (1)101, (2)001, (3)010
Смотрим сеарч ром для первого бита: 00,
Выбираем 0. Датчик (1) после этого отдыхает и не участвует в обмене до сброса.
Смотрим второй: 00
выбираем 0, и датчик 3 отдыхает.
смотрим третий : 10, остался один датчик (2) который и выдал бесконфликтный бит.
Если надо, на пиковском асме есть процедуры DS.FindFirst и DS.FindNext. Названия говорят за себя (для любого количества датчиков). Если надо, пиши - выложу, когда со своего компа зайду. Правда оперативки едят немеряно (что-то около 26 байт), но работают, и универсальны.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:18.
|
|