Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

dimich
Сьогодні 12:05:07
smg123 пише:

Тут схема AOC812, VCC = 3.3V від ESP32

Ааа, це готова плата з оптопарами та DS2480B. Тепер зрозумів.

smg123 пише:

на вході Tx стояв 1,5к.

Ну, в теорії 1.5к там має бути достатньо. На фотографії погано видно, зі сторони DS2480B підтяжка 4.7к?
Може у самих оптопар CTR аномально низький. Якщо, наприклад, 50%, то низький рівень на вході DS2480B вже буде десь 1.7 В, а DS2480B за даташитом хоче не більше 0.8. Тоді так, або зменшувати резистор світлодіода, або збільшувати підтяжку 4.7к на виході оптопари.
З другою оптопарою те ж саме може бути. Там до світлодіода 2.4к?

А 5-вольтове живлення звідки берете? Воно добре стабілізоване?

smg123 пише:

після завантаження файла та відкриття посилання в окремому вікні отримую 404

Угу, в мене теж. Щось мабуть знову поламалось sad

jokeer
Сьогодні 11:17:54

Значить не вигрузили файл. В мене така само нога але не болить wink
Ну, на якийсь халявний хостінг закиньте.

smg123
Сьогодні 10:46:19
dimich пише:

Або я щось неправильно розумію, або оптопари у вас принципово неправильно підключені.
Покажіть схему, як у вас підключені оптопари між ESP32 та DS2480B.

На платі ESP32-C3 mini на виводах Tx, Rx зовнішніх підтяжек нема.

схема AOC812

Оптопари

після завантаження файла та відкриття посилання в окремому вікні отримую 404
https://forum.arduino.ua/img/members/4236/schematic_AOC812_upd.png

Тут схема AOC812, VCC = 3.3V від ESP32, на вході Tx стояв 1,5к.
https://github.com/honechko/DS2480/blob/main/Docs/schematic.png
schematic.png

dimich
Сьогодні 03:35:50
smg123 пише:

На самому мастері по входу Tx якраз і стоїть послідовний 1,5к, який я замінив на 220 Ом, бо інших не знайшов.

Послідовно зі входом? А підтяжка скільки?

smg123 пише:

Замінив 1,5к на 220 Ом (3 к на 5В стороні не чіпав).

???
Або я щось неправильно розумію, або оптопари у вас принципово неправильно підключені.

Покажіть схему, як у вас підключені оптопари між ESP32 та DS2480B.

smg123 пише:

офтоп - а як прикріпити фотку?

Якщо фотка вже лежить десь на загальнодоступному ресурсі, то за допомогою тега img.
Якщо фотка на компі, то при редагуванні тиснете внизу "Завантаження". Відкривається діалог, завантажуєте фотку і копіюєте її URL. Далі вставляєте в повідомлення так само за допомогою тега img.

Оффтоп. Це:

smg123 пише:
  if (txByte == 0xE3) {
    Serial1.write(0xE3);
    Serial1.write(0xE3);
  } else {
    Serial1.write(txByte);
  }

можна спростити до

  if (txByte == 0xE3) {
    Serial1.write(txByte);
  }
  Serial1.write(txByte);
jokeR
Вчора 23:23:31

як прикріпити фотку?

Через Завантаження wink
Welcome to 2000 wink

Honey
Вчора 22:59:44
smg123 пише:

Підкажіть по розширювачю портів - при перезапусу по живленню він в EEPROM пише дефолтний конфіг?
Я до чого, мені треба сформувати свою робочу конфігурацію портів, датчиків, порогів і кожен раз ії оновлювати якщо є POR або флагі тривог?

В EEPROM нічого не записується, після ресету стан всієї пам'яті скидується до дефолтних значень. Щоб визначити, що був ресет, потрібно при ініціалізації, коли робите налаштування портів, скинути прапорець POR і потім, якщо він раптом встановився, повторювати ініціалізацію, включаючи скидання POR.
Опитувати по черзі всі пристрої на предмет POR - це довго, для цього передбачено інший механізм: якщо хоч один прапорець тривоги пристрою встановлено, то пристрій буде відгукуватись на AlarmSearch (команда 0xEC замість звичайної Search 0xF0) і потім вже можна вичитувати з кожного такого пристрою, які конкретно тривоги встановлено і їх обробляти.
В бібліотеці для ардуіно це виклик ow.search(addr, false); з другим аргументом false, ось тут є приклад такого алгоритму.

smg123
Вчора 17:12:35
Honey пише:

Не так. 0xE3 - вихід з режиму даних, якщо в режимі даних чіп отримав цей байт, то він переходить в режим "перевірки", якщо наступний байт, назвем його X, не дорівнює 0xE3, то чіп переходить в режим команд і виконує команду X, якщо ж X дорівнює 0xE3 (тобто прийшло підряд 0xE3,0xE3), то чіп повертається в режим даних і вважає, що прийняв лише один байт 0xE3.
Тобто слати треба 0xE3,0xE3, а повернеться лише один 0xE3.
Взагалі кажучи, те що надсилається в режимі команд чіпу, транслюється ним в шину 1-wire і якщо на шині до цього було адресовано один чи кілька слейв-пристроїв, то вони можуть біти 1 на шині заміняти на біти 0, майстер це читає і повертає в уарт. Тобто "ехо" працює тоді, коли слейв-пристрої не були адресовані і вони тихо сидять на шині.

Дякую за уточнення, я робив тест з відключенною 1W шиною.

Підкажіть по розширювачю портів - при перезапусу по живленню він в EEPROM пише дефолтний конфіг?
Я до чого, мені треба сформувати свою робочу конфігурацію портів, датчиків, порогів і кожен раз ії оновлювати якщо є POR або флагі тривог?


dimich пише:

Може у вас від ESP32 TX через якийсь послідовний резистор, або десь велика паразитна ємність.
...
Ну, запрацювало, то й добре. Лише майте на увазі, якщо у вас працює лише на максимумі, при постійній інтенсивній передачі через кілька років кристал деградує, і може перестати працювати.

На платі ESP32-C3 mini зовнішніх резисторів на пінах Tx, Rx немає, ні підтяжки ні послідовно.
На самому мастері по входу Tx якраз і стоїть послідовний 1,5к, який я замінив на 220 Ом, бо інших не знайшов.
Можливо Ви праві і його треба взяти трохи більшим, наприклад 330-470.

офтоп - а як прикріпити фотку?

dimich
Вчора 02:20:34
smg123 пише:

для того, щоб фронти на виході PC817 не завалювались на ії LED треба дати десь 10 mA.

10 mA - це в районі максимума CTR. І то, максимум може бути від 5 до 15 мА, в залежності від виробника та версії.

Ось PC817S, 0x55 на 9600 бод,
TX: CP2102 3.3 В, резистор 2.2 кОм,
RX: CH341A 5 В, резистор в колекторі 2.2 кОм:
261031_pc817_9600.png
Два трансивера взяв навмисне, щоб були різні тайм референс. Все на макетці зі жмутом проводів.

Може у вас від ESP32 TX через якийсь послідовний резистор, або десь велика паразитна ємність.

smg123 пише:

Тест від Honey пройшов зразу же, а з 1,5 к були помилки

Ну, запрацювало, то й добре. Лише майте на увазі, якщо у вас працює лише на максимумі, при постійній інтенсивній передачі через кілька років кристал деградує, і може перестати працювати.

Honey
2026-10-31 23:33:46
smg123 пише:

// Якщо ми дублювали 0xE3, чип теж поверне його двічі, вичитаємо другий байт

Не так. 0xE3 - вихід з режиму даних, якщо в режимі даних чіп отримав цей байт, то він переходить в режим "перевірки", якщо наступний байт, назвем його X, не дорівнює 0xE3, то чіп переходить в режим команд і виконує команду X, якщо ж X дорівнює 0xE3 (тобто прийшло підряд 0xE3,0xE3), то чіп повертається в режим даних і вважає, що прийняв лише один байт 0xE3.
Тобто слати треба 0xE3,0xE3, а повернеться лише один 0xE3.
Взагалі кажучи, те що надсилається в режимі команд чіпу, транслюється ним в шину 1-wire і якщо на шині до цього було адресовано один чи кілька слейв-пристроїв, то вони можуть біти 1 на шині заміняти на біти 0, майстер це читає і повертає в уарт. Тобто "ехо" працює тоді, коли слейв-пристрої не були адресовані і вони тихо сидять на шині.

smg123
2026-10-31 18:09:26
Honey пише:

Повторю тут (вам я в пошті писав), може кому знадобиться: щоб протестувати в Майстері шини ланцюжок UART TX -> PC817 -> DS2480B -> PC817 -> UART RX потрібно перевести DS2480B в режим даних (подати в UART TX байт 0xE1), після цього DS2480B буде повторювати на виході все що в нього надходить (в UART TX відправляєм довільний байт, з UART RX прочитаєм цей же байт, єдине, що байт 0xE3 в UART TX треба відправляти як 0xE3,0xE3 (подвоювати)).

Дякую за допомогу!
Це дало змогу швидко протестувати оптопари з 3,3 вольтовим ESP32-C3 mini і уникнути помилок на етапі зв'язку з DS2480B.

dimich пише:

Покажіть ваші розрахунки.
1.5 кОм при 3.3 В дасть струм порядка 1 - 1.5 мА. Навіть при коефіцієнті передачі струму 50% цього має бути достатньо.
Який у вас резистор в колекторі вихода оптопари?

Розрахунок простий, для того, щоб фронти на виході PC817 не завалювались на ії LED треба дати десь 10 mA.
До того ж ніззя перевантажити порт ESP32-C3 і 10 mA теж норм.
3,3V живлення - 1,2V падіння на LED = 2,1/10 = 210 Ом.
Замінив 1,5к на 220 Ом (3 к на 5В стороні не чіпав).
Тест від Honey пройшов зразу же, а з 1,5 к були помилки, осцілограф даже не включав:

#include <Arduino.h>

#define RX_PIN 20 
#define TX_PIN 21 

void setup() {
  Serial.begin(115200);
  while (!Serial) { delay(10); }
  
  // Запуск зв'язку з мостом
  Serial1.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);
  delay(200);

  Serial.println("n==================================================");
  Serial.println("===  Test оптопар HONEY UART-ЕХО ESP32-C3 mini <--> AOC812(DS2480B)  ===");
  Serial.println("==================================================");

  // 1. Очищуємо буфер
  while (Serial1.available()) Serial1.read();

  // 2. Переводимо DS2480B в режим даних (Data Mode = 0xE1)
  Serial.println("[ INIT ] Переводимо чип у режим даних (0xE1)...");
  Serial1.write(0xE1);
  Serial1.flush();
  delay(10);

  // Вичищаємо ехо самого байта 0xE1, яке повернув чип
  while (Serial1.available()) Serial1.read();
  Serial.println("[ RUN ] Старт циклічного стрес-тесту лінії TX/RX...");
}

unsigned long totalBytes = 0;
unsigned long errorBytes = 0;

void loop() {
  // Генеруємо випадковий байт для перевірки (від 0x00 до 0xFF)
  uint8_t txByte = random(0, 256);

  // Особливе правило від виробника: якщо шлемо 0xE3 (Command Mode), 
  // його треба продублювати два рази підряд, щоб чип не вийшов з режиму даних!
  if (txByte == 0xE3) {
    Serial1.write(0xE3);
    Serial1.write(0xE3);
  } else {
    Serial1.write(txByte);
  }
  Serial1.flush();

  // Чекаємо на відповідь від ізольованої зони
  unsigned long start = millis();
  while ((Serial1.available() == 0) && (millis() - start < 50)) { delayMicroseconds(10); }

  if (Serial1.available()) {
    uint8_t rxByte = Serial1.read();
    totalBytes++;

    // Якщо ми дублювали 0xE3, чип теж поверне його двічі, вичитаємо другий байт
    if (txByte == 0xE3 && Serial1.available()) {
      Serial1.read(); 
    }

    if (rxByte != txByte) {
      errorBytes++;
      Serial.printf("⚠️ [ПОМИЛКА] Надіслано: 0x%02X | Отримано: 0x%02X | Збоїв: %lu/%lun", 
                    txByte, rxByte, errorBytes, totalBytes);
    }
  } else {
    errorBytes++;
    Serial.printf("? [ТАЙМАУТ] Чип не повернув ехо для: 0x%02X | Збоїв: %lu/%lun", 
                  txByte, errorBytes, totalBytes);
  }

  // Кожні 500 байтів виводимо проміжний звіт цілісності
  if (totalBytes % 500 == 0) {
    float errorRate = ((float)errorBytes / totalBytes) * 100.0;
    Serial.printf("? [СТАТИСТИКА] Оброблено байтів: %lu | Помилок: %lu (%.2f%%)n", 
                  totalBytes, errorBytes, errorRate);
  }

  delay(5); // Невелика пауза між байтами
}
dimich пише:

Тобто з модулем розширення портів це ніяк не повʼязано. Мабуть, варто було би створити окрему тему в "Апаратних питаннях".

По факту модуль розширення портів не винен.
Але ж непонятно було де затик, бо ROM ID екстендера і 2-х DS12B20, включаючи їх температуру на шині 1Wire читалися, щось з портів екстендера читалось, а записати  налаштування портів не вдавалось.

jokeR
2026-10-31 14:17:39

Тільки там з HCPL-2300

480 UAH
По богатому wink

PC817 - 5 UAH
Час вмик/вимк Ton/Toff, µs: 18/18 µs. Повинно вистачити для 9600. Але няп треба зарядити струм не 5мА, а 20.

Взагалі їх як грязі трохи є в наявності в магазинах, і швидших, і недорогих.

dimich
2026-10-30 23:25:22
smg123 пише:

Зробив ехо тести на 9600 від ESP32 3,3V через PС817 до DS2480B

Тобто з модулем розширення портів це ніяк не повʼязано. Мабуть, варто було би створити окрему тему в "Апаратних питаннях".

Як саме ви проводили цей тест? Покажіть схему підключення.

В даташиті DS2480B на сторінці 27 є приклади підключення до UART з опторозвʼязкою. Тільки там з HCPL-2300.

smg123 пише:

Вхідний резистор 1,5к для Tx оптопари великий. Розрахунки показують, що він повинен бути 220-330 Ом, щоб впевнено працював світлодіод оптопари.

Покажіть ваші розрахунки.

1.5 кОм при 3.3 В дасть струм порядка 1 - 1.5 мА. Навіть при коефіцієнті передачі струму 50% цього має бути достатньо.
Який у вас резистор в колекторі вихода оптопари?

smg123 пише:

Думаю знайшлося вузьке місце в ланцюжку, із за цього і не зміг налаштувати розширювач портів в кінці 1wire лінії.

При сумнівах дивіться осцилографом, що там на виході з оптопари.

Honey
2026-10-30 22:37:43
smg123 пише:

на якій частоті робить ATtiny13A ~= DS2450 (зчитати фьюзи неможливо)

Ця частота вам нічим не допоможе, важливо що таймінги протокола 1-wire виконуються, а допуски в протоколі величезні, навіть якщо частота ATtiny13A трохи попливе.

jokeer пише:

50 м кабеля це досить багато

Особисто тестував на 300м (бухта езернет кабелю 305м), причому в режимі паразитного живлення (один свій DS2450), і на двох провідниках з однієї пари, і на двох провідниках з різних пар - все працювало, DS2480B - потужна штука.

smg123 пише:

ехо тести

Повторю тут (вам я в пошті писав), може кому знадобиться: щоб протестувати в Майстері шини ланцюжок UART TX -> PC817 -> DS2480B -> PC817 -> UART RX потрібно перевести DS2480B в режим даних (подати в UART TX байт 0xE1), після цього DS2480B буде повторювати на виході все що в нього надходить (в UART TX відправляєм довільний байт, з UART RX прочитаєм цей же байт, єдине, що байт 0xE3 в UART TX треба відправляти як 0xE3,0xE3 (подвоювати)).

smg123
2026-10-30 19:44:08

Зробив ехо тести на 9600 від ESP32 3,3V через PС817 до DS2480B - багато помилок.
Вхідний резистор 1,5к для Tx оптопари великий. Розрахунки показують, що він повинен бути 220-330 Ом, щоб впевнено працював світлодіод оптопари.
Думаю знайшлося вузьке місце в ланцюжку, із за цього і не зміг налаштувати розширювач портів в кінці 1wire лінії.

dimich
2026-10-29 23:23:34
smg123 пише:

Як змусити працювати розширювач портів через гальваничну розв'язку ?

Між чим і чим ви хочете гальванічну розвʼязку?
Вважаючи, що

smg123 пише:

ШІ каже, що або PC817 повільні для 9600

то поки складається враження, що між ESP32 та DS2480B. Тоді до чого тут розширювач портів?

9600 бод через PC817 у мене пролазили без жодних проблем.

Підвал форуму