Lecția 5

Înainte de a începe studiul timerului, să definim conceptul de bază al "frecvenței". În limbajul simplu, acesta este numărul de repetări pe secundă. Acest lucru înseamnă că, dacă vă bateți mâinile de 2 ori într-o secundă, frecvența clapelor va fi de 2 Hz. Dacă de 3 ori înseamnă 3Hz.






Fiecare microcontroler funcționează la o anumită frecvență. Cele mai multe instrucțiuni sunt executate într-un singur ciclu de ceas, deci cu cât frecvența este mai mare, cu atât mai repede se execută microcontrolerul. Dacă nu există nici o sursă de ceas, atunci nimic nu va funcționa. În absența unei surse de ceas extern, majoritatea microcontrolerelor au propriul oscilator intern. De obicei este "configurat" din fabrică.

Frecvența sursei interne poate varia ("pluti") din cauza temperaturii etc. prin urmare, este considerat necorespunzător pentru proiecte serioase, iar pentru noi tocmai de aceea se folosește o sursă stabilă de frecvență externă - un rezonator cuarț (cuarț). Una dintre versiunile rezonatorului de cuart este:

Lecția 5

Acum ceva despre timer. Timerul funcționează la aceeași frecvență ca și microcontrolerul. Uneori poate fi prea rapid, deci folosiți un prescaler care reduce numărul de căpușe la 8/64/256/1024 ... ori. Se repornește programat.

Să presupunem că am ales prescaler 1024, microcontrolerul frecvență de 8 MHz, apoi, după rata prescaler timer va fi:
8 000 000/1024 = 7813 Hz este frecvența la care funcționează temporizatorul nostru. Cu cuvinte simple, pentru o secundă timerul bate de 7813 de ori.

Dar aici avem aceste două valori și ce urmează? Pentru a face acest lucru, există un lucru util ca o întrerupere prin coincidență. Aceasta înseamnă că dacă timerul și comparatorul se potrivesc, programul dvs. curent se va opri. După aceasta, va fi executată secțiunea de cod, care nu este absolut asociată cu programul principal. În interiorul acestei secțiuni puteți scrie tot ce vrei și să nu vă faceți griji cu privire la ceea ce este așa afectează aplicarea, efectuați-o numai atunci când valoarea temporizatorului se potrivește cu registrul de comparație.







După ce codul din întrerupere este executat, programul va continua să funcționeze din punctul în care a fost oprită. Astfel, puteți scana periodic butoanele, puteți număra durata apăsării butonului, măsurați intervalele de timp exacte. O întrebare preferată pentru începători, cum să fac un LED clipitor și să fac altceva. Deci, temporizatoarele și întreruperile vă vor ajuta în acest sens.

Acum suntem gata să scriem programul nostru. Prin urmare, vom crea un proiect folosind Project Wizard. Imediat atașăm ecranul LCD, știm deja cum).

Lecția 5

Accesați fila Timere și apoi opriți mai detaliat:

Lecția 5

Selectați frecvența 7813 și bifați caseta de validare Interrupt on: Compare A Match. Astfel, am indicat că, dacă valoarea este egală cu o întrerupere (ceea ce a fost scris mai sus). Vom întrerupe o dată pe secundă, adică trebuie să bifăm 7813 de ori, așa că traducem numărul 7813 într-un sistem hexazecimal și obținem 1e85. Aceasta este cea pe care o scriem în registrul de comparații Comp.A Comp A este un registru de 16 biți, deci nu putem înregistra un număr mai mare de 2 ^ 16 = 65536.

Generim, salvați, curățați codul nostru. Va apărea o nouă bucată de cod incomprehensibil

// Compararea temporizatorului 1 O rutină de serviciu de întrerupere
întrerupe [TIM1_COMPA] void timer1_compa_isr (void)

Aceasta este întreruperea. În aceste paranteze putem scrie codul pe care dorim să-l realizăm la anumite intervale. Avem o secundă. Deci, este logic să creăm o variabilă, pe care o vom crește 1 dată pe secundă, adică 1 timp per întrerupere. Prin urmare, inițializăm variabila int s = 0; iar în întrerupere o vom mări între 0 și 59. Valoarea variabilei este afișată pe afișajul LCD. Nu sunt trucuri, este foarte simplu.
Codul rezultat.

Luați ca bază nu 7,813 kHz și 8 MHz. În general, mereu mă înșel. Apreciez frecvența maximă. Îi căutăm perioada. 1/8000 000 = 0.000000125 sec. Aceasta este durata unui singur bifat. Vedeți cât de mult în secțiunea dreaptă a acestor căpușe 10μs = 0.00001 sec, 0.00001 / 0.000000125 = 80 căpușe la frecvența maximă de 10 μs. Acest lucru este normal pentru registrul de comparație. Dacă au fost mai mult de 255 sau 65535 (în funcție de cronometru), ați putea urmări deja următorul prescaler.

salut, cum pot obține întârziere de timp în secunde-delay_s (10), de exemplu. Jură la compilație și este necesar să folosim ms, noi ....







Articole similare

Trimiteți-le prietenilor: