Spider 0 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба Всем привет! Попросили тут разобраться со старой железкой у которой в качестве температурного датчика использовался 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); Это всё работает со старыми датчиками, а с новыми ни в какую. ЧЯДНТ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба 1 hour ago, Spider said: Вроде как на 1Wire Reset отвечает Presence ом Моё предположение: либо новые датчики действительно палёные, либо старые сделаны по одному техпроцессу и хорошо работают с времянками "на гране". Новые сделаны по другому техпроцессу, и им нужно времянки соблюсти более серьёзно. Вы пробовали подключать осциллограф к шине? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба Что-то или я совсем забыл, как работают устройства на 1-wire, или в упор не вижу в приведенном коде команды передачи адреса или SkipROM, без которых ни одно устройство на шине 1-wire и не должно отзываться. Просмротрео документацию - это 1821 вообще не имеет адресации и может только один на шине работать. Возражения снимаю. Согласен с haker_fox, надо смотреть времянки на шине. Удобнее это делать даже не осциллографом, а логическим анализатором. Простейшим, китайским, за 4.5 евро на али. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба 6 minutes ago, Сергей Борщ said: Удобнее это делать даже не осциллографом, а логическим анализатором Согласен! Я, правда, за осцилл только потому, что ЛА звон на шине покажет как логические уровни, и их трудно будет отличить от полезной информации. Осциллограф же покажет целостность сигнала на линии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба Проверьте по даташиту маркировку на чипе. У их "родичей" 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 прописать "хто я есть") ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 25 марта, 2019 Опубликовано 25 марта, 2019 (изменено) · Жалоба 13 часов назад, Spider сказал: Это всё работает со старыми датчиками, а с новыми ни в какую. ЧЯДНТ? если схематика и софт одинаковый, то с большой вероятностью у вас палёнка, т.к. эти чипы сняты с производства достаточно давно: https://www.maximintegrated.com/en/products/sensors/DS1821.html update раз что-то похожее на presence отрабатывает, то попробуйте перекрутить обмен, как для ds1820 или подобного. если заработает, то перемаркировка будет очевидна.. Изменено 25 марта, 2019 пользователем Jury093 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 25 марта, 2019 Опубликовано 25 марта, 2019 (изменено) · Жалоба 17 hours ago, Spider said: ...DS1821...ЧЯДНТ? как было сказано выше... 1) они не имеют адреса, что упрощает пусконаладку. 2) они чувствительны к помехам. не везде и не всегда и достаточно редко. по первости мы их меняли(в одном, на целую линейку изделий) , потом изменив схематику детектировали переход в термостат и возвращали обратно в режим датчика.с тех пор головняка нет. 3) их действительно к сожалению сняли с производства. аналогов нет...увы. ЗЫ Попробуйте подключить его с управлением по питанию и программно скинуть в режим термодатчика. очень большая вероятность что это этот случай...но как понимаете - без изменения схемного решения к вам будут периодически обращаться с этим головняком. Изменено 25 марта, 2019 пользователем kolobok0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Spider 0 2 апреля, 2019 Опубликовано 2 апреля, 2019 · Жалоба On 3/25/2019 at 11:18 AM, haker_fox said: Моё предположение: либо новые датчики действительно палёные, либо старые сделаны по одному техпроцессу и хорошо работают с времянками "на гране". Новые сделаны по другому техпроцессу, и им нужно времянки соблюсти более серьёзно. Вы пробовали подключать осциллограф к шине? Да, конечно пробовал. Отчётливо видно ответ на Reset. Вот только Длительность моего Reset не 480, а 520uS, но ведь в даташите указано как минимум 480, да и псевдо датчик отвечает на этот импульс. Далее идёт переключение на 115200 и отправка слотов с битами. Видно что ответов уже нет.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Spider 0 2 апреля, 2019 Опубликовано 2 апреля, 2019 · Жалоба On 3/25/2019 at 7:34 PM, k155la3 said: Я с этими девайсами не работал. Посмотрел DS может это (чтобы он работал как термодатчик или как термостат ему изначально надо в EEPROM прописать "хто я есть") ? Должен ли датчик в режиме термостата отвечать на Reset? Если отвечает, то он в 1-Wire режиме? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 5 апреля, 2019 Опубликовано 5 апреля, 2019 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться