RS232_Dolby Cinema Processor

Hello!
This is my first post to the forum, so apologies if I get something wrong with the format. I am hoping to get help figuring out why I am unable to control a Dolby CP750 Cinema Processor over Serial RS232 (D-Sub 9 pin). I think I am close (since I am able to receive data and print it out in the Serial Monitor, but sending data seems to be my problem.

Some quick background:
I am programing a Teensy LC in the Arduino IDE and am using a Sparkfun RS232 transceiver module. When I power up the Dolby I receive a bunch of serial status data, but when I try to send a command nothing happens.

My setup looks a bit like this (excerpt):

#define CP750 Serial2
String rs232RX = 0;

void setup() { 
CP750.begin(9600, SERIAL_8N1);
}

And a snippet from my loop looks like this:

CP750.print("cp750.sys.input_mode dig_1");
Serial.print("Tx Cp750: ");
Serial.println("cp750.sys.input_mode dig_1");

Some specifications from the Dolby manual:

  • Full control of the CP750 is available through a set of ASCII commands and queries. No error correction (CRC), sync bytes, or protocol is applied to this interface.

  • The RS-232 connector supports standard 9‐pin serial connections to PC serial ports and other RS‐232 devices. It operates at 9600 baud with 8 data bits, 1 stop bit, no parity, and no flow control. It cannot be invoked while the serial data port is in use by the CP750 setup program.

I'd be happy to supply more info and details, but I don't want to overwhelm possible readers...

What have I tried so far?

  1. I tried using both Serial.write(); and Serial.print();
  2. I probed the Tx line with my DSO and was able to decode the serial commands easily. It looked like the logic level coming out of the max232 module was from zero to +12 volts.
  3. In starting the Serial object I've tried the following:
CP750.begin(9600, SERIAL_8N1);
CP750.begin(9600, SERIAL_8N1_RXINV);
CP750.begin(9600, SERIAL_8N1_TXINV);
CP750.begin(9600, SERIAL_8N1_RXINV_TXINV);
  1. I contacted Dolby and received a circuit diagram on the unit's serial port, but that didn't tell me what the minimum voltage threshold is, which I thought could be an issue.

Please let me know if you have any ideas!

Have you tried sensing the command with a CR|LF

CP750.print("cp750.sys.input_mode dig_1**\r\n**");

Without knowing the message format required, it's hard to figure out what is needed to talk to the device

Hi hzrnbgy, can you explain what you mean by message format?

Here is a screenshot from the manual that shows some example commands, but I'm not, are you talking about lower level formatting? In the manual it also says that white space is ignored.

Using "print" instead of "write" to the device will always add a cr/lf to the message. That could be a problem.
Paul

Thanks Paul. I tried using "write" but I did not get better results. Let me know if anything else occurs to you. Thanks!

I'd try a query (as mentioned in the doc you posted) and see if the device responds.

Also, can you post a complete (preferably short) version of the program that does that.

You notice in the user manual, The text of the message must begin CP750, you are using lower case cp750.
Paul

Thank you to all who offered their advice here. Some really good suggestions, and I did finally figure it out. The CP750 wants to see either a "\n" or a "\r" at the end of each command. From what I can tell either work interchangeably. Hopefully I can figure out why it still seems intermittent. I'd say 1/3 or my commands get dropped and the 2/3 go through successfully.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.