See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 7780|Vastuse: 0

Zigbee teekond (4): Mõned olulised CC2430 põhikatsed – taimeri katkestus

[Kopeeri link]
Postitatud 30.10.2014 23:17:29 | | | |
1. Ülemiste ja alumiste korruste ühendamine

Eelmises artiklis õppisime koos lihtsate väliste katkestuste rakendamisest. Nüüd, kui meil on praktiline kogemus katkestustega, räägime selles osas taimeri katkestustest. CC2430-l on kokku 4 taimerit, mida saab jagada 3 kategooriasse: taimer 1, taimer 2, taimer 3/4 (3 ja 4 kasutus on sama).

Kuna autor on samuti CC2430-ga uus ja tal puudub praktiliselt igasugune praktiline kogemus taimeritega seotud projektides, ei kavatse ma (ega saa midagi teha) taimerit põhjalikult analüüsida. See artikkel annab vaid lühikese eksperimentaalse ülevaate taimeri 1 kasutamisest ülevoolukatkestuste loendamisel ega maini selle sisendi püüdmise/väljundi võrdluse/PWM funktsioone. Taimer 2 ja taimer 3/4 on vaid lihtsad funktsioonide tutvustused. Kui autori oskused jõuavad teatud tasemele, seisan Zigbee praktilise kogemuse tipus, et seda esseed täiustada.

2. Taimer 1

Taimer 1 on 16-bitine taimer, millel on taimeri/loenduri/impulsi laiuse modulatsioon. Sellel on 3 eraldi programmeeritavat sisendi püüdmise/väljundi võrdluskanalit, millest igaüht saab kasutada PWM-väljundina või servaajana sisendsignaali püüdmiseks (info selle kohta, mis on sisendi püüdmise/väljundi võrdlus ja kuidas PWM-väljundi rakendada, võivad lugejad vaadata CC2430 hiina käsiraamatut).

Taimeritel on väga oluline kontseptsioon:Töörežiim

Töörežiimid hõlmavad: vaba töörežiimi (vabajooks), vormirežiim (modulo) ja positiivne loendus/loendusrežiim (Üles-alla)。

Järgnevalt on väljavõte CC2430 Hiina käsiraamatust kolme režiimi tutvustamiseks:



Võrreldes kolme režiimi, on näha, et vaba töörežiimi ülevoolu väärtus on 0xFFFF muutumatu; Teised kaks režiimi võimaldavad taimeri ülevoolu täpset kontrolli, määrates väärtuse T1CC0-le. See katse kasutab seda funktsiooni, et käivitada iga 1 sekundi järel katkestus taimeri poolt kindla T1CC0 kaudu, et täpselt juhtida LED-tule vilkumisintervalli kuni 1 sekundini.

(1) Sissejuhatus eksperimendile

Taimeri modulo-režiimis juhitakse LED-valguse vilkumisintervalli täpselt 1-dega, nimelt: hele 0,5s → tume 0,5s → hele 0,5s → hämar 0,5s ...... → Heledad 0,5s → Dark 0,5s (st ajavahemik pimedusest heledasse on 1s). Valguse/pimeduse inversioon saavutatakse ülevoolavate katkestustega.

(2) Programmi vooskeem

(3) Asjakohased arvutused

Nagu varem mainitud, on LED-tule staatus: hele 0,5s → tume 0,5s → hele 0,5s → tuhm 0,5s ...... → 0,5 sekundit valgust → 0,5 sekundit pimedat ning see tuleb rakendada ülevoolu katkestustega, seega peab taimeri ületäitumise periood olema 0,5 sekundit. Selleks tuleb arvutada vastav ülevoolu väärtus (ajutiselt seatud N-iks).

Süsteemi taktsagedus on valitud 32MHz ning antud taktsagedus on vaikimisi 16MHz (mõlemad määratakse erifunktsioonide registrite abil).CLKCONLisateabe saamiseks vaadake palun CC2430 hiina keele käsiraamatut.

Timer 1 puhul sea kella ristlõige 128 divisjoni peale.

Kokkuvõtteks on nimekiri järgmine:

Et leida N=62500, on selle heksadekomaline 0xF424, st tuleb määrata T1CC0H=0xF4, T1CC0L=0x24 .

(4) Eksperimentaalne lähtekood ja analüüs/*
    Eksperimendi kirjeldus: Taimer Timer1 eksperiment, taimerite arvu ületäitmine, LED1 vilkumine
*/

#include

#define juhtis1 P1_0         
#define juhtis2 P1_1         
#define juhtis3 P1_2         
#define juhtis4 P1_3         

/*系统时钟初始化
-------------------------------------------------------*/
tühixtal_init(tühi)
{
  UNI &= ~0x04;            //都上电
  samal ajal(! (UNI &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Vali 32MHz kristall-ostsillaator
  UNI |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
tühiled_init(tühi)
{
  P1SEL =0x00;            P1 on tavaline I/O port
  P1DIR |=0x0F;            P1.0 P1.1 P1.2 P1.3 väljund
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

/*T1初始化
-------------------------------------------------------*/
tühitimer1_init(tühi)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM=1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 crossover; modulo režiim (0x0000->T1CC0); Alusta jooksmist;
  T1IF=0;           Puhasta katkestusmärk  
}

/*主函数
-------------------------------------------------------*/
tühipea(tühi)
{
  xtal_init();
  led_init();
  timer1_init();

  samal ajal(1);            //等待溢出中断
}

/*T1终端服务子程序
-------------------------------------------------------*/
#pragma vektor=T1_VECTOR
__interrupttühiT1_ISR(tühi)
{
  EA=0;               //关中断
  
  led1 = !led1;      //LED灯反转

  EA=1;               //开中断
  
  T1CTL &= ~0x10;     //清中断标志
}

Olgu, kompileeri programm ja silu online, arendusplaadil vilgub LED1 vastavalt plaanile ja tundub, et vilkumisintervall on umbes 1 sekundit. Aga sellest ei piisa eksperimendi edu tõestamiseks, kui intervalli saab rangelt määrata 1s-ks, on see täiuslik~ Nii lülitasin WIN 7 kella sisse (klõpsa tegumiriba paremal küljel oleval ajal). Vaadates sekundiseiuti, nägi ta silmanurgast LED1 vilkumist. Tulemus: kahe minuti jooksul on nende tempo põhimõtteliselt täpselt sama (see täpsus on talutav~). Sel hetkel võib eksperimenti põhimõtteliselt lõpetada, hehe~

3. Taimer 2

Taimer 2 nimetatakse kaMAC-taimer, on spetsiaalselt loodud toetama sündmuste jälgimise protokolli IEEE 802.15.4 MAC-is. Taimeril on 8-kohaline ülevooluloendur, millega saab registreerida toimunud tsüklite arvu; On olemas 16-bitine salvestusregister, mis salvestab täpse aja, millal raam hakkab vastu võtma/saatma või millal edastuse lõpetatakse. See sisaldab ka 16-bitist väljundi võrdlusregistrit, mis genereerib traadita moodulile kindlal ajal erinevaid käskude värava signaale (alusta vastuvõttu, alusta saatmist jne).

4. Taimer 3/4

Taimer 3/4 on 8-bitine taimer, millel on taimer/loendur/PWM funktsioon. T3/T4-l on 2 väljundi võrdluskanalit, millest igaüht saab kasutada PWM-väljundina.

5. Kokkuvõte

See osa õpib peamiselt taimeri 1 loenduse ülevoolu katkestamise meetodit ning rakendab LED-tule vilkumisintervalli täpset juhtimist 1 sekundiga. Mõned teised taimerid on vaid tõmbe, ja ma tulen hiljem tagasi, et need juurde lisada. Järgmises osas tutvustame CC2430 jadapordi kommunikatsiooni.






Eelmine:Zigbee teekond (3): Mitmed olulised CC2430 põhieksperimendid – väline katkestus
Järgmine:Zigbee teekond (5): Mitmed olulised CC2430 põhieksperimendid – järjestikune side
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com