架构师_程序员_码农网

U Pridobitev gesla
Registracija

QQ登录

Samo en korak za začetek

Iskanje
Pogled:5109|Odgovor: 0
打印 上一主题 下一主题

[Prevesti] Zigbee Journey (IV): Nekaj pomembnih osnovnih poskusov CC2430 - prekinitev časovnika

[Kopiraj povezavo]
D 跳转到指定楼层
lastnika stavbe
发表于 2014-10-30 23:17:29|只看该作者回帖奖励|Odvratnobrskanje|Način branja
I. Nadaljevanje prejšnjega članka

  V prejšnjem razdelku smo se skupaj seznanili z izvajanjem preprostih zunanjih prekinitev. Po praktičnih izkušnjah s prekinitvami bomo v tem razdelku obravnavali prekinitve časovnikov. CC2430 ima 4 časovnike, ki jih lahko razdelimo v 3 kategorije: Timer1, Timer2, Timer3/4 (uporaba 3 in 4 je enaka).

  Ker se tudi avtor šele dotika CC2430, so izkušnje s projektom, ki vključuje časovnik, v bistvu ničelne, zato ne nameravam (in ne morem pomagati) s poglobljeno analizo časovnika. Ta članek je namenjen le uporabi prekinitve časovnika 1 za preprosto eksperimentalno raziskovanje, saj je funkcija zajetja vhoda/primerjave izhoda/PWM izpuščena. Tudi časovnik 2 in časovnik 3/4 sta predstavljena le na kratko. Čakamo, da avtorjeva moč doseže določeno stopnjo ognja, nato pa se postavi v višino bojnih izkušenj Zigbee, da izboljša ta esej.

Časovnik 1

  Timer1 je 16-bitni časovnik s funkcijami časovnika/števalnika/moodulacije širine impulza. Ima tri posamično programirljive kanale za primerjavo vhodnega zajetja/izhoda, od katerih se lahko vsak uporabi kot izhod PWM ali pa se uporabi za zajem časa roba vhodnega signala (za več informacij o tem, kaj je vhodno zajetje/izhodna primerjava in kako izvajati izhode PWM, si lahko bralci sami ogledajo kitajski priročnik CC2430).

  Časomer ima zelo pomemben koncept: način delovanja.

  Načini delovanja vključujejo: prosti tek, modulo in navzgor-dol.

  V nadaljevanju so predstavljeni trije načini iz kitajskega priročnika CC2430:

2011022119590527.jpg



  Iz primerjave treh načinov je razvidno, da je: vrednost preliva v načinu prostega teka 0xFFFF, ki je ni mogoče spreminjati; medtem ko lahko druga dva načina natančno nadzorujemo z dodelitvijo vrednosti T1CC0, da natančno nadzorujemo vrednost preliva časovnika. V tem poskusu je ta funkcija uporabljena za to, da časovnik sproži prekinitev na vsakih 1s s pomočjo posebne vrednosti T1CC0, s čimer se natančno nadzoruje interval utripanja diode LED v trajanju 1s.

(1) Uvod v poskus

  V načinu modulo časovnika je interval utripanja LED natančno nadzorovan na 1s, tj.: svetlo 0,5s → temno 0,5s → svetlo 0,5s → temno 0,5s ...... → svetlo 0,5s → temno 0,5s (tj. trenutek prehoda iz temnega v svetlo je 1s). Prehod med svetlobo in temo se izvede s prekinitvijo zaradi prelivanja.

(2) Diagram poteka programa

(3) Povezani izračuni

  Kot smo že omenili, je stanje LED diode naslednje: svetlo 0,5 s → temno 0,5 s → svetlo 0,5 s → temno 0,5 s ...... → svetlo 0,5s → temno 0,5s, in ga je treba doseči s prekinitvijo prelivanja, zato mora biti doba prelivanja časovnika 0,5s. V ta namen je treba izračunati ustrezno vrednost prelivanja (začasno nastavljeno na N).

  Frekvenca sistemske ure je izbrana kot 32 MHz, frekvenca ure, ki je na voljo časovniku, pa je privzeto 16 MHz (oboje se konfigurira s posebnim funkcijskim registrom CLKCON, ki ga najdete v kitajskem priročniku CC2430).

  Za časovnik 1 nastavite njegovo urno frekvenco na 128 delitev.

  Če povzamemo, je formula naslednja:

2011022120560133.jpg
c

  Ugotovite, da je N = 62500, njegova šestnajstiška številka je 0xF424, to pomeni, da morate nastaviti T1CC0H = 0xF4, T1CC0L = 0x24 to je .








(
4) eksperimentalna izvorna koda in analiza/* Opis eksperimenta: eksperiment Timer1, prelivanje števila časovnika, utripanje LED1 */ #include #define led1 P1_0 # define led2 P1_1 #define led3 P1_0 #define led3 P1_1

1 #define led3 P1_2 #define led4 P1_3 &





n bsp; /* inicializacija sistemske ure-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;&
nbsp; // oba se vklopitawhile (!
(SLEEP & 0x40 )); //kristalni oscilator vklopljen in stabilen CLKCON &=~0x47; &







nbsp; //izberite 32MHz kristalni oscilator SLEEP |=0x04; }/*Inicializacija LED-------------------------------------------------------*/void led_init( void ) { &
nbsp; P1SEL = 0x00; //P1 je običajna vhodno-izhodna vrata P1DIR |=0x0F; &

nbsp; //P1.0 P1.1 P1.2 P1.3 izhodi led1 =1; &






nbsp; //Izklopite vse svetleče diode led2 =1; led3 =1; led4 =1; }/*Inicializacija T1---------------------------



- ---------------------------*/void timer1_init( void ) {EA=1; // vklopi skupno prekinitev &
nbsp; T1IE=1; // vklopi prekinitev T1OVFIM=1; // vklopi prelivanje T1



p rekinitevT1CC0L=0x24; //vrednost preliva nizka 8 bitov T1CC0H=0xF4; //vrednost preliva visoka 8 bitov &

nbsp; T1CTL =0x0e; //128 delitev; način modulo (0x0000->T1CC0); začetek delovanja;T1IF=0; &




nbsp; // počisti zastavico prekinitve }/* glavna funkcija-------------------------------------------------------*/void main( void





) { xtal_init(); led_init(); timer1_init();while ( 1); &





nbsp; //čakanje na prekinitev zaradi prelivanja }/* Podprogram za servisiranje terminala T1-------------------------------------------------------*/#pragma vector=T1_VECTOR__interrupt



v oid T1_ISR( void ) {EA=0; //izklop prekinitve led1 = !


led1; //Svetilke so obrnjeneEA=1; //Vključena prekinitev &nbsp

; T1CTL &=~0x10; // počisti zastavico prekinitve }

  V redu, sestavite program in spletno razhroščevanje, razvojna plošča na LED1 utripa v skladu s pričakovanji, čutite interval utripanja približno 1 s. Toda to ni dovolj za dokazovanje uspešnosti poskusa, če lahko strogo določite interval 1 s, bi bil popoln ~ zato sem odprl uro WIN 7 (kliknite na desni strani opravilne vrstice čas je lahko). Med opazovanjem sekundne ročice sem s kotičkom očesa pogledal utripajočo diodo LED1. Rezultat je naslednji: v dveh minutah sta tempa obeh kazalcev v bistvu enaka (to natančnost je mogoče tolerirati ~). Na tej točki lahko rečemo, da je poskus v bistvu končan, hehehe~

Tretjič, časovnik 2

  Časomer 2, znan tudi kot časovnik MAC, je posebej zasnovan za podporo protokola za sledenje dogodkom v protokolu IEEE 802.15.4 MAC. Časomer ima 8-bitni števec prelivanja, ki se lahko uporablja za beleženje števila opravljenih ciklov; ima 16-bitni zajemni register, ki se uporablja za beleženje točnega časa prejema/oddajanja razmejitve začetka okvirja ali točnega časa zaključka prenosa; vsebuje tudi 16-bitni izhodni primerjalni register, ki se uporablja za ustvarjanje različnih ukazno selektivnih komunikacijskih signalov za brezžični modul ob določenem času (začetek sprejemanja, začetek oddajanja itd.).

Časovnik 3/4

  Timer 3/4 je 8-bitni časovnik s funkcijami timer/counter/PWM. t3/t4 ima dva izhodna primerjalna kanala, od katerih se lahko vsak uporablja kot izhod PWM.

V. Zaključek

  V tem poglavju smo se naučili metode štetja prekinitve prelivanja časovnika 1 in dosegli natančen nadzor intervala utripanja LED 1 s. Ostale časovnike bomo samo bežno preleteli in se kasneje vrnili k njihovemu dodajanju. V naslednjem razdelku bomo predstavili komunikacijo prek serijskih vrat CC2430.






Prejšnja: [Ponovno]Zigbee potovanje (III): Nekaj pomembnih osnovnih poskusov s CC2430 - zunanje prekinitve
Naslednji: [Ponovno spremenjeno] Zigbee Journey (V): Nekaj pomembnih osnovnih poskusov CC2430 - serijska komunikacija
Mreža Code farmer, objavljena le v procesu prakse, naletela na tehnične težave, ne zavaja drugih.
Preden lahko objavite nazaj, se morate prijaviti Prijava | Registracija

T a različica integralnih pravil


IZJAVA: Vsa programska oprema, programsko gradivo ali članki, ki jih je objavil Code Farmer, so omejeni samo na uporabo v učne in raziskovalne namene; zgoraj navedene vsebine se ne smejo uporabljati v komercialne ali nezakonite namene, sicer vse posledice nosijo uporabniki sami. To spletno mesto informacije iz omrežja, spor o avtorskih pravicah nima nobene zveze s tem spletnim mestom. Zgornjo vsebino morate v celoti odstraniti iz računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljšo pristno storitev. Če pride do kakršne koli kršitve, se obrnite na nas po elektronski pošti, da jo obravnavamo.

Pošta To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-17 14:50

Hitri odgovoriNazaj na vrhNazaj na seznam