Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вт авг 07, 2018 22:58:02

WiseLord

ILI9320_DHI_Port->BSRR = 0x00FF0000 | (data >> 8)

как-то стремно и неправильно выглядит.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Ср авг 08, 2018 06:43:12

Почему? Левая часть просто сбросит те биты 7..0, которые не устанавливает правая.

С маской там играться особого смысла нет ввиду приоритета SET перед RESET

Изображение

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Ср авг 08, 2018 09:33:29

P.P.S. Раздобыл ILI9341, SPI. В ближайшее время тоже будет добавлен.


ILI9341, SPI будет сидеть на пинах PB3:PB5 (SPI1) ? NSS Hardware будет заюзан?(режиме slave он превращается в CS-Shyp Select)
инициализацию SPI через куб можно включить, и DMA сразу настроить. в кубе тяжелее напутать с конвейерами, тактированием, прерываниями, сразу видно, что свободно, а что уже занято.
SPI2 может еще пригодиться под внешнюю RAM/ROM или другую периферию

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Ср авг 08, 2018 10:53:17

P.P.S. Раздобыл ILI9341, SPI. В ближайшее время тоже будет добавлен.


ILI9341, SPI будет сидеть на пинах PB3:PB5 (SPI1) ? NSS Hardware будет заюзан?(режиме slave он превращается в CS-Shyp Select)
инициализацию SPI через куб можно включить, и DMA сразу настроить. в кубе тяжелее напутать с конвейерами, тактированием, прерываниями, сразу видно, что свободно, а что уже занято.
SPI2 может еще пригодиться под внешнюю RAM/ROM или другую периферию


Есть такое выражение "не говори, что мне делать и я не скажу куда тебе идти". Без обид. Автор сам разберется как ему использовать ресурсы контролера. Лучше открой исходники и увидишь разницу между заготовкой куба и проектом.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Ср авг 08, 2018 11:21:00

Есть такое выражение "не говори, что мне делать и я не скажу куда тебе идти". Без обид. Автор сам разберется как ему использовать ресурсы контролера. Лучше открой исходники и увидишь разницу между заготовкой куба и проектом.


я и не претендую! :)) просто генерю идеи и варианты, а каждый сам решает, как ему поступить в решении задач.

оно и понятно, или с нуля наваять, или портировать наработанное и отлаженое в смежном проекте.
но AVR8 и ARM-CortexM3 уж очень разные платформы.

иногда наступает момент, когда проще построить с нуля рядом, чем затянуть с проекта на чипе 20 летней выжержки. это как писать на DOS, и внезапно пересесть на Windows 10.

в моей конторе так и поступили, сразу внедрив STemWin и FreeRTOS.
на попытки портирования ушло 3 мес в никуда, на писание с нуля , но готовыми либами 17 дней до состояния пререлиза)))

PS: портировала одна команда, а ваял с нуля по ТЗ студент с практикой реализации проектов на кортексе и с графикой под ембеддед (испытательное задание было)

я в этом редкий динозавр, в AVR коде хоть что-то понимал, на кортексе дым с головы повалил на втором часе. не представляю, как сие можно писать с нуля без заготовки и готовых решений по железу и фейсам.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Ср авг 08, 2018 11:42:26

Я недавно выкладывал планируемую разводку. Да, под SPI дисплей аппаратный SS пин тоже запланирован. DMA/SPI пока не знаю, нужен ли будет - всё равно для всего дисплея его недостаточно - столько ОЗУ нет.

CubeMX я использовал в самом начале, просто больше чтобы посмотреть на то, как что инициализируется. Мне не очень понравилось - много мусора в виде комментариев в коде. Плюс тот же RTC инициализировался некорректно.

Многие моменты переделываются по-другому. Так что это сложно назвать портированием. Скорее, новое пишется рядом, немного с другим подходом, но с оглядкой на старый код для ATmega.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Ср авг 08, 2018 12:06:52

спасибо за вашу работу!!
заодно и мы узнаём много нового.
с кубом да, зашлаковано (много коментов для новичков), сыровато, и не вегда рабочее, но индусы стараются. Новичкам типа меня, для быстрого старта, самое то.

то что вы пишете, пытаясь втиснуться в размеры флеша и озу, для меня уже за гранью.

а DMA на Ili9341 даже в ардуине рулит (либы адаптированы под ARM DMA#include "Adafruit_ILI9341_STM.h" #include "Adafruit_GFX_AS.h"). вывод ускорился на порядок. жпег картинку выплевывало оч быстро, считывая с SD флешки, и параллельно энкодя в битовое поле,
без DMA это выглядело как загрузка заставки с кассеты на спектруме)))
в общем попробовать стоит.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Ср авг 08, 2018 23:23:28

Добавил функциональность считывания состояния кнопок в случае дисплея ILI9320.

Напомню, кнопки и энкодер подключаются одним контактом к земле, вторым, через резистор порядка 1 кОм, к линиям 0..7 порта A. То есть, параллельно шине данных дисплея.

Теперь можно начинать уже заниматься рисованием экранов (часы/спектр/яркость) на 320x240 "холсте" - возможность переключения между ними уже есть. Только вот надо бы немного упорядочить разного рода функции из gdfb - общие, не завязанные на разрешение, оставить в общем файле, а завязанные на разрешение или тип дисплея - уже разбросать по gc320x240 и gm128x64.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Чт авг 09, 2018 22:37:37

а возможность коррекции хода часов будет?

(можно как у Вас в matrix clock)

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Пт авг 10, 2018 05:24:06

будет

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 11, 2018 14:36:43

Доделал драйвер ILI9320.

Путём разных ухищрений работу его удалось ускорить в разы. Изначально выходило около 7 очисток экрана (кадров) в секунду, сейчас более 25.
Шрифты рисовались по точкам, сейчас - записью данных символа в заранее предоставленное прямоугольное окно.

Также подкрутил спектр. Сейчас столбики падают с физикой "гравитации". То есть, подброшенный вверх столбик сначала падает медленно, а затем всё сильнее ускоряясь. Выглядит весьма симпатично, по сравнению с константной скоростью падения столбиков в оригинальном проекте.

Сейчас структура проекта позволяет достаточно просто подключать другие дисплеи, не дублируя большое количество кода. Первый на очереди ILI9341.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 11, 2018 19:21:36

Я уже пилю S6D0139.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 12, 2018 09:56:03

Реализовал драйвер для ILI9341. Сначала SPI был программный (жутко медленно), потом запустил в аппаратном режиме. Но скорость всё равно пока не устраивает (где-то получается 10 заливок экрана в секунду).

По осциллографу видно, что ещё можно кое-где ускориться, так как есть паузы между передачами данных, которые технически вполне можно убрать. Но вот наткнулся на очень странное поведение SPI.

Есть такой вот кусочек кода, где я зациклил передачу одного и того же байта в целях тестирования:
Код:
while(1) {
    ili9341WriteData_(0b00101101);
    _delay_us(1);
}
И сама функция:
Код:
static void ili9341WriteData_(uint8_t data)
{
    CLR(ILI9341_CS);
    LL_SPI_TransmitData8(SPI1, data);
    while (LL_SPI_IsActiveFlag_BSY(SPI1));
    SET(ILI9341_CS);
}

Вроде бы всё правильно: опускаем CS, передаём байт, дожидаемся окончания передачи, поднимаем CS.
Но почему-то получается очень странный результат (снято осциллографом):

Изображение

Почему-то МК не дожидается флага, а поднимает CS раньше окончания передачи. В итоге, естественно, данные не передаются нормально.

Если есть какие-то идеи, буду рад выслушать.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 12, 2018 12:35:24

WiseLord

Поменяйте
Спойлерili9320WriteReg(0x0020, ILI9320_WIDTH - y - 1);
ili9320WriteReg(0x0021, x);

ili9320WriteReg(0x0050, ILI9320_WIDTH - y - h);
ili9320WriteReg(0x0051, ILI9320_WIDTH - y - 1);
ili9320WriteReg(0x0052, x);
ili9320WriteReg(0x0053, x + w - 1);

на
Спойлерili9320WriteReg(0x0050, ILI9320_WIDTH - y - h);
ili9320WriteReg(0x0051, ILI9320_WIDTH - y - 1);
ili9320WriteReg(0x0052, x);
ili9320WriteReg(0x0053, x + w - 1);

ili9320WriteReg(0x0020, ILI9320_WIDTH - y - 1);
ili9320WriteReg(0x0021, x);


в ili9320 разницы нет, а в S6D0139 есть. Могут некоторые дисплеи с таким порядком не работать.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 12, 2018 12:55:56

ОК. Сначала задаём окно, а потом позиционируемся в нём в нужную точку, а не наоборот.

Смог заставить работать ILI9431 с аппаратным SPI более полноценно и быстро. 500 заливок экрана за 35 секунд - это где-то 14.3 кадра в секунду.

Наверное, быстрее уже нельзя. Теоретически на частоте SPI 18МГц (больше нельзя) чтобы залить экран 320x240 с 16 битами на пиксел получается 18000000 / 320 / 240 / 16 = 14.6 кадров в секунду.

Если поднять частоту SPI вдвое (поставить делитель 2 вместо 4), на экране уже мусор появляется.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 12, 2018 13:13:42

получается по 8бит шине быстрее?

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 12, 2018 13:34:17

Естественно. по 8 бит шине весь байт отправляется за один приём: выставили порт в нужное число, щёлкнули строб, и готово.

По SPI же биты передаются последовательно, да ещё и частота SPI ограничена 18МГц.

В принципе, 14 Гц это уже нормально. Учитывая, что постоянно экран обновлять не надо, и даже в режиме спектра обновлять надо только 2/3 экрана (2 пиксела ширина столбика, 1 пиксел между столбиками - его рисовать не надо), то вполне нормально выходит.

На ATmega328p у меня максимум выходило 5.5 кадров в секунду (на шине 8МГц). Тоже близко к теоретическому максимуму на этой частоте, поэтому там приходилось усложнять код для частичной отрисовки изображения. В той статье можно на видео посмотреть.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 12, 2018 21:03:54

WiseLord
У меня в S6D0139 в последней строке по вертикали не закрашивает примерно 90 точек при стартовой очистке

Добавлено after 1 hour 4 minutes 40 seconds:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
пауз не хватало

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 12, 2018 21:15:50

Каких пауз?

Просто хотел предолжить попробовать посылать не 320x240 точек, а больше, чтобы увидеть, продолжает ли закрашиваться заданная область. Если да, значит какие-то передачи пропущены, если нет - какая-то проблема в формировании окна.

Кстати, что за контроллер? Что-то похожее на ILI9320? Сильно похожее?

У меня просто валяется пара дисплеев (без несущей платы, просто со шлейфами) - купил как-то задёшево на Алиэкспресс. Так там некий S6D0129 контроллер. Пока ещё с ними играться не пробовал - шлейф всё-таки не самое удобное дело.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 12, 2018 21:27:54

Выставил в инициализации задержки в нужных местах и всё норм. S6D0129 и S6D0139 одинаковые вроде.
Последний раз редактировалось mixa232323 Вс авг 12, 2018 21:40:12, всего редактировалось 2 раз(а).
Ответить