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

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

Добавлено: Ср янв 13, 2016 19:18:41
Мурик
asidalv писал(а):DS1821 , скажите, она - аналог DS1820
Разрешающая способность у DS1821 на порядок ниже!
asidalv писал(а):или совсем другие там команды
Команды и разрешающая способность отличаются.

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

Добавлено: Чт янв 14, 2016 08:50:48
BOB51
В принципе возможно.
Только дискретность у DS1821 в 1 градус и размешение данных по-другому.
Основное назначение - трехвыводный термостат с заданной пользователем фиксированной уставкой (смена значений только по принципу стирание - программирование). Внешний вывод позволяет напрямую управлять силовым ключом. Остальное в даташите.
:beer:

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

Добавлено: Сб янв 16, 2016 10:58:02
kolobok0
Мурик писал(а):...Разрешающая способность у DS1821 на порядок ниже!...
БРЯХНЯ(из кинухи)!!!!
Разрешающая способность:
DS1821 = 0,01 градуса
DS1820 = 0,0625 градуса

в матчасти усё есть...
(круглый)

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

Добавлено: Сб янв 16, 2016 13:38:10
Мурик
Читайте даташит. http://datasheets.maximintegrated.com/en/ds/DS1821.pdf
Provides 8-bit (1°C resolution) centigrade temperature measurements

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

Добавлено: Сб янв 16, 2016 17:55:20
BOB51
kolobok0
Вам приходилось на МК с математикой и набором обмена в режиме HIGH-RESOLUTION TEMPERATURE READINGS с этими датчиками работать?
8)
Да и в любом случае младший разряд для пользователя есть без особой надобности, дай боже хоть до 0,5 градуся на DS18B20 в типовых приложениях выйти - ибо одно дело "относительно измеренной какой-то точки" в датчике и другое - градуировочная характеристика, в привязке к контрольному термометру хотя бы со шкалой, имеющей цену деления в 1/10 градуса...
Вобщем для индикации больше чем в пол-градуса вывод не рекомендуется - во избежании вечных споров с любителями посмотреть хоша-бы на ртутный контрольный термометр, расположенный совсем вроде и рядом с DSкой.
:)

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

Добавлено: Вс янв 17, 2016 00:31:45
kolobok0
Мурик писал(а):Читайте даташит.
в даташите приведена формула получения повышенного разрешения.

двадцатка меньше имеет разрешение потому, что в формулу зашита константа:
Note that the COUNT PER °C register is hard-wired to
16 (10h)
у двадцать первого такого ограничения нет.

посему разрешение
DS1821 = 0,01 градуса
DS18x20 = 0,0625 градуса.

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

Добавлено: Вс янв 17, 2016 00:42:02
kolobok0
BOB51 писал(а):...Вам приходилось...в режиме HIGH-RESOLUTION TEMPERATURE READINGS с этими датчиками работать?...для пользователя есть без особой надобности...
железо+софт, где используется разрешение 0,01 градуса на датчиках DS1821 использую более 10 лет, в том числе и в поставках за рубеж(2005 год, несколько сот штук, Англия). Всего выпущенных единиц - десятки тысячь. Нареканий нет.

так достаточно, если я отвечу?

По поводу показа человеку. А кто сказал, что это для этого необходимо? Домыслы оставляем при себе...

Спорить, доказывать что-либо по факту реально работающего железа не буду (температура при сканировании линейна, никаких "скачков" или "нагреваний более десятых градусов" при постоянном сканировании _цикл_менее_1_сек_ = нет).
Считайте так - я знаю тайные знания, магия для тех кто не верит.
Может быть это и к лучшему. Цена решения выше.
Кстати, я не один такой "маг":

http://radiokot.ru/forum/viewtopic.php? ... 9&start=20
см. посты Kotische

удачи усем
(круглый)
ЗЫ
Для тех, кому опыт интересен. У 21 есть другие косяки. При плотном юзанье - спрашивайте, подскажу как обойти грабли(до фазы разводки плат только).

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

Добавлено: Вс янв 17, 2016 08:37:05
BOB51
Да все енто уже даавно пройденный материал для тех, кто с датчиками работал "в режиме бытовухи".
Вот только стандарты иные требования выдвигают.
Да и сам процесс удержания (не просто измерения) температуры по распределенному объёму с точностью до 0,01 градуса... как бы корректнее выразиться... не для любителя (и не только из-за датчиков).
8)
Мелкий вопрос шеволится -
зачем при наличии стандартно работающего с заводской разрешающей способностью 0,0625 датчика DS18x20 в целевом изделии применять гораздо более громоздкий (корпус с большей тепловой инерцией), "грубый" (и вобщем-то не для тех целей разработанный) DS1821?
:wink:

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

Добавлено: Пт янв 22, 2016 21:28:21
9mm
Добрый вечер, мудрые коты!
Прошу строго не судить и помочь.
Электронщик я старый, а вот с микроконтроллерами только начал разбираться.
Встала задача сделать термостат. Выбор пал на tiny2313 и ds18b20. Процессе макетирования была собрана простейшая схема: tiny2313+ds18b20+резистор.
Написан код на Си в Atmel Studio.
Все работало нормально, температура измерялась, до тех пор пока я не решил поменять пин подключения датчика. Поменял на макете и соответственно в коде. Запускаю - не работает!!!
В результате экспериментов выяснилось - при подключении датчика к 0 пину любого порта все работает, но при подключению к любому другому пину любого порта работать перестает.
То же эффект словил и на другом контроллере (tiny13А).

Код во вложении. (Как вставить в текст сообщения еще не разобрался).

Прошу помочь разобраться с этими граблями.

Заранее все спасибо.

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

Добавлено: Сб янв 23, 2016 06:35:50
WiseLord

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

void OneWire_SendBit(unsigned char SBit)
{
	OneWire_BusHigh();
	OneWire_BusLow();
	if (SBit==1)
Проблема в последней строке. Проверять надо не на равенство единице, а на неравенство нулю.

От вышестоящей функции сюда приходят не только ноль или единица, а и другие числа - степени двойки.

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

Добавлено: Сб янв 23, 2016 19:12:21
ROMan2947
Привет всем!!!
решил изучить и подключить датчик DS18B20 к микроконтроллеру.почитал описание, посмотрел примеры, вроде ниче сложного. взялся писать код.шапку скопировал с примера остальное решил написать самостоятельно согласно своему пониманию. 1 шаг инициализация только вот сомнения есть в работоспособности,хотелось бы услышать критику бывалых:
код ниже

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define SKIP_ROM 0xCC // Пропустить индентификацию
#define CONVERT_T 0x44 // Измерить температуру
#define READ_SCRATCHPAD 0xBE // Прочитать измеренное

//определяем порт и бит к которому подключено устройство
#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)//отпускаем шину

int main(void)

{ PORTA=0x00;
DDRA = 0x00;


OWI_LOW; //притягиваем шину к 0
_delay_us(500);
OWI_HIGH; //отпускаем шину
_delay_us(65);


if (OWI_PIN= (1<<0))
PORTA=3;// означает о наличии устройства

else
PORTA=100;// означает о отсутствии устройства
}

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

Добавлено: Сб янв 23, 2016 19:53:30
WiseLord
По линии датчика вроде нормально, но смущают странные и бесполезные манипуляции с резисторами подтяжки на порту A.

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

Добавлено: Сб янв 23, 2016 22:15:22
ROMan2947
манипуляции на PORTA я произвел для визуализвции ответа датчика о том, что он в канале.тестировал прогу в Proteus подключал к шине 1 wire осцилограф в надежде увидеть импульс присутствия датчика,но в ввиду наверное короткого времени я так и не увидел...в коде я имел ввиду если датчик подает импульс присутствия, то контроллер мне показывает это выводом на портА числа 3, если же он не отвечает то 100.
числа 3 и 100 взяты произвольно..вот и решил поинтересоваться насколько я в правильном направлении. :)

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

Добавлено: Сб янв 23, 2016 23:19:14
WiseLord
ROMan2947 писал(а):в коде я имел ввиду если датчик подает импульс присутствия, то контроллер мне показывает это выводом на портА числа 3, если же он не отвечает то 100
Если бы порт A был сконфигурирован на выход - то ладно. А так, фактически, просто дёргаются встроенные резисторы подтяжки, без вывода информации на пины порта A МК.

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

Добавлено: Сб янв 23, 2016 23:50:09
ROMan2947
точняк... :facepalm: DDR=0xFF.

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

Добавлено: Вс янв 24, 2016 21:12:13
9mm
WiseLord писал(а):

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

void OneWire_SendBit(unsigned char SBit)
{
	OneWire_BusHigh();
	OneWire_BusLow();
	if (SBit==1)
Проблема в последней строке. Проверять надо не на равенство единице, а на неравенство нулю.

От вышестоящей функции сюда приходят не только ноль или единица, а и другие числа - степени двойки.
WiseLord Спасибо за наводку.
Проверил. Не здесь собака порылась, да и от вышестоящей функции приходит либо 0 либо 1.

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

OneWire_SendBit(SByte&0x01);
Но почему при подключении к 0 пину работает, а например при подключении к 4 пину не работает.
Вот в чем вопрос!

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

Добавлено: Вс янв 24, 2016 21:23:25
9mm
ROMan2947

Мне кажется импульс присутствия нужно ловить вот так:

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

if ((OWI_PIN&(1<<OWI_BIT))==0)//***3
{
	...
}
else
{
	...
}
 

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

Добавлено: Вс янв 24, 2016 21:45:09
WiseLord
9mm писал(а):Но почему при подключении к 0 пину работает, а например при подключении к 4 пину не работает.

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

#define DS18B20_Bit 0
...
unsigned char OneWire_ReciveBit() {
...
    if ((DS18B20_Pin&(1<<DS18B20_Bit))==1)
Видите причину? Я в предыдущем сообщении немного не тот кусочек кода вставил просто...

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

Добавлено: Вс янв 24, 2016 21:58:57
9mm
WiseLord

Спасибо огромное!!!

Вот теперь то я и сам понял....век живи век учись.

Все заработало....мотаю на усы :)))

Еще раз спасибо!!!

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

Добавлено: Ср янв 27, 2016 14:45:39
clickhex
Доброго времени участникам форума. У меня есть вопрос по 1wire периферии. Кто нибудь пробовал на МК эмулировать любое 1wire устройство , скажем тот же 1820. Таким образом можно эмулировать уже существующие или создавать новые семейства и устройства 1wire