Відповісти

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

Назад

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

jokeer
2025-02-28 23:37:51

мопед не мій wink
китайці з expressif люблять різні неочевидні трюки. чи воно актуальне тільки для одної плати, чи для всіх, треба курити даташіти.

Васятко
2025-02-28 17:53:48
vvr пише:

У мене ESP32 WROOM 32D.

jokeer пише:

ESP32-WROOM-DA

Щось тут не сходиться

vvr
2025-02-28 09:53:16

Thanks.
Документація велика сила !!!

Я там свого часу полазив, а зараз не зрозумів...

jokeer
2025-02-28 07:49:34

GPIO2 and GPIO25 on the ESP32-D0WD-V3 chip are designed as test points to control RF Switch (See
Figure 4 ESP32-WROOM-DA Schematics). The two pins are not led out to the module.

vvr
2025-02-27 19:40:06
dimich пише:

У вас взагалі на лініях I²C є pull-up резистори?


На цих модулях годинника підтяжка є.

vvr
2025-02-27 19:38:17

Дякую всім за участь. За порадою dimich годинник пішов, поки без збоїв.
Але вирішив перестрахуватися)))
Запустив wifi (вперше з ним зіткнувся) і тепер раз на годину оновлюю час на годиннику з NTP.
У мене ESP32 WROOM 32D. Так, при підключенні wifi GPIO25 (у мене на ньому сенсорна кнопка) не хотів працювати. Пошуки в інтернеті ні до чого не привели (даташит не подужаю))). Довелося перекинути на 33.
Другий день без нарікань))))

dimich
2025-02-23 19:07:52
vvr пише:

0h: 37
1h: 38
2h: 0
3h: 1
4h: 1
5h: 1
6h: 0

Ну це 00:26:25 01.01.2000 (2000 + 0), нормальні значення після скидання.

vvr пише:

7h: 0
8h: 0
9h: 0
Ah: 0
Bh: 0
Ch: 0
Dh: 0

Будильники не заведені.

vvr пише:

Eh: 28
Fh: 136
10h: 0
11h: 21
12h: 192

EOSC (старший біт в регістрі 0Eh) тепер скинутий. Значення регістрів дивіться в таблиці на стр. 11 в даташиті.

У вас взагалі на лініях I²C є pull-up резистори?

vvr
2025-02-23 18:43:59
requestFrom() = 19
0h: 85
1h: 40
2h: 0
3h: 1
4h: 1
5h: 1
6h: 0
7h: 0
8h: 0
9h: 0
Ah: 0
Bh: 0
Ch: 0
Dh: 0
Eh: 28
Fh: 136
10h: 0
11h: 21
12h: 128
vvr
2025-02-23 18:42:08

всі 19 регістрів:


requestFrom() = 19
0h: 37
1h: 38
2h: 0
3h: 1
4h: 1
5h: 1
6h: 0
7h: 0
8h: 0
9h: 0
Ah: 0
Bh: 0
Ch: 0
Dh: 0
Eh: 28
Fh: 136
10h: 0
11h: 21
12h: 192
vvr
2025-02-23 18:37:51
dimich пише:
vvr пише:

На дисплей виводиться 2000+year)))


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


тепер час не зупиняється))))

dimich
2025-02-23 17:46:03
vvr пише:

На дисплей виводиться 2000+year)))

Тобто змінна year має значення 165. Воно може бути отримане від bcdToDec() при аргументі 255: 15*10 + 15.
У вас або Wire.read() повертає -1 (немає даних в буфері), або відвалилась SDA і читаються всі одиниці.

Спершу додайте перевірку результату Wire.read() на -1. Якщо що, Wire.read() повертає int, а не byte.

Якщо там проблема зі зʼєднанням по I²C, то аналізувати подальший код немає сенсу, поки цю проблему не буде виправлено. Нажаль, Wire - жахливо написана бібліотека, і з нею діагностувати помилки комунікації не так то просто.

Доречі, назви функцій bcdToDec() та decToBcd() невдалі, BCD саме по собі Dec. Назви мали би бути щось типу bcdToInt() та intToBcd().

Не дуже розумію, навіщо читати значення в BCD, конвертувати його в число, а потім число знову в BCD, щоб відображати на дисплеї. Але то таке.

vvr пише:

Я навіть не знаю, як з ними працювати, ніколи не стикався.

Так само як читаєте регістри годинника та календаря, тільки всі 19 регістрів:

  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();

  size_t len = Wire.requestFrom(DS3231_I2C_ADDRESS, 19);
  Serial.print("requestFrom() = ");
  Serial.println(len);
  for (int i = 0; i<19; i++) {
     Serial.print(i, HEX);
     Serial.print("h: ");
     Serial.println(Wire.read());
  }
vvr пише:

Нічого тада не записував

Значить якось записалось. Це найперша очевидна причина зупинки осцилятора при живленні від батарейки.

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

jokeer
2025-02-23 16:32:25

*year       = bcdToDec(Wire.read());
не повинно тут виходити 165.

до речі
byte year)          // 0-99

з якого року починається відлік часу? 16 нагадує -1 по модулю 16.

vvr
2025-02-23 15:58:54
dimich пише:
vvr пише:

Теж саме - при вимкненні живлення годинник зупиняється (((((

А ви часом ніде не записали одиницю в біт EOSC?

Здампте вміст всіх регістрів та подивіться вже, що там робиться.

Я навіть не знаю, як з ними працювати, ніколи не стикався.
Нічого тада не записував

vvr
2025-02-23 15:56:49
dimich пише:

Цікаво, як цей код може видавати "2165 рік", коли

byte ... year;

...

Serial.print(year);

Або це не той код, або щось недоговорюєте.

На дисплей виводиться 2000+year)))

dimich
2025-02-23 15:30:41
vvr пише:

Теж саме - при вимкненні живлення годинник зупиняється (((((

А ви часом ніде не записали одиницю в біт EOSC?

Здампте вміст всіх регістрів та подивіться вже, що там робиться.

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