BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

Есть на ILI9341. Вам общую последовательность или только на BASCOM ?

Добавлено after 9 minutes 23 seconds:
Коментарии из моей инициализации. С паузами.
Спойлер; ----- Настройка порта
; ----- Настройка SPI:
; ----- аппаратный сброс дисплея
; ----- Программный сброс дисплея (SWRESET) после сброса требуется пауза 120msec.
; ----- Команда пробуждения (SLPOUT) Пауза (120msec)
; ----- SET PIXEL FORMAT (COLMOD}
; ----- MADCTL Memory Access Display Control (36h)
; ----- включить дисплей (0x29)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Проект будет на баскоме. 256-я мега + внешняя память. Задействовано будет много. PWM, АЦП. I2C ну и SPI для диспоея.
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

С баскомом не знаком :dont_know:
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Команды С+ очень просто переводятся в баском. Знаю оба языка, так что проблем нет.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Всем котам с праздником. Особенно кошечек. Хоть их и мало у нас на сайте.
Проблемы с этим дисплеем на чипе ILI9488. Все работает, правда по SPI при 64К цветов, медленно. Но не в этом проблема.

Выяснился интересны факт. При выводе в режиме 8 цветов на экране появляются артефакты. При чем за 3 дня изысканий выяснилось, что появляется он если после вывода линии (произвольной длины и направления) следует команда записи адреса для вывода следующей линии. Артефакт виден на фото. Даташит 10 мегабайт прочитан несколько раз. Может я что не понял из него? Кто сталкивался?
Вложения
Угол.jpg
(36.92 КБ) 141 скачивание
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

не было такого. можно подумать на вывод D/C, или D/C переключаете рано, не дождавшись окончания передачи по spi.
vem566 писал(а):Команды С+ очень просто переводятся в баском. Знаю оба языка, так что проблем нет.
у меня на асме всё. Так что только по алгоритмам пообщаться могу.
vem566 писал(а):правда по SPI при 64К цветов, медленно.
320*240 только полную заливку глаз замечает, а поля переписываются влёт.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Поле 320*480. Время заливки около 1 сек при 8 цветах и примерно 3 сек при 65К цветов(5+6+5 бит).
Пробовал тайминги ставить. Не помогает. Липовые команды подавал типа инвертировать экран, потом обратно. Срабатывают. Но если после них приходит команда адреса, причем именно команда, без параметров, заполучите черный уголок. Судя по пикселям, он, козел :kill: , пишет 4 байта в какую то область. Напрягает, что если увеличить количество цветов, и передавать не 1, а 3 байта на пиксель все нормально. Пробовал при 8 цветах передавть по 2 или 3 байта. Длина линии не меняется, а артефакт смещается 1/3 длины линии, 2/3 длины или в конце. В зависимости от количества байт. Но линия всегда одинакова и правильная по длине. Уже хочется паяльником в экран потыкать.

Последовательность команд у меня выглядит так:
2С(запись в память)
2A(адрес начало и конец по X)
4 байта адреса по Х
2B(адрес начало и конец по Y)
4 байта адреса по Y
2C(запись в память)
поток байт данных цвета.
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

Первую 2с ramwrite не нужно. Без неё попробуйте.
2а, 2b, 2c

Добавлено after 3 minutes 24 seconds:
Длина линии не будет меняться, хоть сколько угодно данных отсылайте. Просто с начала поля писать начнёт и по кругу. За пределы поля не выходит. Это на тексте хорошо видно.

Добавлено after 1 minute 42 seconds:
Видимо артефакт и смещается, так как линия повторно переписывается. А он в конце записи.
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Попробовал вывести не сплошным потоком всю линию, а по пикселям. Результат тот же. Даже хуже - цвета нет. Только черный кроме последнего пикселя при любой длине.
Курение букваря привело к идее. У режима 8 цветов расположение бит цвета не совсем обычное - XX_RGB_RGB. То есть в байте сведения о цвете двух пикселей. Но реализация SPI в баскоме не умеет отправлять побитно. Минимум - байт. Для заливки всего экрана количество байт потребно как раз в 2 раза меньше. Если в старших 4-7 оставить нули - получается через строчная заливка.
Короче, никаких вариантов для вывода линии или пикселя в режиме 8 цветов не просматривается. :dont_know:
Поставщик валерьянки для Кота
Сообщения: 1922
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Без кода или фрагмент кода трудно даже давать идеи. Может ли проблема аппаратная часть вашего дисплея? Пробовали другой дисплей? Эмулируйте SPI программно. Будет медленно, но ради эксперимента. Попробуйте на другом MK, на другом языке (C, C++), напр. для Arduino уже есть много библиотек управления ILI9488, с тестами, с прямыми линиями, также под углом. Как только получите правильное изображение, метод исключения должен облегчить поиск фрагменту кода, кто вызывает проблему. В противном случае поиск проблемы происходит в большой области и граничит со случайностью.
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

vem566, сколько байт вы отправляете? Попробуйте изменить количество отправляемых байтов чётное на нечётное или наоборот. И посмотрите, будут ли артефакты появляться.

Добавлено after 2 hours 31 minute 17 seconds:
shonty писал(а):чётное на нечётное или наоборот
потому что мне кажется, что вы нечётное количество байтов отсылаете, а:
vem566 писал(а):Даже хуже - цвета нет. Только черный кроме последнего пикселя при любой длине.
и
vem566 писал(а):Время заливки около 1 сек при 8 цветах и примерно 3 сек при 65К цветов(5+6+5 бит)
Не припомню, что бы в каком-л. ТФТ было 8 бит на пиксель.

На всякий случай просмотрел ДШ на ILI9488, в 4.5.1. RGB Interface Selection, только 24, 18 и 16 бит на пиксель. И то они комутируются аппаратно. пользователь не сможет битность поменять.. :dont_know:

Если ошибаюсь, ткните меня носом, где 8 бит на пиксель или 8 бит цветность..

PS: предположительно:
vem566 писал(а):Даже хуже - цвета нет. Только черный кроме последнего пикселя при любой длине.
если отправлять чёрый (0xFF), и считать, что отравляете 8 битную цветность, то при нечётном количестве отправленных данных как раз последний пиксель и не прокрасится чёрным. Так как чёрный цвет для этих дисплеев 0xFFFF

Добавлено after 5 minutes 51 second:
PS2:
shonty писал(а):Так как чёрный цвет для этих дисплеев 0xFFFF
а так да, при нечётном количестве байтов у вас не 0xFFFF, а 0xFF(хз). Это и есть цвет последнего пикселя.
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Про 8 цветов. Раздел 5.2.34 - описание команды 3А. Страница во вложении. В разделе 4.7.1.1 описан SPI в этом режиме. И это рабтает.

В режиме 8 цветов пробовал отправлять и четное и не четное количество байт. Меняется только положение артефакта. 1/3 от длины линии, 2/3 или в конце.
Повторюсь - появляется только в случае, если после прорисовки линии идет команда адреса(2А). Причем если между линией и командой 2А будел произвольное количество любых других команд артефакта нет. Получается, что прямоугольник нарисовать не получится. А при пиксельном выводе получается, что артефакт затирает пиксель. В результате отображается правильно только последний. Сам артефакт занимает 3 пикселя со смещением на 1 пиксель назад и 3 пикселя вверх.

Во всех остальных режимах цвета никаких нареканий нет. Хоть прямые, хоть косые, хоть круглые. Дисплея второго то же нет. Смотрел примеры для ардуины, но там нет режима 8 цветов. Остальное не интересно, т.к. работает и без С. Пробовал вспомнить ассемблер - получилось плохо. Последний раз что то писал на нем лет 20 назад и для 8086.
Вложения
str200.jpg
(239.86 КБ) 121 скачивание
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

vem566 писал(а):В разделе 4.7.1.1 описан SPI в этом режиме. И это рабтает.
Сорри :beer: есть такая буква :)))
Но есть жирное но в 4.7.1. это вроде как для 3-line/9-bit serial bus interface

тогда возможно и у вас артефакт. Потому что пока отсылаете 0xff у вас по сути идут одни 1111111111111...... , и последний байт возможно не полный.
А если тогда отправить 72 байта цвета? Или 144..?, ну что бы кратно и 8 и 9 было..
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

В разделе 4.7.2 все тоже самое для 4 проводной.
Гонять байты смысла нет. Вообще то цель заморочки с 8-ю цветами была ускорить вывод. Нужно будет отображать быстро меняющиеся параметры. И гнать 1 байт на 2 пикселя явно слаще, чем 3 байта на 1 пиксель. Так что голова уже болит, а толку нет. Пусть заказчик покупает дисплей с параллельной шиной. Он товарищ своеобразный. -"Хочу цветной дисплей размером больше 3 дюймов!" Ну и "менеджеры по закупкам" ему и приобрели. Подешевше. Вроде все складно, но прорисовка не лезет ни в какие ворота. Ну и еще один прикол. При включении эта канитель должна показывать логотип фирмы. А он зарегистрирован бело-голубой. Голубого в 8 цветов нет. Синий есть. Он вроде не против. Может дальтоник. Визуально картинка плавно (~1 сек) появляется. А вот дальше задница.

Тут еще вопросы есть по инициализации. В лоб, по простому не запустился. Типа ресет, формат пикселя, режим адресации, побудка. Нарыл у какого немца. На С. Цепочка по длине 16 команд. Тупо скопировал, перевел и он запустился. Где прикол, толком не разбирался. Может в этой цепочке "косяк". По книжке вроде криминальных команд нет. Тем более работает во всех режимах. Могу предоставить эту цепочку. Пожалуй самая хитрая часть.
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

vem566 писал(а):Нужно будет отображать быстро меняющиеся параметры.
16 бит на пиксель, 320*240, поля махом переписываются. Mega328, 16MHz. Самый крупный шрифт 56px высота. Не думаю, что в 480*320 медленнее будет))

[rutube]https://rutube.ru/video/3debbdfe41bdfcb ... c1bf/?r=wd[/rutube]

Добавлено after 51 second:
хз как ссылу на рутуп вставлять :dont_know:
через url:
https://rutube.ru/video/3debbdfe41bdfcb ... c1bf/?r=wd
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Сейчас у меня работает Мега2560 20МГц. Нужно получить с одной платы управления 4 модели и у каждой до 5 разных функционалов. Ну и в разных комбинациях. Так что ресурсов контроллера нужно до хрена.

Судя по видео вполне приемлемо. У экрана же прямой доступ к памяти. Так что без разницы на размер. Нужно будет еще SPI поковырять. Аппаратный работает в 2 раза быстрее чем программный. И прграммный плевать хотел на волевую установку скорости. Похоже и у аппаратного скорость не предельная. До шрифтов еще не добрался. Да и они в проекте так, факультативно. Аварийные сообщения. На основном рабочем экране нужно изобразить подобие двух спидометров. Дизайнеры там развлекаются. Тупые, правда эти самые дизайнеры. У них разницы нет между растровой и векторной графикой. Ну и ведущие спецы вместе с директором их шедевры хают и бракуют.
Пришлось на Delphi писать программу для разбора их картинок на пиксели и определние цвета. Потом в текстовый файл в формате, чтобы сразу как массив загрузить можно. В общем не скучно.

Это Ваше (на видео)?
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

vem566 писал(а):Это Ваше (на видео)?
да, вот стенд лежит
f8d76de2-ffc6-4ca2-863e-22f3e5b40b30.jpg
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Странно. А почему у меня такого стенда нет?
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

vem566 писал(а):Пробовал вспомнить ассемблер - получилось плохо.
его не нужно вспоминать. Вам всего несколько строк и нужно.
В баскоме же можно вставки вставлять асмовские?

У меня всё через ж.., но как то так:
когда с ТФТ работаю, у меня R14, R13, R12, R11 - зарезервированны под цвет.
а R15 - это у меня TEMP, никак у всех :dont_know:
но вы можете на свой вкус определить.

Код: Выделить всё

	.def color_back_L	=	R11		
	.def color_back_H	=	R12		
	.def color_front_L	=	R13		
	.def color_front_H	=	R14		
	.def TEMP			=	R15
потом макросами загоняю через R16 код цвета в регистры (цвет переднего плана и бакгроунд)

дальше:

Код: Выделить всё

	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
- это закраска одного пикселя цветом фона.
и всё это в цикле. Но в цикле есть ещё моменты на ускорение передачи.
Предположительно ваш дисплей на 20мгц должен заливаться цветом фона менее чем за пол секунды. В крайнем случае за 0,7сек.
Друг Кота
Аватара пользователя
Сообщения: 4747
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

За вставки спасибо. Баском съедает ассемблер. Попробую. Что касаемо скорости SPI, то он не желает работать на частоте выше 5 МГц. Минимальный делитель = 4. Вот и получается, что не 0.5-0.7 а 2-3 секнды. Если перейти на 8 цветов, то в 3 раза сокращается объем данных и соответственно в 3 раза время вывода. Примерно это так и есть. Конечно, разогнать бы SPI до 20 МГц.... По даташиту дисплей поддерживает по SPI до 500 МГц. Где их взять только. Пробовать программный SPI, так он медленнее аппаратного.
Ответить

Вернуться в «AVR»