单片机交流
登录
直播中
jfsky
16年用户
510经验值
私信
关注
[问答]
有网友可以分享一款基于51单片机和MCP23017的IO扩展方案吗?谢谢!
开启该帖子的消息推送
单片机
有网友分享一款
单片机
IO扩展的设计方案吗?
当所需要用到的IO口数量大于该品牌单片机最大IO口数量的又怎么办呢?
主控板带有哪些硬件资源?
回帖
(4)
彭瑾
2021-10-13 11:11:31
学单片机的小伙伴们都知道,单片机的IO口数量都是固定的,在做项目的时候,需要根据自己实际用到的IO数量,再综合考虑一下单片机自带的硬件资源,我们会选择不同封装的单片机。
然而,当所需要用到的IO口数量大于该品牌单片机最大IO口数量的又怎么办呢?也许有人会说,换别的品牌的单片机不就好了,比如,总所周知,STC单片机最大的封装是64脚的,出去两个电源引脚,最大IO口数量可以达到62个,然而,假如我在一个项目中要用到80个IO口怎么办?直接上STM32啊!没错,确实可以用STM32来做,但是,并不是所有会用51单片机的人都能轻轻松松上手STM32来做项目,比如像笔者这样的,用惯了STC的单片机,如果突然让我用STM32来替代STC单片机的位置,还是需要花不少时间来研究。
基于上述原因,很多人自然会想到了IO口扩展!当然,IO扩展有很多种方式,比如,用74系列的74HC138(三八译码器),只需要3个IO口就可以扩展成8个输入口:
另外,74HC595、74HC164同样也可以用少量IO口扩展成更多的IO口,而且支持级联,也是一种不错的选择:
当然,也有并联扩展方案,比如,用74HC244和74HC273,共用8位数据口,通过在不同时刻控制每个芯片的使能端,便可以获得当前输入口状态或控制当前输出:
学单片机的小伙伴们都知道,单片机的IO口数量都是固定的,在做项目的时候,需要根据自己实际用到的IO数量,再综合考虑一下单片机自带的硬件资源,我们会选择不同封装的单片机。
然而,当所需要用到的IO口数量大于该品牌单片机最大IO口数量的又怎么办呢?也许有人会说,换别的品牌的单片机不就好了,比如,总所周知,STC单片机最大的封装是64脚的,出去两个电源引脚,最大IO口数量可以达到62个,然而,假如我在一个项目中要用到80个IO口怎么办?直接上STM32啊!没错,确实可以用STM32来做,但是,并不是所有会用51单片机的人都能轻轻松松上手STM32来做项目,比如像笔者这样的,用惯了STC的单片机,如果突然让我用STM32来替代STC单片机的位置,还是需要花不少时间来研究。
基于上述原因,很多人自然会想到了IO口扩展!当然,IO扩展有很多种方式,比如,用74系列的74HC138(三八译码器),只需要3个IO口就可以扩展成8个输入口:
另外,74HC595、74HC164同样也可以用少量IO口扩展成更多的IO口,而且支持级联,也是一种不错的选择:
当然,也有并联扩展方案,比如,用74HC244和74HC273,共用8位数据口,通过在不同时刻控制每个芯片的使能端,便可以获得当前输入口状态或控制当前输出:
举报
tijing忽忽
2021-10-13 11:12:01
笔者曾经初学的时候,就用了74HC138+74HC244+74HC273的方案做了一款板子,虽然说使用上没多大问题,但是,在布线的时候,还是感觉到了这种方案的不足之处:
由于笔者比较懒,而且项目中对于这种IO扩展确实用到的比较少,所以也没有进一步去研究,直到前段时间,笔者的一位朋友跟我提出了一个需求,就是想用51单片机做个板子,尽可能多的扩展IO,因为他想用这个板子在做多机通信,既能做从机又能做主机,而主机上用到的按钮和指示灯比较多,所以可能需要总共一百多个输入输出。
笔者刚开始的时候,有两种方案:
一是用曾经做过的板子,稍加改动一下来做,例程也有现成的,程序写起来也简单;
二是直接用STM32来做。
第一种方案的话,要说可行的确实也能用,但是总感觉不是很理想。对于第二种方案,笔者也是可以上手STM32的,选个100脚,甚至144脚、176脚的单片机,做一些IO控制、串口通信问题不大。但是,前提是,我那朋友用51单片机都有点吃力,更别说让他用STM32单片机了,而且,我虽然对STM32的使用没多大问题,但是,真正遇到问题的时候,未免能给他指点太多。思前想后,还是决定再找找看有没有其他的方案!
终于,在某宝上突然看到了两款分别以MCP23017(IIC接口)和MCP23S17(SPI接口)芯片为控制芯片的扩展板。然后仔细查看了一下这两款芯片的资料,大致如下:
从上面的资料我们可以知道,IIC接口的MCP23017只需要两个IO口,便可以实现最多16*8=128个IO口的扩展,其中,16为每个芯片的最大IO口,8为最大地址数量,因为只有3个地址控制位,所以最大只能设置8个地址。另外,由于MCP23017芯片IO口的模式可以任意设置为输入或输出模式,所以,我们可以在这扩展的最大的128个IO口中,任意搭配出不同的输入口和输出口,再加上51单片机本身的五六十个输入口,那么通过这种扩展方案,可以让控制板最多拥有180多个输入输出口。SPI接口的MCP23S17芯片也是类似的效果,只是多占用单片机本身1个IO口而已。
笔者曾经初学的时候,就用了74HC138+74HC244+74HC273的方案做了一款板子,虽然说使用上没多大问题,但是,在布线的时候,还是感觉到了这种方案的不足之处:
由于笔者比较懒,而且项目中对于这种IO扩展确实用到的比较少,所以也没有进一步去研究,直到前段时间,笔者的一位朋友跟我提出了一个需求,就是想用51单片机做个板子,尽可能多的扩展IO,因为他想用这个板子在做多机通信,既能做从机又能做主机,而主机上用到的按钮和指示灯比较多,所以可能需要总共一百多个输入输出。
笔者刚开始的时候,有两种方案:
一是用曾经做过的板子,稍加改动一下来做,例程也有现成的,程序写起来也简单;
二是直接用STM32来做。
第一种方案的话,要说可行的确实也能用,但是总感觉不是很理想。对于第二种方案,笔者也是可以上手STM32的,选个100脚,甚至144脚、176脚的单片机,做一些IO控制、串口通信问题不大。但是,前提是,我那朋友用51单片机都有点吃力,更别说让他用STM32单片机了,而且,我虽然对STM32的使用没多大问题,但是,真正遇到问题的时候,未免能给他指点太多。思前想后,还是决定再找找看有没有其他的方案!
终于,在某宝上突然看到了两款分别以MCP23017(IIC接口)和MCP23S17(SPI接口)芯片为控制芯片的扩展板。然后仔细查看了一下这两款芯片的资料,大致如下:
从上面的资料我们可以知道,IIC接口的MCP23017只需要两个IO口,便可以实现最多16*8=128个IO口的扩展,其中,16为每个芯片的最大IO口,8为最大地址数量,因为只有3个地址控制位,所以最大只能设置8个地址。另外,由于MCP23017芯片IO口的模式可以任意设置为输入或输出模式,所以,我们可以在这扩展的最大的128个IO口中,任意搭配出不同的输入口和输出口,再加上51单片机本身的五六十个输入口,那么通过这种扩展方案,可以让控制板最多拥有180多个输入输出口。SPI接口的MCP23S17芯片也是类似的效果,只是多占用单片机本身1个IO口而已。
举报
许佳
2021-10-13 11:12:14
在看完芯片资料后,笔者果断买了块小板子回来做测试,卖家也提供了完整的例程,试着根据例程改写了一下,还真是一个不错的IO扩展方案。
于是,果断的就决定了用MCP23017这款芯片来做IO扩展了。说干就干,没过多久,板子就出来了,给大家分享一下设计的效果图吧,至于原理图其实就很简单了,布线方面也是比之前的方案简单了许多。
主控板效果图
在看完芯片资料后,笔者果断买了块小板子回来做测试,卖家也提供了完整的例程,试着根据例程改写了一下,还真是一个不错的IO扩展方案。
于是,果断的就决定了用MCP23017这款芯片来做IO扩展了。说干就干,没过多久,板子就出来了,给大家分享一下设计的效果图吧,至于原理图其实就很简单了,布线方面也是比之前的方案简单了许多。
主控板效果图
举报
曹雪琰
2021-10-13 11:12:26
主控板带有以下硬件资源:
24路光耦隔离输入
20路MOS管隔离输出
2路0-10V模拟量输入接口
1路RS485接口
2路RS232接口
1路脱机下载接口,同时可外接UART接口的模块
1路专门为市面上常用无线模块设计的UART无线模块接口
1路IIC接口用于IO扩展
4位拨码开关用于多机通信设置地址
16路输入扩展模块带有如下资源:
16路光耦隔离输入
2个IIC接口,用于连接多个模块
3位拨码开关,用于设置模块地址
16路输出扩展模块主要有如下资源:
16路MOS管隔离输出接口
2个IIC接口,用于连接多个模块
3位拨码开关,用于设置模块地址
MCP23017的使用,使得这套控制板,不仅板子布线、元件布局变得接单,扩展的时候外部接线也变得简单很多,而且可以自由搭配输入、输出模块的个数,只需在软件中,根据模块的地址,将模块分别设置成输入或输出模式即可。
好了,关于单片机IO扩展的方案就简单介绍到这了。
主控板带有以下硬件资源:
24路光耦隔离输入
20路MOS管隔离输出
2路0-10V模拟量输入接口
1路RS485接口
2路RS232接口
1路脱机下载接口,同时可外接UART接口的模块
1路专门为市面上常用无线模块设计的UART无线模块接口
1路IIC接口用于IO扩展
4位拨码开关用于多机通信设置地址
16路输入扩展模块带有如下资源:
16路光耦隔离输入
2个IIC接口,用于连接多个模块
3位拨码开关,用于设置模块地址
16路输出扩展模块主要有如下资源:
16路MOS管隔离输出接口
2个IIC接口,用于连接多个模块
3位拨码开关,用于设置模块地址
MCP23017的使用,使得这套控制板,不仅板子布线、元件布局变得接单,扩展的时候外部接线也变得简单很多,而且可以自由搭配输入、输出模块的个数,只需在软件中,根据模块的地址,将模块分别设置成输入或输出模式即可。
好了,关于单片机IO扩展的方案就简单介绍到这了。
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
请问
MCP23017
IOExpansionBoard如何
扩展
IO
资源?
2020-11-05
1510
Arduino UNO与
MCP23017
之间如何连线?
2022-01-17
687
触发
MCP23017
中断时wdt复位的原因?
2023-05-19
353
MCP23017
无法正确点亮LED
2018-11-20
5275
需要帮助PIC18F47K42与
MCP23017
的I2C接口
2018-10-10
3397
如何通过I2C将Pic18F8722与
MCP23017
接口的任何代码吗
2020-05-11
1025
帮忙推荐
一款
IO
口输出为5V的
单片机
2018-11-19
4058
MCP
***端口无输出
2020-03-17
1824
一
个板子如果要用两
款
相近的
单片机
做
方案
,
一
个
款
用,软件应该怎么做?
2021-02-01
4296
51
单片机
io
口不够用
可以
用另
一
51
单片机
来使用吗?该如何实现
2016-05-28
11514
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分