Announcement

Collapse
No announcement yet.

CP-650 Serial Programming in Control4

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • CP-650 Serial Programming in Control4

    Greetings, I am trying to control volume on a CP650 via a serial connection to a Control4 controller.
    I can get Set Volume to work, but not incremental volume levels. It's not enabling the correct parameters.
    Does anyone have any experience creating a custom control system driver for this processor?
    Thanks for any insights.
    Regards
    - Joe

  • #2
    I am unaware that the CP650 has an increment/decrement command (the CP750-CP950 do). This table is its full list (to the best of my knowledge):

    Screen Shot 2024-07-16 at 6.08.04 PM.png

    Comment


    • #3
      Originally posted by Steve Guttag View Post
      I am unaware that the CP650 has an increment/decrement command (the CP750-CP950 do). This table is its full list (to the best of my knowledge):
      Automation for my 650 is on my todolist also. Is it best to just ignore the very late-add network options and stick to serial? Or are the network methods reliable too.

      Comment


      • #4
        The Ethernet interface on the CP650 is primitive and hokey. I'm sure that Steve can provide more detail, but the short version is that only one device can have the port open at any one time, and if another one tries to, the CP650's Ethernet interface can seize up completely. So yes, if you have the option of using RS232 for control of a CP650, I would be inclined to take it.

        Originally posted by Steve Guttag
        I am unaware that the CP650 has an increment/decrement command (the CP750-CP950 do).
        During the pandemic I did a VIP residence install in which basic functionality control of a CP650 was needed from Q-Sys touch panels. Because this was about the only work we had at the time (movie theaters were all closed), I had time on my hands, and so experimented with a block controller script that achieved fader nudge up/nudge down buttons by polling the CP650 for its current fader level, parsing the response to extract the actual number, and then adding or subtracting .1 from it. Here is a part of the block script:

        image.png​
        I tried to upload the whole component here in case anyone wanted to use it or play around with it, but the forum won't let me upload a .quc file - sorry.

        Comment


        • #5
          Sure, if you have a scripting environment, like QSYS or any one of another automation types, creating an increment/decrement is doable. Within QSYS, you can also create a string button that can increment/decrement at the desired amount. Similar to what you did with the CP650, for the IMS3000, I created my own up/down buttons that would increment/decrement by 0.1 and if you pressed and held, it would then ramp it up/down.

          However, it does come back to...the CP650 does not have a native increment/decrement commands. I've found that both the Ethernet and serial ports are, relatively fragile in dealing with a lot of communication and yes, the CP650's Ethernet will only handle one thing at a time (only one socket open).

          For me, the prize for the ultimate CP650 controller from QSYS goes to Chas Phillips.

          Screen Shot 2024-07-17 at 12.15.51 AM.png

          He even put in all of the possible format numbers so the virtual LCD display will indicate the format in use. The 7-segment LEDs are great too. It is the CAT779.

          Now, if you just want to get control of the CP650 (or 750 or 850)...a guy by the name of Tony Balana has a solid plugin that handles all three (selectable) and will provide the increment/decrement function too:

          Screen Shot 2024-07-17 at 12.17.36 AM.png

          Both of those were the product of Covid (at least that is when I first saw/obtained them).

          Comment


          • #6
            Thanks for the replies. Here are a couple of screen shots of the available programming interface. It's not very advanced.
            Based on your replies, I understand that there is no way to incrementally update the volume. That's unfortunate.
            I tried the preset_fader_level but I'm not sure the syntax is correct, or complete, or if tis is even the correct code.
            Using "fader_level=x\r\n" will set that level but does not offer the ability to change the volume.
            I have to believe this is possible, but I am a bit at a loss.
            Also, it is a serial (RS232) connection, not network.
            Thank you! C401.jpg C402.jpg

            Comment


            • #7
              If you read the table I posted above, this value can only be queried, not set. It is set on the unit itself so that, say Non-Sync always goes to "4.5" rather than keep the existing level. Your only choice is to really read the existing fader level, do your increment/decrement to that value and then send the new fader level. Mind you, you can't blast the CP650 too much or its Ethernet port will just shut off until the next power cycle. I tend to always have my modules know the current level (polling) so if a change is made, I don't need to make the read...just do the change.

              Comment


              • #8
                Steve and Leo:

                He is talking about using the serial port to control the CP 650. I did it at UC Irvine and many home screening rooms and there is a "send_string" command structure that WILL set fader levels via the serial port.

                Here are excerpts of the program code I wrote using AMX Axcess protocol:

                This section defines the variables used to control the CP 650:

                (* DOLBY CP650 *********************************)
                FLASH

                CP650_LEVEL_NORMAL_set
                CP650_LEVEL_NORMAL Note: These two set the fader to 7.0

                CP650_PROJECTOR
                CP650_BUFF[255]
                CP650_TRASH[255]
                CP650_LEVEL_SEND Note: The value to be sent to the CP650 in ascii

                vol_data[4]
                CP650_FORMAT
                CP650_VOL_DN
                CP650_VOL_UP
                CP650_LEVEL
                CP650_MUTE
                RESPONSE[255]​
                This section increments the fader up or down in IIRC 0.1 steps:

                active (CP650_VOL_UP):
                { if (CP650_LEVEL_SEND < 99)
                {
                CP650_LEVEL_SEND = CP650_LEVEL_SEND + 001
                SEND_STRING CP650,"'FADER_LEVEL='itoa(CP650_LEVEL_SEND),$0D,$0 A"
                if ((CP650_LEVEL_NORMAL_set)&&(CP650_LEVEL_SEND = 70))
                { off [CP650_VOL_up]
                off [CP650_LEVEL_NORMAL_set]
                }
                }
                }
                active (CP650_VOL_DN):
                { if (CP650_LEVEL_SEND > 2)
                wait 1
                {
                CP650_LEVEL_SEND = CP650_LEVEL_SEND - 001
                SEND_STRING CP650,"'FADER_LEVEL='itoa(CP650_LEVEL_SEND),$0D,$0 A"
                if ((CP650_LEVEL_NORMAL_set)&&(CP650_LEVEL_SEND = 70))
                { off [CP650_VOL_DN]
                off [CP650_LEVEL_NORMAL_set]​

                EDIT: The most important section, the one that codes the data to the CP 650 and clears the buffer:

                IF (FIND_STRING(CP650_TRASH,'fader_level=',1) )
                { RESPONSE = REMOVE_STRING(CP650_TRASH,'fader_level=',1)
                vol_data = mid_string(cp650_trash,1,2)
                cp650_level = atoi(VOL_DATA)
                IF ((!CP650_LEVEL_NORMAL_set)&&(!CP650_VOL_dn)&&(!CP6 50_VOL_UP))
                { CP650_LEVEL_SEND = cp650_level
                WAIT 05 SEND_STRING CP650,"'FADER_LEVEL=?',$0D,$0A"
                }​

                And to send the fader to 7.0 the program uses a 2 digit value to send the fader to the desired level:

                PUSH[TP,TP_VolNorm_b]
                PUSH[TP2,TP2_VolNorm_b]

                { if (CP650_LEVEL_SEND <> 70) (Changing this integer in all three instances to another value will change what the "normal" setting is.)
                { on [CP650_LEVEL_NORMAL_set]
                select
                { active (CP650_LEVEL_SEND < 70):
                { on [CP650_VOL_UP]
                }
                active (CP650_LEVEL_SEND > 70):
                { on [CP650_VOL_dn]​
                Now as for the control system Joseph is using, The basic rule for the serial protocol for the CP 650 fader seems to be an ascii value derived from an integer of zero to 100 representing the fader settings. His programmer should be able to figure out the coding to send those values to the CP 650 via the RS 232 port, which is what he is using.

                In the post above showing the programming interface, it looks like it is trying to use integers instead of ascii. Joseph, you need to get that control to output the ascii equivalent of the integer (numeric) values for it to work. You will have to set up a buffer and variable protocols to get there.


                If a dummy like me can get it to work, then a good programmer of his control hardware should have no trouble.
                Last edited by Tony Bandiera Jr; 07-17-2024, 12:22 PM.

                Comment


                • #9
                  Originally posted by Steve Guttag View Post
                  If you read the table I posted above, this value can only be queried, not set. It is set on the unit itself so that, say Non-Sync always goes to "4.5" rather than keep the existing level. Your only choice is to really read the existing fader level, do your increment/decrement to that value and then send the new fader level. Mind you, you can't blast the CP650 too much or its Ethernet port will just shut off until the next power cycle. I tend to always have my modules know the current level (polling) so if a change is made, I don't need to make the read...just do the change.
                  Yes, I did see that after the post. The issue is there may not be enough 'logic' in the current C4 driver editor to do any of this. If there is, I am just not clear on how to do it.

                  Thank you.

                  Comment


                  • #10
                    Originally posted by Joseph Re View Post

                    Yes, I did see that after the post. The issue is there may not be enough 'logic' in the current C4 driver editor to do any of this. If there is, I am just not clear on how to do it.

                    Thank you.
                    See my post above. It should be possible following the advice I gave in that post.

                    Comment


                    • #11
                      If the Control4 doesn't seem up to the task or too cumbersome, you might benefit from an automation translation layer device like a JNIOR (or the DIY equivalent) to do the heavier lifting from a scripting standpoint. There are surely 650 volume scripts out there for the JNIOR already too. The other benefit is that if the automation front end gets changed, you still have your 650 functions elsewhere, just need to write triggers for them again.

                      Comment


                      • #12
                        Originally posted by Joseph Re View Post

                        Yes, I did see that after the post. The issue is there may not be enough 'logic' in the current C4 driver editor to do any of this. If there is, I am just not clear on how to do it.

                        Thank you.
                        So, there is no 'programmer'. There is a tech who is supporting the CP-650 and film cameras at the location. He provided the ASCII codes originally. A call to Control4 basically informed us that they don't support serial connections anymore (which is almost unbelievable), so they can't help us with this configuration. So Ryan (above) mentioned a translation device which may make more sense. The tech on site said maybe a mechanical vol device that can be controlled via RS232, but no specific devices was mentioned.
                        This has become far more cumbersome than I expected.
                        Thanks for the feedback!

                        Comment


                        • #13
                          Tony, serial or Ethernet...it is the same commands. Even in your code you are using a variable (CP650_LEVEL_SEND) and testing if you are going above 100 or below 0 and if not, incrementing. The CP650_LEVEL_NORMAL is also your variable, not the CP650's. I think Joseph's problem is that he doesn't have a variable to store the existing fader so he can add/subtract and then send it back to the processor.

                          Comment


                          • #14
                            Originally posted by Steve Guttag View Post
                            Tony, serial or Ethernet...it is the same commands. Even in your code you are using a variable (CP650_LEVEL_SEND) and testing if you are going above 100 or below 0 and if not, incrementing. The CP650_LEVEL_NORMAL is also your variable, not the CP650's. I think Joseph's problem is that he doesn't have a variable to store the existing fader so he can add/subtract and then send it back to the processor.
                            Yeah, from what I was able to glean the C4 website, the real programming software is a paid product or dealer only product. The very rudimentary driver wizard he has access to may not get him across the goal line without access to the more complete programming interface that can use variables and logic. If there is a party responsible for the C4 install there, that is who to solicit. Or use the workaround of a 2nd device that can accept commands you are able to build, and has the requisite features to do the rest of the 650 serial stuff.

                            Joseph, I wasn't thinking of a separate volume device, nothing that complex, I think the C4 could still be the front end, you just have to build the real automation scripting elsewhere on something like a JNIOR or Raspberry Pi, and C4 just sends the basic commands it is able to, the translation device does the rest of the work. But it all depends what you need on the front-end.
                            Last edited by Ryan Gallagher; 07-17-2024, 09:48 PM.

                            Comment


                            • #15
                              That said the "codes" interface may also accept variables and logic, you just have to find that C4 documentation for the syntax.

                              Comment

                              Working...
                              X