Работа с несколькими DS18B20
|
|
Alexandr280480 |
Дата: Пт, 28.12.2012, 19:16 | Сообщение # 16 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
96
Замечания:
±
На сайте с 23.01.2010
Статус:
Offline
|
Matrix252005, привет! скажи пожалуйста а зачем в этом коде вторая строка?
1.OWrite DQ, 1, [$33] 2.ORead DQ, 0, [ID1] 3.ORead DQ, 0, [ID1, ID2, ID3, ID4, ID5, ID6, ID7, ID8]
4.Print At 1, 1, Hex2 ID1, Hex2 ID2, Hex2 ID3, Hex2 ID4, Hex2 ID5, Hex2 ID6, Hex2 ID7
может в четвертой строке добавить НЕХ ID8
Я просто пытаюсь повесить несколько DS на одну линию, поэтому такой интерес к теме. Заранее благодарю!
Купить за деньги может ВСЁ, А ты попробуй сделай САМ!!!
|
|
|
|
ivan_fd |
Дата: Сб, 29.12.2012, 12:14 | Сообщение # 17 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Вторая строка, скорее всего не нужна.
Четвертая строка - просто вывод кода на дисплей, а ID8 - это CRC кода датчика.
Вам нужно, например, подключить по очереди датчики, считать с них код (8 байт) и записать в EEprom код каждого датчика. Потом, когда Вы подключите их все на одну линию, просто сначала пишите OWrite DQ, 1, [$55], далее пишем код датчика (8 бит) с которого хотите считать данные.
|
|
|
|
Alexandr280480 |
Дата: Сб, 29.12.2012, 22:51 | Сообщение # 18 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
96
Замечания:
±
На сайте с 23.01.2010
Статус:
Offline
|
Не получается определить, может я что не так делаю... Подключаю один датчик DS1822, читаю код 8байт, подключаю второй DS1822, отключая первый тот же код, не отключая какой то бред... Можно поподробнее как правильно делать? Спасибо
Купить за деньги может ВСЁ, А ты попробуй сделай САМ!!!
|
|
|
|
anatol |
Дата: Вс, 30.12.2012, 01:21 | Сообщение # 19 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
DS1822 ? Показалоссь ошиблись. А теперь по существу. Курим бамбук (даташит) и узнаем что чтобы читать несколько датчиков необходимо: 1. Считать их номера и записать в память. Для простоты уже указывали как, по очереди. 2. При вызове датчика пользоваться командой не [$33] - это для одного датчика, а [$55] с номером датчика. В даташите все расписано. Ладно немного добавлю http://www.rtcs.ru/files/article_file/23/rdatch1.pdf http://www.rtcs.ru/files/article_file/24/410rainbow.pdf
Сообщение отредактировал
anatol - Вс, 30.12.2012, 01:30
|
|
|
|
Alexandr280480 |
Дата: Вс, 30.12.2012, 21:00 | Сообщение # 20 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
96
Замечания:
±
На сайте с 23.01.2010
Статус:
Offline
|
Нет не ошибся! Датчик именно DS1822! как считать по очереди, пример есть? у меня у всех датчиков всё одинаковое...
Купить за деньги может ВСЁ, А ты попробуй сделай САМ!!!
|
|
|
|
anatol |
Дата: Вс, 30.12.2012, 23:23 | Сообщение # 21 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Цитата Потом, когда Вы подключите их все на одну линию, просто сначала пишите OWrite DQ, 1, [$55], далее пишем код датчика (8 бит) с которого хотите считать данные. Только поправлю "Потом, когда Вы подключите их все на одну линию, просто сначала пишите OWrite DQ, 1, [$55, далее пишем код датчика (8 бит) с которого хотите считать данные]. DQ = PORTX.Y - где X буква порта,а Y разряд порта. 1 - режим чтения-записи (от 1 до 8) описан в хэлпе на протон. И загляните в помощь протона - Там расписан OWrite и ORead
|
|
|
|
Alexandr280480 |
Дата: Вс, 30.12.2012, 23:27 | Сообщение # 22 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
96
Замечания:
±
На сайте с 23.01.2010
Статус:
Offline
|
Вроде разобрался присоединил три датчика (взял правда DS18b20, но в предыдущем сообщении я не ошибся, речь шла именно о ds1822), у меня вся проблема была в том что у всех трёх датчиком были одинаковые номера, вышел из ситуации следующим способом в меню "правка компонента" в меню ROM Serial Number на всех датчиках - B8C530. В следующей строке, в выпадающем меню "Automatic Serialization" выбрал -Yes и получил долгожданный результат, разные номера! Добавлено (30.12.2012, 23:27) --------------------------------------------- "Потом, когда Вы подключите их все на одну линию, просто сначала пишите OWrite DQ, 1, [$55, далее пишем код датчика (8 бит) с которого хотите считать данные]"
я понимаю нужно понимать 8 байт, а не бит?
Купить за деньги может ВСЁ, А ты попробуй сделай САМ!!!
|
|
|
|
anatol |
Дата: Вс, 30.12.2012, 23:40 | Сообщение # 23 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Alexandr280480, не обижайтесь. У меня нет готового решения. Писать прогу и отлаживать тоже нет желания. Да и незаче мне она. А помочь = натолкнуть на верный ход - пожалуйста . Разберетесь до последней точки сами - будет легче далее. Важно понимать порядок взаимодействия контроллера с датчиком. И по командам, и по времени взаимодействия.Добавлено (30.12.2012, 23:40) --------------------------------------------- OWrite DQ, 1, [$55, далее пишем код датчика (8 бит) с которого хотите считать данные]" OWrite PORTB.2, [$55,$00,$00,$00,$00,$00,$00,$00,$BE] Это "[$55,$00,$00,$00,$00,$00,$00,$00" - команда вызова датчика с №00 Это ",$BE]" - команда на выдачу результата подготовленного измерения. Как читать вы знаете
|
|
|
|
Alexandr280480 |
Дата: Пн, 31.12.2012, 08:56 | Сообщение # 24 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
96
Замечания:
±
На сайте с 23.01.2010
Статус:
Offline
|
что-то не пойму этот код... OWrite DQ, 1, [$55, далее пишем код датчика (8 бит) с которого хотите считать данные]" OWrite PORTB.2, [$55,$00,$00,$00,$00,$00,$00,$00,$BE] Это "[$55,$00,$00,$00,$00,$00,$00,$00" - команда вызова датчика с №00 Это ",$BE]" - команда на выдачу результата подготовленного измерения. Как читать вы знаетеДобавлено (31.12.2012, 08:56) --------------------------------------------- Ничего не получается...
Купить за деньги может ВСЁ, А ты попробуй сделай САМ!!!
|
|
|
|
ivan_fd |
Дата: Пн, 31.12.2012, 16:14 | Сообщение # 25 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Извините, но Вы даташит на датчик 18b20 смотрели? И при чем здесь ds1822, это совсем другое!!!
А теперь по делу.
Описываю алгоритм действий--->
Подготовьте подпрограммы, которыми Вы сначала, по очереди скачаете с каждого датчика код и запишите его в память EEprom. Потом, когда Вы уже будете знать коды всех датчиков:
1. Делаете процедуру инициализации init1820:
Код init1820:
Low dq ' Встановити 0 на шині DelayUS 500 ' Wait > 480us Input dq ' Release data pin (set to input for high) DelayUS 100 ' Wait > 60us If dq = 1 Then Return ' Try again EndIf DelayUS 400 ' Wait for end of presence pulse Return
2. Далее посылаете команду соответствия ROM $55. 3. Далее пишете в датчик, с которого хотите считать данные, 8 байт данных (его код). 4. Далее пишите в датчик команду Конвертировать температуру [$44]. 5. Делаете паузу, зависит от КОНФИГУРАЦИИ РАЗРЕШАЮЩЕЙ СПОСОБНОСТИ ТЕРМОМЕТРА. 6. Далее снова делаете процедуру инициализации init1820:. 7. Потом вновь посылаете команду соответствия ROM $55. 8. Далее вновь пишете в датчик, с которого хотите считать данные, 8 байт данных (его код). 9. Далее пишите команду Чтение памяти [$BE]. 10. И наконец читаем с датчика саму температуру 2 байта.
Все, так для каждого датчика.
Удачи!
|
|
|
|
Alexandr280480 |
Дата: Вт, 01.01.2013, 19:47 | Сообщение # 26 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
96
Замечания:
±
На сайте с 23.01.2010
Статус:
Offline
|
Я смотрел!!!!
Алгоритм действий мне понятен, только вот не понятно одно, на протоне есть команды для организации связи по 1-Wire шине это Oread и Owrite, почему же ВЫ их игнорируете???
Использую следующую подпрограмму для определения ID датчиков Init_ID: OWrite DQ, 1, [$33] ORead DQ, 0, [ID1, ID2, ID3, ID4, ID5, ID6, ID7, ID8] Print At 1, 1, Hex2 ID1, Hex2 ID2, Hex2 ID3, Hex2 ID4, Hex2 ID5, Hex2 ID6, Hex2 ID7, hex2 ID8 GoTo Init_ID
Я попробовал сделать так - это обращение к одному из трёх датчиков с ID1 'ID1 DS18b20 - $28,$EA,$F9,$31,$E0,$09,$EC,$FF
OWrite DQ, 1, [$55,$28,$EA,$F9,$31,$E0,$09,$EC,$FF,$44] delayms 800 OWrite DQ, 1, [$55,$28,$EA,$F9,$31,$E0,$09,$EC,$FF,$BE] ORead DQ, 2, [R_Temp1.LowByte, R_Temp1.HighByte]
Далее приведение температуры в десятичный вид...
Хотелось бы определить где проблема???
Купить за деньги может ВСЁ, А ты попробуй сделай САМ!!!
|
|
|
|
ivan_fd |
Дата: Вт, 01.01.2013, 22:52 | Сообщение # 27 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Что то я думаю, что контрольная сумма датчика не должна быть $FF.
Цитата (Alexandr280480) OWrite DQ, 1, [$55,$28,$EA,$F9,$31,$E0,$09,$EC,$FF,$44] delayms 800 OWrite DQ, 1, [$55,$28,$EA,$F9,$31,$E0,$09,$EC,$FF,$BE] ORead DQ, 2, [R_Temp1.LowByte, R_Temp1.HighByte]
И что Вы за коды написали в Свойствах 18B20.
Немного подправил Ваш код. Изучайте.
Сообщение отредактировал
ivan_fd - Вт, 01.01.2013, 23:24
|
|
|
|
Alexandr280480 |
Дата: Ср, 02.01.2013, 22:51 | Сообщение # 28 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
96
Замечания:
±
На сайте с 23.01.2010
Статус:
Offline
|
Спасибо большое. Изучил, всё получилось, но есть одно НО. Почему при создании нового проекта в Протеусе например 16F877А и два DS18b20, в свойствах написан одинаковый номер у обоих датчиков??? что получается что номер изменяется вручную, в свойствах датчика...Как в реале в железе, интересно?
Купить за деньги может ВСЁ, А ты попробуй сделай САМ!!!
|
|
|
|
ivan_fd |
Дата: Чт, 03.01.2013, 00:06 | Сообщение # 29 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
В реале одинаковых номеров нету.
|
|
|
|