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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

asidalv писал(а):DS1821 , скажите, она - аналог DS1820
Разрешающая способность у DS1821 на порядок ниже!
asidalv писал(а):или совсем другие там команды
Команды и разрешающая способность отличаются.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15667
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

В принципе возможно.
Только дискретность у DS1821 в 1 градус и размешение данных по-другому.
Основное назначение - трехвыводный термостат с заданной пользователем фиксированной уставкой (смена значений только по принципу стирание - программирование). Внешний вывод позволяет напрямую управлять силовым ключом. Остальное в даташите.
:beer:
Реклама
Грызет канифоль
Сообщения: 297
Зарегистрирован: Ср дек 30, 2009 09:55:39

Сообщение kolobok0 »

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

в матчасти усё есть...
(круглый)
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Читайте даташит. http://datasheets.maximintegrated.com/en/ds/DS1821.pdf
Provides 8-bit (1°C resolution) centigrade temperature measurements
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 15667
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

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

Сообщение kolobok0 »

Мурик писал(а):Читайте даташит.
в даташите приведена формула получения повышенного разрешения.

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

посему разрешение
DS1821 = 0,01 градуса
DS18x20 = 0,0625 градуса.
Реклама
Грызет канифоль
Сообщения: 297
Зарегистрирован: Ср дек 30, 2009 09:55:39

Сообщение kolobok0 »

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

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

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

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

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

удачи усем
(круглый)
ЗЫ
Для тех, кому опыт интересен. У 21 есть другие косяки. При плотном юзанье - спрашивайте, подскажу как обойти грабли(до фазы разводки плат только).
Друг Кота
Аватара пользователя
Сообщения: 15667
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Да все енто уже даавно пройденный материал для тех, кто с датчиками работал "в режиме бытовухи".
Вот только стандарты иные требования выдвигают.
Да и сам процесс удержания (не просто измерения) температуры по распределенному объёму с точностью до 0,01 градуса... как бы корректнее выразиться... не для любителя (и не только из-за датчиков).
8)
Мелкий вопрос шеволится -
зачем при наличии стандартно работающего с заводской разрешающей способностью 0,0625 датчика DS18x20 в целевом изделии применять гораздо более громоздкий (корпус с большей тепловой инерцией), "грубый" (и вобщем-то не для тех целей разработанный) DS1821?
:wink:
9mm
Родился
Сообщения: 4
Зарегистрирован: Пт янв 22, 2016 20:08:46

Сообщение 9mm »

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

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

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

Заранее все спасибо.
Вложения
main.c
(2.09 КБ) 526 скачиваний
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

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

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

От вышестоящей функции сюда приходят не только ноль или единица, а и другие числа - степени двойки.
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Сообщение 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;// означает о отсутствии устройства
}
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

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

Сообщение ROMan2947 »

манипуляции на PORTA я произвел для визуализвции ответа датчика о том, что он в канале.тестировал прогу в Proteus подключал к шине 1 wire осцилограф в надежде увидеть импульс присутствия датчика,но в ввиду наверное короткого времени я так и не увидел...в коде я имел ввиду если датчик подает импульс присутствия, то контроллер мне показывает это выводом на портА числа 3, если же он не отвечает то 100.
числа 3 и 100 взяты произвольно..вот и решил поинтересоваться насколько я в правильном направлении. :)
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

ROMan2947 писал(а):в коде я имел ввиду если датчик подает импульс присутствия, то контроллер мне показывает это выводом на портА числа 3, если же он не отвечает то 100
Если бы порт A был сконфигурирован на выход - то ладно. А так, фактически, просто дёргаются встроенные резисторы подтяжки, без вывода информации на пины порта A МК.
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Сообщение ROMan2947 »

точняк... :facepalm: DDR=0xFF.
9mm
Родился
Сообщения: 4
Зарегистрирован: Пт янв 22, 2016 20:08:46

Сообщение 9mm »

WiseLord писал(а):

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

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

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

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

OneWire_SendBit(SByte&0x01);
Но почему при подключении к 0 пину работает, а например при подключении к 4 пину не работает.
Вот в чем вопрос!
9mm
Родился
Сообщения: 4
Зарегистрирован: Пт янв 22, 2016 20:08:46

Сообщение 9mm »

ROMan2947

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

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

if ((OWI_PIN&(1<<OWI_BIT))==0)//***3
{
	...
}
else
{
	...
}
 
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

9mm писал(а):Но почему при подключении к 0 пину работает, а например при подключении к 4 пину не работает.

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

#define DS18B20_Bit 0
...
unsigned char OneWire_ReciveBit() {
...
    if ((DS18B20_Pin&(1<<DS18B20_Bit))==1)
Видите причину? Я в предыдущем сообщении немного не тот кусочек кода вставил просто...
Контактная информация:
9mm
Родился
Сообщения: 4
Зарегистрирован: Пт янв 22, 2016 20:08:46

Сообщение 9mm »

WiseLord

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

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

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

Еще раз спасибо!!!
Родился
Аватара пользователя
Сообщения: 2
Зарегистрирован: Ср янв 27, 2016 13:41:05

Сообщение clickhex »

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

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