- Aparatinės įrangos sąranka ir reikalavimas
- Šviesos diodų sąsajos su „Nuvoton N76E003“ schema
- Laikmačio kaiščiai „Nuvoton N76E003“
- Laikmatis registruojamas „Nuvoton N76E003“
- „Nuvoton N76E003“ laikų tipai
- „Nuvoton N76E003“ mikrovaldiklio programavimas laikmačiams
- Mirksintis kodas ir išvesties tikrinimas laikmačio funkcionalumui
Ankstesnėse „Nuvoton“ mikrovaldiklio pamokose kaip pradžios vadovą naudojome pagrindinę šviesos diodų mirksėjimo programą, taip pat sąsaja su GPIO kaip įvestimi, kad prijungtumėte lytėjimo jungiklį. Naudodamiesi šia pamoka, mes puikiai žinome, kaip sukonfigūruoti „Keil“ projektą ir sukurti aplinką N76E003 „Nuvoton“ mikrovaldikliui programuoti. Atėjo laikas naudoti vidinį mikrovaldiklio bloko periferinį įrenginį ir judėti šiek tiek toliau, naudojant integruotą N76E003 laikmatį.
Ankstesnėje mūsų pamokoje programinės įrangos vėlavimą naudojome tik šviesos diodo mirksėjimui, todėl šioje pamokoje sužinosime, kaip naudotis „Timer delay“ funkcija, taip pat „Timer ISR“ („Interrupt Service Routine“) ir mirksėti dviem atskirais šviesos diodais. Taip pat galite peržiūrėti „Arduino Timer“ mokymo programą ir „PIC Timer“ mokymo programą, kad patikrintumėte, kaip naudoti laikmačius su kitais mikrovaldikliais. Negaišdami daug laiko, įvertinkime, kokios aparatūros sąrankos mums reikia.
Aparatinės įrangos sąranka ir reikalavimas
Kadangi šio projekto reikalavimas yra išmokti laikmačio ISR ir laikmačio uždelsimo funkciją, mes naudosime du šviesos diodus, iš kurių vienas mirksi naudodamas laikmačio uždelsimą „while“ cikle, o kitas - mirksi ISR funkcijos viduje.
Kadangi N76E003 kūrimo plokštėje yra šviesos diodas, šiam projektui reikalingas vienas papildomas šviesos diodas ir srovės ribotuvas, kad ribotų šviesos diodų srovę. Mums reikalingi komponentai -
- Bet kokia šviesos diodo spalva
- 100R rezistorius
Maža to, mums reikia ne tik aukščiau išvardytų komponentų, bet ir N76E003 mikrovaldikliais paremtos kūrimo plokštės, taip pat „ Nu-Link“ programuotojo. Be to, norint prijungti visus komponentus, taip pat reikalingi duonos lentos ir prijungimo laidai.
Šviesos diodų sąsajos su „Nuvoton N76E003“ schema
Kaip matome žemiau pateiktoje schemoje, bandymo šviesos diodas yra prieinamas kūrimo plokštės viduje ir yra prijungtas prie 1.4 prievado. Prie 1.5 prievado prijungtas papildomas šviesos diodas. Rezistorius R3 naudojamas riboti šviesos diodų srovę. Kairiajame kairiajame kampe rodomas programavimo sąsajos ryšys.
Laikmačio kaiščiai „Nuvoton N76E003“
Kaištis diagrama N76E003 galima matyti žemiau image-
Kaip matome, kiekvienas kaištis turi skirtingas specifikacijas ir kiekvieną kaištį galima naudoti keliems tikslams. Tačiau kaištis 1.5, kuris naudojamas kaip LED išvesties kaištis, jis praras PWM ir kitas funkcijas. Bet tai nėra problema, nes šiam projektui nereikia kitos funkcijos.
Priežastis, kodėl 1.5 kaištį pasirinkote kaip išvestį, ir kaištį 1.6, kaip įvestį, yra dėl artimiausio GND ir VDD kaiščių prieinamumo, kad būtų lengva juos prijungti. Tačiau šiame mikrovaldiklyje iš 20 kontaktų 18 kontaktų gali būti naudojami kaip GPIO kaištis, o bet kurie kiti GPIO kaiščiai gali būti naudojami su išvestimi ir įėjimu susijusiems tikslams, išskyrus kaištį 2.0, kuris skirtas įvesties atstatymui ir negali būti produkcija. Visus GPIO kaiščius galima sukonfigūruoti žemiau aprašytu režimu.
Kaip nurodyta duomenų lape, PxM1.n ir PxM2.n yra du registrai, naudojami nustatant įvesties / išvesties prievado valdymo operaciją. Kadangi mes naudojame šviesos diodą ir kaištis reikalingas kaip bendrieji išvesties kaiščiai, kaiščiams naudosime beveik dvikryptį režimą.
Laikmatis registruojamas „Nuvoton N76E003“
Laikmatis yra svarbus dalykas kiekvienam mikrovaldiklio blokui. Mikrovaldiklyje yra integruotas laikmatis. „Nuvoton N76E003“ taip pat yra su 16 bitų laikmačio periferiniais įrenginiais. Tačiau kiekvienas laikmatis naudojamas skirtingiems tikslams, o prieš naudojant bet kokią laikmačio sąsają svarbu žinoti apie laikmatį.
„Nuvoton N76E003“ laikų tipai
0 ir 1 laikmatis:
Šie du laikmačiai „timer0“ ir „timer1“ yra identiški 8051 laikmačiams. Šie du laikmačiai gali būti naudojami kaip bendras laikmatis arba kaip skaitikliai. Šie du laikmačiai veikia keturiais režimais. Be būdas 0, tie laikmačiai veiks 13 bitų Laikmatis / Counter režimu. 1 režime šių dviejų laikmačių skiriamoji geba bus 16 bitų. 2 režime laikmačiai yra sukonfigūruoti kaip automatinio perkrovimo režimas su 8 bitų raiška. 3 režime laikmatis 1 sustabdomas ir laikmatis 0 gali būti naudojamas kaip skaitiklis ir laikmatis tuo pačiu metu.
Iš šių keturių režimų dažniausiai naudojamas 1 režimas. Šie du laikmačiai gali naudoti „Fsys“ (sistemos dažnį) fiksuotu arba iš anksto nustatytu režimu (Fys / 12). Jį taip pat galima nustatyti iš išorinio laikrodžio šaltinio.
2 laikmatis:
2 laikmatis taip pat yra 16 bitų laikmatis, daugiausia naudojamas bangos formos fiksavimui. Jis taip pat naudoja sistemos laikrodį ir gali būti naudojamas įvairiose programose, dalijant laikrodžio dažnį naudojant 8 skirtingas skales. Jis taip pat gali būti naudojamas palyginimo režimu arba PWM generavimui.
Laikmatis 2 gali būti naudojamas automatinio įkrovimo režimu, kaip ir laikmatis 0 ir laikmatis 1.
3 laikmatis:
3 laikmatis taip pat naudojamas kaip 16 bitų laikmatis ir naudojamas UART duomenų perdavimo spartos šaltiniui. Ji taip pat turi automatinio perkrovimo funkciją. Svarbu naudoti šį laikmatį tik nuosekliam ryšiui (UART), jei programai reikalingas UART ryšys. Šiuo atveju patartina nenaudoti šio laikmačio kitiems tikslams, nes laikmatis nustatomas prieštaringai.
Sargybos laikmatis:
„Watchdog“ laikmatis gali būti naudojamas kaip standartinis 6 bitų laikmatis, tačiau jis nenaudojamas šiam tikslui. „Watchdog“ laikmatį kaip bendrosios paskirties laikmatį galima naudoti mažo energijos suvartojimo programose, kuriose mikrovaldiklis dažniausiai būna nenaudojamas.
„Watchdog Timer“, kaip rodo pavadinimas, visada tikrina, ar mikrovaldiklis veikia tinkamai, ar ne. Pakabinto ar sustabdyto mikrovaldiklio atveju „WDT“ („Watchdog Timer“) automatiškai atstato mikrovaldiklį, kuris užtikrina, kad mikrovaldiklis veiktų nepertraukiamu kodo srautu, neužstrigdamas, neužkabindamas ar sustodamas.
Savęs pažadinimo laikmatis:
Tai dar vienas laikmačio periferinis įrenginys, kuris aptarnauja specialų laiko nustatymo procesą, tokį patį kaip ir sarginis laikmatis. Šis laikmatis periodiškai pažadina sistemą, kai mikrovaldiklis veikia mažos galios režimu.
Šis laikmatis gali būti naudojamas viduje arba naudojant išorinius periferinius įrenginius, kad pažadintų mikrovaldiklį iš miego režimo. Šiam projektui naudosime „Timer 1“ ir „Timer 2“.
„Nuvoton N76E003“ mikrovaldiklio programavimas laikmačiams
Kaiščių nustatymas kaip išvesties:
Pirmiausia pradėkime nuo išvesties skyriaus. Mes naudojame du šviesos diodus, vienas yra borto šviesos diodas, pavadintas „Test“, sujungtas su prievadu P1.4, ir išorinis šviesos diodas, sujungtas su kaiščiu P1.5.
Todėl šie du kaiščiai yra sukonfigūruoti kaip išvesties kaištis, norint sujungti tuos du šviesos diodus naudojant toliau pateiktus kodo fragmentus.
#define Test_LED P14 #define LED1 P15
Šie du kaiščiai nustatymo funkcijoje yra nustatyti kaip beveik dvikrypčiai kaiščiai.
negaliojanti sąranka (negaliojanti) {P14_Quasi_Mode; P15_Quasi_Mode; }
Laikmačio funkcijos nustatymas:
Sąrankos funkcijoje reikia sukonfigūruoti laikmatį 2, kad gautumėte norimą išvestį. Tam nustatysime T2MOD registrą su 1/128 laikrodžio dalijimo koeficientu ir naudosime jį automatinio perkrovimo uždelsimo režimu. Čia yra T2MOD registro apžvalga
T2MOD registro 4,5 ir 6 bitai nustatė 2 laikmačio laikrodžio daliklį, o 7 bitai nustatė automatinio perkrovimo režimą. Tai daroma naudojant žemiau esančią eilutę -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Šios dvi eilutės faile „ Function_define.h“ apibrėžiamos kaip
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Dabar šiose eilutėse nustatoma „Timer 2 ISR“ reikalinga laiko vertė.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Tai yra toliau apibrėžta faile Function_define.h
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Taigi 16000000 yra 16 Mhz kristalinis dažnis, nustatantis 100 ms laiko uždelsimą.
Žemiau dviejų eilučių bus ištuštinti 2 laikmačio žemo ir aukšto baitai.
TL2 = 0; TH2 = 0;
Pagaliau žemiau pateiktas kodas įgalins laikmatį 2 nutraukti ir paleisti laikmatį 2.
set_ET2; // Įgalinti „Timer2“ pertraukimo rinkinį_EA; set_TR2; // 2 laikmatis
Visą sąrankos funkciją galima pamatyti žemiau esančiuose
negaliojanti sąranka (negaliojanti) { 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; // Įgalinti „ Timer2“ pertraukimo rinkinį_EA; set_TR2; // 2 laikmatis paleisti }
2 laikmačio ISR funkcija:
„Timer 2 ISR“ funkciją galima pamatyti žemiau esančiame kode.
void Timer2_ISR (negaliojantis) nutraukti 5 { clr_TF2; // Išvalyti laikmatį2 pertraukimo vėliava LED1 = ~ LED1; // LED1 perjungiklis, prijungtas prie P1.5; }
Mirksintis kodas ir išvesties tikrinimas laikmačio funkcionalumui
Sudarytas kodas (pateiktas žemiau) grąžino 0 įspėjimų ir 0 klaidų, ir aš jį mirktelėjau naudodamas numatytąjį „Keil“ mirksėjimo metodą. Mirksėjus šviesos diodai mirksi nustatytu laikmačio uždelsimu, kaip užprogramuota.
Peržiūrėkite toliau pateiktą vaizdo įrašą, kad galėtumėte visiškai parodyti, kaip lenta veikia pagal šį kodą. Tikiuosi, kad jums patiko pamoka ir sužinojote ką nors naudingo, jei turite klausimų, palikite juos toliau pateiktame komentarų skyriuje. Taip pat galite naudoti mūsų forumus kitiems techniniams klausimams pateikti.