{"id":346,"date":"2012-03-12T22:37:54","date_gmt":"2012-03-12T21:37:54","guid":{"rendered":"https:\/\/andyland.info\/wordpress\/?p=346"},"modified":"2016-10-13T15:28:01","modified_gmt":"2016-10-13T14:28:01","slug":"das-ortofo-version-1","status":"publish","type":"post","link":"https:\/\/andyland.info\/wordpress\/das-ortofo-version-1\/","title":{"rendered":"Das Ortofo Version 1"},"content":{"rendered":"<p>This one might be interesting for all you GrandMa onPC users out there. Those who are operating a GrandMa Micro or Pico and are missing the motorfaders of the fullsize console might also benefit from it. Das Ortofo is a hardware-based midi processor especially designed for controlling the motorfaders of a Behringer BCF2000 and sending the corresponding MIDI-data to the GrandMA lighting desk.<\/p>\n<p>[Update 30.9.2010: I&#8217;ve built a new version which natively supports USB and which is for sale. Find it <a href=\"http:\/\/www.doktor-andy.de\/joomla15\/index.php?option=com_content&amp;view=article&amp;id=103&amp;Itemid=130\">over here<\/a> .]<\/p>\n<p>The Video says it all:<\/p>\n<p>[tube]http:\/\/www.youtube.com\/watch?v=1QmLDfRrPaw&amp;feature=player_embedded[\/tube]<\/p>\n<p>&nbsp;<\/p>\n<p>Beautiful, isn&#8217;t it?<\/p>\n<p>By having a look at the next pictures you should easily be able to find out where the name is derived from&#8230;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.andyland.info\/grafiken\/DasOrtofo\/bearb\/ortofo_019.jpg\" alt=\"\" width=\"576\" height=\"432\" border=\"0\" \/><\/p>\n<p><!--more--><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.andyland.info\/grafiken\/DasOrtofo\/bearb\/ortofo_022.jpg\" alt=\"\" width=\"576\" height=\"432\" border=\"0\" \/><\/p>\n<p>The red button resets the device, the big silver knob controls the display&#8217;s contrast. Of course it&#8217;s not really necessary to make &#8217;em that big but&#8230;it looks funny &#8211; and sick..<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.andyland.info\/grafiken\/DasOrtofo\/bearb\/ortofo_013.jpg\" alt=\"\" width=\"576\" height=\"432\" border=\"0\" \/><\/p>\n<p>The whole device is based on the Arduino Platform (Duemilanove with AtMega328). The display is connected as shown <a href=\"http:\/\/www.arduino.cc\/playground\/uploads\/ScematicLcd\/scematic_lcd.pdf\" target=\"_blank\">here<\/a>. The Midi-Connectors are attached to the RX \/ TX -Ports using a 6n138 as an optocoupler for protecting the input. Pin 8 of the optocoupler (chip enable) is derived from Pin 2 of the Arduino (should also be clear by looking at the code),<\/p>\n<p>The Code is listed at the end. first let&#8217;s have a look at how the cabling is done:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.andyland.info\/grafiken\/DasOrtofo\/bearb\/ortofo_001.jpg\" alt=\" \" width=\"576\" height=\"432\" border=\"0\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>The BCF2000 is set to Mode &#8216;S-2&#8217; and\u00a0to factory-preset &#8216;1&#8217;. The MIDI-OUT-Port is connected to the Ortofo&#8217;s MIDI-IN (the left one) and vice versa. The BCF&#8217;s MIDI-THRU-Port is connected to your GrandMa (onPC) console<\/p>\n<p>How it works:<\/p>\n<p>The Behringer controller sends out Midi CCs when a fader is moved. Every time a CC value arives at Das Ortofo it is translated into a certain Midi Note and sent back to the BCF. The CC Number corrseponding to the note&#8217;s value, the CC value being the note&#8217;s velocity. Due to the fact that the controller is set to mode &#8220;S-2&#8221; the incoming MIDI-data are internally sent to the MIDI-THRU-Port where they can be used to drive a GrandMA console. The reason why this is done is\u00a0because the GrandMa can only be controlled by MIDI Notes (many people I met told me that it&#8217;s not possible to drive faders via MIDI&#8230;.don&#8217;t believe them since this one is a rather good prove against it&#8230;).<\/p>\n<p>The Midi values that are sent out by Das Ortofo are hardcoded. The\u00a0first fader of the Behringer\u00a0causes\u00a0note C4 to be sent, the second C#4 and so on.\u00a0Furthermore the Arduino\u00a0also keeps track of 128 faderpages. Every time you hit the + \/ &#8211; button (the buttons at the lower right end of the BCF; please have another look at the video&#8230;.it&#8217;s way easier than trying to explain) the previous \/ next page of faders is recreated. Also there is a MIDI note being sent to tell the GrandMA to switch to the next \/ previous page. At this moment (July 2009) the use of the Behringer&#8217;s rotary encoders and pushbuttons\u00a0is not yet implemented. I just couldn&#8217;t decide on what to do with them.<\/p>\n<p>In order to get this whole thing working you need to tell your GrandMA what to do with the incoming Midi-Data. This is done via 2 Makros.<\/p>\n<p>This picture shows the Makro for &#8216;Page -&#8216; command. (Guess how the &#8216;Page +&#8217; one looks like.)<\/p>\n<p>(Click for larger view.)<\/p>\n<p><a href=\"https:\/\/www.andyland.info\/grafiken\/DasOrtofo\/grandmamakro.jpg\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.andyland.info\/grafiken\/DasOrtofo\/grandmamakro.jpg\" alt=\" \" width=\"576\" height=\"432\" border=\"0\" \/><\/a><\/p>\n<p>Due to the Midi values\u00a0sent out by Das Ortofo\u00a0being hardcoded you have to\u00a0connect the &#8216;Page -&#8216; Makro to GrandMA&#8217;s Midi-Button 69 and the &#8216;Page +&#8217; Makro to Midi-Button 70. (I won&#8217;t go into detail on this one. If you made it up to here you probably know how to do this.) The first time any of the Makros is triggered it takes care of connecting the right Midi-Buttons to the faders.<\/p>\n<p>Das Ortofo (of course) only works in one direction. Changing a fader directly at the GrandMa itself (let it be onPC or hardware-based) will\u00a0NOT change the state of any of the BCR&#8217;s faders. In order to get this working you&#8217;d need to decypher MALighting&#8217;s MA-Net protocol.\u00a0I started working on that one but don&#8217;t wait for\u00a0any release\u00a0about it\u00a0since\u00a0it would\u00a0probably cause\u00a0some serious\u00a0copyright-reverse-engineering-fraud-diaster. That&#8217;s just not worth it.<\/p>\n<p>Please let me know if this is useful for you. If you build one yourself I&#8217;d definitely like to see pictures of it in action.<\/p>\n<p>&nbsp;<\/p>\n<p>[Update 2.3.2010]<\/p>\n<p>The Buttons that switch the Grandma&#8217;s pages are hardcoded to the lower right-end buttons of the controller (&#8216;User buttons&#8217;). The Controller&#8217;s &#8220;Preset + \/ -&#8221; buttons are not used since they do not send any values by default. You could, however, change the behaviour of the controller&#8217;s &#8220;Preset + \/ &#8211; &#8221; with Mark van den Berg&#8217;s <a href=\"http:\/\/home.kpn.nl\/%7Ef2hmjvandenberg281\/\" target=\"_blank\">selfbuilt Editor<\/a> (which is WAY better than Behringer&#8217;s crappy JAVA-Editor) but i wanted to keep the original settings of the Behringer controller untouched.<\/p>\n<p>&nbsp;<\/p>\n<p>[Update 2.5.2010]<\/p>\n<p>If you carefully look around you will find other solutions. Some of them show the possibility of a 2-way-communication (use the mouse to move a fader at the GrandMa onPc and the BCF&#8217;s fader moves as well) . Please realize that this only works for the first two faderpages of the GrandMa onPC.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>As promised here&#8217;s the code:<\/p>\n<p>\/*<br \/>\nBehringer BCF2000\u00a0 &#8212;\u00a0 GrandMA (onPC)<br \/>\n*\/<\/p>\n<p>#include &lt;MIDI.h&gt;<br \/>\n#include &lt;LiquidCrystal.h&gt;<br \/>\n\/\/LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)<br \/>\nLiquidCrystal lcd(12, 11, 6, 7, 8, 9, 10);<\/p>\n<p>#define ActiveMidi 2\u00a0 \/\/chip enable f\u00fcr den optpkoppler<\/p>\n<p>byte Fader[128][8];\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Bank, Fader; ATMega128 schafft mit dem programm hier nicht mehr seiten.<br \/>\nbyte MidiType;<br \/>\nbyte MidiData1;<br \/>\nbyte MidiData2;<br \/>\nint intBank=0;<br \/>\nboolean TRX=true;<\/p>\n<p>void setup()<br \/>\n{<br \/>\npinMode(ActiveMidi,OUTPUT);<br \/>\ndigitalWrite(ActiveMidi,HIGH);\u00a0 \/\/optokoppler AN<br \/>\nMIDI.begin();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Launch MIDI with default options<br \/>\nMIDI.setInputChannel(1);\u00a0\u00a0\u00a0\u00a0 \/\/ Midi input channel 1<br \/>\nPrintHello();<br \/>\nintBank=0;<br \/>\n}<\/p>\n<p>void loop()<br \/>\n{<br \/>\nif (MIDI.read())<br \/>\n{<br \/>\nMidiType=MIDI.getType();<br \/>\nif (MidiType==3)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/CC in<br \/>\n{<br \/>\nMidiData1=MIDI.getData1();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ CC-Number<br \/>\nMidiData2=MIDI.getData2();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ CC-Value<br \/>\nif ((MidiData1&gt;=81) &amp;&amp; (MidiData1&lt;=88))\u00a0 \/\/einer der fader wird bewegt<br \/>\n{<br \/>\nFader[intBank][MidiData1-81]=MidiData2;\u00a0 \/\/bef\u00fcllen des arrays, der die faderwerte vorh\u00e4lt<br \/>\nlcd.setCursor(0,1);<br \/>\nlcd.print(&#8220;Fader:&#8221;);<br \/>\nlcd.print(MidiData1-81+1, DEC);<br \/>\nif (MidiData2&lt;100)<br \/>\n{<br \/>\nlcd.print(&#8221;\u00a0 Val: &#8220;);<br \/>\nlcd.print(MidiData2, DEC);<br \/>\n}else{<br \/>\nlcd.print(&#8221;\u00a0 Val:&#8221;);<br \/>\nlcd.print(MidiData2, DEC);<br \/>\n}<br \/>\nif (TRX)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/TRX=false: fader werden via RecallFader() auf position gefahren<br \/>\n{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/d.h. keine weitere\u00a0 auswertung des faderinputs n\u00f6tig<br \/>\nMIDI.send(NoteOn,MidiData1-81+60,MidiData2,1);<br \/>\n}else<br \/>\n{<br \/>\nint j;<br \/>\nfor (j=0;j&lt;=7;j++)\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/trotzdem liegen die midi-daten in der queue und w\u00fcrden gesendet,<br \/>\n{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/sobald TRX=true, daher l\u00f6schen<br \/>\nMIDI.delMsg();<br \/>\nMIDI.read();<br \/>\ndelay(5);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Midi is&#8217; langsam<br \/>\n}<br \/>\nTRX=true;<br \/>\n}<br \/>\n}<\/p>\n<p>if ((MidiData1==91) &amp;&amp; (MidiData2==127))\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Page-<br \/>\n{<br \/>\nif(intBank &gt; 0)<br \/>\n{<br \/>\nintBank=intBank-1;<br \/>\nMIDI.send(NoteOn,69,127,1);<br \/>\ndelay(10);<br \/>\nMIDI.send(NoteOn,69,0,1);<br \/>\nRecallFader();<br \/>\n}<br \/>\n}<\/p>\n<p>if ((MidiData1==92) &amp;&amp; (MidiData2==127))\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Page+<br \/>\n{<br \/>\nif(intBank &lt; 127)<br \/>\n{<br \/>\nintBank=intBank+1;<br \/>\nMIDI.send(NoteOn,70,127,1);<br \/>\ndelay(10);<br \/>\nMIDI.send(NoteOn,70,0,1);<br \/>\nRecallFader();<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n}<\/p>\n<p>void RecallFader()<br \/>\n{<br \/>\nTRX=false;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/siehe oben<br \/>\nint j=0;<br \/>\nfor (j=0;j&lt;=7;j++)<br \/>\n{<br \/>\nMIDI.send(CC,81+j,Fader[intBank][j],1);<br \/>\ndelay(5);<br \/>\n}<\/p>\n<p>lcd.clear();<br \/>\nlcd.setCursor(0,0);<br \/>\nlcd.print(&#8220;Page: &#8220;);<br \/>\nlcd.print(intBank+1, DEC);<br \/>\n}<\/p>\n<p>void PrintHello()<br \/>\n{<br \/>\nlcd.clear();<br \/>\nlcd.print(&#8220;BCF2000 GrandMA &#8220;);<br \/>\nlcd.setCursor(0,1);<br \/>\nlcd.print(&#8221; Doktor-Andy.de &#8220;);<br \/>\ndelay(3000);<br \/>\nlcd.setCursor(0,0);<br \/>\nlcd.clear();<br \/>\nlcd.print(&#8220;&#8230;waiting for&#8221;);<br \/>\nlcd.setCursor(0,1);<br \/>\nlcd.print(&#8221;\u00a0\u00a0 action&#8230;&#8221;);<\/p>\n<p>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This one might be interesting for all you GrandMa onPC users out there. Those who are operating a GrandMa Micro or Pico and are missing the motorfaders of the fullsize console might also benefit from it. Das Ortofo is a hardware-based midi processor especially designed for controlling the motorfaders of \u2026 <a class=\"continue-reading-link\" href=\"https:\/\/andyland.info\/wordpress\/das-ortofo-version-1\/\"> Continue reading <span class=\"meta-nav\">&rarr; <\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[148,5],"tags":[152,151,126,50,35,39],"class_list":["post-346","post","type-post","status-publish","format-standard","hentry","category-grandma-onpc","category-projekte","tag-bcf2000","tag-behringer","tag-dmx","tag-grandma-onpc","tag-midi","tag-usb","odd"],"_links":{"self":[{"href":"https:\/\/andyland.info\/wordpress\/wp-json\/wp\/v2\/posts\/346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/andyland.info\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/andyland.info\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/andyland.info\/wordpress\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/andyland.info\/wordpress\/wp-json\/wp\/v2\/comments?post=346"}],"version-history":[{"count":0,"href":"https:\/\/andyland.info\/wordpress\/wp-json\/wp\/v2\/posts\/346\/revisions"}],"wp:attachment":[{"href":"https:\/\/andyland.info\/wordpress\/wp-json\/wp\/v2\/media?parent=346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/andyland.info\/wordpress\/wp-json\/wp\/v2\/categories?post=346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/andyland.info\/wordpress\/wp-json\/wp\/v2\/tags?post=346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}