Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 9306|Odpověď: 0

Zigbee Journey (8): Několik důležitých základních experimentů CC2430 – hlídací psi

[Kopírovat odkaz]
Zveřejněno 30.10.2014 23:23:37 | | | |
1. Propojení horní a dolní úrovně

Bez ohledu na to, jak dobrý je operační systém, ať už jde o současný Win7 nebo budoucí Win8 a Win9, vždy tu bude BlueScreen, nemluvě o malém mikrokontroléru~ Nepředvídatelné důvody jako elektrický šum, výpadek napájení, elektrostatický výboj atd. mohou způsobit abnormální provoz vestavěného systému.

Strážní pes by měl být přesněji časovač watchdog, což je obvodová struktura speciálně používaná ke sledování běžícího stavu programu mikrokontroléru. Základní princip je: po spuštění watchdog časovače začne počítat od 0, pokud program nedokončí časový limit v daném časovém intervalu, watchdog časovač resetuje systém (ekvivalent restartu počítače), jak je znázorněno na obrázku níže (nakresleno ve Wordu, kresba je ještě větší otrava~):

Představme si jednoduchou metodu aplikace hlídacího psa: Jak pustit psa? Jak krmit? Co se stane, když ho nekrmíte?

2. Příběh hlídacího psa(1) Úvod do experimentu

Pokud je pes krmen, systém běží normálně; Pokud psa nekrmíte, systém se pořád restartuje.

(2) Programový diagram

(3) Experimentální zdrojový kód a analýza/*
    Popis experimentu: V experimentu se strážným psem, pokud pes není nakrmen, systém se stále restartuje.
*/

#include

#define vedl1 P1_0         
#define vedl2 P1_1         
#define vedení3 P1_2         
#define Led4 P1_3   

/*系统时钟初始化
-------------------------------------------------------*/
prázdnotaxtal_init(prázdnota)
{
  SPÁT &= ~0x04;            //都上电
  zatímco(! (SPÁT &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Vyberte krystalový oscilátor s frekvencí 32 MHz
  SPÁT |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
prázdnotaled_init(prázdnota)
{
  P1SEL =0x00;              P1 je běžný I/O port
  P1DIR |=0x0F;              P1.0 P1.1 P1.1 P1.2 P1.3 výstup
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

/*看门狗初始化
-------------------------------------------------------*/
prázdnotawatchdog_Init(prázdnota)   
{
  WDCTL =0x00;              //看门狗模式,时间间隔一秒
  WDCTL |=0x08;            //启动看门狗
}

/*喂狗程序
-------------------------------------------------------*/
prázdnotaFeetDog(prázdnota)   
{
  WDCTL =0xa0;
  WDCTL =0x50;
}

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
prázdnotaDelay(prázdnota)
{
  nepodepsáno intn;
  pro(n=50000; n>0; n--);
  pro(n=50000; n>0; n--);
  pro(n=50000; n>0; n--);
  pro(n=50000; n>0; n--);
  pro(n=50000; n>0; n--);
  pro(n=50000; n>0; n--);
  pro(n=50000; n>0; n--);
}

/*主函数
-------------------------------------------------------*/
prázdnotamain(prázdnota)
{
  xtal_init();  
  led_init();
  watchdog_Init();

  delay();
  led1 =0;         //点亮led1
  
  zatímco(1)
  {
    FeetDog();      Povel k krmení psem (systém se po připojení neresetuje a malé světlo nebliká; Pokud je anotován, systém se bude dál resetovat a malé světlo bude blikat každých 1 sekundu)
  }
}

Jak můžete vidět ze zdrojového kódu výše, metoda obsluhy Watch Dog je velmi jednoduchá a celý proces zahrnuje pouze nový SFR, konkrétněWDCTL。Následuje konkrétní popis CC2430 v čínském manuálu:

Použití hlídacích psů lze shrnout takto:Vyberte režim → nastavte časovač → umístěte psa → ho nakrmit

(1) Výběr režimu:

Watchdog časovač má dva režimy, a to "watchdog režim" a "timer".

V režimu časovače je ekvivalentní běžnému časovači a po dosažení intervalu časovače dojde k přerušení (najdete ho v souboru ioCC2430.h s vektorem přerušení WDT_VECTOR); V režimu watchdog, když je dosaženo plánovaného intervalu, nedochází k žádnému přerušení, místo toho je systému odeslán signál resetu.

V tomto experimentu to prošloWDCTL. MODE=0pro výběr režimu Gatekeeper.

  (2) Vyberte plánovaný interval:

Jak je ukázáno na obrázku výše, jsou zde čtyři hodinové periody na výběr a pro pohodlí volíme časový interval 1 s (tj. pořadí).WDCTL.INT=00)。

  (3) Pustit psa:

ŘádWDCTL.EN=1Spustit watchdog časovač.

  (4) Nakrmte psa:

Jakmile začne časovač, začne počítat od nuly. Než jeho počet dosáhne 32768 (tj. <1s), pokud psa nakrmíme následujícím kódem:

  WDCTL =0xa0;
  WDCTL =0x50;  

Poté se hodnota počítadla vymaže na 0 a začne znovu odpočítávat od 0x0000, což zabrání odeslání resetovacího signálu, který se projeví na vývojové desce: LED1 bude vždy zapnuté a nebude blikat;

Pokud psa nekrmíme (tj. tento kód nekomentujeme), pak když časovač dosáhne 32768, vydá se restartovací signál a program se spustí od začátku, což se projeví na vývojové desce: LED1 neustále bliká a interval blikání je 1s. (Poznámka: Program krmení psů musí být přísně v souladu s výše uvedeným kódem a objednávka je obrácená/špatná/napsána méně nebude hrát roli při vymazání 0.) )

Tipy na CC2430
Dvě další poznámky:
(1) VRežim hlídkového psaPokud byl watchdog časovač aktivován, nastavení 0 na WDCTL.EN je neplatné (tj. tento bit nemůže sloužit k zastavení časovače);
(2) VRežim časovače, můžete napsat 1 do WDCTL.CLR[0] pro vyčištění časovače; Zápis 0 do enable bitu WDCTL.EN zastaví časovač, zatímco zápis 1 do enable bitu restartuje časovač od 0x0000.


(4) Experimentální výsledky:

Pokud přidáte funkci FeedDog, spustíte kód a zjistíte, že LED1 je vždy zapnuté (systém se neresetuje);

Pokud si zapíšete funkci FeedDog, spusťte kód a zjistíte, že LED1 bliká v intervalech 1 s (systém se resetuje každých 1 s).

3. Závěr

Tato sekce popisuje princip a použití watchdog časovacích obvodů. V praktických aplikacích, pokud je vyžadována vysoká spolehlivost, lze v systému použít watchdog. Když systém z nějakého důvodu přestane fungovat (už psa nekrmí), pes, kterého nikdo nekrmí, štěká: "Mistře, je tu anomálie, je tu anomálie! ”

Pro bezdrátovou senzorovou síť je spotřeba energie za běhu klíčovým aspektem hodnocení výkonu. V následující části se budeme věnovat spánku systému CC2430 a jeho přerušenému probuzení.






Předchozí:Zigbee Journey (7): Několik důležitých základních experimentů CC2430 – přenos DMA
Další:Zigbee Journey (9): Několik důležitých základních experimentů CC2430 – systematický spánek a přerušovaná bdělost
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com