• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Arduino IDE & I2C

Discriminator

New member
@igrr, а Вы Wire проверяли ? Какие то тонкости есть ?
Ситуация примерно следующая беру скетч https://github.com/kriswiner/MPU-9250/blob/master/MPU9250BasicAHRS.ino
Рихтую его "под себя", вырезая spi и что касается display - на ESP не работает, на Arduino работает.
"отличающиеся" участки кода менял... типа:

Код:
  Wire.begin(iSDA, iSCL);
  Wire.setClock(150000);
Направьте, плиз...

UPD: setClock(150000) - это я уже пытался SCL ~100кГц выжать...
Это с Ардуинки
MPU9250 I AM 71 I should be 71
AK8963 I AM 48 I should be 48

Это с ESP
MPU9250 I AM FF I should be 71
AK8963 I AM FF I should be 48
 
Последнее редактирование:

A.V

New member
Вроде успешно работает с BMP085. Правда
Были проблемы в начале мая при массовой правке библиотеки Wire и прочих новшествах. Сейчас предварительно доделал "погодный" модуль и всё жужжит :)) (DipTrace железо и код тут: https://bitbucket.org/esp8266/sensor-v2)
 

Discriminator

New member
A.V,
Вроде успешно работает с BMP085. Правда
А у меня что-то не хочет... :( Такой вопрос - с подтяжкой SDA SCL как то игрался ? У меня вообще на MPU-шке на шилде 10к распаяны...
И работает он на Arduino Duemilanove. Я тут в теме по Sming натыкался на мимолетное обсуждение о играх с подтяжкой...

Были проблемы в начале мая при массовой правке библиотеки Wire и прочих новшествах.
Я брал среду и подтягивал библиотеки буквально за сутки до старта этой ветки...
 

Discriminator

New member
Попробуем помахать паяльником...
Конечно, при добавлении большего количества устройств к линиям шины, ёмкость будет увеличиваться, что означает необходимость уменьшения сопротивления (t = RC), если вы хотите сохранить целостность сигнала. Каждая схема является уникальной и ёмкость изменяется, поэтому хорошей практикой будет наблюдение сигнала на экране осциллографа. Можно ли использовать резистор с низким номиналом для уменьшения времени нарастания, что дало бы нам сигнал наиболее прямоугольной формы? И да, и нет. Стандарт I2C устанавливает некоторые ограничения, которые должны быть выполнены, к счастью эти пределы помогают нам сузить диапазон значений сопротивления. Простая формула для расчета наименьшего номинала подтягивающего резистора Rp = (Vcc — 0.4)/3mA, которая для напряжения 5 вольт даёт около 1.5 кОм. Формула для расчета максимальной величины резистора основана на максимальном времени нарастания для стандартного режима (100 кГц), который равен 1 мкс, и выглядит так: Rp = 1us/Cb, где Cb это общая ёмкость шины для одной сигнальной линии. Таким образом, для нашего примера общая ёмкость шины будет составлять около 20 пФ (ёмкость Arduino составляет 10 пФ, в соответствии с даташитом, и DS3231 тоже 10 пФ), что дает верхнюю планку номинала резистора в 50 кОм.

http://student-proger.ru/2014/08/vliyanie-nominala-podtyagivayushhih-rezistorov-na-signal-shiny-i2c/
 

A.V

New member
У меня подтянуто всё, что можно :)) SDA/SCL через 10к на +3.3В. У этих модулей бывают перепутаны 4 и 5 ноги - попробуй в конфиге поменять местами.
Среда у меня от 28мая, больше пока не пересобирал - лень ноут запускать дома, а на работе хлопотно - ant не желает качать архивы через прокси...
В аттаче схема, вторая версия, по мотивам сожженой - подал +12 на вход программирования ((
Все чипы проверены и работают.
 

Вложения

Discriminator

New member
A.V, Спасибо за информацию. Но, как я писал, 10к у меня на самом шилде подтянуты... Собственно вооружился паяльником и подпаял параллельно 2.2к. По схеме, конечно, параллельно получается, а так я их около ESP припаял. Вроде пошло... Сейчас разбираюсь с вылетом wdt на loop.
 

Вложения

Discriminator

New member
Сейчас разбираюсь с вылетом wdt на loop.
Ви, таки, будете смеяться, но зацикливание происходило на тригонометрических фунциях...
Стоило заремировать код, использующий их, и все пошло...
ЧЯНД ? :D (вопрос скорее риторический, хотя буду признательным, если кто-то знает реальный ответ)
 
Последнее редактирование:

A.V

New member
Таки вряд ли. Чудес хватает ))
А вопрос лучше задать @igrr или даже порыться и/или создать тикет на гитхабе. Что-то у них там мелькало с месяц назад про тригонометрию - то ли народ жаловался на какую-то "лишнюю" таблицу, то ли ещё что - похоже, вся тригонометрия считается "в лоб" и не вся оптимально.

Ну и "звать" ESP.wdtFeed() перед вычислениями или delay(0)/yield() внутри циклов

ЗЫ: А вообще, может как-то без столь сложной математики можно обойтись? Таки уже не совсем микро- , но всё же довольно слабенький контроллер-то...
 

Discriminator

New member
у и "звать" ESP.wdtFeed() перед вычислениями или delay(0)/yield() внутри циклов
ESP.wdt.Disable() даже делал... Тупо висит и дальше не идет...
ЗЫ: А вообще, может как-то без столь сложной математики можно обойтись? Таки уже не совсем микро- , но всё же довольно слабенький контроллер-то...
Ну без математики не обойдейшься. Но, учитывая, что "сервер" у меня на STM32 - там должно обсчитаться. С ESP-шки солью данные, которые потянет... Не критично....

Кстати, касаемо математики, пробовал проект через эклипс с подключением libm получал:

Код:
Description Resource Path Location Type
build/app.out section `.text' will not fit in region `iram1_0_seg'
 

A.V

New member
Кстати, касаемо математики, пробовал проект через эклипс с подключением libm
во-во-во!
Как раз с этого всё пред майскими и начиналось – начали вкорячивать дополнительные либы и прочее, что-то перестало влезать в память, поправили параметры ликновки и сломалось всё (типа не стартовал "юзерский" код). Тогда же где-то мелькала фраза, что кусок таблиц с математикой нельзя переносить в другой (r/o? не помню) сегмент...
 
Сверху Снизу