Страница 47 из 59

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

Добавлено: Чт фев 11, 2016 21:28:15
uldemir
Фигуре 11 и 12. Хоть они и на двух листах - смотреть вместе - 12-я продолжение одиннацатой. А дальше ходим по стрелочкам.

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

Добавлено: Чт фев 11, 2016 21:39:31
креазот
спасибо

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

Добавлено: Вс фев 14, 2016 09:37: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)//отпускаем шину



заранее благодарен!!!

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

Добавлено: Вс фев 14, 2016 10:45:40
Аlex
Вы же сами написали :
ROMan2947 писал(а):что я понимаю как BIT0 у PORTD настроен на выход
А если он настроен на выход, то на него можно вывести что угодно - хоть 0, хоть 1.

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

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

удачи вам
(круглый)
ЗЫ
Ещё обратите внимание как идёт чтение каждого бита в протоколе 1-Wire. Более того - рекомендую прочитать именно текст, а не рассматривать картинку.

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

Добавлено: Пт апр 08, 2016 16:18:24
Darkmaster
:beer: Всем доброго.
зарылся я тут с 1wire и ds18b20 в частности.
попытался получить хоть байт от датчика-и ни в какую :cry: на линии приходит сплошная единица.
Тестирую на 100% рабочей плате.Используется PIC16F628A у которого на выводе RA4 подключен датчик..импульсы reset и presence проходят нормально-и далее ничего.Писал и свой код и брал с AppNote у Microchip"а.Не хочет сотрудначать и все тут.Так как железо рабочее- видимо ошибка в коде,может кто посмотрит на досуге и подскажет где её искать :dont_know:

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

Добавлено: Сб апр 09, 2016 13:43:19
akl
Может читаете поздно. Код удерживает линию 6мкс в 0, потом отпускает линию и только через 9мкс идет опрос. По мне, т.к. нижняя граница валидности не указана, лучше опрашивать несколько раз, допустим через 1мкс, на интервале 6...15мкс.
Read Data Valid tRDV max 15 μs

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

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

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

Добавлено: Вс апр 10, 2016 08:54:22
Darkmaster
СКАЗОЧНИК
'Там просто надо быть очень точным во всех задержках'.Так и есть))


akl Пасибки.Вы вовремя.поправил и получил 'настоящий' байт

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

Добавлено: Пт сен 09, 2016 07:33:24
20skal10
Доброго времени суток. Никак не могу понять как вывести адрес датчика на LCD. Имеется "unsigned char * id" с записанным туда адресом.
Что делать далее - не могу понять

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

Добавлено: Пт сен 09, 2016 08:42:48
Аlex
:facepalm:
Писать программу, что же ещё делать то...

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

Добавлено: Пт сен 09, 2016 08:55:13
WiseLord
Адрес датчика - это набор из восьми 8-битных чисел. Вот и выводите эти числа (id[0], id[1] и т.д.), лучше в шестнадцатеричном виде - получится 2 символа на байт, как раз в 16 позиций поместится.

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

Добавлено: Пт сен 09, 2016 09:02:18
20skal10
WiseLord писал(а):выводите эти числа (id[0], id[1] и т.д.)
Спасибо, всё получилось :)

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

Добавлено: Ср сен 28, 2016 09:38:11
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.

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

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

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

Добавлено: Ср сен 28, 2016 09:53:51
Zhuk72
Ясно, спасибо за разъяснение.

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

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

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

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

Добавлено: Пт сен 30, 2016 21:37:16
Albert_V
Для DS18B20:
The power-on reset value of the temperature register is +85°C
Скорее всего, где то в программе не выдержаны времена (вернее, допуски времён) при работе с DS18B20.

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

Добавлено: Сб окт 01, 2016 12:03:05
Zhuk72
Другой 18В20 работает же. Тем более я использую 9-битный режим, там 100 мс хватает, но пробовал и 800 с тем же результатом. И с тайм-слотами все должно быть нормально, если три других датчика работают.

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

Добавлено: Сб окт 01, 2016 16:03:41
ARV
датчик всегда выдает 85, если не принял команду старта измерения. так что либо с процессом обмена что-то не то (адрес, например, не тот), либо вообще не начинается измерение