LCD 1602 попирает права датчика BME280
- Войдите на сайт для отправки комментариев
Уважаемые форумчате, помогите опытом!
Занимаясь творчеством на первой невинной ардуинке наткнулся на какой-то конфликт модулей.
Через I2C подключены часы DS3231, дисплей 1602 и датчик BME280.
В сканере I2C видны все устройства по разным адресам.
Показатели датчика BME280 в мониторе отражаются правильно бесконечно долго до одного события: первого вывода на дислпей 1602. После этого датчик вначале выдает некорректные показатели, потом отваливается напрочь: "Датчик не найден", показатели нулевые.
Почему так? Почему обращение к одному устройству I2C выключает другое?
Ошибку выявил большим перебором кода, пока не обнаружил, что причиной является первый lcd.print. Датчик был подключен на следующем этапе сборки. В предыдущих этапах уже работали часы, выводились пользовательским шрифтом на дисплей, управлялись пультом, но всё это застряло из-за подключения датчика BME280.
Подозреваю, что подошел к границе неведомых радиотехнических знаний. Обращаюсь за помощью к знаниям сообщества.
Без схемы и краткого кода - проблема решается только в судебном порядке, если BME сможет подать иск, разумеется.
подозреваю, что BME по I2C шине с частотой 400кГц ниработает.
Но НАДА схему и код
LCD 1602 попирает права датчика BME280
К уполномоченному по правам датчиков обращались? Чтоговорит?
подозреваю, что BME по I2C шине с частотой 400кГц ниработает.
Но НАДА схему и код
А я подозреваю, что BME получает 5V по сигнальным линиям и вырубается. Но свидетелей нет, показаний потерпевшего тоже...
Потерпевший, высунув язык, крапает улики.
А вот код. В монитор порта выводится всегда, но как только сниму комментарий хотя бы с одной lcd.print, LCD закрывает датчику рот.
Код, приведенный выше, это уже до минимума обрезанный. Я убрал код, отвечающий и за часы, и за инфракрасный (физически не отключив). Именно так и вышел на узурпатора.
подозреваю, что BME по I2C шине с частотой 400кГц ниработает.
BME по даташиту на 400 заявлен. И у меня от 180 до 280 всегда на ней работали без проблем.
ТС стоит сделать скан адресов всех устройств на шине до вывода на экран и после.
подозреваю, что BME по I2C шине с частотой 400кГц ниработает.
BME по даташиту на 400 заявлен. И у меня от 180 до 280 всегда на ней работали без проблем.
ТС стоит сделать скан адресов всех устройств на шине до вывода на экран и после.
Скан адресов даёт 4 адреса:
Теперь заливаю прошивку, раскомментировав lcd.print
А ежели спросить у часов что-нить, но дисплей не трогать? Хотя, по мне так 3.3V BME совать на 5V шину - не лучшая идея.
А ежели спросить у часов что-нить, но дисплей не трогать? Хотя, по мне так 3.3V BME совать на 5V шину - не лучшая идея.
Попробовал. Спрашивал и до обращения к BME, и после, датчик с часами уживается. Глюк возникает только при попытке вывести текст на экран дисплея, даже всего лишь один символ.
В мониторе порта:
Код:
Непонятная история. У меня на шине все живут, только BME с транслятором уровней.
Можно развести их на разные шины с помощью софтварного wire, конечно, но смогут ли библиотечки с ним работать...
Или питание проваливается. Дисплей жрет много (допустим), питание проседает... датчик вырубается. Вообще, если нана не от роботдина, то выход 3.3V на ней лучше не видеть вообще.
То ТС, а шинные резисторы вы с пары модулей выкинули?
Спасибо за ответ. Значит, эта ситуация ненормальна сама по себе, а не столько от того, что я сделал что-то не то.
Если вас не затруднит, дайте наводку:
- транслятор уровней нужно делать самому или есть готовые?
- то же самое с запиткой 3.3-вольтовых модулей от 5 вольт ардуины - есть стандартное решение?
- и последнее, - можно и стоит ли запитать экран дополнительным источником?
Вы только подскажите ключевые слова, а дальше я пойду гуглить.
То ТС, а шинные резисторы вы с пары модулей выкинули?
Нет, я не трогал ничего, кроме ножек, которые припаивал. Это страшно, я ведь их даже не найду самостоятельно.
Попробуйте, для опыта: отключите физически модуль часов, а оставьте LCD и бме-шку.
- транслятор уровней нужно делать самому или есть готовые?
- то же самое с запиткой 3.3-вольтовых модулей от 5 вольт ардуины - есть стандартное решение?
В качестве стандартного решения я беру датчики с level-shifter на борту. Как правило - это два дополнительных мелких трёхногих транзистора (или шестиногая сборка) и один трех (или пятиногий) стабилизатор 5V->3.3V
Вопрос без однозначного ответа. Всё зависит от 1) тока потребления дисплея; 2) стабилизатора на ардуине.
У меня есть Nano, которая тащит дисплей с датчиками, а есть Mega, которая от одного дисплея уже кипятиться начинает.
In general case, так сказать, всё, что можно пустить мимо питания ардуины, стоит пустить именно мимо.
Попробуйте, для опыта: отключите физически модуль часов, а оставьте LCD и бме-шку.
Сделал, - BME поменял своё поведение.
Вначале я вывел один символ на экран - датчик не завис, продолжил работу, хотя сказал, что у меня -130 градусов. Я накинул кофту, раскоментил все выводы на экран - и датчик повис.
Рядом экспериментов удалось установить, что малые выдачи на экран дают малые погрешности, большие выдачи - подвешивают вообще. Вот результат при выдаче на экран одного лишь первого символа температуры:
Нехватка питания и несогласованность уровней визуально может проявляться как угодно и нет единого симптома, насколько я знаю.
Я понимаю, что хочет выяснить bwn, путём отключения модулей - не уменьшается ли подтяжка на шине до безобразных уровней при трёх подключенных модулях. Могу только лишь сказать. что у меня неделю на лонгтесте стоит ардуина с BME280+SHT21+TSL2561, все подключены к одной и той же квадратной шине. Проблем не наблюдаю.
Как я там и написал, для опыта. Слона кушают кусочками. Одну возможную причину исключили. Теперь проверить питание, это быстрее и проще.
"Могу только лишь сказать. что у меня неделю на лонгтесте стоит ардуина с BME280+SHT21+TSL2561, все подключены к одной и той же квадратной шине. Проблем не наблюдаю."
Григорий, стандартные 4к7 деленые на три не должны мешать шине. Исходил из китайской парадигмы, а хрен его знает, что они навесили, если ТС их даже найти не может.)))
Теперь, взял бы нормальный БП (преобразователя уровней у ТС, один хрен нет) и запитал от него. У меня один LCD был, тот больше 120мА кушал, хотя это была подсветка, чем init может нагрузить, Х его знает? Но трудозатраты невелики, попробовать и поставить еще один жирный крест.
У меня один LCD был, тот больше 120мА кушал, хотя это была подсветка, чем init может нагрузить, Х его знает? Но трудозатраты невелики, попробовать и поставить еще один жирный крест.
Не буду спорить. Даже подтвержу: http://www.melt.com.ru/docs/MT-20S4A.pdf , стр.2 -> "Ток подсветки при напряжении питания подсветки" -> отличается втрое в зависимости от цвета.
инит не нагружает, а вот долгая печать держит на шине напряжение дольше, полагаю. BME от него, возможно, и огребает. Но, опять же - это только предположение. Слишком тонкая это работа - поиск точной причины бага, когда один из элементов точно не из этого ансамбля.
4,7кОм, полагаю, на каждом модуле. Не хочу сейчас ежа тревожить, пусть тест завершит, потом его разберу и точно скажу.
ТС их даже найти не может.)))
ТС их найти не может не потому что китайцы их не впаяли, а потому что для него они все на одно лицо. Это когда-то я разбирался, что вот это - транзистор, а это - резистор, а сейчас выпаяю что-то, а окажется, что это матрица LCD :)
Подберу БП и буду продолжать пробовать. Впереди еще столько слонов...
Очень благодарен всем вам за ответы!
Подберу БП и буду продолжать пробовать. Впереди еще столько слонов...
Кстати, вот о симптомах.
То, что у меня сейчас на тесте стоит - это две ардуины на одной макетке. К одной подключен W5100, к другой ENC28J60. Первый жрет меньше. Обе ардуины обвешаны разными датчиками. Прошивки базово-эквивалентны. Включил я, значит, эту хрень, снимаю данные. На третий день - фигак, экземпляр с W5100 не откликается. Лампочками моргает. Ну, думаю, случайность. Ребутнул. Через три дня - повис. Блок питания подозрительный... Поменял. Три дня - опять завис. Да, мать его ети, прошивку же вылизывал месяцы... А тот, который с того же БП, но с ENC28J60 работает как трактор. Хотя, по всему должно быть наоборот - ENC более капризен. Думал, думал, осматривал всё и вспомнил, что когда макетку под тест этой прошивки собирал, то решил провести на сетевушки питание отдельно, а на ардуины - отдельно. И так вышло, что самое удобное место для подсоединения питания был VIn... БП - 5V, соответственно, реальное питание по системе было в районе 4V...3.6V. И в тот прогон, два года назад, он у меня по две недели пахал без зависаний, поэтому я про такое извращение и забыл. А сейчас вот - начал вешаться. Переразвёл питание и всё ОК - 8 дней аптайма уже по обоим экземплярам.
подозреваю, что BME по I2C шине с частотой 400кГц ниработает.
Но НАДА схему и код
А я подозреваю, что BME получает 5V по сигнальным линиям и вырубается. Но свидетелей нет, показаний потерпевшего тоже...
Теперь проверить питание, это быстрее и проще.
Отыскал и подсоединил блок питания на 9В, - результат, к сожалению, не порадовал. Первые показатели похожи на правду (температура около 22 градусов), потом искажаются и застывают в искаженном виде. Дул на датчик - не реагирует.
Также подводил к дисплею отдельное питание от зарядки телефона, поведение точно такое же.
Не знаю, нужно ли было, но измерил напряжение на 5В шине, куда подсоединен дисплей. При подключении от чистого ЮСБ там было 4.2-4.5 вольт, после подключения блока питания - 4.94 вольта.
Уже неудобно продолжать спрашивать, что еще можно сделать. Единственное, что еще посмею, такой вопрос: если датчик BME на 3.3В, то это касается не только питания, но и логической единицы? Она считается за единицу при 3.3В, не при 5?
при 5В единица не менее 0,7, т.е. 3,5в, а желательно не менее 4-х
с напряжениями все верно, с усби идет через диод, т.е. минус 0,5-0,7В, а с +5 идет напрямую на мк + запирает питание от усби, если он подключен.
Кстати, заблокируйте I2C, поставьте 1, и проверьте, какое напряжение на линиях, т.к. если 280 питается от 3,3, то он может сажать все линии до уровня 3,3В
Сделать можно вот что: на пин +5V подать заниженное напряжение. Через один диод сбросится ~0,6V, через два - ~1.2V, через три - ~1.8V. Ну, или как я учудил - 5V на VIn бахнул и на МК получил 3.6V.
Неисключено, что ваша ардуина продолжит работать на пониженном напряжении. При этом по шине I2C тоже пойдет пониженное напряжение и, вероятно, оно перестанет лупить по BME изо всех сил.
не, не ардуина, я там выше дописал
Так у него перестаёт работать 3.3V TTL датчик на 5V TTL шине, а не остальные 5V TTL устройства. Какбэ самоуказывающий случай.
да, вариант пониженного тоже проходил и как раз в вашем недавнем опыты пользовался, так что только -за
Хотя, по мне так 3.3V BME совать на 5V шину - не лучшая идея.
Друзья, не прошло и трех дней, как до меня дошло, что я лоханулся.
Оказывается, на странице товара было два варианта, 5V и 3.3V и я по неопытности заказал BME280 3.3V (присоединяю фото). И так как "у всех работает, а у меня нет", я и занял ваше время глупыми вопросами (за что искренне извиняюсь), а вовсе не из-за того, что пришла блажь пихнуть невпихуемое.
Хотя это даром не пройдет: я узнал у вас много полезного и поучительного.
Благодарю за помощь и отзывчивость!
P.S. Подал на VIN 5 вольт, напряжение упало до 3.6 вольта, но поведение датчика точно такое же: 22 градуса, потом 46, потом замолкает. Так как где-то в пути еще один дисплей другого типа, ради интереса я попробую еще и его и отпишусь - ведь без LCD1602 датчик всё-таки работает. Иду заказывать правильный датчик, заодно и конвертеры уровней, пусть будут.
Представитель нетрадиционного напряжения, требующий прав от консервативного сообщества:
1. Уберите 4.7к подтяжку в модулях где она на 5в.
Оставьте только в одном модуле где она на 3.3.
2. Бывает "подделка" bmp280 там другие бквы нс микросхеме , там нужен немного другой скетч. Изучите чем отличается bmp280 от bme280 , возможно по ошибке не тот модуль вам прислали.
3. Убедитесь в качественных проводах (иногда бывают плохообжатые) , припаяйте лучше.
4. Проверьте питание и сигналы во время работы скетча, не должно быть выше 3.3в.
5. Ограничтесь общей длиной проводов до 20см , на время теста.
BME от BMP отличается только датчиком влажности в первом. По температуре/давлению у них всё одинаковое.