Home AMX User Forum AMX General Discussion

Problem with SONY 3CCD Camera(BRC-300)??

When I use visca protocol to control BRC-300 , it's perfect.
But , I Just can use 6 preset , why ??
Althought I can get every address byte when it move or stop.
I send the same address code is not working.
Can someone help me??

Comments

  • joelwjoelw Posts: 175
    J.Y. wrote:
    When I use visca protocol to control BRC-300 , it's perfect.
    But , I Just can use 6 preset , why ??
    Althought I can get every address byte when it move or stop.
    I send the same address code is not working.
    Can someone help me??

    Not sure why only six presets are working for you. For the BRC-H700 the document states preset value is between 0 and $F. So sixteen total.

    Packet to recall preset for BRC-H700 looks like this:
    8x 01 04 3F 02 0p FF
    x: is address (=1 to 7)
    p: Memory number (=0 to Fh)

    Do you have the protocol manual handy for the BRC-300? Email me and I'll take a look in the morning. I'm in the middle of Visca routing code currently. It routes RM-BR300 through a NI-3000, and allows control from either Netlinx or PTZ controller of a Visca bus. So far it works great, presets, tally, and all.
  • toddttoddt Posts: 28
    If I remeber right, the first 6 presets are all you can recall. There is a code block out there that will store the rest of the presets to the Code and recall them there. You might call AMX Tech Support and talk to them about it. It was 3 years or so ago that I used a BRC-300.
  • joelwjoelw Posts: 175
    toddt wrote:
    If I remeber right, the first 6 presets are all you can recall. There is a code block out there that will store the rest of the presets to the Code and recall them there. You might call AMX Tech Support and talk to them about it. It was 3 years or so ago that I used a BRC-300.

    I would confirm preset value range in the protocol manual.
  • ericmedleyericmedley Posts: 4,177
    toddt wrote:
    If I remeber right, the first 6 presets are all you can recall. There is a code block out there that will store the rest of the presets to the Code and recall them there. You might call AMX Tech Support and talk to them about it. It was 3 years or so ago that I used a BRC-300.

    You are correct. I've always thought that was a strange thing about the Sony cams. The 'code-stored' presets also can tend to drift after some time or after very rigorous use of the presets. If I remember correctly, you can store up to 99 presets in the 'code-stored' presets.
  • joelwjoelw Posts: 175
    You should also be able to query XY/ZF, store in AMX, then recall XY/ZF to absolute posistion.
  • toddttoddt Posts: 28
    It is actually a System Call that I used. Now it was for an EVI model Sony Camera, so I am not sure if it will be the same for the BRC series.
  • joelwjoelw Posts: 175
    I could be wrong but the only reference I see to visca camera presets is this:
            SYSTEM_CALL 'SONCA00F' (CAM,SAVE_PRESET_MASK|PRESET3)
            SYSTEM_CALL 'SONCA00F' (CAM,PRESET3)
    

    SYSTEM_CALL 'SONCA00F' only handles a 4 nibble (half-byte) pan value.


    The range of the 5 nibble pan value is documented as:

    $08A58 Right
    $00000 Center
    $F75A8 Left

    or in decimal:

    35416 - Right
    0 - Center
    -35416 - Left

    The two's complement of $8A58 is $FFFF75A8

    Use the lower 5 nibbles.

    In the Netlinx environment an integer is 16 bits (4 nibbles), so be sure to use a long (32 bits / 8 nibbles) to store value from query.

    This will be added to the beta libVISCA code I posted:
    DEFINE_FUNCTION INTEGER
    VISCA_set_pantilt_absolute_position_Ex(VISCAInterface_t interface, VISCACamera_t camera, char pan_speed, char tilt_speed, long pan_position, integer tilt_position)
    {
      VISCAPacket_t packet;
    
      long pan_pos;
      integer tilt_pos;
      pan_pos= pan_position;
      tilt_pos= tilt_position;
    
      _VISCA_init_packet(packet);
      _VISCA_append_byte(packet, VISCA_COMMAND);
      _VISCA_append_byte(packet, VISCA_CATEGORY_PAN_TILTER);
      _VISCA_append_byte(packet, VISCA_PT_ABSOLUTE_POSITION);
      _VISCA_append_byte(packet, pan_speed);
      _VISCA_append_byte(packet, tilt_speed);
      _VISCA_append_byte(packet, TYPE_CAST ((pan_pos & $f0000) >> 16));
      _VISCA_append_byte(packet, TYPE_CAST ((pan_pos & $0f000) >> 12));
      _VISCA_append_byte(packet, TYPE_CAST ((pan_pos & $00f00) >> 8));
      _VISCA_append_byte(packet, TYPE_CAST ((pan_pos & $000f0) >> 4));
      _VISCA_append_byte(packet, TYPE_CAST  (pan_pos & $0000f));
    
      _VISCA_append_byte(packet, TYPE_CAST ((tilt_pos & $f000) >> 12));
      _VISCA_append_byte(packet, TYPE_CAST ((tilt_pos & $0f00) >> 8));
      _VISCA_append_byte(packet, TYPE_CAST ((tilt_pos & $00f0) >> 4));
      _VISCA_append_byte(packet, TYPE_CAST  (tilt_pos & $000f));
    
      return _VISCA_send_packet_with_reply(interface, camera, packet);
    }
    
    DEFINE_FUNCTION INTEGER
    VISCA_get_pantilt_position_Ex(VISCAInterface_t interface, VISCACamera_t camera, long pan_position, integer tilt_position)
    {
      VISCAPacket_t packet;
      integer err;
    
      _VISCA_init_packet(packet);
      _VISCA_append_byte(packet, VISCA_INQUIRY);
      _VISCA_append_byte(packet, VISCA_CATEGORY_PAN_TILTER);
      _VISCA_append_byte(packet, VISCA_PT_POSITION_INQ);
      err=_VISCA_send_packet_with_reply(interface, camera, packet);
      if (err!=VISCA_SUCCESS)
        return err;
      else
        {
          if(interface.ibuf[3] = $f)  // if mantissa make a negative long
          {
    	pan_position = (((interface.ibuf[4] << 12) + 
    		         (interface.ibuf[5] << 8)  + 
    		         (interface.ibuf[6] << 4)  + 
    		          interface.ibuf[7])        | $ffff0000); 
          }
          else
          {
    	pan_position = (interface.ibuf[4] << 12) + 
    		       (interface.ibuf[5] << 8)  + 
    		       (interface.ibuf[6] << 4)  + 
    		        interface.ibuf[7]; 
          }
          tilt_position = TYPE_CAST((interface.ibuf[8]  << 12)  + 
                                    (interface.ibuf[9]  << 8)   + 
    		                (interface.ibuf[10] << 4)   +
    		                 interface.ibuf[11]); 
    
          return VISCA_SUCCESS;
        }
    }
    
  • MathieuMathieu Posts: 25
    joelw wrote:
    You should also be able to query XY/ZF, store in AMX, then recall XY/ZF to absolute posistion.


    i already use BRC 300 camera on a special application with 6 BRC camera. I build my own driver because amx didn't have built it when i wrote it. I had an issue when i tryed to send back XYZ positions. The camera didn't undersand one command. It was the same code for X, Y and Z, it worked with X and Y but not for Z. i never found the solution, andi finaly user only 6 presets. It was enoughfor thisapplication.

    someone used more than 6 presets and use store and recall XYZ?
Sign In or Register to comment.