色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文詳細了解I2C總線與PiOLED顯示板

NVIDIA英偉達企業解決方案 ? 來源:NVIDIA英偉達企業解決方案 ? 作者:NVIDIA英偉達企業解 ? 2022-01-04 14:56 ? 次閱讀

在上文中,我們已經將SFIO與GPIO之間的關系分析清楚了,接下來我們就帶大家更深入地了解一下I2C引腳與開發庫的使用,以及調整PiOLED顯示內容的方法。這兩個部分都是 Jetbot 智能小車項目中非常關鍵的一環,但我們更希望讀者能將執行技術使用在更廣泛的場景中。

I2C總線的特性

前面提到過,在 Jetson 的 40 根引腳中有 18 根 SFIO 類的引腳與電路板直連,這是不能改變功能的引腳,其中就有兩組 I2C 的[3, 5]與[27,28]引腳,是不需要透過 Jetson-IO 指定就能使用的。

全名為“集成電路總線(Inter-Integrated Circuit)”的 I2C 是由飛利浦公司在 1980 年代初所設計的,是一種“多主從(master/slave)架構的串行通信總線”,由于結構設計得非常簡單并且有很大的彈性空間,使得這個總線的普及度相當高,廣泛用于微控制器傳感器陣列,顯示器,IoT 設備,EEPROM 等之間的通信。

這里并不講解 I2C 的工作原理電子電路圖,這些太過底層的知識對于應用工程師來說意義并不大,就算不懂也不會影響代碼的操作。不過 I2C 總線的特性,倒是需要了解一下,這對于應用開發是有幫助的。以下簡單列出 I2C 總線的一些特性:

只需要 SDA 數據線和 SCL 時鐘線就能完成所有工作,總線界面已經集成在芯片內部,不需要特殊的界面電路。

是一個真正的多主機總線:

(1)如果兩個或多個主機同時初始化數據傳輸,可以通過沖突檢測和仲裁防止數據破壞,每個連接到總線上的器件都有唯一的地址,任何器件既可以作為主機也可以作為從機,但同一時刻只允許有一個主機。

(2)數據傳輸和地址設定由軟件設定,非常靈活。總線上的器件增加和刪除不影響其他器件正常工作。

(3)最大主(master)設備數量:無限制;最大從(slave)機數量:127。

可以通過外部連線進行在線檢測,便于系統故障診斷和調試,故障可以立即被尋址,軟件也利于標準化和模塊化,縮短開發時間。

連接到相同總線上的 IC 數量只受總線最大電容的限制,串行的 8 位雙向數據傳輸位速率在標準模式下可達每秒 100 Kbit、快速模式下可達每秒 400 Kbit、高速模式下可達每秒 3.4 Mbit、超高速模式下可達每秒 5 Mbit 性能。

總線具有極低的電流消耗、抗高噪聲干擾,增加總線驅動器可以使總線電容擴大 10 倍,傳輸距離達到 15 米,兼容不同電壓等級的器件與工作溫度范圍寬。

看完以上這些特性之后,就能很清楚地了解為何 I2C 總線協議會受到廣泛的青睞,不僅擴充性強而且穩定性高,并且成本還比較低,接下去就來看看如何使用代碼來透過這個總線去控制周邊設備。

I2C總線的檢測工具- i2c-tools

首先要捋清楚 I2C 的歸類是 SFIO 而不是 GPIO 類型,不能使用前一篇文章最后所提到的 Jetson.GPIO 庫進行開發。

I2C 有自己專屬的 i2c-tools 檢測工具,可以用指令檢測設備上 I2C 的狀態,并使用 SMBUS 總線開發庫來進行開發,Jetbot 系統的機電操控指令也是基于這個庫進行高階封裝的。雖然在 Jetbot 系統里已經將這些工具與庫都安裝調試好,不過這里還是提供這個工具與開發庫的安裝與調試步驟,這樣就能在其他 Jetson 系列設備上調用。

安裝 i2c-tools 與 smbus 庫的步驟很簡單,請執行以下指令:

sudo apt update && sudo apt install -y i2c-tools

不過這些牽涉到底層的調用,因此需要配置使用的權限,如下步驟:

sudo usermod -aG i2c $USER

現在就可以執行以下指令,檢查看看設備里有幾個 i2c 總線:

i2cdetect -l

從下圖可以看到在 Jetson Nano 2GB 里有 7 組 I2C 總線:

如果您手邊還有 Jetson Nano、AGX Xavier 或 Xavier NX 開發套件,可以執行這個指令看看不同設備的 I2C 總線數量,可以發現 Jetson Nano 與 AGX Xavier 各有 9 組,而 Xavier NX 有 11 組。

不過不管芯片提供有多少組總線,目前在 40 針引腳上只用到兩組,那到底用到那兩組?請使用前一篇文章里面提到的“sudo /opt/nvidia/jetson-io/jetson-io.py”這個工具,進去就能看到現在使用 I2C 總線編號,其他可能用在與一些內部設備相連接的總線,在這里就不做探索。

接下來就可以檢查個別總線上所連接的設備,例如將 Jetbot 用到的 PiOLED 顯示屏,按照要求連接在 Jetson Nano 2GB 的第 3 引腳與第 5 引腳上,對照 40 針引腳說明,可以知道這兩根引腳屬于I2C_2這一組總線,于是要檢查這組所接設備時,需要執行以下指令:

i2cdetect -y -r 1

注意,這個指令最後面所選的編號是從“0”開始,因此對應到 I2C 總線編號時,需要經過“減1”的處理。執行之后會看到如下圖的結果,有個 16 進制編號為“0x3c”的設備正連接在 I2C_2 總線上面。

網上大部分的說明就是告訴我們“找到設備”了,但我們如何識別這個設備是什么?卻沒有人說個明白。經過幾番搜索之后,才在https://i2cdevices.org/addresses里面找到這些編號的對應設備,例如“0x3c”的設備總共有 6 種(如下圖),每一種都有可能。

經過一一查看之后,發現這 6 個全部都屬于“顯示類”的設備,而SSD1306的規格符合我們連接的 PiOLED 顯示器規格,如下圖:

這一番摸索之后,大概就能明確如何透過指令來確認所連接的設備,大家只要依循這樣的邏輯與資源,就能非常容易地捋順這個 I2C 總線的使用。現在已經能使用 i2c-tools 工具來檢測 I2C 總線所連接的設備,接著就來看看在代碼層面該如何對 I2C 設備執行控制!

PiOLED顯示板

這是創客樹莓派極為常用的顯示設備,在網上可以找到以下三種:

Adafruit原版(下圖最左邊):約150人民幣

國產樹莓派PiOLED屏(下圖中間):約30人民幣

0.91寸OLED顯示屏(下圖右邊):約10人民幣

其實三種的關鍵元件都一樣,就是右邊那個最便宜的“0.91 寸 OLED 顯示屏”,左邊兩個只是再添加一個很簡單很便宜的電路轉接板,然后再加以焊接加工而已。如果您打算按照 Jetbot 提供的自行組裝方式,包括 3D 打印車體、單獨采購 PCA9685+TB6612 控制板,那么“自行焊接加工”的步驟是跳不過去的。

對初學者來說,推薦使用中間的“樹莓派 PiOLED 屏”會比較方便,現在以這個為例子,按照前面的下圖接到 Jetson Nano 2GB 上,就能在前面的 “i2cdetect -y -r 1”指令下看到 “0x3c” 設備。

如果你在 Jetbot 系統上,并且正常開機的狀況下,應該就能看到顯示器上出現如下圖的信息,這個信息是由 ~/jetbot/jetbot/apps/stats.py 所控制,現在就來看一下這只代碼的內容,下面將一些比較關鍵的代碼列出來說明:

以下是正 OLED 屏的調用細節:

這個屏的尺寸是 128x32 像素,與 SSD1306 規格相同,因此直接使用 Adafruit 所提供的Adafruit_SSD1306庫。

接下來用 Adafruit_SSD1306.SSD1306_128_32 創建 disp 對象,里面的參數

(1)rst 是 Raspberry Pi pin configuration 的引腳定義,在這里并不使用(none);

(2)i2c_bus 指定所使用的總線編號,前面說過這里使用的是第二組(i2c_2),但在代碼里的編號是“1”,如果用的是第一組則編號為“0”;

(3)gpio 表示這個腳位是否被占用?設置為“1”就表示已占用。

顯示屏是以“圖像”方式來處理,第 60 行“draw.rectangle”是先將顯示屏涂黑。

從 80~85 行利用 Linux 針對 CPU、內存、存儲空間的檢測指令,獲取顯示的數據,并抽取所需要的內容,分別存入 CPU、MemUsage 與 Disk 三個變量里。

第 89~92 行就是顯示 4 組數據,因為顯示屏的高度為 32 像素,而每個字符的高度為 8 像素,因此只能顯示 4 組數據,這里的字符并不支持中文。在代碼里面顯示的內容是有線網 IP、無線網 IP、內存使用狀況與存儲空間的信息。

第 95~97 行則是將前面四行寫入的信息,以圖像為單位來現實,每一秒更新一次。

下圖是這個 OLED 所顯示的內容,與 89~92 行的輸出是一致的。

我們可以嘗試修改一下顯示的內容,例如有線網 IP 對 Jetbot 來說并不重要,但是 CPU 使用狀態是挺有價值的,因此我們可以稍作修改,包含要顯示的順序,例如無線網 IP 其實只要知道一次就行,可以放到最下面,而內存與 CPU 的使用狀態是相對敏感的,可以將順位往上調。下面就是修改后的內容:

如果您使用鏡像版或者腳本(create-sdcard-image-from-scratch.sh)安裝 Jetbot,應該修改完存檔之后,就會看到 OLED 屏的顯示發生變化。

如果使用容器安裝 Jetbot 的話,這部分需要重建 base 與 display 兩個容器,需要執行以下步驟讓這個改變生效。

重新啟動 Jetbot 容器之后,就會看到顯示屏上的內容已經改變(如下圖),這樣就能輕松改變 OLED 的顯示內容。

事實上還有很多方式可以操作 I2C 對 OLED 的顯示處理,在 Adafruit 所提供的開源項目https://github.com/adafruit/Adafruit_Python_SSD1306下面有些范例代碼可以嘗試,不過操作前先把 Jetbot 容器關閉,否則 I2C 會被占用。

現在對 Jetson Nano(含2GB)的 I2C 檢測與操作應該有更進一步的了解,這些內容也適用于 Jetson 系列其他開發套件,主要差別就是得確認所要使用的 I2C 編號,例如在 Xavier AGX 上相同位置的 I2C 是第 9 組,因此得在代碼中修改 “i2c_bus=8”,其他部分則完全一樣。

原文標題:NVIDIA Jetson Nano 2GB 系列文章(45):I2C總線與PiOLED

文章出處:【微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 電路板
    +關注

    關注

    140

    文章

    4954

    瀏覽量

    97719
  • 設備
    +關注

    關注

    2

    文章

    4503

    瀏覽量

    70611
  • 總線
    +關注

    關注

    10

    文章

    2878

    瀏覽量

    88056

原文標題:NVIDIA Jetson Nano 2GB 系列文章(45):I2C總線與PiOLED

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    I2C總線為什么要接上拉電阻

    I2C為什么要接上拉電阻?因為它是開漏輸出。 為什么是開漏輸出? I2C協議支持多個主設備與多個從設備在總線上,如果不用開漏輸出,而用推挽輸出,會出現主設備之間短路的情況。所以
    的頭像 發表于 11-20 10:07 ?448次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>為什么要接上拉電阻

    詳解I2C總線與SPI總線的區別

    I2C(Inter-Integrated Circuit)表示集成電路互連,是種用于線路內部芯片之間通信的總線
    的頭像 發表于 10-16 15:16 ?3990次閱讀
    詳解<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>與SPI<b class='flag-5'>總線</b>的區別

    了解I2C總線

    電子發燒友網站提供《了解I2C總線.pdf》資料免費下載
    發表于 10-08 11:13 ?2次下載
    <b class='flag-5'>了解</b><b class='flag-5'>I2C</b><b class='flag-5'>總線</b>

    I2C總線上拉電阻計算

    電子發燒友網站提供《I2C總線上拉電阻計算.pdf》資料免費下載
    發表于 10-08 09:54 ?1次下載
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>上拉電阻計算

    I2C總線上拉電阻的必要性

    在電子通信領域,I2C總線作為種廣泛應用的雙向串行通信協議,其穩定性和效率對于整個系統的性能至關重要。為了確保數據傳輸的可靠性,I2C總線
    的頭像 發表于 09-09 17:16 ?1012次閱讀

    優秀實踐:I3C共享總線上的I2C器件

    電子發燒友網站提供《優秀實踐:I3C共享總線上的I2C器件.pdf》資料免費下載
    發表于 09-06 09:49 ?0次下載
    優秀實踐:<b class='flag-5'>I3C</b>共享<b class='flag-5'>總線</b>上的<b class='flag-5'>I2C</b>器件

    簡單認識I2C通信協議

    I2C(Inter-Integrated Circuit)通信協議是由飛利浦公司(現為恩智浦半導體)開發的種簡單、雙向二線制同步串行總線協議。自1982年發布以來,I2C協議因其高效
    的頭像 發表于 07-25 18:06 ?1438次閱讀

    ISL33001MSOPEVAL1Z I2C總線緩沖器評估

    電子發燒友網站提供《ISL33001MSOPEVAL1Z I2C總線緩沖器評估 .rar》資料免費下載
    發表于 06-07 16:49 ?0次下載

    I2C總線協議的工作原理和尋址格式

    I2C(Inter-Integrated Circuit)總線協議,即集成電路總線協議,是種用于連接微控制器及其外圍設備的串行總線協議。
    的頭像 發表于 05-27 15:47 ?1733次閱讀

    I2C總線物理拓撲結構

    I2C總線上可掛接的設備數量受總線的最大電容400pF限制,如果所掛接的是相同型號的器件,則還受器件地址位的限制。
    發表于 03-15 11:03 ?825次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>物理拓撲結構

    什么是I2C協議 I2C總線的控制邏輯

    在實際使用過程中,I2C比較容易出現的個問題就是死鎖 ,死鎖在I2C中主要表現為:I2C死鎖時表現為SCL為高,SDA直為低。
    發表于 03-12 09:17 ?1056次閱讀
    什么是<b class='flag-5'>I2C</b>協議 <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的控制邏輯

    藍牙串口通訊總線——I2C/SPI/UART

    嵌入式工程師在做串口通信調試工作的時候,會經常用到I2C、SPI、UART這3條總線I2C、SPI、UART這三種通信總線在嵌入式領域很常見,目前主流的SOC芯片都內置了這三種
    的頭像 發表于 01-22 09:41 ?1627次閱讀
    藍牙串口通訊<b class='flag-5'>總線</b>——<b class='flag-5'>I2C</b>/SPI/UART

    關于I2C總線的6個問題分析

    I2C總線上的上拉電阻范圍是多少? 回答: 總線電容是走線部分、連接部分、管腳部分的電容的總和。總線電容限制了上拉電阻(Rp) 的最大值,因為
    發表于 12-25 09:19 ?1691次閱讀
    主站蜘蛛池模板: 老熟女重囗味GRANNYBBW| 久久久擼擼擼麻豆| 乱子伦在线观看中文字幕| 日本色高清| 一本久道久久综合婷婷五月| TIMI1TV天美传媒在线观看| 国产亚洲精品久久久久久禁果TV| 久久综合给合久久狠狠狠…| 色怕怕| 永久免费在线看mv| 国产成人精视频在线观看免费| 久久影院中文字幕| 天天影视色欲 影视| 97人人超碰国产精品最新蜜芽| 国产精品亚洲精品久久国语| 免费A级毛片无码无遮挡内射 | 区一区二视频免费观看| 亚洲精品偷拍影视在线观看| 爱情岛论坛免费在线观看| 久久91精品国产91久| 日日噜噜噜夜夜爽爽狠狠图片| 在线视频免费观看| 国产精品乱码一区二区三| 暖暖视频 免费 高清 日本8| 亚洲熟少妇在线播放999| 岛国在线无码免费观| 美丽的姑娘BD在线观看| 亚洲AV无码乱码国产精品品麻豆| yellow2019在线观看视频| 久久精品综合网中文字幕| 午夜毛片在线观看| 波多野结衣教师系列6| 美女扒开腿让男生桶免费看动态图 | 国产又湿又黄又硬又刺激视频| 强奸美女老师| 中文字幕亚洲男人的天堂网络| 国产午夜一级鲁丝片| 日本成熟bbxxxxxxxx| 777久久人妻少妇嫩草AV蜜桃| 狠狠干老司机| 香艳69xxxxx有声小说|