• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP32 i2c wire не работает

valerivp

Member
Наверное я что-то не так делаю, но все то же самое что и на ESP8266

Подключаю часы DS3231

Шина если ничего не подключено:

upload_2018-6-17_9-27-46.png

если подключены часы:

upload_2018-6-17_9-29-11.png

если часы без питания:
upload_2018-6-17_9-30-22.png

пробовал ставить резисторы 4.7к между шиной и питанием - нет эффекта
 

=AK=

New member
I2C на 2 МГц? Оригинально!

Кривое подобие старта? Совсем оригинально!

"пробовал ставить резисторы 4.7к", то есть, изначально I2C без резисторов подтяжки? Еще более оригинально!
 

valerivp

Member
I2C на 2 МГц? Оригинально!
2МГц на скрине - это частота дискритезации логического анализатора. Вы считаете это много или мало?

Кривое подобие старта? Совсем оригинально!
я, в отличии от некоторых профессионалов, использую библиотеку wire.h, что и как она делает - мне бы не хотелось разбираться

"пробовал ставить резисторы 4.7к", то есть, изначально I2C без резисторов подтяжки? Еще более оригинально!
я так понимаю, что без резисторов подтяжки i2c принципиально работать не может. Но на ESP8266 работает. Я так подозреваю, что эти резисторы есть или в ESP или в RTC.
 

nikolz

Well-known member
я так понимаю, что без резисторов подтяжки i2c принципиально работать не может. Но на ESP8266 работает. Я так подозреваю, что эти резисторы есть или в ESP или в RTC.
Так как у Вас питания не было то на пинах был ноль. Поэтому и было замечание про подтяжки.
теперь 1, т е все нормально.
1 на шине позволяет создать монтажное ИЛИ на схемах с открытым коллектором - что и реализовано в I2C.
 

valerivp

Member
nikolz, не было бы подтяжки - i2c вообще бы не работал - был бы всегда низкий уровень. А на первом скрине я показал - шина работает. Контроллер не может же выставлять на SDA высокий уровень, он формируется исключительно подтяжкой.
 

nikolz

Well-known member
nikolz, не было бы подтяжки - i2c вообще бы не работал - был бы всегда низкий уровень. А на первом скрине я показал - шина работает. Контроллер не может же выставлять на SDA высокий уровень, он формируется исключительно подтяжкой.
Прекрасно.
Тогда зачем Вы открыли тему, если все знаете ,без чужих советов.
 

valerivp

Member
все знаете ,без чужих советов
Я не все знаю, но я учусь
Из того, что знаю - много благодаря чужим советам. Но только умным советам, а не подобным высказываниям:
I2C без резисторов подтяжки? Еще более оригинально!
 

nikolz

Well-known member
Я не все знаю, но я учусь
Из того, что знаю - много благодаря чужим советам. Но только умным советам, а не подобным высказываниям:
Полагаю что данное высказывание сделано именно по вашей 2 и 3 картинке где у вас сигналы притянуты к нулю.
что не есть нормально для I2C.
Ну а некоторый сарказм - это у кого как получается.
Если Вы учитесь то продуктивнее обращать внимание на содержание, а не на форму .
 

A_D

Active member
valerivp, не обращайте внимания. ЗЫ. Особенно после первого же предложения с 2 МГц на I2C, можно было понять про прошаренность собеседника..
Про резисторы подтяжки - если вы брали готовую плату на DS3231, то обычно они там уже стоят, номиналом от 4,7 кОм до 10 кОм.
 

=AK=

New member
2МГц на скрине - это частота дискритезации логического анализатора. Вы считаете это много или мало?.
Для тактовой I2C это много, для дискретизации логического анализатора - мало.

я, в отличии от некоторых профессионалов, использую библиотеку wire.h, что и как она делает - мне бы не хотелось разбираться
Угу. Пусть другие в ней разбираются, а ваше дело только вопросы "почему не работает" задавать.

я так понимаю, что без резисторов подтяжки i2c принципиально работать не может. Но на ESP8266 работает. Я так подозреваю, что эти резисторы есть или в ESP или в RTC.
В чипе RTCC резисторов подтяжки нет, в ESP они могут быть. Однако для I2C важно не наличие абы какой подтяжки, но и сопротивление резисторов подтяжки. Рекомендуемая величина - от 3.3к до 4.7к. Даже 10к, хотя используется часто, но уже многовато и может быть причиной глюков. Встроенные в чип подтяжки имеют величины в несколько десятков кОм и не годятся для I2C.

Я не все знаю, но я учусь
Из того, что знаю - много благодаря чужим советам. Но только умным советам, а не подобным высказываниям:
Лучше сто раз спросить, не особо заморачиваясь на описание чего там у вас сделано, чем проверить монтаж, самому подумать или книжку почитать.
 
Последнее редактирование:

valerivp

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

В чипе RTCC резисторов подтяжки нет, в ESP они могут быть.
что ж вы все привязались то к этим резисторам? У меня шина i2c, а не 1wire c паразитным питанием. Ей должно быть пофиг какой номинал у встроенных резисторов при длине шины 10см.

Лучше сто раз спросить, не особо заморачиваясь на описание чего там у вас сделано, чем проверить монтаж, самому подумать или книжку почитать.
Я не стесняюсь спрашивать. Не только на форуме, но и лично у знающих людей. После того как сам проверю и подумаю.
Может подскажите книжку, где описаны ошибки, которые могут приводит к таким сигналам как на последних трех скринах?

Если не понятно, что сделано, то:

часы DS3231 подключены на ноги 23 и 19.
выполняется код:
Код:
    Wire.begin(pins::sda, pins::scl);
    Wire.beginTransmission(DS3231_I2C_ADDRESS); // 104 is DS3231 device address
    Wire.write(0x00); // start at register 0
    Wire.endTransmission();
    Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // request seven bytes
  
    if (Wire.available()) {
      //...      
    }else{
// попадаем сюда
        DEBUG_PRINT(F("Wire error"));
    }
 

nikolz

Well-known member
странно, а анализатор говорит что хватает. он же смог разобрать протокол - см. первый скрин.


что ж вы все привязались то к этим резисторам? У меня шина i2c, а не 1wire c паразитным питанием. Ей должно быть пофиг какой номинал у встроенных резисторов при длине шины 10см.


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

Если не понятно, что сделано, то:

часы DS3231 подключены на ноги 23 и 19.
выполняется код:
Код:
    Wire.begin(pins::sda, pins::scl);
    Wire.beginTransmission(DS3231_I2C_ADDRESS); // 104 is DS3231 device address
    Wire.write(0x00); // start at register 0
    Wire.endTransmission();
    Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // request seven bytes
 
    if (Wire.available()) {
      //...     
    }else{
// попадаем сюда
        DEBUG_PRINT(F("Wire error"));
    }
Возможно здесь ответ:
ESP32 and DS3231 RTC example
 

=AK=

New member
странно, а анализатор говорит что хватает. он же смог разобрать протокол - см. первый скрин.
С такой скоростью анализатор не поймает ошибки во временной диаграмме, если они там есть. Или наоборот, будет показывать ошибки, когда их нет.

что ж вы все привязались то к этим резисторам? У меня шина i2c, а не 1wire c паразитным питанием. Ей должно быть пофиг какой номинал у встроенных резисторов при длине шины 10см.
А я не телепат, чтобы знать, что ваша шина 10 см и на ней не висит еще десяток устройств. Вам же влом было нормально описать свою систему. Вы даже не знаете есть у вас нормальные подтяжки или нет. А на встроенных 50-килоомных резисторах может глючить и на 10 см.

Может подскажите книжку, где описаны ошибки, которые могут приводит к таким сигналам как на последних трех скринах?
1. Specification - I2C Bus
2. https://www.maximintegrated.com/en/products/digital/real-time-clocks/DS3231.html
 

nikolz

Well-known member
странно, а анализатор говорит что хватает. он же смог разобрать протокол - см. первый скрин.


что ж вы все привязались то к этим резисторам? У меня шина i2c, а не 1wire c паразитным питанием. Ей должно быть пофиг какой номинал у встроенных резисторов при длине шины 10см.
[/code]
посмотрите это:
ESP32 and DS3231 RTC example
ESP32 and I2C LCD example
I2C not working on ESP32 · Issue #741 · espressif/arduino-esp32
 

nikolz

Well-known member
Я не стесняюсь спрашивать. Не только на форуме, но и лично у знающих людей. После того как сам проверю и подумаю.
Может подскажите книжку, где описаны ошибки, которые могут приводит к таким сигналам как на последних трех скринах?
Using the ESP32 with RTC DS3231 module - Hackster.io
ESP32 Real Time Clock using DS3231 Module and OLED Display
 
Сверху Снизу