kan35 7 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба И кстати, пробовал сразу перерисовать дисплей отправляя целиком картинку (1024 байт), без адрессации к каждой новой странице, но почему-то в конце каждой страницы 128 байт на экране появлялся странный шум (если правильно помню - 3-4 байта "шумели"), соотвественно 3-4 строки в конце дисплея рисовали что-то не то. Может где-то я накосячил, но я не стал разбираться., вернулся на 128-байтные передачи. В общем - это тоже вариант потенциально рабочий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 5 сентября, 2023 Опубликовано 5 сентября, 2023 (изменено) · Жалоба Just now, kan35 said: I2C при этом должен работать в 400кгц режиме У меня не будет так работать слишком много помех от силовых моторов и линию i2c приходится демпфировать, даже экранированную, линия довольно длинная а мощность моторов в пике 1квт. (электросамокат) и с dma пытался разобраться но времени не хватило, в принципе ездит, все показывает ) Изменено 5 сентября, 2023 пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба 9 minutes ago, whale said: У меня не будет так работать слишком много помех от силовых моторов и линию i2c приходится демпфировать, даже экранированную, линия довольно длинная а мощность моторов в пике 1квт. (электросамокат) и с dma пытался разобраться но времени не хватило, в принципе ездит, все показывает ) ну может кому то еще пригодится, на счет DMA с ним разбираться не сложно, к тому же вы пишите на HAL, поэтому пользуйтесь Кубом для разрешения DMA и просто меняете _IT на _DMA в функции передачи и всё. на счет длинных линий - у меня тоже длинные, и через 4 платы проходит сигнал, по паре килоом подтянул с обоих концов и норм. И еще на шине кроме дисплея виcят еще устройства. А зашумление от моторов к скорости связи отношения не имеет, и если линия плохо согласована и плохо заэкранирована, то ошибки полезут на любой скорости. В этом смысле на бОльшей скорости вы эти ошибки просто быстрее обнаружите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба SH11106 как раз и отличается от SSD1306 тем, что есть только постраничная перерисовка, а не полная. Я года 4 назад с ним сталкивался. Там ещё была проблема в том, что при перевернутой ориентации нужно передавать начальное значение столбца, поскольку счётчик считает от 131, а пикселей 128. Эту разницу и нужно было компенсировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба 27 минут назад, whale сказал: линию i2c приходится демпфировать, даже экранированную, линия довольно длинная а мощность моторов в пике 1квт. (электросамокат) В таких условиях лучше было выбрать экран на SPI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба 7 minutes ago, jcxz said: В таких условиях лучше было выбрать экран на SPI. Уверены, что лучше? 11 minutes ago, EdgeAligned said: SH11106 как раз и отличается от SSD1306 тем, что есть только постраничная перерисовка, а не полная. Я года 4 назад с ним сталкивался. Там ещё была проблема в том, что при перевернутой ориентации нужно передавать начальное значение столбца, поскольку счётчик считает от 131, а пикселей 128. Эту разницу и нужно было компенсировать. Видимо этот мусор я и видел. Теперь понятно. Значит с SSD1306 еще проще - меньше прерываний и еще меньше нагрузка на проц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба 45 минут назад, kan35 сказал: Уверены, что лучше? Уверен. Так как нет высокоомных состояний линий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 5 сентября, 2023 Опубликовано 5 сентября, 2023 (изменено) · Жалоба 55 minutes ago, jcxz said: Уверен. Так как нет высокоомных состояний линий. I2C тоже не высоко-омная вообще то, подтяжки же... И наловит ложных имспульсов SPI не меньше, чем I2C если есть несогласованность. В этом смысле на конце SPI все равно придется повесить те же самые пару килоом подтяжки в конце линии, я, думаю, спорить с этим Вы не будете, а это уже и называется - катить квадрат. И давайте вспомним что несут в себе аббревиатуры SPI и I2C, из вики: SPI - стандарт...сопряжения микроконтроллеров и периферии I2C - шина для связи между интегральными схемами внутри электронных приборов Как не трудно заметить, I2C по своей природе предполагает межблочное соединение, а это и есть случай электросамоката. А SPI - это все таки соединение микросхем вокруг микроконтроллера, упрощенно говоря - в пределах платы. Если уж углубляться, то вернее смотреть на CAN или Eth, или какиие-нибудь токовые петли... Но у нас - дисплейчик с I2C/SPI. И, соответственно - I2C - наиболее правильная шина из возможных. Не SPI, категорически. Изменено 5 сентября, 2023 пользователем kan35 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба Все эти дисплеи имеют "в базе" три вида интерфейсов - SPI, I2C и параллельный. Переключается они через два контакта, соединяемые с землёй или питанием. Поэтому можно поэкспериментировать наглядно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба 31 минуту назад, kan35 сказал: I2C тоже не высоко-омная вообще то, подтяжки же... Подтяжки даже в пару килом не сравнить с сопротивлением активного открытого верхнего или открытого нижнего ключа на push-pull-выходе. Разница - на несколько порядков (в сопротивлении к GND/питанию). 31 минуту назад, kan35 сказал: И наловит ложных имспульсов SPI не меньше, чем I2C если есть несогласованность. В этом смысле на конце SPI все равно придется повесить те же самые пару килоом подтяжки в конце линии, Зачем? SPI для экрана работает всегда на вывод. Без переключений направления. Поэтому подтяжка там - мёртвому припарка. Не нужна она там. 31 минуту назад, kan35 сказал: Как не трудно заметить, I2C по своей природе предполагает межблочное соединение, и I2C и SPI - это шины внутриплатные, обе, по назначению. Но I2C обладает меньшей помехоустойчивостью, вследствие использования режима открытого коллектора. Которого в однонаправленном SPI нет. А чем меньше сопротивление линии - тем она лучше давит всякие помехи и наводки. Это - основы ЭМС. Просто подумайте немного: какую энергию нужно потратить, чтобы навести помеховый сигнал одного и того же уровня на шине, имеющей сопротивление (к полигону GND) = X Ом, и какую энергию, для наведения того же уровня помехи (тех же вольт) на линию, имеющую сопротивление = X/1000 Ом ? 31 минуту назад, kan35 сказал: Не SPI, категорически. Не будьте столь категоричны. Сперва посетите какие-нить курсы по ЭМС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба Если говорить про курсы, я в старые времена ходил в офис филипса в Москве, и мне дали сертификат, что я мастер по I2C)))) так что я тут вас всех научу сейчас. Шучу, конечно... Но кстати, на тот момент нас лечили про то, что большие LED панели вполне на I2C можно делать, и филипс делал такие драйверы (может и до сих пор делает). Это именно межблочные соединения и на мегагерцовых частотах уже. 11 minutes ago, jcxz said: Подтяжки даже в пару килом не сравнить с сопротивлением активного открытого верхнего или открытого нижнего ключа на push-pull-выходе. Разница - на несколько порядков (в сопротивлении к GND/питанию). Это вы так рассуждаете, руководствуясь законом Ома, уже хорошо, но не все так просто. На длинных линиях мы будем наблюдать волновую природу сигналов, суб-микросекундные импульсы будут с одинаковым успехом происходить как на SPI, так и на I2C, энергия просто не будет успевать дойти, чтобы рассеяться на внутренних ключах микроконтроллера. А суб-мкс импульса на сигнале тактирования вполне достаточно для защелкивания ложного бита. Я еще добавлю один момент по поводу SPI и lданного дисплея. На этом контроллере SSD1306 100% не уверен, но на других подобных постраничная запись не предусмотрена, скорее всего и на конкретно этом невозможна по SPI. Таким образом, дисплеи работают медленнее на SPI и микроконтроллеру придется программно управлять, в отличие от I2C, где все будет делаться по DMA. В общем, не было бы нужны, не делали бы тут I2C, а оставили тот же SPI на двух проводах... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба 53 минуты назад, kan35 сказал: На длинных линиях мы будем наблюдать волновую природу сигналов, суб-микросекундные импульсы будут с одинаковым успехом происходить как на SPI, так и на I2C, энергия просто не будет успевать дойти, чтобы рассеяться на внутренних ключах микроконтроллера. По закону статистического распределения: Чем выше энергия импульса - тем вероятность его ниже (а значит и количество таких импульсов в реальной обстановке). И спад идёт по экспоненциальному закону. Значит количество помеховых импульсов, могущих сбить с панталыку SPI, будет многократно меньше, чем для I2C. Конечно от ЭМИ ядерного взрыва и SPI сдохнет. 53 минуты назад, kan35 сказал: Я еще добавлю один момент по поводу SPI и lданного дисплея. На этом контроллере SSD1306 100% не уверен, но на других подобных постраничная запись не предусмотрена, скорее всего и на конкретно этом невозможна по SPI. Таким образом, дисплеи работают медленнее на SPI и микроконтроллеру придется программно управлять, в отличие от I2C, где все будет делаться по DMA. Не очень понял про "постраничную запись".... Что именно там невозможно и почему? PS: Не на SSD1306, но на подобном (ILI9340) прекрасно у меня работает экран на SPI. Естественно - через DMA. Никаких проблем. Насчёт "медленнее": работает на SCLK=~40...45МГц. Что и близко не снилось I2C. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 187 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба 1 час назад, kan35 сказал: На длинных линиях мы будем наблюдать волновую природу сигналов, суб-микросекундные импульсы будут с одинаковым успехом происходить как на SPI, так и на I2C, энергия просто не будет успевать дойти, чтобы рассеяться на внутренних ключах микроконтроллера. О да, распространение по-настоящему хайспидного I2C в очень длинной линии в десяток сантиметров нужно моделировать, не иначе, чем в гиперлинксе Помехоустойчивость I2C в сравнении с SPI просто никакая, то же самое можно сказать и о скорости передачи. 1 час назад, kan35 сказал: Я еще добавлю один момент по поводу SPI и lданного дисплея. На этом контроллере SSD1306 100% не уверен, но на других подобных постраничная запись не предусмотрена, скорее всего и на конкретно этом невозможна по SPI. Таким образом, дисплеи работают медленнее на SPI и микроконтроллеру придется программно управлять, в отличие от I2C, где все будет делаться по DMA. Не совсем понимаю, что подразумевается под страничной записью, но кошерная реализация драйвера экрана, вне зависимости от того, I2C или SPI или еще что к нему подключено, подразумевает неблокирующий буферизованный обмен данными/командами с экраном. Напихал в некую кольцевую очередь дескрипторов транзакций и пусть драйвер разгребает, попутно подключая при необходимости DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 5 сентября, 2023 Опубликовано 5 сентября, 2023 (изменено) · Жалоба Не надо ядерного взрыва. Просто короткий импульс, очень слабой энергии и всё - клок слэйвом засчитан. Ничего не поделаете - надо вешать подтяжку на конце линии, так как иначе это ваше нелюбимое высокоимпедансное состояние. У меня был опыт с SSD1322 на SPI - подряд в пределах страницы там нельзя. Только попиксельно. Скорее всего и SSD1306 нельзя писать видеопамять последовательно в SPI. В явном виде это не сказано и для I2C, и даже примеры, которые я находит - все пишут попиксельно и на I2C (ну типа дисплей маленький и так сойдет), но по сути I2C - это интерфейс для устройств типа "память" и автоинкремент адреса заложен везде, как и в SH1106, и как в SSD1306, что выше коллеги подтвердили, и на всем, что я встречал, как минимум в пределах страницы, а с памятью типа M24 автоинкремент вообще на всю память распространяется (все 64кбайт). Если ILI9340 позволяет DMA на I2C, то честь ему и хвала. Изменено 5 сентября, 2023 пользователем kan35 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 5 сентября, 2023 Опубликовано 5 сентября, 2023 · Жалоба 1 час назад, kan35 сказал: а этом контроллере SSD1306 100% не уверен, но на других подобных постраничная запись не предусмотрена, скорее всего и на конкретно этом невозможна по SPI. Чтобы не гадать, откроем мануалы. (ой, много копипастить, но вы сами откройте и посмотрите). Постраничный режим (Page addressing mode) работает всегда на любом интерфейсе и на обоих дисплеях. А вот режим Horizontal addressing mode, когда есть автоинкремент страниц и весь дисплей заполняется от верхнего левого до правого нижнего угла, в SH1101 отсутствует на любом типе интерфейса. ILI9340 по I2C? Насколько я помню, там нет I2C. Потому что дисплей объемный в плане числа байтов и I2C на 400 кГц просто не вывезет по скорости. На вскидку, не считая на калькуляторе, там чето по-моему, кадра 3 в секунду будет. Потому что даже SPI должен быть в 20-30 МГц, чтобы более-менее FPS обеспечить на динамической картинке. Для нормальной динамики дисп.240х320 подключают по параллельному интерфейсу. 13 минут назад, kan35 сказал: SSD1322 Блин, ребята, ну читайте же мануалы то, там всё ж написано. Это дисплей с возможностью отображения градаций яркости, поэтому один пиксель может передаваться более чем одним пикселем. А варианты организации развертки описаны в мануале. Там же ВСЁ НАПИСАНО! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться