Ursa Mini 4K tally

Questions about ATEM Switchers, Camera Converter and everything live!
  • Author
  • Message


  • Posts: 1
  • Joined: Fri Mar 02, 2018 10:53 am
  • Real Name: Joao Duarte

Ursa Mini 4K tally

PostFri Mar 02, 2018 6:29 pm

I need your support regarding a studio configuration using a non-BlackMagic vision mixer and three Ursa Mini 4K:
Is it possible using a non-BlackMagic vision mixer , with GPI/GPO, activate the Tally light in the Ursa Mini 4K cameras/viewfinder ? If so, what will be necessary and what connect should I do .
I have the ATEM Talkback converter.
User avatar


  • Posts: 2829
  • Joined: Wed Jan 02, 2013 11:48 am
  • Location: The Netherlands

Re: Ursa Mini 4K tally

PostFri Mar 02, 2018 7:36 pm

You need an Arduino Uno board and the BMD SDI shield.

In the manual of the SDI shield is a perfect example on how to do Tally inputs on the arduino. My bad.. I thoughed it was.. But it was a Blink example. See code under here for an example.

From the manual of the SDI shield.
tallymixer.png (75.36 KiB) Viewed 509 times

You want to put a SDI splitter in the SDI out of the SDI Shield to feed all your cameras. The signal has ID's inside so the same signal can be send to all cameras. Only need to set the CAM ID's inside the cameras.

Here is the code for an Arduino Uno to do 4 Preview and 4 Program Tally pins to SDI.
Dont forget to remove "delay(250); " after testing.. This will make your testing easy as you can read what is happening in the serial terminal for debug.
After you are done testing and have it all wired up correct.. Remove that line and the code will execute real time speed.

Code: Select all
  SDI Tally interface based
  Turns tally of the cameras on and off based on pins pulled low.
  This interface is programed for Potential free outputs on a video mixer.
  This means that if the tally output of the video mixer is active it will make a connection to ground.
  By configuring the inputs with pull-up they are active 5V high and when pulled low to GND it will send that ports tally to the SDI output.

  Written by Daniel Wittenaar for free use.
  Use code and arduino's with care!! I'm not responsable for any damage caused by using this code!!

  When you don't know how electronics work always ask advice from an expert!

  I have put a  delay(250);   in the code. This is for debugging purposes. When done with serial debugging remove or //  the delay to have a more responsive interface.   

  This example code is in the public domain.
  You may re-distribute and share this code. But you need to leave this info unchanged and included with the code.

#include <BMDSDIControl.h>                                // need to include the library
#include <Wire.h>                                         // Included because i had error with the original BMD Lib saying Wire.h did not exist

int PGM1 = 2;
int PRV1 = 3;

int PGM2 = 4;
int PRV2 = 5;

int PGM3 = 6;
int PRV3 = 7;

int PGM4 = 8;
int PRV4 = 9;

BMD_SDITallyControl_I2C sdiTallyControl(0x6E);            // define the Tally object using I2C using the default shield address

// the setup function runs once when you press reset or power the board
void setup()
  sdiTallyControl.begin();                                 // initialize tally control
  sdiTallyControl.setOverride(true);                       // enable tally override

  pinMode(PGM1, INPUT_PULLUP);
  pinMode(PGM2, INPUT_PULLUP);
  pinMode(PGM3, INPUT_PULLUP);
  pinMode(PGM4, INPUT_PULLUP);
  pinMode(PRV1, INPUT_PULLUP);
  pinMode(PRV2, INPUT_PULLUP);
  pinMode(PRV3, INPUT_PULLUP);
  pinMode(PRV4, INPUT_PULLUP);


// the loop function runs over and over again forever
void loop()

  /// Some debug info to check if we have the right port             
  if(digitalRead(PGM1) == LOW){ Serial.println("PGM1"); }
  if(digitalRead(PGM2) == LOW){ Serial.println("PGM2"); }
  if(digitalRead(PGM3) == LOW){ Serial.println("PGM3"); }
  if(digitalRead(PGM4) == LOW){ Serial.println("PGM4"); }

  if(digitalRead(PRV1) == LOW){ Serial.println("PRV1"); }
  if(digitalRead(PRV2) == LOW){ Serial.println("PRV2"); }
  if(digitalRead(PRV3) == LOW){ Serial.println("PRV3"); }
  if(digitalRead(PRV4) == LOW){ Serial.println("PRV4"); }
  Serial.println();                                               // Print New Line
  // Use this delay only when you use the Serial Terminal for debug!!
  // turn tally ON    // Camera Number   // Program Tally    // Preview Tally
  sdiTallyControl.setCameraTally( 1, ( !digitalRead(PGM1)) , ( !digitalRead(PRV1)) );
  sdiTallyControl.setCameraTally( 2, ( !digitalRead(PGM2)) , ( !digitalRead(PRV2)) );
  sdiTallyControl.setCameraTally( 3, ( !digitalRead(PGM3)) , ( !digitalRead(PRV3)) );
  sdiTallyControl.setCameraTally( 4, ( !digitalRead(PGM4)) , ( !digitalRead(PRV4)) );

Daniel Wittenaar .:: Xtreemtec Media Productions ::. -= www.xtreemtec.nl =-
4K OBV, ATEM TVS HD, 1M/E 4K, 2M/E Broadcast Studio 4K, Hyperdeck Studio Mini, SONY FS7 4K, Ursa Broadcast 4K


  • Posts: 3
  • Joined: Tue Jul 24, 2018 10:44 pm
  • Real Name: brian reardon

Re: Ursa Mini 4K tally

PostMon Dec 03, 2018 4:30 am

Great info, thank you. Would it be possible to use a 3rd party mixer and the camera control unit? I have an ATEM switcher that is basically being used a "slave" to operate the paint functions in the software as well as the 4 bank CCU, however we want to use our existing switcher. I' am wondering if I generate a tally signal (not sure what format) of some kind, can it be integrated so that the camera control unit is effective still, however we add tally to that path as well? we are successfully running camera control through the SDI return lines, but tally is something we have yet to tackle. Any insight would be greatly appreciated by myself and many others to come I'm certain.
User avatar


  • Posts: 2829
  • Joined: Wed Jan 02, 2013 11:48 am
  • Location: The Netherlands

Re: Ursa Mini 4K tally

PostTue Dec 04, 2018 12:28 pm

Add the shield between the Atem output and the sdi districbution to the cameras.

Code: Select all
sdiTallyControl.setOverride(true);                       // enable tally override
Means it only affects the Tally data and will leave the CCU data unchanged.. So it will overwrite the Tally coming from the Atem with the Tally Data you generate from your own board. ;)

For control without an Atem you could look into the control panels of Skaarhoj. But you just might keep the Atem and buy the RCP controller for the Atem to have a nice integrated solution. :)
Daniel Wittenaar .:: Xtreemtec Media Productions ::. -= www.xtreemtec.nl =-
4K OBV, ATEM TVS HD, 1M/E 4K, 2M/E Broadcast Studio 4K, Hyperdeck Studio Mini, SONY FS7 4K, Ursa Broadcast 4K

Return to Live Production

Who is online

Users browsing this forum: Mark Weiss and 6 guests