EDN首页   博客首页

最新日志

发表于:2008-4-11 22:55:03
标签:无标签

1

单片机音乐

闲来无事,用软件写了一份音乐程序,见附件。

在程序中使用了两个定时器,16位的TIM1开中断,用来产生音调;8位的TIM0当定时器,用来确定音符的节拍。在谱曲的时候,每个字节的高4位表示为音符,低4位表示该音符的节拍数。然后再根据相应的数据查表得到具体的音符代码和节拍代码。将音符代码送到TIM1产生中断从而发出相应的声音。

点击下载

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(357)
发表于:2008-2-28 23:22:05
标签:万能学习型  红外遥控开关  

1

万能学习型红外遥控开关

         前段时间应客户要求给他作一个万能学习型红外遥控开关。要求是能接收任意红外遥控器的信号并学习之。

         一开始谈时客户就有说其实这个产品现在已经有面市的了,只不过还远远达不到所说的万能学习型,只能有效使用1种或几种红外遥控器。说这个的时候我就有种预想:应该是可行的。

        现在的同类产品在方法上一般都采用记录高低电平的宽度并保存。这样的后果就是数据量较大,对于一些资源欠缺的廉价单片机来说,就转存不过来了:接收1位保存1位时间不够,这是由于在写EEPROM时到少得要毫秒级的延时,这就耽误了信号的接收;如果要接收完了再保存又没有这么大的RAM空间。

        我拼弃了这两种方法,采用自己的方式,完成了这个案子:

       首先,我并不需要去研究什么样的红外信号格式,只需知道当下的红外信号格式不外乎就是用不同的高低电平宽度来表示所要发出的数据。我并不需要完全复原所接收的数据。

       接下来就是去掉同步头,直接从数据处开始接收,从低电平开始接收,到高平结束时为1位并在接下来的低电平里处理这位数据(00或01或10或11),这里我把它的1位变成2位是为了能完整接收有可能使用的曼彻斯特编。经过这样处理后,基本上所有遥控器信号都能有效接收。真正做到万能学习。

        最终思想:不管要接收的数据是什么格式,我只按我的方法来处理就行。就像中国太极一样,不管你的招式多么变化莫测,我只管划圈圈就成。

点击此处查看原文 >>

系统分类: 汽车电子   |    用户分类: 无分类    |    来源: 原创

评论(5) | 阅读(861)
发表于:2007-8-2 15:25:13
标签:无标签

1

又返故里

  有1个月没来了,是回了一趟重庆。

  重庆划为特区的事好像并没有我想像中的那样令本地人激动不已,这有点令人失望!唯一舒心的是家中比这边要凉快多了。

  今后会常来,也欢迎大家常来!

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(672)
发表于:2007-6-26 22:39:25
标签:无标签

0

汽车刹车系统的自检

  昨天电视新闻报到台湾的一辆旅游车由于刹车失灵面导致的车祸事故,在脑中就有一股强烈的欲望:做个汽车刹车系统的自检方案,以尽可能地减少此类事故的发生。

  经过2个小时的构思,这个自检方案就初具雏形了。

  准备将这个自检与汽车的防盗报警器融合。也能与汽车生产厂合作,在汽车原来的电子系统内加上这种刹车系统自检动作,以便作进一步的控制,比如有必要在刹车系统出故障后对汽车进行限速。

  自检流程:启动汽车前先踩下刹车板→如果刹车系统没问题,就可以顺利启动→如果刹车系统有问题,就发出语音提示:“刹车系统出故障,请及时维修!”

  还在概念中,抽空时间来完善它。

  欢迎有兴趣的一起探讨!

点击此处查看原文 >>

系统分类: 工业控制   |    用户分类: 无分类    |    来源: 无分类

评论(3) | 阅读(901)
发表于:2007-6-22 11:07:23
标签:中断  脉冲宽度  

1

无线遥控的曼彻斯特编码的接收(续)

补充:编程思想

 

总的指导思想:利用中断来为数据的高低电平计数。

1         计时中断的时间是270us。我的脉冲宽度为300us,则在一个高(低)电平中能且只能产生一次计时中断,即计数1次。Rfcount等于1

2         如果2个数据不同时,就会出现2个连续的高电平或低电平,即600us的高电平或低电平。但在这600us中能且只能产生2次计时中断,即计数2次。Rfcount等于2

3         理论上如果中断时间是270us时,可以对脉冲宽度为271404us的数据作出正确接收。因为只要能保证1个电平宽度大于1个中断时间和2个连续的电平宽度小于3个中断时间(3*270810us)时即可。

4         在电平变化中断后重赋定时器初值是为了抵消时间的累积误差。

以图为例进行说明:

点击看大图

⑴ 在a处产生中断,“预备……”;

⑵ 在b处产生中断,“准备就绪”;

⑶ 在c处产生中断,“检查同步头中低电平宽度是否合法。OK,则准备进入数据接收;否则仍就“预备……””;

⑷ ●在d处(图上)或e处(图下)产生中断,则判断是否产生了2次计时中断。很显然,对于图上只能产生1次计时中断,而图下就产生2次计时中断。产生了2次计时中断时,对数据进行判断,对于图下就能判断数据为1。对于图上,由于不足2次计时中断,所以直接退出中断。等待下一次中断(图上e处)。

     图上在e处产生中断,很明显,计时中断数为2,对数据进行判断,为0

⑸ 对数据进行判断后即清计时中断计数器。即Rfcount。为下一个数据接收作准备。返回到步骤⑷。如此反复,即可对所有的数据作出完整接收!

⑹ 由于以上接收时间为基准的,即Rfcount2次计时中断。所以数据中的高电平和低电平都有计时,其中任何1个的宽度超限都能导致接收失败。

 

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(1063)
发表于:2007-6-21 15:55:22
标签:曼彻斯特  滚动码  

2

无线遥控的曼彻斯特编码的接收

无线遥控的曼彻斯特编码的接收

市场上多用22621527做发射,它们的发射格式如下:

点击看大图

                  图1

通常它们都是传送的24位数据,包括按键代码。在2262中只有12个输入端,它们是8个地址码加4个按键码,但由于地址码是3态输入的,每一位要用2个脉冲来表示,所以实际上它与152724位数据是一样的接收。

由于在普通接收模块的传输速率不能做得很高,所以数据编码中脉冲宽度大都在300500us左右,即上图中的a的宽度。它们要发射1串完整的数据就要128a38.4ms64ms)的时间。这还只是发送24位数据,如果用这种方式来发送64位乃至更多位数据时就得需要更多的时间。

所以在MICROCHIP(美国微芯)的滚动码系列芯片中较为普遍的采用了另外的一种格式:

点击看大图

                               图2

这种方式较图1的发射效率又要高一点。每位数据都要紧骤1a。它发射1串完整的滚动码数据需要225aa的宽度是100400us,所以整串数据的时间是27108ms。事实上发射时间越短对接收模块的指标要求越高。这也是采用滚动码发射时接收一般都用超外差接收,而不能用廉价的超再生接收的原因,因为这样的话容易丢码!

在低传输速率的无线数据传送中较少有用曼彻斯特编码方式的,个中原因笔者不敢妄测。由于笔者在新的加解密算法中要传送72位数据,在接收上仍然使用了较廉价的超再生接收电路,为了尽可能的减少丢码等接收不全的现像,发送方面采用了较宽的脉冲宽度(300us),编码方式采用的曼彻斯特编码方式。在网上没有找到相关的接收资料,于是对曼彻斯特编码的接收作了仔细分析,遂采用以下方法:

 

1 同步头的改变  由于数据的前半部份有可能是数字低电平,于是在同步头的后面加了一个脉冲。

点击看大图

                 图3

2 启用MCU的端口电平变化中断  在每一个电平发生变化后产生中断以实时对接收数据进行处理。

具体程序如下:

rar

以上程序经过测试,是完全可以对曼彻斯特编码作完整接收的。

有必要对以上程序作个说明:

1         以上程序的仿真是用的MPLAB IDE7.40

2         中断初值为0,即最长时间中断。

3         时钟为4M

4         仿真波形定义的脉冲宽度为300us

 

 

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 原创

评论(2) | 阅读(1505)
发表于:2007-6-12 22:34:27
标签:无标签

6

基于单片机的无线遥控系统

  目前市面上的无线遥控系统多采用专用编码器电路,固定码的有2262,1527等,它们的应用电路大都是用按键控制编码器的电源(直接或间接),当按下按键时就接通编码器的电源供电,编码器得电而工作。

  鉴于现下的单片机的功耗是越做越低,体积也越来越小,其休眠电流已可以做到1uA以下,用它来做无线遥控系统中发射编电路以成为可能。在用单片机做发射时,采用3-3.6伏直接供电,用按键接其I/O口于地,打开单片机的弱上拉功能,其硬件设计会大大简化。在软件上设计上,平时没键按下的时候单片机处于休眠状态,有按键按下时就唤醒单片机,单片机就按特定的算法发出数据编码,发完后检测按键是否放开,没放开继续发射,否则就又进入睡眠状态,以保持其低功耗。

  在数据编码时,可以进行简单的CRC校验,也可以用保密性很高的滚动码算法,使用软件来做滚动码算法的优点是软硬件都由自己把握,设计余量很大并且没有一般的滚动码的漏洞存在!

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(1410)
发表于:2007-6-1 13:02:50
标签:无标签

1

编程人员的专用烧录器

  以下只是针对软件设计

  有很多公司自己没设研发部,他们需要从外面找人来做他们想要的软件。和编程人员在协商报酬时大至有两种方式:

  1 稍大一些的公司会在对程序完全确定后一次性付款,当然这就少了后面的一系列的发生不愉快的可能。

  2 但还有一些公司由于种种原因会和方案提供者签定一个协议,规定编程人员的报酬从生产数量的多少来提成。这就造成一个节:怎么来确定生产数量?当然对于信誉好的公司来说,这个不是问题。但大多数编程人员会对这个不放心,因为编程人员一般不会也不可能在这个公司长期监督,这就有可能让自己的应得利益受损。

  我设想了这样一个编程器,能基本解决此类困扰。

  首先这个编程器是可以脱机烧录的。因为联机的话有可能会受电脱脑攻击而失效。

  然后要有一个后备电源。以便在该烧录器遭到拆卸时能清除烧录器内的代码。

  具体工作流程如下:

  (假如“我”就是编程人员,“甲”是要我写代码的公司)

  A 代码写好后,通过电脑接口将代码下载到编程器。

  B 将这个编程器交给甲,并允许10-50次烧录,以便甲测试。

  C 这后就禁止烧录。如要继续烧录需通过电脑输入“口令”。甲在获得口令时需提供“生产数量”。我用这个“生产数量”来得到相应“口令”并传给甲。当然“我”能保证甲在下一次要生产同一个生产数量时绝对有不同的“口令”,避免甲反复使用同一个口令。

  D 当生产数量完成时本烧录器就又禁止烧录。直到输入口令。当然我能适当的加多一部份数量,以备用户补偿损坏数量。

  E 如果不法用户企图破解,烧录器自身就启动清除程序。

  这之中重点就是“我”的“加密算法”,用来取得口令。

  采取这种方式可以避免由于厂家的不诚实所带来的纠分。

  

  

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类: 无分类    |    来源: 原创

评论(1) | 阅读(668)
总共 , 当前 /