Programmeerimine
Mikrokontrolleri programmeerimiseks on kasutusel Microchipi poolt loodud programmeerimisekeskkond MPLAB X. Keskkonna käivitamiseks tuleb konsooli sisestada käsk mplab_ide, misjärel keskkond käivitub.
Projekti loomine
Selleks, et alustada kontrolleri programmeerimisega, tuleb esmalt tekitada uus projekt ning see seadistada. Selleks valida File menüüst valik New Project.
Avanenud aknast valida kategooria Microchip Embedded ning projekt Standalone project. Seejärel vajutada Next.
Järgnevalt tuleb loetelust valida sobiv kontroller, antud juhul on see PIC16F690. Kui õige kontroller valitud vajutada Next.
Select Header sammust tuleb midagi valimata vajutada Next.
Edasi tuleb Select Tool valik, kus jaotise Hardware Tools alt teha aktiivseks PICkit2. Seejärel vajutada Next.
Select Compiler sammus tuleb avada HI-TECH PICC rippmenüü ning märgistada vastav kompilaator. Edasi vajutada Next.
<p >Viimaseks tuleb anda projektile sobiv nimi ning määrata projekti asukoht. Samuti ära märkida Set as main project ees olev kastike. Seejärel vajutada Finish. <p >
Projekti failide lisamine
Kui projekt on loodud tuleb projektile lisada faile. Failide tekitamiseks on kaks võimalust. Esiteks võib luua uue faili, mis tähendab, et kogu programmeerimine tuleb teha kasutajal. Teisalt võib projekti lisada juba olemasolevaid faile, mis hõlbustavad programmeerimist. Antud juhul kasutada
teist valikut, ning lisada projektile juba olemasolevaid faile.
Kuna mikrokontrolleri seadistuse õppimine võtaks üksjagu aega, on piisav seadistus lisatavates failides juba tehtud. Samuti on loodud funktsioonid info väljastamiseks 7-segmendi indikaatorile ning LEDidele. Kasutaja ülesandeks on koostada algoritm ning programmeerida vastav kood C keeles.
Vajalikud failid saad SIIT. Alla tuleb tõmmata kõik failid (main.c, config.c ning config.h) ning paigutada projekti peakataloogi. Kui failid on alla tõmmatud, tuleb nad lisada projektile. Selleks teha parem hiireklõps projekti kaustal Source Files ning avanenud menüüst valida Add Existing Item….
Projekti kausta Source Files tuleb lisada main.c ning config.c failid. Fail config.h on päisefail ning
seetõttu tuleks paigutada projekti kataloogi Header Files alla.
Programmi koostamine
Faili main.c kasutamine
Programmeerimiseks tuleb avada fail main.c. Nimetatud fail sisaldab endas juba programmeerimiseks vajaminevaid põhiteeke. Samuti on välja kutsutud mikrokontrolleri PIC16F690 seadistuseks loodud funktsioon configuration(). Projekti lisatud failide config.h ning config.c muutmine programmeerimisel vajalik ei ole, kogu töö toimub failis main.c.
On oluline, et funktsioon configuration() oleks välja kutsutud main funktsioonis esimesena!
Kasutaja programm kirjutatakse configuration(); funktsiooni ning return 0; vahele. Olgugi, et tegu on mikrokontrolleri programmeerimisega, võimaldab kompilaator kasutada kõik tuntud C keele konstruktsioone. Märkusena tasub meeles pidada, et mikrokontroller täidab koodi ainult ühe korra. Seetõttu on etteruttavalt lisatud koodirida while(1){}, mis tähendab, et tegu on lõpmatu tsükliga. Programmeerides tuleks programm koostada nii, et programmi täidesaatev osa paigutatakse eelnimetatud tsüklisse.
Mikrokontrolleri taktigeneraator töötab sagedusel 4MHz. Antud sagedus on liiga kõrge, et lugeda kiiresti muutuvaid väärtusi väljunditel. Selleks aga, et seda siiski teha on programmeeritud vastavad viited nimega delay_100ms ja delay_500ms .
Funktsioonide, globaalmuutujate ning makrode kasutamine
Mikrokontrolleri ülesanne on realiseerida juhtimise algoritme. Juhtimisel peaks olema teada mida juhitakse, kuidas juhitakse ning mille abil. Lihtne näide on järgmine: surunupu abil pannakse stardikompletil põlema LED, kasutades PIC16F690 mikrokontrollerit. Sellel juhul juhitakse LEDi, selleks rakendatakse mikrokontrollerit ning juhtimiseks kasutatakse surunuppu. Eelnev kirjeldus on suurepärane algoritmi mõistmiseks, kuid kas ka selle programmeerimiseks? Ei.
Riistvara komponentide programseks kasutamiseks tuleb vastavad sisendid ja väljundid eelnevalt defineerida. Eelnevalt oli juttu viite tekitamisest, kasutades käsku delay_100ms. Antud juhul on tegemist vaid makroga, mis realiseerib kindla pikkusega tsükli. Selleks, et mikrokontrolleri nuppude ja lülitite kasutamine selgem oleks on loodud mitmeid makrosid. Fail config.h sisaldab kõiki kasutatavate sisendite ning väljundite definitsioone (ehk makrosid) ning failis config.c on nad implementeeritud. Alljärgnevalt on vastavad definitsioonid välja toodud ning lahti seletatud. Sisendid on märgitud rohelisega ning väljundid sinisega.
Definitsioon |
Selgitus |
Definitsioon |
Selgitus |
ON |
Sisselülitatud |
OFF |
Väljalülitatud |
SER |
7-segmendi |
SCLK |
7-segmendi |
RCLK |
7-segmendi |
DS4 |
LED DS4 |
DS3 |
LED DS3 |
DS2 |
LED DS2 |
DS1 |
LED DS1 |
DIP1 |
Esimene |
DIP2 |
Teine DIP |
DIP3 |
Kolmas DIP |
DIP4 |
Neljas DIP |
DIP5 |
Viies DIP |
DIP6 |
Kuues DIP |
DIP7 |
Seitsmes |
DIP8 |
Kaheksas |
BTN |
Surunupp |
SW1 |
Surunupp |
RP1 |
Potentsiomeeter |
Ülalkirjeldatud surunupu abil LEDi sisselülitamise vastav koodinäide on toodud järgnevalt. Sisuline kood on pandud lõpmatusse tsüklisse. Algoritm on realiseeritud kasutades tingimuslauset. Kui muutuja BTN on olekus ON ehk alla vajutatud, LED DS1 põleb. Kui BTN on olekus OFF, siis on LED DS1kustunud. Katseta koodi ka ise!
Nagu eelnevast näitest selgus on nuppude ning LEDide kasutamine suhteliselt lihtne. Neil on vaid kaks olekut: sees (ON) ja väljas (OFF). Seevastu 7-segmendi indikaatori kasutamine enam nii hõlbus ei ole. Lisaks kõigele on failis config.h kirjeldatud ka funktsioonide prototüübid ning globaalsed muutujad. 7-segmendi indikaatori kasutamiseks läheb vaja nii globaalseid muutujaid kui ka funktsioone. Lisaks on loodud funktsioon LEDidele väljastamiseks.
Selleks, et ülaltoodud programmikood arusaamatuks ei jääks on loodud alljärgnev tabel.
Funktsioon | Seletus |
---|---|
configuration(void) | Kohustuslik mikrokontrolleri algseadete funktsioon |
led_out(short leds) | LEDide väljastus funktsioon, mille sisendiks on parameeter leds, tüübist short. |
segm_out(void) | 7-segmendi indikaatori väljastusfunktsioon (lihtne) |
char_out(void) | 7-segmendi indikaatori väljastusfunktsioon (keeruline) |
7-segmendi indikaatori kasutamiseks tuleb kasutada funktsiooni segm_out(void). Selleks tuleb esmalt anda ette segmentidele soovitud väärtused. Väärtuste andmiseks on mõeldud kolm muutujat: segm_sign0, segm_sign1 ning segm_sign2, nagu on kirjas globaalsetes muutujates. Vastavalt allolevale joonisele on segmentide nimed järjestatud vasakult paremale. Segmentidele saab anda väärtusi nii kümnend arvuna (segm_sign0 = 10;), kuueteistkümnend arvuna (segm_sign0 = 0x0A;) kui ka kahend arvuna (segm_sign0 = 0b1010;). Kui vastava segmendi/segmentide väärtused on paika pandud tuleb välja kutsuda char_out(); funktsioon,
mis väljastab väärtused segmentidele. Segmendi punkti kasutamiseks tuleb vastavale segmendi punkti muutujale (segm_dot0, segm_dot1, segm_dot2) anda tõeväärtus (ON/OFF).
Lisaks 7-segmendi indikaatorile väärtuste väljastamiseks on ka funktsioon väärtuste väljastamiseks LEDidele. Funktsioon led_out() on mõeldud kümnend arvude väljastamiseks LEDidele kahend koodina. Funktsioonile antakse vastav väärtus ette parameetrina. Näiteks led_out(10);.
Näiteprogramm
Selleks, et mõista kasutatavaid funktsioone ning stardikomplekti komponente paremini on koostatud järgnev näiteprogramm. Programm väljastab LEDidele summa, mille moodustavad DIP1 + DIP2 + DIP3 + DIP4 + DIP5 + BTN. 7-segmendi punkti panevad vastavalt paika DIP6, DIP7 ja DIP8 ning segmentidele antakse väärtused A, B ja C. Funktsioonide paremaks mõistmiseks aitab ka nende koodi uurimine.
Spetsiaalsed sümbolid
Selleks, et väljastada 7-segmendi indikaatorile väärtusi 0-15 tuleb vastavale segmendile ainult vastav väärtus ette anda. Mis teha aga siis, kui segment ei peaks üldse põlema või tahetakse segmendile anda tähe väärtust L. Kõik segmentidele antavad väärtused on kirjutatud püsimällu 8-bitiste koodidena. Antud hetkel on lisaks väärtustele 0-15 sinna lisatud veel järgmised väärtused:
Sümbol | Sümboli väljakutse väärtus |
---|---|
NULL (ei põle) | 16 |
MIINUS | 17 |
FULL (kõik põlevad) | 18 |
H | 19 |
L | 20 |
P | 21 |
I | 22 |
U | 23 |
N | 24 |
Näitena tahame anda segmentidele väärtust NULL P I .
Programmi sisestamine mikrokontrollerisse
Kui programm on koostatud tuleb ta kompileerida. Selleks tuleks valida tööriistaribalt või Run menüüst nupp Clean and Build Main Project. Kompileerimisel näitab konsool programmis esinevaid tõrkeid, samuti on võimalik jälgida mikrokontrolleri mälukasutust.
Enne programmi mikrokontrollerisse sisestamist peab veenduma, et DIP2 lüliti oleks OFF olekus. Vastasel korral annab programm veateate ning programmeerimine ei õnnestu.
Korrektselt kompileerinud programmi mikrokontrollerisse sisestamiseks valida tööriistaribalt Make and Program Device Main Project või Run menüüst Run Main Project. Olenevalt programmi mahukusest võtab programmeerimine ligikaudu 1-5 sekundit aega. Programmeerimisel hakkab programmaatoril põlema punane tuli, mis tähistab mõistet Busy. Kui see on kustunud, on kontroller programmeeritud.
7-segmendi indikaatori intensiivsel kasutamisel võib stardikomplektil asuv pingeregulaator tugevalt kuumeneda. Vastaval korral veenduda, et seadme radiaator
(jahutuselement) oleks vabalthingav (ei puutuks vastu teisi komponente).