架构师_程序员_码农网

N Recuperare parolă
Înregistrare

QQ登录

Un singur pas pentru a începe

Căutare
架构师_程序员_码农网 "架构师 ' 管理专区&Management Area ' Reclamații și sugestii ' 回收站 ' 【转】Zigbee之旅(四):几个重要的CC2430基础实验- . - ...
Vizualizare:5109|Replică: 0
打印 上一主题 下一主题

[ Zigbee Journey (IV): Câteva experimente de bază importante CC2430 - întrerupere a cronometrului

[Copy link]
R 跳转到指定楼层
proprietarului clădirii
发表于 2014-10-30 23:17:29|只看该作者回帖奖励 | Răsfoire inversă|Mod de citire
I. Continuarea de la articolul anterior

  În secțiunea anterioară, am învățat împreună despre implementarea întreruperilor externe simple. După ce am dobândit experiență practică cu întreruperile, vom discuta despre întreruperile de temporizator în această secțiune. CC2430 are 4 temporizatoare, care pot fi împărțite în 3 categorii: Timer1, Timer2, Timer3/4 (utilizarea lui 3 și 4 este aceeași).

  Deoarece autorul este, de asemenea, doar atingând CC2430, proiectul care implică experiența temporizatorului este practic zero, așa că nu intenționez să (și nu pot ajuta) analiza aprofundată a temporizatorului. Acest articol numai pe timer 1 count overflow întrerupere utilizare pentru a face o explorare experimentală simplă, pentru funcția sa de captură de intrare / comparație de ieșire / PWM este omisă. Timer 2 și Timer 3/4 sunt, de asemenea, introduse doar pe scurt. Așteptând ca puterea autorului să atingă un anumit nivel de foc, și apoi să stea în înălțimea experienței de luptă Zigbee pentru a îmbunătăți acest eseu.

Timer 1

  Timer1 este un timer pe 16 biți cu funcții de temporizare / contor / modulare a lățimii impulsurilor. Acesta are trei canale de comparare a capturii / ieșirii de intrare programabile individual, fiecare dintre acestea putând fi utilizat ca ieșire PWM sau utilizat pentru a capta timpul de front al semnalului de intrare (pentru mai multe informații despre ce este compararea capturii / ieșirii de intrare și cum se implementează ieșirile PWM, cititorii pot consulta manualul chinez al CC2430 pe cont propriu).

  Temporizatorul are un concept foarte important: modul de funcționare.

  Modurile de funcționare includ: free-running, modulo și up-down.

  Următoarea este introducerea celor trei moduri din manualul chinezesc al CC2430:



  Comparând cele trei moduri, se poate observa că: valoarea de debordare a modului free-running este 0xFFFF, care nu poate fi modificată; în timp ce celelalte două moduri pot fi controlate cu precizie prin atribuirea unei valori la T1CC0 pentru a controla cu precizie valoarea de debordare a cronometrului. Acest experiment utilizează această caracteristică pentru a face ca cronometrul să declanșeze o întrerupere la fiecare 1 s prin T1CC0 specific, astfel încât să controleze cu precizie intervalul de clipire a LED-urilor de 1 s.

(1) Introducere în experiment

  În modul modulo al cronometrului, intervalul de clipire al LED-ului este controlat cu precizie pentru a fi de 1s, și anume: lumină 0,5s → întuneric 0,5s → lumină 0,5s → întuneric 0,5s ...... → lumină 0,5s → întuneric 0,5s (adică momentul de tranziție de la întuneric la lumină este de 1s). Inversarea luminii/întunericului este realizată prin întreruperea overflow.

(2) Diagrama de flux a programului

(3) Calcule conexe

  După cum s-a menționat anterior, starea LED-ului este: luminos 0,5s → întunecat 0,5s → luminos 0,5s → întunecat 0,5s ...... → luminos 0,5s → întunecat 0,5s, și trebuie să fie realizate cu întreruperea de debordare, astfel încât perioada de debordare a temporizatorului trebuie să fie de 0,5s. În acest scop, trebuie calculată valoarea de debordare corespunzătoare (setată temporar la N).

  Frecvența ceasului sistemului este selectată ca fiind de 32 MHz, iar frecvența ceasului furnizată timerului este implicit de 16 MHz (ambele sunt configurate prin registrul de funcții speciale CLKCON, care poate fi găsit în manualul chinez CC2430).

  Pentru temporizatorul 1, setați frecvența sa de ceas la 128 de diviziuni.

  Pentru a rezuma, formula poate fi după cum urmează:

2011022120560133.jpg
c

  Aflați N = 62500, hexazecimalul său este 0xF424, adică trebuie să setați T1CC0H = 0xF4, T1CC0L = 0x24 adică .








(
4) codul sursă experimental și analiza/* Descrierea experimentului: Experimentul Timer1, depășirea numărătorii timerului, LED1 clipește */ #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; /* inițializarea ceasului de sistem-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;&
nbsp; // ambele porniriwhile (!
(SLEEP & 0x40 )); //cristal oscilator pornit și stabil CLKCON &=~0x47; &







nbsp; //selectează oscilatorul cu cristal de 32MHz SLEEP |=0x04; }/*Inițializarea LED-urilor-------------------------------------------------------*/void led_init( void ) { &
nbsp; P1SEL = 0x00; //P1 este un port I/O normal P1DIR |=0x0F; &

nbsp; //P1.0 P1.1 P1.2 P1.3 ieșiri led1 =1; &






nbsp; //Opriți toate LED-urile led2 =1; led3 =1; led4 =1; }/*Inițializare Timer1---------------------------



- ---------------------------*/void timer1_init( void ) {EA=1; // activează întreruperea totală &
nbsp; T1IE=1; // activează întreruperea T1OVFIM=1; // activează depășirea T1



întrerupere T1CC0L=0x24; //valoare depășire 8 biți joasă T1CC0H=0xF4; //valoare depășire 8 biți înaltă &

nbsp; T1CTL =0x0e; //128 diviziuni; mod modulo (0x0000->T1CC0); începe să funcționeze;T1IF=0; &




nbsp; // clear interrupt flag }/* funcția principală-------------------------------------------------------*/void main( void





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





nbsp; //așteptați întreruperea pentru depășire }/*Subprogramul de serviciu terminal T1-------------------------------------------------------*/#pragma vector=T1_VECTOR __interrupt



v oid T1_ISR( void ) {EA=0; //off întrerupere led1 = !


led1; //LED-uri inversateEA=1; //On întrerupere &nbsp

; T1CTL &=~0x10; // șterge steagul de întrerupere }

  OK, compilați programul și depanarea online, placa de dezvoltare pe LED1 clipește așa cum era de așteptat, simțiți intervalul de clipire de aproximativ 1s. Dar acest lucru nu este suficient pentru a dovedi succesul experimentului, dacă puteți determina riguros intervalul de 1s ar fi perfect ~ așa că am deschis ceasul WIN 7 (faceți clic pe partea dreaptă a timpului bara de activități poate fi). În timp ce mă uitam la mâna a doua, m-am uitat cu coada ochiului la LED1 intermitent. Rezultatul este: în două minute, ritmul celor două sunt practic identice (această precizie poate fi tolerată ~). În acest moment, se poate spune că experimentul a fost practic finalizat, hehehe~

În al treilea rând, Timer 2

  Timer2, cunoscut și sub numele de timer MAC, este special conceput pentru a sprijini protocolul de urmărire a evenimentelor în IEEE 802.15.4 MAC. Timerul are un contor de depășire de 8 biți care poate fi utilizat pentru a înregistra numărul de cicluri care au avut loc; are un registru de captură de 16 biți care este utilizat pentru a înregistra momentul exact în care un delimitator de început de cadru este primit/transmis sau momentul exact în care o transmisie este finalizată; și conține, de asemenea, un registru de comparare a ieșirii de 16 biți care este utilizat pentru a genera diverse semnale de comunicare selective de comandă către modulul wireless la un moment dat (începe recepția, începe transmisia etc.).

Timer 3/4

  Temporizatorul 3/4 este un temporizator pe 8 biți cu funcții de temporizator/contor/PWM. t3/t4 are două canale de comparare a ieșirilor, fiecare dintre acestea putând fi utilizată ca ieșire PWM.

V. Concluzie

  În această secțiune, am învățat metoda de numărare a întreruperii overflow a temporizatorului 1 și am realizat controlul precis al intervalului de clipire a LED-ului de 1 s. Vom trece doar cu vederea celelalte temporizatoare, pentru a reveni mai târziu la adăugarea lor. În secțiunea următoare, vom prezenta despre comunicarea prin portul serial CC2430.






Anterior: [Re-]Zigbee Journey (III): Câteva experimente de bază importante CC2430 - întreruperi externe
Următorul: [Re-schimbat] Zigbee Journey (V): Câteva experimente de bază importante CC2430 - Comunicarea serială
Rețeaua Code farmer, publicată numai în procesul de practică, a întâmpinat dificultăți tehnice, nu induce în eroare pe alții.
Trebuie să vă conectați înainte de a putea posta înapoi Conectați-vă | Înregistrare

A ceastă versiune a regulilor integrale


DISCLAIMER: Toate software-ul, materialele de programare sau articolele publicate de Code Farmer sunt limitate pentru a fi utilizate numai în scopuri de învățare și cercetare; conținutul de mai sus nu trebuie să fie utilizat în scopuri comerciale sau ilegale, în caz contrar, toate consecințele vor fi suportate de utilizatorii înșiși. Informațiile de pe acest site provin din rețea, disputa privind drepturile de autor nu are nimic de-a face cu acest site. Trebuie să eliminați complet conținutul de mai sus din computerul dvs. în termen de 24 de ore de la descărcare. Dacă vă place programul, vă rugăm să sprijiniți software-ul autentic, să cumpărați înregistrarea și să obțineți servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail pentru a ne ocupa de ea.

E-mail To:help@itsvse.com

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

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

Răspuns rapidÎnapoi susÎnapoi la listă