RM新时代网站-首页

電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>nRF24L01用于帶有ATtiny13A的超低功耗傳感器

nRF24L01用于帶有ATtiny13A的超低功耗傳感器

2022-10-27 | zip | 0.02 MB | 次下載 | 2積分

資料介紹

描述

動(dòng)機(jī)

(極客直接跳到挑戰(zhàn)和現(xiàn)有解決方案部分)

用于監(jiān)控各種環(huán)境和天氣條件(溫度、濕度、壓力、光線、雨水、氣體、運(yùn)動(dòng))的(自制)物聯(lián)網(wǎng)系統(tǒng)的設(shè)計(jì)和部署已成為每個(gè)(初級(jí))愛(ài)好者所做的最受歡迎的項(xiàng)目之一一生至少一次。來(lái)自 OEM 和 DIY 套件供應(yīng)商的硬件構(gòu)建塊的可用性,以及大量的免費(fèi)軟件(開源、現(xiàn)成的解決方案、庫(kù)、驅(qū)動(dòng)程序、IDE、應(yīng)用程序、操作系統(tǒng)、云中間件等)已經(jīng)使項(xiàng)目純粹是明智的。設(shè)計(jì)師的角色通常被簡(jiǎn)化為只選擇正確的傳感器模塊,這些模塊連接到“強(qiáng)大”的 MCU 板(ESP32 、Raspberry Arduino),將現(xiàn)有軟件(驅(qū)動(dòng)程序、庫(kù))粘合在一起,并編寫簡(jiǎn)單的應(yīng)用程序邏輯。更不用說(shuō)無(wú)數(shù)的指南、博客和 YouTube 教程了。

這種方法具有許多優(yōu)點(diǎn),例如快速原型制作、不需要深入的知識(shí)和經(jīng)驗(yàn)、非常有趣、大量支持以及沒(méi)有(或顯著減少)挫折感。對(duì)于那些決定進(jìn)一步推進(jìn)該項(xiàng)目并希望在其財(cái)產(chǎn)中/周圍構(gòu)建和部署大量傳感器,甚至商業(yè)化(至少將解決方案出售給您的朋友或家人)的少數(shù)人來(lái)說(shuō),這種方法有幾個(gè)缺點(diǎn)。最重要的是解決方案的整體價(jià)格(如果你賣掉它,利潤(rùn)會(huì)更低)。事實(shí)上,它可能比知名品牌的高價(jià)產(chǎn)品便宜。但是,使用ESP32 (雙核 32 位 @ 160 或 240MHz、320 KiB RAM、448 KiB ROM CPU 以及大量 IO 和總線)從臭名昭著的傳感器(例如DHT11, DHT22 , DS18B20 , AM2320 , BMP280 ) 通過(guò) SPI/I2C/單線總線。除此之外,使用 Wi-Fi 將幾個(gè)字節(jié)轉(zhuǎn)發(fā)到中央集線器(另一個(gè) ESP32 或 Raspberry)與(能源)效率無(wú)關(guān)。藍(lán)牙低功耗 (BTE) 配置文件可能會(huì)有所改進(jìn),但是,模塊(例如HC-05)的價(jià)格比 MCU 本身(包括一些傳感器)貴數(shù)倍。

綜上所述,小型物聯(lián)網(wǎng)傳感器主要有兩個(gè)非功能性需求:

  • 成本優(yōu)化:由于數(shù)量大,生產(chǎn)要經(jīng)濟(jì)。因此,物聯(lián)網(wǎng)傳感器應(yīng)該體積?。?a href='http://hljzzgx.com/v/tag/82/' target='_blank' class='arckwlink_none'>PCB),基于低端和低成本的 MCU (以最大限度地利用資源),并使用廉價(jià)的連接進(jìn)行遠(yuǎn)程訪問(wèn)。低端 MCU 的引腳數(shù)較少,有利于 PCB 優(yōu)化,但它限制了連接的 IO 設(shè)備/傳感器的數(shù)量。此外,低端 MCU資源稀缺(閃存、RAM、IO、總線),這限制了整體功能(應(yīng)用程序并需要 IO 協(xié)議的 SW bit-banging)。然而,物聯(lián)網(wǎng)傳感器通常只收集少數(shù)環(huán)境屬性(2 個(gè),也許 3 個(gè))。這不需要使用大量的引腳和 MCU 資源。
  • 易于部署和自主:傳感器應(yīng)易于重新部署(連接),無(wú)需改變其周圍和環(huán)境。不需要額外安裝電線來(lái)為傳感器提供電源和通信,即傳感器應(yīng)該是無(wú)線的和電池供電的(或能夠從環(huán)境中提取能量)。因此,此類傳感器(包括通信模塊)需要超低功耗(納至微安范圍)以避免頻繁更換電池。

對(duì)于通信模塊,有多種 COTS 選項(xiàng)可以同時(shí)滿足低成本和超低功耗的需求。其中之一是收發(fā)器nRF24L01+特別受創(chuàng)客和愛(ài)好者的歡迎。它價(jià)格低廉(中國(guó)網(wǎng)上商店的分線板從 0.8 美元起)和超低功耗(掉電模式下為 990nA,待機(jī)模式下為 22uA,最大功率下 TX/RX 期間為 12mA)。此外,它具有簡(jiǎn)單的接口(盡管是 3.3V 供電設(shè)備,但具有 5V 容限邏輯引腳的 SPI)、許多有利的特性(例如 ISM 頻帶 2.4GHz,范圍從 100 到 1000m、0.5-1-2 Mbps 帶寬、自動(dòng)-retransmit、auto CRC check、multiciever)、大量廉價(jià)(突破)模塊(見下文)和幾個(gè) SW 庫(kù)(nRF24 用于 Arduino/Raspberry Linux )。

受愛(ài)好者歡迎的典型低端(成本)MCU 是8 位 AVR子系列,帶有稱為ATtiny的有限外設(shè)集,特別是 8 針25/45/85和 14 針24/44/84版本(第一個(gè)數(shù)字是以 KiB 為單位的閃存大?。?。Arduino 的 28 針ATmega328P屬于 ATmega 系列,具有廣泛的外設(shè)和指令集。它提供 32KiB 閃存、4 倍更大的 RAM、更多 IO 設(shè)備,而且價(jià)格更高。在 (PCB) 尺寸、低引腳數(shù)和成本非常重要的情況下,ATtiny 系列 25/45/85 和 24/44/84 可能比 328P 更可取。

另一個(gè)有趣的低端 MCU 是帶有 1KiB 閃存和 64B SRAM的 8 針ATtiny13A 。它比 25/45/85 和 24/44/84 ATtiny 系列便宜 2-4 倍(< 1 美元)并且消耗更少的能量。因此,它在小型、簡(jiǎn)單、電池供電的低成本設(shè)計(jì)(大多數(shù)無(wú)線傳感器都是如此)中特別受歡迎。

將 ATtiny13A 與低功耗無(wú)線模塊 nRF24L01+ 相結(jié)合,對(duì)于滿足上述非功能性要求的物聯(lián)網(wǎng)傳感器來(lái)說(shuō),似乎是一個(gè)可行的選擇。

為什么有人會(huì)費(fèi)心將 nRF24L01+ 安裝在 8 針微型 ATtiny13A 和 1 KiB 閃存上的另一個(gè)原因,該閃存已經(jīng)有 3 個(gè)針腳被超低功耗設(shè)備中的傳感器占用,這是……只是為了玩得開心,大笑,很棒有趣,因?yàn)椋?/font>

“在 2K 中,你幾乎沒(méi)有刷牙的空間。”
-喬·德庫(kù)爾

挑戰(zhàn)和現(xiàn)有解決方案

由于硬件和軟件的挑戰(zhàn),低端 8 針 ATtiny13A 與 nRF24L01 的組合并非易事。在我們對(duì)通用 8 引腳 MCU 的評(píng)論中,我們更詳細(xì)地描述了這種結(jié)合所面臨的硬件和軟件挑戰(zhàn)。回想一下,硬件挑戰(zhàn)如下圖所示:

pYYBAGNYsqCAbgUeAAA87vAe8eQ500.png
將 nRF24 模塊與 ATtiny13A (t13a) 等 8 針 MCU 連接的硬件挑戰(zhàn)。
?

ATtiny13A 實(shí)際上有 5 個(gè)引腳。如果我們將 PB5 從其主要功能(RESET/dWIRE)重新編程到 IO 端口,我們有 6 個(gè)引腳。但是,所有 6 引腳的使用都需要高壓編程這對(duì)于在線串行編程 (ICSP) 并不總是可行的。此外,我們沒(méi)有任何備用引腳用于連接傳感器或連接到現(xiàn)場(chǎng)總線。從審查的現(xiàn)有解決方案來(lái)看,所有硬件提案原則上都適用于 ATtiny13A ,但每個(gè)都有相關(guān)的“成本”:

  • Ralph 的 2 和 3 引腳解決方案需要幾個(gè)額外的無(wú)源元件。將 CE 永久拉高將無(wú)法充分利用 nRF24 模塊的節(jié)能功能。因此,它不是超低功耗應(yīng)用的理想解決方案。
  • 不使用 IRQ 信號(hào)將釋放 1 針(例如 PB5),可用于其主要功能(RST/dWIRE),但我們?nèi)匀粺o(wú)法連接其他設(shè)備。
  • 共享 CE 引腳不是通用解決方案。CSN 低時(shí)不會(huì)干擾模塊。但是,當(dāng)用于控制 nRF24 時(shí),它可能與任何連接的設(shè)備或現(xiàn)場(chǎng)總線不兼容。
  • 單向 SPI 適用于與主網(wǎng)關(guān)具有單向(單工)通信的無(wú)線傳感器網(wǎng)絡(luò) (WSN)。因此,這不是通用解決方案,而是適用于特定類型的 WSN。

不幸的是,并非所有經(jīng)過(guò)審查的軟件解決方案都具有足夠低的內(nèi)存占用和/或支持所有功能:

  • 用于 Arduino 和 RPi 的 nRF 驅(qū)動(dòng)程序具有針對(duì)ATtiny 子系列的優(yōu)化分支。前叉仍然很大,甚至無(wú)法容納內(nèi)存是 t13a 兩倍的 ATtiny2313A。
  • Nerd Ralp將針對(duì) ATtiny84 (8KiB 閃存,14 針)定制的 tinkerer.eu 庫(kù)移植到他的 ATtiny85(8KiB 閃存。目前尚不清楚總體占用空間是多少以及它是否適合 1KiB 閃存。此外,該庫(kù)依賴于 t13a 系列中未提供的通用串行接口 (USI) 外圍設(shè)備。這可以通過(guò)bit-banging來(lái)解決
  • 這個(gè)特定的共享 CE 引腳解決方案在 t13a 上運(yùn)行,nRF24 的 SW 驅(qū)動(dòng)程序是一個(gè)精簡(jiǎn)的Mirf 庫(kù),它只支持傳輸(盡管它需要具有 MOSI 和 MISO 信號(hào)的雙向 SPI)。

總而言之:所有列出的硬件解決方案都只優(yōu)化了一個(gè)參數(shù)——引腳數(shù)。它們都沒(méi)有同時(shí)優(yōu)化 1)能耗、2) 引腳數(shù)3) 代碼占用空間。這對(duì)于超低功耗應(yīng)用至關(guān)重要。此外,還缺少一個(gè)合適的 SW 驅(qū)動(dòng)程序來(lái)支持半雙工無(wú)線通信,該驅(qū)動(dòng)程序可以適合 t13a 以及支持一些引腳數(shù)優(yōu)化解決方案。我們認(rèn)為還有進(jìn)一步提升的空間。出于這個(gè)原因,我們?cè)O(shè)計(jì)了一個(gè)全新的 SW 庫(kù),將在本文的其余部分進(jìn)行描述。該庫(kù)支持以下分別描述的三種硬件配置:

  • 共享 CE 和 CSN 信號(hào) - 它可以獨(dú)立使用,也可以與其余兩種配置組合使用。
  • 3線SPI(合并MISO和MOSI),
  • 可選單向 SPI(無(wú) MISO)。

配置 1:共享 CE 和 CSN

poYBAGNYsqWAXCNKAAAV_aV0veE689.png
共享 CE 和 CSN 配置
?

CE 和 CSN 都是輸入引腳,根據(jù)nRF24 產(chǎn)品規(guī)范

  • CSN 是片選,低電平有效。需要至少 50ns的脈沖(低-高-低)持續(xù)時(shí)間來(lái)指示 SPI 上新事務(wù)的開始(規(guī)范中的第 49 頁(yè),圖 25 和參數(shù) Tcwh,表 18-25)。如果我們保持 CSN 關(guān)閉但不提供時(shí)鐘信號(hào) (CSK),則不會(huì)有數(shù)據(jù)流過(guò),模塊也不會(huì)收到任何命令。因此,nRF24 將保持其當(dāng)前狀態(tài),內(nèi)部寄存器不會(huì)受到影響。
  • CE 用于在 RX 或 TX 模式下激活芯片,高電平有效。要將模塊的無(wú)線電切換到 TX 或 RX 模式,需要至少 10us的脈沖(第 22 頁(yè)的第 6.1.5 節(jié)和第 40 頁(yè)的圖 13)。

由此我們可以識(shí)別出共享 CE/CSN 信號(hào)的以下情況:

1) CE/CSN 為低電平,SCK 上無(wú)脈沖:默認(rèn)情況,未啟用無(wú)線電,nRF24 不受影響。

2) CE/CSN 為低電平,SCK 上的時(shí)鐘信號(hào):MCU 和 nRF 模塊之間通過(guò) SPI 傳輸數(shù)據(jù)。

3) CE/CSN 上的脈沖大于 50ns 且小于 10us :復(fù)位 SPI 接口并指示新事務(wù)的開始。

4) CE/CSN 上的10us脈沖:如果模塊之前處于StandBy-1模式(通過(guò) SPI 接口設(shè)置配置寄存器中的 PWR_UP 位激活),則啟用無(wú)線電模式(TX 或 RX)。

5) 將 CE/CSN 拉高 10us 以上:在 RX 模式下用于等待新消息。

我們將使用條件 (1) CE/CSN 低作為信號(hào)的默認(rèn)狀態(tài)。我們是否要啟用/禁用無(wú)線電(通常由 CE 控制)或通過(guò) SPI 讀/寫寄存器(通常由 CSN 控制)的選擇將使用不同的脈沖持續(xù)時(shí)間“編碼”。

如果我們想在 SPI 上執(zhí)行事務(wù)(訪問(wèn)控制/狀態(tài)寄存器和 TX/RX 數(shù)據(jù)緩沖區(qū)),該過(guò)程將采取以下步驟:

  • 1 -> 3 -> 2 -> 1 。

要啟用收音機(jī),讓我們首先看看 TX 模式。在我們切換到 TX 模式之前,我們必須正確配置 nRF24 模塊(上電,進(jìn)入StandBy-1模式)并將數(shù)據(jù)上傳到 TX 緩沖區(qū)。這是通過(guò)上述常規(guī) SPI 事務(wù)和步驟完成的。之后,觸發(fā)傳輸?shù)倪^(guò)程將采取以下步驟:

  • 1 -> 4 -> 1

模塊將切換到 TX 模式,將執(zhí)行所有操作(傳輸、等待確認(rèn)、重傳、超時(shí)),并且在所有 TX 緩沖區(qū)為空后將切換回StandBy-1模式,因?yàn)?CE 為低電平。如果我們一直保持 CE 為高電平,即使緩沖區(qū)為空,模塊也會(huì)進(jìn)入StandBy-2狀態(tài)。不同之處在于功耗:22uA 與 320uA,即StandBy-2 的15 倍。這樣的功耗等于完全激活狀態(tài)下 1MHz 的 ATtiny13A。模塊將停留在StandBy-1直到 MCU 將 nRF24 池化為狀態(tài)并最終關(guān)閉無(wú)線電(PWR_UP=0 位),即切換到PowerDown僅消耗 990nA 的狀態(tài)。CE 上的這個(gè)短脈沖節(jié)省了一些能量,這在超低功耗應(yīng)用中確實(shí)很重要。

pYYBAGNYsqqAGnP-AAEm1eadatQ736.png
從 nRF24 狀態(tài)機(jī)中刪除。狀態(tài)和轉(zhuǎn)換的顏色表示具有相關(guān)消耗的邏輯組:為無(wú)線電供電(綠色)、RX 模式(紅色)、TX 模式(藍(lán)??色)、共享狀態(tài)(黑色)
?

接收(RX模式)的情況略有不同,因?yàn)槲覀円却容^長(zhǎng)的一段時(shí)間才能接收到一些數(shù)據(jù)。在 CE/CSN 上執(zhí)行 10us 的短脈沖是不夠的。一種選擇是將 CE/CSN 保持高電平一段所需的時(shí)間。在此期間,我們無(wú)法使用 SPI 訪問(wèn) nRF24。這個(gè)問(wèn)題可以通過(guò)在發(fā)送端設(shè)置足夠多的重傳、超時(shí)和消息確認(rèn)屬性來(lái)緩解。應(yīng)配置 SPI 事務(wù)讀取狀態(tài)寄存器的持續(xù)時(shí)間短于整個(gè)傳輸會(huì)話(包括重新傳輸)。該程序?qū)⒉扇∫韵虏襟E:

  • 1 -> 5 -> 1

此解決方案適用于主要用于傳輸?shù)脑O(shè)備,但對(duì)于預(yù)期設(shè)備永久處于接收器模式的情況效果較差。對(duì)于這種情況,不合并 CE 和 CSN 可能更有效。相反,將 CE 拉至 Vcc(高電平)將使 ATtiny13A 無(wú)需關(guān)閉無(wú)線電即可匯集新消息。

配置 2:3 線 SPI

這個(gè)想法是通過(guò)一個(gè)電阻將 SPI 數(shù)據(jù)信號(hào) MOSI 和 MISO 合并為一個(gè),如下圖所示:

poYBAGNYsqyAWVQNAAAbkIPPAys080.png
3線SPI硬件配置
?

這不是一個(gè)新想法,在各種設(shè)計(jì)中相對(duì)常見,以減少信號(hào)的數(shù)量。nRF24 模塊會(huì)在這樣的信號(hào)合并下正常工作嗎?此圖中顯示了 SPI 與文檔中的 nRF24 模塊的通信:

?
?
?
pYYBAGNYsq6AEEzWAAA_Z25Z2F4693.png
?
1 / 2 ? nRF24:SPI 寫操作
?

我們看到nRF24使用MISO發(fā)送狀態(tài)字節(jié),而主控(MCU)向模塊發(fā)送命令,即全雙工通信。之后,MISO 線下降,僅在主 (MCU) 請(qǐng)求讀取操作時(shí)使用。兩個(gè)信號(hào)之間唯一可能的干擾是在開始時(shí)可能會(huì)破壞命令字節(jié)(在 MOSI 線上)。幸運(yùn)的是,這種“沖突”是通過(guò)電阻解決的。其值應(yīng)保證信號(hào)源/漏極不跨越 MCU 和模塊的引腳特性。在我們的案例中,從 4.7k 到 10k 的值運(yùn)行良好。

合并的 MISO/MOSI 節(jié)省了一個(gè)可用于直接控制 CE 的引腳。如果需要,可以將此配置與第一個(gè)配置混合使用 - 共享 CE/CSN,如下圖所示:

pYYBAGNYsrGAFIG_AAA5KhGCx-k566.png
3 線 SPI 與共享 CE/CSN 的組合(3 引腳解決方案)
?

配置 3:?jiǎn)蜗?SPI

這種配置降低了 MISO(主輸入,從輸出)線,使其成為 3 線 SPI,即減少了一個(gè)引腳數(shù)。我們可以將數(shù)據(jù)寫入 nRF24 模塊,但我們將無(wú)法讀取它們:

poYBAGNYsrOABt8WAAAXAT8aYwg109.png
單向SPI
?

它可能非常嚴(yán)格,但適用于某種類型的無(wú)線應(yīng)用程序 - 設(shè)備專門用作數(shù)據(jù)源(測(cè)量),它不接收來(lái)自其他設(shè)備或網(wǎng)關(guān)(中央集線器)的數(shù)據(jù)。如果我們可以有一個(gè) 3 線 SPI 來(lái)節(jié)省相同數(shù)量的引腳,為什么我們還需要單向 SPI?有兩個(gè)原因:

  • 我們還希望最大限度地減少組件數(shù)量/成本和/或 PCB 尺寸和復(fù)雜性。
  • 減少驅(qū)動(dòng)程序的內(nèi)存占用,從而為傳感器驅(qū)動(dòng)程序和應(yīng)用程序邏輯留下一些寶貴的空間。ATtiny13A 只有 1KiB 的閃存。

我們可以將此配置與第一個(gè)配置(共享 CE/CSN)相結(jié)合,以進(jìn)一步優(yōu)化 MCU 所需的引腳數(shù),如下圖所示:

pYYBAGNYsriAJ9yXAAA3Bu16kzQ121.png
單向 SPI 與共享 CE/CSN 的組合(3 引腳解決方案)
?

庫(kù)配置

代碼在 C ( nRF24L01.c) 和匯編程序 ( nRF24L01_asm.S) 中都實(shí)現(xiàn)。頭文件nRF24L01.h包含重要的常量和 API 函數(shù)的聲明。默認(rèn)情況下,該庫(kù)使用全 4 線 SPI 和獨(dú)立的 CE 和 CSN 信號(hào)。通過(guò)在文件中定義相應(yīng)的宏來(lái)配置庫(kù)以使用上述硬件選項(xiàng)之一。projdefs.h

#define	NRF24L01_SHARED_CE_CSN    // For shared CE/CSN configuration

此宏可以與以下任一(或無(wú))組合:

#define	NRF24L01_3WIRE_SPI        // If used 3-wire SPI (with resistor)
#define	NRF24L01_DO_NOT_USE_MISO  // Uni-directional configuration

如果上述三個(gè)宏均未定義,則假定為默認(rèn)配置。

定義連接到哪些端口 nRF24 信號(hào)也通過(guò)projdefs.h標(biāo)頭中的宏完成。引腳配置宏是:

// MANDATORY macros for port output, port direction and pin reading:
#define NRF24L01_PORT		PORTB
#define NRF24L01_DDR		DDRB
#define NRF24L01_INPORT		PINB

為特定的引腳配置定義以下宏(如果適用 - 請(qǐng)參閱上面的功能):

#define NRF24L01_CE     PB0    // Optional. Do not define if shared CE/SCN is enabled 
#define NRF24L01_CSN    PB2    // Mandatory
#define NRF24L01_SCK	PB1    // Mandatory
#define NRF24L01_MOSI	PB3    // Mandatory
#define NRF24L01_MISO	PB4    // Optional. Define only if 4-wire SPI is used.

API

API 只有 8 個(gè)(或 6 個(gè),如果是單向的)方法。必須調(diào)用的第一個(gè)函數(shù)是初始化:

void nrf24_init(void);

其余功能根據(jù) SPI 事務(wù)的長(zhǎng)度進(jìn)行拆分。零字節(jié)命令通過(guò)以下方式調(diào)用:

void nrf24_cmd(uint8_t cmd);

參數(shù)是文檔表 16 中的“命令字” ,例如:FLUSH_TX, FLUSH_RX, REUSE_TX_PL. 為方便起見,頭文件包含所有命令代碼的定義。

使用一個(gè)數(shù)據(jù)字節(jié)調(diào)用命令(通常寫入寄存器):

void nrf24_writeReg(uint8_t cmd, uint8_t value);

如果我們沒(méi)有單向 SPI 配置,我們也可以讀取寄存器:

uint8_t nrf24_readReg(uint8_t cmd);

參數(shù) cmd 包含作為單個(gè)字節(jié)的復(fù)合寄存器地址:如果讀取,則為 1 并且00wAAAAA寄存器地址(第 9 章 - 寄存器映射)。wAAAAA

寫入 TX 緩沖區(qū)和多字節(jié)寄存器:

void nrf24_writeRegs(uint8_t cmd, const uint8_t *buff, uint8_t size);

如果我們不使用單向 SPI 配置,讀取緩沖區(qū)的函數(shù):

void nrf24_readRegs(uint8_t cmd, uint8_t *buff, uint8_t size);

參數(shù)列表是不言自明的。最后一組 API 函數(shù)用于在一段時(shí)間內(nèi)“切換”CE 信號(hào):

void nrf24_pulseCE(void);

這將在 CE 上產(chǎn)生大約 15us 的脈沖。該功能用于在無(wú)線電通電且 TX 緩沖區(qū)充滿數(shù)據(jù)后切換到 TX 模式。

為了使 CE 保持較高的持續(xù)時(shí)間(通常在使用共享 CE/CSN 配置時(shí)用于 RX 模式),應(yīng)使用以下函數(shù):

void nrf24_pulseCE_ms(uint16_t milliseconds);

如果我們不與 CSN 共享 CE(單獨(dú)連接),則由應(yīng)用程序邏輯來(lái)控制 CE 引腳。

例子

該庫(kù)的存儲(chǔ)庫(kù)在main.c文件中包含一個(gè)工作示例,用于通過(guò) nRF24L01 驅(qū)動(dòng)程序發(fā)送和接收 32 位序列號(hào)。

帶 ATtiny13A 的發(fā)射器

發(fā)射器結(jié)合了第一個(gè)(共享 CE/CSN)和第三個(gè)(單向)硬件配置。這占用了 MCU 上的 3 個(gè)引腳,剩下 2 個(gè)(如果沒(méi)有 RST,則為 +1)用于其他設(shè)備/傳感器/應(yīng)用程序。在我們的例子中,我們將一個(gè)紅色 LED 連接到 PB3:

poYBAGNYsrqAFMP3AAA68sBSM24736.png
發(fā)射器使用具有單向 SPI 的共享 CE/CSN
?

應(yīng)用程序每 2 秒遞增一次,并向通道 120 上的管道 0 發(fā)送一個(gè) 32 位無(wú)符號(hào)整數(shù)。LED 亮起 800 毫秒以指示周期的開始。源代碼展示了從對(duì)講機(jī)上電、配置模塊、將數(shù)據(jù)移入緩沖區(qū)、傳輸和對(duì)講機(jī)電源的整個(gè)過(guò)程。

包括為 nRF24 設(shè)計(jì)的庫(kù)在內(nèi)的發(fā)射器應(yīng)用程序的總體占用空間為372 字節(jié)(可用 1KiB)和 6 字節(jié) SRAM(共 64 字節(jié))。

?
?
?
pYYBAGNYsryAA0_dAACeRcCfgJo441.png
?
1 / 2 ?在面包板上具有共享 CE/CSN 和單向 SPI 的發(fā)送器示意圖
?

帶 ATtiny13A 的接收器

接收器應(yīng)用程序不使用共享 CE/CSN,因?yàn)樵撃K僅在 RX 模式下工作并且不傳輸數(shù)據(jù)(確認(rèn)數(shù)據(jù)包除外)。為了優(yōu)化引腳數(shù),我們應(yīng)用了總共占用 3 個(gè) MCU 引腳的 3 線 SPI:

poYBAGNYsr-ATx7EAAA-ljHjWfA614.png
接收器使用 3 線 SPI,CE 永久有效
?

應(yīng)用軟件每 100 毫秒?yún)R集一次狀態(tài)寄存器以獲取新數(shù)據(jù)包。如果數(shù)據(jù)包到達(dá),則將其讀入 MCU,并清除狀態(tài)。如果接收到的序列號(hào)與前一個(gè)序列號(hào)的增量相同,則綠色 LED 亮 1 秒。

包括為 nRF24 設(shè)計(jì)的庫(kù)在內(nèi)的接收器應(yīng)用程序的總體占用空間為420字節(jié)(可用 1KiB)和 6 字節(jié) SRAM(共 64 字節(jié))。

?
?
?
pYYBAGNYssGARJFPAAC1wKhU1aM662.png
?
1 / 2 ?在面包板上始終啟用 3 線 SPI 和 CE 的接收器示意圖
?

運(yùn)行演示應(yīng)用程序

同時(shí)運(yùn)行發(fā)射器和接收器:

運(yùn)行示例:TX LED(紅色)每 2 秒亮 800 毫秒。如果接收到前一個(gè)序列號(hào)的增量,RX LED(綠色)會(huì)亮起 1 秒。
?

如果接收器接收到預(yù)期的序列號(hào),接收器的 LED(綠色)將亮起 1 秒。紅色 (TX) 和綠色 (RX) LED 之間的最大延遲約為 100 毫秒,這是由 RX 側(cè)的池化引起的。

概括

提議的 nRF24 庫(kù)的主要目標(biāo)和成就是:

  • 最小化管腳數(shù):它支持三種通用管腳優(yōu)化硬件配置(與此共享 CE 不同),不需要或單個(gè)電阻器(與Nerd Ralph 的解決方案不同)。nRF24 模塊在 MCU 上僅占用 3 個(gè)引腳而不是 6 個(gè)。這留下了其他 2 個(gè)引腳(如果 RST 用作 IO,則為 +1)用于連接傳感器或現(xiàn)場(chǎng)總線。
  • 最小化功耗:專為超低功耗應(yīng)用而設(shè)計(jì)。通過(guò)極少指令的優(yōu)化庫(kù)實(shí)現(xiàn)節(jié)能。這減少了整體執(zhí)行時(shí)間。與其他類似方法(共享 CE/CSN 與 CE 永久激活)相比,引腳數(shù)最小化的方式為 nRF24 模塊提供更好的能量管理。
  • 最小化庫(kù)的占用空間:非常低的占用空間 - 演示應(yīng)用程序有372 字節(jié)(發(fā)送器)和 420 字節(jié)(接收器),包括應(yīng)用程序的邏輯。它可以輕松裝入 ATtiny13A 并為其他應(yīng)用程序和連接的設(shè)備和現(xiàn)場(chǎng)總線留出足夠的空間。它可配置為半雙工或單工無(wú)線電通信,以進(jìn)一步最小化占用空間。與其他通用庫(kù)不同,它還可以部署在 ATtiny 子系列中具有相同或更大內(nèi)存的任何其他 MCU 上。SPI 接口實(shí)現(xiàn)為bit-banging,因此不依賴于通用串行接口 (USI)等外圍設(shè)備。

然而,實(shí)現(xiàn)給定的目標(biāo)需要付出一定的代價(jià)。API 提供的低粒度方法不如RF24 庫(kù)或類似庫(kù)中的高級(jí)方法方便。


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

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)
RM新时代网站-首页