ysm85 发表于 2009-1-21 18:22:20

占空比红外接收方式流程图,也许有人用得着【恢复】

本人一新手,刚刚从事单片机开发工作不到3个月,最近用到红外遥控器接收,将自己的设计思路跟大家共享一下。欢迎拍砖。

红外发送一般有两种方式,一种是占空比,另外一种是码长。

占空比方式是指“1”和“0”码的长度一致,只是占空比不同。以我接触到的为例,每位数据的码长均为1.6ms,但“0”码为低电平1.2ms,高电平0.4ms,“1”码为低电平0.4ms,高电平1.2ms。每帧数据12位,最高的12、11、10这三位为头码,固定为110,第9、8位为用户码,由用户决定,剩下的第7~1位为按键码。当按下不松时会持续发码,每帧数据之间间隔8ms,发送码和按键码表如下图:(注意发送码和接收码互补)

http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_597505.JPG

红外码表 (原文件名:码表.JPG) 

http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_597504.JPG

按键码表 (原文件名:按键码表.JPG) 

因为使用的是三星的S3C9498芯片,估计用过的人不多,而且用的是汇编语言,还有一些是公司自己定义的宏,所以程序就不贴出来了,下面是流程图。由于上头明确表示不允许使用捕获方式,所以采用的是125us查询一次的方法,检测一个周期中心的值来获得接收码的值,即读取上图红外码表中红线位置处的值,蓝线位置是可能出现的误差范围(-125us~+125us,即多或者少判定了1次)。

http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_597524.JPG

流程图 (原文件名:流程图.JPG) 



变量说明:

TA:接收码长计数器,因为2帧数据之间间隔8ms,8/0.125=64,考虑误差,当TA>=62时认为一帧数据发送结束,当TA>=90时认为按键已经松开

HC(HalfCounter):半周期计数器,一位的长度为1.6/0.125=12.8,取13,其中心为7

BitC(BitCounter):接收到位数据计数器,每接收1位加1,正常到12即1帧数据长度后清0

RecC:接收到的数据帧计数器,每接收到1帧数据加1,可用于判连按

bCheck:接收码检测标志位,置高表示该数据已经检测过

bBit1:高电平标志位,置高表示检测到高电平。

InPin(InputPin):红外接收头数据引脚

编程思路:

每125us查询一次,

读TA值,大于90,直接去判断引脚是否变为低电平

        小于90,判断数据是否处理过,bChenk=?

             处理过,bCheck=1,判断引脚电平,InPin=?

                InPin=1,置高电平位,bBit1=1,返回

                InPin=0,判断之前是否为高电平,bBit1=?

                             bBit1=0,说明不是第1个低电平,数据未接收完毕,返回

                             bBit=1,说明是第1个低电平,即一个新的数据开始。就开始判断刚结束的数据

                                   10<TA<15(1.25ms~1.875),一位接收完毕,bCheck=0,TA=0,bBit1=0,为下一位接收作准备,返回

                                   TA>62(7.75ms),一帧数据接收完毕,转到接收码校验处理程序。

             未处理,bCheck=0, 判断是否到中心位置,++HC=?

                        HC<7,未到中心位置,返回

                        HC>=7,到中心位置,判断引脚电平,InPin=?

                             InPin=1,接收到的数据位为1

                             InPin=0,接收到的数据位为0

                             数据处理,BitC++,HC=0,bCheck=1返回



数据校验流程图如下,只是说下因为是在第1个低电平处理上1个数据,所以RecC=1时有可能是上次按键发送的最后一个数据,所以判断RecC=2时候的数据。

http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_597544.JPG

校验流程图 (原文件名:红外接收校验流程图.JPG) 

        

ysm85 发表于 2009-1-21 18:23:25

占楼,明天有空发下码长方式的流程图

yangyongwen 发表于 2009-1-21 23:25:07

  虽然用不到,但还是多谢楼主的精神

xinjie1023 发表于 2010-5-25 22:46:04

标记

ddzr 发表于 2011-1-12 11:07:28

很有用的资料,

a627236799 发表于 2011-2-5 07:52:05

mark

ww63521814 发表于 2011-2-5 12:36:47

发思路,很好,谢谢楼主,收藏待用!

maxims 发表于 2011-2-8 16:22:31

mark,备用,正打算自己复制一个建伍的遥控器

fish47 发表于 2011-3-9 22:28:35

好帖马克之

sherlockljt 发表于 2011-4-23 01:34:45

mark

limzhw 发表于 2011-5-19 20:22:33

mark

skynet 发表于 2011-5-19 20:30:11

能不能说说,为什么明确不能使用输入捕获方式??
红外就是3种方式

输入捕获
外部中断+定时器计算时长
定时查询

mumububu 发表于 2011-6-1 17:28:31

标记

yutiange 发表于 2011-6-1 20:23:05

mark

xiaowei0588 发表于 2011-6-1 20:26:37

很好!

sandao 发表于 2011-11-9 23:15:52

这个不错,要顶,要支持!

chenfzg 发表于 2011-11-10 01:03:06

谢谢分享

sandao 发表于 2011-12-21 08:55:15

RecC能否在按键处理后清零,=1时就认为是有按键!

lovelywwei 发表于 2011-12-21 21:41:57

MARK

656034815 发表于 2012-5-7 16:33:25

我来顶顶!

llh1234 发表于 2012-7-5 22:01:13

mark
{:smile:}

cos 发表于 2012-12-24 19:43:06

好贴顶一下。

心小志气大 发表于 2012-12-29 17:15:27

我来看看,最近在研究红外啊~~

jz701209李 发表于 2013-4-11 13:09:34

学习一下....
页: [1]
查看完整版本: 占空比红外接收方式流程图,也许有人用得着【恢复】