Не отдаёт температуру DS1821

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Опытный кот
Аватара пользователя
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск

Сообщение Spider »

Всем привет!

Попросили тут разобраться со старой железкой у которой в качестве температурного датчика использовался DS1821 (тот который термостат ещё) в режиме 1-Wire сенсора.
Исходников железки не сохранилось, а датчики сгорают, ломаются, теряются. И вот человек купил новые, а они не работают.
Сел я посмотреть что с ними не так и не могу понять. Неужто паленые какие-то?

Что имею:
1. STM32F103 проц
2. DS1821 из старых запасов, рабочая, 2 шт.
3. DS1821 из новой закупки (много)

Написал примитивную прогу для опроса регистров DS1821 и вывода результатов в UART.
Так вот старые отлично читаются и температуру кажут. А новые не очень. Вроде как на 1Wire Reset отвечает Presence ом. Но дальше сплошной FF FF FF.

Немного практики:
Спойлер

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

uint8_t ow_buf[9];

#define OW_0	  0x00
#define OW_1	  0xff
#define OW_R_1	0xff
/* USER CODE END PFP */

/* USER CODE BEGIN 0 */
void OW_toBits(uint8_t ow_byte, uint8_t *ow_bits) {
	uint8_t i;
	for (i = 0; i < 8; i++) {
		if (ow_byte & 0x01) {
			*ow_bits = OW_1;
		} else {
			*ow_bits = OW_0;
		}
		ow_bits++;
		ow_byte = ow_byte >> 1;
	}
}

uint8_t OW_toByte(uint8_t *ow_bits) {
	uint8_t ow_byte, i;
	ow_byte = 0;
	for (i = 0; i < 8; i++) {
		ow_byte = ow_byte >> 1;
		if (*ow_bits == OW_R_1) {
			ow_byte |= 0x80;
		}
		ow_bits++;
	}

	return ow_byte;
}
void OW_SetRegister(uint8_t reg)
{
	uint8_t ow_buf[8];
	MX_USART3_UART_Init(115200);
	OW_toBits(reg,ow_buf);
	HAL_UART_Transmit(&huart3, ow_buf, 8, 1);
}

uint8_t OW_ReadRegister(uint8_t reg)
{
	uint8_t ow_buf[8];
	OW_SetRegister(reg);
	memset(ow_buf, 0xFF, 8);
	HAL_UART_Receive_DMA(&huart3, ow_buf, 8);
	HAL_UART_Transmit(&huart3, ow_buf, 8, 2);
	return OW_toByte(ow_buf);
}

void OW_WriteRegister(uint8_t reg, uint8_t value)
{
	uint8_t ow_buf[8];
	OW_SetRegister(reg);
	OW_toBits(value, ow_buf);
	HAL_UART_Transmit(&huart3, ow_buf, 8, 2);
}
//OneWire Reset
uint8_t OW_Reset(void)
{
	uint8_t data = 0xF0;
	MX_USART3_UART_Init(9600);
	HAL_UART_Transmit(&huart3, &data, 1, 2);
	if (HAL_UART_Receive(&huart3, &data, 1, 2)==HAL_OK)
		return data;
	return 0xF0;
}
Логика работы из кучи обмусоливаний с форумов, т.е. Сначала ресет шины, потом команда. Например Чтение статуса:

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

OW_Reset();
reg = OW_ReadRegister(0xAC);
или чтение температуры:

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

OW_Reset();
uint8_t reg = OW_ReadRegister(0xAA);
Это всё работает со старыми датчиками, а с новыми ни в какую. ЧЯДНТ?
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Сообщение musor »

а ты уверенн чт новые это точно 1821 могли подсунуть перемаркированые какоенить гавно вродн 18s20 или еше хужее-нонейм китайский
если старые работают а новы нет =значит....
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Реклама
Друг Кота
Сообщения: 7774
Зарегистрирован: Сб янв 29, 2011 00:28:48

Сообщение Enman »

Это не проверяли ? (даташит)
СпойлерRETURNING TO 1-WIRE MODE FROM THERMOSTAT MODE
The operating mode of the DS1821 is determined at power-up, depending upon the setting of the T/ R bit.
If the T/ R bit is set to a 1, the DS1821 will power up in thermostat mode. In this mode, the device cannot
be written to or read from over the DQ line. However, it is possible to return to the 1-Wire “read” mode
temporarily, in cases where thermostat limits may need to be changed after insertion and use in a system.
To return to the 1-Wire “read” mode, the VDD pin of the DS1821 is brought to 0V while the DQ line is
held high. The DQ line must then be clocked low 16 times. After this is accomplished, the VDD line may
be brought high again, and the DS1821 will then be in 1-Wire “read” mode.
To toggle between modes, VDD is brought low while DQ is held high and then clocked 16 times. When
VDD is brought high again, the part will then be in thermostat mode again. This technique may be used to
toggle between the two operating modes of the DS1821 as often as required.
When both VDD and DQ are low for more than approximately 10 seconds, the part is powered down.
When powered up again, the part will begin operating in the mode set by T/R* bit (1=thermostat mode,
0=“read” mode).
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

DS1821 официально снят с производства и всё, что вы покупаете - подделка.
Изображение
Рекомендую перейти на актуальные микросхемы термостатов, вроде DS1620 выпускается, хоть и с другим интерфейсом...
Вложения
0.png
(16.97 КБ) 644 скачивания
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 15699
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Там гда стоял 1821 в режиме датчика температуры легче поставить 18В20.
Сложнее, если устройство работало как автономный заранее запрограммированный термостат.
Хоша... любая 8-6 лапая МК + DS18B20/Ds18S20 = аналогии с тем 1821, да еще и с возможностью "перепрошивки уставок на ходу".
8)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Сообщение musor »

страно что ВЭСМА востребованый 1821 сняли...походу мешал малому китайскому бизнесу производства термостатоф...
като попадал на нем прибор там рещено интересно было прибор работал ка термостат ХУ при отключеной индикаци в холодиле в момент установки он переводился в режим термометра и записи регистроф уставки потом обратно
периодически схема включает индикацию температуры по запросу(кнопки клавы) или по времени-раз в 5мин
наверно можно и почаше опрос датчика делать с выводом на дисплей
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Реклама
Опытный кот
Аватара пользователя
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск

Сообщение Spider »

[uquote="Enman",url="/forum/viewtopic.php?p=3600109#p3600109"]Это не проверяли ? (даташит)[/uquote]
Должен ли он в режиме термостата отвечать на Reset?
Контактная информация:
Друг Кота
Сообщения: 7774
Зарегистрирован: Сб янв 29, 2011 00:28:48

Сообщение Enman »

Не должен....Команды же только для однопроводного режима...
А что, даташит даже гуглом не перевести ? ...)))
Опытный кот
Аватара пользователя
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск

Сообщение Spider »

[uquote="Enman",url="/forum/viewtopic.php?p=3607006#p3607006"]Не должен....Команды же только для однопроводного режима...
А что, даташит даже гуглом не перевести ? ...)))[/uquote]
Это был тонкий подвод к тому, что упоминать это было бесполезно, ибо на ресет они отвечают. О чём я написал в самом начале.
Ну так вот на ресет они отвечают.
Контактная информация:
Ответить

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