Jump to content

    
Sign in to follow this  
Spider

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

Recommended Posts

Всем привет!

Попросили тут разобраться со старой железкой у которой в качестве температурного датчика использовался 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);

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

Share this post


Link to post
Share on other sites
1 hour ago, Spider said:

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
6 minutes ago, Сергей Борщ said:

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

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

Share this post


Link to post
Share on other sites

Проверьте по даташиту маркировку на чипе. У их "родичей" 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 прописать "хто я есть") ?

 

 

Share this post


Link to post
Share on other sites
13 часов назад, Spider сказал:

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

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

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

 

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

Edited by Jury093

Share this post


Link to post
Share on other sites
17 hours ago, Spider said:

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

 

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

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

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

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

 

ЗЫ

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

Edited by kolobok0

Share this post


Link to post
Share on other sites
On 3/25/2019 at 11:18 AM, haker_fox said:

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

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

Share this post


Link to post
Share on other sites
On 3/25/2019 at 7:34 PM, k155la3 said:

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

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

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this