Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 9306|Răspunde: 0

Zigbee Journey (8): Câteva experimente importante de bază CC2430 - watchdogs

[Copiază linkul]
Postat pe 30.10.2014 23:23:37 | | | |
1. Conectarea nivelurilor superioare și inferioare

Indiferent cât de bun este sistemul de operare, fie că este actualul Win7 sau viitorul Win8 și Win9, va exista întotdeauna un BlueScreen, ca să nu mai vorbim de un microcontroler mic~ Motive imprevizibile precum zgomotul electric, întreruperea curentului, descărcări electrostatice etc., pot cauza funcționarea anormală a sistemului încorporat.

Watch Dog-ul, mai exact, ar trebui să fie un cronometru watchdog, care este o structură de circuit folosită special pentru a monitoriza starea de funcționare a programului microcontroler. Principiul de bază este: după pornirea cronometrului watchdog, acesta va începe să numere de la 0, dacă programul nu îl șterge la timp în intervalul de timp specificat, timerul watchdog va reseta sistemul (echivalent cu repornirea calculatorului), așa cum se arată în figura de mai jos (desenată în Word, desenul este mai degrabă "eggan"):

Să introducem o metodă simplă de aplicare a câinilor de pază: Cum să lași un câine să plece? Cum să hrănesc? Ce se va întâmpla dacă nu o hrănești?

2. Povestea câinelui de pază(1) Introducere în experiment

Dacă câinele este hrănit, sistemul funcționează normal; Dacă nu hrănești câinele, sistemul continuă să pornească de la capăt.

(2) Diagramă de flux a programului

(3) Cod sursă experimental și analiză/*
    Descrierea experimentului: În experimentul de supraveghere, dacă câinele nu este hrănit, sistemul continuă să se repornească.
*/

#include

#define condus P1_0         
#define led2 P1_1         
#define led3 P1_2         
#define led4 P1_3   

/*系统时钟初始化
-------------------------------------------------------*/
Voidxtal_init(Void)
{
  SOMN &= ~0x04;            //都上电
  în timp ce(! (SOMN &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Alege un oscilator cu cristal de 32MHz
  SLEEP |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
Voidled_init(Void)
{
  P1SEL =0x00;              P1 este portul normal de I/O
  P1DIR |=0x0F;              Ieșire P1.0 P1.1 P1.2 P1.3
  
  a condus1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

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

/*喂狗程序
-------------------------------------------------------*/
VoidFeetDog(Void)   
{
  WDCTL =0xa0;
  WDCTL =0x50;
}

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
VoidÎntârziere(Void)
{
  nesemnat intn;
  pentru(n=50000; n>0; n--);
  pentru(n=50000; n>0; n--);
  pentru(n=50000; n>0; n--);
  pentru(n=50000; n>0; n--);
  pentru(n=50000; n>0; n--);
  pentru(n=50000; n>0; n--);
  pentru(n=50000; n>0; n--);
}

/*主函数
-------------------------------------------------------*/
Voidmain(Void)
{
  xtal_init();  
  led_init();
  watchdog_Init();

  Întârziere();
  a condus1 =0;         //点亮led1
  
  în timp ce(1)
  {
    FeetDog();      Comanda de hrănire a câinilor (sistemul nu se resetează după conectare, iar lumina mică nu clipește; Dacă este adnotată, sistemul va continua să se reseteze, iar lumina mică va clipi la fiecare 1 secundă)
  }
}

După cum puteți vedea din codul sursă de mai sus, metoda de operare a Watch Dog este foarte simplă, iar întregul proces implică doar un nou SFR, și anumeWDCTL。Următoarea este o descriere specifică a CC2430 în manualul chinezesc:

Utilizarea watchdog-urilor poate fi rezumată astfel:Selectează modul → selectează intervalul temporizator → pune câinele → hrănește câinele

(1) Mod de selectare:

Cronometrul watchdog are două moduri, și anume "modul watchdog" și modul "timer".

În modul timer, este echivalent cu un timer normal, iar când intervalul timer este atins, va produce o întrerupere (o poți găsi în fișierul ioCC2430.h cu un vector de întrerupere WDT_VECTOR); În modul watchdog, când se atinge un interval programat, nu există nicio întrerupere, ci un semnal de resetare este trimis către sistem.

În acest experiment, a trecutWDCTL. MODE=0pentru a selecta modul gatekeeper.

  (2) Selectează intervalul programat:

Așa cum se arată în figura de mai sus, există patru perioade de ceas din care se poate alege, iar pentru comoditatea testării, alegem intervalul de timp de 1s (adică ordinea).WDCTL.INT=00)。

  (3) Eliberează câinele:

OrdineaWDCTL.EN=1pentru a porni cronometrul de supraveghere.

  (4) Hrănește câinele:

Odată ce cronometrul începe, începe să numere de la zero. Înainte ca numărul său să ajungă la 32768 (adică <1), dacă hrănim câinele cu următorul cod:

  WDCTL =0xa0;
  WDCTL =0x50;  

Apoi, valoarea de numărare a temporizatorului va fi ștearsă la 0, iar apoi va începe din nou să numere din 0x0000, ceea ce împiedică trimiterea unui semnal de resetare, care se manifestă pe placa de dezvoltare: LED1 va fi mereu aprins și nu va clipi;

Dacă nu hrănim câinele (adică nu comentăm acest cod), atunci când numărul de timere ajunge la 32768, va fi emis un semnal de resetare, iar programul va rula de la zero, ceea ce se manifestă pe placa de dezvoltare: LED1 clipește constant, iar intervalul de clipire este 1s. (Notă: Programul de hrănire a câinilor trebuie să fie strict consecvent cu codul de mai sus, iar ordinea inversată/greșită/scrisă mai puțin nu va juca un rol în eliminarea 0.) )

Sfaturi CC2430
Două note suplimentare:
(1) ÎnModul câine de vegheDacă timerul watchdog a fost activat, setarea 0 la WDCTL.EN este invalidă (adică acest bit nu poate juca rolul de oprire a temporizadorului);
(2) ÎnModul cronometrează, poți scrie 1 la WDCTL.CLR[0] pentru a elibera cronometrul; Scrierea 0 pe bitul de activare WDCTL.EN va opri cronometrul, în timp ce scrierea a 1 pe bitul de activare va reporni cronometrul de 0x0000 înainte.


(4) Rezultate experimentale:

Dacă adaugi funcția FeedDog, rulezi codul și descoperi că LED1 este mereu pornit (sistemul nu se resetează);

Dacă comentezi funcția FeedDog, rulează codul și vezi că LED1 clipește la intervale de 1 secundă (sistemul se resetează la fiecare 1 secundă).

3. Concluzie

Această secțiune descrie principiul și utilizarea circuitelor de cronometrare de supraveghere. În aplicații practice, dacă este necesară o fiabilitate ridicată, watchdog-ul poate fi folosit în sistem. Când sistemul se oprește dintr-un motiv sau altul (nu mai poate hrăni câinele), câinele pe care nimeni nu-l hrănește va lătra: "Stăpâne, există o anomalie, există o anomalie! ”

Pentru o rețea de senzori wireless, consumul său de energie la timp de funcționare este un aspect critic al evaluării performanței. În secțiunea următoare, vom discuta despre somnul sistemului CC2430 și alarma sa de trezire întreruptă.






Precedent:Zigbee Journey (7): Mai multe experimente importante de bază CC2430 - transmisia DMA
Următor:Călătoria Zigbee (9): Câteva experimente importante de bază CC2430 - somnul sistematic și starea de veghe întreruptă
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com