Перейти к содержанию
    

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

Всем привет!

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

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

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

Spoiler

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);

Это всё работает со старыми датчиками, а с новыми ни в какую. ЧЯДНТ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Spider said:

Вроде как на 1Wire Reset отвечает Presence ом

Моё предположение: либо новые датчики действительно палёные, либо старые сделаны по одному техпроцессу и хорошо работают с времянками "на гране". Новые сделаны по другому техпроцессу, и им нужно времянки соблюсти более серьёзно. Вы пробовали подключать осциллограф к шине?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то или я совсем забыл, как работают устройства на 1-wire, или в упор не вижу в приведенном коде команды передачи адреса или SkipROM, без которых ни одно устройство на шине 1-wire и не должно отзываться.

Просмротрео документацию - это 1821 вообще не имеет адресации и может только один на шине работать. Возражения снимаю. Согласен с haker_fox, надо смотреть времянки на шине. Удобнее это делать даже не осциллографом, а логическим анализатором. Простейшим, китайским, за 4.5 евро на али.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, Сергей Борщ said:

Удобнее это делать даже не осциллографом, а логическим анализатором

Согласен! Я, правда, за осцилл только потому, что ЛА звон на шине покажет как логические уровни, и их трудно будет отличить от полезной информации. Осциллограф же покажет целостность сигнала на линии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверьте по даташиту маркировку на чипе. У их "родичей" 18B20 есть подвид с инексом "P" - паразитное питание (и соотв-но подключение 2-проводное).

Хотя может и брак и контрафакт и перемаркировка.

ps

Я с этими девайсами не работал. Посмотрел DS

Quote

 

OPERATING MODES The DS1821 has two operating modes: 1-Wire mode and thermostat mode. The power-up operating mode is determined by the user-programmable T/R¯ bit in the status/configuration register: if T/R¯ = 0 the device powers-up in 1-Wire mode, and if T/R¯ = 1 the device powers-up in thermostat mode. The T/R¯ bit is stored in nonvolatile memory (EEPROM), so it will retain its value when the device is powered down.


 

может это (чтобы он работал как термодатчик или как термостат ему изначально надо в EEPROM прописать "хто я есть") ?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 часов назад, Spider сказал:

Это всё работает со старыми датчиками, а с новыми ни в какую. ЧЯДНТ?

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

https://www.maximintegrated.com/en/products/sensors/DS1821.html

 

update раз что-то похожее на presence отрабатывает, то попробуйте перекрутить обмен, как для ds1820 или подобного. если заработает, то перемаркировка будет очевидна..

Изменено пользователем Jury093

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 hours ago, Spider said:

...DS1821...ЧЯДНТ?

 

как было сказано выше...

1) они не имеют адреса, что упрощает пусконаладку.

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

3) их действительно к сожалению сняли с производства. аналогов нет...увы.

 

ЗЫ

Попробуйте подключить его с управлением по питанию и программно скинуть в режим термодатчика. очень большая вероятность что это этот случай...но как понимаете - без изменения схемного решения к вам будут периодически обращаться с этим головняком.

Изменено пользователем kolobok0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/25/2019 at 11:18 AM, haker_fox said:

Моё предположение: либо новые датчики действительно палёные, либо старые сделаны по одному техпроцессу и хорошо работают с времянками "на гране". Новые сделаны по другому техпроцессу, и им нужно времянки соблюсти более серьёзно. Вы пробовали подключать осциллограф к шине?

Да, конечно пробовал. Отчётливо видно ответ на Reset. Вот только Длительность моего Reset не 480, а 520uS, но ведь в даташите указано как минимум 480, да и псевдо датчик отвечает на этот импульс.
Далее идёт переключение на 115200 и отправка слотов с битами. Видно что ответов уже нет....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/25/2019 at 7:34 PM, k155la3 said:

Я с этими девайсами не работал. Посмотрел DS

может это (чтобы он работал как термодатчик или как термостат ему изначально надо в EEPROM прописать "хто я есть") ?

Должен ли датчик в режиме термостата отвечать на Reset? Если отвечает, то он в 1-Wire режиме?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/2/2019 at 10:07 AM, Spider said:

Должен ли датчик в режиме термостата отвечать на Reset? Если отвечает, то он в 1-Wire режиме?

Нет времени изучать даташит. Суть термостата - включение-выключение нагрузки-ТЭН для удержания температуры в определенных пределах.

Для управления тэном достаточно 1 вывода. Все уставки по контролю температуры прописываются заранее в евойный EEPROM.

Предполагаю, что в режиме термостата оно вообще не работает по интерфейсу. Вывод используется только как цифровой выход для управления ТЭН.

Чтобы его "приболтать" обратно для работы с 1-Wire, следует исполнить "танец с бубном", который описан в даташите в разделе THERMOSTAT MODE

(типа выключить прибор, нажать-держать кнопку СБРОС, включить прибор, отпустить кнопку СБРОС, подобная методика)

ps см диаграмму MODE TOGGLE TIMING WHEN T/R¯ = 1 Figure 12

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...