• Система автоматизации с открытым исходным кодом на базе 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? не помню) сегмент...
 
Сверху Снизу