Одновременное использование пинов для I2C и прочего...
- Войдите на сайт для отправки комментариев
Втр, 10/04/2018 - 16:01
Здравствуйте,
Вопрос такой: возможно ли одновременно на одних и тех же пинах использовать I2C и передачу данных для не I2C устройств?
В частности, у меня есть ESP-07 и такие I2C устройства как RTC DS3231SN и расширитель цифровых портов MCP23017, но есть и Nextion экран. Так вышло, что экран подключил к SDA, SCL пинам, по которым идет работа с I2C.
Когда я пытаюсь прочесть время с RTC, то выводится явно неправильное время:
2009-85-165 37:165:85
#include <Wire.h> #include <RtcDS3231.h> #include "Adafruit_MCP23017.h" #include <SoftwareSerial.h> #include <Nextion.h> SoftwareSerial nextion(5, 4);// nextion(TX, RX) Nextion myNextion(nextion, 9600); RtcDS3231<TwoWire> rtcObject(Wire); Adafruit_MCP23017 mcp; void setup(){ rtcObject.Begin(); RtcDateTime currentTime = rtcObject.GetDateTime(); sprintf(str, "%d/%d/%d %d:%d:%d", currentTime.Year(), //get year method currentTime.Month(), //get month method currentTime.Day(), //get day method currentTime.Hour(), //get hour method currentTime.Minute(), //get minute method currentTime.Second() //get second method ); Serial.println(str); // вот здесь и выводится неправильное время 2009-85-165 37:165:85 mcp.begin(0); // 0x20 }
Я проверил: конфликт с RTC (и потенциально с MCP23017) идет именно в указанных пинах SoftwareSerial. На этих же пинах я использую I2C: SCL = 4 пин, SDA = 5 пин. Когда я комментирую все, что связано с Nextion экраном, то время из RTC выводится верное.
Можно ли их как-то подружить?
Библиотеки взяты отсюда:
//https://github.com/bborncr/nextion
В принципе иногда возможно. Но надо хороше представлять что делаеш. Сигналы разрисовать, чтоб обмен с одним устройством не оказывал влияния на другое. И по времени разумеется было разнесено. Вобщем дело тонкое и особенно если у Вас i2c пересекается с uart. Думаю тут нужно еще и про электрическое согласование задуматся. ТХ нексианы как подключен? Попробуйте отрезать его на время (надеюсь он к Rx у SoftwareSerial). Если поможет - подключите через резистор 0,3-1КОм.
ПС. SoftwareSerial - плохо.