- Pag-setup at Kinakailangan sa Hardware
- Circuit Diagram para sa LED Interfacing kasama ang Nuvoton N76E003
- Mga Timer Pins sa Nuvoton N76E003
- Mga Rehistro ng Timer sa Nuvoton N76E003
- Mga Uri ng Times sa Nuvoton N76E003
- Programming Nuvoton N76E003 Microcontroller para sa Mga Timer
- Flashing Code at Pag-verify ng Output para sa Pag-andar ng Timer
Sa aming nakaraang mga tutorial sa Nuvoton Microcontroller, gumamit kami ng isang pangunahing LED blinking program bilang gabay sa pagsisimula at nag-interfaced din ng GPIO bilang isang input upang ikonekta ang isang tactile switch. Sa tutorial na iyon, lubos naming nalalaman kung paano i-configure ang proyekto ng Keil at i-set up ang kapaligiran para sa pag-program ng N76E003 Nuvoton microcontroller. Panahon na upang gumamit ng isang panloob na paligid ng yunit ng microcontroller at ilipat nang kaunti pa sa pamamagitan ng paggamit ng inbuilt na Timer ng N76E003.
Sa aming nakaraang tutorial, gumamit lamang kami ng isang pagkaantala ng software upang kumurap ng isang LED, kaya sa tutorial na ito, matututunan namin kung paano gamitin ang Timer na pagpapaandar na pagpapaandar pati na rin ang Timer ISR (Interrupt Service Routine) at kumurap ng dalawang indibidwal na LEDs. Maaari mo ring suriin ang Arduino Timer Tutorial at PIC Timer tutorial upang suriin kung paano gamitin ang mga timer sa iba pang mga microcontroller. Nang walang pag-aaksaya ng oras suriin natin kung anong uri ng pag-setup ng hardware ang kailangan natin.
Pag-setup at Kinakailangan sa Hardware
Tulad ng kinakailangan ng proyektong ito ay upang malaman ang Timer ISR at ang pag-andar ng pagkaantala ng timer, gagamit kami ng dalawang LEDs, kung saan ang isa ay mai-blink gamit ang pagkaantala ng timer sa habang loop at ang isa pa ay mai-blink sa loob ng ISR function.
Dahil ang isang LED ay magagamit sa N76E003 development board, ang proyektong ito ay nangangailangan ng isang karagdagang LED at ang kasalukuyang nililimitahan ang risistor upang limitahan ang kasalukuyang LED. Ang mga sangkap na kailangan namin -
- Anumang kulay ng LED
- 100R risistor
Hindi banggitin, bukod sa mga sangkap sa itaas, kailangan namin ng N76E003 microcontroller based development board pati na rin ang Nu-Link Programmer. Bilang karagdagan, kinakailangan din ang mga breadboard at hookup wire para sa pagkonekta sa lahat ng mga bahagi.
Circuit Diagram para sa LED Interfacing kasama ang Nuvoton N76E003
Tulad ng nakikita natin sa iskemang nasa ibaba, ang Test LED ay magagamit sa loob ng development board at ito ay konektado sa port 1.4. Ang isang karagdagang LED ay konektado sa port 1.5. Ginagamit ang risistor R3 upang limitahan ang kasalukuyang LED. Sa matinding kaliwa, ipinapakita ang koneksyon sa interface ng programa.
Mga Timer Pins sa Nuvoton N76E003
Ang diagram ng pin ng N76E003 ay makikita sa larawan sa ibaba-
Tulad ng nakikita natin, ang bawat pin ay may iba't ibang mga pagtutukoy at ang bawat pin ay maaaring magamit para sa maraming layunin. Gayunpaman, ang pin 1.5 na ginagamit bilang isang LED output pin, mawawala ang PWM at iba pang pagpapaandar. Ngunit, iyon ay hindi isang problema dahil ang isa pang pagpapaandar ay hindi kinakailangan para sa proyektong ito.
Ang dahilan sa likod ng pagpili ng pin 1.5 bilang output at pin 1.6 bilang input ay dahil sa pinakamalapit na pagkakaroon ng mga pin ng GND at VDD para sa madaling koneksyon. Gayunpaman, sa microcontroller na ito sa labas ng 20 mga pin, ang 18 mga pin ay maaaring magamit bilang isang GPIO pin at anumang iba pang mga GPIO pin ay maaaring magamit para sa mga hangarin na nauugnay sa output at Input, maliban sa pin 2.0 na nakatuon na ginamit para sa I-reset ang input at hindi ito maaaring gamitin bilang output Ang lahat ng mga GPIO pin ay maaaring mai-configure sa mode na inilarawan sa ibaba.
Tulad ng datasheet, PxM1.n, at PxM2.n ay dalawang rehistro na ginagamit upang matukoy ang kontrol ng operasyon ng I / O port. Dahil gumagamit kami ng LED at kailangan namin ang pin bilang pangkalahatang mga output pin, samakatuwid gagamitin namin ang Quasi-bidirectional mode para sa mga pin.
Mga Rehistro ng Timer sa Nuvoton N76E003
Ang timer ay isang mahalagang bagay para sa anumang yunit ng microcontroller. Ang Microcontroller ay may kasamang in-built timer peripheral. Ang nuvoton N76E003 ay may kasamang 16-bit timer peripherals. Gayunpaman, ang bawat timer ay ginagamit para sa iba't ibang mga layunin, at bago gamitin ang anumang interface ng timer mahalagang malaman ang tungkol sa timer.
Mga Uri ng Times sa Nuvoton N76E003
Timer 0 at 1:
Ang dalawang timer na timer0 at timer1 ay magkapareho sa 8051 timer. Ang dalawang timer na ito ay maaaring magamit bilang isang pangkalahatang timer o bilang mga counter. Ang dalawang timer na ito ay nagpapatakbo sa apat na mga mode. Sa Mode 0, ang mga timer na iyon ay gagana sa 13-bit Timer / Counter mode. Sa Mode 1, ang resolusyon na bit ng dalawang timer na iyon ay magiging 16-bit. Sa Mode 2, ang mga timer ay na-configure bilang isang auto-reload mode na may isang resolusyon na 8-bit. Sa Mode 3, ang timer 1 ay tumitigil at ang timer 0 ay maaaring magamit bilang isang counter at timer nang sabay.
Sa labas ng apat na mode na ito, ang Mode 1 ay ginagamit sa karamihan ng mga kaso. Ang dalawang timer na ito ay maaaring gumamit ng Fsys (Frequency ng System) sa naayos o prescaled mode (Fys / 12). Maaari rin itong mai-orasan mula sa isang panlabas na mapagkukunan ng orasan.
Timer 2:
Ang timer 2 ay isa ring 16-Bit timer na pangunahing ginagamit para sa pagkuha ng alon. Gumagamit din ito ng system orasan at maaaring magamit sa iba't ibang mga application sa pamamagitan ng paghahati ng dalas ng orasan gamit ang 8 magkakaibang mga antas. Maaari din itong magamit sa paghahambing mode o upang makabuo ng PWM.
Parehas tulad ng Timer 0 at Timer 1, ang Timer 2 ay maaaring magamit sa auto-reload mode.
Timer 3:
Ginagamit din ang timer 3 bilang isang 16-bit timer at ginagamit ito para sa mapagkukunan ng rate ng baud rate para sa UART. Mayroon din itong tampok na auto-reload. Mahalagang gamitin lamang ang timer na ito para sa Serial na komunikasyon (UART) kung ang aplikasyon ay nangangailangan ng komunikasyon sa UART. Maipapayo na huwag gamitin ang timer na ito para sa iba pang mga layunin sa naturang kaso dahil sa magkasalungat na proseso sa pag-setup ng timer.
Timer ng Watchdog:
Ang Watchdog Timer ay maaaring magamit bilang isang karaniwang 6-bit timer ngunit hindi ito ginagamit para sa hangaring ito. Ang paggamit ng Watchdog timer bilang isang timer ng pangkalahatang layunin ay nalalapat para sa mga aplikasyon ng mababang paggamit ng kuryente kung saan mananatili ang microcontroller sa idle mode.
Ang Watchdog Timer, tulad ng ipinahihiwatig ng pangalan, laging suriin kung ang microcontroller ay gumagana nang maayos o hindi. Sa kaso ng isang nakabitin o nahinto na microcontroller, awtomatikong i-reset ng WDT (Watchdog Timer) ang microcontroller na tinitiyak na ang microcontroller ay tumatakbo sa isang tuluy-tuloy na daloy ng code nang hindi na-stuck, nabitin o sa mga nahinto na sitwasyon.
Timer ng Paggising sa Sarili:
Ito ay isa pang peripheral ng timer na naghahatid ng isang nakatuon na proseso ng tiyempo na kapareho ng isang timer ng tagabantay. Ang timer na ito, regular na gigisingin ang system kapag tumatakbo ang microcontroller sa mababang mode ng kuryente.
Ang timer peripheral na ito ay maaaring magamit sa loob o paggamit ng panlabas na mga peripheral upang gisingin ang microcontroller mula sa mode na pagtulog. Para sa proyektong ito, gagamitin namin ang Timer 1 at Timer 2.
Programming Nuvoton N76E003 Microcontroller para sa Mga Timer
Itinatakda ang Mga Pin bilang Output:
Magsimula muna tayo sa seksyon ng output. Gumagamit kami ng dalawang LEDs, ang isa ay onboard LED, pinangalanang Test, at konektado sa port P1.4 at isang panlabas na LED na konektado sa pin P1.5.
Samakatuwid, ang dalawang mga pin na ito ay naka-configure bilang isang output pin upang ikonekta ang dalawang LEDs sa pamamagitan ng paggamit ng mga snippet ng code sa ibaba.
#define Test_LED P14 # tukuyin ang LED1 P15
Ang dalawang mga pin na ito ay itinakda bilang Quasi-bidirectional pin sa pag-andar ng pag-setup.
void setup (void) {P14_Quasi_Mode; P15_Quasi_Mode; }
Pagtatakda ng Pag-andar ng Timer:
Sa pag-andar ng pag-setup, kinakailangan ang Timer 2 upang mai-configure upang makuha ang nais na output. Para sa mga ito, itatakda namin ang rehistro ng T2MOD na may 1/128 na oras na paghati sa orasan at gamitin ito sa isang mode na pagka-antala ng auto-reload. Narito ang pangkalahatang-ideya ng rehistro ng T2MOD-
Ang 4,5, at ika-6 na bit ng rehistro ng T2MOD ay nagtakda ng timer 2 na divider at itinakda ng ika-7 na bit ang mode na auto-reload. Ginagawa ito gamit ang linya sa ibaba -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Ang dalawang linya na ito ay tinukoy sa Function_define.h file bilang
# tukuyin ang TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Ngayon, itinatakda ng mga linyang ito ang kinakailangang halaga ng tiyempo para sa Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Alin ang karagdagang tinukoy sa Function_define.h file bilang-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Kaya, 16000000 ay ang dalas ng kristal ng 16 Mhz na kung saan ay ang pagse-set up ng pagkaantala ng 100 ms oras.
Sa ibaba ng dalawang linya ay walang laman ang Timer 2 Mababang at Mataas na mga byte.
TL2 = 0; TH2 = 0;
Sa wakas sa ibaba ng code ay paganahin ang timer 2 makagambala at simulan ang Timer 2.
itakda_ET2; // Paganahin ang Timer2 makagambala set_EA; set_TR2; // Timer2 run
Ang kumpletong pag-andar ng pag-setup ay maaaring makita sa mga code sa ibaba-
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; itakda_ET2; // Paganahin ang Timer2 makagambala set_EA; set_TR2; // Timer2 run }
Timer 2 ISR Function:
Ang pag-andar ng Timer 2 ISR ay makikita sa ibaba ng code.
walang bisa ang Timer2_ISR (walang bisa) makagambala sa 5 { clr_TF2; // Clear Timer2 Interrupt Flag LED1 = ~ LED1; // LED1 toggle, konektado sa P1.5; }
Flashing Code at Pag-verify ng Output para sa Pag-andar ng Timer
Ang code (ibinigay sa ibaba) kapag naipon ay bumalik ng babala at 0 Mga Error at na-flash ko ito gamit ang default na flashing na pamamaraan sa Keil. Matapos ang pag-flash ng mga LED ay kumikislap sa isang tinukoy na pagkaantala ng timer bilang naka-program.
Suriin ang video na ibinigay sa ibaba para sa isang kumpletong pagpapakita kung paano gumagana ang board para sa code na ito. Inaasahan kong nasiyahan ka sa tutorial at natutunan ang isang bagay na kapaki-pakinabang kung mayroon kang anumang mga katanungan iwan ang mga ito sa seksyon ng komento sa ibaba. Maaari mo ring gamitin ang aming mga forum upang mag-post ng iba pang mga teknikal na katanungan.