<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設計應用 > MCU連接DIP 開關 掌握這幾個知識點是關鍵!

          MCU連接DIP 開關 掌握這幾個知識點是關鍵!

          作者:時間:2024-01-04來源:得捷電子DigiKey收藏

          問: 開關與單片機 MCU接口的基本原理

          本文引用地址:http://www.ex-cimer.com/article/202401/454473.htm

          將單片機 (微控制器) 連接到雙列直插式封裝( ) 開關是一種常見的應用。俗稱 “” 的開關可用于各種設計,從適合面包板原型設計的傳統 DIP 到表面貼裝“鋼琴”型,再到易于讀取十六進制值的。

          圖片

          在這篇文章中,我們將仔細研究,并探索如何將其集成到我們的中。本文中介紹的技術一般適用于所有。

          從規則開始

          讓我們從一個簡單的規則開始:不允許浮動輸入 。當單片機引腳被配置為輸入,但在其他情況下未連接時,就會出現浮動輸入。這里展示了一個例子。當開關閉合時,關聯引腳被綁在正軌上。當開關打開時,引腳是浮動的。

          圖片

          這是非常不希望的,因為浮動引腳可能被解釋為邏輯高,或者在其他時候,邏輯低。從故障排除的角度來看,單片機的響應將沒有任何韻律或原因。引腳容易受到噪聲的影響,并且通常會松散地遵循相鄰單片機引腳的值。

          解決方法是增加一個下拉電阻,如下圖所示。有了這個小小的變化,當開關閉合時,單片機的引腳就會向上拉到導軌上,或者當開關打開時,它就會向下拉到地上。暫時忽略開關彈跳,單片機將有一個干凈的輸入。

          圖片

          優化解決方案

          現代單片機就是為這種類型的接口而設計的。幾乎所有的單片機都具有 I/O 部分,其內部電阻可以向上拉或向下拉 I/O 引腳。這是可取的,因為開關可以直接連接到單片機,從而消除了外部電阻器的需要。

          技術小貼士 :

          一些單片機具有上拉和下拉電阻。其他將只有一種類型,與上拉配置更常見。這些外設通常被稱為“弱上拉”,消耗數十到數百uA。這相當于連接一個值在15 kΩ到150 kΩ之間的外部拉電阻。

          Arduino的一個例子是:

          pinMode (SW_PIN_D0 INPUT_PULLUP);

          該原理圖給出了單片機與開關接口的一種方式。雖然本例采用旋轉 DIP 開關,但該設計適用于所有開關。觀察:

          ■ 內部上拉電阻使用單片機的特殊功能寄存器啟用

          ■ 開關的公共元件連接到地

          圖片

          技術小貼士 :

          原理圖中顯示了一個可選的串聯電阻以及可選的多路復用部分。這允許 I/O 引腳執行雙重任務。例如,這個小口寬的接口可以用來讀取開關,也可以用來驅動 LCD 顯示器的 D3 到 D0。這可能是可取的,因為它有可能以犧牲電路和代碼復雜性為代價減少單片機引腳數和PCB的總體尺寸。

          在我們結束之前,讓我們看一下與旋轉 DIP 開關相關的物理開關代碼。代表性的HEX代碼取自歐姆龍的數據手冊。觀察 A6A-16R 和 A6A-16C 型號對應的“BCD十六進制碼” 和 “BCD十六進制補碼” 兩個開關配置。

          圖片

          回頭看單片機原理圖及其相關的上拉電阻,我們看到了一個反轉。例如,當開關處于1位置時,在位置2 + 4 + 8上會有三個正邏輯輸入。同時,如果安裝了互補開關,則會有一個對應于1信號的正邏輯(有源高電平)輸入。
          從編程的角度來看,這個物理開關代碼中的這種差異是無關緊要的。一個簡單的 bit 反轉指令就會使它們相等。從故障排除或教育的角度來看,互補版本可能更容易理解,因為它導致單片機引腳上存在正邏輯值。



          評論


          相關推薦

          技術專區

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();