Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 9306|Válasz: 0

Zigbee Journey (8): Több fontos CC2430 alapkísérlet – őrkutyák

[Linket másol]
Közzétéve 2014. 10. 30. 23:23:37 | | | |
1. A felső és alsó szintek összekapcsolása

Bármilyen jó is legyen az operációs rendszer, legyen az a jelenlegi Win7, akár a jövőbeli Win8 és Win9, mindig lesz BlueScreen, nem beszélve egy kis mikrokontrollerről~ Kiszámíthatatlan okok, mint az elektromos zaj, áramszünet, elektrosztatikus kisülés stb., okozhatják a beépített rendszer rendellenes működését.

Pontosabban a Watch Dognak egy watchdog időzítőnek kell lennie, ami egy áramköri szerkezet, amelyet kifejezetten a mikrovezérlő program futási állapotának figyelésére használnak. Az alapelv az, hogy a watchdog időzítő elindítása után 0-ról számolni kezd, ha a program nem tisztítja meg időben a megadott időközön, a watchdog időzítő visszaállítja a rendszert (ami a számítógép újraindításának felel meg), ahogy az alábbi ábrán is látható (word-ben rajzolva, a rajz inkább eggache~):

Mutassunk be egy egyszerű őrkutya alkalmazási módszert: Hogyan engedjük el egy kutyát? Hogyan lehet etetni? Mi történik, ha nem eteted?

2. A felügyeleti kutya története(1) Bevezetés a kísérlethez

Ha a kutyát etetik, a rendszer normálisan működik; Ha nem eteted a kutyát, a rendszer újra és újra elindul.

(2) Programáram

(3) Kísérleti forráskód és elemzés/*
    Kísérlet leírása: A felügyeleti kísérletben, ha a kutyát nem etetik, a rendszer újra elindul.
*/

#include

#define lead1 P1_0         
#define led2 P1_1         
#define lead3 P1_2         
#define lead4 P1_3   

/*系统时钟初始化
-------------------------------------------------------*/
Semmixtal_init(Semmi)
{
  ALVÁS &= ~0x04;            //都上电
  miközben(! (ALVÁS &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Válassz egy 32 MHz-es kristályoscillátort
  ALVÁS |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
Semmiled_init(Semmi)
{
  P1SEL =0x00;              A P1 a normál I/O port
  P1DIR |=0x0F;              P1.0 P1.1 P1.2 P1.3 kimenet
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

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

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

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
SemmiKésés(Semmi)
{
  Aláírás nélkül intn;
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
  for(n=50000; n>0; n--);
}

/*主函数
-------------------------------------------------------*/
Semmimain(Semmi)
{
  xtal_init();  
  led_init();
  watchdog_Init();

  Delay();
  led1 =0;         //点亮led1
  
  miközben(1)
  {
    FeetDog();      Kutyaetetési parancs (a rendszer nem áll vissza csatlakozás után, és a kis lámpa sem villog; Ha annotálják, a rendszer tovább regenerálódik, és a kis lámpa minden 1 másodpercben villog)
  }
}

Ahogy a fenti forráskódból is látható, a Watch Dog működési módja nagyon egyszerű, és az egész folyamat csak egy új SFR-t foglal magában, nevezetesenWDCTL。Az alábbiakban a CC2430 konkrét leírása található a kínai kézikönyvben:

A watchdogs használata a következőképpen összefoglalható:Válaszd meg a módot → válaszd ki az időzítő intervallumot, → tedd a kutyát → etetni a kutyát

(1) Mód kiválasztása:

A watchdog időzítőnek két módja van: "watchdog mód" és "timer" mód.

Időzítő módban ez egyenértékű egy normál időzítővel, és amikor elérjük az időzítő intervallumát, megszakítást generál (megtalálhatod az ioCC2430.h fájlban, amelynek megszakítási vektora WDT_VECTOR); Figyelő módban, amikor egy ütemezett időköz ér el, nincs megszakítás, helyette egy reset jelet küldenek a rendszernek.

Ebben a kísérletben átmentWDCTL. MODE=0hogy kiválassza a kapuőr módot.

  (2) Válaszd ki az ütemezett intervallumot:

Ahogy a fenti ábrán látható, négy óraidőszak közül választhatunk, és a tesztelés érdekében az 1s időintervallumat (azaz sorrendet) választjuk.WDCTL.INT=00)。

  (3) Engedd el a kutyát:

RendWDCTL.EN=1hogy elindítsuk a watchdog időzítőt.

  (4) Etetni a kutyát:

Amint elindul az időzítő, elkezd 0-tól számolni. Mielőtt a száma elérné a 32768-at (azaz <1-eseket), ha a kutyát a következő kóddal etetjük:

  WDCTL =0xa0;
  WDCTL =0x50;  

Ezután az időzítő számlálási értéke 0-ra kerül, majd újra elkezd számolni 0x0000-ről, ami megakadályozza, hogy visszaállító jelet küldjön, ami megjelenik a fejlesztő táblán: a LED1 mindig be van kapcsolva, és nem villog;

Ha nem etetjük a kutyát (azaz nem kommenteljük ezt a kódot), akkor amikor az időzítő száma eléri a 32768-at, egy reset jel indul, és a program a nulláról indul, ami megjelenik a fejlesztő panelen: a LED1 folyamatosan villog, és a villogási intervallum 1s. (Megjegyzés: A kutyaetetési programnak szigorúan összhangban kell lennie a fenti kódextel, és a megfordított/rossz/írt sorrend kevesebb nem játszik szerepet a 0 törlésében.) )

CC2430 tippek
Két további megjegyzés:
(1) A következőkbenFigyelő kutya módHa a watchdog időzítő be van kapcsolva, a 0 beállítása WDCTL.EN-re érvénytelen (azaz ez a bit nem játszhat a megállító szerepében);
(2) A következőkbenIdőzítő mód, írhatsz 1-et a WDCTL.CLR[0] címre, hogy töröld az időzítőt; Ha 0-t írunk az engedélyező bitbe, a WDCTL.EN megállítja az időzítőt, míg az 1-et az engedélyezett bithez írva az időzítő újraindítja az időzítőt 0x0000-től.


(4) Kísérleti eredmények:

Ha hozzáadod a FeedDog funkciót, futtatod a kódot, és látod, hogy a LED1 mindig be van kapcsolva (a rendszer nem áll vissza);

Ha kiírod a FeedDog funkciót, futtatd a kódot, és látod, hogy a LED1 1s intervallidőben villog (a rendszer minden 1 másodpercenként visszaáll).

3. Következtetés

Ez a rész bemutatja a felügyeleti időzítő áramkörök elvét és használatát. Gyakorlati alkalmazásokban, ha nagy megbízhatóságra van szükség, a watchdog használható a rendszerben. Amikor valamiért a rendszer leáll (már nem tudja etetni a kutyát), az a kutya, akit senki sem etet, ugatni fog: "Mester, van egy anomália, van egy anomália! ”

Egy vezeték nélküli szenzorhálózat esetén a futási idejű energiafogyasztás kritikus tényező a teljesítményértékelésnek. A következő részben a CC2430 rendszer alvásáról és annak megszakított ébresztőhívásáról beszélünk.






Előző:Zigbee Journey (7): Több fontos CC2430 alap kísérlet – DMA átvitel
Következő:Zigbee Journey (9): Több fontos alapvető CC2430 kísérlet – rendszerszintű alvás és megszakított ébrenlét
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com