xiaochen 发表于 2011-7-1 15:37:47

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

单位偷_拍机的控制器坏掉了,找不到现成的控制器,只好自己动手了。找到了sony的lanc控制协议,唉,不知道英语水平差,还是没说清楚,总之是不太明白啊。求指点!
lanc协议:http://www.boehmel.de/lanc.htm

xiaochen 发表于 2011-7-8 16:32:13

录到了lanc指令了,传上来分享一下。
http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_655928Z8P5LH.jpg
(原文件名:lanc 协议 拷贝.jpg)

xiaochen 发表于 2011-8-13 08:57:33

唉,没人感兴趣么。经过一段时间的努力终于做好了。LANC控制设备多用在摄像机、相机控制手柄和高清晰度偷_拍设备上,现成的东西很多,资料却几乎没有。

zhaofeng2008 发表于 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;
      }
      UCSR0B = 0x00;//关闭串口
       delay_nms(10);
}

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

zhaofeng2008 发表于 2011-8-15 12:05:23

http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_667802KD8OJN.jpg
(原文件名:123.jpg)

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

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

xuelx 发表于 2011-8-15 13:41:40

SONY LANC 控制协议ourdev_667831AK3GIT.pdf(文件大小:246K) (原文件名:sony lanc.pdf)
原来做过一个产品航拍上使用,用飞机遥控器远程控制摄像机进行变焦及摄像,拍照等。

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

xuelx 发表于 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;
      }
      ucsr0b = 0x0......
-----------------------------------------------------------------------

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

#pragma interrupt_handler Int0:2

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

#define lanc0PORTD|=BIT(2)
#define lanc1PORTD&=~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);
          }
   }
}

wy2000 发表于 2011-8-15 14:34:25

mark

zjy9430 发表于 2011-8-15 14:50:10

mark!

zhaofeng2008 发表于 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)//通过串口发送两位命令
{   for(d=0;d<2;d++) //发送数据
   { sync();
       while (!(UCSR0A & (1<<UDRE0)));
       UDR0=send;
           delay_nms(1); //必须延时一会,在发下一位
   }
          UCSR0B = 0x00;//关闭串口
      delay_nms(12);//延时,等待dv回应数据发送完毕
}

zhaofeng2008 发表于 2011-8-15 16:47:07

回复【5楼】xuelx
-----------------------------------------------------------------------

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

ggddll 发表于 2011-8-18 22:54:53

回复【10楼】zhaofeng2008
回复【5楼】xuelx
-----------------------------------------------------------------------
呵呵。我作来就是干这个的。。。。多多交流
-----------------------------------------------------------------------

怎么联系?

zhaofeng2008 发表于 2011-8-19 17:09:16

回复【12楼】ggddll
-----------------------------------------------------------------------

看我资料里有qq

ggddll 发表于 2011-8-19 22:26:52

加QQ木反应

wjhdocter 发表于 2011-8-21 09:03:34

MARK

xuelx 发表于 2011-8-21 10:31:56

这里我以前作品的视频

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

ggddll 发表于 2011-8-21 19:39:03

回复【18楼】xuelx

这里我以前作品的视频

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

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

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

zhaofeng2008 发表于 2011-8-22 00:07:12

回复【18楼】xuelx
-----------------------------------------------------------------------

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

xuelx 发表于 2011-8-23 22:05:45

回复【20楼】zhaofeng2008
回复【18楼】xuelx
-----------------------------------------------------------------------
fataba r6008接收机可以用么。。。。。。fataba接受2.4g和pcm接收机的输出时序和jr的不同。。有几个通道是同时开始输出的。6008是1-7通道同时开始输出
-----------------------------------------------------------------------

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

zhaofeng2008 发表于 2011-8-25 10:12:12

回复【21楼】xuelx
-----------------------------------------------------------------------
试试你就知道了。。接收机只要不是ppm的舵机输出信号时序不同。。。。。jr的没关系

rfour 发表于 2011-10-28 08:37:44

mark

sunke9 发表于 2021-5-18 11:20:21

最近我也在研究控制摄像机,借鉴一下

射天狼 发表于 2022-2-26 21:50:06

楼主 或者还有没有调试成功的坛友有偿技术支持{:lol:}
页: [1]
查看完整版本: 请教一下SONY摄像机LANC控制协议