MCU連接DIP 開關 掌握這幾個知識點是關鍵!
問:DIP 開關與單片機 MCU接口的基本原理
本文引用地址:http://butianyuan.cn/article/202401/454473.htm將單片機 (微控制器) 連接到雙列直插式封裝( DIP ) 開關是一種常見的應用。俗稱 “DIP” 的開關可用于各種設計,從適合面包板原型設計的傳統(tǒng) DIP 到表面貼裝“鋼琴”型,再到易于讀取十六進制值的旋轉(zhuǎn)開關。
在這篇文章中,我們將仔細研究旋轉(zhuǎn)開關,并探索如何將其集成到我們的單片機設計中。本文中介紹的技術一般適用于所有單片機設計。
從規(guī)則開始
讓我們從一個簡單的規(guī)則開始:不允許浮動輸入 。當單片機引腳被配置為輸入,但在其他情況下未連接時,就會出現(xiàn)浮動輸入。這里展示了一個例子。當開關閉合時,關聯(lián)引腳被綁在正軌上。當開關打開時,引腳是浮動的。
這是非常不希望的,因為浮動引腳可能被解釋為邏輯高,或者在其他時候,邏輯低。從故障排除的角度來看,單片機的響應將沒有任何韻律或原因。引腳容易受到噪聲的影響,并且通常會松散地遵循相鄰單片機引腳的值。
解決方法是增加一個下拉電阻,如下圖所示。有了這個小小的變化,當開關閉合時,單片機的引腳就會向上拉到導軌上,或者當開關打開時,它就會向下拉到地上。暫時忽略開關彈跳,單片機將有一個干凈的輸入。
優(yōu)化解決方案
現(xiàn)代單片機就是為這種類型的接口而設計的。幾乎所有的單片機都具有 I/O 部分,其內(nèi)部電阻可以向上拉或向下拉 I/O 引腳。這是可取的,因為開關可以直接連接到單片機,從而消除了外部電阻器的需要。
技術小貼士 :
一些單片機具有上拉和下拉電阻。其他將只有一種類型,與上拉配置更常見。這些外設通常被稱為“弱上拉”,消耗數(shù)十到數(shù)百uA。這相當于連接一個值在15 kΩ到150 kΩ之間的外部拉電阻。
Arduino的一個例子是:
pinMode (SW_PIN_D0 INPUT_PULLUP);
該原理圖給出了單片機與開關接口的一種方式。雖然本例采用旋轉(zhuǎn) DIP 開關,但該設計適用于所有開關。觀察:
■ 內(nèi)部上拉電阻使用單片機的特殊功能寄存器啟用
■ 開關的公共元件連接到地
技術小貼士 :
原理圖中顯示了一個可選的串聯(lián)電阻以及可選的多路復用部分。這允許 I/O 引腳執(zhí)行雙重任務。例如,這個小口寬的接口可以用來讀取開關,也可以用來驅(qū)動 LCD 顯示器的 D3 到 D0。這可能是可取的,因為它有可能以犧牲電路和代碼復雜性為代價減少單片機引腳數(shù)和PCB的總體尺寸。
在我們結(jié)束之前,讓我們看一下與旋轉(zhuǎn) DIP 開關相關的物理開關代碼。代表性的HEX代碼取自歐姆龍的數(shù)據(jù)手冊。觀察 A6A-16R 和 A6A-16C 型號對應的“BCD十六進制碼” 和 “BCD十六進制補碼” 兩個開關配置。
回頭看單片機原理圖及其相關的上拉電阻,我們看到了一個反轉(zhuǎn)。例如,當開關處于1位置時,在位置2 + 4 + 8上會有三個正邏輯輸入。同時,如果安裝了互補開關,則會有一個對應于1信號的正邏輯(有源高電平)輸入。
從編程的角度來看,這個物理開關代碼中的這種差異是無關緊要的。一個簡單的 bit 反轉(zhuǎn)指令就會使它們相等。從故障排除或教育的角度來看,互補版本可能更容易理解,因為它導致單片機引腳上存在正邏輯值。
評論