Большой дисплей. Замороженный проект

image

Прочитали заголовок? Я думаю, вы все неправильно поняли. Проект заморожен в буквальном смысле — залит водой и охлажден до температуры около -10°C.

Сначала — отказ от ответственности. Все персонажи являются вымышленными и любое совпадение с реально живущими или когда-либо жившими людьми случайно. Фотографии — фотошоп, видео — мультипликация, в процессе написания статьи ни одно животное не пострадало. Как вы думаете, сойдет за отмазку в случае чего? Если сойдет, то я продолжаю дозволенные речи.
Есть у меня старый во всех отношениях друг — мы с ним знакомы лет двадцать, ну и не молодой он. Мы с ним вместе работали в National Semiconductor, потом он ушел на пенсию, а TI купил NSC — хотя это никак не связано. Я так думаю.

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

Практически в тот же месяц, как меня списали с корабля из TI на пенсию по инвалидности, судьба в очередной раз нас свела. В итоге его фирма стала вообще круче яиц вкрутую — он и я. Прежние его работники куда-то испарились — фирма работала не на прибыль, а на получение морального удовлетворения. А денег особых не было — он о них не слишком задумывался, а народу почему-то хотелось кушать. Тут мы и нашли друг друга — мне назначили пенсию по инвалидности, и с голоду я не умирал при любом раскладе. Более того, если пенсионер-инвалид зарабатывает выше определенной суммы — пенсии его лишат. А потом новую пенсию будут рассчитывать уже совсем по другой схеме. Влетишь — век помнить будешь.

«Большой босс» приносил в клюве небольшие, но интересные контракты, и мы дружно развлекались. Офиса, как такового, у нас не было, да он и не нужен был. У друга в доме полуподвал больше сотни квадратов — даже и он не понадобился. Мой дом гораздо скромнее, но для лаборатории и небольшой мастерской место есть.

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

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

Но хорошая новость (от фирмы-заказчика) — у нас (т. е. у них) уже почти все готово. Вот, панели общей площадью 81 квадратный метр — это будет центральный дисплей. Ну и два боковых дисплея поменьше. Все это собрано на WS2813. От вас нужна сущая мелочь — возьмите какую-нибудь ардуину и сделайте нам красиво систему управления.
Уже точно не помню, но дело происходило где-то в марте-апреле. Летом на катке профилактика, лед растапливают на несколько недель, в конце июля воду заливают и замораживают. К тому времени дисплей должен быть уложен на месте и его заморозят. Что-то останавливать или переносить ни в коем случае нельзя — дальше тренировки и игры.
Заказчик сообщил, что они попробовали на маленькой светодиодной панельке — все хорошо работает. Картинка получается. Вы только сделайте ее побольше и еще нам видео нужно. Суперкачество не надо, 30 кадров в секунду нам хватит.

Кто и что этим товарищам наговорил про Ардуино — я не в курсе. Но они категорически настаивали именно на Ардуино. Ну еще Малину согласны добавить были. А больше — ни-ни.
Пошли мы с товарищем до дому — читать документацию, лапшу с ушей стряхивать и времена и скорости считать.

Я тут цифры приводить не буду — дело-то уже давнее, все уже прочно забыто, и где файлы с вычислениями — найти тоже не так просто. Долго ли, коротко — получилось у нас, что нужно поток несжатых данных гнать со скоростью около полгигабита в секунду и на 200–300 метров. Где-то его можно разделить на несколько потоков чуть меньше 50 мегабит в секунду. Можно было упростить задачу, загнав под лед дифференциальные линии передачи данных, потому как по одной линии, причем без земли (земля-то была, но силовая с токами в сотни ампер, а сигнальную проигнорировали) 800Kbps к светодиодам не сильно-то передашь. Тогда бы вся электроника оказывалась снаружи в шкафу, куда можно было попасть в любой момент.

Пошли снова мы к синему морю заказчику. Отказались категорически — панели уже сделаны, а рядом с панелями вешать дифференциальные приемники — типа не кошерно. Ага, а процессор вморозить рядом с панелью — это кошерно.

Получалось, что самое простое — сделать несколько контроллеров, каждый из которых поддерживал 8 линеек светодиодов (от 16 линеек тоже отказались — сигнальные провода к панелям тащить неудобно) и данные на этот контроллер пригнать через 100 мбод Ethernet и UDP. Ни для какого более защищенного протокола просто не было времени. На головном компьютере готовились данные, передавались в Raspberry. По сигналу «три зеленых свистка» Raspberry гнала массивы данных через 1000 Мбит/с Ethernet в роутеры, а из них раздавались по 100 Мбит/с на кучу контроллеров. Часть роутеров на одной стороне катка, другая — на другой стороне. Соединять их планировали оптикой — расстояние в районе 200 метров.
На том и договорились.

Картинка ниже относится к намного более поздним событиям, на тот момент это была только идея.

image

И пошли мы снова, солнцем палимы, разбираться, что мы наобещали и как это сделать. Ethernet на контроллерах я никогда не использовал, а друг вообще ни разу не программист. Кстати, никаких готовых библиотек для передачи таких объемов информации в адресуемые светодиоды не нашлось. Еще и с контроллером полная неопределенность. Нужна была достаточно большая ОЗУ, минимальная потребляемая мощность и чтобы его в случае чего не порвало замерзающей водой. И, если помните, у нас ограничение на толщину было — 10 мм. В эти же 10 мм входит и толщина корпуса — контроллер решили поместить в алюминиевый корпус и залить эпоксидкой. Вернее, какой-то адской композицией — у заказчика был на подряде товарищ, который с подводно-подледной электроникой был на «ты» и знал, как сделать рабочие устройства в таких условиях.

Насчет ардуины мы заказчика провели так, что он ничего так и не осознал. Готовых ардуин подходящего размера не существует, поэтому договорились, что плату разведем новую. Ну и развели — какие проблемы? Потом еще пришлось сделать, чтобы ее с помощью Arduino IDE и запрограммировать можно было. А чем не Ардуино? У каждого оно свое. Короче, наша дешевая подделка сошла за Ардуино.

Для начала нашел дома в загашнике демо-платку с STM32F407. Оперативка большая, должно хватить. Написал программку, которая с помощью контроллера прямого доступа и какой-то матери гонит данные для адресуемых светодиодов, получилось 16 линий по 1300 с небольшими копейками пикселей. Линий с избытком, но много — не мало. Надо сказать, позднее эта возможность очень даже пригодилась.

image

Про встроенный Ethernet-контроллер пришлось сразу забыть — любое прерывание не вовремя — и картинка разваливалась. Пришлось ставить внешний W5500.

Поигрался немного на демке, нарисовал схему своего контроллера, развел и заказал новую платку, пока сделают — можно дальше программное писать.
Рассказывается быстро, а делалось значительно медленнее, тем более, что время от времени еще нужно было с заказчиком детали обсуждать. Ну и ошибки надо было успевать делать и исправлять.

Когда пришли платы для первого варианта контроллера, заказчики подкатили и первую панель. Пришлось в комнате под потолком повесить — по длине она почти как комната. Дом она не сильно украшала, но были в жизни и худшие эпизоды — как-то у нас в двухкомнатной малометражке несколько месяцев стоял БУВИП — блок управления выпрямительно-инверторным преобразователем от электровоза ВЛ-80Р. Кто в теме, тот поймет :)

image

image

Финальная версия процессоров еще не пришла, но панели были, решили попробовать в реальном масштабе на первой версии. Попробовали.
Вот тут отсутствие согласований линий, о необходимости которых всё время говорили большевики, и вылезло.

image

А времени переделывать что бы то ни было, уже нет. Ладно, грузите этот хлам и везите ко мне в гараж. В гараже целый день камлали с шефом, били в бубен, искали магические точки подключения земель — как не удивительно, удалось заставить все это работать, навив пар и подключив их самым теоретически неверным образом. Как бонус, светодиодные панели были уже подготовлены для замораживания, пропитаны адской смесью, которая благоухала далеко не розами. Ворота пришлось держать открытыми настежь.

Намного позднее, в каком-то интервью местной прессе товарищ из фирмы-заказчика говорил — дескать, мы, как Apple, начинали проект в гараже. Не знаю насчет Apple, то тут-то гараж был мой, о чем он скромно умолчал. И почему все это попало в гараж — тоже ни слова.
Но вывод, по-моему, они сделали парадоксальный — вот мы же говорили, что и так будет работать.

image

Заказчик рассказывал какие-то сказки про имеющееся у него программное обеспечение верхнего уровня для управления такого рода дисплеями, но когда стало припекать, выяснилось, что вообще-то нет ничего, если не считать программы для управления готовыми китайскими светодиодными рекламными дисплеями. От этого программного нет ни исходников, ни какого-либо описания вообще. Типа интуитивно понятно.
Пришлось срочно-срочно писать на Python хоть что-то, для начала работать только с консоли безо всякого графического интерфейса.

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

image

А как собиралось все это — это отдельная история. Платы контроллеров и корпуса отправили в другой конец страны на пропитку, когда они шли назад — почта тормознула. Получили мы их, когда уже начали охлаждать арену. Панели уже уложены были и протестированы с первой версией контроллеров, не предназначенных для замораживания. А монтировать штатные контроллеры пришлось по холодку. На улице жара, а внутри зуб на зуб не попадает. С меня, как инвалида, толку при монтаже никакого, но и уйти тоже невозможно, чуть что проверить — никто понятия не имеет, как это делать. Где можно и где нельзя, стоит Линукс, привычного графического интерфейса нет, а народ от одного слова Линукс уже в прострацию впадал.

image

Как это было не удивительно — мы успели и все заработало, что не менее удивительно. Правда, первые несколько матчей мне пришлось всем этим нагромождением из дома управлять, поставили веб-камеру, чтобы мне каток видно было.

image

Потом были еще проекты с той же фирмой — дисплеи размером поменьше, но разрешение больше, и пикселей намного больше… На видео демонстрашка — несколько панелей он нового дисплея, не помню точно, но это меньше четверти длины нормального дисплея.

Первые панели разводил другой подрядчик и жаловался, какая тяжелая это работа — тысячи светодиодов, огромная плата со всякими вырезами. Компьютер едва-едва ворочается.
Сгубил я его ни за понюшку табака — написал на Python скрипт для Kicad, который за минуты делал 99% работы по разводке регулярных структур. Убил на это пару дней, зато теперь заказчик мог капризничать, как хотел — вот здесь мне уголки закруглите, а вот тут — подвиньте проходные отверстия на 0.2 миллиметра, а то мне не нравится. Раньше любая из этих хотелок вылезла бы в дни работы и посему никаких пожеланий к переделке никогда не возникало.

image

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

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

P.S.
А дальше пойдет жестокий и беспощадный DIY.
Как-то на Али, еще до всемирного кремниевого дефицита, я по ошибке купил STM32F103RCT6 вместо STM32F103C8T6 — заказал самое дешевое, что увидел (цена была — страшно вспомнить, €0.64 за штуку с бесплатной доставкой) —, а оказалось, что на цену-то я посмотрел, а на название не обратил внимания. И ног у микросхемы почему-то многовато оказалось. Но из нее тоже получился неплохой контроллер адресуемых светодиодов, правда, в отличие от варианта на STM32F407, тянет всего 8 линий — ОЗУ маловато и SPI медленнее. Но где-то может и этого хватить. Если паять руками, то 64-ногую микросхему проще запаять, чем 100-ногую. Впрочем, это сделано было безо всякой цели, система управления по сравнению со светодиодными панелями копейки стоит.

image

Цель вообще-то была, но к делу не относящаяся: проверял еще одну свою самоделку — лазерный экспозер.

© Habrahabr.ru