oms: osnove programiranja mikrokrmilnikov · analogwrite(pin, duty); funkcija analogwrite nastavi...

2
OMS: O SNOVE PROGRAMIRANJA MIKROKRMILNIKOV Povzetek Mikrokrmilniki so visoko integrirani programabilni elektronski sistemi, ki poleg mikroprocesorja vsebujejo tudi spomin in kopico zunanjih enot, kot so vhodno/izhodne enote (npr. UART za serijsko komunikacijo), števniki, generatorji pulzno-širinsko moduliranih (PWM) signalov, itn. Glavni jezik za programiranje mikrokrmilnikov je C, ker omogoča relativno hitro in učinkovito programiranje (napram npr. zbirnemu jeziku) na dovolj nizkem nivoju. Na vaji bo predstavljen mikrokrmilnik Arduino, pripadajoče razvojno okolje in nekaj enostavnih programov, sestavljenih iz osnovnih funkcij mikrokrmilnika. Arduino Arduino je odprta hardwareska in softwareska platforma za mikrokrmilnike. Vsebuje paleto sistemov, od osnovnih (Arduino UNO, Arduino Micro), prek zmogljivih (Arduino MEGA, Arduino DUE), do mikrokrmilnikov za Internet stvari (Arduino MKR1000). Primer mikrokrmilnika Arduino Micro prikazuje Slika 1. Slika 1: Mikrokrmilnik Arduino Micro. Tehnične specifikacije Tehnične specifikacije se razlikujejo od modela do modela. Za mikrokrmilnik Arduino Micro jih prikazuje Tabela 1. Razporeditev pinov prikazuje Slika 2. SLIKA 2: RAZPOREDITEV PINOV MIKROKRMILNIKA ARDUINO MICRO. Nabor osnovnih funkcij Arduino s svojim razvojnim okoljem razkriva visoko-nivojske C-jevske funkcije za programiranje mikrokrmilnika. Te, skupaj s standardnimi C-jevimi odločitvenimi in krmilnimi strukturami sestavljamo v programe. delay(ms); in delayMicroseconds(us); Funkcija delay čaka v milisekundah določen čas, delayMicroseconds pa v mikrosekundah. Primer: delay(1000); pinMode(pin, način); Funkcija pinMode postavi določen pin v način vhoda (INPUT) ali izhoda (OUTPUT). Primer postavitve pina 5 kot izhoda: pinMode(5, OUTPUT); digitalWrite(pin, stanje); Funkcija digitalWrite pin postavi na visoko (HIGH) ali nizko (LOW) stanje. Primer postavljanja pina 5 v visoko stanje: digitalWrite(5, HIGH); digitalRead(pin); Funkcija digitalRead vrne stanje pina. Vrednost je lahko HIGH ali LOW (kar je ekvivalentno 1 ali 0). Primer branja stanja pina 5 v spremenljivko vrednost: int vrednost = digitalRead(5); Mikrokrmilnik ATmega32U4 Operativna napetost 5V Napajalna napetost (priporočeno) 7-12V (meje) 6-20V Digitalni vhodi/izhodi 20 PWM kanali 7 Analogni vhodi 12 Tok: vhodno/izhodni pin 20 mA Tok: 3V3 pin 50 mA Flash spomin 32 KB (ATmega32U4) of which 4 KB used by bootloader SRAM 2.5 KB (ATmega32U4) EEPROM 1 KB (ATmega32U4) Ura 16 MHz LED diode (pin) 13 Dolžina 48 mm Višina 18 mm Teža 13 g TABELA 1: SPECIFIKACIJE MIKROKRMILNIKA ARDUINO MICRO.

Upload: doanthuy

Post on 29-Aug-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OMS: OSNOVE PROGRAMIRANJA MIKROKRMILNIKOV · analogWrite(pin, duty); Funkcija analogWrite nastavi interni časovnik tako, da le-ta generira pulzno-širinsko moduliran signal na določenem

OMS: OSNOVE PROGRAMIRANJA MIKROKRMILNIKOV Povzetek Mikrokrmilniki so visoko integrirani programabilni elektronski sistemi, ki poleg mikroprocesorja vsebujejo tudi spomin in kopico zunanjih enot, kot so vhodno/izhodne enote (npr. UART za serijsko komunikacijo), števniki, generatorji pulzno-širinsko moduliranih (PWM) signalov, itn. Glavni jezik za programiranje mikrokrmilnikov je C, ker omogoča relativno hitro in učinkovito programiranje (napram npr. zbirnemu jeziku) na dovolj nizkem nivoju. Na vaji bo predstavljen mikrokrmilnik Arduino, pripadajoče razvojno okolje in nekaj enostavnih programov, sestavljenih iz osnovnih funkcij mikrokrmilnika.

Arduino Arduino je odprta hardwareska in softwareska platforma za mikrokrmilnike. Vsebuje paleto sistemov, od osnovnih (Arduino UNO, Arduino Micro), prek zmogljivih (Arduino MEGA, Arduino DUE), do mikrokrmilnikov za Internet stvari (Arduino MKR1000). Primer mikrokrmilnika Arduino Micro prikazuje Slika 1.

Slika 1: Mikrokrmilnik Arduino Micro.

Tehnične specifikacije Tehnične specifikacije se razlikujejo od modela do modela. Za mikrokrmilnik Arduino Micro jih prikazuje Tabela 1.

Razporeditev pinov prikazuje Slika 2.

SLIKA 2: RAZPOREDITEV PINOV MIKROKRMILNIKA ARDUINO MICRO.

Nabor osnovnih funkcij Arduino s svojim razvojnim okoljem razkriva visoko-nivojske C-jevske funkcije za programiranje mikrokrmilnika. Te, skupaj s standardnimi C-jevimi odločitvenimi in krmilnimi strukturami sestavljamo v programe.

delay(ms); in delayMicroseconds(us);

Funkcija delay čaka v milisekundah določen čas, delayMicroseconds pa v mikrosekundah. Primer:

delay(1000);

pinMode(pin, način);

Funkcija pinMode postavi določen pin v način vhoda (INPUT) ali izhoda (OUTPUT). Primer postavitve pina 5 kot izhoda:

pinMode(5, OUTPUT);

digitalWrite(pin, stanje);

Funkcija digitalWrite pin postavi na visoko (HIGH) ali nizko (LOW) stanje. Primer postavljanja pina 5 v visoko stanje:

digitalWrite(5, HIGH);

digitalRead(pin);

Funkcija digitalRead vrne stanje pina. Vrednost je lahko HIGH ali LOW (kar je ekvivalentno 1 ali 0). Primer branja stanja pina 5 v spremenljivko vrednost:

int vrednost = digitalRead(5);

Mikrokrmilnik ATmega32U4 Operativna napetost 5V Napajalna napetost (priporočeno) 7-12V

(meje) 6-20V Digitalni vhodi/izhodi 20 PWM kanali 7 Analogni vhodi 12 Tok: vhodno/izhodni pin 20 mA Tok: 3V3 pin 50 mA

Flash spomin 32 KB (ATmega32U4) of which 4 KB used by bootloader

SRAM 2.5 KB (ATmega32U4) EEPROM 1 KB (ATmega32U4) Ura 16 MHz LED diode (pin) 13 Dolžina 48 mm Višina 18 mm Teža 13 g

TABELA 1: SPECIFIKACIJE MIKROKRMILNIKA ARDUINO MICRO.

Page 2: OMS: OSNOVE PROGRAMIRANJA MIKROKRMILNIKOV · analogWrite(pin, duty); Funkcija analogWrite nastavi interni časovnik tako, da le-ta generira pulzno-širinsko moduliran signal na določenem

analogWrite(pin, duty);

Funkcija analogWrite nastavi interni časovnik tako, da le-ta generira pulzno-širinsko moduliran signal na določenem pinu. Vmesnik je 8-biten, kar pomeni, da je vrednost duty med 0 in 28-1, torej med 0 in 255. Funkcijo analogWrite lahko uporabljamo le z določenimi pini (preverite dokumentacijo). Primer generiranja pulzov s 50% časa v visokem in 50% časa v nizkem stanju:

analogWrite(5, 127);

analogRead(pin);

Funkcija analogRead omogoča branje velikosti zunanje napetosti prek analogno-digitalnega pretvornika (ADC). ADC je 10 biten, zato je vrnjena vrednost med 0 (0V) in 1023 (5V). Funkcijo analogRead lahko uporabljamo le z določenimi pini. Primer branja napetosti v spremenljivko napetost:

int napetost = analogRead(5);

millis(); in micros();

Funkciji millis in micros vrneta čas od začetka izvajanja programa v mili- oz. mikrosekundah.

int preteceniCase = micros();

Serial.begin(baud);

Serial.begin inicializira serijsko komunikacijo z določeno hitrostjo (baud-rate-om). Primer:

Serial.begin(9600);

Serial.print(podatek); in Serial.println(podatek);

Serial.print prek serijske komunikacije izpiše podatek. Serial.println podatku doda še znak za novo vrstico.

Serial.print(»Pozdravljen svet«);

attachInterrupt(virPrekinitve, funkcija, način);

Funkcija attachInterrupt omogoča, da na izvor prekinitve pripnemo funkcijo, ki se izvede vsakič, ko pride do prekinitve. Način prekinitve je lahko LOW, CHANGE, RISING, ali FALLING. Primer klica funkcije »enkoder« vsakič, ko pride do spremembe na prekinitvenem viru 1:

attachInterrupt(1, enkoder, CHANGE);

Programiranje Arduina Arduino okolje privzeto definira dve funkciji: void setup() v katero napišemo vse stvari, ki se morajo zgoditi enkrat, na začetku, in fukcijo void loop(), ki se ponavlja v neskončnost (je znotraj while zanke). Pri osnovnem programiranju dopolnimo vsebino teh dveh funkcij.

Naloge Naloga 1: Poveži na mikrokrmilnik LED diodo in ga sprogramiraj tako, da bo frekvenca utripanja 1 Hz. Povečuj frekvenco utripanja, dokler utripanja s prostim očesom ne bo več moč zaznati. Kakšna je ta frekvenca?

Naloga vsebuje uporabo funkcij pinMode, digitalWrite in delay.

Naloga 2: Vezava ostane enaka kot v nalogi 1. Sprogramiraj mikrokrmilnik tako, da bo LED dioda krmiljena prek pulzno-širinske modulacije tako, da bo vedno bolj svetila in nato vedno manj svetila in to ponavaljala v neskončnost.

Naloga vsebuje uporabo funkcije analogWrite.

Naloga 3: Poveži na mikrokrmilnik še tipko in ga sprogramiraj tako, da vsak pritisk tipke poveča svetlost LED diode.

Naloga vsebuje uporabo funkcije digitalRead.

Naloga 4: Poveži na mikrokrmilnik IR LED diodo in fototranzistor ali pa upor in termistor tako, da bo deloval kot merilnik razdalje ali temperature. Merjeno veličino izpisuj prek serijske komunikacije.

Naloga vsebuje uporabo funkcije analogRead.

Naloga 5: Za primer iz naloge 3 uporabi prekinitve.

Naloga vsebuje uporabo funkcije attachInterrupt.