99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>帶有PIC16F15244的DIY I/O擴(kuò)展器(第1部分,共3部分)

帶有PIC16F15244的DIY I/O擴(kuò)展器(第1部分,共3部分)

2022-11-18 | zip | 0.01 MB | 次下載 | 2積分

資料介紹

描述

微控制器 (MCU) 最基本的元素之一是 I/O——引腳數(shù)量、接收器和源強(qiáng)度以及可用的功能。在某些情況下,系統(tǒng)的 I/O 需求與微控制器的內(nèi)存大小可能會(huì)出現(xiàn)不匹配。通常,可用的 I/O 越多,包含的內(nèi)存就越多,這使得微控制器更昂貴。

I/O 擴(kuò)展器通過(guò)串行通信(通常是I2C或 SPI )向主微控制器提供額外的 I/O bank 。I/O 擴(kuò)展器的常見(jiàn)用例包括簡(jiǎn)化 PCB 布線、改善功耗和縮小主微控制器的物理尺寸。

pYYBAGN27JOAZInWAAChTbXHl6E415.png
圖 1. I/O 擴(kuò)展器的使用示例
?

I/O 擴(kuò)展器 ASIC是一種常見(jiàn)商品,但每個(gè) ASIC 的功能和用例略有不同,這可能會(huì)在設(shè)計(jì)過(guò)程中引起頭痛。然而,I/O 擴(kuò)展器是一種相對(duì)簡(jiǎn)單的數(shù)字設(shè)備,可以使用微控制器進(jìn)行仿真,例如新的PIC16F15244 系列。與相關(guān)的基于 ASIC 的解決方案相比,這可以產(chǎn)生更多的設(shè)計(jì)靈活性、功能,甚至更低的物料清單 (BOM) 成本。然而,由于更專業(yè)的硬件,基于 ASIC 的解決方案在空間和功率效率方面具有優(yōu)勢(shì)。

為了展示這個(gè)概念的靈活性,我們創(chuàng)建了 2 個(gè)單獨(dú)的代碼示例。第一個(gè)代碼示例是一個(gè)非常簡(jiǎn)單的 I/O 擴(kuò)展器。可以輕松定制與該項(xiàng)目相關(guān)的固件,以進(jìn)一步簡(jiǎn)化通信。第二個(gè)代碼示例是一個(gè)非常靈活的“高級(jí)”I/O 擴(kuò)展器,其設(shè)計(jì)目的是允許通過(guò) I2C 控制幾乎每個(gè) I/O 設(shè)置,而不是依賴于預(yù)設(shè)功能。

這兩個(gè) I/O 擴(kuò)展器示例具有共同的特性和大部分代碼庫(kù)。與許多 I2C 設(shè)備一樣,尋址線被分配給一些未使用的 I/O 以設(shè)置 I2C 地址的一些位,這在設(shè)計(jì)中提供了靈活性,而無(wú)需額外編程與 ASIC 不同,這些分配可以在軟件中更改、重新路由、刪除或重新排序。此外,該器件還提供了一條外部中斷線 (INT) 來(lái)發(fā)出 I/O 電平變化的信號(hào)。INT 可以是公共線路的漏極開(kāi)路,如果該線路是獨(dú)占的,則可以是推挽式。

簡(jiǎn)單 I/O 擴(kuò)展器

在深入了解高級(jí) I/O 擴(kuò)展器之前,讓我們看一下簡(jiǎn)單的擴(kuò)展器。在本例中,每條 I/O 線有兩種連續(xù)狀態(tài)(假設(shè)代碼未修改):弱上拉輸入或輸出 LOW。弱上拉允許 I/O 擴(kuò)展器在用作輸入時(shí)定義邏輯電平,并且它還關(guān)閉通常會(huì)將電流吸入擴(kuò)展器的連接電路。該器件的內(nèi)部弱上拉強(qiáng)度約為 10s 或 100s μA。

LOW 輸出是一個(gè)更強(qiáng)大的驅(qū)動(dòng)器,每個(gè) I/O 能夠吸收高達(dá)25mA 的電流,整個(gè)設(shè)備的電流為 300mA(-40C 至 +85C)。有關(guān)這些限制的更多信息,請(qǐng)參閱器件數(shù)據(jù)表的電氣特性部分。從輸出狀態(tài)轉(zhuǎn)換到輸入狀態(tài)時(shí)可能遇到的一個(gè)問(wèn)題是 I/O 線上存在的寄生電容的充電時(shí)間。該電容會(huì)導(dǎo)致從 0 到 1 的轉(zhuǎn)換延遲,這可能會(huì)觸發(fā)變化時(shí)中斷電路。為了最大限度地減少這些影響,可以將簡(jiǎn)單的 I/O 擴(kuò)展器配置為在切換到弱上拉之前暫時(shí)打開(kāi)高側(cè) I/O 驅(qū)動(dòng)器以快速對(duì)該電容進(jìn)行充電。

pYYBAGN27JWAZsjRAAAg5ocjesI782.png
圖 2. I/O 線的轉(zhuǎn)換
?

高側(cè) I/O 驅(qū)動(dòng)程序的運(yùn)行時(shí)間可在軟件中配置,并且可以根據(jù)需要禁用。下圖顯示了這種方法對(duì)上升時(shí)間的增強(qiáng)——注意圖像中時(shí)間尺度從 20μs/div 到 40ns/div 的變化。注意:我們不建議在任何配置中直接驅(qū)動(dòng)電容器。

pYYBAGN27JmAW7MJAABGBPKxHoY737.png
圖 3. 無(wú)高端 I/O – 1nF 負(fù)載
?
poYBAGN27JuAcVJyAABH2IjcM6s985.png
圖 4. 高側(cè) I/O 開(kāi)啟 – 1nF 負(fù)載
?

簡(jiǎn)單 I/O 擴(kuò)展器 – 通信

這個(gè)例子的 I2C 通信也非常簡(jiǎn)單。完整的 I2C 通信只需要 2 個(gè)字節(jié)用于讀取和寫(xiě)入。在 I2C 寫(xiě)入中,數(shù)據(jù)的第一個(gè)字節(jié)是一個(gè)位圖,它將由單個(gè)位表示的每個(gè) I/O 線設(shè)置為輸入或輸出。發(fā)送的所有其他數(shù)據(jù)字節(jié)都被丟棄,開(kāi)發(fā)人員可以省略。

pYYBAGN27J2AKsOTAAA1A5xDgjQ544.png
圖 5. 簡(jiǎn)單 I/O 擴(kuò)展器,I2C 寫(xiě)入
?

在 I2C 讀取中,從設(shè)備讀取的字節(jié)是一個(gè)位圖,表示每個(gè) I/O 線上的數(shù)字值,可通過(guò) PORT 寄存器在內(nèi)部訪問(wèn)。

poYBAGN27KCAFNdtAAA5AIECkCg741.png
圖 6. 簡(jiǎn)單 I/O 擴(kuò)展器,I2C 讀取
?

高級(jí) I/O 擴(kuò)展器

開(kāi)發(fā)高級(jí) I/O 擴(kuò)展器的目標(biāo)是提供比上面顯示的簡(jiǎn)單變體功能更全面的程序。由于極其簡(jiǎn)單的串行通信,簡(jiǎn)單的 I/O 擴(kuò)展器具有許多限制,并且無(wú)法利用PIC16F15244 系列中提供的以 I/O 為中心的功能,例如輸入電平控制、開(kāi)漏輸出、可屏蔽的變化中斷和弱上拉使能。

相比之下,這個(gè)更復(fù)雜的示例可以配置板載 I/O 的幾乎所有功能。為了實(shí)現(xiàn)這個(gè)功能集,程序使用查找表來(lái)確定訪問(wèn)哪個(gè)寄存器或執(zhí)行什么功能。圖 7 顯示了一個(gè)示例應(yīng)用程序,其中微控制器充當(dāng)鍵盤(pán)控制器,在按鍵被按下時(shí)通知主微控制器。(這個(gè)例子將在以后的文章中展開(kāi)。)

pYYBAGN27KKAEw7WAAC-irHmQRc759.png
圖 7. 高級(jí) I/O 擴(kuò)展器作為帶鎖定指示燈的鍵盤(pán)控制器
?

高級(jí) I/O 擴(kuò)展器 - 程序結(jié)構(gòu)

圖 8 是器件中“寄存器”的查找表。表中的某些寄存器物理存在于每個(gè) PIC16F15244 系列器件上,例如 TRIS 和 LAT,而其他寄存器(例如 ERROR)是“虛擬的”。虛擬寄存器特定于該程序并且僅存在于 RAM 中。

poYBAGN27KeAD-oIAABeEQ-2RBQ468.png
圖 8. I/O 高級(jí)擴(kuò)展器的寄存器映射
?

這種查找表結(jié)構(gòu)的一個(gè)好處是可以靈活地重新排列寄存器,這可用于優(yōu)化串行通信或減少軟件故障干擾關(guān)鍵設(shè)置的機(jī)會(huì)。

查找表分為兩個(gè)單獨(dú)的函數(shù)用于讀取和寫(xiě)入。這以代碼大小為代價(jià)創(chuàng)建了一個(gè)簡(jiǎn)單可靠的權(quán)限方案。例如,要?jiǎng)?chuàng)建一個(gè)只讀函數(shù),只需從寫(xiě)查找表中省略地址即可。

高級(jí) I/O 擴(kuò)展器 - 通信

與此示例的通信比簡(jiǎn)單的 I/O 擴(kuò)展器更復(fù)雜。在執(zhí)行讀取或?qū)懭胫?,控制器必須已指示開(kāi)始讀取或?qū)懭氲牡刂贰?/font>

I2C 寫(xiě)入使用第一個(gè)數(shù)據(jù)字節(jié)來(lái)設(shè)置起始地址。然后,下一個(gè)字節(jié)用于加載該地址的數(shù)據(jù)。然后為發(fā)送的下一個(gè)數(shù)據(jù)字節(jié)增加地址。只要地址仍然可寫(xiě)且有效,此過(guò)程就可以重復(fù),如下所示。如果寫(xiě)入無(wú)效或只讀地址,則該地址不會(huì)遞增,并且設(shè)備不會(huì)確認(rèn) (NACK) 以發(fā)出錯(cuò)誤已發(fā)生的信號(hào)。

pYYBAGN27KqAWVsZAABejEMohUY128.png
圖 9. 高級(jí) I/O 擴(kuò)展器,I2C 寫(xiě)入流程圖
?
pYYBAGN27KyAKmMnAABPdNB5CBI443.png
圖 10. 高級(jí) I/O 擴(kuò)展器,I2C 寫(xiě)入
?

對(duì)于 I2C 讀取,必須首先設(shè)置要讀取的地址。通常這是通過(guò)將單個(gè)數(shù)據(jù)字節(jié)寫(xiě)入設(shè)備來(lái)完成的,盡管為方便起見(jiàn),某些操作可能會(huì)自動(dòng)設(shè)置地址。I2C 總線停止,然后以讀取模式再次啟動(dòng)。

讀取的第一個(gè)數(shù)據(jù)字節(jié)出現(xiàn)在地址集。讀取此字節(jié)后,地址會(huì)遞增,因此下一次讀取發(fā)生在地址 + 1、地址 + 2 處,依此類推。如果遇到無(wú)效或只寫(xiě)區(qū)域,則程序停止增加地址并返回 0x00,直到停止讀取。圖 12 顯示了兩個(gè)寄存器的讀取示例。

poYBAGN27K-Ab1wGAABl_1t-6os745.png
圖 11. 高級(jí) I/O 擴(kuò)展器,I2C 讀取流程圖
?
poYBAGN27LGAUI4SAABlUeigv9E841.png
圖 12. 高級(jí) I/O 擴(kuò)展器,I2C 讀取
?

高級(jí) I/O 擴(kuò)展器 – 特性

該程序存儲(chǔ)了 8 個(gè)與 I/O 相關(guān)的設(shè)置,所有這些設(shè)置都在器件數(shù)據(jù)表中進(jìn)行了更詳細(xì)的說(shuō)明。唯一未保存的 I/O 設(shè)置是模擬選擇 (ANSEL) 和 PORT。假設(shè) I/O 擴(kuò)展器始終是數(shù)字的,因此 ANSEL 是一個(gè)常數(shù)值。PORT 值是存在于 I/O bank 上的邏輯電平,它取決于電路條件。

引用這些寄存器時(shí),“x”(例如:TRISx)指的是可以分配的可選 I/O bank。默認(rèn)情況下,此示例使用銀行 C。

  • 三態(tài)方向控制 [ TRISx ] – 控制線路是輸出 (0) 還是輸入 (1)。
  • Latch [ LATx ] – 設(shè)置 I/O 驅(qū)動(dòng)器的輸出值。
  • Interrupt-On-Change Positive Edge [ IOCxP ] ——啟用所選引腳上的上升沿是否產(chǎn)生中斷。
  • Interrupt-On-Change Negative Edge [ IOCxN ] ——啟用所選引腳上的下降沿是否產(chǎn)生中斷。
  • 弱上拉 [ WPUx ] – 為每個(gè)選定的 I/O 啟用弱上拉。
  • 輸入電平控制 [ INLVLx ] ——為每個(gè)引腳選擇 TTL 或施密特觸發(fā)器 CMOS 輸入閾值。
  • 開(kāi)漏控制 [ ODCONx ] – 啟用所選引腳的開(kāi)漏輸出功能。
  • 壓擺率控制 [ SLRCONx ] – 啟用壓擺率限制以提高所選引腳的 EMI 性能。

高級(jí) I/O 擴(kuò)展器 - 內(nèi)存操作

作為一項(xiàng)附加功能,此代碼示例支持恢復(fù)默認(rèn)設(shè)置、保存、加載或保存并將其設(shè)置加載到內(nèi)部非易失性存儲(chǔ)器的功能。PIC16F15244 系列沒(méi)有 EEPROM,但可以通過(guò)啟用存儲(chǔ)區(qū)閃存 (SAF) 將一小部分程序閃存 (PFM) 標(biāo)記為不可執(zhí)行。

pYYBAGN27LaAZ8RmAAB_OcBH534491.png
圖 13. 內(nèi)存存儲(chǔ)
?

圖 13 顯示了配置是如何在內(nèi)部存儲(chǔ)的。只有一個(gè)存儲(chǔ)器行(32 個(gè) 14 位字)用于存儲(chǔ)設(shè)置。此配置簡(jiǎn)化了內(nèi)存管理,并將剩余的不可執(zhí)行內(nèi)存留作其他用途。

可配置的 I/O 設(shè)置與一個(gè)簡(jiǎn)單(軟件創(chuàng)建的)CRC-8 校驗(yàn)和一起保存到 PFM,以驗(yàn)證配置的完整性。為了將 CRC 打包到可用空間中,它被分成 2 位的塊并附加到每個(gè)配置的前 4 個(gè)設(shè)置。

pYYBAGN27LiARJiKAACQ7dE7nro099.png
圖 14. 內(nèi)存操作字節(jié)
?

如果加載的配置無(wú)法通過(guò)其校驗(yàn)和驗(yàn)證,則不會(huì)將其加載到適當(dāng)?shù)募拇嫫髦小?/font>對(duì)于內(nèi)存加載,可以在內(nèi)存操作字節(jié)中指定 I/O 引腳行為,如圖 14 所示。如果加載失敗,引腳將保持該狀態(tài),直到重新配置。

I/O 設(shè)置可以在運(yùn)行時(shí)保存并加載到四種配置中的任何一種。作為編譯選項(xiàng),開(kāi)發(fā)人員或設(shè)計(jì)人員可以將設(shè)備設(shè)置為在啟動(dòng)時(shí)嘗試加載配置 0 而不是默認(rèn)值,這可以用作不需要完全重新編程操作的簡(jiǎn)單固件更新。如果配置 0 未通過(guò) CRC 驗(yàn)證,程序?qū)⑹褂媚J(rèn) I/O 設(shè)置啟動(dòng)。

設(shè)備上的默認(rèn) I/O 設(shè)置被定義為常量,開(kāi)發(fā)人員可以根據(jù)應(yīng)用程序的需要進(jìn)行設(shè)置。這些默認(rèn)值不會(huì)被程序修改,并且被認(rèn)為是已知的良好值。運(yùn)行內(nèi)存操作“l(fā)oad defaults”將使用這些默認(rèn)值加載寄存器。

作為故障保險(xiǎn),所有內(nèi)存操作(不包括啟動(dòng)時(shí)的加載)都需要特定的字節(jié)序列來(lái)“解鎖”操作。這減少了軟件故障擦除或覆蓋設(shè)置的機(jī)會(huì)。

結(jié)論

如本文所示,在需要靈活 I/O 配置或在單個(gè)系統(tǒng)中使用大量 I/O 擴(kuò)展器的應(yīng)用中,簡(jiǎn)單的 8 位微控制器可以合理地替代通用 I/O 擴(kuò)展器 ASIC。這兩個(gè)示例所需的固件可通過(guò)以下鏈接在 Github 上獲得。使用 Arduino Uno 的高級(jí) I/O 擴(kuò)展器的演示庫(kù)和代碼也在 Github 中提供。

這是 3 部分博客文章系列的第 1 部分。下一篇文章將介紹如何利用先進(jìn)的 I/O 擴(kuò)展器來(lái)控制 7 段顯示器。

對(duì)于本系列的第 2 部分,介紹使用I/O 擴(kuò)展器來(lái)控制 7 段顯示器,請(qǐng)參閱此 Hackster Post。

對(duì)于本系列的最后一部分,包括使用 I/O 擴(kuò)展器創(chuàng)建鍵盤(pán)控制器,請(qǐng)參閱此 Hackster 帖子。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1DD3118電路圖紙資料
  2. 0.08 MB   |  1次下載  |  免費(fèi)
  3. 2AD庫(kù)封裝庫(kù)安裝教程
  4. 0.49 MB   |  1次下載  |  免費(fèi)
  5. 3PC6206 300mA低功耗低壓差線性穩(wěn)壓器中文資料
  6. 1.12 MB   |  1次下載  |  免費(fèi)
  7. 4網(wǎng)絡(luò)安全從業(yè)者入門指南
  8. 2.91 MB   |  1次下載  |  免費(fèi)
  9. 5DS-CS3A P00-CN-V3
  10. 618.05 KB  |  1次下載  |  免費(fèi)
  11. 6海川SM5701規(guī)格書(shū)
  12. 1.48 MB  |  次下載  |  免費(fèi)
  13. 7H20PR5電磁爐IGBT功率管規(guī)格書(shū)
  14. 1.68 MB   |  次下載  |  1 積分
  15. 8IP防護(hù)等級(jí)說(shuō)明
  16. 0.08 MB   |  次下載  |  免費(fèi)

本月

  1. 1貼片三極管上的印字與真實(shí)名稱的對(duì)照表詳細(xì)說(shuō)明
  2. 0.50 MB   |  103次下載  |  1 積分
  3. 2涂鴉各WiFi模塊原理圖加PCB封裝
  4. 11.75 MB   |  89次下載  |  1 積分
  5. 3錦銳科技CA51F2 SDK開(kāi)發(fā)包
  6. 24.06 MB   |  43次下載  |  1 積分
  7. 4錦銳CA51F005 SDK開(kāi)發(fā)包
  8. 19.47 MB   |  19次下載  |  1 積分
  9. 5PCB的EMC設(shè)計(jì)指南
  10. 2.47 MB   |  16次下載  |  1 積分
  11. 6HC05藍(lán)牙原理圖加PCB
  12. 15.76 MB   |  13次下載  |  1 積分
  13. 7802.11_Wireless_Networks
  14. 4.17 MB   |  12次下載  |  免費(fèi)
  15. 8蘋(píng)果iphone 11電路原理圖
  16. 4.98 MB   |  6次下載  |  2 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935127次下載  |  10 積分
  3. 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191390次下載  |  10 積分
  9. 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  10. 158M  |  183342次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81588次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73815次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65989次下載  |  10 積分