搜索
bottom↓
回复: 25

请教一下SONY摄像机LANC控制协议

[复制链接]

出0入0汤圆

发表于 2011-7-1 15:37:47 | 显示全部楼层 |阅读模式
单位偷_拍机的控制器坏掉了,找不到现成的控制器,只好自己动手了。找到了sony的lanc控制协议,唉,不知道英语水平差,还是没说清楚,总之是不太明白啊。求指点!
lanc协议:http://www.boehmel.de/lanc.htm

出0入0汤圆

 楼主| 发表于 2011-7-8 16:32:13 | 显示全部楼层
录到了lanc指令了,传上来分享一下。

(原文件名:lanc 协议 拷贝.jpg)

出0入0汤圆

 楼主| 发表于 2011-8-13 08:57:33 | 显示全部楼层
唉,没人感兴趣么。经过一段时间的努力终于做好了。LANC控制设备多用在摄像机、相机控制手柄和高清晰度偷_拍设备上,现成的东西很多,资料却几乎没有。

出0入0汤圆

发表于 2011-8-15 11:56:39 | 显示全部楼层
最近我也在搞lanc。也是一头雾水,用逻辑分析仪录了时序。已经模拟出了时序可是就是不工作啊。。

void sync(void)
{    while(1)
  {UCSR0B = 0x00;//关闭串口
   DDRD_1=0;   //TXD为输入
   delay_nus(40); //维持53us
   while(PIND_1==1);
   break;
  }
}

main()
{       

      sync();
      UCSR0B = 0x98;//打开串口
      for(d=0;d<5;d++) //发送数据
      {
        while (!(UCSR0A & (1<<UDRE0)));
        UDR0=com[d];
      }
      UCSR0B = 0x00;  //关闭串口
       delay_nms(10);
}

感觉问题应该在同步上。。。

出0入0汤圆

发表于 2011-8-15 12:05:23 | 显示全部楼层

(原文件名:123.jpg)

这个是我生成的时序。。。

录制的时序是参照这里做的;http://plazma.kapsi.fi/diy/lanc_controller/index.html
16f84.做好了可以控制。想移植到avr

出0入0汤圆

发表于 2011-8-15 13:41:40 | 显示全部楼层
SONY LANC 控制协议ourdev_667831AK3GIT.pdf(文件大小:246K) (原文件名:sony lanc.pdf)
原来做过一个产品  航拍上使用,用飞机遥控器远程控制摄像机进行变焦及摄像,拍照等。

这里有一个制作LANC控制器的德国网站,资料很全。http://www.boehmel.de/lanc.htm#top

出0入0汤圆

发表于 2011-8-15 13:58:21 | 显示全部楼层
回复【3楼】zhaofeng2008
最近我也在搞lanc。也是一头雾水,用逻辑分析仪录了时序。已经模拟出了时序可是就是不工作啊。。
void sync(void)
{    while(1)
  {ucsr0b = 0x00;//关闭串口
   ddrd_1=0;   //txd为输入
   delay_nus(40); //维持53us
   while(pind_1==1);
   break;
  }
}
main()
{
      sync();
      ucsr0b = 0x98;//打开串口
      for(d=0;d&lt;5;d++) //发送数据
      {
        while (!(ucsr0a &amp; (1&lt;&lt;udre0)));
        udr0=com[d];
      }  
      ucsr0b = 0x0......
-----------------------------------------------------------------------

LANC协议的第O,1字节有一个同步头是由摄像机送出的。控制协议字令需接在同步头后送给摄像机的。你采用串口输出方式没有速率是对的,可能是时序上没有吻合上,我采用外中断的方式来检测同步头,而后在中断处理中将端口变为输出方式输出指令。
#include <iom16v .h>
#include <macros.h>
#include "delay.h"
#define  uchar unsigned char
#define  uint  unsigned int
#define  key1_down  ((PIND&=BIT(0))==0x00)
#define  key2_down  ((PIND&=BIT(1))==0x00)

#pragma interrupt_handler Int0:2

#define data_out   DDRD|=BIT(2)
#define data_in    DDRD&=~BIT(2)

#define lanc0  PORTD|=BIT(2)
#define lanc1  PORTD&=~BIT(2)

uint plus;  // 定时器计数暂存
  
  /*中断初始化*/
void INT0_init()
{
  
  MCUCR|=0x01;                    /*任意电平变化触发中断*/
  GICR=(1<<INT0);                 /*使能外部中断0请求*/
  SREG=0x80;                      /*使能全局中断*/
}

/* 中断0处理子函数*/
   void Int0()
{
    if(PIND&=BIT(2))              //判断是否高电平触发中断 如果是定时器1开时计数
      {TCCR1B=0X02;}             // 4MHZ定时器8分计数 2MS-10MS 计数值1000-5000
   else  
   {TCCR1B=0X00;plus=TCNT1;      // 如是低电平 关闭计数器 并将计数值取出。计数器清零
         TCNT1=0;}
}


//送给摄像机指令函数//
  void commn(uchar j)   
{   uchar i;
    for(i=0;i<8;i++)
           {
            if((j>>i)&0x01) lanc1;
                   else lanc0;
                  delay_nus(23);
            }
}
//送给摄像机数据函数//
  void data(uchar j)
{   uchar i;
    for(i=0;i<8;i++)
           {
            if((j>>i)&0x01) lanc1;
                   else lanc0;
                  delay_nus(23);
            }
}
//识别摄像机送的同步信号并送出命令与数据函数//
void camera_com(uchar m,uchar d)
{
        if(plus>=2000)
         {delay_nus(23);
                  SREG=0x00;
                  data_out;
                  commn(m);
                  lanc0;
                  data_in;
                 while(PIND&=BIT(2));
                  delay_nus(25);
                  data_out;
                  data(d);
                  lanc0;
                  data_in;
                  SREG=0x80;
                  while(PIND&=BIT(2));
                 }
}


void main()
{
   
   DDRA=0XFF; PORTA=0XFF;
   DDRD=0X00; PORTD=0XFF;
   INT0_init();
   while(1)
   {
     if(key1_down)
        {
            camera_com(0x28,0x39);
                }
           
     else if (key2_down)
          {
            camera_com(0x28,0x3b);
          }
   }
}

出0入17汤圆

发表于 2011-8-15 14:34:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-15 14:50:10 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-8-15 16:44:29 | 显示全部楼层
刚才搞定了。。呵呵。的确是同步问题。
同步后发送连个字节的命令即可控制。。。
3个定时器让我都用作他用了,直接用9600 8n 1串口
检测同步时关闭串口当普通io。
void sync(void)
{
   while(1)
  {UCSR0B = 0x00;//关闭串口
   DDRD_1=0;   //TXD为输入
   delay_nus(20); //维持53us
   while(PIND_1==1); //等待txd为低
   UCSR0B = 0x98;    //打开串口
   break;
  }
  
}

void send_com(char send[2])  //通过串口发送两位命令
{   for(d=0;d<2;d++) //发送数据
     { sync();
       while (!(UCSR0A & (1<<UDRE0)));
       UDR0=send[d];
           delay_nms(1); //必须延时一会,在发下一位
     }
          UCSR0B = 0x00;//关闭串口
      delay_nms(12);//延时,等待dv回应数据发送完毕
}

出0入0汤圆

发表于 2011-8-15 16:47:07 | 显示全部楼层
回复【5楼】xuelx
-----------------------------------------------------------------------

呵呵。我作来就是干这个的。。。。多多交流

出0入0汤圆

发表于 2011-8-18 22:54:53 | 显示全部楼层
回复【10楼】zhaofeng2008
回复【5楼】xuelx  
-----------------------------------------------------------------------
呵呵。我作来就是干这个的。。。。多多交流
-----------------------------------------------------------------------

怎么联系?

出0入0汤圆

发表于 2011-8-19 17:09:16 | 显示全部楼层
回复【12楼】ggddll
-----------------------------------------------------------------------

看我资料里有qq

出0入0汤圆

发表于 2011-8-19 22:26:52 | 显示全部楼层
加QQ木反应

出0入0汤圆

发表于 2011-8-21 09:03:34 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-8-21 10:31:56 | 显示全部楼层
这里我以前作品的视频

http://v.youku.com/v_show/id_XMjA3NzMyMDE2.html

出0入0汤圆

发表于 2011-8-21 19:39:03 | 显示全部楼层
回复【18楼】xuelx

这里我以前作品的视频
  
http://v.youku.com/v_show/id_xmja3nzmymde2.html

-----------------------------------------------------------------------

看到淘金里的数码条管了。

出0入0汤圆

发表于 2011-8-22 00:07:12 | 显示全部楼层
回复【18楼】xuelx
-----------------------------------------------------------------------

FATABA R6008接收机可以用么。。。。。。fataba接受2.4g和pcm接收机的输出时序和jr的不同。。有几个通道是同时开始输出的。6008是1-7通道同时开始输出

出0入0汤圆

发表于 2011-8-23 22:05:45 | 显示全部楼层
回复【20楼】zhaofeng2008
回复【18楼】xuelx  
-----------------------------------------------------------------------
fataba r6008接收机可以用么。。。。。。fataba接受2.4g和pcm接收机的输出时序和jr的不同。。有几个通道是同时开始输出的。6008是1-7通道同时开始输出
-----------------------------------------------------------------------

没有试过FATABA控  但应当是没有问题的 我采用是读取舵机的信号  与PCM  PPM  2.4G调制传输方式没有任何关系。国产的天地飞也能成功通过,好使的不得了。

出0入0汤圆

发表于 2011-8-25 10:12:12 | 显示全部楼层
回复【21楼】xuelx
-----------------------------------------------------------------------
试试你就知道了。。接收机只要不是ppm的舵机输出信号时序不同。。。。。jr的没关系

出0入0汤圆

发表于 2011-10-28 08:37:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2021-5-18 11:20:21 | 显示全部楼层
最近我也在研究控制摄像机,借鉴一下

出0入16汤圆

发表于 2022-2-26 21:50:06 | 显示全部楼层
楼主 或者还有没有调试成功的坛友  有偿技术支持
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 -- 东莞阿莫电子网站 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2023-1-31 18:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表