monlika 发表于 2012-1-9 21:22:48

也许是屎上最简单的旋转编码器程序, 占用一个外中断

#define ROTATE_A PIND.2
#define ROTATE_B PIND.3

uchar CW=0;
uchar CCW=0;

// External Interrupt 0 service routine
interrupt void ext_int0_isr(void)
{
if(ROTATE_A!=ROTATE_B)
    {
      CW++;   
    }
      else CCW++;
}

void main(void)
{
        if ((CW|CCW)!=0)
            {
            DATA=DATA+CW-CCW;
            }
      CW=0;
      CCW=0;   
      delay_ms(50);
}


//////////////////////////////////////////

占用一个外中断,电平变化触发,CW是顺时针转过的脉冲,CCW是逆时针

每50ms处理一下数值,如果想要出错,起码脉冲时间要比50ms/256短才行,手指是没可能达到这速度

实际应用中感觉很爽

monlika 发表于 2012-1-9 21:24:23

硬件上两个信号引脚各并了两个10nf电容,带上拉

wblqx 发表于 2012-1-9 21:36:54

非常不错。

kelos3000 发表于 2012-1-9 21:52:06

mark

shuxmpx123 发表于 2012-1-9 22:01:09

大哥,你的程序写的非常好啊,能不能把硬件原理贴出来看下,我没用过旋转拨码的,不懂···

henry 发表于 2012-1-9 23:21:02

mark

xingliu 发表于 2012-1-9 23:23:56

恩。这个试试。

xsh2005105326 发表于 2012-1-9 23:51:19

mark

dapenti 发表于 2012-1-10 00:07:49

编码器的各种程序
http://www.arduino.cc/playground/Main/RotaryEncoders

Onsunsl 发表于 2012-1-10 00:22:13

低频情况下可以接受,上了10k以上频率估计MCU受不了,现在带正交编码接口MCU也很多,而且也便宜了

wsm80828 发表于 2012-1-10 05:52:20

mark

dongls 发表于 2012-1-10 08:25:15

mark

wxx116zh 发表于 2012-1-10 08:35:30

mark

chenqi 发表于 2012-1-10 08:35:34

mark

lcmdw 发表于 2012-1-10 08:36:14

mark

shuxmpx123 发表于 2012-1-10 08:56:25

回复【9楼】Onsunsl金平合吾
-----------------------------------------------------------------------

这个还要用专用的接口啊,这么复杂

lsy5110 发表于 2012-1-10 10:13:28

mark

Spunky 发表于 2012-1-10 14:49:32

mark

ecat 发表于 2012-1-10 16:53:07

谢谢楼主!是够简单,只是硬件上略有限制。有机会试一下。

mdj-fish 发表于 2012-1-11 10:55:52

543
8

shuchudi 发表于 2012-1-12 09:32:04

回复【楼主位】monlika 电子钟
-----------------------------------------------------------------------
请问外中断是由什么触发的?

monlika 发表于 2012-1-12 12:45:37

换了另外一种带开关的编码器, 发现两种不一样

一种停顿时有高低电平两种状态的, 就要电平变化触发

另外一种只有低电平的, 就要上升或下降沿触发就行了

yk28981 发表于 2012-1-12 21:13:18

收下!学习一下!

shaoyidong 发表于 2012-1-13 12:25:19

mark shenku

wthzack 发表于 2012-4-8 04:14:18

够简单    有机会试一下。

faw 发表于 2012-4-8 06:05:20

本帖最后由 faw 于 2012-4-8 06:06 编辑

请问一下,有的编码器输出不是规整的方波,是编码器的问题吗?
我买一个欧姆龙的就不输出标准的方波,害得的的程序不好用,后来用示波器来知道!

shower.xu 发表于 2012-4-8 07:42:12

mark 编码器程序

yuyanlzh 发表于 2012-4-8 07:52:31

请问这个最高支持多少脉冲的旋转编码器?

farfar 发表于 2012-4-8 08:25:55

这个思路很不错。

fy024 发表于 2012-4-8 10:01:08

我刚好用到,我写的比

millwood0 发表于 2012-4-8 10:06:17

the best approach is to use two external ints or port changes.

otherwise, you can use a timer interrupt to read the pins and a state machine to detect rotation.

lisen090 发表于 2012-4-11 18:13:14

mark一记 最近在做

dory_m 发表于 2012-4-12 07:56:17

学习!!!

huangdongle 发表于 2012-4-12 08:00:09


mark,

mark

weiyix 发表于 2012-6-8 23:00:40

mark!!!!!!!!!!!!

shark 发表于 2012-6-8 23:21:31

为什么要用两个变量?写成这样如何?
#define ROTATE_A PIND.2
#define ROTATE_B PIND.3

charW = 0;
// External Interrupt 0 service routine
interrupt void ext_int0_isr(void)
{
   if(ROTATE_A!=ROTATE_B)
       ++W;
   else
       --W;
}

void main(void)
{
      if (W) {
         DATA += W;
         W = 0;
      }
      delay_ms(50);
}

86hupeng 发表于 2012-6-9 08:40:44

{:lol:}我也改进过,单片机正交脉冲四倍频,速率接近1M

shiyingyifan 发表于 2012-8-29 00:04:17

留个记号,以备后用

liveinsunday 发表于 2012-10-12 16:55:51

厉害、试用一下

liangong 发表于 2012-10-12 17:06:52

屎上最简单!

leafzq 发表于 2012-10-12 17:14:55

有什么用的啊

kanping 发表于 2013-3-21 14:30:22

{:lol:}看不懂啊

wtiechen1969 发表于 2014-5-10 11:50:21

mark旋转编码器

liulingang_1205 发表于 2014-5-14 20:44:15

挺好的            

jz701209李 发表于 2014-5-20 16:58:18

学习一下,谢谢

michael.yang 发表于 2014-5-20 17:12:41

顶起      

ppdd 发表于 2014-7-31 22:48:04

简单应用,好使!!

my2jia 发表于 2014-8-8 21:28:49

感谢lz的分享

犬火 发表于 2014-8-13 11:18:21

没有任何消抖,用的是接触式的很容易误判的

mxkarm 发表于 2014-8-13 11:56:34

我以前也有搞过,现在忘了我。。老了

dashiyedewa 发表于 2014-8-13 12:17:05

没用过,不怎么懂

机器人天空 发表于 2014-8-13 12:28:31

没用过中断,都是每个10ms扫描一下

hwx123 发表于 2014-10-15 16:55:23

谢谢lz的分享

dammon 发表于 2014-10-21 16:57:49

怎么判断正反转???

gongngei 发表于 2014-10-21 17:10:30

好简洁的程序

cece_co 发表于 2014-10-21 17:12:17

mark            

开始 发表于 2014-11-5 21:13:57

mark                  

皮爱了西 发表于 2015-1-12 13:23:59

使用B相的上升沿触发中断么?

xiaobendan 发表于 2015-1-12 13:42:05

如果中断是双向的,还行,如果是单向,只有一个下降沿,那就不对了

lovecxm 发表于 2015-1-18 15:32:20

留名学习

ali1019 发表于 2015-1-18 15:50:39

相信很多類似應用, 大家的第一個想法一定是使用編碼器,
最近不小心看過一個專利設計 , 一個幾毛錢的小型限位開關搞定,瞬間讓人崩潰,當時唯一想法就是佩服,

weatt123456789 发表于 2017-3-13 08:56:38

转快了,还是感觉不行呢

tiantang46800 发表于 2017-8-3 17:36:07

mark 最简单

gaobao_1 发表于 2017-12-5 11:41:59

学习了,试验一下!

qq335702318 发表于 2017-12-5 13:16:11

代码少不等于就是好代码...

lxa0 发表于 2021-4-5 15:54:54

有没有不占用外部中断的方法?

astankvai 发表于 2021-4-5 17:18:52

对于32脉冲每圈的编码器适用吗?
页: [1]
查看完整版本: 也许是屎上最简单的旋转编码器程序, 占用一个外中断