好玩的項(xiàng)目|使用微控制器 PIC16F1459 構(gòu)建 DIP 開關(guān) USB U盤
今天給大家分享我在github上看到的一個有意思的項(xiàng)目:使用微控制器 PIC16F1459 構(gòu)建 DIP 開關(guān) USB U盤。(附帶電路原理圖,PCB布局設(shè)計(jì),原始應(yīng)用程序。)
本文引用地址:http://www.ex-cimer.com/article/202407/461187.htm主要是用撥片開關(guān)來進(jìn)行配置設(shè)備,只需要撥動紅色開關(guān)就可以輕松配置文件。不需要編輯 XML 和 JSON 文件來存儲硬件或軟件的配置設(shè)置。
這個項(xiàng)目分享給大家,步驟講解得很詳細(xì),如果感興趣的可以動手試試。
先放上成品圖。
DIP 開關(guān)插電腦上圖
DIP 開關(guān) U 盤的后視圖和前視圖(顏值還挺高的)
一、元件選擇
作者總共設(shè)計(jì)制作了兩種不同版本的DIP 開關(guān)U盤。第一個使用非常緊湊的表面貼片DIP開關(guān),第二種使用安裝表面貼裝 DIP 插座中的獨(dú)特彩虹 DIP 開關(guān)。
USB A插頭(如下圖所示)
Molex USB A 插頭
這是一個安裝在電路板末端的USB A 型插頭,可以直接插入電腦的正面或側(cè)面的USB A插孔。
本來是可以使用 USB Type C 插頭,但作者的電腦沒有USB Type C 端口。
1、微控制器 PIC16F1459
作者喜歡用8位的USB微控制器,于是采用了TSSOP-20 封裝的 Microchip PIC16F1459,這個微控制器支持所需的電路和USB軟件。唯一不確定的問題是它是否有足夠的輸入引腳用于DIP開關(guān)的8個輸入。在查閱了datasheet,確認(rèn)連接USB 操作所需的基本組件后,確定了引腳是夠用的。
PIC16F1459 采用 TSSOP-20 封裝,后面有一個 8 位 SMD 開關(guān),用于縮放
2、表面貼裝 DIP 開關(guān)
為了使設(shè)計(jì)更緊湊,就需要把微控制器放在電路板的底部,把開關(guān)放在電路板的頂部,就需要一個表面貼裝開關(guān),最后選擇了 CTS 219-8MSTR 8 位表面貼裝滑動開關(guān)。
開關(guān)頂部帶有可拆卸的膠帶密封,可以承受高焊接溫度和電路板的清洗。
帶有保護(hù)涂層的 CTS SMD DIP 開關(guān),保護(hù)涂層允許使用拾取和放置設(shè)備并在清洗過程中保護(hù)開關(guān)。
3、彩虹通孔撥碼開關(guān)
第一個版本用ITW ERG 制造了彩虹通孔 DIP 開關(guān),第二個版本帶有用于彩虹 DIP 開關(guān)的表面貼裝 DIP 插座。
彩虹撥碼開關(guān)與類似的滑動和搖桿撥碼開關(guān)相比,具有相當(dāng)醒目的外觀。
三個候選通孔 DIP 開關(guān),作者選擇了 ERG 的彩虹模型
4、表面貼裝 DIP 插座
選擇了一個 Mill-Max 110-47-316-41-105000 表面貼裝 DIP 插座來固定 ERG SDS-8-014 彩虹 DIP 開關(guān)。
表面貼裝 DIP 插座
二、原理圖設(shè)計(jì)
這個項(xiàng)目需要用到一個8 GPIO 引腳來連接 DIP 開關(guān),然后在最靠近 DIP 開關(guān)的微控制器一側(cè)選擇了 8 個引腳。
但這些 GPIO 引腳不是都有內(nèi)部弱上拉可用,所以需要添加一些上拉電阻,以便在各自的開關(guān)打開時(shí)將引腳拉高。
使用這個配置,GPIO 引腳將在開關(guān)打開(關(guān)閉)時(shí)讀取高電平,在開關(guān)關(guān)閉(打開)時(shí)讀取低電平。
然后有一個強(qiáng)制性的按鈕開關(guān)和閃爍的LED。按鈕開關(guān)與引導(dǎo)加載程序一起使用,可以允許在沒有PLC編程器和標(biāo)簽連接電纜的情況下升級DIP開關(guān)USB U盤。
閃爍的 LED 被編程以指示 USB 枚舉狀態(tài)。緩慢閃爍表示板已通電但未枚舉,快速閃爍表示板已通電并已枚舉。
設(shè)計(jì)原理圖
三、電路板設(shè)計(jì)
1、表面貼裝開關(guān)版本
設(shè)計(jì)萬完原理圖后,開始設(shè)計(jì)與CTS SMD 滑動開關(guān)一起使用的電路板。最終布局如下圖所示。
板的非插座版本
當(dāng)對布局比較滿意的時(shí)候,查看了電路板預(yù)覽圖像,沒有問題之后,就去訂購PCB板了。
2、表面貼裝 DIP 插座版本
設(shè)計(jì)了與 CTS SMD 滑動開關(guān)一起使用的電路板后,接著設(shè)計(jì)與表面貼裝 DIP 插座和 ERG 彩虹 DIP 開關(guān)一起使用的電路板,最終布局如上圖所示。
唯一真正的區(qū)別是開關(guān)或插座的16個焊盤的寬度和高度。
板的插座版本
當(dāng)布局完成之后,依舊查看電路板板預(yù)覽圖,然后定制PCB板。
四、軟件開發(fā)
在等待PCB板的過程,使用Microchip 低引腳數(shù) USB 微控制器開發(fā)板來編寫該項(xiàng)目的軟件。
在這個過程也遇到了許多問題,例如:想實(shí)現(xiàn)一個USB大容量存儲設(shè)備類,其中包含一個帶有開關(guān)狀態(tài)的文件。但是開關(guān)的值可以從文件中讀取一次,但當(dāng)開關(guān)更改時(shí)就不再更新了。
為了解決這個問題,進(jìn)行了多次嘗試,例如在每次更改開關(guān)時(shí)執(zhí)行軟分離和重新連接,但這會導(dǎo)致許多煩人的不安全彈出和發(fā)現(xiàn)消息/警報(bào)聲音。
最后將DIP開關(guān)USB U盤實(shí)現(xiàn)為供應(yīng)商定義的 USB HID 設(shè)備。
USB 主機(jī)可以向 DIP 開關(guān) USB 堆棧發(fā)送 USB OUT 報(bào)告,詢問開關(guān)的當(dāng)前狀態(tài)。
DIP 開關(guān) U 盤將響應(yīng)包含開關(guān)當(dāng)前狀態(tài)的 USB IN 報(bào)告。
每當(dāng)切換開關(guān)時(shí),DIP 開關(guān) USB U 盤也會以包含開關(guān)當(dāng)前狀態(tài)的 USB IN 報(bào)告進(jìn)行響應(yīng)。
在真正的板子從工廠回來之前,作者使用了一個 PIC 低引腳數(shù) USB 開發(fā)板來編寫軟件。
為了演示DIP開關(guān)USB U盤,編寫了一個快讀的 C# .NET Windows 窗體應(yīng)用程序。
該應(yīng)用程序與開發(fā)板或真正的DIP開關(guān)U盤進(jìn)行通信。
使用開發(fā)板,按鈕開關(guān)切換紅色開關(guān)圖像。使用真板,應(yīng)用程序中的開關(guān)圖像反映了 DIP 開關(guān) U 盤上開關(guān)的狀態(tài)。
C# .NET Windows 窗體演示應(yīng)用程序
五、成品板
與表面貼裝開關(guān)一起使用的成品板如下所示。
SMD版成品板
與表面貼裝插座和通孔 DIP 開關(guān)一起使用的成品板如下所示。
插座版成品板
下圖圖左側(cè)為電路板的表面貼裝開關(guān)版本,右側(cè)為電路板的表面貼裝插座版本。
這里再強(qiáng)調(diào)一次,唯一這兩個版本的區(qū)別是開關(guān)或插座的 16 個焊盤的寬度和高度。
板版本比較
六、組裝和測試
將電路板放回原處,首先組裝并測試了電路板的表面貼裝開關(guān)版本。
使用Microchip REAL ICE 編程器和 Tag-Connect 電纜將軟件編程到 PIC16F1459 中。
編程后,Windows 找到了一個新設(shè)備,啟動了演示應(yīng)用程序,成功了!
SMD 版本的 DIP 開關(guān) U 盤
后來作者又組裝并測試了板的表面貼裝插座版本,也成功了。(感嘆一句,厲害)
ERG DIP 開關(guān)有點(diǎn)挑剔,如果將開關(guān)向上推超過其打開位置,它將再次短暫打開,直到它被釋放并回到其打開/關(guān)閉位置。
DIP 開關(guān) U 盤的通孔版本
插入 Surface Pro 并運(yùn)行演示應(yīng)用程序的 DIP 開關(guān) USB U盤
插入 Surface Pro 的 DIP 開關(guān) U 盤
DIP 開關(guān) U 盤的后視圖和前視圖
七、設(shè)計(jì)文件
電路板的設(shè)計(jì)文件、PIC16F1459 固件和 C# .NET 演示應(yīng)用程序可以在作者的 Github 上的DIP 開關(guān) USB U盤 存儲庫中找到。
項(xiàng)目鏈接:
https://github.com/bikerglen/usb-dip-switch-stick
評論