murmur 0 12 декабря, 2016 Опубликовано 12 декабря, 2016 (изменено) · Жалоба Коллеги, выполняю заливку разными цветами на SSD1963 c помощью STM32F4Discovery. Контроллер SSD1963 обновляет дисплей за 12 мсек. Дискавери заливает картинку за 22 мсек. То есть вроде бы 22 мсек меньше чем 12мсек*2 и борьба с фликером возможна. Что я делаю - отлавливаю TE сигнал, после его спада жду 500 мксек и вывожу картинку. Осциллограмму прилагаю - синий график - это импульсы TE, идущие из SSD1963, красные импульсы - по фронту - начало заливки, по спаду - окончание заливки. Код вот, если что while(1) { while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==0) {} while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1) {} delay_us(500); GPIO_SetBits(GPIOD, GPIO_Pin_12); SSD1963_FillScr(GUI_RED); GPIO_ResetBits(GPIOD, GPIO_Pin_12); delay_ms(50); while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==0) {} while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1) {} delay_us(500); GPIO_SetBits(GPIOD, GPIO_Pin_12); SSD1963_FillScr(GUI_GREEN); GPIO_ResetBits(GPIOD, GPIO_Pin_12); delay_ms(50); while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==0) {} while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1) {} delay_us(500); GPIO_SetBits(GPIOD, GPIO_Pin_12); SSD1963_FillScr(GUI_BLUE); GPIO_ResetBits(GPIOD, GPIO_Pin_12); delay_ms(50); } Мерцание есть. Визуально - две косые линии на весь экран. Что делать и кто виноват? Изменено 12 декабря, 2016 пользователем murmur Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 12 декабря, 2016 Опубликовано 12 декабря, 2016 · Жалоба Контроллер SSD1963 обновляет дисплей за 12 мсек. Дискавери заливает картинку за 22 мсек. То есть вроде бы 22 мсек меньше чем 12мсек*2 и борьба с фликером возможна. Что я делаю - отлавливаю TE сигнал, после его спада жду 500 мксек и вывожу картинку. Осциллограмму прилагаю - синий график - это импульсы TE, идущие из SSD1963, красные импульсы - по фронту - начало заливки, по спаду - окончание заливки. А прерывания на время этого теста у Вас запрещены? И почему кстати 12мсек*2, а не просто 12мсек? У Вас кадровая частота какая? Или у SSD1963 черезстрочная развёртка? И какое направление сканирования строк дисплея при формировании картинки и при заполнении контроллером? Они совпадают? Если они идут в разных направлениях, то судя по осциллограмме, как раз и будет происходит два пересечения вывода картинки и процесса заполнения - так что всё так и должно быть. А ещё можно попробовать изменить частоту кадровой развёртки и посмотреть что получится. Да и вообще - у Вас полный вывод картинки (всех цветов) как я понимаю длится 6 кадров развёртки? Тут борись - не борись - всё равно мерцать будет. PS: Вчерась сам ковырялся со своим экранчиком+STM32F429 ;) Правда у меня ILI9341. Мне не удалось включить вывод сигнала TE, где-то что-то недоглядел наверное. Ведь судя по схеме - линия TE распаяна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
murmur 0 12 декабря, 2016 Опубликовано 12 декабря, 2016 · Жалоба Хм... наверное все.таки в направлении заполнения проблема. У меня чужой код и как.то сразу насторожило, что заполняется вертикальными линиями справа налево. Вернусь домой проверю. Не знаю, почему вы решили, что у меня заполнение шесть кадров. По осциллограмме же видно, что два кадра. Частота обновления примернл 80 герц, исходя опять таки из частоты сигнала ТЕ на осциллограмме Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 12 декабря, 2016 Опубликовано 12 декабря, 2016 · Жалоба Хм... наверное все.таки в направлении заполнения проблема. У меня чужой код и как.то сразу насторожило, что заполняется вертикальными линиями справа налево. Вернусь домой проверю. Не знаю, почему вы решили, что у меня заполнение шесть кадров. По осциллограмме же видно, что два кадра. Частота обновления примернл 80 герц, исходя опять таки из частоты сигнала ТЕ на осциллограмме В приведённом Вами коде видно, что Вы 3 раза синхронизируетесь с сигналом TE и каждый раз выводите один из цветов RGB. Как я понял - это и есть вывод всего кадра, видимо каждая цветовая компонента выводится отдельно. Документации на экран я не смотрел, исходников Ваших не видел, и Вы когда написали про 22 мс и привели этот кусок не указали - откуда и до куда 22 мс (где Вы устаналиваете в 1 красный сигнал, а где - в 0?) и где весь кадр? Гадать на кофейной гуще не умею, сорри. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
murmur 0 12 декабря, 2016 Опубликовано 12 декабря, 2016 · Жалоба Гадать на кофейной гуще не умею Вы не гадаете, у вас просто очень странное восприятие действительности. Вы 3 раза синхронизируетесь с сигналом TE и каждый раз выводите один из цветов RGB. Как я понял - это и есть вывод всего кадра, Ну как 3 данных подряд команды FillScr (заполнение экрана) можно принять за 1 кадр? В одном цикле while есть 3 кадра, они разные только для того, чтобы глазом можно было видеть смену кадров. Сейчас буду играться с направлением отрисовки Действительно - не совпадало направление отрисовки и заполнения буфера. Теперь все работает. jcxz, спасибо за толчок в правильном направлении! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться