- 注册时间
- 2005-12-16
- 最后登录
- 1970-1-1
|
**TC800端口通讯原理**
图1(线)
这是最基本的研究器件
图2(插头)
插头与夹子的对应关系:
1-->黄色
2-->红色
3-->黑色
想到TC1000的连线(1,2交换,3不变),
我假设各接头有这样的功能:
1-->黄色(接收)
2-->红色(发射)
3-->黑色(地)
其中3与2之间为发射端
3与1之间为接收端
由数字万用表测量的结果表明,
在TC800等待通讯时2,3间有微弱的电压变化(这是数据发射的象征),
在1,3间无电压(电势差为0).
通过我写的最初版本的端口测试程序证明了我的观点.
而之所以能够写成,还得归功于Yan公开的源代码和系统函数.
在次,我忠心地感谢yan
到此,TC800的端口通讯原理及推导过程已叙述完毕
下面,我为大家介绍
**TC800遥控的实现与方法**
我们要实现红外通讯,首先需要知道通过什么方法接收和发送数据,
而这个问题在上文已经解决了.
下面解决另一个问题,用什么器件收发红外线呢?
就是下面这个东西:
图3(红外二极管发射器)
注意,长的接正极!!
二极管的单向导电性要求电流只能单向流入,所以,不能接反,否则相当于断路.
大家一般认为,红外二极管的收发至少要有两个二极管(一个发射,通常是透明或淡蓝色;另一个接收,通常是黑色)
可其实并不是这样,根据我做的一个实验得到的结论:二极管发出的相同波长光的光能与电能之间可以相互转化
但,实际上会有一些能量损失.
这个结论其实与高三的物理光学紧密相关.
在空间传播的光不是连续的,而是一份一份的,每一份叫做一个光子,光子的能量与光的频率成正比.
这是爱因斯坦受到普朗克的启发,研究光电效应时提出的.
从这里,您可以得到两个结论:
1.好好学习,天天向上!
2.只要用一个红外发射管就可以取代接收管的功能
实践证明,用这种方法收到的信号比用接收管接收的信号更纯净.
红外发射不是问题,因为TC800发射端(2,3)之间的电压有3.8V
这已经达到了启动二极管的最低电压(一般1.几V,低于这个值也相当于断路)
所以,我们直接将2(正极)连接到发射管的正极(长脚),再把3接到短脚上即可实现发射数据的目的
**TC800红外的接收**
之所以要单独列出来,是因为接收端(1,3)之间的电势差为0)
而当红外光对准发射管时,产生的电压也只不过几百毫伏(mv),这个电压根本不能使800有什么反应
所以,我们需要以下秘密武器:
图4(电池&TC800)
电池,怎么样?没想到吧?
下面,我来讲如何连接电路
当同波长的光射入二极管后,产生的电动势仍为长脚正,短脚负
然而,我们要以电池的电动势为主,而地线就是黑线(3号线),
综上,从3号线到1号线依次是:
3号线-->二极管短脚-->二极管长脚-->电池负极-->电池正极-->1号线
确认电路可靠之后,即可测试是否接收到数据
写一个程序试下:
void main()
{
char c;
System.ComOpen();
do
{
c=System.ComGetc();
printf("%d ",c);
}while(Inkey()!=27);
System.ComClose();
}
如果显示出数据,那么恭喜您,大功告成!
否则,您再仔细研究研究哪里错误了
实现TC800遥控收发的测试程序//以下是WQX红外通讯的测试程序
//=====================功能函数======================================================================================//
//接收部分
void receive()
{
char fp;
char buf[16384];
long counter;
char c;
SetScreen(0);
System.ComWaitReady(); //我不知道有什么用,放这是为了保险起见
Locate(0,0); printf("receiving...\n");
do //等待接收数据
{
c=System.ComGetc();
Locate(0,0); printf("%d",counter++);
}while(c==0&&Inkey()!=27); //按退出,不等待,直接接收数据
counter=0; //计数器
do{
SetScreen(1);
printf("1s后开始...\n"); Delay(1000);
printf("正在进行...\n");
System.ComRead(buf,16384); //接收数据
printf("完成,是否再来一次?(y/n)");
c=getchar();
}while(c=='y'); //如果不确定是否收到数据,可选择再试一次
fp=fopen("/LavaData/com.dat","w");
fwrite(buf,1,16384,fp);
fclose(fp);
}
//接收部分
void send()
{
char fp;
char buf[16384];
int i,length;
char c;
fp=fopen("/LavaData/com.dat","r");
fread(buf,1,16384,fp); //读数据
fclose(fp);
SetScreen(0);
System.ComWaitReady();
Locate(0,0); printf("sending...\n");
SetScreen(0);
do
{
System.ComWrite(buf,16384); //连续发送数据
}while(Inkey()!=27);
}
//====================================================================//
void main()
{
System.ComOpen(); //打开端口
receive(); //接收数据
System.ComClose(); //关闭端口,但端口仍有恒定电压,可用于点灯
}
这里,我奉上一个端口测试程序
遥控原理.rar
(67 KB, 下载次数: 1422)
|
|