Мультиплексор tca9548
- Войдите на сайт для отправки комментариев
Сб, 07/09/2019 - 10:48
Добрый день. Помогите решить задачу. Бьюсь уже второй день. Суть такова. Есть мультиплексор tca9548, к которому подключены 3 oled-дисплея 128х32. Использую 3 канала 0, 1 и 7. Проблема в том, что при инициализации двух дисплеев всё работает нормально, но как только добавляю инициализацию третьего дисплея - всё перестаёт работать и изображения пропадают вообще. Причём дисплеи и каналы меняю местами - результат тот же 2 канала работают, а при инициализации третьего - всё пропадает. Ниже приведён участок кода. Может кто сталкивался с подобной проблемой? На каждом канале стоит подтяжка по 10кОм на SCL и SDA. Провода не более 10см.
#include <Wire.h> #include <OLED_I2C.h> OLED myOLED(SDA, SCL); extern uint8_t SmallFont[]; extern uint8_t MediumNumbers[]; //extern uint8_t BigNumbers[]; /* ---------- ФУНКЦИЯ ВЫБОРА КАНАЛА НА I2C-МУЛЬТИПЛЕКСОРЕ ---------- */ void tcaselect(uint8_t i2c_bus) { if (i2c_bus > 7) return; Wire.beginTransmission(0x70); Wire.write(1 << i2c_bus); Wire.endTransmission(); } void setup() { Wire.begin(); tcaselect(0); // выбираю первый дисплей myOLED.begin(SSD1306_128X32); myOLED.setFont(SmallFont); myOLED.clrScr(); delay(250); tcaselect(1); // выбираю второй дисплей myOLED.begin(SSD1306_128X32); myOLED.setFont(SmallFont); myOLED.clrScr(); delay(250); tcaselect(display3); // выбираю третий дисплей // Если закомментировать строку ниже, то 2 экрана работают // а если нет, то не работает ничего вообще!!!!!!!!!!!! //myOLED.begin(SSD1306_128X32); myOLED.setFont(SmallFont); myOLED.clrScr(); delay(250); intro(); // Вывод приветствия на 3-х экранах }
Олед бегин отедает память. Посмотрите по скольку отедает и сколько остается после двух инициализаций. На форуме были темы по процедурам слежения за памятью.
display3 не обявлена
display3 равен 7, просто вырезал кусок из скетча. Насчёт памяти тоже думал, но после 2-х экранов памяти занято только 25%. К тому же процедура инициализации проходит физически один раз, но только на разные каналы. Если бы я создал 3 экземпляра класса, то да - память играла бы роль.
Я тоже думаю что память не при чем. Я бы копал так.
1. В строке 32 явно задать 7 и проверить.
2. проверить контакты канала 7.
3. попробовать другой канал.
Явно задавал 7. Контакты уже прозванивал от безвыходности. Канал не играет роли переключал и менял местами. Любых два канала работают, а как только инициализирую третий - настает кирдык. Если выключить инициализацию 2-го дисплея и включить 3-го, то будут работать дисплеи 1 и 3. Но все вместе, хоть убей не работают.
Питания мало?
Просадки нет. На всех экранах по 5в, хотя питаю от Arduino. Попробую записать отдельно и отпишусь. Может в момент старта идёт просадки, хотя и задержки ставил и ёмкость.
Нет. Отдельное питание тоже не помогло.
поменяйте тогда на плату с большей памятью.
Компилятор подитожил
А что за библиотека то? Если фруктовый ад, то в новых они в каждом бегине стали распределять память на буфер, а освобождают только в деструкторе. Потому может и памяти не хватать. А если OLED_I2C то там один буфер в обекте.
Компилятор динамическую не знает и не покажет!
А причём тут компилятор? Она вполне может динамически запрашиваться.
возьмите вот в этой теме программу memory Explorer (там есть примеры использования) и с её помощью последите за памятью. Может чего интересного увидите. А нет - тогда будем дальше думать.
Проблема решена переходом на библиотеку Adafruit_SSD1306. Три дисплея работают через мультиплексор вообще без каких-либо сбоев. Скетч довольно увесистый, но с памятью проблем нет.
А можно пример скетча?
Ребят не могу вьехать в этот мультиплексор.
Есть хотелка, поставить в каждой комнате температурный датчик BME280 и подключить на ардуино, они все с одинаковыми адресами. Как раз все под силу мультиплексору TCA9548A, но!
Перерыл кучу скетчей, по отдельности датчики работают, не могу сообразить как их опрашивать через тса :((
Пытаюсь сейчас собрать все скетчи что используют ТСА и вывести для себя логику функции перебора порта ТСА и опроса адтчика, я начинающий ардуинщик, просьба не пинать, а помочь(
В идеале скетч для работы с 5 датчиками БМЕ через ТСА
Вот мой пример скетча для BME, он опрашивает датчик и норм выводит инфу с него. Что и где добавить чтобы подключить 2-3...5 датчиков? Уже мозги кипят((
Зачем BME, если есть DS18B20?
Ну так уж сложилось что я их купил 6шт, да и влажность интерессна, ванная, кухня, чтобы автоматизировать включение вытяжек. Проектирую умный дом себе, проводов заложил в стены, в плинтусы, вобщем везде) осталось только до ума довести)
А можно пример скетча?
Ребят не могу вьехать в этот мультиплексор.
Перерыл кучу скетчей, по отдельности датчики работают, не могу сообразить как их опрашивать через тса :((
Боин, ну чтож такой ленивый то? Даже в Гугле поискать не можешь?
Вот тебе пример скетча ИМЕННО датчики BME через мультиплексор!
https://www.bluedot.space/tutorials/connect-multiple-sensors-using-i2c-multiplexer/
Как!?!? Как вы его нашли?! я реально с ноября пинаю эту тему, в английском не очень, ютубы шурстил, форумы шурстил, чессно слово не вру! Этот сайт не попадался на глаза! У меня на столе 10 листов с разнымы скетчами использования ТСА но не с датчиками температур, везде подчеркнуто использование ТСА, выводил общеее чтобы применить его к БМЕ! Спасибо добрый человек, надеюсь сейчас слеплю в кучу. Надо было сразу на форум)
Как!?!? Как вы его нашли?! я реально с ноября пинаю эту тему, в английском не очень, ютубы шурстил, форумы шурстил, чессно слово не вру!
5 минут не искал, третья ссылка в гугле...
Даже если BME есть целый мешок, вешать их на длинный провод - идея не из лучших.
Как!?!? Как вы его нашли?! я реально с ноября пинаю эту тему, в английском не очень, ютубы шурстил, форумы шурстил, чессно слово не вру!
5 минут не искал, третья ссылка в гугле...
Он выдает разные результаты разным пользователям. В зависимости от предыдущих запросов.
На каждом канале стоит подтяжка по 10кОм на SCL и SDA
Подскажите плиз - подтяжка на - и + одновременно?
На каждом канале стоит подтяжка по 10кОм на SCL и SDA
Подскажите плиз - подтяжка на - и + одновременно?
Без схемы обсуждать бессмысленно.
На каждом канале стоит подтяжка по 10кОм на SCL и SDA
Подскажите плиз - подтяжка на - и + одновременно?
Без схемы обсуждать бессмысленно.
Это как?
Наверное, примерно как кот Шрёдингера))))
Видимо, надо ему денег дать.
Видимо, надо ему денег дать.
"нет желания" переводится как "мало денег".
Brat4791, обьем хотелок оценил... Только сдается мне, что если вы задаете вопросы, к чему подтягивать I2C - переделать это под свою машину у вас без шансов
ответил нет желания к этому возвращаться. Читайте по ссылкам где все брал
неудивительно. Судя по фото и приведенному списку ништяков, эта работа стоит тысяч 30-50. Очевидно, что ни один владелец древней Ауди не заплатит даже пятой части этой суммы. соответственно автору нет никакого резона снова ввязыватся в этой проект за копейки