标题: 单片机红外线接收问题-stm8s208开发板的程序移植到stm8s003就不行了 [打印本页]

作者: billaj    时间: 2021-7-5 22:17
标题: 单片机红外线接收问题-stm8s208开发板的程序移植到stm8s003就不行了
大家好,我有个stm8s208开发板,红外接收的程序是NEC协议的,按原程序移植到stm8s003就不行了,得到的现象是定时器2的计算时间好奇怪,我通过外部中断来开始计数,下次中断关闭计数,正常计数值在一万3左右,移植到STMS003后,数值从十几到几万的都有,请问有没有人遇到过这样的问题的呢,同样的程序在开发板里是正常得很的。。。。
先谢谢各位

作者: yzwzfyz    时间: 2021-7-6 08:38
1、先弄清楚红外编码原理。
2、再弄清成功的程序是如何解码的。
3、移植后的程序与原程序比,在什么地方,解码参数发生了改变?
作者: sadv    时间: 2021-7-6 09:13
首先你的外部中断触发方式是什么呢?上升沿还是下降沿?定时器计数值在一万三左右,那么这个一万三代表的时间是多少呢,移植以后测到的时间是多少呢?这个跟你的定时器的计数频率有关系,首先去检查你移植前的程序时怎么解码的,相关的具体时间时多少,那么你移植以后要保持这个时间不变,就要注意定时器的频率问题了,频率不同,计数一万三所代表的时间也就不同,解码就容易出问题,不明白可以私聊我
作者: billaj    时间: 2021-7-6 09:55
yzwzfyz 发表于 2021-7-6 08:38
1、先弄清楚红外编码原理。
2、再弄清成功的程序是如何解码的。
3、移植后的程序与原程序比,在什么地方 ...

你好,我弄清楚原理的,也知道原程序是如何解码的,移植后的程序有以下的不同,外部中断的引脚改了,中断处理改了,时钟是一样的内部时钟16MHz,我主程序什么都没改。。。
作者: billaj    时间: 2021-7-6 09:59
我这是外部下降沿中断,16MHz内部分频16,每次计数1us,13500就是13.5ms,相当于NEC协议里的头码时长,正常都在13500上下波动,现在我移植之后就变到十几至5万多之前波动。。。。我整了两三个星期了都没看出问题点,实在没招了才来问问大家,希望大家能给点思路该怎么去查这个问题点在哪
作者: yzwzfyz    时间: 2021-7-6 10:27
既然清楚原理,也可以自己写,这个并不是太难的。测量脉冲的宽度,解出0、1,再组装一下,也就成了。
这里有个两个要点:
1、就是如何界定0、1,需要给个允错范围,即1=什么到什么范围内?0=同理。
2、脉冲的起点与终点,计时不能受干扰。需要仔细规划一下。
作者: billaj    时间: 2021-7-6 15:35
yzwzfyz 发表于 2021-7-6 10:27
既然清楚原理,也可以自己写,这个并不是太难的。测量脉冲的宽度,解出0、1,再组装一下,也就成了。
这里 ...

我也在想是不是计时器是不是受干扰了,甚至怀疑是不是优先级的问题,总是计时不准
作者: lkc8210    时间: 2021-7-6 16:14
STM不熟,你又不上代码
软件方面:
外部中断的引脚设对了吗?
中断处理设对了吗?
时钟频率设对了吗?
分频设对了吗?
有试过用最简单的代码去产生一个固定频率的方波吗?

硬件方面
电路画对了吗?
有没有空焊?
电源稳定吗?
作者: billaj    时间: 2021-7-6 21:12
我现在发现了是中断的问题,红外接收脚我单独用外部中断去控制一个灯时,用手摸那个红处接收头的供电脚竟然能触发灯亮。。。。这到底是灵敏呢还是有干扰。。。
作者: lkc8210    时间: 2021-7-6 22:21
billaj 发表于 2021-7-6 21:12
我现在发现了是中断的问题,红外接收脚我单独用外部中断去控制一个灯时,用手摸那个红处接收头的供电脚竟然 ...

脚浮空了,加上拉电阻吧
作者: rayin    时间: 2021-7-8 12:00
两个系统用的晶振是不是一样? 红外接收对时序有要求的, 晶振不同,还有单片机系统设置不一样,会导致接收时序差异较大,导致接收失败




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1