С stm32f103 на телевизор (полный TV сигнал)

igorborby_76
Offline
Зарегистрирован: 07.01.2022

время отклика 1 мкс, а это не многовато ли
и верхняя частота рабочая 3 Мгц, согласно мануала. ответ сам собой.
даже у кт315 и 361 верхняя 250Мгц, только у одной вроде Ж и то 150Мгц
на какой работает формирователь импульсов OSC ногодрыг, - больше 3 Мгц.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Logik пишет:

Выбираем правильно кристалл под задачу.

Угу. Motorola MC6845.

igorborby_76
Offline
Зарегистрирован: 07.01.2022

andriano пишет:

Logik пишет:

Выбираем правильно кристалл под задачу.

Угу. Motorola MC6845.

ценник кристала 12-13 вечно зеленых, плюс логика, и пзу, которую над прошить
и это Вы называете проще

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Я не утверждал, что это проще, я лишь интересовался, то ли это самое, что Лоджик подразумевает "правильно кристалл под задачу".

igorborby_76
Offline
Зарегистрирован: 07.01.2022

stm32f103c устраивает на ура, помните Радио-86РК с текстовым режимом и "графичесской картой" аналог мотороловской.
что имеем мы:
-работает шустро;
-разрешение нормалек и стабильность изображения тоже;
-есть кодировки и несколько шрифтов;
-есть графика;
-230400 скорость UART на ура;
что можно доделать:
- прикрутить eeprom небольшую и по опрелененной команде можно
прикрутить 'подкачать' псевдографику любую ну разумеется шрифты;
- прикрутив до нее atmegu16(32) (с клавой ps/2, опрос напруги, часы RTC) , получается полноценный терминал, а как формирует изображение
атмега не проблема, и связать её можно с внешним миром хоть i2c (как в журнале радио за 21 год) , хоть spi, softvare uart или 8 парралель, как
в компе шину организовать

если берем корпуса smd, то это все с разъемами уместится в спичечный коробочек,
и цена с обвесом баксов 10

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

igorborby_76 пишет:
- прикрутить eeprom небольшую и по опрелененной команде можно прикрутить 'подкачать' псевдографику любую ну разумеется шрифты;

Это не выйдет - "подкачивать" что-либо некуда - вся память занята под видеобуфер.

Цитата:
- прикрутив до нее atmegu16(32) (с клавой ps/2, опрос напруги, часы RTC) , получается полноценный терминал...10
А здесь непонятно, зачем вообще нужна Атмега. Даже RTC в Блупилле встроенные.

igorborby_76
Offline
Зарегистрирован: 07.01.2022

не добавлять массивы, а использовать имеющиеся под шрифты, обозвав их all, и менять как угодно,
а хватит ли ресусов проца по времени на встроенный RTC

я про похожее у других людей:
- https://www.serasidis.gr/circuits/TV_terminal/Small_TV_terminal.htm (пробовал, работает на ура, кварц 20, но мало букавак)
- https://youtu.be/jR-SqXLgBNo (не пошли мои кристаллы, кварц 24)

b707
Offline
Зарегистрирован: 26.05.2017

igorborby_76 пишет:
а хватит ли ресусов проца по времени на встроенный RTC

встроенный RTC у стм представляет собой обычный счетчик, который тикает от отдельного таймера, так что этот RTC ресурсов контроллера не тратит вовсе и уж точно меньше, чем внешний

ЕЕПРОМ внешнюю тоже не обязательно прикоучивать, флеш СТМ можно использовать как ЕЕПРОМ

igorborby_76
Offline
Зарегистрирован: 07.01.2022

тем более

Logik
Offline
Зарегистрирован: 05.08.2014

andriano пишет:

Я не утверждал, что это проще, я лишь интересовался, то ли это самое, что Лоджик подразумевает "правильно кристалл под задачу".

Не. Не то.

В твоей задаче - 

andriano пишет:

Ну, например, есть у меня Orange Zero. Непроверенный. Потому как без видеоконтроллера, но с TTL UART. Так что можно было бы использовать подобную конструкцию в качестве видеотерминала.

Скорей провода хватило бы. Зеро имеет видеовыход на плате не хуже чем то что ты сделал. Нафига горбатишься два года - непонятно. https://pcminipro.ru/os/kak-vklyuchit-analogovyj-videovyhod-rca-v-orangepi/ - как настроить.

вот тот TVOUT и распаяй. Я когда то коди именно на зеро лепил, к ТВ подключали. Забавно получилось.

Но уж если оранж и видеовыход - то сейчас HDMI необходим. Выкинь зеро и возьми на шаг выше, хотяб такое https://aliexpress.ru/item/1005001689076700.html?sku_id=12000017165686654&spm=a2g2w.productlist.0.0.6aa47a875lG5bZ И забудь о нехватке ОЗУ, мегагерц и всего сразу...

Но если именно с СТМ видяху хочется - так бери ж шото поприличней чтоб не плакатся через абзац что ресурсов нету. Например весьма бюджетно https://aliexpress.ru/item/4001049840288.html?item_id=4001049840288&sku_id=12000023739161603&spm=a2g2w.productlist.0.0.720d3647JOqoCE

заметь, по ссылке 2 контроллера, у того что покруче 100МГц. А между прочим 100/16=6,25МГц ;)

b707
Offline
Зарегистрирован: 26.05.2017

Logik пишет:

заметь, по ссылке 2 контроллера, у того что покруче 100МГц. А между прочим 100/16=6,25МГц ;)

а причем тут 16?

Logik
Offline
Зарегистрирован: 05.08.2014

16 почти не причем, разве как степень двойки , делить удобно, а про 6,25МГц см. #8

igorborby_76
Offline
Зарегистрирован: 07.01.2022

это и темы, возьми готовое и подключи (где мого то то то...)
есть у меня опельсинка с Н5 алвинер, она удачна для других целей, это уже немного не то. Понятно, что в ней много усяго

igorborby_76
Offline
Зарегистрирован: 07.01.2022

форм фактор уже немного не то
к слову 2 и 3 ссылки не фупычат.
тогда над запускать spi и по нему скидывать инфу, скорость ваааауууу. и потребление уухх
осталось за малым:
взять оранжа,
прокачать линух,
прокачать настройки GPIO,
и чутка написать прогу, которая по spi принимает в буфер, их сделать два, и выводит на 4к видео ;-)
я ни чего ни забыл
правда инет, вайфай и т д в холостую
Стоит совсем другая задача, взять мизер и выжать из него максимум

Logik
Offline
Зарегистрирован: 05.08.2014

ссылки фупычат, проверил. На форуме такое встречается, увы.

//я ни чего ни забыл

Не. Ты ниче не понял. какие два буфера, что принимать по spi... Но ты тут чел, я вижу новый (или старый под новым ником - позже разберем))),  простительно.

На словах все крутые линуксоиды с 1913года, а как конфигу поправить - так это задача "прокачать линух,прокачать настройки GPIO" )))

Logik
Offline
Зарегистрирован: 05.08.2014

igorborby_76 пишет:
это и темы, возьми готовое и подключи (где мого то то то...) есть у меня опельсинка с Н5 алвинер, она удачна для других целей, это уже немного не то. Понятно, что в ней много усяго

А у меня есть мультиварка мулинех, тоже удачна для других целей.. Флудим дальше?

Я написал как девайс ТС к ТВ подключить и что делать если "чешется" именно СТМ. Нипонятно?

igorborby_76
Offline
Зарегистрирован: 07.01.2022

вопрос вот в чем, человек сделал именно на stm32f103c8t6 , выложил с исходниками, с предложением подпилить, допилить а не переделать на другом

b707
Offline
Зарегистрирован: 26.05.2017

igorborby_76 пишет:
вопрос вот в чем, человек сделал именно на stm32f103c8t6 , выложил с исходниками, с предложением подпилить, допилить а не переделать на другом

ну так подпили :) я как-то не вижу, чтоб ты что пилил, бухтишь только, как и мы

igorborby_76
Offline
Зарегистрирован: 07.01.2022

.

igorborby_76
Offline
Зарегистрирован: 07.01.2022

andriano

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

igorborby_76, что Вы подразумеваете под "алгоритмом формирования видео"? Там, вроде, все более или менее по ГОСТу (ну, кроме небольшой погрешности в задании частоты, о чем я писал в этой теме).

igorborby_76
Offline
Зарегистрирован: 07.01.2022

я не про гост, интерресует момент когда формируется вывод на экран каждого пикселя и по uart приходят данные для записи их в массив, из которого читаются для вывода, приостанавливается ли их запись в массив. вывод ведь построчный, а запись в массив сразу на всю высоту всего символа!?
и не из за этого ли выскакивают артефакты. на счет pa1 и pa5 посмотреть не могу, нужен осциллограф или логический анализатор, паказометр чайны не прокатит, чтоб увидеть формы сигналов. Попробую поставить два транзистора, чтоб меандр сформировали и посмотрю чего получиться. Бывает ситуатция, что на определенных частотах на выходе не меандр а ломаная синусоида, из за неё могут быть проблемы по фронту и спаду, маловероятно но может

форма реального сигнала выглядит вот так:
https://yandex.by/images/touch/search?p=5&source=tabbar&text=%D1%84%D0%B...

что приводит к таким картинкам:
https://yandex.by/images/touch/search?p=6&source=tabbar&text=%D1%84%D0%B...

но скорее всего, при работе и настройке таймеров при формировании 0 и 1, где то вместо одного, проскакивает другое, вот для чего я хочу посмотреть алгоритм

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

igorborby_76, я сейчас навскидку не скажу о приоритете прерываний, но мне кажется, что приоритет часов и USB выше, чем у прерываний таймеров, а у последовательного порта, напротив, меньше.

Напомню, что прием символов производится в основном цикле (т.е. с минимальным приоритетом), а формирование ПТС - в прерываниях, которые задает таймер 4.

Если это так, то прием данных по порту не может приводить к помехам на изображении. В самом неблагоприятном случае один символ будет выведен в два полукадра, т.е. с задержкой 20 мс, что на взгляд совершенно незаметно, а если бы и было заметно, все равно не портило бы картинку. Даже если прерывание таймера придется на вертикальный скроллинг, помеха будет малозаметной и "некритичной" т.е. не вызывающей дискомфорта при восприятии.

Неприятные помехи (т.е. сбои в отображении строк растра, сопровождающиеся их сдвижкой на экране вправо и появлением засвеченных точек там, где их быть не должно), вероятнее всего связаны с тем, что прерывания таймера прерываются прерываниями более высокого приоритета, т.е. часами и USB. USB мы отключаем, после чего количество помех существенно снижается, т.к. остаются только прерывания от таймера.

Останавливать таймер - как-то, на мой взгляд, слишком радикальное решение. Мне кажется, помех можно избежать, если строка растра будет формироваться не программно - в прерывании от таймера 4, а аппаратно - непосредственно сигналами от таймера 4 и с выхода SPI, которые будут смешиваться на микросхемах средней степени интеграции. Ну и тактирование SPI тоже будет не постоянно от таймера 2, а только в отрезок времени, соответствующий видимой части строки.

 

PS. Что Вы хотели сказать двумя ссылками на "простыню" Яндекса, не понял. От слова "совсем".

igorborby_76
Offline
Зарегистрирован: 07.01.2022

сижу читаю листинг и мануал контроллера про прерывания, маскирования прерываний
1. Приостановка низкоприоритетного прерывания
В этой ситуации, обработка низкоприоритетного прерывания прекращается. Следующие 12 циклов выполняется сохранение в стек нового набора данных и запускается обработка высокоприоритетного прерывания. После его обработки, содержимое стека автоматически извлекается и возобновляется обработка низкоприоритетного прерывания.
Больших отличий от прерывания основной программы не наблюдается.

2. Непрерывная обработка прерываний
Эта ситуация может возникнуть в двух случаях: если два прерывания имеют одинаковый приоритет и возникают одновременно, если низкоприоритетное прерывание возникает во время обработки высокоприоритетного.
В этом случае, промежуточные операции над стеком не производятся. Происходит только загрузка адреса обработчика низкоприоритетного прерывания и переход к его выполнению. Отказ от операций над стеком экономит 6 тактов. Переход к следующему прерыванию происходит не за 12 тактов, а всего за 6.

igorborby_76
Offline
Зарегистрирован: 07.01.2022

до этого в microe сидел под avr. недавно пару вещей сделал под avr в арду, так как просто и быстро, время имело значение. Под stm под арду сделал типо осцил (паказометр) для звукового сигнала, валкодер на прерываниях, spi аппаратно на макс для ili9341, шустро, то шо доктор прописал. По этому по шапке не бить, с stm опыт небольшенький
как настраивать NVIC а ардуине, никогда ни делал.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Погружение в "кроличью нору"! Как Андриано еще терпит - не знаю? ;))

В STM32 приоритет прерываний настраивается. Поскольку вывод в DSUB меня не очень занимает - я сам не стану дополнять код ув. Андриано.

Нужно формированию ПТС дать высший приоритет над всеми остальным. Таймер? - значит таймеру. Тому, который сигнал формирует, а часы - пониже, USB - еще ниже и будет ЩЩЩастье!

шесть (вроде как) строчек кода добавить. ;)) (геты и сеты) можно только три сета.

Ссылки не даю, все есть в сети. Уж по СТМ32 в сети есть документация на всех языках мира, от китайского до суахили! ;)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Я, честно говоря, не понял, к чему эти заметки о прерываниях.

В том скетче, что опубликован в этой теме, формирование строки ПТС происходит так:

1. В строго определенный момент (после импульса гашения) происходит аппаратное прерывание (таймера 4).

2. После некоторой задержки, связанной с входом в прерывание (в дэйташите написано 12 тактов, но на самом деле гораздо больше - нужно еще выбрать, какую функцию из сидящих на одном прерывании вызывать) программируем SPI/DMA.

3. Выходим из прерывания.

Вот если на шагах 1-2 вклинивается более высокоприоритетное прерывание, строка отображается с задержкой (т.е. смещается по экрану вправо), что и приводит к видимым помехам.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

igorborby_76
Offline
Зарегистрирован: 07.01.2022

Table 63. Vector table for other STM32F10xxx
devPos Priority Type of priority Acronym Description Address
приоритет изменить нельзя:
- - - - Reserved 0x0000_0000
- -3 fixed Reset Reset 0x0000_0004
- -2 fixed NMI Non maskable interrupt. The RCC
Clock Security System (CSS) is
linked to the NMI vector. 0x0000_0008
- -1 fixed HardFault All class of fault 0x0000_000C
- 0 settable MemManage Memory management 0x0000_0010
- 1 settable BusFault Prefetch fault, memory access fault 0x0000_0014
- 2 settable UsageFault Undefined instruction or illegal state 0x0000_0018
- - - - Reserved 0x0000_001C- 0x0000_002B
- 3 settable SVCall System service call via SWI instruction 0x0000_002C
- 4 settable Debug Monitor Debug Monitor 0x0000_0030
- - - - Reserved 0x0000_0034
-5settablePendSVPendable request for system service0x0000_0038
-6settableSysTickSystem tick timer0x0000_003C

приоритет изменить мона Те самые, которые вызывают сбои:
0 7 settable WWDG Window watchdog interrupt 0x0000_0040
1 8 settable PVD PVD through EXTI Line detection interrupt 0x0000_0044
2 9 settable TAMPER Tamper interrupt 0x0000_0048
3 10 settable RTC RTC global interrupt 0x0000_004C
4 11 settable FLASH Flash global interrupt 0x0000_0050
5 12 settable RCC RCC global interrupt 0x0000_0054
6 13 settable EXTI0 EXTI Line0 interrupt 0x0000_0058
7 14 settable EXTI1 EXTI Line1 interrupt 0x0000_005C
8 15 settable EXTI2 EXTI Line2 interrupt 0x0000_0060
9 16 settable EXTI3 EXTI Line3 interrupt 0x0000_0064
10 17 settable EXTI4 EXTI Line4 interrupt 0x0000_0068
11 18 settable DMA1_Channel1 DMA1 Channel1 global interrupt 0x0000_006C
12 19 settable DMA1_Channel2 DMA1 Channel2 global interrupt 0x0000_0070
13 20 settable DMA1_Channel3 DMA1 Channel3 global interrupt 0x0000_0074
14 21 settable DMA1_Channel4 DMA1 Channel4 global interrupt 0x0000_0078
15 22 settable DMA1_Channel5 DMA1 Channel5 global interrupt 0x0000_007C
16 23 settable DMA1_Channel6 DMA1 Channel6 global interrupt 0x0000_0080
17 24 settable DMA1_Channel7 DMA1 Channel7 global interrupt 0x0000_0084
18 25 settable ADC1_2 ADC1 and ADC2 global interrupt 0x0000_0088
19 26 settable USB_HP_CAN_ TX USB High Priority or CAN TX interrupts 0x0000_008C
20 27 settable USB_LP_CAN_ RX0 USB Low Priority or CAN RX0 interrupts 0x0000_0090
21 28 settable CAN_RX1 CAN RX1 interrupt 0x0000_0094
22 29 settable CAN_SCE CAN SCE interrupt 0x0000_0098
23 30 settable EXTI9_5 EXTI Line[9:5] interrupts 0x0000_009C

с 31 по 37 наши таймеры:
24 31 settable TIM1_BRK TIM1 Break interrupt 0x0000_00A0
25 32 settable TIM1_UP TIM1 Update interrupt 0x0000_00A4
26 33 settable TIM1_TRG_COM TIM1 Trigger and Commutation interrupts 0x0000_00A8
27 34 settable TIM1_CCTIM1 Capture Compare interrupt 0x0000_00AC
28 35 settable TIM2 TIM2 global interrupt 0x0000_00B0
29 36 settable TIM3 TIM3 global interrupt 0x0000_00B4
30 37 settable TIM4 TIM4 global interrupt 0x0000_00B8

b707
Offline
Зарегистрирован: 26.05.2017

igorborby_76 - к чему это все7 продолжаете тихо сам с собою?

igorborby_76
Offline
Зарегистрирован: 07.01.2022

как в арду прописать приоритеты

b707
Offline
Зарегистрирован: 26.05.2017

Думаю дело не в приоритете, просто вход в прерывание занимает приличное время и тактирование сбивается.( по моему опыту вход - это циклов 60-80, а не 12, как пишете вы).
Максимально избавляйтесь от прерываний, старайтесь формировать импульсы на пинах таймерами и через дма

Green
Offline
Зарегистрирован: 01.10.2015

Мне всегда нравились такие люди. Ни слова... Что он имел ввиду? Так вы ж тут умные - вот и догадывайтесь! Ну ППЦ!
Это всё выше меня.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

igorborby_76 пишет:
как в арду прописать приоритеты

1. Вас ист дас "арда" и как она связана с STM32?;))

2. А для STM - ты НЕ ПОВЕРИШЬ!!! Искать в Яндексе по фразе: "stm32 set interrupt priority". Прикинь, да?!

igorborby_76
Offline
Зарегистрирован: 07.01.2022

ардуина, искал, простите не тупой, не нашел
я не прошу расписовать, намекните где есть? может сами чего писали, малэнкi фрагментик сюдысцi скiнуць

b707
Offline
Зарегистрирован: 26.05.2017

igorborby_76 пишет:
ардуина, искал, простите не тупой, не нашел

в ардуине неn приоритетов прерываний, искать без толку.

Ищи для СТМ32, причем не в среде ардуины, а в СТМ-кубе например. Или в HAL

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016
igorborby_76
Offline
Зарегистрирован: 07.01.2022

спасибо, что в арду нельзя :-), в остальных я видел

b707
Offline
Зарегистрирован: 26.05.2017

igorborby_76 пишет:
спасибо, что в арду нельзя :-), в остальных я видел

я не сказал что "нельзя" -  имел в виду что  специальных ардуиновских функций для этого нет. Но через HAL и CMSUS, думаю, можно и из ардуино.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

b707 пишет:
( по моему опыту вход - это циклов 60-80, а не 12, как пишете вы).

Он лишь цитирует дэйташит, там действительно 12 тактов. Но мы ведь подключаем свою функцию, которую надо вызвать из обработчика, предварительно прочитав флаги и выяснив, по какому именно поводу пришло прерывание. Так что на это все действительно около 80 тактов.