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.

Uus projekt

Avanenud aknast valida kategooria Microchip Embedded ning projekt Standalone project. Seejärel vajutada Next.
Standalone projekt

Järgnevalt tuleb loetelust valida sobiv kontroller, antud juhul on see PIC16F690. Kui õige kontroller valitud vajutada Next.

Kontrolleri valik

Select Header sammust tuleb midagi valimata vajutada Next.

Header

Edasi tuleb Select Tool valik, kus jaotise Hardware Tools alt teha aktiivseks PICkit2. Seejärel vajutada Next.

Riistvara vahendid

Select Compiler sammus tuleb avada HI-TECH PICC rippmenüü ning märgistada vastav kompilaator. Edasi vajutada Next.

Kompilaatori valik

<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 lõpetamine

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….

Failide lisamine

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.
Failid paigas

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 .

Viited

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.

Tabel 1. Sisendite/väljundite definitsioonid

Definitsioon

Selgitus

Definitsioon

Selgitus

ON

Sisselülitatud
olek

OFF

Väljalülitatud
olek

SER

7-segmendi
indikaatori andmeväljund

SCLK

7-segmendi
indikaatori süsteemi takteerimis väljund

RCLK

7-segmendi
indikaatori andmeväljastus takteerimis väljund

DS4

LED DS4

DS3

LED DS3

DS2

LED DS2

DS1

LED DS1

DIP1

Esimene
DIP lüliti

DIP2

Teine DIP
lüliti

DIP3

Kolmas DIP
lüliti

DIP4

Neljas DIP
lüliti

DIP5

Viies DIP
lüliti

DIP6

Kuues DIP
lüliti

DIP7

Seitsmes
DIP lüliti

DIP8

Kaheksas
DIP lüliti

BTN

Surunupp
DIP lülitite all

SW1

Surunupp
SW1 (antud hetkel disfunktsionaalne)

RP1

Potentsiomeeter
RP1

Ü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!

Nupp ja LED

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.

Funktsioonide prototüübid ja globaalsed muutujad

Selleks, et ülaltoodud programmikood arusaamatuks ei jääks on loodud alljärgnev tabel.

Tabel 2. Funktsioonide seletus
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).

Segmendid

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.

Näiteprogramm

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:

Tabel 3. Spetsiaalsed sümbolid
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 .

PI

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.

Run menüü

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).