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