-
-
Notifications
You must be signed in to change notification settings - Fork 37
Guide: Building the Orange Pi LTC SMPTE Timecode Reader, Converter & Generator
This guide is designed as a walk through to assemble and configure a basic Orange Pi (opi) LTC SMPTE Timecode Reader / Converter / Generator by @VanVught. The project in all its glory is found here. It is highly configurable and offers the ability to convert between many different types of timecode, however this guide is tailored to be simple enough to not involve any soldering. Following this guide, your Pi will be be able to receive timecode from the following sources:
- Beat Link Trigger
- TC-Net
- Midi Time Code (MTC) (over RTP (ie network midi))
- Art-Net Time Code
- Standalone generator (controlled via OSC or even MA2 integration)
It'll be then be able to output the following formats:
- SMPTE Linear Time Code (LTC) (via the 1/8" jack on the expansion board)
- Midi Time Code (MTC) (over RTP (ie network midi))
- Art-Net Time Code
Physical MIDI and LTC input require a bit of soldering which won't be covered here. Same goes for any of the displays, although they're just wires from the main pi board to the display, again soldering required. Let's get started.
- Orange Pi Zero (LTS 256MB is recommended)
- Expansion board
- Enclosure
Ali Express offers the above as a package from the manufacturer: https://www.aliexpress.com/item/4000072976827.html
- minimum 4GB microSD (uSD) card (only required to setup the opi. You will need to remove it afterwards.)
- Power supply or micro USB cable (the opi draws less than 500mA so you can power it off a USB port)
- A current OpenJDK or Java JRE distribution installed for the Remote Control Interface app
- Optional but recommended: If you're feeling brave, you can easily wire in an oled screen like this one with 4 wires: https://www.aliexpress.com/item/32896971385.html to your opi for some status. The display is a few dollars and worth having, if you need to troubleshoot.
- Also recommended: ADAFRUIT USB-TTL Serial Cable: (amazon link) for troubleshooting if something doesn't work out.
- The opi comes out of the package with the expansion header already soldered on. You can go ahead and plug the expansion board onto this header. From there you can place the entire unit inside the enclosure and screw it shut. If you plan on connecting that oled screen, I suggest you wait until everything is working. In this case, just use one or two screws to keep the enclosure together.
-
Head on over to
@vanvught
's git page to grab the uboot and ltc firmware: https://github.com/vanvught/h3dmx512-zip Scroll down to U-Boot Orange Pi Zero: uboot-orangpi_zero.zip and download the zip. You'll also need to scroll a bit further down to get the latest firmware build: LTC SMPTE Timecode Reader / Writer / Generator {zip} {Orange Pi Zero}. -
The opi is controlled via a Java app. Make sure you have java installed on your computer. Download the RemoteConfigUI.jar file from the list of files on that page as well.
-
Head over to https://www.balena.io/etcher/ and download the latest copy of etcher. Go ahead and install it.
-
Pop your SD card in. Etcher will format it, so make sure you back up any important files.
-
Unzip both zip files into their own folders. Drag the uboot-orangpi_zero.img file into Etcher and hit Flash.
-
rename the orangepi_zero.uImage.gz to uImage and copy this on to the SD card. Be sure you even remove the .gz extension. If you don't see the SD card, Etcher might've ejected it for you automatically. Don't forget to safely eject the card before you pull it out.
-
Go ahead and pop the uSD card in the opi. Plug in an Ethernet cable and finally usb power.
-
You'll see both lights on the Ethernet flash as well as a solid green (power) and flashing red (status). Hang tight as it copies the data off the card onto the opi.
-
At this point, launch the RemoteConfigUI.jar app and you should see the opi show up as LTC TimeCode 1. If this is the case, you can disconnect the usb and pull the uSD out. You shouldn't need it anymore as the firmware and config is stored on the opi. If you put the uSD back in, it'll overwrite any existing config you might have. Firmware updates and configuration are done through the RemoteConfigUI. If the opi doesn't show up in the app, you can use Refresh in the View menu to see if that helps. Also, make sure the right network interface is selected in the Network -> Interfaces menu.
That's it!
Bonus: If you were wondering how to wire in that oled I2C display, the display will have 4 terminals: VCC, GND, SCL/SCK & SDA. According to the diagram on this page, pin 1 is the pin with the little square pad. Wire the following as follows:
- Pin 1: 3.3v - VCC
- Pin 3: I2C SCA - SDA
- Pin 5: I2C SDL - SCL/SCK
- Pin 6: GND - GND
There are various different files in the Remote Configuration app. The ones important to this project are described here. The explanation of the network settings are located here. Sadly, wifi is not easily available. Depending on the network complexity of your setup, you can integrate the opi in two ways:
- Super Basic: Computer running BLT, the dj backline and the opi on the same network - If all devices are connected via a network switch, then you'll want to statically assign an ip to the opi that's in the APIPA auto ip range. This is useful if you're just taking analog LTC out of the opi into lighting or video world for example. In this situation, set a static IP of 169.254.1.1 and a subnet mask of 255.255.0.0 below in the network.txt file to be in the APIPA range. In the unlikely event you're using a router that is handing out IP addresses, go with DHCP mode.
- More Complex: Computer with BLT with two network interfaces, one just for the dj backline and the other for production where you can have lighting and video world tied in and using multiple protocols (ie Ableton Link and LTC timecode into Resolume, while running ArtNet timecode to the lighting desk, all from the opi, while the opi is receiving timecode data from BLT). In this setup, if you have a wireless router handing out dhcp ip addresses, you can leave the opi in dhcp mode, or you can set a static ip in the range of your production devices.
**Note: All parameters are optional. They all have a defined default value. The #
denotes a parameter is "commented out" or disabled or it's default setting. Remove the # if you plan on changing the default setting.
rconfig.txt
-
#display_name
This is the name that the opi identifies as. I'd make it the same as the hostname below.
If you've made changes, go ahead and hit Save from the Action menu to save your file.
network.txt
-
use_dhcp=0
Change0
to a1
if you want to use DHCP server. If a server is not found, it'll default to a 169.254.x.x address. -
ip_address=192.168.1.238
Change the dhcp value from1
to a0
above and enter an IP and netmask. Don't forget to uncomment these three lines. -
net_mask=255.255.255.0
Your subnet mask. -
hostname=allwinner_34020E
This is the hostname of your opi. Uncomment and give it a name (with no spaces). You'll need this later on, along with the ip address when setting up the triggers in BLT.
If you've made changes, go ahead and hit Save from the Action menu to save your settings.
ltc.txt
-
#source=ltc
Selects the source for timecode generation. Options are:ltc
,midi
,artnet
,tcnet
,internal
,rtp-midi
, andsystime
. If you're using BLT to drive this ship, replaceltc
withinternal
. (Don't forget to uncomment!)
# Disable outputs #
By default the opi transmits timecode via all its available outputs. I prefer to disable what I don't need, especially if it's not physically connected. Replace the 0
with a 1
to disable.
-
#disable_ltc=0
Disable if you don't want to output LTC -
#disable_midi=0
Disable if you don't have physical midi connected -
#disable_artnet=0
Disable if you're not using Art-Net timecode. Recommended unless you need it -
#disable_tcnet=0
Disable if you're not using with TC Supply's ShowKontrol. Recommended unless you need it -
#disable_rtp-midi=0
Disable if you're not using network based midi. Recommended unless you need it # OSC Server #
-
#osc_enable=0
Uncomment and change the0
to a1
to enable the osc server. You're gonna need this. -
#osc_port=8000
If you're fine with port sending out of BLT on port 8000, you can leave this as is.
Once again, if you've made changes, go ahead and hit Save from the Action menu to save your settings.