Добавлено after 1 minute 28 seconds: Данные напрямую через регистры в SPDR отправляйте. Возможно библиотеки ОЗУ используют, от этого медленно.
Добавлено after 16 minutes 53 seconds:
shonty писал(а):
out SPDR, color_back_H in TEMP,SPSR ; ожидание конца передачи sbrs TEMP,SPIF rjmp PC-2 out SPDR,color_back_L in TEMP,SPSR ; ожидание конца передачи sbrs TEMP,SPIF rjmp PC-2
Дошли руки ещё немного ускорить
Код:
out SPDR, color_back_H lpm ; ожидание конца передачи lpm lpm lpm lpm rjmp pc+1 in TEMP,SPSR ; считывание SPSR для очистки SPIF out SPDR,color_back_L in TEMP,SPSR ; ожидание конца передачи sbrs TEMP,SPIF rjmp PC-2
Первое ожидание конца передачи лучше так переписать. А вот второе.. лучше пока оставить, тем более если в цикл оформлять, то там немного по другому нужно сделать.
Добавлено after 41 minute 24 seconds: PS: последний код будет работать только при установленном бите SPI2X в SPSR. То есть скорость SPI=Fosc/2
Да... Китайцы намудрили с дисплеем. Этому ушлёпку нужно обязательно 3 байта на цвет. Не понимает он 5+6+5. Или 6+6+6 или 8+8+8. Козёл! Конструкции на ассемблере работают заметно быстрее. Получается заливка экрана чуть меньше 1 сек при полноцветном режиме. Буду пихать в SPI не стандартные комманды баскома типа SpiOut, а напихаю ассемблерных вставок.
Нормальный дисплей.. один раз разобраться.. У меня первый тфт 128*160 3 секунды грузился, потом я разгоном увлёкся))
При первой загрузке можно ещё такой фокус использовать: подавать сигнал на вывод LED дисплея когда экран уже залит и информация выведена, ну или лого.. Тогда создаётся иллюзия моментального включения.
Да оно и так уже нормально. Ассемблер помогает. Пришлось все же букварь по нему открывать. Выяснять какие регистры чем заняты по умолчанию. Плюнул в конце концов. Программно можно всяко исхитриться. А не нашел - где лежат переменные, переданные в процедуру. В примерах ссылок на них нет. Просто переменная в заголовке, как параметр и все. Обошелся и без них, но просто интересно.
Novice user, спасибо. Во время работы чистить экран надобности нет, а при включении он заливается цветом в режиме 8 цветов. Меньше секунды. Быстрее все равно не будет.
Ну чо, коты. Опять я с вопросами. Китайцы задолбали конкретно. Приехал очередной дисплей. ОЛЕД. 128 х 64. Фамилия на обороте GME64128-02. Описания в сети крайне скудное и маловразумительное. На каком контроллере не понятно. То ли SSD1306, то ли SH110 так и не понял. Адрес I2C определяется как 3С, но с не меньшим успехом работает и с 78. Правда тут может быть причастен аппаратный I2C. Инициализация по "родному" букварю не проходит. Зато проходит от SSD1306. Картинку разворачивает строго по вертикали. Никакими ухищрениями положить картинку на бок, что бы 128 было по горизонтали, не получается. Кроме того, работает только половина экрана. То есть из 64 оображаются 32. При этом при выводе текста происходит смещение за границу экрана примерно на 28 пикселей. То есть чтобы получить начало текста(фонт 6х8) к нему надо прикрутить в начало 3-4 пробела. Всякие примеры ничего не меняют. Хоть с библиотекой glcd1306-i2c, хоть без нее. В последней версии этой библиотеки она вроде как может работать с обоими чипами, но волевое решение переключения на SH110 работать не хочет вовсе. Только с SSD1306. Впечатление, что или битый пришел, или китайцы перемудрили. Кто сталкивался с таким чудом?
Разобрался я с этич "чудом". Чип в нем SH1107, который изначально заточен под 128х128. Получается вообще хрен поймешь что. Мутота конкретная, короче. Будет попадаться такой - не советую. Что бы получить линию длиной 64 пикселя, нужно отправить 128. То ли съедает половину, то ли "черезстрочная развертка". Поворот на 90 градусов отсутствуе по причине не ведомой. Только на 180. Хотя в приличных дисплеях крутится с шагом 90. Прямой адресации пикселей нет. Почему он "графический"! Похоже один вариант приемлемой работы - через буфер всего экрана. Не нашел автоматического перехода на следующую строку при достижении конца текущей. Куда то в прорву уходят байты. Явная адресация строки. Иначе никак. И при строке 64 пикселя нужно отправлять 128, иначе половина. В то же время, если фонт 8х8, то для прорисовки символа хватает 8. Не нужно повторять. Может, конечно, у меня ума не хватает, но это далеко не первый дисплей у меня в руках.
vem566, приветствую! Тоже угораздило купить это чудо. Удалось вам повернуть экран на 90 градусов? там где покупал, есть отзывы с фото где текст повернут и идет вдоль длинной стороны экрана.
Решено: Библиотека #include <U8g2lib.h> Пример FlipMode U8G2_SH1107_64X128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
А если использовать конструктор вот так, то можно сразу повернуть экран и дале выводить как на экран 128х64 U8G2_SH1107_64X128_1_HW_I2C Display(U8G2_R1, /* reset=*/ U8X8_PIN_NONE);
michael_1976, повернул. Все работает как нужно. У этого дисплея есть текстовый режим, при котором на символ нужно 2 байта - для китайских иероглифов. Отсюда все непонятки. Разработка на баскоме, но у него есть аналог U8g2lib.h. Хотя работает и без неё.
Ну это не совсем встроенный текстовый режим со встроенным знакогенератором. При передаче байта по конкретному адресу для автоматического перехода на следующий адрес нужно два байта послать. Или явно сменить адрес. У китайцев для одного иероглифа на знакоместо нужно 2 байта. Поэтому и родилась аналогия с текстовым режимом.
У этого дисплея есть текстовый режим, при котором на символ нужно 2 байта - для китайских иероглифов. Отсюда все непонятки.
О! Прямо как в ST7920 тоже долго мучился, пока научился с ним работать. Но в общем и целом нравится: 2 провода всего надо и на больших длинах проводов не капризничает.
_________________ Верните прошлое! там было такое прекрасное будущее...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения