一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
楼主: GandF
收起左侧

[avr] M8数控电源V7

  [复制链接]
发表于 2021-4-11 15:39 | 显示全部楼层
好几年了,级别不够下不了。
发表于 2021-4-17 20:20 | 显示全部楼层
本帖最后由 cdhigh 于 2021-4-21 03:56 编辑

@GandF

刚发现M8V7的一个BUG。
我最近给M8V7换了一个编码器,发现中键点击时灵时不灵(旋转都是好),以为是编码器的问题,再换一个还是一样,还以为是更换时静电等问题导致端口故障,更换了一个M8还是一样的问题。
幸好只更换了一个,还有一个是好的,我使用万用表测量编码器输入到MCU的三个脚的电压,发现了问题所在。
原来好的编码器在中键没有按下没有旋转运动的时候,三个脚都是高电平,而新换的编码器在中键没有按下没有旋转运动时,C脚一直维持高电平(正常),另两个脚要不同时为高电平,要不同时为低电平。
然后我查找了处理按键的代码,在key.c里面 41/43 和 119/121行发现了问题所在。
原代码:
  1. <div>if(statue_rotary_key_pre1 == 0)<span style="white-space:pre">                        </span> <span style="white-space:pre">        </span>// 上升沿判断</div><div>{</div><div>    if(key_temp == (1<<rotaryKEYC_PIN))<span style="white-space:pre">        </span>  <span style="white-space:pre">        </span>  <span style="white-space:pre">        </span>  // 步进</div><div>    ......</div><div>}</div>
复制代码

此代码判断中键按下时假定另两个脚为高电平(代码中对应位为零),所以导致编码器在某些位置中键能响应,某些位置不能响应。
将其改为:
  1. if(!(statue_rotary_key_pre1 & (1<<rotaryKEYC_PIN)))   // 上升沿判断
复制代码

119/121行类似修改:
  1. <blockquote>if(!(statue_rotary_key2_pre1 & (1<<rotaryKEY2C_PIN)))   // 上升沿判断
复制代码


重新使用ICCAVR6.31A在WINDOWS XP下编译下载,问题完美解决。

点评

你好,我的M8V7也有类似的问题,能把编译好的hex文件发一份给我吗,谢谢。 xhhhhz@yeah.net  详情 回复 发表于 2021-8-14 13:30
编码器有不同的,以前买过2个,跟大多数都不同,反正判断很麻烦,不像常见的,一个脚做触发,判断另一个脚电平就知道正反了  详情 回复 发表于 2021-5-3 09:20
我的M8V7好像也有编码器失灵问题,也是换了仍然不好用,不知能否共享一下您改过的程序  详情 回复 发表于 2021-4-21 08:37
好像更改前后都一样。有拷贝错吗?  详情 回复 发表于 2021-4-18 10:37
发表于 2021-4-18 10:37 | 显示全部楼层
cdhigh 发表于 2021-4-17 20:20
@GandF

刚发现M8V7的一个BUG。

好像更改前后都一样。有拷贝错吗?

点评

两处都改了? 我改了就好了 如果还不行,说明编码器在按下的过程中旋转输出电平也有变化,有可能还需要修改软件防抖机制,还是同样的函数。  详情 回复 发表于 2021-4-20 23:00
发表于 2021-4-20 23:00 | 显示全部楼层
本帖最后由 cdhigh 于 2021-4-21 03:59 编辑
Joe_Black 发表于 2021-4-18 10:37
好像更改前后都一样。有拷贝错吗?
我又拿出M8电源把玩了一下,好像还是有时不灵,然后继续看代码,在 41 和 119 行同时需要修改。我已修改上面的回帖内容,修改一共4行(41,43,119,121行),
现在我把握了好几分钟了,一直没有碰到按键不灵的问题了。

发表于 2021-4-21 08:37 | 显示全部楼层
cdhigh 发表于 2021-4-17 20:20
@GandF

刚发现M8V7的一个BUG。

我的M8V7好像也有编码器失灵问题,也是换了仍然不好用,不知能否共享一下您改过的程序

点评

我觉得要经过 GandF 的允许才能放出修改后的程序。 上面的回帖已经提到很清楚了,就四行代码,自己修改再编译就好了。  详情 回复 发表于 2021-4-21 22:23
发表于 2021-4-21 22:21 | 显示全部楼层
上面的回答因为格式问题乱了,这里再贴一下,修改 41/43/119/121 行
源代码:
  1. if(statue_rotary_key_pre1 == 0)                                 // 上升沿判断
  2.                         {
  3.                                 if(key_temp == (1<<rotaryKEYC_PIN))                              // 步进
复制代码

改为:
if((statue_rotary_key_pre1 & (1<<rotaryKEYC_PIN)) == 0)                                 // 上升沿判断
                        {
                                if(key_temp & (1<<rotaryKEYC_PIN) != 0)                              // 步进[/code]

119/121行类似,注意变量名即可。

点评

你好,我的M8V7也有类似的问题,我一般是关闭电源重启有时就会好,看了你的方法很想试一下,但我不会编译,能把编译好的hex文件发一份给我吗,谢谢。  详情 回复 发表于 2021-4-30 16:12
发表于 2021-4-21 22:23 | 显示全部楼层
slqin2418 发表于 2021-4-21 08:37
我的M8V7好像也有编码器失灵问题,也是换了仍然不好用,不知能否共享一下您改过的程序
...

我觉得要经过 GandF 的允许才能放出修改后的程序。

上面的回帖已经提到很清楚了,就四行代码,自己修改再编译就好了。

发表于 2021-4-24 15:55 | 显示全部楼层
好定西,必须顶一下
发表于 2021-4-30 16:12 | 显示全部楼层
cdhigh 发表于 2021-4-21 22:21
上面的回答因为格式问题乱了,这里再贴一下,修改 41/43/119/121 行
源代码:

你好,我的M8V7也有类似的问题,我一般是关闭电源重启有时就会好,看了你的方法很想试一下,但我不会编译,能把编译好的hex文件发一份给我吗,谢谢。
932195868@qq.com

点评

用我的HEX烧录后,编码器问题已经解决了吗? 还是我修改的代码只对我手头的编码器有效?  详情 回复 发表于 2021-5-2 23:23
发表于 2021-5-1 05:54 | 显示全部楼层
发师 发表于 2021-4-30 16:12
你好,我的M8V7也有类似的问题,我一般是关闭电源重启有时就会好,看了你的方法很想试一下,但我不会编译 ...

已发,。。。。。。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-5 21:57 , Processed in 0.050873 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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