Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 7780|Odgovoriti: 0

Zigbee Journey (4): Več pomembnih osnovnih eksperimentov CC2430 - prekinitev časovnika

[Kopiraj povezavo]
Objavljeno na 30. 10. 2014 23:17:29 | | | |
1. Povezava zgornje in spodnje ravni

V prejšnjem članku smo skupaj spoznali implementacijo preprostih zunanjih prekinitev. Zdaj, ko imamo praktične izkušnje s prekinitvami, se pogovorimo o prekinitvah s časovnikom v tem razdelku. CC2430 ima skupaj 4 časovnike, ki jih lahko razdelimo v 3 kategorije: časovnik 1, časovnik 2, časovnik 3/4 (uporaba 3 in 4 je enaka).

Ker je avtor prav tako nov v CC2430 in nima praktično nobenih praktičnih izkušenj s projekti, ki vključujejo časovnike, ne nameravam (in ne morem ničesar storiti) podrobno analizirati časovnika. Ta članek ponuja le kratko eksperimentalno raziskavo uporabe časovnika 1 pri prekinitvah prelivanja števila in ne omenja funkcij zajemanja vhodov/primerjave izhodov/PWM. Timer 2 in Timer 3/4 sta le preprosta uvoda v funkcije. Ko avtorjeve spretnosti dosežejo določeno stopnjo napetosti, bom stal na vrhuncu Zigbeejevih praktičnih izkušenj, da izboljšam ta esej.

2. Časovnik 1

Timer 1 je 16-bitni časovnik z modulacijo širine časovnika/števca/pulzov. Ima 3 individualno programabilne kanale za zajemanje/primerjavo vhodnih izhodov, od katerih je vsak lahko uporabljen kot PWM izhod ali kot edge time za zajem vhodnega signala (za informacije o tem, kaj je primerjava zajema vhoda in izhoda ter kako izvesti PWM izhod, lahko bralci pogledajo kitajski priročnik CC2430).

Časovniki imajo zelo pomemben koncept:Način delovanja

Načini delovanja vključujejo: Prosti način delovanja (Prosto tekajoče), način kalupa (modulo) in način pozitivnega štetja/odštevanja (gor-dol)。

Spodaj je odlomek iz kitajskega priročnika CC2430 za uvedbo treh načinov:



Ob primerjavi treh načinov je razvidno, da je presežna vrednost prostega načina delovanja 0xFFFF nespremenljiva; Druga dva načina omogočata natančen nadzor vrednosti presežka časovnika z dodeljevanjem vrednosti T1CC0. Ta eksperiment uporablja to funkcijo za sprožitev prekinitve vsakih 1s s časovnikom skozi določen T1CC0, da natančno nadzoruje interval utripanja LED lučke na 1s.

(1) Uvod v eksperiment

V modulo načinu časovnika je interval utripanja LED luči natančno nadzorovan z 1s, in sicer: svetlo 0,5s → temnih 0,5s → svetlo 0,5s → zatemnjeno 0,5s ...... → Svetlo 0,5 sekunde → temno 0,5 sekunde (tj. časovni interval od teme do svetle je 1 sekunda). Inverzija svetlobe/teme se doseže z prelivanjem prekinitev.

(2) Shema poteka programa

(3) Relevantni izračuni

Kot je bilo že omenjeno, je stanje LED luči: močnih 0,5 s → temnih 0,5 s → svetlih 0,5 s → zatemnjenih 0,5 s ...... → 0,5 sekunde svetlobe → 0,5 sekunde teme, in to je treba implementirati z prelivnimi prekinitvami, zato mora biti obdobje prelivanja časovnika 0,5 sekunde. Za to je treba izračunati ustrezno vrednost presežka (začasno nastavljeno na N).

Sistemska frekvenca ure je izbrana kot 32MHz, podana frekvenca pa je privzeto 16MHz (obe uri določajo posebni funkcijski registri).CLKCONZa podrobnosti si oglejte kitajski priročnik CC2430).

Za Timer 1 nastavite prehod ure na 128 divizij.

Za povzetek, seznam je naslednji:

Za iskanje N=62500 je njegova šestnajstiška številka 0xF424, torej morate nastaviti T1CC0H=0xF4, T1CC0L=0x24 .

(4) Eksperimentalna izvorna koda in analiza/*
    Opis eksperimenta: eksperiment Timer Timer1, prelivanje števca časovnika, utripanje LED1
*/

#include

#define vodil1 P1_0         
#define vod2 P1_1         
#define Led3 P1_2         
#define vodil 4 P1_3         

/*系统时钟初始化
-------------------------------------------------------*/
prazninaxtal_init(praznina)
{
  SPANJE &= ~0x04;            //都上电
  medtem ko(! (SPANJE &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Izberite 32MHz kristalni oscilator
  SPANJE |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
prazninaled_init(praznina)
{
  P1SEL =0x00;            P1 je običajen vhodno-izhodni priključek
  P1DIR |=0x0F;            izhod P1.0 P1.1 P1.2 P1.3
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

/*T1初始化
-------------------------------------------------------*/
prazninatimer1_init(praznina)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM=1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 crossover; modulo način (0x0000->T1CC0); Začni teči;
  T1IF=0;           Odstranite znak za prekinitev  
}

/*主函数
-------------------------------------------------------*/
prazninamain(praznina)
{
  xtal_init();
  led_init();
  timer1_init();

  medtem ko(1);            //等待溢出中断
}

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

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

V redu, prevedi program in razhrošči na spletu, LED1 na razvojni plošči utripa po načrtu in zdi se, da je interval utripanja približno 1 sekunde. A to ni dovolj, da bi dokazal uspeh eksperimenta, če je interval strogo določen kot 1s, bo popoln~ Zato sem vklopil uro WIN 7 (kliknite na čas na desni strani opravilno vrstice). Medtem ko je gledal sekundno kazalec, je iz kota očesa opazil utripanje LED1. Rezultat: v dveh minutah je tempo obeh v bistvu enak (ta natančnost je sprejemljiva~). Na tej točki lahko rečemo, da je eksperiment praktično zaključen, hehe~

3. Časovnik 2

Timer 2 se imenuje tudiMAC časovnik, je posebej zasnovan za podporo protokolu sledenja dogodkom v IEEE 802.15.4 MAC. Časovnik ima 8-mestni števec preliva, ki se lahko uporabi za beleženje števila ciklov, ki so se zgodili; Obstaja 16-bitni zajemni register, ki beleži natančen čas, ko okvir začne prejemati/pošiljati, ali točen čas, ko je prenos zaključen. Vsebuje tudi 16-bitni register za primerjavo izhodov, ki generira različne signale za določanje ukazov (začetek sprejemanja, začetek pošiljanja itd.) brezžičnemu modulu ob določenem času.

4. Timer 3/4

Timer 3/4 je 8-bitni časovnik s funkcijo časovnika/števca/PWM. T3/T4 imata 2 kanala za primerjavo izhodov, vsak pa se lahko uporablja kot izhod PWM.

5. Zaključek

Ta del se predvsem uči metode prekinitve štetja pri časovniku 1 in natančno nadzoruje interval utripanja LED luči 1. Le še nekaj drugih časovnikov je le kap, in jih bom kasneje dodal. V naslednjem razdelku bomo predstavili komunikacijo s serijskim priključkom CC2430.






Prejšnji:Zigbee Journey (3): Več pomembnih osnovnih eksperimentov CC2430 - zunanja motnja
Naslednji:Zigbee Journey (5): Več pomembnih osnovnih eksperimentov CC2430 – serijska komunikacija
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com