Kalombyr
@Kalombyr

Скорость i2c для ЖК экрана?

Доброго дня!
Есть ЖК дисплей 12864j (производитель неизвестен), удалось подключить 8ми битным интерфейсом, используется библиотека GLCD, работает всё быстро.
Решил перевести на i2c, так как заняты практически все ноги Arduino были, взял микруху pcf8574, подключил только линии данных (D0-D7), остальные (E, RW, RS, DI и тд) оставил подключёнными к Ардуине. Разобрался в коде библиотеки,
перенаправил вывод через I2C (и запись и чтение, библиотека Wire) всё работает но работает Оооочень медленно.
Раньше (при прямом подключении) дисплей полностью обновлялся меньше секунды, а теперь на полную перерисовку уходит как минимум 3 секунды.
Запись и чтение происходит всех портов разом, а не по одному.
Скорость Wire выставил в 400 кГц. - больше по видимому не может atmega.
C таймингами экрана игрался, но добился только ещё большей задержки.

Подскажите, пожалуйста, где я что-то мог сделать не правильно и куда копать?
Какая ему тогда нужна скорость i2c?
  • Вопрос задан
  • 1022 просмотра
Решения вопроса 2
gbg
@gbg Куратор тега Arduino
Любые ответы на любые вопросы
Скорость i2c должна быть как минимум в 8 раз выше, чем скорость параллельного интерфейса.

Atmega может дрыгать пинами на частоте 8 Mhz при кварце 16 Mhz. Остальные тормоза вам создает программная реализация с кучей абстракций. Хотите драйва - переписывайте все на C, без абстракций и с кучками на асм.

Или меняйте контроллер на ARM.
Ответ написан
Комментировать
ИМХО можно выкинуть и2ц модуль и воткнуть пару сдвиговых регистров, которыми дрыгать через SPI (в случае если не надо читать что-то из памяти дисплея, что только при выводе символов на дисплей не особо-то и нужно, ардуина врядли будет молотить с такой скоростью, что надо будет состояние дисплея запрашивать).
Сам по себе аппаратный SPI будет гораздо меньше телодвижений делать чем I2C, что обеспечит некоторый прирост в скорости (по сравнению с I2C), но надо будет перевернуть все библиотеки и по сути создать новую.

И судя по даташиту на микруху неизвестно, как она отреагирует на превышение скорости тактирования, она в принципе похоже рассчитана на 100 кГц. С определенной частоты может просто начать неадекватно работать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы