EC11旋转编码器电路和程序

现在手里的项目使用到了旋转编码器,目前只使用了旋转功能,按钮功能没用到,电路图如下:

说一下为什么这么画,原因很简单,旋钮并不需要供电,它做的工作是把原来的高电平拉低,或者不改变高电平状态,这就是为什么旋钮有接地接线柱。所以旋钮的输出引脚需要一直输出高电平就好了,我是用的是Mega8单片机,所以PORTD = 0xC3 DDRD = 0xFF,这样就完成了电平的设置。我按键功能暂时并没有用到。如果直接就把旋钮接到单片机,当使用的时候,用示波器会看到很大的噪声。在网上看到,有使用软件滤波的,我是求助了一个前辈,得到了RC滤波电路,前辈告诉我说,这是很经典的电路。(我是才疏学浅了!!)于是配上0.1uF电容,和10K电阻后,波形非常完美。就算旋转的很快,也没有问题。

以上是硬件部分,接下来是软件部分。软件部分,之前在网上找的例程,抄一下,稍微改改就可以了。今天在找这个程序,发现丢了大哭!都怪自己没有备份,因为知道网上可以找到,所以犯了依赖症,一直找啊找,结果还是徒劳。后来还是自己写的,(难道程序丢了,是因为我剽窃了??罪过罪过)。程序如下:

ISR(INT1_vect)//INT0中断服务程序
{
	cli();
	CodingsWitchPolling2();//(这个名字也是剽窃的,抱歉抱歉)
	sei();
}
<pre name="code" class="cpp">nt CodingsWitchPolling1(void)
{
	if (PIND & 0x04)//检测中断引脚电平
	{
		if (PIND & 0x10)//检测另一引脚电平
			USART_Transmit('C');
		else
			USART_Transmit('D');
	}
	else
	{
		if( !(PIND & 0x10))
			USART_Transmit('C');
		else
			USART_Transmit('D');
	}
	return 0;
}


 
看到这个程序,你又没有感觉很惊讶,其实没那么复杂。现在说一下为什么是这个样子的: 

看原理时,都知道,旋转编码器是输出两种波形的,顺时针和逆时针的,如图:

我的硬件电路里面,连接的是PD3(INT0)引脚,另一脚在PD4上面,中断出发方式是任意电平变化都触发,所以就是,触发中断->检测中断引脚电平->检测另外一脚电平->判断是顺时针还是逆时针。OK就这么简单。


  • 8
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值