中南覆鸥人力资源有限公司

你的位置:首頁 > 互連技術(shù) > 正文

使用引腳復(fù)用減少8位單片機(jī)的引腳使用

發(fā)布時間:2023-09-26 責(zé)任編輯:lina

【導(dǎo)讀】本文將介紹兩個利用通用輸入/輸出(GPIO)引腳復(fù)用來減少項(xiàng)目引腳使用的示例。第一個示例使用了“查理復(fù)用算法”技術(shù),第二個示例使用了定時外設(shè)和中斷來快速切換引腳輸入狀態(tài)和輸出狀態(tài),以在驅(qū)動 LED 的同時讀取按鍵。


本文將介紹兩個利用通用輸入/輸出(GPIO)引腳復(fù)用來減少項(xiàng)目引腳使用的示例。第一個示例使用了“查理復(fù)用算法”技術(shù),第二個示例使用了定時外設(shè)和中斷來快速切換引腳輸入狀態(tài)和輸出狀態(tài),以在驅(qū)動 LED 的同時讀取按鍵。

PIC?和 AVR?單片機(jī)上的引腳復(fù)用

通用輸入/輸出(GPIO)引腳是單片機(jī)設(shè)計(jì)時的重要考量之一。您需要足夠的引腳將單片機(jī)連接到設(shè)計(jì)中的所有其他組件;但是,超過所需的引腳可能會導(dǎo)致設(shè)計(jì)成本增加,并且占用電路板上更多空間。此外,減少設(shè)計(jì)中的所需引腳數(shù)量可能就可以選擇另一種不同的封裝。如果有一種方法可以從較小的封裝中擠出更多的 I/O引腳就好了!幸運(yùn)的是,我們確實(shí)有方法可以在這種情況下釋放引腳。

下面是 Microchip 應(yīng)用團(tuán)隊(duì)使用 AVR DD 系列單片機(jī)創(chuàng)建的兩個示例。首先,我們將探討通過一種稱為“查理復(fù)用算法”的技術(shù)復(fù)用 GPIO 引腳來控制 LED。接下來,我們將看一下如何使用單個引腳同時運(yùn)行獨(dú)立的按鍵和 LED。

查理復(fù)用算法的核心思想是利用單片機(jī)引腳可以處于的三種狀態(tài):數(shù)字高電平、數(shù)字低電平和高阻抗數(shù)字輸入狀態(tài)(也稱為高阻態(tài)或三態(tài))。通過使用這三種狀態(tài)而不僅僅是典型的高電平和低電平,用戶可以使用 n 個引腳驅(qū)動最多(n2-n)個獨(dú)立的LED。在此示例中,三個指定的引腳可以驅(qū)動六個獨(dú)立的 LED。

那么查理復(fù)用算法的工作原理到底是什么呢?為了理解這一點(diǎn),我們需要看一個示例。


使用引腳復(fù)用減少8位單片機(jī)的引腳使用


這里我們用三個 I/O 引腳驅(qū)動六個 LED。

如果我們只想導(dǎo)通 LED1,則需要將 PA2 設(shè)為高電平,PA3 設(shè)為低電平,PA4設(shè)為高阻態(tài)。電流將流過 LED1 并使其導(dǎo)通,同時使所有其他 LED 保持關(guān)斷狀態(tài)。


使用引腳復(fù)用減少8位單片機(jī)的引腳使用


這里的三態(tài)十分重要,因?yàn)槿绻?PA4 為“低電平”,它也會意外導(dǎo)通 LED5。如下面所示:


使用引腳復(fù)用減少8位單片機(jī)的引腳使用


高阻抗邏輯狀態(tài)確保電流只流過 LED1。利用 I/O 引腳狀態(tài)的相應(yīng)組合(要獲得預(yù)期行為,用戶必須將一個引腳設(shè)為高電平、一個引腳設(shè)為低電平,其余引腳設(shè)為高阻抗),可以為電路中的任何 LED 重復(fù)此過程。

雖然在任意給定時刻這種方法只會點(diǎn)亮一個 LED,但是快速改變 I/O 狀態(tài)可創(chuàng)造出點(diǎn)亮多個 LED 的錯覺。(LED 調(diào)光的工作原理是通過在單個 LED 上使用脈沖寬度調(diào)制,原理與此非常相似)??梢栽谙旅婵吹剑?點(diǎn)擊圖片查看動態(tài)效果)


使用引腳復(fù)用減少8位單片機(jī)的引腳使用


第二個示例涉及到在單個引腳上改動一個 LED 和一個按鍵。

從有利的角度看,可利用中斷和定時器來實(shí)現(xiàn)此目的。單片機(jī)引腳大部分時間都在驅(qū)動 LED。然而,一個定時外設(shè)會定期在單片機(jī)內(nèi)部觸發(fā)中斷,將引腳從輸出快速切換為輸入,然后檢查按鍵的狀態(tài)。雖然這會暫時停止驅(qū)動 LED,但如果這個過程可以做得足夠快,那么在檢查按鈕狀態(tài)的時候,對 LED 造成的影響幾乎不可見。

我們在下面的示例中使用了這種方法。單片機(jī)不停地驅(qū)動一個閃爍的 LED,同時定期檢查按鍵,如果按鍵被按下,就會點(diǎn)亮一個單獨(dú)的 LED。(點(diǎn)擊圖片查看動態(tài)效果)


使用引腳復(fù)用減少8位單片機(jī)的引腳使用


盡管本文章只涵蓋了這兩種技術(shù)的基礎(chǔ)知識,但我們的 Microchip 應(yīng)用團(tuán)隊(duì)發(fā)布的相應(yīng) GitHub 頁面包含了圖表、示例代碼和更詳細(xì)的說明。請?jiān)L問該頁面或我們的 AVR DD 產(chǎn)品系列頁面來了解更多信息。

(作者:Nate Thompson 和 Alexandru Sabiuta)


免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進(jìn)行處理。


推薦閱讀:    

用基于IP的通用協(xié)議實(shí)現(xiàn)智能家居物聯(lián)網(wǎng)通信大一統(tǒng)

LVDS 接收器故障安全偏置網(wǎng)絡(luò)

利用經(jīng)過認(rèn)證的 LoRaWAN 模塊加速遠(yuǎn)距離連接的開發(fā)

揭秘800G OSFP VR8模塊技術(shù)與多領(lǐng)域應(yīng)用                                                                                                                                                               

無源器件,電容并不總是容性的!


特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索
?

關(guān)閉

?

關(guān)閉

台南县| 保亭| 玉龙| 阆中市| 英吉沙县| 织金县| 巴林左旗| 富裕县| 磴口县| 启东市| 淮北市| 巧家县| 阳城县| 新民市| 女性| 曲周县| 白朗县| 瑞安市| 台北市| 日喀则市| 娄烦县| 铁力市| 福泉市| 达孜县| 儋州市| 格尔木市| 遂宁市| 长丰县| 建平县| 宁武县| 固安县| 涞源县| 寿阳县| 犍为县| 济南市| 宿松县| 安岳县| 勃利县| 蓝山县| 久治县| 三明市|