Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.79/89: Рейтинг темы: голосов - 89, средняя оценка - 4.79
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
1

Вывод на PAL TV и ИК-пульт на STM32

03.06.2016, 22:46. Просмотров 16047. Ответов 38
Метки нет (Все метки)

Поскольку вопросы перешли в плоскость STM32, решил сделать новую тему.
Ссылка на старую тему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2016, 22:46
Ответы с готовыми решениями:

Вывод на PAL TV и ИК-пульт
Мне тут подкинули задачку. Нужен таймер обратного отсчета с выводом на...

Пульт 2.4 ГГц трансформировать в пульт управления к ПК
Хочу купить квадрокоптер сразу а не ждать месяц с китая. Поэтому в моделях...

AVI->PAL?
здравствуйте, глупый вопрос - а можно ли перегнать видео с компа на VHS без...

BT.656 -> PAL?
Привет, народ. Кто знает, можно ли BT.656, полученный с tvp5160, перегнать...

STM32 RTC Вывод на дисплей времени
Здравствуйте, изучаю армовский микроконтроллер на плате Nucleo STM32-L053R8. В...

38
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
04.07.2016, 22:48 21
Интересно, 24 не глючит, а 48 глючит?
Попробую предположить, что на 24М вы не ставили делители на внутренние шины, а на 48 поставили делитель. Так вот, шины могут работать на гораздо бОльшей частоте, смотрите другие процессоры. Поставьте 48М и БЕЗ делителей на шинах, будет дефект или нет?
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
04.07.2016, 23:57 22
Цитата Сообщение от u37
Интересно, 24 не глючит, а 48 глючит?
Попробую предположить, что на 24М вы не ставили делители на внутренние шины, а на 48 поставили делитель. Так вот, шины могут работать на гораздо бОльшей частоте, смотрите другие процессоры. Поставьте 48М и БЕЗ делителей на шинах, будет дефект или нет?
Хм. Я использовал функции из system_stm32f10x.c, подкорректировав значения, записываемые в регистр FLASH->ACR.
Делители на шинах не трогал в обоих случаях.

При 72МГц у меня делители все по максимуму, вроде. Во всяком случае, TYM1 на 72МГц, SPI2 на 36МГц.
Ладно, проверю повнимательней.
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
05.07.2016, 02:06 23
делители там ставятся.
72
Код
    /* Enable Prefetch Buffer */
FLASH->ACR |= FLASH_ACR_PRFTBE;

/* Ftosh 2 woyt state */
FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;

/* HCLK = SYSCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

/* PCLK2 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;

/* PCLK1 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
Теперь сравните это с 24М
24
Код
    /* Enable Prefetch Buffer */
FLASH->ACR |= FLASH_ACR_PRFTBE;

/* Ftosh 0 woyt state */
FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0;

/* HCLK = SYSCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

/* PCLK2 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;

/* PCLK1 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;
и 48М
48
Код
    /* Enable Prefetch Buffer */
FLASH->ACR |= FLASH_ACR_PRFTBE;

/* Ftosh 1 woyt state */
FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;

/* HCLK = SYSCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

/* PCLK2 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;

/* PCLK1 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
Т.е. только 24М не содержит дополнительных потерь на согласование шины периферии.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
05.07.2016, 21:32 24
Да, все верно.
Лучше всего получилось на 36, шрифт тот же остался.

Только теперь всплыла нехватка быстродействия - не успевает записываться 0 в регистр SPI->DR и вылазят дефекты повтора последнего старшего бита.

Надо подумать над глобальной сменой подхода.
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
05.07.2016, 21:47 25
Вообще-то, до 56 еще можно. Т.е. 48М должно работать. (Хотя, "разгон" в серии - это плохо)

"не успевает записываться 0"
Как я вам уже предлагал - формируйте посылку на 1 слово больше и записывайте туда 0.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
05.07.2016, 22:16 26
Да, механизм понятен.
Но только то, что хорошо на avr, на stm32 уже не годится.
Несмотря на то, что скорость больше.
Нужно концепцию пересмотреть.

Может, добавить сжатие изображения. Растеризацию предварительную, опять же.
Еще что-нибудь придумать. Семисегментник на лету формировать. Хотя я и не придумал, как это сделать.
0
Riftistor
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
06.07.2016, 01:18 27
Цитата Сообщение от omtomtubo
Да, механизм понятен.
Но только то, что хорошо на avr, на stm32 уже не годится.
Несмотря на то, что скорость больше.
Нужно концепцию пересмотреть.
У тебя действительно скорость SPI 36MHz? Можешь посчитать сколько это точек на линию? :)
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
06.07.2016, 09:47 28
Цитата Сообщение от Riftistor
У тебя действительно скорость SPI 36MHz? Можешь посчитать сколько это точек на линию? :)
Нет, тактирование SPI 36МГц, скорость вывода - 18 МГц.
0
Riftistor
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
06.07.2016, 10:50 29
Цитата Сообщение от omtomtubo
Нет, тактирование SPI 36МГц, скорость вывода - 18 МГц.
Тебе точно нужно более 800 точек по горизонтали учитывая, что в SPI->DR не успевает записывать?
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
06.07.2016, 12:59 30
Цитата Сообщение от Riftistor
Цитата Сообщение от omtomtubo
Нет, тактирование SPI 36МГц, скорость вывода - 18 МГц.
Тебе точно нужно более 800 точек по горизонтали учитывая, что в SPI->DR не успевает записывать?
При тактовой ядра 72 - все успевает хорошо.
Поскольку делители только на степень двойки - плавно менять не получается. 9 МГц - это мало.

А еще шрифт - по высоте он должен остаться такого же размера.
При уменьшении частоты он становится слишком широкий, а поскольку в программе DotFactory, которой я генерирую шрифт, ширину уменьшить нельзя, придется делать ручками. Или программу писать самому для конвертирования шрифтов.

Пусть уж так остается. Что-нибудь придумаю.
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
06.07.2016, 13:06 31
Ну, для ядра 48М будет 12. )) И вообще, частоту ядра можно менять с шагом 4М:
40 = 10
44 = 11
48 = 12
52 = 13
56 = 14
60 = 15
64 = 16
Вы вполне можете отрезать свою длину буханки. ))
Ремарк.
Бесмысленно повышать скорость вывода выше разумного. Критерий разумности - АЧХ ТВ тракта. Выше 6М никакого сигнала нет и быть не может, там идет цветоразностный.
Не трудно догадаться, что частота 6М соответствует тикам 12М вывода точек. А потому, см. Riftistor. Впрочем, и 6М там нет, только 4.5-5М. Не зря же нормируется 600-700 линий. Бывает и 800, но это только в BW режиме.
(В принципе, ящик может обнаруживать, что цветоразностных нет и расширять спектр до 6.5М, но это _вряд-ли_.)
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
06.07.2016, 13:51 32
Цитата Сообщение от u37
Ну, для ядра 48М будет 12. )) И вообще, частоту ядра можно менять с шагом 4М:
40 = 10
44 = 11
48 = 12
52 = 13
56 = 14
60 = 15
64 = 16
Вы вполне можете отрезать свою длину буханки. ))
Ремарк.
Бесмысленно повышать скорость вывода выше разумного. Критерий разумности - АЧХ ТВ тракта. Выше 6М никакого сигнала нет и быть не может, там идет цветоразностный.
Не трудно догадаться, что частота 6М соответствует тикам 12М вывода точек. А потому, см. Riftistor. Впрочем, и 6М там нет, только 4.5-5М. Не зря же нормируется 600-700 линий. Бывает и 800, но это только в BW режиме.
(В принципе, ящик может обнаруживать, что цветоразностных нет и расширять спектр до 6.5М, но это _вряд-ли_.)
Я же не вывожу вертикальные линии с частотой 18 МГц.
Вывод у меня черно-белый. И повышение частоты преследует только одну цель - сглаживание наклонных линий, уменьшение ступенек. Но даже при 18 МГц SPI - ступеньки все еще хорошо различимы.
Нужно придумать, как выводить несколько градаций серого так же просто, как черно-белый. Тогда частоту можно понизить.

Вот тут опять возвращаемся к смене концепции, сжатию изображения (по типу GIF), выводу нескольких бит параллельно, ЦАПу, и т.п.
С учетом вышеперечисленных сложностей с latency, недостаточным для framebuffer объемом ОЗУ и другими ограничениями.
0
vt340
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
06.07.2016, 14:33 33
Цитата Сообщение от omtomtubo
Но даже при 18 МГц SPI - ступеньки все еще хорошо различимы.
А может в консерватории подправить стилистику поменять? )


<Изображение удалено>
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
06.07.2016, 14:58 34
Цитата Сообщение от omtomtubo
Я же не вывожу вертикальные линии с частотой 18 МГц.
Именно это вы и делаете, крайние точки размазываются в пыль. Полоса тракта 5.5МHz.
Цитата Сообщение от omtomtubo
Нужно придумать, как выводить несколько градаций серого так же просто, как черно-белый. Тогда частоту можно понизить.

Вот тут опять возвращаемся к смене концепции, сжатию изображения (по типу GIF), выводу нескольких бит параллельно, ЦАПу, и т.п.
С учетом вышеперечисленных сложностей с latency, недостаточным для framebuffer объемом ОЗУ и другими ограничениями.
Угу ... или просто применить TXAA.
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
06.07.2016, 15:21 35
Впрочем, вводить поддержку полутонов только для АА - явно избыточно. У вас всего-то 3-4 символа в строке.
Здесь проще сделать сдвиг выводимых символов в пределах 1 знакоместа пиксела. Думаю, 8 градаций будет достаточно.
Реализация - после битового потока с SPI поставить регулируемую задержку, управляемую кодом с MCU (GPIO).
Регулируемую задержку можно сделать, например, на 7 повторителях (74LV), включенных последовательно, а "время задержки" будет выбираться номером повторителя (8-1 мультиплексор).
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
06.07.2016, 21:07 36
Цитата Сообщение от u37
Впрочем, вводить поддержку полутонов только для АА - явно избыточно. У вас всего-то 3-4 символа в строке.
Здесь проще сделать сдвиг выводимых символов в пределах 1 знакоместа пиксела. Думаю, 8 градаций будет достаточно.
Реализация - после битового потока с SPI поставить регулируемую задержку, управляемую кодом с MCU (GPIO).
Регулируемую задержку можно сделать, например, на 7 повторителях (74LV), включенных последовательно, а "время задержки" будет выбираться номером повторителя (8-1 мультиплексор).
Нет, внешних микросхем не будет. Максимум несколько резисторов и конденсаторов.
Просто, как обычно, нужно образ мыслей поменять.

Off: когда плис начинаешь изучать и писать на vhdl или verilog, шаблоны рвутся. Когда троичную логику изучаешь, рвутся еще сильнее. Так и здесь, нужно слегка абстрагироваться от привычного. Думаю, все получится со временем.
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
07.07.2016, 02:09 37
Если "просто поменять", то можно сделать двухуровневую яркость и удвоить "разрешение" по строке ... но этого же недостаточно.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
07.07.2016, 09:37 38
Цитата Сообщение от u37
Если "просто поменять", то можно сделать двухуровневую яркость и удвоить "разрешение" по строке ... но этого же недостаточно.
Яркость и так двухуровневая ))), следующая будет четырехуровневая. Разрешение увеличивать не придется, можно даже уменьшить, обсуждали же выше.
Чтобы это реализовать, нужно много дополнительных действий сделать:
Написать программу для сжатия шрифтов и конвертирования в .h, продумать алгоритм распаковки и растеризации, выдачу в GPIO и т.п.
Буду думать потихоньку.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
11.08.2017, 23:45 39
У меня тут продолжение наметилось.
План такой. Тот же PAL.
Вывод 16 градаций серого через 4 бита GPIO с помощью DMA. Синхроимпульсы без изменений.
Шрифт готовить программой http://www.riuson.com/lcd-image-convirter со сглаживанием.
Перед выводом каждую строку формировать в памяти Ram. Опять же с помощью DMA.
Шрифт использовать со сжатием.

Схему аппаратной части нарисовал. Пять резисторов и один диод. Номиналы подобраны для получения правильных уровней яркости на выходе. Примерно правильных.

Есть проблема в подготовке шрифта. Программа при включении опции сжатия не разбивает на строки. И сжатие используется стандартное RLE, то есть одиночные пиксели кодируются отрицательным значением количества.
Поэтому готовлю шрифты пока без сжатия и нужно написать скрипт для пережатия под мои хотелки.
Как лучше это сделать? Я писал для Wymdows только на Delphi.
Может кто-нибудь поможет сделать проще? Какой-нибудь питон или джаваскрипт?

Остальные вопросы будут возникать по мере написания.
На начальном этапе буду использовать Pinboard.
0
11.08.2017, 23:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2017, 23:45

Подключение Pay-Pal
Народ, обьясните популярно(или дайте ссылочку) как прикрутить к своесу сайту...

Разбираю формат PAL
Я являюсь счастливым обладателем платы STM32F4Dyscocery, на которой пытаюсь с...

STM32 F103C8 не работает вывод на пин MCO (Решено)
Добрый день. Столкнулся с проблемой. Хочу посмотреть частоту на пине МСО...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru