Всё по DS18(B/S)20.

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: Всё по DS18(B/S)20.

Сообщение shads »

3DRaven писал(а):Впреть недопущу, лучше уж переделать сразу чем три месяца искать периодическую проблему.
Ну тады поздравляем с первыми граблями :beer:
borys
Держит паяльник хвостом
Сообщения: 927
Зарегистрирован: Вт сен 07, 2010 19:27:48
Откуда: Ташкент

Re: Всё по DS18(B/S)20.

Сообщение borys »

Для shads.
Номинал подтягивающего резистора 1,8-2 кОм.
Аватара пользователя
Catcatcat
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт янв 13, 2012 21:46:35
Откуда: Днепропетровск
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Catcatcat »

Один пример по подключению датчиков температуры DS18B20. Отрытый проект. http://illissi.com/ds18b20-udalennyiy-kontrol-temperaturyi/. С выводом данных на ПК. Используется плата ILLISII-4B-09-primum.Изображение
Padavan
Родился
Сообщения: 11
Зарегистрирован: Вс дек 06, 2009 23:17:40

Re: Всё по DS18(B/S)20.

Сообщение Padavan »

Добрый вечер, господа матерые электронщики!
Помогите пожалуйста познающему науку программирования контроллеров (пока AVR). Задолбал гадский датчик DS18B20. Я к нему и так и этак, а он, собака злая, мне 85 выдает хоть ты тресни. Прогу царапаю на асме. Команды выдаю в таком порядке:
Инициализация датчика
Init_DS:

cli ;запретил прерываня
rcall Start ;стартуем
ldi DATA,0xCC ;командую "пропуск ROM"
rcall Miror ;зеркалю байт (чтобы младшим битом вперед
rcall Write_DS ;процедурка записи

ldi DATA,0x4E ;командую "запись в память"
rcall Miror
rcall Write_DS ;

clr DATA ;В регистре с первым байтом все нули
rcall Write_DS ;
clr DATA ;В регистре со вторым байтом все нули
rcall Write_DS ;
clr DATA ;В регистре конфигурации все нули
rcall Write_DS ;

rcall Start ;стартуем
ldi DATA,0xCC ;командую "пропуск ROM"
rcall Miror ;
rcall Write_DS ;

ldi DATA,0x48 ;командую "запись ОЗУ в ПЗУ"
rcall Miror
rcall Write_DS ;
rcall Zad1 ;Задерживаю на 20 мс (миллисекунд)
rcall Zad1 ;

sei
ret

Опрос датчика
Zamer:

cli ;запретил прерываня
rcall Start ;стартуем
ldi DATA,0xCC ;командую "пропуск ROM"
rcall Miror ;зеркалю байт (чтобы младшим битом вперед
rcall Write_DS ;процедурка записи

ldi DATA,0x44 ;командую "преобразование температуры
rcall Miror ;
rcall Write_DS ;
rcall Zad ;задерживаю на 100 мс

rcall Start ;стартуем
ldi DATA,0xCC ;командую "пропуск ROM"
rcall Miror ;
rcall Write_DS ;

ldi DATA,0xBE ;Командую "Читать ROM"
rcall Miror ;
rcall Write_DS ;

rcall Read_DS ;Записываю байт TH
mov TH,DATA ;
rcall Read_DS ;Записываю байт TL
mov TL,DATA ;
rcall Stop ;Останавливаю чтение

далее следует преобразование в знаки для индикатора...
Программа тестовая, просто чтобы запустить датчик и снять показания.
Модель в гадском "Proteus" работает замечательно, даже после разных программных извратов.
Игрался с подтяжкой от 2-х до 10-ти кОм. Поставил кварц на 4МГц (по пути залочил 2 контроллера, теперь жду когда принесут параллельный программатор).
Вроде все как производитель просит, ан нет, "85" и все тебе. Прилагаю осцилограммы с Proteus, реальные к сожалению снять нечем. А датчик заведомо рабочий, проверял на готовом термометре.
Очень прошу помогите, а то просто голова взрывается.
Вложения
Осцил2.png
Здесь осцилограммы с Proteus
(245.98 КБ) 420 скачиваний
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Всё по DS18(B/S)20.

Сообщение ploop »

rcall Zad ;задерживаю на 100 мс

Сделайте минимум секунду.
И опрашивайте несколько раз. Похоже он у вас просто не успевает закончить преобразование, а вы тут же закругляете алгоритм.
Padavan
Родился
Сообщения: 11
Зарегистрирован: Вс дек 06, 2009 23:17:40

Re: Всё по DS18(B/S)20.

Сообщение Padavan »

Спасибо, попробую.
Забыл написать, повторяю процедуру "Zamer" раз в секунду.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Padavan писал(а):повторяю процедуру "Zamer" раз в секунду.
Это ничего не даёт. Секунду нужно ждать между запуском преобразования и чтением температуры. В принципе, это логично.
Padavan
Родился
Сообщения: 11
Зарегистрирован: Вс дек 06, 2009 23:17:40

Re: Всё по DS18(B/S)20.

Сообщение Padavan »

Попробовал, не помогло :(.Вернее теперь вообще бред показывает. Буду код лопатить, наверное где-то глупость написал.
free_V_V
Открыл глаза
Сообщения: 65
Зарегистрирован: Пт май 28, 2010 14:40:30

Re: Всё по DS18(B/S)20.

Сообщение free_V_V »

Проще делать через таймер. Взять мануал по датчику и вперед. Сначала ловить ответ на старт команды. Как вариант смотреть осциллографом ответ. Синхронизацию для осциллографа задавайте на отдельном выводе. И датчик температуры может давать температуру 85 градусов если нет питания на выводе ( паразитное питание и его не хватает). Или не воспринимает команду на старт преобразования. Попробуйте прочитать ром сначала. Там в конце байт контроля. У gcc для avr есть функция расчета контрольной суммы.

ПС: восьмиразрядного таймера достаточно.

ППС: а какова цель проекта? Может проще вам ацп задействовать и резистивный датчик температуры? Зачем вам такая точность?
Padavan
Родился
Сообщения: 11
Зарегистрирован: Вс дек 06, 2009 23:17:40

Re: Всё по DS18(B/S)20.

Сообщение Padavan »

С АЦП не работал, думал с DS-кой проще будет :). Цель - термостат, с дельтой 1-2 градуса и таймером, для опытов. Прогу почти закончил - только датчик подводит. Нацарапал тестовую прогу для отработки датчика и вот теперь сношаю себе мозг по вечерам.
Таймеры заняты к сожалению.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Всё по DS18(B/S)20.

Сообщение uldemir »

Извините, если не в тему... а вы даташиты принципиально не читаете? Там есть диаграмма, какие команды в какой последовательности подавать. И если не используется паразитное питание - нет никакой надобности отмерять паузы между командами. Всё работает строго по статусам. После посылки команды convert temperature просто опрашивайте статус, пока не получите сигнал готовности. Тогда можно считать измеренную температуру.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Padavan
Родился
Сообщения: 11
Зарегистрирован: Вс дек 06, 2009 23:17:40

Re: Всё по DS18(B/S)20.

Сообщение Padavan »

Даташиты читаю, питание паразитное. Последовательность команд вроде бы правильная, но если ошибаюсь - буду очень признателен за указание на ошибку.
Последний раз редактировалось Padavan Чт июн 28, 2012 11:21:26, всего редактировалось 1 раз.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Шину данных подтягиваете низкоомным резистором на время преобразования?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Padavan
Родился
Сообщения: 11
Зарегистрирован: Вс дек 06, 2009 23:17:40

Re: Всё по DS18(B/S)20.

Сообщение Padavan »

4,7кОм, пробовал 2кОм и 10кОм. Только транзистор пока не пробовал на подтяжку ставить.
Последний раз редактировалось Padavan Чт июн 28, 2012 11:24:23, всего редактировалось 1 раз.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

:facepalm: е**ть "Даташиты читаю"
Что по-вашему значит
If the DS18B20 is powered with parasite power, this notification technique (опрос готовности преобразования) cannot be used since the bus must be pulled high by a strong pullup during the entire temperature conversion. The bus requirements for parasite power are explained in detail in the Powering the DS18B20 section.

Вместо транзистора достаточно порт настраивать на вывод "1".
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Всё по DS18(B/S)20.

Сообщение akl »

Padavan У меня был только единичный опыт работы с DS18B20. Посмотрите здесь, может что-нибудь будет полезным.
Padavan
Родился
Сообщения: 11
Зарегистрирован: Вс дек 06, 2009 23:17:40

Re: Всё по DS18(B/S)20.

Сообщение Padavan »

Пока "задвинул" на паразитное питание, обиделся и сделал на трех проводах! Все замечательно работает. На двух "85" хоть застрелись. Появится время, обязательно докопаюсь и отпишусь! Да кстати, пробовал по совету уважаемого Gudd-Head выставлять порт в "1" на время преобразования и записи ОЗУ в ПЗУ - эффекта не дало! Всем большое спасибо!
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Всё по DS18(B/S)20.

Сообщение uldemir »

85 - это или нет питания, или не закончена конвертация, или не запущена конвертация.
p.s. Забыл еще одну возможность - температура, и вправду, 85 градусов. :))
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Padavan писал(а):На двух "85" хоть застрелись.

Может, стоит поискать косяк на плате?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
free_V_V
Открыл глаза
Сообщения: 65
Зарегистрирован: Пт май 28, 2010 14:40:30

Re: Всё по DS18(B/S)20.

Сообщение free_V_V »

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

2. Точность 1-2 градуса достижима на обычном резистивном датчике.

3. Помехоустойчивость линии, при включении-выключении нагревателя, очень слабая. Скорее всего будут сбои при передаче информации. Резистивные датчики такими проблемами не страдают ( и два провода всего).
Ответить

Вернуться в «Периферия»