[Из песочницы] Плата контроллера на базе 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 пин каждый, один для аналоговых сигналов, другой для цифровых.
Вот такой контроллер получился.