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

Подключение двух устройств к портам GPIO14 и GPIO13 на node mcu

RtroN

New member
Я нашел информацию о подключении SD каты и дисплея к node MCU V3, и по этим данным составил схему. Но получилось так, что и sd карта и дисплей подключаются к GPIO14(D5) и GPIO13(D7) одновременно. Подскажите пожалуйста, такая схема будет работать или нет?
Схема:

circuit.jpg
 

RtroN

New member
чтобы не задавать такие вопросы, советую ознакомится с SPI шиной.
Я прочитал об этой технологии и понял что через неё можно подключать несколько устройств, и оно будет работать. Но теперь другой вопрос... Будет ли разница в коде, если бы я подключал по отдельности и вместе?
 

enjoynering

Well-known member
Хорошо. Вы задаёте правильные вопросы. Теперь надо ещё раз про честь. В это раз обратите внимание на картинку где подключено несколько slave устройств. Особенно на количество пинов ss/slave select (иногда его называют cs).

Так на всякий случай, у вас дисплей точно spi? Потому что на картинке i2c.
 

RtroN

New member
Хорошо. Вы задаёте правильные вопросы. Теперь надо ещё раз про честь. В это раз обратите внимание на картинку где подключено несколько slave устройств. Особенно на количество пинов ss/slave select (иногда его называют cs).

Так на всякий случай, у вас дисплей точно spi? Потому что на картинке i2c.
В общем, я прочитал о том как происходит передача данных когда master общается с несколькими slave'ами. Там информация передаётся по одним и тем же каналам, которые подключены параллельно, но у каждого slave'а есть свой отдельный ss с помощью которого master и выбирает кому передавать данные и ss можно подключать к любому пину платы.
Насчёт дисплея я тоже почитал, в часности про технологию i2c, в ней есть один канал передачи данных и линия которая отвечает за такты, благодаря которым и происходит синхронизация отправляемых данных.
Еще я прочитал и посмотрел схемы как подключается i2c, и оказывается его можно подключать к любым пинам платы(D0 - D8).

И теперь у меня созрел вопрос. Можете пожалуйста сказать почему на абсолютно всех схемах в интернете о подключении этого дисплея к nodemcu они подключают его именно к D5 и D7? Это всё-таки так нужно или традиция какая-то?
 

RtroN

New member
Я ошибся в своём высказывании насчёт того что i2c можно подключать к любым пинам, я посмотрел на описание пинов nodemcu и там D1 - scl, а D2 -sda. И если я правильно понимаю, то подключив туда дисплей у меня всё должно заработать. Я правильно понимаю?
 

enjoynering

Well-known member
В общем, я прочитал о том как происходит передача данных когда master общается с несколькими slave'ами. Там информация передаётся по одним и тем же каналам, которые подключены параллельно, но у каждого slave'а есть свой отдельный ss с помощью которого master и выбирает кому передавать данные и ss можно подключать к любому пину платы.
все правильно. подключаем два устройства к MISO, MOSI, SCLK и SS (свой отдельный для каждого slave). Переача/прием данных на slave будет выглядеть так. обратите внимание, пред каждым SS LOW мы меняем параметры SPI, на оптимальные для каждого slave

Код:
  SPI.beginTransaction(SPISettings(5000000, MSBFIRST, SPI_MODE0)); //up to 5MHz, read MSB first, SPI mode 0

  digitalWrite(_ss1, LOW);                                         //set software CS low to enable SPI interface for slave 1

  //read/write slave 1 here!!!

  digitalWrite(_ss1, HIGH);                                         //disables SPI interface for slave 1

  SPI.endTransaction();                                            //de-asserting hardware CS & free hw SPI for other slaves


  SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0)); //up to 10MHz, read MSB first, SPI mode 0

  digitalWrite(_ss2, LOW);                                         //set software CS low to enable SPI interface for slave 2

  //read/write slave 2 here!!!

  digitalWrite(_cs, HIGH);                                         //disables SPI interface for slave 2

  SPI.endTransaction();                                            //de-asserting hardware CS & free hw SPI for other slaves

я так и не понял у вас дисплей i2c или spi?
 

RtroN

New member
все правильно. подключаем два устройства к MISO, MOSI, SCLK и SS (свой отдельный для каждого slave). Переача/прием данных на slave будет выглядеть так. обратите внимание, пред каждым SS LOW мы меняем параметры SPI, на оптимальные для каждого slave

Код:
  SPI.beginTransaction(SPISettings(5000000, MSBFIRST, SPI_MODE0)); //up to 5MHz, read MSB first, SPI mode 0

  digitalWrite(_ss1, LOW);                                         //set software CS low to enable SPI interface for slave 1

  //read/write slave 1 here!!!

  digitalWrite(_ss1, HIGH);                                         //disables SPI interface for slave 1

  SPI.endTransaction();                                            //de-asserting hardware CS & free hw SPI for other slaves


  SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0)); //up to 10MHz, read MSB first, SPI mode 0

  digitalWrite(_ss2, LOW);                                         //set software CS low to enable SPI interface for slave 2

  //read/write slave 2 here!!!

  digitalWrite(_cs, HIGH);                                         //disables SPI interface for slave 2

  SPI.endTransaction();                                            //de-asserting hardware CS & free hw SPI for other slaves

я так и не понял у вас дисплей i2c или spi?
Спасибо за пример кода!
На самом деле я и сам не понял i2c это или spi. На сайте где я собираюсь его покупать написано что это i2c. Но я посмотрел код к схеме там где его подключают к D5 и D7, и там в функцию передаётся параметр что то типа SPI_MODE, точно не помню.
Вот ссылка на этот дисплей: https://poltavskaya-obl.prom.ua/p37...rch:tag:portable:serp&locale=ru&from_spa=true.

Но я всё же надеюсь что смогу подключить его к D1 и D2.
 

RtroN

New member
Я еще посмотрел на фото дисплея и там с обратной стороны написано что он работает через SPI. Но продавец пишет что он поддерживает I2C. Эти интерфейсы взаимозаменяемые?
 

enjoynering

Well-known member
Ссылку на экран в студию.

Некоторый микросхемы/драйвера экранов умеют работать с несколькими шинами. Все зависит от того какие перемычки замкнуты на микросхеме и какая шина выведена на гребёнку. Все эти операции делаются на заводе и менять после покупки экономический не выгодно.

Обычно для дешевых экранов кроме spi или i2c нужен ещё как минимум один пин - DC (называют его по разному, но суть одна). Он нужен для управления регистром и памятью внутри микросхемы экрана. Меняя биты в регистре мы можем менять подсветку, переворачивать экран и тд. Меняя биты в памяти, изменять текст на экране дисплея.

Так вот выставля например DC LOW (может быть и HIGH, зависит от дисплея) мы говорим, что сейчас по шине придет информация для записи в память дисплея (для показа на экране). Если выставить HIGH, то мы говорим, что сейчас по шине будет передаваться информация для записи в cotrol register (те это не текст, а команда, например для поворота экрана, или яркости экрана).
 

RtroN

New member
Ссылку на экран в студию.

Некоторый микросхемы/драйвера экранов умеют работать с несколькими шинами. Все зависит от того какие перемычки замкнуты на микросхеме и какая шина выведена на гребёнку. Все эти операции делаются на заводе и менять после покупки экономический не выгодно.

Обычно для дешевых экранов кроме spi или i2c нужен ещё как минимум один пин - DC (называют его по разному, но суть одна). Он нужен для управления регистром и памятью внутри микросхемы экрана. Меняя биты в регистре мы можем менять подсветку, переворачивать экран и тд. Меняя биты в памяти, изменять текст на экране дисплея.

Так вот выставля например DC LOW (может быть и HIGH, зависит от дисплея) мы говорим, что сейчас по шине придет информация для записи в память дисплея (для показа на экране). Если выставить HIGH, то мы говорим, что сейчас по шине будет передаваться информация для записи в cotrol register (те это не текст, а команда, например для поворота экрана, или яркости экрана).
Понятно, спасибо за помощь! Когда я его куплю, это будет скорее всего через месяц, я всё подключу и здесь отпишусь. Ссылка на дисплей: https://poltavskaya-obl.prom.ua/p371138142-lcd-ips-displej.html?
 

enjoynering

Well-known member
да похоже на isp, работающий только на запись - mosi не используется. Очень странная шелкография на плате - sda, scl. Запутает любого. Так обычно i2c подписывают. Нормальные люди если miso не влезает подписывают так - SDO, DO, SO.
 

RtroN

New member
да похоже на isp, работающий только на запись - mosi не используется. Очень странная шелкография на плате - sda, scl. Запутает любого. Так обычно i2c подписывают. Нормальные люди если miso не влезает подписывают так - SDO, DO, SO.
Ясно, намудрили значит они... Спасибо, Вам, за консультацию!
 
Сверху Снизу