Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Работа с несколькими DS18B20
Работа с несколькими DS18B20
Alexandr280480 Дата: Пт, 28.12.2012, 19:16  |                                                                                                                Сообщение # 16
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 96
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Вторая строка, скорее всего не нужна.

Четвертая строка - просто вывод кода на дисплей, а ID8 - это CRC кода датчика.

Вам нужно, например, подключить по очереди датчики, считать с них код (8 байт) и записать
в EEprom код каждого датчика.
Потом, когда Вы подключите их все на одну линию, просто сначала пишите OWrite DQ, 1, [$55],
далее пишем код датчика (8 бит) с которого хотите считать данные.
Alexandr280480 Дата: Сб, 29.12.2012, 22:51  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 96
Репутация: 0   ±
Замечания:   ±
На сайте с 23.01.2010

Статус: Offline

Не получается определить, может я что не так делаю...
Подключаю один датчик DS1822, читаю код 8байт, подключаю второй DS1822, отключая первый тот же код, не отключая какой то бред...
Можно поподробнее как правильно делать?
Спасибо


Купить за деньги может ВСЁ,
А ты попробуй сделай САМ!!!
anatol Дата: Вс, 30.12.2012, 01:21  |                                                                                                                Сообщение # 19
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 23.01.2010

Статус: Offline

Нет не ошибся!
Датчик именно DS1822!
как считать по очереди, пример есть? у меня у всех датчиков всё одинаковое...


Купить за деньги может ВСЁ,
А ты попробуй сделай САМ!!!
anatol Дата: Вс, 30.12.2012, 23:23  |                                                                                                                Сообщение # 21
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Цитата
Потом, когда Вы подключите их все на одну линию, просто сначала пишите OWrite DQ, 1, [$55],
далее пишем код датчика (8 бит) с которого хотите считать данные.

Только поправлю
"Потом, когда Вы подключите их все на одну линию, просто сначала пишите OWrite DQ, 1, [$55, далее пишем код датчика (8 бит) с которого хотите считать данные].
DQ = PORTX.Y - где X буква порта,а Y разряд порта.
1 - режим чтения-записи (от 1 до 8) описан в хэлпе на протон.
И загляните в помощь протона - Там расписан OWrite и ORead
ЯНДЕКС Дата: 30.12.2012
Alexandr280480 Дата: Вс, 30.12.2012, 23:27  |                                                                                                                Сообщение # 22
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 96
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 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)
---------------------------------------------
Ничего не получается... sad


Купить за деньги может ВСЁ,
А ты попробуй сделай САМ!!!
ivan_fd Дата: Пн, 31.12.2012, 16:14  |                                                                                                                Сообщение # 25
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 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]

Далее приведение температуры в десятичный вид...

Хотелось бы определить где проблема???
Прикрепления: 1_wire_3_DS18b2.zip (16.2 Kb)


Купить за деньги может ВСЁ,
А ты попробуй сделай САМ!!!
ivan_fd Дата: Вт, 01.01.2013, 22:52  |                                                                                                                Сообщение # 27
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 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.



Немного подправил Ваш код. Изучайте.
Прикрепления: 0226173.zip (63.6 Kb)

Сообщение отредактировал ivan_fd - Вт, 01.01.2013, 23:24
Alexandr280480 Дата: Ср, 02.01.2013, 22:51  |                                                                                                                Сообщение # 28
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 96
Репутация: 0   ±
Замечания:   ±
На сайте с 23.01.2010

Статус: Offline

Спасибо большое.
Изучил, всё получилось, но есть одно НО.
Почему при создании нового проекта в Протеусе например 16F877А и два DS18b20, в свойствах написан одинаковый номер у обоих датчиков???
что получается что номер изменяется вручную, в свойствах датчика...Как в реале в железе, интересно?


Купить за деньги может ВСЁ,
А ты попробуй сделай САМ!!!
ivan_fd Дата: Чт, 03.01.2013, 00:06  |                                                                                                                Сообщение # 29
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

В реале одинаковых номеров нету.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Работа с несколькими DS18B20
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: