Официальный сайт компании Arduino по адресу arduino.cc
С stm32f103 на телевизор (полный TV сигнал)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Не то, чтобы я считаю эту тему актуальной, но ведь кому-то понадобилось делеть TV-выход на Nano даже при том, что там отображается всего 20 символов в строке...
Опять же, не прошло и месяца, как аналоговое телевидение вышло из моды. ))) А аналоговые телевизоры остались...
Ну и на Ардуино выбор экранов (с разрешением от 128 по горизнтали) обычно ограничивается двумя непересекающимися диапазонами:
- от менее дюйма до примерно 4 юймов,
- от 20-40 дюймов и больше.
А промежуточный диапазон перекрывают как раз аналоговые TV-приемники.
В общем, первые прикидки показали, что можно сделать на stm32 формирователь полного телевизионного сигнала с разрешением экрана 512х240 пикселей, что дает 64 символа в строке для символов 8х8 или 8х12, а также до 85 символов в строке для достаточно стандартного для Ардуино фонта 6х8 (5х7).
Первая попытка:
Здесь шахматное поле с клеткой 16х16, поверх которого нарисована одниписельная прямая из левого верхнего угла вправо вниз, а также надписи шрифтами 6х8, 8х12 (зернкально) и 8х8 (жирный).
Интересно, хотя и непонятно зачем :)
С интересом жду подробностей по реализации этого в коде.
О_О
Давно хотел реализовать на работу табло с текущими параметрами эксперимента на большом экране 40 дюймого телевизора притащенного аспирантами из дома за ненадобностью. Уже полгода лежит без дела. Присоединяюсь. Реализую в ближайшее время. Только шрифт будет большим, чтобы из далека было видно.
P.S. Они уже всё сделали :-(
https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/master/STM32F1/libraries/A_STM32_Examples/examples/Maple/CrudeVGA/CrudeVGA.ino
b707, я тоже не очень понимаю, зачем.
Ну, например, есть у меня Orange Zero. Непроверенный. Потому как без видеоконтроллера, но с TTL UART. Так что можно было бы использовать подобную конструкцию в качестве видеотерминала.
b707, я тоже не очень понимаю, зачем.
Ну, например, есть у меня Orange Zero. Непроверенный. Потому как без видеоконтроллера, но с TTL UART. Так что можно было бы использовать подобную конструкцию в качестве видеотерминала.
Очень напомнило:
Однажды Ходжу Насреддина спросили:
-- Как избавиться от крыс?
-- Очень просто! - сообщил Ходжа.
-- Нужно растолочь черепки в порошок и, когда поймаешь крысу, засыпать ей это порошок в ноздри. Крыса не сможет дышать и издохнет.
-- Но если я поймал крысу, не проще ли убить ее, ударив об стену?
-- Конечно проще! - ответил Ходжа.
P.S. Они уже всё сделали :-(
https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/master/STM32F1/libraries/A_STM32_Examples/examples/Maple/CrudeVGA/CrudeVGA.ino
Ну, этот исходник я, разумеется, изучил и даже кое-что из него замствовал.
То есть полезное там как бы есть, но использовать это на практике нельзя.
Похоже, выглядит это так:
1. Все это делается программно, причем, по горизонтали получается что-то чуть больше 20 "пикселов".
2. Есть один неприятный момент, который мне как раз хотелось бы обсудить.
Меня интересуют строки исходника 91 и 107. В первую очередь, конечно, 107, потому что 91, на мой взгляд, совершенно бесполезна.
Дело в том, что без этих строк (в том числе и у меня) на экране промелькивают помехи, а в результате Serial.end() эти помехи исчезают, но одновременно с этим "отваливается" USB порт. Т.е. перепрошить плату в дельнейшем удается только, нажав в нужный момент на RESET. Похоже, этот Serial.end() убивает как USB, так и милисекундные прерывания системы времени.
В общем, кто по этому поводу что может сказать?
Очень напомнило:
Однажды Ходжу Насреддина спросили:
-- Как избавиться от крыс?
-- Очень просто! - сообщил Ходжа.
-- Нужно растолочь черепки в порошок и, когда поймаешь крысу, засыпать ей это порошок в ноздри. Крыса не сможет дышать и издохнет.
-- Но если я поймал крысу, не проще ли убить ее, ударив об стену?
-- Конечно проще! - ответил Ходжа.
Вечер. Отец с сыном гуляют по берегу реки. На берегу сидит художник и рисует воду, мост через реку, закат...
Отец сыну(наставительно):
- Видишь, как дядя мучается без фотоаппарата?
В то же время ширина спектра сигнала изображения составляет 6.25 МГц, что соответствует пикселной частоте 12.5 МГц.
Выяснил, что после отключения USB (Serial.end()) последовательный порт (Serial1) сохраняет работоспособность.
Значит, так и будет работать: USB выключаем дабы избавиться от помех на экране, а обмен ведем через COM-порт (PA9, PA10).
Видео одного из промежуточных вариантов: https://youtu.be/kdt_LOdkxfY
Выводит на экран текст, передаваемый по последовательному порту.
Имеет два режима экрана 480х240 и 512х240 пикселей, позволяет переключаться между ними в процессе работы посредством управляющих последовательностей.
Поддерживает два фонта: 6х8 и 8х8 пикселей, которые могут присутствовать на экране одновременно. Переключаются управляющими последовательностями.
Позволяет позиционировать место вывода.
Позволяет рисовать линии посредством управляющих последовательностей.
Пока:
- нет борьбы с помехами,
- не поддерживается кириллица,
- не поддерживаются аппаратные настройки (например, переключение кодовой страницы, что будет актуально после подключения кириллицы - планируется utf-8, 866, 1251 и КОИ8).
Для записи ролика был создан сценарий, т.е. последовательность символов, передаваемая в порт. В качестве источника данных была использована Мега. К проекту она никакого отношения не имеет, вместо нее можно было использовать ардуиновский монитор порта, но я, увы, не могу соревноваться с Мегой в скорости ввода символов.
Код будет выложен ближайшие день-два.
PS. Ни у кого нет на примете фонта 8х8 (желательно жирного) с украинско-белорусской кириллицей?
А вот и обещанные исходники:
stm_strl.ino
screen.h
screen.cpp
И демонстрационный код на Меге:
test.ino
Выход TX3 Меги нужно подключить ко входу RX1 stm32.
Напоминаю, что:
кириллица пока не поддерживается,
борьба с помехами пока не ведется.
Управляющие коды описаны в screen.h. Можно подключить к stm32 вместо Меги ПК через USB-UART и передавать команды и строки текста прямо из монитора порта.
Похожий проект "VGA на Arduino Due": https://github.com/stimmer/DueVGA/
Да, сходство есть.
Но мне хотелось:
1. Не менее 80 символов в строке (а в указанном проекте - до 53).
2. Обойтись контроллером, который почти на порядок дешевле.
При этих условиях единственный вариант - отказаться от цвета.
Но я сейчас продумываю вариант, при котором можно будет задавать цвет каждой строки целиком (из 7-255 цветов). Вот только думаю, может ли такое когда-нибудь кому-нибудь понадобиться. Тем более, что такой вариант однозначно предполагает переход с композитного сигнала на VGA.
Похожий проект "VGA на Arduino Due": https://github.com/stimmer/DueVGA/
Схемы здесь (для VGA и TV): http://stimmer.github.io/DueVGA/
http://stimmer.github.io/DueVGA/breadboard.html
http://stimmer.github.io/DueVGA/tvout.html
Да, посмотрел дэйташит на SAM8, там, в отличие от stm32, для SPI можно использовать практически любой коэффициент деления, тогда как для stm32 - только степени двойки. Наверное поэтому для sym32 и нет аналогов. Но я обошел это при помощи SPI slave.
А так - конечно, Due выглядит более многообещающим вариантом по сравнению с stm32f103 из-за впятеро большего объема памяти, на 17% более высокой тактовой частоты и большей свободы в выборе пиксельной частоты. Но, с другой стороны - неудобный формфактор и высокая цена.
PS. Естественно, проект не претендует на популярность, т.к. первый вопрос - "Зачем?". Но, все-таки, хотелось бы выслушать мнения по двум вопросам:
1. Какой интерфейс предпочтительнее: композитный TV-сигнал или VGA?
2. Имеет ли какой-то смысл предусмотреть возможность выводить каждую строку растра своим цветом?
Сделал поддержку кириллицы.
Поддерживаются 4 кодировки: UTF-8, KOI8R, CP-1251 (Windows), CP-866 (Альтернативная ГОСТ). По умолчанию включена UTF-8, но управляющими последовательностями их можно переключать.
В дальнейшем планируется сделать настройки по умолчанию при помощи dip-переключателя, тобы устройство могло работать в любом из поддерживаемых режимов совместно с устройством, которое ничего не знает об управляющих последовательностях.
Но, пожалуй, данный вариант устройства приобрел более или менее законченные очертания - дальнейшая работа предполагается в расчете на VGA разъем и с ограниченной поддержкой цвета.
Поэтому публикую его полностью.
Схема:
Основной файл:
Заголовочный файл библиотеки screen.h:
файл библиотеки screen.cpp:
файлы фонтов:
a_Small_Rus.c
и font_c.c:
На всякий случай напомню, что данный контроллер должен отображать на экране то, что передается ему извне, т.е. другого контроллера. Для проверки была использованка Mega со следующим скетчем:
Для того, чтобы добиться желаемого результата вход контроллера stm32 Serial1 должен быть подключен к выходу Меги Serial3.
Вообще-то, смысл вашего проекта наверное в том, чтобы наложить надписи на видео от другого источника. Сразу приходят на ум: ОСД для дрона самопального, какой-то радар заднего хода автомобиля с выводом растояний и положения помехи на экран медиасистема, смешанный с видео от камеры заднего вида и т.п.
А вот как VGA не уверен, что кому-то будет интересно. Тем более что аналоговых телеков пока еще дофига, а вот монитор лишним не бывает, всегда куда-то нужнее, чем ардуино к нему подключать.
Только для реализации ОСД что-то нужна схематика микшера видео, и синхронизация от внешнего источника видео.
Вообще-то, я что-то похожее на ОСД на 328-ом видел, на форуме любителей радимоделей.
почему бы не использовать делитель на 5 (72/5=14.4, близко к 14.318), если используешь внешнюю синхронизацию, и тогда с строками длительностью в 63.5мкс, (NTSC timing)
можно будет как усеченный PAL-M или NTSC использовать.
отдельно буфер строки 904, 912 или 920 бит (113, 114 или 115 байт, 904 укладывается в стандарт, 912 чуть перебором, а 920 уже за пределами ntsc) и там как колорбурст так и цвет выводить.
пауза (0-ли), (после синхросигнала 5 байт 0xBB или 11001100), пауза (0-ли), потом цвет в виде декодированной последовательности (abcd)(efgh) - две тетрады.
чуть позже дополню с тетрадами, в ods посчитаю варианты как pal так и ntsc.
для пал подсчитал сочетания, если как у Вас 1 битное:
0000-0000
0001-0100
1001-1100
1110-1011
1011-1110
1111-1111
это стандрартные rgb, нечётный и четные строки, т.е. последовательно 16 цветов, но в 1битном кодировании PAL получилось только 6 независимых цветов.
по NTSC наверняка можно обыграть все 16 комбинаций 4битовых последовательностей, но какие они дадут цвета - не могу сказать, надо пробовать.
я попробую с использованием двух SPI каналов, двухбитные последовательности.
в виде двух буферов по 228 байт, и выдача параллельно с PA6 и PB9 через резисторы 580 и 240 Ом,
и 0 - на обоих бит=0, 1 на 1=1, на 2=0, 2 на 1=0, на 2=1, и 3 на 1=1, на 2=1.
и конденсатор там не нужен. выход нагружен входным сопротивлением в 75 ом.
тогда возможно будут такие комбинации:
всего 11 комбинаций.
отдельно буфер строки 904, 912 или 920 бит (113, 114 или 115 байт...
904*240/8=27120 байт, откуда в BluePill столько памяти?
Там на байт несколько точек. Вы же сами по spi выдаёте сигнал.
А тут сигнал на частоте цветоразностной сразу даёт цвет по pal или ntsc.
У меня указаны битовые последовательности в случае 1 спи (0/1)
Или при использовании 2 спи 0 (синхро), оба канала на 0, 1(с большим резистором в 1, 2 меньший резистор в1, больший в 0, 3 оба в единице.
Если использовать делитель 10, будет 4 точки на байт и на 1 спи.
И буфер не предлагаю сразу на весь экран, это буфер строки. Пока одна передается, другая формируется или от знакогенератора и текстового буфера, или с строки из графического фрейм буфера.
Другого простого варианта сделать унифицированный вывод видео при разных входных данных и двух немного разных методах кодирования цвета.
И буфер строки формируется на всю строку, на 64мксек. Тогда 20% неизменно, а 80% формируется из известных данных. Потом по таймеру запускаем спи и формируем четную строку, делаем другие задачи.
Тут можно любую ртос с переключением таймером в 15734/15625 раз. На таймере запуск спи и инициация заполнения 2 буфера.
Получаем при вашей схеме дополнительно 2*114 байт на 2 строки, если быстрый контроллер, то можно в онлайн формировать, 1 буфером.
Вам же и цвет и кучу всего захочется.
А тут сделать механизм формирования строки и не важно, какой буфер в целом и как им пользуются, лишь бы период формирования строки укладывался в 64 мксек.
Каков объем графического фрейм буфера 904х240 точек?
Чтобы "формировать" строку, надо откуда-то брать данные. Откуда брать данные для графического экрана? Вы знаете другой источник информации кроме фрейм буфера?
елы-палы. есть графический фрейм-буфер или текстовый фрейм-буфер, т.е. массив байт грубо говоря 80х24.
используем 2 буфера строк по 904..912 точек. ссылка на следующий буфер, номер строки, чет/нечет полукадр,
обычная задача по семафору, имея переменную номер строки, четный или нечетный полукадр, ссылку на строчный буфер и исходные данные - рисует как ей душа пожелает.
когда происходит вызов переполнения таймера строки (15625 или 15734 Гц) выбор:
ссылки на строковые буфера: новый=предыдущий, текущий=следующий, следующий=новый.
запускаем spi,
увеличиваем номер новой строки. если он больше>262+четный&1, то номер=1, четный=(++четный)&1.
(это я сразу пишу в с кодировании)
работа с новым буфером - если следующая с изображением - то семафор на формирование следующей строки изображения,
иначе какая там необходима строка - кадровый синхро-импульс, строковый, просто "чёрная" строка... можно взять заранее заготовленные.
в этих 904 строках 20% практически неизменны, это вне отображаемого пространства.
а около 704..720 точек - их сочетание по тетрадам, т.е. на 177..180 точек даст всевозможные состояния. выше - цветное разрешение сложно предсказать.
если будет ч/б изображение - после строкового импульса не выставлять color burst и будет чб сигнал высокого разрешения, до 704..720 точек разрешающей способности. и можно все поля сделать детально по стандарту.
тогда, если формирование буфера строки не прерываемо планировщиком - то в строках не будет помех, будет независимость от состояния исходного буфера.
если свести до графики CGA адаптера, т.е. 4 цвета 320х200, то можно использовать 1spi, и делитель на синхросигнал для spi будет равен 10, т.е. синхросихнал будет 7.2МГц, тогда строчный буфер можно в 2 раза уменьшить.
при использовании 1spi+1 вывод синхро, как у тебя, то при 3.3V, 2 резистора номиналом 560 ом на синхро, 220 ом на spi - получим при 75ом входной нагрузки 0, 0.3, 1.06 вольт. т.е. монохромный или в случае color burst цветной сигнал одной тональности.
я на выходных поищу bluepill и накарябаю код. заведу через rca или scart на дисплей, посмотрю что получится.
можно для расширения диапазона использовать 2spi и оба синхронизировать с делителя, тогда у нас получится 4 значения напряжений:
0, 0.3, 0.76, 1.06 вольт. - с ними вариантов будет больше.
"В огороде бузина, а в Киеве - дядька."
Я не спрашивал, как реализовать текстовый буфер.
И меня совершенно не интересует режим "как CGA" 320х200.
Тем более, я ничего не спрашивал про резисторы.
Меня интересует один вопрос: как разместить графический буфер 904х240 в памяти BluePill? Желательно в цветном варианте.
е-ма, не весь буфер, а только буфер строки!!!
Что "буфер строки"?
Зачем мне буфер строки?
Где хранить то, что нарисовано на экране?
Это вторичный буфер, который не используется для работы пользователем, он в количестве двух штук используется прерыванием для организации вывода видео, а формирование его уже идёт хоть от текстового буфера, хоть от графического, хоть налету, например при распознавании postscript языка. Чтобы мог организовать хоть как в спектруме графические атрибуты, хоть на каждую точку rgba, текст. Вывод будет отвязанный от реализации основного буфера, связь через 1 функцию конверсии с основного буфера в строковый. Сначала отработать что мы можем вообще выжать из твоего варианта выдачи видеосигнала, а потом уже на основном буфере уже определиться как кодировать для пользователя.
Ну опять, я про Фому, а Вы - про Ерему!
zelya, у меня к Вам просьба: либо ответьте на вопрос из 3-й строки сообщения №26, либо заведите тему и пишите туда все, что хотите. Но не нужно помещать в данную тему то, что к ней не имеет ни малейшего отношения.
у меня несколько вопросов, в начале красава, достойное решение.
1. к монитору прикрутили?
2.115200 это макс скорость порта?
3. можно ли прикрутить клаву и ответ по uart в обратку сканов клавы
1. К какому монитору?
2. Строго говоря, там чистый USB, поэтому на физическую скорость эта константа влияния не оказывает.
3. Если есть синяя изолента - почему нет!
А почему не на esp? Ща врде блюпилы как крыло самолета стоят, да и памяти побольше в есп.
прикрутил 230400, полет нормальный, все устраивает.
прикладываю результат
https://youtu.be/_e-hXnwsUxU
убрать бы мусор и немного стабильности, и буду пытаться запилить свой маленький не доретро компик
А почему не на esp? Ща врде блюпилы как крыло самолета стоят, да и памяти побольше в есп.
1. Когда я покупал, было 105-110р. Пока не закончились.
2. Я не встречал нормального дэйташита на esp. Зато где-то слышал, что его в природе не существует.
Я начал возиться с аппаратной реализацией (нужно добавить одну-две простейшие логические микрухи), но наткнулся на непонятки. Потом выяснил, что конкретный экземпляр stm выдает на одной из используемых ног ненормальное напряжение (больше вольта логического нуля). Но к тому моменту занялся другими проектами и возвращаться к этому уже не хотелось.
из всех таких устройств, отношение цена, производительность и разрешение, это лучшее, даже если прикрутить пару элементов логики, копейки
хотелось бы увидеть итог
может чем помогу
Мне одному заметно что это не 4К? И даже вроде не HD...
Мне одному заметно что это не 4К? И даже вроде не HD...
Вы сударь, часом не ошиблись ссайтом малинки, попали на сайт арду. :-)
Понял. Тут можна поговнячить.. :-)
Понял. Тут можна поговнячить.. :-)
шкодить добрым саморитянам, но для чего. если есть достойные предложения, - тогда можно поерничать.
А засрать мона все, даже себе на полу дома
выяснил, что конкретный экземпляр stm выдает на одной из используемых ног ненормальное напряжение (больше вольта логического нуля).
дай попробую угадать, уж не разделяется ли эта нога с SERIAL?
дай попробую угадать, уж не разделяется ли эта нога с SERIAL?
Да и какая связь с Сериал, колись
дай попробую угадать, уж не разделяется ли эта нога с SERIAL?
Да и какая связь с Сериал, колись
я в важгаде пост выкладывал, об использовании третьего таймера, с осциллограммами, реплика была про грань добра и зла )))
казалось бы какая связь... плата другая. пины другие, аддон другой...
казалось бы какая связь... плата другая. пины другие, аддон другой...
а только наружная обвязка может подтягивать уровень, это либо LED либо SERIAL других не знаю, может они и есть, нужен пин нужна схема, чудес не бывает...правда еще бывает вжаренная логика )))
PS я жеж говорил - попробую угадать...
Мне одному заметно что это не 4К? И даже вроде не HD...
Сэр что-нибудь слышал о такой науке как арифметика?
Для HD нужно 1920*1080/8=259200 байт видеопамяти, где столько взять в Блупилле?
я в важгаде пост выкладывал, об использовании третьего таймера, с осциллограммами, реплика была про грань добра и зла )))
а, если подвесить вч транзистор (чтоб небыло мусора и задержки при использовании логики, тот же старый и добрый 315 или 361, в литературе их ставят в генераторы с логикой, чтоб поднять уровень и снизить завалы) в импульсном режиме, и пару элементов, чтоб поднять уровень и сделать реку меандру. помнится в старых компах и в импульсных устройствах выравнивали (делали прямые углы) завалы, сдвиг на пару нс я думаю не сильно скажется
Мне одному заметно что это не 4К? И даже вроде не HD...
Сэр что-нибудь слышал о такой науке как арифметика?
Да сэр! Арихетика - моя слабость. Все больше интригалы, да интригалы.
Мне одному заметно что это не 4К? И даже вроде не HD...
Для HD нужно 1920*1080/8=259200 байт видеопамяти, где столько взять в Блупилле?
А вот проблемы индейцев шерифа не волнуют. Выбираем правильно кристалл под задачу.
с интрегалами разобрались?. Займемся нашими патифонами, у кого есть предложения?
реализовать триггер шмидта https://uk-parkovaya.ru/wp-content/uploads/1/1/6/11635e811bf116fadc250ba...
руководствуясь к примеру https://lib.qrz.ru/node/5480
или типо того https://forum.cxem.net/uploads/monthly_12_2014/post-186391-0-76944100-14...
просто у меня нет осциллографа для измерения форм сигналов с частотой более 20 Мгц, а то бы помог. не разжился я ещё
может за основу, для формирования _П_П_П_ взять входной каскад на полевике из схемы https://fornk.ru/2990-samodelnyj-chastotomer-na-attiny2313/
А в чем вопрос-то?
LM393 и голову не морочить