女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁(yè) > 消費(fèi)電子 > 消費(fèi)電子
[導(dǎo)讀]為了控制Arduino的隨機(jī)睡眠與喚醒,不采用“預(yù)定睡眠-隨機(jī)喚醒”的常規(guī)設(shè)計(jì)模式,而是通過(guò)一個(gè)外部中斷隨機(jī)使Arduino進(jìn)入睡眠,并且通過(guò)同一個(gè)外部中斷隨機(jī)喚醒Arduino。首先使用開(kāi)源Enerlib和LowPower庫(kù)對(duì)ArduinoPro Mini進(jìn)行實(shí)驗(yàn),然后應(yīng)用于實(shí)際的工程設(shè)計(jì)中,取得了很好的效果。該方法可以作為成熟的方案推廣到工程設(shè)計(jì)的實(shí)際應(yīng)用當(dāng)中。

摘要:為了控制Arduino的隨機(jī)睡眠與喚醒,不采用“預(yù)定睡眠-隨機(jī)喚醒”的常規(guī)設(shè)計(jì)模式,而是通過(guò)一個(gè)外部中斷隨機(jī)使Arduino進(jìn)入睡眠,并且通過(guò)同一個(gè)外部中斷隨機(jī)喚醒Arduino。首先使用開(kāi)源Enerlib和LowPower庫(kù)對(duì)ArduinoPro Mini進(jìn)行實(shí)驗(yàn),然后應(yīng)用于實(shí)際的工程設(shè)計(jì)中,取得了很好的效果。該方法可以作為成熟的方案推廣到工程設(shè)計(jì)的實(shí)際應(yīng)用當(dāng)中。

引言

“預(yù)定睡眠-隨機(jī)喚醒”是嵌入式系統(tǒng)設(shè)計(jì)中常用的方法。例如,在完成規(guī)定的數(shù)據(jù)發(fā)送或接收任務(wù)后,MCU立即進(jìn)入休眠以節(jié)約電力,這就是“預(yù)定睡眠”的含義;當(dāng)有新的數(shù)據(jù)發(fā)送和接收任務(wù)時(shí),通過(guò)各種方式喚醒MCU執(zhí)行前述任務(wù),這就是“隨機(jī)喚醒”的含義。在實(shí)際工程中,完成該功能主要使用軟件,首先整合系統(tǒng)功能,執(zhí)行完功能模塊后馬上執(zhí)行預(yù)定的睡眠指令,而喚醒功能則直接在中斷服務(wù)程序中體現(xiàn)。很多教科書、論壇中廣泛介紹的也都是這種方法,該方法能夠滿足一般工程設(shè)計(jì)的需要。但“預(yù)定睡眠”在某些工程中并不適合使用,例如在無(wú)線傳感網(wǎng)絡(luò)構(gòu)成的系統(tǒng)中,某個(gè)節(jié)點(diǎn)或分系統(tǒng)的睡眠時(shí)機(jī)不是由自己決定的,而是遠(yuǎn)程隨機(jī)控制的。在這種情況下,睡眠指令在節(jié)點(diǎn)或分系統(tǒng)執(zhí)行自己任務(wù)的過(guò)程中隨機(jī)發(fā)生,同樣,喚醒指令發(fā)出也是隨機(jī)的,通常為節(jié)省系統(tǒng)的硬件開(kāi)支并提高其可靠性,發(fā)出睡眠和喚醒指令使用同一個(gè)信號(hào),所以系統(tǒng)軟件的睡眠指令就不能固定在系統(tǒng)功能程序的預(yù)定位置,甚至不能在功能主程序及其調(diào)用的函數(shù)中出現(xiàn)。

1 目前Arduino睡眠與喚醒的方法

在Arduino IDE中控制Arduino睡眠的工具主要有Enerlib和LowPower兩種開(kāi)源類庫(kù),前一種已被Arduino開(kāi)源庫(kù)收錄,這兩種類庫(kù)專門完成 Arduino的睡眠控制。Arduino的睡眠效果和典型應(yīng)用在參考文獻(xiàn)中有詳細(xì)的介紹,但也未涉及到隨機(jī)進(jìn)入睡眠的方法。

1.1 使用Enerlib類庫(kù)的實(shí)現(xiàn)方法

Enerlib類庫(kù)提供的Example代碼說(shuō)明了如何使用該類庫(kù)的功能函數(shù),為閱讀方便起見(jiàn),筆者添加了行號(hào)標(biāo)識(shí)和中文注釋,如下所列:

可以看出,進(jìn)入睡眠的代碼在僅執(zhí)行一次的初始化模塊void setup()中,表明系統(tǒng)啟動(dòng)后做完初始化工作即進(jìn)入睡眠。代碼的19~23行給出了5種睡眠方式,在實(shí)際應(yīng)用中選擇一種適合的方式即可。系統(tǒng)的喚醒在 Int0外部中斷服務(wù)程序中,Enerlib類庫(kù)提供了一個(gè)只能在中斷服務(wù)程序中使用的WasSleeping()函數(shù),以判定系統(tǒng)目前的“睡眠/醒著” 的狀態(tài),該程序執(zhí)行一次睡眠,然后隨機(jī)喚醒后不能再次進(jìn)入睡眠狀態(tài)。這是一個(gè)典型的“預(yù)定睡眠一隨機(jī)喚醒”實(shí)例。

1.2 使用LowPower類庫(kù)的實(shí)現(xiàn)方法

LowPower類庫(kù)提供的實(shí)例代碼如下(行號(hào)和中文注釋由筆者添加):

可以看出,進(jìn)入睡眠的代碼在主程序循環(huán)體void loop()內(nèi),系統(tǒng)啟動(dòng)后即進(jìn)入休眠狀態(tài),一旦有外部中斷即喚醒,喚醒后執(zhí)行完主程序功能后再次進(jìn)入睡眠,這也是典型的“預(yù)定睡眠-隨機(jī)喚醒”實(shí)例。

因ATMega單片機(jī)在外部中斷模式下會(huì)忽略引起中斷引腳的數(shù)據(jù)方向,所以該例程第10行“pinMode(wake UpPin,INPUT);”沒(méi)有必要。

以上兩種睡眠與喚醒實(shí)例均實(shí)現(xiàn)不了隨機(jī)進(jìn)入睡眠的功能要求。

2 隨機(jī)睡眠與喚醒的方法

如果可以實(shí)現(xiàn)在系統(tǒng)工作過(guò)程中隨時(shí)中止工作進(jìn)入睡眠(如為了節(jié)省電力而遠(yuǎn)程控制終止節(jié)點(diǎn)的監(jiān)測(cè)),然后在適當(dāng)?shù)臅r(shí)機(jī)再喚醒系統(tǒng)繼續(xù)工作,就是典型的“隨機(jī)睡

眠-隨機(jī)喚醒”功能。

2.1 隨機(jī)進(jìn)入睡眠與喚醒的方法

在以上兩個(gè)實(shí)例中,一個(gè)是將睡眠指令放于初始化模塊,實(shí)現(xiàn)一次性主動(dòng)睡眠;另一個(gè)是將睡眠指令放在主程序循環(huán)體中,在執(zhí)行完預(yù)定功能后主動(dòng)進(jìn)入睡眠,二者均有外部隨機(jī)喚醒。如果要實(shí)現(xiàn)通過(guò)外部指令(中斷)隨機(jī)進(jìn)入睡眠,睡眠指令首先不能放在初始化模塊void setup()中,因?yàn)檫@樣僅會(huì)引起一次睡眠;如果放到主程序循環(huán)體void loop()中,則必須在由“睡眠/喚醒”指令引起的中斷服務(wù)程序中放置相應(yīng)的標(biāo)志,然后再在主程序中判斷這個(gè)標(biāo)志,勢(shì)必增加相應(yīng)的軟件開(kāi)支,而且程序的結(jié)構(gòu)也不明晰。

因此,實(shí)現(xiàn)隨機(jī)進(jìn)入睡眠的最簡(jiǎn)單的方法就是將睡眠指令直接置于中斷服務(wù)程序當(dāng)中,當(dāng)睡眠指令發(fā)出后,執(zhí)行中斷服務(wù)程序進(jìn)入睡眠;當(dāng)喚醒指令發(fā)出后,只要進(jìn)入了中斷服務(wù)程序即可喚醒。但是在同一個(gè)中斷服務(wù)程序中實(shí)現(xiàn)該功能,需要透徹地了解相應(yīng)單片機(jī)的中斷處理機(jī)制以及所用的庫(kù)函數(shù)對(duì)中斷的處理方法。

2.2 Arduino的外部中斷

構(gòu)成Arduino的核心處理器主要是Atmel的AVR ATmega系列MCU(如ATmega328),常用的實(shí)驗(yàn)平臺(tái)有UNO、NANO、Pro、Pro Mini、Micro、Lilypad、Leonardo、Duemilanove等,因此Arduino的睡眠與喚醒的控制實(shí)質(zhì)是對(duì)MCU的控制,也就是控制ATnaega328睡眠與喚醒。

實(shí)現(xiàn)隨機(jī)睡眠與喚醒的實(shí)驗(yàn)平臺(tái)是Arduino Pro Mini3.3 V、8 MHz/ATInega328,ATrnega328的外部中斷機(jī)制主要有:①RESET具有最高的優(yōu)先級(jí),第二個(gè)為INT0;②任一中斷發(fā)生時(shí)全局中斷使能位被清零,從而禁止了所有其他的中斷;③退出中斷后,總是回到主程序并至少執(zhí)行一條指令才可以去執(zhí)行其他被掛起的中斷;④如果選擇了邊沿觸發(fā)方式或電平變化觸發(fā)方式,那么持續(xù)時(shí)間大于一個(gè)時(shí)鐘周期的脈沖將觸發(fā)中斷,過(guò)短的脈沖則不能保證觸發(fā)中斷,如果選擇低電平觸發(fā)方式,那么低電平必須保持到當(dāng)前指令執(zhí)行完成;⑤外部中斷通過(guò)引腳INT0、INT1與INT2觸發(fā),只要使能中斷且電平發(fā)生了合適的變化,即使引腳INT0~2配置為輸出,中斷也會(huì)觸發(fā);⑥若要求INT0與INT1在信號(hào)下降沿或上升沿觸發(fā),則I/O時(shí)鐘必須工作;⑦通過(guò)電平方式觸發(fā)中斷,在將MCU從掉電模式喚醒時(shí),要保證電平保持一定的時(shí)間,以降低MCU對(duì)噪聲的敏感程度;⑧中斷響應(yīng)時(shí)間最少為4個(gè)時(shí)鐘周期,若中斷發(fā)生時(shí)MCU處于休眠模式,中斷響應(yīng)時(shí)間還需增加4個(gè)時(shí)鐘周期,此外還要考慮到不同的休眠模式所需要的啟動(dòng)時(shí)間。

2.3 Enerlib和LowPower類庫(kù)的中斷處理方式

兩個(gè)類庫(kù)中,Enerlib的5種睡眠指令為PowerDown()、Standby()、PowerSave()、SleepADC()、Idle(),LowPower的5種睡眠方式為ADC_OFF、BOD_OFF、IDLE_OFF、STANDBY EXT_STANDBY,除了對(duì)各種不同設(shè)備進(jìn)行關(guān)斷外,對(duì)系統(tǒng)中斷的處理方式均相同,即睡眠前后均不對(duì)中斷的使能進(jìn)行處理,而且均提供了打開(kāi)和關(guān)閉終端使能的函數(shù)。這樣,打開(kāi)和關(guān)閉中斷的時(shí)機(jī)就完全交給了開(kāi)發(fā)者。

3 隨機(jī)睡眠與喚醒的實(shí)現(xiàn)與結(jié)果

使用Arduino自帶的LED(Pin13驅(qū)動(dòng))來(lái)檢驗(yàn)隨機(jī)睡眠與喚醒,睡眠發(fā)生時(shí)LED閃爍0.1 s,表示接收到睡眠命令,然后熄滅LED進(jìn)入睡眠;喚醒發(fā)生時(shí)LED閃爍0.1 s,表示接收到喚醒命令,然后LED以1 Hz頻率閃爍工作。以下代碼筆者添加了行號(hào)標(biāo)識(shí)和中文注釋。

將Arduino Pro Mini的Pin2(D2)通過(guò)一個(gè)10 KΩ電阻連接到Vcc,然后在Pin2對(duì)地連接一個(gè)按鍵開(kāi)關(guān),下載完程序后上電,系統(tǒng)LED進(jìn)入1 Hz閃亮模式,按一下按鍵,LED閃爍0.1 s,然后進(jìn)入睡眠;再按一下按鍵,LED閃爍0.1 s,然后系統(tǒng)LED進(jìn)入1 Hz閃爍模式,如此重復(fù)。

結(jié)語(yǔ)

Arduino的核心--ATmega系列單片機(jī),以其RISC的可靠結(jié)構(gòu)、主控板、外圍模塊等硬件的規(guī)范設(shè)計(jì),具有較高的可靠性。Arduino之所以風(fēng)靡全球,除了開(kāi)源的硬件之外,更重要的是配套了開(kāi)發(fā)軟件的IDE以及眾多的類庫(kù),同時(shí)IDE集成、定義了編程方法,底層的Bootloader就像是個(gè)微型操作系統(tǒng),而不像使用Keil C開(kāi)發(fā)單片機(jī)軟件那樣自己來(lái)組織程序的結(jié)構(gòu)、編寫驅(qū)動(dòng)程序,Arduino的軟件和硬件設(shè)計(jì)使得編程、供電、下載一體化。由于其遵循開(kāi)源共享的宗旨,相關(guān)類庫(kù)會(huì)越來(lái)越豐富,也正是這個(gè)IDE將軟件開(kāi)發(fā)工具和實(shí)際硬件隔離,使得軟件開(kāi)發(fā)變得簡(jiǎn)單、快速,開(kāi)發(fā)者可以專注于方案的實(shí)施。當(dāng)然也由于軟件底層與功能模塊硬件的隔離,使得開(kāi)發(fā)者越來(lái)越依賴類庫(kù),這一循環(huán)導(dǎo)致開(kāi)發(fā)者過(guò)分依賴類庫(kù)而不去探究問(wèn)題的實(shí)質(zhì),最后導(dǎo)致問(wèn)題得不到解決或者退而更換主控系統(tǒng)硬件,從而妨礙了Arduino更大范圍的應(yīng)用。本文所敘述的例程可以根據(jù)實(shí)際工程要求做適當(dāng)修改而直接應(yīng)用,具有一定的參考價(jià)值。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

深圳2025年8月4日 /美通社/ -- 近日,電子元件和工業(yè)品數(shù)字化全球供應(yīng)商歐時(shí)RS聯(lián)合四方維(Supplyframe)創(chuàng)新中心成功舉辦 "歐時(shí)RS創(chuàng)客沙龍——Arduino主題開(kāi)放日"。活動(dòng)聚焦開(kāi)源硬件與編程領(lǐng)軍平...

關(guān)鍵字: Arduino 開(kāi)源 創(chuàng)客 智能未來(lái)

我們已經(jīng)看到了如何通過(guò)HC-05發(fā)送和接收數(shù)據(jù),但大多數(shù)藍(lán)牙應(yīng)用程序需要的不僅僅是發(fā)送和接收。在本教程中,我們將看到如何將HC-05與0.91英寸。OLED顯示屏打印HC-05接收到的數(shù)據(jù)。

關(guān)鍵字: OLED顯示器 Arduino HC-05藍(lán)牙模塊

ESP32模塊非常通用,可以通過(guò)WiFi連接到各種不同的平臺(tái)來(lái)發(fā)送和接收數(shù)據(jù)。在本教程中,我們將使用Arduino的物聯(lián)網(wǎng)云平臺(tái)(這是完全免費(fèi)使用)與ESP32。有關(guān)Arduino IoT Cloud的更詳細(xì)概述,請(qǐng)查看...

關(guān)鍵字: GPS ESP32模塊 Arduino 物聯(lián)網(wǎng)

在這個(gè)中級(jí)電子和無(wú)線電通信教程中,我們將深入研究使用Arduino平臺(tái)和nRF24L01+無(wú)線模塊構(gòu)建功能齊全的8+通道RC(無(wú)線電控制)發(fā)射器和接收器。該項(xiàng)目結(jié)合了微控制器編程,傳感器集成和射頻通信的核心技能,非常適合...

關(guān)鍵字: Arduino RC控制器 發(fā)射器 接收器

作為飛行員,在空中和地面上,在飛行和飛行前的許多方面保持“安全第一”是很重要的,其中之一就是避免碰撞。過(guò)去幾年,即使是小型航空、自由飛行的飛機(jī),如滑翔機(jī)、滑翔傘、懸掛式滑翔機(jī)等,在未來(lái)的無(wú)人機(jī)中,也開(kāi)始采用儀器來(lái)觀察和讓...

關(guān)鍵字: Arduino ESP32 LED

用c++編程似乎是讓你的Arduino項(xiàng)目起步的障礙嗎?您想要一種更直觀的微控制器編程方式嗎?那你需要了解一下Visuino!這個(gè)圖形化編程平臺(tái)將復(fù)雜電子項(xiàng)目的創(chuàng)建變成了拖動(dòng)和連接塊的簡(jiǎn)單任務(wù)。在本文中,我們將帶您完成使...

關(guān)鍵字: Visuino Arduino ESP32 STM32

你有沒(méi)有想過(guò)Arduino是如何成為制造商和愛(ài)好者的強(qiáng)大工具的?在Arduino for Beginners課程的第二篇文章中,我們將探索Arduino背后的鼓舞人心的故事和一些展示其多功能性的實(shí)際應(yīng)用程序。最后,我將指...

關(guān)鍵字: LED Arduino UNO板

美國(guó) 賓夕法尼亞 MALVERN、中國(guó) 上海 — 2025年7月1日 — 日前,威世科技Vishay Intertechnology, Inc.(NYSE 股市代號(hào):VSH)宣布,推出采用 0402外殼尺寸的新器件,擴(kuò)展...

關(guān)鍵字: ADI Adafruit Arduino

本項(xiàng)目基于Wio Terminal(2.4寸液晶屏、物理按鍵、高效處理器)的硬件特性和Arduino開(kāi)源生態(tài)系統(tǒng),實(shí)現(xiàn)了一款沉浸式F1賽車游戲。玩家通過(guò)按鍵控制賽車躲避障礙物,游戲難度隨分?jǐn)?shù)動(dòng)態(tài)增加,結(jié)合專業(yè)的賽車圖形渲...

關(guān)鍵字: Arduino 開(kāi)源生態(tài)系統(tǒng) Wio Terminal

使用LoRaWAN的智能水位和洪水警報(bào)系統(tǒng)。實(shí)時(shí)數(shù)據(jù)+環(huán)境。傳感器=零連接成本的早期預(yù)警。

關(guān)鍵字: Arduino LoRaWAN 傳感器
關(guān)閉