磁动力电子网-雕刻机DIY论坛,单片机论坛,CNCDIY,DIYCNC

 找回密码
 加入磁动力

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5758|回复: 7

使用51单片机diy佳能单反相机RC-1遥控器的过程(绝对原创包括逆向工程)

[复制链接]
发表于 2011-8-31 21:26:00 | 显示全部楼层 |阅读模式
 

昨天经过测试,使用51单片机山寨RC-1遥控器,遥控佳能450D相机的实验初步取得成功。

实验器材:

山寨遥控器材:

硬件:51实验板,板载89S52,并口ISP,3.2,、3.3口为按键,1.0口外接红外发射二极管(直接驱动,功率较小,只为实验)。

软件:keil c

过程:

按照逆向工程思路,首先对RC-1的发射信号进行分析。

发现一网站,将其信号用示波器观察,发现,其通讯协议与其他协议不同。它使用了两个脉冲群作为一个控制信号。

该遥控器有两种控制信号。

一是即按即拍功能,按下按键,相机即时拍摄。

 

使用51单片机diy佳能单反相机RC-1遥控器的过程(绝对原创包括逆向工程)

使用51单片机diy佳能单反相机RC-1遥控器的过程(绝对原创包括逆向工程)

二是延时拍摄功能,按下按键,相机延时两秒拍摄。

使用51单片机diy佳能单反相机RC-1遥控器的过程(绝对原创包括逆向工程)

使用51单片机diy佳能单反相机RC-1遥控器的过程(绝对原创包括逆向工程)

在两个控制信号中,都有两个脉冲群,其中的脉冲频率为32700赫兹,脉冲个数均为16个,不同的是两个脉冲群之间的相隔时间。

在第一个信号中,延时7.33毫秒,在第二个信号中,延时5.36毫秒。

使用51单片机diy佳能单反相机RC-1遥控器的过程(绝对原创包括逆向工程)

使用51单片机diy佳能单反相机RC-1遥控器的过程(绝对原创包括逆向工程)

使用51单片机diy佳能单反相机RC-1遥控器的过程(绝对原创包括逆向工程)

使用51单片机diy佳能单反相机RC-1遥控器的过程(绝对原创包括逆向工程)

在研究完上图后,以及经过网站作者的容错实验后,总结出了RC-1的通讯协议:


Parameter

Original RC-1

Tolerance

脉冲数

16

9 - 22

脉冲频率

32700 Hz

29800 - 35500 Hz

即按即拍功能信号延时

7.33 ms

7.0 - 7.7 ms

延时拍摄功能信号延时

5.36 ms

5.1 - 5.7 ms

根据这一通讯协议,以及网站上的AVR程序,我编写了51单片机上运行的程序,晶振选择24M,以此设置定时器,在P1.0端口产生接近32700赫兹的脉冲,根据不同开关按下,选择不同的延时。3.2按下:发射16个脉冲,延时7.33毫秒(P0口停止输出信号480个脉冲时长),然后再发射16个脉冲,经过实验,开始用于条件不好,相机无法对焦,以为不能工作,后来红外管没对准相机上的红外窗口,经过半个小时的实验,大约晚上10点的时候,终于实验成功了。控制距离不是很远,但是比较灵敏。

程序如下:

//************************************单片机红外发射DIY佳能相机遥控器RC-1***********************************

#include "reg52.h"

sbit ir=P1^0;//红外发射管控制脚,使用24M晶振

sbit ka=P3^2;//即按即拍按钮

sbit kb=P3^3;//延时拍摄按钮

unsigned int count, set_count,pulen; //中断计数,设定中断次数,延时脉冲数

bit irflag,keyflag;   //红外发送标志位,按键1标志位,按键2标志位

//---------------------------------------------------------------------------

void delay(unsigned int a)//延时,晶振24M ,此处延时不需很精确

{

unsigned char i;

while(--a!=0)

for(i=300;i>0;i--);

}

//---------------------------------------------------------------------------

void keyscan() // 按键扫描

{

     if(ka==0){keyflag=1;pulen=479;} //a键按下,发送编码中的空闲(7.33ms,480个脉冲时长)

     if(kb==0){keyflag=1;pulen=349;} //b键按下,发送编码中的空闲(5.36ms,350个脉冲时长),利用pulen传递空闲脉冲数

              }

//---------------------------------------------------------------------------


//---------------------------------------------------------------------------

void ir_send() //发送红外数据

{

set_count=31;//发送编码中的脉冲码(16个脉冲周期共计489us,32个峰谷)

irflag=1;    //启动红外发射二极管发射,发射第一个脉冲群

count=0;    //中断计数清0

TR0=1;

while(count<set_count);

TR0=0;

set_count=pulen; //利用pulen传递空闲脉冲数

irflag=0;    //停止红外发射二极管发射

count=0;    //中断计数清0

TR0=1;

while(count<set_count);

TR0=0;

set_count=31;//发送编码中的脉冲码(16个脉冲周期共计489us,32个峰谷)

irflag=1;    //启动红外发射二极管发射,发射第二个脉冲群

count=0;    //中断计数清0

TR0=1;

while(count<set_count);

TR0=0;

}

//---------------------------------------------------------------------------

void timer0_init()    //定时器初始化

{

EA=1;

TMOD=0x02;     //定时0 8位自动重装模式

ET0=1;

TH0=0xe1;//0xf1;   //定时15us,32700hz红外矩形波,晶振24M (//后为11.0592M晶振下的数值)

TL0=0xe1;//0xf1;   //定时15us,32700hz红外矩形波,晶振24M (//后为11.0592M晶振下的数值)上述数字并不绝对,这是我测试通过的,感觉容错量较大

}

//---------------------------------------------------------------------------

void main()

{

timer0_init(); //定时0初始化

count=0;     //中断计数先清0

irflag=0;     //红外发射标志先置0

while(1)

{

keyscan();   //键值扫描

   if(keyflag)   //若有按键按下

   {

    ir_send();   //发送红外编码

    delay(500);

       keyflag=0;//清零


   }

}

}

//---------------------------------------------------------------------------

void timer0() interrupt 1 //定时器0中断

{

count++;

if((keyflag==1)&&(irflag==1)) ir=~ir; //有发射标志,则发射32700hz的矩形波

   else ir=1;     //否则不发射,即相当于发射编码中的低电平


}


//说明:丁当制作。在24M晶振下使用,发射很正常,计划将其应用于11.0592晶振中,效果应该相同。*20110805 23:17编程完成,0807试验通过,即按即拍和延时拍摄都没有问题。

参考资料来自http://www.doc-diy.net/photo/eos_ir_remote/index.php及 http://www.doc-diy.net/photo/rc-1_hacked/

我把两篇网页资料翻译了,从中选了些截图,根据这个编了51的程序,不过上传附件挺难弄的,好不容易传上去一个,附件中的文件是完整的,包括照片,完整的翻译文件放在百度上了,可能还没通过,不过主要的东西都在这了,有佳能单反的可以试下,我是450D

VbrKhTCc.rar (154.45 KB, 下载次数: 3191)

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2011-8-31 21:45:00 | 显示全部楼层

先占个坑

回复 支持 反对

使用道具 举报

发表于 2011-9-1 00:08:00 | 显示全部楼层
不错,授精
回复 支持 反对

使用道具 举报

发表于 2011-9-1 00:17:00 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2011-9-1 00:21:00 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-9-1 10:01:00 | 显示全部楼层

一觉睡醒,发现加精,谢谢明浩大大~~~(原来明浩大大也雅好单反,都是同道中人,有机会请您赐教下,呵呵)

无巧不成书,和明浩大大的遥控器一样,我参考的网站资料也是用的attiny的,这样的话,可以把两个遥控代码整合一下,对于那些专业“尼佳双修”的朋友,可以“'一遥'控双机了”,最多加一个拨动开关而已,或者硬件不用改动,两种相机同时触发。呵呵,我这创意如何啊,如果明浩大大或者哪个朋友弄成了,记得给兄弟提个成啊~没有的话给个样品也行,实在没有~给点论坛金钱也行,都没有??~那就请喜欢的朋友顶下帖吧?呵呵

我把那两篇翻译的网页资料也传上去,毫无保留,同时打算放在百度混点分下东西用,对磁动力的朋友就免费开放吧。

 

Qg4O3IJd.rar (336.72 KB, 下载次数: 1735)
回复 支持 反对

使用道具 举报

发表于 2011-12-30 11:24:23 | 显示全部楼层
是的,把2种机器的编码写到一起,同时发送就可以简单兼容2者了
回复 支持 反对

使用道具 举报

发表于 2013-11-21 00:49:15 | 显示全部楼层
很好,谢谢了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入磁动力

本版积分规则

QQ|小黑屋|手机版|Archiver|www.cdle.net 磁动力电子网 2001-2017 ( 粤ICP备10098153号

粤公网安备 44040402000001号

GMT+8, 2019-6-18 20:24

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.