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

Нужна помощь Модуль времени DS3231 на нестандартных пинах

LocalBrownie

New member
Доброго времени суток!
Может у кого есть опыт подключения девайсов по I2C на нестандартные пины?
Третий день вожусь, пытаюсь сдружить вместе ESP8266 (ESP-12E), экранчик на 2.2" на ILI9341 (SPI) и RTC DS3231 (I2C).
Проблема в том что и в экране и в RTC используются 4-й и 5-й пины. "Подвинуть" экранчик у меня не получилось. Попытался подвинуть DS3231 (благо в библиотеке предусматривается возможность) - тоже неудача.
Пробовал скетч отсюда и примеры из Library for RTC, Ds1307 & Ds3231 makuna - на стандартных пинах работает на ура. Что с явным указанием SDA SCL, что просто Wire.begin(). При попытке перебросить и инициализировать I2C с другими SDA и SCL (Wire.begin(0, 2)) вместо времени получаю какой-то числовой мусор (правда всегда одинаковый :) и температуру "-3.31".
Перепробовал кучу комбинаций - с тремя оставшимися пинами 0, 2, 16 - всё без толку. Остался еще один GPIO12, но он мне нужен для регулировки яркости экрана (единственный из оставшихся с PWM).
Переставлял с нуля Arduino IDE (1.6.9), в общем повеселился от души :) но "воз и нынче там".
Ткните носом, плиз, куда копать?
 

nikolz

Well-known member
Доброго времени суток!
Может у кого есть опыт подключения девайсов по I2C на нестандартные пины?
Третий день вожусь, пытаюсь сдружить вместе ESP8266 (ESP-12E), экранчик на 2.2" на ILI9341 (SPI) и RTC DS3231 (I2C).
Проблема в том что и в экране и в RTC используются 4-й и 5-й пины. "Подвинуть" экранчик у меня не получилось. Попытался подвинуть DS3231 (благо в библиотеке предусматривается возможность) - тоже неудача.
Пробовал скетч отсюда и примеры из Library for RTC, Ds1307 & Ds3231 makuna - на стандартных пинах работает на ура. Что с явным указанием SDA SCL, что просто Wire.begin(). При попытке перебросить и инициализировать I2C с другими SDA и SCL (Wire.begin(0, 2)) вместо времени получаю какой-то числовой мусор (правда всегда одинаковый :) и температуру "-3.31".
Перепробовал кучу комбинаций - с тремя оставшимися пинами 0, 2, 16 - всё без толку. Остался еще один GPIO12, но он мне нужен для регулировки яркости экрана (единственный из оставшихся с PWM).
Переставлял с нуля Arduino IDE (1.6.9), в общем повеселился от души :) но "воз и нынче там".
Ткните носом, плиз, куда копать?
---------------------------
проблема в том, что другие пины надо включить на режим вывода так как они имеют много функций.
Например чтобы включить GPIO12 на вывод надо исполнить такую команду на СИ:
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);
 

LocalBrownie

New member
@nikolz
Хм... Спасибо, буду попробовать....
Надеюсь под "другие" имеется в виду те что остались без дела?
Да, и я под Arduino IDE могу наверное воспользоваться "pinMode(12, OUTPUT)" вместо PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);?
...
Хорошо, а если мне потом понадобится "кнопку считать"?
После инициализации Wire можно будет нужный пин на INPUT переключить?
 

LocalBrownie

New member
@nikolz
Не, не помогает к сожалению....
С "PIN_FUNC_SELECT" не компилится, а с pinMode всё как и прежде.
Но за одно всеми пинами помигал, проверил. Все работают.
 

tretyakov_sa

Moderator
Команда форума
Доброго времени суток!
Может у кого есть опыт подключения девайсов по I2C на нестандартные пины?
Третий день вожусь, пытаюсь сдружить вместе ESP8266 (ESP-12E), экранчик на 2.2" на ILI9341 (SPI) и RTC DS3231 (I2C).
Проблема в том что и в экране и в RTC используются 4-й и 5-й пины. "Подвинуть" экранчик у меня не получилось. Попытался подвинуть DS3231 (благо в библиотеке предусматривается возможность) - тоже неудача.
Почему не получается подключить SPI на 14,12,13,15, а I2C на 4,5?
 

LocalBrownie

New member
и в подтверждение этого, фото работающего макета:
nrf24l01(SPI) на 12-16 пинах, bmp180(I2C) на 4-5 пинах, dht22 - 0 пин.
Просто мой экранчик подключается по умолчанию к GPIO 13, 14, 15, 4, 5. MISO не используется, потому и 12-й свободен. Не знаю, кому пришла идея занять еще и пины I2C, но факт есть факт. :(
 

LocalBrownie

New member
а что мешает в строке инициализации дисплея
Код:
UTFT myGLCD ( ILI9341_S5P, 13, 14, 15, 5, 4 );
поменять номера пинов ?
Пробовал.
"Подвинуть" экранчик у меня не получилось.
Правда у меня рабочий вариант "звучит" так:
Код:
UTFT myGLCD ( ILI9341_S5P, 15, 5, 4 );
Ставим вместо "5,4" - "16,0" - получаем белый экран.

Попробую еще с полной строкой инициализации, авось прокатит....
 

LocalBrownie

New member
Оп-с!
Сам не верю!
Запустилось! Чувствую себя идиотом, но тем не менее!
CS -> 15
Reset -> 2 (а не на 16, как в прошлый раз!)
DС -> 0

Работает экранчик что с полной строкой инициализации, что с урезанной!
Код:
UTFT myGLCD ( ILI9341_S5P, 15, 2, 0 );
Это надо было взяться за паяльник после бутылки 47-ми градусной?! %)
Или это 16-й GPIO мог подвести в прошлый раз?
Ну в общем завтра еще проверю всё вместе, но думаю что всё будет работать....

Вопрос переходит в разряд "академических"... От чего же не запускалась I2C на других пинах....
Код:
(Wire.begin(0, 2))
Может пригодится еще?
 

LocalBrownie

New member
возможно, что в момент включения на выводах Ds1307 присутствует логический 0 и ESP переходит в режим загрузчика ..
Не, в режим загрузчика оно не входило, т.к. прошивка работала, DS3231 опрашивался, но вместо результатов шёл мусор. Такое впечатление что именно RTC не хочет работать с пинами GPIO 0,2. Находил инфу что датчик давления bmp180 на них работает. Причём то-ли на SDA-0, SCL-2 - работает, а на 2,0 нет, то ли наоборот. Не помню где было.
 
Сверху Снизу