开发板上可用于ADC模数转换实验的外设有两个,一个是电位器,另一个是多路选择按键。电位器本质上是一个滑动变阻器,通过电阻分压获得不同的电压,无需多言。在使用引脚较少的单片机时,可以在各个按键上串联不同的电阻,在不同的按键按下时,不同的电阻分出不同的电压,进而可以用一个引脚实现多个按键的读取。
ATtiny24/44/84有8路单端的10位ADC,分在在PA0~PA7引脚上,分别对应Arduino IDE中序号0~7。在Arduino IDE中,读取模拟量的函数为analogRead(pin),pin为引脚序号,返回值为0~1023的整数。
在上一篇中,我们已经能够对电机的转速进行调整。这一篇中,我们将电机的控制权交给电位器。根据上面的电路,在旋转电位器时,ADC引脚的电压会在0~VCC之间变化,对应数字量0~1023,而PWM占空比的调节范围是0~255。因此,我们可以引入map函数。map函数将数字从一个范围重新映射到另一个范围,如下图程序所示,当analog在0~1023之间变化时,函数返回值在0~255之间等比例变化。用得到的结果控制电机,即可用电位器调整电机转速。
在本系列的第三篇中,我们已经了解了单按键读取的方式。当需要读取多个按键但引脚不够用时,我们可以使用上述的方式通过不同电阻按键选通分压。在电阻选型时,最好能将各个按键分出的电压均匀区分开,便于确定阈值,提升抗干扰能力。设计一个实验,我们可以通过不同的按键让电机工作在不同的状态下,如下图所示。
可以通过计时函数实现长短按的区分,如下图程序所示。在时间还未到达2秒时,判断是否存在按键松开。若存在则判断为短按并退出,否则2秒后若按键松开,则判断为长按。
通过这种方式进行按键读取时,更加需要进行延时消抖,因为抖动造成的电压不稳相对于高低电平判断,其对模数转换的影响更大。
以下为演示视频,当短按第一个按键时,电机以半速正转;短按第二个按键时,电机以全速正转;短按第三个按键时,电机以半速反转;短按第四个按键时,电机以全速反转;长按任一按键时,电机停止。完整程序和开发板电路可在本系列第一篇博客中电路城链接中下载。
Arduino IDE开发ATtiny实践
至此,基于Arduino IDE开发ATtiny24/44/84实践就告一段落甚至完全结束了,对于其中的错误与不足还望各位道友指正。有感兴趣的电子相关系列希望我做的可以在评论区积极留言,后面我可能出该系列的博客。