Add a log post on opentallyligt

Fri, 06 Dec 2019 00:59:03 +0100

author
David Douard <david.douard@sdfa3.org>
date
Fri, 06 Dec 2019 00:59:03 +0100
changeset 125
669eb33e410b
parent 124
ed357d9b4845
child 126
521c35556177

Add a log post on opentallyligt

content/images/opentally/back.jpg file | annotate | diff | comparison | revisions
content/images/opentally/complete-unit.jpg file | annotate | diff | comparison | revisions
content/images/opentally/enclosure-2.jpg file | annotate | diff | comparison | revisions
content/images/opentally/enclosure.jpg file | annotate | diff | comparison | revisions
content/images/opentally/front.jpg file | annotate | diff | comparison | revisions
content/images/opentally/opentally-pcb-1.jpg file | annotate | diff | comparison | revisions
content/images/opentally/opentally-v3.jpg file | annotate | diff | comparison | revisions
content/images/opentally/programmer-mcu.jpg file | annotate | diff | comparison | revisions
content/images/opentally/programmer.jpg file | annotate | diff | comparison | revisions
content/images/opentally/proto.jpg file | annotate | diff | comparison | revisions
content/images/opentally/proto2.jpg file | annotate | diff | comparison | revisions
content/opentally.rst file | annotate | diff | comparison | revisions
Binary file content/images/opentally/back.jpg has changed
Binary file content/images/opentally/complete-unit.jpg has changed
Binary file content/images/opentally/enclosure-2.jpg has changed
Binary file content/images/opentally/enclosure.jpg has changed
Binary file content/images/opentally/front.jpg has changed
Binary file content/images/opentally/opentally-pcb-1.jpg has changed
Binary file content/images/opentally/opentally-v3.jpg has changed
Binary file content/images/opentally/programmer-mcu.jpg has changed
Binary file content/images/opentally/programmer.jpg has changed
Binary file content/images/opentally/proto.jpg has changed
Binary file content/images/opentally/proto2.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/opentally.rst	Fri Dec 06 00:59:03 2019 +0100
@@ -0,0 +1,214 @@
+================
+ OpenTallyLight
+================
+
+:Author: David Douard
+:Category: Electronics
+:Tags: ITC100, Tally Ligth, Arduino, Firmata
+
+
+A month ago, a friend of mine called me to ask for help with a technical device
+that seemed not to work properly.
+
+He was testing with a friend some video recording setup. They use vMix_ to mix
+(live) video streams from 4 (or more) vide cameras (Panasonic GH5 if I'm not
+mistaken). They also have a DataVideo ITC100_ intercom system. Now the problem
+was: how to control tally lights via the ITC100_ from vMix_?
+
+Surprisingly there are not so many affordable solutions on the market.
+Eventually, they found one device, made by a small US company, that would fit
+the needs. It's the setup of this very device that was not working properly
+when they called me.
+
+TL;DR;
+======
+
+Go to the `project's gitlab page`_ if you want the kicad project files.
+
+_`project's gitlab page`: https://framagit.org/douardda/opentallylight
+
+
+The non working tally light controller
+======================================
+
+The device itself is a small-factor plastic box with a USB B connector, a LED
+indocator, plus a pair of HD15 connectors (for the connection with the
+ITC100_).
+
+The first unsual fact was the LED indicator was not on. But that not the only
+bizarre stuf:
+
+- the USB device was sometimes identified by the PC, sometimes not (and no it
+  was not a bad contact),
+
+- when plugged to the ITC100, some tally lights immediately lighed up but quite
+  dimly,
+
+- and no attempt to change the current and preview streams did not change
+  anything on the tally light side.
+
+So I grabbed the device home, opened it up and tried to identify a possible
+problem. At that time, we knew the PCB had a problem (because of the LED
+staying off), and the seller sent a new PCB (without the case to save a bit on
+the shipment), so I was not too worried of hacking the dead PCB.
+
+I discovered a short circuit between the pads of the LED, and this was
+disturbing the 5V USB supply. In fact, depending on the hability for the USB
+ports used on the PC to deliver enought current to actually power the
+microcontroller or not, the device was seen by the PC or not.
+
+I though this was the problem, so I just removed the LED and it's limiting
+current resistor: no more over current on the 5V rail, the device was now
+properly recongnized by the PC every time weplugged it in.
+
+I also tried to understand a bit the circuit which was in fact dead simple: a
+PIC18F4553 microcontroller is presented as a HID device to the PC and control
+directly (via a resistor) the pins of the HD15 connectors.
+
+So I tried to 'reverse engineer' the "control" protocol and since it was a
+simple HID device, I just wrote a small Python script to try all the possible
+addresses on the first 2 bytes, using pyhidapi_. And I quickly discovered how
+to control individual pins connected controlling the tally lights (via the
+ITC100_). On my Linux machine with a simple LED connected directed to the HD15
+connector, it was looking like it was working.
+
+.. _pyhidapi: https://github.com/apmorton/pyhidapi
+
+But once plugged on the ITC100_, it was still not working. Same erratic
+behavior, same total absence of actual control of the tally lights.
+
+This time I had a multimeter with me, so I took measurments on the ITC100_
+side: each tally light signal was at 12V! and had to be pulled down to ground
+to light the corresponding tally light on.
+
+Since the device was attempting to control directly these signals from the PIC,
+no way this could have ever worked. And this was sold something like 650US$
+plus shipment...
+
+A first prototype
+=================
+
+So I explained to my friends there was no possible way of making this device
+work as intended: it was just not designed correctly. Meanwhile, one of them
+told me that vMix also have support for controlling tally light via
+Arduino-based setups using the Firmata_ protocol.
+
+.. _Firmata: https://firmata.org
+
+Since the fiasco with the "professional" device they bouight, they were really
+on the urgent need for a working solution, like for the day after, so I spent
+the evening building a very rough prototype.
+
+I wanted to provide them a better solution, besides a working one. Like with
+proper galvanic isolation between the microcontroller and the ITC100_ part of
+the circuit.
+
+Since I had no time nor enough optocouplers in my stash of junk parts, so I
+just used regular non isolated 2N2222 to control the ITC100_ tally light lines.
+
+.. image:: {static}images/opentally/proto.jpg
+   :alt: A very rough protoype of OpenTallyLight
+
+It's a very crude protoype, but i worked! Believe it or not, but they have been
+able to record several events with this board!
+
+A (slightly) better protoype
+============================
+
+Since we validated the Arduino and Firmata based approach, I proposed them to
+design and build a better device.
+
+At first, I kept the idea of using an existion arduino compatible board and
+only design a daughter board for the optocouplers and the connectors.
+
+I chose the Sparkfun Pro Micro: it was one of the smallest board with enough
+pins to drive the 8 tally lights (each with 2 LEDs, the green for preview
+signaling, and the red for signaling the recording in progress).
+
+So I designed a first PCB (in fact several of them, but meh) using Kicad_.
+
+In the mean time, I also spent quite some time looking for a nice aluminium
+enclosure for the PCB. I finally found a small extruded one for a 80x50mm PCB
+on aliexpress. It was perfect, so I ordered 5 of them.
+
+I also decided to replace the HD15 connectors by RJ45 ones, then assemblng
+custom cables from shielded RJ4 Cat6 ones.
+
+So I ended up with this design:
+
+.. image:: {static}images/opentally/opentally-pcb-1.jpg
+   :alt: A slightly better design of OpenTallyLight
+
+
+Looks neat, but... I did not realize I put the RJ45 socket backwards! Doh!
+
+.. image:: {static}images/opentally/proto2.jpg
+   :alt: A (not so) better proto of OpenTallyLight
+
+In order to test is nometheless, I put the Pro Micro on the back side of the
+PCB (otherwise I was not able to plug the RJ45 cable in).
+
+Unfortunately, if this board worked fine on Linux (I mean the Firmata protocol
+part, since vMix does not work on Linux), the Firmata protocol on Pro Micro is
+not working on Windows. vMix was not able to establish the connection with the
+Pro Micro, neither did the Firmata test program available on the Firmata_ web
+site. I'm not sure why it did not work on Windows, but I had no time nor the
+desire to debug this Windows evil misbehavior.
+
+I looked in my tray of development boards, and found a few Nucleo ones that are
+supported by the Arduino environment and have almost compatible pinout with the
+Pro Micro. I had to budge a pair of tracks on the PCB, but I could make it work.
+
+OpenTallyLight
+==============
+
+So I designed a new version of the board. This time I stick to a good known
+working pair: an ATmega328P + FT232RL based solution (the Pro Micro is based on
+the ATmega32U4 which embeds the USB controller).
+
+I wanted to use a USB B connector rather than a micro USB one (too fragile for
+this kind of environment), and since I also wanted the design to stay small
+enough to fit in my cute little enclosures, I decided to implement the arduino
+on the PCB itself.
+
+The PCB design looks like:
+
+.. image:: {static}images/opentally/opentally-v3.jpg
+   :alt: A better design for OpenTallyLight
+
+Which gives, in real life:
+
+.. image:: {static}images/opentally/front.jpg
+   :alt: Front side of the PCB
+
+.. image:: {static}images/opentally/back.jpg
+   :alt: Back side of the PCB
+
+And the result once installed in the enclosure:
+
+.. image:: {static}images/opentally/complete-unit.jpg
+   :alt: The completed OpenTallyLight
+
+.. image:: {static}images/opentally/enclosure.jpg
+   :alt: The completed OpenTallyLight (enclosure front)
+
+.. image:: {static}images/opentally/enclosure-2.jpg
+   :alt: The completed OpenTallyLight (enclosure back)
+
+
+The good news is it worked immediately. The bad news is I forgot to put an ICSP
+connector on this PCB. So I had to burn an Arduino bootloader on the ATmega
+chip before I soldered it on the PCB.
+
+
+
+
+
+
+
+
+
+
+.. _vMix: https://www.vmix.com/
+.. _ITC100: https://www.datavideo.com/eu/product/ITC-100
+.. _kicad: https://kicad.org

mercurial