DIP开关与单片机,MCU接口的基本原理

控制/MCU

1882人已加入

描述

Q A &

问:DIP 开关与单片机 MCU接口的基本原理

将单片机 (微控制器) 连接到双列直插式封装( DIP ) 开关是一种常见的应用。俗称“DIP” 的开关可用于各种设计,从适合面包板原型设计的传统 DIP 到表面贴装“钢琴”型,再到易于读取十六进制值的旋转开关。

 

在这篇文章中,我们将仔细研究旋转开关,并探索如何将其集成到我们的单片机设计中。本文中介绍的技术一般适用于所有单片机设计。

从规则开始

让我们从一个简单的规则开始:不允许浮动输入 。当单片机引脚被配置为输入,但在其他情况下未连接时,就会出现浮动输入。这里展示了一个例子。当开关闭合时,关联引脚被绑在正轨上。当开关打开时,引脚是浮动的。

mcu

这是非常不希望的,因为浮动引脚可能被解释为逻辑高,或者在其他时候,逻辑低。从故障排除的角度来看,单片机的响应将没有任何韵律或原因。引脚容易受到噪声的影响,并且通常会松散地遵循相邻单片机引脚的值。 解决方法是增加一个下拉电阻,如下图所示。有了这个小小的变化,当开关闭合时,单片机的引脚就会向上拉到导轨上,或者当开关打开时,它就会向下拉到地上。暂时忽略开关弹跳,单片机将有一个干净的输入。

mcu

优化解决方案

现代单片机就是为这种类型的接口而设计的。几乎所有的单片机都具有 I/O 部分,其内部电阻可以向上拉或向下拉 I/O 引脚。这是可取的,因为开关可以直接连接到单片机,从而消除了外部电阻器的需要。

技术小贴士 :

一些单片机具有上拉和下拉电阻。其他将只有一种类型,与上拉配置更常见。这些外设通常被称为“弱上拉”,消耗数十到数百uA。这相当于连接一个值在15 kΩ到150 kΩ之间的外部拉电阻。

Arduino的一个例子是:

pinMode (SW_PIN_D0INPUT_PULLUP);

该原理图给出了单片机与开关接口的一种方式。虽然本例采用旋转 DIP 开关,但该设计适用于所有开关。观察:

内部上拉电阻使用单片机的特殊功能寄存器启用

开关的公共元件连接到地

mcu

技术小贴士 :

原理图中显示了一个可选的串联电阻以及可选的多路复用部分。这允许 I/O 引脚执行双重任务。例如,这个小口宽的接口可以用来读取开关,也可以用来驱动 LCD 显示器的 D3 到 D0。这可能是可取的,因为它有可能以牺牲电路和代码复杂性为代价减少单片机引脚数和PCB的总体尺寸。

在我们结束之前,让我们看一下与旋转 DIP 开关相关的物理开关代码。代表性的HEX代码取自欧姆龙的数据手册。观察 A6A-16R 和 A6A-16C 型号对应的“BCD十六进制码” 和 “BCD十六进制补码” 两个开关配置。

mcu

回头看单片机原理图及其相关的上拉电阻,我们看到了一个反转。例如,当开关处于1位置时,在位置2 + 4 + 8上会有三个正逻辑输入。同时,如果安装了互补开关,则会有一个对应于1信号的正逻辑(有源高电平)输入。
从编程的角度来看,这个物理开关代码中的这种差异是无关紧要的。一个简单的 bit 反转指令就会使它们相等。从故障排除或教育的角度来看,互补版本可能更容易理解,因为它导致单片机引脚上存在正逻辑值。

审核编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分