搜索
bottom↓
回复: 131

旋转编码开关程式,看各位写的太复杂,我写了个精简的,才5行,M8,测试稳定。

  [复制链接]

出0入0汤圆

发表于 2011-1-16 19:15:34 | 显示全部楼层 |阅读模式
今天做一个信号发生器,想用旋转编码开关,看了一个坛子里的程式,写的太复杂,

于是乎我写了个简单的,测试稳定,大家看看吧,

(我用的这个转一档,AB脚上的电压只变化一次。坛子里图都是转一档变化两次,所以大家用的时候只用把中断触发方式改一下就行了)

M8,,12MHZ,INT0,--------PD2--PD3.



/****************************************************************
//函数名称:int0_isr(void)
//功    能:中断0处理函数
//入口参数:无
//出口参数:无
*****************************************************************/
#pragma interrupt_handler int0_isr:iv_INT0
void int0_isr(void)
{
    char i,j;
    SREG=0x00;                                       // 我试过,不用关中断也没问题。

         i=(PIND&0B00001000);                      //读第一脚值
         j=(PIND&0B00000100);                      //读第二脚值
         if(i){i=1;}else{i=0;}                     //整理
         if(j){j=1;}else{j=0;}
         if(i==j){pp--;}else{pp++;}                    //如果一样就是+,不一样就-
         SREG=0x80;                                 // 不用关中断的话,当然这句也可以不用,
         }
/****************************************************************
//函数名称:MAIN
//功    能:
//入口参数:无
//出口参数:无
*****************************************************************/
     void main()
       {                    
           MCUCR=0B00000001;                           //我用的这个和大家画的那个图不一样,所以只要变动就触发。
             GICR=0b01000000;                             //INT0
           SREG=0x80;                                  //使能全局中断

   while(1)
   {
      show1(pp);  

          }}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2011-1-16 19:27:45 | 显示全部楼层
顶一下

出0入0汤圆

 楼主| 发表于 2011-1-16 19:38:03 | 显示全部楼层
测试,最快旋转和最慢旋转没有掉步现象。4.7K上拉,104滤波。

出0入0汤圆

发表于 2011-1-16 20:02:25 | 显示全部楼层
哈哈,有空试试

出0入0汤圆

发表于 2011-1-16 20:13:38 | 显示全部楼层
mark.

出0入0汤圆

发表于 2011-1-16 20:14:22 | 显示全部楼层
给你简化一下只剩一行

//i=(PIND&0B00001000);                      //读第一脚值
//j=(PIND&0B00000100);                      //读第二脚值
//if(i){i=1;}else{i=0;}                     //整理
//if(j){j=1;}else{j=0;}

if(!((PIND^(PIND>>1))&4)) {pp--;} else {pp++;}             //如果一样就是+,不一样就-

出0入0汤圆

发表于 2011-1-16 20:17:22 | 显示全部楼层
或者:

if((PIND^(PIND>>1))&4) {pp++;} else {pp--;}

出0入0汤圆

发表于 2011-1-16 20:23:35 | 显示全部楼层
记号一下

出0入0汤圆

 楼主| 发表于 2011-1-16 20:30:25 | 显示全部楼层
【6楼】 hsztc

积分:1815
派别:
等级:------
来自:福建省
或者:

if((PIND^(PIND>>1))&4) {pp++;} else {pp--;}  

哈哈,强 我试试,

可以用,
这下子剩一行了,

出0入0汤圆

发表于 2011-1-16 20:33:15 | 显示全部楼层
居然没看明白,还是MARK吧

出0入97汤圆

发表于 2011-1-16 20:42:52 | 显示全部楼层
;mark

出0入42汤圆

发表于 2011-1-16 20:44:32 | 显示全部楼层
还真是这么写的...自己都没注意,这是两步一脉冲周期那种

出0入0汤圆

发表于 2011-1-16 20:50:37 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-1-16 22:07:41 | 显示全部楼层
顶顶顶!

出0入10汤圆

发表于 2011-1-16 22:47:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-16 22:48:27 | 显示全部楼层
这个不叫一行,用?:改写才是一行

给你简化一下只剩一行 //i=(PIND&0B00001000); //读第一脚值 //j=(PIND&0B00000100); //读第二脚值 //if(i){i=1;}else{i=0;} //整理 //if(j){j=1;}else{j=0;} if(!((PIND^(PIND>>1))&4)) {pp--;} else {pp++;} //如果一样就是+,不一样就-

出0入0汤圆

发表于 2011-1-16 23:13:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-16 23:45:51 | 显示全部楼层
mark!

出0入42汤圆

发表于 2011-1-17 00:03:26 | 显示全部楼层
U8 direction = (PIND&_BV(PD2))!= (PIND & _BV(PD0));

出0入0汤圆

 楼主| 发表于 2011-1-17 00:17:08 | 显示全部楼层
突然想明白了,这东西就是这么简单,所以我总结出一句话:


<< 一个被按下后判断另一个,如果两脚一样就是正向,如果两脚不一样,就是反向  >>

就这么简单,而且超稳定。

看过各前辈写的程式,都复杂化了,看有一个前辈竟然写了两三页。

如有不对,请多多指教、、、

出0入0汤圆

发表于 2011-1-17 00:21:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-17 00:21:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-17 00:24:45 | 显示全部楼层
回复【19楼】xiaole01 潇乐
突然想明白了,这东西就是这么简单,所以我总结出一句话:
&lt;&lt; 一个被按下后判断另一个,如果两脚一样就是正向,如果两脚不一样,就是反向  &gt;&gt;
就这么简单,而且超稳定。
看过各前辈写的程式,都复杂化了,看有一个前辈竟然写了两三页。
如有不对,请多多指教、、、

-----------------------------------------------------------------------

其实两三页是正常的,还要考虑到加速的问题,多功能这些问题,比如照你的程序要是加1W的话,你扭到手断都扭不到目标,哈哈.

出0入46汤圆

发表于 2011-1-17 00:28:25 | 显示全部楼层
Mark

出0入0汤圆

发表于 2011-1-17 00:33:12 | 显示全部楼层
如果是汇编的要几行呢,一点也不懂C的说。

出0入0汤圆

 楼主| 发表于 2011-1-17 00:48:40 | 显示全部楼层
【22楼】 xjavr

积分:63
派别:
等级:------
来自:
回复【19楼】xiaole01 潇乐
突然想明白了,这东西就是这么简单,所以我总结出一句话:  
<< 一个被按下后判断另一个,如果两脚一样就是正向,如果两脚不一样,就是反向  >>  
就这么简单,而且超稳定。  
看过各前辈写的程式,都复杂化了,看有一个前辈竟然写了两三页。  
如有不对,请多多指教、、、  

-----------------------------------------------------------------------

其实两三页是正常的,还要考虑到加速的问题,多功能这些问题,比如照你的程序要是加1W的话,你扭到手断都扭不到目标,哈哈.

---------------------------------------------------------------------------

这倒有可能,没仔细看,多谢,

出0入0汤圆

发表于 2011-1-17 00:57:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-17 10:16:52 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2011-1-17 11:43:51 | 显示全部楼层
先作个记号。

出0入0汤圆

发表于 2011-1-17 13:58:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-17 15:09:49 | 显示全部楼层
不考虑去抖?光电的应该可以机械的……

出0入0汤圆

发表于 2011-3-19 19:01:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-30 16:08:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-30 17:32:18 | 显示全部楼层
学习了!用了几个IO??

出0入0汤圆

发表于 2011-6-30 18:19:18 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2011-8-10 19:08:29 | 显示全部楼层
yong 2 IO.
头像被屏蔽

出0入0汤圆

发表于 2011-8-10 19:30:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2011-8-10 20:13:42 | 显示全部楼层
我不太理解它的工作原理

出0入0汤圆

发表于 2011-8-11 00:06:27 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2011-8-11 00:26:04 | 显示全部楼层
mark!

出0入228汤圆

发表于 2011-8-11 00:35:21 | 显示全部楼层
中断后 保存一下时间,
主程序中判断一下就能处理速度问题了

出0入0汤圆

发表于 2011-8-11 06:30:34 | 显示全部楼层
要是按楼上各位的用法,恐怕也只能自己玩玩了。
用过的都知道,编码器这样得出的数误差很大,具体原因是因为运动时的抖动造成的。

出0入0汤圆

发表于 2011-8-11 06:47:06 | 显示全部楼层
不错,思路很新颖,加上去抖动就更好了。

出0入0汤圆

发表于 2011-8-11 06:52:38 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-8-11 08:25:25 | 显示全部楼层
搞过定时扫描的,不用中断

出0入0汤圆

发表于 2011-8-11 09:48:26 | 显示全部楼层
MARK,很不错.

出0入0汤圆

发表于 2011-8-11 11:52:55 | 显示全部楼层
我感觉在某个位置时,会出现连续自加,自减呢?

出0入0汤圆

发表于 2011-8-11 12:28:19 | 显示全部楼层
留个记号!

出0入0汤圆

发表于 2011-8-11 12:48:05 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-8-11 13:43:31 | 显示全部楼层
哈哈,顶一下~~

出0入33汤圆

发表于 2011-8-11 14:06:36 | 显示全部楼层
收藏,人多力量大啊

出0入0汤圆

发表于 2011-8-11 14:11:33 | 显示全部楼层
回复【46楼】zhonghua_li 蓝色天空
我感觉在某个位置时,会出现连续自加,自减呢?
-----------------------------------------------------------------------

详细说说?具体那个部位?

出0入0汤圆

发表于 2011-8-11 19:31:47 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-8-11 20:31:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-11 20:36:45 | 显示全部楼层
这样弄在用高分辨率的编码器时是会出问题的。

出0入0汤圆

发表于 2011-8-11 20:41:16 | 显示全部楼层
不错,准备在stm32试一下

出0入0汤圆

发表于 2011-8-11 21:03:31 | 显示全部楼层
oK!mark

出0入0汤圆

发表于 2011-8-11 21:39:20 | 显示全部楼层
留个记号,学习了。

出0入0汤圆

发表于 2011-9-30 10:38:46 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-9-30 10:46:23 | 显示全部楼层
;mark

出0入0汤圆

发表于 2011-9-30 11:31:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-3 20:00:29 | 显示全部楼层
mark一下,先藏着,等回头再来学习

出0入0汤圆

发表于 2011-10-3 20:03:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-4 09:49:15 | 显示全部楼层

出130入129汤圆

发表于 2011-10-4 10:21:21 | 显示全部楼层
回复【19楼】xiaole01 潇乐
突然想明白了,这东西就是这么简单,所以我总结出一句话:
<< 一个被按下后判断另一个,如果两脚一样就是正向,如果两脚不一样,就是反向  >>
就这么简单,而且超稳定。
看过各前辈写的程式,都复杂化了,看有一个前辈竟然写了两三页。
如有不对,请多多指教、、、
-----------------------------------------------------------------------
楼主似乎忽略了一点,按你的说法就是X4模式,在每个相位引脚上升下降沿都会产生中断,你应该判断该中断是由A相还是B相触发后才能这么说。

假如A相超前B相90度

A相产生中断时  
if(A==B)
{计数--;}
else
{计数++;}

而B相产生中断时
if(A==B)
{计数++;}
else
{计数--;}

(原文件名:X4模式.jpg)

出0入0汤圆

发表于 2011-10-5 12:04:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-5 15:10:54 | 显示全部楼层
mark 谢谢好东西有时间再看

出0入0汤圆

发表于 2011-10-31 10:06:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-1 06:42:28 | 显示全部楼层
这样可能会有问题的

出0入0汤圆

发表于 2011-11-1 09:44:24 | 显示全部楼层
简单 MARK

出0入0汤圆

发表于 2011-11-1 10:40:06 | 显示全部楼层
抗干扰能力不行,玩玩可以

出0入0汤圆

发表于 2011-11-1 11:31:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-2 00:30:23 | 显示全部楼层
自己做实验可以,但用在产品上就不严谨了,要考虑的东西太多,干扰 抖动 等。。。。

出0入0汤圆

 楼主| 发表于 2011-12-29 09:19:24 | 显示全部楼层
回复【65楼】68336016
-----------------------------------------------------------------------

只用一个中断就行了,要么用A相的,要么用B相的,进入中断后判断另一个脚的状态就行了,

出0入0汤圆

发表于 2011-12-29 09:27:44 | 显示全部楼层
mark ,测试下

出0入0汤圆

 楼主| 发表于 2012-1-18 10:27:18 | 显示全部楼层
不知道大家有没有真正的测试,具我这么长时间的测试很稳定,
比我示波器上的稳定多了,示波器上的我要它加它就减,要它减它就加,

出0入0汤圆

发表于 2012-1-19 23:17:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-20 09:38:40 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2012-1-20 10:25:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-20 11:10:53 | 显示全部楼层
mark

出0入98汤圆

发表于 2012-1-20 11:21:41 | 显示全部楼层
标记下,过几天有用

出0入0汤圆

发表于 2012-1-20 20:18:08 | 显示全部楼层
Mark哟~涨楼很快~

出0入0汤圆

发表于 2012-1-20 20:22:20 | 显示全部楼层
Mark

出0入0汤圆

发表于 2012-1-21 07:25:06 | 显示全部楼层
记号

出0入0汤圆

发表于 2012-2-16 16:57:39 | 显示全部楼层
好东西,我验证一下看看!!

出0入0汤圆

发表于 2012-5-26 21:51:36 来自手机 | 显示全部楼层
记号一下。

出0入4汤圆

发表于 2012-5-29 09:45:38 | 显示全部楼层
开边沿中断可以,不开中断是不行的,因为必须在上下沿判断出的结果才有效

出0入10汤圆

发表于 2012-5-29 10:57:15 | 显示全部楼层
这个吧,只能自己玩玩和认识下编码器的,真用起来没这么简单的。。。。。

出0入0汤圆

发表于 2012-5-30 00:25:53 | 显示全部楼层
有空试一下楼主的行不行

出0入0汤圆

发表于 2012-9-13 23:11:02 | 显示全部楼层
正准备用这个

出0入0汤圆

发表于 2012-10-18 23:05:56 | 显示全部楼层
现在学习一下

出0入0汤圆

发表于 2012-12-24 22:49:11 | 显示全部楼层
学习了,谢谢!

出0入0汤圆

发表于 2013-4-4 00:54:04 | 显示全部楼层
不错,记号

出0入0汤圆

发表于 2013-4-4 07:47:28 | 显示全部楼层
学习,不想用mark

出0入0汤圆

发表于 2013-4-4 11:07:22 | 显示全部楼层
逻辑越简单,程序越稳定

出0入0汤圆

发表于 2013-12-5 19:54:44 | 显示全部楼层
正需要,马上试试

出0入0汤圆

发表于 2013-12-6 00:04:24 来自手机 | 显示全部楼层
好好学习一下,先记号。

出0入0汤圆

发表于 2013-12-6 00:12:07 | 显示全部楼层
这个要MARK一下              

出0入12汤圆

发表于 2014-2-24 09:08:14 | 显示全部楼层
谢谢66楼,看懂了

出0入0汤圆

 楼主| 发表于 2014-10-11 15:38:49 | 显示全部楼层
68336016 发表于 2011-10-4 10:21
回复【19楼】xiaole01 潇乐
突然想明白了,这东西就是这么简单,所以我总结出一句话:
>

只用一个中断就可以了,不用两个的,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 11:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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