Плата контроллера на базе STM32F7 с видеовыходом

По роду своей работы часто приходится проектировать различные виды управляющих и измерительных систем. Разумеется на базе микроконтроллеров. Сначала использовали AVR, потом следующее семейство ATxMega, в конце концов остановились на семействе STM32. Несмотря на разные функционал проектируемых устройств, масса функций остается неизменной: интерфейс с пользователем и внешними устройствами, сохранение данных, часы реального времени и т. п. Поэтому появилась идея сделать универсальную плату контроллера содержащую основные узлы, а дополнительные подключаемые платы будут расширять функционал до необходимого. Сначала это был контроллер на STM32F103, потом на 207, потом на 429. И вот на 746 кристалле.

Но главная новинка на этой плате — это видеовыход. До этого, как правило, использовался графический дисплей (монохром, 320 х 240). Но у этого подхода есть свои недостатки:

1. При переходе на цветной дисплей приличного размера > 5" с встроенным контроллером цена становится достаточной большой.
2. Использовать приходиться только один тип дисплея, так как интерфейсы, как правило несовместимы.

Но тут пришла мысль использовать стандартные автомобильные мониторы, цена которых, достаточно демократична, существует большое количество производителей и есть разные размеры.

Для этого пришлось реализовать видео выход.





После поисков на просторах Интернета был обнаружен графический контроллер S1D13746F01, который имеет встроенную память 321 кБ и композитный видеовыход.Конечно есть и S-Video, но он не планировался использоваться. Так же был обнаружен и даташит на Evaluation Board с подробной схемой подключения, правда на корпус, который имеет 100 выводов.

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

Для организации видеобуфера потребуется 320 * 240 = 76800 байт. Количество цветов при этом будет равным 256. Такой формат кодирования цвета обозначен в документации на видеоконтроллер, как RGB 3:3:2. То есть 3 бита на красный, 3 бита на зеленый и 2 бита на синий цвет. Итого 8 красных цветов различного уровня, 8 зеленых и 4 синих.

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

void refresh_display(void)
{
  unsigned long   h, s;
  unsigned short  out_port; 
  
  for (s = 0; s < Height_window; s++) //строки
  {
    for (h= 0; h < Width_window; h++) //столбцы
    {
      out_port = gLCD_port->ODR;
      out_port &= 0xFF00;
      out_port |= video_buffer[h] [s];  //данные 
      gLCD_port->ODR = out_port;

      gLCD_color_WE_low; //запись
      gLCD_color_WE_high;
    }
  }
}


Время записи всего видеобуфера составляет примерно 20мсек. При желании можно выводить видео 50 кадров / сек, но контроллер будет заниматься только выводом. :) В реальных задачах необходимо осуществлять перезапись экрана от 3 до 10 раз в секунду.

И вот картинка на подключенном автомобильном мониторе, купленном в ближайшем магазине. Размер монитора — 7".



Это управление высоковольтным тестирующим устройством. Кроме видеовыхода на плате контроллера остался разъем для подключения монохромного дисплея Winstar WG320240C0.

Краткая характеристика основных узлов на плате контроллера:

  • 6 разъемов с комплементарными ШИМ выходами для управления полумостами
  • USB Host реализован на микросхеме VNC1L, в основном используется для записи информации на флешки.
  • USB Device — микросхема FT232RL, используется для программирования микроконтроллера с компьютера через USB
  • изолированный RS485 для связи с устройствами по MODBUS
  • Wi-Fi на базе модуля ESP8266
  • RTC — DS1307 с литиевой батарейкой, подключен по I2C
  • 2 микросхемы флеш памяти, одна используется для хранения конфигурации устройства, другая для архивных данных
  • ИОН на базе REF192
  • 2 разъема расширения на 20 пин каждый, один для аналоговых сигналов, другой для цифровых.

Вот такой контроллер получился.

Средняя зарплата в IT

110 500 ₽/мес.
Средняя зарплата по всем IT-специализациям на основании 6 970 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 41

    0
    Я пока что на ARM не перешел, но в курсе, что в них есть DMA — почему обновлением видеобуфера не занимается DMA?
      +3
      Потому что авторы даже FSMC поленились/не получилось/не подходит прикрутить.
      И стробируют запись программным дерганьем ножки порта, как ардуинисты…

      В таком варианте DMA «не работает».

      Хотя казалось… пишут что раньше использовали дисплеи… неужели так же через порт!?
      Хотя может зря наговариваю и FSMC уже у них используется а мультиплексор ставить лень/некуда.
        0
        В этом контроллере [STM32F746] имеется целый интерфейс для подключения LCD и всяких разных дисплеев и микросхем типа VGA, DVI, LVDS и любых других совместимых с интерфейсами 8080/6800 и RGB. правда для этого интерфейса очень было бы здорово иметь дополнительный внешний SDRAM.
          0
          Вы, абсолютно правы, но видеосигнал с проца не получить. А именно аналоговый видеосигнал и был целью.
            0
            Тут же на хабре была статейка про это решение http://hackaday.com/2016/01/31/tv-transmitter-uses-esp8266/
            +1
            Я знаю.
            Но я в данном случае критиковал еще большие частность — посылку данных через порт с программным стробом :)
            0
            Странно, что Вы не задались этим вопросом перед разводкой платы.

            Дисплеи и раньше использовали с DMA через FSMC (ныне FMC).

            FMC для того и создан, чтобы работать с внешними микросхемами через параллельную шину. Аппаратная выдача строба в нём должна быть обязательно.
              0
              FSMC (ныне FMC).

              Несколько некорректное утверждение. Существует и то, и то. Но на младших контроллерах нет поддержки DRAM (собственно Flexible Static Memory Controller), а на старших уже полноценный FMC с поддержкой DRAM.

              0
              Согласен с замечанием, в следующей версии платы и планирую использовать FMC & DMA
                0
                В следующей версии платы планирую переразвести под FMC и использовать DMA.
              –1
              А в результате получили мегапланшет?
                0
                Получилась система, которая позволяет использовать в качестве средства отображения любой видеомонитор.
                0
                Забавно… с формированием и видеосигнала для телевизора из части основной адресной памяти проца вполне справлялся древний «Спектрум» на Z80. Там телевизор как монитор — был штатным решением.
                Ну да… специализированная микросхема со своим буфером (заливаемым через порт… однако) вместо варианта как в «Спектрум»… это конечно круто.

                А чем смысл статьи то? В том что нашли специализированную микросхему?
                  +1
                  В Спектруме Z80 не занимался формированием видеосигнала. 1 такт Z80 это 2 пикселя.

                  А вот мелкие AVR-ки вполне справляются.
                  http://www.linusakesson.net/scene/craft/index.php
                    0
                    А я где то написал что это делалось программно? Я сказал в «Спектруме». А «спектрум» это не только Z80, а еще горсть микросхем.

                      0
                      Да я невнимательно прочитал ваш коммент =)
                      0
                      До вас пытаются донести мысль, что разработка 35-ти летней давности. Стоимость которой дешевле любого чипа, в этом «хайтеке». Даёт примерно схожий функционал)

                      И кстати автор по вашей ссылке не только не оригинален но и вообще, сильно отстал от жизни)
                      www.youtube.com/watch?v=y_d2hWXyykI
                        0
                        Смотрел я на эту микросхему, которая AD725. В ней нет видео буфера.
                      0
                      В том, что с этой платой в качестве устройства отображения можно использовать видеомонитор любого производителя и размера.
                      +1
                      С какими трудностями столкнулись при разработке? Как исправляли ошибки или сложные моменты из документации? В чем посыл статьи то? Ну платка как платка, стандартные микросхемы и решения.
                        0
                        Вы правы, решения стандартны. Особых проблем не было. Все заработало практически сразу.
                        +1
                        Вдогонку…

                        Время записи всего видеобуфера составляет примерно 20мсек. При желании можно выводить видео 50 кадров / сек, но контроллер будет заниматься только выводом. :) В реальных задачах необходимо осуществлять перезапись экрана от 3 до 10 раз в секунду.


                        Может я жесток, но раз написали статью, будьте готовы к критике.

                        Google: «формирование видеосигнала stm32»

                        сразу нахожу…

                        http://we.easyelectronics.ru/STM32/generator-video-na-stm32f407-recept-bystrogo-prigotovleniya.html

                        8 выводов порта + 11 резисторов + использование DMA вместо специализированной микросхемы и запихивания в нее данных из буфера.
                        .
                          0
                          Приведенная статья описывает получение RGB сигнала, а не композитного видео. RGB вход есть далего не на всех мониторах.
                            0
                            Ну если идет речь именно от таком ограничении… монитор только с S входом…
                            тогда да. одними резисторами и простым ЦАП не обойтись.

                            Хотя, если не требуется цветность и достаточно ЧБ изображения, то композитного выхода делается все просто.
                              0
                              Вы правы. В свое время делал ЧБ видеогенератор на рассыпухе для 580ИК80А :)
                          0
                          Странный дизайн PCB…
                            0
                            Похоже на схему метро
                              +1
                              А в чем странность? Интересен взгляд со стороны.
                                0
                                Либо плата в 6 слоёв, либо 4 слоя и дороги во внутренних слоях когда внешние пустые, и то и другое странно.
                                  0
                                  Плата в 4 слоя, сигнальные проводники только на 1 и 4, один внутрений слой полностью залит полигоном GND, на втором внутреннем расположены только проводники питания — 5В, 3,3В и 1,5В и соответственно все свободное место залито полигоном GND. Сигнальных проводников на внутренних слоях нет.
                                    0
                                    Лучше сделать внутри плейн для GND и комбинированный плейн для питания без земли. На этой плате я бы все компоненты поставил с одной стороны — технологичнее.
                                      0
                                      Полностью с Вами согласен, но у микросхемы видеоконтроллера, половина цепей аналоговые, требуют своей аналоговой земли и довольно большого количества конденсаторов. Поэтому пришлось часть фильтрующих конденсаторов переносить на другую сторону. И если делать питание полигонами пришлось бы вводить еще 2 слоя, что я посчитал избыточным. И, в принципе, моя стандартная практика, фильтрующие кондесаторы по питанию, размещать на противоположной стороне, максимально близко от вывода.
                                0
                                Моя жена, глядя на платы, сравнивает с планом города :)
                              0
                              А вы внутренние слои не сплошной заливкой делаете?
                                0
                                На приведенной картинке заливка выключена, иначе все было бы одного цвета. :) Все слои залиты полигоном GND.
                                0
                                А почему не использовали встроенный в STM32F7 RTC? Сам делаю устройство на STM32F0 и планировал использовать встроенный, но может есть какие подводные камни?
                                  0
                                  Просто старое и обкатанное решение, переходит по инерции из проекта в проект. :) Может стоит и попробовать в новых проектах. Пока RTC процессора не использовал, про подводные камни не скажу.
                                  0
                                  Конечно можно было бы использовать DMA, или на крайний случай BSRR. Но видимо это не нужно было.
                                    0
                                    Для формирования строба используется именно BSRR.

                                    gLCD_color_WE_low; //запись
                                    gLCD_color_WE_high;

                                    #define gLCD_color_WE_high GPIOI->BSRR = GPIO_BSRR_BS_3; //Port I Set bit 3
                                    #define gLCD_color_WE_low GPIOI->BSRR = GPIO_BSRR_BR_3; //Port I Reset bit 3

                                    0
                                    Посмотрел DS — по описанию всё должно работать через FSMC и с чтением и без. Интересный кодер — только ждать долго. Тоже сделаю себе на нем раскладной дисплей — 1 х 2 или 2 x 2. Мониторы действительно сильно дешевле с аналоговым входом.
                                    Спасибо за наводку на чип!
                                      0
                                      Если по срокам доставки — составила 2 недели. :) На здоровье, рад, что помог :)

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое