今天给大家分享我在github上看到的一个有意思的项目:使用微控制器 PIC16F1459 构建 DIP 开关 USB U盘。(附带电路原理图,PCB布局设计,原始应用程序。)
本文引用地址:
主要是用拨片开关来进行配置设备,只需要拨动红色开关就可以轻松配置文件。不需要编辑 XML 和 JSON 文件来存储硬件或软件的配置设置。
这个项目分享给大家,步骤讲解得很详细,如果感兴趣的可以动手试试。
先放上成品图。
![DIP 开关插电脑上图](http://n.sinaimg.cn/spider20240719/108/w1024h684/20240719/477e-769c6f46d5cecf8740db290e9d8fa740.png)
![](http://n.sinaimg.cn/spider20240719/108/w1024h684/20240719/5b58-2755080e1d82d2e8e9cad0ab155ad318.png)
DIP 开关 U 盘的后视图和前视图(颜值还挺高的)
作者总共设计制作了两种不同版本的DIP 开关U盘。第一个使用非常紧凑的表面贴片DIP开关,第二种使用安装表面贴装 DIP 插座中的独特彩虹 DIP 开关。
USB A插头(如下图所示)
![](http://n.sinaimg.cn/spider20240719/107/w1024h683/20240719/2b88-41f8f7b23955bb5e80593d743fb36041.png)
Molex USB A 插头
这是一个安装在电路板末端的USB A 型插头,可以直接插入电脑的正面或侧面的USB A插孔。
本来是可以使用 USB Type C 插头,但作者的电脑没有USB Type C 端口。
1、微控制器 PIC16F1459
作者喜欢用8位的USB微控制器,于是采用了TSSOP-20 封装的 Microchip PIC16F1459,这个微控制器支持所需的电路和USB软件。唯一不确定的问题是它是否有足够的输入引脚用于DIP开关的8个输入。在查阅了datasheet,确认连接USB 操作所需的基本组件后,确定了引脚是够用的。
![](http://n.sinaimg.cn/spider20240719/108/w1024h684/20240719/15fb-d536f1f6be4dfdf7f899c9c8c51211d4.png)
PIC16F1459 采用 TSSOP-20 封装,后面有一个 8 位 SMD 开关,用于缩放
2、表面贴装 DIP 开关
为了使设计更紧凑,就需要把微控制器放在电路板的底部,把开关放在电路板的顶部,就需要一个表面贴装开关,最后选择了 CTS 219-8MSTR 8 位表面贴装滑动开关。
开关顶部带有可拆卸的胶带密封,可以承受高焊接温度和电路板的清洗。
![](http://n.sinaimg.cn/spider20240719/107/w1024h683/20240719/8903-0942089a24347e77ff8d32ac548dc3e5.png)
带有保护涂层的 CTS SMD DIP 开关,保护涂层允许使用拾取和放置设备并在清洗过程中保护开关。
3、彩虹通孔拨码开关
第一个版本用ITW ERG 制造了彩虹通孔 DIP 开关,第二个版本带有用于彩虹 DIP 开关的表面贴装 DIP 插座。
彩虹拨码开关与类似的滑动和摇杆拨码开关相比,具有相当醒目的外观。
![](http://n.sinaimg.cn/spider20240719/108/w1024h684/20240719/d23a-3a3da27375d902eaa96005f6c50cd0bc.png)
三个候选通孔 DIP 开关,作者选择了 ERG 的彩虹模型
4、表面贴装 DIP 插座
选择了一个 Mill-Max 110-47-316-41-105000 表面贴装 DIP 插座来固定 ERG SDS-8-014 彩虹 DIP 开关。
![](http://n.sinaimg.cn/spider20240719/107/w1024h683/20240719/1d66-0537b80fe5cd55f440a11f489698996d.png)
表面贴装 DIP 插座
这个项目需要用到一个8 GPIO 引脚来连接 DIP 开关,然后在最靠近 DIP 开关的微控制器一侧选择了 8 个引脚。
但这些 GPIO 引脚不是都有内部弱上拉可用,所以需要添加一些上拉电阻,以便在各自的开关打开时将引脚拉高。
使用这个配置,GPIO 引脚将在开关打开(关闭)时读取高电平,在开关关闭(打开)时读取低电平。
然后有一个强制性的按钮开关和闪烁的LED。按钮开关与引导加载程序一起使用,可以允许在没有PLC编程器和标签连接电缆的情况下升级DIP开关USB U盘。
闪烁的 LED 被编程以指示 USB 枚举状态。缓慢闪烁表示板已通电但未枚举,快速闪烁表示板已通电并已枚举。
![设计原理图](http://n.sinaimg.cn/spider20240719/188/w1024h764/20240719/c6ea-d50ded922bdcb661e1f0d0cda5ee310e.png)
1、表面贴装开关版本
设计万完原理图后,开始设计与CTS SMD 滑动开关一起使用的电路板。最终布局如下图所示。
![](http://n.sinaimg.cn/spider20240719/768/w1264h1104/20240719/b3ea-88f4ed3a58e8ef793abcc63b32b57295.jpg)
板的非插座版本
当对布局比较满意的时候,查看了电路板预览图像,没有问题之后,就去订购PCB板了。
![](http://n.sinaimg.cn/spider20240719/704/w1024h480/20240719/6d60-b217bd59b7f7654da3de6897f17a6b03.png)
2、表面贴装 DIP 插座版本
设计了与 CTS SMD 滑动开关一起使用的电路板后,接着设计与表面贴装 DIP 插座和 ERG 彩虹 DIP 开关一起使用的电路板,最终布局如上图所示。
唯一真正的区别是开关或插座的16个焊盘的宽度和高度。
![](http://n.sinaimg.cn/spider20240719/768/w1264h1104/20240719/9322-dce9ddd07df4ec634dba5dfc93cc2295.jpg)
板的插座版本
当布局完成之后,依旧查看电路板板预览图,然后定制PCB板。
![](http://n.sinaimg.cn/spider20240719/704/w1024h480/20240719/39cc-3750ec3b51ee411c2513a2e190922c61.png)
![](http://n.sinaimg.cn/spider20240719/704/w1024h480/20240719/0ec4-91f9be0f5a49ee608ce7ce7ac862048d.png)
在等待PCB板的过程,使用Microchip 低引脚数 USB 微控制器开发板来编写该项目的软件。
在这个过程也遇到了许多问题,例如:想实现一个USB大容量存储设备类,其中包含一个带有开关状态的文件。但是开关的值可以从文件中读取一次,但当开关更改时就不再更新了。
为了解决这个问题,进行了多次尝试,例如在每次更改开关时执行软分离和重新连接,但这会导致许多烦人的不安全弹出和发现消息/警报声音。
最后将DIP开关USB U盘实现为供应商定义的 USB HID 设备。
USB 主机可以向 DIP 开关 USB 堆栈发送 USB OUT 报告,询问开关的当前状态。
DIP 开关 U 盘将响应包含开关当前状态的 USB IN 报告。
每当切换开关时,DIP 开关 USB U 盘也会以包含开关当前状态的 USB IN 报告进行响应。
![](http://n.sinaimg.cn/spider20240719/0/w1024h576/20240719/77b4-37e73be167746437c2f77614b65d773c.png)
在真正的板子从工厂回来之前,作者使用了一个 PIC 低引脚数 USB 开发板来编写软件。
为了演示DIP开关USB U盘,编写了一个快读的 C# .NET Windows 窗体应用程序。
该应用程序与开发板或真正的DIP开关U盘进行通信。
使用开发板,按钮开关切换红色开关图像。使用真板,应用程序中的开关图像反映了 DIP 开关 U 盘上开关的状态。
![](http://n.sinaimg.cn/spider20240719/274/w801h273/20240719/da51-05ccfa192da71a0faf77d276b3f51b5e.png)
C# .NET Windows 窗体演示应用程序
与表面贴装开关一起使用的成品板如下所示。
![](http://n.sinaimg.cn/spider20240719/107/w1024h683/20240719/e4ce-18ed14ca5b0f643dcb95b6ee77e0ea2d.png)
SMD版成品板
与表面贴装插座和通孔 DIP 开关一起使用的成品板如下所示。
![](http://n.sinaimg.cn/spider20240719/108/w1024h684/20240719/c612-5cee3673ecc82ea8e29fa5112b88b5d1.png)
插座版成品板
下图图左侧为电路板的表面贴装开关版本,右侧为电路板的表面贴装插座版本。
这里再强调一次,唯一这两个版本的区别是开关或插座的 16 个焊盘的宽度和高度。
![](http://n.sinaimg.cn/spider20240719/108/w1024h684/20240719/d9b2-db60f2aaff9c1020849eb059bd5a32b2.png)
板版本比较
将电路板放回原处,首先组装并测试了电路板的表面贴装开关版本。
使用Microchip REAL ICE 编程器和 Tag-Connect 电缆将软件编程到 PIC16F1459 中。
编程后,Windows 找到了一个新设备,启动了演示应用程序,成功了!
![](http://n.sinaimg.cn/spider20240719/108/w1024h684/20240719/e15e-9d33471e60e57ee9159c65bf78211e81.png)
SMD 版本的 DIP 开关 U 盘
后来作者又组装并测试了板的表面贴装插座版本,也成功了。(感叹一句,厉害)
ERG DIP 开关有点挑剔,如果将开关向上推超过其打开位置,它将再次短暂打开,直到它被释放并回到其打开/关闭位置。
![](http://n.sinaimg.cn/spider20240719/108/w1024h684/20240719/0728-8c0583823d9722b920767870e5bc5573.png)
DIP 开关 U 盘的通孔版本
![](http://n.sinaimg.cn/spider20240719/108/w1024h684/20240719/1660-0bf9816a442a3025341a46e7f27c362e.png)
插入 Surface Pro 并运行演示应用程序的 DIP 开关 USB U盘
![](http://n.sinaimg.cn/spider20240719/108/w1024h684/20240719/5d58-47f5ad38d6a813b30254b3d2c30e2662.png)
插入 Surface Pro 的 DIP 开关 U 盘
![DIP 开关 U 盘的后视图和前视图](http://n.sinaimg.cn/spider20240719/108/w1024h684/20240719/5b58-2755080e1d82d2e8e9cad0ab155ad318.png)
电路板的设计文件、PIC16F1459 固件和 C# .NET 演示应用程序可以在作者的 Github 上的DIP 开关 USB U盘 存储库中找到。
项目链接:https://github.com/bikerglen/usb-dip-switch-stick
![新浪科技公众号 新浪科技公众号](http://n.sinaimg.cn/tech/content/tech_qr2x.png)
“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)
![](http://n.sinaimg.cn/tech/content/tech_weixin2.png)