MAX7456 (Minim OSD) и Ардуино

kost82
Offline
Зарегистрирован: 30.11.2015

Добрый день!

Есть у меня вот такая платка на базе микросхемы MAX7456 и Atmega328

 

Нужно с ее помощью наложить на картинку с камеры показания энкодера (просто цифры, изменяющиеся при повороте энкодера).

Я так понял, что эта плата заточена под вывод данных телеметрии с "мозгов" квадрокоптеров и прочих радиоуправляемых моделях при FPV полетах. Данные эти приходят на последовательную щину (Tx и Rx выведенные слева) и на контакты вверху (я так понял это аналоговые пины  Atmega328), обрабатываются атмегой и поступают на MAX7456 по SPI интерфейсу.

Существует куча прошивок для этой платы, но мне они особо не нужны. По-сути, мне надо вывести набор цифр в левом нижнем углу, которые будет выдавать отдельная Arduino Nano.

Нашел я интересный топик в котором боле-менее понятно описаны нюансы работы с этой платой. Мне досталась плата с перемычками, которые я замкнул, чтобы запитать обе ее части от 5 Вольт. Припаял я тюльпаны к выводам VID IN, VID OUT и GND, расположенным в правой части платы. Тюльпан с камеры к контактам VID IN и GND, а тюльпан на монитор к VID OUT и GND. Подал питание 5 Вольт. Светодиоды на плате горят, но сигнал из камеры на монитор не проходит. Камера рабочая и монитор тоже, напрямую все работает.

Кто работал с такими платами - расскажите пожалуйста как к ним ардуину вообще подцепить? Может библиотеки какие-то есть для этой цели? Как вывести произвольные цифры в углу экрана?

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

kost82
Offline
Зарегистрирован: 30.11.2015

Нашел еще вот такую схему. По ней контакты SPI выведены на плату но не распаяны, за исключением CS, который идет сразу на ногу Atmega328. То есть чтобы подключиться "внешней" ардуинкой - нужно перерезать эту дорожку, и вывести ее отдельно. Либо использовать Atmega328 как посредника, передавая ему команды по UART. Вот только знать бы что туда отправлять нужно.

slider
Offline
Зарегистрирован: 17.06.2014

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

поизучайте тему ,проблем не должно быть , если модуль рабочий .
видео он должен вам пропускать .
Давно прошивал и настраивал для полетников  такой Minim OSD , и micro MinimOSD проблем не было . прошивок как и программ настройщиков много. Хорошие программы настройщики через интернет сами подтягивают нужную прошивку под выбранный полетник.

Запускаете программу конфигурации , по Rx Tx , в ней можно включать/выключать и перемещать по экрану всякие показомерты (оставьте один показометр например тока или высоты или GPS ), выбрать шрифт , выбрать для какого полётника будете использовать (в вашем случае найдите известный расписанные команды , которые потом будете посылать своей ардуинкой).
Потом своей ардуиной можете  посылать по Rx Tx число нужного параметра , оно будет отображаться на видео. И если надо , включать/выключать перемещать параметры. 

погуглите что нить подобное - ардуино minim osd команды ,  minim osd скетч ,  

// первый попавшийся https://github.com/KIrill-ka/MinimOSD-Extra/tree/master/Character_Updater  
   https://code.google.com/archive/p/rush-osd-development/wikis/MinimOSD_Basic_Setup.wiki (там есть скетчи)

arduino  Max7456.h :

http://mypractic.ru/urok-68-prakticheskoe-programmirovanie-osd-kontrollera-max7456-v-sisteme-arduino-sozdanie-i-zagruzka-shriftov-vyvod-informacii-na-ekran.html

http://mypractic.ru/urok-66-osd-generator-max7456-obshhee-opisanie-funkcionalnye-vozmozhnosti-parametry-podklyuchenie-k-plate-arduino.html

//// в общем есть 3 варианта ,
1. использовать его как от полётника , посылая по юарт данные по известному протоколу. 
2. подредаткировать скетч примера Max7456 чтоб он по юарт принимал юарт данные от вашей ардуинки . 
3. подредаткировать скетч примера Max7456 чтоб он выполнял задачи и вашей ардуинки. 

kost82
Offline
Зарегистрирован: 30.11.2015

Спасибо, за помощь!
Я тут вчера еще поизучал тему, поделюсь тем что нашел. 

Есть вот такая схема этого девайса 

Получается, что на модуле распаяно три аналоговых выхода, но через делитель напряжения. Без замыкания этого делителя использовать их не получится. К тому же не получится использовать энкодер на прерываниях(без костылей), т.к. выводы с прерываниями не распаяны. Остается вариант с отправкой команд по UART.

Вот здесь я скачал библиотеку для работы с MAX7456 по SPI, на этой страничке подробно расписано как с ней работать.

В плату залит бутлоадер Arduino Pro Mini, я залил тестовый скетч из этой библиотеки в плату - и она заработала. Перед этим обновил знакогенератор. В примере библиотеки для этого есть скетч, который нужно залить и через монитор порта дать команду на обновление знакогенератора (отправить y). В конечном итоге я получил на экране заветную надпись Hello World.

Теперь дело за малым: научиться работать с библиотекой и выводить текст в нужном месте экрана. После этого можно принимать данные по UART и отображать их на экране. А отдельная ардуина будет работать с энкодером и отправлять данные по UART в плату Minim OSD.

Микросхема MAX7456 оооочень чувствительна к питанию. Пока не подал питание 5Вольт с отдельного стабилизатора напряжения - она не хотела нормально работать. Ну и бывает не всегда заветная надпись отображается на экране, приходится перезапускать плату. Думаю это можно будет отдельной командой делать.

 

kost82
Offline
Зарегистрирован: 30.11.2015

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

Оригинальная библиотека для max7456 находится здесь. Там в папке examples есть скетч Max7456Write.ino, его надо залить в Atmega328. Открыть монитор порта и там ответить y на вопрос "хотите ли обновить...". При этом обе части платы должны быть запитаны от отдельного источника. Питание от USB не подойдет для нормальной работы max7456.

Таблица символов, которая будет залита не соответствует ASCII-кодировке, поэтому, чтобы цифры и буквы отображались нормально - в заголовочном файле библиотеки (max7456.h) надо закоммениторвать сточку 

#define MAX7456_TABLE_ASCII

Ну либо переделать таблицу знакогенератора.

Моя плата MinimOSD отказалась прошиваться по сигналу DTR, поданному на контакт GRN, поэтому приходилось жамкать кнопку Reset вручную на плате.

И последнее, после заливки скетча надо целиком перезагружать плату (снимать питание), чтобы max7456 начала работать.

Вот вроде все, с чем пришлось столкнуться.