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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 7362
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Фигуре 11 и 12. Хоть они и на двух листах - смотреть вместе - 12-я продолжение одиннацатой. А дальше ходим по стрелочкам.
Реклама
Встал на лапы
Сообщения: 135
Зарегистрирован: Ср фев 04, 2015 21:08:59

Сообщение креазот »

спасибо
Реклама
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Сообщение ROMan2947 »

вот решил самостоятельно написать код для работы с датчиком.начал с первых строчек разбирать и вникать почему да как....оказывается не все так просто как кажется изначально.
так вот возник очередной вопрос:

мне никак не понятно каким образом происходит притягивание шины к нулю

#define OWI_LOW OWI_DDR |= 1<<OWI_BIT //притягиваем шину к 0

упрощу написанное и запишу так: DDRD|=1<<0

и разложу как DDRD=0b 0000 0000 // я так полагаю что раз мы никак не сконфигурировали этот регистр
он имеет значение 0
далее: 1<<0 =0b 0000 0001 //ну тут вроде все ясно


выполняю сложение: 0b 0000 0000|0b 0000 0001

получаю в регистре DDRD 0b 0000 0001 // что я понимаю как BIT0 у PORTD настроен на выход

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


вот тот отрывок с рабочего кода))
#define OWI_PORT PORTD
#define OWI_DDR DDRD
#define OWI_PIN PIND
#define OWI_BIT 0

#define OWI_LOW OWI_DDR |= 1<<OWI_BIT//притягиваем шину к 0
#define OWI_HIGH OWI_DDR &= ~(1<<OWI_BIT)//отпускаем шину



заранее благодарен!!!
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

Вы же сами написали :
ROMan2947 писал(а):что я понимаю как BIT0 у PORTD настроен на выход
А если он настроен на выход, то на него можно вывести что угодно - хоть 0, хоть 1.
Реклама
Эиком - электронные компоненты и радиодетали
Грызет канифоль
Сообщения: 297
Зарегистрирован: Ср дек 30, 2009 09:55:39

Сообщение kolobok0 »

ROMan2947 писал(а):...так как происходит тот самый нулевой уровень на общей шине????....
помимо регистра направления порта, смотрите что изначально было выведено в данный порт.
т.е. идёт управление не выводом в порт а именно направлением, чтобы не мешать выставлению уровня "0" датчику (ну или через резистор идёт подтяжка к "1")

удачи вам
(круглый)
ЗЫ
Ещё обратите внимание как идёт чтение каждого бита в протоколе 1-Wire. Более того - рекомендую прочитать именно текст, а не рассматривать картинку.
Реклама
Встал на лапы
Сообщения: 138
Зарегистрирован: Вс окт 11, 2009 09:54:59
Откуда: Пенза

Сообщение Darkmaster »

:beer: Всем доброго.
зарылся я тут с 1wire и ds18b20 в частности.
попытался получить хоть байт от датчика-и ни в какую :cry: на линии приходит сплошная единица.
Тестирую на 100% рабочей плате.Используется PIC16F628A у которого на выводе RA4 подключен датчик..импульсы reset и presence проходят нормально-и далее ничего.Писал и свой код и брал с AppNote у Microchip"а.Не хочет сотрудначать и все тут.Так как железо рабочее- видимо ошибка в коде,может кто посмотрит на досуге и подскажет где её искать :dont_know:
Вложения
1wire.rar
файлы программы С
(3.97 КБ) 177 скачиваний
Интересная,однако,штука
Реклама
akl
Друг Кота
Сообщения: 4462
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Может читаете поздно. Код удерживает линию 6мкс в 0, потом отпускает линию и только через 9мкс идет опрос. По мне, т.к. нижняя граница валидности не указана, лучше опрашивать несколько раз, допустим через 1мкс, на интервале 6...15мкс.
Read Data Valid tRDV max 15 μs
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

На АВР я бы свою библиотеку выложил.. А в ПИК, там подругому ассемблер команды называет. ))))
К моей же самописанной библиотеке надо добавить только подсчет контрольной суммы. Но с одним датчиком температуры работает и без контрольной суммы, хоть это и не правильно. :)))
Там просто надо быть очень точным во всех задержках.
Станислав
Встал на лапы
Сообщения: 138
Зарегистрирован: Вс окт 11, 2009 09:54:59
Откуда: Пенза

Сообщение Darkmaster »

СКАЗОЧНИК
'Там просто надо быть очень точным во всех задержках'.Так и есть))


akl Пасибки.Вы вовремя.поправил и получил 'настоящий' байт
Интересная,однако,штука
Родился
Сообщения: 2
Зарегистрирован: Ср сен 07, 2016 15:19:47

Сообщение 20skal10 »

Доброго времени суток. Никак не могу понять как вывести адрес датчика на LCD. Имеется "unsigned char * id" с записанным туда адресом.
Что делать далее - не могу понять
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

:facepalm:
Писать программу, что же ещё делать то...
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Адрес датчика - это набор из восьми 8-битных чисел. Вот и выводите эти числа (id[0], id[1] и т.д.), лучше в шестнадцатеричном виде - получится 2 символа на байт, как раз в 16 позиций поместится.
Контактная информация:
Родился
Сообщения: 2
Зарегистрирован: Ср сен 07, 2016 15:19:47

Сообщение 20skal10 »

WiseLord писал(а):выводите эти числа (id[0], id[1] и т.д.)
Спасибо, всё получилось :)
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

Всем доброго 24/7.

В досье на 18В20 (да и на других его родственников наверное) написано, что после команды 0х44 (начать преобразование) датчик сажает шину в ноль на все время преобразования. На практике я такого не замечаю. Можно конечно тупо вставить паузу по ДШ (от 100 до 750 мс в зависимости от битности), а потом температуру читать, но...

Сразу скажу, что все работает и читается, но вот мысль, что либо ДШ врет, либо я туплю не дает мне покоя.
То есть если я делаю так

Код: Выделить всё

if (init_ds())
    {
        send_ds(0xCC); // Skip ROM
        send_ds(0x44); // Start conversion
    }
        else return 0;
// Ждем окончания преобразования.
    t1over = tconv/100;  // Количество переполнений Т1.
    t1set(0x3CAF);  // 100ms to overflow
    while (t1over);
то всё работает.

Если же добавляю проверку, кто отработает первым - шина или таймаут:

Код: Выделить всё

if (init_ds())
    {
        send_ds(0xCC); // Skip ROM
        send_ds(0x44); // Start conversion
    }
        else return 0;
    _nop();
// Ждем окончания преобразования, на время которого DQ дожен быть в 0.
    if (DQ) return 0;  // Датчик не отвечает. Почему не 0 как говорит ДШ?????!!!
        else 
        {
            t1over = tconv/100;  // Количество переполнений Т1.
            t1set(0x3CAF);  // 100ms to overflow
            while (DQ ^ t1over);  // Пока 0 и 1 результат будет 1.
        }
то получаю в ответ отсутствие датчика.

Кто-то реально заморачивался этим вопросом? Должен или не должен датчик сажать шину на все время преобразования?
На всякий случай цитата из ДШ на 18В20 (стр.11):
Спойлер
If the DS18B20 is powered by an external supply, the master can issue read time slots after the Convert T command and the DS18B20 will respond by transmitting a 0 while the temperature conversion is in progress and a 1 when the conversion is done.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Zhuk72 писал(а):В досье на 18В20 (да и на других его родственников наверное) написано, что после команды 0х44 (начать преобразование) датчик сажает шину в ноль на все время преобразования.
это не правда, там такого не написано. читайте внимательно: там написано, что в течение всего времени преобразования на тайм-слот чтения датчик всегда отвечает низким уровнем, т.е. нулем - это совсем не то же самое, что "сажает в 0 линию"! подавая время от времени тайм-слоты чтения вы можете определить конец преобразования более точно, чем просто подождав сколько-то там миллисекунд... но делать это нет особого смысла...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

Ясно, спасибо за разъяснение.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

Вчера случайно воткнул 1820 с обратной полярностью на несколько секунд в рабочую схему. Сперва не понял, с чего это вдруг упала яркость 7-сегментника. Спохватился, выдернул, вставил правильно. Работает :)

При этом абсолютно новый, правда очень давно купленный, 18В20 не желает работать. Причем в двух разных схемах, на двух абсолютно разных контроллерах. Проверял 2 штуки 1820 и один (другой уже) 18В20. Они работают без проблем, а этот выдает 85. Его я переполюсовкой не баловал :)))
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

Для DS18B20:
The power-on reset value of the temperature register is +85°C
Скорее всего, где то в программе не выдержаны времена (вернее, допуски времён) при работе с DS18B20.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

Другой 18В20 работает же. Тем более я использую 9-битный режим, там 100 мс хватает, но пробовал и 800 с тем же результатом. И с тайм-слотами все должно быть нормально, если три других датчика работают.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

датчик всегда выдает 85, если не принял команду старта измерения. так что либо с процессом обмена что-то не то (адрес, например, не тот), либо вообще не начинается измерение
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Ответить

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