2 заметки с тегом

Arduino

Электронная хлопушка IMSLATE-1. Про чтение таймкода

Типы штекеров для синхронизации таймкода

Оказалось, что существует несколько видов штекера для синхронизации таймкода. Вот что мне удалось найти:

  • 3-Pin LEMO Connectors
  • 4-Pin LEMO Connectors
  • 5-Pin LEMO Connectors
  • BNC Female
  • BNC Male

В принципе все сводится к BNC и LEMO.

Другие хлопушки

Betso WTCS-1 имеет на борту 5-Pin LEMO коннектор с такой вот распиновкой

betso Pin out

Amibient Lockit Slate ACN-LS имеет 5-Pin LEMO с такой вот распиновкой

ambient Pin out

Denecke dcode TS-TCB имеет 5-Pin LEMO. В описании сказано pin 4+ 6/14V DC, pin 1 GND — полной распиновки не нашел. Т. е. питание идет на 4 и 1 пин. Все как у Betso. Тайм код заводится по этому же гнезду, значит можно предположить что все же какой-никакой стандарт имеется.

То же самое по сути подтверждает картинка с сайта SoundDevices (без учета питания)

SoundDevices Pin out

Значит можно ставить разъем 5-Pin LEMO и заводить таймкод на 2 пин, а пин 1 использовать как землю.

Вот еще с сайта Denecke

Denecke Pin out

На чип и дип посмотрел цены на коннекторы.

Lemo 5-pin

На Али в целом ситуация радужнее.

Lemo 5-pin

Камеры

Arri
Использует 5-Pin LEMO

Canon
Почти все BNC

Sony
Почти все BNC

Red
LEMO 4-Pin

Камеры что я видел в основном имеют BNC коннектор. И такой же разъем используют аудиорекордеры. И в этом случае поможет переходник между разъемами.

Чтение таймкода

У меня неоткуда было взять тестовый сигнал, поэтому я сгенерировал его на компьютере используя эту программу.

TimeCode generator mac os

И есть еще замечательный сайт, где можно сгенерировать аудиофайл с таймкодом.

Прежде чем переносить код и схемы на основной проект — все тестирую на отдельном контроллере. Как было с кнопками например и дисплеями. Ридер таймкода собрал на Arduino Uno.

Т. к. сигнал SMPTE использует двухфазную маркировку (Bi-Phase Mark), то единицу или ноль нужно считать по длине импульса. Ноль всегда длинее.

Протокол:

Timecode Specification

Т. к. по сути таймкод это набор имульсов, то сигнал можно прослушать. Похоже на среднее между электроникой и шумом. Но сигнал этот в пределах -V...+V, а нам нужен 0..+V. Преобразовать его в удобный для чтения можно с помощью схемы (в сети полно схем и все они однотипные, на транзисторе) — гуглится SMPTE Interface.

По формату таймкода есть наикрутейшая статья, вот она. Про историю этого всего там тоже написано.

И так, вот он формат сигнала.

SMPTE Format Signal

В предыдущем посте я писал, что фактически нам нужно слушать сигнал и ловить там комбинацию 1011111111111100 (sync word). Длина его составляет 80 бит.

Здесь нагляднее. Если появилось 12 единичек, значит это sync word.

SMPTE

И уже от него считаем. Так нужно, потому что мы не знаем с какого момента к нам идет передача, ведь провод могут воткнуть в середине передачи. Поэтому проще вычленить эти 12 единиц и читать дальше. Как видно из таблицы, если 10 бит — единица, значит это drop frame.

Макет для чтения

Я взял обычный аудиокабель, штекер вставил в гнездо наушников компьютера и завел сигнал на схему. От количества FPS зависит длина бита.

24 кадра

Arduino SMPTE Reader Arduino SMPTE Reader

29.97 кадров (30000/1001, т. е. drop frame)

Arduino SMPTE Reader Arduino SMPTE Reader

30 кадров

Arduino SMPTE Reader Arduino SMPTE Reader

Вычисляя среднюю длина бита я могу переключать режим работы. Это довольно легко сделать между 24 и 30 кадрами, а вот между 29.97/30 и 24/25 сделать сложнее, т. к. сигнал с помехами и точности не хватает, хотя закономерность есть.

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

Теперь надо интегрировать схему и код в саму хлопушку.

Электронная хлопушка IMSLATE-1. Первый прототип

Прототип хлопушки на Arduino. Arduino Slate Capperboard

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

Электроника

Макет я решил собрать на базе Arduino. Микроконтроллер ATmega32U4 — 8-бит AVR.

В прототипе использовал Real Time Clock чип без TXCO, это такая штука термокопенсация — нужна чтобы кристалл при любой температуре выдавал стабильную частоту. А нам это невероятно важно, ведь мы считаем таймкод. Без этой штуки стабильная работа при перепадах не гарантируется. Зная как снимается кино, от -30 до +30 в среднем, было решено заменить его на чип с TXCO в следующей итерации.

Прототип хлопушки на Arduino. Arduino Slate Capperboard. Меню режима работы Прототип хлопушки на Arduino. Arduino Slate Capperboard. Меню SD карты

ПО

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

Полноценная отладка предстоит, когда соберу корпус.

Работа хлопушки

Датчик Холла реагирует на магнитное поле. На верхней доске будет магнит, а на корпусе, на верхней доске собственно сам датчик. Это намного надежнее электрического контакта.

В данный момент я вывел кнопку, нажимая на которую происходит «хлопок». Дубль прибавляется, все работает. В планах приладить датчик Холла.
Кроме того сейчас есть кнопки управления Roll, Scene (+ будет еще Take). И три кнопки относящиеся к настройке, это: Menu, ▲, ▼.

Некоторые решения

Первоначально я хотел использовать семисегментные индикаторы для номера сцены и дубля. Но отсмотрев несколько бэкстейджей коллег, я понял, что многие используют буквенные индексы к сценам. Типа 12A или 101C. Конечно, в сегментный индикатор можно поместить и буквы, но список их будет ограничен: A, C, E, F, G, J, L, H, O, P, S. B не получается, потому что похожа на 8. R, потом что похожа на A. Таким образом пришлось от них отказаться.

Кроме того, это не сложности с буквенными индексами сцен. Большинство (в том числе и я) используют только цифры. Ими проще управлять, для этого на переднюю панель и вынесены кнопки. Я долго думал, как же сделать управление символами если будут буквы. Тем более, что у кого-то может быть свой хитрый код кодировки сцен. Решение пока такое:

Если нумерация сцен отличается от цифрового, нужно будет создать обычный текстовый файл format.txt и положить его на флешку хлопушки. В самом файле формат записи должен быть такой:

0.0A.0

Т. е. если идет цифра, нужно поставить 0, если еще и буква после цифры, то добавляем A. Управление сведется таким образом, что цифры будут управляться этими же кнопками на панели, а буквы боковыми кнопками (вверх-вниз) от A до Z. Собственно Roll, scene, take делится точкой.

Порядок дублей

Есть идея, которую я очень хочу реализовать. Каждый хлопок записывается в файл, типа лога. Это сам таймкод и полный номер дубля. Все в формате CSV, все в своей колонке.
Собственно поэтому у хлопушки есть SD карта. Сейчас все вот в таком виде:

TimeCode,Roll,Scene,Take
00:00:01;11,7,9,5
00:00:06;13,7,9,6
00:00:08;07,7,9,7
00:04:36;12,7,9,8
00:04:42;12,7,9,9
00:00:05;27,7,9,9
00:00:07;20,7,9,10
00:00:12;04,7,9,10
00:00:01;26,7,9,10
00:00:07;08,7,9,11
00:00:04;08,7,9,16
00:00:05;27,7,9,17
00:00:33;04,7,9,18
00:00:40;05,7,9,19
00:00:47;05,7,9,20
00:03:24;08,7,9,21
00:25:15;20,7,9,22
02:08:40;18,7,9,23
13:37:44;13,7,9,24

В каждом видеофайле есть таймкод, его возможно извлечь. Мы будем знать время начала записи и время конца записи. Используя время хлопка с SD-карты хлопушки мы можем проверить, входит ли данное время в промежуток записи. Если да — значит этот дубль и есть. Все это работает конечно при синхронизированном времени хлопушки и камеры.

Способ организации материала используя данные с хлопушки - таймкод и номер дубля

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

А теперь собственно следующие важные задачи.

Синхронизация таймкода. Как? Куда?

Без возможности хоть как-то указать таймкод хлопушки — никуда. Указывать вручную это конечно мучение. В данный момент она стартует всегда с 00:00:00:00. Поэтому провожу эксперименты считывания таймкода по линии. Изучаю формат данных SMPTE и то, как это устроено у всевозможных камер и генераторов/синхронизаторов. На моей C100 отдельного штекера под TC нет и это немного усложняет работу.

По формату, судя по всему, нужно слушать сигнал и ловить 1011111111111100 (sync word), а то что между ними и есть искомые данные.

Формат данных таймкода SMPTE

Будет успех если получится синхронизироваться с разными устройства.

Дисплей

У хлопушки будет два дисплея, один для таймкода, второй для номера дубля. Дисплеи будут собраны на светодиодных матрицах 8x8. У меня есть одна такая матрица. Пока составляю символы и смотрю как они будут помещаться.

Дизайн хлопушки

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