请教一下SONY摄像机LANC控制协议
单位偷_拍机的控制器坏掉了,找不到现成的控制器,只好自己动手了。找到了sony的lanc控制协议,唉,不知道英语水平差,还是没说清楚,总之是不太明白啊。求指点!lanc协议:http://www.boehmel.de/lanc.htm 录到了lanc指令了,传上来分享一下。
http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_655928Z8P5LH.jpg
(原文件名:lanc 协议 拷贝.jpg) 唉,没人感兴趣么。经过一段时间的努力终于做好了。LANC控制设备多用在摄像机、相机控制手柄和高清晰度偷_拍设备上,现成的东西很多,资料却几乎没有。 最近我也在搞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);
}
感觉问题应该在同步上。。。 http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_667802KD8OJN.jpg
(原文件名:123.jpg)
这个是我生成的时序。。。
录制的时序是参照这里做的;http://plazma.kapsi.fi/diy/lanc_controller/index.html
16f84.做好了可以控制。想移植到avr SONY LANC 控制协议ourdev_667831AK3GIT.pdf(文件大小:246K) (原文件名:sony lanc.pdf)
原来做过一个产品航拍上使用,用飞机遥控器远程控制摄像机进行变焦及摄像,拍照等。
这里有一个制作LANC控制器的德国网站,资料很全。http://www.boehmel.de/lanc.htm#top 回复【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<5;d++) //发送数据
{
while (!(ucsr0a & (1<<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);
}
}
} mark mark! 刚才搞定了。。呵呵。的确是同步问题。
同步后发送连个字节的命令即可控制。。。
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回应数据发送完毕
} 回复【5楼】xuelx
-----------------------------------------------------------------------
呵呵。我作来就是干这个的。。。。多多交流 回复【10楼】zhaofeng2008
回复【5楼】xuelx
-----------------------------------------------------------------------
呵呵。我作来就是干这个的。。。。多多交流
-----------------------------------------------------------------------
怎么联系? 回复【12楼】ggddll
-----------------------------------------------------------------------
看我资料里有qq 加QQ木反应 MARK 这里我以前作品的视频
http://v.youku.com/v_show/id_XMjA3NzMyMDE2.html 回复【18楼】xuelx
这里我以前作品的视频
http://v.youku.com/v_show/id_xmja3nzmymde2.html
-----------------------------------------------------------------------
看到淘金里的数码条管了。 回复【18楼】xuelx
-----------------------------------------------------------------------
FATABA R6008接收机可以用么。。。。。。fataba接受2.4g和pcm接收机的输出时序和jr的不同。。有几个通道是同时开始输出的。6008是1-7通道同时开始输出 回复【20楼】zhaofeng2008
回复【18楼】xuelx
-----------------------------------------------------------------------
fataba r6008接收机可以用么。。。。。。fataba接受2.4g和pcm接收机的输出时序和jr的不同。。有几个通道是同时开始输出的。6008是1-7通道同时开始输出
-----------------------------------------------------------------------
没有试过FATABA控但应当是没有问题的 我采用是读取舵机的信号与PCMPPM2.4G调制传输方式没有任何关系。国产的天地飞也能成功通过,好使的不得了。 回复【21楼】xuelx
-----------------------------------------------------------------------
试试你就知道了。。接收机只要不是ppm的舵机输出信号时序不同。。。。。jr的没关系 mark 最近我也在研究控制摄像机,借鉴一下 楼主 或者还有没有调试成功的坛友有偿技术支持{:lol:}
页:
[1]