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]