易码技术论坛

 找回密码
 加入易码
搜索
123
返回列表 发新帖
楼主: fang

[原创](要求加精华)为TC800加红外的详细研究过程及原理

[复制链接]
发表于 2006-10-15 08:55:06 | 显示全部楼层
楼上的点一下[引用]以后再发帖不就把他的字直接帖上去了!
发表于 2006-10-15 09:11:36 | 显示全部楼层
有个建议,通讯函数的使用时,是不能使用getchar()这个函数的,以前我发的双机游戏的实现问题就是用了getchar()这个函数最终不能成功,后来改成Inkey()才可以的。不知道是为什么~~~………………
发表于 2006-10-15 10:12:13 | 显示全部楼层
此技术应该可以通用吧~~~~~~~~~
 楼主| 发表于 2006-10-15 13:34:04 | 显示全部楼层
引用第28楼songfei2006-10-04 06:09发表的“”:
既然你要带一个这样的红外通讯装置 那为什么不用一个电线直接解决呢

tc800上有双机连线程序就够了

这个就是学习着方面专业知识的人来搞研究吧,实用性不大

在我前述的已知通信端口功能及用法的前提下,实现双机有线通讯不是什么大问题

红外通信是给有"高要求"的人使用的
 楼主| 发表于 2006-10-15 13:36:14 | 显示全部楼层
引用第35楼szskx2006-10-13 19:08发表的“”:
确实很深奥阿

Tc1000s也能用这个原理么

不清楚
我没有弄过这个机子
 楼主| 发表于 2006-10-15 13:43:05 | 显示全部楼层
引用第32楼lizhaoyang_62006-10-13 12:56发表的“”:
支持一下精神!
严重缺乏基本理论知识,自己在学深点,就会发现这么做很可笑的
还有一点电池的作用也不是升压,接收管中接收到信号后的压差,经过你这么做还是没变,没放大的作用.能行只说明用电池提高了门限电压!
这点成果用他实现替代串口线可以,离你说的遥控还差一截!
如果自己高三了,就应该没必要再来弄这些,进了学校后有的是时间来弄这样的!

电池的作用是升压,没有足够高的电压WQX无法接收信号
正如你所说,我的理论知识是不足,但不是严重缺乏
我是不懂放大电路,所以才贴出来,要大家帮忙

如果你认为可笑,那为什么不在我完成之前就先弄出来个?
(你还好意思说?)

我已经说过我已经实现了遥控,你若不信,自己试
别在这里瞎怀疑人

我是高三了,有点爱好总可以吧?
你难道是没有梦想的人?

别以为你比我多读几年书,就可以怎么样
发表于 2006-10-15 13:43:42 | 显示全部楼层
不知有人成功没····!!#
 楼主| 发表于 2006-10-15 13:44:25 | 显示全部楼层
引用第36楼信志2006-10-14 12:46发表的“”:
楼主的计划很好,但是比较难以实现,如果大家想用红外,我这里可以给大家一点思路
大家去电子市场买一个红外线发生器和一个感光二极管
然后找一个话筒和一个扬声器,外加电池和导线,按图组装

我说的是理论上,应该能组成一个单向光通讯系统
.......

感谢提供建议
 楼主| 发表于 2006-10-15 13:45:15 | 显示全部楼层
引用第40楼llmmkc1232006-10-14 20:14发表的“”:
555555555555好奇怪,怎么我不能把他写的字直接贴上去,看来我真是不回发贴呀

用"引用"不就可以了?
 楼主| 发表于 2006-10-15 13:49:07 | 显示全部楼层
引用第42楼神月2006-10-15 09:11发表的“”:
有个建议,通讯函数的使用时,是不能使用getchar()这个函数的,以前我发的双机游戏的实现问题就是用了getchar()这个函数最终不能成功,后来改成Inkey()才可以的。不知道是为什么~~~………………
Inkey与getchar的区别在于
Inkey 不等待按键
getchar等待按键后才执行下一语句
你看看你使用的是什么通讯函数,
如果是System.Comgetc它只读一个字节,用getchar会有影响
如果是System.Comread就应该没什么问题

这最终还是取决于你的程序写法
 楼主| 发表于 2006-10-15 13:50:02 | 显示全部楼层
引用第43楼ltmit2006-10-15 10:12发表的“”:
此技术应该可以通用吧~~~~~~~~~

不是这样的,
TC800的硬件与其他WQX很大程度上不同
发表于 2006-10-15 13:50:18 | 显示全部楼层
想起我的NC2600c......
红外就是强啊,怎么ggv就是不弄呢?
现在的新机型貌似都是没有红外的。。。
发表于 2006-10-15 19:31:36 | 显示全部楼层
电池的作用是升压,没有足够高的电压WQX无法接收信号
正如你所说,我的理论知识是不足,但不是严重缺乏
我是不懂放大电路,所以才贴出来,要大家帮忙

如果你认为可笑,那为什么不在我完成之前就先弄出来个?
(你还好意思说?)

我已经说过我已经实现了遥控,你若不信,自己试
别在这里瞎怀疑人

我是高三了,有点爱好总可以吧?
你难道是没有梦想的人?

别以为你比我多读几年书,就可以怎么样
*******************************************
我之所以这么说是希望你能提醒当中成长!百尺杆头更进一步!
如果我是坏意的话,我为何要第一句话中就"支持一下精神"!
你都已经高三了,别人对你是善意还是恶意都听不出来!你以后进了社会,你说你自己能怎么办!
我说你高三了不应该来弄这些!是希望你能好好准备你的高考!别进不了大学到时候自己来后悔!
发表于 2006-10-15 21:11:22 | 显示全部楼层
能成功就当然支持..
 楼主| 发表于 2006-10-1 09:13:41 | 显示全部楼层 |阅读模式
**TC800端口通讯原理**
图1(线)
连线.jpg
这是最基本的研究器件

图2(插头)
插头.jpg
插头与夹子的对应关系:
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(红外二极管发射器)
红外二极管.jpg
注意,长的接正极!!
二极管的单向导电性要求电流只能单向流入,所以,不能接反,否则相当于断路.

大家一般认为,红外二极管的收发至少要有两个二极管(一个发射,通常是透明或淡蓝色;另一个接收,通常是黑色)
可其实并不是这样,根据我做的一个实验得到的结论:二极管发出的相同波长光的光能与电能之间可以相互转化
但,实际上会有一些能量损失.
这个结论其实与高三的物理光学紧密相关.
在空间传播的光不是连续的,而是一份一份的,每一份叫做一个光子,光子的能量与光的频率成正比.
这是爱因斯坦受到普朗克的启发,研究光电效应时提出的.
从这里,您可以得到两个结论:
1.好好学习,天天向上!
2.只要用一个红外发射管就可以取代接收管的功能

实践证明,用这种方法收到的信号比用接收管接收的信号更纯净.

红外发射不是问题,因为TC800发射端(2,3)之间的电压有3.8V
这已经达到了启动二极管的最低电压(一般1.几V,低于这个值也相当于断路)
所以,我们直接将2(正极)连接到发射管的正极(长脚),再把3接到短脚上即可实现发射数据的目的

**TC800红外的接收**
之所以要单独列出来,是因为接收端(1,3)之间的电势差为0)
而当红外光对准发射管时,产生的电压也只不过几百毫伏(mv),这个电压根本不能使800有什么反应
所以,我们需要以下秘密武器:
图4(电池&TC800)
电池.jpg
电池,怎么样?没想到吧?

下面,我来讲如何连接电路
当同波长的光射入二极管后,产生的电动势仍为长脚正,短脚负
然而,我们要以电池的电动势为主,而地线就是黑线(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, 下载次数: 1067)
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-20 10:28 , Processed in 0.012629 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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