- Configurare și cerințe hardware
- Diagrama circuitului pentru interfața cu LED-uri cu Nuvoton N76E003
- Pinii temporizatorului pe Nuvoton N76E003
- Înregistrări temporizatoare în Nuvoton N76E003
- Tipuri de timp în Nuvoton N76E003
- Programarea microcontrolerului Nuvoton N76E003 pentru temporizatoare
- Cod intermitent și verificarea ieșirii pentru funcționalitatea temporizatorului
În tutorialele noastre anterioare Nuvoton Microcontroller, am folosit un program de bază intermitent cu LED-uri ca ghid de pornire și, de asemenea, am interfațat GPIO ca intrare pentru a conecta un comutator tactil. Cu ajutorul acestui tutorial, suntem pe deplin conștienți de modul de configurare a proiectului Keil și de configurare a mediului pentru programarea microcontrolerului N76E003 Nuvoton. Este timpul să utilizați un periferic intern al unității de microcontroler și să vă deplasați puțin mai departe folosind cronometrul încorporat al N76E003.
În tutorialul nostru anterior, am folosit doar o întârziere de software pentru a clipi un LED, așa că în acest tutorial vom învăța cum să folosim funcția Timer delay, precum și Timer ISR (Interrupt Service Routine) și să clipim două LED-uri individuale. Puteți consulta, de asemenea, tutorialul Arduino Timer și PIC Timer pentru a verifica modul de utilizare a temporizatoarelor cu alte microcontrolere. Fără a pierde mult timp, să evaluăm ce fel de configurare hardware avem nevoie.
Configurare și cerințe hardware
Deoarece cerința acestui proiect este de a învăța Timer ISR și funcția de întârziere a temporizatorului, vom folosi două LED-uri, dintre care unul va clipi folosind temporizatorul în bucla while și altul va clipi în interiorul funcției ISR.
Deoarece un LED este disponibil în placa de dezvoltare N76E003, acest proiect necesită un LED suplimentar și rezistorul de limitare a curentului pentru a limita curentul LED. Componentele de care avem nevoie -
- Orice culoare a LED-ului
- Rezistor 100R
Ca să nu mai vorbim, în afară de componentele de mai sus, avem nevoie de placa de dezvoltare bazată pe microcontroler N76E003, precum și de programatorul Nu-Link. În plus, sunt necesare și fire de conectare și conectare pentru toate componentele.
Diagrama circuitului pentru interfața cu LED-uri cu Nuvoton N76E003
După cum putem vedea în schema de mai jos, LED-ul de testare este disponibil în interiorul plăcii de dezvoltare și este conectat la portul 1.4. Un LED suplimentar este conectat la portul 1.5. Rezistorul R3 este utilizat pentru a limita curentul LED. În extrema stângă, este afișată conexiunea interfeței de programare.
Pinii temporizatorului pe Nuvoton N76E003
Diagrama PIN N76E003 poate fi văzut în continuare image-
După cum putem vedea, fiecare pin are specificații diferite și fiecare pin poate fi utilizat în mai multe scopuri. Cu toate acestea, pinul 1.5, care este utilizat ca pin de ieșire cu LED, va pierde PWM și alte funcționalități. Dar aceasta nu este o problemă, deoarece nu este necesară o altă funcționalitate pentru acest proiect.
Motivul pentru alegerea pinului 1.5 ca ieșire și pinul 1.6 ca intrare este din cauza celei mai apropiate disponibilități a pinilor GND și VDD pentru o conexiune ușoară. Cu toate acestea, în acest microcontroler din 20 de pini, 18 pini pot fi folosiți ca pini GPIO și orice alți pini GPIO pot fi folosiți în scopuri legate de ieșire și intrare, cu excepția pinului 2.0 care este dedicat pentru intrarea Reset și nu poate fi folosit ca ieșire. Toți pinii GPIO pot fi configurați în modul descris mai jos.
Conform fișei tehnice, PxM1.n și PxM2.n sunt două registre care sunt utilizate pentru a determina operațiunea de control a portului I / O. Întrucât folosim LED-uri și avem nevoie de pin ca pin de ieșire general, vom folosi modul quasi-bidirecțional pentru pin.
Înregistrări temporizatoare în Nuvoton N76E003
Cronometrul este un lucru important pentru orice unitate de microcontroler. Microcontrolerul vine cu un periferic de timer încorporat. Nuvoton N76E003 vine, de asemenea, cu periferice cu timer pe 16 biți. Cu toate acestea, fiecare temporizator este utilizat în scopuri diferite și, înainte de a utiliza orice interfață de temporizare, este important să știți despre temporizator.
Tipuri de timp în Nuvoton N76E003
Temporizatorul 0 și 1:
Aceste două temporizatoare timer0 și timer1 sunt identice cu 8051 temporizatoare. Aceste două temporizatoare pot fi utilizate ca temporizator general sau ca contoare. Aceste două temporizatoare funcționează în patru moduri. În modul 0, acele temporizatoare vor funcționa în modul Timer / Contor de 13 biți. În modul 1, bitul de rezoluție al celor două temporizatoare va fi de 16 biți. În modul 2, temporizatoarele sunt configurate ca un mod de reîncărcare automată cu o rezoluție de 8 biți. În modul 3, temporizatorul 1 este oprit și temporizatorul 0 poate fi folosit ca contor și temporizator în același timp.
Dintre aceste patru moduri, modul 1 este utilizat în majoritatea cazurilor. Aceste două temporizatoare pot utiliza Fsys (Frecvența sistemului) în modul fix sau prescalat (Fys / 12). De asemenea, poate fi tactat de la o sursă de ceas externă.
Temporizator 2:
Timer 2 este, de asemenea, un temporizator pe 16 biți, utilizat în principal pentru captarea formelor de undă. De asemenea, folosește ceasul sistemului și poate fi utilizat în diferite aplicații prin împărțirea frecvenței ceasului folosind 8 scale diferite. Poate fi folosit și în modul de comparare sau pentru a genera PWM.
La fel ca Timer 0 și Timer 1, Timer 2 poate fi utilizat în modul de reîncărcare automată.
Temporizator 3:
Timerul 3 este, de asemenea, utilizat ca temporizator pe 16 biți și este utilizat pentru sursa de ceas a ratei de transmisie pentru UART. De asemenea, are o funcție de reîncărcare automată. Este important să utilizați acest cronometru numai pentru comunicarea în serie (UART) dacă aplicația necesită comunicare UART. Este recomandabil să nu utilizați acest temporizator în alte scopuri într-un astfel de caz, din cauza procesului conflictual din configurarea temporizatorului.
Temporizator de supraveghere:
Watchdog Timer poate fi folosit ca temporizator standard pe 6 biți, dar nu este utilizat în acest scop. Utilizarea temporizatorului Watchdog ca temporizator general este aplicabilă pentru aplicațiile cu consum redus de energie, în care microcontrolerul rămâne în cea mai mare parte în modul inactiv.
Watchdog Timer, așa cum sugerează și numele, verifică întotdeauna dacă microcontrolerul funcționează corect sau nu. În cazul unui microcontroler atârnat sau oprit, WDT (Watchdog Timer) resetează automat microcontrolerul, ceea ce asigură faptul că microcontrolerul rulează într-un flux continuu de coduri fără a rămâne blocat, atârnat sau în situații de oprire.
Temporizator de trezire personală:
Acesta este un alt periferic cu temporizator care servește unui proces dedicat de sincronizare la fel ca un temporizator de pază. Acest cronometru trezește periodic sistemul atunci când microcontrolerul rulează în modul de consum redus.
Acest periferic cu temporizator poate fi utilizat intern sau folosind periferice externe pentru a trezi microcontrolerul din modul de repaus. Pentru acest proiect, vom folosi Temporizatorul 1 și Temporizatorul 2.
Programarea microcontrolerului Nuvoton N76E003 pentru temporizatoare
Setarea pinilor ca ieșire:
Să începem mai întâi cu secțiunea de ieșire. Folosim două LED-uri, unul este LED-ul de la bord, denumit Test și conectat cu portul P1.4 și un LED extern conectat cu pinul P1.5.
Prin urmare, acești doi pini sunt configurați ca un pin de ieșire pentru a conecta aceste două LED-uri utilizând fragmentele de cod de mai jos.
#define Test_LED P14 #define LED1 P15
Acești doi pini sunt setați ca pin cvasidirecțional în funcția de configurare.
void setup (void) {P14_Quasi_Mode; P15_Quasi_Mode; }
Setarea funcției Timer:
În funcția de configurare, Timerul 2 este necesar pentru a fi configurat pentru a obține ieșirea dorită. Pentru aceasta, vom seta registrul T2MOD cu un factor de divizare a ceasului 1/128 și îl vom folosi într-un mod de întârziere de reîncărcare automată. Iată prezentarea generală a registrului T2MOD-
Registrul T2MOD de 4,5 și 6 biți setează divizorul de ceas cu temporizator 2, iar cel de 7-biți setează modul de reîncărcare automată. Acest lucru se face folosind linia de mai jos -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Aceste două linii sunt definite în fișierul Function_define.h ca
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Acum, aceste linii stabilesc valoarea de sincronizare necesară pentru Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Care este definit în continuare în fișierul Function_define.h ca-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Deci, 16000000 este frecvența cristalului de 16 Mhz care setează întârzierea de 100 ms.
Sub două linii se vor goli Timer 2 Low și High bytes.
TL2 = 0; TH2 = 0;
În cele din urmă, codul de mai jos va activa întreruperea temporizatorului 2 și va porni temporizatorul 2.
set_ET2; // Activați setul de întrerupere Timer2_EA; set_TR2; // Timer2 run
Funcția completă de configurare poate fi văzută în codurile de mai jos-
void setup (void) { P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // Activați setul de întrerupere Timer2_EA; set_TR2; // Timer2 run }
Funcția ISR Timer 2:
Funcția ISR Timer 2 poate fi văzută în codul de mai jos.
void Timer2_ISR (void) întrerupe 5 { clr_TF2; // Clear Timer2 Interrupt Flag LED1 = ~ LED1; // Comutator LED1, conectat în P1.5; }
Cod intermitent și verificarea ieșirii pentru funcționalitatea temporizatorului
La compilare, codul (dat mai jos) a returnat 0 avertisment și 0 erori și l-am intermitent folosind metoda intermitentă implicită din Keil. După aprinderea intermitentă, LED-urile clipeau într-o întârziere definită a temporizatorului, așa cum a fost programat.
Consultați videoclipul de mai jos pentru o demonstrație completă a modului în care funcționează placa pentru acest cod. Sper că ți-a plăcut tutorialul și ai învățat ceva util dacă ai întrebări, lasă-le în secțiunea de comentarii de mai jos. De asemenea, puteți utiliza forumurile noastre pentru a posta alte întrebări tehnice.